]> git.proxmox.com Git - ceph.git/commitdiff
Import ceph 15.2.8
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 17 Dec 2020 11:55:37 +0000 (12:55 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 17 Dec 2020 11:55:37 +0000 (12:55 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
1032 files changed:
ceph/.github/CODEOWNERS
ceph/.readthedocs.yml [new file with mode: 0644]
ceph/CMakeLists.txt
ceph/PendingReleaseNotes
ceph/admin/build-doc
ceph/admin/doc-read-the-docs.txt [new file with mode: 0644]
ceph/admin/doc-requirements.txt
ceph/alpine/APKBUILD
ceph/ceph.spec
ceph/ceph.spec.in
ceph/changelog.upstream
ceph/debian/cephadm.install
ceph/debian/control
ceph/debian/librgw-dev.install
ceph/debian/librgw2.install
ceph/debian/rules
ceph/doc/architecture.rst
ceph/doc/ceph-volume/intro.rst
ceph/doc/ceph-volume/lvm/batch.rst
ceph/doc/ceph-volume/lvm/prepare.rst
ceph/doc/cephadm/adoption.rst
ceph/doc/cephadm/client-setup.rst
ceph/doc/cephadm/concepts.rst
ceph/doc/cephadm/drivegroups.rst
ceph/doc/cephadm/install.rst
ceph/doc/cephadm/monitoring.rst
ceph/doc/cephadm/operations.rst
ceph/doc/cephadm/troubleshooting.rst
ceph/doc/cephfs/cephfs-io-path.rst
ceph/doc/cephfs/fs-nfs-exports.rst
ceph/doc/cephfs/fs-volumes.rst
ceph/doc/cephfs/health-messages.rst
ceph/doc/conf.py
ceph/doc/dev/deduplication.rst
ceph/doc/dev/msgr2.rst
ceph/doc/install/ceph-deploy/quick-ceph-deploy.rst
ceph/doc/install/ceph-deploy/quick-cephfs.rst
ceph/doc/install/ceph-deploy/quick-common.rst
ceph/doc/install/get-packages.rst
ceph/doc/install/install-vm-cloud.rst
ceph/doc/install/manual-deployment.rst
ceph/doc/install/manual-freebsd-deployment.rst
ceph/doc/man/8/cephadm.rst
ceph/doc/man/8/osdmaptool.rst
ceph/doc/man/8/rbd.rst
ceph/doc/mgr/dashboard.rst
ceph/doc/mgr/orchestrator.rst
ceph/doc/rados/api/librados-intro.rst
ceph/doc/rados/configuration/ceph-conf.rst
ceph/doc/rados/configuration/mon-config-ref.rst
ceph/doc/rados/configuration/mon-osd-interaction.rst
ceph/doc/rados/configuration/network-config-ref.rst
ceph/doc/rados/operations/cache-tiering.rst
ceph/doc/rados/operations/devices.rst
ceph/doc/rados/operations/monitoring-osd-pg.rst
ceph/doc/rados/operations/placement-groups.rst
ceph/doc/rados/operations/user-management.rst
ceph/doc/radosgw/STS.rst
ceph/doc/radosgw/STSLite.rst
ceph/doc/radosgw/admin.rst
ceph/doc/radosgw/frontends.rst
ceph/doc/radosgw/index.rst
ceph/doc/radosgw/oidc.rst [new file with mode: 0644]
ceph/doc/radosgw/swift/tutorial.rst
ceph/doc/radosgw/vault.rst
ceph/doc/rbd/index.rst
ceph/doc/rbd/libvirt.rst
ceph/doc/rbd/qemu-rbd.rst
ceph/doc/rbd/rbd-cloudstack.rst
ceph/doc/rbd/rbd-kubernetes.rst
ceph/doc/rbd/rbd-live-migration.rst
ceph/doc/rbd/rbd-openstack.rst
ceph/doc/rbd/rbd-persistent-cache.rst
ceph/doc/rbd/rbd-snapshot.rst
ceph/doc/start/intro.rst
ceph/doc/start/quick-rbd.rst
ceph/monitoring/grafana/dashboards/host-details.json
ceph/qa/cephfs/clusters/3-mds.yaml
ceph/qa/cephfs/clusters/9-mds.yaml
ceph/qa/cephfs/conf/client.yaml
ceph/qa/cephfs/conf/mds.yaml
ceph/qa/cephfs/overrides/session_timeout.yaml [new file with mode: 0644]
ceph/qa/config/rados.yaml
ceph/qa/debug/mgr.yaml
ceph/qa/distros/all/rhel_8.2.yaml [new file with mode: 0644]
ceph/qa/distros/all/ubuntu_18.04_podman.yaml
ceph/qa/distros/supported-all-distro/rhel_8.2.yaml [new symlink]
ceph/qa/distros/supported-all-distro/rhel_8.yaml [deleted symlink]
ceph/qa/distros/supported-random-distro$/rhel_latest.yaml
ceph/qa/distros/supported/rhel_latest.yaml
ceph/qa/erasure-code/ec-feature-plugins-v3.yaml [deleted file]
ceph/qa/machine_types/schedule_rados_ovh.sh
ceph/qa/machine_types/schedule_subset.sh
ceph/qa/rbd/krbd_blkroset.t
ceph/qa/standalone/mon/mon-handle-forward.sh
ceph/qa/standalone/mon/mon-last-epoch-clean.sh
ceph/qa/standalone/osd/osd-rep-recov-eio.sh
ceph/qa/suites/fs/basic_functional/tasks/cap-flush.yaml
ceph/qa/suites/fs/basic_functional/tasks/volumes.yaml
ceph/qa/suites/fs/basic_workload/overrides/session_timeout.yaml [new symlink]
ceph/qa/suites/fs/thrash/overrides/session_timeout.yaml [new symlink]
ceph/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/no.yaml
ceph/qa/suites/fs/upgrade/featureful_client/old_client/overrides/multimds/yes.yaml
ceph/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/no.yaml
ceph/qa/suites/fs/upgrade/featureful_client/upgraded_client/overrides/multimds/yes.yaml
ceph/qa/suites/fs/verify/overrides/session_timeout.yaml [new symlink]
ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_netns.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_symlinks.yaml [new file with mode: 0644]
ceph/qa/suites/rados/cephadm/smoke/fixed-2.yaml
ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/defaut.yaml [new file with mode: 0644]
ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/repo_digest.yaml [new file with mode: 0644]
ceph/qa/suites/rados/cephadm/upgrade/2-start-upgrade.yaml [deleted file]
ceph/qa/suites/rados/cephadm/upgrade/3-start-upgrade.yaml [new file with mode: 0644]
ceph/qa/suites/rados/cephadm/upgrade/3-wait.yaml [deleted file]
ceph/qa/suites/rados/cephadm/upgrade/4-wait.yaml [new file with mode: 0644]
ceph/qa/suites/rados/monthrash/ceph.yaml
ceph/qa/suites/rados/thrash-old-clients/1-install/hammer.yaml [deleted file]
ceph/qa/suites/rados/thrash-old-clients/distro$/centos_7.6.yaml [deleted symlink]
ceph/qa/suites/rados/thrash-old-clients/distro$/ubuntu_18.04.yaml [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/% [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/.qa [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/clusters/+ [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/clusters/.qa [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/clusters/fix-2.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/clusters/openstack.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/pool/ceph_and_immutable_object_cache.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/supported-random-distro$ [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/workloads/.qa [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/workloads/c_api_tests_with_defaults.yaml [new symlink]
ceph/qa/suites/rbd/immutable-object-cache/workloads/fio_on_immutable_object_cache.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/immutable-object-cache/workloads/qemu_on_immutable_object_cache_and_thrash.yaml [new file with mode: 0644]
ceph/qa/suites/teuthology/buildpackages/tasks/branch.yaml [deleted file]
ceph/qa/tasks/ceph.conf.template
ceph/qa/tasks/ceph.py
ceph/qa/tasks/ceph_manager.py
ceph/qa/tasks/ceph_test_case.py
ceph/qa/tasks/cephadm.py
ceph/qa/tasks/cephadm_cases/test_cli.py
ceph/qa/tasks/cephfs/cephfs_test_case.py
ceph/qa/tasks/cephfs/filesystem.py
ceph/qa/tasks/cephfs/fuse_mount.py
ceph/qa/tasks/cephfs/mount.py
ceph/qa/tasks/cephfs/test_admin.py
ceph/qa/tasks/cephfs/test_client_limits.py
ceph/qa/tasks/cephfs/test_misc.py
ceph/qa/tasks/cephfs/test_nfs.py
ceph/qa/tasks/cephfs/test_scrub_checks.py
ceph/qa/tasks/cephfs/test_volume_client.py
ceph/qa/tasks/cephfs/test_volumes.py
ceph/qa/tasks/immutable_object_cache.py [new file with mode: 0644]
ceph/qa/tasks/immutable_object_cache_thrash.py [new file with mode: 0644]
ceph/qa/tasks/mgr/dashboard/test_ganesha.py
ceph/qa/tasks/mgr/dashboard/test_osd.py
ceph/qa/tasks/mgr/dashboard/test_rgw.py
ceph/qa/tasks/mgr/test_dashboard.py
ceph/qa/tasks/rbd_fio.py
ceph/qa/tasks/vstart_runner.py
ceph/qa/workunits/cephadm/test_adoption.sh
ceph/qa/workunits/cephadm/test_cephadm.sh
ceph/qa/workunits/cephtool/test.sh
ceph/qa/workunits/mon/rbd_snaps_ops.sh
ceph/qa/workunits/rbd/krbd_udev_netns.sh [new file with mode: 0755]
ceph/qa/workunits/rbd/krbd_udev_symlinks.sh [new file with mode: 0755]
ceph/qa/workunits/rbd/rbd-nbd.sh
ceph/qa/workunits/rbd/rbd_mirror_helpers.sh
ceph/qa/workunits/rgw/test_rgw_orphan_list.sh
ceph/run-make-check.sh
ceph/src/.git_version
ceph/src/CMakeLists.txt
ceph/src/ceph-rbdnamer
ceph/src/ceph-volume/ceph_volume/api/lvm.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/batch.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/common.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/main.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/prepare.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/__init__.py [deleted file]
ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py [deleted file]
ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py [deleted file]
ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/strategies.py [deleted file]
ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py [deleted file]
ceph/src/ceph-volume/ceph_volume/devices/lvm/zap.py
ceph/src/ceph-volume/ceph_volume/devices/simple/activate.py
ceph/src/ceph-volume/ceph_volume/devices/simple/scan.py
ceph/src/ceph-volume/ceph_volume/drive_group/main.py
ceph/src/ceph-volume/ceph_volume/inventory/main.py
ceph/src/ceph-volume/ceph_volume/log.py
ceph/src/ceph-volume/ceph_volume/main.py
ceph/src/ceph-volume/ceph_volume/tests/api/test_lvm.py
ceph/src/ceph-volume/ceph_volume/tests/conftest.py
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/__init__.py [deleted file]
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py [deleted file]
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_filestore.py [deleted file]
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_validate.py [deleted file]
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_common.py [new file with mode: 0644]
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_prepare.py
ceph/src/ceph-volume/ceph_volume/tests/functional/batch/playbooks/test_explicit.yml
ceph/src/ceph-volume/ceph_volume/tests/test_inventory.py
ceph/src/ceph-volume/ceph_volume/tests/test_main.py
ceph/src/ceph-volume/ceph_volume/tests/util/test_arg_validators.py
ceph/src/ceph-volume/ceph_volume/tests/util/test_device.py
ceph/src/ceph-volume/ceph_volume/util/arg_validators.py
ceph/src/ceph-volume/ceph_volume/util/device.py
ceph/src/ceph-volume/ceph_volume/util/disk.py
ceph/src/ceph-volume/ceph_volume/util/lsmdisk.py [new file with mode: 0644]
ceph/src/ceph-volume/ceph_volume/util/prepare.py
ceph/src/ceph-volume/ceph_volume/util/templates.py
ceph/src/ceph.in
ceph/src/cephadm/cephadm
ceph/src/cephadm/samples/custom_container.json [new file with mode: 0644]
ceph/src/cephadm/tests/test_cephadm.py
ceph/src/cephadm/tox.ini
ceph/src/client/Client.cc
ceph/src/client/Client.h
ceph/src/client/Dentry.h
ceph/src/client/Inode.cc
ceph/src/client/Inode.h
ceph/src/cls/rbd/cls_rbd_types.cc
ceph/src/cls/rbd/cls_rbd_types.h
ceph/src/cls/rgw_gc/cls_rgw_gc.cc
ceph/src/common/Cond.h
ceph/src/common/WorkQueue.h
ceph/src/common/admin_socket.cc
ceph/src/common/admin_socket.h
ceph/src/common/ceph_context.cc
ceph/src/common/ceph_context.h
ceph/src/common/cohort_lru.h
ceph/src/common/legacy_config_opts.h
ceph/src/common/options.cc
ceph/src/common/strtol.h
ceph/src/compressor/zlib/CMakeLists.txt
ceph/src/compressor/zstd/CompressionPluginZstd.h
ceph/src/compressor/zstd/ZstdCompressor.h
ceph/src/erasure-code/CMakeLists.txt
ceph/src/erasure-code/isa/CMakeLists.txt
ceph/src/include/CMakeLists.txt
ceph/src/include/ceph_features.h
ceph/src/include/config-h.in.cmake
ceph/src/include/encoding.h
ceph/src/include/krbd.h
ceph/src/include/mempool.h
ceph/src/include/rbd/librbd.h
ceph/src/include/rgw/librgw_admin_user.h [deleted file]
ceph/src/isa-l/.drone.yml [new file with mode: 0644]
ceph/src/isa-l/.travis.yml
ceph/src/isa-l/CONTRIBUTING.md
ceph/src/isa-l/Doxyfile
ceph/src/isa-l/LICENSE
ceph/src/isa-l/Makefile.am
ceph/src/isa-l/Makefile.nmake
ceph/src/isa-l/Makefile.unx
ceph/src/isa-l/README.md
ceph/src/isa-l/Release_notes.txt
ceph/src/isa-l/configure.ac
ceph/src/isa-l/crc/Makefile.am
ceph/src/isa-l/crc/aarch64/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc16_t10dif_copy_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc16_t10dif_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_hw_fold.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_hw_fold.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_norm_common_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc32_refl_common_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.S [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_norm_common_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc64_refl_common_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc_aarch64_dispatcher.c [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc_common_pmull.h [new file with mode: 0644]
ceph/src/isa-l/crc/aarch64/crc_multibinary_arm.S [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_01.asm
ceph/src/isa-l/crc/crc16_t10dif_02.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_by4.asm
ceph/src/isa-l/crc/crc16_t10dif_copy_by4.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_copy_by4_02.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_copy_perf.c [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_copy_test.c [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_op_perf.c [new file with mode: 0644]
ceph/src/isa-l/crc/crc16_t10dif_perf.c
ceph/src/isa-l/crc/crc16_t10dif_test.c
ceph/src/isa-l/crc/crc32_funcs_test.c [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_gzip_refl_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_gzip_refl_by8.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_gzip_refl_by8_02.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_gzip_refl_perf.c [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_ieee_01.asm
ceph/src/isa-l/crc/crc32_ieee_02.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_ieee_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc32_ieee_by4.asm
ceph/src/isa-l/crc/crc32_ieee_perf.c
ceph/src/isa-l/crc/crc32_ieee_test.c [deleted file]
ceph/src/isa-l/crc/crc32_iscsi_00.asm
ceph/src/isa-l/crc/crc32_iscsi_01.asm
ceph/src/isa-l/crc/crc32_iscsi_perf.c
ceph/src/isa-l/crc/crc32_iscsi_test.c [deleted file]
ceph/src/isa-l/crc/crc64_base.c
ceph/src/isa-l/crc/crc64_ecma_norm_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_ecma_norm_by8.asm
ceph/src/isa-l/crc/crc64_ecma_refl_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_ecma_refl_by8.asm
ceph/src/isa-l/crc/crc64_funcs_perf.c
ceph/src/isa-l/crc/crc64_funcs_test.c
ceph/src/isa-l/crc/crc64_iso_norm_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_iso_norm_by8.asm
ceph/src/isa-l/crc/crc64_iso_refl_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_iso_refl_by8.asm
ceph/src/isa-l/crc/crc64_jones_norm_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_jones_norm_by8.asm
ceph/src/isa-l/crc/crc64_jones_refl_by16_10.asm [new file with mode: 0644]
ceph/src/isa-l/crc/crc64_jones_refl_by8.asm
ceph/src/isa-l/crc/crc64_multibinary.asm
ceph/src/isa-l/crc/crc64_ref.h [new file with mode: 0644]
ceph/src/isa-l/crc/crc_base.c
ceph/src/isa-l/crc/crc_base_aliases.c
ceph/src/isa-l/crc/crc_multibinary.asm
ceph/src/isa-l/crc/crc_ref.h [new file with mode: 0644]
ceph/src/isa-l/crc/crc_simple_test.c
ceph/src/isa-l/erasure_code/Makefile.am
ceph/src/isa-l/erasure_code/aarch64/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_dispatcher.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_highlevel_func.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/ec_multibinary_arm.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_2vect_dot_prod_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_2vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_3vect_dot_prod_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_3vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_4vect_dot_prod_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_4vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_5vect_dot_prod_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_5vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_6vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_vect_dot_prod_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_vect_mad_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/aarch64/gf_vect_mul_neon.S [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ec_base.c
ceph/src/isa-l/erasure_code/ec_base.h
ceph/src/isa-l/erasure_code/ec_highlevel_func.c
ceph/src/isa-l/erasure_code/ec_multibinary.asm
ceph/src/isa-l/erasure_code/erasure_code_base_perf.c
ceph/src/isa-l/erasure_code/erasure_code_base_test.c
ceph/src/isa-l/erasure_code/erasure_code_perf.c
ceph/src/isa-l/erasure_code/erasure_code_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/erasure_code_sse_test.c [deleted file]
ceph/src/isa-l/erasure_code/erasure_code_test.c
ceph/src/isa-l/erasure_code/erasure_code_update_perf.c
ceph/src/isa-l/erasure_code/erasure_code_update_test.c
ceph/src/isa-l/erasure_code/gen_rs_matrix_limits.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_avx512.asm
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_sse_test.c
ceph/src/isa-l/erasure_code/gf_2vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_2vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_2vect_mad_avx512.asm
ceph/src/isa-l/erasure_code/gf_2vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_avx512.asm
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_sse_test.c
ceph/src/isa-l/erasure_code/gf_3vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_3vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_3vect_mad_avx512.asm
ceph/src/isa-l/erasure_code/gf_3vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_avx512.asm
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_sse_test.c
ceph/src/isa-l/erasure_code/gf_4vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_4vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_4vect_mad_avx512.asm
ceph/src/isa-l/erasure_code/gf_4vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_avx512.asm [new file with mode: 0644]
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_sse_test.c
ceph/src/isa-l/erasure_code/gf_5vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_5vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_5vect_mad_avx512.asm [new file with mode: 0644]
ceph/src/isa-l/erasure_code/gf_5vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_avx512.asm [new file with mode: 0644]
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_sse_test.c
ceph/src/isa-l/erasure_code/gf_6vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_6vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_6vect_mad_avx512.asm [new file with mode: 0644]
ceph/src/isa-l/erasure_code/gf_6vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_inverse_test.c
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_1tbl.c
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx.asm
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx512.asm
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_test.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_base_test.c
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_perf.c
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse.asm
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_test.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_dot_prod_test.c
ceph/src/isa-l/erasure_code/gf_vect_mad_avx.asm
ceph/src/isa-l/erasure_code/gf_vect_mad_avx2.asm
ceph/src/isa-l/erasure_code/gf_vect_mad_avx512.asm
ceph/src/isa-l/erasure_code/gf_vect_mad_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_mad_sse.asm
ceph/src/isa-l/erasure_code/gf_vect_mad_test.c
ceph/src/isa-l/erasure_code/gf_vect_mul_avx.asm
ceph/src/isa-l/erasure_code/gf_vect_mul_avx_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_mul_avx_test.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_mul_base_test.c
ceph/src/isa-l/erasure_code/gf_vect_mul_perf.c
ceph/src/isa-l/erasure_code/gf_vect_mul_sse.asm
ceph/src/isa-l/erasure_code/gf_vect_mul_sse_perf.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_mul_sse_test.c [deleted file]
ceph/src/isa-l/erasure_code/gf_vect_mul_test.c
ceph/src/isa-l/erasure_code/ppc64le/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.h [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mad_vsx.c [new file with mode: 0644]
ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mul_vsx.c [new file with mode: 0644]
ceph/src/isa-l/examples/ec/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/examples/ec/Makefile.unx [new file with mode: 0644]
ceph/src/isa-l/examples/ec/ec_piggyback_example.c [new file with mode: 0644]
ceph/src/isa-l/examples/ec/ec_simple_example.c [new file with mode: 0644]
ceph/src/isa-l/igzip/Makefile.am
ceph/src/isa-l/igzip/aarch64/bitbuf2_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/data_struct_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/encode_df.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/gen_icf_map.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/huffman_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_decode_huffman_code_block_aarch64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_deflate_body_aarch64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_deflate_finish_aarch64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_deflate_hash_aarch64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_inflate_multibinary_arm64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_isal_adler32_neon.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_multibinary_arm64.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/igzip_set_long_icf_fg.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_body_hash_hist.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_finish_hash_hist.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/isal_update_histogram.S [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/lz0a_const_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/options_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/aarch64/stdmac_aarch64.h [new file with mode: 0644]
ceph/src/isa-l/igzip/adler32_avx2_4.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/adler32_base.c [new file with mode: 0644]
ceph/src/isa-l/igzip/adler32_perf.c [new file with mode: 0644]
ceph/src/isa-l/igzip/adler32_sse.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/bitbuf2.asm
ceph/src/isa-l/igzip/bitbuf2.h
ceph/src/isa-l/igzip/checksum32_funcs_test.c [new file with mode: 0644]
ceph/src/isa-l/igzip/checksum_test_ref.h [new file with mode: 0644]
ceph/src/isa-l/igzip/crc32_gzip.asm [deleted file]
ceph/src/isa-l/igzip/crc32_gzip_base.c [deleted file]
ceph/src/isa-l/igzip/crc_inflate.h [deleted file]
ceph/src/isa-l/igzip/data_struct2.asm
ceph/src/isa-l/igzip/detect_repeated_char.asm [deleted file]
ceph/src/isa-l/igzip/encode_df.c
ceph/src/isa-l/igzip/encode_df.h
ceph/src/isa-l/igzip/encode_df_04.asm
ceph/src/isa-l/igzip/encode_df_06.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/encode_df_asm.asm [deleted file]
ceph/src/isa-l/igzip/generate_custom_hufftables.c
ceph/src/isa-l/igzip/generate_static_inflate.c [new file with mode: 0644]
ceph/src/isa-l/igzip/heap_macros.asm
ceph/src/isa-l/igzip/huff_codes.c
ceph/src/isa-l/igzip/huff_codes.h
ceph/src/isa-l/igzip/huffman.asm
ceph/src/isa-l/igzip/huffman.h
ceph/src/isa-l/igzip/hufftables_c.c
ceph/src/isa-l/igzip/igzip.c
ceph/src/isa-l/igzip/igzip_base.c
ceph/src/isa-l/igzip/igzip_base_aliases.c
ceph/src/isa-l/igzip/igzip_body.asm
ceph/src/isa-l/igzip/igzip_body_01.asm [deleted file]
ceph/src/isa-l/igzip/igzip_body_02.asm [deleted file]
ceph/src/isa-l/igzip/igzip_body_04.asm [deleted file]
ceph/src/isa-l/igzip/igzip_build_hash_table_perf.c [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_checksums.h [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_compare_types.asm
ceph/src/isa-l/igzip/igzip_decode_block_stateless.asm
ceph/src/isa-l/igzip/igzip_deflate_hash.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_file_perf.c
ceph/src/isa-l/igzip/igzip_finish.asm
ceph/src/isa-l/igzip/igzip_fuzz_inflate.c [deleted file]
ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_hist_perf.c
ceph/src/isa-l/igzip/igzip_icf_base.c
ceph/src/isa-l/igzip/igzip_icf_body.asm [deleted file]
ceph/src/isa-l/igzip/igzip_icf_body.c [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_icf_body_01.asm [deleted file]
ceph/src/isa-l/igzip/igzip_icf_body_02.asm [deleted file]
ceph/src/isa-l/igzip/igzip_icf_body_04.asm [deleted file]
ceph/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_icf_finish.asm
ceph/src/isa-l/igzip/igzip_inflate.c
ceph/src/isa-l/igzip/igzip_inflate_multibinary.asm
ceph/src/isa-l/igzip/igzip_inflate_perf.c [deleted file]
ceph/src/isa-l/igzip/igzip_inflate_test.c
ceph/src/isa-l/igzip/igzip_level_buf_structs.h
ceph/src/isa-l/igzip/igzip_multibinary.asm
ceph/src/isa-l/igzip/igzip_perf.c
ceph/src/isa-l/igzip/igzip_rand_test.c
ceph/src/isa-l/igzip/igzip_semi_dyn_file_perf.c
ceph/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_stateless_file_perf.c [deleted file]
ceph/src/isa-l/igzip/igzip_sync_flush_file_perf.c [deleted file]
ceph/src/isa-l/igzip/igzip_sync_flush_perf.c [deleted file]
ceph/src/isa-l/igzip/igzip_update_histogram.asm
ceph/src/isa-l/igzip/igzip_wrapper.h [new file with mode: 0644]
ceph/src/isa-l/igzip/igzip_wrapper_hdr_test.c [new file with mode: 0644]
ceph/src/isa-l/igzip/inflate_data_structs.asm
ceph/src/isa-l/igzip/inflate_std_vects.h
ceph/src/isa-l/igzip/lz0a_const.asm
ceph/src/isa-l/igzip/options.asm
ceph/src/isa-l/igzip/proc_heap.asm
ceph/src/isa-l/igzip/proc_heap_base.c
ceph/src/isa-l/igzip/rfc1951_lookup.asm
ceph/src/isa-l/igzip/static_inflate.h [new file with mode: 0644]
ceph/src/isa-l/igzip/stdmac.asm
ceph/src/isa-l/include/aarch64_multibinary.h [new file with mode: 0644]
ceph/src/isa-l/include/crc.h
ceph/src/isa-l/include/crc64.h
ceph/src/isa-l/include/erasure_code.h
ceph/src/isa-l/include/gf_vect_mul.h
ceph/src/isa-l/include/igzip_lib.h
ceph/src/isa-l/include/mem_routines.h [new file with mode: 0644]
ceph/src/isa-l/include/multibinary.asm
ceph/src/isa-l/include/raid.h
ceph/src/isa-l/include/reg_sizes.asm
ceph/src/isa-l/include/test.h
ceph/src/isa-l/include/types.h
ceph/src/isa-l/include/unaligned.h [new file with mode: 0644]
ceph/src/isa-l/isa-l.def
ceph/src/isa-l/make.inc
ceph/src/isa-l/mem/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/mem/aarch64/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/mem/aarch64/mem_aarch64_dispatcher.c [new file with mode: 0644]
ceph/src/isa-l/mem/aarch64/mem_multibinary_arm.S [new file with mode: 0644]
ceph/src/isa-l/mem/aarch64/mem_zero_detect_neon.S [new file with mode: 0644]
ceph/src/isa-l/mem/mem_multibinary.asm [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_avx.asm [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_base.c [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_base_aliases.c [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_perf.c [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_sse.asm [new file with mode: 0644]
ceph/src/isa-l/mem/mem_zero_detect_test.c [new file with mode: 0644]
ceph/src/isa-l/programs/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/programs/igzip.1 [new file with mode: 0644]
ceph/src/isa-l/programs/igzip.1.h2m [new file with mode: 0644]
ceph/src/isa-l/programs/igzip_cli.c [new file with mode: 0644]
ceph/src/isa-l/programs/igzip_cli_check.sh [new file with mode: 0755]
ceph/src/isa-l/raid/Makefile.am
ceph/src/isa-l/raid/aarch64/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/pq_check_neon.S [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/pq_gen_neon.S [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/raid_aarch64_dispatcher.c [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/raid_multibinary_arm.S [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/xor_check_neon.S [new file with mode: 0644]
ceph/src/isa-l/raid/aarch64/xor_gen_neon.S [new file with mode: 0644]
ceph/src/isa-l/raid/pq_check_sse.asm
ceph/src/isa-l/raid/pq_check_sse_i32.asm
ceph/src/isa-l/raid/pq_check_test.c
ceph/src/isa-l/raid/pq_gen_avx.asm
ceph/src/isa-l/raid/pq_gen_avx2.asm
ceph/src/isa-l/raid/pq_gen_avx512.asm
ceph/src/isa-l/raid/pq_gen_perf.c
ceph/src/isa-l/raid/pq_gen_sse.asm
ceph/src/isa-l/raid/pq_gen_sse_i32.asm
ceph/src/isa-l/raid/pq_gen_test.c
ceph/src/isa-l/raid/raid_base.c
ceph/src/isa-l/raid/raid_multibinary.asm
ceph/src/isa-l/raid/raid_multibinary_i32.asm
ceph/src/isa-l/raid/xor_check_sse.asm
ceph/src/isa-l/raid/xor_check_test.c
ceph/src/isa-l/raid/xor_example.c
ceph/src/isa-l/raid/xor_gen_avx.asm
ceph/src/isa-l/raid/xor_gen_avx512.asm
ceph/src/isa-l/raid/xor_gen_perf.c
ceph/src/isa-l/raid/xor_gen_sse.asm
ceph/src/isa-l/raid/xor_gen_test.c
ceph/src/isa-l/tests/fuzz/Makefile.am [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/Makefile.unx [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/igzip_checked_inflate_fuzz_test.c [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/igzip_dump_inflate_corpus.c [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/igzip_fuzz_inflate.c [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/igzip_simple_inflate_fuzz_test.c [new file with mode: 0644]
ceph/src/isa-l/tests/fuzz/igzip_simple_round_trip_fuzz_test.c [new file with mode: 0644]
ceph/src/isa-l/tools/check_format.sh [new file with mode: 0755]
ceph/src/isa-l/tools/iindent
ceph/src/isa-l/tools/remove_trailing_whitespace.sh [new file with mode: 0755]
ceph/src/isa-l/tools/test_autorun.sh [new file with mode: 0755]
ceph/src/isa-l/tools/test_checks.sh [new file with mode: 0755]
ceph/src/isa-l/tools/test_extended.sh [new file with mode: 0755]
ceph/src/isa-l/tools/test_fuzz.sh [new file with mode: 0755]
ceph/src/isa-l/tools/test_tools.sh [new file with mode: 0755]
ceph/src/journal/ObjectRecorder.cc
ceph/src/journal/ObjectRecorder.h
ceph/src/krbd.cc
ceph/src/librados/RadosClient.cc
ceph/src/librados/RadosClient.h
ceph/src/librbd/api/Migration.cc
ceph/src/librbd/api/Migration.h
ceph/src/librbd/cache/ParentCacheObjectDispatch.cc
ceph/src/librbd/cache/ParentCacheObjectDispatch.h
ceph/src/librbd/image/ListWatchersRequest.cc
ceph/src/librbd/image/OpenRequest.cc
ceph/src/librbd/image/RefreshRequest.cc
ceph/src/librbd/image/RefreshRequest.h
ceph/src/librbd/io/AioCompletion.cc
ceph/src/librbd/io/ImageRequest.h
ceph/src/librbd/io/ImageRequestWQ.cc
ceph/src/librbd/io/ObjectRequest.cc
ceph/src/librbd/io/Utils.cc
ceph/src/librbd/io/Utils.h
ceph/src/librbd/operation/DisableFeaturesRequest.cc
ceph/src/mds/Anchor.cc
ceph/src/mds/Anchor.h
ceph/src/mds/BatchOp.h
ceph/src/mds/Beacon.cc
ceph/src/mds/CDir.cc [changed mode: 0644->0755]
ceph/src/mds/CDir.h
ceph/src/mds/CInode.cc
ceph/src/mds/CInode.h
ceph/src/mds/Capability.cc
ceph/src/mds/Capability.h
ceph/src/mds/FSMap.cc
ceph/src/mds/Locker.cc
ceph/src/mds/Locker.h
ceph/src/mds/MDCache.cc
ceph/src/mds/MDCache.h
ceph/src/mds/MDSMap.cc
ceph/src/mds/MDSRank.cc
ceph/src/mds/MDSRank.h
ceph/src/mds/Migrator.cc
ceph/src/mds/Mutation.cc
ceph/src/mds/Mutation.h
ceph/src/mds/OpenFileTable.cc
ceph/src/mds/OpenFileTable.h
ceph/src/mds/PurgeQueue.cc
ceph/src/mds/ScrubStack.h
ceph/src/mds/Server.cc
ceph/src/mds/Server.h
ceph/src/mds/SessionMap.cc
ceph/src/mds/SessionMap.h
ceph/src/mds/StrayManager.cc
ceph/src/mds/mdstypes.h
ceph/src/messages/MMDSBeacon.h
ceph/src/messages/MMgrReport.h
ceph/src/mgr/DaemonServer.cc
ceph/src/mgr/DaemonServer.h
ceph/src/mgr/MgrClient.cc
ceph/src/mgr/MgrStandby.cc
ceph/src/mgr/PyModuleRegistry.h
ceph/src/mon/MDSMonitor.cc
ceph/src/mon/MgrStatMonitor.cc
ceph/src/mon/MonClient.cc
ceph/src/mon/MonMap.cc
ceph/src/mon/MonMap.h
ceph/src/mon/Monitor.cc
ceph/src/mon/MonmapMonitor.cc
ceph/src/mon/OSDMonitor.cc
ceph/src/mon/PGMap.cc
ceph/src/mon/Session.h
ceph/src/msg/async/ProtocolV2.cc
ceph/src/msg/async/Stack.cc
ceph/src/msg/msg_types.cc
ceph/src/mypy.ini
ceph/src/neorados/RADOSImpl.cc [new file with mode: 0644]
ceph/src/os/ObjectStore.h
ceph/src/os/bluestore/BlueFS.cc
ceph/src/os/bluestore/BlueStore.cc
ceph/src/os/bluestore/BlueStore.h
ceph/src/os/bluestore/bluestore_types.cc
ceph/src/os/bluestore/bluestore_types.h
ceph/src/os/kstore/KStore.cc
ceph/src/osd/OSD.cc
ceph/src/osd/PG.cc
ceph/src/osd/PGBackend.cc
ceph/src/osd/PGBackend.h
ceph/src/osd/PrimaryLogPG.h
ceph/src/osdc/Journaler.cc
ceph/src/osdc/ObjectCacher.cc
ceph/src/osdc/Objecter.cc
ceph/src/osdc/Objecter.h
ceph/src/pybind/ceph_volume_client.py
ceph/src/pybind/cephfs/cephfs.pyx
ceph/src/pybind/mgr/cephadm/inventory.py
ceph/src/pybind/mgr/cephadm/migrations.py
ceph/src/pybind/mgr/cephadm/module.py
ceph/src/pybind/mgr/cephadm/schedule.py
ceph/src/pybind/mgr/cephadm/serve.py [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/services/cephadmservice.py
ceph/src/pybind/mgr/cephadm/services/container.py [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/services/iscsi.py
ceph/src/pybind/mgr/cephadm/services/monitoring.py
ceph/src/pybind/mgr/cephadm/services/nfs.py
ceph/src/pybind/mgr/cephadm/services/osd.py
ceph/src/pybind/mgr/cephadm/template.py
ceph/src/pybind/mgr/cephadm/templates/blink_device_light_cmd.j2 [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2
ceph/src/pybind/mgr/cephadm/templates/services/prometheus/prometheus.yml.j2
ceph/src/pybind/mgr/cephadm/tests/fixtures.py
ceph/src/pybind/mgr/cephadm/tests/test_cephadm.py
ceph/src/pybind/mgr/cephadm/tests/test_completion.py
ceph/src/pybind/mgr/cephadm/tests/test_migration.py
ceph/src/pybind/mgr/cephadm/tests/test_osd_removal.py
ceph/src/pybind/mgr/cephadm/tests/test_scheduling.py
ceph/src/pybind/mgr/cephadm/tests/test_services.py
ceph/src/pybind/mgr/cephadm/tests/test_spec.py
ceph/src/pybind/mgr/cephadm/tests/test_template.py
ceph/src/pybind/mgr/cephadm/tests/test_upgrade.py
ceph/src/pybind/mgr/cephadm/tests/test_utils.py [deleted file]
ceph/src/pybind/mgr/cephadm/upgrade.py
ceph/src/pybind/mgr/cephadm/utils.py
ceph/src/pybind/mgr/dashboard/controllers/__init__.py
ceph/src/pybind/mgr/dashboard/controllers/auth.py
ceph/src/pybind/mgr/dashboard/controllers/cephfs.py
ceph/src/pybind/mgr/dashboard/controllers/docs.py
ceph/src/pybind/mgr/dashboard/controllers/host.py
ceph/src/pybind/mgr/dashboard/controllers/iscsi.py
ceph/src/pybind/mgr/dashboard/controllers/mgr_modules.py
ceph/src/pybind/mgr/dashboard/controllers/nfsganesha.py
ceph/src/pybind/mgr/dashboard/controllers/osd.py
ceph/src/pybind/mgr/dashboard/controllers/rbd.py
ceph/src/pybind/mgr/dashboard/controllers/rbd_mirroring.py
ceph/src/pybind/mgr/dashboard/controllers/rgw.py
ceph/src/pybind/mgr/dashboard/controllers/service.py
ceph/src/pybind/mgr/dashboard/controllers/user.py
ceph/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.e2e-spec.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.e2e-spec.ts
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.4a38b529302ffa3f0c24.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.9e79c41bbaed982a50af.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.3532f17ccbf4b268177b.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.d6b08e1c042ba6fccdd6.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.1818f80c2e905e85a90f.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.9a60f7741889f52ed7ae.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.1891b10149a7c2d765ac.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.8c5c2bbb556260a5cc3e.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.88af57a0fd5b75779391.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.94051a156c6d11b38ada.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/index.html
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js.LICENSE.txt [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.cb10cd7f4a550e7a33c5.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js.LICENSE.txt [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.513b02b42d061373f212.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0907482258dfadeab004.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0e1c754813ff535e4bd5.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.76632aba1e576c7cc54a.js
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.76632aba1e576c7cc54a.js.LICENSE.txt [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.0d3cd206c82d5fe7076a.css [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.58a2c96c3b87bd02e7a7.css [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/package-lock.json
ceph/src/pybind/mgr/dashboard/frontend/package.json
ceph/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-list/rbd-namespace-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-actions.model.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-move-modal/rbd-trash-move-modal.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/crushmap/crushmap.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-details/host-details.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-list/mgr-module-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-creation-preview-modal/osd-creation-preview-modal.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/telemetry/telemetry.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie-color.enum.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-details/pool-details.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/ceph-shared.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/nfs.service.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/nfs.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/copy2clipboard-button.directive.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/copy2clipboard-button.directive.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/directives.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-action.ts
ceph/src/pybind/mgr/dashboard/frontend/src/styles.scss
ceph/src/pybind/mgr/dashboard/frontend/src/styles/bootstrap-extends.scss
ceph/src/pybind/mgr/dashboard/frontend/src/styles/defaults.scss
ceph/src/pybind/mgr/dashboard/module.py
ceph/src/pybind/mgr/dashboard/services/ganesha.py
ceph/src/pybind/mgr/dashboard/services/iscsi_client.py
ceph/src/pybind/mgr/dashboard/services/orchestrator.py
ceph/src/pybind/mgr/dashboard/services/rgw_client.py
ceph/src/pybind/mgr/dashboard/services/sso.py
ceph/src/pybind/mgr/dashboard/tests/test_ganesha.py
ceph/src/pybind/mgr/dashboard/tests/test_iscsi.py
ceph/src/pybind/mgr/dashboard/tests/test_rgw_client.py
ceph/src/pybind/mgr/dashboard/tools.py
ceph/src/pybind/mgr/devicehealth/module.py
ceph/src/pybind/mgr/insights/tox.ini
ceph/src/pybind/mgr/orchestrator/_interface.py
ceph/src/pybind/mgr/orchestrator/module.py
ceph/src/pybind/mgr/orchestrator/tests/test_orchestrator.py
ceph/src/pybind/mgr/prometheus/module.py
ceph/src/pybind/mgr/rook/module.py
ceph/src/pybind/mgr/telemetry/module.py
ceph/src/pybind/mgr/tests/__init__.py
ceph/src/pybind/mgr/volumes/fs/async_cloner.py
ceph/src/pybind/mgr/volumes/fs/async_job.py
ceph/src/pybind/mgr/volumes/fs/nfs.py
ceph/src/pybind/mgr/volumes/fs/operations/lock.py
ceph/src/pybind/mgr/volumes/fs/volume.py
ceph/src/pybind/mgr/volumes/module.py
ceph/src/pybind/mgr/zabbix/module.py
ceph/src/pybind/rados/rados.pyx
ceph/src/pybind/rbd/rbd.pyx
ceph/src/python-common/ceph/deployment/drive_group.py
ceph/src/python-common/ceph/deployment/drive_selection/selector.py
ceph/src/python-common/ceph/deployment/inventory.py
ceph/src/python-common/ceph/deployment/service_spec.py
ceph/src/python-common/ceph/deployment/translate.py
ceph/src/python-common/ceph/deployment/utils.py [new file with mode: 0644]
ceph/src/python-common/ceph/tests/test_disk_selector.py
ceph/src/python-common/ceph/tests/test_drive_group.py
ceph/src/python-common/ceph/tests/test_service_spec.py
ceph/src/python-common/ceph/tests/test_utils.py [new file with mode: 0644]
ceph/src/rgw/CMakeLists.txt
ceph/src/rgw/jwt-cpp/base.h [new file with mode: 0644]
ceph/src/rgw/jwt-cpp/jwt.h [new file with mode: 0644]
ceph/src/rgw/librgw.cc
ceph/src/rgw/librgw_admin_user.cc [deleted file]
ceph/src/rgw/picojson/picojson.h [new file with mode: 0644]
ceph/src/rgw/rgw-orphan-list
ceph/src/rgw/rgw_admin.cc
ceph/src/rgw/rgw_asio_frontend.cc
ceph/src/rgw/rgw_asio_frontend.h
ceph/src/rgw/rgw_auth.cc
ceph/src/rgw/rgw_auth.h
ceph/src/rgw/rgw_auth_filters.h
ceph/src/rgw/rgw_auth_s3.cc
ceph/src/rgw/rgw_auth_s3.h
ceph/src/rgw/rgw_basic_types.h
ceph/src/rgw/rgw_bucket.cc
ceph/src/rgw/rgw_cache.cc
ceph/src/rgw/rgw_common.cc
ceph/src/rgw/rgw_common.h
ceph/src/rgw/rgw_file.cc
ceph/src/rgw/rgw_file.h
ceph/src/rgw/rgw_gc.cc
ceph/src/rgw/rgw_iam_policy.cc
ceph/src/rgw/rgw_iam_policy.h
ceph/src/rgw/rgw_json_enc.cc
ceph/src/rgw/rgw_lc.cc
ceph/src/rgw/rgw_lc.h
ceph/src/rgw/rgw_lib_frontend.h
ceph/src/rgw/rgw_oidc_provider.cc [new file with mode: 0644]
ceph/src/rgw/rgw_oidc_provider.h [new file with mode: 0644]
ceph/src/rgw/rgw_op.cc
ceph/src/rgw/rgw_rados.cc
ceph/src/rgw/rgw_rest_client.cc
ceph/src/rgw/rgw_rest_iam.cc
ceph/src/rgw/rgw_rest_oidc_provider.cc [new file with mode: 0644]
ceph/src/rgw/rgw_rest_oidc_provider.h [new file with mode: 0644]
ceph/src/rgw/rgw_rest_s3.cc
ceph/src/rgw/rgw_rest_sts.cc
ceph/src/rgw/rgw_rest_sts.h
ceph/src/rgw/rgw_role.h
ceph/src/rgw/rgw_sal.cc
ceph/src/rgw/rgw_sts.cc
ceph/src/rgw/rgw_sts.h
ceph/src/rgw/rgw_swift_auth.h
ceph/src/rgw/rgw_web_idp.h
ceph/src/rgw/rgw_zone.cc
ceph/src/rgw/rgw_zone.h
ceph/src/rgw/services/svc_sys_obj_cache.cc
ceph/src/test/CMakeLists.txt
ceph/src/test/cli/osdmaptool/help.t
ceph/src/test/erasure-code/CMakeLists.txt
ceph/src/test/immutable_object_cache/MockCacheDaemon.h
ceph/src/test/immutable_object_cache/test_object_store.cc
ceph/src/test/libcephfs/CMakeLists.txt
ceph/src/test/libcephfs/monconfig.cc [new file with mode: 0644]
ceph/src/test/libcephfs/test.cc
ceph/src/test/librados/c_read_operations.cc
ceph/src/test/librados/io.cc
ceph/src/test/librados/misc_cxx.cc
ceph/src/test/librbd/CMakeLists.txt
ceph/src/test/librbd/cache/test_mock_ParentCacheObjectDispatch.cc [new file with mode: 0644]
ceph/src/test/librbd/cache/test_mock_ParentImageCache.cc [deleted file]
ceph/src/test/librbd/fsx.cc
ceph/src/test/librbd/io/test_mock_ImageRequestWQ.cc
ceph/src/test/librbd/io/test_mock_ObjectRequest.cc
ceph/src/test/librbd/mock/MockImageCtx.h
ceph/src/test/librbd/test_Migration.cc
ceph/src/test/mon/CMakeLists.txt
ceph/src/test/mon/MonMap.cc
ceph/src/test/mon/test_mon_workloadgen.cc
ceph/src/test/objectstore/store_test.cc
ceph/src/test/objectstore/store_test_fixture.cc
ceph/src/test/objectstore/store_test_fixture.h
ceph/src/test/pybind/test_cephfs.py
ceph/src/test/strtol.cc
ceph/src/test/test_librgw_admin_user.cc [deleted file]
ceph/src/tools/cephfs/JournalScanner.cc
ceph/src/tools/cephfs/MDSUtility.cc
ceph/src/tools/immutable_object_cache/CacheClient.cc
ceph/src/tools/immutable_object_cache/CacheController.cc
ceph/src/tools/immutable_object_cache/CacheSession.cc
ceph/src/tools/immutable_object_cache/CacheSession.h
ceph/src/tools/immutable_object_cache/ObjectCacheStore.cc
ceph/src/tools/immutable_object_cache/ObjectCacheStore.h
ceph/src/tools/immutable_object_cache/Policy.h
ceph/src/tools/immutable_object_cache/SimplePolicy.cc
ceph/src/tools/immutable_object_cache/Types.cc
ceph/src/tools/immutable_object_cache/Types.h
ceph/src/tools/immutable_object_cache/main.cc
ceph/src/tools/osdmaptool.cc
ceph/src/tools/rados/rados.cc
ceph/src/tools/rbd/action/Kernel.cc
ceph/src/tools/rbd/action/MirrorPool.cc
ceph/src/tools/rbd/action/Status.cc
ceph/src/tools/rbd_mirror/PoolWatcher.cc
ceph/src/tools/rbd_nbd/rbd-nbd.cc
ceph/src/vstart.sh
ceph/sudoers.d/cephadm [deleted file]
ceph/systemd/ceph-fuse.target
ceph/systemd/ceph-immutable-object-cache.target
ceph/systemd/ceph-mds.target
ceph/systemd/ceph-mds@.service.in
ceph/systemd/ceph-mgr.target
ceph/systemd/ceph-mgr@.service.in
ceph/systemd/ceph-mon.target
ceph/systemd/ceph-mon@.service.in
ceph/systemd/ceph-osd.target
ceph/systemd/ceph-osd@.service.in
ceph/systemd/ceph-radosgw.target
ceph/systemd/ceph-radosgw@.service.in
ceph/systemd/ceph-rbd-mirror.target
ceph/systemd/ceph.target
ceph/systemd/rbdmap.service.in
ceph/udev/50-rbd.rules

index 8eecd7ef5594312e2b36d8955fa4fb8215605df5..5b1139f7fff25989641e005d40a5a0b459b09718 100644 (file)
@@ -32,6 +32,7 @@
 /doc/mgr/orchestrator_modules.rst               @ceph/orchestrators
 /doc/cephadm                                    @ceph/orchestrators
 /doc/dev/cephadm.rst                            @ceph/orchestrators
+/doc/man/8/cephadm.rst                          @ceph/orchestrators
 
 #ceph-volume
 /src/ceph-volume                                @ceph/ceph-volume
diff --git a/ceph/.readthedocs.yml b/ceph/.readthedocs.yml
new file mode 100644 (file)
index 0000000..24815ce
--- /dev/null
@@ -0,0 +1,16 @@
+---
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+version: 2
+formats: []
+build:
+  image: latest
+python:
+  version: 3
+  install:
+    - requirements: admin/doc-requirements.txt
+    - requirements: admin/doc-read-the-docs.txt
+sphinx:
+  builder: dirhtml
+  configuration: doc/conf.py
index e5218c1e56deab5256636f78fe6efabed6f1915e..7a71e53ad79bcabf361fff2912a85fe7f1c32bf2 100644 (file)
@@ -667,4 +667,4 @@ add_custom_target(tags DEPENDS ctags)
 
 find_package(CppCheck)
 find_package(IWYU)
-set(VERSION 15.2.6)
+set(VERSION 15.2.8)
index 1c7ef204060b9520748a301f198f34f00dbd30a0..a1f05a9875a3ffb5b32144fe8fef7edc17a298cb 100644 (file)
@@ -1,15 +1,22 @@
->=15.2.5
---------
+15.2.8
+------
 
-* CephFS: Automatic static subtree partitioning policies may now be configured
-  using the new distributed and random ephemeral pinning extended attributes on
-  directories. See the documentation for more information:
-  https://docs.ceph.com/docs/master/cephfs/multimds/
+* ceph-volume: The ``lvm batch` subcommand received a major rewrite. This closed
+  a number of bugs and improves usability in terms of size specification and
+  calculation, as well as idempotency behaviour and disk replacement process.
+  Please refer to https://docs.ceph.com/en/latest/ceph-volume/lvm/batch/ for
+  more detailed information.
 
-* Monitors now have a config option ``mon_osd_warn_num_repaired``, 10 by default.
-  If any OSD has repaired more than this many I/O errors in stored data a
``OSD_TOO_MANY_REPAIRS`` health warning is generated.
+* MON: The cluster log now logs health detail every ``mon_health_to_clog_interval``,
+  which has been changed from 1hr to 10min. Logging of health detail will be
 skipped if there is no change in health summary since last known.
 
-* Now when noscrub and/or nodeep-scrub flags are set globally or per pool,
-  scheduled scrubs of the type disabled will be aborted. All user initiated
-  scrubs are NOT interrupted.
+* The ``ceph df`` command now lists the number of pgs in each pool.
+
+* The ``bluefs_preextend_wal_files`` option has been removed.
+
+* It is now possible to specify the initial monitor to contact for Ceph tools
+  and daemons using the ``mon_host_override`` config option or
+  ``--mon-host-override <ip>`` command-line switch. This generally should only
+  be used for debugging and only affects initial communication with Ceph's
+  monitor cluster.
index 5a81dad2668a6c37a7ffaf5bf4f63c817b87ddff..289a2a68871143c710ad31cb7a22444cf3344a7a 100755 (executable)
@@ -85,7 +85,7 @@ for bind in rados rbd cephfs rgw; do
     BUILD_DOC=1 \
         CFLAGS="-iquote$TOPDIR/src/include" \
         CPPFLAGS="-iquote$TOPDIR/src/include" \
-        LDFLAGS="-L$vdir/lib -Wl,--no-as-needed" \
+        LDFLAGS="-L$vdir/lib -Wl,--no-as-needed,-rpath=$vdir/lib" \
         $vdir/bin/pip install --upgrade $TOPDIR/src/pybind/${bind}
     # rgwfile_version(), librgw_create(), rgw_mount()
     # since py3.5, distutils adds postfix in between ${bind} and so
@@ -93,7 +93,12 @@ for bind in rados rbd cephfs rgw; do
     if [ ! -e $lib_fn ]; then
        lib_fn=$vdir/lib/python*/*-packages/${bind}.so
     fi
-    nm $lib_fn | grep -E "U (lib)?${bind}" | \
+    if [ ${bind} = "cephfs" ]; then
+        func_prefix="ceph"
+    else
+        func_prefix="(lib)?${bind}"
+    fi
+    nm $lib_fn | grep -E "U ${func_prefix}" | \
         awk '{ print "void "$2"(void) {}" }' | \
         gcc -shared -o $vdir/lib/lib${bind}.so.1 -xc -
     if [ ${bind} != rados ]; then
diff --git a/ceph/admin/doc-read-the-docs.txt b/ceph/admin/doc-read-the-docs.txt
new file mode 100644 (file)
index 0000000..b65cc46
--- /dev/null
@@ -0,0 +1,2 @@
+plantweb
+git+https://github.com/readthedocs/readthedocs-sphinx-search@master
index cc6230d9c2d38fa3a5d930b29c2ce10479cb0b72..6110e4be4315d3cb9279c37acfaa04c58ea0d434 100644 (file)
@@ -5,4 +5,6 @@ pyyaml >= 5.1.2
 Cython
 prettytable
 sphinx-autodoc-typehints
+sphinx-prompt
+Sphinx-Substitution-Extensions
 typed-ast
index 5a4bca6f2de1efe09a2dc57ffe9e520a95829c06..8b1d3e98df64f1f572f539ceb8318790c0b7d11f 100644 (file)
@@ -1,7 +1,7 @@
 # Contributor: John Coyle <dx9err@gmail.com>
 # Maintainer: John Coyle <dx9err@gmail.com>
 pkgname=ceph
-pkgver=15.2.6
+pkgver=15.2.8
 pkgrel=0
 pkgdesc="Ceph is a distributed object store and file system"
 pkgusers="ceph"
@@ -63,7 +63,7 @@ makedepends="
        xmlstarlet
        yasm
 "
-source="ceph-15.2.6.tar.bz2"
+source="ceph-15.2.8.tar.bz2"
 subpackages="
        $pkgname-base
        $pkgname-common
@@ -116,7 +116,7 @@ _sysconfdir=/etc
 _udevrulesdir=/etc/udev/rules.d
 _python_sitelib=/usr/lib/python2.7/site-packages
 
-builddir=$srcdir/ceph-15.2.6
+builddir=$srcdir/ceph-15.2.8
 
 build() {
        export CEPH_BUILD_VIRTUALENV=$builddir
index a3502a7f81e4842aa3adee075ccf1f938a55597a..d41e5b110312cf94804dc13fcad9a0da22283fa9 100644 (file)
@@ -98,7 +98,7 @@
 # main package definition
 #################################################################################
 Name:          ceph
-Version:       15.2.6
+Version:       15.2.8
 Release:       0%{?dist}
 %if 0%{?fedora} || 0%{?rhel}
 Epoch:         2
@@ -114,7 +114,7 @@ License:    LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-
 Group:         System/Filesystems
 %endif
 URL:           http://ceph.com/
-Source0:       %{?_remote_tarball_prefix}ceph-15.2.6.tar.bz2
+Source0:       %{?_remote_tarball_prefix}ceph-15.2.8.tar.bz2
 %if 0%{?suse_version}
 # _insert_obs_source_lines_here
 ExclusiveArch:  x86_64 aarch64 ppc64le s390x
@@ -475,6 +475,10 @@ Group:             System/Filesystems
 %endif
 Provides:      ceph-test:/usr/bin/ceph-monstore-tool
 Requires:      ceph-base = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:    nvme-cli
+Recommends:    smartmontools
+%endif
 %description mon
 ceph-mon is the cluster monitor daemon for the Ceph distributed file
 system. One or more instances of ceph-mon form a Paxos part-time
@@ -751,6 +755,10 @@ Requires:  lvm2
 Requires:      sudo
 Requires:      libstoragemgmt
 Requires:      python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:    nvme-cli
+Recommends:    smartmontools
+%endif
 %description osd
 ceph-osd is the object storage daemon for the Ceph distributed file
 system.  It is responsible for storing objects on a local file system
@@ -1126,7 +1134,7 @@ This package provides Ceph’s default alerts for Prometheus.
 # common
 #################################################################################
 %prep
-%autosetup -p1 -n ceph-15.2.6
+%autosetup -p1 -n ceph-15.2.8
 
 %build
 # LTO can be enabled as soon as the following GCC bug is fixed:
@@ -1302,7 +1310,6 @@ install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules
 
 # sudoers.d
 install -m 0600 -D sudoers.d/ceph-osd-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-osd-smartctl
-install -m 0600 -D sudoers.d/cephadm %{buildroot}%{_sysconfdir}/sudoers.d/cephadm
 
 %if 0%{?rhel} >= 8
 pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_bindir}/*
@@ -1459,7 +1466,6 @@ exit 0
 %files -n cephadm
 %{_sbindir}/cephadm
 %{_mandir}/man8/cephadm.8*
-%{_sysconfdir}/sudoers.d/cephadm
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh
 %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys
@@ -2139,7 +2145,6 @@ fi
 
 %files -n librgw2
 %{_libdir}/librgw.so.*
-%{_libdir}/librgw_admin_user.so.*
 %if %{with lttng}
 %{_libdir}/librgw_op_tp.so.*
 %{_libdir}/librgw_rados_tp.so.*
@@ -2152,10 +2157,8 @@ fi
 %files -n librgw-devel
 %dir %{_includedir}/rados
 %{_includedir}/rados/librgw.h
-%{_includedir}/rados/librgw_admin_user.h
 %{_includedir}/rados/rgw_file.h
 %{_libdir}/librgw.so
-%{_libdir}/librgw_admin_user.so
 %if %{with lttng}
 %{_libdir}/librgw_op_tp.so
 %{_libdir}/librgw_rados_tp.so
index 04122c99726685f98dcfee4a686f2f20a59f6e6a..70942aca73bbd5be21ebe989d217ae5141add1e4 100644 (file)
@@ -475,6 +475,10 @@ Group:             System/Filesystems
 %endif
 Provides:      ceph-test:/usr/bin/ceph-monstore-tool
 Requires:      ceph-base = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:    nvme-cli
+Recommends:    smartmontools
+%endif
 %description mon
 ceph-mon is the cluster monitor daemon for the Ceph distributed file
 system. One or more instances of ceph-mon form a Paxos part-time
@@ -751,6 +755,10 @@ Requires:  lvm2
 Requires:      sudo
 Requires:      libstoragemgmt
 Requires:      python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:    nvme-cli
+Recommends:    smartmontools
+%endif
 %description osd
 ceph-osd is the object storage daemon for the Ceph distributed file
 system.  It is responsible for storing objects on a local file system
@@ -1302,7 +1310,6 @@ install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules
 
 # sudoers.d
 install -m 0600 -D sudoers.d/ceph-osd-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-osd-smartctl
-install -m 0600 -D sudoers.d/cephadm %{buildroot}%{_sysconfdir}/sudoers.d/cephadm
 
 %if 0%{?rhel} >= 8
 pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_bindir}/*
@@ -1459,7 +1466,6 @@ exit 0
 %files -n cephadm
 %{_sbindir}/cephadm
 %{_mandir}/man8/cephadm.8*
-%{_sysconfdir}/sudoers.d/cephadm
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh
 %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys
@@ -2139,7 +2145,6 @@ fi
 
 %files -n librgw2
 %{_libdir}/librgw.so.*
-%{_libdir}/librgw_admin_user.so.*
 %if %{with lttng}
 %{_libdir}/librgw_op_tp.so.*
 %{_libdir}/librgw_rados_tp.so.*
@@ -2152,10 +2157,8 @@ fi
 %files -n librgw-devel
 %dir %{_includedir}/rados
 %{_includedir}/rados/librgw.h
-%{_includedir}/rados/librgw_admin_user.h
 %{_includedir}/rados/rgw_file.h
 %{_libdir}/librgw.so
-%{_libdir}/librgw_admin_user.so
 %if %{with lttng}
 %{_libdir}/librgw_op_tp.so
 %{_libdir}/librgw_rados_tp.so
index 3ff5c5df080474a37b65396ad607bee8fb13dcdb..8f14a46c1edc5e3fed790936448b0a8bb7f78c47 100644 (file)
@@ -1,7 +1,19 @@
-ceph (15.2.6-1bionic) bionic; urgency=medium
+ceph (15.2.8-1bionic) bionic; urgency=medium
 
 
- -- Jenkins Build Slave User <jenkins-build@braggi11.front.sepia.ceph.com>  Tue, 17 Nov 2020 18:25:05 +0000
+ -- Jenkins Build Slave User <jenkins-build@braggi12.front.sepia.ceph.com>  Wed, 16 Dec 2020 18:29:12 +0000
+
+ceph (15.2.8-1) stable; urgency=medium
+
+  * New upstream release
+
+ -- Ceph Release Team <ceph-maintainers@ceph.com>  Wed, 16 Dec 2020 17:29:47 +0000
+
+ceph (15.2.7-1) stable; urgency=medium
+
+  * New upstream release
+
+ -- Ceph Release Team <ceph-maintainers@ceph.com>  Mon, 30 Nov 2020 19:58:28 +0000
 
 ceph (15.2.6-1) stable; urgency=medium
 
index 49d6cc34de8895e5d2b6df826565d0ad5750102c..f30ed9c5f5ad0904f0b3a1cf3ea0712854f4b17c 100644 (file)
@@ -1,3 +1,2 @@
 usr/sbin/cephadm
 usr/share/man/man8/cephadm.8
-etc/sudoers.d/cephadm
index 9abc2bd752dd076c74b1de08d5b50f7c8ac40117..b5d49ced30b7383a878372585e2b521007a2a5f8 100644 (file)
@@ -216,6 +216,7 @@ Depends: ceph-base (= ${binary:Version}),
          ceph-mgr-modules-core (= ${binary:Version}),
          python3-bcrypt,
          python3-cherrypy3,
+         python3-distutils,
          python3-jwt,
          python3-openssl,
          python3-pecan,
@@ -382,6 +383,8 @@ Depends: ceph-base (= ${binary:Version}),
          ${shlibs:Depends},
 Replaces: ceph (<< 10), ceph-test (<< 12.2.2-14)
 Breaks: ceph (<< 10), ceph-test (<< 12.2.2-14)
+Recommends: nvme-cli,
+            smartmontools,
 Description: monitor server for the ceph storage system
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
@@ -415,6 +418,8 @@ Depends: ceph-base (= ${binary:Version}),
          ${shlibs:Depends},
 Replaces: ceph (<< 10), ceph-test (<< 12.2.2-14)
 Breaks: ceph (<< 10), ceph-test (<< 12.2.2-14)
+Recommends: nvme-cli,
+            smartmontools,
 Description: OSD server for the ceph storage system
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
index 1f4f1b190bad4948308c9465eae9f3d42edf2e59..ed2a81dba5013a2be67fec3e78bf2c1f918de02d 100644 (file)
@@ -1,5 +1,3 @@
 usr/include/rados/librgw.h
-usr/include/rados/librgw_admin_user.h
 usr/include/rados/rgw_file.h
 usr/lib/librgw.so
-usr/lib/librgw_admin_user.so
index 725f341affa4818da526d58e7e83f9f988dcc719..b86fb891e2c255505fae45fb03f7dc2597b0b0a2 100644 (file)
@@ -1,2 +1 @@
 usr/lib/librgw.so.*
-usr/lib/librgw_admin_user.so.*
index 8f2e9afa43d6035383b2a868b567b7c91da82222..dc32da3081e2a300f2635c17de487bbd09609cdc 100755 (executable)
@@ -62,7 +62,6 @@ override_dh_auto_install:
        install -D -m 644 src/etc-rbdmap $(DESTDIR)/etc/ceph/rbdmap
        install -D -m 644 etc/sysctl/90-ceph-osd.conf $(DESTDIR)/etc/sysctl.d/30-ceph-osd.conf
        install -D -m 600 sudoers.d/ceph-osd-smartctl $(DESTDIR)/etc/sudoers.d/ceph-osd-smartctl
-       install -D -m 600 sudoers.d/cephadm $(DESTDIR)/etc/sudoers.d/cephadm
 
        install -m 755 src/cephadm/cephadm $(DESTDIR)/usr/sbin/cephadm
 
index d89ddb5b85ee59d9595a4f01d96c9a9cbfb38c62..c1f7f5ff9c4b7cd288c7076ea303e8cb878c7934 100644 (file)
@@ -27,7 +27,9 @@ A Ceph Storage Cluster consists of two types of daemons:
 - :term:`Ceph Monitor`
 - :term:`Ceph OSD Daemon`
 
-.. ditaa::  +---------------+ +---------------+
+.. ditaa::
+
+            +---------------+ +---------------+
             |      OSDs     | |    Monitors   |
             +---------------+ +---------------+
 
@@ -56,7 +58,9 @@ comes through a :term:`Ceph Block Device`, :term:`Ceph Object Storage`, the
 file in a filesystem, which is stored on an :term:`Object Storage Device`. Ceph
 OSD Daemons handle the read/write operations on the storage disks.
 
-.. ditaa:: /-----\       +-----+       +-----+
+.. ditaa::
+
+           /-----\       +-----+       +-----+
            | obj |------>| {d} |------>| {s} |
            \-----/       +-----+       +-----+
    
@@ -70,7 +74,9 @@ attributes such as the file owner, created date, last modified date, and so
 forth.
 
 
-.. ditaa:: /------+------------------------------+----------------\
+.. ditaa::
+
+           /------+------------------------------+----------------\
            | ID   | Binary Data                  | Metadata       |
            +------+------------------------------+----------------+
            | 1234 | 0101010101010100110101010010 | name1 = value1 | 
@@ -229,7 +235,9 @@ the client and the monitor share a secret key.
 .. note:: The ``client.admin`` user must provide the user ID and 
    secret key to the user in a secure manner. 
 
-.. ditaa:: +---------+     +---------+
+.. ditaa::
+
+           +---------+     +---------+
            | Client  |     | Monitor |
            +---------+     +---------+
                 |  request to   |
@@ -252,7 +260,9 @@ user's secret key and transmits it back to the client. The client decrypts the
 ticket and uses it to sign requests to OSDs and metadata servers throughout the
 cluster.
 
-.. ditaa:: +---------+     +---------+
+.. ditaa::
+
+           +---------+     +---------+
            | Client  |     | Monitor |
            +---------+     +---------+
                 |  authenticate |
@@ -283,7 +293,9 @@ machine and the Ceph servers. Each message sent between a client and server,
 subsequent to the initial authentication, is signed using a ticket that the
 monitors, OSDs and metadata servers can verify with their shared secret.
 
-.. ditaa:: +---------+     +---------+     +-------+     +-------+
+.. ditaa::
+
+           +---------+     +---------+     +-------+     +-------+
            |  Client |     | Monitor |     |  MDS  |     |  OSD  |
            +---------+     +---------+     +-------+     +-------+
                 |  request to   |              |             |
@@ -393,7 +405,8 @@ ability to leverage this computing power leads to several major benefits:
    and tertiary OSDs (as many OSDs as additional replicas), and responds to the
    client once it has confirmed the object was stored successfully.
 
-.. ditaa:: 
+.. ditaa::
+
              +----------+
              |  Client  |
              |          |
@@ -443,7 +456,8 @@ Ceph Clients retrieve a `Cluster Map`_ from a Ceph Monitor, and write objects to
 pools. The pool's ``size`` or number of replicas, the CRUSH rule and the
 number of placement groups determine how Ceph will place the data.
 
-.. ditaa:: 
+.. ditaa::
+
             +--------+  Retrieves  +---------------+
             | Client |------------>|  Cluster Map  |
             +--------+             +---------------+
@@ -488,7 +502,8 @@ rebalance dynamically when new Ceph OSD Daemons and the underlying OSD devices
 come online. The following diagram depicts how CRUSH maps objects to placement
 groups, and placement groups to OSDs.
 
-.. ditaa:: 
+.. ditaa::
+
            /-----\  /-----\  /-----\  /-----\  /-----\
            | obj |  | obj |  | obj |  | obj |  | obj |
            \-----/  \-----/  \-----/  \-----/  \-----/
@@ -614,7 +629,8 @@ and each OSD gets some added capacity, so there are no load spikes on the
 new OSD after rebalancing is complete.
 
 
-.. ditaa:: 
+.. ditaa::
+
            +--------+     +--------+
    Before  |  OSD 1 |     |  OSD 2 |
            +--------+     +--------+
@@ -685,6 +701,7 @@ name. Chunk 1 contains ``ABC`` and is stored on **OSD5** while chunk 4 contains
 
 
 .. ditaa::
+
                             +-------------------+
                        name |       NYAN        |
                             +-------------------+
@@ -739,6 +756,7 @@ three chunks are read: **OSD2** was the slowest and its chunk was not taken into
 account.
 
 .. ditaa::
+
                                 +-------------------+
                            name |       NYAN        |
                                 +-------------------+
@@ -804,6 +822,7 @@ version 1).
 
 
 .. ditaa::
+
      Primary OSD
     
    +-------------+
@@ -934,6 +953,7 @@ object can be removed: ``D1v1`` on **OSD 1**, ``D2v1`` on **OSD 2** and ``C1v1``
 on **OSD 3**.
 
 .. ditaa::
+
      Primary OSD
     
    +-------------+
@@ -972,6 +992,7 @@ to be available on all OSDs in the previous acting set ) is ``1,1`` and that
 will be the head of the new authoritative log.
 
 .. ditaa::
+
    +-------------+
    |    OSD 1    |
    |   (down)    |
@@ -1017,6 +1038,7 @@ the erasure coding library during scrubbing and stored on the new primary
 
 
 .. ditaa::
+
      Primary OSD
     
    +-------------+
@@ -1068,7 +1090,8 @@ tier. So the cache tier and the backing storage tier are completely transparent
 to Ceph clients.
 
 
-.. ditaa:: 
+.. ditaa::
+
            +-------------+
            | Ceph Client |
            +------+------+
@@ -1150,7 +1173,8 @@ Cluster. Ceph packages this functionality into the ``librados`` library so that
 you can create your own custom Ceph Clients. The following diagram depicts the
 basic architecture.
 
-.. ditaa::  
+.. ditaa::
+
             +---------------------------------+
             |  Ceph Storage Cluster Protocol  |
             |           (librados)            |
@@ -1193,7 +1217,9 @@ notification. This enables a client to use any object as a
 synchronization/communication channel.
 
 
-.. ditaa:: +----------+     +----------+     +----------+     +---------------+
+.. ditaa::
+
+           +----------+     +----------+     +----------+     +---------------+
            | Client 1 |     | Client 2 |     | Client 3 |     | OSD:Object ID |
            +----------+     +----------+     +----------+     +---------------+
                  |                |                |                  |
@@ -1269,7 +1295,8 @@ take maximum advantage of Ceph's ability to distribute data across placement
 groups, and consequently doesn't improve performance very much. The following
 diagram depicts the simplest form of striping:
 
-.. ditaa::              
+.. ditaa::
+
                         +---------------+
                         |  Client Data  |
                         |     Format    |
@@ -1327,7 +1354,8 @@ set (``object set 2`` in the following diagram), and begins writing to the first
 stripe (``stripe unit 16``) in the first object in the new object set (``object
 4`` in the diagram below).
 
-.. ditaa::                 
+.. ditaa::
+
                           +---------------+
                           |  Client Data  |
                           |     Format    |
@@ -1443,6 +1471,7 @@ and high availability. The following diagram depicts the high-level
 architecture. 
 
 .. ditaa::
+
             +--------------+  +----------------+  +-------------+
             | Block Device |  | Object Storage |  |   CephFS    |
             +--------------+  +----------------+  +-------------+            
@@ -1527,6 +1556,7 @@ Cluster. Ceph Clients mount a CephFS filesystem as a kernel object or as
 a Filesystem in User Space (FUSE).
 
 .. ditaa::
+
             +-----------------------+  +------------------------+
             | CephFS Kernel Object  |  |      CephFS FUSE       |
             +-----------------------+  +------------------------+            
index c49531d55b3ed9a1b8332dbb43483122118614c3..d59dd2b6c0f63085105430728632e3ad0b5bbe04 100644 (file)
@@ -74,16 +74,11 @@ involved at all.
 -------------------
 By making use of :term:`LVM tags`, the :ref:`ceph-volume-lvm` sub-command is
 able to store and later re-discover and query devices associated with OSDs so
-that they can later activated. This includes support for lvm-based technologies
-like dm-cache as well.
-
-For ``ceph-volume``, the use of dm-cache is transparent, there is no difference
-for the tool, and it treats dm-cache like a plain logical volume.
+that they can later be activated.
 
 LVM performance penalty
 -----------------------
 In short: we haven't been able to notice any significant performance penalties
 associated with the change to LVM. By being able to work closely with LVM, the
-ability to work with other device mapper technologies (for example ``dmcache``)
-was a given: there is no technical difficulty in working with anything that can
-sit below a Logical Volume.
+ability to work with other device mapper technologies was a given: there is no
+technical difficulty in working with anything that can sit below a Logical Volume.
index 17cbeecd422447e0753f7dfde7311091fa72e741..6033b5aaf1b5a4f754130dd6e91a83838f844be8 100644 (file)
 
 ``batch``
 ===========
-This subcommand allows for multiple OSDs to be created at the same time given
-an input of devices. Depending on the device type (spinning drive, or solid
-state), the internal engine will decide the best approach to create the OSDs.
+The subcommand allows to create multiple OSDs at the same time given
+an input of devices. The ``batch`` subcommand is closely related to
+drive-groups. One individual drive group specification translates to a single
+``batch`` invocation.
 
-This decision abstracts away the many nuances when creating an OSD: how large
-should a ``block.db`` be? How can one mix a solid state device with spinning
-devices in an efficient way?
-
-The process is similar to :ref:`ceph-volume-lvm-create`, and will do the
-preparation and activation at once, following the same workflow for each OSD.
-However, If the ``--prepare`` flag is passed then only the prepare step is taken
-and the OSDs are not activated.
+The subcommand is based to :ref:`ceph-volume-lvm-create`, and will use the very
+same code path. All ``batch`` does is to calculate the appropriate sizes of all
+volumes and skip over already created volumes.
 
 All the features that ``ceph-volume lvm create`` supports, like ``dmcrypt``,
 avoiding ``systemd`` units from starting, defining bluestore or filestore,
-are supported. Any fine-grained option that may affect a single OSD is not
-supported, for example: specifying where journals should be placed.
-
+are supported.
 
 
+.. _ceph-volume-lvm-batch_auto:
 
-.. _ceph-volume-lvm-batch_bluestore:
-
-``bluestore``
--------------
-The :term:`bluestore` objectstore (the default) is used when creating multiple OSDs
-with the ``batch`` sub-command. It allows a few different scenarios depending
-on the input of devices:
+Automatic sorting of disks
+--------------------------
+If ``batch`` receives only a single list of data devices and other options are
+passed , ``ceph-volume`` will auto-sort disks by its rotational
+property and use non-rotating disks for ``block.db`` or ``journal`` depending
+on the objectstore used. If all devices are to be used for standalone OSDs,
+no matter if rotating or solid state, pass ``--no-auto``.
+For example assuming :term:`bluestore` is used and ``--no-auto`` is not passed,
+the deprecated behavior would deploy the following, depending on the devices
+passed:
 
 #. Devices are all spinning HDDs: 1 OSD is created per device
 #. Devices are all SSDs: 2 OSDs are created per device
 #. Devices are a mix of HDDs and SSDs: data is placed on the spinning device,
    the ``block.db`` is created on the SSD, as large as possible.
 
-
 .. note:: Although operations in ``ceph-volume lvm create`` allow usage of
-          ``block.wal`` it isn't supported with the ``batch`` sub-command
+          ``block.wal`` it isn't supported with the ``auto`` behavior.
 
+This default auto-sorting behavior is now DEPRECATED and will be changed in future releases.
+Instead devices are not automatically sorted unless the ``--auto`` option is passed
 
-.. _ceph-volume-lvm-batch_filestore:
+It is recommended to make use of the explicit device lists for ``block.db``,
+   ``block.wal`` and ``journal``.
 
-``filestore``
--------------
-The :term:`filestore` objectstore can be used when creating multiple OSDs
-with the ``batch`` sub-command. It allows two different scenarios depending
-on the input of devices:
+.. _ceph-volume-lvm-batch_bluestore:
 
-#. Devices are all the same type (for example all spinning HDD or all SSDs):
-   1 OSD is created per device, collocating the journal in the same HDD.
-#. Devices are a mix of HDDs and SSDs: data is placed on the spinning device,
-   while the journal is created on the SSD using the sizing options from
-   ceph.conf and falling back to the default journal size of 5GB.
+Reporting
+=========
+By default ``batch`` will print a report of the computed OSD layout and ask the
+user to confirm. This can be overridden by passing ``--yes``.
 
+If one wants to try out several invocations with being asked to deploy
+``--report`` can be passed. ``ceph-volume`` will exit after printing the report.
 
-When a mix of solid and spinning devices are used, ``ceph-volume`` will try to
-detect existing volume groups on the solid devices. If a VG is found, it will
-try to create the logical volume from there, otherwise raising an error if
-space is insufficient.
+Consider the following invocation::
 
-If a raw solid device is used along with a device that has a volume group in
-addition to some spinning devices, ``ceph-volume`` will try to extend the
-existing volume group and then create a logical volume.
+    $ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
 
-.. _ceph-volume-lvm-batch_report:
+This will deploy three OSDs with external ``db`` and ``wal`` volumes on
+an NVME device.
 
-Reporting
-=========
-When a call is received to create OSDs, the tool will prompt the user to
-continue if the pre-computed output is acceptable. This output is useful to
-understand the outcome of the received devices. Once confirmation is accepted,
-the process continues.
+**pretty reporting**
+The ``pretty`` report format (the default) would
+look like this::
 
-Although prompts are good to understand outcomes, it is incredibly useful to
-try different inputs to find the best product possible. With the ``--report``
-flag, one can prevent any actual operations and just verify outcomes from
-inputs.
+    $ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
+    --> passed data devices: 3 physical, 0 LVM
+    --> relative data size: 1.0
+    --> passed block_db devices: 1 physical, 0 LVM
 
-**pretty reporting**
-For two spinning devices, this is how the ``pretty`` report (the default) would
-look::
+    Total OSDs: 3
 
-    $ ceph-volume lvm batch --report /dev/sdb /dev/sdc
+      Type            Path                                                    LV Size         % of device
+    ----------------------------------------------------------------------------------------------------
+      data            /dev/sdb                                              300.00 GB         100.00%
+      block_db        /dev/nvme0n1                                           66.67 GB         33.33%
+    ----------------------------------------------------------------------------------------------------
+      data            /dev/sdc                                              300.00 GB         100.00%
+      block_db        /dev/nvme0n1                                           66.67 GB         33.33%
+    ----------------------------------------------------------------------------------------------------
+      data            /dev/sdd                                              300.00 GB         100.00%
+      block_db        /dev/nvme0n1                                           66.67 GB         33.33%
 
-    Total OSDs: 2
 
-      Type            Path                      LV Size         % of device
-    --------------------------------------------------------------------------------
-      [data]          /dev/sdb                  10.74 GB        100%
-    --------------------------------------------------------------------------------
-      [data]          /dev/sdc                  10.74 GB        100%
 
 
 
 **JSON reporting**
-Reporting can produce a richer output with ``JSON``, which gives a few more
-hints on sizing. This feature might be better for other tooling to consume
-information that will need to be transformed.
-
-For two spinning devices, this is how the ``JSON`` report would look::
-
-    $ ceph-volume lvm batch --report --format=json /dev/sdb /dev/sdc
-    {
-        "osds": [
-            {
-                "block.db": {},
-                "data": {
-                    "human_readable_size": "10.74 GB",
-                    "parts": 1,
-                    "path": "/dev/sdb",
-                    "percentage": 100,
-                    "size": 11534336000.0
-                }
-            },
-            {
-                "block.db": {},
-                "data": {
-                    "human_readable_size": "10.74 GB",
-                    "parts": 1,
-                    "path": "/dev/sdc",
-                    "percentage": 100,
-                    "size": 11534336000.0
-                }
-            }
-        ],
-        "vgs": [
-            {
-                "devices": [
-                    "/dev/sdb"
-                ],
-                "parts": 1
-            },
-            {
-                "devices": [
-                    "/dev/sdc"
-                ],
-                "parts": 1
-            }
-        ]
-    }
+Reporting can produce a structured output with ``--format json`` or
+``--format json-pretty``::
+
+    $ ceph-volume lvm batch --report --format json-pretty /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
+    --> passed data devices: 3 physical, 0 LVM
+    --> relative data size: 1.0
+    --> passed block_db devices: 1 physical, 0 LVM
+    [
+        {
+            "block_db": "/dev/nvme0n1",
+            "block_db_size": "66.67 GB",
+            "data": "/dev/sdb",
+            "data_size": "300.00 GB",
+            "encryption": "None"
+        },
+        {
+            "block_db": "/dev/nvme0n1",
+            "block_db_size": "66.67 GB",
+            "data": "/dev/sdc",
+            "data_size": "300.00 GB",
+            "encryption": "None"
+        },
+        {
+            "block_db": "/dev/nvme0n1",
+            "block_db_size": "66.67 GB",
+            "data": "/dev/sdd",
+            "data_size": "300.00 GB",
+            "encryption": "None"
+        }
+    ]
+
+Sizing
+======
+When no sizing arguments are passed, `ceph-volume` will derive the sizing from
+the passed device lists (or the sorted lists when using the automatic sorting).
+`ceph-volume batch` will attempt to fully utilize a device's available capacity.
+Relying on automatic sizing is recommended.
+
+If one requires a different sizing policy for wal, db or journal devices,
+`ceph-volume` offers implicit and explicit sizing rules.
+
+Implicit sizing
+---------------
+Scenarios in which either devices are under-comitted or not all data devices are
+currently ready for use (due to a broken disk for example), one can still rely
+on `ceph-volume` automatic sizing.
+Users can provide hints to `ceph-volume` as to how many data devices should have
+their external volumes on a set of fast devices. These options are:
+
+* ``--block-db-slots``
+* ``--block-wal-slots``
+* ``--journal-slots``
+
+For example, consider an OSD host that is supposed to contain 5 data devices and
+one device for wal/db volumes. However, one data device is currently broken and
+is being replaced. Instead of calculating the explicit sizes for the wal/db
+volume, one can simply call::
+
+    $ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd /dev/sde --db-devices /dev/nvme0n1 --block-db-slots 5
+
+Explicit sizing
+---------------
+It is also possible to provide explicit sizes to `ceph-volume` via the arguments
+
+* ``--block-db-size``
+* ``--block-wal-size``
+* ``--journal-size``
+
+`ceph-volume` will try to satisfy the requested sizes given the passed disks. If
+this is not possible, no OSDs will be deployed.
+
+
+Idempotency and disk replacements
+=================================
+`ceph-volume lvm batch` intends to be idempotent, i.e. calling the same command
+repeatedly must result in the same outcome. For example calling::
+
+    $ ceph-volume lvm batch --report /dev/sdb /dev/sdc /dev/sdd --db-devices /dev/nvme0n1
+
+will result in three deployed OSDs (if all disks were available). Calling this
+command again, you will still end up with three OSDs and ceph-volume will exit
+with return code 0.
+
+Suppose /dev/sdc goes bad and needs to be replaced. After destroying the OSD and
+replacing the hardware, you can again call the same command and `ceph-volume`
+will detect that only two out of the three wanted OSDs are setup and re-create
+the missing OSD.
+
+This idempotency notion is tightly coupled to and extensively used by :ref:`drivegroups`.
index 3683f6f5b66d78318d63d2c73d8d5ab00dba4967..fd40b7e1e1a897de191d96647564c7750a589bff 100644 (file)
@@ -253,28 +253,20 @@ work for both bluestore and filestore OSDs::
 
 ``multipath`` support
 ---------------------
-Devices that come from ``multipath`` are not supported as-is. The tool will
-refuse to consume a raw multipath device and will report a message like::
+``multipath`` devices are support if ``lvm`` is configured properly.
 
-    -->  RuntimeError: Cannot use device (/dev/mapper/<name>). A vg/lv path or an existing device is needed
+**Leave it to LVM**
 
-The reason for not supporting multipath is that depending on the type of the
-multipath setup, if using an active/passive array as the underlying physical
-devices, filters are required in ``lvm.conf`` to exclude the disks that are part of
-those underlying devices.
+Most Linux distributions should ship their LVM2 package with
+``multipath_component_detection = 1`` in the default configuration. With this
+setting ``LVM`` ignores any device that is a multipath component and
+``ceph-volume`` will accordingly not touch these devices.
 
-It is unfeasible for ceph-volume to understand what type of configuration is
-needed for LVM to be able to work in various different multipath scenarios. The
-functionality to create the LV for you is merely a (naive) convenience,
-anything that involves different settings or configuration must be provided by
-a config management system which can then provide VGs and LVs for ceph-volume
-to consume.
-
-This situation will only arise when trying to use the ceph-volume functionality
-that creates a volume group and logical volume from a device. If a multipath
-device is already a logical volume it *should* work, given that the LVM
-configuration is done correctly to avoid issues.
+**Using filters**
 
+Should this setting be unavailable, a correct ``filter`` expression must be
+provided in ``lvm.conf``. ``ceph-volume`` must not be able to use both the
+multipath device and its multipath components.
 
 Storing metadata
 ----------------
index 701c3d75f5593c5e191175e0f41fe932cb2e8c7f..5c1d2ad1bca288d0684dd4d4d980969b1e693e9e 100644 (file)
@@ -75,11 +75,11 @@ Adoption process
 #. Generate an SSH key::
 
      # ceph cephadm generate-key
-     # ceph cephadm get-pub-key > ceph.pub
+     # ceph cephadm get-pub-key > ~/ceph.pub
 
 #. Install the cluster SSH key on each host in the cluster::
 
-     # ssh-copy-id -f -i ceph.pub root@<host>
+     # ssh-copy-id -f -i ~/ceph.pub root@<host>
 
    .. note::
      It is also possible to import an existing ssh key. See
index dd0bc32856732c695f3cb1894753b027dac72fb1..3efc1cc11ffa7018afaa75eb386debd311d1e10d 100644 (file)
@@ -15,7 +15,9 @@ Config File Setup
 Client machines can generally get away with a smaller config file than
 a full-fledged cluster member. To generate a minimal config file, log
 into a host that is already configured as a client or running a cluster
-daemon, and then run::
+daemon, and then run
+
+.. code-block:: bash
 
     ceph config generate-minimal-conf
 
@@ -28,7 +30,9 @@ Keyring Setup
 Most Ceph clusters are run with authentication enabled, and the client will
 need keys in order to communicate with cluster machines. To generate a
 keyring file with credentials for `client.fs`, log into an extant cluster
-member and run::
+member and run
+
+.. code-block:: bash
 
     ceph auth get-or-create client.fs
 
index 8b1743799b4a014c36bb640ab3f700d8b6efd3df..7d11d22dbe14644d096b62715168d05fab9acc52 100644 (file)
@@ -49,7 +49,7 @@ host name:
     domain name (the part after the first dot). You can check the FQDN
     using ``hostname --fqdn`` or the domain name using ``dnsdomainname``.
 
-    ::
+    .. code-block:: none
 
           You cannot change the FQDN with hostname or dnsdomainname.
 
@@ -117,4 +117,4 @@ candidate hosts.
 However, there is a special cases that cephadm needs to consider.
 
 In case the are fewer hosts selected by the placement specification than 
-demanded by ``count``, cephadm will only deploy on selected hosts.
\ No newline at end of file
+demanded by ``count``, cephadm will only deploy on selected hosts.
index f1dd523e2220473a61d64296a5ea58eaccbefc9c..a1397af01ece1bf34283781f722e1e58db4ded26 100644 (file)
@@ -8,9 +8,11 @@ OSD Service Specification
 It gives the user an abstract way tell ceph which disks should turn into an OSD
 with which configuration without knowing the specifics of device names and paths.
 
-Instead of doing this::
+Instead of doing this
 
-  [monitor 1] # ceph orch daemon add osd *<host>*:*<path-to-device>*
+.. prompt:: bash [monitor.1]#
+
+  ceph orch daemon add osd *<host>*:*<path-to-device>*
 
 for each device and each host, we can define a yaml|json file that allows us to describe
 the layout. Here's the most basic example.
@@ -32,9 +34,11 @@ Turn any available(ceph-volume decides what 'available' is) into an OSD on all h
 the glob pattern '*'. (The glob pattern matches against the registered hosts from `host ls`)
 There will be a more detailed section on host_pattern down below.
 
-and pass it to `osd create` like so::
+and pass it to `osd create` like so
+
+.. prompt:: bash [monitor.1]#
 
-  [monitor 1] # ceph orch apply osd -i /path/to/osd_spec.yml
+  ceph orch apply osd -i /path/to/osd_spec.yml
 
 This will go out on all the matching hosts and deploy these OSDs.
 
@@ -43,9 +47,11 @@ Since we want to have more complex setups, there are more filters than just the
 Also, there is a `--dry-run` flag that can be passed to the `apply osd` command, which gives you a synopsis
 of the proposed layout.
 
-Example::
+Example
 
-  [monitor 1] # ceph orch apply osd -i /path/to/osd_spec.yml --dry-run
+.. prompt:: bash [monitor.1]#
+
+  [monitor.1]# ceph orch apply osd -i /path/to/osd_spec.yml --dry-run
 
 
 
@@ -64,7 +70,9 @@ Filters
 You can assign disks to certain groups by their attributes using filters.
 
 The attributes are based off of ceph-volume's disk query. You can retrieve the information
-with::
+with
+
+.. code-block:: bash
 
   ceph-volume inventory </path/to/disk>
 
@@ -105,20 +113,28 @@ Size specification of format can be of form:
 
 Concrete examples:
 
-Includes disks of an exact size::
+Includes disks of an exact size
+
+.. code-block:: yaml
 
     size: '10G'
 
-Includes disks which size is within the range::
+Includes disks which size is within the range
+
+.. code-block:: yaml
 
     size: '10G:40G'
 
-Includes disks less than or equal to 10G in size::
+Includes disks less than or equal to 10G in size
+
+.. code-block:: yaml
 
     size: ':10G'
 
 
-Includes disks equal to or greater than 40G in size::
+Includes disks equal to or greater than 40G in size
+
+.. code-block:: yaml
 
     size: '40G:'
 
@@ -206,7 +222,9 @@ Examples
 The simple case
 ---------------
 
-All nodes with the same setup::
+All nodes with the same setup
+
+.. code-block:: none
 
     20 HDDs
     Vendor: VendorA
@@ -265,7 +283,9 @@ Note: All of the above DriveGroups are equally valid. Which of those you want to
 The advanced case
 -----------------
 
-Here we have two distinct setups::
+Here we have two distinct setups
+
+.. code-block:: none
 
     20 HDDs
     Vendor: VendorA
@@ -317,7 +337,9 @@ The advanced case (with non-uniform nodes)
 
 The examples above assumed that all nodes have the same drives. That's however not always the case.
 
-Node1-5::
+Node1-5
+
+.. code-block:: none
 
     20 HDDs
     Vendor: Intel
@@ -328,7 +350,9 @@ Node1-5::
     Model: MC-55-44-ZX
     Size: 512GB
 
-Node6-10::
+Node6-10
+
+.. code-block:: none
 
     5 NVMEs
     Vendor: Intel
@@ -371,7 +395,7 @@ Dedicated wal + db
 All previous cases co-located the WALs with the DBs.
 It's however possible to deploy the WAL on a dedicated device as well, if it makes sense.
 
-::
+.. code-block:: none
 
     20 HDDs
     Vendor: VendorA
index e486231c6df5aff7b39d66be1fefc502e533dd18..a8c5de804d52e74693f748880f428603bc58abc9 100644 (file)
@@ -405,6 +405,9 @@ Alternatively, the realm, zonegroup, and zone can be manually created using ``ra
 
 See :ref:`orchestrator-cli-placement-spec` for details of the placement specification.
 
+
+.. _deploy-cephadm-nfs-ganesha:
+
 Deploying NFS ganesha
 =====================
 
index 4b6471caf1519a36d7509fa0297f13c5d9664614..b1a4157730cbfc28848eb504678cdf0bc9b9d693 100644 (file)
@@ -41,24 +41,34 @@ did not do this (by passing ``--skip-monitoring-stack``, or if you
 converted an existing cluster to cephadm management, you can set up
 monitoring by following the steps below.
 
-#. Enable the prometheus module in the ceph-mgr daemon.  This exposes the internal Ceph metrics so that prometheus can scrape them.::
+#. Enable the prometheus module in the ceph-mgr daemon.  This exposes the internal Ceph metrics so that prometheus can scrape them.
+
+   .. code-block:: bash
 
      ceph mgr module enable prometheus
 
-#. Deploy a node-exporter service on every node of the cluster.  The node-exporter provides host-level metrics like CPU and memory utilization.::
+#. Deploy a node-exporter service on every node of the cluster.  The node-exporter provides host-level metrics like CPU and memory utilization.
+
+   .. code-block:: bash
 
      ceph orch apply node-exporter '*'
 
-#. Deploy alertmanager::
+#. Deploy alertmanager
+
+   .. code-block:: bash
 
      ceph orch apply alertmanager 1
 
 #. Deploy prometheus.  A single prometheus instance is sufficient, but
-   for HA you may want to deploy two.::
+   for HA you may want to deploy two.
+
+   .. code-block:: bash
 
      ceph orch apply prometheus 1    # or 2
 
-#. Deploy grafana::
+#. Deploy grafana
+
+   .. code-block:: bash
 
      ceph orch apply grafana 1
 
@@ -66,7 +76,9 @@ Cephadm handles the prometheus, grafana, and alertmanager
 configurations automatically.
 
 It may take a minute or two for services to be deployed.  Once
-completed, you should see something like this from ``ceph orch ls``::
+completed, you should see something like this from ``ceph orch ls``
+
+.. code-block:: console
 
   $ ceph orch ls
   NAME           RUNNING  REFRESHED  IMAGE NAME                                      IMAGE ID        SPEC
@@ -88,11 +100,15 @@ configuration first.  The following configuration options are available.
 - ``container_image_alertmanager``
 - ``container_image_node_exporter``
 
-Custom images can be set with the ``ceph config`` command::
+Custom images can be set with the ``ceph config`` command
+
+.. code-block:: bash
 
      ceph config set mgr mgr/cephadm/<option_name> <value>
 
-For example::
+For example
+
+.. code-block:: bash
 
      ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1
 
@@ -107,11 +123,15 @@ For example::
      
      If you choose to go with the recommendations instead, you can reset the
      custom image you have set before.  After that, the default value will be
-     used again.  Use ``ceph config rm`` to reset the configuration option::
+     used again.  Use ``ceph config rm`` to reset the configuration option
+
+     .. code-block:: bash
 
           ceph config rm mgr mgr/cephadm/<option_name>
 
-     For example::
+     For example
+
+     .. code-block:: bash
 
           ceph config rm mgr mgr/cephadm/container_image_prometheus
 
@@ -119,7 +139,9 @@ Disabling monitoring
 --------------------
 
 If you have deployed monitoring and would like to remove it, you can do
-so with::
+so with
+
+.. code-block:: bash
 
   ceph orch rm grafana
   ceph orch rm prometheus --force   # this will delete metrics data collected so far
@@ -135,7 +157,9 @@ If you have an existing prometheus monitoring infrastructure, or would like
 to manage it yourself, you need to configure it to integrate with your Ceph
 cluster.
 
-* Enable the prometheus module in the ceph-mgr daemon::
+* Enable the prometheus module in the ceph-mgr daemon
+
+  .. code-block:: bash
 
      ceph mgr module enable prometheus
 
index 198286a3a3046c70b3d95be1e5c982cf731fbbaf..456f48628f3c1572ad07aa1f2bd3925a7d234c96 100644 (file)
@@ -278,19 +278,30 @@ You can disable this health warning with::
 /etc/ceph/ceph.conf
 ===================
 
-Cephadm uses a minimized ``ceph.conf`` that only contains 
+Cephadm distributes a minimized ``ceph.conf`` that only contains 
 a minimal set of information to connect to the Ceph cluster.
 
-To update the configuration settings, use::
+To update the configuration settings, instead of manually editing
+the ``ceph.conf`` file, use the config database instead::
 
   ceph config set ...
 
+See :ref:`ceph-conf-database` for details. 
 
-To set up an initial configuration before calling
-`bootstrap`, create an initial ``ceph.conf`` file. For example::
+By default, cephadm does not deploy that minimized ``ceph.conf`` across the
+cluster. To enable the management of ``/etc/ceph/ceph.conf`` files on all
+hosts, please enable this by running::
+
+  ceph config set mgr mgr/cephadm/manage_etc_ceph_ceph_conf true
+
+To set up an initial configuration before bootstrapping 
+the cluster, create an initial ``ceph.conf`` file. For example::
 
   cat <<EOF > /etc/ceph/ceph.conf
   [global]
   osd crush chooseleaf type = 0
   EOF
+
+Then, run bootstrap referencing this file::
+
   cephadm bootstrap -c /root/ceph.conf ...
index a439b3d7d3f05ed30b388b71d165b0e1531d9b63..5d7a29c3a0649ccfb6f2049146c5ea53b86838da 100644 (file)
@@ -110,44 +110,44 @@ ssh errors
 
 Error message::
 
-  xxxxxx.gateway_bootstrap.HostNotFound: -F /tmp/cephadm-conf-kbqvkrkw root@10.10.1.2
-  raise OrchestratorError('Failed to connect to %s (%s).  Check that the host is reachable and accepts  connections using the cephadm SSH key' % (host, addr)) from
-  orchestrator._interface.OrchestratorError: Failed to connect to 10.10.1.2 (10.10.1.2).  Check that the host is reachable and accepts connections using the cephadm SSH key
+  execnet.gateway_bootstrap.HostNotFound: -F /tmp/cephadm-conf-73z09u6g -i /tmp/cephadm-identity-ky7ahp_5 root@10.10.1.2
+  ...
+  raise OrchestratorError(msg) from e
+  orchestrator._interface.OrchestratorError: Failed to connect to 10.10.1.2 (10.10.1.2).
+  Please make sure that the host is reachable and accepts connections using the cephadm SSH key
+  ...
 
 Things users can do:
 
 1. Ensure cephadm has an SSH identity key::
-      
-     [root@mon1~]# cephadm shell -- ceph config-key get mgr/cephadm/ssh_identity_key > key
+
+     [root@mon1~]# cephadm shell -- ceph config-key get mgr/cephadm/ssh_identity_key > ~/cephadm_private_key
      INFO:cephadm:Inferring fsid f8edc08a-7f17-11ea-8707-000c2915dd98
      INFO:cephadm:Using recent ceph image docker.io/ceph/ceph:v15 obtained 'mgr/cephadm/ssh_identity_key'
-     [root@mon1 ~] # chmod 0600 key
+     [root@mon1 ~] # chmod 0600 ~/cephadm_private_key
 
  If this fails, cephadm doesn't have a key. Fix this by running the following command::
-   
+
      [root@mon1 ~]# cephadm shell -- ceph cephadm generate-ssh-key
 
  or::
-   
-     [root@mon1 ~]# cat key | cephadm shell -- ceph cephadm set-ssk-key -i -
+
+     [root@mon1 ~]# cat ~/cephadm_private_key | cephadm shell -- ceph cephadm set-ssk-key -i -
 
 2. Ensure that the ssh config is correct::
-   
+
      [root@mon1 ~]# cephadm shell -- ceph cephadm get-ssh-config > config
 
 3. Verify that we can connect to the host::
-    
-     [root@mon1 ~]# ssh -F config -i key root@mon1
-
-
 
+     [root@mon1 ~]# ssh -F config -i ~/cephadm_private_key root@mon1
 
 Verifying that the Public Key is Listed in the authorized_keys file
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 To verify that the public key is in the authorized_keys file, run the following commands::
 
-     [root@mon1 ~]# cephadm shell -- ceph config-key get mgr/cephadm/ssh_identity_pub > key.pub
-     [root@mon1 ~]# grep "`cat key.pub`"  /root/.ssh/authorized_keys
+     [root@mon1 ~]# cephadm shell -- ceph cephadm get-pub-key > ~/ceph.pub
+     [root@mon1 ~]# grep "`cat ~/ceph.pub`"  /root/.ssh/authorized_keys
 
 Failed to infer CIDR network error
 ----------------------------------
index 61ce379f5a649d36908697b2ec9b56fc20fd3bc2..8c7810ba0a4ea53a97aaa443707c53629172cc07 100644 (file)
@@ -19,6 +19,7 @@ client cache.
 
 
 .. ditaa::
+
             +---------------------+
             |     Application     |
             +---------------------+
index 9740404bd6022a47322012b28210a10f23029f1d..e655c9233a010c33b13dbd82b37c9b55fe37d9a5 100644 (file)
@@ -17,15 +17,39 @@ Create NFS Ganesha Cluster
 
 .. code:: bash
 
-    $ ceph nfs cluster create <type=cephfs> <clusterid> [<placement>]
+    $ ceph nfs cluster create <type> <clusterid> [<placement>]
 
-This creates a common recovery pool for all Ganesha daemons, new user based on
-cluster_id and common ganesha config rados object.
+This creates a common recovery pool for all NFS Ganesha daemons, new user based on
+cluster_id, and a common NFS Ganesha config RADOS object.
 
-Here type is export type and placement specifies the size of cluster and hosts.
-For more details on placement specification refer the `orchestrator doc
-<https://docs.ceph.com/docs/master/mgr/orchestrator/#placement-specification>`_.
-Currently only CephFS export type is supported.
+NOTE: Since this command also brings up NFS Ganesha daemons using a ceph-mgr
+orchestrator module (see :doc:`/mgr/orchestrator`) such as "mgr/cephadm", at
+least one such module must be enabled for it to work.
+
+<type> signifies the export type, which corresponds to the NFS Ganesha file
+system abstraction layer (FSAL). Permissible values are "cephfs" or "rgw", but
+currently only "cephfs" is supported.
+
+<clusterid> is an arbitrary string by which this NFS Ganesha cluster will be
+known.
+
+<placement> is an optional string signifying which hosts should have NFS Ganesha
+daemon containers running on them and, optionally, the total number of NFS
+Ganesha daemons the cluster (should you want to have more than one NFS Ganesha
+daemon running per node). For example, the following placement string means
+"deploy NFS Ganesha daemons on nodes host1 and host2 (one daemon per host):
+
+    "host1,host2"
+
+and this placement specification says to deploy two NFS Ganesha daemons each
+on nodes host1 and host2 (for a total of four NFS Ganesha daemons in the
+cluster):
+
+    "4 host1,host2"
+
+For more details on placement specification refer to the `orchestrator doc
+<https://docs.ceph.com/docs/master/mgr/orchestrator/#placement-specification>`_
+but keep in mind that specifying the placement via a YAML file is not supported.
 
 Update NFS Ganesha Cluster
 ==========================
@@ -63,8 +87,8 @@ Show NFS Ganesha Cluster Information
 
 This displays ip and port of deployed cluster.
 
-Set Customized Ganesha Configuration
-====================================
+Set Customized NFS Ganesha Configuration
+========================================
 
 .. code:: bash
 
@@ -73,8 +97,8 @@ Set Customized Ganesha Configuration
 With this the nfs cluster will use the specified config and it will have
 precedence over default config blocks.
 
-Reset Ganesha Configuration
-===========================
+Reset NFS Ganesha Configuration
+===============================
 
 .. code:: bash
 
@@ -89,8 +113,14 @@ Create CephFS Export
 
     $ ceph nfs export create cephfs <fsname> <clusterid> <binding> [--readonly] [--path=/path/in/cephfs]
 
-It creates export rados objects containing the export block. Here binding is
-the pseudo root name and type is export type.
+This creates export RADOS objects containing the export block, where
+
+``fsname`` is the name of the FS volume used by the NFS Ganesha cluster that will
+serve this export.
+
+``clusterid`` is the NFS Ganesha cluster ID.
+
+``binding`` is the pseudo root path (must be an absolute path).
 
 Delete CephFS Export
 ====================
@@ -99,17 +129,24 @@ Delete CephFS Export
 
     $ ceph nfs export delete <clusterid> <binding>
 
-It deletes an export in cluster based on pseudo root name (binding).
+This deletes an export in an NFS Ganesha cluster, where:
+
+``clusterid`` is the NFS Ganesha cluster ID.
+
+``binding`` is the pseudo root path (must be an absolute path).
 
-List CephFS Export
-==================
+List CephFS Exports
+===================
 
 .. code:: bash
 
     $ ceph nfs export ls <clusterid> [--detailed]
 
-It lists export for a cluster. With detailed option enabled it shows entire
-export block.
+It lists exports for a cluster, where:
+
+``clusterid`` is the NFS Ganesha cluster ID.
+
+With the ``--detailed`` option enabled it shows entire export block.
 
 Get CephFS Export
 =================
@@ -118,18 +155,25 @@ Get CephFS Export
 
     $ ceph nfs export get <clusterid> <binding>
 
-It displays export block for a cluster based on pseudo root name (binding).
+This displays export block for a cluster based on pseudo root name (binding),
+where:
 
-Configuring NFS-Ganesha to export CephFS with vstart
+``clusterid`` is the NFS Ganesha cluster ID.
+
+``binding`` is the pseudo root path (must be an absolute path).
+
+Configuring NFS Ganesha to export CephFS with vstart
 ====================================================
 
-1) Using cephadm
+1) Using ``cephadm``
 
     .. code:: bash
 
         $ MDS=1 MON=1 OSD=3 NFS=1 ../src/vstart.sh -n -d --cephadm
 
-    It can deploy only single ganesha daemon with vstart on default ganesha port.
+    This will deploy a single NFS Ganesha daemon using ``vstart.sh``, where:
+
+    The daemon will listen on the default NFS Ganesha port.
 
 2) Using test orchestrator
 
@@ -137,15 +181,17 @@ Configuring NFS-Ganesha to export CephFS with vstart
 
        $ MDS=1 MON=1 OSD=3 NFS=1 ../src/vstart.sh -n -d
 
-    It can deploy multiple ganesha daemons on random port. But this requires
-    ganesha packages to be installed.
+    This will deploy multiple NFS Ganesha daemons, each listening on a random
+    port, where:
+
+    ``NFS`` is the number of NFS Ganesha clusters to be created.
 
-NFS: It is the number of NFS-Ganesha clusters to be created.
+    NOTE: NFS Ganesha packages must be pre-installed for this to work.
 
 Mount
 =====
 
-After the exports are successfully created and Ganesha daemons are no longer in
+After the exports are successfully created and NFS Ganesha daemons are no longer in
 grace period. The exports can be mounted by
 
 .. code:: bash
index 4efe26d8b642222373a7c39ec61f44be9e5f7d45..8073403349692ebd4a56b3a44f5dd268704dffac 100644 (file)
@@ -45,9 +45,29 @@ Create a volume using::
 
     $ ceph fs volume create <vol_name> [<placement>]
 
-This creates a CephFS file system and its data and metadata pools. It also tries
-to create MDSes for the filesystem using the enabled ceph-mgr orchestrator
-module  (see :doc:`/mgr/orchestrator`) , e.g., rook.
+This creates a CephFS file system and its data and metadata pools. It can also
+try to create MDSes for the filesystem using the enabled ceph-mgr orchestrator
+module (see :doc:`/mgr/orchestrator`), e.g. rook.
+
+<vol_name> is the volume name (an arbitrary string), and
+
+<placement> is an optional string signifying which hosts should have NFS Ganesha
+daemon containers running on them and, optionally, the total number of NFS
+Ganesha daemons the cluster (should you want to have more than one NFS Ganesha
+daemon running per node). For example, the following placement string means
+"deploy NFS Ganesha daemons on nodes host1 and host2 (one daemon per host):
+
+    "host1,host2"
+
+and this placement specification says to deploy two NFS Ganesha daemons each
+on nodes host1 and host2 (for a total of four NFS Ganesha daemons in the
+cluster):
+
+    "4 host1,host2"
+
+For more details on placement specification refer to the `orchestrator doc
+<https://docs.ceph.com/docs/master/mgr/orchestrator/#placement-specification>`_
+but keep in mind that specifying the placement via a YAML file is not supported.
 
 Remove a volume using::
 
@@ -251,6 +271,10 @@ Similar to specifying a pool layout when creating a subvolume, pool layout can b
 
   $ ceph fs subvolume snapshot clone <vol_name> <subvol_name> <snap_name> <target_subvol_name> --pool_layout <pool_layout>
 
+Configure maximum number of concurrent clones. The default is set to 4::
+
+  $ ceph config set mgr mgr/volumes/max_concurrent_clones <value>
+
 To check the status of a clone operation use::
 
   $ ceph fs clone status <vol_name> <clone_name> [--group_name <group_name>]
index 2e79c7bfa15b7baccf7a550913a55568bf7b46ac..54e334111e50c91fc671c770325e2adacf99f69b 100644 (file)
@@ -59,8 +59,8 @@ by the setting ``mds_log_max_segments``, and when the number of segments
 exceeds that setting the MDS starts writing back metadata so that it
 can remove (trim) the oldest segments.  If this writeback is happening
 too slowly, or a software bug is preventing trimming, then this health
-message may appear.  The threshold for this message to appear is for the
-number of segments to be double ``mds_log_max_segments``.
+message may appear.  The threshold for this message to appear is controlled by
+the config option ``mds_log_warn_factor``, the default is 2.0.
 
 Message: "Client *name* failing to respond to capability release"
 Code: MDS_HEALTH_CLIENT_LATE_RELEASE, MDS_HEALTH_CLIENT_LATE_RELEASE_MANY
index 6ed0f7ee5f68eca080c17bc16422b0ca0f2799a7..7c84eaf84b15aa67bfc50888f787e7f4ca7a3d65 100644 (file)
@@ -1,3 +1,4 @@
+import shutil
 import sys
 import os
 
@@ -53,14 +54,35 @@ extensions = [
     'sphinx_autodoc_typehints',
     'sphinx.ext.graphviz',
     'sphinx.ext.todo',
-    'sphinxcontrib.ditaa',
+    'sphinx-prompt',
+    'sphinx_substitution_extensions',
     'breathe',
     'edit_on_github',
     'ceph_releases',
     ]
-ditaa = 'ditaa'
+
+ditaa = shutil.which("ditaa")
+if ditaa is not None:
+    extensions += ['sphinxcontrib.ditaa']
+else:
+    extensions += ['plantweb.directive']
+    plantweb_defaults = {
+        'engine': 'ditaa'
+    }
+
+build_with_rtd = os.environ.get('READTHEDOCS') == 'True'
+if build_with_rtd:
+    extensions += ['sphinx_search.extension']
+
+# sphinx.ext.todo
 todo_include_todos = True
 
+# sphinx_substitution_extensions
+# TODO: read from doc/releases/releases.yml
+rst_prolog = """
+.. |stable-release| replace:: octopus
+"""
+
 top_level = os.path.dirname(
     os.path.dirname(
         os.path.abspath(__file__)
@@ -87,6 +109,10 @@ edit_on_github_branch = 'master'
 # handles edit-on-github and old version warning display
 def setup(app):
     app.add_javascript('js/ceph.js')
+    if ditaa is None:
+        # add "ditaa" as an alias of "diagram"
+        from plantweb.directive import DiagramDirective
+        app.add_directive('ditaa', DiagramDirective)
 
 # mocking ceph_module offered by ceph-mgr. `ceph_module` is required by
 # mgr.mgr_module
@@ -110,8 +136,21 @@ class Mock(object):
 
 sys.modules['ceph_module'] = Mock()
 
-for pybind in [os.path.join(top_level, 'src/pybind'),
-               os.path.join(top_level, 'src/pybind/mgr'),
-               os.path.join(top_level, 'src/python-common')]:
+if build_with_rtd:
+    exclude_patterns += ['**/api/*',
+                         '**/api.rst']
+    autodoc_mock_imports = ['cephfs',
+                            'rados',
+                            'rbd',
+                            'ceph']
+    pybinds = ['pybind/mgr',
+               'python-common']
+else:
+    pybinds = ['pybind',
+               'pybind/mgr',
+               'python-common']
+
+for c in pybinds:
+    pybind = os.path.join(top_level, 'src', c)
     if pybind not in sys.path:
         sys.path.insert(0, pybind)
index ffb2a283b838c2f0304a0a809c1af2ed41eb6d13..def15955e43798cd5ead5e2fb1b0ba51e4139de4 100644 (file)
@@ -50,7 +50,8 @@ More details in https://ieeexplore.ieee.org/document/8416369
 Design
 ======
 
-.. ditaa:: 
+.. ditaa::
+
            +-------------+
            | Ceph Client |
            +------+------+
index 0eed9e67fa26bea1541c8ed45b2de0c909d3e6c1..585dc34d208cd9a10f7a8f70da33cf303e91d85f 100644 (file)
@@ -74,7 +74,9 @@ If the remote party advertises required features we don't support, we
 can disconnect.
 
 
-.. ditaa:: +---------+        +--------+
+.. ditaa::
+
+           +---------+        +--------+
            | Client  |        | Server |
            +---------+        +--------+
                 | send banner     |
@@ -291,7 +293,9 @@ Authentication
 Example of authentication phase interaction when the client uses an
 allowed authentication method:
 
-.. ditaa:: +---------+        +--------+
+.. ditaa::
+
+           +---------+        +--------+
            | Client  |        | Server |
            +---------+        +--------+
                 | auth request    |
@@ -308,7 +312,9 @@ allowed authentication method:
 Example of authentication phase interaction when the client uses a forbidden
 authentication method as the first attempt:
 
-.. ditaa:: +---------+        +--------+
+.. ditaa::
+
+           +---------+        +--------+
            | Client  |        | Server |
            +---------+        +--------+
                 | auth request    |
@@ -615,7 +621,9 @@ Example of failure scenarios:
 
 * First client's client_ident message is lost, and then client reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -633,7 +641,9 @@ Example of failure scenarios:
 
 * Server's server_ident message is lost, and then client reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -654,7 +664,9 @@ Example of failure scenarios:
 
 * Server's server_ident message is lost, and then server reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -678,7 +690,9 @@ Example of failure scenarios:
 
 * Connection failure after session is established, and then client reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -696,7 +710,9 @@ Example of failure scenarios:
 * Connection failure after session is established because server reset,
   and then client reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -722,7 +738,9 @@ of the connection.
 * Connection failure after session is established because client reset,
   and then client reconnects.
 
-.. ditaa:: +---------+           +--------+
+.. ditaa::
+
+           +---------+           +--------+
            | Client  |           | Server |
            +---------+           +--------+
                 |                     |
@@ -789,7 +807,9 @@ Example of protocol interaction (WIP)
 _____________________________________
 
 
-.. ditaa:: +---------+        +--------+
+.. ditaa::
+
+           +---------+        +--------+
            | Client  |        | Server |
            +---------+        +--------+
                 | send banner       |
index c4589c7b3d3c91cc83bb18eee8328eac64cd65f7..03a59636b76028e9ce16b63151728f4d24eb3825 100644 (file)
@@ -163,6 +163,7 @@ cluster. Then add a Ceph Monitor and Ceph Manager to ``node2`` and ``node3``
 to improve reliability and availability.
 
 .. ditaa::
+
            /------------------\         /----------------\
            |    ceph-deploy   |         |     node1      |
            |    Admin Node    |         | cCCC           |
index e8ca28f86ee16dabd87004455bfd1becb450a203..9897219575c77bfd9232cbb111da6fc701501584 100644 (file)
@@ -44,6 +44,7 @@ For example::
 Now, your Ceph cluster would look like this:
 
 .. ditaa::
+
            /------------------\         /----------------\
            |    ceph-deploy   |         |     node1      |
            |    Admin Node    |         | cCCC           |
index 915a7b886422d14a8e5474b1384893e8b7b92806..25668f798d71e0026c9802df1d9e0b18d1ee7b46 100644 (file)
@@ -1,4 +1,5 @@
-.. ditaa:: 
+.. ditaa::
+
            /------------------\         /-----------------\
            |    admin-node    |         |      node1      |
            |                  +-------->+ cCCC            |
index ab518c033ce10696d6b1d671204ea388f498eed2..c14ea60a1f649f70438be6c60d07332c34fb110f 100644 (file)
@@ -127,32 +127,42 @@ Debian Packages
 
 Add a Ceph package repository to your system's list of APT sources. For newer
 versions of Debian/Ubuntu, call ``lsb_release -sc`` on the command line to
-get the short codename, and replace ``{codename}`` in the following command. ::
+get the short codename, and replace ``{codename}`` in the following command.
 
-       sudo apt-add-repository 'deb https://download.ceph.com/debian-luminous/ {codename} main'
+.. prompt:: bash $
+   :substitutions:
 
-For early Linux distributions, you may execute the following command::
+   sudo apt-add-repository 'deb https://download.ceph.com/debian-|stable-release|/ {codename} main'
 
-       echo deb https://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
+For early Linux distributions, you may execute the following command
+
+.. prompt:: bash $
+   :substitutions:
+
+   echo deb https://download.ceph.com/debian-|stable-release|/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
 
 For earlier Ceph releases, replace ``{release-name}`` with the name  with the
 name of the Ceph release. You may call ``lsb_release -sc`` on the command  line
 to get the short codename, and replace ``{codename}`` in the following command.
 
-::
+.. prompt:: bash $
 
-       sudo apt-add-repository 'deb https://download.ceph.com/debian-{release-name}/ {codename} main'
+   sudo apt-add-repository 'deb https://download.ceph.com/debian-{release-name}/ {codename} main'
 
 For older Linux distributions, replace ``{release-name}`` with the name of the
-release::
+release
+
+.. prompt:: bash $
 
        echo deb https://download.ceph.com/debian-{release-name}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
 
 For development release packages, add our package repository to your system's
 list of APT sources.  See `the testing Debian repository`_ for a complete list
-of Debian and Ubuntu releases supported. ::
+of Debian and Ubuntu releases supported.
 
-       echo deb https://download.ceph.com/debian-testing/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
+.. prompt:: bash $
+
+   echo deb https://download.ceph.com/debian-testing/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
 
 .. tip:: For non-US users: There might be a mirror close to you where
          to download Ceph from. For more information see: `Ceph Mirrors`_.
@@ -166,12 +176,14 @@ RHEL
 
 For major releases, you may add a Ceph entry to the ``/etc/yum.repos.d``
 directory. Create a ``ceph.repo`` file. In the example below, replace
-``{ceph-release}`` with  a major release of Ceph (e.g., ``luminous``, ``mimic``, ``nautilus``,
-etc.) and ``{distro}`` with your Linux distribution (e.g., ``el7``, etc.).  You
+``{ceph-release}`` with  a major release of Ceph (e.g., ``|stable-release|``)
+and ``{distro}`` with your Linux distribution (e.g., ``el8``, etc.).  You
 may view https://download.ceph.com/rpm-{ceph-release}/ directory to see which
 distributions Ceph supports. Some Ceph packages (e.g., EPEL) must take priority
 over standard packages, so you must ensure that you set
-``priority=2``. ::
+``priority=2``.
+
+.. code-block:: ini
 
        [ceph]
        name=Ceph packages for $basearch
@@ -206,13 +218,17 @@ weeks of QA prior to release.
 
 The repository package installs the repository details on your local system for
 use with ``yum``. Replace ``{distro}`` with your Linux distribution, and
-``{release}`` with the specific release of Ceph::
+``{release}`` with the specific release of Ceph
+
+.. prompt:: bash $
 
     su -c 'rpm -Uvh https://download.ceph.com/rpms/{distro}/x86_64/ceph-{release}.el7.noarch.rpm'
 
-You can download the RPMs directly from::
+You can download the RPMs directly from
+
+.. code-block:: none
 
-     https://download.ceph.com/rpm-testing
+   https://download.ceph.com/rpm-testing
 
 .. tip:: For non-US users: There might be a mirror close to you where
          to download Ceph from. For more information see: `Ceph Mirrors`_.
@@ -220,7 +236,9 @@ You can download the RPMs directly from::
 openSUSE Leap 15.1
 ^^^^^^^^^^^^^^^^^^
 
-You need to add the Ceph package repository to your list of zypper sources. This can be done with the following command ::
+You need to add the Ceph package repository to your list of zypper sources. This can be done with the following command
+
+.. code-block:: bash
 
     zypper ar https://download.opensuse.org/repositories/filesystems:/ceph/openSUSE_Leap_15.1/filesystems:ceph.repo
 
@@ -248,7 +266,9 @@ only.
 Add the package repository to your system's list of APT sources, but
 replace ``{BRANCH}`` with the branch you'd like to use (e.g.,
 wip-hack, master).  See `the shaman page`_ for a complete
-list of distributions we build. ::
+list of distributions we build.
+
+.. prompt:: bash $
 
     curl -L https://shaman.ceph.com/api/repos/ceph/{BRANCH}/latest/ubuntu/$(lsb_release -sc)/repo/ | sudo tee /etc/apt/sources.list.d/shaman.list
 
@@ -256,7 +276,9 @@ list of distributions we build. ::
 
 The use of ``latest`` in the url, means it will figure out which is the last
 commit that has been built. Alternatively, a specific sha1 can be specified.
-For Ubuntu Xenial and the master branch of Ceph, it would look like::
+For Ubuntu Xenial and the master branch of Ceph, it would look like
+
+.. prompt:: bash $
 
     curl -L https://shaman.ceph.com/api/repos/ceph/master/53e772a45fdf2d211c0c383106a66e1feedec8fd/ubuntu/xenial/repo/ | sudo tee /etc/apt/sources.list.d/shaman.list
 
@@ -268,13 +290,17 @@ RPM Packages
 
 For current development branches, you may add a Ceph entry to the
 ``/etc/yum.repos.d`` directory. The `the shaman page`_ can be used to retrieve the full details
-of a repo file. It can be retrieved via an HTTP request, for example::
+of a repo file. It can be retrieved via an HTTP request, for example
+
+.. prompt:: bash $
 
     curl -L https://shaman.ceph.com/api/repos/ceph/{BRANCH}/latest/centos/7/repo/ | sudo tee /etc/yum.repos.d/shaman.repo
 
 The use of ``latest`` in the url, means it will figure out which is the last
 commit that has been built. Alternatively, a specific sha1 can be specified.
-For CentOS 7 and the master branch of Ceph, it would look like::
+For CentOS 7 and the master branch of Ceph, it would look like
+
+.. prompt:: bash $
 
     curl -L https://shaman.ceph.com/api/repos/ceph/master/53e772a45fdf2d211c0c383106a66e1feedec8fd/centos/7/repo/ | sudo tee /etc/apt/sources.list.d/shaman.list
 
@@ -309,7 +335,7 @@ use with ``apt``. Replace ``{release}`` with the latest Ceph release. Replace
 ``{version}`` with the latest Ceph version number. Replace ``{distro}`` with
 your Linux distribution codename. Replace ``{arch}`` with the CPU architecture.
 
-::
+.. prompt:: bash $
 
        wget -q https://download.ceph.com/debian-{release}/pool/main/c/ceph/ceph_{version}{distro}_{arch}.deb
 
@@ -318,7 +344,9 @@ RPM Packages
 ~~~~~~~~~~~~
 
 Ceph requires additional additional third party libraries.
-To add the EPEL repository, execute the following::
+To add the EPEL repository, execute the following
+
+.. prompt:: bash $
 
    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 
@@ -333,22 +361,33 @@ Ceph requires the following packages:
 
 Packages are currently built for the RHEL/CentOS7 (``el7``) platforms.  The
 repository package installs the repository details on your local system for use
-with ``yum``. Replace ``{distro}`` with your distribution. ::
+with ``yum``. Replace ``{distro}`` with your distribution.
 
-    su -c 'rpm -Uvh https://download.ceph.com/rpm-luminous/{distro}/noarch/ceph-{version}.{distro}.noarch.rpm'
+.. prompt:: bash $
+   :substitutions:
 
-For example, for CentOS 7  (``el7``)::
+   su -c 'rpm -Uvh https://download.ceph.com/rpm-|stable-release|/{distro}/noarch/ceph-{version}.{distro}.noarch.rpm'
 
-    su -c 'rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-0.el7.noarch.rpm'
+For example, for CentOS 8  (``el8``)
 
-You can download the RPMs directly from::
+.. prompt:: bash $
+   :substitutions:
 
-       https://download.ceph.com/rpm-luminous
+   su -c 'rpm -Uvh https://download.ceph.com/rpm-|stable-release|/el8/noarch/ceph-release-1-0.el8.noarch.rpm'
+
+You can download the RPMs directly from
+
+.. code-block:: none
+   :substitutions:
+
+   https://download.ceph.com/rpm-|stable-release|
 
 
 For earlier Ceph releases, replace ``{release-name}`` with the name
 with the name of the Ceph release. You may call ``lsb_release -sc`` on the command
-line to get the short codename. ::
+line to get the short codename.
+
+.. prompt:: bash $
 
        su -c 'rpm -Uvh https://download.ceph.com/rpm-{release-name}/{distro}/noarch/ceph-{version}.{distro}.noarch.rpm'
 
index 3e1db12370f489d8a2639a83a0b3dce46d58a088..876422865154eb6c7fbd414e568ae5dbd06b11a3 100644 (file)
@@ -9,7 +9,9 @@ Examples of VMs include: QEMU/KVM, XEN, VMWare, LXC, VirtualBox, etc. Examples
 of Cloud Platforms include OpenStack, CloudStack, OpenNebula, etc.
 
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+
+            +---------------------------------------------------+
             |                     libvirt                       |
             +------------------------+--------------------------+
                                      |
index a42a80f83db569f7bffcde70a853c4c1c55da3b3..103c4dcd58f1458543ca6a8466268daf0edf3d44 100644 (file)
@@ -18,6 +18,7 @@ OSD nodes.
 
 
 .. ditaa::
+
            /------------------\         /----------------\
            |    Admin Node    |         |     node1      |
            |                  +-------->+                |
index d4eb14718eb62f7919c9de6e6852c9c0e2f53a5b..5f8f768c9f19cabf26f312505a65b5133d1e38f8 100644 (file)
@@ -22,6 +22,7 @@ OSD nodes.
 
 
 .. ditaa::
+
            /------------------\         /----------------\
            |    Admin Node    |         |     node1      |
            |                  +-------->+                |
index 72bbf22edab0015a299e9eb6d2a441291513fb13..7a2473485929becda8d4350cdd831da3c4129550 100644 (file)
@@ -21,13 +21,14 @@ Synopsis
 
 | **cephadm** **inspect-image**
 
-| **cephadm** **ls**
+| **cephadm** **ls** [-h] [--no-detail] [--legacy-dir LEGACY_DIR]
 
 | **cephadm** **list-networks**
 
 | **cephadm** **adopt** [-h] --name NAME --style STYLE [--cluster CLUSTER]
 |                       [--legacy-dir LEGACY_DIR] [--config-json CONFIG_JSON]
 |                       [--skip-firewalld] [--skip-pull]
+|                       [--container-init]
 
 | **cephadm** **rm-daemon** [-h] --name NAME --fsid FSID [--force]
 |                           [--force-delete-data]
@@ -37,7 +38,7 @@ Synopsis
 | **cephadm** **run** [-h] --name NAME --fsid FSID
 
 | **cephadm** **shell** [-h] [--fsid FSID] [--name NAME] [--config CONFIG]
-                        [--keyring KEYRING] [--mount MOUNT] [--env ENV]
+                        [--keyring KEYRING] --mount [MOUNT [MOUNT ...]] [--env ENV]
                         [--] [command [command ...]]
 
 | **cephadm** **enter** [-h] [--fsid FSID] --name NAME [command [command ...]]
@@ -77,6 +78,7 @@ Synopsis
 |                           [--registry-username REGISTRY_USERNAME]
 |                           [--registry-password REGISTRY_PASSWORD]
 |                           [--registry-json REGISTRY_JSON]
+|                           [--container-init]
 
 
 
@@ -84,6 +86,7 @@ Synopsis
 |                        [--config-json CONFIG_JSON] [--keyring KEYRING]
 |                        [--key KEY] [--osd-fsid OSD_FSID] [--skip-firewalld]
 |                        [--tcp-ports TCP_PORTS] [--reconfig] [--allow-ptrace]
+|                        [--container-init]
 
 | **cephadm** **check-host** [-h] [--expect-hostname EXPECT_HOSTNAME]
 
@@ -235,6 +238,8 @@ Arguments:
 * [--registry-username REGISTRY_USERNAME] username of account to login to on custom registry
 * [--registry-password REGISTRY_PASSWORD] password of account to login to on custom registry
 * [--registry-json REGISTRY_JSON] JSON file containing registry login info (see registry-login command documentation)
+* [--container-init]              Run podman/docker with `--init`
+
 
 ceph-volume
 -----------
@@ -284,6 +289,7 @@ Arguments:
 * [--tcp-ports                List of tcp ports to open in the host firewall
 * [--reconfig]                Reconfigure a previously deployed daemon
 * [--allow-ptrace]            Allow SYS_PTRACE on daemon container
+* [--container-init]          Run podman/docker with `--init`
 
 
 enter
@@ -346,6 +352,11 @@ list daemon instances known to cephadm on **this** host::
         },
     ...
 
+Arguments:
+
+* [--no-detail]             Do not include daemon status
+* [--legacy-dir LEGACY_DIR] Base directory for legacy daemon data
+
 logs
 ----
 
@@ -357,6 +368,21 @@ This is similar to::
 
     journalctl -u mgr.myhost.ysubfo
 
+Can also specify additional journal arguments::
+
+    cephadm logs --name mgr.myhost.ysubfo -- -n 20 # last 20 lines
+    cephadm logs --name mgr.myhost.ysubfo -- -f # follow the log
+
+
+Positional arguments:
+
+* [command]               command (optional)
+
+Arguments:
+
+* [--fsid FSID]           cluster FSID
+* [--name NAME, -n NAME]  daemon name (type.id)
+
 
 prepare-host
 ------------
index 81a962a0050aaea8c1118b26cf61daeb69bebce5..131e981fac7d07b052b402f5162a6f8052d125b0 100644 (file)
@@ -131,6 +131,10 @@ Options
 
    clears pg_temp and primary_temp variables.
 
+.. option:: --clean-temps
+
+   clean pg_temps.
+
 .. option:: --health
 
    dump health checks
index 52a684fcdfe7a613a850661eb0be77d78cf5235f..cc920a1af2de32657fc394d78ec5fbda1731c542 100644 (file)
@@ -762,7 +762,7 @@ Per client instance `rbd device map` options:
 
 Per mapping (block device) `rbd device map` options:
 
-* rw - Map the image read-write (default).
+* rw - Map the image read-write (default).  Overridden by --read-only.
 
 * ro - Map the image read-only.  Equivalent to --read-only.
 
@@ -772,6 +772,7 @@ Per mapping (block device) `rbd device map` options:
   discards (since 4.9).
 
 * exclusive - Disable automatic exclusive lock transitions (since 4.12).
+  Equivalent to --exclusive.
 
 * lock_timeout=x - A timeout on waiting for the acquisition of exclusive lock
   (since 4.17, default is 0 seconds, meaning no timeout).
@@ -843,12 +844,25 @@ Per mapping (block device) `rbd device map` options:
   backend that the data is incompressible, disabling compression in aggressive
   mode (since 5.8).
 
+* udev - Wait for udev device manager to finish executing all matching
+  "add" rules and release the device before exiting (default).  This option
+  is not passed to the kernel.
+
+* noudev - Don't wait for udev device manager.  When enabled, the device may
+  not be fully usable immediately on exit.
+
 `rbd device unmap` options:
 
 * force - Force the unmapping of a block device that is open (since 4.9).  The
   driver will wait for running requests to complete and then unmap; requests
   sent to the driver after initiating the unmap will be failed.
 
+* udev - Wait for udev device manager to finish executing all matching
+  "remove" rules and clean up after the device before exiting (default).
+  This option is not passed to the kernel.
+
+* noudev - Don't wait for udev device manager.
+
 
 Examples
 ========
index be298a5696eea2d643e4cc9bca97f3c705616ee4..7d815d8b92f769cc8df0548305e8b2e2b58138c9 100644 (file)
@@ -468,6 +468,14 @@ More details can be found in the documentation of the :ref:`mgr-prometheus`.
     [security]
     allow_embedding = true
 
+Enabling RBD-Image monitoring
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Due to performance reasons, monitoring of RBD images is disabled by default. For
+more information please see :ref:`prometheus-rbd-io-statistics`. If disabled,
+the overview and details dashboards will stay empty in Grafana and the metrics
+will not be visible in Prometheus.
+
 After you have set up Grafana and Prometheus, you will need to configure the
 connection information that the Ceph Dashboard will use to access Grafana.
 
@@ -1086,6 +1094,16 @@ When configuring the Ceph Dashboard with multiple NFS-Ganesha clusters, the
 Web UI will automatically allow to choose to which cluster an export belongs.
 
 
+Support for NFS-Ganesha Clusters Deployed by the Orchestrator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Ceph Dashboard can be used to manage NFS-Ganesha clusters deployed by the
+Orchestrator. It can detect the clusters automatically. For more details
+on deploying NFS-Ganesha clusters with the Orchestrator, please see :ref:`orchestrator-cli-stateless-services`.
+Or particularly, see :ref:`deploy-cephadm-nfs-ganesha` for how to deploy
+NFS-Ganesha clusters with the Cephadm backend.
+
+
 Plug-ins
 --------
 
index 5da26429f5c605cda5b2e244290c4ae8410e0ff0..fba1b5ce06265233bc7152a25858b3a6ea22e9a0 100644 (file)
@@ -39,15 +39,14 @@ for the orchestrator module is needed.
 
 The relation between the names is the following:
 
-* A *service* has a specfic *service type*
+* A *service* has a specific *service type*
 * A *daemon* is a physical instance of a *service type*
 
 
 .. note::
 
     Orchestrator modules may only implement a subset of the commands listed below.
-    Also, the implementation of the commands are orchestrator module dependent and will
-    differ between implementations.
+    Also, the implementation of the commands may differ between modules.
 
 Status
 ======
@@ -56,8 +55,8 @@ Status
 
     ceph orch status
 
-Show current orchestrator mode and high-level status (whether the module able
-to talk to it)
+Show current orchestrator mode and high-level status (whether the orchestrator
+plugin is available and operational)
 
 Host Management
 ===============
@@ -97,7 +96,7 @@ Many hosts can be added at once using
     addr: node-02
     hostname: node-02
 
-This can be combined with service specifications (below) to create a cluster spec file to deploy a whole cluster in one command.  see ``cephadm bootstrap --apply-spec`` also to do this during bootstrap. Cluster SSH Keys must be copied to hosts prior.
+This can be combined with service specifications (below) to create a cluster spec file to deploy a whole cluster in one command.  see ``cephadm bootstrap --apply-spec`` also to do this during bootstrap. Cluster SSH Keys must be copied to hosts prior to adding them.
 
 OSD Management
 ==============
@@ -132,7 +131,7 @@ Example::
 Erase Devices (Zap Devices)
 ---------------------------
 
-Erase (zap) a device so that it can be resued. ``zap`` calls ``ceph-volume zap`` on the remote host.
+Erase (zap) a device so that it can be reused. ``zap`` calls ``ceph-volume zap`` on the remote host.
 
 ::
 
@@ -144,7 +143,7 @@ Example command::
 
 .. note::
     Cephadm orchestrator will automatically deploy drives that match the DriveGroup in your OSDSpec if the unmanaged flag is unset.
-    For example, if you use the ``all-available-devices`` option when creating OSD's, when you ``zap`` a device the cephadm orchestrator will automatically create a new OSD in the device .
+    For example, if you use the ``all-available-devices`` option when creating OSDs, when you ``zap`` a device the cephadm orchestrator will automatically create a new OSD in the device .
     To disable this behavior, see :ref:`orchestrator-cli-create-osds`.
 
 .. _orchestrator-cli-create-osds:
@@ -160,11 +159,11 @@ Another way of doing it is using ``apply`` interface::
 
     ceph orch apply osd -i <json_file/yaml_file> [--dry-run]
 
-Where the ``json_file/yaml_file`` is a DriveGroup specification.
+where the ``json_file/yaml_file`` is a DriveGroup specification.
 For a more in-depth guide to DriveGroups please refer to :ref:`drivegroups`
 
-Along with ``apply`` interface if ``dry-run`` option is used, it will present a
-preview of what will happen.
+``dry-run`` will cause the orchestrator to present a preview of what will happen
+without actually creating the OSDs.
 
 Example::
 
@@ -174,23 +173,19 @@ Example::
     all-available-devices node2 /dev/vdc -  -
     all-available-devices node3 /dev/vdd -  -
 
-.. note::
-    Example output from cephadm orchestrator
-
 When the parameter ``all-available-devices`` or a DriveGroup specification is used, a cephadm service is created.
-This service guarantees that all available devices or devices included in the DriveGroup will be used for OSD's.
-Take into account the implications of this behavior, which is automatic and enabled by default.
-
-For example:
+This service guarantees that all available devices or devices included in the DriveGroup will be used for OSDs.
+Note that the effect of ``--all-available-devices`` is persistent; that is, drives which are added to the system 
+or become available (say, by zapping) after the command is complete will be automatically found and added to the cluster.
 
-After using::
+That is, after using::
 
     ceph orch apply osd --all-available-devices
 
-* If you add new disks to the cluster they will automatically be used to create new OSD's.
+* If you add new disks to the cluster they will automatically be used to create new OSDs.
 * A new OSD will be created automatically if you remove an OSD and clean the LVM physical volume.
 
-If you want to avoid this behavior (disable automatic creation of OSD in available devices), use the ``unmanaged`` parameter::
+If you want to avoid this behavior (disable automatic creation of OSD on available devices), use the ``unmanaged`` parameter::
 
     ceph orch apply osd --all-available-devices --unmanaged=true
 
@@ -198,7 +193,7 @@ Remove an OSD
 -------------
 ::
 
-    ceph orch osd rm <svc_id(s)> [--replace] [--force]
+    ceph orch osd rm <osd_id(s)> [--replace] [--force]
 
 Evacuates PGs from an OSD and removes it from the cluster.
 
@@ -219,7 +214,7 @@ You can query the state of the operation with::
     4       cephadm-dev  started                  42        False    True   2020-07-17 13:01:45.162158
 
 
-When no PGs are left on the osd, it will be decommissioned and removed from the cluster.
+When no PGs are left on the OSD, it will be decommissioned and removed from the cluster.
 
 .. note::
     After removing an OSD, if you wipe the LVM physical volume in the device used by the removed OSD, a new OSD will be created.
@@ -228,7 +223,7 @@ When no PGs are left on the osd, it will be decommissioned and removed from the
 Stopping OSD Removal
 --------------------
 
-You can stop the operation with
+You can stop the queued OSD removal operation with
 
 ::
 
@@ -239,7 +234,7 @@ Example::
     # ceph orch osd rm stop 4
     Stopped OSD(s) removal
 
-This will reset the initial state of the OSD and remove it from the queue.
+This will reset the initial state of the OSD and take it off the removal queue.
 
 
 Replace an OSD
@@ -255,16 +250,16 @@ Example::
 
 
 This follows the same procedure as the "Remove OSD" part with the exception that the OSD is not permanently removed
-from the crush hierarchy, but is assigned a 'destroyed' flag.
+from the CRUSH hierarchy, but is assigned a 'destroyed' flag.
 
 **Preserving the OSD ID**
 
-The previously set the 'destroyed' flag is used to determined osd ids that will be reused in the next osd deployment.
+The previously-set 'destroyed' flag is used to determine OSD ids that will be reused in the next OSD deployment.
 
-If you use OSDSpecs for osd deployment, your newly added disks will be assigned with the osd ids of their replaced
-counterpart, granted the new disk still match the OSDSpecs.
+If you use OSDSpecs for OSD deployment, your newly added disks will be assigned the OSD ids of their replaced
+counterparts, assuming the new disks still match the OSDSpecs.
 
-For assistance in this process you can use the '--dry-run' feature:
+For assistance in this process you can use the '--dry-run' feature.
 
 Tip: The name of your OSDSpec can be retrieved from **ceph orch ls**
 
@@ -279,8 +274,8 @@ If this matches your anticipated behavior, just omit the --dry-run flag to execu
 
 
 ..
-    Blink Device Lights
-    ^^^^^^^^^^^^^^^^^^^
+    Turn On Device Lights
+    ^^^^^^^^^^^^^^^^^^^^^
     ::
 
         ceph orch device ident-on <dev_id>
@@ -302,8 +297,8 @@ If this matches your anticipated behavior, just omit the --dry-run flag to execu
         ceph orch osd fault-on {primary,journal,db,wal,all} <osd-id>
         ceph orch osd fault-off {primary,journal,db,wal,all} <osd-id>
 
-    Where ``journal`` is the filestore journal, ``wal`` is the write ahead log of
-    bluestore and ``all`` stands for all devices associated with the osd
+    where ``journal`` is the filestore journal device, ``wal`` is the bluestore
+    write ahead log device, and ``all`` stands for all devices associated with the OSD
 
 
 Monitor and manager management
@@ -314,13 +309,17 @@ error if it doesn't know how to do this transition.
 
 Update the number of monitor hosts::
 
-    ceph orch apply mon <num> [host, host:network...] [--dry-run]
+    ceph orch apply mon --placement=<placement> [--dry-run]
+    
+Where ``placement`` is a :ref:`orchestrator-cli-placement-spec`.
 
 Each host can optionally specify a network for the monitor to listen on.
 
 Update the number of manager hosts::
 
-    ceph orch apply mgr <num> [host...] [--dry-run]
+    ceph orch apply mgr --placement=<placement> [--dry-run]
+    
+Where ``placement`` is a :ref:`orchestrator-cli-placement-spec`.
 
 ..
     .. note::
@@ -370,24 +369,27 @@ the id is the numeric OSD ID, for MDS services it is the file system name::
 
 .. _orchestrator-cli-cephfs:
 
-Depoying CephFS
-===============
+Deploying CephFS
+================
 
 In order to set up a :term:`CephFS`, execute::
 
     ceph fs volume create <fs_name> <placement spec>
 
-Where ``name`` is the name of the CephFS, ``placement`` is a
+where ``name`` is the name of the CephFS and ``placement`` is a
 :ref:`orchestrator-cli-placement-spec`.
 
 This command will create the required Ceph pools, create the new
 CephFS, and deploy mds servers.
 
+
+.. _orchestrator-cli-stateless-services:
+
 Stateless services (MDS/RGW/NFS/rbd-mirror/iSCSI)
 =================================================
 
-The orchestrator is not responsible for configuring the services. Please look into the corresponding
-documentation for details.
+(Please note: The orchestrator will not configure the services. Please look into the corresponding
+documentation for service configuration details.)
 
 The ``name`` parameter is an identifier of the group of instances:
 
@@ -401,7 +403,7 @@ Creating/growing/shrinking/removing services::
     ceph orch apply nfs <name> <pool> [--namespace=<namespace>] [--placement=<placement>] [--dry-run]
     ceph orch rm <service_name> [--force]
 
-Where ``placement`` is a :ref:`orchestrator-cli-placement-spec`.
+where ``placement`` is a :ref:`orchestrator-cli-placement-spec`.
 
 e.g., ``ceph orch apply mds myfs --placement="3 host1 host2 host3"``
 
@@ -409,13 +411,91 @@ Service Commands::
 
     ceph orch <start|stop|restart|redeploy|reconfig> <service_name>
 
+Deploying custom containers
+===========================
+
+The orchestrator enables custom containers to be deployed using a YAML file.
+A corresponding :ref:`orchestrator-cli-service-spec` must look like:
+
+.. code-block:: yaml
+
+    service_type: container
+    service_id: foo
+    placement:
+        ...
+    image: docker.io/library/foo:latest
+    entrypoint: /usr/bin/foo
+    uid: 1000
+    gid: 1000
+    args:
+        - "--net=host"
+        - "--cpus=2"
+    ports:
+        - 8080
+        - 8443
+    envs:
+        - SECRET=mypassword
+        - PORT=8080
+        - PUID=1000
+        - PGID=1000
+    volume_mounts:
+        CONFIG_DIR: /etc/foo
+    bind_mounts:
+      - ['type=bind', 'source=lib/modules', 'destination=/lib/modules', 'ro=true']
+    dirs:
+      - CONFIG_DIR
+    files:
+      CONFIG_DIR/foo.conf:
+        - refresh=true
+        - username=xyz
+        - "port: 1234"
+
+where the properties of a service specification are:
+
+* ``service_id``
+    A unique name of the service.
+* ``image``
+    The name of the Docker image.
+* ``uid``
+    The UID to use when creating directories and files in the host system.
+* ``gid``
+    The GID to use when creating directories and files in the host system.
+* ``entrypoint``
+    Overwrite the default ENTRYPOINT of the image.
+* ``args``
+    A list of additional Podman/Docker command line arguments.
+* ``ports``
+    A list of TCP ports to open in the host firewall.
+* ``envs``
+    A list of environment variables.
+* ``bind_mounts``
+    When you use a bind mount, a file or directory on the host machine
+    is mounted into the container. Relative `source=...` paths will be
+    located below `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+* ``volume_mounts``
+    When you use a volume mount, a new directory is created within
+    Docker’s storage directory on the host machine, and Docker manages
+    that directory’s contents. Relative source paths will be located below
+    `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+* ``dirs``
+    A list of directories that are created below
+    `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+* ``files``
+    A dictionary, where the key is the relative path of the file and the
+    value the file content. The content must be double quoted when using
+    a string. Use '\\n' for line breaks in that case. Otherwise define
+    multi-line content as list of strings. The given files will be created
+    below the directory `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+    The absolute path of the directory where the file will be created must
+    exist. Use the `dirs` property to create them if necessary.
+
 .. _orchestrator-cli-service-spec:
 
 Service Specification
 =====================
 
-As *Service Specification* is a data structure often represented as YAML
-to specify the deployment of services. For example:
+A *Service Specification* is a data structure represented as YAML
+to specify the deployment of services.  For example:
 
 .. code-block:: yaml
 
@@ -426,30 +506,33 @@ to specify the deployment of services. For example:
         - host1
         - host2
         - host3
-    spec: ...
     unmanaged: false
-
-Where the properties of a service specification are the following:
-
-* ``service_type`` is the type of the service. Needs to be either a Ceph
-   service (``mon``, ``crash``, ``mds``, ``mgr``, ``osd`` or
-   ``rbd-mirror``), a gateway (``nfs`` or ``rgw``), or part of the
-   monitoring stack (``alertmanager``, ``grafana``, ``node-exporter`` or
-   ``prometheus``).
-* ``service_id`` is the name of the service. Omit the service time
-* ``placement`` is a :ref:`orchestrator-cli-placement-spec`
-* ``spec``: additional specifications for a specific service.
-* ``unmanaged``: If set to ``true``, the orchestrator will not deploy nor
-   remove any daemon associated with this service. Placement and all other
-   properties will be ignored. This is useful, if this service should not
-   be managed temporarily.
-
-Each service type can have different requirements for the spec.
+    ...
+
+where the properties of a service specification are:
+
+* ``service_type``
+    The type of the service. Needs to be either a Ceph
+    service (``mon``, ``crash``, ``mds``, ``mgr``, ``osd`` or
+    ``rbd-mirror``), a gateway (``nfs`` or ``rgw``), part of the
+    monitoring stack (``alertmanager``, ``grafana``, ``node-exporter`` or
+    ``prometheus``) or (``container``) for custom containers.
+* ``service_id``
+    The name of the service.
+* ``placement``
+    See :ref:`orchestrator-cli-placement-spec`.
+* ``unmanaged``
+    If set to ``true``, the orchestrator will not deploy nor
+    remove any daemon associated with this service. Placement and all other
+    properties will be ignored. This is useful, if this service should not
+    be managed temporarily.
+
+Each service type can have additional service specific properties.
 
 Service specifications of type ``mon``, ``mgr``, and the monitoring
-types do not require a ``service_id``
+types do not require a ``service_id``.
 
-A service of type ``nfs`` requires a pool name and contain
+A service of type ``nfs`` requires a pool name and may contain
 an optional namespace:
 
 .. code-block:: yaml
@@ -464,13 +547,13 @@ an optional namespace:
       pool: mypool
       namespace: mynamespace
 
-Where ``pool`` is a RADOS pool where NFS client recovery data is stored
+where ``pool`` is a RADOS pool where NFS client recovery data is stored
 and ``namespace`` is a RADOS namespace where NFS client recovery
 data is stored in the pool.
 
-A service of type ``osd`` is in detail described in :ref:`drivegroups`
+A service of type ``osd`` is described in :ref:`drivegroups`
 
-Many service specifications can then be applied at once using
+Many service specifications can be applied at once using
 ``ceph orch apply -i`` by submitting a multi-document YAML file::
 
     cat <<EOF | ceph orch apply -i -
@@ -495,18 +578,19 @@ Many service specifications can then be applied at once using
 Placement Specification
 =======================
 
-In order to allow the orchestrator to deploy a *service*, it needs to
-know how many and where it should deploy *daemons*. The orchestrator
-defines a placement specification that can either be passed as a command line argument.
+For the orchestrator to deploy a *service*, it needs to know where to deploy
+*daemons*, and how many to deploy.  This is the role of a placement
+specification.  Placement specifications can either be passed as command line arguments
+or in a YAML files.
 
 Explicit placements
 -------------------
 
-Daemons can be explictly placed on hosts by simply specifying them::
+Daemons can be explicitly placed on hosts by simply specifying them::
 
-    orch apply prometheus "host1 host2 host3"
+    orch apply prometheus --placement="host1 host2 host3"
 
-Or in yaml:
+Or in YAML:
 
 .. code-block:: yaml
 
@@ -519,19 +603,19 @@ Or in yaml:
 
 MONs and other services may require some enhanced network specifications::
 
-  orch daemon add mon myhost:[v2:1.2.3.4:3000,v1:1.2.3.4:6789]=name
+  orch daemon add mon --placement="myhost:[v2:1.2.3.4:3000,v1:1.2.3.4:6789]=name"
 
-Where ``[v2:1.2.3.4:3000,v1:1.2.3.4:6789]`` is the network address of the monitor
+where ``[v2:1.2.3.4:3000,v1:1.2.3.4:6789]`` is the network address of the monitor
 and ``=name`` specifies the name of the new monitor.
 
 Placement by labels
 -------------------
 
-Daemons can be explictly placed on hosts that match a specifc label::
+Daemons can be explictly placed on hosts that match a specific label::
 
-    orch apply prometheus label:mylabel
+    orch apply prometheus --placement="label:mylabel"
 
-Or in yaml:
+Or in YAML:
 
 .. code-block:: yaml
 
@@ -545,9 +629,9 @@ Placement by pattern matching
 
 Daemons can be placed on hosts as well::
 
-    orch apply prometheus 'myhost[1-3]'
+    orch apply prometheus --placement='myhost[1-3]'
 
-Or in yaml:
+Or in YAML:
 
 .. code-block:: yaml
 
@@ -557,9 +641,9 @@ Or in yaml:
 
 To place a service on *all* hosts, use ``"*"``::
 
-    orch apply crash '*'
+    orch apply crash --placement='*'
 
-Or in yaml:
+Or in YAML:
 
 .. code-block:: yaml
 
@@ -573,17 +657,19 @@ Setting a limit
 
 By specifying ``count``, only that number of daemons will be created::
 
-    orch apply prometheus 3
+    orch apply prometheus --placement=3
 
 To deploy *daemons* on a subset of hosts, also specify the count::
 
-    orch apply prometheus "2 host1 host2 host3"
+    orch apply prometheus --placement="2 host1 host2 host3"
+
+If the count is bigger than the amount of hosts, cephadm deploys one per host::
 
-If the count is bigger than the amount of hosts, cephadm still deploys two daemons::
+    orch apply prometheus --placement="3 host1 host2"
 
-    orch apply prometheus "3 host1 host2"
+results in two Prometheus daemons.
 
-Or in yaml:
+Or in YAML:
 
 .. code-block:: yaml
 
@@ -664,6 +750,7 @@ This is an overview of the current implementation status of the orchestrators.
  apply osd                           ✔      ✔
  apply rbd-mirror                    ✔      ✔
  apply rgw                           ⚪      ✔
+ apply container                     ⚪      ✔
  host add                            ⚪      ✔
  host ls                             ✔      ✔
  host rm                             ⚪      ✔
@@ -672,10 +759,10 @@ This is an overview of the current implementation status of the orchestrators.
  device {ident,fault}-(on,off}       ⚪      ✔
  device ls                           ✔      ✔
  iscsi add                           ⚪     ✔
- mds add                             â\9c\94      ✔
+ mds add                             â\9aª      ✔
  nfs add                             ✔      ✔
  rbd-mirror add                      ⚪      ✔
- rgw add                             â\9c\94      ✔
+ rgw add                             â\9aª     ✔
  ps                                  ✔      ✔
 =================================== ====== =========
 
index c63a255897c0f0109b209097f9a979d98752a787..7179438a84de4b0267f937ec2ef15ddedaad14fb 100644 (file)
@@ -15,7 +15,7 @@ the Ceph Storage Cluster:
 - The :term:`Ceph Monitor`, which maintains a master copy of the cluster map. 
 - The :term:`Ceph OSD Daemon` (OSD), which stores data as objects on a storage node.
 
-.. ditaa::  
+.. ditaa::
             +---------------------------------+
             |  Ceph Storage Cluster Protocol  |
             |           (librados)            |
@@ -165,7 +165,7 @@ placement group and `OSD`_  for locating the data. Then the client application
 can read or write data. The client app doesn't need to learn about the topology
 of the cluster directly.
 
-.. ditaa:: 
+.. ditaa::
             +--------+  Retrieves  +---------------+
             | Client |------------>|  Cluster Map  |
             +--------+             +---------------+
@@ -217,7 +217,8 @@ these capabilities. The following diagram provides a high-level flow for the
 initial connection.
 
 
-.. ditaa:: +---------+     +---------+
+.. ditaa::
+           +---------+     +---------+
            | Client  |     | Monitor |
            +---------+     +---------+
                 |               |
@@ -521,7 +522,8 @@ functionality includes:
 - Snapshot pools, list snapshots, etc.
 
 
-.. ditaa:: +---------+     +---------+     +---------+
+.. ditaa::
+           +---------+     +---------+     +---------+
            | Client  |     | Monitor |     |   OSD   |
            +---------+     +---------+     +---------+
                 |               |               |
index 8f0a32d0c3707275f214eb9289efa1a70040cfcb..6a8d47723d4aef3bf0d8f1b47de9e212e64bcbc3 100644 (file)
@@ -67,6 +67,11 @@ configuration, they may need to be stored locally on the node and set
 in a local configuration file.  These options include:
 
   - ``mon_host``, the list of monitors for the cluster
+  - ``mon_host_override``, the list of monitors for the cluster to
+    **initially** contact when beginning a new instance of communication with the
+    Ceph cluster.  This overrides the known monitor list derived from MonMap
+    updates sent to older Ceph instances (like librados cluster handles).  It is
+    expected this option is primarily useful for debugging.
   - ``mon_dns_serv_name`` (default: `ceph-mon`), the name of the DNS
     SRV record to check to identify the cluster monitors via DNS
   - ``mon_data``, ``osd_data``, ``mds_data``, ``mgr_data``, and
@@ -326,6 +331,8 @@ like
     secret = "i love \# and \["
 
 
+.. _ceph-conf-database:
+
 Monitor configuration database
 ==============================
 
index dbfc20b908404583f4d50aec8e338e2593b3180e..e93cd28b7d785c0f1ee20aa336c3ca24a430cbc9 100644 (file)
@@ -34,8 +34,7 @@ Monitors can query the most recent version of the cluster map during sync
 operations. Ceph Monitors leverage the key/value store's snapshots and iterators
 (using leveldb) to perform store-wide synchronization.
 
-.. ditaa:: 
-
+.. ditaa::
  /-------------\               /-------------\
  |   Monitor   | Write Changes |    Paxos    |
  |   cCCC      +-------------->+   cCCC      |
@@ -505,7 +504,6 @@ Ceph Clients to read and write data. So the Ceph Storage Cluster's operating
 capacity is 95TB, not 99TB.
 
 .. ditaa::
-
  +--------+  +--------+  +--------+  +--------+  +--------+  +--------+
  | Rack 1 |  | Rack 2 |  | Rack 3 |  | Rack 4 |  | Rack 5 |  | Rack 6 |
  | cCCC   |  | cF00   |  | cCCC   |  | cCCC   |  | cCCC   |  | cCCC   |
@@ -636,7 +634,8 @@ fallen behind the other monitors. The requester asks the leader to synchronize,
 and the leader tells the requester to synchronize with a provider.
 
 
-.. ditaa:: +-----------+          +---------+          +----------+
+.. ditaa::
+           +-----------+          +---------+          +----------+
            | Requester |          | Leader  |          | Provider |
            +-----------+          +---------+          +----------+
                   |                    |                     |
index a7324ebb0e5541e996e69f8140a3e0ab71e24398..6ef6626555385ca02642faf00f9fe300a1e5fdc0 100644 (file)
@@ -34,7 +34,8 @@ and ``[osd]`` or ``[global]`` section of your Ceph configuration file,
 or by setting the value at runtime.
 
 
-.. ditaa:: +---------+          +---------+
+.. ditaa::
+           +---------+          +---------+
            |  OSD 1  |          |  OSD 2  |
            +---------+          +---------+
                 |                    |
@@ -89,7 +90,9 @@ and ``mon osd reporter subtree level`` settings  under the ``[mon]`` section of
 your Ceph configuration file, or by setting the value at runtime.
 
 
-.. ditaa:: +---------+     +---------+      +---------+
+.. ditaa::
+
+           +---------+     +---------+      +---------+
            |  OSD 1  |     |  OSD 2  |      | Monitor |
            +---------+     +---------+      +---------+
                 |               |                |
@@ -118,7 +121,9 @@ Ceph Monitor heartbeat interval by adding an ``osd mon heartbeat interval``
 setting under the ``[osd]`` section of your Ceph configuration file, or by
 setting the value at runtime.
 
-.. ditaa:: +---------+     +---------+     +-------+     +---------+
+.. ditaa::
+
+           +---------+     +---------+     +-------+     +---------+
            |  OSD 1  |     |  OSD 2  |     | OSD 3 |     | Monitor |
            +---------+     +---------+     +-------+     +---------+
                 |               |              |              |
@@ -161,7 +166,9 @@ interval max`` setting under the ``[osd]`` section of your Ceph configuration
 file, or by setting the value at runtime.
 
 
-.. ditaa:: +---------+          +---------+
+.. ditaa::
+
+           +---------+          +---------+
            |  OSD 1  |          | Monitor |
            +---------+          +---------+
                 |                    |
index 41da0a17528672cae31246b2f942902260c02051..bd49a87b310ccfd9e45ee290fabe8cd6c864f92c 100644 (file)
@@ -112,7 +112,7 @@ Each Ceph OSD Daemon on a Ceph Node may use up to four ports:
 #. One for sending data to other OSDs.
 #. Two for heartbeating on each interface.
 
-.. ditaa:: 
+.. ditaa::
               /---------------\
               |      OSD      |
               |           +---+----------------+-----------+
index c825c22c3035a4ac33595fd2ee87889ac2a687bb..237b6e3c9f376ec17fb32d0a5669b77744d4bb8a 100644 (file)
@@ -13,7 +13,7 @@ tier. So the cache tier and the backing storage tier are completely transparent
 to Ceph clients.
 
 
-.. ditaa:: 
+.. ditaa::
            +-------------+
            | Ceph Client |
            +------+------+
index 98691a043d49be24afb40997f0694ed068c755e5..5e35a3a670558de972d76b519c76fab6910cf82e 100644 (file)
@@ -47,6 +47,23 @@ By default, the `identification` light is used.
 
      ceph orch status
 
+The command behind the scene to blink the drive LEDs is `lsmcli`. If you need
+to customize this command you can configure this via a Jinja2 template::
+
+   ceph config-key set mgr/cephadm/blink_device_light_cmd "<template>"
+   ceph config-key set mgr/cephadm/<host>/blink_device_light_cmd "lsmcli local-disk-{{ ident_fault }}-led-{{'on' if on else 'off'}} --path '{{ path or dev }}'"
+
+The Jinja2 template is rendered using the following arguments:
+
+* ``on``
+    A boolean value.
+* ``ident_fault``
+    A string containing `ident` or `fault`.
+* ``dev``
+    A string containing the device ID, e.g. `SanDisk_X400_M.2_2280_512GB_162924424784`.
+* ``path``
+    A string containing the device path, e.g. `/dev/sda`.
+
 Enabling monitoring
 -------------------
 
index 630d268b458259892b67d2efdaae03e8465d3933..08b70dd4d51c06b9368f44ec6cfe4583b7b65fe6 100644 (file)
@@ -33,7 +33,9 @@ not assign placement groups to the OSD. If an OSD is ``down``, it should also be
 .. note:: If an OSD is ``down`` and ``in``, there is a problem and the cluster 
    will not be in a healthy state.
 
-.. ditaa:: +----------------+        +----------------+
+.. ditaa::
+
+           +----------------+        +----------------+
            |                |        |                |
            |   OSD #n In    |        |   OSD #n Up    |
            |                |        |                |
@@ -158,7 +160,9 @@ OSDs to establish agreement on the current state of the placement group
 (assuming a pool with 3 replicas of the PG).
 
 
-.. ditaa:: +---------+     +---------+     +-------+
+.. ditaa::
+
+           +---------+     +---------+     +-------+
            |  OSD 1  |     |  OSD 2  |     | OSD 3 |
            +---------+     +---------+     +-------+
                 |               |              |
@@ -265,8 +269,8 @@ group's Acting Set will peer. Once peering is complete, the placement group
 status should be ``active+clean``, which means a Ceph client can begin writing
 to the placement group.
 
-.. ditaa:: 
-         
+.. ditaa::
+
        /-----------\       /-----------\       /-----------\
        | Creating  |------>|  Peering  |------>|  Active   |
        \-----------/       \-----------/       \-----------/
index dbeb2fe30c785ae9c28f302487bc1ed999a9e42d..f7f2d110a8eb55d05cb3c862ffce09d04ccfd88f 100644 (file)
@@ -244,7 +244,6 @@ OSDs. For instance, in a replicated pool of size two, each placement
 group will store objects on two OSDs, as shown below.
 
 .. ditaa::
-
    +-----------------------+      +-----------------------+
    |  Placement Group #1   |      |  Placement Group #2   |
    |                       |      |                       |
index 4d961d4be046ae4a5ec52d903cf18f8c5b0b04dc..7b7713a83bd04d7699d7eade2376363c899cd850 100644 (file)
@@ -9,7 +9,8 @@ authorization with the :term:`Ceph Storage Cluster`. Users are either
 individuals or system actors such as applications, which use Ceph clients to
 interact with the Ceph Storage Cluster daemons.
 
-.. ditaa::  +-----+
+.. ditaa::
+            +-----+
             | {o} |
             |     |
             +--+--+       /---------\               /---------\
index 0fbe41d34f18f263ebf77738d2a2d39c2c7f6d7c..6e2dfe119aeffa246d585363bbff8a04320a8309 100644 (file)
@@ -60,6 +60,17 @@ Parameters:
     **WebIdentityToken** (String/ Required): The OpenID Connect/ OAuth2.0 token, which the
     application gets in return after authenticating its user with an IDP.
 
+Before invoking AssumeRoleWithWebIdentity, an OpenID Connect Provider entity (which the web application
+authenticates with), needs to be created in RGW.
+
+The trust between the IDP and the role is created by adding a Condition to the role trust policy, which
+allows access only to applications with the app id given in the trust policy document. The Condition
+is of the form::
+
+    "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Federated\":[\"arn:aws:iam:::oidc-provider/<URL of IDP>\"]},\"Action\":[\"sts:AssumeRoleWithWebIdentity\"],\"Condition\":{\"StringEquals\":{\"<URL of IDP> :app_id\":\"<aud>\"\}\}\}\]\}"
+
+The app_id in the condition above must match the 'aud' field of the incoming token.
+
 STS Configuration
 =================
 
@@ -69,14 +80,6 @@ The following configurable options have to be added for STS integration::
   rgw sts key = {sts key for encrypting the session token}
   rgw s3 auth use sts = true
 
-The following additional configurables have to be added to use Keycloak for
-AssumeRoleWithWebIdentity calls::
-
-  [client.radosgw.gateway]
-  rgw_sts_token_introspection_url = {token introspection URL}
-  rgw_sts_client_id = {client id registered with Keycloak}
-  rgw_sts_client_secret = {client password registered with Keycloak}
-
 Note: By default, STS and S3 APIs co-exist in the same namespace, and both S3
 and STS APIs can be accessed via the same endpoint in Ceph Object Gateway.
 
@@ -99,7 +102,7 @@ according to the permission policy attached to the role.
     region_name=''
     )
 
-    policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER1\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
+    policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER1\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
 
     role_response = iam_client.create_role(
     AssumeRolePolicyDocument=policy_document,
@@ -154,7 +157,17 @@ according to permission policy of the role.
     region_name=''
     )
 
-    policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"Federated\":\[\"arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/demo\"\]\},\"Action\":\[\"sts:AssumeRoleWithWebIdentity\"\],\"Condition\":\{\"StringEquals\":\{\"localhost:8080/auth/realms/demo:app_id\":\"customer-portal\"\}\}\}\]\}"
+    oidc_response = iam_client.create_open_id_connect_provider(
+        Url=<URL of the OpenID Connect Provider,
+        ClientIDList=[
+            <Client id registered with the IDP>
+        ],
+        ThumbprintList=[
+            <Thumbprint of the IDP>
+     ]
+    )
+
+    policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Federated\":[\"arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/demo\"]},\"Action\":[\"sts:AssumeRoleWithWebIdentity\"],\"Condition\":{\"StringEquals\":{\"localhost:8080/auth/realms/demo:app_id\":\"customer-portal\"}}}]}"
     role_response = iam_client.create_role(
     AssumeRolePolicyDocument=policy_document,
     Path='/',
@@ -194,12 +207,60 @@ according to permission policy of the role.
     s3bucket = s3client.create_bucket(Bucket=bucket_name)
     resp = s3client.list_buckets()
 
+How to obtain thumbprint of an OpenID Connect Provider IDP
+==========================================================
+1. Take the OpenID connect provider's URL and add /.well-known/openid-configuration
+to it to get the URL to get the IDP's configuration document. For example, if the URL
+of the IDP is http://localhost:8000/auth/realms/quickstart, then the URL to get the
+document from is http://localhost:8000/auth/realms/quickstart/.well-known/openid-configuration
+
+2. Use the following curl command to get the configuration document from the URL described
+in step 1::
+
+    curl -k -v \
+      -X GET \
+      -H "Content-Type: application/x-www-form-urlencoded" \
+      "http://localhost:8000/auth/realms/quickstart/.well-known/openid-configuration" \
+    | jq .
+
+ 3. From the response of step 2, use the value of "jwks_uri" to get the certificate of the IDP,
+ using the following code::
+     curl -k -v \
+      -X GET \
+      -H "Content-Type: application/x-www-form-urlencoded" \
+      "http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/certs" \
+      | jq .
+
+3. Copy the result of "x5c" in the response above, in a file certificate.crt, and add
+'-----BEGIN CERTIFICATE-----' at the beginning and "-----END CERTIFICATE-----"
+at the end.
+
+4. Use the following OpenSSL command to get the certificate thumbprint::
+
+    openssl x509 -in certificate.crt -fingerprint -noout
+
+5. The result of the above command in step 4, will be a SHA1 fingerprint, like the following::
+
+    SHA1 Fingerprint=F7:D7:B3:51:5D:D0:D3:19:DD:21:9A:43:A9:EA:72:7A:D6:06:52:87
+
+6.  Remove the colons from the result above to get the final thumbprint which can be as input
+while creating the OpenID Connect Provider entity in IAM::
+
+    F7D7B3515DD0D319DD219A43A9EA727AD6065287
+
 Roles in RGW
 ============
 
 More information for role manipulation can be found here
 :doc:`role`.
 
+OpenID Connect Provider in RGW
+==============================
+
+More information for OpenID Connect Provider entity manipulation
+can be found here
+:doc:`oidc`.
+
 Keycloak integration with Radosgw
 =================================
 
index 350e36bc6100f72b1180689ca3d812c0c665efac..8fe18c723077a0fc9be00491ae3d16a850038a47 100644 (file)
@@ -34,7 +34,7 @@ Parameters:
 
     **TokenCode** (String/ Optional): The value provided by the MFA device, if MFA is required.
 
-An end user needs to attach a policy to allow invocation of GetSessionToken API using its permanent
+An administrative user needs to attach a policy to allow invocation of GetSessionToken API using its permanent
 credentials and to allow subsequent s3 operations invocation using only the temporary credentials returned
 by GetSessionToken.
 The following is an example of attaching the policy to a user 'TESTER1'::
index 4f172eab4aa109cd7c08bdc920daa3a9081afe8d..b498cd97f63dd69800246157baa17154a2e7863a 100644 (file)
@@ -22,7 +22,8 @@ There are two user types:
 - **Subuser:** The term 'subuser' reflects a user of the Swift interface. A subuser
   is associated to a user .
   
-.. ditaa:: +---------+
+.. ditaa::
+           +---------+
            |   User  |
            +----+----+  
                 |     
index cb5c5fedcb893fde65d892bf07b028064cf4e7ff..e4a013590851c06fbe815352bd7e551c42d94791 100644 (file)
@@ -86,6 +86,15 @@ Options
 :Type: Integer
 :Default: None
 
+``request_timeout_ms``
+
+:Description: The amount of time in milliseconds that Beast will wait
+              for more incoming data or outgoing data before giving up.
+              Setting this value to 0 will disable timeout.
+
+:Type: Integer
+:Default: ``65000``
+
 
 Civetweb
 ========
index 158ae41a9e3f6f79c62cfafd5f266eb9232dfada..7c85ade8cfee661880f22050de3794c2277d82fe 100644 (file)
@@ -22,7 +22,9 @@ in the same Ceph Storage Cluster used to store data from Ceph File System client
 or Ceph Block Device clients. The S3 and Swift APIs share a common namespace, so
 you may write data with one API and retrieve it with the other.
 
-.. ditaa::  +------------------------+ +------------------------+
+.. ditaa::
+
+            +------------------------+ +------------------------+
             |   S3 compatible API    | |  Swift compatible API  |
             +------------------------+-+------------------------+
             |                      radosgw                      |
@@ -71,6 +73,7 @@ you may write data with one API and retrieve it with the other.
    Keycloak <keycloak>
    Role <role>
    Orphan List and Associated Tooliing <orphans>
+   OpenID Connect Provider <oidc>
    troubleshooting
    Manpage radosgw <../../man/8/radosgw>
    Manpage radosgw-admin <../../man/8/radosgw-admin>
diff --git a/ceph/doc/radosgw/oidc.rst b/ceph/doc/radosgw/oidc.rst
new file mode 100644 (file)
index 0000000..0f5bb3a
--- /dev/null
@@ -0,0 +1,97 @@
+===============================
+ OpenID Connect Provider in RGW
+===============================
+
+An entity describing the OpenID Connect Provider needs to be created in RGW, in order to establish trust between the two.
+
+REST APIs for Manipulating an OpenID Connect Provider
+=====================================================
+
+The following REST APIs can be used for creating and managing an OpenID Connect Provider entity in RGW.
+
+In order to invoke the REST admin APIs, a user with admin caps needs to be created.
+
+.. code-block:: javascript
+
+  radosgw-admin --uid TESTER --display-name "TestUser" --access_key TESTER --secret test123 user create
+  radosgw-admin caps add --uid="TESTER" --caps="oidc-provider=*"
+
+
+CreateOpenIDConnectProvider
+---------------------------------
+
+Create an OpenID Connect Provider entity in RGW
+
+Request Parameters
+~~~~~~~~~~~~~~~~~~
+
+``ClientIDList.member.N``
+
+:Description: List of Client Ids that needs access to S3 resources.
+:Type: Array of Strings
+
+``ThumbprintList.member.N``
+
+:Description: List of OpenID Connect IDP's server certificates' thumbprints. A maximum of 5 thumbprints are allowed.
+:Type: Array of Strings
+
+``Url``
+
+:Description: URL of the IDP.
+:Type: String
+
+
+Example::
+  POST "<hostname>?Action=Action=CreateOpenIDConnectProvider
+    &ThumbprintList.list.1=F7D7B3515DD0D319DD219A43A9EA727AD6065287
+    &ClientIDList.list.1=app-profile-jsp
+    &Url=http://localhost:8080/auth/realms/quickstart
+
+
+DeleteOpenIDConnectProvider
+---------------------------
+
+Deletes an OpenID Connect Provider entity in RGW
+
+Request Parameters
+~~~~~~~~~~~~~~~~~~
+
+``OpenIDConnectProviderArn``
+
+:Description: ARN of the IDP which is returned by the Create API.
+:Type: String
+
+Example::
+  POST "<hostname>?Action=Action=DeleteOpenIDConnectProvider
+    &OpenIDConnectProviderArn=arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/quickstart
+
+
+GetOpenIDConnectProvider
+---------------------------
+
+Gets information about an IDP.
+
+Request Parameters
+~~~~~~~~~~~~~~~~~~
+
+``OpenIDConnectProviderArn``
+
+:Description: ARN of the IDP which is returned by the Create API.
+:Type: String
+
+Example::
+  POST "<hostname>?Action=Action=GetOpenIDConnectProvider
+    &OpenIDConnectProviderArn=arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/quickstart
+
+ListOpenIDConnectProviders
+--------------------------
+
+Lists infomation about all IDPs
+
+Request Parameters
+~~~~~~~~~~~~~~~~~~
+
+None
+
+Example::
+  POST "<hostname>?Action=Action=ListOpenIDConnectProviders
index 8287d19be5b1c916aa7a9f54d3cae9454006bcc9..5d2889b192d20c5ba10328f72eac18c039358c13 100644 (file)
@@ -13,7 +13,9 @@ metadata. See example code for the following languages:
 - `Ruby`_
 
 
-.. ditaa:: +----------------------------+        +-----------------------------+
+.. ditaa::
+
+           +----------------------------+        +-----------------------------+
            |                            |        |                             |
            |    Create a Connection     |------->|      Create a Container     |
            |                            |        |                             |
index 3deef8dac3b637b7ae18a33984c83f07dcfcd5e1..dc3ec3ddfb6e24606f33d27a09446e4344c09e41 100644 (file)
@@ -5,7 +5,9 @@ HashiCorp Vault Integration
 HashiCorp `Vault`_ can be used as a secure key management service for
 `Server-Side Encryption`_ (SSE-KMS).
 
-.. ditaa:: +---------+       +---------+        +-------+     +-------+
+.. ditaa::
+
+           +---------+       +---------+        +-------+     +-------+
            |  Client |       | RadosGW |        | Vault |     |  OSD  |
            +---------+       +---------+        +-------+     +-------+
                 | create secret   |                 |             |
index fdcf21d6f3c6779e5d49cb58b636f298e90be4b2..ea63f2e4ddc5eb2f9a50ad7a4fdcfb3b65b2b523 100644 (file)
@@ -17,7 +17,9 @@ such as snapshotting, replication and consistency. Ceph's
 :abbr:`RADOS (Reliable Autonomic Distributed Object Store)` Block Devices (RBD)
 interact with OSDs using kernel modules or the ``librbd`` library.
 
-.. ditaa::  +------------------------+ +------------------------+
+.. ditaa::
+
+            +------------------------+ +------------------------+
             |     Kernel Module      | |        librbd          |
             +------------------------+-+------------------------+
             |                   RADOS Protocol                  |
index 3488096628c38b0f302ee89ac0cc03165d9c6c50..c0ba118197a3f034ac9e87cf4077f47baee8a0f8 100644 (file)
@@ -21,7 +21,9 @@ software that interfaces with ``libvirt``. The following stack diagram
 illustrates how ``libvirt`` and QEMU use Ceph block devices via ``librbd``. 
 
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+
+            +---------------------------------------------------+
             |                     libvirt                       |
             +------------------------+--------------------------+
                                      |
index 5b0143509c10c479b77aa8e7145a07d178ab6fb7..f7ddb2ec6a4f1d27b2135db5a240dd9937d883b7 100644 (file)
@@ -14,7 +14,9 @@ virtual machines quickly, because the client doesn't have to download an entire
 image each time it spins up a new virtual machine.
 
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+
+            +---------------------------------------------------+
             |                       QEMU                        |
             +---------------------------------------------------+
             |                      librbd                       |
index 876284bcb2c1507eaaa342d98feeb8d73735faeb..1b961234b89857f3fcd188b4b4d60a086453b9a8 100644 (file)
@@ -14,7 +14,9 @@ and a dual-core processor, but more CPU and RAM will perform better. The
 following diagram depicts the CloudStack/Ceph technology stack.
 
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+
+            +---------------------------------------------------+
             |                   CloudStack                      |
             +---------------------------------------------------+
             |                     libvirt                       |
index 8f00dbf75e47b1e263301216bea9c48636995a79..caaf77d648fa4067de2462016008d1ba6a0edc67 100644 (file)
@@ -14,7 +14,8 @@ To use Ceph Block Devices with Kubernetes v1.13 and higher, you must install
 and configure ``ceph-csi`` within your Kubernetes environment. The following
 diagram depicts the Kubernetes/Ceph technology stack.
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+            +---------------------------------------------------+
             |                   Kubernetes                      |
             +---------------------------------------------------+
             |                    ceph--csi                      |
index ca7c12d93e4e6d7704b9536ed1acaa042dd55f86..813deaae3fb5724a231edf0dbec717ab38d96db5 100644 (file)
@@ -20,7 +20,9 @@ the image is updated to point to the new target image.
    kernel module does not support live-migration at this time.
 
 
-.. ditaa:: +-------------+               +-------------+
+.. ditaa::
+
+           +-------------+               +-------------+
            | {s} c999    |               | {s}         |
            |  Live       | Target refers |  Live       |
            |  migration  |<-------------*|  migration  |
index 65e74d3bc3a9dbff5a1aa00783ecd7f944e1f826..9d02b514600896265cd8b3ecd4260a11064f93c4 100644 (file)
@@ -16,7 +16,9 @@ quad-core processor. The following diagram depicts the OpenStack/Ceph
 technology stack.
 
 
-.. ditaa::  +---------------------------------------------------+
+.. ditaa::
+
+            +---------------------------------------------------+
             |                    OpenStack                      |
             +---------------------------------------------------+
             |                     libvirt                       |
index 582ec8daeb8c59eea46d62e47031dcaac796b28e..f5b1372d9283df5961296d05c820ebba49b8a0f5 100644 (file)
@@ -21,7 +21,9 @@ will be serviced from the local cache.
 
 .. note:: RBD shared read-only parent image cache requires the Ceph Nautilus release or later.
 
-.. ditaa::  +--------------------------------------------------------+
+.. ditaa::
+
+            +--------------------------------------------------------+
             |                         QEMU                           |
             +--------------------------------------------------------+
             |                librbd (cloned images)                  |
index 5aaa23e5d19ddd4390e37ce4b26d9897521b99d6..3d2037d030a1fd8701c89046abf773ae08dfcb0e 100644 (file)
@@ -24,7 +24,9 @@ command and many higher level interfaces, including `QEMU`_, `libvirt`_,
          For virtual machines, `qemu-guest-agent` can be used to automatically
          freeze file systems when creating a snapshot.
 
-.. ditaa:: +------------+         +-------------+
+.. ditaa::
+
+           +------------+         +-------------+
            | {s}        |         | {s} c999    |
            |   Active   |<-------*|   Snapshot  |
            |   Image    |         |   of Image  |
@@ -147,7 +149,9 @@ so cloning a snapshot simplifies semantics--making it possible to create
 clones rapidly.
 
 
-.. ditaa:: +-------------+              +-------------+
+.. ditaa::
+
+           +-------------+              +-------------+
            | {s} c999    |              | {s}         |
            |  Snapshot   | Child refers |  COW Clone  |
            |  of Image   |<------------*| of Snapshot |
@@ -181,7 +185,9 @@ Ceph block device layering is a simple process. You must have an image. You must
 create a snapshot of the image. You must protect the snapshot. Once you have 
 performed these steps, you can begin cloning the snapshot.
 
-.. ditaa:: +----------------------------+        +-----------------------------+
+.. ditaa::
+
+           +----------------------------+        +-----------------------------+
            |                            |        |                             |
            | Create Block Device Image  |------->|      Create a Snapshot      |
            |                            |        |                             |
index 4907789b88e8d8106c6ac162ce1ae5553ab83db2..8d7c79887f7f646b052b00ec65030170f3d64ec7 100644 (file)
@@ -11,7 +11,9 @@ Storage Cluster requires at least one Ceph Monitor, Ceph Manager, and
 Ceph OSD (Object Storage Daemon). The Ceph Metadata Server is also
 required when running Ceph File System clients.
 
-.. ditaa::  +---------------+ +------------+ +------------+ +---------------+
+.. ditaa::
+
+            +---------------+ +------------+ +------------+ +---------------+
             |      OSDs     | | Monitors   | |  Managers  | |      MDSs     |
             +---------------+ +------------+ +------------+ +---------------+
 
index d8a331f1ff272cee119104ce39841ed6d1d6a502..a400652d8b994ef170189427eaf1ff6d42103de7 100644 (file)
@@ -11,7 +11,8 @@ Device`.
    Block Device.
 
 
-.. ditaa:: 
+.. ditaa::
+
            /------------------\         /----------------\
            |    Admin Node    |         |   ceph-client  |
            |                  +-------->+ cCCC           |
index 67e759d918bcdf55e20a24590a4f50719737b605..0300e4f01965052a33d97133b04125c21146c9f9 100644 (file)
       "steppedLine": false,
       "targets": [
         {
-          "expr": "(irate(node_disk_writes_completed{instance=~\"($ceph_hosts).*\"}[5m]) or irate(node_disk_writes_completed_total{instance=~\"($ceph_hosts).*\"}[5m])) * on(instance, device) group_left(ceph_daemon) label_replace(label_replace(ceph_disk_occupation, \"device\", \"$1\", \"device\", \"/dev/(.*)\"), \"instance\", \"$1\", \"instance\", \"([^:.]*).*\")",
+          "expr": "label_replace(\n  (\n    irate(node_disk_writes_completed{instance=~\"($ceph_hosts).*\"}[5m]) or\n    irate(node_disk_writes_completed_total{instance=~\"($ceph_hosts).*\"}[5m])\n  ),\n  \"instance\",\n  \"$1\",\n  \"instance\",\n  \"([^:.]*).*\"\n)\n* on(instance, device) group_left(ceph_daemon)\n  label_replace(\n    label_replace(\n      ceph_disk_occupation,\n      \"device\",\n      \"$1\",\n      \"device\",\n      \"/dev/(.*)\"\n    ),\n    \"instance\",\n    \"$1\",\n    \"instance\",\n    \"([^:.]*).*\"\n  )",
           "format": "time_series",
           "intervalFactor": 1,
           "legendFormat": "{{device}}({{ceph_daemon}}) writes",
           "textEditor": true
         },
         {
-          "expr": "(irate(node_disk_reads_completed{instance=~\"($ceph_hosts).*\"}[5m]) or irate(node_disk_reads_completed_total{instance=~\"($ceph_hosts).*\"}[5m])) * on(instance, device) group_left(ceph_daemon) label_replace(label_replace(ceph_disk_occupation, \"device\", \"$1\", \"device\", \"/dev/(.*)\"), \"instance\", \"$1\", \"instance\", \"([^:.]*).*\")",
+          "expr": "label_replace(\n    (irate(node_disk_reads_completed{instance=~\"($ceph_hosts).*\"}[5m]) or irate(node_disk_reads_completed_total{instance=~\"($ceph_hosts).*\"}[5m])),\n    \"instance\",\n    \"$1\",\n    \"instance\",\n    \"([^:.]*).*\"\n)\n* on(instance, device) group_left(ceph_daemon)\n  label_replace(\n    label_replace(\n      ceph_disk_occupation,\n      \"device\",\n      \"$1\",\n      \"device\",\n      \"/dev/(.*)\"\n    ),\n    \"instance\",\n    \"$1\",\n    \"instance\",\n    \"([^:.]*).*\"\n  )",
           "format": "time_series",
           "hide": false,
           "intervalFactor": 1,
index ab517757033edd7ed87ec242ad9b718b5539c5bf..edfec5e19a375e4fe791370509ebc4f8191d7e84 100644 (file)
@@ -4,7 +4,8 @@ roles:
 - [client.0, client.1]
 overrides:
   ceph:
-    max_mds: 3
+    cephfs:
+      max_mds: 3
 openstack:
 - volumes: # attached to each instance
     count: 4
index 302b1ac786ef4fd71f6f4af3750f03c5af20eddd..fd69e32bcea70c0cf3632638886cd22fa63e0217 100644 (file)
@@ -4,7 +4,8 @@ roles:
 - [client.0, client.1]
 overrides:
   ceph:
-    max_mds: 9
+    cephfs:
+      max_mds: 9
 openstack:
 - volumes: # attached to each instance
     count: 4
index 96026f91a8de949b3d75caf33c26a0420f682496..286706a5c6789998bbed46e205169557d45891b3 100644 (file)
@@ -5,3 +5,5 @@ overrides:
         client mount timeout: 600
         debug ms: 1
         debug client: 20
+        rados mon op timeout: 15m
+        rados osd op timeout: 15m
index 0c2f8380547d2b85445b11eb80c28cfe820ce199..922f7167ae4742c742d851582ace9d09d5fde5dd 100644 (file)
@@ -9,3 +9,5 @@ overrides:
         mds op complaint time: 180
         mds verify scatter: true
         osd op complaint time: 180
+        rados mon op timeout: 15m
+        rados osd op timeout: 15m
diff --git a/ceph/qa/cephfs/overrides/session_timeout.yaml b/ceph/qa/cephfs/overrides/session_timeout.yaml
new file mode 100644 (file)
index 0000000..a7a1633
--- /dev/null
@@ -0,0 +1,4 @@
+overrides:
+  ceph:
+    cephfs:
+      session_timeout: 300
index eb24e5e04d657dafb01c7297d1de3294b41064e6..e468e126a4e0707d5177b04de8301bc65a7cbd66 100644 (file)
@@ -6,3 +6,5 @@ overrides:
         osd op queue cut off: debug_random
         osd debug verify missing on start: true
         osd debug verify cached snaps: true
+      mon:
+        mon scrub interval: 300
index 068021eb6c7cb24c3c8c840c66bb2c2a02936147..1f8e9cbc26b6d1bba863f3abe35d74439514cfbe 100644 (file)
@@ -6,6 +6,7 @@ overrides:
       mgr:
         debug mgr: 20
         debug ms: 1
+        debug client: 20
       client:
         debug client: 20
         debug mgrc: 20
diff --git a/ceph/qa/distros/all/rhel_8.2.yaml b/ceph/qa/distros/all/rhel_8.2.yaml
new file mode 100644 (file)
index 0000000..9b224e2
--- /dev/null
@@ -0,0 +1,6 @@
+os_type: rhel
+os_version: "8.2"
+overrides:
+  selinux:
+    whitelist:
+      - scontext=system_u:system_r:logrotate_t:s0
index 6bb83b2b0eb178ccd093bd81c3ee371b3dd092b9..3d3d99642596c392f716800deba2e196725b733a 100644 (file)
@@ -1,11 +1,12 @@
 os_type: ubuntu
 os_version: "18.04"
 
-# feel free to remove this test, if ppa:projectatomic is no longer maintained.
+# feel free to remove this test, if Kubic project is no longer maintained.
 tasks:
 - exec:
     all:
-    - sudo apt -y install software-properties-common
-    - sudo add-apt-repository -y ppa:projectatomic/ppa
+    - curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_18.04/Release.key | sudo apt-key add -
+    - echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_18.04/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+    - sudo apt update
     - sudo apt -y install podman
     - echo -e "[registries.search]\nregistries = ['docker.io']" | sudo tee /etc/containers/registries.conf
diff --git a/ceph/qa/distros/supported-all-distro/rhel_8.2.yaml b/ceph/qa/distros/supported-all-distro/rhel_8.2.yaml
new file mode 120000 (symlink)
index 0000000..dd95793
--- /dev/null
@@ -0,0 +1 @@
+../all/rhel_8.2.yaml
\ No newline at end of file
diff --git a/ceph/qa/distros/supported-all-distro/rhel_8.yaml b/ceph/qa/distros/supported-all-distro/rhel_8.yaml
deleted file mode 120000 (symlink)
index f803f09..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../all/rhel_8.yaml
\ No newline at end of file
index f803f091ec8068aca0838b4c0aaf768a47663bf8..dd95793a8c1cb411cc9d8b40079e705f0227ecc0 120000 (symlink)
@@ -1 +1 @@
-../all/rhel_8.yaml
\ No newline at end of file
+../all/rhel_8.2.yaml
\ No newline at end of file
index f803f091ec8068aca0838b4c0aaf768a47663bf8..dd95793a8c1cb411cc9d8b40079e705f0227ecc0 120000 (symlink)
@@ -1 +1 @@
-../all/rhel_8.yaml
\ No newline at end of file
+../all/rhel_8.2.yaml
\ No newline at end of file
diff --git a/ceph/qa/erasure-code/ec-feature-plugins-v3.yaml b/ceph/qa/erasure-code/ec-feature-plugins-v3.yaml
deleted file mode 100644 (file)
index 332b944..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# Test the expected behavior of the
-#
-#    CEPH_FEATURE_ERASURE_CODE_PLUGINS_V3
-#
-# feature.
-#
-roles:
-- - mon.a
-  - mon.b
-  - osd.0
-  - osd.1
-- - osd.2
-  - mon.c
-  - mgr.x
-tasks:
-#
-# Install hammer
-#
-- install:
-    branch: hammer
-- ceph:
-    fs: xfs
-#
-# We don't need mon.c for now: it will be used later to make sure an old
-# mon cannot join the quorum once the feature has been activated
-#
-- ceph.stop:
-    daemons: [mon.c]
-- exec:
-    mon.a: 
-      - |-
-        ceph osd erasure-code-profile set WRONG plugin=WRONG
-        ceph osd pool create poolWRONG 12 12 erasure WRONG 2>&1 | grep "failed to load plugin using profile WRONG"
-#
-# Partial upgrade, osd.2 is not upgraded
-#
-- install.upgrade:
-    osd.0: 
-#
-# a is the leader
-#
-- ceph.restart:
-    daemons: [mon.a]
-    wait-for-healthy: false
-- exec:
-    mon.a:
-      - |-
-        ceph osd erasure-code-profile set profile-shec k=2 m=1 c=1 plugin=shec 2>&1 | grep "unsupported by: the monitor cluster"
-- ceph.restart:
-    daemons: [mon.b, osd.1, osd.0]
-    wait-for-healthy: false
-    wait-for-osds-up: true
-#
-# The shec plugin cannot be used because osd.2 is not upgraded yet
-# and would crash.
-#
-- exec:
-    mon.a: 
-      - |-
-        ceph osd erasure-code-profile set profile-shec k=2 m=1 c=1 plugin=shec 2>&1 | grep "unsupported by: osd.2"
-#
-# Taking osd.2 out, the rest of the cluster is upgraded
-#
-- ceph.stop:
-    daemons: [osd.2]
-- sleep:
-    duration: 60
-#
-# Creating an erasure code profile using the shec plugin now works
-#
-- exec:
-    mon.a: 
-      - "ceph osd erasure-code-profile set profile-shec k=2 m=1 c=1 plugin=shec"
-#
-# osd.2 won't be able to join the because is does not support the feature
-#
-- ceph.restart:
-    daemons: [osd.2]
-    wait-for-healthy: false
-- sleep:
-    duration: 60
-- exec:
-    osd.2: 
-      - |-
-        grep "protocol feature.*missing" /var/log/ceph/ceph-osd.2.log
-#
-# mon.c won't be able to join the because it does not support the feature
-#
-- ceph.restart:
-    daemons: [mon.c]
-    wait-for-healthy: false
-- sleep:
-    duration: 60
-- exec:
-    mon.c: 
-      - |-
-        grep "missing.*feature" /var/log/ceph/ceph-mon.c.log
index cefa98b6a957f5957c958ffbf3fe7ce85ea92253..aeb37162e3fc1f86d7cd7a8355bd6a31323c663c 100755 (executable)
@@ -24,9 +24,6 @@ echo "Scheduling " $2 " branch"
 if [ $2 = "master" ] ; then
         # run master branch with --newest option looking for good sha1 7 builds back
         teuthology-suite -v -c $2 -m $3 -k distro -s rados --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/28 --newest 7 -e $4 ~/vps.yaml $5
-elif [ $2 = "hammer" ] ; then
-        # run hammer branch with less jobs
-        teuthology-suite -v -c $2 -m $3 -k distro -s rados --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/56 -e $4 ~/vps.yaml $5
 elif [ $2 = "jewel" ] ; then
         # run jewel branch with /40 jobs
         teuthology-suite -v -c $2 -m $3 -k distro -s rados --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/40 -e $4 ~/vps.yaml $5
index d8fdbb86dbcea206add00f0817fc309821f5610c..8078205d6047ac380a74f5b75b7c914be9b43c61 100755 (executable)
 
 echo "Scheduling " $2 " branch"
 if [ $2 = "master" ] ; then
-        # run master branch with --newest option looking for good sha1 7 builds back with /999 jobs
-        teuthology-suite -v -c $2 -m $3 -k $6 -s $4 --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/999 --newest 7 -e $5 $7
-elif [ $2 = "hammer" ] ; then
-        # run hammer branch with less jobs
-        teuthology-suite -v -c $2 -m $3 -k $6 -s $4 --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/56 -e $5 $7
+        # run master branch with --newest option looking for good sha1 7 builds back with /100000 jobs
+        # using '-p 80 --force-priority' as an execption ATM
+        teuthology-suite -v -c $2 -m $3 -k $6 -s $4 --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/100000 --newest 7 -e $5 $7 -p 80 --force-priority
 elif [ $2 = "jewel" ] ; then
         # run jewel branch with /40 jobs
         teuthology-suite -v -c $2 -m $3 -k $6 -s $4 --subset $(echo "(($(date +%U) % 4) * 7) + $1" | bc)/40 -e $5 $7
index cbbd06ce2aef5040fbd5427b8c18049be17b89bb..bbbd26aac53b96563c5e1df0e3bdd2d91b73c710 100644 (file)
@@ -343,6 +343,15 @@ rw -> ro with open_count > 0
   $ sudo rbd unmap $DEV
 
 
+"-o rw --read-only" should result in read-only mapping
+======================================================
+
+  $ DEV=$(sudo rbd map -o rw --read-only img)
+  $ blockdev --getro $DEV
+  1
+  $ sudo rbd unmap $DEV
+
+
 Teardown
 ========
 
index f067f46d9d7eb2457a0de93e1f924153b0223ce6..8633959d5f2a4a979e55688c3bccaa9ca99176a9 100755 (executable)
@@ -33,18 +33,18 @@ function run() {
         run_mon $dir b --public-addr $MONB || return 1
     )
 
-    timeout 360 ceph --mon-host $MONA mon stat || return 1
+    timeout 360 ceph --mon-host-override $MONA mon stat || return 1
     # check that MONB is indeed a peon
     ceph --admin-daemon $(get_asok_path mon.b) mon_status |
        grep '"peon"' || return 1
     # when the leader ( MONA ) is used, there is no message forwarding
-    ceph --mon-host $MONA osd pool create POOL1 12
+    ceph --mon-host-override $MONA osd pool create POOL1 12
     CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.a) log flush || return 1
     grep 'mon_command(.*"POOL1"' $dir/mon.a.log || return 1
     CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.b) log flush || return 1
     grep 'mon_command(.*"POOL1"' $dir/mon.b.log && return 1
     # when the peon ( MONB ) is used, the message is forwarded to the leader
-    ceph --mon-host $MONB osd pool create POOL2 12
+    ceph --mon-host-override $MONB osd pool create POOL2 12
     CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.b) log flush || return 1
     grep 'forward_request.*mon_command(.*"POOL2"' $dir/mon.b.log || return 1
     CEPH_ARGS='' ceph --admin-daemon $(get_asok_path mon.a) log flush || return 1
index 667c6a702b881627cb3479559fe9bd9055236ac8..172642e86559780a0b595c6521851e1d5e80f8ff 100755 (executable)
@@ -226,7 +226,7 @@ function TEST_mon_last_clean_epoch() {
   # - all pools have floor equal to lec
 
   while kill $osd_pid ; do sleep 1 ; done
-  ceph osd down 2
+  ceph osd out 2
   sleep 5 # seriously, just to make sure things settle; we may not need this.
 
   # generate some maps
index 613bfc316f7ca2c23e66ee6ba210b1559676f99a..bf1adde9892d93e57381a80453eae142ae998ef2 100755 (executable)
@@ -120,6 +120,7 @@ function rados_get_data() {
     inject_$inject rep data $poolname $objname $dir 0 || return 1
     rados_get $dir $poolname $objname || return 1
 
+    wait_for_clean
     COUNT=$(ceph pg $pgid query | jq '.info.stats.stat_sum.num_objects_repaired')
     test "$COUNT" = "1" || return 1
     flush_pg_stats
@@ -142,6 +143,7 @@ function rados_get_data() {
     inject_$inject rep data $poolname $objname $dir 2 || return 1
     rados_get $dir $poolname $objname || return 1
 
+    wait_for_clean
     COUNT=$(ceph pg $pgid query | jq '.info.stats.stat_sum.num_objects_repaired')
     test "$COUNT" = "3" || return 1
     flush_pg_stats
@@ -153,6 +155,7 @@ function rados_get_data() {
     inject_$inject rep data $poolname $objname $dir 2 || return 1
     rados_get $dir $poolname $objname hang || return 1
 
+    wait_for_clean
     # After hang another repair couldn't happen, so count stays the same
     COUNT=$(ceph pg $pgid query | jq '.info.stats.stat_sum.num_objects_repaired')
     test "$COUNT" = "3" || return 1
@@ -185,7 +188,7 @@ function TEST_rados_repair_warning() {
     wait_for_clean || return 1
 
     local poolname=pool-rep
-    local obj-base=obj-warn-
+    local objbase=obj-warn
     local inject=eio
 
    for i in $(seq 1 $OBJS)
@@ -200,6 +203,7 @@ function TEST_rados_repair_warning() {
     local primary=${object_osds[0]}
     local bad_peer=${object_osds[1]}
 
+    wait_for_clean
     COUNT=$(ceph pg $pgid query | jq '.info.stats.stat_sum.num_objects_repaired')
     test "$COUNT" = "$OBJS" || return 1
     flush_pg_stats
@@ -224,6 +228,7 @@ function TEST_rados_repair_warning() {
        rados_get $dir $poolname ${objbase}-$i || return 1
     done
 
+    wait_for_clean
     COUNT=$(ceph pg $pgid query | jq '.info.stats.stat_sum.num_objects_repaired')
     test "$COUNT" = "$(expr $OBJS \* 2)" || return 1
     flush_pg_stats
index 0d26dc9e6b56ff1c33c13e14b792a882a7d0a3c0..f063654a92c2c49b1bbf999d2bc996481e396b42 100644 (file)
@@ -1,4 +1,7 @@
-
+overrides:
+  ceph:
+    log-ignorelist:
+      - Replacing daemon mds.a
 tasks:
   - cephfs_test_runner:
       modules:
index 7364fd211d48d3f6af84bdc8d14d50f5e69f6b9d..e94728f9ebf7db9034d4bcab55303f5e97e0c175 100644 (file)
@@ -1,5 +1,8 @@
 overrides:
   ceph:
+    conf:
+      mgr:
+        debug client: 10
     log-whitelist:
       - OSD full dropping all updates
       - OSD near full
diff --git a/ceph/qa/suites/fs/basic_workload/overrides/session_timeout.yaml b/ceph/qa/suites/fs/basic_workload/overrides/session_timeout.yaml
new file mode 120000 (symlink)
index 0000000..fce0318
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/session_timeout.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/thrash/overrides/session_timeout.yaml b/ceph/qa/suites/fs/thrash/overrides/session_timeout.yaml
new file mode 120000 (symlink)
index 0000000..fce0318
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/session_timeout.yaml
\ No newline at end of file
index c740a450a6f2752694cd29308fe4e9b85e04ece1..f9e95daa9230b01f9d19e5665425205b9594da58 100644 (file)
@@ -1,3 +1,4 @@
 overrides:
   ceph:
-    max_mds: 1
+    cephfs:
+      max_mds: 1
index ecf118d9f86762733f16a70ed367050c9ae20175..b3a9b5d6714f0c07d43802b810388fe157d752b4 100644 (file)
@@ -1,3 +1,4 @@
 overrides:
   ceph:
-    max_mds: 2
+    cephfs:
+      max_mds: 2
diff --git a/ceph/qa/suites/fs/verify/overrides/session_timeout.yaml b/ceph/qa/suites/fs/verify/overrides/session_timeout.yaml
new file mode 120000 (symlink)
index 0000000..fce0318
--- /dev/null
@@ -0,0 +1 @@
+.qa/cephfs/overrides/session_timeout.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_netns.yaml b/ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_netns.yaml
new file mode 100644 (file)
index 0000000..21e06e3
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- workunit:
+    clients:
+      all:
+        - rbd/krbd_udev_netns.sh
diff --git a/ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_symlinks.yaml b/ceph/qa/suites/krbd/rbd-nomount/tasks/krbd_udev_symlinks.yaml
new file mode 100644 (file)
index 0000000..ee79932
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- workunit:
+    clients:
+      all:
+        - rbd/krbd_udev_symlinks.sh
index 8a3ad9f58c3b445d6c4d75c3129e6d6eddefc7f3..827d887b6dd351953ff7553038dffe6d992b682e 100644 (file)
@@ -20,6 +20,7 @@ roles:
   - prometheus.a
   - grafana.a
   - node-exporter.b
+  - ceph.iscsi.iscsi.a
 openstack:
 - volumes: # attached to each instance
     count: 4
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/defaut.yaml b/ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/defaut.yaml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/repo_digest.yaml b/ceph/qa/suites/rados/cephadm/upgrade/2-repo_digest/repo_digest.yaml
new file mode 100644 (file)
index 0000000..87e9e44
--- /dev/null
@@ -0,0 +1,4 @@
+tasks:
+- cephadm.shell:
+    mon.a:
+      - ceph config set mgr mgr/cephadm/use_repo_digest true --force
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/2-start-upgrade.yaml b/ceph/qa/suites/rados/cephadm/upgrade/2-start-upgrade.yaml
deleted file mode 100644 (file)
index f13b2e0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-tasks:
-- cephadm.shell:
-    env: [sha1]
-    mon.a:
-      - ceph orch upgrade start --image quay.ceph.io/ceph-ci/ceph:$sha1
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/3-start-upgrade.yaml b/ceph/qa/suites/rados/cephadm/upgrade/3-start-upgrade.yaml
new file mode 100644 (file)
index 0000000..f13b2e0
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- cephadm.shell:
+    env: [sha1]
+    mon.a:
+      - ceph orch upgrade start --image quay.ceph.io/ceph-ci/ceph:$sha1
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/3-wait.yaml b/ceph/qa/suites/rados/cephadm/upgrade/3-wait.yaml
deleted file mode 100644 (file)
index e14aabf..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-tasks:
-- cephadm.shell:
-    env: [sha1]
-    mon.a:
-      - while ceph orch upgrade status | jq '.in_progress' | grep true ; do ceph orch ps ; ceph versions ; sleep 30 ; done
-      - ceph orch ps
-      - ceph versions
-      - ceph versions | jq -e '.overall | length == 1'
-      - ceph versions | jq -e '.overall | keys' | grep $sha1
diff --git a/ceph/qa/suites/rados/cephadm/upgrade/4-wait.yaml b/ceph/qa/suites/rados/cephadm/upgrade/4-wait.yaml
new file mode 100644 (file)
index 0000000..e14aabf
--- /dev/null
@@ -0,0 +1,9 @@
+tasks:
+- cephadm.shell:
+    env: [sha1]
+    mon.a:
+      - while ceph orch upgrade status | jq '.in_progress' | grep true ; do ceph orch ps ; ceph versions ; sleep 30 ; done
+      - ceph orch ps
+      - ceph versions
+      - ceph versions | jq -e '.overall | length == 1'
+      - ceph versions | jq -e '.overall | keys' | grep $sha1
index 6378358f5b3abc59908e604cd8edab0c693c2fab..6c53b315002bb2a69adf5e21a8c4abba825e7bdc 100644 (file)
@@ -8,8 +8,12 @@ overrides:
         mon osdmap full prune min: 15
         mon osdmap full prune interval: 2
         mon osdmap full prune txsize: 2
+        mon scrub inject crc mismatch: 0.01
+        mon scrub inject missing keys: 0.05
 # thrashing monitors may make mgr have trouble w/ its keepalive
     log-whitelist:
+      - ScrubResult
+      - scrub mismatch
       - overall HEALTH_
       - \(MGR_DOWN\)
 # slow mons -> slow peering -> PG_AVAILABILITY
diff --git a/ceph/qa/suites/rados/thrash-old-clients/1-install/hammer.yaml b/ceph/qa/suites/rados/thrash-old-clients/1-install/hammer.yaml
deleted file mode 100644 (file)
index 5713b6c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-overrides:
-  ceph:
-    mon_bind_msgr2: false
-    crush_tunables: hammer
-    log-whitelist:
-      - \(MON_DOWN\)
-    conf:
-      global:
-        ms bind msgr2: false
-      mon:
-        mon osd initial require min compat client: hammer
-tasks:
-- install:
-    branch: hammer
-    downgrade_packages: ['librbd1', 'librados2']
-    exclude_packages:
-      - librados3
-      - ceph-mgr-dashboard
-      - ceph-mgr-diskprediction-local
-      - ceph-mgr-rook
-      - ceph-mgr-cephadm
-      - cephadm
-      - ceph-mgr
-      - libcephfs2
-      - libcephfs-devel
-      - libcephfs-dev
-      - libradospp-devel
-      - ceph-immutable-object-cache
-      - ceph-base
-      - librados-devel
-      - python3-rados
-      - python3-rgw
-      - python3-rbd
-      - python3-cephfs
-      - rbd-mirror
-      - rbd-nbd
-    extra_packages:
-      - librados2
-      - python-rados
-      - python-rbd
-      - python-cephfs
diff --git a/ceph/qa/suites/rados/thrash-old-clients/distro$/centos_7.6.yaml b/ceph/qa/suites/rados/thrash-old-clients/distro$/centos_7.6.yaml
deleted file mode 120000 (symlink)
index f406338..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/all/centos_7.6.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rados/thrash-old-clients/distro$/ubuntu_18.04.yaml b/ceph/qa/suites/rados/thrash-old-clients/distro$/ubuntu_18.04.yaml
new file mode 120000 (symlink)
index 0000000..cfb85f1
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/all/ubuntu_18.04.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/% b/ceph/qa/suites/rbd/immutable-object-cache/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/.qa b/ceph/qa/suites/rbd/immutable-object-cache/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/clusters/+ b/ceph/qa/suites/rbd/immutable-object-cache/clusters/+
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/clusters/.qa b/ceph/qa/suites/rbd/immutable-object-cache/clusters/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/clusters/fix-2.yaml b/ceph/qa/suites/rbd/immutable-object-cache/clusters/fix-2.yaml
new file mode 100644 (file)
index 0000000..dbccecb
--- /dev/null
@@ -0,0 +1,3 @@
+roles:
+- [mon.a, mgr.x, osd.0, osd.1]
+- [mon.b, mgr.y, osd.2, osd.3, client.0]
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/clusters/openstack.yaml b/ceph/qa/suites/rbd/immutable-object-cache/clusters/openstack.yaml
new file mode 100644 (file)
index 0000000..b113e4f
--- /dev/null
@@ -0,0 +1,4 @@
+openstack:
+    - volumes: # attached to each instance
+        count: 4
+        size: 10 # GB
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/pool/ceph_and_immutable_object_cache.yaml b/ceph/qa/suites/rbd/immutable-object-cache/pool/ceph_and_immutable_object_cache.yaml
new file mode 100644 (file)
index 0000000..540e33d
--- /dev/null
@@ -0,0 +1,11 @@
+tasks:
+- install:
+    extra_packages: ['ceph-immutable-object-cache']
+- ceph:
+    conf:
+      client:
+        rbd_parent_cache_enabled: true
+        immutable object cache path: /tmp/ceph-immutable-object-cache
+        immutable object cache max size: 10G
+- immutable_object_cache:
+    client.0:
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/supported-random-distro$ b/ceph/qa/suites/rbd/immutable-object-cache/supported-random-distro$
new file mode 120000 (symlink)
index 0000000..0862b44
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported-random-distro$
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/workloads/.qa b/ceph/qa/suites/rbd/immutable-object-cache/workloads/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/workloads/c_api_tests_with_defaults.yaml b/ceph/qa/suites/rbd/immutable-object-cache/workloads/c_api_tests_with_defaults.yaml
new file mode 120000 (symlink)
index 0000000..9490327
--- /dev/null
@@ -0,0 +1 @@
+../../librbd/workloads/c_api_tests_with_defaults.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/workloads/fio_on_immutable_object_cache.yaml b/ceph/qa/suites/rbd/immutable-object-cache/workloads/fio_on_immutable_object_cache.yaml
new file mode 100644 (file)
index 0000000..08d76ee
--- /dev/null
@@ -0,0 +1,11 @@
+tasks:
+- rbd_fio:
+    client.0:
+      thick-provision: true
+      fio-io-size: 100%
+      formats: [2]
+      features: [[layering]]
+      io-engine: rbd
+      test-clone-io: 1
+      rw: randread
+      runtime: 600
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/workloads/qemu_on_immutable_object_cache_and_thrash.yaml b/ceph/qa/suites/rbd/immutable-object-cache/workloads/qemu_on_immutable_object_cache_and_thrash.yaml
new file mode 100644 (file)
index 0000000..33a5cf0
--- /dev/null
@@ -0,0 +1,11 @@
+tasks:
+- qemu:
+    client.0:
+      clone: true
+      test: qa/run_xfstests_qemu.sh
+      type: block
+      cpus: 4
+      memory: 4096
+      disks: 3
+- immutable_object_cache_thrash:
+    client.0:
diff --git a/ceph/qa/suites/teuthology/buildpackages/tasks/branch.yaml b/ceph/qa/suites/teuthology/buildpackages/tasks/branch.yaml
deleted file mode 100644 (file)
index 1dad96f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-roles:
-    - [mon.a, mgr.x, client.0]
-tasks:
-    - install:
-        # branch has precedence over sha1
-        branch: hammer
-        sha1: e5b6eea91cc37434f78a987d2dd1d3edd4a23f3f # dumpling
-    - exec:
-        client.0:
-          - ceph --version | grep 'version 0.94'
index 493eacb32caa3d0fbbb397cb767ac539efa6d352..8619817cf75bd0ee975371c78390d4cc801869e5 100644 (file)
@@ -39,6 +39,7 @@
 
        mon cluster log file level = debug
        debug asserts on shutdown = true
+       mon health detail to clog = false
 
 [osd]
         osd journal size = 100
index 4bb5c94a625e2aa871ab37c10e69f1615a0e99a0..5cfffba52af452f211d9084205e9ba8c1d417a84 100644 (file)
@@ -4,6 +4,7 @@ Ceph cluster task.
 Handle the setup, starting, and clean-up of a Ceph cluster.
 """
 from io import BytesIO
+from io import StringIO
 
 import argparse
 import configobj
@@ -15,7 +16,6 @@ import json
 import time
 import gevent
 import re
-import six
 import socket
 
 from paramiko import SSHException
@@ -192,12 +192,12 @@ def ceph_log(ctx, config):
         testdir = teuthology.get_testdir(ctx)
         remote_logrotate_conf = '%s/logrotate.ceph-test.conf' % testdir
         rotate_conf_path = os.path.join(os.path.dirname(__file__), 'logrotate.conf')
-        with open(rotate_conf_path, 'rb') as f:
+        with open(rotate_conf_path) as f:
             conf = ""
             for daemon, size in daemons.items():
                 log.info('writing logrotate stanza for {}'.format(daemon))
-                conf += six.ensure_str(f.read()).format(daemon_type=daemon,
-                                                   max_size=size)
+                conf += f.read().format(daemon_type=daemon,
+                                        max_size=size)
                 f.seek(0, 0)
 
             for remote in ctx.cluster.remotes.keys():
@@ -320,14 +320,14 @@ def valgrind_post(ctx, config):
                      "/dev/null | sort | uniq",
                 wait=False,
                 check_status=False,
-                stdout=BytesIO(),
+                stdout=StringIO(),
             )
             lookup_procs.append((proc, remote))
 
         valgrind_exception = None
         for (proc, remote) in lookup_procs:
             proc.wait()
-            out = six.ensure_str(proc.stdout.getvalue())
+            out = proc.stdout.getvalue()
             for line in out.split('\n'):
                 if line == '':
                     continue
@@ -402,12 +402,8 @@ def cephfs_setup(ctx, config):
     if mdss.remotes:
         log.info('Setting up CephFS filesystem...')
 
-        fs = Filesystem(ctx, name='cephfs', create=True,
-                        ec_profile=config.get('cephfs_ec_profile', None))
-
-        max_mds = config.get('max_mds', 1)
-        if max_mds > 1:
-            fs.set_max_mds(max_mds)
+        Filesystem(ctx, fs_config=config.get('cephfs', None), name='cephfs',
+                   create=True, ec_profile=config.get('cephfs_ec_profile', None))
 
     yield
 
@@ -939,14 +935,9 @@ def cluster(ctx, config):
                 )
             mnt_point = DATA_PATH.format(
                 type_='osd', cluster=cluster_name, id_=id_)
-            try:
-                remote.run(args=[
-                    'sudo', 'chown', '-R', 'ceph:ceph', mnt_point
-                ])
-            except run.CommandFailedError as e:
-                # hammer does not have ceph user, so ignore this error
-                log.info('ignoring error when chown ceph:ceph,'
-                         'probably installing hammer: %s', e)
+            remote.run(args=[
+                'sudo', 'chown', '-R', 'ceph:ceph', mnt_point
+            ])
 
     log.info('Reading keys from all nodes...')
     keys_fp = BytesIO()
@@ -1038,14 +1029,9 @@ def cluster(ctx, config):
                     '--keyring', keyring_path,
                 ],
             )
-            try:
-                remote.run(args=[
-                    'sudo', 'chown', '-R', 'ceph:ceph', mnt_point
-                ])
-            except run.CommandFailedError as e:
-                # hammer does not have ceph user, so ignore this error
-                log.info('ignoring error when chown ceph:ceph,'
-                         'probably installing hammer: %s', e)
+            remote.run(args=[
+                'sudo', 'chown', '-R', 'ceph:ceph', mnt_point
+            ])
 
     run.wait(
         mons.run(
@@ -1285,7 +1271,7 @@ def run_daemon(ctx, config, type_):
         daemon_signal = 'term'
 
     # create osds in order.  (this only matters for pre-luminous, which might
-    # be hammer, which doesn't take an id_ argument to legacy 'osd create').
+    # be jewel/hammer, which doesn't take an id_ argument to legacy 'osd create').
     osd_uuids  = {}
     for remote, roles_for_host in daemons.remotes.items():
         is_type_ = teuthology.is_type(type_, cluster_name)
@@ -1298,11 +1284,11 @@ def run_daemon(ctx, config, type_):
             if type_ == 'osd':
                 datadir='/var/lib/ceph/osd/{cluster}-{id}'.format(
                     cluster=cluster_name, id=id_)
-                osd_uuid = six.ensure_str(teuthology.get_file(
+                osd_uuid = teuthology.get_file(
                     remote=remote,
                     path=datadir + '/fsid',
                     sudo=True,
-                )).strip()
+                ).decode().strip()
                 osd_uuids[id_] = osd_uuid
     for osd_id in range(len(osd_uuids)):
         id_ = str(osd_id)
@@ -1315,7 +1301,7 @@ def run_daemon(ctx, config, type_):
                 ]
             )
         except:
-            # fallback to pre-luminous (hammer or jewel)
+            # fallback to pre-luminous (jewel)
             remote.run(
                 args=[
                 'sudo', 'ceph', '--cluster', cluster_name,
@@ -1684,6 +1670,20 @@ def task(ctx, config):
             mkfs_options: [-b,size=65536,-l,logdev=/dev/sdc1]
             mount_options: [nobarrier, inode64]
 
+    To change the cephfs's default max_mds (1), use::
+
+        tasks:
+        - ceph:
+            cephfs:
+              max_mds: 2
+
+    To change the mdsmap's default session_timeout (60 seconds), use::
+
+        tasks:
+        - ceph:
+            cephfs:
+              session_timeout: 300
+
     Note, this will cause the task to check the /scratch_devs file on each node
     for available devices.  If no such file is found, /dev/sdb will be used.
 
@@ -1808,8 +1808,8 @@ def task(ctx, config):
         lambda: crush_setup(ctx=ctx, config=config),
         lambda: run_daemon(ctx=ctx, config=config, type_='osd'),
         lambda: create_rbd_pool(ctx=ctx, config=config),
-        lambda: cephfs_setup(ctx=ctx, config=config),
         lambda: run_daemon(ctx=ctx, config=config, type_='mds'),
+        lambda: cephfs_setup(ctx=ctx, config=config),
         lambda: watchdog_setup(ctx=ctx, config=config),
     ]
 
index 2516043217b7d63cdb0085c239e10257f652c571..dc7ff02e50c66d85b85e5bdfa8617abdc508f855 100644 (file)
@@ -15,8 +15,7 @@ import traceback
 import os
 import six
 
-from io import BytesIO
-from six import StringIO
+from io import BytesIO, StringIO
 from teuthology import misc as teuthology
 from tasks.scrub import Scrubber
 from tasks.util.rados import cmd_erasure_code_profile
@@ -314,7 +313,7 @@ class OSDThrasher(Thrasher):
                                         "exp list-pgs failure with status {ret}".
                                         format(ret=proc.exitstatus))
 
-            pgs = six.ensure_str(proc.stdout.getvalue()).split('\n')[:-1]
+            pgs = proc.stdout.getvalue().split('\n')[:-1]
             if len(pgs) == 0:
                 self.log("No PGs found for osd.{osd}".format(osd=exp_osd))
                 return
@@ -379,7 +378,7 @@ class OSDThrasher(Thrasher):
                     raise Exception("ceph-objectstore-tool: "
                                     "imp list-pgs failure with status {ret}".
                                     format(ret=proc.exitstatus))
-                pgs = six.ensure_str(proc.stdout.getvalue()).split('\n')[:-1]
+                pgs = proc.stdout.getvalue().split('\n')[:-1]
                 if pg not in pgs:
                     self.log("Moving pg {pg} from osd.{fosd} to osd.{tosd}".
                              format(pg=pg, fosd=exp_osd, tosd=imp_osd))
@@ -1268,22 +1267,20 @@ class ObjectStoreTool:
         lines.append(cmd)
         return "\n".join(lines)
 
-    def run(self, options, args, stdin=None, stdout=None):
-        if stdout is None:
-            stdout = BytesIO()
+    def run(self, options, args):
         self.manager.kill_osd(self.osd)
-        cmd = self.build_cmd(options, args, stdin)
+        cmd = self.build_cmd(options, args, None)
         self.manager.log(cmd)
         try:
             proc = self.remote.run(args=['bash', '-e', '-x', '-c', cmd],
                                    check_status=False,
-                                   stdout=stdout,
+                                   stdout=BytesIO(),
                                    stderr=BytesIO())
             proc.wait()
             if proc.exitstatus != 0:
                 self.manager.log("failed with " + str(proc.exitstatus))
-                error = six.ensure_str(proc.stdout.getvalue())  + " " + \
-                        six.ensure_str(proc.stderr.getvalue())
+                error = proc.stdout.getvalue().decode()  + " " + \
+                        proc.stderr.getvalue().decode()
                 raise Exception(error)
         finally:
             if self.do_revive:
@@ -1901,7 +1898,7 @@ class CephManager:
         :param erasure_code_use_overwrites: if true, allow overwrites
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             assert isinstance(pg_num, int)
             assert pool_name not in self.pools
             self.log("creating pool_name %s" % (pool_name,))
@@ -1953,7 +1950,7 @@ class CephManager:
         :param pool_name: Pool to be removed
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             assert pool_name in self.pools
             self.log("removing pool_name %s" % (pool_name,))
             del self.pools[pool_name]
@@ -1973,7 +1970,7 @@ class CephManager:
         Return the number of pgs in the pool specified.
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             if pool_name in self.pools:
                 return self.pools[pool_name]
             return 0
@@ -1985,8 +1982,8 @@ class CephManager:
         :returns: property as string
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
-            assert isinstance(prop, six.string_types)
+            assert isinstance(pool_name, str)
+            assert isinstance(prop, str)
             output = self.raw_cluster_cmd(
                 'osd',
                 'pool',
@@ -2007,8 +2004,8 @@ class CephManager:
         This routine retries if set operation fails.
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
-            assert isinstance(prop, six.string_types)
+            assert isinstance(pool_name, str)
+            assert isinstance(prop, str)
             assert isinstance(val, int)
             tries = 0
             while True:
@@ -2035,7 +2032,7 @@ class CephManager:
         Increase the number of pgs in a pool
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             assert isinstance(by, int)
             assert pool_name in self.pools
             if self.get_num_creating() > 0:
@@ -2055,7 +2052,7 @@ class CephManager:
         with self.lock:
             self.log('contract_pool %s by %s min %s' % (
                      pool_name, str(by), str(min_pgs)))
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             assert isinstance(by, int)
             assert pool_name in self.pools
             if self.get_num_creating() > 0:
@@ -2095,7 +2092,7 @@ class CephManager:
         Set pgpnum property of pool_name pool.
         """
         with self.lock:
-            assert isinstance(pool_name, six.string_types)
+            assert isinstance(pool_name, str)
             assert pool_name in self.pools
             if not force and self.get_num_creating() > 0:
                 return False
index e5c2f48b278051122381dad4d2a68c5a9fc70e50..0be1735e8ee4e1f95452fc31d9c3bb7e92f5dbe1 100644 (file)
@@ -6,6 +6,8 @@ from teuthology.orchestra.run import CommandFailedError
 
 log = logging.getLogger(__name__)
 
+class TestTimeoutError(RuntimeError):
+    pass
 
 class CephTestCase(unittest.TestCase):
     """
@@ -172,7 +174,7 @@ class CephTestCase(unittest.TestCase):
                 raise RuntimeError("wait_until_equal: forbidden value {0} seen".format(val))
             else:
                 if elapsed >= timeout:
-                    raise RuntimeError("Timed out after {0} seconds waiting for {1} (currently {2})".format(
+                    raise TestTimeoutError("Timed out after {0} seconds waiting for {1} (currently {2})".format(
                         elapsed, expect_val, val
                     ))
                 else:
@@ -191,7 +193,7 @@ class CephTestCase(unittest.TestCase):
                 return
             else:
                 if elapsed >= timeout:
-                    raise RuntimeError("Timed out after {0}s".format(elapsed))
+                    raise TestTimeoutError("Timed out after {0}s".format(elapsed))
                 else:
                     log.debug("wait_until_true: waiting (timeout={0})...".format(timeout))
                 time.sleep(period)
index 42b6f3e9834e6804d78ada42db1c7fabc0669583..a9bc2cbfc8faf6d12853f0963fbb3c8c1f4fe992 100644 (file)
@@ -10,6 +10,7 @@ import os
 import json
 import re
 import uuid
+import yaml
 
 import six
 import toml
@@ -160,6 +161,16 @@ def ceph_log(ctx, config):
     cluster_name = config['cluster']
     fsid = ctx.ceph[cluster_name].fsid
 
+    # Add logs directory to job's info log file
+    with open(os.path.join(ctx.archive, 'info.yaml'), 'r+') as info_file:
+        info_yaml = yaml.safe_load(info_file)
+        info_file.seek(0)
+        if 'archive' not in info_yaml:
+            info_yaml['archive'] = {'log': '/var/log/ceph'}
+        else:
+            info_yaml['archive']['log'] = '/var/log/ceph'
+        yaml.safe_dump(info_yaml, info_file, default_flow_style=False)
+
     try:
         yield
 
@@ -225,6 +236,7 @@ def ceph_log(ctx, config):
                         'sudo',
                         'find',
                         '/var/log/ceph',   # all logs, not just for the cluster
+                        '/var/log/rbd-target-api', # ceph-iscsi
                         '-name',
                         '*.log',
                         '-print0',
@@ -267,6 +279,16 @@ def ceph_crash(ctx, config):
     cluster_name = config['cluster']
     fsid = ctx.ceph[cluster_name].fsid
 
+    # Add logs directory to job's info log file
+    with open(os.path.join(ctx.archive, 'info.yaml'), 'r+') as info_file:
+        info_yaml = yaml.safe_load(info_file)
+        info_file.seek(0)
+        if 'archive' not in info_yaml:
+            info_yaml['archive'] = {'crash': '/var/lib/ceph/%s/crash' % fsid}
+        else:
+            info_yaml['archive']['crash'] = '/var/lib/ceph/%s/crash' % fsid
+        yaml.safe_dump(info_yaml, info_file, default_flow_style=False)
+
     try:
         yield
 
@@ -309,7 +331,7 @@ def ceph_bootstrap(ctx, config, registry):
     first_mon = ctx.ceph[cluster_name].first_mon
     first_mon_role = ctx.ceph[cluster_name].first_mon_role
     mons = ctx.ceph[cluster_name].mons
-    
+
     ctx.cluster.run(args=[
         'sudo', 'mkdir', '-p', '/etc/ceph',
         ]);
@@ -471,7 +493,7 @@ def ceph_bootstrap(ctx, config, registry):
                 ctx.daemons.get_daemon(type_, id_, cluster).stop()
             except Exception:
                 log.exception('Failed to stop "{role}"'.format(role=role))
-                raise 
+                raise
 
         # clean up /etc/ceph
         ctx.cluster.run(args=[
@@ -528,11 +550,12 @@ def ceph_mons(ctx, config):
                             break
 
         # refresh our (final) ceph.conf file
+        bootstrap_remote = ctx.ceph[cluster_name].bootstrap_remote
         log.info('Generating final ceph.conf file...')
         r = _shell(
             ctx=ctx,
             cluster_name=cluster_name,
-            remote=remote,
+            remote=bootstrap_remote,
             args=[
                 'ceph', 'config', 'generate-minimal-conf',
             ],
@@ -767,6 +790,56 @@ def ceph_rgw(ctx, config):
 
     yield
 
+
+@contextlib.contextmanager
+def ceph_iscsi(ctx, config):
+    """
+    Deploy iSCSIs
+    """
+    cluster_name = config['cluster']
+    fsid = ctx.ceph[cluster_name].fsid
+
+    nodes = []
+    daemons = {}
+    for remote, roles in ctx.cluster.remotes.items():
+        for role in [r for r in roles
+                    if teuthology.is_type('iscsi', cluster_name)(r)]:
+            c_, _, id_ = teuthology.split_role(role)
+            log.info('Adding %s on %s' % (role, remote.shortname))
+            nodes.append(remote.shortname + '=' + id_)
+            daemons[role] = (remote, id_)
+    if nodes:
+        poolname = 'iscsi'
+        # ceph osd pool create iscsi 3 3 replicated
+        _shell(ctx, cluster_name, remote, [
+            'ceph', 'osd', 'pool', 'create',
+            poolname, '3', '3', 'replicated']
+        )
+
+        _shell(ctx, cluster_name, remote, [
+            'ceph', 'osd', 'pool', 'application', 'enable',
+            poolname, 'rbd']
+        )
+
+        # ceph orch apply iscsi iscsi user password
+        _shell(ctx, cluster_name, remote, [
+            'ceph', 'orch', 'apply', 'iscsi',
+            poolname, 'user', 'password',
+            '--placement', str(len(nodes)) + ';' + ';'.join(nodes)]
+        )
+    for role, i in daemons.items():
+        remote, id_ = i
+        ctx.daemons.register_daemon(
+            remote, 'iscsi', id_,
+            cluster=cluster_name,
+            fsid=fsid,
+            logger=log.getChild(role),
+            wait=False,
+            started=True,
+        )
+
+    yield
+
 @contextlib.contextmanager
 def ceph_clients(ctx, config):
     cluster_name = config['cluster']
@@ -1135,7 +1208,7 @@ def task(ctx, config):
     if cluster_name not in ctx.ceph:
         ctx.ceph[cluster_name] = argparse.Namespace()
         ctx.ceph[cluster_name].bootstrapped = False
+
     # image
     teuth_defaults = teuth_config.get('defaults', {})
     cephadm_defaults = teuth_defaults.get('cephadm', {})
@@ -1198,6 +1271,7 @@ def task(ctx, config):
             lambda: ceph_osds(ctx=ctx, config=config),
             lambda: ceph_mdss(ctx=ctx, config=config),
             lambda: ceph_rgw(ctx=ctx, config=config),
+            lambda: ceph_iscsi(ctx=ctx, config=config),
             lambda: ceph_monitoring('prometheus', ctx=ctx, config=config),
             lambda: ceph_monitoring('node-exporter', ctx=ctx, config=config),
             lambda: ceph_monitoring('alertmanager', ctx=ctx, config=config),
@@ -1255,9 +1329,9 @@ def registries_add_mirror_to_docker_io(conf, mirror):
 
 def add_mirror_to_cluster(ctx, mirror):
     log.info('Adding local image mirror %s' % mirror)
-    
+
     registries_conf = '/etc/containers/registries.conf'
-    
+
     for remote in ctx.cluster.remotes.keys():
         try:
             config = teuthology.get_file(
index f6a7521b6f63ed07df9e14ebebdfe3c93c30294f..ecd0124bd54873564578940a49e1890de5dca7c6 100644 (file)
@@ -50,3 +50,6 @@ class TestCephadmCLI(MgrTestCase):
         self._orch_cmd('daemon', 'start', 'osd.0')
         self.wait_for_health_clear(30)
         self._orch_cmd('daemon', 'restart', 'osd.0')
+
+    def test_device_ls_wide(self):
+        self._orch_cmd('device', 'ls', '--wide')
index 063a6508c61eba0e4c613b9e73cb78aebcb3bf44..42d78f8caef31542edd9332bbbcd881083b766b4 100644 (file)
@@ -63,6 +63,8 @@ class CephFSTestCase(CephTestCase):
     def setUp(self):
         super(CephFSTestCase, self).setUp()
 
+        self.config_set('mon', 'mon_allow_pool_delete', True)
+
         if len(self.mds_cluster.mds_ids) < self.MDSS_REQUIRED:
             self.skipTest("Only have {0} MDSs, require {1}".format(
                 len(self.mds_cluster.mds_ids), self.MDSS_REQUIRED
index 0a9066fb60dfd15e7b877082ec21ead54b26753a..bf337f84fc9cbef90d3618cb67692b699f14e028 100644 (file)
@@ -429,7 +429,7 @@ class Filesystem(MDSCluster):
     This object is for driving a CephFS filesystem.  The MDS daemons driven by
     MDSCluster may be shared with other Filesystems.
     """
-    def __init__(self, ctx, fscid=None, name=None, create=False,
+    def __init__(self, ctx, fs_config=None, fscid=None, name=None, create=False,
                  ec_profile=None):
         super(Filesystem, self).__init__(ctx)
 
@@ -440,6 +440,7 @@ class Filesystem(MDSCluster):
         self.metadata_overlay = False
         self.data_pool_name = None
         self.data_pools = None
+        self.fs_config = fs_config
 
         client_list = list(misc.all_roles_of_type(self._ctx.cluster, 'client'))
         self.client_id = client_list[0]
@@ -547,6 +548,9 @@ class Filesystem(MDSCluster):
     def set_max_mds(self, max_mds):
         self.set_var("max_mds", "%d" % max_mds)
 
+    def set_session_timeout(self, timeout):
+        self.set_var("session_timeout", "%d" % timeout)
+
     def set_allow_standby_replay(self, yes):
         self.set_var("allow_standby_replay", yes)
 
@@ -609,6 +613,16 @@ class Filesystem(MDSCluster):
             else:
                 raise
 
+        if self.fs_config is not None:
+            max_mds = self.fs_config.get('max_mds', 1)
+            if max_mds > 1:
+                self.set_max_mds(max_mds)
+
+            # If absent will use the default value (60 seconds)
+            session_timeout = self.fs_config.get('session_timeout', 60)
+            if session_timeout != 60:
+                self.set_session_timeout(session_timeout)
+
         self.getinfo(refresh = True)
 
         
index 57c59acabbb527cc8854ef92c58a7221d571ae03..53ec26a77844dc414a8f8855f8d95977ca47d74b 100644 (file)
@@ -54,7 +54,9 @@ class FuseMount(CephFSMount):
         log.info('Mounting ceph-fuse client.{id} at {remote} {mnt}...'.format(
             id=self.client_id, remote=self.client_remote, mnt=self.mountpoint))
 
-        self.client_remote.run(args=['mkdir', '-p', self.mountpoint],
+        # Use 0000 mode to prevent undesired modifications to the mountpoint on
+        # the local file system.
+        self.client_remote.run(args=['mkdir', '-m', '0000', '-p', self.mountpoint],
                                timeout=(15*60), cwd=self.test_dir)
 
         run_cmd = [
@@ -203,15 +205,20 @@ class FuseMount(CephFSMount):
             proc.wait()
         except CommandFailedError:
             error = six.ensure_str(proc.stderr.getvalue())
-            if ("endpoint is not connected" in error
-            or "Software caused connection abort" in error):
-                # This happens is fuse is killed without unmount
-                log.warning("Found stale moutn point at {0}".format(self.mountpoint))
-                return True
-            else:
-                # This happens if the mount directory doesn't exist
-                log.info('mount point does not exist: %s', self.mountpoint)
-                return False
+            stale = [
+                'Connection timed out',
+                'Endpoint is not connected',
+                'Software caused connection abort',
+            ]
+            for s in stale:
+                if s.lower() in error.lower():
+                    # This happens is fuse is killed without unmount
+                    log.warning("Found stale moutn point at {0}".format(self.mountpoint))
+                    return True
+
+            # This happens if the mount directory doesn't exist
+            log.info('mount point does not exist: %s', self.mountpoint)
+            return False
 
         fstype = six.ensure_str(proc.stdout.getvalue()).rstrip('\n')
         if fstype == 'fuseblk':
@@ -366,7 +373,6 @@ class FuseMount(CephFSMount):
                 cwd=self.test_dir,
                 stderr=stderr,
                 timeout=(60*5),
-                check_status=False,
             )
         except CommandFailedError:
             if b"No such file or directory" in stderr.getvalue():
@@ -408,16 +414,7 @@ class FuseMount(CephFSMount):
             except CommandFailedError:
                 pass
 
-        # Indiscriminate, unlike the touchier cleanup()
-        self.client_remote.run(
-            args=[
-                'rm',
-                '-rf',
-                self.mountpoint,
-            ],
-            cwd=self.test_dir,
-            timeout=(60*5)
-        )
+        return self.cleanup()
 
     def _asok_path(self):
         return "/var/run/ceph/ceph-client.{0}.*.asok".format(self.client_id)
index 48f065051745d6863610e87769fb132a9678c164..7a833a1182539c2e6da2720f65879d27e1a8605c 100644 (file)
@@ -484,13 +484,14 @@ class CephFSMount(object):
             n = {count}
             abs_path = "{abs_path}"
 
-            if not os.path.exists(os.path.dirname(abs_path)):
-                os.makedirs(os.path.dirname(abs_path))
+            if not os.path.exists(abs_path):
+                os.makedirs(abs_path)
 
             handles = []
             for i in range(0, n):
-                fname = "{{0}}_{{1}}".format(abs_path, i)
-                handles.append(open(fname, 'w'))
+                fname = "file_"+str(i)
+                path = os.path.join(abs_path, fname)
+                handles.append(open(path, 'w'))
 
             while True:
                 time.sleep(1)
index 7ff6ed536b9ab4c95290d48319cc0e2e2c3f9c8f..60198604b395b41d4ca2401a93a9352836e23ef8 100644 (file)
@@ -96,6 +96,7 @@ class TestAdminCommands(CephFSTestCase):
         That a new file system warns/fails with an EC default data pool.
         """
 
+        self.mount_a.umount_wait(require_clean=True)
         self.fs.delete_all_filesystems()
         n = "test_new_default_ec"
         self._setup_ec_pools(n)
@@ -114,6 +115,7 @@ class TestAdminCommands(CephFSTestCase):
         That a new file system succeeds with an EC default data pool with --force.
         """
 
+        self.mount_a.umount_wait(require_clean=True)
         self.fs.delete_all_filesystems()
         n = "test_new_default_ec_force"
         self._setup_ec_pools(n)
@@ -124,6 +126,7 @@ class TestAdminCommands(CephFSTestCase):
         That a new file system fails with an EC default data pool without overwrite.
         """
 
+        self.mount_a.umount_wait(require_clean=True)
         self.fs.delete_all_filesystems()
         n = "test_new_default_ec_no_overwrite"
         self._setup_ec_pools(n, overwrites=False)
@@ -151,6 +154,7 @@ class TestAdminCommands(CephFSTestCase):
         """
         That the application metadata set on the pools of a newly created filesystem are as expected.
         """
+        self.mount_a.umount_wait(require_clean=True)
         self.fs.delete_all_filesystems()
         fs_name = "test_fs_new_pool_application"
         keys = ['metadata', 'data']
index 8491c3d7d888207ae6e1d2f084605e6c66ea1af1..51c3048bd63a8ca64668a0fb47263312b78f3ed3 100644 (file)
@@ -7,6 +7,7 @@ exceed the limits of how many caps/inodes they should hold.
 import logging
 from textwrap import dedent
 from teuthology.orchestra.run import CommandFailedError
+from tasks.ceph_test_case import TestTimeoutError
 from tasks.cephfs.cephfs_test_case import CephFSTestCase, needs_trimming
 from tasks.cephfs.fuse_mount import FuseMount
 import os
@@ -42,19 +43,18 @@ class TestClientLimits(CephFSTestCase):
         # ask the client to trim the caps.
         cache_memory_limit = "1K"
 
-        self.set_conf('mds', 'mds_cache_memory_limit', cache_memory_limit)
-        self.set_conf('mds', 'mds_recall_max_caps', open_files/2)
-        self.set_conf('mds', 'mds_recall_warning_threshold', open_files)
-        self.fs.mds_fail_restart()
-        self.fs.wait_for_daemons()
+        self.config_set('mds', 'mds_cache_memory_limit', cache_memory_limit)
+        self.config_set('mds', 'mds_recall_max_caps', int(open_files/2))
+        self.config_set('mds', 'mds_recall_warning_threshold', open_files)
 
-        mds_min_caps_per_client = int(self.fs.get_config("mds_min_caps_per_client"))
-        mds_max_caps_per_client = int(self.fs.get_config("mds_max_caps_per_client"))
-        mds_recall_warning_decay_rate = float(self.fs.get_config("mds_recall_warning_decay_rate"))
-        self.assertTrue(open_files >= mds_min_caps_per_client)
+        mds_min_caps_per_client = int(self.config_get('mds', "mds_min_caps_per_client"))
+        self.config_set('mds', 'mds_min_caps_working_set', mds_min_caps_per_client)
+        mds_max_caps_per_client = int(self.config_get('mds', "mds_max_caps_per_client"))
+        mds_recall_warning_decay_rate = float(self.config_get('mds', "mds_recall_warning_decay_rate"))
+        self.assertGreaterEqual(open_files, mds_min_caps_per_client)
 
         mount_a_client_id = self.mount_a.get_global_id()
-        path = "subdir/mount_a" if use_subdir else "mount_a"
+        path = "subdir" if use_subdir else "."
         open_proc = self.mount_a.open_n_background(path, open_files)
 
         # Client should now hold:
@@ -109,6 +109,53 @@ class TestClientLimits(CephFSTestCase):
     def test_client_pin_mincaps(self):
         self._test_client_pin(True, 200)
 
+    def test_client_min_caps_working_set(self):
+        """
+        When a client has inodes pinned in its cache (open files), that the MDS
+        will not warn about the client not responding to cache pressure when
+        the number of caps is below mds_min_caps_working_set.
+        """
+
+        # Set MDS cache memory limit to a low value that will make the MDS to
+        # ask the client to trim the caps.
+        cache_memory_limit = "1K"
+        open_files = 400
+
+        self.config_set('mds', 'mds_cache_memory_limit', cache_memory_limit)
+        self.config_set('mds', 'mds_recall_max_caps', int(open_files/2))
+        self.config_set('mds', 'mds_recall_warning_threshold', open_files)
+        self.config_set('mds', 'mds_min_caps_working_set', open_files*2)
+
+        mds_min_caps_per_client = int(self.config_get('mds', "mds_min_caps_per_client"))
+        mds_recall_warning_decay_rate = float(self.config_get('mds', "mds_recall_warning_decay_rate"))
+        self.assertGreaterEqual(open_files, mds_min_caps_per_client)
+
+        mount_a_client_id = self.mount_a.get_global_id()
+        self.mount_a.open_n_background("subdir", open_files)
+
+        # Client should now hold:
+        # `open_files` caps for the open files
+        # 1 cap for root
+        # 1 cap for subdir
+        self.wait_until_equal(lambda: self.get_session(mount_a_client_id)['num_caps'],
+                              open_files + 2,
+                              timeout=600,
+                              reject_fn=lambda x: x > open_files + 2)
+
+        # We can also test that the MDS health warning for oversized
+        # cache is functioning as intended.
+        self.wait_for_health("MDS_CACHE_OVERSIZED", mds_recall_warning_decay_rate*2)
+
+        try:
+            # MDS should not be happy about that but it's not sending
+            # MDS_CLIENT_RECALL warnings because the client's caps are below
+            # mds_min_caps_working_set.
+            self.wait_for_health("MDS_CLIENT_RECALL", mds_recall_warning_decay_rate*2)
+        except TestTimeoutError:
+            pass
+        else:
+            raise RuntimeError("expected no client recall warning")
+
     def test_client_release_bug(self):
         """
         When a client has a bug (which we will simulate) preventing it from releasing caps,
@@ -239,11 +286,9 @@ class TestClientLimits(CephFSTestCase):
         That the MDS will not let a client sit above mds_max_caps_per_client caps.
         """
 
-        mds_min_caps_per_client = int(self.fs.get_config("mds_min_caps_per_client"))
+        mds_min_caps_per_client = int(self.config_get('mds', "mds_min_caps_per_client"))
         mds_max_caps_per_client = 2*mds_min_caps_per_client
-        self.set_conf('mds', 'mds_max_caps_per_client', mds_max_caps_per_client)
-        self.fs.mds_fail_restart()
-        self.fs.wait_for_daemons()
+        self.config_set('mds', 'mds_max_caps_per_client', mds_max_caps_per_client)
 
         self.mount_a.create_n_files("foo/", 3*mds_max_caps_per_client, sync=True)
 
index c7328455890963e1c0d2fff6fcff31fc5af99d3a..9fad2ce14603e957624a7ae4f7e4e77c86abba98 100644 (file)
@@ -12,6 +12,22 @@ log = logging.getLogger(__name__)
 class TestMisc(CephFSTestCase):
     CLIENTS_REQUIRED = 2
 
+    def test_statfs_on_deleted_fs(self):
+        """
+        That statfs does not cause monitors to SIGSEGV after fs deletion.
+        """
+
+        self.mount_b.umount_wait()
+        self.mount_a.run_shell_payload("stat -f .")
+        self.fs.delete_all_filesystems()
+        # This will hang either way, run in background.
+        p = self.mount_a.run_shell_payload("stat -f .", wait=False, timeout=60, check_status=False)
+        time.sleep(30)
+        self.assertFalse(p.finished)
+        # the process is stuck in uninterruptible sleep, just kill the mount
+        self.mount_a.umount_wait(force=True)
+        p.wait()
+
     def test_getattr_caps(self):
         """
         Check if MDS recognizes the 'mask' parameter of open request.
index 12d13abb116d24accb5c98933e1479ec505c8b30..a90116c6be17ce79eef5b7bab4b915d8153d2e85 100644 (file)
@@ -12,9 +12,7 @@ log = logging.getLogger(__name__)
 
 # TODO Add test for cluster update when ganesha can be deployed on multiple ports.
 class TestNFS(MgrTestCase):
-    def _cmd(self, *args, stdin=''):
-        if stdin:
-            return self.mgr_cluster.mon_manager.raw_cluster_cmd(*args, stdin=stdin)
+    def _cmd(self, *args):
         return self.mgr_cluster.mon_manager.raw_cluster_cmd(*args)
 
     def _nfs_cmd(self, *args):
@@ -61,10 +59,6 @@ class TestNFS(MgrTestCase):
          "clients": []
         }
 
-    def _check_port_status(self):
-        log.info("NETSTAT")
-        self._sys_cmd(['netstat', '-tnlp'])
-
     def _check_nfs_server_status(self):
         res = self._sys_cmd(['systemctl', 'status', 'nfs-server'])
         if isinstance(res, bytes) and b'Active: active' in res:
@@ -74,8 +68,23 @@ class TestNFS(MgrTestCase):
         log.info("Disabling NFS")
         self._sys_cmd(['systemctl', 'disable', 'nfs-server', '--now'])
 
-    def _check_nfs_status(self):
-        return self._orch_cmd('ps', '--daemon_type=nfs')
+    def _fetch_nfs_status(self):
+        return self._orch_cmd('ps', f'--service_name={self.expected_name}')
+
+    def _check_nfs_cluster_status(self, expected_status, fail_msg):
+        '''
+        Tests if nfs cluster created or deleted successfully
+        :param expected_status: Status to be verified
+        :param fail_msg: Message to be printed if test failed
+        '''
+        # Wait for few seconds as ganesha daemon takes few seconds to be deleted/created
+        wait_time = 10
+        while wait_time <= 60:
+            time.sleep(wait_time)
+            if expected_status in self._fetch_nfs_status():
+                return
+            wait_time += 10
+        self.fail(fail_msg)
 
     def _check_auth_ls(self, export_id=1, check_in=False):
         '''
@@ -109,29 +118,16 @@ class TestNFS(MgrTestCase):
         # Disable any running nfs ganesha daemon
         self._check_nfs_server_status()
         self._nfs_cmd('cluster', 'create', self.export_type, self.cluster_id)
-        # Wait for few seconds as ganesha daemon take few seconds to be deployed
-        time.sleep(8)
-        orch_output = self._check_nfs_status()
-        expected_status = 'running'
         # Check for expected status and daemon name (nfs.ganesha-<cluster_id>)
-        if self.expected_name not in orch_output or expected_status not in orch_output:
-            self.fail("NFS Ganesha cluster could not be deployed")
+        self._check_nfs_cluster_status('running', 'NFS Ganesha cluster deployment failed')
 
     def _test_delete_cluster(self):
         '''
         Test deletion of a single nfs cluster.
         '''
         self._nfs_cmd('cluster', 'delete', self.cluster_id)
-        expected_output = "No daemons reported\n"
-        # Wait for few seconds as ganesha daemon takes few seconds to be deleted
-        wait_time = 10
-        while wait_time <= 60:
-            time.sleep(wait_time)
-            orch_output = self._check_nfs_status()
-            if expected_output == orch_output:
-                return
-            wait_time += 10
-        self.fail("NFS Ganesha cluster could not be deleted")
+        self._check_nfs_cluster_status('No daemons reported',
+                                       'NFS Ganesha cluster could not be deleted')
 
     def _test_list_cluster(self, empty=False):
         '''
@@ -235,6 +231,37 @@ class TestNFS(MgrTestCase):
         if b'export-' in rados_obj_ls or (conf_obj and b'conf-nfs' in rados_obj_ls):
             self.fail("Delete export failed")
 
+    def _get_port_ip_info(self):
+        '''
+        Return port and ip for a cluster
+        '''
+        #{'test': [{'hostname': 'smithi068', 'ip': ['172.21.15.68'], 'port': 2049}]}
+        info_output = json.loads(self._nfs_cmd('cluster', 'info', self.cluster_id))['test'][0]
+        return info_output["port"], info_output["ip"][0]
+
+    def _test_mnt(self, pseudo_path, port, ip, check=True):
+        '''
+        Test mounting of created exports
+        :param pseudo_path: It is the pseudo root name
+        :param port: Port of deployed nfs cluster
+        :param ip: IP of deployed nfs cluster
+        :param check: It denotes if i/o testing needs to be done
+        '''
+        try:
+            self.ctx.cluster.run(args=['sudo', 'mount', '-t', 'nfs', '-o', f'port={port}',
+                                       f'{ip}:{pseudo_path}', '/mnt'])
+        except CommandFailedError as e:
+            # Check if mount failed only when non existing pseudo path is passed
+            if not check and e.exitstatus == 32:
+                return
+            raise
+
+        if check:
+            self.ctx.cluster.run(args=['sudo', 'touch', '/mnt/test'])
+            out_mnt = self._sys_cmd(['sudo', 'ls', '/mnt'])
+            self.assertEqual(out_mnt,  b'test\n')
+            self.ctx.cluster.run(args=['sudo', 'umount', '/mnt'])
+
     def test_create_and_delete_cluster(self):
         '''
         Test successful creation and deletion of the nfs cluster.
@@ -285,9 +312,12 @@ class TestNFS(MgrTestCase):
         '''
         self._create_default_export()
         self._test_get_export()
+        port, ip = self._get_port_ip_info()
+        self._test_mnt(self.pseudo_path, port, ip)
         self._delete_export()
         # Check if rados export object is deleted
         self._check_export_obj_deleted()
+        self._test_mnt(self.pseudo_path, port, ip, False)
         self._test_delete_cluster()
 
     def test_create_delete_export_idempotency(self):
@@ -333,6 +363,8 @@ class TestNFS(MgrTestCase):
         self._orch_cmd("set", "backend", "cephadm")
         # Checks if created export is listed
         self._test_list_export()
+        port, ip = self._get_port_ip_info()
+        self._test_mnt(self.pseudo_path, port, ip)
         self._delete_export()
         self._test_delete_cluster()
 
@@ -384,6 +416,7 @@ class TestNFS(MgrTestCase):
         check_pseudo_path('invalidpath')
         check_pseudo_path('/')
         check_pseudo_path('//')
+        self._cmd('fs', 'volume', 'rm', self.fs_name, '--yes-i-really-mean-it')
         self._test_delete_cluster()
 
     def test_cluster_info(self):
@@ -406,11 +439,11 @@ class TestNFS(MgrTestCase):
         config on reset.
         '''
         self._test_create_cluster()
-        time.sleep(30)
 
         pool = 'nfs-ganesha'
         user_id = 'test'
         fs_name = 'user_test_fs'
+        pseudo_path = '/ceph'
         self._cmd('fs', 'volume', 'create', fs_name)
         time.sleep(20)
         key = self._cmd('auth', 'get-or-create-key', f'client.{user_id}', 'mon',
@@ -425,7 +458,7 @@ class TestNFS(MgrTestCase):
                Export_Id = 100;
                Transports = TCP;
                Path = /;
-               Pseudo = /ceph/;
+               Pseudo = {pseudo_path};
                Protocols = 4;
                Access_Type = RW;
                Attr_Expiration_Time = 0;
@@ -437,35 +470,22 @@ class TestNFS(MgrTestCase):
                       Secret_Access_Key = '{key}';
                }}
         }}"""
-        #{'test': [{'hostname': 'smithi068', 'ip': ['172.21.15.68'], 'port': 2049}]}
-        info_output = json.loads(self._nfs_cmd('cluster', 'info', self.cluster_id))['test'][0]
-        mnt_cmd = ['sudo', 'mount', '-t', 'nfs', '-o', f'port={info_output["port"]}', f'{info_output["ip"][0]}:/ceph', '/mnt']
-        MNT_FAILED = 32
+        port, ip = self._get_port_ip_info()
         self.ctx.cluster.run(args=['sudo', 'ceph', 'nfs', 'cluster', 'config',
             'set', self.cluster_id, '-i', '-'], stdin=config)
         time.sleep(30)
-        log.info(self._sys_cmd(['rados', '-p', 'nfs-ganesha', '-N', self.cluster_id, 'ls']))
         res = self._sys_cmd(['rados', '-p', pool, '-N', self.cluster_id, 'get',
                              f'userconf-nfs.ganesha-{user_id}', '-'])
         self.assertEqual(config, res.decode('utf-8'))
-        self.ctx.cluster.run(args=mnt_cmd)
-        self.ctx.cluster.run(args=['sudo', 'touch', '/mnt/test'])
-        out_mnt = self._sys_cmd(['sudo', 'ls', '/mnt'])
-        self.assertEqual(out_mnt,  b'test\n')
-        self.ctx.cluster.run(args=['sudo', 'umount', '/mnt'])
+        self._test_mnt(pseudo_path, port, ip)
         self._nfs_cmd('cluster', 'config', 'reset', self.cluster_id)
         rados_obj_ls = self._sys_cmd(['rados', '-p', 'nfs-ganesha', '-N', self.cluster_id, 'ls'])
         if b'conf-nfs' not in rados_obj_ls and b'userconf-nfs' in rados_obj_ls:
             self.fail("User config not deleted")
         time.sleep(30)
-        try:
-            self.ctx.cluster.run(args=mnt_cmd)
-        except CommandFailedError as e:
-            if e.exitstatus != MNT_FAILED:
-                raise
+        self._test_mnt(pseudo_path, port, ip, False)
         self._cmd('fs', 'volume', 'rm', fs_name, '--yes-i-really-mean-it')
         self._test_delete_cluster()
-        time.sleep(30)
 
     def test_cluster_set_user_config_with_non_existing_clusterid(self):
         '''
index b6ca0b89802abe903b822593065e3f19522c6d98..d9c2b5a7c496145f8b02cb7a18a8d63654a045bf 100644 (file)
@@ -6,6 +6,7 @@ import logging
 import errno
 import time
 from teuthology.exceptions import CommandFailedError
+from teuthology.contextutil import safe_while
 import os
 from tasks.cephfs.cephfs_test_case import CephFSTestCase
 
@@ -30,22 +31,46 @@ class TestScrubControls(CephFSTestCase):
         self.assertEqual(res['return_code'], expected)
     def _get_scrub_status(self):
         return self.fs.rank_tell(["scrub", "status"])
-    def _check_task_status(self, expected_status):
-        task_status = self.fs.get_task_status("scrub status")
-        active = self.fs.get_active_names()
-        log.debug("current active={0}".format(active))
-        self.assertTrue(task_status[active[0]].startswith(expected_status))
+    def _check_task_status(self, expected_status, timo=120):
+        """ check scrub status for current active mds in ceph status """
+        with safe_while(sleep=1, tries=120, action='wait for task status') as proceed:
+            while proceed():
+                active = self.fs.get_active_names()
+                log.debug("current active={0}".format(active))
+                task_status = self.fs.get_task_status("scrub status")
+                try:
+                    if task_status[active[0]].startswith(expected_status):
+                        return True
+                except KeyError:
+                    pass
+
+    def _check_task_status_na(self, timo=120):
+        """ check absence of scrub status in ceph status """
+        with safe_while(sleep=1, tries=120, action='wait for task status') as proceed:
+            while proceed():
+                active = self.fs.get_active_names()
+                log.debug("current active={0}".format(active))
+                task_status = self.fs.get_task_status("scrub status")
+                if not active[0] in task_status:
+                    return True
+
+    def create_scrub_data(self, test_dir):
+        for i in range(32):
+            dirname = "dir.{0}".format(i)
+            dirpath = os.path.join(test_dir, dirname)
+            self.mount_a.run_shell_payload(f"""
+set -e
+mkdir -p {dirpath}
+for ((i = 0; i < 32; i++)); do
+    dd if=/dev/urandom of={dirpath}/filename.$i bs=1M conv=fdatasync count=1
+done
+""")
 
     def test_scrub_abort(self):
         test_dir = "scrub_control_test_path"
         abs_test_path = "/{0}".format(test_dir)
 
-        log.info("mountpoint: {0}".format(self.mount_a.mountpoint))
-        client_path = os.path.join(self.mount_a.mountpoint, test_dir)
-        log.info("client_path: {0}".format(client_path))
-
-        log.info("Cloning repo into place")
-        TestScrubChecks.clone_repo(self.mount_a, client_path)
+        self.create_scrub_data(test_dir)
 
         out_json = self.fs.rank_tell(["scrub", "start", abs_test_path, "recursive"])
         self.assertNotEqual(out_json, None)
@@ -56,8 +81,8 @@ class TestScrubControls(CephFSTestCase):
         self.assertTrue("no active" in out_json['status'])
 
         # sleep enough to fetch updated task status
-        time.sleep(10)
-        self._check_task_status("idle")
+        checked = self._check_task_status_na()
+        self.assertTrue(checked)
 
     def test_scrub_pause_and_resume(self):
         test_dir = "scrub_control_test_path"
@@ -67,8 +92,7 @@ class TestScrubControls(CephFSTestCase):
         client_path = os.path.join(self.mount_a.mountpoint, test_dir)
         log.info("client_path: {0}".format(client_path))
 
-        log.info("Cloning repo into place")
-        _ = TestScrubChecks.clone_repo(self.mount_a, client_path)
+        self.create_scrub_data(test_dir)
 
         out_json = self.fs.rank_tell(["scrub", "start", abs_test_path, "recursive"])
         self.assertNotEqual(out_json, None)
@@ -78,25 +102,22 @@ class TestScrubControls(CephFSTestCase):
         out_json = self._get_scrub_status()
         self.assertTrue("PAUSED" in out_json['status'])
 
-        # sleep enough to fetch updated task status
-        time.sleep(10)
-        self._check_task_status("paused")
+        checked = self._check_task_status("paused")
+        self.assertTrue(checked)
 
         # resume and verify
         self._resume_scrub(0)
         out_json = self._get_scrub_status()
         self.assertFalse("PAUSED" in out_json['status'])
 
+        checked = self._check_task_status_na()
+        self.assertTrue(checked)
+
     def test_scrub_pause_and_resume_with_abort(self):
         test_dir = "scrub_control_test_path"
         abs_test_path = "/{0}".format(test_dir)
 
-        log.info("mountpoint: {0}".format(self.mount_a.mountpoint))
-        client_path = os.path.join(self.mount_a.mountpoint, test_dir)
-        log.info("client_path: {0}".format(client_path))
-
-        log.info("Cloning repo into place")
-        _ = TestScrubChecks.clone_repo(self.mount_a, client_path)
+        self.create_scrub_data(test_dir)
 
         out_json = self.fs.rank_tell(["scrub", "start", abs_test_path, "recursive"])
         self.assertNotEqual(out_json, None)
@@ -106,9 +127,8 @@ class TestScrubControls(CephFSTestCase):
         out_json = self._get_scrub_status()
         self.assertTrue("PAUSED" in out_json['status'])
 
-        # sleep enough to fetch updated task status
-        time.sleep(10)
-        self._check_task_status("paused")
+        checked = self._check_task_status("paused")
+        self.assertTrue(checked)
 
         # abort and verify
         self._abort_scrub(0)
@@ -116,26 +136,37 @@ class TestScrubControls(CephFSTestCase):
         self.assertTrue("PAUSED" in out_json['status'])
         self.assertTrue("0 inodes" in out_json['status'])
 
-        # sleep enough to fetch updated task status
-        time.sleep(10)
-        self._check_task_status("paused")
+        # scrub status should still be paused...
+        checked = self._check_task_status("paused")
+        self.assertTrue(checked)
 
         # resume and verify
         self._resume_scrub(0)
         out_json = self._get_scrub_status()
         self.assertTrue("no active" in out_json['status'])
 
-        # sleep enough to fetch updated task status
-        time.sleep(10)
-        self._check_task_status("idle")
+        checked = self._check_task_status_na()
+        self.assertTrue(checked)
 
     def test_scrub_task_status_on_mds_failover(self):
-        # sleep enough to fetch updated task status
-        time.sleep(10)
-
         (original_active, ) = self.fs.get_active_names()
         original_standbys = self.mds_cluster.get_standby_daemons()
-        self._check_task_status("idle")
+
+        test_dir = "scrub_control_test_path"
+        abs_test_path = "/{0}".format(test_dir)
+
+        self.create_scrub_data(test_dir)
+
+        out_json = self.fs.rank_tell(["scrub", "start", abs_test_path, "recursive"])
+        self.assertNotEqual(out_json, None)
+
+        # pause and verify
+        self._pause_scrub(0)
+        out_json = self._get_scrub_status()
+        self.assertTrue("PAUSED" in out_json['status'])
+
+        checked = self._check_task_status("paused")
+        self.assertTrue(checked)
 
         # Kill the rank 0
         self.fs.mds_stop(original_active)
@@ -150,12 +181,7 @@ class TestScrubControls(CephFSTestCase):
             original_standbys))
         self.wait_until_true(promoted, timeout=grace*2)
 
-        mgr_beacon_grace = float(self.fs.get_config("mgr_service_beacon_grace", service_type="mon"))
-
-        def status_check():
-            task_status = self.fs.get_task_status("scrub status")
-            return original_active not in task_status
-        self.wait_until_true(status_check, timeout=mgr_beacon_grace*2)
+        self._check_task_status_na()
 
 class TestScrubChecks(CephFSTestCase):
     """
index e02ba0ee76eb52f8025bba0237dfa412c463a568..08dd2e2bb206c67e4897379a534e8b4869e15f44 100644 (file)
@@ -65,7 +65,7 @@ vc.disconnect()
     def _configure_guest_auth(self, volumeclient_mount, guest_mount,
                               guest_entity, mount_path,
                               namespace_prefix=None, readonly=False,
-                              tenant_id=None):
+                              tenant_id=None, allow_existing_id=False):
         """
         Set up auth credentials for the guest client to mount a volume.
 
@@ -90,14 +90,16 @@ vc.disconnect()
         key = self._volume_client_python(volumeclient_mount, dedent("""
             vp = VolumePath("{group_id}", "{volume_id}")
             auth_result = vc.authorize(vp, "{guest_entity}", readonly={readonly},
-                                       tenant_id="{tenant_id}")
+                                       tenant_id="{tenant_id}",
+                                       allow_existing_id="{allow_existing_id}")
             print(auth_result['auth_key'])
         """.format(
             group_id=group_id,
             volume_id=volume_id,
             guest_entity=guest_entity,
             readonly=readonly,
-            tenant_id=tenant_id)), volume_prefix, namespace_prefix
+            tenant_id=tenant_id,
+            allow_existing_id=allow_existing_id)), volume_prefix, namespace_prefix
         )
 
         # CephFSVolumeClient's authorize() does not return the secret
@@ -838,6 +840,209 @@ vc.disconnect()
         )))
         self.assertNotIn(vol_metadata_filename, self.mounts[0].ls("volumes"))
 
+    def test_authorize_auth_id_not_created_by_ceph_volume_client(self):
+        """
+        If the auth_id already exists and is not created by
+        ceph_volume_client, it's not allowed to authorize
+        the auth-id by default.
+        """
+        volumeclient_mount = self.mounts[1]
+        volumeclient_mount.umount_wait()
+
+        # Configure volumeclient_mount as the handle for driving volumeclient.
+        self._configure_vc_auth(volumeclient_mount, "manila")
+
+        group_id = "groupid"
+        volume_id = "volumeid"
+
+        # Create auth_id
+        out = self.fs.mon_manager.raw_cluster_cmd(
+            "auth", "get-or-create", "client.guest1",
+            "mds", "allow *",
+            "osd", "allow rw",
+            "mon", "allow *"
+        )
+
+        auth_id = "guest1"
+        guestclient_1 = {
+            "auth_id": auth_id,
+            "tenant_id": "tenant1",
+        }
+
+        # Create a volume.
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.create_volume(vp, 1024*1024*10)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
+        # Cannot authorize 'guestclient_1' to access the volume.
+        # It uses auth ID 'guest1', which already exists and not
+        # created by ceph_volume_client
+        with self.assertRaises(CommandFailedError):
+            self._volume_client_python(volumeclient_mount, dedent("""
+                vp = VolumePath("{group_id}", "{volume_id}")
+                vc.authorize(vp, "{auth_id}", tenant_id="{tenant_id}")
+            """.format(
+                group_id=group_id,
+                volume_id=volume_id,
+                auth_id=guestclient_1["auth_id"],
+                tenant_id=guestclient_1["tenant_id"]
+            )))
+
+        # Delete volume
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.delete_volume(vp)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
+    def test_authorize_allow_existing_id_option(self):
+        """
+        If the auth_id already exists and is not created by
+        ceph_volume_client, it's not allowed to authorize
+        the auth-id by default but is allowed with option
+        allow_existing_id.
+        """
+        volumeclient_mount = self.mounts[1]
+        volumeclient_mount.umount_wait()
+
+        # Configure volumeclient_mount as the handle for driving volumeclient.
+        self._configure_vc_auth(volumeclient_mount, "manila")
+
+        group_id = "groupid"
+        volume_id = "volumeid"
+
+        # Create auth_id
+        out = self.fs.mon_manager.raw_cluster_cmd(
+            "auth", "get-or-create", "client.guest1",
+            "mds", "allow *",
+            "osd", "allow rw",
+            "mon", "allow *"
+        )
+
+        auth_id = "guest1"
+        guestclient_1 = {
+            "auth_id": auth_id,
+            "tenant_id": "tenant1",
+        }
+
+        # Create a volume.
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.create_volume(vp, 1024*1024*10)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
+        # Cannot authorize 'guestclient_1' to access the volume
+        # by default, which already exists and not created by
+        # ceph_volume_client but is allowed with option 'allow_existing_id'.
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.authorize(vp, "{auth_id}", tenant_id="{tenant_id}",
+                         allow_existing_id="{allow_existing_id}")
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+            auth_id=guestclient_1["auth_id"],
+            tenant_id=guestclient_1["tenant_id"],
+            allow_existing_id=True
+        )))
+
+        # Delete volume
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.delete_volume(vp)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
+    def test_deauthorize_auth_id_after_out_of_band_update(self):
+        """
+        If the auth_id authorized by ceph_volume_client is updated
+        out of band, the auth_id should not be deleted after a
+        deauthorize. It should only remove caps associated it.
+        """
+        volumeclient_mount = self.mounts[1]
+        volumeclient_mount.umount_wait()
+
+        # Configure volumeclient_mount as the handle for driving volumeclient.
+        self._configure_vc_auth(volumeclient_mount, "manila")
+
+        group_id = "groupid"
+        volume_id = "volumeid"
+
+
+        auth_id = "guest1"
+        guestclient_1 = {
+            "auth_id": auth_id,
+            "tenant_id": "tenant1",
+        }
+
+        # Create a volume.
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.create_volume(vp, 1024*1024*10)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
+        # Authorize 'guestclient_1' to access the volume.
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.authorize(vp, "{auth_id}", tenant_id="{tenant_id}")
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+            auth_id=guestclient_1["auth_id"],
+            tenant_id=guestclient_1["tenant_id"]
+        )))
+
+        # Update caps for guestclient_1 out of band
+        out = self.fs.mon_manager.raw_cluster_cmd(
+            "auth", "caps", "client.guest1",
+            "mds", "allow rw path=/volumes/groupid, allow rw path=/volumes/groupid/volumeid",
+            "osd", "allow rw pool=cephfs_data namespace=fsvolumens_volumeid",
+            "mon", "allow r",
+            "mgr", "allow *"
+        )
+
+        # Deauthorize guestclient_1
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.deauthorize(vp, "{guest_entity}")
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+            guest_entity=guestclient_1["auth_id"]
+        )))
+
+        # Validate the caps of guestclient_1 after deauthorize. It should not have deleted
+        # guestclient_1. The mgr and mds caps should be present which was updated out of band.
+        out = json.loads(self.fs.mon_manager.raw_cluster_cmd("auth", "get", "client.guest1", "--format=json-pretty"))
+
+        self.assertEqual("client.guest1", out[0]["entity"])
+        self.assertEqual("allow rw path=/volumes/groupid", out[0]["caps"]["mds"])
+        self.assertEqual("allow *", out[0]["caps"]["mgr"])
+        self.assertNotIn("osd", out[0]["caps"])
+
+        # Delete volume
+        self._volume_client_python(volumeclient_mount, dedent("""
+            vp = VolumePath("{group_id}", "{volume_id}")
+            vc.delete_volume(vp)
+        """.format(
+            group_id=group_id,
+            volume_id=volume_id,
+        )))
+
     def test_recover_metadata(self):
         """
         That volume client can recover from partial auth updates using
@@ -1058,7 +1263,8 @@ vc.disconnect()
         guest_mount.umount_wait()
 
         # Set auth caps for the auth ID using the volumeclient
-        self._configure_guest_auth(vc_mount, guest_mount, guest_id, mount_path)
+        self._configure_guest_auth(vc_mount, guest_mount, guest_id, mount_path,
+                                   allow_existing_id=True)
 
         # Mount the volume in the guest using the auth ID to assert that the
         # auth caps are valid
index 88fbe04cd278fe69d71a31d41aa829d44e1a77db..7984cea9205c1c83cae12cf8ee57c63d72a10a49 100644 (file)
@@ -1728,6 +1728,25 @@ class TestVolumes(CephFSTestCase):
         # verify trash dir is clean
         self._wait_for_trash_empty()
 
+    def test_subvolume_snapshot_reconf_max_concurrent_clones(self):
+        """
+        Validate 'max_concurrent_clones' config option
+        """
+
+        # get the default number of cloner threads
+        default_max_concurrent_clones = int(self.config_get('mgr', 'mgr/volumes/max_concurrent_clones'))
+        self.assertEqual(default_max_concurrent_clones, 4)
+
+        # Increase number of cloner threads
+        self.config_set('mgr', 'mgr/volumes/max_concurrent_clones', 6)
+        max_concurrent_clones = int(self.config_get('mgr', 'mgr/volumes/max_concurrent_clones'))
+        self.assertEqual(max_concurrent_clones, 6)
+
+        # Decrease number of cloner threads
+        self.config_set('mgr', 'mgr/volumes/max_concurrent_clones', 2)
+        max_concurrent_clones = int(self.config_get('mgr', 'mgr/volumes/max_concurrent_clones'))
+        self.assertEqual(max_concurrent_clones, 2)
+
     def test_subvolume_snapshot_clone_pool_layout(self):
         subvolume = self._generate_random_subvolume_name()
         snapshot = self._generate_random_snapshot_name()
diff --git a/ceph/qa/tasks/immutable_object_cache.py b/ceph/qa/tasks/immutable_object_cache.py
new file mode 100644 (file)
index 0000000..0635c97
--- /dev/null
@@ -0,0 +1,66 @@
+"""
+immutable object cache task
+"""
+import contextlib
+import logging
+
+from teuthology import misc as teuthology
+from teuthology import contextutil
+from teuthology.orchestra import run
+
+log = logging.getLogger(__name__)
+
+@contextlib.contextmanager
+def immutable_object_cache(ctx, config):
+    """
+    setup and cleanup immutable object cache
+    """
+    log.info("start immutable object cache daemon")
+    for client, client_config in config.items():
+        (remote,) = ctx.cluster.only(client).remotes.keys()
+        # make sure that there is one immutable object cache daemon on the same node.
+        remote.run(
+            args=[
+                'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
+                ]
+            )
+        remote.run(
+            args=[
+                'ceph-immutable-object-cache', '-b',
+                ]
+            )
+    try:
+        yield
+    finally:
+        log.info("cleanup immutable object cache")
+        for client, client_config in config.items():
+            client_config = client_config if client_config is not None else dict()
+            (remote,) = ctx.cluster.only(client).remotes.keys()
+            remote.run(
+                args=[
+                    'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
+                    ]
+                )
+            cache_path = client_config.get('immutable object cache path', '/tmp/ceph-immutable-object-cache')
+            remote.run(
+                args=[
+                    'sudo', 'rm', '-rf', cache_path, run.Raw('||'), 'true',
+                    ]
+                )
+
+@contextlib.contextmanager
+def task(ctx, config):
+    """
+    This is task for start immutable_object_cache.
+    """
+    assert isinstance(config, dict), \
+           "task immutable_object_cache only supports a dictionary for configuration"
+
+    managers = []
+    config = teuthology.replace_all_with_clients(ctx.cluster, config)
+    managers.append(
+        lambda: immutable_object_cache(ctx=ctx, config=config)
+        )
+
+    with contextutil.nested(*managers):
+        yield
diff --git a/ceph/qa/tasks/immutable_object_cache_thrash.py b/ceph/qa/tasks/immutable_object_cache_thrash.py
new file mode 100644 (file)
index 0000000..0bf3ad3
--- /dev/null
@@ -0,0 +1,79 @@
+"""
+immutable object cache thrash task
+"""
+import contextlib
+import logging
+
+from teuthology import misc as teuthology
+from teuthology import contextutil
+from teuthology.orchestra import run
+
+DEFAULT_KILL_DAEMON_TIME = 2
+DEFAULT_DEAD_TIME = 30
+DEFAULT_LIVE_TIME = 120
+
+log = logging.getLogger(__name__)
+
+@contextlib.contextmanager
+def thrashes_immutable_object_cache_daemon(ctx, config):
+    """
+    thrashes immutable object cache daemon.
+    It can test reconnection feature of RO cache when RO daemon crash
+    TODO : replace sleep with better method.
+    """
+    log.info("thrashes immutable object cache daemon")
+
+    # just thrash one rbd client.
+    client, client_config = list(config.items())[0]
+    (remote,) = ctx.cluster.only(client).remotes.keys()
+    client_config = client_config if client_config is not None else dict()
+    kill_daemon_time = client_config.get('kill_daemon_time', DEFAULT_KILL_DAEMON_TIME)
+    dead_time = client_config.get('dead_time', DEFAULT_DEAD_TIME)
+    live_time = client_config.get('live_time', DEFAULT_LIVE_TIME)
+
+    for i in range(kill_daemon_time):
+        log.info("ceph-immutable-object-cache crash....")
+        remote.run(
+            args=[
+                'sudo', 'killall', '-s', '9', 'ceph-immutable-object-cache', run.Raw('||'), 'true',
+                 ]
+            )
+        # librbd shoud normally run when ceph-immutable-object-cache
+        remote.run(
+            args=[
+                'sleep', '{dead_time}'.format(dead_time=dead_time),
+                 ]
+            )
+        # librbd should reconnect daemon
+        log.info("startup ceph-immutable-object-cache")
+        remote.run(
+            args=[
+                'ceph-immutable-object-cache', '-b',
+                 ]
+            )
+        remote.run(
+            args=[
+                'sleep', '{live_time}'.format(live_time=live_time),
+                 ]
+            )
+    try:
+        yield
+    finally:
+        log.info("cleanup")
+
+@contextlib.contextmanager
+def task(ctx, config):
+    """
+    This is task for testing immutable_object_cache thrash.
+    """
+    assert isinstance(config, dict), \
+            "task immutable_object_cache_thrash only supports a dictionary for configuration"
+
+    managers = []
+    config = teuthology.replace_all_with_clients(ctx.cluster, config)
+    managers.append(
+        lambda: thrashes_immutable_object_cache_daemon(ctx=ctx, config=config)
+        )
+
+    with contextutil.nested(*managers):
+        yield
index c99e3651ff1442185681b6d2ee378a3bdd7e3a6e..8583f3d66e728c6b8f19da5959277246c3668bd1 100644 (file)
@@ -68,7 +68,7 @@ class GaneshaTest(DashboardTestCase):
     @classmethod
     def create_export(cls, path, cluster_id, daemons, fsal, sec_label_xattr=None):
         if fsal == 'CEPH':
-            fsal = {"name": "CEPH", "user_id":"admin", "fs_name": None, "sec_label_xattr": sec_label_xattr}
+            fsal = {"name": "CEPH", "user_id": "admin", "fs_name": None, "sec_label_xattr": sec_label_xattr}
             pseudo = "/cephfs{}".format(path)
         else:
             fsal = {"name": "RGW", "rgw_user_id": "admin"}
@@ -86,7 +86,7 @@ class GaneshaTest(DashboardTestCase):
             "protocols": [4],
             "transports": ["TCP"],
             "clients": [{
-                "addresses":["10.0.0.0/8"],
+                "addresses": ["10.0.0.0/8"],
                 "access_type": "RO",
                 "squash": "root"
             }]
@@ -103,19 +103,25 @@ class GaneshaTest(DashboardTestCase):
             self._task_delete("/api/nfs-ganesha/export/{}/{}"
                               .format(exp['cluster_id'], exp['export_id']))
 
-    def test_create_export(self):
+    def _test_create_export(self, cephfs_path):
         exports = self._get("/api/nfs-ganesha/export")
         self.assertEqual(len(exports), 0)
 
-        data = self.create_export("/foo", 'cluster1', ['node1', 'node2'], 'CEPH', "security.selinux")
+        data = self.create_export(cephfs_path, 'cluster1', ['node1', 'node2'], 'CEPH', "security.selinux")
 
         exports = self._get("/api/nfs-ganesha/export")
         self.assertEqual(len(exports), 1)
         self.assertDictEqual(exports[0], data)
         return data
 
+    def test_create_export(self):
+        self._test_create_export('/foo')
+
+    def test_create_export_for_cephfs_root(self):
+        self._test_create_export('/')
+
     def test_update_export(self):
-        export = self.test_create_export()
+        export = self._test_create_export('/foo')
         export['access_type'] = 'RO'
         export['daemons'] = ['node1', 'node3']
         export['security_label'] = True
@@ -129,7 +135,7 @@ class GaneshaTest(DashboardTestCase):
         self.assertEqual(exports[0]['security_label'], True)
 
     def test_delete_export(self):
-        export = self.test_create_export()
+        export = self._test_create_export('/foo')
         self._task_delete("/api/nfs-ganesha/export/{}/{}"
                           .format(export['cluster_id'], export['export_id']))
         self.assertStatus(204)
@@ -155,7 +161,9 @@ class GaneshaTest(DashboardTestCase):
         self.assertIn('available', data)
         self.assertIn('message', data)
         self.assertFalse(data['available'])
-        self.assertIn('Ganesha config location is not configured. Please set the GANESHA_RADOS_POOL_NAMESPACE setting.',
+        self.assertIn(("NFS-Ganesha cluster is not detected. "
+                       "Please set the GANESHA_RADOS_POOL_NAMESPACE "
+                       "setting or deploy an NFS-Ganesha cluster with the Orchestrator."),
                       data['message'])
 
         self._ceph_cmd(['dashboard', 'set-ganesha-clusters-rados-pool-namespace', 'cluster1:ganesha/ganesha1,cluster2:ganesha/ganesha2'])
@@ -181,8 +189,13 @@ class GaneshaTest(DashboardTestCase):
         })))
 
     def test_ganesha_lsdir(self):
-        self._get('/ui-api/nfs-ganesha/lsdir')
-        self.assertStatus(500)
+        fss = self._get('/ui-api/nfs-ganesha/cephfs/filesystems')
+        self.assertStatus(200)
+        for fs in fss:
+            data = self._get('/ui-api/nfs-ganesha/lsdir/{}'.format(fs['name']))
+            self.assertStatus(200)
+            self.assertSchema(data, JObj({'paths': JList(str)}))
+            self.assertEqual(data['paths'][0], '/')
 
     def test_ganesha_buckets(self):
         data = self._get('/ui-api/nfs-ganesha/rgw/buckets')
index 0bd3f93f32495b37b1688fe887b47455c11ef021..3f6c03e851e013e59c4b5f431e14fb7bce8995d1 100644 (file)
@@ -54,6 +54,12 @@ class OsdTest(DashboardTestCase):
         self.assert_in_and_not_none(data['histogram']['osd'], ['op_w_latency_in_bytes_histogram',
                                                                'op_r_latency_out_bytes_histogram'])
 
+    def test_histogram(self):
+        data = self._get('/api/osd/0/histogram')
+        self.assertStatus(200)
+        self.assert_in_and_not_none(data['osd'], ['op_w_latency_in_bytes_histogram',
+                                                               'op_r_latency_out_bytes_histogram'])    
+
     def test_scrub(self):
         self._post('/api/osd/0/scrub?deep=False')
         self.assertStatus(200)
index 1e707c33d458225e08182e97638c71cb69df5eff..6f1acebece78d0fc220069d0f782698c38c03231 100644 (file)
@@ -209,6 +209,20 @@ class RgwBucketTest(RgwTestCase):
         self.assertEqual(len(data), 1)
         self.assertIn('teuth-test-bucket', data)
 
+        # List all buckets with stats.
+        data = self._get('/api/rgw/bucket?stats=true')
+        self.assertStatus(200)
+        self.assertEqual(len(data), 1)
+        self.assertSchema(data[0], JObj(sub_elems={
+            'bid': JLeaf(str),
+            'bucket': JLeaf(str),
+            'bucket_quota': JObj(sub_elems={}, allow_unknown=True),
+            'id': JLeaf(str),
+            'owner': JLeaf(str),
+            'usage': JObj(sub_elems={}, allow_unknown=True),
+            'tenant': JLeaf(str),
+        }, allow_unknown=True))
+
         # Get the bucket.
         data = self._get('/api/rgw/bucket/teuth-test-bucket')
         self.assertStatus(200)
@@ -218,7 +232,10 @@ class RgwBucketTest(RgwTestCase):
             'tenant': JLeaf(str),
             'bucket': JLeaf(str),
             'bucket_quota': JObj(sub_elems={}, allow_unknown=True),
-            'owner': JLeaf(str)
+            'owner': JLeaf(str),
+            'mfa_delete': JLeaf(str),
+            'usage': JObj(sub_elems={}, allow_unknown=True),
+            'versioning': JLeaf(str)
         }, allow_unknown=True))
         self.assertEqual(data['bucket'], 'teuth-test-bucket')
         self.assertEqual(data['owner'], 'admin')
index 44b6602a6da3ad1c45f354f6082aaabcedc769c3..9f904a6e0c0e0d081ab55d1fbba596fd0a55ed65 100644 (file)
@@ -1,10 +1,10 @@
-
-
-from tasks.mgr.mgr_test_case import MgrTestCase
-
 import logging
+import ssl
+
 import requests
+from requests.adapters import HTTPAdapter
 
+from .mgr_test_case import MgrTestCase
 
 log = logging.getLogger(__name__)
 
@@ -124,3 +124,32 @@ class TestDashboard(MgrTestCase):
             ))
 
         self.assertListEqual(failures, [])
+
+    def test_tls(self):
+        class CustomHTTPAdapter(HTTPAdapter):
+            def __init__(self, ssl_version):
+                self.ssl_version = ssl_version
+                super().__init__()
+
+            def init_poolmanager(self, *args, **kwargs):
+                kwargs['ssl_version'] = self.ssl_version
+                return super().init_poolmanager(*args, **kwargs)
+
+        uri = self._get_uri("dashboard")
+
+        # TLSv1
+        with self.assertRaises(requests.exceptions.SSLError):
+            session = requests.Session()
+            session.mount(uri, CustomHTTPAdapter(ssl.PROTOCOL_TLSv1))
+            session.get(uri, allow_redirects=False, verify=False)
+
+        # TLSv1.1
+        with self.assertRaises(requests.exceptions.SSLError):
+            session = requests.Session()
+            session.mount(uri, CustomHTTPAdapter(ssl.PROTOCOL_TLSv1_1))
+            session.get(uri, allow_redirects=False, verify=False)
+
+        session = requests.Session()
+        session.mount(uri, CustomHTTPAdapter(ssl.PROTOCOL_TLS))
+        r = session.get(uri, allow_redirects=False, verify=False)
+        self.assertEqual(r.status_code, 200)
index decc60c268bc43ba48d9a360318ac57171338abb..393ac8c4b97b1a6cc032b8f0ebec02c33c0021a8 100644 (file)
@@ -157,6 +157,8 @@ def run_fio(remote, config, rbd_test_dir):
                         '--image', rbd_name,
                         '--image-format', '{f}'.format(f=frmt)]
            map(lambda x: create_args.extend(['--image-feature', x]), feature)
+           if config.get('thick-provision'):
+               create_args.append('--thick-provision')
            remote.run(args=create_args)
            remote.run(args=['rbd', 'info', rbd_name])
            if ioengine != 'rbd':
index a7f976d8ea5e2c15d52a91675b7736daf39ff4f0..50f5cc48f2f3ecf0dba9518e3bc86780f45574ab 100644 (file)
@@ -1119,6 +1119,7 @@ class LocalFilesystem(Filesystem, LocalMDSCluster):
         self.metadata_overlay = False
         self.data_pool_name = None
         self.data_pools = None
+        self.fs_config = None
 
         # Hack: cheeky inspection of ceph.conf to see what MDSs exist
         self.mds_ids = set()
index ad147885db36c00f3b76c01dfb3d25d65061fd77..14ab2cbf4d201f0677a6081820077b1179f671fd 100755 (executable)
@@ -21,7 +21,6 @@ if [ -z "$PYTHON_KLUDGE" ]; then
     # see which pythons we should test with
     PYTHONS=""
     which python3 && PYTHONS="$PYTHONS python3"
-    which python2 && PYTHONS="$PYTHONS python2"
     echo "PYTHONS $PYTHONS"
     if [ -z "$PYTHONS" ]; then
        echo "No PYTHONS found!"
index ddffad1da443ad2c68c49994861d2e0d6c8da8d8..ac7e3163db7b9c2735a6d029e466dafa27ea6250 100755 (executable)
@@ -39,7 +39,6 @@ if [ -z "$PYTHON_KLUDGE" ]; then
     # see which pythons we should test with
     PYTHONS=""
     which python3 && PYTHONS="$PYTHONS python3"
-    which python2 && PYTHONS="$PYTHONS python2"
     echo "PYTHONS $PYTHONS"
     if [ -z "$PYTHONS" ]; then
        echo "No PYTHONS found!"
@@ -82,6 +81,7 @@ fi
 
 # TMPDIR for test data
 [ -d "$TMPDIR" ] || TMPDIR=$(mktemp -d tmp.$SCRIPT_NAME.XXXXXX)
+[ -d "$TMPDIR_TEST_MULTIPLE_MOUNTS" ] || TMPDIR_TEST_MULTIPLE_MOUNTS=$(mktemp -d tmp.$SCRIPT_NAME.XXXXXX)
 
 function cleanup()
 {
@@ -171,6 +171,9 @@ function nfs_stop()
 ## prepare + check host
 $SUDO $CEPHADM check-host
 
+## run a gather-facts (output to stdout)
+$SUDO $CEPHADM gather-facts
+
 ## version + --image
 $SUDO CEPHADM_IMAGE=$IMAGE_NAUTILUS $CEPHADM_BIN version
 $SUDO CEPHADM_IMAGE=$IMAGE_NAUTILUS $CEPHADM_BIN version \
@@ -365,6 +368,23 @@ is_available "nfs" "$cond" 10
 $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
         ceph orch resume
 
+# add alertmanager via custom container
+alertmanager_image=$(cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | jq -r '.image')
+tcp_ports=$(cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | jq -r '.ports | map_values(.|tostring) | join(" ")')
+cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | \
+      ${CEPHADM//--image $IMAGE_MASTER/} \
+      --image $alertmanager_image \
+      deploy \
+      --tcp-ports "$tcp_ports" \
+      --name container.alertmanager.a \
+      --fsid $FSID \
+      --config-json -
+cond="$CEPHADM enter --fsid $FSID --name container.alertmanager.a -- test -f \
+      /etc/alertmanager/alertmanager.yml"
+is_available "alertmanager.yml" "$cond" 10
+cond="curl 'http://localhost:9093' | grep -q 'Alertmanager'"
+is_available "alertmanager" "$cond" 10
+
 ## run
 # WRITE ME
 
@@ -382,7 +402,7 @@ $CEPHADM shell --fsid $FSID -- true
 $CEPHADM shell --fsid $FSID -- test -d /var/log/ceph
 expect_false $CEPHADM --timeout 10 shell --fsid $FSID -- sleep 60
 $CEPHADM --timeout 60 shell --fsid $FSID -- sleep 10
-$CEPHADM shell --fsid $FSID --mount $TMPDIR -- stat /mnt/$(basename $TMPDIR)
+$CEPHADM shell --fsid $FSID --mount $TMPDIR $TMPDIR_TEST_MULTIPLE_MOUNTS -- stat /mnt/$(basename $TMPDIR)
 
 ## enter
 expect_false $CEPHADM enter
index 77b36e0ca3aee088ffaa76199b7ce7768ff5d314..cb94fb40683b7829b6adc30ab6a4f1e96ff2e53a 100755 (executable)
@@ -1165,6 +1165,11 @@ function test_mon_mon()
   ceph mon feature set kraken --yes-i-really-mean-it
   expect_false ceph mon feature set abcd
   expect_false ceph mon feature set abcd --yes-i-really-mean-it
+
+  # test mon stat
+  # don't check output, just ensure it does not fail.
+  ceph mon stat
+  ceph mon stat -f json | jq '.'
 }
 
 function test_mon_priority_and_weight()
index bdb0702808f57877f72be0fa150e4f4df3eaea41..eb88565eab9c2308d88cf17b681f998bcd9410f6 100755 (executable)
@@ -19,8 +19,8 @@ expect()
 }
 
 ceph osd pool delete test test --yes-i-really-really-mean-it || true
-expect 'ceph osd pool create test 256 256' 0
-expect 'rbd --pool=test pool init' 0
+expect 'ceph osd pool create test 8 8' 0
+expect 'ceph osd pool application enable test rbd'
 expect 'ceph osd pool mksnap test snapshot' 0
 expect 'ceph osd pool rmsnap test snapshot' 0
 
@@ -28,7 +28,7 @@ expect 'rbd --pool=test --rbd_validate_pool=false create --size=102400 image' 0
 expect 'rbd --pool=test snap create image@snapshot' 22
 
 expect 'ceph osd pool delete test test --yes-i-really-really-mean-it' 0
-expect 'ceph osd pool create test 256 256' 0
+expect 'ceph osd pool create test 8 8' 0
 expect 'rbd --pool=test pool init' 0
 expect 'rbd --pool=test create --size=102400 image' 0
 expect 'rbd --pool=test snap create image@snapshot' 0
@@ -45,13 +45,13 @@ expect 'ceph osd pool delete test test --yes-i-really-really-mean-it' 0
 
 ceph osd pool delete test-foo test-foo --yes-i-really-really-mean-it || true
 expect 'ceph osd pool create test-foo 8' 0
-expect 'rbd pool init test-foo'
+expect 'ceph osd pool application enable test-foo rbd'
 expect 'rbd --pool test-foo create --size 1024 image' 0
 expect 'rbd --pool test-foo snap create image@snapshot' 0
 
 ceph osd pool delete test-bar test-bar --yes-i-really-really-mean-it || true
 expect 'ceph osd pool create test-bar 8' 0
-expect 'rbd pool init test-bar'
+expect 'ceph osd pool application enable test-bar rbd'
 expect 'rados cppool test-foo test-bar --yes-i-really-mean-it' 0
 expect 'rbd --pool test-bar snap rm image@snapshot' 95
 expect 'ceph osd pool delete test-foo test-foo --yes-i-really-really-mean-it' 0
diff --git a/ceph/qa/workunits/rbd/krbd_udev_netns.sh b/ceph/qa/workunits/rbd/krbd_udev_netns.sh
new file mode 100755 (executable)
index 0000000..e746a68
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+
+set -ex
+
+sudo ip netns add ns1
+sudo ip link add veth1-ext type veth peer name veth1-int
+sudo ip link set veth1-int netns ns1
+
+sudo ip netns exec ns1 ip link set dev lo up
+sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth1-int
+sudo ip netns exec ns1 ip link set veth1-int up
+sudo ip netns exec ns1 ip route add default via 192.168.1.1
+
+sudo ip addr add 192.168.1.1/24 dev veth1-ext
+sudo ip link set veth1-ext up
+
+# Enable forwarding between the namespace and the default route
+# interface and set up NAT.  In case of multiple default routes,
+# just pick the first one.
+if [[ $(sysctl -n net.ipv4.ip_forward) -eq 0 ]]; then
+    sudo iptables -P FORWARD DROP
+    sudo sysctl -w net.ipv4.ip_forward=1
+fi
+IFACE="$(ip route list 0.0.0.0/0 | head -n 1 | cut -d ' ' -f 5)"
+sudo iptables -A FORWARD -i veth1-ext -o "$IFACE" -j ACCEPT
+sudo iptables -A FORWARD -i "$IFACE" -o veth1-ext -j ACCEPT
+sudo iptables -t nat -A POSTROUTING -s 192.168.1.2 -o "$IFACE" -j MASQUERADE
+
+rbd create --size 300 img
+
+DEV="$(sudo rbd map img)"
+mkfs.ext4 "$DEV"
+sudo mount "$DEV" /mnt
+sudo umount /mnt
+sudo rbd unmap "$DEV"
+
+sudo ip netns exec ns1 bash <<'EOF'
+
+set -ex
+
+DEV="/dev/rbd/rbd/img"
+[[ ! -e "$DEV" ]]
+
+# In a network namespace, "rbd map" maps the device and hangs waiting
+# for udev add uevents.  udev runs as usual (in particular creating the
+# symlink which is used here because the device node is never printed),
+# but the uevents it sends out never come because they don't cross
+# network namespace boundaries.
+set +e
+timeout 30s rbd map img
+RET=$?
+set -e
+[[ $RET -eq 124 ]]
+[[ -L "$DEV" ]]
+mkfs.ext4 -F "$DEV"
+mount "$DEV" /mnt
+umount /mnt
+
+# In a network namespace, "rbd unmap" unmaps the device and hangs
+# waiting for udev remove uevents.  udev runs as usual (removing the
+# symlink), but the uevents it sends out never come because they don't
+# cross network namespace boundaries.
+set +e
+timeout 30s rbd unmap "$DEV"
+RET=$?
+set -e
+[[ $RET -eq 124 ]]
+[[ ! -e "$DEV" ]]
+
+# Skip waiting for udev uevents with "-o noudev".
+DEV="$(rbd map -o noudev img)"
+mkfs.ext4 -F "$DEV"
+mount "$DEV" /mnt
+umount /mnt
+rbd unmap -o noudev "$DEV"
+
+EOF
+
+rbd rm img
+
+sudo iptables -t nat -D POSTROUTING -s 192.168.1.2 -o "$IFACE" -j MASQUERADE
+sudo iptables -D FORWARD -i "$IFACE" -o veth1-ext -j ACCEPT
+sudo iptables -D FORWARD -i veth1-ext -o "$IFACE" -j ACCEPT
+sudo ip netns delete ns1
+
+echo OK
diff --git a/ceph/qa/workunits/rbd/krbd_udev_symlinks.sh b/ceph/qa/workunits/rbd/krbd_udev_symlinks.sh
new file mode 100755 (executable)
index 0000000..2714765
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/env bash
+
+set -ex
+
+SPECS=(
+rbd/img1
+rbd/img2
+rbd/img2@snap1
+rbd/img3
+rbd/img3@snap1
+rbd/img3@snap2
+rbd/ns1/img1
+rbd/ns1/img2
+rbd/ns1/img2@snap1
+rbd/ns1/img3
+rbd/ns1/img3@snap1
+rbd/ns1/img3@snap2
+rbd/ns2/img1
+rbd/ns2/img2
+rbd/ns2/img2@snap1
+rbd/ns2/img3
+rbd/ns2/img3@snap1
+rbd/ns2/img3@snap2
+custom/img1
+custom/img1@snap1
+custom/img2
+custom/img2@snap1
+custom/img2@snap2
+custom/img3
+custom/ns1/img1
+custom/ns1/img1@snap1
+custom/ns1/img2
+custom/ns1/img2@snap1
+custom/ns1/img2@snap2
+custom/ns1/img3
+custom/ns2/img1
+custom/ns2/img1@snap1
+custom/ns2/img2
+custom/ns2/img2@snap1
+custom/ns2/img2@snap2
+custom/ns2/img3
+)
+
+ceph osd pool create custom 8
+rbd pool init custom
+
+ceph osd set-require-min-compat-client nautilus
+rbd namespace create rbd/ns1
+rbd namespace create rbd/ns2
+rbd namespace create custom/ns1
+rbd namespace create custom/ns2
+
+# create in order, images before snapshots
+for spec in "${SPECS[@]}"; do
+    if [[ "$spec" =~ snap ]]; then
+        rbd snap create "$spec"
+    else
+        rbd create --size 10 "$spec"
+        DEV="$(sudo rbd map "$spec")"
+        sudo sfdisk "$DEV" <<EOF
+unit: sectors
+${DEV}p1 : start=        2048, size=           2, type=83
+${DEV}p2 : start=        4096, size=           2, type=83
+EOF
+        sudo rbd unmap "$DEV"
+    fi
+done
+
+[[ ! -e /dev/rbd ]]
+
+# map in random order
+COUNT=${#SPECS[@]}
+read -r -a INDEXES < <(python3 <<EOF
+import random
+l = list(range($COUNT))
+random.shuffle(l)
+print(*l)
+EOF
+)
+
+DEVS=()
+for idx in "${INDEXES[@]}"; do
+    DEVS+=("$(sudo rbd map "${SPECS[idx]}")")
+done
+
+[[ $(rbd showmapped | wc -l) -eq $((COUNT + 1)) ]]
+
+for ((i = 0; i < COUNT; i++)); do
+    [[ "$(readlink -e "/dev/rbd/${SPECS[INDEXES[i]]}")" == "${DEVS[i]}" ]]
+    [[ "$(readlink -e "/dev/rbd/${SPECS[INDEXES[i]]}-part1")" == "${DEVS[i]}p1" ]]
+    [[ "$(readlink -e "/dev/rbd/${SPECS[INDEXES[i]]}-part2")" == "${DEVS[i]}p2" ]]
+done
+
+for idx in "${INDEXES[@]}"; do
+    sudo rbd unmap "/dev/rbd/${SPECS[idx]}"
+done
+
+[[ ! -e /dev/rbd ]]
+
+# remove in reverse order, snapshots before images
+for ((i = COUNT - 1; i >= 0; i--)); do
+    if [[ "${SPECS[i]}" =~ snap ]]; then
+        rbd snap rm "${SPECS[i]}"
+    else
+        rbd rm "${SPECS[i]}"
+    fi
+done
+
+rbd namespace rm custom/ns2
+rbd namespace rm custom/ns1
+rbd namespace rm rbd/ns2
+rbd namespace rm rbd/ns1
+
+ceph osd pool delete custom custom --yes-i-really-really-mean-it
+
+echo OK
index 5475116cdb3db5b080f047f3028aba83c77661ab..fb1510851e5c28f299dc5693e2beca92824241c2 100755 (executable)
@@ -95,18 +95,20 @@ function get_pid()
     PID=$(rbd-nbd --format xml list-mapped | $XMLSTARLET sel -t -v \
       "//devices/device[pool='${POOL}'][namespace='${ns}'][image='${IMAGE}'][device='${DEV}']/id")
     test -n "${PID}"
-    ps -p ${PID} -o cmd | grep rbd-nbd
+    ps -p ${PID} -C rbd-nbd
 }
 
 unmap_device()
 {
-    local unmap_dev=$1
-    local list_dev=${2:-$1}
-    _sudo rbd-nbd unmap ${unmap_dev}
+    local dev=$1
+    local pid=$2
+    _sudo rbd-nbd unmap ${dev}
 
     for s in 0.5 1 2 4 8 16 32; do
        sleep ${s}
-        rbd-nbd list-mapped | expect_false grep "${list_dev} *$" && return 0
+        rbd-nbd list-mapped | expect_false grep "^${pid}\\b" &&
+            ps -C rbd-nbd | expect_false grep "^${pid}\\b" &&
+            return 0
     done
     return 1
 }
@@ -138,7 +140,7 @@ get_pid
 # map test specifying the device
 expect_false _sudo rbd-nbd --device ${DEV} map ${POOL}/${IMAGE}
 dev1=${DEV}
-unmap_device ${DEV}
+unmap_device ${DEV} ${PID}
 DEV=
 # XXX: race possible when the device is reused by other process
 DEV=`_sudo rbd-nbd --device ${dev1} map ${POOL}/${IMAGE}`
@@ -183,16 +185,16 @@ test -n "${blocks2}"
 test ${blocks2} -eq ${blocks}
 
 # read-only option test
-unmap_device ${DEV}
+unmap_device ${DEV} ${PID}
 DEV=`_sudo rbd-nbd map --read-only ${POOL}/${IMAGE}`
 PID=$(rbd-nbd list-mapped | awk -v pool=${POOL} -v img=${IMAGE} -v dev=${DEV} \
     '$2 == pool && $3 == img && $5 == dev {print $1}')
 test -n "${PID}"
-ps -p ${PID} -o cmd | grep rbd-nbd
+ps -p ${PID} -C rbd-nbd
 
 _sudo dd if=${DEV} of=/dev/null bs=1M
 expect_false _sudo dd if=${DATA} of=${DEV} bs=1M oflag=direct
-unmap_device ${DEV}
+unmap_device ${DEV} ${PID}
 
 # exclusive option test
 DEV=`_sudo rbd-nbd map --exclusive ${POOL}/${IMAGE}`
@@ -201,32 +203,39 @@ get_pid
 _sudo dd if=${DATA} of=${DEV} bs=1M oflag=direct
 expect_false timeout 10 \
        rbd bench ${IMAGE} --io-type write --io-size=1024 --io-total=1024
-unmap_device ${DEV}
+unmap_device ${DEV} ${PID}
 DEV=
 rbd bench ${IMAGE} --io-type write --io-size=1024 --io-total=1024
 
 # unmap by image name test
 DEV=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
 get_pid
-unmap_device ${IMAGE} ${DEV}
+unmap_device ${IMAGE} ${PID}
 DEV=
-ps -p ${PID} -o cmd | expect_false grep rbd-nbd
 
 # map/unmap snap test
 rbd snap create ${POOL}/${IMAGE}@snap
 DEV=`_sudo rbd-nbd map ${POOL}/${IMAGE}@snap`
 get_pid
-unmap_device "${IMAGE}@snap" ${DEV}
+unmap_device "${IMAGE}@snap" ${PID}
 DEV=
-ps -p ${PID} -o cmd | expect_false grep rbd-nbd
 
 # map/unmap namespace test
 rbd snap create ${POOL}/${NS}/${IMAGE}@snap
 DEV=`_sudo rbd-nbd map ${POOL}/${NS}/${IMAGE}@snap`
 get_pid ${NS}
-unmap_device "${POOL}/${NS}/${IMAGE}@snap" ${DEV}
+unmap_device "${POOL}/${NS}/${IMAGE}@snap" ${PID}
 DEV=
-ps -p ${PID} -o cmd | expect_false grep rbd-nbd
+
+# unmap by image name test 2
+DEV=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
+get_pid
+pid=$PID
+DEV=`_sudo rbd-nbd map ${POOL}/${NS}/${IMAGE}`
+get_pid ${NS}
+unmap_device ${POOL}/${NS}/${IMAGE} ${PID}
+DEV=
+unmap_device ${POOL}/${IMAGE} ${pid}
 
 # auto unmap test
 DEV=`_sudo rbd-nbd map ${POOL}/${IMAGE}`
index b5c0a68c515ce7a3e4649cd26401fbfbdd35eb62..36d712f85b9c186d20fd46a9adfa4b061ac15d1d 100755 (executable)
@@ -238,6 +238,7 @@ peer_add()
     local cluster=$1 ; shift
     local pool=$1 ; shift
     local client_cluster=$1 ; shift
+    local remote_cluster="${client_cluster##*@}"
 
     local uuid_var_name
     if [ -n "$1" ]; then
@@ -257,6 +258,9 @@ peer_add()
         if [ $error_code -eq 17 ]; then
             # raced with a remote heartbeat ping -- remove and retry
             sleep $s
+            peer_uuid=$(rbd mirror pool info --cluster ${cluster} --pool ${pool} --format xml | \
+                xmlstarlet sel -t -v "//peers/peer[site_name='${remote_cluster}']/uuid")
+
             rbd --cluster ${cluster} --pool ${pool} mirror pool peer remove ${peer_uuid}
         else
             test $error_code -eq 0
index da96ccd32cbd8c367e548268c88ccfbcc343897b..4299078a173ddcadd5ab5a7cbcb6cb01b3f6fa81 100755 (executable)
@@ -56,9 +56,8 @@ uninstall_awscli() {
     cd "$here"
 }
 
-sudo dnf install -y s3cmd
-
-sudo yum install python3-setuptools
+sudo yum -y install s3cmd
+sudo yum -y install python3-setuptools
 sudo yum -y install python3-pip
 sudo pip3 install --upgrade setuptools
 sudo pip3 install python-swiftclient
index 192a4001ff419b99a4d869d857f24c26db580e6d..88e34655b54d77736b688bdddc556145e2f721bf 100755 (executable)
@@ -20,6 +20,8 @@
 
 source src/script/run-make.sh
 
+set -e
+
 function run() {
     # to prevent OSD EMFILE death on tests, make sure ulimit >= 1024
     $DRY_RUN ulimit -n $(ulimit -Hn)
@@ -59,7 +61,8 @@ function main() {
         cmake_opts+=" -DWITH_SEASTAR=ON"
     fi
     configure $cmake_opts $@
-    build tests && echo "make check: successful run on $(git rev-parse HEAD)"
+    build tests
+    echo "make check: successful build on $(git rev-parse HEAD)"
     run
 }
 
index 93ceaee81429ddfaeea6a0354760a80419c01bf1..7811c04e03309bfa69b8606e28eff1ce7f0ff039 100644 (file)
@@ -1,2 +1,2 @@
-cb8c61a60551b72614257d632a574d420064c17a
-15.2.6
+bdf3eebcd22d7d0b3dd4d5501bee5bac354d5b55
+15.2.8
index bb4a7812d1bfbab5728fc91afd2237dec09c3455..2190a9b60a1097044b140cb9c5f00b429721e9e5 100644 (file)
@@ -144,7 +144,6 @@ if(HAVE_INTEL)
   endif()
 endif()
 
-
 # require c++17
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_EXTENSIONS OFF)
index 846f321e475b4fca17d2ef0542f80cc91d358521..b4a5a41acdb3bb98f2de40686519687e9830650d 100755 (executable)
@@ -3,10 +3,19 @@
 DEV=$1
 NUM=`echo $DEV | sed 's#p.*##g; s#[a-z]##g'`
 POOL=`cat /sys/devices/rbd/$NUM/pool`
+if [ -f /sys/devices/rbd/$NUM/pool_ns ]; then
+    NAMESPACE=`cat /sys/devices/rbd/$NUM/pool_ns`
+else
+    NAMESPACE=""
+fi
 IMAGE=`cat /sys/devices/rbd/$NUM/name`
 SNAP=`cat /sys/devices/rbd/$NUM/current_snap`
-if [ "$SNAP" = "-" ]; then
-       echo -n "$POOL $IMAGE"
-else
-       echo -n "$POOL $IMAGE@$SNAP"
+
+echo -n "$POOL"
+if [ -n "$NAMESPACE" ]; then
+    echo -n "/$NAMESPACE"
+fi
+echo -n "/$IMAGE"
+if [ "$SNAP" != "-" ]; then
+    echo -n "@$SNAP"
 fi
index 0e6f42dac1db976f6cba860a14989d29696243f7..461e010506c2f92abce3223218e1a9164a084ec3 100644 (file)
@@ -518,6 +518,13 @@ class VolumeGroup(object):
         """
         return int(self.vg_extent_size) * int(self.vg_free_count)
 
+    @property
+    def free_percent(self):
+        """
+        Return free space in VG in bytes
+        """
+        return int(self.vg_free_count) / int(self.vg_extent_count)
+
     @property
     def size(self):
         """
@@ -589,7 +596,7 @@ class VolumeGroup(object):
         '''
         Return how many extents fit the VG slot times
         '''
-        return int(int(self.vg_free_count) / slots)
+        return int(int(self.vg_extent_count) / slots)
 
 
 def create_vg(devices, name=None, name_prefix=None):
@@ -740,7 +747,8 @@ def get_device_vgs(device, name_prefix=''):
 ###############################
 
 LV_FIELDS = 'lv_tags,lv_path,lv_name,vg_name,lv_uuid,lv_size'
-LV_CMD_OPTIONS =  ['--noheadings', '--readonly', '--separator=";"', '-a']
+LV_CMD_OPTIONS =  ['--noheadings', '--readonly', '--separator=";"', '-a',
+                   '--units=b', '--nosuffix']
 
 
 class Volume(object):
index a83c8680bf33674db900f44c17e68168ece11703..a6f7632b3170c670839b05a611d9e25073bf8ddf 100644 (file)
@@ -1,11 +1,14 @@
 import argparse
-import logging
+from collections import namedtuple
 import json
+import logging
 from textwrap import dedent
 from ceph_volume import terminal, decorators
-from ceph_volume.util import disk, prompt_bool
-from ceph_volume.util import arg_validators
-from . import strategies
+from ceph_volume.util import disk, prompt_bool, arg_validators, templates
+from ceph_volume.util import prepare
+from . import common
+from .create import Create
+from .prepare import Prepare
 
 mlogger = terminal.MultiLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -26,98 +29,122 @@ def device_formatter(devices):
     return ''.join(lines)
 
 
-# Scenario filtering/detection
-def bluestore_single_type(device_facts):
-    """
-    Detect devices that are just HDDs or solid state so that a 1:1
-    device-to-osd provisioning can be done
-    """
-    types = [device.rotational for device in device_facts]
-    if len(set(types)) == 1:
-        return strategies.bluestore.SingleType
-
-
-def bluestore_mixed_type(device_facts):
-    """
-    Detect if devices are HDDs as well as solid state so that block.db can be
-    placed in solid devices while data is kept in the spinning drives.
-    """
-    types = [device.rotational for device in device_facts]
-    if len(set(types)) > 1:
-        return strategies.bluestore.MixedType
-
-
-def filestore_single_type(device_facts):
-    """
-    Detect devices that are just HDDs or solid state so that a 1:1
-    device-to-osd provisioning can be done, keeping the journal on the OSD
-    """
-    types = [device.rotational for device in device_facts]
-    if len(set(types)) == 1:
-        return strategies.filestore.SingleType
-
-
-def filestore_mixed_type(device_facts):
-    """
-    Detect if devices are HDDs as well as solid state so that the journal can be
-    placed in solid devices while data is kept in the spinning drives.
-    """
-    types = [device.rotational for device in device_facts]
-    if len(set(types)) > 1:
-        return strategies.filestore.MixedType
-
-
-def get_strategy(args, devices):
-    """
-    Given a set of devices as input, go through the different detection
-    mechanisms to narrow down on a strategy to use. The strategies are 4 in
-    total:
-
-    * Single device type on Bluestore
-    * Mixed device types on Bluestore
-    * Single device type on Filestore
-    * Mixed device types on Filestore
-
-    When the function matches to a scenario it returns the strategy class. This
-    allows for dynamic loading of the conditions needed for each scenario, with
-    normalized classes
-    """
-    bluestore_strategies = [bluestore_mixed_type, bluestore_single_type]
-    filestore_strategies = [filestore_mixed_type, filestore_single_type]
-    if args.bluestore:
-        strategies = bluestore_strategies
-    else:
-        strategies = filestore_strategies
-
-    for strategy in strategies:
-        backend = strategy(devices)
-        if backend:
-            return backend
-
-
-def filter_devices(args):
-    unused_devices = [device for device in args.devices if not device.used_by_ceph]
-    # only data devices, journals can be reused
-    used_devices = [device.abspath for device in args.devices if device.used_by_ceph]
-    filtered_devices = {}
-    if used_devices:
-        for device in used_devices:
-            filtered_devices[device] = {"reasons": ["Used by ceph as a data device already"]}
-        logger.info("Ignoring devices already used by ceph: %s" % ", ".join(used_devices))
-    if len(unused_devices) == 1:
-        last_device = unused_devices[0]
-        if not last_device.rotational and last_device.is_lvm_member:
-            if last_device.lvs:
-                reason = "Used by ceph as a %s already and there are no devices left for data/block" % (
-                    last_device.lvs[0].tags.get("ceph.type"),
-                )
+def ensure_disjoint_device_lists(data, db=[], wal=[], journal=[]):
+    # check that all device lists are disjoint with each other
+    if not all([set(data).isdisjoint(set(db)),
+                set(data).isdisjoint(set(wal)),
+                set(data).isdisjoint(set(journal)),
+                set(db).isdisjoint(set(wal))]):
+        raise Exception('Device lists are not disjoint')
+
+
+def separate_devices_from_lvs(devices):
+    phys = []
+    lvm = []
+    for d in devices:
+        phys.append(d) if d.is_device else lvm.append(d)
+    return phys, lvm
+
+
+def get_physical_osds(devices, args):
+    '''
+    Goes through passed physical devices and assigns OSDs
+    '''
+    data_slots = args.osds_per_device
+    if args.data_slots:
+        data_slots = max(args.data_slots, args.osds_per_device)
+    rel_data_size = 1.0 / data_slots
+    mlogger.debug('relative data size: {}'.format(rel_data_size))
+    ret = []
+    for dev in devices:
+        if dev.available_lvm:
+            dev_size = dev.vg_size[0]
+            abs_size = disk.Size(b=int(dev_size * rel_data_size))
+            free_size = dev.vg_free[0]
+            for _ in range(args.osds_per_device):
+                if abs_size > free_size:
+                    break
+                free_size -= abs_size.b
+                osd_id = None
+                if args.osd_ids:
+                    osd_id = args.osd_ids.pop()
+                ret.append(Batch.OSD(dev.path,
+                                     rel_data_size,
+                                     abs_size,
+                                     args.osds_per_device,
+                                     osd_id,
+                                     'dmcrypt' if args.dmcrypt else None))
+    return ret
+
+
+def get_lvm_osds(lvs, args):
+    '''
+    Goes through passed LVs and assigns planned osds
+    '''
+    ret = []
+    for lv in lvs:
+        if lv.used_by_ceph:
+            continue
+        osd_id = None
+        if args.osd_ids:
+            osd_id = args.osd_ids.pop()
+        osd = Batch.OSD("{}/{}".format(lv.vg_name, lv.lv_name),
+                        100.0,
+                        disk.Size(b=int(lv.lvs[0].lv_size)),
+                        1,
+                        osd_id,
+                        'dmcrypt' if args.dmcrypt else None)
+        ret.append(osd)
+    return ret
+
+
+def get_physical_fast_allocs(devices, type_, fast_slots_per_device, new_osds, args):
+    requested_slots = getattr(args, '{}_slots'.format(type_))
+    if not requested_slots or requested_slots < fast_slots_per_device:
+        if requested_slots:
+            mlogger.info('{}_slots argument is to small, ignoring'.format(type_))
+        requested_slots = fast_slots_per_device
+
+    requested_size = getattr(args, '{}_size'.format(type_), 0)
+    if requested_size == 0:
+        # no size argument was specified, check ceph.conf
+        get_size_fct = getattr(prepare, 'get_{}_size'.format(type_))
+        requested_size = get_size_fct(lv_format=False)
+
+    ret = []
+    for dev in devices:
+        if not dev.available_lvm:
+            continue
+        # any LV present is considered a taken slot
+        occupied_slots = len(dev.lvs)
+        # this only looks at the first vg on device, unsure if there is a better
+        # way
+        dev_size = dev.vg_size[0]
+        abs_size = disk.Size(b=int(dev_size / requested_slots))
+        free_size = dev.vg_free[0]
+        relative_size = int(abs_size) / dev_size
+        if requested_size:
+            if requested_size <= abs_size:
+                abs_size = requested_size
             else:
-                reason = "Disk is an LVM member already, skipping"
-            filtered_devices[last_device.abspath] = {"reasons": [reason]}
-            logger.info(reason + ": %s" % last_device.abspath)
-            unused_devices = []
-
-    return unused_devices, filtered_devices
+                mlogger.error(
+                    '{} was requested for {}, but only {} can be fulfilled'.format(
+                        requested_size,
+                        '{}_size'.format(type_),
+                        abs_size,
+                    ))
+                exit(1)
+        while abs_size <= free_size and len(ret) < new_osds and occupied_slots < fast_slots_per_device:
+            free_size -= abs_size.b
+            occupied_slots += 1
+            ret.append((dev.path, relative_size, abs_size, requested_slots))
+    return ret
+
+
+def get_lvm_fast_allocs(lvs):
+    return [("{}/{}".format(d.vg_name, d.lv_name), 100.0,
+             disk.Size(b=int(d.lvs[0].lv_size)), 1) for d in lvs if not
+            d.used_by_ceph]
 
 
 class Batch(object):
@@ -127,13 +154,11 @@ class Batch(object):
     _help = dedent("""
     Automatically size devices ready for OSD provisioning based on default strategies.
 
-    Detected devices:
-    {detected_devices}
-
     Usage:
 
         ceph-volume lvm batch [DEVICE...]
 
+    Devices can be physical block devices or LVs.
     Optional reporting on possible outcomes is enabled with --report
 
         ceph-volume lvm batch --report [DEVICE...]
@@ -143,41 +168,49 @@ class Batch(object):
         parser = argparse.ArgumentParser(
             prog='ceph-volume lvm batch',
             formatter_class=argparse.RawDescriptionHelpFormatter,
-            description=self.print_help(),
+            description=self._help,
         )
 
         parser.add_argument(
             'devices',
             metavar='DEVICES',
             nargs='*',
-            type=arg_validators.ValidDevice(),
+            type=arg_validators.ValidBatchDevice(),
             default=[],
             help='Devices to provision OSDs',
         )
         parser.add_argument(
             '--db-devices',
             nargs='*',
-            type=arg_validators.ValidDevice(),
+            type=arg_validators.ValidBatchDevice(),
             default=[],
             help='Devices to provision OSDs db volumes',
         )
         parser.add_argument(
             '--wal-devices',
             nargs='*',
-            type=arg_validators.ValidDevice(),
+            type=arg_validators.ValidBatchDevice(),
             default=[],
             help='Devices to provision OSDs wal volumes',
         )
         parser.add_argument(
             '--journal-devices',
             nargs='*',
-            type=arg_validators.ValidDevice(),
+            type=arg_validators.ValidBatchDevice(),
             default=[],
             help='Devices to provision OSDs journal volumes',
         )
         parser.add_argument(
-            '--no-auto',
+            '--auto',
             action='store_true',
+            help=('deploy multi-device OSDs if rotational and non-rotational drives '
+                  'are passed in DEVICES'),
+            default=True
+        )
+        parser.add_argument(
+            '--no-auto',
+            action='store_false',
+            dest='auto',
             help=('deploy standalone OSDs if rotational and non-rotational drives '
                   'are passed in DEVICES'),
         )
@@ -194,7 +227,7 @@ class Batch(object):
         parser.add_argument(
             '--report',
             action='store_true',
-            help='Autodetect the objectstore by inspecting the OSD',
+            help='Only report on OSD that would be created and exit',
         )
         parser.add_argument(
             '--yes',
@@ -205,7 +238,7 @@ class Batch(object):
             '--format',
             help='output format, defaults to "pretty"',
             default='pretty',
-            choices=['json', 'pretty'],
+            choices=['json', 'json-pretty', 'pretty'],
         )
         parser.add_argument(
             '--dmcrypt',
@@ -230,20 +263,51 @@ class Batch(object):
             help='Provision more than 1 (the default) OSD per device',
         )
         parser.add_argument(
-            '--block-db-size',
+            '--data-slots',
             type=int,
+            help=('Provision more than 1 (the default) OSD slot per device'
+                  ' if more slots then osds-per-device are specified, slots'
+                  'will stay unoccupied'),
+        )
+        parser.add_argument(
+            '--block-db-size',
+            type=disk.Size.parse,
             help='Set (or override) the "bluestore_block_db_size" value, in bytes'
         )
         parser.add_argument(
-            '--block-wal-size',
+            '--block-db-slots',
             type=int,
+            help='Provision slots on DB device, can remain unoccupied'
+        )
+        parser.add_argument(
+            '--block-wal-size',
+            type=disk.Size.parse,
             help='Set (or override) the "bluestore_block_wal_size" value, in bytes'
         )
         parser.add_argument(
-            '--journal-size',
+            '--block-wal-slots',
             type=int,
+            help='Provision slots on WAL device, can remain unoccupied'
+        )
+        def journal_size_in_mb_hack(size):
+            # TODO give user time to adjust, then remove this
+            if size and size[-1].isdigit():
+                mlogger.warning('DEPRECATION NOTICE')
+                mlogger.warning('--journal-size as integer is parsed as megabytes')
+                mlogger.warning('A future release will parse integers as bytes')
+                mlogger.warning('Add a "M" to explicitly pass a megabyte size')
+                size += 'M'
+            return disk.Size.parse(size)
+        parser.add_argument(
+            '--journal-size',
+            type=journal_size_in_mb_hack,
             help='Override the "osd_journal_size" value, in megabytes'
         )
+        parser.add_argument(
+            '--journal-slots',
+            type=int,
+            help='Provision slots on journal device, can remain unoccupied'
+        )
         parser.add_argument(
             '--prepare',
             action='store_true',
@@ -260,51 +324,59 @@ class Batch(object):
         for dev_list in ['', 'db_', 'wal_', 'journal_']:
             setattr(self, '{}usable'.format(dev_list), [])
 
-    def get_devices(self):
-        # remove devices with partitions
-        devices = [(device, details) for device, details in
-                       disk.get_devices().items() if details.get('partitions') == {}]
-        size_sort = lambda x: (x[0], x[1]['size'])
-        return device_formatter(sorted(devices, key=size_sort))
+    def report(self, plan):
+        report = self._create_report(plan)
+        print(report)
 
-    def print_help(self):
-        return self._help.format(
-            detected_devices=self.get_devices(),
-        )
-
-    def report(self):
+    def _create_report(self, plan):
         if self.args.format == 'pretty':
-            self.strategy.report_pretty(self.filtered_devices)
-        elif self.args.format == 'json':
-            self.strategy.report_json(self.filtered_devices)
+            report = ''
+            report += templates.total_osds.format(total_osds=len(plan))
+
+            report += templates.osd_component_titles
+            for osd in plan:
+                report += templates.osd_header
+                report += osd.report()
+            return report
         else:
-            raise RuntimeError('report format must be "pretty" or "json"')
-
-    def execute(self):
-        if not self.args.yes:
-            self.strategy.report_pretty(self.filtered_devices)
-            terminal.info('The above OSDs would be created if the operation continues')
-            if not prompt_bool('do you want to proceed? (yes/no)'):
-                devices = ','.join([device.abspath for device in self.args.devices])
-                terminal.error('aborting OSD provisioning for %s' % devices)
-                raise SystemExit(0)
-
-        self.strategy.execute()
-
-    def _get_strategy(self):
-        strategy = get_strategy(self.args, self.args.devices)
-        unused_devices, self.filtered_devices = filter_devices(self.args)
-        if not unused_devices and not self.args.format == 'json':
-            # report nothing changed
-            mlogger.info("All devices are already used by ceph. No OSDs will be created.")
-            raise SystemExit(0)
+            json_report = []
+            for osd in plan:
+                json_report.append(osd.report_json())
+            if self.args.format == 'json':
+                return json.dumps(json_report)
+            elif self.args.format == 'json-pretty':
+                return json.dumps(json_report, indent=4,
+                                  sort_keys=True)
+
+    def _check_slot_args(self):
+        '''
+        checking if -slots args are consistent with other arguments
+        '''
+        if self.args.data_slots and self.args.osds_per_device:
+            if self.args.data_slots < self.args.osds_per_device:
+                raise ValueError('data_slots is smaller then osds_per_device')
+
+    def _sort_rotational_disks(self):
+        '''
+        Helper for legacy auto behaviour.
+        Sorts drives into rotating and non-rotating, the latter being used for
+        db or journal.
+        '''
+        mlogger.warning('DEPRECATION NOTICE')
+        mlogger.warning('You are using the legacy automatic disk sorting behavior')
+        mlogger.warning('The Pacific release will change the default to --no-auto')
+        rotating = []
+        ssd = []
+        for d in self.args.devices:
+            rotating.append(d) if d.rotational else ssd.append(d)
+        if ssd and not rotating:
+            # no need for additional sorting, we'll only deploy standalone on ssds
+            return
+        self.args.devices = rotating
+        if self.args.filestore:
+            self.args.journal_devices = ssd
         else:
-            new_strategy = get_strategy(self.args, unused_devices)
-            if new_strategy and strategy != new_strategy:
-                mlogger.error("Aborting because strategy changed from %s to %s after filtering" % (strategy.type(), new_strategy.type()))
-                raise SystemExit(1)
-
-        self.strategy = strategy.with_auto_devices(self.args, unused_devices)
+            self.args.db_devices = ssd
 
     @decorators.needs_root
     def main(self):
@@ -316,79 +388,241 @@ class Batch(object):
         if not self.args.bluestore and not self.args.filestore:
             self.args.bluestore = True
 
-        if (self.args.no_auto or self.args.db_devices or
-                                  self.args.journal_devices or
-                                  self.args.wal_devices):
-            self._get_explicit_strategy()
-        else:
-            self._get_strategy()
+        if (self.args.auto and not self.args.db_devices and not
+            self.args.wal_devices and not self.args.journal_devices):
+            self._sort_rotational_disks()
+
+        self._check_slot_args()
+
+        ensure_disjoint_device_lists(self.args.devices,
+                                     self.args.db_devices,
+                                     self.args.wal_devices,
+                                     self.args.journal_devices)
+
+        plan = self.get_plan(self.args)
 
         if self.args.report:
-            self.report()
-        else:
-            self.execute()
-
-    def _get_explicit_strategy(self):
-        self._filter_devices()
-        self._ensure_disjoint_device_lists()
-        if self.args.bluestore:
-            if self.db_usable or self.wal_usable:
-                self.strategy = strategies.bluestore.MixedType(
-                    self.args,
-                    self.usable,
-                    self.db_usable,
-                    self.wal_usable)
-            else:
-                self.strategy = strategies.bluestore.SingleType(
-                    self.args,
-                    self.usable)
-        else:
-            if self.journal_usable:
-                self.strategy = strategies.filestore.MixedType(
-                    self.args,
-                    self.usable,
-                    self.journal_usable)
-            else:
-                self.strategy = strategies.filestore.SingleType(
-                    self.args,
-                    self.usable)
+            self.report(plan)
+            return 0
 
+        if not self.args.yes:
+            self.report(plan)
+            terminal.info('The above OSDs would be created if the operation continues')
+            if not prompt_bool('do you want to proceed? (yes/no)'):
+                terminal.error('aborting OSD provisioning')
+                raise SystemExit(0)
 
-    def _filter_devices(self):
-        # filter devices by their available property.
-        # TODO: Some devices are rejected in the argparser already. maybe it
-        # makes sense to unifiy this
-        used_reason = {"reasons": ["Used by ceph already"]}
-        self.filtered_devices = {}
-        for dev_list in ['', 'db_', 'wal_', 'journal_']:
-            dev_list_prop = '{}devices'.format(dev_list)
-            if hasattr(self.args, dev_list_prop):
-                usable_dev_list_prop = '{}usable'.format(dev_list)
-                devs = getattr(self.args, dev_list_prop)
-                usable = [d for d in devs if d.available]
-                setattr(self, usable_dev_list_prop, usable)
-                self.filtered_devices.update({d: used_reason for d in
-                                              getattr(self.args, dev_list_prop)
-                                              if d.used_by_ceph})
-                # only fail if non-interactive, this iteration concerns
-                # non-data devices, there are usable data devices (or not all
-                # data devices were filtered) and non-data devices were filtered
-                # so in short this branch is not taken if all data devices are
-                # filtered
-                if self.args.yes and dev_list and self.usable and devs != usable:
-                    err = '{} devices were filtered in non-interactive mode, bailing out'
-                    if self.args.format == "json" and self.args.report:
-                        # if a json report is requested, report unchanged so idempotency checks
-                        # in ceph-ansible will work
-                        print(json.dumps({"changed": False, "osds": [], "vgs": []}))
-                        raise SystemExit(0)
-                    raise RuntimeError(err.format(len(devs) - len(usable)))
-
-
-    def _ensure_disjoint_device_lists(self):
-        # check that all device lists are disjoint with each other
-        if not(set(self.usable).isdisjoint(set(self.db_usable)) and
-               set(self.usable).isdisjoint(set(self.wal_usable)) and
-               set(self.usable).isdisjoint(set(self.journal_usable)) and
-               set(self.db_usable).isdisjoint(set(self.wal_usable))):
-            raise Exception('Device lists are not disjoint')
+        self._execute(plan)
+
+    def _execute(self, plan):
+        defaults = common.get_default_args()
+        global_args = [
+            'bluestore',
+            'filestore',
+            'dmcrypt',
+            'crush_device_class',
+            'no_systemd',
+        ]
+        defaults.update({arg: getattr(self.args, arg) for arg in global_args})
+        for osd in plan:
+            args = osd.get_args(defaults)
+            if self.args.prepare:
+                p = Prepare([])
+                p.safe_prepare(argparse.Namespace(**args))
+            else:
+                c = Create([])
+                c.create(argparse.Namespace(**args))
+
+
+    def get_plan(self, args):
+        if args.bluestore:
+            plan = self.get_deployment_layout(args, args.devices, args.db_devices,
+                                              args.wal_devices)
+        elif args.filestore:
+            plan = self.get_deployment_layout(args, args.devices, args.journal_devices)
+        return plan
+
+    def get_deployment_layout(self, args, devices, fast_devices=[],
+                              very_fast_devices=[]):
+        '''
+        The methods here are mostly just organization, error reporting and
+        setting up of (default) args. The heavy lifting code for the deployment
+        layout can be found in the static get_*_osds and get_*_fast_allocs
+        functions.
+        '''
+        plan = []
+        phys_devs, lvm_devs = separate_devices_from_lvs(devices)
+        mlogger.debug(('passed data devices: {} physical,'
+                       ' {} LVM').format(len(phys_devs), len(lvm_devs)))
+
+        plan.extend(get_physical_osds(phys_devs, args))
+
+        plan.extend(get_lvm_osds(lvm_devs, args))
+
+        num_osds = len(plan)
+        if num_osds == 0:
+            mlogger.info('All data devices are unavailable')
+            return plan
+        requested_osds = args.osds_per_device * len(phys_devs) + len(lvm_devs)
+
+        fast_type = 'block_db' if args.bluestore else 'journal'
+        fast_allocations = self.fast_allocations(fast_devices,
+                                                 requested_osds,
+                                                 num_osds,
+                                                 fast_type)
+        if fast_devices and not fast_allocations:
+            mlogger.info('{} fast devices were passed, but none are available'.format(len(fast_devices)))
+            return []
+        if fast_devices and not len(fast_allocations) == num_osds:
+            mlogger.error('{} fast allocations != {} num_osds'.format(
+                len(fast_allocations), num_osds))
+            exit(1)
+
+        very_fast_allocations = self.fast_allocations(very_fast_devices,
+                                                      requested_osds,
+                                                      num_osds,
+                                                      'block_wal')
+        if very_fast_devices and not very_fast_allocations:
+            mlogger.info('{} very fast devices were passed, but none are available'.format(len(very_fast_devices)))
+            return []
+        if very_fast_devices and not len(very_fast_allocations) == num_osds:
+            mlogger.error('{} very fast allocations != {} num_osds'.format(
+                len(very_fast_allocations), num_osds))
+            exit(1)
+
+        for osd in plan:
+            if fast_devices:
+                osd.add_fast_device(*fast_allocations.pop(),
+                                    type_=fast_type)
+            if very_fast_devices and args.bluestore:
+                osd.add_very_fast_device(*very_fast_allocations.pop())
+        return plan
+
+    def fast_allocations(self, devices, requested_osds, new_osds, type_):
+        ret = []
+        if not devices:
+            return ret
+        phys_devs, lvm_devs = separate_devices_from_lvs(devices)
+        mlogger.debug(('passed {} devices: {} physical,'
+                       ' {} LVM').format(type_, len(phys_devs), len(lvm_devs)))
+
+        ret.extend(get_lvm_fast_allocs(lvm_devs))
+
+        # fill up uneven distributions across fast devices: 5 osds and 2 fast
+        # devices? create 3 slots on each device rather then deploying
+        # heterogeneous osds
+        if (requested_osds - len(lvm_devs)) % len(phys_devs):
+            fast_slots_per_device = int((requested_osds - len(lvm_devs)) / len(phys_devs)) + 1
+        else:
+            fast_slots_per_device = int((requested_osds - len(lvm_devs)) / len(phys_devs))
+
+
+        ret.extend(get_physical_fast_allocs(phys_devs,
+                                            type_,
+                                            fast_slots_per_device,
+                                            new_osds,
+                                            self.args))
+        return ret
+
+    class OSD(object):
+        '''
+        This class simply stores info about to-be-deployed OSDs and provides an
+        easy way to retrieve the necessary create arguments.
+        '''
+        VolSpec = namedtuple('VolSpec',
+                             ['path',
+                              'rel_size',
+                              'abs_size',
+                              'slots',
+                              'type_'])
+
+        def __init__(self,
+                     data_path,
+                     rel_size,
+                     abs_size,
+                     slots,
+                     id_,
+                     encryption):
+            self.id_ = id_
+            self.data = self.VolSpec(path=data_path,
+                                rel_size=rel_size,
+                                abs_size=abs_size,
+                                slots=slots,
+                                type_='data')
+            self.fast = None
+            self.very_fast = None
+            self.encryption = encryption
+
+        def add_fast_device(self, path, rel_size, abs_size, slots, type_):
+            self.fast = self.VolSpec(path=path,
+                                rel_size=rel_size,
+                                abs_size=abs_size,
+                                slots=slots,
+                                type_=type_)
+
+        def add_very_fast_device(self, path, rel_size, abs_size, slots):
+            self.very_fast = self.VolSpec(path=path,
+                                rel_size=rel_size,
+                                abs_size=abs_size,
+                                slots=slots,
+                                type_='block_wal')
+
+        def _get_osd_plan(self):
+            plan = {
+                'data': self.data.path,
+                'data_size': self.data.abs_size,
+                'encryption': self.encryption,
+            }
+            if self.fast:
+                type_ = self.fast.type_.replace('.', '_')
+                plan.update(
+                    {
+                        type_: self.fast.path,
+                        '{}_size'.format(type_): self.fast.abs_size,
+                    })
+            if self.very_fast:
+                plan.update(
+                    {
+                        'block_wal': self.very_fast.path,
+                        'block_wal_size': self.very_fast.abs_size,
+                    })
+            if self.id_:
+                plan.update({'osd_id': self.id_})
+            return plan
+
+        def get_args(self, defaults):
+            my_defaults = defaults.copy()
+            my_defaults.update(self._get_osd_plan())
+            return my_defaults
+
+        def report(self):
+            report = ''
+            if self.id_:
+                report += templates.osd_reused_id.format(
+                    id_=self.id_)
+            if self.encryption:
+                report += templates.osd_encryption.format(
+                    enc=self.encryption)
+            report += templates.osd_component.format(
+                _type=self.data.type_,
+                path=self.data.path,
+                size=self.data.abs_size,
+                percent=self.data.rel_size)
+            if self.fast:
+                report += templates.osd_component.format(
+                    _type=self.fast.type_,
+                    path=self.fast.path,
+                    size=self.fast.abs_size,
+                    percent=self.fast.rel_size)
+            if self.very_fast:
+                report += templates.osd_component.format(
+                    _type=self.very_fast.type_,
+                    path=self.very_fast.path,
+                    size=self.very_fast.abs_size,
+                    percent=self.very_fast.rel_size)
+            return report
+
+        def report_json(self):
+            # cast all values to string so that the report can be dumped in to
+            # json.dumps
+            return {k: str(v) for k, v in self._get_osd_plan().items()}
index 06fc33541a309ba72113813aa5fb3e5067026023..06369e479d4c72a8731ef63c74f7d406bbec8dd8 100644 (file)
@@ -1,4 +1,4 @@
-from ceph_volume.util import arg_validators
+from ceph_volume.util import arg_validators, disk
 from ceph_volume import process, conf
 from ceph_volume import terminal
 import argparse
@@ -34,6 +34,124 @@ def rollback_osd(args, osd_id=None):
     process.run(cmd)
 
 
+common_args = {
+    '--data': {
+        'help': 'OSD data path. A physical device or logical volume',
+        'required': True,
+        'type': arg_validators.ValidDevice(as_string=True),
+        #'default':,
+        #'type':,
+    },
+    '--data-size': {
+        'help': 'Size of data LV in case a device was passed in --data',
+        'default': '0',
+        'type': disk.Size.parse
+    },
+    '--data-slots': {
+        'help': ('Intended number of slots on data device. The new OSD gets one'
+              'of those slots or 1/nth of the available capacity'),
+        'type': int,
+        'default': 1,
+    },
+    '--osd-id': {
+        'help': 'Reuse an existing OSD id',
+        'default': None,
+    },
+    '--osd-fsid': {
+        'help': 'Reuse an existing OSD fsid',
+        'default': None,
+    },
+    '--cluster-fsid': {
+        'help': 'Specify the cluster fsid, useful when no ceph.conf is available',
+        'default': None,
+    },
+    '--crush-device-class': {
+        'dest': 'crush_device_class',
+        'help': 'Crush device class to assign this OSD to',
+        'default': None,
+    },
+    '--dmcrypt': {
+        'action': 'store_true',
+        'help': 'Enable device encryption via dm-crypt',
+    },
+    '--no-systemd': {
+        'dest': 'no_systemd',
+        'action': 'store_true',
+        'help': 'Skip creating and enabling systemd units and starting OSD services when activating',
+    },
+}
+
+bluestore_args = {
+    '--bluestore': {
+        'action': 'store_true',
+        'help': 'Use the bluestore objectstore',
+    },
+    '--block.db': {
+        'dest': 'block_db',
+        'help': 'Path to bluestore block.db logical volume or device',
+    },
+    '--block.db-size': {
+        'dest': 'block_db_size',
+        'help': 'Size of block.db LV in case device was passed in --block.db',
+        'default': '0',
+        'type': disk.Size.parse
+    },
+    '--block.db-slots': {
+        'dest': 'block_db_slots',
+        'help': ('Intended number of slots on db device. The new OSD gets one'
+              'of those slots or 1/nth of the available capacity'),
+        'type': int,
+        'default': 1,
+    },
+    '--block.wal': {
+        'dest': 'block_wal',
+        'help': 'Path to bluestore block.wal logical volume or device',
+    },
+    '--block.wal-size': {
+        'dest': 'block_wal_size',
+        'help': 'Size of block.wal LV in case device was passed in --block.wal',
+        'default': '0',
+        'type': disk.Size.parse
+    },
+    '--block.wal-slots': {
+        'dest': 'block_wal_slots',
+        'help': ('Intended number of slots on wal device. The new OSD gets one'
+              'of those slots or 1/nth of the available capacity'),
+        'type': int,
+        'default': 1,
+    },
+}
+
+filestore_args = {
+    '--filestore': {
+        'action': 'store_true',
+        'help': 'Use the filestore objectstore',
+    },
+    '--journal': {
+        'help': 'A logical volume (vg_name/lv_name), or path to a device',
+    },
+    '--journal-size': {
+        'help': 'Size of journal LV in case a raw block device was passed in --journal',
+        'default': '0',
+        'type': disk.Size.parse
+    },
+    '--journal-slots': {
+        'help': ('Intended number of slots on journal device. The new OSD gets one'
+              'of those slots or 1/nth of the available capacity'),
+        'type': int,
+        'default': 1,
+    },
+}
+
+def get_default_args():
+    defaults = {}
+    def format_name(name):
+        return name.strip('-').replace('-', '_').replace('.', '_')
+    for argset in (common_args, filestore_args, bluestore_args):
+        defaults.update({format_name(name): val.get('default', None) for name, val in argset.items()})
+    return defaults
+
+
 def common_parser(prog, description):
     """
     Both prepare and create share the same parser, those are defined here to
@@ -45,128 +163,17 @@ def common_parser(prog, description):
         description=description,
     )
 
-    required_group = parser.add_argument_group('required arguments')
     filestore_group = parser.add_argument_group('filestore')
     bluestore_group = parser.add_argument_group('bluestore')
 
-    required_group.add_argument(
-        '--data',
-        required=True,
-        type=arg_validators.ValidDevice(as_string=True),
-        help='OSD data path. A physical device or logical volume',
-    )
-
-    required_group.add_argument(
-        '--data-size',
-        help='Size of data LV in case a device was passed in --data',
-        default=0,
-    )
+    for name, kwargs in common_args.items():
+        parser.add_argument(name, **kwargs)
 
-    required_group.add_argument(
-        '--data-slots',
-        help=('Intended number of slots on data device. The new OSD gets one'
-              'of those slots or 1/nth of the available capacity'),
-        default=1,
-    )
+    for name, kwargs in bluestore_args.items():
+        bluestore_group.add_argument(name, **kwargs)
 
-    filestore_group.add_argument(
-        '--filestore',
-        action='store_true',
-        help='Use the filestore objectstore',
-    )
-
-    filestore_group.add_argument(
-        '--journal',
-        help='(REQUIRED) A logical volume (vg_name/lv_name), or path to a device',
-    )
-
-    filestore_group.add_argument(
-        '--journal-size',
-        help='Size of journal LV in case a raw block device was passed in --journal',
-        default=0,
-    )
-
-    bluestore_group.add_argument(
-        '--bluestore',
-        action='store_true',
-        help='Use the bluestore objectstore',
-    )
-
-    bluestore_group.add_argument(
-        '--block.db',
-        dest='block_db',
-        help='Path to bluestore block.db logical volume or device',
-    )
-
-    bluestore_group.add_argument(
-        '--block.db-size',
-        dest='block_db_size',
-        help='Size of block.db LV in case device was passed in --block.db',
-        default=0,
-    )
-
-    required_group.add_argument(
-        '--block.db-slots',
-        dest='block_db_slots',
-        help=('Intended number of slots on db device. The new OSD gets one'
-              'of those slots or 1/nth of the available capacity'),
-        default=1,
-    )
-
-    bluestore_group.add_argument(
-        '--block.wal',
-        dest='block_wal',
-        help='Path to bluestore block.wal logical volume or device',
-    )
-
-    bluestore_group.add_argument(
-        '--block.wal-size',
-        dest='block_wal_size',
-        help='Size of block.wal LV in case device was passed in --block.wal',
-        default=0,
-    )
-
-    required_group.add_argument(
-        '--block.wal-slots',
-        dest='block_wal_slots',
-        help=('Intended number of slots on wal device. The new OSD gets one'
-              'of those slots or 1/nth of the available capacity'),
-        default=1,
-    )
-
-    parser.add_argument(
-        '--osd-id',
-        help='Reuse an existing OSD id',
-    )
-
-    parser.add_argument(
-        '--osd-fsid',
-        help='Reuse an existing OSD fsid',
-    )
-
-    parser.add_argument(
-        '--cluster-fsid',
-        help='Specify the cluster fsid, useful when no ceph.conf is available',
-    )
-
-    parser.add_argument(
-        '--crush-device-class',
-        dest='crush_device_class',
-        help='Crush device class to assign this OSD to',
-    )
-
-    parser.add_argument(
-        '--dmcrypt',
-        action='store_true',
-        help='Enable device encryption via dm-crypt',
-    )
-
-    parser.add_argument(
-        '--no-systemd',
-        dest='no_systemd',
-        action='store_true',
-        help='Skip creating and enabling systemd units and starting OSD services when activating',
-    )
+    for name, kwargs in filestore_args.items():
+        filestore_group.add_argument(name, **kwargs)
 
     # Do not parse args, so that consumers can do something before the args get
     # parsed triggering argparse behavior
index f910baa826827b16d08a0099f8db37f9c5a5253f..3ef3c1117d2797d925c282b74de7926bf4c88505 100644 (file)
@@ -13,10 +13,10 @@ from . import batch
 
 class LVM(object):
 
-    help = 'Use LVM and LVM-based technologies like dmcache to deploy OSDs'
+    help = 'Use LVM and LVM-based technologies to deploy OSDs'
 
     _help = dedent("""
-    Use LVM and LVM-based technologies like dmcache to deploy OSDs
+    Use LVM and LVM-based technologies to deploy OSDs
 
     {sub_help}
     """)
index 26ea2bf2198ea1fa258ec997f23dbb22ab6fdd74..f0c3959a6272485bdf0cf5e598aff94e6c09141c 100644 (file)
@@ -135,7 +135,7 @@ class Prepare(object):
             raise RuntimeError('unable to use device')
         return uuid
 
-    def setup_device(self, device_type, device_name, tags, size):
+    def setup_device(self, device_type, device_name, tags, size, slots):
         """
         Check if ``device`` is an lv, if so, set the tags, making sure to
         update the tags with the lv_uuid and lv_path which the incoming tags
@@ -157,36 +157,41 @@ class Prepare(object):
             lv = None
 
         if lv:
-            uuid = lv.lv_uuid
+            lv_uuid = lv.lv_uuid
             path = lv.lv_path
-            tags['ceph.%s_uuid' % device_type] = uuid
+            tags['ceph.%s_uuid' % device_type] = lv_uuid
             tags['ceph.%s_device' % device_type] = path
             lv.set_tags(tags)
         elif disk.is_device(device_name):
             # We got a disk, create an lv
             lv_type = "osd-{}".format(device_type)
-            uuid = system.generate_uuid()
-            tags['ceph.{}_uuid'.format(device_type)] = uuid
+            name_uuid = system.generate_uuid()
             kwargs = {
                 'device': device_name,
                 'tags': tags,
+                'slots': slots
             }
+            #TODO use get_block_db_size and co here to get configured size in
+            #conf file
             if size != 0:
-                kwargs['size'] = disk.Size.parse(size)
+                kwargs['size'] = size
             lv = api.create_lv(
                 lv_type,
-                uuid,
+                name_uuid,
                 **kwargs)
             path = lv.lv_path
             tags['ceph.{}_device'.format(device_type)] = path
+            tags['ceph.{}_uuid'.format(device_type)] = lv.lv_uuid
+            lv_uuid = lv.lv_uuid
             lv.set_tags(tags)
         else:
             # otherwise assume this is a regular disk partition
-            uuid = self.get_ptuuid(device_name)
+            name_uuid = self.get_ptuuid(device_name)
             path = device_name
-            tags['ceph.%s_uuid' % device_type] = uuid
+            tags['ceph.%s_uuid' % device_type] = name_uuid
             tags['ceph.%s_device' % device_type] = path
-        return path, uuid, tags
+            lv_uuid = name_uuid
+        return path, lv_uuid, tags
 
     def prepare_data_device(self, device_type, osd_uuid):
         """
@@ -205,10 +210,11 @@ class Prepare(object):
             lv_name_prefix = "osd-{}".format(device_type)
             kwargs = {'device': device,
                       'tags': {'ceph.type': device_type},
+                      'slots': self.args.data_slots,
                      }
             logger.debug('data device size: {}'.format(self.args.data_size))
             if self.args.data_size != 0:
-                kwargs['size'] = disk.Size.parse(self.args.data_size)
+                kwargs['size'] = self.args.data_size
             return api.create_lv(
                 lv_name_prefix,
                 osd_uuid,
@@ -293,10 +299,29 @@ class Prepare(object):
             'ceph.osdspec_affinity': prepare_utils.get_osdspec_affinity()
         }
         if self.args.filestore:
-            #TODO: allow auto creation of journal on passed device, only works
-            # when physical device is passed, not LV
             if not self.args.journal:
-                raise RuntimeError('--journal is required when using --filestore')
+                logger.info(('no journal was specifed, creating journal lv '
+                             'on {}').format(self.args.data))
+                self.args.journal = self.args.data
+                self.args.journal_size = disk.Size(g=5)
+                # need to adjust data size/slots for colocated journal
+                if self.args.data_size:
+                    self.args.data_size -= self.args.journal_size
+                if self.args.data_slots == 1:
+                    self.args.data_slots = 0
+                else:
+                    raise RuntimeError('Can\'t handle multiple filestore OSDs '
+                                       'with colocated journals yet. Please '
+                                       'create journal LVs manually')
+            tags['ceph.cephx_lockbox_secret'] = cephx_lockbox_secret
+            tags['ceph.encrypted'] = encrypted
+
+            journal_device, journal_uuid, tags = self.setup_device(
+                'journal',
+                self.args.journal,
+                tags,
+                self.args.journal_size,
+                self.args.journal_slots)
 
             try:
                 vg_name, lv_name = self.args.data.split('/')
@@ -310,15 +335,13 @@ class Prepare(object):
 
             tags['ceph.data_device'] = data_lv.lv_path
             tags['ceph.data_uuid'] = data_lv.lv_uuid
-            tags['ceph.cephx_lockbox_secret'] = cephx_lockbox_secret
-            tags['ceph.encrypted'] = encrypted
             tags['ceph.vdo'] = api.is_vdo(data_lv.lv_path)
-
-            journal_device, journal_uuid, tags = self.setup_device(
-                'journal', self.args.journal, tags, self.args.journal_size)
-
             tags['ceph.type'] = 'data'
             data_lv.set_tags(tags)
+            if not journal_device.startswith('/'):
+                # we got a journal lv, set rest of the tags
+                api.get_first_lv(filters={'lv_name': lv_name,
+                                          'vg_name': vg_name}).set_tags(tags)
 
             prepare_filestore(
                 data_lv.lv_path,
@@ -346,9 +369,17 @@ class Prepare(object):
             tags['ceph.vdo'] = api.is_vdo(block_lv.lv_path)
 
             wal_device, wal_uuid, tags = self.setup_device(
-                'wal', self.args.block_wal, tags, self.args.block_wal_size)
+                'wal',
+                self.args.block_wal,
+                tags,
+                self.args.block_wal_size,
+                self.args.block_wal_slots)
             db_device, db_uuid, tags = self.setup_device(
-                'db', self.args.block_db, tags, self.args.block_db_size)
+                'db',
+                self.args.block_db,
+                tags,
+                self.args.block_db_size,
+                self.args.block_db_slots)
 
             tags['ceph.type'] = 'block'
             block_lv.set_tags(tags)
diff --git a/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/__init__.py b/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/__init__.py
deleted file mode 100644 (file)
index cb16d11..0000000
+++ /dev/null
@@ -1 +0,0 @@
-from . import bluestore, filestore # noqa
diff --git a/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py b/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py
deleted file mode 100644 (file)
index cdaabbe..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-from __future__ import print_function
-from ceph_volume.util import disk, prepare, str_to_int
-from ceph_volume.api import lvm
-from . import validators
-from .strategies import Strategy
-from .strategies import MixedStrategy
-from ceph_volume.devices.lvm.create import Create
-from ceph_volume.devices.lvm.prepare import Prepare
-from ceph_volume.util import templates, system
-from ceph_volume.exceptions import SizeAllocationError
-
-
-class SingleType(Strategy):
-    """
-    Support for all SSDs, or all HDDS
-    """
-
-    def __init__(self, args, data_devs):
-        super(SingleType, self).__init__(args, data_devs)
-        self.validate_compute()
-
-    @classmethod
-    def with_auto_devices(cls, args, devices):
-        #SingleType only deploys standalone OSDs
-        return cls(args, devices)
-
-    @staticmethod
-    def type():
-        return "bluestore.SingleType"
-
-    def report_pretty(self, filtered_devices):
-        string = ""
-        if filtered_devices:
-            string += templates.filtered_devices(filtered_devices)
-        string += templates.total_osds.format(
-            total_osds=self.total_osds,
-        )
-        string += templates.osd_component_titles
-
-        for osd in self.computed['osds']:
-            string += templates.osd_header
-            if 'osd_id' in osd:
-                string += templates.osd_reused_id.format(
-                    id_=osd['osd_id'])
-            string += templates.osd_component.format(
-                _type='[data]',
-                path=osd['data']['path'],
-                size=osd['data']['human_readable_size'],
-                percent=osd['data']['percentage'],
-            )
-
-        print(string)
-
-    def validate(self):
-        """
-        Ensure that the minimum requirements for this type of scenario is
-        met, raise an error if the provided devices would not work
-        """
-        # validate minimum size for all devices
-        validators.minimum_device_size(
-            self.data_devs, osds_per_device=self.osds_per_device
-        )
-
-        # make sure that data devices do not have any LVs
-        validators.no_lvm_membership(self.data_devs)
-
-        if self.osd_ids:
-            self._validate_osd_ids()
-
-    def compute(self):
-        """
-        Go through the rules needed to properly size the lvs, return
-        a dictionary with the result
-        """
-        osds = self.computed['osds']
-        for device in self.data_devs:
-            extents = lvm.sizing(device.lvm_size.b, parts=self.osds_per_device)
-            for _i in range(self.osds_per_device):
-                osd = {'data': {}, 'block.db': {}}
-                osd['data']['path'] = device.abspath
-                osd['data']['size'] = extents['sizes']
-                osd['data']['parts'] = extents['parts']
-                osd['data']['percentage'] = 100 / self.osds_per_device
-                osd['data']['human_readable_size'] = str(disk.Size(gb=extents['sizes']))
-                osds.append(osd)
-
-        self.computed['changed'] = len(osds) > 0
-
-    def execute(self):
-        """
-        Create vgs/lvs from the incoming set of devices, assign their roles
-        (block, block.db, block.wal, etc..) and offload the OSD creation to
-        ``lvm create``
-        """
-        osd_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])
-
-        # create the vgs first, mapping them to the device path
-        for osd in self.computed['osds']:
-            vg = osd_vgs.get(osd['data']['path'])
-            if not vg:
-                vg = lvm.create_vg(osd['data']['path'])
-                osd_vgs[osd['data']['path']] = {'vg': vg, 'parts': osd['data']['parts']}
-
-        # create the lvs from the vgs captured in the beginning
-        for create in osd_vgs.values():
-            lvs = lvm.create_lvs(create['vg'], parts=create['parts'], name_prefix='osd-data')
-            vg_name = create['vg'].name
-            for lv in lvs:
-                command = ['--bluestore', '--data']
-                command.append('%s/%s' % (vg_name, lv.name))
-                if self.args.dmcrypt:
-                    command.append('--dmcrypt')
-                if self.args.no_systemd:
-                    command.append('--no-systemd')
-                if self.args.crush_device_class:
-                    command.extend(['--crush-device-class', self.args.crush_device_class])
-
-                if self.osd_ids:
-                    command.extend(['--osd-id', self.osd_ids.pop(0)])
-
-                if self.args.prepare:
-                    Prepare(command).main()
-                else:
-                    Create(command).main()
-
-
-class MixedType(MixedStrategy):
-
-    def __init__(self, args, data_devs, db_devs, wal_devs=[]):
-        super(MixedType, self).__init__(args, data_devs, db_devs, wal_devs)
-        self.block_db_size = self.get_block_db_size()
-        self.block_wal_size = self.get_block_wal_size()
-        self.common_vg = None
-        self.common_wal_vg = None
-        self.dbs_needed = len(self.data_devs) * self.osds_per_device
-        self.wals_needed = self.dbs_needed
-        self.use_large_block_db = self.use_large_block_wal = False
-        self.validate_compute()
-
-    @classmethod
-    def with_auto_devices(cls, args, devices):
-        data_devs, db_devs = cls.split_devices_rotational(devices)
-        return cls(args, data_devs, db_devs)
-
-    @staticmethod
-    def type():
-        return "bluestore.MixedType"
-
-    def get_block_db_size(self):
-        if self.args.block_db_size:
-            return disk.Size(b=self.args.block_db_size)
-        else:
-            return prepare.get_block_db_size(lv_format=False) or disk.Size(b=0)
-
-    def get_block_wal_size(self):
-        if self.args.block_wal_size:
-            return disk.Size(b=self.args.block_wal_size)
-        else:
-            return prepare.get_block_wal_size(lv_format=False) or disk.Size(b=0)
-
-    def report_pretty(self, filtered_devices):
-        string = ""
-        if filtered_devices:
-            string += templates.filtered_devices(filtered_devices)
-        string += templates.total_osds.format(
-            total_osds=len(self.data_devs) * self.osds_per_device
-        )
-
-        if self.db_or_journal_devs:
-            vg_extents = lvm.sizing(self.total_available_db_space.b, parts=self.dbs_needed)
-            db_size = str(disk.Size(b=(vg_extents['sizes'])))
-
-            string += templates.ssd_volume_group.format(
-                target='block.db',
-                total_lv_size=str(self.total_available_db_space),
-                total_lvs=vg_extents['parts'] * self.osds_per_device,
-                block_lv_size=db_size,
-                block_db_devices=', '.join([ssd.abspath for ssd in
-                                            self.db_or_journal_devs]),
-                lv_size=self.block_db_size or str(disk.Size(b=(vg_extents['sizes']))),
-                total_osds=len(self.data_devs)
-            )
-
-        if self.wal_devs:
-            wal_vg_extents = lvm.sizing(self.total_available_wal_space.b,
-                                        parts=self.wals_needed)
-            wal_size = str(disk.Size(b=(wal_vg_extents['sizes'])))
-            string += templates.ssd_volume_group.format(
-                target='block.wal',
-                total_lv_size=str(self.total_available_wal_space),
-                total_lvs=wal_vg_extents['parts'] * self.osds_per_device,
-                block_lv_size=wal_size,
-                block_db_devices=', '.join([dev.abspath for dev in
-                                            self.wal_devs]),
-                lv_size=self.block_wal_size or str(disk.Size(b=(wal_vg_extents['sizes']))),
-                total_osds=len(self.data_devs)
-            )
-
-        string += templates.osd_component_titles
-        for osd in self.computed['osds']:
-            string += templates.osd_header
-            if 'osd_id' in osd:
-                string += templates.osd_reused_id.format(
-                    id_=osd['osd_id'])
-            string += templates.osd_component.format(
-                _type='[data]',
-                path=osd['data']['path'],
-                size=osd['data']['human_readable_size'],
-                percent=osd['data']['percentage'])
-
-            if 'block.db' in osd:
-                string += templates.osd_component.format(
-                    _type='[block.db]',
-                    path=osd['block.db']['path'],
-                    size=osd['block.db']['human_readable_size'],
-                    percent=osd['block.db']['percentage'])
-
-            if 'block.wal' in osd:
-                string += templates.osd_component.format(
-                    _type='[block.wal]',
-                    path=osd['block.wal']['path'],
-                    size=osd['block.wal']['human_readable_size'],
-                    percent=osd['block.wal']['percentage'])
-
-        print(string)
-
-    def compute(self):
-        osds = self.computed['osds']
-
-        if self.data_devs and self.db_or_journal_devs:
-            if not self.common_vg:
-                # there isn't a common vg, so a new one must be created with all
-                # the blank db devs
-                self.computed['vg'] = {
-                    'devices': ", ".join([ssd.abspath for ssd in self.blank_db_devs]),
-                    'parts': self.dbs_needed,
-                    'percentages': self.vg_extents['percentages'],
-                    'sizes': self.block_db_size.b.as_int(),
-                    'size': self.total_blank_db_dev_size.b.as_int(),
-                    'human_readable_sizes': str(self.block_db_size),
-                    'human_readable_size': str(self.total_available_db_space),
-                }
-                vg_name = 'vg/lv'
-            else:
-                vg_name = self.common_vg.name
-
-        if self.data_devs and self.wal_devs:
-            if not self.common_wal_vg:
-                # there isn't a common vg, so a new one must be created with all
-                # the blank wal devs
-                self.computed['wal_vg'] = {
-                    'devices': ", ".join([dev.abspath for dev in self.blank_wal_devs]),
-                    'parts': self.wals_needed,
-                    'percentages': self.wal_vg_extents['percentages'],
-                    'sizes': self.block_wal_size.b.as_int(),
-                    'size': self.total_blank_wal_dev_size.b.as_int(),
-                    'human_readable_sizes': str(self.block_wal_size),
-                    'human_readable_size': str(self.total_available_wal_space),
-                }
-                wal_vg_name = 'vg/lv'
-            else:
-                wal_vg_name = self.common_wal_vg.name
-
-        for device in self.data_devs:
-            for hdd in range(self.osds_per_device):
-                osd = {'data': {}}
-                osd['data']['path'] = device.abspath
-                osd['data']['size'] = device.lvm_size.b / self.osds_per_device
-                osd['data']['percentage'] = 100 / self.osds_per_device
-                osd['data']['human_readable_size'] = str(
-                    disk.Size(b=device.lvm_size.b) / self.osds_per_device
-                )
-
-                if self.db_or_journal_devs:
-                    osd['block.db'] = {}
-                    osd['block.db']['path'] = 'vg: %s' % vg_name
-                    osd['block.db']['size'] = int(self.block_db_size.b)
-                    osd['block.db']['human_readable_size'] = str(self.block_db_size)
-                    osd['block.db']['percentage'] = self.vg_extents['percentages']
-
-                if self.wal_devs:
-                    osd['block.wal'] = {}
-                    osd['block.wal']['path'] = 'vg: %s' % wal_vg_name
-                    osd['block.wal']['size'] = int(self.block_wal_size.b)
-                    osd['block.wal']['human_readable_size'] = str(self.block_wal_size)
-                    osd['block.wal']['percentage'] = self.wal_vg_extents['percentages']
-
-                if self.osd_ids:
-                    osd['osd_id'] = self.osd_ids.pop(0)
-
-                osds.append(osd)
-
-        self.computed['changed'] = len(osds) > 0
-
-    def execute(self):
-        """
-        Create vgs/lvs from the incoming set of devices, assign their roles
-        (block, block.db, block.wal, etc..) and offload the OSD creation to
-        ``lvm create``
-        """
-        data_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])
-
-        # create 1 vg per data device first, mapping them to the device path,
-        # when the lv gets created later, it can create as many as needed (or
-        # even just 1)
-        for osd in self.computed['osds']:
-            vg = data_vgs.get(osd['data']['path'])
-            if not vg:
-                vg = lvm.create_vg(osd['data']['path'], name_prefix='ceph-block')
-                data_vgs[osd['data']['path']] = vg
-
-        if self.data_devs and self.db_or_journal_devs:
-            blank_db_dev_paths = [d.abspath for d in self.blank_db_devs]
-
-            # no common vg is found, create one with all the blank SSDs
-            if not self.common_vg:
-                db_vg = lvm.create_vg(blank_db_dev_paths, name_prefix='ceph-block-dbs')
-            elif self.common_vg and blank_db_dev_paths:
-                # if a common vg exists then extend it with any blank ssds
-                db_vg = lvm.extend_vg(self.common_vg, blank_db_dev_paths)
-            else:
-                # one common vg with nothing else to extend can be used directly,
-                # either this is one device with one vg, or multiple devices with the
-                # same vg
-                db_vg = self.common_vg
-
-            if self.use_large_block_db:
-                # make the block.db lvs as large as possible
-                vg_free_count = str_to_int(db_vg.vg_free_count)
-                db_lv_extents = int(vg_free_count / self.dbs_needed)
-            else:
-                db_lv_extents = db_vg.sizing(size=self.block_db_size.gb.as_int())['extents']
-
-        if self.data_devs and self.wal_devs:
-            blank_wal_dev_paths = [d.abspath for d in self.blank_wal_devs]
-
-            if not self.common_wal_vg:
-                wal_vg = lvm.create_vg(blank_wal_dev_paths,
-                                      name_prefix='ceph-block-wals')
-            elif self.common_wal_vg and blank_wal_dev_paths:
-                wal_vg = lvm.extend_vg(self.common_wal_vg, blank_wal_dev_paths)
-            else:
-                wal_vg = self.common_wal_vg
-
-            if self.use_large_block_wal:
-                # make the block.db lvs as large as possible
-                vg_free_count = str_to_int(wal_vg.vg_free_count)
-                wal_lv_extents = int(vg_free_count / self.wals_needed)
-            else:
-                wal_lv_extents = wal_vg.sizing(size=self.block_wal_size.gb.as_int())['extents']
-
-        # create the data lvs, and create the OSD with an lv from the common
-        # block.db vg from before
-        for osd in self.computed['osds']:
-            data_path = osd['data']['path']
-            data_vg = data_vgs[data_path]
-            data_lv_extents = data_vg.sizing(parts=self.osds_per_device)['extents']
-            data_uuid = system.generate_uuid()
-            data_lv = lvm.create_lv(
-                'osd-block', data_uuid, vg=data_vg, extents=data_lv_extents)
-            command = [
-                '--bluestore',
-                '--data', "%s/%s" % (data_lv.vg_name, data_lv.name),
-            ]
-            if 'block.db' in osd:
-                db_uuid = system.generate_uuid()
-                db_lv = lvm.create_lv(
-                    'osd-block-db', db_uuid, vg=db_vg, extents=db_lv_extents)
-                command.extend([ '--block.db',
-                                '{}/{}'.format(db_lv.vg_name, db_lv.name)])
-            if 'block.wal' in osd:
-                wal_uuid = system.generate_uuid()
-                wal_lv = lvm.create_lv(
-                    'osd-block-wal', wal_uuid, vg=wal_vg, extents=wal_lv_extents)
-                command.extend(
-                    ['--block.wal',
-                     '{}/{}'.format(wal_lv.vg_name, wal_lv.name)
-                    ])
-            if self.args.dmcrypt:
-                command.append('--dmcrypt')
-            if self.args.no_systemd:
-                command.append('--no-systemd')
-            if self.args.crush_device_class:
-                command.extend(['--crush-device-class', self.args.crush_device_class])
-            if 'osd_id' in osd:
-                command.extend(['--osd-id', osd['osd_id']])
-
-            if self.args.prepare:
-                Prepare(command).main()
-            else:
-                Create(command).main()
-
-    def validate(self):
-        """
-        HDDs represent data devices, and solid state devices are for block.db,
-        make sure that the number of data devices would have enough LVs and
-        those LVs would be large enough to accommodate a block.db
-        """
-        # validate minimum size for all devices
-        validators.minimum_device_size(self.data_devs + self.db_or_journal_devs,
-                                       osds_per_device=self.osds_per_device)
-        validators.minimum_device_size(self.wal_devs,
-                                      osds_per_device=self.osds_per_device,
-                                      min_size=1)
-
-        # make sure that data devices do not have any LVs
-        validators.no_lvm_membership(self.data_devs)
-
-        if self.data_devs and self.db_or_journal_devs:
-            self._validate_db_devs()
-
-        if self.data_devs and self.wal_devs:
-            self._validate_wal_devs()
-
-        if self.osd_ids:
-            self._validate_osd_ids()
-
-    def _validate_db_devs(self):
-        # do not allow non-common VG to continue
-        validators.has_common_vg(self.db_or_journal_devs)
-
-        # find the common VG to calculate how much is available
-        self.common_vg = self.get_common_vg(self.db_or_journal_devs)
-
-        # find how many block.db LVs are possible from the common VG
-        if self.common_vg:
-            common_vg_size = disk.Size(gb=self.common_vg.free)
-        else:
-            common_vg_size = disk.Size(gb=0)
-
-        # non-VG SSDs
-        vg_members = set([d for d in self.db_or_journal_devs if d.is_lvm_member])
-        self.blank_db_devs = set(self.db_or_journal_devs).difference(vg_members)
-        self.total_blank_db_dev_size = disk.Size(b=0)
-        for blank_db_dev in self.blank_db_devs:
-            self.total_blank_db_dev_size += disk.Size(b=blank_db_dev.lvm_size.b)
-
-        self.total_available_db_space = self.total_blank_db_dev_size + common_vg_size
-
-        # If not configured, we default to 0, which is really "use as much as
-        # possible" captured by the `else` condition
-        if self.block_db_size.gb > 0:
-            try:
-                self.vg_extents = lvm.sizing(
-                    self.total_available_db_space.b, size=self.block_db_size.b * self.osds_per_device
-                )
-            except SizeAllocationError:
-                msg = "Not enough space in fast devices (%s) to create %s x %s block.db LV"
-                raise RuntimeError(
-                    msg % (self.total_available_db_space, self.osds_per_device, self.block_db_size)
-                )
-        else:
-            self.vg_extents = lvm.sizing(
-                self.total_available_db_space.b, parts=self.dbs_needed
-            )
-
-        # validate that number of block.db LVs possible are enough for number of
-        # OSDs proposed
-        if self.total_available_db_space.b == 0:
-            msg = "No space left in fast devices to create block.db LVs"
-            raise RuntimeError(msg)
-
-        # bluestore_block_db_size was unset, so we must set this to whatever
-        # size we get by dividing the total available space for block.db LVs
-        # into the number of block.db LVs needed (i.e. "as large as possible")
-        if self.block_db_size.b == 0:
-            self.block_db_size = self.total_available_db_space / self.dbs_needed
-            self.use_large_block_db = True
-
-        total_dbs_possible = self.total_available_db_space / self.block_db_size
-
-        if self.dbs_needed > total_dbs_possible:
-            msg = "Not enough space (%s) to create %s x %s block.db LVs" % (
-                self.total_available_db_space, self.dbs_needed, self.block_db_size,
-            )
-            raise RuntimeError(msg)
-
-    def _validate_wal_devs(self):
-        # do not allow non-common VG to continue
-        validators.has_common_vg(self.wal_devs)
-
-        # find the common VG to calculate how much is available
-        self.common_wal_vg = self.get_common_vg(self.wal_devs)
-
-        # find how many block.wal LVs are possible from the common VG
-        if self.common_wal_vg:
-            common_vg_size = disk.Size(gb=self.common_wal_vg.free)
-        else:
-            common_vg_size = disk.Size(gb=0)
-
-        # non-VG SSDs
-        vg_members = set([d for d in self.wal_devs if d.is_lvm_member])
-        self.blank_wal_devs = set(self.wal_devs).difference(vg_members)
-        self.total_blank_wal_dev_size = disk.Size(b=0)
-        for blank_wal_dev in self.blank_wal_devs:
-            self.total_blank_wal_dev_size += disk.Size(b=blank_wal_dev.lvm_size.b)
-
-        self.total_available_wal_space = self.total_blank_wal_dev_size + common_vg_size
-
-        # If not configured, we default to 0, which is really "use as much as
-        # possible" captured by the `else` condition
-        if self.block_wal_size.gb > 0:
-            try:
-                self.vg_extents = lvm.sizing(
-                    self.total_available_wal_space.b, size=self.block_wal_size.b * self.osds_per_device
-                )
-            except SizeAllocationError:
-                msg = "Not enough space in fast devices (%s) to create %s x %s block.wal LV"
-                raise RuntimeError(
-                    msg % (self.total_available_wal_space,
-                           self.osds_per_device, self.block_wal_size)
-                )
-        else:
-            self.wal_vg_extents = lvm.sizing(
-                self.total_available_wal_space.b, parts=self.wals_needed
-            )
-
-        # validate that number of block.wal LVs possible are enough for number of
-        # OSDs proposed
-        if self.total_available_wal_space.b == 0:
-            msg = "No space left in fast devices to create block.wal LVs"
-            raise RuntimeError(msg)
-
-        # bluestore_block_wal_size was unset, so we must set this to whatever
-        # size we get by dividing the total available space for block.wal LVs
-        # into the number of block.wal LVs needed (i.e. "as large as possible")
-        if self.block_wal_size.b == 0:
-            self.block_wal_size = self.total_available_wal_space / self.wals_needed
-            self.use_large_block_wal = True
-
-        total_wals_possible = self.total_available_wal_space / self.block_wal_size
-
-        if self.wals_needed > total_wals_possible:
-            msg = "Not enough space (%s) to create %s x %s block.wal LVs" % (
-                self.total_available_wal_space, self.wals_needed,
-                self.block_wal_size,
-            )
-            raise RuntimeError(msg)
-
diff --git a/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py b/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py
deleted file mode 100644 (file)
index bc10473..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-from __future__ import print_function
-from ceph_volume.util import disk, prepare
-from ceph_volume.api import lvm
-from . import validators
-from .strategies import Strategy
-from .strategies import MixedStrategy
-from ceph_volume.devices.lvm.create import Create
-from ceph_volume.devices.lvm.prepare import Prepare
-from ceph_volume.util import templates, system
-from ceph_volume.exceptions import SizeAllocationError
-
-
-def get_journal_size(args):
-    """
-    Helper for Filestore strategies, to prefer the --journal-size value from
-    the CLI over anything that might be in a ceph configuration file (if any).
-    """
-    if args.journal_size:
-        return disk.Size(mb=args.journal_size)
-    else:
-        return prepare.get_journal_size(lv_format=False)
-
-
-class SingleType(Strategy):
-    """
-    Support for all SSDs, or all HDDs, data and journal LVs will be colocated
-    in the same device
-    """
-
-
-    def __init__(self, args, data_devs):
-        super(SingleType, self).__init__(args, data_devs)
-        self.journal_size = get_journal_size(args)
-        self.validate_compute()
-
-    @classmethod
-    def with_auto_devices(cls, args, devices):
-        return cls(args, devices)
-
-    @staticmethod
-    def type():
-        return "filestore.SingleType"
-
-    def report_pretty(self, filtered_devices):
-        string = ""
-        if filtered_devices:
-            string += templates.filtered_devices(filtered_devices)
-        string += templates.total_osds.format(
-            total_osds=self.total_osds
-        )
-        string += templates.osd_component_titles
-
-        for osd in self.computed['osds']:
-            string += templates.osd_header
-            if 'osd_id' in osd:
-                string += templates.osd_reused_id.format(
-                    id_=osd['osd_id'])
-            string += templates.osd_component.format(
-                _type='[data]',
-                path=osd['data']['path'],
-                size=osd['data']['human_readable_size'],
-                percent=osd['data']['percentage'],
-            )
-            string += templates.osd_component.format(
-                _type='[journal]',
-                path=osd['journal']['path'],
-                size=osd['journal']['human_readable_size'],
-                percent=osd['journal']['percentage'],
-            )
-
-        print(string)
-
-    def validate(self):
-        """
-        Ensure that the minimum requirements for this type of scenario is
-        met, raise an error if the provided devices would not work
-        """
-        # validate minimum size for all devices
-        validators.minimum_device_size(self.data_devs, osds_per_device=self.osds_per_device)
-
-        # validate collocation
-        validators.minimum_device_collocated_size(
-            self.data_devs, self.journal_size, osds_per_device=self.osds_per_device
-        )
-
-        # make sure that data devices do not have any LVs
-        validators.no_lvm_membership(self.data_devs)
-
-        if self.osd_ids:
-            self._validate_osd_ids()
-
-    def compute(self):
-        """
-        Go through the rules needed to properly size the lvs, return
-        a dictionary with the result
-        """
-        # chose whichever is the one group we have to compute against
-        osds = self.computed['osds']
-        for device in self.data_devs:
-            for osd in range(self.osds_per_device):
-                device_size = disk.Size(b=device.lvm_size.b)
-                osd_size = device_size / self.osds_per_device
-                journal_size = self.journal_size
-                data_size = osd_size - journal_size
-                data_percentage = data_size * 100 / device_size
-                osd = {'data': {}, 'journal': {}}
-                osd['data']['path'] = device.abspath
-                osd['data']['size'] = data_size.b.as_int()
-                osd['data']['parts'] = self.osds_per_device
-                osd['data']['percentage'] = int(data_percentage)
-                osd['data']['human_readable_size'] = str(data_size)
-                osd['journal']['path'] = device.abspath
-                osd['journal']['size'] = journal_size.b.as_int()
-                osd['journal']['percentage'] = int(100 - data_percentage)
-                osd['journal']['human_readable_size'] = str(journal_size)
-
-                if self.osd_ids:
-                    osd['osd_id'] = self.osd_ids.pop()
-
-                osds.append(osd)
-
-        self.computed['changed'] = len(osds) > 0
-
-    def execute(self):
-        """
-        Create vgs/lvs from the incoming set of devices, assign their roles
-        (data, journal) and offload the OSD creation to ``lvm create``
-        """
-        device_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])
-
-        # create 1 vg per data device first, mapping them to the device path,
-        # when the lvs get created later, it can create as many as needed,
-        # including the journals since it is going to be collocated
-        for osd in self.computed['osds']:
-            vg = device_vgs.get(osd['data']['path'])
-            if not vg:
-                vg = lvm.create_vg(osd['data']['path'], name_prefix='ceph-filestore')
-                device_vgs[osd['data']['path']] = vg
-
-        # create the lvs from the per-device vg created in the beginning
-        for osd in self.computed['osds']:
-            data_path = osd['data']['path']
-            data_lv_size = disk.Size(b=osd['data']['size']).gb.as_int()
-            device_vg = device_vgs[data_path]
-            data_lv_extents = device_vg.sizing(size=data_lv_size)['extents']
-            journal_lv_extents = device_vg.sizing(size=self.journal_size.gb.as_int())['extents']
-            data_uuid = system.generate_uuid()
-            data_lv = lvm.create_lv(
-                'osd-data', data_uuid, vg=device_vg, extents=data_lv_extents)
-            journal_uuid = system.generate_uuid()
-            journal_lv = lvm.create_lv(
-                'osd-journal', journal_uuid, vg=device_vg, extents=journal_lv_extents)
-
-            command = ['--filestore', '--data']
-            command.append('%s/%s' % (device_vg.name, data_lv.name))
-            command.extend(['--journal', '%s/%s' % (device_vg.name, journal_lv.name)])
-            if self.args.dmcrypt:
-                command.append('--dmcrypt')
-            if self.args.no_systemd:
-                command.append('--no-systemd')
-            if self.args.crush_device_class:
-                command.extend(['--crush-device-class', self.args.crush_device_class])
-            if 'osd_id' in osd:
-                command.extend(['--osd-id', osd['osd_id']])
-
-            if self.args.prepare:
-                Prepare(command).main()
-            else:
-                Create(command).main()
-
-
-class MixedType(MixedStrategy):
-    """
-    Supports HDDs with SSDs, journals will be placed on SSDs, while HDDs will
-    be used fully for data.
-
-    If an existing common VG is detected on SSDs, it will be extended if blank
-    SSDs are used, otherwise it will be used directly.
-    """
-
-
-    def __init__(self, args, data_devs, journal_devs):
-        super(MixedType, self).__init__(args, data_devs, journal_devs)
-        self.blank_journal_devs = []
-        self.journals_needed = len(self.data_devs) * self.osds_per_device
-        self.journal_size = get_journal_size(args)
-        self.validate_compute()
-
-    @classmethod
-    def with_auto_devices(cls, args, devices):
-        data_devs, journal_devs = cls.split_devices_rotational(devices)
-        return cls(args, data_devs, journal_devs)
-
-    @staticmethod
-    def type():
-        return "filestore.MixedType"
-
-    def report_pretty(self, filtered_devices):
-        string = ""
-        if filtered_devices:
-            string += templates.filtered_devices(filtered_devices)
-        string += templates.total_osds.format(
-            total_osds=self.total_osds
-        )
-
-        string += templates.ssd_volume_group.format(
-            target='journal',
-            total_lv_size=str(self.total_available_journal_space),
-            total_lvs=self.journals_needed,
-            block_db_devices=', '.join([d.path for d in self.db_or_journal_devs]),
-            lv_size=str(self.journal_size),
-            total_osds=self.journals_needed
-        )
-
-        string += templates.osd_component_titles
-
-        for osd in self.computed['osds']:
-            string += templates.osd_header
-            if 'osd_id' in osd:
-                string += templates.osd_reused_id.format(
-                    id_=osd['osd_id'])
-            string += templates.osd_component.format(
-                _type='[data]',
-                path=osd['data']['path'],
-                size=osd['data']['human_readable_size'],
-                percent=osd['data']['percentage'],
-            )
-            string += templates.osd_component.format(
-                _type='[journal]',
-                path=osd['journal']['path'],
-                size=osd['journal']['human_readable_size'],
-                percent=osd['journal']['percentage'],
-            )
-
-        print(string)
-
-    def validate(self):
-        """
-        Ensure that the minimum requirements for this type of scenario is
-        met, raise an error if the provided devices would not work
-        """
-        # validate minimum size for all devices
-        validators.minimum_device_size(self.devices, osds_per_device=self.osds_per_device)
-
-        # make sure that data devices do not have any LVs
-        validators.no_lvm_membership(self.data_devs)
-
-        # do not allow non-common VG to continue
-        validators.has_common_vg(self.db_or_journal_devs)
-
-        # find the common VG to calculate how much is available
-        self.common_vg = self.get_common_vg(self.db_or_journal_devs)
-
-        # find how many journals are possible from the common VG
-        if self.common_vg:
-            common_vg_size = disk.Size(b=self.common_vg.free)
-        else:
-            common_vg_size = disk.Size(gb=0)
-
-        # non-VG SSDs
-        vg_ssds = set([d for d in self.db_or_journal_devs if d.is_lvm_member])
-        self.blank_journal_devs = set(self.db_or_journal_devs).difference(vg_ssds)
-        self.total_blank_journal_dev_size = disk.Size(b=0)
-        for blank_journal_dev in self.blank_journal_devs:
-            self.total_blank_journal_dev_size += disk.Size(b=blank_journal_dev.lvm_size.b)
-
-        self.total_available_journal_space = self.total_blank_journal_dev_size + common_vg_size
-
-        try:
-            self.vg_extents = lvm.sizing(
-                self.total_available_journal_space.b, size=self.journal_size.b * self.osds_per_device
-            )
-        except SizeAllocationError:
-            msg = "Not enough space in fast devices (%s) to create %s x %s journal LV"
-            raise RuntimeError(
-                msg % (self.total_available_journal_space, self.osds_per_device, self.journal_size)
-            )
-
-        # validate that number of journals possible are enough for number of
-        # OSDs proposed
-        total_journals_possible = self.total_available_journal_space / self.journal_size
-        if self.osds_per_device > total_journals_possible:
-            msg = "Not enough space (%s) to create %s x %s journal LVs" % (
-                self.total_available_journal_space, self.journals_needed, self.journal_size
-            )
-            raise RuntimeError(msg)
-
-        if self.osd_ids:
-            self._validate_osd_ids()
-
-    def compute(self):
-        """
-        Go through the rules needed to properly size the lvs, return
-        a dictionary with the result
-        """
-        osds = self.computed['osds']
-
-        vg_free = int(self.total_available_journal_space.gb)
-        if not self.common_vg:
-            # there isn't a common vg, so a new one must be created with all
-            # the blank SSDs
-            self.computed['vg'] = {
-                'devices': ", ".join([ssd.abspath for ssd in self.blank_journal_devs]),
-                'parts': self.journals_needed,
-                'percentages': self.vg_extents['percentages'],
-                'sizes': self.journal_size.b.as_int(),
-                'size': self.total_blank_journal_dev_size.b.as_int(),
-                'human_readable_sizes': str(self.journal_size),
-                'human_readable_size': str(self.total_available_journal_space),
-            }
-            vg_name = 'lv/vg'
-        else:
-            vg_name = self.common_vg.name
-
-        for device in self.data_devs:
-            for osd in range(self.osds_per_device):
-                device_size = disk.Size(b=device.lvm_size.b)
-                data_size = device_size / self.osds_per_device
-                osd = {'data': {}, 'journal': {}}
-                osd['data']['path'] = device.path
-                osd['data']['size'] = data_size.b.as_int()
-                osd['data']['percentage'] = 100 / self.osds_per_device
-                osd['data']['human_readable_size'] = str(data_size)
-                osd['journal']['path'] = 'vg: %s' % vg_name
-                osd['journal']['size'] = self.journal_size.b.as_int()
-                osd['journal']['percentage'] = int(self.journal_size.gb * 100 / vg_free)
-                osd['journal']['human_readable_size'] = str(self.journal_size)
-
-                if self.osd_ids:
-                    osd['osd_id'] = self.osd_ids.pop(0)
-
-                osds.append(osd)
-
-        self.computed['changed'] = len(osds) > 0
-
-    def execute(self):
-        """
-        Create vgs/lvs from the incoming set of devices, assign their roles
-        (data, journal) and offload the OSD creation to ``lvm create``
-        """
-        blank_journal_dev_paths = [d.abspath for d in self.blank_journal_devs]
-        data_vgs = dict([(osd['data']['path'], None) for osd in self.computed['osds']])
-
-        # no common vg is found, create one with all the blank SSDs
-        if not self.common_vg:
-            journal_vg = lvm.create_vg(blank_journal_dev_paths, name_prefix='ceph-journals')
-        # a vg exists that can be extended
-        elif self.common_vg and blank_journal_dev_paths:
-            journal_vg = lvm.extend_vg(self.common_vg, blank_journal_dev_paths)
-        # one common vg with nothing else to extend can be used directly
-        else:
-            journal_vg = self.common_vg
-
-        journal_size = prepare.get_journal_size(lv_format=False)
-
-        # create 1 vg per data device first, mapping them to the device path,
-        # when the lv gets created later, it can create as many as needed (or
-        # even just 1)
-        for osd in self.computed['osds']:
-            vg = data_vgs.get(osd['data']['path'])
-            if not vg:
-                vg = lvm.create_vg(osd['data']['path'], name_prefix='ceph-data')
-                data_vgs[osd['data']['path']] = vg
-
-        for osd in self.computed['osds']:
-            data_path = osd['data']['path']
-            data_vg = data_vgs[data_path]
-            data_lv_extents = data_vg.sizing(parts=1)['extents']
-            data_uuid = system.generate_uuid()
-            data_lv = lvm.create_lv(
-                'osd-data', data_uuid, vg=data_vg, extents=data_lv_extents)
-            journal_uuid = system.generate_uuid()
-            journal_lv = lvm.create_lv(
-                'osd-journal', journal_uuid, vg=journal_vg, size=journal_size)
-
-            command = ['--filestore', '--data']
-            command.append('%s/%s' % (data_vg.name, data_lv.name))
-            command.extend(['--journal', '%s/%s' % (journal_vg.name, journal_lv.name)])
-            if self.args.dmcrypt:
-                command.append('--dmcrypt')
-            if self.args.no_systemd:
-                command.append('--no-systemd')
-            if self.args.crush_device_class:
-                command.extend(['--crush-device-class', self.args.crush_device_class])
-            if 'osd_id' in osd:
-                command.extend(['--osd-id', osd['osd_id']])
-
-            if self.args.prepare:
-                Prepare(command).main()
-            else:
-                Create(command).main()
diff --git a/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/strategies.py b/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/strategies.py
deleted file mode 100644 (file)
index 75d748f..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-import json
-from ceph_volume.util.prepare import osd_id_available
-from ceph_volume.api.lvm import get_device_vgs
-
-class Strategy(object):
-
-    def __init__(self, args, data_devs, db_or_journal_devs=[], wal_devs=[]):
-        '''
-        Note that this ctor is used by both bluestore and filestore strategies
-        to reduce code duplication. A filestore strategy will always pass an
-        empty list for wal_devs.
-        '''
-        self.args = args
-        self.osd_ids = args.osd_ids
-        self.osds_per_device = args.osds_per_device
-        self.devices = data_devs + wal_devs + db_or_journal_devs
-        self.data_devs = data_devs
-        self.db_or_journal_devs = db_or_journal_devs
-        self.wal_devs = wal_devs
-        self.computed = {'osds': [], 'vgs': []}
-
-    @staticmethod
-    def split_devices_rotational(devices):
-        data_devs = [device for device in devices if device.rotational]
-        db_or_journal_devs = [device for device in devices if not device.rotational]
-        return data_devs, db_or_journal_devs
-
-
-    def validate_compute(self):
-        if self.devices:
-            self.validate()
-            self.compute()
-        else:
-            self.computed["changed"] = False
-
-    def report_json(self, filtered_devices):
-        # add filtered devices to report
-        report = self.computed.copy()
-        report['filtered_devices'] = filtered_devices
-        print(json.dumps(self.computed, indent=4, sort_keys=True))
-
-    def _validate_osd_ids(self):
-        unavailable_ids = [id_ for id_ in self.osd_ids if
-                           not osd_id_available(id_)]
-        if unavailable_ids:
-            msg = ("Not all specfied OSD ids are available: {}"
-                   "unavailable").format(",".join(unavailable_ids))
-            raise RuntimeError(msg)
-
-    @property
-    def total_osds(self):
-        return len(self.data_devs) * self.osds_per_device
-
-    # protect against base class instantiation and incomplete implementations.
-    # We could also use the abc module and implement this as an
-    # AbstractBaseClass
-    def compute(self):
-        raise NotImplementedError('compute() must be implemented in a child class')
-
-    def execute(self):
-        raise NotImplementedError('execute() must be implemented in a child class')
-
-class MixedStrategy(Strategy):
-
-    def get_common_vg(self, devs):
-        # find all the vgs associated with the current device
-        for dev in devs:
-            vgs = get_device_vgs(dev.abspath)
-            if vgs:
-                return vgs[0]
diff --git a/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py b/ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py
deleted file mode 100644 (file)
index e631e10..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-from ceph_volume.util import disk
-from ceph_volume.api import lvm
-
-
-def minimum_device_size(devices, osds_per_device=1, min_size=5):
-    """
-    Ensure that the minimum requirements for this type of scenario is
-    met, raise an error if the provided devices would not work
-    """
-    msg = 'Unable to use device %s %s, LVs would be smaller than {}GB'.format(min_size)
-    for device in devices:
-        device_size = disk.Size(b=device.lvm_size.b)
-        lv_size = device_size / osds_per_device
-        if lv_size < disk.Size(gb=min_size):
-            raise RuntimeError(msg % (device_size, device.path))
-
-
-def minimum_device_collocated_size(devices, journal_size, osds_per_device=1):
-    """
-    Similar to ``minimum_device_size``, but take into account that the size of
-    the journal affects the size left of the device
-    """
-    msg = 'Unable to use device %s %s, LVs would be smaller than 5GB'
-    for device in devices:
-        device_size = disk.Size(b=device.lvm_size.b)
-        lv_size = (device_size / osds_per_device) - journal_size
-        if lv_size < disk.Size(gb=5):
-            raise RuntimeError(msg % (device_size, device.path))
-
-
-def no_lvm_membership(devices):
-    """
-    Do not allow devices that are part of LVM
-    """
-    msg = 'Unable to use device, already a member of LVM: %s'
-    for device in devices:
-        if device.is_lvm_member:
-            raise RuntimeError(msg % device.abspath)
-
-
-def has_common_vg(ssd_devices):
-    """
-    Ensure that devices have a common VG between them
-    """
-    msg = 'Could not find a common VG between devices: %s'
-    ssd_vgs = {}
-
-    for ssd_device in ssd_devices:
-        vgs = lvm.get_device_vgs(ssd_device.abspath)
-        if not vgs:
-            continue
-        for vg in vgs:
-            try:
-                ssd_vgs[vg.name].append(ssd_device.abspath)
-            except KeyError:
-                ssd_vgs[vg.name] = [ssd_device.abspath]
-    # len of 1 means they all have a common vg, and len of 0 means that these
-    # are blank
-    if len(ssd_vgs) <= 1:
-        return
-    raise RuntimeError(msg % ', '.join(ssd_vgs.keys()))
index 63624e55f5bd228b912bc5eaf09fa39944ea115f..21b54b6c0c419978bc5a9cfd6f8b3fbb41bb6087 100644 (file)
@@ -290,7 +290,7 @@ class Zap(object):
 
     @decorators.needs_root
     def zap_osd(self):
-        if self.args.osd_id:
+        if self.args.osd_id and not self.args.no_systemd:
             osd_is_running = systemctl.osd_is_active(self.args.osd_id)
             if osd_is_running:
                 mlogger.error("OSD ID %s is running, stop it with:" % self.args.osd_id)
@@ -384,6 +384,13 @@ class Zap(object):
             help='Specify an OSD FSID to detect associated devices for zapping',
         )
 
+        parser.add_argument(
+            '--no-systemd',
+            dest='no_systemd',
+            action='store_true',
+            help='Skip systemd unit checks',
+        )
+
         if len(self.argv) == 0:
             print(sub_command_help)
             return
index bcc9645d67bf10be81313afc3fc281a582c8a384..7439141c03a8b4865238c4825ad58271ed6225fa 100644 (file)
@@ -9,6 +9,7 @@ from textwrap import dedent
 from ceph_volume import process, decorators, terminal, conf
 from ceph_volume.util import system, disk
 from ceph_volume.util import encryption as encryption_utils
+from ceph_volume.util import prepare as prepare_utils
 from ceph_volume.systemd import systemctl
 
 
@@ -169,13 +170,22 @@ class Activate(object):
 
         # XXX there is no support for LVM here
         data_device = self.get_device(data_uuid)
+
+        if not data_device:
+            raise RuntimeError("osd fsid {} doesn't exist, this file will "
+                "be skipped, consider cleaning legacy "
+                "json file {}".format(osd_metadata['fsid'], args.json_config))
+
         journal_device = self.get_device(osd_metadata.get('journal', {}).get('uuid'))
         block_device = self.get_device(osd_metadata.get('block', {}).get('uuid'))
         block_db_device = self.get_device(osd_metadata.get('block.db', {}).get('uuid'))
         block_wal_device = self.get_device(osd_metadata.get('block.wal', {}).get('uuid'))
 
         if not system.device_is_mounted(data_device, destination=osd_dir):
-            process.run(['mount', '-v', data_device, osd_dir])
+            if osd_metadata.get('type') == 'filestore':
+                prepare_utils.mount_osd(data_device, osd_id)
+            else:
+                process.run(['mount', '-v', data_device, osd_dir])
 
         device_map = {
             'journal': journal_device,
@@ -277,7 +287,10 @@ class Activate(object):
             for json_config in json_configs:
                 mlogger.info('activating OSD specified in {}'.format(json_config))
                 args.json_config = json_config
-                self.activate(args)
+                try:
+                    self.activate(args)
+                except RuntimeError as e:
+                    terminal.warning(e.message)
         else:
             if args.file:
                 json_config = args.file
index 0f83b37ef440ee489376740674c55172ab1dfb23..34da0962b0fc8639cc6bc095c8e29f169ffe1e35 100644 (file)
@@ -375,8 +375,11 @@ class Scan(object):
             self.encryption_metadata = encryption.legacy_encrypted(args.osd_path)
             self.is_encrypted = self.encryption_metadata['encrypted']
 
-            device = Device(self.encryption_metadata['device'])
-            if not device.is_ceph_disk_member:
-                terminal.warning("Ignoring %s because it's not a ceph-disk created osd." % path)
+            if self.encryption_metadata['device'] != "tmpfs":
+                device = Device(self.encryption_metadata['device'])
+                if not device.is_ceph_disk_member:
+                    terminal.warning("Ignoring %s because it's not a ceph-disk created osd." % path)
+                else:
+                    self.scan(args)
             else:
-                self.scan(args)
+                terminal.warning("Ignoring %s because it's not a ceph-disk created osd." % path)
index 684e89f366f324f5964431bf4222aed4735e375e..a224b21a5f48b50bee059dc83ddf8049be835686 100644 (file)
@@ -29,7 +29,6 @@ class Deploy(object):
     '''
 
     def __init__(self, argv):
-        logger.error(f'argv: {argv}')
         self.argv = argv
 
     def main(self):
index 470be274f52ebb2d30048ecfaecaa78230ca97df..aa70e92f19d5c949af903952aacfefb8690bcee0 100644 (file)
@@ -31,17 +31,32 @@ class Inventory(object):
             default='plain',
             help='Output format',
         )
+        parser.add_argument(
+            '--filter-for-batch',
+            action='store_true',
+            help=('Filter devices unsuitable to pass to an OSD service spec, '
+                  'no effect when <path> is passed'),
+            default=False,
+        )
+        parser.add_argument(
+            '--with-lsm',
+            action='store_true',
+            help=('Attempt to retrieve additional health and metadata through '
+                  'libstoragemgmt'),
+            default=False,
+        )
         self.args = parser.parse_args(self.argv)
         if self.args.path:
-            self.format_report(Device(self.args.path))
+            self.format_report(Device(self.args.path, with_lsm=self.args.with_lsm))
         else:
-            self.format_report(Devices())
+            self.format_report(Devices(filter_for_batch=self.args.filter_for_batch,
+                                       with_lsm=self.args.with_lsm))
 
     def get_report(self):
         if self.args.path:
-            return Device(self.args.path).json_report()
+            return Device(self.args.path, with_lsm=self.args.with_lsm).json_report()
         else:
-            return Devices().json_report()
+            return Devices(filter_for_batch=self.args.filter_for_batch, with_lsm=self.args.with_lsm).json_report()
 
     def format_report(self, inventory):
         if self.args.format == 'json':
index 802b5fec290dc2d703e8d4511ab2b794e5a5d046..b283bedbbc9553195395ad94e90889040c3edeb8 100644 (file)
@@ -7,7 +7,7 @@ BASE_FORMAT = "[%(name)s][%(levelname)-6s] %(message)s"
 FILE_FORMAT = "[%(asctime)s]" + BASE_FORMAT
 
 
-def setup(name='ceph-volume.log', log_path=None):
+def setup(name='ceph-volume.log', log_path=None, log_level=None):
     log_path = log_path or conf.log_path
     # if a non-root user calls help or other no-sudo-required command the
     # logger will fail to write to /var/lib/ceph/ so this /tmp/ path is used as
@@ -16,8 +16,9 @@ def setup(name='ceph-volume.log', log_path=None):
     root_logger = logging.getLogger()
     # The default path is where all ceph log files are, and will get rotated by
     # Ceph's logrotate rules.
-
-    root_logger.setLevel(logging.DEBUG)
+    log_level = log_level or "DEBUG"
+    log_level = getattr(logging, log_level.upper())
+    root_logger.setLevel(log_level)
 
     try:
         fh = logging.FileHandler(log_path)
@@ -27,7 +28,7 @@ def setup(name='ceph-volume.log', log_path=None):
         conf.log_path = tmp_log_file
         fh = logging.FileHandler(tmp_log_file)
 
-    fh.setLevel(logging.DEBUG)
+    fh.setLevel(log_level)
     fh.setFormatter(logging.Formatter(FILE_FORMAT))
 
     root_logger.addHandler(fh)
index 461395ae5e3342d88afaafe1826cbce4734f0767..a66b7bb7df96164f9803d43ccf29de840eed4dec 100644 (file)
@@ -121,6 +121,7 @@ Ceph Conf: {ceph_path}
         parser.add_argument(
             '--log-level',
             default='debug',
+            choices=['debug', 'info', 'warning', 'error', 'critical'],
             help='Change the file log level (defaults to debug)',
         )
         parser.add_argument(
@@ -132,7 +133,7 @@ Ceph Conf: {ceph_path}
         conf.log_path = args.log_path
         if os.path.isdir(conf.log_path):
             conf.log_path = os.path.join(args.log_path, 'ceph-volume.log')
-        log.setup()
+        log.setup(log_level=args.log_level)
         log.setup_console()
         logger = logging.getLogger(__name__)
         logger.info("Running command: ceph-volume %s %s", " ".join(main_args), " ".join(subcommand_args))
index fe2fe8b577c633ccc325f82e2c334a79e57ba2f3..cd2f9d9cb42ef5542a448fd380c4e4896711b095 100644 (file)
@@ -186,6 +186,7 @@ class TestCreateLV(object):
         self.foo_volume = api.Volume(lv_name='foo', lv_path='/path', vg_name='foo_group', lv_tags='')
         self.foo_group = api.VolumeGroup(vg_name='foo_group',
                                          vg_extent_size=4194304,
+                                         vg_extent_count=100,
                                          vg_free_count=100)
 
     @patch('ceph_volume.api.lvm.process.run')
index 195082e7c121fb90875a3a03e1bf18058242574d..2abedac3240dbc20942b7dfa39cc898fa2d1879e 100644 (file)
@@ -1,7 +1,9 @@
 import os
 import pytest
-from mock.mock import patch, PropertyMock
+from mock.mock import patch, PropertyMock, create_autospec
+from ceph_volume.api import lvm
 from ceph_volume.util import disk
+from ceph_volume.util import device
 from ceph_volume.util.constants import ceph_disk_guids
 from ceph_volume import conf, configuration
 
@@ -39,6 +41,48 @@ def factory():
 def capture():
     return Capture()
 
+@pytest.fixture
+def mock_lv_device_generator():
+    def mock_lv():
+        size = 21474836480
+        dev = create_autospec(device.Device)
+        dev.lv_name = 'lv'
+        dev.vg_name = 'vg'
+        dev.path = '{}/{}'.format(dev.vg_name, dev.lv_name)
+        dev.used_by_ceph = False
+        dev.vg_size = [size]
+        dev.vg_free = dev.vg_size
+        dev.lvs = [lvm.Volume(vg_name=dev.vg_name, lv_name=dev.lv_name, lv_size=size, lv_tags='')]
+        return dev
+    return mock_lv
+
+
+@pytest.fixture
+def mock_devices_available():
+    dev = create_autospec(device.Device)
+    dev.path = '/dev/foo'
+    dev.available_lvm = True
+    dev.vg_size = [21474836480]
+    dev.vg_free = dev.vg_size
+    return [dev]
+
+@pytest.fixture
+def mock_device_generator():
+    def mock_device():
+        dev = create_autospec(device.Device)
+        dev.path = '/dev/foo'
+        dev.available_lvm = True
+        dev.vg_size = [21474836480]
+        dev.vg_free = dev.vg_size
+        dev.lvs = []
+        return dev
+    return mock_device
+
+
+@pytest.fixture(params=range(1,11))
+def osds_per_device(request):
+    return request.param
+
 
 @pytest.fixture
 def fake_run(monkeypatch):
@@ -186,18 +230,20 @@ def ceph_parttype(request):
 @pytest.fixture
 def lsblk_ceph_disk_member(monkeypatch, request, ceph_partlabel, ceph_parttype):
     monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                        lambda path: {'PARTLABEL': ceph_partlabel})
+                        lambda path: {'TYPE': 'disk', 'PARTLABEL': ceph_partlabel})
     # setting blkid here too in order to be able to fall back to PARTTYPE based
     # membership
     monkeypatch.setattr("ceph_volume.util.device.disk.blkid",
-                        lambda path: {'PARTLABEL': '',
+                        lambda path: {'TYPE': 'disk',
+                                      'PARTLABEL': '',
                                       'PARTTYPE': ceph_parttype})
 
 
 @pytest.fixture
 def blkid_ceph_disk_member(monkeypatch, request, ceph_partlabel, ceph_parttype):
     monkeypatch.setattr("ceph_volume.util.device.disk.blkid",
-                        lambda path: {'PARTLABEL': ceph_partlabel,
+                        lambda path: {'TYPE': 'disk',
+                                      'PARTLABEL': ceph_partlabel,
                                       'PARTTYPE': ceph_parttype})
 
 
@@ -209,9 +255,11 @@ def blkid_ceph_disk_member(monkeypatch, request, ceph_partlabel, ceph_parttype):
 ])
 def device_info_not_ceph_disk_member(monkeypatch, request):
     monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                        lambda path: {'PARTLABEL': request.param[0]})
+                        lambda path: {'TYPE': 'disk',
+                                      'PARTLABEL': request.param[0]})
     monkeypatch.setattr("ceph_volume.util.device.disk.blkid",
-                        lambda path: {'PARTLABEL': request.param[1]})
+                        lambda path: {'TYPE': 'disk',
+                                      'PARTLABEL': request.param[1]})
 
 @pytest.fixture
 def patched_get_block_devs_lsblk():
diff --git a/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/__init__.py b/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py b/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py
deleted file mode 100644 (file)
index ba54ea5..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-import pytest
-from ceph_volume.devices.lvm.strategies import bluestore
-from ceph_volume.api import lvm
-
-
-class TestSingleType(object):
-
-    def test_hdd_device_is_large_enough(self, fakedevice, factory):
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        computed_osd = bluestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
-        assert computed_osd['data']['percentage'] == 100
-        assert computed_osd['data']['parts'] == 1
-        assert computed_osd['data']['human_readable_size'] == '5.00 GB'
-        assert computed_osd['data']['path'] == '/dev/sda'
-
-    def test_sdd_device_is_large_enough(self, fakedevice, factory):
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        ]
-        computed_osd = bluestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
-        assert computed_osd['data']['percentage'] == 100
-        assert computed_osd['data']['parts'] == 1
-        assert computed_osd['data']['human_readable_size'] == '5.00 GB'
-        assert computed_osd['data']['path'] == '/dev/sda'
-
-    def test_device_cannot_have_many_osds_per_device(self, fakedevice, factory):
-        args = factory(filtered_devices=[], osds_per_device=3,
-                       block_db_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            bluestore.SingleType.with_auto_devices(args, devices)
-        assert 'Unable to use device 5.66 GB /dev/sda' in str(error.value)
-
-    def test_device_is_lvm_member_fails(self, fakedevice, factory):
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=True, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            bluestore.SingleType.with_auto_devices(args, devices)
-        assert 'Unable to use device, already a member of LVM' in str(error.value)
-
-
-class TestMixedType(object):
-
-    def test_filter_all_data_devs(self, fakedevice, factory, monkeypatch):
-        # in this scenario the user passed a already used device to be used for
-        # data and an unused device to be used as db device.
-        db_dev = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        data_dev = fakedevice(used_by_ceph=True, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        args = factory(filtered_devices=[data_dev], osds_per_device=1,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        monkeypatch.setattr(lvm, 'VolumeGroup', lambda x, **kw: [])
-        bluestore.MixedType(args, [], [db_dev], [])
-
-
-class TestMixedTypeConfiguredSize(object):
-    # uses a block.db size that has been configured via ceph.conf, instead of
-    # defaulting to 'as large as possible'
-
-    def test_hdd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        # 3GB block.db in ceph.conf
-        conf_ceph(get_safe=lambda *a: 3147483640)
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        devices = [ssd, hdd]
-
-        osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
-        assert osd['data']['percentage'] == 100
-        assert osd['data']['human_readable_size'] == '5.66 GB'
-        assert osd['data']['path'] == '/dev/sda'
-        # a new vg will be created
-        assert osd['block.db']['path'] == 'vg: vg/lv'
-        assert osd['block.db']['percentage'] == 100
-
-    def test_ssd_device_is_not_large_enough(self, fakedevice, factory, conf_ceph):
-        # 7GB block.db in ceph.conf
-        conf_ceph(get_safe=lambda *a: 7747483640)
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        devices = [ssd, hdd]
-
-        with pytest.raises(RuntimeError) as error:
-            bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
-        expected = 'Not enough space in fast devices (5.66 GB) to create 1 x 7.22 GB block.db LV'
-        assert expected in str(error.value)
-
-    def test_multi_hdd_device_is_not_large_enough(self, fakedevice, factory, conf_ceph):
-        # 3GB block.db in ceph.conf
-        conf_ceph(get_safe=lambda *a: 3147483640)
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=60737400000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        devices = [ssd, hdd]
-
-        with pytest.raises(RuntimeError) as error:
-            bluestore.MixedType.with_auto_devices(args, devices)
-        expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
-        assert expected in str(error.value)
-
-
-class TestMixedTypeLargeAsPossible(object):
-
-    def test_hdd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: None)
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        devices = [ssd, hdd]
-
-        osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
-        assert osd['data']['percentage'] == 100
-        assert osd['data']['human_readable_size'] == '5.66 GB'
-        assert osd['data']['path'] == '/dev/sda'
-        # a new vg will be created
-        assert osd['block.db']['path'] == 'vg: vg/lv'
-        # as large as possible
-        assert osd['block.db']['percentage'] == 100
-
-    def test_multi_hdd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: None)
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=60073740000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=60073740000))
-        devices = [ssd, hdd]
-
-        osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
-        assert osd['data']['percentage'] == 50
-        assert osd['data']['human_readable_size'] == '27.97 GB'
-        assert osd['data']['path'] == '/dev/sda'
-        # a new vg will be created
-        assert osd['block.db']['path'] == 'vg: vg/lv'
-        # as large as possible
-        assert osd['block.db']['percentage'] == 50
-
-    def test_multi_hdd_device_is_not_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: None)
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=60737400000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        devices = [ssd, hdd]
-
-        with pytest.raises(RuntimeError) as error:
-            bluestore.MixedType.with_auto_devices(args, devices)
-        expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
-        assert expected in str(error.value)
-
-
-class TestMixedTypeWithExplicitDevices(object):
-
-    def test_multi_hdd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: None)
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=60073740000))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=60073740000))
-
-        osd = bluestore.MixedType(args, [hdd], [], [ssd]).computed['osds'][0]
-        assert osd['data']['percentage'] == 50
-        assert osd['data']['human_readable_size'] == '27.97 GB'
-        assert osd['data']['path'] == '/dev/sda'
-        # a new vg will be created
-        assert osd['block.wal']['path'] == 'vg: vg/lv'
-        # as large as possible
-        assert osd['block.wal']['percentage'] == 50
-
-    def test_wal_device_is_not_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: None)
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       block_db_size=None, block_wal_size=None,
-                       osd_ids=[])
-        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=1610612736))
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=60073740000))
-
-        with pytest.raises(RuntimeError) as error:
-            bluestore.MixedType(args, [hdd], [], [ssd]).computed['osds'][0]
-        expected = 'Unable to use device 1.50 GB /dev/sda, LVs would be smaller than 1GB'
-        assert expected in str(error.value), str(error)
diff --git a/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_filestore.py b/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_filestore.py
deleted file mode 100644 (file)
index 4fd94f5..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-import pytest
-from mock.mock import patch
-from ceph_volume.devices.lvm.strategies import filestore
-from ceph_volume.api import lvm
-
-
-class TestSingleType(object):
-
-    def test_hdd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=12073740000))
-        ]
-        computed_osd = filestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
-        assert computed_osd['data']['percentage'] == 55
-        assert computed_osd['data']['parts'] == 1
-        assert computed_osd['data']['human_readable_size'] == '6.24 GB'
-        assert computed_osd['data']['path'] == '/dev/sda'
-
-    def test_hdd_device_with_large_journal(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_ssd_device_is_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=12073740000))
-        ]
-        computed_osd = filestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
-        assert computed_osd['data']['percentage'] == 55
-        assert computed_osd['data']['parts'] == 1
-        assert computed_osd['data']['human_readable_size'] == '6.24 GB'
-        assert computed_osd['data']['path'] == '/dev/sda'
-
-    def test_ssd_device_with_large_journal(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_ssd_device_multi_osd(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=4,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=16073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "Unable to use device 14.97 GB /dev/sda, LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_hdd_device_multi_osd(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=4,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=16073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "Unable to use device 14.97 GB /dev/sda, LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_device_is_lvm_member_fails(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=True, rotational=True, sys_api=dict(size=12073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        assert 'Unable to use device, already a member of LVM' in str(error.value)
-
-    def test_hdd_device_with_small_configured_journal(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "journal sizes must be larger than 2GB, detected: 120.00 MB"
-        assert msg in str(error.value)
-
-    def test_ssd_device_with_small_configured_journal(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.SingleType.with_auto_devices(args, devices)
-        msg = "journal sizes must be larger than 2GB, detected: 120.00 MB"
-        assert msg in str(error.value)
-
-
-class TestMixedType(object):
-
-    def test_minimum_size_is_not_met(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000)),
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.MixedType.with_auto_devices(args, devices)
-        msg = "journal sizes must be larger than 2GB, detected: 120.00 MB"
-        assert msg in str(error.value)
-
-    def test_ssd_device_is_not_large_enough(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '7120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000)),
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.MixedType.with_auto_devices(args, devices)
-        msg = "Not enough space in fast devices (5.66 GB) to create 1 x 6.95 GB journal LV"
-        assert msg in str(error.value)
-
-    def test_hdd_device_is_lvm_member_fails(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=False, sys_api=dict(size=6073740000)),
-            fakedevice(used_by_ceph=False, is_lvm_member=True, rotational=True, sys_api=dict(size=6073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.MixedType.with_auto_devices(args, devices)
-        assert 'Unable to use device, already a member of LVM' in str(error.value)
-
-    @patch('ceph_volume.devices.lvm.strategies.strategies.MixedStrategy.get_common_vg')
-    def test_ssd_is_lvm_member_doesnt_fail(self,
-                                           patched_get_common_vg,
-                                           fakedevice,
-                                           factory,
-                                           conf_ceph):
-        ssd = fakedevice(
-            used_by_ceph=False, is_lvm_member=True, rotational=False, sys_api=dict(size=6073740000)
-        )
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-        vg = lvm.VolumeGroup(
-                vg_name='fast', lv_name='foo',
-                lv_path='/dev/vg/foo', lv_tags="ceph.type=data",
-                vg_extent_size=1024*1024*1024, vg_free_count=7)
-        patched_get_common_vg.return_value = vg
-
-
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1,
-                       journal_size=None, osd_ids=[])
-        devices = [ssd, hdd]
-
-        result = filestore.MixedType.with_auto_devices(args, devices).\
-            computed['osds'][0]
-        assert result['journal']['path'] == 'vg: fast'
-        assert result['journal']['percentage'] == 71
-        assert result['journal']['human_readable_size'] == '5.00 GB'
-
-    @patch('ceph_volume.api.lvm.get_device_vgs')
-    def test_no_common_vg(self, patched_get_device_vgs, fakedevice, factory, conf_ceph):
-        patched_get_device_vgs.side_effect = lambda x: [lvm.VolumeGroup(vg_name='{}'.format(x[-1]), vg_tags='')]
-        ssd1 = fakedevice(
-            used_by_ceph=False, is_lvm_member=True, rotational=False, sys_api=dict(size=6073740000)
-        )
-        ssd2 = fakedevice(
-            used_by_ceph=False, is_lvm_member=True, rotational=False, sys_api=dict(size=6073740000)
-        )
-        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, rotational=True, sys_api=dict(size=6073740000))
-
-        conf_ceph(get_safe=lambda *a: '5120')
-        args = factory(filtered_devices=[], osds_per_device=1, osd_ids=[],
-                       journal_size=None)
-        devices = [ssd1, ssd2, hdd]
-
-        with pytest.raises(RuntimeError) as error:
-            filestore.MixedType.with_auto_devices(args, devices)
-            assert 'Could not find a common VG between devices' in str(error.value)
-
-    def test_ssd_device_fails_multiple_osds(self, fakedevice, factory, conf_ceph):
-        conf_ceph(get_safe=lambda *a: '15120')
-        args = factory(filtered_devices=[], osds_per_device=2,
-                       journal_size=None, osd_ids=[])
-        devices = [
-            fakedevice(is_lvm_member=False, rotational=False, sys_api=dict(size=16073740000)),
-            fakedevice(is_lvm_member=False, rotational=True, sys_api=dict(size=16073740000))
-        ]
-        with pytest.raises(RuntimeError) as error:
-            filestore.MixedType.with_auto_devices(args, devices)
-        msg = "Not enough space in fast devices (14.97 GB) to create 2 x 14.77 GB journal LV"
-        assert msg in str(error.value)
diff --git a/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_validate.py b/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_validate.py
deleted file mode 100644 (file)
index ebb9314..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-import pytest
-from ceph_volume.util import disk
-from ceph_volume.devices.lvm.strategies import validators
-
-
-class TestMinimumDeviceSize(object):
-
-    def test_size_is_larger_than_5gb(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=6073740000))]
-        assert validators.minimum_device_size(devices) is None
-
-    def test_size_is_smaller_than_5gb(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=1073740000))]
-        with pytest.raises(RuntimeError) as error:
-            validators.minimum_device_size(devices)
-        msg = "LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_large_device_multiple_osds_fails(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=6073740000))]
-        with pytest.raises(RuntimeError) as error:
-            validators.minimum_device_size(
-                devices, osds_per_device=4
-            )
-        msg = "LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-
-class TestMinimumCollocatedDeviceSize(object):
-
-    def setup(self):
-        self.journal_size = disk.Size(gb=5)
-
-    def test_size_is_larger_than_5gb_large_journal(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=6073740000))]
-        assert validators.minimum_device_collocated_size(devices, disk.Size(mb=1)) is None
-
-    def test_size_is_larger_than_5gb_large_journal_fails(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=1073740000))]
-        with pytest.raises(RuntimeError) as error:
-            validators.minimum_device_collocated_size(devices, self.journal_size)
-        msg = "LVs would be smaller than 5GB"
-        assert msg in str(error.value)
-
-    def test_large_device_multiple_osds_fails(self, fakedevice):
-        devices = [fakedevice(sys_api=dict(size=16073740000))]
-        with pytest.raises(RuntimeError) as error:
-            validators.minimum_device_collocated_size(
-                devices, self.journal_size, osds_per_device=3
-            )
-        msg = "LVs would be smaller than 5GB"
-        assert msg in str(error.value)
index 06a37c4906c25b3d7bf578727d02eda77565257b..7c968ae81d5e5b7f9d5db00b42a855a487b20c9b 100644 (file)
@@ -1,6 +1,12 @@
 import pytest
 import json
+import random
+
+from argparse import ArgumentError
+from mock import MagicMock, patch
+
 from ceph_volume.devices.lvm import batch
+from ceph_volume.util import arg_validators
 
 
 class TestBatch(object):
@@ -9,169 +15,266 @@ class TestBatch(object):
         b = batch.Batch([])
         b.main()
 
-    def test_get_devices(self, monkeypatch):
-        return_value = {
-            '/dev/vdd': {
-                'removable': '0',
-                'vendor': '0x1af4',
-                'model': '',
-                'sas_address': '',
-                'sas_device_handle': '',
-                'sectors': 0,
-                'size': 21474836480.0,
-                'support_discard': '',
-                'partitions': {
-                    'vdd1': {
-                        'start': '2048',
-                        'sectors': '41940959',
-                        'sectorsize': 512,
-                        'size': '20.00 GB'
-                    }
-                },
-                'rotational': '1',
-                'scheduler_mode': 'mq-deadline',
-                'sectorsize': '512',
-                'human_readable_size': '20.00 GB',
-                'path': '/dev/vdd'
-            },
-            '/dev/vdf': {
-                'removable': '0',
-                'vendor': '0x1af4',
-                'model': '',
-                'sas_address': '',
-                'sas_device_handle': '',
-                'sectors': 0,
-                'size': 21474836480.0,
-                'support_discard': '',
-                'partitions': {},
-                'rotational': '1',
-                'scheduler_mode': 'mq-deadline',
-                'sectorsize': '512',
-                'human_readable_size': '20.00 GB',
-                'path': '/dev/vdf'
-            }
-        }
-        monkeypatch.setattr('ceph_volume.devices.lvm.batch.disk.get_devices',
-                            lambda: return_value)
-        b = batch.Batch([])
-        result = b.get_devices().strip()
-        assert result == '* /dev/vdf                  20.00 GB   rotational'
-
     def test_disjoint_device_lists(self, factory):
         device1 = factory(used_by_ceph=False, available=True, abspath="/dev/sda")
         device2 = factory(used_by_ceph=False, available=True, abspath="/dev/sdb")
-        b = batch.Batch([])
-        b.args.devices = [device1, device2]
-        b.args.db_devices = [device2]
-        b._filter_devices()
+        devices = [device1, device2]
+        db_devices = [device2]
         with pytest.raises(Exception) as disjoint_ex:
-            b._ensure_disjoint_device_lists()
+            batch.ensure_disjoint_device_lists(devices, db_devices)
         assert 'Device lists are not disjoint' in str(disjoint_ex.value)
 
+    @patch('ceph_volume.util.arg_validators.Device')
+    def test_reject_partition(self, mocked_device):
+        mocked_device.return_value = MagicMock(
+            is_partition=True,
+            has_gpt_headers=False,
+        )
+        with pytest.raises(ArgumentError):
+            arg_validators.ValidBatchDevice()('foo')
 
-class TestFilterDevices(object):
+    @pytest.mark.parametrize('format_', ['pretty', 'json', 'json-pretty'])
+    def test_report(self, format_, factory, conf_ceph_stub, mock_device_generator):
+        # just ensure reporting works
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        devs = [mock_device_generator() for _ in range(5)]
+        args = factory(data_slots=1,
+                       osds_per_device=1,
+                       osd_ids=[],
+                       report=True,
+                       format=format_,
+                       devices=devs,
+                       db_devices=[],
+                       wal_devices=[],
+                       bluestore=True,
+                       block_db_size="1G",
+                       dmcrypt=True,
+                      )
+        b = batch.Batch([])
+        plan = b.get_plan(args)
+        b.args = args
+        b.report(plan)
 
-    def test_filter_used_device(self, factory):
-        device1 = factory(used_by_ceph=True, abspath="/dev/sda")
-        args = factory(devices=[device1], filtered_devices={})
-        result, filtered_devices = batch.filter_devices(args)
-        assert not result
-        assert device1.abspath in filtered_devices
+    @pytest.mark.parametrize('format_', ['json', 'json-pretty'])
+    def test_json_report_valid_empty(self, format_, factory, conf_ceph_stub, mock_device_generator):
+        # ensure json reports are valid when empty
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        devs = []
+        args = factory(data_slots=1,
+                       osds_per_device=1,
+                       osd_ids=[],
+                       report=True,
+                       format=format_,
+                       devices=devs,
+                       db_devices=[],
+                       wal_devices=[],
+                       bluestore=True,
+                       block_db_size="1G",
+                       dmcrypt=True,
+                      )
+        b = batch.Batch([])
+        plan = b.get_plan(args)
+        b.args = args
+        report = b._create_report(plan)
+        json.loads(report)
 
-    def test_has_unused_devices(self, factory):
-        device1 = factory(
-            used_by_ceph=False,
-            abspath="/dev/sda",
-            rotational=False,
-            is_lvm_member=False
-        )
-        args = factory(devices=[device1], filtered_devices={})
-        result, filtered_devices = batch.filter_devices(args)
-        assert device1 in result
-        assert not filtered_devices
-
-    def test_filter_device_used_as_a_journal(self, factory):
-        hdd1 = factory(
-            used_by_ceph=True,
-            abspath="/dev/sda",
-            rotational=True,
-            is_lvm_member=True,
-        )
-        lv = factory(tags={"ceph.type": "journal"})
-        ssd1 = factory(
-            used_by_ceph=False,
-            abspath="/dev/nvme0n1",
-            rotational=False,
-            is_lvm_member=True,
-            lvs=[lv],
-        )
-        args = factory(devices=[hdd1, ssd1], filtered_devices={})
-        result, filtered_devices = batch.filter_devices(args)
-        assert not result
-        assert ssd1.abspath in filtered_devices
-
-    def test_last_device_is_not_filtered(self, factory):
-        hdd1 = factory(
-            used_by_ceph=True,
-            abspath="/dev/sda",
-            rotational=True,
-            is_lvm_member=True,
-        )
-        ssd1 = factory(
-            used_by_ceph=False,
-            abspath="/dev/nvme0n1",
-            rotational=False,
-            is_lvm_member=False,
-        )
-        args = factory(devices=[hdd1, ssd1], filtered_devices={})
-        result, filtered_devices = batch.filter_devices(args)
-        assert result
-        assert len(filtered_devices) == 1
-
-    def test_no_auto_fails_on_unavailable_device(self, factory):
-        hdd1 = factory(
-            used_by_ceph=False,
-            abspath="/dev/sda",
-            rotational=True,
-            is_lvm_member=False,
-            available=True,
-        )
-        ssd1 = factory(
-            used_by_ceph=True,
-            abspath="/dev/nvme0n1",
-            rotational=False,
-            is_lvm_member=True,
-            available=False
-        )
-        args = factory(devices=[hdd1], db_devices=[ssd1], filtered_devices={},
-                      yes=True, format="", report=False)
+    @pytest.mark.parametrize('format_', ['json', 'json-pretty'])
+    def test_json_report_valid_empty_unavailable_fast(self, format_, factory, conf_ceph_stub, mock_device_generator):
+        # ensure json reports are valid when empty
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        devs = [mock_device_generator() for _ in range(5)]
+        fast_devs = [mock_device_generator()]
+        fast_devs[0].available_lvm = False
+        args = factory(data_slots=1,
+                       osds_per_device=1,
+                       osd_ids=[],
+                       report=True,
+                       format=format_,
+                       devices=devs,
+                       db_devices=fast_devs,
+                       wal_devices=[],
+                       bluestore=True,
+                       block_db_size="1G",
+                       dmcrypt=True,
+                      )
         b = batch.Batch([])
+        plan = b.get_plan(args)
         b.args = args
-        with pytest.raises(RuntimeError) as ex:
-            b._filter_devices()
-            assert '1 devices were filtered in non-interactive mode, bailing out' in str(ex.value)
-
-    def test_no_auto_prints_json_on_unavailable_device_and_report(self, factory, capsys):
-        hdd1 = factory(
-            used_by_ceph=False,
-            abspath="/dev/sda",
-            rotational=True,
-            is_lvm_member=False,
-            available=True,
-        )
-        ssd1 = factory(
-            used_by_ceph=True,
-            abspath="/dev/nvme0n1",
-            rotational=False,
-            is_lvm_member=True,
-            available=False
-        )
-        captured = capsys.readouterr()
-        args = factory(devices=[hdd1], db_devices=[ssd1], filtered_devices={},
-                      yes=True, format="json", report=True)
+        report = b._create_report(plan)
+        json.loads(report)
+
+
+    @pytest.mark.parametrize('format_', ['json', 'json-pretty'])
+    def test_json_report_valid_empty_unavailable_very_fast(self, format_, factory, conf_ceph_stub, mock_device_generator):
+        # ensure json reports are valid when empty
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        devs = [mock_device_generator() for _ in range(5)]
+        fast_devs = [mock_device_generator()]
+        very_fast_devs = [mock_device_generator()]
+        very_fast_devs[0].available_lvm = False
+        args = factory(data_slots=1,
+                       osds_per_device=1,
+                       osd_ids=[],
+                       report=True,
+                       format=format_,
+                       devices=devs,
+                       db_devices=fast_devs,
+                       wal_devices=very_fast_devs,
+                       bluestore=True,
+                       block_db_size="1G",
+                       dmcrypt=True,
+                      )
+        b = batch.Batch([])
+        plan = b.get_plan(args)
+        b.args = args
+        report = b._create_report(plan)
+        json.loads(report)
+
+    @pytest.mark.parametrize('rota', [0, 1])
+    def test_batch_sort_full(self, factory, rota):
+        device1 = factory(used_by_ceph=False, available=True, rotational=rota, abspath="/dev/sda")
+        device2 = factory(used_by_ceph=False, available=True, rotational=rota, abspath="/dev/sdb")
+        device3 = factory(used_by_ceph=False, available=True, rotational=rota, abspath="/dev/sdc")
+        devices = [device1, device2, device3]
+        args = factory(report=True,
+                       devices=devices,
+                       filestore=False,
+                      )
         b = batch.Batch([])
         b.args = args
-        with pytest.raises(SystemExit):
-            b._filter_devices()
-            result = json.loads(captured.out)
-            assert not result["changed"]
+        b._sort_rotational_disks()
+        assert len(b.args.devices) == 3
+
+    @pytest.mark.parametrize('objectstore', ['bluestore', 'filestore'])
+    def test_batch_sort_mixed(self, factory, objectstore):
+        device1 = factory(used_by_ceph=False, available=True, rotational=1, abspath="/dev/sda")
+        device2 = factory(used_by_ceph=False, available=True, rotational=1, abspath="/dev/sdb")
+        device3 = factory(used_by_ceph=False, available=True, rotational=0, abspath="/dev/sdc")
+        devices = [device1, device2, device3]
+        args = factory(report=True,
+                       devices=devices,
+                       filestore=False if objectstore == 'bluestore' else True,
+                      )
+        b = batch.Batch([])
+        b.args = args
+        b._sort_rotational_disks()
+        assert len(b.args.devices) == 2
+        if objectstore == 'bluestore':
+            assert len(b.args.db_devices) == 1
+        else:
+            assert len(b.args.journal_devices) == 1
+
+    def test_get_physical_osds_return_len(self, factory,
+                                          mock_devices_available,
+                                          conf_ceph_stub,
+                                          osds_per_device):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        args = factory(data_slots=1, osds_per_device=osds_per_device,
+                       osd_ids=[], dmcrypt=False)
+        osds = batch.get_physical_osds(mock_devices_available, args)
+        assert len(osds) == len(mock_devices_available) * osds_per_device
+
+    def test_get_physical_osds_rel_size(self, factory,
+                                          mock_devices_available,
+                                          conf_ceph_stub,
+                                          osds_per_device):
+        args = factory(data_slots=1, osds_per_device=osds_per_device,
+                       osd_ids=[], dmcrypt=False)
+        osds = batch.get_physical_osds(mock_devices_available, args)
+        for osd in osds:
+            assert osd.data[1] == 1.0 / osds_per_device
+
+    def test_get_physical_osds_abs_size(self, factory,
+                                          mock_devices_available,
+                                          conf_ceph_stub,
+                                          osds_per_device):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        args = factory(data_slots=1, osds_per_device=osds_per_device,
+                       osd_ids=[], dmcrypt=False)
+        osds = batch.get_physical_osds(mock_devices_available, args)
+        for osd, dev in zip(osds, mock_devices_available):
+            assert osd.data[2] == int(dev.vg_size[0] / osds_per_device)
+
+    def test_get_physical_osds_osd_ids(self, factory,
+                                          mock_devices_available,
+                                          osds_per_device):
+        pass
+
+    def test_get_physical_fast_allocs_length(self, factory,
+                                             conf_ceph_stub,
+                                             mock_devices_available):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        args = factory(block_db_slots=None, get_block_db_size=None)
+        fast = batch.get_physical_fast_allocs(mock_devices_available,
+                                              'block_db', 2, 2, args)
+        assert len(fast) == 2
+
+    @pytest.mark.parametrize('occupied_prior', range(7))
+    @pytest.mark.parametrize('slots,num_devs',
+                             [l for sub in [list(zip([x]*x, range(1, x + 1))) for x in range(1,7)] for l in sub])
+    def test_get_physical_fast_allocs_length_existing(self,
+                                                      num_devs,
+                                                      slots,
+                                                      occupied_prior,
+                                                      factory,
+                                                      conf_ceph_stub,
+                                                      mock_device_generator):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        occupied_prior = min(occupied_prior, slots)
+        devs = [mock_device_generator() for _ in range(num_devs)]
+        already_assigned = 0
+        while already_assigned < occupied_prior:
+            dev_i = random.randint(0, num_devs - 1)
+            dev = devs[dev_i]
+            if len(dev.lvs) < occupied_prior:
+                dev.lvs.append('foo')
+                dev.path = '/dev/bar'
+                already_assigned = sum([len(d.lvs) for d in devs])
+        args = factory(block_db_slots=None, get_block_db_size=None)
+        expected_num_osds = max(len(devs) * slots - occupied_prior, 0)
+        fast = batch.get_physical_fast_allocs(devs,
+                                              'block_db', slots,
+                                              expected_num_osds, args)
+        assert len(fast) == expected_num_osds
+        expected_assignment_on_used_devices = sum([slots - len(d.lvs) for d in devs if len(d.lvs) > 0])
+        assert len([f for f in fast if f[0] == '/dev/bar']) == expected_assignment_on_used_devices
+        assert len([f for f in fast if f[0] != '/dev/bar']) == expected_num_osds - expected_assignment_on_used_devices
+
+    def test_get_lvm_osds_return_len(self, factory,
+                                     mock_lv_device_generator,
+                                     conf_ceph_stub,
+                                     osds_per_device):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        args = factory(data_slots=1, osds_per_device=osds_per_device,
+                       osd_ids=[], dmcrypt=False)
+        mock_lvs = [mock_lv_device_generator()]
+        osds = batch.get_lvm_osds(mock_lvs, args)
+        assert len(osds) == 1
+
+
+class TestBatchOsd(object):
+
+    def test_osd_class_ctor(self):
+        osd = batch.Batch.OSD('/dev/data', 1, '5G', 1, 1, None)
+        assert osd.data == batch.Batch.OSD.VolSpec('/dev/data',
+                                                   1,
+                                                   '5G',
+                                                   1,
+                                                   'data')
+    def test_add_fast(self):
+        osd = batch.Batch.OSD('/dev/data', 1, '5G', 1, 1, None)
+        osd.add_fast_device('/dev/db', 1, '5G', 1, 'block_db')
+        assert osd.fast == batch.Batch.OSD.VolSpec('/dev/db',
+                                                   1,
+                                                   '5G',
+                                                   1,
+                                                   'block_db')
+
+    def test_add_very_fast(self):
+        osd = batch.Batch.OSD('/dev/data', 1, '5G', 1, 1, None)
+        osd.add_very_fast_device('/dev/wal', 1, '5G', 1)
+        assert osd.very_fast == batch.Batch.OSD.VolSpec('/dev/wal',
+                                                        1,
+                                                        '5G',
+                                                        1,
+                                                        'block_wal')
diff --git a/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_common.py b/ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_common.py
new file mode 100644 (file)
index 0000000..fe792d5
--- /dev/null
@@ -0,0 +1,8 @@
+from ceph_volume.devices.lvm import common
+
+
+class TestCommon(object):
+
+    def test_get_default_args_smoke(self):
+        default_args = common.get_default_args()
+        assert default_args
index dd902866884ba2785e12b2acea194191f06eda07..70915a0fe03af9a57b0bd2a7fbd80c7601df7d42 100644 (file)
@@ -1,5 +1,6 @@
 import pytest
 from ceph_volume.devices import lvm
+from ceph_volume.api import lvm as api
 from mock.mock import patch, Mock
 
 
@@ -8,7 +9,7 @@ class TestLVM(object):
     def test_main_spits_help_with_no_arguments(self, capsys):
         lvm.main.LVM([]).main()
         stdout, stderr = capsys.readouterr()
-        assert 'Use LVM and LVM-based technologies like dmcache to deploy' in stdout
+        assert 'Use LVM and LVM-based technologies to deploy' in stdout
 
     def test_main_shows_activate_subcommands(self, capsys):
         lvm.main.LVM([]).main()
@@ -115,6 +116,49 @@ class TestPrepare(object):
             expected = 'skipping {}, it is already prepared'.format('/dev/sdfoo')
             assert expected in str(error.value)
 
+    def test_setup_device_device_name_is_none(self):
+        result = lvm.prepare.Prepare([]).setup_device(device_type='data', device_name=None, tags={'ceph.type': 'data'}, size=0, slots=None)
+        assert result == ('', '', {'ceph.type': 'data'})
+
+    @patch('ceph_volume.api.lvm.Volume.set_tags')
+    @patch('ceph_volume.devices.lvm.prepare.api.get_first_lv')
+    def test_setup_device_lv_passed(self, m_get_first_lv, m_set_tags):
+        fake_volume = api.Volume(lv_name='lv_foo', lv_path='/fake-path', vg_name='vg_foo', lv_tags='', lv_uuid='fake-uuid')
+        m_get_first_lv.return_value = fake_volume
+        result = lvm.prepare.Prepare([]).setup_device(device_type='data', device_name='vg_foo/lv_foo', tags={'ceph.type': 'data'}, size=0, slots=None)
+
+        assert result == ('/fake-path', 'fake-uuid', {'ceph.type': 'data',
+                                                    'ceph.vdo': '0',
+                                                    'ceph.data_uuid': 'fake-uuid',
+                                                    'ceph.data_device': '/fake-path'})
+
+    @patch('ceph_volume.devices.lvm.prepare.api.create_lv')
+    @patch('ceph_volume.api.lvm.Volume.set_tags')
+    @patch('ceph_volume.util.disk.is_device')
+    def test_setup_device_device_passed(self, m_is_device, m_set_tags, m_create_lv):
+        fake_volume = api.Volume(lv_name='lv_foo', lv_path='/fake-path', vg_name='vg_foo', lv_tags='', lv_uuid='fake-uuid')
+        m_is_device.return_value = True
+        m_create_lv.return_value = fake_volume
+        result = lvm.prepare.Prepare([]).setup_device(device_type='data', device_name='/dev/sdx', tags={'ceph.type': 'data'}, size=0, slots=None)
+
+        assert result == ('/fake-path', 'fake-uuid', {'ceph.type': 'data',
+                                                    'ceph.vdo': '0',
+                                                    'ceph.data_uuid': 'fake-uuid',
+                                                    'ceph.data_device': '/fake-path'})
+
+    @patch('ceph_volume.devices.lvm.prepare.Prepare.get_ptuuid')
+    @patch('ceph_volume.devices.lvm.prepare.api.get_first_lv')
+    def test_setup_device_partition_passed(self, m_get_first_lv, m_get_ptuuid):
+        m_get_first_lv.side_effect = ValueError()
+        m_get_ptuuid.return_value = 'fake-uuid'
+        result = lvm.prepare.Prepare([]).setup_device(device_type='data', device_name='/dev/sdx', tags={'ceph.type': 'data'}, size=0, slots=None)
+
+        assert result == ('/dev/sdx', 'fake-uuid', {'ceph.type': 'data',
+                                                    'ceph.vdo': '0',
+                                                    'ceph.data_uuid': 'fake-uuid',
+                                                    'ceph.data_device': '/dev/sdx'})
+
+
 class TestActivate(object):
 
     def test_main_spits_help_with_no_arguments(self, capsys):
index f3be4972af2ad627d615997efc99628f0190a17e..1ff0acc9decf14cd1d35b3bb0ea42ea44b992523 100644 (file)
@@ -22,6 +22,8 @@
 
 - hosts: osds
   become: yes
+  vars:
+    external_devices: "{{ '--db-devices' if osd_objectstore == 'bluestore' else '--journal-devices' }}"
   tasks:
 
     - name: zap devices used for OSDs
         CEPH_VOLUME_DEBUG: 1
 
     - name: batch create devices again
-      command: "ceph-volume --cluster {{ cluster }} lvm batch --yes --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} --db-devices {{ devices[2:] | join(' ') }}"
+      command: "ceph-volume --cluster {{ cluster }} lvm batch --yes --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} {{ external_devices }} {{ devices[2:] | join(' ') }}"
       environment:
         CEPH_VOLUME_DEBUG: 1
 
     - name: ensure batch create is idempotent when all data devices are filtered
-      command: "ceph-volume --cluster {{ cluster }} lvm batch --yes --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} --db-devices {{ devices[2:] | join(' ') }}"
+      command: "ceph-volume --cluster {{ cluster }} lvm batch --yes --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} {{ external_devices }} {{ devices[2:] | join(' ') }}"
       register: batch_cmd
       failed_when: false
       environment:
@@ -49,7 +51,7 @@
          - batch_cmd.rc != 0
 
     - name: run batch --report to see if devices get filtered
-      command: "ceph-volume --cluster {{ cluster }} lvm batch --report --format=json --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} --db-devices {{ devices[2:] | join(' ') }}"
+      command: "ceph-volume --cluster {{ cluster }} lvm batch --report --format=json --{{ osd_objectstore|default('bluestore') }} {{ '--dmcrypt' if dmcrypt|default(false) else '' }} {{ devices[:2] | join(' ') }} {{ external_devices }} {{ devices[2:] | join(' ') }}"
       register: report_cmd
       failed_when: false
       environment:
index 9721fccdb6434b8e510a47c25784a99d7b67ba1c..038626245211422bbd2446806f8fa7992261f8e0 100644 (file)
@@ -2,6 +2,8 @@
 
 import pytest
 from ceph_volume.util.device import Devices
+from ceph_volume.util.lsmdisk import LSMDisk
+import ceph_volume.util.lsmdisk as lsmdisk
 
 
 @pytest.fixture
@@ -59,6 +61,52 @@ def device_sys_api_keys(device_info):
     report = Devices().json_report()[0]
     return list(report['sys_api'].keys())
 
+@pytest.fixture
+def device_data(device_info):
+    device_info(
+        devices={
+            # example output of disk.get_devices()
+            '/dev/sdb': {
+                'human_readable_size': '1.82 TB',
+                'locked': 0,
+                'model': 'PERC H700',
+                'nr_requests': '128',
+                'partitions': {},
+                'path': '/dev/sdb',
+                'removable': '0',
+                'rev': '2.10',
+                'ro': '0',
+                'rotational': '1',
+                'sas_address': '',
+                'sas_device_handle': '',
+                'scheduler_mode': 'cfq',
+                'sectors': 0,
+                'sectorsize': '512',
+                'size': 1999844147200.0,
+                'support_discard': '',
+                'vendor': 'DELL',
+            }
+        }
+    )
+
+    dev = Devices().devices[0]
+    dev.lsm_data = {
+        "serialNum": 'S2X9NX0H935283',
+        "transport": 'SAS',
+        "mediaType": 'HDD',
+        "rpm": 10000,
+        "linkSpeed": 6000,
+        "health": 'Good',
+        "ledSupport": {
+            "IDENTsupport": 'Supported',
+            "IDENTstatus": 'Off',
+            "FAILsupport": 'Supported',
+            "FAILstatus": 'Off',
+        },
+        "errors": [],
+    }
+    return dev.json_report()
+
 
 class TestInventory(object):
 
@@ -69,6 +117,7 @@ class TestInventory(object):
         'available',
         'lvs',
         'device_id',
+        'lsm_data',
     ]
 
     expected_sys_api_keys = [
@@ -92,6 +141,17 @@ class TestInventory(object):
         'vendor',
     ]
 
+    expected_lsm_keys = [
+        'serialNum',
+        'transport',
+        'mediaType',
+        'rpm',
+        'linkSpeed',
+        'health',
+        'ledSupport',
+        'errors',
+    ]
+
     def test_json_inventory_keys_unexpected(self, device_report_keys):
         for k in device_report_keys:
             assert k in self.expected_keys, "unexpected key {} in report".format(k)
@@ -108,3 +168,87 @@ class TestInventory(object):
         for k in self.expected_sys_api_keys:
             assert k in device_sys_api_keys, "expected key {} in sys_api field".format(k)
 
+    def test_lsm_data_type_unexpected(self, device_data):
+        assert isinstance(device_data['lsm_data'], dict), "lsm_data field must be of type dict"
+
+    def test_lsm_data_keys_unexpected(self, device_data):
+        for k in device_data['lsm_data'].keys():
+            assert k in self.expected_lsm_keys, "unexpected key {} in lsm_data field".format(k)
+
+    def test_lsm_data_keys_missing(self, device_data):
+        lsm_keys = device_data['lsm_data'].keys()
+        assert lsm_keys
+        for k in self.expected_lsm_keys:
+            assert k in lsm_keys, "expected key {} in lsm_data field".format(k)
+
+
+@pytest.fixture
+def lsm_info(monkeypatch):
+    def mock_query_lsm(_, func, path):
+        query_map = {
+            'serial_num_get': "S2X9NX0H935283",
+            'link_type_get': 6,
+            'rpm_get': 0,
+            'link_speed_get': 6000,
+            'health_status_get': 2,
+            'led_status_get': 36,
+        }
+        return query_map.get(func, 'Unknown')
+
+    # mocked states and settings taken from the libstoragemgmt code base
+    # c_binding/include/libstoragemgmt/libstoragemgmt_types.h at 
+    # https://github.com/libstorage/libstoragemgmt/
+    mock_health_map = {
+            -1: "Unknown",
+            0: "Fail",
+            1: "Warn",
+            2: "Good",
+    }
+    mock_transport_map = {
+            -1: "Unavailable",
+            0: "Fibre Channel",
+            2: "IBM SSA",
+            3: "Serial Bus",
+            4: "SCSI RDMA",
+            5: "iSCSI",
+            6: "SAS",
+            7: "ADT (Tape)",
+            8: "ATA/SATA",
+            9: "USB",
+            10: "SCSI over PCI-E",
+            11: "PCI-E",
+    }
+    class MockLEDStates():
+        LED_STATUS_UNKNOWN = 1
+        LED_STATUS_IDENT_ON = 2
+        LED_STATUS_IDENT_OFF = 4
+        LED_STATUS_IDENT_UNKNOWN = 8 
+        LED_STATUS_FAULT_ON = 16
+        LED_STATUS_FAULT_OFF = 32
+        LED_STATUS_FAULT_UNKNOWN = 64
+
+    monkeypatch.setattr(LSMDisk, '_query_lsm', mock_query_lsm)
+    monkeypatch.setattr(lsmdisk, 'health_map', mock_health_map)
+    monkeypatch.setattr(lsmdisk, 'transport_map', mock_transport_map)
+    monkeypatch.setattr(lsmdisk, 'lsm_Disk', MockLEDStates)
+
+    return LSMDisk('/dev/sda')
+
+
+class TestLSM(object):
+    def test_lsmdisk_health(self, lsm_info):
+        assert lsm_info.health == "Good"
+    def test_lsmdisk_transport(self, lsm_info):
+        assert lsm_info.transport == 'SAS'
+    def test_lsmdisk_mediatype(self, lsm_info):
+        assert lsm_info.media_type == 'Flash'
+    def test_lsmdisk_led_ident_support(self, lsm_info):
+        assert lsm_info.led_ident_support == 'Supported'
+    def test_lsmdisk_led_ident(self, lsm_info):
+        assert lsm_info.led_ident_state == 'Off'
+    def test_lsmdisk_led_fault_support(self, lsm_info):
+        assert lsm_info.led_fault_support == 'Supported'
+    def test_lsmdisk_led_fault(self, lsm_info):
+        assert lsm_info.led_fault_state == 'Off'    
+    def test_lsmdisk_report(self, lsm_info):
+        assert isinstance(lsm_info.json_report(), dict)
\ No newline at end of file
index b88b2bc501d45495a19a8f3ed1f2f2ee37e9cce1..afe9a23446d94507a31fcf151cafcedbd320d35e 100644 (file)
@@ -49,3 +49,21 @@ class TestVolume(object):
         log = caplog.records[-2]
         assert log.message == 'Running command: ceph-volume --cluster barnacle lvm --help'
         assert log.levelname == 'INFO'
+
+    def test_logs_set_level_error(self, caplog):
+        with pytest.raises(SystemExit) as error:
+            main.Volume(argv=['ceph-volume', '--log-level', 'error', '--cluster', 'barnacle', 'lvm', '--help'])
+        # make sure we aren't causing an actual error
+        assert error.value.code == 0
+        assert caplog.records
+        # only log levels of 'ERROR' or above should be captured
+        for log in caplog.records:
+            assert log.levelname in ['ERROR', 'CRITICAL']
+
+    def test_logs_incorrect_log_level(self, capsys):
+        with pytest.raises(SystemExit) as error:
+            main.Volume(argv=['ceph-volume', '--log-level', 'foo', '--cluster', 'barnacle', 'lvm', '--help'])
+        # make sure this is an error
+        assert error.value.code != 0
+        stdout, stderr = capsys.readouterr()
+        assert "invalid choice" in stderr
index 844518a44363948ebe01d5460e8b6b5dd1876f00..d4565ef4dcb5c3f6e2edfaff331c5ada65348ceb 100644 (file)
@@ -1,5 +1,6 @@
 import argparse
 import pytest
+import os
 from ceph_volume import exceptions
 from ceph_volume.util import arg_validators
 
@@ -9,7 +10,8 @@ class TestOSDPath(object):
     def setup(self):
         self.validator = arg_validators.OSDPath()
 
-    def test_is_not_root(self):
+    def test_is_not_root(self, monkeypatch):
+        monkeypatch.setattr(os, 'getuid', lambda: 100)
         with pytest.raises(exceptions.SuperUserError):
             self.validator('')
 
index 1d99953d5b2a0ebee89729841862b4fb25ffda42..ac8bc28afcbd7d250a78c9a8e201725be4081ecb 100644 (file)
@@ -15,7 +15,8 @@ class TestDevice(object):
                             deepcopy(volumes))
 
         data = {"/dev/sda": {"foo": "bar"}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert disk.sys_api
         assert "foo" in disk.sys_api
@@ -30,20 +31,23 @@ class TestDevice(object):
 
         # 5GB in size
         data = {"/dev/sda": {"size": "5368709120"}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert disk.lvm_size.gb == 4
 
     def test_lvm_size_rounds_down(self, device_info):
         # 5.5GB in size
         data = {"/dev/sda": {"size": "5905580032"}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert disk.lvm_size.gb == 4
 
     def test_is_lv(self, device_info):
         data = {"lv_path": "vg/lv", "vg_name": "vg", "name": "lv"}
-        device_info(lv=data)
+        lsblk = {"TYPE": "lvm"}
+        device_info(lv=data,lsblk=lsblk)
         disk = device.Device("vg/lv")
         assert disk.is_lv
 
@@ -119,10 +123,10 @@ class TestDevice(object):
         assert disk.is_device is True
 
     def test_is_partition(self, device_info):
-        data = {"/dev/sda": {"foo": "bar"}}
+        data = {"/dev/sda1": {"foo": "bar"}}
         lsblk = {"TYPE": "part"}
         device_info(devices=data, lsblk=lsblk)
-        disk = device.Device("/dev/sda")
+        disk = device.Device("/dev/sda1")
         assert disk.is_partition
 
     def test_is_not_acceptable_device(self, device_info):
@@ -133,31 +137,34 @@ class TestDevice(object):
         assert not disk.is_device
 
     def test_is_not_lvm_memeber(self, device_info):
-        data = {"/dev/sda": {"foo": "bar"}}
+        data = {"/dev/sda1": {"foo": "bar"}}
         lsblk = {"TYPE": "part"}
         device_info(devices=data, lsblk=lsblk)
-        disk = device.Device("/dev/sda")
+        disk = device.Device("/dev/sda1")
         assert not disk.is_lvm_member
 
     def test_is_lvm_memeber(self, device_info):
-        data = {"/dev/sda": {"foo": "bar"}}
+        data = {"/dev/sda1": {"foo": "bar"}}
         lsblk = {"TYPE": "part"}
         device_info(devices=data, lsblk=lsblk)
-        disk = device.Device("/dev/sda")
+        disk = device.Device("/dev/sda1")
         assert not disk.is_lvm_member
 
     def test_is_mapper_device(self, device_info):
-        device_info()
+        lsblk = {"TYPE": "lvm"}
+        device_info(lsblk=lsblk)
         disk = device.Device("/dev/mapper/foo")
         assert disk.is_mapper
 
     def test_dm_is_mapper_device(self, device_info):
-        device_info()
+        lsblk = {"TYPE": "lvm"}
+        device_info(lsblk=lsblk)
         disk = device.Device("/dev/dm-4")
         assert disk.is_mapper
 
     def test_is_not_mapper_device(self, device_info):
-        device_info()
+        lsblk = {"TYPE": "disk"}
+        device_info(lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert not disk.is_mapper
 
@@ -170,8 +177,6 @@ class TestDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries")
     def test_is_ceph_disk_blkid(self, monkeypatch, patch_bluestore_label):
-        monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                            lambda path: {'PARTLABEL': ""})
         disk = device.Device("/dev/sda")
         assert disk.is_ceph_disk_member
 
@@ -186,8 +191,6 @@ class TestDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries")
     def test_is_ceph_disk_member_not_available_blkid(self, monkeypatch, patch_bluestore_label):
-        monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                            lambda path: {'PARTLABEL': ""})
         disk = device.Device("/dev/sda")
         assert disk.is_ceph_disk_member
         assert not disk.available
@@ -195,36 +198,50 @@ class TestDevice(object):
 
     def test_reject_removable_device(self, device_info):
         data = {"/dev/sdb": {"removable": 1}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sdb")
         assert not disk.available
 
     def test_accept_non_removable_device(self, device_info):
         data = {"/dev/sdb": {"removable": 0, "size": 5368709120}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sdb")
         assert disk.available
 
+    def test_reject_not_acceptable_device(self, device_info):
+        data = {"/dev/dm-0": {"foo": "bar"}}
+        lsblk = {"TYPE": "mpath"}
+        device_info(devices=data, lsblk=lsblk)
+        disk = device.Device("/dev/dm-0")
+        assert not disk.available
+
     def test_reject_readonly_device(self, device_info):
         data = {"/dev/cdrom": {"ro": 1}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/cdrom")
         assert not disk.available
 
     def test_reject_smaller_than_5gb(self, device_info):
         data = {"/dev/sda": {"size": 5368709119}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert not disk.available, 'too small device is available'
 
     def test_accept_non_readonly_device(self, device_info):
         data = {"/dev/sda": {"ro": 0, "size": 5368709120}}
-        device_info(devices=data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=data,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert disk.available
 
-    def test_reject_bluestore_device(self, monkeypatch, patch_bluestore_label):
+    def test_reject_bluestore_device(self, monkeypatch, patch_bluestore_label, device_info):
         patch_bluestore_label.return_value = True
+        lsblk = {"TYPE": "disk"}
+        device_info(lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert not disk.available
         assert "Has BlueStore device label" in disk.rejected_reasons
@@ -236,8 +253,8 @@ class TestDevice(object):
         assert disk.is_ceph_disk_member is False
 
     def test_existing_vg_available(self, monkeypatch, device_info):
-        vg = api.VolumeGroup(vg_name='foo/bar', vg_free_count=6,
-                             vg_extent_size=1073741824)
+        vg = api.VolumeGroup(vg_name='foo/bar', vg_free_count=1536,
+                             vg_extent_size=4194304)
         monkeypatch.setattr(api, 'get_device_vgs', lambda x: [vg])
         lsblk = {"TYPE": "disk"}
         data = {"/dev/nvme0n1": {"size": "6442450944"}}
@@ -260,10 +277,10 @@ class TestDevice(object):
         assert not disk.available_raw
 
     def test_multiple_existing_vgs(self, monkeypatch, device_info):
-        vg1 = api.VolumeGroup(vg_name='foo/bar', vg_free_count=4,
-                             vg_extent_size=1073741824)
-        vg2 = api.VolumeGroup(vg_name='foo/bar', vg_free_count=6,
-                             vg_extent_size=1073741824)
+        vg1 = api.VolumeGroup(vg_name='foo/bar', vg_free_count=1000,
+                             vg_extent_size=4194304)
+        vg2 = api.VolumeGroup(vg_name='foo/bar', vg_free_count=536,
+                             vg_extent_size=4194304)
         monkeypatch.setattr(api, 'get_device_vgs', lambda x: [vg1, vg2])
         lsblk = {"TYPE": "disk"}
         data = {"/dev/nvme0n1": {"size": "6442450944"}}
@@ -314,7 +331,8 @@ class TestDevice(object):
 
     def test_get_device_id(self, device_info):
         udev = {k:k for k in ['ID_VENDOR', 'ID_MODEL', 'ID_SCSI_SERIAL']}
-        device_info(udevadm=udev)
+        lsblk = {"TYPE": "disk"}
+        device_info(udevadm=udev,lsblk=lsblk)
         disk = device.Device("/dev/sda")
         assert disk._get_device_id() == 'ID_VENDOR_ID_MODEL_ID_SCSI_SERIAL'
 
@@ -443,7 +461,8 @@ class TestDeviceOrdering(object):
         }
 
     def test_valid_before_invalid(self, device_info):
-        device_info(devices=self.data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=self.data,lsblk=lsblk)
         sda = device.Device("/dev/sda")
         sdb = device.Device("/dev/sdb")
 
@@ -451,7 +470,8 @@ class TestDeviceOrdering(object):
         assert sdb > sda
 
     def test_valid_alphabetical_ordering(self, device_info):
-        device_info(devices=self.data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=self.data,lsblk=lsblk)
         sda = device.Device("/dev/sda")
         sdc = device.Device("/dev/sdc")
 
@@ -459,7 +479,8 @@ class TestDeviceOrdering(object):
         assert sdc > sda
 
     def test_invalid_alphabetical_ordering(self, device_info):
-        device_info(devices=self.data)
+        lsblk = {"TYPE": "disk"}
+        device_info(devices=self.data,lsblk=lsblk)
         sdb = device.Device("/dev/sdb")
         sdd = device.Device("/dev/sdd")
 
@@ -470,16 +491,15 @@ class TestDeviceOrdering(object):
 class TestCephDiskDevice(object):
 
     def test_partlabel_lsblk(self, device_info):
-        lsblk = {"PARTLABEL": ""}
+        lsblk = {"TYPE": "disk", "PARTLABEL": ""}
         device_info(lsblk=lsblk)
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.partlabel == ''
 
     def test_partlabel_blkid(self, device_info):
-        lsblk = {"PARTLABEL": ""}
-        blkid = {"PARTLABEL": "ceph data"}
-        device_info(lsblk=lsblk, blkid=blkid)
+        blkid = {"TYPE": "disk", "PARTLABEL": "ceph data"}
+        device_info(blkid=blkid)
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.partlabel == 'ceph data'
@@ -487,21 +507,21 @@ class TestCephDiskDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries")
     def test_is_member_blkid(self, monkeypatch, patch_bluestore_label):
-        monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                            lambda path: {'PARTLABEL': ""})
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.is_member is True
 
     @pytest.mark.usefixtures("lsblk_ceph_disk_member",
                              "disable_kernel_queries")
-    def test_is_member_lsblk(self, patch_bluestore_label):
+    def test_is_member_lsblk(self, patch_bluestore_label, device_info):
+        lsblk = {"TYPE": "disk", "PARTLABEL": "ceph"}
+        device_info(lsblk=lsblk)
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.is_member is True
 
     def test_unknown_type(self, device_info):
-        lsblk = {"PARTLABEL": "gluster"}
+        lsblk = {"TYPE": "disk", "PARTLABEL": "gluster"}
         device_info(lsblk=lsblk)
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
@@ -512,8 +532,6 @@ class TestCephDiskDevice(object):
     @pytest.mark.usefixtures("blkid_ceph_disk_member",
                              "disable_kernel_queries")
     def test_type_blkid(self, monkeypatch, device_info, ceph_partlabel):
-        monkeypatch.setattr("ceph_volume.util.device.disk.lsblk",
-                            lambda path: {'PARTLABEL': ''})
         disk = device.CephDiskDevice(device.Device("/dev/sda"))
 
         assert disk.type in self.ceph_types
index a04c19924bbd0d2b7745bc33f881768d01800a7b..94cb4f691dbee180a0f095b95c989a32f8f1945f 100644 (file)
@@ -12,11 +12,23 @@ class ValidDevice(object):
         self.as_string = as_string
         self.gpt_ok = gpt_ok
 
-    def __call__(self, string):
-        device = Device(string)
+    def __call__(self, dev_path):
+        device = self._is_valid_device(dev_path)
+        return self._format_device(device)
+
+    def _format_device(self, device):
+        if self.as_string:
+            if device.is_lv:
+                # all codepaths expect an lv path to be returned in this format
+                return "{}/{}".format(device.vg_name, device.lv_name)
+            return device.path
+        return device
+
+    def _is_valid_device(self, dev_path):
+        device = Device(dev_path)
         error = None
         if not device.exists:
-            error = "Unable to proceed with non-existing device: %s" % string
+            error = "Unable to proceed with non-existing device: %s" % dev_path
         # FIXME this is not a nice API, this validator was meant to catch any
         # non-existing devices upfront, not check for gpt headers. Now this
         # needs to optionally skip checking gpt headers which is beyond
@@ -24,19 +36,26 @@ class ValidDevice(object):
         # configure this with a list of checks that can be excluded/included on
         # __init__
         elif device.has_gpt_headers and not self.gpt_ok:
-            error = "GPT headers found, they must be removed on: %s" % string
+            error = "GPT headers found, they must be removed on: %s" % dev_path
 
         if error:
             raise argparse.ArgumentError(None, error)
 
-        if self.as_string:
-            if device.is_lv:
-                # all codepaths expect an lv path to be returned in this format
-                return "{}/{}".format(device.vg_name, device.lv_name)
-            return string
         return device
 
 
+class ValidBatchDevice(ValidDevice):
+
+    def __call__(self, dev_path):
+        dev = self._is_valid_device(dev_path)
+        if dev.is_partition:
+            raise argparse.ArgumentError(
+                None,
+                '{} is a partition, please pass '
+                'LVs or raw block devices'.format(dev_path))
+        return self._format_device(dev)
+
+
 class OSDPath(object):
     """
     Validate path exists and it looks like an OSD directory.
index 2d00f6da3e59638deda4cf214da1a75151d97672..ad7950d2118e4f1bbf1e13ddaa6f368615b11664 100644 (file)
@@ -4,7 +4,8 @@ import os
 from functools import total_ordering
 from ceph_volume import sys_info, process
 from ceph_volume.api import lvm
-from ceph_volume.util import disk
+from ceph_volume.util import disk, system
+from ceph_volume.util.lsmdisk import LSMDisk
 from ceph_volume.util.constants import ceph_disk_guids
 
 report_template = """
@@ -26,13 +27,15 @@ class Devices(object):
     A container for Device instances with reporting
     """
 
-    def __init__(self, devices=None):
+    def __init__(self, filter_for_batch=False, with_lsm=False):
         if not sys_info.devices:
             sys_info.devices = disk.get_devices()
-        self.devices = [Device(k) for k in
+        self.devices = [Device(k, with_lsm) for k in
                             sys_info.devices.keys()]
+        if filter_for_batch:
+            self.devices = [d for d in self.devices if d.available_lvm_batch]
 
-    def pretty_report(self, all=True):
+    def pretty_report(self):
         output = [
             report_template.format(
                 dev='Device Path',
@@ -63,6 +66,7 @@ class Device(object):
         'path',
         'sys_api',
         'device_id',
+        'lsm_data',
     ]
     pretty_report_sys_fields = [
         'human_readable_size',
@@ -75,13 +79,17 @@ class Device(object):
         'vendor',
     ]
 
-    def __init__(self, path):
+    # define some class variables; mostly to enable the use of autospec in
+    # unittests
+    lvs = []
+
+    def __init__(self, path, with_lsm=False):
         self.path = path
         # LVs can have a vg/lv path, while disks will have /dev/sda
         self.abspath = path
         self.lv_api = None
-        self.vgs = []
         self.lvs = []
+        self.vgs = []
         self.vg_name = None
         self.lv_name = None
         self.disk_api = {}
@@ -90,6 +98,7 @@ class Device(object):
         self._exists = None
         self._is_lvm_member = None
         self._parse()
+        self.lsm_data = self.fetch_lsm(with_lsm)
 
         self.available_lvm, self.rejected_reasons_lvm = self._check_lvm_reject_reasons()
         self.available_raw, self.rejected_reasons_raw = self._check_raw_reject_reasons()
@@ -99,6 +108,21 @@ class Device(object):
 
         self.device_id = self._get_device_id()
 
+    def fetch_lsm(self, with_lsm):
+        '''
+        Attempt to fetch libstoragemgmt (LSM) metadata, and return to the caller
+        as a dict. An empty dict is passed back to the caller if the target path
+        is not a block device, or lsm is unavailable on the host. Otherwise the
+        json returned will provide LSM attributes, and any associated errors that
+        lsm encountered when probing the device.
+        '''
+        if not with_lsm or not self.exists or not self.is_device:
+            return {}
+
+        lsm_disk = LSMDisk(self.path)
+
+        return  lsm_disk.json_report()
+
     def __lt__(self, other):
         '''
         Implementing this method and __eq__ allows the @total_ordering
@@ -343,17 +367,28 @@ class Device(object):
     def is_partition(self):
         if self.disk_api:
             return self.disk_api['TYPE'] == 'part'
+        elif self.blkid_api:
+            return self.blkid_api['TYPE'] == 'part'
         return False
 
     @property
     def is_device(self):
+        api = None
         if self.disk_api:
-            is_device = self.disk_api['TYPE'] == 'device'
-            is_disk = self.disk_api['TYPE'] == 'disk'
+            api = self.disk_api
+        elif self.blkid_api:
+            api = self.blkid_api
+        if api:
+            is_device = api['TYPE'] == 'device'
+            is_disk = api['TYPE'] == 'disk'
             if is_device or is_disk:
                 return True
         return False
 
+    @property
+    def is_acceptable_device(self):
+        return self.is_device or self.is_partition
+
     @property
     def is_encrypted(self):
         """
@@ -389,6 +424,41 @@ class Device(object):
                    if lv.tags.get("ceph.type") in ["data", "block"]]
         return any(osd_ids)
 
+    @property
+    def vg_free_percent(self):
+        if self.vgs:
+            return [vg.free_percent for vg in self.vgs]
+        else:
+            return [1]
+
+    @property
+    def vg_size(self):
+        if self.vgs:
+            return [vg.size for vg in self.vgs]
+        else:
+            # TODO fix this...we can probably get rid of vg_free
+            return self.vg_free
+
+    @property
+    def vg_free(self):
+        '''
+        Returns the free space in all VGs on this device. If no VGs are
+        present, returns the disk size.
+        '''
+        if self.vgs:
+            return [vg.free for vg in self.vgs]
+        else:
+            # We could also query 'lvmconfig
+            # --typeconfig full' and use allocations -> physical_extent_size
+            # value to project the space for a vg
+            # assuming 4M extents here
+            extent_size = 4194304
+            vg_free = int(self.size / extent_size) * extent_size
+            if self.size % 4194304 == 0:
+                # If the extent size divides size exactly, deduct on extent for
+                # LVM metadata
+                vg_free -= extent_size
+            return [vg_free]
 
     def _check_generic_reject_reasons(self):
         reasons = [
@@ -398,9 +468,12 @@ class Device(object):
         ]
         rejected = [reason for (k, v, reason) in reasons if
                     self.sys_api.get(k, '') == v]
-        # reject disks smaller than 5GB
-        if int(self.sys_api.get('size', 0)) < 5368709120:
-            rejected.append('Insufficient space (<5GB)')
+        if self.is_acceptable_device:
+            # reject disks smaller than 5GB
+            if int(self.sys_api.get('size', 0)) < 5368709120:
+                rejected.append('Insufficient space (<5GB)')
+        else:
+            rejected.append("Device type is not acceptable. It should be raw device or partition")
         if self.is_ceph_disk_member:
             rejected.append("Used by ceph-disk")
         if self.has_bluestore_label:
@@ -410,14 +483,13 @@ class Device(object):
     def _check_lvm_reject_reasons(self):
         rejected = []
         if self.vgs:
-            available_vgs = [vg for vg in self.vgs if vg.free >= 5368709120]
+            available_vgs = [vg for vg in self.vgs if int(vg.vg_free_count) > 10]
             if not available_vgs:
-                rejected.append('Insufficient space (<5GB) on vgs')
+                rejected.append('Insufficient space (<10 extents) on vgs')
         else:
             # only check generic if no vgs are present. Vgs might hold lvs and
             # that might cause 'locked' to trigger
             rejected.extend(self._check_generic_reject_reasons())
-
         return len(rejected) == 0, rejected
 
     def _check_raw_reject_reasons(self):
@@ -427,6 +499,14 @@ class Device(object):
 
         return len(rejected) == 0, rejected
 
+    @property
+    def available_lvm_batch(self):
+        if self.sys_api.get("partitions"):
+            return False
+        if system.device_is_mounted(self.path):
+            return False
+        return self.is_device or self.is_lv
+
 
 class CephDiskDevice(object):
     """
index 3e246ab357d085a5ec946d185187a633f91c4f52..e022c9e5126e644683d1582d888e93c73149f1b1 100644 (file)
@@ -330,7 +330,7 @@ def is_device(dev):
     # use lsblk first, fall back to using stat
     TYPE = lsblk(dev).get('TYPE')
     if TYPE:
-        return TYPE == 'disk'
+        return TYPE in ['disk', 'mpath']
 
     # fallback to stat
     return _stat_is_device(os.lstat(dev).st_mode)
@@ -603,6 +603,12 @@ class Size(object):
         _b = self._b / other
         return Size(b=_b)
 
+    def __bool__(self):
+        return self.b != 0
+
+    def __nonzero__(self):
+        return self.__bool__()
+
     def __getattr__(self, unit):
         """
         Calculate units on the fly, relies on the fact that ``bytes`` has been
@@ -747,7 +753,7 @@ def get_devices(_sys_block_path='/sys/block'):
     for block in block_devs:
         devname = os.path.basename(block[0])
         diskname = block[1]
-        if block[2] != 'disk':
+        if block[2] not in ['disk', 'mpath']:
             continue
         sysdir = os.path.join(_sys_block_path, devname)
         metadata = {}
diff --git a/ceph/src/ceph-volume/ceph_volume/util/lsmdisk.py b/ceph/src/ceph-volume/ceph_volume/util/lsmdisk.py
new file mode 100644 (file)
index 0000000..607fd4f
--- /dev/null
@@ -0,0 +1,196 @@
+""" 
+This module handles the interaction with libstoragemgmt for local disk 
+devices. Interaction may fail with LSM for a number of issues, but the
+intent here is to make this a soft fail, since LSM related data is not
+a critical component of ceph-volume.
+"""
+import logging
+
+try:
+    from lsm import LocalDisk, LsmError
+    from lsm import Disk as lsm_Disk
+except ImportError:
+    lsm_available = False
+    transport_map = {}
+    health_map = {}
+    lsm_Disk = None
+else:
+    lsm_available = True
+    transport_map = {
+            lsm_Disk.LINK_TYPE_UNKNOWN: "Unavailable",
+            lsm_Disk.LINK_TYPE_FC: "Fibre Channel",
+            lsm_Disk.LINK_TYPE_SSA: "IBM SSA",
+            lsm_Disk.LINK_TYPE_SBP: "Serial Bus",
+            lsm_Disk.LINK_TYPE_SRP: "SCSI RDMA",
+            lsm_Disk.LINK_TYPE_ISCSI: "iSCSI",
+            lsm_Disk.LINK_TYPE_SAS: "SAS",
+            lsm_Disk.LINK_TYPE_ADT: "ADT (Tape)",
+            lsm_Disk.LINK_TYPE_ATA: "ATA/SATA",
+            lsm_Disk.LINK_TYPE_USB: "USB",
+            lsm_Disk.LINK_TYPE_SOP: "SCSI over PCI-E",
+            lsm_Disk.LINK_TYPE_PCIE: "PCI-E",
+    }
+    health_map = {
+        lsm_Disk.HEALTH_STATUS_UNKNOWN: "Unknown",
+        lsm_Disk.HEALTH_STATUS_FAIL: "Fail",
+        lsm_Disk.HEALTH_STATUS_WARN: "Warn",
+        lsm_Disk.HEALTH_STATUS_GOOD: "Good",
+    }
+
+logger = logging.getLogger(__name__)
+
+
+class LSMDisk:
+    def __init__(self, dev_path):
+        self.dev_path = dev_path
+        self.error_list = set()
+
+        if lsm_available:
+            self.lsm_available = True
+            self.disk = LocalDisk()
+        else:
+            self.lsm_available = False
+            self.error_list.add("libstoragemgmt (lsm module) is unavailable")
+            logger.info("LSM information is unavailable: libstoragemgmt is not installed")
+            self.disk = None
+
+        self.led_bits = None
+
+    @property
+    def errors(self):
+        """show any errors that the LSM interaction has encountered (str)"""
+        return ", ".join(self.error_list)
+
+    def _query_lsm(self, func, path):
+        """Common method used to call the LSM functions, returning the function's result or None"""
+
+        # if disk is None, lsm is unavailable so all calls should return None
+        if self.disk is None:
+            return None
+        
+        method = getattr(self.disk, func)
+        try:
+            output = method(path)
+        except LsmError as err:
+            logger.error("LSM Error: {}".format(err._msg))
+            self.error_list.add(err._msg)
+            return None
+        else:
+            return output
+
+    @property
+    def led_status(self):
+        """Fetch LED status, store in the LSMDisk object and return current status (int)"""
+        if self.led_bits is None:
+            self.led_bits = self._query_lsm('led_status_get', self.dev_path) or 1
+            return self.led_bits
+        else:
+            return self.led_bits
+
+    @property
+    def led_ident_state(self):
+        """Query a disks IDENT LED state to discover when it is On, Off or Unknown (str)"""
+        if self.led_status == 1:
+            return "Unsupported"
+        if self.led_status & lsm_Disk.LED_STATUS_IDENT_ON == lsm_Disk.LED_STATUS_IDENT_ON:
+            return "On"
+        elif self.led_status & lsm_Disk.LED_STATUS_IDENT_OFF == lsm_Disk.LED_STATUS_IDENT_OFF:
+            return "Off"
+        elif self.led_status & lsm_Disk.LED_STATUS_IDENT_UNKNOWN == lsm_Disk.LED_STATUS_IDENT_UNKNOWN:
+            return "Unknown"
+        
+        return "Unsupported"
+
+    @property
+    def led_fault_state(self):
+        """Query a disks FAULT LED state to discover when it is On, Off or Unknown (str)"""
+        if self.led_status == 1:
+            return "Unsupported"
+        if self.led_status & lsm_Disk.LED_STATUS_FAULT_ON == lsm_Disk.LED_STATUS_FAULT_ON:
+            return "On"
+        elif self.led_status & lsm_Disk.LED_STATUS_FAULT_OFF == lsm_Disk.LED_STATUS_FAULT_OFF:
+            return "Off"
+        elif self.led_status & lsm_Disk.LED_STATUS_FAULT_UNKNOWN == lsm_Disk.LED_STATUS_FAULT_UNKNOWN:
+            return "Unknown"
+        
+        return "Unsupported"
+
+    @property
+    def led_ident_support(self):
+        """Query the LED state to determine IDENT support: Unknown, Supported, Unsupported (str)"""
+        if self.led_status == 1:
+            return "Unknown"
+
+        ident_states = (
+            lsm_Disk.LED_STATUS_IDENT_ON + 
+            lsm_Disk.LED_STATUS_IDENT_OFF + 
+            lsm_Disk.LED_STATUS_IDENT_UNKNOWN
+        )
+
+        if (self.led_status & ident_states) == 0:
+            return "Unsupported"
+        
+        return "Supported"
+
+    @property
+    def led_fault_support(self):
+        """Query the LED state to determine FAULT support: Unknown, Supported, Unsupported (str)"""
+        if self.led_status == 1:
+            return "Unknown"
+
+        fail_states = (
+            lsm_Disk.LED_STATUS_FAULT_ON + 
+            lsm_Disk.LED_STATUS_FAULT_OFF + 
+            lsm_Disk.LED_STATUS_FAULT_UNKNOWN
+        )
+
+        if self.led_status & fail_states == 0:
+            return "Unsupported"
+
+        return "Supported"
+
+    @property
+    def health(self):
+        """Determine the health of the disk from LSM : Unknown, Fail, Warn or Good (str)"""
+        _health_int = self._query_lsm('health_status_get', self.dev_path)
+        return health_map.get(_health_int, "Unknown")
+
+    @property
+    def transport(self):
+        """Translate a disks link type to a human readable format (str)"""
+        _link_type = self._query_lsm('link_type_get', self.dev_path)
+        return transport_map.get(_link_type, "Unknown")
+
+
+    @property
+    def media_type(self):
+        """Use the rpm value to determine the type of disk media: Flash or HDD (str)"""
+        _rpm = self._query_lsm('rpm_get', self.dev_path)
+        if _rpm is not None:
+            if _rpm == 0:
+                return "Flash"
+            elif _rpm > 1:
+                return "HDD"
+
+        return "Unknown"
+
+    def json_report(self):
+        """Return the LSM related metadata for the current local disk (dict)"""
+        if self.lsm_available:
+            return {
+                "serialNum": self._query_lsm('serial_num_get', self.dev_path) or "Unknown",
+                "transport": self.transport,
+                "mediaType": self.media_type,
+                "rpm": self._query_lsm('rpm_get', self.dev_path) or "Unknown",
+                "linkSpeed": self._query_lsm('link_speed_get', self.dev_path) or "Unknown",
+                "health": self.health,
+                "ledSupport": {
+                    "IDENTsupport": self.led_ident_support,
+                    "IDENTstatus": self.led_ident_state,
+                    "FAILsupport": self.led_fault_support,
+                    "FAILstatus": self.led_fault_state,
+                },
+                "errors": list(self.error_list)
+            }
+        else:
+            return {}
index 85c3480a9509434a5e52a734331fcc30a2ff1037..85b7033c212a883af51bd71e8e1f06111d9f15ee 100644 (file)
@@ -4,9 +4,11 @@ but also a compounded ("single call") helper to do them in order. Some plugins
 may want to change some part of the process, while others might want to consume
 the single-call helper
 """
+import errno
 import os
 import logging
 import json
+import time
 from ceph_volume import process, conf, __release__, terminal
 from ceph_volume.util import system, constants, str_to_int, disk
 
@@ -93,6 +95,7 @@ def get_block_db_size(lv_format=True):
         logger.debug(
             'block.db has no size configuration, will fallback to using as much as possible'
         )
+        # TODO better to return disk.Size(b=0) here
         return None
     logger.debug('bluestore_block_db_size set to %s' % conf_db_size)
     db_size = disk.Size(b=str_to_int(conf_db_size))
@@ -458,9 +461,23 @@ def osd_mkfs_bluestore(osd_id, fsid, keyring=None, wal=False, db=False):
 
     command = base_command + supplementary_command
 
-    _, _, returncode = process.call(command, stdin=keyring, show_command=True)
-    if returncode != 0:
-        raise RuntimeError('Command failed with exit code %s: %s' % (returncode, ' '.join(command)))
+    """
+    When running in containers the --mkfs on raw device sometimes fails
+    to acquire a lock through flock() on the device because systemd-udevd holds one temporarily.
+    See KernelDevice.cc and _lock() to understand how ceph-osd acquires the lock.
+    Because this is really transient, we retry up to 5 times and wait for 1 sec in-between
+    """
+    for retry in range(5):
+        _, _, returncode = process.call(command, stdin=keyring, terminal_verbose=True, show_command=True)
+        if returncode == 0:
+            break
+        else:
+            if returncode == errno.EWOULDBLOCK:
+                    time.sleep(1)
+                    logger.info('disk is held by another process, trying to mkfs again... (%s/5 attempt)' % retry)
+                    continue
+            else:
+                raise RuntimeError('Command failed with exit code %s: %s' % (returncode, ' '.join(command)))
 
 
 def osd_mkfs_filestore(osd_id, fsid, keyring):
index 6a140fbb2715275b9fec0ad1faf3bca7fa491f7d..85a366d26819ccf893e4ca11fbc2ccf94cd88426 100644 (file)
@@ -8,11 +8,15 @@ osd_component_titles = """
 
 
 osd_reused_id = """
-  OSD id {id_: <55}"""
+  OSD id          {id_: <55}"""
 
 
 osd_component = """
-  {_type: <15} {path: <55} {size: <15} {percent}%"""
+  {_type: <15} {path: <55} {size: <15} {percent:.2%}"""
+
+
+osd_encryption = """
+  encryption:     {enc: <15}"""
 
 
 total_osds = """
index 44a32bcd60646a0b74ae466d329017313a27be20..25622d4f2e365469e4aef5f034bef0230c784407 100755 (executable)
@@ -1258,8 +1258,12 @@ def main():
                 except IOError as e:
                     if e.errno != errno.EPIPE:
                         raise e
+        try:
+            sys.stdout.flush()
+        except IOError as e:
+            if e.errno != errno.EPIPE:
+                raise e
 
-        sys.stdout.flush()
 
     # Block until command completion (currently scrub and deep_scrub only)
     if block:
index d6f85f1ad8811a0ef2120cde2f6f8e4be8c1b79c..ea45474b29482c54f8325ac6b24388ae65d68cd1 100755 (executable)
@@ -37,13 +37,13 @@ You can invoke cephadm in two ways:
 
        injected_stdin = '...'
 """
-
 import argparse
 import datetime
 import fcntl
 import ipaddress
 import json
 import logging
+from logging.config import dictConfig
 import os
 import platform
 import pwd
@@ -58,10 +58,13 @@ import sys
 import tempfile
 import time
 import errno
+import struct
 try:
     from typing import Dict, List, Tuple, Optional, Union, Any, NoReturn, Callable, IO
 except ImportError:
     pass
+
+import re
 import uuid
 
 from functools import wraps
@@ -92,6 +95,36 @@ cached_stdin = None
 
 DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 
+# Log and console output config
+logging_config = {
+    'version': 1,
+    'disable_existing_loggers': True,
+    'formatters': {
+        'cephadm': {
+            'format': '%(asctime)s %(levelname)s %(message)s'
+        },
+    },
+    'handlers': {
+        'console':{
+            'level':'INFO',
+            'class':'logging.StreamHandler',
+        },
+        'log_file': {
+            'level': 'DEBUG',
+            'class': 'logging.handlers.RotatingFileHandler',
+            'formatter': 'cephadm',
+            'filename': '%s/cephadm.log' % LOG_DIR,
+            'maxBytes': 1024000,
+            'backupCount': 1,
+        }
+    },
+    'loggers': {
+        '': {
+            'level': 'DEBUG',
+            'handlers': ['console', 'log_file'],
+        }
+    }
+}
 
 class termcolor:
     yellow = '\033[93m'
@@ -128,7 +161,7 @@ class Monitoring(object):
 
     components = {
         "prometheus": {
-            "image": "prom/prometheus:latest",
+            "image": "docker.io/prom/prometheus:v2.18.1",
             "cpus": '2',
             "memory": '4GB',
             "args": [
@@ -141,7 +174,7 @@ class Monitoring(object):
             ],
         },
         "node-exporter": {
-            "image": "prom/node-exporter",
+            "image": "docker.io/prom/node-exporter:v0.18.1",
             "cpus": "1",
             "memory": "1GB",
             "args": [
@@ -149,7 +182,7 @@ class Monitoring(object):
             ],
         },
         "grafana": {
-            "image": "ceph/ceph-grafana:latest",
+            "image": "docker.io/ceph/ceph-grafana:6.6.2",
             "cpus": "2",
             "memory": "4GB",
             "args": [],
@@ -161,10 +194,13 @@ class Monitoring(object):
             ],
         },
         "alertmanager": {
-            "image": "prom/alertmanager",
+            "image": "docker.io/prom/alertmanager:v0.20.0",
             "cpus": "2",
             "memory": "2GB",
-            "args": [],
+            "args": [
+               "--web.listen-address=:{}".format(port_map['alertmanager'][0]),
+               "--cluster.listen-address=:{}".format(port_map['alertmanager'][1]),
+            ],
             "config-json-files": [
                 "alertmanager.yml",
             ],
@@ -200,17 +236,13 @@ class NFSGanesha(object):
         self.daemon_id = daemon_id
         self.image = image
 
-        def json_get(key, default=None, require=False):
-            if require and not key in config_json.keys():
-                raise Error('{} missing from config-json'.format(key))
-            return config_json.get(key, default)
-
         # config-json options
-        self.pool = json_get('pool', require=True)
-        self.namespace = json_get('namespace')
-        self.userid = json_get('userid')
-        self.extra_args = json_get('extra_args', [])
-        self.files = json_get('files', {})
+        self.pool = dict_get(config_json, 'pool', require=True)
+        self.namespace = dict_get(config_json, 'namespace')
+        self.userid = dict_get(config_json, 'userid')
+        self.extra_args = dict_get(config_json, 'extra_args', [])
+        self.files = dict_get(config_json, 'files', {})
+        self.rgw = dict_get(config_json, 'rgw', {})
 
         # validate the supplied args
         self.validate()
@@ -220,13 +252,17 @@ class NFSGanesha(object):
         # type: (str, Union[int, str]) -> NFSGanesha
         return cls(fsid, daemon_id, get_parm(args.config_json), args.image)
 
-    @staticmethod
-    def get_container_mounts(data_dir):
+    def get_container_mounts(self, data_dir):
         # type: (str) -> Dict[str, str]
         mounts = dict()
         mounts[os.path.join(data_dir, 'config')] = '/etc/ceph/ceph.conf:z'
         mounts[os.path.join(data_dir, 'keyring')] = '/etc/ceph/keyring:z'
         mounts[os.path.join(data_dir, 'etc/ganesha')] = '/etc/ganesha:z'
+        if self.rgw:
+            cluster = self.rgw.get('cluster', 'ceph')
+            rgw_user = self.rgw.get('user', 'admin')
+            mounts[os.path.join(data_dir, 'keyring.rgw')] = \
+                    '/var/lib/ceph/radosgw/%s-%s/keyring:z' % (cluster, rgw_user)
         return mounts
 
     @staticmethod
@@ -265,6 +301,13 @@ class NFSGanesha(object):
                 if fname not in self.files:
                     raise Error('required file missing from config-json: %s' % fname)
 
+        # check for an RGW config
+        if self.rgw:
+            if not self.rgw.get('keyring'):
+                raise Error('RGW keyring is missing')
+            if not self.rgw.get('user'):
+                raise Error('RGW user is missing')
+
     def get_daemon_name(self):
         # type: () -> str
         return '%s.%s' % (self.daemon_type, self.daemon_id)
@@ -280,14 +323,6 @@ class NFSGanesha(object):
         # type: () -> List[str]
         return self.daemon_args + self.extra_args
 
-    def get_file_content(self, fname):
-        # type: (str) -> str
-        """Normalize the json file content into a string"""
-        content = self.files.get(fname)
-        if isinstance(content, list):
-            content = '\n'.join(content)
-        return content
-
     def create_daemon_dirs(self, data_dir, uid, gid):
         # type: (str, int, int) -> None
         """Create files under the container data dir"""
@@ -303,13 +338,21 @@ class NFSGanesha(object):
         # populate files from the config-json
         for fname in self.files:
             config_file = os.path.join(config_dir, fname)
-            config_content = self.get_file_content(fname)
+            config_content = dict_get_join(self.files, fname)
             logger.info('Write file: %s' % (config_file))
             with open(config_file, 'w') as f:
                 os.fchown(f.fileno(), uid, gid)
                 os.fchmod(f.fileno(), 0o600)
                 f.write(config_content)
 
+        # write the RGW keyring
+        if self.rgw:
+            keyring_path = os.path.join(data_dir, 'keyring.rgw')
+            with open(keyring_path, 'w') as f:
+                os.fchmod(f.fileno(), 0o600)
+                os.fchown(f.fileno(), uid, gid)
+                f.write(self.rgw.get('keyring', ''))
+
     def get_rados_grace_container(self, action):
         # type: (str) -> CephContainer
         """Container for a ganesha action on the grace db"""
@@ -359,13 +402,8 @@ class CephIscsi(object):
         self.daemon_id = daemon_id
         self.image = image
 
-        def json_get(key, default=None, require=False):
-            if require and not key in config_json.keys():
-                raise Error('{} missing from config-json'.format(key))
-            return config_json.get(key, default)
-
         # config-json options
-        self.files = json_get('files', {})
+        self.files = dict_get(config_json, 'files', {})
 
         # validate the supplied args
         self.validate()
@@ -382,9 +420,9 @@ class CephIscsi(object):
         mounts[os.path.join(data_dir, 'config')] = '/etc/ceph/ceph.conf:z'
         mounts[os.path.join(data_dir, 'keyring')] = '/etc/ceph/keyring:z'
         mounts[os.path.join(data_dir, 'iscsi-gateway.cfg')] = '/etc/ceph/iscsi-gateway.cfg:z'
-        mounts[os.path.join(data_dir, 'configfs')] = '/sys/kernel/config:z'
+        mounts[os.path.join(data_dir, 'configfs')] = '/sys/kernel/config'
         mounts[log_dir] = '/var/log/rbd-target-api:z'
-        mounts['/dev/log'] = '/dev/log:z'
+        mounts['/dev'] = '/dev'
         return mounts
 
     @staticmethod
@@ -435,14 +473,6 @@ class CephIscsi(object):
             cname = '%s-%s' % (cname, desc)
         return cname
 
-    def get_file_content(self, fname):
-        # type: (str) -> str
-        """Normalize the json file content into a string"""
-        content = self.files.get(fname)
-        if isinstance(content, list):
-            content = '\n'.join(content)
-        return content
-
     def create_daemon_dirs(self, data_dir, uid, gid):
         # type: (str, int, int) -> None
         """Create files under the container data dir"""
@@ -456,7 +486,7 @@ class CephIscsi(object):
         # populate files from the config-json
         for fname in self.files:
             config_file = os.path.join(data_dir, fname)
-            config_content = self.get_file_content(fname)
+            config_content = dict_get_join(self.files, fname)
             logger.info('Write file: %s' % (config_file))
             with open(config_file, 'w') as f:
                 os.fchown(f.fileno(), uid, gid)
@@ -479,20 +509,174 @@ class CephIscsi(object):
         # type: () -> CephContainer
         tcmu_container = get_container(self.fsid, self.daemon_type, self.daemon_id)
         tcmu_container.entrypoint = "/usr/bin/tcmu-runner"
-        tcmu_container.volume_mounts.pop("/dev/log")
-        tcmu_container.volume_mounts["/dev"] = "/dev:z"
         tcmu_container.cname = self.get_container_name(desc='tcmu')
+        # remove extra container args for tcmu container.
+        # extra args could cause issue with forking service type
+        tcmu_container.container_args = []
         return tcmu_container
 
 ##################################
 
 
+class CustomContainer(object):
+    """Defines a custom container"""
+    daemon_type = 'container'
+
+    def __init__(self, fsid: str, daemon_id: Union[int, str],
+                 config_json: Dict, image: str) -> None:
+        self.fsid = fsid
+        self.daemon_id = daemon_id
+        self.image = image
+
+        # config-json options
+        self.entrypoint = dict_get(config_json, 'entrypoint')
+        self.uid = dict_get(config_json, 'uid', 65534)  # nobody
+        self.gid = dict_get(config_json, 'gid', 65534)  # nobody
+        self.volume_mounts = dict_get(config_json, 'volume_mounts', {})
+        self.args = dict_get(config_json, 'args', [])
+        self.envs = dict_get(config_json, 'envs', [])
+        self.privileged = dict_get(config_json, 'privileged', False)
+        self.bind_mounts = dict_get(config_json, 'bind_mounts', [])
+        self.ports = dict_get(config_json, 'ports', [])
+        self.dirs = dict_get(config_json, 'dirs', [])
+        self.files = dict_get(config_json, 'files', {})
+
+    @classmethod
+    def init(cls, fsid: str, daemon_id: Union[int, str]) -> 'CustomContainer':
+        return cls(fsid, daemon_id, get_parm(args.config_json), args.image)
+
+    def create_daemon_dirs(self, data_dir: str, uid: int, gid: int) -> None:
+        """
+        Create dirs/files below the container data directory.
+        """
+        logger.info('Creating custom container configuration '
+                    'dirs/files in {} ...'.format(data_dir))
+
+        if not os.path.isdir(data_dir):
+            raise OSError('data_dir is not a directory: %s' % data_dir)
+
+        for dir_path in self.dirs:
+            logger.info('Creating directory: {}'.format(dir_path))
+            dir_path = os.path.join(data_dir, dir_path.strip('/'))
+            makedirs(dir_path, uid, gid, 0o755)
+
+        for file_path in self.files:
+            logger.info('Creating file: {}'.format(file_path))
+            content = dict_get_join(self.files, file_path)
+            file_path = os.path.join(data_dir, file_path.strip('/'))
+            with open(file_path, 'w', encoding='utf-8') as f:
+                os.fchown(f.fileno(), uid, gid)
+                os.fchmod(f.fileno(), 0o600)
+                f.write(content)
+
+    def get_daemon_args(self) -> List[str]:
+        return []
+
+    def get_container_args(self) -> List[str]:
+        return self.args
+
+    def get_container_envs(self) -> List[str]:
+        return self.envs
+
+    def get_container_mounts(self, data_dir: str) -> Dict[str, str]:
+        """
+        Get the volume mounts. Relative source paths will be located below
+        `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+
+        Example:
+        {
+            /foo/conf: /conf
+            foo/conf: /conf
+        }
+        becomes
+        {
+            /foo/conf: /conf
+            /var/lib/ceph/<cluster-fsid>/<daemon-name>/foo/conf: /conf
+        }
+        """
+        mounts = {}
+        for source, destination in self.volume_mounts.items():
+            source = os.path.join(data_dir, source)
+            mounts[source] = destination
+        return mounts
+
+    def get_container_binds(self, data_dir: str) -> List[List[str]]:
+        """
+        Get the bind mounts. Relative `source=...` paths will be located below
+        `/var/lib/ceph/<cluster-fsid>/<daemon-name>`.
+
+        Example:
+        [
+            'type=bind',
+            'source=lib/modules',
+            'destination=/lib/modules',
+            'ro=true'
+        ]
+        becomes
+        [
+            ...
+            'source=/var/lib/ceph/<cluster-fsid>/<daemon-name>/lib/modules',
+            ...
+        ]
+        """
+        binds = self.bind_mounts.copy()
+        for bind in binds:
+            for index, value in enumerate(bind):
+                match = re.match(r'^source=(.+)$', value)
+                if match:
+                    bind[index] = 'source={}'.format(os.path.join(
+                        data_dir, match.group(1)))
+        return binds
+
+##################################
+
+
+def dict_get(d: Dict, key: str, default: Any = None, require: bool = False) -> Any:
+    """
+    Helper function to get a key from a dictionary.
+    :param d: The dictionary to process.
+    :param key: The name of the key to get.
+    :param default: The default value in case the key does not
+        exist. Default is `None`.
+    :param require: Set to `True` if the key is required. An
+        exception will be raised if the key does not exist in
+        the given dictionary.
+    :return: Returns the value of the given key.
+    :raises: :exc:`self.Error` if the given key does not exist
+        and `require` is set to `True`.
+    """
+    if require and key not in d.keys():
+        raise Error('{} missing from dict'.format(key))
+    return d.get(key, default)
+
+##################################
+
+
+def dict_get_join(d: Dict, key: str) -> Any:
+    """
+    Helper function to get the value of a given key from a dictionary.
+    `List` values will be converted to a string by joining them with a
+    line break.
+    :param d: The dictionary to process.
+    :param key: The name of the key to get.
+    :return: Returns the value of the given key. If it was a `list`, it
+        will be joining with a line break.
+    """
+    value = d.get(key)
+    if isinstance(value, list):
+        value = '\n'.join(map(str, value))
+    return value
+
+##################################
+
+
 def get_supported_daemons():
     # type: () -> List[str]
     supported_daemons = list(Ceph.daemons)
     supported_daemons.extend(Monitoring.components)
     supported_daemons.append(NFSGanesha.daemon_type)
     supported_daemons.append(CephIscsi.daemon_type)
+    supported_daemons.append(CustomContainer.daemon_type)
     assert len(supported_daemons) == len(set(supported_daemons))
     return supported_daemons
 
@@ -535,10 +719,9 @@ def check_ip_port(ip, port):
     # type: (str, int) -> None
     if not args.skip_ping_check:
         logger.info('Verifying IP %s port %d ...' % (ip, port))
-        if ip.startswith('[') or '::' in ip:
+        if is_ipv6(ip):
             s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
-            if ip.startswith('[') and ip.endswith(']'):
-                ip = ip[1:-1]
+            ip = unwrap_ipv6(ip)
         else:
             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         try:
@@ -842,7 +1025,8 @@ def call(command,  # type: List[str]
                     assert False
             except (IOError, OSError):
                 pass
-        logger.debug(desc + ':profile rt=%s, stop=%s, exit=%s, reads=%s'
+        if verbose:
+            logger.debug(desc + ':profile rt=%s, stop=%s, exit=%s, reads=%s'
                 % (time.time()-start_time, stop, process.poll(), reads))
 
     returncode = process.wait()
@@ -1224,13 +1408,14 @@ def get_last_local_ceph_image():
     out, _, _ = call_throws(
         [container_path, 'images',
          '--filter', 'label=ceph=True',
+         '--filter', 'dangling=false',
          '--format', '{{.Repository}} {{.Tag}}'])
-    out_lines = out.splitlines()
-    if len(out_lines) > 0:
-        repository, tag = out_lines[0].split()
-        r = '{}:{}'.format(repository, tag)
-        logger.info('Using recent ceph image %s' % r)
-        return r
+    for line in out.splitlines():
+        if len(line.split()) == 2:
+            repository, tag = line.split()
+            r = '{}:{}'.format(repository, tag)
+            logger.info('Using recent ceph image %s' % r)
+            return r
     return None
 
 
@@ -1305,7 +1490,7 @@ def copy_tree(src, dst, uid=None, gid=None):
     """
     Copy a directory tree from src to dst
     """
-    if not uid or not gid:
+    if uid is None or gid is None:
         (uid, gid) = extract_uid_gid()
 
     for src_dir in src:
@@ -1330,7 +1515,7 @@ def copy_files(src, dst, uid=None, gid=None):
     """
     Copy a files from src to dst
     """
-    if not uid or not gid:
+    if uid is None or gid is None:
         (uid, gid) = extract_uid_gid()
 
     for src_file in src:
@@ -1350,7 +1535,7 @@ def move_files(src, dst, uid=None, gid=None):
     """
     Move files from src to dst
     """
-    if not uid or not gid:
+    if uid is None or gid is None:
         (uid, gid) = extract_uid_gid()
 
     for src_file in src:
@@ -1549,6 +1734,9 @@ def get_daemon_args(fsid, daemon_type, daemon_id):
     elif daemon_type == NFSGanesha.daemon_type:
         nfs_ganesha = NFSGanesha.init(fsid, daemon_id)
         r += nfs_ganesha.get_daemon_args()
+    elif daemon_type == CustomContainer.daemon_type:
+        cc = CustomContainer.init(fsid, daemon_id)
+        r.extend(cc.get_daemon_args())
 
     return r
 
@@ -1565,6 +1753,7 @@ def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
             os.fchown(f.fileno(), uid, gid)
             os.fchmod(f.fileno(), 0o600)
             f.write(config)
+
     if keyring:
         keyring_path = os.path.join(data_dir, 'keyring')
         with open(keyring_path, 'w') as f:
@@ -1573,7 +1762,7 @@ def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
             f.write(keyring)
 
     if daemon_type in Monitoring.components.keys():
-        config = get_parm(args.config_json) # type: ignore
+        config_json: Dict[str, Any] = get_parm(args.config_json)
         required_files = Monitoring.components[daemon_type].get('config-json-files', list())
 
         # Set up directories specific to the monitoring component
@@ -1599,25 +1788,25 @@ def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
 
         # populate the config directory for the component from the config-json
         for fname in required_files:
-            if 'files' in config: # type: ignore
-                if isinstance(config['files'][fname], list):  # type: ignore
-                    content = '\n'.join(config['files'][fname])  # type: ignore
-                else:
-                    content = config['files'][fname]  # type: ignore
-
+            if 'files' in config_json:  # type: ignore
+                content = dict_get_join(config_json['files'], fname)
                 with open(os.path.join(data_dir_root, config_dir, fname), 'w') as f:
                     os.fchown(f.fileno(), uid, gid)
                     os.fchmod(f.fileno(), 0o600)
                     f.write(content)
 
-    if daemon_type == NFSGanesha.daemon_type:
+    elif daemon_type == NFSGanesha.daemon_type:
         nfs_ganesha = NFSGanesha.init(fsid, daemon_id)
         nfs_ganesha.create_daemon_dirs(data_dir, uid, gid)
 
-    if daemon_type == CephIscsi.daemon_type:
+    elif daemon_type == CephIscsi.daemon_type:
         ceph_iscsi = CephIscsi.init(fsid, daemon_id)
         ceph_iscsi.create_daemon_dirs(data_dir, uid, gid)
 
+    elif daemon_type == CustomContainer.daemon_type:
+        cc = CustomContainer.init(fsid, daemon_id)
+        cc.create_daemon_dirs(data_dir, uid, gid)
+
 
 def get_parm(option):
     # type: (str) -> Dict[str, str]
@@ -1682,8 +1871,12 @@ def get_container_binds(fsid, daemon_type, daemon_id):
     binds = list()
 
     if daemon_type == CephIscsi.daemon_type:
-        assert daemon_id
         binds.extend(CephIscsi.get_container_binds())
+    elif daemon_type == CustomContainer.daemon_type:
+        assert daemon_id
+        cc = CustomContainer.init(fsid, daemon_id)
+        data_dir = get_data_dir(fsid, daemon_type, daemon_id)
+        binds.extend(cc.get_container_binds(data_dir))
 
     return binds
 
@@ -1761,7 +1954,8 @@ def get_container_mounts(fsid, daemon_type, daemon_id,
     if daemon_type == NFSGanesha.daemon_type:
         assert daemon_id
         data_dir = get_data_dir(fsid, daemon_type, daemon_id)
-        mounts.update(NFSGanesha.get_container_mounts(data_dir))
+        nfs_ganesha = NFSGanesha.init(fsid, daemon_id)
+        mounts.update(nfs_ganesha.get_container_mounts(data_dir))
 
     if daemon_type == CephIscsi.daemon_type:
         assert daemon_id
@@ -1769,14 +1963,27 @@ def get_container_mounts(fsid, daemon_type, daemon_id,
         log_dir = get_log_dir(fsid)
         mounts.update(CephIscsi.get_container_mounts(data_dir, log_dir))
 
+    if daemon_type == CustomContainer.daemon_type:
+        assert daemon_id
+        cc = CustomContainer.init(fsid, daemon_id)
+        data_dir = get_data_dir(fsid, daemon_type, daemon_id)
+        mounts.update(cc.get_container_mounts(data_dir))
+
     return mounts
 
 
-def get_container(fsid, daemon_type, daemon_id,
-                  privileged=False,
-                  ptrace=False,
-                  container_args=[]):
-    # type: (str, str, Union[int, str], bool, bool, List[str]) -> CephContainer
+def get_container(fsid: str, daemon_type: str, daemon_id: Union[int, str],
+                  privileged: bool = False,
+                  ptrace: bool = False,
+                  container_args: Optional[List[str]] = None) -> 'CephContainer':
+    entrypoint: str = ''
+    name: str = ''
+    ceph_args: List[str] = []
+    envs: List[str] = []
+    host_network: bool = True
+
+    if container_args is None:
+        container_args = []
     if daemon_type in ['mon', 'osd']:
         # mon and osd need privileged in order for libudev to query devices
         privileged = True
@@ -1794,21 +2001,23 @@ def get_container(fsid, daemon_type, daemon_id,
         name = '%s.%s' % (daemon_type, daemon_id)
     elif daemon_type in Monitoring.components:
         entrypoint = ''
-        name = ''
     elif daemon_type == NFSGanesha.daemon_type:
         entrypoint = NFSGanesha.entrypoint
         name = '%s.%s' % (daemon_type, daemon_id)
+        envs.extend(NFSGanesha.get_container_envs())
     elif daemon_type == CephIscsi.daemon_type:
         entrypoint = CephIscsi.entrypoint
         name = '%s.%s' % (daemon_type, daemon_id)
         # So the container can modprobe iscsi_target_mod and have write perms
         # to configfs we need to make this a privileged container.
         privileged = True
-    else:
-        entrypoint = ''
-        name = ''
+    elif daemon_type == CustomContainer.daemon_type:
+        cc = CustomContainer.init(fsid, daemon_id)
+        entrypoint = cc.entrypoint
+        host_network = False
+        envs.extend(cc.get_container_envs())
+        container_args.extend(cc.get_container_args())
 
-    ceph_args = []  # type: List[str]
     if daemon_type in Monitoring.components:
         uid, gid = extract_uid_gid_monitoring(daemon_type)
         monitoring_args = [
@@ -1823,9 +2032,15 @@ def get_container(fsid, daemon_type, daemon_id,
     elif daemon_type in Ceph.daemons:
         ceph_args = ['-n', name, '-f']
 
-    envs = []  # type: List[str]
-    if daemon_type == NFSGanesha.daemon_type:
-        envs.extend(NFSGanesha.get_container_envs())
+    # if using podman, set -d, --conmon-pidfile & --cidfile flags
+    # so service can have Type=Forking
+    if 'podman' in container_path:
+        runtime_dir = '/run'
+        container_args.extend(['-d',
+            '--conmon-pidfile',
+            runtime_dir + '/ceph-%s@%s.%s.service-pid' % (fsid, daemon_type, daemon_id),
+            '--cidfile',
+            runtime_dir + '/ceph-%s@%s.%s.service-cid' % (fsid, daemon_type, daemon_id)])
 
     return CephContainer(
         image=args.image,
@@ -1838,6 +2053,8 @@ def get_container(fsid, daemon_type, daemon_id,
         envs=envs,
         privileged=privileged,
         ptrace=ptrace,
+        init=args.container_init,
+        host_network=host_network,
     )
 
 
@@ -1956,7 +2173,7 @@ def deploy_daemon(fsid, daemon_type, daemon_id, c, uid, gid,
 def _write_container_cmd_to_bash(file_obj, container, comment=None, background=False):
     # type: (IO[str], CephContainer, Optional[str], Optional[bool]) -> None
     if comment:
-        # Sometimes adding a comment, espectially if there are multiple containers in one
+        # Sometimes adding a comment, especially if there are multiple containers in one
         # unit file, makes it easier to read and grok.
         file_obj.write('# ' + comment + '\n')
     # Sometimes, adding `--rm` to a run_cmd doesn't work. Let's remove the container manually
@@ -1968,6 +2185,7 @@ def _write_container_cmd_to_bash(file_obj, container, comment=None, background=F
     # container run command
     file_obj.write(' '.join(container.run_cmd()) + (' &' if background else '') + '\n')
 
+
 def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
                         enable=True, start=True,
                         osd_fsid=None):
@@ -1976,6 +2194,11 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
     data_dir = get_data_dir(fsid, daemon_type, daemon_id)
     with open(data_dir + '/unit.run.new', 'w') as f:
         f.write('set -e\n')
+
+        if daemon_type in Ceph.daemons:
+            install_path = find_program('install')
+            f.write('{install_path} -d -m0770 -o {uid} -g {gid} /var/run/ceph/{fsid}\n'.format(install_path=install_path, fsid=fsid, uid=uid, gid=gid))
+
         # pre-start cmd(s)
         if daemon_type == 'osd':
             # osds have a pre-start step
@@ -1988,7 +2211,6 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
                     p = os.path.join(data_dir, n)
                     f.write('[ ! -L {p} ] || chown {uid}:{gid} {p}\n'.format(p=p, uid=uid, gid=gid))
             else:
-                f.write('# LVM OSDs use ceph-volume lvm activate:\n')
                 prestart = CephContainer(
                     image=args.image,
                     entrypoint='/usr/sbin/ceph-volume',
@@ -2002,22 +2224,18 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
                     bind_mounts=get_container_binds(fsid, daemon_type, daemon_id),
                     cname='ceph-%s-%s.%s-activate' % (fsid, daemon_type, daemon_id),
                 )
-                f.write(' '.join(prestart.run_cmd()) + '\n')
+                _write_container_cmd_to_bash(f, prestart, 'LVM OSDs use ceph-volume lvm activate')
         elif daemon_type == NFSGanesha.daemon_type:
             # add nfs to the rados grace db
             nfs_ganesha = NFSGanesha.init(fsid, daemon_id)
             prestart = nfs_ganesha.get_rados_grace_container('add')
-            f.write(' '.join(prestart.run_cmd()) + '\n')
+            _write_container_cmd_to_bash(f, prestart,  'add daemon to rados grace')
         elif daemon_type == CephIscsi.daemon_type:
             f.write(' '.join(CephIscsi.configfs_mount_umount(data_dir, mount=True)) + '\n')
             ceph_iscsi = CephIscsi.init(fsid, daemon_id)
             tcmu_container = ceph_iscsi.get_tcmu_runner_container()
             _write_container_cmd_to_bash(f, tcmu_container, 'iscsi tcmu-runnter container', background=True)
 
-        if daemon_type in Ceph.daemons:
-            install_path = find_program('install')
-            f.write('{install_path} -d -m0770 -o {uid} -g {gid} /var/run/ceph/{fsid}\n'.format(install_path=install_path, fsid=fsid, uid=uid, gid=gid))
-
         _write_container_cmd_to_bash(f, c, '%s.%s' % (daemon_type, str(daemon_id)))
         os.fchmod(f.fileno(), 0o600)
         os.rename(data_dir + '/unit.run.new',
@@ -2040,12 +2258,12 @@ def deploy_daemon_units(fsid, uid, gid, daemon_type, daemon_id, c,
                 cname='ceph-%s-%s.%s-deactivate' % (fsid, daemon_type,
                                                     daemon_id),
             )
-            f.write(' '.join(poststop.run_cmd()) + '\n')
+            _write_container_cmd_to_bash(f, poststop, 'deactivate osd')
         elif daemon_type == NFSGanesha.daemon_type:
             # remove nfs from the rados grace db
             nfs_ganesha = NFSGanesha.init(fsid, daemon_id)
             poststop = nfs_ganesha.get_rados_grace_container('remove')
-            f.write(' '.join(poststop.run_cmd()) + '\n')
+            _write_container_cmd_to_bash(f, poststop, 'remove daemon from rados grace')
         elif daemon_type == CephIscsi.daemon_type:
             # make sure we also stop the tcmu container
             ceph_iscsi = CephIscsi.init(fsid, daemon_id)
@@ -2242,6 +2460,13 @@ def install_base_units(fsid):
 
 def get_unit_file(fsid):
     # type: (str) -> str
+    extra_args = ''
+    if 'podman' in container_path:
+        extra_args = ('ExecStartPre=-/bin/rm -f /%t/%n-pid /%t/%n-cid\n'
+            'ExecStopPost=-/bin/rm -f /%t/%n-pid /%t/%n-cid\n'
+            'Type=forking\n'
+            'PIDFile=/%t/%n-pid\n')
+
     u = """# generated by cephadm
 [Unit]
 Description=Ceph %i for {fsid}
@@ -2271,13 +2496,15 @@ TimeoutStartSec=120
 TimeoutStopSec=120
 StartLimitInterval=30min
 StartLimitBurst=5
-
+{extra_args}
 [Install]
 WantedBy=ceph-{fsid}.target
 """.format(
     container_path=container_path,
     fsid=fsid,
-    data_dir=args.data_dir)
+    data_dir=args.data_dir,
+    extra_args=extra_args)
+
     return u
 
 ##################################
@@ -2285,17 +2512,19 @@ WantedBy=ceph-{fsid}.target
 
 class CephContainer:
     def __init__(self,
-                 image,
-                 entrypoint,
-                 args=[],
-                 volume_mounts={},
-                 cname='',
-                 container_args=[],
-                 envs=None,
-                 privileged=False,
-                 ptrace=False,
-                 bind_mounts=None):
-        # type: (str, str, List[str], Dict[str, str], str, List[str], Optional[List[str]], bool, bool, Optional[List[List[str]]]) -> None
+                 image: str,
+                 entrypoint: str,
+                 args: List[str] = [],
+                 volume_mounts: Dict[str, str] = {},
+                 cname: str = '',
+                 container_args: List[str] = [],
+                 envs: Optional[List[str]] = None,
+                 privileged: bool = False,
+                 ptrace: bool = False,
+                 bind_mounts: Optional[List[List[str]]] = None,
+                 init: bool = False,
+                 host_network: bool = True,
+                 ) -> None:
         self.image = image
         self.entrypoint = entrypoint
         self.args = args
@@ -2306,83 +2535,90 @@ class CephContainer:
         self.privileged = privileged
         self.ptrace = ptrace
         self.bind_mounts = bind_mounts if bind_mounts else []
+        self.init = init
+        self.host_network = host_network
 
-    def run_cmd(self):
-        # type: () -> List[str]
-        vols = []  # type: List[str]
-        envs = []  # type: List[str]
-        cname = []  # type: List[str]
-        binds = []  # type: List[str]
-        entrypoint = []  # type: List[str]
-        if self.entrypoint:
-            entrypoint = ['--entrypoint', self.entrypoint]
+    def run_cmd(self) -> List[str]:
+        cmd_args: List[str] = [
+            str(container_path),
+            'run',
+            '--rm',
+            '--ipc=host',
+        ]
+        envs: List[str] = [
+            '-e', 'CONTAINER_IMAGE=%s' % self.image,
+            '-e', 'NODE_NAME=%s' % get_hostname(),
+        ]
+        vols: List[str] = []
+        binds: List[str] = []
 
-        priv = []  # type: List[str]
+        if self.host_network:
+            cmd_args.append('--net=host')
+        if self.entrypoint:
+            cmd_args.extend(['--entrypoint', self.entrypoint])
         if self.privileged:
-            priv = ['--privileged',
-                    # let OSD etc read block devs that haven't been chowned
-                    '--group-add=disk']
-        if self.ptrace:
-            priv.append('--cap-add=SYS_PTRACE')
+            cmd_args.extend([
+                '--privileged',
+                # let OSD etc read block devs that haven't been chowned
+                '--group-add=disk'])
+        if self.ptrace and not self.privileged:
+            # if privileged, the SYS_PTRACE cap is already added
+            # in addition, --cap-add and --privileged are mutually
+            # exclusive since podman >= 2.0
+            cmd_args.append('--cap-add=SYS_PTRACE')
+        if self.init:
+            cmd_args.append('--init')
+        if self.cname:
+            cmd_args.extend(['--name', self.cname])
+        if self.envs:
+            for env in self.envs:
+                envs.extend(['-e', env])
+
         vols = sum(
             [['-v', '%s:%s' % (host_dir, container_dir)]
              for host_dir, container_dir in self.volume_mounts.items()], [])
         binds = sum([['--mount', '{}'.format(','.join(bind))]
-                     for bind in self.bind_mounts],[])
-        envs = [
-            '-e', 'CONTAINER_IMAGE=%s' % self.image,
-            '-e', 'NODE_NAME=%s' % get_hostname(),
-        ]
-        if self.envs:
-            for e in self.envs:
-                envs.extend(['-e', e])
-        cname = ['--name', self.cname] if self.cname else []
-        return [
+                     for bind in self.bind_mounts], [])
+
+        return cmd_args + self.container_args + envs + vols + binds + [
+                   self.image,
+               ] + self.args  # type: ignore
+
+    def shell_cmd(self, cmd: List[str]) -> List[str]:
+        cmd_args: List[str] = [
             str(container_path),
             'run',
             '--rm',
-            '--net=host',
             '--ipc=host',
-        ] + self.container_args + priv + \
-        cname + envs + \
-        vols + binds + entrypoint + \
-        [
-            self.image
-        ] + self.args # type: ignore
+        ]
+        envs: List[str] = [
+            '-e', 'CONTAINER_IMAGE=%s' % self.image,
+            '-e', 'NODE_NAME=%s' % get_hostname(),
+        ]
+        vols: List[str] = []
+        binds: List[str] = []
 
-    def shell_cmd(self, cmd):
-        # type: (List[str]) -> List[str]
-        priv = []  # type: List[str]
+        if self.host_network:
+            cmd_args.append('--net=host')
         if self.privileged:
-            priv = ['--privileged',
-                    # let OSD etc read block devs that haven't been chowned
-                    '--group-add=disk']
-        vols = []  # type: List[str]
+            cmd_args.extend([
+                '--privileged',
+                # let OSD etc read block devs that haven't been chowned
+                '--group-add=disk',
+            ])
+        if self.envs:
+            for env in self.envs:
+                envs.extend(['-e', env])
+
         vols = sum(
             [['-v', '%s:%s' % (host_dir, container_dir)]
              for host_dir, container_dir in self.volume_mounts.items()], [])
-        binds = [] # type: List[str]
         binds = sum([['--mount', '{}'.format(','.join(bind))]
                      for bind in self.bind_mounts], [])
-        envs = [
-            '-e', 'CONTAINER_IMAGE=%s' % self.image,
-            '-e', 'NODE_NAME=%s' % get_hostname(),
-        ]
-        if self.envs:
-            for e in self.envs:
-                envs.extend(['-e', e])
-        cmd_args = [] # type: List[str]
-        if cmd:
-            cmd_args = ['-c'] + cmd
-        return [
-            str(container_path),
-            'run',
-            '--rm',
-            '--net=host',
-            '--ipc=host',
-        ] + self.container_args + priv + envs + vols + binds + [
+
+        return cmd_args + self.container_args + envs + vols + binds + [
             '--entrypoint', cmd[0],
-            self.image
+            self.image,
         ] + cmd[1:]
 
     def exec_cmd(self, cmd):
@@ -2415,7 +2651,6 @@ class CephContainer:
 
     def run(self, timeout=DEFAULT_TIMEOUT):
         # type: (Optional[int]) -> str
-        logger.debug(self.run_cmd())
         out, _, _ = call_throws(
                 self.run_cmd(), desc=self.entrypoint, timeout=timeout)
         return out
@@ -2474,21 +2709,37 @@ def command_inspect_image():
     # type: () -> int
     out, err, ret = call_throws([
         container_path, 'inspect',
-        '--format', '{{.Id}}',
+        '--format', '{{.ID}},{{json .RepoDigests}}',
         args.image])
     if ret:
         return errno.ENOENT
-    image_id = normalize_container_id(out.strip())
+    info_from = get_image_info_from_inspect(out.strip(), args.image)
+
     ver = CephContainer(args.image, 'ceph', ['--version']).run().strip()
+    info_from['ceph_version'] = ver
+
+    print(json.dumps(info_from, indent=4, sort_keys=True))
+    return 0
+
+
+def get_image_info_from_inspect(out, image):
+    # type: (str, str) -> Dict[str, str]
+    image_id, digests = out.split(',', 1)
+    if not out:
+        raise Error('inspect {}: empty result'.format(image))
     r = {
-        'image_id': image_id,
-        'ceph_version': ver,
+        'image_id': normalize_container_id(image_id)
     }
-    print(json.dumps(r, indent=4, sort_keys=True))
-    return 0
+    if digests:
+        json_digests = json.loads(digests)
+        if json_digests:
+            r['repo_digest'] = json_digests[0]
+    return r
+
 
 ##################################
 
+
 def unwrap_ipv6(address):
     # type: (str) -> str
     if address.startswith('[') and address.endswith(']'):
@@ -2496,6 +2747,21 @@ def unwrap_ipv6(address):
     return address
 
 
+def wrap_ipv6(address):
+    # type: (str) -> str
+
+    # We cannot assume it's already wrapped or even an IPv6 address if
+    # it's already wrapped it'll not pass (like if it's a hostname) and trigger
+    # the ValueError
+    try:
+        if ipaddress.ip_address(unicode(address)).version == 6:
+            return f"[{address}]"
+    except ValueError:
+        pass
+
+    return address
+
+
 def is_ipv6(address):
     # type: (str) -> bool
     address = unwrap_ipv6(address)
@@ -2540,7 +2806,7 @@ def command_bootstrap():
         raise Error('hostname is a fully qualified domain name (%s); either fix (e.g., "sudo hostname %s" or similar) or pass --allow-fqdn-hostname' % (hostname, hostname.split('.')[0]))
     mon_id = args.mon_id or hostname
     mgr_id = args.mgr_id or generate_service_id()
-    logging.info('Cluster fsid: %s' % fsid)
+    logger.info('Cluster fsid: %s' % fsid)
     ipv6 = False
 
     l = FileLock(fsid)
@@ -2551,6 +2817,8 @@ def command_bootstrap():
     base_ip = ''
     if args.mon_ip:
         ipv6 = is_ipv6(args.mon_ip)
+        if ipv6:
+            args.mon_ip = wrap_ipv6(args.mon_ip)
         hasport = r.findall(args.mon_ip)
         if hasport:
             port = int(hasport[0])
@@ -2936,6 +3204,9 @@ def command_bootstrap():
         cli(['config', 'set', 'mgr', 'mgr/cephadm/registry_username', args.registry_username, '--force'])
         cli(['config', 'set', 'mgr', 'mgr/cephadm/registry_password', args.registry_password, '--force'])
 
+    if args.container_init:
+        cli(['config', 'set', 'mgr', 'mgr/cephadm/container_init', str(args.container_init), '--force'])
+
     if not args.skip_dashboard:
         # Configure SSL port (cephadm only allows to configure dashboard SSL port)
         # if the user does not want to use SSL he can change this setting once the cluster is up
@@ -3161,8 +3432,22 @@ def command_deploy():
                       config=config, keyring=keyring,
                       reconfig=args.reconfig,
                       ports=daemon_ports)
+
+    elif daemon_type == CustomContainer.daemon_type:
+        cc = CustomContainer.init(args.fsid, daemon_id)
+        if not args.reconfig and not redeploy:
+            daemon_ports.extend(cc.ports)
+        c = get_container(args.fsid, daemon_type, daemon_id,
+                          privileged=cc.privileged,
+                          ptrace=args.allow_ptrace)
+        deploy_daemon(args.fsid, daemon_type, daemon_id, c,
+                      uid=cc.uid, gid=cc.gid, config=None,
+                      keyring=None, reconfig=args.reconfig,
+                      ports=daemon_ports)
+
     else:
-        raise Error("{} not implemented in command_deploy function".format(daemon_type))
+        raise Error('daemon type {} not implemented in command_deploy function'
+                    .format(daemon_type))
 
 ##################################
 
@@ -3213,9 +3498,15 @@ def command_shell():
     if args.keyring:
         mounts[pathify(args.keyring)] = '/etc/ceph/ceph.keyring:z'
     if args.mount:
-        mount = pathify(args.mount)
-        filename = os.path.basename(mount)
-        mounts[mount] = '/mnt/{}:z'.format(filename)
+        for _mount in args.mount:
+            split_src_dst = _mount.split(':')
+            mount = pathify(split_src_dst[0])
+            filename = os.path.basename(split_src_dst[0])
+            if len(split_src_dst) > 1:
+                dst = split_src_dst[1] + ':z' if len(split_src_dst) == 3 else split_src_dst[1]
+                mounts[mount] = dst
+            else:
+                mounts[mount] = '/mnt/{}:z'.format(filename)
     if args.command:
         command = args.command
     else:
@@ -3437,6 +3728,7 @@ def command_list_networks():
 
 def command_ls():
     # type: () -> None
+
     ls = list_daemons(detail=not args.no_detail,
                       legacy_dir=args.legacy_dir)
     print(json.dumps(ls, indent=4))
@@ -3562,8 +3854,13 @@ def list_daemons(detail=True, legacy_dir=None):
                                        err.startswith('%s, version ' % cmd):
                                         version = err.split(' ')[2]
                                         seen_versions[image_id] = version
+                                elif daemon_type == CustomContainer.daemon_type:
+                                    # Because a custom container can contain
+                                    # everything, we do not know which command
+                                    # to execute to get the version.
+                                    pass
                                 else:
-                                    logging.warning('version for unknown daemon type %s' % daemon_type)
+                                    logger.warning('version for unknown daemon type %s' % daemon_type)
                         else:
                             vfile = os.path.join(data_dir, fsid, j, 'unit.image') # type: ignore
                             try:
@@ -4107,6 +4404,7 @@ def check_time_sync(enabler=None):
         'systemd-timesyncd.service',
         'ntpd.service', # el7 (at least)
         'ntp.service',  # 18.04 (at least)
+        'ntpsec.service',  # 20.04 (at least) / buster
     ]
     if not check_units(units, enabler):
         logger.warning('No time sync service is running; checked for %s' % units)
@@ -4262,7 +4560,7 @@ class Packager(object):
 
     def query_shaman(self, distro, distro_version, branch, commit):
         # query shaman
-        logging.info('Fetching repo metadata from shaman and chacra...')
+        logger.info('Fetching repo metadata from shaman and chacra...')
         shaman_url = 'https://shaman.ceph.com/api/repos/ceph/{branch}/{sha1}/{distro}/{distro_version}/repo/?arch={arch}'.format(
             distro=distro,
             distro_version=distro_version,
@@ -4273,13 +4571,13 @@ class Packager(object):
         try:
             shaman_response = urlopen(shaman_url)
         except HTTPError as err:
-            logging.error('repository not found in shaman (might not be available yet)')
+            logger.error('repository not found in shaman (might not be available yet)')
             raise Error('%s, failed to fetch %s' % (err, shaman_url))
         try:
             chacra_url = shaman_response.geturl()
             chacra_response = urlopen(chacra_url)
         except HTTPError as err:
-            logging.error('repository not found in chacra (might not be available yet)')
+            logger.error('repository not found in chacra (might not be available yet)')
             raise Error('%s, failed to fetch %s' % (err, chacra_url))
         return chacra_response.read().decode('utf-8')
 
@@ -4310,17 +4608,18 @@ class Apt(Packager):
                                   branch=branch, commit=commit)
         self.distro = self.DISTRO_NAMES[distro]
         self.distro_codename = distro_codename
+        self.distro_version = distro_version
 
     def repo_path(self):
         return '/etc/apt/sources.list.d/ceph.list'
 
     def add_repo(self):
         url, name = self.repo_gpgkey()
-        logging.info('Installing repo GPG key from %s...' % url)
+        logger.info('Installing repo GPG key from %s...' % url)
         try:
             response = urlopen(url)
         except HTTPError as err:
-            logging.error('failed to fetch GPG repo key from %s: %s' % (
+            logger.error('failed to fetch GPG repo key from %s: %s' % (
                 url, err))
             raise Error('failed to fetch GPG key')
         key = response.read().decode('utf-8')
@@ -4337,7 +4636,7 @@ class Apt(Packager):
             content = self.query_shaman(self.distro, self.distro_codename, self.branch,
                                         self.commit)
 
-        logging.info('Installing repo file at %s...' % self.repo_path())
+        logger.info('Installing repo file at %s...' % self.repo_path())
         with open(self.repo_path(), 'w') as f:
             f.write(content)
 
@@ -4345,30 +4644,75 @@ class Apt(Packager):
         for name in ['autobuild', 'release']:
             p = '/etc/apt/trusted.gpg.d/ceph.%s.gpg' % name
             if os.path.exists(p):
-                logging.info('Removing repo GPG key %s...' % p)
+                logger.info('Removing repo GPG key %s...' % p)
                 os.unlink(p)
         if os.path.exists(self.repo_path()):
-            logging.info('Removing repo at %s...' % self.repo_path())
+            logger.info('Removing repo at %s...' % self.repo_path())
             os.unlink(self.repo_path())
 
+        if self.distro == 'ubuntu':
+            self.rm_kubic_repo()
+
     def install(self, ls):
-        logging.info('Installing packages %s...' % ls)
+        logger.info('Installing packages %s...' % ls)
         call_throws(['apt', 'install', '-y'] + ls)
 
     def install_podman(self):
         if self.distro == 'ubuntu':
-            logging.info('Setting up repo for pdoman...')
-            self.install(['software-properties-common'])
-            call_throws(['add-apt-repository', '-y', 'ppa:projectatomic/ppa'])
+            logger.info('Setting up repo for podman...')
+            self.add_kubic_repo()
             call_throws(['apt', 'update'])
 
-        logging.info('Attempting podman install...')
+        logger.info('Attempting podman install...')
         try:
             self.install(['podman'])
         except Error as e:
-            logging.info('Podman did not work.  Falling back to docker...')
+            logger.info('Podman did not work.  Falling back to docker...')
             self.install(['docker.io'])
 
+    def kubic_repo_url(self):
+        return 'https://download.opensuse.org/repositories/devel:/kubic:/' \
+               'libcontainers:/stable/xUbuntu_%s/' % self.distro_version
+
+    def kubic_repo_path(self):
+        return '/etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list'
+
+    def kubric_repo_gpgkey_url(self):
+        return '%s/Release.key' % self.kubic_repo_url()
+
+    def kubric_repo_gpgkey_path(self):
+        return '/etc/apt/trusted.gpg.d/kubic.release.gpg'
+
+    def add_kubic_repo(self):
+        url = self.kubric_repo_gpgkey_url()
+        logger.info('Installing repo GPG key from %s...' % url)
+        try:
+            response = urlopen(url)
+        except HTTPError as err:
+            logger.error('failed to fetch GPG repo key from %s: %s' % (
+                url, err))
+            raise Error('failed to fetch GPG key')
+        key = response.read().decode('utf-8')
+        tmp_key = write_tmp(key, 0, 0)
+        keyring = self.kubric_repo_gpgkey_path()
+        call_throws(['apt-key', '--keyring', keyring, 'add', tmp_key.name])
+
+        logger.info('Installing repo file at %s...' % self.kubic_repo_path())
+        content = 'deb %s /\n' % self.kubic_repo_url()
+        with open(self.kubic_repo_path(), 'w') as f:
+            f.write(content)
+
+    def rm_kubic_repo(self):
+        keyring = self.kubric_repo_gpgkey_path()
+        if os.path.exists(keyring):
+            logger.info('Removing repo GPG key %s...' % keyring)
+            os.unlink(keyring)
+
+        p = self.kubic_repo_path()
+        if os.path.exists(p):
+            logger.info('Removing repo at %s...' % p)
+            os.unlink(p)
+
 
 class YumDnf(Packager):
     DISTRO_NAMES = {
@@ -4480,7 +4824,7 @@ class YumDnf(Packager):
                                         self.branch,
                                         self.commit)
 
-        logging.info('Writing repo to %s...' % self.repo_path())
+        logger.info('Writing repo to %s...' % self.repo_path())
         with open(self.repo_path(), 'w') as f:
             f.write(content)
 
@@ -4577,7 +4921,7 @@ class Zypper(Packager):
                                         self.branch,
                                         self.commit)
 
-        logging.info('Writing repo to %s...' % self.repo_path())
+        logger.info('Writing repo to %s...' % self.repo_path())
         with open(self.repo_path(), 'w') as f:
             f.write(content)
 
@@ -4640,6 +4984,543 @@ def command_install():
 
 ##################################
 
+def get_ipv4_address(ifname):
+    # type: (str) -> str
+    def _extract(sock, offset):
+        return socket.inet_ntop(
+                socket.AF_INET,
+                fcntl.ioctl(
+                    sock.fileno(),
+                    offset,
+                    struct.pack('256s', bytes(ifname[:15], 'utf-8'))
+                )[20:24])
+
+    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    try:
+        addr = _extract(s, 35093)  # '0x8915' = SIOCGIFADDR
+        dq_mask = _extract(s, 35099)  # 0x891b = SIOCGIFNETMASK
+    except OSError:
+        # interface does not have an ipv4 address
+        return ''
+
+    dec_mask = sum([bin(int(i)).count('1')
+                    for i in dq_mask.split('.')])
+    return '{}/{}'.format(addr, dec_mask)
+
+
+def get_ipv6_address(ifname):
+    # type: (str) -> str
+    if not os.path.exists('/proc/net/if_inet6'):
+        return ''
+
+    raw = read_file(['/proc/net/if_inet6'])
+    data = raw.splitlines()
+    # based on docs @ https://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/ch11s04.html
+    # field 0 is ipv6, field 2 is scope
+    for iface_setting in data:
+        field = iface_setting.split()
+        if field[-1] == ifname:
+            ipv6_raw = field[0]
+            ipv6_fmtd = ":".join([ipv6_raw[_p:_p+4] for _p in range(0, len(field[0]),4)])
+            # apply naming rules using ipaddress module
+            ipv6 = ipaddress.ip_address(ipv6_fmtd)
+            return "{}/{}".format(str(ipv6), int('0x{}'.format(field[2]), 16))
+    return ''
+
+
+def bytes_to_human(num, mode='decimal'):
+    # type: (float, str) -> str
+    """Convert a bytes value into it's human-readable form.
+
+    :param num: number, in bytes, to convert
+    :param mode: Either decimal (default) or binary to determine divisor
+    :returns: string representing the bytes value in a more readable format
+    """
+    unit_list = ['', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB']
+    divisor = 1000.0
+    yotta = "YB"
+
+    if mode == 'binary':
+        unit_list = ['', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB']
+        divisor = 1024.0
+        yotta = "YiB"
+
+    for unit in unit_list:
+        if abs(num) < divisor:
+            return "%3.1f%s" % (num, unit)
+        num /= divisor
+    return "%.1f%s" % (num, yotta)
+
+
+def read_file(path_list, file_name=''):
+    # type: (List[str], str) -> str
+    """Returns the content of the first file found within the `path_list`
+
+    :param path_list: list of file paths to search
+    :param file_name: optional file_name to be applied to a file path
+    :returns: content of the file or 'Unknown'
+    """
+    for path in path_list:
+        if file_name:
+            file_path = os.path.join(path, file_name)
+        else:
+            file_path = path
+        if os.path.exists(file_path):
+            with open(file_path, 'r') as f:
+                try:
+                    content = f.read().strip()
+                except OSError:
+                    # sysfs may populate the file, but for devices like
+                    # virtio reads can fail
+                    return "Unknown"
+                else:
+                    return content
+    return "Unknown"
+
+
+##################################
+class HostFacts():
+    _dmi_path_list = ['/sys/class/dmi/id']
+    _nic_path_list = ['/sys/class/net']
+    _selinux_path_list = ['/etc/selinux/config']
+    _apparmor_path_list = ['/etc/apparmor']
+    _disk_vendor_workarounds = {
+        "0x1af4": "Virtio Block Device"
+    }
+
+    def __init__(self):
+        self.cpu_model = 'Unknown'
+        self.cpu_count = 0
+        self.cpu_cores = 0
+        self.cpu_threads = 0
+        self.interfaces = {}
+
+        self._meminfo = read_file(['/proc/meminfo']).splitlines()
+        self._get_cpuinfo()
+        self._process_nics()
+        self.arch = platform.processor()
+        self.kernel = platform.release()
+
+    def _get_cpuinfo(self):
+        # type: () -> None
+        """Determine cpu information via /proc/cpuinfo"""
+        raw = read_file(['/proc/cpuinfo'])
+        output = raw.splitlines()
+        cpu_set = set()
+
+        for line in output:
+            field = [l.strip() for l in line.split(':')]
+            if "model name" in line:
+                self.cpu_model = field[1]
+            if "physical id" in line:
+                cpu_set.add(field[1])
+            if "siblings" in line:
+                self.cpu_threads = int(field[1].strip())
+            if "cpu cores" in line:
+                self.cpu_cores = int(field[1].strip())
+            pass
+        self.cpu_count = len(cpu_set)
+
+    def _get_block_devs(self):
+        # type: () -> List[str]
+        """Determine the list of block devices by looking at /sys/block"""
+        return [dev for dev in os.listdir('/sys/block')
+                if not dev.startswith('dm')]
+
+    def _get_devs_by_type(self, rota='0'):
+        # type: (str) -> List[str]
+        """Filter block devices by a given rotational attribute (0=flash, 1=spinner)"""
+        devs = list()
+        for blk_dev in self._get_block_devs():
+            rot_path = '/sys/block/{}/queue/rotational'.format(blk_dev)
+            rot_value = read_file([rot_path])
+            if rot_value == rota:
+                devs.append(blk_dev)
+        return devs
+
+    @property
+    def operating_system(self):
+        # type: () -> str
+        """Determine OS version"""
+        raw_info = read_file(['/etc/os-release'])
+        os_release = raw_info.splitlines()
+        rel_str = 'Unknown'
+        rel_dict = dict()
+
+        for line in os_release:
+            if "=" in line:
+                var_name, var_value = line.split('=')
+                rel_dict[var_name] = var_value.strip('"')
+
+        # Would normally use PRETTY_NAME, but NAME and VERSION are more
+        # consistent
+        if all(_v in rel_dict for _v in ["NAME", "VERSION"]):
+            rel_str = "{} {}".format(rel_dict['NAME'], rel_dict['VERSION'])
+        return rel_str
+
+    @property
+    def hostname(self):
+        # type: () -> str
+        """Return the hostname"""
+        return platform.node()
+
+    @property
+    def subscribed(self):
+        # type: () -> str
+        """Highlevel check to see if the host is subscribed to receive updates/support"""
+        def _red_hat():
+            # type: () -> str
+            # RHEL 7 and RHEL 8
+            entitlements_dir = '/etc/pki/entitlement'
+            if os.path.exists(entitlements_dir):
+                pems = glob('{}/*.pem'.format(entitlements_dir))
+                if len(pems) >= 2:
+                    return "Yes"
+
+            return "No"
+
+        os_name = self.operating_system
+        if os_name.upper().startswith("RED HAT"):
+            return _red_hat()
+
+        return "Unknown"
+
+    @property
+    def hdd_count(self):
+        # type: () -> int
+        """Return a count of HDDs (spinners)"""
+        return len(self._get_devs_by_type(rota='1'))
+
+    def _get_capacity(self, dev):
+        # type: (str) -> int
+        """Determine the size of a given device"""
+        size_path = os.path.join('/sys/block', dev, 'size')
+        size_blocks = int(read_file([size_path]))
+        blk_path = os.path.join('/sys/block', dev, 'queue', 'logical_block_size')
+        blk_count = int(read_file([blk_path]))
+        return size_blocks * blk_count
+
+    def _get_capacity_by_type(self, rota='0'):
+        # type: (str) -> int
+        """Return the total capacity of a category of device (flash or hdd)"""
+        devs = self._get_devs_by_type(rota=rota)
+        capacity = 0
+        for dev in devs:
+            capacity += self._get_capacity(dev)
+        return capacity
+
+    def _dev_list(self, dev_list):
+        # type: (List[str]) -> List[Dict[str, object]]
+        """Return a 'pretty' name list for each device in the `dev_list`"""
+        disk_list = list()
+
+        for dev in dev_list:
+            disk_model = read_file(['/sys/block/{}/device/model'.format(dev)]).strip()
+            disk_rev = read_file(['/sys/block/{}/device/rev'.format(dev)]).strip()
+            disk_wwid = read_file(['/sys/block/{}/device/wwid'.format(dev)]).strip()
+            vendor = read_file(['/sys/block/{}/device/vendor'.format(dev)]).strip()
+            disk_vendor = HostFacts._disk_vendor_workarounds.get(vendor, vendor)
+            disk_size_bytes = self._get_capacity(dev)
+            disk_list.append({
+                "description": "{} {} ({})".format(disk_vendor, disk_model, bytes_to_human(disk_size_bytes)),
+                "vendor": disk_vendor,
+                "model": disk_model,
+                "rev": disk_rev,
+                "wwid": disk_wwid,
+                "dev_name": dev,
+                "disk_size_bytes": disk_size_bytes,
+                }
+            )
+        return disk_list
+
+    @property
+    def hdd_list(self):
+        # type: () -> List[Dict[str, object]]
+        """Return a list of devices that are HDDs (spinners)"""
+        devs = self._get_devs_by_type(rota='1')
+        return self._dev_list(devs)
+
+    @property
+    def flash_list(self):
+        # type: () -> List[Dict[str, object]]
+        """Return a list of devices that are flash based (SSD, NVMe)"""
+        devs = self._get_devs_by_type(rota='0')
+        return self._dev_list(devs)
+
+    @property
+    def hdd_capacity_bytes(self):
+        # type: () -> int
+        """Return the total capacity for all HDD devices (bytes)"""
+        return self._get_capacity_by_type(rota='1')
+
+    @property
+    def hdd_capacity(self):
+        # type: () -> str
+        """Return the total capacity for all HDD devices (human readable format)"""
+        return bytes_to_human(self.hdd_capacity_bytes)
+
+    @property
+    def cpu_load(self):
+        # type: () -> Dict[str, float]
+        """Return the cpu load average data for the host"""
+        raw = read_file(['/proc/loadavg']).strip()
+        data = raw.split()
+        return {
+            "1min": float(data[0]),
+            "5min": float(data[1]),
+            "15min": float(data[2]),
+        }
+
+    @property
+    def flash_count(self):
+        # type: () -> int
+        """Return the number of flash devices in the system (SSD, NVMe)"""
+        return len(self._get_devs_by_type(rota='0'))
+
+    @property
+    def flash_capacity_bytes(self):
+        # type: () -> int
+        """Return the total capacity for all flash devices (bytes)"""
+        return self._get_capacity_by_type(rota='0')
+
+    @property
+    def flash_capacity(self):
+        # type: () -> str
+        """Return the total capacity for all Flash devices (human readable format)"""
+        return bytes_to_human(self.flash_capacity_bytes)
+
+    def _process_nics(self):
+        # type: () -> None
+        """Look at the NIC devices and extract network related metadata"""
+        # from https://github.com/torvalds/linux/blob/master/include/uapi/linux/if_arp.h
+        hw_lookup = {
+            "1": "ethernet",
+            "32": "infiniband",
+            "772": "loopback",
+        }
+
+        for nic_path in HostFacts._nic_path_list:
+            if not os.path.exists(nic_path):
+                continue
+            for iface in os.listdir(nic_path):
+
+                lower_devs_list = [os.path.basename(link.replace("lower_", "")) for link in glob(os.path.join(nic_path, iface, "lower_*"))]
+                upper_devs_list = [os.path.basename(link.replace("upper_", "")) for link in glob(os.path.join(nic_path, iface, "upper_*"))]
+
+                try:
+                    mtu = int(read_file([os.path.join(nic_path, iface, 'mtu')]))
+                except ValueError:
+                    mtu = 0
+
+                operstate = read_file([os.path.join(nic_path, iface, 'operstate')])
+                try:
+                    speed = int(read_file([os.path.join(nic_path, iface, 'speed')]))
+                except (OSError, ValueError):
+                    # OSError : device doesn't support the ethtool get_link_ksettings
+                    # ValueError : raised when the read fails, and returns Unknown
+                    #
+                    # Either way, we show a -1 when speed isn't available
+                    speed = -1
+
+                if os.path.exists(os.path.join(nic_path, iface, 'bridge')):
+                    nic_type = "bridge"
+                elif os.path.exists(os.path.join(nic_path, iface, 'bonding')):
+                    nic_type = "bonding"
+                else:
+                    nic_type = hw_lookup.get(read_file([os.path.join(nic_path, iface, 'type')]), "Unknown")
+
+                dev_link = os.path.join(nic_path, iface, 'device')
+                if os.path.exists(dev_link):
+                    iftype = 'physical'
+                    driver_path = os.path.join(dev_link, 'driver')
+                    if os.path.exists(driver_path):
+                        driver = os.path.basename(
+                                    os.path.realpath(driver_path))
+                    else:
+                        driver = 'Unknown'
+
+                else:
+                    iftype = 'logical'
+                    driver = ''
+
+                self.interfaces[iface] = {
+                    "mtu": mtu,
+                    "upper_devs_list": upper_devs_list,
+                    "lower_devs_list": lower_devs_list,
+                    "operstate": operstate,
+                    "iftype": iftype,
+                    "nic_type": nic_type,
+                    "driver": driver,
+                    "speed": speed,
+                    "ipv4_address": get_ipv4_address(iface),
+                    "ipv6_address": get_ipv6_address(iface),
+                }
+
+    @property
+    def nic_count(self):
+        # type: () -> int
+        """Return a total count of all physical NICs detected in the host"""
+        phys_devs = []
+        for iface in self.interfaces:
+            if self.interfaces[iface]["iftype"] == 'physical':
+                phys_devs.append(iface)
+        return len(phys_devs)
+
+
+    def _get_mem_data(self, field_name):
+        # type: (str) -> int
+        for line in self._meminfo:
+            if line.startswith(field_name):
+                _d = line.split()
+                return int(_d[1])
+        return 0
+
+    @property
+    def memory_total_kb(self):
+        # type: () -> int
+        """Determine the memory installed (kb)"""
+        return self._get_mem_data('MemTotal')
+
+    @property
+    def memory_free_kb(self):
+        # type: () -> int
+        """Determine the memory free (not cache, immediately usable)"""
+        return self._get_mem_data('MemFree')
+
+    @property
+    def memory_available_kb(self):
+        # type: () -> int
+        """Determine the memory available to new applications without swapping"""
+        return self._get_mem_data('MemAvailable')
+
+    @property
+    def vendor(self):
+        # type: () -> str
+        """Determine server vendor from DMI data in sysfs"""
+        return read_file(HostFacts._dmi_path_list, "sys_vendor")
+
+    @property
+    def model(self):
+        # type: () -> str
+        """Determine server model information from DMI data in sysfs"""
+        family = read_file(HostFacts._dmi_path_list, "product_family")
+        product = read_file(HostFacts._dmi_path_list, "product_name")
+        if family == 'Unknown' and product:
+            return "{}".format(product)
+
+        return "{} ({})".format(family, product)
+
+    @property
+    def bios_version(self):
+        # type: () -> str
+        """Determine server BIOS version from  DMI data in sysfs"""
+        return read_file(HostFacts._dmi_path_list, "bios_version")
+
+    @property
+    def bios_date(self):
+        # type: () -> str
+        """Determine server BIOS date from  DMI data in sysfs"""
+        return read_file(HostFacts._dmi_path_list, "bios_date")
+
+    @property
+    def timestamp(self):
+        # type: () -> float
+        """Return the current time as Epoch seconds"""
+        return time.time()
+
+    @property
+    def system_uptime(self):
+        # type: () -> float
+        """Return the system uptime (in secs)"""
+        raw_time = read_file(['/proc/uptime'])
+        up_secs, _ = raw_time.split()
+        return float(up_secs)
+
+    @property
+    def kernel_security(self):
+        # type: () -> Dict[str, str]
+        """Determine the security features enabled in the kernel - SELinux, AppArmor"""
+        def _fetch_selinux():
+            """Read the selinux config file to determine state"""
+            security = {}
+            for selinux_path in HostFacts._selinux_path_list:
+                if os.path.exists(selinux_path):
+                    selinux_config = read_file([selinux_path]).splitlines()
+                    security['type'] = 'SELinux'
+                    for line in selinux_config:
+                        if line.strip().startswith('#'):
+                            continue
+                        k, v = line.split('=')
+                        security[k] = v
+                    if security['SELINUX'].lower() == "disabled":
+                        security['description'] = "SELinux: Disabled"
+                    else:
+                        security['description'] = "SELinux: Enabled({}, {})".format(security['SELINUX'], security['SELINUXTYPE'])
+                    return security
+
+        def _fetch_apparmor():
+            """Read the apparmor profiles directly, returning an overview of AppArmor status"""
+            security = {}
+            for apparmor_path in HostFacts._apparmor_path_list:
+                if os.path.exists(apparmor_path):
+                    security['type'] = "AppArmor"
+                    security['description'] = "AppArmor: Enabled"
+                    try:
+                        profiles = read_file(['/sys/kernel/security/apparmor/profiles'])
+                    except OSError:
+                        pass
+                    else:
+                        summary = {}  # type: Dict[str, int]
+                        for line in profiles.split('\n'):
+                            item, mode = line.split(' ')
+                            mode= mode.strip('()')
+                            if mode in summary:
+                                summary[mode] += 1
+                            else:
+                                summary[mode] = 0
+                        summary_str = ",".join(["{} {}".format(v, k) for k, v in summary.items()])
+                        security = {**security, **summary} # type: ignore
+                        security['description'] += "({})".format(summary_str)
+
+                    return security
+
+        if os.path.exists('/sys/kernel/security/lsm'):
+            lsm = read_file(['/sys/kernel/security/lsm']).strip()
+            if 'selinux' in lsm:
+                return _fetch_selinux()
+            elif 'apparmor' in lsm:
+                return _fetch_apparmor()
+            else:
+                return {
+                    "type": "Unknown",
+                    "description": "Linux Security Module framework is active, but is not using SELinux or AppArmor"
+                }
+
+        return {
+            "type": "None",
+            "description": "Linux Security Module framework is not available"
+        }
+
+    def dump(self):
+        # type: () -> str
+        """Return the attributes of this HostFacts object as json"""
+        data = {k: getattr(self, k) for k in dir(self)
+                if not k.startswith('_') and
+                isinstance(getattr(self, k),
+                           (float, int, str, list, dict, tuple))
+        }
+        return json.dumps(data, indent=2, sort_keys=True)
+
+##################################
+
+def command_gather_facts():
+    """gather_facts is intended to provide host releated metadata to the caller"""
+    host = HostFacts()
+    print(host.dump())
+
+
+##################################
+
 
 def _get_parser():
     # type: () -> argparse.ArgumentParser
@@ -4754,6 +5635,10 @@ def _get_parser():
         '--force-start',
         action='store_true',
         help="start newly adoped daemon, even if it wasn't running previously")
+    parser_adopt.add_argument(
+        '--container-init',
+        action='store_true',
+        help='Run podman/docker with `--init`')
 
     parser_rm_daemon = subparsers.add_parser(
         'rm-daemon', help='remove daemon instance')
@@ -4817,7 +5702,11 @@ def _get_parser():
         help='ceph.keyring to pass through to the container')
     parser_shell.add_argument(
         '--mount', '-m',
-        help='mount a file or directory under /mnt in the container')
+        help=("mount a file or directory in the container. "
+              "Support multiple mounts. "
+              "ie: `--mount /foo /bar:/bar`. "
+              "When no destination is passed, default is /mnt"),
+              nargs='+')
     parser_shell.add_argument(
         '--env', '-e',
         action='append',
@@ -5035,6 +5924,10 @@ def _get_parser():
     parser_bootstrap.add_argument(
         '--registry-json',
         help='json file with custom registry login info (URL, Username, Password)')
+    parser_bootstrap.add_argument(
+        '--container-init',
+        action='store_true',
+        help='Run podman/docker with `--init`')
 
     parser_deploy = subparsers.add_parser(
         'deploy', help='deploy a daemon')
@@ -5078,6 +5971,10 @@ def _get_parser():
         '--allow-ptrace',
         action='store_true',
         help='Allow SYS_PTRACE on daemon container')
+    parser_deploy.add_argument(
+        '--container-init',
+        action='store_true',
+        help='Run podman/docker with `--init`')
 
     parser_check_host = subparsers.add_parser(
         'check-host', help='check host configuration')
@@ -5148,6 +6045,10 @@ def _get_parser():
         '--fsid',
         help='cluster FSID')
 
+    parser_gather_facts = subparsers.add_parser(
+        'gather-facts', help='gather and return host related information (JSON format)')
+    parser_gather_facts.set_defaults(func=command_gather_facts)
+
     return parser
 
 
@@ -5160,23 +6061,31 @@ def _parse_args(av):
 
 
 if __name__ == "__main__":
+
+    # root?
+    if os.geteuid() != 0:
+        sys.stderr.write('ERROR: cephadm should be run as root\n')
+        sys.exit(1)
+
+    # Logger configuration
+    if not os.path.exists(LOG_DIR):
+        os.makedirs(LOG_DIR)
+    dictConfig(logging_config)
+    logger = logging.getLogger()
+
     # allow argv to be injected
     try:
         av = injected_argv  # type: ignore
     except NameError:
         av = sys.argv[1:]
+    logger.debug("%s\ncephadm %s" % ("-" * 80, av))
     args = _parse_args(av)
 
+    # More verbose console output
     if args.verbose:
-        logging.basicConfig(level=logging.DEBUG)
-    else:
-        logging.basicConfig(level=logging.INFO)
-    logger = logging.getLogger('cephadm')
-
-    # root?
-    if os.geteuid() != 0:
-        sys.stderr.write('ERROR: cephadm should be run as root\n')
-        sys.exit(1)
+        for handler in logger.handlers:
+          if handler.name == "console":
+               handler.setLevel(logging.DEBUG)
 
     if 'func' not in args:
         sys.stderr.write('No command specified; pass -h or --help for usage\n')
diff --git a/ceph/src/cephadm/samples/custom_container.json b/ceph/src/cephadm/samples/custom_container.json
new file mode 100644 (file)
index 0000000..d6e73c4
--- /dev/null
@@ -0,0 +1,35 @@
+{
+    "image": "docker.io/prom/alertmanager:v0.20.0",
+    "ports": [9093, 9094],
+    "args": [
+        "-p 9093:9093",
+        "-p 9094:9094"
+    ],
+    "dirs": ["etc/alertmanager"],
+    "files": {
+        "etc/alertmanager/alertmanager.yml": [
+            "global:",
+            "  resolve_timeout: 5m",
+            "",
+            "route:",
+            "  group_by: ['alertname']",
+            "  group_wait: 10s",
+            "  group_interval: 10s",
+            "  repeat_interval: 1h",
+            "  receiver: 'web.hook'",
+            "receivers:",
+            "- name: 'web.hook'",
+            "  webhook_configs:",
+            "  - url: 'http://127.0.0.1:5001/'",
+            "inhibit_rules:",
+            "  - source_match:",
+            "      severity: 'critical'",
+            "    target_match:",
+            "      severity: 'warning'",
+            "    equal: ['alertname', 'dev', 'instance']"
+        ]
+    },
+    "volume_mounts": {
+        "etc/alertmanager": "/etc/alertmanager"
+    }
+}
index ef23a260454fa721f8c1df9cf5b5c9494793c6da..c9e2769ed33caeff054d054e6f450279e4b8f6a5 100644 (file)
@@ -1,23 +1,23 @@
 # type: ignore
-import argparse
 import mock
+from mock import patch
 import os
 import sys
 import unittest
 
 import pytest
 
-if sys.version_info >= (3, 3):
+with patch('builtins.open', create=True):
     from importlib.machinery import SourceFileLoader
     cd = SourceFileLoader('cephadm', 'cephadm').load_module()
-else:
-    import imp
-    cd = imp.load_source('cephadm', 'cephadm')
 
 class TestCephAdm(object):
-    def test_is_fsid(self):
+    def test_is_not_fsid(self):
         assert not cd.is_fsid('no-uuid')
 
+    def test_is_fsid(self):
+        assert cd.is_fsid('e863154d-33c7-4350-bca5-921e0467e55b')
+
     def test__get_parser_image(self):
         args = cd._parse_args(['--image', 'foo', 'version'])
         assert args.image == 'foo'
@@ -177,6 +177,20 @@ default via fe80::2480:28ec:5097:3fe2 dev wlp2s0 proto ra metric 20600 pref medi
         for address, expected in tests:
             unwrap_test(address, expected)
 
+    def test_wrap_ipv6(self):
+        def wrap_test(address, expected):
+            assert cd.wrap_ipv6(address) == expected
+
+        tests = [
+            ('::1', '[::1]'), ('[::1]', '[::1]'),
+            ('fde4:8dba:82e1:0:5054:ff:fe6a:357',
+             '[fde4:8dba:82e1:0:5054:ff:fe6a:357]'),
+            ('myhost.example.com', 'myhost.example.com'),
+            ('192.168.0.1', '192.168.0.1'),
+            ('', ''), ('fd00::1::1', 'fd00::1::1')]
+        for address, expected in tests:
+            wrap_test(address, expected)
+
     @mock.patch('cephadm.call_throws')
     @mock.patch('cephadm.get_parm')
     def test_registry_login(self, get_parm, call_throws):
@@ -224,3 +238,126 @@ default via fe80::2480:28ec:5097:3fe2 dev wlp2s0 proto ra metric 20600 pref medi
         with pytest.raises(Exception) as e:
             cd.command_registry_login()
         assert str(e.value) == "Failed to login to custom registry @ sample-url as sample-user with given password"
+
+    def test_get_image_info_from_inspect(self):
+        # podman
+        out = """204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1,["docker.io/ceph/ceph@sha256:1cc9b824e1b076cdff52a9aa3f0cc8557d879fb2fbbba0cafed970aca59a3992"]"""
+        r = cd.get_image_info_from_inspect(out, 'registry/ceph/ceph:latest')
+        assert r == {
+            'image_id': '204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1',
+            'repo_digest': 'docker.io/ceph/ceph@sha256:1cc9b824e1b076cdff52a9aa3f0cc8557d879fb2fbbba0cafed970aca59a3992'
+        }
+
+        # docker
+        out = """sha256:16f4549cf7a8f112bbebf7946749e961fbbd1b0838627fe619aab16bc17ce552,["quay.ceph.io/ceph-ci/ceph@sha256:4e13da36c1bd6780b312a985410ae678984c37e6a9493a74c87e4a50b9bda41f"]"""
+        r = cd.get_image_info_from_inspect(out, 'registry/ceph/ceph:latest')
+        assert r == {
+            'image_id': '16f4549cf7a8f112bbebf7946749e961fbbd1b0838627fe619aab16bc17ce552',
+            'repo_digest': 'quay.ceph.io/ceph-ci/ceph@sha256:4e13da36c1bd6780b312a985410ae678984c37e6a9493a74c87e4a50b9bda41f'
+        }
+
+    def test_dict_get(self):
+        result = cd.dict_get({'a': 1}, 'a', require=True)
+        assert result == 1
+        result = cd.dict_get({'a': 1}, 'b')
+        assert result is None
+        result = cd.dict_get({'a': 1}, 'b', default=2)
+        assert result == 2
+
+    def test_dict_get_error(self):
+        with pytest.raises(cd.Error):
+            cd.dict_get({'a': 1}, 'b', require=True)
+
+    def test_dict_get_join(self):
+        result = cd.dict_get_join({'foo': ['a', 'b']}, 'foo')
+        assert result == 'a\nb'
+        result = cd.dict_get_join({'foo': [1, 2]}, 'foo')
+        assert result == '1\n2'
+        result = cd.dict_get_join({'bar': 'a'}, 'bar')
+        assert result == 'a'
+        result = cd.dict_get_join({'a': 1}, 'a')
+        assert result == 1
+
+
+class TestCustomContainer(unittest.TestCase):
+    cc: cd.CustomContainer
+
+    def setUp(self):
+        self.cc = cd.CustomContainer(
+            'e863154d-33c7-4350-bca5-921e0467e55b',
+            'container',
+            config_json={
+                'entrypoint': 'bash',
+                'gid': 1000,
+                'args': [
+                    '--no-healthcheck',
+                    '-p 6800:6800'
+                ],
+                'envs': ['SECRET=password'],
+                'ports': [8080, 8443],
+                'volume_mounts': {
+                    '/CONFIG_DIR': '/foo/conf',
+                    'bar/config': '/bar:ro'
+                },
+                'bind_mounts': [
+                    [
+                        'type=bind',
+                        'source=/CONFIG_DIR',
+                        'destination=/foo/conf',
+                        ''
+                    ],
+                    [
+                        'type=bind',
+                        'source=bar/config',
+                        'destination=/bar:ro',
+                        'ro=true'
+                    ]
+                ]
+            },
+            image='docker.io/library/hello-world:latest'
+        )
+
+    def test_entrypoint(self):
+        self.assertEqual(self.cc.entrypoint, 'bash')
+
+    def test_uid_gid(self):
+        self.assertEqual(self.cc.uid, 65534)
+        self.assertEqual(self.cc.gid, 1000)
+
+    def test_ports(self):
+        self.assertEqual(self.cc.ports, [8080, 8443])
+
+    def test_get_container_args(self):
+        result = self.cc.get_container_args()
+        self.assertEqual(result, [
+            '--no-healthcheck',
+            '-p 6800:6800'
+        ])
+
+    def test_get_container_envs(self):
+        result = self.cc.get_container_envs()
+        self.assertEqual(result, ['SECRET=password'])
+
+    def test_get_container_mounts(self):
+        result = self.cc.get_container_mounts('/xyz')
+        self.assertDictEqual(result, {
+            '/CONFIG_DIR': '/foo/conf',
+            '/xyz/bar/config': '/bar:ro'
+        })
+
+    def test_get_container_binds(self):
+        result = self.cc.get_container_binds('/xyz')
+        self.assertEqual(result, [
+            [
+                'type=bind',
+                'source=/CONFIG_DIR',
+                'destination=/foo/conf',
+                ''
+            ],
+            [
+                'type=bind',
+                'source=/xyz/bar/config',
+                'destination=/bar:ro',
+                'ro=true'
+            ]
+        ])
index be0ab4ddfd4d9824c94e6bf71033dfd9e82627b9..d8cd7c322a99d4482767f0379a0253c1853f8023 100644 (file)
@@ -1,5 +1,5 @@
 [tox]
-envlist = py27, py3, mypy
+envlist = py3, mypy
 skipsdist=true
 
 [testenv]
index 52e818482a04ac6cf1b26c0d005b7555d2c9df09..e34c99b2f49d808e577fe4f1b64aaaceea388ffe 100755 (executable)
@@ -688,7 +688,6 @@ void Client::trim_dentry(Dentry *dn)
                 << dendl;
   if (dn->inode) {
     Inode *diri = dn->dir->parent_inode;
-    diri->dir_release_count++;
     clear_dir_complete_and_ordered(diri, true);
   }
   unlink(dn, false, false);  // drop dir, drop dentry
@@ -998,13 +997,11 @@ Dentry *Client::insert_dentry_inode(Dir *dir, const string& dname, LeaseStat *dl
     if (old_dentry) {
       if (old_dentry->dir != dir) {
        Inode *old_diri = old_dentry->dir->parent_inode;
-       old_diri->dir_ordered_count++;
        clear_dir_complete_and_ordered(old_diri, false);
       }
       unlink(old_dentry, dir == old_dentry->dir, false);  // drop dentry, keep dir open if its the same dir
     }
     Inode *diri = dir->parent_inode;
-    diri->dir_ordered_count++;
     clear_dir_complete_and_ordered(diri, false);
     dn = link(dir, dname, in, dn);
   }
@@ -1031,6 +1028,8 @@ void Client::update_dentry_lease(Dentry *dn, LeaseStat *dlease, utime_t from, Me
     }
   }
   dn->cap_shared_gen = dn->dir->parent_inode->shared_gen;
+  if (dlease->mask & CEPH_LEASE_PRIMARY_LINK)
+    dn->mark_primary();
 }
 
 
@@ -1057,6 +1056,10 @@ void Client::update_dir_dist(Inode *in, DirStat *dst)
 
 void Client::clear_dir_complete_and_ordered(Inode *diri, bool complete)
 {
+  if (complete)
+    diri->dir_release_count++;
+  else
+    diri->dir_ordered_count++;
   if (diri->flags & I_COMPLETE) {
     if (complete) {
       ldout(cct, 10) << " clearing (I_COMPLETE|I_DIR_ORDERED) on " << *diri << dendl;
@@ -1261,7 +1264,6 @@ Inode* Client::insert_trace(MetaRequest *request, MetaSession *session)
     Dentry *d = request->dentry();
     if (d) {
       Inode *diri = d->dir->parent_inode;
-      diri->dir_release_count++;
       clear_dir_complete_and_ordered(diri, true);
     }
 
@@ -1349,7 +1351,6 @@ Inode* Client::insert_trace(MetaRequest *request, MetaSession *session)
       if (diri->dir && diri->dir->dentries.count(dname)) {
        dn = diri->dir->dentries[dname];
        if (dn->inode) {
-         diri->dir_ordered_count++;
          clear_dir_complete_and_ordered(diri, false);
          unlink(dn, true, true);  // keep dir, dentry
        }
@@ -2817,7 +2818,7 @@ void Client::send_reconnect(MetaSession *session)
               << " wants " << ccap_string(in->caps_wanted())
               << dendl;
       filepath path;
-      in->make_long_path(path);
+      in->make_short_path(path);
       ldout(cct, 10) << "    path " << path << dendl;
 
       bufferlist flockbl;
@@ -3104,7 +3105,6 @@ Dentry* Client::link(Dir *dir, const string& name, Inode *in, Dentry *dn)
       Dentry *olddn = in->get_first_parent();
       ceph_assert(olddn->dir != dir || olddn->name != name);
       Inode *old_diri = olddn->dir->parent_inode;
-      old_diri->dir_release_count++;
       clear_dir_complete_and_ordered(old_diri, true);
       unlink(olddn, true, true);  // keep dir, dentry
     }
@@ -4011,10 +4011,10 @@ void Client::check_cap_issue(Inode *in, unsigned issued)
       !(had & CEPH_CAP_FILE_CACHE))
     in->cache_gen++;
 
-  if ((issued & CEPH_CAP_FILE_SHARED) &&
-      !(had & CEPH_CAP_FILE_SHARED)) {
-    in->shared_gen++;
-
+  if ((issued & CEPH_CAP_FILE_SHARED) !=
+      (had & CEPH_CAP_FILE_SHARED)) {
+    if (issued & CEPH_CAP_FILE_SHARED)
+      in->shared_gen++;
     if (in->is_dir())
       clear_dir_complete_and_ordered(in, true);
   }
@@ -4381,10 +4381,12 @@ void Client::trim_caps(MetaSession *s, uint64_t max)
          all = false;
         }
       }
+      if (in->ll_ref == 1 && in->ino != MDS_INO_ROOT) {
+         _schedule_ino_release_callback(in.get());
+      }
       if (all && in->ino != MDS_INO_ROOT) {
         ldout(cct, 20) << __func__ << " counting as trimmed: " << *in << dendl;
        trimmed++;
-       _schedule_ino_release_callback(in.get());
       }
     }
   }
@@ -6408,6 +6410,8 @@ int Client::_lookup(Inode *dir, const string& dname, int mask, InodeRef *target,
 {
   int r = 0;
   Dentry *dn = NULL;
+  // can only request shared caps
+  mask &= CEPH_CAP_ANY_SHARED | CEPH_STAT_RSTAT;
 
   if (dname == "..") {
     if (dir->dentries.empty()) {
@@ -6419,9 +6423,7 @@ int Client::_lookup(Inode *dir, const string& dname, int mask, InodeRef *target,
       int r = make_request(req, perms, &tmptarget, NULL, rand() % mdsmap->get_num_in_mds());
 
       if (r == 0) {
-       Inode *tempino = tmptarget.get();
-       _ll_get(tempino);
-       *target = tempino;
+       *target = std::move(tmptarget);
        ldout(cct, 8) << __func__ << " found target " << (*target)->ino << dendl;
       } else {
        *target = dir;
@@ -8432,7 +8434,7 @@ static int _readdir_single_dirent_cb(void *p, struct dirent *de,
 struct dirent *Client::readdir(dir_result_t *d)
 {
   int ret;
-  static struct dirent de;
+  auto& de = d->de;
   single_readdir sr;
   sr.de = &de;
   sr.stx = NULL;
@@ -8578,11 +8580,13 @@ int Client::open(const char *relpath, int flags, const UserPerm& perms,
                 mode_t mode, int stripe_unit, int stripe_count,
                 int object_size, const char *data_pool)
 {
-  ldout(cct, 3) << "open enter(" << relpath << ", " << ceph_flags_sys2wire(flags) << "," << mode << ")" << dendl;
+  int cflags = ceph_flags_sys2wire(flags);
+
+  ldout(cct, 3) << "open enter(" << relpath << ", " << cflags << "," << mode << ")" << dendl;
   std::lock_guard lock(client_lock);
   tout(cct) << "open" << std::endl;
   tout(cct) << relpath << std::endl;
-  tout(cct) << ceph_flags_sys2wire(flags) << std::endl;
+  tout(cct) << cflags << std::endl;
 
   if (unmounting)
     return -ENOTCONN;
@@ -8602,7 +8606,9 @@ int Client::open(const char *relpath, int flags, const UserPerm& perms,
   bool created = false;
   /* O_CREATE with O_EXCL enforces O_NOFOLLOW. */
   bool followsym = !((flags & O_NOFOLLOW) || ((flags & O_CREAT) && (flags & O_EXCL)));
-  int r = path_walk(path, &in, perms, followsym, ceph_caps_for_mode(mode));
+  int mask = ceph_caps_for_mode(ceph_flags_to_mode(cflags));
+
+  int r = path_walk(path, &in, perms, followsym, mask);
 
   if (r == 0 && (flags & O_CREAT) && (flags & O_EXCL))
     return -EEXIST;
@@ -8655,7 +8661,7 @@ int Client::open(const char *relpath, int flags, const UserPerm& perms,
   
  out:
   tout(cct) << r << std::endl;
-  ldout(cct, 3) << "open exit(" << path << ", " << ceph_flags_sys2wire(flags) << ") = " << r << dendl;
+  ldout(cct, 3) << "open exit(" << path << ", " << cflags << ") = " << r << dendl;
   return r;
 }
 
@@ -8922,7 +8928,6 @@ int Client::_open(Inode *in, int flags, mode_t mode, Fh **fhp,
        ldout(cct, 8) << "Unable to get caps after open of inode " << *in <<
                          " . Denying open: " <<
                          cpp_strerror(result) << dendl;
-       in->put_open_ref(cmode);
       } else {
        put_cap_ref(in, need);
       }
@@ -14737,7 +14742,7 @@ mds_rank_t Client::_get_random_up_mds() const
 
 
 StandaloneClient::StandaloneClient(Messenger *m, MonClient *mc)
-    : Client(m, mc, new Objecter(m->cct, m, mc, NULL, 0, 0))
+    : Client(m, mc, new Objecter(m->cct, m, mc, nullptr))
 {
   monclient->set_messenger(m);
   objecter->set_client_incarnation(0);
index 1b85421c92317aea7bd5e396b4d5e6857a606ae2..c8ea7aa5f0ad8104998c73c0850c4c2782689212 100644 (file)
@@ -221,6 +221,7 @@ struct dir_result_t {
   frag_t buffer_frag;
 
   vector<dentry> buffer;
+  struct dirent de;
 };
 
 class Client : public Dispatcher, public md_config_obs_t {
index ffbb5104b49b934741eaae155c1b9a43a0cbcbda..7559c45f49b59e293a0a5fbd744b30504d2ee783 100644 (file)
@@ -64,6 +64,10 @@ public:
     inode.reset();
     dir->num_null_dentries++;
   }
+  void mark_primary() {
+    if (inode && inode->dentries.front() != this)
+      inode->dentries.push_front(&inode_xlist_link);
+  }
   void detach(void) {
     ceph_assert(!inode);
     auto p = dir->dentries.find(name);
index 2b7738adf4a5b70192761b781d539af25d2439da..91bcc815c61588b4fcebf501fa708464ef5f6bdc 100644 (file)
@@ -95,9 +95,19 @@ void Inode::make_long_path(filepath& p)
     dn->dir->parent_inode->make_long_path(p);
     p.push_dentry(dn->name);
   } else if (snapdir_parent) {
-    snapdir_parent->make_nosnap_relative_path(p);
-    string empty;
-    p.push_dentry(empty);
+    make_nosnap_relative_path(p);
+  } else
+    p = filepath(ino);
+}
+
+void Inode::make_short_path(filepath& p)
+{
+  if (!dentries.empty()) {
+    Dentry *dn = get_first_parent();
+    ceph_assert(dn->dir && dn->dir->parent_inode);
+    p = filepath(dn->name, dn->dir->parent_inode->ino);
+  } else if (snapdir_parent) {
+    make_nosnap_relative_path(p);
   } else
     p = filepath(ino);
 }
index afaf64e0515ce36811abdf72cd068d11b9a1982e..5b932a98709a9c66d0623dd42ebf31fcab7dcf9f 100644 (file)
@@ -238,6 +238,7 @@ struct Inode {
   }
 
   void make_long_path(filepath& p);
+  void make_short_path(filepath& p);
   void make_nosnap_relative_path(filepath& p);
 
   void get();
index 5f3c40b049f2f312a8d6b6696ef295b88958be70..b6a02496bcb5feaf3333a44ab15bc40a45db844d 100644 (file)
@@ -1201,6 +1201,9 @@ std::ostream& operator<<(std::ostream& os,
   case MIGRATION_STATE_EXECUTED:
     os << "executed";
     break;
+  case MIGRATION_STATE_ABORTING:
+    os << "aborting";
+    break;
   default:
     os << "unknown (" << static_cast<uint32_t>(migration_state) << ")";
     break;
index 5ea37caf7d45ceaa93dd3b3b974fc7d84e9d7dde..ab77735f8f906f4588038afe3daa0b18b9baf16a 100644 (file)
@@ -926,6 +926,7 @@ enum MigrationState {
   MIGRATION_STATE_PREPARED = 2,
   MIGRATION_STATE_EXECUTING = 3,
   MIGRATION_STATE_EXECUTED = 4,
+  MIGRATION_STATE_ABORTING = 5,
 };
 
 inline void encode(const MigrationState &state, bufferlist& bl) {
index bb3c2ffc1576b3f3e4b0de20d6a1bc800f3d588d..e9c5fb46ff179ea798e8c3202ca42158f05e5a30 100644 (file)
@@ -494,6 +494,11 @@ static int cls_rgw_gc_queue_update_entry(cls_method_context_t hctx, bufferlist *
     return -ENOSPC;
   }
 
+  // Due to Tracker 47866 we are no longer executing this code, as it
+  // appears to possibly create a GC entry for an object that has not
+  // been deleted. Instead we will log at level 0 to perhaps confirm
+  // that when and how often this bug would otherwise be hit.
+#if 0
   cls_queue_enqueue_op enqueue_op;
   bufferlist bl_data;
   encode(op.info, bl_data);
@@ -504,6 +509,16 @@ static int cls_rgw_gc_queue_update_entry(cls_method_context_t hctx, bufferlist *
   if (ret < 0) {
     return ret;
   }
+#else
+  std::string first_chain = "<empty-chain>";
+  if (! op.info.chain.objs.empty()) {
+    first_chain = op.info.chain.objs.cbegin()->key.name;
+  }
+  CLS_LOG(0,
+         "INFO: refrained from enqueueing GC entry during GC defer"
+         " tag=%s, first_chain=%s\n",
+         op.info.tag.c_str(), first_chain.c_str());
+#endif
 
   if (has_urgent_data) {
     head.bl_urgent_data.clear();
index ecbd57334963364df416accbdaeb6194b2d41916..f41d0bf40702e98d1061836b6cbd0393982176f2 100644 (file)
@@ -103,11 +103,15 @@ public:
 
   /// Wait until the \c secs expires or \c complete() is called
   int wait_for(double secs) {
+    return wait_for(ceph::make_timespan(secs));
+  }
+
+  int wait_for(ceph::timespan secs) {
     std::unique_lock l{lock};
     if (done) {
       return rval;
     }
-    if (cond.wait_for(l, ceph::make_timespan(secs), [this] { return done; })) {
+    if (cond.wait_for(l, secs, [this] { return done; })) {
       return rval;
     } else {
       return ETIMEDOUT;
index 0c16cfc31f200217fc6e8d31ccbe78c1fd5fc85b..f25286b288c677efaa192e68456a9a5ac94b362f 100644 (file)
@@ -432,16 +432,25 @@ public:
     }
     void requeue_front(T *item) {
       std::lock_guard pool_locker(m_pool->_lock);
+      requeue_front(pool_locker, item);
+    }
+    void requeue_front(const std::lock_guard<ceph::mutex>&, T *item) {
       _void_process_finish(nullptr);
       m_items.push_front(item);
     }
     void requeue_back(T *item) {
       std::lock_guard pool_locker(m_pool->_lock);
+      requeue_back(pool_locker, item);
+    }
+    void requeue_back(const std::lock_guard<ceph::mutex>&, T *item) {
       _void_process_finish(nullptr);
       m_items.push_back(item);
     }
     void signal() {
       std::lock_guard pool_locker(m_pool->_lock);
+      signal(pool_locker);
+    }
+    void signal(const std::lock_guard<ceph::mutex>&) {
       m_pool->_cond.notify_one();
     }
     ceph::mutex &get_pool_lock() {
index 1f57ca0832f1f637dd800cb8ea5c32d616892705..d7a7ee5550c89afa72f1070a24267ff82ea8507a 100644 (file)
@@ -492,32 +492,20 @@ void AdminSocket::execute_command(
 
   Formatter *f = Formatter::create(format, "json-pretty", "json-pretty");
 
-  std::unique_lock l(lock);
-  decltype(hooks)::iterator p;
-  p = hooks.find(prefix);
-  if (p == hooks.cend()) {
+  auto [retval, hook] = find_matched_hook(prefix, cmdmap);
+  switch (retval) {
+  case ENOENT:
     lderr(m_cct) << "AdminSocket: request '" << cmdvec
                 << "' not defined" << dendl;
     delete f;
     return on_finish(-EINVAL, "unknown command prefix "s + prefix, empty);
+  case EINVAL:
+    delete f;
+    return on_finish(-EINVAL, "invalid command json", empty);
+  default:
+    assert(retval == 0);
   }
 
-  // make sure one of the registered commands with this prefix validates.
-  while (!validate_cmd(m_cct, p->second.desc, cmdmap, errss)) {
-    ++p;
-    if (p->first != prefix) {
-      delete f;
-      return on_finish(-EINVAL, "invalid command json", empty);
-    }
-  }
-
-  // Drop lock to avoid cycles in cases where the hook takes
-  // the same lock that was held during calls to register/unregister,
-  // and set in_hook to allow unregister to wait for us before
-  // removing this hook.
-  in_hook = true;
-  auto hook = p->second.hook;
-  l.unlock();
   hook->call_async(
     prefix, cmdmap, f, inbl,
     [f, on_finish](int r, const std::string& err, bufferlist& out) {
@@ -529,11 +517,35 @@ void AdminSocket::execute_command(
       on_finish(r, err, out);
     });
 
-  l.lock();
+  std::unique_lock l(lock);
   in_hook = false;
   in_hook_cond.notify_all();
 }
 
+std::pair<int, AdminSocketHook*>
+AdminSocket::find_matched_hook(std::string& prefix,
+                              const cmdmap_t& cmdmap)
+{
+  std::unique_lock l(lock);
+  // Drop lock after done with the lookup to avoid cycles in cases where the
+  // hook takes the same lock that was held during calls to
+  // register/unregister, and set in_hook to allow unregister to wait for us
+  // before removing this hook.
+  auto [hooks_begin, hooks_end] = hooks.equal_range(prefix);
+  if (hooks_begin == hooks_end) {
+    return {ENOENT, nullptr};
+  }
+  // make sure one of the registered commands with this prefix validates.
+  stringstream errss;
+  for (auto hook = hooks_begin; hook != hooks_end; ++hook) {
+    if (validate_cmd(m_cct, hook->second.desc, cmdmap, errss)) {
+      in_hook = true;
+      return {0, hook->second.hook};
+    }
+  }
+  return {EINVAL, nullptr};
+}
+
 void AdminSocket::queue_tell_command(cref_t<MCommand> m)
 {
   ldout(m_cct,10) << __func__ << " " << *m << dendl;
index 2105097bbeeb618fd52f13b9ccd84d31ffb1f2cf..2e4e153f4de8c7a68dfbff9a86ae665484259c87 100644 (file)
@@ -207,6 +207,11 @@ private:
       : hook(hook), desc(desc), help(help) {}
   };
 
+  /// find the first hook which matches the given prefix and cmdmap
+  std::pair<int, AdminSocketHook*> find_matched_hook(
+    std::string& prefix,
+    const cmdmap_t& cmdmap);
+
   std::multimap<std::string, hook_info, std::less<>> hooks;
 
   friend class AdminSocketTest;
index e7116e38875cd91e19e2791df8e0b2cd75b506e3..ed9e7700024abba70e37bfc1a91c16baa21c1839 100644 (file)
@@ -45,6 +45,9 @@
 #include "common/PluginRegistry.h"
 #include "common/valgrind.h"
 #include "include/spinlock.h"
+#if !(defined(WITH_SEASTAR) && !defined(WITH_ALIEN))
+#include "mon/MonMap.h"
+#endif
 
 using ceph::bufferlist;
 using ceph::HeartbeatMap;
@@ -988,5 +991,14 @@ void CephContext::notify_post_fork()
   for (auto &&t : _fork_watchers)
     t->handle_post_fork();
 }
+
+void CephContext::set_mon_addrs(const MonMap& mm) {
+  std::vector<entity_addrvec_t> mon_addrs;
+  for (auto& i : mm.mon_info) {
+    mon_addrs.push_back(i.second.public_addrs);
+  }
+
+  set_mon_addrs(mon_addrs);
+}
 }
 #endif // WITH_SEASTAR
index adacecebfc3991d4008ec4c661fdd09d890ed3c9..c101eb4a034b580afb1f0a9f7469d85eaf298454 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "common/cmdparse.h"
 #include "common/code_environment.h"
+#include "msg/msg_types.h"
 #if defined(WITH_SEASTAR) && !defined(WITH_ALIEN)
 #include "crimson/common/config_proxy.h"
 #include "crimson/common/perf_counters_collection.h"
@@ -45,6 +46,7 @@
 class AdminSocket;
 class CryptoHandler;
 class CryptoRandom;
+class MonMap;
 
 namespace ceph::common {
   class CephContextServiceThread;
@@ -258,6 +260,21 @@ public:
   void notify_pre_fork();
   void notify_post_fork();
 
+  /**
+   * update CephContext with a copy of the passed in MonMap mon addrs
+   *
+   * @param mm MonMap to extract and update mon addrs
+   */
+  void set_mon_addrs(const MonMap& mm);
+  void set_mon_addrs(const std::vector<entity_addrvec_t>& in) {
+    auto ptr = std::make_shared<std::vector<entity_addrvec_t>>(in);
+    atomic_store_explicit(&_mon_addrs, std::move(ptr), std::memory_order_relaxed);
+  }
+  std::shared_ptr<std::vector<entity_addrvec_t>> get_mon_addrs() const {
+    auto ptr = atomic_load_explicit(&_mon_addrs, std::memory_order_relaxed);
+    return ptr;
+  }
+
 private:
 
 
@@ -275,6 +292,8 @@ private:
 
   int _crypto_inited;
 
+  std::shared_ptr<std::vector<entity_addrvec_t>> _mon_addrs;
+
   /* libcommon service thread.
    * SIGHUP wakes this thread, which then reopens logfiles */
   friend class CephContextServiceThread;
index 3c789582f58174eb775dd475c568745863644c4d..2383fc95d7a3b48307896e6b720b11de0f45f472 100644 (file)
@@ -42,6 +42,8 @@ namespace cohort {
 
     typedef bi::link_mode<bi::safe_link> link_mode;
 
+    class ObjectFactory; // Forward declaration
+
     class Object
     {
     private:
@@ -70,7 +72,7 @@ namespace cohort {
 
       uint32_t get_refcnt() const { return lru_refcnt; }
 
-      virtual bool reclaim() = 0;
+      virtual bool reclaim(const ObjectFactory* newobj_fac) = 0;
 
       virtual ~Object() {}
 
@@ -132,7 +134,7 @@ namespace cohort {
                (!(o->lru_flags & FLAG_EVICTING)));
       }
 
-      Object* evict_block() {
+      Object* evict_block(const ObjectFactory* newobj_fac) {
        uint32_t lane_ix = next_evict_lane();
        for (int ix = 0; ix < n_lanes; ++ix,
               lane_ix = next_evict_lane()) {
@@ -144,7 +146,7 @@ namespace cohort {
            ++(o->lru_refcnt);
            o->lru_flags |= FLAG_EVICTING;
            lane.lock.unlock();
-           if (o->reclaim()) {
+           if (o->reclaim(newobj_fac)) {
              lane.lock.lock();
              --(o->lru_refcnt);
              /* assertions that o state has not changed across
@@ -236,7 +238,7 @@ namespace cohort {
       Object* insert(ObjectFactory* fac, Edge edge, uint32_t& flags) {
        /* use supplied functor to re-use an evicted object, or
         * allocate a new one of the descendant type */
-       Object* o = evict_block();
+       Object* o = evict_block(fac);
        if (o) {
          fac->recycle(o); /* recycle existing object */
          flags |= FLAG_RECYCLE;
@@ -425,7 +427,9 @@ namespace cohort {
          lat.lock->unlock();
        return v;
       } /* find_latch */
-
+      bool is_same_partition(uint64_t lhs, uint64_t rhs) {
+        return ((lhs % n_part) == (rhs % n_part));
+      }
       void insert_latched(T* v, Latch& lat, uint32_t flags) {
        (void) lat.p->tr.insert_unique_commit(*v, lat.commit_data);
        if (flags & FLAG_UNLOCK)
index cd7b78f1018a0d7f2571fd710dada4a01754659b..b8bf695951c7a0d92db67a15765c06cf91199504 100644 (file)
@@ -82,6 +82,7 @@ SAFE_OPTION(plugin_dir, OPT_STR)
 
 OPTION(compressor_zlib_isal, OPT_BOOL)
 OPTION(compressor_zlib_level, OPT_INT) //regular zlib compression level, not applicable to isa-l optimized version
+OPTION(compressor_zstd_level, OPT_INT) //regular zstd compression level
 
 OPTION(qat_compressor_enabled, OPT_BOOL)
 
@@ -261,6 +262,7 @@ OPTION(mon_reweight_max_change, OPT_DOUBLE)
 OPTION(mon_health_to_clog, OPT_BOOL)
 OPTION(mon_health_to_clog_interval, OPT_INT)
 OPTION(mon_health_to_clog_tick_interval, OPT_DOUBLE)
+OPTION(mon_health_detail_to_clog, OPT_BOOL)
 OPTION(mon_data_avail_crit, OPT_INT)
 OPTION(mon_data_avail_warn, OPT_INT)
 OPTION(mon_data_size_warn, OPT_U64) // issue a warning when the monitor's data store goes over 15GB (in bytes)
@@ -911,7 +913,6 @@ OPTION(bluefs_compact_log_sync, OPT_BOOL)  // sync or async log compaction?
 OPTION(bluefs_buffered_io, OPT_BOOL)
 OPTION(bluefs_sync_write, OPT_BOOL)
 OPTION(bluefs_allocator, OPT_STR)     // stupid | bitmap
-OPTION(bluefs_preextend_wal_files, OPT_BOOL)  // this *requires* that rocksdb has recycling enabled
 OPTION(bluefs_log_replay_check_allocations, OPT_BOOL)
 OPTION(bluefs_replay_recovery, OPT_BOOL)
 OPTION(bluefs_replay_recovery_disable_compact, OPT_BOOL)
@@ -1239,8 +1240,6 @@ OPTION(journal_discard, OPT_BOOL) //using ssd disk as journal, whether support d
 
 OPTION(fio_dir, OPT_STR) // fio data directory for fio-objectstore
 
-OPTION(rados_mon_op_timeout, OPT_DOUBLE) // how many seconds to wait for a response from the monitor before returning an error from a rados operation. 0 means no limit.
-OPTION(rados_osd_op_timeout, OPT_DOUBLE) // how many seconds to wait for a response from osds before returning an error from a rados operation. 0 means no limit.
 OPTION(rados_tracing, OPT_BOOL) // true if LTTng-UST tracepoints should be enabled
 
 
index 2af36dd0e4ef3f24c5cf31f50cea74adb595b46c..66d4ee9d06dcd4bcf90fb84dcbe7ad6f743ab1d2 100644 (file)
@@ -428,6 +428,12 @@ std::vector<Option> get_global_options() {
     .set_flag(Option::FLAG_STARTUP)
     .add_service("common"),
 
+    Option("mon_host_override", Option::TYPE_STR, Option::LEVEL_ADVANCED)
+    .set_description("monitor(s) to use overriding the MonMap")
+    .set_flag(Option::FLAG_NO_MON_UPDATE)
+    .set_flag(Option::FLAG_STARTUP)
+    .add_service("common"),
+
     Option("mon_dns_srv_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
     .set_default("ceph-mon")
     .set_description("name of DNS SRV record to check for monitor addresses")
@@ -785,6 +791,10 @@ std::vector<Option> get_global_options() {
     .set_default(5)
     .set_description("Zlib compression level to use"),
 
+    Option("compressor_zstd_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
+    .set_default(1)
+    .set_description("Zstd compression level to use"),
+
     Option("qat_compressor_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(false)
     .set_description("Enable Intel QAT acceleration support for compression if available"),
@@ -1851,7 +1861,7 @@ std::vector<Option> get_global_options() {
     .set_description("log monitor health to cluster log"),
 
     Option("mon_health_to_clog_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
-    .set_default(1_hr)
+    .set_default(10_min)
     .add_service("mon")
     .set_description("frequency to log monitor health to cluster log")
     .add_see_also("mon_health_to_clog"),
@@ -1861,6 +1871,10 @@ std::vector<Option> get_global_options() {
     .add_service("mon")
     .set_description(""),
 
+    Option("mon_health_detail_to_clog", Option::TYPE_BOOL, Option::LEVEL_DEV)
+    .set_default(true)
+    .set_description("log health detail to cluster log"),
+
     Option("mon_health_max_detail", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
     .set_default(50)
     .add_service("mon")
@@ -2606,7 +2620,7 @@ std::vector<Option> get_global_options() {
 
     Option("osd_erasure_code_plugins", Option::TYPE_STR, Option::LEVEL_ADVANCED)
     .set_default("jerasure lrc"
-  #ifdef HAVE_BETTER_YASM_ELF64
+  #if defined(HAVE_BETTER_YASM_ELF64) || defined(HAVE_ARMV8_SIMD)
          " isa"
   #endif
         )
@@ -4014,10 +4028,6 @@ std::vector<Option> get_global_options() {
     .set_enum_allowed({"bitmap", "stupid", "avl", "hybrid"})
     .set_description(""),
 
-    Option("bluefs_preextend_wal_files", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
-    .set_default(false)
-    .set_description("Preextent rocksdb wal files on mkfs to avoid performance penalty"),
-
     Option("bluefs_log_replay_check_allocations", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
       .set_default(true)
       .set_description("Enables checks for allocations consistency during log replay"),
@@ -4649,7 +4659,7 @@ std::vector<Option> get_global_options() {
     .set_description("Maximum RAM hybrid allocator should use before enabling bitmap supplement"),
 
     Option("bluestore_volume_selection_policy", Option::TYPE_STR, Option::LEVEL_DEV)
-    .set_default("rocksdb_original")
+    .set_default("use_some_extra")
     .set_enum_allowed({ "rocksdb_original", "use_some_extra" })
     .set_description("Determines bluefs volume selection policy")
     .set_long_description("Determines bluefs volume selection policy. 'use_some_extra' policy allows to override RocksDB level granularity and put high level's data to faster device even when the level doesn't completely fit there"),
@@ -5139,13 +5149,17 @@ std::vector<Option> get_global_options() {
     .set_default("/tmp/fio")
     .set_description(""),
 
-    Option("rados_mon_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    Option("rados_mon_op_timeout", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
     .set_default(0)
-    .set_description(""),
+    .set_description("timeout for operations handled by monitors such as statfs (0 is unlimited)")
+    .set_flag(Option::FLAG_RUNTIME)
+    .set_min(0),
 
-    Option("rados_osd_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    Option("rados_osd_op_timeout", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
     .set_default(0)
-    .set_description(""),
+    .set_description("timeout for operations handled by osds such as write (0 is unlimited)")
+    .set_flag(Option::FLAG_RUNTIME)
+    .set_min(0),
 
     Option("rados_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(false)
@@ -7831,7 +7845,7 @@ std::vector<Option> get_mds_options() {
 
     Option("mds_replay_unsafe_with_closed_session", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(false)
-    .set_flag(Option::FLAG_RUNTIME)
+    .set_flag(Option::FLAG_STARTUP)
     .set_description("complete all the replay request when mds is restarted, no matter the session is closed or not"),
 
     Option("mds_default_dir_hash", Option::TYPE_INT, Option::LEVEL_ADVANCED)
@@ -7862,6 +7876,12 @@ std::vector<Option> get_mds_options() {
     .set_default(128)
     .set_description("maximum number of segments which may be untrimmed"),
 
+    Option("mds_log_warn_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
+    .set_default(2.0)
+    .set_min(1.0)
+    .set_flag(Option::FLAG_RUNTIME)
+    .set_description("trigger MDS_HEALTH_TRIM warning when the mds log is longer than mds_log_max_segments * mds_log_warn_factor"),
+
     Option("mds_bal_export_pin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(true)
     .set_description("allow setting directory export pins to particular ranks"),
@@ -7983,6 +8003,11 @@ std::vector<Option> get_mds_options() {
     .set_default(10.0)
     .set_description("rate of decay for export targets communicated to clients"),
 
+    Option("mds_oft_prefetch_dirfrags", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+    .set_default(true)
+    .set_description("prefetch dirfrags recorded in open file table on startup")
+    .set_flag(Option::FLAG_STARTUP),
+
     Option("mds_replay_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
     .set_default(1.0)
     .set_description("time in seconds between replay of updates to journal by standby replay MDS"),
@@ -8188,6 +8213,11 @@ std::vector<Option> get_mds_options() {
     .set_default(100)
     .set_description("minimum number of capabilities a client may hold"),
 
+    Option("mds_min_caps_working_set", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
+    .set_default(10000)
+    .set_flag(Option::FLAG_RUNTIME)
+    .set_description("number of capabilities a client may hold without cache pressure warnings generated"),
+
     Option("mds_max_caps_per_client", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
     .set_default(1_M)
     .set_description("maximum number of capabilities a client may hold"),
index a7c0cc220b6f9c6f02c5c1dde5d612d3ff59d9b4..42f6fac9b03e1bb43cd75db817dcf960ed4274ce 100644 (file)
 #ifndef CEPH_COMMON_STRTOL_H
 #define CEPH_COMMON_STRTOL_H
 
+#if __has_include(<charconv>)
+#include <charconv>
+#endif // __has_include(<charconv>)
+#include <cinttypes>
+#include <cstdlib>
+#include <optional>
 #include <string>
-extern "C" {
-#include <stdint.h>
+#include <string_view>
+#include <system_error>
+#include <type_traits>
+
+
+namespace ceph {
+#if __has_include(<charconv>)
+// Wrappers around std::from_chars.
+//
+// Why do we want this instead of strtol and friends? Because the
+// string doesn't have to be NUL-terminated! (Also, for a lot of
+// purposes, just putting a string_view in and getting an optional out
+// is friendly.)
+//
+// Returns the found number on success. Returns an empty optional on
+// failure OR on trailing characters.
+template<typename T>
+auto parse(std::string_view s, int base = 10)
+  -> std::enable_if_t<std::is_integral_v<T>, std::optional<T>>
+{
+  T t;
+  auto r = std::from_chars(s.data(), s.data() + s.size(), t, base);
+  if ((r.ec != std::errc{}) || (r.ptr != s.data() + s.size())) {
+    return std::nullopt;
+  }
+  return t;
+}
+
+// As above, but succeed on trailing characters and trim the supplied
+// string_view to remove the parsed number. Set the supplied
+// string_view to empty if it ends with the number.
+template<typename T>
+auto consume(std::string_view& s, int base = 10)
+  -> std::enable_if_t<std::is_integral_v<T>, std::optional<T>>
+{
+  T t;
+  auto r = std::from_chars(s.data(), s.data() + s.size(), t, base);
+  if (r.ec != std::errc{})
+    return std::nullopt;
+
+  if (r.ptr == s.data() + s.size()) {
+    s = std::string_view{};
+  } else {
+    s.remove_prefix(r.ptr - s.data());
+  }
+  return t;
+}
+// Sadly GCC is missing the floating point versions.
+#else // __has_include(<charconv>)
+template<typename T>
+auto parse(std::string_view sv, int base = 10)
+  -> std::enable_if_t<std::is_integral_v<T>, std::optional<T>>
+{
+  std::string s(sv);
+  char* end = nullptr;
+  std::conditional_t<std::is_signed_v<T>, std::intmax_t, std::uintmax_t> v;
+  errno = 0;
+
+  if (s.size() > 0 && std::isspace(s[0]))
+    return std::nullopt;
+
+  if constexpr (std::is_signed_v<T>) {
+    v = std::strtoimax(s.data(), &end, base);
+  } else {
+    if (s.size() > 0 && s[0] == '-')
+      return std::nullopt;
+    v = std::strtoumax(s.data(), &end, base);
+  }
+  if (errno != 0 ||
+      end != s.data() + s.size() ||
+      v > std::numeric_limits<T>::max() ||
+      v < std::numeric_limits<T>::min())
+    return std::nullopt;
+  return static_cast<T>(v);
+}
+
+template<typename T>
+auto consume(std::string_view& sv, int base = 10)
+  -> std::enable_if_t<std::is_integral_v<T>, std::optional<T>>
+{
+  std::string s(sv);
+  char* end = nullptr;
+  std::conditional_t<std::is_signed_v<T>, std::intmax_t, std::uintmax_t> v;
+  errno = 0;
+
+  if (s.size() > 0 && std::isspace(s[0]))
+    return std::nullopt;
+
+  if constexpr (std::is_signed_v<T>) {
+    v = std::strtoimax(s.data(), &end, base);
+  } else {
+    if (s.size() > 0 && s[0] == '-')
+      return std::nullopt;
+    v = std::strtoumax(s.data(), &end, base);
+  }
+  if (errno != 0 ||
+      end == s.data() ||
+      v > std::numeric_limits<T>::max() ||
+      v < std::numeric_limits<T>::min())
+    return std::nullopt;
+  if (end == s.data() + s.size()) {
+    sv = std::string_view{};
+  } else {
+    sv.remove_prefix(end - s.data());
+  }
+  return static_cast<T>(v);
 }
+#endif // __has_include(<charconv>)
+} // namespace ceph
 
 long long strict_strtoll(const char *str, int base, std::string *err);
 
index 51aba0834d356b4085ac0f3cfc8aaa0c90045c1f..346f37137ce9064cd7b2fd11fb0830cc30583da2 100644 (file)
@@ -4,31 +4,42 @@ if(HAVE_INTEL_SSE4_1 AND HAVE_BETTER_YASM_ELF64 AND (NOT APPLE))
        set(zlib_sources
          CompressionPluginZlib.cc
          ZlibCompressor.cc
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/crc32_gzip.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/crc32_gzip_base.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/detect_repeated_char.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_04.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/hufftables_c.c
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_base.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_01.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_02.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body_04.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_finish.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_base.c
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_01.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_02.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_base.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/flatten_ll.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/huff_codes.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base_aliases.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc_base.c
+         ${CMAKE_SOURCE_DIR}/src/isa-l/crc/crc64_base.c
+       )
+       list(APPEND zlib_sources
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_body.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_finish.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_icf_finish.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/rfc1951_lookup.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_sse.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/adler32_avx2_4.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_multibinary.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_01.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_update_histogram_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_01.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_decode_block_stateless_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_inflate_multibinary.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/encode_df_06.asm
          ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/proc_heap.asm
-         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/rfc1951_lookup.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_deflate_hash.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm
+         ${CMAKE_SOURCE_DIR}/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm
        )
 else(HAVE_INTEL_SSE4_1 AND HAVE_BETTER_YASM_ELF64 AND (NOT APPLE))
        set(zlib_sources
index c85951705a40626f882c47595338b537dbb24739..72ef9c45ce0106a2b4120ed07e55d129476fec9f 100644 (file)
@@ -32,7 +32,7 @@ public:
                       std::ostream *ss) override
   {
     if (compressor == 0) {
-      ZstdCompressor *interface = new ZstdCompressor();
+      ZstdCompressor *interface = new ZstdCompressor(cct);
       compressor = CompressorRef(interface);
     }
     *cs = compressor;
index e51ba3b7cbd326ac55ba3d7dede63c516b2169cb..27812f0a834d053974a46b941d3f03e277521cd1 100644 (file)
 #include "include/encoding.h"
 #include "compressor/Compressor.h"
 
-#define COMPRESSION_LEVEL 5
-
 class ZstdCompressor : public Compressor {
  public:
-  ZstdCompressor() : Compressor(COMP_ALG_ZSTD, "zstd") {}
+  ZstdCompressor(CephContext *cct) : Compressor(COMP_ALG_ZSTD, "zstd"), cct(cct) {}
 
   int compress(const bufferlist &src, bufferlist &dst) override {
     ZSTD_CStream *s = ZSTD_createCStream();
-    ZSTD_initCStream_srcSize(s, COMPRESSION_LEVEL, src.length());
+    ZSTD_initCStream_srcSize(s, cct->_conf->compressor_zstd_level, src.length());
     auto p = src.begin();
     size_t left = src.length();
 
@@ -101,6 +99,8 @@ class ZstdCompressor : public Compressor {
     dst.append(dstptr, 0, outbuf.pos);
     return 0;
   }
+ private:
+  CephContext *const cct;
 };
 
 #endif
index bd9b00460b49b3e4504d63c86b203cd454f82da2..9cdc62e7dcbdeb1d2f751830fede3432110454ba 100644 (file)
@@ -22,10 +22,10 @@ add_subdirectory(lrc)
 add_subdirectory(shec)
 add_subdirectory(clay)
 
-if (HAVE_BETTER_YASM_ELF64)
+if(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)
   add_subdirectory(isa)
   set(EC_ISA_LIB ec_isa)
-endif (HAVE_BETTER_YASM_ELF64)
+endif()
 
 add_library(erasure_code STATIC ErasureCodePlugin.cc)
 target_link_libraries(erasure_code ${CMAKE_DL_LIBS})
index cc48921125344278f1eab1a7d81b9c7992ee2399..5043ac225dc3259c3924239743478320422192cc 100644 (file)
@@ -2,61 +2,90 @@
 set(isal_src_dir ${CMAKE_SOURCE_DIR}/src/isa-l)
 include_directories(${isal_src_dir}/include)
 
-set(isa_srcs
-  ${isal_src_dir}/erasure_code/ec_base.c
-  ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
-  ${isal_src_dir}/erasure_code/ec_highlevel_func.c
-  ${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
-  ${isal_src_dir}/erasure_code/ec_multibinary.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
-  ${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
-  ErasureCodeIsa.cc
-  ErasureCodeIsaTableCache.cc
-  ErasureCodePluginIsa.cc
-  xor_op.cc
-)
+if(HAVE_BETTER_YASM_ELF64)
+  set(isa_srcs
+    ${isal_src_dir}/erasure_code/ec_base.c
+    ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
+    ${isal_src_dir}/erasure_code/ec_highlevel_func.c
+    ${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
+    ${isal_src_dir}/erasure_code/ec_multibinary.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
+    ${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
+    ErasureCodeIsa.cc
+    ErasureCodeIsaTableCache.cc
+    ErasureCodePluginIsa.cc
+    xor_op.cc
+  )
+elseif(HAVE_ARMV8_SIMD)
+  set(isa_srcs
+    ${isal_src_dir}/erasure_code/ec_base.c
+    ${isal_src_dir}/erasure_code/aarch64/ec_aarch64_highlevel_func.c
+    ${isal_src_dir}/erasure_code/aarch64/ec_aarch64_dispatcher.c
+    ${isal_src_dir}/erasure_code/aarch64/gf_2vect_dot_prod_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_2vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_3vect_dot_prod_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_3vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_4vect_dot_prod_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_4vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_5vect_dot_prod_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_5vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_6vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_vect_dot_prod_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_vect_mad_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/gf_vect_mul_neon.S
+    ${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
+    ErasureCodeIsa.cc
+    ErasureCodeIsaTableCache.cc
+    ErasureCodePluginIsa.cc
+    xor_op.cc
+  )
+  set_source_files_properties(
+    ${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
+    PROPERTIES COMPILE_FLAGS "-D__ASSEMBLY__"
+  )
+endif()
 
 add_library(ec_isa SHARED
   ${isa_srcs}
index 39cdc6b2bf42f095f71d32cd96528bed44e8d293..77eb4093a80aa3b34859748c2c78acdc460fe5cc 100644 (file)
@@ -30,6 +30,5 @@ if(WITH_RADOSGW)
   install(FILES
     rados/librgw.h
     rados/rgw_file.h
-    rgw/librgw_admin_user.h
-  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rados)
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rados)
 endif()
index 714948ae06db27fb51804b380deeb1db567409c5..9f3c012f7be8454e24a1253ee8b37fdf1b267194 100644 (file)
@@ -120,7 +120,7 @@ DEFINE_CEPH_FEATURE(21, 2, RADOS_BACKOFF)    // overlap
 DEFINE_CEPH_FEATURE(21, 2, OSDMAP_PG_UPMAP)  // overlap
 DEFINE_CEPH_FEATURE(21, 2, CRUSH_CHOOSE_ARGS) // overlap
 DEFINE_CEPH_FEATURE_RETIRED(22, 1, BACKFILL_RESERVATION, JEWEL, LUMINOUS)
-
+DEFINE_CEPH_FEATURE(22, 2, OSD_FIXED_COLLECTION_LIST)
 DEFINE_CEPH_FEATURE(23, 1, MSG_AUTH)         // 3.19 req (unless nocephx_require_signatures)
 DEFINE_CEPH_FEATURE_RETIRED(24, 1, RECOVERY_RESERVATION, JEWEL, LUMINOUS)
 
@@ -246,6 +246,7 @@ DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facin
         CEPH_FEATURE_OSD_PGLOG_HARDLIMIT | \
         CEPH_FEATUREMASK_SERVER_OCTOPUS | \
         CEPH_FEATUREMASK_OSD_REPOP_MLCOD | \
+        CEPH_FEATURE_OSD_FIXED_COLLECTION_LIST | \
         0ULL)
 
 #define CEPH_FEATURES_SUPPORTED_DEFAULT  CEPH_FEATURES_ALL
index 6778155640f5fca749fc3b8512452f0f22888ef0..722c1364911ad3e7369fa53d81d3b7bf582c4f77 100644 (file)
 /* yasm can also build the isa-l */
 #cmakedefine HAVE_BETTER_YASM_ELF64
 
+/* Define if isa-l is compiled for arm64 */
+#cmakedefine HAVE_ARMV8_SIMD
+
 /* Define to 1 if strerror_r returns char *. */
 #cmakedefine STRERROR_R_CHAR_P 1
 
index 2b3e723da22ab2cf170511cfe007b553a389bb60..5036f8710a459bb0b075587feff796c85c7b6895 100644 (file)
@@ -92,10 +92,6 @@ WRITE_RAW_ENCODER(ceph_le64)
 WRITE_RAW_ENCODER(ceph_le32)
 WRITE_RAW_ENCODER(ceph_le16)
 
-// FIXME: we need to choose some portable floating point encoding here
-WRITE_RAW_ENCODER(float)
-WRITE_RAW_ENCODER(double)
-
 inline void encode(const bool &v, bufferlist& bl) {
   __u8 vv = v;
   encode_raw(vv, bl);
@@ -129,6 +125,37 @@ WRITE_INTTYPE_ENCODER(int32_t, le32)
 WRITE_INTTYPE_ENCODER(uint16_t, le16)
 WRITE_INTTYPE_ENCODER(int16_t, le16)
 
+// -----------------------------------
+// float types
+//
+// NOTE: The following code assumes all supported platforms use IEEE binary32
+// as float and IEEE binary64 as double floating-point format.  The assumption
+// is verified by the assertions below.
+//
+// Under this assumption, we can use raw encoding of floating-point types
+// on little-endian machines, but we still need to perform a byte swap
+// on big-endian machines to ensure cross-architecture compatibility.
+// To achive that, we reinterpret the values as integers first, which are
+// byte-swapped via the ceph_le types as above.  The extra conversions
+// are optimized away on little-endian machines by the compiler.
+#define WRITE_FLTTYPE_ENCODER(type, itype, etype)                      \
+  static_assert(sizeof(type) == sizeof(itype));                                \
+  static_assert(std::numeric_limits<type>::is_iec559,                  \
+             "floating-point type not using IEEE754 format");          \
+  inline void encode(type v, ::ceph::bufferlist& bl, uint64_t features=0) { \
+    ceph_##etype e;                                                    \
+    e = *reinterpret_cast<itype *>(&v);                                        \
+    ::ceph::encode_raw(e, bl);                                         \
+  }                                                                    \
+  inline void decode(type &v, ::ceph::bufferlist::const_iterator& p) { \
+    ceph_##etype e;                                                    \
+    ::ceph::decode_raw(e, p);                                          \
+    *reinterpret_cast<itype *>(&v) = e;                                        \
+  }
+
+WRITE_FLTTYPE_ENCODER(float, uint32_t, le32)
+WRITE_FLTTYPE_ENCODER(double, uint64_t, le64)
+
 // see denc.h for ENCODE_DUMP_PATH discussion and definition.
 #ifdef ENCODE_DUMP_PATH
 # define ENCODE_DUMP_PRE()                     \
index 2c63bc7ea54aa0cdfe1334239dd7f0fe8cc55134..977d45fe2e360c046638633cab85f27b63822169 100644 (file)
 
 #include "rados/librados.h"
 
+/*
+ * Don't wait for udev add uevents in krbd_map() and udev remove
+ * uevents in krbd_unmap*().  Instead, make do with the respective
+ * kernel uevents and return as soon as they are received.
+ *
+ * systemd-udevd sends out udev uevents after it finishes processing
+ * the respective kernel uevents, which mostly boils down to executing
+ * all matching udev rules.  With this flag set, on return from
+ * krbd_map() systemd-udevd may still be poking at the device: it
+ * may still be open with tools such as blkid and various ioctls to
+ * be run against it, none of the persistent symlinks to the device
+ * node may be there, etc.  udev used to be responsible for creating
+ * the device node as well, but that has been handled by devtmpfs in
+ * the kernel for many years now, so the device node (as returned
+ * through @pdevnode) is guaranteed to be there.
+ *
+ * If set, krbd_map() and krbd_unmap*() can be invoked from any
+ * network namespace that is owned by the initial user namespace
+ * (which is a formality because things like loading kernel modules
+ * and creating block devices are not namespaced and require global
+ * privileges, i.e. capabilities in the initial user namespace).
+ * Otherwise, krbd_map() and krbd_unmap*() must be invoked from
+ * the initial network namespace.
+ *
+ * If set, krbd_unmap*() doesn't attempt to settle the udev queue
+ * before retrying unmap for the last time.  Some EBUSY errors due
+ * to systemd-udevd poking at the device at the time krbd_unmap*()
+ * is invoked that are otherwise covered by the retry logic may be
+ * returned.
+ */
+#define KRBD_CTX_F_NOUDEV       (1U << 0)
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 struct krbd_ctx;
 
-int krbd_create_from_context(rados_config_t cct, struct krbd_ctx **pctx);
+int krbd_create_from_context(rados_config_t cct, uint32_t flags,
+                             struct krbd_ctx **pctx);
 void krbd_destroy(struct krbd_ctx *ctx);
 
 int krbd_map(struct krbd_ctx *ctx,
index 8027305688d201bb39c6b3056736791b99c8b96d..1ba8a9fad24e47ab1164db1dbbee23c93a1e8370 100644 (file)
@@ -150,12 +150,20 @@ namespace mempool {
   f(bluestore_alloc)                 \
   f(bluestore_cache_data)            \
   f(bluestore_cache_onode)           \
+  f(bluestore_cache_meta)            \
   f(bluestore_cache_other)           \
+  f(bluestore_Buffer)                \
+  f(bluestore_Extent)                \
+  f(bluestore_Blob)                  \
+  f(bluestore_SharedBlob)            \
+  f(bluestore_inline_bl)             \
   f(bluestore_fsck)                  \
   f(bluestore_txc)                   \
-  f(bluestore_writing_deferred)              \
+  f(bluestore_writing_deferred)      \
   f(bluestore_writing)               \
   f(bluefs)                          \
+  f(bluefs_file_reader)              \
+  f(bluefs_file_writer)              \
   f(buffer_anon)                     \
   f(buffer_meta)                     \
   f(osd)                             \
index c06c6017118ef1ced13c212ba4d3d89eaea7bd9f..495e904a697fcb380b26cf4cc4c2e0895b67582e 100644 (file)
@@ -325,6 +325,7 @@ typedef enum {
   RBD_IMAGE_MIGRATION_STATE_PREPARED = 2,
   RBD_IMAGE_MIGRATION_STATE_EXECUTING = 3,
   RBD_IMAGE_MIGRATION_STATE_EXECUTED = 4,
+  RBD_IMAGE_MIGRATION_STATE_ABORTING = 5,
 } rbd_image_migration_state_t;
 
 typedef struct {
diff --git a/ceph/src/include/rgw/librgw_admin_user.h b/ceph/src/include/rgw/librgw_admin_user.h
deleted file mode 100644 (file)
index e1dd5a2..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * create rgw admin user
- *
- * Copyright (C) 2015 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#ifndef LIB_RGW_ADMIN_USER_H
-#define LIB_RGW_ADMIN_USER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LIBRGW_ADMIN_USER_VER_MAJOR 1
-#define LIBRGW_ADMIN_USER_VER_MINOR 0
-#define LIBRGW_ADMIN_USER_VER_EXTRA 0
-
-#define LIBRGW_ADMIN_USER_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
-#define LIBRGW_ADMIN_USER_VERSION_CODE LIBRGW_ADMIN_USER_VERSION(LIBRGW_ADMIN_USER_VER_MAJOR, LIBRGW_ADMIN_USER_VER_MINOR, LIBRGW_ADMIN_USER_VER_EXTRA)
-
-typedef void* librgw_admin_user_t;
-int librgw_admin_user_create(librgw_admin_user_t *rgw_admin_user, int argc, char **argv);
-void librgw_admin_user_shutdown(librgw_admin_user_t rgw_admin_user);
-
-struct rgw_user_info
-{
-  const char *uid;
-  const char *display_name;
-  const char *access_key;
-  const char* secret_key;
-  const char* email;
-  const char *caps;
-  const char *access;
-  bool admin;
-  bool system;
-};
-
- /*
- * create a new rgw user
- */
-int rgw_admin_create_user(librgw_admin_user_t rgw_admin_user, const char *uid,
-                         const char *display_name,  const char *access_key, const char* secret_key,
-                         const char *email, const char *caps,
-                         const char *access, bool admin, bool system);
-
-/*
- * get rgw user info
- */
-int rgw_admin_user_info(librgw_admin_user_t rgw_admin_user,const char * uid, rgw_user_info* user_info);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBRGW_ADMIN_USER */
diff --git a/ceph/src/isa-l/.drone.yml b/ceph/src/isa-l/.drone.yml
new file mode 100644 (file)
index 0000000..4a30e90
--- /dev/null
@@ -0,0 +1,89 @@
+kind: pipeline
+name: arm64-linux-gcc-5.4
+
+platform:
+  os: linux
+  arch: arm64
+
+steps:
+- name: arm64-linux-gcc-5.4
+  image: ubuntu:xenial
+  environment:
+    C_COMPILER: gcc
+  commands:
+  - if [ -n "$C_COMPILER" ]; then export CC="$C_COMPILER"; fi
+  - if [ -n "$AS_ASSEMBL" ]; then export AS="$AS_ASSEMBL"; fi
+  - apt-get -qq update
+  - apt-get install -qq -y build-essential git indent libtool libz-dev yasm autoconf
+  - if [ -n "$CC" ]; then $CC --version; fi
+  - if [ -n "$AS" ]; then $AS --version; fi
+  - ./tools/test_autorun.sh "$TEST_TYPE"
+
+---
+kind: pipeline
+name: arm64-linux-gcc-4.7
+
+platform:
+  os: linux
+  arch: arm64
+
+steps:
+- name: arm64-linux-gcc-4.7
+  image: ubuntu:xenial
+  environment:
+    C_COMPILER: gcc-4.7
+  commands:
+  - if [ -n "$C_COMPILER" ]; then export CC="$C_COMPILER"; fi
+  - if [ -n "$AS_ASSEMBL" ]; then export AS="$AS_ASSEMBL"; fi
+  - apt-get -qq update
+  - apt-get install -qq -y build-essential git indent libtool libz-dev software-properties-common yasm autoconf
+  - add-apt-repository -y ppa:ubuntu-toolchain-r/test
+  - apt-get -qq update
+  - apt-get install -qq -y g++-4.7
+  - if [ -n "$CC" ]; then $CC --version; fi
+  - if [ -n "$AS" ]; then $AS --version; fi
+  - ./tools/test_autorun.sh "$TEST_TYPE"
+
+---
+kind: pipeline
+name: arm64-linux-gcc-6
+
+platform:
+  os: linux
+  arch: arm64
+
+steps:
+- name: arm64-linux-gcc-6
+  image: debian:9
+  environment:
+    C_COMPILER: gcc
+  commands:
+  - if [ -n "$C_COMPILER" ]; then export CC="$C_COMPILER"; fi
+  - if [ -n "$AS_ASSEMBL" ]; then export AS="$AS_ASSEMBL"; fi
+  - apt-get -q update
+  - apt-get install -y build-essential git indent libtool libz-dev software-properties-common yasm autoconf
+  - if [ -n "$CC" ]; then $CC --version; fi
+  - if [ -n "$AS" ]; then $AS --version; fi
+  - ./tools/test_autorun.sh "$TEST_TYPE"
+
+---
+kind: pipeline
+name: arm64-linux-extended-tests
+
+platform:
+  os: linux
+  arch: arm64
+
+steps:
+- name: arm64-linux-extended-tests
+  image: ubuntu:xenial
+  environment:
+    TEST_TYPE: ext
+  commands:
+  - if [ -n "$C_COMPILER" ]; then export CC="$C_COMPILER"; fi
+  - if [ -n "$AS_ASSEMBL" ]; then export AS="$AS_ASSEMBL"; fi
+  - apt-get -qq update
+  - apt-get install -qq -y build-essential git indent libtool libz-dev software-properties-common yasm autoconf
+  - if [ -n "$CC" ]; then $CC --version; fi
+  - if [ -n "$AS" ]; then $AS --version; fi
+  - ./tools/test_autorun.sh "$TEST_TYPE"
index 9da8e0d5870faead05e34351434b2ab6fbdcd3ba..9bf236c08f4fcbffa09a66cc429c3737dfb6d1d0 100644 (file)
+language: c
 sudo: required
-dist: trusty
+matrix:
+  include:
+    ### OS X
+    - os: osx
+      env: C_COMPILER=clang
+
+    ### linux gcc and format check
+    - dist: xenial
+      addons:
+        apt:
+          packages:
+            - nasm
+      install:
+        # Install newer indent to check formatting
+        - sudo apt-get install texinfo
+        - wget http://archive.ubuntu.com/ubuntu/pool/main/i/indent/indent_2.2.12.orig.tar.xz -O /tmp/indent.tar.xz
+        - tar -xJf /tmp/indent.tar.xz -C /tmp/
+        - pushd /tmp/indent-2.2.12 && ./configure --prefix=/usr && make && sudo make install && popd
+      env: C_COMPILER=gcc
+
+    ### linux clang
+    - dist: xenial
+      addons:
+        apt:
+          packages:
+            - nasm
+      env: C_COMPILER=clang
+
+    ### linux newer clang
+    - dist: trusty
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+            - llvm-toolchain-trusty-4.0
+          packages:
+            - clang-4.0
+      env: C_COMPILER=clang-4.0
+
+    ### linux older gcc
+    - dist: trusty
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - g++-4.7
+      env: C_COMPILER=gcc-4.7
+
+    ### linux newer gcc
+    - dist: trusty
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - g++-6
+      env: C_COMPILER=gcc-6
+
+    ### arm64: gcc-5.4
+    - os: linux
+      dist: xenial
+      arch: arm64
+      env: C_COMPILER=gcc
+
+    ### arm64: gcc-5.4 extended tests
+    - os: linux
+      dist: xenial
+      arch: arm64
+      env: TEST_TYPE=ext
+
+    ### linux extended tests
+    - dist: xenial
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - binutils-mingw-w64-x86-64
+            - gcc-mingw-w64-x86-64
+            - wine
+            - nasm
+      env: TEST_TYPE=ext
+
+before_install:
+  - if [ -n "${C_COMPILER}" ]; then export CC="${C_COMPILER}"; fi
+  - if [ -n "${AS_ASSEMBL}" ]; then export AS="${AS_ASSEMBL}"; fi
+
 before_script:
-    - sudo apt-get -q update
-    - sudo apt-get install -y yasm nasm
-    - ./autogen.sh
-script: ./configure && make && make check
-language: c
-compiler:
-    - clang
-    - gcc
+  - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get -q update; fi
+  - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get install yasm; fi
+  - if [ $TRAVIS_OS_NAME = osx ]; then brew update; fi
+  - if [ $TRAVIS_OS_NAME = osx ]; then brew install yasm; fi
+
+script:
+  - if [ -n "${CC}" ]; then $CC --version; fi
+  - if [ -n "${AS}" ]; then $AS --version || echo No version; fi
+  - ./tools/test_autorun.sh "${TEST_TYPE}"
index 593a46765b475ebdcde969888327119f733fa701..fb3dfbf2186a7d8b44cd8cde3f350feea7a0d8a8 100644 (file)
@@ -30,6 +30,10 @@ the included indent script to format C code.
 
     ./tools/iindent your_files.c
 
-[mailing list]:https://lists.01.org/mailman/listinfo/isal
+And use check format script before submitting.
+
+    ./tools/check_format.sh
+
+[mailing list]:https://lists.01.org/hyperkitty/list/isal@lists.01.org/
 [license]:LICENSE
 [signed-off-by language]:https://01.org/community/signed-process
index 1678ca7bfe539ec00369f59d2f32c527730e58b1..cb0673730b7665bbd8c1192549e2ad228d7b3c04 100644 (file)
@@ -7,16 +7,20 @@ TAB_SIZE               = 8
 ALIASES                = "requires=\xrefitem requires \"Requires\" \"Instruction Set Requirements for arch-specific functions (non-multibinary)\""
 OPTIMIZE_OUTPUT_FOR_C  = YES
 HIDE_UNDOC_MEMBERS     = YES
+USE_MDFILE_AS_MAINPAGE = README.md
 
 INPUT                  = isa-l.h \
                         include \
                         README.md \
+                        CONTRIBUTING.md \
                         Release_notes.txt
 
-EXCLUDE                = include/test.h
+EXCLUDE                = include/test.h include/types.h include/unaligned.h
+EXCLUDE_PATTERNS       = */include/*_multibinary.h
 EXAMPLE_PATH           = . crc raid erasure_code igzip
 PAPER_TYPE             = letter
 LATEX_SOURCE_CODE      = YES
+GENERATE_TREEVIEW      = YES
 MACRO_EXPANSION        = YES
 EXPAND_ONLY_PREDEF     = YES
 PREDEFINED             = "DECLARE_ALIGNED(n, a)=ALIGN n" \
index 80afa9a371b7d5de34358c712c2c3bf034eeb9ef..ecebef110b465db8a1bc65b386b6a74a1ce49bff 100644 (file)
@@ -1,4 +1,4 @@
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
index e0edfa3f605c5b033ac25d5a3b62f5514c764790..15c9cf0aa05026cf92ffa36e8eeaf2c8ff59b631 100644 (file)
@@ -3,10 +3,16 @@ CLEANFILES =
 LDADD =
 AM_MAKEFLAGS = --no-print-directory
 noinst_HEADERS =
-pkginclude_HEADERS = include/test.h
+pkginclude_HEADERS = include/test.h include/types.h
 noinst_LTLIBRARIES =
+bin_PROGRAMS =
 INCLUDE = -I $(srcdir)/include/
 
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libisal.pc
+EXTRA_DIST += libisal.pc.in
+CLEANFILES += libisal.pc
+
 lsrc=
 src_include=
 extern_hdrs=
@@ -18,12 +24,19 @@ unit_tests_extra=
 perf_tests_extra=
 examples=
 other_tests=
+other_tests_x86_64=
+other_tests_x86_32=
+other_tests_aarch64=
+other_tests_ppc64le=
 lsrc_x86_64=
 lsrc_x86_32=
+lsrc_aarch64=
+lsrc_ppc64le=
 lsrc_base_aliases=
 lsrc32=
 unit_tests32=
 perf_tests32=
+progs=
 
 # Include units
 
@@ -31,10 +44,14 @@ include erasure_code/Makefile.am
 include raid/Makefile.am
 include crc/Makefile.am
 include igzip/Makefile.am
+include tests/fuzz/Makefile.am
+include examples/ec/Makefile.am
+include programs/Makefile.am
+include mem/Makefile.am
 
 # LIB version info not necessarily the same as package version
 LIBISAL_CURRENT=2
-LIBISAL_REVISION=18
+LIBISAL_REVISION=29
 LIBISAL_AGE=0
 
 lib_LTLIBRARIES = libisal.la
@@ -43,10 +60,22 @@ libisal_la_SOURCES = ${lsrc}
 
 if CPU_X86_64
 libisal_la_SOURCES += ${lsrc_x86_64}
+other_tests += ${other_tests_x86_64}
 endif
 
 if CPU_X86_32
 libisal_la_SOURCES += ${lsrc_x86_32}
+other_tests += ${other_tests_x86_32}
+endif
+
+if CPU_AARCH64
+libisal_la_SOURCES += ${lsrc_aarch64}
+other_tests += ${other_tests_aarch64}
+endif
+
+if CPU_PPC64LE
+libisal_la_SOURCES += ${lsrc_ppc64le}
+other_tests += ${other_tests_ppc64le}
 endif
 
 if CPU_UNDEFINED
@@ -73,6 +102,7 @@ EXTRA_PROGRAMS += ${other_tests}
 EXTRA_PROGRAMS += ${examples}
 CLEANFILES += ${EXTRA_PROGRAMS}
 
+programs:${progs}
 perfs: ${perf_tests}
 tests: ${unit_tests}
 checks: ${check_tests}
@@ -86,19 +116,26 @@ test: $(addsuffix .run,$(unit_tests))
        $<
        @echo Completed run: $<
 
-# Support for yasm/nasm
+# Support for yasm/nasm/gas
 if USE_YASM
   as_filter = ${srcdir}/tools/yasm-filter.sh
 endif
 if USE_NASM
   as_filter = ${srcdir}/tools/nasm-filter.sh
 endif
+if CPU_AARCH64
+  as_filter = $(CC) -D__ASSEMBLY__
+endif
 
 CCAS = $(as_filter)
 EXTRA_DIST += tools/yasm-filter.sh tools/nasm-filter.sh
 
 AM_CFLAGS = ${my_CFLAGS} ${INCLUDE} $(src_include) ${D}
+if CPU_AARCH64
+AM_CCASFLAGS = ${AM_CFLAGS}
+else
 AM_CCASFLAGS = ${yasm_args} ${INCLUDE} ${src_include} ${DEFS} ${D}
+endif
 
 .asm.s:
        @echo "  MKTMP   " $@;
@@ -110,6 +147,11 @@ CLEANFILES += isa-l.h
 isa-l.h:
        @echo 'Building $@'
        @echo ''                        >> $@
+       @echo '/**'                     >> $@
+       @echo ' *  @file isa-l.h'       >> $@
+       @echo ' *  @brief Include for ISA-L library' >> $@
+       @echo ' */'                     >> $@
+       @echo ''                        >> $@
        @echo '#ifndef _ISAL_H_'        >> $@
        @echo '#define _ISAL_H_'        >> $@
        @echo ''                        >> $@
index e3f604e620b54a6af667a25e891c38bafb496aac..ac3fcbf4e64a4846c9022fcb9cba1741f0f5953b 100644 (file)
@@ -2,7 +2,7 @@
 #  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions 
+#  modification, are permitted provided that the following conditions
 #  are met:
 #    * Redistributions of source code must retain the above copyright
 #      notice, this list of conditions and the following disclaimer.
@@ -90,8 +90,11 @@ objs =  \
        bin\xor_gen_sse.obj \
        bin\crc16_t10dif_01.obj \
        bin\crc16_t10dif_by4.obj \
-       bin\crc32_gzip.obj \
+       bin\crc16_t10dif_02.obj \
+       bin\crc16_t10dif_copy_by4.obj \
+       bin\crc16_t10dif_copy_by4_02.obj \
        bin\crc32_ieee_01.obj \
+       bin\crc32_ieee_02.obj \
        bin\crc32_ieee_by4.obj \
        bin\crc32_iscsi_00.obj \
        bin\crc32_iscsi_01.obj \
@@ -104,15 +107,13 @@ objs =  \
        bin\crc64_jones_refl_by8.obj \
        bin\crc64_multibinary.obj \
        bin\crc_base.obj \
-       bin\crc32_gzip_base.obj \
+       bin\adler32_base.obj \
        bin\crc_multibinary.obj \
        bin\huff_codes.obj \
        bin\hufftables_c.obj \
        bin\igzip.obj \
        bin\igzip_base.obj \
-       bin\igzip_body_01.obj \
-       bin\igzip_body_02.obj \
-       bin\igzip_body_04.obj \
+       bin\igzip_body.obj \
        bin\igzip_decode_block_stateless_01.obj \
        bin\igzip_decode_block_stateless_04.obj \
        bin\igzip_finish.obj \
@@ -120,9 +121,7 @@ objs =  \
        bin\encode_df.obj \
        bin\encode_df_04.obj \
        bin\proc_heap.obj \
-       bin\igzip_icf_body_01.obj \
-       bin\igzip_icf_body_02.obj \
-       bin\igzip_icf_body_04.obj \
+       bin\igzip_icf_body_h1_gr_bt.obj \
        bin\igzip_icf_finish.obj \
        bin\igzip_icf_base.obj \
        bin\igzip_inflate.obj \
@@ -131,9 +130,23 @@ objs =  \
        bin\igzip_update_histogram_01.obj \
        bin\igzip_update_histogram_04.obj \
        bin\rfc1951_lookup.obj \
-       bin\detect_repeated_char.obj
+       bin\crc32_gzip_refl_by8.obj \
+       bin\crc32_gzip_refl_by8_02.obj \
+       bin\crc32_gzip_refl_by16_10.obj \
+       bin\adler32_sse.obj \
+       bin\adler32_avx2_4.obj \
+       bin\igzip_deflate_hash.obj \
+       bin\igzip_gen_icf_map_lh1_04.obj \
+       bin\igzip_gen_icf_map_lh1_06.obj \
+       bin\igzip_set_long_icf_fg_04.obj \
+       bin\igzip_set_long_icf_fg_06.obj \
+       bin\igzip_icf_body.obj \
+       bin\mem_zero_detect_avx.obj \
+       bin\mem_zero_detect_base.obj \
+       bin\mem_multibinary.obj \
+       bin\mem_zero_detect_sse.obj
 
-INCLUDES  = -I./ -Ierasure_code/ -Iraid/ -Icrc/ -Iigzip/ -Iinclude/
+INCLUDES  = -I./ -Ierasure_code/ -Iraid/ -Icrc/ -Iigzip/ -Iinclude/ -Imem/
 LINKFLAGS = /nologo
 CFLAGS   = -O2 -D NDEBUG /nologo -D_USE_MATH_DEFINES -Qstd=c99 $(INCLUDES) $(D)
 AFLAGS   = -f win64 $(INCLUDES) $(D)
@@ -147,10 +160,14 @@ dll: bin isa-l.dll
 bin: ; -mkdir $@
 
 isa-l_static.lib: $(objs)
-       lib -out:$@ $?
+       lib -out:$@ @<<
+$?
+<<
 
 isa-l.dll: $(objs)
-       link -out:$@ -dll -def:isa-l.def $?
+       link -out:$@ -dll -def:isa-l.def @<<
+$?
+<<
 
 {erasure_code}.c.obj:
        $(CC) $(CFLAGS) /c -Fo$@ $?
@@ -172,9 +189,13 @@ isa-l.dll: $(objs)
 {igzip}.asm.obj:
        $(AS) $(AFLAGS) -o $@ $?
 
+{mem}.c.obj:
+       $(CC) $(CFLAGS) /c -Fo$@ $?
+{mem}.asm.obj:
+       $(AS) $(AFLAGS) -o $@ $?
 
 # Examples
-ex = xor_example.exe crc_simple_test.exe igzip_example.exe igzip_sync_flush_example.exe
+ex = xor_example.exe crc_simple_test.exe crc64_example.exe igzip_example.exe igzip_sync_flush_example.exe
 ex: lib $(ex)
 
 $(ex): $(@B).obj
@@ -193,10 +214,12 @@ checks = \
        xor_check_test.exe \
        pq_check_test.exe \
        crc16_t10dif_test.exe \
-       crc32_ieee_test.exe \
-       crc32_iscsi_test.exe \
+       crc16_t10dif_copy_test.exe \
+       crc32_funcs_test.exe \
        crc64_funcs_test.exe \
-       igzip_rand_test.exe
+       igzip_wrapper_hdr_test.exe \
+       igzip_rand_test.exe \
+       mem_zero_detect_test.exe
 
 checks: lib $(checks)
 $(checks): $(@B).obj
@@ -217,18 +240,8 @@ $(tests): $(@B).obj
 # Performance tests
 perfs = \
        gf_vect_mul_perf.exe \
-       gf_vect_mul_sse_perf.exe \
-       gf_vect_mul_avx_perf.exe \
-       gf_vect_dot_prod_sse_perf.exe \
-       gf_vect_dot_prod_avx_perf.exe \
-       gf_2vect_dot_prod_sse_perf.exe \
-       gf_3vect_dot_prod_sse_perf.exe \
-       gf_4vect_dot_prod_sse_perf.exe \
-       gf_5vect_dot_prod_sse_perf.exe \
-       gf_6vect_dot_prod_sse_perf.exe \
        gf_vect_dot_prod_perf.exe \
        gf_vect_dot_prod_1tbl.exe \
-       gf_vect_mad_perf.exe \
        erasure_code_perf.exe \
        erasure_code_base_perf.exe \
        erasure_code_sse_perf.exe \
@@ -239,7 +252,9 @@ perfs = \
        crc32_ieee_perf.exe \
        crc32_iscsi_perf.exe \
        igzip_perf.exe \
-       igzip_sync_flush_perf.exe
+       igzip_sync_flush_perf.exe \
+       crc32_gzip_refl_perf.exe \
+       mem_zero_detect_perf.exe
 
 perfs: lib $(perfs)
 $(perfs): $(@B).obj
@@ -253,5 +268,4 @@ clean:
        -if exist isa-l.dll del isa-l.dll
 
 zlib.lib:
-igzip_inflate_perf.exe:  zlib.lib
 igzip_inflate_test.exe:  zlib.lib
index 6c21094896217b3fa9523eacff77ad8a944f314e..16ad1ff4750a06c30efab8a3ad628a363ab6b47a 100644 (file)
@@ -2,7 +2,7 @@
 #  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions 
+#  modification, are permitted provided that the following conditions
 #  are met:
 #    * Redistributions of source code must retain the above copyright
 #      notice, this list of conditions and the following disclaimer.
 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ########################################################################
 
-units     = erasure_code raid crc igzip
+units     = erasure_code raid crc igzip programs mem
 
 default: lib
 
+ifeq (,$(findstring crc,$(units)))
+ ifneq (,$(findstring igzip,$(units)))
+  override  units += crc
+ endif
+endif
+
 include $(foreach unit,$(units), $(unit)/Makefile.am)
 
+ifneq (,$(findstring igzip,$(units)))
+ include tests/fuzz/Makefile.am
+endif
+
+ifneq (,$(findstring erasure_code,$(units)))
+ include examples/ec/Makefile.am
+endif
+
 # Override individual lib names to make one inclusive library.
 lib_name := bin/isa-l.a
 
 include make.inc
 
-VPATH = . $(units) include
+VPATH = . $(units) include tests/fuzz examples/ec
index 48127384fe248849ac6eda039373f86fce89bc3a..b8fd220e49848a4d174dc375c09822fa2c9811a8 100644 (file)
@@ -1,7 +1,7 @@
 Intel(R) Intelligent Storage Acceleration Library
 =================================================
 
-[![Build Status](https://travis-ci.org/01org/isa-l.svg?branch=master)](https://travis-ci.org/01org/isa-l)
+[![Build Status](https://travis-ci.org/intel/isa-l.svg?branch=master)](https://travis-ci.org/intel/isa-l)
 
 ISA-L is a collection of optimized low-level functions targeting storage
 applications.  ISA-L includes:
@@ -16,10 +16,11 @@ applications.  ISA-L includes:
 * De-compression - Fast inflate-compatible data compression.
 
 Also see:
-* [ISA-L for updates](https://github.com/01org/isa-l).
-* For crypto functions see [isa-l_crypto on github](https://github.com/01org/isa-l_crypto).
-* The [github wiki](https://github.com/01org/isa-l/wiki).
-* ISA-L [mailing list](https://lists.01.org/mailman/listinfo/isal).
+* [ISA-L for updates](https://github.com/intel/isa-l).
+* For crypto functions see [isa-l_crypto on github](https://github.com/intel/isa-l_crypto).
+* The [github wiki](https://github.com/intel/isa-l/wiki) including a list of
+  [distros/ports](https://github.com/intel/isa-l/wiki/Ports--Repos) offering binary packages.
+* ISA-L [mailing list](https://lists.01.org/hyperkitty/list/isal@lists.01.org/).
 * [Contributing](CONTRIBUTING.md).
 
 Building ISA-L
@@ -27,10 +28,20 @@ Building ISA-L
 
 ### Prerequisites
 
-* yasm version 1.2.0 or later or nasm v2.11.01 or later.
-* gcc, clang, icc or VC compiler.
-* GNU 'make' or 'nmake' (Windows).
-* Building with autotools requires autoconf/automake packages.
+* Make: GNU 'make' or 'nmake' (Windows).
+* Optional: Building with autotools requires autoconf/automake packages.
+
+x86_64:
+* Assembler: nasm v2.11.01 or later (nasm v2.13 or better suggested for building in AVX512 support)
+  or yasm version 1.2.0 or later.
+* Compiler: gcc, clang, icc or VC compiler.
+
+aarch64:
+* Assembler: gas v2.24 or later.
+* Compiler: gcc v4.7 or later.
+
+other:
+* Compiler: Portable base functions are available that build with most C compilers.
 
 ### Autotools
 To build and install the library with autotools it is usually sufficient to run:
@@ -57,3 +68,4 @@ Other targets include:
 * `make perfs` : create included performance tests
 * `make ex`    : build examples
 * `make other` : build other utilities such as compression file tests
+* `make doc`   : build API manual
index d6bd4fe6a7d5cdbc43d8c7587e42f82ad13e6e13..be642931a0b204e6c04b753bebe87a4b4aaf0427 100644 (file)
@@ -1,4 +1,4 @@
-v2.18 Intel Intelligent Storage Acceleration Library Release Notes
+v2.29 Intel Intelligent Storage Acceleration Library Release Notes
 ==================================================================
 
 RELEASE NOTE CONTENTS
@@ -15,6 +15,66 @@ RELEASE NOTE CONTENTS
 
 2. FIXED ISSUES
 ---------------
+v2.28
+
+* Fix documentation on gf_vect_mad(). Min length listed as 32 instead of
+  required min 64 bytes.
+
+v2.27
+
+* Fix lack of install for pkg-config files
+
+v2.26
+
+* Fixes for sanitizer warnings.
+
+v2.25
+
+* Fix for nasm on Mac OS X/darwin.
+
+v2.24
+
+* Fix for crc32_iscsi().  Potential read-over for small buffer.  For an input
+  buffer length of less than 8 bytes and aligned to an 8 byte boundary, function
+  could read past length.  Previously had the possibility to cause a seg fault
+  only for length 0 and invalid buffer passed.  Calculated CRC is unchanged.
+
+* Fix for compression/decompression of > 4GB files.  For streaming compression
+  of extremely large files, the total_out parameter would wrap and could
+  potentially flag an otherwise valid lookback distance as being invalid.
+  Total_out is still 32bit for zlib compatibility.  No inconsistent compressed
+  buffers were generated by the issue.
+
+v2.23
+
+* Fix for histogram generation base function.
+* Fix library build warnings on macOS.
+* Fix igzip to use bsf instruction when tzcnt is not available.
+
+v2.22
+
+* Fix ISA-L builds for other architectures.  Base function and examples
+  sanitized for non-IA builds.
+
+* Fix fuzz test script to work with llvm 6.0 builtin libFuzz.
+
+v2.20
+
+* Inflate total_out behavior corrected for in-progress decompression.
+  Previously total_out represented the total bytes decompressed into the output
+  buffer or temp internal buffer.  This is changed to be only the bytes put into
+  the output buffer.
+
+* Fixed issue with isal_create_hufftables_subset.  Affects semi-dynamic
+  compression use case when explicitly creating hufftables from histogram.  The
+  _hufftables_subset function could fail to generate length symbols for any
+  length that were never seen.
+
+v2.19
+
+* Fix erasure code test that violates rs matrix bounds.
+
+* Fix 0 length file and looping errors in igzip_inflate_test.
 
 v2.18
 
@@ -47,8 +107,110 @@ v2.10
   affects windows versions of erasure code.  GP register saves/restore were
   pushed to same stack area as XMM.
 
-3. CHANGE LOG & FEATURES ADDED 
+3. CHANGE LOG & FEATURES ADDED
 ------------------------------
+v2.29
+
+* CRC Improvements
+  - New AVX512 vclmul versions of crc16_t10dif(), crc32_ieee(), crc32_gzip_refl.
+
+* Erasure code improvements
+  - Added AVX512 ec functions with 5 and 6 outputs. Can improve performance for
+    codes with 5 or more parity by running in batches of up to 6 at a time.
+
+v2.28
+
+* New next-arch versions of 64-bit CRC. All norm and reflected 64-bit
+  polynomials are expanded to utilize vpclmulqdq.
+
+v2.27
+
+* New multi-threaded compression option for igzip cli tool
+
+v2.26
+
+* Adler32 added to external API.
+* Multi-arch improvements.
+* Performance test improvements.
+
+v2.25
+
+* Igzip performance improvements and features.
+  - Performance improvements for uncompressable files. Random or uncompressable
+    files can be up to 3x faster in level 1 or 2 compression.
+  - Additional small file performance improvments.
+  - New options in igzip cli: use name from header or not, test compressed file.
+
+* Multi-arch autoconf script.
+  - Autoconf should detect architecture and run base functions at minimum.
+
+v2.24
+
+* Igzip small file performance improvements and new features.
+  - Better performance on small files.
+  - New gzip/zlib header and trailer handling.
+  - New gzip/zlib header parsing helper functions.
+  - New user-space compression/decompression tool igzip.
+
+* New mem unit added with first function isal_zero_detect().
+
+v2.23
+
+* Igzip inflate (decompression) performance improvements.
+  - Implemented multi-byte decode for inflate.  Decode can pack up to three
+    symbols into the decode table making some compressed streams decompress much
+    faster depending on the prevalence of short codes.
+
+v2.22
+
+* Igzip: AVX2 version of level 3 compression added.
+
+* Erasure code examples
+  - New examples for standard EC encode and decode.
+  - Example of piggyback EC encode and decode.
+
+v2.21
+
+* Igzip improvements
+  - New compression levels added.  ISA-L fast deflate now has more levels to
+    balance speed vs. target compression level.  Level 0, 1 are as in previous
+    generations.  New levels 2 & 3 target higher compression roughly comparable
+    to zlib levels 2-3.  Level 3 is currently only optimized for processors with
+    AVX512 instructions.
+
+* New T10dif & copy function - crc16_t10dif_copy()
+  - CRC and copy was added to emulate T10dif operations such as DIF insert and
+    strip.  This function stitches together CRC and memcpy operations
+    eliminating an extra data read.
+
+* CRC32 iscsi performance improvements
+  - Fixes issue under some distributions where warm cache performance was
+    reduced.
+
+v2.20
+
+* Igzip improvements
+  - Optimized deflate_hash in compression functions.
+    Improves performance of using preset dictionary.
+  - Removed alignment restrictions on input structure.
+
+v2.19
+
+* Igzip improvements
+
+  - Add optimized Adler-32 checksum.
+
+  - Implement zlib compression format.
+
+  - Add stateful dictionary support.
+
+  - Add struct reset functions for both deflate and inflate.
+
+* Reflected IEEE format CRC32 is released out. Function interface is named
+  crc32_gzip_refl.
+
+* Exact work condition of Erasure Code Reed-Solomon Matrix is determined by new
+  added program gen_rs_matrix_limits.
 
 v2.18
 
index b4cb0fe94d76cafcd229d2ac2b31078d605c20c0..3834d64a29719758d4f460dfac9587961c8f1dab 100644 (file)
@@ -3,7 +3,7 @@
 
 AC_PREREQ(2.69)
 AC_INIT([libisal],
-        [2.18.0],
+        [2.29.0],
         [sg.support.isal@intel.com],
         [isa-l],
         [http://01.org/storage-acceleration-library])
@@ -28,11 +28,27 @@ AS_CASE([$host_cpu],
   [x86_64], [CPU="x86_64"],
   [amd64], [CPU="x86_64"],
   [i?86], [CPU="x86_32"],
+  [aarch64], [CPU="aarch64"],
+  [arm64], [CPU="aarch64"],
+  [powerpc64le], [CPU="ppc64le"],
+  [ppc64le], [CPU="ppc64le"],
 )
 AM_CONDITIONAL([CPU_X86_64], [test "$CPU" = "x86_64"])
 AM_CONDITIONAL([CPU_X86_32], [test "$CPU" = "x86_32"])
+AM_CONDITIONAL([CPU_AARCH64], [test "$CPU" = "aarch64"])
+AM_CONDITIONAL([CPU_PPC64LE], [test "$CPU" = "ppc64le"])
 AM_CONDITIONAL([CPU_UNDEFINED], [test "x$CPU" = "x"])
 
+if test "$CPU" = "x86_64"; then
+   is_x86=yes
+else
+   if test "$CPU" = "x86_32"; then
+      is_x86=yes
+   else
+      is_x86=no
+   fi
+fi
+
 # Check for programs
 AC_PROG_CC_STDC
 AC_USE_SYSTEM_EXTENSIONS
@@ -50,90 +66,189 @@ AS_IF([test "x$enable_debug" = "xyes"], [
         AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
 ])
 
-# Check for yasm and yasm features
-AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
-if test "$HAVE_YASM" = "no"; then
-  AC_MSG_RESULT([no yasm])
-else
-  AC_MSG_CHECKING([for modern yasm])
-  AC_LANG_CONFTEST([AC_LANG_SOURCE([[vmovdqa %xmm0, %xmm1;]])])
-  if yasm -f elf64 -p gas conftest.c ; then
-    with_modern_yasm=yes
-    AC_MSG_RESULT([yes])
-    AC_MSG_CHECKING([for optional yasm AVX512 support])
-    AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpshufb %zmm0, %zmm1, %zmm2;]])])
-    if yasm -f elf64 -p gas conftest.c 2> /dev/null; then
-      yasm_knows_avx512=yes
-      AC_MSG_RESULT([yes])
+# If this build is for x86, look for yasm and nasm
+if test x"$is_x86" = x"yes"; then
+  # Pick an assembler yasm or nasm
+  if test x"$AS" = x""; then
+    # Check for yasm and yasm features
+    yasm_feature_level=0
+    AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
+    if test "$HAVE_YASM" = "yes"; then
+       yasm_feature_level=1
     else
-      AC_MSG_RESULT([no])
+       AC_MSG_RESULT([no yasm])
+    fi
+    if test x"$yasm_feature_level" = x"1"; then
+       AC_MSG_CHECKING([for modern yasm])
+       AC_LANG_CONFTEST([AC_LANG_SOURCE([[vmovdqa %xmm0, %xmm1;]])])
+       if yasm -f elf64 -p gas conftest.c ; then
+         AC_MSG_RESULT([yes])
+         yasm_feature_level=4
+       else
+         AC_MSG_RESULT([no])
+       fi
+    fi
+    if test x"$yasm_feature_level" = x"4"; then
+       AC_MSG_CHECKING([for optional yasm AVX512 support])
+       AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpshufb %zmm0, %zmm1, %zmm2;]])])
+       if yasm -f elf64 -p gas conftest.c 2> /dev/null; then
+         AC_MSG_RESULT([yes])
+         yasm_feature_level=6
+       else
+         AC_MSG_RESULT([no])
+       fi
+    fi
+    if test x"$yasm_feature_level" = x"6"; then
+      AC_MSG_CHECKING([for additional yasm AVX512 support])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpcompressb zmm0, k1, zmm1;]])])
+      sed -i -e '/vpcompressb/!d' conftest.c
+      if yasm -f elf64  conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        yasm_feature_level=10
+      else
+        AC_MSG_RESULT([no])
+      fi
     fi
-  else
-    AC_MSG_FAILURE([no])
-  fi
-fi
 
-# Check for nasm and nasm features
-AC_CHECK_PROG(HAVE_NASM, nasm, yes, no)
-if test "$HAVE_NASM" = "no"; then
-  AC_MSG_RESULT([no nasm])
-else
-  AC_MSG_CHECKING([for modern nasm])
-  AC_LANG_CONFTEST([AC_LANG_SOURCE([[pblendvb xmm2, xmm1;]])])
-  sed -i -e '/pblendvb/!d' conftest.c
-  if nasm -f elf64 conftest.c 2> /dev/null; then
-    with_modern_nasm=yes
-    AC_MSG_RESULT([yes])
-    AC_MSG_CHECKING([for optional nasm AVX512 support])
-    AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpshufb zmm0, zmm1, zmm2;]])])
-    sed -i -e '/vpshufb/!d' conftest.c
-    if nasm -f elf64  conftest.c 2> /dev/null; then
-      nasm_knows_avx512=yes
-      AC_MSG_RESULT([yes])
+    # Check for nasm and nasm features
+    nasm_feature_level=0
+    AC_CHECK_PROG(HAVE_NASM, nasm, yes, no)
+    if test "$HAVE_NASM" = "yes"; then
+       nasm_feature_level=1
+    else
+       AC_MSG_RESULT([no nasm])
+    fi
+
+    if test x"$nasm_feature_level" = x"1"; then
+      AC_MSG_CHECKING([for modern nasm])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[pblendvb xmm2, xmm1;]])])
+      sed -i -e '/pblendvb/!d' conftest.c
+      if nasm -f elf64 conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        nasm_feature_level=4
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
+    if test x"$nasm_feature_level" = x"4"; then
+      AC_MSG_CHECKING([for optional nasm AVX512 support])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[vinserti32x8 zmm0, ymm1, 1;]])])
+      sed -i -e '/vinsert/!d' conftest.c
+      if nasm -f elf64  conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        nasm_feature_level=6
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
+    if test x"$nasm_feature_level" = x"6"; then
+      AC_MSG_CHECKING([for additional nasm AVX512 support])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpcompressb zmm0 {k1}, zmm1;]])])
+      sed -i -e '/vpcompressb/!d' conftest.c
+      if nasm -f elf64  conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        nasm_feature_level=10
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
+
+    if test $nasm_feature_level -ge $yasm_feature_level ; then
+      AS=nasm
+      as_feature_level=$nasm_feature_level
     else
-      AC_MSG_RESULT([no])
+      AS=yasm
+      as_feature_level=$yasm_feature_level
     fi
+
   else
-    AC_MSG_RESULT([no])
+    # Check for $AS supported features
+    as_feature_level=0
+    AC_CHECK_PROG(HAVE_AS, $AS, yes, no)
+    if test "$HAVE_AS" = "yes"; then
+       as_feature_level=1
+    else
+       AC_MSG_ERROR([no $AS])
+    fi
+
+    if test x"$as_feature_level" = x"1"; then
+      AC_MSG_CHECKING([for modern $AS])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[pblendvb xmm2, xmm1;]])])
+      sed -i -e '/pblendvb/!d' conftest.c
+      if $AS -f elf64 conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        as_feature_level=4
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
+    if test x"$as_feature_level" = x"4"; then
+      AC_MSG_CHECKING([for optional as AVX512 support])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[vinserti32x8 zmm0, ymm1, 1;]])])
+      sed -i -e '/vinsert/!d' conftest.c
+      if $AS -f elf64  conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        as_feature_level=6
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
+    if test x"$as_feature_level" = x"6"; then
+      AC_MSG_CHECKING([for additional as AVX512 support])
+      AC_LANG_CONFTEST([AC_LANG_SOURCE([[vpcompressb zmm0, k1, zmm1;]])])
+      sed -i -e '/vpcompressb/!d' conftest.c
+      if $AS -f elf64  conftest.c 2> /dev/null; then
+        AC_MSG_RESULT([yes])
+        as_feature_level=10
+      else
+        AC_MSG_RESULT([no])
+      fi
+    fi
   fi
-fi
 
-# Pick an assembler yasm or nasm
-if test x"$AS" = x""; then
-  if test x"$yasm_knows_avx512" = x"yes"; then
-    AS=yasm
-  elif test x"$nasm_knows_avx512" = x"yes"; then
-    AS=nasm
-  elif test x"$with_modern_yasm" = x"yes"; then
+  if test $as_feature_level -lt 2 ; then
+    AC_MSG_ERROR([No modern nasm or yasm found as required. Nasm should be v2.11.01 or later (v2.13 for AVX512) and yasm should be 1.2.0 or later.])
+  fi
+
+  case $host_os in
+       *linux*)  arch=linux   yasm_args="-f elf64";;
+       *darwin*) arch=darwin  yasm_args="-f macho64 --prefix=_ ";;
+       *netbsd*) arch=netbsd  yasm_args="-f elf64";;
+       *mingw*)  arch=mingw   yasm_args="-f win64";;
+       *)        arch=unknown yasm_args="-f elf64";;
+  esac
+
+  # Fix for nasm missing windows features
+  if test x"$arch" = x"mingw"; then
     AS=yasm
-  elif test x"$with_modern_nasm" = x"yes"; then
-    AS=nasm
+    as_feature_level=$yasm_feature_level
+    if test $as_feature_level -lt 2 ; then
+      AC_MSG_ERROR([Mingw build requires Yasm 1.2.0 or later.])
+    fi
+  fi
+
+  AC_DEFINE_UNQUOTED(AS_FEATURE_LEVEL, [$as_feature_level], [Assembler feature level.])
+  if test $as_feature_level -ge 6 ; then
+    AC_DEFINE(HAVE_AS_KNOWS_AVX512, [1], [Assembler can do AVX512.])
+    have_as_knows_avx512=yes
   else
-    AC_MSG_ERROR([No modern yasm or nasm found as required. Yasm should be 1.2.0 or later, and nasm should be v2.11.01 or later.])
+    AC_MSG_RESULT([Assembler does not understand AVX512 opcodes.  Consider upgrading for best performance.])
   fi
-fi
-echo "Using assembler $AS"
 
-if test \( x"$AS" = x"yasm" -a x"$yasm_knows_avx512" = x"yes" \) -o \( x"$AS" = x"nasm" -a x"$nasm_knows_avx512" = x"yes" \); then
-  AC_DEFINE(HAVE_AS_KNOWS_AVX512, [1], [Assembler can do AVX512.])
-  have_as_knows_avx512=yes
+  AM_CONDITIONAL(USE_YASM, test x"$AS" = x"yasm")
+  AM_CONDITIONAL(USE_NASM, test x"$AS" = x"nasm")
+  AM_CONDITIONAL(WITH_AVX512, test x"$have_as_knows_avx512" = x"yes")
+  AC_SUBST([yasm_args])
+  AM_CONDITIONAL(DARWIN, test x"$arch" = x"darwin")
+  AC_MSG_RESULT([Using $AS args target "$arch" "$yasm_args"])
 else
-  AC_MSG_RESULT([Assembler does not understand AVX512 opcodes.  Consider upgrading for best performance.])
+  # Disable below conditionals if not x86
+  AM_CONDITIONAL(USE_YASM, test "x" = "y")
+  AM_CONDITIONAL(USE_NASM, test "x" = "y")
+  AM_CONDITIONAL(WITH_AVX512, test "x" = "y")
+  AM_CONDITIONAL(DARWIN, test "x" = "y")
 fi
-AM_CONDITIONAL(USE_YASM, test x"$AS" = x"yasm")
-AM_CONDITIONAL(USE_NASM, test x"$AS" = x"nasm")
-AM_CONDITIONAL(WITH_AVX512, test x"$have_as_knows_avx512" = x"yes")
-
 
-case $host_os in
-     *linux*)  arch=linux   yasm_args="-f elf64";;
-     *darwin*) arch=darwin  yasm_args="-f macho64 --prefix=_ ";;
-     *netbsd*) arch=netbsd  yasm_args="-f elf64";;
-     *)                arch=unknown yasm_args="-f elf64";;
-esac
-AC_SUBST([yasm_args])
-AM_CONDITIONAL(DARWIN, test x"$arch" = x"darwin")
-AC_MSG_RESULT([Using yasm args target "$arch" "$yasm_args"])
 
 # Check for header files
 AC_CHECK_HEADERS([limits.h stdint.h stdlib.h string.h])
@@ -148,7 +263,7 @@ AC_TYPE_UINT8_T
 
 # Checks for library functions.
 AC_FUNC_MALLOC  # Used only in tests
-AC_CHECK_FUNCS([memmove memset])
+AC_CHECK_FUNCS([memmove memset getopt])
 
 my_CFLAGS="\
 -Wall \
index 74b964743b5244156c52ed2794d381d9353ca628..64bef8527c23a3013c8a366160eeb405c62ba897 100644 (file)
 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ########################################################################
 
+include crc/aarch64/Makefile.am
+
 lsrc  += \
        crc/crc_base.c \
        crc/crc64_base.c
 
 lsrc_base_aliases += crc/crc_base_aliases.c
 lsrc_x86_32       += crc/crc_base_aliases.c
+lsrc_ppc64le      += crc/crc_base_aliases.c
 
 lsrc_x86_64 += \
        crc/crc16_t10dif_01.asm \
        crc/crc16_t10dif_by4.asm \
+       crc/crc16_t10dif_02.asm \
+       crc/crc16_t10dif_by16_10.asm \
+       crc/crc16_t10dif_copy_by4.asm \
+       crc/crc16_t10dif_copy_by4_02.asm \
        crc/crc32_ieee_01.asm \
+       crc/crc32_ieee_02.asm \
        crc/crc32_ieee_by4.asm \
+       crc/crc32_ieee_by16_10.asm \
        crc/crc32_iscsi_01.asm \
        crc/crc32_iscsi_00.asm \
        crc/crc_multibinary.asm \
        crc/crc64_multibinary.asm \
        crc/crc64_ecma_refl_by8.asm \
+       crc/crc64_ecma_refl_by16_10.asm \
        crc/crc64_ecma_norm_by8.asm \
+       crc/crc64_ecma_norm_by16_10.asm \
        crc/crc64_iso_refl_by8.asm \
+       crc/crc64_iso_refl_by16_10.asm \
        crc/crc64_iso_norm_by8.asm \
+       crc/crc64_iso_norm_by16_10.asm \
        crc/crc64_jones_refl_by8.asm \
-       crc/crc64_jones_norm_by8.asm
+       crc/crc64_jones_refl_by16_10.asm \
+       crc/crc64_jones_norm_by8.asm \
+       crc/crc64_jones_norm_by16_10.asm \
+       crc/crc32_gzip_refl_by8.asm \
+       crc/crc32_gzip_refl_by8_02.asm \
+       crc/crc32_gzip_refl_by16_10.asm
 
 src_include += -I $(srcdir)/crc
 extern_hdrs +=  include/crc.h include/crc64.h
 
-other_src   +=  include/reg_sizes.asm include/types.h include/test.h
+other_src   +=  include/reg_sizes.asm include/types.h include/test.h \
+               crc/crc_ref.h crc/crc64_ref.h
 
-check_tests +=  crc/crc16_t10dif_test crc/crc32_ieee_test crc/crc32_iscsi_test \
-               crc/crc64_funcs_test
+check_tests +=  crc/crc16_t10dif_test \
+               crc/crc16_t10dif_copy_test \
+               crc/crc64_funcs_test \
+               crc/crc32_funcs_test
 
-perf_tests  +=  crc/crc16_t10dif_perf crc/crc32_ieee_perf crc/crc32_iscsi_perf \
-               crc/crc64_funcs_perf
+perf_tests  +=  crc/crc16_t10dif_perf crc/crc16_t10dif_copy_perf \
+               crc/crc16_t10dif_op_perf \
+               crc/crc32_ieee_perf crc/crc32_iscsi_perf \
+               crc/crc64_funcs_perf crc/crc32_gzip_refl_perf
 
 examples    +=  crc/crc_simple_test crc/crc64_example
+
diff --git a/ceph/src/isa-l/crc/aarch64/Makefile.am b/ceph/src/isa-l/crc/aarch64/Makefile.am
new file mode 100644 (file)
index 0000000..57061f0
--- /dev/null
@@ -0,0 +1,47 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+lsrc_aarch64 += \
+       crc/aarch64/crc_multibinary_arm.S       \
+       crc/aarch64/crc_aarch64_dispatcher.c
+
+lsrc_aarch64 += \
+       crc/aarch64/crc16_t10dif_pmull.S \
+       crc/aarch64/crc16_t10dif_copy_pmull.S \
+       crc/aarch64/crc32_iscsi_refl_pmull.S \
+       crc/aarch64/crc32_iscsi_refl_hw_fold.S \
+       crc/aarch64/crc32_ieee_norm_pmull.S \
+       crc/aarch64/crc32_gzip_refl_pmull.S \
+       crc/aarch64/crc32_gzip_refl_hw_fold.S \
+       crc/aarch64/crc64_ecma_refl_pmull.S \
+       crc/aarch64/crc64_ecma_norm_pmull.S \
+       crc/aarch64/crc64_iso_refl_pmull.S \
+       crc/aarch64/crc64_iso_norm_pmull.S \
+       crc/aarch64/crc64_jones_refl_pmull.S \
+       crc/aarch64/crc64_jones_norm_pmull.S
diff --git a/ceph/src/isa-l/crc/aarch64/crc16_t10dif_copy_pmull.S b/ceph/src/isa-l/crc/aarch64/crc16_t10dif_copy_pmull.S
new file mode 100644 (file)
index 0000000..10bf157
--- /dev/null
@@ -0,0 +1,423 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+       .arch armv8-a+crc+crypto
+       .text
+       .align  3
+       .global crc16_t10dif_copy_pmull
+       .type   crc16_t10dif_copy_pmull, %function
+
+/* uint16_t crc16_t10dif_pmull(uint16_t seed, uint8_t *buf, uint64_t len) */
+
+/* arguments */
+w_seed         .req    w0
+x_dst          .req    x1
+x_src          .req    x2
+x_len          .req    x3
+w_len          .req    w3
+
+/* returns */
+w_ret          .req    w0
+
+/* these as global temporary registers */
+w_tmp                  .req    w6
+x_tmp                  .req    x6
+x_tmp1                 .req    x7
+x_tmp2                 .req    x11
+
+d_tmp1                 .req    d0
+d_tmp2                 .req    d1
+q_tmp1                 .req    q0
+q_tmp2                 .req    q1
+v_tmp1                 .req    v0
+v_tmp2                 .req    v1
+
+/* local variables */
+w_counter              .req    w4
+w_crc                  .req    w0
+x_crc                  .req    x0
+x_counter              .req    x4
+x_crc16tab             .req    x5
+x_src_saved            .req    x0
+x_dst_saved            .req    x12
+
+crc16_t10dif_copy_pmull:
+       cmp     x_len, 1023
+       sub     sp, sp, #16
+       uxth    w_seed, w_seed
+       bhi     .crc_fold
+
+       mov     x_tmp, 0
+       mov     w_counter, 0
+
+.crc_table_loop_pre:
+       cmp     x_len, x_tmp
+       bls     .end
+
+       sxtw    x_counter, w_counter
+       adrp    x_crc16tab, .LANCHOR0
+       sub     x_src, x_src, x_counter
+       sub     x_dst, x_dst, x_counter
+       add     x_crc16tab, x_crc16tab, :lo12:.LANCHOR0
+
+       .align 2
+.crc_table_loop:
+       ldrb    w_tmp, [x_src, x_counter]
+       strb    w_tmp, [x_dst, x_counter]
+       add     x_counter, x_counter, 1
+       cmp     x_len, x_counter
+       eor     w_tmp, w_tmp, w_crc, lsr 8
+       ldrh    w_tmp, [x_crc16tab, w_tmp, sxtw 1]
+       eor     w_crc, w_tmp, w_crc, lsl 8
+       uxth    w_crc, w_crc
+       bhi     .crc_table_loop
+
+.end:
+       add     sp, sp, 16
+       ret
+
+/* carry less multiplication, part1 - before loop */
+q_x0                   .req    q2
+q_x1                   .req    q3
+q_x2                   .req    q4
+q_x3                   .req    q5
+
+v_x0                   .req    v2
+v_x1                   .req    v3
+v_x2                   .req    v4
+v_x3                   .req    v5
+
+d_x0                   .req    d2
+d_x1                   .req    d3
+d_x2                   .req    d4
+d_x3                   .req    d5
+
+// the following registers only used this part1
+d_tmp3                 .req    d16
+v_tmp3                 .req    v16
+
+       .align 3
+.crc_fold:
+       fmov    d_tmp1, x_crc
+       fmov    d_tmp2, xzr
+       dup     d_tmp3, v_tmp2.d[0]
+       shl     d_tmp1, d_tmp1, 48
+       ins     v_tmp3.d[1], v_tmp1.d[0]
+
+       and     x_counter, x_len, -64
+       sub     x_counter, x_counter, #64
+       cmp     x_counter, 63
+       add     x_src_saved, x_src, 64
+       add     x_dst_saved, x_dst, 64
+
+       ldr     q_x0, [x_src]
+       ldr     q_x1, [x_src, 16]
+       ldr     q_x2, [x_src, 32]
+       ldr     q_x3, [x_src, 48]
+
+       str     q_x0, [x_dst]
+       str     q_x1, [x_dst, 16]
+       str     q_x2, [x_dst, 32]
+       str     q_x3, [x_dst, 48]
+
+       adrp    x_tmp, .shuffle_mask_lanchor
+       ldr     q7, [x_tmp, :lo12:.shuffle_mask_lanchor]
+
+       tbl     v_tmp1.16b, {v_x0.16b}, v7.16b
+       eor     v_x0.16b, v_tmp3.16b, v_tmp1.16b
+
+       tbl     v_x1.16b, {v_x1.16b}, v7.16b
+       tbl     v_x2.16b, {v_x2.16b}, v7.16b
+       tbl     v_x3.16b, {v_x3.16b}, v7.16b
+       bls     .crc_fold_loop_end
+
+/* carry less multiplication, part2 - loop */
+q_y0                   .req    q28
+q_y1                   .req    q29
+q_y2                   .req    q30
+q_y3                   .req    q31
+
+v_y0                   .req    v28
+v_y1                   .req    v29
+v_y2                   .req    v30
+v_y3                   .req    v31
+
+d_x0_h                 .req    d24
+d_x0_l                 .req    d2
+d_x1_h                 .req    d25
+d_x1_l                 .req    d3
+d_x2_h                 .req    d26
+d_x2_l                 .req    d4
+d_x3_h                 .req    d27
+d_x3_l                 .req    d5
+
+v_x0_h                 .req    v24
+v_x0_l                 .req    v2
+v_x1_h                 .req    v25
+v_x1_l                 .req    v3
+v_x2_h                 .req    v26
+v_x2_l                 .req    v4
+v_x3_h                 .req    v27
+v_x3_l                 .req    v5
+
+v_tmp1_x0              .req    v24
+v_tmp1_x1              .req    v25
+v_tmp1_x2              .req    v26
+v_tmp1_x3              .req    v27
+
+d_p4_h                 .req    d19
+v_p4_h                 .req    v19
+d_p4_l                 .req    d17
+v_p4_l                 .req    v17
+
+       mov     x_tmp, 0x371d0000               /* p4 [1] */
+       fmov    d_p4_h, x_tmp
+       mov     x_tmp, 0x87e70000               /* p4 [0] */
+       fmov    d_p4_l, x_tmp
+
+       .align 2
+.crc_fold_loop:
+       add     x_src_saved, x_src_saved, 64
+       add     x_dst_saved, x_dst_saved, 64
+
+       sub     x_counter, x_counter, #64
+       cmp     x_counter, 63
+
+       dup     d_x0_h, v_x0.d[1]
+       dup     d_x1_h, v_x1.d[1]
+       dup     d_x2_h, v_x2.d[1]
+       dup     d_x3_h, v_x3.d[1]
+
+       dup     d_x0_l, v_x0.d[0]
+       dup     d_x1_l, v_x1.d[0]
+       dup     d_x2_l, v_x2.d[0]
+       dup     d_x3_l, v_x3.d[0]
+
+       ldr     q_y0, [x_src_saved, -64]
+       ldr     q_y1, [x_src_saved, -48]
+       ldr     q_y2, [x_src_saved, -32]
+       ldr     q_y3, [x_src_saved, -16]
+
+       str     q_y0, [x_dst_saved, -64]
+       str     q_y1, [x_dst_saved, -48]
+       str     q_y2, [x_dst_saved, -32]
+       str     q_y3, [x_dst_saved, -16]
+
+       pmull   v_x0_h.1q, v_x0_h.1d, v_p4_h.1d
+       pmull   v_x0_l.1q, v_x0_l.1d, v_p4_l.1d
+       pmull   v_x1_h.1q, v_x1_h.1d, v_p4_h.1d
+       pmull   v_x1_l.1q, v_x1_l.1d, v_p4_l.1d
+       pmull   v_x2_h.1q, v_x2_h.1d, v_p4_h.1d
+       pmull   v_x2_l.1q, v_x2_l.1d, v_p4_l.1d
+       pmull   v_x3_h.1q, v_x3_h.1d, v_p4_h.1d
+       pmull   v_x3_l.1q, v_x3_l.1d, v_p4_l.1d
+
+       tbl     v_y0.16b, {v_y0.16b}, v7.16b
+       tbl     v_y1.16b, {v_y1.16b}, v7.16b
+       tbl     v_y2.16b, {v_y2.16b}, v7.16b
+       tbl     v_y3.16b, {v_y3.16b}, v7.16b
+
+       eor     v_tmp1_x0.16b, v_x0_h.16b, v_x0_l.16b
+       eor     v_tmp1_x1.16b, v_x1_h.16b, v_x1_l.16b
+       eor     v_tmp1_x2.16b, v_x2_h.16b, v_x2_l.16b
+       eor     v_tmp1_x3.16b, v_x3_h.16b, v_x3_l.16b
+
+       eor     v_x0.16b, v_tmp1_x0.16b, v_y0.16b
+       eor     v_x1.16b, v_tmp1_x1.16b, v_y1.16b
+       eor     v_x2.16b, v_tmp1_x2.16b, v_y2.16b
+       eor     v_x3.16b, v_tmp1_x3.16b, v_y3.16b
+
+       bhi     .crc_fold_loop
+
+/* carry less multiplication, part3 - after loop */
+/* folding 512bit ---> 128bit */
+
+// input parameters:
+// v_x0 => v2
+// v_x1 => v3
+// v_x2 => v4
+// v_x3 => v5
+
+// v0, v1, v6, v30, are tmp registers
+
+.crc_fold_loop_end:
+       mov     x_tmp, 0x4c1a0000       /* p1 [1] */
+       fmov    d0, x_tmp
+       mov     x_tmp, 0xfb0b0000       /* p1 [0] */
+       fmov    d1, x_tmp
+
+       and     w_counter, w_len, -64
+       sxtw    x_tmp, w_counter
+
+       add     x_src, x_src, x_tmp
+       add     x_dst, x_dst, x_tmp
+
+       dup     d6, v_x0.d[1]
+       dup     d30, v_x0.d[0]
+       pmull   v6.1q, v6.1d, v0.1d
+       pmull   v30.1q, v30.1d, v1.1d
+       eor     v6.16b, v6.16b, v30.16b
+       eor     v_x1.16b, v6.16b, v_x1.16b
+
+       dup     d6, v_x1.d[1]
+       dup     d30, v_x1.d[0]
+       pmull   v6.1q, v6.1d, v0.1d
+       pmull   v16.1q, v30.1d, v1.1d
+       eor     v6.16b, v6.16b, v16.16b
+       eor     v_x2.16b, v6.16b, v_x2.16b
+
+       dup     d_x0, v_x2.d[1]
+       dup     d30, v_x2.d[0]
+       pmull   v0.1q, v_x0.1d, v0.1d
+       pmull   v_x0.1q, v30.1d, v1.1d
+       eor     v1.16b, v0.16b, v_x0.16b
+       eor     v_x0.16b, v1.16b, v_x3.16b
+
+/* carry less multiplication, part3 - after loop */
+/* crc16 fold function */
+d_16fold_p0_h          .req    d18
+v_16fold_p0_h          .req    v18
+
+d_16fold_p0_l          .req    d4
+v_16fold_p0_l          .req    v4
+
+v_16fold_from          .req    v_x0
+d_16fold_from_h                .req    d3
+v_16fold_from_h                .req    v3
+
+v_16fold_zero          .req    v7
+
+v_16fold_from1         .req    v16
+
+v_16fold_from2         .req    v0
+d_16fold_from2_h       .req    d6
+v_16fold_from2_h       .req    v6
+
+v_16fold_tmp           .req    v0
+
+       movi    v_16fold_zero.4s, 0
+       mov     x_tmp1, 0x2d560000              /* p0 [1] */
+       mov     x_tmp2, 0x13680000              /* p0 [0] */
+
+       ext     v_16fold_tmp.16b, v_16fold_zero.16b, v_16fold_from.16b, #8
+       ext     v_16fold_tmp.16b, v0.16b, v_16fold_zero.16b, #4
+
+       dup     d_16fold_from_h, v_16fold_from.d[1]
+       fmov    d_16fold_p0_h, x_tmp1
+       pmull   v_16fold_from1.1q, v_16fold_from_h.1d, v_16fold_p0_h.1d
+       eor     v_16fold_from2.16b, v_16fold_tmp.16b, v_16fold_from1.16b
+
+       dup     d_16fold_from2_h, v_16fold_from2.d[1]
+       fmov    d_16fold_p0_l, x_tmp2
+       pmull   v6.1q, v_16fold_from2_h.1d, v_16fold_p0_l.1d
+       eor     v_x0.16b, v0.16b, v6.16b
+
+/* carry less multiplication, part3 - after loop */
+/* crc16 barrett reduction function */
+
+// input parameters:
+// v_x0:                       v2
+// barrett reduction constant: br[0], br[1]
+
+d_br0  .req    d3
+v_br0  .req    v3
+d_br1  .req    d5
+v_br1  .req    v5
+
+       mov     x_tmp1, 0x57f9                  /* br[0] low */
+       movk    x_tmp1, 0xf65a, lsl 16          /* br[0] high */
+       movk    x_tmp1, 0x1, lsl 32
+       fmov    d_br0, x_tmp1
+
+       dup     d1, v_x0.d[0]
+       dup     d1, v1.d[0]
+       ext     v1.16b, v1.16b, v7.16b, #4
+       pmull   v4.1q, v1.1d, v_br0.1d
+
+       ext     v1.16b, v4.16b, v7.16b, #4
+       mov     x_tmp1, 0x8bb70000              /* br[1] low */
+       movk    x_tmp1, 0x1, lsl 32             /* br[1] high */
+
+       fmov    d_br1, x_tmp1
+       pmull   v_br1.1q, v1.1d, v_br1.1d
+       eor     v_x0.16b, v_x0.16b, v_br1.16b
+
+       umov    x0, v_x0.d[0]
+       ubfx    x0, x0, 16, 16
+       b       .crc_table_loop_pre
+
+       .size   crc16_t10dif_copy_pmull, .-crc16_t10dif_copy_pmull
+
+       .section        .rodata
+
+       .align  4
+.shuffle_mask_lanchor = . + 0
+       .type   shuffle_mask, %object
+       .size   shuffle_mask, 16
+shuffle_mask:
+       .byte   15, 14, 13, 12, 11, 10, 9, 8
+       .byte   7,   6,  5,  4,  3,  2, 1, 0
+
+       .align  4
+.LANCHOR0 = . + 0
+       .type   crc16tab, %object
+       .size   crc16tab, 512
+crc16tab:
+       .hword  0x0000, 0x8bb7, 0x9cd9, 0x176e, 0xb205, 0x39b2, 0x2edc, 0xa56b
+       .hword  0xEFBD, 0x640a, 0x7364, 0xf8d3, 0x5db8, 0xd60f, 0xc161, 0x4ad6
+       .hword  0x54CD, 0xdf7a, 0xc814, 0x43a3, 0xe6c8, 0x6d7f, 0x7a11, 0xf1a6
+       .hword  0xBB70, 0x30c7, 0x27a9, 0xac1e, 0x0975, 0x82c2, 0x95ac, 0x1e1b
+       .hword  0xA99A, 0x222d, 0x3543, 0xbef4, 0x1b9f, 0x9028, 0x8746, 0x0cf1
+       .hword  0x4627, 0xcd90, 0xdafe, 0x5149, 0xf422, 0x7f95, 0x68fb, 0xe34c
+       .hword  0xFD57, 0x76e0, 0x618e, 0xea39, 0x4f52, 0xc4e5, 0xd38b, 0x583c
+       .hword  0x12EA, 0x995d, 0x8e33, 0x0584, 0xa0ef, 0x2b58, 0x3c36, 0xb781
+       .hword  0xD883, 0x5334, 0x445a, 0xcfed, 0x6a86, 0xe131, 0xf65f, 0x7de8
+       .hword  0x373E, 0xbc89, 0xabe7, 0x2050, 0x853b, 0x0e8c, 0x19e2, 0x9255
+       .hword  0x8C4E, 0x07f9, 0x1097, 0x9b20, 0x3e4b, 0xb5fc, 0xa292, 0x2925
+       .hword  0x63F3, 0xe844, 0xff2a, 0x749d, 0xd1f6, 0x5a41, 0x4d2f, 0xc698
+       .hword  0x7119, 0xfaae, 0xedc0, 0x6677, 0xc31c, 0x48ab, 0x5fc5, 0xd472
+       .hword  0x9EA4, 0x1513, 0x027d, 0x89ca, 0x2ca1, 0xa716, 0xb078, 0x3bcf
+       .hword  0x25D4, 0xae63, 0xb90d, 0x32ba, 0x97d1, 0x1c66, 0x0b08, 0x80bf
+       .hword  0xCA69, 0x41de, 0x56b0, 0xdd07, 0x786c, 0xf3db, 0xe4b5, 0x6f02
+       .hword  0x3AB1, 0xb106, 0xa668, 0x2ddf, 0x88b4, 0x0303, 0x146d, 0x9fda
+       .hword  0xD50C, 0x5ebb, 0x49d5, 0xc262, 0x6709, 0xecbe, 0xfbd0, 0x7067
+       .hword  0x6E7C, 0xe5cb, 0xf2a5, 0x7912, 0xdc79, 0x57ce, 0x40a0, 0xcb17
+       .hword  0x81C1, 0x0a76, 0x1d18, 0x96af, 0x33c4, 0xb873, 0xaf1d, 0x24aa
+       .hword  0x932B, 0x189c, 0x0ff2, 0x8445, 0x212e, 0xaa99, 0xbdf7, 0x3640
+       .hword  0x7C96, 0xf721, 0xe04f, 0x6bf8, 0xce93, 0x4524, 0x524a, 0xd9fd
+       .hword  0xC7E6, 0x4c51, 0x5b3f, 0xd088, 0x75e3, 0xfe54, 0xe93a, 0x628d
+       .hword  0x285B, 0xa3ec, 0xb482, 0x3f35, 0x9a5e, 0x11e9, 0x0687, 0x8d30
+       .hword  0xE232, 0x6985, 0x7eeb, 0xf55c, 0x5037, 0xdb80, 0xccee, 0x4759
+       .hword  0x0D8F, 0x8638, 0x9156, 0x1ae1, 0xbf8a, 0x343d, 0x2353, 0xa8e4
+       .hword  0xB6FF, 0x3d48, 0x2a26, 0xa191, 0x04fa, 0x8f4d, 0x9823, 0x1394
+       .hword  0x5942, 0xd2f5, 0xc59b, 0x4e2c, 0xeb47, 0x60f0, 0x779e, 0xfc29
+       .hword  0x4BA8, 0xc01f, 0xd771, 0x5cc6, 0xf9ad, 0x721a, 0x6574, 0xeec3
+       .hword  0xA415, 0x2fa2, 0x38cc, 0xb37b, 0x1610, 0x9da7, 0x8ac9, 0x017e
+       .hword  0x1F65, 0x94d2, 0x83bc, 0x080b, 0xad60, 0x26d7, 0x31b9, 0xba0e
+       .hword  0xF0D8, 0x7b6f, 0x6c01, 0xe7b6, 0x42dd, 0xc96a, 0xde04, 0x55b3
diff --git a/ceph/src/isa-l/crc/aarch64/crc16_t10dif_pmull.S b/ceph/src/isa-l/crc/aarch64/crc16_t10dif_pmull.S
new file mode 100644 (file)
index 0000000..08f1a35
--- /dev/null
@@ -0,0 +1,404 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+       .arch armv8-a+crc+crypto
+       .text
+       .align  3
+       .global crc16_t10dif_pmull
+       .type   crc16_t10dif_pmull, %function
+
+/* uint16_t crc16_t10dif_pmull(uint16_t seed, uint8_t *buf, uint64_t len) */
+
+/* arguments */
+w_seed                 .req    w0
+x_buf                  .req    x1
+x_len                  .req    x2
+w_len                  .req    w2
+
+/* returns */
+w_ret                  .req    w0
+
+/* these as global temporary registers */
+w_tmp                  .req    w5
+x_tmp                  .req    x5
+x_tmp1                 .req    x6
+x_tmp2                 .req    x7
+
+d_tmp1                 .req    d0
+d_tmp2                 .req    d1
+q_tmp1                 .req    q0
+q_tmp2                 .req    q1
+v_tmp1                 .req    v0
+v_tmp2                 .req    v1
+
+/* local variables */
+w_counter              .req    w3
+w_crc                  .req    w0
+x_crc                  .req    x0
+x_counter              .req    x3
+x_crc16tab             .req    x4
+x_buf_saved            .req    x0
+
+crc16_t10dif_pmull:
+       cmp     x_len, 1023
+       sub     sp, sp, #16
+       uxth    w_seed, w_seed
+       bhi     .crc_fold
+
+       mov     x_tmp, 0
+       mov     w_counter, 0
+
+.crc_table_loop_pre:
+       cmp     x_len, x_tmp
+       bls     .end
+
+       sxtw    x_counter, w_counter
+       adrp    x_crc16tab, .LANCHOR0
+       sub     x_buf, x_buf, x_counter
+       add     x_crc16tab, x_crc16tab, :lo12:.LANCHOR0
+
+       .align 2
+.crc_table_loop:
+       ldrb    w_tmp, [x_buf, x_counter]
+       add     x_counter, x_counter, 1
+       cmp     x_len, x_counter
+       eor     w_tmp, w_tmp, w_crc, lsr 8
+       ldrh    w_tmp, [x_crc16tab, w_tmp, sxtw 1]
+       eor     w_crc, w_tmp, w_crc, lsl 8
+       uxth    w_crc, w_crc
+       bhi     .crc_table_loop
+
+.end:
+       add     sp, sp, 16
+       ret
+
+/* carry less multiplication, part1 - before loop */
+q_x0                   .req    q2
+q_x1                   .req    q3
+q_x2                   .req    q4
+q_x3                   .req    q5
+
+v_x0                   .req    v2
+v_x1                   .req    v3
+v_x2                   .req    v4
+v_x3                   .req    v5
+
+d_x0                   .req    d2
+d_x1                   .req    d3
+d_x2                   .req    d4
+d_x3                   .req    d5
+
+// the following registers only used this part1
+d_tmp3                 .req    d16
+v_tmp3                 .req    v16
+
+       .align 3
+.crc_fold:
+       fmov    d_tmp1, x_crc
+       fmov    d_tmp2, xzr
+       dup     d_tmp3, v_tmp2.d[0]
+       shl     d_tmp1, d_tmp1, 48
+       ins     v_tmp3.d[1], v_tmp1.d[0]
+
+       and     x_counter, x_len, -64
+       sub     x_counter, x_counter, #64
+       cmp     x_counter, 63
+       add     x_buf_saved, x_buf, 64
+
+       ldr     q_x0, [x_buf]
+       ldr     q_x1, [x_buf, 16]
+       ldr     q_x2, [x_buf, 32]
+       ldr     q_x3, [x_buf, 48]
+
+       adrp    x_tmp, .shuffle_mask_lanchor
+       ldr     q7, [x_tmp, :lo12:.shuffle_mask_lanchor]
+
+       tbl     v_tmp1.16b, {v_x0.16b}, v7.16b
+       eor     v_x0.16b, v_tmp3.16b, v_tmp1.16b
+
+       tbl     v_x1.16b, {v_x1.16b}, v7.16b
+       tbl     v_x2.16b, {v_x2.16b}, v7.16b
+       tbl     v_x3.16b, {v_x3.16b}, v7.16b
+       bls     .crc_fold_loop_end
+
+/* carry less multiplication, part2 - loop */
+q_y0                   .req    q28
+q_y1                   .req    q29
+q_y2                   .req    q30
+q_y3                   .req    q31
+
+v_y0                   .req    v28
+v_y1                   .req    v29
+v_y2                   .req    v30
+v_y3                   .req    v31
+
+d_x0_h                 .req    d24
+d_x0_l                 .req    d2
+d_x1_h                 .req    d25
+d_x1_l                 .req    d3
+d_x2_h                 .req    d26
+d_x2_l                 .req    d4
+d_x3_h                 .req    d27
+d_x3_l                 .req    d5
+
+v_x0_h                 .req    v24
+v_x0_l                 .req    v2
+v_x1_h                 .req    v25
+v_x1_l                 .req    v3
+v_x2_h                 .req    v26
+v_x2_l                 .req    v4
+v_x3_h                 .req    v27
+v_x3_l                 .req    v5
+
+v_tmp1_x0              .req    v24
+v_tmp1_x1              .req    v25
+v_tmp1_x2              .req    v26
+v_tmp1_x3              .req    v27
+
+d_p4_h                 .req    d19
+v_p4_h                 .req    v19
+d_p4_l                 .req    d17
+v_p4_l                 .req    v17
+
+       mov     x_tmp, 0x371d0000               /* p4 [1] */
+       fmov    d_p4_h, x_tmp
+       mov     x_tmp, 0x87e70000               /* p4 [0] */
+       fmov    d_p4_l, x_tmp
+
+       .align 2
+.crc_fold_loop:
+       add     x_buf_saved, x_buf_saved, 64
+       sub     x_counter, x_counter, #64
+       cmp     x_counter, 63
+
+       dup     d_x0_h, v_x0.d[1]
+       dup     d_x1_h, v_x1.d[1]
+       dup     d_x2_h, v_x2.d[1]
+       dup     d_x3_h, v_x3.d[1]
+
+       dup     d_x0_l, v_x0.d[0]
+       dup     d_x1_l, v_x1.d[0]
+       dup     d_x2_l, v_x2.d[0]
+       dup     d_x3_l, v_x3.d[0]
+
+       ldr     q_y0, [x_buf_saved, -64]
+       ldr     q_y1, [x_buf_saved, -48]
+       ldr     q_y2, [x_buf_saved, -32]
+       ldr     q_y3, [x_buf_saved, -16]
+
+       pmull   v_x0_h.1q, v_x0_h.1d, v_p4_h.1d
+       pmull   v_x0_l.1q, v_x0_l.1d, v_p4_l.1d
+       pmull   v_x1_h.1q, v_x1_h.1d, v_p4_h.1d
+       pmull   v_x1_l.1q, v_x1_l.1d, v_p4_l.1d
+       pmull   v_x2_h.1q, v_x2_h.1d, v_p4_h.1d
+       pmull   v_x2_l.1q, v_x2_l.1d, v_p4_l.1d
+       pmull   v_x3_h.1q, v_x3_h.1d, v_p4_h.1d
+       pmull   v_x3_l.1q, v_x3_l.1d, v_p4_l.1d
+
+       tbl     v_y0.16b, {v_y0.16b}, v7.16b
+       tbl     v_y1.16b, {v_y1.16b}, v7.16b
+       tbl     v_y2.16b, {v_y2.16b}, v7.16b
+       tbl     v_y3.16b, {v_y3.16b}, v7.16b
+
+       eor     v_tmp1_x0.16b, v_x0_h.16b, v_x0_l.16b
+       eor     v_tmp1_x1.16b, v_x1_h.16b, v_x1_l.16b
+       eor     v_tmp1_x2.16b, v_x2_h.16b, v_x2_l.16b
+       eor     v_tmp1_x3.16b, v_x3_h.16b, v_x3_l.16b
+
+       eor     v_x0.16b, v_tmp1_x0.16b, v_y0.16b
+       eor     v_x1.16b, v_tmp1_x1.16b, v_y1.16b
+       eor     v_x2.16b, v_tmp1_x2.16b, v_y2.16b
+       eor     v_x3.16b, v_tmp1_x3.16b, v_y3.16b
+
+       bhi     .crc_fold_loop
+
+/* carry less multiplication, part3 - after loop */
+/* folding 512bit ---> 128bit */
+
+// input parameters:
+// v_x0 => v2
+// v_x1 => v3
+// v_x2 => v4
+// v_x3 => v5
+
+// v0, v1, v6, v30, are tmp registers
+
+.crc_fold_loop_end:
+       mov     x_tmp, 0x4c1a0000       /* p1 [1] */
+       fmov    d0, x_tmp
+       mov     x_tmp, 0xfb0b0000       /* p1 [0] */
+       fmov    d1, x_tmp
+
+       and     w_counter, w_len, -64
+       sxtw    x_tmp, w_counter
+       add     x_buf, x_buf, x_tmp
+
+       dup     d6, v_x0.d[1]
+       dup     d30, v_x0.d[0]
+       pmull   v6.1q, v6.1d, v0.1d
+       pmull   v30.1q, v30.1d, v1.1d
+       eor     v6.16b, v6.16b, v30.16b
+       eor     v_x1.16b, v6.16b, v_x1.16b
+
+       dup     d6, v_x1.d[1]
+       dup     d30, v_x1.d[0]
+       pmull   v6.1q, v6.1d, v0.1d
+       pmull   v16.1q, v30.1d, v1.1d
+       eor     v6.16b, v6.16b, v16.16b
+       eor     v_x2.16b, v6.16b, v_x2.16b
+
+       dup     d_x0, v_x2.d[1]
+       dup     d30, v_x2.d[0]
+       pmull   v0.1q, v_x0.1d, v0.1d
+       pmull   v_x0.1q, v30.1d, v1.1d
+       eor     v1.16b, v0.16b, v_x0.16b
+       eor     v_x0.16b, v1.16b, v_x3.16b
+
+/* carry less multiplication, part3 - after loop */
+/* crc16 fold function */
+d_16fold_p0_h          .req    d18
+v_16fold_p0_h          .req    v18
+
+d_16fold_p0_l          .req    d4
+v_16fold_p0_l          .req    v4
+
+v_16fold_from          .req    v_x0
+d_16fold_from_h                .req    d3
+v_16fold_from_h                .req    v3
+
+v_16fold_zero          .req    v7
+
+v_16fold_from1         .req    v16
+
+v_16fold_from2         .req    v0
+d_16fold_from2_h       .req    d6
+v_16fold_from2_h       .req    v6
+
+v_16fold_tmp           .req    v0
+
+       movi    v_16fold_zero.4s, 0
+       mov     x_tmp1, 0x2d560000              /* p0 [1] */
+       mov     x_tmp2, 0x13680000              /* p0 [0] */
+
+       ext     v_16fold_tmp.16b, v_16fold_zero.16b, v_16fold_from.16b, #8
+       ext     v_16fold_tmp.16b, v0.16b, v_16fold_zero.16b, #4
+
+       dup     d_16fold_from_h, v_16fold_from.d[1]
+       fmov    d_16fold_p0_h, x_tmp1
+       pmull   v_16fold_from1.1q, v_16fold_from_h.1d, v_16fold_p0_h.1d
+       eor     v_16fold_from2.16b, v_16fold_tmp.16b, v_16fold_from1.16b
+
+       dup     d_16fold_from2_h, v_16fold_from2.d[1]
+       fmov    d_16fold_p0_l, x_tmp2
+       pmull   v6.1q, v_16fold_from2_h.1d, v_16fold_p0_l.1d
+       eor     v_x0.16b, v0.16b, v6.16b
+
+/* carry less multiplication, part3 - after loop */
+/* crc16 barrett reduction function */
+
+// input parameters:
+// v_x0:                       v2
+// barrett reduction constant: br[0], br[1]
+
+d_br0                  .req    d3
+v_br0                  .req    v3
+d_br1                  .req    d5
+v_br1                  .req    v5
+
+       mov     x_tmp1, 0x57f9                  /* br[0] low */
+       movk    x_tmp1, 0xf65a, lsl 16          /* br[0] high */
+       movk    x_tmp1, 0x1, lsl 32
+       fmov    d_br0, x_tmp1
+
+       dup     d1, v_x0.d[0]
+       dup     d1, v1.d[0]
+       ext     v1.16b, v1.16b, v7.16b, #4
+       pmull   v4.1q, v1.1d, v_br0.1d
+
+       ext     v1.16b, v4.16b, v7.16b, #4
+       mov     x_tmp1, 0x8bb70000              /* br[1] low */
+       movk    x_tmp1, 0x1, lsl 32             /* br[1] high */
+
+       fmov    d_br1, x_tmp1
+       pmull   v_br1.1q, v1.1d, v_br1.1d
+       eor     v_x0.16b, v_x0.16b, v_br1.16b
+
+       umov    x0, v_x0.d[0]
+       ubfx    x0, x0, 16, 16
+       b       .crc_table_loop_pre
+
+       .size   crc16_t10dif_pmull, .-crc16_t10dif_pmull
+
+       .section        .rodata
+
+       .align  4
+.shuffle_mask_lanchor = . + 0
+       .type   shuffle_mask, %object
+       .size   shuffle_mask, 16
+shuffle_mask:
+       .byte   15, 14, 13, 12, 11, 10, 9, 8
+       .byte   7,   6,  5,  4,  3,  2, 1, 0
+
+       .align  4
+.LANCHOR0 = . + 0
+       .type   crc16tab, %object
+       .size   crc16tab, 512
+crc16tab:
+       .hword  0x0000, 0x8bb7, 0x9cd9, 0x176e, 0xb205, 0x39b2, 0x2edc, 0xa56b
+       .hword  0xEFBD, 0x640a, 0x7364, 0xf8d3, 0x5db8, 0xd60f, 0xc161, 0x4ad6
+       .hword  0x54CD, 0xdf7a, 0xc814, 0x43a3, 0xe6c8, 0x6d7f, 0x7a11, 0xf1a6
+       .hword  0xBB70, 0x30c7, 0x27a9, 0xac1e, 0x0975, 0x82c2, 0x95ac, 0x1e1b
+       .hword  0xA99A, 0x222d, 0x3543, 0xbef4, 0x1b9f, 0x9028, 0x8746, 0x0cf1
+       .hword  0x4627, 0xcd90, 0xdafe, 0x5149, 0xf422, 0x7f95, 0x68fb, 0xe34c
+       .hword  0xFD57, 0x76e0, 0x618e, 0xea39, 0x4f52, 0xc4e5, 0xd38b, 0x583c
+       .hword  0x12EA, 0x995d, 0x8e33, 0x0584, 0xa0ef, 0x2b58, 0x3c36, 0xb781
+       .hword  0xD883, 0x5334, 0x445a, 0xcfed, 0x6a86, 0xe131, 0xf65f, 0x7de8
+       .hword  0x373E, 0xbc89, 0xabe7, 0x2050, 0x853b, 0x0e8c, 0x19e2, 0x9255
+       .hword  0x8C4E, 0x07f9, 0x1097, 0x9b20, 0x3e4b, 0xb5fc, 0xa292, 0x2925
+       .hword  0x63F3, 0xe844, 0xff2a, 0x749d, 0xd1f6, 0x5a41, 0x4d2f, 0xc698
+       .hword  0x7119, 0xfaae, 0xedc0, 0x6677, 0xc31c, 0x48ab, 0x5fc5, 0xd472
+       .hword  0x9EA4, 0x1513, 0x027d, 0x89ca, 0x2ca1, 0xa716, 0xb078, 0x3bcf
+       .hword  0x25D4, 0xae63, 0xb90d, 0x32ba, 0x97d1, 0x1c66, 0x0b08, 0x80bf
+       .hword  0xCA69, 0x41de, 0x56b0, 0xdd07, 0x786c, 0xf3db, 0xe4b5, 0x6f02
+       .hword  0x3AB1, 0xb106, 0xa668, 0x2ddf, 0x88b4, 0x0303, 0x146d, 0x9fda
+       .hword  0xD50C, 0x5ebb, 0x49d5, 0xc262, 0x6709, 0xecbe, 0xfbd0, 0x7067
+       .hword  0x6E7C, 0xe5cb, 0xf2a5, 0x7912, 0xdc79, 0x57ce, 0x40a0, 0xcb17
+       .hword  0x81C1, 0x0a76, 0x1d18, 0x96af, 0x33c4, 0xb873, 0xaf1d, 0x24aa
+       .hword  0x932B, 0x189c, 0x0ff2, 0x8445, 0x212e, 0xaa99, 0xbdf7, 0x3640
+       .hword  0x7C96, 0xf721, 0xe04f, 0x6bf8, 0xce93, 0x4524, 0x524a, 0xd9fd
+       .hword  0xC7E6, 0x4c51, 0x5b3f, 0xd088, 0x75e3, 0xfe54, 0xe93a, 0x628d
+       .hword  0x285B, 0xa3ec, 0xb482, 0x3f35, 0x9a5e, 0x11e9, 0x0687, 0x8d30
+       .hword  0xE232, 0x6985, 0x7eeb, 0xf55c, 0x5037, 0xdb80, 0xccee, 0x4759
+       .hword  0x0D8F, 0x8638, 0x9156, 0x1ae1, 0xbf8a, 0x343d, 0x2353, 0xa8e4
+       .hword  0xB6FF, 0x3d48, 0x2a26, 0xa191, 0x04fa, 0x8f4d, 0x9823, 0x1394
+       .hword  0x5942, 0xd2f5, 0xc59b, 0x4e2c, 0xeb47, 0x60f0, 0x779e, 0xfc29
+       .hword  0x4BA8, 0xc01f, 0xd771, 0x5cc6, 0xf9ad, 0x721a, 0x6574, 0xeec3
+       .hword  0xA415, 0x2fa2, 0x38cc, 0xb37b, 0x1610, 0x9da7, 0x8ac9, 0x017e
+       .hword  0x1F65, 0x94d2, 0x83bc, 0x080b, 0xad60, 0x26d7, 0x31b9, 0xba0e
+       .hword  0xF0D8, 0x7b6f, 0x6c01, 0xe7b6, 0x42dd, 0xc96a, 0xde04, 0x55b3
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_hw_fold.S b/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_hw_fold.S
new file mode 100644 (file)
index 0000000..98cf129
--- /dev/null
@@ -0,0 +1,176 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+       .arch armv8-a+crc+crypto
+       .text
+       .align  3
+       .global crc32_gzip_refl_hw_fold
+       .type   crc32_gzip_refl_hw_fold, %function
+
+/* uint32_t crc32_gzip_refl_hw_fold(uint32_t seed, const unsigned char *buf, uint64_t len) */
+
+w_seed         .req    w0
+w_crc          .req    w0
+x_buf          .req    x1
+x_len          .req    x2
+
+x_buf_loop_end .req    x10
+x_buf_iter     .req    x10
+
+x_tmp          .req    x15
+w_tmp          .req    w15
+
+d_c0           .req    d3
+d_c1           .req    d1
+v_c0           .req    v3
+v_c1           .req    v1
+crc32_gzip_refl_hw_fold:
+       mvn     w_seed, w_seed
+       cmp     x_len, 1023
+       mov     x_buf_iter, x_buf
+       bls     .loop_fold_end
+
+       sub     x_buf_loop_end, x_len, #1024
+       and     x_buf_loop_end, x_buf_loop_end, -1024
+       add     x_buf_loop_end, x_buf_loop_end, 1024
+       add     x_buf_loop_end, x_buf, x_buf_loop_end
+
+       mov     x_tmp, 0x819b
+       movk    x_tmp, 0xb486, lsl 16
+       fmov    d_c0, x_tmp
+
+       mov     x_tmp, 0x8617
+       movk    x_tmp, 0x7627, lsl 16
+       fmov    d_c1, x_tmp
+
+x_in64         .req    x3
+w_crc0         .req    w0
+w_crc1         .req    w4
+w_crc2         .req    w5
+
+d_crc0         .req    d4
+d_crc1         .req    d5
+v_crc0         .req    v4
+v_crc1         .req    v5
+       .align 3
+.loop_fold:
+       add     x9, x_buf, 336
+       mov     x_in64, x_buf
+       mov     w_crc1, 0
+       mov     w_crc2, 0
+
+       .align 3
+.loop_for:
+       ldr     x8, [x_in64]
+       ldr     x7, [x_in64, 336]
+       ldr     x6, [x_in64, 672]
+
+       add     x_in64, x_in64, 8
+       cmp     x_in64, x9
+
+       crc32x  w_crc0, w_crc0, x8
+       crc32x  w_crc1, w_crc1, x7
+       crc32x  w_crc2, w_crc2, x6
+       bne     .loop_for
+
+       uxtw    x_tmp, w_crc0
+       fmov    d_crc0, x_tmp
+       pmull   v_crc0.1q, v_crc0.1d, v_c0.1d
+
+       uxtw    x_tmp, w_crc1
+       fmov    d_crc1, x_tmp
+       pmull   v_crc1.1q, v_crc1.1d, v_c1.1d
+
+       ldr     x_tmp, [x_buf, 1008]
+       crc32x  w_crc2, w_crc2, x_tmp
+
+       fmov    x_tmp, d_crc0
+       crc32x  w_crc0, wzr, x_tmp
+
+       fmov    x_tmp, d_crc1
+       crc32x  w_crc1, wzr, x_tmp
+
+       eor     w_crc0, w_crc0, w_crc1
+       eor     w_crc0, w_crc0, w_crc2
+
+       ldr     x_tmp, [x_buf, 1016]
+       crc32x  w_crc0, w_crc0, x_tmp
+
+       add     x_buf, x_buf, 1024
+       cmp     x_buf_loop_end, x_buf
+       bne     .loop_fold
+
+       and     x_len, x_len, 1023
+
+x_buf_loop_size8_end   .req    x3
+.loop_fold_end:
+       cmp     x_len, 7
+       bls     .size_4
+
+       sub     x_buf_loop_size8_end, x_len, #8
+       and     x_buf_loop_size8_end, x_buf_loop_size8_end, -8
+       add     x_buf_loop_size8_end, x_buf_loop_size8_end, 8
+       add     x_buf_loop_size8_end, x_buf_iter, x_buf_loop_size8_end
+
+       .align 3
+.loop_size_8:
+       ldr     x_tmp, [x_buf_iter], 8
+       crc32x  w_crc, w_crc, x_tmp
+
+       cmp     x_buf_iter, x_buf_loop_size8_end
+       bne     .loop_size_8
+
+       and     x_len, x_len, 7
+.size_4:
+       cmp     x_len, 3
+       bls     .size_2
+
+       ldr     w_tmp, [x_buf_iter], 4
+       crc32w  w_crc, w_crc, w_tmp
+
+       sub     x_len, x_len, #4
+.size_2:
+       cmp     x_len, 1
+       bls     .size_1
+
+       ldrh    w_tmp, [x_buf_iter], 2
+       crc32h  w_crc, w_crc, w_tmp
+
+       sub     x_len, x_len, #2
+.size_1:
+       cbz     x_len, .done
+
+       ldrb    w_tmp, [x_buf_iter]
+       crc32b  w_crc, w_crc, w_tmp
+
+.done:
+       mvn     w_crc, w_crc
+       ret
+
+       .size   crc32_gzip_refl_hw_fold, .-crc32_gzip_refl_hw_fold
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.S b/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.S
new file mode 100644 (file)
index 0000000..d52e2d8
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc32_gzip_refl_pmull.h"
+#include "crc32_refl_common_pmull.h"
+
+crc32_refl_func        crc32_gzip_refl_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.h b/ceph/src/isa-l/crc/aarch64/crc32_gzip_refl_pmull.h
new file mode 100644 (file)
index 0000000..883567d
--- /dev/null
@@ -0,0 +1,87 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0x2d95
+.equ   p4_low_b1, 0x8f35
+.equ   p4_high_b0, 0x13d7
+.equ   p4_high_b1, 0x1d95
+.equ   p1_low_b0, 0x9191
+.equ   p1_low_b1, 0xae68
+.equ   p1_high_b0, 0x009e
+.equ   p1_high_b1, 0xccaa
+.equ   p0_low_b0, 0x6765
+.equ   p0_low_b1, 0xb8bc
+.equ   p0_high_b0, p1_high_b0
+.equ   p0_high_b1, p1_high_b1
+.equ   br_low_b0, 0x0641
+.equ   br_low_b1, 0xdb71
+.equ   br_low_b2, 0x1
+.equ   br_high_b0, 0x1641
+.equ   br_high_b1, 0xf701
+.equ   br_high_b2, 0x1
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc32_table_gzip_refl, %object
+       .size   crc32_table_gzip_refl, 1024
+crc32_table_gzip_refl:
+       .word 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3
+       .word 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91
+       .word 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7
+       .word 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5
+       .word 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b
+       .word 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59
+       .word 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f
+       .word 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d
+       .word 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433
+       .word 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01
+       .word 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457
+       .word 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65
+       .word 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb
+       .word 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9
+       .word 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f
+       .word 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad
+       .word 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683
+       .word 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1
+       .word 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7
+       .word 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5
+       .word 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b
+       .word 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79
+       .word 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f
+       .word 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d
+       .word 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713
+       .word 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21
+       .word 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777
+       .word 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45
+       .word 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db
+       .word 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9
+       .word 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf
+       .word 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.S b/ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.S
new file mode 100644 (file)
index 0000000..32966fb
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc32_ieee_norm_pmull.h"
+#include "crc32_norm_common_pmull.h"
+
+crc32_norm_func crc32_ieee_norm_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.h b/ceph/src/isa-l/crc/aarch64/crc32_ieee_norm_pmull.h
new file mode 100644 (file)
index 0000000..67acd2a
--- /dev/null
@@ -0,0 +1,87 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0x8b11
+.equ   p4_low_b1, 0xe622
+.equ   p4_high_b0, 0x794c
+.equ   p4_high_b1, 0x8833
+.equ   p1_low_b0, 0x5605
+.equ   p1_low_b1, 0xe8a4
+.equ   p1_high_b0, 0xcd4c
+.equ   p1_high_b1, 0xc5b9
+.equ   p0_low_b0, 0x678d
+.equ   p0_low_b1, 0x490d
+.equ   p0_high_b0, 0xaa66
+.equ   p0_high_b1, 0xf200
+.equ   br_low_b0, 0x01df
+.equ   br_low_b1, 0x04d1
+.equ   br_low_b2, 0x1
+.equ   br_high_b0, 0x1db7
+.equ   br_high_b1, 0x04c1
+.equ   br_high_b2, 0x1
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc32_table_ieee_norm, %object
+       .size   crc32_table_ieee_norm, 1024
+crc32_table_ieee_norm:
+       .word 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005
+       .word 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd
+       .word 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75
+       .word 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd
+       .word 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5
+       .word 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d
+       .word 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95
+       .word 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d
+       .word 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072
+       .word 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca
+       .word 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02
+       .word 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba
+       .word 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692
+       .word 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a
+       .word 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2
+       .word 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a
+       .word 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb
+       .word 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53
+       .word 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b
+       .word 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623
+       .word 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b
+       .word 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3
+       .word 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b
+       .word 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3
+       .word 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c
+       .word 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24
+       .word 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec
+       .word 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654
+       .word 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c
+       .word 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4
+       .word 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c
+       .word 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_hw_fold.S b/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_hw_fold.S
new file mode 100644 (file)
index 0000000..85527c2
--- /dev/null
@@ -0,0 +1,172 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+       .arch armv8-a+crc+crypto
+       .text
+       .align  3
+       .global crc32_iscsi_refl_hw_fold
+       .type   crc32_iscsi_refl_hw_fold, %function
+
+/* unsigned int crc32_iscsi_refl_hw_fold(unsigned char *buffer, int len, unsigned int crc_init) */
+
+x_buffer       .req    x0
+w_len          .req    w1
+w_crc_init     .req    w2
+w_crc          .req    w2
+
+w_len_loop_end .req    w9
+x_buf_loop_end .req    x9
+x_buf_iter     .req    x9
+
+x_tmp          .req    x15
+w_tmp          .req    w15
+
+w_crc_ret      .req    w0
+crc32_iscsi_refl_hw_fold:
+       cmp     w_len, 1023
+       mov     x_buf_iter, x_buffer
+       ble     .loop_fold_end
+
+       sub     w10, w_len, #1024
+       lsr     w12, w10, 10
+       lsl     w_len_loop_end, w12, 10
+
+       add     x_buf_loop_end, x_buf_loop_end, 1024
+       add     x_buf_loop_end, x_buffer, x_buf_loop_end
+
+       mov     x_tmp, 0xf38a
+       movk    x_tmp, 0xe417, lsl 16
+       fmov    d3, x_tmp
+
+       mov     x_tmp, 0x8014
+       movk    x_tmp, 0x8f15, lsl 16
+       fmov    d1, x_tmp
+
+x_in64 .req    x1
+w_crc0 .req    w2
+w_crc1 .req    w3
+w_crc2 .req    w4
+       .align 3
+.loop_fold:
+       add     x8, x_buffer, 336
+       mov     x_in64, x_buffer
+       mov     w_crc1, 0
+       mov     w_crc2, 0
+
+       .align 3
+.loop_for:
+       ldr     x7, [x_in64]
+       ldr     x6, [x_in64, 336]
+       ldr     x5, [x_in64, 672]
+
+       add     x_in64, x_in64, 8
+       cmp     x_in64, x8
+
+       crc32cx w_crc0, w_crc0, x7
+       crc32cx w_crc1, w_crc1, x6
+       crc32cx w_crc2, w_crc2, x5
+       bne     .loop_for
+
+       uxtw    x_tmp, w_crc0
+       fmov    d4, x_tmp
+       pmull   v2.1q, v4.1d, v3.1d
+
+       uxtw    x_tmp, w_crc1
+       fmov    d5, x_tmp
+       pmull   v5.1q, v5.1d, v1.1d
+
+       fmov    x_tmp, d2
+       crc32cx w_crc0, wzr, x_tmp
+
+       fmov    x_tmp, d5
+       crc32cx w_crc1, wzr, x_tmp
+
+       ldr     x_tmp, [x_buffer, 1008]
+       crc32cx w_crc2, w_crc2, x_tmp
+
+       eor     w_crc1, w_crc1, w_crc0
+       eor     w_crc1, w_crc1, w_crc2
+
+       ldr     x_tmp, [x_buffer, 1016]
+       crc32cx w_crc0, w_crc1, x_tmp
+
+       add     x_buffer, x_buffer, 1024
+       cmp     x_buf_loop_end, x_buffer
+       bne     .loop_fold
+
+       sub     w_len, w10, w12, lsl 10
+
+x_buf_loop_size8_end   .req    x3
+.loop_fold_end:
+       cmp     w_len, 7
+       ble     .size_4
+
+       sub     w_len, w_len, #8
+       lsr     w4, w_len, 3
+       lsl     w3, w4, 3
+       add     x_buf_loop_size8_end, x_buf_loop_size8_end, 8
+       add     x_buf_loop_size8_end, x_buf_iter, x_buf_loop_size8_end
+
+       .align 3
+.loop_size_8:
+       ldr     x_tmp, [x_buf_iter], 8
+       crc32cx w_crc, w_crc, x_tmp
+
+       cmp     x_buf_iter, x_buf_loop_size8_end
+       bne     .loop_size_8
+
+       sub     w_len, w_len, w4, lsl 3
+.size_4:
+       cmp     w_len, 3
+       ble     .size_2
+
+       ldr     w_tmp, [x_buf_iter], 4
+       crc32cw w_crc, w_crc, w_tmp
+       sub     w_len, w_len, #4
+
+.size_2:
+       cmp     w_len, 1
+       ble     .size_1
+
+       ldrh    w_tmp, [x_buf_iter], 2
+       crc32ch w_crc, w_crc, w_tmp
+       sub     w_len, w_len, #2
+
+.size_1:
+       mov     w_crc_ret, w_crc
+       cmp     w_len, 1
+       bne     .done
+
+       ldrb    w_tmp, [x_buf_iter]
+       crc32cb w_crc_ret, w_crc, w_tmp
+
+.done:
+       ret
+
+       .size   crc32_iscsi_refl_hw_fold, .-crc32_iscsi_refl_hw_fold
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.S b/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.S
new file mode 100644 (file)
index 0000000..09a88e2
--- /dev/null
@@ -0,0 +1,53 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc32_iscsi_refl_pmull.h"
+#include "crc32_refl_common_pmull.h"
+
+crc32_refl_func crc32_iscsi_refl_pmull_internal
+
+       .arch armv8-a+crc+crypto
+       .text
+       .align 3
+       .global crc32_iscsi_refl_pmull
+       .type   crc32_iscsi_refl_pmull, %function
+crc32_iscsi_refl_pmull:
+       stp     x29, x30, [sp, -32]!
+       mov     x29, sp
+
+       mov     w7, w2
+       sxtw    x2, w1
+       mov     x1, x0
+       mov     w0, w7
+       mvn     w0, w0
+
+       bl      crc32_iscsi_refl_pmull_internal
+       mvn     w0, w0
+       ldp     x29, x30, [sp], 32
+       ret
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.h b/ceph/src/isa-l/crc/aarch64/crc32_iscsi_refl_pmull.h
new file mode 100644 (file)
index 0000000..c17b91b
--- /dev/null
@@ -0,0 +1,87 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0xef02
+.equ   p4_low_b1, 0x740e
+.equ   p4_high_b0, 0xddf8
+.equ   p4_high_b1, 0x9e4a
+.equ   p1_low_b0, 0x0dfe
+.equ   p1_low_b1, 0xf20c
+.equ   p1_high_b0, 0x7d27
+.equ   p1_high_b1, 0x493c
+.equ   p0_low_b0, 0xaab8
+.equ   p0_low_b1, 0xdd45
+.equ   p0_high_b0, p1_high_b0
+.equ   p0_high_b1, p1_high_b1
+.equ   br_low_b0, 0x76f1
+.equ   br_low_b1, 0x05ec
+.equ   br_low_b2, 0x1
+.equ   br_high_b0, 0x13f1
+.equ   br_high_b1, 0xdea7
+.equ   br_high_b2, 0x0
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc32_table_iscsi_refl, %object
+       .size   crc32_table_iscsi_refl, 1024
+crc32_table_iscsi_refl:
+       .word 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB
+       .word 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24
+       .word 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384
+       .word 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B
+       .word 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35
+       .word 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA
+       .word 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A
+       .word 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595
+       .word 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957
+       .word 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198
+       .word 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38
+       .word 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7
+       .word 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789
+       .word 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46
+       .word 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6
+       .word 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829
+       .word 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93
+       .word 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C
+       .word 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC
+       .word 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033
+       .word 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D
+       .word 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982
+       .word 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622
+       .word 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED
+       .word 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F
+       .word 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0
+       .word 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540
+       .word 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F
+       .word 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1
+       .word 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E
+       .word 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E
+       .word 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_norm_common_pmull.h b/ceph/src/isa-l/crc/aarch64/crc32_norm_common_pmull.h
new file mode 100644 (file)
index 0000000..7377e30
--- /dev/null
@@ -0,0 +1,135 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc_common_pmull.h"
+
+.macro crc32_norm_func name:req
+       .arch armv8-a+crypto
+       .text
+       .align  3
+       .global \name
+       .type   \name, %function
+
+/* uint32_t crc32_norm_func(uint32_t seed, uint8_t * buf, uint64_t len) */
+
+\name\():
+       mvn     w_seed, w_seed
+       mov     x_counter, 0
+       cmp     x_len, (FOLD_SIZE - 1)
+       bhi     .crc_clmul_pre
+
+.crc_tab_pre:
+       cmp     x_len, x_counter
+       bls     .done
+
+       adrp    x_tmp, .lanchor_crc_tab
+       add     x_buf_iter, x_buf, x_counter
+       add     x_buf, x_buf, x_len
+       add     x_crc_tab_addr, x_tmp, :lo12:.lanchor_crc_tab
+
+       .align 3
+.loop_crc_tab:
+       ldrb    w_tmp, [x_buf_iter], 1
+       cmp     x_buf, x_buf_iter
+       eor     w_tmp, w_tmp, w_seed, lsr 24
+       ldr     w_tmp, [x_crc_tab_addr, w_tmp, uxtw 2]
+       eor     w_seed, w_tmp, w_seed, lsl 8
+       bhi     .loop_crc_tab
+
+.done:
+       mvn     w_crc_ret, w_seed
+       ret
+
+       .align 2
+.crc_clmul_pre:
+       lsl     x_seed, x_seed, 32
+       movi    v_x0.2s, 0
+       fmov    v_x0.d[1], x_seed // save crc to v_x0
+
+       crc_norm_load_first_block
+
+       bls     .clmul_loop_end
+
+       crc32_load_p4
+
+// 1024bit --> 512bit loop
+// merge x0, x1, x2, x3, y0, y1, y2, y3 => x0, x1, x2, x3 (uint64x2_t)
+       crc_norm_loop
+
+.clmul_loop_end:
+// folding 512bit --> 128bit
+       crc32_fold_512b_to_128b
+
+// folding 128bit --> 64bit
+       mov     x_tmp, p0_high_b0
+       movk    x_tmp, p0_high_b1, lsl 16
+       fmov    d_p0_high, x_tmp
+
+       mov     x_tmp2, p0_low_b0
+       movk    x_tmp2, p0_low_b1, lsl 16
+       fmov    d_p0_high2, x_tmp2
+
+       mov     d_tmp_high, v_x3.d[0]
+       ext     v_tmp_high.16b, v_tmp_high.16b, v_tmp_high.16b, #12
+
+       pmull2  v_x3.1q, v_x3.2d, v_p0.2d
+
+       eor     v_tmp_high.16b, v_tmp_high.16b, v_x3.16b
+       pmull2  v_x3.1q, v_tmp_high.2d, v_p02.2d
+
+// barrett reduction
+       mov     x_tmp2, br_high_b0
+       movk    x_tmp2, br_high_b1, lsl 16
+       movk    x_tmp2, br_high_b2, lsl 32
+       fmov    d_br_high, x_tmp2
+
+       mov     x_tmp, br_low_b0
+       movk    x_tmp, br_low_b1, lsl 16
+       movk    x_tmp, br_low_b2, lsl 32
+       fmov    d_br_low, x_tmp
+
+       eor     v_tmp_high.16b, v_tmp_high.16b, v_x3.16b
+       mov     s_x3, v_tmp_high.s[1]
+       pmull   v_x3.1q, v_x3.1d, v_br_low.1d
+
+       mov s_x3, v_x3.s[1]
+       pmull   v_x3.1q, v_x3.1d, v_br_high.1d
+       eor     v_tmp_high.8b, v_tmp_high.8b, v_x3.8b
+       umov    w_seed, v_tmp_high.s[0]
+
+       b       .crc_tab_pre
+
+       .size   \name, .-\name
+
+       .section        .rodata.cst16,"aM",@progbits,16
+       .align  4
+.shuffle_data:
+       .byte   15, 14, 13, 12, 11, 10, 9
+       .byte   8, 7, 6, 5, 4, 3, 2, 1, 0
+.endm
diff --git a/ceph/src/isa-l/crc/aarch64/crc32_refl_common_pmull.h b/ceph/src/isa-l/crc/aarch64/crc32_refl_common_pmull.h
new file mode 100644 (file)
index 0000000..6418f12
--- /dev/null
@@ -0,0 +1,126 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc_common_pmull.h"
+
+.macro crc32_refl_func name:req
+       .arch armv8-a+crypto
+       .text
+       .align  3
+       .global \name
+       .type   \name, %function
+
+/* uint32_t crc32_refl_func(uint32_t seed, uint8_t * buf, uint64_t len) */
+
+\name\():
+       mvn     w_seed, w_seed
+       mov     x_counter, 0
+       cmp     x_len, (FOLD_SIZE - 1)
+       bhi     .crc32_clmul_pre
+
+.crc_tab_pre:
+       cmp     x_len, x_counter
+       bls     .done
+
+       adrp    x_tmp, .lanchor_crc_tab
+       add     x_buf_iter, x_buf, x_counter
+       add     x_buf, x_buf, x_len
+       add     x_crc_tab_addr, x_tmp, :lo12:.lanchor_crc_tab
+
+       .align 3
+.loop_crc_tab:
+       ldrb    w_tmp, [x_buf_iter], 1
+       cmp     x_buf, x_buf_iter
+       eor     w_tmp, w_tmp, w_seed
+       and     w_tmp, w_tmp, 255
+       ldr     w_tmp, [x_crc_tab_addr, w_tmp, uxtw 2]
+       eor     w_seed, w_tmp, w_seed, lsr 8
+       bhi     .loop_crc_tab
+
+.done:
+       mvn     w_crc_ret, w_seed
+       ret
+
+       .align 2
+.crc32_clmul_pre:
+       fmov    s_x0, w_seed // save crc to s_x0
+
+       crc_refl_load_first_block
+
+       bls     .clmul_loop_end
+
+       crc32_load_p4
+
+// 1024bit --> 512bit loop
+// merge x0, x1, x2, x3, y0, y1, y2, y3 => x0, x1, x2, x3 (uint64x2_t)
+       crc_refl_loop
+
+.clmul_loop_end:
+// folding 512bit --> 128bit
+       crc32_fold_512b_to_128b
+
+// folding 128bit --> 64bit
+       mov     x_tmp, p0_low_b0
+       movk    x_tmp, p0_low_b1, lsl 16
+       fmov    d_p0_low2, x_tmp
+
+       mov d_tmp_high, v_x3.d[1]
+
+       mov     d_p0_low, v_p1.d[1]
+       pmull   v_x3.1q, v_x3.1d, v_p0.1d
+
+       eor     v_tmp_high.16b, v_tmp_high.16b, v_x3.16b
+       mov s_x3, v_tmp_high.s[0]
+       ext     v_tmp_high.16b, v_tmp_high.16b, v_tmp_high.16b, #4
+       pmull   v_x3.1q, v_x3.1d, v_p02.1d
+
+// barrett reduction
+       mov     x_tmp2, br_high_b0
+       movk    x_tmp2, br_high_b1, lsl 16
+       movk    x_tmp2, br_high_b2, lsl 32
+       fmov    d_br_high, x_tmp2
+
+       mov     x_tmp, br_low_b0
+       movk    x_tmp, br_low_b1, lsl 16
+       movk    x_tmp, br_low_b2, lsl 32
+       fmov    d_br_low, x_tmp
+
+       eor     v_tmp_high.16b, v_tmp_high.16b, v_x3.16b
+       mov     s_x3, v_tmp_high.s[0]
+       pmull   v_x3.1q, v_x3.1d, v_br_high.1d
+
+       mov s_x3, v_x3.s[0]
+       pmull   v_x3.1q, v_x3.1d, v_br_low.1d
+       eor     v_tmp_high.8b, v_tmp_high.8b, v_x3.8b
+       umov    w_seed, v_tmp_high.s[1]
+
+       b       .crc_tab_pre
+
+       .size   \name, .-\name
+.endm
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.S
new file mode 100644 (file)
index 0000000..0089a09
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_ecma_norm_pmull.h"
+#include "crc64_norm_common_pmull.h"
+
+crc64_norm_func crc64_ecma_norm_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_ecma_norm_pmull.h
new file mode 100644 (file)
index 0000000..07d58cd
--- /dev/null
@@ -0,0 +1,200 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, (0xf020)
+.equ   p4_low_b1, 0x540d
+.equ   p4_low_b2, 0x43ca
+.equ   p4_low_b3, 0x5f68
+.equ   p4_high_b0, 0xb83f
+.equ   p4_high_b1, 0x1205
+.equ   p4_high_b2, 0xb698
+.equ   p4_high_b3, 0xddf4
+
+.equ   p1_low_b0, (0xfab6)
+.equ   p1_low_b1, 0xeb52
+.equ   p1_low_b2, 0xc3c7
+.equ   p1_low_b3, 0x05f5
+.equ   p1_high_b0, 0x740e
+.equ   p1_high_b1, 0xd257
+.equ   p1_high_b2, 0x38a7
+.equ   p1_high_b3, 0x4eb9
+
+.equ   p0_low_b0, (0xfab6)
+.equ   p0_low_b1, 0xeb52
+.equ   p0_low_b2, 0xc3c7
+.equ   p0_low_b3, 0x05f5
+.equ   p0_high_b0, 0x0
+.equ   p0_high_b1, 0x0
+.equ   p0_high_b2, 0x0
+.equ   p0_high_b3, 0x0
+
+.equ   br_low_b0, (0xf872)
+.equ   br_low_b1, 0x6cc4
+.equ   br_low_b2, 0x29d0
+.equ   br_low_b3, 0x578d
+.equ   br_high_b0, 0x3693
+.equ   br_high_b1, 0xa9ea
+.equ   br_high_b2, 0xe1eb
+.equ   br_high_b3, 0x42f0
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+crc64_tab:
+       .xword 0x0000000000000000, 0x42f0e1eba9ea3693
+       .xword 0x85e1c3d753d46d26, 0xc711223cfa3e5bb5
+       .xword 0x493366450e42ecdf, 0x0bc387aea7a8da4c
+       .xword 0xccd2a5925d9681f9, 0x8e224479f47cb76a
+       .xword 0x9266cc8a1c85d9be, 0xd0962d61b56fef2d
+       .xword 0x17870f5d4f51b498, 0x5577eeb6e6bb820b
+       .xword 0xdb55aacf12c73561, 0x99a54b24bb2d03f2
+       .xword 0x5eb4691841135847, 0x1c4488f3e8f96ed4
+       .xword 0x663d78ff90e185ef, 0x24cd9914390bb37c
+       .xword 0xe3dcbb28c335e8c9, 0xa12c5ac36adfde5a
+       .xword 0x2f0e1eba9ea36930, 0x6dfeff5137495fa3
+       .xword 0xaaefdd6dcd770416, 0xe81f3c86649d3285
+       .xword 0xf45bb4758c645c51, 0xb6ab559e258e6ac2
+       .xword 0x71ba77a2dfb03177, 0x334a9649765a07e4
+       .xword 0xbd68d2308226b08e, 0xff9833db2bcc861d
+       .xword 0x388911e7d1f2dda8, 0x7a79f00c7818eb3b
+       .xword 0xcc7af1ff21c30bde, 0x8e8a101488293d4d
+       .xword 0x499b3228721766f8, 0x0b6bd3c3dbfd506b
+       .xword 0x854997ba2f81e701, 0xc7b97651866bd192
+       .xword 0x00a8546d7c558a27, 0x4258b586d5bfbcb4
+       .xword 0x5e1c3d753d46d260, 0x1cecdc9e94ace4f3
+       .xword 0xdbfdfea26e92bf46, 0x990d1f49c77889d5
+       .xword 0x172f5b3033043ebf, 0x55dfbadb9aee082c
+       .xword 0x92ce98e760d05399, 0xd03e790cc93a650a
+       .xword 0xaa478900b1228e31, 0xe8b768eb18c8b8a2
+       .xword 0x2fa64ad7e2f6e317, 0x6d56ab3c4b1cd584
+       .xword 0xe374ef45bf6062ee, 0xa1840eae168a547d
+       .xword 0x66952c92ecb40fc8, 0x2465cd79455e395b
+       .xword 0x3821458aada7578f, 0x7ad1a461044d611c
+       .xword 0xbdc0865dfe733aa9, 0xff3067b657990c3a
+       .xword 0x711223cfa3e5bb50, 0x33e2c2240a0f8dc3
+       .xword 0xf4f3e018f031d676, 0xb60301f359dbe0e5
+       .xword 0xda050215ea6c212f, 0x98f5e3fe438617bc
+       .xword 0x5fe4c1c2b9b84c09, 0x1d14202910527a9a
+       .xword 0x93366450e42ecdf0, 0xd1c685bb4dc4fb63
+       .xword 0x16d7a787b7faa0d6, 0x5427466c1e109645
+       .xword 0x4863ce9ff6e9f891, 0x0a932f745f03ce02
+       .xword 0xcd820d48a53d95b7, 0x8f72eca30cd7a324
+       .xword 0x0150a8daf8ab144e, 0x43a04931514122dd
+       .xword 0x84b16b0dab7f7968, 0xc6418ae602954ffb
+       .xword 0xbc387aea7a8da4c0, 0xfec89b01d3679253
+       .xword 0x39d9b93d2959c9e6, 0x7b2958d680b3ff75
+       .xword 0xf50b1caf74cf481f, 0xb7fbfd44dd257e8c
+       .xword 0x70eadf78271b2539, 0x321a3e938ef113aa
+       .xword 0x2e5eb66066087d7e, 0x6cae578bcfe24bed
+       .xword 0xabbf75b735dc1058, 0xe94f945c9c3626cb
+       .xword 0x676dd025684a91a1, 0x259d31cec1a0a732
+       .xword 0xe28c13f23b9efc87, 0xa07cf2199274ca14
+       .xword 0x167ff3eacbaf2af1, 0x548f120162451c62
+       .xword 0x939e303d987b47d7, 0xd16ed1d631917144
+       .xword 0x5f4c95afc5edc62e, 0x1dbc74446c07f0bd
+       .xword 0xdaad56789639ab08, 0x985db7933fd39d9b
+       .xword 0x84193f60d72af34f, 0xc6e9de8b7ec0c5dc
+       .xword 0x01f8fcb784fe9e69, 0x43081d5c2d14a8fa
+       .xword 0xcd2a5925d9681f90, 0x8fdab8ce70822903
+       .xword 0x48cb9af28abc72b6, 0x0a3b7b1923564425
+       .xword 0x70428b155b4eaf1e, 0x32b26afef2a4998d
+       .xword 0xf5a348c2089ac238, 0xb753a929a170f4ab
+       .xword 0x3971ed50550c43c1, 0x7b810cbbfce67552
+       .xword 0xbc902e8706d82ee7, 0xfe60cf6caf321874
+       .xword 0xe224479f47cb76a0, 0xa0d4a674ee214033
+       .xword 0x67c58448141f1b86, 0x253565a3bdf52d15
+       .xword 0xab1721da49899a7f, 0xe9e7c031e063acec
+       .xword 0x2ef6e20d1a5df759, 0x6c0603e6b3b7c1ca
+       .xword 0xf6fae5c07d3274cd, 0xb40a042bd4d8425e
+       .xword 0x731b26172ee619eb, 0x31ebc7fc870c2f78
+       .xword 0xbfc9838573709812, 0xfd39626eda9aae81
+       .xword 0x3a28405220a4f534, 0x78d8a1b9894ec3a7
+       .xword 0x649c294a61b7ad73, 0x266cc8a1c85d9be0
+       .xword 0xe17dea9d3263c055, 0xa38d0b769b89f6c6
+       .xword 0x2daf4f0f6ff541ac, 0x6f5faee4c61f773f
+       .xword 0xa84e8cd83c212c8a, 0xeabe6d3395cb1a19
+       .xword 0x90c79d3fedd3f122, 0xd2377cd44439c7b1
+       .xword 0x15265ee8be079c04, 0x57d6bf0317edaa97
+       .xword 0xd9f4fb7ae3911dfd, 0x9b041a914a7b2b6e
+       .xword 0x5c1538adb04570db, 0x1ee5d94619af4648
+       .xword 0x02a151b5f156289c, 0x4051b05e58bc1e0f
+       .xword 0x87409262a28245ba, 0xc5b073890b687329
+       .xword 0x4b9237f0ff14c443, 0x0962d61b56fef2d0
+       .xword 0xce73f427acc0a965, 0x8c8315cc052a9ff6
+       .xword 0x3a80143f5cf17f13, 0x7870f5d4f51b4980
+       .xword 0xbf61d7e80f251235, 0xfd913603a6cf24a6
+       .xword 0x73b3727a52b393cc, 0x31439391fb59a55f
+       .xword 0xf652b1ad0167feea, 0xb4a25046a88dc879
+       .xword 0xa8e6d8b54074a6ad, 0xea16395ee99e903e
+       .xword 0x2d071b6213a0cb8b, 0x6ff7fa89ba4afd18
+       .xword 0xe1d5bef04e364a72, 0xa3255f1be7dc7ce1
+       .xword 0x64347d271de22754, 0x26c49cccb40811c7
+       .xword 0x5cbd6cc0cc10fafc, 0x1e4d8d2b65facc6f
+       .xword 0xd95caf179fc497da, 0x9bac4efc362ea149
+       .xword 0x158e0a85c2521623, 0x577eeb6e6bb820b0
+       .xword 0x906fc95291867b05, 0xd29f28b9386c4d96
+       .xword 0xcedba04ad0952342, 0x8c2b41a1797f15d1
+       .xword 0x4b3a639d83414e64, 0x09ca82762aab78f7
+       .xword 0x87e8c60fded7cf9d, 0xc51827e4773df90e
+       .xword 0x020905d88d03a2bb, 0x40f9e43324e99428
+       .xword 0x2cffe7d5975e55e2, 0x6e0f063e3eb46371
+       .xword 0xa91e2402c48a38c4, 0xebeec5e96d600e57
+       .xword 0x65cc8190991cb93d, 0x273c607b30f68fae
+       .xword 0xe02d4247cac8d41b, 0xa2dda3ac6322e288
+       .xword 0xbe992b5f8bdb8c5c, 0xfc69cab42231bacf
+       .xword 0x3b78e888d80fe17a, 0x7988096371e5d7e9
+       .xword 0xf7aa4d1a85996083, 0xb55aacf12c735610
+       .xword 0x724b8ecdd64d0da5, 0x30bb6f267fa73b36
+       .xword 0x4ac29f2a07bfd00d, 0x08327ec1ae55e69e
+       .xword 0xcf235cfd546bbd2b, 0x8dd3bd16fd818bb8
+       .xword 0x03f1f96f09fd3cd2, 0x41011884a0170a41
+       .xword 0x86103ab85a2951f4, 0xc4e0db53f3c36767
+       .xword 0xd8a453a01b3a09b3, 0x9a54b24bb2d03f20
+       .xword 0x5d45907748ee6495, 0x1fb5719ce1045206
+       .xword 0x919735e51578e56c, 0xd367d40ebc92d3ff
+       .xword 0x1476f63246ac884a, 0x568617d9ef46bed9
+       .xword 0xe085162ab69d5e3c, 0xa275f7c11f7768af
+       .xword 0x6564d5fde549331a, 0x279434164ca30589
+       .xword 0xa9b6706fb8dfb2e3, 0xeb46918411358470
+       .xword 0x2c57b3b8eb0bdfc5, 0x6ea7525342e1e956
+       .xword 0x72e3daa0aa188782, 0x30133b4b03f2b111
+       .xword 0xf7021977f9cceaa4, 0xb5f2f89c5026dc37
+       .xword 0x3bd0bce5a45a6b5d, 0x79205d0e0db05dce
+       .xword 0xbe317f32f78e067b, 0xfcc19ed95e6430e8
+       .xword 0x86b86ed5267cdbd3, 0xc4488f3e8f96ed40
+       .xword 0x0359ad0275a8b6f5, 0x41a94ce9dc428066
+       .xword 0xcf8b0890283e370c, 0x8d7be97b81d4019f
+       .xword 0x4a6acb477bea5a2a, 0x089a2aacd2006cb9
+       .xword 0x14dea25f3af9026d, 0x562e43b4931334fe
+       .xword 0x913f6188692d6f4b, 0xd3cf8063c0c759d8
+       .xword 0x5dedc41a34bbeeb2, 0x1f1d25f19d51d821
+       .xword 0xd80c07cd676f8394, 0x9afce626ce85b507
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.S
new file mode 100644 (file)
index 0000000..812517f
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_ecma_refl_pmull.h"
+#include "crc64_refl_common_pmull.h"
+
+crc64_refl_func crc64_ecma_refl_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_ecma_refl_pmull.h
new file mode 100644 (file)
index 0000000..5f53d79
--- /dev/null
@@ -0,0 +1,196 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0x41f3
+.equ   p4_low_b1, 0x9dd4
+.equ   p4_low_b2, 0xefbb
+.equ   p4_low_b3, 0x6ae3
+.equ   p4_high_b0, 0x2df4
+.equ   p4_high_b1, 0xa784
+.equ   p4_high_b2, 0x6054
+.equ   p4_high_b3, 0x081f
+
+.equ   p1_low_b0, 0x3ae4
+.equ   p1_low_b1, 0xca39
+.equ   p1_low_b2, 0xd497
+.equ   p1_low_b3, 0xe05d
+.equ   p1_high_b0, 0x5f40
+.equ   p1_high_b1, 0xc787
+.equ   p1_high_b2, 0x95af
+.equ   p1_high_b3, 0xdabe
+
+.equ   p0_low_b0, 0x5f40
+.equ   p0_low_b1, 0xc787
+.equ   p0_low_b2, 0x95af
+.equ   p0_low_b3, 0xdabe
+
+.equ   br_low_b0, 0x63d5
+.equ   br_low_b1, 0x1729
+.equ   br_low_b2, 0x466c
+.equ   br_low_b3, 0x9c3e
+.equ   br_high_b0, 0x1e85
+.equ   br_high_b1, 0xaf0e
+.equ   br_high_b2, 0xaf2b
+.equ   br_high_b3, 0x92d8
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+crc64_tab:
+       .xword 0x0000000000000000, 0xb32e4cbe03a75f6f
+       .xword 0xf4843657a840a05b, 0x47aa7ae9abe7ff34
+       .xword 0x7bd0c384ff8f5e33, 0xc8fe8f3afc28015c
+       .xword 0x8f54f5d357cffe68, 0x3c7ab96d5468a107
+       .xword 0xf7a18709ff1ebc66, 0x448fcbb7fcb9e309
+       .xword 0x0325b15e575e1c3d, 0xb00bfde054f94352
+       .xword 0x8c71448d0091e255, 0x3f5f08330336bd3a
+       .xword 0x78f572daa8d1420e, 0xcbdb3e64ab761d61
+       .xword 0x7d9ba13851336649, 0xceb5ed8652943926
+       .xword 0x891f976ff973c612, 0x3a31dbd1fad4997d
+       .xword 0x064b62bcaebc387a, 0xb5652e02ad1b6715
+       .xword 0xf2cf54eb06fc9821, 0x41e11855055bc74e
+       .xword 0x8a3a2631ae2dda2f, 0x39146a8fad8a8540
+       .xword 0x7ebe1066066d7a74, 0xcd905cd805ca251b
+       .xword 0xf1eae5b551a2841c, 0x42c4a90b5205db73
+       .xword 0x056ed3e2f9e22447, 0xb6409f5cfa457b28
+       .xword 0xfb374270a266cc92, 0x48190ecea1c193fd
+       .xword 0x0fb374270a266cc9, 0xbc9d3899098133a6
+       .xword 0x80e781f45de992a1, 0x33c9cd4a5e4ecdce
+       .xword 0x7463b7a3f5a932fa, 0xc74dfb1df60e6d95
+       .xword 0x0c96c5795d7870f4, 0xbfb889c75edf2f9b
+       .xword 0xf812f32ef538d0af, 0x4b3cbf90f69f8fc0
+       .xword 0x774606fda2f72ec7, 0xc4684a43a15071a8
+       .xword 0x83c230aa0ab78e9c, 0x30ec7c140910d1f3
+       .xword 0x86ace348f355aadb, 0x3582aff6f0f2f5b4
+       .xword 0x7228d51f5b150a80, 0xc10699a158b255ef
+       .xword 0xfd7c20cc0cdaf4e8, 0x4e526c720f7dab87
+       .xword 0x09f8169ba49a54b3, 0xbad65a25a73d0bdc
+       .xword 0x710d64410c4b16bd, 0xc22328ff0fec49d2
+       .xword 0x85895216a40bb6e6, 0x36a71ea8a7ace989
+       .xword 0x0adda7c5f3c4488e, 0xb9f3eb7bf06317e1
+       .xword 0xfe5991925b84e8d5, 0x4d77dd2c5823b7ba
+       .xword 0x64b62bcaebc387a1, 0xd7986774e864d8ce
+       .xword 0x90321d9d438327fa, 0x231c512340247895
+       .xword 0x1f66e84e144cd992, 0xac48a4f017eb86fd
+       .xword 0xebe2de19bc0c79c9, 0x58cc92a7bfab26a6
+       .xword 0x9317acc314dd3bc7, 0x2039e07d177a64a8
+       .xword 0x67939a94bc9d9b9c, 0xd4bdd62abf3ac4f3
+       .xword 0xe8c76f47eb5265f4, 0x5be923f9e8f53a9b
+       .xword 0x1c4359104312c5af, 0xaf6d15ae40b59ac0
+       .xword 0x192d8af2baf0e1e8, 0xaa03c64cb957be87
+       .xword 0xeda9bca512b041b3, 0x5e87f01b11171edc
+       .xword 0x62fd4976457fbfdb, 0xd1d305c846d8e0b4
+       .xword 0x96797f21ed3f1f80, 0x2557339fee9840ef
+       .xword 0xee8c0dfb45ee5d8e, 0x5da24145464902e1
+       .xword 0x1a083bacedaefdd5, 0xa9267712ee09a2ba
+       .xword 0x955cce7fba6103bd, 0x267282c1b9c65cd2
+       .xword 0x61d8f8281221a3e6, 0xd2f6b4961186fc89
+       .xword 0x9f8169ba49a54b33, 0x2caf25044a02145c
+       .xword 0x6b055fede1e5eb68, 0xd82b1353e242b407
+       .xword 0xe451aa3eb62a1500, 0x577fe680b58d4a6f
+       .xword 0x10d59c691e6ab55b, 0xa3fbd0d71dcdea34
+       .xword 0x6820eeb3b6bbf755, 0xdb0ea20db51ca83a
+       .xword 0x9ca4d8e41efb570e, 0x2f8a945a1d5c0861
+       .xword 0x13f02d374934a966, 0xa0de61894a93f609
+       .xword 0xe7741b60e174093d, 0x545a57dee2d35652
+       .xword 0xe21ac88218962d7a, 0x5134843c1b317215
+       .xword 0x169efed5b0d68d21, 0xa5b0b26bb371d24e
+       .xword 0x99ca0b06e7197349, 0x2ae447b8e4be2c26
+       .xword 0x6d4e3d514f59d312, 0xde6071ef4cfe8c7d
+       .xword 0x15bb4f8be788911c, 0xa6950335e42fce73
+       .xword 0xe13f79dc4fc83147, 0x521135624c6f6e28
+       .xword 0x6e6b8c0f1807cf2f, 0xdd45c0b11ba09040
+       .xword 0x9aefba58b0476f74, 0x29c1f6e6b3e0301b
+       .xword 0xc96c5795d7870f42, 0x7a421b2bd420502d
+       .xword 0x3de861c27fc7af19, 0x8ec62d7c7c60f076
+       .xword 0xb2bc941128085171, 0x0192d8af2baf0e1e
+       .xword 0x4638a2468048f12a, 0xf516eef883efae45
+       .xword 0x3ecdd09c2899b324, 0x8de39c222b3eec4b
+       .xword 0xca49e6cb80d9137f, 0x7967aa75837e4c10
+       .xword 0x451d1318d716ed17, 0xf6335fa6d4b1b278
+       .xword 0xb199254f7f564d4c, 0x02b769f17cf11223
+       .xword 0xb4f7f6ad86b4690b, 0x07d9ba1385133664
+       .xword 0x4073c0fa2ef4c950, 0xf35d8c442d53963f
+       .xword 0xcf273529793b3738, 0x7c0979977a9c6857
+       .xword 0x3ba3037ed17b9763, 0x888d4fc0d2dcc80c
+       .xword 0x435671a479aad56d, 0xf0783d1a7a0d8a02
+       .xword 0xb7d247f3d1ea7536, 0x04fc0b4dd24d2a59
+       .xword 0x3886b22086258b5e, 0x8ba8fe9e8582d431
+       .xword 0xcc0284772e652b05, 0x7f2cc8c92dc2746a
+       .xword 0x325b15e575e1c3d0, 0x8175595b76469cbf
+       .xword 0xc6df23b2dda1638b, 0x75f16f0cde063ce4
+       .xword 0x498bd6618a6e9de3, 0xfaa59adf89c9c28c
+       .xword 0xbd0fe036222e3db8, 0x0e21ac88218962d7
+       .xword 0xc5fa92ec8aff7fb6, 0x76d4de52895820d9
+       .xword 0x317ea4bb22bfdfed, 0x8250e80521188082
+       .xword 0xbe2a516875702185, 0x0d041dd676d77eea
+       .xword 0x4aae673fdd3081de, 0xf9802b81de97deb1
+       .xword 0x4fc0b4dd24d2a599, 0xfceef8632775faf6
+       .xword 0xbb44828a8c9205c2, 0x086ace348f355aad
+       .xword 0x34107759db5dfbaa, 0x873e3be7d8faa4c5
+       .xword 0xc094410e731d5bf1, 0x73ba0db070ba049e
+       .xword 0xb86133d4dbcc19ff, 0x0b4f7f6ad86b4690
+       .xword 0x4ce50583738cb9a4, 0xffcb493d702be6cb
+       .xword 0xc3b1f050244347cc, 0x709fbcee27e418a3
+       .xword 0x3735c6078c03e797, 0x841b8ab98fa4b8f8
+       .xword 0xadda7c5f3c4488e3, 0x1ef430e13fe3d78c
+       .xword 0x595e4a08940428b8, 0xea7006b697a377d7
+       .xword 0xd60abfdbc3cbd6d0, 0x6524f365c06c89bf
+       .xword 0x228e898c6b8b768b, 0x91a0c532682c29e4
+       .xword 0x5a7bfb56c35a3485, 0xe955b7e8c0fd6bea
+       .xword 0xaeffcd016b1a94de, 0x1dd181bf68bdcbb1
+       .xword 0x21ab38d23cd56ab6, 0x9285746c3f7235d9
+       .xword 0xd52f0e859495caed, 0x6601423b97329582
+       .xword 0xd041dd676d77eeaa, 0x636f91d96ed0b1c5
+       .xword 0x24c5eb30c5374ef1, 0x97eba78ec690119e
+       .xword 0xab911ee392f8b099, 0x18bf525d915feff6
+       .xword 0x5f1528b43ab810c2, 0xec3b640a391f4fad
+       .xword 0x27e05a6e926952cc, 0x94ce16d091ce0da3
+       .xword 0xd3646c393a29f297, 0x604a2087398eadf8
+       .xword 0x5c3099ea6de60cff, 0xef1ed5546e415390
+       .xword 0xa8b4afbdc5a6aca4, 0x1b9ae303c601f3cb
+       .xword 0x56ed3e2f9e224471, 0xe5c372919d851b1e
+       .xword 0xa26908783662e42a, 0x114744c635c5bb45
+       .xword 0x2d3dfdab61ad1a42, 0x9e13b115620a452d
+       .xword 0xd9b9cbfcc9edba19, 0x6a978742ca4ae576
+       .xword 0xa14cb926613cf817, 0x1262f598629ba778
+       .xword 0x55c88f71c97c584c, 0xe6e6c3cfcadb0723
+       .xword 0xda9c7aa29eb3a624, 0x69b2361c9d14f94b
+       .xword 0x2e184cf536f3067f, 0x9d36004b35545910
+       .xword 0x2b769f17cf112238, 0x9858d3a9ccb67d57
+       .xword 0xdff2a94067518263, 0x6cdce5fe64f6dd0c
+       .xword 0x50a65c93309e7c0b, 0xe388102d33392364
+       .xword 0xa4226ac498dedc50, 0x170c267a9b79833f
+       .xword 0xdcd7181e300f9e5e, 0x6ff954a033a8c131
+       .xword 0x28532e49984f3e05, 0x9b7d62f79be8616a
+       .xword 0xa707db9acf80c06d, 0x14299724cc279f02
+       .xword 0x5383edcd67c06036, 0xe0ada17364673f59
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.S
new file mode 100644 (file)
index 0000000..185b75b
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_iso_norm_pmull.h"
+#include "crc64_norm_common_pmull.h"
+
+crc64_norm_func crc64_iso_norm_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_iso_norm_pmull.h
new file mode 100644 (file)
index 0000000..cc17605
--- /dev/null
@@ -0,0 +1,201 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, (0x0101)
+.equ   p4_low_b1, 0x0100
+.equ   p4_low_b2, 0x0001
+.equ   p4_low_b3, 0x0000
+.equ   p4_high_b0, 0x1b1b
+.equ   p4_high_b1, 0x1b00
+.equ   p4_high_b2, 0x001b
+.equ   p4_high_b3, 0x0000
+
+.equ   p1_low_b0, (0x0145)
+.equ   p1_low_b1, 0x0000
+.equ   p1_low_b2, 0x0000
+.equ   p1_low_b3, 0x0000
+.equ   p1_high_b0, 0x1db7
+.equ   p1_high_b1, 0x0000
+.equ   p1_high_b2, 0x0000
+.equ   p1_high_b3, 0x0000
+
+.equ   p0_low_b0, (0x0145)
+.equ   p0_low_b1, 0x0000
+.equ   p0_low_b2, 0x0000
+.equ   p0_low_b3, 0x0000
+.equ   p0_high_b0, 0x0000
+.equ   p0_high_b1, 0x0000
+.equ   p0_high_b2, 0x0000
+.equ   p0_high_b3, 0x0000
+
+.equ   br_low_b0, (0x001b)
+.equ   br_low_b1, 0x0000
+.equ   br_low_b2, 0x0000
+.equ   br_low_b3, 0x0000
+.equ   br_high_b0, 0x001b
+.equ   br_high_b1, 0x0000
+.equ   br_high_b2, 0x0000
+.equ   br_high_b3, 0x0000
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+
+crc64_tab:
+       .xword 0x0000000000000000, 0x000000000000001b
+       .xword 0x0000000000000036, 0x000000000000002d
+       .xword 0x000000000000006c, 0x0000000000000077
+       .xword 0x000000000000005a, 0x0000000000000041
+       .xword 0x00000000000000d8, 0x00000000000000c3
+       .xword 0x00000000000000ee, 0x00000000000000f5
+       .xword 0x00000000000000b4, 0x00000000000000af
+       .xword 0x0000000000000082, 0x0000000000000099
+       .xword 0x00000000000001b0, 0x00000000000001ab
+       .xword 0x0000000000000186, 0x000000000000019d
+       .xword 0x00000000000001dc, 0x00000000000001c7
+       .xword 0x00000000000001ea, 0x00000000000001f1
+       .xword 0x0000000000000168, 0x0000000000000173
+       .xword 0x000000000000015e, 0x0000000000000145
+       .xword 0x0000000000000104, 0x000000000000011f
+       .xword 0x0000000000000132, 0x0000000000000129
+       .xword 0x0000000000000360, 0x000000000000037b
+       .xword 0x0000000000000356, 0x000000000000034d
+       .xword 0x000000000000030c, 0x0000000000000317
+       .xword 0x000000000000033a, 0x0000000000000321
+       .xword 0x00000000000003b8, 0x00000000000003a3
+       .xword 0x000000000000038e, 0x0000000000000395
+       .xword 0x00000000000003d4, 0x00000000000003cf
+       .xword 0x00000000000003e2, 0x00000000000003f9
+       .xword 0x00000000000002d0, 0x00000000000002cb
+       .xword 0x00000000000002e6, 0x00000000000002fd
+       .xword 0x00000000000002bc, 0x00000000000002a7
+       .xword 0x000000000000028a, 0x0000000000000291
+       .xword 0x0000000000000208, 0x0000000000000213
+       .xword 0x000000000000023e, 0x0000000000000225
+       .xword 0x0000000000000264, 0x000000000000027f
+       .xword 0x0000000000000252, 0x0000000000000249
+       .xword 0x00000000000006c0, 0x00000000000006db
+       .xword 0x00000000000006f6, 0x00000000000006ed
+       .xword 0x00000000000006ac, 0x00000000000006b7
+       .xword 0x000000000000069a, 0x0000000000000681
+       .xword 0x0000000000000618, 0x0000000000000603
+       .xword 0x000000000000062e, 0x0000000000000635
+       .xword 0x0000000000000674, 0x000000000000066f
+       .xword 0x0000000000000642, 0x0000000000000659
+       .xword 0x0000000000000770, 0x000000000000076b
+       .xword 0x0000000000000746, 0x000000000000075d
+       .xword 0x000000000000071c, 0x0000000000000707
+       .xword 0x000000000000072a, 0x0000000000000731
+       .xword 0x00000000000007a8, 0x00000000000007b3
+       .xword 0x000000000000079e, 0x0000000000000785
+       .xword 0x00000000000007c4, 0x00000000000007df
+       .xword 0x00000000000007f2, 0x00000000000007e9
+       .xword 0x00000000000005a0, 0x00000000000005bb
+       .xword 0x0000000000000596, 0x000000000000058d
+       .xword 0x00000000000005cc, 0x00000000000005d7
+       .xword 0x00000000000005fa, 0x00000000000005e1
+       .xword 0x0000000000000578, 0x0000000000000563
+       .xword 0x000000000000054e, 0x0000000000000555
+       .xword 0x0000000000000514, 0x000000000000050f
+       .xword 0x0000000000000522, 0x0000000000000539
+       .xword 0x0000000000000410, 0x000000000000040b
+       .xword 0x0000000000000426, 0x000000000000043d
+       .xword 0x000000000000047c, 0x0000000000000467
+       .xword 0x000000000000044a, 0x0000000000000451
+       .xword 0x00000000000004c8, 0x00000000000004d3
+       .xword 0x00000000000004fe, 0x00000000000004e5
+       .xword 0x00000000000004a4, 0x00000000000004bf
+       .xword 0x0000000000000492, 0x0000000000000489
+       .xword 0x0000000000000d80, 0x0000000000000d9b
+       .xword 0x0000000000000db6, 0x0000000000000dad
+       .xword 0x0000000000000dec, 0x0000000000000df7
+       .xword 0x0000000000000dda, 0x0000000000000dc1
+       .xword 0x0000000000000d58, 0x0000000000000d43
+       .xword 0x0000000000000d6e, 0x0000000000000d75
+       .xword 0x0000000000000d34, 0x0000000000000d2f
+       .xword 0x0000000000000d02, 0x0000000000000d19
+       .xword 0x0000000000000c30, 0x0000000000000c2b
+       .xword 0x0000000000000c06, 0x0000000000000c1d
+       .xword 0x0000000000000c5c, 0x0000000000000c47
+       .xword 0x0000000000000c6a, 0x0000000000000c71
+       .xword 0x0000000000000ce8, 0x0000000000000cf3
+       .xword 0x0000000000000cde, 0x0000000000000cc5
+       .xword 0x0000000000000c84, 0x0000000000000c9f
+       .xword 0x0000000000000cb2, 0x0000000000000ca9
+       .xword 0x0000000000000ee0, 0x0000000000000efb
+       .xword 0x0000000000000ed6, 0x0000000000000ecd
+       .xword 0x0000000000000e8c, 0x0000000000000e97
+       .xword 0x0000000000000eba, 0x0000000000000ea1
+       .xword 0x0000000000000e38, 0x0000000000000e23
+       .xword 0x0000000000000e0e, 0x0000000000000e15
+       .xword 0x0000000000000e54, 0x0000000000000e4f
+       .xword 0x0000000000000e62, 0x0000000000000e79
+       .xword 0x0000000000000f50, 0x0000000000000f4b
+       .xword 0x0000000000000f66, 0x0000000000000f7d
+       .xword 0x0000000000000f3c, 0x0000000000000f27
+       .xword 0x0000000000000f0a, 0x0000000000000f11
+       .xword 0x0000000000000f88, 0x0000000000000f93
+       .xword 0x0000000000000fbe, 0x0000000000000fa5
+       .xword 0x0000000000000fe4, 0x0000000000000fff
+       .xword 0x0000000000000fd2, 0x0000000000000fc9
+       .xword 0x0000000000000b40, 0x0000000000000b5b
+       .xword 0x0000000000000b76, 0x0000000000000b6d
+       .xword 0x0000000000000b2c, 0x0000000000000b37
+       .xword 0x0000000000000b1a, 0x0000000000000b01
+       .xword 0x0000000000000b98, 0x0000000000000b83
+       .xword 0x0000000000000bae, 0x0000000000000bb5
+       .xword 0x0000000000000bf4, 0x0000000000000bef
+       .xword 0x0000000000000bc2, 0x0000000000000bd9
+       .xword 0x0000000000000af0, 0x0000000000000aeb
+       .xword 0x0000000000000ac6, 0x0000000000000add
+       .xword 0x0000000000000a9c, 0x0000000000000a87
+       .xword 0x0000000000000aaa, 0x0000000000000ab1
+       .xword 0x0000000000000a28, 0x0000000000000a33
+       .xword 0x0000000000000a1e, 0x0000000000000a05
+       .xword 0x0000000000000a44, 0x0000000000000a5f
+       .xword 0x0000000000000a72, 0x0000000000000a69
+       .xword 0x0000000000000820, 0x000000000000083b
+       .xword 0x0000000000000816, 0x000000000000080d
+       .xword 0x000000000000084c, 0x0000000000000857
+       .xword 0x000000000000087a, 0x0000000000000861
+       .xword 0x00000000000008f8, 0x00000000000008e3
+       .xword 0x00000000000008ce, 0x00000000000008d5
+       .xword 0x0000000000000894, 0x000000000000088f
+       .xword 0x00000000000008a2, 0x00000000000008b9
+       .xword 0x0000000000000990, 0x000000000000098b
+       .xword 0x00000000000009a6, 0x00000000000009bd
+       .xword 0x00000000000009fc, 0x00000000000009e7
+       .xword 0x00000000000009ca, 0x00000000000009d1
+       .xword 0x0000000000000948, 0x0000000000000953
+       .xword 0x000000000000097e, 0x0000000000000965
+       .xword 0x0000000000000924, 0x000000000000093f
+       .xword 0x0000000000000912, 0x0000000000000909
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.S
new file mode 100644 (file)
index 0000000..2d2bc66
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_iso_refl_pmull.h"
+#include "crc64_refl_common_pmull.h"
+
+crc64_refl_func crc64_iso_refl_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_iso_refl_pmull.h
new file mode 100644 (file)
index 0000000..8ee4f58
--- /dev/null
@@ -0,0 +1,197 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0x0001
+.equ   p4_low_b1, 0xb000
+.equ   p4_low_b2, 0x01b1
+.equ   p4_low_b3, 0x01b0
+.equ   p4_high_b0, 0x0001
+.equ   p4_high_b1, 0x0000
+.equ   p4_high_b2, 0x0101
+.equ   p4_high_b3, 0xb100
+
+.equ   p1_low_b0, 0x0001
+.equ   p1_low_b1, 0x0000
+.equ   p1_low_b2, 0x0000
+.equ   p1_low_b3, 0x6b70
+.equ   p1_high_b0, 0x0001
+.equ   p1_high_b1, 0x0000
+.equ   p1_high_b2, 0x0000
+.equ   p1_high_b3, 0xf500
+
+.equ   p0_low_b0, 0x0001
+.equ   p0_low_b1, 0x0000
+.equ   p0_low_b2, 0x0000
+.equ   p0_low_b3, 0xf500
+
+.equ   br_low_b0, 0x0001
+.equ   br_low_b1, 0x0000
+.equ   br_low_b2, 0x0000
+.equ   br_low_b3, 0xb000
+.equ   br_high_b0, 0x0001
+.equ   br_high_b1, 0x0000
+.equ   br_high_b2, 0x0000
+.equ   br_high_b3, 0xb000
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+
+crc64_tab:
+       .xword 0x0000000000000000, 0x01b0000000000000
+       .xword 0x0360000000000000, 0x02d0000000000000
+       .xword 0x06c0000000000000, 0x0770000000000000
+       .xword 0x05a0000000000000, 0x0410000000000000
+       .xword 0x0d80000000000000, 0x0c30000000000000
+       .xword 0x0ee0000000000000, 0x0f50000000000000
+       .xword 0x0b40000000000000, 0x0af0000000000000
+       .xword 0x0820000000000000, 0x0990000000000000
+       .xword 0x1b00000000000000, 0x1ab0000000000000
+       .xword 0x1860000000000000, 0x19d0000000000000
+       .xword 0x1dc0000000000000, 0x1c70000000000000
+       .xword 0x1ea0000000000000, 0x1f10000000000000
+       .xword 0x1680000000000000, 0x1730000000000000
+       .xword 0x15e0000000000000, 0x1450000000000000
+       .xword 0x1040000000000000, 0x11f0000000000000
+       .xword 0x1320000000000000, 0x1290000000000000
+       .xword 0x3600000000000000, 0x37b0000000000000
+       .xword 0x3560000000000000, 0x34d0000000000000
+       .xword 0x30c0000000000000, 0x3170000000000000
+       .xword 0x33a0000000000000, 0x3210000000000000
+       .xword 0x3b80000000000000, 0x3a30000000000000
+       .xword 0x38e0000000000000, 0x3950000000000000
+       .xword 0x3d40000000000000, 0x3cf0000000000000
+       .xword 0x3e20000000000000, 0x3f90000000000000
+       .xword 0x2d00000000000000, 0x2cb0000000000000
+       .xword 0x2e60000000000000, 0x2fd0000000000000
+       .xword 0x2bc0000000000000, 0x2a70000000000000
+       .xword 0x28a0000000000000, 0x2910000000000000
+       .xword 0x2080000000000000, 0x2130000000000000
+       .xword 0x23e0000000000000, 0x2250000000000000
+       .xword 0x2640000000000000, 0x27f0000000000000
+       .xword 0x2520000000000000, 0x2490000000000000
+       .xword 0x6c00000000000000, 0x6db0000000000000
+       .xword 0x6f60000000000000, 0x6ed0000000000000
+       .xword 0x6ac0000000000000, 0x6b70000000000000
+       .xword 0x69a0000000000000, 0x6810000000000000
+       .xword 0x6180000000000000, 0x6030000000000000
+       .xword 0x62e0000000000000, 0x6350000000000000
+       .xword 0x6740000000000000, 0x66f0000000000000
+       .xword 0x6420000000000000, 0x6590000000000000
+       .xword 0x7700000000000000, 0x76b0000000000000
+       .xword 0x7460000000000000, 0x75d0000000000000
+       .xword 0x71c0000000000000, 0x7070000000000000
+       .xword 0x72a0000000000000, 0x7310000000000000
+       .xword 0x7a80000000000000, 0x7b30000000000000
+       .xword 0x79e0000000000000, 0x7850000000000000
+       .xword 0x7c40000000000000, 0x7df0000000000000
+       .xword 0x7f20000000000000, 0x7e90000000000000
+       .xword 0x5a00000000000000, 0x5bb0000000000000
+       .xword 0x5960000000000000, 0x58d0000000000000
+       .xword 0x5cc0000000000000, 0x5d70000000000000
+       .xword 0x5fa0000000000000, 0x5e10000000000000
+       .xword 0x5780000000000000, 0x5630000000000000
+       .xword 0x54e0000000000000, 0x5550000000000000
+       .xword 0x5140000000000000, 0x50f0000000000000
+       .xword 0x5220000000000000, 0x5390000000000000
+       .xword 0x4100000000000000, 0x40b0000000000000
+       .xword 0x4260000000000000, 0x43d0000000000000
+       .xword 0x47c0000000000000, 0x4670000000000000
+       .xword 0x44a0000000000000, 0x4510000000000000
+       .xword 0x4c80000000000000, 0x4d30000000000000
+       .xword 0x4fe0000000000000, 0x4e50000000000000
+       .xword 0x4a40000000000000, 0x4bf0000000000000
+       .xword 0x4920000000000000, 0x4890000000000000
+       .xword 0xd800000000000000, 0xd9b0000000000000
+       .xword 0xdb60000000000000, 0xdad0000000000000
+       .xword 0xdec0000000000000, 0xdf70000000000000
+       .xword 0xdda0000000000000, 0xdc10000000000000
+       .xword 0xd580000000000000, 0xd430000000000000
+       .xword 0xd6e0000000000000, 0xd750000000000000
+       .xword 0xd340000000000000, 0xd2f0000000000000
+       .xword 0xd020000000000000, 0xd190000000000000
+       .xword 0xc300000000000000, 0xc2b0000000000000
+       .xword 0xc060000000000000, 0xc1d0000000000000
+       .xword 0xc5c0000000000000, 0xc470000000000000
+       .xword 0xc6a0000000000000, 0xc710000000000000
+       .xword 0xce80000000000000, 0xcf30000000000000
+       .xword 0xcde0000000000000, 0xcc50000000000000
+       .xword 0xc840000000000000, 0xc9f0000000000000
+       .xword 0xcb20000000000000, 0xca90000000000000
+       .xword 0xee00000000000000, 0xefb0000000000000
+       .xword 0xed60000000000000, 0xecd0000000000000
+       .xword 0xe8c0000000000000, 0xe970000000000000
+       .xword 0xeba0000000000000, 0xea10000000000000
+       .xword 0xe380000000000000, 0xe230000000000000
+       .xword 0xe0e0000000000000, 0xe150000000000000
+       .xword 0xe540000000000000, 0xe4f0000000000000
+       .xword 0xe620000000000000, 0xe790000000000000
+       .xword 0xf500000000000000, 0xf4b0000000000000
+       .xword 0xf660000000000000, 0xf7d0000000000000
+       .xword 0xf3c0000000000000, 0xf270000000000000
+       .xword 0xf0a0000000000000, 0xf110000000000000
+       .xword 0xf880000000000000, 0xf930000000000000
+       .xword 0xfbe0000000000000, 0xfa50000000000000
+       .xword 0xfe40000000000000, 0xfff0000000000000
+       .xword 0xfd20000000000000, 0xfc90000000000000
+       .xword 0xb400000000000000, 0xb5b0000000000000
+       .xword 0xb760000000000000, 0xb6d0000000000000
+       .xword 0xb2c0000000000000, 0xb370000000000000
+       .xword 0xb1a0000000000000, 0xb010000000000000
+       .xword 0xb980000000000000, 0xb830000000000000
+       .xword 0xbae0000000000000, 0xbb50000000000000
+       .xword 0xbf40000000000000, 0xbef0000000000000
+       .xword 0xbc20000000000000, 0xbd90000000000000
+       .xword 0xaf00000000000000, 0xaeb0000000000000
+       .xword 0xac60000000000000, 0xadd0000000000000
+       .xword 0xa9c0000000000000, 0xa870000000000000
+       .xword 0xaaa0000000000000, 0xab10000000000000
+       .xword 0xa280000000000000, 0xa330000000000000
+       .xword 0xa1e0000000000000, 0xa050000000000000
+       .xword 0xa440000000000000, 0xa5f0000000000000
+       .xword 0xa720000000000000, 0xa690000000000000
+       .xword 0x8200000000000000, 0x83b0000000000000
+       .xword 0x8160000000000000, 0x80d0000000000000
+       .xword 0x84c0000000000000, 0x8570000000000000
+       .xword 0x87a0000000000000, 0x8610000000000000
+       .xword 0x8f80000000000000, 0x8e30000000000000
+       .xword 0x8ce0000000000000, 0x8d50000000000000
+       .xword 0x8940000000000000, 0x88f0000000000000
+       .xword 0x8a20000000000000, 0x8b90000000000000
+       .xword 0x9900000000000000, 0x98b0000000000000
+       .xword 0x9a60000000000000, 0x9bd0000000000000
+       .xword 0x9fc0000000000000, 0x9e70000000000000
+       .xword 0x9ca0000000000000, 0x9d10000000000000
+       .xword 0x9480000000000000, 0x9530000000000000
+       .xword 0x97e0000000000000, 0x9650000000000000
+       .xword 0x9240000000000000, 0x93f0000000000000
+       .xword 0x9120000000000000, 0x9090000000000000
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.S
new file mode 100644 (file)
index 0000000..4f29837
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_jones_norm_pmull.h"
+#include "crc64_norm_common_pmull.h"
+
+crc64_norm_func crc64_jones_norm_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_jones_norm_pmull.h
new file mode 100644 (file)
index 0000000..a20fa04
--- /dev/null
@@ -0,0 +1,200 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, (0xd25e)
+.equ   p4_low_b1, 0xca43
+.equ   p4_low_b2, 0x1e58
+.equ   p4_low_b3, 0x4e50
+.equ   p4_high_b0, 0xf643
+.equ   p4_high_b1, 0x8f27
+.equ   p4_high_b2, 0x6158
+.equ   p4_high_b3, 0x13c9
+
+.equ   p1_low_b0, (0x7038)
+.equ   p1_low_b1, 0x5001
+.equ   p1_low_b2, 0xed27
+.equ   p1_low_b3, 0x4445
+.equ   p1_high_b0, 0xd736
+.equ   p1_high_b1, 0x7cfb
+.equ   p1_high_b2, 0x7415
+.equ   p1_high_b3, 0x698b
+
+.equ   p0_low_b0, (0x7038)
+.equ   p0_low_b1, 0x5001
+.equ   p0_low_b2, 0xed27
+.equ   p0_low_b3, 0x4445
+.equ   p0_high_b0, 0x0000
+.equ   p0_high_b1, 0x0000
+.equ   p0_high_b2, 0x0000
+.equ   p0_high_b3, 0x0000
+
+.equ   br_low_b0, (0x6cf8)
+.equ   br_low_b1, 0x98be
+.equ   br_low_b2, 0xeeb2
+.equ   br_low_b3, 0xddf3
+.equ   br_high_b0, 0x35a9
+.equ   br_high_b1, 0x94c9
+.equ   br_high_b2, 0xd235
+.equ   br_high_b3, 0xad93
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+crc64_tab:
+       .xword 0x0000000000000000, 0xad93d23594c935a9
+       .xword 0xf6b4765ebd5b5efb, 0x5b27a46b29926b52
+       .xword 0x40fb3e88ee7f885f, 0xed68ecbd7ab6bdf6
+       .xword 0xb64f48d65324d6a4, 0x1bdc9ae3c7ede30d
+       .xword 0x81f67d11dcff10be, 0x2c65af2448362517
+       .xword 0x77420b4f61a44e45, 0xdad1d97af56d7bec
+       .xword 0xc10d4399328098e1, 0x6c9e91aca649ad48
+       .xword 0x37b935c78fdbc61a, 0x9a2ae7f21b12f3b3
+       .xword 0xae7f28162d3714d5, 0x03ecfa23b9fe217c
+       .xword 0x58cb5e48906c4a2e, 0xf5588c7d04a57f87
+       .xword 0xee84169ec3489c8a, 0x4317c4ab5781a923
+       .xword 0x183060c07e13c271, 0xb5a3b2f5eadaf7d8
+       .xword 0x2f895507f1c8046b, 0x821a8732650131c2
+       .xword 0xd93d23594c935a90, 0x74aef16cd85a6f39
+       .xword 0x6f726b8f1fb78c34, 0xc2e1b9ba8b7eb99d
+       .xword 0x99c61dd1a2ecd2cf, 0x3455cfe43625e766
+       .xword 0xf16d8219cea71c03, 0x5cfe502c5a6e29aa
+       .xword 0x07d9f44773fc42f8, 0xaa4a2672e7357751
+       .xword 0xb196bc9120d8945c, 0x1c056ea4b411a1f5
+       .xword 0x4722cacf9d83caa7, 0xeab118fa094aff0e
+       .xword 0x709bff0812580cbd, 0xdd082d3d86913914
+       .xword 0x862f8956af035246, 0x2bbc5b633bca67ef
+       .xword 0x3060c180fc2784e2, 0x9df313b568eeb14b
+       .xword 0xc6d4b7de417cda19, 0x6b4765ebd5b5efb0
+       .xword 0x5f12aa0fe39008d6, 0xf281783a77593d7f
+       .xword 0xa9a6dc515ecb562d, 0x04350e64ca026384
+       .xword 0x1fe994870def8089, 0xb27a46b29926b520
+       .xword 0xe95de2d9b0b4de72, 0x44ce30ec247debdb
+       .xword 0xdee4d71e3f6f1868, 0x7377052baba62dc1
+       .xword 0x2850a14082344693, 0x85c3737516fd733a
+       .xword 0x9e1fe996d1109037, 0x338c3ba345d9a59e
+       .xword 0x68ab9fc86c4bcecc, 0xc5384dfdf882fb65
+       .xword 0x4f48d60609870daf, 0xe2db04339d4e3806
+       .xword 0xb9fca058b4dc5354, 0x146f726d201566fd
+       .xword 0x0fb3e88ee7f885f0, 0xa2203abb7331b059
+       .xword 0xf9079ed05aa3db0b, 0x54944ce5ce6aeea2
+       .xword 0xcebeab17d5781d11, 0x632d792241b128b8
+       .xword 0x380add49682343ea, 0x95990f7cfcea7643
+       .xword 0x8e45959f3b07954e, 0x23d647aaafcea0e7
+       .xword 0x78f1e3c1865ccbb5, 0xd56231f41295fe1c
+       .xword 0xe137fe1024b0197a, 0x4ca42c25b0792cd3
+       .xword 0x1783884e99eb4781, 0xba105a7b0d227228
+       .xword 0xa1ccc098cacf9125, 0x0c5f12ad5e06a48c
+       .xword 0x5778b6c67794cfde, 0xfaeb64f3e35dfa77
+       .xword 0x60c18301f84f09c4, 0xcd5251346c863c6d
+       .xword 0x9675f55f4514573f, 0x3be6276ad1dd6296
+       .xword 0x203abd891630819b, 0x8da96fbc82f9b432
+       .xword 0xd68ecbd7ab6bdf60, 0x7b1d19e23fa2eac9
+       .xword 0xbe25541fc72011ac, 0x13b6862a53e92405
+       .xword 0x489122417a7b4f57, 0xe502f074eeb27afe
+       .xword 0xfede6a97295f99f3, 0x534db8a2bd96ac5a
+       .xword 0x086a1cc99404c708, 0xa5f9cefc00cdf2a1
+       .xword 0x3fd3290e1bdf0112, 0x9240fb3b8f1634bb
+       .xword 0xc9675f50a6845fe9, 0x64f48d65324d6a40
+       .xword 0x7f281786f5a0894d, 0xd2bbc5b36169bce4
+       .xword 0x899c61d848fbd7b6, 0x240fb3eddc32e21f
+       .xword 0x105a7c09ea170579, 0xbdc9ae3c7ede30d0
+       .xword 0xe6ee0a57574c5b82, 0x4b7dd862c3856e2b
+       .xword 0x50a1428104688d26, 0xfd3290b490a1b88f
+       .xword 0xa61534dfb933d3dd, 0x0b86e6ea2dfae674
+       .xword 0x91ac011836e815c7, 0x3c3fd32da221206e
+       .xword 0x671877468bb34b3c, 0xca8ba5731f7a7e95
+       .xword 0xd1573f90d8979d98, 0x7cc4eda54c5ea831
+       .xword 0x27e349ce65ccc363, 0x8a709bfbf105f6ca
+       .xword 0x9e91ac0c130e1b5e, 0x33027e3987c72ef7
+       .xword 0x6825da52ae5545a5, 0xc5b608673a9c700c
+       .xword 0xde6a9284fd719301, 0x73f940b169b8a6a8
+       .xword 0x28dee4da402acdfa, 0x854d36efd4e3f853
+       .xword 0x1f67d11dcff10be0, 0xb2f403285b383e49
+       .xword 0xe9d3a74372aa551b, 0x44407576e66360b2
+       .xword 0x5f9cef95218e83bf, 0xf20f3da0b547b616
+       .xword 0xa92899cb9cd5dd44, 0x04bb4bfe081ce8ed
+       .xword 0x30ee841a3e390f8b, 0x9d7d562faaf03a22
+       .xword 0xc65af24483625170, 0x6bc9207117ab64d9
+       .xword 0x7015ba92d04687d4, 0xdd8668a7448fb27d
+       .xword 0x86a1cccc6d1dd92f, 0x2b321ef9f9d4ec86
+       .xword 0xb118f90be2c61f35, 0x1c8b2b3e760f2a9c
+       .xword 0x47ac8f555f9d41ce, 0xea3f5d60cb547467
+       .xword 0xf1e3c7830cb9976a, 0x5c7015b69870a2c3
+       .xword 0x0757b1ddb1e2c991, 0xaac463e8252bfc38
+       .xword 0x6ffc2e15dda9075d, 0xc26ffc20496032f4
+       .xword 0x9948584b60f259a6, 0x34db8a7ef43b6c0f
+       .xword 0x2f07109d33d68f02, 0x8294c2a8a71fbaab
+       .xword 0xd9b366c38e8dd1f9, 0x7420b4f61a44e450
+       .xword 0xee0a5304015617e3, 0x43998131959f224a
+       .xword 0x18be255abc0d4918, 0xb52df76f28c47cb1
+       .xword 0xaef16d8cef299fbc, 0x0362bfb97be0aa15
+       .xword 0x58451bd25272c147, 0xf5d6c9e7c6bbf4ee
+       .xword 0xc1830603f09e1388, 0x6c10d43664572621
+       .xword 0x3737705d4dc54d73, 0x9aa4a268d90c78da
+       .xword 0x8178388b1ee19bd7, 0x2cebeabe8a28ae7e
+       .xword 0x77cc4ed5a3bac52c, 0xda5f9ce03773f085
+       .xword 0x40757b122c610336, 0xede6a927b8a8369f
+       .xword 0xb6c10d4c913a5dcd, 0x1b52df7905f36864
+       .xword 0x008e459ac21e8b69, 0xad1d97af56d7bec0
+       .xword 0xf63a33c47f45d592, 0x5ba9e1f1eb8ce03b
+       .xword 0xd1d97a0a1a8916f1, 0x7c4aa83f8e402358
+       .xword 0x276d0c54a7d2480a, 0x8afede61331b7da3
+       .xword 0x91224482f4f69eae, 0x3cb196b7603fab07
+       .xword 0x679632dc49adc055, 0xca05e0e9dd64f5fc
+       .xword 0x502f071bc676064f, 0xfdbcd52e52bf33e6
+       .xword 0xa69b71457b2d58b4, 0x0b08a370efe46d1d
+       .xword 0x10d4399328098e10, 0xbd47eba6bcc0bbb9
+       .xword 0xe6604fcd9552d0eb, 0x4bf39df8019be542
+       .xword 0x7fa6521c37be0224, 0xd2358029a377378d
+       .xword 0x891224428ae55cdf, 0x2481f6771e2c6976
+       .xword 0x3f5d6c94d9c18a7b, 0x92cebea14d08bfd2
+       .xword 0xc9e91aca649ad480, 0x647ac8fff053e129
+       .xword 0xfe502f0deb41129a, 0x53c3fd387f882733
+       .xword 0x08e45953561a4c61, 0xa5778b66c2d379c8
+       .xword 0xbeab1185053e9ac5, 0x1338c3b091f7af6c
+       .xword 0x481f67dbb865c43e, 0xe58cb5ee2cacf197
+       .xword 0x20b4f813d42e0af2, 0x8d272a2640e73f5b
+       .xword 0xd6008e4d69755409, 0x7b935c78fdbc61a0
+       .xword 0x604fc69b3a5182ad, 0xcddc14aeae98b704
+       .xword 0x96fbb0c5870adc56, 0x3b6862f013c3e9ff
+       .xword 0xa142850208d11a4c, 0x0cd157379c182fe5
+       .xword 0x57f6f35cb58a44b7, 0xfa6521692143711e
+       .xword 0xe1b9bb8ae6ae9213, 0x4c2a69bf7267a7ba
+       .xword 0x170dcdd45bf5cce8, 0xba9e1fe1cf3cf941
+       .xword 0x8ecbd005f9191e27, 0x235802306dd02b8e
+       .xword 0x787fa65b444240dc, 0xd5ec746ed08b7575
+       .xword 0xce30ee8d17669678, 0x63a33cb883afa3d1
+       .xword 0x388498d3aa3dc883, 0x95174ae63ef4fd2a
+       .xword 0x0f3dad1425e60e99, 0xa2ae7f21b12f3b30
+       .xword 0xf989db4a98bd5062, 0x541a097f0c7465cb
+       .xword 0x4fc6939ccb9986c6, 0xe25541a95f50b36f
+       .xword 0xb972e5c276c2d83d, 0x14e137f7e20bed94
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.S b/ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.S
new file mode 100644 (file)
index 0000000..177092f
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc64_jones_refl_pmull.h"
+#include "crc64_refl_common_pmull.h"
+
+crc64_refl_func crc64_jones_refl_pmull
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_jones_refl_pmull.h
new file mode 100644 (file)
index 0000000..5bf98f7
--- /dev/null
@@ -0,0 +1,196 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.equ   p4_low_b0, 0xb4fb
+.equ   p4_low_b1, 0x6d9a
+.equ   p4_low_b2, 0xefb1
+.equ   p4_low_b3, 0xaf86
+.equ   p4_high_b0, 0x14e4
+.equ   p4_high_b1, 0x34f0
+.equ   p4_high_b2, 0x84a6
+.equ   p4_high_b3, 0xf497
+
+.equ   p1_low_b0, 0xa32c
+.equ   p1_low_b1, 0x505d
+.equ   p1_low_b2, 0xbe7d
+.equ   p1_low_b3, 0xd9d7
+.equ   p1_high_b0, 0x4444
+.equ   p1_high_b1, 0xc96f
+.equ   p1_high_b2, 0x0015
+.equ   p1_high_b3, 0x381d
+
+.equ   p0_low_b0, 0x4444
+.equ   p0_low_b1, 0xc96f
+.equ   p0_low_b2, 0x0015
+.equ   p0_low_b3, 0x381d
+
+.equ   br_low_b0, 0x9f77
+.equ   br_low_b1, 0x9aef
+.equ   br_low_b2, 0xfa32
+.equ   br_low_b3, 0x3e6c
+.equ   br_high_b0, 0x936b
+.equ   br_high_b1, 0x5897
+.equ   br_high_b2, 0x2653
+.equ   br_high_b3, 0x2b59
+
+       .text
+       .section        .rodata
+       .align  4
+       .set    .lanchor_crc_tab,. + 0
+       .type   crc64_tab, %object
+       .size   crc64_tab, 2048
+crc64_tab:
+       .xword 0x0000000000000000, 0x7ad870c830358979
+       .xword 0xf5b0e190606b12f2, 0x8f689158505e9b8b
+       .xword 0xc038e5739841b68f, 0xbae095bba8743ff6
+       .xword 0x358804e3f82aa47d, 0x4f50742bc81f2d04
+       .xword 0xab28ecb46814fe75, 0xd1f09c7c5821770c
+       .xword 0x5e980d24087fec87, 0x24407dec384a65fe
+       .xword 0x6b1009c7f05548fa, 0x11c8790fc060c183
+       .xword 0x9ea0e857903e5a08, 0xe478989fa00bd371
+       .xword 0x7d08ff3b88be6f81, 0x07d08ff3b88be6f8
+       .xword 0x88b81eabe8d57d73, 0xf2606e63d8e0f40a
+       .xword 0xbd301a4810ffd90e, 0xc7e86a8020ca5077
+       .xword 0x4880fbd87094cbfc, 0x32588b1040a14285
+       .xword 0xd620138fe0aa91f4, 0xacf86347d09f188d
+       .xword 0x2390f21f80c18306, 0x594882d7b0f40a7f
+       .xword 0x1618f6fc78eb277b, 0x6cc0863448deae02
+       .xword 0xe3a8176c18803589, 0x997067a428b5bcf0
+       .xword 0xfa11fe77117cdf02, 0x80c98ebf2149567b
+       .xword 0x0fa11fe77117cdf0, 0x75796f2f41224489
+       .xword 0x3a291b04893d698d, 0x40f16bccb908e0f4
+       .xword 0xcf99fa94e9567b7f, 0xb5418a5cd963f206
+       .xword 0x513912c379682177, 0x2be1620b495da80e
+       .xword 0xa489f35319033385, 0xde51839b2936bafc
+       .xword 0x9101f7b0e12997f8, 0xebd98778d11c1e81
+       .xword 0x64b116208142850a, 0x1e6966e8b1770c73
+       .xword 0x8719014c99c2b083, 0xfdc17184a9f739fa
+       .xword 0x72a9e0dcf9a9a271, 0x08719014c99c2b08
+       .xword 0x4721e43f0183060c, 0x3df994f731b68f75
+       .xword 0xb29105af61e814fe, 0xc849756751dd9d87
+       .xword 0x2c31edf8f1d64ef6, 0x56e99d30c1e3c78f
+       .xword 0xd9810c6891bd5c04, 0xa3597ca0a188d57d
+       .xword 0xec09088b6997f879, 0x96d1784359a27100
+       .xword 0x19b9e91b09fcea8b, 0x636199d339c963f2
+       .xword 0xdf7adabd7a6e2d6f, 0xa5a2aa754a5ba416
+       .xword 0x2aca3b2d1a053f9d, 0x50124be52a30b6e4
+       .xword 0x1f423fcee22f9be0, 0x659a4f06d21a1299
+       .xword 0xeaf2de5e82448912, 0x902aae96b271006b
+       .xword 0x74523609127ad31a, 0x0e8a46c1224f5a63
+       .xword 0x81e2d7997211c1e8, 0xfb3aa75142244891
+       .xword 0xb46ad37a8a3b6595, 0xceb2a3b2ba0eecec
+       .xword 0x41da32eaea507767, 0x3b024222da65fe1e
+       .xword 0xa2722586f2d042ee, 0xd8aa554ec2e5cb97
+       .xword 0x57c2c41692bb501c, 0x2d1ab4dea28ed965
+       .xword 0x624ac0f56a91f461, 0x1892b03d5aa47d18
+       .xword 0x97fa21650afae693, 0xed2251ad3acf6fea
+       .xword 0x095ac9329ac4bc9b, 0x7382b9faaaf135e2
+       .xword 0xfcea28a2faafae69, 0x8632586aca9a2710
+       .xword 0xc9622c4102850a14, 0xb3ba5c8932b0836d
+       .xword 0x3cd2cdd162ee18e6, 0x460abd1952db919f
+       .xword 0x256b24ca6b12f26d, 0x5fb354025b277b14
+       .xword 0xd0dbc55a0b79e09f, 0xaa03b5923b4c69e6
+       .xword 0xe553c1b9f35344e2, 0x9f8bb171c366cd9b
+       .xword 0x10e3202993385610, 0x6a3b50e1a30ddf69
+       .xword 0x8e43c87e03060c18, 0xf49bb8b633338561
+       .xword 0x7bf329ee636d1eea, 0x012b592653589793
+       .xword 0x4e7b2d0d9b47ba97, 0x34a35dc5ab7233ee
+       .xword 0xbbcbcc9dfb2ca865, 0xc113bc55cb19211c
+       .xword 0x5863dbf1e3ac9dec, 0x22bbab39d3991495
+       .xword 0xadd33a6183c78f1e, 0xd70b4aa9b3f20667
+       .xword 0x985b3e827bed2b63, 0xe2834e4a4bd8a21a
+       .xword 0x6debdf121b863991, 0x1733afda2bb3b0e8
+       .xword 0xf34b37458bb86399, 0x8993478dbb8deae0
+       .xword 0x06fbd6d5ebd3716b, 0x7c23a61ddbe6f812
+       .xword 0x3373d23613f9d516, 0x49aba2fe23cc5c6f
+       .xword 0xc6c333a67392c7e4, 0xbc1b436e43a74e9d
+       .xword 0x95ac9329ac4bc9b5, 0xef74e3e19c7e40cc
+       .xword 0x601c72b9cc20db47, 0x1ac40271fc15523e
+       .xword 0x5594765a340a7f3a, 0x2f4c0692043ff643
+       .xword 0xa02497ca54616dc8, 0xdafce7026454e4b1
+       .xword 0x3e847f9dc45f37c0, 0x445c0f55f46abeb9
+       .xword 0xcb349e0da4342532, 0xb1eceec59401ac4b
+       .xword 0xfebc9aee5c1e814f, 0x8464ea266c2b0836
+       .xword 0x0b0c7b7e3c7593bd, 0x71d40bb60c401ac4
+       .xword 0xe8a46c1224f5a634, 0x927c1cda14c02f4d
+       .xword 0x1d148d82449eb4c6, 0x67ccfd4a74ab3dbf
+       .xword 0x289c8961bcb410bb, 0x5244f9a98c8199c2
+       .xword 0xdd2c68f1dcdf0249, 0xa7f41839ecea8b30
+       .xword 0x438c80a64ce15841, 0x3954f06e7cd4d138
+       .xword 0xb63c61362c8a4ab3, 0xcce411fe1cbfc3ca
+       .xword 0x83b465d5d4a0eece, 0xf96c151de49567b7
+       .xword 0x76048445b4cbfc3c, 0x0cdcf48d84fe7545
+       .xword 0x6fbd6d5ebd3716b7, 0x15651d968d029fce
+       .xword 0x9a0d8ccedd5c0445, 0xe0d5fc06ed698d3c
+       .xword 0xaf85882d2576a038, 0xd55df8e515432941
+       .xword 0x5a3569bd451db2ca, 0x20ed197575283bb3
+       .xword 0xc49581ead523e8c2, 0xbe4df122e51661bb
+       .xword 0x3125607ab548fa30, 0x4bfd10b2857d7349
+       .xword 0x04ad64994d625e4d, 0x7e7514517d57d734
+       .xword 0xf11d85092d094cbf, 0x8bc5f5c11d3cc5c6
+       .xword 0x12b5926535897936, 0x686de2ad05bcf04f
+       .xword 0xe70573f555e26bc4, 0x9ddd033d65d7e2bd
+       .xword 0xd28d7716adc8cfb9, 0xa85507de9dfd46c0
+       .xword 0x273d9686cda3dd4b, 0x5de5e64efd965432
+       .xword 0xb99d7ed15d9d8743, 0xc3450e196da80e3a
+       .xword 0x4c2d9f413df695b1, 0x36f5ef890dc31cc8
+       .xword 0x79a59ba2c5dc31cc, 0x037deb6af5e9b8b5
+       .xword 0x8c157a32a5b7233e, 0xf6cd0afa9582aa47
+       .xword 0x4ad64994d625e4da, 0x300e395ce6106da3
+       .xword 0xbf66a804b64ef628, 0xc5bed8cc867b7f51
+       .xword 0x8aeeace74e645255, 0xf036dc2f7e51db2c
+       .xword 0x7f5e4d772e0f40a7, 0x05863dbf1e3ac9de
+       .xword 0xe1fea520be311aaf, 0x9b26d5e88e0493d6
+       .xword 0x144e44b0de5a085d, 0x6e963478ee6f8124
+       .xword 0x21c640532670ac20, 0x5b1e309b16452559
+       .xword 0xd476a1c3461bbed2, 0xaeaed10b762e37ab
+       .xword 0x37deb6af5e9b8b5b, 0x4d06c6676eae0222
+       .xword 0xc26e573f3ef099a9, 0xb8b627f70ec510d0
+       .xword 0xf7e653dcc6da3dd4, 0x8d3e2314f6efb4ad
+       .xword 0x0256b24ca6b12f26, 0x788ec2849684a65f
+       .xword 0x9cf65a1b368f752e, 0xe62e2ad306bafc57
+       .xword 0x6946bb8b56e467dc, 0x139ecb4366d1eea5
+       .xword 0x5ccebf68aecec3a1, 0x2616cfa09efb4ad8
+       .xword 0xa97e5ef8cea5d153, 0xd3a62e30fe90582a
+       .xword 0xb0c7b7e3c7593bd8, 0xca1fc72bf76cb2a1
+       .xword 0x45775673a732292a, 0x3faf26bb9707a053
+       .xword 0x70ff52905f188d57, 0x0a2722586f2d042e
+       .xword 0x854fb3003f739fa5, 0xff97c3c80f4616dc
+       .xword 0x1bef5b57af4dc5ad, 0x61372b9f9f784cd4
+       .xword 0xee5fbac7cf26d75f, 0x9487ca0fff135e26
+       .xword 0xdbd7be24370c7322, 0xa10fceec0739fa5b
+       .xword 0x2e675fb4576761d0, 0x54bf2f7c6752e8a9
+       .xword 0xcdcf48d84fe75459, 0xb71738107fd2dd20
+       .xword 0x387fa9482f8c46ab, 0x42a7d9801fb9cfd2
+       .xword 0x0df7adabd7a6e2d6, 0x772fdd63e7936baf
+       .xword 0xf8474c3bb7cdf024, 0x829f3cf387f8795d
+       .xword 0x66e7a46c27f3aa2c, 0x1c3fd4a417c62355
+       .xword 0x935745fc4798b8de, 0xe98f353477ad31a7
+       .xword 0xa6df411fbfb21ca3, 0xdc0731d78f8795da
+       .xword 0x536fa08fdfd90e51, 0x29b7d047efec8728
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_norm_common_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_norm_common_pmull.h
new file mode 100644 (file)
index 0000000..1bdfc26
--- /dev/null
@@ -0,0 +1,129 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc_common_pmull.h"
+
+.macro crc64_norm_func name:req
+       .arch armv8-a+crypto
+       .text
+       .align  3
+       .global \name
+       .type   \name, %function
+
+/* uint64_t crc64_norm_func(uint64_t seed, const uint8_t * buf, uint64_t len) */
+
+\name\():
+       mvn     x_seed, x_seed
+       mov     x_counter, 0
+       cmp     x_len, (FOLD_SIZE-1)
+       bhi     .crc_clmul_pre
+
+.crc_tab_pre:
+       cmp     x_len, x_counter
+       bls     .done
+
+       adrp    x_tmp, .lanchor_crc_tab
+       add     x_buf_iter, x_buf, x_counter
+       add     x_buf, x_buf, x_len
+       add     x_crc_tab_addr, x_tmp, :lo12:.lanchor_crc_tab
+
+       .align 3
+.loop_crc_tab:
+       ldrb    w_tmp, [x_buf_iter], 1
+       cmp     x_buf, x_buf_iter
+       eor     x_tmp, x_tmp, x_seed, lsr 56
+       ldr     x_tmp, [x_crc_tab_addr, x_tmp, lsl 3]
+       eor     x_seed, x_tmp, x_seed, lsl 8
+       bne     .loop_crc_tab
+
+.done:
+       mvn     x_crc_ret, x_seed
+       ret
+
+       .align 2
+.crc_clmul_pre:
+       movi    v_x0.2s, 0
+       fmov    v_x0.d[1], x_seed // save crc to v_x0
+
+       crc_norm_load_first_block
+
+       bls     .clmul_loop_end
+
+       crc64_load_p4
+
+// 1024bit --> 512bit loop
+// merge x0, x1, x2, x3, y0, y1, y2, y3 => x0, x1, x2, x3 (uint64x2_t)
+       crc_norm_loop
+
+.clmul_loop_end:
+// folding 512bit --> 128bit
+       crc64_fold_512b_to_128b
+
+// folding 128bit --> 64bit
+       mov     x_tmp, p0_low_b0
+       movk    x_tmp, p0_low_b1, lsl 16
+       movk    x_tmp, p0_low_b2, lsl 32
+       movk    x_tmp, p0_low_b3, lsl 48
+       fmov    d_p0_high, x_tmp
+
+       pmull2  v_tmp_high.1q, v_x3.2d, v_p0.2d
+       movi    v_tmp_low.2s, 0
+       ext     v_tmp_low.16b, v_tmp_low.16b, v_x3.16b, #8
+
+       eor     v_x3.16b, v_tmp_high.16b, v_tmp_low.16b
+
+// barrett reduction
+       mov     x_tmp, br_low_b0
+       movk    x_tmp, br_low_b1, lsl 16
+       movk    x_tmp, br_low_b2, lsl 32
+       movk    x_tmp, br_low_b3, lsl 48
+       fmov    d_br_low2, x_tmp
+
+       mov     x_tmp2, br_high_b0
+       movk    x_tmp2, br_high_b1, lsl 16
+       movk    x_tmp2, br_high_b2, lsl 32
+       movk    x_tmp2, br_high_b3, lsl 48
+       fmov    d_br_high2, x_tmp2
+
+       pmull2  v_tmp_low.1q, v_x3.2d, v_br_low.2d
+       eor     v_tmp_low.16b, v_x3.16b, v_tmp_low.16b
+       pmull2  v_tmp_low.1q, v_tmp_low.2d, v_br_high.2d
+       eor     v_x3.8b, v_x3.8b, v_tmp_low.8b
+       umov    x_seed, v_x3.d[0]
+
+       b       .crc_tab_pre
+
+       .size   \name, .-\name
+
+       .section .rodata.cst16,"aM",@progbits,16
+       .align  4
+.shuffle_data:
+       .byte   15, 14, 13, 12, 11, 10, 9, 8
+       .byte   7, 6, 5, 4, 3, 2, 1, 0
+.endm
diff --git a/ceph/src/isa-l/crc/aarch64/crc64_refl_common_pmull.h b/ceph/src/isa-l/crc/aarch64/crc64_refl_common_pmull.h
new file mode 100644 (file)
index 0000000..a455013
--- /dev/null
@@ -0,0 +1,126 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "crc_common_pmull.h"
+
+.macro crc64_refl_func name:req
+       .arch armv8-a+crypto
+       .text
+       .align  3
+       .global \name
+       .type   \name, %function
+
+/* uint64_t crc64_refl_func(uint64_t seed, const uint8_t * buf, uint64_t len) */
+
+\name\():
+       mvn     x_seed, x_seed
+       mov     x_counter, 0
+       cmp     x_len, (FOLD_SIZE-1)
+       bhi     .crc_clmul_pre
+
+.crc_tab_pre:
+       cmp     x_len, x_counter
+       bls     .done
+
+       adrp    x_tmp, .lanchor_crc_tab
+       add     x_buf_iter, x_buf, x_counter
+       add     x_buf, x_buf, x_len
+       add     x_crc_tab_addr, x_tmp, :lo12:.lanchor_crc_tab
+
+       .align 3
+.loop_crc_tab:
+       ldrb    w_tmp, [x_buf_iter], 1
+       eor     w_tmp, w_tmp, w0
+       cmp     x_buf, x_buf_iter
+       and     x_tmp, x_tmp, 255
+       ldr     x_tmp, [x_crc_tab_addr, x_tmp, lsl 3]
+       eor     x_seed, x_tmp, x_seed, lsr 8
+       bne     .loop_crc_tab
+
+.done:
+       mvn     x_crc_ret, x_seed
+       ret
+
+       .align 2
+.crc_clmul_pre:
+       fmov    d_x0, x_seed // save crc to d_x0
+
+       crc_refl_load_first_block
+
+       bls     .clmul_loop_end
+
+       crc64_load_p4
+
+// 1024bit --> 512bit loop
+// merge x0, x1, x2, x3, y0, y1, y2, y3 => x0, x1, x2, x3 (uint64x2_t)
+       crc_refl_loop
+
+.clmul_loop_end:
+// folding 512bit --> 128bit
+       crc64_fold_512b_to_128b
+
+// folding 128bit --> 64bit
+       mov     x_tmp, p0_low_b0
+       movk    x_tmp, p0_low_b1, lsl 16
+       movk    x_tmp, p0_low_b2, lsl 32
+       movk    x_tmp, p0_low_b3, lsl 48
+       fmov    d_p0_low, x_tmp
+
+       pmull   v_tmp_low.1q, v_x3.1d, v_p0.1d
+
+       mov     d_tmp_high, v_x3.d[1]
+
+       eor     v_x3.16b, v_tmp_high.16b, v_tmp_low.16b
+
+// barrett reduction
+       mov     x_tmp, br_low_b0
+       movk    x_tmp, br_low_b1, lsl 16
+       movk    x_tmp, br_low_b2, lsl 32
+       movk    x_tmp, br_low_b3, lsl 48
+       fmov    d_br_low, x_tmp
+
+       mov     x_tmp2, br_high_b0
+       movk    x_tmp2, br_high_b1, lsl 16
+       movk    x_tmp2, br_high_b2, lsl 32
+       movk    x_tmp2, br_high_b3, lsl 48
+       fmov    d_br_high, x_tmp2
+
+       pmull   v_tmp_low.1q, v_x3.1d, v_br_low.1d
+       pmull   v_tmp_high.1q, v_tmp_low.1d, v_br_high.1d
+
+       ext     v_tmp_low.16b, v_br_low.16b, v_tmp_low.16b, #8
+
+       eor     v_tmp_low.16b, v_tmp_low.16b, v_tmp_high.16b
+       eor     v_tmp_low.16b, v_tmp_low.16b, v_x3.16b
+       umov    x_crc_ret, v_tmp_low.d[1]
+
+       b       .crc_tab_pre
+
+       .size   \name, .-\name
+.endm
diff --git a/ceph/src/isa-l/crc/aarch64/crc_aarch64_dispatcher.c b/ceph/src/isa-l/crc/aarch64/crc_aarch64_dispatcher.c
new file mode 100644 (file)
index 0000000..bac9eeb
--- /dev/null
@@ -0,0 +1,145 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include <aarch64_multibinary.h>
+
+DEFINE_INTERFACE_DISPATCHER(crc16_t10dif)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc16_t10dif_pmull);
+
+       return PROVIDER_BASIC(crc16_t10dif);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc16_t10dif_copy)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc16_t10dif_copy_pmull);
+
+       return PROVIDER_BASIC(crc16_t10dif_copy);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc32_ieee)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL) {
+               return PROVIDER_INFO(crc32_ieee_norm_pmull);
+       }
+
+       return PROVIDER_BASIC(crc32_ieee);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc32_iscsi)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(crc32_iscsi_refl_hw_fold);
+       if (auxval & HWCAP_PMULL) {
+               return PROVIDER_INFO(crc32_iscsi_refl_pmull);
+       }
+       return PROVIDER_BASIC(crc32_iscsi);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc32_gzip_refl)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(crc32_gzip_refl_hw_fold);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc32_gzip_refl_pmull);
+
+       return PROVIDER_BASIC(crc32_gzip_refl);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_ecma_refl)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_ecma_refl_pmull);
+
+       return PROVIDER_BASIC(crc64_ecma_refl);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_ecma_norm)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_ecma_norm_pmull);
+
+       return PROVIDER_BASIC(crc64_ecma_norm);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_iso_refl)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_iso_refl_pmull);
+
+       return PROVIDER_BASIC(crc64_iso_refl);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_iso_norm)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_iso_norm_pmull);
+
+       return PROVIDER_BASIC(crc64_iso_norm);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_jones_refl)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_jones_refl_pmull);
+
+       return PROVIDER_BASIC(crc64_jones_refl);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(crc64_jones_norm)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_PMULL)
+               return PROVIDER_INFO(crc64_jones_norm_pmull);
+
+       return PROVIDER_BASIC(crc64_jones_norm);
+
+}
diff --git a/ceph/src/isa-l/crc/aarch64/crc_common_pmull.h b/ceph/src/isa-l/crc/aarch64/crc_common_pmull.h
new file mode 100644 (file)
index 0000000..20a71b9
--- /dev/null
@@ -0,0 +1,302 @@
+########################################################################
+#  Copyright (c) 2019 Microsoft Corporation.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Microsoft Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+// parameters
+#define w_seed          w0
+#define x_seed          x0
+#define x_buf           x1
+#define w_len           w2
+#define x_len           x2
+
+// return
+#define w_crc_ret       w0
+#define x_crc_ret       x0
+
+// constant
+#define FOLD_SIZE       64
+
+// global variables
+#define x_buf_end       x3
+#define w_counter       w4
+#define x_counter       x4
+#define x_buf_iter      x5
+#define x_crc_tab_addr  x6
+#define x_tmp2          x6
+#define w_tmp           w7
+#define x_tmp           x7
+
+#define v_x0            v0
+#define d_x0            d0
+#define s_x0            s0
+
+#define q_x1            q1
+#define v_x1            v1
+
+#define q_x2            q2
+#define v_x2            v2
+
+#define q_x3            q3
+#define v_x3            v3
+#define d_x3            d3
+#define s_x3            s3
+
+#define q_y0            q4
+#define v_y0            v4
+#define v_tmp_high      v4
+#define d_tmp_high      d4
+
+#define q_y1            q5
+#define v_y1            v5
+#define v_tmp_low       v5
+
+#define q_y2            q6
+#define v_y2            v6
+
+#define q_y3            q7
+#define v_y3            v7
+
+#define q_x0_tmp        q30
+#define v_x0_tmp        v30
+#define d_p4_high       v30.d[1]
+#define d_p4_low        d30
+#define v_p4            v30
+#define d_p1_high       v30.d[1]
+#define d_p1_low        d30
+#define v_p1            v30
+#define d_p0_high       v30.d[1]
+#define d_p0_low        d30
+#define v_p0            v30
+#define d_br_low        d30
+#define d_br_low2       v30.d[1]
+#define v_br_low        v30
+
+#define q_shuffle       q31
+#define v_shuffle       v31
+#define d_br_high       d31
+#define d_br_high2      v31.d[1]
+#define v_br_high       v31
+#define d_p0_low2       d31
+#define d_p0_high2      v31.d[1]
+#define v_p02           v31
+
+#define v_x0_high       v16
+#define v_x1_high       v17
+#define v_x2_high       v18
+#define v_x3_high       v19
+
+.macro crc_refl_load_first_block
+       ldr     q_x0_tmp, [x_buf]
+       ldr     q_x1, [x_buf, 16]
+       ldr     q_x2, [x_buf, 32]
+       ldr     q_x3, [x_buf, 48]
+
+       and     x_counter, x_len, -64
+       sub     x_tmp, x_counter, #64
+       cmp     x_tmp, 63
+
+       add     x_buf_iter, x_buf, 64
+
+       eor     v_x0.16b, v_x0.16b, v_x0_tmp.16b
+.endm
+
+.macro crc_norm_load_first_block
+       adrp    x_tmp, .shuffle_data
+       ldr     q_shuffle, [x_tmp, #:lo12:.shuffle_data]
+
+       ldr     q_x0_tmp, [x_buf]
+       ldr     q_x1, [x_buf, 16]
+       ldr     q_x2, [x_buf, 32]
+       ldr     q_x3, [x_buf, 48]
+
+       and     x_counter, x_len, -64
+       sub     x_tmp, x_counter, #64
+       cmp     x_tmp, 63
+
+       add     x_buf_iter, x_buf, 64
+
+       tbl     v_x0_tmp.16b, {v_x0_tmp.16b}, v_shuffle.16b
+       tbl     v_x1.16b, {v_x1.16b}, v_shuffle.16b
+       tbl     v_x2.16b, {v_x2.16b}, v_shuffle.16b
+       tbl     v_x3.16b, {v_x3.16b}, v_shuffle.16b
+
+       eor     v_x0.16b, v_x0.16b, v_x0_tmp.16b
+.endm
+
+.macro crc32_load_p4
+       add     x_buf_end, x_buf_iter, x_tmp
+
+       mov     x_tmp, p4_low_b0
+       movk    x_tmp, p4_low_b1, lsl 16
+       fmov    d_p4_low, x_tmp
+
+       mov     x_tmp2, p4_high_b0
+       movk    x_tmp2, p4_high_b1, lsl 16
+       fmov    d_p4_high, x_tmp2
+.endm
+
+.macro crc64_load_p4
+       add     x_buf_end, x_buf_iter, x_tmp
+
+       mov     x_tmp, p4_low_b0
+       movk    x_tmp, p4_low_b1, lsl 16
+       movk    x_tmp, p4_low_b2, lsl 32
+       movk    x_tmp, p4_low_b3, lsl 48
+       fmov    d_p4_low, x_tmp
+
+       mov     x_tmp2, p4_high_b0
+       movk    x_tmp2, p4_high_b1, lsl 16
+       movk    x_tmp2, p4_high_b2, lsl 32
+       movk    x_tmp2, p4_high_b3, lsl 48
+       fmov    d_p4_high, x_tmp2
+.endm
+
+.macro crc_refl_loop
+       .align 3
+.clmul_loop:
+       // interleave ldr and pmull(2) for arch which can only issue quadword load every
+       // other cycle (i.e. A55)
+       ldr     q_y0, [x_buf_iter]
+       pmull2  v_x0_high.1q, v_x0.2d, v_p4.2d
+       ldr     q_y1, [x_buf_iter, 16]
+       pmull2  v_x1_high.1q, v_x1.2d, v_p4.2d
+       ldr     q_y2, [x_buf_iter, 32]
+       pmull2  v_x2_high.1q, v_x2.2d, v_p4.2d
+       ldr     q_y3, [x_buf_iter, 48]
+       pmull2  v_x3_high.1q, v_x3.2d, v_p4.2d
+
+       pmull   v_x0.1q, v_x0.1d, v_p4.1d
+       add     x_buf_iter, x_buf_iter, 64
+       pmull   v_x1.1q, v_x1.1d, v_p4.1d
+       cmp     x_buf_iter, x_buf_end
+       pmull   v_x2.1q, v_x2.1d, v_p4.1d
+       pmull   v_x3.1q, v_x3.1d, v_p4.1d
+
+       eor     v_x0.16b, v_x0.16b, v_x0_high.16b
+       eor     v_x1.16b, v_x1.16b, v_x1_high.16b
+       eor     v_x2.16b, v_x2.16b, v_x2_high.16b
+       eor     v_x3.16b, v_x3.16b, v_x3_high.16b
+
+       eor     v_x0.16b, v_x0.16b, v_y0.16b
+       eor     v_x1.16b, v_x1.16b, v_y1.16b
+       eor     v_x2.16b, v_x2.16b, v_y2.16b
+       eor     v_x3.16b, v_x3.16b, v_y3.16b
+       bne     .clmul_loop
+.endm
+
+.macro crc_norm_loop
+       .align 3
+.clmul_loop:
+       // interleave ldr and pmull(2) for arch which can only issue quadword load every
+       // other cycle (i.e. A55)
+       ldr     q_y0, [x_buf_iter]
+       pmull2  v_x0_high.1q, v_x0.2d, v_p4.2d
+       ldr     q_y1, [x_buf_iter, 16]
+       pmull2  v_x1_high.1q, v_x1.2d, v_p4.2d
+       ldr     q_y2, [x_buf_iter, 32]
+       pmull2  v_x2_high.1q, v_x2.2d, v_p4.2d
+       ldr     q_y3, [x_buf_iter, 48]
+       pmull2  v_x3_high.1q, v_x3.2d, v_p4.2d
+
+       pmull   v_x0.1q, v_x0.1d, v_p4.1d
+       add     x_buf_iter, x_buf_iter, 64
+       pmull   v_x1.1q, v_x1.1d, v_p4.1d
+       cmp     x_buf_iter, x_buf_end
+       pmull   v_x2.1q, v_x2.1d, v_p4.1d
+       pmull   v_x3.1q, v_x3.1d, v_p4.1d
+
+       tbl     v_y0.16b, {v_y0.16b}, v_shuffle.16b
+       tbl     v_y1.16b, {v_y1.16b}, v_shuffle.16b
+       tbl     v_y2.16b, {v_y2.16b}, v_shuffle.16b
+       tbl     v_y3.16b, {v_y3.16b}, v_shuffle.16b
+
+       eor     v_x0.16b, v_x0.16b, v_x0_high.16b
+       eor     v_x1.16b, v_x1.16b, v_x1_high.16b
+       eor     v_x2.16b, v_x2.16b, v_x2_high.16b
+       eor     v_x3.16b, v_x3.16b, v_x3_high.16b
+
+       eor     v_x0.16b, v_x0.16b, v_y0.16b
+       eor     v_x1.16b, v_x1.16b, v_y1.16b
+       eor     v_x2.16b, v_x2.16b, v_y2.16b
+       eor     v_x3.16b, v_x3.16b, v_y3.16b
+       bne     .clmul_loop
+.endm
+
+.macro crc32_fold_512b_to_128b
+       mov     x_tmp, p1_low_b0
+       movk    x_tmp, p1_low_b1, lsl 16
+       fmov    d_p1_low, x_tmp
+
+       mov     x_tmp2, p1_high_b0
+       movk    x_tmp2, p1_high_b1, lsl 16
+       fmov    d_p1_high, x_tmp2
+
+       pmull2  v_tmp_high.1q, v_x0.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x0.1d, v_p1.1d
+       eor     v_x1.16b, v_x1.16b, v_tmp_high.16b
+       eor     v_x1.16b, v_x1.16b, v_tmp_low.16b
+
+       pmull2  v_tmp_high.1q, v_x1.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x1.1d, v_p1.1d
+       eor     v_x2.16b, v_x2.16b, v_tmp_high.16b
+       eor     v_x2.16b, v_x2.16b, v_tmp_low.16b
+
+       pmull2  v_tmp_high.1q, v_x2.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x2.1d, v_p1.1d
+       eor     v_x3.16b, v_x3.16b, v_tmp_high.16b
+       eor     v_x3.16b, v_x3.16b, v_tmp_low.16b
+.endm
+
+.macro crc64_fold_512b_to_128b
+       mov     x_tmp, p1_low_b0
+       movk    x_tmp, p1_low_b1, lsl 16
+       movk    x_tmp, p1_low_b2, lsl 32
+       movk    x_tmp, p1_low_b3, lsl 48
+       fmov    d_p1_low, x_tmp
+
+       mov     x_tmp2, p1_high_b0
+       movk    x_tmp2, p1_high_b1, lsl 16
+       movk    x_tmp2, p1_high_b2, lsl 32
+       movk    x_tmp2, p1_high_b3, lsl 48
+       fmov    d_p1_high, x_tmp2
+
+       pmull2  v_tmp_high.1q, v_x0.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x0.1d, v_p1.1d
+       eor     v_x1.16b, v_x1.16b, v_tmp_high.16b
+       eor     v_x1.16b, v_x1.16b, v_tmp_low.16b
+
+       pmull2  v_tmp_high.1q, v_x1.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x1.1d, v_p1.1d
+       eor     v_x2.16b, v_x2.16b, v_tmp_high.16b
+       eor     v_x2.16b, v_x2.16b, v_tmp_low.16b
+
+       pmull2  v_tmp_high.1q, v_x2.2d, v_p1.2d
+       pmull   v_tmp_low.1q, v_x2.1d, v_p1.1d
+       eor     v_x3.16b, v_x3.16b, v_tmp_high.16b
+       eor     v_x3.16b, v_x3.16b, v_tmp_low.16b
+.endm
\ No newline at end of file
diff --git a/ceph/src/isa-l/crc/aarch64/crc_multibinary_arm.S b/ceph/src/isa-l/crc/aarch64/crc_multibinary_arm.S
new file mode 100644 (file)
index 0000000..76f9571
--- /dev/null
@@ -0,0 +1,42 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+#include <aarch64_multibinary.h>
+
+
+mbin_interface crc32_iscsi
+mbin_interface crc16_t10dif
+mbin_interface crc16_t10dif_copy
+mbin_interface crc32_ieee
+mbin_interface crc32_gzip_refl
+mbin_interface crc64_ecma_refl
+mbin_interface crc64_ecma_norm
+mbin_interface crc64_iso_refl
+mbin_interface crc64_iso_norm
+mbin_interface crc64_jones_refl
+mbin_interface crc64_jones_norm
index fb9c73c8bac58d78bade3d07a508eb7f74e218e2..f79cd3f16b201482d3a3362a229aff56cb927893 100644 (file)
@@ -73,7 +73,7 @@ section .text
 %endif
 
 align 16
-global crc16_t10dif_01:function
+global crc16_t10dif_01:ISAL_SYM_TYPE_FUNCTION
 crc16_t10dif_01:
 
        ; adjust the 16-bit initial_crc value, scale it to 32 bits
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_02.asm b/ceph/src/isa-l/crc/crc16_t10dif_02.asm
new file mode 100644 (file)
index 0000000..97fa5e4
--- /dev/null
@@ -0,0 +1,653 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;       Function API:
+;       UINT16 crc16_t10dif_02(
+;               UINT16 init_crc, //initial CRC value, 16 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+%ifidn __OUTPUT_FORMAT__, win64
+        %xdefine        arg1 rcx
+        %xdefine        arg2 rdx
+        %xdefine        arg3 r8
+
+        %xdefine        arg1_low32 ecx
+%else
+        %xdefine        arg1 rdi
+        %xdefine        arg2 rsi
+        %xdefine        arg3 rdx
+
+        %xdefine        arg1_low32 edi
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+        %define XMM_SAVE 16*2
+        %define VARIABLE_OFFSET 16*10+8
+%else
+        %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global crc16_t10dif_02:ISAL_SYM_TYPE_FUNCTION
+crc16_t10dif_02:
+
+       ; adjust the 16-bit initial_crc value, scale it to 32 bits
+       shl     arg1_low32, 16
+
+       ; After this point, code flow is exactly same as a 32-bit CRC.
+       ; The only difference is before returning eax, we will shift it right 16 bits, to scale back to 16 bits.
+
+       sub     rsp, VARIABLE_OFFSET
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa [rsp+16*2],xmm6
+       vmovdqa [rsp+16*3],xmm7
+       vmovdqa [rsp+16*4],xmm8
+       vmovdqa [rsp+16*5],xmm9
+       vmovdqa [rsp+16*6],xmm10
+       vmovdqa [rsp+16*7],xmm11
+       vmovdqa [rsp+16*8],xmm12
+       vmovdqa [rsp+16*9],xmm13
+%endif
+
+       ; check if smaller than 256
+       cmp     arg3, 256
+
+       ; for sizes less than 256, we can't fold 128B at a time...
+       jl      _less_than_256
+
+
+       ; load the initial crc value
+       vmovd   xmm10, arg1_low32       ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with initial crc at correct place.
+       vpslldq xmm10, 12
+
+       vmovdqa xmm11, [SHUF_MASK]
+       ; receive the initial 128B data, xor the initial crc value
+       vmovdqu xmm0, [arg2+16*0]
+       vmovdqu xmm1, [arg2+16*1]
+       vmovdqu xmm2, [arg2+16*2]
+       vmovdqu xmm3, [arg2+16*3]
+       vmovdqu xmm4, [arg2+16*4]
+       vmovdqu xmm5, [arg2+16*5]
+       vmovdqu xmm6, [arg2+16*6]
+       vmovdqu xmm7, [arg2+16*7]
+
+       vpshufb xmm0, xmm11
+       ; XOR the initial_crc value
+       vpxor   xmm0, xmm10
+       vpshufb xmm1, xmm11
+       vpshufb xmm2, xmm11
+       vpshufb xmm3, xmm11
+       vpshufb xmm4, xmm11
+       vpshufb xmm5, xmm11
+       vpshufb xmm6, xmm11
+       vpshufb xmm7, xmm11
+
+       vmovdqa xmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       ; we subtract 256 instead of 128 to save one instruction from the loop
+       sub     arg3, 256
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The _fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+_fold_128_B_loop:
+
+       ; update the buffer pointer
+       add     arg2, 128               ;    buf += 128;
+
+       prefetchnta [arg2+fetch_dist+0]
+       vmovdqu xmm9, [arg2+16*0]
+       vmovdqu xmm12, [arg2+16*1]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm0
+       vmovdqa xmm13, xmm1
+       vpclmulqdq      xmm0, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm1, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm0, xmm9
+       vxorps  xmm0, xmm8
+       vpxor   xmm1, xmm12
+       vxorps  xmm1, xmm13
+
+       prefetchnta [arg2+fetch_dist+32]
+       vmovdqu xmm9, [arg2+16*2]
+       vmovdqu xmm12, [arg2+16*3]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm2
+       vmovdqa xmm13, xmm3
+       vpclmulqdq      xmm2, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm3, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm2, xmm9
+       vxorps  xmm2, xmm8
+       vpxor   xmm3, xmm12
+       vxorps  xmm3, xmm13
+
+       prefetchnta [arg2+fetch_dist+64]
+       vmovdqu xmm9, [arg2+16*4]
+       vmovdqu xmm12, [arg2+16*5]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm4
+       vmovdqa xmm13, xmm5
+       vpclmulqdq      xmm4, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm5, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm4, xmm9
+       vxorps  xmm4, xmm8
+       vpxor   xmm5, xmm12
+       vxorps  xmm5, xmm13
+
+       prefetchnta [arg2+fetch_dist+96]
+       vmovdqu xmm9, [arg2+16*6]
+       vmovdqu xmm12, [arg2+16*7]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm6
+       vmovdqa xmm13, xmm7
+       vpclmulqdq      xmm6, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm7, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm6, xmm9
+       vxorps  xmm6, xmm8
+       vpxor   xmm7, xmm12
+       vxorps  xmm7, xmm13
+
+       sub     arg3, 128
+
+       ; check if there is another 128B in the buffer to be able to fold
+       jge     _fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+       add     arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer
+       ; fold the 8 xmm registers to 1 xmm register with different constants
+
+       vmovdqa xmm10, [rk9]
+       vmovdqa xmm8, xmm0
+       vpclmulqdq      xmm0, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm0
+
+       vmovdqa xmm10, [rk11]
+       vmovdqa xmm8, xmm1
+       vpclmulqdq      xmm1, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm1
+
+       vmovdqa xmm10, [rk13]
+       vmovdqa xmm8, xmm2
+       vpclmulqdq      xmm2, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm2
+
+       vmovdqa xmm10, [rk15]
+       vmovdqa xmm8, xmm3
+       vpclmulqdq      xmm3, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm3
+
+       vmovdqa xmm10, [rk17]
+       vmovdqa xmm8, xmm4
+       vpclmulqdq      xmm4, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm4
+
+       vmovdqa xmm10, [rk19]
+       vmovdqa xmm8, xmm5
+       vpclmulqdq      xmm5, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm5
+
+       vmovdqa xmm10, [rk1]    ;xmm10 has rk1 and rk2
+                               ;imm value of pclmulqdq instruction will determine which constant to use
+       vmovdqa xmm8, xmm6
+       vpclmulqdq      xmm6, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm6
+
+
+       ; instead of 128, we add 112 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add     arg3, 128-16
+       jl      _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       vmovdqa xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vmovdqu xmm0, [arg2]
+       vpshufb xmm0, xmm11
+       vpxor   xmm7, xmm0
+       add     arg2, 16
+       sub     arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge     _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+_final_reduction_for_128:
+       ; check if any more data to fold. If not, compute the CRC of the final 128 bits
+       add     arg3, 16
+       je      _128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+       vmovdqa xmm2, xmm7
+
+       vmovdqu xmm1, [arg2 - 16 + arg3]
+       vpshufb xmm1, xmm11
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, arg3
+       vmovdqu xmm0, [rax]
+
+       ; shift xmm2 to the left by arg3 bytes
+       vpshufb xmm2, xmm0
+
+       ; shift xmm7 to the right by 16-arg3 bytes
+       vpxor   xmm0, [mask1]
+       vpshufb xmm7, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       ; fold 16 Bytes
+       vmovdqa xmm2, xmm1
+       vmovdqa xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa xmm10, [rk5]    ; rk5 and rk6 in xmm10
+       vmovdqa xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0x1
+       vpslldq xmm0, 8
+       vpxor   xmm7, xmm0
+
+       ;32b fold
+       vmovdqa xmm0, xmm7
+
+       vpand   xmm0, [mask2]
+
+       vpsrldq xmm7, 12
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor   xmm7, xmm0
+
+       ;barrett reduction
+_barrett:
+       vmovdqa xmm10, [rk7]    ; rk7 and rk8 in xmm10
+       vmovdqa xmm0, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x01
+       vpslldq xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x11
+
+       vpslldq xmm7, 4
+       vpxor   xmm7, xmm0
+       vpextrd eax, xmm7,1
+
+_cleanup:
+       ; scale the result back to 16 bits
+       shr     eax, 16
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa xmm6, [rsp+16*2]
+       vmovdqa xmm7, [rsp+16*3]
+       vmovdqa xmm8, [rsp+16*4]
+       vmovdqa xmm9, [rsp+16*5]
+       vmovdqa xmm10, [rsp+16*6]
+       vmovdqa xmm11, [rsp+16*7]
+       vmovdqa xmm12, [rsp+16*8]
+       vmovdqa xmm13, [rsp+16*9]
+%endif
+       add     rsp, VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      _less_than_32
+       vmovdqa xmm11, [SHUF_MASK]
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12        ; align it to its correct place
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm11     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0
+
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     _16B_reduction_loop
+
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      _cleanup
+
+       vmovdqa xmm11, [SHUF_MASK]
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12        ; align it to its correct place
+
+       cmp     arg3, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm11     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      _only_less_than_4
+
+       ;       backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg3, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg3, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg3, 1
+        jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+_zero_left:
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, r9
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm7, xmm0
+       jmp     _128_done
+
+align 16
+_exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+_only_less_than_4:
+       cmp     arg3, 3
+       jl      _only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 5
+
+       jmp     _barrett
+_only_less_than_3:
+       cmp     arg3, 2
+       jl      _only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 6
+
+       jmp     _barrett
+_only_less_than_2:
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 7
+
+       jmp     _barrett
+
+section .data
+
+; precomputed constants
+; these constants are precomputed from the poly: 0x8bb70000 (0x8bb7 scaled to 32 bits)
+align 16
+; Q = 0x18BB70000
+; rk1 = 2^(32*3) mod Q << 32
+; rk2 = 2^(32*5) mod Q << 32
+; rk3 = 2^(32*15) mod Q << 32
+; rk4 = 2^(32*17) mod Q << 32
+; rk5 = 2^(32*3) mod Q << 32
+; rk6 = 2^(32*2) mod Q << 32
+; rk7 = floor(2^64/Q)
+; rk8 = Q
+rk1:
+DQ 0x2d56000000000000
+rk2:
+DQ 0x06df000000000000
+rk3:
+DQ 0x9d9d000000000000
+rk4:
+DQ 0x7cf5000000000000
+rk5:
+DQ 0x2d56000000000000
+rk6:
+DQ 0x1368000000000000
+rk7:
+DQ 0x00000001f65a57f8
+rk8:
+DQ 0x000000018bb70000
+
+rk9:
+DQ 0xceae000000000000
+rk10:
+DQ 0xbfd6000000000000
+rk11:
+DQ 0x1e16000000000000
+rk12:
+DQ 0x713c000000000000
+rk13:
+DQ 0xf7f9000000000000
+rk14:
+DQ 0x80a6000000000000
+rk15:
+DQ 0x044c000000000000
+rk16:
+DQ 0xe658000000000000
+rk17:
+DQ 0xad18000000000000
+rk18:
+DQ 0xa497000000000000
+rk19:
+DQ 0x6ee3000000000000
+rk20:
+DQ 0xe7b5000000000000
+
+mask1:
+dq 0x8080808080808080, 0x8080808080808080
+mask2:
+dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK:
+dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;      dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;      dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;      dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;      dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;      dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;      dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;      dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;      dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;      dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;      dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;      dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;      dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;      dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;      dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;      dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_by16_10.asm b/ceph/src/isa-l/crc/crc16_t10dif_by16_10.asm
new file mode 100644 (file)
index 0000000..9f39307
--- /dev/null
@@ -0,0 +1,590 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       UINT32 crc16_t10dif_by16_10(
+;               UINT16 init_crc, //initial CRC value, 16 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf
+;
+;
+
+%include "reg_sizes.asm"
+
+%ifndef FUNCTION_NAME
+%define FUNCTION_NAME crc16_t10dif_by16_10
+%endif
+
+%if (AS_FEATURE_LEVEL) >= 10
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+
+       %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*12+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global FUNCTION_NAME:ISAL_SYM_TYPE_FUNCTION
+FUNCTION_NAME:
+
+       ; adjust the 16-bit initial_crc value, scale it to 32 bits
+       shl             arg1_low32, 16
+
+       ; After this point, code flow is exactly same as a 32-bit CRC.
+       ; The only difference is before returning eax, we will shift it right 16 bits, to scale back to 16 bits.
+
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+       vmovdqa         [rsp + XMM_SAVE + 16*8], xmm14
+       vmovdqa         [rsp + XMM_SAVE + 16*9], xmm15
+%endif
+
+       vbroadcasti32x4 zmm18, [SHUF_MASK]
+       cmp             arg3, 256
+       jl              .less_than_256
+
+       ; load the initial crc value
+       vmovd           xmm10, arg1_low32      ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with initial crc at correct place.
+       vpslldq         xmm10, 12
+
+       ; receive the initial 64B data, xor the initial crc value
+       vmovdqu8        zmm0, [arg2+16*0]
+       vmovdqu8        zmm4, [arg2+16*4]
+       vpshufb         zmm0, zmm0, zmm18
+       vpshufb         zmm4, zmm4, zmm18
+       vpxorq          zmm0, zmm10
+       vbroadcasti32x4 zmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+
+       sub             arg3, 256
+       cmp             arg3, 256
+       jl              .fold_128_B_loop
+
+       vmovdqu8        zmm7, [arg2+16*8]
+       vmovdqu8        zmm8, [arg2+16*12]
+       vpshufb         zmm7, zmm7, zmm18
+       vpshufb         zmm8, zmm8, zmm18
+       vbroadcasti32x4 zmm16, [rk_1]   ;zmm16 has rk-1 and rk-2
+       sub             arg3, 256
+
+.fold_256_B_loop:
+       add             arg2, 256
+       vmovdqu8        zmm3, [arg2+16*0]
+       vpshufb         zmm3, zmm3, zmm18
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm3
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm16, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm16, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       vmovdqu8        zmm11, [arg2+16*8]
+       vpshufb         zmm11, zmm11, zmm18
+       vpclmulqdq      zmm12, zmm7, zmm16, 0x00
+       vpclmulqdq      zmm13, zmm7, zmm16, 0x11
+       vpxorq          zmm7, zmm12, zmm13
+       vpxorq          zmm7, zmm7, zmm11
+
+       vmovdqu8        zmm17, [arg2+16*12]
+       vpshufb         zmm17, zmm17, zmm18
+       vpclmulqdq      zmm14, zmm8, zmm16, 0x00
+       vpclmulqdq      zmm15, zmm8, zmm16, 0x11
+       vpxorq          zmm8, zmm14, zmm15
+       vpxorq          zmm8, zmm8, zmm17
+
+       sub             arg3, 256
+       jge             .fold_256_B_loop
+
+       ;; Fold 256 into 128
+       add             arg2, 256
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x11
+       vpternlogq      zmm7, zmm1, zmm2, 0x96  ; xor ABC
+
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpternlogq      zmm8, zmm5, zmm6, 0x96  ; xor ABC
+
+       vmovdqa32       zmm0, zmm7
+       vmovdqa32       zmm4, zmm8
+
+       add             arg3, 128
+       jmp             .fold_128_B_register
+
+
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+.fold_128_B_loop:
+       add             arg2, 128
+       vmovdqu8        zmm8, [arg2+16*0]
+       vpshufb         zmm8, zmm8, zmm18
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x11
+       vpxorq          zmm0, zmm2, zmm1
+       vpxorq          zmm0, zmm0, zmm8
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       sub             arg3, 128
+       jge             .fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add             arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+
+.fold_128_B_register:
+       ; fold the 8 128b parts into 1 xmm register with different constants
+       vmovdqu8        zmm16, [rk9]            ; multiply by rk9-rk16
+       vmovdqu8        zmm11, [rk17]           ; multiply by rk17-rk20, rk1,rk2, 0,0
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vextracti64x2   xmm7, zmm4, 3           ; save last that has no multiplicand
+
+       vpclmulqdq      zmm5, zmm4, zmm11, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm11, 0x11
+       vmovdqa         xmm10, [rk1]            ; Needed later in reduction loop
+       vpternlogq      zmm1, zmm2, zmm5, 0x96  ; xor ABC
+       vpternlogq      zmm1, zmm6, zmm7, 0x96  ; xor ABC
+
+       vshufi64x2      zmm8, zmm1, zmm1, 0x4e ; Swap 1,0,3,2 - 01 00 11 10
+       vpxorq          ymm8, ymm8, ymm1
+       vextracti64x2   xmm5, ymm8, 1
+       vpxorq          xmm7, xmm5, xmm8
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              .final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+.16B_reduction_loop:
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x11
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x00
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpshufb         xmm0, xmm0, xmm18
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             .16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+.final_reduction_for_128:
+       add             arg3, 16
+       je              .128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+.get_last_two_xmms:
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+       vpshufb         xmm1, xmm18
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table + 16]
+       sub             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+       vpshufb         xmm2, xmm0
+       vpxor           xmm0, [mask1]
+       vpshufb         xmm7, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x11
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x00
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm1
+
+.128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0x01       ; H*L
+       vpslldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;32b fold
+       vmovdqa         xmm0, xmm7
+       vpand           xmm0, [mask2]
+       vpsrldq         xmm7, 12
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm0
+
+       ;barrett reduction
+.barrett:
+       vmovdqa         xmm10, [rk7]    ; rk7 and rk8 in xmm10
+       vmovdqa         xmm0, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x01
+       vpslldq         xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x11
+
+       vpslldq         xmm7, 4
+       vpxor           xmm7, xmm0
+       vpextrd         eax, xmm7, 1
+
+.cleanup:
+       ; scale the result back to 16 bits
+       shr             eax, 16
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+       vmovdqa         xmm14, [rsp + XMM_SAVE + 16*8]
+       vmovdqa         xmm15, [rsp + XMM_SAVE + 16*9]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+.less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      .less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12                ; align it to its correct place
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpshufb xmm7, xmm18             ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     .16B_reduction_loop
+
+
+align 16
+.less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      .cleanup
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12                ; align it to its correct place
+
+       cmp     arg3, 16
+       je      .exact_16_left
+       jl      .less_than_16_left
+
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0              ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]            ; rk1 and rk2 in xmm10
+       jmp     .get_last_two_xmms
+
+align 16
+.less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      .only_less_than_4
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      .less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+.less_than_8_left:
+
+       cmp     arg3, 4
+       jl      .less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+.less_than_4_left:
+
+       cmp     arg3, 2
+       jl      .less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+.less_than_2_left:
+       cmp     arg3, 1
+       jl      .zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+.zero_left:
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, r9
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm7,xmm0
+       jmp     .128_done
+
+align 16
+.exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       jmp     .128_done
+
+.only_less_than_4:
+       cmp     arg3, 3
+       jl      .only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 5
+       jmp     .barrett
+
+.only_less_than_3:
+       cmp     arg3, 2
+       jl      .only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 6
+       jmp     .barrett
+
+.only_less_than_2:
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 7
+       jmp     .barrett
+
+section .data
+align 32
+
+%ifndef USE_CONSTS
+; precomputed constants
+
+rk_1: dq 0xdccf000000000000
+rk_2: dq 0x4b0b000000000000
+rk1:  dq 0x2d56000000000000
+rk2:  dq 0x06df000000000000
+rk3:  dq 0x9d9d000000000000
+rk4:  dq 0x7cf5000000000000
+rk5:  dq 0x2d56000000000000
+rk6:  dq 0x1368000000000000
+rk7:  dq 0x00000001f65a57f8
+rk8:  dq 0x000000018bb70000
+rk9:  dq 0xceae000000000000
+rk10: dq 0xbfd6000000000000
+rk11: dq 0x1e16000000000000
+rk12: dq 0x713c000000000000
+rk13: dq 0xf7f9000000000000
+rk14: dq 0x80a6000000000000
+rk15: dq 0x044c000000000000
+rk16: dq 0xe658000000000000
+rk17: dq 0xad18000000000000
+rk18: dq 0xa497000000000000
+rk19: dq 0x6ee3000000000000
+rk20: dq 0xe7b5000000000000
+
+rk_1b: dq 0x2d56000000000000
+rk_2b: dq 0x06df000000000000
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%else
+INCLUDE_CONSTS
+%endif
+
+mask1: dq 0x8080808080808080, 0x8080808080808080
+mask2: dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK: dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+dq 0x8080808080808080, 0x0f0e0d0c0b0a0908
+dq 0x8080808080808080, 0x8080808080808080
+
+%else  ; Assembler doesn't understand these opcodes. Add empty symbol for windows.
+%ifidn __OUTPUT_FORMAT__, win64
+global no_ %+ FUNCTION_NAME
+no_ %+ FUNCTION_NAME %+ :
+%endif
+%endif ; (AS_FEATURE_LEVEL) >= 10
index f79f4f6dc6314fe57685404210835780bb352164..722ed95493090173e057b346da8b6699883e1686 100644 (file)
@@ -66,7 +66,7 @@ section .text
 %endif
 
 align 16
-global crc16_t10dif_by4:function
+global crc16_t10dif_by4:ISAL_SYM_TYPE_FUNCTION
 crc16_t10dif_by4:
 
        ; adjust the 16-bit initial_crc value, scale it to 32 bits
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_copy_by4.asm b/ceph/src/isa-l/crc/crc16_t10dif_copy_by4.asm
new file mode 100644 (file)
index 0000000..fd9b754
--- /dev/null
@@ -0,0 +1,598 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+;       Function API:
+;       UINT16 crc16_t10dif_copy_by4(
+;               UINT16 init_crc, //initial CRC value, 16 bits
+;               unsigned char *dst, //buffer pointer destination for copy
+;               const unsigned char *src, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
+;
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+       %xdefine        arg4 r9
+       %xdefine        tmp1 r10
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+       %xdefine        arg4 rcx
+       %xdefine        tmp1 r10
+       %xdefine        arg1_low32 edi
+%endif
+
+align 16
+global crc16_t10dif_copy_by4:ISAL_SYM_TYPE_FUNCTION
+crc16_t10dif_copy_by4:
+
+       ; adjust the 16-bit initial_crc value, scale it to 32 bits
+       shl     arg1_low32, 16
+
+       ; After this point, code flow is exactly same as a 32-bit CRC.
+       ; The only difference is before returning eax, we will shift
+       ; it right 16 bits, to scale back to 16 bits.
+
+       sub     rsp,16*4+8
+
+       ; push the xmm registers into the stack to maintain
+       movdqa [rsp+16*2],xmm6
+       movdqa [rsp+16*3],xmm7
+
+       ; check if smaller than 128B
+       cmp     arg4, 128
+
+       ; for sizes less than 128, we can't fold 64B at a time...
+       jl      _less_than_128
+
+
+       ; load the initial crc value
+       movd    xmm6, arg1_low32        ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to
+       ; be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with
+       ; initial crc at correct place.
+       pslldq  xmm6, 12
+
+       movdqa xmm7, [SHUF_MASK]
+       ; receive the initial 64B data, xor the initial crc value
+       movdqu  xmm0, [arg3]
+       movdqu  xmm1, [arg3+16]
+       movdqu  xmm2, [arg3+32]
+       movdqu  xmm3, [arg3+48]
+
+       ; copy initial data
+       movdqu  [arg2], xmm0
+       movdqu  [arg2+16], xmm1
+       movdqu  [arg2+32], xmm2
+       movdqu  [arg2+48], xmm3
+
+       pshufb  xmm0, xmm7
+       ; XOR the initial_crc value
+       pxor    xmm0, xmm6
+       pshufb  xmm1, xmm7
+       pshufb  xmm2, xmm7
+       pshufb  xmm3, xmm7
+
+       movdqa  xmm6, [rk3]     ;xmm6 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction
+                                       ;will determine which constant to use
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       ; we subtract 128 instead of 64 to save one instruction from the loop
+       sub     arg4, 128
+
+       ; at this section of the code, there is 64*x+y (0<=y<64) bytes of
+       ; buffer. The _fold_64_B_loop
+       ; loop will fold 64B at a time until we have 64+y Bytes of buffer
+
+
+       ; fold 64B at a time. This section of the code folds 4 xmm
+       ; registers in parallel
+_fold_64_B_loop:
+
+       ; update the buffer pointer
+       add     arg3, 64                ;    buf += 64;
+       add     arg2, 64
+
+       prefetchnta [arg3+fetch_dist+0]
+       movdqu  xmm4, xmm0
+       movdqu  xmm5, xmm1
+
+       pclmulqdq       xmm0, xmm6 , 0x11
+       pclmulqdq       xmm1, xmm6 , 0x11
+
+       pclmulqdq       xmm4, xmm6, 0x0
+       pclmulqdq       xmm5, xmm6, 0x0
+
+       pxor    xmm0, xmm4
+       pxor    xmm1, xmm5
+
+       prefetchnta [arg3+fetch_dist+32]
+       movdqu  xmm4, xmm2
+       movdqu  xmm5, xmm3
+
+       pclmulqdq       xmm2, xmm6, 0x11
+       pclmulqdq       xmm3, xmm6, 0x11
+
+       pclmulqdq       xmm4, xmm6, 0x0
+       pclmulqdq       xmm5, xmm6, 0x0
+
+       pxor    xmm2, xmm4
+       pxor    xmm3, xmm5
+
+       movdqu  xmm4, [arg3]
+       movdqu  xmm5, [arg3+16]
+       movdqu  [arg2], xmm4
+       movdqu  [arg2+16], xmm5
+       pshufb  xmm4, xmm7
+       pshufb  xmm5, xmm7
+       pxor    xmm0, xmm4
+       pxor    xmm1, xmm5
+
+       movdqu  xmm4, [arg3+32]
+       movdqu  xmm5, [arg3+48]
+       movdqu  [arg2+32], xmm4
+       movdqu  [arg2+48], xmm5
+       pshufb  xmm4, xmm7
+       pshufb  xmm5, xmm7
+
+       pxor    xmm2, xmm4
+       pxor    xmm3, xmm5
+
+       sub     arg4, 64
+
+       ; check if there is another 64B in the buffer to be able to fold
+       jge     _fold_64_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+       add     arg3, 64
+       add     arg2, 64
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer
+       ; the 64B of folded data is in 4 of the xmm registers: xmm0, xmm1, xmm2, xmm3
+
+
+       ; fold the 4 xmm registers to 1 xmm register with different constants
+
+       movdqa  xmm6, [rk1]     ;xmm6 has rk1 and rk2
+                                       ;imm value of pclmulqdq instruction will
+                                       ;determine which constant to use
+
+       movdqa  xmm4, xmm0
+       pclmulqdq       xmm0, xmm6, 0x11
+       pclmulqdq       xmm4, xmm6, 0x0
+       pxor    xmm1, xmm4
+       pxor    xmm1, xmm0
+
+       movdqa  xmm4, xmm1
+       pclmulqdq       xmm1, xmm6, 0x11
+       pclmulqdq       xmm4, xmm6, 0x0
+       pxor    xmm2, xmm4
+       pxor    xmm2, xmm1
+
+       movdqa  xmm4, xmm2
+       pclmulqdq       xmm2, xmm6, 0x11
+       pclmulqdq       xmm4, xmm6, 0x0
+       pxor    xmm3, xmm4
+       pxor    xmm3, xmm2
+
+
+       ; instead of 64, we add 48 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add     arg4, 64-16
+       jl      _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes
+       ; is in register xmm3 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       movdqa  xmm4, xmm3
+       pclmulqdq       xmm3, xmm6, 0x11
+       pclmulqdq       xmm4, xmm6, 0x0
+       pxor    xmm3, xmm4
+       movdqu  xmm0, [arg3]
+       movdqu  [arg2], xmm0
+       pshufb  xmm0, xmm7
+       pxor    xmm3, xmm0
+       add     arg3, 16
+       add     arg2, 16
+       sub     arg4, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg4, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge     _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm3 register
+
+
+_final_reduction_for_128:
+       ; check if any more data to fold. If not, compute the CRC of the final 128 bits
+       add     arg4, 16
+       je      _128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer,
+       ; we can offset the input pointer before the actual point,
+       ; to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+       movdqa  xmm2, xmm3
+
+       movdqu  xmm1, [arg3 - 16 + arg4]
+       movdqu  [arg2 - 16 + arg4], xmm1
+       pshufb  xmm1, xmm7
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, arg4
+       movdqu  xmm0, [rax]
+
+       ; shift xmm2 to the left by arg4 bytes
+       pshufb  xmm2, xmm0
+
+       ; shift xmm3 to the right by 16-arg4 bytes
+       pxor    xmm0, [mask1]
+       pshufb  xmm3, xmm0
+       pblendvb        xmm1, xmm2      ;xmm0 is implicit
+
+       ; fold 16 Bytes
+       movdqa  xmm2, xmm1
+       movdqa  xmm4, xmm3
+       pclmulqdq       xmm3, xmm6, 0x11
+       pclmulqdq       xmm4, xmm6, 0x0
+       pxor    xmm3, xmm4
+       pxor    xmm3, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       movdqa  xmm6, [rk5]     ; rk5 and rk6 in xmm6
+       movdqa  xmm0, xmm3
+
+       ;64b fold
+       pclmulqdq       xmm3, xmm6, 0x1
+       pslldq  xmm0, 8
+       pxor    xmm3, xmm0
+
+       ;32b fold
+       movdqa  xmm0, xmm3
+
+       pand    xmm0, [mask2]
+
+       psrldq  xmm3, 12
+       pclmulqdq       xmm3, xmm6, 0x10
+       pxor    xmm3, xmm0
+
+       ;barrett reduction
+_barrett:
+       movdqa  xmm6, [rk7]     ; rk7 and rk8 in xmm6
+       movdqa  xmm0, xmm3
+       pclmulqdq       xmm3, xmm6, 0x01
+       pslldq  xmm3, 4
+       pclmulqdq       xmm3, xmm6, 0x11
+
+       pslldq  xmm3, 4
+       pxor    xmm3, xmm0
+       pextrd  eax, xmm3,1
+
+_cleanup:
+       ; scale the result back to 16 bits
+       shr     eax, 16
+       movdqa  xmm6, [rsp+16*2]
+       movdqa  xmm7, [rsp+16*3]
+       add     rsp,16*4+8
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_128:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg4, 32
+       jl      _less_than_32
+       movdqa xmm7, [SHUF_MASK]
+
+       ; if there is, load the constants
+       movdqa  xmm6, [rk1]     ; rk1 and rk2 in xmm6
+
+       movd    xmm0, arg1_low32        ; get the initial crc value
+       pslldq  xmm0, 12        ; align it to its correct place
+       movdqu  xmm3, [arg3]    ; load the plaintext
+       movdqu  [arg2], xmm3    ; store copy
+       pshufb  xmm3, xmm7      ; byte-reflect the plaintext
+       pxor    xmm3, xmm0
+
+
+       ; update the buffer pointer
+       add     arg3, 16
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg4, 32
+
+       jmp     _16B_reduction_loop
+
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg4, arg4
+       je      _cleanup
+
+       movdqa xmm7, [SHUF_MASK]
+
+       movd    xmm0, arg1_low32        ; get the initial crc value
+       pslldq  xmm0, 12                ; align it to its correct place
+
+       cmp     arg4, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       movdqu  xmm3, [arg3]    ; load the plaintext
+       movdqu  [arg2], xmm3    ; store the copy
+       pshufb  xmm3, xmm7      ; byte-reflect the plaintext
+       pxor    xmm3, xmm0      ; xor the initial crc value
+       add     arg3, 16
+       add     arg2, 16
+       sub     arg4, 16
+       movdqa  xmm6, [rk1]     ; rk1 and rk2 in xmm6
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       pxor    xmm1, xmm1
+       mov     r11, rsp
+       movdqa  [r11], xmm1
+
+       cmp     arg4, 4
+       jl      _only_less_than_4
+
+       ;       backup the counter value
+       mov     tmp1, arg4
+       cmp     arg4, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg3]
+       mov     [arg2], rax
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg4, 8
+       add     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg4, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg3]
+       mov     [arg2], eax
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg4, 4
+       add     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg4, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg3]
+       mov     [arg2], ax
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg4, 2
+       add     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg4, 1
+       jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+_zero_left:
+       movdqa  xmm3, [rsp]
+       pshufb  xmm3, xmm7
+       pxor    xmm3, xmm0      ; xor the initial crc value
+
+       ; shl tmp1, 4
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, tmp1
+       movdqu  xmm0, [rax]
+       pxor    xmm0, [mask1]
+
+       pshufb  xmm3, xmm0
+       jmp     _128_done
+
+align 16
+_exact_16_left:
+       movdqu  xmm3, [arg3]
+       movdqu  [arg2], xmm3
+       pshufb  xmm3, xmm7
+       pxor    xmm3, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+_only_less_than_4:
+       cmp     arg4, 3
+       jl      _only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+
+       mov     al, [arg3+1]
+       mov     [arg2+1], al
+       mov     [r11+1], al
+
+       mov     al, [arg3+2]
+       mov     [arg2+2], al
+       mov     [r11+2], al
+
+       movdqa  xmm3, [rsp]
+       pshufb  xmm3, xmm7
+       pxor    xmm3, xmm0      ; xor the initial crc value
+
+       psrldq  xmm3, 5
+
+       jmp     _barrett
+_only_less_than_3:
+       cmp     arg4, 2
+       jl      _only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+
+       mov     al, [arg3+1]
+       mov     [arg2+1], al
+       mov     [r11+1], al
+
+       movdqa  xmm3, [rsp]
+       pshufb  xmm3, xmm7
+       pxor    xmm3, xmm0      ; xor the initial crc value
+
+       psrldq  xmm3, 6
+
+       jmp     _barrett
+_only_less_than_2:
+
+       ; load 1 Byte
+       mov     al, [arg3]
+       mov     [arg2],al
+       mov     [r11], al
+
+       movdqa  xmm3, [rsp]
+       pshufb  xmm3, xmm7
+       pxor    xmm3, xmm0      ; xor the initial crc value
+
+       psrldq  xmm3, 7
+
+       jmp     _barrett
+
+section .data
+
+; precomputed constants
+; these constants are precomputed from the poly: 0x8bb70000 (0x8bb7 scaled to 32 bits)
+align 16
+; Q = 0x18BB70000
+; rk1 = 2^(32*3) mod Q << 32
+; rk2 = 2^(32*5) mod Q << 32
+; rk3 = 2^(32*15) mod Q << 32
+; rk4 = 2^(32*17) mod Q << 32
+; rk5 = 2^(32*3) mod Q << 32
+; rk6 = 2^(32*2) mod Q << 32
+; rk7 = floor(2^64/Q)
+; rk8 = Q
+rk1:
+DQ 0x2d56000000000000
+rk2:
+DQ 0x06df000000000000
+rk3:
+DQ 0x044c000000000000
+rk4:
+DQ 0xe658000000000000
+rk5:
+DQ 0x2d56000000000000
+rk6:
+DQ 0x1368000000000000
+rk7:
+DQ 0x00000001f65a57f8
+rk8:
+DQ 0x000000018bb70000
+mask1:
+dq 0x8080808080808080, 0x8080808080808080
+mask2:
+dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK:
+dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;      dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;      dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;      dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;      dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;      dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;      dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;      dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;      dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;      dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;      dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;      dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;      dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;      dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;      dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;      dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+
+;;;       func                   core, ver, snum
+slversion crc16_t10dif_copy_by4, 05,   02,  0000
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_copy_by4_02.asm b/ceph/src/isa-l/crc/crc16_t10dif_copy_by4_02.asm
new file mode 100644 (file)
index 0000000..e12d81f
--- /dev/null
@@ -0,0 +1,595 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+;       Function API:
+;       UINT16 crc16_t10dif_copy_by4_02(
+;               UINT16 init_crc, //initial CRC value, 16 bits
+;               unsigned char *dst, //buffer pointer destination for copy
+;               const unsigned char *src, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
+;
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+       %xdefine        arg4 r9
+       %xdefine        tmp1 r10
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+       %xdefine        arg4 rcx
+       %xdefine        tmp1 r10
+       %xdefine        arg1_low32 edi
+%endif
+
+align 16
+global crc16_t10dif_copy_by4_02:ISAL_SYM_TYPE_FUNCTION
+crc16_t10dif_copy_by4_02:
+
+       ; adjust the 16-bit initial_crc value, scale it to 32 bits
+       shl     arg1_low32, 16
+
+       ; After this point, code flow is exactly same as a 32-bit CRC.
+       ; The only difference is before returning eax, we will shift
+       ; it right 16 bits, to scale back to 16 bits.
+
+       sub     rsp,16*4+8
+
+       ; push the xmm registers into the stack to maintain
+       movdqa [rsp+16*2],xmm6
+       movdqa [rsp+16*3],xmm7
+
+       ; check if smaller than 128B
+       cmp     arg4, 128
+
+       ; for sizes less than 128, we can't fold 64B at a time...
+       jl      _less_than_128
+
+
+       ; load the initial crc value
+       vmovd   xmm6, arg1_low32        ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to
+       ; be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with
+       ; initial crc at correct place.
+       vpslldq xmm6, 12
+
+       vmovdqa xmm7, [SHUF_MASK]
+       ; receive the initial 64B data, xor the initial crc value
+       vmovdqu xmm0, [arg3]
+       vmovdqu xmm1, [arg3+16]
+       vmovdqu xmm2, [arg3+32]
+       vmovdqu xmm3, [arg3+48]
+
+       ; copy initial data
+       vmovdqu [arg2], xmm0
+       vmovdqu [arg2+16], xmm1
+       vmovdqu [arg2+32], xmm2
+       vmovdqu [arg2+48], xmm3
+
+       vpshufb xmm0, xmm7
+       ; XOR the initial_crc value
+       vpxor   xmm0, xmm6
+       vpshufb xmm1, xmm7
+       vpshufb xmm2, xmm7
+       vpshufb xmm3, xmm7
+
+       vmovdqa xmm6, [rk3]     ;xmm6 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction
+                                       ;will determine which constant to use
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       ; we subtract 128 instead of 64 to save one instruction from the loop
+       sub     arg4, 128
+
+       ; at this section of the code, there is 64*x+y (0<=y<64) bytes of
+       ; buffer. The _fold_64_B_loop
+       ; loop will fold 64B at a time until we have 64+y Bytes of buffer
+
+
+       ; fold 64B at a time. This section of the code folds 4 xmm
+       ; registers in parallel
+_fold_64_B_loop:
+
+       ; update the buffer pointer
+       add     arg3, 64                ;    buf += 64;
+       add     arg2, 64
+
+       prefetchnta [arg3+fetch_dist+0]
+       vmovdqu xmm4, xmm0
+       vmovdqu xmm5, xmm1
+
+       vpclmulqdq      xmm0, xmm6 , 0x11
+       vpclmulqdq      xmm1, xmm6 , 0x11
+
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpclmulqdq      xmm5, xmm6, 0x0
+
+       vpxor   xmm0, xmm4
+       vpxor   xmm1, xmm5
+
+       prefetchnta [arg3+fetch_dist+32]
+       vmovdqu xmm4, xmm2
+       vmovdqu xmm5, xmm3
+
+       vpclmulqdq      xmm2, xmm6, 0x11
+       vpclmulqdq      xmm3, xmm6, 0x11
+
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpclmulqdq      xmm5, xmm6, 0x0
+
+       vpxor   xmm2, xmm4
+       vpxor   xmm3, xmm5
+
+       vmovdqu xmm4, [arg3]
+       vmovdqu xmm5, [arg3+16]
+       vmovdqu [arg2], xmm4
+       vmovdqu [arg2+16], xmm5
+       vpshufb xmm4, xmm7
+       vpshufb xmm5, xmm7
+       vpxor   xmm0, xmm4
+       vpxor   xmm1, xmm5
+
+       vmovdqu xmm4, [arg3+32]
+       vmovdqu xmm5, [arg3+48]
+       vmovdqu [arg2+32], xmm4
+       vmovdqu [arg2+48], xmm5
+       vpshufb xmm4, xmm7
+       vpshufb xmm5, xmm7
+
+       vpxor   xmm2, xmm4
+       vpxor   xmm3, xmm5
+
+       sub     arg4, 64
+
+       ; check if there is another 64B in the buffer to be able to fold
+       jge     _fold_64_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+       add     arg3, 64
+       add     arg2, 64
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer
+       ; the 64B of folded data is in 4 of the xmm registers: xmm0, xmm1, xmm2, xmm3
+
+
+       ; fold the 4 xmm registers to 1 xmm register with different constants
+
+       vmovdqa xmm6, [rk1]     ;xmm6 has rk1 and rk2
+                                       ;imm value of pclmulqdq instruction will
+                                       ;determine which constant to use
+
+       vmovdqa xmm4, xmm0
+       vpclmulqdq      xmm0, xmm6, 0x11
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpxor   xmm1, xmm4
+       vpxor   xmm1, xmm0
+
+       vmovdqa xmm4, xmm1
+       vpclmulqdq      xmm1, xmm6, 0x11
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpxor   xmm2, xmm4
+       vpxor   xmm2, xmm1
+
+       vmovdqa xmm4, xmm2
+       vpclmulqdq      xmm2, xmm6, 0x11
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpxor   xmm3, xmm4
+       vpxor   xmm3, xmm2
+
+
+       ; instead of 64, we add 48 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add     arg4, 64-16
+       jl      _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes
+       ; is in register xmm3 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       vmovdqa xmm4, xmm3
+       vpclmulqdq      xmm3, xmm6, 0x11
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpxor   xmm3, xmm4
+       vmovdqu xmm0, [arg3]
+       vmovdqu [arg2], xmm0
+       vpshufb xmm0, xmm7
+       vpxor   xmm3, xmm0
+       add     arg3, 16
+       add     arg2, 16
+       sub     arg4, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg4, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge     _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm3 register
+
+
+_final_reduction_for_128:
+       ; check if any more data to fold. If not, compute the CRC of the final 128 bits
+       add     arg4, 16
+       je      _128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer,
+       ; we can offset the input pointer before the actual point,
+       ; to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+       vmovdqa xmm2, xmm3
+
+       vmovdqu xmm1, [arg3 - 16 + arg4]
+       vmovdqu [arg2 - 16 + arg4], xmm1
+       vpshufb xmm1, xmm7
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, arg4
+       vmovdqu xmm0, [rax]
+
+       ; shift xmm2 to the left by arg4 bytes
+       vpshufb xmm2, xmm0
+
+       ; shift xmm3 to the right by 16-arg4 bytes
+       vpxor   xmm0, [mask1]
+       vpshufb xmm3, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       ; fold 16 Bytes
+       vmovdqa xmm2, xmm1
+       vmovdqa xmm4, xmm3
+       vpclmulqdq      xmm3, xmm6, 0x11
+       vpclmulqdq      xmm4, xmm6, 0x0
+       vpxor   xmm3, xmm4
+       vpxor   xmm3, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa xmm6, [rk5]     ; rk5 and rk6 in xmm6
+       vmovdqa xmm0, xmm3
+
+       ;64b fold
+       vpclmulqdq      xmm3, xmm6, 0x1
+       vpslldq xmm0, 8
+       vpxor   xmm3, xmm0
+
+       ;32b fold
+       vmovdqa xmm0, xmm3
+
+       vpand   xmm0, [mask2]
+
+       vpsrldq xmm3, 12
+       vpclmulqdq      xmm3, xmm6, 0x10
+       vpxor   xmm3, xmm0
+
+       ;barrett reduction
+_barrett:
+       vmovdqa xmm6, [rk7]     ; rk7 and rk8 in xmm6
+       vmovdqa xmm0, xmm3
+       vpclmulqdq      xmm3, xmm6, 0x01
+       vpslldq xmm3, 4
+       vpclmulqdq      xmm3, xmm6, 0x11
+
+       vpslldq xmm3, 4
+       vpxor   xmm3, xmm0
+       vpextrd eax, xmm3,1
+
+_cleanup:
+       ; scale the result back to 16 bits
+       shr     eax, 16
+       vmovdqa xmm6, [rsp+16*2]
+       vmovdqa xmm7, [rsp+16*3]
+       add     rsp,16*4+8
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_128:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg4, 32
+       jl      _less_than_32
+       vmovdqa xmm7, [SHUF_MASK]
+
+       ; if there is, load the constants
+       vmovdqa xmm6, [rk1]     ; rk1 and rk2 in xmm6
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12        ; align it to its correct place
+       vmovdqu xmm3, [arg3]    ; load the plaintext
+       vmovdqu [arg2], xmm3    ; store copy
+       vpshufb xmm3, xmm7      ; byte-reflect the plaintext
+       vpxor   xmm3, xmm0
+
+
+       ; update the buffer pointer
+       add     arg3, 16
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg4, 32
+
+       jmp     _16B_reduction_loop
+
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg4, arg4
+       je      _cleanup
+
+       vmovdqa xmm7, [SHUF_MASK]
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12                ; align it to its correct place
+
+       cmp     arg4, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       vmovdqu xmm3, [arg3]    ; load the plaintext
+       vmovdqu [arg2], xmm3    ; store the copy
+       vpshufb xmm3, xmm7      ; byte-reflect the plaintext
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+       add     arg3, 16
+       add     arg2, 16
+       sub     arg4, 16
+       vmovdqa xmm6, [rk1]     ; rk1 and rk2 in xmm6
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg4, 4
+       jl      _only_less_than_4
+
+       ;       backup the counter value
+       mov     tmp1, arg4
+       cmp     arg4, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg3]
+       mov     [arg2], rax
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg4, 8
+       add     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg4, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg3]
+       mov     [arg2], eax
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg4, 4
+       add     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg4, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg3]
+       mov     [arg2], ax
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg4, 2
+       add     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg4, 1
+       jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+_zero_left:
+       vmovdqa xmm3, [rsp]
+       vpshufb xmm3, xmm7
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+
+       ; shl tmp1, 4
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, tmp1
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm3, xmm0
+       jmp     _128_done
+
+align 16
+_exact_16_left:
+       vmovdqu xmm3, [arg3]
+       vmovdqu [arg2], xmm3
+       vpshufb xmm3, xmm7
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+_only_less_than_4:
+       cmp     arg4, 3
+       jl      _only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+
+       mov     al, [arg3+1]
+       mov     [arg2+1], al
+       mov     [r11+1], al
+
+       mov     al, [arg3+2]
+       mov     [arg2+2], al
+       mov     [r11+2], al
+
+       vmovdqa xmm3, [rsp]
+       vpshufb xmm3, xmm7
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm3, 5
+
+       jmp     _barrett
+_only_less_than_3:
+       cmp     arg4, 2
+       jl      _only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg3]
+       mov     [arg2], al
+       mov     [r11], al
+
+       mov     al, [arg3+1]
+       mov     [arg2+1], al
+       mov     [r11+1], al
+
+       vmovdqa xmm3, [rsp]
+       vpshufb xmm3, xmm7
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm3, 6
+
+       jmp     _barrett
+_only_less_than_2:
+
+       ; load 1 Byte
+       mov     al, [arg3]
+       mov     [arg2],al
+       mov     [r11], al
+
+       vmovdqa xmm3, [rsp]
+       vpshufb xmm3, xmm7
+       vpxor   xmm3, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm3, 7
+
+       jmp     _barrett
+
+section .data
+
+; precomputed constants
+; these constants are precomputed from the poly: 0x8bb70000 (0x8bb7 scaled to 32 bits)
+align 16
+; Q = 0x18BB70000
+; rk1 = 2^(32*3) mod Q << 32
+; rk2 = 2^(32*5) mod Q << 32
+; rk3 = 2^(32*15) mod Q << 32
+; rk4 = 2^(32*17) mod Q << 32
+; rk5 = 2^(32*3) mod Q << 32
+; rk6 = 2^(32*2) mod Q << 32
+; rk7 = floor(2^64/Q)
+; rk8 = Q
+rk1:
+DQ 0x2d56000000000000
+rk2:
+DQ 0x06df000000000000
+rk3:
+DQ 0x044c000000000000
+rk4:
+DQ 0xe658000000000000
+rk5:
+DQ 0x2d56000000000000
+rk6:
+DQ 0x1368000000000000
+rk7:
+DQ 0x00000001f65a57f8
+rk8:
+DQ 0x000000018bb70000
+mask1:
+dq 0x8080808080808080, 0x8080808080808080
+mask2:
+dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK:
+dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;      dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;      dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;      dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;      dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;      dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;      dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;      dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;      dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;      dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;      dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;      dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;      dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;      dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;      dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;      dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_copy_perf.c b/ceph/src/isa-l/crc/crc16_t10dif_copy_perf.c
new file mode 100644 (file)
index 0000000..17cba6b
--- /dev/null
@@ -0,0 +1,84 @@
+/**********************************************************************
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <sys/time.h>
+#include "crc.h"
+#include "test.h"
+
+//#define CACHED_TEST
+#ifdef CACHED_TEST
+// Cached test, loop many times over small dataset
+# define TEST_LEN     8*1024
+# define TEST_TYPE_STR "_warm"
+#else
+// Uncached test.  Pull from large mem base.
+#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
+#  define TEST_LEN     (2 * GT_L3_CACHE)
+#  define TEST_TYPE_STR "_cold"
+#endif
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+#define TEST_MEM TEST_LEN
+
+int main(int argc, char *argv[])
+{
+       void *src, *dst;
+       uint16_t crc;
+       struct perf start;
+
+       printf("crc16_t10dif_copy_perf:\n");
+
+       if (posix_memalign(&src, 1024, TEST_LEN)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       if (posix_memalign(&dst, 1024, TEST_LEN)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+
+       printf("Start timed tests\n");
+       fflush(0);
+
+       memset(src, 0, TEST_LEN);
+       BENCHMARK(&start, BENCHMARK_TIME, crc =
+                 crc16_t10dif_copy(TEST_SEED, dst, src, TEST_LEN));
+       printf("crc16_t10dif_copy" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)TEST_LEN);
+
+       printf("finish 0x%x\n", crc);
+       return 0;
+}
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_copy_test.c b/ceph/src/isa-l/crc/crc16_t10dif_copy_test.c
new file mode 100644 (file)
index 0000000..4c398c4
--- /dev/null
@@ -0,0 +1,175 @@
+/**********************************************************************
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "crc.h"
+#include "crc_ref.h"
+
+#ifndef RANDOMS
+# define RANDOMS   20
+#endif
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+#define MAX_BUF    2345
+#define TEST_SIZE  217
+#define TEST_LEN  (8 * 1024)
+
+typedef uint16_t u16;
+typedef uint8_t u8;
+
+// bitwise crc version
+uint16_t crc16_t10dif_copy_ref(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len);
+
+void rand_buffer(unsigned char *buf, long buffer_size)
+{
+       long i;
+       for (i = 0; i < buffer_size; i++)
+               buf[i] = rand();
+}
+
+int memtst(unsigned char *buf, unsigned char c, int len)
+{
+       int i;
+       for (i = 0; i < len; i++)
+               if (*buf++ != c)
+                       return 1;
+
+       return 0;
+}
+
+int crc_copy_check(const char *description, u8 * dst, u8 * src, u8 dst_fill_val, int len,
+                  int tot)
+{
+       u16 seed;
+       int rem;
+
+       assert(tot >= len);
+       seed = rand();
+       rem = tot - len;
+       memset(dst, dst_fill_val, tot);
+
+       // multi-binary crc version
+       u16 crc_dut = crc16_t10dif_copy(seed, dst, src, len);
+       u16 crc_ref = crc16_t10dif(seed, src, len);
+       if (crc_dut != crc_ref) {
+               printf("%s, crc gen fail: 0x%4x 0x%4x len=%d\n", description, crc_dut,
+                      crc_ref, len);
+               return 1;
+       } else if (memcmp(dst, src, len)) {
+               printf("%s, copy fail: len=%d\n", description, len);
+               return 1;
+       } else if (memtst(&dst[len], dst_fill_val, rem)) {
+               printf("%s, writeover fail: len=%d\n", description, len);
+               return 1;
+       }
+       // bitwise crc version
+       crc_dut = crc16_t10dif_copy_ref(seed, dst, src, len);
+       crc_ref = crc16_t10dif_ref(seed, src, len);
+       if (crc_dut != crc_ref) {
+               printf("%s, crc gen fail (table-driven): 0x%4x 0x%4x len=%d\n", description,
+                      crc_dut, crc_ref, len);
+               return 1;
+       } else if (memcmp(dst, src, len)) {
+               printf("%s, copy fail (table driven): len=%d\n", description, len);
+               return 1;
+       } else if (memtst(&dst[len], dst_fill_val, rem)) {
+               printf("%s, writeover fail (table driven): len=%d\n", description, len);
+               return 1;
+       }
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       int r = 0;
+       int i;
+       int len, tot;
+       u8 *src_raw, *dst_raw;
+       u8 *src, *dst;
+
+       printf("Test crc16_t10dif_copy_test:\n");
+       src_raw = (u8 *) malloc(TEST_LEN);
+       dst_raw = (u8 *) malloc(TEST_LEN);
+       if (NULL == src_raw || NULL == dst_raw) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       src = src_raw;
+       dst = dst_raw;
+
+       srand(TEST_SEED);
+
+       // Test of all zeros
+       memset(src, 0, TEST_LEN);
+       r |= crc_copy_check("zero tst", dst, src, 0x5e, MAX_BUF, TEST_LEN);
+
+       // Another simple test pattern
+       memset(src, 0xff, TEST_LEN);
+       r |= crc_copy_check("simp tst", dst, src, 0x5e, MAX_BUF, TEST_LEN);
+
+       // Do a few short len random data tests
+       rand_buffer(src, TEST_LEN);
+       rand_buffer(dst, TEST_LEN);
+       for (i = 0; i < MAX_BUF; i++) {
+               r |= crc_copy_check("short len", dst, src, rand(), i, MAX_BUF);
+       }
+       printf(".");
+
+       // Do a few longer tests, random data
+       for (i = TEST_LEN; i >= (TEST_LEN - TEST_SIZE); i--) {
+               r |= crc_copy_check("long len", dst, src, rand(), i, TEST_LEN);
+       }
+       printf(".");
+
+       // Do random size, random data
+       for (i = 0; i < RANDOMS; i++) {
+               len = rand() % TEST_LEN;
+               r |= crc_copy_check("rand len", dst, src, rand(), len, TEST_LEN);
+       }
+       printf(".");
+
+       // Run tests at end of buffer
+       for (i = 0; i < RANDOMS; i++) {
+               len = rand() % TEST_LEN;
+               src = &src_raw[TEST_LEN - len - 1];
+               dst = &dst_raw[TEST_LEN - len - 1];
+               tot = len;
+               r |= crc_copy_check("end of buffer", dst, src, rand(), len, tot);
+       }
+       printf(".");
+
+       printf("Test done: %s\n", r ? "Fail" : "Pass");
+       return r;
+}
diff --git a/ceph/src/isa-l/crc/crc16_t10dif_op_perf.c b/ceph/src/isa-l/crc/crc16_t10dif_op_perf.c
new file mode 100644 (file)
index 0000000..9b91ef3
--- /dev/null
@@ -0,0 +1,116 @@
+/**********************************************************************
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "crc.h"
+#include "test.h"
+
+#define BLKSIZE (512)
+
+//#define CACHED_TEST
+#ifdef CACHED_TEST
+// Cached test, loop many times over small dataset
+# define NBLOCKS      100
+# define TEST_TYPE_STR "_warm"
+#else
+// Uncached test.  Pull from large mem base.
+#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
+#  define TEST_LEN     (2 * GT_L3_CACHE)
+#  define NBLOCKS      (TEST_LEN / BLKSIZE)
+#  define TEST_TYPE_STR "_cold"
+#endif
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+struct blk {
+       uint8_t data[BLKSIZE];
+};
+
+struct blk_ext {
+       uint8_t data[BLKSIZE];
+       uint32_t tag;
+       uint16_t meta;
+       uint16_t crc;
+};
+
+void crc16_t10dif_copy_perf(struct blk *blks, struct blk *blkp, struct blk_ext *blks_ext,
+                           struct blk_ext *blkp_ext, uint16_t * crc)
+{
+       int i;
+       for (i = 0, blkp = blks, blkp_ext = blks_ext; i < NBLOCKS; i++) {
+               *crc = crc16_t10dif_copy(TEST_SEED, blkp_ext->data, blkp->data,
+                                        sizeof(blks->data));
+               blkp_ext->crc = *crc;
+               blkp++;
+               blkp_ext++;
+       }
+}
+
+int main(int argc, char *argv[])
+{
+       uint16_t crc;
+       struct blk *blks, *blkp;
+       struct blk_ext *blks_ext, *blkp_ext;
+       struct perf start;
+
+       printf("crc16_t10dif_streaming_insert_perf:\n");
+
+       if (posix_memalign((void *)&blks, 1024, NBLOCKS * sizeof(*blks))) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       if (posix_memalign((void *)&blks_ext, 1024, NBLOCKS * sizeof(*blks_ext))) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+
+       printf(" size blk: %ld, blk_ext: %ld, blk data: %ld, stream: %ld\n",
+              sizeof(*blks), sizeof(*blks_ext), sizeof(blks->data),
+              NBLOCKS * sizeof(blks->data));
+       memset(blks, 0xe5, NBLOCKS * sizeof(*blks));
+       memset(blks_ext, 0xe5, NBLOCKS * sizeof(*blks_ext));
+
+       printf("Start timed tests\n");
+       fflush(0);
+
+       // Copy and insert test
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 crc16_t10dif_copy_perf(blks, blkp, blks_ext, blkp_ext, &crc));
+
+       printf("crc16_t10pi_op_copy_insert" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)sizeof(blks->data) * NBLOCKS);
+
+       printf("finish 0x%x\n", crc);
+       return 0;
+}
index 34f1ddbdfc8be4c61d9617e4e8c31fdca47bf46e..7b7c0bcd921c0496f6418b9a168a2e2b7f6de814 100644 (file)
 #ifdef CACHED_TEST
 // Cached test, loop many times over small dataset
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   400000
 # define TEST_TYPE_STR "_warm"
 #else
 // Uncached test.  Pull from large mem base.
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     (2 * GT_L3_CACHE)
-#  define TEST_LOOPS   100
 #  define TEST_TYPE_STR "_cold"
 #endif
 
 
 int main(int argc, char *argv[])
 {
-       int i;
        void *buf;
        uint16_t crc;
-       struct perf start, stop;
+       struct perf start;
 
        printf("crc16_t10dif_perf:\n");
 
@@ -73,14 +70,9 @@ int main(int argc, char *argv[])
        fflush(0);
 
        memset(buf, 0, TEST_LEN);
-       crc = crc16_t10dif(TEST_SEED, buf, TEST_LEN);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               crc = crc16_t10dif(TEST_SEED, buf, TEST_LEN);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, crc = crc16_t10dif(TEST_SEED, buf, TEST_LEN));
        printf("crc16_t10dif" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
+       perf_print(start, (long long)TEST_LEN);
 
        printf("finish 0x%x\n", crc);
        return 0;
index e622f10ae071cc01beda0be679607e0e98564870..ceb9aab45861881bc1594b49ca7b03359c5ca893 100644 (file)
 #include <stdlib.h>
 #include "crc.h"
 #include "types.h"
+#include "crc_ref.h"
 
 #ifndef TEST_SEED
 # define TEST_SEED 0x1234
 #endif
 
-#define MAX_BUF   512
+#define MAX_BUF   4096
 #define TEST_SIZE  20
 
 typedef uint32_t u32;
 typedef uint16_t u16;
 typedef uint8_t u8;
 
+uint16_t crc16_t10dif_ref(uint16_t seed, uint8_t * buf, uint64_t len);
+
 void rand_buffer(unsigned char *buf, long buffer_size)
 {
        long i;
@@ -62,7 +65,7 @@ int main(int argc, char *argv[])
        unsigned char *buf;
 
        printf("Test crc16_t10dif_test ");
-       if (posix_memalign(&buf_raw, MAX_BUF, MAX_BUF * TEST_SIZE)) {
+       if (posix_memalign(&buf_raw, 32, MAX_BUF * TEST_SIZE)) {
                printf("alloc error: Fail");
                return -1;
        }
@@ -72,23 +75,25 @@ int main(int argc, char *argv[])
 
        // Test of all zeros
        memset(buf, 0, MAX_BUF * 10);
+       u16 crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF);
+       u16 crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
        u16 crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF);
-       u16 crc_ref = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
-       if (crc != crc_ref) {
+       if ((crc_base != crc_ref) || (crc != crc_ref)) {
                fail++;
                printf("\n           opt   ref\n");
                printf("         ------ ------\n");
-               printf("crc    zero = 0x%4x 0x%4x \n", crc, crc_ref);
+               printf("crc    zero = 0x%4x 0x%4x 0x%4x \n", crc_ref, crc_base, crc);
        } else
                printf(".");
 
        // Another simple test pattern
        memset(buf, 0x8a, MAX_BUF);
+       crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF);
+       crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
        crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF);
-       crc_ref = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
-       if (crc != crc_ref) {
+       if ((crc_base != crc_ref) || (crc != crc_ref)) {
                fail++;
-               printf("crc  all 8a = 0x%4x 0x%4x\n", crc, crc_ref);
+               printf("crc  all 8a = 0x%4x 0x%4x 0x%4x\n", crc_ref, crc_base, crc);
        } else
                printf(".");
 
@@ -97,13 +102,14 @@ int main(int argc, char *argv[])
        rand_buffer(buf, MAX_BUF * TEST_SIZE);
 
        for (i = 0; i < TEST_SIZE; i++) {
+               crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF);
+               crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
                crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF);
-               crc_ref = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF);
-               if (crc != crc_ref)
+               if ((crc_base != crc_ref) || (crc != crc_ref))
                        fail++;
                if (verbose)
-                       printf("crc rand%3d = 0x%4x 0x%4x\n", i, crc, crc_ref);
-               else
+                       printf("crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, crc_base, crc);
+               else if (i % (TEST_SIZE / 8) == 0)
                        printf(".");
                buf += MAX_BUF;
        }
@@ -113,12 +119,14 @@ int main(int argc, char *argv[])
        r = rand();
 
        for (i = MAX_BUF; i >= 0; i--) {
+               crc_ref = crc16_t10dif_ref(r, buf, i);
+               crc_base = crc16_t10dif_base(r, buf, i);
                crc = crc16_t10dif(r, buf, i);
-               crc_ref = crc16_t10dif_base(r, buf, i);
-               if (crc != crc_ref) {
+               if ((crc_base != crc_ref) || (crc != crc_ref)) {
                        fail++;
-                       printf("fail random size%i 0x%8x 0x%8x\n", i, crc, crc_ref);
-               } else
+                       printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base,
+                              crc);
+               } else if (i % (MAX_BUF / 8) == 0)
                        printf(".");
        }
 
@@ -133,13 +141,15 @@ int main(int argc, char *argv[])
                        printf("seed = 0x%x\n", r);
 
                for (i = 0; i < TEST_SIZE; i++) {
+                       crc_ref = crc16_t10dif_ref(r, buf, MAX_BUF);
+                       crc_base = crc16_t10dif_base(r, buf, MAX_BUF);
                        crc = crc16_t10dif(r, buf, MAX_BUF);
-                       crc_ref = crc16_t10dif_base(r, buf, MAX_BUF);
-                       if (crc != crc_ref)
+                       if ((crc_base != crc_ref) || (crc != crc_ref))
                                fail++;
                        if (verbose)
-                               printf("crc rand%3d = 0x%4x 0x%4x\n", i, crc, crc_ref);
-                       else
+                               printf("crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref,
+                                      crc_base, crc);
+                       else if (i % (TEST_SIZE * 20 / 8) == 0)
                                printf(".");
                        buf += MAX_BUF;
                }
@@ -149,12 +159,14 @@ int main(int argc, char *argv[])
        buf = (unsigned char *)buf_raw; //reset buf
        buf = buf + ((MAX_BUF - 1) * TEST_SIZE);        //Line up TEST_SIZE from end
        for (i = 0; i < TEST_SIZE; i++) {
+               crc_ref = crc16_t10dif_ref(TEST_SEED, buf + i, TEST_SIZE - i);
+               crc_base = crc16_t10dif_base(TEST_SEED, buf + i, TEST_SIZE - i);
                crc = crc16_t10dif(TEST_SEED, buf + i, TEST_SIZE - i);
-               crc_ref = crc16_t10dif_base(TEST_SEED, buf + i, TEST_SIZE - i);
-               if (crc != crc_ref)
+               if ((crc_base != crc_ref) || (crc != crc_ref))
                        fail++;
                if (verbose)
-                       printf("crc eob rand%3d = 0x%4x 0x%4x\n", i, crc, crc_ref);
+                       printf("crc eob rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, crc_base,
+                              crc);
                else
                        printf(".");
        }
diff --git a/ceph/src/isa-l/crc/crc32_funcs_test.c b/ceph/src/isa-l/crc/crc32_funcs_test.c
new file mode 100644 (file)
index 0000000..e28da40
--- /dev/null
@@ -0,0 +1,324 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "crc.h"
+#include "types.h"
+#include "crc_ref.h"
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+#define MAX_BUF   4096
+#define TEST_SIZE  32
+
+typedef uint32_t(*crc32_func_t) (uint32_t, const uint8_t *, uint64_t);
+typedef uint32_t(*crc32_func_t_base) (uint32_t, uint8_t *, uint64_t);
+typedef uint32_t(*crc32_func_t_ref) (uint32_t, uint8_t *, uint64_t);
+
+typedef struct func_case {
+       char *note;
+       crc32_func_t crc32_func_call;
+       crc32_func_t_base crc32_base_call;
+       crc32_func_t_ref crc32_ref_call;
+} func_case_t;
+
+uint32_t crc32_iscsi_wrap(uint32_t seed, const uint8_t * buf, uint64_t len)
+{
+       return crc32_iscsi((uint8_t *) buf, len, seed);
+}
+
+uint32_t crc32_iscsi_base_wrap(uint32_t seed, uint8_t * buf, uint64_t len)
+{
+       return crc32_iscsi_base(buf, len, seed);
+}
+
+uint32_t crc32_iscsi_ref_wrap(uint32_t seed, uint8_t * buf, uint64_t len)
+{
+       return crc32_iscsi_ref(buf, len, seed);
+}
+
+func_case_t test_funcs[] = {
+       {"crc32_ieee", crc32_ieee, crc32_ieee_base, crc32_ieee_ref}
+       ,
+       {"crc32_gzip_refl", crc32_gzip_refl, crc32_gzip_refl_base, crc32_gzip_refl_ref}
+       ,
+       {"crc32_iscsi", crc32_iscsi_wrap, crc32_iscsi_base_wrap, crc32_iscsi_ref_wrap}
+};
+
+// Generates pseudo-random data
+
+void rand_buffer(unsigned char *buf, long buffer_size)
+{
+       long i;
+       for (i = 0; i < buffer_size; i++)
+               buf[i] = rand();
+}
+
+// Test cases
+int zeros_test(func_case_t * test_func);
+
+int simple_pattern_test(func_case_t * test_func);
+
+int seeds_sizes_test(func_case_t * test_func);
+
+int eob_test(func_case_t * test_func);
+
+int update_test(func_case_t * test_func);
+
+int verbose = 0;
+void *buf_alloc = NULL;
+
+int main(int argc, char *argv[])
+{
+       int fail = 0, fail_case;
+       int i, ret;
+       func_case_t *test_func;
+
+       verbose = argc - 1;
+
+       // Align to TEST_SIZE boundary
+       ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE);
+       if (ret) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       srand(TEST_SEED);
+       printf("CRC32 Tests\n");
+
+       for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) {
+               fail_case = 0;
+               test_func = &test_funcs[i];
+
+               printf("Test %s\t", test_func->note);
+               fail_case += zeros_test(test_func);
+               fail_case += simple_pattern_test(test_func);
+               fail_case += seeds_sizes_test(test_func);
+               fail_case += eob_test(test_func);
+               fail_case += update_test(test_func);
+               printf(" done: %s\n", fail_case ? "Fail" : "Pass");
+
+               if (fail_case) {
+                       printf("\n%s Failed %d tests\n", test_func->note, fail_case);
+                       fail++;
+               }
+       }
+
+       printf("CRC32 Tests all done: %s\n", fail ? "Fail" : "Pass");
+
+       return fail;
+}
+
+// Test of all zeros
+int zeros_test(func_case_t * test_func)
+{
+       uint32_t crc_ref, crc_base, crc;
+       int fail = 0;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;
+       memset(buf, 0, MAX_BUF * 10);
+       crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF * 10);
+       crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF * 10);
+       crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF * 10);
+
+       if ((crc_base != crc_ref) || (crc != crc_ref)) {
+               fail++;
+               printf("\n                 opt   ref\n");
+               printf("                 ------ ------\n");
+               printf("crc     zero = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc);
+       } else
+               printf(".");
+
+       return fail;
+}
+
+// Another simple test pattern
+int simple_pattern_test(func_case_t * test_func)
+{
+       uint32_t crc_ref, crc_base, crc;
+       int fail = 0;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;
+       memset(buf, 0x8a, MAX_BUF);
+       crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF);
+       crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF);
+       crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF);
+
+       if ((crc_base != crc_ref) || (crc != crc_ref))
+               fail++;
+       if (verbose)
+               printf("crc  all 8a = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc);
+       else
+               printf(".");
+
+       return fail;
+}
+
+int seeds_sizes_test(func_case_t * test_func)
+{
+       uint32_t crc_ref, crc_base, crc;
+       int fail = 0;
+       int i;
+       uint64_t r, s;
+       unsigned char *buf = NULL;
+
+       // Do a few random tests
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+       rand_buffer(buf, MAX_BUF * TEST_SIZE);
+
+       for (i = 0; i < TEST_SIZE; i++) {
+               crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF);
+               crc_base = test_func->crc32_base_call(r, buf, MAX_BUF);
+               crc = test_func->crc32_func_call(r, buf, MAX_BUF);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref))
+                       fail++;
+               if (verbose)
+                       printf("crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc);
+               else if (i % (TEST_SIZE / 8) == 0)
+                       printf(".");
+               buf += MAX_BUF;
+       }
+
+       // Do a few random sizes
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+
+       for (i = MAX_BUF; i >= 0; i--) {
+               crc_ref = test_func->crc32_ref_call(r, buf, i);
+               crc_base = test_func->crc32_base_call(r, buf, i);
+               crc = test_func->crc32_func_call(r, buf, i);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref)) {
+                       fail++;
+                       printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base,
+                              crc);
+               } else if (i % (MAX_BUF / 8) == 0)
+                       printf(".");
+       }
+
+       // Try different seeds
+       for (s = 0; s < 20; s++) {
+               buf = (unsigned char *)buf_alloc;       //reset buf
+
+               r = rand();     // just to get a new seed
+               rand_buffer(buf, MAX_BUF * TEST_SIZE);  // new pseudo-rand data
+
+               if (verbose)
+                       printf("seed = 0x%lx\n", r);
+
+               for (i = 0; i < TEST_SIZE; i++) {
+                       crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF);
+                       crc_base = test_func->crc32_base_call(r, buf, MAX_BUF);
+                       crc = test_func->crc32_func_call(r, buf, MAX_BUF);
+
+                       if ((crc_base != crc_ref) || (crc != crc_ref))
+                               fail++;
+                       if (verbose)
+                               printf("crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref,
+                                      crc_base, crc);
+                       else if (i % (TEST_SIZE * 20 / 8) == 0)
+                               printf(".");
+                       buf += MAX_BUF;
+               }
+       }
+
+       return fail;
+}
+
+// Run tests at end of buffer
+int eob_test(func_case_t * test_func)
+{
+       uint32_t crc_ref, crc_base, crc;
+       int fail = 0;
+       int i;
+       unsigned char *buf = NULL;
+
+       // Null test
+       if (0 != test_func->crc32_func_call(0, NULL, 0)) {
+               fail++;
+               printf("crc null test fail\n");
+       }
+
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       buf = buf + ((MAX_BUF - 1) * TEST_SIZE);        //Line up TEST_SIZE from end
+       for (i = 0; i <= TEST_SIZE; i++) {
+               crc_ref = test_func->crc32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i);
+               crc_base = test_func->crc32_base_call(TEST_SEED, buf + i, TEST_SIZE - i);
+               crc = test_func->crc32_func_call(TEST_SEED, buf + i, TEST_SIZE - i);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref))
+                       fail++;
+               if (verbose)
+                       printf("crc eob rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base,
+                              crc);
+               else if (i % (TEST_SIZE / 8) == 0)
+                       printf(".");
+       }
+
+       return fail;
+}
+
+int update_test(func_case_t * test_func)
+{
+       uint32_t crc_ref, crc_base, crc;
+       int fail = 0;
+       int i;
+       uint64_t r;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+       // Process the whole buf with reference func single call.
+       crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF * TEST_SIZE);
+       crc_base = test_func->crc32_base_call(r, buf, MAX_BUF * TEST_SIZE);
+       // Process buf with update method.
+       for (i = 0; i < TEST_SIZE; i++) {
+               crc = test_func->crc32_func_call(r, buf, MAX_BUF);
+               // Update crc seeds and buf pointer.
+               r = crc;
+               buf += MAX_BUF;
+       }
+
+       if ((crc_base != crc_ref) || (crc != crc_ref))
+               fail++;
+       if (verbose)
+               printf("crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc);
+       else
+               printf(".");
+
+       return fail;
+}
diff --git a/ceph/src/isa-l/crc/crc32_gzip_refl_by16_10.asm b/ceph/src/isa-l/crc/crc32_gzip_refl_by16_10.asm
new file mode 100644 (file)
index 0000000..40236f6
--- /dev/null
@@ -0,0 +1,568 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       UINT32 crc32_gzip_refl_by16_10(
+;               UINT32 init_crc, //initial CRC value, 32 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
+;
+;
+;       sample yasm command line:
+;       yasm -f x64 -f elf64 -X gnu -g dwarf2 crc32_gzip_refl_by8
+;
+;       As explained here:
+;       http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html
+;       CRC-32 checksum is described in RFC 1952
+;       Implementing RFC 1952 CRC:
+;       http://www.ietf.org/rfc/rfc1952.txt
+
+%include "reg_sizes.asm"
+
+%ifndef FUNCTION_NAME
+%define FUNCTION_NAME crc32_gzip_refl_by16_10
+%endif
+
+%if (AS_FEATURE_LEVEL) >= 10
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+
+       %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*12+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global FUNCTION_NAME:ISAL_SYM_TYPE_FUNCTION
+FUNCTION_NAME:
+
+       not             arg1_low32
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+       vmovdqa         [rsp + XMM_SAVE + 16*8], xmm14
+       vmovdqa         [rsp + XMM_SAVE + 16*9], xmm15
+%endif
+
+       ; check if smaller than 256B
+       cmp             arg3, 256
+       jl              .less_than_256
+
+       ; load the initial crc value
+       vmovd           xmm10, arg1_low32      ; initial crc
+
+       ; receive the initial 64B data, xor the initial crc value
+       vmovdqu8        zmm0, [arg2+16*0]
+       vmovdqu8        zmm4, [arg2+16*4]
+       vpxorq          zmm0, zmm10
+       vbroadcasti32x4 zmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+
+       sub             arg3, 256
+       cmp             arg3, 256
+       jl              .fold_128_B_loop
+
+       vmovdqu8        zmm7, [arg2+16*8]
+       vmovdqu8        zmm8, [arg2+16*12]
+       vbroadcasti32x4 zmm16, [rk_1]   ;zmm16 has rk-1 and rk-2
+       sub             arg3, 256
+
+.fold_256_B_loop:
+       add             arg2, 256
+       vmovdqu8        zmm3, [arg2+16*0]
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x10
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x01
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm3
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpclmulqdq      zmm5, zmm4, zmm16, 0x10
+       vpclmulqdq      zmm6, zmm4, zmm16, 0x01
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       vmovdqu8        zmm11, [arg2+16*8]
+       vpclmulqdq      zmm12, zmm7, zmm16, 0x10
+       vpclmulqdq      zmm13, zmm7, zmm16, 0x01
+       vpxorq          zmm7, zmm12, zmm13
+       vpxorq          zmm7, zmm7, zmm11
+
+       vmovdqu8        zmm17, [arg2+16*12]
+       vpclmulqdq      zmm14, zmm8, zmm16, 0x10
+       vpclmulqdq      zmm15, zmm8, zmm16, 0x01
+       vpxorq          zmm8, zmm14, zmm15
+       vpxorq          zmm8, zmm8, zmm17
+
+       sub             arg3, 256
+       jge             .fold_256_B_loop
+
+       ;; Fold 256 into 128
+       add             arg2, 256
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x01
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x10
+       vpternlogq      zmm7, zmm1, zmm2, 0x96  ; xor ABC
+
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x01
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x10
+       vpternlogq      zmm8, zmm5, zmm6, 0x96  ; xor ABC
+
+       vmovdqa32       zmm0, zmm7
+       vmovdqa32       zmm4, zmm8
+
+       add             arg3, 128
+       jmp             .fold_128_B_register
+
+
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+.fold_128_B_loop:
+       add             arg2, 128
+       vmovdqu8        zmm8, [arg2+16*0]
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x10
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x01
+       vpxorq          zmm0, zmm2, zmm1
+       vpxorq          zmm0, zmm0, zmm8
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x10
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x01
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       sub             arg3, 128
+       jge             .fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add             arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+
+.fold_128_B_register:
+       ; fold the 8 128b parts into 1 xmm register with different constants
+       vmovdqu8        zmm16, [rk9]            ; multiply by rk9-rk16
+       vmovdqu8        zmm11, [rk17]           ; multiply by rk17-rk20, rk1,rk2, 0,0
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x01
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x10
+       vextracti64x2   xmm7, zmm4, 3           ; save last that has no multiplicand
+
+       vpclmulqdq      zmm5, zmm4, zmm11, 0x01
+       vpclmulqdq      zmm6, zmm4, zmm11, 0x10
+       vmovdqa         xmm10, [rk1]            ; Needed later in reduction loop
+       vpternlogq      zmm1, zmm2, zmm5, 0x96  ; xor ABC
+       vpternlogq      zmm1, zmm6, zmm7, 0x96  ; xor ABC
+
+       vshufi64x2      zmm8, zmm1, zmm1, 0x4e ; Swap 1,0,3,2 - 01 00 11 10
+       vpxorq          ymm8, ymm8, ymm1
+       vextracti64x2   xmm5, ymm8, 1
+       vpxorq          xmm7, xmm5, xmm8
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              .final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+.16B_reduction_loop:
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x1
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             .16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+.final_reduction_for_128:
+       add             arg3, 16
+       je              .128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+.get_last_two_xmms:
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table]
+       add             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+       vpshufb         xmm7, xmm0
+       vpxor           xmm0, [mask3]
+       vpshufb         xmm2, xmm0
+
+       vpblendvb       xmm2, xmm2, xmm1, xmm0
+       ;;;;;;;;;;
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x1
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm2
+
+.128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0
+       vpsrldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;32b fold
+       vmovdqa         xmm0, xmm7
+       vpslldq         xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm0
+
+
+       ;barrett reduction
+.barrett:
+       vpand           xmm7, [mask2]
+       vmovdqa         xmm1, xmm7
+       vmovdqa         xmm2, xmm7
+       vmovdqa         xmm10, [rk7]
+
+       vpclmulqdq      xmm7, xmm10, 0
+       vpxor           xmm7, xmm2
+       vpand           xmm7, [mask]
+       vmovdqa         xmm2, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm2
+       vpxor           xmm7, xmm1
+       vpextrd         eax, xmm7, 2
+
+.cleanup:
+       not             eax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+       vmovdqa         xmm14, [rsp + XMM_SAVE + 16*8]
+       vmovdqa         xmm15, [rsp + XMM_SAVE + 16*9]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+.less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      .less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     .16B_reduction_loop
+
+
+align 16
+.less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      .cleanup
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+
+       cmp     arg3, 16
+       je      .exact_16_left
+       jl      .less_than_16_left
+
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpxor   xmm7, xmm0              ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]            ; rk1 and rk2 in xmm10
+       jmp     .get_last_two_xmms
+
+align 16
+.less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      .only_less_than_4
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      .less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+.less_than_8_left:
+
+       cmp     arg3, 4
+       jl      .less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+.less_than_4_left:
+
+       cmp     arg3, 2
+       jl      .less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+.less_than_2_left:
+       cmp     arg3, 1
+       jl      .zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+.zero_left:
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax,[pshufb_shf_table]
+       vmovdqu xmm0, [rax + r9]
+       vpshufb xmm7,xmm0
+       jmp     .128_done
+
+align 16
+.exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       jmp     .128_done
+
+.only_less_than_4:
+       cmp     arg3, 3
+       jl      .only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 5
+       jmp     .barrett
+
+.only_less_than_3:
+       cmp     arg3, 2
+       jl      .only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 6
+       jmp     .barrett
+
+.only_less_than_2:
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 7
+       jmp     .barrett
+
+section .data
+align 32
+
+%ifndef USE_CONSTS
+; precomputed constants
+rk_1: dq 0x00000000e95c1271
+rk_2: dq 0x00000000ce3371cb
+rk1:  dq 0x00000000ccaa009e
+rk2:  dq 0x00000001751997d0
+rk3:  dq 0x000000014a7fe880
+rk4:  dq 0x00000001e88ef372
+rk5:  dq 0x00000000ccaa009e
+rk6:  dq 0x0000000163cd6124
+rk7:  dq 0x00000001f7011640
+rk8:  dq 0x00000001db710640
+rk9:  dq 0x00000001d7cfc6ac
+rk10: dq 0x00000001ea89367e
+rk11: dq 0x000000018cb44e58
+rk12: dq 0x00000000df068dc2
+rk13: dq 0x00000000ae0b5394
+rk14: dq 0x00000001c7569e54
+rk15: dq 0x00000001c6e41596
+rk16: dq 0x0000000154442bd4
+rk17: dq 0x0000000174359406
+rk18: dq 0x000000003db1ecdc
+rk19: dq 0x000000015a546366
+rk20: dq 0x00000000f1da05aa
+
+rk_1b: dq 0x00000000ccaa009e
+rk_2b: dq 0x00000001751997d0
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%else
+INCLUDE_CONSTS
+%endif
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+
+mask:  dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
+mask2: dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
+mask3: dq     0x8080808080808080, 0x8080808080808080
+
+%else  ; Assembler doesn't understand these opcodes. Add empty symbol for windows.
+%ifidn __OUTPUT_FORMAT__, win64
+global no_ %+ FUNCTION_NAME
+no_ %+ FUNCTION_NAME %+ :
+%endif
+%endif ; (AS_FEATURE_LEVEL) >= 10
diff --git a/ceph/src/isa-l/crc/crc32_gzip_refl_by8.asm b/ceph/src/isa-l/crc/crc32_gzip_refl_by8.asm
new file mode 100644 (file)
index 0000000..62f7e7d
--- /dev/null
@@ -0,0 +1,624 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       UINT32 crc32_gzip_refl_by8(
+;               UINT32 init_crc, //initial CRC value, 32 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
+;
+;
+;       sample yasm command line:
+;       yasm -f x64 -f elf64 -X gnu -g dwarf2 crc32_gzip_refl_by8
+;
+;       As explained here:
+;       http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html
+;       CRC-32 checksum is described in RFC 1952
+;       Implementing RFC 1952 CRC:
+;       http://www.ietf.org/rfc/rfc1952.txt
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+        %xdefine        arg1 rcx
+        %xdefine        arg2 rdx
+        %xdefine        arg3 r8
+
+        %xdefine        arg1_low32 ecx
+%else
+        %xdefine        arg1 rdi
+        %xdefine        arg2 rsi
+        %xdefine        arg3 rdx
+
+        %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+        %define XMM_SAVE 16*2
+        %define VARIABLE_OFFSET 16*10+8
+%else
+        %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global  crc32_gzip_refl_by8:ISAL_SYM_TYPE_FUNCTION
+crc32_gzip_refl_by8:
+
+        ; unsigned long c = crc ^ 0xffffffffL;
+        not     arg1_low32     ;
+
+
+        sub     rsp, VARIABLE_OFFSET
+%ifidn __OUTPUT_FORMAT__, win64
+        ; push the xmm registers into the stack to maintain
+        movdqa  [rsp + XMM_SAVE + 16*0], xmm6
+        movdqa  [rsp + XMM_SAVE + 16*1], xmm7
+        movdqa  [rsp + XMM_SAVE + 16*2], xmm8
+        movdqa  [rsp + XMM_SAVE + 16*3], xmm9
+        movdqa  [rsp + XMM_SAVE + 16*4], xmm10
+        movdqa  [rsp + XMM_SAVE + 16*5], xmm11
+        movdqa  [rsp + XMM_SAVE + 16*6], xmm12
+        movdqa  [rsp + XMM_SAVE + 16*7], xmm13
+%endif
+
+        ; check if smaller than 256B
+        cmp     arg3, 256
+
+        ; for sizes less than 256, we can't fold 128B at a time...
+        jl      _less_than_256
+
+
+        ; load the initial crc value
+        movd    xmm10, arg1_low32      ; initial crc
+
+        ; receive the initial 64B data, xor the initial crc value
+        movdqu  xmm0, [arg2+16*0]
+        movdqu  xmm1, [arg2+16*1]
+        movdqu  xmm2, [arg2+16*2]
+        movdqu  xmm3, [arg2+16*3]
+        movdqu  xmm4, [arg2+16*4]
+        movdqu  xmm5, [arg2+16*5]
+        movdqu  xmm6, [arg2+16*6]
+        movdqu  xmm7, [arg2+16*7]
+
+        ; XOR the initial_crc value
+        pxor    xmm0, xmm10
+       movdqa  xmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                        ;imm value of pclmulqdq instruction will determine which constant to use
+        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+        ; we subtract 256 instead of 128 to save one instruction from the loop
+        sub     arg3, 256
+
+        ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The _fold_128_B_loop
+        ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+
+        ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+_fold_128_B_loop:
+
+        ; update the buffer pointer
+        add     arg2, 128
+
+       prefetchnta [arg2+fetch_dist+0]
+        movdqu  xmm9, [arg2+16*0]
+        movdqu  xmm12, [arg2+16*1]
+        movdqa  xmm8, xmm0
+        movdqa  xmm13, xmm1
+        pclmulqdq       xmm0, xmm10, 0x10
+        pclmulqdq       xmm8, xmm10 , 0x1
+        pclmulqdq       xmm1, xmm10, 0x10
+        pclmulqdq       xmm13, xmm10 , 0x1
+        pxor    xmm0, xmm9
+        xorps   xmm0, xmm8
+        pxor    xmm1, xmm12
+        xorps   xmm1, xmm13
+
+       prefetchnta [arg2+fetch_dist+32]
+        movdqu  xmm9, [arg2+16*2]
+        movdqu  xmm12, [arg2+16*3]
+        movdqa  xmm8, xmm2
+        movdqa  xmm13, xmm3
+        pclmulqdq       xmm2, xmm10, 0x10
+        pclmulqdq       xmm8, xmm10 , 0x1
+        pclmulqdq       xmm3, xmm10, 0x10
+        pclmulqdq       xmm13, xmm10 , 0x1
+        pxor    xmm2, xmm9
+        xorps   xmm2, xmm8
+        pxor    xmm3, xmm12
+        xorps   xmm3, xmm13
+
+       prefetchnta [arg2+fetch_dist+64]
+        movdqu  xmm9, [arg2+16*4]
+        movdqu  xmm12, [arg2+16*5]
+        movdqa  xmm8, xmm4
+        movdqa  xmm13, xmm5
+        pclmulqdq       xmm4, xmm10, 0x10
+        pclmulqdq       xmm8, xmm10 , 0x1
+        pclmulqdq       xmm5, xmm10, 0x10
+        pclmulqdq       xmm13, xmm10 , 0x1
+        pxor    xmm4, xmm9
+        xorps   xmm4, xmm8
+        pxor    xmm5, xmm12
+        xorps   xmm5, xmm13
+
+       prefetchnta [arg2+fetch_dist+96]
+        movdqu  xmm9, [arg2+16*6]
+        movdqu  xmm12, [arg2+16*7]
+        movdqa  xmm8, xmm6
+        movdqa  xmm13, xmm7
+        pclmulqdq       xmm6, xmm10, 0x10
+        pclmulqdq       xmm8, xmm10 , 0x1
+        pclmulqdq       xmm7, xmm10, 0x10
+        pclmulqdq       xmm13, xmm10 , 0x1
+        pxor    xmm6, xmm9
+        xorps   xmm6, xmm8
+        pxor    xmm7, xmm12
+        xorps   xmm7, xmm13
+
+        sub     arg3, 128
+
+        ; check if there is another 128B in the buffer to be able to fold
+        jge     _fold_128_B_loop
+        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+        add     arg2, 128
+        ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+        ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+
+
+        ; fold the 8 xmm registers to 1 xmm register with different constants
+
+        movdqa  xmm10, [rk9]
+        movdqa  xmm8, xmm0
+        pclmulqdq       xmm0, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        xorps   xmm7, xmm0
+
+        movdqa  xmm10, [rk11]
+        movdqa  xmm8, xmm1
+        pclmulqdq       xmm1, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        xorps   xmm7, xmm1
+
+        movdqa  xmm10, [rk13]
+        movdqa  xmm8, xmm2
+        pclmulqdq       xmm2, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        pxor    xmm7, xmm2
+
+        movdqa  xmm10, [rk15]
+        movdqa  xmm8, xmm3
+        pclmulqdq       xmm3, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        xorps   xmm7, xmm3
+
+        movdqa  xmm10, [rk17]
+        movdqa  xmm8, xmm4
+        pclmulqdq       xmm4, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        pxor    xmm7, xmm4
+
+        movdqa  xmm10, [rk19]
+        movdqa  xmm8, xmm5
+        pclmulqdq       xmm5, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        xorps   xmm7, xmm5
+
+        movdqa  xmm10, [rk1]
+        movdqa  xmm8, xmm6
+        pclmulqdq       xmm6, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        pxor    xmm7, xmm6
+
+
+        ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+        ; instead of a cmp instruction, we use the negative flag with the jl instruction
+        add     arg3, 128-16
+        jl      _final_reduction_for_128
+
+        ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+        ; we can fold 16 bytes at a time if y>=16
+        ; continue folding 16B at a time
+
+_16B_reduction_loop:
+        movdqa  xmm8, xmm7
+        pclmulqdq       xmm7, xmm10, 0x1
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        movdqu  xmm0, [arg2]
+        pxor    xmm7, xmm0
+        add     arg2, 16
+        sub     arg3, 16
+        ; instead of a cmp instruction, we utilize the flags with the jge instruction
+        ; equivalent of: cmp arg3, 16-16
+        ; check if there is any more 16B in the buffer to be able to fold
+        jge     _16B_reduction_loop
+
+        ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+        ;first, we reduce the data in the xmm7 register
+
+
+_final_reduction_for_128:
+        add arg3, 16
+        je _128_done
+
+; here we are getting data that is less than 16 bytes.
+        ; since we know that there was data before the pointer, we can offset the input pointer before the actual point, to receive exactly 16 bytes.
+        ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+
+
+        movdqa xmm2, xmm7
+        movdqu xmm1, [arg2 - 16 + arg3]
+
+        ; get rid of the extra data that was loaded before
+        ; load the shift constant
+        lea     rax, [pshufb_shf_table]
+        add     rax, arg3
+        movdqu  xmm0, [rax]
+
+
+        pshufb  xmm7, xmm0
+        pxor    xmm0, [mask3]
+        pshufb  xmm2, xmm0
+
+        pblendvb        xmm2, xmm1     ;xmm0 is implicit
+        ;;;;;;;;;;
+        movdqa  xmm8, xmm7
+        pclmulqdq       xmm7, xmm10, 0x1
+
+        pclmulqdq       xmm8, xmm10, 0x10
+        pxor    xmm7, xmm8
+        pxor    xmm7, xmm2
+
+_128_done:
+        ; compute crc of a 128-bit value
+        movdqa  xmm10, [rk5]
+        movdqa  xmm0, xmm7
+
+        ;64b fold
+        pclmulqdq       xmm7, xmm10, 0
+        psrldq  xmm0, 8
+        pxor    xmm7, xmm0
+
+        ;32b fold
+        movdqa  xmm0, xmm7
+        pslldq  xmm7, 4
+        pclmulqdq       xmm7, xmm10, 0x10
+
+        pxor    xmm7, xmm0
+
+
+        ;barrett reduction
+_barrett:
+        pand    xmm7, [mask2]
+        movdqa  xmm1, xmm7
+        movdqa  xmm2, xmm7
+        movdqa  xmm10, [rk7]
+
+        pclmulqdq       xmm7, xmm10, 0
+        pxor    xmm7, xmm2
+        pand    xmm7, [mask]
+        movdqa  xmm2, xmm7
+        pclmulqdq       xmm7, xmm10, 0x10
+        pxor    xmm7, xmm2
+        pxor    xmm7, xmm1
+        pextrd  eax, xmm7, 2
+
+_cleanup:
+        ; return c ^ 0xffffffffL;
+        not     eax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+        movdqa  xmm6, [rsp + XMM_SAVE + 16*0]
+        movdqa  xmm7, [rsp + XMM_SAVE + 16*1]
+        movdqa  xmm8, [rsp + XMM_SAVE + 16*2]
+        movdqa  xmm9, [rsp + XMM_SAVE + 16*3]
+        movdqa  xmm10, [rsp + XMM_SAVE + 16*4]
+        movdqa  xmm11, [rsp + XMM_SAVE + 16*5]
+        movdqa  xmm12, [rsp + XMM_SAVE + 16*6]
+        movdqa  xmm13, [rsp + XMM_SAVE + 16*7]
+%endif
+        add     rsp, VARIABLE_OFFSET
+        ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_256:
+
+        ; check if there is enough buffer to be able to fold 16B at a time
+        cmp     arg3, 32
+        jl      _less_than_32
+
+        ; if there is, load the constants
+        movdqa  xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+        movd    xmm0, arg1_low32       ; get the initial crc value
+        movdqu  xmm7, [arg2]            ; load the plaintext
+        pxor    xmm7, xmm0
+
+        ; update the buffer pointer
+        add     arg2, 16
+
+        ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+        sub     arg3, 32
+
+        jmp     _16B_reduction_loop
+
+
+align 16
+_less_than_32:
+        ; mov initial crc to the return value. this is necessary for zero-length buffers.
+        mov     eax, arg1_low32
+        test    arg3, arg3
+        je      _cleanup
+
+        movd    xmm0, arg1_low32        ; get the initial crc value
+
+        cmp     arg3, 16
+        je      _exact_16_left
+        jl      _less_than_16_left
+
+        movdqu  xmm7, [arg2]            ; load the plaintext
+        pxor    xmm7, xmm0              ; xor the initial crc value
+        add     arg2, 16
+        sub     arg3, 16
+        movdqa  xmm10, [rk1]    ; rk1 and rk2 in xmm10
+        jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+        ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+        pxor    xmm1, xmm1
+        mov     r11, rsp
+        movdqa  [r11], xmm1
+
+        cmp     arg3, 4
+        jl      _only_less_than_4
+
+        ;       backup the counter value
+        mov     r9, arg3
+        cmp     arg3, 8
+        jl      _less_than_8_left
+
+        ; load 8 Bytes
+        mov     rax, [arg2]
+        mov     [r11], rax
+        add     r11, 8
+        sub     arg3, 8
+        add     arg2, 8
+_less_than_8_left:
+
+        cmp     arg3, 4
+        jl      _less_than_4_left
+
+        ; load 4 Bytes
+        mov     eax, [arg2]
+        mov     [r11], eax
+        add     r11, 4
+        sub     arg3, 4
+        add     arg2, 4
+_less_than_4_left:
+
+        cmp     arg3, 2
+        jl      _less_than_2_left
+
+        ; load 2 Bytes
+        mov     ax, [arg2]
+        mov     [r11], ax
+        add     r11, 2
+        sub     arg3, 2
+        add     arg2, 2
+_less_than_2_left:
+        cmp     arg3, 1
+        jl      _zero_left
+
+        ; load 1 Byte
+        mov     al, [arg2]
+        mov     [r11], al
+
+_zero_left:
+        movdqa  xmm7, [rsp]
+        pxor    xmm7, xmm0      ; xor the initial crc value
+
+        lea rax,[pshufb_shf_table]
+        movdqu  xmm0, [rax + r9]
+        pshufb  xmm7,xmm0
+
+
+
+        jmp     _128_done
+
+align 16
+_exact_16_left:
+        movdqu  xmm7, [arg2]
+        pxor    xmm7, xmm0      ; xor the initial crc value
+
+        jmp     _128_done
+
+_only_less_than_4:
+        cmp     arg3, 3
+        jl      _only_less_than_3
+
+        ; load 3 Bytes
+        mov     al, [arg2]
+        mov     [r11], al
+
+        mov     al, [arg2+1]
+        mov     [r11+1], al
+
+        mov     al, [arg2+2]
+        mov     [r11+2], al
+
+        movdqa  xmm7, [rsp]
+        pxor    xmm7, xmm0      ; xor the initial crc value
+
+        pslldq  xmm7, 5
+
+        jmp     _barrett
+_only_less_than_3:
+        cmp     arg3, 2
+        jl      _only_less_than_2
+
+        ; load 2 Bytes
+        mov     al, [arg2]
+        mov     [r11], al
+
+        mov     al, [arg2+1]
+        mov     [r11+1], al
+
+        movdqa  xmm7, [rsp]
+        pxor    xmm7, xmm0      ; xor the initial crc value
+
+        pslldq  xmm7, 6
+
+        jmp     _barrett
+_only_less_than_2:
+
+        ; load 1 Byte
+        mov     al, [arg2]
+        mov     [r11], al
+
+        movdqa  xmm7, [rsp]
+        pxor    xmm7, xmm0      ; xor the initial crc value
+
+        pslldq  xmm7, 7
+
+        jmp     _barrett
+
+section .data
+
+; precomputed constants
+align 16
+rk1 :
+DQ 0x00000000ccaa009e
+rk2 :
+DQ 0x00000001751997d0
+rk3 :
+DQ 0x000000014a7fe880
+rk4 :
+DQ 0x00000001e88ef372
+rk5 :
+DQ 0x00000000ccaa009e
+rk6 :
+DQ 0x0000000163cd6124
+rk7 :
+DQ 0x00000001f7011640
+rk8 :
+DQ 0x00000001db710640
+rk9 :
+DQ 0x00000001d7cfc6ac
+rk10 :
+DQ 0x00000001ea89367e
+rk11 :
+DQ 0x000000018cb44e58
+rk12 :
+DQ 0x00000000df068dc2
+rk13 :
+DQ 0x00000000ae0b5394
+rk14 :
+DQ 0x00000001c7569e54
+rk15 :
+DQ 0x00000001c6e41596
+rk16 :
+DQ 0x0000000154442bd4
+rk17 :
+DQ 0x0000000174359406
+rk18 :
+DQ 0x000000003db1ecdc
+rk19 :
+DQ 0x000000015a546366
+rk20 :
+DQ 0x00000000f1da05aa
+
+mask:
+dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
+mask2:
+dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
+mask3:
+dq     0x8080808080808080, 0x8080808080808080
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+
+;;;       func        core, ver, snum
+slversion crc32_gzip_refl_by8, 01,   00,  002c
diff --git a/ceph/src/isa-l/crc/crc32_gzip_refl_by8_02.asm b/ceph/src/isa-l/crc/crc32_gzip_refl_by8_02.asm
new file mode 100644 (file)
index 0000000..80d849e
--- /dev/null
@@ -0,0 +1,555 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       UINT32 crc32_gzip_refl_by8_02(
+;               UINT32 init_crc, //initial CRC value, 32 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
+;
+;
+;       sample yasm command line:
+;       yasm -f x64 -f elf64 -X gnu -g dwarf2 crc32_gzip_refl_by8
+;
+;       As explained here:
+;       http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html
+;       CRC-32 checksum is described in RFC 1952
+;       Implementing RFC 1952 CRC:
+;       http://www.ietf.org/rfc/rfc1952.txt
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+
+       %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*10+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global  crc32_gzip_refl_by8_02:ISAL_SYM_TYPE_FUNCTION
+crc32_gzip_refl_by8_02:
+       not             arg1_low32
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+%endif
+
+       ; check if smaller than 256B
+       cmp             arg3, 256
+       jl              .less_than_256
+
+       ; load the initial crc value
+       vmovd           xmm10, arg1_low32      ; initial crc
+
+       ; receive the initial 64B data, xor the initial crc value
+       vmovdqu         xmm0, [arg2+16*0]
+       vmovdqu         xmm1, [arg2+16*1]
+       vmovdqu         xmm2, [arg2+16*2]
+       vmovdqu         xmm3, [arg2+16*3]
+       vmovdqu         xmm4, [arg2+16*4]
+       vmovdqu         xmm5, [arg2+16*5]
+       vmovdqu         xmm6, [arg2+16*6]
+       vmovdqu         xmm7, [arg2+16*7]
+
+       ; XOR the initial_crc value
+       vpxor           xmm0, xmm10
+       vmovdqa         xmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       ; we subtract 256 instead of 128 to save one instruction from the loop
+       sub             arg3, 256
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+.fold_128_B_loop:
+       add             arg2, 128
+       prefetchnta     [arg2+fetch_dist+0]
+       vmovdqu         xmm9, [arg2+16*0]
+       vmovdqu         xmm12, [arg2+16*1]
+       vpclmulqdq      xmm8, xmm0, xmm10, 0x10
+       vpclmulqdq      xmm0, xmm0, xmm10 , 0x1
+       vpclmulqdq      xmm13, xmm1, xmm10, 0x10
+       vpclmulqdq      xmm1, xmm1, xmm10 , 0x1
+       vpxor           xmm0, xmm9
+       vxorps          xmm0, xmm8
+       vpxor           xmm1, xmm12
+       vxorps          xmm1, xmm13
+
+       prefetchnta     [arg2+fetch_dist+32]
+       vmovdqu         xmm9, [arg2+16*2]
+       vmovdqu         xmm12, [arg2+16*3]
+       vpclmulqdq      xmm8, xmm2, xmm10, 0x10
+       vpclmulqdq      xmm2, xmm2, xmm10 , 0x1
+       vpclmulqdq      xmm13, xmm3, xmm10, 0x10
+       vpclmulqdq      xmm3, xmm3, xmm10 , 0x1
+       vpxor           xmm2, xmm9
+       vxorps          xmm2, xmm8
+       vpxor           xmm3, xmm12
+       vxorps          xmm3, xmm13
+
+       prefetchnta     [arg2+fetch_dist+64]
+       vmovdqu         xmm9, [arg2+16*4]
+       vmovdqu         xmm12, [arg2+16*5]
+       vpclmulqdq      xmm8, xmm4, xmm10, 0x10
+       vpclmulqdq      xmm4, xmm4, xmm10 , 0x1
+       vpclmulqdq      xmm13, xmm5, xmm10, 0x10
+       vpclmulqdq      xmm5, xmm5, xmm10 , 0x1
+       vpxor           xmm4, xmm9
+       vxorps          xmm4, xmm8
+       vpxor           xmm5, xmm12
+       vxorps          xmm5, xmm13
+
+       prefetchnta     [arg2+fetch_dist+96]
+       vmovdqu         xmm9, [arg2+16*6]
+       vmovdqu         xmm12, [arg2+16*7]
+       vpclmulqdq      xmm8, xmm6, xmm10, 0x10
+       vpclmulqdq      xmm6, xmm6, xmm10 , 0x1
+       vpclmulqdq      xmm13, xmm7, xmm10, 0x10
+       vpclmulqdq      xmm7, xmm7, xmm10 , 0x1
+       vpxor           xmm6, xmm9
+       vxorps          xmm6, xmm8
+       vpxor           xmm7, xmm12
+       vxorps          xmm7, xmm13
+
+       sub             arg3, 128
+       jge             .fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add             arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+
+       ; fold the 8 xmm registers to 1 xmm register with different constants
+       vmovdqa         xmm10, [rk9]
+       vpclmulqdq      xmm8, xmm0, xmm10, 0x1
+       vpclmulqdq      xmm0, xmm0, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vxorps          xmm7, xmm0
+
+       vmovdqa         xmm10, [rk11]
+       vpclmulqdq      xmm8, xmm1, xmm10, 0x1
+       vpclmulqdq      xmm1, xmm1, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vxorps          xmm7, xmm1
+
+       vmovdqa         xmm10, [rk13]
+       vpclmulqdq      xmm8, xmm2, xmm10, 0x1
+       vpclmulqdq      xmm2, xmm2, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm2
+
+       vmovdqa         xmm10, [rk15]
+       vpclmulqdq      xmm8, xmm3, xmm10, 0x1
+       vpclmulqdq      xmm3, xmm3, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vxorps          xmm7, xmm3
+
+       vmovdqa         xmm10, [rk17]
+       vpclmulqdq      xmm8, xmm4, xmm10, 0x1
+       vpclmulqdq      xmm4, xmm4, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm4
+
+       vmovdqa         xmm10, [rk19]
+       vpclmulqdq      xmm8, xmm5, xmm10, 0x1
+       vpclmulqdq      xmm5, xmm5, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vxorps          xmm7, xmm5
+
+       vmovdqa         xmm10, [rk1]
+       vpclmulqdq      xmm8, xmm6, xmm10, 0x1
+       vpclmulqdq      xmm6, xmm6, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm6
+
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              .final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+.16B_reduction_loop:
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x1
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             .16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+.final_reduction_for_128:
+       add             arg3, 16
+       je              .128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+.get_last_two_xmms:
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table]
+       add             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+       vpshufb         xmm7, xmm0
+       vpxor           xmm0, [mask3]
+       vpshufb         xmm2, xmm0
+
+       vpblendvb       xmm2, xmm2, xmm1, xmm0
+       ;;;;;;;;;;
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x1
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm2
+
+.128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0
+       vpsrldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;32b fold
+       vmovdqa         xmm0, xmm7
+       vpslldq         xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm0
+
+
+       ;barrett reduction
+.barrett:
+       vpand           xmm7, [mask2]
+       vmovdqa         xmm1, xmm7
+       vmovdqa         xmm2, xmm7
+       vmovdqa         xmm10, [rk7]
+
+       vpclmulqdq      xmm7, xmm10, 0
+       vpxor           xmm7, xmm2
+       vpand           xmm7, [mask]
+       vmovdqa         xmm2, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm2
+       vpxor           xmm7, xmm1
+       vpextrd         eax, xmm7, 2
+
+.cleanup:
+       not             eax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+.less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      .less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     .16B_reduction_loop
+
+
+align 16
+.less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      .cleanup
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+
+       cmp     arg3, 16
+       je      .exact_16_left
+       jl      .less_than_16_left
+
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpxor   xmm7, xmm0              ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]            ; rk1 and rk2 in xmm10
+       jmp     .get_last_two_xmms
+
+align 16
+.less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      .only_less_than_4
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      .less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+.less_than_8_left:
+
+       cmp     arg3, 4
+       jl      .less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+.less_than_4_left:
+
+       cmp     arg3, 2
+       jl      .less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+.less_than_2_left:
+       cmp     arg3, 1
+       jl      .zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+.zero_left:
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax,[pshufb_shf_table]
+       vmovdqu xmm0, [rax + r9]
+       vpshufb xmm7,xmm0
+       jmp     .128_done
+
+align 16
+.exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       jmp     .128_done
+
+.only_less_than_4:
+       cmp     arg3, 3
+       jl      .only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 5
+       jmp     .barrett
+
+.only_less_than_3:
+       cmp     arg3, 2
+       jl      .only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 6
+       jmp     .barrett
+
+.only_less_than_2:
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpslldq xmm7, 7
+       jmp     .barrett
+
+section .data
+
+; precomputed constants
+align 16
+rk1:  dq 0x00000000ccaa009e
+rk2:  dq 0x00000001751997d0
+rk3:  dq 0x000000014a7fe880
+rk4:  dq 0x00000001e88ef372
+rk5:  dq 0x00000000ccaa009e
+rk6:  dq 0x0000000163cd6124
+rk7:  dq 0x00000001f7011640
+rk8:  dq 0x00000001db710640
+rk9:  dq 0x00000001d7cfc6ac
+rk10: dq 0x00000001ea89367e
+rk11: dq 0x000000018cb44e58
+rk12: dq 0x00000000df068dc2
+rk13: dq 0x00000000ae0b5394
+rk14: dq 0x00000001c7569e54
+rk15: dq 0x00000001c6e41596
+rk16: dq 0x0000000154442bd4
+rk17: dq 0x0000000174359406
+rk18: dq 0x000000003db1ecdc
+rk19: dq 0x000000015a546366
+rk20: dq 0x00000000f1da05aa
+
+mask:  dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
+mask2: dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
+mask3: dq     0x8080808080808080, 0x8080808080808080
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
diff --git a/ceph/src/isa-l/crc/crc32_gzip_refl_perf.c b/ceph/src/isa-l/crc/crc32_gzip_refl_perf.c
new file mode 100644 (file)
index 0000000..ad3d86f
--- /dev/null
@@ -0,0 +1,91 @@
+/**********************************************************************
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <sys/time.h>
+#include "crc.h"
+#include "test.h"
+
+//#define CACHED_TEST
+#ifdef CACHED_TEST
+// Cached test, loop many times over small dataset
+# define TEST_LEN     8*1024
+# define TEST_TYPE_STR "_warm"
+#else
+// Uncached test.  Pull from large mem base.
+#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
+#  define TEST_LEN     (2 * GT_L3_CACHE)
+#  define TEST_TYPE_STR "_cold"
+#endif
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+#define TEST_MEM TEST_LEN
+
+int main(int argc, char *argv[])
+{
+       void *buf;
+       uint32_t crc;
+       struct perf start;
+
+       printf("crc32_gzip_refl_perf:\n");
+
+       if (posix_memalign(&buf, 1024, TEST_LEN)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+
+       printf("Start timed tests\n");
+       fflush(0);
+
+       memset(buf, 0, TEST_LEN);
+       BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_gzip_refl(TEST_SEED, buf, TEST_LEN));
+       printf("crc32_gzip_refl" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)TEST_LEN);
+
+       printf("finish 0x%x\n", crc);
+
+       printf("crc32_gzip_refl_base_perf:\n");
+       printf("Start timed tests\n");
+       fflush(0);
+
+       BENCHMARK(&start, BENCHMARK_TIME, crc =
+                 crc32_gzip_refl_base(TEST_SEED, buf, TEST_LEN));
+       printf("crc32_gzip_refl_base" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)TEST_LEN);
+
+       printf("finish 0x%x\n", crc);
+
+       return 0;
+}
index 3c463dada95b2493d3225ca1f8813ef3602e75e1..32495ed7fa6250b61958bf2022c45b5e0b98679d 100644 (file)
@@ -72,7 +72,7 @@ section .text
         %define VARIABLE_OFFSET 16*2+8
 %endif
 align 16
-global crc32_ieee_01:function
+global crc32_ieee_01:ISAL_SYM_TYPE_FUNCTION
 crc32_ieee_01:
 
        not     arg1_low32      ;~init_crc
diff --git a/ceph/src/isa-l/crc/crc32_ieee_02.asm b/ceph/src/isa-l/crc/crc32_ieee_02.asm
new file mode 100644 (file)
index 0000000..8a472b0
--- /dev/null
@@ -0,0 +1,651 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;       Function API:
+;       UINT32 crc32_ieee_02(
+;               UINT32 init_crc, //initial CRC value, 32 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf
+
+%include "reg_sizes.asm"
+
+%define        fetch_dist      1024
+[bits 64]
+default rel
+
+section .text
+
+%ifidn __OUTPUT_FORMAT__, win64
+        %xdefine        arg1 rcx
+        %xdefine        arg2 rdx
+        %xdefine        arg3 r8
+
+        %xdefine        arg1_low32 ecx
+%else
+        %xdefine        arg1 rdi
+        %xdefine        arg2 rsi
+        %xdefine        arg3 rdx
+
+        %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+        %define XMM_SAVE 16*2
+        %define VARIABLE_OFFSET 16*10+8
+%else
+        %define VARIABLE_OFFSET 16*2+8
+%endif
+align 16
+global crc32_ieee_02:ISAL_SYM_TYPE_FUNCTION
+crc32_ieee_02:
+
+       not     arg1_low32      ;~init_crc
+
+       sub     rsp,VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+        ; push the xmm registers into the stack to maintain
+        vmovdqa  [rsp + XMM_SAVE + 16*0], xmm6
+        vmovdqa  [rsp + XMM_SAVE + 16*1], xmm7
+        vmovdqa  [rsp + XMM_SAVE + 16*2], xmm8
+        vmovdqa  [rsp + XMM_SAVE + 16*3], xmm9
+        vmovdqa  [rsp + XMM_SAVE + 16*4], xmm10
+        vmovdqa  [rsp + XMM_SAVE + 16*5], xmm11
+        vmovdqa  [rsp + XMM_SAVE + 16*6], xmm12
+        vmovdqa  [rsp + XMM_SAVE + 16*7], xmm13
+%endif
+
+
+       ; check if smaller than 256
+       cmp     arg3, 256
+
+       ; for sizes less than 256, we can't fold 128B at a time...
+       jl      _less_than_256
+
+
+       ; load the initial crc value
+       vmovd   xmm10, arg1_low32       ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with initial crc at correct place.
+       vpslldq xmm10, 12
+
+       vmovdqa xmm11, [SHUF_MASK]
+       ; receive the initial 128B data, xor the initial crc value
+       vmovdqu xmm0, [arg2+16*0]
+       vmovdqu xmm1, [arg2+16*1]
+       vmovdqu xmm2, [arg2+16*2]
+       vmovdqu xmm3, [arg2+16*3]
+       vmovdqu xmm4, [arg2+16*4]
+       vmovdqu xmm5, [arg2+16*5]
+       vmovdqu xmm6, [arg2+16*6]
+       vmovdqu xmm7, [arg2+16*7]
+
+       vpshufb xmm0, xmm11
+       ; XOR the initial_crc value
+       vpxor   xmm0, xmm10
+       vpshufb xmm1, xmm11
+       vpshufb xmm2, xmm11
+       vpshufb xmm3, xmm11
+       vpshufb xmm4, xmm11
+       vpshufb xmm5, xmm11
+       vpshufb xmm6, xmm11
+       vpshufb xmm7, xmm11
+
+       vmovdqa xmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       ; we subtract 256 instead of 128 to save one instruction from the loop
+       sub     arg3, 256
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The _fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+_fold_128_B_loop:
+
+       ; update the buffer pointer
+       add     arg2, 128               ;    buf += 128;
+
+       prefetchnta [arg2+fetch_dist+0]
+       vmovdqu xmm9, [arg2+16*0]
+       vmovdqu xmm12, [arg2+16*1]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm0
+       vmovdqa xmm13, xmm1
+       vpclmulqdq      xmm0, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm1, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm0, xmm9
+       vxorps  xmm0, xmm8
+       vpxor   xmm1, xmm12
+       vxorps  xmm1, xmm13
+
+       prefetchnta [arg2+fetch_dist+32]
+       vmovdqu xmm9, [arg2+16*2]
+       vmovdqu xmm12, [arg2+16*3]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm2
+       vmovdqa xmm13, xmm3
+       vpclmulqdq      xmm2, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm3, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm2, xmm9
+       vxorps  xmm2, xmm8
+       vpxor   xmm3, xmm12
+       vxorps  xmm3, xmm13
+
+       prefetchnta [arg2+fetch_dist+64]
+       vmovdqu xmm9, [arg2+16*4]
+       vmovdqu xmm12, [arg2+16*5]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm4
+       vmovdqa xmm13, xmm5
+       vpclmulqdq      xmm4, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm5, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm4, xmm9
+       vxorps  xmm4, xmm8
+       vpxor   xmm5, xmm12
+       vxorps  xmm5, xmm13
+
+       prefetchnta [arg2+fetch_dist+96]
+       vmovdqu xmm9, [arg2+16*6]
+       vmovdqu xmm12, [arg2+16*7]
+       vpshufb xmm9, xmm11
+       vpshufb xmm12, xmm11
+       vmovdqa xmm8, xmm6
+       vmovdqa xmm13, xmm7
+       vpclmulqdq      xmm6, xmm10, 0x0
+       vpclmulqdq      xmm8, xmm10 , 0x11
+       vpclmulqdq      xmm7, xmm10, 0x0
+       vpclmulqdq      xmm13, xmm10 , 0x11
+       vpxor   xmm6, xmm9
+       vxorps  xmm6, xmm8
+       vpxor   xmm7, xmm12
+       vxorps  xmm7, xmm13
+
+       sub     arg3, 128
+
+       ; check if there is another 128B in the buffer to be able to fold
+       jge     _fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+       add     arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer
+       ; the 128 of folded data is in 4 of the xmm registers: xmm0, xmm1, xmm2, xmm3
+
+
+       ; fold the 8 xmm registers to 1 xmm register with different constants
+
+       vmovdqa xmm10, [rk9]
+       vmovdqa xmm8, xmm0
+       vpclmulqdq      xmm0, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm0
+
+       vmovdqa xmm10, [rk11]
+       vmovdqa xmm8, xmm1
+       vpclmulqdq      xmm1, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm1
+
+       vmovdqa xmm10, [rk13]
+       vmovdqa xmm8, xmm2
+       vpclmulqdq      xmm2, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm2
+
+       vmovdqa xmm10, [rk15]
+       vmovdqa xmm8, xmm3
+       vpclmulqdq      xmm3, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm3
+
+       vmovdqa xmm10, [rk17]
+       vmovdqa xmm8, xmm4
+       vpclmulqdq      xmm4, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm4
+
+       vmovdqa xmm10, [rk19]
+       vmovdqa xmm8, xmm5
+       vpclmulqdq      xmm5, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vxorps  xmm7, xmm5
+
+       vmovdqa xmm10, [rk1]    ;xmm10 has rk1 and rk2
+                                                                       ;imm value of pclmulqdq instruction will determine which constant to use
+       vmovdqa xmm8, xmm6
+       vpclmulqdq      xmm6, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm6
+
+
+       ; instead of 128, we add 112 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add     arg3, 128-16
+       jl      _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       vmovdqa xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vmovdqu xmm0, [arg2]
+       vpshufb xmm0, xmm11
+       vpxor   xmm7, xmm0
+       add     arg2, 16
+       sub     arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge     _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+_final_reduction_for_128:
+       ; check if any more data to fold. If not, compute the CRC of the final 128 bits
+       add     arg3, 16
+       je      _128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+       vmovdqa xmm2, xmm7
+
+       vmovdqu xmm1, [arg2 - 16 + arg3]
+       vpshufb xmm1, xmm11
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, arg3
+       vmovdqu xmm0, [rax]
+
+       ; shift xmm2 to the left by arg3 bytes
+       vpshufb xmm2, xmm0
+
+       ; shift xmm7 to the right by 16-arg3 bytes
+       vpxor   xmm0, [mask1]
+       vpshufb xmm7, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       ; fold 16 Bytes
+       vmovdqa xmm2, xmm1
+       vmovdqa xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor   xmm7, xmm8
+       vpxor   xmm7, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa xmm10, [rk5]    ; rk5 and rk6 in xmm10
+       vmovdqa xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0x1
+       vpslldq xmm0, 8
+       vpxor   xmm7, xmm0
+
+       ;32b fold
+       vmovdqa xmm0, xmm7
+
+       vpand   xmm0, [mask2]
+
+       vpsrldq xmm7, 12
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor   xmm7, xmm0
+
+       ;barrett reduction
+_barrett:
+       vmovdqa xmm10, [rk7]    ; rk7 and rk8 in xmm10
+       vmovdqa xmm0, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x01
+       vpslldq xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x11
+
+       vpslldq xmm7, 4
+       vpxor   xmm7, xmm0
+       vpextrd eax, xmm7,1
+
+_cleanup:
+       not     eax
+%ifidn __OUTPUT_FORMAT__, win64
+        vmovdqa  xmm6, [rsp + XMM_SAVE + 16*0]
+        vmovdqa  xmm7, [rsp + XMM_SAVE + 16*1]
+        vmovdqa  xmm8, [rsp + XMM_SAVE + 16*2]
+        vmovdqa  xmm9, [rsp + XMM_SAVE + 16*3]
+        vmovdqa  xmm10, [rsp + XMM_SAVE + 16*4]
+        vmovdqa  xmm11, [rsp + XMM_SAVE + 16*5]
+        vmovdqa  xmm12, [rsp + XMM_SAVE + 16*6]
+        vmovdqa  xmm13, [rsp + XMM_SAVE + 16*7]
+%endif
+       add     rsp,VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      _less_than_32
+       vmovdqa xmm11, [SHUF_MASK]
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12        ; align it to its correct place
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm11     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0
+
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     _16B_reduction_loop
+
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      _cleanup
+
+       vmovdqa xmm11, [SHUF_MASK]
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12        ; align it to its correct place
+
+       cmp     arg3, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm11     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      _only_less_than_4
+
+       ;       backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg3, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg3, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg3, 1
+        jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+_zero_left:
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       ; shl r9, 4
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, r9
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm7, xmm0
+       jmp     _128_done
+
+align 16
+_exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+_only_less_than_4:
+       cmp     arg3, 3
+       jl      _only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 5
+
+       jmp     _barrett
+_only_less_than_3:
+       cmp     arg3, 2
+       jl      _only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 6
+
+       jmp     _barrett
+_only_less_than_2:
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm11
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 7
+
+       jmp     _barrett
+
+section .data
+
+; precomputed constants
+align 16
+
+rk1 :
+DQ 0xf200aa6600000000
+rk2 :
+DQ 0x17d3315d00000000
+rk3 :
+DQ 0x022ffca500000000
+rk4 :
+DQ 0x9d9ee22f00000000
+rk5 :
+DQ 0xf200aa6600000000
+rk6 :
+DQ 0x490d678d00000000
+rk7 :
+DQ 0x0000000104d101df
+rk8 :
+DQ 0x0000000104c11db7
+rk9 :
+DQ 0x6ac7e7d700000000
+rk10 :
+DQ 0xfcd922af00000000
+rk11 :
+DQ 0x34e45a6300000000
+rk12 :
+DQ 0x8762c1f600000000
+rk13 :
+DQ 0x5395a0ea00000000
+rk14 :
+DQ 0x54f2d5c700000000
+rk15 :
+DQ 0xd3504ec700000000
+rk16 :
+DQ 0x57a8445500000000
+rk17 :
+DQ 0xc053585d00000000
+rk18 :
+DQ 0x766f1b7800000000
+rk19 :
+DQ 0xcd8c54b500000000
+rk20 :
+DQ 0xab40b71e00000000
+
+
+
+
+
+
+
+
+
+mask1:
+dq 0x8080808080808080, 0x8080808080808080
+mask2:
+dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK:
+dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;      dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;      dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;      dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;      dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;      dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;      dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;      dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;      dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;      dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;      dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;      dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;      dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;      dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;      dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;      dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
diff --git a/ceph/src/isa-l/crc/crc32_ieee_by16_10.asm b/ceph/src/isa-l/crc/crc32_ieee_by16_10.asm
new file mode 100644 (file)
index 0000000..200fd93
--- /dev/null
@@ -0,0 +1,584 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2020 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       UINT32 crc32_gzip_refl_by16_10(
+;               UINT32 init_crc, //initial CRC value, 32 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               UINT64 len //buffer length in bytes (64-bit data)
+;       );
+;
+;       Authors:
+;               Erdinc Ozturk
+;               Vinodh Gopal
+;               James Guilford
+;
+;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
+;       URL: http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf
+;
+;
+
+%include "reg_sizes.asm"
+
+%ifndef FUNCTION_NAME
+%define FUNCTION_NAME crc32_ieee_by16_10
+%endif
+
+%if (AS_FEATURE_LEVEL) >= 10
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+
+       %xdefine        arg1_low32 ecx
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+
+       %xdefine        arg1_low32 edi
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*12+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global FUNCTION_NAME:ISAL_SYM_TYPE_FUNCTION
+FUNCTION_NAME:
+
+       not             arg1_low32
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+       vmovdqa         [rsp + XMM_SAVE + 16*8], xmm14
+       vmovdqa         [rsp + XMM_SAVE + 16*9], xmm15
+%endif
+
+       vbroadcasti32x4 zmm18, [SHUF_MASK]
+       cmp             arg3, 256
+       jl              .less_than_256
+
+       ; load the initial crc value
+       vmovd           xmm10, arg1_low32      ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with initial crc at correct place.
+       vpslldq         xmm10, 12
+
+       ; receive the initial 64B data, xor the initial crc value
+       vmovdqu8        zmm0, [arg2+16*0]
+       vmovdqu8        zmm4, [arg2+16*4]
+       vpshufb         zmm0, zmm0, zmm18
+       vpshufb         zmm4, zmm4, zmm18
+       vpxorq          zmm0, zmm10
+       vbroadcasti32x4 zmm10, [rk3]    ;xmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+
+       sub             arg3, 256
+       cmp             arg3, 256
+       jl              .fold_128_B_loop
+
+       vmovdqu8        zmm7, [arg2+16*8]
+       vmovdqu8        zmm8, [arg2+16*12]
+       vpshufb         zmm7, zmm7, zmm18
+       vpshufb         zmm8, zmm8, zmm18
+       vbroadcasti32x4 zmm16, [rk_1]   ;zmm16 has rk-1 and rk-2
+       sub             arg3, 256
+
+.fold_256_B_loop:
+       add             arg2, 256
+       vmovdqu8        zmm3, [arg2+16*0]
+       vpshufb         zmm3, zmm3, zmm18
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm3
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm16, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm16, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       vmovdqu8        zmm11, [arg2+16*8]
+       vpshufb         zmm11, zmm11, zmm18
+       vpclmulqdq      zmm12, zmm7, zmm16, 0x00
+       vpclmulqdq      zmm13, zmm7, zmm16, 0x11
+       vpxorq          zmm7, zmm12, zmm13
+       vpxorq          zmm7, zmm7, zmm11
+
+       vmovdqu8        zmm17, [arg2+16*12]
+       vpshufb         zmm17, zmm17, zmm18
+       vpclmulqdq      zmm14, zmm8, zmm16, 0x00
+       vpclmulqdq      zmm15, zmm8, zmm16, 0x11
+       vpxorq          zmm8, zmm14, zmm15
+       vpxorq          zmm8, zmm8, zmm17
+
+       sub             arg3, 256
+       jge             .fold_256_B_loop
+
+       ;; Fold 256 into 128
+       add             arg2, 256
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x11
+       vpternlogq      zmm7, zmm1, zmm2, 0x96  ; xor ABC
+
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpternlogq      zmm8, zmm5, zmm6, 0x96  ; xor ABC
+
+       vmovdqa32       zmm0, zmm7
+       vmovdqa32       zmm4, zmm8
+
+       add             arg3, 128
+       jmp             .fold_128_B_register
+
+
+
+       ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The fold_128_B_loop
+       ; loop will fold 128B at a time until we have 128+y Bytes of buffer
+
+       ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
+.fold_128_B_loop:
+       add             arg2, 128
+       vmovdqu8        zmm8, [arg2+16*0]
+       vpshufb         zmm8, zmm8, zmm18
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x11
+       vpxorq          zmm0, zmm2, zmm1
+       vpxorq          zmm0, zmm0, zmm8
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       sub             arg3, 128
+       jge             .fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add             arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+
+.fold_128_B_register:
+       ; fold the 8 128b parts into 1 xmm register with different constants
+       vmovdqu8        zmm16, [rk9]            ; multiply by rk9-rk16
+       vmovdqu8        zmm11, [rk17]           ; multiply by rk17-rk20, rk1,rk2, 0,0
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vextracti64x2   xmm7, zmm4, 3           ; save last that has no multiplicand
+
+       vpclmulqdq      zmm5, zmm4, zmm11, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm11, 0x11
+       vmovdqa         xmm10, [rk1]            ; Needed later in reduction loop
+       vpternlogq      zmm1, zmm2, zmm5, 0x96  ; xor ABC
+       vpternlogq      zmm1, zmm6, zmm7, 0x96  ; xor ABC
+
+       vshufi64x2      zmm8, zmm1, zmm1, 0x4e ; Swap 1,0,3,2 - 01 00 11 10
+       vpxorq          ymm8, ymm8, ymm1
+       vextracti64x2   xmm5, ymm8, 1
+       vpxorq          xmm7, xmm5, xmm8
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              .final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+.16B_reduction_loop:
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x11
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x00
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpshufb         xmm0, xmm0, xmm18
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             .16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+.final_reduction_for_128:
+       add             arg3, 16
+       je              .128_done
+
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+.get_last_two_xmms:
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+       vpshufb         xmm1, xmm18
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table + 16]
+       sub             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+       vpshufb         xmm2, xmm0
+       vpxor           xmm0, [mask1]
+       vpshufb         xmm7, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       vpclmulqdq      xmm8, xmm7, xmm10, 0x11
+       vpclmulqdq      xmm7, xmm7, xmm10, 0x00
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm1
+
+.128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0x01       ; H*L
+       vpslldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;32b fold
+       vmovdqa         xmm0, xmm7
+       vpand           xmm0, [mask2]
+       vpsrldq         xmm7, 12
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpxor           xmm7, xmm0
+
+       ;barrett reduction
+.barrett:
+       vmovdqa         xmm10, [rk7]    ; rk7 and rk8 in xmm10
+       vmovdqa         xmm0, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x01
+       vpslldq         xmm7, 4
+       vpclmulqdq      xmm7, xmm10, 0x11
+
+       vpslldq         xmm7, 4
+       vpxor           xmm7, xmm0
+       vpextrd         eax, xmm7, 1
+
+.cleanup:
+       not             eax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+       vmovdqa         xmm14, [rsp + XMM_SAVE + 16*8]
+       vmovdqa         xmm15, [rsp + XMM_SAVE + 16*9]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+.less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      .less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12                ; align it to its correct place
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpshufb xmm7, xmm18             ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     .16B_reduction_loop
+
+
+align 16
+.less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     eax, arg1_low32
+       test    arg3, arg3
+       je      .cleanup
+
+       vmovd   xmm0, arg1_low32        ; get the initial crc value
+       vpslldq xmm0, 12                ; align it to its correct place
+
+       cmp     arg3, 16
+       je      .exact_16_left
+       jl      .less_than_16_left
+
+       vmovdqu xmm7, [arg2]            ; load the plaintext
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0              ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]            ; rk1 and rk2 in xmm10
+       jmp     .get_last_two_xmms
+
+align 16
+.less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       cmp     arg3, 4
+       jl      .only_less_than_4
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      .less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+.less_than_8_left:
+
+       cmp     arg3, 4
+       jl      .less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+.less_than_4_left:
+
+       cmp     arg3, 2
+       jl      .less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+.less_than_2_left:
+       cmp     arg3, 1
+       jl      .zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+.zero_left:
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, r9
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm7,xmm0
+       jmp     .128_done
+
+align 16
+.exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       jmp     .128_done
+
+.only_less_than_4:
+       cmp     arg3, 3
+       jl      .only_less_than_3
+
+       ; load 3 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       mov     al, [arg2+2]
+       mov     [r11+2], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 5
+       jmp     .barrett
+
+.only_less_than_3:
+       cmp     arg3, 2
+       jl      .only_less_than_2
+
+       ; load 2 Bytes
+       mov     al, [arg2]
+       mov     [r11], al
+
+       mov     al, [arg2+1]
+       mov     [r11+1], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 6
+       jmp     .barrett
+
+.only_less_than_2:
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       vpsrldq xmm7, 7
+       jmp     .barrett
+
+section .data
+align 32
+
+%ifndef USE_CONSTS
+; precomputed constants
+rk_1: dq 0x1851689900000000
+rk_2: dq 0xa3dc855100000000
+rk1:  dq 0xf200aa6600000000
+rk2:  dq 0x17d3315d00000000
+rk3:  dq 0x022ffca500000000
+rk4:  dq 0x9d9ee22f00000000
+rk5:  dq 0xf200aa6600000000
+rk6:  dq 0x490d678d00000000
+rk7:  dq 0x0000000104d101df
+rk8:  dq 0x0000000104c11db7
+rk9:  dq 0x6ac7e7d700000000
+rk10: dq 0xfcd922af00000000
+rk11: dq 0x34e45a6300000000
+rk12: dq 0x8762c1f600000000
+rk13: dq 0x5395a0ea00000000
+rk14: dq 0x54f2d5c700000000
+rk15: dq 0xd3504ec700000000
+rk16: dq 0x57a8445500000000
+rk17: dq 0xc053585d00000000
+rk18: dq 0x766f1b7800000000
+rk19: dq 0xcd8c54b500000000
+rk20: dq 0xab40b71e00000000
+
+rk_1b: dq 0xf200aa6600000000
+rk_2b: dq 0x17d3315d00000000
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%else
+INCLUDE_CONSTS
+%endif
+
+mask1: dq 0x8080808080808080, 0x8080808080808080
+mask2: dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+
+SHUF_MASK: dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+dq 0x8080808080808080, 0x0f0e0d0c0b0a0908
+dq 0x8080808080808080, 0x8080808080808080
+
+%else  ; Assembler doesn't understand these opcodes. Add empty symbol for windows.
+%ifidn __OUTPUT_FORMAT__, win64
+global no_ %+ FUNCTION_NAME
+no_ %+ FUNCTION_NAME %+ :
+%endif
+%endif ; (AS_FEATURE_LEVEL) >= 10
index 97f6868094473cb9386d6fe86ed658d31074c6d0..39bed5a95b8d2589695d29e2171e1f059f454455 100644 (file)
@@ -74,7 +74,7 @@ section .text
 %endif
 
 align 16
-global crc32_ieee_by4:function
+global crc32_ieee_by4:ISAL_SYM_TYPE_FUNCTION
 crc32_ieee_by4:
 
        not arg1_low32
index c6c74950e88515ff35bf5886d4914497397684f3..f6ffbbe442164eb615788f44863540b926ae0df5 100644 (file)
 #ifdef CACHED_TEST
 // Cached test, loop many times over small dataset
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   400000
 # define TEST_TYPE_STR "_warm"
 #else
 // Uncached test.  Pull from large mem base.
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     (2 * GT_L3_CACHE)
-#  define TEST_LOOPS   100
 #  define TEST_TYPE_STR "_cold"
 #endif
 
 
 int main(int argc, char *argv[])
 {
-       int i;
        void *buf;
        uint32_t crc;
-       struct perf start, stop;
+       struct perf start;
 
        printf("crc32_ieee_perf:\n");
 
@@ -73,14 +70,9 @@ int main(int argc, char *argv[])
        fflush(0);
 
        memset(buf, 0, TEST_LEN);
-       crc = crc32_ieee(TEST_SEED, buf, TEST_LEN);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               crc = crc32_ieee(TEST_SEED, buf, TEST_LEN);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_ieee(TEST_SEED, buf, TEST_LEN));
        printf("crc32_ieee" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
+       perf_print(start, (long long)TEST_LEN);
 
        printf("finish 0x%x\n", crc);
        return 0;
diff --git a/ceph/src/isa-l/crc/crc32_ieee_test.c b/ceph/src/isa-l/crc/crc32_ieee_test.c
deleted file mode 100644 (file)
index 4dfbc00..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include "crc.h"
-#include "types.h"
-
-#ifndef TEST_SEED
-# define TEST_SEED 0x1234
-#endif
-
-#define MAX_BUF   512
-#define TEST_SIZE  20
-
-typedef uint64_t u64;
-typedef uint32_t u32;
-typedef uint16_t u16;
-typedef uint8_t u8;
-
-// Generates pseudo-random data
-
-void rand_buffer(unsigned char *buf, long buffer_size)
-{
-       long i;
-       for (i = 0; i < buffer_size; i++)
-               buf[i] = rand();
-}
-
-int main(int argc, char *argv[])
-{
-       int fail = 0;
-       u32 r;
-       int verbose = argc - 1;
-       int i, s, ret;
-       void *buf_alloc;
-       unsigned char *buf;
-
-       printf("Test crc32_ieee ");
-
-       // Align to MAX_BUF boundary
-       ret = posix_memalign(&buf_alloc, MAX_BUF, MAX_BUF * TEST_SIZE);
-       if (ret) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       buf = (unsigned char *)buf_alloc;
-
-       srand(TEST_SEED);
-
-       // Test of all zeros
-       memset(buf, 0, MAX_BUF * 10);
-       u32 crc = crc32_ieee(TEST_SEED, buf, MAX_BUF);
-       u32 crc_ref = crc32_ieee_base(TEST_SEED, buf, MAX_BUF);
-       if (crc != crc_ref) {
-               fail++;
-               printf("\n                 opt   ref\n");
-               printf("                 ------ ------\n");
-               printf("crc     zero = 0x%8x 0x%8x \n", crc, crc_ref);
-       } else
-               printf(".");
-
-       // Another simple test pattern
-       memset(buf, 0x8a, MAX_BUF);
-       crc = crc32_ieee(TEST_SEED, buf, MAX_BUF);
-       crc_ref = crc32_ieee_base(TEST_SEED, buf, MAX_BUF);
-       if (crc != crc_ref)
-               fail++;
-       if (verbose)
-               printf("crc  all 8a = 0x%8x 0x%8x\n", crc, crc_ref);
-       else
-               printf(".");
-
-       // Do a few random tests
-       r = rand();
-       rand_buffer(buf, MAX_BUF * TEST_SIZE);
-
-       for (i = 0; i < TEST_SIZE; i++) {
-               crc = crc32_ieee(r, buf, MAX_BUF);
-               crc_ref = crc32_ieee_base(r, buf, MAX_BUF);
-               if (crc != crc_ref)
-                       fail++;
-               if (verbose)
-                       printf("crc rand%3d = 0x%8x 0x%8x\n", i, crc, crc_ref);
-               else
-                       printf(".");
-               buf += MAX_BUF;
-       }
-
-       // Do a few random sizes
-       buf = (unsigned char *)buf_alloc;       //reset buf
-       r = rand();
-
-       for (i = MAX_BUF; i >= 0; i--) {
-               crc = crc32_ieee(r, buf, i);
-               crc_ref = crc32_ieee_base(r, buf, i);
-               if (crc != crc_ref) {
-                       fail++;
-                       printf("fail random size%i 0x%8x 0x%8x\n", i, crc, crc_ref);
-               } else
-                       printf(".");
-       }
-
-       // Try different seeds
-       for (s = 0; s < 20; s++) {
-               buf = (unsigned char *)buf_alloc;       //reset buf
-
-               r = rand();     // just to get a new seed
-               rand_buffer(buf, MAX_BUF * TEST_SIZE);  // new pseudo-rand data
-
-               if (verbose)
-                       printf("seed = 0x%x\n", r);
-
-               for (i = 0; i < TEST_SIZE; i++) {
-                       crc = crc32_ieee(r, buf, MAX_BUF);
-                       crc_ref = crc32_ieee_base(r, buf, MAX_BUF);
-                       if (crc != crc_ref)
-                               fail++;
-                       if (verbose)
-                               printf("crc rand%3d = 0x%8x 0x%8x\n", i, crc, crc_ref);
-                       else
-                               printf(".");
-                       buf += MAX_BUF;
-               }
-       }
-
-       // Run tests at end of buffer
-       buf = (unsigned char *)buf_alloc;       //reset buf
-       buf = buf + ((MAX_BUF - 1) * TEST_SIZE);        //Line up TEST_SIZE from end
-       for (i = 0; i < TEST_SIZE; i++) {
-               crc = crc32_ieee(TEST_SEED, buf + i, TEST_SIZE - i);
-               crc_ref = crc32_ieee_base(TEST_SEED, buf + i, TEST_SIZE - i);
-               if (crc != crc_ref)
-                       fail++;
-               if (verbose)
-                       printf("crc eob rand%3d = 0x%4x 0x%4x\n", i, crc, crc_ref);
-               else
-                       printf(".");
-       }
-
-       printf("Test done: %s\n", fail ? "Fail" : "Pass");
-       if (fail)
-               printf("\nFailed %d tests\n", fail);
-
-       return fail;
-}
index 2833a8d0dd625a0959d79cbeb494afed1b3a0ac1..4f81e3a3ba071e8eddd12a2a39fd61a69bd0cf8d 100644 (file)
@@ -55,6 +55,9 @@ default rel
        xor     rbx, rbx                ;; rbx = crc1 = 0;
        xor     r10, r10                ;; r10 = crc2 = 0;
 
+       cmp     len, %%bSize*3*2
+       jbe     %%non_prefetch
+
  %assign i 0
  %rep %%bSize/8 - 1
   %if i < %%bSize*3/4
@@ -65,6 +68,18 @@ default rel
        crc32   r10, qword [bufptmp+i + 2*%%bSize]  ;; update crc2
        %assign i (i+8)
  %endrep
+       jmp %%next %+ %1
+
+%%non_prefetch:
+ %assign i 0
+ %rep %%bSize/8 - 1
+       crc32   rax, qword [bufptmp+i + 0*%%bSize]  ;; update crc0
+       crc32   rbx, qword [bufptmp+i + 1*%%bSize]  ;; update crc1
+       crc32   r10, qword [bufptmp+i + 2*%%bSize]  ;; update crc2
+       %assign i (i+8)
+ %endrep
+
+%%next %+ %1:
        crc32   rax, qword [bufptmp+i + 0*%%bSize]  ;; update crc0
        crc32   rbx, qword [bufptmp+i + 1*%%bSize]  ;; update crc1
 ; SKIP  ;crc32  r10, [bufptmp+i + 2*%%bSize]  ;; update crc2
@@ -138,7 +153,7 @@ default rel
 ;;;    crc_init = r8
 ;;;
 
-global  crc32_iscsi_00:function
+global  crc32_iscsi_00:ISAL_SYM_TYPE_FUNCTION
 crc32_iscsi_00:
 
 %ifidn __OUTPUT_FORMAT__, elf64
@@ -179,6 +194,9 @@ crc32_iscsi_00:
 
        mov     rax, crc_init           ;; rax = crc_init;
 
+       cmp     len, 8
+       jb      less_than_8
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
@@ -188,9 +206,6 @@ crc32_iscsi_00:
                                        ;; amount of the address
        je      proc_block              ;; Skip if aligned
 
-       cmp     len, 8
-       jb      less_than_8
-
        ;;;; Calculate CRC of unaligned bytes of the buffer (if any) ;;;;
        mov     rbx, [bufptmp]          ;; load a quadword from the buffer
        add     bufptmp, bufp           ;; align buffer pointer for
@@ -297,19 +312,19 @@ do_return:
 less_than_8:
        test    len,4
        jz      less_than_4
-       crc32   eax, dword[bufptmp]
-       add     bufptmp,4
+       crc32   eax, dword[bufp]
+       add     bufp,4
 less_than_4:
        test    len,2
        jz      less_than_2
-       crc32   eax, word[bufptmp]
-       add     bufptmp,2
+       crc32   eax, word[bufp]
+       add     bufp,2
 less_than_2:
        test    len,1
        jz      do_return
-       crc32   rax, byte[bufptmp]
+       crc32   rax, byte[bufp]
        pop     rbx
-       pop     bufptmp
+       pop     bufp
        ret
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -652,5 +667,5 @@ DD 0x2f2aa980,0xf24c623b,0x900b4807,0x4d6d83bc
 DD 0x54851c7f,0x89e3d7c4,0xeba4fdf8,0x36c23643
 
 ;;;       func            core, ver, snum
-slversion crc32_iscsi_00, 00,   03,  0014
+slversion crc32_iscsi_00, 00,   04,  0014
 
index 5b730f63986c754c7eae8d9f949bc82554c6b1e1..2a815177a7d815ceb5db27186b61301015b817a3 100644 (file)
@@ -50,7 +50,7 @@ default rel
 ;;;         len = rdx
 ;;;    crc_init = r8
 
-global  crc32_iscsi_01:function
+global  crc32_iscsi_01:ISAL_SYM_TYPE_FUNCTION
 crc32_iscsi_01:
 
 %ifidn __OUTPUT_FORMAT__, elf64
@@ -97,6 +97,11 @@ crc32_iscsi_01:
        mov     crc_init, crc_init_arg
 %endif
 
+       ;; If len is less than 8 we need to jump to special code to avoid
+       ;; reading beyond the end of the buffer
+       cmp     len, 8
+       jb      less_than_8
+
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -108,11 +113,6 @@ crc32_iscsi_01:
                                    ;; the address
        je      proc_block          ;; Skip if aligned
 
-       ;; If len is less than 8 and we're unaligned, we need to jump
-       ;; to special code to avoid reading beyond the end of the buffer
-       cmp     len, 8
-       jb      less_than_8
-
        ;;;; Calculate CRC of unaligned bytes of the buffer (if any) ;;;
        mov     tmp, [bufptmp]      ;; load a quadword from the buffer
        add     bufptmp, bufp       ;; align buffer pointer for quadword
@@ -190,9 +190,13 @@ full_block:
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 crc_array:
+       cmp     len, 128*24*2
+       jbe     non_prefetch
+
 %assign i 128
 %rep 128-1
-CONCAT(crc_,i,:)
+
+CONCAT(_crc_,i,:)
        crc32   crc_init,  qword [block_0 - i*8]
        crc32   crc1,      qword [block_1 - i*8]
        crc32   crc2,      qword [block_2 - i*8]
@@ -200,9 +204,23 @@ CONCAT(crc_,i,:)
  %if i > 128*8 / 32    ; prefetch next 3KB data
        prefetchnta [block_2 + 128*32 - i*32]
  %endif
+
+%assign i (i-1)
+%endrep
+       jmp next_
+
+non_prefetch:
+%assign i 128
+%rep 128-1
+
+CONCAT(crc_,i,:)
+       crc32   crc_init,  qword [block_0 - i*8]
+       crc32   crc1,      qword [block_1 - i*8]
+       crc32   crc2,      qword [block_2 - i*8]
 %assign i (i-1)
 %endrep
 
+next_:
 CONCAT(crc_,i,:)
        crc32   crc_init,  qword [block_0 - i*8]
        crc32   crc1,      qword [block_1 - i*8]
@@ -316,17 +334,17 @@ do_16:
 less_than_8:
        test    len,4
        jz      less_than_4
-       crc32   crc_init_dw, dword[bufptmp]
-       add     bufptmp,4
+       crc32   crc_init_dw, dword[bufp]
+       add     bufp,4
 less_than_4:
        test    len,2
        jz      less_than_2
-       crc32   crc_init_dw, word[bufptmp]
-       add     bufptmp,2
+       crc32   crc_init_dw, word[bufp]
+       add     bufp,2
 less_than_2:
        test    len,1
        jz      do_return
-       crc32   crc_init_dw, byte[bufptmp]
+       crc32   crc_init_dw, byte[bufp]
        mov     rax, crc_init
        pop     rsi
        pop     rdi
@@ -568,5 +586,5 @@ K_table:
        dq 0x1a0f717c4, 0x0170076fa
 
 ;;;       func            core, ver, snum
-slversion crc32_iscsi_01, 01,   03,  0015
+slversion crc32_iscsi_01, 01,   04,  0015
 
index 2770099aec84a34ce9208490b94755f4f75b3724..d768cdfa62f84712e9df6111f556a8525f7b8536 100644 (file)
 #ifdef CACHED_TEST
 // Cached test, loop many times over small dataset
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   1000000
 # define TEST_TYPE_STR "_warm"
 #else
 // Uncached test.  Pull from large mem base.
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     (2 * GT_L3_CACHE)
-#  define TEST_LOOPS   500
 #  define TEST_TYPE_STR "_cold"
 #endif
 
 
 int main(int argc, char *argv[])
 {
-       int i;
        void *buf;
        uint32_t crc;
-       struct perf start, stop;
+       struct perf start;
 
        printf("crc32_iscsi_perf:\n");
 
@@ -73,14 +70,9 @@ int main(int argc, char *argv[])
        fflush(0);
 
        memset(buf, 0, TEST_LEN);
-       crc = crc32_iscsi(buf, TEST_LEN, TEST_SEED);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               crc = crc32_iscsi(buf, TEST_LEN, TEST_SEED);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_iscsi(buf, TEST_LEN, TEST_SEED));
        printf("crc32_iscsi" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
+       perf_print(start, (long long)TEST_LEN);
 
        printf("finish 0x%x\n", crc);
        return 0;
diff --git a/ceph/src/isa-l/crc/crc32_iscsi_test.c b/ceph/src/isa-l/crc/crc32_iscsi_test.c
deleted file mode 100644 (file)
index e37f23f..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "crc.h"
-#include "types.h"
-
-unsigned long crc32_table_iscsi[256] = {
-       0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
-       0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
-       0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B,
-       0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
-       0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B,
-       0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
-       0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54,
-       0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
-       0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A,
-       0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
-       0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5,
-       0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
-       0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45,
-       0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
-       0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A,
-       0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
-       0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48,
-       0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
-       0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687,
-       0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
-       0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927,
-       0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
-       0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8,
-       0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
-       0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096,
-       0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
-       0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859,
-       0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
-       0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9,
-       0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
-       0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36,
-       0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
-       0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C,
-       0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
-       0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043,
-       0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
-       0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3,
-       0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
-       0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C,
-       0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
-       0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652,
-       0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
-       0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D,
-       0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
-       0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D,
-       0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
-       0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2,
-       0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
-       0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530,
-       0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
-       0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF,
-       0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
-       0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F,
-       0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
-       0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90,
-       0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
-       0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE,
-       0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
-       0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321,
-       0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
-       0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81,
-       0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
-       0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E,
-       0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351,
-};
-
-#define PAGESIZE  10240
-
-int main(void)
-{
-       unsigned int i, j, good, test, init_crc = 1;
-
-       printf("crc32_iscsi_test: ");
-
-       unsigned char *q_buf = malloc(PAGESIZE);
-       if (q_buf == NULL) {
-               printf("alloc of q_buf failed\n");
-               return -1;
-       }
-       // fill q_buf with semi-random data
-       for (i = 0; i < PAGESIZE; i++)
-               q_buf[i] = (unsigned char)(i ^ (13 + (i >> 8)) ^ ((i >> 16) - 13));
-
-       // Test case 1: Compare against base/simple crc32 implementation and
-       //                              try all offsets/alignments of buffer.
-
-       for (j = 0; j < 128; j++) {
-               for (i = 0; i < PAGESIZE - j; i++) {
-                       good = crc32_iscsi_base(q_buf + j, i, -1);
-                       test = crc32_iscsi(q_buf + j, i, -1);
-                       if (good != test) {
-                               printf("Error for size %d offset %d, %08X should be %08X\n",
-                                      i, j, test, good);
-                               return -1;
-                       }
-               }               // end for i
-               putchar('.');
-               fflush(0);
-       }                       // end for j
-
-       // Test case 2: Also vary initial CRC
-
-       for (j = 0; j < 128; j++) {     // do all offsets
-               for (i = 0; i < PAGESIZE - j; i++) {
-                       good = crc32_iscsi_base(q_buf + j, i, init_crc);
-                       test = crc32_iscsi(q_buf + j, i, init_crc);
-                       if (good != test) {
-                               printf("Error for size %d offset %d, %08X should be %08X\n",
-                                      i, j, test, good);
-                               return -1;
-                       }
-                       // modify init_crc semi-randomly
-                       init_crc ^= 1 << ((i * 3 + j * 5) & 31);
-               }               // end for i
-               putchar('.');
-               fflush(0);
-       }                       // end for j
-
-       // Test case 3: do end of buffer
-
-       for (i = 0; i < PAGESIZE; i++) {
-               good = crc32_iscsi_base(q_buf + i, PAGESIZE - i, -1);
-               test = crc32_iscsi(q_buf + i, PAGESIZE - i, -1);
-               if (good != test) {
-                       printf("Error for size %d at eob, %08X should be %08X\n",
-                              i, test, good);
-                       return -1;
-               }
-       }                       // end for i
-       putchar('.');
-       fflush(0);
-
-       printf("Pass\n");
-
-       return 0;
-}
index 29166f9017964220538b1a079fe5cb89e6c79bbe..7cf5a69cfbcc75f7d33d8d5ff833ac082f1a5a40 100644 (file)
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
-#include <stdlib.h>
 #include "crc64.h"
 
-#define MAX_ITER       8
+static const uint64_t crc64_ecma_refl_table[256] = {
+       0x0000000000000000ULL, 0xb32e4cbe03a75f6fULL,
+       0xf4843657a840a05bULL, 0x47aa7ae9abe7ff34ULL,
+       0x7bd0c384ff8f5e33ULL, 0xc8fe8f3afc28015cULL,
+       0x8f54f5d357cffe68ULL, 0x3c7ab96d5468a107ULL,
+       0xf7a18709ff1ebc66ULL, 0x448fcbb7fcb9e309ULL,
+       0x0325b15e575e1c3dULL, 0xb00bfde054f94352ULL,
+       0x8c71448d0091e255ULL, 0x3f5f08330336bd3aULL,
+       0x78f572daa8d1420eULL, 0xcbdb3e64ab761d61ULL,
+       0x7d9ba13851336649ULL, 0xceb5ed8652943926ULL,
+       0x891f976ff973c612ULL, 0x3a31dbd1fad4997dULL,
+       0x064b62bcaebc387aULL, 0xb5652e02ad1b6715ULL,
+       0xf2cf54eb06fc9821ULL, 0x41e11855055bc74eULL,
+       0x8a3a2631ae2dda2fULL, 0x39146a8fad8a8540ULL,
+       0x7ebe1066066d7a74ULL, 0xcd905cd805ca251bULL,
+       0xf1eae5b551a2841cULL, 0x42c4a90b5205db73ULL,
+       0x056ed3e2f9e22447ULL, 0xb6409f5cfa457b28ULL,
+       0xfb374270a266cc92ULL, 0x48190ecea1c193fdULL,
+       0x0fb374270a266cc9ULL, 0xbc9d3899098133a6ULL,
+       0x80e781f45de992a1ULL, 0x33c9cd4a5e4ecdceULL,
+       0x7463b7a3f5a932faULL, 0xc74dfb1df60e6d95ULL,
+       0x0c96c5795d7870f4ULL, 0xbfb889c75edf2f9bULL,
+       0xf812f32ef538d0afULL, 0x4b3cbf90f69f8fc0ULL,
+       0x774606fda2f72ec7ULL, 0xc4684a43a15071a8ULL,
+       0x83c230aa0ab78e9cULL, 0x30ec7c140910d1f3ULL,
+       0x86ace348f355aadbULL, 0x3582aff6f0f2f5b4ULL,
+       0x7228d51f5b150a80ULL, 0xc10699a158b255efULL,
+       0xfd7c20cc0cdaf4e8ULL, 0x4e526c720f7dab87ULL,
+       0x09f8169ba49a54b3ULL, 0xbad65a25a73d0bdcULL,
+       0x710d64410c4b16bdULL, 0xc22328ff0fec49d2ULL,
+       0x85895216a40bb6e6ULL, 0x36a71ea8a7ace989ULL,
+       0x0adda7c5f3c4488eULL, 0xb9f3eb7bf06317e1ULL,
+       0xfe5991925b84e8d5ULL, 0x4d77dd2c5823b7baULL,
+       0x64b62bcaebc387a1ULL, 0xd7986774e864d8ceULL,
+       0x90321d9d438327faULL, 0x231c512340247895ULL,
+       0x1f66e84e144cd992ULL, 0xac48a4f017eb86fdULL,
+       0xebe2de19bc0c79c9ULL, 0x58cc92a7bfab26a6ULL,
+       0x9317acc314dd3bc7ULL, 0x2039e07d177a64a8ULL,
+       0x67939a94bc9d9b9cULL, 0xd4bdd62abf3ac4f3ULL,
+       0xe8c76f47eb5265f4ULL, 0x5be923f9e8f53a9bULL,
+       0x1c4359104312c5afULL, 0xaf6d15ae40b59ac0ULL,
+       0x192d8af2baf0e1e8ULL, 0xaa03c64cb957be87ULL,
+       0xeda9bca512b041b3ULL, 0x5e87f01b11171edcULL,
+       0x62fd4976457fbfdbULL, 0xd1d305c846d8e0b4ULL,
+       0x96797f21ed3f1f80ULL, 0x2557339fee9840efULL,
+       0xee8c0dfb45ee5d8eULL, 0x5da24145464902e1ULL,
+       0x1a083bacedaefdd5ULL, 0xa9267712ee09a2baULL,
+       0x955cce7fba6103bdULL, 0x267282c1b9c65cd2ULL,
+       0x61d8f8281221a3e6ULL, 0xd2f6b4961186fc89ULL,
+       0x9f8169ba49a54b33ULL, 0x2caf25044a02145cULL,
+       0x6b055fede1e5eb68ULL, 0xd82b1353e242b407ULL,
+       0xe451aa3eb62a1500ULL, 0x577fe680b58d4a6fULL,
+       0x10d59c691e6ab55bULL, 0xa3fbd0d71dcdea34ULL,
+       0x6820eeb3b6bbf755ULL, 0xdb0ea20db51ca83aULL,
+       0x9ca4d8e41efb570eULL, 0x2f8a945a1d5c0861ULL,
+       0x13f02d374934a966ULL, 0xa0de61894a93f609ULL,
+       0xe7741b60e174093dULL, 0x545a57dee2d35652ULL,
+       0xe21ac88218962d7aULL, 0x5134843c1b317215ULL,
+       0x169efed5b0d68d21ULL, 0xa5b0b26bb371d24eULL,
+       0x99ca0b06e7197349ULL, 0x2ae447b8e4be2c26ULL,
+       0x6d4e3d514f59d312ULL, 0xde6071ef4cfe8c7dULL,
+       0x15bb4f8be788911cULL, 0xa6950335e42fce73ULL,
+       0xe13f79dc4fc83147ULL, 0x521135624c6f6e28ULL,
+       0x6e6b8c0f1807cf2fULL, 0xdd45c0b11ba09040ULL,
+       0x9aefba58b0476f74ULL, 0x29c1f6e6b3e0301bULL,
+       0xc96c5795d7870f42ULL, 0x7a421b2bd420502dULL,
+       0x3de861c27fc7af19ULL, 0x8ec62d7c7c60f076ULL,
+       0xb2bc941128085171ULL, 0x0192d8af2baf0e1eULL,
+       0x4638a2468048f12aULL, 0xf516eef883efae45ULL,
+       0x3ecdd09c2899b324ULL, 0x8de39c222b3eec4bULL,
+       0xca49e6cb80d9137fULL, 0x7967aa75837e4c10ULL,
+       0x451d1318d716ed17ULL, 0xf6335fa6d4b1b278ULL,
+       0xb199254f7f564d4cULL, 0x02b769f17cf11223ULL,
+       0xb4f7f6ad86b4690bULL, 0x07d9ba1385133664ULL,
+       0x4073c0fa2ef4c950ULL, 0xf35d8c442d53963fULL,
+       0xcf273529793b3738ULL, 0x7c0979977a9c6857ULL,
+       0x3ba3037ed17b9763ULL, 0x888d4fc0d2dcc80cULL,
+       0x435671a479aad56dULL, 0xf0783d1a7a0d8a02ULL,
+       0xb7d247f3d1ea7536ULL, 0x04fc0b4dd24d2a59ULL,
+       0x3886b22086258b5eULL, 0x8ba8fe9e8582d431ULL,
+       0xcc0284772e652b05ULL, 0x7f2cc8c92dc2746aULL,
+       0x325b15e575e1c3d0ULL, 0x8175595b76469cbfULL,
+       0xc6df23b2dda1638bULL, 0x75f16f0cde063ce4ULL,
+       0x498bd6618a6e9de3ULL, 0xfaa59adf89c9c28cULL,
+       0xbd0fe036222e3db8ULL, 0x0e21ac88218962d7ULL,
+       0xc5fa92ec8aff7fb6ULL, 0x76d4de52895820d9ULL,
+       0x317ea4bb22bfdfedULL, 0x8250e80521188082ULL,
+       0xbe2a516875702185ULL, 0x0d041dd676d77eeaULL,
+       0x4aae673fdd3081deULL, 0xf9802b81de97deb1ULL,
+       0x4fc0b4dd24d2a599ULL, 0xfceef8632775faf6ULL,
+       0xbb44828a8c9205c2ULL, 0x086ace348f355aadULL,
+       0x34107759db5dfbaaULL, 0x873e3be7d8faa4c5ULL,
+       0xc094410e731d5bf1ULL, 0x73ba0db070ba049eULL,
+       0xb86133d4dbcc19ffULL, 0x0b4f7f6ad86b4690ULL,
+       0x4ce50583738cb9a4ULL, 0xffcb493d702be6cbULL,
+       0xc3b1f050244347ccULL, 0x709fbcee27e418a3ULL,
+       0x3735c6078c03e797ULL, 0x841b8ab98fa4b8f8ULL,
+       0xadda7c5f3c4488e3ULL, 0x1ef430e13fe3d78cULL,
+       0x595e4a08940428b8ULL, 0xea7006b697a377d7ULL,
+       0xd60abfdbc3cbd6d0ULL, 0x6524f365c06c89bfULL,
+       0x228e898c6b8b768bULL, 0x91a0c532682c29e4ULL,
+       0x5a7bfb56c35a3485ULL, 0xe955b7e8c0fd6beaULL,
+       0xaeffcd016b1a94deULL, 0x1dd181bf68bdcbb1ULL,
+       0x21ab38d23cd56ab6ULL, 0x9285746c3f7235d9ULL,
+       0xd52f0e859495caedULL, 0x6601423b97329582ULL,
+       0xd041dd676d77eeaaULL, 0x636f91d96ed0b1c5ULL,
+       0x24c5eb30c5374ef1ULL, 0x97eba78ec690119eULL,
+       0xab911ee392f8b099ULL, 0x18bf525d915feff6ULL,
+       0x5f1528b43ab810c2ULL, 0xec3b640a391f4fadULL,
+       0x27e05a6e926952ccULL, 0x94ce16d091ce0da3ULL,
+       0xd3646c393a29f297ULL, 0x604a2087398eadf8ULL,
+       0x5c3099ea6de60cffULL, 0xef1ed5546e415390ULL,
+       0xa8b4afbdc5a6aca4ULL, 0x1b9ae303c601f3cbULL,
+       0x56ed3e2f9e224471ULL, 0xe5c372919d851b1eULL,
+       0xa26908783662e42aULL, 0x114744c635c5bb45ULL,
+       0x2d3dfdab61ad1a42ULL, 0x9e13b115620a452dULL,
+       0xd9b9cbfcc9edba19ULL, 0x6a978742ca4ae576ULL,
+       0xa14cb926613cf817ULL, 0x1262f598629ba778ULL,
+       0x55c88f71c97c584cULL, 0xe6e6c3cfcadb0723ULL,
+       0xda9c7aa29eb3a624ULL, 0x69b2361c9d14f94bULL,
+       0x2e184cf536f3067fULL, 0x9d36004b35545910ULL,
+       0x2b769f17cf112238ULL, 0x9858d3a9ccb67d57ULL,
+       0xdff2a94067518263ULL, 0x6cdce5fe64f6dd0cULL,
+       0x50a65c93309e7c0bULL, 0xe388102d33392364ULL,
+       0xa4226ac498dedc50ULL, 0x170c267a9b79833fULL,
+       0xdcd7181e300f9e5eULL, 0x6ff954a033a8c131ULL,
+       0x28532e49984f3e05ULL, 0x9b7d62f79be8616aULL,
+       0xa707db9acf80c06dULL, 0x14299724cc279f02ULL,
+       0x5383edcd67c06036ULL, 0xe0ada17364673f59ULL
+};
+
+static const uint64_t crc64_ecma_norm_table[256] = {
+       0x0000000000000000ULL, 0x42f0e1eba9ea3693ULL,
+       0x85e1c3d753d46d26ULL, 0xc711223cfa3e5bb5ULL,
+       0x493366450e42ecdfULL, 0x0bc387aea7a8da4cULL,
+       0xccd2a5925d9681f9ULL, 0x8e224479f47cb76aULL,
+       0x9266cc8a1c85d9beULL, 0xd0962d61b56fef2dULL,
+       0x17870f5d4f51b498ULL, 0x5577eeb6e6bb820bULL,
+       0xdb55aacf12c73561ULL, 0x99a54b24bb2d03f2ULL,
+       0x5eb4691841135847ULL, 0x1c4488f3e8f96ed4ULL,
+       0x663d78ff90e185efULL, 0x24cd9914390bb37cULL,
+       0xe3dcbb28c335e8c9ULL, 0xa12c5ac36adfde5aULL,
+       0x2f0e1eba9ea36930ULL, 0x6dfeff5137495fa3ULL,
+       0xaaefdd6dcd770416ULL, 0xe81f3c86649d3285ULL,
+       0xf45bb4758c645c51ULL, 0xb6ab559e258e6ac2ULL,
+       0x71ba77a2dfb03177ULL, 0x334a9649765a07e4ULL,
+       0xbd68d2308226b08eULL, 0xff9833db2bcc861dULL,
+       0x388911e7d1f2dda8ULL, 0x7a79f00c7818eb3bULL,
+       0xcc7af1ff21c30bdeULL, 0x8e8a101488293d4dULL,
+       0x499b3228721766f8ULL, 0x0b6bd3c3dbfd506bULL,
+       0x854997ba2f81e701ULL, 0xc7b97651866bd192ULL,
+       0x00a8546d7c558a27ULL, 0x4258b586d5bfbcb4ULL,
+       0x5e1c3d753d46d260ULL, 0x1cecdc9e94ace4f3ULL,
+       0xdbfdfea26e92bf46ULL, 0x990d1f49c77889d5ULL,
+       0x172f5b3033043ebfULL, 0x55dfbadb9aee082cULL,
+       0x92ce98e760d05399ULL, 0xd03e790cc93a650aULL,
+       0xaa478900b1228e31ULL, 0xe8b768eb18c8b8a2ULL,
+       0x2fa64ad7e2f6e317ULL, 0x6d56ab3c4b1cd584ULL,
+       0xe374ef45bf6062eeULL, 0xa1840eae168a547dULL,
+       0x66952c92ecb40fc8ULL, 0x2465cd79455e395bULL,
+       0x3821458aada7578fULL, 0x7ad1a461044d611cULL,
+       0xbdc0865dfe733aa9ULL, 0xff3067b657990c3aULL,
+       0x711223cfa3e5bb50ULL, 0x33e2c2240a0f8dc3ULL,
+       0xf4f3e018f031d676ULL, 0xb60301f359dbe0e5ULL,
+       0xda050215ea6c212fULL, 0x98f5e3fe438617bcULL,
+       0x5fe4c1c2b9b84c09ULL, 0x1d14202910527a9aULL,
+       0x93366450e42ecdf0ULL, 0xd1c685bb4dc4fb63ULL,
+       0x16d7a787b7faa0d6ULL, 0x5427466c1e109645ULL,
+       0x4863ce9ff6e9f891ULL, 0x0a932f745f03ce02ULL,
+       0xcd820d48a53d95b7ULL, 0x8f72eca30cd7a324ULL,
+       0x0150a8daf8ab144eULL, 0x43a04931514122ddULL,
+       0x84b16b0dab7f7968ULL, 0xc6418ae602954ffbULL,
+       0xbc387aea7a8da4c0ULL, 0xfec89b01d3679253ULL,
+       0x39d9b93d2959c9e6ULL, 0x7b2958d680b3ff75ULL,
+       0xf50b1caf74cf481fULL, 0xb7fbfd44dd257e8cULL,
+       0x70eadf78271b2539ULL, 0x321a3e938ef113aaULL,
+       0x2e5eb66066087d7eULL, 0x6cae578bcfe24bedULL,
+       0xabbf75b735dc1058ULL, 0xe94f945c9c3626cbULL,
+       0x676dd025684a91a1ULL, 0x259d31cec1a0a732ULL,
+       0xe28c13f23b9efc87ULL, 0xa07cf2199274ca14ULL,
+       0x167ff3eacbaf2af1ULL, 0x548f120162451c62ULL,
+       0x939e303d987b47d7ULL, 0xd16ed1d631917144ULL,
+       0x5f4c95afc5edc62eULL, 0x1dbc74446c07f0bdULL,
+       0xdaad56789639ab08ULL, 0x985db7933fd39d9bULL,
+       0x84193f60d72af34fULL, 0xc6e9de8b7ec0c5dcULL,
+       0x01f8fcb784fe9e69ULL, 0x43081d5c2d14a8faULL,
+       0xcd2a5925d9681f90ULL, 0x8fdab8ce70822903ULL,
+       0x48cb9af28abc72b6ULL, 0x0a3b7b1923564425ULL,
+       0x70428b155b4eaf1eULL, 0x32b26afef2a4998dULL,
+       0xf5a348c2089ac238ULL, 0xb753a929a170f4abULL,
+       0x3971ed50550c43c1ULL, 0x7b810cbbfce67552ULL,
+       0xbc902e8706d82ee7ULL, 0xfe60cf6caf321874ULL,
+       0xe224479f47cb76a0ULL, 0xa0d4a674ee214033ULL,
+       0x67c58448141f1b86ULL, 0x253565a3bdf52d15ULL,
+       0xab1721da49899a7fULL, 0xe9e7c031e063acecULL,
+       0x2ef6e20d1a5df759ULL, 0x6c0603e6b3b7c1caULL,
+       0xf6fae5c07d3274cdULL, 0xb40a042bd4d8425eULL,
+       0x731b26172ee619ebULL, 0x31ebc7fc870c2f78ULL,
+       0xbfc9838573709812ULL, 0xfd39626eda9aae81ULL,
+       0x3a28405220a4f534ULL, 0x78d8a1b9894ec3a7ULL,
+       0x649c294a61b7ad73ULL, 0x266cc8a1c85d9be0ULL,
+       0xe17dea9d3263c055ULL, 0xa38d0b769b89f6c6ULL,
+       0x2daf4f0f6ff541acULL, 0x6f5faee4c61f773fULL,
+       0xa84e8cd83c212c8aULL, 0xeabe6d3395cb1a19ULL,
+       0x90c79d3fedd3f122ULL, 0xd2377cd44439c7b1ULL,
+       0x15265ee8be079c04ULL, 0x57d6bf0317edaa97ULL,
+       0xd9f4fb7ae3911dfdULL, 0x9b041a914a7b2b6eULL,
+       0x5c1538adb04570dbULL, 0x1ee5d94619af4648ULL,
+       0x02a151b5f156289cULL, 0x4051b05e58bc1e0fULL,
+       0x87409262a28245baULL, 0xc5b073890b687329ULL,
+       0x4b9237f0ff14c443ULL, 0x0962d61b56fef2d0ULL,
+       0xce73f427acc0a965ULL, 0x8c8315cc052a9ff6ULL,
+       0x3a80143f5cf17f13ULL, 0x7870f5d4f51b4980ULL,
+       0xbf61d7e80f251235ULL, 0xfd913603a6cf24a6ULL,
+       0x73b3727a52b393ccULL, 0x31439391fb59a55fULL,
+       0xf652b1ad0167feeaULL, 0xb4a25046a88dc879ULL,
+       0xa8e6d8b54074a6adULL, 0xea16395ee99e903eULL,
+       0x2d071b6213a0cb8bULL, 0x6ff7fa89ba4afd18ULL,
+       0xe1d5bef04e364a72ULL, 0xa3255f1be7dc7ce1ULL,
+       0x64347d271de22754ULL, 0x26c49cccb40811c7ULL,
+       0x5cbd6cc0cc10fafcULL, 0x1e4d8d2b65facc6fULL,
+       0xd95caf179fc497daULL, 0x9bac4efc362ea149ULL,
+       0x158e0a85c2521623ULL, 0x577eeb6e6bb820b0ULL,
+       0x906fc95291867b05ULL, 0xd29f28b9386c4d96ULL,
+       0xcedba04ad0952342ULL, 0x8c2b41a1797f15d1ULL,
+       0x4b3a639d83414e64ULL, 0x09ca82762aab78f7ULL,
+       0x87e8c60fded7cf9dULL, 0xc51827e4773df90eULL,
+       0x020905d88d03a2bbULL, 0x40f9e43324e99428ULL,
+       0x2cffe7d5975e55e2ULL, 0x6e0f063e3eb46371ULL,
+       0xa91e2402c48a38c4ULL, 0xebeec5e96d600e57ULL,
+       0x65cc8190991cb93dULL, 0x273c607b30f68faeULL,
+       0xe02d4247cac8d41bULL, 0xa2dda3ac6322e288ULL,
+       0xbe992b5f8bdb8c5cULL, 0xfc69cab42231bacfULL,
+       0x3b78e888d80fe17aULL, 0x7988096371e5d7e9ULL,
+       0xf7aa4d1a85996083ULL, 0xb55aacf12c735610ULL,
+       0x724b8ecdd64d0da5ULL, 0x30bb6f267fa73b36ULL,
+       0x4ac29f2a07bfd00dULL, 0x08327ec1ae55e69eULL,
+       0xcf235cfd546bbd2bULL, 0x8dd3bd16fd818bb8ULL,
+       0x03f1f96f09fd3cd2ULL, 0x41011884a0170a41ULL,
+       0x86103ab85a2951f4ULL, 0xc4e0db53f3c36767ULL,
+       0xd8a453a01b3a09b3ULL, 0x9a54b24bb2d03f20ULL,
+       0x5d45907748ee6495ULL, 0x1fb5719ce1045206ULL,
+       0x919735e51578e56cULL, 0xd367d40ebc92d3ffULL,
+       0x1476f63246ac884aULL, 0x568617d9ef46bed9ULL,
+       0xe085162ab69d5e3cULL, 0xa275f7c11f7768afULL,
+       0x6564d5fde549331aULL, 0x279434164ca30589ULL,
+       0xa9b6706fb8dfb2e3ULL, 0xeb46918411358470ULL,
+       0x2c57b3b8eb0bdfc5ULL, 0x6ea7525342e1e956ULL,
+       0x72e3daa0aa188782ULL, 0x30133b4b03f2b111ULL,
+       0xf7021977f9cceaa4ULL, 0xb5f2f89c5026dc37ULL,
+       0x3bd0bce5a45a6b5dULL, 0x79205d0e0db05dceULL,
+       0xbe317f32f78e067bULL, 0xfcc19ed95e6430e8ULL,
+       0x86b86ed5267cdbd3ULL, 0xc4488f3e8f96ed40ULL,
+       0x0359ad0275a8b6f5ULL, 0x41a94ce9dc428066ULL,
+       0xcf8b0890283e370cULL, 0x8d7be97b81d4019fULL,
+       0x4a6acb477bea5a2aULL, 0x089a2aacd2006cb9ULL,
+       0x14dea25f3af9026dULL, 0x562e43b4931334feULL,
+       0x913f6188692d6f4bULL, 0xd3cf8063c0c759d8ULL,
+       0x5dedc41a34bbeeb2ULL, 0x1f1d25f19d51d821ULL,
+       0xd80c07cd676f8394ULL, 0x9afce626ce85b507ULL
+};
+
+static const uint64_t crc64_iso_refl_table[256] = {
+       0x0000000000000000ULL, 0x01b0000000000000ULL,
+       0x0360000000000000ULL, 0x02d0000000000000ULL,
+       0x06c0000000000000ULL, 0x0770000000000000ULL,
+       0x05a0000000000000ULL, 0x0410000000000000ULL,
+       0x0d80000000000000ULL, 0x0c30000000000000ULL,
+       0x0ee0000000000000ULL, 0x0f50000000000000ULL,
+       0x0b40000000000000ULL, 0x0af0000000000000ULL,
+       0x0820000000000000ULL, 0x0990000000000000ULL,
+       0x1b00000000000000ULL, 0x1ab0000000000000ULL,
+       0x1860000000000000ULL, 0x19d0000000000000ULL,
+       0x1dc0000000000000ULL, 0x1c70000000000000ULL,
+       0x1ea0000000000000ULL, 0x1f10000000000000ULL,
+       0x1680000000000000ULL, 0x1730000000000000ULL,
+       0x15e0000000000000ULL, 0x1450000000000000ULL,
+       0x1040000000000000ULL, 0x11f0000000000000ULL,
+       0x1320000000000000ULL, 0x1290000000000000ULL,
+       0x3600000000000000ULL, 0x37b0000000000000ULL,
+       0x3560000000000000ULL, 0x34d0000000000000ULL,
+       0x30c0000000000000ULL, 0x3170000000000000ULL,
+       0x33a0000000000000ULL, 0x3210000000000000ULL,
+       0x3b80000000000000ULL, 0x3a30000000000000ULL,
+       0x38e0000000000000ULL, 0x3950000000000000ULL,
+       0x3d40000000000000ULL, 0x3cf0000000000000ULL,
+       0x3e20000000000000ULL, 0x3f90000000000000ULL,
+       0x2d00000000000000ULL, 0x2cb0000000000000ULL,
+       0x2e60000000000000ULL, 0x2fd0000000000000ULL,
+       0x2bc0000000000000ULL, 0x2a70000000000000ULL,
+       0x28a0000000000000ULL, 0x2910000000000000ULL,
+       0x2080000000000000ULL, 0x2130000000000000ULL,
+       0x23e0000000000000ULL, 0x2250000000000000ULL,
+       0x2640000000000000ULL, 0x27f0000000000000ULL,
+       0x2520000000000000ULL, 0x2490000000000000ULL,
+       0x6c00000000000000ULL, 0x6db0000000000000ULL,
+       0x6f60000000000000ULL, 0x6ed0000000000000ULL,
+       0x6ac0000000000000ULL, 0x6b70000000000000ULL,
+       0x69a0000000000000ULL, 0x6810000000000000ULL,
+       0x6180000000000000ULL, 0x6030000000000000ULL,
+       0x62e0000000000000ULL, 0x6350000000000000ULL,
+       0x6740000000000000ULL, 0x66f0000000000000ULL,
+       0x6420000000000000ULL, 0x6590000000000000ULL,
+       0x7700000000000000ULL, 0x76b0000000000000ULL,
+       0x7460000000000000ULL, 0x75d0000000000000ULL,
+       0x71c0000000000000ULL, 0x7070000000000000ULL,
+       0x72a0000000000000ULL, 0x7310000000000000ULL,
+       0x7a80000000000000ULL, 0x7b30000000000000ULL,
+       0x79e0000000000000ULL, 0x7850000000000000ULL,
+       0x7c40000000000000ULL, 0x7df0000000000000ULL,
+       0x7f20000000000000ULL, 0x7e90000000000000ULL,
+       0x5a00000000000000ULL, 0x5bb0000000000000ULL,
+       0x5960000000000000ULL, 0x58d0000000000000ULL,
+       0x5cc0000000000000ULL, 0x5d70000000000000ULL,
+       0x5fa0000000000000ULL, 0x5e10000000000000ULL,
+       0x5780000000000000ULL, 0x5630000000000000ULL,
+       0x54e0000000000000ULL, 0x5550000000000000ULL,
+       0x5140000000000000ULL, 0x50f0000000000000ULL,
+       0x5220000000000000ULL, 0x5390000000000000ULL,
+       0x4100000000000000ULL, 0x40b0000000000000ULL,
+       0x4260000000000000ULL, 0x43d0000000000000ULL,
+       0x47c0000000000000ULL, 0x4670000000000000ULL,
+       0x44a0000000000000ULL, 0x4510000000000000ULL,
+       0x4c80000000000000ULL, 0x4d30000000000000ULL,
+       0x4fe0000000000000ULL, 0x4e50000000000000ULL,
+       0x4a40000000000000ULL, 0x4bf0000000000000ULL,
+       0x4920000000000000ULL, 0x4890000000000000ULL,
+       0xd800000000000000ULL, 0xd9b0000000000000ULL,
+       0xdb60000000000000ULL, 0xdad0000000000000ULL,
+       0xdec0000000000000ULL, 0xdf70000000000000ULL,
+       0xdda0000000000000ULL, 0xdc10000000000000ULL,
+       0xd580000000000000ULL, 0xd430000000000000ULL,
+       0xd6e0000000000000ULL, 0xd750000000000000ULL,
+       0xd340000000000000ULL, 0xd2f0000000000000ULL,
+       0xd020000000000000ULL, 0xd190000000000000ULL,
+       0xc300000000000000ULL, 0xc2b0000000000000ULL,
+       0xc060000000000000ULL, 0xc1d0000000000000ULL,
+       0xc5c0000000000000ULL, 0xc470000000000000ULL,
+       0xc6a0000000000000ULL, 0xc710000000000000ULL,
+       0xce80000000000000ULL, 0xcf30000000000000ULL,
+       0xcde0000000000000ULL, 0xcc50000000000000ULL,
+       0xc840000000000000ULL, 0xc9f0000000000000ULL,
+       0xcb20000000000000ULL, 0xca90000000000000ULL,
+       0xee00000000000000ULL, 0xefb0000000000000ULL,
+       0xed60000000000000ULL, 0xecd0000000000000ULL,
+       0xe8c0000000000000ULL, 0xe970000000000000ULL,
+       0xeba0000000000000ULL, 0xea10000000000000ULL,
+       0xe380000000000000ULL, 0xe230000000000000ULL,
+       0xe0e0000000000000ULL, 0xe150000000000000ULL,
+       0xe540000000000000ULL, 0xe4f0000000000000ULL,
+       0xe620000000000000ULL, 0xe790000000000000ULL,
+       0xf500000000000000ULL, 0xf4b0000000000000ULL,
+       0xf660000000000000ULL, 0xf7d0000000000000ULL,
+       0xf3c0000000000000ULL, 0xf270000000000000ULL,
+       0xf0a0000000000000ULL, 0xf110000000000000ULL,
+       0xf880000000000000ULL, 0xf930000000000000ULL,
+       0xfbe0000000000000ULL, 0xfa50000000000000ULL,
+       0xfe40000000000000ULL, 0xfff0000000000000ULL,
+       0xfd20000000000000ULL, 0xfc90000000000000ULL,
+       0xb400000000000000ULL, 0xb5b0000000000000ULL,
+       0xb760000000000000ULL, 0xb6d0000000000000ULL,
+       0xb2c0000000000000ULL, 0xb370000000000000ULL,
+       0xb1a0000000000000ULL, 0xb010000000000000ULL,
+       0xb980000000000000ULL, 0xb830000000000000ULL,
+       0xbae0000000000000ULL, 0xbb50000000000000ULL,
+       0xbf40000000000000ULL, 0xbef0000000000000ULL,
+       0xbc20000000000000ULL, 0xbd90000000000000ULL,
+       0xaf00000000000000ULL, 0xaeb0000000000000ULL,
+       0xac60000000000000ULL, 0xadd0000000000000ULL,
+       0xa9c0000000000000ULL, 0xa870000000000000ULL,
+       0xaaa0000000000000ULL, 0xab10000000000000ULL,
+       0xa280000000000000ULL, 0xa330000000000000ULL,
+       0xa1e0000000000000ULL, 0xa050000000000000ULL,
+       0xa440000000000000ULL, 0xa5f0000000000000ULL,
+       0xa720000000000000ULL, 0xa690000000000000ULL,
+       0x8200000000000000ULL, 0x83b0000000000000ULL,
+       0x8160000000000000ULL, 0x80d0000000000000ULL,
+       0x84c0000000000000ULL, 0x8570000000000000ULL,
+       0x87a0000000000000ULL, 0x8610000000000000ULL,
+       0x8f80000000000000ULL, 0x8e30000000000000ULL,
+       0x8ce0000000000000ULL, 0x8d50000000000000ULL,
+       0x8940000000000000ULL, 0x88f0000000000000ULL,
+       0x8a20000000000000ULL, 0x8b90000000000000ULL,
+       0x9900000000000000ULL, 0x98b0000000000000ULL,
+       0x9a60000000000000ULL, 0x9bd0000000000000ULL,
+       0x9fc0000000000000ULL, 0x9e70000000000000ULL,
+       0x9ca0000000000000ULL, 0x9d10000000000000ULL,
+       0x9480000000000000ULL, 0x9530000000000000ULL,
+       0x97e0000000000000ULL, 0x9650000000000000ULL,
+       0x9240000000000000ULL, 0x93f0000000000000ULL,
+       0x9120000000000000ULL, 0x9090000000000000ULL
+};
+
+static const uint64_t crc64_iso_norm_table[256] = {
+       0x0000000000000000ULL, 0x000000000000001bULL,
+       0x0000000000000036ULL, 0x000000000000002dULL,
+       0x000000000000006cULL, 0x0000000000000077ULL,
+       0x000000000000005aULL, 0x0000000000000041ULL,
+       0x00000000000000d8ULL, 0x00000000000000c3ULL,
+       0x00000000000000eeULL, 0x00000000000000f5ULL,
+       0x00000000000000b4ULL, 0x00000000000000afULL,
+       0x0000000000000082ULL, 0x0000000000000099ULL,
+       0x00000000000001b0ULL, 0x00000000000001abULL,
+       0x0000000000000186ULL, 0x000000000000019dULL,
+       0x00000000000001dcULL, 0x00000000000001c7ULL,
+       0x00000000000001eaULL, 0x00000000000001f1ULL,
+       0x0000000000000168ULL, 0x0000000000000173ULL,
+       0x000000000000015eULL, 0x0000000000000145ULL,
+       0x0000000000000104ULL, 0x000000000000011fULL,
+       0x0000000000000132ULL, 0x0000000000000129ULL,
+       0x0000000000000360ULL, 0x000000000000037bULL,
+       0x0000000000000356ULL, 0x000000000000034dULL,
+       0x000000000000030cULL, 0x0000000000000317ULL,
+       0x000000000000033aULL, 0x0000000000000321ULL,
+       0x00000000000003b8ULL, 0x00000000000003a3ULL,
+       0x000000000000038eULL, 0x0000000000000395ULL,
+       0x00000000000003d4ULL, 0x00000000000003cfULL,
+       0x00000000000003e2ULL, 0x00000000000003f9ULL,
+       0x00000000000002d0ULL, 0x00000000000002cbULL,
+       0x00000000000002e6ULL, 0x00000000000002fdULL,
+       0x00000000000002bcULL, 0x00000000000002a7ULL,
+       0x000000000000028aULL, 0x0000000000000291ULL,
+       0x0000000000000208ULL, 0x0000000000000213ULL,
+       0x000000000000023eULL, 0x0000000000000225ULL,
+       0x0000000000000264ULL, 0x000000000000027fULL,
+       0x0000000000000252ULL, 0x0000000000000249ULL,
+       0x00000000000006c0ULL, 0x00000000000006dbULL,
+       0x00000000000006f6ULL, 0x00000000000006edULL,
+       0x00000000000006acULL, 0x00000000000006b7ULL,
+       0x000000000000069aULL, 0x0000000000000681ULL,
+       0x0000000000000618ULL, 0x0000000000000603ULL,
+       0x000000000000062eULL, 0x0000000000000635ULL,
+       0x0000000000000674ULL, 0x000000000000066fULL,
+       0x0000000000000642ULL, 0x0000000000000659ULL,
+       0x0000000000000770ULL, 0x000000000000076bULL,
+       0x0000000000000746ULL, 0x000000000000075dULL,
+       0x000000000000071cULL, 0x0000000000000707ULL,
+       0x000000000000072aULL, 0x0000000000000731ULL,
+       0x00000000000007a8ULL, 0x00000000000007b3ULL,
+       0x000000000000079eULL, 0x0000000000000785ULL,
+       0x00000000000007c4ULL, 0x00000000000007dfULL,
+       0x00000000000007f2ULL, 0x00000000000007e9ULL,
+       0x00000000000005a0ULL, 0x00000000000005bbULL,
+       0x0000000000000596ULL, 0x000000000000058dULL,
+       0x00000000000005ccULL, 0x00000000000005d7ULL,
+       0x00000000000005faULL, 0x00000000000005e1ULL,
+       0x0000000000000578ULL, 0x0000000000000563ULL,
+       0x000000000000054eULL, 0x0000000000000555ULL,
+       0x0000000000000514ULL, 0x000000000000050fULL,
+       0x0000000000000522ULL, 0x0000000000000539ULL,
+       0x0000000000000410ULL, 0x000000000000040bULL,
+       0x0000000000000426ULL, 0x000000000000043dULL,
+       0x000000000000047cULL, 0x0000000000000467ULL,
+       0x000000000000044aULL, 0x0000000000000451ULL,
+       0x00000000000004c8ULL, 0x00000000000004d3ULL,
+       0x00000000000004feULL, 0x00000000000004e5ULL,
+       0x00000000000004a4ULL, 0x00000000000004bfULL,
+       0x0000000000000492ULL, 0x0000000000000489ULL,
+       0x0000000000000d80ULL, 0x0000000000000d9bULL,
+       0x0000000000000db6ULL, 0x0000000000000dadULL,
+       0x0000000000000decULL, 0x0000000000000df7ULL,
+       0x0000000000000ddaULL, 0x0000000000000dc1ULL,
+       0x0000000000000d58ULL, 0x0000000000000d43ULL,
+       0x0000000000000d6eULL, 0x0000000000000d75ULL,
+       0x0000000000000d34ULL, 0x0000000000000d2fULL,
+       0x0000000000000d02ULL, 0x0000000000000d19ULL,
+       0x0000000000000c30ULL, 0x0000000000000c2bULL,
+       0x0000000000000c06ULL, 0x0000000000000c1dULL,
+       0x0000000000000c5cULL, 0x0000000000000c47ULL,
+       0x0000000000000c6aULL, 0x0000000000000c71ULL,
+       0x0000000000000ce8ULL, 0x0000000000000cf3ULL,
+       0x0000000000000cdeULL, 0x0000000000000cc5ULL,
+       0x0000000000000c84ULL, 0x0000000000000c9fULL,
+       0x0000000000000cb2ULL, 0x0000000000000ca9ULL,
+       0x0000000000000ee0ULL, 0x0000000000000efbULL,
+       0x0000000000000ed6ULL, 0x0000000000000ecdULL,
+       0x0000000000000e8cULL, 0x0000000000000e97ULL,
+       0x0000000000000ebaULL, 0x0000000000000ea1ULL,
+       0x0000000000000e38ULL, 0x0000000000000e23ULL,
+       0x0000000000000e0eULL, 0x0000000000000e15ULL,
+       0x0000000000000e54ULL, 0x0000000000000e4fULL,
+       0x0000000000000e62ULL, 0x0000000000000e79ULL,
+       0x0000000000000f50ULL, 0x0000000000000f4bULL,
+       0x0000000000000f66ULL, 0x0000000000000f7dULL,
+       0x0000000000000f3cULL, 0x0000000000000f27ULL,
+       0x0000000000000f0aULL, 0x0000000000000f11ULL,
+       0x0000000000000f88ULL, 0x0000000000000f93ULL,
+       0x0000000000000fbeULL, 0x0000000000000fa5ULL,
+       0x0000000000000fe4ULL, 0x0000000000000fffULL,
+       0x0000000000000fd2ULL, 0x0000000000000fc9ULL,
+       0x0000000000000b40ULL, 0x0000000000000b5bULL,
+       0x0000000000000b76ULL, 0x0000000000000b6dULL,
+       0x0000000000000b2cULL, 0x0000000000000b37ULL,
+       0x0000000000000b1aULL, 0x0000000000000b01ULL,
+       0x0000000000000b98ULL, 0x0000000000000b83ULL,
+       0x0000000000000baeULL, 0x0000000000000bb5ULL,
+       0x0000000000000bf4ULL, 0x0000000000000befULL,
+       0x0000000000000bc2ULL, 0x0000000000000bd9ULL,
+       0x0000000000000af0ULL, 0x0000000000000aebULL,
+       0x0000000000000ac6ULL, 0x0000000000000addULL,
+       0x0000000000000a9cULL, 0x0000000000000a87ULL,
+       0x0000000000000aaaULL, 0x0000000000000ab1ULL,
+       0x0000000000000a28ULL, 0x0000000000000a33ULL,
+       0x0000000000000a1eULL, 0x0000000000000a05ULL,
+       0x0000000000000a44ULL, 0x0000000000000a5fULL,
+       0x0000000000000a72ULL, 0x0000000000000a69ULL,
+       0x0000000000000820ULL, 0x000000000000083bULL,
+       0x0000000000000816ULL, 0x000000000000080dULL,
+       0x000000000000084cULL, 0x0000000000000857ULL,
+       0x000000000000087aULL, 0x0000000000000861ULL,
+       0x00000000000008f8ULL, 0x00000000000008e3ULL,
+       0x00000000000008ceULL, 0x00000000000008d5ULL,
+       0x0000000000000894ULL, 0x000000000000088fULL,
+       0x00000000000008a2ULL, 0x00000000000008b9ULL,
+       0x0000000000000990ULL, 0x000000000000098bULL,
+       0x00000000000009a6ULL, 0x00000000000009bdULL,
+       0x00000000000009fcULL, 0x00000000000009e7ULL,
+       0x00000000000009caULL, 0x00000000000009d1ULL,
+       0x0000000000000948ULL, 0x0000000000000953ULL,
+       0x000000000000097eULL, 0x0000000000000965ULL,
+       0x0000000000000924ULL, 0x000000000000093fULL,
+       0x0000000000000912ULL, 0x0000000000000909ULL
+};
+
+static const uint64_t crc64_jones_refl_table[256] = {
+       0x0000000000000000ULL, 0x7ad870c830358979ULL,
+       0xf5b0e190606b12f2ULL, 0x8f689158505e9b8bULL,
+       0xc038e5739841b68fULL, 0xbae095bba8743ff6ULL,
+       0x358804e3f82aa47dULL, 0x4f50742bc81f2d04ULL,
+       0xab28ecb46814fe75ULL, 0xd1f09c7c5821770cULL,
+       0x5e980d24087fec87ULL, 0x24407dec384a65feULL,
+       0x6b1009c7f05548faULL, 0x11c8790fc060c183ULL,
+       0x9ea0e857903e5a08ULL, 0xe478989fa00bd371ULL,
+       0x7d08ff3b88be6f81ULL, 0x07d08ff3b88be6f8ULL,
+       0x88b81eabe8d57d73ULL, 0xf2606e63d8e0f40aULL,
+       0xbd301a4810ffd90eULL, 0xc7e86a8020ca5077ULL,
+       0x4880fbd87094cbfcULL, 0x32588b1040a14285ULL,
+       0xd620138fe0aa91f4ULL, 0xacf86347d09f188dULL,
+       0x2390f21f80c18306ULL, 0x594882d7b0f40a7fULL,
+       0x1618f6fc78eb277bULL, 0x6cc0863448deae02ULL,
+       0xe3a8176c18803589ULL, 0x997067a428b5bcf0ULL,
+       0xfa11fe77117cdf02ULL, 0x80c98ebf2149567bULL,
+       0x0fa11fe77117cdf0ULL, 0x75796f2f41224489ULL,
+       0x3a291b04893d698dULL, 0x40f16bccb908e0f4ULL,
+       0xcf99fa94e9567b7fULL, 0xb5418a5cd963f206ULL,
+       0x513912c379682177ULL, 0x2be1620b495da80eULL,
+       0xa489f35319033385ULL, 0xde51839b2936bafcULL,
+       0x9101f7b0e12997f8ULL, 0xebd98778d11c1e81ULL,
+       0x64b116208142850aULL, 0x1e6966e8b1770c73ULL,
+       0x8719014c99c2b083ULL, 0xfdc17184a9f739faULL,
+       0x72a9e0dcf9a9a271ULL, 0x08719014c99c2b08ULL,
+       0x4721e43f0183060cULL, 0x3df994f731b68f75ULL,
+       0xb29105af61e814feULL, 0xc849756751dd9d87ULL,
+       0x2c31edf8f1d64ef6ULL, 0x56e99d30c1e3c78fULL,
+       0xd9810c6891bd5c04ULL, 0xa3597ca0a188d57dULL,
+       0xec09088b6997f879ULL, 0x96d1784359a27100ULL,
+       0x19b9e91b09fcea8bULL, 0x636199d339c963f2ULL,
+       0xdf7adabd7a6e2d6fULL, 0xa5a2aa754a5ba416ULL,
+       0x2aca3b2d1a053f9dULL, 0x50124be52a30b6e4ULL,
+       0x1f423fcee22f9be0ULL, 0x659a4f06d21a1299ULL,
+       0xeaf2de5e82448912ULL, 0x902aae96b271006bULL,
+       0x74523609127ad31aULL, 0x0e8a46c1224f5a63ULL,
+       0x81e2d7997211c1e8ULL, 0xfb3aa75142244891ULL,
+       0xb46ad37a8a3b6595ULL, 0xceb2a3b2ba0eececULL,
+       0x41da32eaea507767ULL, 0x3b024222da65fe1eULL,
+       0xa2722586f2d042eeULL, 0xd8aa554ec2e5cb97ULL,
+       0x57c2c41692bb501cULL, 0x2d1ab4dea28ed965ULL,
+       0x624ac0f56a91f461ULL, 0x1892b03d5aa47d18ULL,
+       0x97fa21650afae693ULL, 0xed2251ad3acf6feaULL,
+       0x095ac9329ac4bc9bULL, 0x7382b9faaaf135e2ULL,
+       0xfcea28a2faafae69ULL, 0x8632586aca9a2710ULL,
+       0xc9622c4102850a14ULL, 0xb3ba5c8932b0836dULL,
+       0x3cd2cdd162ee18e6ULL, 0x460abd1952db919fULL,
+       0x256b24ca6b12f26dULL, 0x5fb354025b277b14ULL,
+       0xd0dbc55a0b79e09fULL, 0xaa03b5923b4c69e6ULL,
+       0xe553c1b9f35344e2ULL, 0x9f8bb171c366cd9bULL,
+       0x10e3202993385610ULL, 0x6a3b50e1a30ddf69ULL,
+       0x8e43c87e03060c18ULL, 0xf49bb8b633338561ULL,
+       0x7bf329ee636d1eeaULL, 0x012b592653589793ULL,
+       0x4e7b2d0d9b47ba97ULL, 0x34a35dc5ab7233eeULL,
+       0xbbcbcc9dfb2ca865ULL, 0xc113bc55cb19211cULL,
+       0x5863dbf1e3ac9decULL, 0x22bbab39d3991495ULL,
+       0xadd33a6183c78f1eULL, 0xd70b4aa9b3f20667ULL,
+       0x985b3e827bed2b63ULL, 0xe2834e4a4bd8a21aULL,
+       0x6debdf121b863991ULL, 0x1733afda2bb3b0e8ULL,
+       0xf34b37458bb86399ULL, 0x8993478dbb8deae0ULL,
+       0x06fbd6d5ebd3716bULL, 0x7c23a61ddbe6f812ULL,
+       0x3373d23613f9d516ULL, 0x49aba2fe23cc5c6fULL,
+       0xc6c333a67392c7e4ULL, 0xbc1b436e43a74e9dULL,
+       0x95ac9329ac4bc9b5ULL, 0xef74e3e19c7e40ccULL,
+       0x601c72b9cc20db47ULL, 0x1ac40271fc15523eULL,
+       0x5594765a340a7f3aULL, 0x2f4c0692043ff643ULL,
+       0xa02497ca54616dc8ULL, 0xdafce7026454e4b1ULL,
+       0x3e847f9dc45f37c0ULL, 0x445c0f55f46abeb9ULL,
+       0xcb349e0da4342532ULL, 0xb1eceec59401ac4bULL,
+       0xfebc9aee5c1e814fULL, 0x8464ea266c2b0836ULL,
+       0x0b0c7b7e3c7593bdULL, 0x71d40bb60c401ac4ULL,
+       0xe8a46c1224f5a634ULL, 0x927c1cda14c02f4dULL,
+       0x1d148d82449eb4c6ULL, 0x67ccfd4a74ab3dbfULL,
+       0x289c8961bcb410bbULL, 0x5244f9a98c8199c2ULL,
+       0xdd2c68f1dcdf0249ULL, 0xa7f41839ecea8b30ULL,
+       0x438c80a64ce15841ULL, 0x3954f06e7cd4d138ULL,
+       0xb63c61362c8a4ab3ULL, 0xcce411fe1cbfc3caULL,
+       0x83b465d5d4a0eeceULL, 0xf96c151de49567b7ULL,
+       0x76048445b4cbfc3cULL, 0x0cdcf48d84fe7545ULL,
+       0x6fbd6d5ebd3716b7ULL, 0x15651d968d029fceULL,
+       0x9a0d8ccedd5c0445ULL, 0xe0d5fc06ed698d3cULL,
+       0xaf85882d2576a038ULL, 0xd55df8e515432941ULL,
+       0x5a3569bd451db2caULL, 0x20ed197575283bb3ULL,
+       0xc49581ead523e8c2ULL, 0xbe4df122e51661bbULL,
+       0x3125607ab548fa30ULL, 0x4bfd10b2857d7349ULL,
+       0x04ad64994d625e4dULL, 0x7e7514517d57d734ULL,
+       0xf11d85092d094cbfULL, 0x8bc5f5c11d3cc5c6ULL,
+       0x12b5926535897936ULL, 0x686de2ad05bcf04fULL,
+       0xe70573f555e26bc4ULL, 0x9ddd033d65d7e2bdULL,
+       0xd28d7716adc8cfb9ULL, 0xa85507de9dfd46c0ULL,
+       0x273d9686cda3dd4bULL, 0x5de5e64efd965432ULL,
+       0xb99d7ed15d9d8743ULL, 0xc3450e196da80e3aULL,
+       0x4c2d9f413df695b1ULL, 0x36f5ef890dc31cc8ULL,
+       0x79a59ba2c5dc31ccULL, 0x037deb6af5e9b8b5ULL,
+       0x8c157a32a5b7233eULL, 0xf6cd0afa9582aa47ULL,
+       0x4ad64994d625e4daULL, 0x300e395ce6106da3ULL,
+       0xbf66a804b64ef628ULL, 0xc5bed8cc867b7f51ULL,
+       0x8aeeace74e645255ULL, 0xf036dc2f7e51db2cULL,
+       0x7f5e4d772e0f40a7ULL, 0x05863dbf1e3ac9deULL,
+       0xe1fea520be311aafULL, 0x9b26d5e88e0493d6ULL,
+       0x144e44b0de5a085dULL, 0x6e963478ee6f8124ULL,
+       0x21c640532670ac20ULL, 0x5b1e309b16452559ULL,
+       0xd476a1c3461bbed2ULL, 0xaeaed10b762e37abULL,
+       0x37deb6af5e9b8b5bULL, 0x4d06c6676eae0222ULL,
+       0xc26e573f3ef099a9ULL, 0xb8b627f70ec510d0ULL,
+       0xf7e653dcc6da3dd4ULL, 0x8d3e2314f6efb4adULL,
+       0x0256b24ca6b12f26ULL, 0x788ec2849684a65fULL,
+       0x9cf65a1b368f752eULL, 0xe62e2ad306bafc57ULL,
+       0x6946bb8b56e467dcULL, 0x139ecb4366d1eea5ULL,
+       0x5ccebf68aecec3a1ULL, 0x2616cfa09efb4ad8ULL,
+       0xa97e5ef8cea5d153ULL, 0xd3a62e30fe90582aULL,
+       0xb0c7b7e3c7593bd8ULL, 0xca1fc72bf76cb2a1ULL,
+       0x45775673a732292aULL, 0x3faf26bb9707a053ULL,
+       0x70ff52905f188d57ULL, 0x0a2722586f2d042eULL,
+       0x854fb3003f739fa5ULL, 0xff97c3c80f4616dcULL,
+       0x1bef5b57af4dc5adULL, 0x61372b9f9f784cd4ULL,
+       0xee5fbac7cf26d75fULL, 0x9487ca0fff135e26ULL,
+       0xdbd7be24370c7322ULL, 0xa10fceec0739fa5bULL,
+       0x2e675fb4576761d0ULL, 0x54bf2f7c6752e8a9ULL,
+       0xcdcf48d84fe75459ULL, 0xb71738107fd2dd20ULL,
+       0x387fa9482f8c46abULL, 0x42a7d9801fb9cfd2ULL,
+       0x0df7adabd7a6e2d6ULL, 0x772fdd63e7936bafULL,
+       0xf8474c3bb7cdf024ULL, 0x829f3cf387f8795dULL,
+       0x66e7a46c27f3aa2cULL, 0x1c3fd4a417c62355ULL,
+       0x935745fc4798b8deULL, 0xe98f353477ad31a7ULL,
+       0xa6df411fbfb21ca3ULL, 0xdc0731d78f8795daULL,
+       0x536fa08fdfd90e51ULL, 0x29b7d047efec8728ULL
+};
+
+static const uint64_t crc64_jones_norm_table[256] = {
+       0x0000000000000000ULL, 0xad93d23594c935a9ULL,
+       0xf6b4765ebd5b5efbULL, 0x5b27a46b29926b52ULL,
+       0x40fb3e88ee7f885fULL, 0xed68ecbd7ab6bdf6ULL,
+       0xb64f48d65324d6a4ULL, 0x1bdc9ae3c7ede30dULL,
+       0x81f67d11dcff10beULL, 0x2c65af2448362517ULL,
+       0x77420b4f61a44e45ULL, 0xdad1d97af56d7becULL,
+       0xc10d4399328098e1ULL, 0x6c9e91aca649ad48ULL,
+       0x37b935c78fdbc61aULL, 0x9a2ae7f21b12f3b3ULL,
+       0xae7f28162d3714d5ULL, 0x03ecfa23b9fe217cULL,
+       0x58cb5e48906c4a2eULL, 0xf5588c7d04a57f87ULL,
+       0xee84169ec3489c8aULL, 0x4317c4ab5781a923ULL,
+       0x183060c07e13c271ULL, 0xb5a3b2f5eadaf7d8ULL,
+       0x2f895507f1c8046bULL, 0x821a8732650131c2ULL,
+       0xd93d23594c935a90ULL, 0x74aef16cd85a6f39ULL,
+       0x6f726b8f1fb78c34ULL, 0xc2e1b9ba8b7eb99dULL,
+       0x99c61dd1a2ecd2cfULL, 0x3455cfe43625e766ULL,
+       0xf16d8219cea71c03ULL, 0x5cfe502c5a6e29aaULL,
+       0x07d9f44773fc42f8ULL, 0xaa4a2672e7357751ULL,
+       0xb196bc9120d8945cULL, 0x1c056ea4b411a1f5ULL,
+       0x4722cacf9d83caa7ULL, 0xeab118fa094aff0eULL,
+       0x709bff0812580cbdULL, 0xdd082d3d86913914ULL,
+       0x862f8956af035246ULL, 0x2bbc5b633bca67efULL,
+       0x3060c180fc2784e2ULL, 0x9df313b568eeb14bULL,
+       0xc6d4b7de417cda19ULL, 0x6b4765ebd5b5efb0ULL,
+       0x5f12aa0fe39008d6ULL, 0xf281783a77593d7fULL,
+       0xa9a6dc515ecb562dULL, 0x04350e64ca026384ULL,
+       0x1fe994870def8089ULL, 0xb27a46b29926b520ULL,
+       0xe95de2d9b0b4de72ULL, 0x44ce30ec247debdbULL,
+       0xdee4d71e3f6f1868ULL, 0x7377052baba62dc1ULL,
+       0x2850a14082344693ULL, 0x85c3737516fd733aULL,
+       0x9e1fe996d1109037ULL, 0x338c3ba345d9a59eULL,
+       0x68ab9fc86c4bceccULL, 0xc5384dfdf882fb65ULL,
+       0x4f48d60609870dafULL, 0xe2db04339d4e3806ULL,
+       0xb9fca058b4dc5354ULL, 0x146f726d201566fdULL,
+       0x0fb3e88ee7f885f0ULL, 0xa2203abb7331b059ULL,
+       0xf9079ed05aa3db0bULL, 0x54944ce5ce6aeea2ULL,
+       0xcebeab17d5781d11ULL, 0x632d792241b128b8ULL,
+       0x380add49682343eaULL, 0x95990f7cfcea7643ULL,
+       0x8e45959f3b07954eULL, 0x23d647aaafcea0e7ULL,
+       0x78f1e3c1865ccbb5ULL, 0xd56231f41295fe1cULL,
+       0xe137fe1024b0197aULL, 0x4ca42c25b0792cd3ULL,
+       0x1783884e99eb4781ULL, 0xba105a7b0d227228ULL,
+       0xa1ccc098cacf9125ULL, 0x0c5f12ad5e06a48cULL,
+       0x5778b6c67794cfdeULL, 0xfaeb64f3e35dfa77ULL,
+       0x60c18301f84f09c4ULL, 0xcd5251346c863c6dULL,
+       0x9675f55f4514573fULL, 0x3be6276ad1dd6296ULL,
+       0x203abd891630819bULL, 0x8da96fbc82f9b432ULL,
+       0xd68ecbd7ab6bdf60ULL, 0x7b1d19e23fa2eac9ULL,
+       0xbe25541fc72011acULL, 0x13b6862a53e92405ULL,
+       0x489122417a7b4f57ULL, 0xe502f074eeb27afeULL,
+       0xfede6a97295f99f3ULL, 0x534db8a2bd96ac5aULL,
+       0x086a1cc99404c708ULL, 0xa5f9cefc00cdf2a1ULL,
+       0x3fd3290e1bdf0112ULL, 0x9240fb3b8f1634bbULL,
+       0xc9675f50a6845fe9ULL, 0x64f48d65324d6a40ULL,
+       0x7f281786f5a0894dULL, 0xd2bbc5b36169bce4ULL,
+       0x899c61d848fbd7b6ULL, 0x240fb3eddc32e21fULL,
+       0x105a7c09ea170579ULL, 0xbdc9ae3c7ede30d0ULL,
+       0xe6ee0a57574c5b82ULL, 0x4b7dd862c3856e2bULL,
+       0x50a1428104688d26ULL, 0xfd3290b490a1b88fULL,
+       0xa61534dfb933d3ddULL, 0x0b86e6ea2dfae674ULL,
+       0x91ac011836e815c7ULL, 0x3c3fd32da221206eULL,
+       0x671877468bb34b3cULL, 0xca8ba5731f7a7e95ULL,
+       0xd1573f90d8979d98ULL, 0x7cc4eda54c5ea831ULL,
+       0x27e349ce65ccc363ULL, 0x8a709bfbf105f6caULL,
+       0x9e91ac0c130e1b5eULL, 0x33027e3987c72ef7ULL,
+       0x6825da52ae5545a5ULL, 0xc5b608673a9c700cULL,
+       0xde6a9284fd719301ULL, 0x73f940b169b8a6a8ULL,
+       0x28dee4da402acdfaULL, 0x854d36efd4e3f853ULL,
+       0x1f67d11dcff10be0ULL, 0xb2f403285b383e49ULL,
+       0xe9d3a74372aa551bULL, 0x44407576e66360b2ULL,
+       0x5f9cef95218e83bfULL, 0xf20f3da0b547b616ULL,
+       0xa92899cb9cd5dd44ULL, 0x04bb4bfe081ce8edULL,
+       0x30ee841a3e390f8bULL, 0x9d7d562faaf03a22ULL,
+       0xc65af24483625170ULL, 0x6bc9207117ab64d9ULL,
+       0x7015ba92d04687d4ULL, 0xdd8668a7448fb27dULL,
+       0x86a1cccc6d1dd92fULL, 0x2b321ef9f9d4ec86ULL,
+       0xb118f90be2c61f35ULL, 0x1c8b2b3e760f2a9cULL,
+       0x47ac8f555f9d41ceULL, 0xea3f5d60cb547467ULL,
+       0xf1e3c7830cb9976aULL, 0x5c7015b69870a2c3ULL,
+       0x0757b1ddb1e2c991ULL, 0xaac463e8252bfc38ULL,
+       0x6ffc2e15dda9075dULL, 0xc26ffc20496032f4ULL,
+       0x9948584b60f259a6ULL, 0x34db8a7ef43b6c0fULL,
+       0x2f07109d33d68f02ULL, 0x8294c2a8a71fbaabULL,
+       0xd9b366c38e8dd1f9ULL, 0x7420b4f61a44e450ULL,
+       0xee0a5304015617e3ULL, 0x43998131959f224aULL,
+       0x18be255abc0d4918ULL, 0xb52df76f28c47cb1ULL,
+       0xaef16d8cef299fbcULL, 0x0362bfb97be0aa15ULL,
+       0x58451bd25272c147ULL, 0xf5d6c9e7c6bbf4eeULL,
+       0xc1830603f09e1388ULL, 0x6c10d43664572621ULL,
+       0x3737705d4dc54d73ULL, 0x9aa4a268d90c78daULL,
+       0x8178388b1ee19bd7ULL, 0x2cebeabe8a28ae7eULL,
+       0x77cc4ed5a3bac52cULL, 0xda5f9ce03773f085ULL,
+       0x40757b122c610336ULL, 0xede6a927b8a8369fULL,
+       0xb6c10d4c913a5dcdULL, 0x1b52df7905f36864ULL,
+       0x008e459ac21e8b69ULL, 0xad1d97af56d7bec0ULL,
+       0xf63a33c47f45d592ULL, 0x5ba9e1f1eb8ce03bULL,
+       0xd1d97a0a1a8916f1ULL, 0x7c4aa83f8e402358ULL,
+       0x276d0c54a7d2480aULL, 0x8afede61331b7da3ULL,
+       0x91224482f4f69eaeULL, 0x3cb196b7603fab07ULL,
+       0x679632dc49adc055ULL, 0xca05e0e9dd64f5fcULL,
+       0x502f071bc676064fULL, 0xfdbcd52e52bf33e6ULL,
+       0xa69b71457b2d58b4ULL, 0x0b08a370efe46d1dULL,
+       0x10d4399328098e10ULL, 0xbd47eba6bcc0bbb9ULL,
+       0xe6604fcd9552d0ebULL, 0x4bf39df8019be542ULL,
+       0x7fa6521c37be0224ULL, 0xd2358029a377378dULL,
+       0x891224428ae55cdfULL, 0x2481f6771e2c6976ULL,
+       0x3f5d6c94d9c18a7bULL, 0x92cebea14d08bfd2ULL,
+       0xc9e91aca649ad480ULL, 0x647ac8fff053e129ULL,
+       0xfe502f0deb41129aULL, 0x53c3fd387f882733ULL,
+       0x08e45953561a4c61ULL, 0xa5778b66c2d379c8ULL,
+       0xbeab1185053e9ac5ULL, 0x1338c3b091f7af6cULL,
+       0x481f67dbb865c43eULL, 0xe58cb5ee2cacf197ULL,
+       0x20b4f813d42e0af2ULL, 0x8d272a2640e73f5bULL,
+       0xd6008e4d69755409ULL, 0x7b935c78fdbc61a0ULL,
+       0x604fc69b3a5182adULL, 0xcddc14aeae98b704ULL,
+       0x96fbb0c5870adc56ULL, 0x3b6862f013c3e9ffULL,
+       0xa142850208d11a4cULL, 0x0cd157379c182fe5ULL,
+       0x57f6f35cb58a44b7ULL, 0xfa6521692143711eULL,
+       0xe1b9bb8ae6ae9213ULL, 0x4c2a69bf7267a7baULL,
+       0x170dcdd45bf5cce8ULL, 0xba9e1fe1cf3cf941ULL,
+       0x8ecbd005f9191e27ULL, 0x235802306dd02b8eULL,
+       0x787fa65b444240dcULL, 0xd5ec746ed08b7575ULL,
+       0xce30ee8d17669678ULL, 0x63a33cb883afa3d1ULL,
+       0x388498d3aa3dc883ULL, 0x95174ae63ef4fd2aULL,
+       0x0f3dad1425e60e99ULL, 0xa2ae7f21b12f3b30ULL,
+       0xf989db4a98bd5062ULL, 0x541a097f0c7465cbULL,
+       0x4fc6939ccb9986c6ULL, 0xe25541a95f50b36fULL,
+       0xb972e5c276c2d83dULL, 0x14e137f7e20bed94ULL
+};
 
-// crc64_ecma baseline function
-// Slow crc64 from the definition.  Can be sped up with a lookup table.
 uint64_t crc64_ecma_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0xC96C5795D7870F42ULL;  // ECMA-182 standard reflected
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ (uint64_t) buf[i];
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_ecma_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
 uint64_t crc64_ecma_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0x42F0E1EBA9EA3693ULL;  // ECMA-182 standard
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ ((uint64_t) buf[i] << 56);
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_ecma_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
-// crc64_iso baseline function
-// Slow crc64 from the definition.  Can be sped up with a lookup table.
 uint64_t crc64_iso_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0xD800000000000000ULL;  // ISO standard reflected
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ (uint64_t) buf[i];
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_iso_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
 uint64_t crc64_iso_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0x000000000000001BULL;  // ISO standard
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ ((uint64_t) buf[i] << 56);
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_iso_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
-// crc64_jones baseline function
-// Slow crc64 from the definition.  Can be sped up with a lookup table.
 uint64_t crc64_jones_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0x95ac9329ac4bc9b5ULL;  // Jones coefficients reflected
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ (uint64_t) buf[i];
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_jones_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
 uint64_t crc64_jones_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
-
-       uint64_t poly = 0xad93d23594c935a9ULL;  // Jones coefficients
+       uint64_t i, crc = ~seed;
 
        for (i = 0; i < len; i++) {
-               rem = rem ^ ((uint64_t) buf[i] << 56);
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
-               }
+               uint8_t byte = buf[i];
+               crc = crc64_jones_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8);
        }
-       return ~rem;
+
+       return ~crc;
 }
 
 struct slver {
diff --git a/ceph/src/isa-l/crc/crc64_ecma_norm_by16_10.asm b/ceph/src/isa-l/crc/crc64_ecma_norm_by16_10.asm
new file mode 100644 (file)
index 0000000..8b09a89
--- /dev/null
@@ -0,0 +1,61 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%define FUNCTION_NAME crc64_ecma_norm_by16_10
+%define USE_CONSTS
+%macro INCLUDE_CONSTS 0
+rk_1: dq 0x7f52691a60ddc70d
+rk_2: dq 0x7036b0389f6a0c82
+rk1: dq 0x05f5c3c7eb52fab6
+rk2: dq 0x4eb938a7d257740e
+rk3: dq 0x05cf79dea9ac37d6
+rk4: dq 0x001067e571d7d5c2
+rk5: dq 0x05f5c3c7eb52fab6
+rk6: dq 0x0000000000000000
+rk7: dq 0x578d29d06cc4f872
+rk8: dq 0x42f0e1eba9ea3693
+rk9: dq 0xe464f4df5fb60ac1
+rk10: dq 0xb649c5b35a759cf2
+rk11: dq 0x9af04e1eff82d0dd
+rk12: dq 0x6e82e609297f8fe8
+rk13: dq 0x097c516e98bd2e73
+rk14: dq 0x0b76477b31e22e7b
+rk15: dq 0x5f6843ca540df020
+rk16: dq 0xddf4b6981205b83f
+rk17: dq 0x54819d8713758b2c
+rk18: dq 0x4a6b90073eb0af5a
+rk19: dq 0x571bee0a227ef92b
+rk20: dq 0x44bef2a201b5200c
+rk_1b: dq 0x05f5c3c7eb52fab6
+rk_2b: dq 0x4eb938a7d257740e
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%endm
+
+%include "crc64_iso_norm_by16_10.asm"
index cff01e1c8f1358c803a94db61b6a86e62fcb0931..6770e34e8736216d2d09e8cdb8ff7053a05cf8af 100644 (file)
@@ -62,7 +62,7 @@ section .text
         %define VARIABLE_OFFSET 16*2+8
 %endif
 align 16
-global crc64_ecma_norm_by8:function
+global crc64_ecma_norm_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_ecma_norm_by8:
 
        not     arg1      ;~init_crc
diff --git a/ceph/src/isa-l/crc/crc64_ecma_refl_by16_10.asm b/ceph/src/isa-l/crc/crc64_ecma_refl_by16_10.asm
new file mode 100644 (file)
index 0000000..a48d0b2
--- /dev/null
@@ -0,0 +1,61 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%define FUNCTION_NAME crc64_ecma_refl_by16_10
+%define USE_CONSTS
+%macro INCLUDE_CONSTS 0
+rk_1: dq 0xf31fd9271e228b79
+rk_2: dq 0x8260adf2381ad81c
+rk1: dq 0xdabe95afc7875f40
+rk2: dq 0xe05dd497ca393ae4
+rk3: dq 0xd7d86b2af73de740
+rk4: dq 0x8757d71d4fcc1000
+rk5: dq 0xdabe95afc7875f40
+rk6: dq 0x0000000000000000
+rk7: dq 0x9c3e466c172963d5
+rk8: dq 0x92d8af2baf0e1e84
+rk9: dq 0x947874de595052cb
+rk10: dq 0x9e735cb59b4724da
+rk11: dq 0xe4ce2cd55fea0037
+rk12: dq 0x2fe3fd2920ce82ec
+rk13: dq 0x0e31d519421a63a5
+rk14: dq 0x2e30203212cac325
+rk15: dq 0x081f6054a7842df4
+rk16: dq 0x6ae3efbb9dd441f3
+rk17: dq 0x69a35d91c3730254
+rk18: dq 0xb5ea1af9c013aca4
+rk19: dq 0x3be653a30fe1af51
+rk20: dq 0x60095b008a9efa44
+rk_1b: dq 0xdabe95afc7875f40
+rk_2b: dq 0xe05dd497ca393ae4
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%endm
+
+%include "crc64_iso_refl_by16_10.asm"
index 9d3847e96d5b6dc568276fc451ec063c17ce4907..e6518f424aa380ac6faa14d7ad1e69a69ab7f3d8 100644 (file)
@@ -68,7 +68,7 @@ section .text
 
 
 align 16
-global crc64_ecma_refl_by8:function
+global crc64_ecma_refl_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_ecma_refl_by8:
         ; uint64_t c = crc ^ 0xffffffff,ffffffffL;
        not arg1
index 04135bff8e392b1e2c8f5755037abf1a66506630..4ad1cc1994638605e7f26678747f002e78d68801 100644 (file)
 #ifdef CACHED_TEST
 // Cached test, loop many times over small dataset
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   400000
 # define TEST_TYPE_STR "_warm"
 #else
 // Uncached test.  Pull from large mem base.
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     (2 * GT_L3_CACHE)
-#  define TEST_LOOPS   100
 #  define TEST_TYPE_STR "_cold"
 #endif
 
@@ -74,10 +72,10 @@ func_case_t test_funcs[] = {
 
 int main(int argc, char *argv[])
 {
-       int i, j;
+       int j;
        void *buf;
        uint64_t crc;
-       struct perf start, stop;
+       struct perf start;
        func_case_t *test_func;
 
        if (posix_memalign(&buf, 1024, TEST_LEN)) {
@@ -93,14 +91,10 @@ int main(int argc, char *argv[])
                printf("Start timed tests\n");
                fflush(0);
 
-               crc = test_func->crc64_func_call(TEST_SEED, buf, TEST_LEN);
-               perf_start(&start);
-               for (i = 0; i < TEST_LOOPS; i++) {
-                       crc = test_func->crc64_func_call(TEST_SEED, buf, TEST_LEN);
-               }
-               perf_stop(&stop);
+               BENCHMARK(&start, BENCHMARK_TIME, crc =
+                         test_func->crc64_func_call(TEST_SEED, buf, TEST_LEN));
                printf("%s" TEST_TYPE_STR ": ", test_func->note);
-               perf_print(stop, start, (long long)TEST_LEN * i);
+               perf_print(start, (long long)TEST_LEN);
 
                printf("finish 0x%lx\n", crc);
        }
index f638f0f9451b77482f15285f84df328eca9fe18c..7e4ee2b37437b696253cba27305bb54c200c8aea 100644 (file)
 #include <stdint.h>
 #include "crc64.h"
 #include "types.h"
+#include "crc64_ref.h"
 
 #ifndef TEST_SEED
 # define TEST_SEED 0x1234
 #endif
 
-#define MAX_BUF   512
-#define TEST_SIZE  20
+#define MAX_BUF   4096
+#define TEST_SIZE  32
 
 typedef uint64_t u64;
 typedef uint32_t u32;
@@ -51,16 +52,18 @@ typedef uint64_t(*crc64_func_t) (uint64_t, const uint8_t *, uint64_t);
 typedef struct func_case {
        char *note;
        crc64_func_t crc64_func_call;
+       crc64_func_t crc64_base_call;
        crc64_func_t crc64_ref_call;
 } func_case_t;
 
 func_case_t test_funcs[] = {
-       {"crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base},
-       {"crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base},
-       {"crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base},
-       {"crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base},
-       {"crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base},
-       {"crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base}
+       {"crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base, crc64_ecma_norm_ref},
+       {"crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base, crc64_ecma_refl_ref},
+       {"crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base, crc64_iso_norm_ref},
+       {"crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base, crc64_iso_refl_ref},
+       {"crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base,
+        crc64_jones_norm_ref},
+       {"crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base, crc64_jones_refl_ref}
 };
 
 // Generates pseudo-random data
@@ -94,8 +97,8 @@ int main(int argc, char *argv[])
 
        verbose = argc - 1;
 
-       // Align to MAX_BUF boundary
-       ret = posix_memalign(&buf_alloc, MAX_BUF, MAX_BUF * TEST_SIZE);
+       // Align to 32B boundary
+       ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE);
        if (ret) {
                printf("alloc error: Fail");
                return -1;
@@ -107,13 +110,13 @@ int main(int argc, char *argv[])
                fail_case = 0;
                test_func = &test_funcs[i];
 
-               printf("Test %s ", test_func->note);
+               printf("Test %s\t", test_func->note);
                fail_case += zeros_test(test_func);
                fail_case += simple_pattern_test(test_func);
                fail_case += seeds_sizes_test(test_func);
                fail_case += eob_test(test_func);
                fail_case += update_test(test_func);
-               printf("Test %s done: %s\n", test_func->note, fail_case ? "Fail" : "Pass");
+               printf(" done: %s\n", fail_case ? "Fail" : "Pass");
 
                if (fail_case) {
                        printf("\n%s Failed %d tests\n", test_func->note, fail_case);
@@ -129,20 +132,21 @@ int main(int argc, char *argv[])
 // Test of all zeros
 int zeros_test(func_case_t * test_func)
 {
-       uint64_t crc, crc_ref;
+       uint64_t crc_ref, crc_base, crc;
        int fail = 0;
        unsigned char *buf = NULL;
 
        buf = (unsigned char *)buf_alloc;
        memset(buf, 0, MAX_BUF * 10);
-       crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF * 10);
        crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF * 10);
+       crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF * 10);
+       crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF * 10);
 
-       if (crc != crc_ref) {
+       if ((crc_base != crc_ref) || (crc != crc_ref)) {
                fail++;
                printf("\n                 opt   ref\n");
                printf("                 ------ ------\n");
-               printf("crc     zero = 0x%16lx 0x%16lx \n", crc, crc_ref);
+               printf("crc     zero = 0x%16lx 0x%16lx 0x%16lx \n", crc_ref, crc_base, crc);
        } else
                printf(".");
 
@@ -152,18 +156,20 @@ int zeros_test(func_case_t * test_func)
 // Another simple test pattern
 int simple_pattern_test(func_case_t * test_func)
 {
-       uint64_t crc, crc_ref;
+       uint64_t crc_ref, crc_base, crc;
        int fail = 0;
        unsigned char *buf = NULL;
 
        buf = (unsigned char *)buf_alloc;
        memset(buf, 0x8a, MAX_BUF);
-       crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF);
        crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF);
-       if (crc != crc_ref)
+       crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF);
+       crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF);
+
+       if ((crc_base != crc_ref) || (crc != crc_ref))
                fail++;
        if (verbose)
-               printf("crc  all 8a = 0x%16lx 0x%16lx\n", crc, crc_ref);
+               printf("crc  all 8a = 0x%16lx 0x%16lx 0x%16lx\n", crc_ref, crc_base, crc);
        else
                printf(".");
 
@@ -172,7 +178,7 @@ int simple_pattern_test(func_case_t * test_func)
 
 int seeds_sizes_test(func_case_t * test_func)
 {
-       uint64_t crc, crc_ref;
+       uint64_t crc_ref, crc_base, crc;
        int fail = 0;
        int i;
        uint64_t r, s;
@@ -184,13 +190,16 @@ int seeds_sizes_test(func_case_t * test_func)
        rand_buffer(buf, MAX_BUF * TEST_SIZE);
 
        for (i = 0; i < TEST_SIZE; i++) {
-               crc = test_func->crc64_func_call(r, buf, MAX_BUF);
                crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF);
-               if (crc != crc_ref)
+               crc_base = test_func->crc64_base_call(r, buf, MAX_BUF);
+               crc = test_func->crc64_func_call(r, buf, MAX_BUF);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref))
                        fail++;
                if (verbose)
-                       printf("crc rand%3d = 0x%16lx 0x%16lx\n", i, crc, crc_ref);
-               else
+                       printf("crc rand%3d = 0x%16lx 0x%16lx 0x%16lx\n", i, crc_ref, crc_base,
+                              crc);
+               else if (i % (TEST_SIZE / 8) == 0)
                        printf(".");
                buf += MAX_BUF;
        }
@@ -200,12 +209,15 @@ int seeds_sizes_test(func_case_t * test_func)
        r = rand();
 
        for (i = MAX_BUF; i >= 0; i--) {
-               crc = test_func->crc64_func_call(r, buf, i);
                crc_ref = test_func->crc64_ref_call(r, buf, i);
-               if (crc != crc_ref) {
+               crc_base = test_func->crc64_base_call(r, buf, i);
+               crc = test_func->crc64_func_call(r, buf, i);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref)) {
                        fail++;
-                       printf("fail random size%i 0x%16lx 0x%16lx\n", i, crc, crc_ref);
-               } else
+                       printf("fail random size%i 0x%16lx 0x%16lx 0x%16lx\n", i, crc_ref,
+                              crc_base, crc);
+               } else if (i % (MAX_BUF / 8) == 0)
                        printf(".");
        }
 
@@ -220,13 +232,16 @@ int seeds_sizes_test(func_case_t * test_func)
                        printf("seed = 0x%lx\n", r);
 
                for (i = 0; i < TEST_SIZE; i++) {
-                       crc = test_func->crc64_func_call(r, buf, MAX_BUF);
                        crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF);
-                       if (crc != crc_ref)
+                       crc_base = test_func->crc64_base_call(r, buf, MAX_BUF);
+                       crc = test_func->crc64_func_call(r, buf, MAX_BUF);
+
+                       if ((crc_base != crc_ref) || (crc != crc_ref))
                                fail++;
                        if (verbose)
-                               printf("crc rand%3d = 0x%16lx 0x%16lx\n", i, crc, crc_ref);
-                       else
+                               printf("crc rand%3d = 0x%16lx 0x%16lx 0x%16lx\n", i, crc_ref,
+                                      crc_base, crc);
+                       else if (i % (TEST_SIZE * 20 / 8) == 0)
                                printf(".");
                        buf += MAX_BUF;
                }
@@ -238,21 +253,30 @@ int seeds_sizes_test(func_case_t * test_func)
 // Run tests at end of buffer
 int eob_test(func_case_t * test_func)
 {
-       uint64_t crc, crc_ref;
+       uint64_t crc_ref, crc_base, crc;
        int fail = 0;
        int i;
        unsigned char *buf = NULL;
 
+       // Null test
+       if (0 != test_func->crc64_func_call(0, NULL, 0)) {
+               fail++;
+               printf("crc null test fail\n");
+       }
+
        buf = (unsigned char *)buf_alloc;       //reset buf
        buf = buf + ((MAX_BUF - 1) * TEST_SIZE);        //Line up TEST_SIZE from end
-       for (i = 0; i < TEST_SIZE; i++) {
-               crc = test_func->crc64_func_call(TEST_SEED, buf + i, TEST_SIZE - i);
+       for (i = 0; i <= TEST_SIZE; i++) {
                crc_ref = test_func->crc64_ref_call(TEST_SEED, buf + i, TEST_SIZE - i);
-               if (crc != crc_ref)
+               crc_base = test_func->crc64_base_call(TEST_SEED, buf + i, TEST_SIZE - i);
+               crc = test_func->crc64_func_call(TEST_SEED, buf + i, TEST_SIZE - i);
+
+               if ((crc_base != crc_ref) || (crc != crc_ref))
                        fail++;
                if (verbose)
-                       printf("crc eob rand%3d = 0x%16lx 0x%16lx\n", i, crc, crc_ref);
-               else
+                       printf("crc eob rand%3d = 0x%16lx 0x%16lx 0x%16lx\n", i, crc_ref,
+                              crc_base, crc);
+               else if (i % (TEST_SIZE / 8) == 0)
                        printf(".");
        }
 
@@ -261,7 +285,7 @@ int eob_test(func_case_t * test_func)
 
 int update_test(func_case_t * test_func)
 {
-       uint64_t crc, crc_ref;
+       uint64_t crc_ref, crc_base, crc;
        int fail = 0;
        int i;
        uint64_t r;
@@ -271,6 +295,7 @@ int update_test(func_case_t * test_func)
        r = rand();
        // Process the whole buf with reference func single call.
        crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF * TEST_SIZE);
+       crc_base = test_func->crc64_base_call(r, buf, MAX_BUF * TEST_SIZE);
        // Process buf with update method.
        for (i = 0; i < TEST_SIZE; i++) {
                crc = test_func->crc64_func_call(r, buf, MAX_BUF);
@@ -279,10 +304,10 @@ int update_test(func_case_t * test_func)
                buf += MAX_BUF;
        }
 
-       if (crc != crc_ref)
+       if ((crc_base != crc_ref) || (crc != crc_ref))
                fail++;
        if (verbose)
-               printf("crc rand%3d = 0x%16lx 0x%16lx\n", i, crc, crc_ref);
+               printf("crc rand%3d = 0x%16lx 0x%16lx 0x%16lx\n", i, crc_ref, crc_base, crc);
        else
                printf(".");
 
diff --git a/ceph/src/isa-l/crc/crc64_iso_norm_by16_10.asm b/ceph/src/isa-l/crc/crc64_iso_norm_by16_10.asm
new file mode 100644 (file)
index 0000000..c9f38b3
--- /dev/null
@@ -0,0 +1,524 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       uint64_t crc64_iso_norm_by16_10(
+;               uint64_t init_crc, //initial CRC value, 64 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               uint64_t len //buffer length in bytes (64-bit data)
+;       );
+;
+%include "reg_sizes.asm"
+
+%ifndef FUNCTION_NAME
+%define FUNCTION_NAME crc64_iso_norm_by16_10
+%endif
+
+%if (AS_FEATURE_LEVEL) >= 10
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*12+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global FUNCTION_NAME:ISAL_SYM_TYPE_FUNCTION
+FUNCTION_NAME:
+       not             arg1
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+       vmovdqa         [rsp + XMM_SAVE + 16*8], xmm14
+       vmovdqa         [rsp + XMM_SAVE + 16*9], xmm15
+%endif
+       vbroadcasti32x4 zmm18, [SHUF_MASK]
+       cmp             arg3, 256
+       jl              _less_than_256
+
+       ; load the initial crc value
+       vmovq           xmm10, arg1      ; initial crc
+
+       ; crc value does not need to be byte-reflected, but it needs to be moved to the high part of the register.
+       ; because data will be byte-reflected and will align with initial crc at correct place.
+       vpslldq         xmm10, 8
+
+       ; receive the initial 128B data, xor the initial crc value
+       vmovdqu8        zmm0, [arg2+16*0]
+       vmovdqu8        zmm4, [arg2+16*4]
+       vpshufb         zmm0, zmm0, zmm18
+       vpshufb         zmm4, zmm4, zmm18
+       vpxorq          zmm0, zmm10
+       vbroadcasti32x4 zmm10, [rk3]    ;zmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+       sub             arg3, 256
+       cmp             arg3, 256
+       jl              _fold_128_B_loop
+
+       vmovdqu8        zmm7, [arg2+16*8]
+       vmovdqu8        zmm8, [arg2+16*12]
+       vpshufb         zmm7, zmm7, zmm18
+       vpshufb         zmm8, zmm8, zmm18
+       vbroadcasti32x4 zmm16, [rk_1]   ;zmm16 has rk-1 and rk-2
+       sub             arg3, 256
+
+_fold_256_B_loop:
+       add             arg2, 256
+       vmovdqu8        zmm3, [arg2+16*0]
+       vpshufb         zmm3, zmm3, zmm18
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm3
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm16, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm16, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       vmovdqu8        zmm11, [arg2+16*8]
+       vpshufb         zmm11, zmm11, zmm18
+       vpclmulqdq      zmm12, zmm7, zmm16, 0x00
+       vpclmulqdq      zmm13, zmm7, zmm16, 0x11
+       vpxorq          zmm7, zmm12, zmm13
+       vpxorq          zmm7, zmm7, zmm11
+
+       vmovdqu8        zmm17, [arg2+16*12]
+       vpshufb         zmm17, zmm17, zmm18
+       vpclmulqdq      zmm14, zmm8, zmm16, 0x00
+       vpclmulqdq      zmm15, zmm8, zmm16, 0x11
+       vpxorq          zmm8, zmm14, zmm15
+       vpxorq          zmm8, zmm8, zmm17
+
+       sub             arg3, 256
+       jge             _fold_256_B_loop
+
+       ;; Fold 256 into 128
+       add             arg2, 256
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x11
+       vpternlogq      zmm7, zmm1, zmm2, 0x96  ; xor ABC
+
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpternlogq      zmm8, zmm5, zmm6, 0x96  ; xor ABC
+
+       vmovdqa32       zmm0, zmm7
+       vmovdqa32       zmm4, zmm8
+
+       add             arg3, 128
+       jmp             _fold_128_B_register
+
+       ; fold 128B at a time. This section of the code folds 2 zmm registers in parallel
+_fold_128_B_loop:
+       add             arg2, 128       ; update the buffer pointer
+       vmovdqu8        zmm8, [arg2+16*0]
+       vpshufb         zmm8, zmm8, zmm18
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x11
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm8
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpshufb         zmm9, zmm9, zmm18
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x11
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+       sub             arg3, 128
+       jge             _fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add             arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 2 zmm registers: zmm0, zmm4
+
+_fold_128_B_register:
+       ; fold the 8 128b parts into 1 xmm register with different constants
+       vmovdqu8        zmm16, [rk9]            ; multiply by rk9-rk16
+       vmovdqu8        zmm11, [rk17]           ; multiply by rk17-rk20, rk1,rk2, 0,0
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x00
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x11
+       vextracti64x2   xmm7, zmm4, 3           ; save last that has no multiplicand
+
+       vpclmulqdq      zmm5, zmm4, zmm11, 0x00
+       vpclmulqdq      zmm6, zmm4, zmm11, 0x11
+       vmovdqa         xmm10, [rk1]            ; Needed later in reduction loop
+       vpternlogq      zmm1, zmm2, zmm5, 0x96  ; xor ABC
+       vpternlogq      zmm1, zmm6, zmm7, 0x96  ; xor ABC
+
+       vshufi64x2      zmm8, zmm1, zmm1, 0x4e ; Swap 1,0,3,2 - 01 00 11 10
+       vpxorq          ymm8, ymm8, ymm1
+       vextracti64x2   xmm5, ymm8, 1
+       vpxorq          xmm7, xmm5, xmm8
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       vmovdqa         xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x00
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpshufb         xmm0, xmm0, xmm18
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+_final_reduction_for_128:
+       add             arg3, 16
+       je              _128_done
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+       vpshufb         xmm1, xmm18
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table + 16]
+       sub             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+       ; shift xmm2 to the left by arg3 bytes
+       vpshufb         xmm2, xmm0
+
+       ; shift xmm7 to the right by 16-arg3 bytes
+       vpxor           xmm0, [mask1]
+       vpshufb         xmm7, xmm0
+       vpblendvb       xmm1, xmm1, xmm2, xmm0
+
+       ; fold 16 Bytes
+       vmovdqa         xmm2, xmm1
+       vmovdqa         xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpclmulqdq      xmm8, xmm10, 0x0
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0x01       ; H*L
+       vpslldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;barrett reduction
+_barrett:
+       vmovdqa         xmm10, [rk7]    ; rk7 and rk8 in xmm10
+       vmovdqa         xmm0, xmm7
+
+       vmovdqa         xmm1, xmm7
+        vpand          xmm1, [mask3]
+       vpclmulqdq      xmm7, xmm10, 0x01
+       vpxor           xmm7, xmm1
+
+       vpclmulqdq      xmm7, xmm10, 0x11
+       vpxor           xmm7, xmm0
+       vpextrq         rax, xmm7, 0
+
+_cleanup:
+       not             rax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+       vmovdqa         xmm14, [rsp + XMM_SAVE + 16*8]
+       vmovdqa         xmm15, [rsp + XMM_SAVE + 16*9]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      _less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovq   xmm0, arg1      ; get the initial crc value
+       vpslldq xmm0, 8 ; align it to its correct place
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm18     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     _16B_reduction_loop
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     rax, arg1
+       test    arg3, arg3
+       je      _cleanup
+
+       vmovq   xmm0, arg1      ; get the initial crc value
+       vpslldq xmm0, 8 ; align it to its correct place
+
+       cmp     arg3, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpshufb xmm7, xmm18     ; byte-reflect the plaintext
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg3, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg3, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg3, 1
+       jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+_zero_left:
+       vmovdqa xmm7, [rsp]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax, [pshufb_shf_table + 16]
+       sub     rax, r9
+
+       cmp     r9, 8
+       jl      _end_1to7
+
+_end_8to15:
+       vmovdqu xmm0, [rax]
+       vpxor   xmm0, [mask1]
+
+       vpshufb xmm7, xmm0
+       jmp     _128_done
+
+_end_1to7:
+       ; Right shift (8-length) bytes in XMM
+       add     rax, 8
+       vmovdqu xmm0, [rax]
+       vpshufb xmm7,xmm0
+
+       jmp     _barrett
+
+align 16
+_exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpshufb xmm7, xmm18
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+section .data
+align 32
+
+%ifndef USE_CONSTS
+; precomputed constants
+rk_1: dq 0x0000001a00000144
+rk_2: dq 0x0000015e00001dac
+rk1:  dq 0x0000000000000145
+rk2:  dq 0x0000000000001db7
+rk3:  dq 0x000100000001001a
+rk4:  dq 0x001b0000001b015e
+rk5:  dq 0x0000000000000145
+rk6:  dq 0x0000000000000000
+rk7:  dq 0x000000000000001b
+rk8:  dq 0x000000000000001b
+rk9:  dq 0x0150145145145015
+rk10: dq 0x1c71db6db6db71c7
+rk11: dq 0x0001110110110111
+rk12: dq 0x001aab1ab1ab1aab
+rk13: dq 0x0000014445014445
+rk14: dq 0x00001daab71daab7
+rk15: dq 0x0000000101000101
+rk16: dq 0x0000001b1b001b1b
+rk17: dq 0x0000000001514515
+rk18: dq 0x000000001c6db6c7
+rk19: dq 0x0000000000011011
+rk20: dq 0x00000000001ab1ab
+
+rk_1b: dq 0x0000000000000145
+rk_2b: dq 0x0000000000001db7
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%else
+INCLUDE_CONSTS
+%endif
+
+mask1: dq 0x8080808080808080, 0x8080808080808080
+mask2: dq 0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF
+mask3: dq 0x0000000000000000, 0xFFFFFFFFFFFFFFFF
+
+SHUF_MASK: dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x0f0e0d0c0b0a0908
+dq 0x8080808080808080, 0x0f0e0d0c0b0a0908
+dq 0x8080808080808080, 0x8080808080808080
+
+
+%else  ; Assembler doesn't understand these opcodes. Add empty symbol for windows.
+%ifidn __OUTPUT_FORMAT__, win64
+global no_ %+ FUNCTION_NAME
+no_ %+ FUNCTION_NAME %+ :
+%endif
+%endif ; (AS_FEATURE_LEVEL) >= 10
index 1a4195d6a42ff2509490af1bc9f0e52efaa00940..9bc38ec942a19c3ff5872e39353bd3839c1442cd 100644 (file)
@@ -61,7 +61,7 @@ section .text
         %define VARIABLE_OFFSET 16*2+8
 %endif
 align 16
-global crc64_iso_norm_by8:function
+global crc64_iso_norm_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_iso_norm_by8:
 
        not     arg1      ;~init_crc
diff --git a/ceph/src/isa-l/crc/crc64_iso_refl_by16_10.asm b/ceph/src/isa-l/crc/crc64_iso_refl_by16_10.asm
new file mode 100644 (file)
index 0000000..0ee9b93
--- /dev/null
@@ -0,0 +1,494 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;       Function API:
+;       uint64_t crc64_iso_refl_by16_10(
+;               uint64_t init_crc, //initial CRC value, 64 bits
+;               const unsigned char *buf, //buffer pointer to calculate CRC on
+;               uint64_t len //buffer length in bytes (64-bit data)
+;       );
+;
+%include "reg_sizes.asm"
+
+%ifndef FUNCTION_NAME
+%define FUNCTION_NAME crc64_iso_refl_by16_10
+%endif
+
+%if (AS_FEATURE_LEVEL) >= 10
+
+%define        fetch_dist      1024
+
+[bits 64]
+default rel
+
+section .text
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       %xdefine        arg1 rcx
+       %xdefine        arg2 rdx
+       %xdefine        arg3 r8
+%else
+       %xdefine        arg1 rdi
+       %xdefine        arg2 rsi
+       %xdefine        arg3 rdx
+%endif
+
+%define TMP 16*0
+%ifidn __OUTPUT_FORMAT__, win64
+       %define XMM_SAVE 16*2
+       %define VARIABLE_OFFSET 16*12+8
+%else
+       %define VARIABLE_OFFSET 16*2+8
+%endif
+
+align 16
+global FUNCTION_NAME:ISAL_SYM_TYPE_FUNCTION
+FUNCTION_NAME:
+       not             arg1
+       sub             rsp, VARIABLE_OFFSET
+
+%ifidn __OUTPUT_FORMAT__, win64
+       ; push the xmm registers into the stack to maintain
+       vmovdqa         [rsp + XMM_SAVE + 16*0], xmm6
+       vmovdqa         [rsp + XMM_SAVE + 16*1], xmm7
+       vmovdqa         [rsp + XMM_SAVE + 16*2], xmm8
+       vmovdqa         [rsp + XMM_SAVE + 16*3], xmm9
+       vmovdqa         [rsp + XMM_SAVE + 16*4], xmm10
+       vmovdqa         [rsp + XMM_SAVE + 16*5], xmm11
+       vmovdqa         [rsp + XMM_SAVE + 16*6], xmm12
+       vmovdqa         [rsp + XMM_SAVE + 16*7], xmm13
+       vmovdqa         [rsp + XMM_SAVE + 16*8], xmm14
+       vmovdqa         [rsp + XMM_SAVE + 16*9], xmm15
+%endif
+
+       cmp             arg3, 256
+       jl              _less_than_256
+
+       ; load the initial crc value
+       vmovq           xmm10, arg1      ; initial crc
+
+       ; receive the initial 128B data, xor the initial crc value
+       vmovdqu8        zmm0, [arg2+16*0]
+       vmovdqu8        zmm4, [arg2+16*4]
+       vpxorq          zmm0, zmm10
+       vbroadcasti32x4 zmm10, [rk3]    ;zmm10 has rk3 and rk4
+                                       ;imm value of pclmulqdq instruction will determine which constant to use
+
+       sub             arg3, 256
+       cmp             arg3, 256
+       jl              _fold_128_B_loop
+
+       vmovdqu8        zmm7, [arg2+16*8]
+       vmovdqu8        zmm8, [arg2+16*12]
+       vbroadcasti32x4 zmm16, [rk_1]   ;zmm16 has rk-1 and rk-2
+       sub             arg3, 256
+
+_fold_256_B_loop:
+       add             arg2, 256
+       vmovdqu8        zmm3, [arg2+16*0]
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x10
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x01
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm3
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpclmulqdq      zmm5, zmm4, zmm16, 0x10
+       vpclmulqdq      zmm6, zmm4, zmm16, 0x01
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       vmovdqu8        zmm11, [arg2+16*8]
+       vpclmulqdq      zmm12, zmm7, zmm16, 0x10
+       vpclmulqdq      zmm13, zmm7, zmm16, 0x01
+       vpxorq          zmm7, zmm12, zmm13
+       vpxorq          zmm7, zmm7, zmm11
+
+       vmovdqu8        zmm17, [arg2+16*12]
+       vpclmulqdq      zmm14, zmm8, zmm16, 0x10
+       vpclmulqdq      zmm15, zmm8, zmm16, 0x01
+       vpxorq          zmm8, zmm14, zmm15
+       vpxorq          zmm8, zmm8, zmm17
+
+       sub             arg3, 256
+       jge             _fold_256_B_loop
+
+       ;; Fold 256 into 128
+       add             arg2, 256
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x01
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x10
+       vpternlogq      zmm7, zmm1, zmm2, 0x96  ; xor ABC
+
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x01
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x10
+       vpternlogq      zmm8, zmm5, zmm6, 0x96  ; xor ABC
+
+       vmovdqa32       zmm0, zmm7
+       vmovdqa32       zmm4, zmm8
+
+       add             arg3, 128
+       jmp             _fold_128_B_register
+
+       ; fold 128B at a time. This section of the code folds 2 zmm registers in parallel
+_fold_128_B_loop:
+       add             arg2, 128       ; update the buffer pointer
+       vmovdqu8        zmm8, [arg2+16*0]
+       vpclmulqdq      zmm1, zmm0, zmm10, 0x10
+       vpclmulqdq      zmm2, zmm0, zmm10, 0x01
+       vpxorq          zmm0, zmm1, zmm2
+       vpxorq          zmm0, zmm0, zmm8
+
+       vmovdqu8        zmm9, [arg2+16*4]
+       vpclmulqdq      zmm5, zmm4, zmm10, 0x10
+       vpclmulqdq      zmm6, zmm4, zmm10, 0x01
+       vpxorq          zmm4, zmm5, zmm6
+       vpxorq          zmm4, zmm4, zmm9
+
+       sub             arg3, 128
+       jge             _fold_128_B_loop
+       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+       add     arg2, 128
+       ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
+       ; the 128B of folded data is in 2 zmm registers: zmm0, zmm4
+
+_fold_128_B_register:
+       ; fold the 8 128b parts into 1 xmm register with different constants
+       vmovdqu8        zmm16, [rk9]            ; multiply by rk9-rk16
+       vmovdqu8        zmm11, [rk17]           ; multiply by rk17-rk20, rk1,rk2, 0,0
+       vpclmulqdq      zmm1, zmm0, zmm16, 0x01
+       vpclmulqdq      zmm2, zmm0, zmm16, 0x10
+       vextracti64x2   xmm7, zmm4, 3           ; save last that has no multiplicand
+
+       vpclmulqdq      zmm5, zmm4, zmm11, 0x01
+       vpclmulqdq      zmm6, zmm4, zmm11, 0x10
+       vmovdqa         xmm10, [rk1]            ; Needed later in reduction loop
+       vpternlogq      zmm1, zmm2, zmm5, 0x96  ; xor ABC
+       vpternlogq      zmm1, zmm6, zmm7, 0x96  ; xor ABC
+
+       vshufi64x2      zmm8, zmm1, zmm1, 0x4e ; Swap 1,0,3,2 - 01 00 11 10
+       vpxorq          ymm8, ymm8, ymm1
+       vextracti64x2   xmm5, ymm8, 1
+       vpxorq          xmm7, xmm5, xmm8
+
+       ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
+       ; instead of a cmp instruction, we use the negative flag with the jl instruction
+       add             arg3, 128-16
+       jl              _final_reduction_for_128
+
+       ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
+       ; we can fold 16 bytes at a time if y>=16
+       ; continue folding 16B at a time
+
+_16B_reduction_loop:
+       vmovdqa         xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x1
+       vpclmulqdq      xmm8, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vmovdqu         xmm0, [arg2]
+       vpxor           xmm7, xmm0
+       add             arg2, 16
+       sub             arg3, 16
+       ; instead of a cmp instruction, we utilize the flags with the jge instruction
+       ; equivalent of: cmp arg3, 16-16
+       ; check if there is any more 16B in the buffer to be able to fold
+       jge             _16B_reduction_loop
+
+       ;now we have 16+z bytes left to reduce, where 0<= z < 16.
+       ;first, we reduce the data in the xmm7 register
+
+
+_final_reduction_for_128:
+       add             arg3, 16
+       je              _128_done
+       ; here we are getting data that is less than 16 bytes.
+       ; since we know that there was data before the pointer, we can offset
+       ; the input pointer before the actual point, to receive exactly 16 bytes.
+       ; after that the registers need to be adjusted.
+_get_last_two_xmms:
+
+
+       vmovdqa         xmm2, xmm7
+       vmovdqu         xmm1, [arg2 - 16 + arg3]
+
+       ; get rid of the extra data that was loaded before
+       ; load the shift constant
+       lea             rax, [pshufb_shf_table]
+       add             rax, arg3
+       vmovdqu         xmm0, [rax]
+
+
+       vpshufb         xmm7, xmm0
+       vpxor           xmm0, [mask3]
+       vpshufb         xmm2, xmm0
+
+       vpblendvb       xmm2, xmm2, xmm1, xmm0
+       ;;;;;;;;;;
+       vmovdqa         xmm8, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x1
+
+       vpclmulqdq      xmm8, xmm10, 0x10
+       vpxor           xmm7, xmm8
+       vpxor           xmm7, xmm2
+
+_128_done:
+       ; compute crc of a 128-bit value
+       vmovdqa         xmm10, [rk5]
+       vmovdqa         xmm0, xmm7
+
+       ;64b fold
+       vpclmulqdq      xmm7, xmm10, 0
+       vpsrldq         xmm0, 8
+       vpxor           xmm7, xmm0
+
+       ;barrett reduction
+_barrett:
+       vmovdqa         xmm1, xmm7
+       vmovdqa         xmm10, [rk7]
+
+       vpclmulqdq      xmm7, xmm10, 0
+       vmovdqa         xmm2, xmm7
+       vpclmulqdq      xmm7, xmm10, 0x10
+       vpslldq         xmm2, 8
+       vpxor           xmm7, xmm2
+       vpxor           xmm7, xmm1
+       vpextrq         rax, xmm7, 1
+
+_cleanup:
+       not             rax
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+       vmovdqa         xmm6, [rsp + XMM_SAVE + 16*0]
+       vmovdqa         xmm7, [rsp + XMM_SAVE + 16*1]
+       vmovdqa         xmm8, [rsp + XMM_SAVE + 16*2]
+       vmovdqa         xmm9, [rsp + XMM_SAVE + 16*3]
+       vmovdqa         xmm10, [rsp + XMM_SAVE + 16*4]
+       vmovdqa         xmm11, [rsp + XMM_SAVE + 16*5]
+       vmovdqa         xmm12, [rsp + XMM_SAVE + 16*6]
+       vmovdqa         xmm13, [rsp + XMM_SAVE + 16*7]
+       vmovdqa         xmm14, [rsp + XMM_SAVE + 16*8]
+       vmovdqa         xmm15, [rsp + XMM_SAVE + 16*9]
+%endif
+       add             rsp, VARIABLE_OFFSET
+       ret
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+align 16
+_less_than_256:
+
+       ; check if there is enough buffer to be able to fold 16B at a time
+       cmp     arg3, 32
+       jl      _less_than_32
+
+       ; if there is, load the constants
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+
+       vmovq   xmm0, arg1      ; get the initial crc value
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpxor   xmm7, xmm0
+
+       ; update the buffer pointer
+       add     arg2, 16
+
+       ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
+       sub     arg3, 32
+
+       jmp     _16B_reduction_loop
+
+align 16
+_less_than_32:
+       ; mov initial crc to the return value. this is necessary for zero-length buffers.
+       mov     rax, arg1
+       test    arg3, arg3
+       je      _cleanup
+
+       vmovq   xmm0, arg1      ; get the initial crc value
+
+       cmp     arg3, 16
+       je      _exact_16_left
+       jl      _less_than_16_left
+
+       vmovdqu xmm7, [arg2]    ; load the plaintext
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+       add     arg2, 16
+       sub     arg3, 16
+       vmovdqa xmm10, [rk1]    ; rk1 and rk2 in xmm10
+       jmp     _get_last_two_xmms
+
+
+align 16
+_less_than_16_left:
+       ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
+
+       vpxor   xmm1, xmm1
+       mov     r11, rsp
+       vmovdqa [r11], xmm1
+
+       ; backup the counter value
+       mov     r9, arg3
+       cmp     arg3, 8
+       jl      _less_than_8_left
+
+       ; load 8 Bytes
+       mov     rax, [arg2]
+       mov     [r11], rax
+       add     r11, 8
+       sub     arg3, 8
+       add     arg2, 8
+_less_than_8_left:
+
+       cmp     arg3, 4
+       jl      _less_than_4_left
+
+       ; load 4 Bytes
+       mov     eax, [arg2]
+       mov     [r11], eax
+       add     r11, 4
+       sub     arg3, 4
+       add     arg2, 4
+_less_than_4_left:
+
+       cmp     arg3, 2
+       jl      _less_than_2_left
+
+       ; load 2 Bytes
+       mov     ax, [arg2]
+       mov     [r11], ax
+       add     r11, 2
+       sub     arg3, 2
+       add     arg2, 2
+_less_than_2_left:
+       cmp     arg3, 1
+       jl      _zero_left
+
+       ; load 1 Byte
+       mov     al, [arg2]
+       mov     [r11], al
+
+_zero_left:
+       vmovdqa xmm7, [rsp]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       lea     rax,[pshufb_shf_table]
+
+       cmp     r9, 8
+       jl      _end_1to7
+
+_end_8to15:
+       vmovdqu xmm0, [rax + r9]
+       vpshufb xmm7,xmm0
+       jmp     _128_done
+
+_end_1to7:
+       ; Left shift (8-length) bytes in XMM
+       vmovdqu xmm0, [rax + r9 + 8]
+       vpshufb xmm7,xmm0
+
+       jmp     _barrett
+
+align 16
+_exact_16_left:
+       vmovdqu xmm7, [arg2]
+       vpxor   xmm7, xmm0      ; xor the initial crc value
+
+       jmp     _128_done
+
+section .data
+align 32
+
+%ifndef USE_CONSTS
+; precomputed constants
+rk_1: dq 0x45000000b0000000
+rk_2: dq 0x6b700000f5000000
+rk1:  dq 0xf500000000000001
+rk2:  dq 0x6b70000000000001
+rk3:  dq 0xb001000000010000
+rk4:  dq 0xf501b0000001b000
+rk5:  dq 0xf500000000000001
+rk6:  dq 0x0000000000000000
+rk7:  dq 0xb000000000000001
+rk8:  dq 0xb000000000000000
+rk9:  dq 0xe014514514501501
+rk10: dq 0x771db6db6db71c71
+rk11: dq 0xa101101101110001
+rk12: dq 0x1ab1ab1ab1aab001
+rk13: dq 0xf445014445000001
+rk14: dq 0x6aab71daab700001
+rk15: dq 0xb100010100000001
+rk16: dq 0x01b001b1b0000001
+rk17: dq 0xe145150000000001
+rk18: dq 0x76db6c7000000001
+rk19: dq 0xa011000000000001
+rk20: dq 0x1b1ab00000000001
+
+rk_1b: dq 0xf500000000000001
+rk_2b: dq 0x6b70000000000001
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%else
+INCLUDE_CONSTS
+%endif
+
+pshufb_shf_table:
+; use these values for shift constants for the pshufb instruction
+; different alignments result in values as shown:
+;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
+;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
+;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
+;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
+;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
+;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
+;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
+;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
+;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
+;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
+;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
+;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
+;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
+;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
+;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+dq 0x0706050403020100, 0x000e0d0c0b0a0908
+
+mask:  dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
+mask2: dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
+mask3: dq     0x8080808080808080, 0x8080808080808080
+
+%else  ; Assembler doesn't understand these opcodes. Add empty symbol for windows.
+%ifidn __OUTPUT_FORMAT__, win64
+global no_ %+ FUNCTION_NAME
+no_ %+ FUNCTION_NAME %+ :
+%endif
+%endif ; (AS_FEATURE_LEVEL) >= 10
index d7ed8ae3460d426a35d67ee7d02e57ec0ded6f36..564a5109792d1873669bb6e93529690fd2893a57 100644 (file)
@@ -65,7 +65,7 @@ section .text
 
 
 align 16
-global crc64_iso_refl_by8:function
+global crc64_iso_refl_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_iso_refl_by8:
         ; uint64_t c = crc ^ 0xffffffff,ffffffffL;
        not arg1
diff --git a/ceph/src/isa-l/crc/crc64_jones_norm_by16_10.asm b/ceph/src/isa-l/crc/crc64_jones_norm_by16_10.asm
new file mode 100644 (file)
index 0000000..2c9836b
--- /dev/null
@@ -0,0 +1,61 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%define FUNCTION_NAME crc64_jones_norm_by16_10
+%define USE_CONSTS
+%macro INCLUDE_CONSTS 0
+rk_1: dq 0x44ff5212394b1c52
+rk_2: dq 0x956d6cb0582122b2
+rk1: dq 0x4445ed2750017038
+rk2: dq 0x698b74157cfbd736
+rk3: dq 0x0cfcfb5101c4b775
+rk4: dq 0x65403fd47cbec866
+rk5: dq 0x4445ed2750017038
+rk6: dq 0x0000000000000000
+rk7: dq 0xddf3eeb298be6cf8
+rk8: dq 0xad93d23594c935a9
+rk9: dq 0xd8dc208e2ba527b4
+rk10: dq 0xf032cfec76bb2bc5
+rk11: dq 0xb536044f357f4238
+rk12: dq 0xfdbf104d938ba67a
+rk13: dq 0xeeddad9297a843e7
+rk14: dq 0x3550bce629466473
+rk15: dq 0x4e501e58ca43d25e
+rk16: dq 0x13c961588f27f643
+rk17: dq 0x3b60d00dcb1099bc
+rk18: dq 0x44bf1f468c53b9a3
+rk19: dq 0x96f2236e317179ee
+rk20: dq 0xf00839aa0dd64bac
+rk_1b: dq 0x4445ed2750017038
+rk_2b: dq 0x698b74157cfbd736
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%endm
+
+%include "crc64_iso_norm_by16_10.asm"
index 0e5e75a22a232e3eb829cee125af1e96339258f0..44ad726c0ab124bd832ce12a5c5616e09dc5c956 100644 (file)
@@ -61,7 +61,7 @@ section .text
         %define VARIABLE_OFFSET 16*2+8
 %endif
 align 16
-global crc64_jones_norm_by8:function
+global crc64_jones_norm_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_jones_norm_by8:
 
        not     arg1      ;~init_crc
diff --git a/ceph/src/isa-l/crc/crc64_jones_refl_by16_10.asm b/ceph/src/isa-l/crc/crc64_jones_refl_by16_10.asm
new file mode 100644 (file)
index 0000000..3950272
--- /dev/null
@@ -0,0 +1,61 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%define FUNCTION_NAME crc64_jones_refl_by16_10
+%define USE_CONSTS
+%macro INCLUDE_CONSTS 0
+rk_1: dq 0x9471a5389095fe44
+rk_2: dq 0x9a8908341a6d6d52
+rk1: dq 0x381d0015c96f4444
+rk2: dq 0xd9d7be7d505da32c
+rk3: dq 0x768361524d29ed0b
+rk4: dq 0xcc26fa7c57f8054c
+rk5: dq 0x381d0015c96f4444
+rk6: dq 0x0000000000000000
+rk7: dq 0x3e6cfa329aef9f77
+rk8: dq 0x2b5926535897936a
+rk9: dq 0x5bc94ba8e2087636
+rk10: dq 0x6cf09c8f37710b75
+rk11: dq 0x3885fd59e440d95a
+rk12: dq 0xbccba3936411fb7e
+rk13: dq 0xe4dd0d81cbfce585
+rk14: dq 0xb715e37b96ed8633
+rk15: dq 0xf49784a634f014e4
+rk16: dq 0xaf86efb16d9ab4fb
+rk17: dq 0x7b3211a760160db8
+rk18: dq 0xa062b2319d66692f
+rk19: dq 0xef3d1d18ed889ed2
+rk20: dq 0x6ba4d760ab38201e
+rk_1b: dq 0x381d0015c96f4444
+rk_2b: dq 0xd9d7be7d505da32c
+       dq 0x0000000000000000
+       dq 0x0000000000000000
+%endm
+
+%include "crc64_iso_refl_by16_10.asm"
index 39da6b822fc014f13f28a65c9db6731f6480d5c2..7081f54a7a947b38a371f0db89ae4d446e690cb4 100644 (file)
@@ -65,7 +65,7 @@ section .text
 
 
 align 16
-global crc64_jones_refl_by8:function
+global crc64_jones_refl_by8:ISAL_SYM_TYPE_FUNCTION
 crc64_jones_refl_by8:
         ; uint64_t c = crc ^ 0xffffffff,ffffffffL;
        not arg1
index a20c8a796d72f8ee79cb1021a8ef9d9da35d73d3..3e06a0ecb0b75d37b6a2816cde24cc325b9bf1f3 100644 (file)
 default rel
 [bits 64]
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 
 extern crc64_ecma_refl_by8
@@ -61,24 +55,33 @@ extern crc64_jones_refl_base
 extern crc64_jones_norm_by8
 extern crc64_jones_norm_base
 
+%if (AS_FEATURE_LEVEL) >= 10
+extern crc64_iso_refl_by16_10
+extern crc64_iso_norm_by16_10
+extern crc64_jones_refl_by16_10
+extern crc64_jones_norm_by16_10
+extern crc64_ecma_refl_by16_10
+extern crc64_ecma_norm_by16_10
+%endif
+
 section .text
 
 %include "multibinary.asm"
 
 mbin_interface                 crc64_ecma_refl
-mbin_dispatch_init_clmul       crc64_ecma_refl, crc64_ecma_refl_base, crc64_ecma_refl_by8
+mbin_dispatch_init7            crc64_ecma_refl, crc64_ecma_refl_base, crc64_ecma_refl_by8, crc64_ecma_refl_by8, crc64_ecma_refl_by8, crc64_ecma_refl_by8, crc64_ecma_refl_by16_10
 mbin_interface                 crc64_ecma_norm
-mbin_dispatch_init_clmul       crc64_ecma_norm, crc64_ecma_norm_base, crc64_ecma_norm_by8
+mbin_dispatch_init7            crc64_ecma_norm, crc64_ecma_norm_base, crc64_ecma_norm_by8, crc64_ecma_norm_by8, crc64_ecma_norm_by8, crc64_ecma_norm_by8, crc64_ecma_norm_by16_10
 
 mbin_interface                 crc64_iso_refl
-mbin_dispatch_init_clmul       crc64_iso_refl, crc64_iso_refl_base, crc64_iso_refl_by8
+mbin_dispatch_init7            crc64_iso_refl, crc64_iso_refl_base, crc64_iso_refl_by8, crc64_iso_refl_by8, crc64_iso_refl_by8, crc64_iso_refl_by8, crc64_iso_refl_by16_10
 mbin_interface                 crc64_iso_norm
-mbin_dispatch_init_clmul       crc64_iso_norm, crc64_iso_norm_base, crc64_iso_norm_by8
+mbin_dispatch_init7            crc64_iso_norm, crc64_iso_norm_base, crc64_iso_norm_by8, crc64_iso_norm_by8, crc64_iso_norm_by8, crc64_iso_norm_by8, crc64_iso_norm_by16_10
 
 mbin_interface                 crc64_jones_refl
-mbin_dispatch_init_clmul       crc64_jones_refl, crc64_jones_refl_base, crc64_jones_refl_by8
+mbin_dispatch_init7            crc64_jones_refl, crc64_jones_refl_base, crc64_jones_refl_by8, crc64_jones_refl_by8, crc64_jones_refl_by8, crc64_jones_refl_by8, crc64_jones_refl_by16_10
 mbin_interface                 crc64_jones_norm
-mbin_dispatch_init_clmul       crc64_jones_norm, crc64_jones_norm_base, crc64_jones_norm_by8
+mbin_dispatch_init7            crc64_jones_norm, crc64_jones_norm_base, crc64_jones_norm_by8, crc64_jones_norm_by8, crc64_jones_norm_by8, crc64_jones_norm_by8, crc64_jones_norm_by16_10
 
 ;;;       func                 core, ver, snum
 slversion crc64_ecma_refl,     00,   00,  001b
diff --git a/ceph/src/isa-l/crc/crc64_ref.h b/ceph/src/isa-l/crc/crc64_ref.h
new file mode 100644 (file)
index 0000000..b30f638
--- /dev/null
@@ -0,0 +1,148 @@
+/**********************************************************************
+  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef _CRC64_REF_H
+#define _CRC64_REF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "crc64.h"
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+#define MAX_ITER       8
+
+// crc64_ecma reference function, slow crc64 from the definition.
+static inline uint64_t crc64_ecma_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0xC96C5795D7870F42ULL;  // ECMA-182 standard reflected
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (uint64_t) buf[i];
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
+               }
+       }
+       return ~rem;
+}
+
+static inline uint64_t crc64_ecma_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0x42F0E1EBA9EA3693ULL;  // ECMA-182 standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ ((uint64_t) buf[i] << 56);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
+               }
+       }
+       return ~rem;
+}
+
+// crc64_iso reference function, slow crc64 from the definition.
+static inline uint64_t crc64_iso_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0xD800000000000000ULL;  // ISO standard reflected
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (uint64_t) buf[i];
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
+               }
+       }
+       return ~rem;
+}
+
+static inline uint64_t crc64_iso_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0x000000000000001BULL;  // ISO standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ ((uint64_t) buf[i] << 56);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
+               }
+       }
+       return ~rem;
+}
+
+// crc64_jones reference function, slow crc64 from the definition.
+static inline uint64_t crc64_jones_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0x95ac9329ac4bc9b5ULL;  // Jones coefficients reflected
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (uint64_t) buf[i];
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1);
+               }
+       }
+       return ~rem;
+}
+
+static inline uint64_t crc64_jones_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint64_t poly = 0xad93d23594c935a9ULL;  // Jones coefficients
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ ((uint64_t) buf[i] << 56);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1);
+               }
+       }
+       return ~rem;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index ee14f059f0cd50ad09fb9f24aaf2302de52594f2..d1eb2d22eb141cec1b4152144fb9efe570cad63b 100644 (file)
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
-#include <stdlib.h>
 #include "crc.h"
 
-#define MAX_ITER       8
+static const uint16_t crc16tab[256] = {
+       0x0000, 0x8BB7, 0x9CD9, 0x176E, 0xB205, 0x39B2, 0x2EDC, 0xA56B,
+       0xEFBD, 0x640A, 0x7364, 0xF8D3, 0x5DB8, 0xD60F, 0xC161, 0x4AD6,
+       0x54CD, 0xDF7A, 0xC814, 0x43A3, 0xE6C8, 0x6D7F, 0x7A11, 0xF1A6,
+       0xBB70, 0x30C7, 0x27A9, 0xAC1E, 0x0975, 0x82C2, 0x95AC, 0x1E1B,
+       0xA99A, 0x222D, 0x3543, 0xBEF4, 0x1B9F, 0x9028, 0x8746, 0x0CF1,
+       0x4627, 0xCD90, 0xDAFE, 0x5149, 0xF422, 0x7F95, 0x68FB, 0xE34C,
+       0xFD57, 0x76E0, 0x618E, 0xEA39, 0x4F52, 0xC4E5, 0xD38B, 0x583C,
+       0x12EA, 0x995D, 0x8E33, 0x0584, 0xA0EF, 0x2B58, 0x3C36, 0xB781,
+       0xD883, 0x5334, 0x445A, 0xCFED, 0x6A86, 0xE131, 0xF65F, 0x7DE8,
+       0x373E, 0xBC89, 0xABE7, 0x2050, 0x853B, 0x0E8C, 0x19E2, 0x9255,
+       0x8C4E, 0x07F9, 0x1097, 0x9B20, 0x3E4B, 0xB5FC, 0xA292, 0x2925,
+       0x63F3, 0xE844, 0xFF2A, 0x749D, 0xD1F6, 0x5A41, 0x4D2F, 0xC698,
+       0x7119, 0xFAAE, 0xEDC0, 0x6677, 0xC31C, 0x48AB, 0x5FC5, 0xD472,
+       0x9EA4, 0x1513, 0x027D, 0x89CA, 0x2CA1, 0xA716, 0xB078, 0x3BCF,
+       0x25D4, 0xAE63, 0xB90D, 0x32BA, 0x97D1, 0x1C66, 0x0B08, 0x80BF,
+       0xCA69, 0x41DE, 0x56B0, 0xDD07, 0x786C, 0xF3DB, 0xE4B5, 0x6F02,
+       0x3AB1, 0xB106, 0xA668, 0x2DDF, 0x88B4, 0x0303, 0x146D, 0x9FDA,
+       0xD50C, 0x5EBB, 0x49D5, 0xC262, 0x6709, 0xECBE, 0xFBD0, 0x7067,
+       0x6E7C, 0xE5CB, 0xF2A5, 0x7912, 0xDC79, 0x57CE, 0x40A0, 0xCB17,
+       0x81C1, 0x0A76, 0x1D18, 0x96AF, 0x33C4, 0xB873, 0xAF1D, 0x24AA,
+       0x932B, 0x189C, 0x0FF2, 0x8445, 0x212E, 0xAA99, 0xBDF7, 0x3640,
+       0x7C96, 0xF721, 0xE04F, 0x6BF8, 0xCE93, 0x4524, 0x524A, 0xD9FD,
+       0xC7E6, 0x4C51, 0x5B3F, 0xD088, 0x75E3, 0xFE54, 0xE93A, 0x628D,
+       0x285B, 0xA3EC, 0xB482, 0x3F35, 0x9A5E, 0x11E9, 0x0687, 0x8D30,
+       0xE232, 0x6985, 0x7EEB, 0xF55C, 0x5037, 0xDB80, 0xCCEE, 0x4759,
+       0x0D8F, 0x8638, 0x9156, 0x1AE1, 0xBF8A, 0x343D, 0x2353, 0xA8E4,
+       0xB6FF, 0x3D48, 0x2A26, 0xA191, 0x04FA, 0x8F4D, 0x9823, 0x1394,
+       0x5942, 0xD2F5, 0xC59B, 0x4E2C, 0xEB47, 0x60F0, 0x779E, 0xFC29,
+       0x4BA8, 0xC01F, 0xD771, 0x5CC6, 0xF9AD, 0x721A, 0x6574, 0xEEC3,
+       0xA415, 0x2FA2, 0x38CC, 0xB37B, 0x1610, 0x9DA7, 0x8AC9, 0x017E,
+       0x1F65, 0x94D2, 0x83BC, 0x080B, 0xAD60, 0x26D7, 0x31B9, 0xBA0E,
+       0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, 0xC96A, 0xDE04, 0x55B3
+};
 
-uint32_t crc32_table_iscsi_base[256] = {
+static const uint32_t crc32_table_iscsi_refl[256] = {
        0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
        0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
        0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B,
@@ -96,62 +128,208 @@ uint32_t crc32_table_iscsi_base[256] = {
        0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81,
        0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
        0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E,
-       0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351,
+       0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
+};
+
+static const uint32_t crc32_table_ieee_norm[256] = {
+       0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
+       0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
+       0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
+       0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
+       0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
+       0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
+       0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
+       0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
+       0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
+       0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
+       0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
+       0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
+       0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
+       0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
+       0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
+       0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
+       0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
+       0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
+       0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
+       0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
+       0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
+       0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
+       0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
+       0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
+       0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
+       0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
+       0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
+       0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
+       0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
+       0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
+       0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
+       0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
+       0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
+       0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
+       0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
+       0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
+       0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
+       0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
+       0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
+       0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
+       0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
+       0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
+       0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
+       0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
+       0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
+       0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
+       0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
+       0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
+       0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
+       0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
+       0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
+       0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
+       0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
+       0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
+       0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
+       0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
+       0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
+       0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
+       0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
+       0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
+       0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
+       0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
+       0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
+       0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
+};
+
+static const uint32_t crc32_table_gzip_refl[256] = {
+       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+       0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+       0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+       0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
+       0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+       0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
+       0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
+       0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+       0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
+       0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
+       0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
+       0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
+       0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
+       0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+       0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+       0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+       0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+       0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+       0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+       0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+       0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+       0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+       0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+       0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+       0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+       0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+       0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+       0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+       0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+       0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+       0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+       0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+       0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+       0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+       0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+       0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+       0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+       0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+       0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+       0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+       0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+       0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+       0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+       0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+       0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+       0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+       0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+       0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
 };
 
-// iSCSI CRC baseline function
+uint16_t crc16_t10dif_base(uint16_t seed, uint8_t * buf, uint64_t len)
+{
+       int i;
+       uint16_t crc = seed;
+
+       for (i = 0; i < len; i++)
+               crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *buf++) & 0x00FF];
+
+       return crc;
+}
+
+uint16_t crc16_t10dif_copy_base(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len)
+{
+       int i;
+       uint16_t crc = seed;
+
+       for (i = 0; i < len; i++) {
+               crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *src) & 0x00FF];
+               *dst++ = *src++;
+       }
+
+       return crc;
+}
+
 unsigned int crc32_iscsi_base(unsigned char *buffer, int len, unsigned int crc_init)
 {
        unsigned int crc;
        unsigned char *p_buf;
-
-       p_buf = (unsigned char *)buffer;
        unsigned char *p_end = buffer + len;
 
+       p_buf = buffer;
        crc = crc_init;
 
-       while (p_buf < (unsigned char *)p_end) {
-               crc = (crc >> 8) ^ crc32_table_iscsi_base[(crc & 0x000000FF) ^ *p_buf++];
+       while (p_buf < p_end) {
+               crc = (crc >> 8) ^ crc32_table_iscsi_refl[(crc & 0x000000FF) ^ *p_buf++];
        }
        return crc;
 }
 
-// crc16_t10dif baseline function
-// Slow crc16 from the definition.  Can be sped up with a lookup table.
-uint16_t crc16_t10dif_base(uint16_t seed, uint8_t * buf, uint64_t len)
+uint32_t crc32_ieee_base(uint32_t seed, uint8_t * buf, uint64_t len)
 {
-       size_t rem = seed;
-       unsigned int i, j;
-
-       uint16_t poly = 0x8bb7; // t10dif standard
+       unsigned int crc = ~seed;
 
-       for (i = 0; i < len; i++) {
-               rem = rem ^ (buf[i] << 8);
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = rem << 1;
-                       rem = (rem & 0x10000) ? rem ^ poly : rem;
-               }
+       while (len--) {
+               crc = (crc << 8) ^ crc32_table_ieee_norm[((crc >> 24) ^ *buf) & 255];
+               buf++;
        }
-       return rem;
+
+       return ~crc;
 }
 
-// crc32_ieee baseline function
-// Slow crc32 from the definition.  Can be sped up with a lookup table.
-uint32_t crc32_ieee_base(uint32_t seed, uint8_t * buf, uint64_t len)
+uint32_t crc32_gzip_refl_base(uint32_t seed, uint8_t * buf, uint64_t len)
 {
-       uint64_t rem = ~seed;
-       unsigned int i, j;
+       unsigned int crc;
+       unsigned char *p_buf;
+       unsigned char *p_end = buf + len;
 
-       uint32_t poly = 0x04C11DB7;     // IEEE standard
+       p_buf = (unsigned char *)buf;
+       crc = ~seed;
 
-       for (i = 0; i < len; i++) {
-               rem = rem ^ (buf[i] << 24);
-               for (j = 0; j < MAX_ITER; j++) {
-                       rem = rem << 1;
-                       rem = (rem & 0x100000000ULL) ? rem ^ poly : rem;
-               }
+       while (p_buf < p_end) {
+               crc = (crc >> 8) ^ crc32_table_gzip_refl[(crc & 0x000000FF) ^ *p_buf++];
        }
-       return ~rem;
+
+       return ~crc;
 }
 
 struct slver {
@@ -168,3 +346,6 @@ struct slver crc16_t10dif_base_slver = { 0x011e, 0x02, 0x00 };
 
 struct slver crc32_ieee_base_slver_0001011f;
 struct slver crc32_ieee_base_slver = { 0x011f, 0x02, 0x00 };
+
+struct slver crc32_gzip_refl_base_slver_0000002b;
+struct slver crc32_gzip_refl_base_slver = { 0x002b, 0x00, 0x00 };
index 63dfb3063ca9d8f91cb5f62e04c007bd647feb65..0ffc62f96d3b11f03e208fe01ac72485596a70e9 100644 (file)
@@ -41,11 +41,21 @@ uint16_t crc16_t10dif(uint16_t seed, const unsigned char *buf, uint64_t len)
        return crc16_t10dif_base(seed, (uint8_t *) buf, len);
 }
 
+uint16_t crc16_t10dif_copy(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len)
+{
+       return crc16_t10dif_copy_base(seed, dst, src, len);
+}
+
 uint32_t crc32_ieee(uint32_t seed, const unsigned char *buf, uint64_t len)
 {
        return crc32_ieee_base(seed, (uint8_t *) buf, len);
 }
 
+uint32_t crc32_gzip_refl(uint32_t seed, const unsigned char *buf, uint64_t len)
+{
+       return crc32_gzip_refl_base(seed, (uint8_t *) buf, len);
+}
+
 uint64_t crc64_ecma_refl(uint64_t seed, const uint8_t * buf, uint64_t len)
 {
        return crc64_ecma_refl_base(seed, buf, len);
index ae0c04989a80348004ba5888694f1708240bf0cd..9628b167781f62f36f9e79214e430c22deae8e11 100644 (file)
 default rel
 [bits 64]
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 
 extern crc32_iscsi_00
@@ -44,12 +38,30 @@ extern crc32_iscsi_base
 
 extern crc32_ieee_01
 extern crc32_ieee_by4  ;; Optimized for SLM
+extern crc32_ieee_02
 extern crc32_ieee_base
 
 extern crc16_t10dif_01
 extern crc16_t10dif_by4  ;; Optimized for SLM
+extern crc16_t10dif_02
 extern crc16_t10dif_base
 
+extern crc32_gzip_refl_by8
+extern crc32_gzip_refl_by8_02
+extern crc32_gzip_refl_base
+
+extern crc16_t10dif_copy_by4
+extern crc16_t10dif_copy_by4_02
+extern crc16_t10dif_copy_base
+
+%if (AS_FEATURE_LEVEL) >= 10
+extern crc32_gzip_refl_by16_10
+extern crc32_ieee_by16_10
+extern crc16_t10dif_by16_10
+%endif
+
+%include "multibinary.asm"
+
 section .data
 ;;; *_mbinit are initial values for *_dispatched; is updated on first call.
 ;;; Therefore, *_dispatch_init is only executed on first call.
@@ -67,7 +79,7 @@ section .text
 ;;;;
 ; crc32_iscsi multibinary function
 ;;;;
-global crc32_iscsi:function
+global crc32_iscsi:ISAL_SYM_TYPE_FUNCTION
 crc32_iscsi_mbinit:
        call    crc32_iscsi_dispatch_init
 crc32_iscsi:
@@ -101,7 +113,7 @@ crc32_iscsi_dispatch_init:
 ;;;;
 ; crc32_ieee multibinary function
 ;;;;
-global crc32_ieee:function
+global crc32_ieee:ISAL_SYM_TYPE_FUNCTION
 crc32_ieee_mbinit:
        call    crc32_ieee_dispatch_init
 crc32_ieee:
@@ -113,22 +125,63 @@ crc32_ieee_dispatch_init:
        push    rcx
        push    rdx
        push    rsi
+       push    rdi
        lea     rsi, [crc32_ieee_base WRT_OPT] ; Default
 
        mov     eax, 1
        cpuid
-       lea     rbx, [crc32_ieee_01 WRT_OPT]
-       lea     rdx, [crc32_ieee_by4 WRT_OPT]
-
-       test    ecx, FLAG_CPUID1_ECX_SSE3
-       jz      use_ieee_base
+       mov     ebx, ecx ; save cpuid1.ecx
+       test    ecx, FLAG_CPUID1_ECX_SSE3
+       jz      .crc_ieee_init_done ; use ieee_base
        test    ecx, FLAG_CPUID1_ECX_CLMUL
-       cmovne  rsi, rbx
+       jz      .crc_ieee_init_done ; use ieee_base
+       lea     rsi, [crc32_ieee_01 WRT_OPT]
+
+       ;; Extra Avoton test
+       lea     rdx, [crc32_ieee_by4 WRT_OPT]
        and     eax, FLAG_CPUID1_EAX_STEP_MASK
        cmp     eax, FLAG_CPUID1_EAX_AVOTON
        cmove   rsi, rdx
-use_ieee_base:
+
+       ;; Test for XMM_YMM support/AVX
+       test    ecx, FLAG_CPUID1_ECX_OSXSAVE
+       je      .crc_ieee_init_done
+       xor     ecx, ecx
+       xgetbv  ; xcr -> edx:eax
+       mov     edi, eax          ; save xgetvb.eax
+
+       and     eax, FLAG_XGETBV_EAX_XMM_YMM
+       cmp     eax, FLAG_XGETBV_EAX_XMM_YMM
+       jne     .crc_ieee_init_done
+       test    ebx, FLAG_CPUID1_ECX_AVX
+       je      .crc_ieee_init_done
+       lea     rsi, [crc32_ieee_02 WRT_OPT] ; AVX/02 opt
+
+%if AS_FEATURE_LEVEL >= 10
+       ;; Test for AVX2
+       xor     ecx, ecx
+       mov     eax, 7
+       cpuid
+       test    ebx, FLAG_CPUID7_EBX_AVX2
+       je      .crc_ieee_init_done             ; No AVX2 possible
+
+       ;; Test for AVX512
+       and     edi, FLAG_XGETBV_EAX_ZMM_OPM
+       cmp     edi, FLAG_XGETBV_EAX_ZMM_OPM
+       jne     .crc_ieee_init_done       ; No AVX512 possible
+       and     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+       cmp     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+       jne     .crc_ieee_init_done
+
+       and     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+       cmp     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+       lea     rbx, [crc32_ieee_by16_10 WRT_OPT] ; AVX512/10 opt
+       cmove   rsi, rbx
+%endif
+
+.crc_ieee_init_done:
        mov     [crc32_ieee_dispatched], rsi
+       pop     rdi
        pop     rsi
        pop     rdx
        pop     rcx
@@ -139,7 +192,7 @@ use_ieee_base:
 ;;;;
 ; crc16_t10dif multibinary function
 ;;;;
-global crc16_t10dif:function
+global crc16_t10dif:ISAL_SYM_TYPE_FUNCTION
 crc16_t10dif_mbinit:
        call    crc16_t10dif_dispatch_init
 crc16_t10dif:
@@ -151,22 +204,63 @@ crc16_t10dif_dispatch_init:
        push    rcx
        push    rdx
        push    rsi
+       push    rdi
        lea     rsi, [crc16_t10dif_base WRT_OPT] ; Default
 
        mov     eax, 1
        cpuid
-       lea     rbx, [crc16_t10dif_01 WRT_OPT]
-       lea     rdx, [crc16_t10dif_by4 WRT_OPT]
-
+       mov     ebx, ecx ; save cpuid1.ecx
        test    ecx, FLAG_CPUID1_ECX_SSE3
-       jz      use_t10dif_base
+       jz      .t10dif_init_done ; use t10dif_base
        test    ecx, FLAG_CPUID1_ECX_CLMUL
-       cmovne  rsi, rbx
+       jz      .t10dif_init_done ; use t10dif_base
+       lea     rsi, [crc16_t10dif_01 WRT_OPT]
+
+       ;; Extra Avoton test
+       lea     rdx, [crc16_t10dif_by4 WRT_OPT]
        and     eax, FLAG_CPUID1_EAX_STEP_MASK
        cmp     eax, FLAG_CPUID1_EAX_AVOTON
        cmove   rsi, rdx
-use_t10dif_base:
+
+       ;; Test for XMM_YMM support/AVX
+       test    ecx, FLAG_CPUID1_ECX_OSXSAVE
+       je      .t10dif_init_done
+       xor     ecx, ecx
+       xgetbv  ; xcr -> edx:eax
+       mov     edi, eax          ; save xgetvb.eax
+
+       and     eax, FLAG_XGETBV_EAX_XMM_YMM
+       cmp     eax, FLAG_XGETBV_EAX_XMM_YMM
+       jne     .t10dif_init_done
+       test    ebx, FLAG_CPUID1_ECX_AVX
+       je      .t10dif_init_done
+       lea     rsi, [crc16_t10dif_02 WRT_OPT] ; AVX/02 opt
+
+%if AS_FEATURE_LEVEL >= 10
+       ;; Test for AVX2
+       xor     ecx, ecx
+       mov     eax, 7
+       cpuid
+       test    ebx, FLAG_CPUID7_EBX_AVX2
+       je      .t10dif_init_done               ; No AVX2 possible
+
+       ;; Test for AVX512
+       and     edi, FLAG_XGETBV_EAX_ZMM_OPM
+       cmp     edi, FLAG_XGETBV_EAX_ZMM_OPM
+       jne     .t10dif_init_done         ; No AVX512 possible
+       and     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+       cmp     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+       jne     .t10dif_init_done
+
+       and     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+       cmp     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+       lea     rbx, [crc16_t10dif_by16_10 WRT_OPT] ; AVX512/10 opt
+       cmove   rsi, rbx
+%endif
+
+.t10dif_init_done:
        mov     [crc16_t10dif_dispatched], rsi
+       pop     rdi
        pop     rsi
        pop     rdx
        pop     rcx
@@ -174,7 +268,14 @@ use_t10dif_base:
        pop     rax
        ret
 
+mbin_interface                 crc32_gzip_refl
+mbin_dispatch_init_clmul       crc32_gzip_refl, crc32_gzip_refl_base, crc32_gzip_refl_by8, crc32_gzip_refl_by8_02, crc32_gzip_refl_by16_10
+
+mbin_interface                 crc16_t10dif_copy
+mbin_dispatch_init_clmul       crc16_t10dif_copy, crc16_t10dif_copy_base, crc16_t10dif_copy_by4, crc16_t10dif_copy_by4_02, crc16_t10dif_copy_by4_02
+
 ;;;       func                 core, ver, snum
 slversion crc16_t10dif,                00,   03,  011a
 slversion crc32_ieee,          00,   03,  011b
 slversion crc32_iscsi,         00,   03,  011c
+slversion crc32_gzip_refl,             00,   00,  002a
diff --git a/ceph/src/isa-l/crc/crc_ref.h b/ceph/src/isa-l/crc/crc_ref.h
new file mode 100644 (file)
index 0000000..e97a60b
--- /dev/null
@@ -0,0 +1,140 @@
+/**********************************************************************
+  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef _CRC_REF_H
+#define _CRC_REF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "crc.h"
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+#define MAX_ITER       8
+
+// iSCSI CRC reference function
+static inline unsigned int crc32_iscsi_ref(unsigned char *buffer, int len, unsigned int crc_init)
+{
+       uint64_t rem = crc_init;
+       int i, j;
+
+       uint32_t poly = 0x82F63B78;
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (buffer[i]);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1);
+               }
+       }
+       return rem;
+}
+
+// crc16_t10dif reference function, slow crc16 from the definition.
+static inline uint16_t crc16_t10dif_ref(uint16_t seed, uint8_t * buf, uint64_t len)
+{
+       size_t rem = seed;
+       unsigned int i, j;
+
+       uint16_t poly = 0x8bb7; // t10dif standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (buf[i] << 8);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = rem << 1;
+                       rem = (rem & 0x10000) ? rem ^ poly : rem;
+               }
+       }
+       return rem;
+}
+
+// crc16_t10dif reference function, slow crc16 from the definition.
+static inline uint16_t crc16_t10dif_copy_ref(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len)
+{
+       size_t rem = seed;
+       unsigned int i, j;
+
+       uint16_t poly = 0x8bb7; // t10dif standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (src[i] << 8);
+               dst[i] = src[i];
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = rem << 1;
+                       rem = (rem & 0x10000) ? rem ^ poly : rem;
+               }
+       }
+       return rem;
+}
+
+// crc32_ieee reference function, slow crc32 from the definition.
+static inline uint32_t crc32_ieee_ref(uint32_t seed, uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       unsigned int i, j;
+
+       uint32_t poly = 0x04C11DB7;     // IEEE standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ ((uint64_t) buf[i] << 24);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = rem << 1;
+                       rem = (rem & 0x100000000ULL) ? rem ^ poly : rem;
+               }
+       }
+       return ~rem;
+}
+
+// crc32_gzip_refl reference function, slow crc32 from the definition.
+// Please get difference details between crc32_gzip_ref and crc32_ieee
+// from crc.h.
+static inline uint32_t crc32_gzip_refl_ref(uint32_t seed, uint8_t * buf, uint64_t len)
+{
+       uint64_t rem = ~seed;
+       int i, j;
+
+       uint32_t poly = 0xEDB88320;     // IEEE standard
+
+       for (i = 0; i < len; i++) {
+               rem = rem ^ (buf[i]);
+               for (j = 0; j < MAX_ITER; j++) {
+                       rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1);
+               }
+       }
+       return ~rem;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index cac18f52fe338d97815f469633784d5e30e395e4..4799f874589c27bb927947f1e377694b6e4f5c58 100644 (file)
@@ -26,6 +26,7 @@
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
+
 #include <stdio.h>
 #include <stdint.h>
 #include "crc.h"
index 054dd7353fa0437b463240fa2316e4a9fcc16457..12a31852b49c3a78484c4bc2be26b26e726c96cb 100644 (file)
@@ -1,8 +1,8 @@
 ########################################################################
-#  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+#  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions 
+#  modification, are permitted provided that the following conditions
 #  are met:
 #    * Redistributions of source code must retain the above copyright
 #      notice, this list of conditions and the following disclaimer.
 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ########################################################################
 
+include erasure_code/aarch64/Makefile.am
+
+include erasure_code/ppc64le/Makefile.am
+
 lsrc         += erasure_code/ec_base.c
 
 lsrc_base_aliases += erasure_code/ec_base_aliases.c
-
 lsrc_x86_64  += \
                erasure_code/ec_highlevel_func.c \
                erasure_code/gf_vect_mul_sse.asm \
@@ -79,10 +82,14 @@ lsrc_x86_64  += \
                erasure_code/gf_2vect_dot_prod_avx512.asm \
                erasure_code/gf_3vect_dot_prod_avx512.asm \
                erasure_code/gf_4vect_dot_prod_avx512.asm \
+               erasure_code/gf_5vect_dot_prod_avx512.asm \
+               erasure_code/gf_6vect_dot_prod_avx512.asm \
                erasure_code/gf_vect_mad_avx512.asm \
                erasure_code/gf_2vect_mad_avx512.asm \
                erasure_code/gf_3vect_mad_avx512.asm \
-               erasure_code/gf_4vect_mad_avx512.asm
+               erasure_code/gf_4vect_mad_avx512.asm \
+               erasure_code/gf_5vect_mad_avx512.asm \
+               erasure_code/gf_6vect_mad_avx512.asm
 
 lsrc_x86_32  += \
                erasure_code/ec_highlevel_func.c \
@@ -102,28 +109,16 @@ lsrc_x86_32  += \
 
 unit_tests32 += erasure_code/erasure_code_base_test \
                erasure_code/erasure_code_test \
-               erasure_code/erasure_code_sse_test \
                erasure_code/gf_vect_mul_test \
                erasure_code/gf_vect_mul_base_test \
                erasure_code/gf_vect_dot_prod_base_test \
-               erasure_code/gf_vect_dot_prod_test \
-               erasure_code/gf_vect_dot_prod_avx_test \
-               erasure_code/gf_vect_dot_prod_sse_test \
-               erasure_code/gf_2vect_dot_prod_sse_test \
-               erasure_code/gf_3vect_dot_prod_sse_test \
-               erasure_code/gf_4vect_dot_prod_sse_test
+               erasure_code/gf_vect_dot_prod_test
 
 perf_tests32 += erasure_code/gf_vect_mul_perf \
                erasure_code/gf_vect_dot_prod_perf \
                erasure_code/erasure_code_perf \
                erasure_code/erasure_code_base_perf \
-               erasure_code/erasure_code_sse_perf \
-               erasure_code/gf_vect_dot_prod_1tbl \
-               erasure_code/gf_vect_dot_prod_avx_perf\
-               erasure_code/gf_vect_dot_prod_sse_perf\
-               erasure_code/gf_2vect_dot_prod_sse_perf \
-               erasure_code/gf_3vect_dot_prod_sse_perf \
-               erasure_code/gf_4vect_dot_prod_sse_perf
+               erasure_code/gf_vect_dot_prod_1tbl
 
 src_include += -I $(srcdir)/erasure_code
 extern_hdrs  += include/erasure_code.h \
@@ -138,39 +133,35 @@ check_tests  += erasure_code/gf_vect_mul_test \
                erasure_code/gf_inverse_test \
                erasure_code/erasure_code_update_test
 
-unit_tests   += erasure_code/gf_vect_mul_sse_test \
-               erasure_code/gf_vect_mul_avx_test \
+unit_tests   += \
                erasure_code/gf_vect_mul_base_test \
-               erasure_code/gf_vect_dot_prod_sse_test \
-               erasure_code/gf_vect_dot_prod_avx_test \
-               erasure_code/gf_2vect_dot_prod_sse_test \
-               erasure_code/gf_3vect_dot_prod_sse_test \
-               erasure_code/gf_4vect_dot_prod_sse_test \
-               erasure_code/gf_5vect_dot_prod_sse_test \
-               erasure_code/gf_6vect_dot_prod_sse_test \
                erasure_code/gf_vect_dot_prod_base_test \
                erasure_code/gf_vect_dot_prod_test \
                erasure_code/gf_vect_mad_test \
-               erasure_code/erasure_code_base_test \
-               erasure_code/erasure_code_sse_test
+               erasure_code/erasure_code_base_test
 
 perf_tests   += erasure_code/gf_vect_mul_perf \
-               erasure_code/gf_vect_mul_sse_perf \
-               erasure_code/gf_vect_mul_avx_perf \
-               erasure_code/gf_vect_dot_prod_sse_perf \
-               erasure_code/gf_vect_dot_prod_avx_perf \
-               erasure_code/gf_2vect_dot_prod_sse_perf \
-               erasure_code/gf_3vect_dot_prod_sse_perf \
-               erasure_code/gf_4vect_dot_prod_sse_perf \
-               erasure_code/gf_5vect_dot_prod_sse_perf \
-               erasure_code/gf_6vect_dot_prod_sse_perf \
                erasure_code/gf_vect_dot_prod_perf \
                erasure_code/gf_vect_dot_prod_1tbl \
-               erasure_code/gf_vect_mad_perf \
                erasure_code/erasure_code_perf \
                erasure_code/erasure_code_base_perf \
-               erasure_code/erasure_code_sse_perf \
                erasure_code/erasure_code_update_perf
 
+other_tests  += erasure_code/gen_rs_matrix_limits
+
+other_tests_x86_64 += \
+               erasure_code/gf_2vect_dot_prod_sse_test \
+               erasure_code/gf_3vect_dot_prod_sse_test \
+               erasure_code/gf_4vect_dot_prod_sse_test \
+               erasure_code/gf_5vect_dot_prod_sse_test \
+               erasure_code/gf_6vect_dot_prod_sse_test
+
+other_tests_x86_32 += \
+               erasure_code/gf_2vect_dot_prod_sse_test \
+               erasure_code/gf_3vect_dot_prod_sse_test \
+               erasure_code/gf_4vect_dot_prod_sse_test \
+               erasure_code/gf_5vect_dot_prod_sse_test \
+               erasure_code/gf_6vect_dot_prod_sse_test
+
 other_src    += include/test.h \
                include/types.h
diff --git a/ceph/src/isa-l/erasure_code/aarch64/Makefile.am b/ceph/src/isa-l/erasure_code/aarch64/Makefile.am
new file mode 100644 (file)
index 0000000..94bb5a1
--- /dev/null
@@ -0,0 +1,45 @@
+##################################################################
+#  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Huawei Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+lsrc_aarch64 += \
+               erasure_code/aarch64/ec_aarch64_highlevel_func.c \
+               erasure_code/aarch64/ec_aarch64_dispatcher.c \
+               erasure_code/aarch64/gf_vect_dot_prod_neon.S \
+               erasure_code/aarch64/gf_2vect_dot_prod_neon.S \
+               erasure_code/aarch64/gf_3vect_dot_prod_neon.S \
+               erasure_code/aarch64/gf_4vect_dot_prod_neon.S \
+               erasure_code/aarch64/gf_5vect_dot_prod_neon.S \
+               erasure_code/aarch64/gf_vect_mad_neon.S \
+               erasure_code/aarch64/gf_2vect_mad_neon.S \
+               erasure_code/aarch64/gf_3vect_mad_neon.S \
+               erasure_code/aarch64/gf_4vect_mad_neon.S \
+               erasure_code/aarch64/gf_5vect_mad_neon.S \
+               erasure_code/aarch64/gf_6vect_mad_neon.S \
+               erasure_code/aarch64/gf_vect_mul_neon.S \
+               erasure_code/aarch64/ec_multibinary_arm.S
diff --git a/ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_dispatcher.c b/ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_dispatcher.c
new file mode 100644 (file)
index 0000000..ba66347
--- /dev/null
@@ -0,0 +1,69 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include <aarch64_multibinary.h>
+
+DEFINE_INTERFACE_DISPATCHER(gf_vect_dot_prod)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(gf_vect_dot_prod_neon);
+       return PROVIDER_BASIC(gf_vect_dot_prod);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(gf_vect_mad)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(gf_vect_mad_neon);
+       return PROVIDER_BASIC(gf_vect_mad);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(ec_encode_data)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(ec_encode_data_neon);
+       return PROVIDER_BASIC(ec_encode_data);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(ec_encode_data_update)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(ec_encode_data_update_neon);
+       return PROVIDER_BASIC(ec_encode_data_update);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(gf_vect_mul)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(gf_vect_mul_neon);
+       return PROVIDER_BASIC(gf_vect_mul);
+
+}
diff --git a/ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_highlevel_func.c b/ceph/src/isa-l/erasure_code/aarch64/ec_aarch64_highlevel_func.c
new file mode 100644 (file)
index 0000000..dd23702
--- /dev/null
@@ -0,0 +1,127 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include "erasure_code.h"
+
+/*external function*/
+extern void gf_vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls,
+                                 unsigned char **src, unsigned char *dest);
+extern void gf_2vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls,
+                                  unsigned char **src, unsigned char **dest);
+extern void gf_3vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls,
+                                  unsigned char **src, unsigned char **dest);
+extern void gf_4vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls,
+                                  unsigned char **src, unsigned char **dest);
+extern void gf_5vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls,
+                                  unsigned char **src, unsigned char **dest);
+extern void gf_vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                            unsigned char *src, unsigned char *dest);
+extern void gf_2vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                             unsigned char *src, unsigned char **dest);
+extern void gf_3vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                             unsigned char *src, unsigned char **dest);
+extern void gf_4vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                             unsigned char *src, unsigned char **dest);
+extern void gf_5vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                             unsigned char *src, unsigned char **dest);
+extern void gf_6vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls,
+                             unsigned char *src, unsigned char **dest);
+
+void ec_encode_data_neon(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data,
+                        unsigned char **coding)
+{
+       if (len < 16) {
+               ec_encode_data_base(len, k, rows, g_tbls, data, coding);
+               return;
+       }
+
+       while (rows > 5) {
+               gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding);
+               g_tbls += 5 * k * 32;
+               coding += 5;
+               rows -= 5;
+       }
+       switch (rows) {
+       case 5:
+               gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_dot_prod_neon(len, k, g_tbls, data, coding);
+               break;
+       case 3:
+               gf_3vect_dot_prod_neon(len, k, g_tbls, data, coding);
+               break;
+       case 2:
+               gf_2vect_dot_prod_neon(len, k, g_tbls, data, coding);
+               break;
+       case 1:
+               gf_vect_dot_prod_neon(len, k, g_tbls, data, *coding);
+               break;
+       case 0:
+               break;
+       default:
+               break;
+       }
+}
+
+void ec_encode_data_update_neon(int len, int k, int rows, int vec_i, unsigned char *g_tbls,
+                               unsigned char *data, unsigned char **coding)
+{
+       if (len < 16) {
+               ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding);
+               return;
+       }
+       while (rows > 6) {
+               gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
+       }
+       switch (rows) {
+       case 6:
+               gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 5:
+               gf_5vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 3:
+               gf_3vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 2:
+               gf_2vect_mad_neon(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 1:
+               gf_vect_mad_neon(len, k, vec_i, g_tbls, data, *coding);
+               break;
+       case 0:
+               break;
+       }
+}
diff --git a/ceph/src/isa-l/erasure_code/aarch64/ec_multibinary_arm.S b/ceph/src/isa-l/erasure_code/aarch64/ec_multibinary_arm.S
new file mode 100644 (file)
index 0000000..0b75a49
--- /dev/null
@@ -0,0 +1,36 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include "aarch64_multibinary.h"
+
+mbin_interface ec_encode_data
+mbin_interface gf_vect_mul
+mbin_interface gf_vect_dot_prod
+mbin_interface gf_vect_mad
+mbin_interface ec_encode_data_update
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_2vect_dot_prod_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_2vect_dot_prod_neon.S
new file mode 100644 (file)
index 0000000..33a2850
--- /dev/null
@@ -0,0 +1,399 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+
+.global gf_2vect_dot_prod_neon
+.type gf_2vect_dot_prod_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_tbl          .req    x2
+x_src          .req    x3
+x_dest         .req    x4
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_vec_i                .req    x5
+x_ptr          .req    x6
+x_pos          .req    x7
+x_tmp          .req    x8
+x_tbl1         .req    x9
+x_tbl2         .req    x10
+x_dest1                .req    x11
+x_dest2                .req    x12
+
+/* vectors */
+v_gft1_lo      .req    v0
+v_gft1_hi      .req    v1
+v_gft2_lo      .req    v2
+v_gft2_hi      .req    v3
+q_gft1_lo      .req    q0
+q_gft1_hi      .req    q1
+q_gft2_lo      .req    q2
+q_gft2_hi      .req    q3
+
+v_mask0f       .req    v4
+q_mask0f       .req    q4
+
+v_tmp1_lo      .req    v5
+v_tmp1_hi      .req    v6
+v_tmp1         .req    v7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+v_data_4       .req    v12
+v_data_5       .req    v13
+v_data_6       .req    v14
+v_data_7       .req    v15
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+q_data_4       .req    q12
+q_data_5       .req    q13
+q_data_6       .req    q14
+q_data_7       .req    q15
+
+v_p1_0         .req    v16
+v_p1_1         .req    v17
+v_p1_2         .req    v18
+v_p1_3         .req    v19
+v_p1_4         .req    v20
+v_p1_5         .req    v21
+v_p1_6         .req    v22
+v_p1_7         .req    v23
+v_p2_0         .req    v24
+v_p2_1         .req    v25
+v_p2_2         .req    v26
+v_p2_3         .req    v27
+v_p2_4         .req    v28
+v_p2_5         .req    v29
+v_p2_6         .req    v30
+v_p2_7         .req    v31
+
+q_p1_0         .req    q16
+q_p1_1         .req    q17
+q_p1_2         .req    q18
+q_p1_3         .req    q19
+q_p1_4         .req    q20
+q_p1_5         .req    q21
+q_p1_6         .req    q22
+q_p1_7         .req    q23
+q_p2_0         .req    q24
+q_p2_1         .req    q25
+q_p2_2         .req    q26
+q_p2_3         .req    q27
+q_p2_4         .req    q28
+q_p2_5         .req    q29
+q_p2_6         .req    q30
+q_p2_7         .req    q31
+
+v_p1           .req    v_p1_0
+q_p1           .req    q_p1_0
+v_p2           .req    v_p2_0
+q_p2           .req    q_p2_0
+v_data         .req    v_p1_1
+q_data         .req    q_p1_1
+v_data_lo      .req    v_p1_2
+v_data_hi      .req    v_p1_3
+
+gf_2vect_dot_prod_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       mov     x_pos, #0
+       lsl     x_vec, x_vec, #3
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+
+.Lloop128_init:
+       /* less than 128 bytes, goto Lloop16_init */
+       cmp     x_len, #128
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_len, x_len, #128
+
+.Lloop128:
+       movi    v_p1_0.16b, #0
+       movi    v_p1_1.16b, #0
+       movi    v_p1_2.16b, #0
+       movi    v_p1_3.16b, #0
+       movi    v_p1_4.16b, #0
+       movi    v_p1_5.16b, #0
+       movi    v_p1_6.16b, #0
+       movi    v_p1_7.16b, #0
+
+       movi    v_p2_0.16b, #0
+       movi    v_p2_1.16b, #0
+       movi    v_p2_2.16b, #0
+       movi    v_p2_3.16b, #0
+       movi    v_p2_4.16b, #0
+       movi    v_p2_5.16b, #0
+       movi    v_p2_6.16b, #0
+       movi    v_p2_7.16b, #0
+
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl, x_vec, lsl #2
+       mov     x_vec_i, #0
+
+.Lloop128_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       add     x_ptr, x_ptr, x_pos
+
+       ldp     q_data_0, q_data_1, [x_ptr], #32
+       ldp     q_data_2, q_data_3, [x_ptr], #32
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+       ldp     q_data_4, q_data_5, [x_ptr], #32
+       ldp     q_data_6, q_data_7, [x_ptr], #32
+       prfm    pldl1strm, [x_ptr]
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1keep, [x_tbl2]
+
+       /* data_0 */
+       and     v_tmp1.16b, v_data_0.16b, v_mask0f.16b
+       ushr    v_data_0.16b, v_data_0.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_0.16b
+       eor     v_p1_0.16b, v_tmp1_lo.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_0.16b
+       eor     v_p2_0.16b, v_tmp1_lo.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_tmp1_hi.16b
+
+       /* data_1 */
+       and     v_tmp1.16b, v_data_1.16b, v_mask0f.16b
+       ushr    v_data_1.16b, v_data_1.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_1.16b
+       eor     v_p1_1.16b, v_tmp1_lo.16b, v_p1_1.16b
+       eor     v_p1_1.16b, v_p1_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_1.16b
+       eor     v_p2_1.16b, v_tmp1_lo.16b, v_p2_1.16b
+       eor     v_p2_1.16b, v_p2_1.16b, v_tmp1_hi.16b
+
+       /* data_2 */
+       and     v_tmp1.16b, v_data_2.16b, v_mask0f.16b
+       ushr    v_data_2.16b, v_data_2.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_2.16b
+       eor     v_p1_2.16b, v_tmp1_lo.16b, v_p1_2.16b
+       eor     v_p1_2.16b, v_p1_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_2.16b
+       eor     v_p2_2.16b, v_tmp1_lo.16b, v_p2_2.16b
+       eor     v_p2_2.16b, v_p2_2.16b, v_tmp1_hi.16b
+
+       /* data_3 */
+       and     v_tmp1.16b, v_data_3.16b, v_mask0f.16b
+       ushr    v_data_3.16b, v_data_3.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_3.16b
+       eor     v_p1_3.16b, v_tmp1_lo.16b, v_p1_3.16b
+       eor     v_p1_3.16b, v_p1_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_3.16b
+       eor     v_p2_3.16b, v_tmp1_lo.16b, v_p2_3.16b
+       eor     v_p2_3.16b, v_p2_3.16b, v_tmp1_hi.16b
+
+       /* data_4 */
+       and     v_tmp1.16b, v_data_4.16b, v_mask0f.16b
+       ushr    v_data_4.16b, v_data_4.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_4.16b
+       eor     v_p1_4.16b, v_tmp1_lo.16b, v_p1_4.16b
+       eor     v_p1_4.16b, v_p1_4.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_4.16b
+       eor     v_p2_4.16b, v_tmp1_lo.16b, v_p2_4.16b
+       eor     v_p2_4.16b, v_p2_4.16b, v_tmp1_hi.16b
+
+       /* data_5 */
+       and     v_tmp1.16b, v_data_5.16b, v_mask0f.16b
+       ushr    v_data_5.16b, v_data_5.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_5.16b
+       eor     v_p1_5.16b, v_tmp1_lo.16b, v_p1_5.16b
+       eor     v_p1_5.16b, v_p1_5.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_5.16b
+       eor     v_p2_5.16b, v_tmp1_lo.16b, v_p2_5.16b
+       eor     v_p2_5.16b, v_p2_5.16b, v_tmp1_hi.16b
+
+       /* data_6 */
+       and     v_tmp1.16b, v_data_6.16b, v_mask0f.16b
+       ushr    v_data_6.16b, v_data_6.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_6.16b
+       eor     v_p1_6.16b, v_tmp1_lo.16b, v_p1_6.16b
+       eor     v_p1_6.16b, v_p1_6.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_6.16b
+       eor     v_p2_6.16b, v_tmp1_lo.16b, v_p2_6.16b
+       eor     v_p2_6.16b, v_p2_6.16b, v_tmp1_hi.16b
+
+       /* data_7 */
+       and     v_tmp1.16b, v_data_7.16b, v_mask0f.16b
+       ushr    v_data_7.16b, v_data_7.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_7.16b
+       eor     v_p1_7.16b, v_tmp1_lo.16b, v_p1_7.16b
+       eor     v_p1_7.16b, v_p1_7.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_7.16b
+       eor     v_p2_7.16b, v_tmp1_lo.16b, v_p2_7.16b
+       eor     v_p2_7.16b, v_p2_7.16b, v_tmp1_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop128_vects
+
+.Lloop128_vects_end:
+       add     x_ptr, x_dest1, x_pos
+       stp     q_p1_0, q_p1_1, [x_ptr], #32
+       stp     q_p1_2, q_p1_3, [x_ptr], #32
+       stp     q_p1_4, q_p1_5, [x_ptr], #32
+       stp     q_p1_6, q_p1_7, [x_ptr]
+
+       add     x_ptr, x_dest2, x_pos
+       stp     q_p2_0, q_p2_1, [x_ptr], #32
+       stp     q_p2_2, q_p2_3, [x_ptr], #32
+       stp     q_p2_4, q_p2_5, [x_ptr], #32
+       stp     q_p2_6, q_p2_7, [x_ptr]
+
+       add     x_pos, x_pos, #128
+       cmp     x_pos, x_len
+       ble     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_len, x_len, #128
+       cmp     x_pos, x_len
+       beq     .return_pass
+
+.Lloop16_init:
+       sub     x_len, x_len, #16
+       cmp     x_pos, x_len
+       bgt     .lessthan16_init
+
+.Lloop16:
+       movi    v_p1.16b, #0
+       movi    v_p2.16b, #0
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl, x_vec, lsl #2
+       mov     x_vec_i, #0
+
+.Lloop16_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       ldr     q_data, [x_ptr, x_pos]
+       add     x_vec_i, x_vec_i, #8
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       eor     v_p1.16b, v_tmp1_lo.16b, v_p1.16b
+       eor     v_p1.16b, v_p1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       eor     v_p2.16b, v_tmp1_lo.16b, v_p2.16b
+       eor     v_p2.16b, v_p2.16b, v_tmp1_hi.16b
+
+       cmp     x_vec_i, x_vec
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q_p1, [x_dest1, x_pos]
+       str     q_p2, [x_dest2, x_pos]
+       add     x_pos, x_pos, #16
+       cmp     x_pos, x_len
+       ble     .Lloop16
+
+.Lloop16_end:
+       sub     x_tmp, x_pos, x_len
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16_init:
+       mov     x_pos, x_len
+       b       .Lloop16
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_2vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_2vect_mad_neon.S
new file mode 100644 (file)
index 0000000..92c19f5
--- /dev/null
@@ -0,0 +1,401 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_2vect_mad_neon
+.type gf_2vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x7
+x_dest2                .req    x8
+x_tmp          .req    x9
+x_tbl1         .req    x10
+x_tbl2         .req    x11
+x_const                .req    x12
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp_lo       .req    v1
+v_tmp_hi       .req    v2
+v_tmp          .req    v3
+q_tmp          .req    q3
+
+v_gft1_lo      .req    v4
+v_gft1_hi      .req    v5
+v_gft2_lo      .req    v6
+v_gft2_hi      .req    v7
+q_gft1_lo      .req    q4
+q_gft1_hi      .req    q5
+q_gft2_lo      .req    q6
+q_gft2_hi      .req    q7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+v_data_4       .req    v12
+v_data_5       .req    v13
+v_data_6       .req    v14
+v_data_7       .req    v15
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+q_data_4       .req    q12
+q_data_5       .req    q13
+q_data_6       .req    q14
+q_data_7       .req    q15
+
+v_data_0_lo    .req    v16
+v_data_1_lo    .req    v17
+v_data_2_lo    .req    v18
+v_data_3_lo    .req    v19
+v_data_4_lo    .req    v20
+v_data_5_lo    .req    v21
+v_data_6_lo    .req    v22
+v_data_7_lo    .req    v23
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+v_data_4_hi    .req    v_data_4
+v_data_5_hi    .req    v_data_5
+v_data_6_hi    .req    v_data_6
+v_data_7_hi    .req    v_data_7
+
+v_d0           .req    v24
+v_d1           .req    v25
+v_d2           .req    v26
+v_d3           .req    v27
+v_d4           .req    v28
+v_d5           .req    v29
+v_d6           .req    v30
+v_d7           .req    v31
+q_d0           .req    q24
+q_d1           .req    q25
+q_d2           .req    q26
+q_d3           .req    q27
+q_d4           .req    q28
+q_d5           .req    q29
+q_d6           .req    q30
+q_d7           .req    q31
+
+v_data         .req    v16
+q_data         .req    q16
+v_data_lo      .req    v17
+v_data_hi      .req    v18
+
+
+gf_2vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       lsl     x_vec, x_vec, #5
+       add     x_tbl1, x_tbl, x_vec_i
+       add     x_tbl2, x_tbl1, x_vec
+       add     x_src_end, x_src, x_len
+
+       ldr     x_dest1, [x_dest]
+       ldr     x_dest2, [x_dest, #8]
+       ldr     q_gft1_lo, [x_tbl1]
+       ldr     q_gft1_hi, [x_tbl1, #16]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+
+.Lloop128_init:
+       /* less than 128 bytes, goto Lloop16_init */
+       cmp     x_len, #128
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #128
+
+.Lloop128:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       ldr     q_data_4, [x_src, #16*4]
+       ldr     q_data_5, [x_src, #16*5]
+       ldr     q_data_6, [x_src, #16*6]
+       ldr     q_data_7, [x_src, #16*7]
+
+       ldr     q_d0, [x_dest1, #16*0]
+       ldr     q_d1, [x_dest1, #16*1]
+       ldr     q_d2, [x_dest1, #16*2]
+       ldr     q_d3, [x_dest1, #16*3]
+       ldr     q_d4, [x_dest1, #16*4]
+       ldr     q_d5, [x_dest1, #16*5]
+       ldr     q_d6, [x_dest1, #16*6]
+       ldr     q_d7, [x_dest1, #16*7]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+       and     v_data_4_lo.16b, v_data_4.16b, v_mask0f.16b
+       and     v_data_5_lo.16b, v_data_5.16b, v_mask0f.16b
+       and     v_data_6_lo.16b, v_data_6.16b, v_mask0f.16b
+       and     v_data_7_lo.16b, v_data_7.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+       ushr    v_data_4_hi.16b, v_data_4.16b, #4
+       ushr    v_data_5_hi.16b, v_data_5.16b, #4
+       ushr    v_data_6_hi.16b, v_data_6.16b, #4
+       ushr    v_data_7_hi.16b, v_data_7.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       eor     v_d0.16b, v_tmp_lo.16b, v_d0.16b
+       eor     v_d0.16b, v_d0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_d1.16b, v_tmp_lo.16b, v_d1.16b
+       eor     v_d1.16b, v_d1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       eor     v_d2.16b, v_tmp_lo.16b, v_d2.16b
+       eor     v_d2.16b, v_d2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       eor     v_d3.16b, v_tmp_lo.16b, v_d3.16b
+       eor     v_d3.16b, v_d3.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_4_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_4_hi.16b
+       eor     v_d4.16b, v_tmp_lo.16b, v_d4.16b
+       eor     v_d4.16b, v_d4.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_5_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_5_hi.16b
+       eor     v_d5.16b, v_tmp_lo.16b, v_d5.16b
+       eor     v_d5.16b, v_d5.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_6_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_6_hi.16b
+       eor     v_d6.16b, v_tmp_lo.16b, v_d6.16b
+       eor     v_d6.16b, v_d6.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_7_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_7_hi.16b
+       eor     v_d7.16b, v_tmp_lo.16b, v_d7.16b
+       eor     v_d7.16b, v_d7.16b, v_tmp_hi.16b
+
+       str     q_d0, [x_dest1, #16*0]
+       str     q_d1, [x_dest1, #16*1]
+       str     q_d2, [x_dest1, #16*2]
+       str     q_d3, [x_dest1, #16*3]
+       str     q_d4, [x_dest1, #16*4]
+       str     q_d5, [x_dest1, #16*5]
+       str     q_d6, [x_dest1, #16*6]
+       str     q_d7, [x_dest1, #16*7]
+
+       ldr     q_d0, [x_dest2, #16*0]
+       ldr     q_d1, [x_dest2, #16*1]
+       ldr     q_d2, [x_dest2, #16*2]
+       ldr     q_d3, [x_dest2, #16*3]
+       ldr     q_d4, [x_dest2, #16*4]
+       ldr     q_d5, [x_dest2, #16*5]
+       ldr     q_d6, [x_dest2, #16*6]
+       ldr     q_d7, [x_dest2, #16*7]
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_0_hi.16b
+       eor     v_d0.16b, v_tmp_lo.16b, v_d0.16b
+       eor     v_d0.16b, v_d0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_1_hi.16b
+       eor     v_d1.16b, v_tmp_lo.16b, v_d1.16b
+       eor     v_d1.16b, v_d1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_2_hi.16b
+       eor     v_d2.16b, v_tmp_lo.16b, v_d2.16b
+       eor     v_d2.16b, v_d2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_3_hi.16b
+       eor     v_d3.16b, v_tmp_lo.16b, v_d3.16b
+       eor     v_d3.16b, v_d3.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_4_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_4_hi.16b
+       eor     v_d4.16b, v_tmp_lo.16b, v_d4.16b
+       eor     v_d4.16b, v_d4.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_5_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_5_hi.16b
+       eor     v_d5.16b, v_tmp_lo.16b, v_d5.16b
+       eor     v_d5.16b, v_d5.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_6_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_6_hi.16b
+       eor     v_d6.16b, v_tmp_lo.16b, v_d6.16b
+       eor     v_d6.16b, v_d6.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_7_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_7_hi.16b
+       eor     v_d7.16b, v_tmp_lo.16b, v_d7.16b
+       eor     v_d7.16b, v_d7.16b, v_tmp_hi.16b
+
+       str     q_d0, [x_dest2, #16*0]
+       str     q_d1, [x_dest2, #16*1]
+       str     q_d2, [x_dest2, #16*2]
+       str     q_d3, [x_dest2, #16*3]
+       str     q_d4, [x_dest2, #16*4]
+       str     q_d5, [x_dest2, #16*5]
+       str     q_d6, [x_dest2, #16*6]
+       str     q_d7, [x_dest2, #16*7]
+
+       add     x_src, x_src, #128
+       add     x_dest1, x_dest1, #128
+       add     x_dest2, x_dest2, #128
+       cmp     x_src, x_src_end
+       bls     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #128
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+
+       ldr     q_d0, [x_dest1]
+       ldr     q_d1, [x_dest2]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d0.16b, v_tmp_lo.16b, v_d0.16b
+       eor     v_d0.16b, v_d0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_d1.16b, v_tmp_lo.16b, v_d1.16b
+       eor     v_d1.16b, v_d1.16b, v_tmp_hi.16b
+
+       str     q_d0, [x_dest1]
+       str     q_d1, [x_dest2]
+
+       add     x_dest1, x_dest1, #16
+       add     x_dest2, x_dest2, #16
+       add     x_src, x_src, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+       sub     x_dest2, x_dest2, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d0, [x_dest1]
+       ldr     q_d1, [x_dest2]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d0.16b, v_d0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d1.16b, v_d1.16b, v_tmp_hi.16b
+
+       str     q_d0, [x_dest1]
+       str     q_d1, [x_dest2]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_3vect_dot_prod_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_3vect_dot_prod_neon.S
new file mode 100644 (file)
index 0000000..becca90
--- /dev/null
@@ -0,0 +1,358 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+
+.global gf_3vect_dot_prod_neon
+.type gf_3vect_dot_prod_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_tbl          .req    x2
+x_src          .req    x3
+x_dest         .req    x4
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_vec_i                .req    x5
+x_ptr          .req    x6
+x_pos          .req    x7
+x_tmp          .req    x8
+x_dest1                .req    x9
+x_tbl1         .req    x10
+x_dest2                .req    x11
+x_tbl2         .req    x12
+x_dest3                .req    x13
+x_tbl3         .req    x14
+
+/* vectors */
+v_gft1_lo      .req    v0
+v_gft1_hi      .req    v1
+v_gft2_lo      .req    v2
+v_gft2_hi      .req    v3
+v_gft3_lo      .req    v4
+v_gft3_hi      .req    v5
+q_gft1_lo      .req    q0
+q_gft1_hi      .req    q1
+q_gft2_lo      .req    q2
+q_gft2_hi      .req    q3
+q_gft3_lo      .req    q4
+q_gft3_hi      .req    q5
+
+v_mask0f       .req    v6
+q_mask0f       .req    q6
+v_tmp1         .req    v7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_tmp1_lo      .req    v12
+v_tmp1_hi      .req    v13
+
+v_p1_0         .req    v20
+v_p1_1         .req    v21
+v_p1_2         .req    v22
+v_p1_3         .req    v23
+v_p2_0         .req    v24
+v_p2_1         .req    v25
+v_p2_2         .req    v26
+v_p2_3         .req    v27
+v_p3_0         .req    v28
+v_p3_1         .req    v29
+v_p3_2         .req    v30
+v_p3_3         .req    v31
+
+q_p1_0         .req    q20
+q_p1_1         .req    q21
+q_p1_2         .req    q22
+q_p1_3         .req    q23
+q_p2_0         .req    q24
+q_p2_1         .req    q25
+q_p2_2         .req    q26
+q_p2_3         .req    q27
+q_p3_0         .req    q28
+q_p3_1         .req    q29
+q_p3_2         .req    q30
+q_p3_3         .req    q31
+
+v_data         .req    v_p1_1
+q_data         .req    q_p1_1
+v_data_lo      .req    v_p1_2
+v_data_hi      .req    v_p1_3
+
+
+gf_3vect_dot_prod_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       mov     x_pos, #0
+       lsl     x_vec, x_vec, #3
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_len, x_len, #64
+
+.Lloop64:
+       movi    v_p1_0.16b, #0
+       movi    v_p1_1.16b, #0
+       movi    v_p1_2.16b, #0
+       movi    v_p1_3.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p2_1.16b, #0
+       movi    v_p2_2.16b, #0
+       movi    v_p2_3.16b, #0
+       movi    v_p3_0.16b, #0
+       movi    v_p3_1.16b, #0
+       movi    v_p3_2.16b, #0
+       movi    v_p3_3.16b, #0
+
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl1, x_vec, lsl #2
+       add     x_tbl3, x_tbl2, x_vec, lsl #2
+       mov     x_vec_i, #0
+
+.Lloop64_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       add     x_ptr, x_ptr, x_pos
+
+       ldr     q_data_0, [x_ptr], #16
+       ldr     q_data_1, [x_ptr], #16
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+       ldp     q_gft3_lo, q_gft3_hi, [x_tbl3], #32
+
+       ldr     q_data_2, [x_ptr], #16
+       ldr     q_data_3, [x_ptr], #16
+       prfm    pldl1strm, [x_ptr]
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1keep, [x_tbl2]
+       prfm    pldl1keep, [x_tbl3]
+
+       /* data_0 */
+       and     v_tmp1.16b, v_data_0.16b, v_mask0f.16b
+       ushr    v_data_0.16b, v_data_0.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_0.16b
+       eor     v_p1_0.16b, v_tmp1_lo.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_0.16b
+       eor     v_p2_0.16b, v_tmp1_lo.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_0.16b
+       eor     v_p3_0.16b, v_tmp1_lo.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_tmp1_hi.16b
+
+       /* data_1 */
+       and     v_tmp1.16b, v_data_1.16b, v_mask0f.16b
+       ushr    v_data_1.16b, v_data_1.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_1.16b
+       eor     v_p1_1.16b, v_tmp1_lo.16b, v_p1_1.16b
+       eor     v_p1_1.16b, v_p1_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_1.16b
+       eor     v_p2_1.16b, v_tmp1_lo.16b, v_p2_1.16b
+       eor     v_p2_1.16b, v_p2_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_1.16b
+       eor     v_p3_1.16b, v_tmp1_lo.16b, v_p3_1.16b
+       eor     v_p3_1.16b, v_p3_1.16b, v_tmp1_hi.16b
+
+       /* data_2 */
+       and     v_tmp1.16b, v_data_2.16b, v_mask0f.16b
+       ushr    v_data_2.16b, v_data_2.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_2.16b
+       eor     v_p1_2.16b, v_tmp1_lo.16b, v_p1_2.16b
+       eor     v_p1_2.16b, v_p1_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_2.16b
+       eor     v_p2_2.16b, v_tmp1_lo.16b, v_p2_2.16b
+       eor     v_p2_2.16b, v_p2_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_2.16b
+       eor     v_p3_2.16b, v_tmp1_lo.16b, v_p3_2.16b
+       eor     v_p3_2.16b, v_p3_2.16b, v_tmp1_hi.16b
+
+       /* data_3 */
+       and     v_tmp1.16b, v_data_3.16b, v_mask0f.16b
+       ushr    v_data_3.16b, v_data_3.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_3.16b
+       eor     v_p1_3.16b, v_tmp1_lo.16b, v_p1_3.16b
+       eor     v_p1_3.16b, v_p1_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_3.16b
+       eor     v_p2_3.16b, v_tmp1_lo.16b, v_p2_3.16b
+       eor     v_p2_3.16b, v_p2_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_3.16b
+       eor     v_p3_3.16b, v_tmp1_lo.16b, v_p3_3.16b
+       eor     v_p3_3.16b, v_p3_3.16b, v_tmp1_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop64_vects
+
+.Lloop64_vects_end:
+       add     x_ptr, x_dest1, x_pos
+       stp     q_p1_0, q_p1_1, [x_ptr], #32
+       stp     q_p1_2, q_p1_3, [x_ptr]
+
+       add     x_ptr, x_dest2, x_pos
+       stp     q_p2_0, q_p2_1, [x_ptr], #32
+       stp     q_p2_2, q_p2_3, [x_ptr]
+
+       add     x_ptr, x_dest3, x_pos
+       stp     q_p3_0, q_p3_1, [x_ptr], #32
+       stp     q_p3_2, q_p3_3, [x_ptr]
+
+       add     x_pos, x_pos, #64
+       cmp     x_pos, x_len
+       ble     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_len, x_len, #64
+       cmp     x_pos, x_len
+       beq     .return_pass
+
+.Lloop16_init:
+       sub     x_len, x_len, #16
+       cmp     x_pos, x_len
+       bgt     .lessthan16_init
+
+.Lloop16:
+       movi    v_p1_0.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p3_0.16b, #0
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl1, x_vec, lsl #2
+       add     x_tbl3, x_tbl2, x_vec, lsl #2
+       mov     x_vec_i, #0
+
+.Lloop16_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       ldr     q_data, [x_ptr, x_pos]
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+       ldp     q_gft3_lo, q_gft3_hi, [x_tbl3], #32
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_gft1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_gft1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       tbl     v_gft2_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_gft2_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       tbl     v_gft3_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_gft3_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+
+       eor     v_p1_0.16b, v_gft1_hi.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_gft1_lo.16b
+       eor     v_p2_0.16b, v_gft2_hi.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_gft2_lo.16b
+       eor     v_p3_0.16b, v_gft3_hi.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_gft3_lo.16b
+
+       cmp     x_vec_i, x_vec
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q_p1_0, [x_dest1, x_pos]
+       str     q_p2_0, [x_dest2, x_pos]
+       str     q_p3_0, [x_dest3, x_pos]
+       add     x_pos, x_pos, #16
+       cmp     x_pos, x_len
+       ble     .Lloop16
+
+.Lloop16_end:
+       sub     x_tmp, x_pos, x_len
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16_init:
+       mov     x_pos, x_len
+       b       .Lloop16
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_3vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_3vect_mad_neon.S
new file mode 100644 (file)
index 0000000..4a041e0
--- /dev/null
@@ -0,0 +1,381 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_3vect_mad_neon
+.type gf_3vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x7
+x_dest2                .req    x8
+x_dest3                .req    x_dest
+x_tmp          .req    x10
+x_tbl1         .req    x11
+x_tbl2         .req    x12
+x_tbl3         .req    x13
+x_const                .req    x14
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp_lo       .req    v1
+v_tmp_hi       .req    v2
+v_tmp          .req    v3
+q_tmp          .req    q3
+
+v_gft1_lo      .req    v4
+v_gft1_hi      .req    v5
+v_gft2_lo      .req    v6
+v_gft2_hi      .req    v7
+v_gft3_lo      .req    v16
+v_gft3_hi      .req    v17
+q_gft1_lo      .req    q4
+q_gft1_hi      .req    q5
+q_gft2_lo      .req    q6
+q_gft2_hi      .req    q7
+q_gft3_lo      .req    q16
+q_gft3_hi      .req    q17
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_data_0_lo    .req    v12
+v_data_1_lo    .req    v13
+v_data_2_lo    .req    v14
+v_data_3_lo    .req    v15
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+
+v_d1_0         .req    v20
+v_d1_1         .req    v21
+v_d1_2         .req    v22
+v_d1_3         .req    v23
+v_d2_0         .req    v24
+v_d2_1         .req    v25
+v_d2_2         .req    v26
+v_d2_3         .req    v27
+v_d3_0         .req    v28
+v_d3_1         .req    v29
+v_d3_2         .req    v30
+v_d3_3         .req    v31
+q_d1_0         .req    q20
+q_d1_1         .req    q21
+q_d1_2         .req    q22
+q_d1_3         .req    q23
+q_d2_0         .req    q24
+q_d2_1         .req    q25
+q_d2_2         .req    q26
+q_d2_3         .req    q27
+q_d3_0         .req    q28
+q_d3_1         .req    q29
+q_d3_2         .req    q30
+q_d3_3         .req    q31
+
+v_data         .req    v21
+q_data         .req    q21
+v_data_lo      .req    v22
+v_data_hi      .req    v23
+
+gf_3vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       lsl     x_vec, x_vec, #5
+       add     x_tbl1, x_tbl, x_vec_i
+       add     x_tbl2, x_tbl1, x_vec
+       add     x_tbl3, x_tbl2, x_vec
+       add     x_src_end, x_src, x_len
+       ldr     x_dest1, [x_dest]
+       ldr     x_dest2, [x_dest, #8]
+       ldr     x_dest3, [x_dest, #16]
+       ldr     q_gft1_lo, [x_tbl1]
+       ldr     q_gft1_hi, [x_tbl1, #16]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #64
+
+.Lloop64:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       add     x_src, x_src, #64
+
+       ldr     q_d1_0, [x_dest1, #16*0]
+       ldr     q_d1_1, [x_dest1, #16*1]
+       ldr     q_d1_2, [x_dest1, #16*2]
+       ldr     q_d1_3, [x_dest1, #16*3]
+
+       ldr     q_d2_0, [x_dest2, #16*0]
+       ldr     q_d2_1, [x_dest2, #16*1]
+       ldr     q_d2_2, [x_dest2, #16*2]
+       ldr     q_d2_3, [x_dest2, #16*3]
+
+       ldr     q_d3_0, [x_dest3, #16*0]
+       ldr     q_d3_1, [x_dest3, #16*1]
+       ldr     q_d3_2, [x_dest3, #16*2]
+       ldr     q_d3_3, [x_dest3, #16*3]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_d1_1.16b, v_tmp_lo.16b, v_d1_1.16b
+       eor     v_d1_1.16b, v_d1_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       eor     v_d1_2.16b, v_tmp_lo.16b, v_d1_2.16b
+       eor     v_d1_2.16b, v_d1_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       eor     v_d1_3.16b, v_tmp_lo.16b, v_d1_3.16b
+       eor     v_d1_3.16b, v_d1_3.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_0_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_1_hi.16b
+       eor     v_d2_1.16b, v_tmp_lo.16b, v_d2_1.16b
+       eor     v_d2_1.16b, v_d2_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_2_hi.16b
+       eor     v_d2_2.16b, v_tmp_lo.16b, v_d2_2.16b
+       eor     v_d2_2.16b, v_d2_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_3_hi.16b
+       eor     v_d2_3.16b, v_tmp_lo.16b, v_d2_3.16b
+       eor     v_d2_3.16b, v_d2_3.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_0_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_1_hi.16b
+       eor     v_d3_1.16b, v_tmp_lo.16b, v_d3_1.16b
+       eor     v_d3_1.16b, v_d3_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_2_hi.16b
+       eor     v_d3_2.16b, v_tmp_lo.16b, v_d3_2.16b
+       eor     v_d3_2.16b, v_d3_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_3_hi.16b
+       eor     v_d3_3.16b, v_tmp_lo.16b, v_d3_3.16b
+       eor     v_d3_3.16b, v_d3_3.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1, #16*0]
+       str     q_d1_1, [x_dest1, #16*1]
+       str     q_d1_2, [x_dest1, #16*2]
+       str     q_d1_3, [x_dest1, #16*3]
+       add     x_dest1, x_dest1, #64
+
+       str     q_d2_0, [x_dest2, #16*0]
+       str     q_d2_1, [x_dest2, #16*1]
+       str     q_d2_2, [x_dest2, #16*2]
+       str     q_d2_3, [x_dest2, #16*3]
+       add     x_dest2, x_dest2, #64
+
+       str     q_d3_0, [x_dest3, #16*0]
+       str     q_d3_1, [x_dest3, #16*1]
+       str     q_d3_2, [x_dest3, #16*2]
+       str     q_d3_3, [x_dest3, #16*3]
+       add     x_dest3, x_dest3, #64
+
+       cmp     x_src, x_src_end
+       bls     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #64
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+       add     x_src, x_src, #16
+       add     x_dest1, x_dest1, #16
+       add     x_dest2, x_dest2, #16
+       add     x_dest3, x_dest3, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+       sub     x_dest2, x_dest2, x_tmp
+       sub     x_dest3, x_dest3, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_4vect_dot_prod_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_4vect_dot_prod_neon.S
new file mode 100644 (file)
index 0000000..2cfe5aa
--- /dev/null
@@ -0,0 +1,421 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_4vect_dot_prod_neon
+.type gf_4vect_dot_prod_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_tbl          .req    x2
+x_src          .req    x3
+x_dest         .req    x4
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_vec_i                .req    x5
+x_ptr          .req    x6
+x_pos          .req    x7
+x_tmp          .req    x8
+x_dest1                .req    x9
+x_tbl1         .req    x10
+x_dest2                .req    x11
+x_tbl2         .req    x12
+x_dest3                .req    x13
+x_tbl3         .req    x14
+x_dest4                .req    x_dest
+x_tbl4         .req    x15
+
+/* vectors */
+v_mask0f       .req    v0
+q_mask0f       .req    q0
+v_tmp1_lo      .req    v1
+v_tmp1_hi      .req    v2
+v_tmp1         .req    v3
+q_tmp1         .req    q3
+
+v_p1_0         .req    v4
+v_p2_0         .req    v5
+v_p3_0         .req    v6
+v_p4_0         .req    v7
+
+q_p1_0         .req    q4
+q_p2_0         .req    q5
+q_p3_0         .req    q6
+q_p4_0         .req    q7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_p1_3         .req    v12
+v_p2_3         .req    v13
+v_p3_3         .req    v14
+v_p4_3         .req    v15
+q_p1_3         .req    q12
+q_p2_3         .req    q13
+q_p3_3         .req    q14
+q_p4_3         .req    q15
+
+v_gft1_lo      .req    v16
+v_gft1_hi      .req    v17
+v_gft2_lo      .req    v18
+v_gft2_hi      .req    v19
+v_gft3_lo      .req    v20
+v_gft3_hi      .req    v21
+v_gft4_lo      .req    v22
+v_gft4_hi      .req    v23
+q_gft1_lo      .req    q16
+q_gft1_hi      .req    q17
+q_gft2_lo      .req    q18
+q_gft2_hi      .req    q19
+q_gft3_lo      .req    q20
+q_gft3_hi      .req    q21
+q_gft4_lo      .req    q22
+q_gft4_hi      .req    q23
+
+v_p1_1         .req    v24
+v_p1_2         .req    v25
+v_p2_1         .req    v26
+v_p2_2         .req    v27
+v_p3_1         .req    v28
+v_p3_2         .req    v29
+v_p4_1         .req    v30
+v_p4_2         .req    v31
+
+q_p1_1         .req    q24
+q_p1_2         .req    q25
+q_p2_1         .req    q26
+q_p2_2         .req    q27
+q_p3_1         .req    q28
+q_p3_2         .req    q29
+q_p4_1         .req    q30
+q_p4_2         .req    q31
+
+v_data         .req    v_tmp1
+q_data         .req    q_tmp1
+v_data_lo      .req    v_tmp1_lo
+v_data_hi      .req    v_tmp1_hi
+
+gf_4vect_dot_prod_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       mov     x_pos, #0
+       lsl     x_vec, x_vec, #3
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+       ldr     x_dest4, [x_dest, #8*3]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_len, x_len, #64
+
+.Lloop64:
+       movi    v_p1_0.16b, #0
+       movi    v_p1_1.16b, #0
+       movi    v_p1_2.16b, #0
+       movi    v_p1_3.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p2_1.16b, #0
+       movi    v_p2_2.16b, #0
+       movi    v_p2_3.16b, #0
+       movi    v_p3_0.16b, #0
+       movi    v_p3_1.16b, #0
+       movi    v_p3_2.16b, #0
+       movi    v_p3_3.16b, #0
+       movi    v_p4_0.16b, #0
+       movi    v_p4_1.16b, #0
+       movi    v_p4_2.16b, #0
+       movi    v_p4_3.16b, #0
+
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl1, x_vec, lsl #2
+       add     x_tbl3, x_tbl2, x_vec, lsl #2
+       add     x_tbl4, x_tbl3, x_vec, lsl #2
+       mov     x_vec_i, #0
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1keep, [x_tbl2]
+       prfm    pldl1keep, [x_tbl3]
+       prfm    pldl1keep, [x_tbl4]
+
+.Lloop64_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       add     x_ptr, x_ptr, x_pos
+
+       ldr     q_data_0, [x_ptr], #16
+       ldr     q_data_1, [x_ptr], #16
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+       ldp     q_gft3_lo, q_gft3_hi, [x_tbl3], #32
+       ldp     q_gft4_lo, q_gft4_hi, [x_tbl4], #32
+       ldr     q_data_2, [x_ptr], #16
+       ldr     q_data_3, [x_ptr], #16
+
+       prfm    pldl1strm, [x_ptr]
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1keep, [x_tbl2]
+       prfm    pldl1keep, [x_tbl3]
+       prfm    pldl1keep, [x_tbl4]
+
+       /* data_0 */
+       and     v_tmp1.16b, v_data_0.16b, v_mask0f.16b
+       ushr    v_data_0.16b, v_data_0.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_0.16b
+       eor     v_p1_0.16b, v_tmp1_lo.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_0.16b
+       eor     v_p2_0.16b, v_tmp1_lo.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_0.16b
+       eor     v_p3_0.16b, v_tmp1_lo.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft4_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft4_hi.16b}, v_data_0.16b
+       eor     v_p4_0.16b, v_tmp1_lo.16b, v_p4_0.16b
+       eor     v_p4_0.16b, v_p4_0.16b, v_tmp1_hi.16b
+
+       /* data_1 */
+       and     v_tmp1.16b, v_data_1.16b, v_mask0f.16b
+       ushr    v_data_1.16b, v_data_1.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_1.16b
+       eor     v_p1_1.16b, v_tmp1_lo.16b, v_p1_1.16b
+       eor     v_p1_1.16b, v_p1_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_1.16b
+       eor     v_p2_1.16b, v_tmp1_lo.16b, v_p2_1.16b
+       eor     v_p2_1.16b, v_p2_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_1.16b
+       eor     v_p3_1.16b, v_tmp1_lo.16b, v_p3_1.16b
+       eor     v_p3_1.16b, v_p3_1.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft4_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft4_hi.16b}, v_data_1.16b
+       eor     v_p4_1.16b, v_tmp1_lo.16b, v_p4_1.16b
+       eor     v_p4_1.16b, v_p4_1.16b, v_tmp1_hi.16b
+
+       /* data_2 */
+       and     v_tmp1.16b, v_data_2.16b, v_mask0f.16b
+       ushr    v_data_2.16b, v_data_2.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_2.16b
+       eor     v_p1_2.16b, v_tmp1_lo.16b, v_p1_2.16b
+       eor     v_p1_2.16b, v_p1_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_2.16b
+       eor     v_p2_2.16b, v_tmp1_lo.16b, v_p2_2.16b
+       eor     v_p2_2.16b, v_p2_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_2.16b
+       eor     v_p3_2.16b, v_tmp1_lo.16b, v_p3_2.16b
+       eor     v_p3_2.16b, v_p3_2.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft4_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft4_hi.16b}, v_data_2.16b
+       eor     v_p4_2.16b, v_tmp1_lo.16b, v_p4_2.16b
+       eor     v_p4_2.16b, v_p4_2.16b, v_tmp1_hi.16b
+
+       /* data_3 */
+       and     v_tmp1.16b, v_data_3.16b, v_mask0f.16b
+       ushr    v_data_3.16b, v_data_3.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_3.16b
+       eor     v_p1_3.16b, v_tmp1_lo.16b, v_p1_3.16b
+       eor     v_p1_3.16b, v_p1_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft2_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft2_hi.16b}, v_data_3.16b
+       eor     v_p2_3.16b, v_tmp1_lo.16b, v_p2_3.16b
+       eor     v_p2_3.16b, v_p2_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft3_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft3_hi.16b}, v_data_3.16b
+       eor     v_p3_3.16b, v_tmp1_lo.16b, v_p3_3.16b
+       eor     v_p3_3.16b, v_p3_3.16b, v_tmp1_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft4_lo.16b}, v_tmp1.16b
+       tbl     v_tmp1_hi.16b, {v_gft4_hi.16b}, v_data_3.16b
+       eor     v_p4_3.16b, v_tmp1_lo.16b, v_p4_3.16b
+       eor     v_p4_3.16b, v_p4_3.16b, v_tmp1_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop64_vects
+
+.Lloop64_vects_end:
+       add     x_ptr, x_dest1, x_pos
+       stp     q_p1_0, q_p1_1, [x_ptr], #32
+       stp     q_p1_2, q_p1_3, [x_ptr]
+
+       add     x_ptr, x_dest2, x_pos
+       stp     q_p2_0, q_p2_1, [x_ptr], #32
+       stp     q_p2_2, q_p2_3, [x_ptr]
+
+       add     x_ptr, x_dest3, x_pos
+       stp     q_p3_0, q_p3_1, [x_ptr], #32
+       stp     q_p3_2, q_p3_3, [x_ptr]
+
+       add     x_ptr, x_dest4, x_pos
+       stp     q_p4_0, q_p4_1, [x_ptr], #32
+       stp     q_p4_2, q_p4_3, [x_ptr]
+
+       add     x_pos, x_pos, #64
+       cmp     x_pos, x_len
+       ble     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_len, x_len, #64
+       cmp     x_pos, x_len
+       beq     .return_pass
+
+.Lloop16_init:
+       sub     x_len, x_len, #16
+       cmp     x_pos, x_len
+       bgt     .lessthan16_init
+
+.Lloop16:
+       movi    v_p1_0.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p3_0.16b, #0
+       movi    v_p4_0.16b, #0
+       mov     x_tbl1, x_tbl
+       add     x_tbl2, x_tbl1, x_vec, lsl #2
+       add     x_tbl3, x_tbl2, x_vec, lsl #2
+       add     x_tbl4, x_tbl3, x_vec, lsl #2
+       mov     x_vec_i, #0
+
+.Lloop16_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       ldr     q_data, [x_ptr, x_pos]
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+       ldp     q_gft2_lo, q_gft2_hi, [x_tbl2], #32
+       ldp     q_gft3_lo, q_gft3_hi, [x_tbl3], #32
+       ldp     q_gft4_lo, q_gft4_hi, [x_tbl4], #32
+
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1keep, [x_tbl2]
+       prfm    pldl1keep, [x_tbl3]
+       prfm    pldl1keep, [x_tbl4]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_gft1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_gft1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       tbl     v_gft2_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_gft2_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       tbl     v_gft3_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_gft3_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       tbl     v_gft4_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_gft4_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+
+       eor     v_p1_0.16b, v_gft1_hi.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_gft1_lo.16b
+       eor     v_p2_0.16b, v_gft2_hi.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_gft2_lo.16b
+       eor     v_p3_0.16b, v_gft3_hi.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_gft3_lo.16b
+       eor     v_p4_0.16b, v_gft4_hi.16b, v_p4_0.16b
+       eor     v_p4_0.16b, v_p4_0.16b, v_gft4_lo.16b
+
+       cmp     x_vec_i, x_vec
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q_p1_0, [x_dest1, x_pos]
+       str     q_p2_0, [x_dest2, x_pos]
+       str     q_p3_0, [x_dest3, x_pos]
+       str     q_p4_0, [x_dest4, x_pos]
+       add     x_pos, x_pos, #16
+       cmp     x_pos, x_len
+       ble     .Lloop16
+
+.Lloop16_end:
+       sub     x_tmp, x_pos, x_len
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16_init:
+       mov     x_pos, x_len
+       b       .Lloop16
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_4vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_4vect_mad_neon.S
new file mode 100644 (file)
index 0000000..d56cece
--- /dev/null
@@ -0,0 +1,455 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+
+.global gf_4vect_mad_neon
+.type gf_4vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x7
+x_dest2                .req    x8
+x_dest3                .req    x9
+x_dest4                .req    x_dest
+x_tmp          .req    x10
+x_tbl1         .req    x11
+x_tbl2         .req    x12
+x_tbl3         .req    x13
+x_tbl4         .req    x14
+x_const                .req    x15
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp_lo       .req    v1
+v_tmp_hi       .req    v2
+v_tmp          .req    v3
+q_tmp          .req    q3
+
+v_gft1_lo      .req    v4
+v_gft1_hi      .req    v5
+v_gft2_lo      .req    v6
+v_gft2_hi      .req    v7
+v_gft3_lo      .req    v16
+v_gft3_hi      .req    v17
+v_gft4_lo      .req    v18
+v_gft4_hi      .req    v19
+q_gft1_lo      .req    q4
+q_gft1_hi      .req    q5
+q_gft2_lo      .req    q6
+q_gft2_hi      .req    q7
+q_gft3_lo      .req    q16
+q_gft3_hi      .req    q17
+q_gft4_lo      .req    q18
+q_gft4_hi      .req    q19
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_data_0_lo    .req    v12
+v_data_1_lo    .req    v13
+v_data_2_lo    .req    v14
+v_data_3_lo    .req    v15
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+
+v_d1_0         .req    v20
+v_d1_1         .req    v21
+v_d1_2         .req    v22
+v_d1_3         .req    v23
+v_d2_0         .req    v24
+v_d2_1         .req    v25
+v_d2_2         .req    v26
+v_d2_3         .req    v27
+v_d3_0         .req    v28
+v_d3_1         .req    v29
+v_d3_2         .req    v30
+v_d3_3         .req    v31
+q_d1_0         .req    q20
+q_d1_1         .req    q21
+q_d1_2         .req    q22
+q_d1_3         .req    q23
+q_d2_0         .req    q24
+q_d2_1         .req    q25
+q_d2_2         .req    q26
+q_d2_3         .req    q27
+q_d3_0         .req    q28
+q_d3_1         .req    q29
+q_d3_2         .req    q30
+q_d3_3         .req    q31
+
+v_d4_0         .req    v_d1_0
+v_d4_1         .req    v_d1_1
+v_d4_2         .req    v_d1_2
+v_d4_3         .req    v_d1_3
+q_d4_0         .req    q_d1_0
+q_d4_1         .req    q_d1_1
+q_d4_2         .req    q_d1_2
+q_d4_3         .req    q_d1_3
+
+v_data         .req    v21
+q_data         .req    q21
+v_data_lo      .req    v22
+v_data_hi      .req    v23
+
+gf_4vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       lsl     x_vec, x_vec, #5
+       add     x_tbl1, x_tbl, x_vec_i
+       add     x_tbl2, x_tbl1, x_vec
+       add     x_tbl3, x_tbl2, x_vec
+       add     x_tbl4, x_tbl3, x_vec
+       add     x_src_end, x_src, x_len
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+       ldr     x_dest4, [x_dest, #8*3]
+       ldr     q_gft1_lo, [x_tbl1]
+       ldr     q_gft1_hi, [x_tbl1, #16]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+       ldr     q_gft4_lo, [x_tbl4]
+       ldr     q_gft4_hi, [x_tbl4, #16]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #64
+
+.Lloop64:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       add     x_src, x_src, #64
+
+       ldr     q_d1_0, [x_dest1, #16*0]
+       ldr     q_d1_1, [x_dest1, #16*1]
+       ldr     q_d1_2, [x_dest1, #16*2]
+       ldr     q_d1_3, [x_dest1, #16*3]
+
+       ldr     q_d2_0, [x_dest2, #16*0]
+       ldr     q_d2_1, [x_dest2, #16*1]
+       ldr     q_d2_2, [x_dest2, #16*2]
+       ldr     q_d2_3, [x_dest2, #16*3]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+
+       /* dest1 */
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_d1_1.16b, v_tmp_lo.16b, v_d1_1.16b
+       eor     v_d1_1.16b, v_d1_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       eor     v_d1_2.16b, v_tmp_lo.16b, v_d1_2.16b
+       eor     v_d1_2.16b, v_d1_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       eor     v_d1_3.16b, v_tmp_lo.16b, v_d1_3.16b
+       eor     v_d1_3.16b, v_d1_3.16b, v_tmp_hi.16b
+
+       /* dest2 */
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_0_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_1_hi.16b
+       eor     v_d2_1.16b, v_tmp_lo.16b, v_d2_1.16b
+       eor     v_d2_1.16b, v_d2_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_2_hi.16b
+       eor     v_d2_2.16b, v_tmp_lo.16b, v_d2_2.16b
+       eor     v_d2_2.16b, v_d2_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_3_hi.16b
+       eor     v_d2_3.16b, v_tmp_lo.16b, v_d2_3.16b
+       eor     v_d2_3.16b, v_d2_3.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1, #16*0]
+       str     q_d1_1, [x_dest1, #16*1]
+       str     q_d1_2, [x_dest1, #16*2]
+       str     q_d1_3, [x_dest1, #16*3]
+       add     x_dest1, x_dest1, #64
+
+       str     q_d2_0, [x_dest2, #16*0]
+       str     q_d2_1, [x_dest2, #16*1]
+       str     q_d2_2, [x_dest2, #16*2]
+       str     q_d2_3, [x_dest2, #16*3]
+       add     x_dest2, x_dest2, #64
+
+       ldr     q_d3_0, [x_dest3, #16*0]
+       ldr     q_d3_1, [x_dest3, #16*1]
+       ldr     q_d3_2, [x_dest3, #16*2]
+       ldr     q_d3_3, [x_dest3, #16*3]
+
+       ldr     q_d4_0, [x_dest4, #16*0]
+       ldr     q_d4_1, [x_dest4, #16*1]
+       ldr     q_d4_2, [x_dest4, #16*2]
+       ldr     q_d4_3, [x_dest4, #16*3]
+
+       /* dest3 */
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_0_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_1_hi.16b
+       eor     v_d3_1.16b, v_tmp_lo.16b, v_d3_1.16b
+       eor     v_d3_1.16b, v_d3_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_2_hi.16b
+       eor     v_d3_2.16b, v_tmp_lo.16b, v_d3_2.16b
+       eor     v_d3_2.16b, v_d3_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_3_hi.16b
+       eor     v_d3_3.16b, v_tmp_lo.16b, v_d3_3.16b
+       eor     v_d3_3.16b, v_d3_3.16b, v_tmp_hi.16b
+
+       /* dest4 */
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_0_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_1_hi.16b
+       eor     v_d4_1.16b, v_tmp_lo.16b, v_d4_1.16b
+       eor     v_d4_1.16b, v_d4_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_2_hi.16b
+       eor     v_d4_2.16b, v_tmp_lo.16b, v_d4_2.16b
+       eor     v_d4_2.16b, v_d4_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_3_hi.16b
+       eor     v_d4_3.16b, v_tmp_lo.16b, v_d4_3.16b
+       eor     v_d4_3.16b, v_d4_3.16b, v_tmp_hi.16b
+
+       str     q_d3_0, [x_dest3, #16*0]
+       str     q_d3_1, [x_dest3, #16*1]
+       str     q_d3_2, [x_dest3, #16*2]
+       str     q_d3_3, [x_dest3, #16*3]
+       add     x_dest3, x_dest3, #64
+
+       str     q_d4_0, [x_dest4, #16*0]
+       str     q_d4_1, [x_dest4, #16*1]
+       str     q_d4_2, [x_dest4, #16*2]
+       str     q_d4_3, [x_dest4, #16*3]
+       add     x_dest4, x_dest4, #64
+
+       cmp     x_src, x_src_end
+       bls     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #64
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_d4_0, [x_dest4]
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       str     q_d3_0, [x_dest3]
+       str     q_d4_0, [x_dest4]
+
+       add     x_src, x_src, #16
+       add     x_dest1, x_dest1, #16
+       add     x_dest2, x_dest2, #16
+       add     x_dest3, x_dest3, #16
+       add     x_dest4, x_dest4, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+       sub     x_dest2, x_dest2, x_tmp
+       sub     x_dest3, x_dest3, x_tmp
+       sub     x_dest4, x_dest4, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_d4_0, [x_dest4]
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       str     q_d3_0, [x_dest3]
+       str     q_d4_0, [x_dest4]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_5vect_dot_prod_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_5vect_dot_prod_neon.S
new file mode 100644 (file)
index 0000000..2e4dea4
--- /dev/null
@@ -0,0 +1,481 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+
+.global gf_5vect_dot_prod_neon
+.type gf_5vect_dot_prod_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_tbl          .req    x2
+x_src          .req    x3
+x_dest         .req    x4
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_vec_i                .req    x5
+x_ptr          .req    x6
+x_pos          .req    x7
+x_tmp          .req    x8
+x_dest1                .req    x9
+x_dest2                .req    x10
+x_dest3                .req    x11
+x_dest4                .req    x12
+x_dest5                .req    x13
+
+/* vectors */
+v_tmp1         .req    v0
+q_tmp1         .req    q0
+v_tmp2         .req    v1
+q_tmp2         .req    q1
+
+v_mask0f       .req    v_tmp1
+q_mask0f       .req    q_tmp1
+v_tmp_lo       .req    v_tmp1
+v_tmp_hi       .req    v_tmp2
+
+v_gft_lo       .req    v2
+v_gft_hi       .req    v3
+q_gft_lo       .req    q2
+q_gft_hi       .req    q3
+
+v_p1_0         .req    v4
+v_p2_0         .req    v5
+v_p3_0         .req    v6
+v_p4_0         .req    v7
+
+q_p1_0         .req    q4
+q_p2_0         .req    q5
+q_p3_0         .req    q6
+q_p4_0         .req    q7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_data_0_lo    .req    v12
+v_data_1_lo    .req    v13
+v_data_2_lo    .req    v14
+v_data_3_lo    .req    v15
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+
+v_p5_0         .req    v16
+v_p1_1         .req    v17
+v_p2_1         .req    v18
+v_p3_1         .req    v19
+v_p4_1         .req    v20
+v_p5_1         .req    v21
+v_p1_2         .req    v22
+v_p2_2         .req    v23
+v_p3_2         .req    v24
+v_p4_2         .req    v25
+v_p5_2         .req    v26
+v_p1_3         .req    v27
+v_p2_3         .req    v28
+v_p3_3         .req    v29
+v_p4_3         .req    v30
+v_p5_3         .req    v31
+
+q_p5_0         .req    q16
+q_p1_1         .req    q17
+q_p2_1         .req    q18
+q_p3_1         .req    q19
+q_p4_1         .req    q20
+q_p5_1         .req    q21
+q_p1_2         .req    q22
+q_p2_2         .req    q23
+q_p3_2         .req    q24
+q_p4_2         .req    q25
+q_p5_2         .req    q26
+q_p1_3         .req    q27
+q_p2_3         .req    q28
+q_p3_3         .req    q29
+q_p4_3         .req    q30
+q_p5_3         .req    q31
+
+v_data         .req    v_p1_1
+q_data         .req    q_p1_1
+v_data_lo      .req    v_p2_1
+v_data_hi      .req    v_p3_1
+
+v_gft1_lo      .req    v_p4_1
+v_gft1_hi      .req    v_p5_1
+v_gft2_lo      .req    v_p1_2
+v_gft2_hi      .req    v_p2_2
+v_gft3_lo      .req    v_p3_2
+v_gft3_hi      .req    v_p4_2
+v_gft4_lo      .req    v_p5_2
+v_gft4_hi      .req    v_p1_3
+v_gft5_lo      .req    v_p2_3
+v_gft5_hi      .req    v_p3_3
+q_gft1_lo      .req    q_p4_1
+q_gft1_hi      .req    q_p5_1
+q_gft2_lo      .req    q_p1_2
+q_gft2_hi      .req    q_p2_2
+q_gft3_lo      .req    q_p3_2
+q_gft3_hi      .req    q_p4_2
+q_gft4_lo      .req    q_p5_2
+q_gft4_hi      .req    q_p1_3
+q_gft5_lo      .req    q_p2_3
+q_gft5_hi      .req    q_p3_3
+
+
+gf_5vect_dot_prod_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       mov     x_pos, #0
+       lsl     x_vec, x_vec, #3
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+       ldr     x_dest4, [x_dest, #8*3]
+       ldr     x_dest5, [x_dest, #8*4]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_len, x_len, #64
+
+.Lloop64:
+       movi    v_p1_0.16b, #0
+       movi    v_p1_1.16b, #0
+       movi    v_p1_2.16b, #0
+       movi    v_p1_3.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p2_1.16b, #0
+       movi    v_p2_2.16b, #0
+       movi    v_p2_3.16b, #0
+       movi    v_p3_0.16b, #0
+       movi    v_p3_1.16b, #0
+       movi    v_p3_2.16b, #0
+       movi    v_p3_3.16b, #0
+       movi    v_p4_0.16b, #0
+       movi    v_p4_1.16b, #0
+       movi    v_p4_2.16b, #0
+       movi    v_p4_3.16b, #0
+       movi    v_p5_0.16b, #0
+       movi    v_p5_1.16b, #0
+       movi    v_p5_2.16b, #0
+       movi    v_p5_3.16b, #0
+       mov     x_vec_i, #0
+
+.Lloop64_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_ptr, x_ptr, x_pos
+
+       ldr     q_data_0, [x_ptr], #16
+       ldr     q_data_1, [x_ptr], #16
+       ldr     q_data_2, [x_ptr], #16
+       ldr     q_data_3, [x_ptr], #16
+       prfm    pldl2keep, [x_ptr]
+
+       movi    v_mask0f.16b, #0x0f
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+
+       /* v_p1_x */
+       add     x_tmp, x_tbl, x_vec_i, lsl #2
+       add     x_vec_i, x_vec_i, #8
+       ldp     q_gft_lo, q_gft_hi, [x_tmp]
+       prfm    pldl3keep, [x_tmp, #32]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_0_hi.16b
+       eor     v_p1_0.16b, v_tmp_lo.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_1_hi.16b
+       eor     v_p1_1.16b, v_tmp_lo.16b, v_p1_1.16b
+       eor     v_p1_1.16b, v_p1_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_2_hi.16b
+       eor     v_p1_2.16b, v_tmp_lo.16b, v_p1_2.16b
+       eor     v_p1_2.16b, v_p1_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_3_hi.16b
+       eor     v_p1_3.16b, v_tmp_lo.16b, v_p1_3.16b
+       eor     v_p1_3.16b, v_p1_3.16b, v_tmp_hi.16b
+
+       /* v_p2_x */
+       ldp     q_gft_lo, q_gft_hi, [x_tmp]
+       prfm    pldl3keep, [x_tmp, #32]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_0_hi.16b
+       eor     v_p2_0.16b, v_tmp_lo.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_1_hi.16b
+       eor     v_p2_1.16b, v_tmp_lo.16b, v_p2_1.16b
+       eor     v_p2_1.16b, v_p2_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_2_hi.16b
+       eor     v_p2_2.16b, v_tmp_lo.16b, v_p2_2.16b
+       eor     v_p2_2.16b, v_p2_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_3_hi.16b
+       eor     v_p2_3.16b, v_tmp_lo.16b, v_p2_3.16b
+       eor     v_p2_3.16b, v_p2_3.16b, v_tmp_hi.16b
+
+       /* v_p3_x */
+       ldp     q_gft_lo, q_gft_hi, [x_tmp]
+       prfm    pldl3keep, [x_tmp, #32]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_0_hi.16b
+       eor     v_p3_0.16b, v_tmp_lo.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_1_hi.16b
+       eor     v_p3_1.16b, v_tmp_lo.16b, v_p3_1.16b
+       eor     v_p3_1.16b, v_p3_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_2_hi.16b
+       eor     v_p3_2.16b, v_tmp_lo.16b, v_p3_2.16b
+       eor     v_p3_2.16b, v_p3_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_3_hi.16b
+       eor     v_p3_3.16b, v_tmp_lo.16b, v_p3_3.16b
+       eor     v_p3_3.16b, v_p3_3.16b, v_tmp_hi.16b
+
+       /* v_p4_x */
+       ldp     q_gft_lo, q_gft_hi, [x_tmp]
+       prfm    pldl3keep, [x_tmp, #32]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_0_hi.16b
+       eor     v_p4_0.16b, v_tmp_lo.16b, v_p4_0.16b
+       eor     v_p4_0.16b, v_p4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_1_hi.16b
+       eor     v_p4_1.16b, v_tmp_lo.16b, v_p4_1.16b
+       eor     v_p4_1.16b, v_p4_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_2_hi.16b
+       eor     v_p4_2.16b, v_tmp_lo.16b, v_p4_2.16b
+       eor     v_p4_2.16b, v_p4_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_3_hi.16b
+       eor     v_p4_3.16b, v_tmp_lo.16b, v_p4_3.16b
+       eor     v_p4_3.16b, v_p4_3.16b, v_tmp_hi.16b
+
+       /* v_p5_x */
+       ldp     q_gft_lo, q_gft_hi, [x_tmp]
+       prfm    pldl3keep, [x_tmp, #32]
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_0_hi.16b
+       eor     v_p5_0.16b, v_tmp_lo.16b, v_p5_0.16b
+       eor     v_p5_0.16b, v_p5_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_1_hi.16b
+       eor     v_p5_1.16b, v_tmp_lo.16b, v_p5_1.16b
+       eor     v_p5_1.16b, v_p5_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_2_hi.16b
+       eor     v_p5_2.16b, v_tmp_lo.16b, v_p5_2.16b
+       eor     v_p5_2.16b, v_p5_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft_hi.16b}, v_data_3_hi.16b
+       eor     v_p5_3.16b, v_tmp_lo.16b, v_p5_3.16b
+       eor     v_p5_3.16b, v_p5_3.16b, v_tmp_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop64_vects
+
+.Lloop64_vects_end:
+       add     x_ptr, x_dest1, x_pos
+       stp     q_p1_0, q_p1_1, [x_ptr], #32
+       stp     q_p1_2, q_p1_3, [x_ptr]
+
+       add     x_ptr, x_dest2, x_pos
+       stp     q_p2_0, q_p2_1, [x_ptr], #32
+       stp     q_p2_2, q_p2_3, [x_ptr]
+
+       add     x_ptr, x_dest3, x_pos
+       stp     q_p3_0, q_p3_1, [x_ptr], #32
+       stp     q_p3_2, q_p3_3, [x_ptr]
+
+       add     x_ptr, x_dest4, x_pos
+       stp     q_p4_0, q_p4_1, [x_ptr], #32
+       stp     q_p4_2, q_p4_3, [x_ptr]
+
+       add     x_ptr, x_dest5, x_pos
+       stp     q_p5_0, q_p5_1, [x_ptr], #32
+       stp     q_p5_2, q_p5_3, [x_ptr]
+
+       add     x_pos, x_pos, #64
+       cmp     x_pos, x_len
+       ble     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_len, x_len, #64
+       cmp     x_pos, x_len
+       beq     .return_pass
+
+.Lloop16_init:
+       sub     x_len, x_len, #16
+       cmp     x_pos, x_len
+       bgt     .lessthan16_init
+
+.Lloop16:
+       movi    v_p1_0.16b, #0
+       movi    v_p2_0.16b, #0
+       movi    v_p3_0.16b, #0
+       movi    v_p4_0.16b, #0
+       movi    v_p5_0.16b, #0
+       mov     x_vec_i, #0
+
+.Lloop16_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       ldr     q_data, [x_ptr, x_pos]
+
+       movi    v_mask0f.16b, #0x0f
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       add     x_tmp, x_tbl, x_vec_i, lsl #2
+       add     x_vec_i, x_vec_i, #8
+       ldp     q_gft1_lo, q_gft1_hi, [x_tmp]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+       ldp     q_gft2_lo, q_gft2_hi, [x_tmp]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+       ldp     q_gft3_lo, q_gft3_hi, [x_tmp]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+       ldp     q_gft4_lo, q_gft4_hi, [x_tmp]
+       add     x_tmp, x_tmp, x_vec, lsl #2
+       ldp     q_gft5_lo, q_gft5_hi, [x_tmp]
+
+       tbl     v_gft1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_gft1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       tbl     v_gft2_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_gft2_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       tbl     v_gft3_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_gft3_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       tbl     v_gft4_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_gft4_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       tbl     v_gft5_lo.16b, {v_gft5_lo.16b}, v_data_lo.16b
+       tbl     v_gft5_hi.16b, {v_gft5_hi.16b}, v_data_hi.16b
+
+       eor     v_p1_0.16b, v_gft1_hi.16b, v_p1_0.16b
+       eor     v_p1_0.16b, v_p1_0.16b, v_gft1_lo.16b
+       eor     v_p2_0.16b, v_gft2_hi.16b, v_p2_0.16b
+       eor     v_p2_0.16b, v_p2_0.16b, v_gft2_lo.16b
+       eor     v_p3_0.16b, v_gft3_hi.16b, v_p3_0.16b
+       eor     v_p3_0.16b, v_p3_0.16b, v_gft3_lo.16b
+       eor     v_p4_0.16b, v_gft4_hi.16b, v_p4_0.16b
+       eor     v_p4_0.16b, v_p4_0.16b, v_gft4_lo.16b
+       eor     v_p5_0.16b, v_gft5_hi.16b, v_p5_0.16b
+       eor     v_p5_0.16b, v_p5_0.16b, v_gft5_lo.16b
+
+       cmp     x_vec_i, x_vec
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q_p1_0, [x_dest1, x_pos]
+       str     q_p2_0, [x_dest2, x_pos]
+       str     q_p3_0, [x_dest3, x_pos]
+       str     q_p4_0, [x_dest4, x_pos]
+       str     q_p5_0, [x_dest5, x_pos]
+       add     x_pos, x_pos, #16
+       cmp     x_pos, x_len
+       ble     .Lloop16
+
+.Lloop16_end:
+       sub     x_tmp, x_pos, x_len
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16_init:
+       mov     x_pos, x_len
+       b       .Lloop16
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_5vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_5vect_mad_neon.S
new file mode 100644 (file)
index 0000000..5cbc6bf
--- /dev/null
@@ -0,0 +1,534 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_5vect_mad_neon
+.type gf_5vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x7
+x_dest2                .req    x8
+x_dest3                .req    x9
+x_dest4                .req    x10
+x_dest5                .req    x_dest
+x_tmp          .req    x11
+x_tbl1         .req    x12
+x_tbl2         .req    x13
+x_tbl3         .req    x14
+x_tbl4         .req    x15
+x_tbl5         .req    x16
+x_const                .req    x17
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp_lo       .req    v1
+v_tmp_hi       .req    v2
+v_tmp          .req    v3
+q_tmp          .req    q3
+
+v_gft1_lo      .req    v4
+v_gft1_hi      .req    v5
+v_gft2_lo      .req    v6
+v_gft2_hi      .req    v7
+v_gft3_lo      .req    v16
+v_gft3_hi      .req    v17
+q_gft1_lo      .req    q4
+q_gft1_hi      .req    q5
+q_gft2_lo      .req    q6
+q_gft2_hi      .req    q7
+q_gft3_lo      .req    q16
+q_gft3_hi      .req    q17
+
+v_gft4_lo      .req    v18
+v_gft4_hi      .req    v19
+q_gft4_lo      .req    q18
+q_gft4_hi      .req    q19
+v_gft5_lo      .req    v_gft2_lo
+v_gft5_hi      .req    v_gft2_hi
+q_gft5_lo      .req    q_gft2_lo
+q_gft5_hi      .req    q_gft2_hi
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_data_0_lo    .req    v12
+v_data_1_lo    .req    v13
+v_data_2_lo    .req    v14
+v_data_3_lo    .req    v15
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+
+v_d1_0         .req    v20
+v_d1_1         .req    v21
+v_d1_2         .req    v22
+v_d1_3         .req    v23
+v_d2_0         .req    v24
+v_d2_1         .req    v25
+v_d2_2         .req    v26
+v_d2_3         .req    v27
+v_d3_0         .req    v28
+v_d3_1         .req    v29
+v_d3_2         .req    v30
+v_d3_3         .req    v31
+q_d1_0         .req    q20
+q_d1_1         .req    q21
+q_d1_2         .req    q22
+q_d1_3         .req    q23
+q_d2_0         .req    q24
+q_d2_1         .req    q25
+q_d2_2         .req    q26
+q_d2_3         .req    q27
+q_d3_0         .req    q28
+q_d3_1         .req    q29
+q_d3_2         .req    q30
+q_d3_3         .req    q31
+
+v_d4_0         .req    v_d1_0
+v_d4_1         .req    v_d1_1
+v_d4_2         .req    v_d1_2
+v_d4_3         .req    v_d1_3
+q_d4_0         .req    q_d1_0
+q_d4_1         .req    q_d1_1
+q_d4_2         .req    q_d1_2
+q_d4_3         .req    q_d1_3
+v_d5_0         .req    v_d2_0
+v_d5_1         .req    v_d2_1
+v_d5_2         .req    v_d2_2
+v_d5_3         .req    v_d2_3
+q_d5_0         .req    q_d2_0
+q_d5_1         .req    q_d2_1
+q_d5_2         .req    q_d2_2
+q_d5_3         .req    q_d2_3
+
+v_data         .req    v21
+q_data         .req    q21
+v_data_lo      .req    v22
+v_data_hi      .req    v23
+
+gf_5vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       lsl     x_vec, x_vec, #5
+       add     x_tbl1, x_tbl, x_vec_i
+       add     x_tbl2, x_tbl1, x_vec
+       add     x_tbl3, x_tbl2, x_vec
+       add     x_tbl4, x_tbl3, x_vec
+       add     x_tbl5, x_tbl4, x_vec
+       add     x_src_end, x_src, x_len
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+       ldr     x_dest4, [x_dest, #8*3]
+       ldr     x_dest5, [x_dest, #8*4]
+       ldr     q_gft1_lo, [x_tbl1]
+       ldr     q_gft1_hi, [x_tbl1, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+       ldr     q_gft4_lo, [x_tbl4]
+       ldr     q_gft4_hi, [x_tbl4, #16]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #64
+
+.Lloop64:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       add     x_src, x_src, #64
+
+       ldr     q_d1_0, [x_dest1, #16*0]
+       ldr     q_d1_1, [x_dest1, #16*1]
+       ldr     q_d1_2, [x_dest1, #16*2]
+       ldr     q_d1_3, [x_dest1, #16*3]
+
+       ldr     q_d2_0, [x_dest2, #16*0]
+       ldr     q_d2_1, [x_dest2, #16*1]
+       ldr     q_d2_2, [x_dest2, #16*2]
+       ldr     q_d2_3, [x_dest2, #16*3]
+
+       ldr     q_d3_0, [x_dest3, #16*0]
+       ldr     q_d3_1, [x_dest3, #16*1]
+       ldr     q_d3_2, [x_dest3, #16*2]
+       ldr     q_d3_3, [x_dest3, #16*3]
+
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+
+       /* dest1 */
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_d1_1.16b, v_tmp_lo.16b, v_d1_1.16b
+       eor     v_d1_1.16b, v_d1_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       eor     v_d1_2.16b, v_tmp_lo.16b, v_d1_2.16b
+       eor     v_d1_2.16b, v_d1_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       eor     v_d1_3.16b, v_tmp_lo.16b, v_d1_3.16b
+       eor     v_d1_3.16b, v_d1_3.16b, v_tmp_hi.16b
+
+       /* dest2 */
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_0_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_1_hi.16b
+       eor     v_d2_1.16b, v_tmp_lo.16b, v_d2_1.16b
+       eor     v_d2_1.16b, v_d2_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_2_hi.16b
+       eor     v_d2_2.16b, v_tmp_lo.16b, v_d2_2.16b
+       eor     v_d2_2.16b, v_d2_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_3_hi.16b
+       eor     v_d2_3.16b, v_tmp_lo.16b, v_d2_3.16b
+       eor     v_d2_3.16b, v_d2_3.16b, v_tmp_hi.16b
+
+       /* dest3 */
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_0_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_1_hi.16b
+       eor     v_d3_1.16b, v_tmp_lo.16b, v_d3_1.16b
+       eor     v_d3_1.16b, v_d3_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_2_hi.16b
+       eor     v_d3_2.16b, v_tmp_lo.16b, v_d3_2.16b
+       eor     v_d3_2.16b, v_d3_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_3_hi.16b
+       eor     v_d3_3.16b, v_tmp_lo.16b, v_d3_3.16b
+       eor     v_d3_3.16b, v_d3_3.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1, #16*0]
+       str     q_d1_1, [x_dest1, #16*1]
+       str     q_d1_2, [x_dest1, #16*2]
+       str     q_d1_3, [x_dest1, #16*3]
+       add     x_dest1, x_dest1, #64
+
+       str     q_d2_0, [x_dest2, #16*0]
+       str     q_d2_1, [x_dest2, #16*1]
+       str     q_d2_2, [x_dest2, #16*2]
+       str     q_d2_3, [x_dest2, #16*3]
+       add     x_dest2, x_dest2, #64
+
+       str     q_d3_0, [x_dest3, #16*0]
+       str     q_d3_1, [x_dest3, #16*1]
+       str     q_d3_2, [x_dest3, #16*2]
+       str     q_d3_3, [x_dest3, #16*3]
+       add     x_dest3, x_dest3, #64
+
+       ldr     q_d4_0, [x_dest4, #16*0]
+       ldr     q_d4_1, [x_dest4, #16*1]
+       ldr     q_d4_2, [x_dest4, #16*2]
+       ldr     q_d4_3, [x_dest4, #16*3]
+
+       ldr     q_d5_0, [x_dest5, #16*0]
+       ldr     q_d5_1, [x_dest5, #16*1]
+       ldr     q_d5_2, [x_dest5, #16*2]
+       ldr     q_d5_3, [x_dest5, #16*3]
+
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+
+       /* dest4 */
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_0_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_1_hi.16b
+       eor     v_d4_1.16b, v_tmp_lo.16b, v_d4_1.16b
+       eor     v_d4_1.16b, v_d4_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_2_hi.16b
+       eor     v_d4_2.16b, v_tmp_lo.16b, v_d4_2.16b
+       eor     v_d4_2.16b, v_d4_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_3_hi.16b
+       eor     v_d4_3.16b, v_tmp_lo.16b, v_d4_3.16b
+       eor     v_d4_3.16b, v_d4_3.16b, v_tmp_hi.16b
+
+       /* dest5 */
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_0_hi.16b
+       eor     v_d5_0.16b, v_tmp_lo.16b, v_d5_0.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_1_hi.16b
+       eor     v_d5_1.16b, v_tmp_lo.16b, v_d5_1.16b
+       eor     v_d5_1.16b, v_d5_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_2_hi.16b
+       eor     v_d5_2.16b, v_tmp_lo.16b, v_d5_2.16b
+       eor     v_d5_2.16b, v_d5_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_3_hi.16b
+       eor     v_d5_3.16b, v_tmp_lo.16b, v_d5_3.16b
+       eor     v_d5_3.16b, v_d5_3.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4, #16*0]
+       str     q_d4_1, [x_dest4, #16*1]
+       str     q_d4_2, [x_dest4, #16*2]
+       str     q_d4_3, [x_dest4, #16*3]
+       add     x_dest4, x_dest4, #64
+
+       str     q_d5_0, [x_dest5, #16*0]
+       str     q_d5_1, [x_dest5, #16*1]
+       str     q_d5_2, [x_dest5, #16*2]
+       str     q_d5_3, [x_dest5, #16*3]
+       add     x_dest5, x_dest5, #64
+
+       cmp     x_src, x_src_end
+       bls     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #64
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+       ldr     q_d4_0, [x_dest4]
+       ldr     q_d5_0, [x_dest5]
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_hi.16b
+       eor     v_d5_0.16b, v_tmp_lo.16b, v_d5_0.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4]
+       str     q_d5_0, [x_dest5]
+
+       add     x_src, x_src, #16
+       add     x_dest1, x_dest1, #16
+       add     x_dest2, x_dest2, #16
+       add     x_dest3, x_dest3, #16
+       add     x_dest4, x_dest4, #16
+       add     x_dest5, x_dest5, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+       sub     x_dest2, x_dest2, x_tmp
+       sub     x_dest3, x_dest3, x_tmp
+       sub     x_dest4, x_dest4, x_tmp
+       sub     x_dest5, x_dest5, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+       ldr     q_d4_0, [x_dest4]
+       ldr     q_d5_0, [x_dest5]
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4]
+       str     q_d5_0, [x_dest5]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_6vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_6vect_mad_neon.S
new file mode 100644 (file)
index 0000000..4886440
--- /dev/null
@@ -0,0 +1,609 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+.global gf_6vect_mad_neon
+.type gf_6vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x7
+x_dest2                .req    x8
+x_dest3                .req    x9
+x_dest4                .req    x10
+x_dest5                .req    x11
+x_dest6                .req    x_dest
+x_tmp          .req    x12
+x_tbl1         .req    x13
+x_tbl2         .req    x14
+x_tbl3         .req    x15
+x_tbl4         .req    x16
+x_tbl5         .req    x17
+x_tbl6         .req    x_tbl
+x_const                .req    x18
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp_lo       .req    v1
+v_tmp_hi       .req    v2
+v_tmp          .req    v3
+q_tmp          .req    q3
+
+v_gft1_lo      .req    v4
+v_gft1_hi      .req    v5
+v_gft2_lo      .req    v6
+v_gft2_hi      .req    v7
+v_gft3_lo      .req    v16
+v_gft3_hi      .req    v17
+q_gft1_lo      .req    q4
+q_gft1_hi      .req    q5
+q_gft2_lo      .req    q6
+q_gft2_hi      .req    q7
+q_gft3_lo      .req    q16
+q_gft3_hi      .req    q17
+
+v_gft4_lo      .req    v18
+v_gft4_hi      .req    v19
+q_gft4_lo      .req    q18
+q_gft4_hi      .req    q19
+v_gft5_lo      .req    v_gft2_lo
+v_gft5_hi      .req    v_gft2_hi
+q_gft5_lo      .req    q_gft2_lo
+q_gft5_hi      .req    q_gft2_hi
+v_gft6_lo      .req    v_gft3_lo
+v_gft6_hi      .req    v_gft3_hi
+q_gft6_lo      .req    q_gft3_lo
+q_gft6_hi      .req    q_gft3_hi
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+
+v_data_0_lo    .req    v12
+v_data_1_lo    .req    v13
+v_data_2_lo    .req    v14
+v_data_3_lo    .req    v15
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+
+v_d1_0         .req    v20
+v_d1_1         .req    v21
+v_d1_2         .req    v22
+v_d1_3         .req    v23
+v_d2_0         .req    v24
+v_d2_1         .req    v25
+v_d2_2         .req    v26
+v_d2_3         .req    v27
+v_d3_0         .req    v28
+v_d3_1         .req    v29
+v_d3_2         .req    v30
+v_d3_3         .req    v31
+q_d1_0         .req    q20
+q_d1_1         .req    q21
+q_d1_2         .req    q22
+q_d1_3         .req    q23
+q_d2_0         .req    q24
+q_d2_1         .req    q25
+q_d2_2         .req    q26
+q_d2_3         .req    q27
+q_d3_0         .req    q28
+q_d3_1         .req    q29
+q_d3_2         .req    q30
+q_d3_3         .req    q31
+
+v_d4_0         .req    v_d1_0
+v_d4_1         .req    v_d1_1
+v_d4_2         .req    v_d1_2
+v_d4_3         .req    v_d1_3
+q_d4_0         .req    q_d1_0
+q_d4_1         .req    q_d1_1
+q_d4_2         .req    q_d1_2
+q_d4_3         .req    q_d1_3
+v_d5_0         .req    v_d2_0
+v_d5_1         .req    v_d2_1
+v_d5_2         .req    v_d2_2
+v_d5_3         .req    v_d2_3
+q_d5_0         .req    q_d2_0
+q_d5_1         .req    q_d2_1
+q_d5_2         .req    q_d2_2
+q_d5_3         .req    q_d2_3
+v_d6_0         .req    v_d3_0
+v_d6_1         .req    v_d3_1
+v_d6_2         .req    v_d3_2
+v_d6_3         .req    v_d3_3
+q_d6_0         .req    q_d3_0
+q_d6_1         .req    q_d3_1
+q_d6_2         .req    q_d3_2
+q_d6_3         .req    q_d3_3
+
+v_data         .req    v21
+q_data         .req    q21
+v_data_lo      .req    v22
+v_data_hi      .req    v23
+
+gf_6vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       lsl     x_vec, x_vec, #5
+       add     x_tbl1, x_tbl, x_vec_i
+       add     x_tbl2, x_tbl1, x_vec
+       add     x_tbl3, x_tbl2, x_vec
+       add     x_tbl4, x_tbl3, x_vec
+       add     x_tbl5, x_tbl4, x_vec
+       add     x_tbl6, x_tbl5, x_vec
+       add     x_src_end, x_src, x_len
+       ldr     x_dest1, [x_dest, #8*0]
+       ldr     x_dest2, [x_dest, #8*1]
+       ldr     x_dest3, [x_dest, #8*2]
+       ldr     x_dest4, [x_dest, #8*3]
+       ldr     x_dest5, [x_dest, #8*4]
+       ldr     x_dest6, [x_dest, #8*5]
+       ldr     q_gft1_lo, [x_tbl1]
+       ldr     q_gft1_hi, [x_tbl1, #16]
+       ldr     q_gft4_lo, [x_tbl4]
+       ldr     q_gft4_hi, [x_tbl4, #16]
+
+.Lloop64_init:
+       /* less than 64 bytes, goto Lloop16_init */
+       cmp     x_len, #64
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #64
+
+.Lloop64:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       add     x_src, x_src, #64
+
+       ldr     q_d1_0, [x_dest1, #16*0]
+       ldr     q_d1_1, [x_dest1, #16*1]
+       ldr     q_d1_2, [x_dest1, #16*2]
+       ldr     q_d1_3, [x_dest1, #16*3]
+
+       ldr     q_d2_0, [x_dest2, #16*0]
+       ldr     q_d2_1, [x_dest2, #16*1]
+       ldr     q_d2_2, [x_dest2, #16*2]
+       ldr     q_d2_3, [x_dest2, #16*3]
+
+       ldr     q_d3_0, [x_dest3, #16*0]
+       ldr     q_d3_1, [x_dest3, #16*1]
+       ldr     q_d3_2, [x_dest3, #16*2]
+       ldr     q_d3_3, [x_dest3, #16*3]
+
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+
+       /* dest1 */
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_d1_1.16b, v_tmp_lo.16b, v_d1_1.16b
+       eor     v_d1_1.16b, v_d1_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       eor     v_d1_2.16b, v_tmp_lo.16b, v_d1_2.16b
+       eor     v_d1_2.16b, v_d1_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       eor     v_d1_3.16b, v_tmp_lo.16b, v_d1_3.16b
+       eor     v_d1_3.16b, v_d1_3.16b, v_tmp_hi.16b
+
+       /* dest2 */
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_0_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_1_hi.16b
+       eor     v_d2_1.16b, v_tmp_lo.16b, v_d2_1.16b
+       eor     v_d2_1.16b, v_d2_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_2_hi.16b
+       eor     v_d2_2.16b, v_tmp_lo.16b, v_d2_2.16b
+       eor     v_d2_2.16b, v_d2_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_3_hi.16b
+       eor     v_d2_3.16b, v_tmp_lo.16b, v_d2_3.16b
+       eor     v_d2_3.16b, v_d2_3.16b, v_tmp_hi.16b
+
+       /* dest3 */
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_0_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_1_hi.16b
+       eor     v_d3_1.16b, v_tmp_lo.16b, v_d3_1.16b
+       eor     v_d3_1.16b, v_d3_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_2_hi.16b
+       eor     v_d3_2.16b, v_tmp_lo.16b, v_d3_2.16b
+       eor     v_d3_2.16b, v_d3_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_3_hi.16b
+       eor     v_d3_3.16b, v_tmp_lo.16b, v_d3_3.16b
+       eor     v_d3_3.16b, v_d3_3.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1, #16*0]
+       str     q_d1_1, [x_dest1, #16*1]
+       str     q_d1_2, [x_dest1, #16*2]
+       str     q_d1_3, [x_dest1, #16*3]
+       add     x_dest1, x_dest1, #64
+
+       str     q_d2_0, [x_dest2, #16*0]
+       str     q_d2_1, [x_dest2, #16*1]
+       str     q_d2_2, [x_dest2, #16*2]
+       str     q_d2_3, [x_dest2, #16*3]
+       add     x_dest2, x_dest2, #64
+
+       str     q_d3_0, [x_dest3, #16*0]
+       str     q_d3_1, [x_dest3, #16*1]
+       str     q_d3_2, [x_dest3, #16*2]
+       str     q_d3_3, [x_dest3, #16*3]
+       add     x_dest3, x_dest3, #64
+
+       ldr     q_d4_0, [x_dest4, #16*0]
+       ldr     q_d4_1, [x_dest4, #16*1]
+       ldr     q_d4_2, [x_dest4, #16*2]
+       ldr     q_d4_3, [x_dest4, #16*3]
+
+       ldr     q_d5_0, [x_dest5, #16*0]
+       ldr     q_d5_1, [x_dest5, #16*1]
+       ldr     q_d5_2, [x_dest5, #16*2]
+       ldr     q_d5_3, [x_dest5, #16*3]
+
+       ldr     q_d6_0, [x_dest6, #16*0]
+       ldr     q_d6_1, [x_dest6, #16*1]
+       ldr     q_d6_2, [x_dest6, #16*2]
+       ldr     q_d6_3, [x_dest6, #16*3]
+
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+       ldr     q_gft6_lo, [x_tbl6]
+       ldr     q_gft6_hi, [x_tbl6, #16]
+
+       /* dest4 */
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_0_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_1_hi.16b
+       eor     v_d4_1.16b, v_tmp_lo.16b, v_d4_1.16b
+       eor     v_d4_1.16b, v_d4_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_2_hi.16b
+       eor     v_d4_2.16b, v_tmp_lo.16b, v_d4_2.16b
+       eor     v_d4_2.16b, v_d4_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_3_hi.16b
+       eor     v_d4_3.16b, v_tmp_lo.16b, v_d4_3.16b
+       eor     v_d4_3.16b, v_d4_3.16b, v_tmp_hi.16b
+
+       /* dest5 */
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_0_hi.16b
+       eor     v_d5_0.16b, v_tmp_lo.16b, v_d5_0.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_1_hi.16b
+       eor     v_d5_1.16b, v_tmp_lo.16b, v_d5_1.16b
+       eor     v_d5_1.16b, v_d5_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_2_hi.16b
+       eor     v_d5_2.16b, v_tmp_lo.16b, v_d5_2.16b
+       eor     v_d5_2.16b, v_d5_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_3_hi.16b
+       eor     v_d5_3.16b, v_tmp_lo.16b, v_d5_3.16b
+       eor     v_d5_3.16b, v_d5_3.16b, v_tmp_hi.16b
+
+       /* dest6 */
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_0_hi.16b
+       eor     v_d6_0.16b, v_tmp_lo.16b, v_d6_0.16b
+       eor     v_d6_0.16b, v_d6_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_1_hi.16b
+       eor     v_d6_1.16b, v_tmp_lo.16b, v_d6_1.16b
+       eor     v_d6_1.16b, v_d6_1.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_2_hi.16b
+       eor     v_d6_2.16b, v_tmp_lo.16b, v_d6_2.16b
+       eor     v_d6_2.16b, v_d6_2.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_3_hi.16b
+       eor     v_d6_3.16b, v_tmp_lo.16b, v_d6_3.16b
+       eor     v_d6_3.16b, v_d6_3.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4, #16*0]
+       str     q_d4_1, [x_dest4, #16*1]
+       str     q_d4_2, [x_dest4, #16*2]
+       str     q_d4_3, [x_dest4, #16*3]
+       add     x_dest4, x_dest4, #64
+
+       str     q_d5_0, [x_dest5, #16*0]
+       str     q_d5_1, [x_dest5, #16*1]
+       str     q_d5_2, [x_dest5, #16*2]
+       str     q_d5_3, [x_dest5, #16*3]
+       add     x_dest5, x_dest5, #64
+
+       str     q_d6_0, [x_dest6, #16*0]
+       str     q_d6_1, [x_dest6, #16*1]
+       str     q_d6_2, [x_dest6, #16*2]
+       str     q_d6_3, [x_dest6, #16*3]
+       add     x_dest6, x_dest6, #64
+
+       cmp     x_src, x_src_end
+       bls     .Lloop64
+
+.Lloop64_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #64
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d1_0.16b, v_tmp_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_d2_0.16b, v_tmp_lo.16b, v_d2_0.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_d3_0.16b, v_tmp_lo.16b, v_d3_0.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+       ldr     q_d4_0, [x_dest4]
+       ldr     q_d5_0, [x_dest5]
+       ldr     q_d6_0, [x_dest6]
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+       ldr     q_gft6_lo, [x_tbl6]
+       ldr     q_gft6_hi, [x_tbl6, #16]
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_d4_0.16b, v_tmp_lo.16b, v_d4_0.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_hi.16b
+       eor     v_d5_0.16b, v_tmp_lo.16b, v_d5_0.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_hi.16b
+       eor     v_d6_0.16b, v_tmp_lo.16b, v_d6_0.16b
+       eor     v_d6_0.16b, v_d6_0.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4]
+       str     q_d5_0, [x_dest5]
+       str     q_d6_0, [x_dest6]
+
+       add     x_src, x_src, #16
+       add     x_dest1, x_dest1, #16
+       add     x_dest2, x_dest2, #16
+       add     x_dest3, x_dest3, #16
+       add     x_dest4, x_dest4, #16
+       add     x_dest5, x_dest5, #16
+       add     x_dest6, x_dest6, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+       sub     x_dest2, x_dest2, x_tmp
+       sub     x_dest3, x_dest3, x_tmp
+       sub     x_dest4, x_dest4, x_tmp
+       sub     x_dest5, x_dest5, x_tmp
+       sub     x_dest6, x_dest6, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+       ldr     q_d2_0, [x_dest2]
+       ldr     q_d3_0, [x_dest3]
+       ldr     q_gft2_lo, [x_tbl2]
+       ldr     q_gft2_hi, [x_tbl2, #16]
+       ldr     q_gft3_lo, [x_tbl3]
+       ldr     q_gft3_hi, [x_tbl3, #16]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft2_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft2_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d2_0.16b, v_d2_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft3_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft3_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d3_0.16b, v_d3_0.16b, v_tmp_hi.16b
+
+       str     q_d1_0, [x_dest1]
+       str     q_d2_0, [x_dest2]
+       str     q_d3_0, [x_dest3]
+
+       ldr     q_d4_0, [x_dest4]
+       ldr     q_d5_0, [x_dest5]
+       ldr     q_d6_0, [x_dest6]
+       ldr     q_gft5_lo, [x_tbl5]
+       ldr     q_gft5_hi, [x_tbl5, #16]
+       ldr     q_gft6_lo, [x_tbl6]
+       ldr     q_gft6_hi, [x_tbl6, #16]
+
+       tbl     v_tmp_lo.16b, {v_gft4_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft4_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d4_0.16b, v_d4_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft5_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft5_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d5_0.16b, v_d5_0.16b, v_tmp_hi.16b
+
+       tbl     v_tmp_lo.16b, {v_gft6_lo.16b}, v_data_lo.16b
+       tbl     v_tmp_hi.16b, {v_gft6_hi.16b}, v_data_hi.16b
+       eor     v_tmp_hi.16b, v_tmp_lo.16b, v_tmp_hi.16b
+       and     v_tmp_hi.16b, v_tmp_hi.16b, v_tmp.16b
+       eor     v_d6_0.16b, v_d6_0.16b, v_tmp_hi.16b
+
+       str     q_d4_0, [x_dest4]
+       str     q_d5_0, [x_dest5]
+       str     q_d6_0, [x_dest6]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_vect_dot_prod_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_vect_dot_prod_neon.S
new file mode 100644 (file)
index 0000000..117110c
--- /dev/null
@@ -0,0 +1,298 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_vect_dot_prod_neon
+.type gf_vect_dot_prod_neon, %function
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_tbl          .req    x2
+x_src          .req    x3
+x_dest1                .req    x4
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_vec_i                .req    x5
+x_ptr          .req    x6
+x_pos          .req    x7
+x_tmp          .req    x8
+x_tbl1         .req    x9
+
+/* vectors */
+v_gft1_lo      .req    v0
+v_gft1_hi      .req    v1
+q_gft1_lo      .req    q0
+q_gft1_hi      .req    q1
+v_mask0f       .req    v2
+q_mask0f       .req    q2
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+v_data_4       .req    v12
+v_data_5       .req    v13
+v_data_6       .req    v14
+v_data_7       .req    v15
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+q_data_4       .req    q12
+q_data_5       .req    q13
+q_data_6       .req    q14
+q_data_7       .req    q15
+
+v_data_0_lo    .req    v16
+v_data_1_lo    .req    v17
+v_data_2_lo    .req    v18
+v_data_3_lo    .req    v19
+v_data_4_lo    .req    v20
+v_data_5_lo    .req    v21
+v_data_6_lo    .req    v22
+v_data_7_lo    .req    v23
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+v_data_4_hi    .req    v_data_4
+v_data_5_hi    .req    v_data_5
+v_data_6_hi    .req    v_data_6
+v_data_7_hi    .req    v_data_7
+
+v_p0           .req    v24
+v_p1           .req    v25
+v_p2           .req    v26
+v_p3           .req    v27
+v_p4           .req    v28
+v_p5           .req    v29
+v_p6           .req    v30
+v_p7           .req    v31
+q_p0           .req    q24
+q_p1           .req    q25
+q_p2           .req    q26
+q_p3           .req    q27
+q_p4           .req    q28
+q_p5           .req    q29
+q_p6           .req    q30
+q_p7           .req    q31
+
+v_p            .req    v_p0
+q_p            .req    q_p0
+v_data         .req    v_p1
+q_data         .req    q_p1
+v_data_lo      .req    v_p2
+v_data_hi      .req    v_p3
+
+
+gf_vect_dot_prod_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       mov     x_pos, #0
+
+       lsl     x_vec, x_vec, #3
+
+.Lloop128_init:
+       /* less than 128 bytes, goto Lloop16_init */
+       cmp     x_len, #128
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_len, x_len, #128
+
+.Lloop128:
+       movi    v_p0.16b, #0
+       movi    v_p1.16b, #0
+       movi    v_p2.16b, #0
+       movi    v_p3.16b, #0
+       movi    v_p4.16b, #0
+       movi    v_p5.16b, #0
+       movi    v_p6.16b, #0
+       movi    v_p7.16b, #0
+
+       mov     x_tbl1, x_tbl
+       mov     x_vec_i, #0
+
+.Lloop128_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       add     x_vec_i, x_vec_i, #8
+       add     x_ptr, x_ptr, x_pos
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+
+       ldp     q_data_0, q_data_1, [x_ptr], #32
+       ldp     q_data_2, q_data_3, [x_ptr], #32
+       ldp     q_data_4, q_data_5, [x_ptr], #32
+       ldp     q_data_6, q_data_7, [x_ptr]
+
+       prfm    pldl1keep, [x_tbl1]
+       prfm    pldl1strm, [x_ptr]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+       and     v_data_4_lo.16b, v_data_4.16b, v_mask0f.16b
+       and     v_data_5_lo.16b, v_data_5.16b, v_mask0f.16b
+       and     v_data_6_lo.16b, v_data_6.16b, v_mask0f.16b
+       and     v_data_7_lo.16b, v_data_7.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+       ushr    v_data_4_hi.16b, v_data_4.16b, #4
+       ushr    v_data_5_hi.16b, v_data_5.16b, #4
+       ushr    v_data_6_hi.16b, v_data_6.16b, #4
+       ushr    v_data_7_hi.16b, v_data_7.16b, #4
+
+       tbl     v_data_0_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_data_1_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_data_2_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_data_3_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_data_4_lo.16b, {v_gft1_lo.16b}, v_data_4_lo.16b
+       tbl     v_data_5_lo.16b, {v_gft1_lo.16b}, v_data_5_lo.16b
+       tbl     v_data_6_lo.16b, {v_gft1_lo.16b}, v_data_6_lo.16b
+       tbl     v_data_7_lo.16b, {v_gft1_lo.16b}, v_data_7_lo.16b
+
+       tbl     v_data_0_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       tbl     v_data_1_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       tbl     v_data_2_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       tbl     v_data_3_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       tbl     v_data_4_hi.16b, {v_gft1_hi.16b}, v_data_4_hi.16b
+       tbl     v_data_5_hi.16b, {v_gft1_hi.16b}, v_data_5_hi.16b
+       tbl     v_data_6_hi.16b, {v_gft1_hi.16b}, v_data_6_hi.16b
+       tbl     v_data_7_hi.16b, {v_gft1_hi.16b}, v_data_7_hi.16b
+
+       eor     v_p0.16b, v_data_0_lo.16b, v_p0.16b
+       eor     v_p0.16b, v_p0.16b, v_data_0_hi.16b
+       eor     v_p1.16b, v_data_1_lo.16b, v_p1.16b
+       eor     v_p1.16b, v_p1.16b, v_data_1_hi.16b
+       eor     v_p2.16b, v_data_2_lo.16b, v_p2.16b
+       eor     v_p2.16b, v_p2.16b, v_data_2_hi.16b
+       eor     v_p3.16b, v_data_3_lo.16b, v_p3.16b
+       eor     v_p3.16b, v_p3.16b, v_data_3_hi.16b
+       eor     v_p4.16b, v_data_4_lo.16b, v_p4.16b
+       eor     v_p4.16b, v_p4.16b, v_data_4_hi.16b
+       eor     v_p5.16b, v_data_5_lo.16b, v_p5.16b
+       eor     v_p5.16b, v_p5.16b, v_data_5_hi.16b
+       eor     v_p6.16b, v_data_6_lo.16b, v_p6.16b
+       eor     v_p6.16b, v_p6.16b, v_data_6_hi.16b
+       eor     v_p7.16b, v_data_7_lo.16b, v_p7.16b
+       eor     v_p7.16b, v_p7.16b, v_data_7_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop128_vects
+
+.Lloop128_vects_end:
+       add     x_ptr, x_dest1, x_pos
+       stp     q_p0, q_p1, [x_ptr], #32
+       stp     q_p2, q_p3, [x_ptr], #32
+       stp     q_p4, q_p5, [x_ptr], #32
+       stp     q_p6, q_p7, [x_ptr]
+
+       add     x_pos, x_pos, #128
+       cmp     x_pos, x_len
+       ble     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_len, x_len, #128
+       cmp     x_pos, x_len
+       beq     .return_pass
+
+.Lloop16_init:
+       sub     x_len, x_len, #16
+       cmp     x_pos, x_len
+       bgt     .lessthan16_init
+
+.Lloop16:
+       movi    v_p.16b, #0
+       mov     x_tbl1, x_tbl
+       mov     x_vec_i, #0
+
+.Lloop16_vects:
+       ldr     x_ptr, [x_src, x_vec_i]
+       ldr     q_data, [x_ptr, x_pos]
+       add     x_vec_i, x_vec_i, #8
+
+       ldp     q_gft1_lo, q_gft1_hi, [x_tbl1], #32
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_data_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_data_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_p.16b, v_data_lo.16b, v_p.16b
+       eor     v_p.16b, v_p.16b, v_data_hi.16b
+
+       cmp     x_vec_i, x_vec
+       blt     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q_p, [x_dest1, x_pos]
+       add     x_pos, x_pos, #16
+       cmp     x_pos, x_len
+       ble     .Lloop16
+
+.Lloop16_end:
+       sub     x_tmp, x_pos, x_len
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16_init:
+       mov     x_pos, x_len
+       b       .Lloop16
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_vect_mad_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_vect_mad_neon.S
new file mode 100644 (file)
index 0000000..0e25a51
--- /dev/null
@@ -0,0 +1,314 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+.text
+
+.global gf_vect_mad_neon
+.type gf_vect_mad_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_vec          .req    x1
+x_vec_i                .req    x2
+x_tbl          .req    x3
+x_src          .req    x4
+x_dest         .req    x5
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_src_end      .req    x6
+x_dest1                .req    x_dest
+x_tmp          .req    x7
+x_const                .req    x8
+
+/* vectors */
+v_mask0f       .req    v0
+v_tmp          .req    v1
+q_tmp          .req    q1
+
+v_tmp1_lo      .req    v2
+v_tmp1_hi      .req    v3
+v_tmp2_lo      .req    v4
+v_tmp2_hi      .req    v5
+
+v_gft1_lo      .req    v6
+v_gft1_hi      .req    v7
+q_gft1_lo      .req    q6
+q_gft1_hi      .req    q7
+
+v_data_0       .req    v8
+v_data_1       .req    v9
+v_data_2       .req    v10
+v_data_3       .req    v11
+v_data_4       .req    v12
+v_data_5       .req    v13
+v_data_6       .req    v14
+v_data_7       .req    v15
+q_data_0       .req    q8
+q_data_1       .req    q9
+q_data_2       .req    q10
+q_data_3       .req    q11
+q_data_4       .req    q12
+q_data_5       .req    q13
+q_data_6       .req    q14
+q_data_7       .req    q15
+
+v_data_0_lo    .req    v16
+v_data_1_lo    .req    v17
+v_data_2_lo    .req    v18
+v_data_3_lo    .req    v19
+v_data_4_lo    .req    v20
+v_data_5_lo    .req    v21
+v_data_6_lo    .req    v22
+v_data_7_lo    .req    v23
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+v_data_4_hi    .req    v_data_4
+v_data_5_hi    .req    v_data_5
+v_data_6_hi    .req    v_data_6
+v_data_7_hi    .req    v_data_7
+
+v_d1_0         .req    v24
+v_d1_1         .req    v25
+v_d1_2         .req    v26
+v_d1_3         .req    v27
+v_d1_4         .req    v28
+v_d1_5         .req    v29
+v_d1_6         .req    v30
+v_d1_7         .req    v31
+q_d1_0         .req    q24
+q_d1_1         .req    q25
+q_d1_2         .req    q26
+q_d1_3         .req    q27
+q_d1_4         .req    q28
+q_d1_5         .req    q29
+q_d1_6         .req    q30
+q_d1_7         .req    q31
+
+v_data         .req    v_d1_1
+q_data         .req    q_d1_1
+v_data_lo      .req    v_d1_2
+v_data_hi      .req    v_d1_3
+
+
+gf_vect_mad_neon:
+       /* less than 16 bytes, return_fail */
+       cmp     x_len, #16
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       lsl     x_vec_i, x_vec_i, #5
+       add     x_tbl, x_tbl, x_vec_i
+       add     x_src_end, x_src, x_len
+
+       ldr     q_gft1_lo, [x_tbl]
+       ldr     q_gft1_hi, [x_tbl, #16]
+
+.Lloop128_init:
+       /* less than 128 bytes, goto Lloop16_init */
+       cmp     x_len, #128
+       blt     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #128
+
+.Lloop128:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       ldr     q_data_4, [x_src, #16*4]
+       ldr     q_data_5, [x_src, #16*5]
+       ldr     q_data_6, [x_src, #16*6]
+       ldr     q_data_7, [x_src, #16*7]
+
+       ldr     q_d1_0, [x_dest1, #16*0]
+       ldr     q_d1_1, [x_dest1, #16*1]
+       ldr     q_d1_2, [x_dest1, #16*2]
+       ldr     q_d1_3, [x_dest1, #16*3]
+       ldr     q_d1_4, [x_dest1, #16*4]
+       ldr     q_d1_5, [x_dest1, #16*5]
+       ldr     q_d1_6, [x_dest1, #16*6]
+       ldr     q_d1_7, [x_dest1, #16*7]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+       and     v_data_4_lo.16b, v_data_4.16b, v_mask0f.16b
+       and     v_data_5_lo.16b, v_data_5.16b, v_mask0f.16b
+       and     v_data_6_lo.16b, v_data_6.16b, v_mask0f.16b
+       and     v_data_7_lo.16b, v_data_7.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+       ushr    v_data_4_hi.16b, v_data_4.16b, #4
+       ushr    v_data_5_hi.16b, v_data_5.16b, #4
+       ushr    v_data_6_hi.16b, v_data_6.16b, #4
+       ushr    v_data_7_hi.16b, v_data_7.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       tbl     v_tmp2_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_tmp2_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+
+       eor     v_d1_0.16b, v_tmp1_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp1_hi.16b
+       eor     v_d1_1.16b, v_tmp2_lo.16b, v_d1_1.16b
+       eor     v_d1_1.16b, v_d1_1.16b, v_tmp2_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       tbl     v_tmp2_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_tmp2_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+
+       eor     v_d1_2.16b, v_tmp1_lo.16b, v_d1_2.16b
+       eor     v_d1_2.16b, v_d1_2.16b, v_tmp1_hi.16b
+       eor     v_d1_3.16b, v_tmp2_lo.16b, v_d1_3.16b
+       eor     v_d1_3.16b, v_d1_3.16b, v_tmp2_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_4_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_4_hi.16b
+       tbl     v_tmp2_lo.16b, {v_gft1_lo.16b}, v_data_5_lo.16b
+       tbl     v_tmp2_hi.16b, {v_gft1_hi.16b}, v_data_5_hi.16b
+
+       eor     v_d1_4.16b, v_tmp1_lo.16b, v_d1_4.16b
+       eor     v_d1_4.16b, v_d1_4.16b, v_tmp1_hi.16b
+       eor     v_d1_5.16b, v_tmp2_lo.16b, v_d1_5.16b
+       eor     v_d1_5.16b, v_d1_5.16b, v_tmp2_hi.16b
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_6_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_6_hi.16b
+       tbl     v_tmp2_lo.16b, {v_gft1_lo.16b}, v_data_7_lo.16b
+       tbl     v_tmp2_hi.16b, {v_gft1_hi.16b}, v_data_7_hi.16b
+
+       eor     v_d1_6.16b, v_tmp1_lo.16b, v_d1_6.16b
+       eor     v_d1_6.16b, v_d1_6.16b, v_tmp1_hi.16b
+       eor     v_d1_7.16b, v_tmp2_lo.16b, v_d1_7.16b
+       eor     v_d1_7.16b, v_d1_7.16b, v_tmp2_hi.16b
+
+       str     q_d1_0, [x_dest1, #16*0]
+       str     q_d1_1, [x_dest1, #16*1]
+       str     q_d1_2, [x_dest1, #16*2]
+       str     q_d1_3, [x_dest1, #16*3]
+       str     q_d1_4, [x_dest1, #16*4]
+       str     q_d1_5, [x_dest1, #16*5]
+       str     q_d1_6, [x_dest1, #16*6]
+       str     q_d1_7, [x_dest1, #16*7]
+
+       add     x_src, x_src, #128
+       add     x_dest1, x_dest1, #128
+       cmp     x_src, x_src_end
+       bls     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #128
+
+.Lloop16_init:
+       sub     x_src_end, x_src_end, #16
+       cmp     x_src, x_src_end
+       bhi     .lessthan16_init
+
+.Lloop16:
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_d1_0.16b, v_tmp1_lo.16b, v_d1_0.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp1_hi.16b
+
+       str     q_d1_0, [x_dest1]
+
+       add     x_dest1, x_dest1, #16
+       add     x_src, x_src, #16
+       cmp     x_src, x_src_end
+       bls     .Lloop16
+
+.lessthan16_init:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #16
+       beq     .return_pass
+
+.lessthan16:
+       mov     x_src, x_src_end
+       sub     x_dest1, x_dest1, x_tmp
+
+       ldr     x_const, =const_tbl
+       sub     x_const, x_const, x_tmp
+       ldr     q_tmp, [x_const, #16]
+
+       ldr     q_data, [x_src]
+       ldr     q_d1_0, [x_dest1]
+
+       and     v_data_lo.16b, v_data.16b, v_mask0f.16b
+       ushr    v_data_hi.16b, v_data.16b, #4
+
+       tbl     v_tmp1_lo.16b, {v_gft1_lo.16b}, v_data_lo.16b
+       tbl     v_tmp1_hi.16b, {v_gft1_hi.16b}, v_data_hi.16b
+       eor     v_tmp1_hi.16b, v_tmp1_lo.16b, v_tmp1_hi.16b
+       and     v_tmp1_hi.16b, v_tmp1_hi.16b, v_tmp.16b
+       eor     v_d1_0.16b, v_d1_0.16b, v_tmp1_hi.16b
+
+       str     q_d1_0, [x_dest1]
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
+
+.section .data
+.balign 8
+const_tbl:
+       .dword 0x0000000000000000, 0x0000000000000000
+       .dword 0xffffffffffffffff, 0xffffffffffffffff
diff --git a/ceph/src/isa-l/erasure_code/aarch64/gf_vect_mul_neon.S b/ceph/src/isa-l/erasure_code/aarch64/gf_vect_mul_neon.S
new file mode 100644 (file)
index 0000000..c88c53b
--- /dev/null
@@ -0,0 +1,235 @@
+/**************************************************************
+  Copyright (c) 2019 Huawei Technologies Co., Ltd.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Huawei Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+.text
+
+.global gf_vect_mul_neon
+.type gf_vect_mul_neon, %function
+
+
+/* arguments */
+x_len          .req    x0
+x_tbl          .req    x1
+x_src          .req    x2
+x_dest         .req    x3
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_dest1                .req    x_dest
+x_src_end      .req    x4
+x_tmp          .req    x5
+
+/* vectors */
+v_mask0f       .req    v0
+
+v_gft1_lo      .req    v2
+v_gft1_hi      .req    v3
+q_gft1_lo      .req    q2
+q_gft1_hi      .req    q3
+
+v_data_0       .req    v16
+v_data_1       .req    v17
+v_data_2       .req    v18
+v_data_3       .req    v19
+v_data_4       .req    v20
+v_data_5       .req    v21
+v_data_6       .req    v22
+v_data_7       .req    v23
+q_data_0       .req    q16
+q_data_1       .req    q17
+q_data_2       .req    q18
+q_data_3       .req    q19
+q_data_4       .req    q20
+q_data_5       .req    q21
+q_data_6       .req    q22
+q_data_7       .req    q23
+
+v_data_0_lo    .req    v24
+v_data_1_lo    .req    v25
+v_data_2_lo    .req    v26
+v_data_3_lo    .req    v27
+v_data_4_lo    .req    v28
+v_data_5_lo    .req    v29
+v_data_6_lo    .req    v30
+v_data_7_lo    .req    v31
+v_data_0_hi    .req    v_data_0
+v_data_1_hi    .req    v_data_1
+v_data_2_hi    .req    v_data_2
+v_data_3_hi    .req    v_data_3
+v_data_4_hi    .req    v_data_4
+v_data_5_hi    .req    v_data_5
+v_data_6_hi    .req    v_data_6
+v_data_7_hi    .req    v_data_7
+
+
+gf_vect_mul_neon:
+       /* less than 32 bytes, return_fail */
+       cmp     x_len, #32
+       blt     .return_fail
+
+       movi    v_mask0f.16b, #0x0f
+       add     x_src_end, x_src, x_len
+       ldr     q_gft1_lo, [x_tbl]
+       ldr     q_gft1_hi, [x_tbl, #16]
+
+
+.Lloop128_init:
+       /* less than 128 bytes, goto Lloop16_init */
+       cmp     x_len, #128
+       blt     .Lloop32_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src_end, x_src_end, #128
+
+.Lloop128:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+       ldr     q_data_2, [x_src, #16*2]
+       ldr     q_data_3, [x_src, #16*3]
+       ldr     q_data_4, [x_src, #16*4]
+       ldr     q_data_5, [x_src, #16*5]
+       ldr     q_data_6, [x_src, #16*6]
+       ldr     q_data_7, [x_src, #16*7]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       and     v_data_2_lo.16b, v_data_2.16b, v_mask0f.16b
+       and     v_data_3_lo.16b, v_data_3.16b, v_mask0f.16b
+       and     v_data_4_lo.16b, v_data_4.16b, v_mask0f.16b
+       and     v_data_5_lo.16b, v_data_5.16b, v_mask0f.16b
+       and     v_data_6_lo.16b, v_data_6.16b, v_mask0f.16b
+       and     v_data_7_lo.16b, v_data_7.16b, v_mask0f.16b
+
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       ushr    v_data_2_hi.16b, v_data_2.16b, #4
+       ushr    v_data_3_hi.16b, v_data_3.16b, #4
+       ushr    v_data_4_hi.16b, v_data_4.16b, #4
+       ushr    v_data_5_hi.16b, v_data_5.16b, #4
+       ushr    v_data_6_hi.16b, v_data_6.16b, #4
+       ushr    v_data_7_hi.16b, v_data_7.16b, #4
+
+       tbl     v_data_0_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_data_1_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_data_2_lo.16b, {v_gft1_lo.16b}, v_data_2_lo.16b
+       tbl     v_data_3_lo.16b, {v_gft1_lo.16b}, v_data_3_lo.16b
+       tbl     v_data_4_lo.16b, {v_gft1_lo.16b}, v_data_4_lo.16b
+       tbl     v_data_5_lo.16b, {v_gft1_lo.16b}, v_data_5_lo.16b
+       tbl     v_data_6_lo.16b, {v_gft1_lo.16b}, v_data_6_lo.16b
+       tbl     v_data_7_lo.16b, {v_gft1_lo.16b}, v_data_7_lo.16b
+
+       tbl     v_data_0_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       tbl     v_data_1_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       tbl     v_data_2_hi.16b, {v_gft1_hi.16b}, v_data_2_hi.16b
+       tbl     v_data_3_hi.16b, {v_gft1_hi.16b}, v_data_3_hi.16b
+       tbl     v_data_4_hi.16b, {v_gft1_hi.16b}, v_data_4_hi.16b
+       tbl     v_data_5_hi.16b, {v_gft1_hi.16b}, v_data_5_hi.16b
+       tbl     v_data_6_hi.16b, {v_gft1_hi.16b}, v_data_6_hi.16b
+       tbl     v_data_7_hi.16b, {v_gft1_hi.16b}, v_data_7_hi.16b
+
+       eor     v_data_0.16b, v_data_0_hi.16b, v_data_0_lo.16b
+       eor     v_data_1.16b, v_data_1_hi.16b, v_data_1_lo.16b
+       eor     v_data_2.16b, v_data_2_hi.16b, v_data_2_lo.16b
+       eor     v_data_3.16b, v_data_3_hi.16b, v_data_3_lo.16b
+       eor     v_data_4.16b, v_data_4_hi.16b, v_data_4_lo.16b
+       eor     v_data_5.16b, v_data_5_hi.16b, v_data_5_lo.16b
+       eor     v_data_6.16b, v_data_6_hi.16b, v_data_6_lo.16b
+       eor     v_data_7.16b, v_data_7_hi.16b, v_data_7_lo.16b
+
+       str     q_data_0, [x_dest1, #16*0]
+       str     q_data_1, [x_dest1, #16*1]
+       str     q_data_2, [x_dest1, #16*2]
+       str     q_data_3, [x_dest1, #16*3]
+       str     q_data_4, [x_dest1, #16*4]
+       str     q_data_5, [x_dest1, #16*5]
+       str     q_data_6, [x_dest1, #16*6]
+       str     q_data_7, [x_dest1, #16*7]
+
+       add     x_src, x_src, #128
+       add     x_dest1, x_dest1, #128
+       cmp     x_src, x_src_end
+       bls     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+       add     x_src_end, x_src_end, #128
+
+.Lloop32_init:
+       sub     x_src_end, x_src_end, #32
+       cmp     x_src, x_src_end
+       bhi     .return_fail
+
+.Lloop32:
+       ldr     q_data_0, [x_src, #16*0]
+       ldr     q_data_1, [x_src, #16*1]
+
+       and     v_data_0_lo.16b, v_data_0.16b, v_mask0f.16b
+       and     v_data_1_lo.16b, v_data_1.16b, v_mask0f.16b
+       ushr    v_data_0_hi.16b, v_data_0.16b, #4
+       ushr    v_data_1_hi.16b, v_data_1.16b, #4
+       tbl     v_data_0_lo.16b, {v_gft1_lo.16b}, v_data_0_lo.16b
+       tbl     v_data_1_lo.16b, {v_gft1_lo.16b}, v_data_1_lo.16b
+       tbl     v_data_0_hi.16b, {v_gft1_hi.16b}, v_data_0_hi.16b
+       tbl     v_data_1_hi.16b, {v_gft1_hi.16b}, v_data_1_hi.16b
+       eor     v_data_0.16b, v_data_0_hi.16b, v_data_0_lo.16b
+       eor     v_data_1.16b, v_data_1_hi.16b, v_data_1_lo.16b
+       str     q_data_0, [x_dest1, #16*0]
+       str     q_data_1, [x_dest1, #16*1]
+
+       add     x_dest1, x_dest1, #32
+       add     x_src, x_src, #32
+       cmp     x_src, x_src_end
+       bls     .Lloop32
+
+.Lloop32_end:
+       sub     x_tmp, x_src, x_src_end
+       cmp     x_tmp, #32
+       beq     .return_pass
+       b       .return_fail
+
+.return_pass:
+       mov     w_ret, #0
+       ret
+
+.return_fail:
+       mov     w_ret, #1
+       ret
index a34e3fdf78cac0426e627625edbc01cc231ae823..9d76c8df45055e1ca8deb93dbd6478b8e733a289 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -31,7 +31,6 @@
 #include <string.h>            // for memset
 #include "erasure_code.h"
 #include "ec_base.h"           // for GF tables
-#include "types.h"
 
 void ec_init_tables(int k, int rows, unsigned char *a, unsigned char *g_tbls)
 {
@@ -341,9 +340,9 @@ void gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, unsigned ch
 }
 
 struct slver {
-       UINT16 snum;
-       UINT8 ver;
-       UINT8 core;
+       unsigned short snum;
+       unsigned char ver;
+       unsigned char core;
 };
 
 // Version info
index db4fd9d6c93f51974f9ddaa9c6bd073a1ac49d21..070b2766525a1c49ccc2ad3ba325f65d14d488bb 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -32,7 +32,7 @@
 
 // Global GF(256) tables
 #ifndef GF_LARGE_TABLES
-unsigned char gff_base[] = {
+static const unsigned char gff_base[] = {
        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a,
        0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a,
        0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30,
@@ -61,7 +61,7 @@ unsigned char gff_base[] = {
        0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x01
 };
 
-unsigned char gflog_base[] = {
+static const unsigned char gflog_base[] = {
        0x00, 0xff, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf,
        0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b, 0x04, 0x64, 0xe0, 0x0e,
        0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08,
@@ -90,7 +90,7 @@ unsigned char gflog_base[] = {
        0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf
 };
 #else
-unsigned char gf_mul_table_base[] = {
+static const unsigned char gf_mul_table_base[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -6647,7 +6647,7 @@ unsigned char gf_mul_table_base[] = {
        0xc6, 0x39, 0xfe, 0x01, 0x1d, 0xe2
 };
 
-unsigned char gf_inv_table_base[] = {
+static const unsigned char gf_inv_table_base[] = {
        0x00, 0x01, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, 0xad, 0x9d,
        0xdd, 0x98, 0x3d, 0xaa, 0x5d, 0x96, 0xd8, 0x72, 0xc0, 0x58,
        0xe0, 0x3e, 0x4c, 0x66, 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83,
index baaf20d4305a6ee27455e9c69ad3c552646df2b4..a9fe6abb5f97165ab9cb5d304c365659a771e0db 100644 (file)
@@ -1,8 +1,8 @@
 /**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
+  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -28,9 +28,8 @@
 **********************************************************************/
 #include <limits.h>
 #include "erasure_code.h"
-#include "types.h"
-
 
+#if __x86_64__  || __i386__ || _M_X64 || _M_IX86
 void ec_encode_data_sse(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data,
                        unsigned char **coding)
 {
@@ -40,13 +39,19 @@ void ec_encode_data_sse(int len, int k, int rows, unsigned char *g_tbls, unsigne
                return;
        }
 
-       while (rows >= 4) {
-               gf_4vect_dot_prod_sse(len, k, g_tbls, data, coding);
-               g_tbls += 4 * k * 32;
-               coding += 4;
-               rows -= 4;
+       while (rows >= 6) {
+               gf_6vect_dot_prod_sse(len, k, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
        }
        switch (rows) {
+       case 5:
+               gf_5vect_dot_prod_sse(len, k, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_dot_prod_sse(len, k, g_tbls, data, coding);
+               break;
        case 3:
                gf_3vect_dot_prod_sse(len, k, g_tbls, data, coding);
                break;
@@ -70,13 +75,19 @@ void ec_encode_data_avx(int len, int k, int rows, unsigned char *g_tbls, unsigne
                return;
        }
 
-       while (rows >= 4) {
-               gf_4vect_dot_prod_avx(len, k, g_tbls, data, coding);
-               g_tbls += 4 * k * 32;
-               coding += 4;
-               rows -= 4;
+       while (rows >= 6) {
+               gf_6vect_dot_prod_avx(len, k, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
        }
        switch (rows) {
+       case 5:
+               gf_5vect_dot_prod_avx(len, k, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_dot_prod_avx(len, k, g_tbls, data, coding);
+               break;
        case 3:
                gf_3vect_dot_prod_avx(len, k, g_tbls, data, coding);
                break;
@@ -101,13 +112,19 @@ void ec_encode_data_avx2(int len, int k, int rows, unsigned char *g_tbls, unsign
                return;
        }
 
-       while (rows >= 4) {
-               gf_4vect_dot_prod_avx2(len, k, g_tbls, data, coding);
-               g_tbls += 4 * k * 32;
-               coding += 4;
-               rows -= 4;
+       while (rows >= 6) {
+               gf_6vect_dot_prod_avx2(len, k, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
        }
        switch (rows) {
+       case 5:
+               gf_5vect_dot_prod_avx2(len, k, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_dot_prod_avx2(len, k, g_tbls, data, coding);
+               break;
        case 3:
                gf_3vect_dot_prod_avx2(len, k, g_tbls, data, coding);
                break;
@@ -133,6 +150,10 @@ extern int gf_3vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls,
                                    unsigned char **data, unsigned char **coding);
 extern int gf_4vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls,
                                    unsigned char **data, unsigned char **coding);
+extern int gf_5vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls,
+                                   unsigned char **data, unsigned char **coding);
+extern int gf_6vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls,
+                                   unsigned char **data, unsigned char **coding);
 extern void gf_vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls,
                               unsigned char *src, unsigned char *dest);
 extern void gf_2vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls,
@@ -141,6 +162,10 @@ extern void gf_3vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftb
                                unsigned char *src, unsigned char **dest);
 extern void gf_4vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls,
                                unsigned char *src, unsigned char **dest);
+extern void gf_5vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls,
+                               unsigned char *src, unsigned char **dest);
+extern void gf_6vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls,
+                               unsigned char *src, unsigned char **dest);
 
 void ec_encode_data_avx512(int len, int k, int rows, unsigned char *g_tbls,
                           unsigned char **data, unsigned char **coding)
@@ -151,13 +176,19 @@ void ec_encode_data_avx512(int len, int k, int rows, unsigned char *g_tbls,
                return;
        }
 
-       while (rows >= 4) {
-               gf_4vect_dot_prod_avx512(len, k, g_tbls, data, coding);
-               g_tbls += 4 * k * 32;
-               coding += 4;
-               rows -= 4;
+       while (rows >= 6) {
+               gf_6vect_dot_prod_avx512(len, k, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
        }
        switch (rows) {
+       case 5:
+               gf_5vect_dot_prod_avx512(len, k, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_dot_prod_avx512(len, k, g_tbls, data, coding);
+               break;
        case 3:
                gf_3vect_dot_prod_avx512(len, k, g_tbls, data, coding);
                break;
@@ -180,13 +211,19 @@ void ec_encode_data_update_avx512(int len, int k, int rows, int vec_i, unsigned
                return;
        }
 
-       while (rows >= 4) {
-               gf_4vect_mad_avx512(len, k, vec_i, g_tbls, data, coding);
-               g_tbls += 4 * k * 32;
-               coding += 4;
-               rows -= 4;
+       while (rows >= 6) {
+               gf_6vect_mad_avx512(len, k, vec_i, g_tbls, data, coding);
+               g_tbls += 6 * k * 32;
+               coding += 6;
+               rows -= 6;
        }
        switch (rows) {
+       case 5:
+               gf_5vect_mad_avx512(len, k, vec_i, g_tbls, data, coding);
+               break;
+       case 4:
+               gf_4vect_mad_avx512(len, k, vec_i, g_tbls, data, coding);
+               break;
        case 3:
                gf_3vect_mad_avx512(len, k, vec_i, g_tbls, data, coding);
                break;
@@ -321,11 +358,12 @@ void ec_encode_data_update_avx2(int len, int k, int rows, int vec_i, unsigned ch
 }
 
 #endif //__WORDSIZE == 64 || _WIN64 || __x86_64__
+#endif //__x86_64__  || __i386__ || _M_X64 || _M_IX86
 
 struct slver {
-       UINT16 snum;
-       UINT8 ver;
-       UINT8 core;
+       unsigned short snum;
+       unsigned char ver;
+       unsigned char core;
 };
 
 // Version info
index 152ce66eed699b16f8c6ab17149816c7642c6806..a07f45d6f8278cfd600de21d5c2bb2c35322b8f5 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
 ;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-%ifidn __OUTPUT_FORMAT__, elf64
- %define WRT_OPT               wrt ..plt
-%else
- %define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 %include "multibinary.asm"
 
@@ -87,18 +81,10 @@ mbin_interface gf_vect_mad
 %else
 
  mbin_dispatch_init5 gf_vect_mul, gf_vect_mul_base, gf_vect_mul_sse, gf_vect_mul_avx, gf_vect_mul_avx
-
-%ifdef HAVE_AS_KNOWS_AVX512
-  mbin_dispatch_init6 ec_encode_data, ec_encode_data_base, ec_encode_data_sse, ec_encode_data_avx, ec_encode_data_avx2, ec_encode_data_avx512
-  mbin_dispatch_init6 ec_encode_data_update, ec_encode_data_update_base, ec_encode_data_update_sse, ec_encode_data_update_avx, ec_encode_data_update_avx2, ec_encode_data_update_avx512
-  mbin_dispatch_init6 gf_vect_mad, gf_vect_mad_base, gf_vect_mad_sse, gf_vect_mad_avx, gf_vect_mad_avx2, gf_vect_mad_avx512
-  mbin_dispatch_init6 gf_vect_dot_prod, gf_vect_dot_prod_base, gf_vect_dot_prod_sse, gf_vect_dot_prod_avx, gf_vect_dot_prod_avx2, gf_vect_dot_prod_avx512
-%else
-  mbin_dispatch_init5 ec_encode_data, ec_encode_data_base, ec_encode_data_sse, ec_encode_data_avx, ec_encode_data_avx2
-  mbin_dispatch_init5 ec_encode_data_update, ec_encode_data_update_base, ec_encode_data_update_sse, ec_encode_data_update_avx, ec_encode_data_update_avx2
-  mbin_dispatch_init5 gf_vect_mad, gf_vect_mad_base, gf_vect_mad_sse, gf_vect_mad_avx, gf_vect_mad_avx2
-  mbin_dispatch_init5 gf_vect_dot_prod, gf_vect_dot_prod_base, gf_vect_dot_prod_sse, gf_vect_dot_prod_avx, gf_vect_dot_prod_avx2
-%endif
+ mbin_dispatch_init6 ec_encode_data, ec_encode_data_base, ec_encode_data_sse, ec_encode_data_avx, ec_encode_data_avx2, ec_encode_data_avx512
+ mbin_dispatch_init6 ec_encode_data_update, ec_encode_data_update_base, ec_encode_data_update_sse, ec_encode_data_update_avx, ec_encode_data_update_avx2, ec_encode_data_update_avx512
+ mbin_dispatch_init6 gf_vect_mad, gf_vect_mad_base, gf_vect_mad_sse, gf_vect_mad_avx, gf_vect_mad_avx2, gf_vect_mad_avx512
+ mbin_dispatch_init6 gf_vect_dot_prod, gf_vect_dot_prod_base, gf_vect_dot_prod_sse, gf_vect_dot_prod_avx, gf_vect_dot_prod_avx2, gf_vect_dot_prod_avx512
 %endif
 
 ;;;       func                                 core, ver, snum
index ee9dd3bc3a9f69b2e94a57c89482a1d6e090900b..9587788d8674ad915909ad750f32e549c405673c 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -38,7 +38,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 32
 # define TEST_LEN(m)  ((128*1024 / m) & ~(64-1))
-# define TEST_LOOPS(m)   (100*m)
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 32
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN(m)  ((GT_L3_CACHE / m) & ~(64-1))
-#  define TEST_LOOPS(m)   (10)
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS(m) 1000
-#  endif
 # endif
 #endif
 
 #define MMAX TEST_SOURCES
 #define KMAX TEST_SOURCES
 
+#define BAD_MATRIX -1
+
 typedef unsigned char u8;
 
+void ec_encode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs)
+{
+       ec_init_tables(k, m - k, &a[k * k], g_tbls);
+       ec_encode_data_base(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
+}
+
+int ec_decode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, u8 * src_in_err,
+                  u8 * src_err_list, int nerrs, u8 ** temp_buffs)
+{
+       int i, j, r;
+       u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       u8 *recov[TEST_SOURCES];
+
+       // Construct b by removing error rows
+       for (i = 0, r = 0; i < k; i++, r++) {
+               while (src_in_err[r])
+                       r++;
+               recov[i] = buffs[r];
+               for (j = 0; j < k; j++)
+                       b[k * i + j] = a[k * r + j];
+       }
+
+       if (gf_invert_matrix(b, d, k) < 0)
+               return BAD_MATRIX;
+
+       for (i = 0; i < nerrs; i++)
+               for (j = 0; j < k; j++)
+                       c[k * i + j] = d[k * src_err_list[i] + j];
+
+       // Recover data
+       ec_init_tables(k, nerrs, c, g_tbls);
+       ec_encode_data_base(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs);
+
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
-       int i, j, rtest, m, k, nerrs, r;
+       int i, j, m, k, nerrs, check;
        void *buf;
        u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       u8 a[MMAX * KMAX];
        u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
-       u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-       struct perf start, stop;
+       u8 src_err_list[TEST_SOURCES];
+       struct perf start;
 
        // Pick test parameters
        m = 14;
@@ -112,46 +145,21 @@ int main(int argc, char *argv[])
                        buffs[i][j] = rand();
 
        gf_gen_rs_matrix(a, m, k);
-       ec_init_tables(k, m - k, &a[k * k], g_tbls);
-       ec_encode_data_base(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
 
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               ec_encode_data_base(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, ec_encode_perf(m, k, a, g_tbls, buffs));
        printf("erasure_code_base_encode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m));
 
        // Start decode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r])
-                               r++;
-                       recov[i] = buffs[r];
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix(b, d, k) < 0) {
-                       printf("BAD MATRIX\n");
-                       return -1;
-               }
-
-               for (i = 0; i < nerrs; i++)
-                       for (j = 0; j < k; j++)
-                               c[k * i + j] = d[k * src_err_list[i] + j];
+       BENCHMARK(&start, BENCHMARK_TIME, check =
+                 ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs,
+                                temp_buffs));
 
-               // Recover data
-               ec_init_tables(k, nerrs, c, g_tbls);
-               ec_encode_data_base(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs);
+       if (check == BAD_MATRIX) {
+               printf("BAD MATRIX\n");
+               return check;
        }
-       perf_stop(&stop);
 
        for (i = 0; i < nerrs; i++) {
                if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) {
@@ -161,7 +169,7 @@ int main(int argc, char *argv[])
        }
 
        printf("erasure_code_base_decode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (k + nerrs) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs));
 
        printf("done all: Pass\n");
        return 0;
index 4d85998075a7c56c6bcbe144971e79ee35f668cd..81e1b5778e778d8cbb880302d804ac3659a1eb27 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 2ccf64a05a36ae91a89a7ddb7196895114d65403..da81387b5fdafe25dd7a6fad3d6b48c3afacfcb3 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -38,7 +38,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 32
 # define TEST_LEN(m)  ((128*1024 / m) & ~(64-1))
-# define TEST_LOOPS(m)   (10000*m)
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 32
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN(m)  ((GT_L3_CACHE / m) & ~(64-1))
-#  define TEST_LOOPS(m)   (50*m)
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS(m) 1000
-#  endif
 # endif
 #endif
 
 #define MMAX TEST_SOURCES
 #define KMAX TEST_SOURCES
 
+#define BAD_MATRIX -1
+
 typedef unsigned char u8;
 
+void ec_encode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, struct perf *start)
+{
+       ec_init_tables(k, m - k, &a[k * k], g_tbls);
+       BENCHMARK(start, BENCHMARK_TIME,
+                 ec_encode_data(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]));
+}
+
+int ec_decode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, u8 * src_in_err,
+                  u8 * src_err_list, int nerrs, u8 ** temp_buffs, struct perf *start)
+{
+       int i, j, r;
+       u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       u8 *recov[TEST_SOURCES];
+
+       // Construct b by removing error rows
+       for (i = 0, r = 0; i < k; i++, r++) {
+               while (src_in_err[r])
+                       r++;
+               recov[i] = buffs[r];
+               for (j = 0; j < k; j++)
+                       b[k * i + j] = a[k * r + j];
+       }
+
+       if (gf_invert_matrix(b, d, k) < 0)
+               return BAD_MATRIX;
+
+       for (i = 0; i < nerrs; i++)
+               for (j = 0; j < k; j++)
+                       c[k * i + j] = d[k * src_err_list[i] + j];
+
+       // Recover data
+       ec_init_tables(k, nerrs, c, g_tbls);
+       BENCHMARK(start, BENCHMARK_TIME,
+                 ec_encode_data(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs));
+
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
-       int i, j, rtest, m, k, nerrs, r;
+       int i, j, m, k, nerrs, check;
        void *buf;
        u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       u8 a[MMAX * KMAX];
        u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
-       u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-       struct perf start, stop;
+       u8 src_err_list[TEST_SOURCES];
+       struct perf start;
 
        // Pick test parameters
        m = 14;
@@ -112,46 +147,20 @@ int main(int argc, char *argv[])
                        buffs[i][j] = rand();
 
        gf_gen_rs_matrix(a, m, k);
-       ec_init_tables(k, m - k, &a[k * k], g_tbls);
-       ec_encode_data(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
 
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               ec_encode_data(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
-       }
-       perf_stop(&stop);
+       ec_encode_perf(m, k, a, g_tbls, buffs, &start);
        printf("erasure_code_encode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m));
 
        // Start decode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r])
-                               r++;
-                       recov[i] = buffs[r];
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix(b, d, k) < 0) {
-                       printf("BAD MATRIX\n");
-                       return -1;
-               }
-
-               for (i = 0; i < nerrs; i++)
-                       for (j = 0; j < k; j++)
-                               c[k * i + j] = d[k * src_err_list[i] + j];
+       check = ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs,
+                              temp_buffs, &start);
 
-               // Recover data
-               ec_init_tables(k, nerrs, c, g_tbls);
-               ec_encode_data(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs);
+       if (check == BAD_MATRIX) {
+               printf("BAD MATRIX\n");
+               return check;
        }
-       perf_stop(&stop);
 
        for (i = 0; i < nerrs; i++) {
                if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) {
@@ -161,7 +170,7 @@ int main(int argc, char *argv[])
        }
 
        printf("erasure_code_decode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (k + nerrs) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs));
 
        printf("done all: Pass\n");
        return 0;
diff --git a/ceph/src/isa-l/erasure_code/erasure_code_sse_perf.c b/ceph/src/isa-l/erasure_code/erasure_code_sse_perf.c
deleted file mode 100644 (file)
index 71e3f70..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 32
-# define TEST_LEN(m)  ((128*1024 / m) & ~(64-1))
-# define TEST_LOOPS(m)   (10000*m)
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 32
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN(m)  ((GT_L3_CACHE / m) & ~(64-1))
-#  define TEST_LOOPS(m)   (50*m)
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS(m) 1000
-#  endif
-# endif
-#endif
-
-#define MMAX TEST_SOURCES
-#define KMAX TEST_SOURCES
-
-typedef unsigned char u8;
-
-int main(int argc, char *argv[])
-{
-       int i, j, rtest, m, k, nerrs, r;
-       void *buf;
-       u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
-       u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
-       u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-       struct perf start, stop;
-
-       // Pick test parameters
-       m = 14;
-       k = 10;
-       nerrs = 4;
-       const u8 err_list[] = { 2, 4, 5, 7 };
-
-       printf("erasure_code_sse_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs);
-
-       if (m > MMAX || k > KMAX || nerrs > (m - k)) {
-               printf(" Input test parameter error\n");
-               return -1;
-       }
-
-       memcpy(src_err_list, err_list, nerrs);
-       memset(src_in_err, 0, TEST_SOURCES);
-       for (i = 0; i < nerrs; i++)
-               src_in_err[src_err_list[i]] = 1;
-
-       // Allocate the arrays
-       for (i = 0; i < m; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN(m))) {
-                       printf("alloc error: Fail\n");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       for (i = 0; i < (m - k); i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN(m))) {
-                       printf("alloc error: Fail\n");
-                       return -1;
-               }
-               temp_buffs[i] = buf;
-       }
-
-       // Make random data
-       for (i = 0; i < k; i++)
-               for (j = 0; j < TEST_LEN(m); j++)
-                       buffs[i][j] = rand();
-
-       gf_gen_rs_matrix(a, m, k);
-       ec_init_tables(k, m - k, &a[k * k], g_tbls);
-       ec_encode_data_sse(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
-
-       // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               ec_encode_data_sse(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
-       }
-       perf_stop(&stop);
-       printf("erasure_code_sse_encode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m) * rtest);
-
-       // Start decode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r])
-                               r++;
-                       recov[i] = buffs[r];
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix(b, d, k) < 0) {
-                       printf("BAD MATRIX\n");
-                       return -1;
-               }
-
-               for (i = 0; i < nerrs; i++)
-                       for (j = 0; j < k; j++)
-                               c[k * i + j] = d[k * src_err_list[i] + j];
-
-               // Recover data
-               ec_init_tables(k, nerrs, c, g_tbls);
-               ec_encode_data_sse(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs);
-       }
-       perf_stop(&stop);
-
-       for (i = 0; i < nerrs; i++) {
-               if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) {
-                       printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                       return -1;
-               }
-       }
-
-       printf("erasure_code_sse_decode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (k + nerrs) * rtest);
-
-       printf("done all: Pass\n");
-       return 0;
-}
diff --git a/ceph/src/isa-l/erasure_code/erasure_code_sse_test.c b/ceph/src/isa-l/erasure_code/erasure_code_sse_test.c
deleted file mode 100644 (file)
index 9e2ada2..0000000
+++ /dev/null
@@ -1,764 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "types.h"
-
-#define TEST_LEN 8192
-#define TEST_SIZE (TEST_LEN/2)
-
-#ifndef TEST_SOURCES
-# define TEST_SOURCES  127
-#endif
-#ifndef RANDOMS
-# define RANDOMS 200
-#endif
-
-#define MMAX TEST_SOURCES
-#define KMAX TEST_SOURCES
-
-#define EFENCE_TEST_MIN_SIZE 16
-
-#ifdef EC_ALIGNED_ADDR
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 0
-# define LEN_ALIGN_CHK_B 0     // 0 for aligned only
-#else
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 32
-# define LEN_ALIGN_CHK_B 32    // 0 for aligned only
-#endif
-
-#ifndef TEST_SEED
-#define TEST_SEED 11
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_u8xu8(unsigned char *s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", 0xff & s[j + (i * m)]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-// Generate Random errors
-static void gen_err_list(unsigned char *src_err_list,
-                        unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, int k, int m)
-{
-       int i, err;
-       int nerrs = 0, nsrcerrs = 0;
-
-       for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) {
-               err = 1 & rand();
-               src_in_err[i] = err;
-               if (err) {
-                       src_err_list[nerrs++] = i;
-                       if (i < k) {
-                               nsrcerrs++;
-                       }
-               }
-       }
-       if (nerrs == 0) {       // should have at least one error
-               while ((err = (rand() % KMAX)) >= m) ;
-               src_err_list[nerrs++] = err;
-               src_in_err[err] = 1;
-               if (err < k)
-                       nsrcerrs = 1;
-       }
-       *pnerrs = nerrs;
-       *pnsrcerrs = nsrcerrs;
-       return;
-}
-
-#define NO_INVERT_MATRIX -2
-// Generate decode matrix from encode matrix
-static int gf_gen_decode_matrix(unsigned char *encode_matrix,
-                               unsigned char *decode_matrix,
-                               unsigned char *invert_matrix,
-                               unsigned int *decode_index,
-                               unsigned char *src_err_list,
-                               unsigned char *src_in_err,
-                               int nerrs, int nsrcerrs, int k, int m)
-{
-       int i, j, p;
-       int r;
-       unsigned char *backup, *b, s;
-       int incr = 0;
-
-       b = malloc(MMAX * KMAX);
-       backup = malloc(MMAX * KMAX);
-
-       if (b == NULL || backup == NULL) {
-               printf("Test failure! Error with malloc\n");
-               free(b);
-               free(backup);
-               return -1;
-       }
-       // Construct matrix b by removing error rows
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r])
-                       r++;
-               for (j = 0; j < k; j++) {
-                       b[k * i + j] = encode_matrix[k * r + j];
-                       backup[k * i + j] = encode_matrix[k * r + j];
-               }
-               decode_index[i] = r;
-       }
-       incr = 0;
-       while (gf_invert_matrix(b, invert_matrix, k) < 0) {
-               if (nerrs == (m - k)) {
-                       free(b);
-                       free(backup);
-                       printf("BAD MATRIX\n");
-                       return NO_INVERT_MATRIX;
-               }
-               incr++;
-               memcpy(b, backup, MMAX * KMAX);
-               for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) {
-                       if (src_err_list[i] == (decode_index[k - 1] + incr)) {
-                               // skip the erased parity line
-                               incr++;
-                               continue;
-                       }
-               }
-               if (decode_index[k - 1] + incr >= m) {
-                       free(b);
-                       free(backup);
-                       printf("BAD MATRIX\n");
-                       return NO_INVERT_MATRIX;
-               }
-               decode_index[k - 1] += incr;
-               for (j = 0; j < k; j++)
-                       b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j];
-
-       };
-
-       for (i = 0; i < nsrcerrs; i++) {
-               for (j = 0; j < k; j++) {
-                       decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j];
-               }
-       }
-       /* src_err_list from encode_matrix * invert of b for parity decoding */
-       for (p = nsrcerrs; p < nerrs; p++) {
-               for (i = 0; i < k; i++) {
-                       s = 0;
-                       for (j = 0; j < k; j++)
-                               s ^= gf_mul(invert_matrix[j * k + i],
-                                           encode_matrix[k * src_err_list[p] + j]);
-
-                       decode_matrix[k * p + i] = s;
-               }
-       }
-       free(b);
-       free(backup);
-       return 0;
-}
-
-int main(int argc, char *argv[])
-{
-       int re = 0;
-       int i, j, p, rtest, m, k;
-       int nerrs, nsrcerrs;
-       void *buf;
-       unsigned int decode_index[MMAX];
-       unsigned char *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES];
-       unsigned char *encode_matrix, *decode_matrix, *invert_matrix, *g_tbls;
-       unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES];
-       unsigned char *recov[TEST_SOURCES];
-
-       int rows, align, size;
-       unsigned char *efence_buffs[TEST_SOURCES];
-       unsigned int offset;
-       u8 *ubuffs[TEST_SOURCES];
-       u8 *temp_ubuffs[TEST_SOURCES];
-
-       printf("erasure_code_sse_test: %dx%d ", TEST_SOURCES, TEST_LEN);
-       srand(TEST_SEED);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               temp_buffs[i] = buf;
-       }
-
-       // Test erasure code by encode and recovery
-
-       encode_matrix = malloc(MMAX * KMAX);
-       decode_matrix = malloc(MMAX * KMAX);
-       invert_matrix = malloc(MMAX * KMAX);
-       g_tbls = malloc(KMAX * TEST_SOURCES * 32);
-       if (encode_matrix == NULL || decode_matrix == NULL
-           || invert_matrix == NULL || g_tbls == NULL) {
-               printf("Test failure! Error with malloc\n");
-               return -1;
-       }
-       // Pick a first test
-       m = 9;
-       k = 5;
-       if (m > MMAX || k > KMAX)
-               return -1;
-
-       // Make random data
-       for (i = 0; i < k; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       // Generate encode matrix encode_matrix
-       // The matrix generated by gf_gen_rs_matrix
-       // is not always invertable.
-       gf_gen_rs_matrix(encode_matrix, m, k);
-
-       // Generate g_tbls from encode matrix encode_matrix
-       ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-
-       // Perform matrix dot_prod for EC encoding
-       // using g_tbls from encode matrix encode_matrix
-       ec_encode_data_sse(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]);
-
-       // Choose random buffers to be in erasure
-       memset(src_in_err, 0, TEST_SOURCES);
-       gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-
-       // Generate decode matrix
-       re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                 invert_matrix, decode_index, src_err_list, src_in_err,
-                                 nerrs, nsrcerrs, k, m);
-       if (re != 0) {
-               printf("Fail to gf_gen_decode_matrix\n");
-               return -1;
-       }
-       // Pack recovery array as list of valid sources
-       // Its order must be the same as the order
-       // to generate matrix b in gf_gen_decode_matrix
-       for (i = 0; i < k; i++) {
-               recov[i] = buffs[decode_index[i]];
-       }
-
-       // Recover data
-       ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-       ec_encode_data_sse(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]);
-       for (i = 0; i < nerrs; i++) {
-
-               if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) {
-                       printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs);
-                       printf(" - erase list = ");
-                       for (j = 0; j < nerrs; j++)
-                               printf(" %d", src_err_list[j]);
-                       printf(" - Index = ");
-                       for (p = 0; p < k; p++)
-                               printf(" %d", decode_index[p]);
-                       printf("\nencode_matrix:\n");
-                       dump_u8xu8((u8 *) encode_matrix, m, k);
-                       printf("inv b:\n");
-                       dump_u8xu8((u8 *) invert_matrix, k, k);
-                       printf("\ndecode_matrix:\n");
-                       dump_u8xu8((u8 *) decode_matrix, m, k);
-                       printf("recov %d:", src_err_list[i]);
-                       dump(temp_buffs[k + i], 25);
-                       printf("orig   :");
-                       dump(buffs[src_err_list[i]], 25);
-                       return -1;
-               }
-       }
-
-       // Pick a first test
-       m = 9;
-       k = 5;
-       if (m > MMAX || k > KMAX)
-               return -1;
-
-       // Make random data
-       for (i = 0; i < k; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       // The matrix generated by gf_gen_cauchy1_matrix
-       // is always invertable.
-       gf_gen_cauchy1_matrix(encode_matrix, m, k);
-
-       // Generate g_tbls from encode matrix encode_matrix
-       ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-
-       // Perform matrix dot_prod for EC encoding
-       // using g_tbls from encode matrix encode_matrix
-       ec_encode_data_sse(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]);
-
-       // Choose random buffers to be in erasure
-       memset(src_in_err, 0, TEST_SOURCES);
-       gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-
-       // Generate decode matrix
-       re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                 invert_matrix, decode_index, src_err_list, src_in_err,
-                                 nerrs, nsrcerrs, k, m);
-       if (re != 0) {
-               printf("Fail to gf_gen_decode_matrix\n");
-               return -1;
-       }
-       // Pack recovery array as list of valid sources
-       // Its order must be the same as the order
-       // to generate matrix b in gf_gen_decode_matrix
-       for (i = 0; i < k; i++) {
-               recov[i] = buffs[decode_index[i]];
-       }
-
-       // Recover data
-       ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-       ec_encode_data_sse(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]);
-       for (i = 0; i < nerrs; i++) {
-
-               if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) {
-                       printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs);
-                       printf(" - erase list = ");
-                       for (j = 0; j < nerrs; j++)
-                               printf(" %d", src_err_list[j]);
-                       printf(" - Index = ");
-                       for (p = 0; p < k; p++)
-                               printf(" %d", decode_index[p]);
-                       printf("\nencode_matrix:\n");
-                       dump_u8xu8((u8 *) encode_matrix, m, k);
-                       printf("inv b:\n");
-                       dump_u8xu8((u8 *) invert_matrix, k, k);
-                       printf("\ndecode_matrix:\n");
-                       dump_u8xu8((u8 *) decode_matrix, m, k);
-                       printf("recov %d:", src_err_list[i]);
-                       dump(temp_buffs[k + i], 25);
-                       printf("orig   :");
-                       dump(buffs[src_err_list[i]], 25);
-                       return -1;
-               }
-       }
-
-       // Do more random tests
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               while ((m = (rand() % MMAX)) < 2) ;
-               while ((k = (rand() % KMAX)) >= m || k < 1) ;
-
-               if (m > MMAX || k > KMAX)
-                       continue;
-
-               // Make random data
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               // The matrix generated by gf_gen_cauchy1_matrix
-               // is always invertable.
-               gf_gen_cauchy1_matrix(encode_matrix, m, k);
-
-               // Make parity vects
-               // Generate g_tbls from encode matrix a
-               ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-               // Perform matrix dot_prod for EC encoding
-               // using g_tbls from encode matrix a
-               ec_encode_data_sse(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]);
-
-               // Random errors
-               memset(src_in_err, 0, TEST_SOURCES);
-               gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-
-               // Generate decode matrix
-               re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                         invert_matrix, decode_index, src_err_list,
-                                         src_in_err, nerrs, nsrcerrs, k, m);
-               if (re != 0) {
-                       printf("Fail to gf_gen_decode_matrix\n");
-                       return -1;
-               }
-               // Pack recovery array as list of valid sources
-               // Its order must be the same as the order
-               // to generate matrix b in gf_gen_decode_matrix
-               for (i = 0; i < k; i++) {
-                       recov[i] = buffs[decode_index[i]];
-               }
-
-               // Recover data
-               ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-               ec_encode_data_sse(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]);
-
-               for (i = 0; i < nerrs; i++) {
-
-                       if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) {
-                               printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                               printf(" - erase list = ");
-                               for (j = 0; j < nerrs; j++)
-                                       printf(" %d", src_err_list[j]);
-                               printf(" - Index = ");
-                               for (p = 0; p < k; p++)
-                                       printf(" %d", decode_index[p]);
-                               printf("\nencode_matrix:\n");
-                               dump_u8xu8((u8 *) encode_matrix, m, k);
-                               printf("inv b:\n");
-                               dump_u8xu8((u8 *) invert_matrix, k, k);
-                               printf("\ndecode_matrix:\n");
-                               dump_u8xu8((u8 *) decode_matrix, m, k);
-                               printf("orig data:\n");
-                               dump_matrix(buffs, m, 25);
-                               printf("orig   :");
-                               dump(buffs[src_err_list[i]], 25);
-                               printf("recov %d:", src_err_list[i]);
-                               dump(temp_buffs[k + i], 25);
-                               return -1;
-                       }
-               }
-               putchar('.');
-       }
-
-       // Run tests at end of buffer for Electric Fence
-       k = 16;
-       align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16;
-       if (k > KMAX)
-               return -1;
-
-       for (rows = 1; rows <= 16; rows++) {
-               m = k + rows;
-               if (m > MMAX)
-                       return -1;
-
-               // Make random data
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               for (size = EFENCE_TEST_MIN_SIZE; size <= TEST_SIZE; size += align) {
-                       for (i = 0; i < m; i++) {       // Line up TEST_SIZE from end
-                               efence_buffs[i] = buffs[i] + TEST_LEN - size;
-                       }
-
-                       // The matrix generated by gf_gen_cauchy1_matrix
-                       // is always invertable.
-                       gf_gen_cauchy1_matrix(encode_matrix, m, k);
-
-                       // Make parity vects
-                       // Generate g_tbls from encode matrix a
-                       ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-                       // Perform matrix dot_prod for EC encoding
-                       // using g_tbls from encode matrix a
-                       ec_encode_data_sse(size, k, m - k, g_tbls, efence_buffs,
-                                          &efence_buffs[k]);
-
-                       // Random errors
-                       memset(src_in_err, 0, TEST_SOURCES);
-                       gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-
-                       // Generate decode matrix
-                       re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                                 invert_matrix, decode_index, src_err_list,
-                                                 src_in_err, nerrs, nsrcerrs, k, m);
-                       if (re != 0) {
-                               printf("Fail to gf_gen_decode_matrix\n");
-                               return -1;
-                       }
-                       // Pack recovery array as list of valid sources
-                       // Its order must be the same as the order
-                       // to generate matrix b in gf_gen_decode_matrix
-                       for (i = 0; i < k; i++) {
-                               recov[i] = efence_buffs[decode_index[i]];
-                       }
-
-                       // Recover data
-                       ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-                       ec_encode_data_sse(size, k, nerrs, g_tbls, recov, &temp_buffs[k]);
-
-                       for (i = 0; i < nerrs; i++) {
-
-                               if (0 !=
-                                   memcmp(temp_buffs[k + i], efence_buffs[src_err_list[i]],
-                                          size)) {
-                                       printf("Efence: Fail error recovery (%d, %d, %d)\n", m,
-                                              k, nerrs);
-
-                                       printf("size = %d\n", size);
-
-                                       printf("Test erase list = ");
-                                       for (j = 0; j < nerrs; j++)
-                                               printf(" %d", src_err_list[j]);
-                                       printf(" - Index = ");
-                                       for (p = 0; p < k; p++)
-                                               printf(" %d", decode_index[p]);
-                                       printf("\nencode_matrix:\n");
-                                       dump_u8xu8((u8 *) encode_matrix, m, k);
-                                       printf("inv b:\n");
-                                       dump_u8xu8((u8 *) invert_matrix, k, k);
-                                       printf("\ndecode_matrix:\n");
-                                       dump_u8xu8((u8 *) decode_matrix, m, k);
-
-                                       printf("recov %d:", src_err_list[i]);
-                                       dump(temp_buffs[k + i], align);
-                                       printf("orig   :");
-                                       dump(efence_buffs[src_err_list[i]], align);
-                                       return -1;
-                               }
-                       }
-               }
-
-       }
-
-       // Test rand ptr alignment if available
-
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               while ((m = (rand() % MMAX)) < 2) ;
-               while ((k = (rand() % KMAX)) >= m || k < 1) ;
-
-               if (m > MMAX || k > KMAX)
-                       continue;
-
-               size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15;
-
-               offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B;
-               // Add random offsets
-               for (i = 0; i < m; i++) {
-                       memset(buffs[i], 0, TEST_LEN);  // zero pad to check write-over
-                       memset(temp_buffs[i], 0, TEST_LEN);     // zero pad to check write-over
-                       ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset));
-                       temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset));
-               }
-
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < size; j++)
-                               ubuffs[i][j] = rand();
-
-               // The matrix generated by gf_gen_cauchy1_matrix
-               // is always invertable.
-               gf_gen_cauchy1_matrix(encode_matrix, m, k);
-
-               // Make parity vects
-               // Generate g_tbls from encode matrix a
-               ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-               // Perform matrix dot_prod for EC encoding
-               // using g_tbls from encode matrix a
-               ec_encode_data_sse(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]);
-
-               // Random errors
-               memset(src_in_err, 0, TEST_SOURCES);
-               gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-
-               // Generate decode matrix
-               re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                         invert_matrix, decode_index, src_err_list,
-                                         src_in_err, nerrs, nsrcerrs, k, m);
-               if (re != 0) {
-                       printf("Fail to gf_gen_decode_matrix\n");
-                       return -1;
-               }
-               // Pack recovery array as list of valid sources
-               // Its order must be the same as the order
-               // to generate matrix b in gf_gen_decode_matrix
-               for (i = 0; i < k; i++) {
-                       recov[i] = ubuffs[decode_index[i]];
-               }
-
-               // Recover data
-               ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-               ec_encode_data_sse(size, k, nerrs, g_tbls, recov, &temp_ubuffs[k]);
-
-               for (i = 0; i < nerrs; i++) {
-
-                       if (0 != memcmp(temp_ubuffs[k + i], ubuffs[src_err_list[i]], size)) {
-                               printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                               printf(" - erase list = ");
-                               for (j = 0; j < nerrs; j++)
-                                       printf(" %d", src_err_list[j]);
-                               printf(" - Index = ");
-                               for (p = 0; p < k; p++)
-                                       printf(" %d", decode_index[p]);
-                               printf("\nencode_matrix:\n");
-                               dump_u8xu8((unsigned char *)encode_matrix, m, k);
-                               printf("inv b:\n");
-                               dump_u8xu8((unsigned char *)invert_matrix, k, k);
-                               printf("\ndecode_matrix:\n");
-                               dump_u8xu8((unsigned char *)decode_matrix, m, k);
-                               printf("orig data:\n");
-                               dump_matrix(ubuffs, m, 25);
-                               printf("orig   :");
-                               dump(ubuffs[src_err_list[i]], 25);
-                               printf("recov %d:", src_err_list[i]);
-                               dump(temp_ubuffs[k + i], 25);
-                               return -1;
-                       }
-               }
-
-               // Confirm that padding around dests is unchanged
-               memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B);      // Make reference zero buff
-
-               for (i = 0; i < m; i++) {
-
-                       offset = ubuffs[i] - buffs[i];
-
-                       if (memcmp(buffs[i], temp_buffs[0], offset)) {
-                               printf("Fail rand ualign encode pad start\n");
-                               return -1;
-                       }
-                       if (memcmp
-                           (buffs[i] + offset + size, temp_buffs[0],
-                            PTR_ALIGN_CHK_B - offset)) {
-                               printf("Fail rand ualign encode pad end\n");
-                               return -1;
-                       }
-               }
-
-               for (i = 0; i < nerrs; i++) {
-
-                       offset = temp_ubuffs[k + i] - temp_buffs[k + i];
-                       if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) {
-                               printf("Fail rand ualign decode pad start\n");
-                               return -1;
-                       }
-                       if (memcmp
-                           (temp_buffs[k + i] + offset + size, temp_buffs[0],
-                            PTR_ALIGN_CHK_B - offset)) {
-                               printf("Fail rand ualign decode pad end\n");
-                               return -1;
-                       }
-               }
-
-               putchar('.');
-       }
-
-       // Test size alignment
-
-       align = (LEN_ALIGN_CHK_B != 0) ? 13 : 16;
-
-       for (size = TEST_LEN; size > 0; size -= align) {
-               while ((m = (rand() % MMAX)) < 2) ;
-               while ((k = (rand() % KMAX)) >= m || k < 1) ;
-
-               if (m > MMAX || k > KMAX)
-                       continue;
-
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < size; j++)
-                               buffs[i][j] = rand();
-
-               // The matrix generated by gf_gen_cauchy1_matrix
-               // is always invertable.
-               gf_gen_cauchy1_matrix(encode_matrix, m, k);
-
-               // Make parity vects
-               // Generate g_tbls from encode matrix a
-               ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls);
-               // Perform matrix dot_prod for EC encoding
-               // using g_tbls from encode matrix a
-               ec_encode_data_sse(size, k, m - k, g_tbls, buffs, &buffs[k]);
-
-               // Random errors
-               memset(src_in_err, 0, TEST_SOURCES);
-               gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m);
-               // Generate decode matrix
-               re = gf_gen_decode_matrix(encode_matrix, decode_matrix,
-                                         invert_matrix, decode_index, src_err_list,
-                                         src_in_err, nerrs, nsrcerrs, k, m);
-               if (re != 0) {
-                       printf("Fail to gf_gen_decode_matrix\n");
-                       return -1;
-               }
-               // Pack recovery array as list of valid sources
-               // Its order must be the same as the order
-               // to generate matrix b in gf_gen_decode_matrix
-               for (i = 0; i < k; i++) {
-                       recov[i] = buffs[decode_index[i]];
-               }
-
-               // Recover data
-               ec_init_tables(k, nerrs, decode_matrix, g_tbls);
-               ec_encode_data_sse(size, k, nerrs, g_tbls, recov, &temp_buffs[k]);
-
-               for (i = 0; i < nerrs; i++) {
-
-                       if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], size)) {
-                               printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                               printf(" - erase list = ");
-                               for (j = 0; j < nerrs; j++)
-                                       printf(" %d", src_err_list[j]);
-                               printf(" - Index = ");
-                               for (p = 0; p < k; p++)
-                                       printf(" %d", decode_index[p]);
-                               printf("\nencode_matrix:\n");
-                               dump_u8xu8((unsigned char *)encode_matrix, m, k);
-                               printf("inv b:\n");
-                               dump_u8xu8((unsigned char *)invert_matrix, k, k);
-                               printf("\ndecode_matrix:\n");
-                               dump_u8xu8((unsigned char *)decode_matrix, m, k);
-                               printf("orig data:\n");
-                               dump_matrix(buffs, m, 25);
-                               printf("orig   :");
-                               dump(buffs[src_err_list[i]], 25);
-                               printf("recov %d:", src_err_list[i]);
-                               dump(temp_buffs[k + i], 25);
-                               return -1;
-                       }
-               }
-       }
-
-       printf("done EC tests: Pass\n");
-       return 0;
-}
index 7fe3208cd681230a481b5df04e2616f93b6ac33e..a1736afd5f071a5716006f9331fe781688319745 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -47,6 +47,7 @@
 #define KMAX TEST_SOURCES
 
 #define EFENCE_TEST_MIN_SIZE 16
+#define EFENCE_TEST_MAX_SIZE EFENCE_TEST_MIN_SIZE + 0x100
 
 #ifdef EC_ALIGNED_ADDR
 // Define power of 2 range to check ptr, len alignment
@@ -489,7 +490,7 @@ int main(int argc, char *argv[])
                        for (j = 0; j < TEST_LEN; j++)
                                buffs[i][j] = rand();
 
-               for (size = EFENCE_TEST_MIN_SIZE; size <= TEST_SIZE; size += align) {
+               for (size = EFENCE_TEST_MIN_SIZE; size <= EFENCE_TEST_MAX_SIZE; size += align) {
                        for (i = 0; i < m; i++) {       // Line up TEST_SIZE from end
                                efence_buffs[i] = buffs[i] + TEST_LEN - size;
                        }
index 653fa98599e9f26fbe6f10ae8b33d3202f6db150..909e894149b98e71222eaafc6900f885a248209e 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -53,7 +53,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 32
 # define TEST_LEN(m)  ((128*1024 / m) & ~(64-1))
-# define TEST_LOOPS(m)   (10000*m)
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 32
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN(m)  ((GT_L3_CACHE / m) & ~(64-1))
-#  define TEST_LOOPS(m)   (50*m)
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS(m) 1000
-#  endif
 # endif
 #endif
 
@@ -87,17 +82,67 @@ void dump(unsigned char *buf, int len)
        printf("\n");
 }
 
+void encode_update_test_ref(int m, int k, u8 * g_tbls, u8 ** buffs, u8 * a)
+{
+       ec_init_tables(k, m - k, &a[k * k], g_tbls);
+       REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
+}
+
+void encode_update_test(int m, int k, u8 * g_tbls, u8 ** perf_update_buffs, u8 * a)
+{
+       int i;
+
+       // Make parity vects
+       ec_init_tables(k, m - k, &a[k * k], g_tbls);
+       for (i = 0; i < k; i++) {
+               FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls,
+                                   perf_update_buffs[i], &perf_update_buffs[k]);
+       }
+}
+
+int decode_test(int m, int k, u8 ** update_buffs, u8 ** recov, u8 * a, u8 * src_in_err,
+               u8 * src_err_list, int nerrs, u8 * g_tbls, u8 ** perf_update_buffs)
+{
+       int i, j, r;
+       u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       // Construct b by removing error rows
+       for (i = 0, r = 0; i < k; i++, r++) {
+               while (src_in_err[r])
+                       r++;
+               recov[i] = update_buffs[r];
+               for (j = 0; j < k; j++)
+                       b[k * i + j] = a[k * r + j];
+       }
+
+       if (gf_invert_matrix(b, d, k) < 0) {
+               printf("BAD MATRIX\n");
+               return -1;
+       }
+
+       for (i = 0; i < nerrs; i++)
+               for (j = 0; j < k; j++)
+                       c[k * i + j] = d[k * src_err_list[i] + j];
+
+       // Recover data
+       ec_init_tables(k, nerrs, c, g_tbls);
+       for (i = 0; i < k; i++) {
+               FUNCTION_UNDER_TEST(TEST_LEN(m), k, nerrs, i, g_tbls, recov[i],
+                                   perf_update_buffs);
+       }
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
-       int i, j, rtest, m, k, nerrs, r;
+       int i, j, check, m, k, nerrs;
        void *buf;
        u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES];
        u8 *update_buffs[TEST_SOURCES];
        u8 *perf_update_buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX];
+       u8 a[MMAX * KMAX];
        u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
        u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-       struct perf start, stop;
+       struct perf start;
 
        // Pick test parameters
        k = 10;
@@ -160,13 +205,9 @@ int main(int argc, char *argv[])
                }
 
        gf_gen_rs_matrix(a, m, k);
-       ec_init_tables(k, m - k, &a[k * k], g_tbls);
-       REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
 
-       for (i = 0; i < k; i++) {
-               FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, update_buffs[i],
-                                   &update_buffs[k]);
-       }
+       encode_update_test_ref(m, k, g_tbls, buffs, a);
+       encode_update_test(m, k, g_tbls, update_buffs, a);
        for (i = 0; i < m - k; i++) {
                if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN(m))) {
                        printf("\nupdate_buffs%d  :", i);
@@ -178,58 +219,34 @@ int main(int argc, char *argv[])
        }
 
 #ifdef DO_REF_PERF
-       REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, encode_update_test_ref(m, k, g_tbls, buffs, a));
        printf(xstr(REF_FUNCTION) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m));
 #endif
-       for (i = 0; i < k; i++) {
-               FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, perf_update_buffs[i],
-                                   &perf_update_buffs[k]);
-       }
+
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               for (i = 0; i < k; i++) {
-                       FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls,
-                                           perf_update_buffs[i], &perf_update_buffs[k]);
-               }
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 encode_update_test(m, k, g_tbls, perf_update_buffs, a));
        printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m));
 
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               ec_init_tables(k, m - k, &a[k * k], g_tbls);
-               FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0],
-                                   &perf_update_buffs[k]);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 // Make parity vects
+                 ec_init_tables(k, m - k, &a[k * k], g_tbls);
+                 FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0],
+                                     &perf_update_buffs[k]));
        printf(xstr(FUNCTION_UNDER_TEST) "_single_src" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m - k + 1) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m - k + 1));
 
        // Start encode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Make parity vects
-               FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0],
-                                   &perf_update_buffs[k]);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 // Make parity vects
+                 FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0],
+                                     &perf_update_buffs[k]));
        printf(xstr(FUNCTION_UNDER_TEST) "_single_src_simple" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (m - k + 1) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (m - k + 1));
 
        for (i = k; i < m; i++) {
                memset(update_buffs[i], 0, TEST_LEN(m));        // initialize the destination buffer to be zero for update function
@@ -238,68 +255,26 @@ int main(int argc, char *argv[])
                FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, update_buffs[i],
                                    &update_buffs[k]);
        }
-       // Construct b by removing error rows
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r])
-                       r++;
-               recov[i] = update_buffs[r];
-               for (j = 0; j < k; j++)
-                       b[k * i + j] = a[k * r + j];
-       }
 
-       if (gf_invert_matrix(b, d, k) < 0) {
-               printf("BAD MATRIX\n");
+       decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list,
+                   nerrs, g_tbls, temp_buffs);
+       BENCHMARK(&start, BENCHMARK_TIME, check =
+                 decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list,
+                             nerrs, g_tbls, perf_update_buffs));
+       if (check) {
+               printf("BAD_MATRIX\n");
                return -1;
        }
 
-       for (i = 0; i < nerrs; i++)
-               for (j = 0; j < k; j++)
-                       c[k * i + j] = d[k * src_err_list[i] + j];
-
-       // Recover data
-       ec_init_tables(k, nerrs, c, g_tbls);
-       for (i = 0; i < k; i++) {
-               FUNCTION_UNDER_TEST(TEST_LEN(m), k, nerrs, i, g_tbls, recov[i], temp_buffs);
-       }
-       // Start decode test
-       perf_start(&start);
-       for (rtest = 0; rtest < TEST_LOOPS(m); rtest++) {
-               // Construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r])
-                               r++;
-                       recov[i] = update_buffs[r];
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix(b, d, k) < 0) {
-                       printf("BAD MATRIX\n");
-                       return -1;
-               }
-
-               for (i = 0; i < nerrs; i++)
-                       for (j = 0; j < k; j++)
-                               c[k * i + j] = d[k * src_err_list[i] + j];
-
-               // Recover data
-               ec_init_tables(k, nerrs, c, g_tbls);
-               for (i = 0; i < k; i++) {
-                       FUNCTION_UNDER_TEST(TEST_LEN(m), k, nerrs, i, g_tbls, recov[i],
-                                           perf_update_buffs);
-               }
-       }
-       perf_stop(&stop);
-
        for (i = 0; i < nerrs; i++) {
                if (0 != memcmp(temp_buffs[i], update_buffs[src_err_list[i]], TEST_LEN(m))) {
-                       printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
+                       printf("Fail error recovery (%d, %d, %d) - \n", m, k, nerrs);
                        return -1;
                }
        }
 
        printf(xstr(FUNCTION_UNDER_TEST) "_decode" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN(m)) * (k + nerrs) * rtest);
+       perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs));
 
        printf("done all: Pass\n");
        return 0;
index a21ff5a6f9d88dabdc372318dd3d7427bfe43442..f30a6a29b1bd987d5c9005b5a7dd0fe6806b23fa 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -56,6 +56,8 @@
 #define MMAX TEST_SOURCES
 #define KMAX TEST_SOURCES
 
+#define EFENCE_TEST_MAX_SIZE 0x100
+
 #ifdef EC_ALIGNED_ADDR
 // Define power of 2 range to check ptr, len alignment
 # define PTR_ALIGN_CHK_B 0
@@ -285,7 +287,7 @@ int main(int argc, char *argv[])
                return -1;
        }
        // Pick a first test
-       m = 15;
+       m = 14;
        k = 10;
        if (m > MMAX || k > KMAX)
                return -1;
@@ -592,7 +594,7 @@ int main(int argc, char *argv[])
                        }
                }
 
-               for (size = 0; size <= TEST_SIZE; size += align) {
+               for (size = 0; size <= EFENCE_TEST_MAX_SIZE; size += align) {
                        for (i = 0; i < m; i++) {       // Line up TEST_SIZE from end
                                efence_buffs[i] = buffs[i] + TEST_LEN - size;
                                efence_update_buffs[i] = update_buffs[i] + TEST_LEN - size;
diff --git a/ceph/src/isa-l/erasure_code/gen_rs_matrix_limits.c b/ceph/src/isa-l/erasure_code/gen_rs_matrix_limits.c
new file mode 100644 (file)
index 0000000..8506148
--- /dev/null
@@ -0,0 +1,115 @@
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include "erasure_code.h"
+
+#define MAX_CHECK 63           /* Size is limited by using uint64_t to represent subsets */
+#define M_MAX 0x20
+#define K_MAX 0x10
+#define ROWS M_MAX
+#define COLS K_MAX
+
+static inline int min(int a, int b)
+{
+       if (a <= b)
+               return a;
+       else
+               return b;
+}
+
+void gen_sub_matrix(unsigned char *out_matrix, int dim, unsigned char *in_matrix, int rows,
+                   int cols, uint64_t row_indicator, uint64_t col_indicator)
+{
+       int i, j, r, s;
+
+       for (i = 0, r = 0; i < rows; i++) {
+               if (!(row_indicator & ((uint64_t) 1 << i)))
+                       continue;
+
+               for (j = 0, s = 0; j < cols; j++) {
+                       if (!(col_indicator & ((uint64_t) 1 << j)))
+                               continue;
+                       out_matrix[dim * r + s] = in_matrix[cols * i + j];
+                       s++;
+               }
+               r++;
+       }
+}
+
+/* Gosper's Hack */
+uint64_t next_subset(uint64_t * subset, uint64_t element_count, uint64_t subsize)
+{
+       uint64_t tmp1 = *subset & -*subset;
+       uint64_t tmp2 = *subset + tmp1;
+       *subset = (((*subset ^ tmp2) >> 2) / tmp1) | tmp2;
+       if (*subset & (((uint64_t) 1 << element_count))) {
+               /* Overflow on last subset */
+               *subset = ((uint64_t) 1 << subsize) - 1;
+               return 1;
+       }
+
+       return 0;
+}
+
+int are_submatrices_singular(unsigned char *vmatrix, int rows, int cols)
+{
+       unsigned char matrix[COLS * COLS];
+       unsigned char invert_matrix[COLS * COLS];
+       uint64_t row_indicator, col_indicator, subset_init, subsize;
+
+       /* Check all square subsize x subsize submatrices of the rows x cols
+        * vmatrix for singularity*/
+       for (subsize = 1; subsize <= min(rows, cols); subsize++) {
+               subset_init = (1 << subsize) - 1;
+               col_indicator = subset_init;
+               do {
+                       row_indicator = subset_init;
+                       do {
+                               gen_sub_matrix(matrix, subsize, vmatrix, rows,
+                                              cols, row_indicator, col_indicator);
+                               if (gf_invert_matrix(matrix, invert_matrix, subsize))
+                                       return 1;
+
+                       } while (next_subset(&row_indicator, rows, subsize) == 0);
+               } while (next_subset(&col_indicator, cols, subsize) == 0);
+       }
+
+       return 0;
+}
+
+int main(int argc, char **argv)
+{
+       unsigned char vmatrix[(ROWS + COLS) * COLS];
+       int rows, cols;
+
+       if (K_MAX > MAX_CHECK) {
+               printf("K_MAX too large for this test\n");
+               return 0;
+       }
+       if (M_MAX > MAX_CHECK) {
+               printf("M_MAX too large for this test\n");
+               return 0;
+       }
+       if (M_MAX < K_MAX) {
+               printf("M_MAX must be smaller than K_MAX");
+               return 0;
+       }
+
+       printf("Checking gen_rs_matrix for k <= %d and m <= %d.\n", K_MAX, M_MAX);
+       printf("gen_rs_matrix creates erasure codes for:\n");
+
+       for (cols = 1; cols <= K_MAX; cols++) {
+               for (rows = 1; rows <= M_MAX - cols; rows++) {
+                       gf_gen_rs_matrix(vmatrix, rows + cols, cols);
+
+                       /* Verify the Vandermonde portion of vmatrix contains no
+                        * singular submatrix */
+                       if (are_submatrices_singular(&vmatrix[cols * cols], rows, cols))
+                               break;
+
+               }
+               printf("   k = %2d, m <= %2d \n", cols, rows + cols - 1);
+
+       }
+       return 0;
+}
index b905f01c928a0a9acc08088ef03120544a670ef6..6b68d93f59e17aa934f236395c9c80b4189bd2ee 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -238,7 +238,7 @@ section .text
 %endif
 
 align 16
-global gf_2vect_dot_prod_avx:function
+global gf_2vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 
 func(gf_2vect_dot_prod_avx)
        FUNC_SAVE
index 2c9fa71d9730827312620a3e0b7de9a08913dd25..db37b0e2e7b6ac34e56c4685ed226095dddc756d 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -248,7 +248,7 @@ section .text
 %endif
 
 align 16
-global gf_2vect_dot_prod_avx2:function
+global gf_2vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 
 func(gf_2vect_dot_prod_avx2)
        FUNC_SAVE
index bf46bff96b2d9c59e4b028fca66eee7eee1e1d50..470051d695985827ec71570abfecf34853cf24f3 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -160,7 +160,7 @@ default rel
 section .text
 
 align 16
-global gf_2vect_dot_prod_avx512:function
+global gf_2vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_2vect_dot_prod_avx512)
        FUNC_SAVE
        sub     len, 64
index 9f543368777a9c8d3b9be1b6b2c4ea1d6d2e8fdc..05a0c28a4cc5ffde33eb4e4bff5f363b068f6a5f 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -238,7 +238,7 @@ section .text
 %endif
 
 align 16
-global gf_2vect_dot_prod_sse:function
+global gf_2vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 
 func(gf_2vect_dot_prod_sse)
        FUNC_SAVE
diff --git a/ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_2vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index 0ee4bd5..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_2vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g1[TEST_SOURCES], g2[TEST_SOURCES], g_tbls[2 * TEST_SOURCES * 32];
-       u8 *dest1, *dest2, *dest_ref1, *dest_ref2, *dest_ptrs[2];
-       u8 *buffs[TEST_SOURCES];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref2 = buf;
-
-       dest_ptrs[0] = dest1;
-       dest_ptrs[1] = dest2;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest1, 0, TEST_LEN);
-       memset(dest2, 0, TEST_LEN);
-       memset(dest_ref1, 0, TEST_LEN);
-       memset(dest_ref2, 0, TEST_LEN);
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               g1[i] = rand();
-               g2[i] = rand();
-       }
-
-       for (j = 0; j < TEST_SOURCES; j++) {
-               gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-               gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-       }
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES], buffs,
-                             dest_ref2);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS / 100; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES],
-                                     buffs, dest_ref2);
-       }
-       perf_stop(&stop);
-       printf("gf_2vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 2) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 2) * i);
-
-       if (0 != memcmp(dest_ref1, dest1, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref1, 25);
-               printf("dprod_dut:");
-               dump(dest1, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref2, dest2, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test2\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref2, 25);
-               printf("dprod_dut:");
-               dump(dest2, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index 5c88f54b3ae089f33e1cbe0ed61e8f260cdc6e30..f4fd9d0efed9dd8eb20e32d3a1aa56218f0243a3 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index c5fbf7ae3f8512259d61d5dc6ce08835b3e416da..fcf3a75456a1a5c3e3922deeea25f57eaa3327d7 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -155,7 +155,7 @@ section .text
 
 
 align 16
-global gf_2vect_mad_avx:function
+global gf_2vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 
 func(gf_2vect_mad_avx)
        FUNC_SAVE
index 00d8345ed5671470de2dd912f382a8d598e50926..0e77ebef4f654d65b12ec01ec833a98bbeade292 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -163,7 +163,7 @@ section .text
 %define xtmpd2  ymm9
 
 align 16
-global gf_2vect_mad_avx2:function
+global gf_2vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 
 func(gf_2vect_mad_avx2)
        FUNC_SAVE
index e535faf60a7d344853dd7595a2a8c858e76914f1..6d972bba5e3dc741668b665e38158a9aa11ca613 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -149,7 +149,7 @@ section .text
 %define xmask0f   zmm14
 
 align 16
-global gf_2vect_mad_avx512:function
+global gf_2vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_2vect_mad_avx512)
        FUNC_SAVE
        sub     len, 64
index 50e4f6177abdc3738db52356eae5dbc1812cb6f1..7ee1b249a937d6d95e9c740c77edc1b327d4d118 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -154,7 +154,7 @@ section .text
 
 
 align 16
-global gf_2vect_mad_sse:function
+global gf_2vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_2vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index 191129da0b884e55f69ae4b13b83e04266635dbb..b006cf13a87225b453f1d87e7c9c412d0c9eed45 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -261,7 +261,7 @@ section .text
 %endif
 
 align 16
-global gf_3vect_dot_prod_avx:function
+global gf_3vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_dot_prod_avx)
        FUNC_SAVE
        SLDR    len, len_m
index d3255257d31b6d5317f0a31561a46b63b98b83bb..38dddcf21e10da1e4c21d81cd3b8d7c18b5f9f3b 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -269,7 +269,7 @@ section .text
 %endif
 
 align 16
-global gf_3vect_dot_prod_avx2:function
+global gf_3vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_dot_prod_avx2)
        FUNC_SAVE
        SLDR    len, len_m
index cb798477dd88819cf75228ddccf84f76d64df90d..057cd3730fb7cbcdafd6bc9f2fa644ebc6eeb9ee 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -173,7 +173,7 @@ default rel
 section .text
 
 align 16
-global gf_3vect_dot_prod_avx512:function
+global gf_3vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_dot_prod_avx512)
        FUNC_SAVE
        sub     len, 64
index 208aa4a397c06085e1926369ac3f3c65cfd20a52..da0bdf920d884bbd776638baed7ffdb8f597591d 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -261,7 +261,7 @@ section .text
 %endif
 
 align 16
-global gf_3vect_dot_prod_sse:function
+global gf_3vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_dot_prod_sse)
        FUNC_SAVE
        SLDR    len, len_m
diff --git a/ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_3vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index 9d36c09..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_3vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g1[TEST_SOURCES], g2[TEST_SOURCES], g3[TEST_SOURCES];
-       u8 g_tbls[3 * TEST_SOURCES * 32], *dest_ptrs[3], *buffs[TEST_SOURCES];
-       u8 *dest1, *dest2, *dest3, *dest_ref1, *dest_ref2, *dest_ref3;
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref3 = buf;
-
-       dest_ptrs[0] = dest1;
-       dest_ptrs[1] = dest2;
-       dest_ptrs[2] = dest3;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest1, 0, TEST_LEN);
-       memset(dest2, 0, TEST_LEN);
-       memset(dest_ref1, 0, TEST_LEN);
-       memset(dest_ref2, 0, TEST_LEN);
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               g1[i] = rand();
-               g2[i] = rand();
-               g3[i] = rand();
-       }
-
-       for (j = 0; j < TEST_SOURCES; j++) {
-               gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-               gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-       }
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES], buffs,
-                             dest_ref2);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES], buffs,
-                             dest_ref3);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS / 100; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES],
-                                     buffs, dest_ref2);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES],
-                                     buffs, dest_ref3);
-       }
-       perf_stop(&stop);
-       printf("gf_3vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 3) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 3) * i);
-
-       if (0 != memcmp(dest_ref1, dest1, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref1, 25);
-               printf("dprod_dut:");
-               dump(dest1, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref2, dest2, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test2\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref2, 25);
-               printf("dprod_dut:");
-               dump(dest2, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref3, dest3, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test3\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref3, 25);
-               printf("dprod_dut:");
-               dump(dest3, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index 1fb4330794078d8f5cb4e5a3a07f1d431d475b12..32609c75726321c54df1ef004612a8d5e91fe619 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index df6cf4e65e3cd37d5ed1772652ef1522401aa317..1f40eb780294f098fa87e0e394e6982f4ae3902f 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -158,7 +158,7 @@ section .text
 %define xd3     xtmph1
 
 align 16
-global gf_3vect_mad_avx:function
+global gf_3vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_mad_avx)
        FUNC_SAVE
        sub     len, 16
index 4b8163dc996a0d8e89095bc9a309d70edd541ad1..0b3666171de775120723adfba83cb5801c88d834 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -165,7 +165,7 @@ section .text
 %define xd3     ymm10
 
 align 16
-global gf_3vect_mad_avx2:function
+global gf_3vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_mad_avx2)
        FUNC_SAVE
        sub     len, 32
index 1e2fe91102141a995569a22c55d348f7bc30792e..dcafbc7919a43ee3a4a3aa0d52a7e18c648bfab8 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -152,7 +152,7 @@ section .text
 %define xmask0f   zmm17
 
 align 16
-global gf_3vect_mad_avx512:function
+global gf_3vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_mad_avx512)
        FUNC_SAVE
        sub     len, 64
index 6458493a65094afa46c8c92ad691a836a5292851..0d9028bc830016f5e13ceced5939947475609273 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -156,7 +156,7 @@ section .text
 %define xd3     xtmph1
 
 align 16
-global gf_3vect_mad_sse:function
+global gf_3vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_3vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index 69470765643be06199943c58eaad7275721ac4db..ccfc8ce53bb1d374668922b634ff9ad49d32f2c8 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -294,7 +294,7 @@ section .text
  %define xp4    xmm5
 %endif
 align 16
-global gf_4vect_dot_prod_avx:function
+global gf_4vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_dot_prod_avx)
        FUNC_SAVE
        SLDR    len, len_m
index eae76d9aa473624ec8353c1dc01d53496b51c784..181a18d9dc33858540c218531425a432181ddc3e 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -302,7 +302,7 @@ section .text
  %define xp4    ymm5
 %endif
 align 16
-global gf_4vect_dot_prod_avx2:function
+global gf_4vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_dot_prod_avx2)
        FUNC_SAVE
        SLDR    len, len_m
index 563708c04a61c135b78b1c0641fb64f0d98f42ab..92886782d09d79737cd7ee41b5f2b2a213b9755e 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -191,7 +191,7 @@ default rel
 section .text
 
 align 16
-global gf_4vect_dot_prod_avx512:function
+global gf_4vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_dot_prod_avx512)
        FUNC_SAVE
        sub     len, 64
index aebda830944b2924578552feb0e8efeeeb2521b3..b32962490f28c5cd7e2ce642423dc845a61b7158 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -294,7 +294,7 @@ section .text
  %define xp4    xmm5
 %endif
 align 16
-global gf_4vect_dot_prod_sse:function
+global gf_4vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_dot_prod_sse)
        FUNC_SAVE
        SLDR    len, len_m
diff --git a/ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_4vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index 445c412..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_4vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g1[TEST_SOURCES], g2[TEST_SOURCES], g3[TEST_SOURCES];
-       u8 g4[TEST_SOURCES], g_tbls[4 * TEST_SOURCES * 32], *buffs[TEST_SOURCES];
-       u8 *dest1, *dest2, *dest3, *dest4, *dest_ref1, *dest_ref2, *dest_ref3;
-       u8 *dest_ref4, *dest_ptrs[4];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest4 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref4 = buf;
-
-       dest_ptrs[0] = dest1;
-       dest_ptrs[1] = dest2;
-       dest_ptrs[2] = dest3;
-       dest_ptrs[3] = dest4;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest1, 0, TEST_LEN);
-       memset(dest2, 0, TEST_LEN);
-       memset(dest3, 0, TEST_LEN);
-       memset(dest4, 0, TEST_LEN);
-       memset(dest_ref1, 0, TEST_LEN);
-       memset(dest_ref2, 0, TEST_LEN);
-       memset(dest_ref3, 0, TEST_LEN);
-       memset(dest_ref4, 0, TEST_LEN);
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               g1[i] = rand();
-               g2[i] = rand();
-               g3[i] = rand();
-               g4[i] = rand();
-       }
-
-       for (j = 0; j < TEST_SOURCES; j++) {
-               gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-               gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-       }
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES], buffs,
-                             dest_ref2);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES], buffs,
-                             dest_ref3);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES], buffs,
-                             dest_ref4);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS / 100; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES],
-                                     buffs, dest_ref2);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES],
-                                     buffs, dest_ref3);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES],
-                                     buffs, dest_ref4);
-       }
-       perf_stop(&stop);
-       printf("gf_4vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 4) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 4) * i);
-
-       if (0 != memcmp(dest_ref1, dest1, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref1, 25);
-               printf("dprod_dut:");
-               dump(dest1, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref2, dest2, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test2\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref2, 25);
-               printf("dprod_dut:");
-               dump(dest2, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref3, dest3, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test3\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref3, 25);
-               printf("dprod_dut:");
-               dump(dest3, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref4, dest4, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test3\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref4, 25);
-               printf("dprod_dut:");
-               dump(dest4, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index 9cef79c4c0063d228531eff4bd4f97b444526656..0352eefa8b0bfe255530e94e71e0a88b4ce308c3 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 6ca31bbdcddd41b3dc17697ee3ab8f088b299e57..62441c192fcd98a640a859db2eb18c0ecfba4df4 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -169,7 +169,7 @@ section .text
 %define xd4     xtmpl1
 
 align 16
-global gf_4vect_mad_avx:function
+global gf_4vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_mad_avx)
        FUNC_SAVE
        sub     len, 16
index 9368e4232c2ffb88837bff1db68cfce05c539dab..9a7b7d94b2111e7333c52899de20554dfb23039a 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -165,7 +165,7 @@ section .text
 %define xd4     ymm10
 
 align 16
-global gf_4vect_mad_avx2:function
+global gf_4vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_mad_avx2)
        FUNC_SAVE
        sub     len, 32
index d9bbf35bddcdb1b1dbb4c850615ca84d2915659b..bc836af6b885cf8b5dedc61c19c34ab4d083b9c1 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -159,7 +159,7 @@ section .text
 %define xtmpl5    zmm23
 
 align 16
-global gf_4vect_mad_avx512:function
+global gf_4vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_mad_avx512)
        FUNC_SAVE
        sub     len, 64
index 7c41cacedf07cf9d04bb3d72385153c45339a9a1..c3d4c5d77c5be54cf75c7151ee791ec25cb24345 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -168,7 +168,7 @@ section .text
 %define xd4     xtmpl1
 
 align 16
-global gf_4vect_mad_sse:function
+global gf_4vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_4vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index 945c8de541232a80e2dbac3c4016d4e44ec9d1ce..eb1c15ed4cc040705e11ce73938095c43fbb2971 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -184,7 +184,7 @@ section .text
 %define xp5    xmm6
 
 align 16
-global gf_5vect_dot_prod_avx:function
+global gf_5vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_dot_prod_avx)
        FUNC_SAVE
        sub     len, 16
index d78aa450a3c566dd4d000c52ccf99e567e23ecd5..dfafd8ab5e1a5e0862cbef7def0453bac1aa78aa 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -189,7 +189,7 @@ section .text
 %define xp5    ymm6
 
 align 16
-global gf_5vect_dot_prod_avx2:function
+global gf_5vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_dot_prod_avx2)
        FUNC_SAVE
        sub     len, 32
diff --git a/ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_avx512.asm b/ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_avx512.asm
new file mode 100644 (file)
index 0000000..8b80d2b
--- /dev/null
@@ -0,0 +1,335 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;
+;;; gf_5vect_dot_prod_avx512(len, vec, *g_tbls, **buffs, **dests);
+;;;
+
+%include "reg_sizes.asm"
+
+%ifdef HAVE_AS_KNOWS_AVX512
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0  rdi
+ %define arg1  rsi
+ %define arg2  rdx
+ %define arg3  rcx
+ %define arg4  r8
+ %define arg5  r9
+
+ %define tmp   r11
+ %define tmp.w r11d
+ %define tmp.b r11b
+ %define tmp2  r10
+ %define tmp3  r13             ; must be saved and restored
+ %define tmp4  r12             ; must be saved and restored
+ %define tmp5  r14             ; must be saved and restored
+ %define tmp6  r15             ; must be saved and restored
+ %define tmp7  rbp             ; must be saved and restored
+ %define tmp8  rbx             ; must be saved and restored
+ %define return rax
+ %define PS     8
+ %define LOG_PS 3
+
+ %define func(x) x:
+ %macro FUNC_SAVE 0
+       push    r12
+       push    r13
+       push    r14
+       push    r15
+       push    rbp
+       push    rbx
+ %endmacro
+ %macro FUNC_RESTORE 0
+       pop     rbx
+       pop     rbp
+       pop     r15
+       pop     r14
+       pop     r13
+       pop     r12
+ %endmacro
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0   rcx
+ %define arg1   rdx
+ %define arg2   r8
+ %define arg3   r9
+
+ %define arg4   r12            ; must be saved, loaded and restored
+ %define arg5   r15            ; must be saved and restored
+ %define tmp    r11
+ %define tmp.w  r11d
+ %define tmp.b  r11b
+ %define tmp2   r10
+ %define tmp3   r13            ; must be saved and restored
+ %define tmp4   r14            ; must be saved and restored
+ %define tmp5   rdi            ; must be saved and restored
+ %define tmp6   rsi            ; must be saved and restored
+ %define tmp7   rbp            ; must be saved and restored
+ %define tmp8   rbx            ; must be saved and restored
+ %define return rax
+ %define PS     8
+ %define LOG_PS 3
+ %define stack_size  10*16 + 9*8               ; must be an odd multiple of 8
+ %define arg(x)      [rsp + stack_size + PS + PS*x]
+
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       vmovdqa [rsp + 8*16], xmm14
+       vmovdqa [rsp + 9*16], xmm15
+       save_reg        r12,  9*16 + 0*8
+       save_reg        r13,  9*16 + 1*8
+       save_reg        r14,  9*16 + 2*8
+       save_reg        r15,  9*16 + 3*8
+       save_reg        rdi,  9*16 + 4*8
+       save_reg        rsi,  9*16 + 5*8
+       save_reg        rbp,  9*16 + 6*8
+       save_reg        rbx,  9*16 + 7*8
+       end_prolog
+       mov     arg4, arg(4)
+ %endmacro
+
+ %macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+       vmovdqa xmm14, [rsp + 8*16]
+       vmovdqa xmm15, [rsp + 9*16]
+       mov     r12,  [rsp + 9*16 + 0*8]
+       mov     r13,  [rsp + 9*16 + 1*8]
+       mov     r14,  [rsp + 9*16 + 2*8]
+       mov     r15,  [rsp + 9*16 + 3*8]
+       mov     rdi,  [rsp + 9*16 + 4*8]
+       mov     rsi,  [rsp + 9*16 + 5*8]
+       mov     rbp,  [rsp + 9*16 + 6*8]
+       mov     rbx,  [rsp + 9*16 + 7*8]
+       add     rsp, stack_size
+ %endmacro
+%endif
+
+
+%define len    arg0
+%define vec    arg1
+%define mul_array arg2
+%define src    arg3
+%define dest1  arg4
+%define ptr    arg5
+%define vec_i  tmp2
+%define dest2  tmp3
+%define dest3  tmp4
+%define dest4  tmp5
+%define vskip3 tmp6
+%define dest5  tmp7
+%define vskip1 tmp8
+%define pos    return
+
+
+%ifndef EC_ALIGNED_ADDR
+;;; Use Un-aligned load/store
+ %define XLDR vmovdqu8
+ %define XSTR vmovdqu8
+%else
+;;; Use Non-temporal load/stor
+ %ifdef NO_NT_LDST
+  %define XLDR vmovdqa
+  %define XSTR vmovdqa
+ %else
+  %define XLDR vmovntdqa
+  %define XSTR vmovntdq
+ %endif
+%endif
+
+%define xmask0f   zmm17
+%define xgft1_lo  zmm16
+%define xgft1_loy ymm16
+%define xgft1_hi  zmm15
+%define xgft2_lo  zmm14
+%define xgft2_loy ymm14
+%define xgft2_hi  zmm13
+%define xgft3_lo  zmm12
+%define xgft3_loy ymm12
+%define xgft3_hi  zmm11
+%define xgft4_lo  zmm10
+%define xgft4_loy ymm10
+%define xgft4_hi  zmm9
+%define xgft5_lo  zmm8
+%define xgft5_loy ymm8
+%define xgft5_hi  zmm7
+
+%define x0        zmm0
+%define xtmpa     zmm1
+%define xp1       zmm2
+%define xp2       zmm3
+%define xp3       zmm4
+%define xp4       zmm5
+%define xp5       zmm6
+
+default rel
+[bits 64]
+
+section .text
+
+align 16
+global gf_5vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
+func(gf_5vect_dot_prod_avx512)
+       FUNC_SAVE
+       sub     len, 64
+       jl      .return_fail
+
+       xor     pos, pos
+       mov     tmp, 0x0f
+       vpbroadcastb xmask0f, tmp       ;Construct mask 0x0f0f0f...
+       mov     vskip1, vec
+       imul    vskip1, 32
+       mov     vskip3, vec
+       imul    vskip3, 96
+       sal     vec, LOG_PS             ;vec *= PS. Make vec_i count by PS
+       mov     dest2, [dest1+PS]
+       mov     dest3, [dest1+2*PS]
+       mov     dest4, [dest1+3*PS]
+       mov     dest5, [dest1+4*PS]
+       mov     dest1, [dest1]
+
+.loop64:
+       vpxorq  xp1, xp1, xp1
+       vpxorq  xp2, xp2, xp2
+       vpxorq  xp3, xp3, xp3
+       vpxorq  xp4, xp4, xp4
+       vpxorq  xp5, xp5, xp5
+       mov     tmp, mul_array
+       xor     vec_i, vec_i
+
+.next_vect:
+       mov     ptr, [src+vec_i]
+       XLDR    x0, [ptr+pos]           ;Get next source vector
+       add     vec_i, PS
+
+       vpandq  xtmpa, x0, xmask0f      ;Mask low src nibble in bits 4-0
+       vpsraw  x0, x0, 4               ;Shift to put high nibble into bits 4-0
+       vpandq  x0, x0, xmask0f         ;Mask high src nibble in bits 4-0
+
+       vmovdqu8 xgft1_loy, [tmp]               ;Load array Ax{00}..{0f}, Ax{00}..{f0}
+       vmovdqu8 xgft2_loy, [tmp+vec*(32/PS)]   ;Load array Bx{00}..{0f}, Bx{00}..{f0}
+       vmovdqu8 xgft3_loy, [tmp+vec*(64/PS)]   ;Load array Cx{00}..{0f}, Cx{00}..{f0}
+       vmovdqu8 xgft4_loy, [tmp+vskip3]        ;Load array Dx{00}..{0f}, Dx{00}..{f0}
+       vmovdqu8 xgft5_loy, [tmp+vskip1*4]      ;Load array Ex{00}..{0f}, Ex{00}..{f0}
+       add     tmp, 32
+
+       vshufi64x2 xgft1_hi, xgft1_lo, xgft1_lo, 0x55
+       vshufi64x2 xgft1_lo, xgft1_lo, xgft1_lo, 0x00
+       vshufi64x2 xgft2_hi, xgft2_lo, xgft2_lo, 0x55
+       vshufi64x2 xgft2_lo, xgft2_lo, xgft2_lo, 0x00
+
+       vpshufb xgft1_hi, xgft1_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft1_lo, xgft1_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft1_hi, xgft1_hi, xgft1_lo    ;GF add high and low partials
+       vpxorq  xp1, xp1, xgft1_hi              ;xp1 += partial
+
+       vpshufb xgft2_hi, xgft2_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft2_lo, xgft2_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft2_hi, xgft2_hi, xgft2_lo    ;GF add high and low partials
+       vpxorq  xp2, xp2, xgft2_hi              ;xp2 += partial
+
+       vshufi64x2 xgft3_hi, xgft3_lo, xgft3_lo, 0x55
+       vshufi64x2 xgft3_lo, xgft3_lo, xgft3_lo, 0x00
+       vshufi64x2 xgft4_hi, xgft4_lo, xgft4_lo, 0x55
+       vshufi64x2 xgft4_lo, xgft4_lo, xgft4_lo, 0x00
+
+       vpshufb xgft3_hi, xgft3_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft3_lo, xgft3_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft3_hi, xgft3_hi, xgft3_lo    ;GF add high and low partials
+       vpxorq  xp3, xp3, xgft3_hi              ;xp3 += partial
+
+       vpshufb xgft4_hi, xgft4_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft4_lo, xgft4_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft4_hi, xgft4_hi, xgft4_lo    ;GF add high and low partials
+       vpxorq  xp4, xp4, xgft4_hi              ;xp4 += partial
+
+       vshufi64x2 xgft5_hi, xgft5_lo, xgft5_lo, 0x55
+       vshufi64x2 xgft5_lo, xgft5_lo, xgft5_lo, 0x00
+
+       vpshufb xgft5_hi, xgft5_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft5_lo, xgft5_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft5_hi, xgft5_hi, xgft5_lo    ;GF add high and low partials
+       vpxorq  xp5, xp5, xgft5_hi              ;xp5 += partial
+
+       cmp     vec_i, vec
+       jl      .next_vect
+
+       XSTR    [dest1+pos], xp1
+       XSTR    [dest2+pos], xp2
+       XSTR    [dest3+pos], xp3
+       XSTR    [dest4+pos], xp4
+       XSTR    [dest5+pos], xp5
+
+       add     pos, 64                 ;Loop on 64 bytes at a time
+       cmp     pos, len
+       jle     .loop64
+
+       lea     tmp, [len + 64]
+       cmp     pos, tmp
+       je      .return_pass
+
+       ;; Tail len
+       mov     pos, len        ;Overlapped offset length-64
+       jmp     .loop64         ;Do one more overlap pass
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+%else
+%ifidn __OUTPUT_FORMAT__, win64
+global no_gf_5vect_dot_prod_avx512
+no_gf_5vect_dot_prod_avx512:
+%endif
+%endif  ; ifdef HAVE_AS_KNOWS_AVX512
index 2b01bf4b998576a422dd6865666125432d2e85e5..59b0ac2bc25274b67cd338cebd3d191c475f1940 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -184,7 +184,7 @@ section .text
 %define xp5    xmm14
 
 align 16
-global gf_5vect_dot_prod_sse:function
+global gf_5vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_dot_prod_sse)
        FUNC_SAVE
        sub     len, 16
diff --git a/ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_5vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index dc3645a..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_5vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g1[TEST_SOURCES], g2[TEST_SOURCES], g3[TEST_SOURCES];
-       u8 g4[TEST_SOURCES], g5[TEST_SOURCES], *g_tbls, *buffs[TEST_SOURCES];
-       u8 *dest1, *dest2, *dest3, *dest4, *dest5, *dest_ref1, *dest_ref2;
-       u8 *dest_ref3, *dest_ref4, *dest_ref5, *dest_ptrs[5];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 16, 6 * TEST_SOURCES * 32)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       g_tbls = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest4 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest5 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref4 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref5 = buf;
-
-       dest_ptrs[0] = dest1;
-       dest_ptrs[1] = dest2;
-       dest_ptrs[2] = dest3;
-       dest_ptrs[3] = dest4;
-       dest_ptrs[4] = dest5;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest1, 0, TEST_LEN);
-       memset(dest2, 0, TEST_LEN);
-       memset(dest3, 0, TEST_LEN);
-       memset(dest4, 0, TEST_LEN);
-       memset(dest5, 0, TEST_LEN);
-       memset(dest_ref1, 0, TEST_LEN);
-       memset(dest_ref2, 0, TEST_LEN);
-       memset(dest_ref3, 0, TEST_LEN);
-       memset(dest_ref4, 0, TEST_LEN);
-       memset(dest_ref5, 0, TEST_LEN);
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               g1[i] = rand();
-               g2[i] = rand();
-               g3[i] = rand();
-               g4[i] = rand();
-               g5[i] = rand();
-       }
-
-       for (j = 0; j < TEST_SOURCES; j++) {
-               gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-               gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-       }
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES], buffs,
-                             dest_ref2);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES], buffs,
-                             dest_ref3);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES], buffs,
-                             dest_ref4);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[128 * TEST_SOURCES], buffs,
-                             dest_ref5);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS / 20; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES],
-                                     buffs, dest_ref2);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES],
-                                     buffs, dest_ref3);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES],
-                                     buffs, dest_ref4);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[128 * TEST_SOURCES],
-                                     buffs, dest_ref5);
-       }
-       perf_stop(&stop);
-       printf("gf_5vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 5) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 5) * i);
-
-       if (0 != memcmp(dest_ref1, dest1, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref1, 25);
-               printf("dprod_dut:");
-               dump(dest1, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref2, dest2, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test2\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref2, 25);
-               printf("dprod_dut:");
-               dump(dest2, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref3, dest3, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test3\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref3, 25);
-               printf("dprod_dut:");
-               dump(dest3, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref4, dest4, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test4\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref4, 25);
-               printf("dprod_dut:");
-               dump(dest4, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref5, dest5, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test5\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref5, 25);
-               printf("dprod_dut:");
-               dump(dest5, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index 9cb48b47c2386335fc77dfa691277c8e1df7fc91..977054cbe92ce3d03dfa96746c4ca5579a4d9d8f 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 0a7157f22971be09d5a9fc5a41bbb3a88d3fbee3..696b6a0dc5906bac0fb435456f6f3037d15c9f60 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -178,7 +178,7 @@ section .text
 
 
 align 16
-global gf_5vect_mad_avx:function
+global gf_5vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_mad_avx)
        FUNC_SAVE
        sub     len, 16
index 48488cf2198c904289bdaed0ad7e5ffa0b4e11d8..3c65c05eaae689cf446ed405adbc1e0c017abcf0 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -166,7 +166,7 @@ section .text
 %define xd5     ymm9
 
 align 16
-global gf_5vect_mad_avx2:function
+global gf_5vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_mad_avx2)
        FUNC_SAVE
        sub     len, 32
diff --git a/ceph/src/isa-l/erasure_code/gf_5vect_mad_avx512.asm b/ceph/src/isa-l/erasure_code/gf_5vect_mad_avx512.asm
new file mode 100644 (file)
index 0000000..96b498c
--- /dev/null
@@ -0,0 +1,287 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;
+;;; gf_5vect_mad_avx512(len, vec, vec_i, mul_array, src, dest);
+;;;
+
+%include "reg_sizes.asm"
+
+%ifdef HAVE_AS_KNOWS_AVX512
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0   rdi
+ %define arg1   rsi
+ %define arg2   rdx
+ %define arg3   rcx
+ %define arg4   r8
+ %define arg5   r9
+ %define tmp    r11
+ %define tmp2   r10
+ %define return rax
+ %define func(x) x:
+ %define FUNC_SAVE
+ %define FUNC_RESTORE
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0   rcx
+ %define arg1   rdx
+ %define arg2   r8
+ %define arg3   r9
+ %define arg4   r12
+ %define arg5   r15
+ %define tmp    r11
+ %define tmp2   r10
+ %define return rax
+ %define stack_size 16*10 + 3*8
+ %define arg(x)      [rsp + stack_size + PS + PS*x]
+ %define func(x) proc_frame x
+
+%macro FUNC_SAVE 0
+       sub     rsp, stack_size
+       movdqa  [rsp+16*0],xmm6
+       movdqa  [rsp+16*1],xmm7
+       movdqa  [rsp+16*2],xmm8
+       movdqa  [rsp+16*3],xmm9
+       movdqa  [rsp+16*4],xmm10
+       movdqa  [rsp+16*5],xmm11
+       movdqa  [rsp+16*6],xmm12
+       movdqa  [rsp+16*7],xmm13
+       movdqa  [rsp+16*8],xmm14
+       movdqa  [rsp+16*9],xmm15
+       save_reg        r12,  10*16 + 0*8
+       save_reg        r15,  10*16 + 1*8
+       end_prolog
+       mov     arg4, arg(4)
+       mov     arg5, arg(5)
+%endmacro
+
+%macro FUNC_RESTORE 0
+       movdqa  xmm6, [rsp+16*0]
+       movdqa  xmm7, [rsp+16*1]
+       movdqa  xmm8, [rsp+16*2]
+       movdqa  xmm9, [rsp+16*3]
+       movdqa  xmm10, [rsp+16*4]
+       movdqa  xmm11, [rsp+16*5]
+       movdqa  xmm12, [rsp+16*6]
+       movdqa  xmm13, [rsp+16*7]
+       movdqa  xmm14, [rsp+16*8]
+       movdqa  xmm15, [rsp+16*9]
+       mov     r12,  [rsp + 10*16 + 0*8]
+       mov     r15,  [rsp + 10*16 + 1*8]
+       add     rsp, stack_size
+%endmacro
+%endif
+
+%define PS    8
+%define len   arg0
+%define vec   arg1
+%define vec_i arg2
+%define mul_array arg3
+%define        src   arg4
+%define dest1 arg5
+%define pos   return
+%define dest2 tmp2
+%define dest3 mul_array
+%define dest4 vec
+%define dest5 vec_i
+
+%ifndef EC_ALIGNED_ADDR
+;;; Use Un-aligned load/store
+ %define XLDR vmovdqu8
+ %define XSTR vmovdqu8
+%else
+;;; Use Non-temporal load/stor
+ %ifdef NO_NT_LDST
+  %define XLDR vmovdqa
+  %define XSTR vmovdqa
+ %else
+  %define XLDR vmovntdqa
+  %define XSTR vmovntdq
+ %endif
+%endif
+
+default rel
+[bits 64]
+section .text
+
+%define x0        zmm0
+%define xtmpa     zmm1
+%define xtmpl1    zmm2
+%define xtmph1    zmm3
+%define xtmph2    zmm4
+%define xtmph3    zmm5
+%define xgft1_hi  zmm6
+%define xgft1_lo  zmm7
+%define xgft1_loy ymm7
+%define xgft2_hi  zmm8
+%define xgft2_lo  zmm9
+%define xgft2_loy ymm9
+%define xgft3_hi  zmm10
+%define xgft3_lo  zmm11
+%define xgft3_loy ymm11
+%define xgft4_hi  zmm12
+%define xgft4_lo  zmm13
+%define xgft4_loy ymm13
+%define xgft5_hi  zmm14
+%define xgft5_lo  zmm15
+%define xgft5_loy ymm15
+%define xd1       zmm16
+%define xd2       zmm17
+%define xd3       zmm18
+%define xd4       zmm19
+%define xd5       zmm20
+%define xmask0f   zmm21
+%define xtmpl2    zmm22
+%define xtmpl3    zmm23
+%define xtmpl4    zmm24
+%define xtmpl5    zmm25
+%define xtmph4    zmm26
+%define xtmph5    zmm27
+
+align 16
+global gf_5vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
+func(gf_5vect_mad_avx512)
+       FUNC_SAVE
+       sub     len, 64
+       jl      .return_fail
+       xor     pos, pos
+       mov     tmp, 0x0f
+       vpbroadcastb xmask0f, tmp       ;Construct mask 0x0f0f0f...
+       sal     vec_i, 5                ;Multiply by 32
+       sal     vec, 5                  ;Multiply by 32
+       lea     tmp, [mul_array + vec_i]
+       vmovdqu xgft1_loy, [tmp]        ;Load array Ax{00}..{0f}, Ax{00}..{f0}
+       vmovdqu xgft2_loy, [tmp+vec]    ;Load array Bx{00}..{0f}, Bx{00}..{f0}
+       vmovdqu xgft3_loy, [tmp+2*vec]  ;Load array Cx{00}..{0f}, Cx{00}..{f0}
+       vmovdqu xgft5_loy, [tmp+4*vec]  ;Load array Ex{00}..{0f}, Ex{00}..{f0}
+       add     tmp, vec
+       vmovdqu xgft4_loy, [tmp+2*vec]  ;Load array Dx{00}..{0f}, Dx{00}..{f0}
+       vshufi64x2 xgft1_hi, xgft1_lo, xgft1_lo, 0x55
+       vshufi64x2 xgft1_lo, xgft1_lo, xgft1_lo, 0x00
+       vshufi64x2 xgft2_hi, xgft2_lo, xgft2_lo, 0x55
+       vshufi64x2 xgft2_lo, xgft2_lo, xgft2_lo, 0x00
+       vshufi64x2 xgft3_hi, xgft3_lo, xgft3_lo, 0x55
+       vshufi64x2 xgft3_lo, xgft3_lo, xgft3_lo, 0x00
+       vshufi64x2 xgft4_hi, xgft4_lo, xgft4_lo, 0x55
+       vshufi64x2 xgft4_lo, xgft4_lo, xgft4_lo, 0x00
+       vshufi64x2 xgft5_hi, xgft5_lo, xgft5_lo, 0x55
+       vshufi64x2 xgft5_lo, xgft5_lo, xgft5_lo, 0x00
+       mov     dest2, [dest1+PS]
+       mov     dest3, [dest1+2*PS]             ; reuse mul_array
+       mov     dest4, [dest1+3*PS]             ; reuse vec
+       mov     dest5, [dest1+4*PS]             ; reuse vec_i
+       mov     dest1, [dest1]
+       mov     tmp, -1
+       kmovq   k1, tmp
+
+.loop64:
+       XLDR    x0, [src+pos]           ;Get next source vector
+       XLDR    xd1, [dest1+pos]        ;Get next dest vector
+       XLDR    xd2, [dest2+pos]        ;Get next dest vector
+       XLDR    xd3, [dest3+pos]        ;Get next dest vector
+       XLDR    xd4, [dest4+pos]        ;reuse xtmpl1. Get next dest vector
+       XLDR    xd5, [dest5+pos]        ;Get next dest vector
+
+       vpandq  xtmpa, x0, xmask0f      ;Mask low src nibble in bits 4-0
+       vpsraw  x0, x0, 4               ;Shift to put high nibble into bits 4-0
+       vpandq  x0, x0, xmask0f         ;Mask high src nibble in bits 4-0
+
+       ; dest1
+       vpshufb xtmph1 {k1}{z}, xgft1_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl1 {k1}{z}, xgft1_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph1, xtmph1, xtmpl1          ;GF add high and low partials
+       vpxorq  xd1, xd1, xtmph1                ;xd1 += partial
+
+       ; dest2
+       vpshufb xtmph2 {k1}{z}, xgft2_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl2 {k1}{z}, xgft2_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph2, xtmph2, xtmpl2          ;GF add high and low partials
+       vpxorq  xd2, xd2, xtmph2                ;xd2 += partial
+
+       ; dest3
+       vpshufb xtmph3 {k1}{z}, xgft3_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl3 {k1}{z}, xgft3_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph3, xtmph3, xtmpl3          ;GF add high and low partials
+       vpxorq  xd3, xd3, xtmph3                ;xd2 += partial
+
+       ; dest4
+       vpshufb xtmph4 {k1}{z}, xgft4_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl4 {k1}{z}, xgft4_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph4, xtmph4, xtmpl4          ;GF add high and low partials
+       vpxorq  xd4, xd4, xtmph4                ;xd2 += partial
+
+       ; dest5
+       vpshufb xtmph5 {k1}{z}, xgft5_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl5 {k1}{z}, xgft5_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph5, xtmph5, xtmpl5          ;GF add high and low partials
+       vpxorq  xd5, xd5, xtmph5                ;xd2 += partial
+
+       XSTR    [dest1+pos], xd1
+       XSTR    [dest2+pos], xd2
+       XSTR    [dest3+pos], xd3
+       XSTR    [dest4+pos], xd4
+       XSTR    [dest5+pos], xd5
+
+       add     pos, 64                 ;Loop on 64 bytes at a time
+       cmp     pos, len
+       jle     .loop64
+
+       lea     tmp, [len + 64]
+       cmp     pos, tmp
+       je      .return_pass
+
+       ;; Tail len
+       mov     pos, (1 << 63)
+       lea     tmp, [len + 64 - 1]
+       and     tmp, 63
+       sarx    pos, pos, tmp
+       kmovq   k1, pos
+       mov     pos, len        ;Overlapped offset length-64
+       jmp     .loop64         ;Do one more overlap pass
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+%else
+%ifidn __OUTPUT_FORMAT__, win64
+global no_gf_5vect_mad_avx512
+no_gf_5vect_mad_avx512:
+%endif
+%endif  ; ifdef HAVE_AS_KNOWS_AVX512
index 12e86195bfea8cd85a69c2cea5acb63b59546f4b..b16f4058cfe9b656fc02d3875e6e77e392d84f8c 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -177,7 +177,7 @@ section .text
 
 
 align 16
-global gf_5vect_mad_sse:function
+global gf_5vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_5vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index 1d45ef6220b9f42d3ed95f4eba89bbadd7e962d9..a519d5224e01caeb3ad4203b59b0b4cbb4605fb0 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -182,7 +182,7 @@ section .text
 %define xp6    xmm7
 
 align 16
-global gf_6vect_dot_prod_avx:function
+global gf_6vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_dot_prod_avx)
        FUNC_SAVE
        sub     len, 16
index 8ff3bf76e3d23f059b0ee78d1ce0663604bcc795..a57c52a00ff6e0f89b21a42585b74e896f049aed 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -187,7 +187,7 @@ section .text
 %define xp6    ymm7
 
 align 16
-global gf_6vect_dot_prod_avx2:function
+global gf_6vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_dot_prod_avx2)
        FUNC_SAVE
        sub     len, 32
diff --git a/ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_avx512.asm b/ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_avx512.asm
new file mode 100644 (file)
index 0000000..bfcfacb
--- /dev/null
@@ -0,0 +1,354 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;
+;;; gf_6vect_dot_prod_avx512(len, vec, *g_tbls, **buffs, **dests);
+;;;
+
+%include "reg_sizes.asm"
+
+%ifdef HAVE_AS_KNOWS_AVX512
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0  rdi
+ %define arg1  rsi
+ %define arg2  rdx
+ %define arg3  rcx
+ %define arg4  r8
+ %define arg5  r9
+
+ %define tmp   r11
+ %define tmp.w r11d
+ %define tmp.b r11b
+ %define tmp2  r10
+ %define tmp3  r13             ; must be saved and restored
+ %define tmp4  r12             ; must be saved and restored
+ %define tmp5  r14             ; must be saved and restored
+ %define tmp6  r15             ; must be saved and restored
+ %define tmp7  rbp             ; must be saved and restored
+ %define tmp8  rbx             ; must be saved and restored
+ %define return rax
+ %define PS     8
+ %define LOG_PS 3
+
+ %define func(x) x:
+ %macro FUNC_SAVE 0
+       push    r12
+       push    r13
+       push    r14
+       push    r15
+       push    rbp
+       push    rbx
+ %endmacro
+ %macro FUNC_RESTORE 0
+       pop     rbx
+       pop     rbp
+       pop     r15
+       pop     r14
+       pop     r13
+       pop     r12
+ %endmacro
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0   rcx
+ %define arg1   rdx
+ %define arg2   r8
+ %define arg3   r9
+
+ %define arg4   r12            ; must be saved, loaded and restored
+ %define arg5   r15            ; must be saved and restored
+ %define tmp    r11
+ %define tmp.w  r11d
+ %define tmp.b  r11b
+ %define tmp2   r10
+ %define tmp3   r13            ; must be saved and restored
+ %define tmp4   r14            ; must be saved and restored
+ %define tmp5   rdi            ; must be saved and restored
+ %define tmp6   rsi            ; must be saved and restored
+ %define tmp7   rbp            ; must be saved and restored
+ %define tmp8   rbx            ; must be saved and restored
+ %define return rax
+ %define PS     8
+ %define LOG_PS 3
+ %define stack_size  10*16 + 9*8               ; must be an odd multiple of 8
+ %define arg(x)      [rsp + stack_size + PS + PS*x]
+
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       vmovdqa [rsp + 8*16], xmm14
+       vmovdqa [rsp + 9*16], xmm15
+       save_reg        r12,  9*16 + 0*8
+       save_reg        r13,  9*16 + 1*8
+       save_reg        r14,  9*16 + 2*8
+       save_reg        r15,  9*16 + 3*8
+       save_reg        rdi,  9*16 + 4*8
+       save_reg        rsi,  9*16 + 5*8
+       save_reg        rbp,  9*16 + 6*8
+       save_reg        rbx,  9*16 + 7*8
+       end_prolog
+       mov     arg4, arg(4)
+ %endmacro
+
+ %macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+       vmovdqa xmm14, [rsp + 8*16]
+       vmovdqa xmm15, [rsp + 9*16]
+       mov     r12,  [rsp + 9*16 + 0*8]
+       mov     r13,  [rsp + 9*16 + 1*8]
+       mov     r14,  [rsp + 9*16 + 2*8]
+       mov     r15,  [rsp + 9*16 + 3*8]
+       mov     rdi,  [rsp + 9*16 + 4*8]
+       mov     rsi,  [rsp + 9*16 + 5*8]
+       mov     rbp,  [rsp + 9*16 + 6*8]
+       mov     rbx,  [rsp + 9*16 + 7*8]
+       add     rsp, stack_size
+ %endmacro
+%endif
+
+
+%define len    arg0
+%define vec    arg1
+%define mul_array arg2
+%define src    arg3
+%define dest1  arg4
+%define ptr    arg5
+%define vec_i  tmp2
+%define dest2  tmp3
+%define dest3  tmp4
+%define dest4  tmp5
+%define vskip3 tmp6
+%define dest5  tmp7
+%define vskip1 tmp8
+%define pos    return
+
+
+%ifndef EC_ALIGNED_ADDR
+;;; Use Un-aligned load/store
+ %define XLDR vmovdqu8
+ %define XSTR vmovdqu8
+%else
+;;; Use Non-temporal load/stor
+ %ifdef NO_NT_LDST
+  %define XLDR vmovdqa
+  %define XSTR vmovdqa
+ %else
+  %define XLDR vmovntdqa
+  %define XSTR vmovntdq
+ %endif
+%endif
+
+%define xmask0f   zmm20
+%define xgft1_lo  zmm19
+%define xgft1_loy ymm19
+%define xgft1_hi  zmm18
+%define xgft2_lo  zmm17
+%define xgft2_loy ymm17
+%define xgft2_hi  zmm16
+%define xgft3_lo  zmm15
+%define xgft3_loy ymm15
+%define xgft3_hi  zmm14
+%define xgft4_lo  zmm13
+%define xgft4_loy ymm13
+%define xgft4_hi  zmm12
+%define xgft5_lo  zmm11
+%define xgft5_loy ymm11
+%define xgft5_hi  zmm10
+%define xgft6_lo  zmm9
+%define xgft6_loy ymm9
+%define xgft6_hi  zmm8
+
+%define x0        zmm0
+%define xtmpa     zmm1
+%define xp1       zmm2
+%define xp2       zmm3
+%define xp3       zmm4
+%define xp4       zmm5
+%define xp5       zmm6
+%define xp6       zmm7
+
+default rel
+[bits 64]
+
+section .text
+
+align 16
+global gf_6vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
+func(gf_6vect_dot_prod_avx512)
+       FUNC_SAVE
+       sub     len, 64
+       jl      .return_fail
+
+       xor     pos, pos
+       mov     tmp, 0x0f
+       vpbroadcastb xmask0f, tmp       ;Construct mask 0x0f0f0f...
+       mov     vskip1, vec
+       imul    vskip1, 32
+       mov     vskip3, vec
+       imul    vskip3, 96
+       sal     vec, LOG_PS             ;vec *= PS. Make vec_i count by PS
+       mov     dest2, [dest1+PS]
+       mov     dest3, [dest1+2*PS]
+       mov     dest4, [dest1+3*PS]
+       mov     dest5, [dest1+4*PS]
+
+.loop64:
+       vpxorq  xp1, xp1, xp1
+       vpxorq  xp2, xp2, xp2
+       vpxorq  xp3, xp3, xp3
+       vpxorq  xp4, xp4, xp4
+       vpxorq  xp5, xp5, xp5
+       vpxorq  xp6, xp6, xp6
+       mov     tmp, mul_array
+       xor     vec_i, vec_i
+
+.next_vect:
+       mov     ptr, [src+vec_i]
+       XLDR    x0, [ptr+pos]           ;Get next source vector
+       add     vec_i, PS
+
+       vpandq  xtmpa, x0, xmask0f      ;Mask low src nibble in bits 4-0
+       vpsraw  x0, x0, 4               ;Shift to put high nibble into bits 4-0
+       vpandq  x0, x0, xmask0f         ;Mask high src nibble in bits 4-0
+
+       vmovdqu8 xgft1_loy, [tmp]               ;Load array Ax{00}..{0f}, Ax{00}..{f0}
+       vmovdqu8 xgft2_loy, [tmp+vec*(32/PS)]   ;Load array Bx{00}..{0f}, Bx{00}..{f0}
+       vmovdqu8 xgft3_loy, [tmp+vec*(64/PS)]   ;Load array Cx{00}..{0f}, Cx{00}..{f0}
+       vmovdqu8 xgft4_loy, [tmp+vskip3]        ;Load array Dx{00}..{0f}, Dx{00}..{f0}
+       vmovdqu8 xgft5_loy, [tmp+vskip1*4]      ;Load array Ex{00}..{0f}, Ex{00}..{f0}
+       lea     ptr, [vskip1 + vskip1*4]        ;ptr = vskip5
+       vmovdqu8 xgft6_loy, [tmp+ptr]           ;Load array Fx{00}..{0f}, Fx{00}..{f0}
+       add     tmp, 32
+
+       vshufi64x2 xgft1_hi, xgft1_lo, xgft1_lo, 0x55
+       vshufi64x2 xgft1_lo, xgft1_lo, xgft1_lo, 0x00
+       vshufi64x2 xgft2_hi, xgft2_lo, xgft2_lo, 0x55
+       vshufi64x2 xgft2_lo, xgft2_lo, xgft2_lo, 0x00
+
+       vpshufb xgft1_hi, xgft1_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft1_lo, xgft1_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft1_hi, xgft1_hi, xgft1_lo    ;GF add high and low partials
+       vpxorq  xp1, xp1, xgft1_hi              ;xp1 += partial
+
+       vpshufb xgft2_hi, xgft2_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft2_lo, xgft2_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft2_hi, xgft2_hi, xgft2_lo    ;GF add high and low partials
+       vpxorq  xp2, xp2, xgft2_hi              ;xp2 += partial
+
+       vshufi64x2 xgft3_hi, xgft3_lo, xgft3_lo, 0x55
+       vshufi64x2 xgft3_lo, xgft3_lo, xgft3_lo, 0x00
+       vshufi64x2 xgft4_hi, xgft4_lo, xgft4_lo, 0x55
+       vshufi64x2 xgft4_lo, xgft4_lo, xgft4_lo, 0x00
+
+       vpshufb xgft3_hi, xgft3_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft3_lo, xgft3_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft3_hi, xgft3_hi, xgft3_lo    ;GF add high and low partials
+       vpxorq  xp3, xp3, xgft3_hi              ;xp3 += partial
+
+       vpshufb xgft4_hi, xgft4_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft4_lo, xgft4_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft4_hi, xgft4_hi, xgft4_lo    ;GF add high and low partials
+       vpxorq  xp4, xp4, xgft4_hi              ;xp4 += partial
+
+       vshufi64x2 xgft5_hi, xgft5_lo, xgft5_lo, 0x55
+       vshufi64x2 xgft5_lo, xgft5_lo, xgft5_lo, 0x00
+
+       vpshufb xgft5_hi, xgft5_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft5_lo, xgft5_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft5_hi, xgft5_hi, xgft5_lo    ;GF add high and low partials
+       vpxorq  xp5, xp5, xgft5_hi              ;xp5 += partial
+
+       vshufi64x2 xgft6_hi, xgft6_lo, xgft6_lo, 0x55
+       vshufi64x2 xgft6_lo, xgft6_lo, xgft6_lo, 0x00
+
+       vpshufb xgft6_hi, xgft6_hi, x0          ;Lookup mul table of high nibble
+       vpshufb xgft6_lo, xgft6_lo, xtmpa       ;Lookup mul table of low nibble
+       vpxorq  xgft6_hi, xgft6_hi, xgft6_lo    ;GF add high and low partials
+       vpxorq  xp6, xp6, xgft6_hi              ;x6 += partial
+
+       cmp     vec_i, vec
+       jl      .next_vect
+
+        mov     ptr, [dest1]                   ;reuse ptr
+        mov     tmp, [dest1+5*PS]              ;reuse tmp
+
+       XSTR    [dest2+pos], xp2
+       XSTR    [dest3+pos], xp3
+       XSTR    [dest4+pos], xp4
+       XSTR    [dest5+pos], xp5
+
+       XSTR    [ptr+pos], xp1
+       XSTR    [tmp+pos], xp6
+
+       add     pos, 64                 ;Loop on 64 bytes at a time
+       cmp     pos, len
+       jle     .loop64
+
+       lea     tmp, [len + 64]
+       cmp     pos, tmp
+       je      .return_pass
+
+       ;; Tail len
+       mov     pos, len        ;Overlapped offset length-64
+       jmp     .loop64         ;Do one more overlap pass
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+%else
+%ifidn __OUTPUT_FORMAT__, win64
+global no_gf_6vect_dot_prod_avx512
+no_gf_6vect_dot_prod_avx512:
+%endif
+%endif  ; ifdef HAVE_AS_KNOWS_AVX512
index 97b4363ef275e31a22ba9d9860b9a44e0dc10b0d..b62881136b5d3ee46f2498faf4c5ac012aa23133 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -182,7 +182,7 @@ section .text
 %define xp6    xmm13
 
 align 16
-global gf_6vect_dot_prod_sse:function
+global gf_6vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_dot_prod_sse)
        FUNC_SAVE
        sub     len, 16
diff --git a/ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_6vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index 65923de..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_6vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g1[TEST_SOURCES], g2[TEST_SOURCES], g3[TEST_SOURCES];
-       u8 g4[TEST_SOURCES], g5[TEST_SOURCES], g6[TEST_SOURCES], *g_tbls;
-       u8 *dest1, *dest2, *dest3, *dest4, *dest5, *dest6, *dest_ref1;
-       u8 *dest_ref2, *dest_ref3, *dest_ref4, *dest_ref5, *dest_ref6;
-       u8 *dest_ptrs[6], *buffs[TEST_SOURCES];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 16, 6 * TEST_SOURCES * 32)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       g_tbls = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest4 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest5 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest6 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref1 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref2 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref3 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref4 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref5 = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref6 = buf;
-
-       dest_ptrs[0] = dest1;
-       dest_ptrs[1] = dest2;
-       dest_ptrs[2] = dest3;
-       dest_ptrs[3] = dest4;
-       dest_ptrs[4] = dest5;
-       dest_ptrs[5] = dest6;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest1, 0, TEST_LEN);
-       memset(dest2, 0, TEST_LEN);
-       memset(dest3, 0, TEST_LEN);
-       memset(dest4, 0, TEST_LEN);
-       memset(dest5, 0, TEST_LEN);
-       memset(dest6, 0, TEST_LEN);
-       memset(dest_ref1, 0, TEST_LEN);
-       memset(dest_ref2, 0, TEST_LEN);
-       memset(dest_ref3, 0, TEST_LEN);
-       memset(dest_ref4, 0, TEST_LEN);
-       memset(dest_ref5, 0, TEST_LEN);
-       memset(dest_ref6, 0, TEST_LEN);
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-               g1[i] = rand();
-               g2[i] = rand();
-               g3[i] = rand();
-               g4[i] = rand();
-               g5[i] = rand();
-               g6[i] = rand();
-       }
-
-       for (j = 0; j < TEST_SOURCES; j++) {
-               gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-               gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-               gf_vect_mul_init(g6[j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-       }
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES], buffs,
-                             dest_ref2);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES], buffs,
-                             dest_ref3);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES], buffs,
-                             dest_ref4);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[128 * TEST_SOURCES], buffs,
-                             dest_ref5);
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[160 * TEST_SOURCES], buffs,
-                             dest_ref6);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS / 20; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g6[j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref1);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[32 * TEST_SOURCES],
-                                     buffs, dest_ref2);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[64 * TEST_SOURCES],
-                                     buffs, dest_ref3);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[96 * TEST_SOURCES],
-                                     buffs, dest_ref4);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[128 * TEST_SOURCES],
-                                     buffs, dest_ref5);
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[160 * TEST_SOURCES],
-                                     buffs, dest_ref6);
-       }
-       perf_stop(&stop);
-       printf("gf_6vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 6) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf_vect_mul_init(g1[j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(g2[j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g3[j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g4[j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g5[j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(g6[j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-               }
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ptrs);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 6) * i);
-
-       if (0 != memcmp(dest_ref1, dest1, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref1, 25);
-               printf("dprod_dut:");
-               dump(dest1, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref2, dest2, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test2\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref2, 25);
-               printf("dprod_dut:");
-               dump(dest2, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref3, dest3, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test3\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref3, 25);
-               printf("dprod_dut:");
-               dump(dest3, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref4, dest4, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test4\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref4, 25);
-               printf("dprod_dut:");
-               dump(dest4, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref5, dest5, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test5\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref5, 25);
-               printf("dprod_dut:");
-               dump(dest5, 25);
-               return -1;
-       }
-       if (0 != memcmp(dest_ref6, dest6, TEST_LEN)) {
-               printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test6\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref6, 25);
-               printf("dprod_dut:");
-               dump(dest6, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index e2fece61a928ec87f7b788c49017ef6617ff2409..96f67f19a1e72d846db2050e4e1ef266bf91e921 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 1462882bc8f39110a9414e0e7a66695a2b1d6196..f2e04cd70b62a6a95800d4da60ff9907ef3df2a9 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -184,7 +184,7 @@ section .text
 
 
 align 16
-global gf_6vect_mad_avx:function
+global gf_6vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_mad_avx)
        FUNC_SAVE
        sub     len, 16
index c625b7197a6e2d66c08dd463751d23ed63bc4d0a..b344532febc03c6962e0507a7dff033dfa2fe552 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -177,7 +177,7 @@ section .text
 %define xd6        xd1
 
 align 16
-global gf_6vect_mad_avx2:function
+global gf_6vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_mad_avx2)
        FUNC_SAVE
        sub     len, 32
diff --git a/ceph/src/isa-l/erasure_code/gf_6vect_mad_avx512.asm b/ceph/src/isa-l/erasure_code/gf_6vect_mad_avx512.asm
new file mode 100644 (file)
index 0000000..5f31bf1
--- /dev/null
@@ -0,0 +1,321 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;
+;;; gf_6vect_mad_avx512(len, vec, vec_i, mul_array, src, dest);
+;;;
+
+%include "reg_sizes.asm"
+
+%ifdef HAVE_AS_KNOWS_AVX512
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0   rdi
+ %define arg1   rsi
+ %define arg2   rdx
+ %define arg3   rcx
+ %define arg4   r8
+ %define arg5   r9
+ %define tmp    r11
+ %define tmp2   r10
+ %define tmp3   r12    ;must be saved and restored
+ %define return rax
+ %define func(x) x:
+ %macro FUNC_SAVE 0
+       push    r12
+ %endmacro
+ %macro FUNC_RESTORE 0
+       pop     r12
+ %endmacro
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0   rcx
+ %define arg1   rdx
+ %define arg2   r8
+ %define arg3   r9
+ %define arg4   r12
+ %define arg5   r15
+ %define tmp    r11
+ %define tmp2   r10
+ %define tmp3   r13
+ %define return rax
+ %define stack_size 16*10 + 3*8
+ %define arg(x)      [rsp + stack_size + PS + PS*x]
+ %define func(x) proc_frame x
+
+%macro FUNC_SAVE 0
+       sub     rsp, stack_size
+       movdqa  [rsp+16*0],xmm6
+       movdqa  [rsp+16*1],xmm7
+       movdqa  [rsp+16*2],xmm8
+       movdqa  [rsp+16*3],xmm9
+       movdqa  [rsp+16*4],xmm10
+       movdqa  [rsp+16*5],xmm11
+       movdqa  [rsp+16*6],xmm12
+       movdqa  [rsp+16*7],xmm13
+       movdqa  [rsp+16*8],xmm14
+       movdqa  [rsp+16*9],xmm15
+       save_reg        r12,  10*16 + 0*8
+       save_reg        r15,  10*16 + 1*8
+       save_reg        r13,  10*16 + 2*8
+       end_prolog
+       mov     arg4, arg(4)
+       mov     arg5, arg(5)
+%endmacro
+
+%macro FUNC_RESTORE 0
+       movdqa  xmm6, [rsp+16*0]
+       movdqa  xmm7, [rsp+16*1]
+       movdqa  xmm8, [rsp+16*2]
+       movdqa  xmm9, [rsp+16*3]
+       movdqa  xmm10, [rsp+16*4]
+       movdqa  xmm11, [rsp+16*5]
+       movdqa  xmm12, [rsp+16*6]
+       movdqa  xmm13, [rsp+16*7]
+       movdqa  xmm14, [rsp+16*8]
+       movdqa  xmm15, [rsp+16*9]
+       mov     r12,  [rsp + 10*16 + 0*8]
+       mov     r15,  [rsp + 10*16 + 1*8]
+       mov     r13,  [rsp + 10*16 + 2*8]
+       add     rsp, stack_size
+%endmacro
+%endif
+
+%define PS    8
+%define len   arg0
+%define vec   arg1
+%define vec_i arg2
+%define mul_array arg3
+%define        src   arg4
+%define dest1 arg5
+%define pos   return
+%define dest2 tmp3
+%define dest3 tmp2
+%define dest4 mul_array
+%define dest5 vec
+%define dest6 vec_i
+
+%ifndef EC_ALIGNED_ADDR
+;;; Use Un-aligned load/store
+ %define XLDR vmovdqu8
+ %define XSTR vmovdqu8
+%else
+;;; Use Non-temporal load/stor
+ %ifdef NO_NT_LDST
+  %define XLDR vmovdqa
+  %define XSTR vmovdqa
+ %else
+  %define XLDR vmovntdqa
+  %define XSTR vmovntdq
+ %endif
+%endif
+
+default rel
+[bits 64]
+section .text
+
+%define x0        zmm0
+%define xtmpa     zmm1
+%define xtmpl1    zmm2
+%define xtmph1    zmm3
+%define xgft1_hi  zmm4
+%define xgft1_lo  zmm5
+%define xgft1_loy ymm5
+%define xgft2_hi  zmm6
+%define xgft2_lo  zmm7
+%define xgft2_loy ymm7
+%define xgft3_hi  zmm8
+%define xgft3_lo  zmm9
+%define xgft3_loy ymm9
+%define xgft4_hi  zmm10
+%define xgft4_lo  zmm11
+%define xgft4_loy ymm11
+%define xgft5_hi  zmm12
+%define xgft5_lo  zmm13
+%define xgft5_loy ymm13
+%define xgft6_hi  zmm14
+%define xgft6_lo  zmm15
+%define xgft6_loy ymm15
+%define xd1       zmm16
+%define xd2       zmm17
+%define xd3       zmm18
+%define xd4       zmm19
+%define xd5       zmm20
+%define xd6       zmm21
+%define xmask0f   zmm22
+%define xtmpl2    zmm23
+%define xtmpl3    zmm24
+%define xtmpl4    zmm25
+%define xtmpl5    zmm26
+%define xtmph2    zmm27
+%define xtmph3    zmm28
+%define xtmph4    zmm29
+%define xtmph5    zmm30
+%define xtmph6    zmm31
+
+align 16
+global gf_6vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
+func(gf_6vect_mad_avx512)
+       FUNC_SAVE
+       sub     len, 64
+       jl      .return_fail
+       xor     pos, pos
+       mov     tmp, 0x0f
+       vpbroadcastb xmask0f, tmp       ;Construct mask 0x0f0f0f...
+       sal     vec_i, 5                ;Multiply by 32
+       sal     vec, 5                  ;Multiply by 32
+       lea     tmp, [mul_array + vec_i]
+       mov     vec_i, vec
+       mov     mul_array, vec
+       sal     vec_i, 1                ;vec_i=vec*64
+       sal     mul_array, 1            ;mul_array=vec*64
+       add     vec_i, vec              ;vec_i=vec*96
+       add     mul_array, vec_i        ;vec_i=vec*160
+
+       vmovdqu xgft1_loy, [tmp]        ;Load array Ax{00}..{0f}, Ax{00}..{f0}
+       vmovdqu xgft2_loy, [tmp+vec]    ;Load array Bx{00}..{0f}, Bx{00}..{f0}
+       vmovdqu xgft3_loy, [tmp+2*vec]  ;Load array Cx{00}..{0f}, Cx{00}..{f0}
+       vmovdqu xgft4_loy, [tmp+vec_i]  ;Load array Dx{00}..{0f}, Dx{00}..{f0}
+       vmovdqu xgft5_loy, [tmp+4*vec]  ;Load array Ex{00}..{0f}, Ex{00}..{f0}
+       vmovdqu xgft6_loy, [tmp+mul_array]      ;Load array Fx{00}..{0f}, Fx{00}..{f0}
+
+       vshufi64x2 xgft1_hi, xgft1_lo, xgft1_lo, 0x55
+       vshufi64x2 xgft1_lo, xgft1_lo, xgft1_lo, 0x00
+       vshufi64x2 xgft2_hi, xgft2_lo, xgft2_lo, 0x55
+       vshufi64x2 xgft2_lo, xgft2_lo, xgft2_lo, 0x00
+       vshufi64x2 xgft3_hi, xgft3_lo, xgft3_lo, 0x55
+       vshufi64x2 xgft3_lo, xgft3_lo, xgft3_lo, 0x00
+       vshufi64x2 xgft4_hi, xgft4_lo, xgft4_lo, 0x55
+       vshufi64x2 xgft4_lo, xgft4_lo, xgft4_lo, 0x00
+       vshufi64x2 xgft5_hi, xgft5_lo, xgft5_lo, 0x55
+       vshufi64x2 xgft5_lo, xgft5_lo, xgft5_lo, 0x00
+       vshufi64x2 xgft6_hi, xgft6_lo, xgft6_lo, 0x55
+       vshufi64x2 xgft6_lo, xgft6_lo, xgft6_lo, 0x00
+
+       mov     dest2, [dest1+PS]
+       mov     dest3, [dest1+2*PS]
+       mov     dest4, [dest1+3*PS]             ; reuse mul_array
+       mov     dest5, [dest1+4*PS]             ; reuse vec
+       mov     dest6, [dest1+5*PS]             ; reuse vec_i
+       mov     dest1, [dest1]
+       mov     tmp, -1
+       kmovq   k1, tmp
+
+.loop64:
+       XLDR    x0, [src+pos]           ;Get next source vector
+       XLDR    xd1, [dest1+pos]        ;Get next dest vector
+       XLDR    xd2, [dest2+pos]        ;Get next dest vector
+       XLDR    xd3, [dest3+pos]        ;Get next dest vector
+       XLDR    xd4, [dest4+pos]        ;Get next dest vector
+       XLDR    xd5, [dest5+pos]        ;Get next dest vector
+       XLDR    xd6, [dest6+pos]        ;Get next dest vector
+
+       vpandq  xtmpa, x0, xmask0f      ;Mask low src nibble in bits 4-0
+       vpsraw  x0, x0, 4               ;Shift to put high nibble into bits 4-0
+       vpandq  x0, x0, xmask0f         ;Mask high src nibble in bits 4-0
+
+       ; dest1
+       vpshufb xtmph1 {k1}{z}, xgft1_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl1 {k1}{z}, xgft1_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph1, xtmph1, xtmpl1          ;GF add high and low partials
+       vpxorq  xd1, xd1, xtmph1                ;xd1 += partial
+
+       ; dest2
+       vpshufb xtmph2 {k1}{z}, xgft2_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl2 {k1}{z}, xgft2_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph2, xtmph2, xtmpl2          ;GF add high and low partials
+       vpxorq  xd2, xd2, xtmph2                ;xd2 += partial
+
+       ; dest3
+       vpshufb xtmph3 {k1}{z}, xgft3_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl3 {k1}{z}, xgft3_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph3, xtmph3, xtmpl3          ;GF add high and low partials
+       vpxorq  xd3, xd3, xtmph3                ;xd3 += partial
+
+       ; dest4
+       vpshufb xtmph4 {k1}{z}, xgft4_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl4 {k1}{z}, xgft4_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph4, xtmph4, xtmpl4          ;GF add high and low partials
+       vpxorq  xd4, xd4, xtmph4                ;xd4 += partial
+
+       ; dest5
+       vpshufb xtmph5 {k1}{z}, xgft5_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl5 {k1}{z}, xgft5_lo, xtmpa ;Lookup mul table of low nibble
+       vpxorq  xtmph5, xtmph5, xtmpl5          ;GF add high and low partials
+       vpxorq  xd5, xd5, xtmph5                ;xd5 += partial
+
+       ; dest6
+       vpshufb xtmph6 {k1}{z}, xgft6_hi, x0    ;Lookup mul table of high nibble
+       vpshufb xtmpl5 {k1}{z}, xgft6_lo, xtmpa ;Lookup mul table of low nibble. Reuse xtmpl5
+       vpxorq  xtmph6, xtmph6, xtmpl5          ;GF add high and low partials.
+       vpxorq  xd6, xd6, xtmph6                ;xd6 += partial
+
+       XSTR    [dest1+pos], xd1
+       XSTR    [dest2+pos], xd2
+       XSTR    [dest3+pos], xd3
+       XSTR    [dest4+pos], xd4
+       XSTR    [dest5+pos], xd5
+       XSTR    [dest6+pos], xd6
+
+       add     pos, 64                 ;Loop on 64 bytes at a time
+       cmp     pos, len
+       jle     .loop64
+
+       lea     tmp, [len + 64]
+       cmp     pos, tmp
+       je      .return_pass
+
+       ;; Tail len
+       mov     pos, (1 << 63)
+       lea     tmp, [len + 64 - 1]
+       and     tmp, 63
+       sarx    pos, pos, tmp
+       kmovq   k1, pos
+       mov     pos, len        ;Overlapped offset length-64
+       jmp     .loop64         ;Do one more overlap pass
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+%else
+%ifidn __OUTPUT_FORMAT__, win64
+global no_gf_6vect_mad_avx512
+no_gf_6vect_mad_avx512:
+%endif
+%endif  ; ifdef HAVE_AS_KNOWS_AVX512
index 52e328a6200e2b119493432dc3ade02ddd7e0628..4fed2aad95649e56cc557175cf128ee71f6d869f 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -185,7 +185,7 @@ section .text
 
 
 align 16
-global gf_6vect_mad_sse:function
+global gf_6vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_6vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index f3f72c28906fd1f1c5d2041d67ad6a3bb5bbbe1e..418d7c195e8b22d860437a1d982c56fa73fece1f 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index a04799efd23655a1f97f24b1e2cb673e1de7f201..1d23eb67f519f3cddfbc79a2ad5484f57295f4ce 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -38,7 +38,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 10
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   4000
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 10
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     GT_L3_CACHE / TEST_SOURCES
-#  define TEST_LOOPS   10
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
 # endif
 #endif
 
@@ -99,12 +94,26 @@ void gf_vect_dot_prod_ref(int len, int vlen, u8 * v, u8 ** src, u8 * dest)
        }
 }
 
+void gf_vect_dot_prod_mult(int len, int vlen, u8 * v, u8 ** src, u8 * dest)
+{
+       int i, j;
+       u8 s;
+       for (i = 0; i < len; i++) {
+               s = 0;
+               for (j = 0; j < vlen; j++) {
+                       s ^= gf_mul_table[v[j] * 256 + src[j][i]];
+               }
+               dest[i] = s;
+       }
+
+}
+
 int main(void)
 {
-       int i, j, k;
-       u8 s, vec[TEST_SOURCES], dest1[TEST_LEN], dest2[TEST_LEN];
+       int i, j;
+       u8 vec[TEST_SOURCES], dest1[TEST_LEN], dest2[TEST_LEN];
        u8 *matrix[TEST_SOURCES];
-       struct perf start, stop;
+       struct perf start;
 
        mk_gf_field();
        mk_gf_mul_table(gf_mul_table);
@@ -122,38 +131,15 @@ int main(void)
 
        }
 
-       gf_vect_dot_prod_ref(TEST_LEN, TEST_SOURCES, vec, matrix, dest1);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++)
-               gf_vect_dot_prod_ref(TEST_LEN, TEST_SOURCES, vec, matrix, dest1);
-
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 gf_vect_dot_prod_ref(TEST_LEN, TEST_SOURCES, vec, matrix, dest1));
        printf("gf_vect_dot_prod_2tbl" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
-
-       // Warm up mult tables
-       for (i = 0; i < TEST_LEN; i++) {
-               s = 0;
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       s ^= gf_mul_table[vec[j] * 256 + matrix[j][i]];
-               }
-               dest2[i] = s;
-       }
+       perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1));
 
-       perf_start(&start);
-       for (k = 0; k < TEST_LOOPS; k++) {
-               for (i = 0; i < TEST_LEN; i++) {
-                       s = 0;
-                       for (j = 0; j < TEST_SOURCES; j++) {
-                               s ^= gf_mul_table[vec[j] * 256 + matrix[j][i]];
-                       }
-                       dest2[i] = s;
-               }
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 gf_vect_dot_prod_mult(TEST_LEN, TEST_SOURCES, vec, matrix, dest2));
        printf("gf_vect_dot_prod_1tbl" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * k);
+       perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1));
 
        // Compare with reference function
        if (0 != memcmp(dest1, dest2, TEST_LEN)) {
index 8bf8671462a703ae45234eb8d3ce5ce3267a3e5d..c123a3d901020846869895bc1bb8499915fbcfe4 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -194,7 +194,7 @@ section .text
 %define xp     xmm2
 
 align 16
-global gf_vect_dot_prod_avx:function
+global gf_vect_dot_prod_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_dot_prod_avx)
        FUNC_SAVE
        SLDR    len, len_m
index ad79f47cc7537c9b3d94170771180e6a7830940b..f84dd4756687743e3007407abe556ce4bbb1f5cf 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -202,7 +202,7 @@ section .text
 %define xp     ymm2
 
 align 16
-global gf_vect_dot_prod_avx2:function
+global gf_vect_dot_prod_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_dot_prod_avx2)
        FUNC_SAVE
        SLDR    len, len_m
index 23b88ffc18b0f1bf5c298d26b7d859008131dc4a..ad01fcf89b70e4a93ab7479b4f69fa782a39d2a3 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -128,7 +128,7 @@ default rel
 section .text
 
 align 16
-global gf_vect_dot_prod_avx512:function
+global gf_vect_dot_prod_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_dot_prod_avx512)
        FUNC_SAVE
        xor     pos, pos
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_perf.c b/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_perf.c
deleted file mode 100644 (file)
index 4eb2d04..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_vect_dot_prod_avx
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], *dest, *dest_ref;
-       u8 *temp_buff, *buffs[TEST_SOURCES];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       temp_buff = buf;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest, 0, TEST_LEN);
-       memset(temp_buff, 0, TEST_LEN);
-       memset(dest_ref, 0, TEST_LEN);
-       memset(g, 0, TEST_SOURCES);
-
-       for (i = 0; i < TEST_SOURCES; i++)
-               g[i] = rand();
-
-       for (j = 0; j < TEST_SOURCES; j++)
-               gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-       }
-       perf_stop(&stop);
-       printf("gf_vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
-
-       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-               printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref, 25);
-               printf("dprod:");
-               dump(dest, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-}
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_test.c b/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_avx_test.c
deleted file mode 100644 (file)
index 869aef8..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "types.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_vect_dot_prod_avx
-#endif
-#ifndef TEST_MIN_SIZE
-# define TEST_MIN_SIZE  16
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-#define TEST_LEN 8192
-#define TEST_SIZE (TEST_LEN/2)
-
-#ifndef TEST_SOURCES
-# define TEST_SOURCES  16
-#endif
-#ifndef RANDOMS
-# define RANDOMS 20
-#endif
-
-#define MMAX TEST_SOURCES
-#define KMAX TEST_SOURCES
-
-#ifdef EC_ALIGNED_ADDR
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 0
-# define LEN_ALIGN_CHK_B 0     // 0 for aligned only
-#else
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 32
-# define LEN_ALIGN_CHK_B 32    // 0 for aligned only
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_u8xu8(unsigned char *s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", 0xff & s[j + (i * m)]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j, rtest, srcs, m, k, nerrs, r, err;
-       void *buf;
-       u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
-       u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX];
-       u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-
-       int align, size;
-       unsigned char *efence_buffs[TEST_SOURCES];
-       unsigned int offset;
-       u8 *ubuffs[TEST_SOURCES];
-       u8 *udest_ptr;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       temp_buff = buf;
-
-       // Test of all zeros
-       for (i = 0; i < TEST_SOURCES; i++)
-               memset(buffs[i], 0, TEST_LEN);
-
-       memset(dest, 0, TEST_LEN);
-       memset(temp_buff, 0, TEST_LEN);
-       memset(dest_ref, 0, TEST_LEN);
-       memset(g, 0, TEST_SOURCES);
-
-       for (i = 0; i < TEST_SOURCES; i++)
-               gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-               printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " \n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref, 25);
-               printf("dprod:");
-               dump(dest, 25);
-               return -1;
-       } else
-               putchar('.');
-
-       // Rand data test
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               for (i = 0; i < TEST_SOURCES; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-               if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " 1\n");
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(dest, 25);
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Rand data test with varied parameters
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               for (srcs = TEST_SOURCES; srcs > 0; srcs--) {
-                       for (i = 0; i < srcs; i++)
-                               for (j = 0; j < TEST_LEN; j++)
-                                       buffs[i][j] = rand();
-
-                       for (i = 0; i < srcs; i++)
-                               g[i] = rand();
-
-                       for (i = 0; i < srcs; i++)
-                               gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-                       gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[0], buffs, dest_ref);
-                       FUNCTION_UNDER_TEST(TEST_LEN, srcs, g_tbls, buffs, dest);
-
-                       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-                               printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 2\n");
-                               dump_matrix(buffs, 5, srcs);
-                               printf("dprod_base:");
-                               dump(dest_ref, 5);
-                               printf("dprod:");
-                               dump(dest, 5);
-                               return -1;
-                       }
-
-                       putchar('.');
-               }
-       }
-
-       // Test erasure code using gf_vect_dot_prod
-
-       // Pick a first test
-       m = 9;
-       k = 5;
-       if (m > MMAX || k > KMAX)
-               return -1;
-
-       gf_gen_rs_matrix(a, m, k);
-
-       // Make random data
-       for (i = 0; i < k; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       // Make parity vects
-       for (i = k; i < m; i++) {
-               for (j = 0; j < k; j++)
-                       gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]);
-#ifndef USEREF
-               FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]);
-#else
-               gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]);
-#endif
-       }
-
-       // Random buffers in erasure
-       memset(src_in_err, 0, TEST_SOURCES);
-       for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) {
-               err = 1 & rand();
-               src_in_err[i] = err;
-               if (err)
-                       src_err_list[nerrs++] = i;
-       }
-
-       // construct b by removing error rows
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r]) {
-                       r++;
-                       continue;
-               }
-               for (j = 0; j < k; j++)
-                       b[k * i + j] = a[k * r + j];
-       }
-
-       if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0)
-               printf("BAD MATRIX\n");
-
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r]) {
-                       r++;
-                       continue;
-               }
-               recov[i] = buffs[r];
-       }
-
-       // Recover data
-       for (i = 0; i < nerrs; i++) {
-               for (j = 0; j < k; j++)
-                       gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]);
-#ifndef USEREF
-               FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff);
-#else
-               gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff);
-#endif
-
-               if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) {
-                       printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs);
-                       printf("recov %d:", src_err_list[i]);
-                       dump(temp_buff, 25);
-                       printf("orig   :");
-                       dump(buffs[src_err_list[i]], 25);
-                       return -1;
-               }
-       }
-
-       // Do more random tests
-
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               while ((m = (rand() % MMAX)) < 2) ;
-               while ((k = (rand() % KMAX)) >= m || k < 1) ;
-
-               if (m > MMAX || k > KMAX)
-                       continue;
-
-               gf_gen_rs_matrix(a, m, k);
-
-               // Make random data
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               // Make parity vects
-               for (i = k; i < m; i++) {
-                       for (j = 0; j < k; j++)
-                               gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]);
-#ifndef USEREF
-                       FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]);
-#else
-                       gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]);
-#endif
-               }
-
-               // Random errors
-               memset(src_in_err, 0, TEST_SOURCES);
-               for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) {
-                       err = 1 & rand();
-                       src_in_err[i] = err;
-                       if (err)
-                               src_err_list[nerrs++] = i;
-               }
-               if (nerrs == 0) {       // should have at least one error
-                       while ((err = (rand() % KMAX)) >= k) ;
-                       src_err_list[nerrs++] = err;
-                       src_in_err[err] = 1;
-               }
-               // construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r]) {
-                               r++;
-                               continue;
-                       }
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0)
-                       printf("BAD MATRIX\n");
-
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r]) {
-                               r++;
-                               continue;
-                       }
-                       recov[i] = buffs[r];
-               }
-
-               // Recover data
-               for (i = 0; i < nerrs; i++) {
-                       for (j = 0; j < k; j++)
-                               gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]);
-#ifndef USEREF
-                       FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff);
-#else
-                       gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff);
-#endif
-                       if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) {
-                               printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                               printf(" - erase list = ");
-                               for (i = 0; i < nerrs; i++)
-                                       printf(" %d", src_err_list[i]);
-                               printf("\na:\n");
-                               dump_u8xu8((u8 *) a, m, k);
-                               printf("inv b:\n");
-                               dump_u8xu8((u8 *) d, k, k);
-                               printf("orig data:\n");
-                               dump_matrix(buffs, m, 25);
-                               printf("orig   :");
-                               dump(buffs[src_err_list[i]], 25);
-                               printf("recov %d:", src_err_list[i]);
-                               dump(temp_buff, 25);
-                               return -1;
-                       }
-               }
-               putchar('.');
-       }
-
-       // Run tests at end of buffer for Electric Fence
-       align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16;
-       for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) {
-               for (i = 0; i < TEST_SOURCES; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)      // Line up TEST_SIZE from end
-                       efence_buffs[i] = buffs[i] + TEST_LEN - size;
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[0], efence_buffs, dest_ref);
-               FUNCTION_UNDER_TEST(size, TEST_SOURCES, g_tbls, efence_buffs, dest);
-
-               if (0 != memcmp(dest_ref, dest, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 3\n");
-                       dump_matrix(efence_buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, align);
-                       printf("dprod:");
-                       dump(dest, align);
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Test rand ptr alignment if available
-
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1);
-               srcs = rand() % TEST_SOURCES;
-               if (srcs == 0)
-                       continue;
-
-               offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B;
-               // Add random offsets
-               for (i = 0; i < srcs; i++)
-                       ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset));
-
-               udest_ptr = dest + (rand() & (PTR_ALIGN_CHK_B - offset));
-
-               memset(dest, 0, TEST_LEN);      // zero pad to check write-over
-
-               for (i = 0; i < srcs; i++)
-                       for (j = 0; j < size; j++)
-                               ubuffs[i][j] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, srcs, &g_tbls[0], ubuffs, dest_ref);
-
-               FUNCTION_UNDER_TEST(size, srcs, g_tbls, ubuffs, udest_ptr);
-
-               if (memcmp(dest_ref, udest_ptr, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign srcs=%d\n",
-                              srcs);
-                       dump_matrix(ubuffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(udest_ptr, 25);
-                       return -1;
-               }
-               // Confirm that padding around dests is unchanged
-               memset(dest_ref, 0, PTR_ALIGN_CHK_B);   // Make reference zero buff
-               offset = udest_ptr - dest;
-
-               if (memcmp(dest, dest_ref, offset)) {
-                       printf("Fail rand ualign pad start\n");
-                       return -1;
-               }
-               if (memcmp(dest + offset + size, dest_ref, PTR_ALIGN_CHK_B - offset)) {
-                       printf("Fail rand ualign pad end\n");
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Test all size alignment
-       align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16;
-
-       for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) {
-               srcs = TEST_SOURCES;
-
-               for (i = 0; i < srcs; i++)
-                       for (j = 0; j < size; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, srcs, &g_tbls[0], buffs, dest_ref);
-
-               FUNCTION_UNDER_TEST(size, srcs, g_tbls, buffs, dest);
-
-               if (memcmp(dest_ref, dest, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign len=%d\n",
-                              size);
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(dest, 25);
-                       return -1;
-               }
-       }
-
-       printf("done all: Pass\n");
-       return 0;
-}
index 8875dd1feae4fec4ceec2404b5e2655a7b111bd0..2b4dfbbe0a1269ff845dbc29e37a354ff75c00dd 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 02700207a2c7c92216b8808364a2566aa6133594..bd2b555b0a16945342a146d12dd14a4640ccac32 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -45,7 +45,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 10
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 10
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
 # endif
 #endif
 
@@ -88,13 +83,24 @@ void dump_matrix(unsigned char **s, int k, int m)
        printf("\n");
 }
 
+void vect_dot_prod_perf(void (*fun_ptr)
+                        (int, int, unsigned char *, unsigned char **, unsigned char *),
+                       u8 * g, u8 * g_tbls, u8 ** buffs, u8 * dest_ref)
+{
+       int j;
+       for (j = 0; j < TEST_SOURCES; j++)
+               gf_vect_mul_init(g[j], &g_tbls[j * 32]);
+
+       (*fun_ptr) (TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
+}
+
 int main(int argc, char *argv[])
 {
        int i, j;
        void *buf;
        u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], *dest, *dest_ref;
        u8 *temp_buff, *buffs[TEST_SOURCES];
-       struct perf start, stop;
+       struct perf start;
 
        printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
 
@@ -138,36 +144,20 @@ int main(int argc, char *argv[])
        for (i = 0; i < TEST_SOURCES; i++)
                g[i] = rand();
 
-       for (j = 0; j < TEST_SOURCES; j++)
-               gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-
 #ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref)
+           );
        printf("gf_vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
+       perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1));
+#else
+       vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref);
 #endif
 
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 vect_dot_prod_perf(&FUNCTION_UNDER_TEST, g, g_tbls, buffs, dest));
        printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
+       perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1));
 
        if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
                printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test\n");
index 18e36da72a77db76dd93168bf00d035848784b91..108fa36a41c5ad0652264abc250647cbc7db292a 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -194,7 +194,7 @@ section .text
 %define xp     xmm2
 
 align 16
-global gf_vect_dot_prod_sse:function
+global gf_vect_dot_prod_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_dot_prod_sse)
        FUNC_SAVE
        SLDR    len, len_m
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_perf.c
deleted file mode 100644 (file)
index d5b655b..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "test.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_vect_dot_prod_sse
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j;
-       void *buf;
-       u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], *dest, *dest_ref;
-       u8 *temp_buff, *buffs[TEST_SOURCES];
-       struct perf start, stop;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       temp_buff = buf;
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       memset(dest, 0, TEST_LEN);
-       memset(temp_buff, 0, TEST_LEN);
-       memset(dest_ref, 0, TEST_LEN);
-       memset(g, 0, TEST_SOURCES);
-
-       for (i = 0; i < TEST_SOURCES; i++)
-               g[i] = rand();
-
-       for (j = 0; j < TEST_SOURCES; j++)
-               gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-
-#ifdef DO_REF_PERF
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-       }
-       perf_stop(&stop);
-       printf("gf_vect_dot_prod_base" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
-#endif
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               for (j = 0; j < TEST_SOURCES; j++)
-                       gf_vect_mul_init(g[j], &g_tbls[j * 32]);
-
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + 1) * i);
-
-       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-               printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test\n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref, 25);
-               printf("dprod:");
-               dump(dest, 25);
-               return -1;
-       }
-
-       printf("pass perf check\n");
-       return 0;
-}
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_test.c b/ceph/src/isa-l/erasure_code/gf_vect_dot_prod_sse_test.c
deleted file mode 100644 (file)
index 6856a48..0000000
+++ /dev/null
@@ -1,528 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "types.h"
-
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_vect_dot_prod_sse
-#endif
-#ifndef TEST_MIN_SIZE
-# define TEST_MIN_SIZE  16
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-#define TEST_LEN 8192
-#define TEST_SIZE (TEST_LEN/2)
-
-#ifndef TEST_SOURCES
-# define TEST_SOURCES  16
-#endif
-#ifndef RANDOMS
-# define RANDOMS 20
-#endif
-
-#define MMAX TEST_SOURCES
-#define KMAX TEST_SOURCES
-
-#ifdef EC_ALIGNED_ADDR
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 0
-# define LEN_ALIGN_CHK_B 0     // 0 for aligned only
-#else
-// Define power of 2 range to check ptr, len alignment
-# define PTR_ALIGN_CHK_B 32
-# define LEN_ALIGN_CHK_B 32    // 0 for aligned only
-#endif
-
-extern void FUNCTION_UNDER_TEST(int len, int vlen, unsigned char *gftbls,
-                               unsigned char **src, unsigned char *dest);
-
-typedef unsigned char u8;
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_u8xu8(unsigned char *s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", 0xff & s[j + (i * m)]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j, rtest, srcs, m, k, nerrs, r, err;
-       void *buf;
-       u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES];
-       u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES];
-       u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX];
-       u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES];
-
-       int align, size;
-       unsigned char *efence_buffs[TEST_SOURCES];
-       unsigned int offset;
-       u8 *ubuffs[TEST_SOURCES];
-       u8 *udest_ptr;
-
-       printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       dest_ref = buf;
-
-       if (posix_memalign(&buf, 64, TEST_LEN)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       temp_buff = buf;
-
-       // Test of all zeros
-       for (i = 0; i < TEST_SOURCES; i++)
-               memset(buffs[i], 0, TEST_LEN);
-
-       memset(dest, 0, TEST_LEN);
-       memset(temp_buff, 0, TEST_LEN);
-       memset(dest_ref, 0, TEST_LEN);
-       memset(g, 0, TEST_SOURCES);
-
-       for (i = 0; i < TEST_SOURCES; i++)
-               gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-       gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-
-       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-               printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " \n");
-               dump_matrix(buffs, 5, TEST_SOURCES);
-               printf("dprod_base:");
-               dump(dest_ref, 25);
-               printf("dprod:");
-               dump(dest, 25);
-               return -1;
-       } else
-               putchar('.');
-
-       // Rand data test
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               for (i = 0; i < TEST_SOURCES; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref);
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest);
-
-               if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " 1\n");
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(dest, 25);
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Rand data test with varied parameters
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               for (srcs = TEST_SOURCES; srcs > 0; srcs--) {
-                       for (i = 0; i < srcs; i++)
-                               for (j = 0; j < TEST_LEN; j++)
-                                       buffs[i][j] = rand();
-
-                       for (i = 0; i < srcs; i++)
-                               g[i] = rand();
-
-                       for (i = 0; i < srcs; i++)
-                               gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-                       gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[0], buffs, dest_ref);
-                       FUNCTION_UNDER_TEST(TEST_LEN, srcs, g_tbls, buffs, dest);
-
-                       if (0 != memcmp(dest_ref, dest, TEST_LEN)) {
-                               printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 2\n");
-                               dump_matrix(buffs, 5, srcs);
-                               printf("dprod_base:");
-                               dump(dest_ref, 5);
-                               printf("dprod:");
-                               dump(dest, 5);
-                               return -1;
-                       }
-
-                       putchar('.');
-               }
-       }
-
-       // Test erasure code using gf_vect_dot_prod
-
-       // Pick a first test
-       m = 9;
-       k = 5;
-       if (m > MMAX || k > KMAX)
-               return -1;
-
-       gf_gen_rs_matrix(a, m, k);
-
-       // Make random data
-       for (i = 0; i < k; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       // Make parity vects
-       for (i = k; i < m; i++) {
-               for (j = 0; j < k; j++)
-                       gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]);
-#ifndef USEREF
-               FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]);
-#else
-               gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]);
-#endif
-       }
-
-       // Random buffers in erasure
-       memset(src_in_err, 0, TEST_SOURCES);
-       for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) {
-               err = 1 & rand();
-               src_in_err[i] = err;
-               if (err)
-                       src_err_list[nerrs++] = i;
-       }
-
-       // construct b by removing error rows
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r]) {
-                       r++;
-                       continue;
-               }
-               for (j = 0; j < k; j++)
-                       b[k * i + j] = a[k * r + j];
-       }
-
-       if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0)
-               printf("BAD MATRIX\n");
-
-       for (i = 0, r = 0; i < k; i++, r++) {
-               while (src_in_err[r]) {
-                       r++;
-                       continue;
-               }
-               recov[i] = buffs[r];
-       }
-
-       // Recover data
-       for (i = 0; i < nerrs; i++) {
-               for (j = 0; j < k; j++)
-                       gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]);
-#ifndef USEREF
-               FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff);
-#else
-               gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff);
-#endif
-
-               if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) {
-                       printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs);
-                       printf("recov %d:", src_err_list[i]);
-                       dump(temp_buff, 25);
-                       printf("orig   :");
-                       dump(buffs[src_err_list[i]], 25);
-                       return -1;
-               }
-       }
-
-       // Do more random tests
-
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               while ((m = (rand() % MMAX)) < 2) ;
-               while ((k = (rand() % KMAX)) >= m || k < 1) ;
-
-               if (m > MMAX || k > KMAX)
-                       continue;
-
-               gf_gen_rs_matrix(a, m, k);
-
-               // Make random data
-               for (i = 0; i < k; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               // Make parity vects
-               for (i = k; i < m; i++) {
-                       for (j = 0; j < k; j++)
-                               gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]);
-#ifndef USEREF
-                       FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]);
-#else
-                       gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]);
-#endif
-               }
-
-               // Random errors
-               memset(src_in_err, 0, TEST_SOURCES);
-               for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) {
-                       err = 1 & rand();
-                       src_in_err[i] = err;
-                       if (err)
-                               src_err_list[nerrs++] = i;
-               }
-               if (nerrs == 0) {       // should have at least one error
-                       while ((err = (rand() % KMAX)) >= k) ;
-                       src_err_list[nerrs++] = err;
-                       src_in_err[err] = 1;
-               }
-               // construct b by removing error rows
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r]) {
-                               r++;
-                               continue;
-                       }
-                       for (j = 0; j < k; j++)
-                               b[k * i + j] = a[k * r + j];
-               }
-
-               if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0)
-                       printf("BAD MATRIX\n");
-
-               for (i = 0, r = 0; i < k; i++, r++) {
-                       while (src_in_err[r]) {
-                               r++;
-                               continue;
-                       }
-                       recov[i] = buffs[r];
-               }
-
-               // Recover data
-               for (i = 0; i < nerrs; i++) {
-                       for (j = 0; j < k; j++)
-                               gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]);
-#ifndef USEREF
-                       FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff);
-#else
-                       gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff);
-#endif
-                       if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) {
-                               printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs);
-                               printf(" - erase list = ");
-                               for (i = 0; i < nerrs; i++)
-                                       printf(" %d", src_err_list[i]);
-                               printf("\na:\n");
-                               dump_u8xu8((u8 *) a, m, k);
-                               printf("inv b:\n");
-                               dump_u8xu8((u8 *) d, k, k);
-                               printf("orig data:\n");
-                               dump_matrix(buffs, m, 25);
-                               printf("orig   :");
-                               dump(buffs[src_err_list[i]], 25);
-                               printf("recov %d:", src_err_list[i]);
-                               dump(temp_buff, 25);
-                               return -1;
-                       }
-               }
-               putchar('.');
-       }
-
-       // Run tests at end of buffer for Electric Fence
-       align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16;
-       for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) {
-               for (i = 0; i < TEST_SOURCES; i++)
-                       for (j = 0; j < TEST_LEN; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)      // Line up TEST_SIZE from end
-                       efence_buffs[i] = buffs[i] + TEST_LEN - size;
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < TEST_SOURCES; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[0], efence_buffs, dest_ref);
-               FUNCTION_UNDER_TEST(size, TEST_SOURCES, g_tbls, efence_buffs, dest);
-
-               if (0 != memcmp(dest_ref, dest, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 3\n");
-                       dump_matrix(efence_buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, align);
-                       printf("dprod:");
-                       dump(dest, align);
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Test rand ptr alignment if available
-
-       for (rtest = 0; rtest < RANDOMS; rtest++) {
-               size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1);
-               srcs = rand() % TEST_SOURCES;
-               if (srcs == 0)
-                       continue;
-
-               offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B;
-               // Add random offsets
-               for (i = 0; i < srcs; i++)
-                       ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset));
-
-               udest_ptr = dest + (rand() & (PTR_ALIGN_CHK_B - offset));
-
-               memset(dest, 0, TEST_LEN);      // zero pad to check write-over
-
-               for (i = 0; i < srcs; i++)
-                       for (j = 0; j < size; j++)
-                               ubuffs[i][j] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, srcs, &g_tbls[0], ubuffs, dest_ref);
-
-               FUNCTION_UNDER_TEST(size, srcs, g_tbls, ubuffs, udest_ptr);
-
-               if (memcmp(dest_ref, udest_ptr, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign srcs=%d\n",
-                              srcs);
-                       dump_matrix(ubuffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(udest_ptr, 25);
-                       return -1;
-               }
-               // Confirm that padding around dests is unchanged
-               memset(dest_ref, 0, PTR_ALIGN_CHK_B);   // Make reference zero buff
-               offset = udest_ptr - dest;
-
-               if (memcmp(dest, dest_ref, offset)) {
-                       printf("Fail rand ualign pad start\n");
-                       return -1;
-               }
-               if (memcmp(dest + offset + size, dest_ref, PTR_ALIGN_CHK_B - offset)) {
-                       printf("Fail rand ualign pad end\n");
-                       return -1;
-               }
-
-               putchar('.');
-       }
-
-       // Test all size alignment
-       align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16;
-
-       for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) {
-               srcs = TEST_SOURCES;
-
-               for (i = 0; i < srcs; i++)
-                       for (j = 0; j < size; j++)
-                               buffs[i][j] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       g[i] = rand();
-
-               for (i = 0; i < srcs; i++)
-                       gf_vect_mul_init(g[i], &g_tbls[i * 32]);
-
-               gf_vect_dot_prod_base(size, srcs, &g_tbls[0], buffs, dest_ref);
-
-               FUNCTION_UNDER_TEST(size, srcs, g_tbls, buffs, dest);
-
-               if (memcmp(dest_ref, dest, size)) {
-                       printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign len=%d\n",
-                              size);
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref, 25);
-                       printf("dprod:");
-                       dump(dest, 25);
-                       return -1;
-               }
-       }
-
-       printf("done all: Pass\n");
-       return 0;
-}
index 5b946fda1703d9dfce2f428d641ad7e38b3f2882..1c0232cca8f70f072d1cc4aad5ba7b1931947574 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 877cc7f76c655951a654157e9640fb4772c7d421..f444d113b07487829dbfbf6055fa1abbfa23e862 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -131,7 +131,7 @@ section .text
 %define xtmpd  xmm5
 
 align 16
-global gf_vect_mad_avx:function
+global gf_vect_mad_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mad_avx)
        FUNC_SAVE
        sub     len, 16
index 17e013e4eb94bcb3aee0b86aa4ca11b6cc9f1e82..b65d0aae3a04701df1c0413832bc98de2fbf220f 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -139,7 +139,7 @@ section .text
 %define xtmpd  ymm5
 
 align 16
-global gf_vect_mad_avx2:function
+global gf_vect_mad_avx2:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mad_avx2)
        FUNC_SAVE
        sub     len, 32
index fc74e1e8ae591bf4161db67f2f7975e27e57401b..44fb653f57cab42e16f6b691283e808897d80f44 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -127,7 +127,7 @@ section .text
 %define xmask0f  zmm8
 
 align 16
-global gf_vect_mad_avx512:function
+global gf_vect_mad_avx512:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mad_avx512)
        FUNC_SAVE
        sub     len, 64
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_mad_perf.c b/ceph/src/isa-l/erasure_code/gf_vect_mad_perf.c
deleted file mode 100644 (file)
index f2fa28d..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset, memcmp
-#include "erasure_code.h"
-#include "types.h"
-#include "test.h"
-
-//By default, test sse version
-#ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_4vect_mad_sse
-# define REF_FUNCTION gf_4vect_dot_prod_sse
-# define VECT 4
-#endif
-
-#define str(s) #s
-#define xstr(s) str(s)
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_SOURCES 10
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   40000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   100
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-typedef unsigned char u8;
-
-#if (VECT == 1)
-# define LAST_ARG *dest
-#else
-# define LAST_ARG **dest
-#endif
-
-extern void FUNCTION_UNDER_TEST(int len, int vec, int vec_i, unsigned char *gftbls,
-                               unsigned char *src, unsigned char LAST_ARG);
-extern void REF_FUNCTION(int len, int vlen, unsigned char *gftbls, unsigned char **src,
-                        unsigned char LAST_ARG);
-
-void dump(unsigned char *buf, int len)
-{
-       int i;
-       for (i = 0; i < len;) {
-               printf(" %2x", 0xff & buf[i++]);
-               if (i % 32 == 0)
-                       printf("\n");
-       }
-       printf("\n");
-}
-
-void dump_matrix(unsigned char **s, int k, int m)
-{
-       int i, j;
-       for (i = 0; i < k; i++) {
-               for (j = 0; j < m; j++) {
-                       printf(" %2x", s[i][j]);
-               }
-               printf("\n");
-       }
-       printf("\n");
-}
-
-int main(int argc, char *argv[])
-{
-       int i, j, l;
-       void *buf;
-       u8 gf[6][TEST_SOURCES];
-       u8 *g_tbls;
-       u8 *dest_ref[VECT];
-       u8 *dest_ptrs[VECT], *buffs[TEST_SOURCES];
-       u8 *dest_perf_ptrs[VECT];
-       struct perf start, stop;
-
-       printf("test " xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN);
-
-       // Allocate the arrays
-       for (i = 0; i < TEST_SOURCES; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               buffs[i] = buf;
-       }
-
-       if (posix_memalign(&buf, 16, VECT * TEST_SOURCES * 32)) {
-               printf("alloc error: Fail");
-               return -1;
-       }
-       g_tbls = buf;
-
-       for (i = 0; i < VECT; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               dest_ptrs[i] = buf;
-               memset(dest_ptrs[i], 0, TEST_LEN);
-       }
-
-       for (i = 0; i < VECT; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               dest_ref[i] = buf;
-               memset(dest_ref[i], 0, TEST_LEN);
-       }
-
-       for (i = 0; i < VECT; i++) {
-               if (posix_memalign(&buf, 64, TEST_LEN)) {
-                       printf("alloc error: Fail");
-                       return -1;
-               }
-               dest_perf_ptrs[i] = buf;
-               memset(dest_perf_ptrs[i], 0, TEST_LEN);
-       }
-
-       // Performance test
-       for (i = 0; i < TEST_SOURCES; i++)
-               for (j = 0; j < TEST_LEN; j++)
-                       buffs[i][j] = rand();
-
-       for (i = 0; i < VECT; i++)
-               for (j = 0; j < TEST_SOURCES; j++) {
-                       gf[i][j] = rand();
-                       gf_vect_mul_init(gf[i][j], &g_tbls[i * (32 * TEST_SOURCES) + j * 32]);
-               }
-
-       for (i = 0; i < VECT; i++)
-               gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[i * 32 * TEST_SOURCES],
-                                     buffs, dest_ref[i]);
-
-       for (i = 0; i < VECT; i++)
-               memset(dest_ptrs[i], 0, TEST_LEN);
-       for (i = 0; i < TEST_SOURCES; i++) {
-#if (VECT == 1)
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], *dest_ptrs);
-#else
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], dest_ptrs);
-#endif
-       }
-       for (i = 0; i < VECT; i++) {
-               if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) {
-                       printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref[i], 25);
-                       printf("dprod_dut:");
-                       dump(dest_ptrs[i], 25);
-                       return -1;
-               }
-       }
-
-#if (VECT == 1)
-       REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, *dest_ref);
-#else
-       REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ref);
-#endif
-       for (i = 0; i < VECT; i++) {
-               if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) {
-                       printf("Fail perf " xstr(FUNCTION_UNDER_TEST) " test1\n");
-                       dump_matrix(buffs, 5, TEST_SOURCES);
-                       printf("dprod_base:");
-                       dump(dest_ref[i], 25);
-                       printf("dprod_dut:");
-                       dump(dest_ptrs[i], 25);
-                       return -1;
-               }
-       }
-
-#ifdef DO_REF_PERF
-
-#if (VECT == 1)
-       REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, *dest_ref);
-#else
-       REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ref);
-#endif
-       perf_start(&start);
-       for (l = 0; l < TEST_LOOPS; l++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-#if (VECT == 1)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-#elif (VECT == 2)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 3)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 4)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 5)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 6)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[5][j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-#endif
-               }
-
-#if (VECT == 1)
-               REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, *dest_ref);
-#else
-               REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ref);
-#endif
-       }
-       perf_stop(&stop);
-       printf(xstr(REF_FUNCTION) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + VECT) * TEST_LOOPS);
-
-#endif
-
-       for (i = 0; i < TEST_SOURCES; i++) {
-#if (VECT == 1)
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i],
-                                   *dest_perf_ptrs);
-#else
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i],
-                                   dest_perf_ptrs);
-#endif
-       }
-       perf_start(&start);
-       for (l = 0; l < TEST_LOOPS; l++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-#if (VECT == 1)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-#elif (VECT == 2)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 3)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 4)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 5)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 6)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[5][j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-#endif
-               }
-               for (i = 0; i < TEST_SOURCES; i++) {
-#if (VECT == 1)
-                       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i],
-                                           *dest_perf_ptrs);
-#else
-                       FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i],
-                                           dest_perf_ptrs);
-#endif
-               }
-
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (TEST_SOURCES + VECT) * TEST_LOOPS);
-
-       perf_start(&start);
-       for (l = 0; l < TEST_LOOPS; l++) {
-               for (j = 0; j < TEST_SOURCES; j++) {
-#if (VECT == 1)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-#elif (VECT == 2)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 3)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 4)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 5)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-#elif (VECT == 6)
-                       gf_vect_mul_init(gf[0][j], &g_tbls[j * 32]);
-                       gf_vect_mul_init(gf[1][j], &g_tbls[(32 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[2][j], &g_tbls[(64 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[3][j], &g_tbls[(96 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[4][j], &g_tbls[(128 * TEST_SOURCES) + (j * 32)]);
-                       gf_vect_mul_init(gf[5][j], &g_tbls[(160 * TEST_SOURCES) + (j * 32)]);
-#endif
-               }
-#if (VECT == 1)
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, 0, g_tbls, buffs[0],
-                                   *dest_perf_ptrs);
-#else
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, 0, g_tbls, buffs[0],
-                                   dest_perf_ptrs);
-#endif
-
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) "_single_src" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (1 + VECT) * TEST_LOOPS);
-
-       perf_start(&start);
-       for (l = 0; l < TEST_LOOPS; l++) {
-#if (VECT == 1)
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, 0, g_tbls, buffs[0],
-                                   *dest_perf_ptrs);
-#else
-               FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, 0, g_tbls, buffs[0],
-                                   dest_perf_ptrs);
-#endif
-
-       }
-       perf_stop(&stop);
-       printf(xstr(FUNCTION_UNDER_TEST) "_single_src_simple" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * (1 + VECT) * TEST_LOOPS);
-
-       printf("pass perf check\n");
-       return 0;
-
-}
index 24517ff03975ec2301ff152b2abb2e125ecb4aee..8d7e5eecd2ae9a973e04b0f664816414c70ccd3f 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -131,7 +131,7 @@ section .text
 
 
 align 16
-global gf_vect_mad_sse:function
+global gf_vect_mad_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mad_sse)
        FUNC_SAVE
        sub     len, 16
index d24713e8ad71847a33e36bb624f0a7bf2917961c..cecbc1669f04726d82a0243cf6e6fb5a83a90daf 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
 #include "types.h"
 
 #ifndef ALIGN_SIZE
-# define ALIGN_SIZE 16
+# define ALIGN_SIZE 32
 #endif
 
-//By default, test sse version
 #ifndef FUNCTION_UNDER_TEST
-# define FUNCTION_UNDER_TEST gf_6vect_mad_sse
-# define REF_FUNCTION gf_6vect_dot_prod_sse
-# define VECT 6
+//By default, test multi-binary version
+# define FUNCTION_UNDER_TEST gf_vect_mad
+# define REF_FUNCTION gf_vect_dot_prod
+# define VECT 1
 #endif
 
 #ifndef TEST_MIN_SIZE
-# define TEST_MIN_SIZE  ALIGN_SIZE
+# define TEST_MIN_SIZE 64
 #endif
 
 #define str(s) #s
index 651a090c583c9dc9c1a4cf09433f44804af9512b..c1a9b9799ac74cde05d02b76c1424e74f873a6df 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -111,7 +111,7 @@ section .text
 %define xtmp2c xmm7
 
 align 16
-global gf_vect_mul_avx:function
+global gf_vect_mul_avx:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mul_avx)
        FUNC_SAVE
        mov     pos, 0
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_mul_avx_perf.c b/ceph/src/isa-l/erasure_code/gf_vect_mul_avx_perf.c
deleted file mode 100644 (file)
index 392ed2a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset
-#include "erasure_code.h"
-#include "test.h"
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   4000000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     GT_L3_CACHE / 2
-#  define TEST_LOOPS   1000
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-#define TEST_MEM (2 * TEST_LEN)
-
-typedef unsigned char u8;
-
-int main(int argc, char *argv[])
-{
-       int i;
-       u8 *buff1, *buff2, gf_const_tbl[64], a = 2;
-       struct perf start, stop;
-
-       printf("gf_vect_mul_avx_perf:\n");
-
-       gf_vect_mul_init(a, gf_const_tbl);
-
-       // Allocate large mem region
-       buff1 = (u8 *) malloc(TEST_LEN);
-       buff2 = (u8 *) malloc(TEST_LEN);
-       if (NULL == buff1 || NULL == buff2) {
-               printf("Failed to allocate %dB\n", TEST_LEN);
-               return 1;
-       }
-
-       memset(buff1, 0, TEST_LEN);
-       memset(buff2, 0, TEST_LEN);
-
-       gf_vect_mul_avx(TEST_LEN, gf_const_tbl, buff1, buff2);
-
-       printf("Start timed tests\n");
-       fflush(0);
-
-       gf_vect_mul_avx(TEST_LEN, gf_const_tbl, buff1, buff2);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               gf_vect_mul_init(a, gf_const_tbl);
-               gf_vect_mul_avx(TEST_LEN, gf_const_tbl, buff1, buff2);
-       }
-       perf_stop(&stop);
-       printf("gf_vect_mul_avx" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
-
-       return 0;
-}
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_mul_avx_test.c b/ceph/src/isa-l/erasure_code/gf_vect_mul_avx_test.c
deleted file mode 100644 (file)
index 95d2867..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset
-#include "erasure_code.h"
-
-#define TEST_SIZE 8192
-#define TEST_MEM  TEST_SIZE
-#define TEST_LOOPS 100000
-#define TEST_TYPE_STR ""
-
-typedef unsigned char u8;
-
-int main(int argc, char *argv[])
-{
-       int i;
-       u8 *buff1, *buff2, *buff3, gf_const_tbl[64], a = 2;
-       int align, size;
-       unsigned char *efence_buff1;
-       unsigned char *efence_buff2;
-       unsigned char *efence_buff3;
-
-       printf("gf_vect_mul_avx:\n");
-
-       gf_vect_mul_init(a, gf_const_tbl);
-
-       buff1 = (u8 *) malloc(TEST_SIZE);
-       buff2 = (u8 *) malloc(TEST_SIZE);
-       buff3 = (u8 *) malloc(TEST_SIZE);
-
-       if (NULL == buff1 || NULL == buff2 || NULL == buff3) {
-               printf("buffer alloc error\n");
-               return -1;
-       }
-       // Fill with rand data
-       for (i = 0; i < TEST_SIZE; i++)
-               buff1[i] = rand();
-
-       gf_vect_mul_avx(TEST_SIZE, gf_const_tbl, buff1, buff2);
-
-       for (i = 0; i < TEST_SIZE; i++)
-               if (gf_mul(a, buff1[i]) != buff2[i]) {
-                       printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, buff1[i], buff2[i],
-                              gf_mul(2, buff1[i]));
-                       return 1;
-               }
-
-       gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3);
-
-       // Check reference function
-       for (i = 0; i < TEST_SIZE; i++)
-               if (buff2[i] != buff3[i]) {
-                       printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n",
-                              i, a, buff1[i], buff2[i], gf_mul(a, buff1[i]));
-                       return 1;
-               }
-
-       for (i = 0; i < TEST_SIZE; i++)
-               buff1[i] = rand();
-
-       // Check each possible constant
-       printf("Random tests ");
-       for (a = 0; a != 255; a++) {
-               gf_vect_mul_init(a, gf_const_tbl);
-               gf_vect_mul_avx(TEST_SIZE, gf_const_tbl, buff1, buff2);
-
-               for (i = 0; i < TEST_SIZE; i++)
-                       if (gf_mul(a, buff1[i]) != buff2[i]) {
-                               printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n",
-                                      i, a, buff1[i], buff2[i], gf_mul(2, buff1[i]));
-                               return 1;
-                       }
-               putchar('.');
-       }
-
-       // Run tests at end of buffer for Electric Fence
-       align = 32;
-       a = 2;
-
-       gf_vect_mul_init(a, gf_const_tbl);
-       for (size = 0; size < TEST_SIZE; size += align) {
-               // Line up TEST_SIZE from end
-               efence_buff1 = buff1 + size;
-               efence_buff2 = buff2 + size;
-               efence_buff3 = buff3 + size;
-
-               gf_vect_mul_avx(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2);
-
-               for (i = 0; i < TEST_SIZE - size; i++)
-                       if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) {
-                               printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n",
-                                      i, efence_buff1[i], efence_buff2[i], gf_mul(2,
-                                                                                  efence_buff1
-                                                                                  [i]));
-                               return 1;
-                       }
-
-               gf_vect_mul_base(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff3);
-
-               // Check reference function
-               for (i = 0; i < TEST_SIZE - size; i++)
-                       if (efence_buff2[i] != efence_buff3[i]) {
-                               printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n",
-                                      i, a, efence_buff2[i], efence_buff3[i], gf_mul(2,
-                                                                                     efence_buff1
-                                                                                     [i]));
-                               return 1;
-                       }
-
-               putchar('.');
-       }
-
-       printf(" done: Pass\n");
-       return 0;
-}
index 719e9049bccea9519c970ed7cc83f35806d95ce2..c47d2365dbb25719e54a1248bfd5a85813d51be3 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index bc9eff288fae5765a47c13c882029c98f25edd80..58194ccebcf8f7abc0b8df5e04920e1110669432 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -37,7 +37,6 @@
 #ifdef CACHED_TEST
 // Cached test, loop many times over small dataset
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   4000000
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 10
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     GT_L3_CACHE / 2
-#  define TEST_LOOPS   1000
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
 # endif
 #endif
 
 
 typedef unsigned char u8;
 
+void gf_vect_mul_perf(u8 a, u8 * gf_const_tbl, u8 * buff1, u8 * buff2)
+{
+       gf_vect_mul_init(a, gf_const_tbl);
+       gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2);
+}
+
 int main(int argc, char *argv[])
 {
-       int i;
        u8 *buff1, *buff2, gf_const_tbl[64], a = 2;
-       struct perf start, stop;
+       struct perf start;
 
        printf("gf_vect_mul_perf:\n");
 
-       gf_vect_mul_init(a, gf_const_tbl);
-
        // Allocate large mem region
        buff1 = (u8 *) malloc(TEST_LEN);
        buff2 = (u8 *) malloc(TEST_LEN);
@@ -80,20 +78,13 @@ int main(int argc, char *argv[])
        memset(buff1, 0, TEST_LEN);
        memset(buff2, 0, TEST_LEN);
 
-       gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2);
-
        printf("Start timed tests\n");
        fflush(0);
 
-       gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               gf_vect_mul_init(a, gf_const_tbl);
-               gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2);
-       }
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, gf_vect_mul_perf(a, gf_const_tbl, buff1, buff2));
+
        printf("gf_vect_mul" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
+       perf_print(start, (long long)TEST_LEN);
 
        return 0;
 }
index 5453ebb442b9049f9466a3abb10ec4da9814f8cc..36323d63960343329c64990334c34f739a3b01a4 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
@@ -112,7 +112,7 @@ section .text
 
 
 align 16
-global gf_vect_mul_sse:function
+global gf_vect_mul_sse:ISAL_SYM_TYPE_FUNCTION
 func(gf_vect_mul_sse)
        FUNC_SAVE
        mov     pos, 0
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_mul_sse_perf.c b/ceph/src/isa-l/erasure_code/gf_vect_mul_sse_perf.c
deleted file mode 100644 (file)
index 6851492..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>            // for memset
-#include "erasure_code.h"
-#include "test.h"
-
-//#define CACHED_TEST
-#ifdef CACHED_TEST
-// Cached test, loop many times over small dataset
-# define TEST_LEN     8*1024
-# define TEST_LOOPS   4000000
-# define TEST_TYPE_STR "_warm"
-#else
-# ifndef TEST_CUSTOM
-// Uncached test.  Pull from large mem base.
-#  define TEST_SOURCES 10
-#  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
-#  define TEST_LEN     GT_L3_CACHE / 2
-#  define TEST_LOOPS   1000
-#  define TEST_TYPE_STR "_cold"
-# else
-#  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#    define TEST_LOOPS 1000
-#  endif
-# endif
-#endif
-
-#define TEST_MEM (2 * TEST_LEN)
-
-typedef unsigned char u8;
-
-int main(int argc, char *argv[])
-{
-       int i;
-       u8 *buff1, *buff2, gf_const_tbl[64], a = 2;
-       struct perf start, stop;
-
-       printf("gf_vect_mul_sse_perf:\n");
-
-       gf_vect_mul_init(a, gf_const_tbl);
-
-       // Allocate large mem region
-       buff1 = (u8 *) malloc(TEST_LEN);
-       buff2 = (u8 *) malloc(TEST_LEN);
-       if (NULL == buff1 || NULL == buff2) {
-               printf("Failed to allocate %dB\n", TEST_LEN);
-               return 1;
-       }
-
-       memset(buff1, 0, TEST_LEN);
-       memset(buff2, 0, TEST_LEN);
-
-       printf("Start timed tests\n");
-       fflush(0);
-
-       gf_vect_mul_sse(TEST_LEN, gf_const_tbl, buff1, buff2);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++) {
-               gf_vect_mul_init(a, gf_const_tbl);      // in a re-build would only calc once
-               gf_vect_mul_sse(TEST_LEN, gf_const_tbl, buff1, buff2);
-       }
-       perf_stop(&stop);
-       printf("gf_vect_mul_sse" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
-
-       return 0;
-}
diff --git a/ceph/src/isa-l/erasure_code/gf_vect_mul_sse_test.c b/ceph/src/isa-l/erasure_code/gf_vect_mul_sse_test.c
deleted file mode 100644 (file)
index c3238b0..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "erasure_code.h"
-
-#define TEST_SIZE (128*1024)
-
-typedef unsigned char u8;
-
-int main(int argc, char *argv[])
-{
-       int i;
-       u8 *buff1, *buff2, *buff3, gf_const_tbl[64], a = 2;
-       int tsize;
-       int align, size;
-       unsigned char *efence_buff1;
-       unsigned char *efence_buff2;
-       unsigned char *efence_buff3;
-
-       printf("gf_vect_mul_sse_test: ");
-
-       gf_vect_mul_init(a, gf_const_tbl);
-
-       buff1 = (u8 *) malloc(TEST_SIZE);
-       buff2 = (u8 *) malloc(TEST_SIZE);
-       buff3 = (u8 *) malloc(TEST_SIZE);
-
-       if (NULL == buff1 || NULL == buff2 || NULL == buff3) {
-               printf("buffer alloc error\n");
-               return -1;
-       }
-       // Fill with rand data
-       for (i = 0; i < TEST_SIZE; i++)
-               buff1[i] = rand();
-
-       gf_vect_mul_sse(TEST_SIZE, gf_const_tbl, buff1, buff2);
-
-       for (i = 0; i < TEST_SIZE; i++) {
-               if (gf_mul(a, buff1[i]) != buff2[i]) {
-                       printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i,
-                              buff1[i], buff2[i], gf_mul(2, buff1[i]));
-                       return -1;
-               }
-       }
-
-       gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3);
-
-       // Check reference function
-       for (i = 0; i < TEST_SIZE; i++) {
-               if (buff2[i] != buff3[i]) {
-                       printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n",
-                              i, a, buff1[i], buff2[i], gf_mul(a, buff1[i]));
-                       return -1;
-               }
-       }
-
-       for (i = 0; i < TEST_SIZE; i++)
-               buff1[i] = rand();
-
-       // Check each possible constant
-       for (a = 0; a != 255; a++) {
-               gf_vect_mul_init(a, gf_const_tbl);
-               gf_vect_mul_sse(TEST_SIZE, gf_const_tbl, buff1, buff2);
-
-               for (i = 0; i < TEST_SIZE; i++)
-                       if (gf_mul(a, buff1[i]) != buff2[i]) {
-                               printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n",
-                                      i, a, buff1[i], buff2[i], gf_mul(2, buff1[i]));
-                               return -1;
-                       }
-               putchar('.');
-       }
-
-       // Check buffer len
-       for (tsize = TEST_SIZE; tsize > 0; tsize -= 32) {
-               a = rand();
-               gf_vect_mul_init(a, gf_const_tbl);
-               gf_vect_mul_sse(tsize, gf_const_tbl, buff1, buff2);
-
-               for (i = 0; i < tsize; i++)
-                       if (gf_mul(a, buff1[i]) != buff2[i]) {
-                               printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n",
-                                      i, a, buff1[i], buff2[i], gf_mul(2, buff1[i]));
-                               return -1;
-                       }
-               if (0 == tsize % (32 * 8)) {
-                       putchar('.');
-                       fflush(0);
-               }
-       }
-
-       // Run tests at end of buffer for Electric Fence
-       align = 32;
-       a = 2;
-
-       gf_vect_mul_init(a, gf_const_tbl);
-       for (size = 0; size < TEST_SIZE; size += align) {
-               // Line up TEST_SIZE from end
-               efence_buff1 = buff1 + size;
-               efence_buff2 = buff2 + size;
-               efence_buff3 = buff3 + size;
-
-               gf_vect_mul_sse(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2);
-
-               for (i = 0; i < TEST_SIZE - size; i++)
-                       if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) {
-                               printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n",
-                                      i, efence_buff1[i], efence_buff2[i], gf_mul(2,
-                                                                                  efence_buff1
-                                                                                  [i]));
-                               return 1;
-                       }
-
-               gf_vect_mul_base(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff3);
-
-               // Check reference function
-               for (i = 0; i < TEST_SIZE - size; i++)
-                       if (efence_buff2[i] != efence_buff3[i]) {
-                               printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n",
-                                      i, a, efence_buff2[i], efence_buff3[i], gf_mul(2,
-                                                                                     efence_buff1
-                                                                                     [i]));
-                               return 1;
-                       }
-
-               putchar('.');
-       }
-
-       printf(" done: Pass\n");
-       fflush(0);
-       return 0;
-}
index 816dfbcf25e6f52b9222240adae1eaee6b80de49..b1a406624bf776e88e120470eee15457935494f5 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>            // for memset
 #include "erasure_code.h"
 
-#define TEST_SIZE 8192
-#define TEST_MEM  TEST_SIZE
-#define TEST_LOOPS 100000
-#define TEST_TYPE_STR ""
+#define TEST_SIZE (128*1024)
 
 typedef unsigned char u8;
 
@@ -43,12 +39,13 @@ int main(int argc, char *argv[])
 {
        int i;
        u8 *buff1, *buff2, *buff3, gf_const_tbl[64], a = 2;
+       int tsize;
        int align, size;
        unsigned char *efence_buff1;
        unsigned char *efence_buff2;
        unsigned char *efence_buff3;
 
-       printf("gf_vect_mul_test:\n");
+       printf("gf_vect_mul_test: ");
 
        gf_vect_mul_init(a, gf_const_tbl);
 
@@ -66,42 +63,60 @@ int main(int argc, char *argv[])
 
        gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2);
 
-       for (i = 0; i < TEST_SIZE; i++)
+       for (i = 0; i < TEST_SIZE; i++) {
                if (gf_mul(a, buff1[i]) != buff2[i]) {
-                       printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, buff1[i], buff2[i],
-                              gf_mul(2, buff1[i]));
-                       return 1;
+                       printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i,
+                              buff1[i], buff2[i], gf_mul(2, buff1[i]));
+                       return -1;
                }
+       }
 
        gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3);
 
        // Check reference function
-       for (i = 0; i < TEST_SIZE; i++)
+       for (i = 0; i < TEST_SIZE; i++) {
                if (buff2[i] != buff3[i]) {
                        printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n",
                               i, a, buff1[i], buff2[i], gf_mul(a, buff1[i]));
-                       return 1;
+                       return -1;
                }
+       }
 
        for (i = 0; i < TEST_SIZE; i++)
                buff1[i] = rand();
 
        // Check each possible constant
-       printf("Random tests ");
        for (a = 0; a != 255; a++) {
                gf_vect_mul_init(a, gf_const_tbl);
                gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2);
 
-               for (i = 0; i < TEST_SIZE; i++) {
+               for (i = 0; i < TEST_SIZE; i++)
                        if (gf_mul(a, buff1[i]) != buff2[i]) {
                                printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n",
                                       i, a, buff1[i], buff2[i], gf_mul(2, buff1[i]));
-                               return 1;
+                               return -1;
                        }
-               }
                putchar('.');
        }
 
+       // Check buffer len
+       for (tsize = TEST_SIZE; tsize > 0; tsize -= 32) {
+               a = rand();
+               gf_vect_mul_init(a, gf_const_tbl);
+               gf_vect_mul(tsize, gf_const_tbl, buff1, buff2);
+
+               for (i = 0; i < tsize; i++)
+                       if (gf_mul(a, buff1[i]) != buff2[i]) {
+                               printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n",
+                                      i, a, buff1[i], buff2[i], gf_mul(2, buff1[i]));
+                               return -1;
+                       }
+               if (0 == tsize % (32 * 8)) {
+                       putchar('.');
+                       fflush(0);
+               }
+       }
+
        // Run tests at end of buffer for Electric Fence
        align = 32;
        a = 2;
@@ -138,5 +153,6 @@ int main(int argc, char *argv[])
        }
 
        printf(" done: Pass\n");
+       fflush(0);
        return 0;
 }
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/Makefile.am b/ceph/src/isa-l/erasure_code/ppc64le/Makefile.am
new file mode 100644 (file)
index 0000000..9d263ac
--- /dev/null
@@ -0,0 +1,15 @@
+lsrc_ppc64le      += erasure_code/ppc64le/ec_base_vsx.c \
+               erasure_code/ppc64le/gf_vect_mul_vsx.c \
+               erasure_code/ppc64le/gf_vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_vect_mad_vsx.c \
+               erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_2vect_mad_vsx.c \
+               erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_3vect_mad_vsx.c \
+               erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_4vect_mad_vsx.c \
+               erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_5vect_mad_vsx.c \
+               erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c \
+               erasure_code/ppc64le/gf_6vect_mad_vsx.c
+
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.c
new file mode 100644 (file)
index 0000000..05624f1
--- /dev/null
@@ -0,0 +1,97 @@
+#include "erasure_code.h"
+#include "ec_base_vsx.h"
+
+void gf_vect_dot_prod(int len, int vlen, unsigned char *v,
+                     unsigned char **src, unsigned char *dest)
+{
+       gf_vect_dot_prod_vsx(len, vlen, v, src, dest);
+}
+
+void gf_vect_mad(int len, int vec, int vec_i, unsigned char *v,
+                unsigned char *src, unsigned char *dest)
+{
+       gf_vect_mad_vsx(len, vec, vec_i, v, src, dest);
+
+}
+
+void ec_encode_data(int len, int srcs, int dests, unsigned char *v,
+                   unsigned char **src, unsigned char **dest)
+{
+       if (len < 64) {
+               ec_encode_data_base(len, srcs, dests, v, src, dest);
+               return;
+       }
+
+       while (dests >= 6) {
+               gf_6vect_dot_prod_vsx(len, srcs, v, src, dest);
+               v += 6 * srcs * 32;
+               dest += 6;
+               dests -= 6;
+       }
+       switch (dests) {
+       case 6:
+               gf_6vect_dot_prod_vsx(len, srcs, v, src, dest);
+               break;
+       case 5:
+               gf_5vect_dot_prod_vsx(len, srcs, v, src, dest);
+               break;
+       case 4:
+               gf_4vect_dot_prod_vsx(len, srcs, v, src, dest);
+               break;
+       case 3:
+               gf_3vect_dot_prod_vsx(len, srcs, v, src, dest);
+               break;
+       case 2:
+               gf_2vect_dot_prod_vsx(len, srcs, v, src, dest);
+               break;
+       case 1:
+               gf_vect_dot_prod_vsx(len, srcs, v, src, *dest);
+               break;
+       case 0:
+               break;
+       }
+}
+
+void ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *v,
+                          unsigned char *data, unsigned char **dest)
+{
+       if (len < 64) {
+               ec_encode_data_update_base(len, k, rows, vec_i, v, data, dest);
+               return;
+       }
+
+       while (rows >= 6) {
+               gf_6vect_mad_vsx(len, k, vec_i, v, data, dest);
+               v += 6 * k * 32;
+               dest += 6;
+               rows -= 6;
+       }
+       switch (rows) {
+       case 6:
+               gf_6vect_mad_vsx(len, k, vec_i, v, data, dest);
+               break;
+       case 5:
+               gf_5vect_mad_vsx(len, k, vec_i, v, data, dest);
+               break;
+       case 4:
+               gf_4vect_mad_vsx(len, k, vec_i, v, data, dest);
+               break;
+       case 3:
+               gf_3vect_mad_vsx(len, k, vec_i, v, data, dest);
+               break;
+       case 2:
+               gf_2vect_mad_vsx(len, k, vec_i, v, data, dest);
+               break;
+       case 1:
+               gf_vect_mad_vsx(len, k, vec_i, v, data, *dest);
+               break;
+       case 0:
+               break;
+       }
+}
+
+int gf_vect_mul(int len, unsigned char *a, void *src, void *dest)
+{
+       gf_vect_mul_vsx(len, a, (unsigned char *)src, (unsigned char *)dest);
+       return 0;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.h b/ceph/src/isa-l/erasure_code/ppc64le/ec_base_vsx.h
new file mode 100644 (file)
index 0000000..c808629
--- /dev/null
@@ -0,0 +1,338 @@
+#ifndef _ERASURE_CODE_PPC64LE_H_
+#define _ERASURE_CODE_PPC64LE_H_
+
+#include "erasure_code.h"
+#include <altivec.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__ibmxl__)
+#define EC_vec_xl(a, b) vec_xl_be(a, b)
+#define EC_vec_permxor(va, vb, vc) __vpermxor(va, vb, vc)
+#elif defined __GNUC__ && __GNUC__ >= 8
+#define EC_vec_xl(a, b) vec_xl_be(a, b)
+#define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vc)
+#elif defined __GNUC__ && __GNUC__ >= 7
+#if defined _ARCH_PWR9
+#define EC_vec_xl(a, b) vec_vsx_ld(a, b)
+#define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc))
+#else
+inline vector unsigned char EC_vec_xl(int off, unsigned char *ptr) {
+       vector unsigned char vc;
+       __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" : "=wa" (vc) : "r" (off), "r" (ptr));
+       return vc;
+}
+#define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc))
+#endif
+#else
+#if defined _ARCH_PWR8
+inline vector unsigned char EC_vec_xl(int off, unsigned char *ptr) {
+       vector unsigned char vc;
+       __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" : "=wa" (vc) : "r" (off), "r" (ptr));
+       return vc;
+}
+#define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc))
+#else
+#error "This code is only supported on ppc64le."
+#endif
+#endif
+
+/**
+ * @brief GF(2^8) vector multiply. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constant and save to destination array. Can be used for erasure coding encode
+ * and decode update when only one source is available at a time. Function
+ * requires pre-calculation of a 32 byte constant array based on the input
+ * coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+void gf_vect_mul_vsx(int len, unsigned char *gftbls, unsigned char *src, unsigned char *dest);
+
+/**
+ * @brief GF(2^8) vector dot product. VSX version.
+ *
+ * Does a GF(2^8) dot product across each byte of the input array and a constant
+ * set of coefficients to produce each byte of the output. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 32*vlen byte constant array based on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 32*vlen byte array of pre-calculated constants based
+ *               on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+void gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                         unsigned char **src, unsigned char *dest);
+
+/**
+ * @brief GF(2^8) vector dot product with two outputs. VSX version.
+ *
+ * Vector dot product optimized to calculate two outputs at a time. Does two
+ * GF(2^8) dot products across each byte of the input array and two constant
+ * sets of coefficients to produce each byte of the outputs. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 2*32*vlen byte constant array based on the two sets of input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 2*32*vlen byte array of pre-calculated constants
+ *               based on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Array of pointers to destination data buffers.
+ * @returns none
+ */
+
+void gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector dot product with three outputs. VSX version.
+ *
+ * Vector dot product optimized to calculate three outputs at a time. Does three
+ * GF(2^8) dot products across each byte of the input array and three constant
+ * sets of coefficients to produce each byte of the outputs. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 3*32*vlen byte constant array based on the three sets of input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 3*32*vlen byte array of pre-calculated constants
+ *               based on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Array of pointers to destination data buffers.
+ * @returns none
+ */
+
+void gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector dot product with four outputs. VSX version.
+ *
+ * Vector dot product optimized to calculate four outputs at a time. Does four
+ * GF(2^8) dot products across each byte of the input array and four constant
+ * sets of coefficients to produce each byte of the outputs. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 4*32*vlen byte constant array based on the four sets of input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 4*32*vlen byte array of pre-calculated constants
+ *               based on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Array of pointers to destination data buffers.
+ * @returns none
+ */
+
+void gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector dot product with five outputs. VSX version.
+ *
+ * Vector dot product optimized to calculate five outputs at a time. Does five
+ * GF(2^8) dot products across each byte of the input array and five constant
+ * sets of coefficients to produce each byte of the outputs. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 5*32*vlen byte constant array based on the five sets of input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes. Must >= 16.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 5*32*vlen byte array of pre-calculated constants
+ *               based on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Array of pointers to destination data buffers.
+ * @returns none
+ */
+
+void gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector dot product with six outputs. VSX version.
+ *
+ * Vector dot product optimized to calculate six outputs at a time. Does six
+ * GF(2^8) dot products across each byte of the input array and six constant
+ * sets of coefficients to produce each byte of the outputs. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 6*32*vlen byte constant array based on the six sets of input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 6*32*vlen byte array of pre-calculated constants
+ *               based on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Array of pointers to destination data buffers.
+ * @returns none
+ */
+
+void gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector multiply accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constant and add to destination array. Can be used for erasure coding encode
+ * and decode update when only one source is available at a time. Function
+ * requires pre-calculation of a 32*vec byte constant array based on the input
+ * coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+void gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                    unsigned char *dest);
+/**
+ * @brief GF(2^8) vector multiply with 2 accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constants and add to destination arrays. Can be used for erasure coding
+ * encode and decode update when only one source is available at a
+ * time. Function requires pre-calculation of a 32*vec byte constant array based
+ * on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Pointer to source input array.
+ * @param dest   Array of pointers to destination input/outputs.
+ * @returns none
+ */
+
+void gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                     unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector multiply with 3 accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constants and add to destination arrays. Can be used for erasure coding
+ * encode and decode update when only one source is available at a
+ * time. Function requires pre-calculation of a 32*vec byte constant array based
+ * on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Pointer to source input array.
+ * @param dest   Array of pointers to destination input/outputs.
+ * @returns none
+ */
+
+void gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                     unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector multiply with 4 accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constants and add to destination arrays. Can be used for erasure coding
+ * encode and decode update when only one source is available at a
+ * time. Function requires pre-calculation of a 32*vec byte constant array based
+ * on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Pointer to source input array.
+ * @param dest   Array of pointers to destination input/outputs.
+ * @returns none
+ */
+
+void gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                     unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector multiply with 5 accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constants and add to destination arrays. Can be used for erasure coding
+ * encode and decode update when only one source is available at a
+ * time. Function requires pre-calculation of a 32*vec byte constant array based
+ * on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Pointer to source input array.
+ * @param dest   Array of pointers to destination input/outputs.
+ * @returns none
+ */
+void gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                     unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector multiply with 6 accumulate. VSX version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constants and add to destination arrays. Can be used for erasure coding
+ * encode and decode update when only one source is available at a
+ * time. Function requires pre-calculation of a 32*vec byte constant array based
+ * on the input coefficients.
+ * @requires VSX
+ *
+ * @param len    Length of each vector in bytes.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Pointer to source input array.
+ * @param dest   Array of pointers to destination input/outputs.
+ * @returns none
+ */
+void gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                     unsigned char **dest);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //_ERASURE_CODE_PPC64LE_H_
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..3cb269c
--- /dev/null
@@ -0,0 +1,83 @@
+#include "ec_base_vsx.h"
+
+void gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4;
+       vector unsigned char vYD, vYE, vYF, vYG;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]);
+               gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_2vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1);
+       }
+
+       for (i = head; i < len - 63; i += 64) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+
+               vYD = vYD ^ vYD;
+               vYE = vYE ^ vYE;
+               vYF = vYF ^ vYF;
+               vYG = vYG ^ vYG;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+               unsigned char *g1 = &gftbls[1 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+                       vlo1 = EC_vec_xl(0, g1);
+                       vhi1 = EC_vec_xl(16, g1);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+                       vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+                       vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+                       g0 += 32;
+                       g1 += 32;
+               }
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_2vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..621684a
--- /dev/null
@@ -0,0 +1,65 @@
+#include "ec_base_vsx.h"
+
+void gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                     unsigned char *src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4;
+       vector unsigned char vYD, vYE, vYF, vYG;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vYD = vec_xl(32, t0 + i);
+               vYE = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vY3 = vec_xl(0, t1 + i);
+               vY4 = vec_xl(16, t1 + i);
+               vYF = vec_xl(32, t1 + i);
+               vYG = vec_xl(48, t1 + i);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+
+               vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+               vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+               vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+               vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..23b72dc
--- /dev/null
@@ -0,0 +1,104 @@
+#include "ec_base_vsx.h"
+
+void gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]);
+               gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]);
+               gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_3vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2);
+       }
+
+       for (i = head; i < len - 63; i += 64) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+               vY5 = vY5 ^ vY5;
+               vY6 = vY6 ^ vY6;
+
+               vYD = vYD ^ vYD;
+               vYE = vYE ^ vYE;
+               vYF = vYF ^ vYF;
+               vYG = vYG ^ vYG;
+               vYH = vYH ^ vYH;
+               vYI = vYI ^ vYI;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+               unsigned char *g1 = &gftbls[1 * 32 * vlen];
+               unsigned char *g2 = &gftbls[2 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+                       vlo1 = EC_vec_xl(0, g1);
+                       vhi1 = EC_vec_xl(16, g1);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vlo2 = vec_xl(0, g2);
+                       vhi2 = vec_xl(16, g2);
+
+                       vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+                       vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+                       vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+                       vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+                       vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+                       vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+                       vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+                       g0 += 32;
+                       g1 += 32;
+                       g2 += 32;
+               }
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_3vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..ba90c1f
--- /dev/null
@@ -0,0 +1,84 @@
+#include "ec_base_vsx.h"
+
+void gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                     unsigned char *src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vYD = vec_xl(32, t0 + i);
+               vYE = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vY3 = vec_xl(0, t1 + i);
+               vY4 = vec_xl(16, t1 + i);
+               vYF = vec_xl(32, t1 + i);
+               vYG = vec_xl(48, t1 + i);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+
+               vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+               vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+               vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+               vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+               vY5 = vec_xl(0, t2 + i);
+               vY6 = vec_xl(16, t2 + i);
+               vYH = vec_xl(32, t2 + i);
+               vYI = vec_xl(48, t2 + i);
+
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+
+               vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+               vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+               vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+               vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..e656544
--- /dev/null
@@ -0,0 +1,124 @@
+#include "ec_base_vsx.h"
+
+void gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]);
+               gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]);
+               gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]);
+               gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_4vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3);
+       }
+
+       for (i = head; i < len - 63; i += 64) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+               vY5 = vY5 ^ vY5;
+               vY6 = vY6 ^ vY6;
+               vY7 = vY7 ^ vY7;
+               vY8 = vY8 ^ vY8;
+
+               vYD = vYD ^ vYD;
+               vYE = vYE ^ vYE;
+               vYF = vYF ^ vYF;
+               vYG = vYG ^ vYG;
+               vYH = vYH ^ vYH;
+               vYI = vYI ^ vYI;
+               vYJ = vYJ ^ vYJ;
+               vYK = vYK ^ vYK;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+               unsigned char *g1 = &gftbls[1 * 32 * vlen];
+               unsigned char *g2 = &gftbls[2 * 32 * vlen];
+               unsigned char *g3 = &gftbls[3 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+                       vlo1 = EC_vec_xl(0, g1);
+                       vhi1 = EC_vec_xl(16, g1);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vlo2 = vec_xl(0, g2);
+                       vhi2 = vec_xl(16, g2);
+                       vlo3 = vec_xl(0, g3);
+                       vhi3 = vec_xl(16, g3);
+
+                       vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+                       vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+                       vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+                       vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+                       vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+                       vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+                       vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+                       vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+                       vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+                       vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+                       vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+                       g0 += 32;
+                       g1 += 32;
+                       g2 += 32;
+                       g3 += 32;
+               }
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_4vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..7b236b6
--- /dev/null
@@ -0,0 +1,103 @@
+#include "ec_base_vsx.h"
+
+void gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                     unsigned char *src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+       vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vYD = vec_xl(32, t0 + i);
+               vYE = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vY3 = vec_xl(0, t1 + i);
+               vY4 = vec_xl(16, t1 + i);
+               vYF = vec_xl(32, t1 + i);
+               vYG = vec_xl(48, t1 + i);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+
+               vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+               vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+               vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+               vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+               vY5 = vec_xl(0, t2 + i);
+               vY6 = vec_xl(16, t2 + i);
+               vYH = vec_xl(32, t2 + i);
+               vYI = vec_xl(48, t2 + i);
+
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+
+               vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+               vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+               vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+               vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+               vY7 = vec_xl(0, t3 + i);
+               vY8 = vec_xl(16, t3 + i);
+               vYJ = vec_xl(32, t3 + i);
+               vYK = vec_xl(48, t3 + i);
+
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+
+               vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+               vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+               vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+               vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..e9eef0e
--- /dev/null
@@ -0,0 +1,145 @@
+#include "ec_base_vsx.h"
+
+void gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3, *t4;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]);
+               gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]);
+               gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]);
+               gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]);
+               gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *)dest[4]);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_5vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+       t4 = (unsigned char *)dest[4];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4);
+       }
+
+       for (i = head; i < len - 63; i += 64) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+               vY5 = vY5 ^ vY5;
+               vY6 = vY6 ^ vY6;
+               vY7 = vY7 ^ vY7;
+               vY8 = vY8 ^ vY8;
+               vY9 = vY9 ^ vY9;
+               vYA = vYA ^ vYA;
+
+               vYD = vYD ^ vYD;
+               vYE = vYE ^ vYE;
+               vYF = vYF ^ vYF;
+               vYG = vYG ^ vYG;
+               vYH = vYH ^ vYH;
+               vYI = vYI ^ vYI;
+               vYJ = vYJ ^ vYJ;
+               vYK = vYK ^ vYK;
+               vYL = vYL ^ vYL;
+               vYM = vYM ^ vYM;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+               unsigned char *g1 = &gftbls[1 * 32 * vlen];
+               unsigned char *g2 = &gftbls[2 * 32 * vlen];
+               unsigned char *g3 = &gftbls[3 * 32 * vlen];
+               unsigned char *g4 = &gftbls[4 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+                       vlo1 = EC_vec_xl(0, g1);
+                       vhi1 = EC_vec_xl(16, g1);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vlo2 = vec_xl(0, g2);
+                       vhi2 = vec_xl(16, g2);
+                       vlo3 = vec_xl(0, g3);
+                       vhi3 = vec_xl(16, g3);
+
+                       vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+                       vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+                       vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+                       vlo4 = vec_xl(0, g4);
+                       vhi4 = vec_xl(16, g4);
+
+                       vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+                       vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+                       vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+                       vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+                       vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+                       vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+                       vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+                       vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+                       vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1);
+                       vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2);
+                       vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3);
+                       vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4);
+
+                       g0 += 32;
+                       g1 += 32;
+                       g2 += 32;
+                       g3 += 32;
+                       g4 += 32;
+               }
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+               vec_xst(vY9, 0, t4 + i);
+               vec_xst(vYA, 16, t4 + i);
+
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+               vec_xst(vYL, 32, t4 + i);
+               vec_xst(vYM, 48, t4 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_5vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..7bb7bb2
--- /dev/null
@@ -0,0 +1,122 @@
+#include "ec_base_vsx.h"
+
+void gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                     unsigned char *src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3, *t4;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+       t4 = (unsigned char *)dest[4];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+       vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+       vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5)));
+       vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vYD = vec_xl(32, t0 + i);
+               vYE = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vY3 = vec_xl(0, t1 + i);
+               vY4 = vec_xl(16, t1 + i);
+               vYF = vec_xl(32, t1 + i);
+               vYG = vec_xl(48, t1 + i);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+
+               vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+               vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+               vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+               vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+               vY5 = vec_xl(0, t2 + i);
+               vY6 = vec_xl(16, t2 + i);
+               vYH = vec_xl(32, t2 + i);
+               vYI = vec_xl(48, t2 + i);
+
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+
+               vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+               vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+               vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+               vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+               vY7 = vec_xl(0, t3 + i);
+               vY8 = vec_xl(16, t3 + i);
+               vYJ = vec_xl(32, t3 + i);
+               vYK = vec_xl(48, t3 + i);
+
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+
+               vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+               vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+               vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+               vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+               vY9 = vec_xl(0, t4 + i);
+               vYA = vec_xl(16, t4 + i);
+               vYL = vec_xl(32, t4 + i);
+               vYM = vec_xl(48, t4 + i);
+
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+
+               vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1);
+               vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2);
+               vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3);
+               vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4);
+
+               vec_xst(vY9, 0, t4 + i);
+               vec_xst(vYA, 16, t4 + i);
+               vec_xst(vYL, 32, t4 + i);
+               vec_xst(vYM, 48, t4 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..ac918bd
--- /dev/null
@@ -0,0 +1,166 @@
+#include "ec_base_vsx.h"
+
+void gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                          unsigned char **src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2;
+       vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]);
+               gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]);
+               gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]);
+               gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]);
+               gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *)dest[4]);
+               gf_vect_mul_vsx(len, &gftbls[5 * 32 * vlen], src[0], (unsigned char *)dest[5]);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_6vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+       t4 = (unsigned char *)dest[4];
+       t5 = (unsigned char *)dest[5];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4);
+               gf_vect_dot_prod_base(head, vlen, &gftbls[5 * 32 * vlen], src, t5);
+       }
+
+       for (i = head; i < len - 63; i += 64) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+               vY5 = vY5 ^ vY5;
+               vY6 = vY6 ^ vY6;
+               vY7 = vY7 ^ vY7;
+               vY8 = vY8 ^ vY8;
+               vY9 = vY9 ^ vY9;
+               vYA = vYA ^ vYA;
+               vYB = vYB ^ vYB;
+               vYC = vYC ^ vYC;
+
+               vYD = vYD ^ vYD;
+               vYE = vYE ^ vYE;
+               vYF = vYF ^ vYF;
+               vYG = vYG ^ vYG;
+               vYH = vYH ^ vYH;
+               vYI = vYI ^ vYI;
+               vYJ = vYJ ^ vYJ;
+               vYK = vYK ^ vYK;
+               vYL = vYL ^ vYL;
+               vYM = vYM ^ vYM;
+               vYN = vYN ^ vYN;
+               vYO = vYO ^ vYO;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+               unsigned char *g1 = &gftbls[1 * 32 * vlen];
+               unsigned char *g2 = &gftbls[2 * 32 * vlen];
+               unsigned char *g3 = &gftbls[3 * 32 * vlen];
+               unsigned char *g4 = &gftbls[4 * 32 * vlen];
+               unsigned char *g5 = &gftbls[5 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+                       vlo1 = EC_vec_xl(0, g1);
+                       vhi1 = EC_vec_xl(16, g1);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vlo2 = EC_vec_xl(0, g2);
+                       vhi2 = EC_vec_xl(16, g2);
+                       vlo3 = EC_vec_xl(0, g3);
+                       vhi3 = EC_vec_xl(16, g3);
+
+                       vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+                       vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+                       vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+                       vlo4 = EC_vec_xl(0, g4);
+                       vhi4 = EC_vec_xl(16, g4);
+                       vlo5 = EC_vec_xl(0, g5);
+                       vhi5 = EC_vec_xl(16, g5);
+
+                       vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+                       vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+                       vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+                       vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+                       vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+                       vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+                       vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+                       vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+                       vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1);
+                       vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2);
+                       vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3);
+                       vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4);
+
+                       vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1);
+                       vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2);
+                       vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3);
+                       vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4);
+
+                       g0 += 32;
+                       g1 += 32;
+                       g2 += 32;
+                       g3 += 32;
+                       g4 += 32;
+                       g5 += 32;
+               }
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+               vec_xst(vY9, 0, t4 + i);
+               vec_xst(vYA, 16, t4 + i);
+               vec_xst(vYB, 0, t5 + i);
+               vec_xst(vYC, 16, t5 + i);
+
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+               vec_xst(vYL, 32, t4 + i);
+               vec_xst(vYM, 48, t4 + i);
+               vec_xst(vYN, 32, t5 + i);
+               vec_xst(vYO, 48, t5 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_6vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..43ea6c6
--- /dev/null
@@ -0,0 +1,142 @@
+#include "ec_base_vsx.h"
+
+void gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                     unsigned char *src, unsigned char **dest)
+{
+       unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5;
+       vector unsigned char vX1, vX2, vX3, vX4;
+       vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC;
+       vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO;
+       vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2;
+       vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest[0];
+       t1 = (unsigned char *)dest[1];
+       t2 = (unsigned char *)dest[2];
+       t3 = (unsigned char *)dest[3];
+       t4 = (unsigned char *)dest[4];
+       t5 = (unsigned char *)dest[5];
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4);
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[5 * 32 * vec], src, t5);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5)));
+       vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5)));
+       vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+       vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5)));
+       vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5)));
+       vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5)));
+       vlo5 = EC_vec_xl(0, gftbls + (((5 * vec) << 5) + (vec_i << 5)));
+       vhi5 = EC_vec_xl(16, gftbls + (((5 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vYD = vec_xl(32, t0 + i);
+               vYE = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vYD, 32, t0 + i);
+               vec_xst(vYE, 48, t0 + i);
+
+               vY3 = vec_xl(0, t1 + i);
+               vY4 = vec_xl(16, t1 + i);
+               vYF = vec_xl(32, t1 + i);
+               vYG = vec_xl(48, t1 + i);
+
+               vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1);
+               vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2);
+               vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3);
+               vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4);
+
+               vec_xst(vY3, 0, t1 + i);
+               vec_xst(vY4, 16, t1 + i);
+               vec_xst(vYF, 32, t1 + i);
+               vec_xst(vYG, 48, t1 + i);
+
+               vY5 = vec_xl(0, t2 + i);
+               vY6 = vec_xl(16, t2 + i);
+               vYH = vec_xl(32, t2 + i);
+               vYI = vec_xl(48, t2 + i);
+
+               vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1);
+               vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2);
+               vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3);
+               vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4);
+
+               vY7 = vec_xl(0, t3 + i);
+               vY8 = vec_xl(16, t3 + i);
+               vYJ = vec_xl(32, t3 + i);
+               vYK = vec_xl(48, t3 + i);
+
+               vec_xst(vY5, 0, t2 + i);
+               vec_xst(vY6, 16, t2 + i);
+               vec_xst(vYH, 32, t2 + i);
+               vec_xst(vYI, 48, t2 + i);
+
+               vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1);
+               vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2);
+               vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3);
+               vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4);
+
+               vY9 = vec_xl(0, t4 + i);
+               vYA = vec_xl(16, t4 + i);
+               vYL = vec_xl(32, t4 + i);
+               vYM = vec_xl(48, t4 + i);
+
+               vec_xst(vY7, 0, t3 + i);
+               vec_xst(vY8, 16, t3 + i);
+               vec_xst(vYJ, 32, t3 + i);
+               vec_xst(vYK, 48, t3 + i);
+
+               vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1);
+               vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2);
+               vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3);
+               vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4);
+
+               vYB = vec_xl(0, t5 + i);
+               vYC = vec_xl(16, t5 + i);
+               vYN = vec_xl(32, t5 + i);
+               vYO = vec_xl(48, t5 + i);
+
+               vec_xst(vY9, 0, t4 + i);
+               vec_xst(vYA, 16, t4 + i);
+               vec_xst(vYL, 32, t4 + i);
+               vec_xst(vYM, 48, t4 + i);
+
+               vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1);
+               vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2);
+               vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3);
+               vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4);
+
+               vec_xst(vYB, 0, t5 + i);
+               vec_xst(vYC, 16, t5 + i);
+               vec_xst(vYN, 32, t5 + i);
+               vec_xst(vYO, 48, t5 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c
new file mode 100644 (file)
index 0000000..2f97e34
--- /dev/null
@@ -0,0 +1,85 @@
+#include "ec_base_vsx.h"
+
+void gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls,
+                         unsigned char **src, unsigned char *dest)
+{
+       unsigned char *s, *t0;
+       vector unsigned char vX1, vY1;
+       vector unsigned char vX2, vY2;
+       vector unsigned char vX3, vY3;
+       vector unsigned char vX4, vY4;
+       vector unsigned char vX5, vY5;
+       vector unsigned char vX6, vY6;
+       vector unsigned char vX7, vY7;
+       vector unsigned char vX8, vY8;
+       vector unsigned char vhi0, vlo0;
+       int i, j, head;
+
+       if (vlen < 128) {
+               gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest);
+
+               for (j = 1; j < vlen; j++) {
+                       gf_vect_mad_vsx(len, vlen, j, gftbls, src[j], dest);
+               }
+               return;
+       }
+
+       t0 = (unsigned char *)dest;
+
+       head = len % 128;
+       if (head != 0) {
+               gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0);
+       }
+
+       for (i = head; i < len - 127; i += 128) {
+               vY1 = vY1 ^ vY1;
+               vY2 = vY2 ^ vY2;
+               vY3 = vY3 ^ vY3;
+               vY4 = vY4 ^ vY4;
+
+               vY5 = vY5 ^ vY5;
+               vY6 = vY6 ^ vY6;
+               vY7 = vY7 ^ vY7;
+               vY8 = vY8 ^ vY8;
+
+               unsigned char *g0 = &gftbls[0 * 32 * vlen];
+
+               for (j = 0; j < vlen; j++) {
+                       s = (unsigned char *)src[j];
+                       vX1 = vec_xl(0, s + i);
+                       vX2 = vec_xl(16, s + i);
+                       vX3 = vec_xl(32, s + i);
+                       vX4 = vec_xl(48, s + i);
+
+                       vlo0 = EC_vec_xl(0, g0);
+                       vhi0 = EC_vec_xl(16, g0);
+
+                       vX5 = vec_xl(64, s + i);
+                       vX6 = vec_xl(80, s + i);
+                       vX7 = vec_xl(96, s + i);
+                       vX8 = vec_xl(112, s + i);
+
+                       vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+                       vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+                       vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3);
+                       vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+                       vY5 = vY5 ^ EC_vec_permxor(vhi0, vlo0, vX5);
+                       vY6 = vY6 ^ EC_vec_permxor(vhi0, vlo0, vX6);
+                       vY7 = vY7 ^ EC_vec_permxor(vhi0, vlo0, vX7);
+                       vY8 = vY8 ^ EC_vec_permxor(vhi0, vlo0, vX8);
+
+                       g0 += 32;
+               }
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 32, t0 + i);
+               vec_xst(vY4, 48, t0 + i);
+
+               vec_xst(vY5, 64, t0 + i);
+               vec_xst(vY6, 80, t0 + i);
+               vec_xst(vY7, 96, t0 + i);
+               vec_xst(vY8, 112, t0 + i);
+       }
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mad_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mad_vsx.c
new file mode 100644 (file)
index 0000000..a4810b9
--- /dev/null
@@ -0,0 +1,48 @@
+#include "ec_base_vsx.h"
+
+void gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls,
+                    unsigned char *src, unsigned char *dest)
+{
+       unsigned char *s, *t0;
+       vector unsigned char vX1, vY1;
+       vector unsigned char vX2, vY2;
+       vector unsigned char vX3, vY3;
+       vector unsigned char vX4, vY4;
+       vector unsigned char vhi0, vlo0;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest;
+
+       head = len % 64;
+       if (head != 0) {
+               gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, dest);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+       vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5)));
+
+       for (i = head; i < len - 63; i += 64) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vY1 = vec_xl(0, t0 + i);
+               vY2 = vec_xl(16, t0 + i);
+               vY3 = vec_xl(32, t0 + i);
+               vY4 = vec_xl(48, t0 + i);
+
+               vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2);
+               vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3);
+               vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 32, t0 + i);
+               vec_xst(vY4, 48, t0 + i);
+       }
+
+       return;
+}
diff --git a/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mul_vsx.c b/ceph/src/isa-l/erasure_code/ppc64le/gf_vect_mul_vsx.c
new file mode 100644 (file)
index 0000000..3e610a1
--- /dev/null
@@ -0,0 +1,61 @@
+#include "ec_base_vsx.h"
+
+void gf_vect_mul_vsx(int len, unsigned char *gftbl, unsigned char *src, unsigned char *dest)
+{
+       unsigned char *s, *t0;
+       vector unsigned char vX1, vY1;
+       vector unsigned char vX2, vY2;
+       vector unsigned char vX3, vY3;
+       vector unsigned char vX4, vY4;
+       vector unsigned char vX5, vY5;
+       vector unsigned char vX6, vY6;
+       vector unsigned char vX7, vY7;
+       vector unsigned char vX8, vY8;
+       vector unsigned char vhi0, vlo0;
+       int i, head;
+
+       s = (unsigned char *)src;
+       t0 = (unsigned char *)dest;
+
+       head = len % 128;
+       if (head != 0) {
+               gf_vect_mul_base(head, gftbl, src, dest);
+       }
+
+       vlo0 = EC_vec_xl(0, gftbl);
+       vhi0 = EC_vec_xl(16, gftbl);
+
+       for (i = head; i < len - 127; i += 128) {
+               vX1 = vec_xl(0, s + i);
+               vX2 = vec_xl(16, s + i);
+               vX3 = vec_xl(32, s + i);
+               vX4 = vec_xl(48, s + i);
+
+               vX5 = vec_xl(64, s + i);
+               vX6 = vec_xl(80, s + i);
+               vX7 = vec_xl(96, s + i);
+               vX8 = vec_xl(112, s + i);
+
+               vY1 = EC_vec_permxor(vhi0, vlo0, vX1);
+               vY2 = EC_vec_permxor(vhi0, vlo0, vX2);
+               vY3 = EC_vec_permxor(vhi0, vlo0, vX3);
+               vY4 = EC_vec_permxor(vhi0, vlo0, vX4);
+
+               vY5 = EC_vec_permxor(vhi0, vlo0, vX5);
+               vY6 = EC_vec_permxor(vhi0, vlo0, vX6);
+               vY7 = EC_vec_permxor(vhi0, vlo0, vX7);
+               vY8 = EC_vec_permxor(vhi0, vlo0, vX8);
+
+               vec_xst(vY1, 0, t0 + i);
+               vec_xst(vY2, 16, t0 + i);
+               vec_xst(vY3, 32, t0 + i);
+               vec_xst(vY4, 48, t0 + i);
+
+               vec_xst(vY5, 64, t0 + i);
+               vec_xst(vY6, 80, t0 + i);
+               vec_xst(vY7, 96, t0 + i);
+               vec_xst(vY8, 112, t0 + i);
+       }
+
+       return;
+}
diff --git a/ceph/src/isa-l/examples/ec/Makefile.am b/ceph/src/isa-l/examples/ec/Makefile.am
new file mode 100644 (file)
index 0000000..e7121af
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Intel Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+src_include += -I $(srcdir)/examples/ec
+
+examples += examples/ec/ec_simple_example
+examples += examples/ec/ec_piggyback_example
diff --git a/ceph/src/isa-l/examples/ec/Makefile.unx b/ceph/src/isa-l/examples/ec/Makefile.unx
new file mode 100644 (file)
index 0000000..b04cfdf
--- /dev/null
@@ -0,0 +1,8 @@
+
+default: ex
+
+include ../../erasure_code/Makefile.am
+include Makefile.am
+include ../../make.inc
+
+VPATH = . ../../erasure_code ../../include
diff --git a/ceph/src/isa-l/examples/ec/ec_piggyback_example.c b/ceph/src/isa-l/examples/ec/ec_piggyback_example.c
new file mode 100644 (file)
index 0000000..e19abc0
--- /dev/null
@@ -0,0 +1,506 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include "erasure_code.h"      // use <isa-l.h> instead when linking against installed
+#include "test.h"
+
+#define MMAX 255
+#define KMAX 255
+
+typedef unsigned char u8;
+int verbose = 0;
+
+int usage(void)
+{
+       fprintf(stderr,
+               "Usage: ec_piggyback_example [options]\n"
+               "  -h        Help\n"
+               "  -k <val>  Number of source fragments\n"
+               "  -p <val>  Number of parity fragments\n"
+               "  -l <val>  Length of fragments\n"
+               "  -e <val>  Simulate erasure on frag index val. Zero based. Can be repeated.\n"
+               "  -v        Verbose\n"
+               "  -b        Run timed benchmark\n"
+               "  -s        Toggle use of sparse matrix opt\n"
+               "  -r <seed> Pick random (k, p) with seed\n");
+       exit(0);
+}
+
+// Cauchy-based matrix
+void gf_gen_full_pb_cauchy_matrix(u8 * a, int m, int k)
+{
+       int i, j, p = m - k;
+
+       // Identity matrix in top k x k to indicate a symetric code
+       memset(a, 0, k * m);
+       for (i = 0; i < k; i++)
+               a[k * i + i] = 1;
+
+       for (i = k; i < (k + p / 2); i++) {
+               for (j = 0; j < k / 2; j++)
+                       a[k * i + j] = gf_inv(i ^ j);
+               for (; j < k; j++)
+                       a[k * i + j] = 0;
+       }
+       for (; i < m; i++) {
+               for (j = 0; j < k / 2; j++)
+                       a[k * i + j] = 0;
+               for (; j < k; j++)
+                       a[k * i + j] = gf_inv((i - p / 2) ^ (j - k / 2));
+       }
+
+       // Fill in mixture of B parity depending on a few localized A sources
+       int r = 0, c = 0;
+       int repeat_len = k / (p - 2);
+       int parity_rows = p / 2;
+
+       for (i = 1 + k + parity_rows; i < m; i++, r++) {
+               if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1))))
+                       repeat_len++;
+
+               for (j = 0; j < repeat_len; j++, c++)
+                       a[k * i + c] = gf_inv((k + 1) ^ c);
+       }
+}
+
+// Vandermonde based matrix - not recommended due to limits when invertable
+void gf_gen_full_pb_vand_matrix(u8 * a, int m, int k)
+{
+       int i, j, p = m - k;
+       unsigned char q, gen = 1;
+
+       // Identity matrix in top k x k to indicate a symetric code
+       memset(a, 0, k * m);
+       for (i = 0; i < k; i++)
+               a[k * i + i] = 1;
+
+       for (i = k; i < (k + (p / 2)); i++) {
+               q = 1;
+               for (j = 0; j < k / 2; j++) {
+                       a[k * i + j] = q;
+                       q = gf_mul(q, gen);
+               }
+               for (; j < k; j++)
+                       a[k * i + j] = 0;
+               gen = gf_mul(gen, 2);
+       }
+       gen = 1;
+       for (; i < m; i++) {
+               q = 1;
+               for (j = 0; j < k / 2; j++) {
+                       a[k * i + j] = 0;
+               }
+               for (; j < k; j++) {
+                       a[k * i + j] = q;
+                       q = gf_mul(q, gen);
+               }
+               gen = gf_mul(gen, 2);
+       }
+
+       // Fill in mixture of B parity depending on a few localized A sources
+       int r = 0, c = 0;
+       int repeat_len = k / (p - 2);
+       int parity_rows = p / 2;
+
+       for (i = 1 + k + parity_rows; i < m; i++, r++) {
+               if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1))))
+                       repeat_len++;
+
+               for (j = 0; j < repeat_len; j++)
+                       a[k * i + c++] = 1;
+       }
+}
+
+void print_matrix(int m, int k, unsigned char *s, const char *msg)
+{
+       int i, j;
+
+       printf("%s:\n", msg);
+       for (i = 0; i < m; i++) {
+               printf("%3d- ", i);
+               for (j = 0; j < k; j++) {
+                       printf(" %2x", 0xff & s[j + (i * k)]);
+               }
+               printf("\n");
+       }
+       printf("\n");
+}
+
+void print_list(int n, unsigned char *s, const char *msg)
+{
+       int i;
+       if (!verbose)
+               return;
+
+       printf("%s: ", msg);
+       for (i = 0; i < n; i++)
+               printf(" %d", s[i]);
+       printf("\n");
+}
+
+static int gf_gen_decode_matrix(u8 * encode_matrix,
+                               u8 * decode_matrix,
+                               u8 * invert_matrix,
+                               u8 * temp_matrix,
+                               u8 * decode_index,
+                               u8 * frag_err_list, int nerrs, int k, int m);
+
+int main(int argc, char *argv[])
+{
+       int i, j, m, c, e, ret;
+       int k = 10, p = 4, len = 8 * 1024;      // Default params
+       int nerrs = 0;
+       int benchmark = 0;
+       int sparse_matrix_opt = 1;
+
+       // Fragment buffer pointers
+       u8 *frag_ptrs[MMAX];
+       u8 *parity_ptrs[KMAX];
+       u8 *recover_srcs[KMAX];
+       u8 *recover_outp[KMAX];
+       u8 frag_err_list[MMAX];
+
+       // Coefficient matrices
+       u8 *encode_matrix, *decode_matrix;
+       u8 *invert_matrix, *temp_matrix;
+       u8 *g_tbls;
+       u8 decode_index[MMAX];
+
+       if (argc == 1)
+               for (i = 0; i < p; i++)
+                       frag_err_list[nerrs++] = rand() % (k + p);
+
+       while ((c = getopt(argc, argv, "k:p:l:e:r:hvbs")) != -1) {
+               switch (c) {
+               case 'k':
+                       k = atoi(optarg);
+                       break;
+               case 'p':
+                       p = atoi(optarg);
+                       break;
+               case 'l':
+                       len = atoi(optarg);
+                       if (len < 0)
+                               usage();
+                       break;
+               case 'e':
+                       e = atoi(optarg);
+                       frag_err_list[nerrs++] = e;
+                       break;
+               case 'r':
+                       srand(atoi(optarg));
+                       k = (rand() % MMAX) / 4;
+                       k = (k < 2) ? 2 : k;
+                       p = (rand() % (MMAX - k)) / 4;
+                       p = (p < 2) ? 2 : p;
+                       for (i = 0; i < k && nerrs < p; i++)
+                               if (rand() & 1)
+                                       frag_err_list[nerrs++] = i;
+                       break;
+               case 'v':
+                       verbose++;
+                       break;
+               case 'b':
+                       benchmark = 1;
+                       break;
+               case 's':
+                       sparse_matrix_opt = !sparse_matrix_opt;
+                       break;
+               case 'h':
+               default:
+                       usage();
+                       break;
+               }
+       }
+       m = k + p;
+
+       // Check for valid parameters
+       if (m > (MMAX / 2) || k > (KMAX / 2) || m < 0 || p < 2 || k < 1) {
+               printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n",
+                      m, k, p, nerrs);
+               usage();
+       }
+       if (nerrs > p) {
+               printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n",
+                      nerrs, p);
+       }
+       for (i = 0; i < nerrs; i++) {
+               if (frag_err_list[i] >= m)
+                       printf(" fragment %d not in range\n", frag_err_list[i]);
+       }
+
+       printf("ec_piggyback_example:\n");
+
+       /*
+        * One simple way to implement piggyback codes is to keep a 2x wide matrix
+        * that covers the how each parity is related to both A and B sources.  This
+        * keeps it easy to generalize in parameters m,k and the resulting sparse
+        * matrix multiplication can be optimized by pre-removal of zero items.
+        */
+
+       int k2 = 2 * k;
+       int p2 = 2 * p;
+       int m2 = k2 + p2;
+       int nerrs2 = nerrs;
+
+       encode_matrix = malloc(m2 * k2);
+       decode_matrix = malloc(m2 * k2);
+       invert_matrix = malloc(m2 * k2);
+       temp_matrix = malloc(m2 * k2);
+       g_tbls = malloc(k2 * p2 * 32);
+
+       if (encode_matrix == NULL || decode_matrix == NULL
+           || invert_matrix == NULL || temp_matrix == NULL || g_tbls == NULL) {
+               printf("Test failure! Error with malloc\n");
+               return -1;
+       }
+       // Allocate the src fragments
+       for (i = 0; i < k; i++) {
+               if (NULL == (frag_ptrs[i] = malloc(len))) {
+                       printf("alloc error: Fail\n");
+                       return -1;
+               }
+       }
+       // Allocate the parity fragments
+       for (i = 0; i < p2; i++) {
+               if (NULL == (parity_ptrs[i] = malloc(len / 2))) {
+                       printf("alloc error: Fail\n");
+                       return -1;
+               }
+       }
+
+       // Allocate buffers for recovered data
+       for (i = 0; i < p2; i++) {
+               if (NULL == (recover_outp[i] = malloc(len / 2))) {
+                       printf("alloc error: Fail\n");
+                       return -1;
+               }
+       }
+
+       // Fill sources with random data
+       for (i = 0; i < k; i++)
+               for (j = 0; j < len; j++)
+                       frag_ptrs[i][j] = rand();
+
+       printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len);
+
+       // Pick an encode matrix.
+       gf_gen_full_pb_cauchy_matrix(encode_matrix, m2, k2);
+
+       if (verbose)
+               print_matrix(m2, k2, encode_matrix, "encode matrix");
+
+       // Initialize g_tbls from encode matrix
+       ec_init_tables(k2, p2, &encode_matrix[k2 * k2], g_tbls);
+
+       // Fold A and B into single list of fragments
+       for (i = 0; i < k; i++)
+               frag_ptrs[i + k] = &frag_ptrs[i][len / 2];
+
+       if (!sparse_matrix_opt) {
+               // Standard encode using no assumptions on the encode matrix
+
+               // Generate EC parity blocks from sources
+               ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs, parity_ptrs);
+
+               if (benchmark) {
+                       struct perf start;
+                       BENCHMARK(&start, BENCHMARK_TIME,
+                                 ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs,
+                                                parity_ptrs));
+                       printf("ec_piggyback_encode_std: ");
+                       perf_print(start, m2 * len / 2);
+               }
+       } else {
+               // Sparse matrix optimization - use fact that input matrix is sparse
+
+               // Keep an encode matrix with some zero elements removed
+               u8 *encode_matrix_faster, *g_tbls_faster;
+               encode_matrix_faster = malloc(m * k);
+               g_tbls_faster = malloc(k * p * 32);
+               if (encode_matrix_faster == NULL || g_tbls_faster == NULL) {
+                       printf("Test failure! Error with malloc\n");
+                       return -1;
+               }
+
+               /*
+                * Pack with only the part that we know are non-zero.  Alternatively
+                * we could search and keep track of non-zero elements but for
+                * simplicity we just skip the lower quadrant.
+                */
+               for (i = k, j = k2; i < m; i++, j++)
+                       memcpy(&encode_matrix_faster[k * i], &encode_matrix[k2 * j], k);
+
+               if (verbose) {
+                       print_matrix(p, k, &encode_matrix_faster[k * k],
+                                    "encode via sparse-opt");
+                       print_matrix(p2 / 2, k2, &encode_matrix[(k2 + p2 / 2) * k2],
+                                    "encode via sparse-opt");
+               }
+               // Initialize g_tbls from encode matrix
+               ec_init_tables(k, p, &encode_matrix_faster[k * k], g_tbls_faster);
+
+               // Generate EC parity blocks from sources
+               ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs, parity_ptrs);
+               ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32], frag_ptrs,
+                              &parity_ptrs[p]);
+
+               if (benchmark) {
+                       struct perf start;
+                       BENCHMARK(&start, BENCHMARK_TIME,
+                                 ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs,
+                                                parity_ptrs);
+                                 ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32],
+                                                frag_ptrs, &parity_ptrs[p]));
+                       printf("ec_piggyback_encode_sparse: ");
+                       perf_print(start, m2 * len / 2);
+               }
+       }
+
+       if (nerrs <= 0)
+               return 0;
+
+       printf(" recover %d fragments\n", nerrs);
+
+       // Set frag pointers to correspond to parity
+       for (i = k2; i < m2; i++)
+               frag_ptrs[i] = parity_ptrs[i - k2];
+
+       print_list(nerrs2, frag_err_list, " frag err list");
+
+       // Find a decode matrix to regenerate all erasures from remaining frags
+       ret = gf_gen_decode_matrix(encode_matrix, decode_matrix,
+                                  invert_matrix, temp_matrix, decode_index, frag_err_list,
+                                  nerrs2, k2, m2);
+
+       if (ret != 0) {
+               printf("Fail on generate decode matrix\n");
+               return -1;
+       }
+       // Pack recovery array pointers as list of valid fragments
+       for (i = 0; i < k2; i++)
+               if (decode_index[i] < k2)
+                       recover_srcs[i] = frag_ptrs[decode_index[i]];
+               else
+                       recover_srcs[i] = parity_ptrs[decode_index[i] - k2];
+
+       print_list(k2, decode_index, " decode index");
+
+       // Recover data
+       ec_init_tables(k2, nerrs2, decode_matrix, g_tbls);
+       ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs, recover_outp);
+
+       if (benchmark) {
+               struct perf start;
+               BENCHMARK(&start, BENCHMARK_TIME,
+                         ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs,
+                                        recover_outp));
+               printf("ec_piggyback_decode: ");
+               perf_print(start, (k2 + nerrs2) * len / 2);
+       }
+       // Check that recovered buffers are the same as original
+       printf(" check recovery of block {");
+       for (i = 0; i < nerrs2; i++) {
+               printf(" %d", frag_err_list[i]);
+               if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len / 2)) {
+                       printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]);
+                       return -1;
+               }
+       }
+       printf(" } done all: Pass\n");
+
+       return 0;
+}
+
+// Generate decode matrix from encode matrix and erasure list
+
+static int gf_gen_decode_matrix(u8 * encode_matrix,
+                               u8 * decode_matrix,
+                               u8 * invert_matrix,
+                               u8 * temp_matrix,
+                               u8 * decode_index, u8 * frag_err_list, int nerrs, int k, int m)
+{
+       int i, j, p, r;
+       int nsrcerrs = 0;
+       u8 s, *b = temp_matrix;
+       u8 frag_in_err[MMAX];
+
+       memset(frag_in_err, 0, sizeof(frag_in_err));
+
+       // Order the fragments in erasure for easier sorting
+       for (i = 0; i < nerrs; i++) {
+               if (frag_err_list[i] < k)
+                       nsrcerrs++;
+               frag_in_err[frag_err_list[i]] = 1;
+       }
+
+       // Construct b (matrix that encoded remaining frags) by removing erased rows
+       for (i = 0, r = 0; i < k; i++, r++) {
+               while (frag_in_err[r])
+                       r++;
+               for (j = 0; j < k; j++)
+                       b[k * i + j] = encode_matrix[k * r + j];
+               decode_index[i] = r;
+       }
+       if (verbose > 1)
+               print_matrix(k, k, b, "matrix to invert");
+
+       // Invert matrix to get recovery matrix
+       if (gf_invert_matrix(b, invert_matrix, k) < 0)
+               return -1;
+
+       if (verbose > 2)
+               print_matrix(k, k, invert_matrix, "matrix inverted");
+
+       // Get decode matrix with only wanted recovery rows
+       for (i = 0; i < nsrcerrs; i++) {
+               for (j = 0; j < k; j++) {
+                       decode_matrix[k * i + j] = invert_matrix[k * frag_err_list[i] + j];
+               }
+       }
+
+       // For non-src (parity) erasures need to multiply encode matrix * invert
+       for (p = nsrcerrs; p < nerrs; p++) {
+               for (i = 0; i < k; i++) {
+                       s = 0;
+                       for (j = 0; j < k; j++)
+                               s ^= gf_mul(invert_matrix[j * k + i],
+                                           encode_matrix[k * frag_err_list[p] + j]);
+
+                       decode_matrix[k * p + i] = s;
+               }
+       }
+       if (verbose > 1)
+               print_matrix(nerrs, k, decode_matrix, "decode matrix");
+       return 0;
+}
diff --git a/ceph/src/isa-l/examples/ec/ec_simple_example.c b/ceph/src/isa-l/examples/ec/ec_simple_example.c
new file mode 100644 (file)
index 0000000..82efa6b
--- /dev/null
@@ -0,0 +1,277 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include "erasure_code.h"      // use <isa-l.h> instead when linking against installed
+
+#define MMAX 255
+#define KMAX 255
+
+typedef unsigned char u8;
+
+int usage(void)
+{
+       fprintf(stderr,
+               "Usage: ec_simple_example [options]\n"
+               "  -h        Help\n"
+               "  -k <val>  Number of source fragments\n"
+               "  -p <val>  Number of parity fragments\n"
+               "  -l <val>  Length of fragments\n"
+               "  -e <val>  Simulate erasure on frag index val. Zero based. Can be repeated.\n"
+               "  -r <seed> Pick random (k, p) with seed\n");
+       exit(0);
+}
+
+static int gf_gen_decode_matrix_simple(u8 * encode_matrix,
+                                      u8 * decode_matrix,
+                                      u8 * invert_matrix,
+                                      u8 * temp_matrix,
+                                      u8 * decode_index,
+                                      u8 * frag_err_list, int nerrs, int k, int m);
+
+int main(int argc, char *argv[])
+{
+       int i, j, m, c, e, ret;
+       int k = 10, p = 4, len = 8 * 1024;      // Default params
+       int nerrs = 0;
+
+       // Fragment buffer pointers
+       u8 *frag_ptrs[MMAX];
+       u8 *recover_srcs[KMAX];
+       u8 *recover_outp[KMAX];
+       u8 frag_err_list[MMAX];
+
+       // Coefficient matrices
+       u8 *encode_matrix, *decode_matrix;
+       u8 *invert_matrix, *temp_matrix;
+       u8 *g_tbls;
+       u8 decode_index[MMAX];
+
+       if (argc == 1)
+               for (i = 0; i < p; i++)
+                       frag_err_list[nerrs++] = rand() % (k + p);
+
+       while ((c = getopt(argc, argv, "k:p:l:e:r:h")) != -1) {
+               switch (c) {
+               case 'k':
+                       k = atoi(optarg);
+                       break;
+               case 'p':
+                       p = atoi(optarg);
+                       break;
+               case 'l':
+                       len = atoi(optarg);
+                       if (len < 0)
+                               usage();
+                       break;
+               case 'e':
+                       e = atoi(optarg);
+                       frag_err_list[nerrs++] = e;
+                       break;
+               case 'r':
+                       srand(atoi(optarg));
+                       k = (rand() % (MMAX - 1)) + 1;  // Pick k {1 to MMAX - 1}
+                       p = (rand() % (MMAX - k)) + 1;  // Pick p {1 to MMAX - k}
+
+                       for (i = 0; i < k + p && nerrs < p; i++)
+                               if (rand() & 1)
+                                       frag_err_list[nerrs++] = i;
+                       break;
+               case 'h':
+               default:
+                       usage();
+                       break;
+               }
+       }
+       m = k + p;
+
+       // Check for valid parameters
+       if (m > MMAX || k > KMAX || m < 0 || p < 1 || k < 1) {
+               printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n",
+                      m, k, p, nerrs);
+               usage();
+       }
+       if (nerrs > p) {
+               printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n",
+                      nerrs, p);
+               usage();
+       }
+       for (i = 0; i < nerrs; i++) {
+               if (frag_err_list[i] >= m) {
+                       printf(" fragment %d not in range\n", frag_err_list[i]);
+                       usage();
+               }
+       }
+
+       printf("ec_simple_example:\n");
+
+       // Allocate coding matrices
+       encode_matrix = malloc(m * k);
+       decode_matrix = malloc(m * k);
+       invert_matrix = malloc(m * k);
+       temp_matrix = malloc(m * k);
+       g_tbls = malloc(k * p * 32);
+
+       if (encode_matrix == NULL || decode_matrix == NULL
+           || invert_matrix == NULL || temp_matrix == NULL || g_tbls == NULL) {
+               printf("Test failure! Error with malloc\n");
+               return -1;
+       }
+       // Allocate the src & parity buffers
+       for (i = 0; i < m; i++) {
+               if (NULL == (frag_ptrs[i] = malloc(len))) {
+                       printf("alloc error: Fail\n");
+                       return -1;
+               }
+       }
+
+       // Allocate buffers for recovered data
+       for (i = 0; i < p; i++) {
+               if (NULL == (recover_outp[i] = malloc(len))) {
+                       printf("alloc error: Fail\n");
+                       return -1;
+               }
+       }
+
+       // Fill sources with random data
+       for (i = 0; i < k; i++)
+               for (j = 0; j < len; j++)
+                       frag_ptrs[i][j] = rand();
+
+       printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len);
+
+       // Pick an encode matrix. A Cauchy matrix is a good choice as even
+       // large k are always invertable keeping the recovery rule simple.
+       gf_gen_cauchy1_matrix(encode_matrix, m, k);
+
+       // Initialize g_tbls from encode matrix
+       ec_init_tables(k, p, &encode_matrix[k * k], g_tbls);
+
+       // Generate EC parity blocks from sources
+       ec_encode_data(len, k, p, g_tbls, frag_ptrs, &frag_ptrs[k]);
+
+       if (nerrs <= 0)
+               return 0;
+
+       printf(" recover %d fragments\n", nerrs);
+
+       // Find a decode matrix to regenerate all erasures from remaining frags
+       ret = gf_gen_decode_matrix_simple(encode_matrix, decode_matrix,
+                                         invert_matrix, temp_matrix, decode_index,
+                                         frag_err_list, nerrs, k, m);
+       if (ret != 0) {
+               printf("Fail on generate decode matrix\n");
+               return -1;
+       }
+       // Pack recovery array pointers as list of valid fragments
+       for (i = 0; i < k; i++)
+               recover_srcs[i] = frag_ptrs[decode_index[i]];
+
+       // Recover data
+       ec_init_tables(k, nerrs, decode_matrix, g_tbls);
+       ec_encode_data(len, k, nerrs, g_tbls, recover_srcs, recover_outp);
+
+       // Check that recovered buffers are the same as original
+       printf(" check recovery of block {");
+       for (i = 0; i < nerrs; i++) {
+               printf(" %d", frag_err_list[i]);
+               if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len)) {
+                       printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]);
+                       return -1;
+               }
+       }
+
+       printf(" } done all: Pass\n");
+       return 0;
+}
+
+/*
+ * Generate decode matrix from encode matrix and erasure list
+ *
+ */
+
+static int gf_gen_decode_matrix_simple(u8 * encode_matrix,
+                                      u8 * decode_matrix,
+                                      u8 * invert_matrix,
+                                      u8 * temp_matrix,
+                                      u8 * decode_index, u8 * frag_err_list, int nerrs, int k,
+                                      int m)
+{
+       int i, j, p, r;
+       int nsrcerrs = 0;
+       u8 s, *b = temp_matrix;
+       u8 frag_in_err[MMAX];
+
+       memset(frag_in_err, 0, sizeof(frag_in_err));
+
+       // Order the fragments in erasure for easier sorting
+       for (i = 0; i < nerrs; i++) {
+               if (frag_err_list[i] < k)
+                       nsrcerrs++;
+               frag_in_err[frag_err_list[i]] = 1;
+       }
+
+       // Construct b (matrix that encoded remaining frags) by removing erased rows
+       for (i = 0, r = 0; i < k; i++, r++) {
+               while (frag_in_err[r])
+                       r++;
+               for (j = 0; j < k; j++)
+                       b[k * i + j] = encode_matrix[k * r + j];
+               decode_index[i] = r;
+       }
+
+       // Invert matrix to get recovery matrix
+       if (gf_invert_matrix(b, invert_matrix, k) < 0)
+               return -1;
+
+       // Get decode matrix with only wanted recovery rows
+       for (i = 0; i < nerrs; i++) {
+               if (frag_err_list[i] < k)       // A src err
+                       for (j = 0; j < k; j++)
+                               decode_matrix[k * i + j] =
+                                   invert_matrix[k * frag_err_list[i] + j];
+       }
+
+       // For non-src (parity) erasures need to multiply encode matrix * invert
+       for (p = 0; p < nerrs; p++) {
+               if (frag_err_list[p] >= k) {    // A parity err
+                       for (i = 0; i < k; i++) {
+                               s = 0;
+                               for (j = 0; j < k; j++)
+                                       s ^= gf_mul(invert_matrix[j * k + i],
+                                                   encode_matrix[k * frag_err_list[p] + j]);
+                               decode_matrix[k * p + i] = s;
+                       }
+               }
+       }
+       return 0;
+}
index 7b70ad61f576cecdd35dadd926d46e07221c6145..bec359ab5cd736ed1e46858cf3dad49e36e0877f 100644 (file)
@@ -31,24 +31,38 @@ lsrc        +=      igzip/igzip.c \
                igzip/hufftables_c.c \
                igzip/igzip_base.c \
                igzip/igzip_icf_base.c \
-               igzip/crc32_gzip_base.c \
+               igzip/adler32_base.c \
                igzip/flatten_ll.c \
-               igzip/encode_df.c
+               igzip/encode_df.c \
+               igzip/igzip_icf_body.c
 
 lsrc_base_aliases += igzip/igzip_base_aliases.c igzip/proc_heap_base.c
 lsrc_x86_32       += igzip/igzip_base_aliases.c igzip/proc_heap_base.c
+lsrc_ppc64le      += igzip/igzip_base_aliases.c igzip/proc_heap_base.c
 
-lsrc_x86_64 +=  \
-               igzip/igzip_body_01.asm \
-               igzip/igzip_body_02.asm \
-               igzip/igzip_body_04.asm \
+lsrc_aarch64 +=        igzip/aarch64/igzip_inflate_multibinary_arm64.S  \
+               igzip/aarch64/igzip_multibinary_arm64.S \
+               igzip/aarch64/igzip_isal_adler32_neon.S \
+               igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c \
+               igzip/aarch64/igzip_deflate_body_aarch64.S \
+               igzip/aarch64/igzip_deflate_finish_aarch64.S \
+               igzip/aarch64/isal_deflate_icf_body_hash_hist.S \
+               igzip/aarch64/isal_deflate_icf_finish_hash_hist.S \
+               igzip/aarch64/igzip_set_long_icf_fg.S \
+               igzip/aarch64/encode_df.S \
+               igzip/aarch64/isal_update_histogram.S \
+               igzip/aarch64/gen_icf_map.S \
+               igzip/aarch64/igzip_deflate_hash_aarch64.S \
+               igzip/aarch64/igzip_decode_huffman_code_block_aarch64.S \
+               igzip/proc_heap_base.c
+
+lsrc_x86_64 += igzip/igzip_body.asm \
                igzip/igzip_finish.asm \
-               igzip/igzip_icf_body_01.asm \
-               igzip/igzip_icf_body_02.asm \
-               igzip/igzip_icf_body_04.asm \
+               igzip/igzip_icf_body_h1_gr_bt.asm \
                igzip/igzip_icf_finish.asm \
                igzip/rfc1951_lookup.asm \
-               igzip/crc32_gzip.asm igzip/detect_repeated_char.asm \
+               igzip/adler32_sse.asm \
+               igzip/adler32_avx2_4.asm \
                igzip/igzip_multibinary.asm \
                igzip/igzip_update_histogram_01.asm \
                igzip/igzip_update_histogram_04.asm \
@@ -56,25 +70,30 @@ lsrc_x86_64 +=  \
                igzip/igzip_decode_block_stateless_04.asm \
                igzip/igzip_inflate_multibinary.asm \
                igzip/encode_df_04.asm \
-               igzip/proc_heap.asm
+               igzip/encode_df_06.asm \
+               igzip/proc_heap.asm \
+               igzip/igzip_deflate_hash.asm \
+               igzip/igzip_gen_icf_map_lh1_06.asm \
+               igzip/igzip_gen_icf_map_lh1_04.asm \
+               igzip/igzip_set_long_icf_fg_04.asm \
+               igzip/igzip_set_long_icf_fg_06.asm
 
 src_include += -I $(srcdir)/igzip
 extern_hdrs += include/igzip_lib.h
 
-pkginclude_HEADERS += include/types.h
-
 check_tests +=  igzip/igzip_rand_test
+check_tests +=  igzip/igzip_wrapper_hdr_test
+check_tests +=  igzip/checksum32_funcs_test
 
-perf_tests  +=  igzip/igzip_perf igzip/igzip_sync_flush_perf
-
-other_tests +=  igzip/igzip_file_perf igzip/igzip_sync_flush_file_perf igzip/igzip_stateless_file_perf igzip/igzip_hist_perf
+other_tests +=  igzip/igzip_file_perf igzip/igzip_hist_perf
+other_tests +=  igzip/igzip_perf
 other_tests +=  igzip/igzip_semi_dyn_file_perf
+other_tests +=  igzip/igzip_build_hash_table_perf
 
 other_src   +=         igzip/bitbuf2.asm  \
                igzip/data_struct2.asm \
                igzip/inflate_data_structs.asm \
                igzip/igzip_body.asm \
-               igzip/igzip_icf_body.asm \
                igzip/igzip_finish.asm \
                igzip/lz0a_const.asm \
                igzip/options.asm \
@@ -87,14 +106,19 @@ other_src   +=     igzip/bitbuf2.asm  \
                include/reg_sizes.asm \
                include/multibinary.asm \
                include/test.h \
+               include/unaligned.h \
                igzip/huffman.h \
                igzip/igzip_level_buf_structs.h \
                igzip/igzip_decode_block_stateless.asm \
                igzip/inflate_std_vects.h \
                igzip/flatten_ll.h \
                igzip/encode_df.h \
-               igzip/encode_df_asm.asm \
-               igzip/heap_macros.asm
+               igzip/heap_macros.asm \
+               igzip/igzip_wrapper.h \
+               igzip/static_inflate.h \
+               igzip/igzip_checksums.h
+
+perf_tests  +=  igzip/adler32_perf
 
 examples    +=         igzip/igzip_example igzip/igzip_sync_flush_example
 
@@ -102,23 +126,19 @@ igzip_igzip_rand_test_LDADD = libisal.la
 
 # Include tools to make custom Huffman tables based on sample data
 other_tests += igzip/generate_custom_hufftables
+other_tests += igzip/generate_static_inflate
 other_src   += igzip/huff_codes.h
 lsrc        += igzip/huff_codes.c
 
 # Include tools and tests using the reference inflate
-other_tests += igzip/igzip_inflate_perf
 other_tests += igzip/igzip_inflate_test
-other_tests += igzip/igzip_fuzz_inflate
 lsrc   += igzip/igzip_inflate.c
-other_src   += igzip/crc_inflate.h
+other_src   += igzip/checksum_test_ref.h
 
-igzip_inflate_perf: LDLIBS += -lz
-igzip_igzip_inflate_perf_LDADD = libisal.la
-igzip_igzip_inflate_perf_LDFLAGS = -lz
+igzip_perf: LDLIBS += -lz
+igzip_igzip_perf_LDADD = libisal.la
+igzip_igzip_perf_LDFLAGS = -lz
 igzip_inflate_test: LDLIBS += -lz
 igzip_igzip_inflate_test_LDADD = libisal.la
 igzip_igzip_inflate_test_LDFLAGS = -lz
 igzip_igzip_hist_perf_LDADD = libisal.la
-igzip_fuzz_inflate: LDLIBS += -lz
-igzip_igzip_fuzz_inflate_LDADD = libisal.la
-igzip_igzip_fuzz_inflate_LDFLAGS = -lz
diff --git a/ceph/src/isa-l/igzip/aarch64/bitbuf2_aarch64.h b/ceph/src/isa-l/igzip/aarch64/bitbuf2_aarch64.h
new file mode 100644 (file)
index 0000000..88eb18d
--- /dev/null
@@ -0,0 +1,57 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef __BITBUF2_AARCH64_H__
+#define __BITBUF2_AARCH64_H__
+#include "options_aarch64.h"
+
+#ifdef __ASSEMBLY__
+.macro update_bits     stream:req,code:req,code_len:req,m_bits:req,m_bit_count:req \
+                       m_out_buf:req
+
+       lsl     x_\code,x_\code,x_\m_bit_count
+       orr     x_\m_bits,x_\code,x_\m_bits
+       add     x_\m_bit_count,x_\code_len,x_\m_bit_count
+
+       str     x_\m_bits,[x_\m_out_buf]
+
+       and     w_\code,w_\m_bit_count,-8
+       lsr     w_\code_len,w_\m_bit_count,3
+       add     x_\m_out_buf,x_\m_out_buf,w_\code_len,uxtw
+       sub     w_\m_bit_count,w_\m_bit_count,w_\code
+       lsr     x_\m_bits,x_\m_bits,x_\code
+
+       str     x_\m_bits,[stream,_internal_state_bitbuf_m_bits]
+       str     w_\m_bit_count,[stream,_internal_state_bitbuf_m_bit_count]
+       str     x_\m_out_buf,[stream,_internal_state_bitbuf_m_out_buf]
+
+
+.endm
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/aarch64/data_struct_aarch64.h b/ceph/src/isa-l/igzip/aarch64/data_struct_aarch64.h
new file mode 100644 (file)
index 0000000..71160fe
--- /dev/null
@@ -0,0 +1,226 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#ifndef __AARCH64_DATA_STRUCT_H__
+#define __AARCH64_DATA_STRUCT_H__
+#ifdef __ASSEMBLY__
+
+#define FIELD(name,size,align) \
+       .set _FIELD_OFFSET,(_FIELD_OFFSET + (align) - 1) & (~ ((align)-1)); \
+       .equ name,_FIELD_OFFSET ;                                       \
+       .set _FIELD_OFFSET,_FIELD_OFFSET + size;                        \
+       .if align > _STRUCT_ALIGN;                                      \
+               .set _STRUCT_ALIGN, align;                              \
+       .endif;
+
+#define START_STRUCT(name) .set _FIELD_OFFSET,0;.set _STRUCT_ALIGN,0;
+
+#define END_STRUCT(name)   .set _##name##_size,_FIELD_OFFSET;\
+                          .set _##name##_align,_STRUCT_ALIGN
+
+#define CONST(name,value)  .equ name,value
+
+
+/// BitBuf2
+START_STRUCT(BitBuf2)
+       ///      name   size    align
+       FIELD (  _m_bits,       8,      8 )
+       FIELD (  _m_bit_count,  4,      4 )
+       FIELD (  _m_out_buf,    8,      8 )
+       FIELD (  _m_out_end,    8,      8 )
+       FIELD (  _m_out_start,  8,      8 )
+END_STRUCT(BitBuf2)
+
+
+/// isal_mod_hist
+#define HIST_ELEM_SIZE 4
+START_STRUCT(isal_mod_hist)
+       ///      name   size    align
+       FIELD (  _d_hist,       30*HIST_ELEM_SIZE,      HIST_ELEM_SIZE )
+       FIELD (  _ll_hist,      513*HIST_ELEM_SIZE,     HIST_ELEM_SIZE )
+END_STRUCT(isal_mod_hist)
+
+
+/// hufftables_icf
+#define HUFF_CODE_SIZE 4
+START_STRUCT(hufftables_icf)
+       ///      name   size    align
+       FIELD (  _dist_table,   31      *       HUFF_CODE_SIZE, HUFF_CODE_SIZE )
+       FIELD (  _lit_len_table,        513     *       HUFF_CODE_SIZE, HUFF_CODE_SIZE )
+END_STRUCT(hufftables_icf)
+
+
+/// hash8k_buf
+START_STRUCT(hash8k_buf)
+       ///      name   size    align
+       FIELD (  _hash8k_table, 2       *       IGZIP_HASH8K_HASH_SIZE, 2 )
+END_STRUCT(hash8k_buf)
+
+
+/// hash_map_buf
+START_STRUCT(hash_map_buf)
+       ///      name   size    align
+       FIELD (  _hash_table,   2       *       IGZIP_HASH_MAP_HASH_SIZE,       2 )
+       FIELD (  _matches_next, 8,      8 )
+       FIELD (  _matches_end,  8,      8 )
+       FIELD (  _matches,      4*4*1024,       4 )
+       FIELD (  _overflow,     4*LA,   4 )
+END_STRUCT(hash_map_buf)
+
+
+/// level_buf
+#define DEF_MAX_HDR_SIZE 328
+START_STRUCT(level_buf)
+       ///      name   size    align
+       FIELD (  _encode_tables,        _hufftables_icf_size,   _hufftables_icf_align )
+       FIELD (  _hist, _isal_mod_hist_size,    _isal_mod_hist_align )
+       FIELD (  _deflate_hdr_count,    4,      4 )
+       FIELD (  _deflate_hdr_extra_bits,4,     4 )
+       FIELD (  _deflate_hdr,  DEF_MAX_HDR_SIZE,       1 )
+       FIELD (  _icf_buf_next, 8,      8 )
+       FIELD (  _icf_buf_avail_out,    8,      8 )
+       FIELD (  _icf_buf_start,        8,      8 )
+       FIELD (  _lvl_extra,    _hash_map_buf_size,     _hash_map_buf_align )
+END_STRUCT(level_buf)
+
+
+CONST( _hash8k_hash_table , _lvl_extra + _hash8k_table )
+CONST( _hash_map_hash_table , _lvl_extra + _hash_table )
+CONST( _hash_map_matches_next , _lvl_extra + _matches_next )
+CONST( _hash_map_matches_end , _lvl_extra + _matches_end )
+CONST( _hash_map_matches , _lvl_extra + _matches )
+CONST( _hist_lit_len , _hist+_ll_hist )
+CONST( _hist_dist , _hist+_d_hist )
+
+
+/// isal_zstate
+START_STRUCT(isal_zstate)
+       ///      name   size    align
+       FIELD (  _total_in_start,4,     4 )
+       FIELD (  _block_next,   4,      4 )
+       FIELD (  _block_end,    4,      4 )
+       FIELD (  _dist_mask,    4,      4 )
+       FIELD (  _hash_mask,    4,      4 )
+       FIELD (  _state,        4,      4 )
+       FIELD (  _bitbuf,       _BitBuf2_size,  _BitBuf2_align )
+       FIELD (  _crc,  4,      4 )
+       FIELD (  _has_wrap_hdr, 1,      1 )
+       FIELD (  _has_eob_hdr,  1,      1 )
+       FIELD (  _has_eob,      1,      1 )
+       FIELD (  _has_hist,     1,      1 )
+       FIELD (  _has_level_buf_init,   2,      2 )
+       FIELD (  _count,        4,      4 )
+       FIELD (  _tmp_out_buff, 16,     1 )
+       FIELD (  _tmp_out_start,        4,      4 )
+       FIELD (  _tmp_out_end,  4,      4 )
+       FIELD (  _b_bytes_valid,        4,      4 )
+       FIELD (  _b_bytes_processed,    4,      4 )
+       FIELD (  _buffer,       BSIZE,  1 )
+       FIELD (  _head, IGZIP_LVL0_HASH_SIZE*2, 2 )
+END_STRUCT(isal_zstate)
+
+
+
+CONST( _bitbuf_m_bits , _bitbuf+_m_bits )
+CONST( _bitbuf_m_bit_count , _bitbuf+_m_bit_count )
+CONST( _bitbuf_m_out_buf , _bitbuf+_m_out_buf )
+CONST( _bitbuf_m_out_end , _bitbuf+_m_out_end )
+CONST( _bitbuf_m_out_start , _bitbuf+_m_out_start )
+
+
+/// isal_zstream
+START_STRUCT(isal_zstream)
+       ///      name   size    align
+       FIELD (  _next_in,      8,      8 )
+       FIELD (  _avail_in,     4,      4 )
+       FIELD (  _total_in,     4,      4 )
+       FIELD (  _next_out,     8,      8 )
+       FIELD (  _avail_out,    4,      4 )
+       FIELD (  _total_out,    4,      4 )
+       FIELD (  _hufftables,   8,      8 )
+       FIELD (  _level,        4,      4 )
+       FIELD (  _level_buf_size,       4,      4 )
+       FIELD (  _level_buf,    8,      8 )
+       FIELD (  _end_of_stream,        2,      2 )
+       FIELD (  _flush,        2,      2 )
+       FIELD (  _gzip_flag,    2,      2 )
+       FIELD (  _hist_bits,    2,      2 )
+       FIELD (  _internal_state,       _isal_zstate_size,      _isal_zstate_align )
+END_STRUCT(isal_zstream)
+
+
+
+CONST( _internal_state_total_in_start , _internal_state+_total_in_start )
+CONST( _internal_state_block_next , _internal_state+_block_next )
+CONST( _internal_state_block_end , _internal_state+_block_end )
+CONST( _internal_state_b_bytes_valid , _internal_state+_b_bytes_valid )
+CONST( _internal_state_b_bytes_processed , _internal_state+_b_bytes_processed )
+CONST( _internal_state_crc , _internal_state+_crc )
+CONST( _internal_state_dist_mask , _internal_state+_dist_mask )
+CONST( _internal_state_hash_mask , _internal_state+_hash_mask )
+CONST( _internal_state_bitbuf , _internal_state+_bitbuf )
+CONST( _internal_state_state , _internal_state+_state )
+CONST( _internal_state_count , _internal_state+_count )
+CONST( _internal_state_tmp_out_buff , _internal_state+_tmp_out_buff )
+CONST( _internal_state_tmp_out_start , _internal_state+_tmp_out_start )
+CONST( _internal_state_tmp_out_end , _internal_state+_tmp_out_end )
+CONST( _internal_state_has_wrap_hdr , _internal_state+_has_wrap_hdr )
+CONST( _internal_state_has_eob , _internal_state+_has_eob )
+CONST( _internal_state_has_eob_hdr , _internal_state+_has_eob_hdr )
+CONST( _internal_state_has_hist , _internal_state+_has_hist )
+CONST( _internal_state_has_level_buf_init , _internal_state+_has_level_buf_init )
+CONST( _internal_state_buffer , _internal_state+_buffer )
+CONST( _internal_state_head , _internal_state+_head )
+CONST( _internal_state_bitbuf_m_bits , _internal_state+_bitbuf_m_bits )
+CONST( _internal_state_bitbuf_m_bit_count , _internal_state+_bitbuf_m_bit_count )
+CONST( _internal_state_bitbuf_m_out_buf , _internal_state+_bitbuf_m_out_buf )
+CONST( _internal_state_bitbuf_m_out_end , _internal_state+_bitbuf_m_out_end )
+CONST( _internal_state_bitbuf_m_out_start , _internal_state+_bitbuf_m_out_start )
+
+///     Internal       States
+CONST( ZSTATE_NEW_HDR , 0 )
+CONST( ZSTATE_HDR , (ZSTATE_NEW_HDR + 1) )
+CONST( ZSTATE_CREATE_HDR , (ZSTATE_HDR + 1) )
+CONST( ZSTATE_BODY , (ZSTATE_CREATE_HDR + 1) )
+CONST( ZSTATE_FLUSH_READ_BUFFER , (ZSTATE_BODY + 1) )
+CONST( ZSTATE_FLUSH_ICF_BUFFER , (ZSTATE_FLUSH_READ_BUFFER + 1) )
+CONST( ZSTATE_TYPE0_HDR , (ZSTATE_FLUSH_ICF_BUFFER + 1) )
+CONST( ZSTATE_TYPE0_BODY , (ZSTATE_TYPE0_HDR + 1) )
+CONST( ZSTATE_SYNC_FLUSH , (ZSTATE_TYPE0_BODY + 1) )
+CONST( ZSTATE_FLUSH_WRITE_BUFFER , (ZSTATE_SYNC_FLUSH + 1) )
+CONST( ZSTATE_TRL , (ZSTATE_FLUSH_WRITE_BUFFER + 1) )
+
+CONST( _NO_FLUSH , 0 )
+CONST( _SYNC_FLUSH , 1 )
+CONST( _FULL_FLUSH , 2 )
+CONST( _STORED_BLK , 0 )
+CONST( IGZIP_NO_HIST , 0 )
+CONST( IGZIP_HIST , 1 )
+CONST( IGZIP_DICT_HIST , 2 )
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/aarch64/encode_df.S b/ceph/src/isa-l/igzip/aarch64/encode_df.S
new file mode 100644 (file)
index 0000000..6dddddf
--- /dev/null
@@ -0,0 +1,159 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+       .arch armv8-a+crc
+       .text
+       .align  2
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+       .global encode_deflate_icf_aarch64
+       .type   encode_deflate_icf_aarch64, %function
+
+/*
+       struct deflate_icf *encode_deflate_icf_base(struct deflate_icf *next_in,
+                               struct deflate_icf *end_in, struct BitBuf2 *bb,
+                               struct hufftables_icf *hufftables)
+
+*/
+
+       // parameters
+       declare_generic_reg     next_in,                0,x
+       declare_generic_reg     end_in,                 1,x
+       declare_generic_reg     bb,                     2,x
+       declare_generic_reg     hufftables,             3,x
+
+       // local variable
+       declare_generic_reg     bb_out_end,             4,x
+       declare_generic_reg     bb_bit_count,           5,w
+       declare_generic_reg     dist_extra,             6,x
+       declare_generic_reg     dist_lit_table,         7,x
+       declare_generic_reg     code_and_extra,         8,x
+       declare_generic_reg     bb_out_buf,             9,x
+       declare_generic_reg     bb_bits,                10,x
+       declare_generic_reg     d_length,               11,x
+       declare_generic_reg     l_length,               12,x
+       declare_generic_reg     d_extra_bit_count,      13,x
+
+       declare_generic_reg     code_sum,               4,x
+       declare_generic_reg     count_sum,              7,x
+
+       declare_generic_reg     tmp0,                   14,x
+       declare_generic_reg     tmp1,                   15,x
+
+// bit buffer offset
+.equ   offset_m_bits, 0
+.equ   offset_m_bit_count, 8
+.equ   offset_m_out_buf, 16
+.equ   offset_m_out_end, 24
+
+encode_deflate_icf_aarch64:
+       cmp     next_in, end_in
+       bcs     .done
+
+       ldp     bb_out_buf, bb_out_end, [bb, offset_m_out_buf]
+       cmp     bb_out_end, bb_out_buf
+       bcc     .done
+
+       ldr     bb_bit_count, [bb, offset_m_bit_count]
+       ldr     bb_bits, [bb, offset_m_bits]
+       b       .loop_start
+
+       .align 3
+.loop:
+       ldr     bb_out_end, [bb, offset_m_out_end]
+       cmp     bb_out_end, bb_out_buf
+       bcc     .done
+
+.loop_start:
+       ldrh    w_code_and_extra, [next_in]
+       add     next_in, next_in, 4
+       ldr     w_dist_lit_table, [next_in, -4]
+       and     code_and_extra, code_and_extra, 1023
+
+       ldrh    w_dist_extra, [next_in, -2]
+       add     code_and_extra, code_and_extra, 31
+       ubfx    x_dist_lit_table, x_dist_lit_table, 10, 9
+       add     x_tmp0, hufftables, code_and_extra, lsl 2
+       ubfx    x_dist_extra, x_dist_extra, 3, 13
+       lsl     x_dist_lit_table, x_dist_lit_table, 2
+
+       ldr     w_code_and_extra, [hufftables, code_and_extra, lsl 2]
+       add     x_d_extra_bit_count, hufftables, x_dist_lit_table
+       ldrb    w_l_length, [x_tmp0, 3]
+       and     code_and_extra, code_and_extra, 0xffffff
+       ldrh    w_code_sum, [hufftables, x_dist_lit_table]
+       ldrb    w_d_length, [x_d_extra_bit_count, 3]
+       add     w_l_length, w_l_length, bb_bit_count
+       ldrb    w_d_extra_bit_count, [x_d_extra_bit_count, 2]
+
+       lsl     x_tmp0, code_and_extra, x_bb_bit_count
+       add     bb_bit_count, w_d_length, w_l_length
+       lsl     x_code_sum, x_code_sum, x_l_length
+       orr     x_code_sum, x_code_sum, x_tmp0
+       add     w_count_sum, w_d_extra_bit_count, bb_bit_count
+       lsl     x_bb_bit_count, x_dist_extra, x_bb_bit_count
+
+       orr     x_bb_bit_count, x_bb_bit_count, bb_bits
+       orr     x_tmp0, x_code_sum, x_bb_bit_count         // me->m_bits => x_tmp0
+       str     x_tmp0, [bb, offset_m_bits]                // me->m_bits => x_tmp0
+       str     w_count_sum, [bb, offset_m_bit_count]
+
+       str     x_tmp0, [bb_out_buf]                       // me->m_bits => x_tmp0
+       ldr     bb_bit_count, [bb, offset_m_bit_count]
+       ldr     bb_bits, [bb, offset_m_bits]
+       and     w_tmp0, bb_bit_count, -8                   // bits => w_tmp0
+       ldr     bb_out_buf, [bb, offset_m_out_buf]
+       lsr     w_tmp1, bb_bit_count, 3                    // bits/8 => w_tmp1
+       lsr     bb_bits, bb_bits, x_tmp0                   // bits => x_tmp0
+       sub     bb_bit_count, bb_bit_count, w_tmp0         // bits => w_tmp0
+       add     bb_out_buf, bb_out_buf, x_tmp1             // bits/8 => x_tmp1
+       str     bb_bits, [bb,offset_m_bits]
+       str     bb_bit_count, [bb, offset_m_bit_count]
+       str     bb_out_buf, [bb, offset_m_out_buf]
+
+       cmp     end_in, next_in
+       bhi     .loop
+
+.done:
+       ret
+       .size   encode_deflate_icf_aarch64, .-encode_deflate_icf_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/gen_icf_map.S b/ceph/src/isa-l/igzip/aarch64/gen_icf_map.S
new file mode 100644 (file)
index 0000000..5ee2532
--- /dev/null
@@ -0,0 +1,266 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc+crypto
+       .text
+       .align  2
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+.macro tzbytecnt param0:req,param1:req
+       rbit    x_\param1, x_\param0
+       cmp     x_\param0, 0
+       clz     x_\param1, x_\param1
+       mov     w_\param0, 8
+       lsr     w_\param1, w_\param1, 3
+       csel    w_\param0, w_\param1, w_\param0, ne
+.endm
+
+.macro write_deflate_icf param0:req,param1:req,param2:req,param3:req
+       orr     w_\param1, w_\param1, w_\param3, lsl 19
+       orr     w_\param1, w_\param1, w_\param2, lsl 10
+       str     w_\param1, [x_\param0]
+.endm
+
+       .align  2
+       .global gen_icf_map_h1_aarch64
+       .type   gen_icf_map_h1_aarch64, %function
+
+       /* arguments */
+       declare_generic_reg     stream_param,                   0,x
+       declare_generic_reg     matches_icf_lookup_param,       1,x
+       declare_generic_reg     input_size_param,               2,x
+
+       declare_generic_reg     param0,                         0,x
+       declare_generic_reg     param1,                         1,x
+       declare_generic_reg     param2,                         2,x
+       declare_generic_reg     param3,                         3,x
+
+       /* return */
+       declare_generic_reg     ret_val,                        0,x
+
+       /* variables */
+       declare_generic_reg     input_size,                     3,x
+       declare_generic_reg     next_in,                        4,x
+       declare_generic_reg     matches_icf_lookup,             6,x
+       declare_generic_reg     hash_table,                     7,x
+       declare_generic_reg     end_in,                         8,x
+       declare_generic_reg     file_start,                     9,x
+       declare_generic_reg     hash_mask,                      10,w
+       declare_generic_reg     hist_size,                      11,w
+       declare_generic_reg     stream_saved,                   12,x
+       declare_generic_reg     literal_32,                     13,w
+       declare_generic_reg     literal_1,                      14,w
+       declare_generic_reg     dist,                           15,w
+
+       declare_generic_reg     tmp_has_hist,                   0,w
+       declare_generic_reg     tmp_offset_hash_table,          1,x
+       declare_generic_reg     tmp0,                           0,x
+       declare_generic_reg     tmp1,                           1,x
+       declare_generic_reg     tmp2,                           2,x
+       declare_generic_reg     tmp3,                           3,x
+       declare_generic_reg     tmp5,                           5,x
+
+/* constant */
+.equ   ISAL_LOOK_AHEAD, 288
+.equ   SHORTEST_MATCH, 4
+.equ   LEN_OFFSET, 254
+
+/* mask */
+.equ   mask_10bit, 1023
+.equ   mask_lit_dist, 0x7800
+
+/* offset of struct isal_zstream */
+.equ   offset_next_in, 0
+.equ   offset_avail_in, 8
+.equ   offset_total_in, 12
+.equ   offset_next_out, 16
+.equ   offset_avail_out, 24
+.equ   offset_total_out, 28
+.equ   offset_hufftables, 32
+.equ   offset_level, 40
+.equ   offset_level_buf_size, 44
+.equ   offset_level_buf, 48
+.equ   offset_end_of_stream, 56
+.equ   offset_flush, 58
+.equ   offset_gzip_flag, 60
+.equ   offset_hist_bits, 62
+.equ   offset_state, 64
+.equ   offset_state_block_end, 72
+.equ   offset_state_dist_mask, 76
+.equ   offset_state_has_hist, 135
+
+/* offset of struct level_buf */
+.equ   offset_hash_map_hash_table, 4712
+
+/*
+uint64_t gen_icf_map_h1_base(struct isal_zstream *stream,
+                            struct deflate_icf *matches_icf_lookup, uint64_t input_size)
+*/
+
+gen_icf_map_h1_aarch64:
+       cmp     input_size_param, (ISAL_LOOK_AHEAD-1) // 287
+       bls     .fast_exit
+       stp     x29, x30, [sp, -16]!
+
+       mov     stream_saved, stream_param
+       mov     matches_icf_lookup, matches_icf_lookup_param
+       mov     x29, sp
+
+       ldrb    tmp_has_hist, [stream_saved, offset_state_has_hist]
+       mov     tmp_offset_hash_table, offset_hash_map_hash_table
+       ldr     end_in, [stream_saved, offset_next_in]
+       mov     input_size, input_size_param
+       ldr     hash_table, [stream_saved, offset_level_buf]
+       ldr     w_file_start, [stream_saved, offset_total_in]
+       ldp     hist_size, hash_mask, [stream_saved, offset_state_dist_mask]
+       add     hash_table, hash_table, tmp_offset_hash_table
+       sub     file_start, end_in, file_start
+       cbz     tmp_has_hist, .igzip_no_hist
+       b       .while_check1
+
+       .align 3
+.igzip_no_hist:
+       ldrb    w_tmp1, [end_in]
+       add     next_in, end_in, 1
+       ldrh    w_tmp0, [matches_icf_lookup]
+       bfi     w_tmp0, w_tmp1, 0, 10
+       strh    w_tmp0, [matches_icf_lookup]
+       ldr     w_tmp0, [matches_icf_lookup]
+       and     w_tmp0, w_tmp0, mask_10bit
+       orr     w_tmp0, w_tmp0, mask_lit_dist
+       str     w_tmp0, [matches_icf_lookup], 4
+       ldr     w_tmp0, [end_in]
+       crc32cw w_tmp0, wzr, w_tmp0
+
+       and     w_tmp5, w_tmp0, hash_mask
+       sub     x_tmp1, end_in, file_start
+       mov     w_tmp2, 1
+       mov     x_tmp0, 1
+       strh    w_tmp1, [hash_table, x_tmp5, lsl 1]
+       strb    w_tmp2, [stream_saved, offset_state_has_hist]
+       b       .while_check2
+
+.while_check1:
+       mov     next_in, end_in
+       mov     x_tmp0, 0
+
+.while_check2:
+       sub     input_size, input_size, #288
+       add     end_in, end_in, input_size
+       cmp     next_in, end_in
+       bcs     .exit
+       mov     literal_32, 32
+       mov     literal_1, 1
+       b       .while_loop
+
+       .align 3
+.new_match_found:
+       clz     w_tmp5, w_tmp2
+       add     w_tmp1, w_tmp0, LEN_OFFSET
+       sub     w_tmp5, literal_32, w_tmp5
+       cmp     dist, 2
+       sub     w_tmp5, w_tmp5, #2
+       bls     .skip_compute_dist_icf_code
+
+       lsl     w_tmp3, literal_1, w_tmp5
+       sub     w_tmp3, w_tmp3, #1
+       lsr     w_tmp0, w_tmp2, w_tmp5
+       and     w_tmp3, w_tmp3, w_tmp2
+       add     w_tmp2, w_tmp0, w_tmp5, lsl 1
+
+.skip_compute_dist_icf_code:
+       mov     param0, matches_icf_lookup
+       write_deflate_icf param0,param1,param2,param3
+
+       add     next_in, next_in, 1
+       add     matches_icf_lookup, matches_icf_lookup, 4
+       cmp     next_in, end_in
+       beq     .save_with_exit
+
+.while_loop:
+       ldr     w_tmp0, [next_in]
+       crc32cw w_tmp0, wzr, w_tmp0
+
+       and     w_tmp0, w_tmp0, hash_mask
+       sub     x_tmp1, next_in, file_start
+       lsl     x_tmp0, x_tmp0, 1
+       sub     w_tmp2, w_tmp1, #1
+       ldrh    w_tmp3, [hash_table, x_tmp0]
+       strh    w_tmp1, [hash_table, x_tmp0]
+       sub     w_tmp2, w_tmp2, w_tmp3
+       and     w_tmp2, w_tmp2, hist_size
+       add     dist, w_tmp2, 1
+       ldr     x_tmp0, [next_in]
+       sub     x_tmp1, next_in, x_dist, uxtw
+       ldr     x_tmp1, [x_tmp1]
+       eor     x_tmp0, x_tmp1, x_tmp0
+       tzbytecnt       param0,param1
+
+       cmp     w_tmp0, (SHORTEST_MATCH-1)
+       mov     w_tmp3, 0
+       bhi     .new_match_found
+
+       ldrb    w_param1, [next_in]
+       mov     x_param0, matches_icf_lookup
+       mov     w_param3, 0
+       mov     w_param2, 0x1e
+       write_deflate_icf param0,param1,param2,param3
+
+       add     next_in, next_in, 1
+       add     matches_icf_lookup, matches_icf_lookup, 4
+       cmp     next_in, end_in
+       bne     .while_loop
+
+.save_with_exit:
+       ldr     ret_val, [stream_saved, offset_next_in]
+       sub     ret_val, next_in, ret_val
+
+.exit:
+       ldp     x29, x30, [sp], 16
+       ret
+
+       .align 3
+.fast_exit:
+       mov     ret_val, 0
+       ret
+       .size   gen_icf_map_h1_aarch64, .-gen_icf_map_h1_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/huffman_aarch64.h b/ceph/src/isa-l/igzip/aarch64/huffman_aarch64.h
new file mode 100644 (file)
index 0000000..4ceae23
--- /dev/null
@@ -0,0 +1,173 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef __HUFFMAN_AARCH64_H__
+#define __HUFFMAN_AARCH64_H__
+
+#ifdef __ASSEMBLY__
+#ifdef LONGER_HUFFTABLE
+       #if (D > 8192)
+               #error History D is larger than 8K
+       #else
+               #define DIST_TABLE_SIZE 8192
+               #define DECODE_OFFSET 26
+       #endif
+#else
+       #define DIST_TABLE_SIZE 2
+       #define DECODE_OFFSET 0
+#endif
+
+#define LEN_TABLE_SIZE 256
+#define LIT_TABLE_SIZE 257
+
+#define DIST_TABLE_START (ISAL_DEF_MAX_HDR_SIZE + 8)   //328+8
+#define DIST_TABLE_OFFSET (DIST_TABLE_START + - 4 * 1) //336-4
+#define LEN_TABLE_OFFSET (DIST_TABLE_START + DIST_TABLE_SIZE * 4 - 4*3) //332 + 2*4 -4*3 =328
+#define LIT_TABLE_OFFSET (DIST_TABLE_START + 4 * DIST_TABLE_SIZE + 4 * LEN_TABLE_SIZE)
+#define LIT_TABLE_SIZES_OFFSET (LIT_TABLE_OFFSET + 2 * LIT_TABLE_SIZE)
+#define DCODE_TABLE_OFFSET (LIT_TABLE_SIZES_OFFSET + LIT_TABLE_SIZE + 1 - DECODE_OFFSET * 2)
+#define DCODE_TABLE_SIZE_OFFSET (DCODE_TABLE_OFFSET + 2 * 30 - DECODE_OFFSET)
+
+#define IGZIP_DECODE_OFFSET    0
+#define IGZIP_DIST_TABLE_SIZE  2
+
+.macro get_len_code hufftables:req,length:req,code:req,code_len:req,tmp0:req
+       add x_\tmp0,\hufftables,LEN_TABLE_OFFSET
+       ldr     w_\code_len,[x_\tmp0,x_\length,lsl 2]
+       lsr     w_\code, w_\code_len , 5
+       and     x_\code_len,x_\code_len,0x1f
+.endm
+
+.macro get_lit_code    hufftables:req,lit:req,code:req,code_len:req
+       add     x_\code,\hufftables,LIT_TABLE_OFFSET
+       ldrh    w_\code,[x_\code,x_\lit,lsl 1]
+       add     x_\code_len,\hufftables,LIT_TABLE_SIZES_OFFSET
+       ldrb    w_\code_len,[x_\code_len,x_\lit]
+.endm
+
+.macro get_dist_code   hufftables:req,dist:req,code:req,code_len:req,tmp0:req,tmp1:req,tmp2:req
+       cmp     dist,DIST_TABLE_SIZE
+       bhi     _compute_dist_code
+       add     x_\tmp0,\hufftables,DIST_TABLE_OFFSET
+       ldr     w_\code_len,[x_\tmp0,x_\dist,lsl 2]
+       lsr     w_\code, w_\code_len , 5
+       and     x_\code_len,x_\code_len,0x1f
+       b       _end_get_dist_code
+_compute_dist_code:
+       and     w_\dist,w_\dist,0xffff
+       sub     w_\dist,w_\dist,1
+       clz     w_\tmp0,w_\dist
+       mov     w_\tmp1,30
+       sub     w_\tmp0,w_\tmp1,w_\tmp0         //tmp0== num_extra_bists
+       mov     w_\tmp1,1
+       lsl     w_\tmp1,w_\tmp1,w_\tmp0
+       sub     w_\tmp1,w_\tmp1,1
+       and     w_\tmp1,w_\tmp1,w_\dist         //tmp1=extra_bits
+       asr     w_\dist,w_\dist,w_\tmp0
+       lsl     w_\tmp2,w_\tmp0,1
+       add     w_\tmp2,w_\dist,w_\tmp2         //tmp2=sym
+
+       add     x_\code,\hufftables,DCODE_TABLE_OFFSET - IGZIP_DECODE_OFFSET*2
+       add     x_\code_len,\hufftables,DCODE_TABLE_SIZE_OFFSET - IGZIP_DECODE_OFFSET
+       ldrh    w_\code,[x_\code,x_\tmp2,lsl 1]
+       ldrb    w_\code_len,[x_\code_len,x_\tmp2]
+       lsl     w_\tmp1,w_\tmp1,w_\code_len
+       orr     w_\code,w_\code,w_\tmp1
+       add     w_\code_len,w_\code_len,w_\tmp0
+
+       //compute_dist_code
+_end_get_dist_code:
+.endm
+
+
+.macro compare_258_bytes str0:req,str1:req,match_length:req,tmp0:req,tmp1:req
+       mov     x_\match_length,0
+_compare_258_loop:
+       ldr     x_\tmp0,[x_\str0,x_\match_length]
+       ldr     x_\tmp1,[x_\str1,x_\match_length]
+       eor     x_\tmp0,x_\tmp1,x_\tmp0
+       rbit    x_\tmp0,x_\tmp0
+       clz     x_\tmp0,x_\tmp0
+       lsr     x_\tmp0,x_\tmp0,3
+       add     x_\match_length,x_\match_length,x_\tmp0
+
+
+       cmp     x_\match_length,257
+       ccmp    x_\tmp0,8,0,ls
+       beq     _compare_258_loop
+
+       cmp     x_\match_length,258
+       mov     x_\tmp1,258
+       csel    x_\match_length,x_\match_length,x_\tmp1,ls
+.endm
+
+.macro compare_max_258_bytes str0:req,str1:req,max_length:req,match_length:req,tmp0:req,tmp1:req
+       mov     x_\match_length,0
+       mov     x_\tmp0,258
+       cmp     x_\max_length,x_\tmp0
+       csel    x_\max_length,x_\max_length,x_\tmp0,ls
+_compare_258_loop:
+       ldr     x_\tmp0,[x_\str0,x_\match_length]
+       ldr     x_\tmp1,[x_\str1,x_\match_length]
+       eor     x_\tmp0,x_\tmp1,x_\tmp0
+       rbit    x_\tmp0,x_\tmp0
+       clz     x_\tmp0,x_\tmp0
+       lsr     x_\tmp0,x_\tmp0,3
+       add     x_\match_length,x_\match_length,x_\tmp0
+
+
+       cmp     x_\max_length,x_\match_length
+       ccmp    x_\tmp0,8,0,hi
+       beq     _compare_258_loop
+
+       cmp     x_\match_length,x_\max_length
+       csel    x_\match_length,x_\match_length,x_\max_length,ls
+.endm
+
+.macro compare_aarch64 str0:req,str1:req,max_length:req,match_length:req,tmp0:req,tmp1:req
+       mov     x_\match_length,0
+_compare_loop:
+       ldr     x_\tmp0,[x_\str0,x_\match_length]
+       ldr     x_\tmp1,[x_\str1,x_\match_length]
+       eor     x_\tmp0,x_\tmp1,x_\tmp0
+       rbit    x_\tmp0,x_\tmp0
+       clz     x_\tmp0,x_\tmp0
+       lsr     x_\tmp0,x_\tmp0,3
+       add     x_\match_length,x_\match_length,x_\tmp0
+
+       cmp     x_\max_length,x_\match_length
+       ccmp    x_\tmp0,8,0,hi
+       beq     _compare_loop
+
+       cmp     x_\match_length,x_\max_length
+       csel    x_\match_length,x_\match_length,x_\max_length,ls
+.endm
+
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_decode_huffman_code_block_aarch64.S b/ceph/src/isa-l/igzip/aarch64/igzip_decode_huffman_code_block_aarch64.S
new file mode 100644 (file)
index 0000000..46847d3
--- /dev/null
@@ -0,0 +1,689 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a
+       .text
+       .align  2
+#include "lz0a_const_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+#define ENABLE_TBL_INSTRUCTION 1
+
+#define FIELD(name,size,align) \
+       .set _FIELD_OFFSET,(_FIELD_OFFSET + (align) - 1) & (~ ((align)-1)); \
+       .equ name,_FIELD_OFFSET ;                                       \
+       .set _FIELD_OFFSET,_FIELD_OFFSET + size;                        \
+       .if align > _STRUCT_ALIGN;                                      \
+               .set _STRUCT_ALIGN, align;                              \
+       .endif;
+
+#define START_STRUCT(name) .set _FIELD_OFFSET,0;.set _STRUCT_ALIGN,0;
+
+#define END_STRUCT(name)    .set _##name##_size , _FIELD_OFFSET;\
+                           .set _##name##_align,_STRUCT_ALIGN
+
+#define CONST(name,value)  .equ name,value
+
+#define ISAL_DECODE_LONG_BITS 12
+#define ISAL_DECODE_SHORT_BITS 10
+
+#define L_REM (21 - ISAL_DECODE_LONG_BITS)
+#define S_REM (15 - ISAL_DECODE_SHORT_BITS)
+#define L_DUP ((1 << L_REM) - (L_REM + 1))
+#define S_DUP ((1 << S_REM) - (S_REM + 1))
+#define L_UNUSED ((1 << L_REM) - (1 << ((L_REM)/2)) - (1 << ((L_REM + 1)/2)) + 1)
+#define S_UNUSED ((1 << S_REM) - (1 << ((S_REM)/2)) - (1 << ((S_REM + 1)/2)) + 1)
+#define L_SIZE (286 + L_DUP + L_UNUSED)
+#define S_SIZE (30 + S_DUP + S_UNUSED)
+#define HUFF_CODE_LARGE_LONG_ALIGNED (L_SIZE + (-L_SIZE & 0xf))
+#define HUFF_CODE_SMALL_LONG_ALIGNED (S_SIZE + (-S_SIZE & 0xf))
+#define MAX_LONG_CODE_LARGE (L_SIZE + (-L_SIZE & 0xf))
+#define MAX_LONG_CODE_SMALL (S_SIZE + (-S_SIZE & 0xf))
+#define LARGE_SHORT_CODE_SIZE 4
+#define LARGE_LONG_CODE_SIZE 2
+#define SMALL_SHORT_CODE_SIZE 2
+#define SMALL_LONG_CODE_SIZE 2
+
+
+// inflate_huff_code
+START_STRUCT( inflate_huff_code_large )
+       //       name   size    align
+       FIELD ( _short_code_lookup_large,       LARGE_SHORT_CODE_SIZE*(1<<(ISAL_DECODE_LONG_BITS)),     LARGE_LONG_CODE_SIZE )
+       FIELD ( _long_code_lookup_large,        LARGE_LONG_CODE_SIZE*MAX_LONG_CODE_LARGE,       LARGE_SHORT_CODE_SIZE )
+END_STRUCT(inflate_huff_code_large)
+
+// inflate_huff_code
+START_STRUCT( inflate_huff_code_small )
+       //       name   size    align
+       FIELD ( _short_code_lookup_small,       SMALL_SHORT_CODE_SIZE*(1<<(ISAL_DECODE_SHORT_BITS)),    SMALL_LONG_CODE_SIZE )
+       FIELD ( _long_code_lookup_small,        SMALL_LONG_CODE_SIZE*MAX_LONG_CODE_SMALL,       SMALL_SHORT_CODE_SIZE )
+END_STRUCT(inflate_huff_code_small)
+
+
+// inflate_state
+START_STRUCT( inflate_state )
+       //       name   size    align
+       FIELD ( _next_out,      8,      8 )
+       FIELD ( _avail_out,     4,      4 )
+       FIELD ( _total_out,     4,      4 )
+       FIELD ( _next_in,       8,      8 )
+       FIELD ( _read_in,       8,      8 )
+       FIELD ( _avail_in,      4,      4 )
+       FIELD ( _read_in_length,        4,      4 )
+       FIELD ( _lit_huff_code, _inflate_huff_code_large_size,  _inflate_huff_code_large_align )
+       FIELD ( _dist_huff_code,        _inflate_huff_code_small_size,  _inflate_huff_code_small_align )
+       FIELD ( _block_state,   4,      4 )
+       FIELD ( _dict_length,   4,      4 )
+       FIELD ( _bfinal,        4,      4 )
+       FIELD ( _crc_flag,      4,      4 )
+       FIELD ( _crc,   4,      4 )
+       FIELD ( _hist_bits,     4,      4 )
+       FIELD ( _type0_block_len,       4,      4 )
+       FIELD ( _write_overflow_lits,   4,      4 )
+       FIELD ( _write_overflow_len,    4,      4 )
+       FIELD ( _copy_overflow_len,     4,      4 )
+       FIELD ( _copy_overflow_dist,    4,      4 )
+END_STRUCT(inflate_state)
+
+CONST( _lit_huff_code_short_code_lookup , _lit_huff_code+_short_code_lookup_large )
+CONST( _lit_huff_code_long_code_lookup , _lit_huff_code+_long_code_lookup_large )
+CONST( _dist_huff_code_short_code_lookup , _dist_huff_code+_short_code_lookup_small )
+CONST( _dist_huff_code_long_code_lookup , _dist_huff_code+_long_code_lookup_small )
+CONST( ISAL_BLOCK_NEW_HDR , 0 )
+CONST( ISAL_BLOCK_HDR , 1 )
+CONST( ISAL_BLOCK_TYPE0 , 2 )
+CONST( ISAL_BLOCK_CODED , 3 )
+CONST( ISAL_BLOCK_INPUT_DONE , 4 )
+CONST( ISAL_BLOCK_FINISH , 5 )
+
+/* Inflate Return values */
+#define ISAL_DECOMP_OK 0       /* No errors encountered while decompressing */
+#define ISAL_END_INPUT 1       /* End of input reached */
+#define ISAL_OUT_OVERFLOW 2    /* End of output reached */
+#define ISAL_NAME_OVERFLOW 3   /* End of gzip name buffer reached */
+#define ISAL_COMMENT_OVERFLOW 4        /* End of gzip name buffer reached */
+#define ISAL_EXTRA_OVERFLOW 5  /* End of extra buffer reached */
+#define ISAL_NEED_DICT 6 /* Stream needs a dictionary to continue */
+#define ISAL_INVALID_BLOCK -1  /* Invalid deflate block found */
+#define ISAL_INVALID_SYMBOL -2 /* Invalid deflate symbol found */
+#define ISAL_INVALID_LOOKBACK -3       /* Invalid lookback distance found */
+#define ISAL_INVALID_WRAPPER -4 /* Invalid gzip/zlib wrapper found */
+#define ISAL_UNSUPPORTED_METHOD -5     /* Gzip/zlib wrapper specifies unsupported compress method */
+#define ISAL_INCORRECT_CHECKSUM -6 /* Incorrect checksum found */
+
+
+#define ISAL_DEF_MAX_CODE_LEN 15
+#define LARGE_SHORT_SYM_LEN 25
+#define LARGE_SHORT_SYM_MASK ((1 << LARGE_SHORT_SYM_LEN) - 1)
+#define LARGE_LONG_SYM_LEN 10
+#define LARGE_LONG_SYM_MASK ((1 << LARGE_LONG_SYM_LEN) - 1)
+#define LARGE_SHORT_CODE_LEN_OFFSET 28
+#define LARGE_LONG_CODE_LEN_OFFSET 10
+#define LARGE_FLAG_BIT_OFFSET 25
+#define LARGE_FLAG_BIT (1 << LARGE_FLAG_BIT_OFFSET)
+#define LARGE_SYM_COUNT_OFFSET 26
+#define LARGE_SYM_COUNT_LEN 2
+#define LARGE_SYM_COUNT_MASK ((1 << LARGE_SYM_COUNT_LEN) - 1)
+#define LARGE_SHORT_MAX_LEN_OFFSET 26
+
+#define SMALL_SHORT_SYM_LEN 9
+#define SMALL_SHORT_SYM_MASK ((1 << SMALL_SHORT_SYM_LEN) - 1)
+#define SMALL_LONG_SYM_LEN 9
+#define SMALL_LONG_SYM_MASK ((1 << SMALL_LONG_SYM_LEN) - 1)
+#define SMALL_SHORT_CODE_LEN_OFFSET 11
+#define SMALL_LONG_CODE_LEN_OFFSET 10
+#define SMALL_FLAG_BIT_OFFSET 10
+#define SMALL_FLAG_BIT (1 << SMALL_FLAG_BIT_OFFSET)
+
+#define DIST_SYM_OFFSET 0
+#define DIST_SYM_LEN 5
+#define DIST_SYM_MASK ((1 << DIST_SYM_LEN) - 1)
+#define DIST_SYM_EXTRA_OFFSET 5
+#define DIST_SYM_EXTRA_LEN 4
+#define DIST_SYM_EXTRA_MASK ((1 << DIST_SYM_EXTRA_LEN) - 1)
+
+#define MAX_LIT_LEN_CODE_LEN 21
+#define MAX_LIT_LEN_COUNT (MAX_LIT_LEN_CODE_LEN + 2)
+#define MAX_LIT_LEN_SYM 512
+#define LIT_LEN_ELEMS 514
+
+#define INVALID_SYMBOL 0x1FFF
+#define INVALID_CODE 0xFFFFFF
+
+#define MIN_DEF_MATCH 3
+
+#define TRIPLE_SYM_FLAG 0
+#define DOUBLE_SYM_FLAG TRIPLE_SYM_FLAG + 1
+#define SINGLE_SYM_FLAG DOUBLE_SYM_FLAG + 1
+#define DEFAULT_SYM_FLAG TRIPLE_SYM_FLAG
+
+#define SINGLE_SYM_THRESH (2 * 1024)
+#define DOUBLE_SYM_THRESH (4 * 1024)
+
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+
+.macro inflate_in_load_read_byte
+       cmp     read_in_length,56
+       bgt     1f
+       cbz     avail_in,1f
+       ldrb    w_temp,[next_in],1
+       sub     avail_in,avail_in,1
+       lsl     temp,temp,x_read_in_length
+       orr     read_in,read_in,temp
+       add     read_in_length,read_in_length,8
+       uxtw    read_in_length,read_in_length
+
+.endm
+
+.macro inflate_in_load
+
+       cmp     read_in_length, 63
+       bgt     1f
+
+       /*if (state->avail_in >= 8) */
+       cmp     avail_in, 7
+       bhi     2f
+
+       // loop max 7 times
+       // while (state->read_in_length < 57 && state->avail_in > 0)
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       inflate_in_load_read_byte
+       b 1f
+2:
+       add     new_bytes,read_in_length,7
+       mov     w_temp,8
+       lsr     new_bytes,new_bytes,3
+       sub     new_bytes,w_temp,new_bytes
+       ldr     temp,[next_in]
+       lsl     temp,temp,x_read_in_length
+       orr     read_in,read_in,temp
+       add     next_in,next_in,new_bytes,uxtb
+       add     read_in_length,read_in_length,new_bytes,lsl 3
+       sub     avail_in,avail_in,new_bytes
+
+1:
+.endm
+
+.macro copy_word
+       sub     repeat_length,repeat_length,#4
+       ldr     w_arg0, [arg1],4
+       cmp     repeat_length, 3
+       str     w_arg0, [next_out],4
+       bls     load_byte_less_than_4
+.endm
+
+
+       .global decode_huffman_code_block_stateless_aarch64
+       .type   decode_huffman_code_block_stateless_aarch64, %function
+/*
+       void decode_huffman_code_block_stateless_aarch64(
+                               struct inflate_state *state,
+                               uint8_t * start_out)
+*/
+       declare_generic_reg     arg0            0, x
+       declare_generic_reg     arg1            1, x
+       declare_generic_reg     arg2            2, x
+
+       declare_generic_reg     state,          11,x
+       declare_generic_reg     start_out,      18,x
+
+       declare_generic_reg     read_in,        3,x
+       declare_generic_reg     read_in_length, 4,w
+       declare_generic_reg     sym_count,      5,w
+       declare_generic_reg     next_bits,      6,w
+       declare_generic_reg     next_lits,      6,w
+       declare_generic_reg     avail_in,       20,w
+       declare_generic_reg     next_in,        23,x
+
+       declare_generic_reg     temp,           16,x    //local temp variable
+       declare_generic_reg     new_bytes,      7,w     //temp variable
+       declare_generic_reg     copy_overflow_length,           28,w
+
+
+
+       declare_generic_reg     block_state,    8,w
+       declare_generic_reg     block_state_adr,9,x
+       declare_generic_reg     look_back_dist, 10,w
+       declare_generic_reg     bfinal,         22,x
+
+       declare_generic_reg     next_out,       12,x
+       declare_generic_reg     avail_out,      13,w
+       declare_generic_reg     total_out,      14,w
+
+       declare_generic_reg     rfc_table,      15,x
+       declare_generic_reg     next_sym,       17,w
+       declare_generic_reg     next_dist,      17,w
+       declare_generic_reg     bit_count,      19,w
+
+       declare_generic_reg     bit_mask,       21,w
+       declare_generic_reg     next_lit,       24,w
+       declare_generic_reg     write_overflow_len,25,w
+       declare_generic_reg     write_overflow_lits,26,w
+       declare_generic_reg     repeat_length,27,w
+
+decode_huffman_code_block_stateless_aarch64:
+       //save registers
+       push_stack
+
+       //load variables
+       mov     state,arg0
+       mov     block_state,_block_state
+       mov     start_out,arg1
+       add     block_state_adr,state,block_state,uxtw
+       ldr     block_state,    [block_state_adr]
+       ldr     bfinal,         [block_state_adr,_bfinal-_block_state]
+
+       ldr     next_out, [state]
+       ldp     avail_out,total_out,[state,_avail_out]
+       ldp     next_in,  read_in,  [state,_next_in]
+       ldp     avail_in, read_in_length, [state,_avail_in]
+       ldp     write_overflow_lits,write_overflow_len,[block_state_adr,_write_overflow_lits-_block_state]
+
+       //init rfc_table
+       adrp    rfc_table,rfc_lookup_table
+       add     rfc_table,rfc_table,:lo12:rfc_lookup_table
+#if ENABLE_TBL_INSTRUCTION
+       ld1     {v1.16b,v2.16b,v3.16b},[rfc_table]
+       add     rfc_table,rfc_table,48
+       ld1     {v4.16b-v7.16b},[rfc_table]
+
+#endif
+
+       /*
+               state->copy_overflow_length = 0;
+               state->copy_overflow_distance = 0;
+       */
+       mov     x_copy_overflow_length,xzr
+       str     xzr,[block_state_adr,_copy_overflow_len-_block_state]
+
+       /* while (state->block_state == ISAL_BLOCK_CODED) */
+block_state_loop:
+       cmp     block_state ,ISAL_BLOCK_CODED
+       bne     exit_func_success
+
+       inflate_in_load
+
+       /* save state here  */
+       str     next_out, [state]
+       stp     avail_out,total_out,[state,_avail_out]
+       stp     next_in,  read_in,  [state,_next_in]
+       stp     avail_in, read_in_length, [state,_avail_in]
+       stp     write_overflow_lits,write_overflow_len,[block_state_adr,_write_overflow_lits-_block_state]
+
+       /*
+       decode_next_lit_len(&next_lits, &sym_count,
+                               state, &state->lit_huff_code,
+                               &temp_dat, &temp_bytes);
+       */
+       cmp     read_in_length,ISAL_DEF_MAX_CODE_LEN
+       ble     inflate_in_load_decode
+decode_next_lit_len_start:
+       and     x_next_bits,read_in,((1 << ISAL_DECODE_LONG_BITS) - 1)
+       /*next_sym = huff_code->short_code_lookup[next_bits];*/
+       add     next_bits,next_bits,_lit_huff_code>>2
+       ldr     next_sym,[state,x_next_bits,lsl 2]
+       /*if ((next_sym & LARGE_FLAG_BIT) == 0) {*/
+       tbnz    next_sym,LARGE_FLAG_BIT_OFFSET,long_code_lookup_routine
+       lsr     bit_count,next_sym,LARGE_SHORT_CODE_LEN_OFFSET
+       sub     read_in_length,read_in_length,bit_count
+       lsr     read_in,read_in,x_bit_count
+       mov     temp,0x1fff
+       cmp     bit_count,0
+       csel    next_sym,next_sym,w_temp,ne
+       ubfx    sym_count,next_sym,LARGE_SYM_COUNT_OFFSET,LARGE_SYM_COUNT_LEN
+       and     next_lits,next_sym,LARGE_SHORT_SYM_MASK
+       b       decode_next_lit_len_end
+long_code_lookup_routine:
+       lsr     bit_mask,next_sym,LARGE_SHORT_MAX_LEN_OFFSET
+       mov     sym_count,1
+       and     next_sym,next_sym,LARGE_SHORT_SYM_MASK
+       mov     temp,1023
+       lsl     bit_mask,sym_count,bit_mask
+       sub     bit_mask,bit_mask,1
+       and     x_next_bits,read_in,x_bit_mask
+       add     next_bits,next_sym,next_bits,lsr ISAL_DECODE_LONG_BITS
+       mov     next_sym,(_lit_huff_code+_long_code_lookup_large)>>1
+       add     next_bits,next_bits,next_sym
+       ldrh    next_sym,[state,x_next_bits,lsl 1]
+       lsr     bit_count,next_sym,10
+       sub     read_in_length,read_in_length,bit_count
+       and     next_lits,next_sym,w_temp
+       lsr     read_in,read_in,x_bit_count
+       cmp     bit_count,0
+       csel    next_lits,next_lits,w_temp,ne
+decode_next_lit_len_end:
+
+       /* if (sym_count == 0) */
+       cbz     sym_count,invalid_symbol
+       tbnz    read_in_length,31, end_input
+
+       /* while (sym_count > 0) start */
+sym_count_loop:
+       and     next_lit,next_lits , 0xffff
+
+       /*if (next_lit < 256 || sym_count > 1) {*/
+       cmp     next_lit,255
+       ccmp    sym_count,1,0,hi
+       beq     next_lit_256
+
+       /* if (state->avail_out < 1) { */
+       cbnz    avail_out,sym_count_adjust
+
+       mov     write_overflow_len,sym_count
+       lsl     sym_count,sym_count,3
+       mov     write_overflow_lits,next_lits
+       sub     sym_count,sym_count,8
+       lsr     next_lits,next_lits,sym_count
+       mov     sym_count,1
+       cmp     next_lits,255
+       bls     isal_out_overflow
+       cmp     next_lits,256
+       sub     write_overflow_len,write_overflow_len,1
+       beq     isal_out_overflow_1
+       b       sym_count_loop
+
+sym_count_adjust:
+       /*
+               while (sym_count > 0) end
+               next_lits >>= 8;
+               sym_count--;
+       */
+       subs    sym_count,sym_count,1
+       lsr     next_lits,next_lits,8
+       strb    next_lit,[next_out],1
+       sub     avail_out,avail_out,1
+       add     total_out,total_out,1
+       bne     sym_count_loop
+       b       block_state_loop
+
+next_lit_256:
+       /* if (next_lit == 256) { */
+       cmp     next_lit,256
+       beq     next_lit_eq_256
+
+
+       /*
+       if (next_lit <= MAX_LIT_LEN_SYM)
+               sym_count must be 1
+       */
+       cmp     next_lit,MAX_LIT_LEN_SYM
+       bhi     invalid_symbol
+       sub     repeat_length,next_lit,254
+       /*
+           next_dist =
+           decode_next_dist(state, &state->dist_huff_code, &temp_dat,
+                            &temp_bytes);
+       */
+       cmp     read_in_length,ISAL_DEF_MAX_CODE_LEN
+       ble     inflate_in_load_decode_next_dist
+decode_next_dist_start:
+       and     x_next_bits,read_in,((1 << ISAL_DECODE_SHORT_BITS) - 1)
+       mov     next_sym,_dist_huff_code>>1
+       add     next_bits,next_bits,next_sym
+       ldrh    next_sym, [state,x_next_bits,lsl 1]
+       tbz     next_sym,SMALL_FLAG_BIT_OFFSET,decode_next_dist_flag
+       sub     bit_mask,next_sym,SMALL_FLAG_BIT
+       mov     temp,1
+       asr     bit_mask,bit_mask,SMALL_SHORT_CODE_LEN_OFFSET
+       and     next_sym,next_sym,SMALL_SHORT_SYM_MASK
+       lsl     bit_mask,w_temp,bit_mask
+       sub     bit_mask,bit_mask,1
+       and     x_next_bits,read_in,x_bit_mask
+       add     next_bits,next_sym,next_bits,lsr ISAL_DECODE_SHORT_BITS
+       mov     next_sym,(_dist_huff_code + _long_code_lookup_small)>>1
+       add     next_bits,next_bits,next_sym
+       ldrh    next_sym,[state,x_next_bits,lsl 1]
+       lsr     bit_count,next_sym,SMALL_LONG_CODE_LEN_OFFSET
+       b       decode_next_dist_adjust
+decode_next_dist_flag:
+       lsr     bit_count,next_sym,SMALL_SHORT_CODE_LEN_OFFSET
+decode_next_dist_adjust:
+       sub     read_in_length,read_in_length,bit_count
+       lsr     read_in,read_in,x_bit_count
+       cbnz    bit_count,decode_next_dist_end
+       sub     read_in_length,read_in_length,next_sym
+       mov     next_sym,INVALID_SYMBOL
+decode_next_dist_end:
+       and     next_sym,next_sym,DIST_SYM_MASK
+
+       tbnz    read_in_length,31,end_input_1
+       cmp     next_dist,29
+       bhi     invalid_symbol
+
+
+#if ENABLE_TBL_INSTRUCTION
+       ins     v0.b[0],next_dist
+       tbl     v0.8b,{v2.16b,v3.16b},v0.8b
+       umov    bit_count,v0.b[0]
+#else
+       ldrb    bit_count,[rfc_table,next_dist,sxtw]
+#endif
+
+       /*inflate_in_read_bits(state,
+                dist_extra_bit_count, &temp_dat,
+                &temp_bytes);
+       */
+       inflate_in_load
+       mov     temp,1
+       lsl     temp,temp,x_bit_count
+       sub     read_in_length,read_in_length,bit_count
+       sub     temp,temp,1
+       and     x_look_back_dist,temp,read_in
+       lsr     read_in,read_in,x_bit_count
+#if ENABLE_TBL_INSTRUCTION
+       dup     v0.8b,next_dist
+       add     v0.8b,v1.8b,v0.8b
+       tbl     v0.8b,{v4.16b-v7.16b},v0.8b
+       umov    next_dist,v0.h[0]
+#else
+       add     next_dist,next_dist,16
+       ldrh    next_dist,[rfc_table,x_next_dist,lsl 1]
+#endif
+       add     look_back_dist,look_back_dist,next_dist
+
+       /*
+               if (state->read_in_length < 0) {
+       */
+       tbnz    read_in_length,31,end_input_1
+
+       /*
+       if (state->next_out - look_back_dist < start_out) {
+       */
+       sub     temp,next_out,x_look_back_dist
+       cmp     temp,start_out
+       bcc     isal_invalid_lookback
+       /*
+               if (state->avail_out < repeat_length) {
+       */
+       cmp     avail_out , repeat_length
+       bcs     decompress_data_start
+       sub     copy_overflow_length,repeat_length,avail_out
+       stp     copy_overflow_length,look_back_dist,[block_state_adr,_copy_overflow_len-_block_state]
+       mov     repeat_length,avail_out
+
+decompress_data_start:
+       add     total_out,total_out,repeat_length
+       sub     avail_out,avail_out,repeat_length
+       sub     arg1,next_out,x_look_back_dist
+       #if 1
+       cmp     look_back_dist,repeat_length
+       bls     byte_copy_start
+       #else
+       b       byte_copy_start
+       #endif
+
+
+       cbz     repeat_length,decompress_data_end
+       cmp     repeat_length, 3
+       bls     load_byte_less_than_4 //0.5% will jump
+load_byte_4:
+       sub     repeat_length, repeat_length, #4
+       ldr     w_arg0, [arg1],4
+       cmp     repeat_length, 3
+       str     w_arg0, [next_out],4
+       bls     load_byte_less_than_4
+       .rept   62
+       copy_word
+       .endr
+       sub     repeat_length, repeat_length, #4
+       ldr     w_arg0, [arg1],4
+       cmp     repeat_length, 4
+       str     w_arg0, [next_out],4
+       bge     load_byte_4
+load_byte_less_than_4:
+       tbz     repeat_length,0,load_byte_2
+       ldrb    w_arg0, [arg1],1
+       sub     repeat_length, repeat_length, #1
+       strb    w_arg0, [next_out],1
+load_byte_2:
+       tbz     repeat_length,1,decompress_data_end
+       ldrh     w_arg0, [arg1],2
+       strh     w_arg0, [next_out],2
+decompress_data_end:
+
+
+
+       /*
+       if (state->copy_overflow_length > 0)
+       */
+       cmp     copy_overflow_length,0
+       bgt     isal_out_overflow
+       b       block_state_loop
+next_lit_eq_256:
+       /*
+               state->block_state = state->bfinal ?
+                               ISAL_BLOCK_INPUT_DONE : ISAL_BLOCK_NEW_HDR;
+       */
+       mov     block_state, ISAL_BLOCK_INPUT_DONE
+       cmp     w_bfinal,0
+       csel    block_state, block_state, w_bfinal, ne
+       str     block_state, [block_state_adr]
+
+       b       block_state_loop
+exit_func_success:
+       mov     w0 , 0
+exit_func:
+       str     next_out, [state]
+       stp     avail_out,total_out,[state,_avail_out]
+       stp     next_in,  read_in,  [state,_next_in]
+       stp     avail_in, read_in_length, [state,_avail_in]
+       stp     write_overflow_lits,write_overflow_len,[block_state_adr,_write_overflow_lits-_block_state]
+
+       pop_stack
+       ret
+end_input_1:
+end_input:
+       mov     w0,ISAL_END_INPUT
+       pop_stack
+       ret
+
+invalid_symbol:
+       /*
+               below variable was changed
+       */
+       str     next_out, [state]
+       stp     avail_out,total_out,[state,_avail_out]
+       stp     next_in,  read_in,  [state,_next_in]
+       stp     avail_in, read_in_length, [state,_avail_in]
+       stp     write_overflow_lits,write_overflow_len,[block_state_adr,_write_overflow_lits-_block_state]
+       mov     w0,     ISAL_INVALID_SYMBOL
+       b exit_func
+isal_out_overflow_1:
+
+       cmp     bfinal,0
+       mov     block_state, ISAL_BLOCK_INPUT_DONE
+       csel    block_state, block_state, wzr, ne
+       str     block_state, [block_state_adr]
+isal_out_overflow:
+       mov     w0, ISAL_OUT_OVERFLOW
+
+       b       exit_func
+isal_invalid_lookback:
+       mov     w0, ISAL_INVALID_LOOKBACK
+       b       exit_func
+inflate_in_load_decode:
+       inflate_in_load
+       b       decode_next_lit_len_start
+inflate_in_load_decode_next_dist:
+       inflate_in_load
+       b       decode_next_dist_start
+byte_copy_start:
+       add     arg2,next_out,x_repeat_length
+       cmp     arg2, next_out
+       beq     decompress_data_end
+       sub     arg2,arg2,1
+byte_copy_loop:
+       ldrb    w_arg0, [arg1] , 1
+       cmp     arg2, next_out
+       strb    w_arg0, [next_out],1
+       bne     byte_copy_loop
+       b       decompress_data_end
+       .size   decode_huffman_code_block_stateless_aarch64, .-decode_huffman_code_block_stateless_aarch64
+
+       .type   rfc_lookup_table, %object
+
+rfc_lookup_table:
+#if ENABLE_TBL_INSTRUCTION
+       .byte   0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+       .zero   8
+#endif
+       //dist_extra_bit_count
+       .byte   0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02
+       .byte   0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06
+       .byte   0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a
+       .byte   0x0b, 0x0b, 0x0c, 0x0c, 0x0d, 0x0d, 0x00, 0x00
+       //dist_start
+#if ENABLE_TBL_INSTRUCTION
+       .byte 0x01,0x02,0x03,0x04,0x05,0x07,0x09,0x0d,0x11,0x19,0x21,0x31,0x41,0x61,0x81,0xc1
+       .byte 0x01,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00
+       .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+       .byte 0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x0c,0x10,0x18,0x20,0x30,0x40,0x60,0x00,0x00
+#else
+       .short  0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d
+       .short  0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1
+       .short  0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01
+       .short  0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000
+#endif
+       .size   rfc_lookup_table, . - rfc_lookup_table
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_deflate_body_aarch64.S b/ceph/src/isa-l/igzip/aarch64/igzip_deflate_body_aarch64.S
new file mode 100644 (file)
index 0000000..254f74c
--- /dev/null
@@ -0,0 +1,261 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+       .align  2
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+.macro  update_state   stream:req,start_in:req,next_in:req,end_in:req, \
+       m_out_buf:req,m_out_start:req,tmp0:req,tmp1:req
+
+       //m_out_buf=bytes_written
+       sub     x_\m_out_buf,x_\m_out_buf,x_\m_out_start
+       cmp     next_in,start_in
+       bls     skip_has_hist
+       mov     w_\tmp0,1
+       strb    w_\tmp0,[x_\stream,_internal_state_has_hist]
+skip_has_hist:
+       ldr     w_\tmp0,[\stream,_total_in]
+       ldr     x_\m_out_start,[\stream,_next_out] //m_out_start = next_out
+
+       str     x_\next_in,[\stream,_next_in]
+       sub     x_\start_in,x_\next_in,x_\start_in
+       sub     x_\end_in,x_\end_in,x_\next_in
+       add     w_\tmp0,w_\tmp0,w_\start_in
+       stp     w_\end_in,w_\tmp0,[\stream,_avail_in]
+       //next_in=avail_out,start_in=total_out
+       ldp     w_\next_in,w_\start_in,[\stream,_avail_out]
+       add     x_\m_out_start,x_\m_out_start,x_\m_out_buf
+       str     x_\m_out_start,[\stream,_next_out]
+       add     w_\start_in,w_\start_in,w_\m_out_buf
+       sub     w_\next_in,w_\next_in,w_\m_out_buf
+       stp     w_\next_in,w_\start_in,[\stream,_avail_out]
+.endm
+
+
+       .global isal_deflate_body_aarch64
+       .type   isal_deflate_body_aarch64, %function
+/*
+       void isal_deflate_body_aarch64(struct isal_zstream *stream)
+*/
+       declare_generic_reg     stream,         0,x     //struct isal_zstream *stream
+       declare_generic_reg     state,          8,x     //&stream->state
+       declare_generic_reg     avail_in,       9,w
+       declare_generic_reg     end_of_stream,  10,w    //can be used in loop
+
+       declare_generic_reg     hash_mask,      11,w
+       declare_generic_reg     match_length,   12,w
+       declare_generic_reg     hufftables,     13,x
+
+       declare_generic_reg     m_out_buf,      14,x
+       declare_generic_reg     m_out_start,    15,x
+       declare_generic_reg     m_out_end,      16,x
+       declare_generic_reg     m_bits,         17,x
+       declare_generic_reg     m_bit_count,    18,w
+
+       declare_generic_reg     start_in,       19,x
+       declare_generic_reg     end_in,         20,x
+       declare_generic_reg     next_in,        21,x
+       declare_generic_reg     loop_end_cnt,   22,x
+
+       declare_generic_reg     literal,        23,w
+       declare_generic_reg     hash,           24,w
+       declare_generic_reg     dist,           25,w
+
+       declare_generic_reg     last_seen,      26,x
+       declare_generic_reg     file_start,     27,x
+       declare_generic_reg     hist_size,      28,w
+
+       declare_generic_reg     tmp0,           5 ,w
+       declare_generic_reg     tmp1,           6 ,w
+       declare_generic_reg     tmp2,           7 ,w
+
+       declare_generic_reg     code,           3,x
+       declare_generic_reg     code_len,       24,x
+       declare_generic_reg     code2,          10,x
+       declare_generic_reg     code_len2,      4,x
+
+
+isal_deflate_body_aarch64:
+       //save registers
+       push_stack
+       ldr     avail_in, [stream, _avail_in]
+       cbz     avail_in, exit_save_state
+
+       //      set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
+       ldr     w_m_out_end,[stream,_avail_out]
+       ldr     m_out_buf,[stream,_next_out]
+       add     m_out_end,m_out_buf,w_m_out_end,uxtw
+       sub     m_out_end,m_out_end , 8
+       mov     m_out_start,m_out_buf
+       stp     m_out_buf,m_out_end,[stream, _bitbuf + _internal_state + _m_out_buf]
+       str     m_out_start,[stream, _bitbuf + _internal_state + _m_out_start]
+       ldr     m_bit_count ,[stream,_internal_state_bitbuf_m_bit_count]
+       ldr     m_bits ,[stream,_internal_state_bitbuf_m_bits]
+
+
+       //init variables
+       //last_seen=&stream.internal_state.head = _internal_state+_head
+       add     last_seen,stream,65536
+       add     last_seen,last_seen,_internal_state+_head -65536
+
+
+       //start_in=stream->next_in;next_in=start_in
+       ldr     start_in,[stream,_next_in]
+       mov     next_in,start_in
+       add     end_in,start_in,avail_in,uxtw  //avail_in reg is free now
+       sub     loop_end_cnt,end_in,289         //loop end
+       cmp     next_in,loop_end_cnt
+
+
+       //file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       ldr     w_file_start,[stream,_total_in]
+       sub     file_start,next_in,w_file_start,uxtw
+
+       //uint32_t hist_size = state->dist_mask;
+       ldr     hist_size,[stream,_internal_state + _dist_mask]
+
+       //uint32_t hash_mask = state->hash_mask;
+       ldr     hash_mask,[stream,_internal_state + _hash_mask]
+
+       ldr     hufftables,[stream,_hufftables]
+
+       bhi     main_loop_end
+main_loop_start:
+       //is_full(&state->bitbuf)
+       cmp     m_out_buf,m_out_end
+       bhi     update_state_exit
+
+       ldr     literal,[next_in]
+       crc32cw hash,wzr,literal
+       and     hash,hash,hash_mask
+
+       ///dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+       ldrh    w_tmp0,[last_seen,x_hash,lsl 1]         //tmp_w last_seen[hash]
+       sub     x_dist,next_in,file_start
+       //last_seen[hash] = (uint64_t) (next_in - file_start);
+       strh    dist,[last_seen,x_hash,lsl 1]
+       sub     dist,dist,w_tmp0
+       and     dist,dist,0xffff
+
+       sub     w_tmp0,dist,1
+       cmp     hist_size,w_tmp0
+       bls     get_lit_code
+
+       ///match_length = compare258(next_in - dist, next_in, 258);
+       sub     x_tmp2,next_in,x_dist
+       compare_258_bytes       tmp2,next_in,match_length,tmp0,tmp1
+       cmp     match_length,3
+       bls     get_lit_code
+
+       sub     x_tmp0,next_in,file_start
+       ldr     literal,[next_in,1]
+       crc32cw hash,wzr,literal
+       and     hash,hash,hash_mask
+       add     tmp0,tmp0,1
+       strh    tmp0,[last_seen,x_hash,lsl 1]
+       //call_print_b hash,dist,last_seen
+
+       ldr     literal,[next_in,2]
+       crc32cw hash,wzr,literal
+       and     hash,hash,hash_mask
+       add     tmp0,tmp0,1
+       strh    tmp0,[last_seen,x_hash,lsl 1]
+
+       //get_len_code(stream->hufftables, match_length, &code,
+       //      &code_len);
+       get_len_code    hufftables,match_length,code,code_len,tmp0
+
+       //get_dist_code(stream->hufftables, dist, &code2, &code_len2);
+       get_dist_code   hufftables,dist,code2,code_len2,tmp0,tmp1,tmp2
+
+       //code |= code2 << code_len;
+       //code_len += code_len2;
+       lsl     code2,code2,code_len
+       orr     code,code,code2
+       add     code_len,code_len,code_len2
+
+       //next_in += match_length;
+       add     next_in,next_in,match_length,uxtw
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+
+
+
+       cmp     next_in,loop_end_cnt
+       bls     main_loop_start
+       b       main_loop_end
+get_lit_code:
+       //get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len);
+       and             literal,literal,0xff
+       get_lit_code    hufftables,literal,code,code_len
+
+       //next_in++;
+       add     next_in,next_in,1
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+       cmp     next_in,loop_end_cnt
+       bls     main_loop_start
+
+main_loop_end:
+       //update state here
+
+       //load end_of_stream and flush together
+       ldr     w_end_of_stream, [stream, _end_of_stream]
+       //(stream->end_of_stream || stream->flush != 0)
+       cbz     w_end_of_stream, update_state_exit
+       mov     w_tmp0 , ZSTATE_FLUSH_READ_BUFFER
+       str     w_tmp0, [stream, _internal_state+_state]
+update_state_exit:
+       update_state    stream,start_in,next_in,end_in,m_out_buf,m_out_start,tmp0,tmp1
+exit_ret:
+       pop_stack
+       ret
+exit_save_state:
+       ldr     w_end_of_stream, [stream, _end_of_stream]
+       cbz     w_end_of_stream, exit_ret       //(stream->end_of_stream || stream->flush != 0)
+       mov     w_tmp0 , ZSTATE_FLUSH_READ_BUFFER
+       str     w_tmp0, [stream, _internal_state+_state]
+       b       exit_ret
+       .size   isal_deflate_body_aarch64, .-isal_deflate_body_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_deflate_finish_aarch64.S b/ceph/src/isa-l/igzip/aarch64/igzip_deflate_finish_aarch64.S
new file mode 100644 (file)
index 0000000..e5842b5
--- /dev/null
@@ -0,0 +1,264 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+       .align  2
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+.macro  update_state   stream:req,start_in:req,next_in:req,end_in:req, \
+       m_out_buf:req,m_out_start:req,tmp0:req,tmp1:req
+
+       //m_out_buf=bytes_written
+       sub     x_\m_out_buf,x_\m_out_buf,x_\m_out_start
+       cmp     next_in,start_in
+       bls     skip_has_hist
+       mov     w_\tmp0,1
+       strb    w_\tmp0,[x_\stream,_internal_state_has_hist]
+skip_has_hist:
+       ldr     w_\tmp0,[\stream,_total_in]
+       ldr     x_\m_out_start,[\stream,_next_out] //m_out_start = next_out
+
+       str     x_\next_in,[\stream,_next_in]
+       sub     x_\start_in,x_\next_in,x_\start_in
+       sub     x_\end_in,x_\end_in,x_\next_in
+       add     w_\tmp0,w_\tmp0,w_\start_in
+       stp     w_\end_in,w_\tmp0,[\stream,_avail_in]
+       //next_in=avail_out,start_in=total_out
+       ldp     w_\next_in,w_\start_in,[\stream,_avail_out]
+       add     x_\m_out_start,x_\m_out_start,x_\m_out_buf
+       str     x_\m_out_start,[\stream,_next_out]
+       add     w_\start_in,w_\start_in,w_\m_out_buf
+       sub     w_\next_in,w_\next_in,w_\m_out_buf
+       stp     w_\next_in,w_\start_in,[\stream,_avail_out]
+.endm
+       .global isal_deflate_finish_aarch64
+       .arch armv8-a+crc
+       .type   isal_deflate_finish_aarch64, %function
+/*
+       void isal_deflate_finish_aarch64(struct isal_zstream *stream)
+*/
+       declare_generic_reg     stream,         0,x     //struct isal_zstream *stream
+       declare_generic_reg     state,          8,x     //&stream->state
+       declare_generic_reg     avail_in,       9,w
+       declare_generic_reg     end_of_stream,  10,w    //can be used in loop
+
+       declare_generic_reg     hash_mask,      11,w
+       declare_generic_reg     match_length,   12,w
+       declare_generic_reg     hufftables,     13,x
+
+       declare_generic_reg     m_out_buf,      14,x
+       declare_generic_reg     m_out_start,    15,x
+       declare_generic_reg     m_out_end,      16,x
+       declare_generic_reg     m_bits,         17,x
+       declare_generic_reg     m_bit_count,    18,w
+
+       declare_generic_reg     start_in,       19,x
+       declare_generic_reg     end_in,         20,x
+       declare_generic_reg     next_in,        21,x
+       declare_generic_reg     loop_end_cnt,   22,x
+
+       declare_generic_reg     literal,        23,w
+       declare_generic_reg     hash,           24,w
+       declare_generic_reg     dist,           25,w
+
+       declare_generic_reg     last_seen,      26,x
+       declare_generic_reg     file_start,     27,x
+       declare_generic_reg     hist_size,      28,w
+
+       declare_generic_reg     tmp0,           5 ,w
+       declare_generic_reg     tmp1,           6 ,w
+       declare_generic_reg     tmp2,           7 ,w
+
+       declare_generic_reg     code,           3,x
+       declare_generic_reg     code_len,       24,x
+       declare_generic_reg     code2,          10,x
+       declare_generic_reg     code_len2,      4,x
+
+
+isal_deflate_finish_aarch64:
+       //save registers
+       push_stack
+
+       //      set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
+       ldr     w_m_out_end,[stream,_avail_out]
+       ldr     m_out_buf,[stream,_next_out]
+       add     m_out_end,m_out_buf,w_m_out_end,uxtw
+       sub     m_out_end,m_out_end , 8
+       mov     m_out_start,m_out_buf
+       stp     m_out_buf,m_out_end,[stream, _bitbuf + _internal_state + _m_out_buf]
+       str     m_out_start,[stream, _bitbuf + _internal_state + _m_out_start]
+       ldr     m_bit_count ,[stream,_internal_state_bitbuf_m_bit_count]
+       ldr     m_bits ,[stream,_internal_state_bitbuf_m_bits]
+
+       //init variables
+       //last_seen=&stream.internal_state.head = _internal_state+_head
+       add     last_seen,stream,65536
+       add     last_seen,last_seen,_internal_state+_head -65536
+
+
+       //start_in=stream->next_in;next_in=start_in
+       ldr     avail_in, [stream, _avail_in]
+       ldr     start_in,[stream,_next_in]
+       mov     next_in,start_in
+       add     end_in,start_in,avail_in,uxtw  //avail_in reg is free now
+       ldr     hufftables,[stream,_hufftables]
+       cbz     avail_in, update_not_full
+
+
+       sub     loop_end_cnt,end_in,4           //loop end
+       cmp     next_in,loop_end_cnt
+
+
+       //file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       ldr     w_file_start,[stream,_total_in]
+       sub     file_start, next_in, w_file_start, uxtw
+
+       //uint32_t hist_size = state->dist_mask;
+       ldr     hist_size,[stream,_internal_state + _dist_mask]
+
+       //uint32_t hash_mask = state->hash_mask;
+       ldr     hash_mask,[stream,_internal_state + _hash_mask]
+
+       bhi     main_loop_end
+main_loop_start:
+       //is_full(&state->bitbuf)
+       cmp     m_out_buf,m_out_end
+       bhi     update_state_exit
+
+       ldr     literal,[next_in]
+       crc32cw hash,wzr,literal
+       and     hash,hash,hash_mask
+
+       ///dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+       ldrh    w_tmp0,[last_seen,x_hash,lsl 1]         //tmp_w last_seen[hash]
+       sub     x_dist,next_in,file_start
+       //last_seen[hash] = (uint64_t) (next_in - file_start);
+       strh    dist,[last_seen,x_hash,lsl 1]
+       sub     dist,dist,w_tmp0
+       and     dist,dist,0xffff
+
+       sub     w_tmp0,dist,1
+       cmp     hist_size,w_tmp0
+       bls     get_lit_code
+
+       /// match_length = compare258(next_in - dist, next_in, 258);
+       sub     x_tmp2,next_in,x_dist
+       sub     x_hash,end_in,next_in
+       compare_max_258_bytes   tmp2,next_in,hash,match_length,tmp0,tmp1
+       cmp     match_length,3
+       bls     get_lit_code
+
+       get_len_code    hufftables,match_length,code,code_len,tmp0
+       get_dist_code   hufftables,dist,code2,code_len2,tmp0,tmp1,tmp2
+
+       //code |= code2 << code_len;
+       //code_len += code_len2;
+       lsl     code2,code2,code_len
+       orr     code,code,code2
+       add     code_len,code_len,code_len2
+
+       //next_in += match_length;
+       add     next_in,next_in,match_length,uxtw
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+
+       cmp     next_in,loop_end_cnt
+       bls     main_loop_start
+       b       main_loop_end
+get_lit_code:
+       //get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len);
+       and             literal,literal,0xff
+       get_lit_code    hufftables,literal,code,code_len
+
+       //next_in++;
+       add     next_in,next_in,1
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+       cmp     next_in,loop_end_cnt
+       bls     main_loop_start
+main_loop_end:
+       sub     loop_end_cnt,end_in,1
+       cmp     next_in,loop_end_cnt
+       bhi     update_not_full
+second_loop_start:
+       cmp     m_out_buf,m_out_end
+       bhi     update_state_exit
+       ldr     literal,[next_in]
+       and             literal,literal,0xff
+       get_lit_code    hufftables,literal,code,code_len
+       //next_in++;
+       add     next_in,next_in,1
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+       cmp     next_in,loop_end_cnt
+       bls     second_loop_start
+
+update_not_full:
+       cmp     m_out_buf,m_out_end
+       bhi     update_state_exit
+
+       mov     literal,256
+       get_lit_code    hufftables,literal,code,code_len
+
+       //write_bits(&state->bitbuf, code, code_len);
+       update_bits     stream,code,code_len,m_bits,m_bit_count,m_out_buf
+       ldrh    w_end_of_stream, [stream, _end_of_stream]
+       mov     w_tmp0,1
+       strb    w_tmp0,[stream,_internal_state_has_eob]
+       cmp     w_end_of_stream,w_tmp0
+       mov     w_tmp0, ZSTATE_TRL
+       mov     w_tmp1, ZSTATE_SYNC_FLUSH
+       csel    w_tmp0,w_tmp0,w_tmp1,eq
+       str     w_tmp0, [stream, _internal_state+_state]
+
+update_state_exit:
+       update_state    stream,start_in,next_in,end_in,m_out_buf,m_out_start,tmp0,tmp1
+       pop_stack
+       ret
+
+       .size   isal_deflate_finish_aarch64, .-isal_deflate_finish_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_deflate_hash_aarch64.S b/ceph/src/isa-l/igzip/aarch64/igzip_deflate_hash_aarch64.S
new file mode 100644 (file)
index 0000000..40251da
--- /dev/null
@@ -0,0 +1,95 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+       .align  2
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+
+
+       .global isal_deflate_hash_aarch64
+       .type   isal_deflate_hash_aarch64, %function
+/*
+       void isal_deflate_hash_aarch64(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+*/
+       declare_generic_reg     hash_table,     0,x
+       declare_generic_reg     hash_mask,      1,w
+       declare_generic_reg     current_index,  2,w
+       declare_generic_reg     dict,           3,x
+       declare_generic_reg     dict_len,       4,w
+
+       declare_generic_reg     next_in         3,x
+       declare_generic_reg     end_in          6,x
+       declare_generic_reg     ind             5,w
+       declare_generic_reg     hash            2,w
+       declare_generic_reg     literal         2,w
+#define SHORTEST_MATCH #4
+
+isal_deflate_hash_aarch64:
+       sub     ind, current_index, dict_len
+       and     ind,ind,0xffff
+
+
+        uxtw    x_dict_len, dict_len
+        sub     x_dict_len, x_dict_len, SHORTEST_MATCH
+        add     end_in, dict, x_dict_len
+
+
+
+        cmp     next_in, end_in
+        bcs     exit_func
+
+        mov     w7, 0
+loop_start:
+        ldr     literal, [next_in]
+        add     next_in, next_in, 1
+        cmp     next_in, end_in
+        crc32cw hash, w7, literal
+        and     hash, hash, hash_mask
+        strh    ind, [hash_table, x_hash, lsl 1]
+        add    ind,ind,1
+        bne     loop_start
+exit_func:
+
+       ret
+       .size   isal_deflate_hash_aarch64, .-isal_deflate_hash_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_inflate_multibinary_arm64.S b/ceph/src/isa-l/igzip/aarch64/igzip_inflate_multibinary_arm64.S
new file mode 100644 (file)
index 0000000..4f2fe22
--- /dev/null
@@ -0,0 +1,32 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include "aarch64_multibinary.h"
+
+mbin_interface decode_huffman_code_block_stateless
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_isal_adler32_neon.S b/ceph/src/isa-l/igzip/aarch64/igzip_isal_adler32_neon.S
new file mode 100644 (file)
index 0000000..78d2394
--- /dev/null
@@ -0,0 +1,178 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crypto
+       .text
+       .align  3
+
+/*
+Macros
+*/
+
+.macro declare_var_vector_reg name:req,reg:req
+       \name\()_q      .req    q\reg
+       \name\()_v      .req    v\reg
+       \name\()_s      .req    s\reg
+       \name\()_d      .req    d\reg
+.endm
+
+.macro mod_adler       dest:req,tmp:req
+       umull   \tmp\()_x,\dest,const_div1
+       lsr     \tmp\()_x,\tmp\()_x,47
+       msub    \dest,\tmp,const_div2,\dest
+.endm
+
+/*
+       uint32_t adler32_neon(uint32_t adler32, uint8_t * start, uint32_t length);
+*/
+/*
+Arguements list
+*/
+       adler32 .req    w0
+       start   .req    x1
+       length  .req    x2
+       .global adler32_neon
+       .type   adler32_neon, %function
+adler32_neon:
+/*
+local variables
+*/
+       declare_var_vector_reg factor0  , 6
+       declare_var_vector_reg factor1  , 7
+       declare_var_vector_reg d0       , 4
+       declare_var_vector_reg d1       , 5
+       declare_var_vector_reg adacc    , 2
+       declare_var_vector_reg s2acc    , 3
+       declare_var_vector_reg zero     , 16
+       declare_var_vector_reg adler    , 17
+       declare_var_vector_reg back_d0  , 18
+       declare_var_vector_reg back_d1  , 19
+       declare_var_vector_reg sum2     , 20
+       declare_var_vector_reg tmp2     , 20
+
+       adler0  .req    w4
+       adler1  .req    w5
+       adler0_x        .req    x4
+       adler1_x        .req    x5
+       end     .req    x0
+       tmp     .req    w8
+       tmp_x   .req    x8
+       tmp1_x  .req    x9
+       loop_cnt        .req x10
+       loop_const      .req x11
+       const_div1      .req w6
+       const_div2      .req w7
+       mov     const_div1, 32881
+        movk    const_div1, 0x8007, lsl 16
+        mov     const_div2, 65521
+       and     adler0, adler32, 0xffff
+       lsr     adler1, adler32, 16
+
+       lsr     loop_cnt,length,5
+       adrp    x3,factors
+       add     x3,x3,:lo12:factors
+       ld1     {factor0_v.16b-factor1_v.16b},[x3]
+
+       add     end,start,length
+       cbz     loop_cnt,final_accum32
+       ld1     {back_d0_v.16b-back_d1_v.16b},[start]
+       mov     loop_const,173
+
+       movi    v16.4s,0
+
+
+
+
+great_than_32:
+       cmp     loop_cnt,173
+       csel    loop_const,loop_cnt,loop_const,le
+       mov     adacc_v.16b,zero_v.16b
+       mov     s2acc_v.16b,zero_v.16b
+       ins     adacc_v.s[0],adler0
+       ins     s2acc_v.s[0],adler1
+       add     tmp_x,start,loop_const,lsl 5
+
+accum32_neon:
+       add     start,start,32
+       mov     d0_v.16b,back_d0_v.16b
+       mov     d1_v.16b,back_d1_v.16b
+       ld1     {back_d0_v.16b-back_d1_v.16b},[start]
+
+       shl     tmp2_v.4s,adacc_v.4s,5
+       add     s2acc_v.4s,s2acc_v.4s,tmp2_v.4s
+
+       uaddlp  adler_v.8h,d0_v.16b
+       uadalp  adler_v.8h,d1_v.16b
+       uadalp  adacc_v.4s,adler_v.8h
+
+       umull   sum2_v.8h,factor0_v.8b ,d0_v.8b
+       umlal2  sum2_v.8h,factor0_v.16b,d0_v.16b
+       umlal   sum2_v.8h,factor1_v.8b ,d1_v.8b
+       umlal2  sum2_v.8h,factor1_v.16b,d1_v.16b
+       uadalp  s2acc_v.4s,sum2_v.8h
+
+       cmp     start,tmp_x
+       bne     accum32_neon
+
+       uaddlv  adacc_d,adacc_v.4s
+       uaddlv  s2acc_d,s2acc_v.4s
+       fmov    adler0_x,adacc_d
+       fmov    adler1_x,s2acc_d
+
+       mod_adler       adler0,tmp
+       mod_adler       adler1,tmp
+       sub     loop_cnt,loop_cnt,loop_const
+       cbnz    loop_cnt,great_than_32
+
+final_accum32:
+       and     length,length,31
+       cbz     length,end_func
+
+accum32_body:
+       cmp     start,end
+       beq     end_func
+       ldrb    tmp,[start],1
+       add     adler0,adler0,tmp
+       add     adler1,adler1,adler0
+       b       accum32_body
+
+end_func:
+       mod_adler       adler0,tmp
+       mod_adler       adler1,tmp
+       orr w0,adler0,adler1,lsl 16
+       ret
+
+       .size   adler32_neon, .-adler32_neon
+       .section        .rodata.cst16,"aM",@progbits,16
+       .align  4
+factors:
+       .quad 0x191a1b1c1d1e1f20
+       .quad 0x1112131415161718
+       .quad 0x090a0b0c0d0e0f10
+       .quad 0x0102030405060708
+
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c b/ceph/src/isa-l/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c
new file mode 100644 (file)
index 0000000..183010c
--- /dev/null
@@ -0,0 +1,188 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include <aarch64_multibinary.h>
+
+DEFINE_INTERFACE_DISPATCHER(isal_adler32)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_ASIMD)
+               return PROVIDER_INFO(adler32_neon);
+
+       return PROVIDER_BASIC(adler32);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_body)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_body_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_body);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_finish)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_finish_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_finish);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl1)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl1)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl2)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl2)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl3)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy);
+
+       return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl3)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_icf_finish_hash_map_base);
+
+       return PROVIDER_BASIC(isal_deflate_icf_finish_hash_map);
+}
+
+DEFINE_INTERFACE_DISPATCHER(set_long_icf_fg)
+{
+       return PROVIDER_INFO(set_long_icf_fg_aarch64);
+}
+
+DEFINE_INTERFACE_DISPATCHER(encode_deflate_icf)
+{
+       return PROVIDER_INFO(encode_deflate_icf_aarch64);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_update_histogram)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_update_histogram_aarch64);
+
+       return PROVIDER_BASIC(isal_update_histogram);
+}
+
+DEFINE_INTERFACE_DISPATCHER(gen_icf_map_lh1)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32) {
+               return PROVIDER_INFO(gen_icf_map_h1_aarch64);
+       }
+
+       return PROVIDER_BASIC(gen_icf_map_h1);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl0)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_hash_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_hash);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl1)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_hash_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_hash);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl2)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_hash_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_hash);
+}
+
+DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl3)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(isal_deflate_hash_aarch64);
+
+       return PROVIDER_BASIC(isal_deflate_hash);
+}
+
+DEFINE_INTERFACE_DISPATCHER(decode_huffman_code_block_stateless)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_CRC32)
+               return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64);
+
+       return PROVIDER_BASIC(decode_huffman_code_block_stateless);
+}
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_multibinary_arm64.S b/ceph/src/isa-l/igzip/aarch64/igzip_multibinary_arm64.S
new file mode 100644 (file)
index 0000000..57d5230
--- /dev/null
@@ -0,0 +1,50 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include "aarch64_multibinary.h"
+
+
+mbin_interface         isal_deflate_icf_body_lvl1
+mbin_interface         isal_deflate_icf_body_lvl2
+mbin_interface         isal_deflate_icf_body_lvl3
+mbin_interface         isal_deflate_icf_finish_lvl1
+mbin_interface         isal_deflate_icf_finish_lvl2
+mbin_interface         isal_deflate_icf_finish_lvl3
+mbin_interface         isal_update_histogram
+mbin_interface         encode_deflate_icf
+mbin_interface         set_long_icf_fg
+mbin_interface         gen_icf_map_lh1
+mbin_interface         isal_deflate_hash_lvl0
+mbin_interface         isal_deflate_hash_lvl1
+mbin_interface         isal_deflate_hash_lvl2
+mbin_interface         isal_deflate_hash_lvl3
+
+mbin_interface         isal_deflate_body
+mbin_interface         isal_deflate_finish
+mbin_interface         isal_adler32
diff --git a/ceph/src/isa-l/igzip/aarch64/igzip_set_long_icf_fg.S b/ceph/src/isa-l/igzip/aarch64/igzip_set_long_icf_fg.S
new file mode 100644 (file)
index 0000000..13f9b08
--- /dev/null
@@ -0,0 +1,194 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a
+       .text
+       .align  2
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+       .text
+       .align  2
+       .global set_long_icf_fg_aarch64
+       .type   set_long_icf_fg_aarch64, %function
+
+/*
+void set_long_icf_fg_aarch64(uint8_t * next_in, uint64_t processed, uint64_t input_size,
+                         struct deflate_icf *match_lookup)
+*/
+
+       /* arguments */
+       declare_generic_reg     next_in_param,          0,x
+       declare_generic_reg     processed_param,        1,x
+       declare_generic_reg     input_size_param,       2,x
+       declare_generic_reg     match_lookup_param,     3,x
+
+       declare_generic_reg     param0,                 0,x
+       declare_generic_reg     param1,                 1,x
+       declare_generic_reg     param2,                 2,x
+
+       /* local variable */
+       declare_generic_reg     len,                    7,w
+       declare_generic_reg     dist_code,              8,w
+       declare_generic_reg     shortest_match_len      9,w
+       declare_generic_reg     len_max,                10,w
+       declare_generic_reg     dist_extra,             11,w
+       declare_generic_reg     const_8,                13,x
+       declare_generic_reg     next_in,                20,x
+       declare_generic_reg     dist_start,             21,x
+       declare_generic_reg     end_processed,          22,x
+       declare_generic_reg     end_in,                 23,x
+       declare_generic_reg     match_lookup,           19,x
+
+       declare_generic_reg     match_length,           4,w
+       declare_generic_reg     tmp0,                   5,w
+       declare_generic_reg     tmp1,                   6,w
+
+/* constant */
+.equ   DIST_START_SIZE, 128
+.equ   ISAL_LOOK_AHEAD, 288
+.equ   LEN_OFFSET, 254
+.equ   SHORTEST_MATCH, 4
+.equ   LEN_MAX_CONST, 512
+
+set_long_icf_fg_aarch64:
+       stp     x29, x30, [sp, -192]!
+       add     x29, sp, 0
+       stp     x21, x22, [sp, 32]
+       add     x21, x29, 64
+       stp     x19, x20, [sp, 16]
+       str     x23, [sp, 48]
+
+       add     end_processed, next_in_param, processed_param
+       mov     next_in, next_in_param
+       add     end_in, next_in_param, input_size_param
+       mov     match_lookup, match_lookup_param
+
+       adrp    x1, .data_dist_start
+       mov     x2, DIST_START_SIZE // 128
+       add     x1, x1, :lo12:.data_dist_start
+       mov     x0, dist_start
+       bl      memcpy
+
+       add     x_tmp0, end_processed, ISAL_LOOK_AHEAD // 288
+       cmp     end_in, x_tmp0
+       csel    end_in, end_in, x_tmp0, cc
+       cmp     next_in, end_processed
+       bcs     .done
+
+       mov     const_8, 8
+       mov     len_max, LEN_MAX_CONST // 512
+       mov     shortest_match_len, (LEN_OFFSET + SHORTEST_MATCH - 1)
+       b       .while_outer_loop
+
+       .align 2
+.while_outer_check:
+       add     next_in, next_in, 1
+       add     match_lookup, match_lookup, 4
+       cmp     end_processed, next_in
+       bls     .done
+
+.while_outer_loop:
+       ldrh    len, [match_lookup]
+       and     len, len, LIT_LEN_MASK // 1023
+       cmp     len, (LEN_OFFSET + 8 - 1) // 261
+       bls     .while_outer_check
+
+       ldr     dist_code, [match_lookup]
+       add     x1, next_in, 8
+       ldrh    dist_extra, [match_lookup, 2]
+       sub     w2, w_end_in, w1
+       ubfx    x_dist_code, x_dist_code, 10, 9
+       ubfx    x_dist_extra, x_dist_extra, 3, 13
+       uxtw    x0, dist_code
+       ldr     w0, [dist_start, x0, lsl 2]
+       add     w0, dist_extra, w0
+       sub     x0, const_8, x0
+       add     x0, next_in, x0
+
+       compare_aarch64 param0,param1,param2,match_length,tmp0,tmp1
+       mov     w0, w_match_length
+
+       add     w0, w0, (LEN_OFFSET + 8) // 262
+       cmp     w0, len
+       bls     .while_outer_check
+
+       lsl     w2, dist_extra, 19
+       orr     w2, w2, dist_code, lsl 10
+
+       .align 3
+.while_inner_loop:
+       cmp     w0, LEN_MAX_CONST // 512
+       add     next_in, next_in, 1
+       csel    w1, w0, len_max, ls
+       sub     w0, w0, #1
+       orr     w1, w1, w2
+       str     w1, [match_lookup]
+       ldrh    w1, [match_lookup, 4]!
+
+       and     w1, w1, LIT_LEN_MASK // 1023
+       cmp     w1, (LEN_OFFSET + SHORTEST_MATCH - 1) // 257
+       csel    w1, w1, shortest_match_len, cs
+       cmp     w1, w0
+       bcc     .while_inner_loop
+
+       add     next_in, next_in, 1
+       add     match_lookup, match_lookup, 4
+       cmp     end_processed, next_in
+       bhi     .while_outer_loop
+
+.done:
+       ldp     x19, x20, [sp, 16]
+       ldp     x21, x22, [sp, 32]
+       ldr     x23, [sp, 48]
+       ldp     x29, x30, [sp], 192
+       ret
+       .size   set_long_icf_fg_aarch64, .-set_long_icf_fg_aarch64
+
+       .section        .rodata
+       .align  3
+       .set    .data_dist_start,. + 0
+.real_data_dist_start:
+       .word   0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d
+       .word   0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1
+       .word   0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01
+       .word   0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000
diff --git a/ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_body_hash_hist.S b/ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_body_hash_hist.S
new file mode 100644 (file)
index 0000000..3daaa1b
--- /dev/null
@@ -0,0 +1,364 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+       .align  2
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+       .global isal_deflate_icf_body_hash_hist_aarch64
+       .type   isal_deflate_icf_body_hash_hist_aarch64, %function
+/*
+void isal_deflate_icf_body_hash_hist_base(struct isal_zstream *stream);
+*/
+
+/* constant */
+
+/* offset of struct isal_zstream */
+.equ   offset_next_in, 0
+.equ   offset_avail_in, 8
+.equ   offset_total_in, 12
+.equ   offset_next_out, 16
+.equ   offset_avail_out, 24
+.equ   offset_total_out, 28
+.equ   offset_hufftables, 32
+.equ   offset_level, 40
+.equ   offset_level_buf_size, 44
+.equ   offset_level_buf, 48
+.equ   offset_end_of_stream, 56
+.equ   offset_flush, 58
+.equ   offset_gzip_flag, 60
+.equ   offset_hist_bits, 62
+.equ   offset_state, 64
+.equ   offset_state_block_end, 72
+.equ   offset_state_has_hist, 135
+
+/* offset of struct level_buf */
+.equ   offset_encode_tables, 0
+.equ   offset_hist, 2176
+.equ   offset_hist_d_hist, 2176
+.equ   offset_hist_ll_hist, 2296
+.equ   offset_deflate_hdr_count, 4348
+.equ   offset_deflate_hdr_extra_bits, 4352
+.equ   offset_deflate_hdr, 4356
+.equ   offset_icf_buf_next, 4688
+.equ   offset_icf_buf_avail_out, 4696
+.equ   offset_icf_buf_start, 4704
+.equ   offset_hash8k, 4712
+.equ   offset_hash_hist, 4712
+
+/* offset of struct isal_zstate */
+.equ   offset_dist_mask, 12
+.equ   offset_hash_mask, 16
+
+/* macros*/
+.equ   ISAL_LOOK_AHEAD, 288
+
+       /* arguments */
+       declare_generic_reg     stream,         0,x
+       declare_generic_reg     stream_saved,   11,x
+
+       declare_generic_reg     param0,         0,x
+       declare_generic_reg     param1,         1,x
+       declare_generic_reg     param2,         2,x
+
+       /* local varibale */
+       declare_generic_reg     level_buf,      18,x
+       declare_generic_reg     avail_in,       13,w
+       declare_generic_reg     end_in,         13,x
+       declare_generic_reg     start_in,       19,x
+       declare_generic_reg     next_in,        9,x
+       declare_generic_reg     next_in_iter,   14,x
+       declare_generic_reg     state,          24,x
+       declare_generic_reg     hist_size,      22,w
+       declare_generic_reg     hash_mask,      21,w
+       declare_generic_reg     start_out,      12,x
+       declare_generic_reg     end_out,        12,x
+       declare_generic_reg     next_out,       8,x
+       declare_generic_reg     file_start,     20,x
+       declare_generic_reg     last_seen,      15,x
+       declare_generic_reg     total_in,       25,x
+       declare_generic_reg     NULL_DIST_SYM,  23,w
+       declare_generic_reg     match_length,   3,x
+       declare_generic_reg     dist,           7,x
+       declare_generic_reg     dist_inc,       26,w // dist - 1
+       declare_generic_reg     literal,        10,x
+
+       declare_generic_reg     tmp0,           4,x
+       declare_generic_reg     tmp1,           5,x
+
+isal_deflate_icf_body_hash_hist_aarch64:
+       stp     x29, x30, [sp, -80]!
+       add     x29, sp, 0
+       str     x24, [sp, 56]
+
+       ldr     avail_in, [stream, offset_avail_in]
+       cbnz    avail_in, .stream_available
+
+       ldr     w1, [stream, offset_end_of_stream] // w1 keeps two values of end_of_stream and flush
+       cbz     w1, .done
+
+       add     state, stream, offset_state
+       b       .state_flush_read_buffer
+
+       .align 2
+.stream_available:
+       stp     x19, x20, [x29, 16]
+       stp     x21, x22, [x29, 32]
+       str     x23, [x29, 48]
+       stp     x25, x26, [x29, 64]
+
+       ldr     level_buf, [stream, offset_level_buf]
+       add     state, stream, offset_state // 64
+       mov     stream_saved, stream
+       ldr     start_in, [stream, offset_next_in] // 0
+       ldr     w_total_in, [stream, offset_total_in]
+
+       mov     x0, offset_hash_hist
+       add     last_seen, level_buf, x0
+
+       ldr     x0, [level_buf, offset_icf_buf_avail_out] // 4696
+       ldr     start_out, [level_buf, offset_icf_buf_next] // 4688
+
+       mov     next_in, start_in
+       and     x0, x0, -4
+       ldp     hist_size, hash_mask, [state, offset_dist_mask] // 12
+       add     end_in, start_in, avail_in, uxtw
+       mov     next_out, start_out
+       add     end_out, start_out, x0
+
+       add     x0, next_in, ISAL_LOOK_AHEAD // 288
+       sub     file_start, start_in, w_total_in, uxtw
+       mov     NULL_DIST_SYM, 30
+       add     next_in_iter, next_in, 1
+       cmp     end_in, x0
+       bls     .while_loop_end
+
+       .align 3
+.while_loop:
+       cmp     next_out, end_out
+       bcs     .state_create_hdr
+
+       ldr     w_literal, [next_in]
+       mov     w0, w_literal
+       crc32cw w0, wzr, w0
+
+       and     w0, w0, hash_mask
+       sub     x1, next_in, file_start
+       lsl     x0, x0, 1
+
+       ldrh    w_dist, [last_seen, x0]
+       strh    w1, [last_seen, x0]
+       sub     w1, w1, w_dist
+       and     w_dist, w1, 65535
+
+       sub     dist_inc, w_dist, #1
+       cmp     dist_inc, hist_size
+       bcc     .dist_vs_hist_size
+
+.while_latter_part:
+       and     w_literal, w_literal, 255
+       mov     next_in, next_in_iter
+       add     next_out, next_out, 4
+       add     x1, level_buf, w_literal, uxtb 2
+       ldr     w0, [x1, 2296]
+       add     w0, w0, 1
+       str     w0, [x1, 2296]
+       ldrh    w0, [next_out, -4]
+       bfi     w0, w_literal, 0, 10
+       strh    w0, [next_out, -4]
+       ldr     w0, [next_out, -4]
+       bfi     w0, NULL_DIST_SYM, 10, 9
+       str     w0, [next_out, -4]
+       ubfx    x0, x0, 16, 3
+       strh    w0, [next_out, -2]
+
+.while_loop_check:
+       add     x0, next_in, ISAL_LOOK_AHEAD // 288
+       add     next_in_iter, next_in, 1
+       cmp     end_in, x0
+       bhi     .while_loop
+       b       .while_loop_end
+
+       .align 2
+.dist_vs_hist_size:
+       mov     x1, next_in
+       mov     w2, 258
+       sub     x0, next_in, w_dist, uxth
+       compare_258_bytes param0,param1,match_length,tmp0,tmp1
+
+       and     w1, w_match_length, 65535 // 0xffff
+       cmp     w1, 3
+       bls     .while_latter_part
+
+       ldr     w0, [next_in, 1]
+       mov     x4, next_in
+       add     next_in, next_in, w1, uxth
+       crc32cw w0, wzr, w0
+
+       and     w0, hash_mask, w0
+       sub     next_in_iter, next_in_iter, file_start
+       strh    w_next_in_iter, [last_seen, x0, lsl 1]
+       ldr     w0, [x4, 2]!
+       crc32cw w0, wzr, w0
+
+       and     w0, hash_mask, w0
+       and     w_match_length, w_match_length, 65535 // 0xffff
+       sub     x4, x4, file_start
+
+       // get_len_icf_code
+       add     w_match_length, w_match_length, 254
+       // get_dist_icf_code, first part
+       mov     w1, 0 // w1 => dist_extra
+       strh    w4, [last_seen, x0, lsl 1]
+       cmp     w_dist, 2
+       ubfiz   x0, match_length, 2, 17
+       add     x0, level_buf, x0
+       bhi     .compute_dist_icf_code
+
+.match_length_end:
+       // handle level_buf->hist
+       ldr     w2, [x0, offset_hist_ll_hist]       // 2296, ll_hist
+       add     x4, level_buf, dist_inc, uxtw 2 // d_hist
+       add     next_out, next_out, 4
+       add     w2, w2, 1                           // ll_hist
+       str     w2, [x0, offset_hist_ll_hist]       // 2296, ll_hist
+       ldr     w0, [x4, offset_hist_d_hist]        // 2176, d_hist
+       add     w0, w0, 1                           // d_hist
+       str     w0, [x4, offset_hist_d_hist]        // 2176, d_hist
+
+       // write_deflate_icf
+       ldrh    w0, [next_out, -4]
+       bfi     w0, w3, 0, 10
+       strh    w0, [next_out, -4]
+       ldr     w0, [next_out, -4]
+       bfi     w0, dist_inc, 10, 9
+       str     w0, [next_out, -4]
+       lsr     w0, w0, 16
+       bfi     w0, w1, 3, 13 // w1 => dist_extra
+       strh    w0, [next_out, -2]
+       b       .while_loop_check
+
+       .align 2
+// get_dist_icf_code, 2nd part
+.compute_dist_icf_code:
+       clz     w1, dist_inc
+       mov     w2, 30
+       sub     w2, w2, w1
+       mov     w1, 1
+       lsl     w1, w1, w2
+       sub     w1, w1, #1
+       and     w1, w1, dist_inc
+       lsr     dist_inc, dist_inc, w2
+       add     dist_inc, dist_inc, w2, lsl 1
+       and     w1, w1, 8191
+       b       .match_length_end
+
+.while_loop_end:
+       sub     x19, next_in, x19
+       cmp     x19, 0
+       ble     .skip_igzip_hist2
+
+       mov     w0, 1
+       strb    w0, [stream_saved, offset_state_has_hist] // 135
+
+.skip_igzip_hist2:
+       add     w19, w_total_in, w19
+       ldr     w0, [stream_saved, offset_end_of_stream] // 56
+       sub     x12, end_out, next_out
+       asr     x12, x12, 2                                   // x12 => end_out - next_out
+       str     next_in, [stream_saved]
+       str     w19, [stream_saved, offset_total_in] // 12
+       sub     next_in, end_in, next_in
+       str     w19, [stream_saved, offset_state_block_end] // 72
+
+       ldp     x25, x26, [x29, 64]
+       ldr     x23, [x29, 48]
+       ldp     x21, x22, [x29, 32]
+       ldp     x19, x20, [x29, 16]
+
+       str     w9, [stream_saved, offset_avail_in] // 8
+       str     next_out, [level_buf, offset_icf_buf_next] // 4688
+       str     x12, [level_buf, offset_icf_buf_avail_out]   // 4696, x12 => end_out - next_out
+       cbnz    w0, .state_flush_read_buffer
+       b       .done
+
+       .align 2
+.state_create_hdr:
+       mov     w0, 2
+       str     w0, [x24, 20]
+       sub     start_in, next_in, start_in
+       cmp     start_in, 0
+       ble     .skip_igzip_hist
+
+       mov     w0, 1
+       strb    w0, [stream_saved, offset_state_has_hist] // 135
+
+.skip_igzip_hist:
+       add     w_total_in, w_total_in, w19
+       sub     x12, end_out, next_out
+       asr     x12, x12, 2                                  // x12 => end_out - next_out
+       str     next_in, [stream_saved]
+       sub     next_in, end_in, next_in
+       str     w_total_in, [stream_saved, offset_total_in] // 12
+       str     w_total_in, [stream_saved, offset_state_block_end] // 72
+
+       ldp     x25, x26, [x29, 64]
+       ldr     x23, [x29, 48]
+       ldp     x21, x22, [x29, 32]
+       ldp     x19, x20, [x29, 16]
+
+       str     w9, [stream_saved, offset_avail_in] // 8
+       str     next_out, [level_buf, offset_icf_buf_next] // 4688
+       str     x12, [level_buf, offset_icf_buf_avail_out]   // 4696, x12 => end_out - next_out
+       b       .done
+
+.state_flush_read_buffer:
+       mov     w0, 4
+       str     w0, [x24, 20]
+
+.done:
+       ldr     x24, [sp, 56]
+       ldp     x29, x30, [sp], 80
+       ret
+
+       .size   isal_deflate_icf_body_hash_hist_aarch64, .-isal_deflate_icf_body_hash_hist_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_finish_hash_hist.S b/ceph/src/isa-l/igzip/aarch64/isal_deflate_icf_finish_hash_hist.S
new file mode 100644 (file)
index 0000000..bb2baa2
--- /dev/null
@@ -0,0 +1,397 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+/*
+void isal_deflate_icf_finish_hash_hist_aarch64(struct isal_zstream *stream);
+*/
+
+/* constant */
+
+/* offset of struct isal_zstream */
+.equ   offset_next_in, 0
+.equ   offset_avail_in, 8
+.equ   offset_total_in, 12
+.equ   offset_next_out, 16
+.equ   offset_avail_out, 24
+.equ   offset_total_out, 28
+.equ   offset_hufftables, 32
+.equ   offset_level, 40
+.equ   offset_level_buf_size, 44
+.equ   offset_level_buf, 48
+.equ   offset_end_of_stream, 56
+.equ   offset_flush, 58
+.equ   offset_gzip_flag, 60
+.equ   offset_hist_bits, 62
+.equ   offset_state, 64
+.equ   offset_state_block_end, 72
+.equ   offset_state_state, 84
+.equ   offset_state_has_hist, 135
+
+/* offset of struct level_buf */
+.equ   offset_encode_tables, 0
+.equ   offset_hist, 2176
+.equ   offset_hist_d_hist, 2176
+.equ   offset_hist_ll_hist, 2296
+.equ   offset_deflate_hdr_count, 4348
+.equ   offset_deflate_hdr_extra_bits, 4352
+.equ   offset_deflate_hdr, 4356
+.equ   offset_icf_buf_next, 4688
+.equ   offset_icf_buf_avail_out, 4696
+.equ   offset_icf_buf_start, 4704
+.equ   offset_hash8k, 4712
+.equ   offset_hash_hist, 4712
+
+/* offset of struct isal_zstate */
+.equ   offset_dist_mask, 12
+.equ   offset_hash_mask, 16
+.equ   offset_state_of_zstate, 20
+
+/* macros*/
+.equ   ISAL_LOOK_AHEAD, 288
+
+       /* arguments */
+       declare_generic_reg     stream,                 0,x
+
+       declare_generic_reg     param0,                 0,x
+       declare_generic_reg     param1,                 1,x
+       declare_generic_reg     param2,                 2,x
+       declare_generic_reg     param3,                 3,x
+       declare_generic_reg     param4,                 4,x
+       declare_generic_reg     param5,                 5,x
+       declare_generic_reg     param6,                 6,x
+
+       /* local variable */
+       declare_generic_reg     stream_saved,           15,x
+       declare_generic_reg     level_buf,              13,x
+       declare_generic_reg     start_in,               21,x
+       declare_generic_reg     start_out,              22,x
+       declare_generic_reg     state,                  23,x
+       declare_generic_reg     end_out,                12,x
+       declare_generic_reg     end_in,                 11,x
+       declare_generic_reg     next_in,                8,x
+       declare_generic_reg     next_out,               10,x
+       declare_generic_reg     next_out_iter,          5,x
+       declare_generic_reg     file_start,             18,x
+       declare_generic_reg     last_seen,              14,x
+
+       declare_generic_reg     literal_code,           9,w
+       declare_generic_reg     hash_mask,              19,w
+       declare_generic_reg     hist_size,              20,w
+       declare_generic_reg     dist,                   7,w
+       declare_generic_reg     dist_inc,               24,w
+
+       declare_generic_reg     tmp0,                   25,x
+       declare_generic_reg     tmp1,                   26,x
+       declare_generic_reg     tmp2,                   27,x
+       declare_generic_reg     tmp3,                   28,x
+
+       .align  2
+       .type   write_deflate_icf_constprop, %function
+write_deflate_icf_constprop:
+       ldrh    w2, [x0]
+       mov     w3, 30
+       bfi     w2, w1, 0, 10
+       strh    w2, [x0]
+       ldr     w1, [x0]
+       bfi     w1, w3, 10, 9
+       str     w1, [x0]
+       ubfx    x1, x1, 16, 3
+       strh    w1, [x0, 2]
+       ret
+       .size   write_deflate_icf_constprop, .-write_deflate_icf_constprop
+
+       .align  2
+       .type   write_deflate_icf, %function
+write_deflate_icf:
+       ldrh    w4, [x0]
+       bfi     w4, w1, 0, 10
+       strh    w4, [x0]
+       ldr     w1, [x0]
+       bfi     w1, w2, 10, 9
+       str     w1, [x0]
+       lsr     w1, w1, 16
+       bfi     w1, w3, 3, 13
+       strh    w1, [x0, 2]
+       ret
+       .size   write_deflate_icf, .-write_deflate_icf
+
+       .align  2
+       .type   update_state, %function
+update_state:
+       sub     x7, x2, x1
+       ldr     x4, [x0, 48]
+       cmp     x7, 0
+       ble     .L48
+       mov     w1, 1
+       strb    w1, [x0, 135]
+.L48:
+       ldr     w1, [x0, 12]
+       sub     x6, x6, x5
+       str     x2, [x0]
+       sub     x3, x3, x2
+       add     w1, w1, w7
+       stp     w3, w1, [x0, 8]
+       str     w1, [x0, 72]
+       asr     x6, x6, 2
+       str     x5, [x4, 4688]
+       str     x6, [x4, 4696]
+       ret
+       .size   update_state, .-update_state
+
+       .align  2
+       .global isal_deflate_icf_finish_hash_hist_aarch64
+       .type   isal_deflate_icf_finish_hash_hist_aarch64, %function
+isal_deflate_icf_finish_hash_hist_aarch64:
+       ldr     w_end_in, [stream, 8] // stream->avail_in
+       cbz     w_end_in, .stream_not_available
+
+       stp     x29, x30, [sp, -96]!
+       add     x29, sp, 0
+       stp     x19, x20, [sp, 16]
+       stp     x21, x22, [sp, 32]
+       stp     x23, x24, [sp, 48]
+       stp     x25, x26, [sp, 64]
+       stp     x27, x28, [sp, 80]
+
+       mov     stream_saved, stream
+       ldr     level_buf, [stream, offset_level_buf]      // 48
+       ldr     start_in, [stream, offset_next_in]         // 0
+       ldr     start_out, [level_buf, offset_icf_buf_next]      // 4688
+       add     state, stream, offset_state // 64
+       ldr     end_out, [level_buf, offset_icf_buf_avail_out] // 4696
+       mov     next_in, start_in
+       ldr     w_file_start, [stream, offset_total_in] // 12
+       mov     tmp0, offset_hash_hist // 4712
+       add     last_seen, level_buf, tmp0
+       add     end_in, start_in, w_end_in, uxtw
+       and     end_out, end_out, -4
+       mov     next_out, start_out
+       ldp     hist_size, hash_mask, [state, offset_dist_mask] // 12
+       sub     file_start, start_in, file_start
+       add     end_out, start_out, end_out
+       mov     next_out_iter, next_out
+
+       add     x0, next_in, 3
+       cmp     end_in, x0 // x0 <= next_in + 3
+       bls     .while_first_end
+
+       .p2align 3
+.while_first:
+       cmp     next_out, end_out
+       bcs     .save_and_update_state
+       ldr     literal_code, [next_in]
+       mov     w0, literal_code
+       crc32cw w0, wzr, w0
+       and     w0, w0, hash_mask
+       sub     x2, next_in, file_start
+       lsl     x0, x0, 1
+       ldrh    dist, [last_seen, x0]
+       strh    w2, [last_seen, x0]
+       sub     w2, w2, dist
+       and     w_dist, w2, 65535
+       sub     dist_inc, dist, #1
+       cmp     dist_inc, hist_size
+       bcs     .skip_compare258
+
+       mov     x2, 0
+       sub     w2, w_end_in, w8
+       mov     x1, next_in
+       sub     x0, next_in, w_dist, uxth
+
+       compare_max_258_bytes param0,param1,param2,tmp2,tmp0,tmp1
+       mov     w0, w_tmp2
+       and     w2, w0, 65535
+
+       cmp     w2, 3
+       bhi     .while_first_match_length
+
+.skip_compare258:
+       and     literal_code, literal_code, 255 // get_lit_icf_code
+       add     next_in, next_in, 1
+       mov     w1, literal_code
+       mov     x0, next_out
+       add     x_literal_code, level_buf, literal_code, uxtb 2 // level_buf->hist.ll_hist
+
+       ldr     w_tmp0, [x_literal_code, offset_hist_ll_hist] // 2296
+       add     w_tmp0, w_tmp0, 1
+       str     w_tmp0, [x_literal_code, offset_hist_ll_hist] // 2296
+
+       bl      write_deflate_icf_constprop // write_deflate_icf
+
+       add     next_out, next_out, 4
+.while_first_check:
+       add     x0, next_in, 3
+       mov     next_out_iter, next_out
+       cmp     end_in, x0
+       bhi     .while_first
+
+.while_first_end:
+       cmp     next_in, end_in
+       bcs     .while_2nd_end
+
+       cmp     next_out, end_out
+       bcc     .while_2nd_handle
+       b       .save_and_update_state_2nd
+
+       .p2align 2
+.while_2nd:
+       cmp     end_out, next_out_iter
+       bls     .save_and_update_state_2nd
+
+.while_2nd_handle:
+       ldrb    w2, [next_in], 1
+       mov     x0, next_out_iter
+       add     next_out_iter, next_out_iter, 4
+       mov     w1, w2
+       add     x2, level_buf, w2, uxtb 2
+
+       ldr     w_tmp0, [x2, offset_hist_ll_hist] // 2296
+       add     w_tmp0, w_tmp0, 1
+       str     w_tmp0, [x2, offset_hist_ll_hist] // 2296
+
+       bl      write_deflate_icf_constprop
+       cmp     end_in, next_in
+       bne     .while_2nd
+
+       mov     next_in, end_in
+       b       .end_of_stream_check_and_exit
+
+       .p2align 2
+.while_first_match_length:
+       and     w0, w0, 65535
+       mov     w3, 0
+       add     w1, w0, 254 // get_len_icf_code
+       cmp     dist, 2
+       bhi     .compute_dist_icf_code
+
+.while_first_match_length_end:
+       ubfiz   x_tmp2, x1, 2, 17
+       add     x_tmp1, level_buf, dist_inc, uxtw 2
+       add     x_tmp2, level_buf, x_tmp2
+
+       add     next_in, next_in, w2, uxth
+       mov     w2, dist_inc
+
+       ldr     w_tmp0, [x_tmp2, offset_hist_ll_hist] // 2296
+       add     w_tmp0, w_tmp0, 1
+       str     w_tmp0, [x_tmp2, offset_hist_ll_hist] // 2296
+
+       mov     x0, next_out
+       ldr     w_tmp0, [x_tmp1, offset_hist_d_hist] // 2176
+       add     w_tmp0, w_tmp0, 1
+       str     w_tmp0, [x_tmp1, offset_hist_d_hist] // 2176
+
+       bl      write_deflate_icf
+       add     next_out, next_out, 4
+       b       .while_first_check
+
+// compute_dist_icf_code
+       .p2align 2
+.compute_dist_icf_code:
+       clz     w3, dist_inc
+       mov     w0, 30
+       sub     w0, w0, w3
+
+       mov     w3, 1
+       lsl     w3, w3, w0
+       sub     w3, w3, #1
+       and     w3, w3, dist_inc
+       lsl     w4, w0, 1
+       lsr     dist_inc, dist_inc, w0
+       add     dist_inc, dist_inc, w4
+       b       .while_first_match_length_end
+
+.while_2nd_end:
+       beq     .end_of_stream_check_and_exit
+       mov     param6, end_out
+       b       .update_state
+
+.end_of_stream_check_and_exit:
+       ldr     w_tmp0, [stream_saved, offset_end_of_stream] // 56
+       cbz     w_tmp0, .update_state_2nd
+       b       .save_and_update_state_2nd
+
+       .p2align 3
+.save_and_update_state_2nd:
+       mov     w_tmp0, 2
+       str     w_tmp0, [state, offset_state_of_zstate] // 20
+.update_state_2nd:
+       mov     param6, end_out
+       b       .update_state
+
+       .p2align 2
+.save_and_update_state:
+       mov     param6, end_out
+       mov     param5, next_out
+       mov     w_tmp0, 2
+       str     w_tmp0, [state, offset_state_of_zstate] // 20
+.update_state:
+       mov     param4, start_out
+       mov     param1, start_in
+       mov     param3, end_in
+       mov     param2, next_in
+       mov     param0, stream_saved
+
+       ldp     x19, x20, [sp, 16]
+       ldp     x21, x22, [sp, 32]
+       ldp     x23, x24, [sp, 48]
+       ldp     x25, x26, [sp, 64]
+       ldp     x27, x28, [sp, 80]
+       ldp     x29, x30, [sp], 96
+
+       b       update_state
+
+       .p2align 2
+.stream_not_available:
+       ldr     w1, [stream, offset_end_of_stream] // 56
+       cbz     w1, .done
+
+       mov     w1, 2
+       str     w1, [stream, offset_state_state] // 84
+.done:
+       ret
+
+       .size   isal_deflate_icf_finish_hash_hist_aarch64, .-isal_deflate_icf_finish_hash_hist_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/isal_update_histogram.S b/ceph/src/isa-l/igzip/aarch64/isal_update_histogram.S
new file mode 100644 (file)
index 0000000..abcec0f
--- /dev/null
@@ -0,0 +1,311 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+       .arch armv8-a+crc
+       .text
+       .align  2
+
+#include "lz0a_const_aarch64.h"
+#include "data_struct_aarch64.h"
+#include "huffman_aarch64.h"
+#include "bitbuf2_aarch64.h"
+#include "stdmac_aarch64.h"
+
+/*
+declare Macros
+*/
+
+.macro declare_generic_reg name:req,reg:req,default:req
+       \name           .req    \default\reg
+       w_\name         .req    w\reg
+       x_\name         .req    x\reg
+.endm
+
+.macro convert_dist_to_dist_sym dist:req,tmp0:req,tmp1:req
+       mov     w_\tmp0, w_\dist
+       mov     w_\dist, -1
+       cmp     w_\tmp0, 32768
+       bhi     .dist2code_done
+       sub     w_\dist, w_\tmp0, #1
+       cmp     w_\tmp0, 4
+       bls     .dist2code_done
+       clz     w_\tmp1, w_\dist
+       mov     w_\tmp0, 30
+       sub     w_\tmp0, w_\tmp0, w_\tmp1
+       lsr     w_\dist, w_\dist, w_\tmp0
+       add     w_\dist, w_\dist, w_\tmp0, lsl 1
+.dist2code_done:
+.endm
+
+.macro convert_length_to_len_sym length:req,length_out:req,tmp0:req
+        adrp    x_\tmp0, .len_to_code_tab_lanchor
+        add     x_\tmp0, x_\tmp0, :lo12:.len_to_code_tab_lanchor
+        ldr     w_\length_out, [x_\tmp0, w_\length, uxtw 2]
+        add     w_\length_out, w_\length_out, 256
+.endm
+
+        .section        .rodata
+        .align  4
+.len_to_code_tab_lanchor = . + 0
+        .type   len_to_code_tab, %object
+        .size   len_to_code_tab, 1056
+len_to_code_tab:
+        .word 0x00, 0x00, 0x00
+        .word 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+        .word 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0c
+        .word 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e
+        .word 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x10
+        .word 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11
+        .word 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12
+        .word 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13
+        .word 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14
+        .word 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15
+        .word 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15
+        .word 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16
+        .word 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16
+        .word 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17
+        .word 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17
+        .word 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
+        .word 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
+        .word 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19
+        .word 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19
+        .word 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19
+        .word 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19
+        .word 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a
+        .word 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a
+        .word 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a
+        .word 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a
+        .word 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b
+        .word 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b
+        .word 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b
+        .word 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b
+        .word 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c
+        .word 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c
+        .word 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c
+        .word 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d
+        .word 0x00, 0x00, 0x00, 0x00, 0x00
+
+       .text
+       .global isal_update_histogram_aarch64
+       .arch armv8-a+crc
+       .type   isal_update_histogram_aarch64, %function
+
+/*
+void isal_update_histogram_aarch64(uint8_t * start_stream, int length,
+                               struct isal_huff_histogram *histogram);
+*/
+
+       /* arguments */
+       declare_generic_reg     start_stream,           0,x
+       declare_generic_reg     length,                 1,x
+       declare_generic_reg     histogram,              2,x
+
+       declare_generic_reg     param0,                 0,x
+       declare_generic_reg     param1,                 1,x
+       declare_generic_reg     param2,                 2,x
+
+       /* local variable */
+       declare_generic_reg     start_stream_saved,     10,x
+       declare_generic_reg     histogram_saved,        23,x
+       declare_generic_reg     current,                19,x
+       declare_generic_reg     last_seen,              20,x
+       declare_generic_reg     end_stream,             21,x
+       declare_generic_reg     loop_end_iter,          22,x
+       declare_generic_reg     dist_histogram,         12,x
+       declare_generic_reg     lit_len_histogram,      23,x
+       declare_generic_reg     literal,                8,x
+       declare_generic_reg     next_hash,              9,x
+       declare_generic_reg     end,                    4,x
+       declare_generic_reg     dist,                   7,x
+       declare_generic_reg     D,                      11,w
+       declare_generic_reg     match_length,           3,w
+
+       declare_generic_reg     tmp0,                   5,w
+       declare_generic_reg     tmp1,                   6,w
+
+/* constant */
+.equ   LIT_LEN, 286
+.equ   DIST_LEN, 30
+
+.equ   lit_len_offset, 0
+.equ   dist_offset, (8*LIT_LEN)                   // 2288
+.equ   hash_offset, (dist_offset + 8*DIST_LEN)    // 2528
+.equ   hash_table_size, (8*1024*2)                // 16384
+
+isal_update_histogram_aarch64:
+       cmp     w_length, 0
+       ble     .done
+
+       stp     x29, x30, [sp, -64]!
+       add     x29, sp, 0
+       stp     x19, x20, [sp, 16]
+       stp     x21, x22, [sp, 32]
+       str     x23, [sp, 48]
+
+       add     last_seen, histogram, hash_offset
+       add     end_stream, start_stream, w_length, sxtw
+       mov     current, start_stream
+       sub     loop_end_iter, end_stream, #3
+       mov     histogram_saved, histogram
+
+       mov     x0, last_seen
+       mov     w1, 0
+       mov     x2, hash_table_size
+       bl      memset
+
+       cmp     current, loop_end_iter
+       bcs     .loop_end
+
+       mov     start_stream_saved, current
+       add     dist_histogram, histogram_saved, dist_offset
+       mov     D, 32766
+       b       .loop
+
+       .align 2
+.loop_2nd_stream:
+       and     literal, literal, 0xff
+       mov     current, next_hash
+       cmp     loop_end_iter, current
+
+       ldr     x0, [lit_len_histogram, literal, lsl 3]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, literal, lsl 3]
+       bls     .loop_end
+
+.loop:
+       ldr     w_literal, [current]
+       add     next_hash, current, 1
+
+       mov     w0, w_literal
+       crc32cw w0, wzr, w0
+
+       ubfiz   x0, x0, 1, 13
+       sub     x2, current, start_stream_saved
+       ldrh    w_dist, [last_seen, x0]
+       strh    w2, [last_seen, x0]
+       sub     w2, w2, w_dist
+       and     w_dist, w2, 65535
+
+       sub     w0, w_dist, #1
+       cmp     w0, D
+       bhi     .loop_2nd_stream
+
+       sub     w2, w_end_stream, w_current
+       mov     x1, current
+       sub     x0, current, w_dist, uxth
+       compare_max_258_bytes param0,param1,param2,match_length,tmp0,tmp1
+
+       cmp     match_length, 3
+       bls     .loop_2nd_stream
+
+       add     end, current, 3
+       cmp     end, loop_end_iter
+       csel    end, end, loop_end_iter, ls
+       cmp     end, next_hash
+       bls     .skip_inner_loop
+
+       .align 3
+.inner_loop:
+       ldr     w0, [next_hash]
+       crc32cw w0, wzr, w0
+
+       ubfiz   x0, x0, 1, 13
+       sub     x1, next_hash, start_stream_saved
+       add     next_hash, next_hash, 1
+       cmp     next_hash, end
+       strh    w1, [last_seen, x0]
+       bne     .inner_loop
+
+.skip_inner_loop:
+       convert_dist_to_dist_sym dist, tmp0, tmp1
+       uxtw    x2, w_dist
+       ldr     x1, [dist_histogram, x2, lsl 3]
+       add     x1, x1, 1
+       str     x1, [dist_histogram, x2, lsl 3]
+
+       convert_length_to_len_sym match_length,tmp1,tmp0
+       uxtw    x0, w_tmp1
+       ldr     x1, [lit_len_histogram, x0, lsl 3]
+       add     x1, x1, 1
+       str     x1, [lit_len_histogram, x0, lsl 3]
+
+       sub     match_length, match_length, #1
+       add     x3, x3, 1
+       add     current, current, x3
+       cmp     loop_end_iter, current
+       bhi     .loop
+
+       .align 3
+// fold the last for loop
+.loop_end:
+       cmp     end_stream, current
+       bls     .loop_fold_end
+
+       mov     x0, current
+       ldrb    w1, [x0], 1
+       cmp     end_stream, x0
+       ldr     x0, [lit_len_histogram, x1, lsl 3]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, x1, lsl 3]
+       bls     .loop_fold_end
+
+       ldrb    w1, [current, 1]
+       add     x0, current, 2
+       cmp     end_stream, x0
+       ldr     x0, [lit_len_histogram, x1, lsl 3]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, x1, lsl 3]
+       bls     .loop_fold_end
+
+       ldrb    w1, [current, 2]
+       add     x0, current, 3
+       cmp     end_stream, x0
+       ldr     x0, [lit_len_histogram, x1, lsl 3]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, x1, lsl 3]
+       bls     .loop_fold_end
+
+       ldrb    w1, [current, 3]
+       ldr     x0, [lit_len_histogram, x1, lsl 3]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, x1, lsl 3]
+
+.loop_fold_end:
+       ldr     x0, [lit_len_histogram, (256*8)]
+       add     x0, x0, 1
+       str     x0, [lit_len_histogram, (256*8)]
+
+       ldr     x23, [sp, 48]
+       ldp     x19, x20, [sp, 16]
+       ldp     x21, x22, [sp, 32]
+       ldp     x29, x30, [sp], 64
+       ret
+       .align 2
+.done:
+       ret
+       .size   isal_update_histogram_aarch64, .-isal_update_histogram_aarch64
diff --git a/ceph/src/isa-l/igzip/aarch64/lz0a_const_aarch64.h b/ceph/src/isa-l/igzip/aarch64/lz0a_const_aarch64.h
new file mode 100644 (file)
index 0000000..d55ec09
--- /dev/null
@@ -0,0 +1,72 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef __LZ0A_CONST_AARCH64_H__
+#define __LZ0A_CONST_AARCH64_H__
+#include "options_aarch64.h"
+
+#ifdef __ASSEMBLY__
+.set K , 1024
+.set D , IGZIP_HIST_SIZE //  Amount of history
+.set LA , 18 * 16 //  Max look-ahead, rounded up to 32 byte boundary
+.set BSIZE , 2*IGZIP_HIST_SIZE + LA //  Nominal buffer size
+
+///    Constants for stateless compression
+#define LAST_BYTES_COUNT 3 //  Bytes to prevent reading out of array bounds
+#define LA_STATELESS 258 //  No round up since no data is copied to a buffer
+
+.set IGZIP_LVL0_HASH_SIZE , (8 * K)
+.set IGZIP_HASH8K_HASH_SIZE , (8 * K)
+.set IGZIP_HASH_HIST_HASH_SIZE , IGZIP_HIST_SIZE
+.set IGZIP_HASH_MAP_HASH_SIZE , IGZIP_HIST_SIZE
+
+#define LVL0_HASH_MASK (IGZIP_LVL0_HASH_SIZE - 1)
+#define HASH8K_HASH_MASK (IGZIP_HASH8K_HASH_SIZE - 1)
+#define HASH_HIST_HASH_MASK (IGZIP_HASH_HIST_HASH_SIZE - 1)
+#define HASH_MAP_HASH_MASK (IGZIP_HASH_MAP_HASH_SIZE - 1)
+
+.set MIN_DEF_MATCH , 3 // Minimum length of a match in deflate
+.set SHORTEST_MATCH , 4
+
+.set SLOP , 8
+
+#define ICF_CODE_BYTES 4
+#define LIT_LEN_BIT_COUNT 10
+#define DIST_LIT_BIT_COUNT 9
+
+#define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1)
+#define LIT_DIST_MASK ((1 << DIST_LIT_BIT_COUNT) - 1)
+
+#define DIST_OFFSET LIT_LEN_BIT_COUNT
+#define EXTRA_BITS_OFFSET (DIST_OFFSET + DIST_LIT_BIT_COUNT)
+#define LIT (0x1E << DIST_OFFSET)
+
+
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/aarch64/options_aarch64.h b/ceph/src/isa-l/igzip/aarch64/options_aarch64.h
new file mode 100644 (file)
index 0000000..32db918
--- /dev/null
@@ -0,0 +1,71 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef __OPTIONS_AARCH64_H__
+#define __OPTIONS_AARCH64_H__
+
+
+#ifdef __ASSEMBLY__
+
+///   Options:dir
+///   m - reschedule mem reads
+///   e b - bitbuff style
+///   t s x - compare style
+///   h - limit hash updates
+///   l - use longer huffman table
+///   f - fix cache read
+
+#ifndef IGZIP_HIST_SIZE
+#define IGZIP_HIST_SIZE (32 * 1024)
+#endif
+
+#if (IGZIP_HIST_SIZE > (32 * 1024))
+#undef IGZIP_HIST_SIZE
+#define IGZIP_HIST_SIZE (32 * 1024)
+#endif
+
+#ifdef LONGER_HUFFTABLE
+#if (IGZIP_HIST_SIZE > 8 * 1024)
+#undef IGZIP_HIST_SIZE
+#define IGZIP_HIST_SIZE (8 * 1024)
+#endif
+#endif
+
+///   (h) limit hash update
+#define LIMIT_HASH_UPDATE
+
+///   (f) fix cache read problem
+#define FIX_CACHE_READ
+
+#define ISAL_DEF_MAX_HDR_SIZE 328
+
+
+
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/aarch64/stdmac_aarch64.h b/ceph/src/isa-l/igzip/aarch64/stdmac_aarch64.h
new file mode 100644 (file)
index 0000000..39afbc6
--- /dev/null
@@ -0,0 +1,57 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef __STDMAC_AARCH64_H__
+#define __STDMAC_AARCH64_H__
+
+#ifdef __ASSEMBLY__
+
+#define DEBUG_STACK    144
+
+.macro push_stack
+       stp     x29, x30,[sp,0-DEBUG_STACK]!
+       mov     x29, sp
+        stp     x19, x20, [sp, 16]
+        stp     x21, x22, [sp, 32]
+        stp     x23, x24, [sp, 48]
+        stp     x25, x26, [sp, 64]
+        stp     x27, x28, [sp, 80]
+.endm
+.macro pop_stack
+       ldp     x19, x20, [sp, 16]
+        ldp     x21, x22, [sp, 32]
+        ldp     x23, x24, [sp, 48]
+        ldp     x25, x26, [sp, 64]
+        ldp     x27, x28, [sp, 80]
+
+        ldp     x29, x30, [sp], DEBUG_STACK
+.endm
+
+#endif
+#endif
diff --git a/ceph/src/isa-l/igzip/adler32_avx2_4.asm b/ceph/src/isa-l/igzip/adler32_avx2_4.asm
new file mode 100644 (file)
index 0000000..8f9d6d5
--- /dev/null
@@ -0,0 +1,292 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; uint32_t adler32_avx2(uint32_t init, const unsigned char *buf, uint64_t len)
+
+%define LIMIT 5552
+%define BASE  0xFFF1 ; 65521
+
+%define CHUNKSIZE 16
+%define CHUNKSIZE_M1 (CHUNKSIZE-1)
+
+%include "reg_sizes.asm"
+
+default rel
+[bits 64]
+
+; need to keep free: eax, ecx, edx
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg1   rdi
+ %define arg2   rsi
+ %define arg3   rdx
+
+ %define init_d edi
+ %define data   r9
+ %define size   r10
+ %define s      r11
+ %define a_d    r12d
+ %define b_d    r8d
+ %define end    r13
+
+ %define func(x) x:
+ %macro FUNC_SAVE 0
+       push    r12
+       push    r13
+ %endmacro
+ %macro FUNC_RESTORE 0
+       pop     r13
+       pop     r12
+ %endmacro
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg1   rcx
+ %define arg2   rdx
+ %define arg3   r8
+
+ %define init_d r12d
+ %define data   r9
+ %define size  r10
+ %define s     r11
+ %define a_d   esi
+ %define b_d   edi
+ %define end   r13
+
+ %define stack_size  2*16 + 5*8                ; must be an odd multiple of 8
+ %define arg(x)      [rsp + stack_size + PS + PS*x]
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       save_reg        rdi,  2*16 + 0*8
+       save_reg        rsi,  2*16 + 1*8
+       save_reg        r12,  2*16 + 2*8
+       save_reg        r13,  2*16 + 3*8
+       end_prolog
+       mov     init_d, ecx     ; initalize init_d from arg1 to keep ecx free
+ %endmacro
+
+ %macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       mov     rdi,  [rsp + 2*16 + 0*8]
+       mov     rsi,  [rsp + 2*16 + 1*8]
+       mov     r12,  [rsp + 2*16 + 2*8]
+       mov     r13,  [rsp + 2*16 + 3*8]
+       add     rsp, stack_size
+ %endmacro
+%endif
+
+%define ya     ymm0
+%define yb     ymm1
+%define ydata0 ymm2
+%define ydata1 ymm3
+%define ysa    ymm4
+%define ydata   ysa
+%define ytmp0   ydata0
+%define ytmp1   ydata1
+%define ytmp2   ymm5
+%define xa     xmm0
+%define xb      xmm1
+%define xtmp0   xmm2
+%define xtmp1   xmm3
+%define xsa     xmm4
+%define xtmp2   xmm5
+%define yshuf0 ymm6
+%define yshuf1 ymm7
+
+
+global adler32_avx2_4:ISAL_SYM_TYPE_FUNCTION
+func(adler32_avx2_4)
+       FUNC_SAVE
+
+       vmovdqa yshuf0, [SHUF0]
+       vmovdqa yshuf1, [SHUF1]
+
+       mov     data, arg2
+       mov     size, arg3
+
+       mov     b_d, init_d
+       shr     b_d, 16
+       and     init_d, 0xFFFF
+       cmp     size, 32
+       jb      .lt64
+       vmovd   xa, init_d
+       vpxor   yb, yb, yb
+.sloop1:
+       mov     s, LIMIT
+       cmp     s, size
+       cmova   s, size         ; s = min(size, LIMIT)
+       lea     end, [data + s - CHUNKSIZE_M1]
+       cmp     data, end
+       jae     .skip_loop_1a
+align 32
+.sloop1a:
+       ; do CHUNKSIZE adds
+       vbroadcastf128  ydata, [data]
+       add     data, CHUNKSIZE
+       vpshufb ydata0, ydata, yshuf0
+       vpaddd  ya, ya, ydata0
+       vpaddd  yb, yb, ya
+       vpshufb ydata1, ydata, yshuf1
+       vpaddd  ya, ya, ydata1
+       vpaddd  yb, yb, ya
+       cmp     data, end
+       jb      .sloop1a
+
+.skip_loop_1a:
+       add     end, CHUNKSIZE_M1
+
+       test    s, CHUNKSIZE_M1
+       jnz     .do_final
+
+       ; either we're done, or we just did LIMIT
+       sub     size, s
+
+       ; reduce
+       vpslld  yb, 3   ; b is scaled by 8
+       vpmulld ysa, ya, [A_SCALE] ; scaled a
+
+       ; compute horizontal sums of ya, yb, ysa
+       vextracti128 xtmp0, ya, 1
+       vextracti128 xtmp1, yb, 1
+       vextracti128 xtmp2, ysa, 1
+       vpaddd  xa, xa, xtmp0
+       vpaddd  xb, xb, xtmp1
+       vpaddd  xsa, xsa, xtmp2
+       vphaddd xa, xa, xa
+       vphaddd xb, xb, xb
+       vphaddd xsa, xsa, xsa
+       vphaddd xa, xa, xa
+       vphaddd xb, xb, xb
+       vphaddd xsa, xsa, xsa
+
+       vmovd   eax, xa
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     a_d, edx
+
+       vpsubd  xb, xb, xsa
+       vmovd   eax, xb
+       add     eax, b_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     b_d, edx
+
+       test    size, size
+       jz      .finish
+
+       ; continue loop
+       vmovd   xa, a_d
+       vpxor   yb, yb
+       jmp     .sloop1
+
+.finish:
+       mov     eax, b_d
+       shl     eax, 16
+       or      eax, a_d
+       jmp     .end
+
+.lt64:
+       mov     a_d, init_d
+       lea     end, [data + size]
+       test    size, size
+       jnz     .final_loop
+       jmp     .zero_size
+
+       ; handle remaining 1...15 bytes
+.do_final:
+       ; reduce
+       vpslld  yb, 3   ; b is scaled by 8
+       vpmulld ysa, ya, [A_SCALE] ; scaled a
+
+       vextracti128 xtmp0, ya, 1
+       vextracti128 xtmp1, yb, 1
+       vextracti128 xtmp2, ysa, 1
+       vpaddd  xa, xa, xtmp0
+       vpaddd  xb, xb, xtmp1
+       vpaddd  xsa, xsa, xtmp2
+       vphaddd xa, xa, xa
+       vphaddd xb, xb, xb
+       vphaddd xsa, xsa, xsa
+       vphaddd xa, xa, xa
+       vphaddd xb, xb, xb
+       vphaddd xsa, xsa, xsa
+       vpsubd  xb, xb, xsa
+
+       vmovd   a_d, xa
+       vmovd   eax, xb
+       add     b_d, eax
+
+align 32
+.final_loop:
+       movzx   eax, byte[data]
+       add     a_d, eax
+       inc     data
+       add     b_d, a_d
+       cmp     data, end
+       jb      .final_loop
+
+.zero_size:
+       mov     eax, a_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     a_d, edx
+
+       mov     eax, b_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       shl     edx, 16
+       or      edx, a_d
+       mov     eax, edx
+
+.end:
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 32
+A_SCALE:
+       dq      0x0000000100000000, 0x0000000300000002
+       dq      0x0000000500000004, 0x0000000700000006
+SHUF0:
+       dq      0xFFFFFF01FFFFFF00, 0xFFFFFF03FFFFFF02
+       dq      0xFFFFFF05FFFFFF04, 0xFFFFFF07FFFFFF06
+SHUF1:
+       dq      0xFFFFFF09FFFFFF08, 0xFFFFFF0BFFFFFF0A
+       dq      0xFFFFFF0DFFFFFF0C, 0xFFFFFF0FFFFFFF0E
+
diff --git a/ceph/src/isa-l/igzip/adler32_base.c b/ceph/src/isa-l/igzip/adler32_base.c
new file mode 100644 (file)
index 0000000..034b71a
--- /dev/null
@@ -0,0 +1,63 @@
+/**********************************************************************
+  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdint.h>
+#include "igzip_checksums.h"
+
+uint32_t adler32_base(uint32_t adler32, uint8_t * start, uint32_t length)
+{
+       uint8_t *end, *next = start;
+       uint64_t A, B;
+
+       A = adler32 & 0xffff;
+       B = adler32 >> 16;
+
+       while (length > MAX_ADLER_BUF) {
+               end = next + MAX_ADLER_BUF;
+               for (; next < end; next++) {
+                       A += *next;
+                       B += A;
+               }
+
+               A = A % ADLER_MOD;
+               B = B % ADLER_MOD;
+               length -= MAX_ADLER_BUF;
+       }
+
+       end = next + length;
+       for (; next < end; next++) {
+               A += *next;
+               B += A;
+       }
+
+       A = A % ADLER_MOD;
+       B = B % ADLER_MOD;
+
+       return B << 16 | A;
+}
diff --git a/ceph/src/isa-l/igzip/adler32_perf.c b/ceph/src/isa-l/igzip/adler32_perf.c
new file mode 100644 (file)
index 0000000..055e072
--- /dev/null
@@ -0,0 +1,72 @@
+/**********************************************************************
+  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "igzip_lib.h"
+#include "test.h"
+
+//#define CACHED_TEST
+#ifdef CACHED_TEST
+// Cached test, loop many times over small dataset
+#define TEST_LEN     8*1024
+#define TEST_TYPE_STR "_warm"
+#else
+// Uncached test.  Pull from large mem base.
+#define GT_L3_CACHE  32*1024*1024      /* some number > last level cache */
+#define TEST_LEN     (2 * GT_L3_CACHE)
+#define TEST_TYPE_STR "_cold"
+#endif
+
+#ifndef TEST_SEED
+#define TEST_SEED 0x1234
+#endif
+
+int main(int argc, char *argv[])
+{
+       void *buf;
+       uint32_t checksum = 0;
+       struct perf start;
+
+       printf("adler32_perf:\n");
+
+       if (posix_memalign(&buf, 1024, TEST_LEN)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       memset(buf, 0, TEST_LEN);
+
+       BENCHMARK(&start, BENCHMARK_TIME, checksum |= isal_adler32(TEST_SEED, buf, TEST_LEN));
+       printf("adler32" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)TEST_LEN);
+
+       return 0;
+}
diff --git a/ceph/src/isa-l/igzip/adler32_sse.asm b/ceph/src/isa-l/igzip/adler32_sse.asm
new file mode 100644 (file)
index 0000000..83f577d
--- /dev/null
@@ -0,0 +1,249 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; uint32_t adler32_avx2(uint32_t init, const unsigned char *buf, uint64_t len)
+
+%define LIMIT 5552
+%define BASE  0xFFF1 ; 65521
+
+%include "reg_sizes.asm"
+
+default rel
+[bits 64]
+
+; need to keep free: eax, ecx, edx
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg1   rdi
+ %define arg2   rsi
+ %define arg3   rdx
+
+ %define init_d edi
+ %define data   r9
+ %define size   r10
+ %define s      r11
+ %define a_d    r12d
+ %define b_d    r8d
+ %define end    r13
+
+ %define func(x) x:
+ %macro FUNC_SAVE 0
+       push    r12
+       push    r13
+ %endmacro
+%macro FUNC_RESTORE 0
+       pop     r13
+       pop     r12
+ %endmacro
+%endif
+
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg1   rcx
+ %define arg2   rdx
+ %define arg3   r8
+
+ %define init_d r12d
+ %define data   r9
+ %define size  r10
+ %define s     r11
+ %define a_d   esi
+ %define b_d   edi
+ %define end   r13
+
+ %define stack_size  5*8               ; must be an odd multiple of 8
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       save_reg        rdi,  0*8
+       save_reg        rsi,  1*8
+       save_reg        r12,  2*8
+       save_reg        r13,  3*8
+       end_prolog
+       mov     init_d, ecx     ; initalize init_d from arg1 to keep ecx free
+ %endmacro
+
+ %macro FUNC_RESTORE 0
+       mov     rdi,  [rsp + 0*8]
+       mov     rsi,  [rsp + 1*8]
+       mov     r12,  [rsp + 2*8]
+       mov     r13,  [rsp + 3*8]
+       add     rsp, stack_size
+ %endmacro
+%endif
+
+%define xa     xmm0
+%define xb     xmm1
+%define xdata0 xmm2
+%define xdata1 xmm3
+%define xsa    xmm4
+
+global adler32_sse:ISAL_SYM_TYPE_FUNCTION
+func(adler32_sse)
+       FUNC_SAVE
+
+       mov     data, arg2
+       mov     size, arg3
+
+       mov     b_d, init_d
+       shr     b_d, 16
+       and     init_d, 0xFFFF
+       cmp     size, 32
+       jb      .lt64
+       movd    xa, init_d
+       pxor    xb, xb
+.sloop1:
+       mov     s, LIMIT
+       cmp     s, size
+       cmova   s, size         ; s = min(size, LIMIT)
+       lea     end, [data + s - 7]
+       cmp     data, end
+       jae     .skip_loop_1a
+align 32
+.sloop1a:
+       ; do 8 adds
+       pmovzxbd xdata0, [data]
+       pmovzxbd xdata1, [data + 4]
+       add     data, 8
+       paddd   xa, xdata0
+       paddd   xb, xa
+       paddd   xa, xdata1
+       paddd   xb, xa
+       cmp     data, end
+       jb      .sloop1a
+
+.skip_loop_1a:
+       add     end, 7
+
+       test    s, 7
+       jnz     .do_final
+
+       ; either we're done, or we just did LIMIT
+       sub     size, s
+
+       ; reduce
+       pslld   xb, 2   ; b is scaled by 4
+       movdqa  xsa, xa ; scaled a
+       pmulld  xsa, [A_SCALE]
+
+       phaddd  xa, xa
+       phaddd  xb, xb
+       phaddd  xsa, xsa
+       phaddd  xa, xa
+       phaddd  xb, xb
+       phaddd  xsa, xsa
+
+       movd    eax, xa
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     a_d, edx
+
+       psubd   xb, xsa
+       movd    eax, xb
+       add     eax, b_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     b_d, edx
+
+       test    size, size
+       jz      .finish
+
+       ; continue loop
+       movd    xa, a_d
+       pxor    xb, xb
+       jmp     .sloop1
+
+.finish:
+       mov     eax, b_d
+       shl     eax, 16
+       or      eax, a_d
+       jmp     .end
+
+.lt64:
+       mov     a_d, init_d
+       lea     end, [data + size]
+       test    size, size
+       jnz     .final_loop
+       jmp     .zero_size
+
+       ; handle remaining 1...15 bytes
+.do_final:
+       ; reduce
+       pslld   xb, 2   ; b is scaled by 4
+       movdqa  xsa, xa ; scaled a
+       pmulld  xsa, [A_SCALE]
+
+       phaddd  xa, xa
+       phaddd  xb, xb
+       phaddd  xsa, xsa
+       phaddd  xa, xa
+       phaddd  xb, xb
+       phaddd  xsa, xsa
+       psubd   xb, xsa
+
+       movd    a_d, xa
+       movd    eax, xb
+       add     b_d, eax
+
+align 32
+.final_loop:
+       movzx   eax, byte[data]
+       add     a_d, eax
+       inc     data
+       add     b_d, a_d
+       cmp     data, end
+       jb      .final_loop
+
+.zero_size:
+       mov     eax, a_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       mov     a_d, edx
+
+       mov     eax, b_d
+       xor     edx, edx
+       mov     ecx, BASE
+       div     ecx             ; divide edx:eax by ecx, quot->eax, rem->edx
+       shl     edx, 16
+       or      edx, a_d
+       mov     eax, edx
+
+.end:
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 32
+A_SCALE:
+       dq      0x0000000100000000, 0x0000000300000002
index 531adf35a346d014b41be4e3f8e0a3ace1e0e2ed..71493825e5b0c66c790842e6aa713673b1efe807 100644 (file)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 %include "options.asm"
+%include "stdmac.asm"
 
 ; Assumes m_out_buf is a register
 ; Clobbers RCX
 ; code is clobbered
-; write_bits_always    m_bits, m_bit_count, code, count, m_out_buf, tmp1
-%macro write_bits_always 6
+; write_bits_always    m_bits, m_bit_count, code, count, m_out_buf
+%macro write_bits 5
 %define %%m_bits       %1
 %define %%m_bit_count  %2
 %define %%code         %3
 %define %%count                %4
 %define %%m_out_buf    %5
-%define %%tmp1         %6
 
-%ifdef USE_HSWNI
-       shlx    %%code, %%code, %%m_bit_count
-%else
-       mov     rcx, %%m_bit_count
-       shl     %%code, cl
-%endif
-       or      %%m_bits, %%code
-       add     %%m_bit_count, %%count
-
-       movnti  [%%m_out_buf], %%m_bits
-       mov     rcx, %%m_bit_count
-       shr     rcx, 3                  ; rcx = bytes
-       add     %%m_out_buf, rcx
-       shl     rcx, 3                  ; rcx = bits
-       sub     %%m_bit_count, rcx
-%ifdef USE_HSWNI
-       shrx    %%m_bits, %%m_bits, rcx
-%else
-       shr     %%m_bits, cl
-%endif
-%endm
-
-; Assumes m_out_buf is a register
-; Clobbers RCX
-; code is clobbered
-; write_bits_safe      m_bits, m_bit_count, code, count, m_out_buf, tmp1
-%macro write_bits_safe 6
-%define %%m_bits       %1
-%define %%m_bit_count  %2
-%define %%code         %3
-%define %%count                %4
-%define %%m_out_buf    %5
-%define %%tmp1         %6
+       SHLX    %%code, %%code, %%m_bit_count
 
-       mov     %%tmp1, %%code
-%ifdef USE_HSWNI
-       shlx    %%tmp1, %%tmp1, %%m_bit_count
-%else
-       mov     rcx, %%m_bit_count
-       shl     %%tmp1, cl
-%endif
-       or      %%m_bits, %%tmp1
+       or      %%m_bits, %%code
        add     %%m_bit_count, %%count
-       cmp     %%m_bit_count, 64
-       jb      %%not_full
-       sub     %%m_bit_count, 64
-       movnti  [%%m_out_buf], %%m_bits
-       add     %%m_out_buf, 8
-       mov     rcx, %%count
-       sub     rcx, %%m_bit_count
-       mov     %%m_bits, %%code
-%ifdef USE_HSWNI
-       shrx    %%m_bits, %%m_bits, rcx
-%else
-       shr     %%m_bits, cl
-%endif
-%%not_full:
-%endm
-
-; Assumes m_out_buf is a register
-; Clobbers RCX
-;; check_space num_bits, m_bits, m_bit_count, m_out_buf, tmp1
-%macro check_space 5
-%define %%num_bits     %1
-%define %%m_bits       %2
-%define %%m_bit_count  %3
-%define %%m_out_buf    %4
-%define %%tmp1         %5
-
-       mov     %%tmp1, 63
-       sub     %%tmp1, %%m_bit_count
-       cmp     %%tmp1, %%num_bits
-       jae     %%space_ok
 
-       ; if (63 - m_bit_count < num_bits)
-       movnti  [%%m_out_buf], %%m_bits
+       mov     [%%m_out_buf], %%m_bits
        mov     rcx, %%m_bit_count
        shr     rcx, 3                  ; rcx = bytes
        add     %%m_out_buf, rcx
        shl     rcx, 3                  ; rcx = bits
-       sub     %%m_bit_count, rcx
-%ifdef USE_HSWNI
-       shrx    %%m_bits, %%m_bits, rcx
-%else
-       shr     %%m_bits, cl
-%endif
-%%space_ok:
-%endm
-
-; rcx is clobbered
-; code is clobbered
-; write_bits_unsafe    m_bits, m_bit_count, code, count
-%macro write_bits_unsafe 4
-%define %%m_bits               %1
-%define %%m_bit_count  %2
-%define %%code         %3
-%define %%count                %4
-%ifdef USE_HSWNI
-       shlx    %%code, %%code, %%m_bit_count
-%else
-       mov     rcx, %%m_bit_count
-       shl     %%code, cl
-%endif
-       or      %%m_bits, %%code
-       add     %%m_bit_count, %%count
-%endm
-
-; pad_to_byte m_bit_count, extra_bits
-%macro pad_to_byte 2
-%define %%m_bit_count  %1
-%define %%extra_bits   %2
-
-       mov     %%extra_bits, %%m_bit_count
-       neg     %%extra_bits
-       and     %%extra_bits, 7
-       add     %%m_bit_count, %%extra_bits
-%endm
-
-; Assumes m_out_buf is a memory reference
-; flush        m_bits, m_bit_count, m_out_buf, tmp1
-%macro flush 4
-%define %%m_bits       %1
-%define %%m_bit_count  %2
-%define %%m_out_buf    %3
-%define %%tmp1         %4
-
-       test    %%m_bit_count, %%m_bit_count
-       jz      %%bit_count_is_zero
-
-       mov     %%tmp1, %%m_out_buf
-       movnti  [%%tmp1], %%m_bits
-
-       add     %%m_bit_count, 7
-       shr     %%m_bit_count, 3        ; bytes
-       add     %%tmp1, %%m_bit_count
-       mov     %%m_out_buf, %%tmp1
-
-%%bit_count_is_zero:
-       xor     %%m_bits, %%m_bits
-       xor     %%m_bit_count, %%m_bit_count
-%endm
-
-%macro write_bits 6
-%define %%m_bits       %1
-%define %%m_bit_count  %2
-%define %%code         %3
-%define %%count                %4
-%define %%m_out_buf    %5
-%define %%tmp1         %6
+       and     %%m_bit_count, 0x7
 
-%ifdef USE_BITBUF8
-       write_bits_safe %%m_bits, %%m_bit_count, %%code, %%count, %%m_out_buf, %%tmp1
-%elifdef USE_BITBUFB
-       write_bits_always %%m_bits, %%m_bit_count, %%code, %%count, %%m_out_buf, %%tmp1
-%else
-       ; state->bitbuf.check_space(code_len2);
-       check_space     %%count, %%m_bits, %%m_bit_count, %%m_out_buf, %%tmp1
-       ; state->bitbuf.write_bits(code2, code_len2);
-       write_bits_unsafe       %%m_bits, %%m_bit_count, %%code, %%count
-       ; code2 is clobbered, rcx is clobbered
-%endif
+       SHRX    %%m_bits, %%m_bits, rcx
 %endm
 
 %macro write_dword 2
 %define %%data %1d
 %define %%addr %2
-       movnti  [%%addr], %%data
+       mov     [%%addr], %%data
        add     %%addr, 4
 %endm
index 0f018b0b1ecef2445e068e00de260e4e684fca57..51bd752d0a914cb02e119ddc70017ceb2eda0f5c 100644 (file)
 #define BITBUF2_H
 
 #include "igzip_lib.h"
-
-/* bit buffer types
- * BITBUF8: (e) Always write 8 bytes of data
- * BITBUFB: (b) Always write data
- */
-#if !(defined(USE_BITBUFB) || defined(USE_BITBUF8) || defined(USE_BITBUF_ELSE))
-# define USE_BITBUFB
-#endif
-
-#if defined (__unix__) || (__APPLE__) || (__MINGW32__)
-#define _mm_stream_si64x(dst, src) *((uint64_t*)dst) = src
-#else
-#include <intrin.h>
-#endif
-
-#ifdef _WIN64
-#pragma warning(disable: 4996)
-#endif
+#include "unaligned.h"
 
 #ifdef _MSC_VER
 #define inline __inline
 /* MAX_BITBUF_BIT WRITE is the maximum number of bits than can be safely written
  * by consecutive calls of write_bits. Note this assumes the bitbuf is in a
  * state that is possible at the exit of write_bits */
-#ifdef USE_BITBUF8 /*Write bits safe */
-# define MAX_BITBUF_BIT_WRITE 63
-#elif defined(USE_BITBUFB) /* Write bits always */
-# define MAX_BITBUF_BIT_WRITE 56
-#else /* USE_BITBUF_ELSE */
-# define MAX_BITBUF_BIT_WRITE 56
-#endif
-
-
-static
- inline void construct(struct BitBuf2 *me)
-{
-       me->m_bits = 0;
-       me->m_bit_count = 0;
-       me->m_out_buf = me->m_out_start = me->m_out_end = NULL;
-}
+#define MAX_BITBUF_BIT_WRITE 56
 
 static inline void init(struct BitBuf2 *me)
 {
@@ -110,7 +78,7 @@ static inline uint32_t buffer_bits_used(struct BitBuf2 *me)
 static inline void flush_bits(struct BitBuf2 *me)
 {
        uint32_t bits;
-       _mm_stream_si64x((int64_t *) me->m_out_buf, me->m_bits);
+       store_u64(me->m_out_buf, me->m_bits);
        bits = me->m_bit_count & ~7;
        me->m_bit_count -= bits;
        me->m_out_buf += bits/8;
@@ -118,6 +86,19 @@ static inline void flush_bits(struct BitBuf2 *me)
 
 }
 
+/* Can write up to 8 bytes to output buffer */
+static inline void flush(struct BitBuf2 *me)
+{
+       uint32_t bytes;
+       if (me->m_bit_count) {
+               store_u64(me->m_out_buf, me->m_bits);
+               bytes = (me->m_bit_count + 7) / 8;
+               me->m_out_buf += bytes;
+       }
+       me->m_bits = 0;
+       me->m_bit_count = 0;
+}
+
 static inline void check_space(struct BitBuf2 *me, uint32_t num_bits)
 {
        /* Checks if bitbuf has num_bits extra space and flushes the bytes in
@@ -133,40 +114,17 @@ static inline void write_bits_unsafe(struct BitBuf2 *me, uint64_t code, uint32_t
 }
 
 static inline void write_bits(struct BitBuf2 *me, uint64_t code, uint32_t count)
-{
-#ifdef USE_BITBUF8 /*Write bits safe */
+{      /* Assumes there is space to fit code into m_bits. */
        me->m_bits |= code << me->m_bit_count;
        me->m_bit_count += count;
-       if (me->m_bit_count >= 64) {
-               _mm_stream_si64x((int64_t *) me->m_out_buf, me->m_bits);
-               me->m_out_buf += 8;
-               me->m_bit_count -= 64;
-               me->m_bits = code >> (count - me->m_bit_count);
-       }
-#elif defined(USE_BITBUFB) /* Write bits always */
-       /* Assumes there is space to fit code into m_bits. */
-       me->m_bits |= code << me->m_bit_count;
-       me->m_bit_count += count;
-       if (me->m_bit_count >= 8)
-               flush_bits(me);
-#else /* USE_BITBUF_ELSE */
-       check_space(me, count);
-       write_bits_unsafe(me, code, count);
-#endif
-
+       flush_bits(me);
 }
 
-/* Can write up to 8 bytes to output buffer */
-static inline void flush(struct BitBuf2 *me)
-{
-       uint32_t bytes;
-       if (me->m_bit_count) {
-               _mm_stream_si64x((int64_t *) me->m_out_buf, me->m_bits);
-               bytes = (me->m_bit_count + 7) / 8;
-               me->m_out_buf += bytes;
-       }
-       me->m_bits = 0;
-       me->m_bit_count = 0;
+static inline void write_bits_flush(struct BitBuf2 *me, uint64_t code, uint32_t count)
+{      /* Assumes there is space to fit code into m_bits. */
+       me->m_bits |= code << me->m_bit_count;
+       me->m_bit_count += count;
+       flush(me);
 }
 
 #endif //BITBUF2_H
diff --git a/ceph/src/isa-l/igzip/checksum32_funcs_test.c b/ceph/src/isa-l/igzip/checksum32_funcs_test.c
new file mode 100644 (file)
index 0000000..cbb5d1b
--- /dev/null
@@ -0,0 +1,308 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "igzip_checksums.h"
+#include "checksum_test_ref.h"
+#include "types.h"
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+#define MAX_BUF   512
+#define TEST_SIZE  20
+
+typedef uint32_t(*checksum32_func_t) (uint32_t, const unsigned char *, uint64_t);
+
+typedef struct func_case {
+       char *note;
+       checksum32_func_t checksum32_func_call;
+       checksum32_func_t checksum32_ref_call;
+} func_case_t;
+
+func_case_t test_funcs[] = {
+       {"checksum32_adler", isal_adler32, adler_ref},
+};
+
+// Generates pseudo-random data
+
+void rand_buffer(unsigned char *buf, long buffer_size)
+{
+       long i;
+       for (i = 0; i < buffer_size; i++)
+               buf[i] = rand();
+}
+
+// Test cases
+int zeros_test(func_case_t * test_func);
+int simple_pattern_test(func_case_t * test_func);
+int seeds_sizes_test(func_case_t * test_func);
+int eob_test(func_case_t * test_func);
+int update_test(func_case_t * test_func);
+int update_over_mod_test(func_case_t * test_func);
+
+int verbose = 0;
+void *buf_alloc = NULL;
+
+int main(int argc, char *argv[])
+{
+       int fail = 0, fail_case;
+       int i, ret;
+       func_case_t *test_func;
+
+       verbose = argc - 1;
+
+       // Align to MAX_BUF boundary
+       ret = posix_memalign(&buf_alloc, MAX_BUF, MAX_BUF * TEST_SIZE);
+       if (ret) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+       srand(TEST_SEED);
+       printf("CHECKSUM32 Tests seed=0x%x\n", TEST_SEED);
+
+       for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) {
+               fail_case = 0;
+               test_func = &test_funcs[i];
+
+               printf("Test %s ", test_func->note);
+               fail_case += zeros_test(test_func);
+               fail_case += simple_pattern_test(test_func);
+               fail_case += seeds_sizes_test(test_func);
+               fail_case += eob_test(test_func);
+               fail_case += update_test(test_func);
+               fail_case += update_over_mod_test(test_func);
+               printf("Test %s done: %s\n", test_func->note, fail_case ? "Fail" : "Pass");
+
+               if (fail_case) {
+                       printf("\n%s Failed %d tests\n", test_func->note, fail_case);
+                       fail++;
+               }
+       }
+
+       printf("CHECKSUM32 Tests all done: %s\n", fail ? "Fail" : "Pass");
+
+       return fail;
+}
+
+// Test of all zeros
+int zeros_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;
+       memset(buf, 0, MAX_BUF * 10);
+       c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF * 10);
+       c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF * 10);
+
+       if (c_dut != c_ref) {
+               fail++;
+               printf("\n              opt    ref\n");
+               printf("                ------ ------\n");
+               printf("checksum        zero = 0x%8x 0x%8x \n", c_dut, c_ref);
+       } else
+               printf(".");
+
+       return fail;
+}
+
+// Another simple test pattern
+int simple_pattern_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;
+       memset(buf, 0x8a, MAX_BUF);
+       c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF);
+       c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF);
+       if (c_dut != c_ref)
+               fail++;
+       if (verbose)
+               printf("checksum  all 8a = 0x%8x 0x%8x\n", c_dut, c_ref);
+       else
+               printf(".");
+
+       return fail;
+}
+
+int seeds_sizes_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       int i;
+       uint32_t r, s;
+       unsigned char *buf = NULL;
+
+       // Do a few random tests
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+       rand_buffer(buf, MAX_BUF * TEST_SIZE);
+
+       for (i = 0; i < TEST_SIZE; i++) {
+               c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF);
+               c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF);
+               if (c_dut != c_ref)
+                       fail++;
+               if (verbose)
+                       printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref);
+               else
+                       printf(".");
+               buf += MAX_BUF;
+       }
+
+       // Do a few random sizes
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+
+       for (i = MAX_BUF; i >= 0; i--) {
+               c_dut = test_func->checksum32_func_call(r, buf, i);
+               c_ref = test_func->checksum32_ref_call(r, buf, i);
+               if (c_dut != c_ref) {
+                       fail++;
+                       printf("fail random size%i 0x%8x 0x%8x\n", i, c_dut, c_ref);
+               } else
+                       printf(".");
+       }
+
+       // Try different seeds
+       for (s = 0; s < 20; s++) {
+               buf = (unsigned char *)buf_alloc;       //reset buf
+
+               r = rand();     // just to get a new seed
+               rand_buffer(buf, MAX_BUF * TEST_SIZE);  // new pseudo-rand data
+
+               if (verbose)
+                       printf("seed = 0x%x\n", r);
+
+               for (i = 0; i < TEST_SIZE; i++) {
+                       c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF);
+                       c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF);
+                       if (c_dut != c_ref)
+                               fail++;
+                       if (verbose)
+                               printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref);
+                       else
+                               printf(".");
+                       buf += MAX_BUF;
+               }
+       }
+
+       return fail;
+}
+
+// Run tests at end of buffer
+int eob_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       int i;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       buf = buf + ((MAX_BUF - 1) * TEST_SIZE);        //Line up TEST_SIZE from end
+       for (i = 0; i < TEST_SIZE; i++) {
+               c_dut = test_func->checksum32_func_call(TEST_SEED, buf + i, TEST_SIZE - i);
+               c_ref = test_func->checksum32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i);
+               if (c_dut != c_ref)
+                       fail++;
+               if (verbose)
+                       printf("checksum eob rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref);
+               else
+                       printf(".");
+       }
+
+       return fail;
+}
+
+int update_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       int i;
+       uint32_t r;
+       unsigned char *buf = NULL;
+
+       buf = (unsigned char *)buf_alloc;       //reset buf
+       r = rand();
+       // Process the whole buf with reference func single call.
+       c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF * TEST_SIZE);
+       // Process buf with update method.
+       for (i = 0; i < TEST_SIZE; i++) {
+               c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF);
+               // Update checksum seeds and buf pointer.
+               r = c_dut;
+               buf += MAX_BUF;
+       }
+
+       if (c_dut != c_ref)
+               fail++;
+       if (verbose)
+               printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref);
+       else
+               printf(".");
+
+       return fail;
+}
+
+int update_over_mod_test(func_case_t * test_func)
+{
+       uint32_t c_dut, c_ref;
+       int fail = 0;
+       int i;
+       unsigned char *buf = NULL;
+
+       buf = malloc(ADLER_MOD);
+       memset(buf, 0xff, ADLER_MOD);
+
+       c_ref = c_dut = rand();
+
+       // Process buf with update method.
+       for (i = 0; i < 20; i++) {
+               c_ref = test_func->checksum32_ref_call(c_ref, buf, ADLER_MOD - 64);
+               c_dut = test_func->checksum32_func_call(c_dut, buf, ADLER_MOD - 64);
+       }
+
+       if (c_dut != c_ref)
+               fail++;
+       if (verbose)
+               printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref);
+       else
+               printf(".");
+
+       free(buf);
+       return fail;
+}
diff --git a/ceph/src/isa-l/igzip/checksum_test_ref.h b/ceph/src/isa-l/igzip/checksum_test_ref.h
new file mode 100644 (file)
index 0000000..b561be9
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Reference checksums used in compression tests
+ */
+
+#ifndef CHECKSUM_TEST_REF_H
+#define CHECKSUM_TEST_REF_H
+
+#include <stdint.h>
+
+uint32_t inflate_crc_table[256] = {
+       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+       0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+       0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+       0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
+       0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+       0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
+       0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
+       0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+       0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
+       0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
+       0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
+       0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
+       0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
+       0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+       0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+       0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+       0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+       0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+       0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+       0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+       0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+       0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+       0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+       0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+       0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+       0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+       0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+       0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+       0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+       0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+       0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+       0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+       0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+       0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+       0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+       0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+       0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+       0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+       0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+       0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+       0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+       0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+       0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+       0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+       0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+       0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+       0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+       0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
+
+
+uint32_t crc32_gzip_refl_ref(uint32_t crc, const unsigned char *buf, uint64_t len)
+{
+       uint64_t i;
+       crc = ~crc;
+       for (i = 0; i < len; i++)
+               crc = (crc >> 8) ^ inflate_crc_table[(crc & 0xff) ^ buf[i]];
+       return ~crc;
+}
+
+#define ADLER_MOD 65521
+
+
+uint32_t adler_ref(uint32_t init, const unsigned char *buf, uint64_t len)
+{
+       uint64_t i;
+       uint32_t a = init & 0xffff;
+       uint32_t b = init >> 16;
+
+       for (i = 0; i < len; i++) {
+               a = (a + buf[i]) % ADLER_MOD;
+               b = (b + a) % ADLER_MOD;
+       }
+       return (b << 16) | a;
+}
+
+#endif /* CHECKSUM_TEST_REF_H */
diff --git a/ceph/src/isa-l/igzip/crc32_gzip.asm b/ceph/src/isa-l/igzip/crc32_gzip.asm
deleted file mode 100644 (file)
index e8a5414..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-;
-;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions
-;  are met:
-;    * Redistributions of source code must retain the above copyright
-;      notice, this list of conditions and the following disclaimer.
-;    * Redistributions in binary form must reproduce the above copyright
-;      notice, this list of conditions and the following disclaimer in
-;      the documentation and/or other materials provided with the
-;      distribution.
-;    * Neither the name of Intel Corporation nor the names of its
-;      contributors may be used to endorse or promote products derived
-;      from this software without specific prior written permission.
-;
-;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;       Function API:
-;       UINT32 crc32_gzip(
-;               UINT32 init_crc, //initial CRC value, 32 bits
-;               const unsigned char *buf, //buffer pointer to calculate CRC on
-;               UINT64 len //buffer length in bytes (64-bit data)
-;       );
-;
-;       Authors:
-;               Erdinc Ozturk
-;               Vinodh Gopal
-;               James Guilford
-;
-;       Reference paper titled "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction"
-;       URL: http://download.intel.com/design/intarch/papers/323102.pdf
-;
-;
-;       sample yasm command line:
-;       yasm -f x64 -f elf64 -X gnu -g dwarf2 crc32_gzip
-;
-;       As explained here:
-;       http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html
-;       CRC-32 checksum is described in RFC 1952
-;       Implementing RFC 1952 CRC:
-;       http://www.ietf.org/rfc/rfc1952.txt
-
-%include "reg_sizes.asm"
-
-[bits 64]
-default rel
-
-section .text
-
-
-%ifidn __OUTPUT_FORMAT__, win64
-        %xdefine        arg1 rcx
-        %xdefine        arg2 rdx
-        %xdefine        arg3 r8
-
-        %xdefine        arg1_low32 ecx
-%else
-        %xdefine        arg1 rdi
-        %xdefine        arg2 rsi
-        %xdefine        arg3 rdx
-
-        %xdefine        arg1_low32 edi
-%endif
-
-%define TMP 16*0
-%ifidn __OUTPUT_FORMAT__, win64
-        %define XMM_SAVE 16*2
-        %define VARIABLE_OFFSET 16*10+8
-%else
-        %define VARIABLE_OFFSET 16*2+8
-%endif
-
-align 16
-global  crc32_gzip_01
-crc32_gzip_01:
-
-        ; unsigned long c = crc ^ 0xffffffffL;
-        not     arg1_low32     ;
-
-
-        sub     rsp, VARIABLE_OFFSET
-%ifidn __OUTPUT_FORMAT__, win64
-        ; push the xmm registers into the stack to maintain
-        movdqa  [rsp + XMM_SAVE + 16*0], xmm6
-        movdqa  [rsp + XMM_SAVE + 16*1], xmm7
-        movdqa  [rsp + XMM_SAVE + 16*2], xmm8
-        movdqa  [rsp + XMM_SAVE + 16*3], xmm9
-        movdqa  [rsp + XMM_SAVE + 16*4], xmm10
-        movdqa  [rsp + XMM_SAVE + 16*5], xmm11
-        movdqa  [rsp + XMM_SAVE + 16*6], xmm12
-        movdqa  [rsp + XMM_SAVE + 16*7], xmm13
-%endif
-
-        ; check if smaller than 256B
-        cmp     arg3, 256
-
-        ; for sizes less than 256, we can't fold 128B at a time...
-        jl      _less_than_256
-
-
-        ; load the initial crc value
-        movd    xmm10, arg1_low32      ; initial crc
-
-        ; receive the initial 64B data, xor the initial crc value
-        movdqu  xmm0, [arg2+16*0]
-        movdqu  xmm1, [arg2+16*1]
-        movdqu  xmm2, [arg2+16*2]
-        movdqu  xmm3, [arg2+16*3]
-        movdqu  xmm4, [arg2+16*4]
-        movdqu  xmm5, [arg2+16*5]
-        movdqu  xmm6, [arg2+16*6]
-        movdqu  xmm7, [arg2+16*7]
-
-        ; XOR the initial_crc value
-        pxor    xmm0, xmm10
-        movdqa  xmm10, [rk3]    ;xmm10 has rk3 and rk4
-                                        ;imm value of pclmulqdq instruction will determine which constant to use
-        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-        ; we subtract 256 instead of 128 to save one instruction from the loop
-        sub     arg3, 256
-
-        ; at this section of the code, there is 128*x+y (0<=y<128) bytes of buffer. The _fold_128_B_loop
-        ; loop will fold 128B at a time until we have 128+y Bytes of buffer
-
-
-        ; fold 128B at a time. This section of the code folds 8 xmm registers in parallel
-_fold_128_B_loop:
-
-        ; update the buffer pointer
-        add     arg2, 128
-
-        movdqu  xmm9, [arg2+16*0]
-        movdqu  xmm12, [arg2+16*1]
-        movdqa  xmm8, xmm0
-        movdqa  xmm13, xmm1
-        pclmulqdq       xmm0, xmm10, 0x10
-        pclmulqdq       xmm8, xmm10 , 0x1
-        pclmulqdq       xmm1, xmm10, 0x10
-        pclmulqdq       xmm13, xmm10 , 0x1
-        pxor    xmm0, xmm9
-        xorps   xmm0, xmm8
-        pxor    xmm1, xmm12
-        xorps   xmm1, xmm13
-
-        movdqu  xmm9, [arg2+16*2]
-        movdqu  xmm12, [arg2+16*3]
-        movdqa  xmm8, xmm2
-        movdqa  xmm13, xmm3
-        pclmulqdq       xmm2, xmm10, 0x10
-        pclmulqdq       xmm8, xmm10 , 0x1
-        pclmulqdq       xmm3, xmm10, 0x10
-        pclmulqdq       xmm13, xmm10 , 0x1
-        pxor    xmm2, xmm9
-        xorps   xmm2, xmm8
-        pxor    xmm3, xmm12
-        xorps   xmm3, xmm13
-
-        movdqu  xmm9, [arg2+16*4]
-        movdqu  xmm12, [arg2+16*5]
-        movdqa  xmm8, xmm4
-        movdqa  xmm13, xmm5
-        pclmulqdq       xmm4, xmm10, 0x10
-        pclmulqdq       xmm8, xmm10 , 0x1
-        pclmulqdq       xmm5, xmm10, 0x10
-        pclmulqdq       xmm13, xmm10 , 0x1
-        pxor    xmm4, xmm9
-        xorps   xmm4, xmm8
-        pxor    xmm5, xmm12
-        xorps   xmm5, xmm13
-
-        movdqu  xmm9, [arg2+16*6]
-        movdqu  xmm12, [arg2+16*7]
-        movdqa  xmm8, xmm6
-        movdqa  xmm13, xmm7
-        pclmulqdq       xmm6, xmm10, 0x10
-        pclmulqdq       xmm8, xmm10 , 0x1
-        pclmulqdq       xmm7, xmm10, 0x10
-        pclmulqdq       xmm13, xmm10 , 0x1
-        pxor    xmm6, xmm9
-        xorps   xmm6, xmm8
-        pxor    xmm7, xmm12
-        xorps   xmm7, xmm13
-
-        sub     arg3, 128
-
-        ; check if there is another 128B in the buffer to be able to fold
-        jge     _fold_128_B_loop
-        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-        add     arg2, 128
-        ; at this point, the buffer pointer is pointing at the last y Bytes of the buffer, where 0 <= y < 128
-        ; the 128B of folded data is in 8 of the xmm registers: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-
-
-        ; fold the 8 xmm registers to 1 xmm register with different constants
-
-        movdqa  xmm10, [rk9]
-        movdqa  xmm8, xmm0
-        pclmulqdq       xmm0, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        xorps   xmm7, xmm0
-
-        movdqa  xmm10, [rk11]
-        movdqa  xmm8, xmm1
-        pclmulqdq       xmm1, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        xorps   xmm7, xmm1
-
-        movdqa  xmm10, [rk13]
-        movdqa  xmm8, xmm2
-        pclmulqdq       xmm2, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        pxor    xmm7, xmm2
-
-        movdqa  xmm10, [rk15]
-        movdqa  xmm8, xmm3
-        pclmulqdq       xmm3, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        xorps   xmm7, xmm3
-
-        movdqa  xmm10, [rk17]
-        movdqa  xmm8, xmm4
-        pclmulqdq       xmm4, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        pxor    xmm7, xmm4
-
-        movdqa  xmm10, [rk19]
-        movdqa  xmm8, xmm5
-        pclmulqdq       xmm5, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        xorps   xmm7, xmm5
-
-        movdqa  xmm10, [rk1]
-        movdqa  xmm8, xmm6
-        pclmulqdq       xmm6, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        pxor    xmm7, xmm6
-
-
-        ; instead of 128, we add 128-16 to the loop counter to save 1 instruction from the loop
-        ; instead of a cmp instruction, we use the negative flag with the jl instruction
-        add     arg3, 128-16
-        jl      _final_reduction_for_128
-
-        ; now we have 16+y bytes left to reduce. 16 Bytes is in register xmm7 and the rest is in memory
-        ; we can fold 16 bytes at a time if y>=16
-        ; continue folding 16B at a time
-
-_16B_reduction_loop:
-        movdqa  xmm8, xmm7
-        pclmulqdq       xmm7, xmm10, 0x1
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        movdqu  xmm0, [arg2]
-        pxor    xmm7, xmm0
-        add     arg2, 16
-        sub     arg3, 16
-        ; instead of a cmp instruction, we utilize the flags with the jge instruction
-        ; equivalent of: cmp arg3, 16-16
-        ; check if there is any more 16B in the buffer to be able to fold
-        jge     _16B_reduction_loop
-
-        ;now we have 16+z bytes left to reduce, where 0<= z < 16.
-        ;first, we reduce the data in the xmm7 register
-
-
-_final_reduction_for_128:
-        add arg3, 16
-        je _128_done
-
-; here we are getting data that is less than 16 bytes.
-        ; since we know that there was data before the pointer, we can offset the input pointer before the actual point, to receive exactly 16 bytes.
-        ; after that the registers need to be adjusted.
-_get_last_two_xmms:
-
-
-        movdqa xmm2, xmm7
-        movdqu xmm1, [arg2 - 16 + arg3]
-
-        ; get rid of the extra data that was loaded before
-        ; load the shift constant
-        lea     rax, [pshufb_shf_table]
-        add     rax, arg3
-        movdqu  xmm0, [rax]
-
-
-        pshufb  xmm7, xmm0
-        pxor    xmm0, [mask3]
-        pshufb  xmm2, xmm0
-
-        pblendvb        xmm2, xmm1     ;xmm0 is implicit
-        ;;;;;;;;;;
-        movdqa  xmm8, xmm7
-        pclmulqdq       xmm7, xmm10, 0x1
-
-        pclmulqdq       xmm8, xmm10, 0x10
-        pxor    xmm7, xmm8
-        pxor    xmm7, xmm2
-
-_128_done:
-        ; compute crc of a 128-bit value
-        movdqa  xmm10, [rk5]
-        movdqa  xmm0, xmm7
-
-        ;64b fold
-        pclmulqdq       xmm7, xmm10, 0
-        psrldq  xmm0, 8
-        pxor    xmm7, xmm0
-
-        ;32b fold
-        movdqa  xmm0, xmm7
-        pslldq  xmm7, 4
-        pclmulqdq       xmm7, xmm10, 0x10
-
-        pxor    xmm7, xmm0
-
-
-        ;barrett reduction
-_barrett:
-        pand    xmm7, [mask2]
-        movdqa  xmm1, xmm7
-        movdqa  xmm2, xmm7
-        movdqa  xmm10, [rk7]
-
-        pclmulqdq       xmm7, xmm10, 0
-        pxor    xmm7, xmm2
-        pand    xmm7, [mask]
-        movdqa  xmm2, xmm7
-        pclmulqdq       xmm7, xmm10, 0x10
-        pxor    xmm7, xmm2
-        pxor    xmm7, xmm1
-        pextrd  eax, xmm7, 2
-
-_cleanup:
-        ; return c ^ 0xffffffffL;
-        not     eax
-
-
-%ifidn __OUTPUT_FORMAT__, win64
-        movdqa  xmm6, [rsp + XMM_SAVE + 16*0]
-        movdqa  xmm7, [rsp + XMM_SAVE + 16*1]
-        movdqa  xmm8, [rsp + XMM_SAVE + 16*2]
-        movdqa  xmm9, [rsp + XMM_SAVE + 16*3]
-        movdqa  xmm10, [rsp + XMM_SAVE + 16*4]
-        movdqa  xmm11, [rsp + XMM_SAVE + 16*5]
-        movdqa  xmm12, [rsp + XMM_SAVE + 16*6]
-        movdqa  xmm13, [rsp + XMM_SAVE + 16*7]
-%endif
-        add     rsp, VARIABLE_OFFSET
-        ret
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-align 16
-_less_than_256:
-
-        ; check if there is enough buffer to be able to fold 16B at a time
-        cmp     arg3, 32
-        jl      _less_than_32
-
-        ; if there is, load the constants
-        movdqa  xmm10, [rk1]    ; rk1 and rk2 in xmm10
-
-        movd    xmm0, arg1_low32       ; get the initial crc value
-        movdqu  xmm7, [arg2]            ; load the plaintext
-        pxor    xmm7, xmm0
-
-        ; update the buffer pointer
-        add     arg2, 16
-
-        ; update the counter. subtract 32 instead of 16 to save one instruction from the loop
-        sub     arg3, 32
-
-        jmp     _16B_reduction_loop
-
-
-align 16
-_less_than_32:
-        ; mov initial crc to the return value. this is necessary for zero-length buffers.
-        mov     eax, arg1_low32
-        test    arg3, arg3
-        je      _cleanup
-
-        movd    xmm0, arg1_low32        ; get the initial crc value
-
-        cmp     arg3, 16
-        je      _exact_16_left
-        jl      _less_than_16_left
-
-        movdqu  xmm7, [arg2]            ; load the plaintext
-        pxor    xmm7, xmm0              ; xor the initial crc value
-        add     arg2, 16
-        sub     arg3, 16
-        movdqa  xmm10, [rk1]    ; rk1 and rk2 in xmm10
-        jmp     _get_last_two_xmms
-
-
-align 16
-_less_than_16_left:
-        ; use stack space to load data less than 16 bytes, zero-out the 16B in memory first.
-
-        pxor    xmm1, xmm1
-        mov     r11, rsp
-        movdqa  [r11], xmm1
-
-        cmp     arg3, 4
-        jl      _only_less_than_4
-
-        ;       backup the counter value
-        mov     r9, arg3
-        cmp     arg3, 8
-        jl      _less_than_8_left
-
-        ; load 8 Bytes
-        mov     rax, [arg2]
-        mov     [r11], rax
-        add     r11, 8
-        sub     arg3, 8
-        add     arg2, 8
-_less_than_8_left:
-
-        cmp     arg3, 4
-        jl      _less_than_4_left
-
-        ; load 4 Bytes
-        mov     eax, [arg2]
-        mov     [r11], eax
-        add     r11, 4
-        sub     arg3, 4
-        add     arg2, 4
-_less_than_4_left:
-
-        cmp     arg3, 2
-        jl      _less_than_2_left
-
-        ; load 2 Bytes
-        mov     ax, [arg2]
-        mov     [r11], ax
-        add     r11, 2
-        sub     arg3, 2
-        add     arg2, 2
-_less_than_2_left:
-        cmp     arg3, 1
-        jl      _zero_left
-
-        ; load 1 Byte
-        mov     al, [arg2]
-        mov     [r11], al
-
-_zero_left:
-        movdqa  xmm7, [rsp]
-        pxor    xmm7, xmm0      ; xor the initial crc value
-
-        lea rax,[pshufb_shf_table]
-        movdqu  xmm0, [rax + r9]
-        pshufb  xmm7,xmm0
-
-
-
-        jmp     _128_done
-
-align 16
-_exact_16_left:
-        movdqu  xmm7, [arg2]
-        pxor    xmm7, xmm0      ; xor the initial crc value
-
-        jmp     _128_done
-
-_only_less_than_4:
-        cmp     arg3, 3
-        jl      _only_less_than_3
-
-        ; load 3 Bytes
-        mov     al, [arg2]
-        mov     [r11], al
-
-        mov     al, [arg2+1]
-        mov     [r11+1], al
-
-        mov     al, [arg2+2]
-        mov     [r11+2], al
-
-        movdqa  xmm7, [rsp]
-        pxor    xmm7, xmm0      ; xor the initial crc value
-
-        pslldq  xmm7, 5
-
-        jmp     _barrett
-_only_less_than_3:
-        cmp     arg3, 2
-        jl      _only_less_than_2
-
-        ; load 2 Bytes
-        mov     al, [arg2]
-        mov     [r11], al
-
-        mov     al, [arg2+1]
-        mov     [r11+1], al
-
-        movdqa  xmm7, [rsp]
-        pxor    xmm7, xmm0      ; xor the initial crc value
-
-        pslldq  xmm7, 6
-
-        jmp     _barrett
-_only_less_than_2:
-
-        ; load 1 Byte
-        mov     al, [arg2]
-        mov     [r11], al
-
-        movdqa  xmm7, [rsp]
-        pxor    xmm7, xmm0      ; xor the initial crc value
-
-        pslldq  xmm7, 7
-
-        jmp     _barrett
-
-section .data
-
-; precomputed constants
-align 16
-rk1 :
-DQ 0x00000000ccaa009e
-rk2 :
-DQ 0x00000001751997d0
-rk3 :
-DQ 0x000000014a7fe880
-rk4 :
-DQ 0x00000001e88ef372
-rk5 :
-DQ 0x00000000ccaa009e
-rk6 :
-DQ 0x0000000163cd6124
-rk7 :
-DQ 0x00000001f7011640
-rk8 :
-DQ 0x00000001db710640
-rk9 :
-DQ 0x00000001d7cfc6ac
-rk10 :
-DQ 0x00000001ea89367e
-rk11 :
-DQ 0x000000018cb44e58
-rk12 :
-DQ 0x00000000df068dc2
-rk13 :
-DQ 0x00000000ae0b5394
-rk14 :
-DQ 0x00000001c7569e54
-rk15 :
-DQ 0x00000001c6e41596
-rk16 :
-DQ 0x0000000154442bd4
-rk17 :
-DQ 0x0000000174359406
-rk18 :
-DQ 0x000000003db1ecdc
-rk19 :
-DQ 0x000000015a546366
-rk20 :
-DQ 0x00000000f1da05aa
-
-
-pshufb_shf_table:
-; use these values for shift constants for the pshufb instruction
-; different alignments result in values as shown:
-;       dq 0x8887868584838281, 0x008f8e8d8c8b8a89 ; shl 15 (16-1) / shr1
-;       dq 0x8988878685848382, 0x01008f8e8d8c8b8a ; shl 14 (16-3) / shr2
-;       dq 0x8a89888786858483, 0x0201008f8e8d8c8b ; shl 13 (16-4) / shr3
-;       dq 0x8b8a898887868584, 0x030201008f8e8d8c ; shl 12 (16-4) / shr4
-;       dq 0x8c8b8a8988878685, 0x04030201008f8e8d ; shl 11 (16-5) / shr5
-;       dq 0x8d8c8b8a89888786, 0x0504030201008f8e ; shl 10 (16-6) / shr6
-;       dq 0x8e8d8c8b8a898887, 0x060504030201008f ; shl 9  (16-7) / shr7
-;       dq 0x8f8e8d8c8b8a8988, 0x0706050403020100 ; shl 8  (16-8) / shr8
-;       dq 0x008f8e8d8c8b8a89, 0x0807060504030201 ; shl 7  (16-9) / shr9
-;       dq 0x01008f8e8d8c8b8a, 0x0908070605040302 ; shl 6  (16-10) / shr10
-;       dq 0x0201008f8e8d8c8b, 0x0a09080706050403 ; shl 5  (16-11) / shr11
-;       dq 0x030201008f8e8d8c, 0x0b0a090807060504 ; shl 4  (16-12) / shr12
-;       dq 0x04030201008f8e8d, 0x0c0b0a0908070605 ; shl 3  (16-13) / shr13
-;       dq 0x0504030201008f8e, 0x0d0c0b0a09080706 ; shl 2  (16-14) / shr14
-;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
-dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
-dq 0x0706050403020100, 0x000e0d0c0b0a0908
-
-
-mask:
-dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
-mask2:
-dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
-mask3:
-dq     0x8080808080808080, 0x8080808080808080
diff --git a/ceph/src/isa-l/igzip/crc32_gzip_base.c b/ceph/src/isa-l/igzip/crc32_gzip_base.c
deleted file mode 100644 (file)
index bf187be..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdint.h>
-
-uint32_t crc32_table_gzip_base[256] = {
-       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-       0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-       0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-       0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-       0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-       0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-       0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-       0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-       0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-       0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-       0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-       0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-       0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-       0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-       0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-       0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-       0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-       0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-       0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-       0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-       0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-       0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-       0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-       0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-       0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-       0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-       0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-       0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-       0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-       0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-       0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-       0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-       0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-       0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-       0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-       0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-       0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-       0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-       0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-       0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-       0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-       0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-       0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-       0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-       0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-       0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-       0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-       0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
-uint32_t crc32_gzip_base(uint32_t crc, uint8_t * start, uint32_t length)
-{
-       uint8_t *end = start + length;
-       crc = ~crc;
-       while (start < end)
-               crc = (crc >> 8) ^ crc32_table_gzip_base[(crc & 0xff) ^ *start++];
-       return ~crc;
-}
diff --git a/ceph/src/isa-l/igzip/crc_inflate.h b/ceph/src/isa-l/igzip/crc_inflate.h
deleted file mode 100644 (file)
index 3683114..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef INFLATE_CRC_TABLE
-#define INFLATE_CRC_TABLE
-
-uint32_t inflate_crc_table[256] = {
-       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-       0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-       0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-       0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-       0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-       0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-       0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-       0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-       0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-       0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-       0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-       0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-       0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-       0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-       0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-       0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-       0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-       0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-       0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-       0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-       0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-       0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-       0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-       0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-       0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-       0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-       0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-       0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-       0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-       0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-       0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-       0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-       0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-       0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-       0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-       0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-       0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-       0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-       0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-       0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-       0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-       0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-       0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-       0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-       0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-       0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-       0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-       0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
-
-
-uint32_t find_crc(uint8_t * start, uint32_t length)
-{
-       uint32_t crc = ~0;
-       uint8_t *end = start + length;
-
-       while (start < end)
-               crc = (crc >> 8) ^ inflate_crc_table[(crc & 0x000000FF) ^ *start++];
-       return ~crc;
-}
-
-#endif
index 925686fda7987504dd11ea6bdff409d41e857420..233e264d352e798a68039c56375f26ae2c36a736 100644 (file)
@@ -96,19 +96,58 @@ FIELD       _lit_len_table, 513 * HUFF_CODE_SIZE,   HUFF_CODE_SIZE
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+START_FIELDS   ;; hash8k_buf
+
+;;      name           size    align
+FIELD  _hash8k_table,  2 * IGZIP_HASH8K_HASH_SIZE,     2
+
+%assign _hash_buf1_size        _FIELD_OFFSET
+%assign _hash_buf1_align       _STRUCT_ALIGN
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+START_FIELDS   ;; hash_map_buf
+
+;;      name           size    align
+FIELD  _hash_table,    2 * IGZIP_HASH_MAP_HASH_SIZE,   2
+FIELD  _matches_next,  8,      8
+FIELD  _matches_end,   8,      8
+FIELD  _matches,       4*4*1024,       4
+FIELD  _overflow,      4*LA,   4
+
+%assign _hash_map_buf_size     _FIELD_OFFSET
+%assign _hash_map_buf_align    _STRUCT_ALIGN
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 %define DEF_MAX_HDR_SIZE 328
-START_FIELDS   ;; level_2_buf
+START_FIELDS   ;; level_buf
 
 ;;      name           size    align
 FIELD  _encode_tables,         _hufftables_icf_size,   _hufftables_icf_align
-FIELD  _deflate_hdr_buf_used,  8,      8
-FIELD  _deflate_hdr_buf,       DEF_MAX_HDR_SIZE,       1
+FIELD  _hist,          _isal_mod_hist_size, _isal_mod_hist_align
+FIELD  _deflate_hdr_count,     4,      4
+FIELD  _deflate_hdr_extra_bits,4,      4
+FIELD  _deflate_hdr,           DEF_MAX_HDR_SIZE,       1
 FIELD  _icf_buf_next,          8,      8
 FIELD  _icf_buf_avail_out,     8,      8
-FIELD  _icf_buf_start,         0,      0
+FIELD  _icf_buf_start,         8,      8
+FIELD  _lvl_extra,             _hash_map_buf_size,     _hash_map_buf_align
 
-%assign _level_2_buf_size      _FIELD_OFFSET
-%assign _level_2_buf_align     _STRUCT_ALIGN
+%assign _level_buf_base_size   _FIELD_OFFSET
+%assign _level_buf_base_align  _STRUCT_ALIGN
+
+_hash8k_hash_table     equ     _lvl_extra + _hash8k_table
+_hash_map_hash_table   equ     _lvl_extra + _hash_table
+_hash_map_matches_next equ     _lvl_extra + _matches_next
+_hash_map_matches_end  equ     _lvl_extra + _matches_end
+_hash_map_matches      equ     _lvl_extra + _matches
+_hist_lit_len          equ     _hist+_ll_hist
+_hist_dist             equ     _hist+_d_hist
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -117,23 +156,27 @@ FIELD     _icf_buf_start,         0,      0
 START_FIELDS   ;; isal_zstate
 
 ;;      name           size    align
-FIELD  _b_bytes_valid, 4,      4
-FIELD  _b_bytes_processed,     4,      4
-FIELD  _file_start,    8,      8
-FIELD  _crc,           4,      4
-FIELD  _bitbuf,        _BitBuf2_size,  _BitBuf2_align
+FIELD  _total_in_start,4,      4
+FIELD  _block_next,    4,      4
+FIELD  _block_end,     4,      4
+FIELD  _dist_mask,     4,      4
+FIELD  _hash_mask,     4,      4
 FIELD  _state,         4,      4
+FIELD  _bitbuf,        _BitBuf2_size,  _BitBuf2_align
+FIELD  _crc,           4,      4
+FIELD  _has_wrap_hdr,  1,      1
+FIELD  _has_eob_hdr,   1,      1
+FIELD  _has_eob,       1,      1
+FIELD  _has_hist,      1,      1
+FIELD  _has_level_buf_init,    2,      2
 FIELD  _count,         4,      4
 FIELD   _tmp_out_buff, 16,     1
 FIELD   _tmp_out_start,        4,      4
 FIELD  _tmp_out_end,   4,      4
-FIELD  _has_eob,               4,      4
-FIELD  _has_eob_hdr,   4,      4
-FIELD  _has_hist,      4,      4
-FIELD  _hist,          _isal_mod_hist_size, _isal_mod_hist_align
-FIELD  _buffer,        BSIZE,  32
-FIELD  _head,          IGZIP_HASH_SIZE*2,      16
-
+FIELD  _b_bytes_valid, 4,      4
+FIELD  _b_bytes_processed,     4,      4
+FIELD  _buffer,        BSIZE,  1
+FIELD  _head,          IGZIP_LVL0_HASH_SIZE*2, 2
 %assign _isal_zstate_size      _FIELD_OFFSET
 %assign _isal_zstate_align     _STRUCT_ALIGN
 
@@ -143,8 +186,6 @@ _bitbuf_m_out_buf   equ     _bitbuf+_m_out_buf
 _bitbuf_m_out_end      equ     _bitbuf+_m_out_end
 _bitbuf_m_out_start    equ     _bitbuf+_m_out_start
 
-_hist_lit_len          equ     _hist+_ll_hist
-_hist_dist             equ     _hist+_d_hist
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -162,27 +203,34 @@ FIELD     _hufftables,    8,      8
 FIELD  _level,         4,      4
 FIELD  _level_buf_size,        4,      4
 FIELD  _level_buf,     8,      8
-FIELD  _end_of_stream, 4,      4
-FIELD   _flush,                4,      4
-FIELD  _gzip_flag,     4,      4
+FIELD  _end_of_stream, 2,      2
+FIELD   _flush,                2,      2
+FIELD  _gzip_flag,     2,      2
+FIELD  _hist_bits,     2,      2
 FIELD  _internal_state,        _isal_zstate_size,      _isal_zstate_align
 
 %assign _isal_zstream_size     _FIELD_OFFSET
 %assign _isal_zstream_align    _STRUCT_ALIGN
 
+_internal_state_total_in_start         equ     _internal_state+_total_in_start
+_internal_state_block_next             equ     _internal_state+_block_next
+_internal_state_block_end              equ     _internal_state+_block_end
 _internal_state_b_bytes_valid            equ   _internal_state+_b_bytes_valid
 _internal_state_b_bytes_processed       equ   _internal_state+_b_bytes_processed
-_internal_state_file_start               equ   _internal_state+_file_start
 _internal_state_crc                      equ   _internal_state+_crc
+_internal_state_dist_mask                equ   _internal_state+_dist_mask
+_internal_state_hash_mask                equ   _internal_state+_hash_mask
 _internal_state_bitbuf                   equ   _internal_state+_bitbuf
 _internal_state_state                    equ   _internal_state+_state
 _internal_state_count                    equ   _internal_state+_count
 _internal_state_tmp_out_buff             equ   _internal_state+_tmp_out_buff
 _internal_state_tmp_out_start            equ   _internal_state+_tmp_out_start
 _internal_state_tmp_out_end              equ   _internal_state+_tmp_out_end
+_internal_state_has_wrap_hdr             equ   _internal_state+_has_wrap_hdr
 _internal_state_has_eob                  equ   _internal_state+_has_eob
 _internal_state_has_eob_hdr              equ   _internal_state+_has_eob_hdr
 _internal_state_has_hist                 equ   _internal_state+_has_hist
+_internal_state_has_level_buf_init       equ   _internal_state+_has_level_buf_init
 _internal_state_buffer                   equ   _internal_state+_buffer
 _internal_state_head                     equ   _internal_state+_head
 _internal_state_bitbuf_m_bits            equ   _internal_state+_bitbuf_m_bits
@@ -190,8 +238,6 @@ _internal_state_bitbuf_m_bit_count  equ   _internal_state+_bitbuf_m_bit_count
 _internal_state_bitbuf_m_out_buf         equ   _internal_state+_bitbuf_m_out_buf
 _internal_state_bitbuf_m_out_end         equ   _internal_state+_bitbuf_m_out_end
 _internal_state_bitbuf_m_out_start     equ   _internal_state+_bitbuf_m_out_start
-_internal_state_hist_lit_len           equ     _internal_state+_hist_lit_len
-_internal_state_hist_dist              equ     _internal_state+_hist_dist
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -203,7 +249,9 @@ ZSTATE_CREATE_HDR           equ     (ZSTATE_HDR + 1)
 ZSTATE_BODY                    equ     (ZSTATE_CREATE_HDR + 1)
 ZSTATE_FLUSH_READ_BUFFER       equ     (ZSTATE_BODY + 1)
 ZSTATE_FLUSH_ICF_BUFFER                equ     (ZSTATE_FLUSH_READ_BUFFER + 1)
-ZSTATE_SYNC_FLUSH              equ     (ZSTATE_FLUSH_ICF_BUFFER + 1)
+ZSTATE_TYPE0_HDR               equ     (ZSTATE_FLUSH_ICF_BUFFER + 1)
+ZSTATE_TYPE0_BODY              equ     (ZSTATE_TYPE0_HDR + 1)
+ZSTATE_SYNC_FLUSH              equ     (ZSTATE_TYPE0_BODY + 1)
 ZSTATE_FLUSH_WRITE_BUFFER      equ     (ZSTATE_SYNC_FLUSH + 1)
 ZSTATE_TRL                     equ     (ZSTATE_FLUSH_WRITE_BUFFER + 1)
 
@@ -218,4 +266,10 @@ _STORED_BLK                equ 0
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+IGZIP_NO_HIST          equ 0
+IGZIP_HIST             equ 1
+IGZIP_DICT_HIST                equ 2
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/ceph/src/isa-l/igzip/detect_repeated_char.asm b/ceph/src/isa-l/igzip/detect_repeated_char.asm
deleted file mode 100644 (file)
index 2f6c07a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-;
-;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions
-;  are met:
-;    * Redistributions of source code must retain the above copyright
-;      notice, this list of conditions and the following disclaimer.
-;    * Redistributions in binary form must reproduce the above copyright
-;      notice, this list of conditions and the following disclaimer in
-;      the documentation and/or other materials provided with the
-;      distribution.
-;    * Neither the name of Intel Corporation nor the names of its
-;      contributors may be used to endorse or promote products derived
-;      from this software without specific prior written permission.
-;
-;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-%include "reg_sizes.asm"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; detect_repeated_char buf, size
-%ifidn __OUTPUT_FORMAT__, elf64
- %define buf           rdi
- %define size          rsi
-%elifidn __OUTPUT_FORMAT__, win64
- %define buf           rcx
- %define size          rdx
-%endif ; output formats
-
-%define tmp           r10
-
-global detect_repeated_char
-detect_repeated_char:
-
-;; replicate the 1st byte to 8 bytes
-       xor     tmp, tmp
-       xor     rax, rax
-
-       mov     al, [buf]
-       mov     ah, al
-       mov     tmp %+ w, ax
-       shl     tmp, 16
-       or      eax, tmp %+ d
-       mov     tmp %+ d, eax
-       shl     tmp, 32
-       or      rax, tmp
-
-;; detect the 8K input
-       lea     tmp, [buf + size]
-_loop:
-       cmp     rax, [buf]
-       jne     _fail
-       add     buf, 8
-       cmp     buf, tmp
-       jb      _loop
-       shr     rax, 56
-       jmp     _end
-
-_fail:
-       mov     rax, -1
-
-_end:
-       ret
-
-%undef buf
-%undef size
-%undef tmp
index 633b8ce675a6d3a7ca1c818160966f0c2a40ed97..d26d1c94233c17952009eb1da1578f98345257f0 100644 (file)
@@ -4,11 +4,13 @@
 #include <memory.h>
 #include <assert.h>
 
+#if __x86_64__  || __i386__ || _M_X64 || _M_IX86
 #ifdef _MSC_VER
 # include <intrin.h>
 #else
 # include <x86intrin.h>
 #endif
+#endif //__x86_64__  || __i386__ || _M_X64 || _M_IX86
 
 #include "encode_df.h"
 #include "bitbuf2.h"
@@ -21,7 +23,7 @@ struct deflate_icf *encode_deflate_icf_base(struct deflate_icf *next_in,
 
        while (next_in < end_in && !is_full(bb)) {
                lsym = hufftables->lit_len_table[next_in->lit_len];
-               dsym = hufftables->dist_table[next_in->lit_dist];
+               dsym = hufftables->dist_lit_table[next_in->lit_dist];
 
                // insert ll code, dist_code, and extra_bits
                write_bits_unsafe(bb, lsym.code_and_extra, lsym.length);
index 40b785e36a95e11dac94a6b27854c8f4d78d2e5f..f3e4f754d5609e98fd6fc37844e72a2c585c851a 100644 (file)
@@ -2,18 +2,27 @@
 #define ENCODE_DF_H
 
 #include <stdint.h>
+#include "igzip_lib.h"
 #include "huff_codes.h"
 
 /* Deflate Intermediate Compression Format */
 #define LIT_LEN_BIT_COUNT 10
+#define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1)
 #define DIST_LIT_BIT_COUNT 9
+#define DIST_LIT_MASK ((1 << DIST_LIT_BIT_COUNT) - 1)
 #define ICF_DIST_OFFSET LIT_LEN_BIT_COUNT
 #define NULL_DIST_SYM 30
 
+#define LEN_START ISAL_DEF_LIT_SYMBOLS
+#define LEN_OFFSET (LEN_START - ISAL_DEF_MIN_MATCH)
+#define LEN_MAX (LEN_OFFSET + ISAL_DEF_MAX_MATCH)
+#define LIT_START (NULL_DIST_SYM + 1)
+#define ICF_CODE_LEN 32
+
 struct deflate_icf {
        uint32_t lit_len:LIT_LEN_BIT_COUNT;
        uint32_t lit_dist:DIST_LIT_BIT_COUNT;
-       uint32_t dist_extra:32 - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
+       uint32_t dist_extra:ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
 };
 
 struct deflate_icf *encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in,
index dbf01be549a961733a59c901241015da1b89ed15..81287ccfec882aecda00c441eed8d107ad04de3c 100644 (file)
@@ -1,4 +1,576 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "stdmac.asm"
+
 %define ARCH 04
 %define USE_HSWNI
 
-%include "encode_df_asm.asm"
+; tree entry is 4 bytes:
+; lit/len tree (513 entries)
+; |  3  |  2   |  1 | 0 |
+; | len |       code    |
+;
+; dist tree
+; |  3  |  2   |  1 | 0 |
+; |eblen:codlen|   code |
+
+; token format:
+; DIST_OFFSET:0 : lit/len
+; 31:(DIST_OFFSET + 5) : dist Extra Bits
+; (DIST_OFFSET + 5):DIST_OFFSET : dist code
+; lit/len: 0-256 (literal)
+;          257-512 (dist + 254)
+
+; returns final token pointer
+; equal to token_end if successful
+;    uint32_t* encode_df(uint32_t *token_start, uint32_t *token_end,
+;                            BitBuf *out_buf, uint32_t *trees);
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define arg4 r9
+%define sym            rsi
+%define dsym           rdi
+%define hufftables     r9
+%define ptr            r11
+%else
+; Linux
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define arg4 rcx
+%define sym            r9
+%define dsym           r8
+%define hufftables     r11
+%define ptr            rdi
+%endif
+
+%define in_buf_end     arg2
+%define bitbuf         arg3
+%define out_buf                bitbuf
+; bit_count is rcx
+%define bits           rax
+%define data           r12
+%define tmp            rbx
+%define len            dsym
+%define tmp2           r10
+%define end_ptr                rbp
+
+%define LIT_MASK       ((0x1 << LIT_LEN_BIT_COUNT) - 1)
+%define DIST_MASK      ((0x1 << DIST_LIT_BIT_COUNT) - 1)
+
+%define codes1         ymm1
+%define code_lens1     ymm2
+%define codes2         ymm3
+%define code_lens2     ymm4
+%define codes3         ymm5
+%define        code_lens3      ymm6
+%define codes4         ymm7
+%define syms           ymm7
+
+%define code_lens4     ymm8
+%define dsyms          ymm8
+
+%define ytmp           ymm9
+%define codes_lookup1  ymm10
+%define        codes_lookup2   ymm11
+%define datas          ymm12
+%define ybits          ymm13
+%define ybits_count    ymm14
+%define yoffset_mask   ymm15
+
+%define VECTOR_SIZE 0x20
+%define VECTOR_LOOP_PROCESSED (2 * VECTOR_SIZE)
+%define VECTOR_SLOP 0x20 - 8
+
+gpr_save_mem_offset    equ     0
+gpr_save_mem_size      equ     8 * 6
+xmm_save_mem_offset    equ     gpr_save_mem_offset + gpr_save_mem_size
+xmm_save_mem_size      equ     10 * 16
+bitbuf_mem_offset      equ     xmm_save_mem_offset + xmm_save_mem_size
+bitbuf_mem_size                equ     8
+stack_size             equ     gpr_save_mem_size + xmm_save_mem_size + bitbuf_mem_size
+
+
+%macro FUNC_SAVE 0
+       sub     rsp, stack_size
+       mov     [rsp + gpr_save_mem_offset + 0*8], rbx
+       mov     [rsp + gpr_save_mem_offset + 1*8], rbp
+       mov     [rsp + gpr_save_mem_offset + 2*8], r12
+
+%ifidn __OUTPUT_FORMAT__, win64
+       mov     [rsp + gpr_save_mem_offset + 3*8], rsi
+       mov     [rsp + gpr_save_mem_offset + 4*8], rdi
+
+       MOVDQU  [rsp + xmm_save_mem_offset + 0*8], xmm6
+       MOVDQU  [rsp + xmm_save_mem_offset + 1*8], xmm7
+       MOVDQU  [rsp + xmm_save_mem_offset + 2*8], xmm8
+       MOVDQU  [rsp + xmm_save_mem_offset + 3*8], xmm9
+       MOVDQU  [rsp + xmm_save_mem_offset + 4*8], xmm10
+       MOVDQU  [rsp + xmm_save_mem_offset + 5*8], xmm11
+       MOVDQU  [rsp + xmm_save_mem_offset + 6*8], xmm12
+       MOVDQU  [rsp + xmm_save_mem_offset + 7*8], xmm13
+       MOVDQU  [rsp + xmm_save_mem_offset + 8*8], xmm14
+       MOVDQU  [rsp + xmm_save_mem_offset + 9*8], xmm15
+%endif
+
+%endm
+
+%macro FUNC_RESTORE 0
+       mov     rbx, [rsp + gpr_save_mem_offset + 0*8]
+       mov     rbp, [rsp + gpr_save_mem_offset + 1*8]
+       mov     r12, [rsp + gpr_save_mem_offset + 2*8]
+
+%ifidn __OUTPUT_FORMAT__, win64
+       mov     rsi, [rsp + gpr_save_mem_offset + 3*8]
+       mov     rdi, [rsp + gpr_save_mem_offset + 4*8]
+
+       MOVDQU  xmm6, [rsp + xmm_save_mem_offset + 0*8]
+       MOVDQU  xmm7, [rsp + xmm_save_mem_offset + 1*8]
+       MOVDQU  xmm8, [rsp + xmm_save_mem_offset + 2*8]
+       MOVDQU  xmm9, [rsp + xmm_save_mem_offset + 3*8]
+       MOVDQU  xmm10, [rsp + xmm_save_mem_offset + 4*8]
+       MOVDQU  xmm11, [rsp + xmm_save_mem_offset + 5*8]
+       MOVDQU  xmm12, [rsp + xmm_save_mem_offset + 6*8]
+       MOVDQU  xmm13, [rsp + xmm_save_mem_offset + 7*8]
+       MOVDQU  xmm14, [rsp + xmm_save_mem_offset + 8*8]
+       MOVDQU  xmm15, [rsp + xmm_save_mem_offset + 9*8]
+%endif
+       add     rsp, stack_size
+
+%endmacro
+
+global encode_deflate_icf_ %+ ARCH
+encode_deflate_icf_ %+ ARCH:
+       FUNC_SAVE
+
+%ifnidn ptr, arg1
+       mov     ptr, arg1
+%endif
+%ifnidn hufftables, arg4
+       mov     hufftables, arg4
+%endif
+
+       mov     [rsp + bitbuf_mem_offset], bitbuf
+       mov     bits, [bitbuf + _m_bits]
+       mov     ecx, [bitbuf + _m_bit_count]
+       mov     end_ptr, [bitbuf + _m_out_end]
+       mov     out_buf, [bitbuf + _m_out_buf]  ; clobbers bitbuf
+
+       sub     end_ptr, VECTOR_SLOP
+       sub     in_buf_end, VECTOR_LOOP_PROCESSED
+       cmp     ptr, in_buf_end
+       jge     .finish
+
+       vpcmpeqq        ytmp, ytmp, ytmp
+       vmovdqu datas, [ptr]
+       vpand   syms, datas, [lit_mask]
+       vpgatherdd codes_lookup1, [hufftables + _lit_len_table + 4 * syms], ytmp
+
+       vpcmpeqq        ytmp, ytmp, ytmp
+       vpsrld  dsyms, datas, DIST_OFFSET
+       vpand   dsyms, dsyms, [dist_mask]
+       vpgatherdd codes_lookup2, [hufftables + _dist_table + 4 * dsyms], ytmp
+
+       vmovq   ybits %+ x, bits
+       vmovq   ybits_count %+ x, rcx
+       vmovdqa yoffset_mask, [offset_mask]
+
+.main_loop:
+       ;;  Sets codes1 to contain lit/len codes andcode_lens1 the corresponding lengths
+       vpsrld  code_lens1, codes_lookup1, 24
+       vpand   codes1, codes_lookup1, [lit_icr_mask]
+
+       ;; Sets codes2 to contain dist codes, code_lens2 the corresponding lengths,
+       ;; and code_lens3 the extra bit counts
+       vpblendw        codes2, ybits, codes_lookup2, 0x55 ;Bits 8 and above of ybits are 0
+       vpsrld  code_lens2, codes_lookup2, 24
+       vpsrld  code_lens3, codes_lookup2, 16
+       vpand   code_lens3, [eb_icr_mask]
+
+       ;; Set codes3 to contain the extra bits
+       vpsrld  codes3, datas, EXTRA_BITS_OFFSET
+
+       cmp     out_buf, end_ptr
+       ja      .main_loop_exit
+
+       ;; Start code lookups for next iteration
+       add     ptr, VECTOR_SIZE
+       vpcmpeqq        ytmp, ytmp, ytmp
+       vmovdqu datas, [ptr]
+       vpand   syms, datas, [lit_mask]
+       vpgatherdd codes_lookup1, [hufftables + _lit_len_table + 4 * syms], ytmp
+
+       vpcmpeqq        ytmp, ytmp, ytmp
+       vpsrld  dsyms, datas, DIST_OFFSET
+       vpand   dsyms, dsyms, [dist_mask]
+       vpgatherdd codes_lookup2, [hufftables + _dist_table + 4 * dsyms], ytmp
+
+       ;; Merge dist code with extra bits
+       vpsllvd codes3, codes3, code_lens2
+       vpxor   codes2, codes2, codes3
+       vpaddd  code_lens2, code_lens2, code_lens3
+
+       ;; Check for long codes
+       vpaddd  code_lens3, code_lens1, code_lens2
+       vpcmpgtd        ytmp, code_lens3, [max_write_d]
+       vptest  ytmp, ytmp
+       jnz     .long_codes
+
+       ;; Merge dist and len codes
+       vpsllvd codes2, codes2, code_lens1
+       vpxor   codes1, codes1, codes2
+
+       ;; Split buffer data into qwords, ytmp is 0 after last branch
+       vpblendd codes3, ytmp, codes1, 0x55
+       vpsrlq  codes1, codes1, 32
+       vpsrlq  code_lens1, code_lens3, 32
+       vpblendd        code_lens3, ytmp, code_lens3, 0x55
+
+       ;; Merge bitbuf bits
+       vpsllvq codes3, codes3, ybits_count
+       vpxor   codes3, codes3, ybits
+       vpaddq  code_lens3, code_lens3, ybits_count
+
+       ;; Merge two symbols into qwords
+       vpsllvq codes1, codes1, code_lens3
+       vpxor codes1, codes1, codes3
+       vpaddq code_lens1, code_lens1, code_lens3
+
+       ;; Split buffer data into dqwords, ytmp is 0 after last branch
+       vpblendd        codes2, ytmp, codes1, 0x33
+       vpblendd        code_lens2, ytmp, code_lens1, 0x33
+       vpsrldq codes1, 8
+       vpsrldq code_lens1, 8
+
+       ;; Bit align dqwords
+       vpaddq  code_lens1, code_lens1, code_lens2
+       vpand   ybits_count, code_lens1, yoffset_mask ;Extra bits
+       vpermq  ybits_count, ybits_count, 0xcf
+       vpaddq  code_lens2, ybits_count
+       vpsllvq codes2, codes2, ybits_count
+
+       ;; Merge two qwords into dqwords
+       vmovdqa ytmp, [q_64]
+       vpsubq  code_lens3, ytmp, code_lens2
+       vpsrlvq codes3, codes1, code_lens3
+       vpslldq codes3, codes3, 8
+
+       vpsllvq codes1, codes1, code_lens2
+
+       vpxor   codes1, codes1, codes3
+       vpxor   codes1, codes1, codes2
+
+       vmovq   tmp, code_lens1 %+ x    ;Number of bytes
+       shr     tmp, 3
+
+       ;; Extract last bytes
+       vpaddq  code_lens2, code_lens1, ybits_count
+       vpsrlq  code_lens2, code_lens2, 3
+       vpshufb codes2, codes1, code_lens2
+       vpand   codes2, codes2, [bytes_mask]
+       vextracti128    ybits %+ x, codes2, 1
+
+       ;; Check for short codes
+       vptest code_lens2, [min_write_mask]
+       jz      .short_codes
+.short_codes_next:
+
+       vpermq  codes2, codes2, 0x45
+       vpor    codes1, codes1, codes2
+
+       ;; bit shift upper dqword combined bits to line up with lower dqword
+       vextracti128    code_lens2 %+ x, code_lens1, 1
+
+       ; Write out lower dqword of combined bits
+       vmovdqu [out_buf], codes1
+       vpaddq  code_lens1, code_lens1, code_lens2
+
+       vmovq   tmp2, code_lens1 %+ x   ;Number of bytes
+       shr     tmp2, 3
+       vpand   ybits_count, code_lens1, yoffset_mask ;Extra bits
+
+       ; Write out upper dqword of combined bits
+       vextracti128    [out_buf + tmp], codes1, 1
+       add     out_buf, tmp2
+
+       cmp     ptr, in_buf_end
+       jbe     .main_loop
+
+.main_loop_exit:
+       vmovq   rcx, ybits_count %+ x
+       vmovq   bits, ybits %+ x
+       jmp     .finish
+
+.short_codes:
+       ;; Merge last bytes when the second dqword contains less than a byte
+       vpor ybits %+ x, codes2 %+ x
+       jmp .short_codes_next
+
+.long_codes:
+       add     end_ptr, VECTOR_SLOP
+       sub     ptr, VECTOR_SIZE
+
+       vpxor ytmp, ytmp, ytmp
+       vpblendd codes3, ytmp, codes1, 0x55
+       vpblendd code_lens3, ytmp, code_lens1, 0x55
+       vpblendd codes4, ytmp, codes2, 0x55
+
+       vpsllvq codes4, codes4, code_lens3
+       vpxor   codes3, codes3, codes4
+       vpaddd  code_lens3, code_lens1, code_lens2
+
+       vpsrlq  codes1, codes1, 32
+       vpsrlq  code_lens1, code_lens1, 32
+       vpsrlq  codes2, codes2, 32
+
+       vpsllvq codes2, codes2, code_lens1
+       vpxor codes1, codes1, codes2
+
+       vpsrlq code_lens1, code_lens3, 32
+       vpblendd        code_lens3, ytmp, code_lens3, 0x55
+
+       ;; Merge bitbuf bits
+       vpsllvq codes3, codes3, ybits_count
+       vpxor   codes3, codes3, ybits
+       vpaddq  code_lens3, code_lens3, ybits_count
+       vpaddq code_lens1, code_lens1, code_lens3
+
+       xor     bits, bits
+       xor     rcx, rcx
+       vpsubq code_lens1, code_lens1, code_lens3
+%rep 2
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vmovq   sym, codes3 %+ x
+       vmovq   tmp2, code_lens3 %+ x
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vmovq   sym, codes1 %+ x
+       vmovq   tmp2, code_lens1 %+ x
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vpextrq sym, codes3 %+ x, 1
+       vpextrq tmp2, code_lens3 %+ x, 1
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vpextrq sym, codes1 %+ x, 1
+       vpextrq tmp2, code_lens1 %+ x, 1
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+       vextracti128 codes3 %+ x, codes3, 1
+       vextracti128 code_lens3 %+ x, code_lens3, 1
+       vextracti128 codes1 %+ x, codes1, 1
+       vextracti128 code_lens1 %+ x, code_lens1, 1
+%endrep
+       sub     end_ptr, VECTOR_SLOP
+
+       vmovq   ybits %+ x, bits
+       vmovq   ybits_count %+ x, rcx
+       cmp     ptr, in_buf_end
+       jbe     .main_loop
+
+.finish:
+       add     in_buf_end, VECTOR_LOOP_PROCESSED
+       add     end_ptr, VECTOR_SLOP
+
+       cmp     ptr, in_buf_end
+       jge     .overflow
+
+.finish_loop:
+       mov     DWORD(data), [ptr]
+
+       cmp     out_buf, end_ptr
+       ja      .overflow
+
+       mov     sym, data
+       and     sym, LIT_MASK   ; sym has ll_code
+       mov     DWORD(sym), [hufftables + _lit_len_table + sym * 4]
+
+       ; look up dist sym
+       mov     dsym, data
+       shr     dsym, DIST_OFFSET
+       and     dsym, DIST_MASK
+       mov     DWORD(dsym), [hufftables + _dist_table + dsym * 4]
+
+       ; insert LL code
+       ; sym: 31:24 length; 23:0 code
+       mov     tmp2, sym
+       and     sym, 0xFFFFFF
+       SHLX    sym, sym, rcx
+       shr     tmp2, 24
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; insert dist code
+       movzx   tmp, WORD(dsym)
+       SHLX    tmp, tmp, rcx
+       or      bits, tmp
+       mov     tmp, dsym
+       shr     tmp, 24
+       add     rcx, tmp
+
+       ; insert dist extra bits
+       shr     data, EXTRA_BITS_OFFSET
+       add     ptr, 4
+       SHLX    data, data, rcx
+       or      bits, data
+       shr     dsym, 16
+       and     dsym, 0xFF
+       add     rcx, dsym
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+
+       cmp     ptr, in_buf_end
+       jb      .finish_loop
+
+.overflow:
+       mov     tmp, [rsp + bitbuf_mem_offset]
+       mov     [tmp + _m_bits], bits
+       mov     [tmp + _m_bit_count], ecx
+       mov     [tmp + _m_out_buf], out_buf
+
+       mov     rax, ptr
+
+       FUNC_RESTORE
+
+       ret
+
+section .data
+       align 32
+max_write_d:
+       dd      0x1c, 0x1d, 0x1f, 0x20, 0x1c, 0x1d, 0x1f, 0x20
+min_write_mask:
+       dq      0x00, 0x00, 0xff, 0x00
+offset_mask:
+       dq      0x0000000000000007, 0x0000000000000000
+       dq      0x0000000000000000, 0x0000000000000000
+q_64:
+       dq      0x0000000000000040, 0x0000000000000000
+       dq      0x0000000000000040, 0x0000000000000000
+lit_mask:
+       dd LIT_MASK, LIT_MASK, LIT_MASK, LIT_MASK
+       dd LIT_MASK, LIT_MASK, LIT_MASK, LIT_MASK
+dist_mask:
+       dd DIST_MASK, DIST_MASK, DIST_MASK, DIST_MASK
+       dd DIST_MASK, DIST_MASK, DIST_MASK, DIST_MASK
+lit_icr_mask:
+       dd 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF
+       dd 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF
+eb_icr_mask:
+       dd 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF
+       dd 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF
+bytes_mask:
+       dq      0x00000000000000ff, 0x0000000000000000
+       dq      0x00000000000000ff, 0x0000000000000000
diff --git a/ceph/src/isa-l/igzip/encode_df_06.asm b/ceph/src/isa-l/igzip/encode_df_06.asm
new file mode 100644 (file)
index 0000000..9fa5163
--- /dev/null
@@ -0,0 +1,620 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "stdmac.asm"
+
+%ifdef HAVE_AS_KNOWS_AVX512
+
+%define ARCH 06
+%define USE_HSWNI
+
+; tree entry is 4 bytes:
+; lit/len tree (513 entries)
+; |  3  |  2   |  1 | 0 |
+; | len |       code    |
+;
+; dist tree
+; |  3  |  2   |  1 | 0 |
+; |eblen:codlen|   code |
+
+; token format:
+; DIST_OFFSET:0 : lit/len
+; 31:(DIST_OFFSET + 5) : dist Extra Bits
+; (DIST_OFFSET + 5):DIST_OFFSET : dist code
+; lit/len: 0-256 (literal)
+;          257-512 (dist + 254)
+
+; returns final token pointer
+; equal to token_end if successful
+;    uint32_t* encode_df(uint32_t *token_start, uint32_t *token_end,
+;                            BitBuf *out_buf, uint32_t *trees);
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define arg4 r9
+%define sym            rsi
+%define dsym           rdi
+%define hufftables     r9
+%define ptr            r11
+%else
+; Linux
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define arg4 rcx
+%define sym            r9
+%define dsym           r8
+%define hufftables     r11
+%define ptr            rdi
+%endif
+
+%define in_buf_end     arg2
+%define bitbuf         arg3
+%define out_buf                bitbuf
+; bit_count is rcx
+%define bits           rax
+%define data           r12
+%define tmp            rbx
+%define len            dsym
+%define tmp2           r10
+%define end_ptr                rbp
+
+%define LIT_MASK       ((0x1 << LIT_LEN_BIT_COUNT) - 1)
+%define DIST_MASK      ((0x1 << DIST_LIT_BIT_COUNT) - 1)
+
+%define codes1         zmm1
+%define code_lens1     zmm2
+%define codes2         zmm3
+%define code_lens2     zmm4
+%define codes3         zmm5
+%define ztmp           zmm5
+%define        code_lens3      zmm6
+%define codes4         zmm7
+%define syms           zmm7
+
+%define code_lens4     zmm8
+%define dsyms          zmm8
+%define zbits_count_q  zmm8
+
+%define codes_lookup1  zmm9
+%define        codes_lookup2   zmm10
+%define datas          zmm11
+%define zbits          zmm12
+%define zbits_count    zmm13
+%define zoffset_mask   zmm14
+%define znotoffset_mask        zmm23
+
+%define zq_64          zmm15
+%define zlit_mask      zmm16
+%define zdist_mask     zmm17
+%define zlit_icr_mask  zmm18
+%define zeb_icr_mask   zmm19
+%define zmax_write     zmm20
+%define zrot_perm      zmm21
+%define zq_8           zmm22
+
+%define VECTOR_SIZE 0x40
+%define VECTOR_LOOP_PROCESSED (2 * VECTOR_SIZE)
+%define VECTOR_SLOP 0x40 - 8
+
+gpr_save_mem_offset    equ     0
+gpr_save_mem_size      equ     8 * 6
+xmm_save_mem_offset    equ     gpr_save_mem_offset + gpr_save_mem_size
+xmm_save_mem_size      equ     10 * 16
+bitbuf_mem_offset      equ     xmm_save_mem_offset + xmm_save_mem_size
+bitbuf_mem_size                equ     8
+stack_size             equ     gpr_save_mem_size + xmm_save_mem_size + bitbuf_mem_size
+
+
+%macro FUNC_SAVE 0
+       sub     rsp, stack_size
+       mov     [rsp + gpr_save_mem_offset + 0*8], rbx
+       mov     [rsp + gpr_save_mem_offset + 1*8], rbp
+       mov     [rsp + gpr_save_mem_offset + 2*8], r12
+
+%ifidn __OUTPUT_FORMAT__, win64
+       mov     [rsp + gpr_save_mem_offset + 3*8], rsi
+       mov     [rsp + gpr_save_mem_offset + 4*8], rdi
+
+       MOVDQU  [rsp + xmm_save_mem_offset + 0*8], xmm6
+       MOVDQU  [rsp + xmm_save_mem_offset + 1*8], xmm7
+       MOVDQU  [rsp + xmm_save_mem_offset + 2*8], xmm8
+       MOVDQU  [rsp + xmm_save_mem_offset + 3*8], xmm9
+       MOVDQU  [rsp + xmm_save_mem_offset + 4*8], xmm10
+       MOVDQU  [rsp + xmm_save_mem_offset + 5*8], xmm11
+       MOVDQU  [rsp + xmm_save_mem_offset + 6*8], xmm12
+       MOVDQU  [rsp + xmm_save_mem_offset + 7*8], xmm13
+       MOVDQU  [rsp + xmm_save_mem_offset + 8*8], xmm14
+       MOVDQU  [rsp + xmm_save_mem_offset + 9*8], xmm15
+%endif
+
+%endm
+
+%macro FUNC_RESTORE 0
+       mov     rbx, [rsp + gpr_save_mem_offset + 0*8]
+       mov     rbp, [rsp + gpr_save_mem_offset + 1*8]
+       mov     r12, [rsp + gpr_save_mem_offset + 2*8]
+
+%ifidn __OUTPUT_FORMAT__, win64
+       mov     rsi, [rsp + gpr_save_mem_offset + 3*8]
+       mov     rdi, [rsp + gpr_save_mem_offset + 4*8]
+
+       MOVDQU  xmm6, [rsp + xmm_save_mem_offset + 0*8]
+       MOVDQU  xmm7, [rsp + xmm_save_mem_offset + 1*8]
+       MOVDQU  xmm8, [rsp + xmm_save_mem_offset + 2*8]
+       MOVDQU  xmm9, [rsp + xmm_save_mem_offset + 3*8]
+       MOVDQU  xmm10, [rsp + xmm_save_mem_offset + 4*8]
+       MOVDQU  xmm11, [rsp + xmm_save_mem_offset + 5*8]
+       MOVDQU  xmm12, [rsp + xmm_save_mem_offset + 6*8]
+       MOVDQU  xmm13, [rsp + xmm_save_mem_offset + 7*8]
+       MOVDQU  xmm14, [rsp + xmm_save_mem_offset + 8*8]
+       MOVDQU  xmm15, [rsp + xmm_save_mem_offset + 9*8]
+%endif
+       add     rsp, stack_size
+
+%endmacro
+
+global encode_deflate_icf_ %+ ARCH
+encode_deflate_icf_ %+ ARCH:
+       FUNC_SAVE
+
+%ifnidn ptr, arg1
+       mov     ptr, arg1
+%endif
+%ifnidn hufftables, arg4
+       mov     hufftables, arg4
+%endif
+
+       mov     [rsp + bitbuf_mem_offset], bitbuf
+       mov     bits, [bitbuf + _m_bits]
+       mov     ecx, [bitbuf + _m_bit_count]
+       mov     end_ptr, [bitbuf + _m_out_end]
+       mov     out_buf, [bitbuf + _m_out_buf]  ; clobbers bitbuf
+
+       sub     end_ptr, VECTOR_SLOP
+       sub     in_buf_end, VECTOR_LOOP_PROCESSED
+       cmp     ptr, in_buf_end
+       jge     .finish
+
+       kxorq   k0, k0, k0
+       kmovq   k1, [k_mask_1]
+       kmovq   k2, [k_mask_2]
+       kmovq   k3, [k_mask_3]
+       kmovq   k4, [k_mask_4]
+       kmovq   k5, [k_mask_5]
+
+       vmovdqa64 zrot_perm, [rot_perm]
+
+       vbroadcasti64x2 zq_64, [q_64]
+       vbroadcasti64x2 zq_8, [q_8]
+
+       vpbroadcastq zoffset_mask, [offset_mask]
+       vpternlogd znotoffset_mask, znotoffset_mask, zoffset_mask, 0x55
+
+       vpbroadcastd zlit_mask, [lit_mask]
+       vpbroadcastd zdist_mask, [dist_mask]
+       vpbroadcastd zlit_icr_mask, [lit_icr_mask]
+       vpbroadcastd zeb_icr_mask, [eb_icr_mask]
+       vpbroadcastd zmax_write, [max_write_d]
+
+       knotq   k6, k0
+       vmovdqu64       datas, [ptr]
+       vpandd  syms, datas, zlit_mask
+       vpgatherdd codes_lookup1 {k6}, [hufftables + _lit_len_table + 4 * syms]
+
+       knotq   k7, k0
+       vpsrld  dsyms, datas, DIST_OFFSET
+       vpandd  dsyms, dsyms, zdist_mask
+       vpgatherdd codes_lookup2 {k7}, [hufftables + _dist_table + 4 * dsyms]
+
+       vmovq   zbits %+ x, bits
+       vmovq   zbits_count %+ x, rcx
+
+.main_loop:
+       ;;  Sets codes1 to contain lit/len codes andcode_lens1 the corresponding lengths
+       vpsrld  code_lens1, codes_lookup1, 24
+       vpandd  codes1, codes_lookup1, zlit_icr_mask
+
+       ;; Sets codes2 to contain dist codes, code_lens2 the corresponding lengths,
+       ;; and code_lens3 the extra bit counts
+       vmovdqu16       codes2 {k1}{z}, codes_lookup2 ;Bits 8 and above of zbits are 0
+       vpsrld  code_lens2, codes_lookup2, 24
+       vpsrld  code_lens3, codes_lookup2, 16
+       vpandd  code_lens3, code_lens3, zeb_icr_mask
+
+       ;; Set codes3 to contain the extra bits
+       vpsrld  codes3, datas, EXTRA_BITS_OFFSET
+
+       cmp     out_buf, end_ptr
+       ja      .main_loop_exit
+
+       ;; Start code lookups for next iteration
+       knotq   k6, k0
+       add     ptr, VECTOR_SIZE
+       vmovdqu64       datas, [ptr]
+       vpandd  syms, datas, zlit_mask
+       vpgatherdd codes_lookup1 {k6}, [hufftables + _lit_len_table + 4 * syms]
+
+       knotq   k7, k0
+       vpsrld  dsyms, datas, DIST_OFFSET
+       vpandd  dsyms, dsyms, zdist_mask
+       vpgatherdd codes_lookup2 {k7}, [hufftables + _dist_table + 4 * dsyms]
+
+       ;; Merge dist code with extra bits
+       vpsllvd codes3, codes3, code_lens2
+       vpxord  codes2, codes2, codes3
+       vpaddd  code_lens2, code_lens2, code_lens3
+
+       ;; Check for long codes
+       vpaddd  code_lens3, code_lens1, code_lens2
+       vpcmpgtd        k6, code_lens3, zmax_write
+       ktestd  k6, k6
+       jnz     .long_codes
+
+       ;; Merge dist and len codes
+       vpsllvd codes2, codes2, code_lens1
+       vpxord  codes1, codes1, codes2
+
+       vmovdqa32 codes3 {k1}{z}, codes1
+       vpsrlq  codes1, codes1, 32
+       vpsrlq  code_lens1, code_lens3, 32
+       vmovdqa32       code_lens3 {k1}{z}, code_lens3
+
+       ;; Merge bitbuf bits
+       vpsllvq codes3, codes3, zbits_count
+       vpxord  codes3, codes3, zbits
+       vpaddq  code_lens3, code_lens3, zbits_count
+
+       ;; Merge two symbols into qwords
+       vpsllvq codes1, codes1, code_lens3
+       vpxord codes1, codes1, codes3
+       vpaddq code_lens1, code_lens1, code_lens3
+
+       ;; Determine total bits at end of each qword
+       vpermq  zbits_count {k5}{z}, zrot_perm, code_lens1
+       vpaddq  code_lens2, zbits_count, code_lens1
+       vshufi64x2 zbits_count {k3}{z}, code_lens2, code_lens2, 0x90
+       vpaddq  code_lens2, code_lens2, zbits_count
+       vshufi64x2 zbits_count {k2}{z}, code_lens2, code_lens2, 0x40
+       vpaddq  code_lens2, code_lens2, zbits_count
+
+       ;; Bit align quadwords
+       vpandd  zbits_count, code_lens2, zoffset_mask
+       vpermq  zbits_count_q {k5}{z}, zrot_perm, zbits_count
+       vpsllvq codes1, codes1, zbits_count_q
+
+       ;; Check whether any of the last bytes overlap
+       vpcmpq k6 {k5}, code_lens1, zbits_count, 1
+
+       ;; Get last byte in each qword
+       vpsrlq  code_lens2, code_lens2, 3
+       vpaddq  code_lens1, code_lens1, zbits_count_q
+       vpandq  code_lens1, code_lens1, znotoffset_mask
+       vpsrlvq codes3, codes1, code_lens1
+
+       ;; Branch to handle overlapping last bytes
+       ktestd k6, k6
+       jnz .small_codes
+
+.small_codes_next:
+       ;; Save off zbits and zbits_count for next loop
+       knotq   k7, k5
+       vpermq  zbits {k7}{z}, zrot_perm, codes3
+       vpermq  zbits_count {k7}{z}, zrot_perm, zbits_count
+
+       ;; Merge last byte in each qword with the next qword
+       vpermq  codes3 {k5}{z}, zrot_perm, codes3
+       vpxord codes1, codes1, codes3
+
+       ;; Determine total bytes written
+       vextracti64x2 code_lens1 %+ x, code_lens2, 3
+       vpextrq tmp2, code_lens1 %+ x, 1
+
+       ;; Write out qwords
+       knotq   k6, k0
+       vpermq code_lens2 {k5}{z}, zrot_perm, code_lens2
+       vpscatterqq [out_buf + code_lens2] {k6}, codes1
+
+       add     out_buf, tmp2
+
+       cmp     ptr, in_buf_end
+       jbe     .main_loop
+
+.main_loop_exit:
+       vmovq   rcx, zbits_count %+ x
+       vmovq   bits, zbits %+ x
+       jmp     .finish
+
+.small_codes:
+       ;; Merge overlapping last bytes
+       vpermq  codes4 {k6}{z}, zrot_perm, codes3
+       vporq codes3, codes3, codes4
+       kshiftlq k7, k6, 1
+       ktestd k6, k7
+       jz .small_codes_next
+
+       kandq k6, k6, k7
+       jmp .small_codes
+
+.long_codes:
+       add     end_ptr, VECTOR_SLOP
+       sub     ptr, VECTOR_SIZE
+
+       vmovdqa32 codes3 {k1}{z}, codes1
+       vmovdqa32 code_lens3 {k1}{z}, code_lens1
+       vmovdqa32 codes4 {k1}{z}, codes2
+
+       vpsllvq codes4, codes4, code_lens3
+       vpxord  codes3, codes3, codes4
+       vpaddd  code_lens3, code_lens1, code_lens2
+
+       vpsrlq  codes1, codes1, 32
+       vpsrlq  code_lens1, code_lens1, 32
+       vpsrlq  codes2, codes2, 32
+
+       vpsllvq codes2, codes2, code_lens1
+       vpxord codes1, codes1, codes2
+
+       vpsrlq code_lens1, code_lens3, 32
+       vmovdqa32       code_lens3 {k1}{z}, code_lens3
+
+       ;; Merge bitbuf bits
+       vpsllvq codes3, codes3, zbits_count
+       vpxord  codes3, codes3, zbits
+       vpaddq  code_lens3, code_lens3, zbits_count
+       vpaddq code_lens1, code_lens1, code_lens3
+
+       xor     bits, bits
+       xor     rcx, rcx
+       vpsubq code_lens1, code_lens1, code_lens3
+
+       vmovdqu64 codes2, codes1
+       vmovdqu64 code_lens2, code_lens1
+       vmovdqu64 codes4, codes3
+       vmovdqu64 code_lens4, code_lens3
+%assign i 0
+%rep 4
+%assign i (i + 1)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vmovq   sym, codes3 %+ x
+       vmovq   tmp2, code_lens3 %+ x
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vmovq   sym, codes1 %+ x
+       vmovq   tmp2, code_lens1 %+ x
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vpextrq sym, codes3 %+ x, 1
+       vpextrq tmp2, code_lens3 %+ x, 1
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+       cmp     out_buf, end_ptr
+       ja      .overflow
+       ;; insert LL code
+       vpextrq sym, codes1 %+ x, 1
+       vpextrq tmp2, code_lens1 %+ x, 1
+       SHLX    sym, sym, rcx
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+       add     ptr, 4
+
+       vextracti32x4 codes3 %+ x, codes4, i
+       vextracti32x4 code_lens3 %+ x, code_lens4, i
+       vextracti32x4 codes1 %+ x, codes2, i
+       vextracti32x4 code_lens1 %+ x, code_lens2, i
+%endrep
+       sub     end_ptr, VECTOR_SLOP
+
+       vmovq   zbits %+ x, bits
+       vmovq   zbits_count %+ x, rcx
+       cmp     ptr, in_buf_end
+       jbe     .main_loop
+
+.finish:
+       add     in_buf_end, VECTOR_LOOP_PROCESSED
+       add     end_ptr, VECTOR_SLOP
+
+       cmp     ptr, in_buf_end
+       jge     .overflow
+
+.finish_loop:
+       mov     DWORD(data), [ptr]
+
+       cmp     out_buf, end_ptr
+       ja      .overflow
+
+       mov     sym, data
+       and     sym, LIT_MASK   ; sym has ll_code
+       mov     DWORD(sym), [hufftables + _lit_len_table + sym * 4]
+
+       ; look up dist sym
+       mov     dsym, data
+       shr     dsym, DIST_OFFSET
+       and     dsym, DIST_MASK
+       mov     DWORD(dsym), [hufftables + _dist_table + dsym * 4]
+
+       ; insert LL code
+       ; sym: 31:24 length; 23:0 code
+       mov     tmp2, sym
+       and     sym, 0xFFFFFF
+       SHLX    sym, sym, rcx
+       shr     tmp2, 24
+       or      bits, sym
+       add     rcx, tmp2
+
+       ; insert dist code
+       movzx   tmp, WORD(dsym)
+       SHLX    tmp, tmp, rcx
+       or      bits, tmp
+       mov     tmp, dsym
+       shr     tmp, 24
+       add     rcx, tmp
+
+       ; insert dist extra bits
+       shr     data, EXTRA_BITS_OFFSET
+       add     ptr, 4
+       SHLX    data, data, rcx
+       or      bits, data
+       shr     dsym, 16
+       and     dsym, 0xFF
+       add     rcx, dsym
+
+       ; empty bits
+       mov     [out_buf], bits
+       mov     tmp, rcx
+       shr     tmp, 3          ; byte count
+       add     out_buf, tmp
+       mov     tmp, rcx
+       and     rcx, ~7
+       SHRX    bits, bits, rcx
+       mov     rcx, tmp
+       and     rcx, 7
+
+       cmp     ptr, in_buf_end
+       jb      .finish_loop
+
+.overflow:
+       mov     tmp, [rsp + bitbuf_mem_offset]
+       mov     [tmp + _m_bits], bits
+       mov     [tmp + _m_bit_count], ecx
+       mov     [tmp + _m_out_buf], out_buf
+
+       mov     rax, ptr
+
+       FUNC_RESTORE
+
+       ret
+
+section .data
+       align 64
+;; 64 byte data
+rot_perm:
+       dq 0x00000007, 0x00000000, 0x00000001, 0x00000002
+       dq 0x00000003, 0x00000004, 0x00000005, 0x00000006
+
+;; 16 byte data
+q_64:
+       dq 0x0000000000000040, 0x0000000000000000
+q_8 :
+       dq 0x0000000000000000, 0x0000000000000008
+
+;; 8 byte data
+offset_mask:
+       dq 0x0000000000000007
+
+;; 4 byte data
+max_write_d:
+       dd 0x1c
+lit_mask:
+       dd LIT_MASK
+dist_mask:
+       dd DIST_MASK
+lit_icr_mask:
+       dd 0x00ffffff
+eb_icr_mask:
+       dd 0x000000ff
+
+;; k mask constants
+k_mask_1: dq 0x55555555
+k_mask_2: dq 0xfffffff0
+k_mask_3: dq 0xfffffffc
+k_mask_4: dw 0x0101, 0x0101, 0x0101, 0x0101
+k_mask_5: dq 0xfffffffe
+
+%endif
diff --git a/ceph/src/isa-l/igzip/encode_df_asm.asm b/ceph/src/isa-l/igzip/encode_df_asm.asm
deleted file mode 100644 (file)
index 62ada29..0000000
+++ /dev/null
@@ -1,527 +0,0 @@
-%include "reg_sizes.asm"
-%include "lz0a_const.asm"
-%include "data_struct2.asm"
-%include "stdmac.asm"
-
-; tree entry is 4 bytes:
-; lit/len tree (513 entries)
-; |  3  |  2   |  1 | 0 |
-; | len |       code    |
-;
-; dist tree
-; |  3  |  2   |  1 | 0 |
-; |eblen:codlen|   code |
-
-; token format:
-; DIST_OFFSET:0 : lit/len
-; 31:(DIST_OFFSET + 5) : dist Extra Bits
-; (DIST_OFFSET + 5):DIST_OFFSET : dist code
-; lit/len: 0-256 (literal)
-;          257-512 (dist + 254)
-
-; returns final token pointer
-; equal to token_end if successful
-;    uint32_t* encode_df(uint32_t *token_start, uint32_t *token_end,
-;                            BitBuf *out_buf, uint32_t *trees);
-
-%ifidn __OUTPUT_FORMAT__, win64
-%define arg1 rcx
-%define arg2 rdx
-%define arg3 r8
-%define arg4 r9
-%define sym            rsi
-%define dsym           rdi
-%define hufftables     r9
-%define ptr            r11
-%else
-; Linux
-%define arg1 rdi
-%define arg2 rsi
-%define arg3 rdx
-%define arg4 rcx
-%define sym            r9
-%define dsym           r8
-%define hufftables     r11
-%define ptr            rdi
-%endif
-
-%define in_buf_end     arg2
-%define bitbuf         arg3
-%define out_buf                bitbuf
-; bit_count is rcx
-%define bits           rax
-%define data           r12
-%define tmp            rbx
-%define len            dsym
-%define tmp2           r10
-%define end_ptr                rbp
-
-%define LIT_MASK       ((0x1 << LIT_LEN_BIT_COUNT) - 1)
-%define DIST_MASK      ((0x1 << DIST_LIT_BIT_COUNT) - 1)
-
-%define codes1         ymm1
-%define code_lens1     ymm2
-%define codes2         ymm3
-%define code_lens2     ymm4
-%define codes3         ymm5
-%define        code_lens3      ymm6
-%define codes4         ymm7
-%define syms           ymm7
-
-%define code_lens4     ymm8
-%define dsyms          ymm8
-
-%define ytmp           ymm9
-%define codes_lookup1  ymm10
-%define        codes_lookup2   ymm11
-%define datas          ymm12
-%define ybits          ymm13
-%define ybits_count    ymm14
-%define yoffset_mask   ymm15
-
-%define VECTOR_SIZE 0x20
-%define VECTOR_LOOP_PROCESSED (2 * VECTOR_SIZE)
-%define VECTOR_SLOP 0x20 - 8
-
-gpr_save_mem_offset    equ     0
-gpr_save_mem_size      equ     8 * 6
-xmm_save_mem_offset    equ     gpr_save_mem_offset + gpr_save_mem_size
-xmm_save_mem_size      equ     10 * 16
-bitbuf_mem_offset      equ     xmm_save_mem_offset + xmm_save_mem_size
-bitbuf_mem_size                equ     8
-stack_size             equ     gpr_save_mem_size + xmm_save_mem_size + bitbuf_mem_size
-
-
-%macro FUNC_SAVE 0
-       sub     rsp, stack_size
-       mov     [rsp + gpr_save_mem_offset + 0*8], rbx
-       mov     [rsp + gpr_save_mem_offset + 1*8], rbp
-       mov     [rsp + gpr_save_mem_offset + 2*8], r12
-
-%ifidn __OUTPUT_FORMAT__, win64
-       mov     [rsp + gpr_save_mem_offset + 3*8], rsi
-       mov     [rsp + gpr_save_mem_offset + 4*8], rdi
-
-       MOVDQU  [rsp + xmm_save_mem_offset + 0*8], xmm6
-       MOVDQU  [rsp + xmm_save_mem_offset + 1*8], xmm7
-       MOVDQU  [rsp + xmm_save_mem_offset + 2*8], xmm8
-       MOVDQU  [rsp + xmm_save_mem_offset + 3*8], xmm9
-       MOVDQU  [rsp + xmm_save_mem_offset + 4*8], xmm10
-       MOVDQU  [rsp + xmm_save_mem_offset + 5*8], xmm11
-       MOVDQU  [rsp + xmm_save_mem_offset + 6*8], xmm12
-       MOVDQU  [rsp + xmm_save_mem_offset + 7*8], xmm13
-       MOVDQU  [rsp + xmm_save_mem_offset + 8*8], xmm14
-       MOVDQU  [rsp + xmm_save_mem_offset + 9*8], xmm15
-%endif
-
-%endm
-
-%macro FUNC_RESTORE 0
-       mov     rbx, [rsp + gpr_save_mem_offset + 0*8]
-       mov     rbp, [rsp + gpr_save_mem_offset + 1*8]
-       mov     r12, [rsp + gpr_save_mem_offset + 2*8]
-
-%ifidn __OUTPUT_FORMAT__, win64
-       mov     rsi, [rsp + gpr_save_mem_offset + 3*8]
-       mov     rdi, [rsp + gpr_save_mem_offset + 4*8]
-
-       MOVDQU  xmm6, [rsp + xmm_save_mem_offset + 0*8]
-       MOVDQU  xmm7, [rsp + xmm_save_mem_offset + 1*8]
-       MOVDQU  xmm8, [rsp + xmm_save_mem_offset + 2*8]
-       MOVDQU  xmm9, [rsp + xmm_save_mem_offset + 3*8]
-       MOVDQU  xmm10, [rsp + xmm_save_mem_offset + 4*8]
-       MOVDQU  xmm11, [rsp + xmm_save_mem_offset + 5*8]
-       MOVDQU  xmm12, [rsp + xmm_save_mem_offset + 6*8]
-       MOVDQU  xmm13, [rsp + xmm_save_mem_offset + 7*8]
-       MOVDQU  xmm14, [rsp + xmm_save_mem_offset + 8*8]
-       MOVDQU  xmm15, [rsp + xmm_save_mem_offset + 9*8]
-%endif
-       add     rsp, stack_size
-
-%endmacro
-
-global encode_deflate_icf_ %+ ARCH
-encode_deflate_icf_ %+ ARCH:
-       FUNC_SAVE
-
-%ifnidn ptr, arg1
-       mov     ptr, arg1
-%endif
-%ifnidn hufftables, arg4
-       mov     hufftables, arg4
-%endif
-
-       mov     [rsp + bitbuf_mem_offset], bitbuf
-       mov     bits, [bitbuf + _m_bits]
-       mov     ecx, [bitbuf + _m_bit_count]
-       mov     end_ptr, [bitbuf + _m_out_end]
-       mov     out_buf, [bitbuf + _m_out_buf]  ; clobbers bitbuf
-
-       sub     end_ptr, VECTOR_SLOP
-       sub     in_buf_end, VECTOR_LOOP_PROCESSED
-       cmp     ptr, in_buf_end
-       jge     .finish
-
-       vpcmpeqq        ytmp, ytmp, ytmp
-       vmovdqu datas, [ptr]
-       vpand   syms, datas, [lit_mask]
-       vpgatherdd codes_lookup1, [hufftables + _lit_len_table + 4 * syms], ytmp
-
-       vpcmpeqq        ytmp, ytmp, ytmp
-       vpsrld  dsyms, datas, DIST_OFFSET
-       vpand   dsyms, dsyms, [dist_mask]
-       vpgatherdd codes_lookup2, [hufftables + _dist_table + 4 * dsyms], ytmp
-
-       vmovq   ybits %+ x, bits
-       vmovq   ybits_count %+ x, rcx
-       vmovdqa yoffset_mask, [offset_mask]
-
-.main_loop:
-       ;;  Sets codes1 to contain lit/len codes andcode_lens1 the corresponding lengths
-       vpsrld  code_lens1, codes_lookup1, 24
-       vpand   codes1, codes_lookup1, [lit_icr_mask]
-
-       ;; Sets codes2 to contain dist codes, code_lens2 the corresponding lengths,
-       ;; and code_lens3 the extra bit counts
-       vpblendw        codes2, ybits, codes_lookup2, 0x55 ;Bits 8 and above of ybits are 0
-       vpsrld  code_lens2, codes_lookup2, 24
-       vpsrld  code_lens3, codes_lookup2, 16
-       vpand   code_lens3, [eb_icr_mask]
-
-       ;; Set codes3 to contain the extra bits
-       vpsrld  codes3, datas, EXTRA_BITS_OFFSET
-
-       cmp     out_buf, end_ptr
-       ja      .main_loop_exit
-
-       ;; Start code lookups for next iteration
-       add     ptr, VECTOR_SIZE
-       vpcmpeqq        ytmp, ytmp, ytmp
-       vmovdqu datas, [ptr]
-       vpand   syms, datas, [lit_mask]
-       vpgatherdd codes_lookup1, [hufftables + _lit_len_table + 4 * syms], ytmp
-
-       vpcmpeqq        ytmp, ytmp, ytmp
-       vpsrld  dsyms, datas, DIST_OFFSET
-       vpand   dsyms, dsyms, [dist_mask]
-       vpgatherdd codes_lookup2, [hufftables + _dist_table + 4 * dsyms], ytmp
-
-       ;; Merge dist code with extra bits
-       vpsllvd codes3, codes3, code_lens2
-       vpxor   codes2, codes2, codes3
-       vpaddd  code_lens2, code_lens2, code_lens3
-
-       ;; Check for long codes
-       vpaddd  code_lens3, code_lens1, code_lens2
-       vpcmpgtd        ytmp, code_lens3, [max_write_d]
-       vptest  ytmp, ytmp
-       jnz     .long_codes
-
-       ;; Merge dist and len codes
-       vpsllvd codes2, codes2, code_lens1
-       vpxor   codes1, codes1, codes2
-
-       ;; Split buffer data into qwords, ytmp is 0 after last branch
-       vpblendd codes3, ytmp, codes1, 0x55
-       vpsrlq  codes1, codes1, 32
-       vpsrlq  code_lens1, code_lens3, 32
-       vpblendd        code_lens3, ytmp, code_lens3, 0x55
-
-       ;; Merge bitbuf bits
-       vpsllvq codes3, codes3, ybits_count
-       vpxor   codes3, codes3, ybits
-       vpaddq  code_lens3, code_lens3, ybits_count
-
-       ;; Merge two symbols into qwords
-       vpsllvq codes1, codes1, code_lens3
-       vpxor codes1, codes1, codes3
-       vpaddq code_lens1, code_lens1, code_lens3
-
-       ;; Split buffer data into dqwords, ytmp is 0 after last branch
-       vpblendd        codes2, ytmp, codes1, 0x33
-       vpblendd        code_lens2, ytmp, code_lens1, 0x33
-       vpsrldq codes1, 8
-       vpsrldq code_lens1, 8
-
-       ;; Merge two qwords into dqwords
-       vmovdqa ytmp, [q_64]
-       vpsubq  code_lens3, ytmp, code_lens2
-       vpsrlvq codes3, codes1, code_lens3
-       vpslldq codes3, codes3, 8
-
-       vpsllvq codes1, codes1, code_lens2
-
-       vpxor   codes1, codes1, codes3
-       vpxor   codes1, codes1, codes2
-       vpaddq  code_lens1, code_lens1, code_lens2
-
-       vmovq   tmp, code_lens1 %+ x    ;Number of bytes
-       shr     tmp, 3
-       vpand   ybits_count, code_lens1, yoffset_mask ;Extra bits
-
-       ;; bit shift upper dqword combined bits to line up with lower dqword
-       vextracti128    codes2 %+ x, codes1, 1
-       vextracti128    code_lens2 %+ x, code_lens1, 1
-
-       vpbroadcastq    ybits_count, ybits_count %+ x
-       vpsrldq codes3, codes2, 1
-       vpsllvq codes2, codes2, ybits_count
-       vpsllvq codes3, codes3, ybits_count
-       vpslldq codes3, codes3, 1
-       vpor    codes2, codes2, codes3
-
-       ; Write out lower dqword of combined bits
-       vmovdqu [out_buf], codes1
-       movzx   bits, byte [out_buf + tmp]
-       vmovq   codes1 %+ x, bits
-       vpaddq  code_lens1, code_lens1, code_lens2
-
-       vmovq   tmp2, code_lens1 %+ x   ;Number of bytes
-       shr     tmp2, 3
-       vpand   ybits_count, code_lens1, yoffset_mask ;Extra bits
-
-       ; Write out upper dqword of combined bits
-       vpor    codes1 %+ x, codes1 %+ x, codes2 %+ x
-       vmovdqu [out_buf + tmp], codes1 %+ x
-       add     out_buf, tmp2
-       movzx   bits, byte [out_buf]
-       vmovq   ybits %+ x, bits
-
-       cmp     ptr, in_buf_end
-       jbe     .main_loop
-
-.main_loop_exit:
-       vmovq   rcx, ybits_count %+ x
-       vmovq   bits, ybits %+ x
-       jmp     .finish
-
-.long_codes:
-       add     end_ptr, VECTOR_SLOP
-       sub     ptr, VECTOR_SIZE
-
-       vpxor ytmp, ytmp, ytmp
-       vpblendd codes3, ytmp, codes1, 0x55
-       vpblendd code_lens3, ytmp, code_lens1, 0x55
-       vpblendd codes4, ytmp, codes2, 0x55
-
-       vpsllvq codes4, codes4, code_lens3
-       vpxor   codes3, codes3, codes4
-       vpaddd  code_lens3, code_lens1, code_lens2
-
-       vpsrlq  codes1, codes1, 32
-       vpsrlq  code_lens1, code_lens1, 32
-       vpsrlq  codes2, codes2, 32
-
-       vpsllvq codes2, codes2, code_lens1
-       vpxor codes1, codes1, codes2
-
-       vpsrlq code_lens1, code_lens3, 32
-       vpblendd        code_lens3, ytmp, code_lens3, 0x55
-
-       ;; Merge bitbuf bits
-       vpsllvq codes3, codes3, ybits_count
-       vpxor   codes3, codes3, ybits
-       vpaddq  code_lens3, code_lens3, ybits_count
-       vpaddq code_lens1, code_lens1, code_lens3
-
-       xor     bits, bits
-       xor     rcx, rcx
-       vpsubq code_lens1, code_lens1, code_lens3
-%rep 2
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-       cmp     out_buf, end_ptr
-       ja      .overflow
-       ;; insert LL code
-       vmovq   sym, codes3 %+ x
-       vmovq   tmp2, code_lens3 %+ x
-       SHLX    sym, sym, rcx
-       or      bits, sym
-       add     rcx, tmp2
-
-       ; empty bits
-       mov     [out_buf], bits
-       mov     tmp, rcx
-       shr     tmp, 3          ; byte count
-       add     out_buf, tmp
-       mov     tmp, rcx
-       and     rcx, ~7
-       SHRX    bits, bits, rcx
-       mov     rcx, tmp
-       and     rcx, 7
-       add     ptr, 4
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-       cmp     out_buf, end_ptr
-       ja      .overflow
-       ;; insert LL code
-       vmovq   sym, codes1 %+ x
-       vmovq   tmp2, code_lens1 %+ x
-       SHLX    sym, sym, rcx
-       or      bits, sym
-       add     rcx, tmp2
-
-       ; empty bits
-       mov     [out_buf], bits
-       mov     tmp, rcx
-       shr     tmp, 3          ; byte count
-       add     out_buf, tmp
-       mov     tmp, rcx
-       and     rcx, ~7
-       SHRX    bits, bits, rcx
-       mov     rcx, tmp
-       and     rcx, 7
-       add     ptr, 4
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-       cmp     out_buf, end_ptr
-       ja      .overflow
-       ;; insert LL code
-       vpextrq sym, codes3 %+ x, 1
-       vpextrq tmp2, code_lens3 %+ x, 1
-       SHLX    sym, sym, rcx
-       or      bits, sym
-       add     rcx, tmp2
-
-       ; empty bits
-       mov     [out_buf], bits
-       mov     tmp, rcx
-       shr     tmp, 3          ; byte count
-       add     out_buf, tmp
-       mov     tmp, rcx
-       and     rcx, ~7
-       SHRX    bits, bits, rcx
-       mov     rcx, tmp
-       and     rcx, 7
-       add     ptr, 4
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-       cmp     out_buf, end_ptr
-       ja      .overflow
-       ;; insert LL code
-       vpextrq sym, codes1 %+ x, 1
-       vpextrq tmp2, code_lens1 %+ x, 1
-       SHLX    sym, sym, rcx
-       or      bits, sym
-       add     rcx, tmp2
-
-       ; empty bits
-       mov     [out_buf], bits
-       mov     tmp, rcx
-       shr     tmp, 3          ; byte count
-       add     out_buf, tmp
-       mov     tmp, rcx
-       and     rcx, ~7
-       SHRX    bits, bits, rcx
-       mov     rcx, tmp
-       and     rcx, 7
-       add     ptr, 4
-
-       vextracti128 codes3 %+ x, codes3, 1
-       vextracti128 code_lens3 %+ x, code_lens3, 1
-       vextracti128 codes1 %+ x, codes1, 1
-       vextracti128 code_lens1 %+ x, code_lens1, 1
-%endrep
-       sub     end_ptr, VECTOR_SLOP
-
-       vmovq   ybits %+ x, bits
-       vmovq   ybits_count %+ x, rcx
-       cmp     ptr, in_buf_end
-       jbe     .main_loop
-
-.finish:
-       add     in_buf_end, VECTOR_LOOP_PROCESSED
-       add     end_ptr, VECTOR_SLOP
-
-       cmp     ptr, in_buf_end
-       jge     .overflow
-
-.finish_loop:
-       mov     DWORD(data), [ptr]
-
-       cmp     out_buf, end_ptr
-       ja      .overflow
-
-       mov     sym, data
-       and     sym, LIT_MASK   ; sym has ll_code
-       mov     DWORD(sym), [hufftables + _lit_len_table + sym * 4]
-
-       ; look up dist sym
-       mov     dsym, data
-       shr     dsym, DIST_OFFSET
-       and     dsym, DIST_MASK
-       mov     DWORD(dsym), [hufftables + _dist_table + dsym * 4]
-
-       ; insert LL code
-       ; sym: 31:24 length; 23:0 code
-       mov     tmp2, sym
-       and     sym, 0xFFFFFF
-       SHLX    sym, sym, rcx
-       shr     tmp2, 24
-       or      bits, sym
-       add     rcx, tmp2
-
-       ; insert dist code
-       movzx   tmp, WORD(dsym)
-       SHLX    tmp, tmp, rcx
-       or      bits, tmp
-       mov     tmp, dsym
-       shr     tmp, 24
-       add     rcx, tmp
-
-       ; insert dist extra bits
-       shr     data, EXTRA_BITS_OFFSET
-       add     ptr, 4
-       SHLX    data, data, rcx
-       or      bits, data
-       shr     dsym, 16
-       and     dsym, 0xFF
-       add     rcx, dsym
-
-       ; empty bits
-       mov     [out_buf], bits
-       mov     tmp, rcx
-       shr     tmp, 3          ; byte count
-       add     out_buf, tmp
-       mov     tmp, rcx
-       and     rcx, ~7
-       SHRX    bits, bits, rcx
-       mov     rcx, tmp
-       and     rcx, 7
-
-       cmp     ptr, in_buf_end
-       jb      .finish_loop
-
-.overflow:
-       mov     tmp, [rsp + bitbuf_mem_offset]
-       mov     [tmp + _m_bits], bits
-       mov     [tmp + _m_bit_count], ecx
-       mov     [tmp + _m_out_buf], out_buf
-
-       mov     rax, ptr
-
-       FUNC_RESTORE
-
-       ret
-
-section .data
-       align 32
-max_write_d:
-       dd      0x1c, 0x1d, 0x20, 0x20, 0x1e, 0x1e, 0x1e, 0x1e
-offset_mask:
-       dq      0x0000000000000007, 0x0000000000000000
-       dq      0x0000000000000000, 0x0000000000000000
-q_64:
-       dq      0x0000000000000040, 0x0000000000000000
-       dq      0x0000000000000040, 0x0000000000000000
-lit_mask:
-       dd LIT_MASK, LIT_MASK, LIT_MASK, LIT_MASK
-       dd LIT_MASK, LIT_MASK, LIT_MASK, LIT_MASK
-dist_mask:
-       dd DIST_MASK, DIST_MASK, DIST_MASK, DIST_MASK
-       dd DIST_MASK, DIST_MASK, DIST_MASK, DIST_MASK
-lit_icr_mask:
-       dd 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF
-       dd 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF
-eb_icr_mask:
-       dd 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF
-       dd 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF
index d0958b917c2e30d5f377abf5c3b2dc7b142f1fa0..60df1b0850899662cd41c57985063f70eb2f0668 100644 (file)
@@ -71,6 +71,8 @@
 
 #define GZIP_HEADER_SIZE 10
 #define GZIP_TRAILER_SIZE 8
+#define ZLIB_HEADER_SIZE 2
+#define ZLIB_TRAILER_SIZE 4
 
 /**
  * @brief Prints a table of uint8_t elements to a file.
@@ -224,7 +226,11 @@ void fprint_header(FILE * output_file)
                "\t0x1f, 0x8b, 0x08, 0x00, 0x00,\n" "\t0x00, 0x00, 0x00, 0x00, 0xff\t};\n\n");
 
        fprintf(output_file, "const uint32_t gzip_hdr_bytes = %d;\n", GZIP_HEADER_SIZE);
-       fprintf(output_file, "const uint32_t gzip_trl_bytes = %d;\n", GZIP_TRAILER_SIZE);
+       fprintf(output_file, "const uint32_t gzip_trl_bytes = %d;\n\n", GZIP_TRAILER_SIZE);
+
+       fprintf(output_file, "const uint8_t zlib_hdr[] = { 0x78, 0x01 };\n\n");
+       fprintf(output_file, "const uint32_t zlib_hdr_bytes = %d;\n", ZLIB_HEADER_SIZE);
+       fprintf(output_file, "const uint32_t zlib_trl_bytes = %d;\n", ZLIB_TRAILER_SIZE);
 }
 
 int main(int argc, char *argv[])
@@ -260,8 +266,7 @@ int main(int argc, char *argv[])
                        fclose(file);
                        return 1;
                }
-               fread(stream, 1, file_length, file);
-               if (ferror(file)) {
+               if (fread(stream, 1, file_length, file) != file_length) {
                        printf("Error occurred when reading file");
                        fclose(file);
                        free(stream);
diff --git a/ceph/src/isa-l/igzip/generate_static_inflate.c b/ceph/src/isa-l/igzip/generate_static_inflate.c
new file mode 100644 (file)
index 0000000..f4bf5ac
--- /dev/null
@@ -0,0 +1,163 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdint.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <string.h>
+#include <stdlib.h>
+#include "igzip_lib.h"
+
+#define STATIC_INFLATE_FILE "static_inflate.h"
+
+/**
+ * @brief Prints a table of uint16_t elements to a file.
+ * @param outfile: the file the table is printed to.
+ * @param table: the table to be printed.
+ * @param length: number of elements to be printed.
+ * @param header: header to append in front of the table.
+ * @param footer: footer to append at the end of the table.
+ * @param begin_line: string printed at beginning of new line
+ */
+void fprint_uint16_table(FILE * outfile, uint16_t * table, uint64_t length, char *header,
+                        char *footer, char *begin_line)
+{
+       int i;
+       fprintf(outfile, "%s", header);
+       for (i = 0; i < length - 1; i++) {
+               if ((i & 7) == 0)
+                       fprintf(outfile, "\n%s", begin_line);
+               else
+                       fprintf(outfile, " ");
+               fprintf(outfile, "0x%04x,", table[i]);
+       }
+
+       if ((i & 7) == 0)
+               fprintf(outfile, "\n%s", begin_line);
+       else
+               fprintf(outfile, " ");
+       fprintf(outfile, "0x%04x", table[i]);
+       fprintf(outfile, "%s", footer);
+
+}
+
+/**
+ * @brief Prints a table of uint32_t elements to a file.
+ * @param outfile: the file the table is printed to.
+ * @param table: the table to be printed.
+ * @param length: number of elements to be printed.
+ * @param header: header to append in front of the table.
+ * @param footer: footer to append at the end of the table.
+ * @param begin_line: string printed at beginning of new line
+ */
+void fprint_uint32_table(FILE * outfile, uint32_t * table, uint64_t length, char *header,
+                        char *footer, char *begin_line)
+{
+       int i;
+       fprintf(outfile, "%s", header);
+       for (i = 0; i < length - 1; i++) {
+               if ((i & 3) == 0)
+                       fprintf(outfile, "\n%s", begin_line);
+               else
+                       fprintf(outfile, " ");
+               fprintf(outfile, "0x%08x,", table[i]);
+       }
+
+       if ((i & 3) == 0)
+               fprintf(outfile, "%s", begin_line);
+       else
+               fprintf(outfile, " ");
+       fprintf(outfile, "0x%08x", table[i]);
+       fprintf(outfile, "%s", footer);
+
+}
+
+void fprint_header(FILE * output_file)
+{
+       fprintf(output_file, "#include \"igzip_lib.h\"\n\n");
+       fprintf(output_file, "#define LONG_BITS_CHECK %d\n", ISAL_DECODE_LONG_BITS);
+       fprintf(output_file, "#define SHORT_BITS_CHECK %d\n", ISAL_DECODE_SHORT_BITS);
+       fprintf(output_file,
+               "#if (LONG_BITS_CHECK == ISAL_DECODE_LONG_BITS) && (SHORT_BITS_CHECK == ISAL_DECODE_SHORT_BITS)\n"
+               "# define ISAL_STATIC_INFLATE_TABLE\n"
+               "#else\n"
+               "# warning \"Incompatible compile time defines for optimized static inflate table.\"\n"
+               "#endif\n\n");
+}
+
+int main(int argc, char *argv[])
+{
+       struct inflate_state state;
+       FILE *file;
+       uint8_t static_deflate_hdr = 3;
+       uint8_t tmp_space[8];
+
+       isal_inflate_init(&state);
+
+       state.next_in = &static_deflate_hdr;
+       state.avail_in = sizeof(static_deflate_hdr);
+       state.next_out = tmp_space;
+       state.avail_out = sizeof(tmp_space);
+
+       isal_inflate(&state);
+
+       file = fopen(STATIC_INFLATE_FILE, "w");
+
+       if (file == NULL) {
+               printf("Error creating file hufftables_c.c\n");
+               return 1;
+       }
+
+       fprintf(file, "#ifndef STATIC_HEADER_H\n" "#define STATIC_HEADER_H\n\n");
+
+       fprint_header(file);
+
+       fprintf(file, "struct inflate_huff_code_large static_lit_huff_code = {\n");
+       fprint_uint32_table(file, state.lit_huff_code.short_code_lookup,
+                           sizeof(state.lit_huff_code.short_code_lookup) / sizeof(uint32_t),
+                           "\t.short_code_lookup = {", "\t},\n\n", "\t\t");
+       fprint_uint16_table(file, state.lit_huff_code.long_code_lookup,
+                           sizeof(state.lit_huff_code.long_code_lookup) / sizeof(uint16_t),
+                           "\t.long_code_lookup = {", "\t}\n", "\t\t");
+       fprintf(file, "};\n\n");
+
+       fprintf(file, "struct inflate_huff_code_small static_dist_huff_code = {\n");
+       fprint_uint16_table(file, state.dist_huff_code.short_code_lookup,
+                           sizeof(state.dist_huff_code.short_code_lookup) / sizeof(uint16_t),
+                           "\t.short_code_lookup = {", "\t},\n\n", "\t\t");
+       fprint_uint16_table(file, state.dist_huff_code.long_code_lookup,
+                           sizeof(state.dist_huff_code.long_code_lookup) / sizeof(uint16_t),
+                           "\t.long_code_lookup = {", "\t}\n", "\t\t");
+       fprintf(file, "};\n\n");
+
+       fprintf(file, "#endif\n");
+       fclose(file);
+
+       return 0;
+}
index e41baf97c8dded82f915b632bf9725e348fef2cb..4385fae66517733efd6f16900f65fed9c1e650ca 100644 (file)
@@ -1,3 +1,32 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 ; heapify heap, heap_size, i, child, tmp1, tmp2, tmpd
 %macro heapify2 7
 %define %%heap      %1 ; qword ptr
index c8b2035d2976947c13f293ad44f88f1a4cf12027..7512af234548ead5295c660bb7f95c2ca0bf0c2c 100644 (file)
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
-#include <immintrin.h>
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-#include "igzip_lib.h"
 #include "huff_codes.h"
 #include "huffman.h"
-#include "bitbuf2.h"
 #include "flatten_ll.h"
 
 /* The order code length codes are written in the dynamic code header. This is
 static const uint8_t code_length_code_order[] =
     { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
 
-const uint32_t len_code_extra_bits[] = {
+static const uint32_t len_code_extra_bits[] = {
        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
        0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2,
        0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4,
        0x5, 0x5, 0x5, 0x5, 0x0
 };
 
-const uint32_t dist_code_extra_bits[] = {
+static const uint32_t dist_code_extra_bits[] = {
        0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x2,
        0x3, 0x3, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6,
        0x7, 0x7, 0x8, 0x8, 0x9, 0x9, 0xa, 0xa,
        0xb, 0xb, 0xc, 0xc, 0xd, 0xd
 };
 
-struct hufftables_icf static_hufftables = {
+static struct hufftables_icf static_hufftables = {
        .lit_len_table = {
-                         {.code_and_extra = 0x00c,.length2 = 0x8},
-                         {.code_and_extra = 0x08c,.length2 = 0x8},
-                         {.code_and_extra = 0x04c,.length2 = 0x8},
-                         {.code_and_extra = 0x0cc,.length2 = 0x8},
-                         {.code_and_extra = 0x02c,.length2 = 0x8},
-                         {.code_and_extra = 0x0ac,.length2 = 0x8},
-                         {.code_and_extra = 0x06c,.length2 = 0x8},
-                         {.code_and_extra = 0x0ec,.length2 = 0x8},
-                         {.code_and_extra = 0x01c,.length2 = 0x8},
-                         {.code_and_extra = 0x09c,.length2 = 0x8},
-                         {.code_and_extra = 0x05c,.length2 = 0x8},
-                         {.code_and_extra = 0x0dc,.length2 = 0x8},
-                         {.code_and_extra = 0x03c,.length2 = 0x8},
-                         {.code_and_extra = 0x0bc,.length2 = 0x8},
-                         {.code_and_extra = 0x07c,.length2 = 0x8},
-                         {.code_and_extra = 0x0fc,.length2 = 0x8},
-                         {.code_and_extra = 0x002,.length2 = 0x8},
-                         {.code_and_extra = 0x082,.length2 = 0x8},
-                         {.code_and_extra = 0x042,.length2 = 0x8},
-                         {.code_and_extra = 0x0c2,.length2 = 0x8},
-                         {.code_and_extra = 0x022,.length2 = 0x8},
-                         {.code_and_extra = 0x0a2,.length2 = 0x8},
-                         {.code_and_extra = 0x062,.length2 = 0x8},
-                         {.code_and_extra = 0x0e2,.length2 = 0x8},
-                         {.code_and_extra = 0x012,.length2 = 0x8},
-                         {.code_and_extra = 0x092,.length2 = 0x8},
-                         {.code_and_extra = 0x052,.length2 = 0x8},
-                         {.code_and_extra = 0x0d2,.length2 = 0x8},
-                         {.code_and_extra = 0x032,.length2 = 0x8},
-                         {.code_and_extra = 0x0b2,.length2 = 0x8},
-                         {.code_and_extra = 0x072,.length2 = 0x8},
-                         {.code_and_extra = 0x0f2,.length2 = 0x8},
-                         {.code_and_extra = 0x00a,.length2 = 0x8},
-                         {.code_and_extra = 0x08a,.length2 = 0x8},
-                         {.code_and_extra = 0x04a,.length2 = 0x8},
-                         {.code_and_extra = 0x0ca,.length2 = 0x8},
-                         {.code_and_extra = 0x02a,.length2 = 0x8},
-                         {.code_and_extra = 0x0aa,.length2 = 0x8},
-                         {.code_and_extra = 0x06a,.length2 = 0x8},
-                         {.code_and_extra = 0x0ea,.length2 = 0x8},
-                         {.code_and_extra = 0x01a,.length2 = 0x8},
-                         {.code_and_extra = 0x09a,.length2 = 0x8},
-                         {.code_and_extra = 0x05a,.length2 = 0x8},
-                         {.code_and_extra = 0x0da,.length2 = 0x8},
-                         {.code_and_extra = 0x03a,.length2 = 0x8},
-                         {.code_and_extra = 0x0ba,.length2 = 0x8},
-                         {.code_and_extra = 0x07a,.length2 = 0x8},
-                         {.code_and_extra = 0x0fa,.length2 = 0x8},
-                         {.code_and_extra = 0x006,.length2 = 0x8},
-                         {.code_and_extra = 0x086,.length2 = 0x8},
-                         {.code_and_extra = 0x046,.length2 = 0x8},
-                         {.code_and_extra = 0x0c6,.length2 = 0x8},
-                         {.code_and_extra = 0x026,.length2 = 0x8},
-                         {.code_and_extra = 0x0a6,.length2 = 0x8},
-                         {.code_and_extra = 0x066,.length2 = 0x8},
-                         {.code_and_extra = 0x0e6,.length2 = 0x8},
-                         {.code_and_extra = 0x016,.length2 = 0x8},
-                         {.code_and_extra = 0x096,.length2 = 0x8},
-                         {.code_and_extra = 0x056,.length2 = 0x8},
-                         {.code_and_extra = 0x0d6,.length2 = 0x8},
-                         {.code_and_extra = 0x036,.length2 = 0x8},
-                         {.code_and_extra = 0x0b6,.length2 = 0x8},
-                         {.code_and_extra = 0x076,.length2 = 0x8},
-                         {.code_and_extra = 0x0f6,.length2 = 0x8},
-                         {.code_and_extra = 0x00e,.length2 = 0x8},
-                         {.code_and_extra = 0x08e,.length2 = 0x8},
-                         {.code_and_extra = 0x04e,.length2 = 0x8},
-                         {.code_and_extra = 0x0ce,.length2 = 0x8},
-                         {.code_and_extra = 0x02e,.length2 = 0x8},
-                         {.code_and_extra = 0x0ae,.length2 = 0x8},
-                         {.code_and_extra = 0x06e,.length2 = 0x8},
-                         {.code_and_extra = 0x0ee,.length2 = 0x8},
-                         {.code_and_extra = 0x01e,.length2 = 0x8},
-                         {.code_and_extra = 0x09e,.length2 = 0x8},
-                         {.code_and_extra = 0x05e,.length2 = 0x8},
-                         {.code_and_extra = 0x0de,.length2 = 0x8},
-                         {.code_and_extra = 0x03e,.length2 = 0x8},
-                         {.code_and_extra = 0x0be,.length2 = 0x8},
-                         {.code_and_extra = 0x07e,.length2 = 0x8},
-                         {.code_and_extra = 0x0fe,.length2 = 0x8},
-                         {.code_and_extra = 0x001,.length2 = 0x8},
-                         {.code_and_extra = 0x081,.length2 = 0x8},
-                         {.code_and_extra = 0x041,.length2 = 0x8},
-                         {.code_and_extra = 0x0c1,.length2 = 0x8},
-                         {.code_and_extra = 0x021,.length2 = 0x8},
-                         {.code_and_extra = 0x0a1,.length2 = 0x8},
-                         {.code_and_extra = 0x061,.length2 = 0x8},
-                         {.code_and_extra = 0x0e1,.length2 = 0x8},
-                         {.code_and_extra = 0x011,.length2 = 0x8},
-                         {.code_and_extra = 0x091,.length2 = 0x8},
-                         {.code_and_extra = 0x051,.length2 = 0x8},
-                         {.code_and_extra = 0x0d1,.length2 = 0x8},
-                         {.code_and_extra = 0x031,.length2 = 0x8},
-                         {.code_and_extra = 0x0b1,.length2 = 0x8},
-                         {.code_and_extra = 0x071,.length2 = 0x8},
-                         {.code_and_extra = 0x0f1,.length2 = 0x8},
-                         {.code_and_extra = 0x009,.length2 = 0x8},
-                         {.code_and_extra = 0x089,.length2 = 0x8},
-                         {.code_and_extra = 0x049,.length2 = 0x8},
-                         {.code_and_extra = 0x0c9,.length2 = 0x8},
-                         {.code_and_extra = 0x029,.length2 = 0x8},
-                         {.code_and_extra = 0x0a9,.length2 = 0x8},
-                         {.code_and_extra = 0x069,.length2 = 0x8},
-                         {.code_and_extra = 0x0e9,.length2 = 0x8},
-                         {.code_and_extra = 0x019,.length2 = 0x8},
-                         {.code_and_extra = 0x099,.length2 = 0x8},
-                         {.code_and_extra = 0x059,.length2 = 0x8},
-                         {.code_and_extra = 0x0d9,.length2 = 0x8},
-                         {.code_and_extra = 0x039,.length2 = 0x8},
-                         {.code_and_extra = 0x0b9,.length2 = 0x8},
-                         {.code_and_extra = 0x079,.length2 = 0x8},
-                         {.code_and_extra = 0x0f9,.length2 = 0x8},
-                         {.code_and_extra = 0x005,.length2 = 0x8},
-                         {.code_and_extra = 0x085,.length2 = 0x8},
-                         {.code_and_extra = 0x045,.length2 = 0x8},
-                         {.code_and_extra = 0x0c5,.length2 = 0x8},
-                         {.code_and_extra = 0x025,.length2 = 0x8},
-                         {.code_and_extra = 0x0a5,.length2 = 0x8},
-                         {.code_and_extra = 0x065,.length2 = 0x8},
-                         {.code_and_extra = 0x0e5,.length2 = 0x8},
-                         {.code_and_extra = 0x015,.length2 = 0x8},
-                         {.code_and_extra = 0x095,.length2 = 0x8},
-                         {.code_and_extra = 0x055,.length2 = 0x8},
-                         {.code_and_extra = 0x0d5,.length2 = 0x8},
-                         {.code_and_extra = 0x035,.length2 = 0x8},
-                         {.code_and_extra = 0x0b5,.length2 = 0x8},
-                         {.code_and_extra = 0x075,.length2 = 0x8},
-                         {.code_and_extra = 0x0f5,.length2 = 0x8},
-                         {.code_and_extra = 0x00d,.length2 = 0x8},
-                         {.code_and_extra = 0x08d,.length2 = 0x8},
-                         {.code_and_extra = 0x04d,.length2 = 0x8},
-                         {.code_and_extra = 0x0cd,.length2 = 0x8},
-                         {.code_and_extra = 0x02d,.length2 = 0x8},
-                         {.code_and_extra = 0x0ad,.length2 = 0x8},
-                         {.code_and_extra = 0x06d,.length2 = 0x8},
-                         {.code_and_extra = 0x0ed,.length2 = 0x8},
-                         {.code_and_extra = 0x01d,.length2 = 0x8},
-                         {.code_and_extra = 0x09d,.length2 = 0x8},
-                         {.code_and_extra = 0x05d,.length2 = 0x8},
-                         {.code_and_extra = 0x0dd,.length2 = 0x8},
-                         {.code_and_extra = 0x03d,.length2 = 0x8},
-                         {.code_and_extra = 0x0bd,.length2 = 0x8},
-                         {.code_and_extra = 0x07d,.length2 = 0x8},
-                         {.code_and_extra = 0x0fd,.length2 = 0x8},
-                         {.code_and_extra = 0x013,.length2 = 0x9},
-                         {.code_and_extra = 0x113,.length2 = 0x9},
-                         {.code_and_extra = 0x093,.length2 = 0x9},
-                         {.code_and_extra = 0x193,.length2 = 0x9},
-                         {.code_and_extra = 0x053,.length2 = 0x9},
-                         {.code_and_extra = 0x153,.length2 = 0x9},
-                         {.code_and_extra = 0x0d3,.length2 = 0x9},
-                         {.code_and_extra = 0x1d3,.length2 = 0x9},
-                         {.code_and_extra = 0x033,.length2 = 0x9},
-                         {.code_and_extra = 0x133,.length2 = 0x9},
-                         {.code_and_extra = 0x0b3,.length2 = 0x9},
-                         {.code_and_extra = 0x1b3,.length2 = 0x9},
-                         {.code_and_extra = 0x073,.length2 = 0x9},
-                         {.code_and_extra = 0x173,.length2 = 0x9},
-                         {.code_and_extra = 0x0f3,.length2 = 0x9},
-                         {.code_and_extra = 0x1f3,.length2 = 0x9},
-                         {.code_and_extra = 0x00b,.length2 = 0x9},
-                         {.code_and_extra = 0x10b,.length2 = 0x9},
-                         {.code_and_extra = 0x08b,.length2 = 0x9},
-                         {.code_and_extra = 0x18b,.length2 = 0x9},
-                         {.code_and_extra = 0x04b,.length2 = 0x9},
-                         {.code_and_extra = 0x14b,.length2 = 0x9},
-                         {.code_and_extra = 0x0cb,.length2 = 0x9},
-                         {.code_and_extra = 0x1cb,.length2 = 0x9},
-                         {.code_and_extra = 0x02b,.length2 = 0x9},
-                         {.code_and_extra = 0x12b,.length2 = 0x9},
-                         {.code_and_extra = 0x0ab,.length2 = 0x9},
-                         {.code_and_extra = 0x1ab,.length2 = 0x9},
-                         {.code_and_extra = 0x06b,.length2 = 0x9},
-                         {.code_and_extra = 0x16b,.length2 = 0x9},
-                         {.code_and_extra = 0x0eb,.length2 = 0x9},
-                         {.code_and_extra = 0x1eb,.length2 = 0x9},
-                         {.code_and_extra = 0x01b,.length2 = 0x9},
-                         {.code_and_extra = 0x11b,.length2 = 0x9},
-                         {.code_and_extra = 0x09b,.length2 = 0x9},
-                         {.code_and_extra = 0x19b,.length2 = 0x9},
-                         {.code_and_extra = 0x05b,.length2 = 0x9},
-                         {.code_and_extra = 0x15b,.length2 = 0x9},
-                         {.code_and_extra = 0x0db,.length2 = 0x9},
-                         {.code_and_extra = 0x1db,.length2 = 0x9},
-                         {.code_and_extra = 0x03b,.length2 = 0x9},
-                         {.code_and_extra = 0x13b,.length2 = 0x9},
-                         {.code_and_extra = 0x0bb,.length2 = 0x9},
-                         {.code_and_extra = 0x1bb,.length2 = 0x9},
-                         {.code_and_extra = 0x07b,.length2 = 0x9},
-                         {.code_and_extra = 0x17b,.length2 = 0x9},
-                         {.code_and_extra = 0x0fb,.length2 = 0x9},
-                         {.code_and_extra = 0x1fb,.length2 = 0x9},
-                         {.code_and_extra = 0x007,.length2 = 0x9},
-                         {.code_and_extra = 0x107,.length2 = 0x9},
-                         {.code_and_extra = 0x087,.length2 = 0x9},
-                         {.code_and_extra = 0x187,.length2 = 0x9},
-                         {.code_and_extra = 0x047,.length2 = 0x9},
-                         {.code_and_extra = 0x147,.length2 = 0x9},
-                         {.code_and_extra = 0x0c7,.length2 = 0x9},
-                         {.code_and_extra = 0x1c7,.length2 = 0x9},
-                         {.code_and_extra = 0x027,.length2 = 0x9},
-                         {.code_and_extra = 0x127,.length2 = 0x9},
-                         {.code_and_extra = 0x0a7,.length2 = 0x9},
-                         {.code_and_extra = 0x1a7,.length2 = 0x9},
-                         {.code_and_extra = 0x067,.length2 = 0x9},
-                         {.code_and_extra = 0x167,.length2 = 0x9},
-                         {.code_and_extra = 0x0e7,.length2 = 0x9},
-                         {.code_and_extra = 0x1e7,.length2 = 0x9},
-                         {.code_and_extra = 0x017,.length2 = 0x9},
-                         {.code_and_extra = 0x117,.length2 = 0x9},
-                         {.code_and_extra = 0x097,.length2 = 0x9},
-                         {.code_and_extra = 0x197,.length2 = 0x9},
-                         {.code_and_extra = 0x057,.length2 = 0x9},
-                         {.code_and_extra = 0x157,.length2 = 0x9},
-                         {.code_and_extra = 0x0d7,.length2 = 0x9},
-                         {.code_and_extra = 0x1d7,.length2 = 0x9},
-                         {.code_and_extra = 0x037,.length2 = 0x9},
-                         {.code_and_extra = 0x137,.length2 = 0x9},
-                         {.code_and_extra = 0x0b7,.length2 = 0x9},
-                         {.code_and_extra = 0x1b7,.length2 = 0x9},
-                         {.code_and_extra = 0x077,.length2 = 0x9},
-                         {.code_and_extra = 0x177,.length2 = 0x9},
-                         {.code_and_extra = 0x0f7,.length2 = 0x9},
-                         {.code_and_extra = 0x1f7,.length2 = 0x9},
-                         {.code_and_extra = 0x00f,.length2 = 0x9},
-                         {.code_and_extra = 0x10f,.length2 = 0x9},
-                         {.code_and_extra = 0x08f,.length2 = 0x9},
-                         {.code_and_extra = 0x18f,.length2 = 0x9},
-                         {.code_and_extra = 0x04f,.length2 = 0x9},
-                         {.code_and_extra = 0x14f,.length2 = 0x9},
-                         {.code_and_extra = 0x0cf,.length2 = 0x9},
-                         {.code_and_extra = 0x1cf,.length2 = 0x9},
-                         {.code_and_extra = 0x02f,.length2 = 0x9},
-                         {.code_and_extra = 0x12f,.length2 = 0x9},
-                         {.code_and_extra = 0x0af,.length2 = 0x9},
-                         {.code_and_extra = 0x1af,.length2 = 0x9},
-                         {.code_and_extra = 0x06f,.length2 = 0x9},
-                         {.code_and_extra = 0x16f,.length2 = 0x9},
-                         {.code_and_extra = 0x0ef,.length2 = 0x9},
-                         {.code_and_extra = 0x1ef,.length2 = 0x9},
-                         {.code_and_extra = 0x01f,.length2 = 0x9},
-                         {.code_and_extra = 0x11f,.length2 = 0x9},
-                         {.code_and_extra = 0x09f,.length2 = 0x9},
-                         {.code_and_extra = 0x19f,.length2 = 0x9},
-                         {.code_and_extra = 0x05f,.length2 = 0x9},
-                         {.code_and_extra = 0x15f,.length2 = 0x9},
-                         {.code_and_extra = 0x0df,.length2 = 0x9},
-                         {.code_and_extra = 0x1df,.length2 = 0x9},
-                         {.code_and_extra = 0x03f,.length2 = 0x9},
-                         {.code_and_extra = 0x13f,.length2 = 0x9},
-                         {.code_and_extra = 0x0bf,.length2 = 0x9},
-                         {.code_and_extra = 0x1bf,.length2 = 0x9},
-                         {.code_and_extra = 0x07f,.length2 = 0x9},
-                         {.code_and_extra = 0x17f,.length2 = 0x9},
-                         {.code_and_extra = 0x0ff,.length2 = 0x9},
-                         {.code_and_extra = 0x1ff,.length2 = 0x9},
-                         {.code_and_extra = 0x000,.length2 = 0x7},
-                         {.code_and_extra = 0x040,.length2 = 0x7},
-                         {.code_and_extra = 0x020,.length2 = 0x7},
-                         {.code_and_extra = 0x060,.length2 = 0x7},
-                         {.code_and_extra = 0x010,.length2 = 0x7},
-                         {.code_and_extra = 0x050,.length2 = 0x7},
-                         {.code_and_extra = 0x030,.length2 = 0x7},
-                         {.code_and_extra = 0x070,.length2 = 0x7},
-                         {.code_and_extra = 0x008,.length2 = 0x7},
-                         {.code_and_extra = 0x048,.length2 = 0x7},
-                         {.code_and_extra = 0x028,.length2 = 0x7},
-                         {.code_and_extra = 0x068,.length2 = 0x7},
-                         {.code_and_extra = 0x018,.length2 = 0x7},
-                         {.code_and_extra = 0x058,.length2 = 0x7},
-                         {.code_and_extra = 0x038,.length2 = 0x7},
-                         {.code_and_extra = 0x078,.length2 = 0x7},
-                         {.code_and_extra = 0x004,.length2 = 0x7},
-                         {.code_and_extra = 0x044,.length2 = 0x7},
-                         {.code_and_extra = 0x024,.length2 = 0x7},
-                         {.code_and_extra = 0x064,.length2 = 0x7},
-                         {.code_and_extra = 0x014,.length2 = 0x7},
-                         {.code_and_extra = 0x054,.length2 = 0x7},
-                         {.code_and_extra = 0x034,.length2 = 0x7},
-                         {.code_and_extra = 0x074,.length2 = 0x7},
-                         {.code_and_extra = 0x003,.length2 = 0x8},
-                         {.code_and_extra = 0x083,.length2 = 0x8},
-                         {.code_and_extra = 0x043,.length2 = 0x8},
-                         {.code_and_extra = 0x0c3,.length2 = 0x8},
-                         {.code_and_extra = 0x023,.length2 = 0x8},
-                         {.code_and_extra = 0x0a3,.length2 = 0x8},
-                         {.code_and_extra = 0x063,.length2 = 0x8},
-                         {.code_and_extra = 0x0e3,.length2 = 0x8},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0},
-                         {.code_and_extra = 0x000,.length2 = 0x0}},
+                         {{{.code_and_extra = 0x00c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x08c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x04c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0cc,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x02c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ac,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x06c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ec,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x01c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x09c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x05c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0dc,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x03c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0bc,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x07c,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0fc,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x002,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x082,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x042,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x022,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x062,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x012,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x092,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x052,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0d2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x032,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0b2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x072,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0f2,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x00a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x08a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x04a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ca,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x02a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0aa,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x06a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ea,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x01a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x09a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x05a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0da,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x03a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ba,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x07a,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0fa,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x006,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x086,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x046,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x026,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x066,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x016,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x096,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x056,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0d6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x036,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0b6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x076,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0f6,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x00e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x08e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x04e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ce,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x02e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ae,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x06e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ee,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x01e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x09e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x05e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0de,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x03e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0be,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x07e,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0fe,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x001,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x081,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x041,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x021,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x061,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x011,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x091,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x051,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0d1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x031,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0b1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x071,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0f1,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x009,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x089,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x049,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x029,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x069,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x019,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x099,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x059,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0d9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x039,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0b9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x079,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0f9,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x005,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x085,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x045,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x025,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x065,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x015,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x095,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x055,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0d5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x035,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0b5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x075,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0f5,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x00d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x08d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x04d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0cd,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x02d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ad,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x06d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0ed,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x01d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x09d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x05d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0dd,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x03d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0bd,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x07d,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0fd,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x013,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x113,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x093,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x193,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x053,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x153,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0d3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1d3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x033,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x133,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0b3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1b3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x073,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x173,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0f3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1f3,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x00b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x10b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x08b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x18b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x04b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x14b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0cb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1cb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x02b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x12b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0ab,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1ab,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x06b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x16b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0eb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1eb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x01b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x11b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x09b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x19b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x05b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x15b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0db,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1db,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x03b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x13b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0bb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1bb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x07b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x17b,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0fb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1fb,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x007,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x107,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x087,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x187,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x047,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x147,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0c7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1c7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x027,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x127,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0a7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1a7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x067,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x167,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0e7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1e7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x017,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x117,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x097,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x197,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x057,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x157,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0d7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1d7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x037,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x137,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0b7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1b7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x077,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x177,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0f7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1f7,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x00f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x10f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x08f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x18f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x04f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x14f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0cf,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1cf,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x02f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x12f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0af,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1af,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x06f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x16f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0ef,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1ef,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x01f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x11f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x09f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x19f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x05f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x15f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0df,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1df,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x03f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x13f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0bf,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1bf,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x07f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x17f,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x0ff,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x1ff,.length2 = 0x9}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x040,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x020,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x060,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x010,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x050,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x030,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x070,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x008,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x048,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x028,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x068,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x018,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x058,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x038,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x078,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x004,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x044,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x024,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x064,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x014,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x054,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x034,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x074,.length2 = 0x7}}},
+                         {{{.code_and_extra = 0x003,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x083,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x043,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0c3,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x023,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0a3,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x063,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x0e3,.length2 = 0x8}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}},
+                         {{{.code_and_extra = 0x000,.length2 = 0x0}}}},
        .dist_table = {
-                      {.code_and_extra = 0x000,.length2 = 0x5},
-                      {.code_and_extra = 0x010,.length2 = 0x5},
-                      {.code_and_extra = 0x008,.length2 = 0x5},
-                      {.code_and_extra = 0x018,.length2 = 0x5},
-                      {.code_and_extra = 0x10004,.length2 = 0x5},
-                      {.code_and_extra = 0x10014,.length2 = 0x5},
-                      {.code_and_extra = 0x2000c,.length2 = 0x5},
-                      {.code_and_extra = 0x2001c,.length2 = 0x5},
-                      {.code_and_extra = 0x30002,.length2 = 0x5},
-                      {.code_and_extra = 0x30012,.length2 = 0x5},
-                      {.code_and_extra = 0x4000a,.length2 = 0x5},
-                      {.code_and_extra = 0x4001a,.length2 = 0x5},
-                      {.code_and_extra = 0x50006,.length2 = 0x5},
-                      {.code_and_extra = 0x50016,.length2 = 0x5},
-                      {.code_and_extra = 0x6000e,.length2 = 0x5},
-                      {.code_and_extra = 0x6001e,.length2 = 0x5},
-                      {.code_and_extra = 0x70001,.length2 = 0x5},
-                      {.code_and_extra = 0x70011,.length2 = 0x5},
-                      {.code_and_extra = 0x80009,.length2 = 0x5},
-                      {.code_and_extra = 0x80019,.length2 = 0x5},
-                      {.code_and_extra = 0x90005,.length2 = 0x5},
-                      {.code_and_extra = 0x90015,.length2 = 0x5},
-                      {.code_and_extra = 0xa000d,.length2 = 0x5},
-                      {.code_and_extra = 0xa001d,.length2 = 0x5},
-                      {.code_and_extra = 0xb0003,.length2 = 0x5},
-                      {.code_and_extra = 0xb0013,.length2 = 0x5},
-                      {.code_and_extra = 0xc000b,.length2 = 0x5},
-                      {.code_and_extra = 0xc001b,.length2 = 0x5},
-                      {.code_and_extra = 0xd0007,.length2 = 0x5},
-                      {.code_and_extra = 0xd0017,.length2 = 0x5},
-                      {.code_and_extra = 0x000,.length2 = 0x0}}
+                      {{{.code_and_extra = 0x000,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x010,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x008,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x018,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x10004,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x10014,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x2000c,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x2001c,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x30002,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x30012,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x4000a,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x4001a,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x50006,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x50016,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x6000e,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x6001e,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x70001,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x70011,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x80009,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x80019,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x90005,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x90015,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xa000d,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xa001d,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xb0003,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xb0013,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xc000b,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xc001b,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xd0007,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0xd0017,.length2 = 0x5}}},
+                      {{{.code_and_extra = 0x000,.length2 = 0x0}}}}
 };
 
 struct slver {
@@ -624,6 +618,9 @@ struct slver isal_create_hufftables_subset_slver = { 0x0087, 0x01, 0x00 };
 extern uint32_t build_huff_tree(struct heap_tree *heap, uint64_t heap_size, uint64_t node_ptr);
 extern void build_heap(uint64_t * heap, uint64_t heap_size);
 
+static uint32_t convert_dist_to_dist_sym(uint32_t dist);
+static uint32_t convert_length_to_len_sym(uint32_t length);
+
 static const uint8_t bitrev8[0x100] = {
        0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
        0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
@@ -683,8 +680,8 @@ void isal_update_histogram_base(uint8_t * start_stream, int length,
        end_stream = start_stream + length;
        memset(last_seen, 0, sizeof(histogram->hash_table));    /* Initialize last_seen to be 0. */
        for (current = start_stream; current < end_stream - 3; current++) {
-               literal = *(uint32_t *) current;
-               hash = compute_hash(literal) & HASH_MASK;
+               literal = load_u32(current);
+               hash = compute_hash(literal) & LVL0_HASH_MASK;
                seen = last_seen[hash];
                last_seen[hash] = (current - start_stream) & 0xFFFF;
                dist = (current - start_stream - seen) & 0xFFFF;
@@ -703,8 +700,8 @@ void isal_update_histogram_base(uint8_t * start_stream, int length,
                                        end = end_stream - 3;
                                next_hash++;
                                for (; next_hash < end; next_hash++) {
-                                       literal = *(uint32_t *) next_hash;
-                                       hash = compute_hash(literal) & HASH_MASK;
+                                       literal = load_u32(next_hash);
+                                       hash = compute_hash(literal) & LVL0_HASH_MASK;
                                        last_seen[hash] = (next_hash - start_stream) & 0xFFFF;
                                }
 
@@ -717,66 +714,32 @@ void isal_update_histogram_base(uint8_t * start_stream, int length,
                }
                lit_len_histogram[literal & 0xFF] += 1;
        }
-       literal = literal >> 8;
-       hash = compute_hash(literal) & HASH_MASK;
-       seen = last_seen[hash];
-       last_seen[hash] = (current - start_stream) & 0xFFFF;
-       dist = (current - start_stream - seen) & 0xFFFF;
-       if (dist < D) {
-               match_length = compare258(current - dist, current, end_stream - current);
-               if (match_length >= SHORTEST_MATCH) {
-                       dist_histogram[convert_dist_to_dist_sym(dist)] += 1;
-                       lit_len_histogram[convert_length_to_len_sym(match_length)] += 1;
-                       lit_len_histogram[256] += 1;
-                       return;
-               }
-       } else
-               lit_len_histogram[literal & 0xFF] += 1;
-       lit_len_histogram[(literal >> 8) & 0xFF] += 1;
-       lit_len_histogram[(literal >> 16) & 0xFF] += 1;
+
+       for (; current < end_stream; current++)
+               lit_len_histogram[*current] += 1;
+
        lit_len_histogram[256] += 1;
        return;
 }
 
-uint32_t convert_dist_to_dist_sym(uint32_t dist)
+/**
+ * @brief  Returns the deflate symbol value for a look back distance.
+ */
+static uint32_t convert_dist_to_dist_sym(uint32_t dist)
 {
        assert(dist <= 32768 && dist > 0);
-       if (dist <= 2)
-               return dist - 1;
-       else if (dist <= 4)
-               return 0 + (dist - 1) / 1;
-       else if (dist <= 8)
-               return 2 + (dist - 1) / 2;
-       else if (dist <= 16)
-               return 4 + (dist - 1) / 4;
-       else if (dist <= 32)
-               return 6 + (dist - 1) / 8;
-       else if (dist <= 64)
-               return 8 + (dist - 1) / 16;
-       else if (dist <= 128)
-               return 10 + (dist - 1) / 32;
-       else if (dist <= 256)
-               return 12 + (dist - 1) / 64;
-       else if (dist <= 512)
-               return 14 + (dist - 1) / 128;
-       else if (dist <= 1024)
-               return 16 + (dist - 1) / 256;
-       else if (dist <= 2048)
-               return 18 + (dist - 1) / 512;
-       else if (dist <= 4096)
-               return 20 + (dist - 1) / 1024;
-       else if (dist <= 8192)
-               return 22 + (dist - 1) / 2048;
-       else if (dist <= 16384)
-               return 24 + (dist - 1) / 4096;
-       else if (dist <= 32768)
-               return 26 + (dist - 1) / 8192;
-       else
-               return ~0;      /* ~0 is an invalid distance code */
-
+       if (dist <= 32768) {
+               uint32_t msb = dist > 4 ? bsr(dist - 1) - 2 : 0;
+               return (msb * 2) + ((dist - 1) >> msb);
+       } else {
+               return ~0;
+       }
 }
 
-uint32_t convert_length_to_len_sym(uint32_t length)
+/**
+ * @brief  Returns the deflate symbol value for a repeat length.
+ */
+static uint32_t convert_length_to_len_sym(uint32_t length)
 {
        assert(length > 2 && length < 259);
 
@@ -870,6 +833,44 @@ static inline uint32_t init_heap64(struct heap_tree *heap_space, uint64_t * hist
        return heap_size;
 }
 
+static inline uint32_t init_heap64_semi_complete(struct heap_tree *heap_space,
+                                                uint64_t * histogram, uint64_t hist_size,
+                                                uint64_t complete_start)
+{
+       uint32_t heap_size, i;
+
+       memset(heap_space, 0, sizeof(struct heap_tree));
+
+       heap_size = 0;
+       for (i = 0; i < complete_start; i++) {
+               if (histogram[i] != 0)
+                       heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i;
+       }
+
+       for (; i < hist_size; i++)
+               heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i;
+
+       // make sure heap has at least two elements in it
+       if (heap_size < 2) {
+               if (heap_size == 0) {
+                       heap_space->heap[1] = 1ULL << FREQ_SHIFT;
+                       heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1;
+                       heap_size = 2;
+               } else {
+                       // heap size == 1
+                       if (histogram[0] == 0)
+                               heap_space->heap[2] = 1ULL << FREQ_SHIFT;
+                       else
+                               heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1;
+                       heap_size = 2;
+               }
+       }
+
+       build_heap(heap_space->heap, heap_size);
+
+       return heap_size;
+}
+
 static inline uint32_t init_heap64_complete(struct heap_tree *heap_space, uint64_t * histogram,
                                            uint64_t hist_size)
 {
@@ -929,6 +930,7 @@ static inline uint32_t fix_code_lens(struct heap_tree *heap_space, uint32_t root
                                code_len--;
                }
 
+               bl_count[0] = 0;
                for (i = 1; i <= code_len; i++)
                        bl_count[i] = code_len_count[i];
                for (; i <= max_code_len; i++)
@@ -941,6 +943,7 @@ static inline uint32_t fix_code_lens(struct heap_tree *heap_space, uint32_t root
                        for (; code_len_count[k] == 0; k++) ;
                }
        } else {
+               bl_count[0] = 0;
                for (i = 1; i <= code_len; i++)
                        bl_count[i] = code_len_count[i];
                for (; i <= max_code_len; i++)
@@ -969,8 +972,16 @@ gen_huff_code_lens(struct heap_tree *heap_space, uint32_t heap_size, uint32_t *
 
 }
 
-inline uint32_t set_huff_codes(struct huff_code *huff_code_table, int table_length,
-                              uint32_t * count)
+/**
+ * @brief Determines the code each element of a deflate compliant huffman tree and stores
+ * it in a lookup table
+ * @requires table has been initialized to already contain the code length for each element.
+ * @param table: A lookup table used to store the codes.
+ * @param table_length: The length of table.
+ * @param count: a histogram representing the number of occurences of codes of a given length
+ */
+static inline uint32_t set_huff_codes(struct huff_code *huff_code_table, int table_length,
+                                     uint32_t * count)
 {
        /* Uses the algorithm mentioned in the deflate standard, Rfc 1951. */
        int i;
@@ -1025,11 +1036,24 @@ static inline uint32_t set_dist_huff_codes(struct huff_code *codes, uint32_t * b
        return max_code;
 }
 
-int create_huffman_header(struct BitBuf2 *header_bitbuf,
-                         struct huff_code *lookup_table,
-                         struct rl_code *huffman_rep,
-                         uint16_t huffman_rep_length, uint32_t end_of_block,
-                         uint32_t hclen, uint32_t hlit, uint32_t hdist)
+/**
+ * @brief Creates the header for run length encoded huffman trees.
+ * @param header: the output header.
+ * @param lookup_table: a huffman lookup table.
+ * @param huffman_rep: a run length encoded huffman tree.
+ * @extra_bits: extra bits associated with the corresponding spot in huffman_rep
+ * @param huffman_rep_length: the length of huffman_rep.
+ * @param end_of_block: Value determining whether end of block header is produced or not;
+ * 0 corresponds to not end of block and all other inputs correspond to end of block.
+ * @param hclen: Length of huffman code for huffman codes minus 4.
+ * @param hlit: Length of literal/length table minus 257.
+ * @parm hdist: Length of distance table minus 1.
+ */
+static int create_huffman_header(struct BitBuf2 *header_bitbuf,
+                                struct huff_code *lookup_table,
+                                struct rl_code *huffman_rep,
+                                uint16_t huffman_rep_length, uint32_t end_of_block,
+                                uint32_t hclen, uint32_t hlit, uint32_t hdist)
 {
        /* hlit, hdist, hclen are as defined in the deflate standard, head is the
         * first three deflate header bits.*/
@@ -1066,9 +1090,19 @@ int create_huffman_header(struct BitBuf2 *header_bitbuf,
        return bit_count;
 }
 
-inline int create_header(struct BitBuf2 *header_bitbuf, struct rl_code *huffman_rep,
-                        uint32_t length, uint64_t * histogram, uint32_t hlit,
-                        uint32_t hdist, uint32_t end_of_block)
+/**
+ * @brief Creates the dynamic huffman deflate header.
+ * @returns Returns the  length of header in bits.
+ * @requires This function requires header is large enough to store the whole header.
+ * @param header: The output header.
+ * @param lit_huff_table: A literal/length code huffman lookup table.\
+ * @param dist_huff_table: A distance huffman code lookup table.
+ * @param end_of_block: Value determining whether end of block header is produced or not;
+ * 0 corresponds to not end of block and all other inputs correspond to end of block.
+ */
+static inline int create_header(struct BitBuf2 *header_bitbuf, struct rl_code *huffman_rep,
+                               uint32_t length, uint64_t * histogram, uint32_t hlit,
+                               uint32_t hdist, uint32_t end_of_block)
 {
        int i;
 
@@ -1211,8 +1245,15 @@ static inline uint32_t rl_encode(uint16_t * codes, uint32_t num_codes, uint64_t
        return (uint32_t) (pout - out);
 }
 
-void create_code_tables(uint16_t * code_table, uint8_t * code_length_table, uint32_t length,
-                       struct huff_code *hufftable)
+/**
+ * @brief Creates a two table representation of huffman codes.
+ * @param code_table: output table containing the code
+ * @param code_size_table: output table containing the code length
+ * @param length: the lenght of hufftable
+ * @param hufftable: a huffman lookup table
+ */
+static void create_code_tables(uint16_t * code_table, uint8_t * code_length_table,
+                              uint32_t length, struct huff_code *hufftable)
 {
        int i;
        for (i = 0; i < length; i++) {
@@ -1221,7 +1262,16 @@ void create_code_tables(uint16_t * code_table, uint8_t * code_length_table, uint
        }
 }
 
-void create_packed_len_table(uint32_t * packed_table, struct huff_code *lit_len_hufftable)
+/**
+ * @brief Creates a packed representation of length huffman codes.
+ * @details In packed_table, bits 32:8 contain the extra bits appended to the huffman
+ * code and bits 8:0 contain the code length.
+ * @param packed_table: the output table
+ * @param length: the length of lit_len_hufftable
+ * @param lit_len_hufftable: a literal/length huffman lookup table
+ */
+static void create_packed_len_table(uint32_t * packed_table,
+                                   struct huff_code *lit_len_hufftable)
 {
        int i, count = 0;
        uint16_t extra_bits;
@@ -1251,8 +1301,16 @@ void create_packed_len_table(uint32_t * packed_table, struct huff_code *lit_len_
            (lit_len_hufftable[LIT_LEN - 1].length);
 }
 
-void create_packed_dist_table(uint32_t * packed_table, uint32_t length,
-                             struct huff_code *dist_hufftable)
+/**
+ * @brief Creates a packed representation of distance  huffman codes.
+ * @details In packed_table, bits 32:8 contain the extra bits appended to the huffman
+ * code and bits 8:0 contain the code length.
+ * @param packed_table: the output table
+ * @param length: the length of lit_len_hufftable
+ * @param dist_hufftable: a distance huffman lookup table
+ */
+static void create_packed_dist_table(uint32_t * packed_table, uint32_t length,
+                                    struct huff_code *dist_hufftable)
 {
        int i, count = 0;
        uint16_t extra_bits;
@@ -1281,8 +1339,15 @@ void create_packed_dist_table(uint32_t * packed_table, uint32_t length,
        }
 }
 
-int are_hufftables_useable(struct huff_code *lit_len_hufftable,
-                          struct huff_code *dist_hufftable)
+/**
+ * @brief Checks to see if the hufftable is usable by igzip
+ *
+ * @param lit_len_hufftable: literal/length huffman code
+ * @param dist_hufftable: distance huffman code
+ * @returns Returns 0 if the table is usable
+ */
+static int are_hufftables_useable(struct huff_code *lit_len_hufftable,
+                                 struct huff_code *dist_hufftable)
 {
        int max_lit_code_len = 0, max_len_code_len = 0, max_dist_code_len = 0;
        int dist_extra_bits = 0, len_extra_bits = 0;
@@ -1347,7 +1412,6 @@ int isal_create_hufftables(struct isal_hufftables *hufftables,
        uint16_t *dcodes = hufftables->dcodes;
        uint8_t *lit_table_sizes = hufftables->lit_table_sizes;
        uint8_t *dcodes_sizes = hufftables->dcodes_sizes;
-       uint8_t *deflate_hdr = hufftables->deflate_hdr;
        uint64_t *lit_len_histogram = histogram->lit_len_histogram;
        uint64_t *dist_histogram = histogram->dist_histogram;
 
@@ -1387,7 +1451,7 @@ int isal_create_hufftables(struct isal_hufftables *hufftables,
        create_packed_len_table(len_table, lit_huff_table);
        create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table);
 
-       set_buf(&header_bitbuf, deflate_hdr, sizeof(deflate_hdr));
+       set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr));
        init(&header_bitbuf);
 
        hlit = max_lit_len_sym - 256;
@@ -1438,13 +1502,14 @@ int isal_create_hufftables_subset(struct isal_hufftables *hufftables,
        uint16_t *dcodes = hufftables->dcodes;
        uint8_t *lit_table_sizes = hufftables->lit_table_sizes;
        uint8_t *dcodes_sizes = hufftables->dcodes_sizes;
-       uint8_t *deflate_hdr = hufftables->deflate_hdr;
        uint64_t *lit_len_histogram = histogram->lit_len_histogram;
        uint64_t *dist_histogram = histogram->dist_histogram;
 
        memset(hufftables, 0, sizeof(struct isal_hufftables));
 
-       heap_size = init_heap64(&heap_space, lit_len_histogram, LIT_LEN);
+       heap_size =
+           init_heap64_semi_complete(&heap_space, lit_len_histogram, LIT_LEN,
+                                     ISAL_DEF_LIT_SYMBOLS);
        gen_huff_code_lens(&heap_space, heap_size, code_len_count,
                           (struct huff_code *)lit_huff_table, LIT_LEN, MAX_DEFLATE_CODE_LEN);
        max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count);
@@ -1478,7 +1543,7 @@ int isal_create_hufftables_subset(struct isal_hufftables *hufftables,
        create_packed_len_table(len_table, lit_huff_table);
        create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table);
 
-       set_buf(&header_bitbuf, deflate_hdr, sizeof(deflate_hdr));
+       set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr));
        init(&header_bitbuf);
 
        hlit = max_lit_len_sym - 256;
@@ -1505,7 +1570,7 @@ int isal_create_hufftables_subset(struct isal_hufftables *hufftables,
        return 0;
 }
 
-void expand_hufftables_icf(struct hufftables_icf *hufftables)
+static void expand_hufftables_icf(struct hufftables_icf *hufftables)
 {
        uint32_t i, eb, j, k, len, code;
        struct huff_code orig[21], *p_code;
@@ -1536,7 +1601,7 @@ void expand_hufftables_icf(struct hufftables_icf *hufftables)
        dist_codes[DIST_LEN].length = 0;
 }
 
-void
+uint64_t
 create_hufftables_icf(struct BitBuf2 *bb, struct hufftables_icf *hufftables,
                      struct isal_mod_hist *hist, uint32_t end_of_block)
 {
@@ -1605,21 +1670,25 @@ create_hufftables_icf(struct BitBuf2 *bb, struct hufftables_icf *hufftables,
                    (static_d_codes[i].length + dist_code_extra_bits[i]) * d_hist[i];
        }
 
-       expand_hufftables_icf(hufftables);
-
-       num_cl_tokens =
-           rl_encode(combined_table, max_ll_code + max_d_code + 2, cl_counts, cl_tokens);
+       if (static_compressed_len > compressed_len) {
+               num_cl_tokens = rl_encode(combined_table, max_ll_code + max_d_code + 2,
+                                         cl_counts, cl_tokens);
 
-       /* Create header */
-       create_header(bb, cl_tokens, num_cl_tokens, cl_counts, max_ll_code - 256, max_d_code,
-                     end_of_block);
-       compressed_len += 8 * buffer_used(bb) + bb->m_bit_count;
+               /* Create header */
+               create_header(bb, cl_tokens, num_cl_tokens, cl_counts, max_ll_code - 256,
+                             max_d_code, end_of_block);
+               compressed_len += 8 * buffer_used(bb) + bb->m_bit_count;
+       }
 
-       if (static_compressed_len < compressed_len) {
+       /* Substitute in static block since it creates smaller block */
+       if (static_compressed_len <= compressed_len) {
                memcpy(hufftables, &static_hufftables, sizeof(struct hufftables_icf));
-               expand_hufftables_icf(hufftables);
                memcpy(bb, &bb_tmp, sizeof(struct BitBuf2));
                end_of_block = end_of_block ? 1 : 0;
                write_bits(bb, 0x2 | end_of_block, 3);
+               compressed_len = static_compressed_len;
        }
+
+       expand_hufftables_icf(hufftables);
+       return compressed_len;
 }
index bc7a8917428b0621dd6daee32abf711a6029fdef..d353d27ea4caa08be78252a40b233ef010ba167a 100644 (file)
 #ifndef HUFF_CODES_H
 #define HUFF_CODES_H
 
-#include <immintrin.h>
 #include <stdint.h>
 #include <string.h>
 #include <assert.h>
 #include "igzip_lib.h"
 #include "bitbuf2.h"
 
+#if __x86_64__  || __i386__ || _M_X64 || _M_IX86
+# include <immintrin.h>
 #ifdef _MSC_VER
 # include <intrin.h>
 #else
 # include <x86intrin.h>
 #endif
+#endif //__x86_64__  || __i386__ || _M_X64 || _M_IX86
 
 #define LIT_LEN ISAL_DEF_LIT_LEN_SYMBOLS
 #define DIST_LEN ISAL_DEF_DIST_SYMBOLS
 #define INVALID_DIST_HUFFCODE 1
 #define INVALID_HUFFCODE 1
 
-#define HASH_MASK  (IGZIP_HASH_SIZE - 1)
+#define HASH8K_HASH_MASK  (IGZIP_HASH8K_HASH_SIZE - 1)
+#define HASH_HIST_HASH_MASK  (IGZIP_HASH_HIST_SIZE - 1)
+#define HASH_MAP_HASH_MASK  (IGZIP_HASH_MAP_HASH_SIZE - 1)
+
+#define LVL0_HASH_MASK  (IGZIP_LVL0_HASH_SIZE - 1)
+#define LVL1_HASH_MASK  (IGZIP_LVL1_HASH_SIZE - 1)
+#define LVL2_HASH_MASK  (IGZIP_LVL2_HASH_SIZE - 1)
+#define LVL3_HASH_MASK  (IGZIP_LVL3_HASH_SIZE - 1)
 #define SHORTEST_MATCH  4
 
 #define LENGTH_BITS 5
  */
 struct huff_code {
        union {
+                struct {
+                        uint32_t code_and_extra:24;
+                        uint32_t length2:8;
+                };
+
                struct {
                        uint16_t code;
                        uint8_t extra_bit_count;
                        uint8_t length;
                };
-               struct {
-                       uint32_t code_and_extra:24;
-                       uint32_t length2:8;
-               };
+
+               uint32_t code_and_length;
        };
 };
 
@@ -126,115 +138,18 @@ struct rl_code {
 };
 
 struct hufftables_icf {
-       struct huff_code dist_table[31];
-       struct huff_code lit_len_table[513];
-};
-
-/**
- * @brief  Returns the deflate symbol value for a repeat length.
-*/
-uint32_t convert_length_to_len_sym(uint32_t length);
-
-/**
- * @brief  Returns the deflate symbol value for a look back distance.
- */
-uint32_t convert_dist_to_dist_sym(uint32_t dist);
-
-/**
- * @brief Determines the code each element of a deflate compliant huffman tree and stores
- * it in a lookup table
- * @requires table has been initialized to already contain the code length for each element.
- * @param table: A lookup table used to store the codes.
- * @param table_length: The length of table.
- * @param count: a histogram representing the number of occurences of codes of a given length
- */
-uint32_t set_huff_codes(struct huff_code *table, int table_length, uint32_t * count);
-
-/**
- * @brief Checks if a literal/length huffman table can be stored in the igzip hufftables files.
- * @param table: A literal/length huffman code lookup table.
- * @returns index of the first symbol which fails and 0xFFFF otherwise.
- */
-uint16_t valid_lit_huff_table(struct huff_code *huff_code_table);
-
-/**
- * @brief Checks if a distance huffman table can be stored in the igzip hufftables files.
- * @param table: A distance huffman code lookup table.
- * @returnsthe index of the first symbol which fails and 0xFFFF otherwise.
- */
-uint16_t valid_dist_huff_table(struct huff_code *huff_code_table);
-
-/**
- * @brief Creates the dynamic huffman deflate header.
- * @returns Returns the  length of header in bits.
- * @requires This function requires header is large enough to store the whole header.
- * @param header: The output header.
- * @param lit_huff_table: A literal/length code huffman lookup table.
- * @param dist_huff_table: A distance huffman code lookup table.
- * @param end_of_block: Value determining whether end of block header is produced or not;
- * 0 corresponds to not end of block and all other inputs correspond to end of block.
- */
-int create_header(struct BitBuf2 *header_bitbuf, struct rl_code *huffman_rep, uint32_t length,
-               uint64_t * histogram, uint32_t hlit, uint32_t hdist, uint32_t end_of_block);
-
-/**
- * @brief Creates the header for run length encoded huffman trees.
- * @param header: the output header.
- * @param lookup_table: a huffman lookup table.
- * @param huffman_rep: a run length encoded huffman tree.
- * @extra_bits: extra bits associated with the corresponding spot in huffman_rep
- * @param huffman_rep_length: the length of huffman_rep.
- * @param end_of_block: Value determining whether end of block header is produced or not;
- * 0 corresponds to not end of block and all other inputs correspond to end of block.
- * @param hclen: Length of huffman code for huffman codes minus 4.
- * @param hlit: Length of literal/length table minus 257.
- * @parm hdist: Length of distance table minus 1.
- */
-int create_huffman_header(struct BitBuf2 *header_bitbuf, struct huff_code *lookup_table,
-                         struct rl_code * huffman_rep, uint16_t huffman_rep_length,
-                         uint32_t end_of_block, uint32_t hclen, uint32_t hlit,
-                         uint32_t hdist);
-
-/**
- * @brief Creates a two table representation of huffman codes.
- * @param code_table: output table containing the code
- * @param code_size_table: output table containing the code length
- * @param length: the lenght of hufftable
- * @param hufftable: a huffman lookup table
- */
-void create_code_tables(uint16_t * code_table, uint8_t * code_length_table,
-                       uint32_t length, struct huff_code *hufftable);
-
-/**
- * @brief Creates a packed representation of length huffman codes.
- * @details In packed_table, bits 32:8 contain the extra bits appended to the huffman
- * code and bits 8:0 contain the code length.
- * @param packed_table: the output table
- * @param length: the length of lit_len_hufftable
- * @param lit_len_hufftable: a literal/length huffman lookup table
- */
-void create_packed_len_table(uint32_t * packed_table, struct huff_code *lit_len_hufftable);
-
-/**
- * @brief Creates a packed representation of distance  huffman codes.
- * @details In packed_table, bits 32:8 contain the extra bits appended to the huffman
- * code and bits 8:0 contain the code length.
- * @param packed_table: the output table
- * @param length: the length of lit_len_hufftable
- * @param dist_hufftable: a distance huffman lookup table
- */
-void create_packed_dist_table(uint32_t * packed_table, uint32_t length,
-                             struct huff_code *dist_hufftable);
+       union {
+               struct {
+                       struct huff_code dist_lit_table[288];
+                       struct huff_code len_table[256];
+               };
 
-/**
- * @brief Checks to see if the hufftable is usable by igzip
- *
- * @param lit_len_hufftable: literal/lenght huffman code
- * @param dist_hufftable: distance huffman code
- * @returns Returns 0 if the table is usable
- */
-int are_hufftables_useable(struct huff_code *lit_len_hufftable,
-                          struct huff_code *dist_hufftable);
+               struct {
+                       struct huff_code dist_table[31];
+                       struct huff_code lit_len_table[513];
+               };
+       };
+};
 
 /**
  * @brief Creates a representation of the huffman code from a histogram used to
@@ -244,8 +159,11 @@ int are_hufftables_useable(struct huff_code *lit_len_hufftable,
  * @param hufftables: output huffman code representation
  * @param hist: histogram used to generat huffman code
  * @param end_of_block: flag whether this is the final huffman code
+ *
+ * @returns Returns the length in bits of the block with histogram hist encoded
+ * with the set hufftable
  */
-void
+uint64_t
 create_hufftables_icf(struct BitBuf2 *bb, struct hufftables_icf * hufftables,
                   struct isal_mod_hist *hist, uint32_t end_of_block);
 
index daf9eda67f385a0e1f4b6e9d1bd4702a7152227b..9056b5ee4f071218796be3b556d535bfbbf4911c 100644 (file)
@@ -29,6 +29,7 @@
 
 %include "options.asm"
 %include "lz0a_const.asm"
+%include "stdmac.asm"
 
 ; Macros for doing Huffman Encoding
 
index 0553b81571180c2e8015cc397d4b3678bc76d304..2b44b617b28921a060f1aedcb221e01f815ca79b 100644 (file)
 #include <stdlib.h>
 #include <assert.h>
 #include "igzip_lib.h"
+#include "unaligned.h"
 
+#if __x86_64__  || __i386__ || _M_X64 || _M_IX86
 #ifdef _MSC_VER
 # include <intrin.h>
 # define inline __inline
 #else
 # include <x86intrin.h>
 #endif
+#else
+# define inline __inline
+#endif //__x86_64__  || __i386__ || _M_X64 || _M_IX86
 
+/**
+ * @brief Calculate the bit offset of the msb.
+ * @param val 32-bit unsigned integer input
+ *
+ * @returns bit offset of msb starting at 1 for first bit
+ */
 static inline uint32_t bsr(uint32_t val)
 {
        uint32_t msb;
-#ifdef __LZCNT__
-       msb = 16 - __lzcnt16(val);
+#if defined(_MSC_VER)
+       unsigned long ret = 0;
+       if (val != 0) {
+               _BitScanReverse(&ret, val);
+               msb = ret + 1;
+       }
+       else
+               msb = 0;
+#elif defined( __LZCNT__)
+       msb = 32 - __lzcnt32(val);
+#elif defined(__x86_64__) || defined(__aarch64__)
+       msb = (val == 0)? 0 : 32 - __builtin_clz(val);
 #else
        for(msb = 0; val > 0; val >>= 1)
                msb++;
@@ -51,13 +72,17 @@ static inline uint32_t bsr(uint32_t val)
        return msb;
 }
 
-static inline uint32_t tzcnt(uint64_t val)
+static inline uint32_t tzbytecnt(uint64_t val)
 {
        uint32_t cnt;
 
-#ifdef __x86_64__
+#ifdef __BMI__
+       cnt = __tzcnt_u64(val);
+       cnt = cnt / 8;
+#elif defined(__x86_64__) || defined(__aarch64__)
 
-       cnt = __builtin_ctzll(val) / 8;//__tzcnt_u64(val);
+       cnt = (val == 0)? 64 : __builtin_ctzll(val);
+       cnt = cnt / 8;
 
 #else
        for(cnt = 8; val > 0; val <<= 8)
@@ -178,12 +203,41 @@ static inline uint32_t compute_hash(uint32_t data)
        return _mm_crc32_u32(0, data);
 
 #else
+       uint64_t hash;
        /* Use multiplication to create a hash, 0xBDD06057 is a prime number */
-       return ((uint64_t)data * 0xB2D06057) >> 16;
+       hash = data;
+       hash *= 0xB2D06057;
+       hash >>= 16;
+       hash *= 0xB2D06057;
+       hash >>= 16;
+
+       return hash;
 
 #endif /* __SSE4_2__ */
 }
 
+#define PROD1 0xFFFFE84B
+#define PROD2 0xFFFF97B1
+static inline uint32_t compute_hash_mad(uint32_t data)
+{
+       int16_t data_low;
+       int16_t data_high;
+
+       data_low = data;
+       data_high = data >> 16;
+       data = PROD1 * data_low + PROD2 * data_high;
+
+       data_low = data;
+       data_high = data >> 16;
+       data = PROD1 * data_low + PROD2 * data_high;
+
+       return data;
+}
+
+static inline uint32_t compute_long_hash(uint64_t data) {
+
+       return compute_hash(data >> 32)^compute_hash(data);
+}
 
 /**
  * @brief Returns how long str1 and str2 have the same symbols.
@@ -203,10 +257,68 @@ static inline int compare258(uint8_t * str1, uint8_t * str2, uint32_t max_length
        loop_length = max_length & ~0x7;
 
        for(count = 0; count < loop_length; count += 8){
-               test = *(uint64_t *) str1;
-               test ^= *(uint64_t *) str2;
+               test = load_u64(str1);
+               test ^= load_u64(str2);
+               if(test != 0)
+                       return count + tzbytecnt(test);
+               str1 += 8;
+               str2 += 8;
+       }
+
+       switch(max_length % 8){
+
+       case 7:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 6:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 5:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 4:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 3:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 2:
+               if(*str1++ != *str2++)
+                       return count;
+               count++;
+       case 1:
+               if(*str1 != *str2)
+                       return count;
+               count++;
+       }
+
+       return count;
+}
+
+/**
+ * @brief Returns how long str1 and str2 have the same symbols.
+ * @param str1: First input string.
+ * @param str2: Second input string.
+ * @param max_length: length of the smaller string.
+ */
+static inline int compare(uint8_t * str1, uint8_t * str2, uint32_t max_length)
+{
+       uint32_t count;
+       uint64_t test;
+       uint64_t loop_length;
+
+       loop_length = max_length & ~0x7;
+
+       for(count = 0; count < loop_length; count += 8){
+               test = load_u64(str1);
+               test ^= load_u64(str2);
                if(test != 0)
-                       return count + tzcnt(test);
+                       return count + tzbytecnt(test);
                str1 += 8;
                str2 += 8;
        }
index a82acef1d76ddc7f23acebd8b6b34da8bb4d63a7..281f3e940422789dfdd728d9121809c60c420928 100644 (file)
@@ -39,6 +39,11 @@ const uint8_t gzip_hdr[] = {
 const uint32_t gzip_hdr_bytes = 10;
 const uint32_t gzip_trl_bytes = 8;
 
+const uint8_t zlib_hdr[] = { 0x78, 0x01 };
+
+const uint32_t zlib_hdr_bytes = 2;
+const uint32_t zlib_trl_bytes = 4;
+
 struct isal_hufftables hufftables_default = {
 
        .deflate_hdr = {
@@ -2281,6 +2286,11 @@ const uint8_t gzip_hdr[] = {
 const uint32_t gzip_hdr_bytes = 10;
 const uint32_t gzip_trl_bytes = 8;
 
+const uint8_t zlib_hdr[] = { 0x78, 0x01 };
+
+const uint32_t zlib_hdr_bytes = 2;
+const uint32_t zlib_trl_bytes = 4;
+
 struct isal_hufftables hufftables_default = {
 
        .deflate_hdr = {
index 6ac1c1500e5967c437ba1d3cb21f33de62b3f9ae..b98e6dde983bd1a2f4393b24654b738b4d891263 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <assert.h>
 #include <string.h>
+#include <wchar.h>
 #ifdef _WIN32
 # include <intrin.h>
 #endif
 #define NON_EMPTY_BLOCK_SIZE 6
 #define MAX_SYNC_FLUSH_SIZE NON_EMPTY_BLOCK_SIZE + MAX_WRITE_BITS_SIZE
 
-#define MAX_TOKENS (16 * 1024)
-
 #include "huffman.h"
 #include "bitbuf2.h"
 #include "igzip_lib.h"
+#include "crc.h"
 #include "repeated_char_result.h"
 #include "huff_codes.h"
 #include "encode_df.h"
 #include "igzip_level_buf_structs.h"
+#include "igzip_checksums.h"
+#include "igzip_wrapper.h"
+#include "unaligned.h"
+
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/endian.h>
+# define to_be32(x) bswap32(x)
+#elif defined (__APPLE__)
+#include <libkern/OSByteOrder.h>
+# define to_be32(x) OSSwapInt32(x)
+#elif defined (__GNUC__) && !defined (__MINGW32__)
+# include <byteswap.h>
+# define to_be32(x) bswap_32(x)
+#elif defined _WIN64
+# define to_be32(x) _byteswap_ulong(x)
+#endif
 
+extern void isal_deflate_hash_lvl0(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t);
+extern void isal_deflate_hash_lvl1(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t);
+extern void isal_deflate_hash_lvl2(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t);
+extern void isal_deflate_hash_lvl3(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t);
 extern const uint8_t gzip_hdr[];
 extern const uint32_t gzip_hdr_bytes;
 extern const uint32_t gzip_trl_bytes;
+extern const uint8_t zlib_hdr[];
+extern const uint32_t zlib_hdr_bytes;
+extern const uint32_t zlib_trl_bytes;
 extern const struct isal_hufftables hufftables_default;
 extern const struct isal_hufftables hufftables_static;
 
-extern uint32_t crc32_gzip(uint32_t init_crc, const unsigned char *buf, uint64_t len);
-
-static int write_stored_block_stateless(struct isal_zstream *stream, uint32_t stored_len,
-                                       uint32_t crc32);
+static uint32_t write_stored_block(struct isal_zstream *stream);
 
-static int write_gzip_header_stateless(struct isal_zstream *stream);
-static void write_gzip_header(struct isal_zstream *stream);
+static int write_stream_header_stateless(struct isal_zstream *stream);
+static void write_stream_header(struct isal_zstream *stream);
 static int write_deflate_header_stateless(struct isal_zstream *stream);
 static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream);
 
-unsigned int detect_repeated_char(uint8_t * buf, uint32_t size);
-
-#define STORED_BLK_HDR_BZ 5
-#define STORED_BLK_MAX_BZ 65535
+#define TYPE0_HDR_LEN 4
+#define TYPE0_BLK_HDR_LEN 5
+#define TYPE0_MAX_BLK_LEN 65535
 
 void isal_deflate_body(struct isal_zstream *stream);
 void isal_deflate_finish(struct isal_zstream *stream);
 
 void isal_deflate_icf_body(struct isal_zstream *stream);
-void isal_deflate_icf_finish(struct isal_zstream *stream);
+void isal_deflate_icf_finish_lvl1(struct isal_zstream *stream);
+void isal_deflate_icf_finish_lvl2(struct isal_zstream *stream);
+void isal_deflate_icf_finish_lvl3(struct isal_zstream *stream);
 /*****************************************************************/
 
 /* Forward declarations */
 static inline void reset_match_history(struct isal_zstream *stream);
-void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
-                 uint32_t deflate_hdr_count, uint32_t extra_bits_count, uint32_t next_state,
-                 uint32_t toggle_end_of_stream);
-void write_deflate_header(struct isal_zstream *stream);
-void write_trailer(struct isal_zstream *stream);
+static void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
+                        uint32_t deflate_hdr_count, uint32_t extra_bits_count,
+                        uint32_t next_state, uint32_t toggle_end_of_stream);
+static void write_trailer(struct isal_zstream *stream);
 
 struct slver {
        uint16_t snum;
@@ -97,6 +118,9 @@ struct slver {
 struct slver isal_deflate_init_slver_01030081;
 struct slver isal_deflate_init_slver = { 0x0081, 0x03, 0x01 };
 
+struct slver isal_deflate_reset_slver_0001008e;
+struct slver isal_deflate_reset_slver = { 0x008e, 0x01, 0x00 };
+
 struct slver isal_deflate_stateless_init_slver_00010084;
 struct slver isal_deflate_stateless_init_slver = { 0x0084, 0x01, 0x00 };
 
@@ -106,10 +130,46 @@ struct slver isal_deflate_slver = { 0x0082, 0x03, 0x01 };
 struct slver isal_deflate_stateless_slver_01010083;
 struct slver isal_deflate_stateless_slver = { 0x0083, 0x01, 0x01 };
 
-struct slver isal_deflate_set_hufftables_slver_00_01_008b;
+struct slver isal_deflate_set_hufftables_slver_0001008b;
 struct slver isal_deflate_set_hufftables_slver = { 0x008b, 0x01, 0x00 };
 
+struct slver isal_deflate_set_dict_slver_0001008c;
+struct slver isal_deflate_set_dict_slver = { 0x008c, 0x01, 0x00 };
+
 /*****************************************************************/
+
+// isal_adler32_bam1 - adler with (B | A minus 1) storage
+
+uint32_t isal_adler32_bam1(uint32_t adler32, const unsigned char *start, uint64_t length)
+{
+       uint64_t a;
+
+       /* Internally the checksum is being stored as B | (A-1) so crc and
+        * addler have same init value */
+       a = adler32 & 0xffff;
+       a = (a == ADLER_MOD - 1) ? 0 : a + 1;
+       adler32 = isal_adler32((adler32 & 0xffff0000) | a, start, length);
+       a = (adler32 & 0xffff);
+       a = (a == 0) ? ADLER_MOD - 1 : a - 1;
+
+       return (adler32 & 0xffff0000) | a;
+}
+
+static void update_checksum(struct isal_zstream *stream, uint8_t * start_in, uint64_t length)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       switch (stream->gzip_flag) {
+       case IGZIP_GZIP:
+       case IGZIP_GZIP_NO_HDR:
+               state->crc = crc32_gzip_refl(state->crc, start_in, length);
+               break;
+       case IGZIP_ZLIB:
+       case IGZIP_ZLIB_NO_HDR:
+               state->crc = isal_adler32_bam1(state->crc, start_in, length);
+               break;
+       }
+}
+
 static
 void sync_flush(struct isal_zstream *stream)
 {
@@ -126,11 +186,7 @@ void sync_flush(struct isal_zstream *stream)
                bits_to_write <<= flush_size + 3;
                bits_len = 32 + flush_size + 3;
 
-#ifdef USE_BITBUFB             /* Write Bits Always */
                state->state = ZSTATE_NEW_HDR;
-#else /* Not Write Bits Always */
-               state->state = ZSTATE_FLUSH_WRITE_BUFFER;
-#endif
                state->has_eob = 0;
 
                write_bits(&state->bitbuf, bits_to_write, bits_len);
@@ -143,10 +199,7 @@ void sync_flush(struct isal_zstream *stream)
                if (stream->flush == FULL_FLUSH) {
                        /* Clear match history so there are no cross
                         * block length distance pairs */
-                       state->file_start -= state->b_bytes_processed;
-                       state->b_bytes_valid -= state->b_bytes_processed;
-                       state->b_bytes_processed = 0;
-                       reset_match_history(stream);
+                       state->has_hist = IGZIP_NO_HIST;
                }
        }
 }
@@ -169,17 +222,12 @@ static void flush_write_buffer(struct isal_zstream *stream)
 static void flush_icf_block(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
-       struct level_2_buf *level_buf = (struct level_2_buf *)stream->level_buf;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
        struct BitBuf2 *write_buf = &state->bitbuf;
        struct deflate_icf *icf_buf_encoded_next;
 
        set_buf(write_buf, stream->next_out, stream->avail_out);
 
-#if defined (USE_BITBUF8) || (USE_BITBUF_ELSE)
-       if (!is_full(write_buf))
-               flush_bits(write_buf);
-#endif
-
        icf_buf_encoded_next = encode_deflate_icf(level_buf->icf_buf_start + state->count,
                                                  level_buf->icf_buf_next, write_buf,
                                                  &level_buf->encode_tables);
@@ -200,70 +248,205 @@ static void flush_icf_block(struct isal_zstream *stream)
        }
 }
 
+static int check_level_req(struct isal_zstream *stream)
+{
+       if (stream->level == 0)
+               return 0;
+
+       if (stream->level_buf == NULL)
+               return ISAL_INVALID_LEVEL_BUF;
+
+       switch (stream->level) {
+       case 3:
+               if (stream->level_buf_size < ISAL_DEF_LVL3_MIN)
+                       return ISAL_INVALID_LEVEL;
+               break;
+
+       case 2:
+               if (stream->level_buf_size < ISAL_DEF_LVL2_MIN)
+                       return ISAL_INVALID_LEVEL;
+               break;
+       case 1:
+               if (stream->level_buf_size < ISAL_DEF_LVL1_MIN)
+                       return ISAL_INVALID_LEVEL;
+               break;
+       default:
+               return ISAL_INVALID_LEVEL;
+       }
+
+       return 0;
+}
+
+static int init_hash8k_buf(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       state->has_level_buf_init = 1;
+       return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash8k);
+}
+
+static int init_hash_hist_buf(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       state->has_level_buf_init = 1;
+       return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_hist);
+}
+
+static int init_hash_map_buf(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       if (!state->has_level_buf_init) {
+               level_buf->hash_map.matches_next = level_buf->hash_map.matches;
+               level_buf->hash_map.matches_end = level_buf->hash_map.matches;
+       }
+       state->has_level_buf_init = 1;
+
+       return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_map);
+
+}
+
+/* returns the size of the level specific buffer */
+static int init_lvlX_buf(struct isal_zstream *stream)
+{
+       switch (stream->level) {
+       case 3:
+               return init_hash_map_buf(stream);
+       case 2:
+               return init_hash_hist_buf(stream);
+       default:
+               return init_hash8k_buf(stream);
+       }
+
+}
+
 static void init_new_icf_block(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
-       struct level_2_buf *level_buf = (struct level_2_buf *)stream->level_buf;
-
-       if (stream->level_buf_size >=
-           sizeof(struct level_2_buf) + 100 * sizeof(struct deflate_icf)) {
-               level_buf->icf_buf_next = level_buf->icf_buf_start;
-               level_buf->icf_buf_avail_out =
-                   stream->level_buf_size - sizeof(struct level_2_buf) -
-                   sizeof(struct deflate_icf);
-               memset(&state->hist, 0, sizeof(struct isal_mod_hist));
-               state->state = ZSTATE_BODY;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       int level_struct_size;
+
+       level_struct_size = init_lvlX_buf(stream);
+
+       state->block_next = state->block_end;
+       level_buf->icf_buf_start =
+           (struct deflate_icf *)(stream->level_buf + level_struct_size);
+
+       level_buf->icf_buf_next = level_buf->icf_buf_start;
+       level_buf->icf_buf_avail_out =
+           stream->level_buf_size - level_struct_size - sizeof(struct deflate_icf);
+
+       memset(&level_buf->hist, 0, sizeof(struct isal_mod_hist));
+       state->state = ZSTATE_BODY;
+}
+
+static int are_buffers_empty_hashX(struct isal_zstream *stream)
+{
+       return !stream->avail_in;
+}
+
+static int are_buffers_empty_hash_map(struct isal_zstream *stream)
+{
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+
+       return (!stream->avail_in
+               && level_buf->hash_map.matches_next >= level_buf->hash_map.matches_end);
+}
+
+static int are_buffers_empty(struct isal_zstream *stream)
+{
+
+       switch (stream->level) {
+       case 3:
+               return are_buffers_empty_hash_map(stream);
+       case 2:
+               return are_buffers_empty_hashX(stream);
+       default:
+               return are_buffers_empty_hashX(stream);
        }
 }
 
-static void create_icf_block_hdr(struct isal_zstream *stream)
+static void create_icf_block_hdr(struct isal_zstream *stream, uint8_t * start_in)
 {
        struct isal_zstate *state = &stream->internal_state;
-       struct level_2_buf *level_buf = (struct level_2_buf *)stream->level_buf;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
        struct BitBuf2 *write_buf = &state->bitbuf;
        struct BitBuf2 write_buf_tmp;
        uint32_t out_size = stream->avail_out;
+       uint32_t avail_output, block_start_offset;
        uint8_t *end_out = stream->next_out + out_size;
+       uint64_t cur_in_processed;
+       uint64_t bit_count;
+       uint64_t block_in_size = state->block_end - state->block_next;
+       uint64_t block_size;
+       int buffer_header = 0;
+
+       memcpy(&write_buf_tmp, write_buf, sizeof(struct BitBuf2));
+
+       /* Calculate the bytes required to store a type 0 block. Need to account
+        * for bits stored in the bitbuf. Since 3 bits correspond to the deflate
+        * type 0 header, we need to add one byte more when the number of bits
+        * is at least 6 mod 8. */
+       block_size = (TYPE0_BLK_HDR_LEN) * ((block_in_size + TYPE0_MAX_BLK_LEN - 1) /
+                                           TYPE0_MAX_BLK_LEN) + block_in_size;
+       block_size = block_size ? block_size : TYPE0_BLK_HDR_LEN;
+       block_size += (write_buf->m_bit_count + 2) / 8;
+
        /* Write EOB in icf_buf */
-       state->hist.ll_hist[256] = 1;
+       level_buf->hist.ll_hist[256] = 1;
        level_buf->icf_buf_next->lit_len = 0x100;
        level_buf->icf_buf_next->lit_dist = NULL_DIST_SYM;
        level_buf->icf_buf_next->dist_extra = 0;
        level_buf->icf_buf_next++;
 
-       state->has_eob_hdr = stream->end_of_stream && !stream->avail_in;
-       if (end_out - stream->next_out >= ISAL_DEF_MAX_HDR_SIZE) {
-               /* Determine whether this is the final block */
-
-               if (stream->gzip_flag == IGZIP_GZIP)
-                       write_gzip_header_stateless(stream);
+       state->has_eob_hdr = (stream->end_of_stream && are_buffers_empty(stream)) ? 1 : 0;
 
+       if (end_out - stream->next_out >= ISAL_DEF_MAX_HDR_SIZE) {
+               /* Assumes ISAL_DEF_MAX_HDR_SIZE is large enough to contain a
+                * max length header and a gzip header */
+               if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB)
+                       write_stream_header_stateless(stream);
                set_buf(write_buf, stream->next_out, stream->avail_out);
+               buffer_header = 0;
 
-               create_hufftables_icf(write_buf, &level_buf->encode_tables, &state->hist,
-                                     state->has_eob_hdr);
-               state->state = ZSTATE_FLUSH_ICF_BUFFER;
-               stream->next_out = buffer_ptr(write_buf);
-               stream->total_out += buffer_used(write_buf);
-               stream->avail_out -= buffer_used(write_buf);
        } else {
                /* Start writing into temporary buffer */
-               write_buf_tmp.m_bits = write_buf->m_bits;
-               write_buf_tmp.m_bit_count = write_buf->m_bit_count;
+               set_buf(write_buf, level_buf->deflate_hdr, ISAL_DEF_MAX_HDR_SIZE);
+               buffer_header = 1;
+       }
 
+       bit_count = create_hufftables_icf(write_buf, &level_buf->encode_tables,
+                                         &level_buf->hist, state->has_eob_hdr);
+
+       /* Assumes that type 0 block has size less than 4G */
+       block_start_offset = (stream->total_in - state->block_next);
+       cur_in_processed = stream->next_in - start_in;
+       avail_output = stream->avail_out + sizeof(state->buffer) -
+           (stream->total_in - state->block_end);
+
+       if (bit_count / 8 >= block_size && cur_in_processed >= block_start_offset
+           && block_size <= avail_output) {
+               /* Reset stream for writing out a type0 block */
+               state->has_eob_hdr = 0;
+               memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2));
+               state->state = ZSTATE_TYPE0_HDR;
+
+       } else if (buffer_header) {
+               /* Setup stream to write out a buffered header */
+               level_buf->deflate_hdr_count = buffer_used(write_buf);
+               level_buf->deflate_hdr_extra_bits = write_buf->m_bit_count;
+               flush(write_buf);
+               memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2));
                write_buf->m_bits = 0;
                write_buf->m_bit_count = 0;
-
-               set_buf(&write_buf_tmp, level_buf->deflate_hdr, ISAL_DEF_MAX_HDR_SIZE);
-
-               create_hufftables_icf(&write_buf_tmp, &level_buf->encode_tables,
-                                     &state->hist, state->has_eob_hdr);
-
-               level_buf->deflate_hdr_count = buffer_used(&write_buf_tmp);
-               level_buf->deflate_hdr_extra_bits = write_buf_tmp.m_bit_count;
-               flush(&write_buf_tmp);
-
                state->state = ZSTATE_HDR;
+
+       } else {
+               stream->next_out = buffer_ptr(write_buf);
+               stream->total_out += buffer_used(write_buf);
+               stream->avail_out -= buffer_used(write_buf);
+               state->state = ZSTATE_FLUSH_ICF_BUFFER;
        }
 }
 
@@ -288,7 +471,6 @@ static void isal_deflate_pass(struct isal_zstream *stream)
 
        if (state->state == ZSTATE_FLUSH_READ_BUFFER)
                isal_deflate_finish(stream);
-
        if (state->state == ZSTATE_SYNC_FLUSH)
                sync_flush(stream);
 
@@ -296,17 +478,31 @@ static void isal_deflate_pass(struct isal_zstream *stream)
                flush_write_buffer(stream);
 
        if (stream->gzip_flag)
-               state->crc = crc32_gzip(state->crc, start_in, stream->next_in - start_in);
+               update_checksum(stream, start_in, stream->next_in - start_in);
 
        if (state->state == ZSTATE_TRL)
                write_trailer(stream);
 }
 
-static void isal_deflate_icf_pass(struct isal_zstream *stream)
+static void isal_deflate_icf_finish(struct isal_zstream *stream)
+{
+       switch (stream->level) {
+       case 3:
+               isal_deflate_icf_finish_lvl3(stream);
+               break;
+       case 2:
+               isal_deflate_icf_finish_lvl2(stream);
+               break;
+       default:
+               isal_deflate_icf_finish_lvl1(stream);
+       }
+}
+
+static void isal_deflate_icf_pass(struct isal_zstream *stream, uint8_t * inbuf_start)
 {
        uint8_t *start_in = stream->next_in;
        struct isal_zstate *state = &stream->internal_state;
-       struct level_2_buf *level_buf = (struct level_2_buf *)stream->level_buf;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
 
        do {
                if (state->state == ZSTATE_NEW_HDR)
@@ -319,7 +515,7 @@ static void isal_deflate_icf_pass(struct isal_zstream *stream)
                        isal_deflate_icf_finish(stream);
 
                if (state->state == ZSTATE_CREATE_HDR)
-                       create_icf_block_hdr(stream);
+                       create_icf_block_hdr(stream, inbuf_start);
 
                if (state->state == ZSTATE_HDR)
                        /* Note that the header may be prepended by the
@@ -333,7 +529,14 @@ static void isal_deflate_icf_pass(struct isal_zstream *stream)
                if (state->state == ZSTATE_FLUSH_ICF_BUFFER)
                        flush_icf_block(stream);
 
-       } while (state->state == ZSTATE_NEW_HDR);
+               if (state->state == ZSTATE_TYPE0_HDR || state->state == ZSTATE_TYPE0_BODY) {
+                       if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB)
+                               write_stream_header(stream);
+                       write_stored_block(stream);
+               }
+
+       }
+       while (state->state == ZSTATE_NEW_HDR);
 
        if (state->state == ZSTATE_SYNC_FLUSH)
                sync_flush(stream);
@@ -342,13 +545,13 @@ static void isal_deflate_icf_pass(struct isal_zstream *stream)
                flush_write_buffer(stream);
 
        if (stream->gzip_flag)
-               state->crc = crc32_gzip(state->crc, start_in, stream->next_in - start_in);
+               update_checksum(stream, start_in, stream->next_in - start_in);
 
        if (state->state == ZSTATE_TRL)
                write_trailer(stream);
 }
 
-static void isal_deflate_int(struct isal_zstream *stream)
+static void isal_deflate_int(struct isal_zstream *stream, uint8_t * start_in)
 {
        struct isal_zstate *state = &stream->internal_state;
        uint32_t size;
@@ -377,7 +580,7 @@ static void isal_deflate_int(struct isal_zstream *stream)
        if (stream->level == 0)
                isal_deflate_pass(stream);
        else
-               isal_deflate_icf_pass(stream);
+               isal_deflate_icf_pass(stream, start_in);
 
        /* Fill temporary output buffer then complete filling output buffer */
        if (stream->avail_out > 0 && stream->avail_out < 8 && state->state != ZSTATE_NEW_HDR) {
@@ -396,7 +599,7 @@ static void isal_deflate_int(struct isal_zstream *stream)
                if (stream->level == 0)
                        isal_deflate_pass(stream);
                else
-                       isal_deflate_icf_pass(stream);
+                       isal_deflate_icf_pass(stream, start_in);
 
                state->tmp_out_start = 0;
                state->tmp_out_end = stream->total_out;
@@ -500,6 +703,7 @@ static void write_constant_compressed_stateless(struct isal_zstream *stream,
        stream->next_in += repeated_length;
        stream->avail_in -= repeated_length;
        stream->total_in += repeated_length;
+       state->block_end += repeated_length;
 
        bytes = buffer_used(&state->bitbuf);
        stream->next_out = buffer_ptr(&state->bitbuf);
@@ -507,12 +711,12 @@ static void write_constant_compressed_stateless(struct isal_zstream *stream,
        stream->total_out += bytes;
 
        if (stream->gzip_flag)
-               state->crc = crc32_gzip(state->crc, start_in, stream->next_in - start_in);
+               update_checksum(stream, start_in, stream->next_in - start_in);
 
        return;
 }
 
-int detect_repeated_char_length(uint8_t * in, uint32_t length)
+static int detect_repeated_char_length(uint8_t * in, uint32_t length)
 {
        /* This currently assumes the first 8 bytes are the same character.
         * This won't work effectively if the input stream isn't aligned well. */
@@ -535,13 +739,13 @@ static int isal_deflate_int_stateless(struct isal_zstream *stream)
        uint32_t repeat_length;
        struct isal_zstate *state = &stream->internal_state;
 
-       if (stream->gzip_flag == IGZIP_GZIP)
-               if (write_gzip_header_stateless(stream))
+       if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB)
+               if (write_stream_header_stateless(stream))
                        return STATELESS_OVERFLOW;
 
        if (stream->avail_in >= 8
-           && (*(uint64_t *) stream->next_in == 0
-               || *(uint64_t *) stream->next_in == ~(uint64_t) 0)) {
+           && (load_u64(stream->next_in) == 0
+               || load_u64(stream->next_in) == ~(uint64_t) 0)) {
                repeat_length = detect_repeated_char_length(stream->next_in, stream->avail_in);
 
                if (stream->avail_in == repeat_length || repeat_length >= MIN_REPEAT_LEN)
@@ -557,25 +761,16 @@ static int isal_deflate_int_stateless(struct isal_zstream *stream)
                        reset_match_history(stream);
                }
 
-               state->file_start = stream->next_in - stream->total_in;
                isal_deflate_pass(stream);
 
-       } else if (stream->level == 1) {
-               if (stream->level_buf == NULL || stream->level_buf_size < ISAL_DEF_LVL1_MIN) {
-                       /* Default to internal buffer if invalid size is supplied */
-                       stream->level_buf = state->buffer;
-                       stream->level_buf_size = sizeof(state->buffer);
-               }
-
+       } else if (stream->level <= ISAL_DEF_MAX_LEVEL) {
                if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR)
                        reset_match_history(stream);
 
                state->count = 0;
-               state->file_start = stream->next_in - stream->total_in;
-               isal_deflate_icf_pass(stream);
+               isal_deflate_icf_pass(stream, stream->next_in);
 
-       } else
-               return ISAL_INVALID_LEVEL;
+       }
 
        if (state->state == ZSTATE_END
            || (state->state == ZSTATE_NEW_HDR && stream->flush == FULL_FLUSH))
@@ -584,83 +779,204 @@ static int isal_deflate_int_stateless(struct isal_zstream *stream)
                return STATELESS_OVERFLOW;
 }
 
-static int write_stored_block_stateless(struct isal_zstream *stream,
-                                       uint32_t stored_len, uint32_t crc32)
+static void write_type0_header(struct isal_zstream *stream)
 {
+       struct isal_zstate *state = &stream->internal_state;
        uint64_t stored_blk_hdr;
        uint32_t copy_size;
-       uint32_t avail_in;
-       uint64_t gzip_trl;
-
-       if (stream->avail_out < stored_len)
-               return STATELESS_OVERFLOW;
+       uint32_t memcpy_len, avail_in;
+       uint32_t block_in_size = state->block_end - state->block_next;
+       uint32_t block_next_offset;
+       struct BitBuf2 *bitbuf = &stream->internal_state.bitbuf;
+
+       if (block_in_size > TYPE0_MAX_BLK_LEN) {
+               stored_blk_hdr = 0xFFFF;
+               copy_size = TYPE0_MAX_BLK_LEN;
+       } else {
+               stored_blk_hdr = ~block_in_size;
+               stored_blk_hdr <<= 16;
+               stored_blk_hdr |= (block_in_size & 0xFFFF);
+               copy_size = block_in_size;
 
-       stream->avail_out -= stored_len;
-       stream->total_out += stored_len;
-       avail_in = stream->avail_in;
+               /* Handle BFINAL bit */
+               block_next_offset = stream->total_in - state->block_next;
+               avail_in = stream->avail_in + block_next_offset;
+               if (stream->end_of_stream && avail_in == block_in_size)
+                       stream->internal_state.has_eob_hdr = 1;
+       }
 
-       if (stream->gzip_flag == IGZIP_GZIP) {
-               memcpy(stream->next_out, gzip_hdr, gzip_hdr_bytes);
-               stream->next_out += gzip_hdr_bytes;
-               stream->gzip_flag = IGZIP_GZIP_NO_HDR;
+       if (bitbuf->m_bit_count == 0 && stream->avail_out >= TYPE0_HDR_LEN + 1) {
+               stored_blk_hdr = stored_blk_hdr << 8;
+               stored_blk_hdr |= stream->internal_state.has_eob_hdr;
+               memcpy_len = TYPE0_HDR_LEN + 1;
+               memcpy(stream->next_out, &stored_blk_hdr, memcpy_len);
+       } else if (stream->avail_out >= 8) {
+               set_buf(bitbuf, stream->next_out, stream->avail_out);
+               write_bits_flush(bitbuf, stream->internal_state.has_eob_hdr, 3);
+               stream->next_out = buffer_ptr(bitbuf);
+               stream->total_out += buffer_used(bitbuf);
+               stream->avail_out -= buffer_used(bitbuf);
+               memcpy_len = TYPE0_HDR_LEN;
+               memcpy(stream->next_out, &stored_blk_hdr, memcpy_len);
+       } else {
+               stream->internal_state.has_eob_hdr = 0;
+               return;
        }
 
+       stream->next_out += memcpy_len;
+       stream->avail_out -= memcpy_len;
+       stream->total_out += memcpy_len;
+       stream->internal_state.state = ZSTATE_TYPE0_BODY;
+
+       stream->internal_state.count = copy_size;
+}
+
+static uint32_t write_stored_block(struct isal_zstream *stream)
+{
+       uint32_t copy_size, avail_in, block_next_offset;
+       uint8_t *next_in;
+       struct isal_zstate *state = &stream->internal_state;
+
        do {
-               if (avail_in >= STORED_BLK_MAX_BZ) {
-                       stored_blk_hdr = 0xFFFF00;
-                       copy_size = STORED_BLK_MAX_BZ;
-               } else {
-                       stored_blk_hdr = ~avail_in;
-                       stored_blk_hdr <<= 24;
-                       stored_blk_hdr |= (avail_in & 0xFFFF) << 8;
-                       copy_size = avail_in;
+               if (state->state == ZSTATE_TYPE0_HDR) {
+                       write_type0_header(stream);
+                       if (state->state == ZSTATE_TYPE0_HDR)
+                               break;
                }
 
-               avail_in -= copy_size;
+               assert(state->count <= state->block_end - state->block_next);
+               copy_size = state->count;
 
-               /* Handle BFINAL bit */
-               if (avail_in == 0) {
-                       if (stream->flush == NO_FLUSH || stream->end_of_stream) {
-                               stored_blk_hdr |= 0x1;
-                               stream->internal_state.has_eob_hdr = 1;
-                       }
+               block_next_offset = stream->total_in - state->block_next;
+               next_in = stream->next_in - block_next_offset;
+               avail_in = stream->avail_in + block_next_offset;
+
+               if (copy_size > stream->avail_out || copy_size > avail_in) {
+                       state->count = copy_size;
+                       copy_size = (stream->avail_out <= avail_in) ?
+                           stream->avail_out : avail_in;
+
+                       memcpy(stream->next_out, next_in, copy_size);
+                       state->count -= copy_size;
+               } else {
+                       memcpy(stream->next_out, next_in, copy_size);
+
+                       state->count = 0;
+                       state->state = ZSTATE_TYPE0_HDR;
                }
-               memcpy(stream->next_out, &stored_blk_hdr, STORED_BLK_HDR_BZ);
-               stream->next_out += STORED_BLK_HDR_BZ;
 
-               memcpy(stream->next_out, stream->next_in, copy_size);
+               state->block_next += copy_size;
                stream->next_out += copy_size;
-               stream->next_in += copy_size;
-               stream->total_in += copy_size;
-       } while (avail_in != 0);
-
-       if (stream->gzip_flag && stream->internal_state.has_eob_hdr) {
-               gzip_trl = stream->avail_in;
-               gzip_trl <<= 32;
-               gzip_trl |= crc32 & 0xFFFFFFFF;
-               memcpy(stream->next_out, &gzip_trl, gzip_trl_bytes);
-               stream->next_out += gzip_trl_bytes;
-       }
+               stream->avail_out -= copy_size;
+               stream->total_out += copy_size;
+
+               if (state->block_next == state->block_end) {
+                       state->state = state->has_eob_hdr ? ZSTATE_TRL : ZSTATE_NEW_HDR;
+                       if (stream->flush == FULL_FLUSH && state->state == ZSTATE_NEW_HDR
+                           && are_buffers_empty(stream)) {
+                               /* Clear match history so there are no cross
+                                * block length distance pairs */
+                               reset_match_history(stream);
+                       }
+               }
+       } while (state->state == ZSTATE_TYPE0_HDR);
 
-       stream->avail_in = 0;
-       return COMP_OK;
+       return state->block_end - state->block_next;
 }
 
 static inline void reset_match_history(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
-       uint16_t *head = stream->internal_state.head;
-       int i = 0;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint16_t *hash_table;
+       uint32_t hash_table_size;
 
-       state->has_hist = 0;
+       hash_table_size = 2 * (state->hash_mask + 1);
 
-       if (stream->total_in == 0)
-               memset(stream->internal_state.head, 0, sizeof(stream->internal_state.head));
-       else {
-               for (i = 0; i < sizeof(state->head) / 2; i++) {
-                       head[i] = (uint16_t) (stream->total_in);
+       switch (stream->level) {
+       case 3:
+               hash_table = level_buf->lvl3.hash_table;
+               break;
+       case 2:
+               hash_table = level_buf->lvl2.hash_table;
+               break;
+       case 1:
+               hash_table = level_buf->lvl1.hash_table;
+               break;
+       default:
+               hash_table = state->head;
+       }
+
+       state->has_hist = IGZIP_NO_HIST;
+
+       /* There is definitely more than 16 bytes in the hash table. Set this
+        * minimum to avoid a wmemset of size 0 */
+       if (hash_table_size <= sizeof(wchar_t))
+               hash_table_size = sizeof(wchar_t);
+
+       if (sizeof(wchar_t) == 2) {
+               uint16_t hash_init_val;
+
+               hash_init_val = stream->total_in & 0xffff;
+               wmemset((wchar_t *)hash_table, hash_init_val,
+                       hash_table_size / sizeof(wchar_t));
+
+       } else if (sizeof(wchar_t) == 4) {
+               uint32_t hash_init_val;
+               int rep_bits;
+
+               hash_init_val = stream->total_in & 0xffff;
+               for (rep_bits = sizeof(uint16_t) * 8; rep_bits < sizeof(wchar_t) * 8;
+                    rep_bits *= 2)
+                       hash_init_val |= hash_init_val << rep_bits;
+
+               wmemset((wchar_t *)hash_table, hash_init_val,
+                       hash_table_size / sizeof(wchar_t));
+       } else {
+               if ((stream->total_in & 0xFFFF) == 0)
+                       memset(hash_table, 0, hash_table_size);
+               else {
+                       int i;
+                       for (i = 0; i < hash_table_size / 2; i++) {
+                               hash_table[i] = (uint16_t) (stream->total_in);
+                       }
                }
        }
+
+}
+
+static void inline set_dist_mask(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       uint32_t hist_size;
+
+       if (stream->hist_bits > ISAL_DEF_MAX_HIST_BITS || stream->hist_bits == 0)
+               stream->hist_bits = ISAL_DEF_MAX_HIST_BITS;
+
+       hist_size = (1 << (stream->hist_bits));
+       state->dist_mask = hist_size - 1;
+
+       if (IGZIP_HIST_SIZE < ISAL_DEF_HIST_SIZE && state->dist_mask > IGZIP_HIST_SIZE - 1)
+               state->dist_mask = IGZIP_HIST_SIZE - 1;
+}
+
+static void inline set_hash_mask(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+
+       switch (stream->level) {
+       case 3:
+               state->hash_mask = LVL3_HASH_MASK;
+               break;
+       case 2:
+               state->hash_mask = LVL2_HASH_MASK;
+               break;
+       case 1:
+               state->hash_mask = LVL1_HASH_MASK;
+               break;
+       case 0:
+               state->hash_mask = LVL0_HASH_MASK;
+       }
 }
 
 void isal_deflate_init(struct isal_zstream *stream)
@@ -676,27 +992,179 @@ void isal_deflate_init(struct isal_zstream *stream)
        stream->end_of_stream = 0;
        stream->flush = NO_FLUSH;
        stream->gzip_flag = 0;
+       stream->hist_bits = 0;
 
+       state->block_next = 0;
+       state->block_end = 0;
        state->b_bytes_valid = 0;
        state->b_bytes_processed = 0;
+       state->total_in_start = 0;
+       state->has_wrap_hdr = 0;
        state->has_eob = 0;
        state->has_eob_hdr = 0;
-       state->has_hist = 0;
+       state->has_hist = IGZIP_NO_HIST;
+       state->has_level_buf_init = 0;
        state->state = ZSTATE_NEW_HDR;
        state->count = 0;
 
        state->tmp_out_start = 0;
        state->tmp_out_end = 0;
 
-       state->file_start = stream->next_in;
+       init(&state->bitbuf);
+
+       state->crc = 0;
+
+       return;
+}
+
+void isal_deflate_reset(struct isal_zstream *stream)
+{
+       struct isal_zstate *state = &stream->internal_state;
+
+       stream->total_in = 0;
+       stream->total_out = 0;
+
+       state->block_next = 0;
+       state->block_end = 0;
+       state->b_bytes_valid = 0;
+       state->b_bytes_processed = 0;
+       state->total_in_start = 0;
+       state->has_wrap_hdr = 0;
+       state->has_eob = 0;
+       state->has_level_buf_init = 0;
+       state->has_eob_hdr = 0;
+       state->has_hist = IGZIP_NO_HIST;
+       state->state = ZSTATE_NEW_HDR;
+       state->count = 0;
+
+       state->tmp_out_start = 0;
+       state->tmp_out_end = 0;
 
        init(&state->bitbuf);
 
        state->crc = 0;
 
-       memset(state->head, 0, sizeof(state->head));
+}
 
-       return;
+void isal_gzip_header_init(struct isal_gzip_header *gz_hdr)
+{
+       gz_hdr->text = 0;
+       gz_hdr->time = 0;
+       gz_hdr->xflags = 0;
+       gz_hdr->os = 0xff;
+       gz_hdr->extra = NULL;
+       gz_hdr->extra_buf_len = 0;
+       gz_hdr->extra_len = 0;
+       gz_hdr->name = NULL;
+       gz_hdr->name_buf_len = 0;
+       gz_hdr->comment = NULL;
+       gz_hdr->comment_buf_len = 0;
+       gz_hdr->hcrc = 0;
+}
+
+uint32_t isal_write_gzip_header(struct isal_zstream *stream, struct isal_gzip_header *gz_hdr)
+{
+       uint32_t flags = 0, hcrc, hdr_size = GZIP_HDR_BASE;
+       uint8_t *out_buf = stream->next_out, *out_buf_start = stream->next_out;
+       uint32_t name_len = 0, comment_len = 0;
+
+       if (gz_hdr->text)
+               flags |= TEXT_FLAG;
+       if (gz_hdr->extra) {
+               flags |= EXTRA_FLAG;
+               hdr_size += GZIP_EXTRA_LEN + gz_hdr->extra_len;
+       }
+       if (gz_hdr->name) {
+               flags |= NAME_FLAG;
+               name_len = strnlen(gz_hdr->name, gz_hdr->name_buf_len);
+               if (name_len < gz_hdr->name_buf_len)
+                       name_len++;
+               hdr_size += name_len;
+       }
+       if (gz_hdr->comment) {
+               flags |= COMMENT_FLAG;
+               comment_len = strnlen(gz_hdr->comment, gz_hdr->comment_buf_len);
+               if (comment_len < gz_hdr->comment_buf_len)
+                       comment_len++;
+               hdr_size += comment_len;
+       }
+       if (gz_hdr->hcrc) {
+               flags |= HCRC_FLAG;
+               hdr_size += GZIP_HCRC_LEN;
+       }
+
+       if (stream->avail_out < hdr_size)
+               return hdr_size;
+
+       out_buf[0] = 0x1f;
+       out_buf[1] = 0x8b;
+       out_buf[2] = DEFLATE_METHOD;
+       out_buf[3] = flags;
+       store_u32(out_buf + 4, gz_hdr->time);
+       out_buf[8] = gz_hdr->xflags;
+       out_buf[9] = gz_hdr->os;
+
+       out_buf += GZIP_HDR_BASE;
+       if (flags & EXTRA_FLAG) {
+               store_u16(out_buf, gz_hdr->extra_len);
+               out_buf += GZIP_EXTRA_LEN;
+
+               memcpy(out_buf, gz_hdr->extra, gz_hdr->extra_len);
+               out_buf += gz_hdr->extra_len;
+       }
+
+       if (flags & NAME_FLAG) {
+               memcpy(out_buf, gz_hdr->name, name_len);
+               out_buf += name_len;
+       }
+
+       if (flags & COMMENT_FLAG) {
+               memcpy(out_buf, gz_hdr->comment, comment_len);
+               out_buf += comment_len;
+       }
+
+       if (flags & HCRC_FLAG) {
+               hcrc = crc32_gzip_refl(0, out_buf_start, out_buf - out_buf_start);
+               store_u16(out_buf, hcrc);
+               out_buf += GZIP_HCRC_LEN;
+       }
+
+       stream->next_out += hdr_size;
+       stream->total_out += hdr_size;
+       stream->avail_out -= hdr_size;
+
+       return ISAL_DECOMP_OK;
+}
+
+uint32_t isal_write_zlib_header(struct isal_zstream *stream, struct isal_zlib_header *z_hdr)
+{
+       uint32_t cmf, flg, dict_flag = 0, hdr_size = ZLIB_HDR_BASE;
+       uint8_t *out_buf = stream->next_out;
+
+       if (z_hdr->dict_flag) {
+               dict_flag = ZLIB_DICT_FLAG;
+               hdr_size = ZLIB_HDR_BASE + ZLIB_DICT_LEN;
+       }
+
+       if (stream->avail_out < hdr_size)
+               return hdr_size;
+
+       cmf = DEFLATE_METHOD | (z_hdr->info << 4);
+       flg = (z_hdr->level << 6) | dict_flag;
+
+       flg += 31 - ((256 * cmf + flg) % 31);
+
+       out_buf[0] = cmf;
+       out_buf[1] = flg;
+
+       if (dict_flag)
+               store_u32(out_buf + 2, z_hdr->dict_id);
+
+       stream->next_out += hdr_size;
+       stream->total_out += hdr_size;
+       stream->avail_out -= hdr_size;
+
+       return ISAL_DECOMP_OK;
 }
 
 int isal_deflate_set_hufftables(struct isal_zstream *stream,
@@ -735,12 +1203,71 @@ void isal_deflate_stateless_init(struct isal_zstream *stream)
        stream->end_of_stream = 0;
        stream->flush = NO_FLUSH;
        stream->gzip_flag = 0;
+       stream->internal_state.has_wrap_hdr = 0;
        stream->internal_state.state = ZSTATE_NEW_HDR;
        return;
 }
 
+void isal_deflate_hash(struct isal_zstream *stream, uint8_t * dict, uint32_t dict_len)
+{
+       /* Reset history to prevent out of bounds matches this works because
+        * dictionary must set at least 1 element in the history */
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint32_t hash_mask = stream->internal_state.hash_mask;
+
+       switch (stream->level) {
+       case 3:
+               memset(level_buf->lvl3.hash_table, -1, sizeof(level_buf->lvl3.hash_table));
+               isal_deflate_hash_lvl3(level_buf->lvl3.hash_table, hash_mask,
+                                      stream->total_in, dict, dict_len);
+               break;
+
+       case 2:
+               memset(level_buf->lvl2.hash_table, -1, sizeof(level_buf->lvl2.hash_table));
+               isal_deflate_hash_lvl2(level_buf->lvl2.hash_table, hash_mask,
+                                      stream->total_in, dict, dict_len);
+               break;
+       case 1:
+               memset(level_buf->lvl1.hash_table, -1, sizeof(level_buf->lvl1.hash_table));
+               isal_deflate_hash_lvl1(level_buf->lvl1.hash_table, hash_mask,
+                                      stream->total_in, dict, dict_len);
+               break;
+       default:
+               memset(stream->internal_state.head, -1, sizeof(stream->internal_state.head));
+               isal_deflate_hash_lvl0(stream->internal_state.head, hash_mask,
+                                      stream->total_in, dict, dict_len);
+       }
+
+       stream->internal_state.has_hist = IGZIP_HIST;
+}
+
+int isal_deflate_set_dict(struct isal_zstream *stream, uint8_t * dict, uint32_t dict_len)
+{
+       struct isal_zstate *state = &stream->internal_state;
+
+       if (state->state != ZSTATE_NEW_HDR || state->b_bytes_processed != state->b_bytes_valid)
+               return ISAL_INVALID_STATE;
+
+       if (dict_len <= 0)
+               return COMP_OK;
+
+       if (dict_len > IGZIP_HIST_SIZE) {
+               dict = dict + dict_len - IGZIP_HIST_SIZE;
+               dict_len = IGZIP_HIST_SIZE;
+       }
+
+       memcpy(state->buffer, dict, dict_len);
+       state->b_bytes_processed = dict_len;
+       state->b_bytes_valid = dict_len;
+
+       state->has_hist = IGZIP_DICT_HIST;
+
+       return COMP_OK;
+}
+
 int isal_deflate_stateless(struct isal_zstream *stream)
 {
+       struct isal_zstate *state = &stream->internal_state;
        uint8_t *next_in = stream->next_in;
        const uint32_t avail_in = stream->avail_in;
        const uint32_t total_in = stream->total_in;
@@ -749,15 +1276,20 @@ int isal_deflate_stateless(struct isal_zstream *stream)
        const uint32_t avail_out = stream->avail_out;
        const uint32_t total_out = stream->total_out;
        const uint32_t gzip_flag = stream->gzip_flag;
+       const uint32_t has_wrap_hdr = state->has_wrap_hdr;
 
-       uint32_t crc32 = 0;
-       uint32_t stored_len;
+       int level_check;
+       uint64_t stored_len;
 
        /* Final block has already been written */
-       stream->internal_state.has_eob_hdr = 0;
-       init(&stream->internal_state.bitbuf);
-       stream->internal_state.state = ZSTATE_NEW_HDR;
-       stream->internal_state.crc = 0;
+       state->block_next = stream->total_in;
+       state->block_end = stream->total_in;
+       state->has_eob_hdr = 0;
+       init(&state->bitbuf);
+       state->state = ZSTATE_NEW_HDR;
+       state->crc = 0;
+       state->has_level_buf_init = 0;
+       set_dist_mask(stream);
 
        if (stream->flush == NO_FLUSH)
                stream->end_of_stream = 1;
@@ -765,40 +1297,55 @@ int isal_deflate_stateless(struct isal_zstream *stream)
        if (stream->flush != NO_FLUSH && stream->flush != FULL_FLUSH)
                return INVALID_FLUSH;
 
-       if (stream->level != 0 && stream->level != 1)
-               return ISAL_INVALID_LEVEL;
+       level_check = check_level_req(stream);
+       if (level_check) {
+               if (stream->level == 1 && stream->level_buf == NULL) {
+                       /* Default to internal buffer if invalid size is supplied */
+                       stream->level_buf = state->buffer;
+                       stream->level_buf_size = sizeof(state->buffer) + sizeof(state->head);
+               } else
+                       return level_check;
+       }
+
+       set_hash_mask(stream);
+
+       if (state->hash_mask > 2 * avail_in)
+               state->hash_mask = (1 << bsr(avail_in)) - 1;
 
        if (avail_in == 0)
-               stored_len = STORED_BLK_HDR_BZ;
-       else
-               stored_len =
-                   STORED_BLK_HDR_BZ * ((avail_in + STORED_BLK_MAX_BZ - 1) /
-                                        STORED_BLK_MAX_BZ) + avail_in;
+               stored_len = TYPE0_BLK_HDR_LEN;
+       else {
+               stored_len = TYPE0_BLK_HDR_LEN * ((avail_in + TYPE0_MAX_BLK_LEN - 1) /
+                                                 TYPE0_MAX_BLK_LEN);
+               stored_len += avail_in;
+       }
 
        /*
           at least 1 byte compressed data in the case of empty dynamic block which only
           contains the EOB
         */
-
        if (stream->gzip_flag == IGZIP_GZIP)
                stored_len += gzip_hdr_bytes + gzip_trl_bytes;
-
        else if (stream->gzip_flag == IGZIP_GZIP_NO_HDR)
                stored_len += gzip_trl_bytes;
 
-       /*
-          the output buffer should be no less than 8 bytes
-          while empty stored deflate block is 5 bytes only
-        */
-       if (stream->avail_out < 8)
-               return STATELESS_OVERFLOW;
+       else if (stream->gzip_flag == IGZIP_ZLIB)
+               stored_len += zlib_hdr_bytes + zlib_trl_bytes;
+
+       else if (stream->gzip_flag == IGZIP_ZLIB_NO_HDR)
+               stored_len += zlib_trl_bytes;
 
-       if (isal_deflate_int_stateless(stream) == COMP_OK)
+       if (avail_out >= stored_len)
+               stream->avail_out = stored_len;
+
+       if (isal_deflate_int_stateless(stream) == COMP_OK) {
+               if (avail_out >= stored_len)
+                       stream->avail_out += avail_out - stored_len;
                return COMP_OK;
-       else {
+       } else {
+               if (avail_out >= stored_len)
+                       stream->avail_out += avail_out - stored_len;
                if (stream->flush == FULL_FLUSH) {
-                       stream->internal_state.file_start =
-                           (uint8_t *) & stream->internal_state.buffer;
                        reset_match_history(stream);
                }
                stream->internal_state.has_eob_hdr = 0;
@@ -807,151 +1354,332 @@ int isal_deflate_stateless(struct isal_zstream *stream)
        if (avail_out < stored_len)
                return STATELESS_OVERFLOW;
 
-       stream->next_in = next_in;
-       stream->avail_in = avail_in;
-       stream->total_in = total_in;
+       stream->next_in = next_in + avail_in;
+       stream->avail_in = 0;
+       stream->total_in = avail_in;
+
+       state->block_next = stream->total_in - avail_in;
+       state->block_end = stream->total_in;
 
        stream->next_out = next_out;
        stream->avail_out = avail_out;
        stream->total_out = total_out;
 
        stream->gzip_flag = gzip_flag;
+       state->has_wrap_hdr = has_wrap_hdr;
+       init(&stream->internal_state.bitbuf);
+       stream->internal_state.count = 0;
 
-       if (stream->gzip_flag)
-               crc32 = crc32_gzip(0x0, next_in, avail_in);
+       if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB)
+               write_stream_header_stateless(stream);
+
+       stream->internal_state.state = ZSTATE_TYPE0_HDR;
+
+       write_stored_block(stream);
+
+       stream->total_in = total_in + avail_in;
+
+       if (stream->gzip_flag) {
+               stream->internal_state.crc = 0;
+               update_checksum(stream, next_in, avail_in);
+       }
+
+       if (stream->end_of_stream)
+               write_trailer(stream);
+
+       return COMP_OK;
+
+}
 
-       return write_stored_block_stateless(stream, stored_len, crc32);
+static inline uint32_t get_hist_size(struct isal_zstream *stream, uint8_t * start_in,
+                                    int32_t buf_hist_start)
+{
+       struct isal_zstate *state = &stream->internal_state;
+       uint32_t history_size;
+       uint32_t buffered_history;
+       uint32_t buffered_size = state->b_bytes_valid - state->b_bytes_processed;
+       uint32_t input_history;
+
+       buffered_history = (state->has_hist) ? state->b_bytes_processed - buf_hist_start : 0;
+       input_history = stream->next_in - start_in;
+
+       /* Calculate history required for deflate window */
+       history_size = (buffered_history >= input_history) ? buffered_history : input_history;
+       if (history_size > IGZIP_HIST_SIZE)
+               history_size = IGZIP_HIST_SIZE;
+
+       /* Calculate history required based on internal state */
+       if (state->state == ZSTATE_TYPE0_HDR
+           || state->state == ZSTATE_TYPE0_BODY
+           || state->state == ZSTATE_TMP_TYPE0_HDR || state->state == ZSTATE_TMP_TYPE0_BODY) {
+               if (stream->total_in - state->block_next > history_size) {
+                       history_size = (stream->total_in - state->block_next);
+               }
+       } else if (stream->avail_in + buffered_size == 0
+                  && (stream->end_of_stream || stream->flush == FULL_FLUSH)) {
+               history_size = 0;
+       }
+       return history_size;
 }
 
 int isal_deflate(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
        int ret = COMP_OK;
-       uint8_t *next_in;
-       uint32_t avail_in, avail_in_start;
+       uint8_t *next_in, *start_in, *buf_start_in, *next_in_pre;
+       uint32_t avail_in, total_start, hist_size, future_size;
+       uint32_t in_size, in_size_initial, out_size, out_size_initial;
+       uint32_t processed, buffered_size = state->b_bytes_valid - state->b_bytes_processed;
        uint32_t flush_type = stream->flush;
        uint32_t end_of_stream = stream->end_of_stream;
-       int size = 0;
+       uint32_t size = 0;
+       int32_t buf_hist_start = 0;
        uint8_t *copy_down_src = NULL;
-       uint64_t copy_down_size = 0;
-       int32_t processed = -(state->b_bytes_valid - state->b_bytes_processed);
+       uint64_t copy_down_size = 0, copy_start_offset;
+       int internal;
 
        if (stream->flush >= 3)
                return INVALID_FLUSH;
 
-       next_in = stream->next_in;
-       avail_in = stream->avail_in;
-       stream->total_in -= state->b_bytes_valid - state->b_bytes_processed;
+       ret = check_level_req(stream);
+       if (ret)
+               return ret;
+
+       start_in = stream->next_in;
+       total_start = stream->total_in;
+
+       hist_size = get_hist_size(stream, start_in, buf_hist_start);
+
+       if (state->has_hist == IGZIP_NO_HIST) {
+               set_dist_mask(stream);
+               set_hash_mask(stream);
+               if (state->hash_mask > 2 * stream->avail_in
+                   && (stream->flush == FULL_FLUSH || stream->end_of_stream))
+                       state->hash_mask = (1 << bsr(2 * stream->avail_in)) - 1;
+               stream->total_in -= buffered_size;
+               reset_match_history(stream);
+               stream->total_in += buffered_size;
+               buf_hist_start = state->b_bytes_processed;
+
+       } else if (state->has_hist == IGZIP_DICT_HIST) {
+               set_dist_mask(stream);
+               set_hash_mask(stream);
+               isal_deflate_hash(stream, state->buffer, state->b_bytes_processed);
+       }
 
+       in_size = stream->avail_in + buffered_size;
+       out_size = stream->total_out;
        do {
-               size = avail_in;
-               if (size > sizeof(state->buffer) - state->b_bytes_valid) {
-                       size = sizeof(state->buffer) - state->b_bytes_valid;
-                       stream->flush = NO_FLUSH;
-                       stream->end_of_stream = 0;
-               }
-               memcpy(&state->buffer[state->b_bytes_valid], next_in, size);
-
-               next_in += size;
-               avail_in -= size;
-               state->b_bytes_valid += size;
-
-               stream->next_in = &state->buffer[state->b_bytes_processed];
-               stream->avail_in = state->b_bytes_valid - state->b_bytes_processed;
-               state->file_start = stream->next_in - stream->total_in;
-               processed += stream->avail_in;
-
-               if (stream->avail_in > IGZIP_HIST_SIZE
-                   || stream->end_of_stream || stream->flush != NO_FLUSH) {
-                       avail_in_start = stream->avail_in;
-                       isal_deflate_int(stream);
-                       state->b_bytes_processed += avail_in_start - stream->avail_in;
-
-                       if (state->b_bytes_processed > IGZIP_HIST_SIZE) {
-                               copy_down_src =
-                                   &state->buffer[state->b_bytes_processed - IGZIP_HIST_SIZE];
-                               copy_down_size =
-                                   state->b_bytes_valid - state->b_bytes_processed +
-                                   IGZIP_HIST_SIZE;
+               in_size_initial = in_size;
+               out_size_initial = out_size;
+               buf_start_in = start_in;
+               internal = 0;
+
+               /* Setup to compress from internal buffer if insufficient history */
+               if (stream->total_in - total_start < hist_size + buffered_size) {
+                       /* On entry there should always be sufficient history bufferd */
+                       /* assert(state->b_bytes_processed >= hist_size); */
+
+                       internal = 1;
+                       /* Shift down internal buffer if it contains more data
+                        * than required */
+                       if (state->b_bytes_processed > hist_size) {
+                               copy_start_offset = state->b_bytes_processed - hist_size;
+
+                               copy_down_src = &state->buffer[copy_start_offset];
+                               copy_down_size = state->b_bytes_valid - copy_start_offset;
                                memmove(state->buffer, copy_down_src, copy_down_size);
 
                                state->b_bytes_valid -= copy_down_src - state->buffer;
                                state->b_bytes_processed -= copy_down_src - state->buffer;
+                               buf_hist_start -= copy_down_src - state->buffer;
+                               if (buf_hist_start < 0)
+                                       buf_hist_start = 0;
+                       }
+
+                       size = stream->avail_in;
+                       if (size > sizeof(state->buffer) - state->b_bytes_valid)
+                               size = sizeof(state->buffer) - state->b_bytes_valid;
+
+                       memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, size);
+
+                       stream->next_in += size;
+                       stream->avail_in -= size;
+                       stream->total_in += size;
+                       state->b_bytes_valid += size;
+                       buffered_size += size;
+
+                       /* Save off next_in and avail_in if compression is
+                        * performed in internal buffer, total_in can be
+                        * recovered from knowledge of the size of the buffered
+                        * input */
+                       next_in = stream->next_in;
+                       avail_in = stream->avail_in;
+
+                       /* If not much data is buffered and there is no need to
+                        * flush the buffer, just continue rather than attempt
+                        * to compress */
+                       if (avail_in == 0 && buffered_size <= IGZIP_HIST_SIZE
+                           && stream->total_in - buffered_size - state->block_next <=
+                           IGZIP_HIST_SIZE && !stream->end_of_stream
+                           && stream->flush == NO_FLUSH)
+                               continue;
+
+                       if (avail_in) {
+                               stream->flush = NO_FLUSH;
+                               stream->end_of_stream = 0;
                        }
 
+                       stream->next_in = &state->buffer[state->b_bytes_processed];
+                       stream->avail_in = buffered_size;
+                       stream->total_in -= buffered_size;
+
+                       buf_start_in = state->buffer;
+
+               } else if (buffered_size) {
+                       /* The user provided buffer has sufficient data, reset
+                        * the user supplied buffer to included any data already
+                        * buffered */
+                       stream->next_in -= buffered_size;
+                       stream->avail_in += buffered_size;
+                       stream->total_in -= buffered_size;
+                       state->b_bytes_valid = 0;
+                       state->b_bytes_processed = 0;
+                       buffered_size = 0;
                }
 
-               stream->flush = flush_type;
-               stream->end_of_stream = end_of_stream;
-               processed -= stream->avail_in;
-       } while (processed < IGZIP_HIST_SIZE + ISAL_LOOK_AHEAD && avail_in > 0
-                && stream->avail_out > 0);
+               next_in_pre = stream->next_in;
+               isal_deflate_int(stream, buf_start_in);
+               processed = stream->next_in - next_in_pre;
+               hist_size = get_hist_size(stream, buf_start_in, buf_hist_start);
 
-       if (processed >= IGZIP_HIST_SIZE + ISAL_LOOK_AHEAD) {
-               stream->next_in = next_in - stream->avail_in;
-               stream->avail_in = avail_in + stream->avail_in;
+               /* Restore compression to unbuffered input when compressing to internal buffer */
+               if (internal) {
+                       state->b_bytes_processed += processed;
+                       buffered_size -= processed;
 
-               state->file_start = stream->next_in - stream->total_in;
+                       stream->flush = flush_type;
+                       stream->end_of_stream = end_of_stream;
+                       stream->total_in += buffered_size;
 
-               if (stream->avail_in > 0 && stream->avail_out > 0)
-                       isal_deflate_int(stream);
+                       stream->next_in = next_in;
+                       stream->avail_in = avail_in;
+               }
 
-               size = stream->avail_in;
-               if (stream->avail_in > IGZIP_HIST_SIZE)
-                       size = 0;
+               in_size = stream->avail_in + buffered_size;
+               out_size = stream->total_out;
 
-               memmove(state->buffer, stream->next_in - IGZIP_HIST_SIZE,
-                       size + IGZIP_HIST_SIZE);
-               state->b_bytes_processed = IGZIP_HIST_SIZE;
-               state->b_bytes_valid = size + IGZIP_HIST_SIZE;
+       } while (internal && stream->avail_in > 0 && stream->avail_out > 0
+                && (in_size_initial != in_size || out_size_initial != out_size));
 
-               stream->next_in += size;
-               stream->avail_in -= size;
-               stream->total_in += size;
+       /* Buffer history if data was pulled from the external buffer and future
+        * calls to deflate will be required */
+       if (!internal && (state->state != ZSTATE_END && state->state != ZSTATE_TRL)) {
+               /* If the external buffer was used, sufficient history must
+                * exist in the user input buffer */
+               /* assert(stream->total_in - total_start >= */
+               /*        hist_size + buffered_size); */
 
-       } else {
-               stream->total_in += state->b_bytes_valid - state->b_bytes_processed;
-               stream->next_in = next_in;
-               stream->avail_in = avail_in;
-               state->file_start = stream->next_in - stream->total_in;
+               stream->next_in -= buffered_size;
+               stream->avail_in += buffered_size;
+               stream->total_in -= buffered_size;
+
+               memmove(state->buffer, stream->next_in - hist_size, hist_size);
+               state->b_bytes_processed = hist_size;
+               state->b_bytes_valid = hist_size;
+               buffered_size = 0;
+       }
+
+       /* Buffer input data if it is necessary for continued execution */
+       if (stream->avail_in > 0 && (stream->avail_out > 0 || stream->level == 3)) {
+               /* Determine how much data to buffer */
+               future_size = sizeof(state->buffer) - state->b_bytes_valid;
+               if (stream->avail_in < future_size)
+                       /* Buffer all data if it fits as it will need to be buffered
+                        * on the next call anyways*/
+                       future_size = stream->avail_in;
+               else if (ISAL_LOOK_AHEAD < future_size)
+                       /* Buffer a minimum look ahead required for level 3 */
+                       future_size = ISAL_LOOK_AHEAD;
+
+               memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, future_size);
+
+               state->b_bytes_valid += future_size;
+               buffered_size += future_size;
+               stream->next_in += future_size;
+               stream->total_in += future_size;
+               stream->avail_in -= future_size;
 
        }
 
        return ret;
 }
 
-static int write_gzip_header_stateless(struct isal_zstream *stream)
+static int write_stream_header_stateless(struct isal_zstream *stream)
 {
-       if (gzip_hdr_bytes >= stream->avail_out)
+       uint32_t hdr_bytes;
+       const uint8_t *hdr;
+       uint32_t next_flag;
+
+       if (stream->internal_state.has_wrap_hdr)
+               return COMP_OK;
+
+       if (stream->gzip_flag == IGZIP_ZLIB) {
+               hdr_bytes = zlib_hdr_bytes;
+               hdr = zlib_hdr;
+               next_flag = IGZIP_ZLIB_NO_HDR;
+
+       } else {
+               hdr_bytes = gzip_hdr_bytes;
+               hdr = gzip_hdr;
+               next_flag = IGZIP_GZIP_NO_HDR;
+       }
+
+       if (hdr_bytes >= stream->avail_out)
                return STATELESS_OVERFLOW;
 
-       stream->avail_out -= gzip_hdr_bytes;
-       stream->total_out += gzip_hdr_bytes;
+       stream->avail_out -= hdr_bytes;
+       stream->total_out += hdr_bytes;
 
-       memcpy(stream->next_out, gzip_hdr, gzip_hdr_bytes);
+       memcpy(stream->next_out, hdr, hdr_bytes);
 
-       stream->next_out += gzip_hdr_bytes;
-       stream->gzip_flag = IGZIP_GZIP_NO_HDR;
+       stream->next_out += hdr_bytes;
+       stream->internal_state.has_wrap_hdr = 1;
+       stream->gzip_flag = next_flag;
 
        return COMP_OK;
 }
 
-static void write_gzip_header(struct isal_zstream *stream)
+static void write_stream_header(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
-       int bytes_to_write = gzip_hdr_bytes;
+       int bytes_to_write;
+       uint32_t hdr_bytes;
+       const uint8_t *hdr;
+
+       if (stream->internal_state.has_wrap_hdr)
+               return;
+
+       if (stream->gzip_flag == IGZIP_ZLIB) {
+               hdr_bytes = zlib_hdr_bytes;
+               hdr = zlib_hdr;
+       } else {
+               hdr_bytes = gzip_hdr_bytes;
+               hdr = gzip_hdr;
+       }
 
+       bytes_to_write = hdr_bytes;
        bytes_to_write -= state->count;
 
        if (bytes_to_write > stream->avail_out)
                bytes_to_write = stream->avail_out;
 
-       memcpy(stream->next_out, gzip_hdr + state->count, bytes_to_write);
+       memcpy(stream->next_out, hdr + state->count, bytes_to_write);
        state->count += bytes_to_write;
 
-       if (state->count == gzip_hdr_bytes) {
+       if (state->count == hdr_bytes) {
                state->count = 0;
-               stream->gzip_flag = IGZIP_GZIP_NO_HDR;
+               state->has_wrap_hdr = 1;
        }
 
        stream->avail_out -= bytes_to_write;
@@ -1004,8 +1732,8 @@ static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream)
        struct isal_hufftables *hufftables = stream->hufftables;
        unsigned int count;
        uint64_t bit_count;
-       uint64_t *header_next;
-       uint64_t *header_end;
+       uint8_t *header_next;
+       uint8_t *header_end;
        uint64_t header_bits;
 
        if (state->bitbuf.m_bit_count == 0)
@@ -1016,26 +1744,26 @@ static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream)
 
        set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
 
-       header_next = (uint64_t *) hufftables->deflate_hdr;
-       header_end = header_next + hufftables->deflate_hdr_count / 8;
+       header_next = hufftables->deflate_hdr;
+       header_end = header_next +
+           (hufftables->deflate_hdr_count / sizeof(header_bits)) * sizeof(header_bits);
 
-       header_bits = *header_next;
+       header_bits = load_u64(header_next);
 
        if (stream->end_of_stream == 0)
                header_bits--;
        else
                state->has_eob_hdr = 1;
 
-       header_next++;
+       header_next += sizeof(header_bits);
 
        /* Write out Complete Header bits */
-       for (; header_next <= header_end; header_next++) {
+       for (; header_next <= header_end; header_next += sizeof(header_bits)) {
                write_bits(&state->bitbuf, header_bits, 32);
                header_bits >>= 32;
                write_bits(&state->bitbuf, header_bits, 32);
-               header_bits = *header_next;
+               header_bits = load_u64(header_next);
        }
-
        bit_count =
            (hufftables->deflate_hdr_count & 0x7) * 8 + hufftables->deflate_hdr_extra_bits;
 
@@ -1064,9 +1792,9 @@ static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream)
 }
 
 /* Toggle end of stream only works when deflate header is aligned */
-void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
-                 uint32_t deflate_hdr_count, uint32_t extra_bits_count, uint32_t next_state,
-                 uint32_t toggle_end_of_stream)
+static void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
+                        uint32_t deflate_hdr_count, uint32_t extra_bits_count,
+                        uint32_t next_state, uint32_t toggle_end_of_stream)
 {
        struct isal_zstate *state = &stream->internal_state;
        uint32_t hdr_extra_bits = deflate_hdr[deflate_hdr_count];
@@ -1084,8 +1812,8 @@ void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
                stream->total_out += count;
        }
 
-       if (stream->gzip_flag == IGZIP_GZIP)
-               write_gzip_header(stream);
+       if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB)
+               write_stream_header(stream);
 
        count = deflate_hdr_count - state->count;
 
@@ -1130,51 +1858,74 @@ void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr,
 
 }
 
-void write_trailer(struct isal_zstream *stream)
+static void write_trailer(struct isal_zstream *stream)
 {
        struct isal_zstate *state = &stream->internal_state;
-       unsigned int bytes;
+       unsigned int bytes = 0;
        uint32_t crc = state->crc;
 
-       if (stream->avail_out >= 8) {
-               set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
+       set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
 
+       if (!state->has_eob_hdr) {
+               /* If the final header has not been written, write a
+                * final block. This block is a static huffman block
+                * which only contains the end of block symbol. The code
+                * that happens to do this is the fist 10 bits of
+                * 0x003 */
+               if (stream->avail_out < 8)
+                       return;
+
+               state->has_eob_hdr = 1;
+               write_bits(&state->bitbuf, 0x003, 10);
+               if (is_full(&state->bitbuf)) {
+                       stream->next_out = buffer_ptr(&state->bitbuf);
+                       bytes = buffer_used(&state->bitbuf);
+                       stream->avail_out -= bytes;
+                       stream->total_out += bytes;
+                       return;
+               }
+       }
+
+       if (state->bitbuf.m_bit_count) {
                /* the flush() will pad to the next byte and write up to 8 bytes
                 * to the output stream/buffer.
                 */
-               if (!state->has_eob_hdr) {
-                       /* If the final header has not been written, write a
-                        * final block. This block is a static huffman block
-                        * which only contains the end of block symbol. The code
-                        * that happens to do this is the fist 10 bits of
-                        * 0x003 */
-                       state->has_eob_hdr = 1;
-                       write_bits(&state->bitbuf, 0x003, 10);
-                       if (is_full(&state->bitbuf)) {
-                               stream->next_out = buffer_ptr(&state->bitbuf);
-                               bytes = buffer_used(&state->bitbuf);
-                               stream->avail_out -= bytes;
-                               stream->total_out += bytes;
-                               return;
-                       }
-               }
+               if (stream->avail_out < 8)
+                       return;
 
                flush(&state->bitbuf);
-               stream->next_out = buffer_ptr(&state->bitbuf);
-               bytes = buffer_used(&state->bitbuf);
+       }
 
-               if (stream->gzip_flag) {
-                       if (!is_full(&state->bitbuf)) {
-                               *(uint64_t *) stream->next_out =
-                                   ((uint64_t) stream->total_in << 32) | crc;
-                               stream->next_out += 8;
-                               bytes += 8;
-                               state->state = ZSTATE_END;
-                       }
-               } else
+       stream->next_out = buffer_ptr(&state->bitbuf);
+       bytes = buffer_used(&state->bitbuf);
+
+       switch (stream->gzip_flag) {
+       case IGZIP_GZIP:
+       case IGZIP_GZIP_NO_HDR:
+               if (stream->avail_out - bytes >= gzip_trl_bytes) {
+                       store_u64(stream->next_out, ((uint64_t) stream->total_in << 32) | crc);
+                       stream->next_out += gzip_trl_bytes;
+                       bytes += gzip_trl_bytes;
+                       state->state = ZSTATE_END;
+               }
+               break;
+
+       case IGZIP_ZLIB:
+       case IGZIP_ZLIB_NO_HDR:
+               if (stream->avail_out - bytes >= zlib_trl_bytes) {
+                       store_u32(stream->next_out,
+                                 to_be32((crc & 0xFFFF0000) | ((crc & 0xFFFF) + 1) %
+                                         ADLER_MOD));
+                       stream->next_out += zlib_trl_bytes;
+                       bytes += zlib_trl_bytes;
                        state->state = ZSTATE_END;
+               }
+               break;
 
-               stream->avail_out -= bytes;
-               stream->total_out += bytes;
+       default:
+               state->state = ZSTATE_END;
        }
+
+       stream->avail_out -= bytes;
+       stream->total_out += bytes;
 }
index 0e2b70506ac14b51a7b2c41b889f92cd2a7cf36c..bcc965f6d3375f3dbfda16fa354aaa6e990f9c05 100644 (file)
@@ -12,6 +12,9 @@ static inline void update_state(struct isal_zstream *stream, uint8_t * start_in,
        struct isal_zstate *state = &stream->internal_state;
        uint32_t bytes_written;
 
+       if (next_in - start_in > 0)
+               state->has_hist = IGZIP_HIST;
+
        stream->next_in = next_in;
        stream->total_in += next_in - start_in;
        stream->avail_in = end_in - next_in;
@@ -32,6 +35,9 @@ void isal_deflate_body_base(struct isal_zstream *stream)
        uint64_t code, code_len, code2, code_len2;
        struct isal_zstate *state = &stream->internal_state;
        uint16_t *last_seen = state->head;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hist_size = state->dist_mask;
+       uint32_t hash_mask = state->hash_mask;
 
        if (stream->avail_in == 0) {
                if (stream->end_of_stream || stream->flush != NO_FLUSH)
@@ -52,13 +58,13 @@ void isal_deflate_body_base(struct isal_zstream *stream)
                        return;
                }
 
-               literal = *(uint32_t *) next_in;
-               hash = compute_hash(literal) & HASH_MASK;
-               dist = (next_in - state->file_start - last_seen[hash]) & 0xFFFF;
-               last_seen[hash] = (uint64_t) (next_in - state->file_start);
+               literal = load_u32(next_in);
+               hash = compute_hash(literal) & hash_mask;
+               dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+               last_seen[hash] = (uint64_t) (next_in - file_start);
 
                /* The -1 are to handle the case when dist = 0 */
-               if (dist - 1 < IGZIP_HIST_SIZE - 1) {
+               if (dist - 1 < hist_size) {
                        assert(dist != 0);
 
                        match_length = compare258(next_in - dist, next_in, 258);
@@ -73,10 +79,9 @@ void isal_deflate_body_base(struct isal_zstream *stream)
                                next_hash++;
 
                                for (; next_hash < end; next_hash++) {
-                                       literal = *(uint32_t *) next_hash;
-                                       hash = compute_hash(literal) & HASH_MASK;
-                                       last_seen[hash] =
-                                           (uint64_t) (next_hash - state->file_start);
+                                       literal = load_u32(next_hash);
+                                       hash = compute_hash(literal) & hash_mask;
+                                       last_seen[hash] = (uint64_t) (next_hash - file_start);
                                }
 
                                get_len_code(stream->hufftables, match_length, &code,
@@ -118,6 +123,9 @@ void isal_deflate_finish_base(struct isal_zstream *stream)
        uint64_t code, code_len, code2, code_len2;
        struct isal_zstate *state = &stream->internal_state;
        uint16_t *last_seen = state->head;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hist_size = state->dist_mask;
+       uint32_t hash_mask = state->hash_mask;
 
        set_buf(&state->bitbuf, stream->next_out, stream->avail_out);
 
@@ -132,12 +140,12 @@ void isal_deflate_finish_base(struct isal_zstream *stream)
                                return;
                        }
 
-                       literal = *(uint32_t *) next_in;
-                       hash = compute_hash(literal) & HASH_MASK;
-                       dist = (next_in - state->file_start - last_seen[hash]) & 0xFFFF;
-                       last_seen[hash] = (uint64_t) (next_in - state->file_start);
+                       literal = load_u32(next_in);
+                       hash = compute_hash(literal) & hash_mask;
+                       dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+                       last_seen[hash] = (uint64_t) (next_in - file_start);
 
-                       if (dist - 1 < IGZIP_HIST_SIZE - 1) {   /* The -1 are to handle the case when dist = 0 */
+                       if (dist - 1 < hist_size) {     /* The -1 are to handle the case when dist = 0 */
                                match_length =
                                    compare258(next_in - dist, next_in, end_in - next_in);
 
@@ -151,10 +159,10 @@ void isal_deflate_finish_base(struct isal_zstream *stream)
                                        next_hash++;
 
                                        for (; next_hash < end - 3; next_hash++) {
-                                               literal = *(uint32_t *) next_hash;
-                                               hash = compute_hash(literal) & HASH_MASK;
+                                               literal = load_u32(next_hash);
+                                               hash = compute_hash(literal) & hash_mask;
                                                last_seen[hash] =
-                                                   (uint64_t) (next_hash - state->file_start);
+                                                   (uint64_t) (next_hash - file_start);
                                        }
 
                                        get_len_code(stream->hufftables, match_length, &code,
@@ -208,3 +216,21 @@ void isal_deflate_finish_base(struct isal_zstream *stream)
 
        return;
 }
+
+void isal_deflate_hash_base(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       uint8_t *next_in = dict;
+       uint8_t *end_in = dict + dict_len - SHORTEST_MATCH;
+       uint32_t literal;
+       uint32_t hash;
+       uint16_t index = current_index - dict_len;
+
+       while (next_in <= end_in) {
+               literal = load_u32(next_in);
+               hash = compute_hash(literal) & hash_mask;
+               hash_table[hash] = index;
+               index++;
+               next_in++;
+       }
+}
index c9d551daaa517f00963f461341f34175a49da32b..486ed8e3e05941163b8ae9dcec966d8b267be324 100644 (file)
 #include <stdint.h>
 #include "igzip_lib.h"
 #include "encode_df.h"
+#include "igzip_level_buf_structs.h"
 
 void isal_deflate_body_base(struct isal_zstream *stream);
 void isal_deflate_finish_base(struct isal_zstream *stream);
-void isal_deflate_icf_body_base(struct isal_zstream *stream);
-void isal_deflate_icf_finish_base(struct isal_zstream *stream);
+void isal_deflate_icf_body_hash_hist_base(struct isal_zstream *stream);
+void icf_body_hash1_fillgreedy_lazy(struct isal_zstream *stream);
+void isal_deflate_icf_finish_hash_hist_base(struct isal_zstream *stream);
+void isal_deflate_icf_finish_hash_map_base(struct isal_zstream *stream);
 void isal_update_histogram_base(uint8_t * start_stream, int length,
                                struct isal_huff_histogram *histogram);
 struct deflate_icf *encode_deflate_icf_base(struct deflate_icf *next_in,
                                            struct deflate_icf *end_in, struct BitBuf2 *bb,
                                            struct hufftables_icf *hufftables);
-uint32_t crc32_gzip_base(uint32_t init_crc, const unsigned char *buf, uint64_t len);
-int decode_huffman_code_block_stateless_base(struct inflate_state *s);
+uint32_t adler32_base(uint32_t init, const unsigned char *buf, uint64_t len);
+int decode_huffman_code_block_stateless_base(struct inflate_state *s, uint8_t * start_out);
+
+extern void isal_deflate_hash_base(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t);
+
+void set_long_icf_fg_base(uint8_t * next_in, uint8_t * end_in,
+                         struct deflate_icf *match_lookup, struct level_buf *level_buf);
+void gen_icf_map_h1_base(struct isal_zstream *stream,
+                        struct deflate_icf *matches_icf_lookup, uint64_t input_size);
 
 void isal_deflate_body(struct isal_zstream *stream)
 {
@@ -53,14 +63,34 @@ void isal_deflate_finish(struct isal_zstream *stream)
        isal_deflate_finish_base(stream);
 }
 
-void isal_deflate_icf_body(struct isal_zstream *stream)
+void isal_deflate_icf_body_lvl1(struct isal_zstream *stream)
+{
+       isal_deflate_icf_body_hash_hist_base(stream);
+}
+
+void isal_deflate_icf_body_lvl2(struct isal_zstream *stream)
+{
+       isal_deflate_icf_body_hash_hist_base(stream);
+}
+
+void isal_deflate_icf_body_lvl3(struct isal_zstream *stream)
 {
-       isal_deflate_icf_body_base(stream);
+       icf_body_hash1_fillgreedy_lazy(stream);
 }
 
-void isal_deflate_icf_finish(struct isal_zstream *stream)
+void isal_deflate_icf_finish_lvl1(struct isal_zstream *stream)
 {
-       isal_deflate_icf_finish_base(stream);
+       isal_deflate_icf_finish_hash_hist_base(stream);
+}
+
+void isal_deflate_icf_finish_lvl2(struct isal_zstream *stream)
+{
+       isal_deflate_icf_finish_hash_hist_base(stream);
+}
+
+void isal_deflate_icf_finish_lvl3(struct isal_zstream *stream)
+{
+       isal_deflate_icf_finish_hash_map_base(stream);
 }
 
 void isal_update_histogram(uint8_t * start_stream, int length,
@@ -76,12 +106,48 @@ struct deflate_icf *encode_deflate_icf(struct deflate_icf *next_in,
        return encode_deflate_icf_base(next_in, end_in, bb, hufftables);
 }
 
-uint32_t crc32_gzip(uint32_t init_crc, const unsigned char *buf, uint64_t len)
+uint32_t isal_adler32(uint32_t init, const unsigned char *buf, uint64_t len)
+{
+       return adler32_base(init, buf, len);
+}
+
+int decode_huffman_code_block_stateless(struct inflate_state *s, uint8_t * start_out)
+{
+       return decode_huffman_code_block_stateless_base(s, start_out);
+}
+
+void isal_deflate_hash_lvl0(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len);
+}
+
+void isal_deflate_hash_lvl1(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len);
+}
+
+void isal_deflate_hash_lvl2(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len);
+}
+
+void isal_deflate_hash_lvl3(uint16_t * hash_table, uint32_t hash_mask,
+                           uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len);
+}
+
+void set_long_icf_fg(uint8_t * next_in, uint8_t * end_in,
+                    struct deflate_icf *match_lookup, struct level_buf *level_buf)
 {
-       return crc32_gzip_base(init_crc, buf, len);
+       set_long_icf_fg_base(next_in, end_in, match_lookup, level_buf);
 }
 
-int decode_huffman_code_block_stateless(struct inflate_state *s)
+void gen_icf_map_lh1(struct isal_zstream *stream,
+                    struct deflate_icf *matches_icf_lookup, uint64_t input_size)
 {
-       return decode_huffman_code_block_stateless_base(s);
+       gen_icf_map_h1_base(stream, matches_icf_lookup, input_size);
 }
index e588af60ab7d8fa189fd22afed109ed44711be56..43de2347996bebf42178d1d4ab8daf1fdd67039f 100644 (file)
 
 %include "stdmac.asm"
 
-%ifdef DEBUG
-%macro MARK 1
-global %1
-%1:
-%endm
-%else
-%macro MARK 1
-%endm
-%endif
-
+%define LARGE_MATCH_HASH_REP 1  ; Hash 4 * LARGE_MATCH_HASH_REP elements
+%define LARGE_MATCH_MIN 264    ; Minimum match size to enter large match emit loop
+%define MIN_INBUF_PADDING 16
+%define MAX_EMIT_SIZE 258 * 16
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -62,6 +56,7 @@ global %1
 %define        tmp4            rbx
 %define        dist            rbx
 %define        code2           rbx
+%define hmask1         rbx
 
 %define        hash            rdx
 %define        len             rdx
@@ -78,6 +73,7 @@ global %1
 %define        curr_data2      r8
 %define        len2            r8
 %define        tmp6            r8
+%define        f_end_i         r8
 
 %define        m_bits          r9
 
@@ -85,7 +81,6 @@ global %1
 
 %define        m_out_buf       r11
 
-%define        f_end_i         r12
 %define        dist2           r12
 %define        tmp7            r12
 %define        code4           r12
@@ -116,12 +111,29 @@ global %1
 
 blen_mem_offset     equ  0      ; local variable (8 bytes)
 f_end_i_mem_offset  equ  8
-gpr_save_mem_offset equ 16       ; gpr save area (8*8 bytes)
-xmm_save_mem_offset equ 16 + 8*8 ; xmm save area (4*16 bytes) (16 byte aligned)
-stack_size          equ 2*8 + 8*8 + 4*16 + 8
+inbuf_slop_offset    equ 16
+gpr_save_mem_offset equ 32       ; gpr save area (8*8 bytes)
+xmm_save_mem_offset equ 32 + 8*8 ; xmm save area (4*16 bytes) (16 byte aligned)
+stack_size          equ 4*8 + 8*8 + 4*16 + 8
 ;;; 8 because stack address is odd multiple of 8 after a function call and
 ;;; we want it aligned to 16 bytes
 
+;; Defines to generate functions for different architecture
+%xdefine ARCH 01
+%xdefine ARCH1 02
+%xdefine ARCH2 04
+
+%ifndef COMPARE_TYPE
+%xdefine COMPARE_TYPE_NOT_DEF
+%xdefine COMPARE_TYPE 1
+%xdefine COMPARE_TYPE1 2
+%xdefine COMPARE_TYPE2 3
+%endif
+
+%rep 3
+%if ARCH == 04
+%define USE_HSWNI
+%endif
 ; void isal_deflate_body ( isal_zstream *stream )
 ; arg 1: rcx: addr of stream
 global isal_deflate_body_ %+ ARCH
@@ -132,18 +144,18 @@ isal_deflate_body_ %+ ARCH %+ :
 
        ;; do nothing if (avail_in == 0)
        cmp     dword [rcx + _avail_in], 0
-       jne     skip1
+       jne     .skip1
 
        ;; Set stream's next state
        mov     rdx, ZSTATE_FLUSH_READ_BUFFER
        mov     rax, ZSTATE_BODY
-       cmp     dword [rcx + _end_of_stream], 0
+       cmp     word [rcx + _end_of_stream], 0
        cmovne  rax, rdx
-       cmp     dword [rcx + _flush], _NO_FLUSH
+       cmp     word [rcx + _flush], _NO_FLUSH
        cmovne  rax, rdx
        mov     dword [rcx + _internal_state_state], eax
        ret
-skip1:
+.skip1:
 
 %ifdef ALIGN_STACK
        push    rbp
@@ -164,9 +176,10 @@ skip1:
        mov [rsp + gpr_save_mem_offset + 7*8], r15
 
        mov     stream, rcx
-       mov     dword [stream + _internal_state_has_eob], 0
+       mov     byte [stream + _internal_state_has_eob], 0
 
-       MOVDQU  xmask, [mask]
+       MOVD    xmask, [stream + _internal_state_hash_mask]
+       PSHUFD  xmask, xmask, 0
 
        ; state->bitbuf.set_buf(stream->next_out, stream->avail_out);
        mov     m_out_buf, [stream + _next_out]
@@ -189,16 +202,24 @@ skip1:
        mov     f_end_i %+ d, [stream + _avail_in]
        add     f_end_i, f_i
 
-       ; f_end_i -= LA;
-       sub     f_end_i, LA
+       mov     qword [rsp + inbuf_slop_offset], MIN_INBUF_PADDING
+       cmp     byte [stream + _end_of_stream], 0
+       jnz     .default_inbuf_padding
+       cmp     byte [stream + _flush], 0
+       jnz     .default_inbuf_padding
+       mov     qword [rsp + inbuf_slop_offset], LA
+.default_inbuf_padding:
+
+       ; f_end_i -= INBUF_PADDING;
+       sub     f_end_i, [rsp + inbuf_slop_offset]
        mov     [rsp + f_end_i_mem_offset], f_end_i
        ; if (f_end_i <= 0) continue;
 
        cmp     f_end_i, f_i
-       jle     input_end
+       jle     .input_end
 
+       MOVD    hmask1 %+ d, xmask
        ; for (f_i = f_start_i; f_i < f_end_i; f_i++) {
-MARK __body_compute_hash_ %+ ARCH
        MOVDQU  xdata, [file_start + f_i]
        mov     curr_data, [file_start + f_i]
        mov     tmp3, curr_data
@@ -209,23 +230,24 @@ MARK __body_compute_hash_ %+ ARCH
        shr     tmp3, 8
        compute_hash    hash2, tmp3
 
-       and     hash, HASH_MASK
-       and     hash2, HASH_MASK
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
 
-       cmp     dword [stream + _internal_state_has_hist], 0
-       je      write_first_byte
+       cmp     byte [stream + _internal_state_has_hist], IGZIP_NO_HIST
+       je      .write_first_byte
 
-       jmp     loop2
+       jmp     .loop2
        align   16
 
-loop2:
+.loop2:
+       mov     tmp3 %+ d, dword [stream + _internal_state_dist_mask]
+
        ; if (state->bitbuf.is_full()) {
        cmp     m_out_buf, [stream + _internal_state_bitbuf_m_out_end]
-       ja      output_end
+       ja      .output_end
 
        xor     dist, dist
        xor     dist2, dist2
-       xor     tmp3, tmp3
 
        lea     tmp1, [file_start + f_i]
 
@@ -247,22 +269,21 @@ loop2:
        mov     [stream + _internal_state_head + 2 * hash2], f_i %+ w
 
        ; if ((dist-1) < (D-1)) {
-       and     dist %+ d, (D-1)
+       and     dist, tmp3
        neg     dist
 
        shr     tmp8, 8
        compute_hash    tmp2, tmp8
 
-       and     dist2 %+ d, (D-1)
+       and     dist2, tmp3
        neg     dist2
 
-MARK __body_compare_ %+ ARCH
        ;; Check for long len/dist match (>7) with first literal
        MOVQ    len, xdata
        mov     curr_data, len
        PSRLDQ  xdata, 1
        xor     len, [tmp1 + dist - 1]
-       jz      compare_loop
+       jz      .compare_loop
 
        MOVD    xhash, tmp6 %+ d
        PINSRD  xhash, tmp2 %+ d, 1
@@ -271,7 +292,7 @@ MARK __body_compare_ %+ ARCH
        ;; Check for len/dist match (>7) with second literal
        MOVQ    len2, xdata
        xor     len2, [tmp1 + dist2]
-       jz      compare_loop2
+       jz      .compare_loop2
 
        ;; Specutively load the code for the first literal
        movzx   tmp1, curr_data %+ b
@@ -279,7 +300,7 @@ MARK __body_compare_ %+ ARCH
 
        ;; Check for len/dist match for first literal
        test    len %+ d, 0xFFFFFFFF
-       jz      len_dist_huffman_pre
+       jz      .len_dist_huffman_pre
 
        ;; Specutively load the code for the second literal
        shr     curr_data, 8
@@ -292,15 +313,14 @@ MARK __body_compare_ %+ ARCH
 
        ;; Check for len/dist match for second literal
        test    len2 %+ d, 0xFFFFFFFF
-       jnz     write_lit_bits
+       jnz     .write_lit_bits
 
-MARK __body_len_dist_lit_huffman_ %+ ARCH
-len_dist_lit_huffman_pre:
+.len_dist_lit_huffman_pre:
        mov     code_len3, rcx
        bsf     len2, len2
        shr     len2, 3
 
-len_dist_lit_huffman:
+.len_dist_lit_huffman:
        neg     dist2
 
 %ifndef LONGER_HUFFTABLE
@@ -311,6 +331,8 @@ len_dist_lit_huffman:
 %endif
        get_len_code    len2, code, rcx, hufftables ;; rcx is code_len
 
+       MOVD    hmask1 %+ d, xmask
+
        SHLX    code4, code4, rcx
        or      code4, code
        add     code_len2, rcx
@@ -318,69 +340,82 @@ len_dist_lit_huffman:
        add     f_i, len2
        neg     len2
 
+       SHLX    code4, code4, code_len3
+
        MOVQ    tmp5, xdata
        shr     tmp5, 24
-       compute_hash    tmp4, tmp5
-       and     tmp4, HASH_MASK
+       compute_hash    hash2, tmp5
+       and     hash2 %+ d, hmask1 %+ d
 
-       SHLX    code4, code4, code_len3
        or      code4, code3
        add     code_len2, code_len3
 
        ;; Setup for updating hash
        lea     tmp3, [f_i + len2 + 1]  ; tmp3 <= k
 
+       mov     tmp6, [rsp + f_end_i_mem_offset]
+       cmp     f_i, tmp6
+       jge     .len_dist_lit_huffman_finish
+
        MOVDQU  xdata, [file_start + f_i]
        mov     curr_data, [file_start + f_i]
-       mov     curr_data2, curr_data
 
        MOVD    hash %+ d, xhash
-       PEXTRD  hash2 %+ d, xhash, 1
+       PEXTRD  tmp6 %+ d, xhash, 1
        mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
 
        compute_hash    hash, curr_data
 
        add     tmp3,1
-       mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
+       mov     [stream + _internal_state_head + 2 * tmp6], tmp3 %+ w
 
        add     tmp3, 1
-       mov     [stream + _internal_state_head + 2 * tmp4], tmp3 %+ w
+       mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
 
-       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf, tmp4
-       mov     f_end_i, [rsp + f_end_i_mem_offset]
+       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf
 
+       mov     curr_data2, curr_data
        shr     curr_data2, 8
        compute_hash    hash2, curr_data2
 
 %ifdef NO_LIMIT_HASH_UPDATE
-loop3:
+.loop3:
        add     tmp3,1
        cmp     tmp3, f_i
-       jae     loop3_done
+       jae     .loop3_done
        mov     tmp6, [file_start + tmp3]
-       compute_hash    tmp4, tmp6
-       and     tmp4 %+ d, HASH_MASK
+       compute_hash    tmp1, tmp6
+       and     tmp1 %+ d, hmask1 %+ d
        ; state->head[hash] = k;
-       mov     [stream + _internal_state_head + 2 * tmp4], tmp3 %+ w
-       jmp      loop3
-loop3_done:
+       mov     [stream + _internal_state_head + 2 * tmp1], tmp3 %+ w
+       jmp      .loop3
+.loop3_done:
 %endif
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
 
        ; continue
-       cmp     f_i, f_end_i
-       jl      loop2
-       jmp     input_end
+       jmp     .loop2
        ;; encode as dist/len
+.len_dist_lit_huffman_finish:
+       MOVD    hash %+ d, xhash
+       PEXTRD  tmp6 %+ d, xhash, 1
+       mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
+       add     tmp3,1
+       mov     [stream + _internal_state_head + 2 * tmp6], tmp3 %+ w
+       add     tmp3, 1
+       mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
+
+       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf
+       jmp     .input_end
 
-MARK __body_len_dist_huffman_ %+ ARCH
-len_dist_huffman_pre:
+align  16
+.len_dist_huffman_pre:
        bsf     len, len
        shr     len, 3
 
-len_dist_huffman:
+.len_dist_huffman:
        dec     f_i
        neg     dist
 
@@ -397,8 +432,8 @@ len_dist_huffman:
        ; code2 <<= code_len
        ; code2 |= code
        ; code_len2 += code_len
-       SHLX    code2, code2, rcx
-       or      code2, code
+       SHLX    code4, code2, rcx
+       or      code4, code
        add     code_len2, rcx
 
        ;; Setup for updateing hash
@@ -411,68 +446,79 @@ len_dist_huffman:
        add     tmp3,1
        mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
 
+       MOVD    hmask1 %+ d, xmask
+
+       cmp     f_i, [rsp + f_end_i_mem_offset]
+       jge     .len_dist_huffman_finish
+
        MOVDQU  xdata, [file_start + f_i]
        mov     curr_data, [file_start + f_i]
-       mov     curr_data2, curr_data
        compute_hash    hash, curr_data
 
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp7
-       mov     f_end_i, [rsp + f_end_i_mem_offset]
+       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf
 
+       mov     curr_data2, curr_data
        shr     curr_data2, 8
        compute_hash    hash2, curr_data2
 
 %ifdef NO_LIMIT_HASH_UPDATE
-loop4:
+.loop4:
        add     tmp3,1
        cmp     tmp3, f_i
-       jae     loop4_done
+       jae     .loop4_done
        mov     tmp6, [file_start + tmp3]
-       compute_hash    tmp4, tmp6
-       and     tmp4, HASH_MASK
-       mov     [stream + _internal_state_head + 2 * tmp4], tmp3 %+ w
-       jmp      loop4
-loop4_done:
+       compute_hash    tmp1, tmp6
+       and     tmp1 %+ d, hmask1 %+ d
+       mov     [stream + _internal_state_head + 2 * tmp1], tmp3 %+ w
+       jmp     .loop4
+.loop4_done:
 %endif
 
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
 
        ; continue
-       cmp     f_i, f_end_i
-       jl      loop2
-       jmp     input_end
+       jmp     .loop2
+
+.len_dist_huffman_finish:
+       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf
+       jmp     .input_end
+
+align  16
+.write_lit_bits:
+       PSRLDQ  xdata, 1
 
-MARK __body_write_lit_bits_ %+ ARCH
-write_lit_bits:
-       MOVDQU  xdata, [file_start + f_i + 1]
-       mov     f_end_i, [rsp + f_end_i_mem_offset]
        add     f_i, 1
-       mov     curr_data, [file_start + f_i]
+       cmp     f_i, [rsp + f_end_i_mem_offset]
+       jge     .write_lit_bits_finish
+
+       MOVQ    curr_data, xdata
+       MOVDQU  xdata, [file_start + f_i]
 
        MOVD    hash %+ d, xhash
 
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp3
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
        PEXTRD  hash2 %+ d, xhash, 1
+       jmp      .loop2
 
-       ; continue
-       cmp     f_i, f_end_i
-       jl      loop2
+.write_lit_bits_finish:
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
-input_end:
+.input_end:
        mov     tmp1, ZSTATE_FLUSH_READ_BUFFER
        mov     tmp5, ZSTATE_BODY
-       cmp     dword [stream + _end_of_stream], 0
+       cmp     word [stream + _end_of_stream], 0
        cmovne  tmp5, tmp1
-       cmp     dword [stream + _flush], _NO_FLUSH
+       cmp     word [stream + _flush], _NO_FLUSH
        cmovne  tmp5, tmp1
        mov     dword [stream + _internal_state_state], tmp5 %+ d
 
-output_end:
+.output_end:
        ;; update input buffer
-       add     f_end_i, LA
+       mov     f_end_i, [rsp + f_end_i_mem_offset]
+       add     f_end_i, [rsp + inbuf_slop_offset]
        mov     [stream + _total_in], f_i %+ d
        add     file_start, f_i
        mov     [stream + _next_in], file_start
@@ -505,47 +551,207 @@ output_end:
 %endif
        ret
 
-MARK __body_compare_loops_ %+ ARCH
-compare_loop:
+align  16
+.compare_loop:
        MOVD    xhash, tmp6 %+ d
        PINSRD  xhash, tmp2 %+ d, 1
        PAND    xhash, xhash, xmask
        lea     tmp2, [tmp1 + dist - 1]
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len, tmp3, ytmp0, ytmp1
-%else
-       %error Unknown Compare type COMPARE_TYPE
-        % error
-%endif
-       jmp     len_dist_huffman
 
-compare_loop2:
+       mov     len2, [rsp + f_end_i_mem_offset]
+       sub     len2, f_i
+       add     len2, [rsp + inbuf_slop_offset]
+       add     len2, 1
+       mov     tmp3,  MAX_EMIT_SIZE
+       cmp     len2, tmp3
+       cmovg   len2, tmp3
+
+       mov     len, 8
+       compare_large   tmp1, tmp2, len, len2, tmp3, ytmp0, ytmp1
+
+       cmp     len, 258
+       jle     .len_dist_huffman
+       cmp     len, LARGE_MATCH_MIN
+       jge     .do_emit
+       mov     len, 258
+       jmp     .len_dist_huffman
+
+align  16
+.compare_loop2:
        lea     tmp2, [tmp1 + dist2]
        add     tmp1, 1
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len2, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len2, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len2, tmp3, ytmp0, ytmp1
-%else
-%error Unknown Compare type COMPARE_TYPE
- % error
-%endif
+
+       mov     len, [rsp + f_end_i_mem_offset]
+       sub     len, f_i
+       add     len, [rsp + inbuf_slop_offset]
+       mov     tmp3,  MAX_EMIT_SIZE
+       cmp     len, tmp3
+       cmovg   len, tmp3
+
+       mov     len2, 8
+       compare_large   tmp1, tmp2, len2, len, tmp3, ytmp0, ytmp1
+
        and     curr_data, 0xff
        get_lit_code    curr_data, code3, code_len3, hufftables
-       jmp     len_dist_lit_huffman
+       cmp     len2, 258
+       jle     .len_dist_lit_huffman
+       cmp     len2, LARGE_MATCH_MIN
+       jge     .do_emit2
+       mov     len2, 258
+       jmp     .len_dist_lit_huffman
+
+align  16
+.do_emit2:
+       neg     dist2
+
+       ; get_dist_code(dist2, &code2, &code_len2);
+       get_dist_code   dist2, code2, code_len2, hufftables
+
+       ; get_len_code(len, &code, &code_len);
+       get_len_code    258, code, rcx, hufftables ;; rcx is code_len
+
+       ; code2 <<= code_len
+       ; code2 |= code
+       ; code_len2 += code_len
+       SHLX    code4, code2, rcx
+       or      code4, code
+       add     code_len2, rcx
+       mov     tmp5, rcx
+
+       mov     rcx, code_len3
+       SHLX    tmp8, code4, rcx
+       or      code3, tmp8
+       add     rcx, code_len2
+       mov     code_len3, rcx
+
+       write_bits      m_bits, m_bit_count, code3, code_len3, m_out_buf
+
+       lea     tmp3, [f_i + 2] ; tmp3 <= k
+       MOVD    tmp2 %+ d, xhash
+       mov     [stream + _internal_state_head + 2 * tmp2], tmp3 %+ w
+       add     tmp3,1
+       PEXTRD  tmp2 %+ d, xhash, 1
+       mov     [stream + _internal_state_head + 2 * tmp2], tmp3 %+ w
 
-MARK __write_first_byte_ %+ ARCH
-write_first_byte:
+       add     f_i, 258
+       lea     len, [len2 - 258]
+
+       jmp     .emit_loop
+
+.do_emit:
+       dec     f_i
+       neg     dist
+
+       ; get_dist_code(dist, &code2, &code_len2);
+%ifndef LONGER_HUFFTABLE
+       mov tmp3, dist  ; since code2 and dist are rbx
+       get_dist_code   tmp3, code2, code_len2, hufftables ;; clobbers dist, rcx
+%else
+       get_dist_code   dist, code2, code_len2, hufftables
+%endif
+       ; get_len_code(len, &code, &code_len);
+       get_len_code    258, code, rcx, hufftables ;; rcx is code_len
+
+       ; code2 <<= code_len
+       ; code2 |= code
+       ; code_len2 += code_len
+       SHLX    code4, code2, rcx
+       or      code4, code
+       add     code_len2, rcx
+
+       lea     tmp3, [f_i + 2] ; tmp3 <= k
+       MOVD    tmp6 %+ d, xhash
+       PEXTRD  tmp5 %+ d, xhash, 1
+       mov     [stream + _internal_state_head + 2 * tmp6], tmp3 %+ w
+       add     tmp3,1
+       mov     [stream + _internal_state_head + 2 * tmp5], tmp3 %+ w
+       mov     tmp5, rcx
+
+.emit:
+       add     f_i, 258
+       sub     len, 258
+       mov     code3, code4
+
+       write_bits      m_bits, m_bit_count, code3, code_len2, m_out_buf
+
+.emit_loop:
        cmp     m_out_buf, [stream + _internal_state_bitbuf_m_out_end]
-       ja      output_end
+       ja      .output_end
+       cmp     len, LARGE_MATCH_MIN
+       jge     .emit
+
+       mov     len2, 258
+       cmp     len, len2
+       cmovg   len, len2
+
+       add     f_i, len
+
+       sub     code_len2, tmp5
+       get_len_code    len, code, rcx, hufftables
+       SHLX    code4, code2, rcx
+       or      code4, code
+       add     code_len2, rcx
+
+       write_bits      m_bits, m_bit_count, code4, code_len2, m_out_buf
 
-       mov     dword [stream + _internal_state_has_hist], 1
+       cmp     f_i, [rsp + f_end_i_mem_offset]
+       jge     .input_end
+
+       lea     tmp7, [f_i - 4 * LARGE_MATCH_HASH_REP]
+       MOVD    hmask1 %+ d, xmask
+%rep LARGE_MATCH_HASH_REP
+       mov     curr_data %+ d, dword [file_start + tmp7]
+       mov     curr_data2 %+ d, dword [file_start + tmp7 + 1]
+
+       compute_hash    hash, curr_data
+       compute_hash    hash2, curr_data2
+
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
+
+       mov     [stream + _internal_state_head + 2 * hash], tmp7 %+ w
+       add     tmp7, 1
+       mov     [stream + _internal_state_head + 2 * hash2], tmp7 %+ w
+       add     tmp7, 1
+
+       mov     curr_data %+ d, dword [file_start + tmp7]
+       mov     curr_data2 %+ d, dword [file_start + tmp7 + 1]
+
+       compute_hash    hash, curr_data
+       compute_hash    hash2, curr_data2
+
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
+
+       mov     [stream + _internal_state_head + 2 * hash], tmp7 %+ w
+       add     tmp7, 1
+       mov     [stream + _internal_state_head + 2 * hash2], tmp7 %+ w
+%if (LARGE_MATCH_HASH_REP > 1)
+       add     tmp7, 1
+%endif
+%endrep
+
+       MOVDQU  xdata, [file_start + f_i]
+       mov     curr_data, [file_start + f_i]
+       compute_hash    hash, curr_data
+
+
+       mov     curr_data2, curr_data
+       shr     curr_data2, 8
+       compute_hash    hash2, curr_data2
+
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
+
+       ; continue
+       jmp     .loop2
+
+.write_first_byte:
+       cmp     m_out_buf, [stream + _internal_state_bitbuf_m_out_end]
+       ja      .output_end
+
+       mov     byte [stream + _internal_state_has_hist], IGZIP_HIST
 
        mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
 
@@ -559,9 +765,22 @@ write_first_byte:
 
        and     curr_data, 0xff
        get_lit_code    curr_data, code2, code_len2, hufftables
-       jmp     write_lit_bits
+       jmp     .write_lit_bits
 
-section .data
-       align 16
-mask:  dd      HASH_MASK, HASH_MASK, HASH_MASK, HASH_MASK
-const_D: dq    D
+%ifdef USE_HSWNI
+%undef USE_HSWNI
+%endif
+
+;; Shift defines over in order to iterate over all versions
+%undef ARCH
+%xdefine ARCH ARCH1
+%undef ARCH1
+%xdefine ARCH1 ARCH2
+
+%ifdef COMPARE_TYPE_NOT_DEF
+%undef COMPARE_TYPE
+%xdefine COMPARE_TYPE COMPARE_TYPE1
+%undef COMPARE_TYPE1
+%xdefine COMPARE_TYPE1 COMPARE_TYPE2
+%endif
+%endrep
diff --git a/ceph/src/isa-l/igzip/igzip_body_01.asm b/ceph/src/isa-l/igzip/igzip_body_01.asm
deleted file mode 100644 (file)
index 648a335..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%define ARCH 01
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 2
-%endif
-
-%include "igzip_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_body_02.asm b/ceph/src/isa-l/igzip/igzip_body_02.asm
deleted file mode 100644 (file)
index 23ad132..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%define ARCH 02
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 2
-%endif
-
-%include "igzip_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_body_04.asm b/ceph/src/isa-l/igzip/igzip_body_04.asm
deleted file mode 100644 (file)
index 16b9b7a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-%define ARCH 04
-%define USE_HSWNI
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 3
-%endif
-
-%include "igzip_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_build_hash_table_perf.c b/ceph/src/isa-l/igzip/igzip_build_hash_table_perf.c
new file mode 100644 (file)
index 0000000..1c80dc8
--- /dev/null
@@ -0,0 +1,38 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <getopt.h>
+#include "igzip_lib.h"
+#include "test.h"
+
+#define DICT_LEN 32*1024
+
+extern void isal_deflate_hash(struct isal_zstream *stream, uint8_t * dict, int dict_len);
+
+void create_rand_data(uint8_t * data, uint32_t size)
+{
+       int i;
+       for (i = 0; i < size; i++) {
+               data[i] = rand() % 256;
+       }
+}
+
+int main(int argc, char *argv[])
+{
+       int time = BENCHMARK_TIME;
+       struct isal_zstream stream;
+       uint8_t dict[DICT_LEN];
+       uint32_t dict_len = DICT_LEN;
+
+       stream.level = 0;
+       create_rand_data(dict, dict_len);
+
+       struct perf start;
+       BENCHMARK(&start, time, isal_deflate_hash(&stream, dict, dict_len));
+
+       printf("igzip_build_hash_table_perf: in_size=%u ", dict_len);
+       perf_print(start, (long long)dict_len);
+
+       return 0;
+}
diff --git a/ceph/src/isa-l/igzip/igzip_checksums.h b/ceph/src/isa-l/igzip/igzip_checksums.h
new file mode 100644 (file)
index 0000000..e09a1f1
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef IGZIP_CHECKSUMS_H
+#define IGZIP_CHECKSUMS_H
+
+#include <stdint.h>
+
+#define MAX_ADLER_BUF (1 << 28)
+#define ADLER_MOD 65521
+
+uint32_t isal_adler32(uint32_t init_crc, const unsigned char *buf, uint64_t len);
+uint32_t isal_adler32_bam1(uint32_t init_crc, const unsigned char *buf, uint64_t len);
+
+#endif
index a5fb6cd4f6f7dfdc3cf1e9f638114279db39f7dd..c5ab3169f652e5742b4aed358e89ee94d9c90224 100644 (file)
 ;; sttni2 is faster, but it can't be debugged
 ;; so following code is based on "mine5"
 
-;; compare 258 bytes = 8 * 32 + 2
-;; tmp16 is a 16-bit version of tmp
-;; compare258 src1, src2, result, tmp
-%macro compare258 4
+;; compares 8 bytes at a time, using xor
+;; assumes the input buffer has size at least 8
+;; compare_r src1, src2, result, result_max, tmp
+%macro compare_r 5
 %define %%src1         %1
 %define %%src2         %2
 %define %%result       %3
-%define %%tmp          %4
-%define %%tmp16                %4w     ; tmp as a 16-bit register
+%define %%result_max   %4
+%define %%tmp          %5
+%define %%tmp16                %5w     ; tmp as a 16-bit register
+
+       sub     %%result_max, 16
+       cmp     %%result, %%result_max
+       jg      %%_by_8
 
-       xor     %%result, %%result
 %%loop1:
        mov     %%tmp, [%%src1 + %%result]
        xor     %%tmp, [%%src2 + %%result]
-       jnz     %%miscompare
+       jnz     %%miscompare_reg
        add     %%result, 8
 
        mov     %%tmp, [%%src1 + %%result]
        xor     %%tmp, [%%src2 + %%result]
-       jnz     %%miscompare
+       jnz     %%miscompare_reg
        add     %%result, 8
+       cmp     %%result, %%result_max
+       jle     %%loop1
 
-       cmp     %%result, 256
-       jb      %%loop1
+%%_by_8:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       jg      %%_cmp_last
 
        ; compare last two bytes
-       mov     %%tmp16, [%%src1 + %%result]
-       xor     %%tmp16, [%%src2 + %%result]
-       jnz     %%miscompare16
-
-       ; no miscompares, return 258
-       add     %%result, 2
-       jmp     %%end
-
-%%miscompare16:
-       and     %%tmp, 0xFFFF
-%%miscompare:
-       bsf     %%tmp, %%tmp
-       shr     %%tmp, 3
-       add     %%result, %%tmp
-%%end:
-%endm
-
-;; compare 258 bytes = 8 * 32 + 2
-;; tmp16 is a 16-bit version of tmp
-;; compare258 src1, src2, result, tmp
-%macro compare250 4
-%define %%src1         %1
-%define %%src2         %2
-%define %%result       %3
-%define %%tmp          %4
-%define %%tmp16                %4w     ; tmp as a 16-bit register
-
-       mov     %%result, 8
-       mov     %%tmp, [%%src1 + 8]
-       xor     %%tmp, [%%src2 + 8]
-       jnz     %%miscompare
-       add     %%result, 8
-
-%%loop1:
        mov     %%tmp, [%%src1 + %%result]
        xor     %%tmp, [%%src2 + %%result]
-       jnz     %%miscompare
+       jnz     %%miscompare_reg
        add     %%result, 8
 
+%%_cmp_last:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       je      %%end
+
+       lea     %%result, [%%result_max - 8]
+
        mov     %%tmp, [%%src1 + %%result]
        xor     %%tmp, [%%src2 + %%result]
-       jnz     %%miscompare
+       jnz     %%miscompare_reg
        add     %%result, 8
-
-       cmp     %%result, 256
-       jb      %%loop1
-
-       ; compare last two bytes
-       mov     %%tmp16, [%%src1 + %%result]
-       xor     %%tmp16, [%%src2 + %%result]
-       jnz     %%miscompare16
-
-       ; no miscompares, return 258
-       add     %%result, 2
        jmp     %%end
 
-%%miscompare16:
-       and     %%tmp, 0xFFFF
-%%miscompare:
+%%miscompare_reg:
        bsf     %%tmp, %%tmp
        shr     %%tmp, 3
        add     %%result, %%tmp
 %%end:
 %endm
 
-;; compare 258 bytes = 8 * 32 + 2
 ;; compares 16 bytes at a time, using pcmpeqb/pmovmskb
-;; compare258_x src1, src2, result, tmp, xtmp1, xtmp2
-%macro compare258_x 6
+;; assumes the input buffer has size at least 8
+;; compare_x src1, src2, result, result_max, tmp, xtmp1, xtmp2
+%macro compare_x 7
 %define %%src1         %1
 %define %%src2         %2
-%define %%result       %3
-%define %%tmp          %4
-%define %%tmp32                %4d
-%define %%tmp16                %4w     ; tmp as a 16-bit register
-%define %%xtmp         %5
-%define %%xtmp2                %6
+%define %%result       %3      ; Accumulator for match_length
+%define %%result_max   %4
+%define %%tmp          %5
+%define %%tmp16                %5w     ; tmp as a 16-bit register
+%define %%tmp32                %5d     ; tmp as a 32-bit register
+%define %%xtmp         %6
+%define %%xtmp2                %7
+
+       sub     %%result_max, 32
+       cmp     %%result, %%result_max
+       jg      %%_by_16
 
-       xor     %%result, %%result
 %%loop1:
        MOVDQU          %%xtmp, [%%src1 + %%result]
        MOVDQU          %%xtmp2, [%%src2 + %%result]
        PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
        PMOVMSKB        %%tmp32, %%xtmp
        xor             %%tmp, 0xFFFF
-       jnz             %%miscompare
+       jnz             %%miscompare_vect
        add             %%result, 16
 
        MOVDQU          %%xtmp, [%%src1 + %%result]
        PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
        PMOVMSKB        %%tmp32, %%xtmp
        xor             %%tmp, 0xFFFF
-       jnz             %%miscompare
+       jnz             %%miscompare_vect
        add             %%result, 16
 
-       cmp     %%result, 256
-       jb      %%loop1
-
-       ; compare last two bytes
-       mov     %%tmp16, [%%src1 + %%result]
-       xor     %%tmp16, [%%src2 + %%result]
-       jnz     %%miscompare16
-
-       ; no miscompares, return 258
-       add     %%result, 2
-       jmp     %%end
+       cmp     %%result, %%result_max
+       jle     %%loop1
 
-%%miscompare16:
-       and     %%tmp, 0xFFFF
-       bsf     %%tmp, %%tmp
-       shr     %%tmp, 3
-       add     %%result, %%tmp
-       jmp     %%end
-%%miscompare:
-       bsf     %%tmp, %%tmp
-       add     %%result, %%tmp
-%%end:
-%endm
+%%_by_16:
+       add     %%result_max, 16
+       cmp     %%result, %%result_max
+       jg      %%_by_8
 
-;; compare 258 bytes = 8 * 32 + 2, assuming first 8 bytes
-;; were already checked
-;; compares 16 bytes at a time, using pcmpeqb/pmovmskb
-;; compare250_x src1, src2, result, tmp, xtmp1, xtmp2
-%macro compare250_x 6
-%define %%src1         %1
-%define %%src2         %2
-%define %%result       %3
-%define %%tmp          %4
-%define %%tmp32                %4d     ; tmp as a 16-bit register
-%define %%xtmp         %5
-%define %%xtmp2                %6
-
-       mov     %%result, 8
-       MOVDQU          %%xtmp, [%%src1 + 8]
-       MOVDQU          %%xtmp2, [%%src2 + 8]
-       PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
-       PMOVMSKB        %%tmp32, %%xtmp
-       xor             %%tmp, 0xFFFF
-       jnz             %%miscompare
-       add             %%result, 16
-%%loop1:
        MOVDQU          %%xtmp, [%%src1 + %%result]
        MOVDQU          %%xtmp2, [%%src2 + %%result]
        PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
        PMOVMSKB        %%tmp32, %%xtmp
        xor             %%tmp, 0xFFFF
-       jnz             %%miscompare
+       jnz             %%miscompare_vect
        add             %%result, 16
 
-       MOVDQU          %%xtmp, [%%src1 + %%result]
-       MOVDQU          %%xtmp2, [%%src2 + %%result]
-       PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
-       PMOVMSKB        %%tmp32, %%xtmp
-       xor             %%tmp, 0xFFFF
-       jnz             %%miscompare
-       add             %%result, 16
+%%_by_8:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       jg      %%_cmp_last
+
+       ; compare last two bytes
+       mov     %%tmp, [%%src1 + %%result]
+       xor     %%tmp, [%%src2 + %%result]
+       jnz     %%miscompare_reg
+       add     %%result, 8
 
-       cmp     %%result, 258 - 16
-       jb      %%loop1
+%%_cmp_last:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       je      %%end
 
-       MOVDQU          %%xtmp, [%%src1 + %%result]
-       MOVDQU          %%xtmp2, [%%src2 + %%result]
-       PCMPEQB         %%xtmp, %%xtmp, %%xtmp2
-       PMOVMSKB        %%tmp32, %%xtmp
-       xor             %%tmp, 0xFFFF
-       jnz             %%miscompare_last
-       ; no miscompares, return 258
-       mov             %%result, 258
+       lea     %%result, [%%result_max - 8]
+
+       mov     %%tmp, [%%src1 + %%result]
+       xor     %%tmp, [%%src2 + %%result]
+       jnz     %%miscompare_reg
+       add     %%result, 8
        jmp     %%end
 
-%%miscompare_last:
+%%miscompare_reg:
        bsf     %%tmp, %%tmp
+       shr     %%tmp, 3
        add     %%result, %%tmp
-
-       ;; Guarantee the result has length at most 258.
-       mov     %%tmp, 258
-       cmp     %%result, 258
-       cmova   %%result, %%tmp
        jmp     %%end
-%%miscompare:
+
+%%miscompare_vect:
        bsf     %%tmp, %%tmp
        add     %%result, %%tmp
 %%end:
 %endm
 
-;; compare 258 bytes = 8 * 32 + 2
 ;; compares 32 bytes at a time, using pcmpeqb/pmovmskb
-;; compare258_y src1, src2, result, tmp, xtmp1, xtmp2
-%macro compare258_y 6
+;; assumes the input buffer has size at least 8
+;; compare_y src1, src2, result, result_max, tmp, xtmp1, xtmp2
+%macro compare_y 7
 %define %%src1         %1
 %define %%src2         %2
-%define %%result       %3
-%define %%tmp          %4
-%define %%tmp16                %4w     ; tmp as a 16-bit register
-%define %%tmp32                %4d     ; tmp as a 32-bit register
-%define %%ytmp         %5
-%define %%ytmp2                %6
+%define %%result       %3      ; Accumulator for match_length
+%define %%result_max   %4
+%define %%tmp          %5
+%define %%tmp16                %5w     ; tmp as a 16-bit register
+%define %%tmp32                %5d     ; tmp as a 32-bit register
+%define %%ytmp         %6
+%define %%ytmp2                %7
+
+       sub     %%result_max, 64
+       cmp     %%result, %%result_max
+       jg      %%_by_32
 
-       xor     %%result, %%result
 %%loop1:
        vmovdqu         %%ytmp, [%%src1 + %%result]
        vmovdqu         %%ytmp2, [%%src2 + %%result]
        vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
        vpmovmskb       %%tmp, %%ytmp
        xor             %%tmp32, 0xFFFFFFFF
-       jnz             %%miscompare
+       jnz             %%miscompare_vect
        add             %%result, 32
 
        vmovdqu         %%ytmp, [%%src1 + %%result]
        vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
        vpmovmskb       %%tmp, %%ytmp
        xor             %%tmp32, 0xFFFFFFFF
-       jnz             %%miscompare
+       jnz             %%miscompare_vect
        add             %%result, 32
 
-       cmp     %%result, 256
-       j     %%loop1
+       cmp     %%result, %%result_max
+       jle     %%loop1
 
-       ; compare last two bytes
-       mov     %%tmp16, [%%src1 + %%result]
-       xor     %%tmp16, [%%src2 + %%result]
-       jnz     %%miscompare16
+%%_by_32:
+       add     %%result_max, 32
+       cmp     %%result, %%result_max
+       jg      %%_by_16
+
+       vmovdqu         %%ytmp, [%%src1 + %%result]
+       vmovdqu         %%ytmp2, [%%src2 + %%result]
+       vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
+       vpmovmskb       %%tmp, %%ytmp
+       xor             %%tmp32, 0xFFFFFFFF
+       jnz             %%miscompare_vect
+       add             %%result, 32
+
+%%_by_16:
+       add     %%result_max, 16
+       cmp     %%result, %%result_max
+       jg      %%_by_8
+
+       vmovdqu         %%ytmp %+ x, [%%src1 + %%result]
+       vmovdqu         %%ytmp2 %+ x, [%%src2 + %%result]
+       vpcmpeqb        %%ytmp %+ x, %%ytmp %+ x, %%ytmp2 %+ x
+       vpmovmskb       %%tmp, %%ytmp %+ x
+       xor             %%tmp32, 0xFFFF
+       jnz             %%miscompare_vect
+       add             %%result, 16
 
-       ; no miscompares, return 258
-       add     %%result, 2
+%%_by_8:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       jg      %%_cmp_last
+
+       mov     %%tmp, [%%src1 + %%result]
+       xor     %%tmp, [%%src2 + %%result]
+       jnz     %%miscompare_reg
+       add     %%result, 8
+
+%%_cmp_last:
+       add     %%result_max, 8
+       cmp     %%result, %%result_max
+       je      %%end
+
+       lea     %%result, [%%result_max - 8]
+
+       ; compare last two bytes
+       mov     %%tmp, [%%src1 + %%result]
+       xor     %%tmp, [%%src2 + %%result]
+       jnz     %%miscompare_reg
+       add     %%result, 8
        jmp     %%end
 
-%%miscompare16:
-       and     %%tmp, 0xFFFF
+%%miscompare_reg:
        bsf     %%tmp, %%tmp
        shr     %%tmp, 3
        add     %%result, %%tmp
        jmp     %%end
-%%miscompare:
-       bsf     %%tmp, %%tmp
+
+%%miscompare_vect:
+       tzcnt   %%tmp, %%tmp
        add     %%result, %%tmp
 %%end:
 %endm
 
-
-;; compare 258 bytes = 8 * 32 + 2, assuming first 8 bytes
-;; were already checked
-;; compares 32 bytes at a time, using pcmpeqb/pmovmskb
-;; compare258_y src1, src2, result, tmp, xtmp1, xtmp2
-%macro compare250_y 6
+;; compares 64 bytes at a time
+;; compare_z src1, src2, result, result_max, tmp, ktmp, ztmp1, ztmp2
+;; Clobbers result_max
+%macro compare_z 8
 %define %%src1         %1
 %define %%src2         %2
-%define %%result       %3
-%define %%tmp          %4
-%define %%tmp16                %4w     ; tmp as a 16-bit register
-%define %%tmp32                %4d     ; tmp as a 32-bit register
-%define %%ytmp         %5
-%define %%ytmp2                %6
-
-       mov     %%result, 8
-       vmovdqu         %%ytmp, [%%src1 + 8]
-       vmovdqu         %%ytmp2, [%%src2 + 8]
-       vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
-       vpmovmskb       %%tmp, %%ytmp
-       xor             %%tmp32, 0xFFFFFFFF
-       jnz             %%miscompare
-       add             %%result, 32
+%define %%result       %3      ; Accumulator for match_length
+%define %%result_max   %4
+%define %%tmp          %5      ; tmp as a 16-bit register
+%define %%ktmp         %6
+%define %%ztmp         %7
+%define %%ztmp2                %8
+
+       sub     %%result_max, 128
+       cmp     %%result, %%result_max
+       jg      %%_by_64
+
 %%loop1:
-       vmovdqu         %%ytmp, [%%src1 + %%result]
-       vmovdqu         %%ytmp2, [%%src2 + %%result]
-       vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
-       vpmovmskb       %%tmp, %%ytmp
-       xor             %%tmp32, 0xFFFFFFFF
+       vmovdqu8        %%ztmp, [%%src1 + %%result]
+       vmovdqu8        %%ztmp2, [%%src2 + %%result]
+       vpcmpb          %%ktmp, %%ztmp, %%ztmp2, NEQ
+       ktestq          %%ktmp, %%ktmp
        jnz             %%miscompare
-       add             %%result, 32
+       add             %%result, 64
 
-       vmovdqu         %%ytmp, [%%src1 + %%result]
-       vmovdqu         %%ytmp2, [%%src2 + %%result]
-       vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
-       vpmovmskb       %%tmp, %%ytmp
-       xor             %%tmp32, 0xFFFFFFFF
+       vmovdqu8        %%ztmp, [%%src1 + %%result]
+       vmovdqu8        %%ztmp2, [%%src2 + %%result]
+       vpcmpb          %%ktmp, %%ztmp, %%ztmp2, NEQ
+       ktestq          %%ktmp, %%ktmp
        jnz             %%miscompare
-       add             %%result, 32
+       add             %%result, 64
 
-       cmp     %%result, 258 - 32
-       j     %%loop1
+       cmp     %%result, %%result_max
+       jle     %%loop1
 
-       vmovdqu         %%ytmp, [%%src1 + %%result]
-       vmovdqu         %%ytmp2, [%%src2 + %%result]
-       vpcmpeqb        %%ytmp, %%ytmp, %%ytmp2
-       vpmovmskb       %%tmp, %%ytmp
-       xor             %%tmp32, 0xFFFFFFFF
-       jnz             %%miscompare_last
-       mov     %%result, 258
-       jmp     %%end
+%%_by_64:
+       add     %%result_max, 64
+       cmp     %%result, %%result_max
+       jg      %%_less_than_64
 
-%%miscompare_last:
-       bsf     %%tmp, %%tmp
-       add     %%result, %%tmp
+       vmovdqu8        %%ztmp, [%%src1 + %%result]
+       vmovdqu8        %%ztmp2, [%%src2 + %%result]
+       vpcmpb          %%ktmp, %%ztmp, %%ztmp2, NEQ
+       ktestq          %%ktmp, %%ktmp
+       jnz             %%miscompare
+       add             %%result, 64
 
-       ;; Guarantee the result has length at most 258.
-       mov     %%tmp, 258
-       cmp     %%result, 258
-       cmova   %%result, %%tmp
-       jmp     %%end
+%%_less_than_64:
+       add     %%result_max, 64
+       sub     %%result_max, %%result
+       jle     %%end
+
+       mov     %%tmp, -1
+       bzhi    %%tmp, %%tmp, %%result_max
+       kmovq   %%ktmp, %%tmp
 
+       vmovdqu8        %%ztmp {%%ktmp}{z}, [%%src1 + %%result]
+       vmovdqu8        %%ztmp2 {%%ktmp}{z}, [%%src2 + %%result]
+       vpcmpb          %%ktmp, %%ztmp, %%ztmp2, NEQ
+       ktestq          %%ktmp, %%ktmp
+       jnz             %%miscompare
+       add             %%result, %%result_max
+
+       jmp     %%end
 %%miscompare:
-       bsf     %%tmp, %%tmp
+       kmovq   %%tmp, %%ktmp
+       tzcnt   %%tmp, %%tmp
        add     %%result, %%tmp
 %%end:
 %endm
 
+%macro compare250 7
+%define %%src1         %1
+%define %%src2         %2
+%define %%result       %3
+%define %%result_max   %4
+%define %%tmp          %5
+%define %%xtmp0                %6x
+%define %%xtmp1                %7x
+%define %%ytmp0                %6
+%define %%ytmp1                %7
+
+       mov     %%tmp, 250
+       cmp     %%result_max, 250
+       cmovg   %%result_max, %%tmp
+
+%if (COMPARE_TYPE == 1)
+       compare_r       %%src1, %%src2, %%result, %%result_max, %%tmp
+%elif (COMPARE_TYPE == 2)
+       compare_x       %%src1, %%src2, %%result, %%result_max, %%tmp, %%xtmp0, %%xtmp1
+%elif (COMPARE_TYPE == 3)
+       compare_y       %%src1, %%src2, %%result, %%result_max, %%tmp, %%ytmp0, %%ytmp1
+%else
+%error Unknown Compare type COMPARE_TYPE
+ % error
+%endif
+%endmacro
+
+; Assumes the buffer has at least 8 bytes
+; Accumulates match length onto result
+%macro compare_large 7
+%define %%src1         %1
+%define %%src2         %2
+%define %%result       %3
+%define %%result_max   %4
+%define %%tmp          %5
+%define %%xtmp0                %6x
+%define %%xtmp1                %7x
+%define %%ytmp0                %6
+%define %%ytmp1                %7
+
+%if (COMPARE_TYPE == 1)
+       compare_r       %%src1, %%src2, %%result, %%result_max, %%tmp
+%elif (COMPARE_TYPE == 2)
+       compare_x       %%src1, %%src2, %%result, %%result_max, %%tmp, %%xtmp0, %%xtmp1
+%elif (COMPARE_TYPE == 3)
+       compare_y       %%src1, %%src2, %%result, %%result_max, %%tmp, %%ytmp0, %%ytmp1
+%else
+%error Unknown Compare type COMPARE_TYPE
+ % error
+%endif
+%endmacro
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
index b048223d11f018c94ee655a611e35c2793ab317c..f5e35cd68bea4a16517af53a9d5e2f5692965f20 100644 (file)
@@ -1,3 +1,32 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 default rel
 
 %include "reg_sizes.asm"
@@ -12,9 +41,6 @@ default rel
 %define ISAL_DECODE_LONG_BITS 12
 %define ISAL_DECODE_SHORT_BITS 10
 
-%define MAX_LONG_CODE_LARGE (288 + (1 << (15 - ISAL_DECODE_LONG_BITS)))
-%define MAX_LONG_CODE_SMALL (32 + (1 << (15 - ISAL_DECODE_SHORT_BITS)))
-
 %define COPY_SIZE 16
 %define        COPY_LEN_MAX 258
 
@@ -26,6 +52,37 @@ default rel
 
 extern rfc1951_lookup_table
 
+
+
+%define LARGE_SHORT_SYM_LEN 25
+%define LARGE_SHORT_SYM_MASK ((1 << LARGE_SHORT_SYM_LEN) - 1)
+%define LARGE_LONG_SYM_LEN 10
+%define LARGE_LONG_SYM_MASK ((1 << LARGE_LONG_SYM_LEN) - 1)
+%define LARGE_SHORT_CODE_LEN_OFFSET 28
+%define LARGE_LONG_CODE_LEN_OFFSET 10
+%define LARGE_FLAG_BIT_OFFSET 25
+%define LARGE_FLAG_BIT (1 << LARGE_FLAG_BIT_OFFSET)
+%define LARGE_SYM_COUNT_OFFSET 26
+%define LARGE_SYM_COUNT_LEN 2
+%define LARGE_SYM_COUNT_MASK ((1 << LARGE_SYM_COUNT_LEN) - 1)
+%define LARGE_SHORT_MAX_LEN_OFFSET 26
+
+%define SMALL_SHORT_SYM_LEN 9
+%define SMALL_SHORT_SYM_MASK ((1 << SMALL_SHORT_SYM_LEN) - 1)
+%define SMALL_LONG_SYM_LEN 9
+%define SMALL_LONG_SYM_MASK ((1 << SMALL_LONG_SYM_LEN) - 1)
+%define SMALL_SHORT_CODE_LEN_OFFSET 11
+%define SMALL_LONG_CODE_LEN_OFFSET 10
+%define SMALL_FLAG_BIT_OFFSET 10
+%define SMALL_FLAG_BIT (1 << SMALL_FLAG_BIT_OFFSET)
+
+%define DIST_SYM_OFFSET 0
+%define DIST_SYM_LEN 5
+%define DIST_SYM_MASK ((1 << DIST_SYM_LEN) - 1)
+%define DIST_SYM_EXTRA_OFFSET 5
+%define DIST_SYM_EXTRA_LEN 4
+%define DIST_SYM_EXTRA_MASK ((1 << DIST_SYM_EXTRA_LEN) - 1)
+
 ;; rax
 %define        tmp3            rax
 %define        read_in_2       rax
@@ -45,6 +102,7 @@ extern rfc1951_lookup_table
 
 ;; rsi arg2
 %define        tmp2            rsi
+%define next_sym_num   rsi
 %define        next_bits       rsi
 
 ;; rbx ; Saved
@@ -80,8 +138,9 @@ extern rfc1951_lookup_table
 start_out_mem_offset   equ     0
 read_in_mem_offset     equ     8
 read_in_length_mem_offset      equ     16
-gpr_save_mem_offset    equ     24
-stack_size             equ     3 * 8 + 8 * 8
+next_out_mem_offset    equ     24
+gpr_save_mem_offset    equ     32
+stack_size             equ     4 * 8 + 8 * 8
 
 %define        _dist_extra_bit_count   264
 %define        _dist_start             _dist_extra_bit_count + 1*32
@@ -90,6 +149,7 @@ stack_size           equ     3 * 8 + 8 * 8
 
 %ifidn __OUTPUT_FORMAT__, elf64
 %define arg0   rdi
+%define arg1   rsi
 
 %macro FUNC_SAVE 0
 %ifdef ALIGN_STACK
@@ -128,6 +188,8 @@ stack_size          equ     3 * 8 + 8 * 8
 
 %ifidn __OUTPUT_FORMAT__, win64
 %define arg0   rcx
+%define arg1   rdx
+
 %macro FUNC_SAVE 0
 %ifdef ALIGN_STACK
        push    rbp
@@ -232,114 +294,169 @@ stack_size              equ     3 * 8 + 8 * 8
 %%end:
 %endm
 
+;; Clears all bits at index %%bit_count and above in %%next_bits
+;; May clobber rcx and %%bit_count
+%macro CLEAR_HIGH_BITS         3
+%define %%next_bits            %1
+%define %%bit_count            %2
+%define %%lookup_size          %3
+
+       sub     %%bit_count, 0x40 + %%lookup_size
+;; Extract the 15-DECODE_LOOKUP_SIZE bits beyond the first DECODE_LOOKUP_SIZE bits.
+%ifdef USE_HSWNI
+       and     %%bit_count, 0x1F
+       bzhi    %%next_bits, %%next_bits, %%bit_count
+%else
+%ifnidn %%bit_count, rcx
+       mov rcx, %%bit_count
+%endif
+       neg     rcx
+       shl     %%next_bits, cl
+       shr     %%next_bits, cl
+%endif
+
+%endm
+
 ;; Decode next symbol
 ;; Clobber rcx
-%macro decode_next             8
+%macro decode_next_lit_len     8
 %define        %%state                 %1 ; State structure associated with compressed stream
 %define %%lookup_size          %2 ; Number of bits used for small lookup
-%define        %%state_offset          %3
+%define        %%state_offset          %3 ; Type of huff code, should be either LIT or DIST
 %define %%read_in              %4 ; Bits read in from compressed stream
 %define %%read_in_length       %5 ; Number of valid bits in read_in
-%define %%next_sym             %6 ; Returned symobl
-%define %%next_bits            %7
-%define        %%next_bits2            %8
-
-       ;; Lookup possible next symbol
-       mov     %%next_bits, %%read_in
-       and     %%next_bits, (1 << %%lookup_size) - 1
-       movzx   %%next_sym, word [%%state + %%state_offset + 2 * %%next_bits]
+%define %%next_sym             %6 ; Returned symbols
+%define %%next_sym_num         %7 ; Returned symbols count
+%define        %%next_bits             %8
 
-       ;; Save length associated with symbol
+       mov     %%next_sym_num, %%next_sym
        mov     rcx, %%next_sym
-       shr     rcx, 9
+       shr     rcx, LARGE_SHORT_CODE_LEN_OFFSET
        jz      invalid_symbol
 
+       and     %%next_sym_num, LARGE_SYM_COUNT_MASK << LARGE_SYM_COUNT_OFFSET
+       shr     %%next_sym_num, LARGE_SYM_COUNT_OFFSET
+
        ;; Check if symbol or hint was looked up
-       and     %%next_sym, 0x81FF
-       cmp     %%next_sym, 0x8000
-       jl      %%end
+       and     %%next_sym, LARGE_FLAG_BIT | LARGE_SHORT_SYM_MASK
+       test    %%next_sym, LARGE_FLAG_BIT
+       jz      %%end
 
-       ;; Decode next_sym using hint
-       mov     %%next_bits2, %%read_in
+       shl     rcx, LARGE_SYM_COUNT_LEN
+       or      rcx, %%next_sym_num
 
-       ;; Extract the 15-DECODE_LOOKUP_SIZE bits beyond the first DECODE_LOOKUP_SIZE bits.
-%ifdef USE_HSWNI
-       and     rcx, 0x1F
-       bzhi    %%next_bits2, %%next_bits2, rcx
-%else
-       neg     rcx
-       shl     %%next_bits2, cl
-       shr     %%next_bits2, cl
-%endif
-       shr     %%next_bits2, %%lookup_size
+       ;; Save length associated with symbol
+       mov     %%next_bits, %%read_in
+       shr     %%next_bits, %%lookup_size
+
+       ;; Extract the bits beyond the first %%lookup_size bits.
+       CLEAR_HIGH_BITS %%next_bits, rcx, %%lookup_size
 
-       add     %%next_bits2, %%next_sym
+       and     %%next_sym, LARGE_SHORT_SYM_MASK
+       add     %%next_sym, %%next_bits
 
        ;; Lookup actual next symbol
-       movzx   %%next_sym, word [%%state + %%state_offset + 2 * %%next_bits2 + 2 *((1 << %%lookup_size) - 0x8000)]
+       movzx   %%next_sym, word [%%state + LARGE_LONG_CODE_SIZE * %%next_sym + %%state_offset + LARGE_SHORT_CODE_SIZE * (1 << %%lookup_size)]
+       mov     %%next_sym_num, 1
 
        ;; Save length associated with symbol
        mov     rcx, %%next_sym
-       shr     rcx, 9
+       shr     rcx, LARGE_LONG_CODE_LEN_OFFSET
        jz      invalid_symbol
-       and     %%next_sym, 0x1FF
+       and     %%next_sym, LARGE_LONG_SYM_MASK
+
 %%end:
-       ;; Updated read_in to reflect the bits which were decoded
-       sub     %%read_in_length, rcx
+;; Updated read_in to reflect the bits which were decoded
        SHRX    %%read_in, %%read_in, rcx
+       sub     %%read_in_length, rcx
 %endm
 
+;; Decode next symbol
+;; Clobber rcx
+%macro decode_next_lit_len_with_load   8
+%define        %%state                 %1 ; State structure associated with compressed stream
+%define %%lookup_size          %2 ; Number of bits used for small lookup
+%define        %%state_offset          %3
+%define %%read_in              %4 ; Bits read in from compressed stream
+%define %%read_in_length       %5 ; Number of valid bits in read_in
+%define %%next_sym             %6 ; Returned symbols
+%define %%next_sym_num         %7 ; Returned symbols count
+%define %%next_bits            %8
+
+       ;; Lookup possible next symbol
+       mov     %%next_bits, %%read_in
+       and     %%next_bits, (1 << %%lookup_size) - 1
+       mov     %%next_sym %+ d, dword [%%state + %%state_offset + LARGE_SHORT_CODE_SIZE * %%next_bits]
+
+       decode_next_lit_len %%state, %%lookup_size, %%state_offset, %%read_in, %%read_in_length, %%next_sym, %%next_sym_num, %%next_bits
+%endm
 
 ;; Decode next symbol
 ;; Clobber rcx
-%macro decode_next2            7
+%macro decode_next_dist        8
 %define        %%state                 %1 ; State structure associated with compressed stream
 %define %%lookup_size          %2 ; Number of bits used for small lookup
 %define        %%state_offset          %3 ; Type of huff code, should be either LIT or DIST
 %define %%read_in              %4 ; Bits read in from compressed stream
 %define %%read_in_length       %5 ; Number of valid bits in read_in
 %define %%next_sym             %6 ; Returned symobl
-%define        %%next_bits2            %7
-
-       ;; Save length associated with symbol
-       mov     %%next_bits2, %%read_in
-       shr     %%next_bits2, %%lookup_size
+%define %%next_extra_bits      %7
+%define        %%next_bits             %8
 
        mov     rcx, %%next_sym
-       shr     rcx, 9
-       jz      invalid_symbol
+       shr     rcx, SMALL_SHORT_CODE_LEN_OFFSET
+       jz      invalid_dist_symbol_ %+ %%next_sym
 
        ;; Check if symbol or hint was looked up
-       and     %%next_sym, 0x81FF
-       cmp     %%next_sym, 0x8000
-       jl      %%end
+       and     %%next_sym, SMALL_FLAG_BIT | SMALL_SHORT_SYM_MASK
+       test    %%next_sym, SMALL_FLAG_BIT
+       jz      %%end
+
+       ;; Save length associated with symbol
+       mov     %%next_bits, %%read_in
+       shr     %%next_bits, %%lookup_size
 
        ;; Extract the 15-DECODE_LOOKUP_SIZE bits beyond the first %%lookup_size bits.
-       lea     %%next_sym, [%%state + 2 * %%next_sym]
-       sub     rcx, 0x40 + %%lookup_size
+       lea     %%next_sym, [%%state + SMALL_LONG_CODE_SIZE * %%next_sym]
 
-%ifdef USE_HSWNI
-       bzhi    %%next_bits2, %%next_bits2, rcx
-%else
-       ;; Decode next_sym using hint
-       neg     rcx
-       shl     %%next_bits2, cl
-       shr     %%next_bits2, cl
-%endif
+       CLEAR_HIGH_BITS %%next_bits, rcx, %%lookup_size
 
        ;; Lookup actual next symbol
-       movzx   %%next_sym, word [%%next_sym + %%state_offset + 2 * %%next_bits2 + 2 * ((1 << %%lookup_size) - 0x8000)]
+       movzx   %%next_sym, word [%%next_sym + %%state_offset + SMALL_LONG_CODE_SIZE * %%next_bits + SMALL_SHORT_CODE_SIZE * (1 << %%lookup_size) - SMALL_LONG_CODE_SIZE * SMALL_FLAG_BIT]
 
        ;; Save length associated with symbol
        mov     rcx, %%next_sym
-       shr     rcx, 9
-       jz      invalid_symbol
-       and     %%next_sym, 0x1FF
+       shr     rcx, SMALL_LONG_CODE_LEN_OFFSET
+       jz      invalid_dist_symbol_ %+ %%next_sym
+       and     %%next_sym, SMALL_SHORT_SYM_MASK
 
 %%end:
        ;; Updated read_in to reflect the bits which were decoded
        SHRX    %%read_in, %%read_in, rcx
        sub     %%read_in_length, rcx
+       mov     rcx, %%next_sym
+       shr     rcx, DIST_SYM_EXTRA_OFFSET
+       and     %%next_sym, DIST_SYM_MASK
+%endm
+
+;; Decode next symbol
+;; Clobber rcx
+%macro decode_next_dist_with_load      8
+%define        %%state                 %1 ; State structure associated with compressed stream
+%define %%lookup_size          %2 ; Number of bits used for small lookup
+%define        %%state_offset          %3
+%define %%read_in              %4 ; Bits read in from compressed stream
+%define %%read_in_length       %5 ; Number of valid bits in read_in
+%define %%next_sym             %6 ; Returned symobl
+%define %%next_extra_bits      %7
+%define %%next_bits            %8
+
+       ;; Lookup possible next symbol
+       mov     %%next_bits, %%read_in
+       and     %%next_bits, (1 << %%lookup_size) - 1
+       movzx   %%next_sym, word [%%state + %%state_offset + SMALL_SHORT_CODE_SIZE * %%next_bits]
+
+       decode_next_dist %%state, %%lookup_size, %%state_offset, %%read_in, %%read_in_length, %%next_sym, %%next_extra_bits, %%next_bits
 %endm
 
 global decode_huffman_code_block_stateless_ %+ ARCH
@@ -348,6 +465,7 @@ decode_huffman_code_block_stateless_ %+ ARCH %+ :
        FUNC_SAVE
 
        mov     state, arg0
+       mov     [rsp + start_out_mem_offset], arg1
        lea     rfc_lookup, [rfc1951_lookup_table]
 
        mov     read_in,[state + _read_in]
@@ -362,12 +480,6 @@ decode_huffman_code_block_stateless_ %+ ARCH %+ :
        mov     dword [state + _copy_overflow_len], 0
        mov     dword [state + _copy_overflow_dist], 0
 
-       mov     tmp3 %+ d, dword [state + _total_out]
-       sub     tmp3, next_out
-       neg     tmp3
-
-       mov     [rsp + start_out_mem_offset], tmp3
-
        sub     end_out, OUT_BUFFER_SLOP
        sub     end_in, IN_BUFFER_SLOP
 
@@ -382,7 +494,7 @@ decode_huffman_code_block_stateless_ %+ ARCH %+ :
 skip_load:
        mov     tmp3, read_in
        and     tmp3, (1 << ISAL_DECODE_LONG_BITS) - 1
-       movzx   next_sym, word [state + _lit_huff_code + 2 * tmp3]
+       mov     next_sym %+ d, dword [state + _lit_huff_code + LARGE_SHORT_CODE_SIZE * tmp3]
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Main Loop
@@ -395,14 +507,17 @@ loop_block:
        jg      end_loop_block_pre
 
        ;; Decode next symbol and reload the read_in buffer
-       decode_next2    state, ISAL_DECODE_LONG_BITS, _lit_huff_code, read_in, read_in_length, next_sym, tmp1
+       decode_next_lit_len     state, ISAL_DECODE_LONG_BITS, _lit_huff_code, read_in, read_in_length, next_sym, next_sym_num, tmp1
 
-       ;; Save next_sym in next_sym2 so next_sym can be preloaded
-       mov     next_sym2, next_sym
+       ;; Specutively write next_sym if it is a literal
+       mov     [next_out], next_sym
+       add     next_out, next_sym_num
+       lea     next_sym2, [8 * next_sym_num - 8]
+       SHRX    next_sym2, next_sym, next_sym2
 
        ;; Find index to specutively preload next_sym from
-       mov     tmp3, read_in
-       and     tmp3, (1 << ISAL_DECODE_LONG_BITS) - 1
+       mov     tmp3, (1 << ISAL_DECODE_LONG_BITS) - 1
+       and     tmp3, read_in
 
        ;; Start reloading read_in
        mov     tmp1, [next_in]
@@ -410,15 +525,14 @@ loop_block:
        or      read_in, tmp1
 
        ;; Specutively load data associated with length symbol
-       movzx   rcx, byte [rfc_lookup + _len_extra_bit_count + next_sym2 - 257]
-       movzx   repeat_length, word [rfc_lookup + _len_start + 2 * (next_sym2 - 257)]
+       lea     repeat_length, [next_sym2 - 254]
 
        ;; Test for end of block symbol
        cmp     next_sym2, 256
        je      end_symbol_pre
 
        ;; Specutively load next_sym for next loop if a literal was decoded
-       movzx   next_sym, word [state + _lit_huff_code + 2 * tmp3]
+       mov     next_sym %+ d, dword [state + _lit_huff_code + LARGE_SHORT_CODE_SIZE * tmp3]
 
        ;; Finish updating read_in_length for read_in
        mov     tmp1, 64
@@ -428,50 +542,34 @@ loop_block:
        lea     read_in_length, [read_in_length + 8 * tmp1]
 
        ;; Specultively load next dist code
-       SHRX    read_in_2, read_in, rcx
-       mov     next_bits2, read_in_2
-       and     next_bits2, (1 << ISAL_DECODE_SHORT_BITS) - 1
-       movzx   next_sym3, word [state + _dist_huff_code + 2 * next_bits2]
-
-       ;; Specutively write next_sym2 if it is a literal
-       mov     [next_out], next_sym2
-       add     next_out, 1
+       mov     next_bits2, (1 << ISAL_DECODE_SHORT_BITS) - 1
+       and     next_bits2, read_in
+       movzx   next_sym3, word [state + _dist_huff_code + SMALL_SHORT_CODE_SIZE * next_bits2]
 
        ;; Check if next_sym2 is a literal, length, or end of block symbol
        cmp     next_sym2, 256
        jl      loop_block
 
 decode_len_dist:
-       ;; Find length for length/dist pair
-       mov     next_bits, read_in
-
-       BZHI    next_bits, next_bits, rcx, tmp4
-       add     repeat_length, next_bits
-
-       ;; Update read_in for the length extra bits which were read in
-       sub     read_in_length, rcx
+       ;; Determine next_out after the copy is finished
+       lea     next_out, [next_out + repeat_length - 1]
 
        ;; Decode distance code
-       decode_next2 state, ISAL_DECODE_SHORT_BITS, _dist_huff_code, read_in_2, read_in_length, next_sym3, tmp2
+       decode_next_dist state, ISAL_DECODE_SHORT_BITS, _dist_huff_code, read_in, read_in_length, next_sym3, rcx, tmp2
 
-       movzx   rcx, byte [rfc_lookup + _dist_extra_bit_count + next_sym3]
        mov     look_back_dist2 %+ d, [rfc_lookup + _dist_start + 4 * next_sym3]
 
-       ;; Load distance code extra bits
-       mov     next_bits, read_in_2
-
-       ;; Determine next_out after the copy is finished
-       add     next_out, repeat_length
-       sub     next_out, 1
+       ; ;; Load distance code extra bits
+       mov     next_bits, read_in
 
        ;; Calculate the look back distance
        BZHI    next_bits, next_bits, rcx, tmp4
-       SHRX    read_in_2, read_in_2, rcx
+       SHRX    read_in, read_in, rcx
 
        ;; Setup next_sym, read_in, and read_in_length for next loop
-       mov     read_in, read_in_2
-       and     read_in_2, (1 << ISAL_DECODE_LONG_BITS) - 1
-       movzx   next_sym, word [state + _lit_huff_code + 2 * read_in_2]
+       mov     read_in_2, (1 << ISAL_DECODE_LONG_BITS) - 1
+       and     read_in_2, read_in
+       mov     next_sym %+ d, dword [state + _lit_huff_code + LARGE_SHORT_CODE_SIZE * read_in_2]
        sub     read_in_length, rcx
 
        ;; Copy distance in len/dist pair
@@ -536,40 +634,30 @@ end_loop_block:
        inflate_in_small_load   next_in, end_in, read_in, read_in_length, tmp1, tmp2
        mov     [rsp + read_in_mem_offset], read_in
        mov     [rsp + read_in_length_mem_offset], read_in_length
+       mov     [rsp + next_out_mem_offset], next_out
 
-       decode_next state, ISAL_DECODE_LONG_BITS, _lit_huff_code, read_in, read_in_length, next_sym, tmp1, tmp2
+       decode_next_lit_len_with_load state, ISAL_DECODE_LONG_BITS, _lit_huff_code, read_in, read_in_length, next_sym, next_sym_num, tmp1
 
        ;; Check that enough input was available to decode symbol
        cmp     read_in_length, 0
        jl      end_of_input
 
+multi_symbol_start:
+       cmp     next_sym_num, 1
+       jg      decode_literal
+
        cmp     next_sym, 256
        jl      decode_literal
        je      end_symbol
 
 decode_len_dist_2:
-       ;; Load length exta bits
-       mov     next_bits, read_in
-
-       movzx   repeat_length, word [rfc_lookup + _len_start + 2 * (next_sym - 257)]
-       movzx   rcx, byte [rfc_lookup + _len_extra_bit_count + next_sym - 257]
-
-       ;; Calculate repeat length
-       BZHI    next_bits, next_bits, rcx, tmp1
-       add     repeat_length, next_bits
-
-       ;; Update read_in for the length extra bits which were read in
-       SHRX    read_in, read_in, rcx
-       sub     read_in_length, rcx
-
+       lea     repeat_length, [next_sym - 254]
        ;; Decode distance code
-       decode_next state, ISAL_DECODE_SHORT_BITS, _dist_huff_code, read_in, read_in_length, next_sym, tmp1, tmp2
+       decode_next_dist_with_load state, ISAL_DECODE_SHORT_BITS, _dist_huff_code, read_in, read_in_length, next_sym, rcx, tmp1
 
        ;; Load distance code extra bits
        mov     next_bits, read_in
        mov     look_back_dist %+ d, [rfc_lookup + _dist_start + 4 * next_sym]
-       movzx   rcx, byte [rfc_lookup + _dist_extra_bit_count + next_sym]
-
 
        ;; Calculate the look back distance and check for enough input
        BZHI    next_bits, next_bits, rcx, tmp1
@@ -604,12 +692,19 @@ decode_literal:
        jge     out_buffer_overflow_lit
        add     next_out, 1
        mov     byte [next_out - 1], next_sym %+ b
-       jmp     end_loop_block
+       sub     next_sym_num, 1
+       jz      end_loop_block
+       shr     next_sym, 8
+       jmp     multi_symbol_start
 
 ;; Set exit codes
 end_of_input:
        mov     read_in, [rsp + read_in_mem_offset]
        mov     read_in_length, [rsp + read_in_length_mem_offset]
+       mov     next_out, [rsp + next_out_mem_offset]
+       xor     tmp1, tmp1
+       mov     dword [state + _write_overflow_lits], tmp1 %+ d
+       mov     dword [state + _write_overflow_len], tmp1 %+ d
        mov     rax, END_INPUT
        jmp     end
 
@@ -629,37 +724,69 @@ out_buffer_overflow_repeat:
        jmp     end
 
 out_buffer_overflow_lit:
-       mov     read_in, [rsp + read_in_mem_offset]
-       mov     read_in_length, [rsp + read_in_length_mem_offset]
+       mov     dword [state + _write_overflow_lits], next_sym %+ d
+       mov     dword [state + _write_overflow_len], next_sym_num %+ d
+       sub     next_sym_num, 1
+       shl     next_sym_num, 3
+       SHRX    next_sym, next_sym, next_sym_num
        mov     rax, OUT_OVERFLOW
-       jmp     end
+       shr     next_sym_num, 3
+       cmp     next_sym, 256
+       jl      end
+       mov     dword [state + _write_overflow_len], next_sym_num %+ d
+       jg      decode_len_dist_2
+       jmp     end_state
 
 invalid_look_back_distance:
        mov     rax, INVALID_LOOKBACK
        jmp     end
 
+invalid_dist_symbol_ %+ next_sym:
+       cmp     read_in_length, next_sym
+       jl      end_of_input
+       jmp     invalid_symbol
+invalid_dist_symbol_ %+ next_sym3:
+       cmp     read_in_length, next_sym3
+       jl      end_of_input
 invalid_symbol:
        mov     rax, INVALID_SYMBOL
        jmp     end
 
 end_symbol_pre:
        ;; Fix up in buffer and out buffer to reflect the actual buffer
+       sub     next_out, 1
        add     end_out, OUT_BUFFER_SLOP
        add     end_in, IN_BUFFER_SLOP
 end_symbol:
+       xor     rax, rax
+end_state:
        ;;  Set flag identifying a new block is required
        mov     byte [state + _block_state], ISAL_BLOCK_NEW_HDR
-       xor     rax, rax
+       cmp     dword [state + _bfinal], 0
+       je      end
+       mov     byte [state + _block_state], ISAL_BLOCK_INPUT_DONE
+
 end:
        ;; Save current buffer states
        mov     [state + _read_in], read_in
        mov     [state + _read_in_length], read_in_length %+ d
-       mov     [state + _next_out], next_out
+
+       ;; Set avail_out
        sub     end_out, next_out
        mov     dword [state + _avail_out], end_out %+ d
-       sub     next_out, [rsp + start_out_mem_offset]
-       mov     [state + _total_out], next_out %+ d
+
+       ;; Set total_out
+       mov     tmp1, next_out
+       sub     tmp1, [state + _next_out]
+       add     [state + _total_out], tmp1 %+ d
+
+       ;; Set next_out
+       mov     [state + _next_out], next_out
+
+       ;; Set next_in
        mov     [state + _next_in], next_in
+
+       ;; Set avail_in
        sub     end_in, next_in
        mov     [state + _avail_in], end_in %+ d
 
diff --git a/ceph/src/isa-l/igzip/igzip_deflate_hash.asm b/ceph/src/isa-l/igzip/igzip_deflate_hash.asm
new file mode 100644 (file)
index 0000000..b61c4be
--- /dev/null
@@ -0,0 +1,165 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "options.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "huffman.asm"
+%include "reg_sizes.asm"
+
+%define DICT_SLOP 8
+%define DICT_END_SLOP 4
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define arg4 r9
+%define arg5 rdi
+%define swap1 rsi
+%define stack_size 3 * 8
+%define PS 8
+%define arg(x)      [rsp + stack_size + PS*x]
+%else
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define arg4 rcx
+%define arg5 r8
+%define swap1 r9
+%endif
+
+%define hash_table arg1
+
+%define hash_mask arg2
+
+%define f_i_end arg3
+
+%define dict_offset arg4
+
+%define dict_len arg5
+%define f_i arg5
+
+%define f_i_tmp rax
+
+%define hash swap1
+
+%define hash2 r10
+
+%define hash3 r11
+
+%define hash4 r12
+
+
+%macro FUNC_SAVE 0
+%ifidn __OUTPUT_FORMAT__, win64
+       push rsi
+       push rdi
+       push r12
+       mov arg5 %+ d, arg(5)
+%else
+       push r12
+%endif
+%endm
+
+%macro FUNC_RESTORE 0
+%ifidn __OUTPUT_FORMAT__, win64
+       pop r12
+       pop rdi
+       pop rsi
+%else
+       pop r12
+%endif
+%endm
+
+global isal_deflate_hash_crc_01
+isal_deflate_hash_crc_01:
+       FUNC_SAVE
+
+       neg     f_i
+       add     f_i, f_i_end
+
+       sub     dict_offset, f_i
+
+       sub     f_i_end, DICT_SLOP
+       cmp     f_i, f_i_end
+       jg      end_main
+
+main_loop:
+       lea     f_i_tmp, [f_i + 2]
+
+       xor     hash, hash
+       crc32   hash %+ d, dword [f_i + dict_offset]
+
+       xor     hash2, hash2
+       crc32   hash2 %+ d, dword [f_i + dict_offset + 1]
+
+       xor     hash3, hash3
+       crc32   hash3 %+ d, dword [f_i_tmp + dict_offset]
+
+       xor     hash4, hash4
+       crc32   hash4 %+ d, dword [f_i_tmp + dict_offset + 1]
+
+       and     hash, hash_mask
+       and     hash2, hash_mask
+       and     hash3, hash_mask
+       and     hash4, hash_mask
+
+       mov     [hash_table + 2 * hash], f_i %+ w
+       add     f_i, 1
+
+       mov     [hash_table + 2 * hash2], f_i %+ w
+       add     f_i, 3
+
+       mov     [hash_table + 2 * hash3], f_i_tmp %+ w
+       add     f_i_tmp, 1
+
+       mov     [hash_table + 2 * hash4], f_i_tmp %+ w
+
+       cmp     f_i, f_i_end
+       jle     main_loop
+
+end_main:
+       add     f_i_end, DICT_SLOP - DICT_END_SLOP
+       cmp     f_i, f_i_end
+       jg      end
+
+end_loop:
+       xor     hash, hash
+       crc32   hash %+ d, dword [f_i + dict_offset]
+
+       and     hash, hash_mask
+       mov     [hash_table + 2 * hash], f_i %+ w
+
+       add     f_i, 1
+       cmp     f_i, f_i_end
+       jle     end_loop
+end:
+       FUNC_RESTORE
+       ret
index 8ae45cd61119c953360878cad5fb548d855fa98a..c04ed24a876a7852df95603895dcbc338d329d6a 100644 (file)
@@ -27,6 +27,7 @@
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
 #include "test.h"
 
 #define BUF_SIZE 1024
-#define MIN_TEST_LOOPS   10
-#ifndef RUN_MEM_SIZE
-# define RUN_MEM_SIZE 500000000
-#endif
 
-struct isal_zstream stream;
+int level_size_buf[10] = {
+#ifdef ISAL_DEF_LVL0_DEFAULT
+       ISAL_DEF_LVL0_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL1_DEFAULT
+       ISAL_DEF_LVL1_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL2_DEFAULT
+       ISAL_DEF_LVL2_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL3_DEFAULT
+       ISAL_DEF_LVL3_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL4_DEFAULT
+       ISAL_DEF_LVL4_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL5_DEFAULT
+       ISAL_DEF_LVL5_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL6_DEFAULT
+       ISAL_DEF_LVL6_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL7_DEFAULT
+       ISAL_DEF_LVL7_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL8_DEFAULT
+       ISAL_DEF_LVL8_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL9_DEFAULT
+       ISAL_DEF_LVL9_DEFAULT,
+#else
+       0,
+#endif
+};
 
 int usage(void)
 {
@@ -50,50 +98,93 @@ int usage(void)
                "  -h        help\n"
                "  -X        use compression level X with 0 <= X <= 1\n"
                "  -b <size> input buffer size, 0 buffers all the input\n"
-               "  -i <iter> number of iterations (at least 1)\n"
-               "  -o <file> output file for compresed data\n");
+               "  -i <time> time in seconds to benchmark (at least 1)\n"
+               "  -o <file> output file for compresed data\n"
+               "  -d <file> dictionary file used by compression\n"
+               "  -w <size> log base 2 size of history window, between 8 and 15\n");
+
        exit(0);
 }
 
-int get_filesize(FILE * f)
+void deflate_perf(struct isal_zstream *stream, uint8_t * inbuf, size_t infile_size,
+                 size_t inbuf_size, uint8_t * outbuf, size_t outbuf_size, int level,
+                 uint8_t * level_buf, int level_size, uint32_t hist_bits, uint8_t * dictbuf,
+                 size_t dictfile_size, struct isal_hufftables *hufftables_custom)
 {
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
+       int avail_in;
+       isal_deflate_init(stream);
+       if (dictbuf != NULL)
+               isal_deflate_set_dict(stream, dictbuf, dictfile_size);
+       stream->end_of_stream = 0;
+       stream->flush = NO_FLUSH;
+       stream->level = level;
+       stream->level_buf = level_buf;
+       stream->level_buf_size = level_size;
+       stream->next_out = outbuf;
+       stream->avail_out = outbuf_size;
+       stream->next_in = inbuf;
+       if (hufftables_custom != NULL)
+               stream->hufftables = hufftables_custom;
+       stream->hist_bits = hist_bits;
+       avail_in = infile_size;
+
+       while (avail_in > 0) {
+               stream->avail_in = avail_in >= inbuf_size ? inbuf_size : avail_in;
+               avail_in -= inbuf_size;
+
+               if (avail_in <= 0)
+                       stream->end_of_stream = 1;
+
+               isal_deflate(stream);
+
+               if (stream->avail_in != 0)
+                       break;
+       }
 }
 
 int main(int argc, char *argv[])
 {
-       FILE *in, *out = NULL;
-       unsigned char *inbuf, *outbuf, *level_buf = NULL;
-       int i, c, infile_size, iterations = 0, outbuf_size, inbuf_size = 0;
+       FILE *in = NULL, *out = NULL, *dict = NULL;
+       unsigned char *inbuf, *outbuf, *level_buf = NULL, *dictbuf = NULL;
+       int c, time = BENCHMARK_TIME, inbuf_size = 0;
+       size_t infile_size, outbuf_size, dictfile_size;
        struct isal_huff_histogram histogram;
        struct isal_hufftables hufftables_custom;
-       int level = 0, level_size = 0, avail_in;
-       char *in_file_name = NULL, *out_file_name = NULL;
+       int level = 0, level_size = 0;
+       char *in_file_name = NULL, *out_file_name = NULL, *dict_file_name = NULL;
+       uint32_t hist_bits = 0;
+       struct isal_zstream stream;
+
+       while ((c = getopt(argc, argv, "h0123456789i:b:o:d:w:")) != -1) {
+               if (c >= '0' && c <= '9') {
+                       if (c > '0' + ISAL_DEF_MAX_LEVEL)
+                               usage();
+                       else {
+                               level = c - '0';
+                               level_size = level_size_buf[level];
+                       }
+                       continue;
+               }
 
-       while ((c = getopt(argc, argv, "h01i:b:o:")) != -1) {
                switch (c) {
                case 'o':
                        out_file_name = optarg;
                        break;
+               case 'd':
+                       dict_file_name = optarg;
+                       break;
                case 'i':
-                       iterations = atoi(optarg);
-                       if (iterations < 1)
+                       time = atoi(optarg);
+                       if (time < 1)
                                usage();
                        break;
                case 'b':
                        inbuf_size = atoi(optarg);
                        break;
-               case '1':
-                       level = 1;
-                       level_size = ISAL_DEF_LVL1_LARGE;
-                       break;
-               case '0':
+               case 'w':
+                       hist_bits = atoi(optarg);
+                       if (hist_bits > 15 || hist_bits < 8)
+                               usage();
                        break;
                case 'h':
                default:
@@ -121,7 +212,23 @@ int main(int argc, char *argv[])
                printf("outfile=%s\n", out_file_name);
        }
 
-       printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
+       if (dict_file_name != NULL) {
+               dict = fopen(dict_file_name, "rb");
+               if (!dict) {
+                       fprintf(stderr, "Can't open %s for reading\n", dict_file_name);
+                       exit(0);
+               }
+               printf("outfile=%s\n", dict_file_name);
+       }
+
+       if (hist_bits == 0)
+               printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
+
+       else if (hist_bits < 10)
+               printf("Window Size: %.2f K\n", 1.0 * (1 << hist_bits) / 1024);
+       else
+               printf("Window Size: %d K\n", (1 << hist_bits) / 1024);
+
        printf("igzip_file_perf: \n");
        fflush(0);
 
@@ -132,11 +239,7 @@ int main(int argc, char *argv[])
 
        outbuf_size = 2 * infile_size + BUF_SIZE;
 
-       if (iterations == 0) {
-               iterations = infile_size ? RUN_MEM_SIZE / infile_size : MIN_TEST_LOOPS;
-               if (iterations < MIN_TEST_LOOPS)
-                       iterations = MIN_TEST_LOOPS;
-       }
+       dictfile_size = (dict_file_name != NULL) ? get_filesize(dict) : 0;
 
        inbuf = malloc(infile_size);
        if (inbuf == NULL) {
@@ -149,6 +252,14 @@ int main(int argc, char *argv[])
                exit(0);
        }
 
+       if (dictfile_size != 0) {
+               dictbuf = malloc(dictfile_size);
+               if (dictbuf == NULL) {
+                       fprintf(stderr, "Can't allocate dictionary buffer memory\n");
+                       exit(0);
+               }
+       }
+
        if (level_size != 0) {
                level_buf = malloc(level_size);
                if (level_buf == NULL) {
@@ -159,7 +270,8 @@ int main(int argc, char *argv[])
 
        inbuf_size = inbuf_size ? inbuf_size : infile_size;
 
-       printf("igzip_file_perf: %s %d iterations\n", in_file_name, iterations);
+       printf("igzip_file_perf: %s\n", in_file_name);
+
        /* Read complete input file into buffer */
        stream.avail_in = (uint32_t) fread(inbuf, 1, infile_size, in);
        if (stream.avail_in != infile_size) {
@@ -167,44 +279,24 @@ int main(int argc, char *argv[])
                exit(0);
        }
 
-       struct perf start, stop;
-       perf_start(&start);
-
-       for (i = 0; i < iterations; i++) {
-               isal_deflate_init(&stream);
-               stream.end_of_stream = 0;
-               stream.flush = NO_FLUSH;
-               stream.level = level;
-               stream.level_buf = level_buf;
-               stream.level_buf_size = level_size;
-               stream.next_out = outbuf;
-               stream.avail_out = outbuf_size;
-               stream.next_in = inbuf;
-               avail_in = infile_size;
-
-               while (avail_in > 0) {
-                       stream.avail_in = avail_in >= inbuf_size ? inbuf_size : avail_in;
-                       avail_in -= inbuf_size;
-
-                       if (avail_in <= 0)
-                               stream.end_of_stream = 1;
-
-                       isal_deflate(&stream);
-
-                       if (stream.avail_in != 0)
-                               break;
-               }
+       /* Read complete dictionary into buffer */
+       if ((dictfile_size != 0) && (dictfile_size != fread(dictbuf, 1, dictfile_size, dict))) {
+               fprintf(stderr, "Couldn't fit all of dictionary file into buffer\n");
+               exit(0);
        }
 
-       perf_stop(&stop);
-
+       struct perf start;
+       BENCHMARK(&start, time,
+                 deflate_perf(&stream, inbuf, infile_size, inbuf_size, outbuf, outbuf_size,
+                              level, level_buf, level_size, hist_bits, dictbuf,
+                              dictfile_size, NULL));
        if (stream.avail_in != 0) {
                fprintf(stderr, "Could not compress all of inbuf\n");
                exit(0);
        }
 
-       printf("  file %s - in_size=%d out_size=%d iter=%d ratio=%3.1f%%",
-              in_file_name, infile_size, stream.total_out, i,
+       printf("  file %s - in_size=%lu out_size=%d ratio=%3.1f%%",
+              in_file_name, infile_size, stream.total_out,
               100.0 * stream.total_out / infile_size);
 
        if (level == 0) {
@@ -213,30 +305,9 @@ int main(int argc, char *argv[])
                isal_update_histogram(inbuf, infile_size, &histogram);
                isal_create_hufftables(&hufftables_custom, &histogram);
 
-               isal_deflate_init(&stream);
-               stream.end_of_stream = 0;
-               stream.flush = NO_FLUSH;
-               stream.level = level;
-               stream.level_buf = level_buf;
-               stream.level_buf_size = level_size;
-               stream.next_out = outbuf;
-               stream.avail_out = outbuf_size;
-               stream.next_in = inbuf;
-               stream.hufftables = &hufftables_custom;
-               avail_in = infile_size;
-
-               while (avail_in > 0) {
-                       stream.avail_in = avail_in >= inbuf_size ? inbuf_size : avail_in;
-                       avail_in -= inbuf_size;
-
-                       if (avail_in <= 0)
-                               stream.end_of_stream = 1;
-
-                       isal_deflate(&stream);
-
-                       if (stream.avail_in != 0)
-                               break;
-               }
+               deflate_perf(&stream, inbuf, infile_size, inbuf_size, outbuf, outbuf_size,
+                            level, level_buf, level_size, hist_bits, dictbuf,
+                            dictfile_size, &hufftables_custom);
 
                printf(" ratio_custom=%3.1f%%", 100.0 * stream.total_out / infile_size);
        }
@@ -248,7 +319,7 @@ int main(int argc, char *argv[])
        }
 
        printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
+       perf_print(start, (long long)infile_size);
 
        if (argc > 2 && out) {
                printf("writing %s\n", out_file_name);
index e8d5e36049462e67ab78fa13678f2357fbfcf008..36823e13883ab50ef42fd9d34761a7546b43e5dd 100644 (file)
 %define f_i            rdi
 
 %define code_len2      rbp
+%define hmask1         rbp
 
 %define m_out_buf      r8
 
 %define m_bits         r9
 
 %define dist           r10
+%define hmask2         r10
 
 %define m_bit_count    r11
 
@@ -126,29 +128,31 @@ skip_SLOP:
 
        mov     curr_data %+ d, [file_start + f_i]
 
-       cmp     dword [stream + _internal_state_has_hist], 0
+       cmp     byte [stream + _internal_state_has_hist], IGZIP_NO_HIST
        jne     skip_write_first_byte
 
        cmp     m_out_buf, [stream + _internal_state_bitbuf_m_out_end]
        ja      end_loop_2
-
+       mov     hmask1 %+ d, dword [stream + _internal_state_hash_mask]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask1 %+ d
        mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
-       mov     dword [stream + _internal_state_has_hist], 1
+       mov     byte [stream + _internal_state_has_hist], IGZIP_HIST
        jmp     encode_literal
 
 skip_write_first_byte:
 
 loop2:
+       mov     tmp3 %+ d, dword [stream + _internal_state_dist_mask]
+       mov     hmask1 %+ d,  dword [stream + _internal_state_hash_mask]
        ; if (state->bitbuf.is_full()) {
        cmp     m_out_buf, [stream + _internal_state_bitbuf_m_out_end]
        ja      end_loop_2
 
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
        mov     curr_data %+ d, [file_start + f_i]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask1 %+ d
 
        ; f_index = state->head[hash];
        movzx   f_index %+ d, word [stream + _internal_state_head + 2 * hash]
@@ -164,7 +168,7 @@ loop2:
        ; if ((dist-1) <= (D-1)) {
        mov     tmp1 %+ d, dist %+ d
        sub     tmp1 %+ d, 1
-       cmp     tmp1 %+ d, (D-1)
+       cmp     tmp1 %+ d, tmp3 %+ d
        jae     encode_literal
 
        ; len = f_end_i - f_i;
@@ -196,6 +200,7 @@ loop2:
        ; get_len_code(len, &code, &code_len);
        get_len_code    len, code, rcx, hufftables      ;; rcx is code_len
 
+       mov     hmask2 %+ d,  dword [stream + _internal_state_hash_mask]
        ; code2 <<= code_len
        ; code2 |= code
        ; code_len2 += code_len
@@ -211,24 +216,24 @@ loop2:
 
        ; only update hash twice
 
-       ; hash = compute_hash(state->file_start + k) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + k) & hash_mask;
        mov     tmp6 %+ d, dword [file_start + tmp3]
        compute_hash    hash, tmp6
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask2 %+ d
        ; state->head[hash] = k;
        mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
 
        add     tmp3, 1
 
-       ; hash = compute_hash(state->file_start + k) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + k) & hash_mask;
        mov     tmp6 %+ d, dword [file_start + tmp3]
        compute_hash    hash, tmp6
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask2 %+ d
        ; state->head[hash] = k;
        mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
 
 skip_hash_update:
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp5
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
        ; continue
        cmp     f_i, [rsp + f_end_i_mem_offset]
@@ -240,7 +245,7 @@ encode_literal:
        movzx   tmp5, byte [file_start + f_i]
        get_lit_code    tmp5, code2, code_len2, hufftables
 
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp5
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
        ; continue
        add     f_i, 1
@@ -261,7 +266,7 @@ final_bytes:
        ja      not_end
        movzx   tmp5, byte [file_start + f_i]
        get_lit_code    tmp5, code2, code_len2, hufftables
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp3
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
        inc     f_i
        cmp     f_i, [rsp + f_end_i_mem_offset]
@@ -274,10 +279,10 @@ write_eob:
        ;       get_lit_code(256, &code2, &code_len2);
        get_lit_code    256, code2, code_len2, hufftables
 
-       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf, tmp1
+       write_bits      m_bits, m_bit_count, code2, code_len2, m_out_buf
 
-       mov     dword [stream + _internal_state_has_eob], 1
-       cmp     dword [stream + _end_of_stream], 1
+       mov     byte [stream + _internal_state_has_eob], 1
+       cmp     word [stream + _end_of_stream], 1
        jne     sync_flush
        ;          state->state = ZSTATE_TRL;
        mov     dword [stream + _internal_state_state], ZSTATE_TRL
diff --git a/ceph/src/isa-l/igzip/igzip_fuzz_inflate.c b/ceph/src/isa-l/igzip/igzip_fuzz_inflate.c
deleted file mode 100644 (file)
index 844e9fb..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <stdio.h>
-#include <assert.h>
-#include <zlib.h>
-#include "huff_codes.h"
-#include "igzip_lib.h"
-#include "test.h"
-
-#define OUT_BUFFER_SIZE 64*1024
-int get_filesize(FILE * f)
-{
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
-}
-
-int main(int argc, char *argv[])
-{
-       FILE *in = NULL;
-       unsigned char *in_buf = NULL, *isal_out_buf = NULL, *zlib_out_buf = NULL;
-       int in_file_size, out_buf_size, zret, iret;
-       struct inflate_state *state = NULL;
-       z_stream zstate;
-       char z_msg_invalid_code_set[] = "invalid code lengths set";
-       char z_msg_invalid_dist_set[] = "invalid distances set";
-       char z_msg_invalid_lit_len_set[] = "invalid literal/lengths set";
-
-       if (argc != 2) {
-               fprintf(stderr, "Usage: isal_inflate_file_perf  infile\n"
-                       "\t - Runs multiple iterations of igzip on a file to "
-                       "get more accurate time results.\n");
-               exit(1);
-       }
-       in = fopen(argv[1], "rb");
-       if (!in) {
-               fprintf(stderr, "Can't open %s for reading\n", argv[1]);
-               exit(1);
-       }
-
-       /* Allocate space for entire input file and output
-        * (assuming some possible expansion on output size)
-        */
-       in_file_size = get_filesize(in);
-
-       out_buf_size = OUT_BUFFER_SIZE;
-
-       state = malloc(sizeof(struct inflate_state));
-       in_buf = malloc(in_file_size);
-       isal_out_buf = malloc(OUT_BUFFER_SIZE);
-       zlib_out_buf = malloc(OUT_BUFFER_SIZE);
-
-       if (state == NULL || in_buf == NULL || isal_out_buf == NULL || zlib_out_buf == NULL) {
-               fprintf(stderr, "Failed to malloc input and outputs buffers");
-               exit(1);
-       }
-
-       fread(in_buf, 1, in_file_size, in);
-
-       /* Inflate data with isal_inflate */
-       memset(state, 0xff, sizeof(struct inflate_state));
-
-       isal_inflate_init(state);
-       state->next_in = in_buf;
-       state->avail_in = in_file_size;
-       state->next_out = isal_out_buf;
-       state->avail_out = out_buf_size;
-
-       iret = isal_inflate_stateless(state);
-
-       /* Inflate data with zlib */
-       zstate.zalloc = Z_NULL;
-       zstate.zfree = Z_NULL;
-       zstate.opaque = Z_NULL;
-       zstate.avail_in = in_file_size;
-       zstate.next_in = in_buf;
-       zstate.avail_out = out_buf_size;
-       zstate.next_out = zlib_out_buf;
-       inflateInit2(&zstate, -15);
-
-       zret = inflate(&zstate, Z_FINISH);
-
-       if (zret == Z_STREAM_END) {
-               /* If zlib finished, assert isal finished with the same answer */
-               assert(state->block_state == ISAL_BLOCK_FINISH);
-               assert(zstate.total_out == state->total_out);
-               assert(memcmp(isal_out_buf, zlib_out_buf, state->total_out) == 0);
-       } else if (zret < 0) {
-               if (zret != Z_BUF_ERROR)
-                       /* If zlib errors, assert isal errors, excluding a few
-                        * cases where zlib is overzealous */
-                       assert(iret < 0 || strcmp(zstate.msg, z_msg_invalid_code_set) == 0
-                              || strcmp(zstate.msg, z_msg_invalid_dist_set) == 0
-                              || strcmp(zstate.msg, z_msg_invalid_lit_len_set) == 0);
-       } else
-               /* If zlib did not finish or error, assert isal did not finish
-                *  or that isal found an invalid header since isal notices the
-                *  error faster than zlib */
-               assert(iret > 0 || iret == ISAL_INVALID_BLOCK);
-
-       return 0;
-}
diff --git a/ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm b/ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_04.asm
new file mode 100644 (file)
index 0000000..9b5e85a
--- /dev/null
@@ -0,0 +1,741 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "huffman.asm"
+
+
+%define USE_HSWNI
+%define ARCH 04
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define hash rsi
+%define next_in rdi
+%else
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define hash r8
+%define next_in rcx
+%endif
+
+%define stream arg1
+%define level_buf arg1
+%define matches_next arg2
+%define f_i_end arg3
+
+%define f_i rax
+%define file_start rbp
+%define tmp r9
+%define tmp2 r10
+%define prev_len r11
+%define prev_dist r12
+%define f_i_orig r13
+
+%define hash_table level_buf + _hash_map_hash_table
+
+%define datas ymm0
+%define datas_lookup ymm1
+%define yhashes ymm2
+%define ydists ymm3
+%define ydists_lookup ymm4
+
+%define ydownconvert_qd ymm5
+%define ydists2 ymm5
+%define yscatter ymm5
+%define ytmp2 ymm5
+%define ynull_syms ymm5
+
+%define ylens1 ymm6
+%define ylens2 ymm7
+%define ylookup ymm8
+%define ylookup2 ymm9
+%define yindex ymm10
+
+%define yrot_left ymm11
+%define yshift_finish ymm11
+%define yqword_shuf ymm11
+%define yhash_prod ymm11
+%define ycode ymm11
+%define ytmp3 ymm11
+
+%define yones ymm12
+%define ydatas_perm2 ymm13
+%define yincrement ymm14
+
+%define ytmp ymm15
+%define ydist_extra ymm15
+%define yhash_mask ymm15
+%define ydist_mask ymm15
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define stack_size  10*16 + 6 * 8 + 3 * 8
+%define local_storage_offset (stack_size - 16)
+%define func(x) proc_frame x
+
+%macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       vmovdqu [rsp + 8*16], xmm14
+       vmovdqa [rsp + 9*16], xmm15
+       save_reg        rsi, 10*16 + 0*8
+       save_reg        rdi, 10*16 + 1*8
+       save_reg        rbp, 10*16 + 2*8
+       save_reg        r12, 10*16 + 3*8
+       save_reg        r13, 10*16 + 4*8
+       end_prolog
+%endm
+
+%macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+       vmovdqa xmm14, [rsp + 8*16]
+       vmovdqa xmm15, [rsp + 9*16]
+
+       mov     rsi, [rsp + 10*16 + 0*8]
+       mov     rdi, [rsp + 10*16 + 1*8]
+       mov     rbp, [rsp + 10*16 + 2*8]
+       mov     r12, [rsp + 10*16 + 3*8]
+       mov     r13, [rsp + 10*16 + 4*8]
+       add     rsp, stack_size
+%endm
+%else
+%define stack_size  16
+%define local_storage_offset 0
+
+%define func(x) x:
+%macro FUNC_SAVE 0
+       push    rbp
+       push    r12
+       push    r13
+       sub     rsp, stack_size
+%endm
+
+%macro FUNC_RESTORE 0
+       add     rsp, stack_size
+       pop     r13
+       pop     r12
+       pop     rbp
+%endm
+%endif
+
+%define dist_mask_offset local_storage_offset
+%define hash_mask_offset local_storage_offset + 8
+
+%define VECT_SIZE 8
+%define HASH_BYTES 2
+
+global gen_icf_map_lh1_04
+func(gen_icf_map_lh1_04)
+       FUNC_SAVE
+
+       mov     file_start, [stream + _next_in]
+       mov     f_i %+ d, dword [stream + _total_in]
+       mov     f_i_orig, f_i
+
+       sub     file_start, f_i
+       add     f_i_end, f_i
+       cmp     f_i, f_i_end
+       jge     end_main
+
+;; Prep for main loop
+       mov     tmp %+ d, dword [stream + _internal_state_dist_mask]
+       mov     [rsp + dist_mask_offset], tmp
+       mov     tmp %+ d, dword [stream + _internal_state_hash_mask]
+       mov     [rsp + hash_mask_offset], tmp
+       mov     tmp, stream
+       mov     level_buf, [stream + _level_buf]
+       sub     f_i_end, LA
+       vmovdqu yincrement, [increment]
+       vpbroadcastd yones, [ones]
+       vmovdqu ydatas_perm2, [datas_perm2]
+
+;; Process first byte
+       vpbroadcastd    yhash_prod, [hash_prod]
+       vpbroadcastd    yhash_mask, [rsp + hash_mask_offset]
+       vmovd   yhashes %+ x, dword [f_i + file_start]
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpand   yhashes, yhashes, yhash_mask
+       vmovd   hash %+ d, yhashes %+ x
+       cmp     byte [tmp + _internal_state_has_hist], IGZIP_NO_HIST
+       jne     .has_hist
+       ;; No history, the byte is a literal
+       xor     prev_len, prev_len
+       xor     prev_dist, prev_dist
+       mov     byte [tmp + _internal_state_has_hist], IGZIP_HIST
+       jmp .byte_processed
+
+.has_hist:
+       ;; History exists, need to set prev_len and prev_dist accordingly
+       lea     next_in, [f_i + file_start]
+
+       ;; Determine match lookback distance
+       xor     tmp, tmp
+       mov     tmp %+ w, f_i %+ w
+       dec     tmp
+       sub     tmp %+ w, word [hash_table + HASH_BYTES * hash]
+
+       and     tmp %+ d, [rsp + dist_mask_offset]
+       neg     tmp
+
+       ;; Check first 8 bytes of match
+       mov     prev_len, [next_in]
+       xor     prev_len, [next_in + tmp - 1]
+       neg     tmp
+
+       ;; Set prev_dist
+%ifidn arg1, rcx
+       mov     tmp2, rcx
+%endif
+       ;; The third register is unused on Haswell and later,
+       ;; This line will not work on previous architectures
+       get_dist_icf_code tmp, prev_dist, tmp
+
+%ifidn arg1, rcx
+       mov     rcx, tmp2
+%endif
+
+       ;; Set prev_len
+       xor     tmp2, tmp2
+       tzcnt   prev_len, prev_len
+       shr     prev_len, 3
+       cmp     prev_len, MIN_DEF_MATCH
+       cmovl   prev_len, tmp2
+
+.byte_processed:
+       mov     word [hash_table + HASH_BYTES * hash], f_i %+ w
+
+       add     f_i, 1
+
+;;hash
+       vmovdqu datas, [f_i + file_start]
+       vpermq  yhashes, datas, 0x44
+       vpshufb yhashes, yhashes, [datas_shuf]
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpand   yhashes, yhashes, yhash_mask
+
+       vpermq  ylookup, datas, 0x44
+       vmovdqu yqword_shuf, [qword_shuf]
+       vpshufb ylookup, ylookup, yqword_shuf
+       vpermd  ylookup2, ydatas_perm2, datas
+       vpshufb ylookup2, ylookup2, yqword_shuf
+
+;;gather/scatter hashes
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdd ydists_lookup, [hash_table + HASH_BYTES * yhashes], ytmp
+
+       vpbroadcastd ytmp2, [upper_word]
+       vpbroadcastd ytmp, [low_word]
+       vmovd   yindex %+ x, f_i %+ d
+       vpbroadcastd yindex, yindex %+ x
+       vpaddd  yindex, yindex, yincrement
+       vpand   yscatter, ydists_lookup, ytmp2
+       vpand ytmp, yindex, ytmp
+       vpor    yscatter, yscatter, ytmp
+
+       vmovd tmp %+ d, yhashes %+ x
+       vmovd [hash_table + HASH_BYTES * tmp], yscatter %+ x
+       vpextrd tmp %+ d, yhashes %+ x, 1
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 1
+       vpextrd tmp %+ d, yhashes %+ x, 2
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 2
+       vpextrd tmp %+ d,yhashes %+ x, 3
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 3
+
+       vextracti128 yscatter %+ x, yscatter, 1
+       vextracti128 yhashes %+ x, yhashes, 1
+
+       vmovd tmp %+ d, yhashes %+ x
+       vmovd [hash_table + HASH_BYTES * tmp], yscatter %+ x
+       vpextrd tmp %+ d, yhashes %+ x, 1
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 1
+       vpextrd tmp %+ d, yhashes %+ x, 2
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 2
+       vpextrd tmp %+ d,yhashes %+ x, 3
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 3
+
+;; Compute hash for next loop
+       vpbroadcastd    yhash_prod, [hash_prod]
+       vpbroadcastd    yhash_mask, [rsp + hash_mask_offset]
+       vmovdqu datas, [f_i + file_start + VECT_SIZE]
+       vpermq  yhashes, datas, 0x44
+       vpshufb yhashes, yhashes, [datas_shuf]
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpand   yhashes, yhashes, yhash_mask
+
+       vmovdqu datas_lookup, [f_i + file_start + 2 * VECT_SIZE]
+
+       sub     f_i_end, VECT_SIZE
+       cmp     f_i, f_i_end
+       jg      .loop1_end
+
+.loop1:
+       lea     next_in, [f_i + file_start]
+
+;; Calculate look back dists
+       vpbroadcastd ydist_mask, [rsp + dist_mask_offset]
+       vpaddd  ydists, ydists_lookup, yones
+       vpsubd  ydists, yindex, ydists
+       vpand   ydists, ydists, ydist_mask
+       vpaddd  ydists, ydists, yones
+       vpsubd  ydists, yincrement, ydists
+
+;;gather/scatter hashes
+       add     f_i, VECT_SIZE
+
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdd ydists_lookup, [hash_table + HASH_BYTES * yhashes], ytmp
+
+       vpbroadcastd ytmp2, [upper_word]
+       vpbroadcastd ytmp, [low_word]
+       vmovd   yindex %+ x, f_i %+ d
+       vpbroadcastd yindex, yindex %+ x
+       vpaddd  yindex, yindex, yincrement
+       vpand   yscatter, ydists_lookup, ytmp2
+       vpand ytmp, yindex, ytmp
+       vpor    yscatter, yscatter, ytmp
+
+       vmovd tmp %+ d, yhashes %+ x
+       vmovd [hash_table + HASH_BYTES * tmp], yscatter %+ x
+       vpextrd tmp %+ d, yhashes %+ x, 1
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 1
+       vpextrd tmp %+ d, yhashes %+ x, 2
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 2
+       vpextrd tmp %+ d,yhashes %+ x, 3
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 3
+
+       vextracti128 yscatter %+ x, yscatter, 1
+       vextracti128 yhashes %+ x, yhashes, 1
+
+       vmovd tmp %+ d, yhashes %+ x
+       vmovd [hash_table + HASH_BYTES * tmp], yscatter %+ x
+       vpextrd tmp %+ d, yhashes %+ x, 1
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 1
+       vpextrd tmp %+ d, yhashes %+ x, 2
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 2
+       vpextrd tmp %+ d,yhashes %+ x, 3
+       vpextrd [hash_table + HASH_BYTES * tmp], yscatter %+ x, 3
+
+;; Compute hash for next loop
+       vpbroadcastd    yhash_prod, [hash_prod]
+       vpbroadcastd    yhash_mask, [rsp + hash_mask_offset]
+       vpermq  yhashes, datas_lookup, 0x44
+       vpshufb yhashes, yhashes, [datas_shuf]
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpmaddwd yhashes, yhashes, yhash_prod
+       vpand   yhashes, yhashes, yhash_mask
+
+;;lookup old codes
+       vextracti128 ydists2 %+ x, ydists, 1
+
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdq ylens1, [next_in + ydists %+ x], ytmp
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdq ylens2, [next_in + ydists2 %+ x], ytmp
+
+;; Calculate dist_icf_code
+       vpaddd  ydists, ydists, yones
+       vpsubd  ydists, yincrement, ydists
+
+       vpbroadcastd ytmp2, [low_nibble]
+       vbroadcasti128 ytmp3, [nibble_order]
+       vpslld  ydist_extra, ydists, 12
+       vpor    ydist_extra, ydists, ydist_extra
+       vpand   ydist_extra, ydist_extra, ytmp2
+       vpshufb ydist_extra, ydist_extra, ytmp3
+       vbroadcasti128 ytmp2, [bit_index]
+       vpshufb ydist_extra, ytmp2, ydist_extra
+       vpxor   ytmp2, ytmp2, ytmp2
+       vpcmpgtb ytmp2, ydist_extra, ytmp2
+       vpsrld  ytmp3, ytmp2, 8
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpsrld  ytmp3, ytmp2, 16
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpsrld  ytmp3, ytmp2, 24
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpbroadcastd ytmp3, [base_offset]
+       vpaddb  ydist_extra, ytmp3
+       vpand   ydist_extra, ydist_extra, ytmp2
+       vpsrlq  ytmp2, ydist_extra, 32
+       vpxor   ytmp3, ytmp3, ytmp3
+       vpsadbw ydist_extra, ydist_extra, ytmp3
+       vpsadbw ytmp2, ytmp2, ytmp3
+       vpsubd  ydist_extra, ydist_extra, ytmp2
+       vpsllq  ytmp2, ytmp2, 32
+       vpor    ydist_extra, ydist_extra, ytmp2
+       vpcmpgtb ytmp3, ydist_extra, ytmp3
+       vpand ydist_extra, ydist_extra, ytmp3
+
+       vpsllvd ycode, yones, ydist_extra
+       vpsubd  ycode, ycode, yones
+       vpcmpgtd ytmp2, ydists, yones
+       vpand   ycode, ydists, ycode
+       vpand   ycode, ycode, ytmp2
+       vpsrlvd ydists, ydists, ydist_extra
+       vpslld  ydist_extra, ydist_extra, 1
+       vpaddd  ydists, ydists, ydist_extra
+       vpslld  ycode, ycode, EXTRA_BITS_OFFSET - DIST_OFFSET
+       vpaddd  ydists, ydists, ycode
+
+;; Setup ydists for combining with ylens
+       vpslld  ydists, ydists, DIST_OFFSET
+
+;; xor current data with lookback dist
+       vpxor   ylens1, ylens1, ylookup
+       vpxor   ylens2, ylens2, ylookup2
+
+;; Setup registers for next loop
+       vpermq  ylookup, datas, 0x44
+       vmovdqu yqword_shuf, [qword_shuf]
+       vpshufb ylookup, ylookup, yqword_shuf
+       vpermd  ylookup2, ydatas_perm2, datas
+       vpshufb ylookup2, ylookup2, yqword_shuf
+
+;; Compute match length
+       vpxor   ytmp, ytmp, ytmp
+       vpcmpeqb ylens1, ylens1, ytmp
+       vpcmpeqb ylens2, ylens2, ytmp
+       vpbroadcastq yshift_finish, [shift_finish]
+       vpand   ylens1, ylens1, yshift_finish
+       vpand   ylens2, ylens2, yshift_finish
+       vpsadbw ylens1, ylens1, ytmp
+       vpsadbw ylens2, ylens2, ytmp
+       vmovdqu ydownconvert_qd, [downconvert_qd]
+       vpshufb ylens1, ylens1, ydownconvert_qd
+       vextracti128 ytmp %+ x, ylens1, 1
+       vpor    ylens1, ylens1, ytmp
+       vpshufb ylens2, ylens2, ydownconvert_qd
+       vextracti128 ytmp %+ x, ylens2, 1
+       vpor    ylens2, ylens2, ytmp
+       vinserti128 ylens1, ylens1, ylens2 %+ x, 1
+       vpbroadcastd ytmp, [low_nibble]
+       vpsrld  ylens2, ylens1, 4
+       vpand   ylens1, ylens1, ytmp
+       vbroadcasti128  ytmp, [match_cnt_perm]
+       vpbroadcastd ytmp2, [match_cnt_low_max]
+       vpshufb ylens1, ytmp, ylens1
+       vpshufb ylens2, ytmp, ylens2
+       vpcmpeqb ytmp, ylens1, ytmp2
+       vpand   ylens2, ylens2, ytmp
+       vpaddd  ylens1, ylens1, ylens2
+
+;; Preload for next loops
+       vmovdqu datas, datas_lookup
+       vmovdqu datas_lookup, [f_i + file_start + 2 * VECT_SIZE]
+
+;; Zero out matches which should not be taken
+       vmovdqu yrot_left, [drot_left]
+       vpermd  ylens2, yrot_left, ylens1
+       vpermd  ydists, yrot_left, ydists
+
+       vpinsrd ytmp %+ x, ylens2 %+ x, prev_len %+ d, 0
+       vmovd   prev_len %+ d, ylens2 %+ x
+       vinserti128 ylens2, ylens2, ytmp %+ x, 0
+
+       vpinsrd ytmp %+ x, ydists %+ x, prev_dist %+ d, 0
+       vmovd   prev_dist %+ d, ydists %+ x
+       vinserti128 ydists, ydists, ytmp %+ x, 0
+
+       vpbroadcastd ytmp, [shortest_matches]
+       vpcmpgtd ytmp, ylens2, ytmp
+       vpcmpgtd ytmp2, ylens1, ylens2
+
+       vpcmpeqd ytmp3, ytmp3, ytmp3
+       vpxor   ytmp, ytmp, ytmp3
+       vpor    ytmp, ytmp, ytmp2
+
+       vpandn  ylens1, ytmp, ylens2
+
+;; Update zdists to match ylens1
+       vpbroadcastd ytmp2, [twofiftyfour]
+       vpaddd  ydists, ydists, ylens1
+       vpaddd  ydists, ydists, ytmp2
+
+       vpbroadcastd ynull_syms, [null_dist_syms]
+       vpmovzxbd ytmp3, [f_i + file_start - VECT_SIZE - 1]
+       vpaddd  ytmp3, ynull_syms
+       vpand   ytmp3, ytmp3, ytmp
+       vpandn  ydists, ytmp, ydists
+       vpor    ydists, ydists, ytmp3
+
+;;Store ydists
+       vmovdqu [matches_next], ydists
+       add     matches_next, ICF_CODE_BYTES * VECT_SIZE
+
+       cmp     f_i, f_i_end
+       jle     .loop1
+
+.loop1_end:
+       lea     next_in, [f_i + file_start]
+
+;; Calculate look back dists
+       vpbroadcastd ydist_mask, [rsp + dist_mask_offset]
+       vpaddd  ydists, ydists_lookup, yones
+       vpsubd  ydists, yindex, ydists
+       vpand   ydists, ydists, ydist_mask
+       vpaddd  ydists, ydists, yones
+       vpsubd  ydists, yincrement, ydists
+
+;;lookup old codes
+       vextracti128 ydists2 %+ x, ydists, 1
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdq ylens1, [next_in + ydists %+ x], ytmp
+       vpcmpeqq ytmp, ytmp, ytmp
+       vpgatherdq ylens2, [next_in + ydists2 %+ x], ytmp
+
+;; Restore last update hash value
+       vpextrd tmp %+ d, ydists2 %+ x, 3
+       add     tmp %+ d, f_i %+ d
+
+       vpbroadcastd    yhash_prod %+ x, [hash_prod]
+       vpbroadcastd    yhash_mask %+ x, [rsp + hash_mask_offset]
+
+       vmovd   yhashes %+ x, dword [f_i + file_start + VECT_SIZE - 1]
+       vpmaddwd yhashes %+ x, yhashes %+ x, yhash_prod %+ x
+       vpmaddwd yhashes %+ x, yhashes %+ x, yhash_prod %+ x
+       vpand   yhashes %+ x, yhashes %+ x, yhash_mask %+ x
+       vmovd   hash %+ d, yhashes %+ x
+
+       mov     word [hash_table + HASH_BYTES * hash], tmp %+ w
+
+;; Calculate dist_icf_code
+       vpaddd  ydists, ydists, yones
+       vpsubd  ydists, yincrement, ydists
+
+       vpbroadcastd ytmp2, [low_nibble]
+       vbroadcasti128 ytmp3, [nibble_order]
+       vpslld  ydist_extra, ydists, 12
+       vpor    ydist_extra, ydists, ydist_extra
+       vpand   ydist_extra, ydist_extra, ytmp2
+       vpshufb ydist_extra, ydist_extra, ytmp3
+       vbroadcasti128 ytmp2, [bit_index]
+       vpshufb ydist_extra, ytmp2, ydist_extra
+       vpxor   ytmp2, ytmp2, ytmp2
+       vpcmpgtb ytmp2, ydist_extra, ytmp2
+       vpsrld  ytmp3, ytmp2, 8
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpsrld  ytmp3, ytmp2, 16
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpsrld  ytmp3, ytmp2, 24
+       vpandn  ytmp2, ytmp3, ytmp2
+       vpbroadcastd ytmp3, [base_offset]
+       vpaddb  ydist_extra, ytmp3
+       vpand   ydist_extra, ydist_extra, ytmp2
+       vpsrlq  ytmp2, ydist_extra, 32
+       vpxor   ytmp3, ytmp3, ytmp3
+       vpsadbw ydist_extra, ydist_extra, ytmp3
+       vpsadbw ytmp2, ytmp2, ytmp3
+       vpsubd  ydist_extra, ydist_extra, ytmp2
+       vpsllq  ytmp2, ytmp2, 32
+       vpor    ydist_extra, ydist_extra, ytmp2
+       vpcmpgtb ytmp3, ydist_extra, ytmp3
+       vpand ydist_extra, ydist_extra, ytmp3
+
+       vpsllvd ycode, yones, ydist_extra
+       vpsubd  ycode, ycode, yones
+       vpcmpgtd ytmp2, ydists, yones
+       vpand   ycode, ydists, ycode
+       vpand   ycode, ycode, ytmp2
+       vpsrlvd ydists, ydists, ydist_extra
+       vpslld  ydist_extra, ydist_extra, 1
+       vpaddd  ydists, ydists, ydist_extra
+       vpslld  ycode, ycode, EXTRA_BITS_OFFSET - DIST_OFFSET
+       vpaddd  ydists, ydists, ycode
+
+;; Setup ydists for combining with ylens
+       vpslld  ydists, ydists, DIST_OFFSET
+
+;; xor current data with lookback dist
+       vpxor   ylens1, ylens1, ylookup
+       vpxor   ylens2, ylens2, ylookup2
+
+;; Compute match length
+       vpxor   ytmp, ytmp, ytmp
+       vpcmpeqb ylens1, ylens1, ytmp
+       vpcmpeqb ylens2, ylens2, ytmp
+       vpbroadcastq yshift_finish, [shift_finish]
+       vpand   ylens1, ylens1, yshift_finish
+       vpand   ylens2, ylens2, yshift_finish
+       vpsadbw ylens1, ylens1, ytmp
+       vpsadbw ylens2, ylens2, ytmp
+       vmovdqu ydownconvert_qd, [downconvert_qd]
+       vpshufb ylens1, ylens1, ydownconvert_qd
+       vextracti128 ytmp %+ x, ylens1, 1
+       vpor    ylens1, ylens1, ytmp
+       vpshufb ylens2, ylens2, ydownconvert_qd
+       vextracti128 ytmp %+ x, ylens2, 1
+       vpor    ylens2, ylens2, ytmp
+       vinserti128 ylens1, ylens1, ylens2 %+ x, 1
+       vpbroadcastd ytmp, [low_nibble]
+       vpsrld  ylens2, ylens1, 4
+       vpand   ylens1, ylens1, ytmp
+       vbroadcasti128  ytmp, [match_cnt_perm]
+       vpbroadcastd ytmp2, [match_cnt_low_max]
+       vpshufb ylens1, ytmp, ylens1
+       vpshufb ylens2, ytmp, ylens2
+       vpcmpeqb ytmp, ylens1, ytmp2
+       vpand   ylens2, ylens2, ytmp
+       vpaddd  ylens1, ylens1, ylens2
+
+;; Zero out matches which should not be taken
+       vmovdqu yrot_left, [drot_left]
+       vpermd  ylens2, yrot_left, ylens1
+       vpermd  ydists, yrot_left, ydists
+
+       vpinsrd ytmp %+ x, ylens2 %+ x, prev_len %+ d, 0
+       vinserti128 ylens2, ylens2, ytmp %+ x, 0
+
+       vpinsrd ytmp %+ x, ydists %+ x, prev_dist %+ d, 0
+       vinserti128 ydists, ydists, ytmp %+ x, 0
+
+       vpbroadcastd ytmp, [shortest_matches]
+       vpcmpgtd ytmp, ylens2, ytmp
+       vpcmpgtd ytmp2, ylens1, ylens2
+
+       vpcmpeqd ytmp3, ytmp3, ytmp3
+       vpxor   ytmp, ytmp, ytmp3
+       vpor    ytmp, ytmp, ytmp2
+
+       vpandn  ylens1, ytmp, ylens2
+
+;; Update zdists to match ylens1
+       vpbroadcastd ytmp2, [twofiftyfour]
+       vpaddd  ydists, ydists, ylens1
+       vpaddd  ydists, ydists, ytmp2
+
+       vpbroadcastd ynull_syms, [null_dist_syms]
+       vpmovzxbd ytmp3, [f_i + file_start - 1]
+       vpaddd  ytmp3, ynull_syms
+       vpand   ytmp3, ytmp3, ytmp
+       vpandn  ydists, ytmp, ydists
+       vpor    ydists, ydists, ytmp3
+
+;;Store ydists
+       vmovdqu [matches_next], ydists
+       add     f_i, VECT_SIZE
+
+end_main:
+       sub     f_i, f_i_orig
+       sub     f_i, 1
+
+%ifnidn f_i, rax
+       mov     rax, f_i
+%endif
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 32
+;; 32 byte data
+datas_perm2:
+       dd 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3, 0x4
+drot_left:
+       dd 0x7, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6
+datas_shuf:
+       db 0x0, 0x1, 0x2, 0x3
+       db 0x1, 0x2, 0x3, 0x4
+       db 0x2, 0x3, 0x4, 0x5
+       db 0x3, 0x4, 0x5, 0x6
+       db 0x4, 0x5, 0x6, 0x7
+       db 0x5, 0x6, 0x7, 0x8
+       db 0x6, 0x7, 0x8, 0x9
+       db 0x7, 0x8, 0x9, 0xa
+qword_shuf:
+       db 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+       db 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8
+       db 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9
+       db 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa
+increment:
+       dd 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+downconvert_qd:
+       db 0x00, 0xff, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff
+       db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+       db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+       db 0x00, 0xff, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff
+
+;; 16 byte data
+match_cnt_perm:
+       db 0x0, 0x1, 0x0, 0x2, 0x0, 0x1, 0x0, 0x3, 0x0, 0x1, 0x0, 0x2, 0x0, 0x1, 0x0, 0x4
+bit_index:
+       db 0x0, 0x1, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3
+       db 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4
+nibble_order:
+       db 0x0, 0x2, 0x1, 0x3, 0x4, 0x6, 0x5, 0x7
+       db 0x8, 0xa, 0x9, 0xb, 0xc, 0xe, 0xd, 0xf
+
+;; 8 byte data
+shift_finish:
+       db 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
+
+;; 4 byte data
+ones:
+       dd 0x1
+%define PROD1 0xE84B
+%define PROD2 0x97B1
+hash_prod:
+       dw PROD1, PROD2
+null_dist_syms:
+       dd LIT
+twofiftyfour:
+       dd 0xfe
+shortest_matches:
+       dd MIN_DEF_MATCH
+upper_word:
+       dw 0x0000, 0xffff
+low_word:
+       dw 0xffff, 0x0000
+low_nibble:
+       db 0x0f, 0x0f, 0x0f, 0x0f
+match_cnt_low_max:
+       dd 0x4
+base_offset:
+       db -0x2, 0x2, 0x6, 0xa
diff --git a/ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm b/ceph/src/isa-l/igzip/igzip_gen_icf_map_lh1_06.asm
new file mode 100644 (file)
index 0000000..69af940
--- /dev/null
@@ -0,0 +1,576 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "huffman.asm"
+
+
+%define USE_HSWNI
+%define ARCH 06
+
+%ifdef HAVE_AS_KNOWS_AVX512
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define hash rsi
+%define next_in rdi
+%else
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define hash r8
+%define next_in rcx
+%endif
+
+%define stream arg1
+%define level_buf arg1
+%define matches_next arg2
+%define f_i_end arg3
+
+%define f_i rax
+%define file_start rbp
+%define tmp r9
+%define tmp2 r10
+%define prev_len r11
+%define prev_dist r12
+%define f_i_orig r13
+
+%define hash_table level_buf + _hash_map_hash_table
+
+%define datas zmm0
+%define datas_lookup zmm1
+%define zhashes zmm2
+%define zdists zmm3
+%define zdists_lookup zmm4
+%define zscatter zmm5
+%define zdists2 zmm6
+%define zlens1 zmm7
+%define zlens2 zmm8
+%define zlookup zmm9
+%define zlookup2 zmm10
+%define match_lookups zmm11
+%define zindex zmm12
+%define zdist_extra zmm13
+%define zdists_tmp zmm14
+%define znull_dist_syms zmm15
+%define zcode zmm16
+%define zthirty zmm17
+%define zdist_mask zmm18
+%define zshortest_matches zmm19
+%define zrot_left zmm20
+%define zdatas_perm zmm21
+%define zdatas_perm2 zmm22
+%define zdatas_perm3 zmm23
+%define zdatas_shuf zmm24
+%define zhash_prod zmm25
+%define zhash_mask zmm26
+%define zincrement zmm27
+%define zqword_shuf zmm28
+%define zones zmm29
+%define ztwofiftyfour zmm30
+%define zbswap zmm31
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define stack_size  10*16 + 6 * 8 + 8
+%define func(x) proc_frame x
+
+%macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       vmovdqu [rsp + 8*16], xmm14
+       vmovdqa [rsp + 9*16], xmm15
+       save_reg        rsi, 10*16 + 0*8
+       save_reg        rdi, 10*16 + 1*8
+       save_reg        rbp, 10*16 + 2*8
+       save_reg        r12, 10*16 + 3*8
+       save_reg        r13, 10*16 + 4*8
+       end_prolog
+%endm
+
+%macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+       vmovdqa xmm14, [rsp + 8*16]
+       vmovdqa xmm15, [rsp + 9*16]
+
+       mov     rsi, [rsp + 10*16 + 0*8]
+       mov     rdi, [rsp + 10*16 + 1*8]
+       mov     rbp, [rsp + 10*16 + 2*8]
+       mov     r12, [rsp + 10*16 + 3*8]
+       mov     r13, [rsp + 10*16 + 4*8]
+       add     rsp, stack_size
+%endm
+%else
+%define func(x) x:
+%macro FUNC_SAVE 0
+       push    rbp
+       push    r12
+       push    r13
+%endm
+
+%macro FUNC_RESTORE 0
+       pop     r13
+       pop     r12
+       pop     rbp
+%endm
+%endif
+
+%define VECT_SIZE 16
+%define HASH_BYTES 2
+
+global gen_icf_map_lh1_06
+func(gen_icf_map_lh1_06)
+       FUNC_SAVE
+
+       mov     file_start, [stream + _next_in]
+       mov     f_i %+ d, dword [stream + _total_in]
+       mov     f_i_orig, f_i
+
+       sub     file_start, f_i
+       add     f_i_end, f_i
+       cmp     f_i, f_i_end
+       jge     end_main
+
+;; Prep for main loop
+       vpbroadcastd zdist_mask, dword [stream + _internal_state_dist_mask]
+       vpbroadcastd zhash_mask, dword [stream + _internal_state_hash_mask]
+       mov     tmp, stream
+       mov     level_buf, [stream + _level_buf]
+       sub     f_i_end, LA
+       vmovdqu64 zdatas_perm, [datas_perm]
+       vbroadcasti32x8 zdatas_shuf, [datas_shuf]
+       vpbroadcastd zhash_prod, [hash_prod]
+       vmovdqu64 zincrement, [increment]
+       vmovdqu64 zqword_shuf, [qword_shuf]
+       vbroadcasti64x2 zdatas_perm2, [datas_perm2]
+       vbroadcasti64x2 zdatas_perm3, [datas_perm3]
+       vpbroadcastd zones, [ones]
+       vbroadcasti32x4 zbswap, [bswap_shuf]
+       vpbroadcastd zthirty, [thirty]
+       vmovdqu64 zrot_left, [drot_left]
+       vpbroadcastd zshortest_matches, [shortest_matches]
+       vpbroadcastd ztwofiftyfour, [twofiftyfour]
+       vpbroadcastd znull_dist_syms, [null_dist_syms]
+       kxorq   k0, k0, k0
+       kmovq   k1, [k_mask_1]
+       kmovq   k2, [k_mask_2]
+
+;; Process first byte
+       vmovd   zhashes %+ x, dword [f_i + file_start]
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpandd  zhashes, zhashes, zhash_mask
+       vmovd   hash %+ d, zhashes %+ x
+
+       cmp     byte [tmp + _internal_state_has_hist], IGZIP_NO_HIST
+       jne     .has_hist
+       ;; No history, the byte is a literal
+       xor     prev_len, prev_len
+       xor     prev_dist, prev_dist
+       mov     byte [tmp + _internal_state_has_hist], IGZIP_HIST
+       jmp .byte_processed
+
+.has_hist:
+       ;; History exists, need to set prev_len and prev_dist accordingly
+       lea     next_in, [f_i + file_start]
+
+       ;; Determine match lookback distance
+       xor     tmp, tmp
+       mov     tmp %+ w, f_i %+ w
+       dec     tmp
+       sub     tmp %+ w, word [hash_table + HASH_BYTES * hash]
+
+       vmovd   tmp2 %+ d, zdist_mask %+ x
+       and     tmp %+ d, tmp2 %+ d
+       neg     tmp
+
+       ;; Check first 8 bytes of match
+       mov     prev_len, [next_in]
+       xor     prev_len, [next_in + tmp - 1]
+       neg     tmp
+
+       ;; Set prev_dist
+%ifidn arg1, rcx
+       mov     tmp2, rcx
+%endif
+       ;; The third register is unused on Haswell and later,
+       ;; This line will not work on previous architectures
+       get_dist_icf_code tmp, prev_dist, tmp
+
+%ifidn arg1, rcx
+       mov     rcx, tmp2
+%endif
+
+       ;; Set prev_len
+       xor     tmp2, tmp2
+       tzcnt   prev_len, prev_len
+       shr     prev_len, 3
+       cmp     prev_len, MIN_DEF_MATCH
+       cmovl   prev_len, tmp2
+
+.byte_processed:
+       mov     word [hash_table + HASH_BYTES * hash], f_i %+ w
+
+       add     f_i, 1
+       cmp     f_i, f_i_end
+       jg      end_main
+
+;;hash
+       vmovdqu64 datas %+ y, [f_i + file_start]
+       vpermq  zhashes, zdatas_perm, datas
+       vpshufb zhashes, zhashes, zdatas_shuf
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpandd  zhashes, zhashes, zhash_mask
+
+       vpermq  zlookup, zdatas_perm2, datas
+       vpshufb zlookup, zlookup, zqword_shuf
+       vpermq  zlookup2, zdatas_perm3, datas
+       vpshufb zlookup2, zlookup2, zqword_shuf
+
+;;gather/scatter hashes
+       knotq   k6, k0
+       vpgatherdd zdists_lookup {k6}, [hash_table + HASH_BYTES * zhashes]
+
+       vpbroadcastd zindex, f_i %+ d
+       vpaddd  zindex, zindex, zincrement
+       vpblendmw zscatter {k1}, zindex, zdists_lookup
+
+       knotq   k6, k0
+       vpscatterdd [hash_table + HASH_BYTES * zhashes] {k6}, zscatter
+
+;; Compute hash for next loop
+       vmovdqu64 datas %+ y, [f_i + file_start + VECT_SIZE]
+       vpermq  zhashes, zdatas_perm, datas
+       vpshufb zhashes, zhashes, zdatas_shuf
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpandd  zhashes, zhashes, zhash_mask
+
+       vmovdqu64 datas_lookup %+ y, [f_i + file_start + 2 * VECT_SIZE]
+
+       sub     f_i_end, VECT_SIZE
+       cmp     f_i, f_i_end
+       jg      .loop1_end
+
+.loop1:
+       lea     next_in, [f_i + file_start]
+
+;; Calculate look back dists
+       vpaddd  zdists, zdists_lookup, zones
+       vpsubd  zdists, zindex, zdists
+       vpandd  zdists, zdists, zdist_mask
+       vpaddd  zdists, zdists, zones
+       vpsubd  zdists, zincrement, zdists
+
+;;gather/scatter hashes
+       add     f_i, VECT_SIZE
+
+       kxnorq  k6, k6, k6
+       kxnorq  k7, k7, k7
+       vpgatherdd zdists_lookup {k6}, [hash_table + HASH_BYTES * zhashes]
+
+       vpbroadcastd zindex, f_i %+ d
+       vpaddd  zindex, zindex, zincrement
+       vpblendmw zscatter {k1}, zindex, zdists_lookup
+
+       vpscatterdd [hash_table + HASH_BYTES * zhashes] {k7}, zscatter
+
+;; Compute hash for next loop
+       vpermq  zhashes, zdatas_perm, datas_lookup
+       vpshufb zhashes, zhashes, zdatas_shuf
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpmaddwd zhashes, zhashes, zhash_prod
+       vpandd  zhashes, zhashes, zhash_mask
+
+;;lookup old codes
+       vextracti32x8 zdists2 %+ y, zdists, 1
+       kxnorq  k6, k6, k6
+       kxnorq  k7, k7, k7
+       vpgatherdq zlens1 {k6}, [next_in + zdists %+ y]
+       vpgatherdq zlens2 {k7}, [next_in + zdists2 %+ y]
+
+;; Calculate dist_icf_code
+       vpaddd  zdists, zdists, zones
+       vpsubd  zdists, zincrement, zdists
+       vpcmpgtd k5, zdists, zones
+       vplzcntd zdist_extra, zdists
+       vpsubd  zdist_extra {k5}{z}, zthirty, zdist_extra
+       vpsllvd zcode, zones, zdist_extra
+       vpsubd  zcode, zcode, zones
+       vpandd  zcode {k5}{z}, zdists, zcode
+       vpsrlvd zdists, zdists, zdist_extra
+       vpslld  zdist_extra, zdist_extra, 1
+       vpaddd  zdists, zdists, zdist_extra
+       vpslld  zcode, zcode, EXTRA_BITS_OFFSET - DIST_OFFSET
+       vpaddd  zdists, zdists, zcode
+
+;; Setup zdists for combining with zlens
+       vpslld  zdists, zdists, DIST_OFFSET
+
+;; xor current data with lookback dist
+       vpxorq  zlens1, zlens1, zlookup
+       vpxorq  zlens2, zlens2, zlookup2
+
+;; Setup registers for next loop
+       vpermq  zlookup, zdatas_perm2, datas
+       vpshufb zlookup, zlookup, zqword_shuf
+       vpermq  zlookup2, zdatas_perm3, datas
+       vpshufb zlookup2, zlookup2, zqword_shuf
+
+;; Compute match length
+       vpshufb zlens1, zlens1, zbswap
+       vpshufb zlens2, zlens2, zbswap
+       vplzcntq zlens1, zlens1
+       vplzcntq zlens2, zlens2
+       vpmovqd zlens1 %+ y, zlens1
+       vpmovqd zlens2 %+ y, zlens2
+       vinserti32x8 zlens1, zlens2 %+ y, 1
+       vpsrld  zlens1, zlens1, 3
+
+;; Preload for next loops
+       vmovdqu64 datas, datas_lookup
+       vmovdqu64 datas_lookup %+ y, [f_i + file_start + 2 * VECT_SIZE]
+
+;; Zero out matches which should not be taken
+       kshiftrw k3, k1, 15
+       vpermd  zlens2, zrot_left, zlens1
+       vpermd  zdists, zrot_left, zdists
+
+       vmovd   zdists_tmp %+ x, prev_len %+ d
+       vmovd   prev_len %+ d, zlens2 %+ x
+       vmovdqu32 zlens2 {k3}, zdists_tmp
+
+       vmovd   zdists_tmp %+ x, prev_dist %+ d
+       vmovd   prev_dist %+ d, zdists %+ x
+       vmovdqu32 zdists {k3}, zdists_tmp
+
+       vpcmpgtd k3, zlens2, zshortest_matches
+       vpcmpgtd k4, zlens1, zlens2
+
+       knotq   k3, k3
+       korq    k3, k3, k4
+       knotq   k4, k3
+       vmovdqu32 zlens1 {k4}{z}, zlens2
+
+;; Update zdists to match zlens1
+       vpaddd  zdists, zdists, zlens1
+       vpaddd  zdists, zdists, ztwofiftyfour
+       vpmovzxbd zdists {k3}, [f_i + file_start - VECT_SIZE - 1]
+       vpaddd  zdists {k3}, zdists, znull_dist_syms
+
+;;Store zdists
+       vmovdqu64 [matches_next], zdists
+       add     matches_next, ICF_CODE_BYTES * VECT_SIZE
+
+       cmp     f_i, f_i_end
+       jle     .loop1
+
+.loop1_end:
+       lea     next_in, [f_i + file_start]
+
+;; Calculate look back dists
+       vpaddd  zdists, zdists_lookup, zones
+       vpsubd  zdists, zindex, zdists
+       vpandd  zdists, zdists, zdist_mask
+       vpaddd  zdists, zdists, zones
+       vpsubd  zdists, zincrement, zdists
+
+;;lookup old codes
+       vextracti32x8 zdists2 %+ y, zdists, 1
+       kxnorq  k6, k6, k6
+       kxnorq  k7, k7, k7
+       vpgatherdq zlens1 {k6}, [next_in + zdists %+ y]
+       vpgatherdq zlens2 {k7}, [next_in + zdists2 %+ y]
+
+;; Restore last update hash value
+       vextracti32x4 zdists2 %+ x, zdists, 3
+       vpextrd tmp %+ d, zdists2 %+ x, 3
+       add     tmp %+ d, f_i %+ d
+
+       vmovd   zhashes %+ x, dword [f_i + file_start + VECT_SIZE - 1]
+       vpmaddwd zhashes %+ x, zhashes %+ x, zhash_prod %+ x
+       vpmaddwd zhashes %+ x, zhashes %+ x, zhash_prod %+ x
+       vpandd  zhashes %+ x, zhashes %+ x, zhash_mask %+ x
+       vmovd   hash %+ d, zhashes %+ x
+
+       mov     word [hash_table + HASH_BYTES * hash], tmp %+ w
+
+;; Calculate dist_icf_code
+       vpaddd  zdists, zdists, zones
+       vpsubd  zdists, zincrement, zdists
+       vpcmpgtd k5, zdists, zones
+       vplzcntd zdist_extra, zdists
+       vpsubd  zdist_extra {k5}{z}, zthirty, zdist_extra
+       vpsllvd zcode, zones, zdist_extra
+       vpsubd  zcode, zcode, zones
+       vpandd  zcode {k5}{z}, zdists, zcode
+       vpsrlvd zdists, zdists, zdist_extra
+       vpslld  zdist_extra, zdist_extra, 1
+       vpaddd  zdists, zdists, zdist_extra
+       vpslld  zcode, zcode, EXTRA_BITS_OFFSET - DIST_OFFSET
+       vpaddd  zdists, zdists, zcode
+
+;; Setup zdists for combining with zlens
+       vpslld  zdists, zdists, DIST_OFFSET
+
+;; xor current data with lookback dist
+       vpxorq  zlens1, zlens1, zlookup
+       vpxorq  zlens2, zlens2, zlookup2
+
+;; Compute match length
+       vpshufb zlens1, zlens1, zbswap
+       vpshufb zlens2, zlens2, zbswap
+       vplzcntq zlens1, zlens1
+       vplzcntq zlens2, zlens2
+       vpmovqd zlens1 %+ y, zlens1
+       vpmovqd zlens2 %+ y, zlens2
+       vinserti32x8 zlens1, zlens2 %+ y, 1
+       vpsrld  zlens1, zlens1, 3
+
+;; Zero out matches which should not be taken
+       kshiftrw k3, k1, 15
+       vpermd  zlens2, zrot_left, zlens1
+       vpermd  zdists, zrot_left, zdists
+
+       vmovd   zdists_tmp %+ x, prev_len %+ d
+       vmovd   prev_len %+ d, zlens2 %+ x
+       vmovdqu32 zlens2 {k3}, zdists_tmp
+
+       vmovd   zdists_tmp %+ x, prev_dist %+ d
+       vmovd   prev_dist %+ d, zdists %+ x
+       vmovdqu32 zdists {k3}, zdists_tmp
+
+       vpcmpgtd k3, zlens2, zshortest_matches
+       vpcmpgtd k4, zlens1, zlens2
+
+       knotq   k3, k3
+       korq    k3, k3, k4
+       knotq   k4, k3
+       vmovdqu32 zlens1 {k4}{z}, zlens2
+
+;; Update zdists to match zlens1
+       vpaddd  zdists, zdists, zlens1
+       vpaddd  zdists, zdists, ztwofiftyfour
+       vpmovzxbd zdists {k3}, [f_i + file_start - 1]
+       vpaddd  zdists {k3}, zdists, znull_dist_syms
+
+;;Store zdists
+       vmovdqu64 [matches_next], zdists
+       add     f_i, VECT_SIZE
+
+end_main:
+       sub     f_i, f_i_orig
+       sub     f_i, 1
+%ifnidn f_i, rax
+       mov     rax, f_i
+%endif
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 64
+;; 64 byte data
+datas_perm:
+       dq 0x0, 0x1, 0x0, 0x1, 0x1, 0x2, 0x1, 0x2
+drot_left:
+       dd 0xf, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6
+       dd 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe
+qword_shuf:
+       db 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+       db 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8
+       db 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9
+       db 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa
+       db 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb
+       db 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc
+       db 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd
+       db 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe
+       db 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
+datas_shuf:
+       db 0x0, 0x1, 0x2, 0x3
+       db 0x1, 0x2, 0x3, 0x4
+       db 0x2, 0x3, 0x4, 0x5
+       db 0x3, 0x4, 0x5, 0x6
+       db 0x4, 0x5, 0x6, 0x7
+       db 0x5, 0x6, 0x7, 0x8
+       db 0x6, 0x7, 0x8, 0x9
+       db 0x7, 0x8, 0x9, 0xa
+increment:
+       dd 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+       dd 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
+
+;; 16 byte data
+datas_perm2:
+       dq 0x0, 0x1
+datas_perm3:
+       dq 0x1, 0x2
+bswap_shuf:
+       db 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
+       db 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08
+;; 8 byte data
+k_mask_1:
+       dq 0xaaaaaaaaaaaaaaaa
+k_mask_2:
+       dq 0x7fff
+;; 4 byte data
+null_dist_syms:
+       dd LIT
+%define PROD1 0xE84B
+%define PROD2 0x97B1
+hash_prod:
+       dw PROD1, PROD2
+ones:
+       dd 0x1
+thirty:
+       dd 0x1e
+twofiftyfour:
+       dd 0xfe
+lit_len_mask:
+       dd LIT_LEN_MASK
+shortest_matches:
+       dd MIN_DEF_MATCH
+%endif
index 5917572b86f05d33e934e027ff15461b1db43616..bc8c935aa2be7b3b5a4660c46ae20d586b72084b 100644 (file)
@@ -27,6 +27,7 @@
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
 # define RUN_MEM_SIZE 2000000000
 #endif
 
-int get_filesize(FILE * f)
-{
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
-}
-
 void print_histogram(struct isal_huff_histogram *histogram)
 {
        int i;
@@ -78,8 +68,9 @@ void print_histogram(struct isal_huff_histogram *histogram)
 int main(int argc, char *argv[])
 {
        FILE *in;
-       unsigned char *inbuf, *outbuf;
-       int i, infile_size, outbuf_size, iterations, avail_in;
+       unsigned char *inbuf;
+       int iterations, avail_in;
+       uint64_t infile_size;
        struct isal_huff_histogram histogram1, histogram2;
 
        memset(&histogram1, 0, sizeof(histogram1));
@@ -101,7 +92,6 @@ int main(int argc, char *argv[])
         * (assuming some possible expansion on output size)
         */
        infile_size = get_filesize(in);
-       outbuf_size = 2 * infile_size;
 
        if (infile_size != 0)
                iterations = RUN_MEM_SIZE / infile_size;
@@ -112,35 +102,28 @@ int main(int argc, char *argv[])
                iterations = MIN_TEST_LOOPS;
 
        inbuf = malloc(infile_size);
-       outbuf = malloc(outbuf_size);
        if (inbuf == NULL) {
                fprintf(stderr, "Can't allocate input buffer memory\n");
                exit(0);
        }
 
-       if (outbuf == NULL) {
-               fprintf(stderr, "Can't allocate output buffer memory\n");
-               exit(0);
-       }
-
        avail_in = fread(inbuf, 1, infile_size, in);
        if (avail_in != infile_size) {
+               free(inbuf);
                fprintf(stderr, "Couldn't fit all of input file into buffer\n");
                exit(0);
        }
 
-       struct perf start, stop;
-       perf_start(&start);
-
-       for (i = 0; i < iterations; i++)
-               isal_update_histogram(inbuf, infile_size, &histogram1);
-       perf_stop(&stop);
-
-       printf("  file %s - in_size=%d iter=%d\n", argv[1], infile_size, i);
-       printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
+       struct perf start;
+       BENCHMARK(&start, BENCHMARK_TIME,
+                 isal_update_histogram(inbuf, infile_size, &histogram1));
+       printf("  file %s - in_size=%lu\n", argv[1], infile_size);
+       printf("igzip_hist_file: ");
+       perf_print(start, (long long)infile_size);
 
        fclose(in);
        fflush(0);
+       free(inbuf);
+
        return 0;
 }
index be090f85d0b2e68f7517d25432b7f58db2838aff..1f031796dde3fd5654aeef00a64524f691a068da 100644 (file)
@@ -4,6 +4,7 @@
 #include "huff_codes.h"
 #include "encode_df.h"
 #include "igzip_level_buf_structs.h"
+#include "unaligned.h"
 
 static inline void write_deflate_icf(struct deflate_icf *icf, uint32_t lit_len,
                                     uint32_t lit_dist, uint32_t extra_bits)
@@ -18,15 +19,21 @@ static inline void update_state(struct isal_zstream *stream, uint8_t * start_in,
                                struct deflate_icf *start_out, struct deflate_icf *next_out,
                                struct deflate_icf *end_out)
 {
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+
+       if (next_in - start_in > 0)
+               stream->internal_state.has_hist = IGZIP_HIST;
+
        stream->next_in = next_in;
        stream->total_in += next_in - start_in;
+       stream->internal_state.block_end = stream->total_in;
        stream->avail_in = end_in - next_in;
 
-       ((struct level_2_buf *)stream->level_buf)->icf_buf_next = next_out;
-       ((struct level_2_buf *)stream->level_buf)->icf_buf_avail_out = end_out - next_out;
+       level_buf->icf_buf_next = next_out;
+       level_buf->icf_buf_avail_out = end_out - next_out;
 }
 
-void isal_deflate_icf_body_base(struct isal_zstream *stream)
+void isal_deflate_icf_body_hash_hist_base(struct isal_zstream *stream)
 {
        uint32_t literal, hash;
        uint8_t *start_in, *next_in, *end_in, *end, *next_hash;
@@ -35,7 +42,11 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
        uint32_t dist;
        uint32_t code, code2, extra_bits;
        struct isal_zstate *state = &stream->internal_state;
-       uint16_t *last_seen = state->head;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint16_t *last_seen = level_buf->hash_hist.hash_table;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hist_size = state->dist_mask;
+       uint32_t hash_mask = state->hash_mask;
 
        if (stream->avail_in == 0) {
                if (stream->end_of_stream || stream->flush != NO_FLUSH)
@@ -47,9 +58,9 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
        end_in = start_in + stream->avail_in;
        next_in = start_in;
 
-       start_out = ((struct level_2_buf *)stream->level_buf)->icf_buf_next;
+       start_out = ((struct level_buf *)stream->level_buf)->icf_buf_next;
        end_out =
-           start_out + ((struct level_2_buf *)stream->level_buf)->icf_buf_avail_out /
+           start_out + ((struct level_buf *)stream->level_buf)->icf_buf_avail_out /
            sizeof(struct deflate_icf);
        next_out = start_out;
 
@@ -62,13 +73,13 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
                        return;
                }
 
-               literal = *(uint32_t *) next_in;
-               hash = compute_hash(literal) & HASH_MASK;
-               dist = (next_in - state->file_start - last_seen[hash]) & 0xFFFF;
-               last_seen[hash] = (uint64_t) (next_in - state->file_start);
+               literal = load_u32(next_in);
+               hash = compute_hash(literal) & hash_mask;
+               dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+               last_seen[hash] = (uint64_t) (next_in - file_start);
 
                /* The -1 are to handle the case when dist = 0 */
-               if (dist - 1 < IGZIP_HIST_SIZE - 1) {
+               if (dist - 1 < hist_size) {
                        assert(dist != 0);
 
                        match_length = compare258(next_in - dist, next_in, 258);
@@ -83,17 +94,16 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
                                next_hash++;
 
                                for (; next_hash < end; next_hash++) {
-                                       literal = *(uint32_t *) next_hash;
-                                       hash = compute_hash(literal) & HASH_MASK;
-                                       last_seen[hash] =
-                                           (uint64_t) (next_hash - state->file_start);
+                                       literal = load_u32(next_hash);
+                                       hash = compute_hash(literal) & hash_mask;
+                                       last_seen[hash] = (uint64_t) (next_hash - file_start);
                                }
 
                                get_len_icf_code(match_length, &code);
                                get_dist_icf_code(dist, &code2, &extra_bits);
 
-                               state->hist.ll_hist[code]++;
-                               state->hist.d_hist[code2]++;
+                               level_buf->hist.ll_hist[code]++;
+                               level_buf->hist.d_hist[code2]++;
 
                                write_deflate_icf(next_out, code, code2, extra_bits);
                                next_out++;
@@ -104,7 +114,7 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
                }
 
                get_lit_icf_code(literal & 0xFF, &code);
-               state->hist.ll_hist[code]++;
+               level_buf->hist.ll_hist[code]++;
                write_deflate_icf(next_out, code, NULL_DIST_SYM, 0);
                next_out++;
                next_in++;
@@ -120,7 +130,7 @@ void isal_deflate_icf_body_base(struct isal_zstream *stream)
 
 }
 
-void isal_deflate_icf_finish_base(struct isal_zstream *stream)
+void isal_deflate_icf_finish_hash_hist_base(struct isal_zstream *stream)
 {
        uint32_t literal = 0, hash;
        uint8_t *start_in, *next_in, *end_in, *end, *next_hash;
@@ -129,17 +139,27 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
        uint32_t dist;
        uint32_t code, code2, extra_bits;
        struct isal_zstate *state = &stream->internal_state;
-       uint16_t *last_seen = state->head;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint16_t *last_seen = level_buf->hash_hist.hash_table;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hist_size = state->dist_mask;
+       uint32_t hash_mask = state->hash_mask;
 
        start_in = stream->next_in;
        end_in = start_in + stream->avail_in;
        next_in = start_in;
 
-       start_out = ((struct level_2_buf *)stream->level_buf)->icf_buf_next;
-       end_out = start_out + ((struct level_2_buf *)stream->level_buf)->icf_buf_avail_out /
+       start_out = ((struct level_buf *)stream->level_buf)->icf_buf_next;
+       end_out = start_out + ((struct level_buf *)stream->level_buf)->icf_buf_avail_out /
            sizeof(struct deflate_icf);
        next_out = start_out;
 
+       if (stream->avail_in == 0) {
+               if (stream->end_of_stream || stream->flush != NO_FLUSH)
+                       state->state = ZSTATE_CREATE_HDR;
+               return;
+       }
+
        while (next_in + 3 < end_in) {
                if (next_out >= end_out) {
                        state->state = ZSTATE_CREATE_HDR;
@@ -148,12 +168,12 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
                        return;
                }
 
-               literal = *(uint32_t *) next_in;
-               hash = compute_hash(literal) & HASH_MASK;
-               dist = (next_in - state->file_start - last_seen[hash]) & 0xFFFF;
-               last_seen[hash] = (uint64_t) (next_in - state->file_start);
+               literal = load_u32(next_in);
+               hash = compute_hash(literal) & hash_mask;
+               dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+               last_seen[hash] = (uint64_t) (next_in - file_start);
 
-               if (dist - 1 < IGZIP_HIST_SIZE - 1) {   /* The -1 are to handle the case when dist = 0 */
+               if (dist - 1 < hist_size) {     /* The -1 are to handle the case when dist = 0 */
                        match_length = compare258(next_in - dist, next_in, end_in - next_in);
 
                        if (match_length >= SHORTEST_MATCH) {
@@ -166,17 +186,16 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
                                next_hash++;
 
                                for (; next_hash < end - 3; next_hash++) {
-                                       literal = *(uint32_t *) next_hash;
-                                       hash = compute_hash(literal) & HASH_MASK;
-                                       last_seen[hash] =
-                                           (uint64_t) (next_hash - state->file_start);
+                                       literal = load_u32(next_hash);
+                                       hash = compute_hash(literal) & hash_mask;
+                                       last_seen[hash] = (uint64_t) (next_hash - file_start);
                                }
 
                                get_len_icf_code(match_length, &code);
                                get_dist_icf_code(dist, &code2, &extra_bits);
 
-                               state->hist.ll_hist[code]++;
-                               state->hist.d_hist[code2]++;
+                               level_buf->hist.ll_hist[code]++;
+                               level_buf->hist.d_hist[code2]++;
 
                                write_deflate_icf(next_out, code, code2, extra_bits);
 
@@ -188,7 +207,7 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
                }
 
                get_lit_icf_code(literal & 0xFF, &code);
-               state->hist.ll_hist[code]++;
+               level_buf->hist.ll_hist[code]++;
                write_deflate_icf(next_out, code, NULL_DIST_SYM, 0);
                next_out++;
                next_in++;
@@ -205,7 +224,7 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
 
                literal = *next_in;
                get_lit_icf_code(literal & 0xFF, &code);
-               state->hist.ll_hist[code]++;
+               level_buf->hist.ll_hist[code]++;
                write_deflate_icf(next_out, code, NULL_DIST_SYM, 0);
                next_out++;
                next_in++;
@@ -221,3 +240,131 @@ void isal_deflate_icf_finish_base(struct isal_zstream *stream)
 
        return;
 }
+
+void isal_deflate_icf_finish_hash_map_base(struct isal_zstream *stream)
+{
+       uint32_t literal = 0, hash;
+       uint8_t *start_in, *next_in, *end_in, *end, *next_hash;
+       struct deflate_icf *start_out, *next_out, *end_out;
+       uint16_t match_length;
+       uint32_t dist;
+       uint32_t code, code2, extra_bits;
+       struct isal_zstate *state = &stream->internal_state;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint16_t *last_seen = level_buf->hash_map.hash_table;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hist_size = state->dist_mask;
+       uint32_t hash_mask = state->hash_mask;
+
+       start_in = stream->next_in;
+       end_in = start_in + stream->avail_in;
+       next_in = start_in;
+
+       start_out = level_buf->icf_buf_next;
+       end_out = start_out + level_buf->icf_buf_avail_out / sizeof(struct deflate_icf);
+       next_out = start_out;
+
+       if (stream->avail_in == 0) {
+               if (stream->end_of_stream || stream->flush != NO_FLUSH)
+                       state->state = ZSTATE_CREATE_HDR;
+               return;
+       }
+
+       while (next_in + 3 < end_in) {
+               if (next_out >= end_out) {
+                       state->state = ZSTATE_CREATE_HDR;
+                       update_state(stream, start_in, next_in, end_in, start_out, next_out,
+                                    end_out);
+                       return;
+               }
+
+               literal = load_u32(next_in);
+               hash = compute_hash_mad(literal) & hash_mask;
+               dist = (next_in - file_start - last_seen[hash]) & 0xFFFF;
+               last_seen[hash] = (uint64_t) (next_in - file_start);
+
+               if (dist - 1 < hist_size) {     /* The -1 are to handle the case when dist = 0 */
+                       match_length = compare258(next_in - dist, next_in, end_in - next_in);
+
+                       if (match_length >= SHORTEST_MATCH) {
+                               next_hash = next_in;
+#ifdef ISAL_LIMIT_HASH_UPDATE
+                               end = next_hash + 3;
+#else
+                               end = next_hash + match_length;
+#endif
+                               next_hash++;
+
+                               for (; next_hash < end - 3; next_hash++) {
+                                       literal = load_u32(next_hash);
+                                       hash = compute_hash_mad(literal) & hash_mask;
+                                       last_seen[hash] = (uint64_t) (next_hash - file_start);
+                               }
+
+                               get_len_icf_code(match_length, &code);
+                               get_dist_icf_code(dist, &code2, &extra_bits);
+
+                               level_buf->hist.ll_hist[code]++;
+                               level_buf->hist.d_hist[code2]++;
+
+                               write_deflate_icf(next_out, code, code2, extra_bits);
+
+                               next_out++;
+                               next_in += match_length;
+
+                               continue;
+                       }
+               }
+
+               get_lit_icf_code(literal & 0xFF, &code);
+               level_buf->hist.ll_hist[code]++;
+               write_deflate_icf(next_out, code, NULL_DIST_SYM, 0);
+               next_out++;
+               next_in++;
+
+       }
+
+       while (next_in < end_in) {
+               if (next_out >= end_out) {
+                       state->state = ZSTATE_CREATE_HDR;
+                       update_state(stream, start_in, next_in, end_in, start_out, next_out,
+                                    end_out);
+                       return;
+               }
+
+               literal = *next_in;
+               get_lit_icf_code(literal & 0xFF, &code);
+               level_buf->hist.ll_hist[code]++;
+               write_deflate_icf(next_out, code, NULL_DIST_SYM, 0);
+               next_out++;
+               next_in++;
+
+       }
+
+       if (next_in == end_in) {
+               if (stream->end_of_stream || stream->flush != NO_FLUSH)
+                       state->state = ZSTATE_CREATE_HDR;
+       }
+
+       update_state(stream, start_in, next_in, end_in, start_out, next_out, end_out);
+
+       return;
+}
+
+void isal_deflate_hash_mad_base(uint16_t * hash_table, uint32_t hash_mask,
+                               uint32_t current_index, uint8_t * dict, uint32_t dict_len)
+{
+       uint8_t *next_in = dict;
+       uint8_t *end_in = dict + dict_len - SHORTEST_MATCH;
+       uint32_t literal;
+       uint32_t hash;
+       uint16_t index = current_index - dict_len;
+
+       while (next_in <= end_in) {
+               literal = load_u32(next_in);
+               hash = compute_hash_mad(literal) & hash_mask;
+               hash_table[hash] = index;
+               index++;
+               next_in++;
+       }
+}
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body.asm b/ceph/src/isa-l/igzip/igzip_icf_body.asm
deleted file mode 100644 (file)
index bc76114..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-;
-;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions
-;  are met:
-;    * Redistributions of source code must retain the above copyright
-;      notice, this list of conditions and the following disclaimer.
-;    * Redistributions in binary form must reproduce the above copyright
-;      notice, this list of conditions and the following disclaimer in
-;      the documentation and/or other materials provided with the
-;      distribution.
-;    * Neither the name of Intel Corporation nor the names of its
-;      contributors may be used to endorse or promote products derived
-;      from this software without specific prior written permission.
-;
-;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-%include "options.asm"
-
-%include "lz0a_const.asm"
-%include "data_struct2.asm"
-%include "bitbuf2.asm"
-%include "huffman.asm"
-%include "igzip_compare_types.asm"
-%include "reg_sizes.asm"
-
-%include "stdmac.asm"
-
-%ifdef DEBUG
-%macro MARK 1
-global %1
-%1:
-%endm
-%else
-%macro MARK 1
-%endm
-%endif
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-%define        file_start      rdi
-%define file_length    r15
-%define        stream          r14
-%define        f_i             r10
-%define        m_out_buf       r11
-
-%define        curr_data       rax
-
-%define        tmp2            rcx
-
-%define        dist            rbx
-%define dist_code2     rbx
-%define        lit_code2       rbx
-
-%define        dist2           r12
-%define dist_code      r12
-
-%define        tmp1            rsi
-
-%define        lit_code        rsi
-
-%define        curr_data2      r8
-%define        len2            r8
-%define        tmp4            r8
-
-%define        len             rdx
-%define len_code       rdx
-%define hash3          rdx
-
-%define        tmp3            r13
-
-%define hash           rbp
-%define        hash2           r9
-
-;; GPR r8 & r15 can be used
-
-%define xtmp0          xmm0    ; tmp
-%define xtmp1          xmm1    ; tmp
-%define        xdata           xmm4
-
-%define ytmp0          ymm0    ; tmp
-%define ytmp1          ymm1    ; tmp
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-m_out_end           equ  0      ; local variable (8 bytes)
-m_out_start         equ         8
-f_end_i_mem_offset  equ 16
-gpr_save_mem_offset equ 24       ; gpr save area (8*8 bytes)
-xmm_save_mem_offset equ 24 + 8*8 ; xmm save area (4*16 bytes) (16 byte aligned)
-stack_size          equ 3*8 + 8*8 + 4*16
-
-;;; 8 because stack address is odd multiple of 8 after a function call and
-;;; we want it aligned to 16 bytes
-
-; void isal_deflate_icf_body ( isal_zstream *stream )
-; arg 1: rcx: addr of stream
-global isal_deflate_icf_body_ %+ ARCH
-isal_deflate_icf_body_ %+ ARCH %+ :
-%ifidn __OUTPUT_FORMAT__, elf64
-       mov     rcx, rdi
-%endif
-
-       ;; do nothing if (avail_in == 0)
-       cmp     dword [rcx + _avail_in], 0
-       jne     skip1
-
-       ;; Set stream's next state
-       mov     rdx, ZSTATE_FLUSH_READ_BUFFER
-       mov     rax, ZSTATE_CREATE_HDR
-       cmp     dword [rcx + _end_of_stream], 0
-       cmovne  rax, rdx
-       cmp     dword [rcx + _flush], _NO_FLUSH
-       cmovne  rax, rdx
-       mov     dword [rcx + _internal_state_state], eax
-       ret
-skip1:
-
-%ifdef ALIGN_STACK
-       push    rbp
-       mov     rbp, rsp
-       sub     rsp, stack_size
-       and     rsp, ~15
-%else
-       sub     rsp, stack_size
-%endif
-
-       mov [rsp + gpr_save_mem_offset + 0*8], rbx
-       mov [rsp + gpr_save_mem_offset + 1*8], rsi
-       mov [rsp + gpr_save_mem_offset + 2*8], rdi
-       mov [rsp + gpr_save_mem_offset + 3*8], rbp
-       mov [rsp + gpr_save_mem_offset + 4*8], r12
-       mov [rsp + gpr_save_mem_offset + 5*8], r13
-       mov [rsp + gpr_save_mem_offset + 6*8], r14
-       mov [rsp + gpr_save_mem_offset + 7*8], r15
-
-       mov     stream, rcx
-       mov     dword [stream + _internal_state_has_eob], 0
-
-       ; state->bitbuf.set_buf(stream->next_out, stream->avail_out);
-       mov     tmp1, [stream + _level_buf]
-       mov     m_out_buf, [tmp1 + _icf_buf_next]
-
-       mov     [rsp + m_out_start], m_out_buf
-       mov     tmp1, [tmp1 + _icf_buf_avail_out]
-       add     tmp1, m_out_buf
-       sub     tmp1, SLOP
-
-       mov     [rsp + m_out_end], tmp1
-
-       mov     file_start, [stream + _next_in]
-
-       mov     f_i %+ d, dword [stream + _total_in]
-       sub     file_start, f_i
-
-       mov     file_length %+ d, [stream + _avail_in]
-       add     file_length, f_i
-
-       ; file_length -= LA;
-       sub     file_length, LA
-       ; if (file_length <= 0) continue;
-
-       cmp     file_length, f_i
-       jle     input_end
-
-       ; for (f_i = f_start_i; f_i < file_length; f_i++) {
-MARK __body_compute_hash_ %+ ARCH
-       MOVDQU  xdata, [file_start + f_i]
-       mov     curr_data, [file_start + f_i]
-       mov     tmp3, curr_data
-       mov     tmp4, curr_data
-
-       compute_hash    hash, curr_data
-
-       shr     tmp3, 8
-       compute_hash    hash2, tmp3
-
-       and     hash, HASH_MASK
-       and     hash2, HASH_MASK
-
-       cmp     dword [stream + _internal_state_has_hist], 0
-       je      write_first_byte
-
-       jmp     loop2
-       align   16
-
-loop2:
-       ; if (state->bitbuf.is_full()) {
-       cmp     m_out_buf, [rsp + m_out_end]
-       ja      output_end
-
-       xor     dist, dist
-       xor     dist2, dist2
-       xor     tmp3, tmp3
-
-       lea     tmp1, [file_start + f_i]
-
-       mov     dist %+ w, f_i %+ w
-       dec     dist
-       sub     dist %+ w, word [stream + _internal_state_head + 2 * hash]
-       mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
-
-       inc     f_i
-
-       mov     tmp2, curr_data
-       shr     curr_data, 16
-       compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
-
-       mov     dist2 %+ w, f_i %+ w
-       dec     dist2
-       sub     dist2 %+ w, word [stream + _internal_state_head + 2 * hash2]
-       mov     [stream + _internal_state_head + 2 * hash2], f_i %+ w
-
-       ; if ((dist-1) < (D-1)) {
-       and     dist %+ d, (D-1)
-       neg     dist
-
-       shr     tmp2, 24
-       compute_hash    hash2, tmp2
-       and     hash2 %+ d, HASH_MASK
-
-       and     dist2 %+ d, (D-1)
-       neg     dist2
-
-MARK __body_compare_ %+ ARCH
-       ;; Check for long len/dist match (>7) with first literal
-       MOVQ    len, xdata
-       mov     curr_data, len
-       PSRLDQ  xdata, 1
-       xor     len, [tmp1 + dist - 1]
-       jz      compare_loop
-
-       ;; Check for len/dist match (>7) with second literal
-       MOVQ    len2, xdata
-       xor     len2, [tmp1 + dist2]
-       jz      compare_loop2
-
-       movzx   lit_code, curr_data %+ b
-       shr     curr_data, 8
-
-       ;; Check for len/dist match for first literal
-       test    len %+ d, 0xFFFFFFFF
-       jz      len_dist_huffman_pre
-
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*lit_code]
-       movzx   lit_code2, curr_data %+ b
-       ;; Check for len/dist match for second literal
-       test    len2 %+ d, 0xFFFFFFFF
-       jnz     write_lit_bits
-
-MARK __body_len_dist_lit_huffman_ %+ ARCH
-len_dist_lit_huffman_pre:
-       bsf     len2, len2
-       shr     len2, 3
-
-len_dist_lit_huffman:
-       or      lit_code, LIT
-       movnti  dword [m_out_buf], lit_code %+ d
-
-       neg     dist2
-
-       get_dist_icf_code       dist2, dist_code2, tmp1
-
-       ;; Setup for updating hash
-       lea     tmp3, [f_i + 1] ; tmp3 <= k
-
-       add     file_start, f_i
-       MOVDQU  xdata, [file_start + len2]
-       mov     tmp1, [file_start + len2]
-
-       shr     curr_data, 24
-       compute_hash    hash3, curr_data
-       and     hash3, HASH_MASK
-
-       mov     curr_data, tmp1
-       shr     tmp1, 8
-
-       sub     file_start, f_i
-       add     f_i, len2
-
-       mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
-
-       compute_hash    hash, curr_data
-
-       add     tmp3,1
-       mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
-
-       compute_hash    hash2, tmp1
-
-       add     tmp3, 1
-       mov     [stream + _internal_state_head + 2 * hash3], tmp3 %+ w
-
-       add     dist_code2, 254
-       add     dist_code2, len2
-
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*(len2 + 254)]
-
-       movnti  dword [m_out_buf + 4], dist_code2 %+ d
-       add     m_out_buf, 8
-
-       shr     dist_code2, DIST_OFFSET
-       and     dist_code2, 0x1F
-       inc     word [stream + _internal_state_hist_dist + HIST_ELEM_SIZE*dist_code2]
-
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
-
-       ; continue
-       cmp     f_i, file_length
-       jl      loop2
-       jmp     input_end
-       ;; encode as dist/len
-
-MARK __body_len_dist_huffman_ %+ ARCH
-len_dist_huffman_pre:
-       bsf     len, len
-       shr     len, 3
-
-len_dist_huffman:
-       dec     f_i
-       ;; Setup for updateing hash
-       lea     tmp3, [f_i + 2] ; tmp3 <= k
-
-       neg     dist
-
-       ; get_dist_code(dist, &code2, &code_len2);
-       get_dist_icf_code   dist, dist_code, tmp1
-
-       add     file_start, f_i
-       MOVDQU  xdata, [file_start + len]
-       mov     curr_data2, [file_start + len]
-       mov     curr_data, curr_data2
-       sub     file_start, f_i
-       add     f_i, len
-       ; get_len_code(len, &code, &code_len);
-       lea     len_code, [len + 254]
-       or      dist_code, len_code
-
-       mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
-       add     tmp3,1
-       mov     [stream + _internal_state_head + 2 * hash2], tmp3 %+ w
-
-       compute_hash    hash, curr_data
-
-       shr     curr_data2, 8
-       compute_hash    hash2, curr_data2
-
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*len_code]
-
-       movnti  dword [m_out_buf], dist_code %+ d
-       add     m_out_buf, 4
-
-       shr     dist_code, DIST_OFFSET
-       and     dist_code, 0x1F
-       inc     word [stream + _internal_state_hist_dist + HIST_ELEM_SIZE*dist_code]
-
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
-
-       ; continue
-       cmp     f_i, file_length
-       jl      loop2
-       jmp     input_end
-
-MARK __body_write_lit_bits_ %+ ARCH
-write_lit_bits:
-       MOVDQU  xdata, [file_start + f_i + 1]
-       add     f_i, 1
-       MOVQ    curr_data, xdata
-
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*lit_code2]
-
-       shl     lit_code2, DIST_OFFSET
-       lea     lit_code, [lit_code + lit_code2 + (31 << DIST_OFFSET)]
-
-       movnti  dword [m_out_buf], lit_code %+ d
-       add     m_out_buf, 4
-
-       ; continue
-       cmp     f_i, file_length
-       jl      loop2
-
-input_end:
-       mov     tmp1, ZSTATE_FLUSH_READ_BUFFER
-       mov     tmp2, ZSTATE_BODY
-       cmp     dword [stream + _end_of_stream], 0
-       cmovne  tmp2, tmp1
-       cmp     dword [stream + _flush], _NO_FLUSH
-
-       cmovne  tmp2, tmp1
-       mov     dword [stream + _internal_state_state], tmp2 %+ d
-       jmp     end
-
-output_end:
-       mov     dword [stream + _internal_state_state], ZSTATE_CREATE_HDR
-
-end:
-       ;; update input buffer
-       add     file_length, LA
-       mov     [stream + _total_in], f_i %+ d
-       add     file_start, f_i
-       mov     [stream + _next_in], file_start
-       sub     file_length, f_i
-       mov     [stream + _avail_in], file_length %+ d
-
-       ;; update output buffer
-       mov     tmp1, [stream + _level_buf]
-       mov     [tmp1 + _icf_buf_next], m_out_buf
-       sub     m_out_buf, [rsp + m_out_start]
-       sub     [tmp1 + _icf_buf_avail_out], m_out_buf %+ d
-
-       mov rbx, [rsp + gpr_save_mem_offset + 0*8]
-       mov rsi, [rsp + gpr_save_mem_offset + 1*8]
-       mov rdi, [rsp + gpr_save_mem_offset + 2*8]
-       mov rbp, [rsp + gpr_save_mem_offset + 3*8]
-       mov r12, [rsp + gpr_save_mem_offset + 4*8]
-       mov r13, [rsp + gpr_save_mem_offset + 5*8]
-       mov r14, [rsp + gpr_save_mem_offset + 6*8]
-       mov r15, [rsp + gpr_save_mem_offset + 7*8]
-
-%ifndef ALIGN_STACK
-       add     rsp, stack_size
-%else
-       mov     rsp, rbp
-       pop     rbp
-%endif
-       ret
-
-MARK __body_compare_loops_ %+ ARCH
-compare_loop:
-       lea     tmp2, [tmp1 + dist - 1]
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len, tmp3, ytmp0, ytmp1
-%else
-       %error Unknown Compare type COMPARE_TYPE
-        % error
-%endif
-       jmp     len_dist_huffman
-
-compare_loop2:
-       lea     tmp2, [tmp1 + dist2]
-       add     tmp1, 1
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len2, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len2, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len2, tmp3, ytmp0, ytmp1
-%else
-%error Unknown Compare type COMPARE_TYPE
- % error
-%endif
-       movzx   lit_code, curr_data %+ b
-       shr     curr_data, 8
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*lit_code]
-       jmp     len_dist_lit_huffman
-
-MARK __write_first_byte_ %+ ARCH
-write_first_byte:
-       cmp     m_out_buf, [rsp + m_out_end]
-       ja      output_end
-
-       mov     dword [stream + _internal_state_has_hist], 1
-
-       mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
-
-       mov     hash, hash2
-       shr     tmp4, 16
-       compute_hash    hash2, tmp4
-
-       and     curr_data, 0xff
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*curr_data]
-       or      curr_data, LIT
-
-       movnti  dword [m_out_buf], curr_data %+ d
-       add     m_out_buf, 4
-
-       MOVDQU  xdata, [file_start + f_i + 1]
-       add     f_i, 1
-       mov     curr_data, [file_start + f_i]
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
-
-       cmp     f_i, file_length
-       jl      loop2
-       jmp     input_end
-
-section .data
-       align 16
-mask:  dd      HASH_MASK, HASH_MASK, HASH_MASK, HASH_MASK
-const_D: dq    D
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body.c b/ceph/src/isa-l/igzip/igzip_icf_body.c
new file mode 100644 (file)
index 0000000..5d57232
--- /dev/null
@@ -0,0 +1,326 @@
+#include "igzip_lib.h"
+#include "huffman.h"
+#include "encode_df.h"
+#include "igzip_level_buf_structs.h"
+
+extern uint64_t gen_icf_map_lh1(struct isal_zstream *, struct deflate_icf *, uint32_t);
+extern void set_long_icf_fg(uint8_t *, uint64_t, uint64_t, struct deflate_icf *);
+extern void isal_deflate_icf_body_lvl1(struct isal_zstream *);
+extern void isal_deflate_icf_body_lvl2(struct isal_zstream *);
+extern void isal_deflate_icf_body_lvl3(struct isal_zstream *);
+/*
+*************************************************************
+ * Helper functions
+ ************************************************************
+*/
+static inline void write_deflate_icf(struct deflate_icf *icf, uint32_t lit_len,
+                                    uint32_t lit_dist, uint32_t extra_bits)
+{
+       /* icf->lit_len = lit_len; */
+       /* icf->lit_dist = lit_dist; */
+       /* icf->dist_extra = extra_bits; */
+
+       store_u32((uint8_t *) icf, lit_len | (lit_dist << LIT_LEN_BIT_COUNT)
+                 | (extra_bits << (LIT_LEN_BIT_COUNT + DIST_LIT_BIT_COUNT)));
+}
+
+void set_long_icf_fg_base(uint8_t * next_in, uint64_t processed, uint64_t input_size,
+                         struct deflate_icf *match_lookup)
+{
+       uint8_t *end_processed = next_in + processed;
+       uint8_t *end_in = next_in + input_size;
+       uint32_t dist_code, dist_extra, dist, len;
+       uint32_t match_len;
+       uint32_t dist_start[] = {
+               0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d,
+               0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1,
+               0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01,
+               0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000
+       };
+
+       if (end_in > end_processed + ISAL_LOOK_AHEAD)
+               end_in = end_processed + ISAL_LOOK_AHEAD;
+
+       while (next_in < end_processed) {
+               dist_code = match_lookup->lit_dist;
+               dist_extra = match_lookup->dist_extra;
+               dist = dist_start[dist_code] + dist_extra;
+               len = match_lookup->lit_len;
+               if (len >= 8 + LEN_OFFSET) {
+                       match_len = compare((next_in + 8) - dist, next_in + 8,
+                                           end_in - (next_in + 8)) + LEN_OFFSET + 8;
+
+                       while (match_len > match_lookup->lit_len
+                              && match_len >= LEN_OFFSET + SHORTEST_MATCH) {
+                               write_deflate_icf(match_lookup,
+                                                 match_len > LEN_MAX ? LEN_MAX : match_len,
+                                                 dist_code, dist_extra);
+                               match_lookup++;
+                               next_in++;
+                               match_len--;
+                       }
+               }
+
+               match_lookup++;
+               next_in++;
+       }
+}
+
+/*
+*************************************************************
+ * Methods for generating one pass match lookup table
+ ************************************************************
+*/
+uint64_t gen_icf_map_h1_base(struct isal_zstream *stream,
+                            struct deflate_icf *matches_icf_lookup, uint64_t input_size)
+{
+
+       uint32_t dist, len, extra_bits;
+       uint8_t *next_in = stream->next_in, *end_in = stream->next_in + input_size;
+       uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in);
+       uint32_t hash;
+       uint64_t next_bytes, match_bytes;
+       uint64_t match;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint16_t *hash_table = level_buf->hash_map.hash_table;
+       uint32_t hist_size = stream->internal_state.dist_mask;
+       uint32_t hash_mask = stream->internal_state.hash_mask;
+
+       if (input_size < ISAL_LOOK_AHEAD)
+               return 0;
+
+       if (stream->internal_state.has_hist == IGZIP_NO_HIST) {
+               matches_icf_lookup->lit_len = *next_in;
+               matches_icf_lookup->lit_dist = 0x1e;
+               matches_icf_lookup->dist_extra = 0;
+
+               hash = compute_hash(load_u32(next_in)) & hash_mask;
+               hash_table[hash] = (uint64_t) (next_in - file_start);
+
+               next_in++;
+               matches_icf_lookup++;
+               stream->internal_state.has_hist = IGZIP_HIST;
+       }
+
+       while (next_in < end_in - ISAL_LOOK_AHEAD) {
+               hash = compute_hash(load_u32(next_in)) & hash_mask;
+               dist = (next_in - file_start - hash_table[hash]);
+               dist = ((dist - 1) & hist_size) + 1;
+               hash_table[hash] = (uint64_t) (next_in - file_start);
+
+               match_bytes = load_u64(next_in - dist);
+               next_bytes = load_u64(next_in);
+               match = next_bytes ^ match_bytes;
+
+               len = tzbytecnt(match);
+
+               if (len >= SHORTEST_MATCH) {
+                       len += LEN_OFFSET;
+                       get_dist_icf_code(dist, &dist, &extra_bits);
+                       write_deflate_icf(matches_icf_lookup, len, dist, extra_bits);
+               } else {
+                       write_deflate_icf(matches_icf_lookup, *next_in, 0x1e, 0);
+               }
+
+               next_in++;
+               matches_icf_lookup++;
+       }
+       return next_in - stream->next_in;
+}
+
+/*
+*************************************************************
+ * One pass methods for parsing provided match lookup table
+ ************************************************************
+*/
+static struct deflate_icf *compress_icf_map_g(struct isal_zstream *stream,
+                                             struct deflate_icf *matches_next,
+                                             struct deflate_icf *matches_end)
+{
+       uint32_t lit_len, lit_len2, dist;
+       uint64_t code;
+       struct isal_zstate *state = &stream->internal_state;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       struct deflate_icf *matches_start = matches_next;
+       struct deflate_icf *icf_buf_end =
+           level_buf->icf_buf_next +
+           level_buf->icf_buf_avail_out / sizeof(struct deflate_icf);
+
+       while (matches_next < matches_end - 1 && level_buf->icf_buf_next < icf_buf_end - 1) {
+               code = load_u64((uint8_t *) matches_next);
+               lit_len = code & LIT_LEN_MASK;
+               lit_len2 = (code >> ICF_CODE_LEN) & LIT_LEN_MASK;
+               level_buf->hist.ll_hist[lit_len]++;
+
+               if (lit_len >= LEN_START) {
+                       store_u32((uint8_t *) level_buf->icf_buf_next, code);
+                       level_buf->icf_buf_next++;
+
+                       dist = (code >> ICF_DIST_OFFSET) & DIST_LIT_MASK;
+                       level_buf->hist.d_hist[dist]++;
+                       lit_len -= LEN_OFFSET;
+                       matches_next += lit_len;
+
+               } else if (lit_len2 >= LEN_START) {
+                       store_u64((uint8_t *) level_buf->icf_buf_next, code);
+                       level_buf->icf_buf_next += 2;
+
+                       level_buf->hist.ll_hist[lit_len2]++;
+
+                       dist = (code >> (ICF_CODE_LEN + ICF_DIST_OFFSET)) & DIST_LIT_MASK;
+                       level_buf->hist.d_hist[dist]++;
+                       lit_len2 -= LEN_OFFSET - 1;
+                       matches_next += lit_len2;
+
+               } else {
+                       code = ((lit_len2 + LIT_START) << ICF_DIST_OFFSET) | lit_len;
+                       store_u32((uint8_t *) level_buf->icf_buf_next, code);
+                       level_buf->icf_buf_next++;
+
+                       level_buf->hist.ll_hist[lit_len2]++;
+
+                       matches_next += 2;
+               }
+       }
+
+       while (matches_next < matches_end && level_buf->icf_buf_next < icf_buf_end) {
+               code = load_u32((uint8_t *) matches_next);
+               lit_len = code & LIT_LEN_MASK;
+               store_u32((uint8_t *) level_buf->icf_buf_next, code);
+               level_buf->icf_buf_next++;
+
+               level_buf->hist.ll_hist[lit_len]++;
+               if (lit_len >= LEN_START) {
+                       dist = (code >> 10) & 0x1ff;
+                       level_buf->hist.d_hist[dist]++;
+                       lit_len -= LEN_OFFSET;
+                       matches_next += lit_len;
+               } else {
+                       matches_next++;
+               }
+       }
+
+       level_buf->icf_buf_avail_out =
+           (icf_buf_end - level_buf->icf_buf_next) * sizeof(struct deflate_icf);
+
+       state->block_end += matches_next - matches_start;
+       if (matches_next > matches_end && matches_start < matches_end) {
+               stream->next_in += matches_next - matches_end;
+               stream->avail_in -= matches_next - matches_end;
+               stream->total_in += matches_next - matches_end;
+       }
+
+       return matches_next;
+
+}
+
+/*
+*************************************************************
+ * Compression functions combining different methods
+ ************************************************************
+*/
+static inline void icf_body_next_state(struct isal_zstream *stream)
+{
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       struct isal_zstate *state = &stream->internal_state;
+
+       if (level_buf->icf_buf_avail_out <= 0)
+               state->state = ZSTATE_CREATE_HDR;
+
+       else if (stream->avail_in <= ISAL_LOOK_AHEAD
+                && (stream->end_of_stream || stream->flush != NO_FLUSH))
+               state->state = ZSTATE_FLUSH_READ_BUFFER;
+}
+
+void icf_body_hash1_fillgreedy_lazy(struct isal_zstream *stream)
+{
+       struct deflate_icf *matches_icf, *matches_next_icf, *matches_end_icf;
+       struct deflate_icf *matches_icf_lookup;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint32_t input_size, processed;
+
+       matches_icf = level_buf->hash_map.matches;
+       matches_icf_lookup = matches_icf;
+       matches_next_icf = level_buf->hash_map.matches_next;
+       matches_end_icf = level_buf->hash_map.matches_end;
+
+       matches_next_icf = compress_icf_map_g(stream, matches_next_icf, matches_end_icf);
+
+       while (matches_next_icf >= matches_end_icf) {
+               input_size = MATCH_BUF_SIZE;
+               input_size = (input_size > stream->avail_in) ? stream->avail_in : input_size;
+
+               if (input_size <= ISAL_LOOK_AHEAD)
+                       break;
+
+               processed = gen_icf_map_h1_base(stream, matches_icf_lookup, input_size);
+
+               set_long_icf_fg(stream->next_in, processed, input_size, matches_icf_lookup);
+
+               stream->next_in += processed;
+               stream->avail_in -= processed;
+               stream->total_in += processed;
+
+               matches_end_icf = matches_icf + processed;
+               matches_next_icf = compress_icf_map_g(stream, matches_icf, matches_end_icf);
+       }
+
+       level_buf->hash_map.matches_next = matches_next_icf;
+       level_buf->hash_map.matches_end = matches_end_icf;
+
+       icf_body_next_state(stream);
+}
+
+void icf_body_lazyhash1_fillgreedy_greedy(struct isal_zstream *stream)
+{
+       struct deflate_icf *matches_icf, *matches_next_icf, *matches_end_icf;
+       struct deflate_icf *matches_icf_lookup;
+       struct level_buf *level_buf = (struct level_buf *)stream->level_buf;
+       uint32_t input_size, processed;
+
+       matches_icf = level_buf->hash_map.matches;
+       matches_icf_lookup = matches_icf;
+       matches_next_icf = level_buf->hash_map.matches_next;
+       matches_end_icf = level_buf->hash_map.matches_end;
+
+       matches_next_icf = compress_icf_map_g(stream, matches_next_icf, matches_end_icf);
+
+       while (matches_next_icf >= matches_end_icf) {
+               input_size = MATCH_BUF_SIZE;
+               input_size = (input_size > stream->avail_in) ? stream->avail_in : input_size;
+
+               if (input_size <= ISAL_LOOK_AHEAD)
+                       break;
+
+               processed = gen_icf_map_lh1(stream, matches_icf_lookup, input_size);
+
+               set_long_icf_fg(stream->next_in, processed, input_size, matches_icf_lookup);
+
+               stream->next_in += processed;
+               stream->avail_in -= processed;
+               stream->total_in += processed;
+
+               matches_end_icf = matches_icf + processed;
+               matches_next_icf = compress_icf_map_g(stream, matches_icf, matches_end_icf);
+       }
+
+       level_buf->hash_map.matches_next = matches_next_icf;
+       level_buf->hash_map.matches_end = matches_end_icf;
+
+       icf_body_next_state(stream);
+}
+
+void isal_deflate_icf_body(struct isal_zstream *stream)
+{
+       switch (stream->level) {
+       case 3:
+               isal_deflate_icf_body_lvl3(stream);
+               break;
+       case 2:
+               isal_deflate_icf_body_lvl2(stream);
+               break;
+       case 1:
+       default:
+               isal_deflate_icf_body_lvl1(stream);
+       }
+}
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body_01.asm b/ceph/src/isa-l/igzip/igzip_icf_body_01.asm
deleted file mode 100644 (file)
index 477919a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%define ARCH 01
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 2
-%endif
-
-%include "igzip_icf_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body_02.asm b/ceph/src/isa-l/igzip/igzip_icf_body_02.asm
deleted file mode 100644 (file)
index 5f8ab95..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-%define ARCH 02
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 2
-%endif
-
-%include "igzip_icf_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body_04.asm b/ceph/src/isa-l/igzip/igzip_icf_body_04.asm
deleted file mode 100644 (file)
index dda99d9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-%define ARCH 04
-%define USE_HSWNI
-
-%ifndef COMPARE_TYPE
-%define COMPARE_TYPE 3
-%endif
-
-%include "igzip_icf_body.asm"
diff --git a/ceph/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm b/ceph/src/isa-l/igzip/igzip_icf_body_h1_gr_bt.asm
new file mode 100644 (file)
index 0000000..c059178
--- /dev/null
@@ -0,0 +1,901 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+%include "options.asm"
+
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "bitbuf2.asm"
+%include "huffman.asm"
+%include "igzip_compare_types.asm"
+%include "reg_sizes.asm"
+
+%include "stdmac.asm"
+%ifdef DEBUG
+%macro MARK 1
+global %1
+%1:
+%endm
+%else
+%macro MARK 1
+%endm
+%endif
+
+%define LARGE_MATCH_HASH_REP 1         ; Hash 4 * LARGE_MATCH_HASH_REP elements
+%define LARGE_MATCH_MIN 264    ; Minimum match size to enter large match emit loop
+%define MIN_INBUF_PADDING 16
+%define MAX_EMIT_SIZE 258 * 16
+
+%define SKIP_SIZE_BASE (2 << 10)      ; No match length before starting skipping
+%define SKIP_BASE 32                 ; Initial skip size
+%define SKIP_START 512                ; Start increasing skip size once level is beyond SKIP_START
+%define SKIP_RATE 2                  ; Rate skip size increases after SKIP_START
+%define MAX_SKIP_SIZE 128             ; Maximum skip size
+%define MAX_SKIP_LEVEL (((MAX_SKIP_SIZE - SKIP_BASE) / SKIP_RATE) + SKIP_START) ; Maximum skip level
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+%define        file_start      rdi
+%define file_length    r15
+%define level_buf      r14
+%define        f_i             r10
+%define        m_out_buf       r11
+
+%define        curr_data       rax
+
+%define        tmp2            rcx
+%define skip_count     rcx
+
+%define        dist            rbx
+%define dist_code2     rbx
+%define        lit_code2       rbx
+%define hmask2         rbx
+
+%define        dist2           r12
+%define dist_code      r12
+%define hmask3         r12
+
+%define        tmp1            rsi
+%define        lit_code        rsi
+
+%define        curr_data2      r8
+%define        len2            r8
+%define        tmp4            r8
+%define hmask1         r8
+%define len_code2      r8
+
+%define        len             rdx
+%define len_code       rdx
+%define hash3          rdx
+
+%define        stream          r13
+%define        tmp3            r13
+
+%define hash           rbp
+%define        hash2           r9
+
+;; GPR r8 & r15 can be used
+
+%define xtmp0          xmm0    ; tmp
+%define xtmp1          xmm1    ; tmp
+%define xlow_lit_shuf  xmm2
+%define xup_lit_shuf   xmm3
+%define        xdata           xmm4
+%define xlit           xmm5
+
+%define ytmp0          ymm0    ; tmp
+%define ytmp1          ymm1    ; tmp
+
+%define hash_table level_buf + _hash8k_hash_table
+%define lit_len_hist level_buf + _hist_lit_len
+%define dist_hist level_buf + _hist_dist
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+m_out_end           equ  0      ; local variable (8 bytes)
+m_out_start         equ         8
+dist_mask_offset    equ 16
+hash_mask_offset    equ 24
+f_end_i_mem_offset  equ 32
+stream_offset       equ 40
+inbuf_slop_offset   equ 48
+skip_match_offset   equ 56
+skip_level_offset    equ 64
+gpr_save_mem_offset equ 80       ; gpr save area (8*8 bytes)
+xmm_save_mem_offset equ gpr_save_mem_offset + 8*8 ; xmm save area (4*16 bytes) (16 byte aligned)
+stack_size          equ 11*8 + 8*8 + 4*16
+
+;;; 8 because stack address is odd multiple of 8 after a function call and
+;;; we want it aligned to 16 bytes
+
+;; Defines to generate functions for different architecture
+%xdefine ARCH 01
+%xdefine ARCH1 02
+%xdefine ARCH2 04
+
+%ifndef COMPARE_TYPE
+%xdefine COMPARE_TYPE_NOT_DEF
+%xdefine COMPARE_TYPE 1
+%xdefine COMPARE_TYPE1 2
+%xdefine COMPARE_TYPE2 3
+%endif
+
+;; Defines to generate functions for different levels
+%xdefine METHOD hash_hist
+
+%rep 3
+%if ARCH == 04
+%define USE_HSWNI
+%endif
+
+; void isal_deflate_icf_body <hashsize> <arch> ( isal_zstream *stream )
+; we make 6 different versions of this function
+; arg 1: rcx: addr of stream
+global isal_deflate_icf_body_ %+ METHOD %+ _ %+ ARCH
+isal_deflate_icf_body_ %+ METHOD %+ _ %+ ARCH %+ :
+%ifidn __OUTPUT_FORMAT__, elf64
+       mov     rcx, rdi
+%endif
+
+       ;; do nothing if (avail_in == 0)
+       cmp     dword [rcx + _avail_in], 0
+       jne     .skip1
+
+       ;; Set stream's next state
+       mov     rdx, ZSTATE_CREATE_HDR
+       mov     eax, [rcx + _internal_state_state]
+       cmp     word [rcx + _end_of_stream], 0
+       cmovne  rax, rdx
+       cmp     word [rcx + _flush], _NO_FLUSH
+       cmovne  rax, rdx
+       mov     dword [rcx + _internal_state_state], eax
+       ret
+.skip1:
+
+%ifdef ALIGN_STACK
+       push    rbp
+       mov     rbp, rsp
+       sub     rsp, stack_size
+       and     rsp, ~15
+%else
+       sub     rsp, stack_size
+%endif
+
+       mov [rsp + gpr_save_mem_offset + 0*8], rbx
+       mov [rsp + gpr_save_mem_offset + 1*8], rsi
+       mov [rsp + gpr_save_mem_offset + 2*8], rdi
+       mov [rsp + gpr_save_mem_offset + 3*8], rbp
+       mov [rsp + gpr_save_mem_offset + 4*8], r12
+       mov [rsp + gpr_save_mem_offset + 5*8], r13
+       mov [rsp + gpr_save_mem_offset + 6*8], r14
+       mov [rsp + gpr_save_mem_offset + 7*8], r15
+
+       mov     stream, rcx
+       mov     [rsp + stream_offset], stream
+
+       mov     byte [stream + _internal_state_has_eob], 0
+
+       mov     tmp1 %+ d, dword[stream + _internal_state_dist_mask]
+       mov     [rsp + dist_mask_offset], tmp1
+       mov     tmp1 %+ d, dword[stream + _internal_state_hash_mask]
+       mov     [rsp + hash_mask_offset], tmp1
+
+       ; state->bitbuf.set_buf(stream->next_out, stream->avail_out);
+       mov     level_buf, [stream + _level_buf]
+       mov     m_out_buf, [level_buf + _icf_buf_next]
+
+       mov     [rsp + m_out_start], m_out_buf
+       mov     tmp1, [level_buf + _icf_buf_avail_out]
+       add     tmp1, m_out_buf
+       sub     tmp1, SLOP
+
+       mov     [rsp + m_out_end], tmp1
+
+       mov     file_start, [stream + _next_in]
+
+       mov     f_i %+ d, dword [stream + _total_in]
+       sub     file_start, f_i
+
+       mov     file_length %+ d, [stream + _avail_in]
+       add     file_length, f_i
+
+       mov     [rsp + skip_match_offset], f_i
+       add     qword [rsp + skip_match_offset], SKIP_SIZE_BASE
+       mov     qword [rsp + skip_level_offset], 0
+
+       PBROADCASTD xlit, dword [min_lit_dist_syms]
+       MOVDQU  xlow_lit_shuf, [low_lit_shuf]
+       MOVDQU  xup_lit_shuf, [up_lit_shuf]
+
+       mov     qword [rsp + inbuf_slop_offset], MIN_INBUF_PADDING
+       cmp     byte [stream + _end_of_stream], 0
+       jnz     .default_inbuf_padding
+       cmp     byte [stream + _flush], 0
+       jnz     .default_inbuf_padding
+       mov     qword [rsp + inbuf_slop_offset], LA
+.default_inbuf_padding:
+
+       ; file_length -= INBUF_PADDING;
+       sub     file_length, [rsp + inbuf_slop_offset]
+       ; if (file_length <= 0) continue;
+       mov     hmask1 %+ d, [rsp + hash_mask_offset]
+
+       cmp     file_length, f_i
+       jle     .input_end
+
+       ; for (f_i = f_start_i; f_i < file_length; f_i++) {
+       MOVDQU  xdata, [file_start + f_i]
+       mov     curr_data, [file_start + f_i]
+       mov     tmp1, curr_data
+
+       compute_hash    hash, curr_data
+
+       shr     tmp1, 8
+       compute_hash    hash2, tmp1
+
+       and     hash, hmask1
+       and     hash2, hmask1
+
+       cmp     byte [stream + _internal_state_has_hist], IGZIP_NO_HIST
+       je      .write_first_byte
+
+       jmp     .loop2
+       align   16
+
+.loop2:
+       mov     tmp3 %+ d, [rsp + dist_mask_offset]
+       mov     hmask1 %+ d, [rsp + hash_mask_offset]
+       ; if (state->bitbuf.is_full()) {
+       cmp     m_out_buf, [rsp + m_out_end]
+       ja      .output_end
+
+       xor     dist, dist
+       xor     dist2, dist2
+
+       lea     tmp1, [file_start + f_i]
+
+       mov     dist %+ w, f_i %+ w
+       dec     dist
+       sub     dist %+ w, word [hash_table + 2 * hash]
+       mov     [hash_table + 2 * hash], f_i %+ w
+
+       inc     f_i
+
+       mov     tmp2, curr_data
+       shr     curr_data, 16
+       compute_hash    hash, curr_data
+       and     hash %+ d, hmask1 %+ d
+
+       mov     dist2 %+ w, f_i %+ w
+       dec     dist2
+       sub     dist2 %+ w, word [hash_table + 2 * hash2]
+       mov     [hash_table + 2 * hash2], f_i %+ w
+
+       ; if ((dist-1) < (D-1)) {
+       and     dist %+ d, tmp3 %+ d
+       neg     dist
+
+       shr     tmp2, 24
+       compute_hash    hash2, tmp2
+       and     hash2 %+ d, hmask1 %+ d
+
+       and     dist2 %+ d, tmp3 %+ d
+       neg     dist2
+
+       ;; Check for long len/dist match (>7) with first literal
+       MOVQ    len, xdata
+       mov     curr_data, len
+       PSRLDQ  xdata, 1
+       xor     len, [tmp1 + dist - 1]
+       jz      .compare_loop
+
+       ;; Check for len/dist match (>7) with second literal
+       MOVQ    len2, xdata
+       xor     len2, [tmp1 + dist2]
+       jz      .compare_loop2
+
+       movzx   lit_code, curr_data %+ b
+       shr     curr_data, 8
+
+       ;; Check for len/dist match for first literal
+       test    len %+ d, 0xFFFFFFFF
+       jz      .len_dist_huffman_pre
+
+       PSRLDQ  xdata, 1
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code]
+       movzx   lit_code2, curr_data %+ b
+       ;; Check for len/dist match for second literal
+       test    len2 %+ d, 0xFFFFFFFF
+       jnz     .write_lit_bits
+
+.len_dist_lit_huffman_pre:
+       bsf     len2, len2
+       shr     len2, 3
+
+.len_dist_lit_huffman:
+       or      lit_code, LIT
+       mov     dword [m_out_buf], lit_code %+ d
+
+       neg     dist2
+
+       get_dist_icf_code       dist2, dist_code2, tmp1
+
+       mov hmask3 %+ d, dword [rsp + hash_mask_offset]
+
+       ;; Setup for updating hash
+       lea     tmp3, [f_i + 1] ; tmp3 <= k
+
+       mov     tmp2, f_i
+       add     file_start, f_i
+       add     f_i, len2
+       cmp     f_i, file_length
+       jg      .len_dist_lit_huffman_finish
+
+       lea     tmp1, [f_i + SKIP_SIZE_BASE]
+       mov     qword [rsp + skip_match_offset], tmp1
+       sub     qword [rsp + skip_level_offset], len2
+
+       MOVDQU  xdata, [file_start + len2]
+       mov     tmp1, [file_start + len2]
+       sub     file_start, tmp2
+
+       shr     curr_data, 24
+       compute_hash    hash3, curr_data
+       and     hash3 %+ d, hmask3 %+ d
+
+       mov     curr_data, tmp1
+       shr     tmp1, 8
+
+       mov     [hash_table + 2 * hash], tmp3 %+ w
+
+       compute_hash    hash, curr_data
+
+       add     tmp3,1
+       mov     [hash_table + 2 * hash2], tmp3 %+ w
+
+       compute_hash    hash2, tmp1
+
+       add     tmp3, 1
+       mov     [hash_table + 2 * hash3], tmp3 %+ w
+
+       add     dist_code2, 254
+       add     dist_code2, len2
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*(len2 + 254)]
+
+       mov     dword [m_out_buf + 4], dist_code2 %+ d
+       add     m_out_buf, 8
+
+       shr     dist_code2, DIST_OFFSET
+       and     dist_code2, 0x1F
+       inc     dword [dist_hist + HIST_ELEM_SIZE*dist_code2]
+
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
+       and     hash %+ d, hmask3 %+ d
+       and     hash2 %+ d, hmask3 %+ d
+
+       ; continue
+       jmp     .loop2
+
+.len_dist_lit_huffman_finish:
+       sub     file_start, tmp2
+
+       mov     [hash_table + 2 * hash], tmp3 %+ w
+       add     tmp3,1
+       mov     [hash_table + 2 * hash2], tmp3 %+ w
+
+       add     dist_code2, 254
+       add     dist_code2, len2
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*(len2 + 254)]
+
+       mov     dword [m_out_buf + 4], dist_code2 %+ d
+       add     m_out_buf, 8
+
+       shr     dist_code2, DIST_OFFSET
+       and     dist_code2, 0x1F
+       inc     dword [dist_hist + HIST_ELEM_SIZE*dist_code2]
+
+       jmp     .input_end
+
+.len_dist_huffman_pre:
+       bsf     len, len
+       shr     len, 3
+
+.len_dist_huffman:
+       dec     f_i
+       ;; Setup for updateing hash
+       lea     tmp3, [f_i + 2] ; tmp3 <= k
+
+       neg     dist
+
+       ; get_dist_code(dist, &code2, &code_len2);
+       get_dist_icf_code   dist, dist_code, tmp1
+
+.len_dist_huffman_skip:
+
+       mov     hmask2 %+ d, [rsp + hash_mask_offset]
+
+       mov     tmp1, f_i
+       add     file_start, f_i
+
+       add     f_i, len
+       cmp     f_i, file_length
+       jg      .len_dist_huffman_finish
+
+       lea     tmp2, [f_i + SKIP_SIZE_BASE]
+       mov     qword [rsp + skip_match_offset], tmp2
+       sub     qword [rsp + skip_level_offset], len
+
+       MOVDQU  xdata, [file_start + len]
+       mov     curr_data2, [file_start + len]
+       mov     curr_data, curr_data2
+       sub     file_start, tmp1
+       ; get_len_code(len, &code, &code_len);
+       lea     len_code, [len + 254]
+       or      dist_code, len_code
+
+       mov     [hash_table + 2 * hash], tmp3 %+ w
+       add     tmp3,1
+       mov     [hash_table + 2 * hash2], tmp3 %+ w
+
+       compute_hash    hash, curr_data
+
+       shr     curr_data2, 8
+       compute_hash    hash2, curr_data2
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*len_code]
+
+       mov     dword [m_out_buf], dist_code %+ d
+       add     m_out_buf, 4
+
+       shr     dist_code, DIST_OFFSET
+       and     dist_code, 0x1F
+       inc     dword [dist_hist + HIST_ELEM_SIZE*dist_code]
+
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
+       and     hash %+ d, hmask2 %+ d
+       and     hash2 %+ d, hmask2 %+ d
+
+       ; continue
+       jmp     .loop2
+
+.len_dist_huffman_finish:
+       sub     file_start, tmp1
+
+       ; get_len_code(len, &code, &code_len);
+       lea     len_code, [len + 254]
+       or      dist_code, len_code
+
+       mov     [hash_table + 2 * hash], tmp3 %+ w
+       add     tmp3,1
+       mov     [hash_table + 2 * hash2], tmp3 %+ w
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*len_code]
+
+       mov     dword [m_out_buf], dist_code %+ d
+       add     m_out_buf, 4
+
+       shr     dist_code, DIST_OFFSET
+       and     dist_code, 0x1F
+       inc     dword [dist_hist + HIST_ELEM_SIZE*dist_code]
+
+       jmp     .input_end
+
+.write_lit_bits:
+       MOVQ    curr_data, xdata
+
+       add     f_i, 1
+       cmp     f_i, file_length
+       jg      .write_lit_bits_finish
+
+       MOVDQU  xdata, [file_start + f_i]
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2]
+
+       shl     lit_code2, DIST_OFFSET
+       lea     lit_code, [lit_code + lit_code2 + (31 << DIST_OFFSET)]
+
+       mov     dword [m_out_buf], lit_code %+ d
+       add     m_out_buf, 4
+
+       cmp     f_i, [rsp + skip_match_offset]
+       jle     .loop2
+
+       xor     tmp3, tmp3
+       mov     rcx, [rsp + skip_level_offset]
+       add     rcx, 1
+       cmovl   rcx, tmp3
+       mov     tmp1, MAX_SKIP_LEVEL
+       cmp     rcx, MAX_SKIP_LEVEL
+       cmovg   rcx, tmp1
+
+       mov     tmp1, SKIP_SIZE_BASE
+       shr     tmp1, cl
+
+%if MAX_SKIP_LEVEL > 63
+       cmp     rcx, 63
+       cmovg   tmp1, tmp3
+%endif
+       mov     [rsp + skip_match_offset], tmp1
+       mov     [rsp + skip_level_offset], rcx
+
+       sub     rcx, SKIP_START
+       cmovl   rcx, tmp3
+
+       lea     skip_count, [SKIP_RATE * rcx + SKIP_BASE]
+       and     skip_count, -SKIP_BASE
+
+       mov     tmp1, [rsp + m_out_end]
+       lea     tmp1, [tmp1 + 4]
+       sub     tmp1, m_out_buf
+       shr     tmp1, 1
+       cmp     tmp1, skip_count
+       jl      .skip_forward_short
+
+       mov     tmp1, [rsp + inbuf_slop_offset]
+       add     tmp1, file_length
+       sub     tmp1, f_i
+       cmp     tmp1, skip_count
+       jl      .skip_forward_short
+
+.skip_forward_long:
+       MOVQ    xdata, [file_start + f_i]
+
+       movzx   lit_code, byte [file_start + f_i]
+       movzx   lit_code2, byte [file_start + f_i + 1]
+
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code], 1
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2], 1
+
+       movzx   lit_code, byte [file_start + f_i + 2]
+       movzx   lit_code2, byte [file_start + f_i + 3]
+
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code], 1
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2], 1
+
+       movzx   lit_code, byte [file_start + f_i + 4]
+       movzx   lit_code2, byte [file_start + f_i + 5]
+
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code], 1
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2], 1
+
+       movzx   lit_code, byte [file_start + f_i + 6]
+       movzx   lit_code2, byte [file_start + f_i + 7]
+
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code], 1
+       add     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2], 1
+
+       PSHUFB  xtmp0, xdata, xlow_lit_shuf
+       PSHUFB  xtmp1, xdata, xup_lit_shuf
+       PSLLD   xtmp1, xtmp1, DIST_OFFSET
+       POR     xtmp0, xtmp0, xtmp1
+       PADDD   xtmp0, xtmp0, xlit
+       MOVDQU  [m_out_buf], xtmp0
+
+       add     m_out_buf, 16
+       add     f_i, 8
+
+       sub     skip_count, 8
+       jg      .skip_forward_long
+
+       cmp     file_length, f_i
+       jle     .input_end
+
+       mov     curr_data, [file_start + f_i]
+       MOVDQU  xdata, [file_start + f_i]
+       add     [rsp + skip_match_offset], f_i
+
+       jmp     .loop2
+
+.skip_forward_short:
+       movzx   lit_code, byte [file_start + f_i]
+       movzx   lit_code2, byte [file_start + f_i + 1]
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code]
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2]
+
+       shl     lit_code2, DIST_OFFSET
+       lea     lit_code, [lit_code + lit_code2 + (31 << DIST_OFFSET)]
+
+       mov     dword [m_out_buf], lit_code %+ d
+       add     m_out_buf, 4
+       add     f_i, 2
+
+       cmp     m_out_buf, [rsp + m_out_end]
+       ja      .output_end
+
+       cmp     file_length, f_i
+       jle     .input_end
+
+       jmp     .skip_forward_short
+
+.write_lit_bits_finish:
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code2]
+
+       shl     lit_code2, DIST_OFFSET
+       lea     lit_code, [lit_code + lit_code2 + (31 << DIST_OFFSET)]
+
+       mov     dword [m_out_buf], lit_code %+ d
+       add     m_out_buf, 4
+
+.input_end:
+       mov     stream, [rsp + stream_offset]
+       mov     tmp1, ZSTATE_FLUSH_READ_BUFFER
+       mov     tmp2, ZSTATE_BODY
+       cmp     word [stream + _end_of_stream], 0
+       cmovne  tmp2, tmp1
+       cmp     word [stream + _flush], _NO_FLUSH
+
+       cmovne  tmp2, tmp1
+       mov     dword [stream + _internal_state_state], tmp2 %+ d
+       jmp     .end
+
+.output_end:
+       mov     stream, [rsp + stream_offset]
+       mov     dword [stream + _internal_state_state], ZSTATE_CREATE_HDR
+
+.end:
+       ;; update input buffer
+       add     file_length, [rsp + inbuf_slop_offset]
+       mov     [stream + _total_in], f_i %+ d
+       mov     [stream + _internal_state_block_end], f_i %+ d
+       add     file_start, f_i
+       mov     [stream + _next_in], file_start
+       sub     file_length, f_i
+       mov     [stream + _avail_in], file_length %+ d
+
+       ;; update output buffer
+       mov     [level_buf + _icf_buf_next], m_out_buf
+       sub     m_out_buf, [rsp + m_out_start]
+       sub     [level_buf + _icf_buf_avail_out], m_out_buf %+ d
+
+       mov rbx, [rsp + gpr_save_mem_offset + 0*8]
+       mov rsi, [rsp + gpr_save_mem_offset + 1*8]
+       mov rdi, [rsp + gpr_save_mem_offset + 2*8]
+       mov rbp, [rsp + gpr_save_mem_offset + 3*8]
+       mov r12, [rsp + gpr_save_mem_offset + 4*8]
+       mov r13, [rsp + gpr_save_mem_offset + 5*8]
+       mov r14, [rsp + gpr_save_mem_offset + 6*8]
+       mov r15, [rsp + gpr_save_mem_offset + 7*8]
+
+%ifndef ALIGN_STACK
+       add     rsp, stack_size
+%else
+       mov     rsp, rbp
+       pop     rbp
+%endif
+       ret
+
+align 16
+.compare_loop:
+       lea     tmp2, [tmp1 + dist - 1]
+
+       mov     len2, file_length
+       sub     len2, f_i
+       add     len2, [rsp + inbuf_slop_offset]
+       add     len2, 1
+       mov     tmp3,  MAX_EMIT_SIZE
+       cmp     len2, tmp3
+       cmovg   len2, tmp3
+
+       mov     len, 8
+       compare_large   tmp1, tmp2, len, len2, tmp3, ytmp0, ytmp1
+
+       cmp     len, 258
+       jle     .len_dist_huffman
+       cmp     len, LARGE_MATCH_MIN
+       jge     .do_emit
+       mov     len, 258
+       jmp     .len_dist_huffman
+
+align 16
+.compare_loop2:
+       lea     tmp2, [tmp1 + dist2]
+       add     tmp1, 1
+
+       mov     len, file_length
+       sub     len, f_i
+       add     len, [rsp + inbuf_slop_offset]
+       mov     tmp3, MAX_EMIT_SIZE
+       cmp     len, tmp3
+       cmovg   len, tmp3
+
+       mov     len2, 8
+       compare_large   tmp1, tmp2, len2, len, tmp3, ytmp0, ytmp1
+
+       movzx   lit_code, curr_data %+ b
+       shr     curr_data, 8
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*lit_code]
+       cmp     len2, 258
+       jle     .len_dist_lit_huffman
+       cmp     len2, LARGE_MATCH_MIN
+       jge     .do_emit2
+       mov     len2, 258
+       jmp     .len_dist_lit_huffman
+
+.do_emit2:
+       or      lit_code, LIT
+       mov     dword [m_out_buf], lit_code %+ d
+       add     m_out_buf, 4
+
+       inc     f_i
+       mov     dist, dist2
+       mov     len, len2
+
+.do_emit:
+       neg     dist
+       get_dist_icf_code   dist, dist_code, tmp1
+
+       mov     len_code2, 258 + 254
+       or      len_code2, dist_code
+       mov     tmp1, dist_code
+       shr     tmp1, DIST_OFFSET
+       and     tmp1, 0x1F
+       lea     tmp3, [f_i + 1]
+       dec     f_i
+
+       mov     [hash_table + 2 * hash], tmp3 %+ w
+       add     tmp3,1
+       mov     [hash_table + 2 * hash2], tmp3 %+ w
+.emit:
+       sub     len, 258
+       add     f_i, 258
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*(258 + 254)]
+       inc     dword [dist_hist + HIST_ELEM_SIZE*tmp1]
+       mov     dword [m_out_buf], len_code2 %+ d
+       add     m_out_buf, 4
+
+       cmp     m_out_buf, [rsp + m_out_end]
+       ja      .output_end
+
+       cmp     len, LARGE_MATCH_MIN
+       jge     .emit
+
+       mov     len2, 258
+       cmp     len, len2
+       cmovg   len, len2
+
+               ; get_len_code(len, &code, &code_len);
+       add     f_i, len
+       lea     len_code, [len + 254]
+       or      dist_code, len_code
+
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*len_code]
+       inc     dword [dist_hist + HIST_ELEM_SIZE*tmp1]
+
+       mov     dword [m_out_buf], dist_code %+ d
+       add     m_out_buf, 4
+
+       cmp     file_length, f_i
+       jle     .input_end
+
+       lea     tmp2, [f_i - 4 * LARGE_MATCH_HASH_REP]
+       mov     hmask2 %+ d, [rsp + hash_mask_offset]
+
+%rep LARGE_MATCH_HASH_REP
+       mov     curr_data %+ d, dword [file_start + tmp2]
+       mov     curr_data2 %+ d, dword [file_start + tmp2 + 1]
+       mov     tmp3 %+ d, dword [file_start + tmp2 + 2]
+       mov     tmp1 %+ d, dword [file_start + tmp2 + 3]
+
+       compute_hash    hash, curr_data
+       compute_hash    hash2, curr_data2
+       compute_hash    hash3, tmp3
+       compute_hash    hmask3, tmp1
+
+       and     hash %+ d, hmask2 %+ d
+       and     hash2 %+ d, hmask2 %+ d
+       and     hash3 %+ d, hmask2 %+ d
+       and     hmask3 %+ d, hmask2 %+ d
+
+       mov     [hash_table + 2 * hash], tmp2 %+ w
+       add     tmp2, 1
+       mov     [hash_table + 2 * hash2], tmp2 %+ w
+       add     tmp2, 1
+       mov     [hash_table + 2 * hash3], tmp2 %+ w
+       add     tmp2, 1
+       mov     [hash_table + 2 * hmask3], tmp2 %+ w
+%if (LARGE_MATCH_HASH_REP > 1)
+       add     tmp2, 1
+%endif
+%endrep
+       ; for (f_i = f_start_i; f_i < file_length; f_i++) {
+       MOVDQU  xdata, [file_start + f_i]
+       mov     curr_data, [file_start + f_i]
+       mov     tmp1, curr_data
+
+       compute_hash    hash, curr_data
+
+       shr     tmp1, 8
+       compute_hash    hash2, tmp1
+
+       and     hash, hmask2
+       and     hash2, hmask2
+
+       jmp     .loop2
+
+.write_first_byte:
+       mov     hmask1 %+ d, [rsp + hash_mask_offset]
+       cmp     m_out_buf, [rsp + m_out_end]
+       ja      .output_end
+
+       mov     byte [stream + _internal_state_has_hist], IGZIP_HIST
+
+       mov     [hash_table + 2 * hash], f_i %+ w
+
+       mov     hash, hash2
+       shr     tmp2, 16
+       compute_hash    hash2, tmp2
+
+       and     curr_data, 0xff
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*curr_data]
+       or      curr_data, LIT
+
+       mov     dword [m_out_buf], curr_data %+ d
+       add     m_out_buf, 4
+
+       MOVDQU  xdata, [file_start + f_i + 1]
+       add     f_i, 1
+       mov     curr_data, [file_start + f_i]
+       and     hash %+ d, hmask1 %+ d
+       and     hash2 %+ d, hmask1 %+ d
+
+       cmp     f_i, file_length
+       jl      .loop2
+       jmp     .input_end
+
+%ifdef USE_HSWNI
+%undef USE_HSWNI
+%endif
+
+;; Shift defines over in order to iterate over all versions
+%undef ARCH
+%xdefine ARCH ARCH1
+%undef ARCH1
+%xdefine ARCH1 ARCH2
+
+%ifdef COMPARE_TYPE_NOT_DEF
+%undef COMPARE_TYPE
+%xdefine COMPARE_TYPE COMPARE_TYPE1
+%undef COMPARE_TYPE1
+%xdefine COMPARE_TYPE1 COMPARE_TYPE2
+%endif
+%endrep
+min_lit_dist_syms:
+       dd LIT + (1 << DIST_OFFSET)
+
+low_lit_shuf:
+       db 0x00, 0xff, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff
+       db 0x04, 0xff, 0xff, 0xff, 0x06, 0xff, 0xff, 0xff
+up_lit_shuf:
+       db 0x01, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff
+       db 0x05, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff
index 2d65a614b59b1b4ad756363183563131c7ce6ed5..ccff445a0743a3dffcc037573f9f4c4bf0a26594 100644 (file)
 %define f_i            rdi
 
 %define code_len2      rbp
+%define hmask1         rbp
 
 %define m_out_buf      r8
 
-%define dist           r10
+%define level_buf      r9
+
+%define dist           r10
+%define hmask2         r10
 
 %define code2          r12
 %define f_end_i                r12
 
 %define hufftables     r15
 
+%define hash_table level_buf + _hash8k_hash_table
+%define lit_len_hist level_buf + _hist_lit_len
+%define dist_hist level_buf + _hist_dist
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 f_end_i_mem_offset     equ 0    ; local variable (8 bytes)
 m_out_end              equ 8
 m_out_start            equ 16
-stack_size             equ 32
+dist_mask_offset       equ 24
+hash_mask_offset       equ 32
+stack_size             equ 5*8
+
+%xdefine METHOD hash_hist
+
 ; void isal_deflate_icf_finish ( isal_zstream *stream )
 ; arg 1: rcx: addr of stream
-global isal_deflate_icf_finish_01
-isal_deflate_icf_finish_01:
+global isal_deflate_icf_finish_ %+ METHOD %+ _01
+isal_deflate_icf_finish_ %+ METHOD %+ _01:
        PUSH_ALL        rbx, rsi, rdi, rbp, r12, r13, r14, r15
        sub     rsp, stack_size
 
@@ -95,13 +108,17 @@ isal_deflate_icf_finish_01:
 %endif
 
        ; state->bitbuf.set_buf(stream->next_out, stream->avail_out);
-       mov     tmp1, [stream + _level_buf]
-       mov     m_out_buf, [tmp1 + _icf_buf_next]
+       mov     tmp2 %+ d, dword [stream + _internal_state_dist_mask]
+       mov     tmp3 %+ d, dword [stream + _internal_state_hash_mask]
+       mov     level_buf, [stream + _level_buf]
+       mov     m_out_buf, [level_buf + _icf_buf_next]
        mov     [rsp + m_out_start], m_out_buf
-       mov     tmp1, [tmp1 + _icf_buf_avail_out]
+       mov     tmp1, [level_buf + _icf_buf_avail_out]
        add     tmp1, m_out_buf
        sub     tmp1, 4
 
+       mov     [rsp + dist_mask_offset], tmp2
+       mov     [rsp + hash_mask_offset], tmp3
        mov     [rsp + m_out_end], tmp1
 
        mov     hufftables, [stream + _hufftables]
@@ -118,39 +135,42 @@ isal_deflate_icf_finish_01:
        mov     [rsp + f_end_i_mem_offset], f_end_i
        ; for (f_i = f_start_i; f_i < f_end_i; f_i++) {
        cmp     f_i, f_end_i
-       jge     end_loop_2
+       jge     .end_loop_2
 
        mov     curr_data %+ d, [file_start + f_i]
 
-       cmp     dword [stream + _internal_state_has_hist], 0
-       jne     skip_write_first_byte
+       cmp     byte [stream + _internal_state_has_hist], IGZIP_NO_HIST
+       jne     .skip_write_first_byte
 
        cmp     m_out_buf, [rsp + m_out_end]
-       ja      end_loop_2
+       ja      .end_loop_2
 
+       mov     hmask1 %+ d, [rsp + hash_mask_offset]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
-       mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
-       mov     dword [stream + _internal_state_has_hist], 1
-       jmp     encode_literal
+       and     hash %+ d, hmask1 %+ d
+       mov     [hash_table + 2 * hash], f_i %+ w
+       mov     byte [stream + _internal_state_has_hist], IGZIP_HIST
+       jmp     .encode_literal
 
-skip_write_first_byte:
+.skip_write_first_byte:
 
-loop2:
+.loop2:
+       mov     tmp3 %+ d, [rsp + dist_mask_offset]
+       mov     hmask1 %+ d, [rsp + hash_mask_offset]
        ; if (state->bitbuf.is_full()) {
        cmp     m_out_buf, [rsp + m_out_end]
-       ja      end_loop_2
+       ja      .end_loop_2
 
-       ; hash = compute_hash(state->file_start + f_i) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + f_i) & hash_mask;
        mov     curr_data %+ d, [file_start + f_i]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask1 %+ d
 
        ; f_index = state->head[hash];
-       movzx   f_index %+ d, word [stream + _internal_state_head + 2 * hash]
+       movzx   f_index %+ d, word [hash_table + 2 * hash]
 
        ; state->head[hash] = (uint16_t) f_i;
-       mov     [stream + _internal_state_head + 2 * hash], f_i %+ w
+       mov     [hash_table + 2 * hash], f_i %+ w
 
        ; dist = f_i - f_index; // mod 64k
        mov     dist %+ d, f_i %+ d
@@ -160,8 +180,8 @@ loop2:
        ; if ((dist-1) <= (D-1)) {
        mov     tmp1 %+ d, dist %+ d
        sub     tmp1 %+ d, 1
-       cmp     tmp1 %+ d, (D-1)
-       jae     encode_literal
+       cmp     tmp1 %+ d, tmp3 %+ d
+       jae     .encode_literal
 
        ; len = f_end_i - f_i;
        mov     tmp4, [rsp + f_end_i_mem_offset]
@@ -181,7 +201,7 @@ loop2:
 
        ; if (len >= SHORTEST_MATCH) {
        cmp     len, SHORTEST_MATCH
-       jb      encode_literal
+       jb      .encode_literal
 
        ;; encode as dist/len
 
@@ -192,103 +212,106 @@ loop2:
        ;; get_len_code
        lea     code, [len + 254]
 
+       mov     hmask2 %+ d, [rsp + hash_mask_offset]
+
        or      code2, code
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*code]
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*code]
 
        ; for (k = f_i+1, f_i += len-1; k <= f_i; k++) {
        lea     tmp3, [f_i + 1] ; tmp3 <= k
        add     f_i, len
        cmp     f_i, [rsp + f_end_i_mem_offset]
-       jae     skip_hash_update
+       jae     .skip_hash_update
 
        ; only update hash twice
 
-       ; hash = compute_hash(state->file_start + k) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + k) & hash_mask;
        mov     tmp6 %+ d, dword [file_start + tmp3]
        compute_hash    hash, tmp6
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask2 %+ d
        ; state->head[hash] = k;
-       mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
+       mov     [hash_table + 2 * hash], tmp3 %+ w
 
        add     tmp3, 1
 
-       ; hash = compute_hash(state->file_start + k) & HASH_MASK;
+       ; hash = compute_hash(state->file_start + k) & hash_mask;
        mov     tmp6 %+ d, dword [file_start + tmp3]
        compute_hash    hash, tmp6
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, hmask2 %+ d
        ; state->head[hash] = k;
-       mov     [stream + _internal_state_head + 2 * hash], tmp3 %+ w
+       mov     [hash_table + 2 * hash], tmp3 %+ w
 
-skip_hash_update:
+.skip_hash_update:
        write_dword     code2, m_out_buf
        shr     code2, DIST_OFFSET
        and     code2, 0x1F
-       inc     word [stream + _internal_state_hist_dist + HIST_ELEM_SIZE*code2]
+       inc     dword [dist_hist + HIST_ELEM_SIZE*code2]
        ; continue
        cmp     f_i, [rsp + f_end_i_mem_offset]
-       jl      loop2
-       jmp     end_loop_2
+       jl      .loop2
+       jmp     .end_loop_2
 
-encode_literal:
+.encode_literal:
        ; get_lit_code(state->file_start[f_i], &code2, &code_len2);
        movzx   tmp5, byte [file_start + f_i]
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*tmp5]
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*tmp5]
        or      tmp5, LIT
        write_dword     tmp5, m_out_buf
        ; continue
        add     f_i, 1
        cmp     f_i, [rsp + f_end_i_mem_offset]
-       jl      loop2
+       jl      .loop2
 
-end_loop_2:
+.end_loop_2:
        mov     f_end_i, [rsp + f_end_i_mem_offset]
        add     f_end_i, LAST_BYTES_COUNT
        mov     [rsp + f_end_i_mem_offset], f_end_i
        ; if ((f_i >= f_end_i) && ! state->bitbuf.is_full()) {
        cmp     f_i, f_end_i
-       jge     input_end
+       jge     .input_end
 
        xor     tmp5, tmp5
-final_bytes:
+.final_bytes:
        cmp     m_out_buf, [rsp + m_out_end]
-       ja      out_end
+       ja      .out_end
 
        movzx   tmp5, byte [file_start + f_i]
-       inc     word [stream + _internal_state_hist_lit_len + HIST_ELEM_SIZE*tmp5]
+       inc     dword [lit_len_hist + HIST_ELEM_SIZE*tmp5]
        or      tmp5, LIT
        write_dword     tmp5, m_out_buf
 
        inc     f_i
        cmp     f_i, [rsp + f_end_i_mem_offset]
-       jl      final_bytes
+       jl      .final_bytes
 
-input_end:
-       cmp     dword [stream + _end_of_stream], 0
-       jne     out_end
-       cmp     dword [stream + _flush], _NO_FLUSH
-       jne     out_end
-       jmp end
+.input_end:
+       cmp     word [stream + _end_of_stream], 0
+       jne     .out_end
+       cmp     word [stream + _flush], _NO_FLUSH
+       jne     .out_end
+       jmp .end
 
-out_end:
+.out_end:
        mov     dword [stream + _internal_state_state], ZSTATE_CREATE_HDR
-end:
+.end:
        ;; Update input buffer
        mov     f_end_i, [rsp + f_end_i_mem_offset]
        mov     [stream + _total_in], f_i %+ d
+       mov     [stream + _internal_state_block_end], f_i %+ d
+
        add     file_start, f_i
        mov     [stream + _next_in], file_start
        sub     f_end_i, f_i
        mov     [stream + _avail_in], f_end_i %+ d
 
        ;; Update output buffer
-       mov     tmp1, [stream + _level_buf]
-       mov     [tmp1 + _icf_buf_next], m_out_buf
+       mov     [level_buf + _icf_buf_next], m_out_buf
 
        ;    len = state->bitbuf.buffer_used();
        sub     m_out_buf, [rsp + m_out_start]
 
        ;    stream->avail_out -= len;
-       sub     [tmp1 + _icf_buf_avail_out], m_out_buf
+       sub     [level_buf + _icf_buf_avail_out], m_out_buf
 
        add     rsp, stack_size
        POP_ALL
index 40f5e99574c1da07675714dcbab42ee0c0bfb411..775e8f33ef965d739b8ce2686e7c1b19581e9dec 100644 (file)
 
 #include <stdint.h>
 #include "igzip_lib.h"
+#include "crc.h"
 #include "huff_codes.h"
-
-extern int decode_huffman_code_block_stateless(struct inflate_state *);
-extern uint32_t crc32_gzip(uint32_t init_crc, const unsigned char *buf, uint64_t len);
+#include "igzip_checksums.h"
+#include "igzip_wrapper.h"
+#include "unaligned.h"
+
+#ifndef NO_STATIC_INFLATE_H
+#include "static_inflate.h"
+#endif
+
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/endian.h>
+# define bswap_32(x) bswap32(x)
+#elif defined (__APPLE__)
+#include <libkern/OSByteOrder.h>
+# define bswap_32(x) OSSwapInt32(x)
+#elif defined (__GNUC__) && !defined (__MINGW32__)
+# include <byteswap.h>
+#elif defined _WIN64
+# define bswap_32(x) _byteswap_ulong(x)
+#endif
+
+extern int decode_huffman_code_block_stateless(struct inflate_state *, uint8_t * start_out);
+
+#define LARGE_SHORT_SYM_LEN 25
+#define LARGE_SHORT_SYM_MASK ((1 << LARGE_SHORT_SYM_LEN) - 1)
+#define LARGE_LONG_SYM_LEN 10
+#define LARGE_LONG_SYM_MASK ((1 << LARGE_LONG_SYM_LEN) - 1)
+#define LARGE_SHORT_CODE_LEN_OFFSET 28
+#define LARGE_LONG_CODE_LEN_OFFSET 10
+#define LARGE_FLAG_BIT_OFFSET 25
+#define LARGE_FLAG_BIT (1 << LARGE_FLAG_BIT_OFFSET)
+#define LARGE_SYM_COUNT_OFFSET 26
+#define LARGE_SYM_COUNT_LEN 2
+#define LARGE_SYM_COUNT_MASK ((1 << LARGE_SYM_COUNT_LEN) - 1)
+#define LARGE_SHORT_MAX_LEN_OFFSET 26
+
+#define SMALL_SHORT_SYM_LEN 9
+#define SMALL_SHORT_SYM_MASK ((1 << SMALL_SHORT_SYM_LEN) - 1)
+#define SMALL_LONG_SYM_LEN 9
+#define SMALL_LONG_SYM_MASK ((1 << SMALL_LONG_SYM_LEN) - 1)
+#define SMALL_SHORT_CODE_LEN_OFFSET 11
+#define SMALL_LONG_CODE_LEN_OFFSET 10
+#define SMALL_FLAG_BIT_OFFSET 10
+#define SMALL_FLAG_BIT (1 << SMALL_FLAG_BIT_OFFSET)
+
+#define DIST_SYM_OFFSET 0
+#define DIST_SYM_LEN 5
+#define DIST_SYM_MASK ((1 << DIST_SYM_LEN) - 1)
+#define DIST_SYM_EXTRA_OFFSET 5
+#define DIST_SYM_EXTRA_LEN 4
+#define DIST_SYM_EXTRA_MASK ((1 << DIST_SYM_EXTRA_LEN) - 1)
+
+#define MAX_LIT_LEN_CODE_LEN 21
+#define MAX_LIT_LEN_COUNT (MAX_LIT_LEN_CODE_LEN + 2)
+#define MAX_LIT_LEN_SYM 512
+#define LIT_LEN_ELEMS 514
+
+#define INVALID_SYMBOL 0x1FFF
+#define INVALID_CODE 0xFFFFFF
+
+#define MIN_DEF_MATCH 3
+
+#define TRIPLE_SYM_FLAG 0
+#define DOUBLE_SYM_FLAG TRIPLE_SYM_FLAG + 1
+#define SINGLE_SYM_FLAG DOUBLE_SYM_FLAG + 1
+#define DEFAULT_SYM_FLAG TRIPLE_SYM_FLAG
+
+#define SINGLE_SYM_THRESH (2 * 1024)
+#define DOUBLE_SYM_THRESH (4 * 1024)
 
 /* structure contain lookup data based on RFC 1951 */
 struct rfc1951_tables {
@@ -68,7 +135,7 @@ static struct rfc1951_tables rfc_lookup_table = {
                      0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a,
                      0x000b, 0x000d, 0x000f, 0x0011, 0x0013, 0x0017, 0x001b, 0x001f,
                      0x0023, 0x002b, 0x0033, 0x003b, 0x0043, 0x0053, 0x0063, 0x0073,
-                     0x0083, 0x00a3, 0x00c3, 0x00e3, 0x0102, 0x0000, 0x0000, 0x0000}
+                     0x0083, 0x00a3, 0x00c3, 0x00e3, 0x0102, 0x0103, 0x0000, 0x0000}
 };
 
 struct slver {
@@ -81,12 +148,18 @@ struct slver {
 struct slver isal_inflate_init_slver_00010088;
 struct slver isal_inflate_init_slver = { 0x0088, 0x01, 0x00 };
 
+struct slver isal_inflate_reset_slver_0001008f;
+struct slver isal_inflate_reset_slver = { 0x008f, 0x01, 0x00 };
+
 struct slver isal_inflate_stateless_slver_00010089;
 struct slver isal_inflate_stateless_slver = { 0x0089, 0x01, 0x00 };
 
 struct slver isal_inflate_slver_0001008a;
 struct slver isal_inflate_slver = { 0x008a, 0x01, 0x00 };
 
+struct slver isal_inflate_set_dict_slver_0001008d;
+struct slver isal_inflate_set_dict_slver = { 0x008d, 0x01, 0x00 };
+
 /*Performs a copy of length repeat_length data starting at dest -
  * lookback_distance into dest. This copy copies data previously copied when the
  * src buffer and the dest buffer overlap. */
@@ -98,16 +171,74 @@ static void inline byte_copy(uint8_t * dest, uint64_t lookback_distance, int rep
                *dest++ = *src++;
 }
 
+static void update_checksum(struct inflate_state *state, uint8_t * start_in, uint64_t length)
+{
+       switch (state->crc_flag) {
+       case ISAL_GZIP:
+       case ISAL_GZIP_NO_HDR:
+       case ISAL_GZIP_NO_HDR_VER:
+               state->crc = crc32_gzip_refl(state->crc, start_in, length);
+               break;
+       case ISAL_ZLIB:
+       case ISAL_ZLIB_NO_HDR:
+       case ISAL_ZLIB_NO_HDR_VER:
+               state->crc = isal_adler32_bam1(state->crc, start_in, length);
+               break;
+       }
+}
+
+static void finalize_adler32(struct inflate_state *state)
+{
+
+       state->crc = (state->crc & 0xffff0000) | (((state->crc & 0xffff) + 1) % ADLER_MOD);
+}
+
+static const uint8_t bitrev_table[] = {
+       0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+       0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+       0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+       0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+       0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+       0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+       0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+       0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+       0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+       0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+       0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+       0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+       0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+       0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+       0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+       0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+       0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+       0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+       0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+       0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+       0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+       0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+       0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+       0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+       0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+       0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+       0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+       0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+       0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+       0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+       0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+       0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+
+};
+
 /*
  * Returns integer with first length bits reversed and all higher bits zeroed
  */
-static uint16_t inline bit_reverse2(uint16_t bits, uint8_t length)
+static uint32_t inline bit_reverse2(uint16_t bits, uint8_t length)
 {
-       bits = ((bits >> 1) & 0x55555555) | ((bits & 0x55555555) << 1); // swap bits
-       bits = ((bits >> 2) & 0x33333333) | ((bits & 0x33333333) << 2); // swap pairs
-       bits = ((bits >> 4) & 0x0F0F0F0F) | ((bits & 0x0F0F0F0F) << 4); // swap nibbles
-       bits = ((bits >> 8) & 0x00FF00FF) | ((bits & 0x00FF00FF) << 8); // swap bytes
-       return bits >> (16 - length);
+       uint32_t bitrev;
+       bitrev = bitrev_table[bits >> 8];
+       bitrev |= bitrev_table[bits & 0xFF] << 8;
+
+       return bitrev >> (16 - length);
 }
 
 /* Load data from the in_stream into a buffer to allow for handling unaligned data*/
@@ -123,7 +254,7 @@ static void inline inflate_in_load(struct inflate_state *state, int min_required
                /* If there is enough space to load a 64 bits, load the data and use
                 * that to fill read_in */
                new_bytes = 8 - (state->read_in_length + 7) / 8;
-               temp = *(uint64_t *) state->next_in;
+               temp = load_u64(state->next_in);
 
                state->read_in |= temp << state->read_in_length;
                state->next_in += new_bytes;
@@ -143,16 +274,10 @@ static void inline inflate_in_load(struct inflate_state *state, int min_required
        }
 }
 
-/* Returns the next bit_count bits from the in stream and shifts the stream over
- * by bit-count bits */
-static uint64_t inline inflate_in_read_bits(struct inflate_state *state, uint8_t bit_count)
+static uint64_t inline inflate_in_read_bits_unsafe(struct inflate_state *state,
+                                                  uint8_t bit_count)
 {
        uint64_t ret;
-       assert(bit_count < 57);
-
-       /* Load inflate_in if not enough data is in the read_in buffer */
-       if (state->read_in_length < bit_count)
-               inflate_in_load(state, bit_count);
 
        ret = (state->read_in) & ((1 << bit_count) - 1);
        state->read_in >>= bit_count;
@@ -161,20 +286,173 @@ static uint64_t inline inflate_in_read_bits(struct inflate_state *state, uint8_t
        return ret;
 }
 
+/* Returns the next bit_count bits from the in stream and shifts the stream over
+ * by bit-count bits */
+static uint64_t inline inflate_in_read_bits(struct inflate_state *state, uint8_t bit_count)
+{
+       /* Load inflate_in if not enough data is in the read_in buffer */
+       inflate_in_load(state, bit_count);
+       return inflate_in_read_bits_unsafe(state, bit_count);
+}
+
+static void inline write_huff_code(struct huff_code *huff_code, uint32_t code, uint32_t length)
+{
+       huff_code->code_and_length = code | length << 24;
+}
+
+static int inline set_codes(struct huff_code *huff_code_table, int table_length,
+                           uint16_t * count)
+{
+       uint32_t max, code, length;
+       uint32_t next_code[MAX_HUFF_TREE_DEPTH + 1];
+       int i;
+       struct huff_code *table_end = huff_code_table + table_length;
+
+       /* Setup for calculating huffman codes */
+       next_code[0] = 0;
+       next_code[1] = 0;
+       for (i = 2; i < MAX_HUFF_TREE_DEPTH + 1; i++)
+               next_code[i] = (next_code[i - 1] + count[i - 1]) << 1;
+
+       max = (next_code[MAX_HUFF_TREE_DEPTH] + count[MAX_HUFF_TREE_DEPTH]);
+
+       if (max > (1 << MAX_HUFF_TREE_DEPTH))
+               return ISAL_INVALID_BLOCK;
+
+       /* Calculate code corresponding to a given symbol */
+       for (; huff_code_table < table_end; huff_code_table++) {
+               length = huff_code_table->length;
+               if (length == 0)
+                       continue;
+
+               code = bit_reverse2(next_code[length], length);
+
+               write_huff_code(huff_code_table, code, length);
+               next_code[length] += 1;
+       }
+       return 0;
+}
+
+static int inline set_and_expand_lit_len_huffcode(struct huff_code *lit_len_huff,
+                                                 uint32_t table_length,
+                                                 uint16_t * count,
+                                                 uint16_t * expand_count,
+                                                 uint32_t * code_list)
+{
+       int len_sym, len_size, extra_count, extra;
+       uint32_t count_total, count_tmp;
+       uint32_t code, code_len, expand_len;
+       struct huff_code *expand_next = &lit_len_huff[ISAL_DEF_LIT_SYMBOLS];
+       struct huff_code tmp_table[LIT_LEN - ISAL_DEF_LIT_SYMBOLS];
+       uint32_t max;
+       uint32_t next_code[MAX_HUFF_TREE_DEPTH + 1];
+       int i;
+       struct huff_code *table_end;
+       struct huff_code *huff_code_table = lit_len_huff;
+       uint32_t insert_index;
+
+       /* Setup for calculating huffman codes */
+       count_total = 0;
+       count_tmp = expand_count[1];
+       next_code[0] = 0;
+       next_code[1] = 0;
+       expand_count[0] = 0;
+       expand_count[1] = 0;
+
+       for (i = 1; i < MAX_HUFF_TREE_DEPTH; i++) {
+               count_total = count[i] + count_tmp + count_total;
+               count_tmp = expand_count[i + 1];
+               expand_count[i + 1] = count_total;
+               next_code[i + 1] = (next_code[i] + count[i]) << 1;
+       }
+
+       count_tmp = count[i] + count_tmp;
+
+       for (; i < MAX_LIT_LEN_COUNT - 1; i++) {
+               count_total = count_tmp + count_total;
+               count_tmp = expand_count[i + 1];
+               expand_count[i + 1] = count_total;
+       }
+
+       /* Correct for extra symbols used by static header */
+       if (table_length > LIT_LEN)
+               count[8] -= 2;
+
+       max = (next_code[MAX_HUFF_TREE_DEPTH] + count[MAX_HUFF_TREE_DEPTH]);
+
+       if (max > (1 << MAX_HUFF_TREE_DEPTH))
+               return ISAL_INVALID_BLOCK;
+
+       memcpy(count, expand_count, sizeof(*count) * MAX_LIT_LEN_COUNT);
+
+       memcpy(tmp_table, &lit_len_huff[ISAL_DEF_LIT_SYMBOLS],
+              sizeof(*lit_len_huff) * (LIT_LEN - ISAL_DEF_LIT_SYMBOLS));
+       memset(&lit_len_huff[ISAL_DEF_LIT_SYMBOLS], 0,
+              sizeof(*lit_len_huff) * (LIT_LEN_ELEMS - ISAL_DEF_LIT_SYMBOLS));
+
+       /* Calculate code corresponding to a given literal symbol */
+       table_end = huff_code_table + ISAL_DEF_LIT_SYMBOLS;
+       for (; huff_code_table < table_end; huff_code_table++) {
+               code_len = huff_code_table->length;
+               if (code_len == 0)
+                       continue;
+
+               code = bit_reverse2(next_code[code_len], code_len);
+
+               insert_index = expand_count[code_len];
+               code_list[insert_index] = huff_code_table - lit_len_huff;
+               expand_count[code_len]++;
+
+               write_huff_code(huff_code_table, code, code_len);
+               next_code[code_len] += 1;
+       }
+
+       /* Calculate code corresponding to a given len symbol */
+       for (len_sym = 0; len_sym < LIT_LEN - ISAL_DEF_LIT_SYMBOLS; len_sym++) {
+               extra_count = rfc_lookup_table.len_extra_bit_count[len_sym];
+               len_size = (1 << extra_count);
+
+               code_len = tmp_table[len_sym].length;
+               if (code_len == 0) {
+                       expand_next += len_size;
+                       continue;
+               }
+
+               code = bit_reverse2(next_code[code_len], code_len);
+               expand_len = code_len + extra_count;
+               next_code[code_len] += 1;
+               insert_index = expand_count[expand_len];
+               expand_count[expand_len] += len_size;
+
+               for (extra = 0; extra < len_size; extra++) {
+                       code_list[insert_index] = expand_next - lit_len_huff;
+                       write_huff_code(expand_next, code | (extra << code_len), expand_len);
+                       insert_index++;
+                       expand_next++;
+               }
+       }
+
+       return 0;
+}
+
+static int inline index_to_sym(int index)
+{
+       return (index != 513) ? index : 512;
+}
+
 /* Sets result to the inflate_huff_code corresponding to the huffcode defined by
  * the lengths in huff_code_table,where count is a histogram of the appearance
  * of each code length */
-static void inline make_inflate_huff_code_large(struct inflate_huff_code_large *result,
-                                               struct huff_code *huff_code_table,
-                                               int table_length, uint16_t * count,
-                                               uint32_t max_symbol)
+static void make_inflate_huff_code_lit_len(struct inflate_huff_code_large *result,
+                                          struct huff_code *huff_code_table,
+                                          uint32_t table_length, uint16_t * count_total,
+                                          uint32_t * code_list, uint32_t multisym)
 {
-       int i, j, k;
+       int i, j;
        uint16_t code = 0;
-       uint16_t next_code[MAX_HUFF_TREE_DEPTH + 1];
-       uint16_t long_code_list[LIT_LEN];
+       uint32_t *long_code_list;
        uint32_t long_code_length = 0;
-       uint16_t temp_code_list[1 << (15 - ISAL_DECODE_LONG_BITS)];
+       uint16_t temp_code_list[1 << (MAX_LIT_LEN_CODE_LEN - ISAL_DECODE_LONG_BITS)];
        uint32_t temp_code_length;
        uint32_t long_code_lookup_length = 0;
        uint32_t max_length;
@@ -182,111 +460,167 @@ static void inline make_inflate_huff_code_large(struct inflate_huff_code_large *
        uint32_t code_length;
        uint16_t long_bits;
        uint16_t min_increment;
-       uint32_t code_list[LIT_LEN + 2];        /* The +2 is for the extra codes in the static header */
        uint32_t code_list_len;
-       uint32_t count_total[17];
-       uint32_t insert_index;
-       uint32_t last_length;
+       uint32_t last_length, min_length;
        uint32_t copy_size;
-       uint16_t *short_code_lookup = result->short_code_lookup;
+       uint32_t *short_code_lookup = result->short_code_lookup;
+       int index1, index2, index3;
+       int sym1, sym2, sym3, sym1_index, sym2_index, sym3_index;
+       uint32_t sym1_code, sym2_code, sym3_code, sym1_len, sym2_len, sym3_len;
 
-       count_total[0] = 0;
-       count_total[1] = 0;
-       for (i = 2; i < 17; i++)
-               count_total[i] = count_total[i - 1] + count[i - 1];
+       uint32_t max_symbol = MAX_LIT_LEN_SYM;
+
+       code_list_len = count_total[MAX_LIT_LEN_COUNT - 1];
 
-       code_list_len = count_total[16];
        if (code_list_len == 0) {
                memset(result->short_code_lookup, 0, sizeof(result->short_code_lookup));
                return;
        }
 
-       for (i = 0; i < table_length; i++) {
-               code_length = huff_code_table[i].length;
-               if (code_length > 0) {
-                       insert_index = count_total[code_length];
-                       code_list[insert_index] = i;
-                       count_total[code_length]++;
-               }
-       }
-
-       next_code[0] = code;
-       for (i = 1; i < MAX_HUFF_TREE_DEPTH + 1; i++)
-               next_code[i] = (next_code[i - 1] + count[i - 1]) << 1;
-
+       /* Determine the length of the first code */
        last_length = huff_code_table[code_list[0]].length;
        if (last_length > ISAL_DECODE_LONG_BITS)
-               last_length = ISAL_DECODE_LONG_BITS;
-       copy_size = (1 << last_length);
+               last_length = ISAL_DECODE_LONG_BITS + 1;
+       copy_size = (1 << (last_length - 1));
 
        /* Initialize short_code_lookup, so invalid lookups process data */
        memset(short_code_lookup, 0x00, copy_size * sizeof(*short_code_lookup));
 
-       for (k = 0; k < code_list_len; k++) {
-               i = code_list[k];
-               if (huff_code_table[i].length > ISAL_DECODE_LONG_BITS)
-                       break;
+       min_length = last_length;
+       for (; last_length <= ISAL_DECODE_LONG_BITS; last_length++) {
+               /* Copy forward previosly set codes */
+               memcpy(short_code_lookup + copy_size, short_code_lookup,
+                      sizeof(*short_code_lookup) * copy_size);
+               copy_size *= 2;
+
+               /* Encode code singletons */
+               for (index1 = count_total[last_length];
+                    index1 < count_total[last_length + 1]; index1++) {
+                       sym1_index = code_list[index1];
+                       sym1 = index_to_sym(sym1_index);
+                       sym1_len = huff_code_table[sym1_index].length;
+                       sym1_code = huff_code_table[sym1_index].code;
+
+                       if (sym1 > max_symbol)
+                               continue;
+
+                       /* Set new codes */
+                       short_code_lookup[sym1_code] =
+                           sym1 | sym1_len << LARGE_SHORT_CODE_LEN_OFFSET |
+                           (1 << LARGE_SYM_COUNT_OFFSET);
+               }
+
+               /* Continue if no pairs are possible */
+               if (multisym >= SINGLE_SYM_FLAG || last_length < 2 * min_length)
+                       continue;
+
+               /* Encode code pairs */
+               for (index1 = count_total[min_length];
+                    index1 < count_total[last_length - min_length + 1]; index1++) {
+                       sym1_index = code_list[index1];
+                       sym1 = index_to_sym(sym1_index);
+                       sym1_len = huff_code_table[sym1_index].length;
+                       sym1_code = huff_code_table[sym1_index].code;
+
+                       /*Check that sym1 is a literal */
+                       if (sym1 >= 256) {
+                               index1 = count_total[sym1_len + 1] - 1;
+                               continue;
+                       }
+
+                       sym2_len = last_length - sym1_len;
+                       for (index2 = count_total[sym2_len];
+                            index2 < count_total[sym2_len + 1]; index2++) {
+                               sym2_index = code_list[index2];
+                               sym2 = index_to_sym(sym2_index);
+
+                               /* Check that sym2 is an existing symbol */
+                               if (sym2 > max_symbol)
+                                       break;
 
-               while (huff_code_table[i].length > last_length) {
-                       memcpy(short_code_lookup + copy_size, short_code_lookup,
-                              sizeof(*short_code_lookup) * copy_size);
-                       last_length++;
-                       copy_size <<= 1;
+                               sym2_code = huff_code_table[sym2_index].code;
+                               code = sym1_code | (sym2_code << sym1_len);
+                               code_length = sym1_len + sym2_len;
+                               short_code_lookup[code] =
+                                   sym1 | (sym2 << 8) |
+                                   (code_length << LARGE_SHORT_CODE_LEN_OFFSET)
+                                   | (2 << LARGE_SYM_COUNT_OFFSET);
+                       }
                }
 
-               /* Store codes as zero for invalid codes used in static header construction */
-               huff_code_table[i].code =
-                   bit_reverse2(next_code[huff_code_table[i].length],
-                                huff_code_table[i].length);
+               /* Continue if no triples are possible */
+               if (multisym >= DOUBLE_SYM_FLAG || last_length < 3 * min_length)
+                       continue;
 
-               next_code[huff_code_table[i].length] += 1;
+               /* Encode code triples */
+               for (index1 = count_total[min_length];
+                    index1 < count_total[last_length - 2 * min_length + 1]; index1++) {
+                       sym1_index = code_list[index1];
+                       sym1 = index_to_sym(sym1_index);
+                       sym1_len = huff_code_table[sym1_index].length;
+                       sym1_code = huff_code_table[sym1_index].code;
+                       /*Check that sym1 is a literal */
+                       if (sym1 >= 256) {
+                               index1 = count_total[sym1_len + 1] - 1;
+                               continue;
+                       }
 
-               /* Set lookup table to return the current symbol concatenated
-                * with the code length when the first DECODE_LENGTH bits of the
-                * address are the same as the code for the current symbol. The
-                * first 9 bits are the code, bits 14:10 are the code length,
-                * bit 15 is a flag representing this is a symbol*/
+                       if (last_length - sym1_len < 2 * min_length)
+                               break;
 
-               if (i < max_symbol)
-                       short_code_lookup[huff_code_table[i].code] =
-                           i | (huff_code_table[i].length) << 9;
+                       for (index2 = count_total[min_length];
+                            index2 < count_total[last_length - sym1_len - min_length + 1];
+                            index2++) {
+                               sym2_index = code_list[index2];
+                               sym2 = index_to_sym(sym2_index);
+                               sym2_len = huff_code_table[sym2_index].length;
+                               sym2_code = huff_code_table[sym2_index].code;
+
+                               /* Check that sym2 is a literal */
+                               if (sym2 >= 256) {
+                                       index2 = count_total[sym2_len + 1] - 1;
+                                       continue;
+                               }
 
-               else
-                       short_code_lookup[huff_code_table[i].code] = 0;
+                               sym3_len = last_length - sym1_len - sym2_len;
+                               for (index3 = count_total[sym3_len];
+                                    index3 < count_total[sym3_len + 1]; index3++) {
+                                       sym3_index = code_list[index3];
+                                       sym3 = index_to_sym(sym3_index);
+                                       sym3_code = huff_code_table[sym3_index].code;
 
-       }
+                                       /* Check that sym3 is writable existing symbol */
+                                       if (sym3 > max_symbol - 1)
+                                               break;
 
-       while (ISAL_DECODE_LONG_BITS > last_length) {
-               memcpy(short_code_lookup + copy_size, short_code_lookup,
-                      sizeof(*short_code_lookup) * copy_size);
-               last_length++;
-               copy_size <<= 1;
-       }
+                                       code = sym1_code | (sym2_code << sym1_len) |
+                                           (sym3_code << (sym2_len + sym1_len));
+                                       code_length = sym1_len + sym2_len + sym3_len;
+                                       short_code_lookup[code] =
+                                           sym1 | (sym2 << 8) | sym3 << 16 |
+                                           (code_length << LARGE_SHORT_CODE_LEN_OFFSET)
+                                           | (3 << LARGE_SYM_COUNT_OFFSET);
 
-       while (k < code_list_len) {
-               i = code_list[k];
-               huff_code_table[i].code =
-                   bit_reverse2(next_code[huff_code_table[i].length],
-                                huff_code_table[i].length);
+                               }
 
-               next_code[huff_code_table[i].length] += 1;
+                       }
+               }
 
-               /* Store the element in a list of elements with long codes. */
-               long_code_list[long_code_length] = i;
-               long_code_length++;
-               k++;
        }
 
+       index1 = count_total[ISAL_DECODE_LONG_BITS + 1];
+       long_code_length = code_list_len - index1;
+       long_code_list = &code_list[index1];
        for (i = 0; i < long_code_length; i++) {
                /*Set the look up table to point to a hint where the symbol can be found
                 * in the list of long codes and add the current symbol to the list of
                 * long codes. */
-               if (huff_code_table[long_code_list[i]].code == 0xFFFF)
+               if (huff_code_table[long_code_list[i]].code_and_extra == INVALID_CODE)
                        continue;
 
                max_length = huff_code_table[long_code_list[i]].length;
                first_bits =
-                   huff_code_table[long_code_list[i]].code
+                   huff_code_table[long_code_list[i]].code_and_extra
                    & ((1 << ISAL_DECODE_LONG_BITS) - 1);
 
                temp_code_list[0] = long_code_list[i];
@@ -295,44 +629,46 @@ static void inline make_inflate_huff_code_large(struct inflate_huff_code_large *
                for (j = i + 1; j < long_code_length; j++) {
                        if ((huff_code_table[long_code_list[j]].code &
                             ((1 << ISAL_DECODE_LONG_BITS) - 1)) == first_bits) {
-                               if (max_length < huff_code_table[long_code_list[j]].length)
-                                       max_length = huff_code_table[long_code_list[j]].length;
+                               max_length = huff_code_table[long_code_list[j]].length;
                                temp_code_list[temp_code_length] = long_code_list[j];
                                temp_code_length++;
                        }
                }
 
                memset(&result->long_code_lookup[long_code_lookup_length], 0x00,
-                      2 * (1 << (max_length - ISAL_DECODE_LONG_BITS)));
+                      sizeof(*result->long_code_lookup) *
+                      (1 << (max_length - ISAL_DECODE_LONG_BITS)));
 
                for (j = 0; j < temp_code_length; j++) {
-                       code_length = huff_code_table[temp_code_list[j]].length;
-                       long_bits =
-                           huff_code_table[temp_code_list[j]].code >> ISAL_DECODE_LONG_BITS;
-                       min_increment = 1 << (code_length - ISAL_DECODE_LONG_BITS);
+                       sym1_index = temp_code_list[j];
+                       sym1 = index_to_sym(sym1_index);
+                       sym1_len = huff_code_table[sym1_index].length;
+                       sym1_code = huff_code_table[sym1_index].code_and_extra;
+
+                       long_bits = sym1_code >> ISAL_DECODE_LONG_BITS;
+                       min_increment = 1 << (sym1_len - ISAL_DECODE_LONG_BITS);
+
                        for (; long_bits < (1 << (max_length - ISAL_DECODE_LONG_BITS));
                             long_bits += min_increment) {
                                result->long_code_lookup[long_code_lookup_length + long_bits] =
-                                   temp_code_list[j] | (code_length << 9);
+                                   sym1 | (sym1_len << LARGE_LONG_CODE_LEN_OFFSET);
                        }
-                       huff_code_table[temp_code_list[j]].code = 0xFFFF;
+                       huff_code_table[sym1_index].code_and_extra = INVALID_CODE;
+
                }
-               result->short_code_lookup[first_bits] =
-                   long_code_lookup_length | (max_length << 9) | 0x8000;
+               result->short_code_lookup[first_bits] = long_code_lookup_length |
+                   (max_length << LARGE_SHORT_MAX_LEN_OFFSET) | LARGE_FLAG_BIT;
                long_code_lookup_length += 1 << (max_length - ISAL_DECODE_LONG_BITS);
-
        }
 }
 
-static void inline make_inflate_huff_code_small(struct inflate_huff_code_small *result,
-                                               struct huff_code *huff_code_table,
-                                               int table_length, uint16_t * count,
-                                               uint32_t max_symbol)
+static void inline make_inflate_huff_code_dist(struct inflate_huff_code_small *result,
+                                              struct huff_code *huff_code_table,
+                                              uint32_t table_length, uint16_t * count,
+                                              uint32_t max_symbol)
 {
        int i, j, k;
-       uint16_t code = 0;
-       uint16_t next_code[MAX_HUFF_TREE_DEPTH + 1];
-       uint16_t long_code_list[LIT_LEN];
+       uint32_t *long_code_list;
        uint32_t long_code_length = 0;
        uint16_t temp_code_list[1 << (15 - ISAL_DECODE_SHORT_BITS)];
        uint32_t temp_code_length;
@@ -344,16 +680,18 @@ static void inline make_inflate_huff_code_small(struct inflate_huff_code_small *
        uint16_t min_increment;
        uint32_t code_list[DIST_LEN + 2];       /* The +2 is for the extra codes in the static header */
        uint32_t code_list_len;
-       uint32_t count_total[17];
+       uint32_t count_total[17], count_total_tmp[17];
        uint32_t insert_index;
        uint32_t last_length;
        uint32_t copy_size;
        uint16_t *short_code_lookup = result->short_code_lookup;
+       uint32_t sym;
 
        count_total[0] = 0;
        count_total[1] = 0;
        for (i = 2; i < 17; i++)
                count_total[i] = count_total[i - 1] + count[i - 1];
+       memcpy(count_total_tmp, count_total, sizeof(count_total_tmp));
 
        code_list_len = count_total[16];
        if (code_list_len == 0) {
@@ -363,77 +701,189 @@ static void inline make_inflate_huff_code_small(struct inflate_huff_code_small *
 
        for (i = 0; i < table_length; i++) {
                code_length = huff_code_table[i].length;
-               if (code_length > 0) {
-                       insert_index = count_total[code_length];
-                       code_list[insert_index] = i;
-                       count_total[code_length]++;
-               }
-       }
+               if (code_length == 0)
+                       continue;
 
-       next_code[0] = code;
-       for (i = 1; i < MAX_HUFF_TREE_DEPTH + 1; i++)
-               next_code[i] = (next_code[i - 1] + count[i - 1]) << 1;
+               insert_index = count_total_tmp[code_length];
+               code_list[insert_index] = i;
+               count_total_tmp[code_length]++;
+       }
 
        last_length = huff_code_table[code_list[0]].length;
        if (last_length > ISAL_DECODE_SHORT_BITS)
-               last_length = ISAL_DECODE_SHORT_BITS;
-       copy_size = (1 << last_length);
+               last_length = ISAL_DECODE_SHORT_BITS + 1;
+       copy_size = (1 << (last_length - 1));
 
        /* Initialize short_code_lookup, so invalid lookups process data */
        memset(short_code_lookup, 0x00, copy_size * sizeof(*short_code_lookup));
 
-       for (k = 0; k < code_list_len; k++) {
-               i = code_list[k];
-               if (huff_code_table[i].length > ISAL_DECODE_SHORT_BITS)
-                       break;
+       for (; last_length <= ISAL_DECODE_SHORT_BITS; last_length++) {
+               memcpy(short_code_lookup + copy_size, short_code_lookup,
+                      sizeof(*short_code_lookup) * copy_size);
+               copy_size *= 2;
+
+               for (k = count_total[last_length]; k < count_total[last_length + 1]; k++) {
+                       i = code_list[k];
+
+                       if (i >= max_symbol) {
+                               /* If the symbol is invalid, set code to be the
+                                * length of the symbol and the code_length to 0
+                                * to determine if there was enough input */
+                               short_code_lookup[huff_code_table[i].code] =
+                                   huff_code_table[i].length;
+                               continue;
+                       }
 
-               while (huff_code_table[i].length > last_length) {
-                       memcpy(short_code_lookup + copy_size, short_code_lookup,
-                              sizeof(*short_code_lookup) * copy_size);
-                       last_length++;
-                       copy_size <<= 1;
+                       /* Set lookup table to return the current symbol concatenated
+                        * with the code length when the first DECODE_LENGTH bits of the
+                        * address are the same as the code for the current symbol. The
+                        * first 9 bits are the code, bits 14:10 are the code length,
+                        * bit 15 is a flag representing this is a symbol*/
+                       short_code_lookup[huff_code_table[i].code] = i |
+                           rfc_lookup_table.dist_extra_bit_count[i] << DIST_SYM_EXTRA_OFFSET |
+                           (huff_code_table[i].length) << SMALL_SHORT_CODE_LEN_OFFSET;
                }
+       }
+
+       k = count_total[ISAL_DECODE_SHORT_BITS + 1];
+       long_code_list = &code_list[k];
+       long_code_length = code_list_len - k;
+       for (i = 0; i < long_code_length; i++) {
+               /*Set the look up table to point to a hint where the symbol can be found
+                * in the list of long codes and add the current symbol to the list of
+                * long codes. */
+               if (huff_code_table[long_code_list[i]].code == 0xFFFF)
+                       continue;
 
-               /* Store codes as zero for invalid codes used in static header construction */
-               huff_code_table[i].code =
-                   bit_reverse2(next_code[huff_code_table[i].length],
-                                huff_code_table[i].length);
+               max_length = huff_code_table[long_code_list[i]].length;
+               first_bits =
+                   huff_code_table[long_code_list[i]].code
+                   & ((1 << ISAL_DECODE_SHORT_BITS) - 1);
 
-               next_code[huff_code_table[i].length] += 1;
+               temp_code_list[0] = long_code_list[i];
+               temp_code_length = 1;
 
-               /* Set lookup table to return the current symbol concatenated
-                * with the code length when the first DECODE_LENGTH bits of the
-                * address are the same as the code for the current symbol. The
-                * first 9 bits are the code, bits 14:10 are the code length,
-                * bit 15 is a flag representing this is a symbol*/
-               if (i < max_symbol)
-                       short_code_lookup[huff_code_table[i].code] =
-                           i | (huff_code_table[i].length) << 9;
-               else
-                       short_code_lookup[huff_code_table[i].code] = 0;
+               for (j = i + 1; j < long_code_length; j++) {
+                       if ((huff_code_table[long_code_list[j]].code &
+                            ((1 << ISAL_DECODE_SHORT_BITS) - 1)) == first_bits) {
+                               max_length = huff_code_table[long_code_list[j]].length;
+                               temp_code_list[temp_code_length] = long_code_list[j];
+                               temp_code_length++;
+                       }
+               }
+
+               memset(&result->long_code_lookup[long_code_lookup_length], 0x00,
+                      2 * (1 << (max_length - ISAL_DECODE_SHORT_BITS)));
+
+               for (j = 0; j < temp_code_length; j++) {
+                       sym = temp_code_list[j];
+                       code_length = huff_code_table[sym].length;
+                       long_bits = huff_code_table[sym].code >> ISAL_DECODE_SHORT_BITS;
+                       min_increment = 1 << (code_length - ISAL_DECODE_SHORT_BITS);
+                       for (; long_bits < (1 << (max_length - ISAL_DECODE_SHORT_BITS));
+                            long_bits += min_increment) {
+                               if (sym >= max_symbol) {
+                                       /* If the symbol is invalid, set code to be the
+                                        * length of the symbol and the code_length to 0
+                                        * to determine if there was enough input */
+                                       result->long_code_lookup[long_code_lookup_length +
+                                                                long_bits] = code_length;
+                                       continue;
+                               }
+                               result->long_code_lookup[long_code_lookup_length + long_bits] =
+                                   sym |
+                                   rfc_lookup_table.dist_extra_bit_count[sym] <<
+                                   DIST_SYM_EXTRA_OFFSET |
+                                   (code_length << SMALL_LONG_CODE_LEN_OFFSET);
+                       }
+                       huff_code_table[sym].code = 0xFFFF;
+               }
+               result->short_code_lookup[first_bits] = long_code_lookup_length |
+                   (max_length << SMALL_SHORT_CODE_LEN_OFFSET) | SMALL_FLAG_BIT;
+               long_code_lookup_length += 1 << (max_length - ISAL_DECODE_SHORT_BITS);
+
+       }
+}
+
+static void inline make_inflate_huff_code_header(struct inflate_huff_code_small *result,
+                                                struct huff_code *huff_code_table,
+                                                uint32_t table_length, uint16_t * count,
+                                                uint32_t max_symbol)
+{
+       int i, j, k;
+       uint32_t *long_code_list;
+       uint32_t long_code_length = 0;
+       uint16_t temp_code_list[1 << (15 - ISAL_DECODE_SHORT_BITS)];
+       uint32_t temp_code_length;
+       uint32_t long_code_lookup_length = 0;
+       uint32_t max_length;
+       uint16_t first_bits;
+       uint32_t code_length;
+       uint16_t long_bits;
+       uint16_t min_increment;
+       uint32_t code_list[DIST_LEN + 2];       /* The +2 is for the extra codes in the static header */
+       uint32_t code_list_len;
+       uint32_t count_total[17], count_total_tmp[17];
+       uint32_t insert_index;
+       uint32_t last_length;
+       uint32_t copy_size;
+       uint16_t *short_code_lookup = result->short_code_lookup;
+
+       count_total[0] = 0;
+       count_total[1] = 0;
+       for (i = 2; i < 17; i++)
+               count_total[i] = count_total[i - 1] + count[i - 1];
+
+       memcpy(count_total_tmp, count_total, sizeof(count_total_tmp));
+
+       code_list_len = count_total[16];
+       if (code_list_len == 0) {
+               memset(result->short_code_lookup, 0, sizeof(result->short_code_lookup));
+               return;
+       }
+
+       for (i = 0; i < table_length; i++) {
+               code_length = huff_code_table[i].length;
+               if (code_length == 0)
+                       continue;
+
+               insert_index = count_total_tmp[code_length];
+               code_list[insert_index] = i;
+               count_total_tmp[code_length]++;
        }
 
-       while (ISAL_DECODE_SHORT_BITS > last_length) {
+       last_length = huff_code_table[code_list[0]].length;
+       if (last_length > ISAL_DECODE_SHORT_BITS)
+               last_length = ISAL_DECODE_SHORT_BITS + 1;
+       copy_size = (1 << (last_length - 1));
+
+       /* Initialize short_code_lookup, so invalid lookups process data */
+       memset(short_code_lookup, 0x00, copy_size * sizeof(*short_code_lookup));
+
+       for (; last_length <= ISAL_DECODE_SHORT_BITS; last_length++) {
                memcpy(short_code_lookup + copy_size, short_code_lookup,
                       sizeof(*short_code_lookup) * copy_size);
-               last_length++;
-               copy_size <<= 1;
-       }
+               copy_size *= 2;
 
-       while (k < code_list_len) {
-               i = code_list[k];
-               huff_code_table[i].code =
-                   bit_reverse2(next_code[huff_code_table[i].length],
-                                huff_code_table[i].length);
+               for (k = count_total[last_length]; k < count_total[last_length + 1]; k++) {
+                       i = code_list[k];
 
-               next_code[huff_code_table[i].length] += 1;
+                       if (i >= max_symbol)
+                               continue;
 
-               /* Store the element in a list of elements with long codes. */
-               long_code_list[long_code_length] = i;
-               long_code_length++;
-               k++;
+                       /* Set lookup table to return the current symbol concatenated
+                        * with the code length when the first DECODE_LENGTH bits of the
+                        * address are the same as the code for the current symbol. The
+                        * first 9 bits are the code, bits 14:10 are the code length,
+                        * bit 15 is a flag representing this is a symbol*/
+                       short_code_lookup[huff_code_table[i].code] =
+                           i | (huff_code_table[i].length) << SMALL_SHORT_CODE_LEN_OFFSET;
+               }
        }
 
+       k = count_total[ISAL_DECODE_SHORT_BITS + 1];
+       long_code_list = &code_list[k];
+       long_code_length = code_list_len - k;
        for (i = 0; i < long_code_length; i++) {
                /*Set the look up table to point to a hint where the symbol can be found
                 * in the list of long codes and add the current symbol to the list of
@@ -470,12 +920,13 @@ static void inline make_inflate_huff_code_small(struct inflate_huff_code_small *
                        for (; long_bits < (1 << (max_length - ISAL_DECODE_SHORT_BITS));
                             long_bits += min_increment) {
                                result->long_code_lookup[long_code_lookup_length + long_bits] =
-                                   temp_code_list[j] | (code_length << 9);
+                                   temp_code_list[j] |
+                                   (code_length << SMALL_LONG_CODE_LEN_OFFSET);
                        }
                        huff_code_table[temp_code_list[j]].code = 0xFFFF;
                }
-               result->short_code_lookup[first_bits] =
-                   long_code_lookup_length | (max_length << 9) | 0x8000;
+               result->short_code_lookup[first_bits] = long_code_lookup_length |
+                   (max_length << SMALL_SHORT_CODE_LEN_OFFSET) | SMALL_FLAG_BIT;
                long_code_lookup_length += 1 << (max_length - ISAL_DECODE_SHORT_BITS);
 
        }
@@ -485,23 +936,32 @@ static void inline make_inflate_huff_code_small(struct inflate_huff_code_small *
  * deflate static header */
 static int inline setup_static_header(struct inflate_state *state)
 {
-       /* This could be turned into a memcpy of this functions output for
-        * higher speed, but then DECODE_LOOKUP_SIZE couldn't be changed without
-        * regenerating the table. */
-
+#ifdef ISAL_STATIC_INFLATE_TABLE
+       memcpy(&state->lit_huff_code, &static_lit_huff_code, sizeof(static_lit_huff_code));
+       memcpy(&state->dist_huff_code, &static_dist_huff_code, sizeof(static_dist_huff_code));
+#else
+
+#ifndef NO_STATIC_INFLATE_H
+# warning "Defaulting to static inflate table fallback."
+# warning "For best performance, run generate_static_inflate, replace static_inflate.h, and recompile"
+#endif
        int i;
-       struct huff_code lit_code[LIT_LEN + 2];
+       struct huff_code lit_code[LIT_LEN_ELEMS];
        struct huff_code dist_code[DIST_LEN + 2];
-
+       uint32_t multisym = SINGLE_SYM_FLAG, max_dist = DIST_LEN;
        /* These tables are based on the static huffman tree described in RFC
         * 1951 */
-       uint16_t lit_count[16] = {
-               0, 0, 0, 0, 0, 0, 0, 24, 152, 112, 0, 0, 0, 0, 0, 0
+       uint16_t lit_count[MAX_LIT_LEN_COUNT] = {
+               0, 0, 0, 0, 0, 0, 0, 24, 152, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+       };
+
+       uint16_t lit_expand_count[MAX_LIT_LEN_COUNT] = {
+               0, 0, 0, 0, 0, 0, 0, -15, 1, 16, 32, 48, 16, 128, 0, 0, 0, 0, 0, 0, 0, 0
        };
        uint16_t dist_count[16] = {
                0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        };
-
+       uint32_t code_list[LIT_LEN_ELEMS + 2];  /* The +2 is for the extra codes in the static header */
        /* These for loops set the code lengths for the static literal/length
         * and distance codes defined in the deflate standard RFC 1951 */
        for (i = 0; i < 144; i++)
@@ -519,23 +979,33 @@ static int inline setup_static_header(struct inflate_state *state)
        for (i = 0; i < DIST_LEN + 2; i++)
                dist_code[i].length = 5;
 
-       make_inflate_huff_code_large(&state->lit_huff_code, lit_code, LIT_LEN + 2, lit_count,
-                                    LIT_LEN);
-       make_inflate_huff_code_small(&state->dist_huff_code, dist_code, DIST_LEN + 2,
-                                    dist_count, DIST_LEN);
+       set_and_expand_lit_len_huffcode(lit_code, LIT_LEN + 2, lit_count, lit_expand_count,
+                                       code_list);
 
+       set_codes(dist_code, DIST_LEN + 2, dist_count);
+
+       make_inflate_huff_code_lit_len(&state->lit_huff_code, lit_code, LIT_LEN_ELEMS,
+                                      lit_count, code_list, multisym);
+
+       if (state->hist_bits && state->hist_bits < 15)
+               max_dist = 2 * state->hist_bits;
+
+       make_inflate_huff_code_dist(&state->dist_huff_code, dist_code, DIST_LEN + 2,
+                                   dist_count, max_dist);
+#endif
        state->block_state = ISAL_BLOCK_CODED;
 
        return 0;
 }
 
 /* Decodes the next symbol symbol in in_buffer using the huff code defined by
- * huff_code */
-static uint16_t inline decode_next_large(struct inflate_state *state,
-                                        struct inflate_huff_code_large *huff_code)
+ * huff_code  and returns the value in next_lits and sym_count */
+static void inline decode_next_lit_len(uint32_t * next_lits, uint32_t * sym_count,
+                                      struct inflate_state *state,
+                                      struct inflate_huff_code_large *huff_code)
 {
-       uint16_t next_bits;
-       uint16_t next_sym;
+       uint32_t next_bits;
+       uint32_t next_sym;
        uint32_t bit_count;
        uint32_t bit_mask;
 
@@ -552,41 +1022,42 @@ static uint16_t inline decode_next_large(struct inflate_state *state,
         * first actual symbol in the long code list.*/
        next_sym = huff_code->short_code_lookup[next_bits];
 
-       if (next_sym < 0x8000) {
+       if ((next_sym & LARGE_FLAG_BIT) == 0) {
                /* Return symbol found if next_code is a complete huffman code
                 * and shift in buffer over by the length of the next_code */
-               bit_count = next_sym >> 9;
+               bit_count = next_sym >> LARGE_SHORT_CODE_LEN_OFFSET;
                state->read_in >>= bit_count;
                state->read_in_length -= bit_count;
 
                if (bit_count == 0)
-                       next_sym = 0x1FF;
+                       next_sym = INVALID_SYMBOL;
 
-               return next_sym & 0x1FF;
+               *sym_count = (next_sym >> LARGE_SYM_COUNT_OFFSET) & LARGE_SYM_COUNT_MASK;
+               *next_lits = next_sym & LARGE_SHORT_SYM_MASK;
 
        } else {
-               /* If a symbol is not found, perform a linear search of the long code
+               /* If a symbol is not found, do a lookup in the long code
                 * list starting from the hint in next_sym */
-               bit_mask = (next_sym - 0x8000) >> 9;
+               bit_mask = next_sym >> LARGE_SHORT_MAX_LEN_OFFSET;
                bit_mask = (1 << bit_mask) - 1;
                next_bits = state->read_in & bit_mask;
                next_sym =
-                   huff_code->long_code_lookup[(next_sym & 0x1FF) +
+                   huff_code->long_code_lookup[(next_sym & LARGE_SHORT_SYM_MASK) +
                                                (next_bits >> ISAL_DECODE_LONG_BITS)];
-               bit_count = next_sym >> 9;
+               bit_count = next_sym >> LARGE_LONG_CODE_LEN_OFFSET;
                state->read_in >>= bit_count;
                state->read_in_length -= bit_count;
 
                if (bit_count == 0)
-                       next_sym = 0x1FF;
-
-               return next_sym & 0x1FF;
+                       next_sym = INVALID_SYMBOL;
 
+               *sym_count = 1;
+               *next_lits = next_sym & LARGE_LONG_SYM_MASK;
        }
 }
 
-static uint16_t inline decode_next_small(struct inflate_state *state,
-                                        struct inflate_huff_code_small *huff_code)
+static uint16_t inline decode_next_dist(struct inflate_state *state,
+                                       struct inflate_huff_code_small *huff_code)
 {
        uint16_t next_bits;
        uint16_t next_sym;
@@ -606,91 +1077,171 @@ static uint16_t inline decode_next_small(struct inflate_state *state,
         * first actual symbol in the long code list.*/
        next_sym = huff_code->short_code_lookup[next_bits];
 
-       if (next_sym < 0x8000) {
+       if ((next_sym & SMALL_FLAG_BIT) == 0) {
                /* Return symbol found if next_code is a complete huffman code
                 * and shift in buffer over by the length of the next_code */
-               bit_count = next_sym >> 9;
+               bit_count = next_sym >> SMALL_SHORT_CODE_LEN_OFFSET;
                state->read_in >>= bit_count;
                state->read_in_length -= bit_count;
 
-               if (bit_count == 0)
-                       next_sym = 0x1FF;
+               if (bit_count == 0) {
+                       state->read_in_length -= next_sym;
+                       next_sym = INVALID_SYMBOL;
+               }
 
-               return next_sym & 0x1FF;
+               return next_sym & DIST_SYM_MASK;
 
        } else {
                /* If a symbol is not found, perform a linear search of the long code
                 * list starting from the hint in next_sym */
-               bit_mask = (next_sym - 0x8000) >> 9;
+               bit_mask = (next_sym - SMALL_FLAG_BIT) >> SMALL_SHORT_CODE_LEN_OFFSET;
                bit_mask = (1 << bit_mask) - 1;
                next_bits = state->read_in & bit_mask;
                next_sym =
-                   huff_code->long_code_lookup[(next_sym & 0x1FF) +
+                   huff_code->long_code_lookup[(next_sym & SMALL_SHORT_SYM_MASK) +
                                                (next_bits >> ISAL_DECODE_SHORT_BITS)];
-               bit_count = next_sym >> 9;
+               bit_count = next_sym >> SMALL_LONG_CODE_LEN_OFFSET;
                state->read_in >>= bit_count;
                state->read_in_length -= bit_count;
-               return next_sym & 0x1FF;
 
+               if (bit_count == 0) {
+                       state->read_in_length -= next_sym;
+                       next_sym = INVALID_SYMBOL;
+               }
+
+               return next_sym & DIST_SYM_MASK;
        }
 }
 
-/* Reads data from the in_buffer and sets the huff code corresponding to that
- * data */
-static int inline setup_dynamic_header(struct inflate_state *state)
+static uint16_t inline decode_next_header(struct inflate_state *state,
+                                         struct inflate_huff_code_small *huff_code)
 {
-       int i, j;
-       struct huff_code code_huff[CODE_LEN_CODES];
-       struct huff_code lit_and_dist_huff[LIT_LEN + DIST_LEN];
-       struct huff_code *previous = NULL, *current, *end;
-       struct inflate_huff_code_small inflate_code_huff;
-       uint8_t hclen, hdist, hlit;
-       uint16_t code_count[16], lit_count[16], dist_count[16];
-       uint16_t *count;
-       uint16_t symbol;
+       uint16_t next_bits;
+       uint16_t next_sym;
+       uint32_t bit_count;
+       uint32_t bit_mask;
 
-       /* This order is defined in RFC 1951 page 13 */
-       const uint8_t code_length_code_order[CODE_LEN_CODES] = {
+       if (state->read_in_length <= ISAL_DEF_MAX_CODE_LEN)
+               inflate_in_load(state, 0);
+
+       next_bits = state->read_in & ((1 << ISAL_DECODE_SHORT_BITS) - 1);
+
+       /* next_sym is a possible symbol decoded from next_bits. If bit 15 is 0,
+        * next_code is a symbol. Bits 9:0 represent the symbol, and bits 14:10
+        * represent the length of that symbols huffman code. If next_sym is not
+        * a symbol, it provides a hint of where the large symbols containin
+        * this code are located. Note the hint is at largest the location the
+        * first actual symbol in the long code list.*/
+       next_sym = huff_code->short_code_lookup[next_bits];
+
+       if ((next_sym & SMALL_FLAG_BIT) == 0) {
+               /* Return symbol found if next_code is a complete huffman code
+                * and shift in buffer over by the length of the next_code */
+               bit_count = next_sym >> SMALL_SHORT_CODE_LEN_OFFSET;
+               state->read_in >>= bit_count;
+               state->read_in_length -= bit_count;
+
+               if (bit_count == 0)
+                       next_sym = INVALID_SYMBOL;
+
+               return next_sym & SMALL_SHORT_SYM_MASK;
+
+       } else {
+               /* If a symbol is not found, perform a linear search of the long code
+                * list starting from the hint in next_sym */
+               bit_mask = (next_sym - SMALL_FLAG_BIT) >> SMALL_SHORT_CODE_LEN_OFFSET;
+               bit_mask = (1 << bit_mask) - 1;
+               next_bits = state->read_in & bit_mask;
+               next_sym =
+                   huff_code->long_code_lookup[(next_sym & SMALL_SHORT_SYM_MASK) +
+                                               (next_bits >> ISAL_DECODE_SHORT_BITS)];
+               bit_count = next_sym >> SMALL_LONG_CODE_LEN_OFFSET;
+               state->read_in >>= bit_count;
+               state->read_in_length -= bit_count;
+               return next_sym & SMALL_LONG_SYM_MASK;
+
+       }
+}
+
+/* Reads data from the in_buffer and sets the huff code corresponding to that
+ * data */
+static int inline setup_dynamic_header(struct inflate_state *state)
+{
+       int i, j;
+       struct huff_code code_huff[CODE_LEN_CODES];
+       struct huff_code lit_and_dist_huff[LIT_LEN_ELEMS];
+       struct huff_code *previous = NULL, *current, *end, rep_code;
+       struct inflate_huff_code_small inflate_code_huff;
+       uint64_t hclen, hdist, hlit;
+       uint16_t code_count[16], lit_count[MAX_LIT_LEN_COUNT],
+           lit_expand_count[MAX_LIT_LEN_COUNT], dist_count[16];
+       uint16_t *count;
+       uint16_t symbol;
+       uint32_t multisym = DEFAULT_SYM_FLAG, length, max_dist = DIST_LEN;
+       struct huff_code *code;
+       uint64_t flag = 0;
+
+       int extra_count;
+       uint32_t code_list[LIT_LEN_ELEMS + 2];  /* The +2 is for the extra codes in the static header */
+
+       /* This order is defined in RFC 1951 page 13 */
+       const uint8_t code_length_order[CODE_LEN_CODES] = {
                0x10, 0x11, 0x12, 0x00, 0x08, 0x07, 0x09, 0x06,
-               0x0a, 0x05, 0x0b, 0x04, 0x0c, 0x03, 0x0d, 0x02,
-               0x0e, 0x01, 0x0f
+               0x0a, 0x05, 0x0b, 0x04, 0x0c, 0x03, 0x0d, 0x02, 0x0e, 0x01, 0x0f
        };
 
+       if (state->bfinal && state->avail_in <= SINGLE_SYM_THRESH) {
+               multisym = SINGLE_SYM_FLAG;
+       } else if (state->bfinal && state->avail_in <= DOUBLE_SYM_THRESH) {
+               multisym = DOUBLE_SYM_FLAG;
+       }
+
        memset(code_count, 0, sizeof(code_count));
        memset(lit_count, 0, sizeof(lit_count));
+       memset(lit_expand_count, 0, sizeof(lit_expand_count));
        memset(dist_count, 0, sizeof(dist_count));
        memset(code_huff, 0, sizeof(code_huff));
        memset(lit_and_dist_huff, 0, sizeof(lit_and_dist_huff));
 
        /* These variables are defined in the deflate standard, RFC 1951 */
-       hlit = inflate_in_read_bits(state, 5);
-       hdist = inflate_in_read_bits(state, 5);
-       hclen = inflate_in_read_bits(state, 4);
+       inflate_in_load(state, 0);
+       if (state->read_in_length < 14)
+               return ISAL_END_INPUT;
+
+       hlit = inflate_in_read_bits_unsafe(state, 5);
+       hdist = inflate_in_read_bits_unsafe(state, 5);
+       hclen = inflate_in_read_bits_unsafe(state, 4);
 
        if (hlit > 29 || hdist > 29 || hclen > 15)
                return ISAL_INVALID_BLOCK;
 
        /* Create the code huffman code for decoding the lit/len and dist huffman codes */
-       for (i = 0; i < hclen + 4; i++) {
-               code_huff[code_length_code_order[i]].length = inflate_in_read_bits(state, 3);
-
-               code_count[code_huff[code_length_code_order[i]].length] += 1;
+       for (i = 0; i < 4; i++) {
+               code = &code_huff[code_length_order[i]];
+               length = inflate_in_read_bits_unsafe(state, 3);
+               write_huff_code(code, 0, length);
+               code_count[length] += 1;
+               flag |= length;
        }
 
-       /* Check that the code huffman code has a symbol */
-       for (i = 1; i < 16; i++) {
-               if (code_count[i] != 0)
-                       break;
+       inflate_in_load(state, 0);
+
+       for (i = 4; i < hclen + 4; i++) {
+               code = &code_huff[code_length_order[i]];
+               length = inflate_in_read_bits_unsafe(state, 3);
+               write_huff_code(code, 0, length);
+               code_count[length] += 1;
+               flag |= length;
        }
 
        if (state->read_in_length < 0)
                return ISAL_END_INPUT;
 
-       if (i == 16)
+       if (!flag || set_codes(code_huff, CODE_LEN_CODES, code_count))
                return ISAL_INVALID_BLOCK;
 
-       make_inflate_huff_code_small(&inflate_code_huff, code_huff, CODE_LEN_CODES,
-                                    code_count, CODE_LEN_CODES);
+       make_inflate_huff_code_header(&inflate_code_huff, code_huff, CODE_LEN_CODES,
+                                     code_count, CODE_LEN_CODES);
 
        /* Decode the lit/len and dist huffman codes using the code huffman code */
        count = lit_count;
@@ -698,17 +1249,7 @@ static int inline setup_dynamic_header(struct inflate_state *state)
        end = lit_and_dist_huff + LIT_LEN + hdist + 1;
 
        while (current < end) {
-               /* If finished decoding the lit/len huffman code, start decoding
-                * the distance code these decodings are in the same loop
-                * because the len/lit and dist huffman codes are run length
-                * encoded together. */
-               if (current == lit_and_dist_huff + 257 + hlit)
-                       current = lit_and_dist_huff + LIT_LEN;
-
-               if (current == lit_and_dist_huff + LIT_LEN)
-                       count = dist_count;
-
-               symbol = decode_next_small(state, &inflate_code_huff);
+               symbol = decode_next_header(state, &inflate_code_huff);
 
                if (state->read_in_length < 0) {
                        if (current > &lit_and_dist_huff[256]
@@ -720,51 +1261,79 @@ static int inline setup_dynamic_header(struct inflate_state *state)
                if (symbol < 16) {
                        /* If a length is found, update the current lit/len/dist
                         * to have length symbol */
+                       if (current == lit_and_dist_huff + LIT_TABLE_SIZE + hlit) {
+                               /* Switch code upon completion of lit_len table */
+                               current = lit_and_dist_huff + LIT_LEN;
+                               count = dist_count;
+                       }
                        count[symbol]++;
-                       current->length = symbol;
+                       write_huff_code(current, 0, symbol);
                        previous = current;
                        current++;
 
+                       if (symbol == 0 // No symbol
+                           || (previous >= lit_and_dist_huff + LIT_TABLE_SIZE + hlit)  // Dist table
+                           || (previous < lit_and_dist_huff + 264))    // Lit/Len with no extra bits
+                               continue;
+
+                       extra_count =
+                           rfc_lookup_table.len_extra_bit_count[previous - LIT_TABLE_SIZE -
+                                                                lit_and_dist_huff];
+                       lit_expand_count[symbol]--;
+                       lit_expand_count[symbol + extra_count] += (1 << extra_count);
+
                } else if (symbol == 16) {
                        /* If a repeat length is found, update the next repeat
                         * length lit/len/dist elements to have the value of the
                         * repeated length */
-                       if (previous == NULL)   /* No elements available to be repeated */
-                               return ISAL_INVALID_BLOCK;
 
                        i = 3 + inflate_in_read_bits(state, 2);
 
-                       if (current + i > end)
+                       if (current + i > end || previous == NULL)
                                return ISAL_INVALID_BLOCK;
 
+                       rep_code = *previous;
                        for (j = 0; j < i; j++) {
-                               *current = *previous;
-                               count[current->length]++;
-                               previous = current;
-
-                               if (current == lit_and_dist_huff + 256 + hlit) {
+                               if (current == lit_and_dist_huff + LIT_TABLE_SIZE + hlit) {
+                                       /* Switch code upon completion of lit_len table */
                                        current = lit_and_dist_huff + LIT_LEN;
                                        count = dist_count;
+                               }
 
-                               } else
-                                       current++;
-                       }
+                               *current = rep_code;
+                               count[rep_code.length]++;
+                               previous = current;
+                               current++;
+
+                               if (rep_code.length == 0        // No symbol
+                                   || (previous >= lit_and_dist_huff + LIT_TABLE_SIZE + hlit)  // Dist table
+                                   || (previous < lit_and_dist_huff + 264))    // Lit/Len with no extra
+                                       continue;
+
+                               extra_count =
+                                   rfc_lookup_table.len_extra_bit_count
+                                   [previous - lit_and_dist_huff - LIT_TABLE_SIZE];
+                               lit_expand_count[rep_code.length]--;
+                               lit_expand_count[rep_code.length +
+                                                extra_count] += (1 << extra_count);
 
+                       }
                } else if (symbol == 17) {
                        /* If a repeat zeroes if found, update then next
                         * repeated zeroes length lit/len/dist elements to have
                         * length 0. */
                        i = 3 + inflate_in_read_bits(state, 3);
 
-                       for (j = 0; j < i; j++) {
-                               previous = current;
+                       current = current + i;
+                       previous = current - 1;
 
-                               if (current == lit_and_dist_huff + 256 + hlit) {
-                                       current = lit_and_dist_huff + LIT_LEN;
-                                       count = dist_count;
-
-                               } else
-                                       current++;
+                       if (count != dist_count
+                           && current > lit_and_dist_huff + LIT_TABLE_SIZE + hlit) {
+                               /* Switch code upon completion of lit_len table */
+                               current += LIT_LEN - LIT_TABLE_SIZE - hlit;
+                               count = dist_count;
+                               if (current > lit_and_dist_huff + LIT_LEN)
+                                       previous = current - 1;
                        }
 
                } else if (symbol == 18) {
@@ -773,16 +1342,18 @@ static int inline setup_dynamic_header(struct inflate_state *state)
                         * length 0. */
                        i = 11 + inflate_in_read_bits(state, 7);
 
-                       for (j = 0; j < i; j++) {
-                               previous = current;
+                       current = current + i;
+                       previous = current - 1;
 
-                               if (current == lit_and_dist_huff + 256 + hlit) {
-                                       current = lit_and_dist_huff + LIT_LEN;
-                                       count = dist_count;
-
-                               } else
-                                       current++;
+                       if (count != dist_count
+                           && current > lit_and_dist_huff + LIT_TABLE_SIZE + hlit) {
+                               /* Switch code upon completion of lit_len table */
+                               current += LIT_LEN - LIT_TABLE_SIZE - hlit;
+                               count = dist_count;
+                               if (current > lit_and_dist_huff + LIT_LEN)
+                                       previous = current - 1;
                        }
+
                } else
                        return ISAL_INVALID_BLOCK;
 
@@ -794,10 +1365,21 @@ static int inline setup_dynamic_header(struct inflate_state *state)
        if (state->read_in_length < 0)
                return ISAL_END_INPUT;
 
-       make_inflate_huff_code_large(&state->lit_huff_code, lit_and_dist_huff, LIT_LEN,
-                                    lit_count, LIT_LEN);
-       make_inflate_huff_code_small(&state->dist_huff_code, &lit_and_dist_huff[LIT_LEN],
-                                    DIST_LEN, dist_count, DIST_LEN);
+       if (set_codes(&lit_and_dist_huff[LIT_LEN], DIST_LEN, dist_count))
+               return ISAL_INVALID_BLOCK;
+
+       if (state->hist_bits && state->hist_bits < 15)
+               max_dist = 2 * state->hist_bits;
+
+       make_inflate_huff_code_dist(&state->dist_huff_code, &lit_and_dist_huff[LIT_LEN],
+                                   DIST_LEN, dist_count, max_dist);
+
+       if (set_and_expand_lit_len_huffcode
+           (lit_and_dist_huff, LIT_LEN, lit_count, lit_expand_count, code_list))
+               return ISAL_INVALID_BLOCK;
+
+       make_inflate_huff_code_lit_len(&state->lit_huff_code, lit_and_dist_huff, LIT_LEN_ELEMS,
+                                      lit_count, code_list, multisym);
 
        state->block_state = ISAL_BLOCK_CODED;
 
@@ -806,7 +1388,7 @@ static int inline setup_dynamic_header(struct inflate_state *state)
 
 /* Reads in the header pointed to by in_stream and sets up state to reflect that
  * header information*/
-int read_header(struct inflate_state *state)
+static int read_header(struct inflate_state *state)
 {
        uint8_t bytes;
        uint32_t btype;
@@ -839,13 +1421,6 @@ int read_header(struct inflate_state *state)
                state->read_in >>= 16;
                state->read_in_length -= 32;
 
-               bytes = state->read_in_length / 8;
-
-               state->next_in -= bytes;
-               state->avail_in += bytes;
-               state->read_in = 0;
-               state->read_in_length = 0;
-
                /* Check if len and nlen match */
                if (len != (~nlen & 0xffff))
                        return ISAL_INVALID_BLOCK;
@@ -869,7 +1444,7 @@ int read_header(struct inflate_state *state)
 
 /* Reads in the header pointed to by in_stream and sets up state to reflect that
  * header information*/
-int read_header_stateful(struct inflate_state *state)
+static int read_header_stateful(struct inflate_state *state)
 {
        uint64_t read_in_start = state->read_in;
        int32_t read_in_length_start = state->read_in_length;
@@ -922,21 +1497,48 @@ int read_header_stateful(struct inflate_state *state)
 static int inline decode_literal_block(struct inflate_state *state)
 {
        uint32_t len = state->type0_block_len;
+       uint32_t bytes = state->read_in_length / 8;
        /* If the block is uncompressed, perform a memcopy while
         * updating state data */
-
-       state->block_state = ISAL_BLOCK_NEW_HDR;
+       state->block_state = state->bfinal ? ISAL_BLOCK_INPUT_DONE : ISAL_BLOCK_NEW_HDR;
 
        if (state->avail_out < len) {
                len = state->avail_out;
                state->block_state = ISAL_BLOCK_TYPE0;
        }
 
-       if (state->avail_in < len) {
-               len = state->avail_in;
+       if (state->avail_in + bytes < len) {
+               len = state->avail_in + bytes;
                state->block_state = ISAL_BLOCK_TYPE0;
        }
-
+       if (state->read_in_length) {
+               if (len >= bytes) {
+                       memcpy(state->next_out, &state->read_in, bytes);
+
+                       state->next_out += bytes;
+                       state->avail_out -= bytes;
+                       state->total_out += bytes;
+                       state->type0_block_len -= bytes;
+
+                       state->read_in = 0;
+                       state->read_in_length = 0;
+                       len -= bytes;
+                       bytes = 0;
+
+               } else {
+                       memcpy(state->next_out, &state->read_in, len);
+
+                       state->next_out += len;
+                       state->avail_out -= len;
+                       state->total_out += len;
+                       state->type0_block_len -= len;
+
+                       state->read_in >>= 8 * len;
+                       state->read_in_length -= 8 * len;
+                       bytes -= len;
+                       len = 0;
+               }
+       }
        memcpy(state->next_out, state->next_in, len);
 
        state->next_out += len;
@@ -946,7 +1548,7 @@ static int inline decode_literal_block(struct inflate_state *state)
        state->avail_in -= len;
        state->type0_block_len -= len;
 
-       if (state->avail_in == 0 && state->block_state != ISAL_BLOCK_NEW_HDR)
+       if (state->avail_in + bytes == 0 && state->block_state != ISAL_BLOCK_INPUT_DONE)
                return ISAL_END_INPUT;
 
        if (state->avail_out == 0 && state->type0_block_len > 0)
@@ -957,7 +1559,7 @@ static int inline decode_literal_block(struct inflate_state *state)
 }
 
 /* Decodes the next block if it was encoded using a huffman code */
-int decode_huffman_code_block_stateless_base(struct inflate_state *state)
+int decode_huffman_code_block_stateless_base(struct inflate_state *state, uint8_t * start_out)
 {
        uint16_t next_lit;
        uint8_t next_dist;
@@ -965,8 +1567,10 @@ int decode_huffman_code_block_stateless_base(struct inflate_state *state)
        uint32_t look_back_dist;
        uint64_t read_in_tmp;
        int32_t read_in_length_tmp;
-       uint8_t *next_in_tmp;
-       uint32_t avail_in_tmp;
+       uint8_t *next_in_tmp, *next_out_tmp;
+       uint32_t avail_in_tmp, avail_out_tmp, total_out_tmp;
+       uint32_t next_lits, sym_count;
+       struct rfc1951_tables *rfc = &rfc_lookup_table;
 
        state->copy_overflow_length = 0;
        state->copy_overflow_distance = 0;
@@ -980,8 +1584,14 @@ int decode_huffman_code_block_stateless_base(struct inflate_state *state)
                read_in_length_tmp = state->read_in_length;
                next_in_tmp = state->next_in;
                avail_in_tmp = state->avail_in;
+               next_out_tmp = state->next_out;
+               avail_out_tmp = state->avail_out;
+               total_out_tmp = state->total_out;
 
-               next_lit = decode_next_large(state, &state->lit_huff_code);
+               decode_next_lit_len(&next_lits, &sym_count, state, &state->lit_huff_code);
+
+               if (sym_count == 0)
+                       return ISAL_INVALID_SYMBOL;
 
                if (state->read_in_length < 0) {
                        state->read_in = read_in_tmp;
@@ -991,84 +1601,109 @@ int decode_huffman_code_block_stateless_base(struct inflate_state *state)
                        return ISAL_END_INPUT;
                }
 
-               if (next_lit < 256) {
-                       /* If the next symbol is a literal,
-                        * write out the symbol and update state
-                        * data accordingly. */
-                       if (state->avail_out < 1) {
-                               state->read_in = read_in_tmp;
-                               state->read_in_length = read_in_length_tmp;
-                               state->next_in = next_in_tmp;
-                               state->avail_in = avail_in_tmp;
-                               return ISAL_OUT_OVERFLOW;
-                       }
+               while (sym_count > 0) {
+                       next_lit = next_lits & 0xffff;
+                       if (next_lit < 256 || sym_count > 1) {
+                               /* If the next symbol is a literal,
+                                * write out the symbol and update state
+                                * data accordingly. */
+                               if (state->avail_out < 1) {
+                                       state->write_overflow_lits = next_lits;
+                                       state->write_overflow_len = sym_count;
+                                       next_lits = next_lits >> (8 * (sym_count - 1));
+                                       sym_count = 1;
+
+                                       if (next_lits < 256)
+                                               return ISAL_OUT_OVERFLOW;
+                                       else if (next_lits == 256) {
+                                               state->write_overflow_len -= 1;
+                                               state->block_state = state->bfinal ?
+                                                   ISAL_BLOCK_INPUT_DONE : ISAL_BLOCK_NEW_HDR;
+                                               return ISAL_OUT_OVERFLOW;
+                                       } else {
+                                               state->write_overflow_len -= 1;
+                                               continue;
+                                       }
+                               }
 
-                       *state->next_out = next_lit;
-                       state->next_out++;
-                       state->avail_out--;
-                       state->total_out++;
-
-               } else if (next_lit == 256) {
-                       /* If the next symbol is the end of
-                        * block, update the state data
-                        * accordingly */
-                       state->block_state = ISAL_BLOCK_NEW_HDR;
-
-               } else if (next_lit < 286) {
-                       /* Else if the next symbol is a repeat
-                        * length, read in the length extra
-                        * bits, the distance code, the distance
-                        * extra bits. Then write out the
-                        * corresponding data and update the
-                        * state data accordingly*/
-                       repeat_length =
-                           rfc_lookup_table.len_start[next_lit - 257] +
-                           inflate_in_read_bits(state,
-                                                rfc_lookup_table.len_extra_bit_count[next_lit
-                                                                                     - 257]);
-                       next_dist = decode_next_small(state, &state->dist_huff_code);
-
-                       if (next_dist >= DIST_LEN)
-                               return ISAL_INVALID_SYMBOL;
+                               *state->next_out = next_lit;
+                               state->next_out++;
+                               state->avail_out--;
+                               state->total_out++;
+
+                       } else if (next_lit == 256) {
+                               /* If the next symbol is the end of
+                                * block, update the state data
+                                * accordingly */
+                               state->block_state = state->bfinal ?
+                                   ISAL_BLOCK_INPUT_DONE : ISAL_BLOCK_NEW_HDR;
+
+                       } else if (next_lit <= MAX_LIT_LEN_SYM) {
+                               /* Else if the next symbol is a repeat
+                                * length, read in the length extra
+                                * bits, the distance code, the distance
+                                * extra bits. Then write out the
+                                * corresponding data and update the
+                                * state data accordingly*/
+                               repeat_length = next_lit - 254;
+                               next_dist = decode_next_dist(state, &state->dist_huff_code);
+
+                               if (state->read_in_length >= 0) {
+                                       if (next_dist >= DIST_LEN)
+                                               return ISAL_INVALID_SYMBOL;
+
+                                       look_back_dist = rfc->dist_start[next_dist] +
+                                           inflate_in_read_bits(state,
+                                                                rfc->dist_extra_bit_count
+                                                                [next_dist]);
+                               }
 
-                       look_back_dist = rfc_lookup_table.dist_start[next_dist] +
-                           inflate_in_read_bits(state,
-                                                rfc_lookup_table.dist_extra_bit_count
-                                                [next_dist]);
-
-                       if (state->read_in_length < 0) {
-                               state->read_in = read_in_tmp;
-                               state->read_in_length = read_in_length_tmp;
-                               state->next_in = next_in_tmp;
-                               state->avail_in = avail_in_tmp;
-                               return ISAL_END_INPUT;
-                       }
+                               if (state->read_in_length < 0) {
+                                       state->read_in = read_in_tmp;
+                                       state->read_in_length = read_in_length_tmp;
+                                       state->next_in = next_in_tmp;
+                                       state->avail_in = avail_in_tmp;
+                                       state->next_out = next_out_tmp;
+                                       state->avail_out = avail_out_tmp;
+                                       state->total_out = total_out_tmp;
+                                       state->write_overflow_lits = 0;
+                                       state->write_overflow_len = 0;
+                                       return ISAL_END_INPUT;
+                               }
 
-                       if (look_back_dist > state->total_out)
-                               return ISAL_INVALID_LOOKBACK;
+                               if (state->next_out - look_back_dist < start_out)
+                                       return ISAL_INVALID_LOOKBACK;
 
-                       if (state->avail_out < repeat_length) {
-                               state->copy_overflow_length = repeat_length - state->avail_out;
-                               state->copy_overflow_distance = look_back_dist;
-                               repeat_length = state->avail_out;
-                       }
+                               if (state->avail_out < repeat_length) {
+                                       state->copy_overflow_length =
+                                           repeat_length - state->avail_out;
+                                       state->copy_overflow_distance = look_back_dist;
+                                       repeat_length = state->avail_out;
+                               }
 
-                       if (look_back_dist > repeat_length)
-                               memcpy(state->next_out,
-                                      state->next_out - look_back_dist, repeat_length);
-                       else
-                               byte_copy(state->next_out, look_back_dist, repeat_length);
+                               if (look_back_dist > repeat_length)
+                                       memcpy(state->next_out,
+                                              state->next_out - look_back_dist,
+                                              repeat_length);
+                               else
+                                       byte_copy(state->next_out, look_back_dist,
+                                                 repeat_length);
+
+                               state->next_out += repeat_length;
+                               state->avail_out -= repeat_length;
+                               state->total_out += repeat_length;
+
+                               if (state->copy_overflow_length > 0)
+                                       return ISAL_OUT_OVERFLOW;
+                       } else
+                               /* Else the read in bits do not
+                                * correspond to any valid symbol */
+                               return ISAL_INVALID_SYMBOL;
 
-                       state->next_out += repeat_length;
-                       state->avail_out -= repeat_length;
-                       state->total_out += repeat_length;
+                       next_lits >>= 8;
+                       sym_count--;
+               }
 
-                       if (state->copy_overflow_length > 0)
-                               return ISAL_OUT_OVERFLOW;
-               } else
-                       /* Else the read in bits do not
-                        * correspond to any valid symbol */
-                       return ISAL_INVALID_SYMBOL;
        }
        return 0;
 }
@@ -1083,18 +1718,418 @@ void isal_inflate_init(struct inflate_state *state)
        state->next_out = NULL;
        state->avail_out = 0;
        state->total_out = 0;
+       state->dict_length = 0;
        state->block_state = ISAL_BLOCK_NEW_HDR;
        state->bfinal = 0;
        state->crc_flag = 0;
        state->crc = 0;
+       state->hist_bits = 0;
        state->type0_block_len = 0;
+       state->write_overflow_lits = 0;
+       state->write_overflow_len = 0;
        state->copy_overflow_length = 0;
        state->copy_overflow_distance = 0;
+       state->wrapper_flag = 0;
        state->tmp_in_size = 0;
        state->tmp_out_processed = 0;
        state->tmp_out_valid = 0;
 }
 
+void isal_inflate_reset(struct inflate_state *state)
+{
+       state->read_in = 0;
+       state->read_in_length = 0;
+       state->total_out = 0;
+       state->dict_length = 0;
+       state->block_state = ISAL_BLOCK_NEW_HDR;
+       state->bfinal = 0;
+       state->crc = 0;
+       state->type0_block_len = 0;
+       state->write_overflow_lits = 0;
+       state->write_overflow_len = 0;
+       state->copy_overflow_length = 0;
+       state->copy_overflow_distance = 0;
+       state->tmp_in_size = 0;
+       state->tmp_out_processed = 0;
+       state->tmp_out_valid = 0;
+}
+
+static inline uint32_t fixed_size_read(struct inflate_state *state,
+                                      uint8_t ** read_buf, int read_size)
+{
+       uint32_t tmp_in_size = state->tmp_in_size;
+
+       if (state->avail_in + tmp_in_size < read_size) {
+               memcpy(state->tmp_in_buffer + tmp_in_size, state->next_in, state->avail_in);
+               tmp_in_size += state->avail_in;
+               state->tmp_in_size = tmp_in_size;
+               state->next_in += state->avail_in;
+               state->avail_in = 0;
+
+               return ISAL_END_INPUT;
+       }
+
+       *read_buf = state->next_in;
+       if (tmp_in_size) {
+               memcpy(state->tmp_in_buffer + tmp_in_size, state->next_in,
+                      read_size - tmp_in_size);
+               *read_buf = state->tmp_in_buffer;
+               state->tmp_in_size = 0;
+       }
+
+       state->next_in += read_size - tmp_in_size;
+       state->avail_in -= read_size - tmp_in_size;
+       tmp_in_size = 0;
+
+       return 0;
+
+}
+
+static inline uint32_t buffer_header_copy(struct inflate_state *state, uint32_t in_len,
+                                         uint8_t * buf, uint32_t buf_len, uint32_t buf_error)
+{
+       uint32_t len = in_len;
+       if (len > state->avail_in)
+               len = state->avail_in;
+
+       if (buf != NULL && buf_len < len) {
+               memcpy(buf, state->next_in, buf_len);
+               state->next_in += buf_len;
+               state->avail_in -= buf_len;
+               state->count = in_len - buf_len;
+               return buf_error;
+       } else {
+               if (buf != NULL)
+                       memcpy(buf, state->next_in, len);
+               state->next_in += len;
+               state->avail_in -= len;
+               state->count = in_len - len;
+
+               if (len == in_len)
+                       return 0;
+               else
+                       return ISAL_END_INPUT;
+       }
+}
+
+static inline uint32_t string_header_copy(struct inflate_state *state,
+                                         char *str_buf, uint32_t str_len, uint32_t str_error)
+{
+       uint32_t len, max_len = str_len;
+
+       if (max_len > state->avail_in || str_buf == NULL)
+               max_len = state->avail_in;
+
+       len = strnlen((char *)state->next_in, max_len);
+
+       if (str_buf != NULL)
+               memcpy(str_buf, state->next_in, len);
+
+       state->next_in += len;
+       state->avail_in -= len;
+       state->count += len;
+
+       if (str_buf != NULL && len == str_len)
+               return str_error;
+       else if (state->avail_in <= 0)
+               return ISAL_END_INPUT;
+       else {
+               state->next_in++;
+               state->avail_in--;
+               state->count = 0;
+               if (str_buf != NULL)
+                       str_buf[len] = 0;
+       }
+
+       return 0;
+}
+
+static int check_gzip_checksum(struct inflate_state *state)
+{
+       uint64_t trailer, crc, total_out;
+       uint8_t *next_in;
+       uint32_t byte_count, offset, tmp_in_size = state->tmp_in_size;
+       int ret;
+
+       if (state->read_in_length >= 8 * GZIP_TRAILER_LEN) {
+               /* The following is unecessary as state->read_in_length == 64 */
+               /* bit_count = state->read_in_length % 8; */
+               /* state->read_in >>= bit_count; */
+               /* state->read_in_length -= bit_count; */
+
+               trailer = state->read_in;
+               state->read_in_length = 0;
+               state->read_in = 0;
+       } else {
+               if (state->read_in_length >= 8) {
+                       byte_count = state->read_in_length / 8;
+                       offset = state->read_in_length % 8;
+
+                       store_u64(state->tmp_in_buffer + tmp_in_size,
+                                 state->read_in >> offset);
+                       state->read_in = 0;
+                       state->read_in_length = 0;
+
+                       tmp_in_size += byte_count;
+                       state->tmp_in_size = tmp_in_size;
+               }
+
+               ret = fixed_size_read(state, &next_in, GZIP_TRAILER_LEN);
+               if (ret) {
+                       state->block_state = ISAL_CHECKSUM_CHECK;
+                       return ret;
+               }
+
+               trailer = load_u64(next_in);
+       }
+
+       state->block_state = ISAL_BLOCK_FINISH;
+
+       crc = state->crc;
+       total_out = state->total_out;
+
+       if (trailer != (crc | (total_out << 32)))
+               return ISAL_INCORRECT_CHECKSUM;
+       else
+               return ISAL_DECOMP_OK;
+}
+
+static int check_zlib_checksum(struct inflate_state *state)
+{
+
+       uint32_t trailer;
+       uint8_t *next_in;
+       uint32_t byte_count, offset, tmp_in_size = state->tmp_in_size;
+       int ret, bit_count;
+
+       if (state->read_in_length >= 8 * ZLIB_TRAILER_LEN) {
+               bit_count = state->read_in_length % 8;
+               state->read_in >>= bit_count;
+               state->read_in_length -= bit_count;
+
+               trailer = state->read_in;
+
+               state->read_in_length -= 8 * ZLIB_TRAILER_LEN;
+               state->read_in >>= 8 * ZLIB_TRAILER_LEN;
+       } else {
+               if (state->read_in_length >= 8) {
+                       byte_count = state->read_in_length / 8;
+                       offset = state->read_in_length % 8;
+
+                       store_u64(state->tmp_in_buffer + tmp_in_size,
+                                 state->read_in >> offset);
+                       state->read_in = 0;
+                       state->read_in_length = 0;
+
+                       tmp_in_size += byte_count;
+                       state->tmp_in_size = tmp_in_size;
+               }
+
+               ret = fixed_size_read(state, &next_in, ZLIB_TRAILER_LEN);
+               if (ret) {
+                       state->block_state = ISAL_CHECKSUM_CHECK;
+                       return ret;
+               }
+
+               trailer = load_u32(next_in);
+       }
+
+       state->block_state = ISAL_BLOCK_FINISH;
+
+       if (bswap_32(trailer) != state->crc)
+               return ISAL_INCORRECT_CHECKSUM;
+       else
+               return ISAL_DECOMP_OK;
+}
+
+int isal_read_gzip_header(struct inflate_state *state, struct isal_gzip_header *gz_hdr)
+{
+       int cm, flags = gz_hdr->flags, id1, id2;
+       uint16_t xlen = gz_hdr->extra_len;
+       uint32_t block_state = state->block_state;
+       uint8_t *start_in = state->next_in, *next_in;
+       uint32_t tmp_in_size = state->tmp_in_size;
+       uint32_t count = state->count, offset;
+       uint32_t hcrc = gz_hdr->hcrc;
+       int ret = 0;
+
+       /* This switch is a jump table into the function so that decoding the
+        * header can continue where it stopped on the last call */
+       switch (block_state) {
+       case ISAL_BLOCK_NEW_HDR:
+               state->count = 0;
+               flags = UNDEFINED_FLAG;
+               if (tmp_in_size == 0)
+                       hcrc = 0;
+
+               ret = fixed_size_read(state, &next_in, GZIP_HDR_BASE);
+               if (ret)
+                       break;
+
+               id1 = next_in[0];
+               id2 = next_in[1];
+               cm = next_in[2];
+               flags = next_in[3];
+               gz_hdr->time = load_u32(next_in + 4);
+               gz_hdr->xflags = *(next_in + 8);
+               gz_hdr->os = *(next_in + 9);
+
+               if (id1 != 0x1f || id2 != 0x8b)
+                       return ISAL_INVALID_WRAPPER;
+
+               if (cm != DEFLATE_METHOD)
+                       return ISAL_UNSUPPORTED_METHOD;
+
+               gz_hdr->text = 0;
+               if (flags & TEXT_FLAG)
+                       gz_hdr->text = 1;
+
+               gz_hdr->flags = flags;
+
+               if (flags & EXTRA_FLAG) {
+       case ISAL_GZIP_EXTRA_LEN:
+                       ret = fixed_size_read(state, &next_in, GZIP_EXTRA_LEN);
+                       if (ret) {
+                               state->block_state = ISAL_GZIP_EXTRA_LEN;
+                               break;
+                       }
+
+                       xlen = load_u16(next_in);
+                       count = xlen;
+
+                       gz_hdr->extra_len = xlen;
+
+       case ISAL_GZIP_EXTRA:
+                       offset = gz_hdr->extra_len - count;
+                       ret =
+                           buffer_header_copy(state, count, gz_hdr->extra + offset,
+                                              gz_hdr->extra_buf_len - offset,
+                                              ISAL_EXTRA_OVERFLOW);
+
+                       if (ret) {
+                               state->block_state = ISAL_GZIP_EXTRA;
+                               break;
+                       }
+               } else {
+                       gz_hdr->extra_len = 0;
+               }
+
+               if (flags & NAME_FLAG) {
+       case ISAL_GZIP_NAME:
+                       offset = state->count;
+                       ret = string_header_copy(state, gz_hdr->name + offset,
+                                                gz_hdr->name_buf_len - offset,
+                                                ISAL_NAME_OVERFLOW);
+                       if (ret) {
+                               state->block_state = ISAL_GZIP_NAME;
+                               break;
+                       }
+               }
+
+               if (flags & COMMENT_FLAG) {
+       case ISAL_GZIP_COMMENT:
+                       offset = state->count;
+                       ret = string_header_copy(state, gz_hdr->comment + offset,
+                                                gz_hdr->comment_buf_len - offset,
+                                                ISAL_COMMENT_OVERFLOW);
+                       if (ret) {
+                               state->block_state = ISAL_GZIP_COMMENT;
+                               break;
+                       }
+               }
+
+               if (flags & HCRC_FLAG) {
+                       hcrc = crc32_gzip_refl(hcrc, start_in, state->next_in - start_in);
+                       gz_hdr->hcrc = hcrc;
+
+       case ISAL_GZIP_HCRC:
+                       ret = fixed_size_read(state, &next_in, GZIP_HCRC_LEN);
+                       if (ret) {
+                               state->block_state = ISAL_GZIP_HCRC;
+                               return ret;
+                       }
+
+                       if ((hcrc & 0xffff) != load_u16(next_in))
+                               return ISAL_INCORRECT_CHECKSUM;
+               }
+
+               state->wrapper_flag = 1;
+               state->block_state = ISAL_BLOCK_NEW_HDR;
+               return ISAL_DECOMP_OK;
+       }
+
+       if (flags & HCRC_FLAG)
+               gz_hdr->hcrc = crc32_gzip_refl(hcrc, start_in, state->next_in - start_in);
+
+       return ret;
+}
+
+int isal_read_zlib_header(struct inflate_state *state, struct isal_zlib_header *zlib_hdr)
+{
+       int cmf, method, flags;
+       uint32_t block_state = state->block_state;
+       uint8_t *next_in;
+       int ret = 0;
+
+       switch (block_state) {
+       case ISAL_BLOCK_NEW_HDR:
+               zlib_hdr->dict_flag = 0;
+               ret = fixed_size_read(state, &next_in, ZLIB_HDR_BASE);
+               if (ret)
+                       break;
+
+               cmf = *next_in;
+               method = cmf & 0xf;
+               flags = *(next_in + 1);
+
+               zlib_hdr->info = cmf >> ZLIB_INFO_OFFSET;
+               zlib_hdr->dict_flag = (flags & ZLIB_DICT_FLAG) ? 1 : 0;
+               zlib_hdr->level = flags >> ZLIB_LEVEL_OFFSET;
+
+               if (method != DEFLATE_METHOD)
+                       return ISAL_UNSUPPORTED_METHOD;
+
+               if ((256 * cmf + flags) % 31 != 0)
+                       return ISAL_INCORRECT_CHECKSUM;
+
+               if (zlib_hdr->dict_flag) {
+       case ISAL_ZLIB_DICT:
+                       ret = fixed_size_read(state, &next_in, ZLIB_DICT_LEN);
+                       if (ret) {
+                               state->block_state = ISAL_ZLIB_DICT;
+                               break;
+                       }
+
+                       zlib_hdr->dict_id = load_u32(next_in);
+               }
+
+               state->wrapper_flag = 1;
+               state->block_state = ISAL_BLOCK_NEW_HDR;
+       }
+
+       return ret;
+}
+
+int isal_inflate_set_dict(struct inflate_state *state, uint8_t * dict, uint32_t dict_len)
+{
+
+       if (state->block_state != ISAL_BLOCK_NEW_HDR
+           || state->tmp_out_processed != state->tmp_out_valid)
+               return ISAL_INVALID_STATE;
+
+       if (dict_len > IGZIP_HIST_SIZE) {
+               dict = dict + dict_len - IGZIP_HIST_SIZE;
+               dict_len = IGZIP_HIST_SIZE;
+       }
+
+       memcpy(state->tmp_out_buffer, dict, dict_len);
+       state->tmp_out_processed = dict_len;
+       state->tmp_out_valid = dict_len;
+       state->dict_length = dict_len;
+
+       return COMP_OK;
+}
+
 int isal_inflate_stateless(struct inflate_state *state)
 {
        uint32_t ret = 0;
@@ -1103,9 +2138,27 @@ int isal_inflate_stateless(struct inflate_state *state)
        state->read_in = 0;
        state->read_in_length = 0;
        state->block_state = ISAL_BLOCK_NEW_HDR;
+       state->dict_length = 0;
        state->bfinal = 0;
        state->crc = 0;
        state->total_out = 0;
+       state->hist_bits = 0;
+       state->tmp_in_size = 0;
+
+       if (state->crc_flag == IGZIP_GZIP) {
+               struct isal_gzip_header gz_hdr;
+               ret = isal_read_gzip_header(state, &gz_hdr);
+               if (ret)
+                       return ret;
+       } else if (state->crc_flag == IGZIP_ZLIB) {
+               struct isal_zlib_header z_hdr;
+               ret = isal_read_zlib_header(state, &z_hdr);
+               if (ret)
+                       return ret;
+               if (z_hdr.dict_flag)
+                       return ISAL_NEED_DICT;
+
+       }
 
        while (state->block_state != ISAL_BLOCK_FINISH) {
                if (state->block_state == ISAL_BLOCK_NEW_HDR) {
@@ -1118,20 +2171,39 @@ int isal_inflate_stateless(struct inflate_state *state)
                if (state->block_state == ISAL_BLOCK_TYPE0)
                        ret = decode_literal_block(state);
                else
-                       ret = decode_huffman_code_block_stateless(state);
+                       ret = decode_huffman_code_block_stateless(state, start_out);
 
                if (ret)
                        break;
-               if (state->bfinal != 0 && state->block_state == ISAL_BLOCK_NEW_HDR)
+               if (state->block_state == ISAL_BLOCK_INPUT_DONE)
                        state->block_state = ISAL_BLOCK_FINISH;
        }
 
-       if (state->crc_flag)
-               state->crc = crc32_gzip(state->crc, start_out, state->next_out - start_out);
-
        /* Undo count stuff of bytes read into the read buffer */
        state->next_in -= state->read_in_length / 8;
        state->avail_in += state->read_in_length / 8;
+       state->read_in_length = 0;
+       state->read_in = 0;
+
+       if (!ret && state->crc_flag) {
+               update_checksum(state, start_out, state->next_out - start_out);
+               switch (state->crc_flag) {
+               case ISAL_ZLIB:
+               case ISAL_ZLIB_NO_HDR_VER:
+                       finalize_adler32(state);
+                       ret = check_zlib_checksum(state);
+                       break;
+
+               case ISAL_ZLIB_NO_HDR:
+                       finalize_adler32(state);
+                       break;
+
+               case ISAL_GZIP:
+               case ISAL_GZIP_NO_HDR_VER:
+                       ret = check_gzip_checksum(state);
+                       break;
+               }
+       }
 
        return ret;
 }
@@ -1145,7 +2217,42 @@ int isal_inflate(struct inflate_state *state)
        int32_t shift_size = 0;
        int ret = 0;
 
+       if (!state->wrapper_flag && state->crc_flag == IGZIP_GZIP) {
+               struct isal_gzip_header gz_hdr;
+               ret = isal_read_gzip_header(state, &gz_hdr);
+               if (ret < 0)
+                       return ret;
+               else if (ret > 0)
+                       return ISAL_DECOMP_OK;
+       } else if (!state->wrapper_flag && state->crc_flag == IGZIP_ZLIB) {
+               struct isal_zlib_header z_hdr;
+               ret = isal_read_zlib_header(state, &z_hdr);
+               if (ret < 0)
+                       return ret;
+               else if (ret > 0)
+                       return ISAL_DECOMP_OK;
+
+               if (z_hdr.dict_flag) {
+                       state->dict_id = z_hdr.dict_id;
+                       return ISAL_NEED_DICT;
+               }
+       } else if (state->block_state == ISAL_CHECKSUM_CHECK) {
+               switch (state->crc_flag) {
+               case ISAL_ZLIB:
+               case ISAL_ZLIB_NO_HDR_VER:
+                       ret = check_zlib_checksum(state);
+                       break;
+               case ISAL_GZIP:
+               case ISAL_GZIP_NO_HDR_VER:
+                       ret = check_gzip_checksum(state);
+                       break;
+               }
+
+               return (ret > 0) ? ISAL_DECOMP_OK : ret;
+       }
+
        if (state->block_state != ISAL_BLOCK_FINISH) {
+               state->total_out += state->tmp_out_valid - state->tmp_out_processed;
                /* If space in tmp_out buffer, decompress into the tmp_out_buffer */
                if (state->tmp_out_valid < 2 * ISAL_DEF_HIST_SIZE) {
                        /* Setup to start decoding into temp buffer */
@@ -1169,17 +2276,24 @@ int isal_inflate(struct inflate_state *state)
 
                                if (state->block_state == ISAL_BLOCK_TYPE0) {
                                        ret = decode_literal_block(state);
-                               } else
-                                       ret = decode_huffman_code_block_stateless(state);
+                               } else {
+                                       uint8_t *tmp = state->tmp_out_buffer;
+                                       ret = decode_huffman_code_block_stateless(state, tmp);
+                               }
 
                                if (ret)
                                        break;
-                               if (state->bfinal != 0
-                                   && state->block_state == ISAL_BLOCK_NEW_HDR)
-                                       state->block_state = ISAL_BLOCK_INPUT_DONE;
                        }
 
                        /* Copy valid data from internal buffer into out_buffer */
+                       if (state->write_overflow_len != 0) {
+                               store_u32(state->next_out, state->write_overflow_lits);
+                               state->next_out += state->write_overflow_len;
+                               state->total_out += state->write_overflow_len;
+                               state->write_overflow_lits = 0;
+                               state->write_overflow_len = 0;
+                       }
+
                        if (state->copy_overflow_length != 0) {
                                byte_copy(state->next_out, state->copy_overflow_distance,
                                          state->copy_overflow_length);
@@ -1214,9 +2328,7 @@ int isal_inflate(struct inflate_state *state)
                        /* Set total_out to not count data in tmp_out_buffer */
                        state->total_out -= state->tmp_out_valid - state->tmp_out_processed;
                        if (state->crc_flag)
-                               state->crc =
-                                   crc32_gzip(state->crc, start_out,
-                                              state->next_out - start_out);
+                               update_checksum(state, start_out, state->next_out - start_out);
                        return ret;
                }
 
@@ -1234,20 +2346,20 @@ int isal_inflate(struct inflate_state *state)
                                if (state->block_state == ISAL_BLOCK_TYPE0)
                                        ret = decode_literal_block(state);
                                else
-                                       ret = decode_huffman_code_block_stateless(state);
+                                       ret =
+                                           decode_huffman_code_block_stateless(state,
+                                                                               start_out);
                                if (ret)
                                        break;
-                               if (state->bfinal != 0
-                                   && state->block_state == ISAL_BLOCK_NEW_HDR)
-                                       state->block_state = ISAL_BLOCK_INPUT_DONE;
                        }
                }
 
                if (state->crc_flag)
-                       state->crc =
-                           crc32_gzip(state->crc, start_out, state->next_out - start_out);
+                       update_checksum(state, start_out, state->next_out - start_out);
 
-               if (state->block_state != ISAL_BLOCK_INPUT_DONE) {
+               if (state->block_state != ISAL_BLOCK_INPUT_DONE
+                   || state->copy_overflow_length + state->write_overflow_len +
+                   state->tmp_out_valid > sizeof(state->tmp_out_buffer)) {
                        /* Save decompression history in tmp_out buffer */
                        if (state->tmp_out_valid == state->tmp_out_processed
                            && avail_out - state->avail_out >= ISAL_DEF_HIST_SIZE) {
@@ -1269,24 +2381,57 @@ int isal_inflate(struct inflate_state *state)
                                state->tmp_out_processed -= shift_size;
 
                        }
+               }
 
-                       if (state->copy_overflow_length != 0) {
-                               byte_copy(&state->tmp_out_buffer[state->tmp_out_valid],
-                                         state->copy_overflow_distance,
-                                         state->copy_overflow_length);
-                               state->tmp_out_valid += state->copy_overflow_length;
-                               state->total_out += state->copy_overflow_length;
-                               state->copy_overflow_distance = 0;
-                               state->copy_overflow_length = 0;
-                       }
+               /* Write overflow data into tmp buffer */
+               if (state->write_overflow_len != 0) {
+                       store_u32(&state->tmp_out_buffer[state->tmp_out_valid],
+                                 state->write_overflow_lits);
+                       state->tmp_out_valid += state->write_overflow_len;
+                       state->total_out += state->write_overflow_len;
+                       state->write_overflow_lits = 0;
+                       state->write_overflow_len = 0;
+               }
 
-                       if (ret == ISAL_INVALID_LOOKBACK || ret == ISAL_INVALID_BLOCK
-                           || ret == ISAL_INVALID_SYMBOL)
-                               return ret;
+               if (state->copy_overflow_length != 0) {
+                       byte_copy(&state->tmp_out_buffer[state->tmp_out_valid],
+                                 state->copy_overflow_distance, state->copy_overflow_length);
+                       state->tmp_out_valid += state->copy_overflow_length;
+                       state->total_out += state->copy_overflow_length;
+                       state->copy_overflow_distance = 0;
+                       state->copy_overflow_length = 0;
+               }
+
+               if (ret == ISAL_INVALID_LOOKBACK || ret == ISAL_INVALID_BLOCK
+                   || ret == ISAL_INVALID_SYMBOL) {
+                       state->total_out -= state->tmp_out_valid - state->tmp_out_processed;
+                       return ret;
+               }
 
-               } else if (state->tmp_out_valid == state->tmp_out_processed)
+               if (state->block_state == ISAL_BLOCK_INPUT_DONE
+                   && state->tmp_out_valid == state->tmp_out_processed) {
                        state->block_state = ISAL_BLOCK_FINISH;
+
+                       switch (state->crc_flag) {
+                       case ISAL_ZLIB:
+                       case ISAL_ZLIB_NO_HDR_VER:
+                               finalize_adler32(state);
+                               ret = check_zlib_checksum(state);
+                               break;
+
+                       case ISAL_ZLIB_NO_HDR:
+                               finalize_adler32(state);
+                               break;
+
+                       case ISAL_GZIP:
+                       case ISAL_GZIP_NO_HDR_VER:
+                               ret = check_gzip_checksum(state);
+                               break;
+                       }
+               }
+
+               state->total_out -= state->tmp_out_valid - state->tmp_out_processed;
        }
 
-       return ISAL_DECOMP_OK;
+       return (ret > 0) ? ISAL_DECOMP_OK : ret;
 }
index 4d60802514367dc4d280211c932a7cbb3996cedd..ef2ce6836a657e099068c89c833783e13ac7d1d7 100644 (file)
 default rel
 [bits 64]
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 
 extern decode_huffman_code_block_stateless_base
diff --git a/ceph/src/isa-l/igzip/igzip_inflate_perf.c b/ceph/src/isa-l/igzip/igzip_inflate_perf.c
deleted file mode 100644 (file)
index 70d2af7..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <assert.h>
-#include "huff_codes.h"
-#include "igzip_lib.h"
-#include "test.h"
-
-#if defined(ZLIB_9) || defined(ZLIB_1) || defined(ZLIB_COMPARE)
-# include <zlib.h>
-#endif
-
-#define BUF_SIZE 1024
-#define MIN_TEST_LOOPS   8
-#ifndef RUN_MEM_SIZE
-# define RUN_MEM_SIZE 1000000000
-#endif
-
-int get_filesize(FILE * f)
-{
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
-}
-
-int main(int argc, char *argv[])
-{
-       FILE *in, *out = NULL;
-       unsigned char *inbuf, *outbuf, *tempbuf;
-       int i, infile_size, iterations, outbuf_size, check;
-       uint64_t inbuf_size;
-       struct inflate_state state;
-
-       if (argc > 3 || argc < 2) {
-               fprintf(stderr, "Usage: isal_inflate_file_perf  infile\n"
-                       "\t - Runs multiple iterations of igzip on a file to "
-                       "get more accurate time results.\n");
-               exit(0);
-       }
-       in = fopen(argv[1], "rb");
-       if (!in) {
-               fprintf(stderr, "Can't open %s for reading\n", argv[1]);
-               exit(0);
-       }
-       if (argc > 2) {
-               out = fopen(argv[2], "wb");
-               if (!out) {
-                       fprintf(stderr, "Can't open %s for writing\n", argv[2]);
-                       exit(0);
-               }
-               printf("outfile=%s\n", argv[2]);
-       }
-       printf("isal_inflate_perf: \n");
-       fflush(0);
-       /* Allocate space for entire input file and output
-        * (assuming some possible expansion on output size)
-        */
-       infile_size = get_filesize(in);
-
-       if (infile_size != 0) {
-               outbuf_size = infile_size;
-               iterations = RUN_MEM_SIZE / infile_size;
-       } else {
-               printf("Error: input file has 0 size\n");
-               exit(0);
-       }
-       if (iterations < MIN_TEST_LOOPS)
-               iterations = MIN_TEST_LOOPS;
-
-       tempbuf = malloc(infile_size);
-       if (tempbuf == NULL) {
-               fprintf(stderr, "Can't allocate temp buffer memory\n");
-               exit(0);
-       }
-       inbuf_size = 2 * infile_size;
-       inbuf = malloc(inbuf_size);
-       if (inbuf == NULL) {
-               fprintf(stderr, "Can't allocate input buffer memory\n");
-               exit(0);
-       }
-       outbuf = malloc(outbuf_size);
-       if (outbuf == NULL) {
-               fprintf(stderr, "Can't allocate output buffer memory\n");
-               exit(0);
-       }
-
-       fread(tempbuf, 1, infile_size, in);
-
-#ifdef ZLIB_9
-       printf("Using zlib -9 compression\n");
-       i = compress2(inbuf, &inbuf_size, tempbuf, infile_size, 9);
-       if (i != Z_OK) {
-               printf("Compression of input file failed\n");
-               exit(0);
-       }
-
-       inbuf += 2;
-       inbuf_size -= 2;
-#elif defined(ZLIB_1)
-       printf("Using zlib -1 compression\n");
-       i = compress2(inbuf, &inbuf_size, tempbuf, infile_size, 1);
-       if (i != Z_OK) {
-               printf("Compression of input file failed\n");
-               exit(0);
-       }
-
-       inbuf += 2;
-       inbuf_size -= 2;
-#else
-       printf("Using igzip compression\n");
-       struct isal_zstream stream;
-       isal_deflate_init(&stream);
-       stream.end_of_stream = 1;       /* Do the entire file at once */
-       stream.flush = NO_FLUSH;
-       stream.next_in = tempbuf;
-       stream.avail_in = infile_size;
-       stream.next_out = inbuf;
-       stream.avail_out = inbuf_size;
-#ifdef IGZIP_CUSTOM
-       struct isal_huff_histogram histogram;
-       struct isal_hufftables hufftables_custom;
-
-       memset(&histogram, 0, sizeof(histogram));
-       isal_update_histogram(tempbuf, infile_size, &histogram);
-       isal_create_hufftables(&hufftables_custom, &histogram);
-       stream.hufftables = &hufftables_custom;
-#endif
-       isal_deflate(&stream);
-       if (stream.avail_in != 0) {
-               printf("Compression of input file failed\n");
-               exit(0);
-       }
-#endif
-
-#ifdef ZLIB_COMPARE
-       {
-               printf("igzip_zlib_inflate_perf: %s %d iterations\n", argv[1], iterations);
-               /* Read complete input file into buffer */
-
-               struct perf start, stop;
-               perf_start(&start);
-
-               z_stream gstream;
-
-               for (i = 0; i < iterations; i++) {
-                       gstream.next_in = inbuf;
-                       gstream.avail_in = inbuf_size;
-                       gstream.zalloc = Z_NULL;
-                       gstream.zfree = Z_NULL;
-                       gstream.opaque = Z_NULL;
-                       if (0 != inflateInit2(&gstream, -15)) {
-                               printf("Fail zlib init\n");
-                               exit(-1);
-                       }
-                       gstream.next_out = outbuf;
-                       gstream.avail_out = outbuf_size;
-                       check = inflate(&gstream, Z_FINISH);
-                       if (check != 1) {
-                               printf("Error in decompression with error %d\n", check);
-                               break;
-                       }
-               }
-               perf_stop(&stop);
-               printf("  file %s - in_size=%d out_size=%lu iter=%d\n", argv[1],
-                      infile_size, gstream.total_out, i);
-
-               printf("igzip_file: ");
-               perf_print(stop, start, (long long)infile_size * i);
-
-               printf("End of igzip_zlib_inflate_perf\n\n");
-       }
-#endif
-       printf("isal_inflate_stateless_perf: %s %d iterations\n", argv[1], iterations);
-       /* Read complete input file into buffer */
-       fclose(in);
-       struct perf start, stop;
-       perf_start(&start);
-
-       for (i = 0; i < iterations; i++) {
-               isal_inflate_init(&state);
-               state.next_in = inbuf;
-               state.avail_in = inbuf_size;
-               state.next_out = outbuf;
-               state.avail_out = outbuf_size;
-
-               check = isal_inflate(&state);
-               if (check) {
-                       printf("Error in decompression with error %d\n", check);
-                       break;
-               }
-       }
-       perf_stop(&stop);
-       printf("  file %s - in_size=%d out_size=%d iter=%d\n", argv[1],
-              infile_size, state.total_out, i);
-
-       printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
-
-       printf("End of isal_inflate_stateless_perf\n\n");
-       fflush(0);
-
-#if defined(ZLIB_1) || defined(ZLIB_9)
-       inbuf -= 2;
-#endif
-       free(inbuf);
-       free(outbuf);
-       free(tempbuf);
-
-       return 0;
-}
index a1f9b9a57e34a2b0c430dc788affd2f57e997064..94675964588b72c525ad6459b6121833df956472 100644 (file)
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdint.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <zlib.h>
 #include "igzip_lib.h"
 #include "huff_codes.h"
+#include "test.h"
 
 /*Don't use file larger memory can support because compression and decompression
  * are done in a stateless manner. */
+#if __WORDSIZE == 64
 #define MAX_INPUT_FILE_SIZE 2L*1024L*1024L*1024L
+#else
+#define MAX_INPUT_FILE_SIZE 512L*1024L*1024L
+#endif
 
 int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
                       uint8_t * uncompress_buf, uint32_t * uncompress_len)
@@ -149,7 +156,7 @@ int test(uint8_t * compressed_stream,
 {
        int ret;
        ret =
-           compress2(compressed_stream, compressed_length,
+           compress2(compressed_stream, (uLongf *) compressed_length,
                      uncompressed_stream, uncompressed_length, 6);
        if (ret) {
                printf("Failed compressing input with exit code %d", ret);
@@ -223,6 +230,12 @@ int main(int argc, char **argv)
        if (argc == 1)
                printf("Error, no input file\n");
        for (i = 1; i < argc; i++) {
+
+               file = NULL;
+               uncompressed_stream = NULL;
+               compressed_stream = NULL;
+               uncompressed_test_stream = NULL;
+
                file = fopen(argv[i], "r");
                if (file == NULL) {
                        printf("Error opening file %s\n", argv[i]);
@@ -230,34 +243,35 @@ int main(int argc, char **argv)
                } else
                        printf("Starting file %s", argv[i]);
                fflush(0);
-               fseek(file, 0, SEEK_END);
-               file_length = ftell(file);
-               fseek(file, 0, SEEK_SET);
-               file_length -= ftell(file);
+               file_length = get_filesize(file);
                if (file_length > MAX_INPUT_FILE_SIZE) {
-                       printf("File too large to run on this test\n");
+                       printf("\nFile too large to run on this test,"
+                              " Max 512MB for 32bit OS, 2GB for 64bit OS.\n");
+                       printf(" ... Fail\n");
                        fclose(file);
                        continue;
                }
 
                compressed_length = compressBound(file_length);
+
                if (file_length != 0) {
                        uncompressed_stream = malloc(file_length);
                        uncompressed_test_stream = malloc(file_length);
                }
+
                compressed_stream = malloc(compressed_length);
                if (uncompressed_stream == NULL && file_length != 0) {
-                       printf("Failed to allocate memory\n");
+                       printf("\nFailed to allocate input memory\n");
                        exit(0);
                }
 
                if (compressed_stream == NULL) {
-                       printf("Failed to allocate memory\n");
+                       printf("\nFailed to allocate output memory\n");
                        exit(0);
                }
 
-               if (uncompressed_test_stream == NULL) {
-                       printf("Failed to allocate memory\n");
+               if (uncompressed_test_stream == NULL && file_length != 0) {
+                       printf("\nFailed to allocate decompressed memory\n");
                        exit(0);
                }
 
@@ -280,7 +294,8 @@ int main(int argc, char **argv)
 
                fflush(0);
                fclose(file);
-               free(compressed_stream);
+               if (compressed_stream != NULL)
+                       free(compressed_stream);
                if (uncompressed_stream != NULL)
                        free(uncompressed_stream);
                if (uncompressed_test_stream != NULL)
index a408c509dc7938f8f904ffdecdc15c35acfcd9f2..5c195e3f13b4847cd8c25248cbabe3e0883c9895 100644 (file)
@@ -1,16 +1,48 @@
 #ifndef IGZIP_LEVEL_BUF_STRUCTS_H
 #define IGZIP_LEVEL_BUF_STRUCTS_H
 
+#include "igzip_lib.h"
 #include "huff_codes.h"
 #include "encode_df.h"
 
-struct level_2_buf {
+#define MATCH_BUF_SIZE (4 * 1024)
+
+struct hash8k_buf {
+       uint16_t hash_table[IGZIP_HASH8K_HASH_SIZE];
+};
+
+struct hash_hist_buf {
+       uint16_t hash_table[IGZIP_HASH_HIST_SIZE];
+};
+
+struct hash_map_buf {
+       uint16_t hash_table[IGZIP_HASH_MAP_HASH_SIZE];
+       struct deflate_icf *matches_next;
+       struct deflate_icf *matches_end;
+       struct deflate_icf matches[MATCH_BUF_SIZE];
+       struct deflate_icf overflow[ISAL_LOOK_AHEAD];
+};
+
+#define MAX_LVL_BUF_SIZE sizeof(struct hash_map_buf)
+
+struct level_buf {
        struct hufftables_icf encode_tables;
+       struct isal_mod_hist hist;
        uint32_t deflate_hdr_count;
        uint32_t deflate_hdr_extra_bits;
        uint8_t deflate_hdr[ISAL_DEF_MAX_HDR_SIZE];
        struct deflate_icf *icf_buf_next;
        uint64_t icf_buf_avail_out;
-       struct deflate_icf icf_buf_start[];
+       struct deflate_icf *icf_buf_start;
+       union {
+               struct hash8k_buf hash8k;
+               struct hash_hist_buf hash_hist;
+               struct hash_map_buf hash_map;
+
+               struct hash8k_buf lvl1;
+               struct hash_hist_buf lvl2;
+               struct hash_map_buf lvl3;
+       };
 };
+
 #endif
index c95990f6daac3e930c4a5347f19db2a7048f248d..7997a8453403c84cac4f1284240f5a9213bf78da 100644 (file)
 default rel
 [bits 64]
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 
 extern isal_deflate_body_base
@@ -45,23 +39,45 @@ extern isal_deflate_body_04
 extern isal_deflate_finish_base
 extern isal_deflate_finish_01
 
+extern isal_deflate_icf_body_hash_hist_base
+extern isal_deflate_icf_body_hash_hist_01
+extern isal_deflate_icf_body_hash_hist_02
+extern isal_deflate_icf_body_hash_hist_04
+extern isal_deflate_icf_finish_hash_hist_base
+extern isal_deflate_icf_finish_hash_hist_01
 
-extern isal_deflate_icf_body_base
-extern isal_deflate_icf_body_01
-extern isal_deflate_icf_body_02
-extern isal_deflate_icf_body_04
-extern isal_deflate_icf_finish_base
-extern isal_deflate_icf_finish_01
+extern isal_deflate_icf_finish_hash_map_base
 
 extern isal_update_histogram_base
 extern isal_update_histogram_01
 extern isal_update_histogram_04
 
+extern gen_icf_map_h1_base
+extern gen_icf_map_lh1_04
+
 extern encode_deflate_icf_base
 extern encode_deflate_icf_04
 
-extern crc32_gzip_base
-extern crc32_gzip_01
+extern set_long_icf_fg_base
+extern set_long_icf_fg_04
+
+%ifdef HAVE_AS_KNOWS_AVX512
+extern encode_deflate_icf_06
+extern set_long_icf_fg_06
+extern gen_icf_map_lh1_06
+%endif
+
+extern adler32_base
+extern adler32_avx2_4
+extern adler32_sse
+
+extern isal_deflate_hash_base
+extern isal_deflate_hash_crc_01
+
+extern isal_deflate_hash_mad_base
+
+extern icf_body_hash1_fillgreedy_lazy
+extern icf_body_lazyhash1_fillgreedy_greedy
 
 section .text
 
@@ -72,16 +88,47 @@ mbin_dispatch_init5 isal_deflate_body, isal_deflate_body_base, isal_deflate_body
 mbin_interface         isal_deflate_finish
 mbin_dispatch_init5    isal_deflate_finish, isal_deflate_finish_base, isal_deflate_finish_01, isal_deflate_finish_01, isal_deflate_finish_01
 
-mbin_interface         isal_deflate_icf_body
-mbin_dispatch_init5    isal_deflate_icf_body, isal_deflate_icf_body_base, isal_deflate_icf_body_01, isal_deflate_icf_body_02, isal_deflate_icf_body_04
-mbin_interface         isal_deflate_icf_finish
-mbin_dispatch_init5    isal_deflate_icf_finish, isal_deflate_icf_finish_base, isal_deflate_icf_finish_01, isal_deflate_icf_finish_01, isal_deflate_icf_finish_01
+mbin_interface         isal_deflate_icf_body_lvl1
+mbin_dispatch_init5    isal_deflate_icf_body_lvl1, isal_deflate_icf_body_hash_hist_base, isal_deflate_icf_body_hash_hist_01, isal_deflate_icf_body_hash_hist_02, isal_deflate_icf_body_hash_hist_04
+
+mbin_interface         isal_deflate_icf_body_lvl2
+mbin_dispatch_init5    isal_deflate_icf_body_lvl2, isal_deflate_icf_body_hash_hist_base, isal_deflate_icf_body_hash_hist_01, isal_deflate_icf_body_hash_hist_02, isal_deflate_icf_body_hash_hist_04
+
+mbin_interface         isal_deflate_icf_body_lvl3
+mbin_dispatch_init5    isal_deflate_icf_body_lvl3, icf_body_hash1_fillgreedy_lazy, icf_body_hash1_fillgreedy_lazy, icf_body_hash1_fillgreedy_lazy, icf_body_lazyhash1_fillgreedy_greedy
+
+mbin_interface         isal_deflate_icf_finish_lvl1
+mbin_dispatch_init5    isal_deflate_icf_finish_lvl1, isal_deflate_icf_finish_hash_hist_base, isal_deflate_icf_finish_hash_hist_01, isal_deflate_icf_finish_hash_hist_01, isal_deflate_icf_finish_hash_hist_01
+
+mbin_interface         isal_deflate_icf_finish_lvl2
+mbin_dispatch_init5    isal_deflate_icf_finish_lvl2, isal_deflate_icf_finish_hash_hist_base, isal_deflate_icf_finish_hash_hist_01, isal_deflate_icf_finish_hash_hist_01, isal_deflate_icf_finish_hash_hist_01
+
+mbin_interface         isal_deflate_icf_finish_lvl3
+mbin_dispatch_init5    isal_deflate_icf_finish_lvl3, isal_deflate_icf_finish_hash_map_base, isal_deflate_icf_finish_hash_map_base, isal_deflate_icf_finish_hash_map_base, isal_deflate_icf_finish_hash_map_base
 
 mbin_interface         isal_update_histogram
 mbin_dispatch_init5    isal_update_histogram, isal_update_histogram_base, isal_update_histogram_01, isal_update_histogram_01, isal_update_histogram_04
 
 mbin_interface         encode_deflate_icf
-mbin_dispatch_init5    encode_deflate_icf, encode_deflate_icf_base, encode_deflate_icf_base, encode_deflate_icf_base, encode_deflate_icf_04
+mbin_dispatch_init6    encode_deflate_icf, encode_deflate_icf_base, encode_deflate_icf_base, encode_deflate_icf_base, encode_deflate_icf_04, encode_deflate_icf_06
+
+mbin_interface         set_long_icf_fg
+mbin_dispatch_init6    set_long_icf_fg, set_long_icf_fg_base, set_long_icf_fg_base, set_long_icf_fg_base, set_long_icf_fg_04, set_long_icf_fg_06
+
+mbin_interface         gen_icf_map_lh1
+mbin_dispatch_init6    gen_icf_map_lh1, gen_icf_map_h1_base, gen_icf_map_h1_base, gen_icf_map_h1_base, gen_icf_map_lh1_04, gen_icf_map_lh1_06
+
+mbin_interface         isal_adler32
+mbin_dispatch_init5    isal_adler32, adler32_base, adler32_sse, adler32_sse, adler32_avx2_4
+
+mbin_interface         isal_deflate_hash_lvl0
+mbin_dispatch_init5    isal_deflate_hash_lvl0, isal_deflate_hash_base, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01
+
+mbin_interface         isal_deflate_hash_lvl1
+mbin_dispatch_init5    isal_deflate_hash_lvl1, isal_deflate_hash_base, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01
+
+mbin_interface         isal_deflate_hash_lvl2
+mbin_dispatch_init5    isal_deflate_hash_lvl2, isal_deflate_hash_base, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01, isal_deflate_hash_crc_01
 
-mbin_interface         crc32_gzip
-mbin_dispatch_init5    crc32_gzip, crc32_gzip_base, crc32_gzip_base, crc32_gzip_01, crc32_gzip_01
+mbin_interface         isal_deflate_hash_lvl3
+mbin_dispatch_init5    isal_deflate_hash_lvl3, isal_deflate_hash_base, isal_deflate_hash_base, isal_deflate_hash_base, isal_deflate_hash_mad_base
index 5292ef39e2fa2a1cb8efcd7afcd83ee2d4e050af..da6d3b9eb0355239e3dcd19003da75773b94086e 100644 (file)
@@ -1,5 +1,5 @@
 /**********************************************************************
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
 #include <assert.h>
+#include <getopt.h>
+#include "huff_codes.h"
 #include "igzip_lib.h"
 #include "test.h"
 
-#define TEST_LEN   (1024*1024)
-#define IBUF_SIZE  (1024*1024)
-#define OBUF_SIZE  (1024*1024)
+#include <zlib.h>
 
-#define TEST_LOOPS   400
-#define TEST_TYPE_STR "_warm"
+#define BUF_SIZE 1024
 
-void create_data(unsigned char *data, int size)
+#define OPTARGS "hl:f:z:i:d:stub:y:w:o:"
+
+#define COMPRESSION_QUEUE_LIMIT 32
+#define UNSET -1
+
+#define xstr(a) str(a)
+#define str(a) #a
+
+/* Limit output buffer size to 2 Gigabytes. Since stream->avail_out is a
+ * uint32_t and there is no logic for handling an overflowed output buffer in
+ * the perf test, this define must be less then 4 Gigabytes */
+#define MAX_COMPRESS_BUF_SIZE (1U << 31)
+
+int level_size_buf[10] = {
+#ifdef ISAL_DEF_LVL0_DEFAULT
+       ISAL_DEF_LVL0_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL1_DEFAULT
+       ISAL_DEF_LVL1_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL2_DEFAULT
+       ISAL_DEF_LVL2_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL3_DEFAULT
+       ISAL_DEF_LVL3_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL4_DEFAULT
+       ISAL_DEF_LVL4_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL5_DEFAULT
+       ISAL_DEF_LVL5_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL6_DEFAULT
+       ISAL_DEF_LVL6_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL7_DEFAULT
+       ISAL_DEF_LVL7_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL8_DEFAULT
+       ISAL_DEF_LVL8_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL9_DEFAULT
+       ISAL_DEF_LVL9_DEFAULT,
+#else
+       0,
+#endif
+};
+
+enum {
+       ISAL_STATELESS,
+       ISAL_STATEFUL,
+       ZLIB
+};
+
+struct compress_strategy {
+       int32_t mode;
+       int32_t level;
+};
+
+struct inflate_modes {
+       int32_t stateless;
+       int32_t stateful;
+       int32_t zlib;
+};
+
+struct perf_info {
+       char *file_name;
+       size_t file_size;
+       size_t deflate_size;
+       uint32_t inblock_size;
+       uint32_t flush_type;
+       int32_t hist_bits;
+       int32_t deflate_time;
+       int32_t inflate_time;
+       struct compress_strategy strategy;
+       uint32_t inflate_mode;
+       struct perf start;
+};
+
+void init_perf_info(struct perf_info *info)
 {
-       char c = 'a';
-       while (size--)
-               *data++ = c = c < 'z' ? c + 1 : 'a';
+       memset(info, 0, sizeof(*info));
+       info->deflate_time = BENCHMARK_TIME;
+       info->inflate_time = BENCHMARK_TIME;
 }
 
-int main(int argc, char *argv[])
+int usage(void)
+{
+       fprintf(stderr,
+               "Usage: igzip_perf [options] <infile>\n"
+               "  -h          help, print this message\n"
+               "  The options -l, -f, -z may be used up to "
+               xstr(COMPRESSION_QUEUE_LIMIT) " times\n"
+               "  -l <level>  isa-l stateless deflate level to test ("
+               xstr(ISAL_DEF_MIN_LEVEL) "-" xstr(ISAL_DEF_MAX_LEVEL) ")\n"
+               "  -f <level>  isa-l stateful deflate level to test ("
+               xstr(ISAL_DEF_MIN_LEVEL) "-" xstr(ISAL_DEF_MAX_LEVEL) ")\n"
+               "  -z <level>  zlib  deflate level to test\n"
+               "  -d <time>   approx time in seconds for deflate (at least 0)\n"
+               "  -i <time>   approx time in seconds for inflate (at least 0)\n"
+               "  -s          performance test isa-l stateful inflate\n"
+               "  -t          performance test isa-l stateless inflate\n"
+               "  -u          performance test zlib inflate\n"
+               "  -o <file>   output file to store compressed data (last one if multiple)\n"
+               "  -b <size>   input buffer size, applies to stateful options (-f,-z,-s)\n"
+               "  -y <type>   flush type: 0 (default: no flush), 1 (sync flush), 2 (full flush)\n"
+               "  -w <size>   log base 2 size of history window, between 9 and 15\n");
+       exit(0);
+}
+
+void print_perf_info_line(struct perf_info *info)
+{
+       printf("igzip_perf-> compress level: %d flush_type: %d block_size: %d\n",
+              info->strategy.level, info->flush_type, info->inblock_size);
+}
+
+void print_file_line(struct perf_info *info)
+{
+       printf("  file info-> name: %s file_size: %lu compress_size: %lu ratio: %2.02f%%\n",
+              info->file_name, info->file_size, info->deflate_size,
+              100.0 * info->deflate_size / info->file_size);
+}
+
+void print_deflate_perf_line(struct perf_info *info)
+{
+       if (info->strategy.mode == ISAL_STATELESS)
+               printf("    isal_stateless_deflate-> ");
+       else if (info->strategy.mode == ISAL_STATEFUL)
+               printf("    isal_stateful_deflate->  ");
+       else if (info->strategy.mode == ZLIB)
+               printf("    zlib_deflate->           ");
+
+       perf_print(info->start, info->file_size);
+}
+
+void print_inflate_perf_line(struct perf_info *info)
+{
+       if (info->inflate_mode == ISAL_STATELESS)
+               printf("    isal_stateless_inflate-> ");
+       else if (info->inflate_mode == ISAL_STATEFUL)
+               printf("    isal_stateful_inflate->  ");
+       else if (info->inflate_mode == ZLIB)
+               printf("    zlib_inflate->           ");
+
+       perf_print(info->start, info->file_size);
+}
+
+int isal_deflate_round(struct isal_zstream *stream, uint8_t * outbuf, uint32_t outbuf_size,
+                      uint8_t * inbuf, uint32_t inbuf_size,
+                      uint32_t level, uint8_t * level_buf, uint32_t level_buf_size,
+                      int flush_type, int hist_bits)
+{
+       int check;
+
+       /* Setup stream for stateless compression */
+       isal_deflate_init(stream);
+       stream->end_of_stream = 1;      /* Do the entire file at once */
+       stream->flush = flush_type;
+       stream->next_in = inbuf;
+       stream->avail_in = inbuf_size;
+       stream->next_out = outbuf;
+       stream->avail_out = outbuf_size;
+       stream->level = level;
+       stream->level_buf = level_buf;
+       stream->level_buf_size = level_buf_size;
+       stream->hist_bits = hist_bits;
+
+       /* Compress stream */
+       check = isal_deflate_stateless(stream);
+
+       /* Verify compression success */
+       if (check || stream->avail_in)
+               return 1;
+
+       return 0;
+}
+
+int isal_inflate_round(struct inflate_state *state, uint8_t * inbuf, uint32_t inbuf_size,
+                      uint8_t * outbuf, uint32_t outbuf_size, int hist_bits)
+{
+       int check = 0;
+
+       /* Setup for stateless inflate */
+       state->next_in = inbuf;
+       state->avail_in = inbuf_size;
+       state->next_out = outbuf;
+       state->avail_out = outbuf_size;
+       state->crc_flag = ISAL_DEFLATE;
+       state->hist_bits = hist_bits;
+
+       /* Inflate data */
+       check = isal_inflate_stateless(state);
+
+       /* Verify inflate was successful */
+       if (check)
+               return 1;
+
+       return 0;
+}
+
+int isal_deflate_stateful_round(struct isal_zstream *stream, uint8_t * outbuf,
+                               uint32_t outbuf_size, uint8_t * inbuf,
+                               uint32_t inbuf_size, uint32_t in_block_size, uint32_t level,
+                               uint8_t * level_buf, uint32_t level_buf_size, int flush_type,
+                               int hist_bits)
+{
+       uint64_t inbuf_remaining;
+       int check = COMP_OK;
+
+       /* Setup stream for stateful compression */
+       inbuf_remaining = inbuf_size;
+       isal_deflate_init(stream);
+       stream->flush = flush_type;
+       stream->next_in = inbuf;
+       stream->next_out = outbuf;
+       stream->avail_out = outbuf_size;
+       stream->level = level;
+       stream->level_buf = level_buf;
+       stream->level_buf_size = level_buf_size;
+       stream->hist_bits = hist_bits;
+
+       /* Keep compressing so long as more data is available and no error has
+        * been hit */
+       while (COMP_OK == check && inbuf_remaining > in_block_size) {
+               /* Setup next in buffer, assumes out buffer is sufficiently
+                * large */
+               stream->avail_in = in_block_size;
+               inbuf_remaining -= in_block_size;
+
+               /* Compress stream */
+               check = isal_deflate(stream);
+       }
+
+       /* Finish compressing all remaining input */
+       if (COMP_OK == check) {
+               stream->avail_in = inbuf_remaining;
+               stream->end_of_stream = 1;
+               check = isal_deflate(stream);
+       }
+
+       /* Verify Compression Success */
+       if (COMP_OK != check || stream->avail_in > 0)
+               return 1;
+
+       return 0;
+}
+
+int isal_inflate_stateful_round(struct inflate_state *state, uint8_t * inbuf,
+                               uint32_t inbuf_size, uint32_t in_block_size, uint8_t * outbuf,
+                               uint32_t outbuf_size, int hist_bits)
+{
+       int check = ISAL_DECOMP_OK;
+       uint64_t inbuf_remaining;
+
+       isal_inflate_init(state);
+       state->next_in = inbuf;
+       state->next_out = outbuf;
+       state->avail_out = outbuf_size;
+       state->hist_bits = hist_bits;
+       inbuf_remaining = inbuf_size;
+
+       while (ISAL_DECOMP_OK == check && inbuf_remaining >= in_block_size) {
+               state->avail_in = in_block_size;
+               inbuf_remaining -= in_block_size;
+               check = isal_inflate(state);
+       }
+       if (ISAL_DECOMP_OK == check && inbuf_remaining > 0) {
+               state->avail_in = inbuf_remaining;
+               check = isal_inflate(state);
+       }
+
+       if (ISAL_DECOMP_OK != check || state->avail_in > 0)
+               return 1;
+
+       return 0;
+}
+
+int zlib_deflate_round(z_stream * gstream, uint8_t * outbuf, uInt outbuf_size,
+                      uint8_t * inbuf, uLong inbuf_size,
+                      uLong in_block_size, int level, int flush_type)
+{
+       uLong inbuf_remaining;
+       int check = Z_OK;
+
+       inbuf_remaining = inbuf_size;
+
+       /* Setup stream for stateful compression */
+       if (0 != deflateReset(gstream))
+               return 1;
+
+       gstream->next_in = inbuf;
+       gstream->next_out = outbuf;
+       gstream->avail_out = outbuf_size;
+
+       /* Keep compressing so long as more data is available and no error has
+        * been hit */
+       while (Z_OK == check && inbuf_remaining > in_block_size) {
+               gstream->avail_in = in_block_size;
+               inbuf_remaining -= in_block_size;
+               check = deflate(gstream, flush_type);
+       }
+
+       /* Finish compressing all remaining input */
+       if (Z_OK == check) {
+               gstream->avail_in = inbuf_remaining;
+               check = deflate(gstream, Z_FINISH);
+       }
+
+       /* Verify Compression Success */
+       if (Z_STREAM_END != check)
+               return 1;
+
+       return 0;
+}
+
+int zlib_inflate_round(z_stream * gstream, uint8_t * inbuf,
+                      uLong inbuf_size, uint8_t * outbuf, uInt outbuf_size)
+{
+       int check = 0;
+
+       if (0 != inflateReset(gstream))
+               return 1;
+
+       gstream->next_in = inbuf;
+       gstream->avail_in = inbuf_size;
+       gstream->next_out = outbuf;
+       gstream->avail_out = outbuf_size;
+       check = inflate(gstream, Z_FINISH);
+       if (check != Z_STREAM_END)
+               return 1;
+
+       return 0;
+}
+
+int isal_deflate_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
+                     uint64_t inbuf_size, int level, int flush_type, int hist_bits, int time,
+                     struct perf *start)
 {
-       int i = 1;
        struct isal_zstream stream;
-       unsigned char inbuf[IBUF_SIZE], zbuf[OBUF_SIZE];
+       uint8_t *level_buf = NULL;
+       int check;
 
-       printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
-       printf("igzip_perf: \n");
-       fflush(0);
-       create_data(inbuf, TEST_LEN);
+       if (level_size_buf[level] > 0) {
+               level_buf = malloc(level_size_buf[level]);
+               if (level_buf == NULL)
+                       return 1;
+       }
 
-       struct perf start, stop;
-       perf_start(&start);
+       BENCHMARK(start, time, check =
+                 isal_deflate_round(&stream, outbuf, *outbuf_size, inbuf,
+                                    inbuf_size, level, level_buf,
+                                    level_size_buf[level], flush_type, hist_bits));
+       *outbuf_size = stream.total_out;
+       return check;
+}
 
-       for (i = 0; i < TEST_LOOPS; i++) {
-               isal_deflate_init(&stream);
+int isal_deflate_stateful_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
+                              uint64_t inbuf_size, int level, int flush_type,
+                              uint64_t in_block_size, int hist_bits, int time,
+                              struct perf *start)
+{
+       struct isal_zstream stream;
+       uint8_t *level_buf = NULL;
+       int check;
 
-               stream.avail_in = TEST_LEN;
-               stream.end_of_stream = 1;
-               stream.next_in = inbuf;
-               stream.flush = NO_FLUSH;
+       if (in_block_size == 0)
+               in_block_size = inbuf_size;
 
-               do {
-                       stream.avail_out = OBUF_SIZE;
-                       stream.next_out = zbuf;
-                       isal_deflate(&stream);
-               } while (stream.avail_out == 0);
+       if (level_size_buf[level] > 0) {
+               level_buf = malloc(level_size_buf[level]);
+               if (level_buf == NULL)
+                       return 1;
        }
 
-       perf_stop(&stop);
+       BENCHMARK(start, time, check =
+                 isal_deflate_stateful_round(&stream, outbuf, *outbuf_size, inbuf, inbuf_size,
+                                             in_block_size, level, level_buf,
+                                             level_size_buf[level], flush_type, hist_bits));
+       *outbuf_size = stream.total_out;
+       return check;
+
+}
+
+int zlib_deflate_perf(uint8_t * outbuf, uint64_t * outbuf_size, uint8_t * inbuf,
+                     uint64_t inbuf_size, int level, int flush_type,
+                     uint64_t in_block_size, int hist_bits, int time, struct perf *start)
+{
+       int check;
+       z_stream gstream;
+       int flush_translator[] = { Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH };
+
+       if (in_block_size == 0)
+               in_block_size = inbuf_size;
+
+       flush_type = flush_translator[flush_type];
+
+       /* Initialize the gstream buffer */
+       gstream.next_in = inbuf;
+       gstream.avail_in = inbuf_size;
+       gstream.zalloc = Z_NULL;
+       gstream.zfree = Z_NULL;
+       gstream.opaque = Z_NULL;
+
+       if (hist_bits == 0)
+               hist_bits = -15;
+       else
+               hist_bits = -hist_bits;
+
+       if (0 != deflateInit2(&gstream, level, Z_DEFLATED, hist_bits, 9, Z_DEFAULT_STRATEGY))
+               return 1;
+
+       BENCHMARK(start, time, check =
+                 zlib_deflate_round(&gstream, outbuf, *outbuf_size, inbuf, inbuf_size,
+                                    in_block_size, level, flush_type));
+
+       *outbuf_size = gstream.total_out;
+       deflateEnd(&gstream);
+
+       return check;
+}
+
+int isal_inflate_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
+                     uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
+                     int hist_bits, int time, struct perf *start)
+{
+       struct inflate_state state;
+       int check;
+
+       /* Check that data decompresses */
+       check = isal_inflate_round(&state, inbuf, inbuf_size, outbuf, outbuf_size, hist_bits);
+       if (check || state.total_out != file_size || memcmp(outbuf, filebuf, file_size))
+               return 1;
+
+       BENCHMARK(start, time, isal_inflate_round(&state, inbuf, inbuf_size,
+                                                 outbuf, outbuf_size, hist_bits));
+
+       return check;
+}
 
-       printf("igzip" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_LEN * i);
+int isal_inflate_stateful_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
+                              uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
+                              uint64_t in_block_size, int hist_bits, int time,
+                              struct perf *start)
+{
+       struct inflate_state state;
+       int check;
+
+       if (in_block_size == 0)
+               in_block_size = inbuf_size;
+
+       check = isal_inflate_round(&state, inbuf, inbuf_size, outbuf, outbuf_size, hist_bits);
+       if (check || state.total_out != file_size || memcmp(outbuf, filebuf, file_size))
+               return 1;
+
+       BENCHMARK(start, time,
+                 isal_inflate_stateful_round(&state, inbuf, inbuf_size, in_block_size, outbuf,
+                                             outbuf_size, hist_bits));
+
+       return 0;
+
+}
+
+int zlib_inflate_perf(uint8_t * inbuf, uint64_t inbuf_size, uint8_t * outbuf,
+                     uint64_t outbuf_size, uint8_t * filebuf, uint64_t file_size,
+                     int hist_bits, int time, struct perf *start)
+{
+       int check;
+       z_stream gstream;
+
+       gstream.next_in = inbuf;
+       gstream.avail_in = inbuf_size;
+       gstream.zalloc = Z_NULL;
+       gstream.zfree = Z_NULL;
+       gstream.opaque = Z_NULL;
+
+       if (hist_bits == 0)
+               hist_bits = -15;
+       else
+               hist_bits = -hist_bits;
+
+       if (0 != inflateInit2(&gstream, hist_bits))
+               return 1;
+
+       check = zlib_inflate_round(&gstream, inbuf, inbuf_size, outbuf, outbuf_size);
+       if (check || gstream.total_out != file_size || memcmp(outbuf, filebuf, file_size))
+               return 1;
+
+       BENCHMARK(start, time,
+                 zlib_inflate_round(&gstream, inbuf, inbuf_size, outbuf, outbuf_size));
+
+       inflateEnd(&gstream);
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       FILE *in = NULL;
+       unsigned char *compressbuf, *decompbuf, *filebuf;
+       char *outfile = NULL;
+       int i, c, ret = 0;
+       uint64_t decompbuf_size, compressbuf_size;
+       uint64_t block_count;
 
-       if (!stream.end_of_stream) {
-               printf("error: compression test could not fit into allocated buffers\n");
-               return -1;
+       struct compress_strategy compression_queue[COMPRESSION_QUEUE_LIMIT];
+
+       int compression_queue_size = 0;
+       struct compress_strategy compress_strat;
+       struct inflate_modes inflate_strat = { 0 };
+       struct perf_info info;
+       init_perf_info(&info);
+
+       while ((c = getopt(argc, argv, OPTARGS)) != -1) {
+               switch (c) {
+               case 'l':
+                       if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
+                               printf("Too many levels specified");
+                               exit(0);
+                       }
+
+                       compress_strat.mode = ISAL_STATELESS;
+                       compress_strat.level = atoi(optarg);
+                       if (compress_strat.level > ISAL_DEF_MAX_LEVEL) {
+                               printf("Unsupported isa-l compression level\n");
+                               exit(0);
+                       }
+
+                       compression_queue[compression_queue_size] = compress_strat;
+                       compression_queue_size++;
+                       break;
+               case 'f':
+                       if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
+                               printf("Too many levels specified");
+                               exit(0);
+                       }
+
+                       compress_strat.mode = ISAL_STATEFUL;
+                       compress_strat.level = atoi(optarg);
+                       if (compress_strat.level > ISAL_DEF_MAX_LEVEL) {
+                               printf("Unsupported isa-l compression level\n");
+                               exit(0);
+                       }
+
+                       compression_queue[compression_queue_size] = compress_strat;
+                       compression_queue_size++;
+                       break;
+               case 'z':
+                       if (compression_queue_size >= COMPRESSION_QUEUE_LIMIT) {
+                               printf("Too many levels specified");
+                               exit(0);
+                       }
+
+                       compress_strat.mode = ZLIB;
+                       compress_strat.level = atoi(optarg);
+                       if (compress_strat.level > Z_BEST_COMPRESSION) {
+                               printf("Unsupported zlib compression level\n");
+                               exit(0);
+                       }
+                       compression_queue[compression_queue_size] = compress_strat;
+                       compression_queue_size++;
+                       break;
+               case 'i':
+                       info.inflate_time = atoi(optarg);
+                       if (info.inflate_time < 0)
+                               usage();
+                       break;
+               case 'd':
+                       info.deflate_time = atoi(optarg);
+                       if (info.deflate_time < 0)
+                               usage();
+                       break;
+               case 's':
+                       inflate_strat.stateful = 1;
+                       break;
+               case 't':
+                       inflate_strat.stateless = 1;
+                       break;
+               case 'u':
+                       inflate_strat.zlib = 1;
+                       break;
+               case 'b':
+                       inflate_strat.stateful = 1;
+                       info.inblock_size = atoi(optarg);
+                       break;
+               case 'y':
+                       info.flush_type = atoi(optarg);
+                       if (info.flush_type != NO_FLUSH && info.flush_type != SYNC_FLUSH
+                           && info.flush_type != FULL_FLUSH) {
+                               printf("Unsupported flush type\n");
+                               exit(0);
+                       }
+                       break;
+
+               case 'w':
+                       info.hist_bits = atoi(optarg);
+                       if (info.hist_bits > 15 || info.hist_bits < 9)
+                               usage();
+                       break;
+               case 'o':
+                       outfile = optarg;
+                       break;
+               case 'h':
+               default:
+                       usage();
+                       break;
+               }
+       }
+
+       if (optind >= argc)
+               usage();
+
+       if (!inflate_strat.stateless && !inflate_strat.stateful && !inflate_strat.zlib) {
+               if (info.inblock_size == 0)
+                       inflate_strat.stateless = 1;
+               else
+                       inflate_strat.stateful = 1;
+       }
+
+       /* Allocate space for entire input file and output
+        * (assuming some possible expansion on output size)
+        */
+       info.file_name = argv[optind];
+       in = fopen(info.file_name, "rb");
+       if (NULL == in) {
+               printf("Error: Can not find file %s\n", info.file_name);
+               exit(0);
+       }
+
+       info.file_size = get_filesize(in);
+       if (info.file_size == 0) {
+               printf("Error: input file has 0 size\n");
+               exit(0);
+       }
+
+       decompbuf_size = info.file_size;
+
+       if (compression_queue_size == 0) {
+               if (info.inblock_size == 0)
+                       compression_queue[0].mode = ISAL_STATELESS;
+               else
+                       compression_queue[0].mode = ISAL_STATEFUL;
+               compression_queue[0].level = 1;
+               compression_queue_size = 1;
+       }
+
+       filebuf = malloc(info.file_size);
+       if (filebuf == NULL) {
+               fprintf(stderr, "Can't allocate temp buffer memory\n");
+               exit(0);
+       }
+
+       block_count = 1;
+       if (info.flush_type > 0)
+               block_count = (info.file_size + info.inblock_size - 1) / info.inblock_size;
+
+       /* Way overestimate likely compressed size to handle bad type 0 and
+        * small block_size case */
+       compressbuf_size = block_count * ISAL_DEF_MAX_HDR_SIZE + 2 * info.file_size;
+       if (compressbuf_size >= MAX_COMPRESS_BUF_SIZE)
+               compressbuf_size = MAX_COMPRESS_BUF_SIZE;
+
+       compressbuf = malloc(compressbuf_size);
+       if (compressbuf == NULL) {
+               fprintf(stderr, "Can't allocate input buffer memory\n");
+               exit(0);
        }
-       printf("End of igzip_perf\n\n");
-       fflush(0);
+
+       decompbuf = malloc(decompbuf_size);
+       if (decompbuf == NULL) {
+               fprintf(stderr, "Can't allocate output buffer memory\n");
+               exit(0);
+       }
+
+       if (info.file_size != fread(filebuf, 1, info.file_size, in)) {
+               fprintf(stderr, "Could not read in all input\n");
+               exit(0);
+       }
+       fclose(in);
+
+       for (i = 0; i < compression_queue_size; i++) {
+               if (i > 0)
+                       printf("\n\n");
+
+               info.strategy = compression_queue[i];
+               print_perf_info_line(&info);
+
+               info.deflate_size = compressbuf_size;
+
+               if (info.strategy.mode == ISAL_STATELESS)
+                       ret = isal_deflate_perf(compressbuf, &info.deflate_size, filebuf,
+                                               info.file_size, compression_queue[i].level,
+                                               info.flush_type, info.hist_bits,
+                                               info.deflate_time, &info.start);
+               else if (info.strategy.mode == ISAL_STATEFUL)
+                       ret =
+                           isal_deflate_stateful_perf(compressbuf, &info.deflate_size,
+                                                      filebuf, info.file_size,
+                                                      compression_queue[i].level,
+                                                      info.flush_type, info.inblock_size,
+                                                      info.hist_bits, info.deflate_time,
+                                                      &info.start);
+               else if (info.strategy.mode == ZLIB)
+                       ret = zlib_deflate_perf(compressbuf, &info.deflate_size, filebuf,
+                                               info.file_size, compression_queue[i].level,
+                                               info.flush_type, info.inblock_size,
+                                               info.hist_bits, info.deflate_time,
+                                               &info.start);
+
+               if (ret) {
+                       printf("  Error in compression\n");
+                       continue;
+               }
+
+               print_file_line(&info);
+               printf("\n");
+               print_deflate_perf_line(&info);
+               printf("\n");
+
+               if (outfile != NULL && i + 1 == compression_queue_size) {
+                       FILE *out;
+                       out = fopen(outfile, "wb");
+                       fwrite(compressbuf, 1, info.deflate_size, out);
+                       fclose(out);
+               }
+
+               if (info.inflate_time == 0)
+                       continue;
+
+               if (inflate_strat.stateless) {
+                       info.inflate_mode = ISAL_STATELESS;
+                       ret = isal_inflate_perf(compressbuf, info.deflate_size, decompbuf,
+                                               decompbuf_size, filebuf, info.file_size,
+                                               info.hist_bits, info.inflate_time,
+                                               &info.start);
+                       if (ret)
+                               printf("    Error in isal stateless inflate\n");
+                       else
+                               print_inflate_perf_line(&info);
+               }
+
+               if (inflate_strat.stateful) {
+                       info.inflate_mode = ISAL_STATEFUL;
+                       ret =
+                           isal_inflate_stateful_perf(compressbuf, info.deflate_size,
+                                                      decompbuf, decompbuf_size, filebuf,
+                                                      info.file_size, info.inblock_size,
+                                                      info.hist_bits, info.inflate_time,
+                                                      &info.start);
+
+                       if (ret)
+                               printf("    Error in isal stateful inflate\n");
+                       else
+                               print_inflate_perf_line(&info);
+               }
+
+               if (inflate_strat.zlib) {
+                       info.inflate_mode = ZLIB;
+                       ret = zlib_inflate_perf(compressbuf, info.deflate_size, decompbuf,
+                                               decompbuf_size, filebuf, info.file_size,
+                                               info.hist_bits, info.inflate_time,
+                                               &info.start);
+                       if (ret)
+                               printf("    Error in zlib inflate\n");
+                       else
+                               print_inflate_perf_line(&info);
+               }
+       }
+
+       free(compressbuf);
+       free(decompbuf);
+       free(filebuf);
        return 0;
 }
index 5ceb53332e8eb44b21ebbb9e1c3868cb5e369191..267066bc54ffd99b3127c0fc97cb3a02b9189aa4 100644 (file)
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <stdarg.h>
 #include "igzip_lib.h"
-#include "crc_inflate.h"
+#include "checksum_test_ref.h"
 #include "inflate_std_vects.h"
 #include <math.h>
+#include "test.h"
+#include "unaligned.h"
+
+#ifdef HAVE_GETOPT
+#include <getopt.h>
+#endif
 
 #ifndef RANDOMS
 # define RANDOMS   0x40
 # define TEST_SEED 0x1234
 #endif
 
+#define MAX_BITS_COUNT 20
+#define MIN_BITS_COUNT 8
+
 #define IBUF_SIZE  (1024*1024)
 
+#define MAX_LARGE_COMP_BUF_SIZE (1024*1024)
+
 #define PAGE_SIZE 4*1024
 
+#define MAX_FILE_SIZE 0x7fff8fff
+
 #define str1 "Short test string"
 #define str2 "one two three four five six seven eight nine ten eleven twelve " \
                 "thirteen fourteen fifteen sixteen"
@@ -57,7 +72,7 @@
 #define MAX_LOOPS 20
 /* Defines for the possible error conditions */
 enum IGZIP_TEST_ERROR_CODES {
-       IGZIP_COMP_OK,
+       IGZIP_COMP_OK = 0,
 
        MALLOC_FAILED,
        FILE_READ_FAILED,
@@ -78,8 +93,15 @@ enum IGZIP_TEST_ERROR_CODES {
        INFLATE_LEFTOVER_INPUT,
        INFLATE_INCORRECT_OUTPUT_SIZE,
        INFLATE_INVALID_LOOK_BACK_DISTANCE,
+       INFLATE_INPUT_STREAM_INTEGRITY_ERROR,
+       INFLATE_OUTPUT_STREAM_INTEGRITY_ERROR,
        INVALID_GZIP_HEADER,
        INCORRECT_GZIP_TRAILER,
+       INVALID_ZLIB_HEADER,
+       INCORRECT_ZLIB_TRAILER,
+
+       UNSUPPORTED_METHOD,
+
        INFLATE_GENERAL_ERROR,
 
        INVALID_FLUSH_ERROR,
@@ -90,24 +112,86 @@ enum IGZIP_TEST_ERROR_CODES {
 
 static const int hdr_bytes = 300;
 
-static const uint8_t gzip_hdr[10] = {
-       0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0xff
-};
-
-static const uint32_t gzip_hdr_bytes = 10;
-/* static const uint32_t gzip_trl_bytes = 8; */
-
+static const uint32_t gzip_trl_bytes = 8;
+static const uint32_t zlib_trl_bytes = 4;
 static const int gzip_extra_bytes = 18;        /* gzip_hdr_bytes + gzip_trl_bytes */
+static const int zlib_extra_bytes = 6; /* zlib_hdr_bytes + zlib_trl_bytes */
 
 int inflate_type = 0;
 
 struct isal_hufftables *hufftables = NULL;
+struct isal_hufftables *hufftables_subset = NULL;
 
 #define HISTORY_SIZE 32*1024
 #define MIN_LENGTH 3
 #define MIN_DIST 1
 
+struct test_options {
+       int test_seed;
+       int randoms;
+       int do_large_test;
+       int verbose;
+
+};
+
+struct test_options options;
+
+void init_options(void)
+{
+       options.test_seed = TEST_SEED;
+       options.randoms = RANDOMS;
+       options.do_large_test = 1;
+#ifdef VERBOSE
+       options.verbose = 1;
+#else
+       options.verbose = 0;
+#endif
+}
+
+void usage(void)
+{
+       fprintf(stderr,
+               "Usage: igzip_rand_test [options] [FILES]\n"
+               "  -h          help, print this message\n"
+               "  -l          turn off large input test\n"
+               "  -r <iter>   number of randoms for each test\n"
+               "  -s <seed>   set rand() test seed\n"
+               "  -v          enable verbose test log\n");
+       exit(0);
+}
+
+size_t parse_options(int argc, char *argv[])
+{
+       init_options();
+#ifdef HAVE_GETOPT
+       int c;
+       char optstring[] = "hlr:s:v";
+       while ((c = getopt(argc, argv, optstring)) != -1) {
+               switch (c) {
+               case 'l':
+                       options.do_large_test = 0;
+                       break;
+               case 'r':
+                       options.randoms = atoi(optarg);
+                       break;
+               case 's':
+                       options.test_seed = atoi(optarg);
+                       break;
+               case 'v':
+                       options.verbose = 1;
+                       break;
+               case 'h':
+               default:
+                       usage();
+                       break;
+               }
+       }
+       return optind;
+#else
+       return 1;
+#endif
+}
+
 /* Create random compressible data. This is achieved by randomly choosing a
  * random character, or to repeat previous data in the stream for a random
  * length and look back distance. The probability of a random character or a
@@ -118,8 +202,10 @@ void create_rand_repeat_data(uint8_t * data, int size)
        uint32_t next_data;
        uint8_t *data_start = data;
        uint32_t length, distance;
-       uint32_t max_repeat_data = 256;
-       uint32_t power = rand() % 32;
+       uint32_t symbol_count = rand() % 255 + 1, swaps_left, tmp;
+       uint32_t max_repeat_data = symbol_count;
+       uint8_t symbols[256], *symbols_next, swap_val;
+
        /* An array of the powers of 2 (except the final element which is 0) */
        const uint32_t power_of_2_array[] = {
                0x00000001, 0x00000002, 0x00000004, 0x00000008,
@@ -132,18 +218,48 @@ void create_rand_repeat_data(uint8_t * data, int size)
                0x10000000, 0x20000000, 0x40000000, 0x00000000
        };
 
+       uint32_t power = rand() % sizeof(power_of_2_array) / sizeof(uint32_t);
+
+       if (symbol_count > 128) {
+               memset(symbols, 1, sizeof(symbols));
+               swap_val = 0;
+               swaps_left = 256 - symbol_count;
+       } else {
+               memset(symbols, 0, sizeof(symbols));
+               swap_val = 1;
+               swaps_left = symbol_count;
+       }
+
+       while (swaps_left > 0) {
+               tmp = rand() % 256;
+               if (symbols[tmp] != swap_val) {
+                       symbols[tmp] = swap_val;
+                       swaps_left--;
+               }
+       }
+
+       symbols_next = symbols;
+       for (tmp = 0; tmp < 256; tmp++) {
+               if (symbols[tmp]) {
+                       *symbols_next = tmp;
+                       symbols_next++;
+               }
+       }
+
        max_repeat_data += power_of_2_array[power];
 
-       if (size-- > 0)
+       if (size > 0) {
+               size--;
                *data++ = rand();
+       }
 
        while (size > 0) {
                next_data = rand() % max_repeat_data;
-               if (next_data < 256) {
-                       *data++ = next_data;
+               if (next_data < symbol_count) {
+                       *data++ = symbols[next_data];
                        size--;
                } else if (size < 3) {
-                       *data++ = rand() % 256;
+                       *data++ = symbols[rand() % symbol_count];
                        size--;
                } else {
                        length = (rand() % 256) + MIN_LENGTH;
@@ -160,12 +276,67 @@ void create_rand_repeat_data(uint8_t * data, int size)
                                        *data = *(data - distance);
                                        data++;
                                }
-                       } else
+                       } else {
                                memcpy(data, data - distance, length);
+                               data += length;
+                       }
                }
        }
 }
 
+void create_rand_dict(uint8_t * dict, uint32_t dict_len, uint8_t * buf, uint32_t buf_len)
+{
+       uint32_t dict_chunk_size, buf_chunk_size;
+       while (dict_len > 0) {
+               dict_chunk_size = rand() % IGZIP_K;
+               dict_chunk_size = (dict_len >= dict_chunk_size) ? dict_chunk_size : dict_len;
+
+               buf_chunk_size = rand() % IGZIP_K;
+               buf_chunk_size = (buf_len >= buf_chunk_size) ? buf_chunk_size : buf_len;
+
+               if (rand() % 3 == 0 && buf_len >= dict_len)
+                       memcpy(dict, buf, dict_chunk_size);
+               else
+                       create_rand_repeat_data(dict, dict_chunk_size);
+
+               dict_len -= dict_chunk_size;
+               dict += dict_chunk_size;
+               buf_len -= buf_chunk_size;
+               buf += buf_chunk_size;
+       }
+
+}
+
+int get_rand_data_length(void)
+{
+       int max_mask =
+           (1 << ((rand() % (MAX_BITS_COUNT - MIN_BITS_COUNT)) + MIN_BITS_COUNT)) - 1;
+       return rand() & max_mask;
+}
+
+int get_rand_level(void)
+{
+       return ISAL_DEF_MIN_LEVEL + rand() % (ISAL_DEF_MAX_LEVEL - ISAL_DEF_MIN_LEVEL + 1);
+
+}
+
+int get_rand_level_buf_size(int level)
+{
+       int size;
+       switch (level) {
+       case 3:
+               size = rand() % IBUF_SIZE + ISAL_DEF_LVL3_MIN;
+               break;
+       case 2:
+               size = rand() % IBUF_SIZE + ISAL_DEF_LVL2_MIN;
+               break;
+       case 1:
+       default:
+               size = rand() % IBUF_SIZE + ISAL_DEF_LVL1_MIN;
+       }
+       return size;
+}
+
 void print_error(int error_code)
 {
        switch (error_code) {
@@ -222,12 +393,27 @@ void print_error(int error_code)
        case INFLATE_INVALID_LOOK_BACK_DISTANCE:
                printf("error: invalid look back distance found while decompressing\n");
                break;
+       case INFLATE_INPUT_STREAM_INTEGRITY_ERROR:
+               printf("error: inconsistent input buffer\n");
+               break;
+       case INFLATE_OUTPUT_STREAM_INTEGRITY_ERROR:
+               printf("error: inconsistent output buffer\n");
+               break;
        case INVALID_GZIP_HEADER:
                printf("error: incorrect gzip header found when inflating data\n");
                break;
        case INCORRECT_GZIP_TRAILER:
                printf("error: incorrect gzip trailer found when inflating data\n");
                break;
+       case INVALID_ZLIB_HEADER:
+               printf("error: incorrect zlib header found when inflating data\n");
+               break;
+       case INCORRECT_ZLIB_TRAILER:
+               printf("error: incorrect zlib trailer found when inflating data\n");
+               break;
+       case UNSUPPORTED_METHOD:
+               printf("error: invalid compression method in wrapper header\n");
+               break;
        case INVALID_FLUSH_ERROR:
                printf("error: invalid flush did not cause compression to error\n");
                break;
@@ -258,37 +444,27 @@ void print_uint8_t(uint8_t * array, uint64_t length)
        printf("\n");
 }
 
-uint32_t check_gzip_header(uint8_t * z_buf)
+void log_print(char *format, ...)
 {
-       /* These values are defined in RFC 1952 page 4 */
-       const uint8_t ID1 = 0x1f, ID2 = 0x8b, CM = 0x08, FLG = 0;
-       uint32_t ret = 0;
-       int i;
-       /* Verify that the gzip header is the one used in hufftables_c.c */
-       for (i = 0; i < gzip_hdr_bytes; i++)
-               if (z_buf[i] != gzip_hdr[i])
-                       ret = INVALID_GZIP_HEADER;
-
-       /* Verify that the gzip header is a valid gzip header */
-       if (*z_buf++ != ID1)
-               ret = INVALID_GZIP_HEADER;
+       va_list args;
+       va_start(args, format);
 
-       if (*z_buf++ != ID2)
-               ret = INVALID_GZIP_HEADER;
+       if (options.verbose)
+               vfprintf(stdout, format, args);
 
-       /* Verfiy compression method is Deflate */
-       if (*z_buf++ != CM)
-               ret = INVALID_GZIP_HEADER;
-
-       /* The following comparison is specific to how gzip headers are written in igzip */
-       /* Verify no extra flags are set */
-       if (*z_buf != FLG)
-               ret = INVALID_GZIP_HEADER;
+       va_end(args);
+}
 
-       /* The last 6 bytes in the gzip header do not contain any information
-        * important to decomrpessing the data */
+void log_uint8_t(uint8_t * array, uint64_t length)
+{
+       if (options.verbose)
+               print_uint8_t(array, length);
+}
 
-       return ret;
+void log_error(int error_code)
+{
+       if (options.verbose)
+               print_error(error_code);
 }
 
 uint32_t check_gzip_trl(uint64_t gzip_trl, uint32_t inflate_crc, uint8_t * uncompress_buf,
@@ -297,7 +473,7 @@ uint32_t check_gzip_trl(uint64_t gzip_trl, uint32_t inflate_crc, uint8_t * uncom
        uint64_t trl, ret = 0;
        uint32_t crc;
 
-       crc = find_crc(uncompress_buf, uncompress_len);
+       crc = crc32_gzip_refl_ref(0, uncompress_buf, uncompress_len);
        trl = ((uint64_t) uncompress_len << 32) | crc;
 
        if (crc != inflate_crc || trl != gzip_trl)
@@ -306,17 +482,56 @@ uint32_t check_gzip_trl(uint64_t gzip_trl, uint32_t inflate_crc, uint8_t * uncom
        return ret;
 }
 
+uint32_t check_zlib_trl(uint32_t zlib_trl, uint32_t inflate_adler, uint8_t * uncompress_buf,
+                       uint32_t uncompress_len)
+{
+       uint32_t trl, ret = 0;
+       uint32_t adler;
+
+       adler = adler_ref(1, uncompress_buf, uncompress_len);
+
+       trl =
+           (adler >> 24) | ((adler >> 8) & 0xFF00) | (adler << 24) | ((adler & 0xFF00) << 8);
+
+       if (adler != inflate_adler || trl != zlib_trl) {
+               ret = INCORRECT_ZLIB_TRAILER;
+       }
+
+       return ret;
+}
+
 int inflate_stateless_pass(uint8_t * compress_buf, uint64_t compress_len,
                           uint8_t * uncompress_buf, uint32_t * uncompress_len,
                           uint32_t gzip_flag)
 {
        struct inflate_state state;
-       int ret = 0;
+       int ret = 0, offset = 0;
+       struct isal_gzip_header gz_hdr;
+       struct isal_zlib_header z_hdr;
 
        state.next_in = compress_buf;
        state.avail_in = compress_len;
        state.next_out = uncompress_buf;
        state.avail_out = *uncompress_len;
+
+       if (gzip_flag == IGZIP_GZIP) {
+               if (rand() % 2 == 0) {
+                       memset(&gz_hdr, 0, sizeof(gz_hdr));
+                       isal_inflate_reset(&state);
+                       state.tmp_in_size = 0;
+                       gzip_flag = ISAL_GZIP_NO_HDR_VER;
+
+                       isal_read_gzip_header(&state, &gz_hdr);
+               }
+       } else if (gzip_flag == IGZIP_ZLIB) {
+               if (rand() % 2 == 0) {
+                       memset(&z_hdr, 0, sizeof(z_hdr));
+                       isal_inflate_reset(&state);
+                       gzip_flag = ISAL_ZLIB_NO_HDR_VER;
+                       isal_read_zlib_header(&state, &z_hdr);
+               }
+       }
+
        state.crc_flag = gzip_flag;
 
        ret = isal_inflate_stateless(&state);
@@ -324,11 +539,33 @@ int inflate_stateless_pass(uint8_t * compress_buf, uint64_t compress_len,
        *uncompress_len = state.total_out;
 
        if (gzip_flag) {
-               if (!ret)
-                       ret =
-                           check_gzip_trl(*(uint64_t *) state.next_in, state.crc,
-                                          uncompress_buf, *uncompress_len);
-               state.avail_in -= 8;
+               if (gzip_flag == IGZIP_GZIP || gzip_flag == IGZIP_GZIP_NO_HDR
+                   || gzip_flag == ISAL_GZIP_NO_HDR_VER) {
+                       if (gzip_flag == IGZIP_GZIP || gzip_flag == ISAL_GZIP_NO_HDR_VER)
+                               offset = gzip_trl_bytes;
+
+                       if (!ret)
+                               ret =
+                                   check_gzip_trl(load_u64(state.next_in - offset),
+                                                  state.crc, uncompress_buf, *uncompress_len);
+                       else if (ret == ISAL_INCORRECT_CHECKSUM)
+                               ret = INCORRECT_GZIP_TRAILER;
+                       state.avail_in -= (gzip_trl_bytes - offset);
+               } else if (gzip_flag == IGZIP_ZLIB || gzip_flag == IGZIP_ZLIB_NO_HDR
+                          || gzip_flag == ISAL_ZLIB_NO_HDR_VER) {
+                       if (gzip_flag == IGZIP_ZLIB || gzip_flag == ISAL_ZLIB_NO_HDR_VER)
+                               offset = zlib_trl_bytes;
+
+                       if (!ret)
+                               ret =
+                                   check_zlib_trl(load_u32(state.next_in - offset),
+                                                  state.crc, uncompress_buf, *uncompress_len);
+                       else if (ret == ISAL_INCORRECT_CHECKSUM)
+                               ret = INCORRECT_ZLIB_TRAILER;
+                       state.avail_in -= (zlib_trl_bytes - offset);
+
+               }
+
        }
 
        if (ret == 0 && state.avail_in != 0)
@@ -337,8 +574,71 @@ int inflate_stateless_pass(uint8_t * compress_buf, uint64_t compress_len,
        return ret;
 }
 
+/* Check if that the state of the data stream is consistent */
+int inflate_state_valid_check(struct inflate_state *state, uint8_t * in_buf, uint32_t in_size,
+                             uint8_t * out_buf, uint32_t out_size, uint32_t in_processed,
+                             uint32_t out_processed, uint32_t data_size)
+{
+       uint32_t in_buffer_size, total_out, out_buffer_size;
+
+       in_buffer_size = (in_size == 0) ? 0 : state->next_in - in_buf + state->avail_in;
+
+       /* Check for a consistent amount of data processed */
+       if (in_buffer_size != in_size)
+               return INFLATE_INPUT_STREAM_INTEGRITY_ERROR;
+
+       total_out =
+           (out_size == 0) ? out_processed : out_processed + (state->next_out - out_buf);
+       out_buffer_size = (out_size == 0) ? 0 : state->next_out - out_buf + state->avail_out;
+
+       /* Check for a consistent amount of data compressed */
+       if (total_out != state->total_out || out_buffer_size != out_size)
+               return INFLATE_OUTPUT_STREAM_INTEGRITY_ERROR;
+
+       return 0;
+}
+
+/* Performs compression with checks to discover and verify the state of the
+ * stream
+ * state: inflate data structure which has been initialized to use
+ * in_buf and out_buf as the buffers
+ * compress_len: size of all input compressed data
+ * data_size: size of all available output buffers
+ * in_buf: next buffer of data to be inflated
+ * in_size: size of in_buf
+ * out_buf: next out put buffer where data is stored
+ * out_size: size of out_buf
+ * in_processed: the amount of input data which has been loaded into buffers
+ * to be inflated, this includes the data in in_buf
+ * out_processed: the amount of output data which has been decompressed and stored,
+ * this does not include the data in the current out_buf
+*/
+int isal_inflate_with_checks(struct inflate_state *state, uint32_t compress_len,
+                            uint32_t data_size, uint8_t * in_buf, uint32_t in_size,
+                            uint32_t in_processed, uint8_t * out_buf, uint32_t out_size,
+                            uint32_t out_processed)
+{
+       int ret, stream_check = 0;
+
+       ret = isal_inflate(state);
+
+       /* Verify the stream is in a valid state when no errors occured */
+       if (ret >= 0) {
+               stream_check =
+                   inflate_state_valid_check(state, in_buf, in_size, out_buf, out_size,
+                                             in_processed, out_processed, data_size);
+       }
+
+       if (stream_check != 0)
+               return stream_check;
+
+       return ret;
+
+}
+
 int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
-                      uint8_t * uncompress_buf, uint32_t * uncompress_len, uint32_t gzip_flag)
+                      uint8_t * uncompress_buf, uint32_t * uncompress_len, uint32_t gzip_flag,
+                      uint8_t * dict, uint32_t dict_len, uint32_t hist_bits)
 {
        struct inflate_state *state = NULL;
        int ret = 0;
@@ -346,6 +646,7 @@ int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
        uint32_t comp_tmp_size = 0, uncomp_tmp_size = 0;
        uint32_t comp_processed = 0, uncomp_processed = 0;
        int32_t read_in_old = 0;
+       uint32_t reset_test_flag = 0;
 
        state = malloc(sizeof(struct inflate_state));
        if (state == NULL) {
@@ -353,16 +654,39 @@ int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
                exit(0);
        }
 
+       create_rand_repeat_data((uint8_t *) state, sizeof(state));
        isal_inflate_init(state);
 
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               create_rand_repeat_data((uint8_t *) state, sizeof(state));
+       }
+
+       if (gzip_flag == IGZIP_GZIP_NO_HDR) {
+               if (rand() % 2 == 0)
+                       compress_len -= gzip_trl_bytes;
+               else
+                       gzip_flag = ISAL_GZIP_NO_HDR_VER;
+       } else if (gzip_flag == IGZIP_ZLIB_NO_HDR) {
+               if (rand() % 2 == 0)
+                       compress_len -= zlib_trl_bytes;
+               else
+                       gzip_flag = ISAL_ZLIB_NO_HDR_VER;
+       }
+
        state->next_in = NULL;
        state->next_out = NULL;
        state->avail_in = 0;
        state->avail_out = 0;
        state->crc_flag = gzip_flag;
+       state->hist_bits = hist_bits;
+
+       if (reset_test_flag)
+               isal_inflate_reset(state);
 
-       if (gzip_flag)
-               compress_len -= 8;
+       if (dict != NULL)
+               isal_inflate_set_dict(state, dict, dict_len);
 
        while (1) {
                if (state->avail_in == 0) {
@@ -425,7 +749,27 @@ int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
                        }
                }
 
-               ret = isal_inflate(state);
+               log_print("Pre inflate\n");
+               log_print
+                   ("compressed_size = 0x%05lx, in_processed = 0x%05x, in_size = 0x%05x, avail_in = 0x%05x\n",
+                    compress_len, comp_processed, comp_tmp_size, state->avail_in);
+               log_print
+                   ("data_size       = 0x%05x, out_processed  = 0x%05x, out_size  = 0x%05x, avail_out  = 0x%05x, total_out  = 0x%05x\n",
+                    *uncompress_len, uncomp_processed, uncomp_tmp_size, state->avail_out,
+                    state->total_out);
+
+               ret = isal_inflate_with_checks(state, compress_len, *uncompress_len, comp_tmp,
+                                              comp_tmp_size, comp_processed, uncomp_tmp,
+                                              uncomp_tmp_size, uncomp_processed);
+
+               log_print("Post inflate\n");
+               log_print
+                   ("compressed_size = 0x%05lx, in_processed = 0x%05x, in_size = 0x%05x, avail_in = 0x%05x\n",
+                    compress_len, comp_processed, comp_tmp_size, state->avail_in);
+               log_print
+                   ("data_size       = 0x%05x, out_processed  = 0x%05x, out_size  = 0x%05x, avail_out  = 0x%05x, total_out  = 0x%05x\n",
+                    *uncompress_len, uncomp_processed, uncomp_tmp_size, state->avail_out,
+                    state->total_out);
 
                if (state->block_state == ISAL_BLOCK_FINISH || ret != 0) {
                        memcpy(uncompress_buf + uncomp_processed, uncomp_tmp, uncomp_tmp_size);
@@ -451,10 +795,26 @@ int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
        }
 
        if (gzip_flag) {
-               if (!ret)
-                       ret =
-                           check_gzip_trl(*(uint64_t *) & compress_buf[compress_len],
-                                          state->crc, uncompress_buf, *uncompress_len);
+               if (!ret) {
+                       if (gzip_flag == IGZIP_GZIP || gzip_flag == IGZIP_GZIP_NO_HDR
+                           || gzip_flag == ISAL_GZIP_NO_HDR_VER) {
+                               if (gzip_flag == ISAL_GZIP_NO_HDR_VER
+                                   || gzip_flag == IGZIP_GZIP)
+                                       compress_len -= gzip_trl_bytes;
+                               ret =
+                                   check_gzip_trl(load_u64(compress_buf + compress_len),
+                                                  state->crc, uncompress_buf,
+                                                  *uncompress_len);
+                       } else if (gzip_flag == IGZIP_ZLIB_NO_HDR) {
+                               if (gzip_flag == IGZIP_ZLIB
+                                   || gzip_flag == ISAL_ZLIB_NO_HDR_VER)
+                                       compress_len -= zlib_trl_bytes;
+                               ret =
+                                   check_zlib_trl(load_u32(compress_buf + compress_len),
+                                                  state->crc, uncompress_buf,
+                                                  *uncompress_len);
+                       }
+               }
        }
        if (ret == 0 && state->avail_in != 0)
                ret = INFLATE_LEFTOVER_INPUT;
@@ -473,9 +833,29 @@ int inflate_multi_pass(uint8_t * compress_buf, uint64_t compress_len,
        return ret;
 }
 
+int inflate_ret_to_code(int ret)
+{
+       switch (ret) {
+       case ISAL_DECOMP_OK:
+               return 0;
+       case ISAL_END_INPUT:
+               return INFLATE_END_OF_INPUT;
+       case ISAL_OUT_OVERFLOW:
+               return INFLATE_OUT_BUFFER_OVERFLOW;
+       case ISAL_INVALID_BLOCK:
+               return INFLATE_INVALID_BLOCK_HEADER;
+       case ISAL_INVALID_SYMBOL:
+               return INFLATE_INVALID_SYMBOL;
+       case ISAL_INVALID_LOOKBACK:
+               return INFLATE_INVALID_LOOK_BACK_DISTANCE;
+       default:
+               return INFLATE_GENERAL_ERROR;
+       }
+}
+
 /* Inflate the  compressed data and check that the decompressed data agrees with the input data */
-int inflate_check(uint8_t * z_buf, int z_size, uint8_t * in_buf, int in_size,
-                 uint32_t gzip_flag)
+int inflate_check(uint8_t * z_buf, uint32_t z_size, uint8_t * in_buf, uint32_t in_size,
+                 uint32_t gzip_flag, uint8_t * dict, uint32_t dict_len, uint32_t hist_bits)
 {
        /* Test inflate with reference inflate */
 
@@ -495,35 +875,30 @@ int inflate_check(uint8_t * z_buf, int z_size, uint8_t * in_buf, int in_size,
        if (test_buf != NULL)
                memset(test_buf, 0xff, test_size);
 
-       if (gzip_flag == IGZIP_GZIP) {
-               gzip_hdr_result = check_gzip_header(z_buf);
-               z_buf += gzip_hdr_bytes;
-               z_size -= gzip_hdr_bytes;
-       }
-
-       if (inflate_type == 0) {
+       if (inflate_type == 0 && dict == NULL) {
                ret = inflate_stateless_pass(z_buf, z_size, test_buf, &test_size, gzip_flag);
                inflate_type = 1;
        } else {
-               ret = inflate_multi_pass(z_buf, z_size, test_buf, &test_size, gzip_flag);
+               ret =
+                   inflate_multi_pass(z_buf, z_size, test_buf, &test_size, gzip_flag, dict,
+                                      dict_len, hist_bits);
                inflate_type = 0;
        }
 
        if (test_buf != NULL)
                mem_result = memcmp(in_buf, test_buf, in_size);
 
-#ifdef VERBOSE
-       int i;
-       if (mem_result)
+       if (options.verbose && mem_result) {
+               int i;
                for (i = 0; i < in_size; i++) {
                        if (in_buf[i] != test_buf[i]) {
-                               printf
-                                   ("First incorrect data at 0x%x of 0x%x, 0x%x != 0x%x\n",
-                                    i, in_size, in_buf[i], test_buf[i]);
+                               log_print
+                                   ("First incorrect data at 0x%x of 0x%x, 0x%x != 0x%x\n", i,
+                                    in_size, in_buf[i], test_buf[i]);
                                break;
                        }
                }
-#endif
+       }
 
        if (test_buf != NULL)
                free(test_buf);
@@ -551,7 +926,25 @@ int inflate_check(uint8_t * z_buf, int z_size, uint8_t * in_buf, int in_size,
        case INCORRECT_GZIP_TRAILER:
                gzip_trl_result = INCORRECT_GZIP_TRAILER;
                break;
-
+       case INCORRECT_ZLIB_TRAILER:
+               gzip_trl_result = INCORRECT_ZLIB_TRAILER;
+               break;
+       case ISAL_INCORRECT_CHECKSUM:
+               if (gzip_flag == IGZIP_GZIP || gzip_flag == IGZIP_GZIP_NO_HDR
+                   || gzip_flag == ISAL_GZIP_NO_HDR_VER)
+                       gzip_trl_result = INCORRECT_GZIP_TRAILER;
+               else if (gzip_flag == IGZIP_ZLIB || gzip_flag == IGZIP_ZLIB_NO_HDR
+                        || gzip_flag == ISAL_ZLIB_NO_HDR_VER)
+                       gzip_trl_result = INCORRECT_GZIP_TRAILER;
+               break;
+       case ISAL_UNSUPPORTED_METHOD:
+               return UNSUPPORTED_METHOD;
+       case INFLATE_INPUT_STREAM_INTEGRITY_ERROR:
+               return INFLATE_INPUT_STREAM_INTEGRITY_ERROR;
+               break;
+       case INFLATE_OUTPUT_STREAM_INTEGRITY_ERROR:
+               return INFLATE_OUTPUT_STREAM_INTEGRITY_ERROR;
+               break;
        default:
                return INFLATE_GENERAL_ERROR;
                break;
@@ -563,13 +956,17 @@ int inflate_check(uint8_t * z_buf, int z_size, uint8_t * in_buf, int in_size,
        if (mem_result)
                return RESULT_ERROR;
 
-       if (gzip_flag) {
-               if (gzip_hdr_result)
-                       return INVALID_GZIP_HEADER;
+       if (gzip_hdr_result == INVALID_GZIP_HEADER)
+               return INVALID_GZIP_HEADER;
 
-               if (gzip_trl_result)
-                       return INCORRECT_GZIP_TRAILER;
-       }
+       else if (gzip_hdr_result == INVALID_ZLIB_HEADER)
+               return INVALID_ZLIB_HEADER;
+
+       if (gzip_trl_result == INCORRECT_GZIP_TRAILER)
+               return INCORRECT_GZIP_TRAILER;
+
+       else if (gzip_trl_result == INCORRECT_ZLIB_TRAILER)
+               return INCORRECT_ZLIB_TRAILER;
 
        return 0;
 }
@@ -625,28 +1022,24 @@ int isal_deflate_with_checks(struct isal_zstream *stream, uint32_t data_size,
        int ret, stream_check;
        struct isal_zstate *state = &stream->internal_state;
 
-#ifdef VERBOSE
-       printf("Pre compression\n");
-       printf
+       log_print("Pre compression\n");
+       log_print
            ("data_size       = 0x%05x, in_processed  = 0x%05x, in_size  = 0x%05x, avail_in  = 0x%05x, total_in  = 0x%05x\n",
             data_size, in_processed, in_size, stream->avail_in, stream->total_in);
-       printf
+       log_print
            ("compressed_size = 0x%05x, out_processed = 0x%05x, out_size = 0x%05x, avail_out = 0x%05x, total_out = 0x%05x\n",
             compressed_size, out_processed, out_size, stream->avail_out, stream->total_out);
-#endif
 
        ret = isal_deflate(stream);
 
-#ifdef VERBOSE
-       printf("Post compression\n");
-       printf
+       log_print("Post compression\n");
+       log_print
            ("data_size       = 0x%05x, in_processed  = 0x%05x, in_size  = 0x%05x, avail_in  = 0x%05x, total_in  = 0x%05x\n",
             data_size, in_processed, in_size, stream->avail_in, stream->total_in);
-       printf
+       log_print
            ("compressed_size = 0x%05x, out_processed = 0x%05x, out_size = 0x%05x, avail_out = 0x%05x, total_out = 0x%05x\n",
             compressed_size, out_processed, out_size, stream->avail_out, stream->total_out);
-       printf("\n\n");
-#endif
+       log_print("\n\n");
 
        /* Verify the stream is in a valid state */
        stream_check = stream_valid_check(stream, in_buf, in_size, out_buf, out_size,
@@ -667,9 +1060,21 @@ int isal_deflate_with_checks(struct isal_zstream *stream, uint32_t data_size,
 
 }
 
-void set_random_hufftable(struct isal_zstream *stream)
+void set_random_hufftable(struct isal_zstream *stream, int level, uint8_t * data,
+                         uint32_t data_size)
 {
-       isal_deflate_set_hufftables(stream, hufftables, rand() % 4);
+       struct isal_hufftables *huff = hufftables;
+       struct isal_huff_histogram hist;
+       if (level == 0 || rand() % 16 == 0) {
+               if (rand() % 8 == 0) {
+                       huff = hufftables_subset;
+                       memset(&hist, 0, sizeof(hist));
+                       isal_update_histogram(data, data_size, &hist);
+                       isal_create_hufftables_subset(huff, &hist);
+               }
+
+               isal_deflate_set_hufftables(stream, huff, rand() % 4);
+       }
 }
 
 /* Compress the input data into the output buffer where the input buffer and
@@ -677,51 +1082,79 @@ void set_random_hufftable(struct isal_zstream *stream)
  * compression*/
 int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed_buf,
                        uint32_t * compressed_size, uint32_t flush_type, uint32_t gzip_flag,
-                       uint32_t level)
+                       uint32_t level, uint8_t * dict, uint32_t dict_len, uint32_t hist_bits)
 {
        int ret = IGZIP_COMP_OK;
        uint8_t *in_buf = NULL, *out_buf = NULL;
        uint32_t in_size = 0, out_size = 0;
        uint32_t in_processed = 0, out_processed = 0;
-       struct isal_zstream stream;
-       struct isal_zstate *state = &stream.internal_state;
+       struct isal_zstream *stream;
+       struct isal_zstate *state;
        uint32_t loop_count = 0;
        uint32_t level_buf_size;
        uint8_t *level_buf = NULL;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
+       uint8_t tmp_symbol;
+       int no_mod = 0;
 
-#ifdef VERBOSE
-       printf("Starting Compress Multi Pass\n");
-#endif
+       log_print("Starting Compress Multi Pass\n");
 
-       create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+       stream = malloc(sizeof(*stream));
+       if (stream == NULL)
+               return MALLOC_FAILED;
+       state = &stream->internal_state;
 
-       isal_deflate_init(&stream);
+       create_rand_repeat_data((uint8_t *) stream, sizeof(*stream));
+
+       isal_deflate_init(stream);
 
        if (state->state != ZSTATE_NEW_HDR)
                return COMPRESS_INCORRECT_STATE;
 
-       stream.flush = flush_type;
-       stream.end_of_stream = 0;
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream->hufftables;
+               create_rand_repeat_data((uint8_t *) stream, sizeof(*stream));
+
+               /* Restore variables not necessarily set by user */
+               stream->hufftables = huff_tmp;
+               stream->end_of_stream = 0;
+               stream->level = 0;
+               stream->level_buf = NULL;
+               stream->level_buf_size = 0;
+       }
+
+       stream->flush = flush_type;
+       stream->end_of_stream = 0;
 
        /* These are set here to allow the loop to run correctly */
-       stream.avail_in = 0;
-       stream.avail_out = 0;
-       stream.gzip_flag = gzip_flag;
-       stream.level = level;
+       stream->avail_in = 0;
+       stream->avail_out = 0;
+       stream->gzip_flag = gzip_flag;
+       stream->level = level;
+       stream->hist_bits = hist_bits;
 
        if (level >= 1) {
-               level_buf_size = rand() % IBUF_SIZE + ISAL_DEF_LVL1_MIN;
+               level_buf_size = get_rand_level_buf_size(stream->level);
                level_buf = malloc(level_buf_size);
                create_rand_repeat_data(level_buf, level_buf_size);
-               stream.level_buf = level_buf;
-               stream.level_buf_size = level_buf_size;
+               stream->level_buf = level_buf;
+               stream->level_buf_size = level_buf_size;
        }
 
+       if (reset_test_flag)
+               isal_deflate_reset(stream);
+
+       if (dict != NULL)
+               isal_deflate_set_dict(stream, dict, dict_len);
+
        while (1) {
                loop_count++;
 
                /* Setup in buffer for next round of compression */
-               if (stream.avail_in == 0) {
+               if (stream->avail_in == 0) {
                        if (flush_type == NO_FLUSH || state->state == ZSTATE_NEW_HDR) {
                                /* Randomly choose size of the next out buffer */
                                in_size = rand() % (data_size + 1);
@@ -729,7 +1162,7 @@ int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed
                                /* Limit size of buffer to be smaller than maximum */
                                if (in_size >= data_size - in_processed) {
                                        in_size = data_size - in_processed;
-                                       stream.end_of_stream = 1;
+                                       stream->end_of_stream = 1;
                                }
 
                                if (in_size != 0) {
@@ -746,19 +1179,31 @@ int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed
                                        memcpy(in_buf, data + in_processed, in_size);
                                        in_processed += in_size;
 
-                                       stream.avail_in = in_size;
-                                       stream.next_in = in_buf;
+                                       stream->avail_in = in_size;
+                                       stream->next_in = in_buf;
                                }
                        }
+               } else {
+                       /* Randomly modify data after next in */
+                       if (rand() % 4 == 0 && !no_mod) {
+
+                               tmp_symbol = rand();
+                               log_print
+                                   ("Modifying data at index 0x%x from 0x%x to 0x%x before recalling isal_deflate\n",
+                                    in_processed - stream->avail_in,
+                                    data[in_processed - stream->avail_in], tmp_symbol);
+                               *stream->next_in = tmp_symbol;
+                               data[in_processed - stream->avail_in] = tmp_symbol;
+                       }
                }
 
                /* Setup out buffer for next round of compression */
-               if (stream.avail_out == 0) {
+               if (stream->avail_out == 0) {
                        /* Save compressed data inot compressed_buf */
                        if (out_buf != NULL) {
                                memcpy(compressed_buf + out_processed, out_buf,
-                                      out_size - stream.avail_out);
-                               out_processed += out_size - stream.avail_out;
+                                      out_size - stream->avail_out);
+                               out_processed += out_size - stream->avail_out;
                        }
 
                        /* Randomly choose size of the next out buffer */
@@ -780,16 +1225,21 @@ int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed
                                        break;
                                }
 
-                               stream.avail_out = out_size;
-                               stream.next_out = out_buf;
+                               stream->avail_out = out_size;
+                               stream->next_out = out_buf;
                        }
                }
 
-               if (state->state == ZSTATE_NEW_HDR)
-                       set_random_hufftable(&stream);
+               if (state->state == ZSTATE_NEW_HDR) {
+                       set_random_hufftable(stream, level, data, data_size);
+                       if (stream->hufftables == hufftables_subset)
+                               no_mod = 1;
+                       else
+                               no_mod = 0;
+               }
 
                ret =
-                   isal_deflate_with_checks(&stream, data_size, *compressed_size, in_buf,
+                   isal_deflate_with_checks(stream, data_size, *compressed_size, in_buf,
                                             in_size, in_processed, out_buf, out_size,
                                             out_processed);
 
@@ -803,12 +1253,14 @@ int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed
                /* Check if the compression is completed */
                if (state->state == ZSTATE_END) {
                        memcpy(compressed_buf + out_processed, out_buf, out_size);
-                       *compressed_size = stream.total_out;
+                       *compressed_size = stream->total_out;
                        break;
                }
 
        }
 
+       if (stream != NULL)
+               free(stream);
        if (level_buf != NULL)
                free(level_buf);
        if (in_buf != NULL)
@@ -827,27 +1279,41 @@ int compress_multi_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed
 /* Compress the input data into the outbuffer in one call to isal_deflate */
 int compress_single_pass(uint8_t * data, uint32_t data_size, uint8_t * compressed_buf,
                         uint32_t * compressed_size, uint32_t flush_type, uint32_t gzip_flag,
-                        uint32_t level)
+                        uint32_t level, uint8_t * dict, uint32_t dict_len, uint32_t hist_bits)
 {
        int ret = IGZIP_COMP_OK;
        struct isal_zstream stream;
        struct isal_zstate *state = &stream.internal_state;
        uint32_t level_buf_size;
        uint8_t *level_buf = NULL;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
 
-#ifdef VERBOSE
-       printf("Starting Compress Single Pass\n");
-#endif
+       log_print("Starting Compress Single Pass\n");
 
        create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
 
        isal_deflate_init(&stream);
 
-       set_random_hufftable(&stream);
+       set_random_hufftable(&stream, level, data, data_size);
 
        if (state->state != ZSTATE_NEW_HDR)
                return COMPRESS_INCORRECT_STATE;
 
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream.hufftables;
+               create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+               /* Restore variables not necessarily set by user */
+               stream.hufftables = huff_tmp;
+               stream.end_of_stream = 0;
+               stream.level = 0;
+               stream.level_buf = NULL;
+               stream.level_buf_size = 0;
+       }
+
        stream.flush = flush_type;
        stream.avail_in = data_size;
        stream.next_in = data;
@@ -856,15 +1322,22 @@ int compress_single_pass(uint8_t * data, uint32_t data_size, uint8_t * compresse
        stream.end_of_stream = 1;
        stream.gzip_flag = gzip_flag;
        stream.level = level;
+       stream.hist_bits = hist_bits;
 
        if (level >= 1) {
-               level_buf_size = rand() % IBUF_SIZE + ISAL_DEF_LVL1_MIN;
+               level_buf_size = get_rand_level_buf_size(stream.level);
                level_buf = malloc(level_buf_size);
                create_rand_repeat_data(level_buf, level_buf_size);
                stream.level_buf = level_buf;
                stream.level_buf_size = level_buf_size;
        }
 
+       if (reset_test_flag)
+               isal_deflate_reset(&stream);
+
+       if (dict != NULL)
+               isal_deflate_set_dict(&stream, dict, dict_len);
+
        ret =
            isal_deflate_with_checks(&stream, data_size, *compressed_size, data, data_size,
                                     data_size, compressed_buf, *compressed_size, 0);
@@ -882,21 +1355,159 @@ int compress_single_pass(uint8_t * data, uint32_t data_size, uint8_t * compresse
 
 }
 
+/* Compress the input data repeatedly into the outbuffer
+ * Compresses and verifies in place to decrease memory usage
+ */
+int compress_ver_rep_buf(uint8_t * data, uint32_t data_size, uint64_t data_rep_size,
+                        uint8_t * compressed_buf, uint32_t compressed_size,
+                        uint8_t * decomp_buf, uint32_t decomp_buf_size, uint32_t flush_type,
+                        uint32_t gzip_flag, uint32_t level)
+{
+       int ret = IGZIP_COMP_OK;
+       struct isal_zstream stream;
+       struct inflate_state state;
+       uint32_t level_buf_size;
+       uint8_t *level_buf = NULL;
+       uint64_t data_remaining = data_rep_size;
+       uint64_t data_verified = 0;
+       uint32_t index;
+       uint32_t out_size, cmp_size;
+       uint32_t avail_out_start;
+
+       log_print("Starting Compress and Verify Repeated Buffer\n");
+
+       create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+       /* Setup compression stream */
+       isal_deflate_init(&stream);
+       stream.avail_in = 0;
+       stream.next_in = NULL;
+       stream.avail_out = 0;
+       stream.next_out = NULL;
+
+       set_random_hufftable(&stream, level, data, data_size);
+       stream.flush = flush_type;
+       stream.end_of_stream = 0;
+       stream.gzip_flag = gzip_flag;
+       stream.level = level;
+
+       if (level >= 1) {
+               level_buf_size = get_rand_level_buf_size(stream.level);
+               level_buf = malloc(level_buf_size);
+               create_rand_repeat_data(level_buf, level_buf_size);
+               stream.level_buf = level_buf;
+               stream.level_buf_size = level_buf_size;
+       }
+
+       /* Setup decompression stream */
+       create_rand_repeat_data((uint8_t *) & state, sizeof(state));
+       isal_inflate_init(&state);
+       state.crc_flag = gzip_flag;
+
+       while (data_remaining || stream.avail_in) {
+               /* Compress the input buffer */
+               if (stream.next_out == NULL) {
+                       stream.avail_out = compressed_size;
+                       stream.next_out = compressed_buf;
+               }
+
+               while (stream.avail_out > 0 && (data_remaining || stream.avail_in)) {
+                       if (stream.avail_in == 0) {
+                               stream.avail_in = data_size;
+                               if (data_size >= data_remaining) {
+                                       stream.avail_in = data_remaining;
+                                       stream.end_of_stream = 1;
+                               }
+
+                               stream.next_in = data;
+                               data_remaining -= stream.avail_in;
+                       }
+
+                       ret = isal_deflate(&stream);
+
+                       if (ret)
+                               return COMPRESS_GENERAL_ERROR;
+               }
+
+               /* Verfiy the compressed buffer */
+               state.next_in = compressed_buf;
+               state.avail_in = compressed_size;
+               state.next_out = NULL;
+               state.avail_out = 0;
+               create_rand_repeat_data(decomp_buf, decomp_buf_size);
+
+               while (state.avail_out == 0) {
+                       state.next_out = decomp_buf;
+                       state.avail_out = decomp_buf_size;
+
+                       /* Force decoding to stop when avail_out rolls over */
+                       if ((1ULL << 32) - state.total_out < decomp_buf_size)
+                               state.avail_out = (1ULL << 32) - state.total_out;
+
+                       avail_out_start = state.avail_out;
+
+                       ret = isal_inflate(&state);
+                       if (ret)
+                               return inflate_ret_to_code(ret);
+
+                       /* Check data accuracy */
+                       index = data_verified % data_size;
+                       out_size = avail_out_start - state.avail_out;
+                       cmp_size =
+                           (out_size > data_size - index) ? data_size - index : out_size;
+                       ret |= memcmp(decomp_buf, data + index, cmp_size);
+                       out_size -= cmp_size;
+                       cmp_size = (out_size > index) ? index : out_size;
+                       ret |= memcmp(decomp_buf + data_size - index, data, cmp_size);
+                       out_size -= cmp_size;
+                       cmp_size = out_size;
+                       ret |= memcmp(decomp_buf, decomp_buf + data_size, out_size);
+                       if (ret)
+                               return RESULT_ERROR;
+
+                       data_verified += avail_out_start - state.avail_out;
+               }
+               stream.next_out = NULL;
+       }
+
+       if (level_buf != NULL)
+               free(level_buf);
+
+       return ret;
+
+}
+
 /* Statelessly compress the input buffer into the output buffer */
 int compress_stateless(uint8_t * data, uint32_t data_size, uint8_t * compressed_buf,
                       uint32_t * compressed_size, uint32_t flush_type, uint32_t gzip_flag,
-                      uint32_t level)
+                      uint32_t level, uint32_t hist_bits)
 {
        int ret = IGZIP_COMP_OK;
        struct isal_zstream stream;
        uint32_t level_buf_size;
        uint8_t *level_buf = NULL;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
 
        create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
 
        isal_deflate_stateless_init(&stream);
 
-       set_random_hufftable(&stream);
+       set_random_hufftable(&stream, level, data, data_size);
+
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream.hufftables;
+               create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+               /* Restore variables not necessarily set by user */
+               stream.hufftables = huff_tmp;
+               stream.end_of_stream = 0;
+               stream.level = 0;
+               stream.level_buf = NULL;
+               stream.level_buf_size = 0;
+       }
 
        stream.avail_in = data_size;
        stream.next_in = data;
@@ -907,17 +1518,30 @@ int compress_stateless(uint8_t * data, uint32_t data_size, uint8_t * compressed_
        stream.next_out = compressed_buf;
        stream.gzip_flag = gzip_flag;
        stream.level = level;
+       stream.hist_bits = hist_bits;
 
-       if (level >= 1) {
+       if (level == 1) {
+               /* This is to test case where level buf uses already existing
+                * internal buffers */
                level_buf_size = rand() % IBUF_SIZE;
+
                if (level_buf_size >= ISAL_DEF_LVL1_MIN) {
                        level_buf = malloc(level_buf_size);
                        create_rand_repeat_data(level_buf, level_buf_size);
                        stream.level_buf = level_buf;
                        stream.level_buf_size = level_buf_size;
                }
+       } else if (level > 1) {
+               level_buf_size = get_rand_level_buf_size(level);
+               level_buf = malloc(level_buf_size);
+               create_rand_repeat_data(level_buf, level_buf_size);
+               stream.level_buf = level_buf;
+               stream.level_buf_size = level_buf_size;
        }
 
+       if (reset_test_flag)
+               isal_deflate_reset(&stream);
+
        ret = isal_deflate_stateless(&stream);
 
        if (level_buf != NULL)
@@ -938,8 +1562,11 @@ int compress_stateless(uint8_t * data, uint32_t data_size, uint8_t * compressed_
                        return COMPRESS_OUT_BUFFER_OVERFLOW;
                else if (ret == INVALID_FLUSH)
                        return INVALID_FLUSH_ERROR;
-               else
+               else {
+                       printf("Return due to ret = %d with level = %d or %d\n", ret, level,
+                              stream.level);
                        return COMPRESS_GENERAL_ERROR;
+               }
        }
 
        if (!stream.end_of_stream) {
@@ -957,7 +1584,8 @@ int compress_stateless(uint8_t * data, uint32_t data_size, uint8_t * compressed_
 
 /* Statelessly compress the input buffer into the output buffer */
 int compress_stateless_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed_buf,
-                                 uint32_t * compressed_size, uint32_t level)
+                                 uint32_t * compressed_size, uint32_t level,
+                                 uint32_t hist_bits)
 {
        int ret = IGZIP_COMP_OK;
        uint8_t *in_buf = NULL, *level_buf = NULL, *out_buf = compressed_buf;
@@ -965,31 +1593,59 @@ int compress_stateless_full_flush(uint8_t * data, uint32_t data_size, uint8_t *
        uint32_t in_processed = 00;
        struct isal_zstream stream;
        uint32_t loop_count = 0;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
 
-#ifdef VERBOSE
-       printf("Starting Stateless Compress Full Flush\n");
-#endif
+       log_print("Starting Stateless Compress Full Flush\n");
 
        create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
 
        isal_deflate_stateless_init(&stream);
 
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream.hufftables;
+               create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+               /* Restore variables not necessarily set by user */
+               stream.hufftables = huff_tmp;
+               stream.end_of_stream = 0;
+               stream.level = 0;
+               stream.level_buf = NULL;
+               stream.level_buf_size = 0;
+               stream.gzip_flag = 0;
+       }
+
        stream.flush = FULL_FLUSH;
        stream.end_of_stream = 0;
        stream.avail_out = *compressed_size;
        stream.next_out = compressed_buf;
        stream.level = level;
+       stream.hist_bits = hist_bits;
 
-       if (level >= 1) {
+       if (level == 1) {
+               /* This is to test case where level_buf uses already existing
+                * internal buffers */
                level_buf_size = rand() % IBUF_SIZE;
+
                if (level_buf_size >= ISAL_DEF_LVL1_MIN) {
                        level_buf = malloc(level_buf_size);
                        create_rand_repeat_data(level_buf, level_buf_size);
                        stream.level_buf = level_buf;
                        stream.level_buf_size = level_buf_size;
                }
+       } else if (level > 1) {
+               level_buf_size = get_rand_level_buf_size(level);
+               level_buf = malloc(level_buf_size);
+               create_rand_repeat_data(level_buf, level_buf_size);
+               stream.level_buf = level_buf;
+               stream.level_buf_size = level_buf_size;
        }
 
+       if (reset_test_flag)
+               isal_deflate_reset(&stream);
+
        while (1) {
                loop_count++;
 
@@ -1024,9 +1680,10 @@ int compress_stateless_full_flush(uint8_t * data, uint32_t data_size, uint8_t *
                out_buf = stream.next_out;
 
                if (stream.internal_state.state == ZSTATE_NEW_HDR)
-                       set_random_hufftable(&stream);
+                       set_random_hufftable(&stream, level, data, data_size);
 
                ret = isal_deflate_stateless(&stream);
+
                assert(stream.internal_state.bitbuf.m_bit_count == 0);
 
                assert(compressed_buf == stream.next_out - stream.total_out);
@@ -1034,7 +1691,9 @@ int compress_stateless_full_flush(uint8_t * data, uint32_t data_size, uint8_t *
                        break;
 
                /* Verify that blocks are independent */
-               ret = inflate_check(out_buf, stream.next_out - out_buf, in_buf, in_size, 0);
+               ret =
+                   inflate_check(out_buf, stream.next_out - out_buf, in_buf, in_size, 0, NULL,
+                                 0, hist_bits);
 
                if (ret == INFLATE_INVALID_LOOK_BACK_DISTANCE) {
                        break;
@@ -1075,10 +1734,10 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
        struct isal_zstream stream;
        struct isal_zstate *state = &stream.internal_state;
        uint32_t loop_count = 0;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
 
-#ifdef VERBOSE
-       printf("Starting Compress Full Flush\n");
-#endif
+       log_print("Starting Compress Full Flush\n");
 
        create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
 
@@ -1087,6 +1746,21 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
        if (state->state != ZSTATE_NEW_HDR)
                return COMPRESS_INCORRECT_STATE;
 
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream.hufftables;
+               create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+               /* Restore variables not necessarily set by user */
+               stream.hufftables = huff_tmp;
+               stream.end_of_stream = 0;
+               stream.level = 0;
+               stream.level_buf = NULL;
+               stream.level_buf_size = 0;
+               stream.hist_bits = 0;
+       }
+
        stream.flush = FULL_FLUSH;
        stream.end_of_stream = 0;
        stream.avail_out = *compressed_size;
@@ -1096,7 +1770,7 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
        stream.level = level;
 
        if (level >= 1) {
-               level_buf_size = rand() % IBUF_SIZE + ISAL_DEF_LVL1_MIN;
+               level_buf_size = get_rand_level_buf_size(stream.level);
                if (level_buf_size >= ISAL_DEF_LVL1_MIN) {
                        level_buf = malloc(level_buf_size);
                        create_rand_repeat_data(level_buf, level_buf_size);
@@ -1105,6 +1779,9 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
                }
        }
 
+       if (reset_test_flag)
+               isal_deflate_reset(&stream);
+
        while (1) {
                loop_count++;
 
@@ -1142,7 +1819,7 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
                }
 
                if (state->state == ZSTATE_NEW_HDR)
-                       set_random_hufftable(&stream);
+                       set_random_hufftable(&stream, level, data, data_size);
 
                ret = isal_deflate(&stream);
 
@@ -1153,7 +1830,7 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
                if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_END) {
                        ret =
                            inflate_check(out_buf, stream.next_out - out_buf, in_buf, in_size,
-                                         0);
+                                         0, NULL, 0, 0);
 
                        if (ret == INFLATE_INVALID_LOOK_BACK_DISTANCE)
                                break;
@@ -1185,24 +1862,41 @@ int compress_full_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
 /*Compress the input buffer into the output buffer, but switch the flush type in
  * the middle of the compression to test what happens*/
 int compress_swap_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed_buf,
-                       uint32_t * compressed_size, uint32_t flush_type, uint32_t gzip_flag)
+                       uint32_t * compressed_size, uint32_t flush_type, int level,
+                       uint32_t gzip_flag)
 {
        int ret = IGZIP_COMP_OK;
        struct isal_zstream stream;
        struct isal_zstate *state = &stream.internal_state;
        uint32_t partial_size;
+       struct isal_hufftables *huff_tmp;
+       uint32_t reset_test_flag = 0;
+       uint32_t level_buf_size;
+       uint8_t *level_buf = NULL;
 
-#ifdef VERBOSE
-       printf("Starting Compress Swap Flush\n");
-#endif
+       log_print("Starting Compress Swap Flush\n");
 
        isal_deflate_init(&stream);
 
-       set_random_hufftable(&stream);
+       set_random_hufftable(&stream, 0, data, data_size);
 
        if (state->state != ZSTATE_NEW_HDR)
                return COMPRESS_INCORRECT_STATE;
 
+       if (rand() % 4 == 0) {
+               /* Test reset */
+               reset_test_flag = 1;
+               huff_tmp = stream.hufftables;
+               create_rand_repeat_data((uint8_t *) & stream, sizeof(stream));
+
+               /* Restore variables not necessarily set by user */
+               stream.hufftables = huff_tmp;
+               stream.end_of_stream = 0;
+               stream.level = 0;
+               stream.level_buf = NULL;
+               stream.level_buf_size = 0;
+       }
+
        partial_size = rand() % (data_size + 1);
 
        stream.flush = flush_type;
@@ -1212,6 +1906,17 @@ int compress_swap_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
        stream.next_out = compressed_buf;
        stream.end_of_stream = 0;
        stream.gzip_flag = gzip_flag;
+       if (level) {
+               stream.level = level;
+               level_buf_size = get_rand_level_buf_size(stream.level);
+               level_buf = malloc(level_buf_size);
+               create_rand_repeat_data(level_buf, level_buf_size);
+               stream.level_buf = level_buf;
+               stream.level_buf_size = level_buf_size;
+       }
+
+       if (reset_test_flag)
+               isal_deflate_reset(&stream);
 
        ret =
            isal_deflate_with_checks(&stream, data_size, *compressed_size, data, partial_size,
@@ -1221,7 +1926,7 @@ int compress_swap_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
                return ret;
 
        if (state->state == ZSTATE_NEW_HDR)
-               set_random_hufftable(&stream);
+               set_random_hufftable(&stream, 0, data, data_size);
 
        flush_type = rand() % 3;
 
@@ -1240,6 +1945,9 @@ int compress_swap_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
 
        *compressed_size = stream.total_out;
 
+       if (stream.level_buf != NULL)
+               free(stream.level_buf);
+
        return ret;
 }
 
@@ -1247,12 +1955,13 @@ int compress_swap_flush(uint8_t * data, uint32_t data_size, uint8_t * compressed
 int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_type)
 {
        int ret = IGZIP_COMP_OK;
-       uint32_t z_size, overflow, gzip_flag, level;
+       uint32_t z_size, overflow, gzip_flag, level, hist_bits;
        uint8_t *z_buf = NULL;
        uint8_t *in_buf = NULL;
 
-       gzip_flag = rand() % 3;
-       level = rand() % 2;
+       gzip_flag = rand() % 5;
+       hist_bits = rand() % 16;
+       level = get_rand_level();
 
        if (in_size != 0) {
                in_buf = malloc(in_size);
@@ -1265,8 +1974,14 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
 
        /* Test non-overflow case where a type 0 block is not written */
        z_size = 2 * in_size + hdr_bytes;
-       if (gzip_flag)
+       if (gzip_flag == IGZIP_GZIP)
                z_size += gzip_extra_bytes;
+       else if (gzip_flag == IGZIP_GZIP_NO_HDR)
+               z_size += gzip_trl_bytes;
+       else if (gzip_flag == IGZIP_ZLIB)
+               z_size += zlib_extra_bytes;
+       else if (gzip_flag == IGZIP_ZLIB_NO_HDR)
+               z_size += zlib_trl_bytes;
 
        z_buf = malloc(z_size);
 
@@ -1279,7 +1994,7 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
        if (flush_type != NO_FLUSH && flush_type != FULL_FLUSH) {
                ret =
                    compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag,
-                                      level);
+                                      level, hist_bits);
 
                if (ret != INVALID_FLUSH_ERROR)
                        print_error(ret);
@@ -1296,21 +2011,24 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
        }
 
        /* Else test valid flush type */
-       ret =
-           compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level);
+       ret = compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level,
+                                hist_bits);
 
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
-
-#ifdef VERBOSE
-       if (ret) {
-               printf("Compressed array at level %d with gzip flag %d: ", level, gzip_flag);
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
+               ret =
+                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, NULL, 0,
+                                 hist_bits);
+
+       if (options.verbose && ret) {
+               log_print
+                   ("Compressed array at level %d with gzip flag %d, flush type %d, and window bits %d: ",
+                    level, gzip_flag, flush_type, hist_bits);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
        }
-#endif
+
        if (z_buf != NULL) {
                free(z_buf);
                z_buf = NULL;
@@ -1322,10 +2040,17 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
 
        /*Test non-overflow case where a type 0 block is possible to be written */
        z_size = TYPE0_HDR_SIZE * ((in_size + TYPE0_MAX_SIZE - 1) / TYPE0_MAX_SIZE) + in_size;
-       if (gzip_flag)
-               z_size += gzip_extra_bytes;
 
-       if (z_size == gzip_extra_bytes)
+       if (gzip_flag == IGZIP_GZIP)
+               z_size += gzip_extra_bytes;
+       else if (gzip_flag == IGZIP_GZIP_NO_HDR)
+               z_size += gzip_trl_bytes;
+       else if (gzip_flag == IGZIP_ZLIB)
+               z_size += zlib_extra_bytes;
+       else if (gzip_flag == IGZIP_ZLIB_NO_HDR)
+               z_size += zlib_trl_bytes;
+
+       if (z_size <= gzip_extra_bytes)
                z_size += TYPE0_HDR_SIZE;
 
        if (z_size < 8)
@@ -1338,19 +2063,21 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
 
        create_rand_repeat_data(z_buf, z_size);
 
-       ret =
-           compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level);
+       ret = compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level,
+                                hist_bits);
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
-#ifdef VERBOSE
+               ret =
+                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, NULL, 0,
+                                 hist_bits);
        if (ret) {
-               printf("Compressed array at level %d with gzip flag %d: ", level, gzip_flag);
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
+               log_print
+                   ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                    level, gzip_flag, flush_type, hist_bits);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
        }
-#endif
 
        if (!ret) {
                free(z_buf);
@@ -1369,27 +2096,34 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
                                return MALLOC_FAILED;
                }
 
-               overflow =
-                   compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag,
-                                      level);
+               overflow = compress_stateless(in_buf, in_size, z_buf, &z_size, flush_type,
+                                             gzip_flag, level, hist_bits);
 
                if (overflow != COMPRESS_OUT_BUFFER_OVERFLOW) {
-#ifdef VERBOSE
-                       printf("overflow error = %d\n", overflow);
-                       print_error(overflow);
-                       if (overflow == 0) {
-                               overflow =
-                                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
-                               printf("inflate ret = %d\n", overflow);
-                               print_error(overflow);
+                       if (overflow == 0)
+                               ret =
+                                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag,
+                                                 NULL, 0, hist_bits);
+
+                       if (overflow != 0 || ret != 0) {
+                               log_print("overflow error = %d\n", overflow);
+                               log_error(overflow);
+                               log_print("inflate ret = %d\n", ret);
+                               log_error(ret);
+
+                               log_print
+                                   ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                                    level, gzip_flag, flush_type, hist_bits);
+
+                               log_uint8_t(z_buf, z_size);
+                               log_print("\n");
+                               log_print("Data: ");
+                               log_uint8_t(in_buf, in_size);
+
+                               printf("Failed on compress single pass overflow\n");
+                               print_error(ret);
+                               ret = OVERFLOW_TEST_ERROR;
                        }
-                       printf("Compressed array at level %d with gzip flag %d: ", level,
-                              gzip_flag);
-                       print_uint8_t(z_buf, z_size);
-                       printf("\n");
-                       printf("Data: ");
-                       print_uint8_t(in_buf, in_size);
-#endif
                }
        }
 
@@ -1418,24 +2152,27 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
                create_rand_repeat_data(z_buf, z_size);
 
                /* Else test valid flush type */
-               ret = compress_stateless_full_flush(in_buf, in_size, z_buf, &z_size, level);
+               ret = compress_stateless_full_flush(in_buf, in_size, z_buf, &z_size,
+                                                   level, hist_bits);
 
                if (!ret)
-                       ret = inflate_check(z_buf, z_size, in_buf, in_size, 0);
+                       ret =
+                           inflate_check(z_buf, z_size, in_buf, in_size, 0, NULL, 0,
+                                         hist_bits);
                else if (ret == COMPRESS_LOOP_COUNT_OVERFLOW)
                        ret = 0;
 
                print_error(ret);
-#ifdef VERBOSE
+
                if (ret) {
-                       printf("Compressed array at level %d with gzip flag %d: ", level,
-                              gzip_flag);
-                       print_uint8_t(z_buf, z_size);
-                       printf("\n");
-                       printf("Data: ");
-                       print_uint8_t(in_buf, in_size);
+                       log_print
+                           ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                            level, gzip_flag, FULL_FLUSH, hist_bits);
+                       log_uint8_t(z_buf, z_size);
+                       log_print("\n");
+                       log_print("Data: ");
+                       log_uint8_t(in_buf, in_size);
                }
-#endif
        }
        if (z_buf != NULL)
                free(z_buf);
@@ -1450,9 +2187,9 @@ int test_compress_stateless(uint8_t * in_data, uint32_t in_size, uint32_t flush_
 int test_compress(uint8_t * in_buf, uint32_t in_size, uint32_t flush_type)
 {
        int ret = IGZIP_COMP_OK, fin_ret = IGZIP_COMP_OK;
-       uint32_t overflow = 0, gzip_flag, level;
-       uint32_t z_size, z_size_max, z_compressed_size;
-       uint8_t *z_buf = NULL;
+       uint32_t overflow = 0, gzip_flag, level, hist_bits;
+       uint32_t z_size = 0, z_size_max = 0, z_compressed_size, dict_len = 0;
+       uint8_t *z_buf = NULL, *dict = NULL;
 
        /* Test a non overflow case */
        if (flush_type == NO_FLUSH)
@@ -1464,13 +2201,21 @@ int test_compress(uint8_t * in_buf, uint32_t in_size, uint32_t flush_type)
                return COMPRESS_GENERAL_ERROR;
        }
 
-       gzip_flag = rand() % 3;
-       level = rand() % 2;
-       if (gzip_flag)
-               z_size_max += gzip_extra_bytes;
+       gzip_flag = rand() % 5;
+       hist_bits = rand() % 16;
+       level = get_rand_level();
 
        z_size = z_size_max;
 
+       if (gzip_flag == IGZIP_GZIP)
+               z_size += gzip_extra_bytes;
+       else if (gzip_flag == IGZIP_GZIP_NO_HDR)
+               z_size += gzip_trl_bytes;
+       else if (gzip_flag == IGZIP_ZLIB)
+               z_size += zlib_extra_bytes;
+       else if (gzip_flag == IGZIP_ZLIB_NO_HDR)
+               z_size += zlib_trl_bytes;
+
        z_buf = malloc(z_size);
        if (z_buf == NULL) {
                print_error(MALLOC_FAILED);
@@ -1478,49 +2223,102 @@ int test_compress(uint8_t * in_buf, uint32_t in_size, uint32_t flush_type)
        }
        create_rand_repeat_data(z_buf, z_size);
 
+       if (rand() % 8 == 0) {
+               dict_len = (rand() % IGZIP_HIST_SIZE) + 1;
+               dict = malloc(dict_len);
+               if (dict == NULL) {
+                       print_error(MALLOC_FAILED);
+                       return MALLOC_FAILED;
+               }
+               create_rand_dict(dict, dict_len, z_buf, z_size);
+       }
+
        ret = compress_single_pass(in_buf, in_size, z_buf, &z_size, flush_type,
-                                  gzip_flag, level);
+                                  gzip_flag, level, dict, dict_len, hist_bits);
 
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+               ret =
+                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, dict, dict_len,
+                                 hist_bits);
 
        if (ret) {
-#ifdef VERBOSE
-               printf("Compressed array at level %d with gzip flag %d: ", level, gzip_flag);
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
-#endif
+               log_print
+                   ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                    level, gzip_flag, flush_type, hist_bits);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               if (dict != NULL) {
+                       log_print("Using Dictionary: ");
+                       log_uint8_t(dict, dict_len);
+                       log_print("\n");
+               }
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
+
                printf("Failed on compress single pass\n");
                print_error(ret);
        }
 
+       if (dict != NULL) {
+               free(dict);
+               dict = NULL;
+               dict_len = 0;
+       }
+
        fin_ret |= ret;
+       if (ret)
+               goto test_compress_cleanup;
 
        z_compressed_size = z_size;
        z_size = z_size_max;
        create_rand_repeat_data(z_buf, z_size_max);
 
+       if (rand() % 8 == 0) {
+               dict_len = (rand() % IGZIP_HIST_SIZE) + 1;
+               dict = malloc(dict_len);
+               if (dict == NULL) {
+                       print_error(MALLOC_FAILED);
+                       return MALLOC_FAILED;
+               }
+               create_rand_dict(dict, dict_len, z_buf, z_size);
+       }
+
        ret =
-           compress_multi_pass(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level);
+           compress_multi_pass(in_buf, in_size, z_buf, &z_size, flush_type, gzip_flag, level,
+                               dict, dict_len, hist_bits);
 
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+               ret =
+                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, dict, dict_len,
+                                 hist_bits);
 
        if (ret) {
-#ifdef VERBOSE
-               printf("Compressed array at level %d with gzip flag %d: ", level, gzip_flag);
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
-#endif
+               log_print
+                   ("Compressed array at level %d with gzip flag %d, flush type %d and hist_bits %d: ",
+                    level, gzip_flag, flush_type, hist_bits);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               if (dict != NULL) {
+                       log_print("Using Dictionary: ");
+                       log_uint8_t(dict, dict_len);
+                       log_print("\n");
+               }
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
+
                printf("Failed on compress multi pass\n");
                print_error(ret);
        }
 
+       if (dict != NULL) {
+               free(dict);
+               dict = NULL;
+               dict_len = 0;
+       }
+
        fin_ret |= ret;
+       if (ret)
+               goto test_compress_cleanup;
 
        ret = 0;
 
@@ -1529,68 +2327,73 @@ int test_compress(uint8_t * in_buf, uint32_t in_size, uint32_t flush_type)
                z_compressed_size = in_size + 1;
 
        z_size = rand() % z_compressed_size;
-       create_rand_repeat_data(z_buf, z_size_max);
+       create_rand_repeat_data(z_buf, z_size);
 
        overflow = compress_single_pass(in_buf, in_size, z_buf, &z_size, flush_type,
-                                       gzip_flag, level);
+                                       gzip_flag, level, dict, dict_len, hist_bits);
 
        if (overflow != COMPRESS_OUT_BUFFER_OVERFLOW) {
                if (overflow == 0)
-                       ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+                       ret =
+                           inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, dict,
+                                         dict_len, hist_bits);
 
                /* Rarely single pass overflow will compresses data
                 * better than the initial run. This is to stop that
                 * case from erroring. */
                if (overflow != 0 || ret != 0) {
-#ifdef VERBOSE
-                       printf("overflow error = %d\n", overflow);
-                       print_error(overflow);
-                       printf("inflate ret = %d\n", ret);
-                       print_error(overflow);
-
-                       printf("Compressed array at level %d with gzip flag %d: ", level,
-                              gzip_flag);
-                       print_uint8_t(z_buf, z_size);
-                       printf("\n");
-                       printf("Data: ");
-                       print_uint8_t(in_buf, in_size);
-#endif
-                       printf("Failed on compress multi pass overflow\n");
+                       log_print("overflow error = %d\n", overflow);
+                       log_error(overflow);
+                       log_print("inflate ret = %d\n", ret);
+                       log_error(ret);
+
+                       log_print
+                           ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                            level, gzip_flag, flush_type, hist_bits);
+                       log_uint8_t(z_buf, z_size);
+                       log_print("\n");
+                       log_print("Data: ");
+                       log_uint8_t(in_buf, in_size);
+
+                       printf("Failed on compress single pass overflow\n");
                        print_error(ret);
                        ret = OVERFLOW_TEST_ERROR;
                }
        }
 
        fin_ret |= ret;
+       if (ret)
+               goto test_compress_cleanup;
 
        if (flush_type == NO_FLUSH) {
-               create_rand_repeat_data(z_buf, z_size_max);
+               create_rand_repeat_data(z_buf, z_size);
 
                overflow =
                    compress_multi_pass(in_buf, in_size, z_buf, &z_size, flush_type,
-                                       gzip_flag, level);
+                                       gzip_flag, level, dict, dict_len, hist_bits);
 
                if (overflow != COMPRESS_OUT_BUFFER_OVERFLOW) {
                        if (overflow == 0)
-                               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+                               ret =
+                                   inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag,
+                                                 dict, dict_len, hist_bits);
 
                        /* Rarely multi pass overflow will compresses data
                         * better than the initial run. This is to stop that
                         * case from erroring */
                        if (overflow != 0 || ret != 0) {
-#ifdef VERBOSE
-                               printf("overflow error = %d\n", overflow);
-                               print_error(overflow);
-                               printf("inflate ret = %d\n", ret);
-                               print_error(overflow);
-
-                               printf("Compressed array at level %d with gzip flag %d: ",
-                                      level, gzip_flag);
-                               print_uint8_t(z_buf, z_size);
-                               printf("\n");
-                               printf("Data: ");
-                               print_uint8_t(in_buf, in_size);
-#endif
+                               log_print("overflow error = %d\n", overflow);
+                               log_error(overflow);
+                               log_print("inflate ret = %d\n", ret);
+                               log_error(ret);
+                               log_print
+                                   ("Compressed array at level %d with gzip flag %d, flush type %d, and hist_bits %d: ",
+                                    level, gzip_flag, flush_type, hist_bits);
+                               log_uint8_t(z_buf, z_size);
+                               log_print("\n");
+                               log_print("Data: ");
+                               log_uint8_t(in_buf, in_size);
+
                                printf("Failed on compress multi pass overflow\n");
                                print_error(ret);
                                ret = OVERFLOW_TEST_ERROR;
@@ -1599,6 +2402,7 @@ int test_compress(uint8_t * in_buf, uint32_t in_size, uint32_t flush_type)
                fin_ret |= ret;
        }
 
+      test_compress_cleanup:
        free(z_buf);
 
        return fin_ret;
@@ -1611,12 +2415,19 @@ int test_flush(uint8_t * in_buf, uint32_t in_size)
        uint32_t z_size, flush_type = 0, gzip_flag, level;
        uint8_t *z_buf = NULL;
 
-       gzip_flag = rand() % 3;
-       level = rand() % 2;
+       gzip_flag = rand() % 5;
+       level = get_rand_level();
 
        z_size = 2 * in_size + 2 * hdr_bytes + 8;
-       if (gzip_flag)
+       if (gzip_flag == IGZIP_GZIP)
                z_size += gzip_extra_bytes;
+       else if (gzip_flag == IGZIP_GZIP_NO_HDR)
+               z_size += gzip_trl_bytes;
+       else if (gzip_flag == IGZIP_ZLIB)
+               z_size += zlib_extra_bytes;
+       else if (gzip_flag == IGZIP_ZLIB_NO_HDR)
+               z_size += zlib_trl_bytes;
+
        z_buf = malloc(z_size);
 
        if (z_buf == NULL)
@@ -1625,11 +2436,11 @@ int test_flush(uint8_t * in_buf, uint32_t in_size)
        create_rand_repeat_data(z_buf, z_size);
 
        while (flush_type < 3)
-               flush_type = rand();
+               flush_type = rand() & 0xFFFF;
 
        /* Test invalid flush */
        ret = compress_single_pass(in_buf, in_size, z_buf, &z_size, flush_type,
-                                  gzip_flag, level);
+                                  gzip_flag, level, NULL, 0, 0);
 
        if (ret == COMPRESS_GENERAL_ERROR)
                ret = 0;
@@ -1644,19 +2455,20 @@ int test_flush(uint8_t * in_buf, uint32_t in_size)
        create_rand_repeat_data(z_buf, z_size);
 
        /* Test swapping flush type */
-       ret = compress_swap_flush(in_buf, in_size, z_buf, &z_size, rand() % 3, gzip_flag);
+       ret =
+           compress_swap_flush(in_buf, in_size, z_buf, &z_size, rand() % 3, level, gzip_flag);
 
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, NULL, 0, 0);
 
        if (ret) {
-#ifdef VERBOSE
-               printf("Compressed array at level %d with gzip flag %d: ", level, gzip_flag);
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
-#endif
+               log_print("Compressed array at level %d with gzip flag %d: ", level,
+                         gzip_flag);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
+
                printf("Failed on swapping flush type\n");
                print_error(ret);
        }
@@ -1674,12 +2486,18 @@ int test_full_flush(uint8_t * in_buf, uint32_t in_size)
        uint32_t z_size, gzip_flag, level;
        uint8_t *z_buf = NULL;
 
-       gzip_flag = rand() % 3;
-       level = rand() % 2;
+       gzip_flag = rand() % 5;
+       level = get_rand_level();
        z_size = 2 * in_size + MAX_LOOPS * (hdr_bytes + 5);
 
-       if (gzip_flag)
+       if (gzip_flag == IGZIP_GZIP)
                z_size += gzip_extra_bytes;
+       else if (gzip_flag == IGZIP_GZIP_NO_HDR)
+               z_size += gzip_trl_bytes;
+       else if (gzip_flag == IGZIP_ZLIB)
+               z_size += zlib_extra_bytes;
+       else if (gzip_flag == IGZIP_ZLIB_NO_HDR)
+               z_size += zlib_trl_bytes;
 
        z_buf = malloc(z_size);
        if (z_buf == NULL) {
@@ -1692,16 +2510,16 @@ int test_full_flush(uint8_t * in_buf, uint32_t in_size)
        ret = compress_full_flush(in_buf, in_size, z_buf, &z_size, gzip_flag, level);
 
        if (!ret)
-               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag);
+               ret = inflate_check(z_buf, z_size, in_buf, in_size, gzip_flag, NULL, 0, 0);
 
        if (ret) {
-#ifdef VERBOSE
-               printf("Compressed array: ");
-               print_uint8_t(z_buf, z_size);
-               printf("\n");
-               printf("Data: ");
-               print_uint8_t(in_buf, in_size);
-#endif
+               log_print("Compressed array at level %d with gzip flag %d and flush type %d: ",
+                         level, gzip_flag, FULL_FLUSH);
+               log_uint8_t(z_buf, z_size);
+               log_print("\n");
+               log_print("Data: ");
+               log_uint8_t(in_buf, in_size);
+
                printf("Failed on compress multi pass\n");
                print_error(ret);
        }
@@ -1735,7 +2553,8 @@ int test_inflate(struct vect_result *in_vector)
                ret = IGZIP_COMP_OK;
 
        if (!ret) {
-               ret = inflate_multi_pass(compress_buf, compress_len, out_buf, &out_size, 0);
+               ret = inflate_multi_pass(compress_buf, compress_len, out_buf, &out_size,
+                                        0, NULL, 0, 0);
 
                if (ret == INFLATE_LEFTOVER_INPUT)
                        ret = ISAL_DECOMP_OK;
@@ -1751,44 +2570,100 @@ int test_inflate(struct vect_result *in_vector)
 
 }
 
-int get_filesize(FILE * f)
+int test_large(uint8_t * in_buf, uint32_t in_size, uint64_t large_size)
 {
-       int curr, end;
 
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
+       int ret = IGZIP_COMP_OK;
+       uint32_t gzip_flag, level;
+       uint32_t z_size = 0, z_size_max = 0, tmp_buf_size;
+       uint8_t *z_buf = NULL, *tmp_buf = NULL;
+       int flush_type = NO_FLUSH;
+
+       /* Test a non overflow case */
+       z_size_max = MAX_LARGE_COMP_BUF_SIZE;
+
+       gzip_flag = rand() % 5;
+       level = get_rand_level();
+
+       z_size = z_size_max;
+       z_buf = malloc(z_size);
+       if (z_buf == NULL) {
+               print_error(MALLOC_FAILED);
+               return MALLOC_FAILED;
+       }
+       create_rand_repeat_data(z_buf, z_size);
+
+       tmp_buf_size = IBUF_SIZE;
+       tmp_buf = malloc(tmp_buf_size);
+       if (tmp_buf == NULL) {
+               print_error(MALLOC_FAILED);
+               return MALLOC_FAILED;
+       }
+
+       ret =
+           compress_ver_rep_buf(in_buf, in_size, large_size, z_buf, z_size, tmp_buf,
+                                tmp_buf_size, flush_type, gzip_flag, level);
+
+       if (ret)
+               print_error(ret);
+
+       if (z_buf != NULL) {
+               free(z_buf);
+               z_buf = NULL;
+       }
+
+       if (tmp_buf != NULL) {
+               free(tmp_buf);
+               tmp_buf = NULL;
+       }
+
+       return ret;
 }
 
 /* Run multiple compression tests on data stored in a file */
 int test_compress_file(char *file_name)
 {
        int ret = IGZIP_COMP_OK;
-       uint32_t in_size;
+       uint64_t in_size;
        uint8_t *in_buf = NULL;
        FILE *in_file = NULL;
 
        in_file = fopen(file_name, "rb");
-       if (!in_file)
+       if (!in_file) {
+               printf("Failed to open file %s\n", file_name);
                return FILE_READ_FAILED;
+       }
 
        in_size = get_filesize(in_file);
+       if (in_size > MAX_FILE_SIZE)
+               in_size = MAX_FILE_SIZE;
+
        if (in_size != 0) {
                in_buf = malloc(in_size);
-               if (in_buf == NULL)
+               if (in_buf == NULL) {
+                       printf("Failed to allocate in_buf for test_compress_file\n");
                        return MALLOC_FAILED;
-               fread(in_buf, 1, in_size, in_file);
+               }
+               if (fread(in_buf, 1, in_size, in_file) != in_size) {
+                       printf("Failed to read in_buf from test_compress_file\n");
+                       free(in_buf);
+                       return FILE_READ_FAILED;
+               }
        }
 
        ret |= test_compress_stateless(in_buf, in_size, NO_FLUSH);
-       ret |= test_compress_stateless(in_buf, in_size, SYNC_FLUSH);
-       ret |= test_compress_stateless(in_buf, in_size, FULL_FLUSH);
-       ret |= test_compress(in_buf, in_size, NO_FLUSH);
-       ret |= test_compress(in_buf, in_size, SYNC_FLUSH);
-       ret |= test_compress(in_buf, in_size, FULL_FLUSH);
-       ret |= test_flush(in_buf, in_size);
+       if (!ret)
+               ret |= test_compress_stateless(in_buf, in_size, SYNC_FLUSH);
+       if (!ret)
+               ret |= test_compress_stateless(in_buf, in_size, FULL_FLUSH);
+       if (!ret)
+               ret |= test_compress(in_buf, in_size, NO_FLUSH);
+       if (!ret)
+               ret |= test_compress(in_buf, in_size, SYNC_FLUSH);
+       if (!ret)
+               ret |= test_compress(in_buf, in_size, FULL_FLUSH);
+       if (!ret)
+               ret |= test_flush(in_buf, in_size);
 
        if (ret)
                printf("Failed on file %s\n", file_name);
@@ -1799,18 +2674,20 @@ int test_compress_file(char *file_name)
        return ret;
 }
 
-int create_custom_hufftables(struct isal_hufftables *hufftables_custom, int argc, char *argv[])
+int create_custom_hufftables(struct isal_hufftables *hufftables_custom, int file_count,
+                            char *files[])
 {
        long int file_length;
        uint8_t *stream = NULL;
        struct isal_huff_histogram histogram;
        FILE *file;
+       int i;
 
        memset(&histogram, 0, sizeof(histogram));
 
-       while (argc > 1) {
-               printf("Processing %s\n", argv[argc - 1]);
-               file = fopen(argv[argc - 1], "r");
+       for (i = 0; i < file_count; i++) {
+               printf("Processing %s\n", files[i]);
+               file = fopen(files[i], "r");
                if (file == NULL) {
                        printf("Error opening file\n");
                        return 1;
@@ -1829,9 +2706,7 @@ int create_custom_hufftables(struct isal_hufftables *hufftables_custom, int argc
                        }
                }
 
-               fread(stream, 1, file_length, file);
-
-               if (ferror(file)) {
+               if (fread(stream, 1, file_length, file) != file_length) {
                        printf("Error occurred when reading file\n");
                        fclose(file);
                        free(stream);
@@ -1848,7 +2723,6 @@ int create_custom_hufftables(struct isal_hufftables *hufftables_custom, int argc
                        free(stream);
                        stream = NULL;
                }
-               argc--;
        }
 
        return isal_create_hufftables(hufftables_custom, &histogram);
@@ -1857,22 +2731,31 @@ int create_custom_hufftables(struct isal_hufftables *hufftables_custom, int argc
 
 int main(int argc, char *argv[])
 {
-       int i = 0, ret = 0, fin_ret = 0;
+       int i = 0, j = 0, ret = 0, fin_ret = 0;
        uint32_t in_size = 0, offset = 0;
        uint8_t *in_buf;
-       struct isal_hufftables hufftables_custom;
+       struct isal_hufftables hufftables_custom, hufftables_sub;
+       uint64_t iterations, large_buf_size;
+       size_t argv_index;
+       char **input_files;
+       size_t file_count;
 
-#ifndef VERBOSE
-       setbuf(stdout, NULL);
-#endif
+       argv_index = parse_options(argc, argv);
+
+       input_files = &argv[argv_index];
+       file_count = argc - argv_index;
+
+       if (options.verbose)
+               setbuf(stdout, NULL);
 
        printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
-       printf("Test Seed  : %d\n", TEST_SEED);
-       printf("Randoms    : %d\n", RANDOMS);
-       srand(TEST_SEED);
+       printf("Test Seed  : %d\n", options.test_seed);
+       printf("Randoms    : %d\n", options.randoms);
+       srand(options.test_seed);
 
-       if (argc > 1) {
-               ret = create_custom_hufftables(&hufftables_custom, argc, argv);
+       hufftables_subset = &hufftables_sub;
+       if (file_count > 0) {
+               ret = create_custom_hufftables(&hufftables_custom, file_count, input_files);
                if (ret == 0)
                        hufftables = &hufftables_custom;
                else {
@@ -1889,11 +2772,11 @@ int main(int argc, char *argv[])
                return -1;
        }
 
-       if (argc > 1) {
+       if (file_count > 0) {
                printf("igzip_rand_test files:                  ");
 
-               for (i = 1; i < argc; i++) {
-                       ret |= test_compress_file(argv[i]);
+               for (i = 0; i < file_count; i++) {
+                       ret |= test_compress_file(input_files[i]);
                        if (ret)
                                return ret;
                }
@@ -1913,8 +2796,8 @@ int main(int argc, char *argv[])
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -1924,14 +2807,14 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % (RANDOMS / 16) == 0)
+               if (i % (options.randoms / 16) == 0)
                        printf(".");
 
                if (ret)
                        return ret;
        }
 
-       for (i = 0; i < RANDOMS / 16; i++) {
+       for (i = 0; i < options.randoms / 16; i++) {
                create_rand_repeat_data(in_buf, PAGE_SIZE);
                ret |= test_compress_stateless(in_buf, PAGE_SIZE, NO_FLUSH);    // good for efence
                if (ret)
@@ -1949,7 +2832,7 @@ int main(int argc, char *argv[])
                return ret;
 
        for (i = 0; i < 16; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -1977,8 +2860,8 @@ int main(int argc, char *argv[])
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -1988,14 +2871,14 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % (RANDOMS / 16) == 0)
+               if (i % (options.randoms / 16) == 0)
                        printf(".");
 
                if (ret)
                        return ret;
        }
 
-       for (i = 0; i < RANDOMS / 16; i++) {
+       for (i = 0; i < options.randoms / 16; i++) {
                create_rand_repeat_data(in_buf, PAGE_SIZE);
                ret |= test_compress_stateless(in_buf, PAGE_SIZE, FULL_FLUSH);  // good for efence
                if (ret)
@@ -2007,16 +2890,18 @@ int main(int argc, char *argv[])
 
        printf("igzip_rand_test stateful  NO_FLUSH:     ");
 
-       ret = test_compress((uint8_t *) str1, sizeof(str1), NO_FLUSH);
+       memcpy(in_buf, str1, sizeof(str1));
+       ret = test_compress(in_buf, sizeof(str1), NO_FLUSH);
        if (ret)
                return ret;
 
-       ret |= test_compress((uint8_t *) str2, sizeof(str2), NO_FLUSH);
+       memcpy(in_buf, str2, sizeof(str2));
+       ret |= test_compress(in_buf, sizeof(str2), NO_FLUSH);
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -2026,7 +2911,7 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % (RANDOMS / 16) == 0)
+               if (i % (options.randoms / 16) == 0)
                        printf(".");
                if (ret)
                        return ret;
@@ -2038,16 +2923,18 @@ int main(int argc, char *argv[])
 
        printf("igzip_rand_test stateful  SYNC_FLUSH:   ");
 
-       ret = test_compress((uint8_t *) str1, sizeof(str1), SYNC_FLUSH);
+       memcpy(in_buf, str1, sizeof(str1));
+       ret = test_compress(in_buf, sizeof(str1), SYNC_FLUSH);
        if (ret)
                return ret;
 
-       ret |= test_compress((uint8_t *) str2, sizeof(str2), SYNC_FLUSH);
+       memcpy(in_buf, str2, sizeof(str2));
+       ret |= test_compress(in_buf, sizeof(str2), SYNC_FLUSH);
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -2057,7 +2944,7 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % (RANDOMS / 16) == 0)
+               if (i % (options.randoms / 16) == 0)
                        printf(".");
                if (ret)
                        return ret;
@@ -2069,16 +2956,18 @@ int main(int argc, char *argv[])
 
        printf("igzip_rand_test stateful  FULL_FLUSH:   ");
 
-       ret = test_compress((uint8_t *) str1, sizeof(str1), FULL_FLUSH);
+       memcpy(in_buf, str1, sizeof(str1));
+       ret = test_compress(in_buf, sizeof(str1), FULL_FLUSH);
        if (ret)
                return ret;
 
-       ret |= test_compress((uint8_t *) str2, sizeof(str2), FULL_FLUSH);
+       memcpy(in_buf, str2, sizeof(str2));
+       ret |= test_compress(in_buf, sizeof(str2), FULL_FLUSH);
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -2088,14 +2977,14 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % (RANDOMS / 16) == 0)
+               if (i % (options.randoms / 16) == 0)
                        printf(".");
                if (ret)
                        return ret;
        }
 
-       for (i = 0; i < RANDOMS / 8; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms / 8; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -2123,8 +3012,8 @@ int main(int argc, char *argv[])
        if (ret)
                return ret;
 
-       for (i = 0; i < RANDOMS / 4; i++) {
-               in_size = rand() % (IBUF_SIZE + 1);
+       for (i = 0; i < options.randoms / 4; i++) {
+               in_size = get_rand_data_length();
                offset = rand() % (IBUF_SIZE + 1 - in_size);
                in_buf += offset;
 
@@ -2134,7 +3023,7 @@ int main(int argc, char *argv[])
 
                in_buf -= offset;
 
-               if (i % ((RANDOMS / 4) / 16) == 0)
+               if (i % ((options.randoms / 4) / 16) == 0)
                        printf(".");
                if (ret)
                        return ret;
@@ -2144,6 +3033,43 @@ int main(int argc, char *argv[])
 
        printf("%s\n", ret ? "Fail" : "Pass");
 
+       if (options.do_large_test) {
+               printf("igzip_rand_test large input             ");
+
+               iterations = options.randoms / 256 + 1;
+               for (i = 0; i < iterations; i++) {
+                       in_size = rand() % (32 * 1024) + 16 * 1024;
+                       offset = rand() % (IBUF_SIZE + 1 - in_size);
+                       in_buf += offset;
+
+                       large_buf_size = 1;
+                       large_buf_size <<= 32;
+                       large_buf_size += rand() % (1024 * 1024) + 1;
+                       create_rand_repeat_data(in_buf, in_size);
+
+                       ret |= test_large(in_buf, in_size, large_buf_size);
+
+                       if (ret)
+                               return ret;
+
+                       in_buf -= offset;
+
+                       if (iterations < 16) {
+                               for (j = 0; j < 16 / iterations; j++)
+                                       printf(".");
+                       } else if (i % (iterations / 16) == 0)
+                               printf(".");
+
+               }
+
+               if (iterations < 16) {
+                       for (j = (16 / iterations) * iterations; j < 16; j++)
+                               printf(".");
+               }
+
+               printf("%s\n", ret ? "Fail" : "Pass");
+       }
+
        printf("igzip_rand_test inflate   Std Vectors:  ");
 
        for (i = 0; i < sizeof(std_vect_array) / sizeof(struct vect_result); i++) {
index 525d3fe841e249c591fe301b317f7d467ca2f655..79e7d2754544fac77b6ae03f6bc0d40236cf4917 100644 (file)
@@ -27,6 +27,7 @@
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
+#define _FILE_OFFSET_BITS 64
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -49,7 +50,6 @@ int usage(void)
                "Usage: igzip_semi_dynamic [options] <infile>\n"
                "  -h        help\n"
                "  -v        (don't) validate output by inflate and compare\n"
-               "  -i <iter> iterations\n"
                "  -t <type> 1:stateless 0:(default)stateful\n"
                "  -c <size> chunk size default=%d\n"
                "  -s <size> sample size default=%d\n"
@@ -89,33 +89,103 @@ int str_to_i(char *s)
        return i;
 }
 
-int get_filesize(FILE * f)
+void semi_dyn_stateless_perf(struct isal_zstream *stream, uint8_t * inbuf,
+                            uint64_t infile_size, uint8_t * outbuf, uint64_t outbuf_size,
+                            int segment_size, int hist_size)
 {
-       int curr, end;
+       struct isal_huff_histogram histogram;
+       struct isal_hufftables hufftable;
+
+       isal_deflate_stateless_init(stream);
+       stream->end_of_stream = 0;
+       stream->flush = FULL_FLUSH;
+       stream->next_in = inbuf;
+       stream->next_out = outbuf;
+       int remaining = infile_size;
+       int chunk_size = segment_size;
+
+       while (remaining > 0) {
+               // Generate custom hufftables on sample
+               memset(&histogram, 0, sizeof(struct isal_huff_histogram));
+               if (remaining < segment_size * 2) {
+                       chunk_size = remaining;
+                       stream->end_of_stream = 1;
+               }
+               int hist_rem = (hist_size > chunk_size) ? chunk_size : hist_size;
+               isal_update_histogram(stream->next_in, hist_rem, &histogram);
+
+               if (hist_rem == chunk_size)
+                       isal_create_hufftables_subset(&hufftable, &histogram);
+               else
+                       isal_create_hufftables(&hufftable, &histogram);
+
+               // Compress with custom table
+               stream->avail_in = chunk_size;
+               stream->avail_out = chunk_size + 8 * (1 + (chunk_size >> 16));
+               stream->hufftables = &hufftable;
+               remaining -= chunk_size;
+               isal_deflate_stateless(stream);
+               if (stream->avail_in != 0)
+                       break;
+       }
+}
 
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
+void semi_dyn_stateful_perf(struct isal_zstream *stream, uint8_t * inbuf,
+                           uint64_t infile_size, uint8_t * outbuf, uint64_t outbuf_size,
+                           int segment_size, int hist_size)
+{
+       struct isal_huff_histogram histogram;
+       struct isal_hufftables hufftable;
+
+       isal_deflate_init(stream);
+       stream->end_of_stream = 0;
+       stream->flush = SYNC_FLUSH;
+       stream->next_in = inbuf;
+       stream->next_out = outbuf;
+       stream->avail_out = outbuf_size;
+       int remaining = infile_size;
+       int chunk_size = segment_size;
+
+       while (remaining > 0) {
+               // Generate custom hufftables on sample
+               memset(&histogram, 0, sizeof(struct isal_huff_histogram));
+               if (remaining < segment_size * 2) {
+                       chunk_size = remaining;
+                       stream->end_of_stream = 1;
+               }
+               int hist_rem = (hist_size > chunk_size) ? chunk_size : hist_size;
+               isal_update_histogram(stream->next_in, hist_rem, &histogram);
+
+               if (hist_rem == chunk_size)
+                       isal_create_hufftables_subset(&hufftable, &histogram);
+               else
+                       isal_create_hufftables(&hufftable, &histogram);
+
+               // Compress with custom table
+               stream->avail_in = chunk_size;
+               stream->hufftables = &hufftable;
+               remaining -= chunk_size;
+               isal_deflate(stream);
+               if (stream->internal_state.state != ZSTATE_NEW_HDR)
+                       break;
+       }
 }
 
 int main(int argc, char *argv[])
 {
        FILE *in = stdin, *out = NULL;
        unsigned char *inbuf, *outbuf;
-       int i = 0, c, infile_size, outbuf_size;
+       int i = 0, c;
+       uint64_t infile_size, outbuf_size;
        int segment_size = DEFAULT_SEG_SIZE;
        int sample_size = DEFAULT_SAMPLE_SIZE;
        int check_output = 1;
-       int iterations = 0, do_stateless = 0, do_stateful = 1;
+       int do_stateless = 0, do_stateful = 1;
        int ret = 0;
        char *out_file_name = NULL;
        struct isal_zstream stream;
-       struct isal_huff_histogram histogram;
-       struct isal_hufftables hufftable;
 
-       while ((c = getopt(argc, argv, "vht:c:s:o:i:")) != -1) {
+       while ((c = getopt(argc, argv, "vht:c:s:o:")) != -1) {
                switch (c) {
                case 'v':
                        check_output ^= 1;
@@ -135,9 +205,6 @@ int main(int argc, char *argv[])
                case 'o':
                        out_file_name = optarg;
                        break;
-               case 'i':
-                       iterations = str_to_i(optarg);
-                       break;
                case 'h':
                default:
                        usage();
@@ -174,12 +241,6 @@ int main(int argc, char *argv[])
                usage();
        }
 
-       if (iterations == 0) {
-               iterations = RUN_MEM_SIZE / infile_size;
-               if (iterations < MIN_TEST_LOOPS)
-                       iterations = MIN_TEST_LOOPS;
-       }
-
        outbuf_size = infile_size * 1.30 > MIN_BUF_SIZE ? infile_size * 1.30 : MIN_BUF_SIZE;
 
        if (NULL == (inbuf = malloc(infile_size))) {
@@ -195,7 +256,7 @@ int main(int argc, char *argv[])
 
        printf("semi-dynamic sample=%d segment=%d %s\n", hist_size, segment_size,
               do_stateful ? "stateful" : "stateless");
-       printf("igzip_file_perf: %s %d iterations\n", argv[optind], iterations);
+       printf("igzip_file_perf: %s\n", argv[optind]);
 
        // Read complete input file into buffer
        stream.avail_in = (uint32_t) fread(inbuf, 1, infile_size, in);
@@ -204,88 +265,19 @@ int main(int argc, char *argv[])
                exit(0);
        }
 
-       struct perf start, stop;
+       struct perf start;
 
        if (do_stateful) {
-               perf_start(&start);
-
-               for (i = 0; i < iterations; i++) {
-                       isal_deflate_init(&stream);
-                       stream.end_of_stream = 0;
-                       stream.flush = SYNC_FLUSH;
-                       stream.next_in = inbuf;
-                       stream.next_out = outbuf;
-                       stream.avail_out = outbuf_size;
-                       int remaining = infile_size;
-                       int chunk_size = segment_size;
-
-                       while (remaining > 0) {
-                               // Generate custom hufftables on sample
-                               memset(&histogram, 0, sizeof(struct isal_huff_histogram));
-                               if (remaining < segment_size * 2) {
-                                       chunk_size = remaining;
-                                       stream.end_of_stream = 1;
-                               }
-                               int hist_rem =
-                                   (hist_size > chunk_size) ? chunk_size : hist_size;
-                               isal_update_histogram(stream.next_in, hist_rem, &histogram);
-
-                               if (hist_rem == chunk_size)
-                                       isal_create_hufftables_subset(&hufftable, &histogram);
-                               else
-                                       isal_create_hufftables(&hufftable, &histogram);
-
-                               // Compress with custom table
-                               stream.avail_in = chunk_size;
-                               stream.hufftables = &hufftable;
-                               remaining -= chunk_size;
-                               isal_deflate(&stream);
-                               if (stream.internal_state.state != ZSTATE_NEW_HDR)
-                                       break;
-                       }
-               }
-               perf_stop(&stop);
+               BENCHMARK(&start, BENCHMARK_TIME,
+                         semi_dyn_stateful_perf(&stream, inbuf, infile_size, outbuf,
+                                                outbuf_size, segment_size, hist_size)
+                   );
        }
 
        if (do_stateless) {
-               perf_start(&start);
-
-               for (i = 0; i < iterations; i++) {
-                       isal_deflate_stateless_init(&stream);
-                       stream.end_of_stream = 0;
-                       stream.flush = FULL_FLUSH;
-                       stream.next_in = inbuf;
-                       stream.next_out = outbuf;
-                       int remaining = infile_size;
-                       int chunk_size = segment_size;
-
-                       while (remaining > 0) {
-                               // Generate custom hufftables on sample
-                               memset(&histogram, 0, sizeof(struct isal_huff_histogram));
-                               if (remaining < segment_size * 2) {
-                                       chunk_size = remaining;
-                                       stream.end_of_stream = 1;
-                               }
-                               int hist_rem =
-                                   (hist_size > chunk_size) ? chunk_size : hist_size;
-                               isal_update_histogram(stream.next_in, hist_rem, &histogram);
-
-                               if (hist_rem == chunk_size)
-                                       isal_create_hufftables_subset(&hufftable, &histogram);
-                               else
-                                       isal_create_hufftables(&hufftable, &histogram);
-
-                               // Compress with custom table
-                               stream.avail_in = chunk_size;
-                               stream.avail_out = chunk_size + 8 * (1 + (chunk_size >> 16));
-                               stream.hufftables = &hufftable;
-                               remaining -= chunk_size;
-                               isal_deflate_stateless(&stream);
-                               if (stream.avail_in != 0)
-                                       break;
-                       }
-               }
-               perf_stop(&stop);
+               BENCHMARK(&start, BENCHMARK_TIME,
+                         semi_dyn_stateless_perf(&stream, inbuf, infile_size, outbuf,
+                                                 outbuf_size, segment_size, hist_size));
        }
 
        if (stream.avail_in != 0) {
@@ -293,11 +285,11 @@ int main(int argc, char *argv[])
                ret = 1;
        }
 
-       printf("  file %s - in_size=%d out_size=%d iter=%d ratio=%3.1f%%\n", argv[optind],
+       printf("  file %s - in_size=%lu out_size=%d iter=%d ratio=%3.1f%%\n", argv[optind],
               infile_size, stream.total_out, i, 100.0 * stream.total_out / infile_size);
 
-       printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
+       printf("igzip_semi_dyn_file: ");
+       perf_print(start, (long long)infile_size);
 
        if (out != NULL) {
                printf("writing %s\n", out_file_name);
diff --git a/ceph/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm b/ceph/src/isa-l/igzip/igzip_set_long_icf_fg_04.asm
new file mode 100644 (file)
index 0000000..f5c2b98
--- /dev/null
@@ -0,0 +1,295 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "igzip_compare_types.asm"
+%define NEQ 4
+
+default rel
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define arg4 r9
+%define len rdi
+%define tmp2 rdi
+%define dist rsi
+%else
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define arg4 rcx
+%define len r8
+%define tmp2 r8
+%define dist r9
+%endif
+
+%define next_in arg1
+%define end_processed arg2
+%define end_in arg3
+%define match_lookup arg4
+%define match_in rax
+%define match_offset r10
+%define tmp1 r11
+%define end_processed_orig r12
+%define dist_code r13
+%define tmp3 r13
+
+%define ymatch_lookup ymm0
+%define ymatch_lookup2 ymm1
+%define ylens ymm2
+%define ycmp2 ymm3
+%define ylens1 ymm4
+%define ylens2 ymm5
+%define ycmp ymm6
+%define ytmp1 ymm7
+%define ytmp2 ymm8
+%define yvect_size ymm9
+%define ymax_len ymm10
+%define ytwofiftysix ymm11
+%define ynlen_mask ymm12
+%define ydists_mask ymm13
+%define ylong_lens ymm14
+%define ylens_mask ymm15
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define stack_size  10*16 + 4 * 8 + 8
+%define func(x) proc_frame x
+%macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       vmovdqa [rsp + 8*16], xmm14
+       vmovdqa [rsp + 9*16], xmm15
+       save_reg        rsi, 10*16 + 0*8
+       save_reg        rdi, 10*16 + 1*8
+       save_reg        r12, 10*16 + 2*8
+       save_reg        r13, 10*16 + 3*8
+       end_prolog
+%endm
+
+%macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+       vmovdqa xmm14, [rsp + 8*16]
+       vmovdqa xmm15, [rsp + 9*16]
+
+       mov     rsi, [rsp + 10*16 + 0*8]
+       mov     rdi, [rsp + 10*16 + 1*8]
+       mov     r12, [rsp + 10*16 + 2*8]
+       mov     r13, [rsp + 10*16 + 3*8]
+       add     rsp, stack_size
+%endm
+%else
+%define func(x) x:
+%macro FUNC_SAVE 0
+       push r12
+       push r13
+%endm
+
+%macro FUNC_RESTORE 0
+       pop r13
+       pop r12
+%endm
+%endif
+%define VECT_SIZE 8
+
+global set_long_icf_fg_04
+func(set_long_icf_fg_04)
+       FUNC_SAVE
+
+       lea     end_in, [next_in + arg3]
+       add     end_processed, next_in
+       mov     end_processed_orig, end_processed
+       lea     tmp1, [end_processed + LA_STATELESS]
+       cmp     end_in, tmp1
+       cmovg   end_in, tmp1
+       sub     end_processed, VECT_SIZE - 1
+       vmovdqu ylong_lens, [long_len]
+       vmovdqu ylens_mask, [len_mask]
+       vmovdqu ydists_mask, [dists_mask]
+       vmovdqu ynlen_mask, [nlen_mask]
+       vmovdqu yvect_size, [vect_size]
+       vmovdqu ymax_len, [max_len]
+       vmovdqu ytwofiftysix, [twofiftysix]
+       vmovdqu ymatch_lookup, [match_lookup]
+
+.fill_loop: ; Tahiti is a magical place
+       vmovdqu ymatch_lookup2, ymatch_lookup
+       vmovdqu ymatch_lookup, [match_lookup + ICF_CODE_BYTES * VECT_SIZE]
+
+       cmp     next_in, end_processed
+       jae     .end_fill
+
+.finish_entry:
+       vpand   ylens, ymatch_lookup2, ylens_mask
+       vpcmpgtd ycmp, ylens, ylong_lens
+       vpmovmskb tmp1, ycmp
+
+;; Speculatively increment
+       add     next_in, VECT_SIZE
+       add     match_lookup, ICF_CODE_BYTES * VECT_SIZE
+
+       test    tmp1, tmp1
+       jz      .fill_loop
+
+       tzcnt   match_offset, tmp1
+       shr     match_offset, 2
+
+       lea     next_in, [next_in + match_offset - VECT_SIZE]
+       lea     match_lookup, [match_lookup + ICF_CODE_BYTES * (match_offset - VECT_SIZE)]
+       mov     dist %+ d, [match_lookup]
+       vmovd   ymatch_lookup2 %+ x, dist %+ d
+
+       mov     tmp1, dist
+       shr     dist, DIST_OFFSET
+       and     dist, LIT_DIST_MASK
+       shr     tmp1, EXTRA_BITS_OFFSET
+       lea     tmp2, [dist_start]
+       mov     dist %+ w, [tmp2 +  2 * dist]
+       add     dist, tmp1
+
+       mov     match_in, next_in
+       sub     match_in, dist
+
+       mov     len, 8
+       mov     tmp3, end_in
+       sub     tmp3, next_in
+
+       compare_y next_in, match_in, len, tmp3, tmp1, ytmp1, ytmp2
+
+       vmovd   ylens1 %+ x, len %+ d
+       vpbroadcastd ylens1, ylens1 %+ x
+       vpsubd  ylens1, ylens1, [increment]
+       vpaddd  ylens1, ylens1, [twofiftyfour]
+
+       mov     tmp3, end_processed
+       sub     tmp3, next_in
+       cmp     len, tmp3
+       cmovg   len, tmp3
+
+       add     next_in, len
+       lea     match_lookup, [match_lookup + ICF_CODE_BYTES * len]
+       vmovdqu ymatch_lookup, [match_lookup]
+
+       vpbroadcastd ymatch_lookup2, ymatch_lookup2 %+ x
+       vpand   ymatch_lookup2, ymatch_lookup2, ynlen_mask
+
+       neg     len
+
+.update_match_lookup:
+       vpand   ylens2, ylens_mask, [match_lookup + ICF_CODE_BYTES * len]
+
+       vpcmpgtd ycmp, ylens1, ylens2
+       vpcmpgtd ytmp1, ylens1, ytwofiftysix
+       vpand   ycmp, ycmp, ytmp1
+       vpmovmskb tmp1, ycmp
+
+       vpcmpgtd ycmp2, ylens1, ymax_len
+       vpandn ylens, ycmp2, ylens1
+       vpand ycmp2, ymax_len, ycmp2
+       vpor ylens, ycmp2
+
+       vpaddd  ylens2, ylens, ymatch_lookup2
+       vpand   ylens2, ylens2, ycmp
+
+       vpmaskmovd [match_lookup + ICF_CODE_BYTES * len], ycmp, ylens2
+
+       test    tmp1 %+ d, tmp1 %+ d
+       jz      .fill_loop
+
+       add     len, VECT_SIZE
+       vpsubd  ylens1, ylens1, yvect_size
+
+       jmp     .update_match_lookup
+
+.end_fill:
+       mov     end_processed, end_processed_orig
+       cmp     next_in, end_processed
+       jge     .finish
+
+       mov     tmp1, end_processed
+       sub     tmp1, next_in
+       vmovd   ytmp1 %+ x, tmp1 %+ d
+       vpbroadcastd ytmp1, ytmp1 %+ x
+       vpcmpgtd ytmp1, ytmp1, [increment]
+       vpand   ymatch_lookup2, ymatch_lookup2, ytmp1
+       jmp     .finish_entry
+
+.finish:
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 64
+dist_start:
+       dw 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d
+       dw 0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1
+       dw 0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01
+       dw 0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000
+len_mask:
+       dd LIT_LEN_MASK, LIT_LEN_MASK, LIT_LEN_MASK, LIT_LEN_MASK
+       dd LIT_LEN_MASK, LIT_LEN_MASK, LIT_LEN_MASK, LIT_LEN_MASK
+dists_mask:
+       dd LIT_DIST_MASK, LIT_DIST_MASK, LIT_DIST_MASK, LIT_DIST_MASK
+       dd LIT_DIST_MASK, LIT_DIST_MASK, LIT_DIST_MASK, LIT_DIST_MASK
+long_len:
+       dd 0x105, 0x105, 0x105, 0x105, 0x105, 0x105, 0x105, 0x105
+increment:
+       dd 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+vect_size:
+       dd VECT_SIZE, VECT_SIZE, VECT_SIZE, VECT_SIZE
+       dd VECT_SIZE, VECT_SIZE, VECT_SIZE, VECT_SIZE
+twofiftyfour:
+       dd 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe
+twofiftysix:
+       dd 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100
+nlen_mask:
+       dd 0xfffffc00, 0xfffffc00, 0xfffffc00, 0xfffffc00
+       dd 0xfffffc00, 0xfffffc00, 0xfffffc00, 0xfffffc00
+max_len:
+       dd 0xfe + 0x102, 0xfe + 0x102, 0xfe + 0x102, 0xfe + 0x102
+       dd 0xfe + 0x102, 0xfe + 0x102, 0xfe + 0x102, 0xfe + 0x102
diff --git a/ceph/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm b/ceph/src/isa-l/igzip/igzip_set_long_icf_fg_06.asm
new file mode 100644 (file)
index 0000000..39708ed
--- /dev/null
@@ -0,0 +1,367 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "lz0a_const.asm"
+%include "data_struct2.asm"
+%include "igzip_compare_types.asm"
+%define NEQ 4
+
+%ifdef HAVE_AS_KNOWS_AVX512
+%ifidn __OUTPUT_FORMAT__, win64
+%define arg1 rcx
+%define arg2 rdx
+%define arg3 r8
+%define arg4 r9
+%define len rdi
+%define dist rsi
+%else
+%define arg1 rdi
+%define arg2 rsi
+%define arg3 rdx
+%define arg4 rcx
+%define len r8
+%define dist r9
+%endif
+
+%define next_in arg1
+%define end_processed arg2
+%define end_in arg3
+%define match_lookup arg4
+%define match_in rax
+%define match_offset r10
+%define tmp1 r11
+%define end_processed_orig r12
+%define dist_code r13
+%define tmp2 r13
+
+%define zmatch_lookup zmm0
+%define zmatch_lookup2 zmm1
+%define zlens zmm2
+%define zdist_codes zmm3
+%define zdist_extras zmm4
+%define zdists zmm5
+%define zdists2 zmm6
+%define zlens1 zmm7
+%define zlens2 zmm8
+%define zlookup zmm9
+%define zlookup2 zmm10
+%define datas zmm11
+%define ztmp1 zmm12
+%define ztmp2 zmm13
+%define zvect_size zmm16
+%define zmax_len zmm17
+%define ztwofiftyfour zmm18
+%define ztwofiftysix zmm19
+%define ztwosixtytwo zmm20
+%define znlen_mask zmm21
+%define zbswap zmm22
+%define zqword_shuf zmm23
+%define zdatas_perm3 zmm24
+%define zdatas_perm2 zmm25
+%define zincrement zmm26
+%define zdists_mask zmm27
+%define zdists_start zmm28
+%define zlong_lens2 zmm29
+%define zlong_lens zmm30
+%define zlens_mask zmm31
+
+%ifidn __OUTPUT_FORMAT__, win64
+%define stack_size  8*16 + 4 * 8 + 8
+%define func(x) proc_frame x
+%macro FUNC_SAVE 0
+       alloc_stack     stack_size
+       vmovdqa [rsp + 0*16], xmm6
+       vmovdqa [rsp + 1*16], xmm7
+       vmovdqa [rsp + 2*16], xmm8
+       vmovdqa [rsp + 3*16], xmm9
+       vmovdqa [rsp + 4*16], xmm10
+       vmovdqa [rsp + 5*16], xmm11
+       vmovdqa [rsp + 6*16], xmm12
+       vmovdqa [rsp + 7*16], xmm13
+       save_reg        rsi, 8*16 + 0*8
+       save_reg        rdi, 8*16 + 1*8
+       save_reg        r12, 8*16 + 2*8
+       save_reg        r13, 8*16 + 3*8
+       end_prolog
+%endm
+
+%macro FUNC_RESTORE 0
+       vmovdqa xmm6, [rsp + 0*16]
+       vmovdqa xmm7, [rsp + 1*16]
+       vmovdqa xmm8, [rsp + 2*16]
+       vmovdqa xmm9, [rsp + 3*16]
+       vmovdqa xmm10, [rsp + 4*16]
+       vmovdqa xmm11, [rsp + 5*16]
+       vmovdqa xmm12, [rsp + 6*16]
+       vmovdqa xmm13, [rsp + 7*16]
+
+       mov     rsi, [rsp + 8*16 + 0*8]
+       mov     rdi, [rsp + 8*16 + 1*8]
+       mov     r12, [rsp + 8*16 + 2*8]
+       mov     r13, [rsp + 8*16 + 3*8]
+       add     rsp, stack_size
+%endm
+%else
+%define func(x) x:
+%macro FUNC_SAVE 0
+       push    r12
+       push    r13
+%endm
+
+%macro FUNC_RESTORE 0
+       pop     r13
+       pop     r12
+%endm
+%endif
+%define VECT_SIZE 16
+
+global set_long_icf_fg_06
+func(set_long_icf_fg_06)
+       FUNC_SAVE
+
+       lea     end_in, [next_in + arg3]
+       add     end_processed, next_in
+       mov     end_processed_orig, end_processed
+       lea     tmp1, [end_processed + LA_STATELESS]
+       cmp     end_in, tmp1
+       cmovg   end_in, tmp1
+       sub     end_processed, 15
+       vpbroadcastd zlong_lens, [long_len]
+       vpbroadcastd zlong_lens2, [long_len2]
+       vpbroadcastd zlens_mask, [len_mask]
+       vmovdqu16 zdists_start, [dist_start]
+       vpbroadcastd zdists_mask, [dists_mask]
+       vmovdqu32 zincrement, [increment]
+       vbroadcasti64x2 zdatas_perm2, [datas_perm2]
+       vbroadcasti64x2 zdatas_perm3, [datas_perm3]
+       vmovdqu64 zqword_shuf, [qword_shuf]
+       vbroadcasti64x2 zbswap, [bswap_shuf]
+       vpbroadcastd znlen_mask, [nlen_mask]
+       vpbroadcastd zvect_size, [vect_size]
+       vpbroadcastd zmax_len, [max_len]
+       vpbroadcastd ztwofiftyfour, [twofiftyfour]
+       vpbroadcastd ztwofiftysix, [twofiftysix]
+       vpbroadcastd ztwosixtytwo, [twosixtytwo]
+       vmovdqu32 zmatch_lookup, [match_lookup]
+
+.fill_loop: ; Tahiti is a magical place
+       vmovdqu32 zmatch_lookup2, zmatch_lookup
+       vmovdqu32 zmatch_lookup, [match_lookup + ICF_CODE_BYTES * VECT_SIZE]
+
+       cmp     next_in, end_processed
+       jae     .end_fill
+
+.finish_entry:
+       vpandd  zlens, zmatch_lookup2, zlens_mask
+       vpcmpgtd k3, zlens, zlong_lens
+
+;; Speculatively increment
+       add     next_in, VECT_SIZE
+       add     match_lookup, ICF_CODE_BYTES * VECT_SIZE
+
+       ktestw  k3, k3
+       jz      .fill_loop
+
+       vpsrld  zdist_codes, zmatch_lookup2, DIST_OFFSET
+       vpmovdw zdists %+ y, zdist_codes ; Relies on perm working mod 32
+       vpermw  zdists, zdists, zdists_start
+       vpmovzxwd zdists, zdists %+ y
+
+       vpsrld  zdist_extras, zmatch_lookup2, EXTRA_BITS_OFFSET
+       vpsubd  zdist_extras, zincrement, zdist_extras
+
+       vpsubd  zdists, zdist_extras, zdists
+       vextracti32x8 zdists2 %+ y, zdists, 1
+       kmovb   k6, k3
+       kshiftrw k7, k3, 8
+       vpgatherdq zlens1 {k6}, [next_in + zdists %+ y - 8]
+       vpgatherdq zlens2 {k7}, [next_in + zdists2 %+ y - 8]
+
+       vmovdqu8 datas %+ y, [next_in - 8]
+       vpermq  zlookup, zdatas_perm2, datas
+       vpshufb zlookup, zlookup, zqword_shuf
+       vpermq  zlookup2, zdatas_perm3, datas
+       vpshufb zlookup2, zlookup2, zqword_shuf
+
+       vpxorq  zlens1, zlens1, zlookup
+       vpxorq  zlens2, zlens2, zlookup2
+
+       vpshufb zlens1, zlens1, zbswap
+       vpshufb zlens2, zlens2, zbswap
+       vplzcntq zlens1, zlens1
+       vplzcntq zlens2, zlens2
+       vpmovqd zlens1 %+ y, zlens1
+       vpmovqd zlens2 %+ y, zlens2
+       vinserti32x8 zlens1, zlens2 %+ y, 1
+       vpsrld  zlens1 {k3}{z}, zlens1, 3
+
+       vpandd  zmatch_lookup2 {k3}{z}, zmatch_lookup2, znlen_mask
+       vpaddd  zmatch_lookup2 {k3}{z}, zmatch_lookup2, ztwosixtytwo
+       vpaddd  zmatch_lookup2 {k3}{z}, zmatch_lookup2, zlens1
+
+       vmovdqu32 [match_lookup - ICF_CODE_BYTES * VECT_SIZE] {k3}, zmatch_lookup2
+
+       vpcmpgtd k3, zlens1, zlong_lens2
+       ktestw  k3, k3
+       jz      .fill_loop
+
+       vpsubd  zdists, zincrement, zdists
+
+       vpcompressd zdists2 {k3}, zdists
+       vpcompressd zmatch_lookup2 {k3}, zmatch_lookup2
+       kmovq   match_offset, k3
+       tzcnt   match_offset, match_offset
+
+       vmovd   dist %+ d, zdists2 %+ x
+       lea     next_in, [next_in + match_offset - VECT_SIZE]
+       lea     match_lookup, [match_lookup + ICF_CODE_BYTES * (match_offset - VECT_SIZE)]
+       mov     match_in, next_in
+       sub     match_in, dist
+
+       mov     len, 16
+       mov     tmp2, end_in
+       sub     tmp2, next_in
+
+       compare_z next_in, match_in, len, tmp2, tmp1, k3, ztmp1, ztmp2
+
+       vpbroadcastd zlens1, len %+ d
+       vpsubd  zlens1, zlens1, zincrement
+       vpaddd  zlens1, zlens1, ztwofiftyfour
+
+       mov     tmp2, end_processed
+       sub     tmp2, next_in
+       cmp     len, tmp2
+       cmovg   len, tmp2
+
+       add     next_in, len
+       lea     match_lookup, [match_lookup + ICF_CODE_BYTES * len]
+       vmovdqu32 zmatch_lookup, [match_lookup]
+
+       vpbroadcastd zmatch_lookup2, zmatch_lookup2 %+ x
+       vpandd  zmatch_lookup2, zmatch_lookup2, znlen_mask
+
+       neg     len
+
+.update_match_lookup:
+       vpandd  zlens2, zlens_mask, [match_lookup + ICF_CODE_BYTES * len]
+       vpcmpgtd k3, zlens1, zlens2
+       vpcmpgtd k4, zlens1, ztwofiftysix
+       kandw   k3, k3, k4
+
+       vpcmpgtd k4, zlens1, zmax_len
+       vmovdqu32 zlens, zlens1
+       vmovdqu32 zlens {k4}, zmax_len
+
+       vpaddd  zlens2 {k3}{z}, zlens, zmatch_lookup2
+
+       vmovdqu32 [match_lookup + ICF_CODE_BYTES * len] {k3}, zlens2
+
+       knotw   k3, k3
+       ktestw  k3, k3
+       jnz     .fill_loop
+
+       add     len, VECT_SIZE
+       vpsubd  zlens1, zlens1, zvect_size
+
+       jmp     .update_match_lookup
+
+.end_fill:
+       mov     end_processed, end_processed_orig
+       cmp     next_in, end_processed
+       jge     .finish
+
+       mov     tmp1, end_processed
+       sub     tmp1, next_in
+       vpbroadcastd ztmp1, tmp1 %+ d
+       vpcmpd k3, ztmp1, zincrement, 6
+       vmovdqu32 zmatch_lookup2 {k3}{z}, zmatch_lookup2
+       jmp     .finish_entry
+
+.finish:
+
+       FUNC_RESTORE
+       ret
+
+endproc_frame
+
+section .data
+align 64
+;; 64 byte data
+dist_start:
+       dw 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d
+       dw 0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1
+       dw 0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01
+       dw 0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000
+qword_shuf:
+       db 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+       db 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8
+       db 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9
+       db 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa
+       db 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb
+       db 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc
+       db 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd
+       db 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe
+       db 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
+
+;; 16 byte data
+increment:
+       dd 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
+       dd 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf
+
+datas_perm2:
+       dq 0x0, 0x1
+datas_perm3:
+       dq 0x1, 0x2
+bswap_shuf:
+       db 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
+       db 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08
+
+;; 4 byte data
+len_mask:
+       dd LIT_LEN_MASK
+dists_mask:
+       dd LIT_DIST_MASK
+long_len:
+       dd 0x105
+long_len2:
+       dd 0x7
+max_len:
+       dd 0xfe + 0x102
+vect_size:
+       dd VECT_SIZE
+twofiftyfour:
+       dd 0xfe
+twofiftysix:
+       dd 0x100
+twosixtytwo:
+       dd 0x106
+nlen_mask:
+       dd 0xfffffc00
+%endif
diff --git a/ceph/src/isa-l/igzip/igzip_stateless_file_perf.c b/ceph/src/isa-l/igzip/igzip_stateless_file_perf.c
deleted file mode 100644 (file)
index d08e749..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <getopt.h>
-#include "igzip_lib.h"
-#include "test.h"
-
-#define BUF_SIZE 1024
-#define MIN_TEST_LOOPS   10
-#ifndef RUN_MEM_SIZE
-# define RUN_MEM_SIZE 500000000
-#endif
-
-struct isal_zstream stream;
-
-int usage(void)
-{
-       fprintf(stderr,
-               "Usage: igzip_stateless_file_perf [options] <infile>\n"
-               "  -h        help\n"
-               "  -X        use compression level X with 0 <= X <= 1\n"
-               "  -i <iter> number of iterations (at least 1)\n"
-               "  -o <file> output file for compresed data\n");
-       exit(0);
-}
-
-int get_filesize(FILE * f)
-{
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
-}
-
-int main(int argc, char *argv[])
-{
-       FILE *in, *out = NULL;
-       unsigned char *inbuf, *outbuf, *level_buf = NULL;
-       int i, c, infile_size, iterations = 0, outbuf_size;
-       struct isal_huff_histogram histogram;
-       struct isal_hufftables hufftables_custom;
-       int level = 0, level_size = 0;
-       char *in_file_name = NULL, *out_file_name = NULL;
-
-       while ((c = getopt(argc, argv, "h01i:o:")) != -1) {
-               switch (c) {
-               case 'o':
-                       out_file_name = optarg;
-                       break;
-               case 'i':
-                       iterations = atoi(optarg);
-                       if (iterations < 1)
-                               usage();
-                       break;
-               case '1':
-                       level = 1;
-                       level_size = ISAL_DEF_LVL1_LARGE;
-                       break;
-               case '0':
-                       break;
-               case 'h':
-               default:
-                       usage();
-                       break;
-               }
-       }
-
-       if (optind < argc) {
-               in_file_name = argv[optind];
-               in = fopen(in_file_name, "rb");
-       } else
-               usage();
-
-       if (!in) {
-               fprintf(stderr, "Can't open %s for reading\n", in_file_name);
-               exit(0);
-       }
-       if (out_file_name != NULL) {
-               out = fopen(out_file_name, "wb");
-               if (!out) {
-                       fprintf(stderr, "Can't open %s for writing\n", out_file_name);
-                       exit(0);
-               }
-               printf("outfile=%s\n", out_file_name);
-       }
-
-       printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
-       printf("igzip_file_perf: \n");
-       fflush(0);
-       /* Allocate space for entire input file and output
-        * (assuming some possible expansion on output size)
-        */
-       infile_size = get_filesize(in);
-
-       outbuf_size = infile_size * 1.07 + BUF_SIZE;
-
-       if (iterations == 0) {
-               iterations = infile_size ? RUN_MEM_SIZE / infile_size : MIN_TEST_LOOPS;
-               if (iterations < MIN_TEST_LOOPS)
-                       iterations = MIN_TEST_LOOPS;
-       }
-
-       inbuf = malloc(infile_size);
-       if (inbuf == NULL) {
-               fprintf(stderr, "Can't allocate input buffer memory\n");
-               exit(0);
-       }
-       outbuf = malloc(outbuf_size);
-       if (outbuf == NULL) {
-               fprintf(stderr, "Can't allocate output buffer memory\n");
-               exit(0);
-       }
-
-       if (level_size != 0) {
-               level_buf = malloc(level_size);
-               if (level_buf == NULL) {
-                       fprintf(stderr, "Can't allocate level buffer memory\n");
-                       exit(0);
-               }
-       }
-
-       printf("igzip_file_perf: %s %d iterations\n", in_file_name, iterations);
-       /* Read complete input file into buffer */
-       stream.avail_in = (uint32_t) fread(inbuf, 1, infile_size, in);
-       if (stream.avail_in != infile_size) {
-               fprintf(stderr, "Couldn't fit all of input file into buffer\n");
-               exit(0);
-       }
-
-       struct perf start, stop;
-       perf_start(&start);
-
-       for (i = 0; i < iterations; i++) {
-               isal_deflate_init(&stream);
-               stream.end_of_stream = 1;       /* Do the entire file at once */
-               stream.flush = NO_FLUSH;
-               stream.next_in = inbuf;
-               stream.avail_in = infile_size;
-               stream.next_out = outbuf;
-               stream.avail_out = outbuf_size;
-               stream.level = level;
-               stream.level_buf = level_buf;
-               stream.level_buf_size = level_size;
-               isal_deflate_stateless(&stream);
-               if (stream.avail_in != 0)
-                       break;
-       }
-       perf_stop(&stop);
-
-       if (stream.avail_in != 0) {
-               fprintf(stderr, "Could not compress all of inbuf\n");
-               exit(0);
-       }
-
-       printf("  file %s - in_size=%d out_size=%d iter=%d ratio=%3.1f%%", in_file_name,
-              infile_size, stream.total_out, i, 100.0 * stream.total_out / infile_size);
-
-       if (level == 0) {
-               memset(&histogram, 0, sizeof(histogram));
-
-               isal_update_histogram(inbuf, infile_size, &histogram);
-               isal_create_hufftables(&hufftables_custom, &histogram);
-
-               isal_deflate_init(&stream);
-               stream.end_of_stream = 1;       /* Do the entire file at once */
-               stream.flush = NO_FLUSH;
-               stream.next_in = inbuf;
-               stream.avail_in = infile_size;
-               stream.next_out = outbuf;
-               stream.avail_out = outbuf_size;
-               stream.level = level;
-               stream.level_buf = level_buf;
-               stream.level_buf_size = level_size;
-               stream.hufftables = &hufftables_custom;
-               isal_deflate_stateless(&stream);
-
-               printf(" ratio_custom=%3.1f%%", 100.0 * stream.total_out / infile_size);
-       }
-       printf("\n");
-
-       printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
-
-       if (argc > 2 && out) {
-               printf("writing %s\n", out_file_name);
-               fwrite(outbuf, 1, stream.total_out, out);
-               fclose(out);
-       }
-
-       fclose(in);
-       printf("End of igzip_file_perf\n\n");
-       fflush(0);
-       return 0;
-}
diff --git a/ceph/src/isa-l/igzip/igzip_sync_flush_file_perf.c b/ceph/src/isa-l/igzip/igzip_sync_flush_file_perf.c
deleted file mode 100644 (file)
index 9fceee0..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "igzip_lib.h"
-#include "test.h"
-
-#define BUF_SIZE 1024
-#define MIN_TEST_LOOPS   100
-#ifndef RUN_MEM_SIZE
-# define RUN_MEM_SIZE 500000000
-#endif
-
-struct isal_zstream stream;
-
-int get_filesize(FILE * f)
-{
-       int curr, end;
-
-       curr = ftell(f);        /* Save current position */
-       fseek(f, 0L, SEEK_END);
-       end = ftell(f);
-       fseek(f, curr, SEEK_SET);       /* Restore position */
-       return end;
-}
-
-int main(int argc, char *argv[])
-{
-       FILE *in, *out = NULL;
-       unsigned char *inbuf, *outbuf;
-       int i, infile_size, iterations, outbuf_size;
-
-       if (argc > 3 || argc < 2) {
-               fprintf(stderr, "Usage: igzip_sync_flush_file_perf  infile [outfile]\n"
-                       "\t - Runs multiple iterations of igzip on a file to get more accurate time results.\n");
-               exit(0);
-       }
-       in = fopen(argv[1], "rb");
-       if (!in) {
-               fprintf(stderr, "Can't open %s for reading\n", argv[1]);
-               exit(0);
-       }
-       if (argc > 2) {
-               out = fopen(argv[2], "wb");
-               if (!out) {
-                       fprintf(stderr, "Can't open %s for writing\n", argv[2]);
-                       exit(0);
-               }
-               printf("outfile=%s\n", argv[2]);
-       }
-       printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
-       printf("igzip_sync_flush_file_perf: \n");
-       fflush(0);
-       /* Allocate space for entire input file and
-        * output (assuming 1:1 max output size)
-        */
-       infile_size = get_filesize(in);
-
-       if (infile_size != 0) {
-               outbuf_size = infile_size;
-               iterations = RUN_MEM_SIZE / infile_size;
-       } else {
-               outbuf_size = BUF_SIZE;
-               iterations = MIN_TEST_LOOPS;
-       }
-       if (iterations < MIN_TEST_LOOPS)
-               iterations = MIN_TEST_LOOPS;
-
-       inbuf = malloc(infile_size);
-       if (inbuf == NULL) {
-               fprintf(stderr, "Can't allocate input buffer memory\n");
-               exit(0);
-       }
-       outbuf = malloc(outbuf_size);
-       if (outbuf == NULL) {
-               fprintf(stderr, "Can't allocate output buffer memory\n");
-               exit(0);
-       }
-
-       printf("igzip_sync_flush_file_perf: %s %d iterations\n", argv[1], iterations);
-       /* Read complete input file into buffer */
-       stream.avail_in = (uint32_t) fread(inbuf, 1, infile_size, in);
-       if (stream.avail_in != infile_size) {
-               fprintf(stderr, "Couldn't fit all of input file into buffer\n");
-               exit(0);
-       }
-
-       struct perf start, stop;
-       perf_start(&start);
-
-       for (i = 0; i < iterations; i++) {
-               isal_deflate_init(&stream);
-               stream.end_of_stream = 0;
-               stream.flush = SYNC_FLUSH;
-               stream.next_in = inbuf;
-               stream.avail_in = infile_size / 2;
-               stream.next_out = outbuf;
-               stream.avail_out = outbuf_size / 2;
-               isal_deflate(&stream);
-               if (infile_size == 0)
-                       continue;
-               stream.avail_in = infile_size - infile_size / 2;
-               stream.end_of_stream = 1;
-               stream.next_in = inbuf + stream.total_in;
-               stream.flush = SYNC_FLUSH;
-               stream.avail_out = infile_size - outbuf_size / 2;
-               stream.next_out = outbuf + stream.total_out;
-               isal_deflate(&stream);
-               if (stream.avail_in != 0)
-                       break;
-       }
-       perf_stop(&stop);
-
-       if (stream.avail_in != 0) {
-               fprintf(stderr, "Could not compress all of inbuf\n");
-               exit(0);
-       }
-
-       printf("  file %s - in_size=%d out_size=%d iter=%d ratio=%3.1f%%\n", argv[1],
-              infile_size, stream.total_out, i, 100.0 * stream.total_out / infile_size);
-
-       printf("igzip_file: ");
-       perf_print(stop, start, (long long)infile_size * i);
-
-       if (argc > 2 && out) {
-               printf("writing %s\n", argv[2]);
-               fwrite(outbuf, 1, stream.total_out, out);
-               fclose(out);
-       }
-
-       fclose(in);
-       printf("End of igzip_sync_flush_file_perf\n\n");
-       fflush(0);
-       return 0;
-}
diff --git a/ceph/src/isa-l/igzip/igzip_sync_flush_perf.c b/ceph/src/isa-l/igzip/igzip_sync_flush_perf.c
deleted file mode 100644 (file)
index 46d89d6..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/**********************************************************************
-  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-    * Neither the name of Intel Corporation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "igzip_lib.h"
-#include "test.h"
-
-#define TEST_LEN   (1024*1024)
-#define IBUF_SIZE  (1024*1024)
-#define OBUF_SIZE  (1024*1024)
-
-#define TEST_LOOPS   400
-#define TEST_TYPE_STR "_warm"
-
-void create_data(unsigned char *data, int size)
-{
-       char c = 'a';
-       while (size--)
-               *data++ = c = c < 'z' ? c + 1 : 'a';
-}
-
-int main(int argc, char *argv[])
-{
-       int i = 1;
-       struct isal_zstream stream;
-       unsigned char inbuf[IBUF_SIZE], zbuf[OBUF_SIZE];
-       struct perf start, stop;
-
-       create_data(inbuf, TEST_LEN);
-       printf("Window Size: %d K\n", IGZIP_HIST_SIZE / 1024);
-       printf("igzip_sync_flush_perf: \n");
-       fflush(0);
-
-       perf_start(&start);
-
-       for (i = 0; i < TEST_LOOPS; i++) {
-               isal_deflate_init(&stream);
-
-               stream.avail_in = TEST_LEN;
-               if (i == (TEST_LOOPS - 1))
-                       stream.end_of_stream = 1;
-               else
-                       stream.end_of_stream = 0;
-               stream.next_in = inbuf;
-               stream.flush = SYNC_FLUSH;
-
-               do {
-                       stream.avail_out = OBUF_SIZE;
-                       stream.next_out = zbuf;
-                       isal_deflate(&stream);
-               } while (stream.avail_out == 0);
-
-       }
-
-       perf_stop(&stop);
-
-       printf("igzip_sync_flush_perf" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)(TEST_LEN) * (i));
-
-       if (!stream.end_of_stream) {
-               printf("error: compression test could not fit into allocated buffers\n");
-               return -1;
-       }
-       printf("End of igzip_sync_flush_perf\n\n");
-       fflush(0);
-       return 0;
-}
index 4d91f7fbe22f8129059915b5fe4cb585d4669622..34ecaf1bc8a7ec559fb553c553605def22553e58 100644 (file)
@@ -1,3 +1,31 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 %include "options.asm"
 
@@ -247,7 +275,7 @@ isal_update_histogram_ %+ ARCH %+ :
 
        ;; Init hash_table
        PXOR    vtmp0, vtmp0, vtmp0
-       mov     rcx, (IGZIP_HASH_SIZE - V_LENGTH)
+       mov     rcx, (IGZIP_LVL0_HASH_SIZE - V_LENGTH)
 init_hash_table:
        MOVDQU  [histogram + _hash_offset + 2 * rcx], vtmp0
        MOVDQU  [histogram + _hash_offset + 2 * (rcx + V_LENGTH / 2)], vtmp0
@@ -262,7 +290,7 @@ init_hash_table:
        ;; Load first literal into histogram
        mov     curr_data, [file_start + f_i]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, LVL0_HASH_MASK
        mov     [histogram + _hash_offset + 2 * hash], f_i %+ w
        and     curr_data, 0xff
        inc     qword [histogram + _lit_len_offset + HIST_ELEM_SIZE * curr_data]
@@ -276,8 +304,8 @@ init_hash_table:
        shr     curr_data2, 8
        compute_hash    hash2, curr_data2
 
-       and     hash2 %+ d, HASH_MASK
-       and     hash, HASH_MASK
+       and     hash2 %+ d, LVL0_HASH_MASK
+       and     hash, LVL0_HASH_MASK
 loop2:
        xor     dist, dist
        xor     dist2, dist2
@@ -324,8 +352,8 @@ loop2:
        xor     len, [tmp1 + dist - 1]
        jz      compare_loop
 
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
+       and     hash %+ d, LVL0_HASH_MASK
+       and     hash2 %+ d, LVL0_HASH_MASK
 
        MOVQ    len2, xdata
        xor     len2, [tmp1 + dist2]
@@ -370,7 +398,7 @@ len_dist_lit_huffman:
        mov     tmp1, curr_data
        compute_hash    hash, curr_data
 
-       and     hash3, HASH_MASK
+       and     hash3, LVL0_HASH_MASK
        mov     [histogram + _hash_offset + 2 * hash3], tmp3 %+ w
 
        dist_to_dist_code2 dist_code2, dist2
@@ -383,8 +411,8 @@ len_dist_lit_huffman:
        inc     qword [histogram + _lit_len_offset + HIST_ELEM_SIZE * len_code]
        inc     qword [histogram + _dist_offset + HIST_ELEM_SIZE * dist_code2]
 
-       and     hash2 %+ d, HASH_MASK
-       and     hash, HASH_MASK
+       and     hash2 %+ d, LVL0_HASH_MASK
+       and     hash, LVL0_HASH_MASK
 
        cmp     f_i, file_length
        jl      loop2
@@ -418,8 +446,8 @@ len_dist_huffman:
        inc     qword [histogram + _lit_len_offset + HIST_ELEM_SIZE * len_code]
        inc     qword [histogram + _dist_offset + HIST_ELEM_SIZE * dist_code]
 
-       and     hash2 %+ d, HASH_MASK
-       and     hash, HASH_MASK
+       and     hash2 %+ d, LVL0_HASH_MASK
+       and     hash, LVL0_HASH_MASK
 
        cmp     f_i, file_length
        jl      loop2
@@ -442,7 +470,7 @@ end_loop_2:
 loop2_finish:
        mov     curr_data %+ d, dword [file_start + f_i]
        compute_hash    hash, curr_data
-       and     hash %+ d, HASH_MASK
+       and     hash %+ d, LVL0_HASH_MASK
 
        ;; Calculate possible distance for length/dist pair.
        xor     dist, dist
@@ -513,19 +541,14 @@ exit_ret:
        ret
 
 compare_loop:
-       and     hash %+ d, HASH_MASK
-       and     hash2 %+ d, HASH_MASK
+       and     hash %+ d, LVL0_HASH_MASK
+       and     hash2 %+ d, LVL0_HASH_MASK
        lea     tmp2, [tmp1 + dist - 1]
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len, tmp3, ytmp0, ytmp1
-%else
-       %error Unknown Compare type COMPARE_TYPE
-        % error
-%endif
+
+       mov     len2, 250
+       mov     len, 8
+       compare250      tmp1, tmp2, len, len2, tmp3, ytmp0, ytmp1
+
        lea     tmp3, [f_i + 1]
        jmp     len_dist_huffman
 
@@ -533,16 +556,10 @@ compare_loop2:
        add     tmp1, 1
        lea     tmp2, [tmp1 + dist2 - 1]
 
-%if (COMPARE_TYPE == 1)
-       compare250      tmp1, tmp2, len2, tmp3
-%elif (COMPARE_TYPE == 2)
-       compare250_x    tmp1, tmp2, len2, tmp3, xtmp0, xtmp1
-%elif (COMPARE_TYPE == 3)
-       compare250_y    tmp1, tmp2, len2, tmp3, ytmp0, ytmp1
-%else
-%error Unknown Compare type COMPARE_TYPE
- % error
-%endif
+       mov     len, 250
+       mov     len2, 8
+       compare250      tmp1, tmp2, len2, len, tmp3, ytmp0, ytmp1
+
        and     curr_data, 0xff
        inc     qword [histogram + _lit_len_offset + 8 * curr_data]
        lea     tmp3, [f_i + 1]
diff --git a/ceph/src/isa-l/igzip/igzip_wrapper.h b/ceph/src/isa-l/igzip/igzip_wrapper.h
new file mode 100644 (file)
index 0000000..f1b4bce
--- /dev/null
@@ -0,0 +1,52 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef IGZIP_WRAPPER_H
+
+#define DEFLATE_METHOD 8
+#define ZLIB_DICT_FLAG (1 << 5)
+#define TEXT_FLAG (1 << 0)
+#define HCRC_FLAG (1 << 1)
+#define EXTRA_FLAG (1 << 2)
+#define NAME_FLAG (1 << 3)
+#define COMMENT_FLAG (1 << 4)
+#define UNDEFINED_FLAG (-1)
+
+#define GZIP_HDR_BASE 10
+#define GZIP_EXTRA_LEN 2
+#define GZIP_HCRC_LEN 2
+#define GZIP_TRAILER_LEN 8
+
+#define ZLIB_HDR_BASE 2
+#define ZLIB_DICT_LEN 4
+#define ZLIB_INFO_OFFSET 4
+#define ZLIB_LEVEL_OFFSET 6
+#define ZLIB_TRAILER_LEN 4
+
+#endif
diff --git a/ceph/src/isa-l/igzip/igzip_wrapper_hdr_test.c b/ceph/src/isa-l/igzip/igzip_wrapper_hdr_test.c
new file mode 100644 (file)
index 0000000..57e099f
--- /dev/null
@@ -0,0 +1,890 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "checksum_test_ref.h"
+#include "igzip_lib.h"
+#include "igzip_wrapper.h"
+
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+#ifndef RANDOMS
+# define RANDOMS 0x4000
+#endif
+
+#define EXTRA_SIZE_MAX 256
+#define NAME_SIZE_MAX 256
+#define COMMENT_SIZE_MAX 1024
+
+#define EXTRA_SIZE 10
+#define NAME_SIZE 25
+#define COMMENT_SIZE 192
+
+enum {
+       INVALID_WRAPPER = ISAL_INVALID_WRAPPER,
+       UNSUPPORTED_METHOD = ISAL_UNSUPPORTED_METHOD,
+       INCORRECT_CHECKSUM = ISAL_INCORRECT_CHECKSUM,
+       NO_ERROR = ISAL_DECOMP_OK,
+       END_INPUT = ISAL_END_INPUT,
+       NAME_OVERFLOW = ISAL_NAME_OVERFLOW,
+       COMMENT_OVERFLOW = ISAL_COMMENT_OVERFLOW,
+       EXTRA_OVERFLOW = ISAL_EXTRA_OVERFLOW,
+       INCORRECT_TEXT_FLAG,
+       INCORRECT_TIME,
+       INCORRECT_XFLAGS,
+       INCORRECT_OS,
+       INCORRECT_EXTRA_LEN,
+       INCORRECT_EXTRA_BUF,
+       INCORRECT_NAME,
+       INCORRECT_COMMENT,
+       INCORRECT_INFO,
+       INCORRECT_LEVEL,
+       INCORRECT_DICT_FLAG,
+       INCORRECT_DICT_ID,
+       INCORRECT_HDR_LEN,
+       INSUFFICIENT_BUFFER_SIZE,
+       INCORRECT_WRITE_RETURN,
+       MALLOC_FAILED
+};
+
+void print_error(int32_t error)
+{
+       printf("Error Code %d: ", error);
+       switch (error) {
+       case END_INPUT:
+               printf("End of input reached before header decompressed\n");
+               break;
+       case INVALID_WRAPPER:
+               printf("Invalid gzip wrapper found\n");
+               break;
+       case UNSUPPORTED_METHOD:
+               printf("Unsupported decompression method found\n");
+               break;
+       case INCORRECT_CHECKSUM:
+               printf("Incorrect header checksum found\n");
+               break;
+       case NAME_OVERFLOW:
+               printf("Name buffer overflow while decompression\n");
+               break;
+       case COMMENT_OVERFLOW:
+               printf("Comment buffer overflow while decompressing\n");
+       case EXTRA_OVERFLOW:
+               printf("Extra buffer overflow while decomrpessiong\n");
+               break;
+       case INCORRECT_TEXT_FLAG:
+               printf("Incorrect text field found\n");
+               break;
+       case INCORRECT_TIME:
+               printf("Incorrect time filed found\n");
+               break;
+       case INCORRECT_XFLAGS:
+               printf("Incorrect xflags field found\n");
+               break;
+       case INCORRECT_OS:
+               printf("Incorrect os field found\n");
+               break;
+       case INCORRECT_EXTRA_LEN:
+               printf("Incorect extra_len field found\n");
+               break;
+       case INCORRECT_EXTRA_BUF:
+               printf("Incorrect extra buffer found\n");
+               break;
+       case INCORRECT_NAME:
+               printf("Incorrect name found\n");
+               break;
+       case INCORRECT_COMMENT:
+               printf("Incorrect comment found\n");
+               break;
+       case INCORRECT_INFO:
+               printf("Incorrect info found\n");
+               break;
+       case INCORRECT_LEVEL:
+               printf("Incorrect level found\n");
+               break;
+       case INCORRECT_DICT_FLAG:
+               printf("Incorrect dictionary flag found\n");
+               break;
+       case INCORRECT_DICT_ID:
+               printf("Incorrect dictionary id found\n");
+               break;
+       case INCORRECT_HDR_LEN:
+               printf("Incorrect header length found\n");
+               break;
+       case INSUFFICIENT_BUFFER_SIZE:
+               printf("Insufficient buffer size to write header\n");
+               break;
+       case INCORRECT_WRITE_RETURN:
+               printf("Header write returned an incorrect value\n");
+               break;
+       case MALLOC_FAILED:
+               printf("Failed to allocate buffers\n");
+               break;
+       case NO_ERROR:
+               printf("No error found\n");
+       }
+}
+
+void print_uint8_t(uint8_t * array, uint64_t length, char *prepend)
+{
+       const int line_size = 16;
+       int i;
+
+       if (array == NULL)
+               printf("%s(NULL)", prepend);
+       else if (length == 0)
+               printf("%s(Empty)", prepend);
+
+       for (i = 0; i < length; i++) {
+               if (i == 0)
+                       printf("%s0x%04x\t", prepend, i);
+               else if ((i % line_size) == 0)
+                       printf("\n%s0x%04x\t", prepend, i);
+               else
+                       printf(" ");
+               printf("0x%02x,", array[i]);
+       }
+       printf("\n");
+}
+
+void print_string(char *str, uint32_t str_max_len, char *prepend)
+{
+       const int line_size = 64;
+       uint32_t i = 0;
+
+       while (str[i] != 0 && i < str_max_len) {
+               if (i == 0)
+                       printf("%s0x%04x\t", prepend, i);
+               else if ((i % line_size) == 0)
+                       printf("\n%s0x%04x\t", prepend, i);
+
+               printf("%c", str[i]);
+               i++;
+       }
+       printf("\n");
+}
+
+void print_gzip_header(struct isal_gzip_header *gz_hdr, char *prepend1, char *prepend2)
+{
+       printf("%sText: %d, Time: 0x%08x, Xflags: 0x%x, OS: 0x%x\n", prepend1,
+              gz_hdr->text, gz_hdr->time, gz_hdr->xflags, gz_hdr->os);
+
+       printf("%sExtra:  Extra_len = 0x%x\n", prepend1, gz_hdr->extra_len);
+       if (gz_hdr->extra_len < EXTRA_SIZE_MAX)
+               print_uint8_t(gz_hdr->extra, gz_hdr->extra_len, prepend2);
+       else
+               printf("%sExtra field larger than EXTRA_SIZE_MAX\n", prepend2);
+
+       printf("%sName:\n", prepend1);
+       if (gz_hdr->name_buf_len < NAME_SIZE_MAX)
+               print_string(gz_hdr->name, gz_hdr->name_buf_len, prepend2);
+       else
+               printf("%sName field larger than NAME_SIZE_MAX\n", prepend2);
+
+       printf("%sComment:\n", prepend1);
+       if (gz_hdr->comment_buf_len < COMMENT_SIZE_MAX)
+               print_string(gz_hdr->comment, gz_hdr->comment_buf_len, prepend2);
+       else
+               printf("%sComment field larger than COMMENT_SIZE_MAX\n", prepend2);
+}
+
+void print_zlib_header(struct isal_zlib_header *z_hdr, char *prepend)
+{
+       printf("%sInfo: 0x%x\n", prepend, z_hdr->info);
+       printf("%sLevel: 0x%x\n", prepend, z_hdr->level);
+       printf("%sDictionary: Flag = 0x%x, Id =0x%x\n", prepend, z_hdr->dict_flag,
+              z_hdr->dict_id);
+}
+
+void print_gzip_final_verbose(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                             struct isal_gzip_header *gz_hdr_orig,
+                             struct isal_gzip_header *gz_hdr)
+{
+#ifdef VERBOSE
+       printf("\n");
+       if (gz_hdr_orig != NULL) {
+               printf("Original Gzip Header Struct:\n");
+               print_gzip_header(gz_hdr_orig, "\t", "\t\t");
+               printf("\n");
+       }
+
+       if (gz_hdr != NULL) {
+               printf("Parsed Gzip Header Struct:\n");
+               print_gzip_header(gz_hdr, "\t", "\t\t");
+               printf("\n");
+       }
+
+       if (hdr_buf != NULL) {
+               printf("Serialized Gzip Header:\n");
+               print_uint8_t(hdr_buf, hdr_buf_len, "\t");
+               printf("\n");
+       }
+#endif
+       return;
+}
+
+void print_zlib_final_verbose(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                             struct isal_zlib_header *z_hdr_orig,
+                             struct isal_zlib_header *z_hdr)
+{
+#ifdef VERBOSE
+       printf("\n");
+       if (z_hdr_orig != NULL) {
+               printf("Original Zlib Header Struct:\n");
+               print_zlib_header(z_hdr_orig, "\t");
+               printf("\n");
+       }
+
+       if (z_hdr != NULL) {
+               printf("Parsed Zlib Header Struct:\n");
+               print_zlib_header(z_hdr, "\t");
+               printf("\n");
+       }
+
+       if (hdr_buf != NULL) {
+               printf("Serialized Zlib Header:\n");
+               print_uint8_t(hdr_buf, hdr_buf_len, "\t");
+               printf("\n");
+       }
+#endif
+       return;
+}
+
+int gzip_header_size(struct isal_gzip_header *gz_hdr)
+{
+       int hdr_size = 10;
+       if (gz_hdr->extra != NULL) {
+               hdr_size += 2 + gz_hdr->extra_len;
+       }
+       if (gz_hdr->name != NULL) {
+               hdr_size += strnlen(gz_hdr->name, gz_hdr->name_buf_len) + 1;
+       }
+       if (gz_hdr->comment != NULL) {
+               hdr_size += strnlen(gz_hdr->comment, gz_hdr->comment_buf_len) + 1;
+       }
+
+       if (gz_hdr->hcrc) {
+               hdr_size += 2;
+       }
+
+       return hdr_size;
+}
+
+int zlib_header_size(struct isal_zlib_header *z_hdr)
+{
+       if (z_hdr->dict_flag)
+               return 6;
+       else
+               return 2;
+}
+
+void rand_string(char *string, uint32_t str_len)
+{
+       int i;
+
+       if (str_len == 0 || string == NULL)
+               return;
+       for (i = 0; i < str_len - 1; i++) {
+               string[i] = rand() % 26 + 65;
+       }
+       string[str_len - 1] = 0;
+}
+
+void rand_buf(uint8_t * buf, uint32_t buf_len)
+{
+       int i;
+
+       if (buf_len == 0 || buf == NULL)
+               return;
+
+       for (i = 0; i < buf_len; i++) {
+               buf[i] = rand();
+       }
+}
+
+int malloc_gzip_header(struct isal_gzip_header *gz_hdr)
+{
+       gz_hdr->extra = NULL;
+       if (gz_hdr->extra_buf_len) {
+               gz_hdr->extra = malloc(gz_hdr->extra_buf_len);
+               if (gz_hdr->extra == NULL)
+                       return MALLOC_FAILED;
+       }
+
+       gz_hdr->name = NULL;
+       if (gz_hdr->name_buf_len) {
+               gz_hdr->name = malloc(gz_hdr->name_buf_len);
+               if (gz_hdr->name == NULL)
+                       return MALLOC_FAILED;
+       }
+
+       gz_hdr->comment = NULL;
+       if (gz_hdr->comment_buf_len) {
+               gz_hdr->comment = malloc(gz_hdr->comment_buf_len);
+               if (gz_hdr->comment == NULL)
+                       return MALLOC_FAILED;
+       }
+
+       return 0;
+}
+
+void free_gzip_header(struct isal_gzip_header *gz_hdr)
+{
+       if (gz_hdr->extra != NULL) {
+               free(gz_hdr->extra);
+               gz_hdr->extra = NULL;
+       }
+
+       if (gz_hdr->name != NULL) {
+               free(gz_hdr->name);
+               gz_hdr->name = NULL;
+       }
+
+       if (gz_hdr->comment != NULL) {
+               free(gz_hdr->comment);
+               gz_hdr->comment = NULL;
+       }
+
+}
+
+int gen_rand_gzip_header(struct isal_gzip_header *gz_hdr)
+{
+       int ret = 0;
+       int field_set_space = 8;
+
+       isal_gzip_header_init(gz_hdr);
+
+       if (rand() % field_set_space != 0)
+               gz_hdr->text = rand() % 2;
+       if (rand() % field_set_space != 0)
+               gz_hdr->time = rand();
+       if (rand() % field_set_space != 0)
+               gz_hdr->xflags = rand() % 256;
+       if (rand() % field_set_space != 0)
+               gz_hdr->os = rand() % 256;
+
+       if (rand() % field_set_space != 0) {
+               gz_hdr->extra_buf_len = rand() % EXTRA_SIZE_MAX;
+               gz_hdr->extra_len = gz_hdr->extra_buf_len;
+       }
+
+       if (rand() % field_set_space != 0)
+               gz_hdr->name_buf_len = rand() % NAME_SIZE_MAX;
+
+       if (rand() % field_set_space != 0)
+               gz_hdr->comment_buf_len = rand() % COMMENT_SIZE_MAX;
+
+       gz_hdr->hcrc = rand() % 2;
+
+       ret = malloc_gzip_header(gz_hdr);
+       if (ret)
+               return ret;
+
+       rand_buf(gz_hdr->extra, gz_hdr->extra_len);
+       rand_string(gz_hdr->name, gz_hdr->name_buf_len);
+       rand_string(gz_hdr->comment, gz_hdr->comment_buf_len);
+
+       return ret;
+}
+
+void gen_rand_zlib_header(struct isal_zlib_header *z_hdr)
+{
+       z_hdr->info = rand() % 16;
+       z_hdr->level = rand() % 4;
+       z_hdr->dict_flag = rand() % 2;
+       z_hdr->dict_id = rand();
+}
+
+int write_gzip_header(uint8_t * hdr_buf, uint32_t hdr_buf_len, struct isal_gzip_header *gz_hdr)
+{
+
+       struct isal_zstream stream;
+       uint32_t hdr_len = gzip_header_size(gz_hdr);
+       uint32_t len;
+
+       isal_deflate_init(&stream);
+       stream.next_out = hdr_buf;
+       stream.avail_out = rand() % hdr_len;
+       len = isal_write_gzip_header(&stream, gz_hdr);
+
+       if (len != hdr_len) {
+               printf("len = %d, hdr_buf_len = %d\n", len, hdr_len);
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr, NULL);
+               print_error(INCORRECT_HDR_LEN);
+               return INCORRECT_HDR_LEN;
+       }
+
+       if (hdr_buf_len < hdr_len) {
+               print_gzip_final_verbose(NULL, 0, gz_hdr, NULL);
+               print_error(INSUFFICIENT_BUFFER_SIZE);
+               return INSUFFICIENT_BUFFER_SIZE;
+       }
+
+       stream.avail_out = hdr_buf_len;
+
+       len = isal_write_gzip_header(&stream, gz_hdr);
+
+       if (len) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr, NULL);
+               print_error(INCORRECT_WRITE_RETURN);
+               return INCORRECT_WRITE_RETURN;;
+       }
+
+       return 0;
+}
+
+int write_zlib_header(uint8_t * hdr_buf, uint32_t hdr_buf_len, struct isal_zlib_header *z_hdr)
+{
+       struct isal_zstream stream;
+       uint32_t hdr_len = zlib_header_size(z_hdr);
+       uint32_t len;
+
+       isal_deflate_init(&stream);
+       stream.next_out = hdr_buf;
+       stream.avail_out = rand() % hdr_len;
+       len = isal_write_zlib_header(&stream, z_hdr);
+
+       if (len != hdr_len) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr, NULL);
+               print_error(INCORRECT_HDR_LEN);
+               return INCORRECT_HDR_LEN;
+       }
+
+       if (hdr_buf_len < hdr_len) {
+               print_zlib_final_verbose(NULL, 0, z_hdr, NULL);
+               print_error(INSUFFICIENT_BUFFER_SIZE);
+               return INSUFFICIENT_BUFFER_SIZE;
+       }
+
+       stream.avail_out = hdr_buf_len;
+
+       len = isal_write_zlib_header(&stream, z_hdr);
+
+       if (len) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr, NULL);
+               print_error(INCORRECT_WRITE_RETURN);
+               return INCORRECT_WRITE_RETURN;;
+       }
+
+       return 0;
+}
+
+int compare_gzip_headers(struct isal_gzip_header *gz_hdr1, struct isal_gzip_header *gz_hdr2)
+{
+       int ret = 0;
+       uint32_t max_len;
+
+       if (gz_hdr1->text != gz_hdr2->text)
+               return INCORRECT_TEXT_FLAG;
+
+       if (gz_hdr1->time != gz_hdr2->time)
+               return INCORRECT_TIME;
+
+       if (gz_hdr1->xflags != gz_hdr2->xflags)
+               return INCORRECT_XFLAGS;
+
+       if (gz_hdr1->os != gz_hdr2->os)
+               return INCORRECT_OS;
+
+       if (gz_hdr1->extra_len != gz_hdr2->extra_len)
+               return INCORRECT_EXTRA_LEN;
+
+       if (gz_hdr1->extra != NULL && gz_hdr2->extra != NULL) {
+               ret = memcmp(gz_hdr1->extra, gz_hdr2->extra, gz_hdr1->extra_len);
+               if (ret)
+                       return INCORRECT_EXTRA_BUF;
+       }
+
+       if (gz_hdr1->name != NULL && gz_hdr2->name != NULL) {
+               max_len = gz_hdr1->name_buf_len;
+               if (gz_hdr1->name_buf_len < gz_hdr2->name_buf_len)
+                       max_len = gz_hdr2->name_buf_len;
+
+               ret = strncmp(gz_hdr1->name, gz_hdr2->name, max_len);
+               if (ret)
+                       return INCORRECT_NAME;
+       }
+
+       if (gz_hdr1->comment != NULL && gz_hdr2->comment != NULL) {
+               max_len = gz_hdr1->comment_buf_len;
+               if (gz_hdr1->comment_buf_len < gz_hdr2->comment_buf_len)
+                       max_len = gz_hdr2->comment_buf_len;
+
+               ret = strncmp(gz_hdr1->comment, gz_hdr2->comment, max_len);
+               if (ret)
+                       return INCORRECT_COMMENT;
+       }
+       return ret;
+}
+
+int compare_zlib_headers(struct isal_zlib_header *z_hdr1, struct isal_zlib_header *z_hdr2)
+{
+       if (z_hdr1->info != z_hdr2->info)
+               return INCORRECT_INFO;
+
+       if (z_hdr1->level != z_hdr2->level)
+               return INCORRECT_LEVEL;
+
+       if (z_hdr1->dict_flag != z_hdr2->dict_flag)
+               return INCORRECT_DICT_FLAG;
+
+       if (z_hdr1->dict_flag && z_hdr1->dict_id != z_hdr2->dict_id)
+               return INCORRECT_DICT_ID;
+
+       return 0;
+}
+
+int read_gzip_header_simple(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                           struct isal_gzip_header *gz_hdr_orig)
+{
+
+       int ret = 0;
+       struct inflate_state state;
+       struct isal_gzip_header gz_hdr;
+
+       rand_buf((uint8_t *) & gz_hdr, sizeof(gz_hdr));
+       gz_hdr.extra_buf_len = gz_hdr_orig->extra_buf_len;
+       gz_hdr.name_buf_len = gz_hdr_orig->name_buf_len;
+       gz_hdr.comment_buf_len = gz_hdr_orig->comment_buf_len;
+
+       ret = malloc_gzip_header(&gz_hdr);
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, NULL);
+               print_error(ret);
+               free_gzip_header(&gz_hdr);
+               return ret;
+       }
+
+       isal_inflate_init(&state);
+       state.next_in = hdr_buf;
+       state.avail_in = hdr_buf_len;
+       ret = isal_read_gzip_header(&state, &gz_hdr);
+
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, &gz_hdr);
+               print_error(ret);
+               free_gzip_header(&gz_hdr);
+               return ret;
+       }
+
+       ret = compare_gzip_headers(gz_hdr_orig, &gz_hdr);
+
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, &gz_hdr);
+               print_error(ret);
+       }
+
+       free_gzip_header(&gz_hdr);
+       return ret;
+}
+
+int read_zlib_header_simple(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                           struct isal_zlib_header *z_hdr_orig)
+{
+
+       int ret = 0;
+       struct inflate_state state;
+       struct isal_zlib_header z_hdr;
+
+       rand_buf((uint8_t *) & z_hdr, sizeof(z_hdr));
+
+       if (ret) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr_orig, NULL);
+               print_error(ret);
+               return ret;
+       }
+
+       isal_inflate_init(&state);
+       state.next_in = hdr_buf;
+       state.avail_in = hdr_buf_len;
+       ret = isal_read_zlib_header(&state, &z_hdr);
+
+       if (ret) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr_orig, &z_hdr);
+               print_error(ret);
+               return ret;
+       }
+
+       ret = compare_zlib_headers(z_hdr_orig, &z_hdr);
+
+       if (ret) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr_orig, &z_hdr);
+               print_error(ret);
+       }
+
+       return ret;
+}
+
+int read_gzip_header_streaming(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                              struct isal_gzip_header *gz_hdr_orig)
+{
+       int ret = 0;
+       uint32_t max_dec_size, dec_size, max_extra_len, extra_len;
+       uint32_t max_name_len, name_len, max_comment_len, comment_len;
+       struct inflate_state state;
+       struct isal_gzip_header gz_hdr;
+       void *tmp_ptr;
+
+       rand_buf((uint8_t *) & gz_hdr, sizeof(gz_hdr));
+
+       max_dec_size = (rand() % hdr_buf_len) + 2;
+
+       max_extra_len = 2;
+       max_name_len = 2;
+       max_comment_len = 2;
+       if (gz_hdr_orig->extra_buf_len)
+               max_extra_len = (rand() % gz_hdr_orig->extra_buf_len) + 2;
+       if (gz_hdr_orig->name_buf_len)
+               max_name_len = (rand() % gz_hdr_orig->name_buf_len) + 2;
+       if (gz_hdr_orig->comment_buf_len)
+               max_comment_len = (rand() % gz_hdr_orig->comment_buf_len) + 2;
+
+       extra_len = rand() % max_extra_len;
+       name_len = rand() % max_name_len;
+       comment_len = rand() % max_comment_len;
+
+       if (extra_len == 0)
+               extra_len = 1;
+       if (name_len == 0)
+               name_len = 1;
+       if (comment_len == 0)
+               comment_len = 1;
+
+       gz_hdr.extra_buf_len = extra_len;
+       gz_hdr.name_buf_len = name_len;
+       gz_hdr.comment_buf_len = comment_len;
+
+       ret = malloc_gzip_header(&gz_hdr);
+
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, NULL);
+               print_error(ret);
+               free_gzip_header(&gz_hdr);
+               return (ret == 0);
+       }
+
+       isal_inflate_init(&state);
+
+       state.next_in = hdr_buf;
+       dec_size = rand() % max_dec_size;
+       if (dec_size > hdr_buf_len)
+               dec_size = hdr_buf_len;
+
+       state.avail_in = dec_size;
+       hdr_buf_len -= dec_size;
+
+       while (1) {
+               ret = isal_read_gzip_header(&state, &gz_hdr);
+
+               switch (ret) {
+               case ISAL_NAME_OVERFLOW:
+                       if (name_len >= NAME_SIZE_MAX)
+                               break;
+
+                       name_len += rand() % max_name_len;
+                       tmp_ptr = realloc(gz_hdr.name, name_len);
+                       if (tmp_ptr == NULL) {
+                               ret = MALLOC_FAILED;
+                               break;
+                       }
+                       gz_hdr.name = tmp_ptr;
+                       gz_hdr.name_buf_len = name_len;
+                       continue;
+               case ISAL_COMMENT_OVERFLOW:
+                       if (comment_len >= COMMENT_SIZE_MAX)
+                               break;
+
+                       comment_len += rand() % max_comment_len;
+                       tmp_ptr = realloc(gz_hdr.comment, comment_len);
+                       if (tmp_ptr == NULL) {
+                               ret = MALLOC_FAILED;
+                               break;
+                       }
+                       gz_hdr.comment = tmp_ptr;
+                       gz_hdr.comment_buf_len = comment_len;
+                       continue;
+               case ISAL_EXTRA_OVERFLOW:
+                       if (extra_len >= EXTRA_SIZE_MAX)
+                               break;
+
+                       extra_len += rand() % max_extra_len;
+                       tmp_ptr = realloc(gz_hdr.extra, extra_len);
+                       if (tmp_ptr == NULL) {
+                               ret = MALLOC_FAILED;
+                               break;
+                       }
+                       gz_hdr.extra = tmp_ptr;
+                       gz_hdr.extra_buf_len = extra_len;
+                       continue;
+               case ISAL_END_INPUT:
+                       if (hdr_buf_len == 0)
+                               break;
+
+                       dec_size = rand() % max_dec_size;
+                       if (dec_size > hdr_buf_len)
+                               dec_size = hdr_buf_len;
+
+                       state.avail_in = dec_size;
+                       hdr_buf_len -= dec_size;
+                       continue;
+               }
+
+               break;
+       }
+
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, &gz_hdr);
+               print_error(ret);
+               free_gzip_header(&gz_hdr);
+               return ret;
+       }
+
+       ret = compare_gzip_headers(gz_hdr_orig, &gz_hdr);
+
+       if (ret) {
+               print_gzip_final_verbose(hdr_buf, hdr_buf_len, gz_hdr_orig, &gz_hdr);
+               print_error(ret);
+       }
+
+       free_gzip_header(&gz_hdr);
+       return ret;
+}
+
+int read_zlib_header_streaming(uint8_t * hdr_buf, uint32_t hdr_buf_len,
+                              struct isal_zlib_header *z_hdr_orig)
+{
+       int ret = ISAL_END_INPUT;
+       uint32_t max_dec_size, dec_size;
+       struct inflate_state state;
+       struct isal_zlib_header z_hdr;
+
+       rand_buf((uint8_t *) & z_hdr, sizeof(z_hdr));
+
+       max_dec_size = (rand() % hdr_buf_len) + 2;
+
+       isal_inflate_init(&state);
+
+       state.next_in = hdr_buf;
+       while (ret == ISAL_END_INPUT && hdr_buf_len > 0) {
+               dec_size = rand() % max_dec_size;
+               if (dec_size > hdr_buf_len)
+                       dec_size = hdr_buf_len;
+
+               state.avail_in = dec_size;
+               hdr_buf_len -= dec_size;
+
+               ret = isal_read_zlib_header(&state, &z_hdr);
+       }
+
+       if (ret) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr_orig, &z_hdr);
+               print_error(ret);
+               return ret;
+       }
+
+       ret = compare_zlib_headers(z_hdr_orig, &z_hdr);
+
+       if (ret) {
+               print_zlib_final_verbose(hdr_buf, hdr_buf_len, z_hdr_orig, &z_hdr);
+               print_error(ret);
+       }
+
+       return ret;
+}
+
+int main(int argc, char *argv[])
+{
+       uint8_t *hdr_buf;
+       uint32_t hdr_buf_len;
+       int ret = 0, fin_ret = 0;
+       struct isal_gzip_header gz_hdr_orig;
+       struct isal_zlib_header z_hdr_orig;
+       int i;
+
+#ifndef VERBOSE
+       setbuf(stdout, NULL);
+#endif
+       printf("Test Seed  : %d\n", TEST_SEED);
+       printf("Randoms    : %d\n", RANDOMS);
+       srand(TEST_SEED);
+
+       printf("gzip wrapper test: ");
+       for (i = 0; i < RANDOMS; i++) {
+               rand_buf((uint8_t *) & gz_hdr_orig, sizeof(gz_hdr_orig));
+
+               ret = gen_rand_gzip_header(&gz_hdr_orig);
+               if (ret) {
+                       print_error(ret);
+                       return (ret == 0);
+               }
+
+               hdr_buf_len = gzip_header_size(&gz_hdr_orig);
+               hdr_buf = malloc(hdr_buf_len);
+
+               ret = write_gzip_header(hdr_buf, hdr_buf_len, &gz_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               ret = read_gzip_header_simple(hdr_buf, hdr_buf_len, &gz_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               ret = read_gzip_header_streaming(hdr_buf, hdr_buf_len, &gz_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               free_gzip_header(&gz_hdr_orig);
+               if (hdr_buf != NULL)
+                       free(hdr_buf);
+
+               if (i % (RANDOMS / 16) == 0)
+                       printf(".");
+       }
+       printf("Pass \n");
+
+       printf("zlib wrapper test: ");
+       for (i = 0; i < RANDOMS; i++) {
+               memset(&z_hdr_orig, 0, sizeof(z_hdr_orig));
+
+               gen_rand_zlib_header(&z_hdr_orig);
+
+               hdr_buf_len = zlib_header_size(&z_hdr_orig);
+               hdr_buf = malloc(hdr_buf_len);
+
+               ret = write_zlib_header(hdr_buf, hdr_buf_len, &z_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               ret = read_zlib_header_simple(hdr_buf, hdr_buf_len, &z_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               ret = read_zlib_header_streaming(hdr_buf, hdr_buf_len, &z_hdr_orig);
+
+               fin_ret |= ret;
+               if (ret)
+                       return (ret == 0);
+
+               if (hdr_buf != NULL)
+                       free(hdr_buf);
+
+               if (i % (RANDOMS / 16) == 0)
+                       printf(".");
+       }
+       printf("Pass \n");
+
+       printf("igzip wrapper_hdr test finished:%s \n",
+              fin_ret ? " Some tests failed " : " All tests passed");
+
+       return 0;
+}
index 3d4d24d4dcd69706e7cee064f4abf07c20813157..bfdb6d5f0bea299456a13eb962f3840cd99e9bf1 100644 (file)
 %endif
 %endm
 
+;; See inflate_huff_code structure declaration in igzip_lib.h calculation explanation
+%define L_REM (21 - ISAL_DECODE_LONG_BITS)
+%define S_REM (15 - ISAL_DECODE_SHORT_BITS)
+
+%define L_DUP ((1 << L_REM) - (L_REM + 1))
+%define S_DUP ((1 << S_REM) - (S_REM + 1))
+
+%define L_UNUSED ((1 << L_REM) - (1 << ((L_REM)/2)) - (1 << ((L_REM + 1)/2)) + 1)
+%define S_UNUSED ((1 << S_REM) - (1 << ((S_REM)/2)) - (1 << ((S_REM + 1)/2)) + 1)
+
+%define L_SIZE (286 + L_DUP + L_UNUSED)
+%define S_SIZE (30 + S_DUP + S_UNUSED)
+
+%define HUFF_CODE_LARGE_LONG_ALIGNED (L_SIZE + (-L_SIZE & 0xf))
+%define HUFF_CODE_SMALL_LONG_ALIGNED (S_SIZE + (-S_SIZE & 0xf))
+
+%define MAX_LONG_CODE_LARGE (L_SIZE + (-L_SIZE & 0xf))
+%define MAX_LONG_CODE_SMALL (S_SIZE + (-S_SIZE & 0xf))
+
+%define LARGE_SHORT_CODE_SIZE 4
+%define LARGE_LONG_CODE_SIZE 2
+
+%define SMALL_SHORT_CODE_SIZE 2
+%define SMALL_LONG_CODE_SIZE 2
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -54,8 +79,8 @@
 START_FIELDS   ;; inflate huff code
 
 ;;      name                           size    align
-FIELD  _short_code_lookup_large,       2 * (1 << (ISAL_DECODE_LONG_BITS)),     2
-FIELD  _long_code_lookup_large,        2 * MAX_LONG_CODE_LARGE,                2
+FIELD  _short_code_lookup_large,       LARGE_SHORT_CODE_SIZE * (1 << (ISAL_DECODE_LONG_BITS)), LARGE_LONG_CODE_SIZE
+FIELD  _long_code_lookup_large,        LARGE_LONG_CODE_SIZE * MAX_LONG_CODE_LARGE,             LARGE_SHORT_CODE_SIZE
 
 %assign _inflate_huff_code_large_size  _FIELD_OFFSET
 %assign _inflate_huff_code_large_align _STRUCT_ALIGN
@@ -67,8 +92,8 @@ FIELD _long_code_lookup_large,        2 * MAX_LONG_CODE_LARGE,                2
 START_FIELDS   ;; inflate huff code
 
 ;;      name                           size    align
-FIELD  _short_code_lookup_small,       2 * (1 << (ISAL_DECODE_SHORT_BITS)),    2
-FIELD  _long_code_lookup_small,        2 * MAX_LONG_CODE_SMALL,                2
+FIELD  _short_code_lookup_small,       SMALL_SHORT_CODE_SIZE * (1 << (ISAL_DECODE_SHORT_BITS)), SMALL_LONG_CODE_SIZE
+FIELD  _long_code_lookup_small,        SMALL_LONG_CODE_SIZE * MAX_LONG_CODE_SMALL,              SMALL_SHORT_CODE_SIZE
 
 %assign _inflate_huff_code_small_size  _FIELD_OFFSET
 %assign _inflate_huff_code_small_align _STRUCT_ALIGN
@@ -89,10 +114,14 @@ FIELD      _read_in_length,4,      4
 FIELD  _lit_huff_code, _inflate_huff_code_large_size,  _inflate_huff_code_large_align
 FIELD  _dist_huff_code,_inflate_huff_code_small_size,  _inflate_huff_code_small_align
 FIELD  _block_state,   4,      4
+FIELD  _dict_length,   4,      4
 FIELD  _bfinal,        4,      4
 FIELD  _crc_flag,      4,      4
 FIELD  _crc,           4,      4
+FIELD  _hist_bits,     4,      4
 FIELD  _type0_block_len,       4,      4
+FIELD  _write_overflow_lits,   4,      4
+FIELD  _write_overflow_len,    4,      4
 FIELD  _copy_overflow_len,     4,      4
 FIELD  _copy_overflow_dist,    4,      4
 
@@ -109,7 +138,7 @@ ISAL_BLOCK_NEW_HDR  equ     0
 ISAL_BLOCK_HDR         equ     1
 ISAL_BLOCK_TYPE0       equ     2
 ISAL_BLOCK_CODED       equ     3
-ISAL_BLOCK_END         equ     4
+ISAL_BLOCK_INPUT_DONE  equ     4
 ISAL_BLOCK_FINISH      equ     5
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
index 4265c2cd25fa97bb2389f5b12f516ef26adb57e2..6dccae4d4ec1fd0f5cf733fa89977f3d17da8c88 100644 (file)
@@ -1400,71 +1400,71 @@ struct vect_result {
 };
 
 struct vect_result std_vect_array[] = {
-       {std_vect_0, sizeof(std_vect_0), ISAL_INVALID_LOOKBACK},
+       {std_vect_0, sizeof(std_vect_0), ISAL_INVALID_BLOCK},
        {std_vect_1, sizeof(std_vect_1), ISAL_INVALID_BLOCK},
        {std_vect_2, sizeof(std_vect_2), ISAL_INVALID_BLOCK},
        {std_vect_3, sizeof(std_vect_3), ISAL_INVALID_BLOCK},
-       {std_vect_4, sizeof(std_vect_4), ISAL_INVALID_SYMBOL},
+       {std_vect_4, sizeof(std_vect_4), ISAL_INVALID_BLOCK},
        {std_vect_5, sizeof(std_vect_5), ISAL_INVALID_BLOCK},
-       {std_vect_6, sizeof(std_vect_6), ISAL_INVALID_LOOKBACK},
+       {std_vect_6, sizeof(std_vect_6), ISAL_INVALID_BLOCK},
        {std_vect_7, sizeof(std_vect_7), ISAL_INVALID_BLOCK},
        {std_vect_8, sizeof(std_vect_8), ISAL_INVALID_BLOCK},
        {std_vect_9, sizeof(std_vect_9), ISAL_INVALID_BLOCK},
        {std_vect_10, sizeof(std_vect_10), ISAL_INVALID_BLOCK},
-       {std_vect_11, sizeof(std_vect_11), ISAL_INVALID_LOOKBACK},
-       {std_vect_12, sizeof(std_vect_12), ISAL_DECOMP_OK},
-       {std_vect_13, sizeof(std_vect_13), ISAL_INVALID_LOOKBACK},
-       {std_vect_14, sizeof(std_vect_14), ISAL_INVALID_LOOKBACK},
+       {std_vect_11, sizeof(std_vect_11), ISAL_INVALID_BLOCK},
+       {std_vect_12, sizeof(std_vect_12), ISAL_INVALID_BLOCK},
+       {std_vect_13, sizeof(std_vect_13), ISAL_INVALID_BLOCK},
+       {std_vect_14, sizeof(std_vect_14), ISAL_INVALID_BLOCK},
        {std_vect_15, sizeof(std_vect_15), ISAL_INVALID_BLOCK},
        {std_vect_16, sizeof(std_vect_16), ISAL_INVALID_BLOCK},
-       {std_vect_17, sizeof(std_vect_17), ISAL_DECOMP_OK},
-       {std_vect_18, sizeof(std_vect_18), ISAL_INVALID_LOOKBACK},
-       {std_vect_19, sizeof(std_vect_19), ISAL_INVALID_SYMBOL},
+       {std_vect_17, sizeof(std_vect_17), ISAL_INVALID_BLOCK},
+       {std_vect_18, sizeof(std_vect_18), ISAL_INVALID_BLOCK},
+       {std_vect_19, sizeof(std_vect_19), ISAL_INVALID_BLOCK},
        {std_vect_20, sizeof(std_vect_20), ISAL_INVALID_BLOCK},
        {std_vect_21, sizeof(std_vect_21), ISAL_INVALID_BLOCK},
-       {std_vect_22, sizeof(std_vect_22), ISAL_INVALID_SYMBOL},
-       {std_vect_23, sizeof(std_vect_23), ISAL_INVALID_LOOKBACK},
-       {std_vect_24, sizeof(std_vect_24), ISAL_INVALID_SYMBOL},
-       {std_vect_25, sizeof(std_vect_25), ISAL_INVALID_LOOKBACK},
+       {std_vect_22, sizeof(std_vect_22), ISAL_INVALID_BLOCK},
+       {std_vect_23, sizeof(std_vect_23), ISAL_INVALID_BLOCK},
+       {std_vect_24, sizeof(std_vect_24), ISAL_INVALID_BLOCK},
+       {std_vect_25, sizeof(std_vect_25), ISAL_INVALID_BLOCK},
        {std_vect_26, sizeof(std_vect_26), ISAL_INVALID_BLOCK},
-       {std_vect_27, sizeof(std_vect_27), ISAL_INVALID_LOOKBACK},
-       {std_vect_28, sizeof(std_vect_28), ISAL_INVALID_LOOKBACK},
-       {std_vect_29, sizeof(std_vect_29), ISAL_INVALID_SYMBOL},
+       {std_vect_27, sizeof(std_vect_27), ISAL_INVALID_BLOCK},
+       {std_vect_28, sizeof(std_vect_28), ISAL_INVALID_BLOCK},
+       {std_vect_29, sizeof(std_vect_29), ISAL_INVALID_BLOCK},
        {std_vect_30, sizeof(std_vect_30), ISAL_INVALID_BLOCK},
        {std_vect_31, sizeof(std_vect_31), ISAL_INVALID_BLOCK},
-       {std_vect_32, sizeof(std_vect_32), ISAL_INVALID_SYMBOL},
+       {std_vect_32, sizeof(std_vect_32), ISAL_INVALID_BLOCK},
        {std_vect_33, sizeof(std_vect_33), ISAL_INVALID_BLOCK},
        {std_vect_34, sizeof(std_vect_34), ISAL_INVALID_BLOCK},
        {std_vect_35, sizeof(std_vect_35), ISAL_INVALID_BLOCK},
        {std_vect_36, sizeof(std_vect_36), ISAL_INVALID_BLOCK},
-       {std_vect_37, sizeof(std_vect_37), ISAL_INVALID_LOOKBACK},
+       {std_vect_37, sizeof(std_vect_37), ISAL_INVALID_BLOCK},
        {std_vect_38, sizeof(std_vect_38), ISAL_INVALID_BLOCK},
        {std_vect_39, sizeof(std_vect_39), ISAL_INVALID_BLOCK},
-       {std_vect_40, sizeof(std_vect_40), ISAL_INVALID_LOOKBACK},
-       {std_vect_41, sizeof(std_vect_41), ISAL_END_INPUT},
+       {std_vect_40, sizeof(std_vect_40), ISAL_INVALID_BLOCK},
+       {std_vect_41, sizeof(std_vect_41), ISAL_INVALID_BLOCK},
        {std_vect_42, sizeof(std_vect_42), ISAL_INVALID_BLOCK},
        {std_vect_43, sizeof(std_vect_43), ISAL_INVALID_BLOCK},
        {std_vect_44, sizeof(std_vect_44), ISAL_INVALID_BLOCK},
-       {std_vect_45, sizeof(std_vect_45), ISAL_INVALID_LOOKBACK},
+       {std_vect_45, sizeof(std_vect_45), ISAL_INVALID_BLOCK},
        {std_vect_46, sizeof(std_vect_46), ISAL_INVALID_BLOCK},
        {std_vect_47, sizeof(std_vect_47), ISAL_INVALID_BLOCK},
-       {std_vect_48, sizeof(std_vect_48), ISAL_INVALID_SYMBOL},
-       {std_vect_49, sizeof(std_vect_49), ISAL_DECOMP_OK},
+       {std_vect_48, sizeof(std_vect_48), ISAL_INVALID_BLOCK},
+       {std_vect_49, sizeof(std_vect_49), ISAL_INVALID_BLOCK},
        {std_vect_50, sizeof(std_vect_50), ISAL_INVALID_BLOCK},
        {std_vect_51, sizeof(std_vect_51), ISAL_INVALID_BLOCK},
        {std_vect_52, sizeof(std_vect_52), ISAL_INVALID_BLOCK},
        {std_vect_53, sizeof(std_vect_53), ISAL_INVALID_BLOCK},
        {std_vect_54, sizeof(std_vect_54), ISAL_INVALID_BLOCK},
-       {std_vect_55, sizeof(std_vect_55), ISAL_INVALID_SYMBOL},
+       {std_vect_55, sizeof(std_vect_55), ISAL_INVALID_BLOCK},
        {std_vect_56, sizeof(std_vect_56), ISAL_INVALID_BLOCK},
-       {std_vect_57, sizeof(std_vect_57), ISAL_INVALID_LOOKBACK},
-       {std_vect_58, sizeof(std_vect_58), ISAL_INVALID_LOOKBACK},
+       {std_vect_57, sizeof(std_vect_57), ISAL_INVALID_BLOCK},
+       {std_vect_58, sizeof(std_vect_58), ISAL_INVALID_BLOCK},
        {std_vect_59, sizeof(std_vect_59), ISAL_INVALID_BLOCK},
-       {std_vect_60, sizeof(std_vect_60), ISAL_END_INPUT},
-       {std_vect_61, sizeof(std_vect_61), ISAL_INVALID_SYMBOL},
+       {std_vect_60, sizeof(std_vect_60), ISAL_INVALID_BLOCK},
+       {std_vect_61, sizeof(std_vect_61), ISAL_INVALID_BLOCK},
        {std_vect_62, sizeof(std_vect_62), ISAL_END_INPUT},
-       {std_vect_63, sizeof(std_vect_63), ISAL_INVALID_SYMBOL},
-       {std_vect_64, sizeof(std_vect_64), ISAL_INVALID_SYMBOL},
+       {std_vect_63, sizeof(std_vect_63), ISAL_INVALID_BLOCK},
+       {std_vect_64, sizeof(std_vect_64), ISAL_INVALID_BLOCK},
        {std_vect_65, sizeof(std_vect_65), ISAL_INVALID_BLOCK},
        {std_vect_66, sizeof(std_vect_66), ISAL_INVALID_BLOCK},
        {std_vect_67, sizeof(std_vect_67), ISAL_END_INPUT},
@@ -1477,18 +1477,18 @@ struct vect_result std_vect_array[] = {
        {std_vect_74, sizeof(std_vect_74), ISAL_END_INPUT},
        {std_vect_75, sizeof(std_vect_75), ISAL_END_INPUT},
        {std_vect_76, sizeof(std_vect_76), ISAL_INVALID_BLOCK},
-       {std_vect_77, sizeof(std_vect_77), ISAL_END_INPUT},
+       {std_vect_77, sizeof(std_vect_77), ISAL_INVALID_BLOCK},
        {std_vect_78, sizeof(std_vect_78), ISAL_INVALID_BLOCK},
        {std_vect_79, sizeof(std_vect_79), ISAL_INVALID_BLOCK},
-       {std_vect_80, sizeof(std_vect_80), ISAL_END_INPUT},
-       {std_vect_81, sizeof(std_vect_81), ISAL_END_INPUT},
+       {std_vect_80, sizeof(std_vect_80), ISAL_INVALID_BLOCK},
+       {std_vect_81, sizeof(std_vect_81), ISAL_INVALID_BLOCK},
        {std_vect_82, sizeof(std_vect_82), ISAL_INVALID_BLOCK},
        {std_vect_83, sizeof(std_vect_83), ISAL_END_INPUT},
-       {std_vect_84, sizeof(std_vect_84), ISAL_END_INPUT},
-       {std_vect_85, sizeof(std_vect_85), ISAL_INVALID_SYMBOL},
-       {std_vect_86, sizeof(std_vect_86), ISAL_END_INPUT},
+       {std_vect_84, sizeof(std_vect_84), ISAL_INVALID_BLOCK},
+       {std_vect_85, sizeof(std_vect_85), ISAL_INVALID_BLOCK},
+       {std_vect_86, sizeof(std_vect_86), ISAL_INVALID_BLOCK},
        {std_vect_87, sizeof(std_vect_87), ISAL_INVALID_BLOCK},
-       {std_vect_88, sizeof(std_vect_88), ISAL_END_INPUT},
+       {std_vect_88, sizeof(std_vect_88), ISAL_INVALID_BLOCK},
        {std_vect_89, sizeof(std_vect_89), ISAL_END_INPUT},
        {std_vect_90, sizeof(std_vect_90), ISAL_END_INPUT},
        {std_vect_91, sizeof(std_vect_91), ISAL_INVALID_BLOCK},
@@ -1503,24 +1503,24 @@ struct vect_result std_vect_array[] = {
        {std_vect_100, sizeof(std_vect_100), ISAL_INVALID_BLOCK},
        {std_vect_101, sizeof(std_vect_101), ISAL_INVALID_BLOCK},
        {std_vect_102, sizeof(std_vect_102), ISAL_INVALID_BLOCK},
-       {std_vect_103, sizeof(std_vect_103), ISAL_END_INPUT},
+       {std_vect_103, sizeof(std_vect_103), ISAL_INVALID_BLOCK},
        {std_vect_104, sizeof(std_vect_104), ISAL_INVALID_BLOCK},
        {std_vect_105, sizeof(std_vect_105), ISAL_INVALID_BLOCK},
        {std_vect_106, sizeof(std_vect_106), ISAL_INVALID_BLOCK},
        {std_vect_107, sizeof(std_vect_107), ISAL_INVALID_BLOCK},
-       {std_vect_108, sizeof(std_vect_108), ISAL_END_INPUT},
+       {std_vect_108, sizeof(std_vect_108), ISAL_INVALID_BLOCK},
        {std_vect_109, sizeof(std_vect_109), ISAL_INVALID_BLOCK},
        {std_vect_110, sizeof(std_vect_110), ISAL_INVALID_BLOCK},
-       {std_vect_111, sizeof(std_vect_111), ISAL_END_INPUT},
+       {std_vect_111, sizeof(std_vect_111), ISAL_INVALID_BLOCK},
        {std_vect_112, sizeof(std_vect_112), ISAL_INVALID_BLOCK},
        {std_vect_113, sizeof(std_vect_113), ISAL_INVALID_BLOCK},
        {std_vect_114, sizeof(std_vect_114), ISAL_INVALID_LOOKBACK},
-       {std_vect_115, sizeof(std_vect_115), ISAL_END_INPUT},
+       {std_vect_115, sizeof(std_vect_115), ISAL_INVALID_BLOCK},
        {std_vect_116, sizeof(std_vect_116), ISAL_INVALID_BLOCK},
        {std_vect_117, sizeof(std_vect_117), ISAL_INVALID_BLOCK},
        {std_vect_118, sizeof(std_vect_118), ISAL_INVALID_BLOCK},
-       {std_vect_119, sizeof(std_vect_119), ISAL_END_INPUT},
-       {std_vect_120, sizeof(std_vect_120), ISAL_INVALID_SYMBOL},
+       {std_vect_119, sizeof(std_vect_119), ISAL_INVALID_BLOCK},
+       {std_vect_120, sizeof(std_vect_120), ISAL_INVALID_BLOCK},
        {std_vect_121, sizeof(std_vect_121), ISAL_INVALID_BLOCK},
        {std_vect_122, sizeof(std_vect_122), ISAL_INVALID_BLOCK},
        {std_vect_123, sizeof(std_vect_123), ISAL_INVALID_BLOCK},
@@ -1550,5 +1550,5 @@ struct vect_result std_vect_array[] = {
        {std_vect_147, sizeof(std_vect_147), ISAL_INVALID_BLOCK},
        {std_vect_148, sizeof(std_vect_148), ISAL_INVALID_BLOCK},
        {std_vect_149, sizeof(std_vect_149), ISAL_INVALID_BLOCK},
-       {std_vect_150, sizeof(std_vect_150), ISAL_INVALID_SYMBOL}
+       {std_vect_150, sizeof(std_vect_150), ISAL_INVALID_BLOCK}
 };
index a37abc0b74cefc2fc20ff9157957bd6bdf25ab90..deb6d232e3bd1e002495854e20c49b25d0648c6f 100644 (file)
 %define LAST_BYTES_COUNT       3 ;; Bytes to prevent reading out of array bounds
 %define LA_STATELESS   258     ;; No round up since no data is copied to a buffer
 
-%ifndef IGZIP_HASH_SIZE
-%assign IGZIP_HASH_SIZE  (8 * K)
-%endif
+%assign IGZIP_LVL0_HASH_SIZE  (8 * K)
+%assign IGZIP_HASH8K_HASH_SIZE  (8 * K)
+%assign IGZIP_HASH_HIST_HASH_SIZE IGZIP_HIST_SIZE
+%assign IGZIP_HASH_MAP_HASH_SIZE  IGZIP_HIST_SIZE
 
-%assign HASH_MASK  (IGZIP_HASH_SIZE - 1)
+%xdefine LVL0_HASH_MASK  (IGZIP_LVL0_HASH_SIZE - 1)
+%xdefine HASH8K_HASH_MASK  (IGZIP_HASH8K_HASH_SIZE - 1)
+%xdefine HASH_HIST_HASH_MASK  (IGZIP_HASH_HIST_HASH_SIZE - 1)
+%xdefine HASH_MAP_HASH_MASK  (IGZIP_HASH_MAP_HASH_SIZE - 1)
 
+%assign MIN_DEF_MATCH 3        ; Minimum length of a match in deflate
 %assign SHORTEST_MATCH  4
 
 %assign SLOP 8
 
+%define ICF_CODE_BYTES 4
 %define LIT_LEN_BIT_COUNT 10
 %define DIST_LIT_BIT_COUNT 9
 
+%define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1)
+%define LIT_DIST_MASK ((1 << DIST_LIT_BIT_COUNT) - 1)
+
 %define DIST_OFFSET    LIT_LEN_BIT_COUNT
 %define EXTRA_BITS_OFFSET      (DIST_OFFSET + DIST_LIT_BIT_COUNT)
 %define LIT (0x1E << DIST_OFFSET)
index 69e9e9d703f2939e8428174cc19395bdaab0a39c..afbb586ea2227b8bdabdd582a2365c1b00f8969f 100644 (file)
@@ -56,15 +56,6 @@ default rel
 %endif
 %endif
 
-%ifdef USE_BITBUFB
-%elifdef USE_BITBUF8
-%elifdef USE_BITBUF_ELSE
-%else
-; bit buffer types
-; BITBUFB: (b) Always write data
-%define USE_BITBUFB
-%endif
-
 ; (h) limit hash update
 %define LIMIT_HASH_UPDATE
 
index 75238e729f51e7df9889642a0a39c1595bd8eca7..40b18ab135201d5f4f7c329b8c38760254133d39 100644 (file)
@@ -1,3 +1,32 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 ; returns modified node_ptr
 ; uint32_t proc_heap(uint64_t *heap, uint32_t  heap_size);
 
index 8794d209bd1aba0ce1832b4cf5fe9b38bcdf6e0d..777bd0f09a81cf128ace793eeeb84c424c20839e 100644 (file)
@@ -29,8 +29,9 @@
 
 #include "igzip_lib.h"
 #include "huff_codes.h"
+#include "unaligned.h"
 
-void inline heapify(uint64_t * heap, uint64_t heap_size, uint64_t index)
+static inline void heapify(uint64_t * heap, uint64_t heap_size, uint64_t index)
 {
        uint64_t child = 2 * index, tmp;
        while (child <= heap_size) {
@@ -73,12 +74,12 @@ uint32_t build_huff_tree(struct heap_tree *heap_space, uint64_t heap_size, uint6
 
                heapify(heap, heap_size, 1);
 
-               *(uint16_t *) (&heap[node_ptr]) = h1;
-               *(uint16_t *) (&heap[node_ptr - 1]) = h2;
+               store_u16((uint8_t *) & heap[node_ptr], h1);
+               store_u16((uint8_t *) & heap[node_ptr - 1], h2);
                node_ptr -= 2;
 
        }
        h1 = heap[1];
-       *(uint16_t *) (&heap[node_ptr]) = h1;
+       store_u16((uint8_t *) & heap[node_ptr], h1);
        return node_ptr;
 }
index d6fc695d197dee7273f4f05607ca3c062544dc14..ebf81aa8c6775e15961c385353bae6d3070c18dc 100644 (file)
@@ -1,3 +1,32 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
 %include "reg_sizes.asm"
 
 %ifndef        RFC1951_LOOKUP
@@ -16,7 +45,7 @@ section .data
 ;;     uint16_t len_start[32];
 ;; };
 
-global rfc1951_lookup_table:data internal
+global rfc1951_lookup_table:ISAL_SYM_TYPE_DATA_INTERNAL
 rfc1951_lookup_table:
 len_to_code:
        db      0x00, 0x00, 0x00
diff --git a/ceph/src/isa-l/igzip/static_inflate.h b/ceph/src/isa-l/igzip/static_inflate.h
new file mode 100644 (file)
index 0000000..33542fe
--- /dev/null
@@ -0,0 +1,1346 @@
+#ifndef STATIC_HEADER_H
+#define STATIC_HEADER_H
+
+#include "igzip_lib.h"
+
+#define LONG_BITS_CHECK 12
+#define SHORT_BITS_CHECK 10
+#if (LONG_BITS_CHECK == ISAL_DECODE_LONG_BITS) && (SHORT_BITS_CHECK == ISAL_DECODE_SHORT_BITS)
+# define ISAL_STATIC_INFLATE_TABLE
+#else
+# warning "Incompatible compile time defines for optimized static inflate table."
+#endif
+
+struct inflate_huff_code_large static_lit_huff_code = {
+       .short_code_lookup = {
+               0x74000100, 0x84000050, 0x84000010, 0xc4000171,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa4000139, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000060,
+               0xa4000129, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000151, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000020,
+               0xa4000121, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000141, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000131, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000161, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000000,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013a, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012a, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb4000152, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000040,
+               0xa4000122, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb4000142, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000132, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb4000162, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000172,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013b, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x36000062,
+               0xa400012b, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb4000153, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x36000022,
+               0xa4000123, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb4000143, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000133, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb4000163, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x36000002,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa400013c, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012c, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000154, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x36000042,
+               0xa4000124, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000144, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000134, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000164, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000173,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa400013d, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000064,
+               0xa400012d, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000155, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000024,
+               0xa4000125, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000145, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000135, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000165, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000004,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013e, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012e, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb4000156, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000044,
+               0xa4000126, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb4000146, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000136, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb4000166, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000174,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013f, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x36000066,
+               0xa400012f, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb4000157, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x36000026,
+               0xa4000127, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb4000147, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000137, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb4000167, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x36000006,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa4000140, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa4000130, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000158, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x36000046,
+               0xa4000128, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000148, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000138, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000168, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000175,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa4000139, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000068,
+               0xa4000129, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000159, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000028,
+               0xa4000121, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000149, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000131, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000169, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000008,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013a, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012a, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb400015a, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000048,
+               0xa4000122, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb400014a, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000132, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb400016a, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000176,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013b, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x3600006a,
+               0xa400012b, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb400015b, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x3600002a,
+               0xa4000123, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb400014b, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000133, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb400016b, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x3600000a,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa400013c, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012c, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb400015c, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x3600004a,
+               0xa4000124, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb400014c, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000134, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb400016c, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000177,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa400013d, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x3600006c,
+               0xa400012d, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb400015d, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x3600002c,
+               0xa4000125, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb400014d, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000135, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb400016d, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x3600000c,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013e, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012e, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb400015e, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x3600004c,
+               0xa4000126, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb400014e, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000136, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb400016e, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000178,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013f, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x3600006e,
+               0xa400012f, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb400015f, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x3600002e,
+               0xa4000127, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb400014f, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000137, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb400016f, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x3600000e,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa4000140, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa4000130, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000160, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x3600004e,
+               0xa4000128, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000150, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000138, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000170, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000179,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa4000139, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000070,
+               0xa4000129, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000151, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000030,
+               0xa4000121, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000141, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000131, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000161, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000010,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013a, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012a, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb4000152, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000050,
+               0xa4000122, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb4000142, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000132, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb4000162, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017a,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013b, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x36000072,
+               0xa400012b, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb4000153, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x36000032,
+               0xa4000123, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb4000143, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000133, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb4000163, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x36000012,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa400013c, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012c, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000154, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x36000052,
+               0xa4000124, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000144, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000134, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000164, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017b,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa400013d, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000074,
+               0xa400012d, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000155, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000034,
+               0xa4000125, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000145, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000135, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000165, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000014,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013e, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012e, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb4000156, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000054,
+               0xa4000126, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb4000146, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000136, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb4000166, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017c,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013f, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x36000076,
+               0xa400012f, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb4000157, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x36000036,
+               0xa4000127, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb4000147, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000137, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb4000167, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x36000016,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa4000140, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa4000130, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000158, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x36000056,
+               0xa4000128, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000148, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000138, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000168, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017d,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa4000139, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x36000078,
+               0xa4000129, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb4000159, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x36000038,
+               0xa4000121, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb4000149, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000131, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb4000169, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x36000018,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013a, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012a, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb400015a, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x36000058,
+               0xa4000122, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb400014a, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000132, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb400016a, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017e,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013b, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x3600007a,
+               0xa400012b, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb400015b, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x3600003a,
+               0xa4000123, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb400014b, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000133, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb400016b, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x3600001a,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa400013c, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012c, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb400015c, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x3600005a,
+               0xa4000124, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb400014c, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000134, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb400016c, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff,
+               0x74000100, 0x84000050, 0x84000010, 0xc400017f,
+               0x9400011d, 0x84000070, 0x84000030, 0x940000c0,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a0,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e0,
+               0x74000104, 0x84000058, 0x84000018, 0x94000090,
+               0xa400013d, 0x84000078, 0x84000038, 0x940000d0,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b0,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f0,
+               0x74000102, 0x84000054, 0x84000014, 0x3600007c,
+               0xa400012d, 0x84000074, 0x84000034, 0x940000c8,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a8,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e8,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000098,
+               0xb400015d, 0x8400007c, 0x8400003c, 0x940000d8,
+               0x94000115, 0x8400006c, 0x8400002c, 0x940000b8,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f8,
+               0x74000101, 0x84000052, 0x84000012, 0x3600003c,
+               0xa4000125, 0x84000072, 0x84000032, 0x940000c4,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a4,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e4,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000094,
+               0xb400014d, 0x8400007a, 0x8400003a, 0x940000d4,
+               0x94000111, 0x8400006a, 0x8400002a, 0x940000b4,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f4,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000135, 0x84000076, 0x84000036, 0x940000cc,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ac,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ec,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009c,
+               0xb400016d, 0x8400007e, 0x8400003e, 0x940000dc,
+               0x94000119, 0x8400006e, 0x8400002e, 0x940000bc,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fc,
+               0x74000100, 0x84000051, 0x84000011, 0x3600001c,
+               0x9400011e, 0x84000071, 0x84000031, 0x940000c2,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a2,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e2,
+               0x74000104, 0x84000059, 0x84000019, 0x94000092,
+               0xa400013e, 0x84000079, 0x84000039, 0x940000d2,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b2,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f2,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa400012e, 0x84000075, 0x84000035, 0x940000ca,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000aa,
+               0x84000005, 0x84000085, 0x84000045, 0x940000ea,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009a,
+               0xb400015e, 0x8400007d, 0x8400003d, 0x940000da,
+               0x94000116, 0x8400006d, 0x8400002d, 0x940000ba,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fa,
+               0x74000101, 0x84000053, 0x84000013, 0x3600005c,
+               0xa4000126, 0x84000073, 0x84000033, 0x940000c6,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a6,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e6,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000096,
+               0xb400014e, 0x8400007b, 0x8400003b, 0x940000d6,
+               0x94000112, 0x8400006b, 0x8400002b, 0x940000b6,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f6,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000136, 0x84000077, 0x84000037, 0x940000ce,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000ae,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ee,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009e,
+               0xb400016e, 0x8400007f, 0x8400003f, 0x940000de,
+               0x9400011a, 0x8400006f, 0x8400002f, 0x940000be,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000fe,
+               0x74000100, 0x84000050, 0x84000010, 0xc4000180,
+               0x9400011f, 0x84000070, 0x84000030, 0x940000c1,
+               0x74000108, 0x84000060, 0x84000020, 0x940000a1,
+               0x84000000, 0x84000080, 0x84000040, 0x940000e1,
+               0x74000104, 0x84000058, 0x84000018, 0x94000091,
+               0xa400013f, 0x84000078, 0x84000038, 0x940000d1,
+               0x8400010f, 0x84000068, 0x84000028, 0x940000b1,
+               0x84000008, 0x84000088, 0x84000048, 0x940000f1,
+               0x74000102, 0x84000054, 0x84000014, 0x3600007e,
+               0xa400012f, 0x84000074, 0x84000034, 0x940000c9,
+               0x8400010b, 0x84000064, 0x84000024, 0x940000a9,
+               0x84000004, 0x84000084, 0x84000044, 0x940000e9,
+               0x74000106, 0x8400005c, 0x8400001c, 0x94000099,
+               0xb400015f, 0x8400007c, 0x8400003c, 0x940000d9,
+               0x94000117, 0x8400006c, 0x8400002c, 0x940000b9,
+               0x8400000c, 0x8400008c, 0x8400004c, 0x940000f9,
+               0x74000101, 0x84000052, 0x84000012, 0x3600003e,
+               0xa4000127, 0x84000072, 0x84000032, 0x940000c5,
+               0x84000109, 0x84000062, 0x84000022, 0x940000a5,
+               0x84000002, 0x84000082, 0x84000042, 0x940000e5,
+               0x74000105, 0x8400005a, 0x8400001a, 0x94000095,
+               0xb400014f, 0x8400007a, 0x8400003a, 0x940000d5,
+               0x94000113, 0x8400006a, 0x8400002a, 0x940000b5,
+               0x8400000a, 0x8400008a, 0x8400004a, 0x940000f5,
+               0x74000103, 0x84000056, 0x84000016, 0x00000000,
+               0xa4000137, 0x84000076, 0x84000036, 0x940000cd,
+               0x8400010d, 0x84000066, 0x84000026, 0x940000ad,
+               0x84000006, 0x84000086, 0x84000046, 0x940000ed,
+               0x74000107, 0x8400005e, 0x8400001e, 0x9400009d,
+               0xb400016f, 0x8400007e, 0x8400003e, 0x940000dd,
+               0x9400011b, 0x8400006e, 0x8400002e, 0x940000bd,
+               0x8400000e, 0x8400008e, 0x8400004e, 0x940000fd,
+               0x74000100, 0x84000051, 0x84000011, 0x3600001e,
+               0x94000120, 0x84000071, 0x84000031, 0x940000c3,
+               0x74000108, 0x84000061, 0x84000021, 0x940000a3,
+               0x84000001, 0x84000081, 0x84000041, 0x940000e3,
+               0x74000104, 0x84000059, 0x84000019, 0x94000093,
+               0xa4000140, 0x84000079, 0x84000039, 0x940000d3,
+               0x84000110, 0x84000069, 0x84000029, 0x940000b3,
+               0x84000009, 0x84000089, 0x84000049, 0x940000f3,
+               0x74000102, 0x84000055, 0x84000015, 0x84000200,
+               0xa4000130, 0x84000075, 0x84000035, 0x940000cb,
+               0x8400010c, 0x84000065, 0x84000025, 0x940000ab,
+               0x84000005, 0x84000085, 0x84000045, 0x940000eb,
+               0x74000106, 0x8400005d, 0x8400001d, 0x9400009b,
+               0xb4000160, 0x8400007d, 0x8400003d, 0x940000db,
+               0x94000118, 0x8400006d, 0x8400002d, 0x940000bb,
+               0x8400000d, 0x8400008d, 0x8400004d, 0x940000fb,
+               0x74000101, 0x84000053, 0x84000013, 0x3600005e,
+               0xa4000128, 0x84000073, 0x84000033, 0x940000c7,
+               0x8400010a, 0x84000063, 0x84000023, 0x940000a7,
+               0x84000003, 0x84000083, 0x84000043, 0x940000e7,
+               0x74000105, 0x8400005b, 0x8400001b, 0x94000097,
+               0xb4000150, 0x8400007b, 0x8400003b, 0x940000d7,
+               0x94000114, 0x8400006b, 0x8400002b, 0x940000b7,
+               0x8400000b, 0x8400008b, 0x8400004b, 0x940000f7,
+               0x74000103, 0x84000057, 0x84000017, 0x00000000,
+               0xa4000138, 0x84000077, 0x84000037, 0x940000cf,
+               0x8400010e, 0x84000067, 0x84000027, 0x940000af,
+               0x84000007, 0x84000087, 0x84000047, 0x940000ef,
+               0x74000107, 0x8400005f, 0x8400001f, 0x9400009f,
+               0xb4000170, 0x8400007f, 0x8400003f, 0x940000df,
+               0x9400011c, 0x8400006f, 0x8400002f, 0x940000bf,
+               0x8400000f, 0x8400008f, 0x8400004f, 0x940000ff  },
+
+       .long_code_lookup = {
+               0x3581, 0x3591, 0x3582, 0x3592, 0x3583, 0x3593, 0x3584, 0x3594,
+               0x3585, 0x3595, 0x3586, 0x3596, 0x3587, 0x3597, 0x3588, 0x3598,
+               0x3589, 0x3599, 0x358a, 0x359a, 0x358b, 0x359b, 0x358c, 0x359c,
+               0x358d, 0x359d, 0x358e, 0x359e, 0x358f, 0x359f, 0x3590, 0x35a0,
+               0x35a1, 0x35b1, 0x35a2, 0x35b2, 0x35a3, 0x35b3, 0x35a4, 0x35b4,
+               0x35a5, 0x35b5, 0x35a6, 0x35b6, 0x35a7, 0x35b7, 0x35a8, 0x35b8,
+               0x35a9, 0x35b9, 0x35aa, 0x35ba, 0x35ab, 0x35bb, 0x35ac, 0x35bc,
+               0x35ad, 0x35bd, 0x35ae, 0x35be, 0x35af, 0x35bf, 0x35b0, 0x35c0,
+               0x35c1, 0x35d1, 0x35c2, 0x35d2, 0x35c3, 0x35d3, 0x35c4, 0x35d4,
+               0x35c5, 0x35d5, 0x35c6, 0x35d6, 0x35c7, 0x35d7, 0x35c8, 0x35d8,
+               0x35c9, 0x35d9, 0x35ca, 0x35da, 0x35cb, 0x35db, 0x35cc, 0x35dc,
+               0x35cd, 0x35dd, 0x35ce, 0x35de, 0x35cf, 0x35df, 0x35d0, 0x35e0,
+               0x35e1, 0x35f1, 0x35e2, 0x35f2, 0x35e3, 0x35f3, 0x35e4, 0x35f4,
+               0x35e5, 0x35f5, 0x35e6, 0x35f6, 0x35e7, 0x35f7, 0x35e8, 0x35f8,
+               0x35e9, 0x35f9, 0x35ea, 0x35fa, 0x35eb, 0x35fb, 0x35ec, 0x35fc,
+               0x35ed, 0x35fd, 0x35ee, 0x35fe, 0x35ef, 0x35ff, 0x35f0, 0x3600,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000  }
+};
+
+struct inflate_huff_code_small static_dist_huff_code = {
+       .short_code_lookup = {
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005,
+               0x2800, 0x28f0, 0x2868, 0x2978, 0x2824, 0x2934, 0x28ac, 0x29bc,
+               0x2802, 0x2912, 0x288a, 0x299a, 0x2846, 0x2956, 0x28ce, 0x0005,
+               0x2801, 0x28f1, 0x2869, 0x2979, 0x2825, 0x2935, 0x28ad, 0x29bd,
+               0x2803, 0x2913, 0x288b, 0x299b, 0x2847, 0x2957, 0x28cf, 0x0005  },
+
+       .long_code_lookup = {
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000  }
+};
+
+#endif
index 500ee7fd88e1d924c28d92d174365070c2911ea1..e548287851d73367bcf4df6d718b3bab82ce2d69 100644 (file)
@@ -207,6 +207,97 @@ ssc:
        ret
 %endm
 
+%macro MOVDQU  2
+%define        %%dest  %1
+%define        %%src   %2
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vmovdqu %%dest, %%src
+%else
+       movdqu  %%dest, %%src
+%endif
+%endm
+
+%macro MOVDQA  2
+%define        %%dest  %1
+%define        %%src   %2
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vmovdqa %%dest, %%src
+%else
+       movdqa  %%dest, %%src
+%endif
+%endm
+
+%macro MOVD    2
+%define        %%dest  %1
+%define        %%src   %2
+%if (ARCH == 02 || ARCH == 03 || ARCH == 04)
+       vmovd   %%dest, %%src
+%else
+       movd    %%dest, %%src
+%endif
+%endm
+
+%macro MOVQ    2
+%define        %%dest  %1
+%define        %%src   %2
+%if (ARCH == 02 || ARCH == 03 || ARCH == 04)
+       vmovq   %%dest, %%src
+%else
+       movq    %%dest, %%src
+%endif
+%endm
+
+;; Move register if the src and dest are not equal
+%macro MOVNIDN 2
+%define dest %1
+%define src %2
+%ifnidn dest, src
+       mov     dest, src
+%endif
+%endm
+
+%macro MOVDQANIDN 2
+%define dest %1
+%define src %2
+%ifnidn dest, src
+       MOVDQA  dest, src
+%endif
+%endm
+
+%macro PSHUFD  3
+%define        %%dest  %1
+%define %%src1 %2
+%define        %%imm8  %3
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vpshufd %%dest, %%src1, %%imm8
+%else
+       pshufd  %%dest, %%src1, %%imm8
+%endif
+%endm
+
+%macro PSHUFB  3
+%define        %%dest  %1
+%define %%src1 %2
+%define        %%shuf  %3
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vpshufb %%dest, %%src1, %%shuf
+%else
+       MOVDQANIDN %%dest, %%src1
+       pshufb  %%dest, %%shuf
+%endif
+%endm
+
+%macro PBROADCASTD 2
+%define %%dest %1
+%define %%src %2
+%if (ARCH == 04)
+       vpbroadcastd %%dest, %%src
+%else
+       MOVD %%dest, %%src
+       PSHUFD %%dest, %%dest, 0
+%endif
+%endm
+
 ;; Implement BZHI instruction on older architectures
 ;; Clobbers rcx, unless rcx is %%index
 %macro BZHI    4
@@ -218,16 +309,12 @@ ssc:
 %ifdef USE_HSWNI
        bzhi    %%dest, %%src, %%index
 %else
-%ifnidn        %%index, rcx
-       mov     rcx, %%index
-%endif
+       MOVNIDN rcx, %%index
        mov     %%tmp1, 1
        shl     %%tmp1, cl
        sub     %%tmp1, 1
 
-%ifnidn        %%src, %%dest
-       mov     %%dest, %%src
-%endif
+       MOVNIDN %%dest, %%src
 
        and     %%dest, %%tmp1
 %endif
@@ -243,12 +330,8 @@ ssc:
 %ifdef USE_HSWNI
        shrx    %%dest, %%src, %%index
 %else
-%ifnidn        %%src, %%dest
-       mov     %%dest, %%src
-%endif
-%ifnidn        %%index, rcx
-       mov     rcx, %%index
-%endif
+       MOVNIDN rcx, %%index
+       MOVNIDN %%dest, %%src
        shr     %%dest, cl
 %endif
 %endm
@@ -263,46 +346,12 @@ ssc:
 %ifdef USE_HSWNI
        shlx    %%dest, %%src, %%index
 %else
-%ifnidn        %%src, %%dest
-       mov     %%dest, %%src
-%endif
-%ifnidn        %%index, rcx
-       mov     rcx, %%index
-%endif
+       MOVNIDN %%dest, %%src
+       MOVNIDN rcx, %%index
        shl     %%dest, cl
 %endif
 %endm
 
-%macro MOVDQU  2
-%define        %%dest  %1
-%define        %%src   %2
-%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
-       vmovdqu %%dest, %%src
-%else
-       movdqu  %%dest, %%src
-%endif
-%endm
-
-%macro MOVD    2
-%define        %%dest  %1
-%define        %%src   %2
-%if (ARCH == 02 || ARCH == 03 || ARCH == 04)
-       vmovd   %%dest, %%src
-%else
-       movd    %%dest, %%src
-%endif
-%endm
-
-%macro MOVQ    2
-%define        %%dest  %1
-%define        %%src   %2
-%if (ARCH == 02 || ARCH == 03 || ARCH == 04)
-       vmovq   %%dest, %%src
-%else
-       movq    %%dest, %%src
-%endif
-%endm
-
 %macro PINSRD  3
 %define        %%dest  %1
 %define        %%src   %2
@@ -335,6 +384,18 @@ ssc:
 %endif
 %endm
 
+%macro PSLLD   3
+%define        %%dest  %1
+%define %%src  %2
+%define        %%offset        %3
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vpslld  %%dest, %%src, %%offset
+%else
+       MOVDQANIDN %%dest, %%src
+       pslld   %%dest, %%offset
+%endif
+%endm
+
 %macro PAND    3
 %define        %%dest  %1
 %define        %%src1  %2
@@ -342,13 +403,47 @@ ssc:
 %if (ARCH == 02 || ARCH == 03 || ARCH == 04)
        vpand   %%dest, %%src1, %%src2
 %else
-%ifnidn        %%dest, %%src1
-       movdqa  %%dest, %%src1
-%endif
+       MOVDQANIDN %%dest, %%src1
        pand    %%dest, %%src2
 %endif
 %endm
 
+%macro POR     3
+%define        %%dest  %1
+%define        %%src1  %2
+%define        %%src2  %3
+%if (ARCH == 02 || ARCH == 03 || ARCH == 04)
+       vpor    %%dest, %%src1, %%src2
+%else
+       MOVDQANIDN %%dest, %%src1
+       por     %%dest, %%src2
+%endif
+%endm
+
+%macro PXOR    3
+%define        %%dest  %1
+%define %%src1 %2
+%define        %%src2  %3
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vpxor   %%dest, %%src1, %%src2
+%else
+       MOVDQANIDN %%dest, %%src1
+       pxor    %%dest, %%src2
+%endif
+%endm
+
+%macro PADDD 3
+%define %%dest %1
+%define %%src1 %2
+%define %%src2 %3
+%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
+       vpaddd  %%dest, %%src1, %%src2
+%else
+       MOVDQANIDN %%dest, %%src1
+       paddd   %%dest, %%src2
+%endif
+%endm
+
 %macro PCMPEQB 3
 %define        %%dest  %1
 %define        %%src1  %2
@@ -356,9 +451,7 @@ ssc:
 %if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
        vpcmpeqb        %%dest, %%src1, %%src2
 %else
-%ifnidn        %%dest, %%src1
-       movdqa  %%dest, %%src1
-%endif
+       MOVDQANIDN %%dest, %%src1
        pcmpeqb %%dest, %%src2
 %endif
 %endm
@@ -373,17 +466,4 @@ ssc:
 %endif
 %endm
 
-%macro PXOR    3
-%define        %%dest  %1
-%define %%src1 %2
-%define        %%src2  %3
-%if ((ARCH == 02) || (ARCH == 03) || (ARCH == 04))
-       vpxor   %%dest, %%src1, %%src2
-%else
-%ifnidn        %%dest, %%src1
-       movdqa  %%dest, %%src1
-%endif
-       pxor    %%dest, %%src2
-%endif
-%endm
 %endif         ;; ifndef STDMAC_ASM
diff --git a/ceph/src/isa-l/include/aarch64_multibinary.h b/ceph/src/isa-l/include/aarch64_multibinary.h
new file mode 100644 (file)
index 0000000..6db05d7
--- /dev/null
@@ -0,0 +1,221 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#ifndef __AARCH64_MULTIBINARY_H__
+#define __AARCH64_MULTIBINARY_H__
+#ifndef __aarch64__
+#error "This file is for aarch64 only"
+#endif
+#include <asm/hwcap.h>
+#ifdef __ASSEMBLY__
+/**
+ * # mbin_interface : the wrapper layer for isal-l api
+ *
+ * ## references:
+ * * https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=sysdeps/aarch64/dl-trampoline.S
+ * * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf
+ * * https://static.docs.arm.com/ihi0057/b/IHI0057B_aadwarf64.pdf?_ga=2.80574487.1870739014.1564969896-1634778941.1548729310
+ *
+ * ## Usage:
+ *     1. Define dispather function
+ *     2. name must be \name\()_dispatcher
+ *     3. Prototype should be *"void * \name\()_dispatcher"*
+ *     4. The dispather should return the right function pointer , revision and a string information .
+ **/
+.macro mbin_interface name:req
+       .extern \name\()_dispatcher
+       .section        .data
+       .balign 8
+       .global \name\()_dispatcher_info
+       .type   \name\()_dispatcher_info,%object
+
+       \name\()_dispatcher_info:
+               .quad   \name\()_mbinit         //func_entry
+
+       .size   \name\()_dispatcher_info,. - \name\()_dispatcher_info
+
+       .balign 8
+       .text
+       \name\()_mbinit:
+               //save lp fp, sub sp
+               .cfi_startproc
+               stp     x29, x30, [sp, -224]!
+
+               //add cfi directive to avoid GDB bt cmds error
+               //set cfi(Call Frame Information)
+               .cfi_def_cfa_offset 224
+               .cfi_offset         29, -224
+               .cfi_offset         30, -216
+
+               //save parameter/result/indirect result registers
+               stp     x8,  x9,  [sp,   16]
+               .cfi_offset         8, -208
+               .cfi_offset         9, -200
+               stp     x0,  x1,  [sp,   32]
+               .cfi_offset         0, -192
+               .cfi_offset         1, -184
+               stp     x2,  x3,  [sp,   48]
+               .cfi_offset         2, -176
+               .cfi_offset         3, -168
+               stp     x4,  x5,  [sp,   64]
+               .cfi_offset         4, -160
+               .cfi_offset         5, -152
+               stp     x6,  x7,  [sp,   80]
+               .cfi_offset         6, -144
+               .cfi_offset         7, -136
+               stp     q0,  q1,  [sp,   96]
+               .cfi_offset        64, -128
+               .cfi_offset        65, -112
+               stp     q2,  q3,  [sp,  128]
+               .cfi_offset        66,  -96
+               .cfi_offset        67,  -80
+               stp     q4,  q5,  [sp,  160]
+               .cfi_offset        68,  -64
+               .cfi_offset        69,  -48
+               stp     q6,  q7,  [sp,  192]
+               .cfi_offset        70,  -32
+               .cfi_offset        71,  -16
+
+               /**
+                * The dispatcher functions have the following prototype:
+                *      void * function_dispatcher(void)
+                * As the dispatcher is returning a struct, by the AAPCS,
+                */
+
+
+               bl \name\()_dispatcher
+               //restore temp/indirect result registers
+               ldp     x8,  x9,  [sp,    16]
+               .cfi_restore 8
+               .cfi_restore 9
+
+               //      save function entry
+               str     x0,  [x9]
+
+               //restore parameter/result registers
+               ldp     x0,  x1,  [sp,    32]
+               .cfi_restore 0
+               .cfi_restore 1
+               ldp     x2,  x3,  [sp,    48]
+               .cfi_restore 2
+               .cfi_restore 3
+               ldp     x4,  x5,  [sp,    64]
+               .cfi_restore 4
+               .cfi_restore 5
+               ldp     x6,  x7,  [sp,    80]
+               .cfi_restore 6
+               .cfi_restore 7
+               ldp     q0,  q1,  [sp,    96]
+               .cfi_restore 64
+               .cfi_restore 65
+               ldp     q2,  q3,  [sp,   128]
+               .cfi_restore 66
+               .cfi_restore 67
+               ldp     q4,  q5,  [sp,   160]
+               .cfi_restore 68
+               .cfi_restore 69
+               ldp     q6,  q7,  [sp,   192]
+               .cfi_restore 70
+               .cfi_restore 71
+               //save lp fp and sp
+               ldp     x29, x30, [sp], 224
+               //restore cfi setting
+               .cfi_restore 30
+               .cfi_restore 29
+               .cfi_def_cfa_offset 0
+               .cfi_endproc
+
+       .global \name
+       .type \name,%function
+       .align  2
+       \name\():
+               adrp    x9, :got:\name\()_dispatcher_info
+               ldr     x9, [x9, #:got_lo12:\name\()_dispatcher_info]
+               ldr     x10,[x9]
+               br      x10
+       .size \name,. - \name
+
+.endm
+
+/**
+ * mbin_interface_base is used for the interfaces which have only
+ * noarch implementation
+ */
+.macro mbin_interface_base name:req, base:req
+       .extern \base
+       .section        .data
+       .balign 8
+       .global \name\()_dispatcher_info
+       .type   \name\()_dispatcher_info,%object
+
+       \name\()_dispatcher_info:
+               .quad   \base         //func_entry
+       .size   \name\()_dispatcher_info,. - \name\()_dispatcher_info
+
+       .balign 8
+       .text
+       .global \name
+       .type \name,%function
+       .align  2
+       \name\():
+               adrp    x9, :got:\name\()_dispatcher_info
+               ldr     x9, [x9, #:got_lo12:\name\()_dispatcher_info]
+               ldr     x10,[x9]
+               br      x10
+       .size \name,. - \name
+
+.endm
+
+#else /* __ASSEMBLY__ */
+#include <sys/auxv.h>
+
+
+
+#define DEFINE_INTERFACE_DISPATCHER(name)                               \
+       void * name##_dispatcher(void)
+
+#define PROVIDER_BASIC(name)                                            \
+       PROVIDER_INFO(name##_base)
+
+#define DO_DIGNOSTIC(x)        _Pragma GCC diagnostic ignored "-W"#x
+#define DO_PRAGMA(x) _Pragma (#x)
+#define DIGNOSTIC_IGNORE(x) DO_PRAGMA(GCC diagnostic ignored #x)
+#define DIGNOSTIC_PUSH()       DO_PRAGMA(GCC diagnostic push)
+#define DIGNOSTIC_POP()                DO_PRAGMA(GCC diagnostic pop)
+
+
+#define PROVIDER_INFO(_func_entry)                                     \
+       ({      DIGNOSTIC_PUSH()                                        \
+               DIGNOSTIC_IGNORE(-Wnested-externs)                      \
+               extern void  _func_entry(void);                         \
+               DIGNOSTIC_POP()                                         \
+               _func_entry;                                            \
+       })
+
+#endif /* __ASSEMBLY__ */
+#endif
index 5d6b0495e45e6073122b025185d5224186ad87e3..07149608348e124df57384c33d7a826a0a8e24ad 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -61,11 +61,37 @@ uint16_t crc16_t10dif(
        );
 
 
+/**
+ * @brief Generate CRC and copy T10 standard, runs appropriate version.
+ *
+ * Stitched CRC + copy function.
+ *
+ * @returns 16 bit CRC
+ */
+uint16_t crc16_t10dif_copy(
+       uint16_t init_crc,  //!< initial CRC value, 16 bits
+       uint8_t *dst,       //!< buffer destination for copy
+       uint8_t *src,       //!< buffer source to crc + copy
+       uint64_t len        //!< buffer length in bytes (64-bit data)
+       );
+
+
 /**
  * @brief Generate CRC from the IEEE standard, runs appropriate version.
  *
  * This function determines what instruction sets are enabled and
  * selects the appropriate version at runtime.
+ * Note: CRC32 IEEE standard is widely used in HDLC, Ethernet, Gzip and
+ * many others. Its polynomial is 0x04C11DB7 in normal and 0xEDB88320
+ * in reflection (or reverse). In ISA-L CRC, function crc32_ieee is
+ * actually designed for normal CRC32 IEEE version. And function
+ * crc32_gzip_refl is actually designed for reflected CRC32 IEEE.
+ * These two versions of CRC32 IEEE are not compatible with each other.
+ * Users who want to replace their not optimized crc32 ieee with ISA-L's
+ * crc32 function should be careful of that.
+ * Since many applications use CRC32 IEEE reflected version, Please have
+ * a check whether crc32_gzip_refl is right one for you instead of
+ * crc32_ieee.
  *
  * @returns 32 bit CRC
  */
@@ -76,6 +102,34 @@ uint32_t crc32_ieee(
        uint64_t len              //!< buffer length in bytes (64-bit data)
        );
 
+/**
+ * @brief Generate the customized CRC
+ * based on RFC 1952 CRC (http://www.ietf.org/rfc/rfc1952.txt) standard,
+ * runs appropriate version.
+ *
+ * This function determines what instruction sets are enabled and
+ * selects the appropriate version at runtime.
+ *
+ * Note: CRC32 IEEE standard is widely used in HDLC, Ethernet, Gzip and
+ * many others. Its polynomial is 0x04C11DB7 in normal and 0xEDB88320
+ * in reflection (or reverse). In ISA-L CRC, function crc32_ieee is
+ * actually designed for normal CRC32 IEEE version. And function
+ * crc32_gzip_refl is actually designed for reflected CRC32 IEEE.
+ * These two versions of CRC32 IEEE are not compatible with each other.
+ * Users who want to replace their not optimized crc32 ieee with ISA-L's
+ * crc32 function should be careful of that.
+ * Since many applications use CRC32 IEEE reflected version, Please have
+ * a check whether crc32_gzip_refl is right one for you instead of
+ * crc32_ieee.
+ *
+ * @returns 32 bit CRC
+ */
+uint32_t crc32_gzip_refl(
+       uint32_t init_crc,          //!< initial CRC value, 32 bits
+       const unsigned char *buf, //!< buffer to calculate CRC on
+       uint64_t len                //!< buffer length in bytes (64-bit data)
+       );
+
 
 /**
  * @brief ISCSI CRC function, runs appropriate version.
@@ -116,6 +170,18 @@ uint16_t crc16_t10dif_base(
        );
 
 
+/**
+ * @brief Generate CRC and copy T10 standard, runs baseline version.
+ * @returns 16 bit CRC
+ */
+uint16_t crc16_t10dif_copy_base(
+       uint16_t init_crc,  //!< initial CRC value, 16 bits
+       uint8_t *dst,       //!< buffer destination for copy
+       uint8_t *src,       //!< buffer source to crc + copy
+       uint64_t len        //!< buffer length in bytes (64-bit data)
+       );
+
+
 /**
  * @brief Generate CRC from the IEEE standard, runs baseline version
  * @returns 32 bit CRC
@@ -126,6 +192,18 @@ uint32_t crc32_ieee_base(
        uint64_t len    //!< buffer length in bytes (64-bit data)
        );
 
+/**
+ * @brief Generate the customized CRC
+ * based on RFC 1952 CRC (http://www.ietf.org/rfc/rfc1952.txt) standard,
+ * runs baseline version
+ * @returns 32 bit CRC
+ */
+uint32_t crc32_gzip_refl_base(
+       uint32_t seed,  //!< initial CRC value, 32 bits
+       uint8_t *buf,   //!< buffer to calculate CRC on
+       uint64_t len    //!< buffer length in bytes (64-bit data)
+       );
+
 
 #ifdef __cplusplus
 }
index 8d7d81f9b5ebbe3e00ec37f90e507d9ad9cdf70e..d0e02748c51e085d8bbf1ffda95215dd9069b53f 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2016 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 570944c3792787c883e4a7d824f99e4fcb0950ef..2f9a257e51a5eb627df1a8c07581d203e9e75e5b 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -40,7 +40,7 @@
  *  dot product of the symbols (bytes in GF(2^8)) across a set of buffers and a
  *  set of coefficients.  Values for the coefficients are determined by the type
  *  of erasure code.  Using a general dot product means that any sequence of
- *  coefficients may be used including erasure codes based on random 
+ *  coefficients may be used including erasure codes based on random
  *  coefficients.
  *  Multiple versions of dot product are supplied to calculate 1-6 output
  *  vectors in one pass.
@@ -80,10 +80,10 @@ void ec_init_tables(int k, int rows, unsigned char* a, unsigned char* gftbls);
  * encoded data as specified by a matrix of GF(2^8) coefficients. When given a
  * suitable set of coefficients, this function will perform the fast generation
  * or decoding of Reed-Solomon type erasure codes.
- * 
+ *
  * This function determines what instruction sets are enabled and
  * selects the appropriate version at runtime.
- * 
+ *
  * @param len    Length of each block of data (vector) of source or dest data.
  * @param k      The number of vector sources or rows in the generator matrix
  *              for coding.
@@ -98,33 +98,6 @@ void ec_init_tables(int k, int rows, unsigned char* a, unsigned char* gftbls);
 void ec_encode_data(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
                    unsigned char **coding);
 
-/**
- * @brief Generate or decode erasure codes on blocks of data.
- *
- * Arch specific version of ec_encode_data() with same parameters.
- * @requires SSE4.1
- */
-void ec_encode_data_sse(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
-                       unsigned char **coding);
-
-/**
- * @brief Generate or decode erasure codes on blocks of data.
- *
- * Arch specific version of ec_encode_data() with same parameters.
- * @requires AVX
- */
-void ec_encode_data_avx(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
-                       unsigned char **coding);
-
-/**
- * @brief Generate or decode erasure codes on blocks of data.
- *
- * Arch specific version of ec_encode_data() with same parameters.
- * @requires AVX2
- */
-void ec_encode_data_avx2(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
-                        unsigned char **coding);
-
 /**
  * @brief Generate or decode erasure codes on blocks of data, runs baseline version.
  *
@@ -140,10 +113,10 @@ void ec_encode_data_base(int len, int srcs, int dests, unsigned char *v, unsigne
  * specified by a matrix of GF(2^8) coefficients. When given a suitable set of
  * coefficients, this function will perform the fast generation or decoding of
  * Reed-Solomon type erasure codes from one input source at a time.
- * 
+ *
  * This function determines what instruction sets are enabled and selects the
  * appropriate version at runtime.
- * 
+ *
  * @param len    Length of each block of data (vector) of source or dest data.
  * @param k      The number of vector sources or rows in the generator matrix
  *              for coding.
@@ -158,6 +131,127 @@ void ec_encode_data_base(int len, int srcs, int dests, unsigned char *v, unsigne
 void ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *g_tbls,
                           unsigned char *data, unsigned char **coding);
 
+/**
+ * @brief Generate update for encode or decode of erasure codes from single source.
+ *
+ * Baseline version of ec_encode_data_update().
+ */
+
+void ec_encode_data_update_base(int len, int k, int rows, int vec_i, unsigned char *v,
+                               unsigned char *data, unsigned char **dest);
+
+/**
+ * @brief GF(2^8) vector dot product, runs baseline version.
+ *
+ * Does a GF(2^8) dot product across each byte of the input array and a constant
+ * set of coefficients to produce each byte of the output. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 32*vlen byte constant array based on the input coefficients.
+ *
+ * @param len    Length of each vector in bytes. Must be >= 16.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 32*vlen byte array of pre-calculated constants based
+ *               on the array of input coefficients. Only elements 32*CONST*j + 1
+ *               of this array are used, where j = (0, 1, 2...) and CONST is the
+ *               number of elements in the array of input coefficients. The
+ *               elements used correspond to the original input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+
+void gf_vect_dot_prod_base(int len, int vlen, unsigned char *gftbls,
+                        unsigned char **src, unsigned char *dest);
+
+/**
+ * @brief GF(2^8) vector dot product, runs appropriate version.
+ *
+ * Does a GF(2^8) dot product across each byte of the input array and a constant
+ * set of coefficients to produce each byte of the output. Can be used for
+ * erasure coding encode and decode. Function requires pre-calculation of a
+ * 32*vlen byte constant array based on the input coefficients.
+ *
+ * This function determines what instruction sets are enabled and
+ * selects the appropriate version at runtime.
+ *
+ * @param len    Length of each vector in bytes. Must be >= 32.
+ * @param vlen   Number of vector sources.
+ * @param gftbls Pointer to 32*vlen byte array of pre-calculated constants based
+ *               on the array of input coefficients.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+void gf_vect_dot_prod(int len, int vlen, unsigned char *gftbls,
+                        unsigned char **src, unsigned char *dest);
+
+/**
+ * @brief GF(2^8) vector multiply accumulate, runs appropriate version.
+ *
+ * Does a GF(2^8) multiply across each byte of input source with expanded
+ * constant and add to destination array. Can be used for erasure coding encode
+ * and decode update when only one source is available at a time. Function
+ * requires pre-calculation of a 32*vec byte constant array based on the input
+ * coefficients.
+ *
+ * This function determines what instruction sets are enabled and selects the
+ * appropriate version at runtime.
+ *
+ * @param len    Length of each vector in bytes. Must be >= 64.
+ * @param vec    The number of vector sources or rows in the generator matrix
+ *              for coding.
+ * @param vec_i  The vector index corresponding to the single input source.
+ * @param gftbls Pointer to array of input tables generated from coding
+ *              coefficients in ec_init_tables(). Must be of size 32*vec.
+ * @param src    Array of pointers to source inputs.
+ * @param dest   Pointer to destination data array.
+ * @returns none
+ */
+
+void gf_vect_mad(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
+                unsigned char *dest);
+
+/**
+ * @brief GF(2^8) vector multiply accumulate, baseline version.
+ *
+ * Baseline version of gf_vect_mad() with same parameters.
+ */
+
+void gf_vect_mad_base(int len, int vec, int vec_i, unsigned char *v, unsigned char *src,
+                     unsigned char *dest);
+
+// x86 only
+#if defined(__i386__) || defined(__x86_64__)
+
+/**
+ * @brief Generate or decode erasure codes on blocks of data.
+ *
+ * Arch specific version of ec_encode_data() with same parameters.
+ * @requires SSE4.1
+ */
+void ec_encode_data_sse(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
+                       unsigned char **coding);
+
+/**
+ * @brief Generate or decode erasure codes on blocks of data.
+ *
+ * Arch specific version of ec_encode_data() with same parameters.
+ * @requires AVX
+ */
+void ec_encode_data_avx(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
+                       unsigned char **coding);
+
+/**
+ * @brief Generate or decode erasure codes on blocks of data.
+ *
+ * Arch specific version of ec_encode_data() with same parameters.
+ * @requires AVX2
+ */
+void ec_encode_data_avx2(int len, int k, int rows, unsigned char *gftbls, unsigned char **data,
+                        unsigned char **coding);
+
 /**
  * @brief Generate update for encode or decode of erasure codes from single source.
  *
@@ -188,16 +282,6 @@ void ec_encode_data_update_avx(int len, int k, int rows, int vec_i, unsigned cha
 void ec_encode_data_update_avx2(int len, int k, int rows, int vec_i, unsigned char *g_tbls,
                                unsigned char *data, unsigned char **coding);
 
-/**
- * @brief Generate update for encode or decode of erasure codes from single source.
- *
- * Baseline version of ec_encode_data_update().
- */
-
-void ec_encode_data_update_base(int len, int k, int rows, int vec_i, unsigned char *v, 
-                               unsigned char *data, unsigned char **dest);
-
-
 /**
  * @brief GF(2^8) vector dot product.
  *
@@ -216,7 +300,7 @@ void ec_encode_data_update_base(int len, int k, int rows, int vec_i, unsigned ch
  * @returns none
  */
 
-void gf_vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls, 
+void gf_vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
                        unsigned char **src, unsigned char *dest);
 
 /**
@@ -237,7 +321,7 @@ void gf_vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
  * @returns none
  */
 
-void gf_vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls, 
+void gf_vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
                        unsigned char **src, unsigned char *dest);
 
 /**
@@ -258,13 +342,13 @@ void gf_vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
  * @returns none
  */
 
-void gf_vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls, 
+void gf_vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
                        unsigned char **src, unsigned char *dest);
 
 /**
  * @brief GF(2^8) vector dot product with two outputs.
  *
- * Vector dot product optimized to calculate two ouputs at a time. Does two
+ * Vector dot product optimized to calculate two outputs at a time. Does two
  * GF(2^8) dot products across each byte of the input array and two constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -276,7 +360,7 @@ void gf_vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 2*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -286,7 +370,7 @@ void gf_2vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with two outputs.
  *
- * Vector dot product optimized to calculate two ouputs at a time. Does two
+ * Vector dot product optimized to calculate two outputs at a time. Does two
  * GF(2^8) dot products across each byte of the input array and two constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -298,7 +382,7 @@ void gf_2vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 2*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -308,7 +392,7 @@ void gf_2vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with two outputs.
  *
- * Vector dot product optimized to calculate two ouputs at a time. Does two
+ * Vector dot product optimized to calculate two outputs at a time. Does two
  * GF(2^8) dot products across each byte of the input array and two constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -320,7 +404,7 @@ void gf_2vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 2*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -330,7 +414,7 @@ void gf_2vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with three outputs.
  *
- * Vector dot product optimized to calculate three ouputs at a time. Does three
+ * Vector dot product optimized to calculate three outputs at a time. Does three
  * GF(2^8) dot products across each byte of the input array and three constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -342,7 +426,7 @@ void gf_2vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 3*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -352,7 +436,7 @@ void gf_3vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with three outputs.
  *
- * Vector dot product optimized to calculate three ouputs at a time. Does three
+ * Vector dot product optimized to calculate three outputs at a time. Does three
  * GF(2^8) dot products across each byte of the input array and three constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -364,7 +448,7 @@ void gf_3vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 3*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -374,7 +458,7 @@ void gf_3vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with three outputs.
  *
- * Vector dot product optimized to calculate three ouputs at a time. Does three
+ * Vector dot product optimized to calculate three outputs at a time. Does three
  * GF(2^8) dot products across each byte of the input array and three constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -386,7 +470,7 @@ void gf_3vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 3*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -396,7 +480,7 @@ void gf_3vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with four outputs.
  *
- * Vector dot product optimized to calculate four ouputs at a time. Does four
+ * Vector dot product optimized to calculate four outputs at a time. Does four
  * GF(2^8) dot products across each byte of the input array and four constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -418,7 +502,7 @@ void gf_4vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with four outputs.
  *
- * Vector dot product optimized to calculate four ouputs at a time. Does four
+ * Vector dot product optimized to calculate four outputs at a time. Does four
  * GF(2^8) dot products across each byte of the input array and four constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -440,7 +524,7 @@ void gf_4vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with four outputs.
  *
- * Vector dot product optimized to calculate four ouputs at a time. Does four
+ * Vector dot product optimized to calculate four outputs at a time. Does four
  * GF(2^8) dot products across each byte of the input array and four constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -462,7 +546,7 @@ void gf_4vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with five outputs.
  *
- * Vector dot product optimized to calculate five ouputs at a time. Does five
+ * Vector dot product optimized to calculate five outputs at a time. Does five
  * GF(2^8) dot products across each byte of the input array and five constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -474,7 +558,7 @@ void gf_4vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 5*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -484,7 +568,7 @@ void gf_5vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with five outputs.
  *
- * Vector dot product optimized to calculate five ouputs at a time. Does five
+ * Vector dot product optimized to calculate five outputs at a time. Does five
  * GF(2^8) dot products across each byte of the input array and five constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -496,7 +580,7 @@ void gf_5vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 5*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -506,7 +590,7 @@ void gf_5vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with five outputs.
  *
- * Vector dot product optimized to calculate five ouputs at a time. Does five
+ * Vector dot product optimized to calculate five outputs at a time. Does five
  * GF(2^8) dot products across each byte of the input array and five constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -518,7 +602,7 @@ void gf_5vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 5*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -528,7 +612,7 @@ void gf_5vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with six outputs.
  *
- * Vector dot product optimized to calculate six ouputs at a time. Does six
+ * Vector dot product optimized to calculate six outputs at a time. Does six
  * GF(2^8) dot products across each byte of the input array and six constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -540,7 +624,7 @@ void gf_5vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 6*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -550,7 +634,7 @@ void gf_6vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with six outputs.
  *
- * Vector dot product optimized to calculate six ouputs at a time. Does six
+ * Vector dot product optimized to calculate six outputs at a time. Does six
  * GF(2^8) dot products across each byte of the input array and six constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -562,7 +646,7 @@ void gf_6vect_dot_prod_sse(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 6*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
@@ -572,7 +656,7 @@ void gf_6vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
 /**
  * @brief GF(2^8) vector dot product with six outputs.
  *
- * Vector dot product optimized to calculate six ouputs at a time. Does six
+ * Vector dot product optimized to calculate six outputs at a time. Does six
  * GF(2^8) dot products across each byte of the input array and six constant
  * sets of coefficients to produce each byte of the outputs. Can be used for
  * erasure coding encode and decode. Function requires pre-calculation of a
@@ -584,86 +668,13 @@ void gf_6vect_dot_prod_avx(int len, int vlen, unsigned char *gftbls,
  * @param gftbls Pointer to 6*32*vlen byte array of pre-calculated constants
  *               based on the array of input coefficients.
  * @param src    Array of pointers to source inputs.
- * @param dest   Array of pointers to destination data buffers.  
+ * @param dest   Array of pointers to destination data buffers.
  * @returns none
  */
 
 void gf_6vect_dot_prod_avx2(int len, int vlen, unsigned char *gftbls,
                        unsigned char **src, unsigned char **dest);
 
-/**
- * @brief GF(2^8) vector dot product, runs baseline version.
- * 
- * Does a GF(2^8) dot product across each byte of the input array and a constant
- * set of coefficients to produce each byte of the output. Can be used for
- * erasure coding encode and decode. Function requires pre-calculation of a
- * 32*vlen byte constant array based on the input coefficients.
- * 
- * @param len    Length of each vector in bytes. Must be >= 16.
- * @param vlen   Number of vector sources.
- * @param gftbls Pointer to 32*vlen byte array of pre-calculated constants based
- *               on the array of input coefficients. Only elements 32*CONST*j + 1 
- *               of this array are used, where j = (0, 1, 2...) and CONST is the
- *               number of elements in the array of input coefficients. The 
- *               elements used correspond to the original input coefficients.          
- * @param src    Array of pointers to source inputs.
- * @param dest   Pointer to destination data array.
- * @returns none
- */
-
-void gf_vect_dot_prod_base(int len, int vlen, unsigned char *gftbls,
-                        unsigned char **src, unsigned char *dest);
-
-/**
- * @brief GF(2^8) vector dot product, runs appropriate version.
- *
- * Does a GF(2^8) dot product across each byte of the input array and a constant
- * set of coefficients to produce each byte of the output. Can be used for
- * erasure coding encode and decode. Function requires pre-calculation of a
- * 32*vlen byte constant array based on the input coefficients.
- * 
- * This function determines what instruction sets are enabled and
- * selects the appropriate version at runtime.
- *
- * @param len    Length of each vector in bytes. Must be >= 32.
- * @param vlen   Number of vector sources.
- * @param gftbls Pointer to 32*vlen byte array of pre-calculated constants based
- *               on the array of input coefficients.
- * @param src    Array of pointers to source inputs.
- * @param dest   Pointer to destination data array.
- * @returns none
- */
-
-void gf_vect_dot_prod(int len, int vlen, unsigned char *gftbls,
-                        unsigned char **src, unsigned char *dest);
-
-
-/**
- * @brief GF(2^8) vector multiply accumulate, runs appropriate version.
- *
- * Does a GF(2^8) multiply across each byte of input source with expanded
- * constant and add to destination array. Can be used for erasure coding encode
- * and decode update when only one source is available at a time. Function
- * requires pre-calculation of a 32*vec byte constant array based on the input
- * coefficients.
- *
- * This function determines what instruction sets are enabled and selects the
- * appropriate version at runtime.
- *
- * @param len    Length of each vector in bytes. Must be >= 32.
- * @param vec    The number of vector sources or rows in the generator matrix
- *              for coding.
- * @param vec_i  The vector index corresponding to the single input source.
- * @param gftbls Pointer to array of input tables generated from coding
- *              coefficients in ec_init_tables(). Must be of size 32*vec.
- * @param src    Array of pointers to source inputs.
- * @param dest   Pointer to destination data array.
- * @returns none
- */
-
-void gf_vect_mad(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
-                unsigned char *dest);
-
 /**
  * @brief GF(2^8) vector multiply accumulate, arch specific version.
  *
@@ -693,14 +704,6 @@ void gf_vect_mad_avx(int len, int vec, int vec_i, unsigned char *gftbls, unsigne
 void gf_vect_mad_avx2(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
                      unsigned char *dest);
 
-/**
- * @brief GF(2^8) vector multiply accumulate, baseline version.
- *
- * Baseline version of gf_vect_mad() with same parameters.
- */
-
-void gf_vect_mad_base(int len, int vec, int vec_i, unsigned char *v, unsigned char *src,
-                     unsigned char *dest);
 
 /**
  * @brief GF(2^8) vector multiply with 2 accumulate.  SSE version.
@@ -854,6 +857,7 @@ void gf_6vect_mad_avx(int len, int vec, int vec_i, unsigned char *gftbls, unsign
 void gf_6vect_mad_avx2(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src,
                       unsigned char **dest);
 
+#endif
 
 /**********************************************************************
  * The remaining are lib support functions used in GF(2^8) operations.
@@ -884,12 +888,19 @@ unsigned char gf_inv(unsigned char a);
  * Vandermonde matrix example of encoding coefficients where high portion of
  * matrix is identity matrix I and lower portion is constructed as 2^{i*(j-k+1)}
  * i:{0,k-1} j:{k,m-1}. Commonly used method for choosing coefficients in
- * erasure encoding but does not guarantee invertable for every sub matrix.  For
- * large k it is possible to find cases where the decode matrix chosen from
- * sources and parity not in erasure are not invertable. Users may want to
- * adjust for k > 5.
- *
- * @param a  [mxk] array to hold coefficients
+ * erasure encoding but does not guarantee invertable for every sub matrix. For
+ * large pairs of m and k it is possible to find cases where the decode matrix
+ * chosen from sources and parity is not invertable. Users may want to adjust
+ * for certain pairs m and k. If m and k satisfy one of the following
+ * inequalities, no adjustment is required:
+ *
+ * - k <= 3
+ * - k = 4, m <= 25
+ * - k = 5, m <= 10
+ * - k <= 21, m-k = 4
+ * - m - k <= 3.
+ *
+ * @param a  [m x k] array to hold coefficients
  * @param m  number of rows in matrix corresponding to srcs + parity.
  * @param k  number of columns in matrix corresponding to srcs.
  * @returns  none
@@ -904,7 +915,7 @@ void gf_gen_rs_matrix(unsigned char *a, int m, int k);
  * is identity matrix I and lower portion is constructed as 1/(i + j) | i != j,
  * i:{0,k-1} j:{k,m-1}.  Any sub-matrix of a Cauchy matrix should be invertable.
  *
- * @param a  [mxk] array to hold coefficients
+ * @param a  [m x k] array to hold coefficients
  * @param m  number of rows in matrix corresponding to srcs + parity.
  * @param k  number of columns in matrix corresponding to srcs.
  * @returns  none
@@ -915,7 +926,10 @@ void gf_gen_cauchy1_matrix(unsigned char *a, int m, int k);
 /**
  * @brief Invert a matrix in GF(2^8)
  *
- * @param in  input matrix
+ * Attempts to construct an n x n inverse of the input matrix. Returns non-zero
+ * if singular. Will always destroy input matrix in process.
+ *
+ * @param in  input matrix, destroyed by invert process
  * @param out output matrix such that [in] x [out] = [I] - identity matrix
  * @param n   size of matrix [nxn]
  * @returns 0 successful, other fail on singular input matrix
index 42aa0a4568e14376a1f1db4b019f05b4e1e91ac0..70a0ab2ed366f5fbc769870a450a1300c608e8d7 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -35,7 +35,7 @@
  *  @file gf_vect_mul.h
  *  @brief Interface to functions for vector (block) multiplication in GF(2^8).
  *
- *  This file defines the interface to routines used in fast RAID rebuild and 
+ *  This file defines the interface to routines used in fast RAID rebuild and
  *  erasure codes.
  */
 
@@ -43,6 +43,9 @@
 extern "C" {
 #endif
 
+// x86 only
+#if defined(__i386__) || defined(__x86_64__)
+
  /**
  * @brief GF(2^8) vector multiply by constant.
  *
@@ -84,10 +87,11 @@ int gf_vect_mul_sse(int len, unsigned char *gftbl, void *src, void *dest);
 
 int gf_vect_mul_avx(int len, unsigned char *gftbl, void *src, void *dest);
 
+#endif
 
 /**
  * @brief GF(2^8) vector multiply by constant, runs appropriate version.
- *     
+ *
  * Does a GF(2^8) vector multiply b = Ca where a and b are arrays and C
  * is a single field element in GF(2^8). Can be used for RAID6 rebuild
  * and partial write functions. Function requires pre-calculation of a
@@ -95,9 +99,9 @@ int gf_vect_mul_avx(int len, unsigned char *gftbl, void *src, void *dest);
  * C{01}, C{02}, ... , C{0f} }, {C{00}, C{10}, C{20}, ... , C{f0} }.
  * Len and src must be aligned to 32B.
  *
- * This function determines what instruction sets are enabled 
- * and selects the appropriate version at runtime. 
- * 
+ * This function determines what instruction sets are enabled
+ * and selects the appropriate version at runtime.
+ *
  * @param len   Length of vector in bytes. Must be aligned to 32B.
  * @param gftbl Pointer to 32-byte array of pre-calculated constants based on C.
  * @param src   Pointer to src data array. Must be aligned to 32B.
@@ -138,7 +142,7 @@ void gf_vect_mul_init(unsigned char c, unsigned char* gftbl);
  * @param dest  Pointer to destination data array. Must be aligned to 32B.
  */
 
-void gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, 
+void gf_vect_mul_base(int len, unsigned char *a, unsigned char *src,
                        unsigned char *dest);
 
 #ifdef __cplusplus
index 3cba3fafacf479d56be7467beca149f27891027f..a8b87791874568c3c855028aff10cba18791c4e2 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2016 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -53,8 +53,8 @@
  * Igzip also supports compression levels from ISAL_DEF_MIN_LEVEL to
  * ISAL_DEF_MAX_LEVEL.
  *
- * Igzip contains some behaviour configurable at compile time. These
- * configureable options are:
+ * Igzip contains some behavior configurable at compile time. These
+ * configurable options are:
  *
  * - IGZIP_HIST_SIZE - Defines the window size. The default value is 32K (note K
  *   represents 1024), but 8K is also supported. Powers of 2 which are at most
@@ -62,7 +62,7 @@
  *
  * - LONGER_HUFFTABLES - Defines whether to use a larger hufftables structure
  *   which may increase performance with smaller IGZIP_HIST_SIZE values. By
- *   default this optoin is not defined. This define sets IGZIP_HIST_SIZE to be
+ *   default this option is not defined. This define sets IGZIP_HIST_SIZE to be
  *   8 if IGZIP_HIST_SIZE > 8K.
  *
  *   As an example, to compile gzip with an 8K window size, in a terminal run
@@ -72,7 +72,6 @@
  *
  */
 #include <stdint.h>
-#include "types.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -85,16 +84,20 @@ extern "C" {
 #define ISAL_DEF_MAX_HDR_SIZE 328
 #define ISAL_DEF_MAX_CODE_LEN 15
 #define ISAL_DEF_HIST_SIZE (32*IGZIP_K)
+#define ISAL_DEF_MAX_HIST_BITS 15
+#define ISAL_DEF_MAX_MATCH 258
+#define ISAL_DEF_MIN_MATCH 3
 
 #define ISAL_DEF_LIT_SYMBOLS 257
 #define ISAL_DEF_LEN_SYMBOLS 29
 #define ISAL_DEF_DIST_SYMBOLS 30
 #define ISAL_DEF_LIT_LEN_SYMBOLS (ISAL_DEF_LIT_SYMBOLS + ISAL_DEF_LEN_SYMBOLS)
 
-#define ISAL_LOOK_AHEAD (18 * 16)      /* Max repeat length, rounded up to 32 byte boundary */
+/* Max repeat length, rounded up to 32 byte boundary */
+#define ISAL_LOOK_AHEAD ((ISAL_DEF_MAX_MATCH + 31) & ~31)
 
 /******************************************************************************/
-/* Deflate Implemenation Specific Defines */
+/* Deflate Implementation Specific Defines */
 /******************************************************************************/
 /* Note IGZIP_HIST_SIZE must be a power of two */
 #ifndef IGZIP_HIST_SIZE
@@ -115,9 +118,14 @@ extern "C" {
 
 #define ISAL_LIMIT_HASH_UPDATE
 
-#ifndef IGZIP_HASH_SIZE
-#define IGZIP_HASH_SIZE  (8 * IGZIP_K)
-#endif
+#define IGZIP_HASH8K_HASH_SIZE (8 * IGZIP_K)
+#define IGZIP_HASH_HIST_SIZE IGZIP_HIST_SIZE
+#define IGZIP_HASH_MAP_HASH_SIZE IGZIP_HIST_SIZE
+
+#define IGZIP_LVL0_HASH_SIZE  (8 * IGZIP_K)
+#define IGZIP_LVL1_HASH_SIZE  IGZIP_HASH8K_HASH_SIZE
+#define IGZIP_LVL2_HASH_SIZE  IGZIP_HASH_HIST_SIZE
+#define IGZIP_LVL3_HASH_SIZE  IGZIP_HASH_MAP_HASH_SIZE
 
 #ifdef LONGER_HUFFTABLE
 enum {IGZIP_DIST_TABLE_SIZE = 8*1024};
@@ -146,6 +154,8 @@ enum {IGZIP_LIT_TABLE_SIZE = ISAL_DEF_LIT_SYMBOLS};
 #define IGZIP_DEFLATE  0       /* Default */
 #define IGZIP_GZIP     1
 #define IGZIP_GZIP_NO_HDR      2
+#define IGZIP_ZLIB     3
+#define IGZIP_ZLIB_NO_HDR      4
 
 /* Compression Return values */
 #define COMP_OK 0
@@ -153,7 +163,9 @@ enum {IGZIP_LIT_TABLE_SIZE = ISAL_DEF_LIT_SYMBOLS};
 #define INVALID_PARAM -8
 #define STATELESS_OVERFLOW -1
 #define ISAL_INVALID_OPERATION -9
+#define ISAL_INVALID_STATE -3
 #define ISAL_INVALID_LEVEL -4  /* Invalid Compression level set */
+#define ISAL_INVALID_LEVEL_BUF -5 /* Invalid buffer specified for the compression level */
 
 /**
  *  @enum isal_zstate_state
@@ -171,6 +183,8 @@ enum isal_zstate_state {
        ZSTATE_BODY,    //!< Body state
        ZSTATE_FLUSH_READ_BUFFER, //!< Flush buffer
        ZSTATE_FLUSH_ICF_BUFFER,
+       ZSTATE_TYPE0_HDR, //! Type0 block header to be written
+       ZSTATE_TYPE0_BODY, //!< Type0 block body to be written
        ZSTATE_SYNC_FLUSH, //!< Write sync flush block
        ZSTATE_FLUSH_WRITE_BUFFER, //!< Flush bitbuf
        ZSTATE_TRL,     //!< Trailer state
@@ -181,6 +195,8 @@ enum isal_zstate_state {
        ZSTATE_TMP_BODY,        //!< Temporary Body state
        ZSTATE_TMP_FLUSH_READ_BUFFER, //!< Flush buffer
        ZSTATE_TMP_FLUSH_ICF_BUFFER,
+       ZSTATE_TMP_TYPE0_HDR, //! Temporary Type0 block header to be written
+       ZSTATE_TMP_TYPE0_BODY, //!< Temporary Type0 block body to be written
        ZSTATE_TMP_SYNC_FLUSH, //!< Write sync flush block
        ZSTATE_TMP_FLUSH_WRITE_BUFFER, //!< Flush bitbuf
        ZSTATE_TMP_TRL, //!< Temporary Trailer state
@@ -203,16 +219,40 @@ enum isal_block_state {
        ISAL_BLOCK_TYPE0,       /* Decoding a type 0 block */
        ISAL_BLOCK_CODED,       /* Decoding a huffman coded block */
        ISAL_BLOCK_INPUT_DONE,  /* Decompression of input is completed */
-       ISAL_BLOCK_FINISH       /* Decompression of input is completed and all data has been flushed to output */
+       ISAL_BLOCK_FINISH,      /* Decompression of input is completed and all data has been flushed to output */
+       ISAL_GZIP_EXTRA_LEN,
+       ISAL_GZIP_EXTRA,
+       ISAL_GZIP_NAME,
+       ISAL_GZIP_COMMENT,
+       ISAL_GZIP_HCRC,
+       ISAL_ZLIB_DICT,
+       ISAL_CHECKSUM_CHECK,
 };
 
+
+/* Inflate Flags */
+#define ISAL_DEFLATE   0       /* Default */
+#define ISAL_GZIP      1
+#define ISAL_GZIP_NO_HDR       2
+#define ISAL_ZLIB      3
+#define ISAL_ZLIB_NO_HDR       4
+#define ISAL_ZLIB_NO_HDR_VER   5
+#define ISAL_GZIP_NO_HDR_VER   6
+
 /* Inflate Return values */
 #define ISAL_DECOMP_OK 0       /* No errors encountered while decompressing */
 #define ISAL_END_INPUT 1       /* End of input reached */
 #define ISAL_OUT_OVERFLOW 2    /* End of output reached */
+#define ISAL_NAME_OVERFLOW 3   /* End of gzip name buffer reached */
+#define ISAL_COMMENT_OVERFLOW 4        /* End of gzip name buffer reached */
+#define ISAL_EXTRA_OVERFLOW 5  /* End of extra buffer reached */
+#define ISAL_NEED_DICT 6 /* Stream needs a dictionary to continue */
 #define ISAL_INVALID_BLOCK -1  /* Invalid deflate block found */
 #define ISAL_INVALID_SYMBOL -2 /* Invalid deflate symbol found */
 #define ISAL_INVALID_LOOKBACK -3       /* Invalid lookback distance found */
+#define ISAL_INVALID_WRAPPER -4 /* Invalid gzip/zlib wrapper found */
+#define ISAL_UNSUPPORTED_METHOD -5     /* Gzip/zlib wrapper specifies unsupported compress method */
+#define ISAL_INCORRECT_CHECKSUM -6 /* Incorrect checksum found */
 
 /******************************************************************************/
 /* Compression structures */
@@ -221,7 +261,7 @@ enum isal_block_state {
 struct isal_huff_histogram {
        uint64_t lit_len_histogram[ISAL_DEF_LIT_LEN_SYMBOLS]; //!< Histogram of Literal/Len symbols seen
        uint64_t dist_histogram[ISAL_DEF_DIST_SYMBOLS]; //!< Histogram of Distance Symbols seen
-       uint16_t hash_table[IGZIP_HASH_SIZE]; //!< Tmp space used as a hash table
+       uint16_t hash_table[IGZIP_LVL0_HASH_SIZE]; //!< Tmp space used as a hash table
 };
 
 struct isal_mod_hist {
@@ -230,12 +270,17 @@ struct isal_mod_hist {
 };
 
 #define ISAL_DEF_MIN_LEVEL 0
-#define ISAL_DEF_MAX_LEVEL 1
+#define ISAL_DEF_MAX_LEVEL 3
 
 /* Defines used set level data sizes */
+/* has to be at least sizeof(struct level_buf) + sizeof(struct lvlX_buf */
 #define ISAL_DEF_LVL0_REQ 0
-#define ISAL_DEF_LVL1_REQ 4 * IGZIP_K /* has to be at least sizeof(struct level_2_buf) */
+#define ISAL_DEF_LVL1_REQ (4 * IGZIP_K + 2 * IGZIP_LVL1_HASH_SIZE)
 #define ISAL_DEF_LVL1_TOKEN_SIZE 4
+#define ISAL_DEF_LVL2_REQ (4 * IGZIP_K + 2 * IGZIP_LVL2_HASH_SIZE)
+#define ISAL_DEF_LVL2_TOKEN_SIZE 4
+#define ISAL_DEF_LVL3_REQ 4 * IGZIP_K + 4 * 4 * IGZIP_K + 2 * IGZIP_LVL3_HASH_SIZE
+#define ISAL_DEF_LVL3_TOKEN_SIZE 4
 
 /* Data sizes for level specific data options */
 #define ISAL_DEF_LVL0_MIN ISAL_DEF_LVL0_REQ
@@ -252,6 +297,24 @@ struct isal_mod_hist {
 #define ISAL_DEF_LVL1_EXTRA_LARGE (ISAL_DEF_LVL1_REQ + ISAL_DEF_LVL1_TOKEN_SIZE * 128 * IGZIP_K)
 #define ISAL_DEF_LVL1_DEFAULT ISAL_DEF_LVL1_LARGE
 
+#define ISAL_DEF_LVL2_MIN (ISAL_DEF_LVL2_REQ + ISAL_DEF_LVL2_TOKEN_SIZE * 1 * IGZIP_K)
+#define ISAL_DEF_LVL2_SMALL (ISAL_DEF_LVL2_REQ + ISAL_DEF_LVL2_TOKEN_SIZE * 16 * IGZIP_K)
+#define ISAL_DEF_LVL2_MEDIUM (ISAL_DEF_LVL2_REQ + ISAL_DEF_LVL2_TOKEN_SIZE * 32 * IGZIP_K)
+#define ISAL_DEF_LVL2_LARGE (ISAL_DEF_LVL2_REQ + ISAL_DEF_LVL2_TOKEN_SIZE * 64 * IGZIP_K)
+#define ISAL_DEF_LVL2_EXTRA_LARGE (ISAL_DEF_LVL2_REQ + ISAL_DEF_LVL2_TOKEN_SIZE * 128 * IGZIP_K)
+#define ISAL_DEF_LVL2_DEFAULT ISAL_DEF_LVL2_LARGE
+
+#define ISAL_DEF_LVL3_MIN (ISAL_DEF_LVL3_REQ + ISAL_DEF_LVL3_TOKEN_SIZE * 1 * IGZIP_K)
+#define ISAL_DEF_LVL3_SMALL (ISAL_DEF_LVL3_REQ + ISAL_DEF_LVL3_TOKEN_SIZE * 16 * IGZIP_K)
+#define ISAL_DEF_LVL3_MEDIUM (ISAL_DEF_LVL3_REQ + ISAL_DEF_LVL3_TOKEN_SIZE * 32 * IGZIP_K)
+#define ISAL_DEF_LVL3_LARGE (ISAL_DEF_LVL3_REQ + ISAL_DEF_LVL3_TOKEN_SIZE * 64 * IGZIP_K)
+#define ISAL_DEF_LVL3_EXTRA_LARGE (ISAL_DEF_LVL3_REQ + ISAL_DEF_LVL3_TOKEN_SIZE * 128 * IGZIP_K)
+#define ISAL_DEF_LVL3_DEFAULT ISAL_DEF_LVL3_LARGE
+
+#define IGZIP_NO_HIST 0
+#define IGZIP_HIST 1
+#define IGZIP_DICT_HIST 2
+
 /** @brief Holds Bit Buffer information*/
 struct BitBuf2 {
        uint64_t m_bits;        //!< bits in the bit buffer
@@ -261,6 +324,29 @@ struct BitBuf2 {
        uint8_t *m_out_start;   //!< start of buffer to write to
 };
 
+struct isal_zlib_header {
+       uint32_t info;          //!< base-2 logarithm of the LZ77 window size minus 8
+       uint32_t level;         //!< Compression level (fastest, fast, default, maximum)
+       uint32_t dict_id;       //!< Dictionary id
+       uint32_t dict_flag;     //!< Whether to use a dictionary
+};
+
+struct isal_gzip_header {
+       uint32_t text;          //!< Optional Text hint
+       uint32_t time;          //!< Unix modification time in gzip header
+       uint32_t xflags;                //!< xflags in gzip header
+       uint32_t os;            //!< OS in gzip header
+       uint8_t *extra;         //!< Extra field in gzip header
+       uint32_t extra_buf_len; //!< Length of extra buffer
+       uint32_t extra_len;     //!< Actual length of gzip header extra field
+       char *name;             //!< Name in gzip header
+       uint32_t name_buf_len;  //!< Length of name buffer
+       char *comment;          //!< Comments in gzip header
+       uint32_t comment_buf_len;       //!< Length of comment buffer
+       uint32_t hcrc;          //!< Header crc or header crc flag
+       uint32_t flags;         //!< Internal data
+};
+
 /* Variable prefixes:
  * b_ : Measured wrt the start of the buffer
  * f_ : Measured wrt the start of the file (aka file_start)
@@ -268,25 +354,29 @@ struct BitBuf2 {
 
 /** @brief Holds the internal state information for input and output compression streams*/
 struct isal_zstate {
-       uint32_t b_bytes_valid; //!< number of bytes of valid data in buffer
-       uint32_t b_bytes_processed;     //!< keeps track of the number of bytes processed in isal_zstate.buffer
-       uint8_t *file_start;    //!< pointer to where file would logically start
-       uint32_t crc;           //!< Current crc
-       struct BitBuf2 bitbuf;  //!< Bit Buffer
+       uint32_t total_in_start; //!< Not used, may be replaced with something else
+       uint32_t block_next;    //!< Start of current deflate block in the input
+       uint32_t block_end;     //!< End of current deflate block in the input
+       uint32_t dist_mask;     //!< Distance mask used.
+       uint32_t hash_mask;
        enum isal_zstate_state state;   //!< Current state in processing the data stream
+       struct BitBuf2 bitbuf;  //!< Bit Buffer
+       uint32_t crc;           //!< Current checksum without finalize step if any (adler)
+       uint8_t has_wrap_hdr;   //!< keeps track of wrapper header
+       uint8_t has_eob_hdr;    //!< keeps track of eob hdr (with BFINAL set)
+       uint8_t has_eob;        //!< keeps track of eob on the last deflate block
+       uint8_t has_hist;       //!< flag to track if there is match history
+       uint16_t has_level_buf_init; //!< flag to track if user supplied memory has been initialized.
        uint32_t count; //!< used for partial header/trailer writes
        uint8_t tmp_out_buff[16];       //!< temporary array
        uint32_t tmp_out_start; //!< temporary variable
        uint32_t tmp_out_end;   //!< temporary variable
-       uint32_t has_eob;       //!< keeps track of eob on the last deflate block
-       uint32_t has_eob_hdr;   //!< keeps track of eob hdr (with BFINAL set)
-       uint32_t has_hist;      //!< flag to track if there is match history
-
-       struct isal_mod_hist hist;
-
-       DECLARE_ALIGNED(uint8_t buffer[2 * IGZIP_HIST_SIZE + ISAL_LOOK_AHEAD], 32);     //!< Internal buffer
-       DECLARE_ALIGNED(uint16_t head[IGZIP_HASH_SIZE], 16);    //!< Hash array
+       uint32_t b_bytes_valid; //!< number of valid bytes in buffer
+       uint32_t b_bytes_processed;     //!< number of bytes processed in buffer
+       uint8_t buffer[2 * IGZIP_HIST_SIZE + ISAL_LOOK_AHEAD];  //!< Internal buffer
 
+       /* Stream should be setup such that the head is cache aligned*/
+       uint16_t head[IGZIP_LVL0_HASH_SIZE];    //!< Hash array
 };
 
 /** @brief Holds the huffman tree used to huffman encode the input stream **/
@@ -318,10 +408,10 @@ struct isal_zstream {
        uint32_t level; //!< Compression level to use
        uint32_t level_buf_size; //!< Size of level_buf
        uint8_t * level_buf; //!< User allocated buffer required for different compression levels
-       uint32_t end_of_stream; //!< non-zero if this is the last input buffer
-       uint32_t flush; //!< Flush type can be NO_FLUSH, SYNC_FLUSH or FULL_FLUSH
-       uint32_t gzip_flag; //!< Indicate if gzip compression is to be performed
-
+       uint16_t end_of_stream; //!< non-zero if this is the last input buffer
+       uint16_t flush; //!< Flush type can be NO_FLUSH, SYNC_FLUSH or FULL_FLUSH
+       uint16_t gzip_flag; //!< Indicate if gzip compression is to be performed
+       uint16_t hist_bits; //!< Log base 2 of maximum lookback distance, 0 is use default
        struct isal_zstate internal_state;      //!< Internal state for this stream
 };
 
@@ -362,34 +452,57 @@ struct isal_zstream {
  * Since small_code_lookup is a lookup on DECODE_LOOKUP_SIZE bits, it must have
  * size 2^DECODE_LOOKUP_SIZE.
  *
- * Since deflate Huffman are stored such that the code size and the code value
- * form an increasing function, At most 2^(15 - DECODE_LOOKUP_SIZE) - 1 elements
- * of long_code_lookup duplicate an existing symbol. Since there are at most 285
- * - DECODE_LOOKUP_SIZE possible symbols contained in long_code lookup. Rounding
- * this to the nearest 16 byte boundary yields the size of long_code_lookup of
- * 288 + 2^(15 - DECODE_LOOKUP_SIZE).
+ * To determine the amount of memory required for long_code_lookup, note that
+ * any element of long_code_lookup corresponds to a code, a duplicate of an
+ * existing code, or a invalid code. Since deflate Huffman are stored such that
+ * the code size and the code value form an increasing function, the number of
+ * duplicates is maximized when all the duplicates are contained in a single
+ * array, thus there are at most 2^(15 - DECODE_LOOKUP_SIZE) -
+ * (DECODE_LOOKUP_SIZE + 1) duplicate elements. Similarly the number of invalid
+ * elements is maximized at 2^(15 - DECODE_LOOKUP_SIZE) - 2^(floor((15 -
+ * DECODE_LOOKUP_SIZE)/2) - 2^(ceil((15 - DECODE_LOOKUP_SIZE)/2) + 1. Thus the
+ * amount of memory required is: NUM_CODES + 2^(16 - DECODE_LOOKUP_SIZE) -
+ * (DECODE_LOOKUP_SIZE + 1) - 2^(floor((15 - DECODE_LOOKUP_SIZE)/2) -
+ * 2^(ceil((15 - DECODE_LOOKUP_SIZE)/2) + 1. The values used below are those
+ * values rounded up to the nearest 16 byte boundary
  *
  * Note that DECODE_LOOKUP_SIZE can be any length even though the offset in
  * small_lookup_code is 9 bits long because the increasing relationship between
  * code length and code value forces the maximum offset to be less than 288.
  */
 
+/* In the following defines, L stands for LARGE and S for SMALL */
+#define ISAL_L_REM (21 - ISAL_DECODE_LONG_BITS)
+#define ISAL_S_REM (15 - ISAL_DECODE_SHORT_BITS)
+
+#define ISAL_L_DUP ((1 << ISAL_L_REM) - (ISAL_L_REM + 1))
+#define ISAL_S_DUP ((1 << ISAL_S_REM) - (ISAL_S_REM + 1))
+
+#define ISAL_L_UNUSED ((1 << ISAL_L_REM) - (1 << ((ISAL_L_REM)/2)) - (1 << ((ISAL_L_REM + 1)/2)) + 1)
+#define ISAL_S_UNUSED ((1 << ISAL_S_REM) - (1 << ((ISAL_S_REM)/2)) - (1 << ((ISAL_S_REM + 1)/2)) + 1)
+
+#define ISAL_L_SIZE (ISAL_DEF_LIT_LEN_SYMBOLS + ISAL_L_DUP + ISAL_L_UNUSED)
+#define ISAL_S_SIZE (ISAL_DEF_DIST_SYMBOLS + ISAL_S_DUP + ISAL_S_UNUSED)
+
+#define ISAL_HUFF_CODE_LARGE_LONG_ALIGNED (ISAL_L_SIZE + (-ISAL_L_SIZE & 0xf))
+#define ISAL_HUFF_CODE_SMALL_LONG_ALIGNED (ISAL_S_SIZE + (-ISAL_S_SIZE & 0xf))
+
 /* Large lookup table for decoding huffman codes */
 struct inflate_huff_code_large {
-       uint16_t short_code_lookup[1 << (ISAL_DECODE_LONG_BITS)];
-       uint16_t long_code_lookup[288 + (1 << (15 - ISAL_DECODE_LONG_BITS))];
+       uint32_t short_code_lookup[1 << (ISAL_DECODE_LONG_BITS)];
+       uint16_t long_code_lookup[ISAL_HUFF_CODE_LARGE_LONG_ALIGNED];
 };
 
 /* Small lookup table for decoding huffman codes */
 struct inflate_huff_code_small {
        uint16_t short_code_lookup[1 << (ISAL_DECODE_SHORT_BITS)];
-       uint16_t long_code_lookup[32 + (1 << (15 - ISAL_DECODE_SHORT_BITS))];
+       uint16_t long_code_lookup[ISAL_HUFF_CODE_SMALL_LONG_ALIGNED];
 };
 
 /** @brief Holds decompression state information*/
 struct inflate_state {
        uint8_t *next_out;      //!< Next output Byte
-       uint32_t avail_out;     //!< Number of bytes available at next_out 
+       uint32_t avail_out;     //!< Number of bytes available at next_out
        uint32_t total_out;     //!< Total bytes written out so far
        uint8_t *next_in;       //!< Next input byte
        uint64_t read_in;       //!< Bits buffered to handle unaligned streams
@@ -398,13 +511,22 @@ struct inflate_state {
        struct inflate_huff_code_large lit_huff_code;   //!< Structure for decoding lit/len symbols
        struct inflate_huff_code_small dist_huff_code;  //!< Structure for decoding dist symbols
        enum isal_block_state block_state;      //!< Current decompression state
+       uint32_t dict_length;   //!< Length of dictionary used
        uint32_t bfinal;        //!< Flag identifying final block
        uint32_t crc_flag;      //!< Flag identifying whether to track of crc
-       uint32_t crc;           //!< Contains crc of output if crc_flag is set
-       int32_t type0_block_len;        //!< Length left to read of type 0 block when outbuffer overflow occured
-       int32_t copy_overflow_length;   //!< Length left to copy when outbuffer overflow occured
-       int32_t copy_overflow_distance; //!< Lookback distance when outbuffer overlow occured
-       int32_t tmp_in_size;    //!< Number of bytes in tmp_in_buffer
+       uint32_t crc;           //!< Contains crc or adler32 of output if crc_flag is set
+       uint32_t hist_bits; //!< Log base 2 of maximum lookback distance
+       union {
+               int32_t type0_block_len;        //!< Length left to read of type 0 block when outbuffer overflow occurred
+               int32_t count; //!< Count of bytes remaining to be parsed
+               uint32_t dict_id;
+       };
+       int32_t write_overflow_lits;
+       int32_t write_overflow_len;
+       int32_t copy_overflow_length;   //!< Length left to copy when outbuffer overflow occurred
+       int32_t copy_overflow_distance; //!< Lookback distance when outbuffer overflow occurred
+       int16_t wrapper_flag;
+       int16_t tmp_in_size;    //!< Number of bytes in tmp_in_buffer
        int32_t tmp_out_valid;  //!< Number of bytes in tmp_out_buffer
        int32_t tmp_out_processed;      //!< Number of bytes processed in tmp_out_buffer
        uint8_t tmp_in_buffer[ISAL_DEF_MAX_HDR_SIZE];   //!< Temporary buffer containing data from the input stream
@@ -462,11 +584,64 @@ int isal_create_hufftables_subset(struct isal_hufftables * hufftables,
  */
 void isal_deflate_init(struct isal_zstream *stream);
 
+/**
+ * @brief Reinitialize compression stream data structure. Performs the same
+ * action as isal_deflate_init, but does not change user supplied input such as
+ * the level, flush type, compression wrapper (like gzip), hufftables, and
+ * end_of_stream_flag.
+ *
+ * @param stream Structure holding state information on the compression streams.
+ * @returns none
+ */
+void isal_deflate_reset(struct isal_zstream *stream);
+
+
+/**
+ * @brief Set gzip header default values
+ *
+ * @param gz_hdr: Gzip header to initialize.
+ */
+void isal_gzip_header_init(struct isal_gzip_header *gz_hdr);
+
+/**
+ * @brief Write gzip header to output stream
+ *
+ * Writes the gzip header to the output stream. On entry this function assumes
+ * that the output buffer has been initialized, so stream->next_out,
+ * stream->avail_out and stream->total_out have been set. If the output buffer
+ * contains insufficient space, stream is not modified.
+ *
+ * @param stream: Structure holding state information on the compression stream.
+ * @param gz_hdr: Structure holding the gzip header information to encode.
+ *
+ * @returns Returns 0 if the header is successfully written, otherwise returns
+ * the minimum size required to successfully write the gzip header to the output
+ * buffer.
+ */
+uint32_t isal_write_gzip_header(struct isal_zstream * stream, struct isal_gzip_header *gz_hdr);
+
+/**
+ * @brief Write zlib header to output stream
+ *
+ * Writes the zlib header to the output stream. On entry this function assumes
+ * that the output buffer has been initialized, so stream->next_out,
+ * stream->avail_out and stream->total_out have been set. If the output buffer
+ * contains insufficient space, stream is not modified.
+ *
+ * @param stream: Structure holding state information on the compression stream.
+ * @param z_hdr: Structure holding the zlib header information to encode.
+ *
+ * @returns Returns 0 if the header is successfully written, otherwise returns
+ * the minimum size required to successfully write the zlib header to the output
+ * buffer.
+ */
+uint32_t isal_write_zlib_header(struct isal_zstream * stream, struct isal_zlib_header *z_hdr);
+
 /**
  * @brief Set stream to use a new Huffman code
  *
  * Sets the Huffman code to be used in compression before compression start or
- * after the sucessful completion of a SYNC_FLUSH or FULL_FLUSH. If type has
+ * after the successful completion of a SYNC_FLUSH or FULL_FLUSH. If type has
  * value IGZIP_HUFFTABLE_DEFAULT, the stream is set to use the default Huffman
  * code. If type has value IGZIP_HUFFTABLE_STATIC, the stream is set to use the
  * deflate standard static Huffman code, or if type has value
@@ -494,6 +669,22 @@ int isal_deflate_set_hufftables(struct isal_zstream *stream,
 void isal_deflate_stateless_init(struct isal_zstream *stream);
 
 
+/**
+ * @brief Set compression dictionary to use
+ *
+ * This function is to be called after isal_deflate_init, or after completing a
+ * SYNC_FLUSH or FULL_FLUSH and before the next call do isal_deflate. If the
+ * dictionary is longer than IGZIP_HIST_SIZE, only the last IGZIP_HIST_SIZE
+ * bytes will be used.
+ *
+ * @param stream Structure holding state information on the compression streams.
+ * @param dict: Array containing dictionary to use.
+ * @param dict_len: Length of dict.
+ * @returns COMP_OK,
+ *          ISAL_INVALID_STATE (dictionary could not be set)
+ */
+int isal_deflate_set_dict(struct isal_zstream *stream, uint8_t *dict, uint32_t dict_len);
+
 /**
  * @brief Fast data (deflate) compression for storage applications.
  *
@@ -534,14 +725,19 @@ void isal_deflate_stateless_init(struct isal_zstream *stream);
  * not include previous blocks so new blocks are fully independent. Switching
  * between flush types is supported.
  *
+ * If a compression dictionary is required, the dictionary can be set calling
+ * isal_deflate_set_dictionary before calling isal_deflate.
+ *
  * If the gzip_flag is set to IGZIP_GZIP, a generic gzip header and the gzip
  * trailer are written around the deflate compressed data. If gzip_flag is set
- * to IGZIP_GZIP_NO_HDR, then only the gzip trailer is written.
+ * to IGZIP_GZIP_NO_HDR, then only the gzip trailer is written. A full-featured
+ * header is supported by the isal_write_{gzip,zlib}_header() functions.
  *
  * @param  stream Structure holding state information on the compression streams.
  * @return COMP_OK (if everything is ok),
  *         INVALID_FLUSH (if an invalid FLUSH is selected),
- *         ISAL_INVALID_LEVEL (if an invalid compression level is selected).
+ *         ISAL_INVALID_LEVEL (if an invalid compression level is selected),
+ *         ISAL_INVALID_LEVEL_BUF (if the level buffer is not large enough).
  */
 int isal_deflate(struct isal_zstream *stream);
 
@@ -556,7 +752,7 @@ int isal_deflate(struct isal_zstream *stream);
  * block.
  *
  * When the compression level is set to 1, unlike in isal_deflate(), level_buf
- * may be optionally set depending on what what permormance is desired.
+ * may be optionally set depending on what what performance is desired.
  *
  * For stateless the flush types NO_FLUSH and FULL_FLUSH are supported.
  * FULL_FLUSH will byte align the output deflate block so additional blocks can
@@ -570,6 +766,7 @@ int isal_deflate(struct isal_zstream *stream);
  * @return COMP_OK (if everything is ok),
  *         INVALID_FLUSH (if an invalid FLUSH is selected),
  *         ISAL_INVALID_LEVEL (if an invalid compression level is selected),
+ *         ISAL_INVALID_LEVEL_BUF (if the level buffer is not large enough),
  *         STATELESS_OVERFLOW (if output buffer will not fit output).
  */
 int isal_deflate_stateless(struct isal_zstream *stream);
@@ -586,6 +783,67 @@ int isal_deflate_stateless(struct isal_zstream *stream);
  */
 void isal_inflate_init(struct inflate_state *state);
 
+/**
+ * @brief Reinitialize decompression state data structure
+ *
+ * @param state Structure holding state information on the compression streams.
+ * @returns none
+ */
+void isal_inflate_reset(struct inflate_state *state);
+
+/**
+ * @brief Set decompression dictionary to use
+ *
+ * This function is to be called after isal_inflate_init. If the dictionary is
+ * longer than IGZIP_HIST_SIZE, only the last IGZIP_HIST_SIZE bytes will be
+ * used.
+ *
+ * @param state: Structure holding state information on the decompression stream.
+ * @param dict: Array containing dictionary to use.
+ * @param dict_len: Length of dict.
+ * @returns COMP_OK,
+ *          ISAL_INVALID_STATE (dictionary could not be set)
+ */
+int isal_inflate_set_dict(struct inflate_state *state, uint8_t *dict, uint32_t dict_len);
+
+/**
+ * @brief Read and return gzip header information
+ *
+ * On entry state must be initialized and next_in pointing to a gzip compressed
+ * buffer. The buffers gz_hdr->extra, gz_hdr->name, gz_hdr->comments and the
+ * buffer lengths must be set to record the corresponding field, or set to NULL
+ * to disregard that gzip header information. If one of these buffers overflows,
+ * the user can reallocate a larger buffer and call this function again to
+ * continue reading the header information.
+ *
+ * @param state: Structure holding state information on the decompression stream.
+ * @param gz_hdr: Structure to return data encoded in the gzip header
+ * @returns ISAL_DECOMP_OK (header was successfully parsed)
+ *          ISAL_END_INPUT (all input was parsed),
+ *          ISAL_NAME_OVERFLOW (gz_hdr->name overflowed while parsing),
+ *          ISAL_COMMENT_OVERFLOW (gz_hdr->comment overflowed while parsing),
+ *          ISAL_EXTRA_OVERFLOW (gz_hdr->extra overflowed while parsing),
+ *          ISAL_INVALID_WRAPPER (invalid gzip header found),
+ *          ISAL_UNSUPPORTED_METHOD (deflate is not the compression method),
+ *          ISAL_INCORRECT_CHECKSUM (gzip header checksum was incorrect)
+ */
+int isal_read_gzip_header (struct inflate_state *state, struct isal_gzip_header *gz_hdr);
+
+/**
+ * @brief Read and return zlib header information
+ *
+ * On entry state must be initialized and next_in pointing to a zlib compressed
+ * buffer.
+ *
+ * @param state: Structure holding state information on the decompression stream.
+ * @param zlib_hdr: Structure to return data encoded in the zlib header
+ * @returns ISAL_DECOMP_OK (header was successfully parsed),
+ *          ISAL_END_INPUT (all input was parsed),
+ *          ISAL_UNSUPPORTED_METHOD (deflate is not the compression method),
+ *          ISAL_INCORRECT_CHECKSUM (zlib header checksum was incorrect)
+ */
+int isal_read_zlib_header (struct inflate_state *state, struct isal_zlib_header *zlib_hdr);
+
 /**
  * @brief Fast data (deflate) decompression for storage applications.
  *
@@ -599,18 +857,39 @@ void isal_inflate_init(struct inflate_state *state);
  * The call to isal_inflate() will take data from the input buffer (updating
  * next_in, avail_in and write a decompressed stream to the output buffer
  * (updating next_out and avail_out). The function returns when the input buffer
- * is empty, the output buffer is full or invalid data is found. The current
- * state of the decompression on exit can be read from state->block-state. If
- * the crc_flag is set, the gzip crc of the output is stored in state->crc.
+ * is empty, the output buffer is full, invalid data is found, or in the case of
+ * zlib formatted data if a dictionary is specified. The current state of the
+ * decompression on exit can be read from state->block-state.
+ *
+ * If the crc_flag is set to ISAL_GZIP_NO_HDR the gzip crc of the output is
+ * stored in state->crc. Alternatively, if the crc_flag is set to
+ * ISAL_ZLIB_NO_HDR the adler32 of the output is stored in state->crc (checksum
+ * may not be updated until decompression is complete). When the crc_flag is set
+ * to ISAL_GZIP_NO_HDR_VER or ISAL_ZLIB_NO_HDR_VER, the behavior is the same,
+ * except the checksum is verified with the checksum after immediately following
+ * the deflate data. If the crc_flag is set to ISAL_GZIP or ISAL_ZLIB, the
+ * gzip/zlib header is parsed, state->crc is set to the appropriate checksum,
+ * and the checksum is verified. If the crc_flag is set to ISAL_DEFLATE
+ * (default), then the data is treated as a raw deflate block.
+ *
+ * The element state->hist_bits has values from 0 to 15, where values of 1 to 15
+ * are the log base 2 size of the matching window and 0 is the default with
+ * maximum history size.
+ *
+ * If a dictionary is required, a call to isal_inflate_set_dict will set the
+ * dictionary.
  *
  * @param  state Structure holding state information on the compression streams.
  * @return ISAL_DECOMP_OK (if everything is ok),
- *         ISAL_END_INPUT (if all input was decompressed),
- *         ISAL_OUT_OVERFLOW (if output buffer ran out of space),
  *         ISAL_INVALID_BLOCK,
+ *         ISAL_NEED_DICT,
  *         ISAL_INVALID_SYMBOL,
- *         ISAL_INVALID_LOOKBACK.
+ *         ISAL_INVALID_LOOKBACK,
+ *         ISAL_INVALID_WRAPPER,
+ *         ISAL_UNSUPPORTED_METHOD,
+ *         ISAL_INCORRECT_CHECKSUM.
  */
+
 int isal_inflate(struct inflate_state *state);
 
 /**
@@ -618,18 +897,40 @@ int isal_inflate(struct inflate_state *state);
  *
  * Stateless (one shot) decompression routine with a similar interface to
  * isal_inflate() but operates on entire input buffer at one time. Parameter
- * avail_out must be large enough to fit the entire decompressed output.
+ * avail_out must be large enough to fit the entire decompressed
+ * output. Dictionaries are not supported.
  *
  * @param  state Structure holding state information on the compression streams.
  * @return ISAL_DECOMP_OK (if everything is ok),
  *         ISAL_END_INPUT (if all input was decompressed),
+ *         ISAL_NEED_DICT,
  *         ISAL_OUT_OVERFLOW (if output buffer ran out of space),
  *         ISAL_INVALID_BLOCK,
  *         ISAL_INVALID_SYMBOL,
- *         ISAL_INVALID_LOOKBACK.
+ *         ISAL_INVALID_LOOKBACK,
+ *         ISAL_INVALID_WRAPPER,
+ *         ISAL_UNSUPPORTED_METHOD,
+ *         ISAL_INCORRECT_CHECKSUM.
  */
 int isal_inflate_stateless(struct inflate_state *state);
 
+/******************************************************************************/
+/* Other functions */
+/******************************************************************************/
+/**
+ * @brief Calculate Adler-32 checksum, runs appropriate version.
+ *
+ * This function determines what instruction sets are enabled and selects the
+ * appropriate version at runtime.
+ *
+ * @param init: initial Adler-32 value
+ * @param buf: buffer to calculate checksum on
+ * @param len: buffer length in bytes
+ *
+ * @returns 32-bit Adler-32 checksum
+ */
+uint32_t isal_adler32(uint32_t init, const unsigned char *buf, uint64_t len);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/ceph/src/isa-l/include/mem_routines.h b/ceph/src/isa-l/include/mem_routines.h
new file mode 100644 (file)
index 0000000..3d23522
--- /dev/null
@@ -0,0 +1,64 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stddef.h>
+
+/**
+ *  @file mem_routines.h
+ *  @brief Interface to storage mem operations
+ *
+ *  Defines the interface for vector versions of common memory functions.
+ */
+
+
+#ifndef _MEM_ROUTINES_H_
+#define _MEM_ROUTINES_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief Detect if a memory region is all zero
+ *
+ * Zero detect function with optimizations for large blocks > 128 bytes
+ *
+ * @param    mem   Pointer to memory region to test
+ * @param    len   Length of region in bytes
+ * @returns  0     - region is all zeros
+ *           other - region has non zero bytes
+ */
+int isal_zero_detect(void *mem, size_t len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _MEM_ROUTINES_H_
+
index 7fca3a14606f608d8ab5a44240dc90d3c4597713..bd3a5294f4b23ae80ea99a6bd9eeb757abfc8177 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
  %define mbin_rdx      rdx
 %endif
 
+%ifndef AS_FEATURE_LEVEL
+%define AS_FEATURE_LEVEL 4
+%endif
+
 ;;;;
 ; multibinary macro:
 ;   creates the visable entry point that uses HW optimized call pointer
@@ -65,7 +69,7 @@
                mbin_def_ptr    %1_mbinit
 
        section .text
-       global %1:function
+       global %1:ISAL_SYM_TYPE_FUNCTION
        %1_mbinit:
                ;;; only called the first time to setup hardware match
                call    %1_dispatch_init
 ; 1-> function name
 ; 2-> base function
 ; 3-> SSE4_1 and CLMUL optimized function
+; 4-> AVX/02 opt func
+; 5-> AVX512/10 opt func
 ;;;;;
-%macro mbin_dispatch_init_clmul 3
+%macro mbin_dispatch_init_clmul 5
        section .text
        %1_dispatch_init:
                push    mbin_rsi
                push    mbin_rbx
                push    mbin_rcx
                push    mbin_rdx
+               push    mbin_rdi
                lea     mbin_rsi, [%2 WRT_OPT] ; Default - use base function
 
                mov     eax, 1
                cpuid
-               lea     mbin_rbx, [%3 WRT_OPT] ; SSE opt func
-
-               ; Test for SSE4.2
+               mov     ebx, ecx ; save cpuid1.ecx
                test    ecx, FLAG_CPUID1_ECX_SSE4_1
                jz      _%1_init_done
                test    ecx, FLAG_CPUID1_ECX_CLMUL
-               cmovne  mbin_rsi, mbin_rbx
+               jz      _%1_init_done
+               lea     mbin_rsi, [%3 WRT_OPT] ; SSE possible so use 00/01 opt
+
+               ;; Test for XMM_YMM support/AVX
+               test    ecx, FLAG_CPUID1_ECX_OSXSAVE
+               je      _%1_init_done
+               xor     ecx, ecx
+               xgetbv  ; xcr -> edx:eax
+               mov     edi, eax          ; save xgetvb.eax
+
+               and     eax, FLAG_XGETBV_EAX_XMM_YMM
+               cmp     eax, FLAG_XGETBV_EAX_XMM_YMM
+               jne     _%1_init_done
+               test    ebx, FLAG_CPUID1_ECX_AVX
+               je      _%1_init_done
+               lea     mbin_rsi, [%4 WRT_OPT] ; AVX/02 opt
+
+%if AS_FEATURE_LEVEL >= 10
+               ;; Test for AVX2
+               xor     ecx, ecx
+               mov     eax, 7
+               cpuid
+               test    ebx, FLAG_CPUID7_EBX_AVX2
+               je      _%1_init_done           ; No AVX2 possible
+
+               ;; Test for AVX512
+               and     edi, FLAG_XGETBV_EAX_ZMM_OPM
+               cmp     edi, FLAG_XGETBV_EAX_ZMM_OPM
+               jne     _%1_init_done     ; No AVX512 possible
+               and     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+               cmp     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+               jne     _%1_init_done
+
+               and     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+               cmp     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+               lea     mbin_rbx, [%5 WRT_OPT] ; AVX512/10 opt
+               cmove   mbin_rsi, mbin_rbx
+%endif
        _%1_init_done:
+               pop     mbin_rdi
                pop     mbin_rdx
                pop     mbin_rcx
                pop     mbin_rbx
                ret
 %endmacro
 
+%if AS_FEATURE_LEVEL >= 6
 ;;;;;
 ; mbin_dispatch_init6 parameters
 ; 1-> function name
                and     edi, FLAG_XGETBV_EAX_ZMM_OPM
                cmp     edi, FLAG_XGETBV_EAX_ZMM_OPM
                jne     _%1_init_done     ; No AVX512 possible
-               and     ebx, FLAGS_CPUID7_ECX_AVX512_G1
-               cmp     ebx, FLAGS_CPUID7_ECX_AVX512_G1
+               and     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+               cmp     ebx, FLAGS_CPUID7_EBX_AVX512_G1
                lea     mbin_rbx, [%6 WRT_OPT] ; AVX512/06 opt
                cmove   mbin_rsi, mbin_rbx
 
                ret
 %endmacro
 
+%else
+%macro mbin_dispatch_init6 6
+       mbin_dispatch_init5 %1, %2, %3, %4, %5
+%endmacro
+%endif
+
+%if AS_FEATURE_LEVEL >= 10
+;;;;;
+; mbin_dispatch_init7 parameters
+; 1-> function name
+; 2-> base function
+; 3-> SSE4_2 or 00/01 optimized function
+; 4-> AVX/02 opt func
+; 5-> AVX2/04 opt func
+; 6-> AVX512/06 opt func
+; 7-> AVX512 Update/10 opt func
+;;;;;
+%macro mbin_dispatch_init7 7
+       section .text
+       %1_dispatch_init:
+               push    mbin_rsi
+               push    mbin_rax
+               push    mbin_rbx
+               push    mbin_rcx
+               push    mbin_rdx
+               push    mbin_rdi
+               lea     mbin_rsi, [%2 WRT_OPT] ; Default - use base function
+
+               mov     eax, 1
+               cpuid
+               mov     ebx, ecx ; save cpuid1.ecx
+               test    ecx, FLAG_CPUID1_ECX_SSE4_2
+               je      _%1_init_done     ; Use base function if no SSE4_2
+               lea     mbin_rsi, [%3 WRT_OPT] ; SSE possible so use 00/01 opt
+
+               ;; Test for XMM_YMM support/AVX
+               test    ecx, FLAG_CPUID1_ECX_OSXSAVE
+               je      _%1_init_done
+               xor     ecx, ecx
+               xgetbv  ; xcr -> edx:eax
+               mov     edi, eax          ; save xgetvb.eax
+
+               and     eax, FLAG_XGETBV_EAX_XMM_YMM
+               cmp     eax, FLAG_XGETBV_EAX_XMM_YMM
+               jne     _%1_init_done
+               test    ebx, FLAG_CPUID1_ECX_AVX
+               je      _%1_init_done
+               lea     mbin_rsi, [%4 WRT_OPT] ; AVX/02 opt
+
+               ;; Test for AVX2
+               xor     ecx, ecx
+               mov     eax, 7
+               cpuid
+               test    ebx, FLAG_CPUID7_EBX_AVX2
+               je      _%1_init_done           ; No AVX2 possible
+               lea     mbin_rsi, [%5 WRT_OPT]  ; AVX2/04 opt func
+
+               ;; Test for AVX512
+               and     edi, FLAG_XGETBV_EAX_ZMM_OPM
+               cmp     edi, FLAG_XGETBV_EAX_ZMM_OPM
+               jne     _%1_init_done     ; No AVX512 possible
+               and     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+               cmp     ebx, FLAGS_CPUID7_EBX_AVX512_G1
+               lea     mbin_rbx, [%6 WRT_OPT] ; AVX512/06 opt
+               cmove   mbin_rsi, mbin_rbx
+
+               and     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+               cmp     ecx, FLAGS_CPUID7_ECX_AVX512_G2
+               lea     mbin_rbx, [%7 WRT_OPT] ; AVX512/06 opt
+               cmove   mbin_rsi, mbin_rbx
+
+       _%1_init_done:
+               pop     mbin_rdi
+               pop     mbin_rdx
+               pop     mbin_rcx
+               pop     mbin_rbx
+               pop     mbin_rax
+               mov     [%1_dispatched], mbin_rsi
+               pop     mbin_rsi
+               ret
+%endmacro
+%else
+%macro mbin_dispatch_init7 7
+       mbin_dispatch_init6 %1, %2, %3, %4, %5, %6
+%endmacro
+%endif
+
 %endif ; ifndef _MULTIBINARY_ASM_
index 192fca28c16107c165fb200da08fc4f0fcfbfdd3..6100a48247e85f8524ea22dea321a2e94a41acc8 100644 (file)
@@ -120,6 +120,8 @@ int pq_check(int vects, int len, void **array);
 
 
 /* Arch specific versions */
+// x86 only
+#if defined(__i386__) || defined(__x86_64__)
 
 /**
  * @brief Generate XOR parity vector from N sources.
@@ -236,6 +238,7 @@ int pq_gen_avx2(int vects, int len, void **array);
 
 int pq_check_sse(int vects, int len, void **array);
 
+#endif
 
 /**
  * @brief Generate P+Q parity vectors from N sources, runs baseline version.
index cd689b7f5b89df2655acc650c42c9ab964e41ded..fec6a8aafb2b6b178d0a4eef5c8dde9e6195ed5e 100644 (file)
@@ -2,7 +2,7 @@
 ;  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 ;
 ;  Redistribution and use in source and binary forms, with or without
-;  modification, are permitted provided that the following conditions 
+;  modification, are permitted provided that the following conditions
 ;  are met:
 ;    * Redistributions of source code must retain the above copyright
 ;      notice, this list of conditions and the following disclaimer.
 %endif
 %endif
 
+%ifndef AS_FEATURE_LEVEL
+%define AS_FEATURE_LEVEL 4
+%endif
+
 %define EFLAGS_HAS_CPUID        (1<<21)
 %define FLAG_CPUID1_ECX_CLMUL   (1<<1)
 %define FLAG_CPUID1_EDX_SSE2    (1<<26)
 %define FLAG_CPUID7_EBX_AVX512CD       (1<<28)
 %define FLAG_CPUID7_EBX_AVX512BW       (1<<30)
 %define FLAG_CPUID7_EBX_AVX512VL       (1<<31)
+
 %define FLAG_CPUID7_ECX_AVX512VBMI     (1<<1)
+%define FLAG_CPUID7_ECX_AVX512VBMI2    (1 << 6)
+%define FLAG_CPUID7_ECX_GFNI           (1 << 8)
+%define FLAG_CPUID7_ECX_VAES           (1 << 9)
+%define FLAG_CPUID7_ECX_VPCLMULQDQ     (1 << 10)
+%define FLAG_CPUID7_ECX_VNNI           (1 << 11)
+%define FLAG_CPUID7_ECX_BITALG         (1 << 12)
+%define FLAG_CPUID7_ECX_VPOPCNTDQ      (1 << 14)
 
-%define FLAGS_CPUID7_ECX_AVX512_G1 (FLAG_CPUID7_EBX_AVX512F | FLAG_CPUID7_EBX_AVX512VL | FLAG_CPUID7_EBX_AVX512BW | FLAG_CPUID7_EBX_AVX512CD | FLAG_CPUID7_EBX_AVX512DQ)
+%define FLAGS_CPUID7_EBX_AVX512_G1 (FLAG_CPUID7_EBX_AVX512F | FLAG_CPUID7_EBX_AVX512VL | FLAG_CPUID7_EBX_AVX512BW | FLAG_CPUID7_EBX_AVX512CD | FLAG_CPUID7_EBX_AVX512DQ)
+%define FLAGS_CPUID7_ECX_AVX512_G2 (FLAG_CPUID7_ECX_AVX512VBMI2 | FLAG_CPUID7_ECX_GFNI | FLAG_CPUID7_ECX_VAES | FLAG_CPUID7_ECX_VPCLMULQDQ | FLAG_CPUID7_ECX_VNNI | FLAG_CPUID7_ECX_BITALG | FLAG_CPUID7_ECX_VPOPCNTDQ)
 
 %define FLAG_XGETBV_EAX_XMM            (1<<1)
 %define FLAG_XGETBV_EAX_YMM            (1<<2)
 %define ymm14x xmm14
 %define ymm15x xmm15
 
+%define zmm0x xmm0
+%define zmm1x xmm1
+%define zmm2x xmm2
+%define zmm3x xmm3
+%define zmm4x xmm4
+%define zmm5x xmm5
+%define zmm6x xmm6
+%define zmm7x xmm7
+%define zmm8x xmm8
+%define zmm9x xmm9
+%define zmm10x xmm10
+%define zmm11x xmm11
+%define zmm12x xmm12
+%define zmm13x xmm13
+%define zmm14x xmm14
+%define zmm15x xmm15
+%define zmm16x xmm16
+%define zmm17x xmm17
+%define zmm18x xmm18
+%define zmm19x xmm19
+%define zmm20x xmm20
+%define zmm21x xmm21
+%define zmm22x xmm22
+%define zmm23x xmm23
+%define zmm24x xmm24
+%define zmm25x xmm25
+%define zmm26x xmm26
+%define zmm27x xmm27
+%define zmm28x xmm28
+%define zmm29x xmm29
+%define zmm30x xmm30
+%define zmm31x xmm31
+
+%define zmm0y ymm0
+%define zmm1y ymm1
+%define zmm2y ymm2
+%define zmm3y ymm3
+%define zmm4y ymm4
+%define zmm5y ymm5
+%define zmm6y ymm6
+%define zmm7y ymm7
+%define zmm8y ymm8
+%define zmm9y ymm9
+%define zmm10y ymm10
+%define zmm11y ymm11
+%define zmm12y ymm12
+%define zmm13y ymm13
+%define zmm14y ymm14
+%define zmm15y ymm15
+%define zmm16y ymm16
+%define zmm17y ymm17
+%define zmm18y ymm18
+%define zmm19y ymm19
+%define zmm20y ymm20
+%define zmm21y ymm21
+%define zmm22y ymm22
+%define zmm23y ymm23
+%define zmm24y ymm24
+%define zmm25y ymm25
+%define zmm26y ymm26
+%define zmm27y ymm27
+%define zmm28y ymm28
+%define zmm29y ymm29
+%define zmm30y ymm30
+%define zmm31y ymm31
+
 %define DWORD(reg) reg %+ d
 %define WORD(reg)  reg %+ w
 %define BYTE(reg)  reg %+ b
@@ -132,8 +211,28 @@ section .text
 section .note.GNU-stack noalloc noexec nowrite progbits
 section .text
 %endif
+
+%ifdef REL_TEXT
+ %define WRT_OPT
+%elifidn __OUTPUT_FORMAT__, elf64
+ %define WRT_OPT        wrt ..plt
+%else
+ %define WRT_OPT
+%endif
+
 %ifidn __OUTPUT_FORMAT__, macho64
-%define elf64 macho64
+ %define elf64 macho64
+ mac_equ equ 1
+ %ifdef __NASM_VER__
+  %define ISAL_SYM_TYPE_FUNCTION
+  %define ISAL_SYM_TYPE_DATA_INTERNAL
+ %else
+  %define ISAL_SYM_TYPE_FUNCTION function
+  %define ISAL_SYM_TYPE_DATA_INTERNAL data internal
+ %endif
+%else
+ %define ISAL_SYM_TYPE_FUNCTION function
+ %define ISAL_SYM_TYPE_DATA_INTERNAL data internal
 %endif
 
 %macro slversion 4
index 6f354b31d0667cff230db78ab6398e6fc44ba1e2..31ccc67b997be4e382be8bc3d1add99072621185 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -27,7 +27,6 @@
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **********************************************************************/
 
-
 #ifndef _TEST_H
 #define _TEST_H
 
 extern "C" {
 #endif
 
-// Use sys/time.h functions for time
+#include <stdio.h>
+#include <stdint.h>
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+/* Decide wether to use benchmark time as an approximation or a minimum. Fewer
+ * calls to the timer are required for the approximation case.*/
+#define BENCHMARK_MIN_TIME 0
+#define BENCHMARK_APPROX_TIME 1
+#ifndef BENCHMARK_TYPE
+#define BENCHMARK_TYPE BENCHMARK_MIN_TIME
+#endif
+
+#ifdef USE_RDTSC
+/* The use of rtdsc is nuanced. On many processors it corresponds to a
+ * standardized clock source. To obtain a meaningful result it may be
+ * necessary to fix the CPU clock to match the rtdsc tick rate.
+ */
+# include <inttypes.h>
+# include <x86intrin.h>
+# define USE_CYCLES
+#else
+# include <time.h>
+#define USE_SECONDS
+#endif
 
-#include <sys/time.h>
+#ifdef USE_RDTSC
+#ifndef BENCHMARK_TIME
+# define BENCHMARK_TIME 6
+#endif
+# define GHZ 1000000000
+# define UNIT_SCALE (GHZ)
+# define CALLIBRATE_TIME (UNIT_SCALE / 2)
+static inline long long get_time(void) {
+       unsigned int dummy;
+       return __rdtscp(&dummy);
+}
+
+static inline long long get_res(void) {
+       return 1;
+}
+#else
+#ifndef BENCHMARK_TIME
+# define BENCHMARK_TIME 3
+#endif
+#ifdef _MSC_VER
+#define UNIT_SCALE get_res()
+#define CALLIBRATE_TIME (UNIT_SCALE / 4)
+static inline long long get_time(void) {
+       long long ret = 0;
+       QueryPerformanceCounter(&ret);
+       return ret;
+}
 
-struct perf{
-       struct timeval tv;
+static inline long long get_res(void) {
+       long long ret = 0;
+       QueryPerformanceFrequency(&ret);
+       return ret;
+}
+#else
+# define NANO_SCALE 1000000000
+# define UNIT_SCALE NANO_SCALE
+# define CALLIBRATE_TIME (UNIT_SCALE / 4)
+#ifdef __FreeBSD__
+# define CLOCK_ID CLOCK_MONOTONIC_PRECISE
+#else
+# define CLOCK_ID CLOCK_MONOTONIC
+#endif
+
+static inline long long get_time(void) {
+       struct timespec time;
+       long long nano_total;
+        clock_gettime(CLOCK_ID, &time);
+        nano_total = time.tv_sec;
+        nano_total *= NANO_SCALE;
+        nano_total += time.tv_nsec;
+        return nano_total;
+}
+
+static inline long long get_res(void) {
+       struct timespec time;
+       long long nano_total;
+       clock_getres(CLOCK_ID, &time);
+       nano_total = time.tv_sec;
+       nano_total *= NANO_SCALE;
+       nano_total += time.tv_nsec;
+       return nano_total;
+}
+#endif
+#endif
+struct perf {
+       long long start;
+       long long stop;
+       long long run_total;
+       long long iterations;
 };
 
+static inline void perf_init(struct perf *p) {
+       p->start = 0;
+       p->stop = 0;
+       p->run_total = 0;
+}
 
-inline int perf_start(struct perf *p)
-{
-       return gettimeofday(&(p->tv), 0);
+static inline void perf_continue(struct perf *p) {
+       p->start = get_time();
 }
-inline int perf_stop(struct perf *p)
-{
-       return gettimeofday(&(p->tv), 0);
+
+static inline void perf_pause(struct perf *p) {
+       p->stop = get_time();
+       p->run_total = p->run_total + p->stop - p->start;
+       p->start = p->stop;
 }
 
-inline void perf_print(struct perf stop, struct perf start, long long dsize)
-{
-       long long secs = stop.tv.tv_sec - start.tv.tv_sec;
-       long long usecs = secs * 1000000 + stop.tv.tv_usec - start.tv.tv_usec;
+static inline void perf_start(struct perf *p) {
+       perf_init(p);
+       perf_continue(p);
+}
 
-       printf("runtime = %10lld usecs", usecs);
-       if (dsize != 0) {
-#if 1 // not bug in printf for 32-bit
-               printf(", bandwidth %lld MB in %.4f sec = %.2f MB/s\n", dsize/(1024*1024), 
-                       ((double) usecs)/1000000, ((double) dsize) / (double)usecs);
+static inline void perf_stop(struct perf *p) {
+       perf_pause(p);
+}
+
+static inline double get_time_elapsed(struct perf *p) {
+       return 1.0 * p->run_total / UNIT_SCALE;
+}
+
+static inline long long get_base_elapsed(struct perf *p) {
+       return p->run_total;
+}
+
+static inline unsigned long long estimate_perf_iterations(struct perf *p,
+                                                  unsigned long long runs,
+                                                  unsigned long long total) {
+       total = total * runs;
+       if (get_base_elapsed(p) > 0)
+               return (total + get_base_elapsed(p) - 1) / get_base_elapsed(p);
+       else
+               return (total + get_res() - 1) / get_res();
+}
+
+#define CALLIBRATE(PERF, FUNC_CALL) {                          \
+       unsigned long long _i, _iter = 1;                       \
+       perf_start(PERF);                                       \
+       FUNC_CALL;                                              \
+       perf_pause(PERF);                                       \
+                                                               \
+       while (get_base_elapsed(PERF) < CALLIBRATE_TIME) {      \
+               _iter = estimate_perf_iterations(PERF, _iter,   \
+                                               2 * CALLIBRATE_TIME);   \
+               perf_start(PERF);                               \
+               for (_i = 0; _i < _iter; _i++) {                \
+                       FUNC_CALL;                              \
+               }                                               \
+               perf_stop(PERF);                                \
+       }                                                       \
+       (PERF)->iterations=_iter;                               \
+}
+
+#define PERFORMANCE_TEST(PERF, RUN_TIME, FUNC_CALL) {          \
+       unsigned long long _i, _iter = (PERF)->iterations;      \
+       unsigned long long _run_total = RUN_TIME;               \
+       _run_total *= UNIT_SCALE;                               \
+       _iter = estimate_perf_iterations(PERF, _iter, _run_total);\
+       (PERF)->iterations = 0;                                 \
+       perf_start(PERF);                                       \
+       for (_i = 0; _i < _iter; _i++) {                        \
+               FUNC_CALL;                                      \
+       }                                                       \
+       perf_pause(PERF);                                       \
+       (PERF)->iterations += _iter;                            \
+                                                               \
+       if(get_base_elapsed(PERF) < _run_total &&               \
+               BENCHMARK_TYPE == BENCHMARK_MIN_TIME) {         \
+               _iter = estimate_perf_iterations(PERF, _iter,   \
+                       _run_total - get_base_elapsed(PERF) +   \
+                       (UNIT_SCALE / 16));                     \
+               perf_continue(PERF);                            \
+               for (_i = 0; _i < _iter; _i++) {                \
+                       FUNC_CALL;                              \
+               }                                               \
+               perf_pause(PERF);                               \
+               (PERF)->iterations += _iter;                    \
+       }                                                       \
+}
+
+#define BENCHMARK(PERF, RUN_TIME, FUNC_CALL) {                 \
+       if((RUN_TIME) > 0) {                                    \
+               CALLIBRATE(PERF, FUNC_CALL);                    \
+               PERFORMANCE_TEST(PERF, RUN_TIME, FUNC_CALL);    \
+                                                               \
+       } else {                                                \
+               (PERF)->iterations = 1;                         \
+               perf_start(PERF);                               \
+               FUNC_CALL;                                      \
+               perf_stop(PERF);                                \
+       }                                                       \
+}
+
+#ifdef USE_CYCLES
+static inline void perf_print(struct perf p, long long unit_count) {
+       long long total_units = p.iterations * unit_count;
+
+       printf("runtime = %10lld ticks", get_base_elapsed(&p));
+       if (total_units != 0) {
+               printf(", bandwidth %lld MB in %.4f GC = %.2f ticks/byte",
+                      total_units / (1000000), get_time_elapsed(&p),
+                      get_base_elapsed(&p) / (double)total_units);
+       }
+       printf("\n");
+}
 #else
-               printf(", bandwidth %lld MB ", dsize/(1024*1024));
-               printf("in %.4f sec ",(double)usecs/1000000);
-               printf("= %.2f MB/s\n", (double)dsize/usecs);
-#endif
+static inline void perf_print(struct perf p, double unit_count) {
+       long long total_units = p.iterations * unit_count;
+       long long usecs = (long long)(get_time_elapsed(&p) * 1000000);
+
+       printf("runtime = %10lld usecs", usecs);
+       if (total_units != 0) {
+               printf(", bandwidth %lld MB in %.4f sec = %.2f MB/s",
+                      total_units / (1000000), get_time_elapsed(&p),
+                      ((double)total_units) / (1000000 * get_time_elapsed(&p)));
        }
-       else
-               printf("\n");
+       printf("\n");
 }
+#endif
 
+static inline uint64_t get_filesize(FILE * fp) {
+       uint64_t file_size;
+       fpos_t pos, pos_curr;
+
+       fgetpos(fp, &pos_curr); /* Save current position */
+#if defined(_WIN32) || defined(_WIN64)
+       _fseeki64(fp, 0, SEEK_END);
+#else
+       fseeko(fp, 0, SEEK_END);
+#endif
+       fgetpos(fp, &pos);
+       file_size = *(uint64_t *) & pos;
+       fsetpos(fp, &pos_curr); /* Restore position */
+
+       return file_size;
+}
 
 #ifdef __cplusplus
 }
index 41d53554f7c0407a3f4a706e3cfcb3c0368e288d..531c797240c6065256665ff8e6aa34a9225aa226 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -45,17 +45,6 @@ extern "C" {
 #ifdef __MINGW32__
 # include <_mingw.h>
 #endif
-typedef unsigned __int64 UINT64;
-typedef          __int64  INT64;
-typedef unsigned __int32 UINT32;
-typedef unsigned __int16 UINT16;
-typedef unsigned char    UINT8;
-#else
-typedef unsigned long int  UINT64;
-typedef          long int   INT64;
-typedef unsigned int       UINT32;
-typedef unsigned short int UINT16;
-typedef unsigned char      UINT8;
 #endif
 
 
diff --git a/ceph/src/isa-l/include/unaligned.h b/ceph/src/isa-l/include/unaligned.h
new file mode 100644 (file)
index 0000000..f7b1ed8
--- /dev/null
@@ -0,0 +1,76 @@
+/**********************************************************************
+  Copyright(c) 2011-2019 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#ifndef UNALIGNED_H
+#define UNALIGNED_H
+
+#include "stdint.h"
+#include "string.h"
+
+static inline uint16_t load_u16(uint8_t * buf) {
+       uint16_t ret;
+       memcpy(&ret, buf, sizeof(ret));
+       return ret;
+}
+
+static inline uint32_t load_u32(uint8_t * buf) {
+       uint32_t ret;
+       memcpy(&ret, buf, sizeof(ret));
+       return ret;
+}
+
+static inline uint64_t load_u64(uint8_t * buf) {
+       uint64_t ret;
+       memcpy(&ret, buf, sizeof(ret));
+       return ret;
+}
+
+static inline uintmax_t load_umax(uint8_t * buf) {
+       uintmax_t ret;
+       memcpy(&ret, buf, sizeof(ret));
+       return ret;
+}
+
+static inline void store_u16(uint8_t * buf, uint16_t val) {
+       memcpy(buf, &val, sizeof(val));
+}
+
+static inline void store_u32(uint8_t * buf, uint32_t val) {
+       memcpy(buf, &val, sizeof(val));
+}
+
+static inline void store_u64(uint8_t * buf, uint64_t val) {
+       memcpy(buf, &val, sizeof(val));
+}
+
+static inline void store_umax(uint8_t * buf, uintmax_t val) {
+       memcpy(buf, &val, sizeof(val));
+}
+
+#endif
index 4708f6d52ada2bfa4ad69ed3064d16b3219372e7..017f150a992e7327fa4ae11550d32161051965aa 100644 (file)
@@ -1,4 +1,5 @@
 LIBRARY  isa-l
+VERSION  2.29
 EXPORTS
 
 ec_encode_data_sse      @1
@@ -98,3 +99,17 @@ crc64_iso_refl                  @94
 crc64_iso_norm                  @95
 crc64_jones_refl                @96
 crc64_jones_norm                @97
+crc32_gzip_refl_base            @98
+crc32_gzip_refl                 @99
+isal_deflate_set_dict           @100
+isal_deflate_reset              @101
+isal_inflate_set_dict           @102
+isal_inflate_reset              @103
+crc16_t10dif_copy               @104
+isal_read_gzip_header           @105
+isal_read_zlib_header           @106
+isal_write_gzip_header          @107
+isal_write_zlib_header          @108
+isal_zero_detect                @109
+isal_gzip_header_init           @110
+isal_adler32                    @111
index 1afe97b970d53912fb8eadb13fe35890536f1b30..35138bbd56d75e0f60df6c0d5c6b49e46f5b4fba 100644 (file)
@@ -1,8 +1,8 @@
 ########################################################################
-#  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
+#  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions 
+#  modification, are permitted provided that the following conditions
 #  are met:
 #    * Redistributions of source code must retain the above copyright
 #      notice, this list of conditions and the following disclaimer.
 #      trace - get simulator trace
 #      clean - remove object files
 
-version ?= 2.18.0
+version ?= 2.29.0
 host_cpu ?= $(shell uname -m | sed -e 's/amd/x86_/')
 arch ?= $(shell uname | grep -v -e Linux -e BSD )
 
+# aarch64 cpu arch = aarch64
+ifeq ($(host_cpu)_$(arch),aarch64_)
+  arch = aarch64
+endif
+
 CC  = gcc
-AS  = yasm
-SIM = sde $(SIMFLAGS) --
+AS  = nasm
 AWK = awk
 
 DEBUG      = -g
@@ -71,13 +75,17 @@ ARFLAGS_win64 = -out:$@
 # arch=mingw build options
 ASFLAGS_mingw = -f win64
 ARFLAGS_mingw = cr $@
-LDFLAGS_mingw = -Wl,--force-exe-suffix
 
 LDFLAGS_so = -Wl,-soname,$(soname)
 
 ifeq ($(arch),mingw)
   CC=x86_64-w64-mingw32-gcc
   AR=x86_64-w64-mingw32-ar
+  AS=yasm
+  LDFLAGS += -Wl,--force-exe-suffix
+  SIM=wine
+  EXT=.exe
+  CLEANFILES+=*.exe
 endif
 
 # arch=noarch build options
@@ -86,9 +94,22 @@ ifeq ($(arch),noarch)
   host_cpu=base_aliases
 endif
 
+# arch=aarch64 build options
+ifeq ($(lib_debug),1)
+  ASFLAGS_aarch64 = -g -c
+else
+  ASFLAGS_aarch64 = -c
+endif
+
+ARFLAGS_aarch64 = cr $@
+ifeq ($(arch),aarch64)
+  AS=$(CC) -D__ASSEMBLY__
+  SIM=
+endif
+
 ASFLAGS_Darwin = -f macho64 --prefix=_
 ARFLAGS_Darwin = -r $@
-ifeq ($(arch),Darwin)
+ifeq ($(shell uname),Darwin)
   LDFLAGS_so =
   STRIP_gcc  =
 endif
@@ -98,15 +119,23 @@ CFLAGS   = $(CFLAGS_$(arch)) $(CFLAGS_$(CC)) $(DEBUG) -O2 $(DEFINES) $(INCLUDE)
 ASFLAGS  = $(ASFLAGS_$(arch)) $(ASFLAGS_$(CC)) $(DEBUG_$(AS)) $(DEFINES) $(INCLUDE)
 ARFLAGS  = $(ARFLAGS_$(arch))
 DEFINES += $(addprefix -D , $D)
+CLEANFILES += $(O) *.o *.a $(all_tests) $(bin_PROGRAMS) $(lib_name) $(so_lib_name) $(all_llvm_fuzz_tests)
+
+# set host_cpu=base_aliases for unsupported CPUs
+ifeq ($(filter aarch64 x86_%,$(host_cpu)),)
+  host_cpu=base_aliases
+endif
+
+other_tests += $(other_tests_$(host_cpu))
 
 lsrc += $(lsrc_$(host_cpu))
 O = bin
-lobj  += $(patsubst %.c,%.o,$(patsubst %.asm,%.o,$(lsrc) $(lsrc_intrinsic)))
+lobj  += $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(patsubst %.asm,%.o,$(lsrc) $(lsrc_intrinsic))))
 objs  = $(addprefix $(O)/,$(notdir $(lobj)))
 
 
 lib_name ?= isa-l.a
-default: lib slib
+default: lib slib progs
 
 # Defaults for windows build
 ifeq ($(arch),win64)
@@ -121,28 +150,67 @@ unit_testswin64 = $(unit_tests)
 exampleswin64 = $(examples)
 perf_testswin64 = $(perf_tests)
 
+
 # Build and run unit tests, performance tests, etc.
 all_tests = $(notdir $(sort $(perf_tests) $(check_tests) $(unit_tests) $(examples) $(other_tests)))
 all_unit_tests = $(notdir $(sort $(check_tests) $(unit_tests)))
 all_perf_tests = $(notdir $(sort $(perf_tests)))
 all_check_tests = $(notdir $(sort $(check_tests)))
+all_llvm_fuzz_tests = $(notdir $(sort $(llvm_fuzz_tests)))
 
 $(all_unit_tests): % : %.c $(lib_name)
 $(all_perf_tests): % : %.c $(lib_name)
 $(sort $(notdir $(examples))): % : %.c $(lib_name)
 $(sort $(notdir $(other_tests))): % : %.c $(lib_name)
 
+$(all_llvm_fuzz_tests): FUZZLINK = -lFuzzer
+$(all_llvm_fuzz_tests): CFLAGS += -fsanitize-coverage=trace-pc-guard -fsanitize=address
+$(all_llvm_fuzz_tests): CXXFLAGS += -fsanitize-coverage=trace-pc-guard -fsanitize=address
+$(all_llvm_fuzz_tests): % : %.o $(lib_name)
+       $(CXX) $(CXXFLAGS)  $^ $(LDLIBS) $(FUZZLINK) -o $@
+
+
+# Check for modern as
+test-as = $(shell hash printf && printf $(3) > $(2) && $(AS) $(ASFLAGS) ${tmpf} -o /dev/null 2> /dev/null && echo $(1) || echo $(4))
+as_4  := "pblendvb xmm2, xmm1;"
+as_6  := "vinserti32x8 zmm0, ymm1, 1;"
+as_10 := "vpcompressb zmm0 {k1}, zmm1;"
+
+tmpf := $(shell mktemp)
+as_feature_level := $(call test-as, 4,  $(tmpf), $(as_4),  $(as_feature_level))
+as_feature_level := $(call test-as, 6,  $(tmpf), $(as_6),  $(as_feature_level))
+as_feature_level := $(call test-as, 10, $(tmpf), $(as_10), $(as_feature_level))
+tmpf := $(shell rm ${tmpf})
+
+ifneq ($(findstring $(as_feature_level),6 10),)
+  D_HAVE_AS_KNOWS_AVX512_y := -DHAVE_AS_KNOWS_AVX512
+endif
+
+CFLAGS  += -DAS_FEATURE_LEVEL=$(as_feature_level) $(D_HAVE_AS_KNOWS_AVX512_y)
+ASFLAGS += -DAS_FEATURE_LEVEL=$(as_feature_level) $(D_HAVE_AS_KNOWS_AVX512_y)
+
+
+# Check for pthreads
+have_threads ?= $(shell printf "\#include <pthread.h>\nint main(void){return 0;}\n" | $(CC) -x c - -o /dev/null -lpthread && echo y )
+THREAD_LD_$(have_threads) := -lpthread
+THREAD_CFLAGS_$(have_threads) := -DHAVE_THREADS
+
+progs: $(bin_PROGRAMS)
+$(bin_PROGRAMS): CFLAGS += -DVERSION=\"$(version)\"
+$(bin_PROGRAMS): LDLIBS += $(THREAD_LD_y)
+$(bin_PROGRAMS): CFLAGS += $(THREAD_CFLAGS_y)
 sim test trace: $(addsuffix .run,$(all_unit_tests))
 perf: $(addsuffix .run,$(all_perf_tests))
 check: $(addsuffix .run,$(all_check_tests))
 ex:   $(notdir $(examples))
 all: lib $(all_tests)
 other: $(notdir $(other_tests))
+llvm_fuzz_tests: $(all_llvm_fuzz_tests)
 tests: $(all_unit_tests)
 perfs: $(all_perf_tests)
 checks: $(all_check_tests)
-check test perf: SIM=
-trace: SIMFLAGS = -debugtrace
+trace: SIM=sde -debugtrace --
+sim: SIM=sde --
 check test sim:
        @echo Finished running $@
 
@@ -151,16 +219,25 @@ $(O): ; mkdir -p $(O)
 
 # Build rule to run tests
 $(addsuffix .run,$(all_tests)): %.run : %
-       $(SIM) ./$<
+       $(SIM) ./$<$(EXT)
        @echo Completed run: $<
 
 # Other build rules
 msg = $(if $(DEBUG),DEBUG) $(patsubst 32,32-bit,$(host_cpu)) $D
 
+# yasm/nasm assembly files
 $(O)/%.o: %.asm
        @echo "  ---> Building $< $(msg)"
        @$(AS) $(ASFLAGS) -o $@ $<
 
+# gcc assembly files
+$(O)/%.o: $(host_cpu)/%.S
+       @echo "  ---> Building $< $(msg)"
+       @$(AS) $(ASFLAGS) -o $@ $<
+
+$(O)/%.o   : $(host_cpu)/%.c
+       @echo "  ---> Building $< $(msg)"
+       @$(COMPILE.c) $(OUTPUT_OPTION) $<
 $(O)/%.o %.o: %.c
        @echo "  ---> Building $< $(msg)"
        @$(COMPILE.c) $(OUTPUT_OPTION) $<
@@ -169,6 +246,10 @@ $(all_tests):
        @echo "  ---> Building Test $@ $(msg)"
        @$(LINK.o) $(CFLAGS)  $^ $(LDLIBS) -o $@
 
+$(bin_PROGRAMS): % : %_cli.c $(lib_name)
+       @echo "  ---> Building Programs $@ $(msg)"
+       @$(LINK.o) $(CFLAGS)  $^ $(LDLIBS) -o $@
+
 
 # Target to build lib files
 lib: $(lib_name)
@@ -185,7 +266,9 @@ endif
 $(lib_name): $(objs)
        @echo "  ---> Creating Lib $@"
        @$(AR) $(ARFLAGS) $^
+ifneq ($(lib_debug),1)
        @$(STRIP_$(CC))
+endif
 
 
 # Target for shared lib
@@ -196,12 +279,15 @@ soname      = $(so_lib_inst).$(word 1, $(subst ., ,$(version)))
 
 slib: $(so_lib_name)
 aobjs  += $(addprefix $(O)/,$(patsubst %.asm,%.o,$(filter %.asm,$(notdir $(lsrc) $(lsrc_intrinsic)))))
+aobjs  += $(addprefix $(O)/,$(patsubst %.S,%.o,$(filter %.S,$(notdir $(lsrc) $(lsrc_intrinsic)))))
 shared_objs  += $(addprefix $(O)/shared_ver_,$(patsubst %.c,%.o,$(filter %.c,$(notdir $(lsrc) $(lsrc_intrinsic)))))
 
 $(O)/shared_ver_%.o: %.c
        @echo "  ---> Building shared $< $(msg)"
        @$(COMPILE.c) $(OUTPUT_OPTION) $<
-
+$(O)/shared_ver_%.o: $(host_cpu)/%.c
+       @echo "  ---> Building shared $< $(msg)"
+       @$(COMPILE.c) $(OUTPUT_OPTION) $<
 ifneq ($(lib_debug),1)
  $(so_lib_name): DEBUG_$(AS)=
  $(so_lib_name): DEBUG=
@@ -220,6 +306,11 @@ $(so_lib_name): $(shared_objs) $(aobjs)
 isa-l.h:
        @echo 'Building $@'
        @echo ''                        >> $@
+       @echo '/**'                     >> $@
+       @echo ' *  @file isa-l.h'       >> $@
+       @echo ' *  @brief Include for ISA-L library' >> $@
+       @echo ' */'                     >> $@
+       @echo ''                        >> $@
        @echo '#ifndef _ISAL_H_'        >> $@
        @echo '#define _ISAL_H_'        >> $@
        @echo ''                        >> $@
@@ -235,9 +326,10 @@ isa-l.h:
 
 # Target for install
 prefix = /usr/local
-install_dirs = $(prefix)/lib $(prefix)/include/isa-l
+man1dir ?= $(prefix)/share/man/man1
+install_dirs = $(prefix)/lib $(prefix)/include/isa-l $(prefix)/bin $(man1dir)
 $(install_dirs): ; mkdir -p $@
-install: $(sort $(extern_hdrs)) | $(install_dirs) $(lib_name) $(so_lib_name) isa-l.h
+install: $(sort $(extern_hdrs)) | $(install_dirs) $(lib_name) $(so_lib_name) isa-l.h $(bin_PROGRAMS)
        install -m 644 $(lib_name) $(prefix)/lib/libisal.a
        install -m 644 $^ $(prefix)/include/isa-l/.
        install -m 664 isa-l.h $(prefix)/include/.
@@ -251,6 +343,8 @@ else
        which libtool && libtool --mode=finish $(prefix)/lib || \
        echo 'Lib installed at $(prefix)/lib. Run system-dependent programs to add shared lib path.'
 endif
+       install -m 774 $(bin_PROGRAMS) $(prefix)/bin/.
+       install -m 664 $(dist_man_MANS) $(man1dir)/.
 
 uninstall:
        $(RM) $(prefix)/lib/libisal.a
@@ -260,6 +354,8 @@ uninstall:
        $(RM) -r $(prefix)/include/isa-l
        $(RM) $(prefix)/include/isa-l.h
        $(RM) $(prefix)/lib/$(basename $(so_lib_inst)).dylib
+       $(RM) $(prefix)/bin/$(notdir $(bin_PROGRAMS))
+       $(RM) $(man1dir)/$(notdir $(dist_man_MANS))
 
 # Collect performance data
 rpt_name = perf_report_$(shell uname -n)_$(shell date +%y%m%d).perf
@@ -273,7 +369,7 @@ perf_report:
 
 clean:
        @echo Cleaning up
-       @$(RM) -r $(O) *.o *.a $(all_tests) $(lib_name) $(so_lib_name)
+       @$(RM) -r $(CLEANFILES)
 
 
 doc: isa-l.h
diff --git a/ceph/src/isa-l/mem/Makefile.am b/ceph/src/isa-l/mem/Makefile.am
new file mode 100644 (file)
index 0000000..c864f66
--- /dev/null
@@ -0,0 +1,48 @@
+########################################################################
+#  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Intel Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+include mem/aarch64/Makefile.am
+
+lsrc        +=         mem/mem_zero_detect_base.c
+
+lsrc_base_aliases += mem/mem_zero_detect_base_aliases.c
+lsrc_ppc64le      += mem/mem_zero_detect_base_aliases.c
+
+lsrc_x86_64 +=         mem/mem_zero_detect_avx.asm \
+               mem/mem_zero_detect_sse.asm \
+               mem/mem_multibinary.asm
+
+extern_hdrs += include/mem_routines.h
+
+other_src   +=  include/test.h \
+               include/types.h
+
+check_tests  +=  mem/mem_zero_detect_test
+
+perf_tests  +=  mem/mem_zero_detect_perf
diff --git a/ceph/src/isa-l/mem/aarch64/Makefile.am b/ceph/src/isa-l/mem/aarch64/Makefile.am
new file mode 100644 (file)
index 0000000..c186598
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+lsrc_aarch64 += \
+       mem/aarch64/mem_zero_detect_neon.S \
+       mem/aarch64/mem_multibinary_arm.S  \
+       mem/aarch64/mem_aarch64_dispatcher.c
diff --git a/ceph/src/isa-l/mem/aarch64/mem_aarch64_dispatcher.c b/ceph/src/isa-l/mem/aarch64/mem_aarch64_dispatcher.c
new file mode 100644 (file)
index 0000000..0dfe3a3
--- /dev/null
@@ -0,0 +1,39 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include <aarch64_multibinary.h>
+
+DEFINE_INTERFACE_DISPATCHER(isal_zero_detect)
+{
+       unsigned long auxval = getauxval(AT_HWCAP);
+       if (auxval & HWCAP_ASIMD)
+               return PROVIDER_INFO(mem_zero_detect_neon);
+
+       return PROVIDER_BASIC(mem_zero_detect);
+
+}
diff --git a/ceph/src/isa-l/mem/aarch64/mem_multibinary_arm.S b/ceph/src/isa-l/mem/aarch64/mem_multibinary_arm.S
new file mode 100644 (file)
index 0000000..baac3ca
--- /dev/null
@@ -0,0 +1,33 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include <aarch64_multibinary.h>
+
+mbin_interface isal_zero_detect
+
diff --git a/ceph/src/isa-l/mem/aarch64/mem_zero_detect_neon.S b/ceph/src/isa-l/mem/aarch64/mem_zero_detect_neon.S
new file mode 100644 (file)
index 0000000..6f93ff6
--- /dev/null
@@ -0,0 +1,243 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.text
+.arch armv8-a
+
+/*int mem_zero_detect_neon(void *buf, size_t n)*/
+
+// input: buf -> x0
+// input: n -> x1
+// output: -> x0 (true or false)
+
+.global mem_zero_detect_neon
+.type mem_zero_detect_neon, %function
+
+mem_zero_detect_neon:
+       cmp     x1, #(16*24-1)
+       b.ls    .loop_16x24_end
+
+.loop_16x24: // 16x24 block loop
+
+       ldr     q0, [x0]
+       ldr     q1, [x0, #16]
+       ldr     q2, [x0, #(16*2)]
+       ldr     q3, [x0, #(16*3)]
+       ldr     q4, [x0, #(16*4)]
+       ldr     q5, [x0, #(16*5)]
+       ldr     q6, [x0, #(16*6)]
+       ldr     q7, [x0, #(16*7)]
+       ldr     q16, [x0, #(16*8)]
+       ldr     q17, [x0, #(16*9)]
+       ldr     q18, [x0, #(16*10)]
+       ldr     q19, [x0, #(16*11)]
+       ldr     q20, [x0, #(16*12)]
+       ldr     q21, [x0, #(16*13)]
+       ldr     q22, [x0, #(16*14)]
+       ldr     q23, [x0, #(16*15)]
+       ldr     q24, [x0, #(16*16)]
+       ldr     q25, [x0, #(16*17)]
+       ldr     q26, [x0, #(16*18)]
+       ldr     q27, [x0, #(16*19)]
+       ldr     q28, [x0, #(16*20)]
+       ldr     q29, [x0, #(16*21)]
+       ldr     q30, [x0, #(16*22)]
+       ldr     q31, [x0, #(16*23)]
+
+       add     x0, x0, #(16*24)
+
+       orr     v0.16b, v0.16b, v1.16b
+       orr     v2.16b, v2.16b, v3.16b
+       orr     v4.16b, v4.16b, v5.16b
+       orr     v6.16b, v6.16b, v7.16b
+       orr     v16.16b, v16.16b, v17.16b
+       orr     v18.16b, v18.16b, v19.16b
+       orr     v20.16b, v20.16b, v21.16b
+       orr     v22.16b, v22.16b, v23.16b
+       orr     v24.16b, v24.16b, v25.16b
+       orr     v26.16b, v26.16b, v27.16b
+       orr     v28.16b, v28.16b, v29.16b
+       orr     v30.16b, v30.16b, v31.16b
+
+       orr     v0.16b, v0.16b, v2.16b
+       orr     v4.16b, v4.16b, v6.16b
+       orr     v16.16b, v16.16b, v18.16b
+       orr     v20.16b, v20.16b, v22.16b
+       orr     v24.16b, v24.16b, v26.16b
+       orr     v28.16b, v28.16b, v30.16b
+
+       orr     v0.16b, v0.16b, v4.16b
+       orr     v16.16b, v16.16b, v20.16b
+       orr     v24.16b, v24.16b, v28.16b
+
+       orr     v0.16b, v0.16b, v16.16b
+       orr     v0.16b, v0.16b, v24.16b
+
+       mov     x3, v0.d[0]
+       mov     x2, v0.d[1]
+       orr     x2, x3, x2
+       cbnz    x2, .fail_exit
+
+       // loop condition check
+       sub     x1, x1, #(16*24)
+       cmp     x1, #(16*24-1)
+       b.hi    .loop_16x24
+
+.loop_16x24_end:
+       cmp     x1, #(16*8-1)
+       b.ls    .loop_16x8_end
+
+.loop_16x8: // 16x8 block loop
+       ldr     q0, [x0]
+       ldr     q1, [x0, #16]
+       ldr     q2, [x0, #(16*2)]
+       ldr     q3, [x0, #(16*3)]
+       ldr     q4, [x0, #(16*4)]
+       ldr     q5, [x0, #(16*5)]
+       ldr     q6, [x0, #(16*6)]
+       ldr     q7, [x0, #(16*7)]
+
+       add     x0, x0, #(16*8)
+
+       orr     v0.16b, v0.16b, v1.16b
+       orr     v2.16b, v2.16b, v3.16b
+       orr     v4.16b, v4.16b, v5.16b
+       orr     v6.16b, v6.16b, v7.16b
+
+       orr     v0.16b, v0.16b, v2.16b
+       orr     v4.16b, v4.16b, v6.16b
+       orr     v0.16b, v0.16b, v4.16b
+
+       mov     x3, v0.d[0]
+       mov     x2, v0.d[1]
+       orr     x2, x3, x2
+       cbnz    x2, .fail_exit
+
+       sub     x1, x1, #(16*8)
+       cmp     x1, #(16*8-1)
+       b.hi    .loop_16x8
+
+.loop_16x8_end:
+       cmp     x1, #(8*8-1)
+       b.ls    .loop_8x8_end
+
+.loop_8x8: // 8x8 block loop
+       ldp     x2, x3, [x0]
+       ldp     x4, x5, [x0, #16]
+       ldp     x6, x7, [x0, #32]
+       ldp     x8, x9, [x0, #48]
+
+       add     x0, x0, #(8*8)
+
+       orr     x2, x2, x3
+       orr     x4, x4, x5
+       orr     x6, x6, x7
+       orr     x8, x8, x9
+       orr     x2, x2, x4
+       orr     x6, x6, x8
+       orr     x2, x2, x6
+
+       cbnz    x2, .fail_exit
+
+       sub     x1, x1, #(8*8)
+       cmp     x1, #(8*8-1)
+       b.hi    .loop_8x8
+
+.loop_8x8_end:
+       cmp     x1, #(8-1)
+       b.ls    .handle_remainder
+
+.loop_8: // loop per 8bytes
+       ldr     x2, [x0]
+       add     x0, x0, #8
+       cbnz    x2, .fail_exit
+
+       sub     x1, x1, #8
+       cmp     x1, #7
+       b.hi    .loop_8
+
+.loop_8_end:
+
+       // check remaining bytes
+.handle_remainder:
+       mov     w2, #0
+
+       cmp     x1, #0
+       beq     .handle_reminder_end
+       cmp     x1, #1
+       beq     .case1
+       cmp     x1, #2
+       beq     .case2
+       cmp     x1, #3
+       beq     .case3
+       cmp     x1, #4
+       beq     .case4
+       cmp     x1, #5
+       beq     .case5
+       cmp     x1, #6
+       beq     .case6
+
+.case7: // case7 drop here directly
+       ldrb    w3, [x0]
+       add     x0, x0, #1
+       orr     w2, w2, w3
+.case6:
+       ldrb    w3, [x0]
+       add     x0, x0, #1
+       orr     w2, w2, w3
+.case5:
+       ldrb    w3, [x0]
+       add     x0, x0, #1
+       orr     w2, w2, w3
+.case4:
+       ldr     w3, [x0]
+       orr     w2, w2, w3
+       b       .handle_reminder_end
+.case3:
+       ldrb    w3, [x0]
+       add     x0, x0, #1
+       orr     w2, w2, w3
+.case2:
+       ldrh    w3, [x0]
+       orr     w2, w2, w3
+       b       .handle_reminder_end
+.case1:
+       ldrb    w3, [x0]
+       orr     w2, w2, w3
+
+.handle_reminder_end:
+       cbz     w2, .pass_exit
+
+.fail_exit:
+       mov     w0, #0xffffffff
+       ret
+
+.pass_exit:
+       mov     w0, #0x0
+       ret
diff --git a/ceph/src/isa-l/mem/mem_multibinary.asm b/ceph/src/isa-l/mem/mem_multibinary.asm
new file mode 100644 (file)
index 0000000..38f63e2
--- /dev/null
@@ -0,0 +1,42 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+%include "multibinary.asm"
+
+default rel
+[bits 64]
+
+extern mem_zero_detect_avx
+extern mem_zero_detect_sse
+extern mem_zero_detect_base
+
+mbin_interface isal_zero_detect
+
+mbin_dispatch_init5 isal_zero_detect, mem_zero_detect_base, mem_zero_detect_sse, mem_zero_detect_avx, mem_zero_detect_avx
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_avx.asm b/ceph/src/isa-l/mem/mem_zero_detect_avx.asm
new file mode 100644 (file)
index 0000000..871b652
--- /dev/null
@@ -0,0 +1,189 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0  rdi
+ %define arg1  rsi
+ %define arg2  rdx
+ %define arg3  rcx
+ %define arg4  r8
+ %define arg5  r9
+ %define tmp   r11
+ %define tmpb  r11b
+ %define tmp3  arg4
+ %define return rax
+ %define func(x) x:
+ %define FUNC_SAVE
+ %define FUNC_RESTORE
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0  rcx
+ %define arg1  rdx
+ %define arg2  r8
+ %define arg3  r9
+ %define tmp   r11
+ %define tmpb  r11b
+ %define tmp3  r10
+ %define return rax
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       end_prolog
+ %endmacro
+ %macro FUNC_RESTORE 0
+ %endmacro
+%endif
+
+%define src arg0
+%define        len arg1
+%define ptr arg2
+%define pos return
+
+default rel
+
+[bits 64]
+section .text
+
+align 16
+global mem_zero_detect_avx:ISAL_SYM_TYPE_FUNCTION
+func(mem_zero_detect_avx)
+       FUNC_SAVE
+       mov     pos, 0
+       sub     len, 4*32
+       jle     .mem_z_small_block
+
+.mem_z_loop:
+       vmovdqu ymm0, [src+pos]
+       vmovdqu ymm1, [src+pos+1*32]
+       vmovdqu ymm2, [src+pos+2*32]
+       vmovdqu ymm3, [src+pos+3*32]
+       vptest  ymm0, ymm0
+       jnz     .return_fail
+       vptest  ymm1, ymm1
+       jnz     .return_fail
+       vptest  ymm2, ymm2
+       jnz     .return_fail
+       vptest  ymm3, ymm3
+       jnz     .return_fail
+       add     pos, 4*32
+       cmp     pos, len
+       jl      .mem_z_loop
+
+.mem_z_last_block:
+       vmovdqu ymm0, [src+len]
+       vmovdqu ymm1, [src+len+1*32]
+       vmovdqu ymm2, [src+len+2*32]
+       vmovdqu ymm3, [src+len+3*32]
+       vptest  ymm0, ymm0
+       jnz     .return_fail
+       vptest  ymm1, ymm1
+       jnz     .return_fail
+       vptest  ymm2, ymm2
+       jnz     .return_fail
+       vptest  ymm3, ymm3
+       jnz     .return_fail
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+
+.mem_z_small_block:
+       add     len, 4*32
+       cmp     len, 2*32
+       jl      .mem_z_lt64
+       vmovdqu ymm0, [src]
+       vmovdqu ymm1, [src+32]
+       vmovdqu ymm2, [src+len-2*32]
+       vmovdqu ymm3, [src+len-1*32]
+       vptest  ymm0, ymm0
+       jnz     .return_fail
+       vptest  ymm1, ymm1
+       jnz     .return_fail
+       vptest  ymm2, ymm2
+       jnz     .return_fail
+       vptest  ymm3, ymm3
+       jnz     .return_fail
+       jmp     .return_pass
+
+.mem_z_lt64:
+       cmp     len, 32
+       jl      .mem_z_lt32
+       vmovdqu ymm0, [src]
+       vmovdqu ymm1, [src+len-32]
+       vptest  ymm0, ymm0
+       jnz     .return_fail
+       vptest  ymm1, ymm1
+       jnz     .return_fail
+       jmp     .return_pass
+
+
+.mem_z_lt32:
+       cmp     len, 16
+       jl      .mem_z_lt16
+       vmovdqu xmm0, [src]
+       vmovdqu xmm1, [src+len-16]
+       vptest  xmm0, xmm0
+       jnz     .return_fail
+       vptest  xmm1, xmm1
+       jnz     .return_fail
+       jmp     .return_pass
+
+
+.mem_z_lt16:
+       cmp     len, 8
+       jl      .mem_z_lt8
+       mov     tmp, [src]
+       mov     tmp3,[src+len-8]
+       or      tmp, tmp3
+       test    tmp, tmp
+       jnz     .return_fail
+       jmp     .return_pass
+
+.mem_z_lt8:
+       cmp     len, 0
+       je      .return_pass
+.mem_z_1byte_loop:
+       mov     tmpb, [src+pos]
+       cmp     tmpb, 0
+       jnz     .return_fail
+       add     pos, 1
+       cmp     pos, len
+       jl      .mem_z_1byte_loop
+       jmp     .return_pass
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_base.c b/ceph/src/isa-l/mem/mem_zero_detect_base.c
new file mode 100644 (file)
index 0000000..2353016
--- /dev/null
@@ -0,0 +1,69 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdint.h>
+#include <stddef.h>
+#include "unaligned.h"
+
+int mem_zero_detect_base(void *buf, size_t n)
+{
+       uint8_t *c = buf;
+       uintmax_t a = 0;
+
+       // Check buffer in native machine width comparisons
+       while (n >= sizeof(uintmax_t)) {
+               n -= sizeof(uintmax_t);
+               if (load_umax(c) != 0)
+                       return -1;
+               c += sizeof(uintmax_t);
+       }
+
+       // Check remaining bytes
+       switch (n) {
+       case 7:
+               a |= *c++;      // fall through to case 6,5,4
+       case 6:
+               a |= *c++;      // fall through to case 5,4
+       case 5:
+               a |= *c++;      // fall through to case 4
+       case 4:
+               a |= load_u32(c);
+               break;
+       case 3:
+               a |= *c++;      // fall through to case 2
+       case 2:
+               a |= load_u16(c);
+               break;
+       case 1:
+               a |= *c;
+               break;
+       }
+
+       return (a == 0) ? 0 : -1;
+}
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_base_aliases.c b/ceph/src/isa-l/mem/mem_zero_detect_base_aliases.c
new file mode 100644 (file)
index 0000000..8c75b06
--- /dev/null
@@ -0,0 +1,38 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdint.h>
+#include "mem_routines.h"
+
+int mem_zero_detect_base(void *buf, size_t n);
+
+int isal_zero_detect(void *mem, size_t len)
+{
+       return mem_zero_detect_base(mem, len);
+}
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_perf.c b/ceph/src/isa-l/mem/mem_zero_detect_perf.c
new file mode 100644 (file)
index 0000000..90a3088
--- /dev/null
@@ -0,0 +1,60 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mem_routines.h"
+#include "test.h"
+#include "types.h"
+
+#define TEST_LEN     8*1024
+#define TEST_TYPE_STR "_warm"
+
+int main(int argc, char *argv[])
+{
+       int val = 0;
+       void *buf;
+       struct perf start;
+
+       printf("Test mem_zero_detect_perf %d bytes\n", TEST_LEN);
+
+       if (posix_memalign(&buf, 64, TEST_LEN)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+
+       memset(buf, 0, TEST_LEN);
+       BENCHMARK(&start, BENCHMARK_TIME, val |= isal_zero_detect(buf, TEST_LEN));
+
+       printf("mem_zero_detect_perf" TEST_TYPE_STR ": ");
+       perf_print(start, (long long)TEST_LEN);
+
+       return 0;
+}
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_sse.asm b/ceph/src/isa-l/mem/mem_zero_detect_sse.asm
new file mode 100644 (file)
index 0000000..63dad4f
--- /dev/null
@@ -0,0 +1,176 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+;
+;  Redistribution and use in source and binary forms, with or without
+;  modification, are permitted provided that the following conditions
+;  are met:
+;    * Redistributions of source code must retain the above copyright
+;      notice, this list of conditions and the following disclaimer.
+;    * Redistributions in binary form must reproduce the above copyright
+;      notice, this list of conditions and the following disclaimer in
+;      the documentation and/or other materials provided with the
+;      distribution.
+;    * Neither the name of Intel Corporation nor the names of its
+;      contributors may be used to endorse or promote products derived
+;      from this software without specific prior written permission.
+;
+;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%include "reg_sizes.asm"
+
+%ifidn __OUTPUT_FORMAT__, elf64
+ %define arg0  rdi
+ %define arg1  rsi
+ %define arg2  rdx
+ %define arg3  rcx
+ %define arg4  r8
+ %define arg5  r9
+ %define tmp   r11
+ %define tmpb  r11b
+ %define tmp3  arg4
+ %define return rax
+ %define func(x) x:
+ %define FUNC_SAVE
+ %define FUNC_RESTORE
+%endif
+
+%ifidn __OUTPUT_FORMAT__, win64
+ %define arg0  rcx
+ %define arg1  rdx
+ %define arg2  r8
+ %define arg3  r9
+ %define tmp   r11
+ %define tmpb  r11b
+ %define tmp3  r10
+ %define return rax
+ %define func(x) proc_frame x
+ %macro FUNC_SAVE 0
+       end_prolog
+ %endmacro
+ %macro FUNC_RESTORE 0
+ %endmacro
+%endif
+
+%define src arg0
+%define        len arg1
+%define ptr arg2
+%define pos return
+
+default rel
+
+[bits 64]
+section .text
+
+align 16
+global mem_zero_detect_sse:ISAL_SYM_TYPE_FUNCTION
+func(mem_zero_detect_sse)
+       FUNC_SAVE
+       mov     pos, 0
+       sub     len, 4*16
+       jle     .mem_z_small_block
+
+.mem_z_loop:
+       movdqu  xmm0, [src+pos]
+       movdqu  xmm1, [src+pos+1*16]
+       movdqu  xmm2, [src+pos+2*16]
+       movdqu  xmm3, [src+pos+3*16]
+       ptest   xmm0, xmm0
+       jnz     .return_fail
+       ptest   xmm1, xmm1
+       jnz     .return_fail
+       ptest   xmm2, xmm2
+       jnz     .return_fail
+       ptest   xmm3, xmm3
+       jnz     .return_fail
+       add     pos, 4*16
+       cmp     pos, len
+       jl      .mem_z_loop
+
+.mem_z_last_block:
+       movdqu  xmm0, [src+len]
+       movdqu  xmm1, [src+len+1*16]
+       movdqu  xmm2, [src+len+2*16]
+       movdqu  xmm3, [src+len+3*16]
+       ptest   xmm0, xmm0
+       jnz     .return_fail
+       ptest   xmm1, xmm1
+       jnz     .return_fail
+       ptest   xmm2, xmm2
+       jnz     .return_fail
+       ptest   xmm3, xmm3
+       jnz     .return_fail
+
+.return_pass:
+       mov     return, 0
+       FUNC_RESTORE
+       ret
+
+
+.mem_z_small_block:
+       add     len, 4*16
+       cmp     len, 2*16
+       jl      .mem_z_lt32
+       movdqu  xmm0, [src]
+       movdqu  xmm1, [src+16]
+       movdqu  xmm2, [src+len-2*16]
+       movdqu  xmm3, [src+len-1*16]
+       ptest   xmm0, xmm0
+       jnz     .return_fail
+       ptest   xmm1, xmm1
+       jnz     .return_fail
+       ptest   xmm2, xmm2
+       jnz     .return_fail
+       ptest   xmm3, xmm3
+       jnz     .return_fail
+       jmp     .return_pass
+
+.mem_z_lt32:
+       cmp     len, 16
+       jl      .mem_z_lt16
+       movdqu  xmm0, [src]
+       movdqu  xmm1, [src+len-16]
+       ptest   xmm0, xmm0
+       jnz     .return_fail
+       ptest   xmm1, xmm1
+       jnz     .return_fail
+       jmp     .return_pass
+
+.mem_z_lt16:
+       cmp     len, 8
+       jl      .mem_z_lt8
+       mov     tmp, [src]
+       mov     tmp3,[src+len-8]
+       or      tmp, tmp3
+       test    tmp, tmp
+       jnz     .return_fail
+       jmp     .return_pass
+
+.mem_z_lt8:
+       cmp     len, 0
+       je      .return_pass
+.mem_z_1byte_loop:
+       mov     tmpb, [src+pos]
+       cmp     tmpb, 0
+       jnz     .return_fail
+       add     pos, 1
+       cmp     pos, len
+       jl      .mem_z_1byte_loop
+       jmp     .return_pass
+
+.return_fail:
+       mov     return, 1
+       FUNC_RESTORE
+       ret
+
+endproc_frame
diff --git a/ceph/src/isa-l/mem/mem_zero_detect_test.c b/ceph/src/isa-l/mem/mem_zero_detect_test.c
new file mode 100644 (file)
index 0000000..12d5f4b
--- /dev/null
@@ -0,0 +1,226 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "mem_routines.h"
+#include "types.h"
+
+#define TEST_MEM  10*1024*1024
+#define TEST_LEN  8*1024
+#define RAND_ALIGN   32
+#define BORDER_BYTES (5*RAND_ALIGN + 7)
+
+#ifndef RANDOMS
+# define RANDOMS 2000
+#endif
+#ifndef TEST_SEED
+# define TEST_SEED 0x1234
+#endif
+
+int main(int argc, char *argv[])
+{
+       int i, j, sign;
+       long long r, l;
+       void *buf;
+       unsigned char *a;
+       int failures = 0, ret_neg = 1;
+
+       printf("mem_zero_detect_test %d bytes, %d randoms, seed=0x%x ", TEST_MEM, RANDOMS,
+              TEST_SEED);
+       if (posix_memalign(&buf, 64, TEST_MEM)) {
+               printf("alloc error: Fail");
+               return -1;
+       }
+
+       srand(TEST_SEED);
+
+       // Test full zero buffer
+       memset(buf, 0, TEST_MEM);
+       failures = isal_zero_detect(buf, TEST_MEM);
+
+       if (failures) {
+               printf("Fail large buf test\n");
+               return failures;
+       }
+       putchar('.');
+
+       // Test small buffers
+       for (i = 0; i < TEST_LEN; i++) {
+               failures |= isal_zero_detect(buf, i);
+               if (failures) {
+                       printf("Fail len=%d\n", i);
+                       return failures;
+               }
+       }
+       putchar('.');
+
+       // Test small buffers near end of alloc region
+       a = buf;
+       for (i = 0; i < TEST_LEN; i++)
+               failures |= isal_zero_detect(&a[TEST_LEN - i], i);
+
+       if (failures) {
+               printf("Fail:\n");
+               return failures;
+       }
+       putchar('.');
+
+       // Test for detect non zero
+       a[TEST_MEM / 2] = 1;
+       ret_neg = isal_zero_detect(a, TEST_MEM);
+       if (ret_neg == 0) {
+               printf("Fail on not detect\n");
+               return -1;
+       }
+       a[TEST_MEM / 2] = 0;
+       putchar('.');
+
+       // Test various non-zero offsets
+       for (i = 0; i < BORDER_BYTES; i++) {
+               for (j = 0; j < CHAR_BIT; j++) {
+                       a[i] = 1 << j;
+                       ret_neg = isal_zero_detect(a, TEST_MEM);
+                       if (ret_neg == 0) {
+                               printf("Fail on not detect offsets %d, %d\n", i, j);
+                               return -1;
+                       }
+                       a[i] = 0;
+               }
+       }
+       putchar('.');
+       fflush(0);
+
+       // Test random non-zero offsets
+       for (i = 0; i < RANDOMS; i++) {
+               r = rand();
+               r = (r % TEST_LEN) ^ (r & (RAND_ALIGN - 1));
+               if (r >= TEST_LEN)
+                       continue;
+
+               a[r] = 1 << (r & (CHAR_BIT - 1));
+               ret_neg = isal_zero_detect(a, TEST_MEM);
+               if (ret_neg == 0) {
+                       printf("Fail on not detect rand %d, e=%lld\n", i, r);
+                       return -1;
+               }
+               a[r] = 0;
+       }
+       putchar('.');
+       fflush(0);
+
+       // Test putting non-zero byte at end of buffer
+       for (i = 1; i < BORDER_BYTES; i++) {
+               for (j = 0; j < CHAR_BIT; j++) {
+                       a[TEST_MEM - i] = 1 << j;
+                       ret_neg = isal_zero_detect(a, TEST_MEM);
+                       if (ret_neg == 0) {
+                               printf("Fail on not detect rand offset=%d, idx=%d\n", i, j);
+                               return -1;
+                       }
+                       a[TEST_MEM - i] = 0;
+               }
+       }
+       putchar('.');
+
+       // Test various size buffers and non-zero offsets
+       for (l = 1; l < TEST_LEN; l++) {
+               for (i = 0; i < l + BORDER_BYTES; i++) {
+                       failures = isal_zero_detect(a, l);
+
+                       if (failures) {
+                               printf("Fail on detect non-zero with l=%lld\n", l);
+                               return -1;
+                       }
+
+                       a[i] = 1;
+                       ret_neg = isal_zero_detect(a, l);
+
+                       if ((i < l) && (ret_neg == 0)) {
+                               printf("Fail on non-zero buffer l=%lld err=%d\n", l, i);
+                               return -1;
+                       }
+                       if ((i >= l) && (ret_neg != 0)) {
+                               printf("Fail on bad pass detect l=%lld err=%d\n", l, i);
+                               return -1;
+                       }
+                       a[i] = 0;
+               }
+       }
+       putchar('.');
+
+       // Test random test size and non-zero error offsets
+       for (i = 0; i < RANDOMS; i++) {
+               r = rand();
+               r = (r % TEST_LEN) ^ (r & (RAND_ALIGN - 1));
+               l = r + 1 + (rand() & (CHAR_BIT - 1));
+               a[r] = 1 << (r & (CHAR_BIT - 1));
+               ret_neg = isal_zero_detect(a, l);
+               if (ret_neg == 0) {
+                       printf("Fail on not detect rand %d, l=%lld, e=%lld\n", i, l, r);
+                       return -1;
+               }
+               a[r] = 0;
+       }
+       putchar('.');
+       fflush(0);
+
+       // Test combinations of zero and non-zero buffers
+       for (i = 0; i < RANDOMS; i++) {
+               r = rand();
+               r = (r % TEST_LEN) ^ (r & (RAND_ALIGN - 1));
+               sign = rand() & 1 ? 1 : -1;
+               l = r + sign * (rand() & (2 * RAND_ALIGN - 1));
+
+               if ((l >= TEST_LEN) || (l < 0) || (r >= TEST_LEN))
+                       continue;
+
+               a[r] = 1 << (r & (CHAR_BIT - 1));
+               ret_neg = isal_zero_detect(a, l);
+
+               if ((r < l) && (ret_neg == 0)) {
+                       printf("Fail on non-zero rand buffer %d, l=%lld, e=%lld\n", i, l, r);
+                       return -1;
+               }
+               if ((r >= l) && (ret_neg != 0)) {
+                       printf("Fail on bad pass zero detect rand %d, l=%lld, e=%lld\n", i, l,
+                              r);
+                       return -1;
+               }
+
+               a[r] = 0;
+       }
+       putchar('.');
+       fflush(0);
+
+       printf(failures == 0 ? " Pass\n" : " Fail\n");
+       return failures;
+}
diff --git a/ceph/src/isa-l/programs/Makefile.am b/ceph/src/isa-l/programs/Makefile.am
new file mode 100644 (file)
index 0000000..46f2a23
--- /dev/null
@@ -0,0 +1,38 @@
+########################################################################
+#  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Intel Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+
+bin_PROGRAMS += programs/igzip
+programs_igzip_SOURCES = programs/igzip_cli.c
+programs_igzip_LDADD = libisal.la
+dist_man_MANS = programs/igzip.1
+other_src    += programs/igzip.1.h2m
+
+programs/igzip.1: % : %.h2m programs/igzip_cli.c
+       -help2man -o $@ -i $< -N ./programs/igzip
diff --git a/ceph/src/isa-l/programs/igzip.1 b/ceph/src/isa-l/programs/igzip.1
new file mode 100644 (file)
index 0000000..93429b3
--- /dev/null
@@ -0,0 +1,87 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.11.
+.TH IGZIP "1" "February 2020" "igzip command line interface 2.29.0" "User Commands"
+.SH NAME
+igzip \- compress or decompress files similar to gzip
+.SH SYNOPSIS
+.B igzip
+[\fI\,options\/\fR] [\fI\,infiles\/\fR]
+.SH DESCRIPTION
+
+Compress or decompress files similar to gzip using the ISA-L fast deflate library.
+
+Output .gz files are compatible with gzip and [RFC-1952].
+
+Options are similar to gzip except --keep is default.
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+help, print this message
+.TP
+\-#
+use compression level # with 0 <= # <= 3
+.TP
+\fB\-o\fR
+<file>           output file
+.TP
+\fB\-c\fR, \fB\-\-stdout\fR
+write to stdout
+.TP
+\fB\-d\fR, \fB\-\-decompress\fR
+decompress file
+.TP
+\fB\-z\fR, \fB\-\-compress\fR
+compress file (default)
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+overwrite output without prompting
+.TP
+\fB\-\-rm\fR
+remove source files after successful (de)compression
+.TP
+\fB\-k\fR, \fB\-\-keep\fR
+keep source files (default)
+.TP
+\fB\-S\fR, \fB\-\-suffix\fR <.suf>
+suffix to use while (de)compressing
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+show version number
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbose mode
+.TP
+\fB\-N\fR, \fB\-\-name\fR
+save/use file name and timestamp in compress/decompress
+.TP
+\fB\-n\fR, \fB\-\-no\-name\fR
+do not save/use file name and timestamp in compress/decompress
+.TP
+\fB\-t\fR, \fB\-\-test\fR
+test compressed file integrity
+.TP
+\fB\-T\fR, \fB\-\-threads\fR <n>
+use n threads to compress if enabled
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+suppress warnings
+.PP
+with no infile, or when infile is \- , read standard input
+.SH EXAMPLES
+
+Make compressed file1.gz and file2.gz and keep file1 and file2.
+.RS
+.B igzip file1 file2
+.RE
+
+Piped compression and decompression.
+.RS
+.B igzip -c file.txt | igzip -d -c -
+.RE
+
+Streaming compression from output of tar, compress level 2.
+.RS
+.B tar cf - dir1 | igzip -2 > dir1.tar.gz
+.RE
+.SH "REPORTING BUGS"
+
+Report bugs to https://github.com/intel/isa-l/issues
diff --git a/ceph/src/isa-l/programs/igzip.1.h2m b/ceph/src/isa-l/programs/igzip.1.h2m
new file mode 100644 (file)
index 0000000..819cd2d
--- /dev/null
@@ -0,0 +1,31 @@
+[Name]
+igzip \- compress or decompress files similar to gzip
+
+[Description]
+
+Compress or decompress files similar to gzip using the ISA-L fast deflate library.
+
+Output .gz files are compatible with gzip and [RFC-1952].
+
+Options are similar to gzip except --keep is default.
+
+[Examples]
+
+Make compressed file1.gz and file2.gz and keep file1 and file2.
+.RS
+.B igzip file1 file2
+.RE
+
+Piped compression and decompression.
+.RS
+.B igzip -c file.txt | igzip -d -c -
+.RE
+
+Streaming compression from output of tar, compress level 2.
+.RS
+.B tar cf - dir1 | igzip -2 > dir1.tar.gz
+.RE
+
+[Reporting Bugs]
+
+Report bugs to https://github.com/intel/isa-l/issues
diff --git a/ceph/src/isa-l/programs/igzip_cli.c b/ceph/src/isa-l/programs/igzip_cli.c
new file mode 100644 (file)
index 0000000..9a20b9b
--- /dev/null
@@ -0,0 +1,1155 @@
+/**********************************************************************
+  Copyright(c) 2011-2018 Intel Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Intel Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+
+#define _FILE_OFFSET_BITS 64
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <getopt.h>
+#include <sys/stat.h>
+#include <utime.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include "igzip_lib.h"         /* Normally you use isa-l.h instead for external programs */
+
+#if defined (HAVE_THREADS)
+# include <pthread.h>
+# include "crc.h"
+#endif
+
+#if !defined (VERSION)
+# if defined (ISAL_VERSION)
+#  define VERSION ISAL_VERSION
+# else
+#  define VERSION "unknown version"
+# endif
+#endif
+
+#define BAD_OPTION 1
+#define BAD_LEVEL 1
+#define FILE_EXISTS 0
+#define MALLOC_FAILED -1
+#define FILE_OPEN_ERROR -2
+#define FILE_READ_ERROR -3
+#define FILE_WRITE_ERROR -4
+
+#define BUF_SIZE 1024
+#define BLOCK_SIZE (1024 * 1024)
+
+#define MAX_FILEPATH_BUF 4096
+
+#define UNIX 3
+
+#define NAME_DEFAULT 0
+#define NO_NAME 1
+#define YES_NAME 2
+
+#define NO_TEST 0
+#define TEST 1
+
+#define LEVEL_DEFAULT 2
+#define DEFAULT_SUFFIX_LEN 3
+char *default_suffixes[] = { ".gz", ".z" };
+int default_suffixes_lens[] = { 3, 2 };
+
+char stdin_file_name[] = "-";
+int stdin_file_name_len = 1;
+
+enum compression_modes {
+       COMPRESS_MODE,
+       DECOMPRESS_MODE
+};
+
+enum long_only_opt_val {
+       RM
+};
+
+enum log_types {
+       INFORM,
+       WARN,
+       ERROR,
+       VERBOSE
+};
+
+int level_size_buf[10] = {
+#ifdef ISAL_DEF_LVL0_DEFAULT
+       ISAL_DEF_LVL0_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL1_DEFAULT
+       ISAL_DEF_LVL1_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL2_DEFAULT
+       ISAL_DEF_LVL2_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL3_DEFAULT
+       ISAL_DEF_LVL3_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL4_DEFAULT
+       ISAL_DEF_LVL4_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL5_DEFAULT
+       ISAL_DEF_LVL5_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL6_DEFAULT
+       ISAL_DEF_LVL6_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL7_DEFAULT
+       ISAL_DEF_LVL7_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL8_DEFAULT
+       ISAL_DEF_LVL8_DEFAULT,
+#else
+       0,
+#endif
+#ifdef ISAL_DEF_LVL9_DEFAULT
+       ISAL_DEF_LVL9_DEFAULT,
+#else
+       0,
+#endif
+};
+
+struct cli_options {
+       char *infile_name;
+       size_t infile_name_len;
+       char *outfile_name;
+       size_t outfile_name_len;
+       char *suffix;
+       size_t suffix_len;
+       int level;
+       int mode;
+       int use_stdout;
+       int remove;
+       int force;
+       int quiet_level;
+       int verbose_level;
+       int name;
+       int test;
+       int threads;
+       uint8_t *in_buf;
+       uint8_t *out_buf;
+       uint8_t *level_buf;
+       size_t in_buf_size;
+       size_t out_buf_size;
+       size_t level_buf_size;
+};
+
+struct cli_options global_options;
+
+void init_options(struct cli_options *options)
+{
+       options->infile_name = NULL;
+       options->infile_name_len = 0;
+       options->outfile_name = NULL;
+       options->outfile_name_len = 0;
+       options->suffix = NULL;
+       options->suffix_len = 0;
+       options->level = LEVEL_DEFAULT;
+       options->mode = COMPRESS_MODE;
+       options->use_stdout = false;
+       options->remove = false;
+       options->force = false;
+       options->quiet_level = 0;
+       options->verbose_level = 0;
+       options->name = NAME_DEFAULT;
+       options->test = NO_TEST;
+       options->in_buf = NULL;
+       options->out_buf = NULL;
+       options->level_buf = NULL;
+       options->in_buf_size = 0;
+       options->out_buf_size = 0;
+       options->level_buf_size = 0;
+       options->threads = 1;
+};
+
+int is_interactive(void)
+{
+       int ret;
+       ret = !global_options.force && !global_options.quiet_level && isatty(fileno(stdin));
+       return ret;
+}
+
+size_t get_filesize(FILE * fp)
+{
+       size_t file_size;
+       fpos_t pos, pos_curr;
+
+       fgetpos(fp, &pos_curr); /* Save current position */
+#if defined(_WIN32) || defined(_WIN64)
+       _fseeki64(fp, 0, SEEK_END);
+#else
+       fseeko(fp, 0, SEEK_END);
+#endif
+       fgetpos(fp, &pos);
+       file_size = *(size_t *)&pos;
+       fsetpos(fp, &pos_curr); /* Restore position */
+
+       return file_size;
+}
+
+uint32_t get_posix_filetime(FILE * fp)
+{
+       struct stat file_stats;
+       fstat(fileno(fp), &file_stats);
+       return file_stats.st_mtime;
+}
+
+uint32_t set_filetime(char *file_name, uint32_t posix_time)
+{
+       struct utimbuf new_time;
+       new_time.actime = posix_time;
+       new_time.modtime = posix_time;
+       return utime(file_name, &new_time);
+}
+
+void log_print(int log_type, char *format, ...)
+{
+       va_list args;
+       va_start(args, format);
+
+       switch (log_type) {
+       case INFORM:
+               vfprintf(stdout, format, args);
+               break;
+       case WARN:
+               if (global_options.quiet_level <= 0)
+                       vfprintf(stderr, format, args);
+               break;
+       case ERROR:
+               if (global_options.quiet_level <= 1)
+                       vfprintf(stderr, format, args);
+               break;
+       case VERBOSE:
+               if (global_options.verbose_level > 0)
+                       vfprintf(stderr, format, args);
+               break;
+       }
+
+       va_end(args);
+}
+
+int usage(int exit_code)
+{
+       int log_type = exit_code ? WARN : INFORM;
+       log_print(log_type,
+                 "Usage: igzip [options] [infiles]\n\n"
+                 "Options:\n"
+                 " -h, --help           help, print this message\n"
+                 " -#                   use compression level # with 0 <= # <= %d\n"
+                 " -o  <file>           output file\n"
+                 " -c, --stdout         write to stdout\n"
+                 " -d, --decompress     decompress file\n"
+                 " -z, --compress       compress file (default)\n"
+                 " -f, --force          overwrite output without prompting\n"
+                 "     --rm             remove source files after successful (de)compression\n"
+                 " -k, --keep           keep source files (default)\n"
+                 " -S, --suffix <.suf>  suffix to use while (de)compressing\n"
+                 " -V, --version        show version number\n"
+                 " -v, --verbose        verbose mode\n"
+                 " -N, --name           save/use file name and timestamp in compress/decompress\n"
+                 " -n, --no-name        do not save/use file name and timestamp in compress/decompress\n"
+                 " -t, --test           test compressed file integrity\n"
+                 " -T, --threads <n>    use n threads to compress if enabled\n"
+                 " -q, --quiet          suppress warnings\n\n"
+                 "with no infile, or when infile is - , read standard input\n\n",
+                 ISAL_DEF_MAX_LEVEL);
+
+       exit(exit_code);
+}
+
+void print_version(void)
+{
+       log_print(INFORM, "igzip command line interface %s\n", VERSION);
+}
+
+void *malloc_safe(size_t size)
+{
+       void *ptr = NULL;
+       if (size == 0)
+               return ptr;
+
+       ptr = malloc(size);
+       if (ptr == NULL) {
+               log_print(ERROR, "igzip: Failed to allocate memory\n");
+               exit(MALLOC_FAILED);
+       }
+
+       return ptr;
+}
+
+FILE *fopen_safe(char *file_name, char *mode)
+{
+       FILE *file;
+       int answer = 0, tmp;
+
+       /* Assumes write mode always starts with w */
+       if (mode[0] == 'w') {
+               if (access(file_name, F_OK) == 0) {
+                       log_print(WARN, "igzip: %s already exists;", file_name);
+                       if (is_interactive()) {
+                               log_print(WARN, " do you wish to overwrite (y/n)?");
+                               answer = getchar();
+
+                               tmp = answer;
+                               while (tmp != '\n' && tmp != EOF)
+                                       tmp = getchar();
+
+                               if (answer != 'y' && answer != 'Y') {
+                                       log_print(WARN, "       not overwritten\n");
+                                       return NULL;
+                               }
+                       } else if (!global_options.force) {
+                               log_print(WARN, "       not overwritten\n");
+                               return NULL;
+                       }
+
+                       if (access(file_name, W_OK) != 0) {
+                               log_print(ERROR, "igzip: %s: Permission denied\n", file_name);
+                               return NULL;
+                       }
+               }
+       }
+
+       /* Assumes read mode always starts with r */
+       if (mode[0] == 'r') {
+               if (access(file_name, F_OK) != 0) {
+                       log_print(ERROR, "igzip: %s does not exist\n", file_name);
+                       return NULL;
+               }
+
+               if (access(file_name, R_OK) != 0) {
+                       log_print(ERROR, "igzip: %s: Permission denied\n", file_name);
+                       return NULL;
+               }
+       }
+
+       file = fopen(file_name, mode);
+       if (!file) {
+               log_print(ERROR, "igzip: Failed to open %s\n", file_name);
+               return NULL;
+       }
+
+       return file;
+}
+
+size_t fread_safe(void *buf, size_t word_size, size_t buf_size, FILE * in, char *file_name)
+{
+       size_t read_size;
+       read_size = fread(buf, word_size, buf_size, in);
+       if (ferror(in)) {
+               log_print(ERROR, "igzip: Error encountered while reading file %s\n",
+                         file_name);
+               exit(FILE_READ_ERROR);
+       }
+       return read_size;
+}
+
+size_t fwrite_safe(void *buf, size_t word_size, size_t buf_size, FILE * out, char *file_name)
+{
+       size_t write_size;
+       write_size = fwrite(buf, word_size, buf_size, out);
+       if (ferror(out)) {
+               log_print(ERROR, "igzip: Error encountered while writing to file %s\n",
+                         file_name);
+               exit(FILE_WRITE_ERROR);
+       }
+       return write_size;
+}
+
+void open_in_file(FILE ** in, char *infile_name)
+{
+       *in = NULL;
+       if (infile_name == NULL)
+               *in = stdin;
+       else
+               *in = fopen_safe(infile_name, "rb");
+}
+
+void open_out_file(FILE ** out, char *outfile_name)
+{
+       *out = NULL;
+       if (global_options.use_stdout)
+               *out = stdout;
+       else if (outfile_name != NULL)
+               *out = fopen_safe(outfile_name, "wb");
+       else if (!isatty(fileno(stdout)) || global_options.force)
+               *out = stdout;
+       else {
+               log_print(WARN, "igzip: No output location. Use -c to output to terminal\n");
+               exit(FILE_OPEN_ERROR);
+       }
+}
+
+#if defined(HAVE_THREADS)
+
+#define MAX_THREADS 8
+#define MAX_JOBQUEUE 16                /* must be a power of 2 */
+
+enum job_status {
+       JOB_UNALLOCATED = 0,
+       JOB_ALLOCATED,
+       JOB_SUCCESS,
+       JOB_FAIL
+};
+
+struct thread_job {
+       uint8_t *next_in;
+       uint32_t avail_in;
+       uint8_t *next_out;
+       uint32_t avail_out;
+       uint32_t total_out;
+       uint32_t type;
+       uint32_t status;
+};
+struct thread_pool {
+       pthread_t threads[MAX_THREADS];
+       struct thread_job job[MAX_JOBQUEUE];
+       pthread_mutex_t mutex;
+       pthread_cond_t cond;
+       int head;
+       int tail;
+       int queue;
+       int shutdown;
+};
+
+// Globals for thread pool
+struct thread_pool pool;
+
+static inline int pool_has_space()
+{
+       return ((pool.head + 1) % MAX_JOBQUEUE) != pool.tail;
+}
+
+static inline int pool_has_work()
+{
+       return (pool.queue != pool.head);
+}
+
+int pool_get_work()
+{
+       assert(pool.queue != pool.head);
+       pool.queue = (pool.queue + 1) % MAX_JOBQUEUE;
+       return pool.queue;
+}
+
+int pool_put_work(struct isal_zstream *stream)
+{
+       pthread_mutex_lock(&pool.mutex);
+       if (!pool_has_space() || pool.shutdown) {
+               pthread_mutex_unlock(&pool.mutex);
+               return 1;
+       }
+       int idx = (pool.head + 1) % MAX_JOBQUEUE;
+       pool.job[idx].next_in = stream->next_in;
+       pool.job[idx].avail_in = stream->avail_in;
+       pool.job[idx].next_out = stream->next_out;
+       pool.job[idx].avail_out = stream->avail_out;
+       pool.job[idx].status = JOB_ALLOCATED;
+       pool.job[idx].type = stream->end_of_stream == 0 ? 0 : 1;
+       pool.head = idx;
+       pthread_cond_signal(&pool.cond);
+       pthread_mutex_unlock(&pool.mutex);
+       return 0;
+}
+
+void *thread_worker(void *none)
+{
+       struct isal_zstream wstream;
+       int check;
+       int work_idx;
+       int level = global_options.level;
+       int level_size = level_size_buf[level];
+       uint8_t *level_buf = malloc_safe(level_size);
+       log_print(VERBOSE, "Start worker\n");
+
+       while (!pool.shutdown) {
+               pthread_mutex_lock(&pool.mutex);
+               while (!pool_has_work() && !pool.shutdown) {
+                       pthread_cond_wait(&pool.cond, &pool.mutex);
+               }
+               if (pool.shutdown) {
+                       pthread_mutex_unlock(&pool.mutex);
+                       continue;
+               }
+
+               work_idx = pool_get_work();
+               pthread_cond_signal(&pool.cond);
+               pthread_mutex_unlock(&pool.mutex);
+
+               isal_deflate_stateless_init(&wstream);
+               wstream.next_in = pool.job[work_idx].next_in;
+               wstream.next_out = pool.job[work_idx].next_out;
+               wstream.avail_in = pool.job[work_idx].avail_in;
+               wstream.avail_out = pool.job[work_idx].avail_out;
+               wstream.end_of_stream = pool.job[work_idx].type;
+               wstream.flush = FULL_FLUSH;
+               wstream.level = global_options.level;
+               wstream.level_buf = level_buf;
+               wstream.level_buf_size = level_size;
+
+               check = isal_deflate_stateless(&wstream);
+               log_print(VERBOSE, "Worker finished job %d, out=%d\n",
+                         work_idx, wstream.total_out);
+
+               pool.job[work_idx].total_out = wstream.total_out;
+               pool.job[work_idx].status = JOB_SUCCESS + check;        // complete or fail
+               if (check)
+                       break;
+       }
+       free(level_buf);
+       log_print(VERBOSE, "Worker quit\n");
+       pthread_exit(NULL);
+}
+
+int pool_create()
+{
+       int i;
+       int nthreads = global_options.threads - 1;
+       pool.head = 0;
+       pool.tail = 0;
+       pool.queue = 0;
+       pool.shutdown = 0;
+       for (i = 0; i < nthreads; i++)
+               pthread_create(&pool.threads[i], NULL, thread_worker, NULL);
+
+       log_print(VERBOSE, "Created %d pool threads\n", nthreads);
+       return 0;
+}
+
+void pool_quit()
+{
+       int i;
+       pthread_mutex_lock(&pool.mutex);
+       pool.shutdown = 1;
+       pthread_mutex_unlock(&pool.mutex);
+       pthread_cond_broadcast(&pool.cond);
+       for (i = 0; i < global_options.threads - 1; i++)
+               pthread_join(pool.threads[i], NULL);
+       log_print(VERBOSE, "Deleted %d pool threads\n", i);
+}
+
+#endif // defined(HAVE_THREADS)
+
+int compress_file(void)
+{
+       FILE *in = NULL, *out = NULL;
+       unsigned char *inbuf = NULL, *outbuf = NULL, *level_buf = NULL;
+       size_t inbuf_size, outbuf_size;
+       int level_size = 0;
+       struct isal_zstream stream;
+       struct isal_gzip_header gz_hdr;
+       int ret, success = 0;
+
+       char *infile_name = global_options.infile_name;
+       char *outfile_name = global_options.outfile_name;
+       char *allocated_name = NULL;
+       char *suffix = global_options.suffix;
+       size_t infile_name_len = global_options.infile_name_len;
+       size_t outfile_name_len = global_options.outfile_name_len;
+       size_t suffix_len = global_options.suffix_len;
+
+       int level = global_options.level;
+
+       if (suffix == NULL) {
+               suffix = default_suffixes[0];
+               suffix_len = default_suffixes_lens[0];
+       }
+
+       if (infile_name_len == stdin_file_name_len &&
+           infile_name != NULL &&
+           memcmp(infile_name, stdin_file_name, infile_name_len) == 0) {
+               infile_name = NULL;
+               infile_name_len = 0;
+       }
+
+       if (outfile_name == NULL && infile_name != NULL && !global_options.use_stdout) {
+               outfile_name_len = infile_name_len + suffix_len;
+               allocated_name = malloc_safe(outfile_name_len + 1);
+               outfile_name = allocated_name;
+               strncpy(outfile_name, infile_name, infile_name_len + 1);
+               strncat(outfile_name, suffix, outfile_name_len + 1);
+       }
+
+       open_in_file(&in, infile_name);
+       if (in == NULL)
+               goto compress_file_cleanup;
+
+       if (infile_name_len != 0 && infile_name_len == outfile_name_len
+           && infile_name != NULL && outfile_name != NULL
+           && strncmp(infile_name, outfile_name, infile_name_len) == 0) {
+               log_print(ERROR, "igzip: Error input and output file names must differ\n");
+               goto compress_file_cleanup;
+       }
+
+       open_out_file(&out, outfile_name);
+       if (out == NULL)
+               goto compress_file_cleanup;
+
+       inbuf_size = global_options.in_buf_size;
+       outbuf_size = global_options.out_buf_size;
+
+       inbuf = global_options.in_buf;
+       outbuf = global_options.out_buf;
+       level_size = global_options.level_buf_size;
+       level_buf = global_options.level_buf;
+
+       isal_gzip_header_init(&gz_hdr);
+       if (global_options.name == NAME_DEFAULT || global_options.name == YES_NAME) {
+               gz_hdr.time = get_posix_filetime(in);
+               gz_hdr.name = infile_name;
+       }
+       gz_hdr.os = UNIX;
+       gz_hdr.name_buf_len = infile_name_len + 1;
+
+       isal_deflate_init(&stream);
+       stream.avail_in = 0;
+       stream.flush = NO_FLUSH;
+       stream.level = level;
+       stream.level_buf = level_buf;
+       stream.level_buf_size = level_size;
+       stream.gzip_flag = IGZIP_GZIP_NO_HDR;
+       stream.next_out = outbuf;
+       stream.avail_out = outbuf_size;
+
+       isal_write_gzip_header(&stream, &gz_hdr);
+
+       if (global_options.threads > 1) {
+#if defined(HAVE_THREADS)
+               int q;
+               int end_of_stream = 0;
+               uint32_t crc = 0;
+               uint64_t total_in = 0;
+
+               // Write the header
+               fwrite_safe(outbuf, 1, stream.total_out, out, outfile_name);
+
+               do {
+                       size_t nread;
+                       size_t inbuf_used = 0;
+                       size_t outbuf_used = 0;
+                       uint8_t *iptr = inbuf;
+                       uint8_t *optr = outbuf;
+
+                       for (q = 0; q < MAX_JOBQUEUE - 1; q++) {
+                               inbuf_used += BLOCK_SIZE;
+                               outbuf_used += 2 * BLOCK_SIZE;
+                               if (inbuf_used > inbuf_size || outbuf_used > outbuf_size)
+                                       break;
+
+                               nread = fread_safe(iptr, 1, BLOCK_SIZE, in, infile_name);
+                               crc = crc32_gzip_refl(crc, iptr, nread);
+                               end_of_stream = feof(in);
+                               total_in += nread;
+                               stream.next_in = iptr;
+                               stream.next_out = optr;
+                               stream.avail_in = nread;
+                               stream.avail_out = 2 * BLOCK_SIZE;
+                               stream.end_of_stream = end_of_stream;
+                               ret = pool_put_work(&stream);
+                               if (ret || end_of_stream)
+                                       break;
+
+                               iptr += BLOCK_SIZE;
+                               optr += 2 * BLOCK_SIZE;
+                       }
+
+                       while (pool.tail != pool.head) {        // Unprocessed jobs
+                               int t = (pool.tail + 1) % MAX_JOBQUEUE;
+                               if (pool.job[t].status >= JOB_SUCCESS) {        // Finished next
+                                       if (pool.job[t].status > JOB_SUCCESS) {
+                                               success = 0;
+                                               log_print(ERROR,
+                                                         "igzip: Error encountered while compressing file %s\n",
+                                                         infile_name);
+                                               goto compress_file_cleanup;
+                                       }
+                                       fwrite_safe(pool.job[t].next_out, 1,
+                                                   pool.job[t].total_out, out, outfile_name);
+
+                                       pool.job[t].total_out = 0;
+                                       pool.job[t].status = 0;
+                                       pool.tail = t;
+                                       pthread_cond_broadcast(&pool.cond);
+                               }
+                               // Pick up a job while we wait
+                               pthread_mutex_lock(&pool.mutex);
+                               if (!pool_has_work()) {
+                                       pthread_mutex_unlock(&pool.mutex);
+                                       continue;
+                               }
+
+                               int work_idx = pool_get_work();
+                               pthread_cond_signal(&pool.cond);
+                               pthread_mutex_unlock(&pool.mutex);
+
+                               isal_deflate_stateless_init(&stream);
+                               stream.next_in = pool.job[work_idx].next_in;
+                               stream.next_out = pool.job[work_idx].next_out;
+                               stream.avail_in = pool.job[work_idx].avail_in;
+                               stream.avail_out = pool.job[work_idx].avail_out;
+                               stream.end_of_stream = pool.job[work_idx].type;
+                               stream.flush = FULL_FLUSH;
+                               stream.level = global_options.level;
+                               stream.level_buf = level_buf;
+                               stream.level_buf_size = level_size;
+                               int check = isal_deflate_stateless(&stream);
+                               log_print(VERBOSE, "Self   finished job %d, out=%d\n",
+                                         work_idx, stream.total_out);
+                               pool.job[work_idx].total_out = stream.total_out;
+                               pool.job[work_idx].status = JOB_SUCCESS + check;        // complete or fail
+                       }
+               } while (!end_of_stream);
+
+               // Write gzip trailer
+               fwrite_safe(&crc, sizeof(uint32_t), 1, out, outfile_name);
+               fwrite_safe(&total_in, sizeof(uint32_t), 1, out, outfile_name);
+
+#else // No compiled threading support but asked for threads > 1
+               assert(1);
+#endif
+       } else {                // Single thread
+               do {
+                       if (stream.avail_in == 0) {
+                               stream.next_in = inbuf;
+                               stream.avail_in =
+                                   fread_safe(stream.next_in, 1, inbuf_size, in, infile_name);
+                               stream.end_of_stream = feof(in);
+                       }
+
+                       if (stream.next_out == NULL) {
+                               stream.next_out = outbuf;
+                               stream.avail_out = outbuf_size;
+                       }
+
+                       ret = isal_deflate(&stream);
+
+                       if (ret != ISAL_DECOMP_OK) {
+                               log_print(ERROR,
+                                         "igzip: Error encountered while compressing file %s\n",
+                                         infile_name);
+                               goto compress_file_cleanup;
+                       }
+
+                       fwrite_safe(outbuf, 1, stream.next_out - outbuf, out, outfile_name);
+                       stream.next_out = NULL;
+
+               } while (!feof(in) || stream.avail_out == 0);
+       }
+
+       success = 1;
+
+      compress_file_cleanup:
+       if (out != NULL && out != stdout)
+               fclose(out);
+
+       if (in != NULL && in != stdin) {
+               fclose(in);
+               if (success && global_options.remove)
+                       remove(infile_name);
+       }
+
+       if (allocated_name != NULL)
+               free(allocated_name);
+
+       return (success == 0);
+}
+
+int decompress_file(void)
+{
+       FILE *in = NULL, *out = NULL;
+       unsigned char *inbuf = NULL, *outbuf = NULL;
+       size_t inbuf_size, outbuf_size;
+       struct inflate_state state;
+       struct isal_gzip_header gz_hdr;
+       const int terminal = 0, implicit = 1, stripped = 2;
+       int ret = 0, success = 0, outfile_type = terminal;
+
+       char *infile_name = global_options.infile_name;
+       char *outfile_name = global_options.outfile_name;
+       char *allocated_name = NULL;
+       char *suffix = global_options.suffix;
+       size_t infile_name_len = global_options.infile_name_len;
+       size_t outfile_name_len = global_options.outfile_name_len;
+       size_t suffix_len = global_options.suffix_len;
+       int suffix_index = 0;
+       uint32_t file_time;
+
+       if (infile_name_len == stdin_file_name_len &&
+           infile_name != NULL &&
+           memcmp(infile_name, stdin_file_name, infile_name_len) == 0) {
+               infile_name = NULL;
+               infile_name_len = 0;
+       }
+
+       if (outfile_name == NULL && !global_options.use_stdout) {
+               if (infile_name != NULL) {
+                       outfile_type = stripped;
+                       while (suffix_index <
+                              sizeof(default_suffixes) / sizeof(*default_suffixes)) {
+                               if (suffix == NULL) {
+                                       suffix = default_suffixes[suffix_index];
+                                       suffix_len = default_suffixes_lens[suffix_index];
+                                       suffix_index++;
+                               }
+
+                               outfile_name_len = infile_name_len - suffix_len;
+                               if (infile_name_len >= suffix_len
+                                   && memcmp(infile_name + outfile_name_len, suffix,
+                                             suffix_len) == 0)
+                                       break;
+                               suffix = NULL;
+                               suffix_len = 0;
+                       }
+
+                       if (suffix == NULL && global_options.test == NO_TEST) {
+                               log_print(ERROR, "igzip: %s: unknown suffix -- ignored\n",
+                                         infile_name);
+                               return 1;
+                       }
+               }
+               if (global_options.name == YES_NAME) {
+                       outfile_name_len = 0;
+                       outfile_type = implicit;
+               }
+               if (outfile_type != terminal) {
+                       allocated_name = malloc_safe(outfile_name_len >=
+                                                    MAX_FILEPATH_BUF ? outfile_name_len +
+                                                    1 : MAX_FILEPATH_BUF);
+                       outfile_name = allocated_name;
+               }
+       }
+
+       open_in_file(&in, infile_name);
+       if (in == NULL)
+               goto decompress_file_cleanup;
+
+       file_time = get_posix_filetime(in);
+
+       inbuf_size = global_options.in_buf_size;
+       outbuf_size = global_options.out_buf_size;
+       inbuf = global_options.in_buf;
+       outbuf = global_options.out_buf;
+
+       isal_gzip_header_init(&gz_hdr);
+       if (outfile_type == implicit) {
+               gz_hdr.name = outfile_name;
+               gz_hdr.name_buf_len = MAX_FILEPATH_BUF;
+       }
+
+       isal_inflate_init(&state);
+       state.crc_flag = ISAL_GZIP_NO_HDR_VER;
+       state.next_in = inbuf;
+       state.avail_in = fread_safe(state.next_in, 1, inbuf_size, in, infile_name);
+
+       ret = isal_read_gzip_header(&state, &gz_hdr);
+       if (ret != ISAL_DECOMP_OK) {
+               log_print(ERROR, "igzip: Error invalid gzip header found for file %s\n",
+                         infile_name);
+               goto decompress_file_cleanup;
+       }
+
+       if (outfile_type == implicit)
+               file_time = gz_hdr.time;
+
+       if (outfile_name != NULL && infile_name != NULL
+           && (outfile_type == stripped
+               || (outfile_type == implicit && outfile_name[0] == 0))) {
+               outfile_name_len = infile_name_len - suffix_len;
+               memcpy(outfile_name, infile_name, outfile_name_len);
+               outfile_name[outfile_name_len] = 0;
+       }
+
+       if (infile_name_len != 0 && infile_name_len == outfile_name_len
+           && infile_name != NULL && outfile_name != NULL
+           && strncmp(infile_name, outfile_name, infile_name_len) == 0) {
+               log_print(ERROR, "igzip: Error input and output file names must differ\n");
+               goto decompress_file_cleanup;
+       }
+
+       if (global_options.test == NO_TEST) {
+               open_out_file(&out, outfile_name);
+               if (out == NULL)
+                       goto decompress_file_cleanup;
+       }
+
+       do {
+               if (state.avail_in == 0) {
+                       state.next_in = inbuf;
+                       state.avail_in =
+                           fread_safe(state.next_in, 1, inbuf_size, in, infile_name);
+               }
+
+               state.next_out = outbuf;
+               state.avail_out = outbuf_size;
+
+               ret = isal_inflate(&state);
+               if (ret != ISAL_DECOMP_OK) {
+                       log_print(ERROR,
+                                 "igzip: Error encountered while decompressing file %s\n",
+                                 infile_name);
+                       goto decompress_file_cleanup;
+               }
+
+               if (out != NULL)
+                       fwrite_safe(outbuf, 1, state.next_out - outbuf, out, outfile_name);
+
+       } while (!feof(in) || state.avail_out == 0);
+
+       if (state.block_state != ISAL_BLOCK_FINISH)
+               log_print(ERROR, "igzip: Error %s does not contain a complete gzip file\n",
+                         infile_name);
+       else
+               success = 1;
+
+      decompress_file_cleanup:
+       if (out != NULL && out != stdout) {
+               fclose(out);
+               if (success)
+                       set_filetime(outfile_name, file_time);
+       }
+
+       if (in != NULL && in != stdin) {
+               fclose(in);
+               if (success && global_options.remove)
+                       remove(infile_name);
+       }
+
+       if (allocated_name != NULL)
+               free(allocated_name);
+
+       return (success == 0);
+}
+
+int main(int argc, char *argv[])
+{
+       int c;
+       char optstring[] = "hcdz0123456789o:S:kfqVvNntT:";
+       int long_only_flag;
+       int ret = 0;
+       int bad_option = 0;
+       int bad_level = 0;
+       int bad_c = 0;
+
+       struct option long_options[] = {
+               {"help", no_argument, NULL, 'h'},
+               {"stdout", no_argument, NULL, 'c'},
+               {"to-stdout", no_argument, NULL, 'c'},
+               {"compress", no_argument, NULL, 'z'},
+               {"decompress", no_argument, NULL, 'd'},
+               {"uncompress", no_argument, NULL, 'd'},
+               {"keep", no_argument, NULL, 'k'},
+               {"rm", no_argument, &long_only_flag, RM},
+               {"suffix", no_argument, NULL, 'S'},
+               {"fast", no_argument, NULL, '1'},
+               {"best", no_argument, NULL, '0' + ISAL_DEF_MAX_LEVEL},
+               {"force", no_argument, NULL, 'f'},
+               {"quiet", no_argument, NULL, 'q'},
+               {"version", no_argument, NULL, 'V'},
+               {"verbose", no_argument, NULL, 'v'},
+               {"no-name", no_argument, NULL, 'n'},
+               {"name", no_argument, NULL, 'N'},
+               {"test", no_argument, NULL, 't'},
+               {"threads", required_argument, NULL, 'T'},
+               /* Possible future extensions
+                  {"recursive, no_argument, NULL, 'r'},
+                  {"list", no_argument, NULL, 'l'},
+                  {"benchmark", optional_argument, NULL, 'b'},
+                  {"benchmark_end", required_argument, NULL, 'e'},
+                */
+               {0, 0, 0, 0}
+       };
+
+       init_options(&global_options);
+
+       opterr = 0;
+       while ((c = getopt_long(argc, argv, optstring, long_options, NULL)) != -1) {
+               if (c >= '0' && c <= '9') {
+                       if (c > '0' + ISAL_DEF_MAX_LEVEL)
+                               bad_level = 1;
+                       else
+                               global_options.level = c - '0';
+
+                       continue;
+               }
+
+               switch (c) {
+               case 0:
+                       switch (long_only_flag) {
+                       case RM:
+                               global_options.remove = true;
+                               break;
+                       default:
+                               bad_option = 1;
+                               bad_c = c;
+                               break;
+                       }
+                       break;
+               case 'o':
+                       global_options.outfile_name = optarg;
+                       global_options.outfile_name_len = strlen(global_options.outfile_name);
+                       break;
+               case 'c':
+                       global_options.use_stdout = true;
+                       break;
+               case 'z':
+                       global_options.mode = COMPRESS_MODE;
+                       break;
+               case 'd':
+                       global_options.mode = DECOMPRESS_MODE;
+                       break;
+               case 'S':
+                       global_options.suffix = optarg;
+                       global_options.suffix_len = strlen(global_options.suffix);
+                       break;
+               case 'k':
+                       global_options.remove = false;
+                       break;
+               case 'f':
+                       global_options.force = true;
+                       break;
+               case 'q':
+                       global_options.quiet_level++;
+                       break;
+               case 'v':
+                       global_options.verbose_level++;
+                       break;
+               case 'V':
+                       print_version();
+                       return 0;
+               case 'N':
+                       global_options.name = YES_NAME;
+                       break;
+               case 'n':
+                       global_options.name = NO_NAME;
+                       break;
+               case 't':
+                       global_options.test = TEST;
+                       global_options.mode = DECOMPRESS_MODE;
+                       break;
+               case 'T':
+#if defined(HAVE_THREADS)
+                       c = atoi(optarg);
+                       c = c > MAX_THREADS ? MAX_THREADS : c;
+                       c = c < 1 ? 1 : c;
+                       global_options.threads = c;
+#endif
+                       break;
+               case 'h':
+                       usage(0);
+               default:
+                       bad_option = 1;
+                       bad_c = optopt;
+                       break;
+               }
+       }
+
+       if (bad_option) {
+               log_print(ERROR, "igzip: invalid option ");
+               if (bad_c)
+                       log_print(ERROR, "-%c\n", bad_c);
+
+               else
+                       log_print(ERROR, ("\n"));
+
+               usage(BAD_OPTION);
+       }
+
+       if (bad_level) {
+               log_print(ERROR, "igzip: invalid compression level\n");
+               usage(BAD_LEVEL);
+       }
+
+       if (global_options.outfile_name && optind < argc - 1) {
+               log_print(ERROR,
+                         "igzip: An output file may be specified with only one input file\n");
+               return 0;
+       }
+
+       global_options.in_buf_size = BLOCK_SIZE;
+       global_options.out_buf_size = BLOCK_SIZE;
+
+#if defined(HAVE_THREADS)
+       if (global_options.threads > 1) {
+               global_options.in_buf_size += (BLOCK_SIZE * MAX_JOBQUEUE);
+               global_options.out_buf_size += (BLOCK_SIZE * MAX_JOBQUEUE * 2);
+               pool_create();
+       }
+#endif
+       global_options.in_buf = malloc_safe(global_options.in_buf_size);
+       global_options.out_buf = malloc_safe(global_options.out_buf_size);
+       global_options.level_buf_size = level_size_buf[global_options.level];
+       global_options.level_buf = malloc_safe(global_options.level_buf_size);
+
+       if (global_options.mode == COMPRESS_MODE) {
+               if (optind >= argc)
+                       ret |= compress_file();
+               while (optind < argc) {
+                       global_options.infile_name = argv[optind];
+                       global_options.infile_name_len = strlen(global_options.infile_name);
+                       ret |= compress_file();
+                       optind++;
+               }
+
+       } else if (global_options.mode == DECOMPRESS_MODE) {
+               if (optind >= argc)
+                       ret |= decompress_file();
+               while (optind < argc) {
+                       global_options.infile_name = argv[optind];
+                       global_options.infile_name_len = strlen(global_options.infile_name);
+                       ret |= decompress_file();
+                       optind++;
+               }
+       }
+#if defined(HAVE_THREADS)
+       if (global_options.threads > 1)
+               pool_quit();
+#endif
+
+       free(global_options.in_buf);
+       free(global_options.out_buf);
+       free(global_options.level_buf);
+       return ret;
+}
diff --git a/ceph/src/isa-l/programs/igzip_cli_check.sh b/ceph/src/isa-l/programs/igzip_cli_check.sh
new file mode 100755 (executable)
index 0000000..da83578
--- /dev/null
@@ -0,0 +1,245 @@
+#! /bin/bash
+set -o pipefail
+
+CWD=$PWD
+SRC_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
+IGZIP="$SRC_DIR/igzip $@"
+TEST_DIR="/tmp/igzip_cli_test_$$/"
+TEST_FILE=$SRC_DIR/igzip
+DIFF="diff -q"
+
+mkdir -p $TEST_DIR
+cd $TEST_DIR
+
+cleanup ()
+{
+    cd $CWD
+    rm -rf $TEST_DIR
+    exit $1
+}
+
+clear_dir ()
+{
+    cd /tmp/
+    rm -rf $TEST_DIR
+    mkdir -p $TEST_DIR
+    cd $TEST_DIR
+}
+
+pass_check()
+{
+    if [ $1 -eq 0 ]; then
+       echo -e "\e[1;32mPass\e[0;39m: " $2
+    else
+       echo -e "\e[1;31mFail\e[0;39m: " $2
+       cleanup 1
+    fi
+}
+
+fail_check()
+{
+    if [ $1 -ne 0 ]; then
+       echo -e "\e[1;32mPass\e[0;39m: " $2
+    else
+       echo -e "\e[1;31mFail\e[0;39m: " $2
+       cleanup 1
+    fi
+}
+
+file1=tmp
+file2=jnk
+file3=blah
+bad_file=not_a_file
+dir=this_is_a_directory
+
+default_suffix=".gz"
+ds=$default_suffix
+gzip_standard_suffixes=(".gz" ".z")
+bad_suffix=".bad"
+custom_suffix=".custom"
+
+# Test basic compression and decompression
+ret=0
+cp $TEST_FILE $file1
+$IGZIP $file1 && rm $file1 || ret=1
+for suffix in ${gzip_standard_suffixes[@]}; do
+    if [ "$ds" != "$suffix" ]; then
+       cp -u $file1$ds $file1$suffix
+    fi
+    $IGZIP -d $file1$suffix && $DIFF $file1 $TEST_FILE || ret=1
+    rm $file1
+done
+pass_check $ret "Basic compression and decompression"
+clear_dir
+
+# Test piping
+cat $TEST_FILE | $IGZIP | $IGZIP -d | $DIFF $TEST_FILE - || ret=1
+cat $TEST_FILE | $IGZIP - | $IGZIP -d - | $DIFF $TEST_FILE - || ret=1
+pass_check $ret "Piping compression and decompression"
+
+#Test outifle options
+$IGZIP $TEST_FILE -o $file2$ds && $IGZIP $file2$ds -d -o $file1 && \
+    test -f $file2$ds && test -f $file1 && $DIFF $TEST_FILE $file1
+pass_check $? "Setting outfile name"
+clear_dir
+
+# Not a file test
+ret=0
+$IGZIP $bad_file &> /dev/null && ret=1
+test -f $bad_file$ds && ret=1
+pass_check $ret "Bad file"
+clear_dir
+
+# Multiple files
+cp $TEST_FILE $file1 && cp $TEST_FILE $file2 && cp $TEST_FILE $file3 && \
+    $IGZIP $file1 $file2 $file3 && rm $file1 && rm $file2 && rm $file3 && \
+    $IGZIP -d $file1$ds $file2$ds $file3$ds && \
+    $DIFF $TEST_FILE $file1 && $DIFF $TEST_FILE $file2 && $DIFF $TEST_FILE $file3
+pass_check $? "Multiple files compression and decompression"
+clear_dir
+
+# Multiple files, one doesn't exist
+ret=0
+cp $TEST_FILE $file1 && cp $TEST_FILE $file2 || ret=1
+$IGZIP $file1 $bad_file $file2 &> /dev/null && ret=1
+rm $file1 && rm $file2 || ret=1
+$IGZIP -d $file1$ds $bad_file$ds $file2$ds &> /dev/null && ret=1
+$DIFF $TEST_FILE $file1 && $DIFF $TEST_FILE $file2 || ret=1
+pass_check $ret "Multiple files with a bad file"
+clear_dir
+
+# Custom suffix test
+cp $TEST_FILE $file1 && $IGZIP -S $custom_suffix $file1 &&  rm $file1 && \
+    $IGZIP -d -S $custom_suffix $file1$custom_suffix && $DIFF $TEST_FILE $file1
+pass_check $? "Custom suffix"
+
+# Bad suffix test
+ret=0
+cp $TEST_FILE $file1 && $IGZIP -S $bad_suffix $file1 &&  rm $file1 || ret=1
+$IGZIP -d $file1$custom_suffix &> /dev/null && ret=1
+pass_check $ret "Bad suffix"
+clear_dir
+
+# Remove file test
+ret=0
+cp $TEST_FILE $file1 && $IGZIP --rm $file1 || ret=1
+test -f $file1 && ret=1
+$IGZIP --rm -d $file1$ds || ret=1
+test -f $file1$ds && ret=1
+pass_check $ret "Remove file"
+clear_dir
+
+# Pass a directory negative test
+ret=0
+mkdir -p $dir || ret=0
+$IGZIP $dir &> /dev/null && ret=1
+clear_dir
+
+mkdir -p $dir$ds || ret=1
+$IGZIP -d $dir &> /dev/null && ret=1
+pass_check $ret "Compress/Decompress Directory without -r"
+clear_dir
+
+# Write permissions test
+cp $TEST_FILE $file1
+chmod 400 $file1
+chmod 500 $TEST_DIR
+$IGZIP $file1 &> /dev/null
+fail_check $? "don't have write permissions"
+chmod -R 700 $TEST_DIR
+clear_dir
+
+# Read permissions test
+cp $TEST_FILE $file1
+chmod 000 $file1
+$IGZIP $file1 &> /dev/null
+fail_check $? "don't have read permissions"
+clear_dir
+
+# File overwrite test -f
+ret=0
+cp $TEST_FILE $file1 && touch $file1$ds || ret=1
+yes | $IGZIP $file1 &> /dev/null && ret=1
+$IGZIP -f $file1 &> /dev/null && cp $file1$ds $file1 || ret=1
+yes | $IGZIP -d $file1 &> /dev/null && ret=1
+$IGZIP -df $file1$ds &> /dev/null && $DIFF $TEST_FILE $file1 || ret=1
+pass_check $ret "Existing file overwrite only with force"
+clear_dir
+
+# Quiet suppresses interactivity
+ret=0
+cp $TEST_FILE $file1 && touch $file1$ds || ret=1
+$IGZIP -q $file1 &> /dev/null && ret=1
+$IGZIP -dq $file1 &> /dev/null && ret=1
+pass_check $ret "Quiet will not overwrite"
+clear_dir
+
+# Input file and output file cannot be the same
+ret=0
+cp $TEST_FILE $file1 && $IGZIP $file1 -o $file1 &> /dev/null && ret=1
+$DIFF $TEST_FILE $file1  &> /dev/null || ret=1
+pass_check $ret "No in place compression"
+clear_dir
+
+# Input file and output file cannot be the same
+ret=0
+cp $TEST_FILE $file1 && $IGZIP $file1 -o $file1$ds &> /dev/null || ret=1
+$IGZIP -do $file1 $file1 &> /dev/null && ret=1
+$DIFF $TEST_FILE $file1  &> /dev/null || ret=1
+pass_check $ret "No in place decompression"
+clear_dir
+
+ret=0
+$IGZIP -n $TEST_FILE -o $file1$ds && $IGZIP -Nd $file1$ds && $DIFF $file1 $TEST_FILE || ret=1
+pass_check $ret "Decompress name with no-name info"
+clear_dir
+
+ret=0
+cp -p $TEST_FILE $file1 && sleep 1 &&\
+$IGZIP -N $file1 -o $file1$ds &&  $IGZIP -Nfqd $file1$ds  || ret=1
+TIME_ORIG=$(stat --printf=\("%Y\n"\) $TEST_FILE)
+TIME_NEW=$(stat --printf=\("%Y\n"\) $file1)
+if [ "$TIME_ORIG" != "$TIME_NEW" ] ; then
+    ret=1
+fi
+pass_check $ret "Decompress with name info"
+clear_dir
+
+ret=0
+cp -p $TEST_FILE $file1 && touch $file2\\
+$IGZIP $file1 -o $file1$ds || ret=1
+$IGZIP -t $file1$ds || ret=1
+$IGZIP -t $file2 &> /dev/null && ret=1
+cp $file1$ds $file2 && $IGZIP -t $file1$ds || ret=1
+truncate -s -1 $file1$ds
+$IGZIP -t $file1$ds &> /dev/null && ret=1
+pass_check $ret "Test test"
+clear_dir
+
+# Large stream test with threading if enabled
+ret=0
+(for i in `seq 100`; do cat $TEST_FILE ; done) | $IGZIP -c -T 4 | $IGZIP -t || ret=1
+pass_check $ret "Large stream test"
+
+
+# Large stream tests with decompression and threading if enabled
+if command -V md5sum >/dev/null 2>&1 && command -V dd >/dev/null 2>&1; then
+    ret=0
+    dd if=<(for i in `seq 1000`; do cat $TEST_FILE; done) iflag=fullblock bs=1M count=201 2> out.stder | tee >(md5sum > out.sum1) \
+       | $IGZIP -c -T 4 | $IGZIP -d | md5sum > out.sum2 \
+       && $DIFF out.sum1 out.sum2 || ret=1
+    pass_check $ret "Large stream compresss test"
+    clear_dir
+
+    if test -e /dev/urandom; then
+       ret=0
+       dd if=/dev/urandom iflag=fullblock bs=1M count=200 2> out.stder | tee >(md5sum > out.sum3) \
+           | $IGZIP -c -T 2 | $IGZIP -d | md5sum > out.sum4 \
+           && $DIFF out.sum3 out.sum4 || ret=1
+       pass_check $ret "Large stream random data test"
+       clear_dir
+    fi
+fi
+
+echo "Passed all cli checks"
+cleanup 0
index 95490e2c3d9323e78f2f2089dbffbb79a2b8d83a..5f98668d58212c6ae96ef0ec47af98b3a3829cc0 100644 (file)
@@ -2,7 +2,7 @@
 #  Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 #
 #  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions 
+#  modification, are permitted provided that the following conditions
 #  are met:
 #    * Redistributions of source code must retain the above copyright
 #      notice, this list of conditions and the following disclaimer.
 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ########################################################################
 
+include raid/aarch64/Makefile.am
+
 lsrc        +=         raid/raid_base.c
 
 lsrc_base_aliases += raid/raid_base_aliases.c
+lsrc_ppc64le      += raid/raid_base_aliases.c
 
 lsrc_x86_64 += \
                raid/xor_gen_sse.asm \
diff --git a/ceph/src/isa-l/raid/aarch64/Makefile.am b/ceph/src/isa-l/raid/aarch64/Makefile.am
new file mode 100644 (file)
index 0000000..d08c8d6
--- /dev/null
@@ -0,0 +1,36 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+lsrc_aarch64 += \
+               raid/aarch64/xor_gen_neon.S     \
+               raid/aarch64/pq_gen_neon.S      \
+               raid/aarch64/xor_check_neon.S   \
+               raid/aarch64/pq_check_neon.S    \
+               raid/aarch64/raid_multibinary_arm.S     \
+               raid/aarch64/raid_aarch64_dispatcher.c
diff --git a/ceph/src/isa-l/raid/aarch64/pq_check_neon.S b/ceph/src/isa-l/raid/aarch64/pq_check_neon.S
new file mode 100644 (file)
index 0000000..55ad798
--- /dev/null
@@ -0,0 +1,341 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.text
+
+.global pq_check_neon
+.type pq_check_neon, %function
+
+/* int pq_check_neon(int vects, int len, void **src) */
+
+/* arguments */
+w_vects                .req    w0      /* MUST >= 3 */
+x_vects                .req    x0
+w_len          .req    w1      /* MUST be 16x bytes */
+x_len          .req    x1
+x_src          .req    x2
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_dst_p                .req    x3
+x_dst_q                .req    x4
+x_dst_q_end    .req    x5
+w_col          .req    w6
+x_col          .req    x6
+x_src_ptr      .req    x7
+x_src_ptr_end  .req    x9
+x_src_last     .req    x10
+x_srcn         .req    x11
+w_min          .req    w12
+/* vectors */
+/* v0  ~ v7 : temporary p */
+/* v8  ~ v15: temporary q */
+/* v16 ~ v23: next 128 bytes */
+v_mask0                .req    v24
+v_mask1                .req    v25
+v_mask2                .req    v26
+v_mask3                .req    v27
+v_gf8poly      .req    v28
+v_0x80         .req    v29
+
+/*
+ * src_ptr_end -->
+ *          -------+----------+
+ *           .     |  src[0]  |
+ *           .     +----------+            +------------------+
+ *     src_ptr --> |  src[1]  | - srcn ->  |     buffer       |
+ *           .     +----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+
+ *           .     | src[v-4] |
+ *          -------+----------+  src_last  +------------------+
+ *        src  --> | src[v-3] | ---------> |      buffer      |
+ *                 +----------+            +------------------+
+ *                 | src[v-2] | - dst_p -> |      buffer      |
+ *                 +----------+            +------------------+
+ *                 | src[v-1] | - dst_q -> |      buffer      | dst_q_end
+ *                 +----------+            +------------------+
+ */
+
+pq_check_neon:
+       sub     x_src_ptr_end, x_src, #8
+
+       sub     w_vects, w_vects, #3
+       add     x_src, x_src, x_vects, lsl #3
+
+       ldr     x_src_last, [x_src]
+       ldp     x_dst_p, x_dst_q, [x_src, #8]
+
+       add     x_dst_q_end, x_dst_q, x_len
+
+       mov     w_min, #-1
+       mov     w_col, #0
+       movi    v_gf8poly.16b, #0x1D
+       movi    v_0x80.16b, #0x80
+
+.Lloop128_init:
+       /* less than 128 byts? */
+       cmp     w_len, #128
+       blo     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8,  d9,  [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_dst_q_end, x_dst_q_end, #128
+
+       /* batch process (vects-2)*128 bytes */
+       /* v0~v7: p;  v8~v15: q;  v16~v23: in */
+.Lloop128:
+       ldr     q0, [x_src_last, #16*0]
+       ldr     q1, [x_src_last, #16*1]
+       ldr     q2, [x_src_last, #16*2]
+       ldr     q3, [x_src_last, #16*3]
+       ldr     q4, [x_src_last, #16*4]
+       ldr     q5, [x_src_last, #16*5]
+       ldr     q6, [x_src_last, #16*6]
+       ldr     q7, [x_src_last, #16*7]
+       add     x_src_last, x_src_last, #128
+
+       mov     v8.16b,  v0.16b
+       mov     v9.16b,  v1.16b
+       mov     v10.16b, v2.16b
+       mov     v11.16b, v3.16b
+       mov     v12.16b, v4.16b
+       mov     v13.16b, v5.16b
+       mov     v14.16b, v6.16b
+       mov     v15.16b, v7.16b
+
+       cbz     w_vects, .Lloop128_vects_end
+
+       sub     x_src_ptr, x_src, #8
+.Lloop128_vects:
+       ldr     x_srcn, [x_src_ptr], #-8
+       add     x_srcn, x_srcn, x_col
+       cmp     x_src_ptr, x_src_ptr_end
+
+       ldr     q16, [x_srcn, #16*0]
+       ldr     q17, [x_srcn, #16*1]
+       ldr     q18, [x_srcn, #16*2]
+       ldr     q19, [x_srcn, #16*3]
+       ldr     q20, [x_srcn, #16*4]
+       ldr     q21, [x_srcn, #16*5]
+       ldr     q22, [x_srcn, #16*6]
+       ldr     q23, [x_srcn, #16*7]
+
+       eor     v0.16b, v0.16b, v16.16b
+       eor     v1.16b, v1.16b, v17.16b
+       eor     v2.16b, v2.16b, v18.16b
+       eor     v3.16b, v3.16b, v19.16b
+       eor     v4.16b, v4.16b, v20.16b
+       eor     v5.16b, v5.16b, v21.16b
+       eor     v6.16b, v6.16b, v22.16b
+       eor     v7.16b, v7.16b, v23.16b
+
+       cmhs    v_mask0.16b, v8.16b,  v_0x80.16b
+       cmhs    v_mask1.16b, v9.16b,  v_0x80.16b
+       cmhs    v_mask2.16b, v10.16b, v_0x80.16b
+       cmhs    v_mask3.16b, v11.16b, v_0x80.16b
+       and     v_mask0.16b, v_mask0.16b, v_gf8poly.16b
+       and     v_mask1.16b, v_mask1.16b, v_gf8poly.16b
+       and     v_mask2.16b, v_mask2.16b, v_gf8poly.16b
+       and     v_mask3.16b, v_mask3.16b, v_gf8poly.16b
+       shl     v8.16b,  v8.16b,  #1
+       shl     v9.16b,  v9.16b,  #1
+       shl     v10.16b, v10.16b, #1
+       shl     v11.16b, v11.16b, #1
+       eor     v8.16b,  v8.16b,  v_mask0.16b
+       eor     v9.16b,  v9.16b,  v_mask1.16b
+       eor     v10.16b, v10.16b, v_mask2.16b
+       eor     v11.16b, v11.16b, v_mask3.16b
+       eor     v8.16b,  v8.16b,  v16.16b
+       eor     v9.16b,  v9.16b,  v17.16b
+       eor     v10.16b, v10.16b, v18.16b
+       eor     v11.16b, v11.16b, v19.16b
+
+       cmhs    v_mask0.16b, v12.16b, v_0x80.16b
+       cmhs    v_mask1.16b, v13.16b, v_0x80.16b
+       cmhs    v_mask2.16b, v14.16b, v_0x80.16b
+       cmhs    v_mask3.16b, v15.16b, v_0x80.16b
+       and     v_mask0.16b, v_mask0.16b, v_gf8poly.16b
+       and     v_mask1.16b, v_mask1.16b, v_gf8poly.16b
+       and     v_mask2.16b, v_mask2.16b, v_gf8poly.16b
+       and     v_mask3.16b, v_mask3.16b, v_gf8poly.16b
+       shl     v12.16b, v12.16b, #1
+       shl     v13.16b, v13.16b, #1
+       shl     v14.16b, v14.16b, #1
+       shl     v15.16b, v15.16b, #1
+       eor     v12.16b, v12.16b, v_mask0.16b
+       eor     v13.16b, v13.16b, v_mask1.16b
+       eor     v14.16b, v14.16b, v_mask2.16b
+       eor     v15.16b, v15.16b, v_mask3.16b
+       eor     v12.16b, v12.16b, v20.16b
+       eor     v13.16b, v13.16b, v21.16b
+       eor     v14.16b, v14.16b, v22.16b
+       eor     v15.16b, v15.16b, v23.16b
+
+       bne     .Lloop128_vects
+
+.Lloop128_vects_end:
+       /* v16~v23: true p, q */
+       ldr     q16, [x_dst_p, #16*0]
+       ldr     q17, [x_dst_p, #16*1]
+       ldr     q18, [x_dst_p, #16*2]
+       ldr     q19, [x_dst_p, #16*3]
+       ldr     q20, [x_dst_p, #16*4]
+       ldr     q21, [x_dst_p, #16*5]
+       ldr     q22, [x_dst_p, #16*6]
+       ldr     q23, [x_dst_p, #16*7]
+
+       cmeq    v0.16b, v0.16b, v16.16b
+       cmeq    v1.16b, v1.16b, v17.16b
+       cmeq    v2.16b, v2.16b, v18.16b
+       cmeq    v3.16b, v3.16b, v19.16b
+       cmeq    v4.16b, v4.16b, v20.16b
+       cmeq    v5.16b, v5.16b, v21.16b
+       cmeq    v6.16b, v6.16b, v22.16b
+       cmeq    v7.16b, v7.16b, v23.16b
+
+       ldr     q16, [x_dst_q, #16*0]
+       ldr     q17, [x_dst_q, #16*1]
+       ldr     q18, [x_dst_q, #16*2]
+       ldr     q19, [x_dst_q, #16*3]
+       ldr     q20, [x_dst_q, #16*4]
+       ldr     q21, [x_dst_q, #16*5]
+       ldr     q22, [x_dst_q, #16*6]
+       ldr     q23, [x_dst_q, #16*7]
+
+       and     v0.16b, v0.16b, v1.16b
+       and     v2.16b, v2.16b, v3.16b
+       and     v4.16b, v4.16b, v5.16b
+       and     v6.16b, v6.16b, v7.16b
+       and     v0.16b, v0.16b, v2.16b
+       and     v4.16b, v4.16b, v6.16b
+       and     v0.16b, v0.16b, v4.16b
+
+       cmeq    v8.16b,  v8.16b,  v16.16b
+       cmeq    v9.16b,  v9.16b,  v17.16b
+       cmeq    v10.16b, v10.16b, v18.16b
+       cmeq    v11.16b, v11.16b, v19.16b
+       cmeq    v12.16b, v12.16b, v20.16b
+       cmeq    v13.16b, v13.16b, v21.16b
+       cmeq    v14.16b, v14.16b, v22.16b
+       cmeq    v15.16b, v15.16b, v23.16b
+
+       and     v8.16b,  v8.16b,  v9.16b
+       and     v10.16b, v10.16b, v11.16b
+       and     v12.16b, v12.16b, v13.16b
+       and     v14.16b, v14.16b, v15.16b
+       and     v8.16b,  v8.16b,  v10.16b
+       and     v12.16b, v12.16b, v14.16b
+       and     v8.16b,  v8.16b,  v12.16b
+
+       and     v0.16b, v0.16b, v8.16b
+
+       uminv   b0, v0.16b
+       umov    w_min, v0.b[0]
+       cbz     w_min, .Lloop128_end
+
+       add     x_dst_p, x_dst_p, #128
+       add     x_dst_q, x_dst_q, #128
+       cmp     x_dst_q, x_dst_q_end
+       add     w_col, w_col, #128
+       bls     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       cbz     w_min, .Lerror
+
+       add     x_dst_q_end, x_dst_q_end, #128
+
+.Lloop16_init:
+       tst     w_len, #0x7F
+       beq     .Lloop16_end
+       sub     x_dst_q_end, x_dst_q_end, #16
+
+       /* batch process (vects-2)*16 bytes */
+       /* v0: p;  v1: q;  v2: in;  v3: mask */
+.Lloop16:
+       ldr     q0, [x_src_last], #16
+       mov     v1.16b, v0.16b
+
+       cbz     w_vects, .Lloop16_vects_end
+
+       sub     x_src_ptr, x_src, #8
+.Lloop16_vects:
+       ldr     x_srcn, [x_src_ptr], #-8
+       ldr     q2, [x_srcn, x_col]
+       cmp     x_src_ptr, x_src_ptr_end
+
+       eor     v0.16b, v0.16b, v2.16b
+
+       cmhs    v3.16b, v1.16b, v_0x80.16b
+       and     v3.16b, v3.16b, v_gf8poly.16b
+
+       shl     v1.16b, v1.16b, #1
+       eor     v1.16b, v1.16b, v2.16b
+       eor     v1.16b, v1.16b, v3.16b
+
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       /* v4: true p;  v5: true q */
+       ldr     q4, [x_dst_p], #16
+       ldr     q5, [x_dst_q], #16
+       cmp     x_dst_q, x_dst_q_end
+
+       cmeq    v0.16b, v0.16b, v4.16b
+       cmeq    v1.16b, v1.16b, v5.16b
+       and     v0.16b, v0.16b, v1.16b
+
+       uminv   b0, v0.16b
+       umov    w_min, v0.b[0]
+       cbz     w_min, .Lerror
+
+       add     w_col, w_col, #16
+       bls     .Lloop16
+
+.Lloop16_end:
+       mov     w_ret, #0
+       ret
+
+.Lerror:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/raid/aarch64/pq_gen_neon.S b/ceph/src/isa-l/raid/aarch64/pq_gen_neon.S
new file mode 100644 (file)
index 0000000..f60ad12
--- /dev/null
@@ -0,0 +1,282 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.text
+
+.global pq_gen_neon
+.type pq_gen_neon, %function
+
+/* int pq_gen_neon(int vects, int len, void **src) */
+
+/* arguments */
+w_vects                .req    w0      /* MUST >= 3 */
+x_vects                .req    x0
+w_len          .req    w1      /* MUST be 16x bytes */
+x_len          .req    x1
+x_src          .req    x2
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+x_dst_p                .req    x3
+x_dst_q                .req    x4
+x_dst_q_end    .req    x5
+w_col          .req    w6
+x_col          .req    x6
+x_src_ptr      .req    x7
+x_src_ptr_end  .req    x9
+x_src_last     .req    x10
+x_srcn         .req    x11
+/* vectors */
+/* v0  ~ v7 : temporary p */
+/* v8  ~ v15: temporary q */
+/* v16 ~ v23: next 128 bytes */
+v_mask0                .req    v24
+v_mask1                .req    v25
+v_mask2                .req    v26
+v_mask3                .req    v27
+v_gf8poly      .req    v28
+v_0x80         .req    v29
+
+/*
+ * src_ptr_end -->
+ *          -------+----------+
+ *           .     |  src[0]  |
+ *           .     +----------+            +------------------+
+ *     src_ptr --> |  src[1]  | - srcn ->  |     buffer       |
+ *           .     +----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+
+ *           .     | src[v-4] |
+ *          -------+----------+  src_last  +------------------+
+ *        src  --> | src[v-3] | ---------> |      buffer      |
+ *                 +----------+            +------------------+
+ *                 | src[v-2] | - dst_p -> |      buffer      |
+ *                 +----------+            +------------------+
+ *                 | src[v-1] | - dst_q -> |      buffer      | dst_q_end
+ *                 +----------+            +------------------+
+ */
+
+pq_gen_neon:
+       sub     x_src_ptr_end, x_src, #8
+
+       sub     w_vects, w_vects, #3
+       add     x_src, x_src, x_vects, lsl #3
+
+       ldr     x_src_last, [x_src]
+       ldp     x_dst_p, x_dst_q, [x_src, #8]
+
+       add     x_dst_q_end, x_dst_q, x_len
+
+       mov     w_col, #0
+       movi    v_gf8poly.16b, #0x1D
+       movi    v_0x80.16b, #0x80
+
+.Lloop128_init:
+       /* less than 128 byts? */
+       cmp     w_len, #128
+       blo     .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8,  d9,  [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_dst_q_end, x_dst_q_end, #128
+
+       /* batch process (vects-2)*128 bytes */
+       /* v0~v7: p;  v8~v15: q;  v16~v23: in */
+.Lloop128:
+       ldr     q0, [x_src_last, #16*0]
+       ldr     q1, [x_src_last, #16*1]
+       ldr     q2, [x_src_last, #16*2]
+       ldr     q3, [x_src_last, #16*3]
+       ldr     q4, [x_src_last, #16*4]
+       ldr     q5, [x_src_last, #16*5]
+       ldr     q6, [x_src_last, #16*6]
+       ldr     q7, [x_src_last, #16*7]
+       add     x_src_last, x_src_last, #128
+
+       mov     v8.16b,  v0.16b
+       mov     v9.16b,  v1.16b
+       mov     v10.16b, v2.16b
+       mov     v11.16b, v3.16b
+       mov     v12.16b, v4.16b
+       mov     v13.16b, v5.16b
+       mov     v14.16b, v6.16b
+       mov     v15.16b, v7.16b
+
+       cbz     w_vects, .Lloop128_vects_end
+
+       sub     x_src_ptr, x_src, #8
+.Lloop128_vects:
+       ldr     x_srcn, [x_src_ptr], #-8
+       add     x_srcn, x_srcn, x_col
+       cmp     x_src_ptr, x_src_ptr_end
+
+       ldr     q16, [x_srcn, #16*0]
+       ldr     q17, [x_srcn, #16*1]
+       ldr     q18, [x_srcn, #16*2]
+       ldr     q19, [x_srcn, #16*3]
+       ldr     q20, [x_srcn, #16*4]
+       ldr     q21, [x_srcn, #16*5]
+       ldr     q22, [x_srcn, #16*6]
+       ldr     q23, [x_srcn, #16*7]
+
+       eor     v0.16b, v0.16b, v16.16b
+       eor     v1.16b, v1.16b, v17.16b
+       eor     v2.16b, v2.16b, v18.16b
+       eor     v3.16b, v3.16b, v19.16b
+       eor     v4.16b, v4.16b, v20.16b
+       eor     v5.16b, v5.16b, v21.16b
+       eor     v6.16b, v6.16b, v22.16b
+       eor     v7.16b, v7.16b, v23.16b
+
+       cmhs    v_mask0.16b, v8.16b,  v_0x80.16b
+       cmhs    v_mask1.16b, v9.16b,  v_0x80.16b
+       cmhs    v_mask2.16b, v10.16b, v_0x80.16b
+       cmhs    v_mask3.16b, v11.16b, v_0x80.16b
+       and     v_mask0.16b, v_mask0.16b, v_gf8poly.16b
+       and     v_mask1.16b, v_mask1.16b, v_gf8poly.16b
+       and     v_mask2.16b, v_mask2.16b, v_gf8poly.16b
+       and     v_mask3.16b, v_mask3.16b, v_gf8poly.16b
+       shl     v8.16b,  v8.16b,  #1
+       shl     v9.16b,  v9.16b,  #1
+       shl     v10.16b, v10.16b, #1
+       shl     v11.16b, v11.16b, #1
+       eor     v8.16b,  v8.16b,  v_mask0.16b
+       eor     v9.16b,  v9.16b,  v_mask1.16b
+       eor     v10.16b, v10.16b, v_mask2.16b
+       eor     v11.16b, v11.16b, v_mask3.16b
+       eor     v8.16b,  v8.16b,  v16.16b
+       eor     v9.16b,  v9.16b,  v17.16b
+       eor     v10.16b, v10.16b, v18.16b
+       eor     v11.16b, v11.16b, v19.16b
+
+       cmhs    v_mask0.16b, v12.16b, v_0x80.16b
+       cmhs    v_mask1.16b, v13.16b, v_0x80.16b
+       cmhs    v_mask2.16b, v14.16b, v_0x80.16b
+       cmhs    v_mask3.16b, v15.16b, v_0x80.16b
+       and     v_mask0.16b, v_mask0.16b, v_gf8poly.16b
+       and     v_mask1.16b, v_mask1.16b, v_gf8poly.16b
+       and     v_mask2.16b, v_mask2.16b, v_gf8poly.16b
+       and     v_mask3.16b, v_mask3.16b, v_gf8poly.16b
+       shl     v12.16b, v12.16b, #1
+       shl     v13.16b, v13.16b, #1
+       shl     v14.16b, v14.16b, #1
+       shl     v15.16b, v15.16b, #1
+       eor     v12.16b, v12.16b, v_mask0.16b
+       eor     v13.16b, v13.16b, v_mask1.16b
+       eor     v14.16b, v14.16b, v_mask2.16b
+       eor     v15.16b, v15.16b, v_mask3.16b
+       eor     v12.16b, v12.16b, v20.16b
+       eor     v13.16b, v13.16b, v21.16b
+       eor     v14.16b, v14.16b, v22.16b
+       eor     v15.16b, v15.16b, v23.16b
+
+       bne     .Lloop128_vects
+
+.Lloop128_vects_end:
+       str     q0, [x_dst_p, #16*0]
+       str     q1, [x_dst_p, #16*1]
+       str     q2, [x_dst_p, #16*2]
+       str     q3, [x_dst_p, #16*3]
+       str     q4, [x_dst_p, #16*4]
+       str     q5, [x_dst_p, #16*5]
+       str     q6, [x_dst_p, #16*6]
+       str     q7, [x_dst_p, #16*7]
+
+       str     q8,  [x_dst_q, #16*0]
+       str     q9,  [x_dst_q, #16*1]
+       str     q10, [x_dst_q, #16*2]
+       str     q11, [x_dst_q, #16*3]
+       str     q12, [x_dst_q, #16*4]
+       str     q13, [x_dst_q, #16*5]
+       str     q14, [x_dst_q, #16*6]
+       str     q15, [x_dst_q, #16*7]
+
+       add     x_dst_p, x_dst_p, #128
+       add     x_dst_q, x_dst_q, #128
+       cmp     x_dst_q, x_dst_q_end
+       add     w_col, w_col, #128
+       bls     .Lloop128
+
+.Lloop128_end:
+       /* restore d8 ~ d15 */
+       ldp     d8,  d9,  [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_dst_q_end, x_dst_q_end, #128
+
+.Lloop16_init:
+       tst     w_len, #0x7F
+       beq     .Lloop16_end
+       sub     x_dst_q_end, x_dst_q_end, #16
+
+       /* batch process (vects-2)*16 bytes */
+       /* v0: p;  v1: q;  v2: in;  v3: mask */
+.Lloop16:
+       ldr     q0, [x_src_last], #16
+       mov     v1.16b, v0.16b
+
+       cbz     w_vects, .Lloop16_vects_end
+
+       sub     x_src_ptr, x_src, #8
+.Lloop16_vects:
+       ldr     x_srcn, [x_src_ptr], #-8
+       ldr     q2, [x_srcn, x_col]
+       cmp     x_src_ptr, x_src_ptr_end
+
+       eor     v0.16b, v0.16b, v2.16b
+
+       cmhs    v3.16b, v1.16b, v_0x80.16b
+       and     v3.16b, v3.16b, v_gf8poly.16b
+
+       shl     v1.16b, v1.16b, #1
+       eor     v1.16b, v1.16b, v2.16b
+       eor     v1.16b, v1.16b, v3.16b
+
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       str     q0, [x_dst_p], #16
+       str     q1, [x_dst_q], #16
+       cmp     x_dst_q, x_dst_q_end
+       add     w_col, w_col, #16
+       bls     .Lloop16
+
+.Lloop16_end:
+       mov     w_ret, #0
+       ret
diff --git a/ceph/src/isa-l/raid/aarch64/raid_aarch64_dispatcher.c b/ceph/src/isa-l/raid/aarch64/raid_aarch64_dispatcher.c
new file mode 100644 (file)
index 0000000..c81bd8c
--- /dev/null
@@ -0,0 +1,61 @@
+/**********************************************************************
+  Copyright(c) 2019 Arm Corporation All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+    * Neither the name of Arm Corporation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************/
+#include <aarch64_multibinary.h>
+
+DEFINE_INTERFACE_DISPATCHER(xor_gen)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(xor_gen_neon);
+       return PROVIDER_BASIC(xor_gen);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(xor_check)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(xor_check_neon);
+       return PROVIDER_BASIC(xor_check);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(pq_gen)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(pq_gen_neon);
+       return PROVIDER_BASIC(pq_gen);
+
+}
+
+DEFINE_INTERFACE_DISPATCHER(pq_check)
+{
+       if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
+               return PROVIDER_INFO(pq_check_neon);
+       return PROVIDER_BASIC(pq_check);
+
+}
diff --git a/ceph/src/isa-l/raid/aarch64/raid_multibinary_arm.S b/ceph/src/isa-l/raid/aarch64/raid_multibinary_arm.S
new file mode 100644 (file)
index 0000000..0316239
--- /dev/null
@@ -0,0 +1,36 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+#include "aarch64_multibinary.h"
+
+
+mbin_interface xor_gen
+mbin_interface xor_check
+mbin_interface pq_gen
+mbin_interface pq_check
diff --git a/ceph/src/isa-l/raid/aarch64/xor_check_neon.S b/ceph/src/isa-l/raid/aarch64/xor_check_neon.S
new file mode 100644 (file)
index 0000000..95cb7d1
--- /dev/null
@@ -0,0 +1,271 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.text
+
+.global xor_check_neon
+.type xor_check_neon, %function
+
+/* int xor_check_neon(int vects, int len, void **src) */
+
+/* arguments */
+w_vects                .req    w0      /* MUST >= 2 */
+x_vects                .req    x0
+w_len          .req    w1
+x_len          .req    x1
+x_src          .req    x2
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+w_in           .req    w1      /* share w_len */
+x_src0         .req    x3
+x_src0_end     .req    x4
+w_len256       .req    w5      /* share w_len16 */
+x_len256       .req    x5
+w_len16                .req    w5
+x_len16                .req    x5
+w_col          .req    w6
+x_col          .req    x6
+x_src_ptr      .req    x7
+x_srcn         .req    x9
+x_src_ptr_end  .req    x10
+w_xor          .req    w11
+/* v0  ~ v15: temporary results */
+/* v16 ~ v31: next 256 bytes */
+
+/*
+ *                 +----------+            +------------------+
+ *         src --> |  src[0]  | - src0 ->  |      buffer      | src0_end
+ *         --------+----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+            +------------------+
+ *     src_ptr ~~> |  src[n]  | - srcn ~>  |      buffer      |
+ *           .     +----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+
+ *           .     | src[v-1] |
+ *         --------+----------+
+ *  src_ptr_end -->
+ */
+
+xor_check_neon:
+       add     x_src_ptr_end, x_src, x_vects, lsl #3
+       ldr     x_src0, [x_src]
+       add     x_src0_end, x_src0, x_len
+
+       sub     w_vects, w_vects, #1
+       mov     w_col, #0
+       mov     w_xor, #0
+
+.Lloop256_init:
+       /* len256 = len - len%256; len %= 256 */
+       mov     w_len256, w_len
+       and     w_len, w_len, #0xFF
+       sub     w_len256, w_len256, w_len
+
+       /* less than 256 byts? */
+       cbz     w_len256, .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src0_end, x_src0_end, #256
+
+       /* batch process vects*256 bytes */
+.Lloop256:
+       ldr     q0,  [x_src0, #16*0]
+       ldr     q1,  [x_src0, #16*1]
+       ldr     q2,  [x_src0, #16*2]
+       ldr     q3,  [x_src0, #16*3]
+       ldr     q4,  [x_src0, #16*4]
+       ldr     q5,  [x_src0, #16*5]
+       ldr     q6,  [x_src0, #16*6]
+       ldr     q7,  [x_src0, #16*7]
+       ldr     q8,  [x_src0, #16*8]
+       ldr     q9,  [x_src0, #16*9]
+       ldr     q10, [x_src0, #16*10]
+       ldr     q11, [x_src0, #16*11]
+       ldr     q12, [x_src0, #16*12]
+       ldr     q13, [x_src0, #16*13]
+       ldr     q14, [x_src0, #16*14]
+       ldr     q15, [x_src0, #16*15]
+       add     x_src0, x_src0, #256
+
+       cbz     w_vects, .Lloop256_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop256_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       add     x_srcn, x_srcn, x_col
+       cmp     x_src_ptr, x_src_ptr_end
+
+       ldr     q16, [x_srcn, #16*0]
+       ldr     q17, [x_srcn, #16*1]
+       ldr     q18, [x_srcn, #16*2]
+       ldr     q19, [x_srcn, #16*3]
+       ldr     q20, [x_srcn, #16*4]
+       ldr     q21, [x_srcn, #16*5]
+       ldr     q22, [x_srcn, #16*6]
+       ldr     q23, [x_srcn, #16*7]
+       ldr     q24, [x_srcn, #16*8]
+       ldr     q25, [x_srcn, #16*9]
+       ldr     q26, [x_srcn, #16*10]
+       ldr     q27, [x_srcn, #16*11]
+       ldr     q28, [x_srcn, #16*12]
+       ldr     q29, [x_srcn, #16*13]
+       ldr     q30, [x_srcn, #16*14]
+       ldr     q31, [x_srcn, #16*15]
+
+       eor     v0.16b,  v0.16b,  v16.16b
+       eor     v1.16b,  v1.16b,  v17.16b
+       eor     v2.16b,  v2.16b,  v18.16b
+       eor     v3.16b,  v3.16b,  v19.16b
+       eor     v4.16b,  v4.16b,  v20.16b
+       eor     v5.16b,  v5.16b,  v21.16b
+       eor     v6.16b,  v6.16b,  v22.16b
+       eor     v7.16b,  v7.16b,  v23.16b
+       eor     v8.16b,  v8.16b,  v24.16b
+       eor     v9.16b,  v9.16b,  v25.16b
+       eor     v10.16b, v10.16b, v26.16b
+       eor     v11.16b, v11.16b, v27.16b
+       eor     v12.16b, v12.16b, v28.16b
+       eor     v13.16b, v13.16b, v29.16b
+       eor     v14.16b, v14.16b, v30.16b
+       eor     v15.16b, v15.16b, v31.16b
+
+       bne     .Lloop256_vects
+
+.Lloop256_vects_end:
+       orr     v0.16b,  v0.16b,  v1.16b
+       orr     v2.16b,  v2.16b,  v3.16b
+       orr     v4.16b,  v4.16b,  v5.16b
+       orr     v6.16b,  v6.16b,  v7.16b
+       orr     v8.16b,  v8.16b,  v9.16b
+       orr     v10.16b, v10.16b, v11.16b
+       orr     v12.16b, v12.16b, v13.16b
+       orr     v14.16b, v14.16b, v15.16b
+       orr     v0.16b,  v0.16b,  v2.16b
+       orr     v4.16b,  v4.16b,  v6.16b
+       orr     v8.16b,  v8.16b,  v10.16b
+       orr     v12.16b, v12.16b, v14.16b
+       orr     v0.16b,  v0.16b,  v4.16b
+       orr     v8.16b,  v8.16b,  v12.16b
+       orr     v0.16b,  v0.16b,  v8.16b
+       umaxv   b0, v0.16b
+       umov    w_xor, v0.b[0]
+       cbnz    w_xor, .Lloop256_end
+
+       cmp     x_src0, x_src0_end
+       add     w_col, w_col, #256
+       bls     .Lloop256
+
+.Lloop256_end:
+       /* restore d8 ~ d15 */
+       ldp     d8, d9, [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       cbnz    w_xor, .Lerror
+
+       add     x_src0_end, x_src0_end, #256
+
+.Lloop16_init:
+       /* len16 = len - len%16; len %= 16 */
+       mov     w_len16, w_len
+       and     w_len, w_len, #0xF
+       sub     w_len16, w_len16, w_len
+
+       /* less than 16 bytes? */
+       cbz     w_len16, .Lloop1_init
+
+       sub     x_src0_end, x_src0_end, #16
+
+       /* batch process vects*16 bytes */
+.Lloop16:
+       ldr     q0, [x_src0], #16
+       cbz     w_vects, .Lloop16_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop16_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       cmp     x_src_ptr, x_src_ptr_end
+       ldr     q1, [x_srcn, x_col]
+       eor     v0.16b, v0.16b, v1.16b
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       umaxv   b0, v0.16b
+       umov    w_xor, v0.b[0]
+       cbnz    w_xor, .Lerror
+       cmp     x_src0, x_src0_end
+       add     w_col, w_col, #16
+       bls     .Lloop16
+
+.Lloop16_end:
+       add     x_src0_end, x_src0_end, #16
+
+.Lloop1_init:
+       cbnz    w_len, .Lloop1
+       mov     w_ret, #0
+       ret
+
+       /* batch process vects*1 bytes */
+.Lloop1:
+       ldrb    w_xor, [x_src0], #1
+       cbz     w_vects, .Lloop1_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop1_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       cmp     x_src_ptr, x_src_ptr_end
+       ldrb    w_in, [x_srcn, x_col]
+       eor     w_xor, w_xor, w_in
+       bne     .Lloop1_vects
+
+.Lloop1_vects_end:
+       cbnz    w_xor, .Lerror
+       cmp     x_src0, x_src0_end
+       add     w_col, w_col, #1
+       bne     .Lloop1
+
+.Lloop1_end:
+       mov     w_ret, #0
+       ret
+
+.Lerror:
+       mov     w_ret, #1
+       ret
diff --git a/ceph/src/isa-l/raid/aarch64/xor_gen_neon.S b/ceph/src/isa-l/raid/aarch64/xor_gen_neon.S
new file mode 100644 (file)
index 0000000..00f65a2
--- /dev/null
@@ -0,0 +1,264 @@
+########################################################################
+#  Copyright(c) 2019 Arm Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Arm Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#########################################################################
+
+.text
+
+.global xor_gen_neon
+.type xor_gen_neon, %function
+
+/* int xor_gen_neon(int vects, int len, void **src) */
+
+/* arguments */
+w_vects                .req    w0      /* MUST >= 2 */
+x_vects                .req    x0
+w_len          .req    w1
+x_len          .req    x1
+x_src          .req    x2
+
+/* returns */
+w_ret          .req    w0
+
+/* local variables */
+w_in           .req    w1      /* share w_len */
+x_src0         .req    x3
+x_src0_end     .req    x4
+w_len256       .req    w5      /* share w_len16, w_xor */
+x_len256       .req    x5
+w_len16                .req    w5
+x_len16                .req    x5
+w_xor          .req    w5
+w_col          .req    w6
+x_col          .req    x6
+x_src_ptr      .req    x7
+x_srcn         .req    x9
+x_dst          .req    x10
+x_dst_ptr      .req    x11
+/* v0  ~ v15: temporary results */
+/* v16 ~ v31: next 256 bytes */
+
+/*
+ *                 +----------+            +------------------+
+ *         src --> |  src[0]  | - src0 ->  |      buffer      | src0_end
+ *         --------+----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+            +------------------+
+ *     src_ptr ~~> |  src[n]  | - srcn ~>  |      buffer      |
+ *           .     +----------+            +------------------+
+ *           .     |  ......  |
+ *           .     +----------+
+ *           .     | src[v-2] |
+ *         --------+----------+            +------------------+
+ *     dst_ptr --> | src[v-1] | -- dst --> |      buffer      |
+ *                 +----------+            +------------------+
+ */
+
+xor_gen_neon:
+       add     x_dst_ptr, x_src, x_vects, lsl #3
+       ldr     x_dst, [x_dst_ptr, #-8]!
+       ldr     x_src0, [x_src]
+       add     x_src0_end, x_src0, x_len
+
+       sub     w_vects, w_vects, #2
+       mov     w_col, #0
+
+.Loop256_init:
+       /* len256 = len - len%256; len %= 256 */
+       mov     w_len256, w_len
+       and     w_len, w_len, #0xFF
+       sub     w_len256, w_len256, w_len
+
+       /* less than 256 byts? */
+       cbz     w_len256, .Lloop16_init
+
+       /* save d8 ~ d15 to stack */
+       sub     sp, sp, #64
+       stp     d8, d9, [sp]
+       stp     d10, d11, [sp, #16]
+       stp     d12, d13, [sp, #32]
+       stp     d14, d15, [sp, #48]
+
+       sub     x_src0_end, x_src0_end, #256
+
+       /* batch process (vects-1)*256 bytes */
+.Lloop256:
+       ldr     q0,  [x_src0, #16*0]
+       ldr     q1,  [x_src0, #16*1]
+       ldr     q2,  [x_src0, #16*2]
+       ldr     q3,  [x_src0, #16*3]
+       ldr     q4,  [x_src0, #16*4]
+       ldr     q5,  [x_src0, #16*5]
+       ldr     q6,  [x_src0, #16*6]
+       ldr     q7,  [x_src0, #16*7]
+       ldr     q8,  [x_src0, #16*8]
+       ldr     q9,  [x_src0, #16*9]
+       ldr     q10, [x_src0, #16*10]
+       ldr     q11, [x_src0, #16*11]
+       ldr     q12, [x_src0, #16*12]
+       ldr     q13, [x_src0, #16*13]
+       ldr     q14, [x_src0, #16*14]
+       ldr     q15, [x_src0, #16*15]
+       add     x_src0, x_src0, #256
+
+       cbz     w_vects, .Lloop256_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop256_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       add     x_srcn, x_srcn, x_col
+       cmp     x_src_ptr, x_dst_ptr
+
+       ldr     q16, [x_srcn, #16*0]
+       ldr     q17, [x_srcn, #16*1]
+       ldr     q18, [x_srcn, #16*2]
+       ldr     q19, [x_srcn, #16*3]
+       ldr     q20, [x_srcn, #16*4]
+       ldr     q21, [x_srcn, #16*5]
+       ldr     q22, [x_srcn, #16*6]
+       ldr     q23, [x_srcn, #16*7]
+       ldr     q24, [x_srcn, #16*8]
+       ldr     q25, [x_srcn, #16*9]
+       ldr     q26, [x_srcn, #16*10]
+       ldr     q27, [x_srcn, #16*11]
+       ldr     q28, [x_srcn, #16*12]
+       ldr     q29, [x_srcn, #16*13]
+       ldr     q30, [x_srcn, #16*14]
+       ldr     q31, [x_srcn, #16*15]
+
+       eor     v0.16b,  v0.16b,  v16.16b
+       eor     v1.16b,  v1.16b,  v17.16b
+       eor     v2.16b,  v2.16b,  v18.16b
+       eor     v3.16b,  v3.16b,  v19.16b
+       eor     v4.16b,  v4.16b,  v20.16b
+       eor     v5.16b,  v5.16b,  v21.16b
+       eor     v6.16b,  v6.16b,  v22.16b
+       eor     v7.16b,  v7.16b,  v23.16b
+       eor     v8.16b,  v8.16b,  v24.16b
+       eor     v9.16b,  v9.16b,  v25.16b
+       eor     v10.16b, v10.16b, v26.16b
+       eor     v11.16b, v11.16b, v27.16b
+       eor     v12.16b, v12.16b, v28.16b
+       eor     v13.16b, v13.16b, v29.16b
+       eor     v14.16b, v14.16b, v30.16b
+       eor     v15.16b, v15.16b, v31.16b
+
+       bne     .Lloop256_vects
+
+.Lloop256_vects_end:
+       str     q0,  [x_dst, #16*0]
+       str     q1,  [x_dst, #16*1]
+       str     q2,  [x_dst, #16*2]
+       str     q3,  [x_dst, #16*3]
+       str     q4,  [x_dst, #16*4]
+       str     q5,  [x_dst, #16*5]
+       str     q6,  [x_dst, #16*6]
+       str     q7,  [x_dst, #16*7]
+       str     q8,  [x_dst, #16*8]
+       str     q9,  [x_dst, #16*9]
+       str     q10, [x_dst, #16*10]
+       str     q11, [x_dst, #16*11]
+       str     q12, [x_dst, #16*12]
+       str     q13, [x_dst, #16*13]
+       str     q14, [x_dst, #16*14]
+       str     q15, [x_dst, #16*15]
+
+       cmp     x_src0, x_src0_end
+       add     x_dst, x_dst, #256
+       add     w_col, w_col, #256
+       bls     .Lloop256
+
+.Lloop256_end:
+       /* restore d8 ~ d15 */
+       ldp     d8, d9, [sp]
+       ldp     d10, d11, [sp, #16]
+       ldp     d12, d13, [sp, #32]
+       ldp     d14, d15, [sp, #48]
+       add     sp, sp, #64
+
+       add     x_src0_end, x_src0_end, #256
+
+.Lloop16_init:
+       /* len16 = len - len%16; len %= 16 */
+       mov     w_len16, w_len
+       and     w_len, w_len, #0xF
+       sub     w_len16, w_len16, w_len
+
+       /* less than 16 bytes? */
+       cbz     w_len16, .Lloop1_init
+
+       sub     x_src0_end, x_src0_end, #16
+
+       /* batch process (vects-1)*16 bytes */
+.Lloop16:
+       ldr     q0, [x_src0], #16
+       cbz     w_vects, .Lloop16_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop16_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       cmp     x_src_ptr, x_dst_ptr
+       ldr     q1, [x_srcn, x_col]
+       eor     v0.16b, v0.16b, v1.16b
+       bne     .Lloop16_vects
+
+.Lloop16_vects_end:
+       cmp     x_src0, x_src0_end
+       str     q0, [x_dst], #16
+       add     w_col, w_col, #16
+       bls     .Lloop16
+
+.Loop16_end:
+       add     x_src0_end, x_src0_end, #16
+
+.Lloop1_init:
+       cbnz    w_len, .Lloop1
+       mov     w_ret, #0
+       ret
+
+       /* batch process (vects-1)*1 bytes */
+.Lloop1:
+       ldrb    w_xor, [x_src0], #1
+       cbz     w_vects, .Lloop1_vects_end
+
+       add     x_src_ptr, x_src, #8
+.Lloop1_vects:
+       ldr     x_srcn, [x_src_ptr], #8
+       cmp     x_src_ptr, x_dst_ptr
+       ldrb    w_in, [x_srcn, x_col]
+       eor     w_xor, w_xor, w_in
+       bne     .Lloop1_vects
+
+.Lloop1_vects_end:
+       cmp     x_src0, x_src0_end
+       strb    w_xor, [x_dst], #1
+       add     w_col, w_col, #1
+       bne     .Lloop1
+
+.Loop1_end:
+       mov     w_ret, #0
+       ret
index 96a8177a7d7a3cf6a949780f8e748d0f3bb7623e..57cab3acd0e1a5bb5bc00806480b2661600154fd 100644 (file)
@@ -122,7 +122,7 @@ default rel
 section .text
 
 align 16
-global pq_check_sse:function
+global pq_check_sse:ISAL_SYM_TYPE_FUNCTION
 func(pq_check_sse)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index 6c5915f9a78f7c14994f95d3742393b203f275d6..1c3b95dfb15132bfb5114abab37f40c0ea52dc6f 100644 (file)
 section .text
 
 align 16
-global pq_check_sse:function
+global pq_check_sse:ISAL_SYM_TYPE_FUNCTION
 func(pq_check_sse)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index 8b6d0a1f42bbc98fe009f8fa4fb6c36ff1a69fdf..27d0203d2df7a83c3995d99990210c5f8e4f5325 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 43c31a52ed43b43b10f547b91ab7cecd5b3e92f0..54c0ded2e752261365d34e08f24780b02e91343f 100644 (file)
@@ -125,7 +125,7 @@ default rel
 section .text
 
 align 16
-global pq_gen_avx:function
+global pq_gen_avx:ISAL_SYM_TYPE_FUNCTION
 func(pq_gen_avx)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index 96797a62180f78fa4014f37869ff2f28c62a1e19..22221510383e3a000e99305d65391e1dea1b0f57 100644 (file)
@@ -126,7 +126,7 @@ default rel
 section .text
 
 align 16
-global pq_gen_avx2:function
+global pq_gen_avx2:ISAL_SYM_TYPE_FUNCTION
 func(pq_gen_avx2)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index ac7b29f967031faa3d36b2bfbe639fabbbc56b5c..639cef2ffed9c53a6a38b7b395a0b77a259cb83d 100644 (file)
@@ -123,7 +123,7 @@ default rel
 section .text
 
 align 16
-global pq_gen_avx512:function
+global pq_gen_avx512:ISAL_SYM_TYPE_FUNCTION
 func(pq_gen_avx512)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index 194f2604865bbe5d07f495636c0f52e4ab0bf47e..7315c82b3ce2a016733d28a7b9cba6b7e9586712 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -40,7 +40,6 @@
 // Cached test, loop many times over small dataset
 # define TEST_SOURCES 10
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   800000
 # define TEST_TYPE_STR "_warm"
 #else
 # ifndef TEST_CUSTOM
 #  define TEST_SOURCES 10
 #  define GT_L3_CACHE  32*1024*1024    /* some number > last level cache */
 #  define TEST_LEN     ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1))
-#  define TEST_LOOPS   1000
 #  define TEST_TYPE_STR "_cold"
 # else
 #  define TEST_TYPE_STR "_cus"
-#  ifndef TEST_LOOPS
-#   define TEST_LOOPS  1000
-#  endif
 # endif
 #endif
 
@@ -64,7 +59,7 @@ int main(int argc, char *argv[])
 {
        int i;
        void *buffs[TEST_SOURCES + 2];
-       struct perf start, stop;
+       struct perf start;
 
        printf("Test pq_gen_perf %d sources X %d bytes\n", TEST_SOURCES, TEST_LEN);
 
@@ -85,13 +80,9 @@ int main(int argc, char *argv[])
                memset(buffs[i], 0, TEST_LEN);
 
        // Warm up
-       pq_gen(TEST_SOURCES + 2, TEST_LEN, buffs);
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++)
-               pq_gen(TEST_SOURCES + 2, TEST_LEN, buffs);
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, pq_gen(TEST_SOURCES + 2, TEST_LEN, buffs));
        printf("pq_gen" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_MEM * i);
+       perf_print(start, (long long)TEST_MEM);
 
        return 0;
 }
index 1426f3f55cfe8aaf9eb7d6afd7b407b72f51ea1b..f95e75a95fb51ce16e38645a512304cbc9d43fd1 100644 (file)
@@ -122,7 +122,7 @@ default rel
 section .text
 
 align 16
-global pq_gen_sse:function
+global pq_gen_sse:ISAL_SYM_TYPE_FUNCTION
 func(pq_gen_sse)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index 16093d5290635b4aa1737cc87e3f70d0ec711552..57064b773ba13506cfd24f6648904a5bc239c169 100644 (file)
 section .text
 
 align 16
-global pq_gen_sse:function
+global pq_gen_sse:ISAL_SYM_TYPE_FUNCTION
 func(pq_gen_sse)
        FUNC_SAVE
        sub     vec, 3                  ;Keep as offset to last source
index d08449642e7b07dbfa873f492b17b6ddaa775cec..3469f7e50c2f42a4e044e4ee911fae25d7e500d6 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 25c193312f5c3ba479f461fe166b357f6d707e2f..e066eb8515390a26550b69a72106d0c7343a023b 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index 72ef5d40d595e29af38e88e73140ac5da968b56c..318062774939d2b23f4f219c48dc44efd17c277c 100644 (file)
 ;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 %include "multibinary.asm"
 
@@ -62,13 +56,9 @@ extern xor_check_sse
 mbin_interface xor_gen
 mbin_interface pq_gen
 
-%ifdef HAVE_AS_KNOWS_AVX512
- mbin_dispatch_init6 xor_gen, xor_gen_base, xor_gen_sse, xor_gen_avx, xor_gen_avx, xor_gen_avx512
- mbin_dispatch_init6 pq_gen, pq_gen_base, pq_gen_sse, pq_gen_avx, pq_gen_avx2, pq_gen_avx512
-%else
- mbin_dispatch_init5 xor_gen, xor_gen_base, xor_gen_sse, xor_gen_avx, xor_gen_avx
- mbin_dispatch_init5 pq_gen, pq_gen_base, pq_gen_sse, pq_gen_avx, pq_gen_avx2
-%endif
+
+mbin_dispatch_init6 xor_gen, xor_gen_base, xor_gen_sse, xor_gen_avx, xor_gen_avx, xor_gen_avx512
+mbin_dispatch_init6 pq_gen, pq_gen_base, pq_gen_sse, pq_gen_avx, pq_gen_avx2, pq_gen_avx512
 
 section .data
 
@@ -82,7 +72,7 @@ section .text
 ;;;;
 ; pq_check multibinary function
 ;;;;
-global pq_check:function
+global pq_check:ISAL_SYM_TYPE_FUNCTION
 pq_check_mbinit:
        call    pq_check_dispatch_init
 pq_check:
@@ -114,7 +104,7 @@ pq_check_dispatch_init:
 ;;;;
 ; xor_check multibinary function
 ;;;;
-global xor_check:function
+global xor_check:ISAL_SYM_TYPE_FUNCTION
 xor_check_mbinit:
        call    xor_check_dispatch_init
 xor_check:
index 6da4c9dc0a0cdbd93a3342a9a2aeeb1a57913c98..eee7fd5a17a535cf3f89b66ce120b87626df00d2 100644 (file)
 ;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-%ifidn __OUTPUT_FORMAT__, elf64
-%define WRT_OPT         wrt ..plt
-%else
-%define WRT_OPT
-%endif
-
 %include "reg_sizes.asm"
 %include "multibinary.asm"
 
index 65ae2f775d6c392aae96b346d564970197425ee5..395ee20b3414266f761954f6ab5539c2c7f7ec9f 100644 (file)
 section .text
 
 align 16
-global xor_check_sse:function
+global xor_check_sse:ISAL_SYM_TYPE_FUNCTION
 func(xor_check_sse)
        FUNC_SAVE
 %ifidn PS,8                            ;64-bit code
index dfb571a60ac9cfeccae9dd8273e556b03f8d68ae..c7532076f07d8f91919d50303da28073726d88af 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
index d328c31490f70443b3f9c7a6a1935c402ef98ed9..48145ac90cf5e5aa29e0438d4e239cb21d44ba60 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2013 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
@@ -42,7 +42,7 @@ int main(int argc, char *argv[])
        printf("XOR example\n");
        for (i = 0; i < TEST_SOURCES + 1; i++) {
                void *buf;
-               if (posix_memalign(&buf, 16, TEST_LEN)) {
+               if (posix_memalign(&buf, 32, TEST_LEN)) {
                        printf("alloc error: Fail");
                        return 1;
                }
@@ -55,15 +55,15 @@ int main(int argc, char *argv[])
                        ((char *)buffs[i])[j] = rand();
 
        printf("Generate xor parity\n");
-       xor_gen_sse(TEST_SOURCES + 1, TEST_LEN, buffs);
+       xor_gen(TEST_SOURCES + 1, TEST_LEN, buffs);
 
        printf("Check parity: ");
-       should_pass = xor_check_sse(TEST_SOURCES + 1, TEST_LEN, buffs);
+       should_pass = xor_check(TEST_SOURCES + 1, TEST_LEN, buffs);
        printf("%s\n", should_pass == 0 ? "Pass" : "Fail");
 
        printf("Find corruption: ");
        ((char *)buffs[TEST_SOURCES / 2])[TEST_LEN / 2] ^= 1;   // flip one bit
-       should_fail = xor_check_sse(TEST_SOURCES + 1, TEST_LEN, buffs); //recheck
+       should_fail = xor_check(TEST_SOURCES + 1, TEST_LEN, buffs);     //recheck
        printf("%s\n", should_fail != 0 ? "Pass" : "Fail");
 
        return 0;
index 536ab3e2e08325451d0103025d11e1c0169766b7..c1e5be082ebfd84888c76dc7e8fcbaf146a0f107 100644 (file)
@@ -100,7 +100,7 @@ default rel
 section .text
 
 align 16
-global xor_gen_avx:function
+global xor_gen_avx:ISAL_SYM_TYPE_FUNCTION
 func(xor_gen_avx)
 
        FUNC_SAVE
index 6892f85c7160c79a70246932c5fd5c55a01f4a90..4beae09056e37c11bb246d292988e271bc3b74e7 100644 (file)
@@ -103,7 +103,7 @@ default rel
 section .text
 
 align 16
-global xor_gen_avx512:function
+global xor_gen_avx512:ISAL_SYM_TYPE_FUNCTION
 func(xor_gen_avx512)
        FUNC_SAVE
        sub     vec, 2                  ;Keep as offset to last source
index 25b33cb6f9d0eb6afd52edfe578d43ba38f11b80..717e0ada7ff30b48e6a7b44978edcac582f9da29 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
 
 //#define CACHED_TEST
 #ifdef CACHED_TEST
-// Loop many times over same 
+// Loop many times over same
 # define TEST_SOURCES 10
 # define TEST_LEN     8*1024
-# define TEST_LOOPS   2000000
 # define TEST_TYPE_STR "_warm"
 #else
 // Uncached test.  Pull from large mem base.
 # define TEST_SOURCES 10
 # define GT_L3_CACHE  32*1024*1024     /* some number > last level cache */
 # define TEST_LEN     GT_L3_CACHE / TEST_SOURCES
-# define TEST_LOOPS   1000
 # define TEST_TYPE_STR "_cold"
 #endif
 
@@ -58,7 +56,7 @@ int main(int argc, char *argv[])
        int i, ret, fail = 0;
        void **buffs;
        void *buff;
-       struct perf start, stop;
+       struct perf start;
 
        printf("Test xor_gen_perf\n");
 
@@ -84,15 +82,9 @@ int main(int argc, char *argv[])
        for (i = 0; i < TEST_SOURCES + 1; i++)
                memset(buffs[i], 0, TEST_LEN);
 
-       // Warm up
-       xor_gen(TEST_SOURCES + 1, TEST_LEN, buffs);
-
-       perf_start(&start);
-       for (i = 0; i < TEST_LOOPS; i++)
-               xor_gen(TEST_SOURCES + 1, TEST_LEN, buffs);
-       perf_stop(&stop);
+       BENCHMARK(&start, BENCHMARK_TIME, xor_gen(TEST_SOURCES + 1, TEST_LEN, buffs));
        printf("xor_gen" TEST_TYPE_STR ": ");
-       perf_print(stop, start, (long long)TEST_MEM * i);
+       perf_print(start, (long long)TEST_MEM);
 
        return fail;
 }
index 2fd6faeb2e2eaa535dd287b6c138377df5e930a7..a1c16c76188efc48d4f231a65fb5920d5516a522 100644 (file)
 section .text
 
 align 16
-global xor_gen_sse:function
+global xor_gen_sse:ISAL_SYM_TYPE_FUNCTION
 func(xor_gen_sse)
        FUNC_SAVE
 %ifidn PS,8                            ;64-bit code
index f158f94cb9f21d0339dbef7bc517a9dc5bf29ade..ee922bfaf84cbe86decf432c89b33f6fcc32f2f1 100644 (file)
@@ -2,7 +2,7 @@
   Copyright(c) 2011-2015 Intel Corporation All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions 
+  modification, are permitted provided that the following conditions
   are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
diff --git a/ceph/src/isa-l/tests/fuzz/Makefile.am b/ceph/src/isa-l/tests/fuzz/Makefile.am
new file mode 100644 (file)
index 0000000..424a028
--- /dev/null
@@ -0,0 +1,52 @@
+########################################################################
+#  Copyright(c) 2011-2017 Intel Corporation All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#    * Redistributions of source code must retain the above copyright
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in
+#      the documentation and/or other materials provided with the
+#      distribution.
+#    * Neither the name of Intel Corporation nor the names of its
+#      contributors may be used to endorse or promote products derived
+#      from this software without specific prior written permission.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+########################################################################
+
+src_include += -I $(srcdir)/tests/fuzz
+
+# AFL fuzz tests
+other_tests += tests/fuzz/igzip_fuzz_inflate
+igzip_fuzz_inflate: igzip_checked_inflate_fuzz_test.o
+igzip_fuzz_inflate: LDLIBS += -lz
+tests_fuzz_igzip_fuzz_inflate_LDADD = tests/fuzz/igzip_checked_inflate_fuzz_test.o libisal.la
+tests_fuzz_igzip_fuzz_inflate_LDFLAGS = -lz
+
+other_tests += tests/fuzz/igzip_dump_inflate_corpus
+tests_fuzz_igzip_dump_inflate_corpus_LDADD = libisal.la
+
+# LLVM fuzz tests
+llvm_fuzz_tests = tests/fuzz/igzip_simple_inflate_fuzz_test
+other_src      += tests/fuzz/igzip_simple_inflate_fuzz_test.c
+
+llvm_fuzz_tests += tests/fuzz/igzip_checked_inflate_fuzz_test
+other_src       += tests/fuzz/igzip_checked_inflate_fuzz_test.c
+
+llvm_fuzz_tests += tests/fuzz/igzip_simple_round_trip_fuzz_test
+other_src       += tests/fuzz/igzip_simple_round_trip_fuzz_test.c
+
+igzip_checked_inflate_fuzz_test: LDLIBS += -lz
diff --git a/ceph/src/isa-l/tests/fuzz/Makefile.unx b/ceph/src/isa-l/tests/fuzz/Makefile.unx
new file mode 100644 (file)
index 0000000..afa20a3
--- /dev/null
@@ -0,0 +1,12 @@
+
+default: llvm_fuzz_tests
+
+include ../../igzip/Makefile.am
+include Makefile.am
+include ../../make.inc
+
+CC  = clang
+CXX = clang++
+CXXFLAGS += $(DEFINES)
+
+VPATH = . ../../igzip ../../include
diff --git a/ceph/src/isa-l/tests/fuzz/igzip_checked_inflate_fuzz_test.c b/ceph/src/isa-l/tests/fuzz/igzip_checked_inflate_fuzz_test.c
new file mode 100644 (file)
index 0000000..557433d
--- /dev/null
@@ -0,0 +1,72 @@
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <zlib.h>
+#include <assert.h>
+#include "igzip_lib.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size)
+{
+       struct inflate_state state;
+       z_stream zstate;
+       size_t out_buf_size = 2 * size;
+       int zret, iret;
+       char z_msg_invalid_code_set[] = "invalid code lengths set";
+       char z_msg_invalid_dist_set[] = "invalid distances set";
+       char z_msg_invalid_lit_len_set[] = "invalid literal/lengths set";
+
+       uint8_t *isal_out_buf = (uint8_t *) malloc(size * 2);
+       uint8_t *zlib_out_buf = (uint8_t *) malloc(size * 2);
+
+       assert(NULL != isal_out_buf && NULL != zlib_out_buf);
+
+       /* Inflate data with isal_inflate */
+       memset(&state, 0xff, sizeof(struct inflate_state));
+
+       isal_inflate_init(&state);
+       state.next_in = (uint8_t *) data;
+       state.avail_in = size;
+       state.next_out = isal_out_buf;
+       state.avail_out = out_buf_size;
+
+       iret = isal_inflate_stateless(&state);
+
+       /* Inflate data with zlib */
+       zstate.zalloc = Z_NULL;
+       zstate.zfree = Z_NULL;
+       zstate.opaque = Z_NULL;
+       zstate.avail_in = size;
+       zstate.next_in = (Bytef *) data;
+       zstate.avail_out = out_buf_size;
+       zstate.next_out = zlib_out_buf;
+       inflateInit2(&zstate, -15);
+
+       zret = inflate(&zstate, Z_FINISH);
+
+       if (zret == Z_STREAM_END) {
+               /* If zlib finished, assert isal finished with the same answer */
+               assert(state.block_state == ISAL_BLOCK_FINISH);
+               assert(zstate.total_out == state.total_out);
+               assert(memcmp(isal_out_buf, zlib_out_buf, state.total_out) == 0);
+       } else if (zret < 0) {
+               if (zret != Z_BUF_ERROR)
+                       /* If zlib errors, assert isal errors, excluding a few
+                        * cases where zlib is overzealous and when zlib notices
+                        * an error faster than isal */
+                       assert(iret < 0 || strcmp(zstate.msg, z_msg_invalid_code_set) == 0
+                              || strcmp(zstate.msg, z_msg_invalid_dist_set) == 0
+                              || strcmp(zstate.msg, z_msg_invalid_lit_len_set) == 0
+                              || (iret == ISAL_END_INPUT && zstate.avail_in < 3));
+
+       } else
+               /* If zlib did not finish or error, assert isal did not finish
+                *  or that isal found an invalid header since isal notices the
+                *  error faster than zlib */
+               assert(iret > 0 || iret == ISAL_INVALID_BLOCK);
+
+       inflateEnd(&zstate);
+       free(isal_out_buf);
+       free(zlib_out_buf);
+       return 0;
+}
diff --git a/ceph/src/isa-l/tests/fuzz/igzip_dump_inflate_corpus.c b/ceph/src/isa-l/tests/fuzz/igzip_dump_inflate_corpus.c
new file mode 100644 (file)
index 0000000..36771b3
--- /dev/null
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "inflate_std_vects.h"
+
+#define DNAME_MAX 256
+#define FNAME_MAX (DNAME_MAX + 81)
+
+int main(int argc, char *argv[])
+{
+       uint8_t *buf;
+       int i, len, err;
+       FILE *fout = NULL;
+       char fname[FNAME_MAX];
+       char dname[DNAME_MAX];
+
+       if (argc != 2) {
+               fprintf(stderr, "Usage: %s <outdir>\n", argv[0]);
+               exit(1);
+       }
+       strncpy(dname, argv[1], DNAME_MAX - 1);
+
+       for (i = 0; i < sizeof(std_vect_array) / sizeof(struct vect_result); i++) {
+               buf = std_vect_array[i].vector;
+               len = std_vect_array[i].vector_length;
+               err = std_vect_array[i].expected_error;
+
+               snprintf(fname, FNAME_MAX, "%s/inflate_corp_n%04d_e%04d", dname, i, err);
+               printf(" writing %s\n", fname);
+               fout = fopen(fname, "w+");
+               if (!fout) {
+                       fprintf(stderr, "Can't open %s for writing\n", fname);
+                       exit(1);
+               }
+               fwrite(buf, len, 1, fout);
+               fclose(fout);
+       }
+
+       return 0;
+}
diff --git a/ceph/src/isa-l/tests/fuzz/igzip_fuzz_inflate.c b/ceph/src/isa-l/tests/fuzz/igzip_fuzz_inflate.c
new file mode 100644 (file)
index 0000000..b28739d
--- /dev/null
@@ -0,0 +1,41 @@
+#define _FILE_OFFSET_BITS 64
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <zlib.h>
+#include "huff_codes.h"
+#include "igzip_lib.h"
+#include "test.h"
+
+extern int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size);
+
+int main(int argc, char *argv[])
+{
+       FILE *in = NULL;
+       unsigned char *in_buf = NULL;
+       uint64_t in_file_size;
+
+       if (argc != 2) {
+               fprintf(stderr, "Usage: isal_fuzz_inflate <infile>\n");
+               exit(1);
+       }
+       in = fopen(argv[1], "rb");
+       if (!in) {
+               fprintf(stderr, "Can't open %s for reading\n", argv[1]);
+               exit(1);
+       }
+       in_file_size = get_filesize(in);
+       in_buf = malloc(in_file_size);
+
+       if (in_buf == NULL) {
+               fprintf(stderr, "Failed to malloc input and outputs buffers\n");
+               exit(1);
+       }
+
+       if (fread(in_buf, 1, in_file_size, in) != in_file_size) {
+               fprintf(stderr, "Failed to read from %s\n", argv[1]);
+               exit(1);
+       }
+
+       return LLVMFuzzerTestOneInput(in_buf, in_file_size);
+}
diff --git a/ceph/src/isa-l/tests/fuzz/igzip_simple_inflate_fuzz_test.c b/ceph/src/isa-l/tests/fuzz/igzip_simple_inflate_fuzz_test.c
new file mode 100644 (file)
index 0000000..b5f22e8
--- /dev/null
@@ -0,0 +1,22 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include "igzip_lib.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size)
+{
+       struct inflate_state state;
+       uint8_t *isal_out_buf = (uint8_t *) (malloc(size * 2));
+       size_t out_buf_size = 2 * size;
+
+       isal_inflate_init(&state);
+       state.next_in = (uint8_t *) data;
+       state.avail_in = size;
+       state.next_out = isal_out_buf;
+       state.avail_out = out_buf_size;
+
+       isal_inflate_stateless(&state);
+
+       free(isal_out_buf);
+       return 0;
+}
diff --git a/ceph/src/isa-l/tests/fuzz/igzip_simple_round_trip_fuzz_test.c b/ceph/src/isa-l/tests/fuzz/igzip_simple_round_trip_fuzz_test.c
new file mode 100644 (file)
index 0000000..3819691
--- /dev/null
@@ -0,0 +1,130 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <string.h>
+#include <assert.h>
+#include <byteswap.h>
+#include "igzip_lib.h"
+#include "unaligned.h"
+
+#define LEVEL_BITS   2
+#define HEADER_BITS  3
+#define LVL_BUF_BITS 3
+
+#define LEVEL_BIT_MASK  ((1<<LEVEL_BITS) - 1)
+#define HEADER_BIT_MASK ((1<<HEADER_BITS) - 1)
+#define TYPE0_HDR_SIZE 5
+#define TYPE0_MAX_SIZE 65535
+
+#define MIN(x,y) (((x) > (y)) ? y : x )
+
+const int header_size[] = {
+       0,                      //IGZIP_DEFLATE
+       10,                     //IGZIP_GZIP
+       0,                      //IGZIP_GZIP_NO_HDR
+       2,                      //IGZIP_ZLIB
+       0,                      //IGZIP_ZLIB_NO_HDR
+};
+
+const int trailer_size[] = {
+       0,                      //IGZIP_DEFLATE
+       8,                      //IGZIP_GZIP
+       8,                      //IGZIP_GZIP_NO_HDR
+       4,                      //IGZIP_ZLIB
+       4,                      //IGZIP_ZLIB_NO_HDR
+};
+
+int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size)
+{
+       struct inflate_state istate;
+       struct isal_zstream cstate;
+       uint8_t *in_data = (uint8_t *) data;
+       int ret = 1;
+
+       // Parameter default
+       int level = 1;
+       int lev_buf_size = ISAL_DEF_LVL1_DEFAULT;
+       int wrapper_type = 0;
+       size_t cmp_buf_size = size + ISAL_DEF_MAX_HDR_SIZE;
+
+       // Parameters are set by one byte of data input
+       if (size > 1) {
+               uint8_t in_param = in_data[--size];
+               level = MIN(in_param & LEVEL_BIT_MASK, ISAL_DEF_MAX_LEVEL);
+               in_param >>= LEVEL_BITS;
+
+               wrapper_type = (in_param & HEADER_BIT_MASK) % (IGZIP_ZLIB_NO_HDR + 1);
+               in_param >>= HEADER_BITS;
+
+               switch (level) {
+               case 0:
+                       lev_buf_size = ISAL_DEF_LVL0_MIN + (in_param) *
+                           (ISAL_DEF_LVL0_EXTRA_LARGE / LEVEL_BIT_MASK);
+                       break;
+               case 1:
+                       lev_buf_size = ISAL_DEF_LVL1_MIN + (in_param) *
+                           (ISAL_DEF_LVL1_EXTRA_LARGE / LEVEL_BIT_MASK);
+                       break;
+#ifdef ISAL_DEF_LVL2_MIN
+               case 2:
+                       lev_buf_size = ISAL_DEF_LVL2_MIN + (in_param) *
+                           (ISAL_DEF_LVL2_EXTRA_LARGE / LEVEL_BIT_MASK);
+                       break;
+#endif
+#ifdef ISAL_DEF_LVL3_MIN
+               case 3:
+                       lev_buf_size = ISAL_DEF_LVL3_MIN + (in_param) *
+                           (ISAL_DEF_LVL3_EXTRA_LARGE / LEVEL_BIT_MASK);
+                       break;
+#endif
+               }
+               if (0 == level)
+                       cmp_buf_size = 2 * size + ISAL_DEF_MAX_HDR_SIZE;
+               else
+                       cmp_buf_size = size + 8 + (TYPE0_HDR_SIZE * (size / TYPE0_MAX_SIZE));
+
+               cmp_buf_size += header_size[wrapper_type] + trailer_size[wrapper_type];
+       }
+
+       uint8_t *isal_cmp_buf = (uint8_t *) malloc(cmp_buf_size);
+       uint8_t *isal_out_buf = (uint8_t *) malloc(size);
+       uint8_t *isal_lev_buf = (uint8_t *) malloc(lev_buf_size);
+       assert(NULL != isal_cmp_buf || NULL != isal_out_buf || NULL != isal_lev_buf);
+
+       isal_deflate_init(&cstate);
+       cstate.end_of_stream = 1;
+       cstate.flush = NO_FLUSH;
+       cstate.next_in = in_data;
+       cstate.avail_in = size;
+       cstate.next_out = isal_cmp_buf;
+       cstate.avail_out = cmp_buf_size;
+       cstate.level = level;
+       cstate.level_buf = isal_lev_buf;
+       cstate.level_buf_size = lev_buf_size;
+       cstate.gzip_flag = wrapper_type;
+       ret = isal_deflate_stateless(&cstate);
+
+       isal_inflate_init(&istate);
+       istate.next_in = isal_cmp_buf;
+       istate.avail_in = cstate.total_out;
+       istate.next_out = isal_out_buf;
+       istate.avail_out = size;
+       istate.crc_flag = wrapper_type;
+       ret |= isal_inflate_stateless(&istate);
+       ret |= memcmp(isal_out_buf, in_data, size);
+
+       // Check trailer
+       uint32_t crc = 0;
+       int trailer_idx = cstate.total_out - trailer_size[wrapper_type];
+
+       if (wrapper_type == IGZIP_GZIP || wrapper_type == IGZIP_GZIP_NO_HDR)
+               crc = load_u32(&isal_cmp_buf[trailer_idx]);
+       else if (wrapper_type == IGZIP_ZLIB || wrapper_type == IGZIP_ZLIB_NO_HDR)
+               crc = bswap_32(load_u32(&isal_cmp_buf[trailer_idx]));
+
+       assert(istate.crc == crc);
+       free(isal_cmp_buf);
+       free(isal_out_buf);
+       free(isal_lev_buf);
+       return ret;
+}
diff --git a/ceph/src/isa-l/tools/check_format.sh b/ceph/src/isa-l/tools/check_format.sh
new file mode 100755 (executable)
index 0000000..dfc92b1
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+
+set -e
+rc=0
+verbose=0
+indent_args='-linux -l95 -cp1 -lps -il6 -ncs'
+function iver { printf "%03d%03d%03d%03d" $(echo "$@" | sed 's/GNU indent//' | tr '.' ' '); }
+
+while [ -n "$*" ]; do
+    case "$1" in
+       -v )
+           verbose=1
+           shift
+           ;;
+       -h )
+           echo check_format.sh [-h -v]
+           exit 0
+           ;;
+    esac
+done
+
+echo "Checking format of files in the git index at $PWD"
+if ! git rev-parse --is-inside-work-tree >& /dev/null; then
+    echo "Not in a git repo: Fail"
+    exit 1
+fi
+
+if hash indent && [ $(iver $(indent --version)) -ge $(iver 2.2.12) ]; then
+    echo "Checking C files for coding style..."
+    for f in `git ls-files '*.c'`; do
+       [ "$verbose" -gt 0 ] && echo "checking style on $f"
+       if ! indent $indent_args -st $f | diff -q $f - >& /dev/null; then
+           echo "  File found with formatting issues: $f"
+           [ "$verbose" -gt 0 ] 2> /dev/null && indent $indent_args -st $f | diff -u $f -
+           rc=1
+       fi
+    done
+    [ "$rc" -gt 0 ] && echo "  Run ./tools/iindent on files"
+else
+       echo "You do not have a recent indent installed so your code style is not being checked!"
+fi
+
+if hash grep; then
+    echo "Checking for dos and whitespace violations..."
+    for f in $(git ls-files); do
+       [ "$verbose" -gt 0 ] && echo "checking whitespace on $f"
+       if grep -q '[[:space:]]$' $f ; then
+           echo "  File found with trailing whitespace: $f"
+           rc=1
+       fi
+       if grep -q $'\r' $f ; then
+           echo "  File found with dos formatting: $f"
+           rc=1
+       fi
+    done
+fi
+
+echo "Checking source files for permissions..."
+while read -r perm _res0 _res1 f; do
+    [ -z "$f" ] && continue
+    [ "$verbose" -gt 0 ] && echo "checking permissions on $f"
+    if [ "$perm" -ne 100644 ]; then
+       echo "  File found with permissions issue ($perm): $f"
+       rc=1
+    fi
+done <<< $(git ls-files -s -- ':(exclude)*.sh' ':(exclude)*iindent')
+
+echo "Checking script files for permissions..."
+while read -r perm _res0 _res1 f; do
+    [ -z "$f" ] && continue
+    [ "$verbose" -gt 0 ] && echo "checking permissions on $f"
+    if [ "$perm" -ne 100755 ]; then
+       echo "  Script found with permissions issue ($perm): $f"
+       rc=1
+    fi
+done <<< $(git ls-files -s '*.sh')
+
+
+echo "Checking for signoff in commit message..."
+if ! git log -n 1 --format=%B --no-merges | grep -q "^Signed-off-by:" ; then
+    echo "  Commit not signed off. Please read src/CONTRIBUTING.md"
+    rc=1
+fi
+
+[ "$rc" -gt 0 ] && echo Format Fail || echo Format Pass
+
+exit $rc
index b447b2fb5d651cb5fe8f37716a926a1e9b4dbc7b..48d26360f2fa79c09145bcb29d2a6856037dca1b 100755 (executable)
@@ -1,2 +1,2 @@
 #!/bin/sh
-indent -npro -kr -i8 -ts8 -sob -l95 -ss -ncs -cp1 -lps "$@"
+indent -linux -l95 -cp1 -lps -il6 -ncs "$@"
diff --git a/ceph/src/isa-l/tools/remove_trailing_whitespace.sh b/ceph/src/isa-l/tools/remove_trailing_whitespace.sh
new file mode 100755 (executable)
index 0000000..bb82b9f
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+sed -i -i.bak 's/[[:blank:]]*$//' "$@"
diff --git a/ceph/src/isa-l/tools/test_autorun.sh b/ceph/src/isa-l/tools/test_autorun.sh
new file mode 100755 (executable)
index 0000000..58d1a0a
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+
+set -e #exit on fail
+
+# Override defaults if exist
+READLINK=readlink
+command -V greadlink >/dev/null 2>&1 && READLINK=greadlink
+
+# Run in build directory
+out="$PWD"
+src=$($READLINK -f $(dirname $0))/..
+cd "$src"
+
+# Echo environment info
+if test -d .git; then
+    branch=$(git describe --always)
+    commitid=$(git rev-parse HEAD)
+    brief=$(git log -1 --format='%s')
+    branch_changes=$(git diff --shortstat)
+fi
+if command -V uname >/dev/null 2>&1; then
+    node=$(uname -n)
+    os_name=$(uname -s)
+    os_all=$(uname -a)
+fi
+
+echo "Test report v1"
+echo "branch:              $branch"
+echo "brief:               $brief"
+echo "commitid:            $commitid"
+echo "node:                $node"
+echo "os_name:             $os_name"
+echo "os_all:              $os_all"
+echo "test_args:           $@"
+echo "changes:             $branch_changes"
+command -V lscpu > /dev/null 2>&1 && lscpu
+
+# Start tests
+
+[ -z "$1" ] && ./tools/test_checks.sh
+
+while [ -n "$1" ]; do
+    case "$1" in
+       check )
+           ./tools/test_checks.sh
+           shift ;;
+       ext )
+           ./tools/test_extended.sh
+           shift ;;
+       format )
+           shift ;;
+       all )
+           ./tools/test_checks.sh
+           ./tools/test_extended.sh
+           shift ;;
+       * )
+           echo $0 undefined option: $1
+           shift ;;
+    esac
+done
+
+./tools/check_format.sh
+
diff --git a/ceph/src/isa-l/tools/test_checks.sh b/ceph/src/isa-l/tools/test_checks.sh
new file mode 100755 (executable)
index 0000000..a5a0f45
--- /dev/null
@@ -0,0 +1,115 @@
+#!/usr/bin/env bash
+
+set -xe #exit on fail
+
+# Defaults
+cpus=1
+S=$RANDOM
+MAKE=make
+READLINK=readlink
+
+# Override defaults if exist
+command -V gmake >/dev/null 2>&1 && MAKE=gmake
+command -V greadlink >/dev/null 2>&1 && READLINK=greadlink
+
+out="$PWD"
+src=$($READLINK -f $(dirname $0))/..
+source $src/tools/test_tools.sh
+cd "$src"
+tmp_install_dir=$out/tmp_install
+
+# Run on mult cpus
+if command -V lscpu >/dev/null 2>&1; then
+    cpus=`lscpu -p | tail -1 | cut -d, -f 2`
+    cpus=$(($cpus + 1))
+elif command -V sysctl; then
+    if sysctl -n hw.ncpu >/dev/null 2>&1; then
+       cpus=$(sysctl -n hw.ncpu)
+       cpus=$(($cpus + 1))
+    fi
+fi
+echo "Using $cpus cpu threads"
+
+# Pick a random test seed
+if [ -z "$S" ]; then
+    S=`tr -cd 0-9 </dev/urandom | head -c 4 | sed -e 's/^0*/1/g'`
+    [ "$S" -gt 0 ] 2> /dev/null || S="123"
+fi
+echo "Running with TEST_SEED=$S"
+
+# Fix Darwin issues
+if uname | grep -q 'Darwin' 2>&1; then
+    export SED=`which sed`
+fi
+
+# Build and run check tests
+if [ -z "$CFLAGS" ]; then
+    CFLAGS='-g -O2 -fsanitize=undefined -fno-sanitize=nonnull-attribute -fsanitize-undefined-trap-on-error'
+
+    if [ $CC ]; then
+       echo int main\(\)\{\}\; | $CC $CFLAGS -xc -o /dev/null - >& /dev/null && sanitize=1
+    elif ( command -V gcc > /dev/null ); then
+       echo int main\(\)\{\}\; |  gcc $CFLAGS -xc -o /dev/null - >& /dev/null && sanitize=1
+    elif ( command -V clang > /dev/null ); then
+       echo int main\(\)\{\}\; |  clang $CFLAGS -xc -o /dev/null - >& /dev/null && sanitize=1
+    fi
+
+    if [ $sanitize ]; then
+       echo "Sanitizing undefined behaviour"
+       export CFLAGS=$CFLAGS
+    fi
+fi
+
+time ./autogen.sh
+time ./configure --prefix=$tmp_install_dir $opt_config_target
+time $MAKE -j $cpus
+test_start "check_tests"
+time $MAKE check -j $cpus D="-D TEST_SEED=$S"
+test_end "check_tests" $?
+
+# Build other tests if deps found
+if command -V ldconfig >/dev/null 2>&1; then
+    if ldconfig -p | grep -q libz.so; then
+       test_start "other_check_tests"
+       time $MAKE other -j $cpus
+       test_end "other_check_tests" $?
+       test_start "example_tests"
+       time $MAKE ex    -j $cpus
+       test_end "example_tests" $?
+       test_start "unit_tests"
+       time $MAKE tests -j $cpus
+       test_end "unit_tests" $?
+    fi
+fi
+test_start "installation_test"
+time $MAKE install
+test_end "installation_test" $?
+
+# Check for gnu executable stack set
+if command -V readelf >/dev/null 2>&1; then
+    if readelf -W -l $tmp_install_dir/lib/libisal.so | grep 'GNU_STACK' | grep -q 'RWE'; then
+       echo Stack NX check $tmp_install_dir/lib/libisal.so Fail
+       exit 1
+    else
+       echo Stack NX check $tmp_install_dir/lib/libisal.so Pass
+    fi
+else
+    echo Stack NX check not supported
+fi
+
+$MAKE clean
+
+# Check that make clean did not leave any junk behind
+if git status > /dev/null 2>&1; then
+    if git status --porcelain --ignored | grep -x '.*\.o\|.*\.lo\|.*\.a\|.*\.la\|.*\.s'; then
+       echo Clean directory check Fail
+       exit 1
+    else
+       echo Clean directory check Pass
+    fi
+else
+    echo Clean directory check not supported
+fi
+
+
+echo $0: Pass
diff --git a/ceph/src/isa-l/tools/test_extended.sh b/ceph/src/isa-l/tools/test_extended.sh
new file mode 100755 (executable)
index 0000000..8f46a1f
--- /dev/null
@@ -0,0 +1,208 @@
+#!/usr/bin/env bash
+
+# Extended tests: Run a few more options other than make check
+
+set -xe #exit on fail
+
+# Defaults
+cpus=1
+S=$RANDOM
+MAKE=make
+READLINK=readlink
+test_level=check
+build_opt=''
+msg=''
+
+# Override defaults if exist
+command -V gmake >/dev/null 2>&1 && MAKE=gmake
+command -V greadlink >/dev/null 2>&1 && READLINK=greadlink
+[ -n "$CC" ] && build_opt+="CC=$CC "
+[ -n "$AS" ] && build_opt+="AS=$AS "
+
+out="$PWD"
+src=$($READLINK -f $(dirname $0))/..
+source $src/tools/test_tools.sh
+cd "$src"
+
+# Run on mult cpus
+if command -V lscpu >/dev/null 2>&1; then
+    cpus=`lscpu -p | tail -1 | cut -d, -f 2`
+    cpus=$(($cpus + 1))
+elif command -V sysctl; then
+    if sysctl -n hw.ncpu >/dev/null 2>&1; then
+       cpus=$(sysctl -n hw.ncpu)
+       cpus=$(($cpus + 1))
+    fi
+fi
+echo "Using $cpus cpu threads"
+
+if [ -z "$S" ]; then
+    S=`tr -cd 0-9 </dev/urandom | head -c 4 | sed -e 's/^0*/1/g'`
+    [ "$S" -gt 0 ] 2> /dev/null || S="123"
+fi
+msg+="Running with TEST_SEED=$S".$'\n'
+
+# Fix Darwin issues
+if uname | grep -q 'Darwin' 2>&1; then
+    export SED=`which sed`
+fi
+
+# Check for test libs to add
+if command -V ldconfig >/dev/null 2>&1; then
+    if ldconfig -p | grep -q libz.so; then
+       test_level=test
+       msg+=$'With extra tests\n'
+    fi
+    if ldconfig -p | grep -q libefence.so; then
+       build_opt+="LDFLAGS+='-lefence' "
+       msg+=$'With efence\n'
+    fi
+fi
+
+# Std makefile build test
+$MAKE -f Makefile.unx clean
+test_start "extended_build_test"
+time $MAKE -f Makefile.unx -j $cpus $build_opt
+test_end "extended_build_test" $?
+msg+=$'Std makefile build: Pass\n'
+
+# Check for gnu executable stack set
+if command -V readelf >/dev/null 2>&1; then
+    test_start "stack_nx_check"
+    if readelf -W -l bin/libisal.so | grep 'GNU_STACK' | grep -q 'RWE'; then
+       echo $0: Stack NX check bin/libisal.so: Fail
+       test_end "stack_nx_check" 1
+       exit 1
+    else
+       test_end "stack_nx_check" 0
+       msg+=$'Stack NX check bin/lib/libisal.so: Pass\n'
+    fi
+else
+    msg+=$'Stack NX check not supported: Skip\n'
+fi
+
+# Std makefile build perf tests
+test_start "extended_perf_test"
+time $MAKE -f Makefile.unx -j $cpus perfs
+test_end "extended_perf_test" $?
+msg+=$'Std makefile build perf: Pass\n'
+
+# Std makefile run tests
+test_start "extended_makefile_tests"
+time $MAKE -f Makefile.unx -j $cpus $build_opt D="TEST_SEED=$S" $test_level
+test_end "extended_makefile_tests" $?
+msg+=$'Std makefile tests: Pass\n'
+
+# Std makefile build other
+test_start "extended_other_tests"
+time $MAKE -f Makefile.unx -j $cpus $build_opt D="TEST_SEED=$S" other
+test_end "extended_other_tests" $?
+msg+=$'Other tests build: Pass\n'
+
+# Try to pick a random src file
+if command -V shuf >/dev/null 2>&1; then
+    in_file=$(find $src -type f -size +0 -name \*.c -o -name \*.asm -print 2>/dev/null | shuf | head -1 );
+else
+    in_file=configure.ac
+fi
+
+echo Other tests using $in_file
+test_start "igzip_file_perf"
+./igzip_file_perf $in_file
+test_end "igzip_file_perf" $?
+test_start "igzip_hist_perf"
+./igzip_hist_perf $in_file
+test_end "igzip_hist_perf" $?
+test_start "igzip_semi_dyn_file_perf"
+./igzip_semi_dyn_file_perf $in_file
+test_end "igzip_semi_dyn_file_perf" $?
+test_start "igzip_fuzz_inflate"
+./igzip_fuzz_inflate $in_file
+test_end "igzip_fuzz_inflate" $?
+msg+=$'Other tests run: Pass\n'
+
+if command -V shuf >/dev/null 2>&1; then
+    in_files=$(find $src -type f -size +0 -print 2>/dev/null | shuf | head -10 );
+    test_start "igzip_rand_test"
+    ./igzip_rand_test $in_files
+    test_end "igzip_rand_test" $?
+    test_start "igzip_inflate_test"
+    ./igzip_inflate_test $in_files
+    test_end "igzip_inflate_test" $?
+    msg+=$'Compression file tests: Pass\n'
+else
+    msg+=$'Compression file test: Skip\n'
+fi
+
+time $MAKE -f Makefile.unx -j $cpus $build_opt ex
+msg+=$'Examples build: Pass\n'
+
+test_start "ec_simple_example"
+./ec_simple_example -r $S
+test_end "ec_simple_example" $?
+test_start "crc_simple_test"
+./crc_simple_test
+test_end "crc_simple_test" $?
+test_start "crc64_example"
+./crc64_example
+test_end "crc64_example" $?
+test_start "xor_example"
+./xor_example
+test_end "xor_example" $?
+test_start "igzip_example"
+./igzip_example ${in_file} ${in_file}.cmp
+test_end "igzip_example" $?
+rm -rf ${in_file}.cmp
+msg+=$'Examples run: Pass\n'
+
+# Test custom hufftables
+test_start "generate_custom_hufftables"
+./generate_custom_hufftables $in_file
+$MAKE -f Makefile.unx -j $cpus D="NO_STATIC_INFLATE_H" checks
+./igzip_rand_test $in_file
+./generate_static_inflate
+diff -q static_inflate.h igzip/static_inflate.h
+rm -rf static_inflate.h
+rm -rf hufftables_c.c
+test_end "generate_custom_hufftables" $?
+
+msg+=$'Custom hufftable build: Pass\n'
+
+$MAKE -f Makefile.unx clean
+
+# noarch build
+test_start "noarch_build"
+time $MAKE -f Makefile.unx -j $cpus arch=noarch $build_opt
+test_end "noarch_build" $?
+test_start "noarch_build_random"
+time $MAKE -f Makefile.unx -j $cpus arch=noarch $build_opt D="TEST_SEED=$S" check
+test_end "noarch_build_random" $?
+$MAKE -f Makefile.unx arch=noarch clean
+msg+=$'Noarch build: Pass\n'
+
+# Try mingw build
+if [ $(uname -m) == "x86_64" ] && command -V x86_64-w64-mingw32-gcc >/dev/null 2>&1; then
+    test_start "mingw_build"
+    time $MAKE -f Makefile.unx -j $cpus arch=mingw
+    test_end "mingw_build" $?
+    msg+=$'Mingw build: Pass\n'
+
+    if command -V wine >/dev/null 2>&1; then
+       test_start "mingw_check_tests"
+       time $MAKE -f Makefile.unx -j $cpus arch=mingw D="TEST_SEED=$S" check
+       test_end "mingw_check_tests" $?
+       msg+=$'Mingw check tests: Pass\n'
+    else
+       msg+=$'No wine, mingw check: Skip\n'
+    fi
+    $MAKE -f Makefile.unx  arch=mingw clean
+else
+    msg+=$'No mingw build: Skip\n'
+fi
+
+set +x
+echo
+echo "Summary test $0:"
+echo "Build opt: $build_opt"
+echo "$msg"
+echo "$0: Final: Pass"
diff --git a/ceph/src/isa-l/tools/test_fuzz.sh b/ceph/src/isa-l/tools/test_fuzz.sh
new file mode 100755 (executable)
index 0000000..bc9797e
--- /dev/null
@@ -0,0 +1,171 @@
+#!/usr/bin/env bash
+
+usage ()
+{
+test_ids=$(echo "${llvm_all_ids[*]}" | sed 's/ /, /g')
+cat << EOF
+usage: $0 options
+options:
+   -h                 Help
+   -l, --llvm <n>     Use llvm fuzz tests and run n times 0=just build, -1=skip (default $use_llvm).
+   -a, --afl  <n>     Use AFL fuzz tests and run n times 0=just build, -1=skip (default $use_afl).
+   -t, --time <n>     Run each group of max time <n>[s,h,m,d] - n seconds, hours, minutes or days.
+   -e <exec|rand|all> Run a specific llvm test or [$test_ids, rand, all].
+   -f <file>          Use this file as initial raw input.  Can be repeated.
+   -d <0,1>           Use dump of internal inflate test corpus (default $use_internal_corp).
+   -i <dir>           Fuzz input dir (default $fuzzin_dir).
+   -o <dir>           Fuzz output dir (default $fuzzout_dir).
+EOF
+exit 0
+}
+
+# Defaults
+use_afl=-1
+use_llvm=1
+samp_files=
+use_internal_corp=0
+fuzzin_dir=fuzzin
+fuzzout_dir=fuzzout
+llvm_opts=" -print_final_stats=1"
+afl_timeout_cmd=""
+run_secs=0
+llvm_tests=("igzip_simple_inflate_fuzz_test")
+llvm_all_ids=("simple" "checked" "round_trip")
+llvm_all_tests=("igzip_simple_inflate_fuzz_test" "igzip_checked_inflate_fuzz_test" "igzip_simple_round_trip_fuzz_test")
+
+# Options
+while [ "$1" != "${1##-}" ]; do
+    case $1 in
+       -h | --help)
+           usage
+           ;;
+       -t | --time)
+           run_secs=$(echo $2 | sed -e 's/d$/*24h/' -e 's/h$/*60m/' -e 's/m$/*60/' -e 's/s$//'| bc)
+           llvm_opts+=" -max_total_time=$run_secs"
+           afl_timeout_cmd="timeout --preserve-status $run_secs"
+           echo Run each for $run_secs seconds
+           shift 2
+           ;;
+       -a | --afl)
+           use_afl=$2
+           shift 2
+           ;;
+       -l | --llvm)
+           use_llvm=$2
+           shift 2
+           ;;
+       -f)
+           samp_files+="$2 "
+           use_internal_corp=0
+           shift 2
+           ;;
+       -d)
+           use_internal_corp=$2
+           shift 2
+           ;;
+       -e)
+           case $2 in
+               all)
+                   llvm_tests=${llvm_all_tests[@]}
+                   ;;
+               rand)
+                   llvm_tests=${llvm_all_tests[$RANDOM % ${#llvm_all_tests[@]} ]}
+                   ;;
+               *)
+                   flag=0
+                   for id_index in "${!llvm_all_ids[@]}"; do
+                        if [[ "${llvm_all_ids[$id_index]}" = "$2" ]]; then
+                            flag=1
+                            llvm_tests[0]="${llvm_all_tests[$id_index]}"
+                            break;
+                        fi
+                   done
+
+                   if [ $flag -eq 0 ]; then
+                       test_ids=$(echo "${llvm_all_ids[*]}" | sed 's/ /, /g')
+                       echo "Invalid test, valid options: $test_ids, rand, or all"
+                       exit 0
+                   fi
+                   ;;
+           esac
+           shift 2
+           ;;
+       -i)
+           fuzzin_dir=$2
+           shift 2
+           ;;
+       -o)
+           fuzzout_dir=$2
+           shift 2
+           ;;
+    esac
+done
+
+set -xe #exit on fail
+
+# Optionally build afl fuzz tests
+if [ $use_afl -ge 0 ]; then
+    echo Build afl fuzz tests
+    if ! command -V afl-gcc > /dev/null; then
+       echo $0 option --afl requires package afl installed
+       exit 0
+    fi
+    make -f Makefile.unx clean
+    make -f Makefile.unx units=igzip CC=afl-gcc other
+fi
+
+# Optionally build llvm fuzz tests
+if [ $use_llvm -ge 0 ]; then
+    echo Build llvm fuzz tests
+    if ( command -V clang++ > /dev/null ); then
+       if (echo int LLVMFuzzerTestOneInput\(\)\{return 0\;\} | clang++ -x c - -fsanitize=fuzzer,address -lpthread -o /dev/null >& /dev/null); then
+           echo have modern clang
+           llvm_link_args='FUZZLINK=-fsanitize=fuzzer,address'
+       elif (echo int LLVMFuzzerTestOneInput\(\)\{return 0\;\} | clang++ -x c - -lFuzzer -lpthread -o /dev/null >& /dev/null); then
+           echo have libFuzzer
+           llvm_link_args='FUZZLINK=-lFuzzer'
+       else
+           echo $0 option --llvm requires clang++ and libFuzzer
+           exit 0
+       fi
+    fi
+    rm -rf bin
+    make -f Makefile.unx units=igzip llvm_fuzz_tests igzip_dump_inflate_corpus CC=clang CXX=clang++ ${llvm_link_args}
+fi
+
+#Create fuzz input/output directories
+mkdir -p $fuzzin_dir
+if [ $use_afl -ge 0 ]; then
+       mkdir -p $fuzzout_dir
+fi
+
+# Optionally fill fuzz input with internal tests corpus
+[ $use_internal_corp -gt 0 ] && ./igzip_dump_inflate_corpus $fuzzin_dir
+
+# Optionally compress input samples as input into fuzz dir
+for f in $samp_files; do
+    echo Using sample file $f
+    f_base=`basename $f`
+    ./igzip_file_perf $f -o $fuzzin_dir/samp_${f_base}_cmp
+done
+
+# Optionally run tests alternately one after the other
+while [ $use_llvm -gt 0 -o $use_afl -gt 0 ]; do
+    if [ $use_afl -gt 0 ]; then
+       echo afl run $use_afl
+       let use_afl--
+       $afl_timeout_cmd afl-fuzz -T "Run inflate $run_secs s" -i $fuzzin_dir -o $fuzzout_dir -M fuzzer1 -- ./igzip_fuzz_inflate @@
+       afl-whatsup $fuzzout_dir
+    fi
+
+    if [ $use_llvm -gt 0 ]; then
+       echo llvm run $use_llvm
+       let use_llvm--
+       for test in $llvm_tests; do
+           echo "Run llvm test $test"
+           ./$test $fuzzin_dir $llvm_opts
+       done
+    fi
+done
+
+make -f Makefile.unx clean
diff --git a/ceph/src/isa-l/tools/test_tools.sh b/ceph/src/isa-l/tools/test_tools.sh
new file mode 100755 (executable)
index 0000000..448b1f9
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+function test_start()
+{
+        echo "entering test: $1"
+}
+
+function test_end()
+{
+        echo "leaving test: $1 status: $2"
+}
index ca726c114aab0cc2c16a4de2d10497da48ef5bf8..2c77f85b072c740cccd15fd9577ffd50002be9df 100644 (file)
@@ -97,7 +97,7 @@ void ObjectRecorder::flush(Context *on_safe) {
     // if currently handling flush notifications, wait so that
     // we notify in the correct order (since lock is dropped on
     // callback)
-    while (m_in_flight_callbacks) {
+    while (m_in_flight_callbacks > 0) {
       m_in_flight_callbacks_cond.wait(locker);
     }
 
@@ -138,7 +138,7 @@ void ObjectRecorder::flush(const ceph::ref_t<FutureImpl>& future) {
   }
 
   if (!m_object_closed && !m_overflowed && send_appends(true, future)) {
-    m_in_flight_callbacks = true;
+    ++m_in_flight_callbacks;
     notify_handler_unlock(locker, true);
   }
 }
@@ -169,7 +169,7 @@ bool ObjectRecorder::close() {
   ceph_assert(!m_object_closed);
   m_object_closed = true;
 
-  if (!m_in_flight_tids.empty() || m_in_flight_callbacks) {
+  if (!m_in_flight_tids.empty() || m_in_flight_callbacks > 0) {
     m_object_closed_notify = true;
     return false;
   }
@@ -181,7 +181,7 @@ void ObjectRecorder::handle_append_flushed(uint64_t tid, int r) {
   ldout(m_cct, 20) << "tid=" << tid << ", r=" << r << dendl;
 
   std::unique_lock locker{*m_lock};
-  m_in_flight_callbacks = true;
+  ++m_in_flight_callbacks;
 
   auto tid_iter = m_in_flight_tids.find(tid);
   ceph_assert(tid_iter != m_in_flight_tids.end());
@@ -235,7 +235,9 @@ void ObjectRecorder::handle_append_flushed(uint64_t tid, int r) {
 
   ldout(m_cct, 20) << "pending tids=" << m_in_flight_tids << dendl;
 
-  // all remaining unsent appends should be redirected to new object
+  // notify of overflow if one just occurred or indicate that all in-flight
+  // appends have completed on a closed object (or wake up stalled flush
+  // requests that was waiting for this strand to complete).
   notify_handler_unlock(locker, notify_overflowed);
 }
 
@@ -379,14 +381,16 @@ bool ObjectRecorder::send_appends(bool force, ceph::ref_t<FutureImpl> flush_futu
 
 void ObjectRecorder::wake_up_flushes() {
   ceph_assert(ceph_mutex_is_locked(*m_lock));
-  m_in_flight_callbacks = false;
-  m_in_flight_callbacks_cond.notify_all();
+  --m_in_flight_callbacks;
+  if (m_in_flight_callbacks == 0) {
+    m_in_flight_callbacks_cond.notify_all();
+  }
 }
 
 void ObjectRecorder::notify_handler_unlock(
     std::unique_lock<ceph::mutex>& locker, bool notify_overflowed) {
   ceph_assert(ceph_mutex_is_locked(*m_lock));
-  ceph_assert(m_in_flight_callbacks);
+  ceph_assert(m_in_flight_callbacks > 0);
 
   if (!m_object_closed && notify_overflowed) {
     // TODO need to delay completion until after aio_notify completes
index 1b36d246612459f18076461e1025834684695204..7281879fcf722027fae6857cd7e805de482e74ce 100644 (file)
@@ -143,7 +143,7 @@ private:
 
   bufferlist m_prefetch_bl;
 
-  bool m_in_flight_callbacks = false;
+  uint32_t m_in_flight_callbacks = 0;
   ceph::condition_variable m_in_flight_callbacks_cond;
   uint64_t m_in_flight_bytes = 0;
 
index 0019f6f5fec803313881b611e0da3b5d7149ac0e..0d463dea52e92dfa7085044e32afb657d8ed054e 100644 (file)
@@ -66,6 +66,7 @@ DEFINE_UDEV_UPTR(device)  /* udev_device_uptr */
 struct krbd_ctx {
   CephContext *cct;
   struct udev *udev;
+  uint32_t flags;  /* KRBD_CTX_F_* */
 };
 
 struct krbd_spec {
@@ -380,14 +381,47 @@ private:
   std::string *m_pdevnode;
 };
 
-static int do_map(struct udev *udev, const krbd_spec& spec, const string& buf,
+static const char *get_event_source(const krbd_ctx *ctx)
+{
+  if (ctx->flags & KRBD_CTX_F_NOUDEV) {
+    /*
+     * For block devices (unlike network interfaces, they don't
+     * carry any namespace tags), the kernel broadcasts uevents
+     * into all network namespaces that are owned by the initial
+     * user namespace.  This restriction is new in 4.18: starting
+     * with 2.6.35 and through 4.17 the kernel broadcast uevents
+     * into all network namespaces, period.
+     *
+     * However, when invoked from a non-initial user namespace,
+     * udev_monitor_receive_device() has always ignored both kernel
+     * and udev uevents by virtue of requiring SCM_CREDENTIALS and
+     * checking that ucred->uid == 0.  When UIDs and GIDs are sent to
+     * a process in a user namespace, they are translated according
+     * to that process's UID and GID mappings and, unless root in the
+     * user namespace is mapped to the global root, that check fails.
+     * Normally they show up as 65534(nobody) because the global root
+     * is not mapped.
+     */
+    return "kernel";
+  }
+
+  /*
+   * Like most netlink messages, udev uevents don't cross network
+   * namespace boundaries and are therefore confined to the initial
+   * network namespace.
+   */
+  return "udev";
+}
+
+static int do_map(krbd_ctx *ctx, const krbd_spec& spec, const string& buf,
                   string *pname)
 {
   bool mapped;
   int fds[2];
   int r;
 
-  udev_monitor_uptr mon(udev_monitor_new_from_netlink(udev, "udev"));
+  udev_monitor_uptr mon(udev_monitor_new_from_netlink(ctx->udev,
+                                                      get_event_source(ctx)));
   if (!mon)
     return -ENOMEM;
 
@@ -473,7 +507,7 @@ static int map_image(struct krbd_ctx *ctx, const krbd_spec& spec,
   if (r < 0)
     return r;
 
-  return do_map(ctx->udev, spec, buf, pname);
+  return do_map(ctx, spec, buf, pname);
 }
 
 static int devno_to_krbd_id(struct udev *udev, dev_t devno, string *pid)
@@ -681,13 +715,14 @@ private:
   dev_t m_devno;
 };
 
-static int do_unmap(struct udev *udev, dev_t devno, const string& buf)
+static int do_unmap(krbd_ctx *ctx, dev_t devno, const string& buf)
 {
   bool unmapped;
   int fds[2];
   int r;
 
-  udev_monitor_uptr mon(udev_monitor_new_from_netlink(udev, "udev"));
+  udev_monitor_uptr mon(udev_monitor_new_from_netlink(ctx->udev,
+                                                      get_event_source(ctx)));
   if (!mon)
     return -ENOMEM;
 
@@ -710,7 +745,8 @@ static int do_unmap(struct udev *udev, dev_t devno, const string& buf)
   if (pipe2(fds, O_NONBLOCK) < 0)
     return -errno;
 
-  auto unmapper = make_named_thread("unmapper", [&buf, sysfs_r_fd = fds[1]]() {
+  auto unmapper = make_named_thread(
+      "unmapper", [&buf, sysfs_r_fd = fds[1], flags = ctx->flags]() {
     /*
      * On final device close(), kernel sends a block change event, in
      * response to which udev apparently runs blkid on the device.  This
@@ -722,7 +758,7 @@ static int do_unmap(struct udev *udev, dev_t devno, const string& buf)
       if (sysfs_r == -EBUSY && tries < 2) {
         if (!tries) {
           usleep(250 * 1000);
-        } else {
+        } else if (!(flags & KRBD_CTX_F_NOUDEV)) {
           /*
            * libudev does not provide the "wait until the queue is empty"
            * API or the sufficient amount of primitives to build it from.
@@ -805,7 +841,7 @@ static int unmap_image(struct krbd_ctx *ctx, const char *devnode,
   }
 
   append_unmap_options(&buf, options);
-  return do_unmap(ctx->udev, wholedevno, buf);
+  return do_unmap(ctx, wholedevno, buf);
 }
 
 static int unmap_image(struct krbd_ctx *ctx, const krbd_spec& spec,
@@ -837,7 +873,7 @@ static int unmap_image(struct krbd_ctx *ctx, const krbd_spec& spec,
   }
 
   append_unmap_options(&buf, options);
-  return do_unmap(ctx->udev, devno, buf);
+  return do_unmap(ctx, devno, buf);
 }
 
 static bool dump_one_image(Formatter *f, TextTable *tbl,
@@ -955,7 +991,7 @@ static int is_mapped_image(struct udev *udev, const krbd_spec& spec,
   return 0;  /* not mapped */
 }
 
-extern "C" int krbd_create_from_context(rados_config_t cct,
+extern "C" int krbd_create_from_context(rados_config_t cct, uint32_t flags,
                                         struct krbd_ctx **pctx)
 {
   struct krbd_ctx *ctx = new struct krbd_ctx();
@@ -966,6 +1002,7 @@ extern "C" int krbd_create_from_context(rados_config_t cct,
     delete ctx;
     return -ENOMEM;
   }
+  ctx->flags = flags;
 
   *pctx = ctx;
   return 0;
index 4de30e1e7dfe55c5db0174358ae5f7652b697697..3e591d6351376e6de2e3002c63f5d012f00eea7c 100644 (file)
@@ -71,6 +71,7 @@ librados::RadosClient::RadosClient(CephContext *cct_)
     log_last_version(0), log_cb(NULL), log_cb2(NULL), log_cb_arg(NULL),
     finisher(cct, "radosclient", "fn-radosclient")
 {
+  conf.add_observer(this);
 }
 
 int64_t librados::RadosClient::lookup_pool(const char *name)
@@ -260,10 +261,7 @@ int librados::RadosClient::connect()
 
   ldout(cct, 1) << "starting objecter" << dendl;
 
-  objecter = new (std::nothrow) Objecter(cct, messenger, &monclient,
-                         &finisher,
-                         cct->_conf->rados_mon_op_timeout,
-                         cct->_conf->rados_osd_op_timeout);
+  objecter = new (std::nothrow) Objecter(cct, messenger, &monclient, &finisher);
   if (!objecter)
     goto out;
   objecter->set_balanced_budget();
@@ -469,6 +467,7 @@ int librados::RadosClient::get_min_compatible_client(int8_t* min_compat_client,
 
 librados::RadosClient::~RadosClient()
 {
+  conf.remove_observer(this);
   if (messenger)
     delete messenger;
   if (objecter)
@@ -574,11 +573,7 @@ int librados::RadosClient::wait_for_osdmap()
   if (need_map) {
     std::unique_lock l(lock);
 
-    ceph::timespan timeout{0};
-    if (cct->_conf->rados_mon_op_timeout > 0) {
-      timeout = ceph::make_timespan(cct->_conf->rados_mon_op_timeout);
-    }
-
+    ceph::timespan timeout = rados_mon_op_timeout;
     if (objecter->with_osdmap(std::mem_fn(&OSDMap::get_epoch)) == 0) {
       ldout(cct, 10) << __func__ << " waiting" << dendl;
       while (objecter->with_osdmap(std::mem_fn(&OSDMap::get_epoch)) == 0) {
@@ -864,8 +859,8 @@ int librados::RadosClient::mgr_command(const vector<string>& cmd,
     return r;
 
   lock.unlock();
-  if (conf->rados_mon_op_timeout) {
-    r = cond.wait_for(conf->rados_mon_op_timeout);
+  if (rados_mon_op_timeout.count() > 0) {
+    r = cond.wait_for(rados_mon_op_timeout);
   } else {
     r = cond.wait();
   }
@@ -888,8 +883,8 @@ int librados::RadosClient::mgr_command(
     return r;
 
   lock.unlock();
-  if (conf->rados_mon_op_timeout) {
-    r = cond.wait_for(conf->rados_mon_op_timeout);
+  if (rados_mon_op_timeout.count() > 0) {
+    r = cond.wait_for(rados_mon_op_timeout);
   } else {
     r = cond.wait();
   }
@@ -1175,3 +1170,20 @@ int librados::RadosClient::get_inconsistent_pgs(int64_t pool_id,
   }
   return 0;
 }
+
+const char** librados::RadosClient::get_tracked_conf_keys() const
+{
+  static const char *config_keys[] = {
+    "rados_mon_op_timeout",
+    nullptr
+  };
+  return config_keys;
+}
+
+void librados::RadosClient::handle_conf_change(const ConfigProxy& conf,
+                                              const std::set<std::string> &changed)
+{
+  if (changed.count("rados_mon_op_timeout")) {
+    rados_mon_op_timeout = conf.get_val<std::chrono::seconds>("rados_mon_op_timeout");
+  }
+}
index a3b8d20dfb48bc160cdfd281df3d6c994cd69590..4425018c3c4265f2a84a11bd1a0d7a15414d34c0 100644 (file)
@@ -19,6 +19,7 @@
 #include "common/Timer.h"
 #include "common/ceph_mutex.h"
 #include "common/ceph_time.h"
+#include "common/config_obs.h"
 #include "include/common_fwd.h"
 #include "include/rados/librados.h"
 #include "include/rados/librados.hpp"
@@ -36,14 +37,14 @@ class MLog;
 class Messenger;
 class AioCompletionImpl;
 
-class librados::RadosClient : public Dispatcher
+class librados::RadosClient : public Dispatcher, public md_config_obs_t
 {
   std::unique_ptr<CephContext,
                  std::function<void(CephContext*)> > cct_deleter;
 
 public:
   using Dispatcher::cct;
-  const ConfigProxy& conf;
+  ConfigProxy& conf{cct->_conf};
 private:
   enum {
     DISCONNECTED,
@@ -81,6 +82,7 @@ private:
   bool service_daemon = false;
   string daemon_name, service_name;
   map<string,string> daemon_metadata;
+  ceph::timespan rados_mon_op_timeout{};
 
   int wait_for_osdmap();
 
@@ -179,6 +181,9 @@ public:
   mon_feature_t get_required_monitor_features() const;
 
   int get_inconsistent_pgs(int64_t pool_id, std::vector<std::string>* pgs);
+
+  const char** get_tracked_conf_keys() const override;
+  void handle_conf_change(const ConfigProxy&, const std::set<std::string>&) override;
 };
 
 #endif
index a5c22418293932fc3504e6f675c8c5ff0b6caa8a..7d6e29647374be6b7ca63013327d8f0974bbce95 100644 (file)
@@ -18,6 +18,8 @@
 #include "librbd/api/Image.h"
 #include "librbd/api/Snapshot.h"
 #include "librbd/api/Trash.h"
+#include "librbd/deep_copy/Handler.h"
+#include "librbd/deep_copy/ImageCopyRequest.h"
 #include "librbd/deep_copy/MetadataCopyRequest.h"
 #include "librbd/deep_copy/SnapshotCopyRequest.h"
 #include "librbd/exclusive_lock/Policy.h"
@@ -337,6 +339,30 @@ int open_source_image(librados::IoCtx& io_ctx, const std::string &image_name,
   return 0;
 }
 
+class SteppedProgressContext : public ProgressContext {
+public:
+  SteppedProgressContext(ProgressContext* progress_ctx, size_t total_steps)
+    : m_progress_ctx(progress_ctx), m_total_steps(total_steps) {
+  }
+
+  void next_step() {
+    ceph_assert(m_current_step < m_total_steps);
+    ++m_current_step;
+  }
+
+  int update_progress(uint64_t object_number,
+                      uint64_t object_count) override {
+    return m_progress_ctx->update_progress(
+      object_number + (object_count * (m_current_step - 1)),
+      object_count * m_total_steps);
+  }
+
+private:
+  ProgressContext* m_progress_ctx;
+  size_t m_total_steps;
+  size_t m_current_step = 1;
+};
+
 } // anonymous namespace
 
 template <typename I>
@@ -791,8 +817,41 @@ int Migration<I>::abort() {
     ldout(m_cct, 1) << "failed to open destination image: " << cpp_strerror(r)
                     << dendl;
   } else {
-    ldout(m_cct, 10) << "relinking children" << dendl;
+    BOOST_SCOPE_EXIT_TPL(&dst_image_ctx) {
+      if (dst_image_ctx != nullptr) {
+        dst_image_ctx->state->close();
+      }
+    } BOOST_SCOPE_EXIT_END;
 
+    std::list<obj_watch_t> watchers;
+    int flags = librbd::image::LIST_WATCHERS_FILTER_OUT_MY_INSTANCE |
+                librbd::image::LIST_WATCHERS_FILTER_OUT_MIRROR_INSTANCES;
+    C_SaferCond on_list_watchers;
+    auto list_watchers_request = librbd::image::ListWatchersRequest<I>::create(
+        *dst_image_ctx, flags, &watchers, &on_list_watchers);
+    list_watchers_request->send();
+    r = on_list_watchers.wait();
+    if (r < 0) {
+      lderr(m_cct) << "failed listing watchers:" << cpp_strerror(r) << dendl;
+      return r;
+    }
+    if (!watchers.empty()) {
+      lderr(m_cct) << "image has watchers - cannot abort migration" << dendl;
+      return -EBUSY;
+    }
+
+    // ensure destination image is now read-only
+    r = set_state(cls::rbd::MIGRATION_STATE_ABORTING, "");
+    if (r < 0) {
+      return r;
+    }
+
+    // copy dst HEAD -> src HEAD
+    SteppedProgressContext progress_ctx(m_prog_ctx, 2);
+    revert_data(dst_image_ctx, m_src_image_ctx, &progress_ctx);
+    progress_ctx.next_step();
+
+    ldout(m_cct, 10) << "relinking children" << dendl;
     r = relink_children(dst_image_ctx, m_src_image_ctx);
     if (r < 0) {
       return r;
@@ -800,12 +859,6 @@ int Migration<I>::abort() {
 
     ldout(m_cct, 10) << "removing dst image snapshots" << dendl;
 
-    BOOST_SCOPE_EXIT_TPL(&dst_image_ctx) {
-      if (dst_image_ctx != nullptr) {
-        dst_image_ctx->state->close();
-      }
-    } BOOST_SCOPE_EXIT_END;
-
     std::vector<librbd::snap_info_t> snaps;
     r = Snapshot<I>::list(dst_image_ctx, snaps);
     if (r < 0) {
@@ -841,7 +894,7 @@ int Migration<I>::abort() {
     ImageCtx::get_thread_pool_instance(m_cct, &thread_pool, &op_work_queue);
     C_SaferCond on_remove;
     auto req = librbd::image::RemoveRequest<>::create(
-      m_dst_io_ctx, dst_image_ctx, false, false, *m_prog_ctx, op_work_queue,
+      m_dst_io_ctx, dst_image_ctx, false, false, progress_ctx, op_work_queue,
       &on_remove);
     req->send();
     r = on_remove.wait();
@@ -853,7 +906,7 @@ int Migration<I>::abort() {
                    << m_dst_io_ctx.get_pool_name() << "/" << m_dst_image_name
                    << " (" << m_dst_image_id << ")': " << cpp_strerror(r)
                    << dendl;
-      // not fatal
+      return r;
     }
   }
 
@@ -1793,6 +1846,62 @@ int Migration<I>::remove_src_image() {
   return 0;
 }
 
+template <typename I>
+int Migration<I>::revert_data(I* src_image_ctx, I* dst_image_ctx,
+                              ProgressContext* prog_ctx) {
+  ldout(m_cct, 10) << dendl;
+
+  cls::rbd::MigrationSpec migration_spec;
+  int r = cls_client::migration_get(&src_image_ctx->md_ctx,
+                                    src_image_ctx->header_oid,
+                                    &migration_spec);
+
+  if (r < 0) {
+    lderr(m_cct) << "failed retrieving migration header: " << cpp_strerror(r)
+                 << dendl;
+    return r;
+  }
+
+  if (migration_spec.header_type != cls::rbd::MIGRATION_HEADER_TYPE_DST) {
+    lderr(m_cct) << "unexpected migration header type: "
+                 << migration_spec.header_type << dendl;
+    return -EINVAL;
+  }
+
+  uint64_t src_snap_id_start = 0;
+  uint64_t src_snap_id_end = CEPH_NOSNAP;
+  uint64_t dst_snap_id_start = 0;
+  if (!migration_spec.snap_seqs.empty()) {
+    src_snap_id_start = migration_spec.snap_seqs.rbegin()->second;
+  }
+
+  // we only care about the HEAD revision so only add a single mapping to
+  // represent the most recent state
+  SnapSeqs snap_seqs;
+  snap_seqs[CEPH_NOSNAP] = CEPH_NOSNAP;
+
+  ldout(m_cct, 20) << "src_snap_id_start=" << src_snap_id_start << ", "
+                   << "src_snap_id_end=" << src_snap_id_end << ", "
+                   << "dst_snap_id_start=" << dst_snap_id_start << ", "
+                   << "snap_seqs=" << snap_seqs << dendl;
+
+  C_SaferCond ctx;
+  deep_copy::ProgressHandler progress_handler(prog_ctx);
+  auto request = deep_copy::ImageCopyRequest<I>::create(
+    src_image_ctx, dst_image_ctx, src_snap_id_start, src_snap_id_end,
+    dst_snap_id_start, false, {}, snap_seqs, &progress_handler, &ctx);
+  request->send();
+
+  r = ctx.wait();
+  if (r < 0) {
+    lderr(m_cct) << "error reverting destination image data blocks back to "
+                 << "source image: " << cpp_strerror(r) << dendl;
+    return r;
+  }
+
+  return 0;
+}
+
 } // namespace api
 } // namespace librbd
 
index d87f49407650894bc8c695ba37557ac8875b571f..8d24e310d81365d7ed141bfd4bdf9b997907f458 100644 (file)
@@ -96,6 +96,9 @@ private:
                    const librbd::snap_info_t &src_snap,
                    const librbd::linked_image_spec_t &child_image,
                    bool migration_abort, bool reattach_child);
+
+  int revert_data(ImageCtxT* src_image_ctx, ImageCtxT* dst_image_ctx,
+                  ProgressContext *prog_ctx);
 };
 
 } // namespace api
index b405989dc1130f83173663d4a27683dc7cc1cd62..172fd9c69e6aac1b71a6493f93d7e417f2922388 100644 (file)
@@ -2,6 +2,7 @@
 // vim: ts=8 sw=2 smarttab
 
 #include "common/WorkQueue.h"
+#include "common/errno.h"
 #include "librbd/ImageCtx.h"
 #include "librbd/Journal.h"
 #include "librbd/Utils.h"
@@ -27,17 +28,20 @@ namespace cache {
 
 template <typename I>
 ParentCacheObjectDispatch<I>::ParentCacheObjectDispatch(
-    I* image_ctx) : m_image_ctx(image_ctx), m_cache_client(nullptr),
-    m_initialized(false), m_connecting(false) {
+    I* image_ctx)
+  : m_image_ctx(image_ctx),
+    m_lock(ceph::make_mutex(
+      "librbd::cache::ParentCacheObjectDispatch::lock", true, false)) {
   ceph_assert(m_image_ctx->data_ctx.is_valid());
-  std::string controller_path =
-    ((CephContext*)(m_image_ctx->cct))->_conf.get_val<std::string>("immutable_object_cache_sock");
+  auto controller_path = image_ctx->cct->_conf.template get_val<std::string>(
+    "immutable_object_cache_sock");
   m_cache_client = new CacheClient(controller_path.c_str(), m_image_ctx->cct);
 }
 
 template <typename I>
 ParentCacheObjectDispatch<I>::~ParentCacheObjectDispatch() {
-    delete m_cache_client;
+  delete m_cache_client;
+  m_cache_client = nullptr;
 }
 
 template <typename I>
@@ -45,23 +49,18 @@ void ParentCacheObjectDispatch<I>::init(Context* on_finish) {
   auto cct = m_image_ctx->cct;
   ldout(cct, 5) << dendl;
 
-  if (m_image_ctx->parent != nullptr) {
-    ldout(cct, 5) << "child image: skipping" << dendl;
-    return;
-  }
-
-  Context* create_session_ctx = new LambdaContext([this, on_finish](int ret) {
-    m_connecting.store(false);
+  if (m_image_ctx->child == nullptr) {
+    ldout(cct, 5) << "non-parent image: skipping" << dendl;
     if (on_finish != nullptr) {
-      on_finish->complete(ret);
+      on_finish->complete(-EINVAL);
     }
-  });
-
-  m_connecting.store(true);
-  create_cache_session(create_session_ctx, false);
+    return;
+  }
 
   m_image_ctx->io_object_dispatcher->register_object_dispatch(this);
-  m_initialized = true;
+
+  std::unique_lock locker{m_lock};
+  create_cache_session(on_finish, false);
 }
 
 template <typename I>
@@ -75,42 +74,25 @@ bool ParentCacheObjectDispatch<I>::read(
   auto cct = m_image_ctx->cct;
   ldout(cct, 20) << "object_no=" << object_no << " " << object_off << "~"
                  << object_len << dendl;
-  ceph_assert(m_initialized);
   string oid = data_object_name(m_image_ctx, object_no);
 
   /* if RO daemon still don't startup, or RO daemon crash,
    * or session occur any error, try to re-connect daemon.*/
+  std::unique_lock locker{m_lock};
   if (!m_cache_client->is_session_work()) {
-    if (!m_connecting.exchange(true)) {
-      /* Since we don't have a giant lock protecting the full re-connect process,
-       * if thread A first passes the if (!m_cache_client->is_session_work()),
-       * thread B could have also passed it and reconnected
-       * before thread A resumes and executes if (!m_connecting.exchange(true)).
-       * This will result in thread A re-connecting a working session.
-       * So, we need to check if session is normal again. If session work,
-       * we need set m_connecting to false. */
-      if (!m_cache_client->is_session_work()) {
-        Context* on_finish = new LambdaContext([this](int ret) {
-          m_connecting.store(false);
-        });
-        create_cache_session(on_finish, true);
-      } else {
-        m_connecting.store(false);
-      }
-    }
+    create_cache_session(nullptr, true);
     ldout(cct, 5) << "Parent cache try to re-connect to RO daemon. "
                   << "dispatch current request to lower object layer" << dendl;
     return false;
   }
 
-  ceph_assert(m_cache_client->is_session_work());
-
   CacheGenContextURef ctx = make_gen_lambda_context<ObjectCacheRequest*,
                                      std::function<void(ObjectCacheRequest*)>>
-   ([this, read_data, dispatch_result, on_dispatched,
-      oid, object_off, object_len](ObjectCacheRequest* ack) {
-     handle_read_cache(ack, object_off, object_len, read_data,
-                       dispatch_result, on_dispatched);
+   ([this, read_data, dispatch_result, on_dispatched, object_no, object_off,
+     object_len, snap_id, &parent_trace](ObjectCacheRequest* ack) {
+      handle_read_cache(ack, object_no, object_off, object_len, snap_id,
+                        parent_trace, read_data, dispatch_result,
+                        on_dispatched);
   });
 
   m_cache_client->lookup_object(m_image_ctx->data_ctx.get_namespace(),
@@ -121,9 +103,10 @@ bool ParentCacheObjectDispatch<I>::read(
 
 template <typename I>
 void ParentCacheObjectDispatch<I>::handle_read_cache(
-     ObjectCacheRequest* ack, uint64_t read_off, uint64_t read_len,
-     ceph::bufferlist* read_data, io::DispatchResult* dispatch_result,
-     Context* on_dispatched) {
+     ObjectCacheRequest* ack, uint64_t object_no, uint64_t read_off,
+     uint64_t read_len, librados::snap_t snap_id,
+     const ZTracer::Trace &parent_trace, ceph::bufferlist* read_data,
+     io::DispatchResult* dispatch_result, Context* on_dispatched) {
   auto cct = m_image_ctx->cct;
   ldout(cct, 20) << dendl;
 
@@ -136,7 +119,20 @@ void ParentCacheObjectDispatch<I>::handle_read_cache(
 
   ceph_assert(ack->type == RBDSC_READ_REPLY);
   std::string file_path = ((ObjectCacheReadReplyData*)ack)->cache_path;
-  ceph_assert(file_path != "");
+  if (file_path.empty()) {
+    auto ctx = new LambdaContext(
+      [this, dispatch_result, on_dispatched](int r) {
+        if (r < 0 && r != -ENOENT) {
+          lderr(m_image_ctx->cct) << "failed to read parent: "
+                                  << cpp_strerror(r) << dendl;
+        }
+        *dispatch_result = io::DISPATCH_RESULT_COMPLETE;
+        on_dispatched->complete(r);
+      });
+    io::util::read_parent<I>(m_image_ctx, object_no, read_off, read_len,
+                             snap_id, parent_trace, read_data, ctx);
+    return;
+  }
 
   // try to read from parent image cache
   int r = read_object(file_path, read_data, read_off, read_len, on_dispatched);
@@ -163,18 +159,29 @@ int ParentCacheObjectDispatch<I>::handle_register_client(bool reg) {
 }
 
 template <typename I>
-int ParentCacheObjectDispatch<I>::create_cache_session(Context* on_finish, bool is_reconnect) {
+void ParentCacheObjectDispatch<I>::create_cache_session(Context* on_finish,
+                                                       bool is_reconnect) {
+  ceph_assert(ceph_mutex_is_locked_by_me(m_lock));
+  if (m_connecting) {
+    return;
+  }
+  m_connecting = true;
+
   auto cct = m_image_ctx->cct;
   ldout(cct, 20) << dendl;
 
   Context* register_ctx = new LambdaContext([this, cct, on_finish](int ret) {
     if (ret < 0) {
       lderr(cct) << "Parent cache fail to register client." << dendl;
-    } else {
-      ceph_assert(m_cache_client->is_session_work());
     }
     handle_register_client(ret < 0 ? false : true);
-    on_finish->complete(ret);
+
+    ceph_assert(m_connecting);
+    m_connecting = false;
+
+    if (on_finish != nullptr) {
+      on_finish->complete(0);
+    }
   });
 
   Context* connect_ctx = new LambdaContext(
@@ -195,21 +202,19 @@ int ParentCacheObjectDispatch<I>::create_cache_session(Context* on_finish, bool
     delete m_cache_client;
 
     // create new CacheClient to connect RO daemon.
-    std::string controller_path =
-      ((CephContext*)(m_image_ctx->cct))->_conf.get_val<std::string>("immutable_object_cache_sock");
+    auto controller_path = cct->_conf.template get_val<std::string>(
+      "immutable_object_cache_sock");
     m_cache_client = new CacheClient(controller_path.c_str(), m_image_ctx->cct);
   }
 
   m_cache_client->run();
-
   m_cache_client->connect(connect_ctx);
-  return 0;
 }
 
 template <typename I>
 int ParentCacheObjectDispatch<I>::read_object(
-        std::string file_path, ceph::bufferlist* read_data, uint64_t offset,
-        uint64_t length, Context *on_finish) {
+    std::string file_path, ceph::bufferlist* read_data, uint64_t offset,
+    uint64_t length, Context *on_finish) {
 
   auto *cct = m_image_ctx->cct;
   ldout(cct, 20) << "file path: " << file_path << dendl;
index 475a5ad15fe9ecacdfe5a84d2990d3f392309f55..9480b48b90885f1c8f0871c25c9fc22198f54627 100644 (file)
@@ -5,8 +5,9 @@
 #define CEPH_LIBRBD_CACHE_PARENT_CACHER_OBJECT_DISPATCH_H
 
 #include "librbd/io/ObjectDispatchInterface.h"
-#include "tools/immutable_object_cache/CacheClient.h"
+#include "common/ceph_mutex.h"
 #include "librbd/cache/TypeTraits.h"
+#include "tools/immutable_object_cache/CacheClient.h"
 #include "tools/immutable_object_cache/Types.h"
 
 namespace librbd {
@@ -104,10 +105,6 @@ public:
       uint64_t journal_tid, uint64_t new_journal_tid) {
   }
 
-  bool get_state() {
-    return m_initialized;
-  }
-
   ImageCtxT* get_image_ctx() {
     return m_image_ctx;
   }
@@ -120,19 +117,21 @@ private:
 
   int read_object(std::string file_path, ceph::bufferlist* read_data,
                   uint64_t offset, uint64_t length, Context *on_finish);
-  void handle_read_cache(
-         ceph::immutable_obj_cache::ObjectCacheRequest* ack,
-         uint64_t read_off, uint64_t read_len,
-         ceph::bufferlist* read_data,
-         io::DispatchResult* dispatch_result,
-         Context* on_dispatched);
+  void handle_read_cache(ceph::immutable_obj_cache::ObjectCacheRequest* ack,
+                         uint64_t object_no, uint64_t read_off,
+                         uint64_t read_len, librados::snap_t snap_id,
+                         const ZTracer::Trace &parent_trace,
+                         ceph::bufferlist* read_data,
+                         io::DispatchResult* dispatch_result,
+                         Context* on_dispatched);
   int handle_register_client(bool reg);
-  int create_cache_session(Context* on_finish, bool is_reconnect);
+  void create_cache_session(Context* on_finish, bool is_reconnect);
 
   ImageCtxT* m_image_ctx;
-  CacheClient *m_cache_client;
-  bool m_initialized;
-  std::atomic<bool> m_connecting;
+
+  ceph::mutex m_lock;
+  CacheClient *m_cache_client = nullptr;
+  bool m_connecting = false;
 };
 
 } // namespace cache
index 05ae8d1a90e13e83f3103ffab8afcc912b84014e..7ccbd136f6267736e2e9b80d93dee3bf3b0d7c66 100644 (file)
 #define dout_prefix *_dout << "librbd::image::ListWatchersRequest: " << this \
                            << " " << __func__ << ": "
 
+static std::ostream& operator<<(std::ostream& os, const obj_watch_t& watch) {
+  os << "{addr=" << watch.addr << ", "
+     << "watcher_id=" << watch.watcher_id << ", "
+     << "cookie=" << watch.cookie << "}";
+  return os;
+}
+
 namespace librbd {
 namespace image {
 
@@ -71,6 +78,7 @@ void ListWatchersRequest<I>::handle_list_image_watchers(int r) {
     return;
   }
 
+  ldout(m_cct, 20) << "object_watchers=" << m_object_watchers << dendl;
   list_mirror_watchers();
 }
 
@@ -109,6 +117,8 @@ void ListWatchersRequest<I>::handle_list_mirror_watchers(int r) {
     ldout(m_cct, 1) << "error listing mirror watchers: " << cpp_strerror(r)
                     << dendl;
   }
+
+  ldout(m_cct, 20) << "mirror_watchers=" << m_mirror_watchers << dendl;
   finish(0);
 }
 
@@ -127,6 +137,7 @@ void ListWatchersRequest<I>::finish(int r) {
       for (auto &w : m_object_watchers) {
         if ((m_flags & LIST_WATCHERS_FILTER_OUT_MY_INSTANCE) != 0) {
           if (w.cookie == watch_handle) {
+            ldout(m_cct, 20) << "filtering out my instance: " << w << dendl;
             continue;
           }
         }
@@ -138,10 +149,13 @@ void ListWatchersRequest<I>::finish(int r) {
                                });
         if ((m_flags & LIST_WATCHERS_FILTER_OUT_MIRROR_INSTANCES) != 0) {
           if (it != m_mirror_watchers.end()) {
+            ldout(m_cct, 20) << "filtering out mirror instance: " << w << dendl;
             continue;
           }
         } else if ((m_flags & LIST_WATCHERS_MIRROR_INSTANCES_ONLY) != 0) {
           if (it == m_mirror_watchers.end()) {
+            ldout(m_cct, 20) << "filtering out non-mirror instance: " << w
+                             << dendl;
             continue;
           }
         }
index 2e30242e8f425faa7924c114c6956e7ed0ceab53..2edf2b14fe13566946952a56ace041debe1dd18a 100644 (file)
@@ -534,7 +534,8 @@ Context* OpenRequest<I>::send_parent_cache(int *result) {
   bool parent_cache_enabled = m_image_ctx->config.template get_val<bool>(
     "rbd_parent_cache_enabled");
 
-  if (m_image_ctx->child == nullptr || !parent_cache_enabled) {
+  if (m_image_ctx->child == nullptr || !parent_cache_enabled ||
+      !m_image_ctx->data_ctx.is_valid()) {
     return send_init_cache(result);
   }
 
@@ -563,8 +564,8 @@ Context* OpenRequest<I>::handle_parent_cache(int* result) {
 
 template <typename I>
 Context *OpenRequest<I>::send_init_cache(int *result) {
-  // cache is disabled or parent image context
-  if (!m_image_ctx->cache || m_image_ctx->child != nullptr) {
+  if (!m_image_ctx->cache || m_image_ctx->child != nullptr ||
+      !m_image_ctx->data_ctx.is_valid()) {
     return send_register_watch(result);
   }
 
index 560b22ee6106b0bde65e54fb4ce9dfa4c4c65541..590242c353e06a4c9163eead768b5730ec6d4488 100644 (file)
@@ -124,13 +124,29 @@ Context *RefreshRequest<I>::handle_get_migration_header(int *result) {
   case cls::rbd::MIGRATION_HEADER_TYPE_DST:
     ldout(cct, 1) << this << " " << __func__ << ": migrating from: "
                   << m_migration_spec << dendl;
-    if (m_migration_spec.state != cls::rbd::MIGRATION_STATE_PREPARED &&
-        m_migration_spec.state != cls::rbd::MIGRATION_STATE_EXECUTING &&
-        m_migration_spec.state != cls::rbd::MIGRATION_STATE_EXECUTED) {
+    switch (m_migration_spec.state) {
+    case cls::rbd::MIGRATION_STATE_PREPARING:
       ldout(cct, 5) << this << " " << __func__ << ": current migration state: "
                     << m_migration_spec.state << ", retrying" << dendl;
       send();
       return nullptr;
+    case cls::rbd::MIGRATION_STATE_PREPARED:
+    case cls::rbd::MIGRATION_STATE_EXECUTING:
+    case cls::rbd::MIGRATION_STATE_EXECUTED:
+      break;
+    case cls::rbd::MIGRATION_STATE_ABORTING:
+      if (!m_read_only) {
+        lderr(cct) << this << " " << __func__ << ": migration is being aborted"
+                   << dendl;
+        *result = -EROFS;
+        return m_on_finish;
+      }
+      break;
+    default:
+      lderr(cct) << this << " " << __func__ << ": migration is in an "
+                 << "unexpected state" << dendl;
+      *result = -EINVAL;
+      return m_on_finish;
     }
     break;
   default:
@@ -1301,8 +1317,14 @@ void RefreshRequest<I>::apply() {
     m_image_ctx.operations_disabled = (
       (m_op_features & ~RBD_OPERATION_FEATURES_ALL) != 0ULL);
     m_image_ctx.group_spec = m_group_spec;
-    if (get_migration_info(&m_image_ctx.parent_md,
-                           &m_image_ctx.migration_info)) {
+
+    bool migration_info_valid;
+    int r = get_migration_info(&m_image_ctx.parent_md,
+                               &m_image_ctx.migration_info,
+                               &migration_info_valid);
+    ceph_assert(r == 0); // validated in refresh parent step
+
+    if (migration_info_valid) {
       for (auto it : m_image_ctx.migration_info.snap_map) {
         migration_reverse_snap_seq[it.second.front()] = it.first;
       }
@@ -1313,7 +1335,7 @@ void RefreshRequest<I>::apply() {
 
     librados::Rados rados(m_image_ctx.md_ctx);
     int8_t require_osd_release;
-    int r = rados.get_min_compatible_osd(&require_osd_release);
+    r = rados.get_min_compatible_osd(&require_osd_release);
     if (r == 0 && require_osd_release >= CEPH_RELEASE_OCTOPUS) {
       m_image_ctx.enable_sparse_copyup = true;
     }
@@ -1417,7 +1439,13 @@ template <typename I>
 int RefreshRequest<I>::get_parent_info(uint64_t snap_id,
                                        ParentImageInfo *parent_md,
                                        MigrationInfo *migration_info) {
-  if (get_migration_info(parent_md, migration_info)) {
+  bool migration_info_valid;
+  int r = get_migration_info(parent_md, migration_info, &migration_info_valid);
+  if (r < 0) {
+    return r;
+  }
+
+  if (migration_info_valid) {
     return 0;
   } else if (snap_id == CEPH_NOSNAP) {
     *parent_md = m_parent_md;
@@ -1436,17 +1464,24 @@ int RefreshRequest<I>::get_parent_info(uint64_t snap_id,
 }
 
 template <typename I>
-bool RefreshRequest<I>::get_migration_info(ParentImageInfo *parent_md,
-                                           MigrationInfo *migration_info) {
+int RefreshRequest<I>::get_migration_info(ParentImageInfo *parent_md,
+                                          MigrationInfo *migration_info,
+                                          bool* migration_info_valid) {
+  CephContext *cct = m_image_ctx.cct;
   if (m_migration_spec.header_type != cls::rbd::MIGRATION_HEADER_TYPE_DST ||
       (m_migration_spec.state != cls::rbd::MIGRATION_STATE_PREPARED &&
-       m_migration_spec.state != cls::rbd::MIGRATION_STATE_EXECUTING)) {
-    ceph_assert(m_migration_spec.header_type ==
-                    cls::rbd::MIGRATION_HEADER_TYPE_SRC ||
-                m_migration_spec.pool_id == -1 ||
-                m_migration_spec.state == cls::rbd::MIGRATION_STATE_EXECUTED);
+       m_migration_spec.state != cls::rbd::MIGRATION_STATE_EXECUTING &&
+       m_migration_spec.state != cls::rbd::MIGRATION_STATE_ABORTING)) {
+    if (m_migration_spec.header_type != cls::rbd::MIGRATION_HEADER_TYPE_SRC &&
+        m_migration_spec.pool_id != -1 &&
+        m_migration_spec.state != cls::rbd::MIGRATION_STATE_EXECUTED) {
+      lderr(cct) << this << " " << __func__ << ": invalid migration spec"
+                 << dendl;
+      return -EINVAL;
+    }
 
-    return false;
+    *migration_info_valid = false;
+    return 0;
   }
 
   parent_md->spec.pool_id = m_migration_spec.pool_id;
@@ -1483,10 +1518,11 @@ bool RefreshRequest<I>::get_migration_info(ParentImageInfo *parent_md,
   *migration_info = {m_migration_spec.pool_id, m_migration_spec.pool_namespace,
                      m_migration_spec.image_name, m_migration_spec.image_id, {},
                      overlap, m_migration_spec.flatten};
+  *migration_info_valid = true;
 
   deep_copy::util::compute_snap_map(m_image_ctx.cct, 0, CEPH_NOSNAP, {},
                                     snap_seqs, &migration_info->snap_map);
-  return true;
+  return 0;
 }
 
 } // namespace image
index 4e314c7e6980c635ef632c7172d5d7f72fa1c427..6970a9b45626cd8e62759335cc45add3372f8084 100644 (file)
@@ -258,8 +258,9 @@ private:
   void apply();
   int get_parent_info(uint64_t snap_id, ParentImageInfo *parent_md,
                       MigrationInfo *migration_info);
-  bool get_migration_info(ParentImageInfo *parent_md,
-                          MigrationInfo *migration_info);
+  int get_migration_info(ParentImageInfo *parent_md,
+                         MigrationInfo *migration_info,
+                         bool* migration_info_valid);
 };
 
 } // namespace image
index 6644b608bd93e501f0ef5fdcbf2342e86a8dc14a..38eff1b802366e3aa67a5ca9f3e246683eba1c68 100644 (file)
@@ -198,22 +198,22 @@ void AioCompletion::set_request_count(uint32_t count) {
 
 void AioCompletion::complete_request(ssize_t r)
 {
-  uint32_t previous_pending_count = pending_count--;
-  ceph_assert(previous_pending_count > 0);
-  auto pending_count = previous_pending_count - 1;
-
   ceph_assert(ictx != nullptr);
   CephContext *cct = ictx->cct;
 
   if (r > 0) {
     rval += r;
-  } else if (r != -EEXIST) {
+  } else if (r < 0 && r != -EEXIST) {
     // might race w/ another thread setting an error code but
     // first one wins
     int zero = 0;
     error_rval.compare_exchange_strong(zero, r);
   }
 
+  uint32_t previous_pending_count = pending_count--;
+  ceph_assert(previous_pending_count > 0);
+  auto pending_count = previous_pending_count - 1;
+
   ldout(cct, 20) << "cb=" << complete_cb << ", "
                  << "pending=" << pending_count << dendl;
   if (pending_count == 0) {
index e5a04597d3e7df46e3a05edebd03119950c636c1..0fe10f2c9fe41c45c97145cc77df05ac52f644af 100644 (file)
@@ -79,7 +79,7 @@ protected:
               const ZTracer::Trace &parent_trace)
     : m_image_ctx(image_ctx), m_aio_comp(aio_comp),
       m_image_extents(std::move(image_extents)),
-      m_trace(util::create_trace(image_ctx, trace_name, parent_trace)) {
+      m_trace(librbd::util::create_trace(image_ctx, trace_name, parent_trace)) {
     m_trace.event("start");
   }
 
index 94dd982180f27489f887560edc35547db250b9eb..1ff272fc2817dbb4b78010d57ef86c4af3d98583 100644 (file)
@@ -871,21 +871,23 @@ void ImageRequestWQ<I>::apply_qos_limit(const uint64_t flag,
 }
 
 template <typename I>
-void ImageRequestWQ<I>::handle_throttle_ready(int r, ImageDispatchSpec<I> *item, uint64_t flag) {
+void ImageRequestWQ<I>::handle_throttle_ready(int r, ImageDispatchSpec<I> *item,
+                                              uint64_t flag) {
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 15) << "r=" << r << ", " << "req=" << item << dendl;
 
+  std::lock_guard pool_locker{this->get_pool_lock()};
   ceph_assert(m_io_throttled.load() > 0);
   item->set_throttled(flag);
   if (item->were_all_throttled()) {
-    this->requeue_back(item);
+    this->requeue_back(pool_locker, item);
     --m_io_throttled;
-    this->signal();
+    this->signal(pool_locker);
   }
 }
 
 template <typename I>
-bool ImageRequestWQ<I>::needs_throttle(ImageDispatchSpec<I> *item) { 
+bool ImageRequestWQ<I>::needs_throttle(ImageDispatchSpec<I> *item) {
   uint64_t tokens = 0;
   uint64_t flag = 0;
   bool blocked = false;
index 3966dd2e725b5f01a8ca0fbdf16b6e4169eccfa0..ffd21dfc617e6b44b65d1609ae04f6a776fdfa7a 100644 (file)
@@ -17,8 +17,7 @@
 #include "librbd/Utils.h"
 #include "librbd/io/AioCompletion.h"
 #include "librbd/io/CopyupRequest.h"
-#include "librbd/io/ImageRequest.h"
-#include "librbd/io/ReadResult.h"
+#include "librbd/io/Utils.h"
 
 #include <boost/bind.hpp>
 #include <boost/optional.hpp>
@@ -34,6 +33,9 @@ namespace librbd {
 namespace io {
 
 using librbd::util::data_object_name;
+using librbd::util::create_context_callback;
+using librbd::util::create_rados_callback;
+using librbd::util::create_trace;
 
 namespace {
 
@@ -102,7 +104,7 @@ ObjectRequest<I>::ObjectRequest(
     const ZTracer::Trace &trace, Context *completion)
   : m_ictx(ictx), m_object_no(objectno), m_object_off(off),
     m_object_len(len), m_snap_id(snap_id), m_completion(completion),
-    m_trace(util::create_trace(*ictx, "", trace)) {
+    m_trace(create_trace(*ictx, "", trace)) {
   ceph_assert(m_ictx->data_ctx.is_valid());
   if (m_trace.valid()) {
     m_trace.copy_name(trace_name + std::string(" ") +
@@ -165,7 +167,7 @@ bool ObjectRequest<I>::compute_parent_extents(Extents *parent_extents,
 template <typename I>
 void ObjectRequest<I>::async_finish(int r) {
   ldout(m_ictx->cct, 20) << "r=" << r << dendl;
-  m_ictx->op_work_queue->queue(util::create_context_callback<
+  m_ictx->op_work_queue->queue(create_context_callback<
     ObjectRequest<I>, &ObjectRequest<I>::finish>(this), r);
 }
 
@@ -221,7 +223,7 @@ void ObjectReadRequest<I>::read_object() {
   }
   op.set_op_flags2(m_op_flags);
 
-  librados::AioCompletion *rados_completion = util::create_rados_callback<
+  librados::AioCompletion *rados_completion = create_rados_callback<
     ObjectReadRequest<I>, &ObjectReadRequest<I>::handle_read_object>(this);
   int flags = image_ctx->get_read_flags(this->m_snap_id);
   int r = image_ctx->data_ctx.aio_operate(
@@ -254,38 +256,14 @@ void ObjectReadRequest<I>::handle_read_object(int r) {
 template <typename I>
 void ObjectReadRequest<I>::read_parent() {
   I *image_ctx = this->m_ictx;
-
-  std::shared_lock image_locker{image_ctx->image_lock};
-
-  // calculate reverse mapping onto the image
-  Extents parent_extents;
-  Striper::extent_to_file(image_ctx->cct, &image_ctx->layout,
-                          this->m_object_no, this->m_object_off,
-                          this->m_object_len, parent_extents);
-
-  uint64_t parent_overlap = 0;
-  uint64_t object_overlap = 0;
-  int r = image_ctx->get_parent_overlap(this->m_snap_id, &parent_overlap);
-  if (r == 0) {
-    object_overlap = image_ctx->prune_parent_extents(parent_extents,
-                                                     parent_overlap);
-  }
-
-  if (object_overlap == 0) {
-    image_locker.unlock();
-
-    this->finish(-ENOENT);
-    return;
-  }
-
   ldout(image_ctx->cct, 20) << dendl;
 
-  auto parent_completion = AioCompletion::create_and_start<
-    ObjectReadRequest<I>, &ObjectReadRequest<I>::handle_read_parent>(
-      this, util::get_image_ctx(image_ctx->parent), AIO_TYPE_READ);
-  ImageRequest<I>::aio_read(image_ctx->parent, parent_completion,
-                            std::move(parent_extents), ReadResult{m_read_data},
-                            0, this->m_trace);
+  auto ctx = create_context_callback<
+    ObjectReadRequest<I>, &ObjectReadRequest<I>::handle_read_parent>(this);
+
+  io::util::read_parent<I>(image_ctx, this->m_object_no, this->m_object_off,
+                           this->m_object_len, this->m_snap_id, this->m_trace,
+                           m_read_data, ctx);
 }
 
 template <typename I>
@@ -495,7 +473,7 @@ void AbstractObjectWriteRequest<I>::write_object() {
   add_write_ops(&write);
   ceph_assert(write.size() != 0);
 
-  librados::AioCompletion *rados_completion = util::create_rados_callback<
+  librados::AioCompletion *rados_completion = create_rados_callback<
     AbstractObjectWriteRequest<I>,
     &AbstractObjectWriteRequest<I>::handle_write_object>(this);
   int r = image_ctx->data_ctx.aio_operate(
index bf06663388c8e710cb315500db0fa79df9855cfb..92394e4f7aa3536d31e799f536f420de8a70b355 100644 (file)
@@ -2,8 +2,17 @@
 // vim: ts=8 sw=2 smarttab
 
 #include "librbd/io/Utils.h"
+#include "common/dout.h"
 #include "include/buffer.h"
+#include "include/rados/librados.hpp"
+#include "librbd/io/AioCompletion.h"
+#include "librbd/io/ImageRequest.h"
 #include "osd/osd_types.h"
+#include "osdc/Striper.h"
+
+#define dout_subsys ceph_subsys_rbd
+#undef dout_prefix
+#define dout_prefix *_dout << "librbd::io::util: " << __func__ << ": "
 
 namespace librbd {
 namespace io {
@@ -51,7 +60,52 @@ bool assemble_write_same_extent(
   return false;
 }
 
+template <typename I>
+void read_parent(I *image_ctx, uint64_t object_no, uint64_t off,
+                 uint64_t len, librados::snap_t snap_id,
+                 const ZTracer::Trace &trace, ceph::bufferlist* data,
+                 Context* on_finish) {
+
+  auto cct = image_ctx->cct;
+
+  std::shared_lock image_locker{image_ctx->image_lock};
+
+  // calculate reverse mapping onto the image
+  Extents parent_extents;
+  Striper::extent_to_file(cct, &image_ctx->layout, object_no, off, len,
+                          parent_extents);
+
+  uint64_t parent_overlap = 0;
+  uint64_t object_overlap = 0;
+  int r = image_ctx->get_parent_overlap(snap_id, &parent_overlap);
+  if (r == 0) {
+    object_overlap = image_ctx->prune_parent_extents(parent_extents,
+                                                     parent_overlap);
+  }
+
+  if (object_overlap == 0) {
+    image_locker.unlock();
+
+    on_finish->complete(-ENOENT);
+    return;
+  }
+
+  ldout(cct, 20) << dendl;
+
+  auto comp = AioCompletion::create_and_start(on_finish, image_ctx->parent,
+                                              AIO_TYPE_READ);
+  ldout(cct, 20) << "completion " << comp << ", extents " << parent_extents
+                 << dendl;
+
+  ImageRequest<I>::aio_read(image_ctx->parent, comp, std::move(parent_extents),
+                            ReadResult{data}, 0, trace);
+}
+
 } // namespace util
 } // namespace io
 } // namespace librbd
 
+template void librbd::io::util::read_parent(
+    librbd::ImageCtx *image_ctx, uint64_t object_no, uint64_t off, uint64_t len,
+    librados::snap_t snap_id, const ZTracer::Trace &trace,
+    ceph::bufferlist* data, Context* on_finish);
index 285985036de280e44bdb090f41c9fa70fb7d7026..13237435a1569e980a9388f5af68142c81b951aa 100644 (file)
@@ -6,12 +6,18 @@
 
 #include "include/int_types.h"
 #include "include/buffer_fwd.h"
+#include "include/rados/rados_types.hpp"
+#include "common/zipkin_trace.h"
 #include "librbd/io/Types.h"
 #include <map>
 
+class Context;
 class ObjectExtent;
 
 namespace librbd {
+
+struct ImageCtx;
+
 namespace io {
 namespace util {
 
@@ -20,6 +26,12 @@ bool assemble_write_same_extent(const LightweightObjectExtent &object_extent,
                                 ceph::bufferlist *ws_data,
                                 bool force_write);
 
+template <typename ImageCtxT = librbd::ImageCtx>
+void read_parent(ImageCtxT *image_ctx, uint64_t object_no, uint64_t off,
+                 uint64_t len, librados::snap_t snap_id,
+                 const ZTracer::Trace &trace, ceph::bufferlist* data,
+                 Context* on_finish);
+
 } // namespace util
 } // namespace io
 } // namespace librbd
index c46d37f05eb707e75dee2f0daa23131ceb35ae6b..97c0d2219b64c7a55f7c34ba2bf75f212dec5bf9 100644 (file)
@@ -480,7 +480,7 @@ Context *DisableFeaturesRequest<I>::handle_remove_object_map(int *result) {
   CephContext *cct = image_ctx.cct;
   ldout(cct, 20) << this << " " << __func__ << ": r=" << *result << dendl;
 
-  if (*result < 0) {
+  if (*result < 0 && *result != -ENOENT) {
     lderr(cct) << "failed to remove object map: " << cpp_strerror(*result) << dendl;
     return handle_finish(*result);
   }
index 0acc2c2f6590044500aebf2334bb47fc33039e5d..609b91188acd3989da2069f8cc07ce1dd00b3c7a 100644 (file)
 
 void Anchor::encode(bufferlist &bl) const
 {
-  ENCODE_START(1, 1, bl);
+  ENCODE_START(2, 1, bl);
   encode(ino, bl);
   encode(dirino, bl);
   encode(d_name, bl);
   encode(d_type, bl);
+  encode(frags, bl);
   ENCODE_FINISH(bl);
 }
 
 void Anchor::decode(bufferlist::const_iterator &bl)
 {
-  DECODE_START(1, bl);
+  DECODE_START(2, bl);
   decode(ino, bl);
   decode(dirino, bl);
   decode(d_name, bl);
   decode(d_type, bl);
+  if (struct_v >= 2)
+    decode(frags, bl);
   DECODE_FINISH(bl);
 }
 
index da7c6d1a999a797ea7e6169318b0f3d7909bbfc1..9e55ec807bf2a5269ed43cd652f843ecf414c48c 100644 (file)
@@ -36,15 +36,17 @@ public:
   void decode(bufferlist::const_iterator &bl);
   void dump(Formatter *f) const;
   static void generate_test_instances(std::list<Anchor*>& ls);
-  bool operator==(const Anchor &r) {
+  bool operator==(const Anchor &r) const {
     return ino == r.ino && dirino == r.dirino &&
-    d_name == r.d_name && d_type == r.d_type;
+          d_name == r.d_name && d_type == r.d_type &&
+          frags == r.frags;
   }
 
   inodeno_t ino;       // anchored ino
   inodeno_t dirino;
   std::string d_name;
   __u8 d_type = 0;
+  std::set<frag_t> frags;
 
   int omap_idx = -1;   // stored in which omap object
 };
index b54ad9699694c3e611edf03273f42dc29fe9454a..bc4e21bcea9591a2fba1433062b604c5f350093a 100644 (file)
@@ -25,7 +25,7 @@ public:
   virtual ~BatchOp() {}
 
   virtual void add_request(const ceph::ref_t<class MDRequestImpl>& mdr) = 0;
-  virtual void set_request(const ceph::ref_t<class MDRequestImpl>& mdr) = 0;
+  virtual ceph::ref_t<class MDRequestImpl> find_new_head() = 0;
 
   virtual void print(std::ostream&) = 0;
 
index c6da7cd242a596e5e8347af474470e38440af0ce..9953324d80c1433bb1541057119c6aed19dc077a 100644 (file)
@@ -304,9 +304,9 @@ void Beacon::notify_health(MDSRank const *mds)
   }
 
   // Detect MDS_HEALTH_TRIM condition
-  // Arbitrary factor of 2, indicates MDS is not trimming promptly
+  // Indicates MDS is not trimming promptly
   {
-    if (mds->mdlog->get_num_segments() > (size_t)(g_conf()->mds_log_max_segments * 2)) {
+    if (mds->mdlog->get_num_segments() > (size_t)(g_conf()->mds_log_max_segments * g_conf().get_val<double>("mds_log_warn_factor"))) {
       std::ostringstream oss;
       oss << "Behind on trimming (" << mds->mdlog->get_num_segments()
         << "/" << g_conf()->mds_log_max_segments << ")";
@@ -364,14 +364,16 @@ void Beacon::notify_health(MDSRank const *mds)
     set<Session*> sessions;
     mds->sessionmap.get_client_session_set(sessions);
 
+    const auto min_caps_working_set = g_conf().get_val<uint64_t>("mds_min_caps_working_set");
     const auto recall_warning_threshold = g_conf().get_val<Option::size_t>("mds_recall_warning_threshold");
     const auto max_completed_requests = g_conf()->mds_max_completed_requests;
     const auto max_completed_flushes = g_conf()->mds_max_completed_flushes;
     std::vector<MDSHealthMetric> late_recall_metrics;
     std::vector<MDSHealthMetric> large_completed_requests_metrics;
     for (auto& session : sessions) {
+      const uint64_t num_caps = session->get_num_caps();
       const uint64_t recall_caps = session->get_recall_caps();
-      if (recall_caps > recall_warning_threshold) {
+      if (recall_caps > recall_warning_threshold && num_caps > min_caps_working_set) {
         dout(2) << "Session " << *session <<
              " is not releasing caps fast enough. Recalled caps at " << recall_caps
           << " > " << recall_warning_threshold << " (mds_recall_warning_threshold)." << dendl;
old mode 100644 (file)
new mode 100755 (executable)
index 67f46df..9c06cc2
@@ -1695,6 +1695,7 @@ CDentry *CDir::_load_dentry(
     bufferlist &bl,
     const int pos,
     const std::set<snapid_t> *snaps,
+    double rand_threshold,
     bool *force_dirty)
 {
   auto q = bl.cbegin();
@@ -1857,7 +1858,7 @@ CDentry *CDir::_load_dentry(
         if (in->inode.is_dirty_rstat())
           in->mark_dirty_rstat();
 
-        in->maybe_ephemeral_rand(true);
+        in->maybe_ephemeral_rand(true, rand_threshold);
         //in->hack_accessed = false;
         //in->hack_load_stamp = ceph_clock_now();
         //num_new_inodes_loaded++;
@@ -1969,6 +1970,7 @@ void CDir::_omap_fetched(bufferlist& hdrbl, map<string, bufferlist>& omap,
   }
 
   unsigned pos = omap.size() - 1;
+  double rand_threshold = get_inode()->get_ephemeral_rand();
   for (map<string, bufferlist>::reverse_iterator p = omap.rbegin();
        p != omap.rend();
        ++p, --pos) {
@@ -1980,7 +1982,7 @@ void CDir::_omap_fetched(bufferlist& hdrbl, map<string, bufferlist>& omap,
     try {
       dn = _load_dentry(
             p->first, dname, last, p->second, pos, snaps,
-            &force_dirty);
+            rand_threshold, &force_dirty);
     } catch (const buffer::error &err) {
       cache->mds->clog->warn() << "Corrupt dentry '" << dname << "' in "
                                   "dir frag " << dirfrag() << ": "
@@ -2046,20 +2048,6 @@ void CDir::_omap_fetched(bufferlist& hdrbl, map<string, bufferlist>& omap,
   }
 }
 
-void CDir::_go_bad()
-{
-  if (get_version() == 0)
-    set_version(1);
-  state_set(STATE_BADFRAG);
-  // mark complete, !fetching
-  mark_complete();
-  state_clear(STATE_FETCHING);
-  auth_unpin(this);
-
-  // kick waiters
-  finish_waiting(WAIT_COMPLETE, -EIO);
-}
-
 void CDir::go_bad_dentry(snapid_t last, std::string_view dname)
 {
   dout(10) << __func__ << " " << dname << dendl;
@@ -2084,10 +2072,17 @@ void CDir::go_bad(bool complete)
     ceph_abort();  // unreachable, damaged() respawns us
   }
 
-  if (complete)
-    _go_bad();
-  else
-    auth_unpin(this);
+  if (complete) {
+    if (get_version() == 0)
+      set_version(1);
+    
+    state_set(STATE_BADFRAG);
+    mark_complete();
+  }
+
+  state_clear(STATE_FETCHING);
+  auth_unpin(this);
+  finish_waiting(WAIT_COMPLETE, -EIO);
 }
 
 // -----------------------
@@ -2212,7 +2207,7 @@ void CDir::_omap_commit(int op_prio)
       op.priority = op_prio;
 
       // don't create new dirfrag blindly
-      if (!is_new() && !state_test(CDir::STATE_FRAGMENTING))
+      if (!is_new())
        op.stat(NULL, (ceph::real_time*) NULL, NULL);
 
       if (!to_set.empty())
@@ -2230,11 +2225,12 @@ void CDir::_omap_commit(int op_prio)
     }
   };
 
-  if (state_test(CDir::STATE_FRAGMENTING)) {
+  if (state_test(CDir::STATE_FRAGMENTING) && is_new()) {
+    assert(committed_version == 0);
     for (auto p = items.begin(); p != items.end(); ) {
       CDentry *dn = p->second;
       ++p;
-      if (!dn->is_dirty() && dn->get_linkage()->is_null())
+      if (dn->get_linkage()->is_null())
        continue;
       write_one(dn);
     }
@@ -2250,7 +2246,7 @@ void CDir::_omap_commit(int op_prio)
   op.priority = op_prio;
 
   // don't create new dirfrag blindly
-  if (!is_new() && !state_test(CDir::STATE_FRAGMENTING))
+  if (!is_new())
     op.stat(NULL, (ceph::real_time*)NULL, NULL);
 
   /*
@@ -3548,4 +3544,4 @@ bool CDir::should_split_fast() const
 }
 
 MEMPOOL_DEFINE_OBJECT_FACTORY(CDir, co_dir, mds_co);
-MEMPOOL_DEFINE_OBJECT_FACTORY(CDir::scrub_info_t, scrub_info_t, mds_co)
\ No newline at end of file
+MEMPOOL_DEFINE_OBJECT_FACTORY(CDir::scrub_info_t, scrub_info_t, mds_co)
index aa447a88d0085581837fa10722748188d54661e7..e3e7f64c3aaab37a69253adf1e94444a9d9e2cc4 100644 (file)
@@ -421,7 +421,7 @@ public:
 
   // for giving to clients
   void get_dist_spec(std::set<mds_rank_t>& ls, mds_rank_t auth) {
-    if (is_rep()) {
+    if (is_auth()) {
       list_replicas(ls);
       if (!ls.empty()) 
        ls.insert(auth);
@@ -644,13 +644,9 @@ protected:
       bufferlist &bl,
       int pos,
       const std::set<snapid_t> *snaps,
+      double rand_threshold,
       bool *force_dirty);
 
-  /**
-   * Mark this fragment as BADFRAG (common part of go_bad and go_bad_dentry)
-   */
-  void _go_bad();
-
   /**
    * Go bad due to a damaged dentry (register with damagetable and go BADFRAG)
    */
index 551d2bf0b4538be1f43ebb2644278cbd516693e8..50cc0a08eaa65005b6701498fd08c91f895823e5 100644 (file)
@@ -3261,9 +3261,9 @@ void CInode::set_mds_caps_wanted(mempool::mds_co::compact_map<int32_t,int32_t>&
   mds_caps_wanted.swap(m);
   if (old_empty != (bool)mds_caps_wanted.empty()) {
     if (old_empty)
-      adjust_num_caps_wanted(1);
+      adjust_num_caps_notable(1);
     else
-      adjust_num_caps_wanted(-1);
+      adjust_num_caps_notable(-1);
   }
 }
 
@@ -3273,25 +3273,14 @@ void CInode::set_mds_caps_wanted(mds_rank_t mds, int32_t wanted)
   if (wanted) {
     mds_caps_wanted[mds] = wanted;
     if (old_empty)
-      adjust_num_caps_wanted(1);
+      adjust_num_caps_notable(1);
   } else if (!old_empty) {
     mds_caps_wanted.erase(mds);
     if (mds_caps_wanted.empty())
-      adjust_num_caps_wanted(-1);
+      adjust_num_caps_notable(-1);
   }
 }
 
-void CInode::adjust_num_caps_wanted(int d)
-{
-  if (!num_caps_wanted && d > 0)
-    mdcache->open_file_table.add_inode(this);
-  else if (num_caps_wanted > 0 && num_caps_wanted == -d)
-    mdcache->open_file_table.remove_inode(this);
-
-  num_caps_wanted +=d;
-  ceph_assert(num_caps_wanted >= 0);
-}
-
 Capability *CInode::add_client_cap(client_t client, Session *session,
                                   SnapRealm *conrealm, bool new_inode)
 {
@@ -3336,8 +3325,8 @@ void CInode::remove_client_cap(client_t client)
   if (client == loner_cap)
     loner_cap = -1;
 
-  if (cap->wanted())
-    adjust_num_caps_wanted(-1);
+  if (cap->is_wanted_notable())
+    adjust_num_caps_notable(-1);
 
   client_caps.erase(it);
   if (client_caps.empty()) {
@@ -3573,6 +3562,38 @@ bool CInode::issued_caps_need_gather(SimpleLock *lock)
   return false;
 }
 
+void CInode::adjust_num_caps_notable(int d)
+{
+  if (!is_clientwriteable()) {
+    if (!num_caps_notable && d > 0)
+      mdcache->open_file_table.add_inode(this);
+    else if (num_caps_notable > 0 && num_caps_notable == -d)
+      mdcache->open_file_table.remove_inode(this);
+  }
+
+  num_caps_notable +=d;
+  ceph_assert(num_caps_notable >= 0);
+}
+
+void CInode::mark_clientwriteable()
+{
+  if (last != CEPH_NOSNAP)
+    return;
+  if (!state_test(STATE_CLIENTWRITEABLE)) {
+    if (num_caps_notable == 0)
+      mdcache->open_file_table.add_inode(this);
+    state_set(STATE_CLIENTWRITEABLE);
+  }
+}
+
+void CInode::clear_clientwriteable()
+{
+  if (state_test(STATE_CLIENTWRITEABLE)) {
+    if (num_caps_notable == 0)
+      mdcache->open_file_table.remove_inode(this);
+    state_clear(STATE_CLIENTWRITEABLE);
+  }
+}
 
 // =============================================
 
@@ -3690,10 +3711,8 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
 
   // max_size is min of projected, actual
   uint64_t max_size =
-    std::min(oi->client_ranges.count(client) ?
-       oi->client_ranges[client].range.last : 0,
-       pi->client_ranges.count(client) ?
-       pi->client_ranges[client].range.last : 0);
+    std::min(oi->get_client_range(client),
+            pi->get_client_range(client));
 
   // inline data
   version_t inline_version = 0;
@@ -4045,8 +4064,8 @@ void CInode::encode_cap_message(const ref_t<MClientCaps> &m, Capability *cap)
   }
 
   // max_size is min of projected, actual.
-  uint64_t oldms = oi->client_ranges.count(client) ? oi->client_ranges[client].range.last : 0;
-  uint64_t newms = pi->client_ranges.count(client) ? pi->client_ranges[client].range.last : 0;
+  uint64_t oldms = oi->get_client_range(client);
+  uint64_t newms = pi->get_client_range(client);
   m->max_size = std::min(oldms, newms);
 
   i = pauth ? pi:oi;
@@ -5351,7 +5370,7 @@ void CInode::set_ephemeral_rand(bool yes)
   }
 }
 
-void CInode::maybe_ephemeral_rand(bool fresh)
+void CInode::maybe_ephemeral_rand(bool fresh, double threshold)
 {
   if (!mdcache->get_export_ephemeral_random_config()) {
     dout(15) << __func__ << " config false: cannot ephemeral random pin " << *this << dendl;
@@ -5373,7 +5392,13 @@ void CInode::maybe_ephemeral_rand(bool fresh)
     return;
   }
 
-  double threshold = get_ephemeral_rand();
+  /* not precomputed? */
+  if (threshold < 0.0) {
+    threshold = get_ephemeral_rand();
+  }
+  if (threshold <= 0.0) {
+    return;
+  }
   double n = ceph::util::generate_random_number(0.0, 1.0);
 
   dout(15) << __func__ << " rand " << n << " <?= " << threshold
index 22cdc6e7bef32f64bdca73692a63280896b547de..1930c700591afdd3326d335fca9e63427ac8e5d0 100644 (file)
@@ -323,6 +323,8 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
   static const int STATE_DELAYEDEXPORTPIN      = (1<<19);
   static const int STATE_DISTEPHEMERALPIN       = (1<<20);
   static const int STATE_RANDEPHEMERALPIN       = (1<<21);
+  static const int STATE_CLIENTWRITEABLE       = (1<<22);
+
   // orphan inode needs notification of releasing reference
   static const int STATE_ORPHAN =      STATE_NOTIFYREF;
 
@@ -366,7 +368,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
     clear_file_locks();
     ceph_assert(num_projected_xattrs == 0);
     ceph_assert(num_projected_srnodes == 0);
-    ceph_assert(num_caps_wanted == 0);
+    ceph_assert(num_caps_notable == 0);
     ceph_assert(num_subtree_roots == 0);
     ceph_assert(num_exporting_dirs == 0);
     ceph_assert(batch_ops.empty());
@@ -575,6 +577,9 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
     get_subtree_dirfrags(v);
     return v;
   }
+  int get_num_subtree_roots() const {
+    return num_subtree_roots;
+  }
 
   CDir *get_or_open_dirfrag(MDCache *mdcache, frag_t fg);
   CDir *add_dirfrag(CDir *dir);
@@ -815,8 +820,8 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
     }
   }
 
-  int get_num_caps_wanted() const { return num_caps_wanted; }
-  void adjust_num_caps_wanted(int d);
+  int get_num_caps_notable() const { return num_caps_notable; }
+  void adjust_num_caps_notable(int d);
 
   Capability *add_client_cap(client_t client, Session *session,
                             SnapRealm *conrealm=nullptr, bool new_inode=false);
@@ -842,6 +847,11 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
   int get_caps_wanted(int *ploner = 0, int *pother = 0, int shift = 0, int mask = -1) const;
   bool issued_caps_need_gather(SimpleLock *lock);
 
+  // client writeable
+  bool is_clientwriteable() const { return state & STATE_CLIENTWRITEABLE; }
+  void mark_clientwriteable();
+  void clear_clientwriteable();
+
   // -- authority --
   mds_authority_t authority() const override;
 
@@ -938,7 +948,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
 
   double get_ephemeral_rand(bool inherit=true) const;
   void set_ephemeral_rand(bool yes);
-  void maybe_ephemeral_rand(bool fresh=false);
+  void maybe_ephemeral_rand(bool fresh=false, double threshold=-1.0);
   void setxattr_ephemeral_rand(double prob=0.0);
   bool is_ephemeral_rand() const {
     return state_test(STATE_RANDEPHEMERALPIN);
@@ -1117,7 +1127,7 @@ protected:
   mempool_cap_map client_caps; // client -> caps
   mempool::mds_co::compact_map<int32_t, int32_t> mds_caps_wanted;     // [auth] mds -> caps wanted
   int replica_caps_wanted = 0; // [replica] what i've requested from auth
-  int num_caps_wanted = 0;
+  int num_caps_notable = 0;
 
   ceph_lock_state_t *fcntl_locks = nullptr;
   ceph_lock_state_t *flock_locks = nullptr;
index 32f780ee20267ae8086ffc77687ec9b01c52afa4..4c2ccc75d1268809eb7715ace982a601d4da9b7f 100644 (file)
@@ -212,15 +212,12 @@ void Capability::maybe_clear_notable()
 void Capability::set_wanted(int w) {
   CInode *in = get_inode();
   if (in) {
-    if (!_wanted && w) {
-      in->adjust_num_caps_wanted(1);
-    } else if (_wanted && !w) {
-      in->adjust_num_caps_wanted(-1);
-    }
     if (!is_wanted_notable(_wanted) && is_wanted_notable(w)) {
+      in->adjust_num_caps_notable(1);
       if (!is_notable())
        mark_notable();
     } else if (is_wanted_notable(_wanted) && !is_wanted_notable(w)) {
+      in->adjust_num_caps_notable(-1);
       maybe_clear_notable();
     }
   }
index 218eeb40fce0dfad03289b88220700eb12b844fd..b136b08c1f35908ffb41b20d083453793a6b8020 100644 (file)
@@ -253,6 +253,9 @@ public:
   static bool is_wanted_notable(int wanted) {
     return wanted & (CEPH_CAP_ANY_WR|CEPH_CAP_FILE_WR|CEPH_CAP_FILE_RD);
   }
+  bool is_wanted_notable() const {
+    return is_wanted_notable(wanted());
+  }
   bool is_notable() const { return state & STATE_NOTABLE; }
 
   bool is_stale() const;
index b95e5c840c0045e98ed826c3492bcf59a69a0bfb..8f4cffa43a009840767dc35475f6cff8f62d7805 100644 (file)
@@ -497,7 +497,7 @@ void FSMap::decode(bufferlist::const_iterator& p)
   // MDSMonitor to store an FSMap instead of an MDSMap was
   // 5, so anything older than 6 is decoded as an MDSMap,
   // and anything newer is decoded as an FSMap.
-  DECODE_START_LEGACY_COMPAT_LEN_16(8, 4, 4, p);
+  DECODE_START_LEGACY_COMPAT_LEN_16(7, 4, 4, p);
   if (struct_v < 6) {
     // Because the mon used to store an MDSMap where we now
     // store an FSMap, FSMap knows how to decode the legacy
index 9a249555da4e7e57ebbd45a45c1882548497c430..2a587659afdef348ebc7706e899ceafc2136b4c6 100644 (file)
@@ -2687,9 +2687,7 @@ uint64_t Locker::calc_new_max_size(CInode::mempool_inode *pi, uint64_t size)
   return round_up_to(new_max, pi->get_layout_size_increment());
 }
 
-void Locker::calc_new_client_ranges(CInode *in, uint64_t size, bool update,
-                                   CInode::mempool_inode::client_range_map *new_ranges,
-                                   bool *max_increased)
+bool Locker::check_client_ranges(CInode *in, uint64_t size)
 {
   auto latest = in->get_projected_inode();
   uint64_t ms;
@@ -2700,30 +2698,78 @@ void Locker::calc_new_client_ranges(CInode *in, uint64_t size, bool update,
     ms = 0;
   }
 
+  auto it = latest->client_ranges.begin();
+  for (auto &p : in->client_caps) {
+    if ((p.second.issued() | p.second.wanted()) & CEPH_CAP_ANY_FILE_WR) {
+      if (it == latest->client_ranges.end())
+       return true;
+      if (it->first != p.first)
+       return true;
+      if (ms > it->second.range.last)
+       return true;
+      ++it;
+    }
+  }
+  return it != latest->client_ranges.end();
+}
+
+bool Locker::calc_new_client_ranges(CInode *in, uint64_t size, bool *max_increased)
+{
+  auto pi = in->get_projected_inode();
+  uint64_t ms;
+  if (pi->has_layout()) {
+    ms = calc_new_max_size(pi, size);
+  } else {
+    // Layout-less directories like ~mds0/, have zero size
+    ms = 0;
+  }
+
+  bool updated = false;
+
   // increase ranges as appropriate.
   // shrink to 0 if no WR|BUFFER caps issued.
+  auto it = pi->client_ranges.begin();
   for (auto &p : in->client_caps) {
     if ((p.second.issued() | p.second.wanted()) & CEPH_CAP_ANY_FILE_WR) {
-      client_writeable_range_t& nr = (*new_ranges)[p.first];
-      nr.range.first = 0;
-      if (latest->client_ranges.count(p.first)) {
-       client_writeable_range_t& oldr = latest->client_ranges[p.first];
-       if (ms > oldr.range.last)
-         *max_increased = true;
-       nr.range.last = std::max(ms, oldr.range.last);
-       nr.follows = oldr.follows;
+      while (it != pi->client_ranges.end() && it->first < p.first) {
+       it = pi->client_ranges.erase(it);
+       updated = true;
+      }
+
+      if (it != pi->client_ranges.end() && it->first == p.first) {
+       if (ms > it->second.range.last) {
+         it->second.range.last = ms;
+         updated = true;
+         if (max_increased)
+           *max_increased = true;
+       }
       } else {
-       *max_increased = true;
-       nr.range.last = ms;
-       nr.follows = in->first - 1;
+       it = pi->client_ranges.emplace_hint(it, std::piecewise_construct,
+                                           std::forward_as_tuple(p.first),
+                                           std::forward_as_tuple());
+       it->second.range.last = ms;
+       it->second.follows = in->first - 1;
+       updated = true;
+       if (max_increased)
+         *max_increased = true;
       }
-      if (update)
-       p.second.mark_clientwriteable();
+      p.second.mark_clientwriteable();
+      ++it;
     } else {
-      if (update)
-       p.second.clear_clientwriteable();
+      p.second.clear_clientwriteable();
     }
   }
+  while (it != pi->client_ranges.end()) {
+    it = pi->client_ranges.erase(it);
+    updated = true;
+  }
+  if (updated) {
+    if (pi->client_ranges.empty())
+      in->clear_clientwriteable();
+    else
+      in->mark_clientwriteable();
+  }
+  return updated;
 }
 
 bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
@@ -2734,11 +2780,8 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
   ceph_assert(in->is_file());
 
   CInode::mempool_inode *latest = in->get_projected_inode();
-  CInode::mempool_inode::client_range_map new_ranges;
   uint64_t size = latest->size;
   bool update_size = new_size > 0;
-  bool update_max = false;
-  bool max_increased = false;
 
   if (update_size) {
     new_size = size = std::max(size, new_size);
@@ -2747,9 +2790,21 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
       update_size = false;
   }
 
-  int can_update = 1;
+  bool new_ranges = check_client_ranges(in, std::max(new_max_size, size));
+  if (!update_size && !new_ranges) {
+    dout(20) << "check_inode_max_size no-op on " << *in << dendl;
+    return false;
+  }
+
+  dout(10) << "check_inode_max_size new_ranges " << new_ranges
+          << " update_size " << update_size
+          << " on " << *in << dendl;
+
   if (in->is_frozen()) {
-    can_update = -1;
+    dout(10) << "check_inode_max_size frozen, waiting on " << *in << dendl;
+    in->add_waiter(CInode::WAIT_UNFREEZE,
+                  new C_MDL_CheckMaxSize(this, in, new_max_size, new_size, new_mtime));
+    return false;
   } else if (!force_wrlock && !in->filelock.can_wrlock(in->get_loner())) {
     // lock?
     if (in->filelock.is_stable()) {
@@ -2758,35 +2813,12 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
       else
        simple_lock(&in->filelock);
     }
-    if (!in->filelock.can_wrlock(in->get_loner()))
-      can_update = -2;
-  }
-
-  calc_new_client_ranges(in, std::max(new_max_size, size), can_update > 0,
-                        &new_ranges, &max_increased);
-
-  if (max_increased || latest->client_ranges != new_ranges)
-    update_max = true;
-
-  if (!update_size && !update_max) {
-    dout(20) << "check_inode_max_size no-op on " << *in << dendl;
-    return false;
-  }
-
-  dout(10) << "check_inode_max_size new_ranges " << new_ranges
-          << " update_size " << update_size
-          << " on " << *in << dendl;
-
-  if (can_update < 0) {
-    auto cms = new C_MDL_CheckMaxSize(this, in, new_max_size, new_size, new_mtime);
-    if (can_update == -1) {
-      dout(10) << "check_inode_max_size frozen, waiting on " << *in << dendl;
-      in->add_waiter(CInode::WAIT_UNFREEZE, cms);
-    } else {
-      in->filelock.add_waiter(SimpleLock::WAIT_STABLE, cms);
+    if (!in->filelock.can_wrlock(in->get_loner())) {
       dout(10) << "check_inode_max_size can't wrlock, waiting on " << *in << dendl;
+      in->filelock.add_waiter(SimpleLock::WAIT_STABLE,
+                             new C_MDL_CheckMaxSize(this, in, new_max_size, new_size, new_mtime));
+      return false;
     }
-    return false;
   }
 
   MutationRef mut(new MutationImpl());
@@ -2795,9 +2827,12 @@ bool Locker::check_inode_max_size(CInode *in, bool force_wrlock,
   auto &pi = in->project_inode();
   pi.inode.version = in->pre_dirty();
 
-  if (update_max) {
-    dout(10) << "check_inode_max_size client_ranges " << pi.inode.client_ranges << " -> " << new_ranges << dendl;
-    pi.inode.client_ranges = new_ranges;
+  bool max_increased = false;
+  if (new_ranges &&
+      calc_new_client_ranges(in, std::max(new_max_size, size), &max_increased)) {
+    dout(10) << "check_inode_max_size client_ranges "
+            << in->get_previous_projected_inode()->client_ranges
+            <<  " -> " << pi.inode.client_ranges << dendl;
   }
 
   if (update_size) {
@@ -3696,7 +3731,7 @@ bool Locker::_do_cap_update(CInode *in, Capability *cap,
   // increase or zero max_size?
   uint64_t size = m->get_size();
   bool change_max = false;
-  uint64_t old_max = latest->client_ranges.count(client) ? latest->client_ranges[client].range.last : 0;
+  uint64_t old_max = latest->get_client_range(client);
   uint64_t new_max = old_max;
   
   if (in->is_file()) {
@@ -3813,10 +3848,13 @@ bool Locker::_do_cap_update(CInode *in, Capability *cap,
       cr.range.first = 0;
       cr.range.last = new_max;
       cr.follows = in->first - 1;
+      in->mark_clientwriteable();
       if (cap)
        cap->mark_clientwriteable();
     } else {
       pi.inode.client_ranges.erase(client);
+      if (pi.inode.client_ranges.empty())
+       in->clear_clientwriteable();
       if (cap)
        cap->clear_clientwriteable();
     }
@@ -5375,6 +5413,9 @@ void Locker::file_eval(ScatterLock *lock, bool *need_issue)
            << " on " << *lock->get_parent() << dendl;
     simple_sync(lock, need_issue);
   }
+  else if (in->state_test(CInode::STATE_NEEDSRECOVER)) {
+    mds->mdcache->queue_file_recover(in);
+  }
 }
 
 
index a3d3ec6a6ec5d1cd6d4c52168e5ab20f26c8ff9f..bcd6e74592b3a67aa611bd4a48393995bfbddd27 100644 (file)
@@ -174,9 +174,9 @@ public:
 
   void request_inode_file_caps(CInode *in);
 
-  void calc_new_client_ranges(CInode *in, uint64_t size, bool update,
-                             CInode::mempool_inode::client_range_map* new_ranges,
-                             bool *max_increased);
+  bool check_client_ranges(CInode *in, uint64_t size);
+  bool calc_new_client_ranges(CInode *in, uint64_t size,
+                             bool *max_increased=nullptr);
   bool check_inode_max_size(CInode *in, bool force_wrlock=false,
                             uint64_t newmax=0, uint64_t newsize=0,
                            utime_t mtime=utime_t());
index 88eece19f00bb485c42581b7cc838641626986bd..77266416f2021a03d9e0136c0d8469d7b92e6e35 100644 (file)
@@ -151,7 +151,6 @@ MDCache::MDCache(MDSRank *m, PurgeQueue &purge_queue_) :
   cache_memory_limit = g_conf().get_val<Option::size_t>("mds_cache_memory_limit");
   cache_reservation = g_conf().get_val<double>("mds_cache_reservation");
   cache_health_threshold = g_conf().get_val<double>("mds_health_cache_threshold");
-  forward_all_requests_to_auth = g_conf().get_val<bool>("mds_forward_all_requests_to_auth");
 
   export_ephemeral_distributed_config =  g_conf().get_val<bool>("mds_export_ephemeral_distributed");
   export_ephemeral_random_config =  g_conf().get_val<bool>("mds_export_ephemeral_random");
@@ -254,9 +253,6 @@ void MDCache::handle_conf_change(const std::set<std::string>& changed, const MDS
   if (changed.count("mds_cache_trim_decay_rate")) {
     trim_counter = DecayCounter(g_conf().get_val<double>("mds_cache_trim_decay_rate"));
   }
-  if (changed.count("mds_forward_all_requests_to_auth")){
-    forward_all_requests_to_auth = g_conf().get_val<bool>("mds_forward_all_requests_to_auth");
-  }
 
   migrator->handle_conf_change(changed, mdsmap);
   mds->balancer->handle_conf_change(changed, mdsmap);
@@ -353,6 +349,8 @@ void MDCache::remove_inode(CInode *o)
 
   o->clear_scatter_dirty();
 
+  o->clear_clientwriteable();
+
   o->item_open_file.remove_myself();
 
   if (o->state_test(CInode::STATE_QUEUEDEXPORTPIN))
@@ -3587,7 +3585,7 @@ MDSlaveUpdate* MDCache::get_uncommitted_slave(metareqid_t reqid, mds_rank_t mast
 }
 
 void MDCache::finish_rollback(metareqid_t reqid, MDRequestRef& mdr) {
-  auto p = resolve_need_rollback.find(mdr->reqid);
+  auto p = resolve_need_rollback.find(reqid);
   ceph_assert(p != resolve_need_rollback.end());
   if (mds->is_resolve()) {
     finish_uncommitted_slave(reqid, false);
@@ -5430,19 +5428,43 @@ bool MDCache::process_imported_caps()
     return true;
   }
 
-  for (auto p = cap_imports.begin(); p != cap_imports.end(); ++p) {
-    CInode *in = get_inode(p->first);
+  for (auto& p : cap_imports) {
+    CInode *in = get_inode(p.first);
     if (in) {
       ceph_assert(in->is_auth());
-      cap_imports_missing.erase(p->first);
+      cap_imports_missing.erase(p.first);
       continue;
     }
-    if (cap_imports_missing.count(p->first) > 0)
+    if (cap_imports_missing.count(p.first) > 0)
       continue;
 
+    uint64_t parent_ino = 0;
+    std::string_view d_name;
+    for (auto& q : p.second) {
+      for (auto& r : q.second) {
+       auto &icr = r.second;
+       if (icr.capinfo.pathbase &&
+           icr.path.length() > 0 &&
+           icr.path.find('/') == string::npos) {
+         parent_ino = icr.capinfo.pathbase;
+         d_name = icr.path;
+         break;
+       }
+      }
+      if (parent_ino)
+       break;
+    }
+
+    dout(10) << "  opening missing ino " << p.first << dendl;
     cap_imports_num_opening++;
-    dout(10) << "  opening missing ino " << p->first << dendl;
-    open_ino(p->first, (int64_t)-1, new C_MDC_RejoinOpenInoFinish(this, p->first), false);
+    auto fin = new C_MDC_RejoinOpenInoFinish(this, p.first);
+    if (parent_ino) {
+      vector<inode_backpointer_t> ancestors;
+      ancestors.push_back(inode_backpointer_t(parent_ino, string{d_name}, 0));
+      open_ino(p.first, (int64_t)-1, fin, false, false, &ancestors);
+    } else {
+      open_ino(p.first, (int64_t)-1, fin, false);
+    }
     if (!(cap_imports_num_opening % 1000))
       mds->heartbeat_reset();
   }
@@ -6378,16 +6400,18 @@ void MDCache::identify_files_to_recover()
     }
     
     bool recover = false;
-    for (map<client_t,client_writeable_range_t>::iterator p = in->inode.client_ranges.begin();
-        p != in->inode.client_ranges.end();
-        ++p) {
-      Capability *cap = in->get_client_cap(p->first);
-      if (cap) {
-       cap->mark_clientwriteable();
-      } else {
-       dout(10) << " client." << p->first << " has range " << p->second << " but no cap on " << *in << dendl;
-       recover = true;
-       break;
+    const auto& client_ranges = in->get_projected_inode()->client_ranges;
+    if (!client_ranges.empty()) {
+      in->mark_clientwriteable();
+      for (auto& p : client_ranges) {
+       Capability *cap = in->get_client_cap(p.first);
+       if (cap) {
+         cap->mark_clientwriteable();
+       } else {
+         dout(10) << " client." << p.first << " has range " << p.second << " but no cap on " << *in << dendl;
+         recover = true;
+         break;
+       }
       }
     }
 
@@ -6819,9 +6843,9 @@ std::pair<bool, uint64_t> MDCache::trim(uint64_t count)
       }
     } else if (!diri->is_auth() && dir->get_num_ref() <= 1) {
       // only subtree pin
-      auto&& ls = diri->get_subtree_dirfrags();
-      if (diri->get_num_ref() > (int)ls.size()) // only pinned by subtrees
+      if (diri->get_num_ref() > diri->get_num_subtree_roots()) {
         continue;
+      }
 
       // don't trim subtree root if its auth MDS is recovering.
       // This simplify the cache rejoin code.
@@ -8584,8 +8608,7 @@ int MDCache::path_traverse(MDRequestRef& mdr, MDSContextFactory& cf,
       // dirfrag/dentry is not mine.
       mds_authority_t dauth = curdir->authority();
 
-      if (!forward_all_requests_to_auth &&
-         forward &&
+      if (forward &&
          mdr && mdr->client_request &&
          (int)depth < mdr->client_request->get_num_fwd()){
        dout(7) << "traverse: snap " << snapid << " and depth " << depth
@@ -9287,7 +9310,9 @@ void MDCache::kick_open_ino_peers(mds_rank_t who)
 }
 
 void MDCache::open_ino(inodeno_t ino, int64_t pool, MDSContext* fin,
-                      bool want_replica, bool want_xlocked)
+                      bool want_replica, bool want_xlocked,
+                      vector<inode_backpointer_t> *ancestors_hint,
+                      mds_rank_t auth_hint)
 {
   dout(10) << "open_ino " << ino << " pool " << pool << " want_replica "
           << want_replica << dendl;
@@ -9320,8 +9345,10 @@ void MDCache::open_ino(inodeno_t ino, int64_t pool, MDSContext* fin,
     info.tid = ++open_ino_last_tid;
     info.pool = pool >= 0 ? pool : default_file_layout.pool_id;
     info.waiters.push_back(fin);
-    if (mds->is_rejoin() &&
-       open_file_table.get_ancestors(ino, info.ancestors, info.auth_hint)) {
+    if (auth_hint != MDS_RANK_NONE)
+      info.auth_hint = auth_hint;
+    if (ancestors_hint) {
+      info.ancestors = std::move(*ancestors_hint);
       info.fetch_backtrace = false;
       info.checking = mds->get_nodeid();
       _open_ino_traverse_dir(ino, info, 0);
@@ -9625,41 +9652,14 @@ void MDCache::request_finish(MDRequestRef& mdr)
 
 void MDCache::request_forward(MDRequestRef& mdr, mds_rank_t who, int port)
 {
-  mdr->mark_event("forwarding request");
+  CachedStackStringStream css;
+  *css << "forwarding request to mds." << who;
+  mdr->mark_event(css->strv());
   if (mdr->client_request && mdr->client_request->get_source().is_client()) {
     dout(7) << "request_forward " << *mdr << " to mds." << who << " req "
             << *mdr->client_request << dendl;
-    if (mdr->is_batch_head) {
-      int mask = mdr->client_request->head.args.getattr.mask;
-
-      switch (mdr->client_request->get_op()) {
-       case CEPH_MDS_OP_GETATTR:
-         {
-           CInode* in = mdr->in[0];
-           if (in) {
-             auto it = in->batch_ops.find(mask);
-             if (it != in->batch_ops.end()) {
-                it->second->forward(who);
-                in->batch_ops.erase(it);
-             }
-           }
-           break;
-         }
-       case CEPH_MDS_OP_LOOKUP:
-         {
-           if (mdr->dn[0].size()) {
-             CDentry* dn = mdr->dn[0].back();
-             auto it = dn->batch_ops.find(mask);
-             if (it != dn->batch_ops.end()) {
-               it->second->forward(who);
-               dn->batch_ops.erase(it);
-             }
-           }
-           break;
-         }
-       default:
-         ceph_abort();
-      }
+    if (mdr->is_batch_head()) {
+      mdr->release_batch_op()->forward(who);
     } else {
       mds->forward_message_mds(mdr->release_client_request(), who);
     }
@@ -11995,6 +11995,8 @@ void MDCache::_fragment_logged(MDRequestRef& mdr)
   for (const auto& dir : info.resultfrags) {
     dout(10) << " storing result frag " << *dir << dendl;
 
+    dir->mark_new(mdr->ls);
+
     // freeze and store them too
     dir->auth_pin(this);
     dir->state_set(CDir::STATE_FRAGMENTING);
@@ -12303,10 +12305,13 @@ void MDCache::rollback_uncommitted_fragment(dirfrag_t basedirfrag, frag_vec_t&&
   }
 }
 
-void MDCache::wait_for_uncommitted_fragments(MDSGather *gather)
+void MDCache::wait_for_uncommitted_fragments(MDSContext* finisher)
 {
-  for (auto& p : uncommitted_fragments)
-    p.second.waiters.push_back(gather->new_sub());
+  MDSGatherBuilder gather(g_ceph_context, finisher);
+  for (auto& p : uncommitted_fragments) {
+    p.second.waiters.push_back(gather.new_sub());
+  }
+  gather.activate();
 }
 
 void MDCache::rollback_uncommitted_fragments()
index 38fac4235db4dac098f3288933b43928d7be46cb..2d68d84d41b802a5f503c7fb48a9a09876186aa3 100644 (file)
@@ -193,9 +193,6 @@ class MDCache {
   explicit MDCache(MDSRank *m, PurgeQueue &purge_queue_);
   ~MDCache();
 
-  bool forward_all_reqs_to_auth() const { 
-    return forward_all_requests_to_auth;
-  }
   uint64_t cache_limit_memory(void) {
     return cache_memory_limit;
   }
@@ -840,7 +837,9 @@ class MDCache {
 
   void kick_open_ino_peers(mds_rank_t who);
   void open_ino(inodeno_t ino, int64_t pool, MDSContext *fin,
-               bool want_replica=true, bool want_xlocked=false);
+               bool want_replica=true, bool want_xlocked=false,
+               vector<inode_backpointer_t> *ancestors_hint=nullptr,
+               mds_rank_t auth_hint=MDS_RANK_NONE);
 
   void find_ino_peers(inodeno_t ino, MDSContext *c,
                      mds_rank_t hint=MDS_RANK_NONE, bool path_locked=false);
@@ -887,7 +886,7 @@ class MDCache {
   bool is_any_uncommitted_fragment() const {
     return !uncommitted_fragments.empty();
   }
-  void wait_for_uncommitted_fragments(MDSGather *gather);
+  void wait_for_uncommitted_fragments(MDSContext* finisher);
   void rollback_uncommitted_fragments();
 
   void split_dir(CDir *dir, int byn);
@@ -1312,7 +1311,6 @@ class MDCache {
   uint64_t cache_memory_limit;
   double cache_reservation;
   double cache_health_threshold;
-  bool forward_all_requests_to_auth;
   std::array<CInode *, NUM_STRAY> strays{}; // my stray dir
 
   bool export_ephemeral_distributed_config;
index 1115d2b64e571516a43676941bbc823ff640b5cc..27bd88cb7bff036f6c4510b0441f600b0affce2d 100644 (file)
@@ -563,7 +563,9 @@ void MDSMap::mds_info_t::decode(bufferlist::const_iterator& bl)
   decode(name, bl);
   decode(rank, bl);
   decode(inc, bl);
-  decode((int32_t&)(state), bl);
+  int32_t raw_state;
+  decode(raw_state, bl);
+  state = (MDSMap::DaemonState)raw_state;
   decode(state_seq, bl);
   decode(addrs, bl);
   decode(laggy_since, bl);
index e7ebee467e7acf7534b22dd696619c5d1b4c521a..5f7741de3aac937b53d38b4e0ace4979f308e10c 100644 (file)
@@ -148,26 +148,25 @@ private:
     dout(20) << __func__ << dendl;
 
     // Attach contexts to wait for all expiring segments to expire
-    MDSGatherBuilder *expiry_gather = new MDSGatherBuilder(g_ceph_context);
+    MDSGatherBuilder expiry_gather(g_ceph_context);
 
     const auto &expiring_segments = mdlog->get_expiring_segments();
     for (auto p : expiring_segments) {
-      p->wait_for_expiry(expiry_gather->new_sub());
+      p->wait_for_expiry(expiry_gather.new_sub());
     }
-    dout(5) << __func__ << ": waiting for " << expiry_gather->num_subs_created()
+    dout(5) << __func__ << ": waiting for " << expiry_gather.num_subs_created()
             << " segments to expire" << dendl;
 
-    if (!expiry_gather->has_subs()) {
+    if (!expiry_gather.has_subs()) {
       trim_segments();
-      delete expiry_gather;
       return;
     }
 
     Context *ctx = new LambdaContext([this](int r) {
         handle_expire_segments(r);
       });
-    expiry_gather->set_finisher(new MDSInternalContextWrapper(mds, ctx));
-    expiry_gather->activate();
+    expiry_gather.set_finisher(new MDSInternalContextWrapper(mds, ctx));
+    expiry_gather.activate();
   }
 
   void handle_expire_segments(int r) {
@@ -328,9 +327,9 @@ private:
     auto now = mono_clock::now();
     auto duration = std::chrono::duration<double>(now-recall_start).count();
 
-    MDSGatherBuilder *gather = new MDSGatherBuilder(g_ceph_context);
+    MDSGatherBuilder gather(g_ceph_context);
     auto flags = Server::RecallFlags::STEADY|Server::RecallFlags::TRIM;
-    auto [throttled, count] = server->recall_client_state(gather, flags);
+    auto [throttled, count] = server->recall_client_state(&gather, flags);
     dout(10) << __func__
              << (throttled ? " (throttled)" : "")
              << " recalled " << count << " caps" << dendl;
@@ -342,17 +341,16 @@ private:
           recall_client_state();
       }));
       ctx->start_timer();
-      gather->set_finisher(new MDSInternalContextWrapper(mds, ctx));
-      gather->activate();
+      gather.set_finisher(new MDSInternalContextWrapper(mds, ctx));
+      gather.activate();
       mdlog->flush(); /* use down-time to incrementally flush log */
       do_trim(); /* use down-time to incrementally trim cache */
     } else {
-      if (!gather->has_subs()) {
-        delete gather;
+      if (!gather.has_subs()) {
         return handle_recall_client_state(0);
       } else if (recall_timeout > 0 && duration > recall_timeout) {
-        gather->set_finisher(new C_MDSInternalNoop);
-        gather->activate();
+        gather.set_finisher(new C_MDSInternalNoop);
+        gather.activate();
         return handle_recall_client_state(-ETIMEDOUT);
       } else {
         uint64_t remaining = (recall_timeout == 0 ? 0 : recall_timeout-duration);
@@ -362,8 +360,8 @@ private:
             }));
 
         ctx->start_timer();
-        gather->set_finisher(new MDSInternalContextWrapper(mds, ctx));
-        gather->activate();
+        gather.set_finisher(new MDSInternalContextWrapper(mds, ctx));
+        gather.activate();
       }
     }
   }
@@ -487,7 +485,7 @@ MDSRank::MDSRank(
     Context *suicide_hook_) :
     cct(msgr->cct), mds_lock(mds_lock_), clog(clog_),
     timer(timer_), mdsmap(mdsmap_),
-    objecter(new Objecter(g_ceph_context, msgr, monc_, nullptr, 0, 0)),
+    objecter(new Objecter(g_ceph_context, msgr, monc_, nullptr)),
     damage_table(whoami_), sessionmap(this),
     op_tracker(g_ceph_context, g_conf()->mds_enable_op_tracker,
                g_conf()->osd_num_op_tracker_shard),
@@ -1690,8 +1688,6 @@ void MDSRank::replay_start()
   if (is_standby_replay())
     standby_replaying = true;
 
-  calc_recovery_set();
-
   // Check if we need to wait for a newer OSD map before starting
   Context *fin = new C_IO_Wrapper(this, new C_MDS_BootStart(this, MDS_BOOT_INITIAL));
   bool const ready = objecter->wait_for_map(
@@ -1860,6 +1856,8 @@ void MDSRank::resolve_start()
 
   reopen_log();
 
+  calc_recovery_set();
+
   mdcache->resolve_start(new C_MDS_VoidFn(this, &MDSRank::resolve_done));
   finish_contexts(g_ceph_context, waiting_for_resolve);
 }
@@ -1925,9 +1923,7 @@ void MDSRank::rejoin_done()
 
   if (mdcache->is_any_uncommitted_fragment()) {
     dout(1) << " waiting for uncommitted fragments" << dendl;
-    MDSGatherBuilder gather(g_ceph_context, new C_MDS_VoidFn(this, &MDSRank::rejoin_done));
-    mdcache->wait_for_uncommitted_fragments(gather.get());
-    gather.activate();
+    mdcache->wait_for_uncommitted_fragments(new C_MDS_VoidFn(this, &MDSRank::rejoin_done));
     return;
   }
 
@@ -3577,7 +3573,6 @@ const char** MDSRankDispatcher::get_tracked_conf_keys() const
     "mds_recall_warning_decay_rate",
     "mds_request_load_average_decay_rate",
     "mds_session_cache_liveness_decay_rate",
-    "mds_replay_unsafe_with_closed_session",
     NULL
   };
   return KEYS;
@@ -3628,7 +3623,10 @@ void MDSRank::get_task_status(std::map<std::string, std::string> *status) {
 
   // scrub summary for now..
   std::string_view scrub_summary = scrubstack->scrub_summary();
-  status->emplace(SCRUB_STATUS_KEY, std::move(scrub_summary));
+  if (!ScrubStack::is_idle(scrub_summary)) {
+    send_status = true;
+    status->emplace(SCRUB_STATUS_KEY, std::move(scrub_summary));
+  }
 }
 
 void MDSRank::schedule_update_timer_task() {
@@ -3644,13 +3642,17 @@ void MDSRank::send_task_status() {
   std::map<std::string, std::string> status;
   get_task_status(&status);
 
-  if (!status.empty()) {
-    dout(20) << __func__ << ": updating " << status.size() << " status keys" << dendl;
+  if (send_status) {
+    if (status.empty()) {
+      send_status = false;
+    }
 
+    dout(20) << __func__ << ": updating " << status.size() << " status keys" << dendl;
     int r = mgrc->service_daemon_update_task_status(std::move(status));
     if (r < 0) {
       derr << ": failed to update service daemon status: " << cpp_strerror(r) << dendl;
     }
+
   }
 
   schedule_update_timer_task();
index c0605be626a0b5c15ac345ca89f01c9a702ec309..b15ebbc868d5939818260c8e3997c41f3fff65d2 100644 (file)
@@ -572,6 +572,8 @@ class MDSRank {
 
     bool standby_replaying = false;  // true if current replay pass is in standby-replay mode
 private:
+    bool send_status = true;
+
     // "task" string that gets displayed in ceph status
     inline static const std::string SCRUB_STATUS_KEY = "scrub status";
 
index 61ffabde21e2b10aa631a975b33634e37e54a32e..875e6baf38239bc7a89240df8d255670f0c4eec1 100644 (file)
@@ -1726,6 +1726,8 @@ void Migrator::finish_export_inode(CInode *in, mds_rank_t peer,
 
   in->clear_dirty_parent();
 
+  in->clear_clientwriteable();
+
   in->clear_file_locks();
 
   // waiters
@@ -2868,6 +2870,9 @@ void Migrator::import_reverse(CDir *dir)
 
        in->clear_dirty_parent();
 
+       in->clear_clientwriteable();
+       in->state_clear(CInode::STATE_NEEDSRECOVER);
+
        in->authlock.clear_gather();
        in->linklock.clear_gather();
        in->dirfragtreelock.clear_gather();
@@ -2906,6 +2911,8 @@ void Migrator::import_reverse(CDir *dir)
        }
        if (cap->is_importing())
          in->remove_client_cap(q->first);
+       else
+         cap->clear_clientwriteable();
       }
       in->put(CInode::PIN_IMPORTINGCAPS);
     }
@@ -3224,6 +3231,9 @@ void Migrator::decode_import_inode(CDentry *dn, bufferlist::const_iterator& blp,
 
   if (in->inode.is_dirty_rstat())
     in->mark_dirty_rstat();
+
+  if (!in->get_inode().client_ranges.empty())
+    in->mark_clientwriteable();
   
   // clear if dirtyscattered, since we're going to journal this
   //  but not until we _actually_ finish the import...
@@ -3278,6 +3288,10 @@ void Migrator::finish_import_inode_caps(CInode *in, mds_rank_t peer, bool auth_c
                                        const map<client_t,Capability::Export> &export_map,
                                        map<client_t,Capability::Import> &import_map)
 {
+  const auto& client_ranges = in->get_projected_inode()->client_ranges;
+  auto r = client_ranges.cbegin();
+  bool needs_recover = false;
+
   for (auto& it : export_map) {
     dout(10) << "for client." << it.first << " on " << *in << dendl;
 
@@ -3297,6 +3311,17 @@ void Migrator::finish_import_inode_caps(CInode *in, mds_rank_t peer, bool auth_c
        cap->mark_importing();
     }
 
+    if (auth_cap) {
+      while (r != client_ranges.cend() && r->first < it.first) {
+       needs_recover = true;
+       ++r;
+      }
+      if (r != client_ranges.cend() && r->first == it.first) {
+       cap->mark_clientwriteable();
+       ++r;
+      }
+    }
+
     // Always ask exporter mds to send cap export messages for auth caps.
     // For non-auth caps, ask exporter mds to send cap export messages to
     // clients who haven't opened sessions. The cap export messages will
@@ -3316,6 +3341,13 @@ void Migrator::finish_import_inode_caps(CInode *in, mds_rank_t peer, bool auth_c
     }
   }
 
+  if (auth_cap) {
+    if (r != client_ranges.cend())
+      needs_recover = true;
+    if (needs_recover)
+      in->state_set(CInode::STATE_NEEDSRECOVER);
+  }
+
   if (peer >= 0) {
     in->replica_caps_wanted = 0;
     in->put(CInode::PIN_IMPORTINGCAPS);
index d9f3f7cadcc60b049014a2096d964b0027d5f56f..10b211ecabe6ff07e6ec0f36511d2a623106a92f 100644 (file)
@@ -418,12 +418,31 @@ bool MDRequestImpl::is_queued_for_replay() const
   return client_request ? client_request->is_queued_for_replay() : false;
 }
 
-bool MDRequestImpl::is_batch_op()
+bool MDRequestImpl::can_batch()
 {
-  return (client_request->get_op() == CEPH_MDS_OP_LOOKUP &&
-      client_request->get_filepath().depth() == 1) ||
-    (client_request->get_op() == CEPH_MDS_OP_GETATTR &&
-     client_request->get_filepath().depth() == 0);
+  if (num_auth_pins || num_remote_auth_pins || lock_cache || !locks.empty())
+    return false;
+
+  auto op = client_request->get_op();
+  auto& path = client_request->get_filepath();
+  if (op == CEPH_MDS_OP_GETATTR) {
+    if (path.depth() == 0)
+      return true;
+  } else if (op == CEPH_MDS_OP_LOOKUP) {
+    if (path.depth() == 1 && !path.is_last_snap())
+      return true;
+  }
+
+  return false;
+}
+
+std::unique_ptr<BatchOp> MDRequestImpl::release_batch_op()
+{
+  int mask = client_request->head.args.getattr.mask;
+  auto it = batch_op_map->find(mask);
+  std::unique_ptr<BatchOp> bop = std::move(it->second);
+  batch_op_map->erase(it);
+  return bop;
 }
 
 int MDRequestImpl::compare_paths()
@@ -444,6 +463,7 @@ cref_t<MClientRequest> MDRequestImpl::release_client_request()
   msg_lock.lock();
   cref_t<MClientRequest> req;
   req.swap(client_request);
+  client_request = req;
   msg_lock.unlock();
   return req;
 }
index 8855d0af6b4056f74c80b4ad6a94a40a4a432f1b..4b2ea17114a97085ccdbd65158bbc2a264189060 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "SimpleLock.h"
 #include "Capability.h"
+#include "BatchOp.h"
 
 #include "common/TrackedOp.h"
 #include "messages/MClientRequest.h"
@@ -381,9 +382,14 @@ struct MDRequestImpl : public MutationImpl {
   void set_filepath(const filepath& fp);
   void set_filepath2(const filepath& fp);
   bool is_queued_for_replay() const;
-  bool is_batch_op();
   int compare_paths();
 
+  bool can_batch();
+  bool is_batch_head() {
+    return batch_op_map != nullptr;
+  }
+  std::unique_ptr<BatchOp> release_batch_op();
+
   void print(ostream &out) const override;
   void dump(Formatter *f) const override;
 
@@ -435,12 +441,11 @@ struct MDRequestImpl : public MutationImpl {
   // indicates how may retries of request have been made
   int retry = 0;
 
-  bool is_batch_head = false;
+  std::map<int, std::unique_ptr<BatchOp> > *batch_op_map = nullptr;
 
   // indicator for vxattr osdmap update
   bool waited_for_osdmap = false;
 
-  std::vector<Ref> batch_reqs;
 protected:
   void _dump(Formatter *f) const override;
   void _dump_op_descriptor_unlocked(ostream& stream) const override;
index 6bd310c82f17d5efbc18e9cb13416fa1acb5e4a7..cbf83f178c269387805e01f6109bdd90df3d8ae5 100644 (file)
@@ -61,14 +61,25 @@ OpenFileTable::~OpenFileTable() {
   }
 }
 
-void OpenFileTable::get_ref(CInode *in)
+void OpenFileTable::get_ref(CInode *in, frag_t fg)
 {
   do {
     auto p = anchor_map.find(in->ino());
+    if (!in->is_dir()) {
+      ceph_assert(fg == -1U);
+      ceph_assert(p == anchor_map.end());
+    }
+
     if (p != anchor_map.end()) {
       ceph_assert(in->state_test(CInode::STATE_TRACKEDBYOFT));
       ceph_assert(p->second.nref > 0);
       p->second.nref++;
+
+      if (fg != -1U) {
+       auto ret = p->second.frags.insert(fg);
+       ceph_assert(ret.second);
+       dirty_items.emplace(in->ino(), (int)DIRTY_UNDEF);
+      }
       break;
     }
 
@@ -81,6 +92,9 @@ void OpenFileTable::get_ref(CInode *in)
     ceph_assert(ret.second == true);
     in->state_set(CInode::STATE_TRACKEDBYOFT);
 
+    if (fg != -1U)
+      ret.first->second.frags.insert(fg);
+
     auto ret1 = dirty_items.emplace(in->ino(), (int)DIRTY_NEW);
     if (!ret1.second) {
       int omap_idx = ret1.first->second;
@@ -89,10 +103,11 @@ void OpenFileTable::get_ref(CInode *in)
     }
 
     in = pin;
+    fg = -1U;
   } while (in);
 }
 
-void OpenFileTable::put_ref(CInode *in)
+void OpenFileTable::put_ref(CInode *in, frag_t fg)
 {
   do {
     ceph_assert(in->state_test(CInode::STATE_TRACKEDBYOFT));
@@ -100,8 +115,18 @@ void OpenFileTable::put_ref(CInode *in)
     ceph_assert(p != anchor_map.end());
     ceph_assert(p->second.nref > 0);
 
+    if (!in->is_dir()) {
+      ceph_assert(fg == -1U);
+      ceph_assert(p->second.nref == 1);
+    }
+
     if (p->second.nref > 1) {
       p->second.nref--;
+      if (fg != -1U) {
+       auto ret = p->second.frags.erase(fg);
+       ceph_assert(ret);
+       dirty_items.emplace(in->ino(), (int)DIRTY_UNDEF);
+      }
       break;
     }
 
@@ -115,6 +140,11 @@ void OpenFileTable::put_ref(CInode *in)
       ceph_assert(p->second.d_name == "");
     }
 
+    if (fg != -1U) {
+      ceph_assert(p->second.frags.size() == 1);
+      ceph_assert(*p->second.frags.begin() == fg);
+    }
+
     int omap_idx = p->second.omap_idx;
     anchor_map.erase(p);
     in->state_clear(CInode::STATE_TRACKEDBYOFT);
@@ -131,27 +161,19 @@ void OpenFileTable::put_ref(CInode *in)
     }
 
     in = pin;
+    fg = -1U;
   } while (in);
 }
 
 void OpenFileTable::add_inode(CInode *in)
 {
   dout(10) << __func__ << " " << *in << dendl;
-  if (!in->is_dir()) {
-    auto p = anchor_map.find(in->ino());
-    ceph_assert(p == anchor_map.end());
-  }
   get_ref(in);
 }
 
 void OpenFileTable::remove_inode(CInode *in)
 {
   dout(10) << __func__ << " " << *in << dendl;
-  if (!in->is_dir()) {
-    auto p = anchor_map.find(in->ino());
-    ceph_assert(p != anchor_map.end());
-    ceph_assert(p->second.nref == 1);
-  }
   put_ref(in);
 }
 
@@ -160,10 +182,7 @@ void OpenFileTable::add_dirfrag(CDir *dir)
   dout(10) << __func__ << " " << *dir << dendl;
   ceph_assert(!dir->state_test(CDir::STATE_TRACKEDBYOFT));
   dir->state_set(CDir::STATE_TRACKEDBYOFT);
-  auto ret = dirfrags.insert(dir->dirfrag());
-  ceph_assert(ret.second);
-  get_ref(dir->get_inode());
-  dirty_items.emplace(dir->ino(), (int)DIRTY_UNDEF);
+  get_ref(dir->get_inode(), dir->get_frag());
 }
 
 void OpenFileTable::remove_dirfrag(CDir *dir)
@@ -171,11 +190,7 @@ void OpenFileTable::remove_dirfrag(CDir *dir)
   dout(10) << __func__ << " " << *dir << dendl;
   ceph_assert(dir->state_test(CDir::STATE_TRACKEDBYOFT));
   dir->state_clear(CDir::STATE_TRACKEDBYOFT);
-  auto p = dirfrags.find(dir->dirfrag());
-  ceph_assert(p != dirfrags.end());
-  dirfrags.erase(p);
-  dirty_items.emplace(dir->ino(), (int)DIRTY_UNDEF);
-  put_ref(dir->get_inode());
+  put_ref(dir->get_inode(), dir->get_frag());
 }
 
 void OpenFileTable::notify_link(CInode *in)
@@ -452,33 +467,14 @@ void OpenFileTable::commit(MDSContext *c, uint64_t log_seq, int op_prio)
   }
 
   for (auto& it : dirty_items) {
-    frag_vec_t frags;
     auto p = anchor_map.find(it.first);
-    if (p != anchor_map.end()) {
-      for (auto q = dirfrags.lower_bound(dirfrag_t(it.first, 0));
-          q != dirfrags.end() && q->ino == it.first;
-          ++q)
-       frags.push_back(q->frag);
-    }
 
     if (first_commit) {
       auto q = loaded_anchor_map.find(it.first);
       if (q != loaded_anchor_map.end()) {
        ceph_assert(p != anchor_map.end());
        p->second.omap_idx = q->second.omap_idx;
-       bool same = p->second == q->second;
-       if (same) {
-         auto r = loaded_dirfrags.lower_bound(dirfrag_t(it.first, 0));
-         for (const auto& fg : frags) {
-           if (r == loaded_dirfrags.end() || !(*r == dirfrag_t(it.first, fg))) {
-             same = false;
-             break;
-           }
-           ++r;
-         }
-         if (same && r != loaded_dirfrags.end() && r->ino == it.first)
-           same = false;
-       }
+       bool same = (p->second == q->second);
        loaded_anchor_map.erase(q);
        if (same)
          continue;
@@ -526,7 +522,7 @@ void OpenFileTable::commit(MDSContext *c, uint64_t log_seq, int op_prio)
     if (p != anchor_map.end()) {
       bufferlist bl;
       encode(p->second, bl);
-      encode(frags, bl);
+      encode((__u32)0, bl); // frags set was encoded here
 
       ctl.write_size += bl.length() + len + 2 * sizeof(__u32);
       ctl.to_update[key].swap(bl);
@@ -563,7 +559,6 @@ void OpenFileTable::commit(MDSContext *c, uint64_t log_seq, int op_prio)
       }
     }
     loaded_anchor_map.clear();
-    loaded_dirfrags.clear();
   }
 
   size_t total_items = 0;
@@ -748,14 +743,12 @@ void OpenFileTable::_load_finish(int op_r, int header_r, int values_r,
                                            std::make_tuple());
     RecoveredAnchor& anchor = it->second;
     decode(anchor, p);
+    frag_vec_t frags; // unused
+    decode(frags, p);
     ceph_assert(ino == anchor.ino);
     anchor.omap_idx = idx;
     anchor.auth = MDS_RANK_NONE;
 
-    frag_vec_t frags;
-    decode(frags, p);
-    for (const auto& fg : frags)
-      loaded_dirfrags.insert(loaded_dirfrags.end(), dirfrag_t(anchor.ino, fg));
 
     if (loaded_anchor_map.size() > count)
       ++omap_num_items[idx];
@@ -905,9 +898,6 @@ void OpenFileTable::_load_finish(int op_r, int header_r, int values_r,
              ceph_assert(count > 0);
              --count;
            }
-           auto r = loaded_dirfrags.lower_bound(dirfrag_t(ino, 0));
-           while (r != loaded_dirfrags.end() && r->ino == ino)
-             loaded_dirfrags.erase(r++);
          }
 
          op_vec.resize(op_vec.size() + 1);
@@ -985,23 +975,19 @@ void OpenFileTable::load(MDSContext *onload)
                      new C_OnFinisher(c, mds->finisher));
 }
 
-bool OpenFileTable::get_ancestors(inodeno_t ino, vector<inode_backpointer_t>& ancestors,
-                                 mds_rank_t& auth_hint)
+void OpenFileTable::_get_ancestors(const Anchor& parent,
+                                  vector<inode_backpointer_t>& ancestors,
+                                  mds_rank_t& auth_hint)
 {
-  auto p = loaded_anchor_map.find(ino);
-  if (p == loaded_anchor_map.end())
-    return false;
-
-  inodeno_t dirino = p->second.dirino;
-  if (dirino == inodeno_t(0))
-    return false;
+  inodeno_t dirino = parent.dirino;
+  std::string_view d_name = parent.d_name;
 
   bool first = true;
   ancestors.clear();
   while (true) {
-    ancestors.push_back(inode_backpointer_t(dirino, p->second.d_name, 0));
+    ancestors.push_back(inode_backpointer_t(dirino, string{d_name}, 0));
 
-    p = loaded_anchor_map.find(dirino);
+    auto p = loaded_anchor_map.find(dirino);
     if (p == loaded_anchor_map.end())
       break;
 
@@ -1009,12 +995,12 @@ bool OpenFileTable::get_ancestors(inodeno_t ino, vector<inode_backpointer_t>& an
       auth_hint = p->second.auth;
 
     dirino = p->second.dirino;
+    d_name = p->second.d_name;
     if (dirino == inodeno_t(0))
       break;
 
     first = false;
   }
-  return true;
 }
 
 class C_OFT_OpenInoFinish: public MDSContext {
@@ -1042,8 +1028,13 @@ void OpenFileTable::_open_ino_finish(inodeno_t ino, int r)
   num_opening_inodes--;
   if (num_opening_inodes == 0) {
     if (prefetch_state == DIR_INODES)  {
-      prefetch_state = DIRFRAGS;
-      _prefetch_dirfrags();
+      if (g_conf().get_val<bool>("mds_oft_prefetch_dirfrags")) {
+       prefetch_state = DIRFRAGS;
+       _prefetch_dirfrags();
+      } else {
+       prefetch_state = FILE_INODES;
+       _prefetch_inodes();
+      }
     } else if (prefetch_state == FILE_INODES) {
       prefetch_state = DONE;
       logseg_destroyed_inos.clear();
@@ -1062,37 +1053,36 @@ void OpenFileTable::_prefetch_dirfrags()
   ceph_assert(prefetch_state == DIRFRAGS);
 
   MDCache *mdcache = mds->mdcache;
-  std::vector<CDir*> fetch_queue;
+  std::set<CDir*> fetch_queue;
 
-  CInode *last_in = nullptr;
-  for (auto df : loaded_dirfrags) {
-    CInode *diri;
-    if (last_in && last_in->ino() == df.ino) {
-      diri = last_in;
-    } else {
-      diri = mdcache->get_inode(df.ino);
-      if (!diri)
-       continue;
-      last_in = diri;
-    }
+  for (auto& it : loaded_anchor_map) {
+    if (it.second.frags.empty())
+      continue;
+    CInode *diri = mdcache->get_inode(it.first);
+    if (!diri)
+      continue;
     if (diri->state_test(CInode::STATE_REJOINUNDEF))
       continue;
 
-    CDir *dir = diri->get_dirfrag(df.frag);
-    if (dir) {
-      if (dir->is_auth() && !dir->is_complete())
-       fetch_queue.push_back(dir);
-    } else {
-      frag_vec_t leaves;
-      diri->dirfragtree.get_leaves_under(df.frag, leaves);
-      for (const auto& leaf : leaves) {
-       if (diri->is_auth()) {
-         dir = diri->get_or_open_dirfrag(mdcache, leaf);
-       } else {
-         dir = diri->get_dirfrag(leaf);
+    for (auto& fg: it.second.frags) {
+      CDir *dir = diri->get_dirfrag(fg);
+      if (dir) {
+       if (dir->is_auth() && !dir->is_complete())
+         fetch_queue.insert(dir);
+      } else {
+       frag_vec_t leaves;
+       diri->dirfragtree.get_leaves_under(fg, leaves);
+       if (leaves.empty())
+         leaves.push_back(diri->dirfragtree[fg.value()]);
+       for (auto& leaf : leaves) {
+         if (diri->is_auth()) {
+           dir = diri->get_or_open_dirfrag(mdcache, leaf);
+         } else {
+           dir = diri->get_dirfrag(leaf);
+         }
+         if (dir && dir->is_auth() && !dir->is_complete())
+           fetch_queue.insert(dir);
        }
-       if (dir && dir->is_auth() && !dir->is_complete())
-         fetch_queue.push_back(dir);
       }
     }
   }
@@ -1167,7 +1157,16 @@ void OpenFileTable::_prefetch_inodes()
       continue;
 
     num_opening_inodes++;
-    mdcache->open_ino(it.first, pool, new C_OFT_OpenInoFinish(this, it.first), false);
+
+    auto fin = new C_OFT_OpenInoFinish(this, it.first);
+    if (it.second.dirino != inodeno_t(0)) {
+      vector<inode_backpointer_t> ancestors;
+      mds_rank_t auth_hint = MDS_RANK_NONE;
+      _get_ancestors(it.second, ancestors, auth_hint);
+      mdcache->open_ino(it.first, pool, fin, false, false, &ancestors, auth_hint);
+    } else {
+      mdcache->open_ino(it.first, pool, fin, false);
+    }
 
     if (!(num_opening_inodes % 1000))
       mds->heartbeat_reset();
index 15885909424c6950b137810e48c039c048a0bb50..ebf7feff67beb654226df5187ce4e61ec2c991d7 100644 (file)
@@ -50,9 +50,6 @@ public:
     waiting_for_load.push_back(c);
   }
 
-  bool get_ancestors(inodeno_t ino, vector<inode_backpointer_t>& ancestors,
-                    mds_rank_t& auth_hint);
-
   bool prefetch_inodes();
   bool is_prefetched() const { return prefetch_state == DONE; }
   void wait_for_prefetch(MDSContext *c) {
@@ -84,8 +81,8 @@ protected:
   void _journal_finish(int r, uint64_t log_seq, MDSContext *fin,
                       std::map<unsigned, std::vector<ObjectOperation> >& ops);
 
-  void get_ref(CInode *in);
-  void put_ref(CInode *in);
+  void get_ref(CInode *in, frag_t fg=-1U);
+  void put_ref(CInode *in, frag_t fg=-1U);
 
   object_t get_object_name(unsigned idx) const;
 
@@ -95,7 +92,6 @@ protected:
     journal_state = JOURNAL_NONE;
     loaded_journals.clear();
     loaded_anchor_map.clear();
-    loaded_dirfrags.clear();
   }
   void _load_finish(int op_r, int header_r, int values_r,
                    unsigned idx, bool first, bool more,
@@ -107,6 +103,10 @@ protected:
   void _prefetch_inodes();
   void _prefetch_dirfrags();
 
+  void _get_ancestors(const Anchor& parent,
+                     vector<inode_backpointer_t>& ancestors,
+                     mds_rank_t& auth_hint);
+
   MDSRank *mds;
 
   version_t omap_version = 0;
@@ -115,7 +115,6 @@ protected:
   std::vector<unsigned> omap_num_items;
 
   map<inodeno_t, OpenedAnchor> anchor_map;
-  set<dirfrag_t> dirfrags;
 
   std::map<inodeno_t, int> dirty_items; // ino -> dirty state
 
@@ -131,7 +130,6 @@ protected:
 
   std::vector<std::map<std::string, bufferlist> > loaded_journals;
   map<inodeno_t, RecoveredAnchor> loaded_anchor_map;
-  set<dirfrag_t> loaded_dirfrags;
   MDSContext::vec waiting_for_load;
   bool load_done = false;
 
index eace818ec3d8fec63854d175d8df526c5f05ac93..c47a43ec4a19c1e63778c2816e696093c3423b08 100644 (file)
@@ -65,7 +65,9 @@ void PurgeItem::decode(bufferlist::const_iterator &p)
       decode(stamp, p);
       decode(pad_size, p);
       p += pad_size;
-      decode((uint8_t&)action, p);
+      uint8_t raw_action;
+      decode(raw_action, p);
+      action = (Action)raw_action;
       decode(ino, p);
       decode(size, p);
       decode(layout, p);
@@ -80,7 +82,9 @@ void PurgeItem::decode(bufferlist::const_iterator &p)
     }
   }
   if (!done) {
-    decode((uint8_t&)action, p);
+    uint8_t raw_action;
+    decode(raw_action, p);
+    action = (Action)raw_action;
     decode(ino, p);
     decode(size, p);
     decode(layout, p);
@@ -367,14 +371,12 @@ uint32_t PurgeQueue::_calculate_ops(const PurgeItem &item) const
     ops_required = 1 + leaves.size();
   } else {
     // File, work out concurrent Filer::purge deletes
+    // Account for removing (or zeroing) backtrace
     const uint64_t num = (item.size > 0) ?
       Striper::get_num_objects(item.layout, item.size) : 1;
 
     ops_required = std::min(num, g_conf()->filer_max_purge_ops);
 
-    // Account for removing (or zeroing) backtrace
-    ops_required += 1;
-
     // Account for deletions for old pools
     if (item.action != PurgeItem::TRUNCATE_FILE) {
       ops_required += item.old_pools.size();
index da037cabbab2541042e46a4aee5b763334c9ec73..127679b48126f74482b6e25fcd16bf17af6a9edf 100644 (file)
@@ -105,6 +105,10 @@ public:
    */
   std::string_view scrub_summary();
 
+  static bool is_idle(std::string_view state_str) {
+    return state_str == "idle";
+  }
+
   bool is_scrubbing() const { return !inode_stack.empty(); }
 
   MDCache *mdcache;
index d636646807d850628dc152cb98203c1995fadecf..e1d9f1172fbc7b1605025d5e71a21694cc5666da 100644 (file)
@@ -82,35 +82,53 @@ class Batch_Getattr_Lookup : public BatchOp {
 protected:
   Server* server;
   ceph::ref_t<MDRequestImpl> mdr;
-  MDCache* mdcache;
+  std::vector<ceph::ref_t<MDRequestImpl>> batch_reqs;
   int res = 0;
 public:
-  Batch_Getattr_Lookup(Server* s, ceph::ref_t<MDRequestImpl> r, MDCache* mdc) : server(s), mdr(std::move(r)), mdcache(mdc) {}
-  void add_request(const ceph::ref_t<MDRequestImpl>& m) override {
-    mdr->batch_reqs.push_back(m);
+  Batch_Getattr_Lookup(Server* s, const ceph::ref_t<MDRequestImpl>& r)
+    : server(s), mdr(r) {
+    if (mdr->client_request->get_op() == CEPH_MDS_OP_LOOKUP)
+      mdr->batch_op_map = &mdr->dn[0].back()->batch_ops;
+    else
+      mdr->batch_op_map = &mdr->in[0]->batch_ops;
+  }
+  void add_request(const ceph::ref_t<MDRequestImpl>& r) override {
+    batch_reqs.push_back(r);
   }
-  void set_request(const ceph::ref_t<MDRequestImpl>& m) override {
-    mdr = m;
+  ceph::ref_t<MDRequestImpl> find_new_head() override {
+    while (!batch_reqs.empty()) {
+      auto r = std::move(batch_reqs.back());
+      batch_reqs.pop_back();
+      if (r->killed)
+       continue;
+
+      r->batch_op_map = mdr->batch_op_map;
+      mdr->batch_op_map = nullptr;
+      mdr = r;
+      return mdr;
+    }
+    return nullptr;
   }
   void _forward(mds_rank_t t) override {
+    MDCache* mdcache = server->mdcache;
     mdcache->mds->forward_message_mds(mdr->release_client_request(), t);
     mdr->set_mds_stamp(ceph_clock_now());
-    for (auto& m : mdr->batch_reqs) {
+    for (auto& m : batch_reqs) {
       if (!m->killed)
        mdcache->request_forward(m, t);
     }
-    mdr->batch_reqs.clear();
+    batch_reqs.clear();
   }
   void _respond(int r) override {
     mdr->set_mds_stamp(ceph_clock_now());
-    for (auto& m : mdr->batch_reqs) {
+    for (auto& m : batch_reqs) {
       if (!m->killed) {
        m->tracei = mdr->tracei;
        m->tracedn = mdr->tracedn;
        server->respond_to_request(m, r);
       }
     }
-    mdr->batch_reqs.clear();
+    batch_reqs.clear();
     server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
   }
   void print(std::ostream& o) {
@@ -228,6 +246,7 @@ Server::Server(MDSRank *m) :
   mdcache(mds->mdcache), mdlog(mds->mdlog),
   recall_throttle(g_conf().get_val<double>("mds_recall_max_decay_rate"))
 {
+  forward_all_requests_to_auth = g_conf().get_val<bool>("mds_forward_all_requests_to_auth");
   replay_unsafe_with_closed_session = g_conf().get_val<bool>("mds_replay_unsafe_with_closed_session");
   cap_revoke_eviction_timeout = g_conf().get_val<double>("mds_cap_revoke_eviction_timeout");
   max_snaps_per_dir = g_conf().get_val<uint64_t>("mds_max_snaps_per_dir");
@@ -720,25 +739,24 @@ void Server::handle_client_session(const cref_t<MClientSession> &m)
   }
 }
 
-
-void Server::flush_session(Session *session, MDSGatherBuilder *gather) {
+void Server::flush_session(Session *session, MDSGatherBuilder& gather) {
   if (!session->is_open() ||
       !session->get_connection() ||
       !session->get_connection()->has_feature(CEPH_FEATURE_EXPORT_PEER)) {
     return;
   }
 
-  version_t seq = session->wait_for_flush(gather->new_sub());
+  version_t seq = session->wait_for_flush(gather.new_sub());
   mds->send_message_client(
     make_message<MClientSession>(CEPH_SESSION_FLUSHMSG, seq), session);
 }
 
 void Server::flush_client_sessions(set<client_t>& client_set, MDSGatherBuilder& gather)
 {
-  for (set<client_t>::iterator p = client_set.begin(); p != client_set.end(); ++p) {
-    Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(p->v));
+  for (const auto& client : client_set) {
+    Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(client.v));
     ceph_assert(session);
-    flush_session(session, &gather);
+    flush_session(session, gather);
   }
 }
 
@@ -799,11 +817,12 @@ void Server::_session_logged(Session *session, uint64_t state_seq, bool open, ve
   } else if (session->is_closing() ||
             session->is_killing()) {
     // kill any lingering capabilities, leases, requests
+    bool killing = session->is_killing();
     while (!session->caps.empty()) {
       Capability *cap = session->caps.front();
       CInode *in = cap->get_inode();
       dout(20) << " killing capability " << ccap_string(cap->issued()) << " on " << *in << dendl;
-      mds->locker->remove_client_cap(in, cap, true);
+      mds->locker->remove_client_cap(in, cap, killing);
     }
     while (!session->leases.empty()) {
       ClientLease *r = session->leases.front();
@@ -1154,8 +1173,8 @@ void Server::evict_cap_revoke_non_responders() {
 }
 
 void Server::handle_conf_change(const std::set<std::string>& changed) {
-  if (changed.count("mds_replay_unsafe_with_closed_session")) {
-    replay_unsafe_with_closed_session = g_conf().get_val<bool>("mds_replay_unsafe_with_closed_session");
+  if (changed.count("mds_forward_all_requests_to_auth")){
+    forward_all_requests_to_auth = g_conf().get_val<bool>("mds_forward_all_requests_to_auth");
   }
   if (changed.count("mds_cap_revoke_eviction_timeout")) {
     cap_revoke_eviction_timeout = g_conf().get_val<double>("mds_cap_revoke_eviction_timeout");
@@ -1786,7 +1805,7 @@ std::pair<bool, uint64_t> Server::recall_client_state(MDSGatherBuilder* gather,
       m->head.max_caps = newlim;
       mds->send_message_client(m, session);
       if (gather) {
-        flush_session(session, gather);
+        flush_session(session, *gather);
       }
       caps_recalled += session->notify_recall_sent(newlim);
       recall_throttle.hit(recall);
@@ -1865,23 +1884,9 @@ void Server::submit_mdlog_entry(LogEvent *le, MDSLogContextBase *fin, MDRequestR
 void Server::respond_to_request(MDRequestRef& mdr, int r)
 {
   if (mdr->client_request) {
-    if (mdr->is_batch_op() && mdr->is_batch_head) {
-      int mask = mdr->client_request->head.args.getattr.mask;
-
-      std::unique_ptr<BatchOp> bop;
-      if (mdr->client_request->get_op() == CEPH_MDS_OP_GETATTR) {
-       dout(20) << __func__ << ": respond other getattr ops. " << *mdr << dendl;
-        auto it = mdr->in[0]->batch_ops.find(mask);
-        bop = std::move(it->second);
-       mdr->in[0]->batch_ops.erase(it);
-      } else {
-       dout(20) << __func__ << ": respond other lookup ops. " << *mdr << dendl;
-       auto it = mdr->dn[0].back()->batch_ops.find(mask);
-        bop = std::move(it->second);
-       mdr->dn[0].back()->batch_ops.erase(it);
-      }
-
-      bop->respond(r);
+    if (mdr->is_batch_head()) {
+      dout(20) << __func__ << " batch head " << *mdr << dendl;
+      mdr->release_batch_op()->respond(r);
     } else {
      reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
     }
@@ -2220,7 +2225,7 @@ void Server::set_trace_dist(const ref_t<MClientReply> &reply,
     DirStat ds;
     ds.frag = dir->get_frag();
     ds.auth = dir->get_dir_auth().first;
-    if (dir->is_auth() && !mdcache->forward_all_reqs_to_auth())
+    if (dir->is_auth() && !forward_all_requests_to_auth)
       dir->get_dist_spec(ds.dist, whoami);
 
     dir->encode_dirstat(bl, session->info, ds);
@@ -2402,16 +2407,6 @@ void Server::handle_osd_map()
     });
 }
 
-void Server::clear_batch_ops(const MDRequestRef& mdr)
-{
-  int mask = mdr->client_request->head.args.getattr.mask;
-  if (mdr->client_request->get_op() == CEPH_MDS_OP_GETATTR && mdr->in[0]) {
-    mdr->in[0]->batch_ops.erase(mask);
-  } else if (mdr->client_request->get_op() == CEPH_MDS_OP_LOOKUP && mdr->dn[0].size()) {
-    mdr->dn[0].back()->batch_ops.erase(mask);
-  }
-}
-
 void Server::dispatch_client_request(MDRequestRef& mdr)
 {
   // we shouldn't be waiting on anyone.
@@ -2421,39 +2416,15 @@ void Server::dispatch_client_request(MDRequestRef& mdr)
     dout(10) << "request " << *mdr << " was killed" << dendl;
     //if the mdr is a "batch_op" and it has followers, pick a follower as
     //the new "head of the batch ops" and go on processing the new one.
-    if (mdr->is_batch_op() && mdr->is_batch_head ) {
-      if (!mdr->batch_reqs.empty()) {
-       MDRequestRef new_batch_head;
-       for (auto itr = mdr->batch_reqs.cbegin(); itr != mdr->batch_reqs.cend();) {
-         auto req = *itr;
-         itr = mdr->batch_reqs.erase(itr);
-         if (!req->killed) {
-           new_batch_head = req;
-           break;
-         }
-       }
-
-       if (!new_batch_head) {
-         clear_batch_ops(mdr);
-         return;
-       }
-
-       new_batch_head->batch_reqs = std::move(mdr->batch_reqs);
-
-       mdr = new_batch_head;
-       mdr->is_batch_head = true;
-       int mask = mdr->client_request->head.args.getattr.mask;
-       if (mdr->client_request->get_op() == CEPH_MDS_OP_GETATTR) {
-         auto& fin = mdr->in[0]->batch_ops[mask];
-         fin->set_request(new_batch_head);
-       } else if (mdr->client_request->get_op() == CEPH_MDS_OP_LOOKUP) {
-         auto& fin = mdr->dn[0].back()->batch_ops[mask];
-         fin->set_request(new_batch_head);
-       }
-      } else {
-       clear_batch_ops(mdr);
+    if (mdr->is_batch_head()) {
+      int mask = mdr->client_request->head.args.getattr.mask;
+      auto it = mdr->batch_op_map->find(mask);
+      auto new_batch_head = it->second->find_new_head();
+      if (!new_batch_head) {
+       mdr->batch_op_map->erase(it);
        return;
       }
+      mdr = std::move(new_batch_head);
     } else {
       return;
     }
@@ -3381,6 +3352,8 @@ CInode* Server::rdlock_path_pin_ref(MDRequestRef& mdr,
     if (!no_want_auth)
       want_auth = true;
   } else {
+    if (!no_want_auth && forward_all_requests_to_auth)
+      want_auth = true;
     flags |= MDS_TRAVERSE_RDLOCK_PATH | MDS_TRAVERSE_RDLOCK_SNAP;
   }
   if (want_auth)
@@ -3748,37 +3721,47 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup)
   if (mask & CEPH_STAT_RSTAT)
     want_auth = true; // set want_auth for CEPH_STAT_RSTAT mask
 
-  CInode *ref = rdlock_path_pin_ref(mdr, want_auth, false);
-  if (!ref)
-    return;
-
-  mdr->getattr_caps = mask;
+  if (!mdr->is_batch_head() && mdr->can_batch()) {
+    CF_MDS_MDRContextFactory cf(mdcache, mdr, false);
+    int r = mdcache->path_traverse(mdr, cf, mdr->get_filepath(),
+                                  (want_auth ? MDS_TRAVERSE_WANT_AUTH : 0),
+                                  &mdr->dn[0], &mdr->in[0]);
+    if (r > 0)
+      return; // delayed
 
-  if (mdr->snapid == CEPH_NOSNAP && !mdr->is_batch_head && mdr->is_batch_op()) {
-    if (!is_lookup) {
-      auto em = ref->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());
+    if (r < 0) {
+      // fall-thru. let rdlock_path_pin_ref() check again.
+    } else if (is_lookup) {
+      CDentry* dn = mdr->dn[0].back();
+      mdr->pin(dn);
+      auto em = dn->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());
       if (em.second) {
-        em.first->second = std::make_unique<Batch_Getattr_Lookup>(this, mdr, mdcache);
+       em.first->second = std::make_unique<Batch_Getattr_Lookup>(this, mdr);
       } else {
-       dout(20) << __func__ << ": GETATTR op, wait for previous same getattr ops to respond. " << *mdr << dendl;
+       dout(20) << __func__ << ": LOOKUP op, wait for previous same getattr ops to respond. " << *mdr << dendl;
        em.first->second->add_request(mdr);
        return;
       }
     } else {
-      CDentry* dn = mdr->dn[0].back();
-      auto em = dn->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());
+      CInode *in = mdr->in[0];
+      mdr->pin(in);
+      auto em = in->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());
       if (em.second) {
-       em.first->second = std::make_unique<Batch_Getattr_Lookup>(this, mdr, mdcache);
-       mdr->pin(dn);
+       em.first->second = std::make_unique<Batch_Getattr_Lookup>(this, mdr);
       } else {
-       dout(20) << __func__ << ": LOOKUP op, wait for previous same getattr ops to respond. " << *mdr << dendl;
+       dout(20) << __func__ << ": GETATTR op, wait for previous same getattr ops to respond. " << *mdr << dendl;
        em.first->second->add_request(mdr);
        return;
       }
     }
-    mdr->is_batch_head = true;
   }
 
+  CInode *ref = rdlock_path_pin_ref(mdr, want_auth, false);
+  if (!ref)
+    return;
+
+  mdr->getattr_caps = mask;
+
   /*
    * if client currently holds the EXCL cap on a field, do not rdlock
    * it; client's stat() will result in valid info if _either_ EXCL
@@ -4391,6 +4374,7 @@ void Server::handle_client_openc(MDRequestRef& mdr)
     in->inode.client_ranges[client].range.first = 0;
     in->inode.client_ranges[client].range.last = in->inode.layout.stripe_unit;
     in->inode.client_ranges[client].follows = follows;
+    in->mark_clientwriteable();
     cap->mark_clientwriteable();
   }
   
@@ -4541,7 +4525,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
   DirStat ds;
   ds.frag = dir->get_frag();
   ds.auth = dir->get_dir_auth().first;
-  if (dir->is_auth() && !mdcache->forward_all_reqs_to_auth())
+  if (dir->is_auth() && !forward_all_requests_to_auth)
     dir->get_dist_spec(ds.dist, mds->get_nodeid());
 
   dir->encode_dirstat(dirbl, mdr->session->info, ds);
@@ -4992,12 +4976,9 @@ void Server::handle_client_setattr(MDRequestRef& mdr)
     pi.inode.mtime = mdr->get_op_stamp();
 
     // adjust client's max_size?
-    CInode::mempool_inode::client_range_map new_ranges;
-    bool max_increased = false;
-    mds->locker->calc_new_client_ranges(cur, pi.inode.size, true, &new_ranges, &max_increased);
-    if (pi.inode.client_ranges != new_ranges) {
-      dout(10) << " client_ranges " << pi.inode.client_ranges << " -> " << new_ranges << dendl;
-      pi.inode.client_ranges = new_ranges;
+    if (mds->locker->calc_new_client_ranges(cur, pi.inode.size)) {
+      dout(10) << " client_ranges "  << cur->get_previous_projected_inode()->client_ranges
+              << " -> " << pi.inode.client_ranges << dendl;
       changed_ranges = true;
     }
   }
@@ -5058,6 +5039,7 @@ void Server::do_open_truncate(MDRequestRef& mdr, int cmode)
     pi.inode.client_ranges[client].range.last = pi.inode.get_layout_size_increment();
     pi.inode.client_ranges[client].follows = realm->get_newest_seq();
     changed_ranges = true;
+    in->mark_clientwriteable();
     cap->mark_clientwriteable();
   }
   
@@ -6058,6 +6040,7 @@ void Server::handle_client_mknod(MDRequestRef& mdr)
       newi->inode.client_ranges[client].range.first = 0;
       newi->inode.client_ranges[client].range.last = newi->inode.layout.stripe_unit;
       newi->inode.client_ranges[client].follows = follows;
+      newi->mark_clientwriteable();
       cap->mark_clientwriteable();
     }
   }
index 12a9be819421d9d4c6eef8502960e7179c934d1e..69294a118e2b9ec13517035190512f86eb0317b8 100644 (file)
@@ -164,7 +164,6 @@ public:
   void set_trace_dist(const ref_t<MClientReply> &reply, CInode *in, CDentry *dn,
                      MDRequestRef& mdr);
 
-
   void handle_slave_request(const cref_t<MMDSSlaveRequest> &m);
   void handle_slave_request_reply(const cref_t<MMDSSlaveRequest> &m);
   void dispatch_slave_request(MDRequestRef& mdr);
@@ -319,8 +318,7 @@ private:
   friend class Batch_Getattr_Lookup;
 
   void reply_client_request(MDRequestRef& mdr, const ref_t<MClientReply> &reply);
-  void flush_session(Session *session, MDSGatherBuilder *gather);
-  void clear_batch_ops(const MDRequestRef& mdr);
+  void flush_session(Session *session, MDSGatherBuilder& gather);
 
   MDSRank *mds;
   MDCache *mdcache;
@@ -342,6 +340,7 @@ private:
   feature_bitset_t supported_features;
   feature_bitset_t required_client_features;
 
+  bool forward_all_requests_to_auth = false;
   bool replay_unsafe_with_closed_session = false;
   double cap_revoke_eviction_timeout = 0;
   uint64_t max_snaps_per_dir = 100;
index 317e04ef1d25297c74dff644cba291efc9a68b8f..1910f04f061a8ee1d6ddf2a9feee653b6951ddf0 100644 (file)
@@ -1017,7 +1017,8 @@ int Session::check_access(CInode *in, unsigned mask,
 // track total and per session load
 void SessionMap::hit_session(Session *session) {
   uint64_t sessions = get_session_count_in_state(Session::STATE_OPEN) +
-                      get_session_count_in_state(Session::STATE_STALE);
+                      get_session_count_in_state(Session::STATE_STALE) +
+                      get_session_count_in_state(Session::STATE_CLOSING);
   ceph_assert(sessions != 0);
 
   double total_load = total_load_avg.hit();
index 9fec9ded997ae33edb719074fdfc39979d031dc2..1d2555c4c8a35cc521dc94fbd5d9d858ead79667 100644 (file)
@@ -358,6 +358,10 @@ public:
     return info.completed_flushes.count(tid);
   }
 
+  uint64_t get_num_caps() const {
+    return caps.size();
+  }
+
   unsigned get_num_completed_flushes() const { return info.completed_flushes.size(); }
   unsigned get_num_trim_flushes_warnings() const {
     return num_trim_flushes_warnings;
index a093dd73fb004fe338a976a5ee16ce3eba9b1d7e..6f821c0a1f6e30ca6362ede5984b4590d9dee732 100644 (file)
@@ -185,10 +185,11 @@ void StrayManager::_purge_stray_purged(
     auto &pi = in->project_inode();
     pi.inode.size = 0;
     pi.inode.max_size_ever = 0;
-    pi.inode.client_ranges.clear();
     pi.inode.truncate_size = 0;
     pi.inode.truncate_from = 0;
     pi.inode.version = in->pre_dirty();
+    pi.inode.client_ranges.clear();
+    in->clear_clientwriteable();
 
     le->metablob.add_dir_context(dn->dir);
     le->metablob.add_primary_dentry(dn, in, true);
index cd829b86698f08545bd9c0749ed2caa151ba0882..3f0b05a095284122fa04c9022a1f47a651ac4b2b 100644 (file)
@@ -482,6 +482,11 @@ struct inode_t {
 
   bool is_dirty_rstat() const { return !(rstat == accounted_rstat); }
 
+  uint64_t get_client_range(client_t client) const {
+    auto it = client_ranges.find(client);
+    return it != client_ranges.end() ? it->second.range.last : 0;
+  }
+
   uint64_t get_max_size() const {
     uint64_t max = 0;
       for (std::map<client_t,client_writeable_range_t>::const_iterator p = client_ranges.begin();
index f54484128b5b6ca81bcf0aaa1b4e0906b048f5cc..4969c598d37b1bf27400d5664862dba19806b6f5 100644 (file)
@@ -131,9 +131,13 @@ struct MDSHealthMetric
 
   void decode(bufferlist::const_iterator& bl) {
     DECODE_START(1, bl);
-    decode((uint16_t&)type, bl);
+    uint16_t raw_type;
+    decode(raw_type, bl);
+    type = (mds_metric_t)raw_type;
     ceph_assert(type != MDS_HEALTH_NULL);
-    decode((uint8_t&)sev, bl);
+    uint8_t raw_sev;
+    decode(raw_sev, bl);
+    sev = (health_status_t)raw_sev;
     decode(message, bl);
     decode(metadata, bl);
     DECODE_FINISH(bl);
@@ -272,7 +276,9 @@ public:
     paxos_decode(p);
     decode(fsid, p);
     decode(global_id, p);
-    decode((__u32&)state, p);
+    __u32 raw_state;
+    decode(raw_state, p);
+    state = (MDSMap::DaemonState)raw_state;
     decode(seq, p);
     decode(name, p);
     {
index c1a55d880cf6084a7174c3378296ae11f40a1570..767ee775d22a532ff05cc33493c1c557a68196ce 100644 (file)
@@ -61,12 +61,16 @@ public:
     decode(path, p);
     decode(description, p);
     decode(nick, p);
-    decode((uint8_t&)type, p);
+    uint8_t raw_type;
+    decode(raw_type, p);
+    type = (enum perfcounter_type_d)raw_type;
     if (struct_v >= 2) {
       decode(priority, p);
     }
     if (struct_v >= 3) {
-      decode((uint8_t&)unit, p);
+      uint8_t raw_unit;
+      decode(raw_unit, p);
+      unit = (enum unit_t)raw_unit;
     }
     DECODE_FINISH(p);
   }
index 5610fa769255c66a20f0836c50a232833a328b96..20ebb4a68415cbc0911e492026fe7c183a1c7098 100644 (file)
@@ -527,12 +527,16 @@ bool DaemonServer::handle_close(const ref_t<MMgrClose>& m)
   return true;
 }
 
-void DaemonServer::update_task_status(DaemonKey key, const ref_t<MMgrReport>& m) {
+void DaemonServer::update_task_status(
+  DaemonKey key,
+  const std::map<std::string,std::string>& task_status)
+{
   dout(10) << "got task status from " << key << dendl;
 
-  auto p = pending_service_map.get_daemon(key.type, key.name);
-  if (!map_compare(p.first->task_status, *m->task_status)) {
-    p.first->task_status = *m->task_status;
+  [[maybe_unused]] auto [daemon, added] =
+    pending_service_map.get_daemon(key.type, key.name);
+  if (daemon->task_status != task_status) {
+    daemon->task_status = task_status;
     pending_service_map_dirty = pending_service_map.epoch;
   }
 }
@@ -631,7 +635,7 @@ bool DaemonServer::handle_report(const ref_t<MMgrReport>& m)
       }
       // update task status
       if (m->task_status) {
-        update_task_status(key, m);
+        update_task_status(key, *m->task_status);
         daemon->last_service_beacon = now;
       }
       if (m->get_connection()->peer_is_osd() || m->get_connection()->peer_is_mon()) {
@@ -2784,12 +2788,13 @@ void DaemonServer::got_service_map()
        // we just started up
        dout(10) << "got initial map e" << service_map.epoch << dendl;
        pending_service_map = service_map;
+       pending_service_map.epoch = service_map.epoch + 1;
       } else {
        // we we already active and therefore must have persisted it,
        // which means ours is the same or newer.
        dout(10) << "got updated map e" << service_map.epoch << dendl;
+       ceph_assert(pending_service_map.epoch > service_map.epoch);
       }
-      pending_service_map.epoch = service_map.epoch + 1;
     });
 
   // cull missing daemons, populate new ones
index 185d0d246c11848a5dc72e5ba1875ba8d1fee3fd..6bc60ffcf780f624eced24eec06afad020acdd89 100644 (file)
@@ -145,7 +145,8 @@ private:
     }
   };
 
-  void update_task_status(DaemonKey key, const ref_t<MMgrReport>& m);
+  void update_task_status(DaemonKey key,
+                         const std::map<std::string,std::string>& task_status);
 
 public:
   int init(uint64_t gid, entity_addrvec_t client_addrs);
index 4903fa3a083ca4b305d7aa0a9557dbb4ab4966e7..4976c487b6be6f19e4ef944db9542f3177cf1611 100644 (file)
@@ -181,6 +181,7 @@ void MgrClient::reconnect()
   if (service_daemon) {
     daemon_dirty_status = true;
   }
+  task_dirty_status = true;
 
   // Don't send an open if we're just a client (i.e. doing
   // command-sending, not stats etc)
index 296494ece14cad86084fcc888bb30c2ab27c681a..770a75d4dc21379865a1c8c2770b5343914cc1f7 100644 (file)
@@ -46,7 +46,7 @@ MgrStandby::MgrStandby(int argc, const char **argv) :
                     "mgr",
                     Messenger::get_pid_nonce(),
                     0)),
-  objecter{g_ceph_context, client_messenger.get(), &monc, NULL, 0, 0},
+  objecter{g_ceph_context, client_messenger.get(), &monc, NULL},
   client{client_messenger.get(), &monc, &objecter},
   mgrc(g_ceph_context, client_messenger.get(), &monc.monmap),
   log_client(g_ceph_context, client_messenger.get(), &monc.monmap, LogClient::NO_FLAGS),
index 12bcb93e8ac53ad86d24f1f21fbc567eb3ffee10..c16c4bf4c8ea6a02e3ebadece2c672ba55d64242 100644 (file)
@@ -193,7 +193,8 @@ public:
     auto itp = clients.equal_range(std::string(name));
     for (auto it = itp.first; it != itp.second; ++it) {
       if (it->second == addrs) {
-        it = clients.erase(it);
+        clients.erase(it);
+        return;
       }
     }
   }
index e60c06d46a49b55975dc1a86196d31783d96c120..7d066737a5d68011ad5d566b933f10f8f465a9aa 100644 (file)
@@ -224,7 +224,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
        mds_metric_summary(metric.type),
        1);
       ostringstream ss;
-      ss << "mds" << info.name << "(mds." << rank << "): " << metric.message;
+      ss << "mds." << info.name << "(mds." << rank << "): " << metric.message;
       bool first = true;
       for (auto &p : metric.metadata) {
        if (first) {
@@ -393,6 +393,10 @@ bool MDSMonitor::preprocess_beacon(MonOpRequestRef op)
   dout(10) << __func__ << ": GID exists in map: " << gid << dendl;
   info = fsmap.get_info_gid(gid);
 
+  if (state == MDSMap::STATE_DNE) {
+    return false;
+  }
+
   // old seq?
   if (info.state_seq > seq) {
     dout(7) << "mds_beacon " << *m << " has old seq, ignoring" << dendl;
index d4e12523b8d4259942f67e69e63b7aed02b7c610..854bc0e090a1326941f7d124b913a257100c64a3 100644 (file)
@@ -279,11 +279,18 @@ bool MgrStatMonitor::preprocess_statfs(MonOpRequestRef op)
             << " != " << mon->monmap->fsid << dendl;
     return true;
   }
+  const auto& pool = statfs->data_pool;
+  if (pool && !mon->osdmon()->osdmap.have_pg_pool(*pool)) {
+    // There's no error field for MStatfsReply so just ignore the request.
+    // This is known to happen when a client is still accessing a removed fs.
+    dout(1) << __func__ << " on removed pool " << *pool << dendl;
+    return true;
+  }
   dout(10) << __func__ << " " << *statfs
            << " from " << statfs->get_orig_source() << dendl;
   epoch_t ver = get_last_committed();
   auto reply = new MStatfsReply(statfs->fsid, statfs->get_tid(), ver);
-  reply->h.st = get_statfs(mon->osdmon()->osdmap, statfs->data_pool);
+  reply->h.st = get_statfs(mon->osdmon()->osdmap, pool);
   mon->send_reply(op, reply);
   return true;
 }
index 139c18eb1dbab540f7853a0b74047723655f9afa..25c58b0b1cefcc92f9c11d723a0ba4a8761ea418 100644 (file)
@@ -420,6 +420,8 @@ void MonClient::handle_monmap(MMonMap *m)
     }
   }
 
+  cct->set_mon_addrs(monmap);
+
   sub.got("monmap", monmap.get_epoch());
   map_cond.notify_all();
   want_monmap = false;
@@ -1321,7 +1323,8 @@ void MonClient::start_mon_command(const std::vector<string>& cmd,
   r->poutbl = outbl;
   r->prs = outs;
   r->onfinish = onfinish;
-  if (cct->_conf->rados_mon_op_timeout > 0) {
+  auto timeout = cct->_conf.get_val<std::chrono::seconds>("rados_mon_op_timeout");
+  if (timeout.count() > 0) {
     class C_CancelMonCommand : public Context
     {
       uint64_t tid;
@@ -1333,7 +1336,7 @@ void MonClient::start_mon_command(const std::vector<string>& cmd,
       }
     };
     r->ontimeout = new C_CancelMonCommand(r->tid, this);
-    timer.add_event_after(cct->_conf->rados_mon_op_timeout, r->ontimeout);
+    timer.add_event_after(static_cast<double>(timeout.count()), r->ontimeout);
   }
   mon_commands[r->tid] = r;
   _send_command(r);
index ec4412a6b6370321d1f62883aeffc0b807f5968c..46a82fb0a0461ed421537501e6b833d2919fca6e 100644 (file)
@@ -372,7 +372,6 @@ void MonMap::dump_summary(Formatter *f) const
   f->dump_unsigned("num_mons", ranks.size());
 }
 
-
 // an ambiguous mon addr may be legacy or may be msgr2--we aren' sure.
 // when that happens we need to try them both (unless we can
 // reasonably infer from the port number which it is).
@@ -461,9 +460,27 @@ void MonMap::_add_ambiguous_addr(const string& name,
   }
 }
 
+void MonMap::init_with_addrs(const std::vector<entity_addrvec_t>& addrs,
+                             bool for_mkfs,
+                             std::string_view prefix)
+{
+  char id = 'a';
+  for (auto& addr : addrs) {
+    string name{prefix};
+    name += id++;
+    if (addr.v.size() == 1) {
+      _add_ambiguous_addr(name, addr.front(), 0, 0, for_mkfs);
+    } else {
+      // they specified an addrvec, so let's assume they also specified
+      // the addr *type* and *port*.  (we could possibly improve this?)
+      add(name, addr, 0);
+    }
+  }
+}
+
 int MonMap::init_with_ips(const std::string& ips,
                          bool for_mkfs,
-                         const std::string &prefix)
+                         std::string_view prefix)
 {
   vector<entity_addrvec_t> addrs;
   if (!parse_ip_port_vec(
@@ -473,27 +490,13 @@ int MonMap::init_with_ips(const std::string& ips,
   }
   if (addrs.empty())
     return -ENOENT;
-  for (unsigned i=0; i<addrs.size(); i++) {
-    char n[2];
-    n[0] = 'a' + i;
-    n[1] = 0;
-    string name;
-    name = prefix;
-    name += n;
-    if (addrs[i].v.size() == 1) {
-      _add_ambiguous_addr(name, addrs[i].front(), 0, 0, for_mkfs);
-    } else {
-      // they specified an addrvec, so let's assume they also specified
-      // the addr *type* and *port*.  (we could possibly improve this?)
-      add(name, addrs[i], 0);
-    }
-  }
+  init_with_addrs(addrs, for_mkfs, prefix);
   return 0;
 }
 
 int MonMap::init_with_hosts(const std::string& hostlist,
                            bool for_mkfs,
-                           const std::string& prefix)
+                           std::string_view prefix)
 {
   // maybe they passed us a DNS-resolvable name
   char *hosts = resolve_addrs(hostlist.c_str());
@@ -509,20 +512,7 @@ int MonMap::init_with_hosts(const std::string& hostlist,
     return -EINVAL;
   if (addrs.empty())
     return -ENOENT;
-  for (unsigned i=0; i<addrs.size(); i++) {
-    char n[2];
-    n[0] = 'a' + i;
-    n[1] = 0;
-    string name = prefix;
-    name += n;
-    if (addrs[i].v.size() == 1) {
-      _add_ambiguous_addr(name, addrs[i].front(), 0, 0, for_mkfs);
-    } else {
-      // they specified an addrvec, so let's assume they also specified
-      // the addr *type* and *port*.  (we could possibly improve this?)
-      add(name, addrs[i], 0);
-    }
-  }
+  init_with_addrs(addrs, for_mkfs, prefix);
   calc_legacy_ranks();
   return 0;
 }
@@ -826,6 +816,29 @@ int MonMap::init_with_dns_srv(CephContext* cct,
 int MonMap::build_initial(CephContext *cct, bool for_mkfs, ostream& errout)
 {
   const auto& conf = cct->_conf;
+
+  // mon_host_override?
+  auto mon_host_override = conf.get_val<std::string>("mon_host_override");
+  if (!mon_host_override.empty()) {
+    lgeneric_dout(cct, 1) << "Using mon_host_override " << mon_host_override << dendl;
+    auto ret = init_with_ips(mon_host_override, for_mkfs, "noname-");
+    if (ret == -EINVAL) {
+      ret = init_with_hosts(mon_host_override, for_mkfs, "noname-");
+    }
+    if (ret < 0) {
+      errout << "unable to parse addrs in '" << mon_host_override << "'"
+            << std::endl;
+    }
+    return ret;
+  }
+
+  // cct?
+  auto addrs = cct->get_mon_addrs();
+  if (addrs != nullptr && (addrs->size() > 0)) {
+    init_with_addrs(*addrs, for_mkfs, "noname-");
+    return 0;
+  }
+
   // file?
   if (const auto monmap = conf.get_val<std::string>("monmap");
       !monmap.empty()) {
index a149b44ca8b6394cd37bcc16a9eb1450ca1fd074..d28046c2d97c7249ea69e902cd0d6c7ecb03e923 100644 (file)
@@ -30,7 +30,7 @@
 
 
 #ifdef WITH_SEASTAR
-namespace ceph::common {
+namespace crimson::common {
   class ConfigProxy;
 }
 #endif
@@ -456,6 +456,17 @@ public:
 
   static void generate_test_instances(std::list<MonMap*>& o);
 protected:
+  /**
+   * build a monmap from a list of entity_addrvec_t's
+   *
+   * Give mons dummy names.
+   *
+   * @param addrs  list of entity_addrvec_t's
+   * @param prefix prefix to prepend to generated mon names
+   */
+  void init_with_addrs(const std::vector<entity_addrvec_t>& addrs,
+                       bool for_mkfs,
+                       std::string_view prefix);
   /**
    * build a monmap from a list of ips
    *
@@ -467,7 +478,7 @@ protected:
    */
   int init_with_ips(const std::string& ips,
                    bool for_mkfs,
-                   const std::string &prefix);
+                   std::string_view prefix);
   /**
    * build a monmap from a list of hostnames
    *
@@ -479,7 +490,7 @@ protected:
    */
   int init_with_hosts(const std::string& hostlist,
                      bool for_mkfs,
-                     const std::string& prefix);
+                     std::string_view prefix);
   int init_with_config_file(const ConfigProxy& conf, std::ostream& errout);
 #if WITH_SEASTAR
   seastar::future<> read_monmap(const std::string& monmap);
index eecd2f68c315af2efb9080e33d05d859ddac9489..cbde87cc614d005b5fe962ad3c34c9715d06fe53 100644 (file)
@@ -2772,7 +2772,16 @@ void Monitor::do_health_to_clog(bool force)
       summary == health_status_cache.summary &&
       level == health_status_cache.overall)
     return;
-  clog->health(level) << "overall " << summary;
+
+  if (g_conf()->mon_health_detail_to_clog &&
+      summary != health_status_cache.summary &&
+      level != HEALTH_OK) {
+    string details;
+    level = healthmon()->get_health_status(true, nullptr, &details);
+    clog->health(level) << "Health detail: " << details;
+  } else {
+    clog->health(level) << "overall " << summary;
+  }
   health_status_cache.summary = summary;
   health_status_cache.overall = level;
 }
index 9f52d5e6f7c95700a15decb2e0c37f73205cb037..7e8b965fb5328f4b57611f334cd29b4b03c6347a 100644 (file)
@@ -278,10 +278,29 @@ bool MonmapMonitor::preprocess_command(MonOpRequestRef op)
   boost::scoped_ptr<Formatter> f(Formatter::create(format));
 
   if (prefix == "mon stat") {
-    mon->monmap->print_summary(ss);
-    ss << ", election epoch " << mon->get_epoch() << ", leader "
-       << mon->get_leader() << " " << mon->get_leader_name()
-       << ", quorum " << mon->get_quorum() << " " << mon->get_quorum_names();
+    if (f) {
+      f->open_object_section("monmap");
+      mon->monmap->dump_summary(f.get());
+      f->dump_string("leader", mon->get_leader_name());
+      f->open_array_section("quorum");
+      for (auto rank: mon->get_quorum()) {
+        std::string name = mon->monmap->get_name(rank);
+        f->open_object_section("mon");
+        f->dump_int("rank", rank);
+        f->dump_string("name", name);
+        f->close_section();  // mon
+      }
+      f->close_section();  // quorum
+      f->close_section();  // monmap
+      f->flush(ss);
+    } else {
+      mon->monmap->print_summary(ss);
+      ss << ", election epoch " << mon->get_epoch() << ", leader "
+         << mon->get_leader() << " " << mon->get_leader_name()
+         << ", quorum " << mon->get_quorum()
+         << " " << mon->get_quorum_names();
+    }
+
     rdata.append(ss);
     ss.str("");
     r = 0;
index e256d10aa57af0fbf5655b7bf5eb21c5f1a07fa7..c32f257d74851665f923176c9976494dc0d7a12a 100644 (file)
@@ -4050,6 +4050,7 @@ bool OSDMonitor::preprocess_pgtemp(MonOpRequestRef op)
   return true;
 
  ignore:
+  mon->no_reply(op);
   return true;
 }
 
index 4d5950fc48a0851e0b6e9851b429d28e33f4a688..d7c8c397c35e084ab677dbaca685f70f6db3783b 100644 (file)
@@ -760,6 +760,7 @@ void PGMapDigest::dump_pool_stats_full(
   } else {
     tbl.define_column("POOL", TextTable::LEFT, TextTable::LEFT);
     tbl.define_column("ID", TextTable::LEFT, TextTable::RIGHT);
+    tbl.define_column("PGS", TextTable::LEFT, TextTable::RIGHT);
     tbl.define_column("STORED", TextTable::LEFT, TextTable::RIGHT);
     if (verbose) {
       tbl.define_column("(DATA)", TextTable::LEFT, TextTable::RIGHT);
@@ -791,6 +792,7 @@ void PGMapDigest::dump_pool_stats_full(
       continue;
 
     const string& pool_name = osd_map.get_pool_name(pool_id);
+    auto pool_pg_num = osd_map.get_pg_num(pool_id);
     const pool_stat_t &stat = pg_pool_sum.at(pool_id);
 
     const pg_pool_t *pool = osd_map.get_pg_pool(pool_id);
@@ -814,7 +816,8 @@ void PGMapDigest::dump_pool_stats_full(
       f->open_object_section("stats");
     } else {
       tbl << pool_name
-          << pool_id;
+          << pool_id
+          << pool_pg_num;
     }
     float raw_used_rate = osd_map.pool_raw_used_rate(pool_id);
     bool per_pool = use_per_pool_stats();
index 3d190ae2602339ac0f458ab6f6b034c883cace2b..140867a7ea95d9e47efaa8f3e9b090f4bb566597 100644 (file)
@@ -184,6 +184,9 @@ struct MonSessionMap {
   }
 
   void add_session(MonSession *s) {
+    s->session_timeout = ceph_clock_now();
+    s->session_timeout += g_conf()->mon_session_timeout;
+
     sessions.push_back(&s->item);
     s->get();
     if (s->name.is_osd() &&
index 544dc40dad10a0c88bbf77308c105d4fc576ec82..a0016e092f2e2c467cfe40b8350597a34dc9e9e6 100644 (file)
@@ -749,7 +749,7 @@ CtPtr ProtocolV2::read(CONTINUATION_RXBPTR_TYPE<ProtocolV2> &next,
       if (unlikely(pre_auth.enabled) && r >= 0) {
         pre_auth.rxbuf.append(*next.node);
        ceph_assert(!cct->_conf->ms_die_on_bug ||
-                   pre_auth.rxbuf.length() < 1000000);
+                   pre_auth.rxbuf.length() < 10000000);
       }
       next.r = r;
       run_continuation(next);
@@ -759,7 +759,7 @@ CtPtr ProtocolV2::read(CONTINUATION_RXBPTR_TYPE<ProtocolV2> &next,
     if (unlikely(pre_auth.enabled) && r >= 0) {
       pre_auth.rxbuf.append(*next.node);
       ceph_assert(!cct->_conf->ms_die_on_bug ||
-                 pre_auth.rxbuf.length() < 1000000);
+                 pre_auth.rxbuf.length() < 10000000);
     }
     next.r = r;
     return &next;
@@ -791,7 +791,7 @@ CtPtr ProtocolV2::write(const std::string &desc,
   if (unlikely(pre_auth.enabled)) {
     pre_auth.txbuf.append(buffer);
     ceph_assert(!cct->_conf->ms_die_on_bug ||
-               pre_auth.txbuf.length() < 1000000);
+               pre_auth.txbuf.length() < 10000000);
   }
 
   ssize_t r =
index 6b18d1de9cb81fb8c2ec39f36479dd5dd9f088a9..eb5b628a79e20fd5dd88adbc9de4f67359dfb6f8 100644 (file)
@@ -117,7 +117,9 @@ NetworkStack::NetworkStack(CephContext *c, const string &t): type(t), started(fa
 
   for (unsigned worker_id = 0; worker_id < num_workers; ++worker_id) {
     Worker *w = create_worker(cct, type, worker_id);
-    w->center.init(InitEventNumber, worker_id, type);
+    int ret = w->center.init(InitEventNumber, worker_id, type);
+    if (ret)
+      throw std::system_error(-ret, std::generic_category());
     workers.push_back(w);
   }
 }
index 7d29713538b6e3fdee0420bbb51612b6084a851a..a02d95c14ce54830d6b91aad8aebc5003d863479 100644 (file)
@@ -307,7 +307,21 @@ void entity_addrvec_t::decode(bufferlist::const_iterator& bl)
     __u32 elen;
     decode(elen, bl);
     if (elen) {
-      bl.copy(elen, (char*)addr.get_sockaddr());
+      struct sockaddr *sa = (struct sockaddr *)addr.get_sockaddr();
+#if defined(__FreeBSD__) || defined(__APPLE__)
+      sa->sa_len = 0;
+#endif
+      uint16_t ss_family;
+      if (elen < sizeof(ss_family)) {
+        throw ceph::buffer::malformed_input("elen smaller than family len");
+      }
+      decode(ss_family, bl);
+      sa->sa_family = ss_family;
+      elen -= sizeof(ss_family);
+      if (elen > addr.get_sockaddr_len() - sizeof(sa->sa_family)) {
+        throw ceph::buffer::malformed_input("elen exceeds sockaddr len");
+      }
+      bl.copy(elen, sa->sa_data);
     }
     DECODE_FINISH(bl);
     v.clear();
index cd26ff97ea29da862a7d39452407a6149d770581..e74604e732c9601b585e0507ae03f9e6a5cb24f5 100755 (executable)
@@ -5,3 +5,7 @@ ignore_missing_imports = True
 warn_incomplete_stub = True
 check_untyped_defs = True
 show_error_context = True
+[mypy-cephadm.services.*]
+
+disallow_untyped_defs = True
+
diff --git a/ceph/src/neorados/RADOSImpl.cc b/ceph/src/neorados/RADOSImpl.cc
new file mode 100644 (file)
index 0000000..bddd62c
--- /dev/null
@@ -0,0 +1,121 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2004-2012 Sage Weil <sage@newdream.net>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+
+#include <boost/system/system_error.hpp>
+
+#include "common/common_init.h"
+
+#include "global/global_init.h"
+
+#include "RADOSImpl.h"
+
+namespace neorados {
+namespace detail {
+
+RADOS::RADOS(boost::asio::io_context& ioctx,
+            boost::intrusive_ptr<CephContext> cct)
+  : Dispatcher(cct.get()),
+    ioctx(ioctx),
+    cct(cct),
+    monclient(cct.get(), ioctx),
+    mgrclient(cct.get(), nullptr, &monclient.monmap) {
+  auto err = monclient.build_initial_monmap();
+  if (err < 0)
+    throw std::system_error(ceph::to_error_code(err));
+
+  messenger.reset(Messenger::create_client_messenger(cct.get(), "radosclient"));
+  if (!messenger)
+    throw std::bad_alloc();
+
+  // Require OSDREPLYMUX feature. This means we will fail to talk to
+  // old servers. This is necessary because otherwise we won't know
+  // how to decompose the reply data into its constituent pieces.
+  messenger->set_default_policy(
+    Messenger::Policy::lossy_client(CEPH_FEATURE_OSDREPLYMUX));
+
+  objecter = std::make_unique<Objecter>(cct.get(), messenger.get(), &monclient, ioctx);
+
+  objecter->set_balanced_budget();
+  monclient.set_messenger(messenger.get());
+  mgrclient.set_messenger(messenger.get());
+  objecter->init();
+  messenger->add_dispatcher_head(&mgrclient);
+  messenger->add_dispatcher_tail(objecter.get());
+  messenger->start();
+  monclient.set_want_keys(CEPH_ENTITY_TYPE_MON | CEPH_ENTITY_TYPE_OSD | CEPH_ENTITY_TYPE_MGR);
+  err = monclient.init();
+  if (err) {
+    throw boost::system::system_error(ceph::to_error_code(err));
+  }
+  err = monclient.authenticate(cct->_conf->client_mount_timeout);
+  if (err) {
+    throw boost::system::system_error(ceph::to_error_code(err));
+  }
+  messenger->set_myname(entity_name_t::CLIENT(monclient.get_global_id()));
+  // Detect older cluster, put mgrclient into compatible mode
+  mgrclient.set_mgr_optional(
+      !get_required_monitor_features().contains_all(
+        ceph::features::mon::FEATURE_LUMINOUS));
+
+  // MgrClient needs this (it doesn't have MonClient reference itself)
+  monclient.sub_want("mgrmap", 0, 0);
+  monclient.renew_subs();
+
+  mgrclient.init();
+  objecter->set_client_incarnation(0);
+  objecter->start();
+
+  messenger->add_dispatcher_tail(this);
+
+  std::unique_lock l(lock);
+  instance_id = monclient.get_global_id();
+}
+
+RADOS::~RADOS() {
+  if (objecter && objecter->initialized) {
+    objecter->shutdown();
+  }
+
+  mgrclient.shutdown();
+  monclient.shutdown();
+
+  if (messenger) {
+    messenger->shutdown();
+    messenger->wait();
+  }
+}
+
+bool RADOS::ms_dispatch(Message *m)
+{
+  switch (m->get_type()) {
+  // OSD
+  case CEPH_MSG_OSD_MAP:
+    m->put();
+    return true;
+  }
+  return false;
+}
+
+void RADOS::ms_handle_connect(Connection *con) {}
+bool RADOS::ms_handle_reset(Connection *con) {
+  return false;
+}
+void RADOS::ms_handle_remote_reset(Connection *con) {}
+bool RADOS::ms_handle_refused(Connection *con) {
+  return false;
+}
+
+} // namespace detail
+} // namespace neorados
index c51cd24e50992d799e9e302477e761d77b3afa67..aaa8a52d767c0914a6cd7ea15d8511e4877d4e83 100644 (file)
@@ -672,6 +672,13 @@ public:
                              int max,
                              std::vector<ghobject_t> *ls, ghobject_t *next) = 0;
 
+  virtual int collection_list_legacy(CollectionHandle &c,
+                                     const ghobject_t& start,
+                                     const ghobject_t& end, int max,
+                                     std::vector<ghobject_t> *ls,
+                                     ghobject_t *next) {
+    return collection_list(c, start, end, max, ls, next);
+  }
 
   /// OMAP
   /// Get omap contents
index 417c1e0f68717a52ac5d8baf9b7f4cae9bc449cb..2ba18f0266d9f18d77b13b5504e9e8d46a550f93 100644 (file)
 using TOPNSPC::common::cmd_getval;
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::File, bluefs_file, bluefs);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::Dir, bluefs_dir, bluefs);
-MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileWriter, bluefs_file_writer, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileWriter, bluefs_file_writer, bluefs_file_writer);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReaderBuffer,
-                             bluefs_file_reader_buffer, bluefs);
-MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReader, bluefs_file_reader, bluefs);
+                             bluefs_file_reader_buffer, bluefs_file_reader);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReader, bluefs_file_reader, bluefs_file_reader);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileLock, bluefs_file_lock, bluefs);
 
 static void wal_discard_cb(void *priv, void* priv2) {
@@ -1910,6 +1910,7 @@ int BlueFS::_read_random(
   logger->inc(l_bluefs_read_random_bytes, len);
 
   std::shared_lock s_lock(h->lock);
+  buf->bl.reassign_to_mempool(mempool::mempool_bluefs_file_reader);
   while (len > 0) {
     if (off < buf->bl_off || off >= buf->get_buf_end()) {
       s_lock.unlock();
@@ -2009,6 +2010,7 @@ int BlueFS::_read(
     if (off < buf->bl_off || off >= buf->get_buf_end()) {
       s_lock.unlock();
       std::unique_lock u_lock(h->lock);
+      buf->bl.reassign_to_mempool(mempool::mempool_bluefs_file_reader);
       if (off < buf->bl_off || off >= buf->get_buf_end()) {
         // if precondition hasn't changed during locking upgrade.
         buf->bl.clear();
@@ -2705,7 +2707,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length)
   // do not bother to dirty the file if we are overwriting
   // previously allocated extents.
   bool must_dirty = false;
-  uint64_t clear_upto = 0;
   if (allocated < offset + length) {
     // we should never run out of log space here; see the min runway check
     // in _flush_and_sync_log.
@@ -2721,18 +2722,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length)
       ceph_abort_msg("bluefs enospc");
       return r;
     }
-    if (cct->_conf->bluefs_preextend_wal_files &&
-       h->writer_type == WRITER_WAL) {
-      // NOTE: this *requires* that rocksdb also has log recycling
-      // enabled and is therefore doing robust CRCs on the log
-      // records.  otherwise, we will fail to reply the rocksdb log
-      // properly due to garbage on the device.
-      h->file->fnode.size = h->file->fnode.get_allocated();
-      clear_upto = h->file->fnode.size;
-      dout(10) << __func__ << " extending WAL size to 0x" << std::hex
-              << h->file->fnode.size << std::dec << " to include allocated"
-              << dendl;
-    }
     must_dirty = true;
   }
   if (h->file->fnode.size < offset + length) {
@@ -2793,7 +2782,7 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length)
       }
     }
   }
-  if (length == partial + h->buffer.length() || clear_upto != 0) {
+  if (length == partial + h->buffer.length()) {
     /* in case of inital allocation and need to zero, limited flush is unacceptable */
     bl.claim_append_piecewise(h->buffer);
   } else {
@@ -2821,15 +2810,6 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length)
   } else {
     h->tail_block.clear();
   }
-  if (clear_upto != 0) {
-    if (offset + length < clear_upto) {
-      dout(20) << __func__ << " zeroing WAL log up to 0x"
-               << std::hex << clear_upto
-               << std::dec << dendl;
-      bl.append_zero(clear_upto - (offset + length));
-      length += clear_upto - (offset + length);
-    } 
-  } 
   ceph_assert(bl.length() == length);
 
   switch (h->writer_type) {
@@ -3356,6 +3336,7 @@ BlueFS::FileWriter *BlueFS::_create_writer(FileRef f)
 void BlueFS::_close_writer(FileWriter *h)
 {
   dout(10) << __func__ << " " << h << " type " << h->writer_type << dendl;
+  h->buffer.reassign_to_mempool(mempool::mempool_bluefs_file_writer);
   for (unsigned i=0; i<MAX_BDEV; ++i) {
     if (bdev[i]) {
       if (h->iocv[i]) {
index 442a93c66bb276ff0121155d1856ffd1ff506087..8f80eabaf79613665272b7abab79dc6fba2e0639 100644 (file)
@@ -66,13 +66,13 @@ MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::Onode, bluestore_onode,
 
 // bluestore_cache_other
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::Buffer, bluestore_buffer,
-                             bluestore_cache_other);
+                             bluestore_Buffer);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::Extent, bluestore_extent,
-                             bluestore_cache_other);
+                             bluestore_Extent);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::Blob, bluestore_blob,
-                             bluestore_cache_other);
+                             bluestore_Blob);
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::SharedBlob, bluestore_shared_blob,
-                             bluestore_cache_other);
+                             bluestore_SharedBlob);
 
 // bluestore_txc
 MEMPOOL_DEFINE_OBJECT_FACTORY(BlueStore::TransContext, bluestore_transcontext,
@@ -157,6 +157,11 @@ const string BLUESTORE_GLOBAL_STATFS_KEY = "bluestore_statfs";
  * We use ! as a terminator for strings; this works because it is < #
  * and will get escaped if it is present in the string.
  *
+ * NOTE: There is a bug in this implementation: due to implicit
+ * character type conversion in comparison it may produce unexpected
+ * ordering. Unfortunately fixing the bug would mean invalidating the
+ * keys in existing deployments. Instead we do additional sorting
+ * where it is needed.
  */
 template<typename S>
 static void append_escaped(const string &in, S *out)
@@ -164,11 +169,11 @@ static void append_escaped(const string &in, S *out)
   char hexbyte[in.length() * 3 + 1];
   char* ptr = &hexbyte[0];
   for (string::const_iterator i = in.begin(); i != in.end(); ++i) {
-    if (*i <= '#') {
+    if (*i <= '#') { // bug: unexpected result for *i > 0x7f
       *ptr++ = '#';
       *ptr++ = "0123456789abcdef"[(*i >> 4) & 0x0f];
       *ptr++ = "0123456789abcdef"[*i & 0x0f];
-    } else if (*i >= '~') {
+    } else if (*i >= '~') { // bug: unexpected result for *i > 0x7f
       *ptr++ = '~';
       *ptr++ = "0123456789abcdef"[(*i >> 4) & 0x0f];
       *ptr++ = "0123456789abcdef"[*i & 0x0f];
@@ -290,47 +295,48 @@ static const char *_key_decode_shard(const char *key, shard_id_t *pshard)
   return key + 1;
 }
 
-static void get_coll_key_range(const coll_t& cid, int bits,
-                              string *temp_start, string *temp_end,
-                              string *start, string *end)
+static void get_coll_range(const coll_t& cid, int bits,
+                           ghobject_t *temp_start, ghobject_t *temp_end,
+                           ghobject_t *start, ghobject_t *end)
 {
-  temp_start->clear();
-  temp_end->clear();
-  start->clear();
-  end->clear();
-
   spg_t pgid;
   if (cid.is_pg(&pgid)) {
-    _key_encode_shard(pgid.shard, start);
+    start->shard_id = pgid.shard;
     *temp_start = *start;
 
-    _key_encode_u64(pgid.pool() + 0x8000000000000000ull, start);
-    _key_encode_u64((-2ll - pgid.pool()) + 0x8000000000000000ull, temp_start);
+    start->hobj.pool = pgid.pool();
+    temp_start->hobj.pool = -2ll - pgid.pool();
 
     *end = *start;
     *temp_end = *temp_start;
 
     uint32_t reverse_hash = hobject_t::_reverse_bits(pgid.ps());
-    _key_encode_u32(reverse_hash, start);
-    _key_encode_u32(reverse_hash, temp_start);
+    start->hobj.set_bitwise_key_u32(reverse_hash);
+    temp_start->hobj.set_bitwise_key_u32(reverse_hash);
 
     uint64_t end_hash = reverse_hash  + (1ull << (32 - bits));
     if (end_hash > 0xffffffffull)
       end_hash = 0xffffffffull;
 
-    _key_encode_u32(end_hash, end);
-    _key_encode_u32(end_hash, temp_end);
+    end->hobj.set_bitwise_key_u32(end_hash);
+    temp_end->hobj.set_bitwise_key_u32(end_hash);
   } else {
-    _key_encode_shard(shard_id_t::NO_SHARD, start);
-    _key_encode_u64(-1ull + 0x8000000000000000ull, start);
+    start->shard_id = shard_id_t::NO_SHARD;
+    start->hobj.pool = -1ull;
+
     *end = *start;
-    _key_encode_u32(0, start);
-    _key_encode_u32(0xffffffff, end);
+    start->hobj.set_bitwise_key_u32(0);
+    end->hobj.set_bitwise_key_u32(0xffffffff);
 
     // no separate temp section
     *temp_start = *end;
     *temp_end = *end;
   }
+
+  start->generation = 0;
+  end->generation = 0;
+  temp_start->generation = 0;
+  temp_end->generation = 0;
 }
 
 static void get_shared_blob_key(uint64_t sbid, string *key)
@@ -349,13 +355,15 @@ static int get_key_shared_blob(const string& key, uint64_t *sbid)
 }
 
 template<typename S>
-static int get_key_object(const S& key, ghobject_t *oid)
+static void _key_encode_prefix(const ghobject_t& oid, S *key)
 {
-  int r;
-  const char *p = key.c_str();
+  _key_encode_shard(oid.shard_id, key);
+  _key_encode_u64(oid.hobj.pool + 0x8000000000000000ull, key);
+  _key_encode_u32(oid.hobj.get_bitwise_key_u32(), key);
+}
 
-  if (key.length() < 1 + 8 + 4)
-    return -1;
+static const char *_key_decode_prefix(const char *p, ghobject_t *oid)
+{
   p = _key_decode_shard(p, &oid->shard_id);
 
   uint64_t pool;
@@ -367,6 +375,25 @@ static int get_key_object(const S& key, ghobject_t *oid)
 
   oid->hobj.set_bitwise_key_u32(hash);
 
+  return p;
+}
+
+#define ENCODED_KEY_PREFIX_LEN (1 + 8 + 4)
+
+template<typename S>
+static int get_key_object(const S& key, ghobject_t *oid)
+{
+  int r;
+  const char *p = key.c_str();
+
+  if (key.length() < ENCODED_KEY_PREFIX_LEN)
+    return -1;
+
+  p = _key_decode_prefix(p, oid);
+
+  if (key.length() == ENCODED_KEY_PREFIX_LEN)
+    return -2;
+
   r = decode_escaped(p, &oid->hobj.nspace);
   if (r < 0)
     return -2;
@@ -415,7 +442,7 @@ static void get_object_key(CephContext *cct, const ghobject_t& oid, S *key)
 {
   key->clear();
 
-  size_t max_len = 1 + 8 + 4 +
+  size_t max_len = ENCODED_KEY_PREFIX_LEN +
                   (oid.hobj.nspace.length() * 3 + 1) +
                   (oid.hobj.get_key().length() * 3 + 1) +
                    1 + // for '<', '=', or '>'
@@ -423,9 +450,7 @@ static void get_object_key(CephContext *cct, const ghobject_t& oid, S *key)
                    8 + 8 + 1;
   key->reserve(max_len);
 
-  _key_encode_shard(oid.shard_id, key);
-  _key_encode_u64(oid.hobj.pool + 0x8000000000000000ull, key);
-  _key_encode_u32(oid.hobj.get_bitwise_key_u32(), key);
+  _key_encode_prefix(oid, key);
 
   append_escaped(oid.hobj.nspace, key);
 
@@ -649,6 +674,195 @@ ostream& operator<<(ostream& out, const BlueStore::Buffer& b)
   return out << ")";
 }
 
+namespace {
+
+/*
+ * Due to a bug in key string encoding (see a comment for append_escaped)
+ * the KeyValueDB iterator does not lexicographically sort the same
+ * way that ghobject_t does: objects with the same hash may have wrong order.
+ *
+ * This is the iterator wrapper that fixes the keys order.
+ */
+
+class CollectionListIterator {
+public:
+  CollectionListIterator(const KeyValueDB::Iterator &it)
+    : m_it(it) {
+  }
+  virtual ~CollectionListIterator() {
+  }
+
+  virtual bool valid() const = 0;
+  virtual const ghobject_t &oid() const = 0;
+  virtual void lower_bound(const ghobject_t &oid) = 0;
+  virtual void upper_bound(const ghobject_t &oid) = 0;
+  virtual void next() = 0;
+
+protected:
+  KeyValueDB::Iterator m_it;
+};
+
+class SimpleCollectionListIterator : public CollectionListIterator {
+public:
+  SimpleCollectionListIterator(CephContext *cct, const KeyValueDB::Iterator &it)
+    : CollectionListIterator(it), m_cct(cct) {
+  }
+
+  bool valid() const override {
+    return m_it->valid();
+  }
+
+  const ghobject_t &oid() const override {
+    ceph_assert(valid());
+
+    return m_oid;
+  }
+
+  void lower_bound(const ghobject_t &oid) override {
+    string key;
+    get_object_key(m_cct, oid, &key);
+
+    m_it->lower_bound(key);
+    get_oid();
+  }
+
+  void upper_bound(const ghobject_t &oid) override {
+    string key;
+    get_object_key(m_cct, oid, &key);
+
+    m_it->upper_bound(key);
+    get_oid();
+  }
+
+  void next() override {
+    ceph_assert(valid());
+
+    m_it->next();
+    get_oid();
+  }
+
+private:
+  CephContext *m_cct;
+  ghobject_t m_oid;
+
+  void get_oid() {
+    if (!valid()) {
+      return;
+    }
+
+    if (is_extent_shard_key(m_it->key())) {
+      next();
+      return;
+    }
+
+    m_oid = ghobject_t();
+    int r = get_key_object(m_it->key(), &m_oid);
+    ceph_assert(r == 0);
+  }
+};
+
+class SortedCollectionListIterator : public CollectionListIterator {
+public:
+  SortedCollectionListIterator(const KeyValueDB::Iterator &it)
+    : CollectionListIterator(it), m_chunk_iter(m_chunk.end()) {
+  }
+
+  bool valid() const override {
+    return m_chunk_iter != m_chunk.end();
+  }
+
+  const ghobject_t &oid() const override {
+    ceph_assert(valid());
+
+    return m_chunk_iter->first;
+  }
+
+  void lower_bound(const ghobject_t &oid) override {
+    std::string key;
+    _key_encode_prefix(oid, &key);
+
+    m_it->lower_bound(key);
+    m_chunk_iter = m_chunk.end();
+    if (!get_next_chunk()) {
+      return;
+    }
+
+    if (this->oid().shard_id != oid.shard_id ||
+        this->oid().hobj.pool != oid.hobj.pool ||
+        this->oid().hobj.get_bitwise_key_u32() != oid.hobj.get_bitwise_key_u32()) {
+      return;
+    }
+
+    m_chunk_iter = m_chunk.lower_bound(oid);
+    if (m_chunk_iter == m_chunk.end()) {
+      get_next_chunk();
+    }
+  }
+
+  void upper_bound(const ghobject_t &oid) override {
+    lower_bound(oid);
+
+    if (valid() && this->oid() == oid) {
+      next();
+    }
+  }
+
+  void next() override {
+    ceph_assert(valid());
+
+    m_chunk_iter++;
+    if (m_chunk_iter == m_chunk.end()) {
+      get_next_chunk();
+    }
+  }
+
+private:
+  std::map<ghobject_t, std::string> m_chunk;
+  std::map<ghobject_t, std::string>::iterator m_chunk_iter;
+
+  bool get_next_chunk() {
+    while (m_it->valid() && is_extent_shard_key(m_it->key())) {
+      m_it->next();
+    }
+
+    if (!m_it->valid()) {
+      return false;
+    }
+
+    ghobject_t oid;
+    int r = get_key_object(m_it->key(), &oid);
+    ceph_assert(r == 0);
+
+    m_chunk.clear();
+    while (true) {
+      m_chunk.insert({oid, m_it->key()});
+
+      do {
+        m_it->next();
+      } while (m_it->valid() && is_extent_shard_key(m_it->key()));
+
+      if (!m_it->valid()) {
+        break;
+      }
+
+      ghobject_t next;
+      r = get_key_object(m_it->key(), &next);
+      ceph_assert(r == 0);
+      if (next.shard_id != oid.shard_id ||
+          next.hobj.pool != oid.hobj.pool ||
+          next.hobj.get_bitwise_key_u32() != oid.hobj.get_bitwise_key_u32()) {
+        break;
+      }
+      oid = next;
+    }
+
+    m_chunk_iter = m_chunk.begin();
+    return true;
+  }
+};
+
+} // anonymous namespace
+
 // Garbage Collector
 
 void BlueStore::GarbageCollector::process_protrusive_extents(
@@ -1699,7 +1913,7 @@ void BlueStore::OnodeSpace::rename(
   OnodeRef& oldo,
   const ghobject_t& old_oid,
   const ghobject_t& new_oid,
-  const mempool::bluestore_cache_other::string& new_okey)
+  const mempool::bluestore_cache_meta::string& new_okey)
 {
   std::lock_guard l(cache->lock);
   ldout(cache->cct, 30) << __func__ << " " << old_oid << " -> " << new_oid
@@ -2288,7 +2502,7 @@ void BlueStore::ExtentMap::update(KeyValueDB::Transaction t,
       unsigned n;
       // we need to encode inline_bl to measure encoded length
       bool never_happen = encode_some(0, OBJECT_MAX_SIZE, inline_bl, &n);
-      inline_bl.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+      inline_bl.reassign_to_mempool(mempool::mempool_bluestore_inline_bl);
       ceph_assert(!never_happen);
       size_t len = inline_bl.length();
       dout(20) << __func__ << "  inline shard " << len << " bytes from " << n
@@ -3345,7 +3559,7 @@ BlueStore::Onode* BlueStore::Onode::decode(
   auto p = v.front().begin_deep();
   on->onode.decode(p);
   for (auto& i : on->onode.attrs) {
-    i.second.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+    i.second.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
   }
 
   // initialize extent_map
@@ -3354,7 +3568,7 @@ BlueStore::Onode* BlueStore::Onode::decode(
     denc(on->extent_map.inline_bl, p);
     on->extent_map.decode_some(on->extent_map.inline_bl);
     on->extent_map.inline_bl.reassign_to_mempool(
-      mempool::mempool_bluestore_cache_other);
+      mempool::mempool_bluestore_cache_data);
   }
   else {
     on->extent_map.init_shards(false, false);
@@ -10348,7 +10562,7 @@ int BlueStore::getattr(
   int r;
   {
     std::shared_lock l(c->lock);
-    mempool::bluestore_cache_other::string k(name);
+    mempool::bluestore_cache_meta::string k(name);
 
     OnodeRef o = c->get_onode(oid, false);
     if (!o || !o->exists) {
@@ -10462,7 +10676,28 @@ int BlueStore::collection_list(
   int r;
   {
     std::shared_lock l(c->lock);
-    r = _collection_list(c, start, end, max, ls, pnext);
+    r = _collection_list(c, start, end, max, false, ls, pnext);
+  }
+
+  dout(10) << __func__ << " " << c->cid
+    << " start " << start << " end " << end << " max " << max
+    << " = " << r << ", ls.size() = " << ls->size()
+    << ", next = " << (pnext ? *pnext : ghobject_t())  << dendl;
+  return r;
+}
+
+int BlueStore::collection_list_legacy(
+  CollectionHandle &c_, const ghobject_t& start, const ghobject_t& end, int max,
+  vector<ghobject_t> *ls, ghobject_t *pnext)
+{
+  Collection *c = static_cast<Collection *>(c_.get());
+  c->flush();
+  dout(15) << __func__ << " " << c->cid
+           << " start " << start << " end " << end << " max " << max << dendl;
+  int r;
+  {
+    std::shared_lock l(c->lock);
+    r = _collection_list(c, start, end, max, true, ls, pnext);
   }
 
   dout(10) << __func__ << " " << c->cid
@@ -10474,7 +10709,7 @@ int BlueStore::collection_list(
 
 int BlueStore::_collection_list(
   Collection *c, const ghobject_t& start, const ghobject_t& end, int max,
-  vector<ghobject_t> *ls, ghobject_t *pnext)
+  bool legacy, vector<ghobject_t> *ls, ghobject_t *pnext)
 {
 
   if (!c->exists)
@@ -10483,11 +10718,11 @@ int BlueStore::_collection_list(
   auto start_time = mono_clock::now();
   int r = 0;
   ghobject_t static_next;
-  KeyValueDB::Iterator it;
-  string temp_start_key, temp_end_key;
-  string start_key, end_key;
+  std::unique_ptr<CollectionListIterator> it;
+  ghobject_t coll_range_temp_start, coll_range_temp_end;
+  ghobject_t coll_range_start, coll_range_end;
   bool set_next = false;
-  string pend;
+  ghobject_t pend;
   bool temp;
 
   if (!pnext)
@@ -10496,84 +10731,88 @@ int BlueStore::_collection_list(
   if (start.is_max() || start.hobj.is_max()) {
     goto out;
   }
-  get_coll_key_range(c->cid, c->cnode.bits, &temp_start_key, &temp_end_key,
-    &start_key, &end_key);
+  get_coll_range(c->cid, c->cnode.bits, &coll_range_temp_start,
+                 &coll_range_temp_end, &coll_range_start, &coll_range_end);
   dout(20) << __func__
-    << " range " << pretty_binary_string(temp_start_key)
-    << " to " << pretty_binary_string(temp_end_key)
-    << " and " << pretty_binary_string(start_key)
-    << " to " << pretty_binary_string(end_key)
+    << " range " << coll_range_temp_start
+    << " to " << coll_range_temp_end
+    << " and " << coll_range_start
+    << " to " << coll_range_end
     << " start " << start << dendl;
-  it = db->get_iterator(PREFIX_OBJ);
+  if (legacy) {
+    it = std::make_unique<SimpleCollectionListIterator>(
+      cct, db->get_iterator(PREFIX_OBJ));
+  } else {
+    it = std::make_unique<SortedCollectionListIterator>(
+      db->get_iterator(PREFIX_OBJ));
+  }
   if (start == ghobject_t() ||
     start.hobj == hobject_t() ||
     start == c->cid.get_min_hobj()) {
-    it->upper_bound(temp_start_key);
+    it->upper_bound(coll_range_temp_start);
     temp = true;
   } else {
-    string k;
-    get_object_key(cct, start, &k);
     if (start.hobj.is_temp()) {
       temp = true;
-      ceph_assert(k >= temp_start_key && k < temp_end_key);
+      ceph_assert(start >= coll_range_temp_start && start < coll_range_temp_end);
     } else {
       temp = false;
-      ceph_assert(k >= start_key && k < end_key);
+      ceph_assert(start >= coll_range_start && start < coll_range_end);
     }
-    dout(20) << __func__ << " start from " << pretty_binary_string(k)
-      << " temp=" << (int)temp << dendl;
-    it->lower_bound(k);
+    dout(20) << __func__ << " temp=" << (int)temp << dendl;
+    it->lower_bound(start);
   }
   if (end.hobj.is_max()) {
-    pend = temp ? temp_end_key : end_key;
+    pend = temp ? coll_range_temp_end : coll_range_end;
   } else {
-    get_object_key(cct, end, &end_key);
     if (end.hobj.is_temp()) {
       if (temp)
-       pend = end_key;
+        pend = end;
       else
-       goto out;
+        goto out;
     } else {
-      pend = temp ? temp_end_key : end_key;
+      pend = temp ? coll_range_temp_end : end;
     }
   }
-  dout(20) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
+  dout(20) << __func__ << " pend " << pend << dendl;
   while (true) {
-    if (!it->valid() || it->key() >= pend) {
+    if (!it->valid() || it->oid() >= pend) {
       if (!it->valid())
        dout(20) << __func__ << " iterator not valid (end of db?)" << dendl;
       else
-       dout(20) << __func__ << " key " << pretty_binary_string(it->key())
-                << " >= " << end << dendl;
+       dout(20) << __func__ << " oid " << it->oid() << " >= " << pend << dendl;
       if (temp) {
        if (end.hobj.is_temp()) {
+          if (it->valid() && it->oid() < coll_range_temp_end) {
+            *pnext = it->oid();
+            set_next = true;
+          }
          break;
        }
        dout(30) << __func__ << " switch to non-temp namespace" << dendl;
        temp = false;
-       it->upper_bound(start_key);
-       pend = end_key;
-       dout(30) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
+       it->upper_bound(coll_range_start);
+        if (end.hobj.is_max())
+          pend = coll_range_end;
+        else
+          pend = end;
+       dout(30) << __func__ << " pend " << pend << dendl;
        continue;
       }
+      if (it->valid() && it->oid() < coll_range_end) {
+        *pnext = it->oid();
+        set_next = true;
+      }
       break;
     }
-    dout(30) << __func__ << " key " << pretty_binary_string(it->key()) << dendl;
-    if (is_extent_shard_key(it->key())) {
-      it->next();
-      continue;
-    }
-    ghobject_t oid;
-    int r = get_key_object(it->key(), &oid);
-    ceph_assert(r == 0);
-    dout(20) << __func__ << " oid " << oid << " end " << end << dendl;
+    dout(20) << __func__ << " oid " << it->oid() << " end " << end << dendl;
     if (ls->size() >= (unsigned)max) {
       dout(20) << __func__ << " reached max " << max << dendl;
-      *pnext = oid;
+      *pnext = it->oid();
       set_next = true;
       break;
     }
-    ls->push_back(oid);
+    ls->push_back(it->oid());
     it->next();
   }
 out:
@@ -14330,10 +14569,10 @@ int BlueStore::_setattr(TransContext *txc,
   if (val.is_partial()) {
     auto& b = o->onode.attrs[name.c_str()] = bufferptr(val.c_str(),
                                                       val.length());
-    b.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+    b.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
   } else {
     auto& b = o->onode.attrs[name.c_str()] = val;
-    b.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+    b.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
   }
   txc->write_onode(o);
   dout(10) << __func__ << " " << c->cid << " " << o->oid
@@ -14356,10 +14595,10 @@ int BlueStore::_setattrs(TransContext *txc,
     if (p->second.is_partial()) {
       auto& b = o->onode.attrs[p->first.c_str()] =
        bufferptr(p->second.c_str(), p->second.length());
-      b.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+      b.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
     } else {
       auto& b = o->onode.attrs[p->first.c_str()] = p->second;
-      b.reassign_to_mempool(mempool::mempool_bluestore_cache_other);
+      b.reassign_to_mempool(mempool::mempool_bluestore_cache_meta);
     }
   }
   txc->write_onode(o);
@@ -14771,7 +15010,7 @@ int BlueStore::_rename(TransContext *txc,
           << new_oid << dendl;
   int r;
   ghobject_t old_oid = oldo->oid;
-  mempool::bluestore_cache_other::string new_okey;
+  mempool::bluestore_cache_meta::string new_okey;
 
   if (newo) {
     if (newo->exists) {
@@ -14885,7 +15124,7 @@ int BlueStore::_remove_collection(TransContext *txc, const coll_t &cid,
     // then check if all of them are marked as non-existent.
     // Bypass the check if (next != ghobject_t::get_max())
     r = _collection_list(c->get(), ghobject_t(), ghobject_t::get_max(),
-                         nonexistent_count + 1, &ls, &next);
+                         nonexistent_count + 1, false, &ls, &next);
     if (r >= 0) {
       // If true mean collecton has more objects than nonexistent_count,
       // so bypass check.
index cac64a08d5df482c6c00ee07b5847d22ca839a1c..355e0306bb61ac929b12ab89a68e1419d796d4bb 100644 (file)
@@ -280,7 +280,7 @@ public:
        boost::intrusive::list_member_hook<>,
        &Buffer::state_item> > state_list_t;
 
-    mempool::bluestore_cache_other::map<uint32_t, std::unique_ptr<Buffer>>
+    mempool::bluestore_cache_meta::map<uint32_t, std::unique_ptr<Buffer>>
       buffer_map;
 
     // we use a bare intrusive list here instead of std::map because
@@ -469,7 +469,7 @@ public:
 
     // we use a bare pointer because we don't want to affect the ref
     // count
-    mempool::bluestore_cache_other::unordered_map<uint64_t,SharedBlob*> sb_map;
+    mempool::bluestore_cache_meta::unordered_map<uint64_t,SharedBlob*> sb_map;
 
     SharedBlobRef lookup(uint64_t sbid) {
       std::lock_guard l(lock);
@@ -684,7 +684,7 @@ public:
 #endif
   };
   typedef boost::intrusive_ptr<Blob> BlobRef;
-  typedef mempool::bluestore_cache_other::map<int,BlobRef> blob_map_t;
+  typedef mempool::bluestore_cache_meta::map<int,BlobRef> blob_map_t;
 
   /// a logical extent, pointing to (some portion of) a blob
   typedef boost::intrusive::set_base_hook<boost::intrusive::optimize_size<true> > ExtentBase; //making an alias to avoid build warnings
@@ -792,7 +792,7 @@ public:
       bool loaded = false;   ///< true if shard is loaded
       bool dirty = false;    ///< true if shard is dirty and needs reencoding
     };
-    mempool::bluestore_cache_other::vector<Shard> shards;    ///< shards
+    mempool::bluestore_cache_meta::vector<Shard> shards;    ///< shards
 
     bufferlist inline_bl;    ///< cached encoded map, if unsharded; empty=>dirty
 
@@ -1059,7 +1059,7 @@ public:
     ghobject_t oid;
 
     /// key under PREFIX_OBJ where we are stored
-    mempool::bluestore_cache_other::string key;
+    mempool::bluestore_cache_meta::string key;
 
     boost::intrusive::list_member_hook<> lru_item;
 
@@ -1081,7 +1081,7 @@ public:
     ceph::condition_variable flush_cond;   ///< wait here for uncommitted txns
 
     Onode(Collection *c, const ghobject_t& o,
-         const mempool::bluestore_cache_other::string& k)
+         const mempool::bluestore_cache_meta::string& k)
       : nref(0),
        c(c),
        oid(o),
@@ -1283,7 +1283,7 @@ public:
 
   private:
     /// forward lookups
-    mempool::bluestore_cache_other::unordered_map<ghobject_t,OnodeRef> onode_map;
+    mempool::bluestore_cache_meta::unordered_map<ghobject_t,OnodeRef> onode_map;
 
     friend class Collection; // for split_cache()
 
@@ -1299,7 +1299,7 @@ public:
     OnodeRef lookup(const ghobject_t& o);
     void rename(OnodeRef& o, const ghobject_t& old_oid,
                const ghobject_t& new_oid,
-               const mempool::bluestore_cache_other::string& new_okey);
+               const mempool::bluestore_cache_meta::string& new_okey);
     void clear();
     bool empty();
 
@@ -2161,8 +2161,14 @@ private:
       MetaCache(BlueStore *s) : MempoolCache(s) {};
 
       virtual uint64_t _get_used_bytes() const {
-        return mempool::bluestore_cache_other::allocated_bytes() +
-            mempool::bluestore_cache_onode::allocated_bytes();
+        return mempool::bluestore_Buffer::allocated_bytes() +
+          mempool::bluestore_Blob::allocated_bytes() +
+          mempool::bluestore_Extent::allocated_bytes() +
+          mempool::bluestore_cache_meta::allocated_bytes() +
+          mempool::bluestore_cache_other::allocated_bytes() +
+          mempool::bluestore_cache_onode::allocated_bytes() +
+          mempool::bluestore_SharedBlob::allocated_bytes() +
+          mempool::bluestore_inline_bl::allocated_bytes();
       }
 
       virtual string get_cache_name() const {
@@ -2423,7 +2429,7 @@ private:
 
   int _collection_list(
     Collection *c, const ghobject_t& start, const ghobject_t& end,
-    int max, vector<ghobject_t> *ls, ghobject_t *next);
+    int max, bool legacy, vector<ghobject_t> *ls, ghobject_t *next);
 
   template <typename T, typename F>
   T select_option(const std::string& opt_name, T val1, F f) {
@@ -2744,6 +2750,13 @@ public:
                      int max,
                      vector<ghobject_t> *ls, ghobject_t *next) override;
 
+  int collection_list_legacy(CollectionHandle &c,
+                             const ghobject_t& start,
+                             const ghobject_t& end,
+                             int max,
+                             vector<ghobject_t> *ls,
+                             ghobject_t *next) override;
+
   int omap_get(
     CollectionHandle &c,     ///< [in] Collection containing oid
     const ghobject_t &oid,   ///< [in] Object containing omap
index a0b799422f75a5aeb1efe995fe368743e85c1fc3..d04773728c59be0cb9f5c9cef489f6d051de6d18 100644 (file)
@@ -389,6 +389,10 @@ void bluestore_blob_use_tracker_t::allocate()
 {
   ceph_assert(num_au != 0);
   bytes_per_au = new uint32_t[num_au];
+  mempool::get_pool(
+    mempool::pool_index_t(mempool::mempool_bluestore_cache_other)).
+      adjust_count(1, sizeof(uint32_t) * num_au);
+
   for (uint32_t i = 0; i < num_au; ++i) {
     bytes_per_au[i] = 0;
   }
@@ -1032,6 +1036,8 @@ void bluestore_blob_t::split(uint32_t blob_offset, bluestore_blob_t& rb)
 }
 
 // bluestore_shared_blob_t
+MEMPOOL_DEFINE_OBJECT_FACTORY(bluestore_shared_blob_t, bluestore_shared_blob_t,
+                 bluestore_cache_other);
 
 void bluestore_shared_blob_t::dump(Formatter *f) const
 {
index 7ed4eb7b04de02ccbc1fb63162959ca58948c4ae..f0cc26c08cfe9295820d520b95cd8f9407c88184 100644 (file)
@@ -266,6 +266,9 @@ struct bluestore_blob_use_tracker_t {
   void clear() {
     if (num_au != 0) {
       delete[] bytes_per_au;
+      mempool::get_pool(
+        mempool::pool_index_t(mempool::mempool_bluestore_cache_other)).
+          adjust_count(-1, -sizeof(uint32_t) * num_au);
     }
     bytes_per_au = 0;
     au_size = 0;
@@ -866,6 +869,7 @@ ostream& operator<<(ostream& out, const bluestore_blob_t& o);
 
 /// shared blob state
 struct bluestore_shared_blob_t {
+  MEMPOOL_CLASS_HELPERS();
   uint64_t sbid;                       ///> shared blob id
   bluestore_extent_ref_map_t ref_map;  ///< shared blob extents
 
@@ -896,7 +900,8 @@ ostream& operator<<(ostream& out, const bluestore_shared_blob_t& o);
 struct bluestore_onode_t {
   uint64_t nid = 0;                    ///< numeric id (locally unique)
   uint64_t size = 0;                   ///< object size
-  map<mempool::bluestore_cache_other::string, bufferptr> attrs;        ///< attrs
+  // mempool to be assigned to buffer::ptr manually
+  std::map<mempool::bluestore_cache_meta::string, ceph::buffer::ptr> attrs;
 
   struct shard_info {
     uint32_t offset = 0;  ///< logical offset for start of shard
index 77ccfe0055263f522d16ffe6aca998e2118acd35..00cce936f1ecfc7292b37c7b6520ecf7fc550634 100644 (file)
@@ -89,10 +89,10 @@ static void append_escaped(const string &in, string *out)
 {
   char hexbyte[8];
   for (string::const_iterator i = in.begin(); i != in.end(); ++i) {
-    if (*i <= '#') {
+    if ((unsigned char)*i <= '#') {
       snprintf(hexbyte, sizeof(hexbyte), "#%02x", (uint8_t)*i);
       out->append(hexbyte);
-    } else if (*i >= '~') {
+    } else if ((unsigned char)*i >= '~') {
       snprintf(hexbyte, sizeof(hexbyte), "~%02x", (uint8_t)*i);
       out->append(hexbyte);
     } else {
@@ -1531,14 +1531,16 @@ int KStore::_collection_list(
   if (end.hobj.is_max()) {
     pend = temp ? temp_end_key : end_key;
   } else {
-    get_object_key(cct, end, &end_key);
     if (end.hobj.is_temp()) {
       if (temp)
-       pend = end_key;
+        get_object_key(cct, end, &pend);
       else
        goto out;
     } else {
-      pend = temp ? temp_end_key : end_key;
+      if (temp)
+        pend = temp_end_key;
+      else
+        get_object_key(cct, end, &pend);
     }
   }
   dout(20) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
@@ -1551,15 +1553,28 @@ int KStore::_collection_list(
                 << " > " << end << dendl;
       if (temp) {
        if (end.hobj.is_temp()) {
+          if (it->valid() && it->key() < temp_end_key) {
+            int r = get_key_object(it->key(), pnext);
+            ceph_assert(r == 0);
+            set_next = true;
+          }
          break;
        }
        dout(30) << __func__ << " switch to non-temp namespace" << dendl;
        temp = false;
        it->upper_bound(start_key);
-       pend = end_key;
+        if (end.hobj.is_max())
+          pend = end_key;
+        else
+          get_object_key(cct, end, &pend);
        dout(30) << __func__ << " pend " << pretty_binary_string(pend) << dendl;
        continue;
       }
+      if (it->valid() && it->key() < end_key) {
+        int r = get_key_object(it->key(), pnext);
+        ceph_assert(r == 0);
+        set_next = true;
+      }
       break;
     }
     dout(20) << __func__ << " key " << pretty_binary_string(it->key()) << dendl;
index 7b6e1aca215d448af9bb7df24ac1f6bc60bd1f8c..34dd356ebf6e8d2605702a62a4df6243b0c96c13 100644 (file)
@@ -250,7 +250,7 @@ OSDService::OSDService(OSD *osd) :
   promote_max_bytes(0),
   objecter(make_unique<Objecter>(osd->client_messenger->cct,
                                 osd->objecter_messenger,
-                                osd->monc, nullptr, 0, 0)),
+                                osd->monc, nullptr)),
   m_objecter_finishers(cct->_conf->osd_objecter_finishers),
   watch_timer(osd->client_messenger->cct, watch_lock),
   next_notif_id(0),
index 4afcec660882a38f96c59850c847f7ad68fe16d3..e5a921499438693557fc41fde73d848a7028fd63 100644 (file)
@@ -2643,24 +2643,6 @@ void PG::abort_scrub()
  */
 void PG::chunky_scrub(ThreadPool::TPHandle &handle)
 {
-  // Since repair is only by request and we need to scrub afterward
-  // treat the same as req_scrub.
-  if (!scrubber.req_scrub) {
-    if (state_test(PG_STATE_DEEP_SCRUB)) {
-      if (get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB) ||
-         pool.info.has_flag(pg_pool_t::FLAG_NODEEP_SCRUB)) {
-           dout(10) << "nodeep_scrub set, aborting" << dendl;
-       abort_scrub();
-        return;
-      }
-    } else if (state_test(PG_STATE_SCRUBBING)) {
-      if (get_osdmap()->test_flag(CEPH_OSDMAP_NOSCRUB) || pool.info.has_flag(pg_pool_t::FLAG_NOSCRUB)) {
-         dout(10) << "noscrub set, aborting" << dendl;
-        abort_scrub();
-         return;
-      }
-    }
-  }
   // check for map changes
   if (scrubber.is_chunky_scrub_active()) {
     if (scrubber.epoch_start != info.history.same_interval_since) {
@@ -2906,6 +2888,24 @@ void PG::chunky_scrub(ThreadPool::TPHandle &handle)
           done = true;
          break;
        }
+        // Since repair is only by request and we need to scrub afterward
+        // treat the same as req_scrub.
+        if (!scrubber.req_scrub) {
+          if (state_test(PG_STATE_DEEP_SCRUB)) {
+            if (get_osdmap()->test_flag(CEPH_OSDMAP_NODEEP_SCRUB) ||
+               pool.info.has_flag(pg_pool_t::FLAG_NODEEP_SCRUB)) {
+              dout(10) << "nodeep_scrub set, aborting" << dendl;
+             abort_scrub();
+              return;
+            }
+          } else if (state_test(PG_STATE_SCRUBBING)) {
+            if (get_osdmap()->test_flag(CEPH_OSDMAP_NOSCRUB) || pool.info.has_flag(pg_pool_t::FLAG_NOSCRUB)) {
+              dout(10) << "noscrub set, aborting" << dendl;
+             abort_scrub();
+              return;
+            }
+          }
+        }
        // end (possible) preemption window
        scrub_can_preempt = false;
        if (scrub_preempted) {
index 06bb0f423f37f16efede853f3bf0804150775bae..be93941196734c73a10a99aa78061dd5763f361a 100644 (file)
@@ -350,13 +350,24 @@ int PGBackend::objects_list_partial(
 
   while (!_next.is_max() && ls->size() < (unsigned)min) {
     vector<ghobject_t> objects;
-    r = store->collection_list(
-      ch,
-      _next,
-      ghobject_t::get_max(),
-      max - ls->size(),
-      &objects,
-      &_next);
+    if (HAVE_FEATURE(parent->min_upacting_features(),
+                     OSD_FIXED_COLLECTION_LIST)) {
+      r = store->collection_list(
+        ch,
+        _next,
+        ghobject_t::get_max(),
+        max - ls->size(),
+        &objects,
+        &_next);
+    } else {
+      r = store->collection_list_legacy(
+        ch,
+        _next,
+        ghobject_t::get_max(),
+        max - ls->size(),
+        &objects,
+        &_next);
+    }
     if (r != 0) {
       derr << __func__ << " list collection " << ch << " got: " << cpp_strerror(r) << dendl;
       break;
@@ -385,13 +396,25 @@ int PGBackend::objects_list_range(
 {
   ceph_assert(ls);
   vector<ghobject_t> objects;
-  int r = store->collection_list(
-    ch,
-    ghobject_t(start, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
-    ghobject_t(end, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
-    INT_MAX,
-    &objects,
-    NULL);
+  int r;
+  if (HAVE_FEATURE(parent->min_upacting_features(),
+                   OSD_FIXED_COLLECTION_LIST)) {
+    r = store->collection_list(
+      ch,
+      ghobject_t(start, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
+      ghobject_t(end, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
+      INT_MAX,
+      &objects,
+      NULL);
+  } else {
+    r = store->collection_list_legacy(
+      ch,
+      ghobject_t(start, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
+      ghobject_t(end, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard),
+      INT_MAX,
+      &objects,
+      NULL);
+  }
   ls->reserve(objects.size());
   for (vector<ghobject_t>::iterator i = objects.begin();
        i != objects.end();
index 4a952c4ed8bd9ca4173a6a95623f070eacc5ad94..b4c598feb2208b79627777b9a931e82709ead4dc 100644 (file)
@@ -273,6 +273,7 @@ typedef std::shared_ptr<const OSDMap> OSDMapRef;
      virtual spg_t primary_spg_t() const = 0;
      virtual pg_shard_t primary_shard() const = 0;
      virtual uint64_t min_peer_features() const = 0;
+     virtual uint64_t min_upacting_features() const = 0;
      virtual hobject_t get_temp_recovery_object(const hobject_t& target,
                                                eversion_t version) = 0;
 
index afa54ab503adc21de938432b850fb7127fea3a72..9d1c12366a59d44a57aa4c09aba3c52b96f146a4 100644 (file)
@@ -538,6 +538,9 @@ public:
   uint64_t min_peer_features() const override {
     return recovery_state.get_min_peer_features();
   }
+  uint64_t min_upacting_features() const override {
+    return recovery_state.get_min_upacting_features();
+  }
   void send_message_osd_cluster(
     int peer, Message *m, epoch_t from_epoch) override {
     osd->send_message_osd_cluster(peer, m, from_epoch);
index a26d3e96029b5c5e1abbb14247b1cd342fc80648..5c00293e6645eb2cc16982a42361a772a4573ea9 100644 (file)
@@ -704,7 +704,8 @@ void Journaler::wait_for_flush(Context *onsafe)
 {
   lock_guard l(lock);
   if (is_stopping()) {
-    onsafe->complete(-EAGAIN);
+    if (onsafe)
+      onsafe->complete(-EAGAIN);
     return;
   }
   _wait_for_flush(onsafe);
@@ -737,7 +738,8 @@ void Journaler::flush(Context *onsafe)
 {
   lock_guard l(lock);
   if (is_stopping()) {
-    onsafe->complete(-EAGAIN);
+    if (onsafe)
+      onsafe->complete(-EAGAIN);
     return;
   }
   _flush(wrap_finisher(onsafe));
index b5c336b3a9a94142a7b6173a298aef3c1d29ebc4..27df042f2f86c5c6c90c625a2fb492cb068cf2cc 100644 (file)
@@ -1719,6 +1719,7 @@ int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Context *onfreespace,
     trace.event("start");
   }
 
+  list<Context*> wait_for_reads;
   for (vector<ObjectExtent>::iterator ex_it = wr->extents.begin();
        ex_it != wr->extents.end();
        ++ex_it) {
@@ -1732,6 +1733,12 @@ int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Context *onfreespace,
     bool missing = bh->is_missing();
     bh->snapc = wr->snapc;
 
+    // readers that need to be woken up due to an overwrite
+    for (auto& [_, wait_for_read] : bh->waitfor_read) {
+      wait_for_reads.splice(wait_for_reads.end(), wait_for_read);
+    }
+    bh->waitfor_read.clear();
+
     bytes_written += ex_it->length;
     if (bh->is_tx()) {
       bytes_written_in_flush += ex_it->length;
@@ -1791,6 +1798,8 @@ int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Context *onfreespace,
   int r = _wait_for_write(wr, bytes_written, oset, &trace, onfreespace);
   delete wr;
 
+  finish_contexts(cct, wait_for_reads, 0);
+
   //verify_stats();
   trim();
   return r;
index f16e4855093f2cc7aaae6e19f5c4e776b615ed62..ff8c1c48e162b73cea0c4a5418e25f7f71eceef5 100644 (file)
@@ -167,11 +167,6 @@ enum {
 
 // config obs ----------------------------
 
-static const char *config_keys[] = {
-  "crush_location",
-  NULL
-};
-
 class Objecter::RequestStateHook : public AdminSocketHook {
   Objecter *m_objecter;
 public:
@@ -232,6 +227,12 @@ Objecter::OSDSession::unique_completion_lock Objecter::OSDSession::get_lock(
 
 const char** Objecter::get_tracked_conf_keys() const
 {
+  static const char *config_keys[] = {
+    "crush_location",
+    "rados_mon_op_timeout",
+    "rados_osd_op_timeout",
+    NULL
+  };
   return config_keys;
 }
 
@@ -242,6 +243,12 @@ void Objecter::handle_conf_change(const ConfigProxy& conf,
   if (changed.count("crush_location")) {
     update_crush_location();
   }
+  if (changed.count("rados_mon_op_timeout")) {
+    mon_timeout = conf.get_val<std::chrono::seconds>("rados_mon_op_timeout");
+  }
+  if (changed.count("rados_osd_op_timeout")) {
+    osd_timeout = conf.get_val<std::chrono::seconds>("rados_osd_op_timeout");
+  }
 }
 
 void Objecter::update_crush_location()
@@ -4962,20 +4969,19 @@ Objecter::OSDSession::~OSDSession()
 }
 
 Objecter::Objecter(CephContext *cct_, Messenger *m, MonClient *mc,
-                  Finisher *fin,
-                  double mon_timeout,
-                  double osd_timeout) :
+                  Finisher *fin) :
   Dispatcher(cct_), messenger(m), monc(mc), finisher(fin),
   trace_endpoint("0.0.0.0", 0, "Objecter"),
   osdmap{std::make_unique<OSDMap>()},
   homeless_session(new OSDSession(cct, -1)),
-  mon_timeout(ceph::make_timespan(mon_timeout)),
-  osd_timeout(ceph::make_timespan(osd_timeout)),
   op_throttle_bytes(cct, "objecter_bytes",
                    cct->_conf->objecter_inflight_op_bytes),
   op_throttle_ops(cct, "objecter_ops", cct->_conf->objecter_inflight_ops),
   retry_writes_after_first_reply(cct->_conf->objecter_retry_writes_after_first_reply)
-{}
+{
+  mon_timeout = cct->_conf.get_val<std::chrono::seconds>("rados_mon_op_timeout");
+  osd_timeout = cct->_conf.get_val<std::chrono::seconds>("rados_osd_op_timeout");
+}
 
 Objecter::~Objecter()
 {
index 8db78558901060eb095ab33b496344bc9a666703..e676582788c67071f9f0221aacb545cc7eaac57a 100644 (file)
@@ -2119,9 +2119,7 @@ private:
 
  public:
   Objecter(CephContext *cct_, Messenger *m, MonClient *mc,
-          Finisher *fin,
-          double mon_timeout,
-          double osd_timeout);
+          Finisher *fin);
   ~Objecter() override;
 
   void init();
index e7fd0329e54e98302078c9af5c6a2da04274f091..b748f5d85f784abf3cd2a30b7b52f17c36580bb7 100644 (file)
@@ -215,6 +215,7 @@ CEPHFSVOLUMECLIENT_VERSION_HISTORY = """
     * 2 - Added get_object, put_object, delete_object methods to CephFSVolumeClient
     * 3 - Allow volumes to be created without RADOS namespace isolation
     * 4 - Added get_object_and_version, put_object_versioned method to CephFSVolumeClient
+    * 5 - Disallow authorize API for users not created by CephFSVolumeClient
 """
 
 
@@ -238,7 +239,7 @@ class CephFSVolumeClient(object):
     """
 
     # Current version
-    version = 4
+    version = 5
 
     # Where shall we create our volumes?
     POOL_PREFIX = "fsvolume_"
@@ -379,7 +380,18 @@ class CephFSVolumeClient(object):
                     continue
 
                 readonly = access_level == 'r'
-                self._authorize_volume(volume_path, auth_id, readonly)
+                client_entity = "client.{0}".format(auth_id)
+                try:
+                    existing_caps = self._rados_command(
+                        'auth get',
+                        {
+                            'entity': client_entity
+                        }
+                    )
+                    # FIXME: rados raising Error instead of ObjectNotFound in auth get failure
+                except rados.Error:
+                    existing_caps = None
+                self._authorize_volume(volume_path, auth_id, readonly, existing_caps)
 
             # Recovered from partial auth updates for the auth ID's access
             # to a volume.
@@ -940,7 +952,27 @@ class CephFSVolumeClient(object):
         data['version'] = self.version
         return self._metadata_set(self._volume_metadata_path(volume_path), data)
 
-    def authorize(self, volume_path, auth_id, readonly=False, tenant_id=None):
+    def _prepare_updated_caps_list(self, existing_caps, mds_cap_str, osd_cap_str, authorize=True):
+        caps_list = []
+        for k, v in existing_caps['caps'].items():
+            if k == 'mds' or k == 'osd':
+                continue
+            elif k == 'mon':
+                if not authorize and v == 'allow r':
+                    continue
+            caps_list.extend((k,v))
+
+        if mds_cap_str:
+            caps_list.extend(('mds', mds_cap_str))
+        if osd_cap_str:
+            caps_list.extend(('osd', osd_cap_str))
+
+        if authorize and 'mon' not in caps_list:
+            caps_list.extend(('mon', 'allow r'))
+
+        return caps_list
+
+    def authorize(self, volume_path, auth_id, readonly=False, tenant_id=None, allow_existing_id=False):
         """
         Get-or-create a Ceph auth identity for `auth_id` and grant them access
         to
@@ -950,10 +982,24 @@ class CephFSVolumeClient(object):
         :param tenant_id: Optionally provide a stringizable object to
                           restrict any created cephx IDs to other callers
                           passing the same tenant ID.
+        :allow_existing_id: Optionally authorize existing auth-ids not
+                            created by ceph_volume_client
         :return:
         """
 
         with self._auth_lock(auth_id):
+            client_entity = "client.{0}".format(auth_id)
+            try:
+                existing_caps = self._rados_command(
+                    'auth get',
+                    {
+                        'entity': client_entity
+                    }
+                )
+                # FIXME: rados raising Error instead of ObjectNotFound in auth get failure
+            except rados.Error:
+                existing_caps = None
+
             # Existing meta, or None, to be updated
             auth_meta = self._auth_metadata_get(auth_id)
 
@@ -967,7 +1013,14 @@ class CephFSVolumeClient(object):
                     'dirty': True,
                 }
             }
+
             if auth_meta is None:
+                if not allow_existing_id and existing_caps is not None:
+                    msg = "auth ID: {0} exists and not created by ceph_volume_client. Not allowed to modify".format(auth_id)
+                    log.error(msg)
+                    raise CephFSVolumeClientError(msg)
+
+                # non-existent auth IDs
                 sys.stderr.write("Creating meta for ID {0} with tenant {1}\n".format(
                     auth_id, tenant_id
                 ))
@@ -977,14 +1030,6 @@ class CephFSVolumeClient(object):
                     'tenant_id': tenant_id.__str__() if tenant_id else None,
                     'volumes': volume
                 }
-
-                # Note: this is *not* guaranteeing that the key doesn't already
-                # exist in Ceph: we are allowing VolumeClient tenants to
-                # 'claim' existing Ceph keys.  In order to prevent VolumeClient
-                # tenants from reading e.g. client.admin keys, you need to
-                # have configured your VolumeClient user (e.g. Manila) to
-                # have mon auth caps that prevent it from accessing those keys
-                # (e.g. limit it to only access keys with a manila.* prefix)
             else:
                 # Disallow tenants to share auth IDs
                 if auth_meta['tenant_id'].__str__() != tenant_id.__str__():
@@ -1004,7 +1049,7 @@ class CephFSVolumeClient(object):
             self._auth_metadata_set(auth_id, auth_meta)
 
             with self._volume_lock(volume_path):
-                key = self._authorize_volume(volume_path, auth_id, readonly)
+                key = self._authorize_volume(volume_path, auth_id, readonly, existing_caps)
 
             auth_meta['dirty'] = False
             auth_meta['volumes'][volume_path_str]['dirty'] = False
@@ -1021,7 +1066,7 @@ class CephFSVolumeClient(object):
                     'auth_key': None
                 }
 
-    def _authorize_volume(self, volume_path, auth_id, readonly):
+    def _authorize_volume(self, volume_path, auth_id, readonly, existing_caps):
         vol_meta = self._volume_metadata_get(volume_path)
 
         access_level = 'r' if readonly else 'rw'
@@ -1040,14 +1085,14 @@ class CephFSVolumeClient(object):
             vol_meta['auths'].update(auth)
             self._volume_metadata_set(volume_path, vol_meta)
 
-        key = self._authorize_ceph(volume_path, auth_id, readonly)
+        key = self._authorize_ceph(volume_path, auth_id, readonly, existing_caps)
 
         vol_meta['auths'][auth_id]['dirty'] = False
         self._volume_metadata_set(volume_path, vol_meta)
 
         return key
 
-    def _authorize_ceph(self, volume_path, auth_id, readonly):
+    def _authorize_ceph(self, volume_path, auth_id, readonly, existing_caps):
         path = self._get_path(volume_path)
         log.debug("Authorizing Ceph id '{0}' for path '{1}'".format(
             auth_id, path
@@ -1075,15 +1120,7 @@ class CephFSVolumeClient(object):
             want_osd_cap = 'allow {0} pool={1}'.format(want_access_level,
                                                        pool_name)
 
-        try:
-            existing = self._rados_command(
-                'auth get',
-                {
-                    'entity': client_entity
-                }
-            )
-            # FIXME: rados raising Error instead of ObjectNotFound in auth get failure
-        except rados.Error:
+        if existing_caps is None:
             caps = self._rados_command(
                 'auth get-or-create',
                 {
@@ -1095,7 +1132,7 @@ class CephFSVolumeClient(object):
                 })
         else:
             # entity exists, update it
-            cap = existing[0]
+            cap = existing_caps[0]
 
             # Construct auth caps that if present might conflict with the desired
             # auth caps.
@@ -1115,8 +1152,8 @@ class CephFSVolumeClient(object):
                 if not orig_mds_caps:
                     return want_mds_cap, want_osd_cap
 
-                mds_cap_tokens = orig_mds_caps.split(",")
-                osd_cap_tokens = orig_osd_caps.split(",")
+                mds_cap_tokens = [x.strip() for x in orig_mds_caps.split(",")]
+                osd_cap_tokens = [x.strip() for x in orig_osd_caps.split(",")]
 
                 if want_mds_cap in mds_cap_tokens:
                     return orig_mds_caps, orig_osd_caps
@@ -1137,15 +1174,14 @@ class CephFSVolumeClient(object):
                 orig_mds_caps, orig_osd_caps, want_mds_cap, want_osd_cap,
                 unwanted_mds_cap, unwanted_osd_cap)
 
+            caps_list = self._prepare_updated_caps_list(cap, mds_cap_str, osd_cap_str)
             caps = self._rados_command(
                 'auth caps',
                 {
                     'entity': client_entity,
-                    'caps': [
-                        'mds', mds_cap_str,
-                        'osd', osd_cap_str,
-                        'mon', cap['caps'].get('mon', 'allow r')]
+                    'caps': caps_list
                 })
+
             caps = self._rados_command(
                 'auth get',
                 {
@@ -1270,8 +1306,8 @@ class CephFSVolumeClient(object):
             )
 
             def cap_remove(orig_mds_caps, orig_osd_caps, want_mds_caps, want_osd_caps):
-                mds_cap_tokens = orig_mds_caps.split(",")
-                osd_cap_tokens = orig_osd_caps.split(",")
+                mds_cap_tokens = [x.strip() for x in orig_mds_caps.split(",")]
+                osd_cap_tokens = [x.strip() for x in orig_osd_caps.split(",")]
 
                 for want_mds_cap, want_osd_cap in zip(want_mds_caps, want_osd_caps):
                     if want_mds_cap in mds_cap_tokens:
@@ -1287,17 +1323,15 @@ class CephFSVolumeClient(object):
             mds_cap_str, osd_cap_str = cap_remove(orig_mds_caps, orig_osd_caps,
                                                   want_mds_caps, want_osd_caps)
 
-            if not mds_cap_str:
+            caps_list = self._prepare_updated_caps_list(cap, mds_cap_str, osd_cap_str, authorize=False)
+            if not caps_list:
                 self._rados_command('auth del', {'entity': client_entity}, decode=False)
             else:
                 self._rados_command(
                     'auth caps',
                     {
                         'entity': client_entity,
-                        'caps': [
-                            'mds', mds_cap_str,
-                            'osd', osd_cap_str,
-                            'mon', cap['caps'].get('mon', 'allow r')]
+                        'caps': caps_list
                     })
 
         # FIXME: rados raising Error instead of ObjectNotFound in auth get failure
index 916ef81eccc4a2e17d21bfcd6b2d016c10dbd4ff..efe8a3e6db250abb2073394a2440cd9c5f56c385 100644 (file)
@@ -269,6 +269,10 @@ class ObjectNotEmpty(OSError):
 class NotDirectory(OSError):
     pass
 
+class DiskQuotaExceeded(OSError):
+    pass
+
+
 IF UNAME_SYSNAME == "FreeBSD":
     cdef errno_to_exception =  {
         errno.EPERM      : PermissionError,
@@ -282,6 +286,7 @@ IF UNAME_SYSNAME == "FreeBSD":
         errno.ERANGE     : OutOfRange,
         errno.EWOULDBLOCK: WouldBlock,
         errno.ENOTEMPTY  : ObjectNotEmpty,
+        errno.EDQUOT     : DiskQuotaExceeded,
     }
 ELSE:
     cdef errno_to_exception =  {
@@ -296,7 +301,8 @@ ELSE:
         errno.ERANGE     : OutOfRange,
         errno.EWOULDBLOCK: WouldBlock,
         errno.ENOTEMPTY  : ObjectNotEmpty,
-        errno.ENOTDIR    : NotDirectory
+        errno.ENOTDIR    : NotDirectory,
+        errno.EDQUOT     : DiskQuotaExceeded,
     }
 
 
@@ -509,13 +515,18 @@ cdef class LibCephFS(object):
             raise Error("libcephfs_initialize failed with error code: %d" % ret)
         self.state = "configuring"
 
-    def create(self, conf=None, conffile=None, auth_id=None):
+    NO_CONF_FILE = -1
+    "special value that indicates no conffile should be read when creating a mount handle"
+    DEFAULT_CONF_FILES = -2
+    "special value that indicates the default conffiles should be read when creating a mount handle"
+
+    def create(self, conf=None, conffile=NO_CONF_FILE, auth_id=None):
         """
         Create a mount handle for interacting with Ceph.  All libcephfs
         functions operate on a mount info handle.
         
         :param conf dict opt: settings overriding the default ones and conffile
-        :param conffile str opt: the path to ceph.conf to override the default settings
+        :param conffile Union[int,str], optional: the path to ceph.conf to override the default settings
         :auth_id str opt: the id used to authenticate the client entity
         """
         if conf is not None and not isinstance(conf, dict):
@@ -533,10 +544,11 @@ cdef class LibCephFS(object):
             raise Error("libcephfs_initialize failed with error code: %d" % ret)
 
         self.state = "configuring"
-        if conffile is not None:
-            # read the default conf file when '' is given
-            if conffile == '':
-                conffile = None
+        if conffile in (self.NO_CONF_FILE, None):
+            pass
+        elif conffile in (self.DEFAULT_CONF_FILES, ''):
+            self.conf_read_file(None)
+        else:
             self.conf_read_file(conffile)
         if conf is not None:
             for key, value in conf.iteritems():
index 3780e749f72d618209cc32bbb9545868dc5acfee..9e9345fe2e313d752fdc7b6732812e1beb8c71a5 100644 (file)
@@ -9,6 +9,7 @@ import six
 import orchestrator
 from ceph.deployment import inventory
 from ceph.deployment.service_spec import ServiceSpec
+from cephadm.utils import str_to_datetime, datetime_to_str
 from orchestrator import OrchestratorError, HostSpec, OrchestratorEvent
 
 if TYPE_CHECKING:
@@ -19,7 +20,6 @@ logger = logging.getLogger(__name__)
 
 HOST_CACHE_PREFIX = "host."
 SPEC_STORE_PREFIX = "spec."
-DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 
 
 class Inventory:
@@ -87,17 +87,17 @@ class Inventory:
                 else:
                     yield h
 
-    def spec_from_dict(self, info):
+    def spec_from_dict(self, info) -> HostSpec:
         hostname = info['hostname']
         return HostSpec(
-                hostname,
-                addr=info.get('addr', hostname),
-                labels=info.get('labels', []),
-                status='Offline' if hostname in self.mgr.offline_hosts else info.get('status', ''),
-            )
+            hostname,
+            addr=info.get('addr', hostname),
+            labels=info.get('labels', []),
+            status='Offline' if hostname in self.mgr.offline_hosts else info.get('status', ''),
+        )
 
-    def all_specs(self) -> Iterator[HostSpec]:
-        return map(self.spec_from_dict, self._inventory.values())
+    def all_specs(self) -> List[HostSpec]:
+        return list(map(self.spec_from_dict, self._inventory.values()))
 
     def save(self):
         self.mgr.set_store('inventory', json.dumps(self._inventory))
@@ -107,9 +107,9 @@ class SpecStore():
     def __init__(self, mgr):
         # type: (CephadmOrchestrator) -> None
         self.mgr = mgr
-        self.specs = {} # type: Dict[str, ServiceSpec]
-        self.spec_created = {} # type: Dict[str, datetime.datetime]
-        self.spec_preview = {} # type: Dict[str, ServiceSpec]
+        self.specs = {}  # type: Dict[str, ServiceSpec]
+        self.spec_created = {}  # type: Dict[str, datetime.datetime]
+        self.spec_preview = {}  # type: Dict[str, ServiceSpec]
 
     def load(self):
         # type: () -> None
@@ -118,7 +118,7 @@ class SpecStore():
             try:
                 v = json.loads(v)
                 spec = ServiceSpec.from_json(v['spec'])
-                created = datetime.datetime.strptime(v['created'], DATEFMT)
+                created = str_to_datetime(v['created'])
                 self.specs[service_name] = spec
                 self.spec_created[service_name] = created
                 self.mgr.log.debug('SpecStore: loaded spec for %s' % (
@@ -139,7 +139,7 @@ class SpecStore():
             SPEC_STORE_PREFIX + spec.service_name(),
             json.dumps({
                 'spec': spec.to_json(),
-                'created': self.spec_created[spec.service_name()].strftime(DATEFMT),
+                'created': datetime_to_str(self.spec_created[spec.service_name()]),
             }, sort_keys=True),
         )
         self.mgr.events.for_service(spec, OrchestratorEvent.INFO, 'service was created')
@@ -164,6 +164,7 @@ class SpecStore():
             service_name, specs))
         return specs
 
+
 class HostCache():
     def __init__(self, mgr):
         # type: (CephadmOrchestrator) -> None
@@ -174,9 +175,9 @@ class HostCache():
         self.osdspec_previews = {}     # type: Dict[str, List[Dict[str, Any]]]
         self.networks = {}             # type: Dict[str, Dict[str, List[str]]]
         self.last_device_update = {}   # type: Dict[str, datetime.datetime]
-        self.daemon_refresh_queue = [] # type: List[str]
-        self.device_refresh_queue = [] # type: List[str]
-        self.osdspec_previews_refresh_queue = [] # type: List[str]
+        self.daemon_refresh_queue = []  # type: List[str]
+        self.device_refresh_queue = []  # type: List[str]
+        self.osdspec_previews_refresh_queue = []  # type: List[str]
 
         # host -> daemon name -> dict
         self.daemon_config_deps = {}   # type: Dict[str, Dict[str, Dict[str,Any]]]
@@ -185,6 +186,8 @@ class HostCache():
         self.last_etc_ceph_ceph_conf: Dict[str, datetime.datetime] = {}
         self.registry_login_queue: Set[str] = set()
 
+        self.scheduled_daemon_actions: Dict[str, Dict[str, str]] = {}
+
     def load(self):
         # type: () -> None
         for k, v in six.iteritems(self.mgr.get_store_prefix(HOST_CACHE_PREFIX)):
@@ -196,8 +199,7 @@ class HostCache():
             try:
                 j = json.loads(v)
                 if 'last_device_update' in j:
-                    self.last_device_update[host] = datetime.datetime.strptime(
-                        j['last_device_update'], DATEFMT)
+                    self.last_device_update[host] = str_to_datetime(j['last_device_update'])
                 else:
                     self.device_refresh_queue.append(host)
                 # for services, we ignore the persisted last_*_update
@@ -219,16 +221,16 @@ class HostCache():
                 for name, d in j.get('daemon_config_deps', {}).items():
                     self.daemon_config_deps[host][name] = {
                         'deps': d.get('deps', []),
-                        'last_config': datetime.datetime.strptime(
-                            d['last_config'], DATEFMT),
+                        'last_config': str_to_datetime(d['last_config']),
                     }
                 if 'last_host_check' in j:
-                    self.last_host_check[host] = datetime.datetime.strptime(
-                        j['last_host_check'], DATEFMT)
+                    self.last_host_check[host] = str_to_datetime(j['last_host_check'])
                 if 'last_etc_ceph_ceph_conf' in j:
-                    self.last_etc_ceph_ceph_conf[host] = datetime.datetime.strptime(
-                        j['last_etc_ceph_ceph_conf'], DATEFMT)
+                    self.last_etc_ceph_ceph_conf[host] = str_to_datetime(
+                        j['last_etc_ceph_ceph_conf'])
                 self.registry_login_queue.add(host)
+                self.scheduled_daemon_actions[host] = j.get('scheduled_daemon_actions', {})
+
                 self.mgr.log.debug(
                     'HostCache.load: host %s has %d daemons, '
                     '%d devices, %d networks' % (
@@ -288,40 +290,41 @@ class HostCache():
         if host in self.last_device_update:
             del self.last_device_update[host]
         self.mgr.event.set()
-    
+
     def distribute_new_registry_login_info(self):
         self.registry_login_queue = set(self.mgr.inventory.keys())
 
-    def save_host(self, host):
-        # type: (str) -> None
-        j = {   # type: ignore
+    def save_host(self, host: str) -> None:
+        j: Dict[str, Any] = {
             'daemons': {},
             'devices': [],
             'osdspec_previews': [],
             'daemon_config_deps': {},
         }
         if host in self.last_daemon_update:
-            j['last_daemon_update'] = self.last_daemon_update[host].strftime(DATEFMT) # type: ignore
+            j['last_daemon_update'] = datetime_to_str(self.last_daemon_update[host])
         if host in self.last_device_update:
-            j['last_device_update'] = self.last_device_update[host].strftime(DATEFMT) # type: ignore
+            j['last_device_update'] = datetime_to_str(self.last_device_update[host])
         for name, dd in self.daemons[host].items():
-            j['daemons'][name] = dd.to_json()  # type: ignore
+            j['daemons'][name] = dd.to_json()
         for d in self.devices[host]:
-            j['devices'].append(d.to_json())  # type: ignore
+            j['devices'].append(d.to_json())
         j['networks'] = self.networks[host]
         for name, depi in self.daemon_config_deps[host].items():
-            j['daemon_config_deps'][name] = {   # type: ignore
+            j['daemon_config_deps'][name] = {
                 'deps': depi.get('deps', []),
-                'last_config': depi['last_config'].strftime(DATEFMT),
+                'last_config': datetime_to_str(depi['last_config']),
             }
         if self.osdspec_previews[host]:
             j['osdspec_previews'] = self.osdspec_previews[host]
 
         if host in self.last_host_check:
-            j['last_host_check'] = self.last_host_check[host].strftime(DATEFMT)
+            j['last_host_check'] = datetime_to_str(self.last_host_check[host])
 
         if host in self.last_etc_ceph_ceph_conf:
-            j['last_etc_ceph_ceph_conf'] = self.last_etc_ceph_ceph_conf[host].strftime(DATEFMT)
+            j['last_etc_ceph_ceph_conf'] = datetime_to_str(self.last_etc_ceph_ceph_conf[host])
+        if self.scheduled_daemon_actions.get(host, {}):
+            j['scheduled_daemon_actions'] = self.scheduled_daemon_actions[host]
 
         self.mgr.set_store(HOST_CACHE_PREFIX + host, json.dumps(j))
 
@@ -343,6 +346,8 @@ class HostCache():
             del self.last_device_update[host]
         if host in self.daemon_config_deps:
             del self.daemon_config_deps[host]
+        if host in self.scheduled_daemon_actions:
+            del self.scheduled_daemon_actions[host]
         self.mgr.set_store(HOST_CACHE_PREFIX + host, None)
 
     def get_hosts(self):
@@ -405,7 +410,7 @@ class HostCache():
                 r.append(name)
         return r
 
-    def get_daemon_last_config_deps(self, host, name):
+    def get_daemon_last_config_deps(self, host, name) -> Tuple[Optional[List[str]], Optional[datetime.datetime]]:
         if host in self.daemon_config_deps:
             if name in self.daemon_config_deps[host]:
                 return self.daemon_config_deps[host][name].get('deps', []), \
@@ -426,6 +431,16 @@ class HostCache():
             return True
         return False
 
+    def host_had_daemon_refresh(self, host: str) -> bool:
+        """
+        ... at least once.
+        """
+        if host in self.last_daemon_update:
+            return True
+        if host not in self.daemons:
+            return False
+        return bool(self.daemons[host])
+
     def host_needs_device_refresh(self, host):
         # type: (str) -> bool
         if host in self.mgr.offline_hosts:
@@ -470,15 +485,17 @@ class HostCache():
             return True
         if self.mgr.last_monmap > self.last_etc_ceph_ceph_conf[host]:
             return True
+        if self.mgr.extra_ceph_conf_is_newer(self.last_etc_ceph_ceph_conf[host]):
+            return True
         # already up to date:
         return False
-    
+
     def update_last_etc_ceph_ceph_conf(self, host: str):
         if not self.mgr.last_monmap:
             return
-        self.last_etc_ceph_ceph_conf[host] = self.mgr.last_monmap
+        self.last_etc_ceph_ceph_conf[host] = datetime.datetime.utcnow()
 
-    def host_needs_registry_login(self, host):
+    def host_needs_registry_login(self, host: str) -> bool:
         if host in self.mgr.offline_hosts:
             return False
         if host in self.registry_login_queue:
@@ -504,15 +521,43 @@ class HostCache():
         We're not checking for `host_needs_daemon_refresh`, as this might never be
         False for all hosts.
         """
-        return all((h in self.last_daemon_update or h in self.mgr.offline_hosts)
+        return all((self.host_had_daemon_refresh(h) or h in self.mgr.offline_hosts)
                    for h in self.get_hosts())
 
+    def schedule_daemon_action(self, host: str, daemon_name: str, action: str):
+        priorities = {
+            'start': 1,
+            'restart': 2,
+            'reconfig': 3,
+            'redeploy': 4,
+            'stop': 5,
+        }
+        existing_action = self.scheduled_daemon_actions.get(host, {}).get(daemon_name, None)
+        if existing_action and priorities[existing_action] > priorities[action]:
+            logger.debug(
+                f'skipping {action}ing {daemon_name}, cause {existing_action} already scheduled.')
+            return
+
+        if host not in self.scheduled_daemon_actions:
+            self.scheduled_daemon_actions[host] = {}
+        self.scheduled_daemon_actions[host][daemon_name] = action
+
+    def rm_scheduled_daemon_action(self, host: str, daemon_name: str):
+        if host in self.scheduled_daemon_actions:
+            if daemon_name in self.scheduled_daemon_actions[host]:
+                del self.scheduled_daemon_actions[host][daemon_name]
+            if not self.scheduled_daemon_actions[host]:
+                del self.scheduled_daemon_actions[host]
+
+    def get_scheduled_daemon_action(self, host, daemon) -> Optional[str]:
+        return self.scheduled_daemon_actions.get(host, {}).get(daemon)
+
 
 class EventStore():
     def __init__(self, mgr):
         # type: (CephadmOrchestrator) -> None
         self.mgr: CephadmOrchestrator = mgr
-        self.events = {} # type: Dict[str, List[OrchestratorEvent]]
+        self.events = {}  # type: Dict[str, List[OrchestratorEvent]]
 
     def add(self, event: OrchestratorEvent) -> None:
 
@@ -529,7 +574,8 @@ class EventStore():
         self.events[event.kind_subject()] = self.events[event.kind_subject()][-5:]
 
     def for_service(self, spec: ServiceSpec, level, message) -> None:
-        e = OrchestratorEvent(datetime.datetime.utcnow(), 'service', spec.service_name(), level, message)
+        e = OrchestratorEvent(datetime.datetime.utcnow(), 'service',
+                              spec.service_name(), level, message)
         self.add(e)
 
     def from_orch_error(self, e: OrchestratorError):
@@ -542,7 +588,6 @@ class EventStore():
                 str(e)
             ))
 
-
     def for_daemon(self, daemon_name, level, message):
         e = OrchestratorEvent(datetime.datetime.utcnow(), 'daemon', daemon_name, level, message)
         self.add(e)
index 9e1612dc40e1e747fc95facd6d174aefe0a41e9d..4837cb19aaf1a9b81e1f2649867d31929583fbde 100644 (file)
@@ -91,7 +91,7 @@ class Migrations:
         def convert_to_explicit(spec: ServiceSpec) -> None:
             placements = HostAssignment(
                 spec=spec,
-                get_hosts_func=self.mgr._get_hosts,
+                hosts=self.mgr.inventory.all_specs(),
                 get_daemons_func=self.mgr.cache.get_daemons_by_service
             ).place()
 
index 4de556f9c6cb90813e59f91eca3c2aac2e7d6df9..4e8993eac3867e99e1656ef6ad1d9769418f6527 100644 (file)
@@ -1,7 +1,10 @@
 import json
 import errno
 import logging
+import re
+import shlex
 from collections import defaultdict
+from configparser import ConfigParser
 from contextlib import contextmanager
 from functools import wraps
 from tempfile import TemporaryDirectory
@@ -9,7 +12,7 @@ from threading import Event
 
 import string
 from typing import List, Dict, Optional, Callable, Tuple, TypeVar, \
-    Any, Set, TYPE_CHECKING, cast, Iterator, Union
+    Any, Set, TYPE_CHECKING, cast, Iterator, Union, NamedTuple
 
 import datetime
 import six
@@ -17,13 +20,14 @@ import os
 import random
 import tempfile
 import multiprocessing.pool
-import shutil
 import subprocess
 
 from ceph.deployment import inventory
 from ceph.deployment.drive_group import DriveGroupSpec
 from ceph.deployment.service_spec import \
-    NFSServiceSpec, RGWSpec, ServiceSpec, PlacementSpec, assert_valid_host
+    NFSServiceSpec, ServiceSpec, PlacementSpec, assert_valid_host, \
+    CustomContainerSpec
+from cephadm.serve import CephadmServe
 from cephadm.services.cephadmservice import CephadmDaemonSpec
 
 from mgr_module import MgrModule, HandleCommandResult
@@ -37,16 +41,18 @@ from . import utils
 from .migrations import Migrations
 from .services.cephadmservice import MonService, MgrService, MdsService, RgwService, \
     RbdMirrorService, CrashService, CephadmService
+from .services.container import CustomContainerService
 from .services.iscsi import IscsiService
 from .services.nfs import NFSService
 from .services.osd import RemoveUtil, OSDQueue, OSDService, OSD, NotFoundError
 from .services.monitoring import GrafanaService, AlertmanagerService, PrometheusService, \
     NodeExporterService
-from .schedule import HostAssignment, HostPlacementSpec
+from .schedule import HostAssignment
 from .inventory import Inventory, SpecStore, HostCache, EventStore
 from .upgrade import CEPH_UPGRADE_ORDER, CephadmUpgrade
 from .template import TemplateMgr
-from .utils import forall_hosts, CephadmNoImage, cephadmNoImage
+from .utils import forall_hosts, CephadmNoImage, cephadmNoImage, \
+    str_to_datetime, datetime_to_str
 
 try:
     import remoto
@@ -82,7 +88,6 @@ Host *
   ConnectTimeout=30
 """
 
-DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 CEPH_DATEFMT = '%Y-%m-%dT%H:%M:%S.%fZ'
 
 CEPH_TYPES = set(CEPH_UPGRADE_ORDER)
@@ -92,6 +97,7 @@ class CephadmCompletion(orchestrator.Completion[T]):
     def evaluate(self):
         self.finalize(None)
 
+
 def trivial_completion(f: Callable[..., T]) -> Callable[..., CephadmCompletion[T]]:
     """
     Decorator to make CephadmCompletion methods return
@@ -105,6 +111,12 @@ def trivial_completion(f: Callable[..., T]) -> Callable[..., CephadmCompletion[T
     return wrapper
 
 
+class ContainerInspectInfo(NamedTuple):
+    image_id: str
+    ceph_version: Optional[str]
+    repo_digest: Optional[str]
+
+
 @six.add_metaclass(CLICommandMeta)
 class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
 
@@ -152,22 +164,22 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         },
         {
             'name': 'container_image_prometheus',
-            'default': 'prom/prometheus:v2.18.1',
+            'default': 'docker.io/prom/prometheus:v2.18.1',
             'desc': 'Prometheus container image',
         },
         {
             'name': 'container_image_grafana',
-            'default': 'ceph/ceph-grafana:6.6.2',
+            'default': 'docker.io/ceph/ceph-grafana:6.6.2',
             'desc': 'Prometheus container image',
         },
         {
             'name': 'container_image_alertmanager',
-            'default': 'prom/alertmanager:v0.20.0',
+            'default': 'docker.io/prom/alertmanager:v0.20.0',
             'desc': 'Prometheus container image',
         },
         {
             'name': 'container_image_node_exporter',
-            'default': 'prom/node-exporter:v0.18.1',
+            'default': 'docker.io/prom/node-exporter:v0.18.1',
             'desc': 'Prometheus container image',
         },
         {
@@ -206,6 +218,12 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
                          'can allow debugging daemons that encounter problems '
                          'at runtime.',
         },
+        {
+            'name': 'container_init',
+            'type': 'bool',
+            'default': False,
+            'desc': 'Run podman/docker with `--init`',
+        },
         {
             'name': 'prometheus_alerts_path',
             'type': 'str',
@@ -249,6 +267,12 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             'default': None,
             'desc': 'Custom repository password'
         },
+        {
+            'name': 'use_repo_digest',
+            'type': 'bool',
+            'default': False,
+            'desc': 'Automatically convert image tags to image digest. Make sure all daemons use the same image',
+        }
     ]
 
     def __init__(self, *args, **kwargs):
@@ -281,6 +305,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             self.warn_on_stray_daemons = True
             self.warn_on_failed_host_check = True
             self.allow_ptrace = False
+            self.container_init = False
             self.prometheus_alerts_path = ''
             self.migration_current = None
             self.config_dashboard = True
@@ -288,9 +313,10 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             self.registry_url: Optional[str] = None
             self.registry_username: Optional[str] = None
             self.registry_password: Optional[str] = None
+            self.use_repo_digest = False
 
-        self._cons = {}  # type: Dict[str, Tuple[remoto.backends.BaseConnection,remoto.backends.LegacyModuleExecute]]
-
+        self._cons: Dict[str, Tuple[remoto.backends.BaseConnection,
+                                    remoto.backends.LegacyModuleExecute]] = {}
 
         self.notify('mon_map', None)
         self.config_notify()
@@ -335,7 +361,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             if h not in self.inventory:
                 self.cache.rm_host(h)
 
-
         # in-memory only.
         self.events = EventStore(self)
         self.offline_hosts: Set[str] = set()
@@ -356,6 +381,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         self.node_exporter_service = NodeExporterService(self)
         self.crash_service = CrashService(self)
         self.iscsi_service = IscsiService(self)
+        self.container_service = CustomContainerService(self)
         self.cephadm_services = {
             'mon': self.mon_service,
             'mgr': self.mgr_service,
@@ -370,9 +396,10 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             'node-exporter': self.node_exporter_service,
             'crash': self.crash_service,
             'iscsi': self.iscsi_service,
+            'container': self.container_service,
         }
 
-        self.template = TemplateMgr()
+        self.template = TemplateMgr(self)
 
         self.requires_post_actions = set()
 
@@ -404,80 +431,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             return f"Host {host} failed to login to {url} as {username} with given password"
         return
 
-
-    def _check_host(self, host):
-        if host not in self.inventory:
-            return
-        self.log.debug(' checking %s' % host)
-        try:
-            out, err, code = self._run_cephadm(
-                host, cephadmNoImage, 'check-host', [],
-                error_ok=True, no_fsid=True)
-            self.cache.update_last_host_check(host)
-            self.cache.save_host(host)
-            if code:
-                self.log.debug(' host %s failed check' % host)
-                if self.warn_on_failed_host_check:
-                    return 'host %s failed check: %s' % (host, err)
-            else:
-                self.log.debug(' host %s ok' % host)
-        except Exception as e:
-            self.log.debug(' host %s failed check' % host)
-            return 'host %s failed check: %s' % (host, e)
-
-    def _check_for_strays(self):
-        self.log.debug('_check_for_strays')
-        for k in ['CEPHADM_STRAY_HOST',
-                  'CEPHADM_STRAY_DAEMON']:
-            if k in self.health_checks:
-                del self.health_checks[k]
-        if self.warn_on_stray_hosts or self.warn_on_stray_daemons:
-            ls = self.list_servers()
-            managed = self.cache.get_daemon_names()
-            host_detail = []     # type: List[str]
-            host_num_daemons = 0
-            daemon_detail = []  # type: List[str]
-            for item in ls:
-                host = item.get('hostname')
-                daemons = item.get('services')  # misnomer!
-                missing_names = []
-                for s in daemons:
-                    name = '%s.%s' % (s.get('type'), s.get('id'))
-                    if host not in self.inventory:
-                        missing_names.append(name)
-                        host_num_daemons += 1
-                    if name not in managed:
-                        daemon_detail.append(
-                            'stray daemon %s on host %s not managed by cephadm' % (name, host))
-                if missing_names:
-                    host_detail.append(
-                        'stray host %s has %d stray daemons: %s' % (
-                            host, len(missing_names), missing_names))
-            if self.warn_on_stray_hosts and host_detail:
-                self.health_checks['CEPHADM_STRAY_HOST'] = {
-                    'severity': 'warning',
-                    'summary': '%d stray host(s) with %s daemon(s) '
-                    'not managed by cephadm' % (
-                        len(host_detail), host_num_daemons),
-                    'count': len(host_detail),
-                    'detail': host_detail,
-                }
-            if self.warn_on_stray_daemons and daemon_detail:
-                self.health_checks['CEPHADM_STRAY_DAEMON'] = {
-                    'severity': 'warning',
-                    'summary': '%d stray daemons(s) not managed by cephadm' % (
-                        len(daemon_detail)),
-                    'count': len(daemon_detail),
-                    'detail': daemon_detail,
-                }
-        self.set_health_checks(self.health_checks)
-
-    def _serve_sleep(self):
-        sleep_interval = 600
-        self.log.debug('Sleeping for %d seconds', sleep_interval)
-        ret = self.event.wait(sleep_interval)
-        self.event.clear()
-
     def serve(self) -> None:
         """
         The main loop of cephadm.
@@ -485,54 +438,16 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         A command handler will typically change the declarative state
         of cephadm. This loop will then attempt to apply this new state.
         """
-        self.log.debug("serve starting")
-        while self.run:
-
-            try:
-
-                # refresh daemons
-                self.log.debug('refreshing hosts and daemons')
-                self._refresh_hosts_and_daemons()
-
-                self._check_for_strays()
-
-                self._update_paused_health()
-
-                if not self.paused:
-                    self.rm_util.process_removal_queue()
-
-                    self.migration.migrate()
-                    if self.migration.is_migration_ongoing():
-                        continue
-
-                    if self._apply_all_services():
-                        continue  # did something, refresh
-
-                    self._check_daemons()
-
-                    if self.upgrade.continue_upgrade():
-                        continue
-
-            except OrchestratorError as e:
-                if e.event_subject:
-                    self.events.from_orch_error(e)
-
-            self._serve_sleep()
-        self.log.debug("serve exit")
-
-    def _update_paused_health(self):
-        if self.paused:
-            self.health_checks['CEPHADM_PAUSED'] = {
-                'severity': 'warning',
-                'summary': 'cephadm background work is paused',
-                'count': 1,
-                'detail': ["'ceph orch resume' to resume"],
-            }
-            self.set_health_checks(self.health_checks)
-        else:
-            if 'CEPHADM_PAUSED' in self.health_checks:
-                del self.health_checks['CEPHADM_PAUSED']
-                self.set_health_checks(self.health_checks)
+        serve = CephadmServe(self)
+        serve.serve()
+
+    def set_container_image(self, entity: str, image):
+        self.check_mon_command({
+            'prefix': 'config set',
+            'name': 'container_image',
+            'value': image,
+            'who': entity,
+        })
 
     def config_notify(self):
         """
@@ -562,6 +477,9 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
                 monmap['modified'], CEPH_DATEFMT)
             if self.last_monmap and self.last_monmap > datetime.datetime.utcnow():
                 self.last_monmap = None  # just in case clocks are skewed
+            if getattr(self, 'manage_etc_ceph_ceph_conf', False):
+                # getattr, due to notify() being called before config_notify()
+                self._kick_serve_loop()
         if notify_type == "pg_summary":
             self._trigger_osd_removal()
 
@@ -603,10 +521,12 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         suffix = daemon_type not in [
             'mon', 'crash', 'nfs',
             'prometheus', 'node-exporter', 'grafana', 'alertmanager',
+            'container'
         ]
         if forcename:
             if len([d for d in existing if d.daemon_id == forcename]):
-                raise orchestrator.OrchestratorValidationError(f'name {daemon_type}.{forcename} already in use')
+                raise orchestrator.OrchestratorValidationError(
+                    f'name {daemon_type}.{forcename} already in use')
             return forcename
 
         if '.' in host:
@@ -622,7 +542,8 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
                                       for _ in range(6))
             if len([d for d in existing if d.daemon_id == name]):
                 if not suffix:
-                    raise orchestrator.OrchestratorValidationError(f'name {daemon_type}.{name} already in use')
+                    raise orchestrator.OrchestratorValidationError(
+                        f'name {daemon_type}.{name} already in use')
                 self.log.debug('name %s exists, trying again', name)
                 continue
             return name
@@ -678,6 +599,17 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
 
         self._reset_cons()
 
+    def validate_ssh_config_content(self, ssh_config):
+        if ssh_config is None or len(ssh_config.strip()) == 0:
+            raise OrchestratorValidationError('ssh_config cannot be empty')
+        # StrictHostKeyChecking is [yes|no] ?
+        l = re.findall(r'StrictHostKeyChecking\s+.*', ssh_config)
+        if not l:
+            raise OrchestratorValidationError('ssh_config requires StrictHostKeyChecking')
+        for s in l:
+            if 'ask' in s.lower():
+                raise OrchestratorValidationError(f'ssh_config cannot contain: \'{s}\'')
+
     def validate_ssh_config_fname(self, ssh_config_fname):
         if not os.path.isfile(ssh_config_fname):
             raise OrchestratorValidationError("ssh_config \"{}\" does not exist".format(
@@ -701,14 +633,13 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         if host in self.offline_hosts:
             self.offline_hosts.remove(host)
 
-
     @staticmethod
     def can_run():
         if remoto is not None:
             return True, ""
         else:
             return False, "loading remoto library:{}".format(
-                    remoto_import_error)
+                remoto_import_error)
 
     def available(self):
         """
@@ -726,7 +657,8 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         Does nothing, as completions are processed in another thread.
         """
         if completions:
-            self.log.debug("process: completions={0}".format(orchestrator.pretty_print(completions)))
+            self.log.debug("process: completions={0}".format(
+                orchestrator.pretty_print(completions)))
 
             for p in completions:
                 p.evaluate()
@@ -737,14 +669,10 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
     def _set_ssh_config(self, inbuf=None):
         """
         Set an ssh_config file provided from stdin
-
-        TODO:
-          - validation
         """
-        if inbuf is None or len(inbuf) == 0:
-            return -errno.EINVAL, "", "empty ssh config provided"
         if inbuf == self.ssh_config:
             return 0, "value unchanged", ""
+        self.validate_ssh_config_content(inbuf)
         self.set_store("ssh_config", inbuf)
         self.log.info('Set ssh_config')
         self._reconfig_ssh()
@@ -777,7 +705,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             return HandleCommandResult(stdout=ssh_config)
         return HandleCommandResult(stdout=DEFAULT_SSH_CONFIG)
 
-
     @orchestrator._cli_write_command(
         'cephadm generate-key',
         desc='Generate a cluster SSH key (if not present)')
@@ -870,9 +797,9 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         self._reconfig_ssh()
 
         host = self.cache.get_hosts()[0]
-        r = self._check_host(host)
+        r = CephadmServe(self)._check_host(host)
         if r is not None:
-            #connection failed reset user
+            # connection failed reset user
             self.set_store('ssh_user', current_user)
             self._reconfig_ssh()
             return -errno.EINVAL, '', 'ssh connection %s@%s failed' % (user, host)
@@ -893,7 +820,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         # if password not given in command line, get it through file input
         if not (url and username and password) and (inbuf is None or len(inbuf) == 0):
             return -errno.EINVAL, "", ("Invalid arguments. Please provide arguments <url> <username> <password> "
-                                        "or -i <login credentials json file>")
+                                       "or -i <login credentials json file>")
         elif not (url and username and password):
             login_info = json.loads(inbuf)
             if "url" in login_info and "username" in login_info and "password" in login_info:
@@ -902,12 +829,12 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
                 password = login_info["password"]
             else:
                 return -errno.EINVAL, "", ("json provided for custom registry login did not include all necessary fields. "
-                                "Please setup json file as\n"
-                                "{\n"
-                                  " \"url\": \"REGISTRY_URL\",\n"
-                                  " \"username\": \"REGISTRY_USERNAME\",\n"
-                                  " \"password\": \"REGISTRY_PASSWORD\"\n"
-                                "}\n")
+                                           "Please setup json file as\n"
+                                           "{\n"
+                                           " \"url\": \"REGISTRY_URL\",\n"
+                                           " \"username\": \"REGISTRY_USERNAME\",\n"
+                                           " \"password\": \"REGISTRY_PASSWORD\"\n"
+                                           "}\n")
         # verify login info works by attempting login on random host
         host = None
         for host_name in self.inventory.keys():
@@ -943,7 +870,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         except OrchestratorError as e:
             self.log.exception(f"check-host failed for '{host}'")
             return 1, '', ('check-host failed:\n' +
-                f"Host '{host}' not found. Use 'ceph orch host ls' to see all managed hosts.")
+                           f"Host '{host}' not found. Use 'ceph orch host ls' to see all managed hosts.")
         # if we have an outstanding health alert for this host, give the
         # serve thread a kick
         if 'CEPHADM_HOST_CHECK_FAILED' in self.health_checks:
@@ -972,6 +899,53 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
                     self.event.set()
         return 0, '%s (%s) ok' % (host, addr), err
 
+    @orchestrator._cli_write_command(
+        prefix='cephadm set-extra-ceph-conf',
+        desc="Text that is appended to all daemon's ceph.conf.\n"
+             "Mainly a workaround, till `config generate-minimal-conf` generates\n"
+             "a complete ceph.conf.\n\n"
+             "Warning: this is a dangerous operation.")
+    def _set_extra_ceph_conf(self, inbuf=None) -> HandleCommandResult:
+        if inbuf:
+            # sanity check.
+            cp = ConfigParser()
+            cp.read_string(inbuf, source='<infile>')
+
+        self.set_store("extra_ceph_conf", json.dumps({
+            'conf': inbuf,
+            'last_modified': datetime_to_str(datetime.datetime.utcnow())
+        }))
+        self.log.info('Set extra_ceph_conf')
+        self._kick_serve_loop()
+        return HandleCommandResult()
+
+    @orchestrator._cli_read_command(
+        'cephadm get-extra-ceph-conf',
+        desc='Get extra ceph conf that is appended')
+    def _get_extra_ceph_conf(self) -> HandleCommandResult:
+        return HandleCommandResult(stdout=self.extra_ceph_conf().conf)
+
+    class ExtraCephConf(NamedTuple):
+        conf: str
+        last_modified: Optional[datetime.datetime]
+
+    def extra_ceph_conf(self) -> 'CephadmOrchestrator.ExtraCephConf':
+        data = self.get_store('extra_ceph_conf')
+        if not data:
+            return CephadmOrchestrator.ExtraCephConf('', None)
+        try:
+            j = json.loads(data)
+        except ValueError:
+            self.log.exception('unable to laod extra_ceph_conf')
+            return CephadmOrchestrator.ExtraCephConf('', None)
+        return CephadmOrchestrator.ExtraCephConf(j['conf'], str_to_datetime(j['last_modified']))
+
+    def extra_ceph_conf_is_newer(self, dt: datetime.datetime) -> bool:
+        conf = self.extra_ceph_conf()
+        if not conf.last_modified:
+            return False
+        return conf.last_modified > dt
+
     def _get_connection(self, host: str):
         """
         Setup a connection for running commands on remote host.
@@ -986,7 +960,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         n = self.ssh_user + '@' + host
         self.log.debug("Opening connection to {} with ssh options '{}'".format(
             n, self._ssh_options))
-        child_logger=self.log.getChild(n)
+        child_logger = self.log.getChild(n)
         child_logger.setLevel('WARNING')
         conn = remoto.Connection(
             n,
@@ -1012,13 +986,13 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             raise RuntimeError("Executable '{}' not found on host '{}'".format(
                 executable, conn.hostname))
         self.log.debug("Found executable '{}' at path '{}'".format(executable,
-            executable_path))
+                                                                   executable_path))
         return executable_path
 
     @contextmanager
     def _remote_connection(self,
                            host: str,
-                           addr: Optional[str]=None,
+                           addr: Optional[str] = None,
                            ) -> Iterator[Tuple["BaseConnection", Any]]:
         if not addr and host in self.inventory:
             addr = self.inventory.get_addr(host)
@@ -1046,18 +1020,22 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
 
             user = self.ssh_user if self.mode == 'root' else 'cephadm'
             msg = f'''Failed to connect to {host} ({addr}).
-Check that the host is reachable and accepts connections using the cephadm SSH key
+Please make sure that the host is reachable and accepts connections using the cephadm SSH key
+
+To add the cephadm SSH key to the host:
+> ceph cephadm get-pub-key > ~/ceph.pub
+> ssh-copy-id -f -i ~/ceph.pub {user}@{host}
 
-you may want to run:
+To check that the host is reachable:
 > ceph cephadm get-ssh-config > ssh_config
-> ceph config-key get mgr/cephadm/ssh_identity_key > key
-> ssh -F ssh_config -i key {user}@{host}'''
+> ceph config-key get mgr/cephadm/ssh_identity_key > ~/cephadm_private_key
+> ssh -F ssh_config -i ~/cephadm_private_key {user}@{host}'''
             raise OrchestratorError(msg) from e
         except Exception as ex:
             self.log.exception(ex)
             raise
 
-    def _get_container_image(self, daemon_name: str) -> str:
+    def _get_container_image(self, daemon_name: str) -> Optional[str]:
         daemon_type = daemon_name.split('.', 1)[0]  # type: ignore
         if daemon_type in CEPH_TYPES or \
                 daemon_type == 'nfs' or \
@@ -1077,6 +1055,11 @@ you may want to run:
             image = self.container_image_alertmanager
         elif daemon_type == 'node-exporter':
             image = self.container_image_node_exporter
+        elif daemon_type == CustomContainerService.TYPE:
+            # The image can't be resolved, the necessary information
+            # is only available when a container is deployed (given
+            # via spec).
+            image = None
         else:
             assert False, daemon_type
 
@@ -1094,7 +1077,7 @@ you may want to run:
                      no_fsid: Optional[bool] = False,
                      error_ok: Optional[bool] = False,
                      image: Optional[str] = "",
-                     env_vars: Optional[List[str]]= None,
+                     env_vars: Optional[List[str]] = None,
                      ) -> Tuple[List[str], List[str], int]:
         """
         Run cephadm on the remote host with the given command + args
@@ -1119,6 +1102,10 @@ you may want to run:
 
             if not no_fsid:
                 final_args += ['--fsid', self._cluster_fsid]
+
+            if self.container_init:
+                final_args += ['--container-init']
+
             final_args += args
 
             self.log.debug('args: %s' % (' '.join(final_args)))
@@ -1136,9 +1123,9 @@ you may want to run:
                             host, remotes.PYTHONS, remotes.PATH))
                 try:
                     out, err, code = remoto.process.check(
-                    conn,
-                    [python, '-u'],
-                    stdin=script.encode('utf-8'))
+                        conn,
+                        [python, '-u'],
+                        stdin=script.encode('utf-8'))
                 except RuntimeError as e:
                     self._reset_con(host)
                     if error_ok:
@@ -1169,9 +1156,19 @@ you may want to run:
                         code, '\n'.join(err)))
             return out, err, code
 
+    def _hosts_with_daemon_inventory(self) -> List[HostSpec]:
+        """
+        Returns all hosts that went through _refresh_host_daemons().
 
-    def _get_hosts(self, label: Optional[str] = '', as_hostspec: bool = False) -> List:
-        return list(self.inventory.filter_by_label(label=label, as_hostspec=as_hostspec))
+        This mitigates a potential race, where new host was added *after*
+        ``_refresh_host_daemons()`` was called, but *before*
+        ``_apply_all_specs()`` was called. thus we end up with a hosts
+        where daemons might be running, but we have not yet detected them.
+        """
+        return [
+            h for h in self.inventory.all_specs()
+            if self.cache.host_had_daemon_refresh(h.hostname)
+        ]
 
     def _add_host(self, spec):
         # type: (HostSpec) -> str
@@ -1257,214 +1254,26 @@ you may want to run:
             if dd.hostname == hostname:
                 daemon_map[dd.daemon_type].append(dd.daemon_id)
 
-        for daemon_type,daemon_ids in daemon_map.items():
+        for daemon_type, daemon_ids in daemon_map.items():
             r = self.cephadm_services[daemon_type].ok_to_stop(daemon_ids)
             if r.retval:
                 self.log.error(f'It is NOT safe to stop host {hostname}')
                 raise orchestrator.OrchestratorError(
-                        r.stderr,
-                        errno=r.retval)
+                    r.stderr,
+                    errno=r.retval)
 
         msg = f'It is presumed safe to stop host {hostname}'
         self.log.info(msg)
         return msg
 
-    def update_osdspec_previews(self, search_host: str = ''):
-        # Set global 'pending' flag for host
-        self.cache.loading_osdspec_preview.add(search_host)
-        previews = []
-        # query OSDSpecs for host <search host> and generate/get the preview
-        # There can be multiple previews for one host due to multiple OSDSpecs.
-        previews.extend(self.osd_service.get_previews(search_host))
-        self.log.debug(f"Loading OSDSpec previews to HostCache")
-        self.cache.osdspec_previews[search_host] = previews
-        # Unset global 'pending' flag for host
-        self.cache.loading_osdspec_preview.remove(search_host)
-
-    def _refresh_host_osdspec_previews(self, host) -> bool:
-        self.update_osdspec_previews(host)
-        self.cache.save_host(host)
-        self.log.debug(f'Refreshed OSDSpec previews for host <{host}>')
-        return True
-
-    def _refresh_hosts_and_daemons(self) -> None:
-        bad_hosts = []
-        failures = []
-
-        @forall_hosts
-        def refresh(host):
-            if self.cache.host_needs_check(host):
-                r = self._check_host(host)
-                if r is not None:
-                    bad_hosts.append(r)
-            if self.cache.host_needs_daemon_refresh(host):
-                self.log.debug('refreshing %s daemons' % host)
-                r = self._refresh_host_daemons(host)
-                if r:
-                    failures.append(r)
-
-            if self.cache.host_needs_registry_login(host) and self.registry_url:
-                self.log.debug(f"Logging `{host}` into custom registry")
-                r = self._registry_login(host, self.registry_url, self.registry_username, self.registry_password)
-                if r:
-                    bad_hosts.append(r)
-
-            if self.cache.host_needs_device_refresh(host):
-                self.log.debug('refreshing %s devices' % host)
-                r = self._refresh_host_devices(host)
-                if r:
-                    failures.append(r)
-
-            if self.cache.host_needs_osdspec_preview_refresh(host):
-                self.log.debug(f"refreshing OSDSpec previews for {host}")
-                r = self._refresh_host_osdspec_previews(host)
-                if r:
-                    failures.append(r)
-
-            if self.cache.host_needs_new_etc_ceph_ceph_conf(host):
-                self.log.debug(f"deploying new /etc/ceph/ceph.conf on `{host}`")
-                r = self._deploy_etc_ceph_ceph_conf(host)
-                if r:
-                    bad_hosts.append(r)
-
-        refresh(self.cache.get_hosts())
-
-        health_changed = False
-        if 'CEPHADM_HOST_CHECK_FAILED' in self.health_checks:
-            del self.health_checks['CEPHADM_HOST_CHECK_FAILED']
-            health_changed = True
-        if bad_hosts:
-            self.health_checks['CEPHADM_HOST_CHECK_FAILED'] = {
-                'severity': 'warning',
-                'summary': '%d hosts fail cephadm check' % len(bad_hosts),
-                'count': len(bad_hosts),
-                'detail': bad_hosts,
-            }
-            health_changed = True
-        if failures:
-            self.health_checks['CEPHADM_REFRESH_FAILED'] = {
-                'severity': 'warning',
-                'summary': 'failed to probe daemons or devices',
-                'count': len(failures),
-                'detail': failures,
-            }
-            health_changed = True
-        elif 'CEPHADM_REFRESH_FAILED' in self.health_checks:
-            del self.health_checks['CEPHADM_REFRESH_FAILED']
-            health_changed = True
-        if health_changed:
-            self.set_health_checks(self.health_checks)
-
-    def _refresh_host_daemons(self, host) -> Optional[str]:
-        try:
-            out, err, code = self._run_cephadm(
-                host, 'mon', 'ls', [], no_fsid=True)
-            if code:
-                return 'host %s cephadm ls returned %d: %s' % (
-                    host, code, err)
-        except Exception as e:
-            return 'host %s scrape failed: %s' % (host, e)
-        ls = json.loads(''.join(out))
-        dm = {}
-        for d in ls:
-            if not d['style'].startswith('cephadm'):
-                continue
-            if d['fsid'] != self._cluster_fsid:
-                continue
-            if '.' not in d['name']:
-                continue
-            sd = orchestrator.DaemonDescription()
-            sd.last_refresh = datetime.datetime.utcnow()
-            for k in ['created', 'started', 'last_configured', 'last_deployed']:
-                v = d.get(k, None)
-                if v:
-                    setattr(sd, k, datetime.datetime.strptime(d[k], DATEFMT))
-            sd.daemon_type = d['name'].split('.')[0]
-            sd.daemon_id = '.'.join(d['name'].split('.')[1:])
-            sd.hostname = host
-            sd.container_id = d.get('container_id')
-            if sd.container_id:
-                # shorten the hash
-                sd.container_id = sd.container_id[0:12]
-            sd.container_image_name = d.get('container_image_name')
-            sd.container_image_id = d.get('container_image_id')
-            sd.version = d.get('version')
-            if sd.daemon_type == 'osd':
-                sd.osdspec_affinity = self.osd_service.get_osdspec_affinity(sd.daemon_id)
-            if 'state' in d:
-                sd.status_desc = d['state']
-                sd.status = {
-                    'running': 1,
-                    'stopped': 0,
-                    'error': -1,
-                    'unknown': -1,
-                }[d['state']]
-            else:
-                sd.status_desc = 'unknown'
-                sd.status = None
-            dm[sd.name()] = sd
-        self.log.debug('Refreshed host %s daemons (%d)' % (host, len(dm)))
-        self.cache.update_host_daemons(host, dm)
-        self.cache.save_host(host)
-        return None
-
-    def _refresh_host_devices(self, host) -> Optional[str]:
-        try:
-            out, err, code = self._run_cephadm(
-                host, 'osd',
-                'ceph-volume',
-                ['--', 'inventory', '--format=json'])
-            if code:
-                return 'host %s ceph-volume inventory returned %d: %s' % (
-                    host, code, err)
-        except Exception as e:
-            return 'host %s ceph-volume inventory failed: %s' % (host, e)
-        devices = json.loads(''.join(out))
-        try:
-            out, err, code = self._run_cephadm(
-                host, 'mon',
-                'list-networks',
-                [],
-                no_fsid=True)
-            if code:
-                return 'host %s list-networks returned %d: %s' % (
-                    host, code, err)
-        except Exception as e:
-            return 'host %s list-networks failed: %s' % (host, e)
-        networks = json.loads(''.join(out))
-        self.log.debug('Refreshed host %s devices (%d) networks (%s)' % (
-            host, len(devices), len(networks)))
-        devices = inventory.Devices.from_json(devices)
-        self.cache.update_host_devices_networks(host, devices.devices, networks)
-        self.update_osdspec_previews(host)
-        self.cache.save_host(host)
-        return None
-
-    def _deploy_etc_ceph_ceph_conf(self, host: str) -> Optional[str]:
-        ret, config, err = self.check_mon_command({
+    def get_minimal_ceph_conf(self) -> str:
+        _, config, _ = self.check_mon_command({
             "prefix": "config generate-minimal-conf",
         })
-
-        try:
-            with self._remote_connection(host) as tpl:
-                conn, connr = tpl
-                out, err, code = remoto.process.check(
-                    conn,
-                    ['mkdir', '-p', '/etc/ceph'])
-                if code:
-                    return f'failed to create /etc/ceph on {host}: {err}'
-                out, err, code = remoto.process.check(
-                    conn,
-                    ['dd', 'of=/etc/ceph/ceph.conf'],
-                    stdin=config.encode('utf-8')
-                )
-                if code:
-                    return f'failed to create /etc/ceph/ceph.conf on {host}: {err}'
-                self.cache.update_last_etc_ceph_ceph_conf(host)
-                self.cache.save_host(host)
-        except OrchestratorError as e:
-            return f'failed to create /etc/ceph/ceph.conf on {host}: {str(e)}'
-        return None
+        extra = self.extra_ceph_conf().conf
+        if extra:
+            config += '\n\n' + extra.strip() + '\n'
+        return config
 
     def _invalidate_daemons_and_kick_serve(self, filter_host=None):
         if filter_host:
@@ -1609,30 +1418,19 @@ you may want to run:
         ).name()):
             return self._daemon_action(daemon_type, daemon_id, host, action)
 
-    def _daemon_action(self, daemon_type, daemon_id, host, action, image=None):
+    def _daemon_action(self, daemon_type, daemon_id, host, action, image=None) -> str:
         daemon_spec: CephadmDaemonSpec = CephadmDaemonSpec(
             host=host,
             daemon_id=daemon_id,
             daemon_type=daemon_type,
         )
 
-        if image is not None:
-            if action != 'redeploy':
-                raise OrchestratorError(
-                    f'Cannot execute {action} with new image. `action` needs to be `redeploy`')
-            if daemon_type not in CEPH_TYPES:
-                raise OrchestratorError(
-                    f'Cannot redeploy {daemon_type}.{daemon_id} with a new image: Supported '
-                    f'types are: {", ".join(CEPH_TYPES)}')
-
-            self.check_mon_command({
-                'prefix': 'config set',
-                'name': 'container_image',
-                'value': image,
-                'who': utils.name_to_config_section(daemon_type + '.' + daemon_id),
-            })
+        self._daemon_action_set_image(action, image, daemon_type, daemon_id)
 
         if action == 'redeploy':
+            if self.daemon_is_self(daemon_type, daemon_id):
+                self.mgr_service.fail_over()
+                return ''  # unreachable
             # stop, recreate the container+unit, then restart
             return self._create_daemon(daemon_spec)
         elif action == 'reconfig':
@@ -1656,13 +1454,50 @@ you may want to run:
         self.events.for_daemon(name, 'INFO', msg)
         return msg
 
+    def _daemon_action_set_image(self, action: str, image: Optional[str], daemon_type: str, daemon_id: str):
+        if image is not None:
+            if action != 'redeploy':
+                raise OrchestratorError(
+                    f'Cannot execute {action} with new image. `action` needs to be `redeploy`')
+            if daemon_type not in CEPH_TYPES:
+                raise OrchestratorError(
+                    f'Cannot redeploy {daemon_type}.{daemon_id} with a new image: Supported '
+                    f'types are: {", ".join(CEPH_TYPES)}')
+
+            self.check_mon_command({
+                'prefix': 'config set',
+                'name': 'container_image',
+                'value': image,
+                'who': utils.name_to_config_section(daemon_type + '.' + daemon_id),
+            })
+
     @trivial_completion
-    def daemon_action(self, action: str, daemon_name: str, image: Optional[str]=None) -> str:
+    def daemon_action(self, action: str, daemon_name: str, image: Optional[str] = None) -> str:
         d = self.cache.get_daemon(daemon_name)
 
-        self.log.info(f'{action} daemon {daemon_name}')
-        return self._daemon_action(d.daemon_type, d.daemon_id,
-                                 d.hostname, action, image=image)
+        if action == 'redeploy' and self.daemon_is_self(d.daemon_type, d.daemon_id) \
+                and not self.mgr_service.mgr_map_has_standby():
+            raise OrchestratorError(
+                f'Unable to schedule redeploy for {daemon_name}: No standby MGRs')
+
+        self._daemon_action_set_image(action, image, d.daemon_type, d.daemon_id)
+
+        self.log.info(f'Schedule {action} daemon {daemon_name}')
+        return self._schedule_daemon_action(daemon_name, action)
+
+    def daemon_is_self(self, daemon_type: str, daemon_id: str) -> bool:
+        return daemon_type == 'mgr' and daemon_id == self.get_mgr_id()
+
+    def _schedule_daemon_action(self, daemon_name: str, action: str):
+        dd = self.cache.get_daemon(daemon_name)
+        if action == 'redeploy' and self.daemon_is_self(dd.daemon_type, dd.daemon_id) \
+                and not self.mgr_service.mgr_map_has_standby():
+            raise OrchestratorError(
+                f'Unable to schedule redeploy for {daemon_name}: No standby MGRs')
+        self.cache.schedule_daemon_action(dd.hostname, dd.name(), action)
+        msg = "Scheduled to {} {} on host '{}'".format(action, daemon_name, dd.hostname)
+        self._kick_serve_loop()
+        return msg
 
     @trivial_completion
     def remove_daemons(self, names):
@@ -1731,23 +1566,38 @@ you may want to run:
         return '\n'.join(out + err)
 
     @trivial_completion
-    def blink_device_light(self, ident_fault, on, locs) -> List[str]:
+    def blink_device_light(self, ident_fault: str, on: bool, locs: List[orchestrator.DeviceLightLoc]) -> List[str]:
+        """
+        Blink a device light. Calling something like::
+
+          lsmcli local-disk-ident-led-on --path $path
+
+        If you must, you can customize this via::
+
+          ceph config-key set mgr/cephadm/blink_device_light_cmd '<my jinja2 template>'
+          ceph config-key set mgr/cephadm/<host>/blink_device_light_cmd '<my jinja2 template>'
+
+        See templates/blink_device_light_cmd.j2
+        """
         @forall_hosts
         def blink(host, dev, path):
-            cmd = [
-                'lsmcli',
-                'local-disk-%s-led-%s' % (
-                    ident_fault,
-                    'on' if on else 'off'),
-                '--path', path or dev,
-            ]
+            cmd_line = self.template.render('blink_device_light_cmd.j2',
+                                            {
+                                                'on': on,
+                                                'ident_fault': ident_fault,
+                                                'dev': dev,
+                                                'path': path
+                                            },
+                                            host=host)
+            cmd_args = shlex.split(cmd_line)
+
             out, err, code = self._run_cephadm(
-                host, 'osd', 'shell', ['--'] + cmd,
+                host, 'osd', 'shell', ['--'] + cmd_args,
                 error_ok=True)
             if code:
                 raise OrchestratorError(
                     'Unable to affect %s light for %s:%s. Command: %s' % (
-                        ident_fault, host, dev, ' '.join(cmd)))
+                        ident_fault, host, dev, ' '.join(cmd_args)))
             self.log.info('Set %s light for %s:%s %s' % (
                 ident_fault, host, dev, 'on' if on else 'off'))
             return "Set %s light for %s:%s %s" % (
@@ -1848,52 +1698,47 @@ you may want to run:
                 deps.append(dd.name())
         return sorted(deps)
 
-    def _get_config_and_keyring(self, daemon_type, daemon_id, host,
-                                keyring=None,
-                                extra_ceph_config=None):
-        # type: (str, str, str, Optional[str], Optional[str]) -> Dict[str, Any]
-        # keyring
-        if not keyring:
-            ename = utils.name_to_auth_entity(daemon_type, daemon_id, host=host)
-            ret, keyring, err = self.check_mon_command({
-                'prefix': 'auth get',
-                'entity': ename,
-            })
-
-        # generate config
-        ret, config, err = self.check_mon_command({
-            "prefix": "config generate-minimal-conf",
-        })
-        if extra_ceph_config:
-            config += extra_ceph_config
-
-        return {
-            'config': config,
-            'keyring': keyring,
-        }
-
     def _create_daemon(self,
                        daemon_spec: CephadmDaemonSpec,
                        reconfig=False,
                        osd_uuid_map: Optional[Dict[str, Any]] = None,
-                       redeploy=False,
                        ) -> str:
 
-
         with set_exception_subject('service', orchestrator.DaemonDescription(
                 daemon_type=daemon_spec.daemon_type,
                 daemon_id=daemon_spec.daemon_id,
                 hostname=daemon_spec.host,
         ).service_id(), overwrite=True):
 
+            image = ''
             start_time = datetime.datetime.utcnow()
-            cephadm_config, deps = self.cephadm_services[daemon_spec.daemon_type].generate_config(daemon_spec)
-
-            daemon_spec.extra_args.extend(['--config-json', '-'])
+            ports: List[int] = daemon_spec.ports if daemon_spec.ports else []
+
+            if daemon_spec.daemon_type == 'container':
+                spec: Optional[CustomContainerSpec] = daemon_spec.spec
+                if spec is None:
+                    # Exit here immediately because the required service
+                    # spec to create a daemon is not provided. This is only
+                    # provided when a service is applied via 'orch apply'
+                    # command.
+                    msg = "Failed to {} daemon {} on {}: Required " \
+                          "service specification not provided".format(
+                              'reconfigure' if reconfig else 'deploy',
+                              daemon_spec.name(), daemon_spec.host)
+                    self.log.info(msg)
+                    return msg
+                image = spec.image
+                if spec.ports:
+                    ports.extend(spec.ports)
+
+            cephadm_config, deps = self.cephadm_services[daemon_spec.daemon_type].generate_config(
+                daemon_spec)
 
             # TCP port to open in the host firewall
-            if daemon_spec.ports:
-                daemon_spec.extra_args.extend(['--tcp-ports', ' '.join(map(str,daemon_spec.ports))])
+            if len(ports) > 0:
+                daemon_spec.extra_args.extend([
+                    '--tcp-ports', ' '.join(map(str, ports))
+                ])
 
             # osd deployments needs an --osd-uuid arg
             if daemon_spec.daemon_type == 'osd':
@@ -1910,7 +1755,10 @@ you may want to run:
                 daemon_spec.extra_args.append('--allow-ptrace')
 
             if self.cache.host_needs_registry_login(daemon_spec.host) and self.registry_url:
-                self._registry_login(daemon_spec.host, self.registry_url, self.registry_username, self.registry_password)
+                self._registry_login(daemon_spec.host, self.registry_url,
+                                     self.registry_username, self.registry_password)
+
+            daemon_spec.extra_args.extend(['--config-json', '-'])
 
             self.log.info('%s daemon %s on %s' % (
                 'Reconfiguring' if reconfig else 'Deploying',
@@ -1921,7 +1769,8 @@ you may want to run:
                 [
                     '--name', daemon_spec.name(),
                 ] + daemon_spec.extra_args,
-                stdin=json.dumps(cephadm_config))
+                stdin=json.dumps(cephadm_config),
+                image=image)
             if not code and daemon_spec.host in self.cache.daemons:
                 # prime cached service state with what we (should have)
                 # just created
@@ -1932,10 +1781,11 @@ you may want to run:
                 sd.status = 1
                 sd.status_desc = 'starting'
                 self.cache.add_daemon(daemon_spec.host, sd)
-                if daemon_spec.daemon_type in ['grafana', 'iscsi', 'prometheus', 'alertmanager', 'nfs']:
+                if daemon_spec.daemon_type in ['grafana', 'iscsi', 'prometheus', 'alertmanager']:
                     self.requires_post_actions.add(daemon_spec.daemon_type)
             self.cache.invalidate_host_daemons(daemon_spec.host)
-            self.cache.update_daemon_config_deps(daemon_spec.host, daemon_spec.name(), deps, start_time)
+            self.cache.update_daemon_config_deps(
+                daemon_spec.host, daemon_spec.name(), deps, start_time)
             self.cache.save_host(daemon_spec.host)
             msg = "{} {} on host '{}'".format(
                 'Reconfigured' if reconfig else 'Deployed', daemon_spec.name(), daemon_spec.host)
@@ -1943,7 +1793,8 @@ you may want to run:
                 self.events.for_daemon(daemon_spec.name(), OrchestratorEvent.INFO, msg)
             else:
                 what = 'reconfigure' if reconfig else 'deploy'
-                self.events.for_daemon(daemon_spec.name(), OrchestratorEvent.ERROR, f'Failed to {what}: {err}')
+                self.events.for_daemon(
+                    daemon_spec.name(), OrchestratorEvent.ERROR, f'Failed to {what}: {err}')
             return msg
 
     @forall_hosts
@@ -1955,15 +1806,14 @@ you may want to run:
         Remove a daemon
         """
         (daemon_type, daemon_id) = name.split('.', 1)
+        daemon = orchestrator.DaemonDescription(
+            daemon_type=daemon_type,
+            daemon_id=daemon_id,
+            hostname=host)
 
-        with set_exception_subject('service', orchestrator.DaemonDescription(
-                daemon_type=daemon_type,
-                daemon_id=daemon_id,
-                hostname=host,
-        ).service_id(), overwrite=True):
-
+        with set_exception_subject('service', daemon.service_id(), overwrite=True):
 
-            self.cephadm_services[daemon_type].pre_remove(daemon_id)
+            self.cephadm_services[daemon_type].pre_remove(daemon)
 
             args = ['--name', name, '--force']
             self.log.info('Removing daemon %s from %s' % (name, host))
@@ -1973,146 +1823,10 @@ you may want to run:
                 # remove item from cache
                 self.cache.rm_daemon(host, name)
             self.cache.invalidate_host_daemons(host)
-            return "Removed {} from host '{}'".format(name, host)
-
-    def _config_fn(self, service_type) -> Optional[Callable[[ServiceSpec], None]]:
-        fn = {
-            'mds': self.mds_service.config,
-            'rgw': self.rgw_service.config,
-            'nfs': self.nfs_service.config,
-            'iscsi': self.iscsi_service.config,
-        }.get(service_type)
-        return cast(Callable[[ServiceSpec], None], fn)
-
-    def _apply_service(self, spec: ServiceSpec) -> bool:
-        """
-        Schedule a service.  Deploy new daemons or remove old ones, depending
-        on the target label and count specified in the placement.
-        """
-        daemon_type = spec.service_type
-        service_name = spec.service_name()
-        if spec.unmanaged:
-            self.log.debug('Skipping unmanaged service %s' % service_name)
-            return False
-        if spec.preview_only:
-            self.log.debug('Skipping preview_only service %s' % service_name)
-            return False
-        self.log.debug('Applying service %s spec' % service_name)
-
-        config_func = self._config_fn(daemon_type)
 
-        if daemon_type == 'osd':
-            self.osd_service.create_from_spec(cast(DriveGroupSpec, spec))
-            # TODO: return True would result in a busy loop
-            return False
-
-        daemons = self.cache.get_daemons_by_service(service_name)
-
-        public_network = None
-        if daemon_type == 'mon':
-            ret, out, err = self.check_mon_command({
-                'prefix': 'config get',
-                'who': 'mon',
-                'key': 'public_network',
-            })
-            if '/' in out:
-                public_network = out.strip()
-                self.log.debug('mon public_network is %s' % public_network)
-
-        def matches_network(host):
-            # type: (str) -> bool
-            if not public_network:
-                return False
-            # make sure we have 1 or more IPs for that network on that
-            # host
-            return len(self.cache.networks[host].get(public_network, [])) > 0
-
-        ha = HostAssignment(
-            spec=spec,
-            get_hosts_func=self._get_hosts,
-            get_daemons_func=self.cache.get_daemons_by_service,
-            filter_new_host=matches_network if daemon_type == 'mon' else None,
-        )
-
-        hosts: List[HostPlacementSpec] = ha.place()
-        self.log.debug('Usable hosts: %s' % hosts)
-
-        r = False
-
-        # sanity check
-        if daemon_type in ['mon', 'mgr'] and len(hosts) < 1:
-            self.log.debug('cannot scale mon|mgr below 1 (hosts=%s)' % hosts)
-            return False
+            self.cephadm_services[daemon_type].post_remove(daemon)
 
-        # add any?
-        did_config = False
-
-        add_daemon_hosts: Set[HostPlacementSpec] = ha.add_daemon_hosts(hosts)
-        self.log.debug('Hosts that will receive new daemons: %s' % add_daemon_hosts)
-
-        remove_daemon_hosts: Set[orchestrator.DaemonDescription] = ha.remove_daemon_hosts(hosts)
-        self.log.debug('Hosts that will loose daemons: %s' % remove_daemon_hosts)
-
-        for host, network, name in add_daemon_hosts:
-            daemon_id = self.get_unique_name(daemon_type, host, daemons,
-                                             prefix=spec.service_id,
-                                             forcename=name)
-
-            if not did_config and config_func:
-                if daemon_type == 'rgw':
-                    rgw_config_func = cast(Callable[[RGWSpec, str], None], config_func)
-                    rgw_config_func(cast(RGWSpec, spec), daemon_id)
-                else:
-                    config_func(spec)
-                did_config = True
-
-            daemon_spec = self.cephadm_services[daemon_type].make_daemon_spec(host, daemon_id, network, spec)
-            self.log.debug('Placing %s.%s on host %s' % (
-                daemon_type, daemon_id, host))
-
-            self.cephadm_services[daemon_type].create(daemon_spec)
-
-            # add to daemon list so next name(s) will also be unique
-            sd = orchestrator.DaemonDescription(
-                hostname=host,
-                daemon_type=daemon_type,
-                daemon_id=daemon_id,
-            )
-            daemons.append(sd)
-            r = True
-
-        # remove any?
-        def _ok_to_stop(remove_daemon_hosts: Set[orchestrator.DaemonDescription]) -> bool:
-            daemon_ids = [d.daemon_id for d in remove_daemon_hosts]
-            r = self.cephadm_services[daemon_type].ok_to_stop(daemon_ids)
-            return not r.retval
-
-        while remove_daemon_hosts and not _ok_to_stop(remove_daemon_hosts):
-            # let's find a subset that is ok-to-stop
-            remove_daemon_hosts.pop()
-        for d in remove_daemon_hosts:
-            # NOTE: we are passing the 'force' flag here, which means
-            # we can delete a mon instances data.
-            self._remove_daemon(d.name(), d.hostname)
-            r = True
-
-        return r
-
-    def _apply_all_services(self):
-        r = False
-        specs = [] # type: List[ServiceSpec]
-        for sn, spec in self.spec_store.specs.items():
-            specs.append(spec)
-        for spec in specs:
-            try:
-                if self._apply_service(spec):
-                    r = True
-            except Exception as e:
-                self.log.exception('Failed to apply %s spec %s: %s' % (
-                    spec.service_name(), spec, e))
-                self.events.for_service(spec, 'ERROR', 'Failed to apply: ' + str(e))
-
-        return r
+            return "Removed {} from host '{}'".format(name, host)
 
     def _check_pool_exists(self, pool, service_name):
         logger.info(f'Checking pool "{pool}" exists for service {service_name}')
@@ -2120,81 +1834,8 @@ you may want to run:
             raise OrchestratorError(f'Cannot find pool "{pool}" for '
                                     f'service {service_name}')
 
-    def _check_daemons(self):
-
-        daemons = self.cache.get_daemons()
-        daemons_post: Dict[str, List[orchestrator.DaemonDescription]] = defaultdict(list)
-        for dd in daemons:
-            # orphan?
-            spec = self.spec_store.specs.get(dd.service_name(), None)
-            if not spec and dd.daemon_type not in ['mon', 'mgr', 'osd']:
-                # (mon and mgr specs should always exist; osds aren't matched
-                # to a service spec)
-                self.log.info('Removing orphan daemon %s...' % dd.name())
-                self._remove_daemon(dd.name(), dd.hostname)
-
-            # ignore unmanaged services
-            if spec and spec.unmanaged:
-                continue
-
-            # These daemon types require additional configs after creation
-            if dd.daemon_type in ['grafana', 'iscsi', 'prometheus', 'alertmanager', 'nfs']:
-                daemons_post[dd.daemon_type].append(dd)
-            
-            if self.cephadm_services[dd.daemon_type].get_active_daemon(
-               self.cache.get_daemons_by_service(dd.service_name())).daemon_id == dd.daemon_id:
-                dd.is_active = True
-            else:
-                dd.is_active = False
-
-            deps = self._calc_daemon_deps(dd.daemon_type, dd.daemon_id)
-            last_deps, last_config = self.cache.get_daemon_last_config_deps(
-                dd.hostname, dd.name())
-            if last_deps is None:
-                last_deps = []
-            reconfig = False
-            if not last_config:
-                self.log.info('Reconfiguring %s (unknown last config time)...'% (
-                    dd.name()))
-                reconfig = True
-            elif last_deps != deps:
-                self.log.debug('%s deps %s -> %s' % (dd.name(), last_deps,
-                                                     deps))
-                self.log.info('Reconfiguring %s (dependencies changed)...' % (
-                    dd.name()))
-                reconfig = True
-            elif self.last_monmap and \
-                    self.last_monmap > last_config and \
-               dd.daemon_type in CEPH_TYPES:
-                self.log.info('Reconfiguring %s (monmap changed)...' % dd.name())
-                reconfig = True
-            if reconfig:
-                try:
-                    self._create_daemon(
-                        CephadmDaemonSpec(
-                            host=dd.hostname,
-                            daemon_id=dd.daemon_id,
-                            daemon_type=dd.daemon_type),
-                        reconfig=True)
-                except OrchestratorError as e:
-                    self.events.from_orch_error(e)
-                    if dd.daemon_type in daemons_post:
-                        del daemons_post[dd.daemon_type]
-                    # continue...
-                except Exception as e:
-                    self.events.for_daemon_from_exception(dd.name(), e)
-                    if dd.daemon_type in daemons_post:
-                        del daemons_post[dd.daemon_type]
-                    # continue...
-
-        # do daemon post actions
-        for daemon_type, daemon_descs in daemons_post.items():
-            if daemon_type in self.requires_post_actions:
-                self.requires_post_actions.remove(daemon_type)
-                self._get_cephadm_service(daemon_type).daemon_check_post(daemon_descs)
-
     def _add_daemon(self, daemon_type, spec,
-                    create_func: Callable[..., T], config_func=None) -> List[T]:
+                    create_func: Callable[..., CephadmDaemonSpec], config_func=None) -> List[str]:
         """
         Add (and place) a daemon. Require explicit host placement.  Do not
         schedule, and do not apply the related scheduling limitations.
@@ -2210,7 +1851,7 @@ you may want to run:
 
     def _create_daemons(self, daemon_type, spec, daemons,
                         hosts, count,
-                        create_func: Callable[..., T], config_func=None) -> List[T]:
+                        create_func: Callable[..., CephadmDaemonSpec], config_func=None) -> List[str]:
         if count > len(hosts):
             raise OrchestratorError('too few hosts: want %d, have %s' % (
                 count, hosts))
@@ -2230,7 +1871,8 @@ you may want to run:
                     config_func(spec)
                 did_config = True
 
-            daemon_spec = self.cephadm_services[daemon_type].make_daemon_spec(host, daemon_id, network, spec)
+            daemon_spec = self.cephadm_services[daemon_type].make_daemon_spec(
+                host, daemon_id, network, spec)
             self.log.debug('Placing %s.%s on host %s' % (
                 daemon_type, daemon_id, host))
             args.append(daemon_spec)
@@ -2245,7 +1887,8 @@ you may want to run:
 
         @forall_hosts
         def create_func_map(*args):
-            return create_func(*args)
+            daemon_spec = create_func(*args)
+            return self._create_daemon(daemon_spec)
 
         return create_func_map(args)
 
@@ -2256,16 +1899,14 @@ you may want to run:
     @trivial_completion
     def add_mon(self, spec):
         # type: (ServiceSpec) -> List[str]
-        return self._add_daemon('mon', spec, self.mon_service.create)
+        return self._add_daemon('mon', spec, self.mon_service.prepare_create)
 
     @trivial_completion
     def add_mgr(self, spec):
         # type: (ServiceSpec) -> List[str]
-        return self._add_daemon('mgr', spec, self.mgr_service.create)
+        return self._add_daemon('mgr', spec, self.mgr_service.prepare_create)
 
     def _apply(self, spec: GenericSpec) -> str:
-        self.migration.verify_no_migration()
-
         if spec.service_type == 'host':
             return self._add_host(cast(HostSpec, spec))
 
@@ -2284,7 +1925,7 @@ you may want to run:
 
         ha = HostAssignment(
             spec=spec,
-            get_hosts_func=self._get_hosts,
+            hosts=self._hosts_with_daemon_inventory(),
             get_daemons_func=self.cache.get_daemons_by_service,
         )
         ha.validate()
@@ -2328,17 +1969,18 @@ you may want to run:
                 'prometheus': PlacementSpec(count=1),
                 'node-exporter': PlacementSpec(host_pattern='*'),
                 'crash': PlacementSpec(host_pattern='*'),
+                'container': PlacementSpec(count=1),
             }
             spec.placement = defaults[spec.service_type]
         elif spec.service_type in ['mon', 'mgr'] and \
-             spec.placement.count is not None and \
-             spec.placement.count < 1:
+                spec.placement.count is not None and \
+                spec.placement.count < 1:
             raise OrchestratorError('cannot scale %s service below 1' % (
                 spec.service_type))
 
         HostAssignment(
             spec=spec,
-            get_hosts_func=self._get_hosts,
+            hosts=self.inventory.all_specs(),  # All hosts, even those without daemon refresh
             get_daemons_func=self.cache.get_daemons_by_service,
         ).validate()
 
@@ -2361,7 +2003,7 @@ you may want to run:
 
     @trivial_completion
     def add_mds(self, spec: ServiceSpec) -> List[str]:
-        return self._add_daemon('mds', spec, self.mds_service.create, self.mds_service.config)
+        return self._add_daemon('mds', spec, self.mds_service.prepare_create, self.mds_service.config)
 
     @trivial_completion
     def apply_mds(self, spec: ServiceSpec) -> str:
@@ -2369,7 +2011,7 @@ you may want to run:
 
     @trivial_completion
     def add_rgw(self, spec) -> List[str]:
-        return self._add_daemon('rgw', spec, self.rgw_service.create, self.rgw_service.config)
+        return self._add_daemon('rgw', spec, self.rgw_service.prepare_create, self.rgw_service.config)
 
     @trivial_completion
     def apply_rgw(self, spec) -> str:
@@ -2378,7 +2020,7 @@ you may want to run:
     @trivial_completion
     def add_iscsi(self, spec):
         # type: (ServiceSpec) -> List[str]
-        return self._add_daemon('iscsi', spec, self.iscsi_service.create, self.iscsi_service.config)
+        return self._add_daemon('iscsi', spec, self.iscsi_service.prepare_create, self.iscsi_service.config)
 
     @trivial_completion
     def apply_iscsi(self, spec) -> str:
@@ -2386,7 +2028,7 @@ you may want to run:
 
     @trivial_completion
     def add_rbd_mirror(self, spec) -> List[str]:
-        return self._add_daemon('rbd-mirror', spec, self.rbd_mirror_service.create)
+        return self._add_daemon('rbd-mirror', spec, self.rbd_mirror_service.prepare_create)
 
     @trivial_completion
     def apply_rbd_mirror(self, spec) -> str:
@@ -2394,7 +2036,7 @@ you may want to run:
 
     @trivial_completion
     def add_nfs(self, spec) -> List[str]:
-        return self._add_daemon('nfs', spec, self.nfs_service.create, self.nfs_service.config)
+        return self._add_daemon('nfs', spec, self.nfs_service.prepare_create, self.nfs_service.config)
 
     @trivial_completion
     def apply_nfs(self, spec) -> str:
@@ -2406,7 +2048,7 @@ you may want to run:
 
     @trivial_completion
     def add_prometheus(self, spec) -> List[str]:
-        return self._add_daemon('prometheus', spec, self.prometheus_service.create)
+        return self._add_daemon('prometheus', spec, self.prometheus_service.prepare_create)
 
     @trivial_completion
     def apply_prometheus(self, spec) -> str:
@@ -2416,7 +2058,7 @@ you may want to run:
     def add_node_exporter(self, spec):
         # type: (ServiceSpec) -> List[str]
         return self._add_daemon('node-exporter', spec,
-                                self.node_exporter_service.create)
+                                self.node_exporter_service.prepare_create)
 
     @trivial_completion
     def apply_node_exporter(self, spec) -> str:
@@ -2426,7 +2068,7 @@ you may want to run:
     def add_crash(self, spec):
         # type: (ServiceSpec) -> List[str]
         return self._add_daemon('crash', spec,
-                                self.crash_service.create)
+                                self.crash_service.prepare_create)
 
     @trivial_completion
     def apply_crash(self, spec) -> str:
@@ -2435,7 +2077,7 @@ you may want to run:
     @trivial_completion
     def add_grafana(self, spec):
         # type: (ServiceSpec) -> List[str]
-        return self._add_daemon('grafana', spec, self.grafana_service.create)
+        return self._add_daemon('grafana', spec, self.grafana_service.prepare_create)
 
     @trivial_completion
     def apply_grafana(self, spec: ServiceSpec) -> str:
@@ -2444,13 +2086,22 @@ you may want to run:
     @trivial_completion
     def add_alertmanager(self, spec):
         # type: (ServiceSpec) -> List[str]
-        return self._add_daemon('alertmanager', spec, self.alertmanager_service.create)
+        return self._add_daemon('alertmanager', spec, self.alertmanager_service.prepare_create)
 
     @trivial_completion
     def apply_alertmanager(self, spec: ServiceSpec) -> str:
         return self._apply(spec)
 
-    def _get_container_image_id(self, image_name):
+    @trivial_completion
+    def add_container(self, spec: ServiceSpec) -> List[str]:
+        return self._add_daemon('container', spec,
+                                self.container_service.prepare_create)
+
+    @trivial_completion
+    def apply_container(self, spec: ServiceSpec) -> str:
+        return self._apply(spec)
+
+    def _get_container_image_info(self, image_name) -> ContainerInspectInfo:
         # pick a random host...
         host = None
         for host_name in self.inventory.keys():
@@ -2459,7 +2110,8 @@ you may want to run:
         if not host:
             raise OrchestratorError('no hosts defined')
         if self.cache.host_needs_registry_login(host) and self.registry_url:
-            self._registry_login(host, self.registry_url, self.registry_username, self.registry_password)
+            self._registry_login(host, self.registry_url,
+                                 self.registry_username, self.registry_password)
         out, err, code = self._run_cephadm(
             host, '', 'pull', [],
             image=image_name,
@@ -2468,12 +2120,19 @@ you may want to run:
         if code:
             raise OrchestratorError('Failed to pull %s on %s: %s' % (
                 image_name, host, '\n'.join(out)))
-        j = json.loads('\n'.join(out))
-        image_id = j.get('image_id')
-        ceph_version = j.get('ceph_version')
-        self.log.debug('image %s -> id %s version %s' %
-                       (image_name, image_id, ceph_version))
-        return image_id, ceph_version
+        try:
+            j = json.loads('\n'.join(out))
+            r = ContainerInspectInfo(
+                j['image_id'],
+                j.get('ceph_version'),
+                j.get('repo_digest')
+            )
+            self.log.debug(f'image {image_name} -> {r}')
+            return r
+        except (ValueError, KeyError) as _:
+            msg = 'Failed to pull %s on %s: %s' % (image_name, host, '\n'.join(out))
+            self.log.exception(msg)
+            raise OrchestratorError(msg)
 
     @trivial_completion
     def upgrade_check(self, image, version) -> str:
@@ -2484,19 +2143,18 @@ you may want to run:
         else:
             raise OrchestratorError('must specify either image or version')
 
-        target_id, target_version = self._get_container_image_id(target_name)
-        self.log.debug('Target image %s id %s version %s' % (
-            target_name, target_id, target_version))
+        image_info = self._get_container_image_info(target_name)
+        self.log.debug(f'image info {image} -> {image_info}')
         r = {
             'target_name': target_name,
-            'target_id': target_id,
-            'target_version': target_version,
+            'target_id': image_info.image_id,
+            'target_version': image_info.ceph_version,
             'needs_update': dict(),
             'up_to_date': list(),
         }
         for host, dm in self.cache.daemons.items():
             for name, dd in dm.items():
-                if target_id == dd.container_image_id:
+                if image_info.image_id == dd.container_image_id:
                     r['up_to_date'].append(dd.name())
                 else:
                     r['needs_update'][dd.name()] = {
@@ -2504,6 +2162,9 @@ you may want to run:
                         'current_id': dd.container_image_id,
                         'current_version': dd.version,
                     }
+        if self.use_repo_digest:
+            r['target_digest'] = image_info.repo_digest
+
         return json.dumps(r, indent=4, sort_keys=True)
 
     @trivial_completion
index 17fbe6bcb24766c5266fe0bff1aba59236db5e2c..26bee82d9d5d3a4b2af062cfb7e7c3ffb11e5555 100644 (file)
@@ -1,6 +1,6 @@
 import logging
 import random
-from typing import List, Optional, Callable, Iterable, Tuple, TypeVar, Set
+from typing import List, Optional, Callable, Iterable, TypeVar, Set
 
 import orchestrator
 from ceph.deployment.service_spec import PlacementSpec, HostPlacementSpec, ServiceSpec
@@ -10,6 +10,7 @@ from orchestrator import OrchestratorValidationError
 logger = logging.getLogger(__name__)
 T = TypeVar('T')
 
+
 class BaseScheduler(object):
     """
     Base Scheduler Interface
@@ -34,6 +35,7 @@ class SimpleScheduler(BaseScheduler):
     1) Shuffle the provided host_pool
     2) Select from list up to :count
     """
+
     def __init__(self, spec):
         super(SimpleScheduler, self).__init__(spec)
 
@@ -53,19 +55,25 @@ class HostAssignment(object):
 
     def __init__(self,
                  spec,  # type: ServiceSpec
-                 get_hosts_func,  # type: Callable
-                 get_daemons_func, # type: Callable[[str],List[orchestrator.DaemonDescription]]
-                 filter_new_host=None, # type: Optional[Callable[[str],bool]]
+                 hosts: List[orchestrator.HostSpec],
+                 get_daemons_func,  # type: Callable[[str],List[orchestrator.DaemonDescription]]
+                 filter_new_host=None,  # type: Optional[Callable[[str],bool]]
                  scheduler=None,  # type: Optional[BaseScheduler]
                  ):
-        assert spec and get_hosts_func and get_daemons_func
+        assert spec and get_daemons_func
         self.spec = spec  # type: ServiceSpec
         self.scheduler = scheduler if scheduler else SimpleScheduler(self.spec)
-        self.get_hosts_func = get_hosts_func
+        self.hosts: List[orchestrator.HostSpec] = hosts
         self.filter_new_host = filter_new_host
         self.service_name = spec.service_name()
         self.daemons = get_daemons_func(self.service_name)
 
+    def hosts_by_label(self, label: str) -> List[orchestrator.HostSpec]:
+        return [h for h in self.hosts if label in h.labels]
+
+    def get_hostnames(self) -> List[str]:
+        return [h.hostname for h in self.hosts]
+
     def validate(self):
         self.spec.validate()
 
@@ -75,20 +83,20 @@ class HostAssignment(object):
 
         if self.spec.placement.hosts:
             explicit_hostnames = {h.hostname for h in self.spec.placement.hosts}
-            unknown_hosts = explicit_hostnames.difference(set(self.get_hosts_func()))
+            unknown_hosts = explicit_hostnames.difference(set(self.get_hostnames()))
             if unknown_hosts:
                 raise OrchestratorValidationError(
                     f'Cannot place {self.spec.one_line_str()} on {", ".join(sorted(unknown_hosts))}: Unknown hosts')
 
         if self.spec.placement.host_pattern:
-            pattern_hostnames = self.spec.placement.filter_matching_hosts(self.get_hosts_func)
+            pattern_hostnames = self.spec.placement.filter_matching_hostspecs(self.hosts)
             if not pattern_hostnames:
                 raise OrchestratorValidationError(
                     f'Cannot place {self.spec.one_line_str()}: No matching hosts')
 
         if self.spec.placement.label:
-            label_hostnames = self.get_hosts_func(label=self.spec.placement.label)
-            if not label_hostnames:
+            label_hosts = self.hosts_by_label(self.spec.placement.label)
+            if not label_hosts:
                 raise OrchestratorValidationError(
                     f'Cannot place {self.spec.one_line_str()}: No matching '
                     f'hosts for label {self.spec.placement.label}')
@@ -114,8 +122,30 @@ class HostAssignment(object):
         # If we don't have <count> the list of candidates is definitive.
         if count is None:
             logger.debug('Provided hosts: %s' % candidates)
+            # if asked to place even number of mons, deploy 1 less
+            if self.spec.service_type == 'mon' and (len(candidates) % 2) == 0:
+                logger.info("deploying %s monitor(s) instead of %s so monitors may achieve consensus" % (
+                    len(candidates) - 1, len(candidates)))
+                return candidates[0:len(candidates)-1]
             return candidates
 
+        # if asked to place even number of mons, deploy 1 less
+        if self.spec.service_type == 'mon':
+            # if count >= number of candidates then number of candidates
+            # is determining factor in how many mons will be placed
+            if count >= len(candidates):
+                if (len(candidates) % 2) == 0:
+                    logger.info("deploying %s monitor(s) instead of %s so monitors may achieve consensus" % (
+                        len(candidates) - 1, len(candidates)))
+                    count = len(candidates) - 1
+            # if count < number of candidates then count is determining
+            # factor in how many mons will get placed
+            else:
+                if (count % 2) == 0:
+                    logger.info(
+                        "deploying %s monitor(s) instead of %s so monitors may achieve consensus" % (count - 1, count))
+                    count = count - 1
+
         # prefer hosts that already have services.
         # this avoids re-assigning to _new_ hosts
         # and constant re-distribution of hosts when new nodes are
@@ -136,7 +166,7 @@ class HostAssignment(object):
             if self.filter_new_host:
                 old = others
                 others = [h for h in others if self.filter_new_host(h.hostname)]
-                logger.debug('filtered %s down to %s' % (old, candidates))
+                logger.debug('filtered %s down to %s' % (old, others))
 
             # ask the scheduler to return a set of hosts with a up to the value of <count>
             others = self.scheduler.place(others, need)
@@ -145,7 +175,7 @@ class HostAssignment(object):
             # if a host already has the anticipated daemon, merge it with the candidates
             # to get a list of HostPlacementSpec that can be deployed on.
             return list(merge_hostspecs(hosts_with_daemons, others))
-    
+
     def get_hosts_with_active_daemon(self, hosts: List[HostPlacementSpec]) -> List[HostPlacementSpec]:
         active_hosts: List['HostPlacementSpec'] = []
         for daemon in self.daemons:
@@ -155,7 +185,7 @@ class HostAssignment(object):
                         active_hosts.append(h)
         # remove duplicates before returning
         return list(dict.fromkeys(active_hosts))
-    
+
     def prefer_hosts_with_active_daemons(self, hosts: List[HostPlacementSpec], count) -> List[HostPlacementSpec]:
         # try to prefer host with active daemon if possible
         active_hosts = self.get_hosts_with_active_daemon(hosts)
@@ -166,7 +196,7 @@ class HostAssignment(object):
                 return self.scheduler.place(active_hosts, count)
             else:
                 return list(merge_hostspecs(self.scheduler.place(active_hosts, count),
-                            self.scheduler.place(hosts, count - len(active_hosts))))
+                                            self.scheduler.place(hosts, count - len(active_hosts))))
         # ask the scheduler to return a set of hosts with a up to the value of <count>
         return self.scheduler.place(hosts, count)
 
@@ -191,21 +221,22 @@ class HostAssignment(object):
             return self.spec.placement.hosts
         elif self.spec.placement.label:
             return [
-                HostPlacementSpec(x, '', '')
-                for x in self.get_hosts_func(label=self.spec.placement.label)
+                HostPlacementSpec(x.hostname, '', '')
+                for x in self.hosts_by_label(self.spec.placement.label)
             ]
         elif self.spec.placement.host_pattern:
             return [
                 HostPlacementSpec(x, '', '')
-                for x in self.spec.placement.filter_matching_hosts(self.get_hosts_func)
+                for x in self.spec.placement.filter_matching_hostspecs(self.hosts)
             ]
         # If none of the above and also no <count>
         if self.spec.placement.count is None:
-            raise OrchestratorValidationError("placement spec is empty: no hosts, no label, no pattern, no count")
+            raise OrchestratorValidationError(
+                "placement spec is empty: no hosts, no label, no pattern, no count")
         # backward compatibility: consider an empty placements to be the same pattern = *
         return [
-            HostPlacementSpec(x, '', '')
-            for x in self.get_hosts_func()
+            HostPlacementSpec(x.hostname, '', '')
+            for x in self.hosts
         ]
 
     def hosts_with_daemons(self, candidates: List[HostPlacementSpec]) -> List[HostPlacementSpec]:
@@ -249,4 +280,3 @@ def difference_hostspecs(l: List[HostPlacementSpec], r: List[HostPlacementSpec])
     """
     r_names = {h.hostname for h in r}
     return [h for h in l if h.hostname not in r_names]
-
diff --git a/ceph/src/pybind/mgr/cephadm/serve.py b/ceph/src/pybind/mgr/cephadm/serve.py
new file mode 100644 (file)
index 0000000..1e91a33
--- /dev/null
@@ -0,0 +1,634 @@
+import datetime
+import json
+import logging
+from collections import defaultdict
+from typing import TYPE_CHECKING, Optional, List, Callable, cast, Set, Dict
+
+try:
+    import remoto
+except ImportError:
+    remoto = None
+
+from ceph.deployment import inventory
+from ceph.deployment.drive_group import DriveGroupSpec
+from ceph.deployment.service_spec import ServiceSpec, HostPlacementSpec, RGWSpec
+
+import orchestrator
+from cephadm.schedule import HostAssignment
+from cephadm.upgrade import CEPH_UPGRADE_ORDER
+from cephadm.utils import forall_hosts, cephadmNoImage, str_to_datetime, is_repo_digest
+from orchestrator import OrchestratorError
+
+if TYPE_CHECKING:
+    from cephadm.module import CephadmOrchestrator, ContainerInspectInfo
+
+logger = logging.getLogger(__name__)
+
+CEPH_TYPES = set(CEPH_UPGRADE_ORDER)
+
+
+class CephadmServe:
+    """
+    This module contains functions that are executed in the
+    serve() thread. Thus they don't block the CLI.
+
+    On the other hand, These function should *not* be called form
+    CLI handlers, to avoid blocking the CLI
+    """
+
+    def __init__(self, mgr: "CephadmOrchestrator"):
+        self.mgr: "CephadmOrchestrator" = mgr
+        self.log = logger
+
+    def serve(self) -> None:
+        """
+        The main loop of cephadm.
+
+        A command handler will typically change the declarative state
+        of cephadm. This loop will then attempt to apply this new state.
+        """
+        self.log.debug("serve starting")
+        while self.mgr.run:
+
+            try:
+
+                self.convert_tags_to_repo_digest()
+
+                # refresh daemons
+                self.log.debug('refreshing hosts and daemons')
+                self._refresh_hosts_and_daemons()
+
+                self._check_for_strays()
+
+                self._update_paused_health()
+
+                if not self.mgr.paused:
+                    self.mgr.rm_util.process_removal_queue()
+
+                    self.mgr.migration.migrate()
+                    if self.mgr.migration.is_migration_ongoing():
+                        continue
+
+                    if self._apply_all_services():
+                        continue  # did something, refresh
+
+                    self._check_daemons()
+
+                    if self.mgr.upgrade.continue_upgrade():
+                        continue
+
+            except OrchestratorError as e:
+                if e.event_subject:
+                    self.mgr.events.from_orch_error(e)
+
+            self._serve_sleep()
+        self.log.debug("serve exit")
+
+    def _serve_sleep(self):
+        sleep_interval = 600
+        self.log.debug('Sleeping for %d seconds', sleep_interval)
+        ret = self.mgr.event.wait(sleep_interval)
+        self.mgr.event.clear()
+
+    def _update_paused_health(self):
+        if self.mgr.paused:
+            self.mgr.health_checks['CEPHADM_PAUSED'] = {
+                'severity': 'warning',
+                'summary': 'cephadm background work is paused',
+                'count': 1,
+                'detail': ["'ceph orch resume' to resume"],
+            }
+            self.mgr.set_health_checks(self.mgr.health_checks)
+        else:
+            if 'CEPHADM_PAUSED' in self.mgr.health_checks:
+                del self.mgr.health_checks['CEPHADM_PAUSED']
+                self.mgr.set_health_checks(self.mgr.health_checks)
+
+    def _refresh_hosts_and_daemons(self) -> None:
+        bad_hosts = []
+        failures = []
+
+        @forall_hosts
+        def refresh(host):
+            if self.mgr.cache.host_needs_check(host):
+                r = self._check_host(host)
+                if r is not None:
+                    bad_hosts.append(r)
+            if self.mgr.cache.host_needs_daemon_refresh(host):
+                self.log.debug('refreshing %s daemons' % host)
+                r = self._refresh_host_daemons(host)
+                if r:
+                    failures.append(r)
+
+            if self.mgr.cache.host_needs_registry_login(host) and self.mgr.registry_url:
+                self.log.debug(f"Logging `{host}` into custom registry")
+                r = self.mgr._registry_login(host, self.mgr.registry_url,
+                                             self.mgr.registry_username, self.mgr.registry_password)
+                if r:
+                    bad_hosts.append(r)
+
+            if self.mgr.cache.host_needs_device_refresh(host):
+                self.log.debug('refreshing %s devices' % host)
+                r = self._refresh_host_devices(host)
+                if r:
+                    failures.append(r)
+
+            if self.mgr.cache.host_needs_osdspec_preview_refresh(host):
+                self.log.debug(f"refreshing OSDSpec previews for {host}")
+                r = self._refresh_host_osdspec_previews(host)
+                if r:
+                    failures.append(r)
+
+            if self.mgr.cache.host_needs_new_etc_ceph_ceph_conf(host):
+                self.log.debug(f"deploying new /etc/ceph/ceph.conf on `{host}`")
+                r = self._deploy_etc_ceph_ceph_conf(host)
+                if r:
+                    bad_hosts.append(r)
+
+        refresh(self.mgr.cache.get_hosts())
+
+        health_changed = False
+        if 'CEPHADM_HOST_CHECK_FAILED' in self.mgr.health_checks:
+            del self.mgr.health_checks['CEPHADM_HOST_CHECK_FAILED']
+            health_changed = True
+        if bad_hosts:
+            self.mgr.health_checks['CEPHADM_HOST_CHECK_FAILED'] = {
+                'severity': 'warning',
+                'summary': '%d hosts fail cephadm check' % len(bad_hosts),
+                'count': len(bad_hosts),
+                'detail': bad_hosts,
+            }
+            health_changed = True
+        if failures:
+            self.mgr.health_checks['CEPHADM_REFRESH_FAILED'] = {
+                'severity': 'warning',
+                'summary': 'failed to probe daemons or devices',
+                'count': len(failures),
+                'detail': failures,
+            }
+            health_changed = True
+        elif 'CEPHADM_REFRESH_FAILED' in self.mgr.health_checks:
+            del self.mgr.health_checks['CEPHADM_REFRESH_FAILED']
+            health_changed = True
+        if health_changed:
+            self.mgr.set_health_checks(self.mgr.health_checks)
+
+    def _check_host(self, host):
+        if host not in self.mgr.inventory:
+            return
+        self.log.debug(' checking %s' % host)
+        try:
+            out, err, code = self.mgr._run_cephadm(
+                host, cephadmNoImage, 'check-host', [],
+                error_ok=True, no_fsid=True)
+            self.mgr.cache.update_last_host_check(host)
+            self.mgr.cache.save_host(host)
+            if code:
+                self.log.debug(' host %s failed check' % host)
+                if self.mgr.warn_on_failed_host_check:
+                    return 'host %s failed check: %s' % (host, err)
+            else:
+                self.log.debug(' host %s ok' % host)
+        except Exception as e:
+            self.log.debug(' host %s failed check' % host)
+            return 'host %s failed check: %s' % (host, e)
+
+    def _refresh_host_daemons(self, host) -> Optional[str]:
+        try:
+            out, err, code = self.mgr._run_cephadm(
+                host, 'mon', 'ls', [], no_fsid=True)
+            if code:
+                return 'host %s cephadm ls returned %d: %s' % (
+                    host, code, err)
+        except Exception as e:
+            return 'host %s scrape failed: %s' % (host, e)
+        ls = json.loads(''.join(out))
+        dm = {}
+        for d in ls:
+            if not d['style'].startswith('cephadm'):
+                continue
+            if d['fsid'] != self.mgr._cluster_fsid:
+                continue
+            if '.' not in d['name']:
+                continue
+            sd = orchestrator.DaemonDescription()
+            sd.last_refresh = datetime.datetime.utcnow()
+            for k in ['created', 'started', 'last_configured', 'last_deployed']:
+                v = d.get(k, None)
+                if v:
+                    setattr(sd, k, str_to_datetime(d[k]))
+            sd.daemon_type = d['name'].split('.')[0]
+            sd.daemon_id = '.'.join(d['name'].split('.')[1:])
+            sd.hostname = host
+            sd.container_id = d.get('container_id')
+            if sd.container_id:
+                # shorten the hash
+                sd.container_id = sd.container_id[0:12]
+            sd.container_image_name = d.get('container_image_name')
+            sd.container_image_id = d.get('container_image_id')
+            sd.version = d.get('version')
+            if sd.daemon_type == 'osd':
+                sd.osdspec_affinity = self.mgr.osd_service.get_osdspec_affinity(sd.daemon_id)
+            if 'state' in d:
+                sd.status_desc = d['state']
+                sd.status = {
+                    'running': 1,
+                    'stopped': 0,
+                    'error': -1,
+                    'unknown': -1,
+                }[d['state']]
+            else:
+                sd.status_desc = 'unknown'
+                sd.status = None
+            dm[sd.name()] = sd
+        self.log.debug('Refreshed host %s daemons (%d)' % (host, len(dm)))
+        self.mgr.cache.update_host_daemons(host, dm)
+        self.mgr.cache.save_host(host)
+        return None
+
+    def _refresh_host_devices(self, host) -> Optional[str]:
+        try:
+            out, err, code = self.mgr._run_cephadm(
+                host, 'osd',
+                'ceph-volume',
+                ['--', 'inventory', '--format=json', '--filter-for-batch'])
+            if code:
+                return 'host %s ceph-volume inventory returned %d: %s' % (
+                    host, code, err)
+        except Exception as e:
+            return 'host %s ceph-volume inventory failed: %s' % (host, e)
+        devices = json.loads(''.join(out))
+        try:
+            out, err, code = self.mgr._run_cephadm(
+                host, 'mon',
+                'list-networks',
+                [],
+                no_fsid=True)
+            if code:
+                return 'host %s list-networks returned %d: %s' % (
+                    host, code, err)
+        except Exception as e:
+            return 'host %s list-networks failed: %s' % (host, e)
+        networks = json.loads(''.join(out))
+        self.log.debug('Refreshed host %s devices (%d) networks (%s)' % (
+            host, len(devices), len(networks)))
+        devices = inventory.Devices.from_json(devices)
+        self.mgr.cache.update_host_devices_networks(host, devices.devices, networks)
+        self.update_osdspec_previews(host)
+        self.mgr.cache.save_host(host)
+        return None
+
+    def _refresh_host_osdspec_previews(self, host) -> bool:
+        self.update_osdspec_previews(host)
+        self.mgr.cache.save_host(host)
+        self.log.debug(f'Refreshed OSDSpec previews for host <{host}>')
+        return True
+
+    def update_osdspec_previews(self, search_host: str = ''):
+        # Set global 'pending' flag for host
+        self.mgr.cache.loading_osdspec_preview.add(search_host)
+        previews = []
+        # query OSDSpecs for host <search host> and generate/get the preview
+        # There can be multiple previews for one host due to multiple OSDSpecs.
+        previews.extend(self.mgr.osd_service.get_previews(search_host))
+        self.log.debug(f"Loading OSDSpec previews to HostCache")
+        self.mgr.cache.osdspec_previews[search_host] = previews
+        # Unset global 'pending' flag for host
+        self.mgr.cache.loading_osdspec_preview.remove(search_host)
+
+    def _deploy_etc_ceph_ceph_conf(self, host: str) -> Optional[str]:
+        config = self.mgr.get_minimal_ceph_conf()
+
+        try:
+            with self.mgr._remote_connection(host) as tpl:
+                conn, connr = tpl
+                out, err, code = remoto.process.check(
+                    conn,
+                    ['mkdir', '-p', '/etc/ceph'])
+                if code:
+                    return f'failed to create /etc/ceph on {host}: {err}'
+                out, err, code = remoto.process.check(
+                    conn,
+                    ['dd', 'of=/etc/ceph/ceph.conf'],
+                    stdin=config.encode('utf-8')
+                )
+                if code:
+                    return f'failed to create /etc/ceph/ceph.conf on {host}: {err}'
+                self.mgr.cache.update_last_etc_ceph_ceph_conf(host)
+                self.mgr.cache.save_host(host)
+        except OrchestratorError as e:
+            return f'failed to create /etc/ceph/ceph.conf on {host}: {str(e)}'
+        return None
+
+    def _check_for_strays(self) -> None:
+        self.log.debug('_check_for_strays')
+        for k in ['CEPHADM_STRAY_HOST',
+                  'CEPHADM_STRAY_DAEMON']:
+            if k in self.mgr.health_checks:
+                del self.mgr.health_checks[k]
+        if self.mgr.warn_on_stray_hosts or self.mgr.warn_on_stray_daemons:
+            ls = self.mgr.list_servers()
+            managed = self.mgr.cache.get_daemon_names()
+            host_detail = []     # type: List[str]
+            host_num_daemons = 0
+            daemon_detail = []  # type: List[str]
+            for item in ls:
+                host = item.get('hostname')
+                daemons = item.get('services')  # misnomer!
+                missing_names = []
+                for s in daemons:
+                    name = '%s.%s' % (s.get('type'), s.get('id'))
+                    if s.get('type') == 'rbd-mirror':
+                        defaults = defaultdict(lambda: None, {'id': None})
+                        metadata = self.mgr.get_metadata(
+                            "rbd-mirror", s.get('id'), default=defaults)
+                        if metadata['id']:
+                            name = '%s.%s' % (s.get('type'), metadata['id'])
+                        else:
+                            self.log.debug(
+                                "Failed to find daemon id for rbd-mirror service %s" % (s.get('id')))
+
+                    if host not in self.mgr.inventory:
+                        missing_names.append(name)
+                        host_num_daemons += 1
+                    if name not in managed:
+                        daemon_detail.append(
+                            'stray daemon %s on host %s not managed by cephadm' % (name, host))
+                if missing_names:
+                    host_detail.append(
+                        'stray host %s has %d stray daemons: %s' % (
+                            host, len(missing_names), missing_names))
+            if self.mgr.warn_on_stray_hosts and host_detail:
+                self.mgr.health_checks['CEPHADM_STRAY_HOST'] = {
+                    'severity': 'warning',
+                    'summary': '%d stray host(s) with %s daemon(s) '
+                    'not managed by cephadm' % (
+                        len(host_detail), host_num_daemons),
+                    'count': len(host_detail),
+                    'detail': host_detail,
+                }
+            if self.mgr.warn_on_stray_daemons and daemon_detail:
+                self.mgr.health_checks['CEPHADM_STRAY_DAEMON'] = {
+                    'severity': 'warning',
+                    'summary': '%d stray daemons(s) not managed by cephadm' % (
+                        len(daemon_detail)),
+                    'count': len(daemon_detail),
+                    'detail': daemon_detail,
+                }
+        self.mgr.set_health_checks(self.mgr.health_checks)
+
+    def _apply_all_services(self) -> bool:
+        r = False
+        specs = []  # type: List[ServiceSpec]
+        for sn, spec in self.mgr.spec_store.specs.items():
+            specs.append(spec)
+        for spec in specs:
+            try:
+                if self._apply_service(spec):
+                    r = True
+            except Exception as e:
+                self.log.exception('Failed to apply %s spec %s: %s' % (
+                    spec.service_name(), spec, e))
+                self.mgr.events.for_service(spec, 'ERROR', 'Failed to apply: ' + str(e))
+
+        return r
+
+    def _config_fn(self, service_type) -> Optional[Callable[[ServiceSpec], None]]:
+        fn = {
+            'mds': self.mgr.mds_service.config,
+            'rgw': self.mgr.rgw_service.config,
+            'nfs': self.mgr.nfs_service.config,
+            'iscsi': self.mgr.iscsi_service.config,
+        }.get(service_type)
+        return cast(Callable[[ServiceSpec], None], fn)
+
+    def _apply_service(self, spec: ServiceSpec) -> bool:
+        """
+        Schedule a service.  Deploy new daemons or remove old ones, depending
+        on the target label and count specified in the placement.
+        """
+        self.mgr.migration.verify_no_migration()
+
+        daemon_type = spec.service_type
+        service_name = spec.service_name()
+        if spec.unmanaged:
+            self.log.debug('Skipping unmanaged service %s' % service_name)
+            return False
+        if spec.preview_only:
+            self.log.debug('Skipping preview_only service %s' % service_name)
+            return False
+        self.log.debug('Applying service %s spec' % service_name)
+
+        config_func = self._config_fn(daemon_type)
+
+        if daemon_type == 'osd':
+            self.mgr.osd_service.create_from_spec(cast(DriveGroupSpec, spec))
+            # TODO: return True would result in a busy loop
+            # can't know if daemon count changed; create_from_spec doesn't
+            # return a solid indication
+            return False
+
+        daemons = self.mgr.cache.get_daemons_by_service(service_name)
+
+        public_network = None
+        if daemon_type == 'mon':
+            ret, out, err = self.mgr.check_mon_command({
+                'prefix': 'config get',
+                'who': 'mon',
+                'key': 'public_network',
+            })
+            if '/' in out:
+                public_network = out.strip()
+                self.log.debug('mon public_network is %s' % public_network)
+
+        def matches_network(host):
+            # type: (str) -> bool
+            if not public_network:
+                return False
+            # make sure we have 1 or more IPs for that network on that
+            # host
+            return len(self.mgr.cache.networks[host].get(public_network, [])) > 0
+
+        ha = HostAssignment(
+            spec=spec,
+            hosts=self.mgr._hosts_with_daemon_inventory(),
+            get_daemons_func=self.mgr.cache.get_daemons_by_service,
+            filter_new_host=matches_network if daemon_type == 'mon' else None,
+        )
+
+        hosts: List[HostPlacementSpec] = ha.place()
+        self.log.debug('Usable hosts: %s' % hosts)
+
+        r = None
+
+        # sanity check
+        if daemon_type in ['mon', 'mgr'] and len(hosts) < 1:
+            self.log.debug('cannot scale mon|mgr below 1 (hosts=%s)' % hosts)
+            return False
+
+        # add any?
+        did_config = False
+
+        add_daemon_hosts: Set[HostPlacementSpec] = ha.add_daemon_hosts(hosts)
+        self.log.debug('Hosts that will receive new daemons: %s' % add_daemon_hosts)
+
+        remove_daemon_hosts: Set[orchestrator.DaemonDescription] = ha.remove_daemon_hosts(hosts)
+        self.log.debug('Hosts that will loose daemons: %s' % remove_daemon_hosts)
+
+        for host, network, name in add_daemon_hosts:
+            daemon_id = self.mgr.get_unique_name(daemon_type, host, daemons,
+                                                 prefix=spec.service_id,
+                                                 forcename=name)
+
+            if not did_config and config_func:
+                if daemon_type == 'rgw':
+                    rgw_config_func = cast(Callable[[RGWSpec, str], None], config_func)
+                    rgw_config_func(cast(RGWSpec, spec), daemon_id)
+                else:
+                    config_func(spec)
+                did_config = True
+
+            daemon_spec = self.mgr.cephadm_services[daemon_type].make_daemon_spec(
+                host, daemon_id, network, spec)
+            self.log.debug('Placing %s.%s on host %s' % (
+                daemon_type, daemon_id, host))
+
+            try:
+                daemon_spec = self.mgr.cephadm_services[daemon_type].prepare_create(daemon_spec)
+                self.mgr._create_daemon(daemon_spec)
+                r = True
+            except (RuntimeError, OrchestratorError) as e:
+                self.mgr.events.for_service(spec, 'ERROR',
+                                            f"Failed while placing {daemon_type}.{daemon_id}"
+                                            f"on {host}: {e}")
+                # only return "no change" if no one else has already succeeded.
+                # later successes will also change to True
+                if r is None:
+                    r = False
+                continue
+
+            # add to daemon list so next name(s) will also be unique
+            sd = orchestrator.DaemonDescription(
+                hostname=host,
+                daemon_type=daemon_type,
+                daemon_id=daemon_id,
+            )
+            daemons.append(sd)
+
+        # remove any?
+        def _ok_to_stop(remove_daemon_hosts: Set[orchestrator.DaemonDescription]) -> bool:
+            daemon_ids = [d.daemon_id for d in remove_daemon_hosts]
+            r = self.mgr.cephadm_services[daemon_type].ok_to_stop(daemon_ids)
+            return not r.retval
+
+        while remove_daemon_hosts and not _ok_to_stop(remove_daemon_hosts):
+            # let's find a subset that is ok-to-stop
+            remove_daemon_hosts.pop()
+        for d in remove_daemon_hosts:
+            r = True
+            # NOTE: we are passing the 'force' flag here, which means
+            # we can delete a mon instances data.
+            self.mgr._remove_daemon(d.name(), d.hostname)
+
+        if r is None:
+            r = False
+        return r
+
+    def _check_daemons(self) -> None:
+
+        daemons = self.mgr.cache.get_daemons()
+        daemons_post: Dict[str, List[orchestrator.DaemonDescription]] = defaultdict(list)
+        for dd in daemons:
+            # orphan?
+            spec = self.mgr.spec_store.specs.get(dd.service_name(), None)
+            if not spec and dd.daemon_type not in ['mon', 'mgr', 'osd']:
+                # (mon and mgr specs should always exist; osds aren't matched
+                # to a service spec)
+                self.log.info('Removing orphan daemon %s...' % dd.name())
+                self.mgr._remove_daemon(dd.name(), dd.hostname)
+
+            # ignore unmanaged services
+            if spec and spec.unmanaged:
+                continue
+
+            # These daemon types require additional configs after creation
+            if dd.daemon_type in ['grafana', 'iscsi', 'prometheus', 'alertmanager', 'nfs']:
+                daemons_post[dd.daemon_type].append(dd)
+
+            if self.mgr.cephadm_services[dd.daemon_type].get_active_daemon(
+               self.mgr.cache.get_daemons_by_service(dd.service_name())).daemon_id == dd.daemon_id:
+                dd.is_active = True
+            else:
+                dd.is_active = False
+
+            deps = self.mgr._calc_daemon_deps(dd.daemon_type, dd.daemon_id)
+            last_deps, last_config = self.mgr.cache.get_daemon_last_config_deps(
+                dd.hostname, dd.name())
+            if last_deps is None:
+                last_deps = []
+            action = self.mgr.cache.get_scheduled_daemon_action(dd.hostname, dd.name())
+            if not last_config:
+                self.log.info('Reconfiguring %s (unknown last config time)...' % (
+                    dd.name()))
+                action = 'reconfig'
+            elif last_deps != deps:
+                self.log.debug('%s deps %s -> %s' % (dd.name(), last_deps,
+                                                     deps))
+                self.log.info('Reconfiguring %s (dependencies changed)...' % (
+                    dd.name()))
+                action = 'reconfig'
+            elif self.mgr.last_monmap and \
+                    self.mgr.last_monmap > last_config and \
+                    dd.daemon_type in CEPH_TYPES:
+                self.log.info('Reconfiguring %s (monmap changed)...' % dd.name())
+                action = 'reconfig'
+            elif self.mgr.extra_ceph_conf_is_newer(last_config) and \
+                    dd.daemon_type in CEPH_TYPES:
+                self.log.info('Reconfiguring %s (extra config changed)...' % dd.name())
+                action = 'reconfig'
+            if action:
+                if self.mgr.cache.get_scheduled_daemon_action(dd.hostname, dd.name()) == 'redeploy' \
+                        and action == 'reconfig':
+                    action = 'redeploy'
+                try:
+                    self.mgr._daemon_action(
+                        daemon_type=dd.daemon_type,
+                        daemon_id=dd.daemon_id,
+                        host=dd.hostname,
+                        action=action
+                    )
+                    self.mgr.cache.rm_scheduled_daemon_action(dd.hostname, dd.name())
+                except OrchestratorError as e:
+                    self.mgr.events.from_orch_error(e)
+                    if dd.daemon_type in daemons_post:
+                        del daemons_post[dd.daemon_type]
+                    # continue...
+                except Exception as e:
+                    self.mgr.events.for_daemon_from_exception(dd.name(), e)
+                    if dd.daemon_type in daemons_post:
+                        del daemons_post[dd.daemon_type]
+                    # continue...
+
+        # do daemon post actions
+        for daemon_type, daemon_descs in daemons_post.items():
+            if daemon_type in self.mgr.requires_post_actions:
+                self.mgr.requires_post_actions.remove(daemon_type)
+                self.mgr._get_cephadm_service(daemon_type).daemon_check_post(daemon_descs)
+
+    def convert_tags_to_repo_digest(self):
+        if not self.mgr.use_repo_digest:
+            return
+        settings = self.mgr.upgrade.get_distinct_container_image_settings()
+        digests: Dict[str, ContainerInspectInfo] = {}
+        for container_image_ref in set(settings.values()):
+            if not is_repo_digest(container_image_ref):
+                image_info = self.mgr._get_container_image_info(container_image_ref)
+                if image_info.repo_digest:
+                    assert is_repo_digest(image_info.repo_digest), image_info
+                digests[container_image_ref] = image_info
+
+        for entity, container_image_ref in settings.items():
+            if not is_repo_digest(container_image_ref):
+                image_info = digests[container_image_ref]
+                if image_info.repo_digest:
+                    self.mgr.set_container_image(entity, image_info.repo_digest)
index c42cc121d61fcda4e8425d2791c34d28de6acb37..c779ff34f180a82e327b80c66e718bf5a7037e58 100644 (file)
@@ -3,11 +3,13 @@ import re
 import logging
 import subprocess
 from abc import ABCMeta, abstractmethod
-from typing import TYPE_CHECKING, List, Callable, Any, TypeVar, Generic,  Optional, Dict, Any, Tuple
+from typing import TYPE_CHECKING, List, Callable, Any, TypeVar, Generic, \
+    Optional, Dict, Any, Tuple, NewType
 
 from mgr_module import HandleCommandResult, MonCommandFailed
 
 from ceph.deployment.service_spec import ServiceSpec, RGWSpec
+from ceph.deployment.utils import is_ipv6, unwrap_ipv6
 from orchestrator import OrchestratorError, DaemonDescription
 from cephadm import utils
 
@@ -17,18 +19,20 @@ if TYPE_CHECKING:
 logger = logging.getLogger(__name__)
 
 ServiceSpecs = TypeVar('ServiceSpecs', bound=ServiceSpec)
+AuthEntity = NewType('AuthEntity', str)
 
 
 class CephadmDaemonSpec(Generic[ServiceSpecs]):
     # typing.NamedTuple + Generic is broken in py36
-    def __init__(self, host: str, daemon_id,
-                 spec: Optional[ServiceSpecs]=None,
-                 network: Optional[str]=None,
-                 keyring: Optional[str]=None,
-                 extra_args: Optional[List[str]]=None,
-                 extra_config: Optional[Dict[str, Any]]=None,
-                 daemon_type: Optional[str]=None,
-                 ports: Optional[List[int]]=None,):
+    def __init__(self, host: str, daemon_id: str,
+                 spec: Optional[ServiceSpecs] = None,
+                 network: Optional[str] = None,
+                 keyring: Optional[str] = None,
+                 extra_args: Optional[List[str]] = None,
+                 ceph_conf: str = '',
+                 extra_files: Optional[Dict[str, Any]] = None,
+                 daemon_type: Optional[str] = None,
+                 ports: Optional[List[int]] = None,):
         """
         Used for
         * deploying new daemons. then everything is set
@@ -53,15 +57,23 @@ class CephadmDaemonSpec(Generic[ServiceSpecs]):
 
         # For run_cephadm. Would be great to have more expressive names.
         self.extra_args: List[str] = extra_args or []
-        self.extra_config: Dict[str, Any] = extra_config or {}
+
+        self.ceph_conf = ceph_conf
+        self.extra_files = extra_files or {}
 
         # TCP ports used by the daemon
         self.ports:  List[int] = ports or []
 
-
     def name(self) -> str:
         return '%s.%s' % (self.daemon_type, self.daemon_id)
 
+    def config_get_files(self) -> Dict[str, Any]:
+        files = self.extra_files
+        if self.ceph_conf:
+            files['config'] = self.ceph_conf
+
+        return files
+
 
 class CephadmService(metaclass=ABCMeta):
     """
@@ -70,13 +82,16 @@ class CephadmService(metaclass=ABCMeta):
 
     @property
     @abstractmethod
-    def TYPE(self):
+    def TYPE(self) -> str:
         pass
 
     def __init__(self, mgr: "CephadmOrchestrator"):
         self.mgr: "CephadmOrchestrator" = mgr
 
-    def make_daemon_spec(self, host, daemon_id, netowrk, spec: ServiceSpecs) -> CephadmDaemonSpec:
+    def make_daemon_spec(self, host: str,
+                         daemon_id: str,
+                         netowrk: str,
+                         spec: ServiceSpecs) -> CephadmDaemonSpec:
         return CephadmDaemonSpec(
             host=host,
             daemon_id=daemon_id,
@@ -84,25 +99,13 @@ class CephadmService(metaclass=ABCMeta):
             network=netowrk
         )
 
-    def create(self, daemon_spec: CephadmDaemonSpec):
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         raise NotImplementedError()
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
-        # Ceph.daemons (mon, mgr, mds, osd, etc)
-        cephadm_config = self.mgr._get_config_and_keyring(
-            daemon_spec.daemon_type,
-            daemon_spec.daemon_id,
-            host=daemon_spec.host,
-            keyring=daemon_spec.keyring,
-            extra_ceph_config=daemon_spec.extra_config.pop('config', ''))
-
-
-        if daemon_spec.extra_config:
-            cephadm_config.update({'files': daemon_spec.extra_config})
-
-        return cephadm_config, []
+        raise NotImplementedError()
 
-    def daemon_check_post(self, daemon_descrs: List[DaemonDescription]):
+    def daemon_check_post(self, daemon_descrs: List[DaemonDescription]) -> None:
         """The post actions needed to be done after daemons are checked"""
         if self.mgr.config_dashboard:
             if 'dashboard' in self.mgr.get('mgr_map')['modules']:
@@ -110,7 +113,7 @@ class CephadmService(metaclass=ABCMeta):
             else:
                 logger.debug('Dashboard is not enabled. Skip configuration.')
 
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
         """Config dashboard settings."""
         raise NotImplementedError()
 
@@ -127,7 +130,7 @@ class CephadmService(metaclass=ABCMeta):
                                       service_name: str,
                                       get_mon_cmd: str,
                                       set_mon_cmd: str,
-                                      service_url: str):
+                                      service_url: str) -> None:
         """A helper to get and set service_url via Dashboard's MON command.
 
            If result of get_mon_cmd differs from service_url, set_mon_cmd will
@@ -149,7 +152,7 @@ class CephadmService(metaclass=ABCMeta):
     def _check_and_set_dashboard(self,
                                  service_name: str,
                                  get_cmd: str,
-                                 get_set_cmd_dicts: Callable[[str], List[dict]]):
+                                 get_set_cmd_dicts: Callable[[str], List[dict]]) -> None:
         """A helper to set configs in the Dashboard.
 
         The method is useful for the pattern:
@@ -199,8 +202,6 @@ class CephadmService(metaclass=ABCMeta):
             except MonCommandFailed as e:
                 logger.warning('Failed to set Dashboard config for %s: %s', service_name, e)
 
-
-
     def ok_to_stop(self, daemon_ids: List[str]) -> HandleCommandResult:
         names = [f'{self.TYPE}.{d_id}' for d_id in daemon_ids]
         out = f'It is presumed safe to stop {names}'
@@ -224,16 +225,103 @@ class CephadmService(metaclass=ABCMeta):
         logger.info(out)
         return HandleCommandResult(r.retval, out, r.stderr)
 
-    def pre_remove(self, daemon_id: str) -> None:
+    def pre_remove(self, daemon: DaemonDescription) -> None:
         """
         Called before the daemon is removed.
         """
-        pass
+        assert self.TYPE == daemon.daemon_type
+        logger.debug(f'Pre remove daemon {self.TYPE}.{daemon.daemon_id}')
+
+    def post_remove(self, daemon: DaemonDescription) -> None:
+        """
+        Called after the daemon is removed.
+        """
+        assert self.TYPE == daemon.daemon_type
+        logger.debug(f'Post remove daemon {self.TYPE}.{daemon.daemon_id}')
+
+
+class CephService(CephadmService):
+    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        # Ceph.daemons (mon, mgr, mds, osd, etc)
+        cephadm_config = self.get_config_and_keyring(
+            daemon_spec.daemon_type,
+            daemon_spec.daemon_id,
+            host=daemon_spec.host,
+            keyring=daemon_spec.keyring,
+            extra_ceph_config=daemon_spec.ceph_conf)
+
+        if daemon_spec.config_get_files():
+            cephadm_config.update({'files': daemon_spec.config_get_files()})
+
+        return cephadm_config, []
+
+    def post_remove(self, daemon: DaemonDescription) -> None:
+        super().post_remove(daemon)
+        self.remove_keyring(daemon)
 
-class MonService(CephadmService):
+    def get_auth_entity(self, daemon_id: str, host: str = "") -> AuthEntity:
+        """
+        Map the daemon id to a cephx keyring entity name
+        """
+        if self.TYPE in ['rgw', 'rbd-mirror', 'nfs', "iscsi"]:
+            return AuthEntity(f'client.{self.TYPE}.{daemon_id}')
+        elif self.TYPE == 'crash':
+            if host == "":
+                raise OrchestratorError("Host not provided to generate <crash> auth entity name")
+            return AuthEntity(f'client.{self.TYPE}.{host}')
+        elif self.TYPE == 'mon':
+            return AuthEntity('mon.')
+        elif self.TYPE in ['mgr', 'osd', 'mds']:
+            return AuthEntity(f'{self.TYPE}.{daemon_id}')
+        else:
+            raise OrchestratorError("unknown daemon type")
+
+    def get_config_and_keyring(self,
+                               daemon_type: str,
+                               daemon_id: str,
+                               host: str,
+                               keyring: Optional[str] = None,
+                               extra_ceph_config: Optional[str] = None
+                               ) -> Dict[str, Any]:
+        # keyring
+        if not keyring:
+            entity: AuthEntity = self.get_auth_entity(daemon_id, host=host)
+            ret, keyring, err = self.mgr.check_mon_command({
+                'prefix': 'auth get',
+                'entity': entity,
+            })
+
+        config = self.mgr.get_minimal_ceph_conf()
+
+        if extra_ceph_config:
+            config += extra_ceph_config
+
+        return {
+            'config': config,
+            'keyring': keyring,
+        }
+
+    def remove_keyring(self, daemon: DaemonDescription) -> None:
+        daemon_id: str = daemon.daemon_id
+        host: str = daemon.hostname
+
+        if daemon_id == 'mon':
+            # do not remove the mon keyring
+            return
+
+        entity = self.get_auth_entity(daemon_id, host=host)
+
+        logger.info(f'Remove keyring: {entity}')
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'auth rm',
+            'entity': entity,
+        })
+
+
+class MonService(CephService):
     TYPE = 'mon'
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         """
         Create a new monitor on the given host.
         """
@@ -243,7 +331,7 @@ class MonService(CephadmService):
         # get mon. key
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get',
-            'entity': 'mon.',
+            'entity': self.get_auth_entity(name),
         })
 
         extra_config = '[mon.%s]\n' % name
@@ -253,10 +341,13 @@ class MonService(CephadmService):
                 extra_config += 'public network = %s\n' % network
             elif network.startswith('[v') and network.endswith(']'):
                 extra_config += 'public addrv = %s\n' % network
+            elif is_ipv6(network):
+                extra_config += 'public addr = %s\n' % unwrap_ipv6(network)
             elif ':' not in network:
                 extra_config += 'public addr = %s\n' % network
             else:
-                raise OrchestratorError('Must specify a CIDR network, ceph addrvec, or plain IP: \'%s\'' % network)
+                raise OrchestratorError(
+                    'Must specify a CIDR network, ceph addrvec, or plain IP: \'%s\'' % network)
         else:
             # try to get the public_network from the config
             ret, network, err = self.mgr.check_mon_command({
@@ -266,15 +357,17 @@ class MonService(CephadmService):
             })
             network = network.strip() if network else network
             if not network:
-                raise OrchestratorError('Must set public_network config option or specify a CIDR network, ceph addrvec, or plain IP')
+                raise OrchestratorError(
+                    'Must set public_network config option or specify a CIDR network, ceph addrvec, or plain IP')
             if '/' not in network:
-                raise OrchestratorError('public_network is set but does not look like a CIDR network: \'%s\'' % network)
+                raise OrchestratorError(
+                    'public_network is set but does not look like a CIDR network: \'%s\'' % network)
             extra_config += 'public network = %s\n' % network
 
-        daemon_spec.extra_config={'config': extra_config}
-        daemon_spec.keyring=keyring
+        daemon_spec.ceph_conf = extra_config
+        daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
     def _check_safe_to_destroy(self, mon_id: str) -> None:
         ret, out, err = self.mgr.check_mon_command({
@@ -293,12 +386,16 @@ class MonService(CephadmService):
         new_mons = [m for m in mons if m != mon_id]
         new_quorum = [m for m in j['quorum_names'] if m != mon_id]
         if len(new_quorum) > len(new_mons) / 2:
-            logger.info('Safe to remove mon.%s: new quorum should be %s (from %s)' % (mon_id, new_quorum, new_mons))
+            logger.info('Safe to remove mon.%s: new quorum should be %s (from %s)' %
+                        (mon_id, new_quorum, new_mons))
             return
-        raise OrchestratorError('Removing %s would break mon quorum (new quorum %s, new mons %s)' % (mon_id, new_quorum, new_mons))
+        raise OrchestratorError(
+            'Removing %s would break mon quorum (new quorum %s, new mons %s)' % (mon_id, new_quorum, new_mons))
 
+    def pre_remove(self, daemon: DaemonDescription) -> None:
+        super().pre_remove(daemon)
 
-    def pre_remove(self, daemon_id: str) -> None:
+        daemon_id: str = daemon.daemon_id
         self._check_safe_to_destroy(daemon_id)
 
         # remove mon from quorum before we destroy the daemon
@@ -309,10 +406,10 @@ class MonService(CephadmService):
         })
 
 
-class MgrService(CephadmService):
+class MgrService(CephService):
     TYPE = 'mgr'
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         """
         Create a new manager instance on a host.
         """
@@ -322,13 +419,12 @@ class MgrService(CephadmService):
         # get mgr. key
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': 'mgr.%s' % mgr_id,
+            'entity': self.get_auth_entity(mgr_id),
             'caps': ['mon', 'profile mgr',
                      'osd', 'allow *',
                      'mds', 'allow *'],
         })
 
-
         # Retrieve ports used by manager modules
         # In the case of the dashboard port and with several manager daemons
         # running in different hosts, it exists the possibility that the
@@ -338,12 +434,12 @@ class MgrService(CephadmService):
         ports = []
         config_ports = ''
         ret, mgr_services, err = self.mgr.check_mon_command({
-                'prefix': 'mgr services',
+            'prefix': 'mgr services',
         })
         if mgr_services:
             mgr_endpoints = json.loads(mgr_services)
             for end_point in mgr_endpoints.values():
-                port = re.search('\:\d+\/', end_point)
+                port = re.search(r'\:\d+\/', end_point)
                 if port:
                     ports.append(int(port[0][1:-1]))
 
@@ -352,18 +448,41 @@ class MgrService(CephadmService):
 
         daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
-    
+        return daemon_spec
+
     def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
-        active_mgr_str = self.mgr.get('mgr_map')['active_name']
         for daemon in daemon_descrs:
-            if daemon.daemon_id == active_mgr_str:
+            if self.mgr.daemon_is_self(daemon.daemon_type, daemon.daemon_id):
                 return daemon
         # if no active mgr found, return empty Daemon Desc
         return DaemonDescription()
 
+    def fail_over(self) -> None:
+        if not self.mgr_map_has_standby():
+            raise OrchestratorError('Need standby mgr daemon', event_kind_subject=(
+                'daemon', 'mgr' + self.mgr.get_mgr_id()))
+
+        self.mgr.events.for_daemon('mgr' + self.mgr.get_mgr_id(),
+                                   'INFO', 'Failing over to other MGR')
+        logger.info('Failing over to other MGR')
+
+        # fail over
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'mgr fail',
+            'who': self.mgr.get_mgr_id(),
+        })
+
+    def mgr_map_has_standby(self) -> bool:
+        """
+        This is a bit safer than asking our inventory. If the mgr joined the mgr map,
+        we know it joined the cluster
+        """
+        mgr_map = self.mgr.get('mgr_map')
+        num = len(mgr_map.get('standbys'))
+        return bool(num)
+
 
-class MdsService(CephadmService):
+class MdsService(CephService):
     TYPE = 'mds'
 
     def config(self, spec: ServiceSpec) -> None:
@@ -378,22 +497,22 @@ class MdsService(CephadmService):
             'value': spec.service_id,
         })
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         mds_id, host = daemon_spec.daemon_id, daemon_spec.host
 
         # get mgr. key
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': 'mds.' + mds_id,
+            'entity': self.get_auth_entity(mds_id),
             'caps': ['mon', 'profile mds',
                      'osd', 'allow rw tag cephfs *=*',
                      'mds', 'allow'],
         })
         daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
-    
+        return daemon_spec
+
     def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
         active_mds_strs = list()
         for fs in self.mgr.get('fs_map')['filesystems']:
@@ -410,10 +529,10 @@ class MdsService(CephadmService):
         return DaemonDescription()
 
 
-class RgwService(CephadmService):
+class RgwService(CephService):
     TYPE = 'rgw'
 
-    def config(self, spec: RGWSpec, rgw_id: str):
+    def config(self, spec: RGWSpec, rgw_id: str) -> None:
         assert self.TYPE == spec.service_type
 
         # create realm, zonegroup, and zone if needed
@@ -446,8 +565,8 @@ class RgwService(CephadmService):
                 cert_data = spec.rgw_frontend_ssl_certificate
             else:
                 raise OrchestratorError(
-                        'Invalid rgw_frontend_ssl_certificate: %s'
-                        % spec.rgw_frontend_ssl_certificate)
+                    'Invalid rgw_frontend_ssl_certificate: %s'
+                    % spec.rgw_frontend_ssl_certificate)
             ret, out, err = self.mgr.check_mon_command({
                 'prefix': 'config-key set',
                 'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.crt',
@@ -461,8 +580,8 @@ class RgwService(CephadmService):
                 key_data = spec.rgw_frontend_ssl_key
             else:
                 raise OrchestratorError(
-                        'Invalid rgw_frontend_ssl_key: %s'
-                        % spec.rgw_frontend_ssl_key)
+                    'Invalid rgw_frontend_ssl_key: %s'
+                    % spec.rgw_frontend_ssl_key)
             ret, out, err = self.mgr.check_mon_command({
                 'prefix': 'config-key set',
                 'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.key',
@@ -473,7 +592,7 @@ class RgwService(CephadmService):
             spec.service_name(), spec.placement.pretty_str()))
         self.mgr.spec_store.save(spec)
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         rgw_id, host = daemon_spec.daemon_id, daemon_spec.host
 
@@ -481,31 +600,31 @@ class RgwService(CephadmService):
 
         daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
-    def get_keyring(self, rgw_id: str):
+    def get_keyring(self, rgw_id: str) -> str:
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': f"{utils.name_to_config_section('rgw')}.{rgw_id}",
+            'entity': self.get_auth_entity(rgw_id),
             'caps': ['mon', 'allow *',
                      'mgr', 'allow rw',
                      'osd', 'allow rwx'],
         })
         return keyring
 
-    def create_realm_zonegroup_zone(self, spec: RGWSpec, rgw_id: str):
+    def create_realm_zonegroup_zone(self, spec: RGWSpec, rgw_id: str) -> None:
         if utils.get_cluster_health(self.mgr) != 'HEALTH_OK':
             raise OrchestratorError('Health not ok, will try agin when health ok')
 
-        #get keyring needed to run rados commands and strip out just the keyring
-        keyring = self.get_keyring(rgw_id).split('key = ',1)[1].rstrip()
+        # get keyring needed to run rados commands and strip out just the keyring
+        keyring = self.get_keyring(rgw_id).split('key = ', 1)[1].rstrip()
 
         # We can call radosgw-admin within the container, cause cephadm gives the MGR the required keyring permissions
 
         def get_realms() -> List[str]:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'realm', 'list',
                    '--format=json']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
@@ -518,20 +637,20 @@ class RgwService(CephadmService):
             except Exception as e:
                 raise OrchestratorError('failed to parse realm info')
 
-        def create_realm():
+        def create_realm() -> None:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'realm', 'create',
-                   '--rgw-realm=%s'%spec.rgw_realm,
+                   '--rgw-realm=%s' % spec.rgw_realm,
                    '--default']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-            self.mgr.log.info('created realm: %s'%spec.rgw_realm)
+            self.mgr.log.info('created realm: %s' % spec.rgw_realm)
 
         def get_zonegroups() -> List[str]:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'zonegroup', 'list',
                    '--format=json']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
@@ -544,25 +663,25 @@ class RgwService(CephadmService):
             except Exception as e:
                 raise OrchestratorError('failed to parse zonegroup info')
 
-        def create_zonegroup():
+        def create_zonegroup() -> None:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'zonegroup', 'create',
                    '--rgw-zonegroup=default',
                    '--master', '--default']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
             self.mgr.log.info('created zonegroup: default')
 
-        def create_zonegroup_if_required():
+        def create_zonegroup_if_required() -> None:
             zonegroups = get_zonegroups()
             if 'default' not in zonegroups:
                 create_zonegroup()
 
         def get_zones() -> List[str]:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'zone', 'list',
                    '--format=json']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
@@ -575,17 +694,16 @@ class RgwService(CephadmService):
             except Exception as e:
                 raise OrchestratorError('failed to parse zone info')
 
-        def create_zone():
+        def create_zone() -> None:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'zone', 'create',
                    '--rgw-zonegroup=default',
-                   '--rgw-zone=%s'%spec.rgw_zone,
+                   '--rgw-zone=%s' % spec.rgw_zone,
                    '--master', '--default']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-            self.mgr.log.info('created zone: %s'%spec.rgw_zone)
-
+            self.mgr.log.info('created zone: %s' % spec.rgw_zone)
 
         changes = False
         realms = get_realms()
@@ -602,48 +720,48 @@ class RgwService(CephadmService):
         # update period if changes were made
         if changes:
             cmd = ['radosgw-admin',
-                   '--key=%s'%keyring,
-                   '--user', 'rgw.%s'%rgw_id,
+                   '--key=%s' % keyring,
+                   '--user', 'rgw.%s' % rgw_id,
                    'period', 'update',
-                   '--rgw-realm=%s'%spec.rgw_realm,
+                   '--rgw-realm=%s' % spec.rgw_realm,
                    '--commit']
             result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
             self.mgr.log.info('updated period')
 
 
-class RbdMirrorService(CephadmService):
+class RbdMirrorService(CephService):
     TYPE = 'rbd-mirror'
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
 
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': 'client.rbd-mirror.' + daemon_id,
+            'entity': self.get_auth_entity(daemon_id),
             'caps': ['mon', 'profile rbd-mirror',
                      'osd', 'profile rbd'],
         })
 
         daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
 
-class CrashService(CephadmService):
+class CrashService(CephService):
     TYPE = 'crash'
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
 
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': 'client.crash.' + host,
+            'entity': self.get_auth_entity(daemon_id, host=host),
             'caps': ['mon', 'profile crash',
                      'mgr', 'profile crash'],
         })
 
         daemon_spec.keyring = keyring
 
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
diff --git a/ceph/src/pybind/mgr/cephadm/services/container.py b/ceph/src/pybind/mgr/cephadm/services/container.py
new file mode 100644 (file)
index 0000000..c073d1a
--- /dev/null
@@ -0,0 +1,29 @@
+import logging
+from typing import List, Any, Tuple, Dict
+
+from ceph.deployment.service_spec import CustomContainerSpec
+
+from .cephadmservice import CephadmService, CephadmDaemonSpec
+
+logger = logging.getLogger(__name__)
+
+
+class CustomContainerService(CephadmService):
+    TYPE = 'container'
+
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec[CustomContainerSpec]) \
+            -> CephadmDaemonSpec:
+        assert self.TYPE == daemon_spec.daemon_type
+        return daemon_spec
+
+    def generate_config(self, daemon_spec: CephadmDaemonSpec[CustomContainerSpec]) \
+            -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
+        assert daemon_spec.spec
+        deps: List[str] = []
+        spec: CustomContainerSpec = daemon_spec.spec
+        config: Dict[str, Any] = spec.config_json()
+        logger.debug(
+            'Generated configuration for \'%s\' service: config-json=%s, dependencies=%s' %
+            (self.TYPE, config, deps))
+        return config, deps
index aecf1417835943cc302ccc0b6ad27c0d1361cddd..8998740cb6e94a966f4ce31951cdefb9ffd7e846 100644 (file)
@@ -6,13 +6,13 @@ from mgr_module import MonCommandFailed
 from ceph.deployment.service_spec import IscsiServiceSpec
 
 from orchestrator import DaemonDescription, OrchestratorError
-from .cephadmservice import CephadmService, CephadmDaemonSpec
+from .cephadmservice import CephadmDaemonSpec, CephService
 from .. import utils
 
 logger = logging.getLogger(__name__)
 
 
-class IscsiService(CephadmService):
+class IscsiService(CephService):
     TYPE = 'iscsi'
 
     def config(self, spec: IscsiServiceSpec) -> None:
@@ -23,7 +23,7 @@ class IscsiService(CephadmService):
             spec.service_name(), spec.placement.pretty_str()))
         self.mgr.spec_store.save(spec)
 
-    def create(self, daemon_spec: CephadmDaemonSpec[IscsiServiceSpec]) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec[IscsiServiceSpec]) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         assert daemon_spec.spec
 
@@ -32,7 +32,7 @@ class IscsiService(CephadmService):
 
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
-            'entity': utils.name_to_auth_entity('iscsi', igw_id),
+            'entity': self.get_auth_entity(igw_id),
             'caps': ['mon', 'profile rbd, '
                             'allow command "osd blacklist", '
                             'allow command "config-key get" with "key" prefix "iscsi/"',
@@ -44,7 +44,7 @@ class IscsiService(CephadmService):
                 cert_data = '\n'.join(spec.ssl_cert)
             else:
                 cert_data = spec.ssl_cert
-            ret, out, err = self.mgr.mon_command({
+            ret, out, err = self.mgr.check_mon_command({
                 'prefix': 'config-key set',
                 'key': f'iscsi/{utils.name_to_config_section("iscsi")}.{igw_id}/iscsi-gateway.crt',
                 'val': cert_data,
@@ -55,7 +55,7 @@ class IscsiService(CephadmService):
                 key_data = '\n'.join(spec.ssl_key)
             else:
                 key_data = spec.ssl_key
-            ret, out, err = self.mgr.mon_command({
+            ret, out, err = self.mgr.check_mon_command({
                 'prefix': 'config-key set',
                 'key': f'iscsi/{utils.name_to_config_section("iscsi")}.{igw_id}/iscsi-gateway.key',
                 'val': key_data,
@@ -68,11 +68,11 @@ class IscsiService(CephadmService):
         igw_conf = self.mgr.template.render('services/iscsi/iscsi-gateway.cfg.j2', context)
 
         daemon_spec.keyring = keyring
-        daemon_spec.extra_config = {'iscsi-gateway.cfg': igw_conf}
+        daemon_spec.extra_files = {'iscsi-gateway.cfg': igw_conf}
 
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
         def get_set_cmd_dicts(out: str) -> List[dict]:
             gateways = json.loads(out)['gateways']
             cmd_dicts = []
index cc4d1416b65ad1752ebbc0e49487509589c8de17..998acc38951c5cfad48824e7a518b7c07d790c8c 100644 (file)
@@ -14,9 +14,9 @@ class GrafanaService(CephadmService):
     TYPE = 'grafana'
     DEFAULT_SERVICE_PORT = 3000
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
         assert self.TYPE == daemon_spec.daemon_type
@@ -61,9 +61,12 @@ class GrafanaService(CephadmService):
 
     def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
         # Use the least-created one as the active daemon
-        return daemon_descrs[-1]
+        if daemon_descrs:
+            return daemon_descrs[-1]
+        # if empty list provided, return empty Daemon Desc
+        return DaemonDescription()
 
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
         # TODO: signed cert
         dd = self.get_active_daemon(daemon_descrs)
         service_url = 'https://{}:{}'.format(
@@ -80,10 +83,10 @@ class AlertmanagerService(CephadmService):
     TYPE = 'alertmanager'
     DEFAULT_SERVICE_PORT = 9093
 
-    def create(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         assert daemon_spec.spec
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> Tuple[Dict[str, Any], List[str]]:
         assert self.TYPE == daemon_spec.daemon_type
@@ -141,11 +144,15 @@ class AlertmanagerService(CephadmService):
 
     def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
         # TODO: if there are multiple daemons, who is the active one?
-        return daemon_descrs[0]
+        if daemon_descrs:
+            return daemon_descrs[0]
+        # if empty list provided, return empty Daemon Desc
+        return DaemonDescription()
 
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
         dd = self.get_active_daemon(daemon_descrs)
-        service_url = 'http://{}:{}'.format(self._inventory_get_addr(dd.hostname), self.DEFAULT_SERVICE_PORT)
+        service_url = 'http://{}:{}'.format(self._inventory_get_addr(dd.hostname),
+                                            self.DEFAULT_SERVICE_PORT)
         self._set_service_url_on_dashboard(
             'AlertManager',
             'dashboard get-alertmanager-api-host',
@@ -158,9 +165,9 @@ class PrometheusService(CephadmService):
     TYPE = 'prometheus'
     DEFAULT_SERVICE_PORT = 9095
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
         assert self.TYPE == daemon_spec.daemon_type
@@ -231,9 +238,12 @@ class PrometheusService(CephadmService):
 
     def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
         # TODO: if there are multiple daemons, who is the active one?
-        return daemon_descrs[0]
+        if daemon_descrs:
+            return daemon_descrs[0]
+        # if empty list provided, return empty Daemon Desc
+        return DaemonDescription()
 
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
         dd = self.get_active_daemon(daemon_descrs)
         service_url = 'http://{}:{}'.format(
             self._inventory_get_addr(dd.hostname), self.DEFAULT_SERVICE_PORT)
@@ -248,9 +258,9 @@ class PrometheusService(CephadmService):
 class NodeExporterService(CephadmService):
     TYPE = 'node-exporter'
 
-    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
-        return self.mgr._create_daemon(daemon_spec)
+        return daemon_spec
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
         assert self.TYPE == daemon_spec.daemon_type
index 6824053ff20bb61afbb62256431c54f30fc39b04..3eaf50cac6892804c94b3cdc279a5edeff206d8d 100644 (file)
@@ -1,5 +1,5 @@
 import logging
-from typing import TYPE_CHECKING, Dict, Optional, Tuple, Any, List, Set, cast
+from typing import TYPE_CHECKING, Dict, Tuple, Any, List
 
 from ceph.deployment.service_spec import NFSServiceSpec
 import rados
@@ -7,7 +7,7 @@ import rados
 from orchestrator import OrchestratorError, DaemonDescription
 
 from cephadm import utils
-from cephadm.services.cephadmservice import CephadmService, CephadmDaemonSpec
+from cephadm.services.cephadmservice import AuthEntity, CephadmDaemonSpec, CephService
 
 if TYPE_CHECKING:
     from cephadm.module import CephadmOrchestrator
@@ -15,60 +15,9 @@ if TYPE_CHECKING:
 logger = logging.getLogger(__name__)
 
 
-class NFSService(CephadmService):
+class NFSService(CephService):
     TYPE = 'nfs'
 
-    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
-        assert self.TYPE == daemon_spec.daemon_type
-
-        daemon_type = daemon_spec.daemon_type
-        daemon_id = daemon_spec.daemon_id
-        host = daemon_spec.host
-
-        deps: List[str] = []
-
-        # find the matching NFSServiceSpec
-        # TODO: find the spec and pass via _create_daemon instead ??
-        dd = DaemonDescription()
-        dd.daemon_type = daemon_type
-        dd.daemon_id = daemon_id
-        dd.hostname = host
-
-        service_name = dd.service_name()
-        specs = self.mgr.spec_store.find(service_name)
-
-        if not specs:
-            raise OrchestratorError('Cannot find service spec %s' % (service_name))
-        elif len(specs) > 1:
-            raise OrchestratorError('Found multiple service specs for %s' % (service_name))
-        else:
-            # cast to keep mypy happy
-            spec = cast(NFSServiceSpec, specs[0])
-
-        nfs = NFSGanesha(self.mgr, daemon_id, spec)
-
-        # create the keyring
-        entity = nfs.get_keyring_entity()
-        keyring = nfs.get_or_create_keyring(entity=entity)
-
-        # update the caps after get-or-create, the keyring might already exist!
-        nfs.update_keyring_caps(entity=entity)
-
-        # create the rados config object
-        nfs.create_rados_config_obj()
-
-        # generate the cephadm config
-        cephadm_config = nfs.get_cephadm_config()
-        cephadm_config.update(
-            self.mgr._get_config_and_keyring(
-                daemon_type, daemon_id,
-                keyring=keyring,
-                host=host
-            )
-        )
-
-        return cephadm_config, deps
-
     def config(self, spec: NFSServiceSpec) -> None:
         assert self.TYPE == spec.service_type
         self.mgr._check_pool_exists(spec.pool, spec.service_name())
@@ -77,7 +26,7 @@ class NFSService(CephadmService):
             spec.service_name(), spec.placement.pretty_str()))
         self.mgr.spec_store.save(spec)
 
-    def create(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> str:
+    def prepare_create(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> CephadmDaemonSpec:
         assert self.TYPE == daemon_spec.daemon_type
         assert daemon_spec.spec
 
@@ -87,99 +36,76 @@ class NFSService(CephadmService):
 
         logger.info('Create daemon %s on host %s with spec %s' % (
             daemon_id, host, spec))
-        return self.mgr._create_daemon(daemon_spec)
-
-    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
-
-        def get_set_cmd_dicts(out: str) -> List[dict]:
-            locations: Set[str] = set()
-            for dd in daemon_descrs:
-                spec = cast(NFSServiceSpec,
-                            self.mgr.spec_store.specs.get(dd.service_name(), None))
-                if not spec or not spec.service_id:
-                    logger.warning('No ServiceSpec or service_id found for %s', dd)
-                    continue
-                location = '{}:{}'.format(spec.service_id, spec.pool)
-                if spec.namespace:
-                    location = '{}/{}'.format(location, spec.namespace)
-                locations.add(location)
-            new_value = ','.join(locations)
-            if new_value and new_value != out:
-                return [{'prefix': 'dashboard set-ganesha-clusters-rados-pool-namespace',
-                         'value': new_value}]
-            return []
-
-        self._check_and_set_dashboard(
-            service_name='Ganesha',
-            get_cmd='dashboard get-ganesha-clusters-rados-pool-namespace',
-            get_set_cmd_dicts=get_set_cmd_dicts
-        )
-
-
-class NFSGanesha(object):
-    def __init__(self,
-                 mgr: "CephadmOrchestrator",
-                 daemon_id: str,
-                 spec: NFSServiceSpec) -> None:
-        assert spec.service_id and daemon_id.startswith(spec.service_id)
-        mgr._check_pool_exists(spec.pool, spec.service_name())
-
-        self.mgr = mgr
-        self.daemon_id = daemon_id
-        self.spec = spec
-
-    def get_daemon_name(self) -> str:
-        return '%s.%s' % (self.spec.service_type, self.daemon_id)
-
-    def get_rados_user(self) -> str:
-        return '%s.%s' % (self.spec.service_type, self.daemon_id)
-
-    def get_keyring_entity(self) -> str:
-        return utils.name_to_config_section(self.get_rados_user())
-
-    def get_or_create_keyring(self, entity: Optional[str] = None) -> str:
-        if not entity:
-            entity = self.get_keyring_entity()
-
-        logger.info('Create keyring: %s' % entity)
-        ret, keyring, err = self.mgr.mon_command({
-            'prefix': 'auth get-or-create',
-            'entity': entity,
-        })
-
-        if ret != 0:
-            raise OrchestratorError(
-                'Unable to create keyring %s: %s %s'
-                % (entity, ret, err))
-        return keyring
-
-    def update_keyring_caps(self, entity: Optional[str] = None) -> None:
-        if not entity:
-            entity = self.get_keyring_entity()
+        return daemon_spec
 
-        osd_caps = 'allow rw pool=%s' % (self.spec.pool)
-        if self.spec.namespace:
-            osd_caps = '%s namespace=%s' % (osd_caps, self.spec.namespace)
+    def generate_config(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
+        assert daemon_spec.spec
 
-        logger.info('Updating keyring caps: %s' % entity)
-        ret, out, err = self.mgr.mon_command({
-            'prefix': 'auth caps',
-            'entity': entity,
-            'caps': ['mon', 'allow r',
-                     'osd', osd_caps],
-        })
+        daemon_type = daemon_spec.daemon_type
+        daemon_id = daemon_spec.daemon_id
+        host = daemon_spec.host
+        spec = daemon_spec.spec
 
-        if ret != 0:
-            raise OrchestratorError(
-                'Unable to update keyring caps %s: %s %s'
-                % (entity, ret, err))
+        deps: List[str] = []
 
-    def create_rados_config_obj(self, clobber: Optional[bool] = False) -> None:
-        with self.mgr.rados.open_ioctx(self.spec.pool) as ioctx:
-            if self.spec.namespace:
-                ioctx.set_namespace(self.spec.namespace)
+        # create the RADOS recovery pool keyring
+        rados_user = f'{daemon_type}.{daemon_id}'
+        rados_keyring = self.create_keyring(daemon_spec)
 
-            obj = self.spec.rados_config_name()
+        # create the rados config object
+        self.create_rados_config_obj(spec)
+
+        # create the RGW keyring
+        rgw_user = f'{rados_user}-rgw'
+        rgw_keyring = self.create_rgw_keyring(daemon_spec)
+
+        # generate the ganesha config
+        def get_ganesha_conf() -> str:
+            context = dict(user=rados_user,
+                           nodeid=daemon_spec.name(),
+                           pool=spec.pool,
+                           namespace=spec.namespace if spec.namespace else '',
+                           rgw_user=rgw_user,
+                           url=spec.rados_config_location())
+            return self.mgr.template.render('services/nfs/ganesha.conf.j2', context)
+
+        # generate the cephadm config json
+        def get_cephadm_config() -> Dict[str, Any]:
+            config: Dict[str, Any] = {}
+            config['pool'] = spec.pool
+            if spec.namespace:
+                config['namespace'] = spec.namespace
+            config['userid'] = rados_user
+            config['extra_args'] = ['-N', 'NIV_EVENT']
+            config['files'] = {
+                'ganesha.conf': get_ganesha_conf(),
+            }
+            config.update(
+                self.get_config_and_keyring(
+                    daemon_type, daemon_id,
+                    keyring=rados_keyring,
+                    host=host
+                )
+            )
+            config['rgw'] = {
+                'cluster': 'ceph',
+                'user': rgw_user,
+                'keyring': rgw_keyring,
+            }
+            logger.debug('Generated cephadm config-json: %s' % config)
+            return config
+
+        return get_cephadm_config(), deps
+
+    def create_rados_config_obj(self,
+                                spec: NFSServiceSpec,
+                                clobber: bool = False) -> None:
+        with self.mgr.rados.open_ioctx(spec.pool) as ioctx:
+            if spec.namespace:
+                ioctx.set_namespace(spec.namespace)
+
+            obj = spec.rados_config_name()
             exists = True
             try:
                 ioctx.stat(obj)
@@ -194,22 +120,50 @@ class NFSGanesha(object):
                 logger.info('Creating rados config object: %s' % obj)
                 ioctx.write_full(obj, ''.encode('utf-8'))
 
-    def get_ganesha_conf(self) -> str:
-        context = dict(user=self.get_rados_user(),
-                       nodeid=self.get_daemon_name(),
-                       pool=self.spec.pool,
-                       namespace=self.spec.namespace if self.spec.namespace else '',
-                       url=self.spec.rados_config_location())
-        return self.mgr.template.render('services/nfs/ganesha.conf.j2', context)
-
-    def get_cephadm_config(self) -> Dict[str, Any]:
-        config: Dict[str, Any] = {'pool': self.spec.pool}
-        if self.spec.namespace:
-            config['namespace'] = self.spec.namespace
-        config['userid'] = self.get_rados_user()
-        config['extra_args'] = ['-N', 'NIV_EVENT']
-        config['files'] = {
-            'ganesha.conf': self.get_ganesha_conf(),
-        }
-        logger.debug('Generated cephadm config-json: %s' % config)
-        return config
+    def create_keyring(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> str:
+        assert daemon_spec.spec
+        daemon_id = daemon_spec.daemon_id
+        spec = daemon_spec.spec
+        entity: AuthEntity = self.get_auth_entity(daemon_id)
+
+        osd_caps = 'allow rw pool=%s' % (spec.pool)
+        if spec.namespace:
+            osd_caps = '%s namespace=%s' % (osd_caps, spec.namespace)
+
+        logger.info('Create keyring: %s' % entity)
+        ret, keyring, err = self.mgr.check_mon_command({
+            'prefix': 'auth get-or-create',
+            'entity': entity,
+            'caps': ['mon', 'allow r',
+                     'osd', osd_caps],
+        })
+
+        return keyring
+
+    def create_rgw_keyring(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> str:
+        daemon_id = daemon_spec.daemon_id
+        entity: AuthEntity = self.get_auth_entity(f'{daemon_id}-rgw')
+
+        logger.info('Create keyring: %s' % entity)
+        ret, keyring, err = self.mgr.check_mon_command({
+            'prefix': 'auth get-or-create',
+            'entity': entity,
+            'caps': ['mon', 'allow r',
+                     'osd', 'allow rwx tag rgw *=*'],
+        })
+
+        return keyring
+
+    def remove_rgw_keyring(self, daemon: DaemonDescription) -> None:
+        daemon_id: str = daemon.daemon_id
+        entity: AuthEntity = self.get_auth_entity(f'{daemon_id}-rgw')
+
+        logger.info(f'Remove keyring: {entity}')
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'auth rm',
+            'entity': entity,
+        })
+
+    def post_remove(self, daemon: DaemonDescription) -> None:
+        super().post_remove(daemon)
+        self.remove_rgw_keyring(daemon)
index b1c3edbf5bc3bfa410876817711daf6c70df5492..8f8df8a6f0b660902f16883490bd92852deb5423 100644 (file)
@@ -1,24 +1,27 @@
 import json
 import logging
-from typing import List, Dict, Any, Set, Union, Tuple, cast, Optional
+from typing import List, Dict, Any, Set, Union, Tuple, cast, Optional, TYPE_CHECKING
 
 from ceph.deployment import translate
 from ceph.deployment.drive_group import DriveGroupSpec
 from ceph.deployment.drive_selection import DriveSelection
+from ceph.deployment.inventory import Device
 
 from datetime import datetime
 import orchestrator
-from cephadm.utils import forall_hosts
+from cephadm.utils import forall_hosts, datetime_to_str, str_to_datetime
 from orchestrator import OrchestratorError
 from mgr_module import MonCommandFailed
 
-from cephadm.services.cephadmservice import CephadmService, CephadmDaemonSpec
+from cephadm.services.cephadmservice import CephadmDaemonSpec, CephService
+
+if TYPE_CHECKING:
+    from cephadm.module import CephadmOrchestrator
 
 logger = logging.getLogger(__name__)
-DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 
 
-class OSDService(CephadmService):
+class OSDService(CephService):
     TYPE = 'osd'
 
     def create_from_spec(self, drive_group: DriveGroupSpec) -> str:
@@ -32,7 +35,8 @@ class OSDService(CephadmService):
             cmd = self.driveselection_to_ceph_volume(drive_selection,
                                                      osd_id_claims.get(host, []))
             if not cmd:
-                logger.debug("No data_devices, skipping DriveGroup: {}".format(drive_group.service_id))
+                logger.debug("No data_devices, skipping DriveGroup: {}".format(
+                    drive_group.service_id))
                 return None
             env_vars: List[str] = [f"CEPH_VOLUME_OSDSPEC_AFFINITY={drive_group.service_id}"]
             ret_msg = self.create_single_host(
@@ -43,7 +47,8 @@ class OSDService(CephadmService):
         ret = create_from_spec_one(self.prepare_drivegroup(drive_group))
         return ", ".join(filter(None, ret))
 
-    def create_single_host(self, host: str, cmd: str, replace_osd_ids=None, env_vars: Optional[List[str]] = None) -> str:
+    def create_single_host(self, host: str, cmd: str, replace_osd_ids: List[str],
+                           env_vars: Optional[List[str]] = None) -> str:
         out, err, code = self._run_ceph_volume_command(host, cmd, env_vars=env_vars)
 
         if code == 1 and ', it is already prepared' in '\n'.join(err):
@@ -83,9 +88,9 @@ class OSDService(CephadmService):
                     continue
                 if osd_uuid_map.get(osd_id) != osd['tags']['ceph.osd_fsid']:
                     logger.debug('mismatched osd uuid (cluster has %s, osd '
-                                   'has %s)' % (
-                                       osd_uuid_map.get(osd_id),
-                                       osd['tags']['ceph.osd_fsid']))
+                                 'has %s)' % (
+                                     osd_uuid_map.get(osd_id),
+                                     osd['tags']['ceph.osd_fsid']))
                     continue
 
                 created.append(osd_id)
@@ -106,13 +111,14 @@ class OSDService(CephadmService):
 
     def prepare_drivegroup(self, drive_group: DriveGroupSpec) -> List[Tuple[str, DriveSelection]]:
         # 1) use fn_filter to determine matching_hosts
-        matching_hosts = drive_group.placement.filter_matching_hosts(self.mgr._get_hosts)
+        matching_hosts = drive_group.placement.filter_matching_hostspecs(
+            self.mgr.inventory.all_specs())
         # 2) Map the inventory to the InventoryHost object
         host_ds_map = []
 
         # set osd_id_claims
 
-        def _find_inv_for_host(hostname: str, inventory_dict: dict):
+        def _find_inv_for_host(hostname: str, inventory_dict: dict) -> List[Device]:
             # This is stupid and needs to be loaded with the host
             for _host, _inventory in inventory_dict.items():
                 if _host == hostname:
@@ -124,13 +130,19 @@ class OSDService(CephadmService):
         for host in matching_hosts:
             inventory_for_host = _find_inv_for_host(host, self.mgr.cache.devices)
             logger.debug(f"Found inventory for host {inventory_for_host}")
-            drive_selection = DriveSelection(drive_group, inventory_for_host)
+
+            # List of Daemons on that host
+            dd_for_spec = self.mgr.cache.get_daemons_by_service(drive_group.service_name())
+            dd_for_spec_and_host = [dd for dd in dd_for_spec if dd.hostname == host]
+
+            drive_selection = DriveSelection(drive_group, inventory_for_host,
+                                             existing_daemons=len(dd_for_spec_and_host))
             logger.debug(f"Found drive selection {drive_selection}")
             host_ds_map.append((host, drive_selection))
         return host_ds_map
 
-    def driveselection_to_ceph_volume(self,
-                                      drive_selection: DriveSelection,
+    @staticmethod
+    def driveselection_to_ceph_volume(drive_selection: DriveSelection,
                                       osd_id_claims: Optional[List[str]] = None,
                                       preview: bool = False) -> Optional[str]:
         logger.debug(f"Translating DriveGroup <{drive_selection.spec}> to ceph-volume command")
@@ -139,7 +151,7 @@ class OSDService(CephadmService):
         logger.debug(f"Resulting ceph-volume cmd: {cmd}")
         return cmd
 
-    def get_previews(self, host) -> List[Dict[str, Any]]:
+    def get_previews(self, host: str) -> List[Dict[str, Any]]:
         # Find OSDSpecs that match host.
         osdspecs = self.resolve_osdspecs_for_host(host)
         return self.generate_previews(osdspecs, host)
@@ -204,16 +216,17 @@ class OSDService(CephadmService):
         if not osdspecs:
             self.mgr.log.debug("No OSDSpecs found")
             return []
-        return sum([spec.placement.filter_matching_hosts(self.mgr._get_hosts) for spec in osdspecs], [])
+        return sum([spec.placement.filter_matching_hostspecs(self.mgr.inventory.all_specs()) for spec in osdspecs], [])
 
-    def resolve_osdspecs_for_host(self, host: str, specs: Optional[List[DriveGroupSpec]] = None):
+    def resolve_osdspecs_for_host(self, host: str,
+                                  specs: Optional[List[DriveGroupSpec]] = None) -> List[DriveGroupSpec]:
         matching_specs = []
         self.mgr.log.debug(f"Finding OSDSpecs for host: <{host}>")
         if not specs:
             specs = [cast(DriveGroupSpec, spec) for (sn, spec) in self.mgr.spec_store.spec_preview.items()
                      if spec.service_type == 'osd']
         for spec in specs:
-            if host in spec.placement.filter_matching_hosts(self.mgr._get_hosts):
+            if host in spec.placement.filter_matching_hostspecs(self.mgr.inventory.all_specs()):
                 self.mgr.log.debug(f"Found OSDSpecs for host: <{host}> -> <{spec}>")
                 matching_specs.append(spec)
         return matching_specs
@@ -229,13 +242,8 @@ class OSDService(CephadmService):
             'entity': 'client.bootstrap-osd',
         })
 
-        # generate config
-        ret, config, err = self.mgr.check_mon_command({
-            "prefix": "config generate-minimal-conf",
-        })
-
         j = json.dumps({
-            'config': config,
+            'config': self.mgr.get_minimal_ceph_conf(),
             'keyring': keyring,
         })
 
@@ -282,8 +290,8 @@ class OSDService(CephadmService):
 
 
 class RemoveUtil(object):
-    def __init__(self, mgr):
-        self.mgr = mgr
+    def __init__(self, mgr: "CephadmOrchestrator") -> None:
+        self.mgr: "CephadmOrchestrator" = mgr
 
     def process_removal_queue(self) -> None:
         """
@@ -337,8 +345,8 @@ class RemoveUtil(object):
 
             if not osd.exists:
                 continue
-            self.mgr._remove_daemon(osd.fullname, osd.nodename)
-            logger.info(f"Successfully removed OSD <{osd.osd_id}> on {osd.nodename}")
+            self.mgr._remove_daemon(osd.fullname, osd.hostname)
+            logger.info(f"Successfully removed OSD <{osd.osd_id}> on {osd.hostname}")
             logger.debug(f"Removing {osd.osd_id} from the queue.")
 
         # self.mgr.to_remove_osds could change while this is processing (osds get added from the CLI)
@@ -347,10 +355,11 @@ class RemoveUtil(object):
         self.mgr.to_remove_osds.intersection_update(new_queue)
         self.save_to_store()
 
-    def cleanup(self):
+    def cleanup(self) -> None:
         # OSDs can always be cleaned up manually. This ensures that we run on existing OSDs
         not_in_cluster_osds = self.mgr.to_remove_osds.not_in_cluster()
-        [self.mgr.to_remove_osds.remove(osd) for osd in not_in_cluster_osds]
+        for osd in not_in_cluster_osds:
+            self.mgr.to_remove_osds.remove(osd)
 
     def get_osds_in_cluster(self) -> List[str]:
         osd_map = self.mgr.get_osdmap()
@@ -385,7 +394,8 @@ class RemoveUtil(object):
         while not self.ok_to_stop(osds):
             if len(osds) <= 1:
                 # can't even stop one OSD, aborting
-                self.mgr.log.info("Can't even stop one OSD. Cluster is probably busy. Retrying later..")
+                self.mgr.log.info(
+                    "Can't even stop one OSD. Cluster is probably busy. Retrying later..")
                 return []
 
             # This potentially prolongs the global wait time.
@@ -453,16 +463,16 @@ class RemoveUtil(object):
         self.mgr.log.debug(f"cmd: {cmd_args.get('prefix')} returns: {out}")
         return True
 
-    def save_to_store(self):
+    def save_to_store(self) -> None:
         osd_queue = [osd.to_json() for osd in self.mgr.to_remove_osds.all_osds()]
         logger.debug(f"Saving {osd_queue} to store")
         self.mgr.set_store('osd_remove_queue', json.dumps(osd_queue))
 
-    def load_from_store(self):
+    def load_from_store(self) -> None:
         for k, v in self.mgr.get_store_prefix('osd_remove_queue').items():
             for osd in json.loads(v):
                 logger.debug(f"Loading osd ->{osd} from store")
-                osd_obj = OSD.from_json(json.loads(osd), ctx=self)
+                osd_obj = OSD.from_json(osd, ctx=self)
                 self.mgr.to_remove_osds.add(osd_obj)
 
 
@@ -516,7 +526,7 @@ class OSD:
         # If we wait for the osd to be drained
         self.force = force
         # The name of the node
-        self.nodename = hostname
+        self.hostname = hostname
         # The full name of the osd
         self.fullname = fullname
 
@@ -595,29 +605,29 @@ class OSD:
     def exists(self) -> bool:
         return str(self.osd_id) in self.rm_util.get_osds_in_cluster()
 
-    def drain_status_human(self):
+    def drain_status_human(self) -> str:
         default_status = 'not started'
         status = 'started' if self.started and not self.draining else default_status
         status = 'draining' if self.draining else status
         status = 'done, waiting for purge' if self.drain_done_at and not self.draining else status
         return status
 
-    def pg_count_str(self):
+    def pg_count_str(self) -> str:
         return 'n/a' if self.get_pg_count() < 0 else str(self.get_pg_count())
 
     def to_json(self) -> dict:
-        out = dict()
+        out: Dict[str, Any] = dict()
         out['osd_id'] = self.osd_id
         out['started'] = self.started
         out['draining'] = self.draining
         out['stopped'] = self.stopped
         out['replace'] = self.replace
         out['force'] = self.force
-        out['nodename'] = self.nodename  # type: ignore
+        out['hostname'] = self.hostname  # type: ignore
 
         for k in ['drain_started_at', 'drain_stopped_at', 'drain_done_at', 'process_started_at']:
             if getattr(self, k):
-                out[k] = getattr(self, k).strftime(DATEFMT)
+                out[k] = datetime_to_str(getattr(self, k))
             else:
                 out[k] = getattr(self, k)
         return out
@@ -628,11 +638,14 @@ class OSD:
             return None
         for date_field in ['drain_started_at', 'drain_stopped_at', 'drain_done_at', 'process_started_at']:
             if inp.get(date_field):
-                inp.update({date_field: datetime.strptime(inp.get(date_field, ''), DATEFMT)})
+                inp.update({date_field: str_to_datetime(inp.get(date_field, ''))})
         inp.update({'remove_util': ctx})
+        if 'nodename' in inp:
+            hostname = inp.pop('nodename')
+            inp['hostname'] = hostname
         return cls(**inp)
 
-    def __hash__(self):
+    def __hash__(self) -> int:
         return hash(self.osd_id)
 
     def __eq__(self, other: object) -> bool:
@@ -641,12 +654,12 @@ class OSD:
         return self.osd_id == other.osd_id
 
     def __repr__(self) -> str:
-        return f"<OSD>(osd_id={self.osd_id}, is_draining={self.is_draining})"
+        return f"<OSD>(osd_id={self.osd_id}, draining={self.draining})"
 
 
 class OSDQueue(Set):
 
-    def __init__(self):
+    def __init__(self) -> None:
         super().__init__()
 
     def as_osd_ids(self) -> List[int]:
index f8e2affd4cd7b78efd0172d7e05b76dbef8b75be..778bc26c0e7715399ca2ac6c957912540bddce36 100644 (file)
@@ -1,9 +1,12 @@
 import copy
-from typing import Optional
+from typing import Optional, TYPE_CHECKING
 
-from jinja2 import Environment, PackageLoader, select_autoescape, StrictUndefined
+from jinja2 import Environment, PackageLoader, select_autoescape, StrictUndefined, Template
 from jinja2 import exceptions as j2_exceptions
 
+if TYPE_CHECKING:
+    from cephadm.module import CephadmOrchestrator
+
 
 class TemplateError(Exception):
     pass
@@ -26,7 +29,7 @@ class Jinja2Engine(TemplateEngine):
     def __init__(self):
         self.env = Environment(
             loader=PackageLoader('cephadm', 'templates'),
-            autoescape=select_autoescape(['html', 'xml']),
+            autoescape=select_autoescape(['html', 'xml'], default_for_string=False),
             trim_blocks=True,
             lstrip_blocks=True,
             undefined=StrictUndefined
@@ -43,15 +46,30 @@ class Jinja2Engine(TemplateEngine):
         except j2_exceptions.TemplateNotFound as e:
             raise TemplateNotFoundError(e.message)
 
+    def render_plain(self, source, context):
+        try:
+            template = self.env.from_string(source)
+            if context is None:
+                return template.render()
+            return template.render(context)
+        except j2_exceptions.UndefinedError as e:
+            raise UndefinedError(e.message)
+        except j2_exceptions.TemplateNotFound as e:
+            raise TemplateNotFoundError(e.message)
+
 
 class TemplateMgr:
-    def __init__(self):
+    def __init__(self, mgr: "CephadmOrchestrator"):
         self.engine = Jinja2Engine()
         self.base_context = {
             'cephadm_managed': 'This file is generated by cephadm.'
         }
+        self.mgr = mgr
 
-    def render(self, name: str, context: Optional[dict] = None, managed_context=True) -> str:
+    def render(self, name: str,
+               context: Optional[dict] = None,
+               managed_context=True,
+               host: Optional[str] = None) -> str:
         """Render a string from a template with context.
 
         :param name: template name. e.g. services/nfs/ganesha.conf.j2
@@ -62,6 +80,9 @@ class TemplateMgr:
         :param managed_context: to inject default context like managed header or not, defaults
             to True
         :type managed_context: bool, optional
+        :param host: The host name used to build the key to access
+            the module's persistent key-value store.
+        :type host: Optional[str], optional
         :return: the templated string
         :rtype: str
         """
@@ -70,4 +91,19 @@ class TemplateMgr:
             ctx = copy.deepcopy(self.base_context)
         if context is not None:
             ctx = {**ctx, **context}
-        return self.engine.render(name, ctx)
+
+        # Check if the given name exists in the module's persistent
+        # key-value store, e.g.
+        # - blink_device_light_cmd
+        # - <host>/blink_device_light_cmd
+        # - services/nfs/ganesha.conf
+        store_name = name.rstrip('.j2')
+        custom_template = self.mgr.get_store(store_name, None)
+        if host and custom_template is None:
+            store_name = '{}/{}'.format(host, store_name)
+            custom_template = self.mgr.get_store(store_name, None)
+
+        if custom_template:
+            return self.engine.render_plain(custom_template, ctx)
+        else:
+            return self.engine.render(name, ctx)
diff --git a/ceph/src/pybind/mgr/cephadm/templates/blink_device_light_cmd.j2 b/ceph/src/pybind/mgr/cephadm/templates/blink_device_light_cmd.j2
new file mode 100644 (file)
index 0000000..dab1158
--- /dev/null
@@ -0,0 +1 @@
+lsmcli local-disk-{{ ident_fault }}-led-{{'on' if on else 'off'}} --path '{{ path or dev }}'
index 5fe78320ee90e0efe70168859bc85a71de33eb79..174870c037305cd84cabdb72c0601e3c8104965b 100644 (file)
@@ -31,4 +31,9 @@ RADOS_URLS {
         watch_url = "{{ url }}";
 }
 
+RGW {
+        cluster = "ceph";
+        name = "client.{{ rgw_user }}";
+}
+
 %url    {{ url }}
index 0ea8101df6d0a5e4a21742c72851de9d5754d681..26af6db012d1e2fdd6bd19953b78dd9a2bd2f2c3 100644 (file)
@@ -14,13 +14,12 @@ alerting:
 {% endif %}
 scrape_configs:
   - job_name: 'ceph'
+    honor_labels: true
     static_configs:
     - targets:
 {% for mgr in mgr_scrape_list %}
       - '{{ mgr }}'
 {% endfor %}
-      labels:
-        instance: 'ceph_cluster'
 {% if nodes %}
   - job_name: 'node'
     static_configs:
index ca15d4e3976a3b37f76ba17daabaf7f0e69c6ea3..5548c53e2efe1400376872ddbc6a09dbf8feee52 100644 (file)
@@ -5,9 +5,10 @@ from contextlib import contextmanager
 
 from ceph.deployment.service_spec import PlacementSpec, ServiceSpec
 from cephadm.module import CEPH_DATEFMT
+from cephadm.serve import CephadmServe
 
 try:
-    from typing import Any
+    from typing import Any, Iterator, List
 except ImportError:
     pass
 import pytest
@@ -24,7 +25,7 @@ def get_ceph_option(_, key):
 
 def _run_cephadm(ret):
     def foo(*args, **kwargs):
-        return ret, '', 0
+        return [ret], '', 0
     return foo
 
 
@@ -46,7 +47,7 @@ def with_cephadm_module(module_options=None, store=None):
             mock.patch("cephadm.services.osd.OSDService.get_osdspec_affinity", return_value='test_spec'), \
             mock.patch("cephadm.module.CephadmOrchestrator.remote"):
 
-        m = CephadmOrchestrator.__new__ (CephadmOrchestrator)
+        m = CephadmOrchestrator.__new__(CephadmOrchestrator)
         if module_options is not None:
             for k, v in module_options.items():
                 m._ceph_set_module_option('cephadm', k, v)
@@ -114,20 +115,22 @@ def wait(m, c):
 
 
 @contextmanager
-def with_host(m:CephadmOrchestrator, name):
+def with_host(m: CephadmOrchestrator, name, refresh_hosts=True):
     # type: (CephadmOrchestrator, str) -> None
     wait(m, m.add_host(HostSpec(hostname=name)))
+    if refresh_hosts:
+        CephadmServe(m)._refresh_hosts_and_daemons()
     yield
     wait(m, m.remove_host(name))
 
 
 def assert_rm_service(cephadm, srv_name):
     assert wait(cephadm, cephadm.remove_service(srv_name)) == f'Removed service {srv_name}'
-    cephadm._apply_all_services()
+    CephadmServe(cephadm)._apply_all_services()
 
 
 @contextmanager
-def with_service(cephadm_module: CephadmOrchestrator, spec: ServiceSpec, meth, host: str):
+def with_service(cephadm_module: CephadmOrchestrator, spec: ServiceSpec, meth, host: str) -> Iterator[List[str]]:
     if spec.placement.is_empty():
         spec.placement = PlacementSpec(hosts=[host], count=1)
     c = meth(cephadm_module, spec)
@@ -135,12 +138,12 @@ def with_service(cephadm_module: CephadmOrchestrator, spec: ServiceSpec, meth, h
     specs = [d.spec for d in wait(cephadm_module, cephadm_module.describe_service())]
     assert spec in specs
 
-    cephadm_module._apply_all_services()
+    CephadmServe(cephadm_module)._apply_all_services()
 
     dds = wait(cephadm_module, cephadm_module.list_daemons())
-    names = {dd.service_name() for dd in dds}
-    assert spec.service_name() in names, dds
+    own_dds = [dd for dd in dds if dd.service_name() == spec.service_name()]
+    assert own_dds
 
-    yield
+    yield [dd.name() for dd in own_dds]
 
-    assert_rm_service(cephadm_module, spec.service_name())
\ No newline at end of file
+    assert_rm_service(cephadm_module, spec.service_name())
index d1072d4f250b58cadb19628d9efd281fc86278c4..349665ff08d0d9b7d35a681898846010d127b8ec 100644 (file)
@@ -6,6 +6,7 @@ from unittest.mock import ANY
 import pytest
 
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
+from cephadm.serve import CephadmServe
 from cephadm.services.osd import OSD, OSDQueue
 
 try:
@@ -16,7 +17,7 @@ except ImportError:
 from execnet.gateway_bootstrap import HostNotFound
 
 from ceph.deployment.service_spec import ServiceSpec, PlacementSpec, RGWSpec, \
-    NFSServiceSpec, IscsiServiceSpec, HostPlacementSpec
+    NFSServiceSpec, IscsiServiceSpec, HostPlacementSpec, CustomContainerSpec
 from ceph.deployment.drive_selection.selector import DriveSelection
 from ceph.deployment.inventory import Devices, Device
 from orchestrator import ServiceDescription, DaemonDescription, InventoryHost, \
@@ -81,7 +82,7 @@ class TestCephadm(object):
 
             # Be careful with backward compatibility when changing things here:
             assert json.loads(cephadm_module.get_store('inventory')) == \
-                   {"test": {"hostname": "test", "addr": "test", "labels": [], "status": ""}}
+                {"test": {"hostname": "test", "addr": "test", "labels": [], "status": ""}}
 
             with with_host(cephadm_module, 'second'):
                 assert wait(cephadm_module, cephadm_module.get_hosts()) == [
@@ -93,7 +94,7 @@ class TestCephadm(object):
         assert wait(cephadm_module, cephadm_module.get_hosts()) == []
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_service_ls(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
             c = cephadm_module.list_daemons(refresh=True)
@@ -124,7 +125,7 @@ class TestCephadm(object):
                     out = [dict(o.to_json()) for o in wait(cephadm_module, c)]
                     expected = [
                         {
-                            'placement': {'hosts': [{'hostname': 'test', 'name': '', 'network': ''}]},
+                            'placement': {'hosts': ['test']},
                             'service_id': 'name',
                             'service_name': 'mds.name',
                             'service_type': 'mds',
@@ -134,7 +135,7 @@ class TestCephadm(object):
                         {
                             'placement': {
                                 'count': 1,
-                                'hosts': [{'hostname': 'test', 'name': '', 'network': ''}]
+                                'hosts': ["test"]
                             },
                             'spec': {
                                 'rgw_realm': 'r',
@@ -172,23 +173,25 @@ class TestCephadm(object):
     def test_list_daemons(self, cephadm_module: CephadmOrchestrator):
         cephadm_module.service_cache_timeout = 10
         with with_host(cephadm_module, 'test'):
-            cephadm_module._refresh_host_daemons('test')
+            CephadmServe(cephadm_module)._refresh_host_daemons('test')
             c = cephadm_module.list_daemons()
             assert wait(cephadm_module, c)[0].name() == 'rgw.myrgw.foobar'
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_daemon_action(self, cephadm_module: CephadmOrchestrator):
         cephadm_module.service_cache_timeout = 10
         with with_host(cephadm_module, 'test'):
             with with_daemon(cephadm_module, RGWSpec(service_id='myrgw.foobar'), CephadmOrchestrator.add_rgw, 'test') as daemon_id:
 
                 c = cephadm_module.daemon_action('redeploy', 'rgw.' + daemon_id)
-                assert wait(cephadm_module, c) == f"Deployed rgw.{daemon_id} on host 'test'"
+                assert wait(cephadm_module,
+                            c) == f"Scheduled to redeploy rgw.{daemon_id} on host 'test'"
 
                 for what in ('start', 'stop', 'restart'):
                     c = cephadm_module.daemon_action(what, 'rgw.' + daemon_id)
-                    assert wait(cephadm_module, c) == what + f" rgw.{daemon_id} from host 'test'"
+                    assert wait(cephadm_module,
+                                c) == F"Scheduled to {what} rgw.{daemon_id} on host 'test'"
 
                 # Make sure, _check_daemons does a redeploy due to monmap change:
                 cephadm_module._store['_ceph_get/mon_map'] = {
@@ -197,10 +200,10 @@ class TestCephadm(object):
                 }
                 cephadm_module.notify('mon_map', None)
 
-                cephadm_module._check_daemons()
+                CephadmServe(cephadm_module)._check_daemons()
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_daemon_action_fail(self, cephadm_module: CephadmOrchestrator):
         cephadm_module.service_cache_timeout = 10
         with with_host(cephadm_module, 'test'):
@@ -216,12 +219,74 @@ class TestCephadm(object):
                     })
                     cephadm_module.notify('mon_map', None)
 
-                    cephadm_module._check_daemons()
+                    CephadmServe(cephadm_module)._check_daemons()
 
-                    evs = [e.message for e in cephadm_module.events.get_for_daemon(f'rgw.{daemon_id}')]
+                    evs = [e.message for e in cephadm_module.events.get_for_daemon(
+                        f'rgw.{daemon_id}')]
 
                     assert 'myerror' in ''.join(evs)
 
+    @pytest.mark.parametrize(
+        "action",
+        [
+            'start',
+            'stop',
+            'restart',
+            'reconfig',
+            'redeploy'
+        ]
+    )
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
+    def test_daemon_check(self, cephadm_module: CephadmOrchestrator, action):
+        with with_host(cephadm_module, 'test'):
+            with with_service(cephadm_module, ServiceSpec(service_type='grafana'), CephadmOrchestrator.apply_grafana, 'test') as d_names:
+                [daemon_name] = d_names
+
+                cephadm_module._schedule_daemon_action(daemon_name, action)
+
+                assert cephadm_module.cache.get_scheduled_daemon_action(
+                    'test', daemon_name) == action
+
+                CephadmServe(cephadm_module)._check_daemons()
+
+                assert cephadm_module.cache.get_scheduled_daemon_action('test', daemon_name) is None
+
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm")
+    def test_daemon_check_extra_config(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
+        _run_cephadm.return_value = ('{}', '', 0)
+
+        with with_host(cephadm_module, 'test'):
+
+            # Also testing deploying mons without explicit network placement
+            cephadm_module.check_mon_command({
+                'prefix': 'config set',
+                'who': 'mon',
+                'name': 'public_network',
+                'value': '127.0.0.0/8'
+            })
+
+            cephadm_module.cache.update_host_devices_networks(
+                'test',
+                [],
+                {
+                    "127.0.0.0/8": [
+                        "127.0.0.1"
+                    ],
+                }
+            )
+
+            with with_service(cephadm_module, ServiceSpec(service_type='mon'), CephadmOrchestrator.apply_mon, 'test') as d_names:
+                [daemon_name] = d_names
+
+                cephadm_module._set_extra_ceph_conf('[mon]\nk=v')
+
+                CephadmServe(cephadm_module)._check_daemons()
+
+                _run_cephadm.assert_called_with('test', 'mon.test', 'deploy', [
+                                                '--name', 'mon.test', '--reconfig', '--config-json', '-'],
+                                                stdin='{"config": "\\n\\n[mon]\\nk=v\\n", "keyring": ""}',
+                                                image='')
+
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     def test_daemon_check_post(self, cephadm_module: CephadmOrchestrator):
         with with_host(cephadm_module, 'test'):
@@ -238,10 +303,9 @@ class TestCephadm(object):
                 })
 
                 with mock.patch("cephadm.module.CephadmOrchestrator.mon_command") as _mon_cmd:
-
-                    cephadm_module._check_daemons()
-                    _mon_cmd.assert_any_call({'prefix': 'dashboard set-grafana-api-url', 'value': 'https://test:3000'})
-
+                    CephadmServe(cephadm_module)._check_daemons()
+                    _mon_cmd.assert_any_call(
+                        {'prefix': 'dashboard set-grafana-api-url', 'value': 'https://test:3000'})
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
     def test_mon_add(self, cephadm_module):
@@ -259,7 +323,7 @@ class TestCephadm(object):
     def test_mgr_update(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
             ps = PlacementSpec(hosts=['test:0.0.0.0=a'], count=1)
-            r = cephadm_module._apply_service(ServiceSpec('mgr', placement=ps))
+            r = CephadmServe(cephadm_module)._apply_service(ServiceSpec('mgr', placement=ps))
             assert r
 
             assert_rm_daemon(cephadm_module, 'mgr.a', 'test')
@@ -344,20 +408,22 @@ class TestCephadm(object):
 
             _run_cephadm.return_value = (['{}'], '', 0)
 
-            assert cephadm_module._apply_all_services() == False
+            assert CephadmServe(cephadm_module)._apply_all_services() == False
 
             _run_cephadm.assert_any_call(
                 'test', 'osd', 'ceph-volume',
-                ['--config-json', '-', '--', 'lvm', 'prepare', '--bluestore', '--data', '/dev/sdb', '--no-systemd'],
+                ['--config-json', '-', '--', 'lvm', 'batch',
+                    '--no-auto', '/dev/sdb', '--yes', '--no-systemd'],
                 env_vars=['CEPH_VOLUME_OSDSPEC_AFFINITY=foo'], error_ok=True, stdin='{"config": "", "keyring": ""}')
-            _run_cephadm.assert_called_with('test', 'osd', 'ceph-volume', ['--', 'lvm', 'list', '--format', 'json'])
-
+            _run_cephadm.assert_called_with(
+                'test', 'osd', 'ceph-volume', ['--', 'lvm', 'list', '--format', 'json'])
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     @mock.patch("cephadm.module.SpecStore.save")
     def test_apply_osd_save_placement(self, _save_spec, cephadm_module):
         with with_host(cephadm_module, 'test'):
-            json_spec = {'service_type': 'osd', 'placement': {'host_pattern': 'test'}, 'service_id': 'foo', 'data_devices': {'all': True}}
+            json_spec = {'service_type': 'osd', 'placement': {'host_pattern': 'test'},
+                         'service_id': 'foo', 'data_devices': {'all': True}}
             spec = ServiceSpec.from_json(json_spec)
             assert isinstance(spec, DriveGroupSpec)
             c = cephadm_module.apply([spec])
@@ -367,7 +433,8 @@ class TestCephadm(object):
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     def test_create_osds(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
-            dg = DriveGroupSpec(placement=PlacementSpec(host_pattern='test'), data_devices=DeviceSelection(paths=['']))
+            dg = DriveGroupSpec(placement=PlacementSpec(host_pattern='test'),
+                                data_devices=DeviceSelection(paths=['']))
             c = cephadm_module.create_osds(dg)
             out = wait(cephadm_module, c)
             assert out == "Created no osd(s) on host test; already created?"
@@ -375,7 +442,8 @@ class TestCephadm(object):
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     def test_prepare_drivegroup(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
-            dg = DriveGroupSpec(placement=PlacementSpec(host_pattern='test'), data_devices=DeviceSelection(paths=['']))
+            dg = DriveGroupSpec(placement=PlacementSpec(host_pattern='test'),
+                                data_devices=DeviceSelection(paths=['']))
             out = cephadm_module.osd_service.prepare_drivegroup(dg)
             assert len(out) == 1
             f1 = out[0]
@@ -386,19 +454,22 @@ class TestCephadm(object):
         "devices, preview, exp_command",
         [
             # no preview and only one disk, prepare is used due the hack that is in place.
-            (['/dev/sda'], False, "lvm prepare --bluestore --data /dev/sda --no-systemd"),
+            (['/dev/sda'], False, "lvm batch --no-auto /dev/sda --yes --no-systemd"),
             # no preview and multiple disks, uses batch
-            (['/dev/sda', '/dev/sdb'], False, "CEPH_VOLUME_OSDSPEC_AFFINITY=test.spec lvm batch --no-auto /dev/sda /dev/sdb --yes --no-systemd"),
+            (['/dev/sda', '/dev/sdb'], False,
+             "CEPH_VOLUME_OSDSPEC_AFFINITY=test.spec lvm batch --no-auto /dev/sda /dev/sdb --yes --no-systemd"),
             # preview and only one disk needs to use batch again to generate the preview
-            (['/dev/sda'], True, "lvm batch --no-auto /dev/sda --report --format json"),
+            (['/dev/sda'], True, "lvm batch --no-auto /dev/sda --yes --no-systemd --report --format json"),
             # preview and multiple disks work the same
-            (['/dev/sda', '/dev/sdb'], True, "CEPH_VOLUME_OSDSPEC_AFFINITY=test.spec lvm batch --no-auto /dev/sda /dev/sdb --yes --no-systemd --report --format json"),
+            (['/dev/sda', '/dev/sdb'], True,
+             "CEPH_VOLUME_OSDSPEC_AFFINITY=test.spec lvm batch --no-auto /dev/sda /dev/sdb --yes --no-systemd --report --format json"),
         ]
     )
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
     def test_driveselection_to_ceph_volume(self, cephadm_module, devices, preview, exp_command):
         with with_host(cephadm_module, 'test'):
-            dg = DriveGroupSpec(service_id='test.spec', placement=PlacementSpec(host_pattern='test'), data_devices=DeviceSelection(paths=devices))
+            dg = DriveGroupSpec(service_id='test.spec', placement=PlacementSpec(
+                host_pattern='test'), data_devices=DeviceSelection(paths=devices))
             ds = DriveSelection(dg, Devices([Device(path) for path in devices]))
             preview = preview
             out = cephadm_module.osd_service.driveselection_to_ceph_volume(ds, [], preview)
@@ -420,7 +491,7 @@ class TestCephadm(object):
     @mock.patch("cephadm.services.osd.RemoveUtil.get_pg_count", lambda _, __: 0)
     def test_remove_osds(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
-            cephadm_module._refresh_host_daemons('test')
+            CephadmServe(cephadm_module)._refresh_host_daemons('test')
             c = cephadm_module.list_daemons()
             wait(cephadm_module, c)
 
@@ -444,17 +515,19 @@ class TestCephadm(object):
             assert out == []
 
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_rgw_update(self, cephadm_module):
         with with_host(cephadm_module, 'host1'):
             with with_host(cephadm_module, 'host2'):
                 ps = PlacementSpec(hosts=['host1'], count=1)
-                c = cephadm_module.add_rgw(RGWSpec(rgw_realm='realm', rgw_zone='zone1', placement=ps))
+                c = cephadm_module.add_rgw(
+                    RGWSpec(rgw_realm='realm', rgw_zone='zone1', placement=ps))
                 [out] = wait(cephadm_module, c)
                 match_glob(out, "Deployed rgw.realm.zone1.host1.* on host 'host1'")
 
                 ps = PlacementSpec(hosts=['host1', 'host2'], count=2)
-                r = cephadm_module._apply_service(RGWSpec(rgw_realm='realm', rgw_zone='zone1', placement=ps))
+                r = CephadmServe(cephadm_module)._apply_service(
+                    RGWSpec(rgw_realm='realm', rgw_zone='zone1', placement=ps))
                 assert r
 
                 assert_rm_daemon(cephadm_module, 'rgw.realm.zone1', 'host1')
@@ -474,7 +547,7 @@ class TestCephadm(object):
     ))
     def test_remove_daemon(self, cephadm_module):
         with with_host(cephadm_module, 'test'):
-            cephadm_module._refresh_host_daemons('test')
+            CephadmServe(cephadm_module)._refresh_host_daemons('test')
             c = cephadm_module.list_daemons()
             wait(cephadm_module, c)
             c = cephadm_module.remove_daemons(['rgw.myrgw.myhost.myid'])
@@ -495,7 +568,7 @@ class TestCephadm(object):
         ]
     )
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_daemon_add(self, spec: ServiceSpec, meth, cephadm_module):
         with with_host(cephadm_module, 'test'):
             with with_daemon(cephadm_module, spec, meth, 'test'):
@@ -507,10 +580,10 @@ class TestCephadm(object):
         with with_host(cephadm_module, 'test'):
             ps = PlacementSpec(hosts=['test'], count=1)
             spec = NFSServiceSpec(
-                    service_id='name',
-                    pool='pool',
-                    namespace='namespace',
-                    placement=ps)
+                service_id='name',
+                pool='pool',
+                namespace='namespace',
+                placement=ps)
             c = cephadm_module.add_nfs(spec)
             [out] = wait(cephadm_module, c)
             match_glob(out, "Deployed nfs.name.* on host 'test'")
@@ -528,11 +601,11 @@ class TestCephadm(object):
         with with_host(cephadm_module, 'test'):
             ps = PlacementSpec(hosts=['test'], count=1)
             spec = IscsiServiceSpec(
-                    service_id='name',
-                    pool='pool',
-                    api_user='user',
-                    api_password='password',
-                    placement=ps)
+                service_id='name',
+                pool='pool',
+                api_user='user',
+                api_password='password',
+                placement=ps)
             c = cephadm_module.add_iscsi(spec)
             [out] = wait(cephadm_module, c)
             match_glob(out, "Deployed iscsi.name.* on host 'test'")
@@ -544,11 +617,53 @@ class TestCephadm(object):
             # automatically.
             assert_rm_service(cephadm_module, 'iscsi.name')
 
-    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
-    def test_blink_device_light(self, cephadm_module):
+    @pytest.mark.parametrize(
+        "on_bool",
+        [
+            True,
+            False
+        ]
+    )
+    @pytest.mark.parametrize(
+        "fault_ident",
+        [
+            'fault',
+            'ident'
+        ]
+    )
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm")
+    def test_blink_device_light(self, _run_cephadm, on_bool, fault_ident, cephadm_module):
+        _run_cephadm.return_value = '{}', '', 0
+        with with_host(cephadm_module, 'test'):
+            c = cephadm_module.blink_device_light(fault_ident, on_bool, [('test', '', 'dev')])
+            on_off = 'on' if on_bool else 'off'
+            assert wait(cephadm_module, c) == [f'Set {fault_ident} light for test: {on_off}']
+            _run_cephadm.assert_called_with('test', 'osd', 'shell', [
+                                            '--', 'lsmcli', f'local-disk-{fault_ident}-led-{on_off}', '--path', 'dev'], error_ok=True)
+
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm")
+    def test_blink_device_light_custom(self, _run_cephadm, cephadm_module):
+        _run_cephadm.return_value = '{}', '', 0
         with with_host(cephadm_module, 'test'):
-            c = cephadm_module.blink_device_light('ident', True, [('test', '', '')])
+            cephadm_module.set_store('blink_device_light_cmd', 'echo hello')
+            c = cephadm_module.blink_device_light('ident', True, [('test', '', '/dev/sda')])
             assert wait(cephadm_module, c) == ['Set ident light for test: on']
+            _run_cephadm.assert_called_with('test', 'osd', 'shell', [
+                                            '--', 'echo', 'hello'], error_ok=True)
+
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm")
+    def test_blink_device_light_custom_per_host(self, _run_cephadm, cephadm_module):
+        _run_cephadm.return_value = '{}', '', 0
+        with with_host(cephadm_module, 'mgr0'):
+            cephadm_module.set_store('mgr0/blink_device_light_cmd',
+                                     'xyz --foo --{{ ident_fault }}={{\'on\' if on else \'off\'}} \'{{ path or dev }}\'')
+            c = cephadm_module.blink_device_light(
+                'fault', True, [('mgr0', 'SanDisk_X400_M.2_2280_512GB_162924424784', '')])
+            assert wait(cephadm_module, c) == [
+                'Set fault light for mgr0:SanDisk_X400_M.2_2280_512GB_162924424784 on']
+            _run_cephadm.assert_called_with('mgr0', 'osd', 'shell', [
+                '--', 'xyz', '--foo', '--fault=on', 'SanDisk_X400_M.2_2280_512GB_162924424784'
+            ], error_ok=True)
 
     @pytest.mark.parametrize(
         "spec, meth",
@@ -593,10 +708,32 @@ class TestCephadm(object):
                 api_user='user',
                 api_password='password'
             ), CephadmOrchestrator.apply_iscsi),
+            (CustomContainerSpec(
+                service_id='hello-world',
+                image='docker.io/library/hello-world:latest',
+                uid=65534,
+                gid=65534,
+                dirs=['foo/bar'],
+                files={
+                    'foo/bar/xyz.conf': 'aaa\nbbb'
+                },
+                bind_mounts=[[
+                    'type=bind',
+                    'source=lib/modules',
+                    'destination=/lib/modules',
+                    'ro=true'
+                ]],
+                volume_mounts={
+                    'foo/bar': '/foo/bar:Z'
+                },
+                args=['--no-healthcheck'],
+                envs=['SECRET=password'],
+                ports=[8080, 8443]
+            ), CephadmOrchestrator.apply_container),
         ]
     )
     @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
-    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+    @mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
     def test_apply_save(self, spec: ServiceSpec, meth, cephadm_module: CephadmOrchestrator):
         with with_host(cephadm_module, 'test'):
             with with_service(cephadm_module, spec, meth, 'test'):
@@ -614,7 +751,7 @@ class TestCephadm(object):
             c = cephadm_module.apply_mds(spec)
             out = wait(cephadm_module, c)
             match_glob(out, "Scheduled mds.fsname update...")
-            cephadm_module._apply_all_services()
+            CephadmServe(cephadm_module)._apply_all_services()
 
             [daemon] = cephadm_module.cache.daemons['host1'].keys()
 
@@ -625,14 +762,13 @@ class TestCephadm(object):
             c = cephadm_module.apply_mds(spec)
             out = wait(cephadm_module, c)
             match_glob(out, "Scheduled mds.fsname update...")
-            cephadm_module._apply_all_services()
+            CephadmServe(cephadm_module)._apply_all_services()
 
             ok_to_stop.assert_called_with([daemon[4:]])
 
             assert_rm_daemon(cephadm_module, spec.service_name(), 'host1')  # verifies ok-to-stop
             assert_rm_daemon(cephadm_module, spec.service_name(), 'host2')
 
-
     @mock.patch("cephadm.module.CephadmOrchestrator._get_connection")
     @mock.patch("remoto.process.check")
     def test_offline(self, _check, _get_connection, cephadm_module):
@@ -648,7 +784,7 @@ class TestCephadm(object):
             assert out == HostSpec('test', 'test', status='Offline').to_json()
 
             _get_connection.side_effect = None
-            assert cephadm_module._check_host('test') is None
+            assert CephadmServe(cephadm_module)._check_host('test') is None
             out = wait(cephadm_module, cephadm_module.get_hosts())[0].to_json()
             assert out == HostSpec('test', 'test').to_json()
 
@@ -683,7 +819,7 @@ class TestCephadm(object):
             return '{}', None, 0
         with mock.patch("remoto.Connection", side_effect=[Connection(), Connection(), Connection()]):
             with mock.patch("remoto.process.check", _check):
-                with with_host(cephadm_module, 'test'):
+                with with_host(cephadm_module, 'test', refresh_hosts=False):
                     code, out, err = cephadm_module.check_host('test')
                     # First should succeed.
                     assert err is None
@@ -710,11 +846,18 @@ class TestCephadm(object):
             cephadm_module.config_notify()
             assert cephadm_module.manage_etc_ceph_ceph_conf == True
 
-            cephadm_module._refresh_hosts_and_daemons()
+            CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
             _check.assert_called_with(ANY, ['dd', 'of=/etc/ceph/ceph.conf'], stdin=b'')
 
             assert not cephadm_module.cache.host_needs_new_etc_ceph_ceph_conf('test')
 
+            # set extra config and expect that we deploy another ceph.conf
+            cephadm_module._set_extra_ceph_conf('[mon]\nk=v')
+            CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
+            _check.assert_called_with(
+                ANY, ['dd', 'of=/etc/ceph/ceph.conf'], stdin=b'\n\n[mon]\nk=v\n')
+
+            # reload
             cephadm_module.cache.last_etc_ceph_ceph_conf = {}
             cephadm_module.cache.load()
 
@@ -731,7 +874,6 @@ class TestCephadm(object):
             cephadm_module.cache.load()
             assert cephadm_module.cache.host_needs_new_etc_ceph_ceph_conf('test')
 
-
     def test_etc_ceph_init(self):
         with with_cephadm_module({'manage_etc_ceph_ceph_conf': True}) as m:
             assert m.manage_etc_ceph_ceph_conf is True
@@ -750,34 +892,62 @@ class TestCephadm(object):
             assert out == 'registry login scheduled'
             assert err == ''
             check_registry_credentials('test-url', 'test-user', 'test-password')
-            
+
             # test bad login attempt with invalid args
             code, out, err = cephadm_module.registry_login('bad-args')
             assert err == ("Invalid arguments. Please provide arguments <url> <username> <password> "
-                            "or -i <login credentials json file>")
+                           "or -i <login credentials json file>")
             check_registry_credentials('test-url', 'test-user', 'test-password')
-            
+
             # test bad login using invalid json file
-            code, out, err = cephadm_module.registry_login(None, None, None, '{"bad-json": "bad-json"}')
+            code, out, err = cephadm_module.registry_login(
+                None, None, None, '{"bad-json": "bad-json"}')
             assert err == ("json provided for custom registry login did not include all necessary fields. "
-                            "Please setup json file as\n"
-                            "{\n"
-                              " \"url\": \"REGISTRY_URL\",\n"
-                              " \"username\": \"REGISTRY_USERNAME\",\n"
-                              " \"password\": \"REGISTRY_PASSWORD\"\n"
-                            "}\n")
+                           "Please setup json file as\n"
+                           "{\n"
+                           " \"url\": \"REGISTRY_URL\",\n"
+                           " \"username\": \"REGISTRY_USERNAME\",\n"
+                           " \"password\": \"REGISTRY_PASSWORD\"\n"
+                           "}\n")
             check_registry_credentials('test-url', 'test-user', 'test-password')
-            
+
             # test  good login using valid json file
             good_json = ("{\"url\": \"" + "json-url" + "\", \"username\": \"" + "json-user" + "\", "
-                        " \"password\": \"" + "json-pass" + "\"}")
+                         " \"password\": \"" + "json-pass" + "\"}")
             code, out, err = cephadm_module.registry_login(None, None, None, good_json)
             assert out == 'registry login scheduled'
             assert err == ''
             check_registry_credentials('json-url', 'json-user', 'json-pass')
-            
+
             # test bad login where args are valid but login command fails
             _run_cephadm.return_value = '{}', 'error', 1
             code, out, err = cephadm_module.registry_login('fail-url', 'fail-user', 'fail-password')
             assert err == 'Host test failed to login to fail-url as fail-user with given password'
             check_registry_credentials('json-url', 'json-user', 'json-pass')
+
+    @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm(json.dumps({
+        'image_id': 'image_id',
+                    'repo_digest': 'image@repo_digest',
+    })))
+    @pytest.mark.parametrize("use_repo_digest",
+                             [
+                                 False,
+                                 True
+                             ])
+    def test_upgrade_run(self, use_repo_digest, cephadm_module: CephadmOrchestrator):
+        with with_host(cephadm_module, 'test', refresh_hosts=False):
+            cephadm_module.set_container_image('global', 'image')
+            if use_repo_digest:
+                cephadm_module.use_repo_digest = True
+
+                CephadmServe(cephadm_module).convert_tags_to_repo_digest()
+
+            _, image, _ = cephadm_module.check_mon_command({
+                'prefix': 'config get',
+                'who': 'global',
+                'key': 'container_image',
+            })
+            if use_repo_digest:
+                assert image == 'image@repo_digest'
+            else:
+                assert image == 'image'
index 2f7956667fc8aca5f9ef781a7ccbd7449f8a461e..b43cd6a860d07100135cf0c11ad67c73a4dcddc0 100644 (file)
@@ -45,7 +45,6 @@ class TestCompletion(object):
             return str(args)
         assert run_forall(input) == expected
 
-
     @pytest.mark.parametrize("input,expected", [
         ([], []),
         ([1], ["(1,)"]),
index 5c917071064a2dba7268d42cbcf51b6bf0ba3599..8536c4e19622621f46119a96a80828779adebbef 100644 (file)
@@ -1,17 +1,23 @@
 import json
 from datetime import datetime
 
+import pytest
+
 from ceph.deployment.service_spec import PlacementSpec, ServiceSpec, HostPlacementSpec
 from cephadm import CephadmOrchestrator
-from cephadm.inventory import SPEC_STORE_PREFIX, DATEFMT
+from cephadm.inventory import SPEC_STORE_PREFIX
+from cephadm.utils import DATEFMT
 from cephadm.tests.fixtures import _run_cephadm, cephadm_module, wait, with_host
+from orchestrator import OrchestratorError
+from cephadm.serve import CephadmServe
 from tests import mock
 
+
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
-@mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _,__,___: None)
+@mock.patch("cephadm.services.cephadmservice.RgwService.create_realm_zonegroup_zone", lambda _, __, ___: None)
 def test_migrate_scheduler(cephadm_module: CephadmOrchestrator):
-    with with_host(cephadm_module, 'host1'):
-        with with_host(cephadm_module, 'host2'):
+    with with_host(cephadm_module, 'host1', refresh_hosts=False):
+        with with_host(cephadm_module, 'host2', refresh_hosts=False):
 
             # emulate the old scheduler:
             c = cephadm_module.apply_rgw(
@@ -19,7 +25,19 @@ def test_migrate_scheduler(cephadm_module: CephadmOrchestrator):
             )
             assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'
 
-            cephadm_module._apply_all_services()
+            # with pytest.raises(OrchestratorError, match="cephadm migration still ongoing. Please wait, until the migration is complete."):
+            CephadmServe(cephadm_module)._apply_all_services()
+
+            cephadm_module.migration_current = 0
+            cephadm_module.migration.migrate()
+            # assert we need all daemons.
+            assert cephadm_module.migration_current == 0
+
+            CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
+            cephadm_module.migration.migrate()
+
+            CephadmServe(cephadm_module)._apply_all_services()
+
             out = {o.hostname for o in wait(cephadm_module, cephadm_module.list_daemons())}
             assert out == {'host1', 'host2'}
 
@@ -28,38 +46,34 @@ def test_migrate_scheduler(cephadm_module: CephadmOrchestrator):
             )
             assert wait(cephadm_module, c) == 'Scheduled rgw.r.z update...'
 
-            cephadm_module.migration_current = 0
-            cephadm_module.migration.migrate()
-
-            # assert we need all daemons.
-            assert cephadm_module.migration_current == 0
-
             # Sorry, for this hack, but I need to make sure, Migration thinks,
             # we have updated all daemons already.
             cephadm_module.cache.last_daemon_update['host1'] = datetime.now()
             cephadm_module.cache.last_daemon_update['host2'] = datetime.now()
 
+            cephadm_module.migration_current = 0
             cephadm_module.migration.migrate()
             assert cephadm_module.migration_current == 2
 
-            out = [o.spec.placement for o in wait(cephadm_module, cephadm_module.describe_service())]
-            assert out == [PlacementSpec(count=2, hosts=[HostPlacementSpec(hostname='host1', network='', name=''), HostPlacementSpec(hostname='host2', network='', name='')])]
+            out = [o.spec.placement for o in wait(
+                cephadm_module, cephadm_module.describe_service())]
+            assert out == [PlacementSpec(count=2, hosts=[HostPlacementSpec(
+                hostname='host1', network='', name=''), HostPlacementSpec(hostname='host2', network='', name='')])]
 
 
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
 def test_migrate_service_id_mon_one(cephadm_module: CephadmOrchestrator):
     with with_host(cephadm_module, 'host1'):
-        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon.wrong',
-            json.dumps({
-                'spec': {
-                    'service_type': 'mon',
-                    'service_id': 'wrong',
-                    'placement': {
-                        'hosts': ['host1']
-                    }
-                },
-                'created': datetime.utcnow().strftime(DATEFMT),
-            }, sort_keys=True),
+        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon.wrong', json.dumps({
+            'spec': {
+                'service_type': 'mon',
+                'service_id': 'wrong',
+                'placement': {
+                    'hosts': ['host1']
+                }
+            },
+            'created': datetime.utcnow().strftime(DATEFMT),
+        }, sort_keys=True),
         )
 
         cephadm_module.spec_store.load()
@@ -78,31 +92,30 @@ def test_migrate_service_id_mon_one(cephadm_module: CephadmOrchestrator):
             placement=PlacementSpec(hosts=['host1'])
         )
 
+
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
 def test_migrate_service_id_mon_two(cephadm_module: CephadmOrchestrator):
     with with_host(cephadm_module, 'host1'):
-        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon',
-            json.dumps({
-                'spec': {
-                    'service_type': 'mon',
-                    'placement': {
-                        'count': 5,
-                    }
-                },
-                'created': datetime.utcnow().strftime(DATEFMT),
-            }, sort_keys=True),
+        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon', json.dumps({
+            'spec': {
+                'service_type': 'mon',
+                'placement': {
+                    'count': 5,
+                }
+            },
+            'created': datetime.utcnow().strftime(DATEFMT),
+        }, sort_keys=True),
         )
-        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon.wrong',
-            json.dumps({
-                'spec': {
-                    'service_type': 'mon',
-                    'service_id': 'wrong',
-                    'placement': {
-                        'hosts': ['host1']
-                    }
-                },
-                'created': datetime.utcnow().strftime(DATEFMT),
-            }, sort_keys=True),
+        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mon.wrong', json.dumps({
+            'spec': {
+                'service_type': 'mon',
+                'service_id': 'wrong',
+                'placement': {
+                    'hosts': ['host1']
+                }
+            },
+            'created': datetime.utcnow().strftime(DATEFMT),
+        }, sort_keys=True),
         )
 
         cephadm_module.spec_store.load()
@@ -122,23 +135,22 @@ def test_migrate_service_id_mon_two(cephadm_module: CephadmOrchestrator):
             placement=PlacementSpec(count=5)
         )
 
+
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('[]'))
 def test_migrate_service_id_mds_one(cephadm_module: CephadmOrchestrator):
     with with_host(cephadm_module, 'host1'):
-        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mds',
-            json.dumps({
-                'spec': {
-                    'service_type': 'mds',
-                    'placement': {
-                        'hosts': ['host1']
-                    }
-                },
-                'created': datetime.utcnow().strftime(DATEFMT),
-            }, sort_keys=True),
+        cephadm_module.set_store(SPEC_STORE_PREFIX + 'mds', json.dumps({
+            'spec': {
+                'service_type': 'mds',
+                'placement': {
+                    'hosts': ['host1']
+                }
+            },
+            'created': datetime.utcnow().strftime(DATEFMT),
+        }, sort_keys=True),
         )
 
         cephadm_module.spec_store.load()
 
         # there is nothing to migrate, as the spec is gone now.
         assert len(cephadm_module.spec_store.specs) == 0
-
index 0b4b0cd506cf8c055b57e0253020db05f1dbc61d..c9cfe464f23082ec674f04539b2c95436fbf270b 100644 (file)
@@ -1,6 +1,8 @@
+import json
+
 from cephadm.services.osd import RemoveUtil, OSDQueue, OSD
 import pytest
-from .fixtures import rm_util, osd_obj
+from .fixtures import rm_util, osd_obj, cephadm_module
 from tests import mock
 from datetime import datetime
 
@@ -10,6 +12,7 @@ class MockOSD:
     def __init__(self, osd_id):
         self.osd_id = osd_id
 
+
 class TestOSDRemoval:
 
     @pytest.mark.parametrize(
@@ -62,11 +65,34 @@ class TestOSDRemoval:
 
     def test_destroy_osd(self, rm_util):
         rm_util.destroy_osd(1)
-        rm_util._run_mon_cmd.assert_called_with({'prefix': 'osd destroy-actual', 'id': 1, 'yes_i_really_mean_it': True})
+        rm_util._run_mon_cmd.assert_called_with(
+            {'prefix': 'osd destroy-actual', 'id': 1, 'yes_i_really_mean_it': True})
 
     def test_purge_osd(self, rm_util):
         rm_util.purge_osd(1)
-        rm_util._run_mon_cmd.assert_called_with({'prefix': 'osd purge-actual', 'id': 1, 'yes_i_really_mean_it': True})
+        rm_util._run_mon_cmd.assert_called_with(
+            {'prefix': 'osd purge-actual', 'id': 1, 'yes_i_really_mean_it': True})
+
+    def test_load(self, cephadm_module):
+        data = json.dumps([
+            {
+                "osd_id": 35,
+                "started": True,
+                "draining": True,
+                "stopped": False,
+                "replace": False,
+                "force": False,
+                "nodename": "node2",
+                "drain_started_at": "2020-09-14T11:41:53.960463",
+                "drain_stopped_at": None,
+                "drain_done_at": None,
+                "process_started_at": "2020-09-14T11:41:52.245832"
+            }
+        ])
+        cephadm_module.set_store('osd_remove_queue', data)
+        cephadm_module.rm_util.load_from_store()
+
+        assert repr(cephadm_module.to_remove_osds) == 'OSDQueue({<OSD>(osd_id=35, draining=True)})'
 
 
 class TestOSD:
index 76807f8fccad7591c35d018f78ae5df281689cbe..205b48d95b887ec7b716b340d661ebce30f20ca1 100644 (file)
@@ -1,3 +1,7 @@
+# Disable autopep8 for this file:
+
+# fmt: off
+
 from typing import NamedTuple, List
 import pytest
 
@@ -81,21 +85,19 @@ def get_result(key, results):
     return [v for k, v in results
      if match(k)][0]
 
-def mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count):
 
+def mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count):
 
     if spec_section == 'hosts':
-        mk_spec = lambda: ServiceSpec('mon', placement=PlacementSpec(
+        mk_spec = lambda: ServiceSpec('mgr', placement=PlacementSpec(
                     hosts=explicit,
                     count=count,
                 ))
-        mk_hosts = lambda _: hosts
     elif spec_section == 'label':
-        mk_spec = lambda: ServiceSpec('mon', placement=PlacementSpec(
+        mk_spec = lambda: ServiceSpec('mgr', placement=PlacementSpec(
             label='mylabel',
             count=count,
         ))
-        mk_hosts = lambda l: [e for e in explicit if e in hosts] if l == 'mylabel' else hosts
     elif spec_section == 'host_pattern':
         pattern = {
             'e': 'notfound',
@@ -103,23 +105,22 @@ def mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count):
             '12': '[1-2]',
             '123': '*',
         }[explicit_key]
-        mk_spec = lambda: ServiceSpec('mon', placement=PlacementSpec(
+        mk_spec = lambda: ServiceSpec('mgr', placement=PlacementSpec(
                     host_pattern=pattern,
                     count=count,
                 ))
-        mk_hosts = lambda _: hosts
     else:
         assert False
-    def _get_hosts_wrapper(label=None, as_hostspec=False):
-        hosts = mk_hosts(label)
-        if as_hostspec:
-            return list(map(HostSpec, hosts))
-        return hosts
 
-    return mk_spec, _get_hosts_wrapper
+    hosts = [
+            HostSpec(h, labels=['mylabel']) if h in explicit else HostSpec(h)
+            for h in hosts
+        ]
+
+    return mk_spec, hosts
 
 
-def run_scheduler_test(results, mk_spec, get_hosts_func, get_daemons_func, key_elems):
+def run_scheduler_test(results, mk_spec, hosts, get_daemons_func, key_elems):
     key = ' '.join('N' if e is None else str(e) for e in key_elems)
     try:
         assert_res = get_result(k(key), results)
@@ -128,7 +129,7 @@ def run_scheduler_test(results, mk_spec, get_hosts_func, get_daemons_func, key_e
             spec = mk_spec()
             host_res = HostAssignment(
                 spec=spec,
-                get_hosts_func=get_hosts_func,
+                hosts=hosts,
                 get_daemons_func=get_daemons_func).place()
             if isinstance(host_res, list):
                 e = ', '.join(repr(h.hostname) for h in host_res)
@@ -142,7 +143,7 @@ def run_scheduler_test(results, mk_spec, get_hosts_func, get_daemons_func, key_e
             spec = mk_spec()
             host_res = HostAssignment(
                 spec=spec,
-                get_hosts_func=get_hosts_func,
+                hosts=hosts,
                 get_daemons_func=get_daemons_func).place()
 
             assert_res(sorted([h.hostname for h in host_res]))
@@ -161,17 +162,17 @@ def run_scheduler_test(results, mk_spec, get_hosts_func, get_daemons_func, key_e
 #       |   |   | |     |
 test_explicit_scheduler_results = [
     (k("*   *   0 *"), error(ServiceSpecValidationError, 'num/count must be > 1')),
-    (k("*   e   N l"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mon>: No matching hosts for label mylabel')),
-    (k("*   e   N p"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mon>: No matching hosts')),
+    (k("*   e   N l"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mgr>: No matching hosts for label mylabel')),
+    (k("*   e   N p"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mgr>: No matching hosts')),
     (k("*   e   N h"), error(OrchestratorValidationError, 'placement spec is empty: no hosts, no label, no pattern, no count')),
     (k("*   e   * *"), none),
-    (k("1   12  * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mon> on 2: Unknown hosts")),
-    (k("1   123 * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mon> on 2, 3: Unknown hosts")),
+    (k("1   12  * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mgr> on 2: Unknown hosts")),
+    (k("1   123 * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mgr> on 2, 3: Unknown hosts")),
     (k("1   *   * *"), exactly('1')),
     (k("12  1   * *"), exactly('1')),
     (k("12  12  1 *"), one_of('1', '2')),
     (k("12  12  * *"), exactly('1', '2')),
-    (k("12  123 * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mon> on 3: Unknown hosts")),
+    (k("12  123 * h"), error(OrchestratorValidationError, "Cannot place <ServiceSpec for service_name=mgr> on 3: Unknown hosts")),
     (k("12  123 1 *"), one_of('1', '2', '3')),
     (k("12  123 * *"), two_of('1', '2', '3')),
     (k("123 1   * *"), exactly('1')),
@@ -214,11 +215,11 @@ def test_explicit_scheduler(host_key, hosts,
                             count,
                             spec_section_key, spec_section):
 
-    mk_spec, mk_hosts = mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count)
+    mk_spec, hosts = mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count)
     run_scheduler_test(
         results=test_explicit_scheduler_results,
         mk_spec=mk_spec,
-        get_hosts_func=mk_hosts,
+        hosts=hosts,
         get_daemons_func=lambda _: [],
         key_elems=(host_key, explicit_key, count, spec_section_key)
     )
@@ -236,9 +237,9 @@ def test_explicit_scheduler(host_key, hosts,
 #       |   |   | |     |   |
 test_scheduler_daemons_results = [
     (k("*   1   * *   *"), exactly('1')),
-    (k("1   123 * *   h"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mon> on 2, 3: Unknown hosts')),
+    (k("1   123 * *   h"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mgr> on 2, 3: Unknown hosts')),
     (k("1   123 * *   *"), exactly('1')),
-    (k("12  123 * *   h"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mon> on 3: Unknown hosts')),
+    (k("12  123 * *   h"), error(OrchestratorValidationError, 'Cannot place <ServiceSpec for service_name=mgr> on 3: Unknown hosts')),
     (k("12  123 N *   *"), exactly('1', '2')),
     (k("12  123 1 *   *"), one_of('1', '2')),
     (k("12  123 2 *   *"), exactly('1', '2')),
@@ -301,21 +302,21 @@ def test_scheduler_daemons(host_key, hosts,
                            count,
                            daemons_key, daemons,
                            spec_section_key, spec_section):
-    mk_spec, mk_hosts = mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count)
+    mk_spec, hosts = mk_spec_and_host(spec_section, hosts, explicit_key, explicit, count)
     dds = [
-        DaemonDescription('mon', d, d)
+        DaemonDescription('mgr', d, d)
         for d in daemons
     ]
     run_scheduler_test(
         results=test_scheduler_daemons_results,
         mk_spec=mk_spec,
-        get_hosts_func=mk_hosts,
+        hosts=hosts,
         get_daemons_func=lambda _: dds,
         key_elems=(host_key, explicit_key, count, daemons_key, spec_section_key)
     )
 
 
-## =========================
+# =========================
 
 
 class NodeAssignmentTest(NamedTuple):
@@ -329,7 +330,7 @@ class NodeAssignmentTest(NamedTuple):
     [
         # just hosts
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(hosts=['smithi060:[v2:172.21.15.60:3301,v1:172.21.15.60:6790]=c']),
             ['smithi060'],
             [],
@@ -337,12 +338,12 @@ class NodeAssignmentTest(NamedTuple):
         ),
         # all_hosts
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(host_pattern='*'),
             'host1 host2 host3'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
-                DaemonDescription('mon', 'b', 'host2'),
+                DaemonDescription('mgr', 'a', 'host1'),
+                DaemonDescription('mgr', 'b', 'host2'),
             ],
             ['host1', 'host2', 'host3']
         ),
@@ -357,59 +358,59 @@ class NodeAssignmentTest(NamedTuple):
         ),
         # count + partial host list
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(count=3, hosts=['host3']),
             'host1 host2 host3'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
-                DaemonDescription('mon', 'b', 'host2'),
+                DaemonDescription('mgr', 'a', 'host1'),
+                DaemonDescription('mgr', 'b', 'host2'),
             ],
             ['host3']
         ),
         # count 1 + partial host list
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(count=1, hosts=['host3']),
             'host1 host2 host3'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
-                DaemonDescription('mon', 'b', 'host2'),
+                DaemonDescription('mgr', 'a', 'host1'),
+                DaemonDescription('mgr', 'b', 'host2'),
             ],
             ['host3']
         ),
         # count + partial host list + existing
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(count=2, hosts=['host3']),
             'host1 host2 host3'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
+                DaemonDescription('mgr', 'a', 'host1'),
             ],
             ['host3']
         ),
         # count + partial host list + existing (deterministic)
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(count=2, hosts=['host1']),
             'host1 host2'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
+                DaemonDescription('mgr', 'a', 'host1'),
             ],
             ['host1']
         ),
         # count + partial host list + existing (deterministic)
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(count=2, hosts=['host1']),
             'host1 host2'.split(),
             [
-                DaemonDescription('mon', 'a', 'host2'),
+                DaemonDescription('mgr', 'a', 'host2'),
             ],
             ['host1']
         ),
         # label only
         NodeAssignmentTest(
-            'mon',
+            'mgr',
             PlacementSpec(label='foo'),
             'host1 host2 host3'.split(),
             [],
@@ -417,19 +418,14 @@ class NodeAssignmentTest(NamedTuple):
         ),
         # host_pattern
         NodeAssignmentTest(
-            'mon',
-            PlacementSpec(host_pattern='mon*'),
-            'monhost1 monhost2 datahost'.split(),
+            'mgr',
+            PlacementSpec(host_pattern='mgr*'),
+            'mgrhost1 mgrhost2 datahost'.split(),
             [],
-            ['monhost1', 'monhost2']
+            ['mgrhost1', 'mgrhost2']
         ),
     ])
 def test_node_assignment(service_type, placement, hosts, daemons, expected):
-    def get_hosts_func(label=None, as_hostspec=False):
-        if as_hostspec:
-            return [HostSpec(h) for h in hosts]
-        return hosts
-
     service_id = None
     if service_type == 'rgw':
         service_id = 'realm.zone'
@@ -440,7 +436,7 @@ def test_node_assignment(service_type, placement, hosts, daemons, expected):
 
     hosts = HostAssignment(
         spec=spec,
-        get_hosts_func=get_hosts_func,
+        hosts=[HostSpec(h, labels=['foo']) for h in hosts],
         get_daemons_func=lambda _: daemons).place()
     assert sorted([h.hostname for h in hosts]) == sorted(expected)
 
@@ -457,7 +453,7 @@ class NodeAssignmentTest2(NamedTuple):
     [
         # just count
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=1),
             'host1 host2 host3'.split(),
             [],
@@ -467,7 +463,7 @@ class NodeAssignmentTest2(NamedTuple):
 
         # hosts + (smaller) count
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=1, hosts='host1 host2'.split()),
             'host1 host2'.split(),
             [],
@@ -476,28 +472,28 @@ class NodeAssignmentTest2(NamedTuple):
         ),
         # hosts + (smaller) count, existing
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=1, hosts='host1 host2 host3'.split()),
             'host1 host2 host3'.split(),
-            [DaemonDescription('mon', 'mon.a', 'host1'),],
+            [DaemonDescription('mgr', 'mgr.a', 'host1'),],
             1,
             ['host1', 'host2', 'host3'],
         ),
         # hosts + (smaller) count, (more) existing
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=1, hosts='host1 host2 host3'.split()),
             'host1 host2 host3'.split(),
             [
-                DaemonDescription('mon', 'a', 'host1'),
-                DaemonDescription('mon', 'b', 'host2'),
+                DaemonDescription('mgr', 'a', 'host1'),
+                DaemonDescription('mgr', 'b', 'host2'),
             ],
             1,
             ['host1', 'host2']
         ),
         # count + partial host list
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=2, hosts=['host3']),
             'host1 host2 host3'.split(),
             [],
@@ -506,7 +502,7 @@ class NodeAssignmentTest2(NamedTuple):
         ),
         # label + count
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=1, label='foo'),
             'host1 host2 host3'.split(),
             [],
@@ -516,14 +512,9 @@ class NodeAssignmentTest2(NamedTuple):
     ])
 def test_node_assignment2(service_type, placement, hosts,
                           daemons, expected_len, in_set):
-    def get_hosts_func(label=None, as_hostspec=False):
-        if as_hostspec:
-            return [HostSpec(h) for h in hosts]
-        return hosts
-
     hosts = HostAssignment(
         spec=ServiceSpec(service_type, placement=placement),
-        get_hosts_func=get_hosts_func,
+        hosts=[HostSpec(h, labels=['foo']) for h in hosts],
         get_daemons_func=lambda _: daemons).place()
     assert len(hosts) == expected_len
     for h in [h.hostname for h in hosts]:
@@ -533,7 +524,7 @@ def test_node_assignment2(service_type, placement, hosts,
     [
         # hosts + (smaller) count, (more) existing
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=3, hosts='host3'.split()),
             'host1 host2 host3'.split(),
             [],
@@ -542,7 +533,7 @@ def test_node_assignment2(service_type, placement, hosts,
         ),
         # count + partial host list
         NodeAssignmentTest2(
-            'mon',
+            'mgr',
             PlacementSpec(count=2, hosts=['host3']),
             'host1 host2 host3'.split(),
             [],
@@ -552,14 +543,9 @@ def test_node_assignment2(service_type, placement, hosts,
     ])
 def test_node_assignment3(service_type, placement, hosts,
                           daemons, expected_len, must_have):
-    def get_hosts_func(label=None, as_hostspec=False):
-        if as_hostspec:
-            return [HostSpec(h) for h in hosts]
-        return hosts
-
     hosts = HostAssignment(
         spec=ServiceSpec(service_type, placement=placement),
-        get_hosts_func=get_hosts_func,
+        hosts=[HostSpec(h) for h in hosts],
         get_daemons_func=lambda _: daemons).place()
     assert len(hosts) == expected_len
     for h in must_have:
@@ -591,38 +577,34 @@ class NodeAssignmentTestBadSpec(NamedTuple):
     [
         # unknown host
         NodeAssignmentTestBadSpec(
-            'mon',
+            'mgr',
             PlacementSpec(hosts=['unknownhost']),
             ['knownhost'],
             [],
-            "Cannot place <ServiceSpec for service_name=mon> on unknownhost: Unknown hosts"
+            "Cannot place <ServiceSpec for service_name=mgr> on unknownhost: Unknown hosts"
         ),
         # unknown host pattern
         NodeAssignmentTestBadSpec(
-            'mon',
+            'mgr',
             PlacementSpec(host_pattern='unknownhost'),
             ['knownhost'],
             [],
-            "Cannot place <ServiceSpec for service_name=mon>: No matching hosts"
+            "Cannot place <ServiceSpec for service_name=mgr>: No matching hosts"
         ),
         # unknown label
         NodeAssignmentTestBadSpec(
-            'mon',
+            'mgr',
             PlacementSpec(label='unknownlabel'),
             [],
             [],
-            "Cannot place <ServiceSpec for service_name=mon>: No matching hosts for label unknownlabel"
+            "Cannot place <ServiceSpec for service_name=mgr>: No matching hosts for label unknownlabel"
         ),
     ])
 def test_bad_specs(service_type, placement, hosts, daemons, expected):
-    def get_hosts_func(label=None, as_hostspec=False):
-        if as_hostspec:
-            return [HostSpec(h) for h in hosts]
-        return hosts
     with pytest.raises(OrchestratorValidationError) as e:
         hosts = HostAssignment(
             spec=ServiceSpec(service_type, placement=placement),
-            get_hosts_func=get_hosts_func,
+            hosts=[HostSpec(h) for h in hosts],
             get_daemons_func=lambda _: daemons).place()
     assert str(e.value) == expected
 
@@ -764,10 +746,6 @@ class ActiveAssignmentTest(NamedTuple):
 
                          ])
 def test_active_assignment(service_type, placement, hosts, daemons, expected):
-    def get_hosts_func(label=None, as_hostspec=False):
-        if as_hostspec:
-            return [HostSpec(h) for h in hosts]
-        return hosts
 
     spec = ServiceSpec(service_type=service_type,
                        service_id=None,
@@ -775,6 +753,118 @@ def test_active_assignment(service_type, placement, hosts, daemons, expected):
 
     hosts = HostAssignment(
         spec=spec,
-        get_hosts_func=get_hosts_func,
+        hosts=[HostSpec(h) for h in hosts],
         get_daemons_func=lambda _: daemons).place()
     assert sorted([h.hostname for h in hosts]) in expected
+
+class OddMonsTest(NamedTuple):
+    service_type: str
+    placement: PlacementSpec
+    hosts: List[str]
+    daemons: List[DaemonDescription]
+    expected_count: int
+
+
+@pytest.mark.parametrize("service_type,placement,hosts,daemons,expected_count",
+                         [
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=5),
+                                 'host1 host2 host3 host4'.split(),
+                                 [],
+                                 3
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=4),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 3
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=5),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 5
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(hosts='host1 host2 host3 host4'.split()),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 3
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(hosts='host1 host2 host3 host4 host5'.split()),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 5
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(host_pattern='*'),
+                                 'host1 host2 host3 host4'.split(),
+                                 [],
+                                 3
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=5, hosts='host1 host2 host3 host4'.split()),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 3
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=2, hosts='host1 host2 host3'.split()),
+                                 'host1 host2 host3 host4 host5'.split(),
+                                 [],
+                                 1
+                             ),
+                             OddMonsTest(
+                                 'mon',
+                                 PlacementSpec(count=5),
+                                 'host1 host2 host3 host4'.split(),
+                                 [
+                                     DaemonDescription('mon', 'a', 'host1'),
+                                     DaemonDescription('mon', 'b', 'host2'),
+                                     DaemonDescription('mon', 'c', 'host3'),
+                                 ],
+                                 3
+                             ),
+                            OddMonsTest(
+                                'mon',
+                                PlacementSpec(count=5),
+                                'host1 host2 host3 host4'.split(),
+                                [
+                                   DaemonDescription('mon', 'a', 'host1'),
+                                   DaemonDescription('mon', 'b', 'host2'),
+                                ],
+                                3
+                            ),
+                            OddMonsTest(
+                                'mon',
+                                PlacementSpec(hosts='host1 host2 host3 host4'.split()),
+                                'host1 host2 host3 host4 host5'.split(),
+                                [
+                                   DaemonDescription('mon', 'a', 'host1'),
+                                   DaemonDescription('mon', 'b', 'host2'),
+                                   DaemonDescription('mon', 'c', 'host3'),
+                                ],
+                                3
+                            ),
+
+                         ])
+def test_odd_mons(service_type, placement, hosts, daemons, expected_count):
+
+    spec = ServiceSpec(service_type=service_type,
+                       service_id=None,
+                       placement=placement)
+
+    hosts = HostAssignment(
+        spec=spec,
+        hosts=[HostSpec(h) for h in hosts],
+        get_daemons_func=lambda _: daemons).place()
+    assert len(hosts) == expected_count
index 9857e6fe4dc23bc6843631598f6c572c9bde38c8..2a66665bb63059f0ff262f0b4f84cd9b574926b1 100644 (file)
@@ -1,6 +1,16 @@
+import pytest
+
 from unittest.mock import MagicMock
 
-from cephadm.services.monitoring import GrafanaService
+from cephadm.services.cephadmservice import MonService, MgrService, MdsService, RgwService, \
+    RbdMirrorService, CrashService, CephadmService, AuthEntity
+from cephadm.services.iscsi import IscsiService
+from cephadm.services.nfs import NFSService
+from cephadm.services.osd import RemoveUtil, OSDQueue, OSDService, OSD, NotFoundError
+from cephadm.services.monitoring import GrafanaService, AlertmanagerService, PrometheusService, \
+    NodeExporterService
+
+from orchestrator import OrchestratorError
 
 
 class FakeMgr:
@@ -31,3 +41,75 @@ class TestCephadmService:
         mgr.check_mon_command.reset_mock()
         service._set_service_url_on_dashboard('svc', 'get-cmd', 'set-cmd', service_url)
         mgr.check_mon_command.assert_called_once_with({'prefix': 'get-cmd'})
+
+    def _get_services(self, mgr):
+        # services:
+        osd_service = OSDService(mgr)
+        nfs_service = NFSService(mgr)
+        mon_service = MonService(mgr)
+        mgr_service = MgrService(mgr)
+        mds_service = MdsService(mgr)
+        rgw_service = RgwService(mgr)
+        rbd_mirror_service = RbdMirrorService(mgr)
+        grafana_service = GrafanaService(mgr)
+        alertmanager_service = AlertmanagerService(mgr)
+        prometheus_service = PrometheusService(mgr)
+        node_exporter_service = NodeExporterService(mgr)
+        crash_service = CrashService(mgr)
+        iscsi_service = IscsiService(mgr)
+        cephadm_services = {
+            'mon': mon_service,
+            'mgr': mgr_service,
+            'osd': osd_service,
+            'mds': mds_service,
+            'rgw': rgw_service,
+            'rbd-mirror': rbd_mirror_service,
+            'nfs': nfs_service,
+            'grafana': grafana_service,
+            'alertmanager': alertmanager_service,
+            'prometheus': prometheus_service,
+            'node-exporter': node_exporter_service,
+            'crash': crash_service,
+            'iscsi': iscsi_service,
+        }
+        return cephadm_services
+
+    def test_get_auth_entity(self):
+        mgr = FakeMgr()
+        cephadm_services = self._get_services(mgr)
+
+        for daemon_type in ['rgw', 'rbd-mirror', 'nfs', "iscsi"]:
+            assert "client.%s.id1" % (daemon_type) == \
+                cephadm_services[daemon_type].get_auth_entity("id1", "host")
+            assert "client.%s.id1" % (daemon_type) == \
+                cephadm_services[daemon_type].get_auth_entity("id1", "")
+            assert "client.%s.id1" % (daemon_type) == \
+                cephadm_services[daemon_type].get_auth_entity("id1")
+
+        assert "client.crash.host" == \
+            cephadm_services["crash"].get_auth_entity("id1", "host")
+        with pytest.raises(OrchestratorError):
+            t = cephadm_services["crash"].get_auth_entity("id1", "")
+            t = cephadm_services["crash"].get_auth_entity("id1")
+
+        assert "mon." == cephadm_services["mon"].get_auth_entity("id1", "host")
+        assert "mon." == cephadm_services["mon"].get_auth_entity("id1", "")
+        assert "mon." == cephadm_services["mon"].get_auth_entity("id1")
+
+        assert "mgr.id1" == cephadm_services["mgr"].get_auth_entity("id1", "host")
+        assert "mgr.id1" == cephadm_services["mgr"].get_auth_entity("id1", "")
+        assert "mgr.id1" == cephadm_services["mgr"].get_auth_entity("id1")
+
+        for daemon_type in ["osd", "mds"]:
+            assert "%s.id1" % daemon_type == \
+                cephadm_services[daemon_type].get_auth_entity("id1", "host")
+            assert "%s.id1" % daemon_type == \
+                cephadm_services[daemon_type].get_auth_entity("id1", "")
+            assert "%s.id1" % daemon_type == \
+                cephadm_services[daemon_type].get_auth_entity("id1")
+
+        with pytest.raises(AttributeError):
+            for daemon_type in ['grafana', 'alertmanager', 'prometheus', 'node-exporter']:
+                cephadm_services[daemon_type].get_auth_entity("id1", "host")
+                cephadm_services[daemon_type].get_auth_entity("id1", "")
+                cephadm_services[daemon_type].get_auth_entity("id1")
index 2fa190a814fb98403371370c185326498fbec263..ab2d059126c828cfd9c52ef4259afb5d59b728bf 100644 (file)
@@ -1,9 +1,13 @@
+# Disable autopep8 for this file:
+
+# fmt: off
+
 import json
 
 import pytest
 
 from ceph.deployment.service_spec import ServiceSpec, NFSServiceSpec, RGWSpec, \
-    IscsiServiceSpec, AlertManagerSpec
+    IscsiServiceSpec, AlertManagerSpec, HostPlacementSpec, CustomContainerSpec
 
 from orchestrator import DaemonDescription, OrchestratorError
 
@@ -101,6 +105,16 @@ def test_spec_octopus(spec_json):
         if 'spec' in j_c:
             spec = j_c.pop('spec')
             j_c.update(spec)
+        if 'placement' in j_c:
+            if 'hosts' in j_c['placement']:
+                j_c['placement']['hosts'] = [
+                    {
+                        'hostname': HostPlacementSpec.parse(h).hostname,
+                        'network': HostPlacementSpec.parse(h).network,
+                        'name': HostPlacementSpec.parse(h).name
+                    }
+                    for h in j_c['placement']['hosts']
+                ]
         j_c.pop('objectstore', None)
         j_c.pop('filter_logic', None)
         return j_c
@@ -517,6 +531,33 @@ def test_dd_octopus(dd_json):
         ),
         True
     ),
+    (
+        # fixed daemon id for teuthology.
+        IscsiServiceSpec(
+            service_type='iscsi',
+            service_id='iscsi',
+        ),
+        DaemonDescription(
+            daemon_type='iscsi',
+            daemon_id="iscsi.a",
+            hostname="host1",
+        ),
+        True
+    ),
+
+    (
+        CustomContainerSpec(
+            service_type='container',
+            service_id='hello-world',
+            image='docker.io/library/hello-world:latest',
+        ),
+        DaemonDescription(
+            daemon_type='container',
+            daemon_id='hello-world.mgr0',
+            hostname='mgr0',
+        ),
+        True
+    ),
 ])
 def test_daemon_description_service_name(spec: ServiceSpec,
                                          dd: DaemonDescription,
@@ -539,3 +580,56 @@ def test_alertmanager_spec_2():
     spec = AlertManagerSpec(user_data={'default_webhook_urls': ['foo']})
     assert isinstance(spec.user_data, dict)
     assert 'default_webhook_urls' in spec.user_data.keys()
+
+
+def test_custom_container_spec():
+    spec = CustomContainerSpec(service_id='hello-world',
+                               image='docker.io/library/hello-world:latest',
+                               entrypoint='/usr/bin/bash',
+                               uid=1000,
+                               gid=2000,
+                               volume_mounts={'foo': '/foo'},
+                               args=['--foo'],
+                               envs=['FOO=0815'],
+                               bind_mounts=[
+                                   [
+                                       'type=bind',
+                                       'source=lib/modules',
+                                       'destination=/lib/modules',
+                                       'ro=true'
+                                   ]
+                               ],
+                               ports=[8080, 8443],
+                               dirs=['foo', 'bar'],
+                               files={
+                                   'foo.conf': 'foo\nbar',
+                                   'bar.conf': ['foo', 'bar']
+                               })
+    assert spec.service_type == 'container'
+    assert spec.entrypoint == '/usr/bin/bash'
+    assert spec.uid == 1000
+    assert spec.gid == 2000
+    assert spec.volume_mounts == {'foo': '/foo'}
+    assert spec.args == ['--foo']
+    assert spec.envs == ['FOO=0815']
+    assert spec.bind_mounts == [
+        [
+            'type=bind',
+            'source=lib/modules',
+            'destination=/lib/modules',
+            'ro=true'
+        ]
+    ]
+    assert spec.ports == [8080, 8443]
+    assert spec.dirs == ['foo', 'bar']
+    assert spec.files == {
+        'foo.conf': 'foo\nbar',
+        'bar.conf': ['foo', 'bar']
+    }
+
+
+def test_custom_container_spec_config_json():
+    spec = CustomContainerSpec(service_id='foo', image='foo', dirs=None)
+    config_json = spec.config_json()
+    for key in ['entrypoint', 'uid', 'gid', 'bind_mounts', 'dirs']:
+        assert key not in config_json
index 962b30673e10876069d9ca558b16831372d5dfe5..40b783bdbf9ac68f266dd1eab1ebfbc6d9548008 100644 (file)
@@ -2,15 +2,16 @@ import pathlib
 
 import pytest
 
+from cephadm.tests.fixtures import cephadm_module
 from cephadm.template import TemplateMgr, UndefinedError, TemplateNotFoundError
 
 
-def test_render(fs):
+def test_render(cephadm_module, fs):
     template_base = (pathlib.Path(__file__).parent / '../templates').resolve()
     fake_template = template_base / 'foo/bar'
     fs.create_file(fake_template, contents='{{ cephadm_managed }}{{ var }}')
 
-    template_mgr = TemplateMgr()
+    template_mgr = TemplateMgr(cephadm_module)
     value = 'test'
 
     # with base context
index 44e340ce29173c83d124b3522f8df90581b844a6..8316670856f3a708592e991f1b9e1285ca0c99ba 100644 (file)
@@ -1,35 +1,45 @@
 import json
 from unittest import mock
 
+import pytest
+
 from ceph.deployment.service_spec import ServiceSpec
 from cephadm import CephadmOrchestrator
+from cephadm.upgrade import CephadmUpgrade
+from cephadm.serve import CephadmServe
 from .fixtures import _run_cephadm, wait, cephadm_module, with_host, with_service
 
+
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
 def test_upgrade_start(cephadm_module: CephadmOrchestrator):
     with with_host(cephadm_module, 'test'):
-        assert wait(cephadm_module, cephadm_module.upgrade_start('image_id', None)) == 'Initiating upgrade to image_id'
+        assert wait(cephadm_module, cephadm_module.upgrade_start(
+            'image_id', None)) == 'Initiating upgrade to image_id'
 
         assert wait(cephadm_module, cephadm_module.upgrade_status()).target_image == 'image_id'
 
         assert wait(cephadm_module, cephadm_module.upgrade_pause()) == 'Paused upgrade to image_id'
 
-        assert wait(cephadm_module, cephadm_module.upgrade_resume()) == 'Resumed upgrade to image_id'
+        assert wait(cephadm_module, cephadm_module.upgrade_resume()
+                    ) == 'Resumed upgrade to image_id'
 
         assert wait(cephadm_module, cephadm_module.upgrade_stop()) == 'Stopped upgrade to image_id'
 
 
 @mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm('{}'))
-def test_upgrade_run(cephadm_module: CephadmOrchestrator):
+@pytest.mark.parametrize("use_repo_digest",
+                         [
+                             False,
+                             True
+                         ])
+def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator):
     with with_host(cephadm_module, 'test'):
-        cephadm_module.check_mon_command({
-            'prefix': 'config set',
-            'name': 'container_image',
-            'value': 'from_image',
-            'who': 'global',
-        })
+        cephadm_module.set_container_image('global', 'from_image')
+        if use_repo_digest:
+            cephadm_module.use_repo_digest = True
         with with_service(cephadm_module, ServiceSpec('mgr'), CephadmOrchestrator.apply_mgr, 'test'):
-            assert wait(cephadm_module, cephadm_module.upgrade_start('to_image', None)) == 'Initiating upgrade to to_image'
+            assert wait(cephadm_module, cephadm_module.upgrade_start(
+                'to_image', None)) == 'Initiating upgrade to to_image'
 
             assert wait(cephadm_module, cephadm_module.upgrade_status()).target_image == 'to_image'
 
@@ -42,6 +52,30 @@ def test_upgrade_run(cephadm_module: CephadmOrchestrator):
 
             cephadm_module._mon_command_mock_versions = _versions_mock
 
+            with mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm(json.dumps({
+                'image_id': 'image_id',
+                'repo_digest': 'to_image@repo_digest',
+            }))):
+
+                cephadm_module.upgrade._do_upgrade()
+
+            assert cephadm_module.upgrade_status is not None
+
+            with mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm(
+                json.dumps([
+                    dict(
+                        name=list(cephadm_module.cache.daemons['test'].keys())[0],
+                        style='cephadm',
+                        fsid='fsid',
+                        container_id='container_id',
+                        container_image_id='image_id',
+                        version='version',
+                        state='running',
+                    )
+                ])
+            )):
+                CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
+
             cephadm_module.upgrade._do_upgrade()
 
             _, image, _ = cephadm_module.check_mon_command({
@@ -49,5 +83,14 @@ def test_upgrade_run(cephadm_module: CephadmOrchestrator):
                 'who': 'global',
                 'key': 'container_image',
             })
+            if use_repo_digest:
+                assert image == 'to_image@repo_digest'
+            else:
+                assert image == 'to_image'
+
 
-            assert image == 'to_image'
+def test_upgrade_state_null(cephadm_module: CephadmOrchestrator):
+    # This test validates https://tracker.ceph.com/issues/47580
+    cephadm_module.set_store('upgrade_state', 'null')
+    CephadmUpgrade(cephadm_module)
+    assert CephadmUpgrade(cephadm_module).upgrade_state is None
diff --git a/ceph/src/pybind/mgr/cephadm/tests/test_utils.py b/ceph/src/pybind/mgr/cephadm/tests/test_utils.py
deleted file mode 100644 (file)
index 9ae6d61..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-import pytest
-
-from orchestrator import OrchestratorError
-from cephadm.utils import name_to_auth_entity
-
-def test_name_to_auth_entity(fs):
-
-    for daemon_type in ['rgw', 'rbd-mirror', 'nfs', "iscsi"]:
-        assert "client.%s.id1" % (daemon_type) == name_to_auth_entity(daemon_type, "id1", "host")
-        assert "client.%s.id1" % (daemon_type) == name_to_auth_entity(daemon_type, "id1", "")
-        assert "client.%s.id1" % (daemon_type) == name_to_auth_entity(daemon_type, "id1")
-
-    assert "client.crash.host" == name_to_auth_entity("crash", "id1", "host")
-    with pytest.raises(OrchestratorError):
-        t = name_to_auth_entity("crash", "id1", "")
-        t = name_to_auth_entity("crash", "id1")
-
-    assert "mon." == name_to_auth_entity("mon", "id1", "host")
-    assert "mon." == name_to_auth_entity("mon", "id1", "")
-    assert "mon." == name_to_auth_entity("mon", "id1")
-
-    assert "mgr.id1" == name_to_auth_entity("mgr", "id1", "host")
-    assert "mgr.id1" == name_to_auth_entity("mgr", "id1", "")
-    assert "mgr.id1" == name_to_auth_entity("mgr", "id1")
-
-    for daemon_type in ["osd", "mds", "client"]:
-        assert "%s.id1" % daemon_type == name_to_auth_entity(daemon_type, "id1", "host")
-        assert "%s.id1" % daemon_type == name_to_auth_entity(daemon_type, "id1", "")
-        assert "%s.id1" % daemon_type == name_to_auth_entity(daemon_type, "id1")
-
-    with pytest.raises(OrchestratorError):
-         name_to_auth_entity("whatever", "id1", "host")
-         name_to_auth_entity("whatever", "id1", "")
-         name_to_auth_entity("whatever", "id1")
index 0e72e0a7109233af43bfb2aa8feab32d56374bb5..6a130681d0cd51db9c41c6df3a181e90e51ff324 100644 (file)
@@ -2,7 +2,7 @@ import json
 import logging
 import time
 import uuid
-from typing import TYPE_CHECKING, Optional
+from typing import TYPE_CHECKING, Optional, Dict, NamedTuple
 
 import orchestrator
 from cephadm.utils import name_to_config_section
@@ -24,30 +24,36 @@ class UpgradeState:
                  target_name: str,
                  progress_id: str,
                  target_id: Optional[str] = None,
+                 repo_digest: Optional[str] = None,
                  target_version: Optional[str] = None,
                  error: Optional[str] = None,
                  paused: Optional[bool] = None,
                  ):
-        self.target_name: str = target_name
+        self._target_name: str = target_name  # Use CephadmUpgrade.target_image instead.
         self.progress_id: str = progress_id
         self.target_id: Optional[str] = target_id
+        self.repo_digest: Optional[str] = repo_digest
         self.target_version: Optional[str] = target_version
         self.error: Optional[str] = error
         self.paused: bool = paused or False
 
     def to_json(self) -> dict:
         return {
-            'target_name': self.target_name,
+            'target_name': self._target_name,
             'progress_id': self.progress_id,
             'target_id': self.target_id,
+            'repo_digest': self.repo_digest,
             'target_version': self.target_version,
             'error': self.error,
             'paused': self.paused,
         }
 
     @classmethod
-    def from_json(cls, data) -> 'UpgradeState':
-        return cls(**data)
+    def from_json(cls, data) -> Optional['UpgradeState']:
+        if data:
+            return cls(**data)
+        else:
+            return None
 
 
 class CephadmUpgrade:
@@ -60,10 +66,20 @@ class CephadmUpgrade:
         else:
             self.upgrade_state = None
 
+    @property
+    def target_image(self) -> str:
+        assert self.upgrade_state
+        if not self.mgr.use_repo_digest:
+            return self.upgrade_state._target_name
+        if not self.upgrade_state.repo_digest:
+            return self.upgrade_state._target_name
+
+        return self.upgrade_state.repo_digest
+
     def upgrade_status(self) -> orchestrator.UpgradeStatusSpec:
         r = orchestrator.UpgradeStatusSpec()
         if self.upgrade_state:
-            r.target_image = self.upgrade_state.target_name
+            r.target_image = self.target_image
             r.in_progress = True
             if self.upgrade_state.error:
                 r.message = 'Error: ' + self.upgrade_state.error
@@ -90,15 +106,15 @@ class CephadmUpgrade:
         else:
             raise OrchestratorError('must specify either image or version')
         if self.upgrade_state:
-            if self.upgrade_state.target_name != target_name:
+            if self.upgrade_state._target_name != target_name:
                 raise OrchestratorError(
                     'Upgrade to %s (not %s) already in progress' %
-                    (self.upgrade_state.target_name, target_name))
+                    (self.upgrade_state._target_name, target_name))
             if self.upgrade_state.paused:
                 self.upgrade_state.paused = False
                 self._save_upgrade_state()
-                return 'Resumed upgrade to %s' % self.upgrade_state.target_name
-            return 'Upgrade to %s in progress' % self.upgrade_state.target_name
+                return 'Resumed upgrade to %s' % self.target_image
+            return 'Upgrade to %s in progress' % self.target_image
         self.upgrade_state = UpgradeState(
             target_name=target_name,
             progress_id=str(uuid.uuid4())
@@ -113,33 +129,33 @@ class CephadmUpgrade:
         if not self.upgrade_state:
             raise OrchestratorError('No upgrade in progress')
         if self.upgrade_state.paused:
-            return 'Upgrade to %s already paused' % self.upgrade_state.target_name
+            return 'Upgrade to %s already paused' % self.target_image
         self.upgrade_state.paused = True
         self._save_upgrade_state()
-        return 'Paused upgrade to %s' % self.upgrade_state.target_name
+        return 'Paused upgrade to %s' % self.target_image
 
     def upgrade_resume(self) -> str:
         if not self.upgrade_state:
             raise OrchestratorError('No upgrade in progress')
         if not self.upgrade_state.paused:
-            return 'Upgrade to %s not paused' % self.upgrade_state.target_name
+            return 'Upgrade to %s not paused' % self.target_image
         self.upgrade_state.paused = False
         self._save_upgrade_state()
         self.mgr.event.set()
-        return 'Resumed upgrade to %s' % self.upgrade_state.target_name
+        return 'Resumed upgrade to %s' % self.target_image
 
     def upgrade_stop(self) -> str:
         if not self.upgrade_state:
             return 'No upgrade in progress'
-        target_name = self.upgrade_state.target_name
         if self.upgrade_state.progress_id:
             self.mgr.remote('progress', 'complete',
                             self.upgrade_state.progress_id)
+        target_image = self.target_image
         self.upgrade_state = None
         self._save_upgrade_state()
         self._clear_upgrade_health_checks()
         self.mgr.event.set()
-        return 'Stopped upgrade to %s' % target_name
+        return 'Stopped upgrade to %s' % target_image
 
     def continue_upgrade(self) -> bool:
         """
@@ -163,7 +179,7 @@ class CephadmUpgrade:
             if not r.retval:
                 logger.info(f'Upgrade: {r.stdout}')
                 return True
-            logger.error('Upgrade: {r.stderr}')
+            logger.error(f'Upgrade: {r.stderr}')
 
             time.sleep(15)
             tries -= 1
@@ -196,7 +212,7 @@ class CephadmUpgrade:
             self.upgrade_state.progress_id = str(uuid.uuid4())
             self._save_upgrade_state()
         self.mgr.remote('progress', 'update', self.upgrade_state.progress_id,
-                        ev_msg='Upgrade to %s' % self.upgrade_state.target_name,
+                        ev_msg='Upgrade to %s' % self.target_image,
                         ev_progress=progress)
 
     def _save_upgrade_state(self) -> None:
@@ -205,19 +221,33 @@ class CephadmUpgrade:
             return
         self.mgr.set_store('upgrade_state', json.dumps(self.upgrade_state.to_json()))
 
+    def get_distinct_container_image_settings(self) -> Dict[str, str]:
+        # get all distinct container_image settings
+        image_settings = {}
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'config dump',
+            'format': 'json',
+        })
+        config = json.loads(out)
+        for opt in config:
+            if opt['name'] == 'container_image':
+                image_settings[opt['section']] = opt['value']
+        return image_settings
+
     def _do_upgrade(self):
         # type: () -> None
         if not self.upgrade_state:
             logger.debug('_do_upgrade no state, exiting')
             return
 
-        target_name = self.upgrade_state.target_name
+        target_image = self.target_image
         target_id = self.upgrade_state.target_id
-        if not target_id:
+        if not target_id or (self.mgr.use_repo_digest and not self.upgrade_state.repo_digest):
             # need to learn the container hash
-            logger.info('Upgrade: First pull of %s' % target_name)
+            logger.info('Upgrade: First pull of %s' % target_image)
             try:
-                target_id, target_version = self.mgr._get_container_image_id(target_name)
+                target_id, target_version, repo_digest = self.mgr._get_container_image_info(
+                    target_image)
             except OrchestratorError as e:
                 self._fail_upgrade('UPGRADE_FAILED_PULL', {
                     'severity': 'warning',
@@ -228,21 +258,14 @@ class CephadmUpgrade:
                 return
             self.upgrade_state.target_id = target_id
             self.upgrade_state.target_version = target_version
+            self.upgrade_state.repo_digest = repo_digest
             self._save_upgrade_state()
+            target_image = self.target_image
         target_version = self.upgrade_state.target_version
-        logger.info('Upgrade: Target is %s with id %s' % (target_name,
+        logger.info('Upgrade: Target is %s with id %s' % (target_image,
                                                           target_id))
 
-        # get all distinct container_image settings
-        image_settings = {}
-        ret, out, err = self.mgr.check_mon_command({
-            'prefix': 'config dump',
-            'format': 'json',
-        })
-        config = json.loads(out)
-        for opt in config:
-            if opt['name'] == 'container_image':
-                image_settings[opt['section']] = opt['value']
+        image_settings = self.get_distinct_container_image_settings()
 
         daemons = self.mgr.cache.get_daemons()
         done = 0
@@ -261,8 +284,7 @@ class CephadmUpgrade:
                     daemon_type, d.daemon_id,
                     d.container_image_name, d.container_image_id, d.version))
 
-                if daemon_type == 'mgr' and \
-                   d.daemon_id == self.mgr.get_mgr_id():
+                if self.mgr.daemon_is_self(d.daemon_type, d.daemon_id):
                     logger.info('Upgrade: Need to upgrade myself (mgr.%s)' %
                                 self.mgr.get_mgr_id())
                     need_upgrade_self = True
@@ -271,27 +293,27 @@ class CephadmUpgrade:
                 # make sure host has latest container image
                 out, err, code = self.mgr._run_cephadm(
                     d.hostname, '', 'inspect-image', [],
-                    image=target_name, no_fsid=True, error_ok=True)
+                    image=target_image, no_fsid=True, error_ok=True)
                 if code or json.loads(''.join(out)).get('image_id') != target_id:
-                    logger.info('Upgrade: Pulling %s on %s' % (target_name,
+                    logger.info('Upgrade: Pulling %s on %s' % (target_image,
                                                                d.hostname))
                     out, err, code = self.mgr._run_cephadm(
                         d.hostname, '', 'pull', [],
-                        image=target_name, no_fsid=True, error_ok=True)
+                        image=target_image, no_fsid=True, error_ok=True)
                     if code:
                         self._fail_upgrade('UPGRADE_FAILED_PULL', {
                             'severity': 'warning',
                             'summary': 'Upgrade: failed to pull target image',
                             'count': 1,
                             'detail': [
-                                'failed to pull %s on host %s' % (target_name,
+                                'failed to pull %s on host %s' % (target_image,
                                                                   d.hostname)],
                         })
                         return
                     r = json.loads(''.join(out))
                     if r.get('image_id') != target_id:
                         logger.info('Upgrade: image %s pull on %s got new image %s (not %s), restarting' % (
-                            target_name, d.hostname, r['image_id'], target_id))
+                            target_image, d.hostname, r['image_id'], target_id))
                         self.upgrade_state.target_id = r['image_id']
                         self._save_upgrade_state()
                         return
@@ -299,7 +321,7 @@ class CephadmUpgrade:
                 self._update_upgrade_progress(done / len(daemons))
 
                 if not d.container_image_id:
-                    if d.container_image_name == target_name:
+                    if d.container_image_name == target_image:
                         logger.debug(
                             'daemon %s has unknown container_image_id but has correct image name' % (d.name()))
                         continue
@@ -312,17 +334,17 @@ class CephadmUpgrade:
                     d.daemon_id,
                     d.hostname,
                     'redeploy',
-                    image=target_name
+                    image=target_image
                 )
                 return
 
             if need_upgrade_self:
-                mgr_map = self.mgr.get('mgr_map')
-                num = len(mgr_map.get('standbys'))
-                if not num:
+                try:
+                    self.mgr.mgr_service.fail_over()
+                except OrchestratorError as e:
                     self._fail_upgrade('UPGRADE_NO_STANDBY_MGR', {
                         'severity': 'warning',
-                        'summary': 'Upgrade: Need standby mgr daemon',
+                        'summary': f'Upgrade: {e}',
                         'count': 1,
                         'detail': [
                             'The upgrade process needs to upgrade the mgr, '
@@ -331,17 +353,7 @@ class CephadmUpgrade:
                     })
                     return
 
-                logger.info('Upgrade: there are %d other already-upgraded '
-                            'standby mgrs, failing over' % num)
-
-                self._update_upgrade_progress(done / len(daemons))
-
-                # fail over
-                ret, out, err = self.mgr.check_mon_command({
-                    'prefix': 'mgr fail',
-                    'who': self.mgr.get_mgr_id(),
-                })
-                return
+                return  # unreachable code, as fail_over never returns
             elif daemon_type == 'mgr':
                 if 'UPGRADE_NO_STANDBY_MGR' in self.mgr.health_checks:
                     del self.mgr.health_checks['UPGRADE_NO_STANDBY_MGR']
@@ -359,15 +371,10 @@ class CephadmUpgrade:
                         (count, daemon_type, version, target_version))
 
             # push down configs
-            if image_settings.get(daemon_type) != target_name:
+            if image_settings.get(daemon_type) != target_image:
                 logger.info('Upgrade: Setting container_image for all %s...' %
                             daemon_type)
-                ret, out, err = self.mgr.check_mon_command({
-                    'prefix': 'config set',
-                    'name': 'container_image',
-                    'value': target_name,
-                    'who': name_to_config_section(daemon_type),
-                })
+                self.mgr.set_container_image(name_to_config_section(daemon_type), target_image)
             to_clean = []
             for section in image_settings.keys():
                 if section.startswith(name_to_config_section(daemon_type) + '.'):
@@ -387,12 +394,8 @@ class CephadmUpgrade:
 
         # clean up
         logger.info('Upgrade: Finalizing container_image settings')
-        ret, out, err = self.mgr.check_mon_command({
-            'prefix': 'config set',
-            'name': 'container_image',
-            'value': target_name,
-            'who': 'global',
-        })
+        self.mgr.set_container_image('global', target_image)
+
         for daemon_type in CEPH_UPGRADE_ORDER:
             ret, image, err = self.mgr.check_mon_command({
                 'prefix': 'config rm',
index ca8bb48c04c587af60acd201ef5f984db48b3ac7..4c3d595010fd7725c6000abb42eebe3f76ca8544 100644 (file)
@@ -1,6 +1,7 @@
 import logging
 import re
 import json
+import datetime
 from enum import Enum
 from functools import wraps
 from typing import Optional, Callable, TypeVar, List, NewType, TYPE_CHECKING
@@ -13,7 +14,8 @@ T = TypeVar('T')
 logger = logging.getLogger(__name__)
 
 ConfEntity = NewType('ConfEntity', str)
-AuthEntity = NewType('AuthEntity', str)
+
+DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 
 
 class CephadmNoImage(Enum):
@@ -37,29 +39,6 @@ def name_to_config_section(name: str) -> ConfEntity:
         return ConfEntity('mon')
 
 
-def name_to_auth_entity(daemon_type: str,
-                        daemon_id: str,
-                        host: str = "",
-                        ) -> AuthEntity:
-    """
-    Map from daemon names/host to ceph entity names (as seen in config)
-    """
-    if daemon_type in ['rgw', 'rbd-mirror', 'nfs', "iscsi"]:
-        return AuthEntity('client.' + daemon_type + "." + daemon_id)
-    elif daemon_type == 'crash':
-        if host == "":
-            raise OrchestratorError("Host not provided to generate <crash> auth entity name")
-        return AuthEntity('client.' + daemon_type + "." + host)
-    elif daemon_type == 'mon':
-        return AuthEntity('mon.')
-    elif daemon_type == 'mgr':
-        return AuthEntity(daemon_type + "." + daemon_id)
-    elif daemon_type in ['osd', 'mds', 'client']:
-        return AuthEntity(daemon_type + "." + daemon_id)
-    else:
-        raise OrchestratorError("unknown auth entity name")
-
-
 def forall_hosts(f: Callable[..., T]) -> Callable[..., List[T]]:
     @wraps(f)
     def forall_hosts_wrapper(*args) -> List[T]:
@@ -103,3 +82,18 @@ def get_cluster_health(mgr: 'CephadmOrchestrator') -> str:
         raise OrchestratorError('failed to parse health status')
 
     return j['status']
+
+
+def is_repo_digest(image_name: str) -> bool:
+    """
+    repo digest are something like "ceph/ceph@sha256:blablabla"
+    """
+    return '@' in image_name
+
+
+def str_to_datetime(input: str) -> datetime.datetime:
+    return datetime.datetime.strptime(input, DATEFMT)
+
+
+def datetime_to_str(dt: datetime.datetime) -> str:
+    return dt.strftime(DATEFMT)
index a72ed73ce0a4f883ba117ec18e7a7e4a28818c03..d872b8a30144e66c005f87e7d1cddcd1b442ebf2 100644 (file)
@@ -481,6 +481,7 @@ class BaseController(object):
         """
         An instance of this class represents an endpoint.
         """
+
         def __init__(self, ctrl, func):
             self.ctrl = ctrl
             self.inst = None
@@ -949,3 +950,17 @@ def UpdatePermission(func):  # noqa: N802
     """
     _set_func_permissions(func, Permission.UPDATE)
     return func
+
+
+# Empty request body decorator
+
+def allow_empty_body(func):  # noqa: N802
+    """
+    The POST/PUT request methods decorated with ``@allow_empty_body``
+    are allowed to send empty request body.
+    """
+    try:
+        func._cp_config['tools.json_in.force'] = False
+    except (AttributeError, KeyError):
+        func._cp_config = {'tools.json_in.force': False}
+    return func
index 68c3827b4e85e1920101a8a91bd3f5c3e4e453f4..96a809664b425abbfb69c7c38d8d0e1ac1772322 100644 (file)
@@ -4,7 +4,8 @@ from __future__ import absolute_import
 import logging
 import cherrypy
 
-from . import ApiController, RESTController
+from . import ApiController, RESTController, \
+    allow_empty_body
 from .. import mgr
 from ..exceptions import DashboardException
 from ..services.auth import AuthManager, JwtManager
@@ -47,6 +48,7 @@ class Auth(RESTController):
                                  component='auth')
 
     @RESTController.Collection('POST')
+    @allow_empty_body
     def logout(self):
         logger.debug('Logout successful')
         token = JwtManager.get_token_from_header()
index 499fae94612ce4a2367417637aff0b234afb0a9e..8461d943383394c0be0330a693b015a3d2ae06be 100644 (file)
@@ -8,7 +8,8 @@ import os
 import cherrypy
 import cephfs
 
-from . import ApiController, ControllerDoc, RESTController, UiApiController
+from . import ApiController, ControllerDoc, RESTController, UiApiController, \
+    allow_empty_body
 from .. import mgr
 from ..exceptions import DashboardException
 from ..security import Scope
@@ -385,6 +386,7 @@ class CephFS(RESTController):
         return path
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mk_dirs(self, fs_id, path):
         """
         Create a directory.
@@ -395,6 +397,7 @@ class CephFS(RESTController):
         cfs.mk_dirs(path)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def rm_dir(self, fs_id, path):
         """
         Remove a directory.
@@ -405,6 +408,7 @@ class CephFS(RESTController):
         cfs.rm_dir(path)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mk_snapshot(self, fs_id, path, name=None):
         """
         Create a snapshot.
@@ -420,6 +424,7 @@ class CephFS(RESTController):
         return cfs.mk_snapshot(path, name)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def rm_snapshot(self, fs_id, path, name):
         """
         Remove a snapshot.
@@ -444,6 +449,7 @@ class CephFS(RESTController):
         return cfs.get_quotas(path)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def set_quotas(self, fs_id, path, max_bytes=None, max_files=None):
         """
         Set the quotas of the specified path.
index 84de247010c1bf1398073ef05f1031dde750b1d5..09b646bc050726c12e69aabc73634966a6ef5cf5 100644 (file)
@@ -5,7 +5,8 @@ from typing import Any, Dict, Union
 import logging
 import cherrypy
 
-from . import Controller, BaseController, Endpoint, ENDPOINT_MAP
+from . import Controller, BaseController, Endpoint, ENDPOINT_MAP, \
+    allow_empty_body
 from .. import mgr
 
 from ..tools import str_to_bool
@@ -449,5 +450,6 @@ class Docs(BaseController):
 
     @Endpoint('POST', path="/", json_response=False,
               query_params="{all_endpoints}")
+    @allow_empty_body
     def _with_token(self, token, all_endpoints=False):
         return self._swagger_ui_page(all_endpoints, token)
index db498c8aaad8983eeae721bb5a5afb97ce997a5d..bb9014bec65c7d59a3126002c9f0e2b5fa0b633e 100644 (file)
@@ -10,7 +10,7 @@ import cherrypy
 from mgr_util import merge_dicts
 from orchestrator import HostSpec
 from . import ApiController, RESTController, Task, Endpoint, ReadPermission, \
-    UiApiController, BaseController
+    UiApiController, BaseController, allow_empty_body
 from .orchestrator import raise_if_no_orchestrator
 from .. import mgr
 from ..exceptions import DashboardException
@@ -121,10 +121,12 @@ class Host(RESTController):
         orch_client = OrchClient.instance()
         self._check_orchestrator_host_op(orch_client, hostname, True)
         orch_client.hosts.add(hostname)
+    create._cp_config = {'tools.json_in.force': False}  # pylint: disable=W0212
 
     @raise_if_no_orchestrator
     @handle_orchestrator_error('host')
     @host_task('delete', {'hostname': '{hostname}'})
+    @allow_empty_body
     def delete(self, hostname):  # pragma: no cover - requires realtime env
         orch_client = OrchClient.instance()
         self._check_orchestrator_host_op(orch_client, hostname, False)
@@ -164,7 +166,7 @@ class Host(RESTController):
     @raise_if_no_orchestrator
     def daemons(self, hostname: str) -> List[dict]:
         orch = OrchClient.instance()
-        daemons = orch.services.list_daemons(None, hostname)
+        daemons = orch.services.list_daemons(hostname=hostname)
         return [d.to_json() for d in daemons]
 
     @handle_orchestrator_error('host')
index 81a54ce61e77400f1ed82f6ac6c4038064769370..b897f89cf4f278fb5f27ed6d7d021b9149f50ed2 100644 (file)
@@ -365,35 +365,48 @@ class IscsiTarget(RESTController):
         deleted_groups = []
         for group_id in list(target_config['groups'].keys()):
             if IscsiTarget._group_deletion_required(target, new_target_iqn, new_target_controls,
-                                                    new_groups, group_id, new_clients,
-                                                    new_disks):
+                                                    new_groups, group_id):
                 deleted_groups.append(group_id)
                 IscsiClient.instance(gateway_name=gateway_name).delete_group(target_iqn,
                                                                              group_id)
+            else:
+                group = IscsiTarget._get_group(new_groups, group_id)
+
+                old_group_disks = set(target_config['groups'][group_id]['disks'].keys())
+                new_group_disks = {'{}/{}'.format(x['pool'], x['image']) for x in group['disks']}
+                local_deleted_disks = list(old_group_disks - new_group_disks)
+
+                old_group_members = set(target_config['groups'][group_id]['members'])
+                new_group_members = set(group['members'])
+                local_deleted_members = list(old_group_members - new_group_members)
+
+                if local_deleted_disks or local_deleted_members:
+                    IscsiClient.instance(gateway_name=gateway_name).update_group(
+                        target_iqn, group_id, local_deleted_members, local_deleted_disks)
             TaskManager.current_task().inc_progress(task_progress_inc)
         deleted_clients = []
         deleted_client_luns = []
         for client_iqn, client_config in target_config['clients'].items():
             if IscsiTarget._client_deletion_required(target, new_target_iqn, new_target_controls,
-                                                     new_clients, client_iqn,
-                                                     deleted_groups):
+                                                     new_clients, client_iqn):
                 deleted_clients.append(client_iqn)
                 IscsiClient.instance(gateway_name=gateway_name).delete_client(target_iqn,
                                                                               client_iqn)
             else:
                 for image_id in list(client_config.get('luns', {}).keys()):
                     if IscsiTarget._client_lun_deletion_required(target, client_iqn, image_id,
-                                                                 new_clients):
+                                                                 new_clients, new_groups):
                         deleted_client_luns.append((client_iqn, image_id))
                         IscsiClient.instance(gateway_name=gateway_name).delete_client_lun(
                             target_iqn, client_iqn, image_id)
             TaskManager.current_task().inc_progress(task_progress_inc)
         for image_id in target_config['disks']:
             if IscsiTarget._target_lun_deletion_required(target, new_target_iqn,
-                                                         new_target_controls,
-                                                         new_disks, image_id):
+                                                         new_target_controls, new_disks, image_id):
                 all_clients = target_config['clients'].keys()
-                not_deleted_clients = [c for c in all_clients if c not in deleted_clients]
+                not_deleted_clients = [c for c in all_clients if c not in deleted_clients
+                                       and not IscsiTarget._client_in_group(target['groups'], c)
+                                       and not IscsiTarget._client_in_group(new_groups, c)]
                 for client_iqn in not_deleted_clients:
                     client_image_ids = target_config['clients'][client_iqn]['luns'].keys()
                     for client_image_id in client_image_ids:
@@ -428,28 +441,12 @@ class IscsiTarget(RESTController):
 
     @staticmethod
     def _group_deletion_required(target, new_target_iqn, new_target_controls,
-                                 new_groups, group_id, new_clients, new_disks):
+                                 new_groups, group_id):
         if IscsiTarget._target_deletion_required(target, new_target_iqn, new_target_controls):
             return True
         new_group = IscsiTarget._get_group(new_groups, group_id)
         if not new_group:
             return True
-        old_group = IscsiTarget._get_group(target['groups'], group_id)
-        if new_group != old_group:
-            return True
-        # Check if any client inside this group has changed
-        for client_iqn in new_group['members']:
-            if IscsiTarget._client_deletion_required(target, new_target_iqn, new_target_controls,
-                                                     new_clients, client_iqn,
-                                                     []):
-                return True
-        # Check if any disk inside this group has changed
-        for disk in new_group['disks']:
-            image_id = '{}/{}'.format(disk['pool'], disk['image'])
-            if IscsiTarget._target_lun_deletion_required(target, new_target_iqn,
-                                                         new_target_controls,
-                                                         new_disks, image_id):
-                return True
         return False
 
     @staticmethod
@@ -461,29 +458,45 @@ class IscsiTarget(RESTController):
 
     @staticmethod
     def _client_deletion_required(target, new_target_iqn, new_target_controls,
-                                  new_clients, client_iqn, deleted_groups):
+                                  new_clients, client_iqn):
         if IscsiTarget._target_deletion_required(target, new_target_iqn, new_target_controls):
             return True
         new_client = IscsiTarget._get_client(new_clients, client_iqn)
         if not new_client:
             return True
-        # Check if client belongs to a groups that has been deleted
-        for group in target['groups']:
-            if group['group_id'] in deleted_groups and client_iqn in group['members']:
+        return False
+
+    @staticmethod
+    def _client_in_group(groups, client_iqn):
+        for group in groups:
+            if client_iqn in group['members']:
                 return True
         return False
 
     @staticmethod
-    def _client_lun_deletion_required(target, client_iqn, image_id, new_clients):
+    def _client_lun_deletion_required(target, client_iqn, image_id, new_clients, new_groups):
         new_client = IscsiTarget._get_client(new_clients, client_iqn)
         if not new_client:
             return True
+
+        # Disks inherited from groups must be considered
+        was_in_group = IscsiTarget._client_in_group(target['groups'], client_iqn)
+        is_in_group = IscsiTarget._client_in_group(new_groups, client_iqn)
+
+        if not was_in_group and is_in_group:
+            return True
+
+        if is_in_group:
+            return False
+
         new_lun = IscsiTarget._get_disk(new_client.get('luns', []), image_id)
         if not new_lun:
             return True
+
         old_client = IscsiTarget._get_client(target['clients'], client_iqn)
         if not old_client:
             return False
+
         old_lun = IscsiTarget._get_disk(old_client.get('luns', []), image_id)
         return new_lun != old_lun
 
@@ -654,15 +667,9 @@ class IscsiTarget(RESTController):
 
         target_config = config['targets'][target_iqn]
         target = IscsiTarget._config_to_target(target_iqn, config)
-        deleted_groups = []
-        for group_id in list(target_config['groups'].keys()):
-            if IscsiTarget._group_deletion_required(target, new_target_iqn, new_target_controls,
-                                                    new_groups, group_id, new_clients,
-                                                    new_disks):
-                deleted_groups.append(group_id)
         for client_iqn in list(target_config['clients'].keys()):
             if IscsiTarget._client_deletion_required(target, new_target_iqn, new_target_controls,
-                                                     new_clients, client_iqn, deleted_groups):
+                                                     new_clients, client_iqn):
                 client_info = IscsiClient.instance(gateway_name=gateway).get_clientinfo(target_iqn,
                                                                                         client_iqn)
                 if client_info.get('state', {}).get('LOGGED_IN', []):
@@ -788,8 +795,15 @@ class IscsiTarget(RESTController):
                     pool = lun['pool']
                     image = lun['image']
                     image_id = '{}/{}'.format(pool, image)
+                    # Disks inherited from groups must be considered
+                    group_disks = []
+                    for group in groups:
+                        if client_iqn in group['members']:
+                            group_disks = ['{}/{}'.format(x['pool'], x['image'])
+                                           for x in group['disks']]
                     if not target_config or client_iqn not in target_config['clients'] or \
-                            image_id not in target_config['clients'][client_iqn]['luns']:
+                            (image_id not in target_config['clients'][client_iqn]['luns']
+                             and image_id not in group_disks):
                         IscsiClient.instance(gateway_name=gateway_name).create_client_lun(
                             target_iqn, client_iqn, image_id)
                 TaskManager.current_task().inc_progress(task_progress_inc)
@@ -799,7 +813,14 @@ class IscsiTarget(RESTController):
                 image_ids = []
                 for disk in group['disks']:
                     image_ids.append('{}/{}'.format(disk['pool'], disk['image']))
-                if not target_config or group_id not in target_config['groups']:
+
+                if target_config and group_id in target_config['groups']:
+                    old_members = target_config['groups'][group_id]['members']
+                    old_disks = target_config['groups'][group_id]['disks'].keys()
+
+                if not target_config or group_id not in target_config['groups'] or \
+                        list(set(group['members']) - set(old_members)) or \
+                        list(set(image_ids) - set(old_disks)):
                     IscsiClient.instance(gateway_name=gateway_name).create_group(
                         target_iqn, group_id, members, image_ids)
                 TaskManager.current_task().inc_progress(task_progress_inc)
index 0d4cc5222560c54a9708a654212d11cd35dea42d..b558bed065301784b636fa94e2bb71832e8d078d 100644 (file)
@@ -1,7 +1,8 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
-from . import ApiController, RESTController
+from . import ApiController, RESTController, \
+    allow_empty_body
 from .. import mgr
 from ..security import Scope
 from ..services.ceph_service import CephService
@@ -69,6 +70,7 @@ class MgrModules(RESTController):
 
     @RESTController.Resource('POST')
     @handle_send_command_error('mgr_modules')
+    @allow_empty_body
     def enable(self, module_name):
         """
         Enable the specified Ceph Mgr module.
@@ -81,6 +83,7 @@ class MgrModules(RESTController):
 
     @RESTController.Resource('POST')
     @handle_send_command_error('mgr_modules')
+    @allow_empty_body
     def disable(self, module_name):
         """
         Disable the specified Ceph Mgr module.
index 1219f78b95c238611f72f61f1cfe60bb8bcd9934..f00a277da4f12dfabf3280c88b6564d73926fb04 100644 (file)
@@ -1,8 +1,9 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
-from functools import partial
 import logging
+import os
+from functools import partial
 
 import cherrypy
 import cephfs
@@ -12,7 +13,7 @@ from . import ApiController, RESTController, UiApiController, BaseController, \
 from ..security import Scope
 from ..services.cephfs import CephFS
 from ..services.cephx import CephX
-from ..services.exception import serialize_dashboard_exception
+from ..services.exception import DashboardException, serialize_dashboard_exception
 from ..services.ganesha import Ganesha, GaneshaConf, NFSException
 from ..services.rgw_client import RgwClient
 
@@ -233,7 +234,7 @@ class NFSGaneshaExports(RESTController):
             ganesha_conf.reload_daemons(export.daemons)
 
 
-@ApiController('/nfs-ganesha/daemon')
+@ApiController('/nfs-ganesha/daemon', Scope.NFS_GANESHA)
 @ControllerDoc(group="NFS-Ganesha")
 class NFSGaneshaService(RESTController):
 
@@ -241,71 +242,75 @@ class NFSGaneshaService(RESTController):
                  responses={200: [{
                      'daemon_id': (str, 'Daemon identifier'),
                      'cluster_id': (str, 'Cluster identifier'),
-                     'status': (int,
-                                'Status of daemon (1=RUNNING, 0=STOPPED, -1=ERROR',
-                                True),
-                     'desc': (str, 'Error description (if status==-1)', True)
+                     'cluster_type': (str, 'Cluster type'),
+                     'status': (int, 'Status of daemon', True),
+                     'desc': (str, 'Status description', True)
                  }]})
     def list(self):
-        status_dict = Ganesha.get_daemons_status()
-        if status_dict:
-            return [
-                {
-                    'daemon_id': daemon_id,
-                    'cluster_id': cluster_id,
-                    'status': status_dict[cluster_id][daemon_id]['status'],
-                    'desc': status_dict[cluster_id][daemon_id]['desc']
-                }
-                for cluster_id in status_dict
-                for daemon_id in status_dict[cluster_id]
-            ]
-
         result = []
         for cluster_id in Ganesha.get_ganesha_clusters():
-            result.extend(
-                [{'daemon_id': daemon_id, 'cluster_id': cluster_id}
-                 for daemon_id in GaneshaConf.instance(cluster_id).list_daemons()])
+            result.extend(GaneshaConf.instance(cluster_id).list_daemons())
         return result
 
 
-@UiApiController('/nfs-ganesha')
+@UiApiController('/nfs-ganesha', Scope.NFS_GANESHA)
 class NFSGaneshaUi(BaseController):
     @Endpoint('GET', '/cephx/clients')
+    @ReadPermission
     def cephx_clients(self):
         return [client for client in CephX.list_clients()]
 
     @Endpoint('GET', '/fsals')
+    @ReadPermission
     def fsals(self):
         return Ganesha.fsals_available()
 
     @Endpoint('GET', '/lsdir')
-    def lsdir(self, root_dir=None, depth=1):  # pragma: no cover
+    @ReadPermission
+    def lsdir(self, fs_name, root_dir=None, depth=1):  # pragma: no cover
         if root_dir is None:
             root_dir = "/"
-        depth = int(depth)
-        if depth > 5:
-            logger.warning("Limiting depth to maximum value of 5: "
-                           "input depth=%s", depth)
-            depth = 5
-        root_dir = '{}{}'.format(root_dir.rstrip('/'), '/')
+        if not root_dir.startswith('/'):
+            root_dir = '/{}'.format(root_dir)
+        root_dir = os.path.normpath(root_dir)
+
+        try:
+            depth = int(depth)
+            error_msg = ''
+            if depth < 0:
+                error_msg = '`depth` must be greater or equal to 0.'
+            if depth > 5:
+                logger.warning("Limiting depth to maximum value of 5: "
+                               "input depth=%s", depth)
+                depth = 5
+        except ValueError:
+            error_msg = '`depth` must be an integer.'
+        finally:
+            if error_msg:
+                raise DashboardException(code=400,
+                                         component='nfsganesha',
+                                         msg=error_msg)
+
         try:
-            cfs = CephFS()
-            root_dir = root_dir.encode()
-            paths = cfs.ls_dir(root_dir, depth)
-            # Convert (bytes => string) and prettify paths (strip slashes).
-            paths = [p.decode().rstrip('/') for p in paths if p != root_dir]
+            cfs = CephFS(fs_name)
+            paths = [root_dir]
+            paths.extend([p['path'].rstrip('/')
+                          for p in cfs.ls_dir(root_dir, depth)])
         except (cephfs.ObjectNotFound, cephfs.PermissionError):
             paths = []
         return {'paths': paths}
 
     @Endpoint('GET', '/cephfs/filesystems')
+    @ReadPermission
     def filesystems(self):
         return CephFS.list_filesystems()
 
     @Endpoint('GET', '/rgw/buckets')
+    @ReadPermission
     def buckets(self, user_id=None):
         return RgwClient.instance(user_id).get_buckets()
 
     @Endpoint('GET', '/clusters')
+    @ReadPermission
     def clusters(self):
         return Ganesha.get_ganesha_clusters()
index 2731ad0ffcd179e797749c7da6872aed68b9e24c..fa7a6fc7019a5844a66f9e66f85ca3e3ec458a39 100644 (file)
@@ -7,7 +7,7 @@ import time
 from ceph.deployment.drive_group import DriveGroupSpec, DriveGroupValidationError
 from mgr_util import get_most_recent_rate
 
-from . import ApiController, RESTController, Endpoint, Task
+from . import ApiController, RESTController, Endpoint, Task, allow_empty_body
 from . import CreatePermission, ReadPermission, UpdatePermission, DeletePermission
 from .orchestrator import raise_if_no_orchestrator
 from .. import mgr
@@ -117,6 +117,22 @@ class Osd(RESTController):
             'histogram': histogram,
         }
 
+    @RESTController.Resource('GET')
+    @handle_send_command_error('osd')
+    def histogram(self, svc_id):
+        # type: (int) -> Dict[str, Any]
+        """
+        :return: Returns the histogram data.
+        """
+        try:
+            histogram = CephService.send_command(
+                'osd', srv_spec=svc_id, prefix='perf histogram dump')
+        except SendCommandError as e:  # pragma: no cover - the handling is too obvious
+            raise DashboardException(
+                component='osd', http_status_code=400, msg=str(e))
+
+        return histogram
+
     def set(self, svc_id, device_class):  # pragma: no cover
         old_device_class = CephService.send_command('mon', 'osd crush get-device-class',
                                                     ids=[svc_id])
@@ -190,23 +206,28 @@ class Osd(RESTController):
 
     @RESTController.Resource('POST', query_params=['deep'])
     @UpdatePermission
+    @allow_empty_body
     def scrub(self, svc_id, deep=False):
         api_scrub = "osd deep-scrub" if str_to_bool(deep) else "osd scrub"
         CephService.send_command("mon", api_scrub, who=svc_id)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mark_out(self, svc_id):
         CephService.send_command('mon', 'osd out', ids=[svc_id])
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mark_in(self, svc_id):
         CephService.send_command('mon', 'osd in', ids=[svc_id])
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mark_down(self, svc_id):
         CephService.send_command('mon', 'osd down', ids=[svc_id])
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def reweight(self, svc_id, weight):
         """
         Reweights the OSD temporarily.
@@ -228,6 +249,7 @@ class Osd(RESTController):
             weight=float(weight))
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def mark_lost(self, svc_id):
         """
         Note: osd must be marked `down` before marking lost.
@@ -281,6 +303,7 @@ class Osd(RESTController):
             component='osd', http_status_code=400, msg='Unknown method: {}'.format(method))
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def purge(self, svc_id):
         """
         Note: osd must be marked `down` before removal.
@@ -289,6 +312,7 @@ class Osd(RESTController):
                                  yes_i_really_mean_it=True)
 
     @RESTController.Resource('POST')
+    @allow_empty_body
     def destroy(self, svc_id):
         """
         Mark osd as being destroyed. Keeps the ID intact (allowing reuse), but
index ec959949381fbf64bd91f8f13c9f02a6c51276df..e4c5f0d798f5badd84df9da2c78f8bf5aaf8cb9d 100644 (file)
@@ -11,7 +11,7 @@ from datetime import datetime
 import rbd
 
 from . import ApiController, RESTController, Task, UpdatePermission, \
-    DeletePermission, CreatePermission
+    DeletePermission, CreatePermission, allow_empty_body
 from .. import mgr
 from ..exceptions import DashboardException
 from ..security import Scope
@@ -173,6 +173,7 @@ class Rbd(RESTController):
               'dest_namespace': '{dest_namespace}',
               'dest_image_name': '{dest_image_name}'}, 2.0)
     @RESTController.Resource('POST')
+    @allow_empty_body
     def copy(self, image_spec, dest_pool_name, dest_namespace, dest_image_name,
              snapshot_name=None, obj_size=None, features=None,
              stripe_unit=None, stripe_count=None, data_pool=None, configuration=None):
@@ -203,6 +204,7 @@ class Rbd(RESTController):
     @RbdTask('flatten', ['{image_spec}'], 2.0)
     @RESTController.Resource('POST')
     @UpdatePermission
+    @allow_empty_body
     def flatten(self, image_spec):
 
         def _flatten(ioctx, image):
@@ -218,6 +220,7 @@ class Rbd(RESTController):
 
     @RbdTask('trash/move', ['{image_spec}'], 2.0)
     @RESTController.Resource('POST')
+    @allow_empty_body
     def move_trash(self, image_spec, delay=0):
         """Move an image to the trash.
         Images, even ones actively in-use by clones,
@@ -271,6 +274,7 @@ class RbdSnapshot(RESTController):
              ['{image_spec}', '{snapshot_name}'], 5.0)
     @RESTController.Resource('POST')
     @UpdatePermission
+    @allow_empty_body
     def rollback(self, image_spec, snapshot_name):
         def _rollback(ioctx, img, snapshot_name):
             img.rollback_to_snap(snapshot_name)
@@ -284,6 +288,7 @@ class RbdSnapshot(RESTController):
               'child_namespace': '{child_namespace}',
               'child_image_name': '{child_image_name}'}, 2.0)
     @RESTController.Resource('POST')
+    @allow_empty_body
     def clone(self, image_spec, snapshot_name, child_pool_name,
               child_image_name, child_namespace=None, obj_size=None, features=None,
               stripe_unit=None, stripe_count=None, data_pool=None, configuration=None):
@@ -364,6 +369,7 @@ class RbdTrash(RESTController):
     @RbdTask('trash/purge', ['{pool_name}'], 2.0)
     @RESTController.Collection('POST', query_params=['pool_name'])
     @DeletePermission
+    @allow_empty_body
     def purge(self, pool_name=None):
         """Remove all expired images from trash."""
         now = "{}Z".format(datetime.utcnow().isoformat())
@@ -380,6 +386,7 @@ class RbdTrash(RESTController):
     @RbdTask('trash/restore', ['{image_id_spec}', '{new_image_name}'], 2.0)
     @RESTController.Resource('POST')
     @CreatePermission
+    @allow_empty_body
     def restore(self, image_id_spec, new_image_name):
         """Restore an image from trash."""
         pool_name, namespace, image_id = parse_image_spec(image_id_spec)
index 027289030854d8a1cc8cd43214f1bd682ad02d8a..d6f8ab61ad7aaaca2c041860f9b5cb1e94bd49af 100644 (file)
@@ -12,7 +12,7 @@ import cherrypy
 import rbd
 
 from . import ApiController, Endpoint, Task, BaseController, ReadPermission, \
-    UpdatePermission, RESTController
+    UpdatePermission, RESTController, allow_empty_body
 
 from .. import mgr
 from ..security import Scope
@@ -413,6 +413,7 @@ class RbdMirroringPoolBootstrap(BaseController):
     @Endpoint(method='POST', path='token')
     @handle_rbd_mirror_error()
     @UpdatePermission
+    @allow_empty_body
     def create_token(self, pool_name):
         ioctx = mgr.rados.open_ioctx(pool_name)
         token = rbd.RBD().mirror_peer_bootstrap_create(ioctx)
@@ -421,6 +422,7 @@ class RbdMirroringPoolBootstrap(BaseController):
     @Endpoint(method='POST', path='peer')
     @handle_rbd_mirror_error()
     @UpdatePermission
+    @allow_empty_body
     def import_token(self, pool_name, direction, token):
         ioctx = mgr.rados.open_ioctx(pool_name)
 
index a0dc444dcabff7d497f294c3ed1b9972352a8a8c..31271514850328aa172cfad0f8c16356508ada02 100644 (file)
@@ -6,7 +6,7 @@ import json
 
 import cherrypy
 from . import ApiController, BaseController, RESTController, Endpoint, \
-    ReadPermission
+    ReadPermission, allow_empty_body
 from ..exceptions import DashboardException
 from ..rest_client import RequestException
 from ..security import Scope, Permission
@@ -16,7 +16,7 @@ from ..services.rgw_client import RgwClient
 from ..tools import json_str_to_object, str_to_bool
 
 try:
-    from typing import List
+    from typing import Any, List
 except ImportError:  # pragma: no cover
     pass  # Just for type checking
 
@@ -192,9 +192,15 @@ class RgwBucket(RgwRESTController):
             bucket_name = '{}:{}'.format(tenant, bucket_name)
         return bucket_name
 
-    def list(self):
-        # type: () -> List[str]
-        return self.proxy('GET', 'bucket')
+    def list(self, stats=False):
+        # type: (bool) -> List[Any]
+        query_params = '?stats' if stats else ''
+        result = self.proxy('GET', 'bucket{}'.format(query_params))
+
+        if stats:
+            result = [self._append_bid(bucket) for bucket in result]
+
+        return result
 
     def get(self, bucket):
         # type: (str) -> dict
@@ -213,6 +219,7 @@ class RgwBucket(RgwRESTController):
 
         return self._append_bid(result)
 
+    @allow_empty_body
     def create(self, bucket, uid, zonegroup=None, placement_target=None,
                lock_enabled='false', lock_mode=None,
                lock_retention_period_days=None,
@@ -231,6 +238,7 @@ class RgwBucket(RgwRESTController):
         except RequestException as e:  # pragma: no cover - handling is too obvious
             raise DashboardException(e, http_status_code=500, component='rgw')
 
+    @allow_empty_body
     def set(self, bucket, bucket_id, uid, versioning_state=None,
             mfa_delete=None, mfa_token_serial=None, mfa_token_pin=None,
             lock_mode=None, lock_retention_period_days=None,
@@ -334,6 +342,7 @@ class RgwUser(RgwRESTController):
                 emails.append(user["email"])
         return emails
 
+    @allow_empty_body
     def create(self, uid, display_name, email=None, max_buckets=None,
                suspended=None, generate_key=None, access_key=None,
                secret_key=None):
@@ -355,6 +364,7 @@ class RgwUser(RgwRESTController):
         result = self.proxy('PUT', 'user', params)
         return self._append_uid(result)
 
+    @allow_empty_body
     def set(self, uid, display_name=None, email=None, max_buckets=None,
             suspended=None):
         params = {'uid': uid}
@@ -384,6 +394,7 @@ class RgwUser(RgwRESTController):
 
     # pylint: disable=redefined-builtin
     @RESTController.Resource(method='POST', path='/capability', status=201)
+    @allow_empty_body
     def create_cap(self, uid, type, perm):
         return self.proxy('PUT', 'user?caps', {
             'uid': uid,
@@ -399,6 +410,7 @@ class RgwUser(RgwRESTController):
         })
 
     @RESTController.Resource(method='POST', path='/key', status=201)
+    @allow_empty_body
     def create_key(self, uid, key_type='s3', subuser=None, generate_key='true',
                    access_key=None, secret_key=None):
         params = {'uid': uid, 'key-type': key_type, 'generate-key': generate_key}
@@ -424,6 +436,7 @@ class RgwUser(RgwRESTController):
         return self.proxy('GET', 'user?quota', {'uid': uid})
 
     @RESTController.Resource(method='PUT', path='/quota')
+    @allow_empty_body
     def set_quota(self, uid, quota_type, enabled, max_size_kb, max_objects):
         return self.proxy('PUT', 'user?quota', {
             'uid': uid,
@@ -434,6 +447,7 @@ class RgwUser(RgwRESTController):
         }, json_response=False)
 
     @RESTController.Resource(method='POST', path='/subuser', status=201)
+    @allow_empty_body
     def create_subuser(self, uid, subuser, access, key_type='s3',
                        generate_secret='true', access_key=None,
                        secret_key=None):
index 9f1e70bb94dd8688a00d9cc9eccf27b9b28fade7..509a2147a685a841b65829e00b6ddb0397bc9d95 100644 (file)
@@ -13,7 +13,7 @@ class Service(RESTController):
     @raise_if_no_orchestrator
     def list(self, service_name: Optional[str] = None) -> List[dict]:
         orch = OrchClient.instance()
-        return [service.to_json() for service in orch.services.list(service_name)]
+        return [service.to_json() for service in orch.services.list(service_name=service_name)]
 
     @raise_if_no_orchestrator
     def get(self, service_name: str) -> List[dict]:
@@ -27,5 +27,5 @@ class Service(RESTController):
     @raise_if_no_orchestrator
     def daemons(self, service_name: str) -> List[dict]:
         orch = OrchClient.instance()
-        daemons = orch.services.list_daemons(service_name)
+        daemons = orch.services.list_daemons(service_name=service_name)
         return [d.to_json() for d in daemons]
index d32ee4cc8339ae4ce3aa37568e060623ad3a1d79..35c3a05a351e83ded39cd99cfc59a3372d67db10 100644 (file)
@@ -7,7 +7,7 @@ import time
 
 import cherrypy
 
-from . import BaseController, ApiController, RESTController, Endpoint
+from . import BaseController, ApiController, RESTController, Endpoint, allow_empty_body
 from .. import mgr
 from ..exceptions import DashboardException, UserAlreadyExists, \
     UserDoesNotExist, PasswordPolicyException, PwdExpirationDateNotValid
@@ -146,6 +146,7 @@ class User(RESTController):
 class UserPasswordPolicy(RESTController):
 
     @Endpoint('POST')
+    @allow_empty_body
     def validate_password(self, password, username=None, old_password=None):
         """
         Check if the password meets the password policy.
index e829df00e79d80504188807bf93d0b9fe2d5f32d..67d27011102ff2d2989f597262d9ef4bf94ffec7 100644 (file)
@@ -10,7 +10,7 @@ describe('Manager modules page', () => {
 
   describe('breadcrumb test', () => {
     it('should open and show breadcrumb', () => {
-      mgrmodules.expectBreadcrumbText('Manager modules');
+      mgrmodules.expectBreadcrumbText('Manager Modules');
     });
   });
 
index f149a4b0ab34c0b8ae26b4d6ba5b23f5c84bc9d8..397745f9745d060253df88edad364d43c4021d45 100644 (file)
@@ -45,23 +45,22 @@ describe('Dashboard Main Page', () => {
       // order, checks for card title and position via indexing into a list of all info cards.
       const order = [
         'Cluster Status',
+        'Hosts',
         'Monitors',
         'OSDs',
-        'Manager Daemons',
-        'Hosts',
+        'Managers',
         'Object Gateways',
         'Metadata Servers',
         'iSCSI Gateways',
-        'Client IOPS',
-        'Client Throughput',
-        'Client Read/Write',
-        'Recovery Throughput',
-        'Scrub',
-        'Pools',
         'Raw Capacity',
         'Objects',
+        'PG Status',
+        'Pools',
         'PGs per OSD',
-        'PG Status'
+        'Client Read/Write',
+        'Client Throughput',
+        'Recovery Throughput',
+        'Scrubbing'
       ];
 
       for (let i = 0; i < order.length; i++) {
@@ -72,8 +71,8 @@ describe('Dashboard Main Page', () => {
     it('should verify that info card group titles are present and in the right order', () => {
       cy.location('hash').should('eq', '#/dashboard');
       dashboard.infoGroupTitle(0).should('eq', 'Status');
-      dashboard.infoGroupTitle(1).should('eq', 'Performance');
-      dashboard.infoGroupTitle(2).should('eq', 'Capacity');
+      dashboard.infoGroupTitle(1).should('eq', 'Capacity');
+      dashboard.infoGroupTitle(2).should('eq', 'Performance');
     });
   });
 
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.4a38b529302ffa3f0c24.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.4a38b529302ffa3f0c24.js
deleted file mode 100644 (file)
index 82a4b9b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+26A":function(l,n,e){"use strict";e.d(n,"a",(function(){return d}));var t=e("s7LF"),i=e("LvDl"),u=e("GyhO"),s=e("cp0P"),a=e("NJ9Y"),o=(e("XED3"),e("QFaf")),r=e("kvvV");e("kn/O");class d{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.pools=[],this.directions=[{key:"rx-tx",desc:"Bidirectional"},{key:"rx",desc:"Unidirectional (receive-only)"}],this.createForm()}createForm(){this.importBootstrapForm=new o.a({siteName:new t.i("",{validators:[t.B.required]}),direction:new t.i("rx-tx",{}),pools:new t.k({},{validators:[this.validatePools()]}),token:new t.i("",{validators:[t.B.required,this.validateToken()]})})}ngOnInit(){this.rbdMirroringService.getSiteName().subscribe(l=>{this.importBootstrapForm.get("siteName").setValue(l.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.pools=l.content_data.pools.reduce((l,n)=>(l.push({name:n.name,mirror_mode:n.mirror_mode}),l),[]);const n=this.importBootstrapForm.get("pools");i.each(this.pools,l=>{const e=l.name,i="disabled"===l.mirror_mode,u=n.controls[e];u?i&&u.disabled?u.enable():!i&&u.enabled&&(u.disable(),u.setValue(!0)):n.addControl(e,new t.i({value:!i,disabled:!i}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return l=>{let n=0;return i.each(l.controls,l=>{!0===l.value&&++n}),n>0?null:{requirePool:!0}}}validateToken(){return l=>{try{if(JSON.parse(atob(l.value)))return null}catch(n){}return{invalidToken:!0}}}import(){const l=[],n=[],e=this.importBootstrapForm.get("pools");i.each(e.controls,(e,t)=>{!0===e.value&&(l.push(t),e.disabled||n.push(t))});const t={mirror_mode:"image"};let o=Object(u.a)(this.rbdMirroringService.setSiteName(this.importBootstrapForm.getValue("siteName")),Object(s.a)(n.map(l=>this.rbdMirroringService.updatePool(l,t))));o=l.reduce((l,n)=>Object(u.a)(l,this.rbdMirroringService.importBootstrapToken(n,this.importBootstrapForm.getValue("direction"),this.importBootstrapForm.getValue("token"))),o).pipe(Object(a.a)());const d=()=>{this.rbdMirroringService.refresh(),this.importBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new r.a("rbd/mirroring/bootstrap/import",{}),call:o}).subscribe(void 0,d,()=>{d(),this.modalRef.hide()})}}},"0BYw":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("+gVj"),s=e("SVse"),a=e("EEJc"),o=e("ajRT"),r=e("mXUL"),d=e("IZUe"),c=e("gp3X"),m=e("sb0X"),p=e("KVJa"),h=e("Z21x"),g=e("sne2"),f=e("daK0"),v=e("LqlI"),b=e("aexS"),C=e("9nlD"),S=e("Ekvf"),_=e("F83c"),R=e("GiVz");e.d(n,"a",(function(){return q}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","pool"],["id","pool"],["name","pool"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"pool"),l(n,6,0,"pool")}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass)}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["-- No rbd pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["-- Select a pool --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","pool"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](8,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](10,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](12,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,N)),t["ɵdid"](14,278528,null,0,s.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"pool"),l(n,6,0,"pool"),l(n,8,0,null===e.pools),l(n,10,0,null!==e.pools&&0===e.pools.length),l(n,12,0,null!==e.pools&&e.pools.length>0),l(n,14,0,e.pools)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass)}))}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Namespace already exists."]))],null,null)}function P(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,50,"cd-modal",[],null,null,null,a.c,a.b)),t["ɵdid"](1,49152,null,0,o.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Create Namespace"])),(l()(),t["ɵeld"](4,0,null,1,46,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,45,"form",[["name","namespaceForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,32,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](13,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","pool"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"])),(l()(),t["ɵeld"](18,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](20,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,F)),t["ɵdid"](22,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,T)),t["ɵdid"](24,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](25,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](26,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","namespace"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](31,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](32,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","namespace"],["id","namespace"],["name","namespace"],["placeholder","Namespace name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,33)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,33).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,33)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,33)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](33,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](35,671744,[[3,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](37,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](38,4210688,null,0,d.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](39,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,V)),t["ɵdid"](41,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,D)),t["ɵdid"](43,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](44,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](45,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](46,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submit()&&t),t}),c.b,c.a)),t["ɵdid"](47,114688,null,0,m.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Create Namespace"])),(l()(),t["ɵeld"](49,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,p.b,p.a)),t["ɵdid"](50,49152,null,0,h.a,[s.Location,g.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.namespaceForm),l(n,10,0,e.namespaceForm),l(n,13,0),l(n,20,0,!e.poolPermission.read),l(n,22,0,e.poolPermission.read),l(n,24,0,e.namespaceForm.showError("pool",t["ɵnov"](n,7),"required")),l(n,26,0),l(n,35,0,"namespace"),l(n,38,0,""),l(n,39,0,"namespace"),l(n,41,0,e.namespaceForm.showError("namespace",t["ɵnov"](n,7),"required")),l(n,43,0,e.namespaceForm.showError("namespace",t["ɵnov"](n,7),"namespaceExists")),l(n,47,0,e.namespaceForm),l(n,50,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,12,0,t["ɵnov"](n,13).hasErrors,t["ɵnov"](n,13).hasSuccess),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess),l(n,32,0,t["ɵnov"](n,37).ngClassUntouched,t["ɵnov"](n,37).ngClassTouched,t["ɵnov"](n,37).ngClassPristine,t["ɵnov"](n,37).ngClassDirty,t["ɵnov"](n,37).ngClassValid,t["ɵnov"](n,37).ngClassInvalid,t["ɵnov"](n,37).ngClassPending,t["ɵnov"](n,39).validClass,t["ɵnov"](n,39).invalidClass)}))}function x(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-namespace-form-modal",[],null,null,null,P,y)),t["ɵdid"](1,114688,null,0,f.a,[v.a,b.a,C.a,S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var q=t["ɵccf"]("cd-rbd-namespace-form-modal",f.a,x,{},{},[])},"0rTx":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("mXUL"),r=e("IZUe"),d=e("SVse"),c=e("gp3X"),m=e("sb0X"),p=e("KVJa"),h=e("Z21x"),g=e("sne2"),f=e("2GqK"),v=e("F83c"),b=e("LqlI"),C=e("2EZI"),S=e("kn/O");e.d(n,"a",(function(){return k}));var _=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,47,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Restore Image"])),(l()(),t["ɵeld"](4,0,null,1,43,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,42,"form",[["class","form"],["name","restoreForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,29,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To restore"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](17,null,["","@",""])),(l()(),t["ɵted"](-1,null,[",  "])),(l()(),t["ɵeld"](19,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["type the image's new name and click"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](22,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Restore Image"])),(l()(),t["ɵted"](-1,null,[". "])),(l()(),t["ɵeld"](25,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](26,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["New Name"])),(l()(),t["ɵeld"](31,0,null,0,7,"input",[["autocomplete","off"],["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,32)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,32).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,32)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,32)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](32,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](34,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](36,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](37,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](38,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,R)),t["ɵdid"](40,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](41,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](42,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](43,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.restore()&&t),t}),c.b,c.a)),t["ɵdid"](44,114688,null,0,m.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Restore Image"])),(l()(),t["ɵeld"](46,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,p.b,p.a)),t["ɵdid"](47,49152,null,0,h.a,[d.Location,g.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.restoreForm),l(n,10,0,e.restoreForm),l(n,26,0),l(n,34,0,"name"),l(n,37,0,""),l(n,38,0,"name"),l(n,40,0,e.restoreForm.showError("name",t["ɵnov"](n,7),"required")),l(n,44,0,e.restoreForm),l(n,47,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,17,0,e.imageSpec,e.imageId),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess),l(n,31,0,t["ɵnov"](n,36).ngClassUntouched,t["ɵnov"](n,36).ngClassTouched,t["ɵnov"](n,36).ngClassPristine,t["ɵnov"](n,36).ngClassDirty,t["ɵnov"](n,36).ngClassValid,t["ɵnov"](n,36).ngClassInvalid,t["ɵnov"](n,36).ngClassPending,t["ɵnov"](n,38).validClass,t["ɵnov"](n,38).invalidClass)}))}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-restore-modal",[],null,null,null,y,_)),t["ɵdid"](1,114688,null,0,f.a,[v.a,b.a,C.a,S.a],null,null)],(function(l,n){l(n,1,0)}),null)}var k=t["ɵccf"]("cd-rbd-trash-restore-modal",f.a,w,{},{},[])},"2GqK":function(l,n,e){"use strict";e.d(n,"a",(function(){return u})),e("F83c"),e("2EZI");var t=e("kvvV"),i=e("jVDg");e("kn/O");class u{constructor(l,n,e,t){this.rbdService=l,this.modalRef=n,this.fb=e,this.taskWrapper=t}ngOnInit(){this.imageSpec=new i.a(this.poolName,this.namespace,this.imageName).toString(),this.restoreForm=this.fb.group({name:this.imageName})}restore(){const l=this.restoreForm.getValue("name"),n=new i.a(this.poolName,this.namespace,this.imageId);this.taskWrapper.wrapTaskAroundCall({task:new t.a("rbd/trash/restore",{image_id_spec:n.toString(),new_image_name:l}),call:this.rbdService.restoreTrash(n,l)}).subscribe(void 0,()=>{this.restoreForm.setErrors({cdSubmitButton:!0})},()=>{this.modalRef.hide()})}}},"2JDI":function(l,n,e){"use strict";e.d(n,"a",(function(){return a}));var t=e("wd/R"),i=(e("F83c"),e("2EZI"),e("1Ni5")),u=e("kvvV"),s=e("jVDg");e("kn/O");class a{constructor(l,n,e,t){this.rbdService=l,this.modalRef=n,this.fb=e,this.taskWrapper=t,this.minDate=new Date,this.bsConfig={dateInputFormat:"YYYY-MM-DD HH:mm:ss",containerClass:"theme-default"},this.createForm()}createForm(){this.moveForm=this.fb.group({expiresAt:["",[i.a.custom("format",l=>!(""===l||t(l,"YYYY-MM-DD HH:mm:ss").isValid())),i.a.custom("expired",l=>t().isAfter(l))]]})}ngOnInit(){this.imageSpec=new s.a(this.poolName,this.namespace,this.imageName),this.imageSpecStr=this.imageSpec.toString(),this.pattern=`${this.poolName}/${this.imageName}`}moveImage(){let l=0;const n=this.moveForm.getValue("expiresAt");n&&(l=t(n).diff(t(),"seconds",!0)),l<0&&(l=0),this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/trash/move",{image_spec:this.imageSpecStr}),call:this.rbdService.moveTrash(this.imageSpec,l)}).subscribe(void 0,void 0,()=>{this.modalRef.hide()})}}},"3IYD":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("8xTl"),s=e("EEJc"),a=e("ajRT"),o=e("s7LF"),r=e("+gVj"),d=e("mXUL"),c=e("IZUe"),m=e("gp3X"),p=e("sb0X"),h=e("KVJa"),g=e("Z21x"),f=e("sne2"),v=e("Fd71"),b=e("LqlI"),C=e("F83c"),S=e("VXsX"),_=e("9nlD"),R=e("GiVz");e.d(n,"a",(function(){return E}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function k(l){return t["ɵvid"](0,[t["ɵpid"](0,i.TitleCasePipe,[]),t["ɵpid"](0,u.a,[]),(l()(),t["ɵeld"](2,0,null,null,39,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](3,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),t["ɵted"](5,null,[""," ",""])),t["ɵppd"](6,1),t["ɵppd"](7,1),(l()(),t["ɵeld"](8,0,null,1,33,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](9,0,null,null,32,"form",[["name","snapshotForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),t["ɵdid"](10,16384,null,0,o.G,[],null,null),t["ɵdid"](11,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,o.d,null,[o.l]),t["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),t["ɵdid"](14,16384,null,0,r.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](15,0,null,null,17,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](16,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](17,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","snapshotName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](22,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","snapshotName"],["id","snapshotName"],["name","snapshotName"],["placeholder","Snapshot name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,24)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,24).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,24)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,24)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](24,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](26,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](28,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](29,4210688,null,0,c.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](30,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](32,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](33,0,null,null,8,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](34,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](35,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submit()&&t),t}),m.b,m.a)),t["ɵdid"](36,114688,null,0,p.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](37,0,[""," ",""])),t["ɵppd"](38,1),t["ɵppd"](39,1),(l()(),t["ɵeld"](40,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,h.b,h.a)),t["ɵdid"](41,49152,null,0,g.a,[i.Location,f.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.modalRef),l(n,11,0,e.snapshotForm),l(n,14,0,e.snapshotForm),l(n,17,0),l(n,26,0,"snapshotName"),l(n,29,0,""),l(n,30,0,"snapshotName"),l(n,32,0,e.snapshotForm.showError("snapshotName",t["ɵnov"](n,11),"required")),l(n,36,0,e.snapshotForm),l(n,41,0,"Close",e.modalRef.hide)}),(function(l,n){var e=n.component,i=t["ɵunv"](n,5,0,l(n,6,0,t["ɵnov"](n,0),e.action)),u=t["ɵunv"](n,5,1,l(n,7,0,t["ɵnov"](n,1),e.resource));l(n,5,0,i,u),l(n,9,0,t["ɵnov"](n,13).ngClassUntouched,t["ɵnov"](n,13).ngClassTouched,t["ɵnov"](n,13).ngClassPristine,t["ɵnov"](n,13).ngClassDirty,t["ɵnov"](n,13).ngClassValid,t["ɵnov"](n,13).ngClassInvalid,t["ɵnov"](n,13).ngClassPending),l(n,16,0,t["ɵnov"](n,17).hasErrors,t["ɵnov"](n,17).hasSuccess),l(n,23,0,t["ɵnov"](n,28).ngClassUntouched,t["ɵnov"](n,28).ngClassTouched,t["ɵnov"](n,28).ngClassPristine,t["ɵnov"](n,28).ngClassDirty,t["ɵnov"](n,28).ngClassValid,t["ɵnov"](n,28).ngClassInvalid,t["ɵnov"](n,28).ngClassPending,t["ɵnov"](n,30).validClass,t["ɵnov"](n,30).invalidClass);var s=t["ɵunv"](n,37,0,l(n,38,0,t["ɵnov"](n,0),e.action)),a=t["ɵunv"](n,37,1,l(n,39,0,t["ɵnov"](n,1),e.resource));l(n,37,0,s,a)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-snapshot-form-modal",[],null,null,null,k,y)),t["ɵdid"](1,114688,null,0,v.a,[b.a,C.a,S.a,_.a,R.a,f.b],null,null)],(function(l,n){l(n,1,0)}),null)}var E=t["ɵccf"]("cd-rbd-snapshot-form-modal",v.a,I,{},{},[])},"3ris":function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("yYhs"),i=e("LvDl"),u=(e("uIqm"),e("oxzT"));e("iExv"),e("uYzU");class s{constructor(l,n,e){this.i18n=l,this.iscsiBackstorePipe=n,this.booleanTextPipe=e,this.icons=u.a,this.metadata={},this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}}}set content(l){this.detailTable=l,l&&l.updateColumns()}ngOnInit(){this.columns=[{prop:"displayName",name:this.i18n("Name"),flexGrow:1,cellTemplate:this.highlightTpl},{prop:"current",name:this.i18n("Current"),flexGrow:1,cellTemplate:this.highlightTpl},{prop:"default",name:this.i18n("Default"),flexGrow:1,cellTemplate:this.highlightTpl}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.generateTree()),this.data=void 0}generateTree(){const l=i.cloneDeep(this.selectedItem.target_controls);this.cephIscsiConfigVersion>10&&i.extend(l,i.cloneDeep(this.selectedItem.auth)),this.metadata={root:l};const n={target:{expanded:i.join(this.selectedItem.cdExecuting?[u.a.large,u.a.spinner,u.a.spin]:[u.a.large,u.a.bullseye]," ")},initiators:{expanded:i.join([u.a.large,u.a.user]," "),leaf:i.join([u.a.user]," ")},groups:{expanded:i.join([u.a.large,u.a.users]," "),leaf:i.join([u.a.users]," ")},disks:{expanded:i.join([u.a.large,u.a.disk]," "),leaf:i.join([u.a.disk]," ")},portals:{expanded:i.join([u.a.large,u.a.server]," "),leaf:i.join([u.a.server]," ")}},e=[];i.forEach(this.selectedItem.disks,l=>{const t="disk_"+l.pool+"_"+l.image;this.metadata[t]={controls:l.controls,backstore:l.backstore},["wwn","lun"].forEach(n=>{n in l&&(this.metadata[t][n]=l[n])}),e.push({name:`${l.pool}/${l.image}`,cdId:t,cdIcon:n.disks.leaf})});const t=[];i.forEach(this.selectedItem.portals,l=>{t.push({name:`${l.host}:${l.ip}`,cdIcon:n.portals.leaf})});const s=[];i.forEach(this.selectedItem.clients,l=>{const e=i.cloneDeep(l.auth);l.info&&(i.extend(e,l.info),delete e.state,i.forEach(Object.keys(l.info.state),n=>{e[n.toLowerCase()]=l.info.state[n]})),this.metadata["client_"+l.client_iqn]=e;const t=[];l.luns.forEach(l=>{t.push({name:`${l.pool}/${l.image}`,cdId:"disk_"+l.pool+"_"+l.image,cdIcon:n.disks.leaf})});let u="";l.info&&(u=Object.keys(l.info.state).includes("LOGGED_IN")?"logged_in":"logged_out"),s.push({name:l.client_iqn,status:u,cdId:"client_"+l.client_iqn,children:t,cdIcon:n.initiators.leaf})});const a=[];i.forEach(this.selectedItem.groups,l=>{const e=[];l.disks.forEach(l=>{e.push({name:`${l.pool}/${l.image}`,cdId:"disk_"+l.pool+"_"+l.image,cdIcon:n.disks.leaf})});const t=[];l.members.forEach(l=>{t.push({name:l,cdId:"client_"+l})}),a.push({name:l.group_id,cdIcon:n.groups.leaf,children:[{name:"Disks",children:e,cdIcon:n.disks.expanded},{name:"Initiators",children:t,cdIcon:n.initiators.expanded}]})}),this.nodes=[{name:this.selectedItem.target_iqn,cdId:"root",isExpanded:!0,cdIcon:n.target.expanded,children:[{name:"Disks",isExpanded:!0,children:e,cdIcon:n.disks.expanded},{name:"Portals",isExpanded:!0,children:t,cdIcon:n.portals.expanded},{name:"Initiators",isExpanded:!0,children:s,cdIcon:n.initiators.expanded},{name:"Groups",isExpanded:!0,children:a,cdIcon:n.groups.expanded}]}]}format(l){return"boolean"==typeof l?this.booleanTextPipe.transform(l):l}onNodeSelected(l,n){if(t.a.ACTIVATE(l,n,!0),n.data.cdId){this.title=n.data.name;const l=this.metadata[n.data.cdId]||{};"root"===n.data.cdId?(this.columns[2].isHidden=!1,this.data=i.map(this.settings.target_default_controls,(n,e)=>({displayName:e,default:n=this.format(n),current:i.isUndefined(l[e])?n:this.format(l[e])})),this.cephIscsiConfigVersion>10&&["user","password","mutual_user","mutual_password"].forEach(n=>{this.data.push({displayName:n,default:null,current:l[n]})})):n.data.cdId.toString().startsWith("disk_")?(this.columns[2].isHidden=!1,this.data=i.map(this.settings.disk_default_controls[l.backstore],(n,e)=>({displayName:e,default:n=this.format(n),current:i.isUndefined(l.controls[e])?n:this.format(l.controls[e])})),this.data.push({displayName:"backstore",default:this.iscsiBackstorePipe.transform(this.settings.default_backstore),current:this.iscsiBackstorePipe.transform(l.backstore)}),["wwn","lun"].forEach(n=>{n in l&&this.data.push({displayName:n,default:void 0,current:l[n]})})):(this.columns[2].isHidden=!0,this.data=i.map(l,(l,n)=>({displayName:n,default:void 0,current:this.format(l)})))}else this.data=void 0;this.detailTable&&this.detailTable.updateColumns()}onUpdateData(){this.tree.treeModel.expandAll()}}},"5GyT":function(l,n,e){"use strict";e.d(n,"a",(function(){return v})),e.d(n,"b",(function(){return f}));var t=e("LvDl"),i=(e("F83c"),e("+fVR")),u=e("OLbh"),s=e("0+/T"),a=(e("sne2"),e("uIqm"),e("x38r")),o=e("oxzT"),r=e("yJti"),d=e("vCyI"),c=e("kvvV"),m=e("jVDg"),p=(e("Fgil"),e("o4+5"),e("aexS"),e("VTlA"),e("kn/O"),e("EgGo")),h=e("2JDI"),g=e("u0yg");const f=new p.a("block/rbd");class v extends i.a{constructor(l,n,e,t,i,u,s,a,r,c){super(),this.authStorageService=l,this.rbdService=n,this.dimlessBinaryPipe=e,this.dimlessPipe=t,this.modalService=i,this.taskWrapper=u,this.taskListService=s,this.i18n=a,this.urlBuilder=r,this.actionLabels=c,this.selection=new d.a,this.builders={"rbd/create":l=>this.createRbdFromTask(l.pool_name,l.namespace,l.image_name),"rbd/delete":l=>this.createRbdFromTaskImageSpec(l.image_spec),"rbd/clone":l=>this.createRbdFromTask(l.child_pool_name,l.child_namespace,l.child_image_name),"rbd/copy":l=>this.createRbdFromTask(l.dest_pool_name,l.dest_namespace,l.dest_image_name)},this.permission=this.authStorageService.getPermissions().rbdImage;const p=()=>this.selection.first()&&new m.a(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name).toStringEncoded();this.tableActions=[{permission:"create",icon:o.a.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:l=>!l.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:o.a.edit,routerLink:()=>this.urlBuilder.getEdit(p()),name:this.actionLabels.EDIT},{permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>!l.hasSingleSelection||l.first().cdExecuting,icon:o.a.copy,routerLink:()=>`/block/rbd/copy/${p()}`,name:this.actionLabels.COPY},{permission:"update",disable:l=>!l.hasSingleSelection||l.first().cdExecuting||!l.first().parent,icon:o.a.flatten,click:()=>this.flattenRbdModal(),name:this.actionLabels.FLATTEN},{permission:"delete",icon:o.a.destroy,click:()=>this.deleteRbdModal(),name:this.actionLabels.DELETE,disable:l=>!this.selection.first()||!this.selection.hasSingleSelection||this.hasClonedSnapshots(l.first()),disableDesc:()=>this.getDeleteDisableDesc()},{permission:"delete",icon:o.a.trash,click:()=>this.trashRbdModal(),name:this.actionLabels.TRASH,disable:l=>!l.first()||!l.hasSingleSelection||l.first().image_format===g.a.V1}]}createRbdFromTaskImageSpec(l){const n=m.a.fromString(l);return this.createRbdFromTask(n.poolName,n.namespace,n.imageName)}createRbdFromTask(l,n,e){const t=new g.b;return t.id="-1",t.unique_id="-1",t.name=e,t.namespace=n,t.pool_name=l,t.image_format=g.a.V2,t}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:2,cellTransformation:a.a.executing},{name:this.i18n("Pool"),prop:"pool_name",flexGrow:2},{name:this.i18n("Namespace"),prop:"namespace",flexGrow:2},{name:this.i18n("Size"),prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Objects"),prop:"num_objs",flexGrow:1,cellClass:"text-right",pipe:this.dimlessPipe},{name:this.i18n("Object size"),prop:"obj_size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Provisioned"),prop:"disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe},{name:this.i18n("Total provisioned"),prop:"total_disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe},{name:this.i18n("Parent"),prop:"parent",flexGrow:2,cellTemplate:this.parentTpl}],this.taskListService.init(()=>this.rbdService.list(),l=>this.prepareResponse(l),l=>this.images=l,()=>this.onFetchError(),l=>["rbd/clone","rbd/copy","rbd/create","rbd/delete","rbd/edit","rbd/flatten","rbd/trash/move"].includes(l.name),(l,n)=>{let e;switch(n.name){case"rbd/copy":e=new m.a(n.metadata.dest_pool_name,n.metadata.dest_namespace,n.metadata.dest_image_name).toString();break;case"rbd/clone":e=new m.a(n.metadata.child_pool_name,n.metadata.child_namespace,n.metadata.child_image_name).toString();break;case"rbd/create":e=new m.a(n.metadata.pool_name,n.metadata.namespace,n.metadata.image_name).toString();break;default:e=n.metadata.image_spec}return e===new m.a(l.pool_name,l.namespace,l.name).toString()},this.builders)}onFetchError(){this.table.reset(),this.viewCacheStatusList=[{status:r.a.ValueException}]}prepareResponse(l){let n=[];const e={};l.forEach(l=>{t.isUndefined(e[l.status])&&(e[l.status]=[]),e[l.status].push(l.pool_name),n=n.concat(l.value)});const i=[];return t.forEach(e,(l,n)=>{i.push({status:parseInt(n,10),statusFor:(l.length>1?"pools ":"pool ")+"<strong>"+l.join("</strong>, <strong>")+"</strong>"})}),this.viewCacheStatusList=i,n}updateSelection(l){this.selection=l}deleteRbdModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().name,t=new m.a(l,n,e);this.modalRef=this.modalService.show(s.a,{initialState:{itemDescription:"RBD",itemNames:[t],bodyTemplate:this.deleteTpl,bodyContext:{hasSnapshots:this.hasSnapshots(),snapshots:this.listProtectedSnapshots()},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new c.a("rbd/delete",{image_spec:t.toString()}),call:this.rbdService.delete(t)})}})}trashRbdModal(){const l={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,hasSnapshots:this.hasSnapshots()};this.modalRef=this.modalService.show(h.a,{initialState:l})}flattenRbd(l){this.taskWrapper.wrapTaskAroundCall({task:new c.a("rbd/flatten",{image_spec:l.toString()}),call:this.rbdService.flatten(l)}).subscribe(void 0,void 0,()=>{this.modalRef.hide()})}flattenRbdModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().name,t=this.selection.first().parent,i=new m.a(t.pool_name,t.pool_namespace,t.image_name),s=new m.a(l,n,e),a={titleText:"RBD flatten",buttonText:"Flatten",bodyTpl:this.flattenTpl,bodyData:{parent:`${i}@${t.snap_name}`,child:s.toString()},onSubmit:()=>{this.flattenRbd(s)}};this.modalRef=this.modalService.show(u.a,{initialState:a})}hasSnapshots(){return(this.selection.first().snapshots||[]).length>0}hasClonedSnapshots(l){return(l.snapshots||[]).some(l=>l.children&&l.children.length>0)}listProtectedSnapshots(){return this.selection.first().snapshots.reduce((l,n)=>(n.is_protected&&l.push(n.name),l),[])}getDeleteDisableDesc(){const l=this.selection.first();return l&&this.hasClonedSnapshots(l)?this.i18n("This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD."):""}}},BH9v:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("aXbf");class s{constructor(l,n){this.control=l,this.formatter=n}setValue(l){const n=this.formatter.toMilliseconds(l);this.control.control.setValue(`${n} ms`)}ngOnInit(){this.setValue(this.control.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.control.value))}onUpdate(l){this.setValue(l)}}var a=e("+gVj"),o=e("LvDl"),r=e("IzCI");class d{constructor(l,n,e,i){this.elementRef=l,this.control=n,this.dimlessBinaryPerSecondPipe=e,this.formatter=i,this.ngModelChange=new t.EventEmitter,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.el.value))}setValue(l){/^[\d.]+$/.test(l)&&(l+=this.defaultUnit||"m");const n=this.formatter.toBytes(l,0),e=this.round(n);this.el.value=this.dimlessBinaryPerSecondPipe.transform(e),null!==n?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(l){if(null!==l&&0!==l){if(!o.isUndefined(this.minBytes)&&l<this.minBytes)return this.minBytes;if(!o.isUndefined(this.maxBytes)&&l>this.maxBytes)return this.maxBytes;if(!o.isUndefined(this.roundPower)){const n=Math.round(Math.log(l)/Math.log(this.roundPower));return Math.pow(this.roundPower,n)}}return l}onBlur(l){this.setValue(l)}}class c{constructor(l,n){this.formatter=l,this.ngControl=n}setValue(l){const n=this.formatter.toIops(l);this.ngControl.control.setValue(`${n} IOPS`)}ngOnInit(){this.setValue(this.ngControl.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.ngControl.value))}onUpdate(l){this.setValue(l)}}var m=e("mXUL"),p=e("4HWh"),h=e("p4Cf"),g=e("SVse");e("rFfW"),e("o8EM"),e.d(n,"a",(function(){return f})),e.d(n,"b",(function(){return y}));var f=t["ɵcrt"]({encapsulation:0,styles:[[".collapsible[_ngcontent-%COMP%]{cursor:pointer;-moz-user-select:none;user-select:none}"]],data:{}});function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,7,"input",[["cdMilliseconds",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onUpdate(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,s,[i.q,u.a],{ngDataReady:[0,"ngDataReady"]},null),t["ɵdid"](8,16384,null,0,a.h,[[3,i.d],a.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady),l(n,8,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass])}))}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,7,"input",[["cdDimlessBinaryPerSecond",""],["class","form-control"],["defaultUnit","b"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onBlur(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,d,[t.ElementRef,i.q,r.a,u.a],{ngDataReady:[0,"ngDataReady"],defaultUnit:[1,"defaultUnit"]},null),t["ɵdid"](8,16384,null,0,a.h,[[3,i.d],a.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady,"b"),l(n,8,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass])}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,7,"input",[["cdIops",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onUpdate(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,c,[u.a,i.q],{ngDataReady:[0,"ngDataReady"]},null),t["ɵdid"](8,16384,null,0,a.h,[[3,i.d],a.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady),l(n,8,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass])}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The mininum value is 0"]))],null,null)}function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,m.b,m.a)),t["ɵdid"](1,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](5,null,["",""])),(l()(),t["ɵeld"](6,0,null,null,2,"cd-helper",[],null,null,null,p.b,p.a)),t["ɵdid"](7,49152,null,0,h.a,[],null,null),(l()(),t["ɵted"](8,0,["",""])),(l()(),t["ɵeld"](9,0,null,0,20,"div",[],[[8,"className",0]],null,null,null,null)),(l()(),t["ɵeld"](10,0,null,null,17,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,7,null,null,null,null,null,null,null)),t["ɵdid"](12,16384,null,0,g.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,v)),t["ɵdid"](14,278528,null,0,g.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,g.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,b)),t["ɵdid"](16,278528,null,0,g.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,g.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,C)),t["ɵdid"](18,278528,null,0,g.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,g.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵeld"](19,0,null,null,8,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](20,0,null,null,7,"button",[["class","btn btn-light"],["data-toggle","button"],["title","Remove the local configuration value. The parent configuration value will be inherited and used instead."],["type","button"]],null,[[null,"click"]],(function(l,n,e){var t=!0;return"click"===n&&(t=!1!==l.component.reset(l.context.$implicit.name)&&t),t}),null,null)),t["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](22,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t["ɵpod"](23,{active:0}),(l()(),t["ɵeld"](24,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),t["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](26,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵpad"](27,1),(l()(),t["ɵand"](16777216,null,null,1,null,S)),t["ɵdid"](29,16384,null,0,g.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,12,0,n.context.$implicit.type),l(n,14,0,e.configurationType.milliseconds),l(n,16,0,e.configurationType.bps),l(n,18,0,e.configurationType.iops);var i=l(n,23,0,e.isDisabled(n.context.$implicit.name));l(n,22,0,"btn btn-light",i);var u=l(n,27,0,e.icons.erase);l(n,26,0,u),l(n,29,0,e.form.showError("configuration."+n.context.$implicit.name,t["ɵnov"](n.parent.parent,0),"min"))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess),l(n,4,0,n.context.$implicit.name),l(n,5,0,n.context.$implicit.displayName),l(n,8,0,n.context.$implicit.description),l(n,9,0,t["ɵinlineInterpolate"](1,"cd-col-form-input ",n.parent.context.$implicit.heading,""))}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,5,"h3",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵeld"](2,0,null,null,4,"span",[["class","collapsible"]],null,[[null,"click"]],(function(l,n,e){var t=!0;return"click"===n&&(t=!1!==l.component.toggleSectionVisibility(l.context.$implicit.class)&&t),t}),null,null)),(l()(),t["ɵted"](3,null,[" "," "])),(l()(),t["ɵeld"](4,0,null,null,2,"i",[["aria-hidden","true"]],null,null,null,null,null)),t["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](6,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(l()(),t["ɵeld"](7,0,null,null,2,"div",[],[[8,"className",0],[8,"hidden",0]],null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,_)),t["ɵdid"](9,278528,null,0,g.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,6,0,e.sectionVisibility[n.context.$implicit.class]?e.icons.minusCircle:e.icons.addCircle),l(n,9,0,n.context.$implicit.options)}),(function(l,n){var e=n.component;l(n,3,0,n.context.$implicit.heading),l(n,7,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.class,""),!e.sectionVisibility[n.context.$implicit.class])}))}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,[["cfgFormGroup",1]],null,8,"fieldset",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,1).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,1).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,4).onSubmit()&&i),i}),null,null)),t["ɵdid"](1,540672,null,0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](3,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](4,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["RBD Configuration"])),(l()(),t["ɵand"](16777216,null,null,1,null,R)),t["ɵdid"](8,278528,null,0,g.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.form.get("configuration")),l(n,4,0,e.form.get("configuration")),l(n,8,0,e.rbdConfigurationService.sections)}),(function(l,n){l(n,0,0,t["ɵnov"](n,3).ngClassUntouched,t["ɵnov"](n,3).ngClassTouched,t["ɵnov"](n,3).ngClassPristine,t["ɵnov"](n,3).ngClassDirty,t["ɵnov"](n,3).ngClassValid,t["ɵnov"](n,3).ngClassInvalid,t["ɵnov"](n,3).ngClassPending)}))}},E7j4:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("+gVj"),s=e("EEJc"),a=e("ajRT"),o=e("mXUL"),r=e("IZUe"),d=e("SVse"),c=e("gp3X"),m=e("sb0X"),p=e("KVJa"),h=e("Z21x"),g=e("sne2"),f=e("+26A"),v=e("LqlI"),b=e("XED3"),C=e("kn/O");e.d(n,"a",(function(){return F}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.key),l(n,2,0,n.context.$implicit.key)}),(function(l,n){l(n,3,0,n.context.$implicit.desc)}))}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.c,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.c]),t["ɵdid"](4,671744,[[5,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](8,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](9,null,["",""]))],(function(l,n){l(n,4,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,7,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""))}),(function(l,n){l(n,1,1,[t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass]),l(n,8,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,9,0,n.context.$implicit.name)}))}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["At least one pool is required."]))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The token is invalid."]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,87,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](1,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Import Bootstrap Token"])),(l()(),t["ɵeld"](4,0,null,1,83,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,82,"form",[["class","form"],["name","importBootstrapForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,69,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To import a bootstrap token which was created by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, provide the generated token, and click "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Import"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](19,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,7,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,26)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,26).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,26)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,26)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](28,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](30,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](31,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,_)),t["ɵdid"](33,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](34,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](35,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](38,0,null,0,2,"label",[["class","col-form-label"],["for","direction"]],null,null,null,null,null)),(l()(),t["ɵeld"](39,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Direction"])),(l()(),t["ɵeld"](41,0,null,0,8,"select",[["class","form-control custom-select"],["formControlName","direction"],["id","direction"],["name","direction"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,42).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,42).onTouched()&&i),i}),null,null)),t["ɵdid"](42,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](44,671744,[[3,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](46,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](47,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,R)),t["ɵdid"](49,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](50,0,null,null,12,"div",[["class","form-group"],["formGroupName","pools"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](51,212992,null,0,i.m,[[3,i.d],[8,null],[8,null]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.d,null,[i.m]),t["ɵdid"](53,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](54,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](57,0,null,0,1,"label",[["class","col-form-label required"],["for","pools"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵand"](16777216,null,0,1,null,y)),t["ɵdid"](60,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,w)),t["ɵdid"](62,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](63,0,null,null,17,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](64,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](67,0,null,0,1,"label",[["class","col-form-label required"],["for","token"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Token"])),(l()(),t["ɵeld"](69,0,null,0,7,"textarea",[["class","form-control resize-vertical"],["formControlName","token"],["id","token"],["placeholder","Generated token..."]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,70)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,70).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,70)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,70)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](70,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](72,671744,[[7,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](74,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](75,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵted"](-1,null,["          "])),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](78,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,I)),t["ɵdid"](80,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](81,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](82,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](83,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.import()&&t),t}),c.b,c.a)),t["ɵdid"](84,114688,null,0,m.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Import"])),(l()(),t["ɵeld"](86,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,p.b,p.a)),t["ɵdid"](87,49152,null,0,h.a,[d.Location,g.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.importBootstrapForm),l(n,10,0,e.importBootstrapForm),l(n,19,0),l(n,25,0,""),l(n,28,0,"siteName"),l(n,31,0,"siteName"),l(n,33,0,e.importBootstrapForm.showError("siteName",t["ɵnov"](n,7),"required")),l(n,35,0),l(n,44,0,"direction"),l(n,47,0,"direction"),l(n,49,0,e.directions),l(n,51,0,"pools"),l(n,54,0),l(n,60,0,e.pools),l(n,62,0,e.importBootstrapForm.showError("pools",t["ɵnov"](n,7),"requirePool")),l(n,64,0),l(n,72,0,"token"),l(n,75,0,"token"),l(n,78,0,e.importBootstrapForm.showError("token",t["ɵnov"](n,7),"required")),l(n,80,0,e.importBootstrapForm.showError("token",t["ɵnov"](n,7),"invalidToken")),l(n,84,0,e.importBootstrapForm),l(n,87,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,30).ngClassUntouched,t["ɵnov"](n,30).ngClassTouched,t["ɵnov"](n,30).ngClassPristine,t["ɵnov"](n,30).ngClassDirty,t["ɵnov"](n,30).ngClassValid,t["ɵnov"](n,30).ngClassInvalid,t["ɵnov"](n,30).ngClassPending,t["ɵnov"](n,31).validClass,t["ɵnov"](n,31).invalidClass),l(n,34,0,t["ɵnov"](n,35).hasErrors,t["ɵnov"](n,35).hasSuccess),l(n,41,0,t["ɵnov"](n,46).ngClassUntouched,t["ɵnov"](n,46).ngClassTouched,t["ɵnov"](n,46).ngClassPristine,t["ɵnov"](n,46).ngClassDirty,t["ɵnov"](n,46).ngClassValid,t["ɵnov"](n,46).ngClassInvalid,t["ɵnov"](n,46).ngClassPending,t["ɵnov"](n,47).validClass,t["ɵnov"](n,47).invalidClass),l(n,50,0,t["ɵnov"](n,53).ngClassUntouched,t["ɵnov"](n,53).ngClassTouched,t["ɵnov"](n,53).ngClassPristine,t["ɵnov"](n,53).ngClassDirty,t["ɵnov"](n,53).ngClassValid,t["ɵnov"](n,53).ngClassInvalid,t["ɵnov"](n,53).ngClassPending,t["ɵnov"](n,54).hasErrors,t["ɵnov"](n,54).hasSuccess),l(n,63,0,t["ɵnov"](n,64).hasErrors,t["ɵnov"](n,64).hasSuccess),l(n,69,0,t["ɵnov"](n,74).ngClassUntouched,t["ɵnov"](n,74).ngClassTouched,t["ɵnov"](n,74).ngClassPristine,t["ɵnov"](n,74).ngClassDirty,t["ɵnov"](n,74).ngClassValid,t["ɵnov"](n,74).ngClassInvalid,t["ɵnov"](n,74).ngClassPending,t["ɵnov"](n,75).validClass,t["ɵnov"](n,75).invalidClass)}))}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-bootstrap-import-modal",[],null,null,null,E,S)),t["ɵdid"](1,245760,null,0,f.a,[v.a,b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var F=t["ɵccf"]("cd-bootstrap-import-modal",f.a,N,{},{},[])},EFGL:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("IzCI"),s=e("aXbf"),a=e("dEH0"),o=e("BQkM"),r=e("25BL"),d=e("uIqm");e("aAWM"),e("o8EM"),e("GiVz"),e.d(n,"a",(function(){return c})),e.d(n,"b",(function(){return _}));var c=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function m(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Global"]))],null,null)}function p(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Image"]))],null,null)}function h(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"]))],null,null)}function g(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"div",[],null,null,null,null,null)),t["ɵdid"](1,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,m)),t["ɵdid"](3,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,p)),t["ɵdid"](5,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,h)),t["ɵdid"](7,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],(function(l,n){l(n,1,0,n.context.value),l(n,3,0,"global"),l(n,5,0,"image"),l(n,7,0,"pool")}),null)}function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,0),n.parent.context.value));l(n,1,0,e)}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,1),n.parent.context.value));l(n,1,0,e)}))}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),n.parent.context.value));l(n,1,0,e)}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[],null,null,null,null,null)),t["ɵdid"](1,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,f)),t["ɵdid"](3,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,v)),t["ɵdid"](5,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,b)),t["ɵdid"](7,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,C)),t["ɵdid"](9,16384,null,0,i.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],null,null)],(function(l,n){var e=n.component;l(n,1,0,n.context.row.type),l(n,3,0,e.typeField.bps),l(n,5,0,e.typeField.milliseconds),l(n,7,0,e.typeField.iops)}),null)}function _(l){return t["ɵvid"](0,[t["ɵpid"](0,u.a,[s.a]),t["ɵpid"](0,a.a,[]),t["ɵpid"](0,o.a,[]),t["ɵqud"](402653184,1,{configurationSourceTpl:0}),t["ɵqud"](402653184,2,{configurationValueTpl:0}),t["ɵqud"](402653184,3,{poolConfTable:0}),(l()(),t["ɵeld"](6,0,null,null,1,"cd-table",[["identifier","name"]],null,null,null,r.b,r.a)),t["ɵdid"](7,2867200,[[3,4],["poolConfTable",4]],0,d.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],identifier:[2,"identifier"]},null),(l()(),t["ɵand"](0,[[1,2],["configurationSourceTpl",2]],null,0,null,g)),(l()(),t["ɵand"](0,[[2,2],["configurationValueTpl",2]],null,0,null,S))],(function(l,n){var e=n.component;l(n,7,0,e.data,e.poolConfigurationColumns,"name")}),null)}},Ekvf:function(l,n,e){"use strict";e.d(n,"a",(function(){return d}));var t=e("mrSG"),i=e("IheW"),u=e("lJxs"),s=e("xTzq"),a=e("o8EM"),o=e("8Y7J"),r=e("pL04");let d=(()=>{let l=class{constructor(l,n){this.http=l,this.rbdConfigurationService=n,this.apiPath="api/pool"}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}update(l){let n;return l.hasOwnProperty("srcpool")?(n=l.srcpool,delete l.srcpool):(n=l.pool,delete l.pool),this.http.put(`${this.apiPath}/${encodeURIComponent(n)}`,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}get(l){return this.http.get(`${this.apiPath}/${l}`)}getList(){return this.http.get(`${this.apiPath}?stats=true`)}getConfiguration(l){return this.http.get(`${this.apiPath}/${l}/configuration`).pipe(Object(u.a)(l=>l.map(l=>Object.assign(l,this.rbdConfigurationService.getOptionByName(l.name)))))}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}list(l=[]){const n=l.join(",");return this.http.get(`${this.apiPath}?attrs=${n}`).toPromise().then(l=>l)}};return l.ngInjectableDef=o["ɵɵdefineInjectable"]({factory:function(){return new l(o["ɵɵinject"](i.c),o["ɵɵinject"](a.a))},token:l,providedIn:r.a}),l=t.__decorate([s.a,t.__metadata("design:paramtypes",[i.c,a.a])],l),l})()},F83c:function(l,n,e){"use strict";e.d(n,"a",(function(){return m}));var t=e("mrSG"),i=e("IheW"),u=e("LvDl"),s=e("lJxs"),a=e("xTzq"),o=e("jVDg"),r=e("o8EM"),d=e("8Y7J"),c=e("pL04");let m=(()=>{let l=class{constructor(l,n){this.http=l,this.rbdConfigurationService=n}isRBDPool(l){return-1!==u.indexOf(l.application_metadata,"rbd")&&!l.pool_name.includes("/")}create(l){return this.http.post("api/block/image",l,{observe:"response"})}delete(l){return this.http.delete(`api/block/image/${l.toStringEncoded()}`,{observe:"response"})}update(l,n){return this.http.put(`api/block/image/${l.toStringEncoded()}`,n,{observe:"response"})}get(l){return this.http.get(`api/block/image/${l.toStringEncoded()}`)}list(){return this.http.get("api/block/image").pipe(Object(s.a)(l=>l.map(l=>(l.value.map(l=>l.configuration?(l.configuration.map(l=>Object.assign(l,this.rbdConfigurationService.getOptionByName(l.name))),l):l),l))))}copy(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/copy`,n,{observe:"response"})}flatten(l){return this.http.post(`api/block/image/${l.toStringEncoded()}/flatten`,null,{observe:"response"})}defaultFeatures(){return this.http.get("api/block/image/default_features")}createSnapshot(l,n){const e={snapshot_name:n};return this.http.post(`api/block/image/${l.toStringEncoded()}/snap`,e,{observe:"response"})}renameSnapshot(l,n,e){const t={new_snap_name:e};return this.http.put(`api/block/image/${l.toStringEncoded()}/snap/${n}`,t,{observe:"response"})}protectSnapshot(l,n,e){const t={is_protected:e};return this.http.put(`api/block/image/${l.toStringEncoded()}/snap/${n}`,t,{observe:"response"})}rollbackSnapshot(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/snap/${n}/rollback`,null,{observe:"response"})}cloneSnapshot(l,n,e){return this.http.post(`api/block/image/${l.toStringEncoded()}/snap/${n}/clone`,e,{observe:"response"})}deleteSnapshot(l,n){return this.http.delete(`api/block/image/${l.toStringEncoded()}/snap/${n}`,{observe:"response"})}listTrash(){return this.http.get("api/block/image/trash/")}createNamespace(l,n){return this.http.post(`api/block/pool/${l}/namespace`,{namespace:n},{observe:"response"})}listNamespaces(l){return this.http.get(`api/block/pool/${l}/namespace/`)}deleteNamespace(l,n){return this.http.delete(`api/block/pool/${l}/namespace/${n}`,{observe:"response"})}moveTrash(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/move_trash`,{delay:n},{observe:"response"})}purgeTrash(l){return this.http.post(`api/block/image/trash/purge/?pool_name=${l}`,null,{observe:"response"})}restoreTrash(l,n){return this.http.post(`api/block/image/trash/${l.toStringEncoded()}/restore`,{new_image_name:n},{observe:"response"})}removeTrash(l,n=!1){return this.http.delete(`api/block/image/trash/${l.toStringEncoded()}/?force=${n}`,{observe:"response"})}};return l.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new l(d["ɵɵinject"](i.c),d["ɵɵinject"](r.a))},token:l,providedIn:c.a}),t.__decorate([t.__param(1,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String]),t.__metadata("design:returntype",void 0)],l.prototype,"createSnapshot",null),t.__decorate([t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String,String]),t.__metadata("design:returntype",void 0)],l.prototype,"renameSnapshot",null),t.__decorate([t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String,Boolean]),t.__metadata("design:returntype",void 0)],l.prototype,"protectSnapshot",null),t.__decorate([t.__param(1,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String]),t.__metadata("design:returntype",void 0)],l.prototype,"restoreTrash",null),l=t.__decorate([a.a,t.__metadata("design:paramtypes",[i.c,r.a])],l),l})()},Fd71:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("s7LF"),i=e("XNiG"),u=(e("F83c"),e("sne2"),e("QFaf")),s=e("kvvV"),a=e("jVDg");e("9nlD"),e("VXsX");class o{constructor(l,n,e,t,i,u){this.modalRef=l,this.rbdService=n,this.taskManagerService=e,this.notificationService=t,this.i18n=i,this.actionLabels=u,this.editing=!1,this.action=this.actionLabels.CREATE,this.resource=this.i18n("RBD Snapshot"),this.createForm()}createForm(){this.snapshotForm=new u.a({snapshotName:new t.i("",{validators:[t.B.required]})})}ngOnInit(){this.onSubmit=new i.a}setSnapName(l){this.snapName=l,this.snapshotForm.get("snapshotName").setValue(l)}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.RENAME:this.actionLabels.CREATE}editAction(){const l=this.snapshotForm.getValue("snapshotName"),n=new a.a(this.poolName,this.namespace,this.imageName),e=new s.a;e.name="rbd/snap/edit",e.metadata={image_spec:n.toString(),snapshot_name:l},this.rbdService.renameSnapshot(n,this.snapName,l).toPromise().then(()=>{this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)}),this.modalRef.hide(),this.onSubmit.next(this.snapName)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}createAction(){const l=this.snapshotForm.getValue("snapshotName"),n=new a.a(this.poolName,this.namespace,this.imageName),e=new s.a;e.name="rbd/snap/create",e.metadata={image_spec:n.toString(),snapshot_name:l},this.rbdService.createSnapshot(n,l).toPromise().then(()=>{this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)}),this.modalRef.hide(),this.onSubmit.next(l)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}submit(){this.editing?this.editAction():this.createAction()}}},I4Qz:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("SVse"),r=e("mXUL"),d=e("ienR"),c=e("z/SZ"),m=e("gp3X"),p=e("sb0X"),h=e("KVJa"),g=e("Z21x"),f=e("sne2"),v=e("2JDI"),b=e("F83c"),C=e("LqlI"),S=e("2EZI"),_=e("kn/O");e.d(n,"a",(function(){return N}));var R=t["ɵcrt"]({encapsulation:0,styles:[[".bs-datepicker-head bs-datepicker-navigation-view{display:flex;justify-content:space-between}"]],data:{}});function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"div",[["class","alert alert-warning"],["role","alert"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This image contains snapshot(s), which will prevent it from being removed after moved to trash."]))],null,null)}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,['Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".']))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Protection has already expired. Please pick a future date or leave it empty."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,48,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Move an image to trash"])),(l()(),t["ɵeld"](4,0,null,1,44,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,43,"form",[["class","form"],["name","moveForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,30,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,y)),t["ɵdid"](13,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](14,0,null,null,7,"p",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To move "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](17,null,["",""])),(l()(),t["ɵted"](-1,null,[" to trash, click "])),(l()(),t["ɵeld"](19,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Move Image"])),(l()(),t["ɵted"](-1,null,[". Optionally, you can pick an expiration date."])),(l()(),t["ɵeld"](22,0,null,null,19,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](23,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](26,0,null,0,1,"label",[["class","col-form-label"],["for","expires"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Protection expires at"])),(l()(),t["ɵeld"](28,16777216,null,0,9,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","expiresAt"],["placeholder","NOT PROTECTED"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,29)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,29).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,29)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,29)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,31).onChange(e)&&i),"keyup.esc"===n&&(i=!1!==t["ɵnov"](l,31).hide()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,31).onBlur()&&i),i}),null,null)),t["ɵdid"](29,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵdid"](30,737280,null,0,d.c,[d.a,t.ElementRef,t.Renderer2,t.ViewContainerRef,c.a],{bsConfig:[0,"bsConfig"],minDate:[1,"minDate"]},null),t["ɵdid"](31,16384,null,0,d.f,[d.c,d.l,t.Renderer2,t.ElementRef,t.ChangeDetectorRef],null,null),t["ɵprd"](1024,null,s.o,(function(l){return[l]}),[d.f]),t["ɵprd"](1024,null,s.p,(function(l,n){return[l,n]}),[s.e,d.f]),t["ɵdid"](34,671744,[[1,4]],0,s.j,[[3,s.d],[6,s.o],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](36,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](37,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,w)),t["ɵdid"](39,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](41,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](42,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](43,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](44,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.moveImage()&&t),t}),m.b,m.a)),t["ɵdid"](45,114688,null,0,p.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Move Image"])),(l()(),t["ɵeld"](47,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,h.b,h.a)),t["ɵdid"](48,49152,null,0,g.a,[o.Location,f.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.moveForm),l(n,10,0,e.moveForm),l(n,13,0,e.hasSnapshots),l(n,23,0),l(n,30,0,e.bsConfig,e.minDate),l(n,34,0,"expiresAt"),l(n,37,0,"expiresAt"),l(n,39,0,e.moveForm.showError("expiresAt",t["ɵnov"](n,7),"format")),l(n,41,0,e.moveForm.showError("expiresAt",t["ɵnov"](n,7),"expired")),l(n,45,0,e.moveForm),l(n,48,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,17,0,e.imageSpecStr),l(n,22,0,t["ɵnov"](n,23).hasErrors,t["ɵnov"](n,23).hasSuccess),l(n,28,0,t["ɵnov"](n,36).ngClassUntouched,t["ɵnov"](n,36).ngClassTouched,t["ɵnov"](n,36).ngClassPristine,t["ɵnov"](n,36).ngClassDirty,t["ɵnov"](n,36).ngClassValid,t["ɵnov"](n,36).ngClassInvalid,t["ɵnov"](n,36).ngClassPending,t["ɵnov"](n,37).validClass,t["ɵnov"](n,37).invalidClass)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-move-modal",[],null,null,null,I,R)),t["ɵdid"](1,114688,null,0,v.a,[b.a,C.a,S.a,_.a],null,null)],(function(l,n){l(n,1,0)}),null)}var N=t["ɵccf"]("cd-rbd-trash-move-modal",v.a,E,{},{},[])},JBea:function(l,n,e){"use strict";e.d(n,"a",(function(){return t})),e("lArG");class t{constructor(){}}},"JIi+":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("978R"),u=e("z/SZ"),s=e("2uy1"),a=e("SVse"),o=e("pKUh"),r=e("2ZVE"),d=e("25BL"),c=e("uIqm"),m=e("NUGo"),p=e("S7zO"),h=e("VTlA"),g=e("ufoC"),f=e("mSOc"),v=e("wd/R"),b=e("LRne"),C=e("F83c"),S=e("OLbh"),_=e("0+/T"),R=e("sne2"),y=e("x38r"),w=e("vCyI"),k=e("QTAa"),I=e("kvvV"),E=e("jVDg"),N=e("a0VL"),F=e("Fgil"),T=e("aexS"),V=e("9nlD"),D=e("VXsX"),P=e("Fd71"),x=e("LvDl"),q=e("oxzT");class B{constructor(l,n,e){this.i18n=l,this.create={permission:"create",icon:q.a.add,name:n.CREATE},this.rename={permission:"update",icon:q.a.edit,name:n.RENAME},this.protect={permission:"update",icon:q.a.lock,visible:l=>l.hasSingleSelection&&!l.first().is_protected,name:n.PROTECT},this.unprotect={permission:"update",icon:q.a.unlock,visible:l=>l.hasSingleSelection&&l.first().is_protected,name:n.UNPROTECT},this.clone={permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>!l.hasSingleSelection||l.first().cdExecuting||!x.isUndefined(this.getCloneDisableDesc(e)),disableDesc:()=>this.getCloneDisableDesc(e),icon:q.a.clone,name:n.CLONE},this.copy={permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>!l.hasSingleSelection||l.first().cdExecuting,icon:q.a.copy,name:n.COPY},this.rollback={permission:"update",icon:q.a.undo,name:n.ROLLBACK},this.deleteSnap={permission:"delete",icon:q.a.destroy,disable:l=>{const n=l.first();return!l.hasSingleSelection||n.cdExecuting||n.is_protected},name:n.DELETE},this.ordering=[this.create,this.rename,this.protect,this.unprotect,this.clone,this.copy,this.rollback,this.deleteSnap]}getCloneDisableDesc(l){if(!l.includes("layering"))return this.i18n("Parent image must support Layering")}}class O{}class M{constructor(l,n,e,t,i,u,s,a,o,r,d){this.authStorageService=l,this.modalService=n,this.dimlessBinaryPipe=e,this.cdDatePipe=t,this.rbdService=i,this.taskManagerService=u,this.notificationService=s,this.summaryService=a,this.taskListService=o,this.i18n=r,this.actionLabels=d,this.snapshots=[],this.selection=new w.a,this.builders={"rbd/snap/create":l=>{const n=new O;return n.name=l.snapshot_name,n}},this.permission=this.authStorageService.getPermissions().rbdImage}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",cellTransformation:y.a.executing,flexGrow:2},{name:this.i18n("Size"),prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Provisioned"),prop:"disk_usage",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("State"),prop:"is_protected",flexGrow:1,cellTransformation:y.a.badge,customTemplateConfig:{map:{true:{value:this.i18n("PROTECTED"),class:"badge-success"},false:{value:this.i18n("UNPROTECTED"),class:"badge-info"}}}},{name:this.i18n("Created"),prop:"timestamp",flexGrow:1,pipe:this.cdDatePipe}]}ngOnChanges(){const l=new E.a(this.poolName,this.namespace,this.rbdName),n=new B(this.i18n,this.actionLabels,this.featuresName);n.create.click=()=>this.openCreateSnapshotModal(),n.rename.click=()=>this.openEditSnapshotModal(),n.protect.click=()=>this.toggleProtection(),n.unprotect.click=()=>this.toggleProtection();const e=()=>this.selection.first()&&`${l.toStringEncoded()}/${encodeURIComponent(this.selection.first().name)}`;n.clone.routerLink=()=>`/block/rbd/clone/${e()}`,n.copy.routerLink=()=>`/block/rbd/copy/${e()}`,n.rollback.click=()=>this.rollbackModal(),n.deleteSnap.click=()=>this.deleteSnapshotModal(),this.tableActions=n.ordering,this.taskListService.init(()=>Object(b.a)(this.snapshots),null,l=>this.data=l,()=>this.data=this.snapshots,n=>["rbd/snap/create","rbd/snap/delete","rbd/snap/edit","rbd/snap/rollback"].includes(n.name)&&l.toString()===n.metadata.image_spec,(l,n)=>l.name===n.metadata.snapshot_name,this.builders)}openSnapshotModal(l,n=null){this.modalRef=this.modalService.show(P.a),this.modalRef.content.poolName=this.poolName,this.modalRef.content.imageName=this.rbdName,this.modalRef.content.namespace=this.namespace,n?this.modalRef.content.setEditing():n=`${this.rbdName}_${v().toISOString(!0)}`,this.modalRef.content.setSnapName(n),this.modalRef.content.onSubmit.subscribe(n=>{const e=new k.a;e.name=l,e.metadata={image_name:this.rbdName,pool_name:this.poolName,snapshot_name:n},this.summaryService.addRunningTask(e),this.ngOnChanges()})}openCreateSnapshotModal(){this.openSnapshotModal("rbd/snap/create")}openEditSnapshotModal(){this.openSnapshotModal("rbd/snap/edit",this.selection.first().name)}toggleProtection(){const l=this.selection.first().name,n=this.selection.first().is_protected,e=new I.a;e.name="rbd/snap/edit";const t=new E.a(this.poolName,this.namespace,this.rbdName);e.metadata={image_spec:t.toString(),snapshot_name:l},this.rbdService.protectSnapshot(t,l,!n).toPromise().then(()=>{const l=new k.a;l.name=e.name,l.metadata=e.metadata,this.summaryService.addRunningTask(l),this.ngOnChanges(),this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)})})}_asyncTask(l,n,e){const t=new I.a;t.name=n,t.metadata={image_spec:new E.a(this.poolName,this.namespace,this.rbdName).toString(),snapshot_name:e};const i=new E.a(this.poolName,this.namespace,this.rbdName);this.rbdService[l](i,e).toPromise().then(()=>{const l=new k.a;l.name=t.name,l.metadata=t.metadata,this.summaryService.addRunningTask(l),this.modalRef.hide(),this.ngOnChanges(),this.taskManagerService.subscribe(l.name,l.metadata,l=>{this.notificationService.notifyTask(l)})}).catch(()=>{this.modalRef.content.stopLoadingSpinner()})}rollbackModal(){const l=this.selection.selected[0].name,n=new E.a(this.poolName,this.namespace,this.rbdName).toString(),e={titleText:this.i18n("RBD snapshot rollback"),buttonText:this.i18n("Rollback"),bodyTpl:this.rollbackTpl,bodyData:{snapName:`${n}@${l}`},onSubmit:()=>{this._asyncTask("rollbackSnapshot","rbd/snap/rollback",l)}};this.modalRef=this.modalService.show(S.a,{initialState:e})}deleteSnapshotModal(){const l=this.selection.selected[0].name;this.modalRef=this.modalService.show(_.a,{initialState:{itemDescription:this.i18n("RBD snapshot"),itemNames:[l],submitAction:()=>this._asyncTask("deleteSnapshot","rbd/snap/delete",l)}})}updateSelection(l){this.selection=l}}var A=e("LqlI"),L=e("GiVz"),j=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function $(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["You are about to rollback"])),(l()(),t["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](3,null,[" ",""])),(l()(),t["ɵted"](-1,null,[".\n"]))],null,(function(l,n){l(n,3,0,n.context.$implicit.snapName)}))}function G(l){return t["ɵvid"](0,[t["ɵqud"](671088640,1,{nameTpl:0}),t["ɵqud"](402653184,2,{rollbackTpl:0}),(l()(),t["ɵeld"](2,0,null,null,3,"cd-table",[["columnMode","flex"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(l,n,e){var t=!0;return"updateSelection"===n&&(t=!1!==l.component.updateSelection(e)&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),t["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,m.b,m.a)),t["ɵdid"](5,114688,null,0,p.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵand"](0,[[2,2],["rollbackTpl",2]],null,0,null,$))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex","single"),l(n,5,0,e.permission,e.selection,e.tableActions)}),null)}var U=e("EFGL"),X=e("aAWM"),z=e("aXbf"),W=e("o8EM"),J=e("nSDx"),Y=e("o4+5"),K=e("JBea");e.d(n,"b",(function(){return Z})),e.d(n,"c",(function(){return cl})),e.d(n,"a",(function(){return pl}));var Z=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function H(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Only available for RBD images with "])),(l()(),t["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["fast-diff"])),(l()(),t["ɵted"](-1,null,[" enabled"]))],null,null)}function Q(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""]))],null,(function(l,n){l(n,2,0,n.context.$implicit)}))}function ll(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"span",[["class","form-text text-muted"],["placement","right"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),t["ɵted"](-1,null,["N/A"]))],(function(l,n){l(n,2,0,t["ɵnov"](n.parent.parent,5),"right")}),null)}function nl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,[" "," "])),t["ɵppd"](2,1)],null,(function(l,n){var e=n.component,i=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),e.selection.disk_usage));l(n,1,0,i)}))}function el(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"span",[["class","form-text text-muted"],["placement","right"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),t["ɵted"](-1,null,["N/A"]))],(function(l,n){l(n,2,0,t["ɵnov"](n.parent.parent,5),"right")}),null)}function tl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,[" "," "])),t["ɵppd"](2,1)],null,(function(l,n){var e=n.component,i=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),e.selection.total_disk_usage));l(n,1,0,i)}))}function il(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["/",""]))],null,(function(l,n){l(n,1,0,n.component.selection.parent.pool_namespace)}))}function ul(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),(l()(),t["ɵand"](16777216,null,null,1,null,il)),t["ɵdid"](3,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵted"](4,null,["/","@",""]))],(function(l,n){l(n,3,0,n.component.selection.parent.pool_namespace)}),(function(l,n){var e=n.component;l(n,1,0,e.selection.parent.pool_name),l(n,4,0,e.selection.parent.image_name,e.selection.parent.snap_name)}))}function sl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["-"]))],null,null)}function al(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,110,"tabset",[],[[2,"tab-container",null]],null,null,o.b,o.a)),t["ɵdid"](1,180224,null,0,r.e,[r.f,t.Renderer2,t.ElementRef],null,null),(l()(),t["ɵeld"](2,0,null,0,99,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](3,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](4,0,null,null,97,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,96,"tbody",[],null,null,null,null,null)),(l()(),t["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](7,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](9,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),t["ɵted"](10,null,["",""])),(l()(),t["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"])),(l()(),t["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](15,null,["",""])),(l()(),t["ɵeld"](16,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Data Pool"])),(l()(),t["ɵeld"](19,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](20,null,["",""])),t["ɵppd"](21,1),(l()(),t["ɵeld"](22,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Created"])),(l()(),t["ɵeld"](25,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](26,null,["",""])),t["ɵppd"](27,1),(l()(),t["ɵeld"](28,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](29,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Size"])),(l()(),t["ɵeld"](31,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](32,null,["",""])),t["ɵppd"](33,1),(l()(),t["ɵeld"](34,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](35,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Objects"])),(l()(),t["ɵeld"](37,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](38,null,["",""])),t["ɵppd"](39,1),(l()(),t["ɵeld"](40,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](41,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Object size"])),(l()(),t["ɵeld"](43,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](44,null,["",""])),t["ɵppd"](45,1),(l()(),t["ɵeld"](46,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](47,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Features"])),(l()(),t["ɵeld"](49,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,Q)),t["ɵdid"](51,278528,null,0,a.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](52,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](53,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Provisioned"])),(l()(),t["ɵeld"](55,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,ll)),t["ɵdid"](57,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,nl)),t["ɵdid"](59,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](60,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](61,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Total provisioned"])),(l()(),t["ɵeld"](63,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,el)),t["ɵdid"](65,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,tl)),t["ɵdid"](67,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](68,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](69,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Striping unit"])),(l()(),t["ɵeld"](71,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](72,null,["",""])),t["ɵppd"](73,1),(l()(),t["ɵeld"](74,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](75,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Striping count"])),(l()(),t["ɵeld"](77,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](78,null,["",""])),(l()(),t["ɵeld"](79,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](80,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Parent"])),(l()(),t["ɵeld"](82,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,ul)),t["ɵdid"](84,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,sl)),t["ɵdid"](86,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](87,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](88,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Block name prefix"])),(l()(),t["ɵeld"](90,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](91,null,["",""])),(l()(),t["ɵeld"](92,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](93,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Order"])),(l()(),t["ɵeld"](95,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](96,null,["",""])),(l()(),t["ɵeld"](97,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](98,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Format Version"])),(l()(),t["ɵeld"](100,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](101,null,["",""])),(l()(),t["ɵeld"](102,0,null,0,4,"tab",[["heading","Snapshots"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](103,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](104,0,null,null,2,"cd-rbd-snapshot-list",[],null,null,null,G,j)),t["ɵprd"](131584,null,h.a,h.a,[g.a,f.a]),t["ɵdid"](106,638976,null,0,M,[T.a,A.b,F.a,N.a,C.a,D.a,V.a,f.a,h.a,L.a,R.b],{snapshots:[0,"snapshots"],featuresName:[1,"featuresName"],poolName:[2,"poolName"],namespace:[3,"namespace"],rbdName:[4,"rbdName"]},null),(l()(),t["ɵeld"](107,0,null,0,3,"tab",[["heading","Configuration"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](108,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](109,0,null,null,1,"cd-rbd-configuration-table",[],null,null,null,U.b,U.a)),t["ɵdid"](110,638976,null,0,X.a,[z.a,W.a,L.a],{data:[0,"data"]},null)],(function(l,n){var e=n.component;l(n,3,0,"Details"),l(n,51,0,e.selection.features_name),l(n,57,0,-1===(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,59,0,-1!==(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,65,0,-1===(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,67,0,-1!==(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,84,0,e.selection.parent),l(n,86,0,!e.selection.parent),l(n,103,0,"Snapshots"),l(n,106,0,e.selection.snapshots,e.selection.features_name,e.selection.pool_name,e.selection.namespace,e.selection.name),l(n,108,0,"Configuration"),l(n,110,0,e.selection.configuration)}),(function(l,n){var e=n.component;l(n,0,0,t["ɵnov"](n,1).clazz),l(n,2,0,t["ɵnov"](n,3).id,t["ɵnov"](n,3).active,t["ɵnov"](n,3).addClass,t["ɵnov"](n,3).role,t["ɵnov"](n,3).ariaLabelledby),l(n,10,0,e.selection.name),l(n,15,0,e.selection.pool_name);var i=t["ɵunv"](n,20,0,l(n,21,0,t["ɵnov"](n.parent,0),e.selection.data_pool));l(n,20,0,i);var u=t["ɵunv"](n,26,0,l(n,27,0,t["ɵnov"](n.parent,1),e.selection.timestamp));l(n,26,0,u);var s=t["ɵunv"](n,32,0,l(n,33,0,t["ɵnov"](n.parent,2),e.selection.size));l(n,32,0,s);var a=t["ɵunv"](n,38,0,l(n,39,0,t["ɵnov"](n.parent,3),e.selection.num_objs));l(n,38,0,a);var o=t["ɵunv"](n,44,0,l(n,45,0,t["ɵnov"](n.parent,2),e.selection.obj_size));l(n,44,0,o);var r=t["ɵunv"](n,72,0,l(n,73,0,t["ɵnov"](n.parent,2),e.selection.stripe_unit));l(n,72,0,r),l(n,78,0,e.selection.stripe_count),l(n,91,0,e.selection.block_name_prefix),l(n,96,0,e.selection.order),l(n,101,0,e.selection.image_format),l(n,102,0,t["ɵnov"](n,103).id,t["ɵnov"](n,103).active,t["ɵnov"](n,103).addClass,t["ɵnov"](n,103).role,t["ɵnov"](n,103).ariaLabelledby),l(n,107,0,t["ɵnov"](n,108).id,t["ɵnov"](n,108).active,t["ɵnov"](n,108).addClass,t["ɵnov"](n,108).role,t["ɵnov"](n,108).ariaLabelledby)}))}function ol(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"strong",[["tooltip","This setting overrides the global value"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"]},null),(l()(),t["ɵted"](-1,null,["Image"])),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,2,0,"This setting overrides the global value")}),null)}function rl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,16777216,null,null,2,"span",[["tooltip","This is the global value. No value for this option has been set for this image."]],null,null,null,null,null)),t["ɵdid"](1,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"]},null),(l()(),t["ɵted"](-1,null,["Global"])),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"This is the global value. No value for this option has been set for this image.")}),null)}function dl(l){return t["ɵvid"](0,[(l()(),t["ɵand"](16777216,null,null,1,null,ol)),t["ɵdid"](1,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),t["ɵand"](0,[["global",2]],null,0,null,rl))],(function(l,n){l(n,1,0,n.context.value-0,t["ɵnov"](n,2))}),null)}function cl(l){return t["ɵvid"](0,[t["ɵpid"](0,J.a,[]),t["ɵpid"](0,N.a,[a.DatePipe]),t["ɵpid"](0,F.a,[z.a]),t["ɵpid"](0,Y.a,[z.a]),t["ɵqud"](402653184,1,{poolConfigurationSourceTpl:0}),(l()(),t["ɵand"](0,[["usageNotAvailableTooltipTpl",2]],null,0,null,H)),(l()(),t["ɵand"](16777216,null,null,1,null,al)),t["ɵdid"](7,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["poolConfigurationSourceTpl",2]],null,0,null,dl))],(function(l,n){l(n,7,0,n.component.selection)}),null)}function ml(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-details",[],null,null,null,cl,Z)),t["ɵdid"](1,49152,null,0,K.a,[],null,null)],null,null)}var pl=t["ɵccf"]("cd-rbd-details",K.a,ml,{selection:"selection",images:"images"},{},[])},L4us:function(l,n,e){"use strict";var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{}e.d(n,"a",(function(){return a}));class a{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.bsConfig={containerClass:"theme-default"},this.createForm()}createForm(){this.editPeerForm=new i.a({clusterName:new t.i("",{validators:[t.B.required,this.validateClusterName]}),clientID:new t.i("",{validators:[t.B.required,this.validateClientID]}),monAddr:new t.i("",{validators:[this.validateMonAddr]}),key:new t.i("",{validators:[this.validateKey]})})}ngOnInit(){this.pattern=`${this.poolName}/${this.peerUUID}`,"edit"===this.mode&&this.rbdMirroringService.getPeer(this.poolName,this.peerUUID).subscribe(l=>{this.setResponse(l)})}validateClusterName(l){if(!l.value.match(/^[\w\-_]*$/))return{invalidClusterName:{value:l.value}}}validateClientID(l){if(!l.value.match(/^(?!client\.)[\w\-_.]*$/))return{invalidClientID:{value:l.value}}}validateMonAddr(l){if(!l.value.match(/^[,; ]*([\w.\-_\[\]]+(:[\d]+)?[,; ]*)*$/))return{invalidMonAddr:{value:l.value}}}validateKey(l){try{if(""===l.value||atob(l.value))return null}catch(n){}return{invalidKey:{value:l.value}}}setResponse(l){this.response=l,this.editPeerForm.get("clusterName").setValue(l.cluster_name),this.editPeerForm.get("clientID").setValue(l.client_id),this.editPeerForm.get("monAddr").setValue(l.mon_host),this.editPeerForm.get("key").setValue(l.key)}update(){const l=new s;let n;l.cluster_name=this.editPeerForm.getValue("clusterName"),l.client_id=this.editPeerForm.getValue("clientID"),l.mon_host=this.editPeerForm.getValue("monAddr"),l.key=this.editPeerForm.getValue("key"),n=this.taskWrapper.wrapTaskAroundCall("edit"===this.mode?{task:new u.a("rbd/mirroring/peer/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePeer(this.poolName,this.peerUUID,l)}:{task:new u.a("rbd/mirroring/peer/add",{pool_name:this.poolName}),call:this.rbdMirroringService.addPeer(this.poolName,l)}),n.subscribe(void 0,()=>this.editPeerForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},MyVl:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("LvDl"),s=e("jtHE"),a=e("cp0P"),o=e("SxV6"),r=e("eIep"),d=(e("Ekvf"),e("F83c"),e("sne2"),e("oxzT")),c=e("QFaf"),m=e("PhyI"),p=e("kvvV"),h=e("jVDg"),g=(e("Fgil"),e("aexS"),e("aXbf"),e("kn/O"),e("u0yg"));class f{constructor(){this.features=[]}}class v{constructor(){this.features=[]}}var b=e("lArG");class C extends b.a{constructor(){super(...arguments),this.features=[]}}class S{constructor(){this.features=[]}}var _=function(l){return l.editing="editing",l.cloning="cloning",l.copying="copying",l}({});e.d(n,"a",(function(){return R}));class R{constructor(l,n,e,i,u,a,o,r,c,m){this.authStorageService=l,this.route=n,this.poolService=e,this.rbdService=i,this.formatter=u,this.taskWrapper=a,this.dimlessBinaryPipe=o,this.i18n=r,this.actionLabels=c,this.router=m,this.namespaces=[],this.namespacesByPoolCache={},this.pools=null,this.allPools=null,this.dataPools=null,this.allDataPools=null,this.featuresList=[],this.initializeConfigData=new t.EventEmitter,this.advancedEnabled=!1,this.rbdFormMode=_,this.defaultObjectSize="4 MiB",this.objectSizes=["4 KiB","8 KiB","16 KiB","32 KiB","64 KiB","128 KiB","256 KiB","512 KiB","1 MiB","2 MiB","4 MiB","8 MiB","16 MiB","32 MiB"],this.rbdImage=new s.a(1),this.icons=d.a,this.poolPermission=this.authStorageService.getPermissions().pool,this.resource=this.i18n("RBD"),this.features={"deep-flatten":{desc:this.i18n("Deep flatten"),requires:null,allowEnable:!1,allowDisable:!0},layering:{desc:this.i18n("Layering"),requires:null,allowEnable:!1,allowDisable:!1},"exclusive-lock":{desc:this.i18n("Exclusive lock"),requires:null,allowEnable:!0,allowDisable:!0},"object-map":{desc:this.i18n("Object map (requires exclusive-lock)"),requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},journaling:{desc:this.i18n("Journaling (requires exclusive-lock)"),requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},"fast-diff":{desc:this.i18n("Fast diff (interlocked with object-map)"),requires:"object-map",allowEnable:!0,allowDisable:!0,interlockedWith:"object-map",initDisabled:!0}},this.featuresList=this.objToArray(this.features),this.createForm()}objToArray(l){return u.map(l,(l,n)=>Object.assign(l,{key:n}))}createForm(){this.rbdForm=new c.a({parent:new i.i(""),name:new i.i("",{validators:[i.B.required,i.B.pattern(/^[^@/]+?$/)]}),pool:new i.i(null,{validators:[i.B.required]}),namespace:new i.i(null),useDataPool:new i.i(!1),dataPool:new i.i(null),size:new i.i(null,{updateOn:"blur"}),obj_size:new i.i(this.defaultObjectSize),features:new c.a(this.featuresList.reduce((l,n)=>(l[n.key]=new i.i({value:!1,disabled:!!n.initDisabled}),l),{})),stripingUnit:new i.i(null),stripingCount:new i.i(null,{updateOn:"blur"})},this.validateRbdForm(this.formatter))}disableForEdit(){this.rbdForm.get("parent").disable(),this.rbdForm.get("pool").disable(),this.rbdForm.get("namespace").disable(),this.rbdForm.get("useDataPool").disable(),this.rbdForm.get("dataPool").disable(),this.rbdForm.get("obj_size").disable(),this.rbdForm.get("stripingUnit").disable(),this.rbdForm.get("stripingCount").disable(),this.rbdImage.subscribe(l=>{l.image_format===g.a.V1&&(this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable(),this.rbdForm.get("exclusive-lock").disable())})}disableForClone(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}disableForCopy(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}ngOnInit(){let l;this.router.url.startsWith("/block/rbd/edit")?(this.mode=this.rbdFormMode.editing,this.action=this.actionLabels.EDIT,this.disableForEdit()):this.router.url.startsWith("/block/rbd/clone")?(this.mode=this.rbdFormMode.cloning,this.disableForClone(),this.action=this.actionLabels.CLONE):this.router.url.startsWith("/block/rbd/copy")?(this.mode=this.rbdFormMode.copying,this.action=this.actionLabels.COPY,this.disableForCopy()):this.action=this.actionLabels.CREATE,function(l){l.RbdServiceGet="rbdService.get",l.PoolServiceList="poolService.list"}(l||(l={}));const n={};this.mode===this.rbdFormMode.editing||this.mode===this.rbdFormMode.cloning||this.mode===this.rbdFormMode.copying?this.route.params.subscribe(e=>{const t=h.a.fromString(decodeURIComponent(e.image_spec));e.snap&&(this.snapName=decodeURIComponent(e.snap)),n[l.RbdServiceGet]=this.rbdService.get(t)}):this.rbdService.defaultFeatures().subscribe(l=>{this.setFeatures(l)}),this.mode!==this.rbdFormMode.editing&&this.poolPermission.read&&(n[l.PoolServiceList]=this.poolService.list(["pool_name","type","flags_names","application_metadata"])),Object(a.a)(n).subscribe(n=>{if(n[l.PoolServiceList]){const e=[],t=[];for(const i of n[l.PoolServiceList])this.rbdService.isRBDPool(i)&&("replicated"===i.type?(e.push(i),t.push(i)):"erasure"===i.type&&-1!==i.flags_names.indexOf("ec_overwrites")&&t.push(i));if(this.pools=e,this.allPools=e,this.dataPools=t,this.allDataPools=t,1===this.pools.length){const l=this.pools[0].pool_name;this.rbdForm.get("pool").setValue(l),this.onPoolChange(l)}}if(n[l.RbdServiceGet]){const e=n[l.RbdServiceGet];this.setResponse(e,this.snapName),this.rbdImage.next(e)}}),u.each(this.features,l=>{this.rbdForm.get("features").get(l.key).valueChanges.subscribe(n=>this.featureFormUpdate(l.key,n))})}onPoolChange(l){const n=this.allDataPools?this.allDataPools.filter(n=>n.pool_name!==l):[];this.rbdForm.getValue("dataPool")===l&&this.rbdForm.get("dataPool").setValue(null),this.dataPools=n,this.namespaces=null,l in this.namespacesByPoolCache?this.namespaces=this.namespacesByPoolCache[l]:this.rbdService.listNamespaces(l).subscribe(n=>{n=n.map(l=>l.namespace),this.namespacesByPoolCache[l]=n,this.namespaces=n}),this.rbdForm.get("namespace").setValue(null)}onUseDataPoolChange(){this.rbdForm.getValue("useDataPool")||(this.rbdForm.get("dataPool").setValue(null),this.onDataPoolChange(null))}onDataPoolChange(l){const n=this.allPools.filter(n=>n.pool_name!==l);this.rbdForm.getValue("pool")===l&&this.rbdForm.get("pool").setValue(null),this.pools=n}validateRbdForm(l){return n=>{const e=n.get("useDataPool"),t=n.get("dataPool");let i=null;e.value&&null==t.value&&(i={required:!0}),t.setErrors(i);const u=n.get("size"),s=n.get("obj_size"),a=l.toBytes(null!=s.value?s.value:this.defaultObjectSize),o=n.get("stripingCount"),r=null!=o.value?o.value:1;let d=null;null===u.value?d={required:!0}:r*a>l.toBytes(u.value)&&(d={invalidSizeObject:!0}),u.setErrors(d);const c=n.get("stripingUnit");let m=null;null===c.value&&null!==o.value?m={required:!0}:null!==c.value&&l.toBytes(c.value)>a&&(m={invalidStripingUnit:!0}),c.setErrors(m);let p=null;return null===o.value&&null!==c.value?p={required:!0}:r<1&&(p={min:!0}),o.setErrors(p),null}}getDependendChildFeatures(l){return u.filter(this.features,n=>n.requires===l)||[]}deepBoxCheck(l,n){this.getDependendChildFeatures(l).forEach(l=>{const e=this.rbdForm.get(l.key);n?e.enable({emitEvent:!1}):(e.disable({emitEvent:!1}),e.setValue(!1,{emitEvent:!1}),this.deepBoxCheck(l.key,n));const t=this.rbdForm.get("features");this.mode===this.rbdFormMode.editing&&t.get(l.key).enabled&&((-1===this.response.features_name.indexOf(l.key)||l.allowDisable)&&(-1!==this.response.features_name.indexOf(l.key)||l.allowEnable)||t.get(l.key).disable())})}interlockCheck(l,n){const e=this.featuresList.find(n=>n.key===l);if(this.response){const l=null!=e.interlockedWith,n=this.featuresList.find(l=>l.interlockedWith===e.key),t=!!this.response.features_name.find(l=>l===e.key);if(l){if(t!==!!this.response.features_name.find(l=>l===e.interlockedWith))return}else if(n&&!!this.response.features_name.find(l=>l===n.key)!==t)return}n?u.filter(this.features,n=>n.interlockedWith===l).forEach(l=>this.rbdForm.get(l.key).setValue(!0,{emitEvent:!1})):e.interlockedWith&&this.rbdForm.get("features").get(e.interlockedWith).setValue(!1)}featureFormUpdate(l,n){if(n){const n=this.features[l].requires;if(n&&!this.rbdForm.getValue(n))return void this.rbdForm.get(`features.${l}`).setValue(!1)}this.deepBoxCheck(l,n),this.interlockCheck(l,n)}setFeatures(l){const n=this.rbdForm.get("features");u.forIn(this.features,e=>{-1!==l.indexOf(e.key)&&n.get(e.key).setValue(!0),this.featureFormUpdate(e.key,n.get(e.key).value)})}setResponse(l,n){this.response=l;const e=new h.a(l.pool_name,l.namespace,l.name).toString();if(this.mode===this.rbdFormMode.cloning)this.rbdForm.get("parent").setValue(`${e}@${n}`);else if(this.mode===this.rbdFormMode.copying)n?this.rbdForm.get("parent").setValue(`${e}@${n}`):this.rbdForm.get("parent").setValue(`${e}`);else if(l.parent){const n=l.parent;this.rbdForm.get("parent").setValue(`${n.pool_name}/${n.image_name}@${n.snap_name}`)}this.mode===this.rbdFormMode.editing&&this.rbdForm.get("name").setValue(l.name),this.rbdForm.get("pool").setValue(l.pool_name),this.onPoolChange(l.pool_name),this.rbdForm.get("namespace").setValue(l.namespace),l.data_pool&&(this.rbdForm.get("useDataPool").setValue(!0),this.rbdForm.get("dataPool").setValue(l.data_pool)),this.rbdForm.get("size").setValue(this.dimlessBinaryPipe.transform(l.size)),this.rbdForm.get("obj_size").setValue(this.dimlessBinaryPipe.transform(l.obj_size)),this.setFeatures(l.features_name),this.rbdForm.get("stripingUnit").setValue(this.dimlessBinaryPipe.transform(l.stripe_unit)),this.rbdForm.get("stripingCount").setValue(l.stripe_count),this.initializeConfigData.emit({initialData:this.response.configuration,sourceType:m.a.image})}createRequest(){const l=new C;return l.pool_name=this.rbdForm.getValue("pool"),l.namespace=this.rbdForm.getValue("namespace"),l.name=this.rbdForm.getValue("name"),l.size=this.formatter.toBytes(this.rbdForm.getValue("size")),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(),l}createAction(){const l=this.createRequest();return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/create",{pool_name:l.pool_name,namespace:l.namespace,image_name:l.name}),call:this.rbdService.create(l)})}editRequest(){const l=new S;return l.name=this.rbdForm.getValue("name"),l.size=this.formatter.toBytes(this.rbdForm.getValue("size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.configuration=this.getDirtyConfigurationValues(),l}cloneRequest(){const l=new f;return l.child_pool_name=this.rbdForm.getValue("pool"),l.child_namespace=this.rbdForm.getValue("namespace"),l.child_image_name=this.rbdForm.getValue("name"),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(!0,m.a.image),l}editAction(){const l=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/edit",{image_spec:l.toString()}),call:this.rbdService.update(l,this.editRequest())})}cloneAction(){const l=this.cloneRequest(),n=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/clone",{parent_image_spec:n.toString(),parent_snap_name:this.snapName,child_pool_name:l.child_pool_name,child_namespace:l.child_namespace,child_image_name:l.child_image_name}),call:this.rbdService.cloneSnapshot(n,this.snapName,l)})}copyRequest(){const l=new v;return this.snapName&&(l.snapshot_name=this.snapName),l.dest_pool_name=this.rbdForm.getValue("pool"),l.dest_namespace=this.rbdForm.getValue("namespace"),l.dest_image_name=this.rbdForm.getValue("name"),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(!0,m.a.image),l}copyAction(){const l=this.copyRequest(),n=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/copy",{src_image_spec:n.toString(),dest_pool_name:l.dest_pool_name,dest_namespace:l.dest_namespace,dest_image_name:l.dest_image_name}),call:this.rbdService.copy(n,l)})}submit(){this.mode||this.rbdImage.next("create"),this.rbdImage.pipe(Object(o.a)(),Object(r.a)(()=>this.mode===this.rbdFormMode.editing?this.editAction():this.mode===this.rbdFormMode.cloning?this.cloneAction():this.mode===this.rbdFormMode.copying?this.copyAction():this.createAction())).subscribe(()=>{},()=>this.rbdForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/block/rbd"]))}}},PhyI:function(l,n,e){"use strict";e.d(n,"a",(function(){return t})),e.d(n,"b",(function(){return i}));var t=function(l){return l[l.global=0]="global",l[l.pool=1]="pool",l[l.image=2]="image",l}({}),i=function(l){return l[l.bps=0]="bps",l[l.iops=1]="iops",l[l.milliseconds=2]="milliseconds",l}({})},QUzE:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("+gVj"),s=e("EEJc"),a=e("ajRT"),o=e("mXUL"),r=e("IZUe"),d=e("SVse"),c=e("gp3X"),m=e("sb0X"),p=e("OcYo"),h=e("EApP"),g=e("GiVz"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("SuaG"),S=e("LqlI"),_=e("XED3"),R=e("kn/O");e.d(n,"a",(function(){return F}));var y=t["ɵcrt"]({encapsulation:0,styles:[[".form-group.ng-invalid[_ngcontent-%COMP%]   .invalid-feedback[_ngcontent-%COMP%]{display:block}"]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.c,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.c]),t["ɵdid"](4,671744,[[3,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](8,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](9,null,["",""]))],(function(l,n){l(n,4,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,7,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""))}),(function(l,n){l(n,1,1,[t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass]),l(n,8,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,9,0,n.context.$implicit.name)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["At least one pool is required."]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,73,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](1,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Create Bootstrap Token"])),(l()(),t["ɵeld"](4,0,null,1,69,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,68,"form",[["class","form"],["name","createBootstrapForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,58,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To create a bootstrap token which can be imported by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, and click  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Generate"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](19,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,7,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,26)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,26).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,26)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,26)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](28,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](30,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](31,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,w)),t["ɵdid"](33,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](34,0,null,null,12,"div",[["class","form-group"],["formGroupName","pools"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](35,212992,null,0,i.m,[[3,i.d],[8,null],[8,null]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.d,null,[i.m]),t["ɵdid"](37,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](38,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](41,0,null,0,1,"label",[["class","col-form-label required"],["for","pools"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](44,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,I)),t["ɵdid"](46,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](47,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](48,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.generate()&&t),t}),c.b,c.a)),t["ɵdid"](49,114688,null,0,m.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Generate"])),(l()(),t["ɵeld"](51,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](52,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](55,0,null,0,2,"label",[["class","col-form-label"],["for","token"]],null,null,null,null,null)),(l()(),t["ɵeld"](56,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Token"])),(l()(),t["ɵeld"](58,0,null,0,7,"textarea",[["class","form-control resize-vertical"],["formControlName","token"],["id","token"],["placeholder","Generated token..."],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,59)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,59).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,59)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,59)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](59,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](61,671744,[[5,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](63,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](64,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵted"](-1,null,["          "])),(l()(),t["ɵeld"](66,0,null,null,3,"button",[["aria-label","Copy to Clipboard"],["cdCopy2ClipboardButton","token"],["class","btn btn-primary mb-3 float-right"],["title","Copy to Clipboard"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,67).onClick()&&i),i}),null,null)),t["ɵdid"](67,81920,null,0,p.a,[t.ElementRef,t.Renderer2,h.j,g.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵeld"](68,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Copy to Clipboard"])),(l()(),t["ɵeld"](70,0,null,null,3,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](71,0,null,null,2,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](72,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,f.b,f.a)),t["ɵdid"](73,49152,null,0,v.a,[d.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.createBootstrapForm),l(n,10,0,e.createBootstrapForm),l(n,19,0),l(n,25,0,""),l(n,28,0,"siteName"),l(n,31,0,"siteName"),l(n,33,0,e.createBootstrapForm.showError("siteName",t["ɵnov"](n,7),"required")),l(n,35,0,"pools"),l(n,38,0),l(n,44,0,e.pools),l(n,46,0,e.createBootstrapForm.showError("pools",t["ɵnov"](n,7),"requirePool")),l(n,49,0,e.createBootstrapForm),l(n,52,0),l(n,61,0,"token"),l(n,64,0,"token"),l(n,67,0,"token"),l(n,73,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,30).ngClassUntouched,t["ɵnov"](n,30).ngClassTouched,t["ɵnov"](n,30).ngClassPristine,t["ɵnov"](n,30).ngClassDirty,t["ɵnov"](n,30).ngClassValid,t["ɵnov"](n,30).ngClassInvalid,t["ɵnov"](n,30).ngClassPending,t["ɵnov"](n,31).validClass,t["ɵnov"](n,31).invalidClass),l(n,34,0,t["ɵnov"](n,37).ngClassUntouched,t["ɵnov"](n,37).ngClassTouched,t["ɵnov"](n,37).ngClassPristine,t["ɵnov"](n,37).ngClassDirty,t["ɵnov"](n,37).ngClassValid,t["ɵnov"](n,37).ngClassInvalid,t["ɵnov"](n,37).ngClassPending,t["ɵnov"](n,38).hasErrors,t["ɵnov"](n,38).hasSuccess),l(n,51,0,t["ɵnov"](n,52).hasErrors,t["ɵnov"](n,52).hasSuccess),l(n,58,0,t["ɵnov"](n,63).ngClassUntouched,t["ɵnov"](n,63).ngClassTouched,t["ɵnov"](n,63).ngClassPristine,t["ɵnov"](n,63).ngClassDirty,t["ɵnov"](n,63).ngClassValid,t["ɵnov"](n,63).ngClassInvalid,t["ɵnov"](n,63).ngClassPending,t["ɵnov"](n,64).validClass,t["ɵnov"](n,64).invalidClass)}))}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-bootstrap-create-modal",[],null,null,null,E,y)),t["ɵdid"](1,245760,null,0,C.a,[S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var F=t["ɵccf"]("cd-bootstrap-create-modal",C.a,N,{},{},[])},RIVN:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("C6Ij"),u=e("AWcq"),s=e("NUGo"),a=e("S7zO"),o=e("SVse");class r{transform(l){return"warning"===l?"badge badge-warning":"error"===l?"badge badge-danger":"success"===l?"badge badge-success":"badge badge-info"}}var d=e("25BL"),c=e("uIqm"),m=e("XED3"),p=e("85J/");class h{constructor(l,n,e){this.rbdMirroringService=l,this.cephShortVersionPipe=n,this.i18n=e}ngOnInit(){this.columns=[{prop:"instance_id",name:this.i18n("Instance"),flexGrow:2},{prop:"id",name:this.i18n("ID"),flexGrow:2},{prop:"server_hostname",name:this.i18n("Hostname"),flexGrow:2},{prop:"version",name:this.i18n("Version"),pipe:this.cephShortVersionPipe,flexGrow:2},{prop:"health",name:this.i18n("Health"),cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.data=l.content_data.daemons})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}var g=e("GiVz"),f=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.health_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function b(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{healthTmpl:0}),(l()(),t["ɵeld"](2,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"}),(l()(),t["ɵand"](0,[[1,2],["healthTmpl",2]],null,0,null,v))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex",-1)}),null)}var C=e("HDdC"),S=e("0+/T"),_=e("oxzT"),R=e("vCyI"),y=e("kvvV"),w=e("aexS"),k=e("kn/O"),I=e("aa9H"),E=e("L4us");class N{constructor(l,n,e,t,i){this.authStorageService=l,this.rbdMirroringService=n,this.modalService=e,this.taskWrapper=t,this.i18n=i,this.selection=new R.a,this.data=[],this.permission=this.authStorageService.getPermissions().rbdMirroring;const u={permission:"update",icon:_.a.edit,click:()=>this.editModeModal(),name:this.i18n("Edit Mode"),canBePrimary:()=>!0},s={permission:"create",icon:_.a.add,name:this.i18n("Add Peer"),click:()=>this.editPeersModal("add"),disable:()=>!this.selection.first()||"disabled"===this.selection.first().mirror_mode,visible:()=>!this.getPeerUUID(),canBePrimary:()=>!1},a={permission:"update",icon:_.a.exchange,name:this.i18n("Edit Peer"),click:()=>this.editPeersModal("edit"),visible:()=>!!this.getPeerUUID()},o={permission:"delete",icon:_.a.destroy,name:this.i18n("Delete Peer"),click:()=>this.deletePeersModal(),visible:()=>!!this.getPeerUUID()};this.tableActions=[u,s,a,o]}ngOnInit(){this.columns=[{prop:"name",name:this.i18n("Name"),flexGrow:2},{prop:"mirror_mode",name:this.i18n("Mode"),flexGrow:2},{prop:"leader_id",name:this.i18n("Leader"),flexGrow:2},{prop:"image_local_count",name:this.i18n("# Local"),flexGrow:2},{prop:"image_remote_count",name:this.i18n("# Remote"),flexGrow:2},{prop:"health",name:this.i18n("Health"),cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.data=l.content_data.pools})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}editModeModal(){const l={poolName:this.selection.first().name};this.modalRef=this.modalService.show(I.a,{initialState:l})}editPeersModal(l){const n={poolName:this.selection.first().name,mode:l};"edit"===l&&(n.peerUUID=this.getPeerUUID()),this.modalRef=this.modalService.show(E.a,{initialState:n})}deletePeersModal(){const l=this.selection.first().name,n=this.getPeerUUID();this.modalRef=this.modalService.show(S.a,{initialState:{itemDescription:this.i18n("mirror peer"),itemNames:[`${l} (${n})`],submitActionObservable:()=>new C.a(e=>{this.taskWrapper.wrapTaskAroundCall({task:new y.a("rbd/mirroring/peer/delete",{pool_name:l}),call:this.rbdMirroringService.deletePeer(l,n)}).subscribe(void 0,l=>e.error(l),()=>{this.rbdMirroringService.refresh(),e.complete()})})}})}getPeerUUID(){const l=this.selection.first(),n=this.data.find(n=>l&&l.name===n.name);if(n&&n.peer_uuids)return n.peer_uuids[0]}updateSelection(l){this.selection=l}}var F=e("LqlI"),T=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.health_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function D(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{healthTmpl:0}),(l()(),t["ɵeld"](2,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","name"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,e){var t=!0,i=l.component;return"fetchData"===n&&(t=!1!==i.refresh()&&t),"updateSelection"===n&&(t=!1!==i.updateSelection(e)&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),t["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,s.b,s.a)),t["ɵdid"](5,114688,null,0,a.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵand"](0,[[1,2],["healthTmpl",2]],null,0,null,V))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex",-1,"name","true","single"),l(n,5,0,e.permission,e.selection,e.tableActions)}),null)}var P=e("7qid"),x=e("38Bd"),q=e("pKUh"),B=e("2ZVE");class O{constructor(l,n){this.rbdMirroringService=l,this.i18n=n,this.image_error={data:[],columns:{}},this.image_syncing={data:[],columns:{}},this.image_ready={data:[],columns:{}}}ngOnInit(){this.image_error.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"description",name:this.i18n("Issue"),flexGrow:4},{prop:"state",name:this.i18n("State"),cellTemplate:this.stateTmpl,flexGrow:1}],this.image_syncing.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"progress",name:this.i18n("Progress"),cellTemplate:this.progressTmpl,flexGrow:2},{prop:"state",name:this.i18n("State"),cellTemplate:this.syncTmpl,flexGrow:1}],this.image_ready.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"description",name:this.i18n("Description"),flexGrow:4},{prop:"state",name:this.i18n("State"),cellTemplate:this.stateTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.image_error.data=l.content_data.image_error,this.image_syncing.data=l.content_data.image_syncing,this.image_ready.data=l.content_data.image_ready})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}var M=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function A(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_error.data,e.image_error.columns,"flex",-1)}),null)}function L(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_syncing.data,e.image_syncing.columns,"flex",-1)}),null)}function j(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_ready.data,e.image_ready.columns,"flex",-1)}),null)}function $(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.state_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function G(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","badge badge-info"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Syncing"]))],null,null)}function U(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"progressbar",[["type","info"]],[[1,"max",0],[2,"progress",null]],null,null,P.b,P.a)),t["ɵdid"](1,49152,null,0,x.b,[x.c],{type:[0,"type"],value:[1,"value"]},null)],(function(l,n){l(n,1,0,"info",n.context.value)}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).max,t["ɵnov"](n,1).addClass)}))}function X(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{stateTmpl:0}),t["ɵqud"](402653184,2,{syncTmpl:0}),t["ɵqud"](402653184,3,{progressTmpl:0}),(l()(),t["ɵeld"](4,0,null,null,13,"tabset",[],[[2,"tab-container",null]],null,null,q.b,q.a)),t["ɵdid"](5,180224,[["tabset",4]],0,B.e,[B.f,t.Renderer2,t.ElementRef],null,null),(l()(),t["ɵeld"](6,0,null,0,3,"tab",[["heading","Issues"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](7,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,A)),t["ɵdid"](9,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](10,0,null,0,3,"tab",[["heading","Syncing"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](11,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,L)),t["ɵdid"](13,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](14,0,null,0,3,"tab",[["heading","Ready"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](15,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,j)),t["ɵdid"](17,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["stateTmpl",2]],null,0,null,$)),(l()(),t["ɵand"](0,[[2,2],["syncTmpl",2]],null,0,null,G)),(l()(),t["ɵand"](0,[[3,2],["progressTmpl",2]],null,0,null,U))],(function(l,n){l(n,7,0,"Issues"),l(n,9,0,null==t["ɵnov"](n,5).tabs[0]?null:t["ɵnov"](n,5).tabs[0].active),l(n,11,0,"Syncing"),l(n,13,0,null==t["ɵnov"](n,5).tabs[1]?null:t["ɵnov"](n,5).tabs[1].active),l(n,15,0,"Ready"),l(n,17,0,null==t["ɵnov"](n,5).tabs[2]?null:t["ɵnov"](n,5).tabs[2].active)}),(function(l,n){l(n,4,0,t["ɵnov"](n,5).clazz),l(n,6,0,t["ɵnov"](n,7).id,t["ɵnov"](n,7).active,t["ɵnov"](n,7).addClass,t["ɵnov"](n,7).role,t["ɵnov"](n,7).ariaLabelledby),l(n,10,0,t["ɵnov"](n,11).id,t["ɵnov"](n,11).active,t["ɵnov"](n,11).addClass,t["ɵnov"](n,11).role,t["ɵnov"](n,11).ariaLabelledby),l(n,14,0,t["ɵnov"](n,15).id,t["ɵnov"](n,15).active,t["ɵnov"](n,15).addClass,t["ɵnov"](n,15).role,t["ɵnov"](n,15).ariaLabelledby)}))}var z=e("cxJu");e.d(n,"a",(function(){return K}));var W=t["ɵcrt"]({encapsulation:0,styles:[["cd-mirroring cd-table-actions.float-right ul{right:0!important;left:auto!important}"]],data:{}});function J(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,i.b,i.a)),t["ɵdid"](1,114688,null,0,u.a,[],{status:[0,"status"]},null),(l()(),t["ɵeld"](2,0,null,null,7,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,6,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name:"])),(l()(),t["ɵted"](7,null,[" ",""])),(l()(),t["ɵeld"](8,0,null,null,1,"cd-table-actions",[["class","table-actions float-right"]],null,null,null,s.b,s.a)),t["ɵdid"](9,114688,null,0,a.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵeld"](10,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Daemons"])),(l()(),t["ɵeld"](14,0,null,null,1,"cd-mirroring-daemons",[],null,null,null,b,f)),t["ɵdid"](15,245760,null,0,h,[m.a,p.a,g.a],null,null),(l()(),t["ɵeld"](16,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵeld"](19,0,null,null,1,"cd-mirroring-pools",[],null,null,null,D,T)),t["ɵdid"](20,245760,null,0,N,[w.a,m.a,F.b,k.a,g.a],null,null),(l()(),t["ɵeld"](21,0,null,null,5,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](22,0,null,null,4,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Images"])),(l()(),t["ɵeld"](25,0,null,null,1,"cd-mirroring-images",[],null,null,null,X,M)),t["ɵdid"](26,245760,null,0,O,[m.a,g.a],null,null)],(function(l,n){var e=n.component;l(n,1,0,e.status),l(n,9,0,e.permission,e.selection,e.tableActions),l(n,15,0),l(n,20,0),l(n,26,0)}),(function(l,n){l(n,7,0,n.component.siteName)}))}function Y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-mirroring",[],null,null,null,J,W)),t["ɵdid"](1,245760,null,0,z.a,[w.a,m.a,F.b,g.a],null,null)],(function(l,n){l(n,1,0)}),null)}var K=t["ɵccf"]("cd-mirroring",z.a,Y,{},{},[])},Sofw:function(l,n,e){"use strict";e.d(n,"a",(function(){return a}));var t=e("s7LF"),i=(e("my5R"),e("mtw6")),u=e("QFaf"),s=e("1Ni5");e("aexS"),e("9nlD");class a{constructor(l,n,e,t,i){this.authStorageService=l,this.bsModalRef=n,this.iscsiService=e,this.notificationService=t,this.i18n=i,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.permission=this.authStorageService.getPermissions().iscsi}ngOnInit(){this.hasPermission=this.permission.update,this.createForm(),this.iscsiService.getDiscovery().subscribe(l=>{this.discoveryForm.patchValue(l)})}createForm(){this.discoveryForm=new u.a({user:new t.i({value:"",disabled:!this.hasPermission}),password:new t.i({value:"",disabled:!this.hasPermission}),mutual_user:new t.i({value:"",disabled:!this.hasPermission}),mutual_password:new t.i({value:"",disabled:!this.hasPermission})}),s.a.validateIf(this.discoveryForm.get("user"),()=>this.discoveryForm.getValue("password")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("password"),()=>this.discoveryForm.getValue("user")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("mutual_user"),()=>this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("mutual_password"),()=>this.discoveryForm.getValue("mutual_user"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user")])}submitAction(){this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(()=>{this.notificationService.show(i.a.success,this.i18n("Updated discovery authentication")),this.bsModalRef.hide()},()=>{this.discoveryForm.setErrors({cdSubmitButton:!0})})}}},SuaG:function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("s7LF"),i=e("LvDl"),u=e("GyhO"),s=e("cp0P"),a=e("vkgz"),o=e("NJ9Y"),r=(e("XED3"),e("QFaf")),d=e("kvvV");e("kn/O");class c{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.pools=[],this.createForm()}createForm(){this.createBootstrapForm=new r.a({siteName:new t.i("",{validators:[t.B.required]}),pools:new t.k({},{validators:[this.validatePools()]}),token:new t.i("",{})})}ngOnInit(){this.createBootstrapForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(l=>{this.createBootstrapForm.get("siteName").setValue(l.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.pools=l.content_data.pools.reduce((l,n)=>(l.push({name:n.name,mirror_mode:n.mirror_mode}),l),[]);const n=this.createBootstrapForm.get("pools");i.each(this.pools,l=>{const e=l.name,i="disabled"===l.mirror_mode,u=n.controls[e];u?i&&u.disabled?u.enable():!i&&u.enabled&&(u.disable(),u.setValue(!0)):n.addControl(e,new t.i({value:!i,disabled:!i}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return l=>{let n=0;return i.each(l.controls,l=>{!0===l.value&&++n}),n>0?null:{requirePool:!0}}}generate(){this.createBootstrapForm.get("token").setValue("");let l="";const n=[],e=this.createBootstrapForm.get("pools");i.each(e.controls,(e,t)=>{!0===e.value&&(l=t,e.disabled||n.push(t))});const t={mirror_mode:"image"},r=Object(u.a)(this.rbdMirroringService.setSiteName(this.createBootstrapForm.getValue("siteName")),Object(s.a)(n.map(l=>this.rbdMirroringService.updatePool(l,t))),this.rbdMirroringService.createBootstrapToken(l).pipe(Object(a.a)(l=>this.createBootstrapForm.get("token").setValue(l.token)))).pipe(Object(o.a)()),c=()=>{this.rbdMirroringService.refresh(),this.createBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new d.a("rbd/mirroring/bootstrap/create",{}),call:r}).subscribe(void 0,c,c)}}},VBM6:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("SVse"),a=e("s7LF"),o=e("+gVj"),r=e("mXUL"),d=e("IZUe"),c=e("gp3X"),m=e("sb0X"),p=e("KVJa"),h=e("Z21x"),g=e("sne2"),f=e("L4us"),v=e("LqlI"),b=e("XED3"),C=e("kn/O");e.d(n,"a",(function(){return P}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Edit"]))],null,null)}function R(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Add"]))],null,null)}function y(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Edit"]))],null,null)}function w(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Add"]))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The cluster name is not valid."]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The CephX ID is not valid."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The monitory address is not valid."]))],null,null)}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX key must be base64 encoded."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,106,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,7,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,5,null,null,null,null,null,null,null)),t["ɵdid"](4,16384,null,0,s.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,_)),t["ɵdid"](6,278528,null,0,s.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,R)),t["ɵdid"](8,16384,null,0,s.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],null,null),(l()(),t["ɵted"](-1,null,[" pool mirror peer"])),(l()(),t["ɵeld"](10,0,null,1,96,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,95,"form",[["class","form"],["name","editPeerForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,13).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,13).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,16).onSubmit()&&i),i}),null,null)),t["ɵdid"](12,16384,null,0,a.G,[],null,null),t["ɵdid"](13,540672,[["formDir",4]],0,a.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,a.d,null,[a.l]),t["ɵdid"](15,16384,null,0,a.s,[[4,a.d]],null,null),t["ɵdid"](16,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](17,0,null,null,82,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](18,0,null,null,14,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,13,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](20,0,null,null,5,null,null,null,null,null,null,null)),t["ɵdid"](21,16384,null,0,s.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,y)),t["ɵdid"](23,278528,null,0,s.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](25,16384,null,0,s.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],null,null),(l()(),t["ɵted"](-1,null,[" the pool mirror peer attributes for pool "])),(l()(),t["ɵeld"](27,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](28,null,["",""])),(l()(),t["ɵted"](-1,null,[" and click "])),(l()(),t["ɵeld"](30,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Submit"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](33,0,null,null,17,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](34,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](37,0,null,0,1,"label",[["class","col-form-label required"],["for","clusterName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Cluster Name"])),(l()(),t["ɵeld"](39,0,null,0,7,"input",[["autofocus",""],["class","form-control"],["formControlName","clusterName"],["id","clusterName"],["name","clusterName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,41)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,41).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,41)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,41)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](40,4210688,null,0,d.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](41,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](43,671744,[[1,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](45,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](46,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](48,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,I)),t["ɵdid"](50,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](51,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](52,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](55,0,null,0,1,"label",[["class","col-form-label required"],["for","clientID"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX ID"])),(l()(),t["ɵeld"](57,0,null,0,6,"input",[["class","form-control"],["formControlName","clientID"],["id","clientID"],["name","clientID"],["placeholder","CephX ID..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,58)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,58).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,58)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,58)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](58,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](60,671744,[[3,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](62,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](63,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,E)),t["ɵdid"](65,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,N)),t["ɵdid"](67,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](68,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](69,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](72,0,null,0,2,"label",[["class","col-form-label"],["for","monAddr"]],null,null,null,null,null)),(l()(),t["ɵeld"](73,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Monitor Addresses"])),(l()(),t["ɵeld"](75,0,null,0,6,"input",[["class","form-control"],["formControlName","monAddr"],["id","monAddr"],["name","monAddr"],["placeholder","Comma-delimited addresses..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,76)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,76).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,76)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,76)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](76,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](78,671744,[[5,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](80,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](81,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,F)),t["ɵdid"](83,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](84,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](85,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](88,0,null,0,2,"label",[["class","col-form-label"],["for","key"]],null,null,null,null,null)),(l()(),t["ɵeld"](89,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX Key"])),(l()(),t["ɵeld"](91,0,null,0,6,"input",[["class","form-control"],["formControlName","key"],["id","key"],["name","key"],["placeholder","Base64-encoded key..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,92)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,92).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,92)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,92)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](92,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](94,671744,[[7,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](96,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](97,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,T)),t["ɵdid"](99,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](100,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](101,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](102,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),c.b,c.a)),t["ɵdid"](103,114688,null,0,m.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Submit"])),(l()(),t["ɵeld"](105,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,p.b,p.a)),t["ɵdid"](106,49152,null,0,h.a,[s.Location,g.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,4,0,e.mode),l(n,6,0,"edit"),l(n,13,0,e.editPeerForm),l(n,16,0,e.editPeerForm),l(n,21,0,e.mode),l(n,23,0,"edit"),l(n,34,0),l(n,40,0,""),l(n,43,0,"clusterName"),l(n,46,0,"clusterName"),l(n,48,0,e.editPeerForm.showError("clusterName",t["ɵnov"](n,13),"required")),l(n,50,0,e.editPeerForm.showError("clusterName",t["ɵnov"](n,13),"invalidClusterName")),l(n,52,0),l(n,60,0,"clientID"),l(n,63,0,"clientID"),l(n,65,0,e.editPeerForm.showError("clientID",t["ɵnov"](n,13),"required")),l(n,67,0,e.editPeerForm.showError("clientID",t["ɵnov"](n,13),"invalidClientID")),l(n,69,0),l(n,78,0,"monAddr"),l(n,81,0,"monAddr"),l(n,83,0,e.editPeerForm.showError("monAddr",t["ɵnov"](n,13),"invalidMonAddr")),l(n,85,0),l(n,94,0,"key"),l(n,97,0,"key"),l(n,99,0,e.editPeerForm.showError("key",t["ɵnov"](n,13),"invalidKey")),l(n,103,0,e.editPeerForm),l(n,106,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,11,0,t["ɵnov"](n,15).ngClassUntouched,t["ɵnov"](n,15).ngClassTouched,t["ɵnov"](n,15).ngClassPristine,t["ɵnov"](n,15).ngClassDirty,t["ɵnov"](n,15).ngClassValid,t["ɵnov"](n,15).ngClassInvalid,t["ɵnov"](n,15).ngClassPending),l(n,28,0,e.poolName),l(n,33,0,t["ɵnov"](n,34).hasErrors,t["ɵnov"](n,34).hasSuccess),l(n,39,0,t["ɵnov"](n,45).ngClassUntouched,t["ɵnov"](n,45).ngClassTouched,t["ɵnov"](n,45).ngClassPristine,t["ɵnov"](n,45).ngClassDirty,t["ɵnov"](n,45).ngClassValid,t["ɵnov"](n,45).ngClassInvalid,t["ɵnov"](n,45).ngClassPending,t["ɵnov"](n,46).validClass,t["ɵnov"](n,46).invalidClass),l(n,51,0,t["ɵnov"](n,52).hasErrors,t["ɵnov"](n,52).hasSuccess),l(n,57,0,t["ɵnov"](n,62).ngClassUntouched,t["ɵnov"](n,62).ngClassTouched,t["ɵnov"](n,62).ngClassPristine,t["ɵnov"](n,62).ngClassDirty,t["ɵnov"](n,62).ngClassValid,t["ɵnov"](n,62).ngClassInvalid,t["ɵnov"](n,62).ngClassPending,t["ɵnov"](n,63).validClass,t["ɵnov"](n,63).invalidClass),l(n,68,0,t["ɵnov"](n,69).hasErrors,t["ɵnov"](n,69).hasSuccess),l(n,75,0,t["ɵnov"](n,80).ngClassUntouched,t["ɵnov"](n,80).ngClassTouched,t["ɵnov"](n,80).ngClassPristine,t["ɵnov"](n,80).ngClassDirty,t["ɵnov"](n,80).ngClassValid,t["ɵnov"](n,80).ngClassInvalid,t["ɵnov"](n,80).ngClassPending,t["ɵnov"](n,81).validClass,t["ɵnov"](n,81).invalidClass),l(n,84,0,t["ɵnov"](n,85).hasErrors,t["ɵnov"](n,85).hasSuccess),l(n,91,0,t["ɵnov"](n,96).ngClassUntouched,t["ɵnov"](n,96).ngClassTouched,t["ɵnov"](n,96).ngClassPristine,t["ɵnov"](n,96).ngClassDirty,t["ɵnov"](n,96).ngClassValid,t["ɵnov"](n,96).ngClassInvalid,t["ɵnov"](n,96).ngClassPending,t["ɵnov"](n,97).validClass,t["ɵnov"](n,97).invalidClass)}))}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-pool-edit-peer-modal",[],null,null,null,V,S)),t["ɵdid"](1,114688,null,0,f.a,[v.a,b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var P=t["ɵccf"]("cd-pool-edit-peer-modal",f.a,D,{},{},[])},WkyA:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{constructor(){}}},WxU5:function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e("Ekvf"),e("F83c"),e("2EZI");var t=e("kvvV");e("aexS"),e("kn/O");class i{constructor(l,n,e,t,i,u){this.authStorageService=l,this.rbdService=n,this.modalRef=e,this.fb=t,this.poolService=i,this.taskWrapper=u,this.poolPermission=this.authStorageService.getPermissions().pool}createForm(){this.purgeForm=this.fb.group({poolName:""})}ngOnInit(){this.poolPermission.read&&this.poolService.list(["pool_name","application_metadata"]).then(l=>{this.pools=l.filter(l=>l.application_metadata.includes("rbd")).map(l=>l.pool_name)}),this.createForm()}purge(){const l=this.purgeForm.getValue("poolName")||"";this.taskWrapper.wrapTaskAroundCall({task:new t.a("rbd/trash/purge",{pool_name:l}),call:this.rbdService.purgeTrash(l)}).subscribe(void 0,()=>{this.purgeForm.setErrors({cdSubmitButton:!0})},()=>{this.modalRef.hide()})}}},XED3:function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("mrSG"),i=e("IheW"),u=e("2Vo4"),s=e("pLZG"),a=e("xTzq"),o=e("lOp/"),r=e("8Y7J"),d=e("pL04");let c=(()=>{let l=class{constructor(l,n){this.http=l,this.timerService=n,this.REFRESH_INTERVAL=3e4,this.summaryDataSource=new u.a(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/block/mirroring/summary")}retrieveSummaryObserver(){return l=>{this.summaryDataSource.next(l)}}subscribeSummary(l,n){return this.summaryData$.pipe(Object(s.a)(l=>!!l)).subscribe(l,n)}getPool(l){return this.http.get(`api/block/mirroring/pool/${l}`)}updatePool(l,n){return this.http.put(`api/block/mirroring/pool/${l}`,n,{observe:"response"})}getSiteName(){return this.http.get("api/block/mirroring/site_name")}setSiteName(l){return this.http.put("api/block/mirroring/site_name",{site_name:l},{observe:"response"})}createBootstrapToken(l){return this.http.post(`api/block/mirroring/pool/${l}/bootstrap/token`,{})}importBootstrapToken(l,n,e){return this.http.post(`api/block/mirroring/pool/${l}/bootstrap/peer`,{direction:n,token:e},{observe:"response"})}getPeer(l,n){return this.http.get(`api/block/mirroring/pool/${l}/peer/${n}`)}addPeer(l,n){return this.http.post(`api/block/mirroring/pool/${l}/peer`,n,{observe:"response"})}updatePeer(l,n,e){return this.http.put(`api/block/mirroring/pool/${l}/peer/${n}`,e,{observe:"response"})}deletePeer(l,n){return this.http.delete(`api/block/mirroring/pool/${l}/peer/${n}`,{observe:"response"})}};return l.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new l(r["ɵɵinject"](i.c),r["ɵɵinject"](o.a))},token:l,providedIn:d.a}),t.__decorate([t.__param(0,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[String]),t.__metadata("design:returntype",void 0)],l.prototype,"setSiteName",null),t.__decorate([t.__param(1,a.b),t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[String,String,String]),t.__metadata("design:returntype",void 0)],l.prototype,"importBootstrapToken",null),l=t.__decorate([a.a,t.__metadata("design:paramtypes",[i.c,o.a])],l),l})()},Z4cD:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=e("LvDl"),u=(e("my5R"),e("QFaf"));class s{constructor(l,n){this.modalRef=l,this.iscsiService=n}ngOnInit(){const l={backstore:new t.i(this.imagesSettings[this.image].backstore),lun:new t.i(this.imagesSettings[this.image].lun),wwn:new t.i(this.imagesSettings[this.image].wwn)};i.forEach(this.backstores,n=>{const e=this.imagesSettings[this.image][n]||{};i.forIn(this.disk_default_controls[n],(n,i)=>{l[i]=new t.i(e[i])})}),this.settingsForm=new u.a(l)}getDiskControlLimits(l,n){return this.disk_controls_limits?this.disk_controls_limits[l][n]:{type:"int"}}save(){const l=this.settingsForm.controls.backstore.value,n=this.settingsForm.controls.lun.value,e=this.settingsForm.controls.wwn.value,t={};i.forIn(this.settingsForm.controls,(n,e)=>{""!==n.value&&null!==n.value&&e in this.disk_default_controls[this.settingsForm.value.backstore]&&(t[e]=n.value,i.forEach(this.backstores,t=>{t!==l&&e in(this.imagesSettings[this.image][t]||{})&&(this.imagesSettings[this.image][t][e]=n.value)}))}),this.imagesSettings[this.image].backstore=l,this.imagesSettings[this.image].lun=n,this.imagesSettings[this.image].wwn=e,this.imagesSettings[this.image][l]=t,this.imagesSettings=Object.assign({},this.imagesSettings),this.control.updateValueAndValidity({emitEvent:!1}),this.modalRef.hide()}}},Z5tW:function(l,n,e){"use strict";e.d(n,"a",(function(){return d}));var t=e("LvDl"),i=e("cp0P"),u=(e("Ekvf"),e("F83c"),e("0+/T")),s=(e("sne2"),e("oxzT")),a=e("mtw6"),o=e("vCyI"),r=(e("aexS"),e("9nlD"),e("daK0"));class d{constructor(l,n,e,i,u,a,r){this.authStorageService=l,this.rbdService=n,this.poolService=e,this.modalService=i,this.notificationService=u,this.i18n=a,this.actionLabels=r,this.selection=new o.a,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"create",icon:s.a.add,click:()=>this.createModal(),name:this.actionLabels.CREATE},{permission:"delete",icon:s.a.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE,disable:()=>!this.selection.first()||!t.isUndefined(this.getDeleteDisableDesc()),disableDesc:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:this.i18n("Namespace"),prop:"namespace",flexGrow:1},{name:this.i18n("Pool"),prop:"pool",flexGrow:1},{name:this.i18n("Total images"),prop:"num_images",flexGrow:1}],this.refresh()}refresh(){this.poolService.list(["pool_name","type","application_metadata"]).then(l=>{l=l.filter(l=>this.rbdService.isRBDPool(l)&&"replicated"===l.type);const n=[];l.forEach(l=>{n.push(this.rbdService.listNamespaces(l.pool_name))}),n.length>0?Object(i.a)(n).subscribe(n=>{const e=[];for(let t=0;t<n.length;t++){const i=l[t].pool_name;n[t].forEach(l=>{e.push({id:`${i}/${l.namespace}`,pool:i,namespace:l.namespace,num_images:l.num_images})})}this.namespaces=e}):this.namespaces=[]})}updateSelection(l){this.selection=l}createModal(){this.modalRef=this.modalService.show(r.a),this.modalRef.content.onSubmit.subscribe(()=>{this.refresh()})}deleteModal(){const l=this.selection.first().pool,n=this.selection.first().namespace;this.modalRef=this.modalService.show(u.a,{initialState:{itemDescription:"Namespace",itemNames:[`${l}/${n}`],submitAction:()=>this.rbdService.deleteNamespace(l,n).subscribe(()=>{this.notificationService.show(a.a.success,this.i18n("Deleted namespace '{{pool}}/{{namespace}}'",{pool:l,namespace:n})),this.modalRef.hide(),this.refresh()},()=>{this.modalRef.content.stopLoadingSpinner()})}})}getDeleteDisableDesc(){const l=this.selection.first();if(l&&l.num_images>0)return this.i18n("Namespace contains images")}}},a6qe:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=e("LvDl"),u=(e("my5R"),e("QFaf"));class s{constructor(l,n){this.modalRef=l,this.iscsiService=n}ngOnInit(){const l={};i.forIn(this.target_default_controls,(n,e)=>{l[e]=new t.i(this.target_controls.value[e])}),this.settingsForm=new u.a(l)}save(){const l={};i.forIn(this.settingsForm.controls,(n,e)=>{""!==n.value&&null!==n.value&&(l[e]=n.value)}),this.target_controls.setValue(l),this.modalRef.hide()}getTargetControlLimits(l){return this.target_controls_limits?this.target_controls_limits[l]:["Yes","No"].includes(this.target_default_controls[l])?{type:"bool"}:{type:"int"}}}},aAWM:function(l,n,e){"use strict";e("uIqm");var t=e("PhyI");class i{transform(l){return{0:"global",1:"pool",2:"image"}[l]}}e("aXbf"),e("o8EM"),e.d(n,"a",(function(){return u}));class u{constructor(l,n,e){this.formatterService=l,this.rbdConfigurationService=n,this.i18n=e,this.sourceField=t.a,this.typeField=t.b}ngOnInit(){this.poolConfigurationColumns=[{prop:"displayName",name:this.i18n("Name")},{prop:"description",name:this.i18n("Description")},{prop:"name",name:this.i18n("Key")},{prop:"source",name:this.i18n("Source"),cellTemplate:this.configurationSourceTpl,pipe:new i},{prop:"value",name:this.i18n("Value"),cellTemplate:this.configurationValueTpl}]}ngOnChanges(){this.data&&(this.data=this.data.filter(l=>this.rbdConfigurationService.getOptionFields().map(l=>l.name).includes(l.name)))}}},aa9H:function(l,n,e){"use strict";var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{}e.d(n,"a",(function(){return a}));class a{constructor(l,n,e,t){this.modalRef=l,this.i18n=n,this.rbdMirroringService=e,this.taskWrapper=t,this.bsConfig={containerClass:"theme-default"},this.peerExists=!1,this.mirrorModes=[{id:"disabled",name:this.i18n("Disabled")},{id:"pool",name:this.i18n("Pool")},{id:"image",name:this.i18n("Image")}],this.createForm()}createForm(){this.editModeForm=new i.a({mirrorMode:new t.i("",{validators:[t.B.required,this.validateMode.bind(this)]})})}ngOnInit(){this.pattern=`${this.poolName}`,this.rbdMirroringService.getPool(this.poolName).subscribe(l=>{this.setResponse(l)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.peerExists=!1;const n=l.content_data.pools.find(l=>this.poolName===l.name);this.peerExists=n&&n.peer_uuids.length})}ngOnDestroy(){this.subs.unsubscribe()}validateMode(l){return"disabled"===l.value&&this.peerExists?{cannotDisable:{value:l.value}}:null}setResponse(l){this.editModeForm.get("mirrorMode").setValue(l.mirror_mode)}update(){const l=new s;l.mirror_mode=this.editModeForm.getValue("mirrorMode"),this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/mirroring/pool/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePool(this.poolName,l)}).subscribe(void 0,()=>this.editModeForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},bUo2:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("gp3X"),u=e("sb0X"),s=e("EEJc"),a=e("ajRT"),o=e("s7LF"),r=e("+gVj"),d=e("mXUL"),c=e("SVse"),m=e("D4zM"),p=e("OcYo"),h=e("EApP"),g=e("GiVz"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("Sofw"),S=e("aexS"),_=e("LqlI"),R=e("my5R"),y=e("9nlD");e.d(n,"a",(function(){return B}));var w=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function P(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submitAction()&&t),t}),i.b,i.a)),t["ɵdid"](1,114688,null,0,u.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Submit"]))],(function(l,n){l(n,1,0,n.component.discoveryForm)}),null)}function x(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,102,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](1,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Discovery Authentication"])),(l()(),t["ɵeld"](4,0,null,1,98,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,97,"form",[["name","discoveryForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,o.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,o.d,null,[o.l]),t["ɵdid"](9,16384,null,0,o.s,[[4,o.d]],null,null),t["ɵdid"](10,16384,null,0,r.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,85,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](13,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User"])),(l()(),t["ɵeld"](18,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["id","user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,20)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,20).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,20)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,20)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](20,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](22,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](24,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](25,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](27,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](29,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](30,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](31,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](34,0,null,0,1,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Password"])),(l()(),t["ɵeld"](36,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](37,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](38,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,39)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,39).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,39)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,39)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](39,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](41,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](43,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](44,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](45,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](46,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,47).onClick()&&i),i}),null,null)),t["ɵdid"](47,81920,null,0,m.a,[t.ElementRef,t.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),t["ɵeld"](48,0,null,null,1,"button",[["cdCopy2ClipboardButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,49).onClick()&&i),i}),null,null)),t["ɵdid"](49,81920,null,0,p.a,[t.ElementRef,t.Renderer2,h.j,g.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](51,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,N)),t["ɵdid"](53,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](54,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](55,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](58,0,null,0,2,"label",[["class","cd-col-form-label"],["for","mutual_user"]],null,null,null,null,null)),(l()(),t["ɵeld"](59,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mutual User"])),(l()(),t["ɵeld"](61,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](62,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["id","mutual_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,63)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,63).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,63)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,63)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](63,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](65,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](67,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](68,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,F)),t["ɵdid"](70,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,T)),t["ɵdid"](72,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](73,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](74,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](77,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mutual_password"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mutual Password"])),(l()(),t["ɵeld"](79,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](80,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](81,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["id","mutual_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,82)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,82).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,82)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,82)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](82,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](84,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](86,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](87,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](88,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](89,0,null,null,1,"button",[["cdPasswordButton","mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,90).onClick()&&i),i}),null,null)),t["ɵdid"](90,81920,null,0,m.a,[t.ElementRef,t.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),t["ɵeld"](91,0,null,null,1,"button",[["cdCopy2ClipboardButton","mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,92).onClick()&&i),i}),null,null)),t["ɵdid"](92,81920,null,0,p.a,[t.ElementRef,t.Renderer2,h.j,g.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,V)),t["ɵdid"](94,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,D)),t["ɵdid"](96,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](97,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](98,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,P)),t["ɵdid"](100,16384,null,0,c.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](101,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,f.b,f.a)),t["ɵdid"](102,49152,null,0,v.a,[c.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.bsModalRef),l(n,7,0,e.discoveryForm),l(n,10,0,e.discoveryForm),l(n,13,0),l(n,22,0,"user"),l(n,25,0,"user"),l(n,27,0,e.discoveryForm.showError("user",t["ɵnov"](n,7),"required")),l(n,29,0,e.discoveryForm.showError("user",t["ɵnov"](n,7),"pattern")),l(n,31,0),l(n,41,0,"password"),l(n,44,0,"password"),l(n,47,0,"password"),l(n,49,0,"password"),l(n,51,0,e.discoveryForm.showError("password",t["ɵnov"](n,7),"required")),l(n,53,0,e.discoveryForm.showError("password",t["ɵnov"](n,7),"pattern")),l(n,55,0),l(n,65,0,"mutual_user"),l(n,68,0,"mutual_user"),l(n,70,0,e.discoveryForm.showError("mutual_user",t["ɵnov"](n,7),"required")),l(n,72,0,e.discoveryForm.showError("mutual_user",t["ɵnov"](n,7),"pattern")),l(n,74,0),l(n,84,0,"mutual_password"),l(n,87,0,"mutual_password"),l(n,90,0,"mutual_password"),l(n,92,0,"mutual_password"),l(n,94,0,e.discoveryForm.showError("mutual_password",t["ɵnov"](n,7),"required")),l(n,96,0,e.discoveryForm.showError("mutual_password",t["ɵnov"](n,7),"pattern")),l(n,100,0,e.hasPermission),l(n,102,0,"Cancel",e.bsModalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,12,0,t["ɵnov"](n,13).hasErrors,t["ɵnov"](n,13).hasSuccess),l(n,19,0,t["ɵnov"](n,24).ngClassUntouched,t["ɵnov"](n,24).ngClassTouched,t["ɵnov"](n,24).ngClassPristine,t["ɵnov"](n,24).ngClassDirty,t["ɵnov"](n,24).ngClassValid,t["ɵnov"](n,24).ngClassInvalid,t["ɵnov"](n,24).ngClassPending,t["ɵnov"](n,25).validClass,t["ɵnov"](n,25).invalidClass),l(n,30,0,t["ɵnov"](n,31).hasErrors,t["ɵnov"](n,31).hasSuccess),l(n,38,0,t["ɵnov"](n,43).ngClassUntouched,t["ɵnov"](n,43).ngClassTouched,t["ɵnov"](n,43).ngClassPristine,t["ɵnov"](n,43).ngClassDirty,t["ɵnov"](n,43).ngClassValid,t["ɵnov"](n,43).ngClassInvalid,t["ɵnov"](n,43).ngClassPending,t["ɵnov"](n,44).validClass,t["ɵnov"](n,44).invalidClass),l(n,54,0,t["ɵnov"](n,55).hasErrors,t["ɵnov"](n,55).hasSuccess),l(n,62,0,t["ɵnov"](n,67).ngClassUntouched,t["ɵnov"](n,67).ngClassTouched,t["ɵnov"](n,67).ngClassPristine,t["ɵnov"](n,67).ngClassDirty,t["ɵnov"](n,67).ngClassValid,t["ɵnov"](n,67).ngClassInvalid,t["ɵnov"](n,67).ngClassPending,t["ɵnov"](n,68).validClass,t["ɵnov"](n,68).invalidClass),l(n,73,0,t["ɵnov"](n,74).hasErrors,t["ɵnov"](n,74).hasSuccess),l(n,81,0,t["ɵnov"](n,86).ngClassUntouched,t["ɵnov"](n,86).ngClassTouched,t["ɵnov"](n,86).ngClassPristine,t["ɵnov"](n,86).ngClassDirty,t["ɵnov"](n,86).ngClassValid,t["ɵnov"](n,86).ngClassInvalid,t["ɵnov"](n,86).ngClassPending,t["ɵnov"](n,87).validClass,t["ɵnov"](n,87).invalidClass)}))}function q(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-discovery-modal",[],null,null,null,x,w)),t["ɵdid"](1,114688,null,0,C.a,[S.a,_.a,R.a,y.a,g.a],null,null)],(function(l,n){l(n,1,0)}),null)}var B=t["ɵccf"]("cd-iscsi-target-discovery-modal",C.a,q,{},{},[])},chpi:function(l,n,e){"use strict";e.d(n,"a",(function(){return h}));var t=e("LvDl"),i=e("wd/R"),u=(e("F83c"),e("0+/T")),s=(e("sne2"),e("uIqm"),e("x38r")),a=e("oxzT"),o=e("yJti"),r=e("vCyI"),d=e("kvvV"),c=e("jVDg"),m=(e("a0VL"),e("aexS"),e("VTlA"),e("kn/O"),e("WxU5")),p=e("2GqK");class h{constructor(l,n,e,t,i,u,s,o){this.authStorageService=l,this.rbdService=n,this.modalService=e,this.cdDatePipe=t,this.taskListService=i,this.taskWrapper=u,this.i18n=s,this.actionLabels=o,this.icons=a.a,this.executingTasks=[],this.selection=new r.a,this.disablePurgeBtn=!0,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"update",icon:a.a.undo,click:()=>this.restoreModal(),name:this.actionLabels.RESTORE},{permission:"delete",icon:a.a.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:1,cellTransformation:s.a.executing},{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Pool"),prop:"pool_name",flexGrow:1},{name:this.i18n("Namespace"),prop:"namespace",flexGrow:1},{name:this.i18n("Status"),prop:"deferment_end_time",flexGrow:1,cellTemplate:this.expiresTpl},{name:this.i18n("Deleted At"),prop:"deletion_time",flexGrow:1,pipe:this.cdDatePipe}],this.taskListService.init(()=>this.rbdService.listTrash(),l=>this.prepareResponse(l),l=>this.images=l,()=>this.onFetchError(),l=>["rbd/trash/remove","rbd/trash/restore"].includes(l.name),(l,n)=>new c.a(l.pool_name,l.namespace,l.id).toString()===n.metadata.image_id_spec,void 0)}prepareResponse(l){let n=[];const e={};l.forEach(l=>{t.isUndefined(e[l.status])&&(e[l.status]=[]),e[l.status].push(l.pool_name),n=n.concat(l.value),this.disablePurgeBtn=!n.length});const u=[];return t.forEach(e,(l,n)=>{u.push({status:parseInt(n,10),statusFor:(l.length>1?"pools ":"pool ")+"<strong>"+l.join("</strong>, <strong>")+"</strong>"})}),this.viewCacheStatusList=u,n.forEach(l=>{l.cdIsExpired=i().isAfter(l.deferment_end_time)}),n}onFetchError(){this.table.reset(),this.viewCacheStatusList=[{status:o.a.ValueException}]}updateSelection(l){this.selection=l}restoreModal(){const l={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,imageId:this.selection.first().id};this.modalRef=this.modalService.show(p.a,{initialState:l})}deleteModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().id,t=this.selection.first().deferment_end_time,i=new c.a(l,n,e);this.modalRef=this.modalService.show(u.a,{initialState:{itemDescription:"RBD",itemNames:[i],bodyTemplate:this.deleteTpl,bodyContext:{$implicit:t},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new d.a("rbd/trash/remove",{image_id_spec:i.toString()}),call:this.rbdService.removeTrash(i,!0)})}})}isExpired(l){return i().isAfter(l)}purgeModal(){this.modalService.show(m.a)}}},cxJu:function(l,n,e){"use strict";e.d(n,"a",(function(){return r}));var t=e("quSY"),i=(e("XED3"),e("oxzT")),u=e("vCyI"),s=(e("aexS"),e("SuaG")),a=e("+26A"),o=e("puGn");class r{constructor(l,n,e,s){this.authStorageService=l,this.rbdMirroringService=n,this.modalService=e,this.i18n=s,this.selection=new u.a,this.peersExist=!0,this.subs=new t.a,this.permission=this.authStorageService.getPermissions().rbdMirroring;const a={permission:"update",icon:i.a.edit,click:()=>this.editSiteNameModal(),name:this.i18n("Edit Site Name"),canBePrimary:()=>!0,disable:()=>!1},o={permission:"update",icon:i.a.upload,click:()=>this.createBootstrapModal(),name:this.i18n("Create Bootstrap Token"),disable:()=>!1},r={permission:"update",icon:i.a.download,click:()=>this.importBootstrapModal(),name:this.i18n("Import Bootstrap Token"),disable:()=>this.peersExist};this.tableActions=[a,o,r]}ngOnInit(){this.subs.add(this.rbdMirroringService.startPolling()),this.subs.add(this.rbdMirroringService.subscribeSummary(l=>{this.status=l.content_data.status,this.siteName=l.site_name,this.peersExist=!!l.content_data.pools.find(l=>l.peer_uuids.length>0)}))}ngOnDestroy(){this.subs.unsubscribe()}editSiteNameModal(){this.modalRef=this.modalService.show(o.a,{initialState:{siteName:this.siteName}})}createBootstrapModal(){this.modalRef=this.modalService.show(s.a,{initialState:{siteName:this.siteName}})}importBootstrapModal(){this.modalRef=this.modalService.show(a.a,{initialState:{siteName:this.siteName}})}}},daK0:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("s7LF"),i=e("XNiG"),u=(e("Ekvf"),e("F83c"),e("mtw6")),s=e("QFaf"),a=e("kvvV");e("aexS"),e("9nlD");class o{constructor(l,n,e,t,i,u){this.modalRef=l,this.authStorageService=n,this.notificationService=e,this.poolService=t,this.rbdService=i,this.i18n=u,this.pools=null,this.editing=!1,this.poolPermission=this.authStorageService.getPermissions().pool,this.createForm()}createForm(){this.namespaceForm=new s.a({pool:new t.i(""),namespace:new t.i("")},this.validator(),this.asyncValidator())}validator(){return l=>{const n=l.get("pool"),e=l.get("namespace");let t=null;n.value||(t={required:!0}),n.setErrors(t);let i=null;return e.value||(i={required:!0}),e.setErrors(i),null}}asyncValidator(){return l=>new Promise(n=>{const e=l.get("pool"),t=l.get("namespace");this.rbdService.listNamespaces(e.value).subscribe(l=>{if(l.some(l=>l.namespace===t.value)){const l={namespaceExists:!0};t.setErrors(l),n(l)}else n(null)})})}ngOnInit(){this.onSubmit=new i.a,this.poolPermission.read&&this.poolService.list(["pool_name","type","application_metadata"]).then(l=>{const n=[];for(const e of l)this.rbdService.isRBDPool(e)&&"replicated"===e.type&&n.push(e);if(this.pools=n,1===this.pools.length){const l=this.pools[0].pool_name;this.namespaceForm.get("pool").setValue(l)}})}submit(){const l=this.namespaceForm.getValue("pool"),n=this.namespaceForm.getValue("namespace"),e=new a.a;e.name="rbd/namespace/create",e.metadata={pool:l,namespace:n},this.rbdService.createNamespace(l,n).toPromise().then(()=>{this.notificationService.show(u.a.success,this.i18n("Created namespace '{{pool}}/{{namespace}}'",{pool:l,namespace:n})),this.modalRef.hide(),this.onSubmit.next()}).catch(()=>{this.namespaceForm.setErrors({cdSubmitButton:!0})})}}},"e/kN":function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("LvDl"),i=(e("my5R"),e("+fVR")),u=e("0+/T"),s=(e("sne2"),e("uIqm"),e("x38r")),a=e("oxzT"),o=e("vCyI"),r=e("kvvV"),d=(e("G1/K"),e("aexS"),e("VTlA"),e("kn/O"),e("Sofw"));class c extends i.a{constructor(l,n,e,i,u,s,r,d){super(),this.authStorageService=l,this.i18n=n,this.iscsiService=e,this.taskListService=i,this.notAvailablePipe=u,this.modalService=s,this.taskWrapper=r,this.actionLabels=d,this.available=void 0,this.selection=new o.a,this.targets=[],this.icons=a.a,this.builders={"iscsi/target/create":l=>({target_iqn:l.target_iqn})},this.permission=this.authStorageService.getPermissions().iscsi,this.tableActions=[{permission:"create",icon:a.a.add,routerLink:()=>"/block/iscsi/targets/create",name:this.actionLabels.CREATE},{permission:"update",icon:a.a.edit,routerLink:()=>`/block/iscsi/targets/edit/${this.selection.first().target_iqn}`,name:this.actionLabels.EDIT,disable:()=>!this.selection.first()||!t.isUndefined(this.getEditDisableDesc()),disableDesc:()=>this.getEditDisableDesc()},{permission:"delete",icon:a.a.destroy,click:()=>this.deleteIscsiTargetModal(),name:this.actionLabels.DELETE,disable:()=>!this.selection.first()||!t.isUndefined(this.getDeleteDisableDesc()),disableDesc:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:this.i18n("Target"),prop:"target_iqn",flexGrow:2,cellTransformation:s.a.executing},{name:this.i18n("Portals"),prop:"cdPortals",flexGrow:2},{name:this.i18n("Images"),prop:"cdImages",flexGrow:2},{name:this.i18n("# Sessions"),prop:"info.num_sessions",pipe:this.notAvailablePipe,flexGrow:1}],this.iscsiService.status().subscribe(l=>{this.available=l.available,l.available?(this.iscsiService.version().subscribe(l=>{this.cephIscsiConfigVersion=l.ceph_iscsi_config_version,this.taskListService.init(()=>this.iscsiService.listTargets(),l=>this.prepareResponse(l),l=>this.targets=l,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)}),this.iscsiService.settings().subscribe(l=>{this.settings=l})):this.status=l.message})}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}getEditDisableDesc(){const l=this.selection.first();return l&&l.cdExecuting?l.cdExecuting:l&&t.isUndefined(l.info)?this.i18n("Unavailable gateway(s)"):void 0}getDeleteDisableDesc(){const l=this.selection.first();return l&&l.cdExecuting?l.cdExecuting:l&&t.isUndefined(l.info)?this.i18n("Unavailable gateway(s)"):l&&l.info&&l.info.num_sessions?this.i18n("Target has active sessions"):void 0}prepareResponse(l){return l.forEach(l=>{l.cdPortals=l.portals.map(l=>`${l.host}:${l.ip}`),l.cdImages=l.disks.map(l=>`${l.pool}/${l.image}`)}),l}onFetchError(){this.table.reset()}itemFilter(l,n){return l.target_iqn===n.metadata.target_iqn}taskFilter(l){return["iscsi/target/create","iscsi/target/edit","iscsi/target/delete"].includes(l.name)}updateSelection(l){this.selection=l}deleteIscsiTargetModal(){const l=this.selection.first().target_iqn;this.modalRef=this.modalService.show(u.a,{initialState:{itemDescription:this.i18n("iSCSI target"),itemNames:[l],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new r.a("iscsi/target/delete",{target_iqn:l}),call:this.iscsiService.deleteTarget(l)})}})}configureDiscoveryAuth(){this.modalService.show(d.a,{})}}},eF8U:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("+gVj"),s=e("SVse"),a=e("mXUL");e("jMP8"),e.d(n,"a",(function(){return o})),e.d(n,"b",(function(){return v}));var o=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function r(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function d(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,11,"select",[["class","form-control custom-select"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](7,0,null,null,2,"option",[],null,null,null,null,null)),t["ɵdid"](8,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](9,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,r)),t["ɵdid"](11,278528,null,0,s.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.setting),l(n,6,0,e.setting),l(n,8,0,null),l(n,9,0,null),l(n,11,0,e.limits.values)}),(function(l,n){var e=n.component;l(n,0,1,[t["ɵinlineInterpolate"](1,"",e.setting,""),t["ɵinlineInterpolate"](1,"",e.setting,""),t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass])}))}function c(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.value)&&i),"input"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](2,16384,null,0,i.w,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.w]),t["ɵdid"](4,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.setting),l(n,7,0,e.setting)}),(function(l,n){l(n,0,0,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function m(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.setting),l(n,6,0,e.setting)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass)}))}function p(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,23,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t["ɵeld"](2,0,null,null,10,"div",[["class","custom-control custom-radio custom-control-inline"]],null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,7,"input",[["class","custom-control-input"],["type","radio"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,4)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,4).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,4)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,4)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,5).onChange()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,5).onTouched()&&i),i}),null,null)),t["ɵdid"](4,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](5,212992,null,0,i.x,[t.Renderer2,t.ElementRef,i.D,t.Injector],{formControlName:[0,"formControlName"],value:[1,"value"]},null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.x]),t["ɵdid"](7,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](9,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](10,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](11,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](-1,null,["Yes"])),(l()(),t["ɵeld"](13,0,null,null,10,"div",[["class","custom-control custom-radio custom-control-inline"]],null,null,null,null,null)),(l()(),t["ɵeld"](14,0,null,null,7,"input",[["class","custom-control-input"],["type","radio"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,15)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,15).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,15)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,15)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,16).onChange()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,16).onTouched()&&i),i}),null,null)),t["ɵdid"](15,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](16,212992,null,0,i.x,[t.Renderer2,t.ElementRef,i.D,t.Injector],{formControlName:[0,"formControlName"],value:[1,"value"]},null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.x]),t["ɵdid"](18,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](20,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](21,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](22,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](-1,null,["No"]))],(function(l,n){var e=n.component;l(n,5,0,e.setting,!0),l(n,7,0,e.setting),l(n,10,0,e.setting),l(n,16,0,e.setting,!1),l(n,18,0,e.setting),l(n,21,0,e.setting)}),(function(l,n){var e=n.component;l(n,3,0,e.setting+"True",t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending,t["ɵnov"](n,10).validClass,t["ɵnov"](n,10).invalidClass),l(n,11,0,e.setting+"True"),l(n,14,0,e.setting+"False",t["ɵnov"](n,20).ngClassUntouched,t["ɵnov"](n,20).ngClassTouched,t["ɵnov"](n,20).ngClassPristine,t["ɵnov"](n,20).ngClassDirty,t["ɵnov"](n,20).ngClassValid,t["ɵnov"](n,20).ngClassInvalid,t["ɵnov"](n,20).ngClassPending,t["ɵnov"](n,21).validClass,t["ɵnov"](n,21).invalidClass),l(n,22,0,e.setting+"False")}))}function h(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,c)),t["ɵdid"](2,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,m)),t["ɵdid"](4,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,p)),t["ɵdid"](6,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0,"int"===e.limits.type),l(n,4,0,"str"===e.limits.type),l(n,6,0,"bool"===e.limits.type)}),null)}function g(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](2,null,["Must be greater than or equal to ","."]))],null,(function(l,n){l(n,2,0,n.component.limits.min)}))}function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](2,null,["Must be less than or equal to ","."]))],null,(function(l,n){l(n,2,0,n.component.limits.max)}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,17,"div",[["class","form-group"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,1).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,1).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,4).onSubmit()&&i),i}),a.b,a.a)),t["ɵdid"](1,540672,null,0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](3,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](4,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),t["ɵdid"](5,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](8,0,null,0,1,"label",[["class","col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](9,null,["",""])),(l()(),t["ɵand"](16777216,null,0,1,null,d)),t["ɵdid"](11,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,h)),t["ɵdid"](13,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,g)),t["ɵdid"](15,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,f)),t["ɵdid"](17,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.settingsForm),l(n,4,0,e.settingsForm),l(n,5,0),l(n,11,0,"enum"===e.limits.type),l(n,13,0,"enum"!==e.limits.type),l(n,15,0,e.settingsForm.showError(e.setting,e.formDir,"min")),l(n,17,0,e.settingsForm.showError(e.setting,e.formDir,"max"))}),(function(l,n){var e=n.component;l(n,0,0,t["ɵnov"](n,3).ngClassUntouched,t["ɵnov"](n,3).ngClassTouched,t["ɵnov"](n,3).ngClassPristine,t["ɵnov"](n,3).ngClassDirty,t["ɵnov"](n,3).ngClassValid,t["ɵnov"](n,3).ngClassInvalid,t["ɵnov"](n,3).ngClassPending,t["ɵnov"](n,5).hasErrors,t["ɵnov"](n,5).hasSuccess),l(n,8,0,t["ɵinlineInterpolate"](1,"",e.setting,"")),l(n,9,0,e.setting)}))}},gr3l:function(l,n,e){"use strict";e.d(n,"a",(function(){return h}));var t=e("s7LF"),i=e("LvDl"),u=e("cp0P"),s=(e("my5R"),e("F83c"),e("DNAf")),a=e("a96k"),o=(e("sne2"),e("oxzT")),r=e("QFaf"),d=e("1Ni5"),c=e("kvvV"),m=(e("kn/O"),e("Z4cD")),p=e("a6qe");class h{constructor(l,n,e,t,i,u,a,r){this.iscsiService=l,this.modalService=n,this.rbdService=e,this.router=t,this.route=i,this.i18n=u,this.taskWrapper=a,this.actionLabels=r,this.api_version=0,this.minimum_gateways=1,this.icons=o.a,this.isEdit=!1,this.portalsSelections=[],this.imagesInitiatorSelections=[],this.groupDiskSelections=[],this.groupMembersSelections=[],this.imagesSettings={},this.messages={portals:new s.a({noOptions:this.i18n("There are no portals available.")},this.i18n),images:new s.a({noOptions:this.i18n("There are no images available.")},this.i18n),initiatorImage:new s.a({noOptions:this.i18n("There are no images available. Please make sure you add an image to the target.")},this.i18n),groupInitiator:new s.a({noOptions:this.i18n("There are no initiators available. Please make sure you add an initiator to the target.")},this.i18n)},this.IQN_REGEX=/^iqn\.(19|20)\d\d-(0[1-9]|1[0-2])\.\D{2,3}(\.[A-Za-z0-9-]+)+(:[A-Za-z0-9-\.]+)*$/,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.resource=this.i18n("target")}ngOnInit(){const l=[this.iscsiService.listTargets(),this.rbdService.list(),this.iscsiService.portals(),this.iscsiService.settings(),this.iscsiService.version()];this.router.url.startsWith("/block/iscsi/targets/edit")&&(this.isEdit=!0,this.route.params.subscribe(n=>{this.target_iqn=decodeURIComponent(n.target_iqn),l.push(this.iscsiService.getTarget(this.target_iqn))})),this.action=this.isEdit?this.actionLabels.EDIT:this.actionLabels.CREATE,Object(u.a)(l).subscribe(l=>{const n=i(l[0]).filter(l=>l.target_iqn!==this.target_iqn).flatMap(l=>l.disks).map(l=>`${l.pool}/${l.image}`).value();"api_version"in l[3]&&(this.api_version=l[3].api_version),this.minimum_gateways=l[3].config.minimum_gateways,this.target_default_controls=l[3].target_default_controls,this.target_controls_limits=l[3].target_controls_limits,this.disk_default_controls=l[3].disk_default_controls,this.disk_controls_limits=l[3].disk_controls_limits,this.backstores=l[3].backstores,this.default_backstore=l[3].default_backstore,this.unsupported_rbd_features=l[3].unsupported_rbd_features,this.required_rbd_features=l[3].required_rbd_features,this.imagesAll=i(l[1]).flatMap(l=>l.value).filter(l=>!l.namespace&&-1===n.indexOf(`${l.pool_name}/${l.name}`)&&0!==this.getValidBackstores(l).length).value(),this.imagesSelections=this.imagesAll.map(l=>new a.a(!1,`${l.pool_name}/${l.name}`,""));const e=[];l[2].forEach(l=>{l.ip_addresses.forEach(n=>{e.push(new a.a(!1,l.name+":"+n,""))})}),this.portalsSelections=[...e],this.cephIscsiConfigVersion=l[4].ceph_iscsi_config_version,this.createForm(),l[5]&&this.resolveModel(l[5])})}createForm(){if(this.targetForm=new r.a({target_iqn:new t.i("iqn.2001-07.com.ceph:"+Date.now(),{validators:[t.B.required,t.B.pattern(this.IQN_REGEX)]}),target_controls:new t.i({}),portals:new t.i([],{validators:[d.a.custom("minGateways",l=>i.uniq(l.map(l=>l.split(":")[0])).length<Math.max(1,this.minimum_gateways))]}),disks:new t.i([],{validators:[d.a.custom("dupLunId",l=>{const n=this.getLunIds(l);return n.length!==i.uniq(n).length}),d.a.custom("dupWwn",l=>{const n=this.getWwns(l);return n.length!==i.uniq(n).length})]}),initiators:new t.f([]),groups:new t.f([]),acl_enabled:new t.i(!1)}),this.cephIscsiConfigVersion>10){const l=new r.a({user:new t.i(""),password:new t.i(""),mutual_user:new t.i(""),mutual_password:new t.i("")});this.setAuthValidator(l),this.targetForm.addControl("auth",l)}}resolveModel(l){this.targetForm.patchValue({target_iqn:l.target_iqn,target_controls:l.target_controls,acl_enabled:l.acl_enabled}),this.cephIscsiConfigVersion>10&&this.targetForm.patchValue({auth:l.auth});const n=[];i.forEach(l.portals,l=>{n.push(`${l.host}:${l.ip}`)}),this.targetForm.patchValue({portals:n});const e=[];i.forEach(l.disks,l=>{const n=`${l.pool}/${l.image}`;e.push(n),this.imagesSettings[n]={backstore:l.backstore},this.imagesSettings[n][l.backstore]=l.controls,"lun"in l&&(this.imagesSettings[n].lun=l.lun),"wwn"in l&&(this.imagesSettings[n].wwn=l.wwn),this.onImageSelection({option:{name:n,selected:!0}})}),this.targetForm.patchValue({disks:e}),i.forEach(l.clients,l=>{const n=this.addInitiator();l.luns=i.map(l.luns,l=>`${l.pool}/${l.image}`),n.patchValue(l)}),i.forEach(l.groups,l=>{const n=this.addGroup();l.disks=i.map(l.disks,l=>`${l.pool}/${l.image}`),n.patchValue(l),i.forEach(l.members,l=>{this.onGroupMemberSelection({option:new a.a(!0,l,"")})})})}hasAdvancedSettings(l){return Object.values(l).length>0}get portals(){return this.targetForm.get("portals")}onPortalSelection(){this.portals.setValue(this.portals.value)}removePortal(l,n){return this.portalsSelections.forEach(l=>{l.name===n&&(l.selected=!1)}),this.portals.value.splice(l,1),this.portals.setValue(this.portals.value),!1}get disks(){return this.targetForm.get("disks")}removeImage(l,n){return this.imagesSelections.forEach(l=>{l.name===n&&(l.selected=!1)}),this.disks.value.splice(l,1),this.removeImageRefs(n),this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1}),!1}removeImageRefs(l){this.initiators.controls.forEach(n=>{const e=n.value.luns.filter(n=>n!==l);n.get("luns").setValue(e)}),this.groups.controls.forEach(n=>{const e=n.value.disks.filter(n=>n!==l);n.get("disks").setValue(e)}),i.forEach(this.imagesInitiatorSelections,(n,e)=>{this.imagesInitiatorSelections[e]=n.filter(n=>n.name!==l)}),i.forEach(this.groupDiskSelections,(n,e)=>{this.groupDiskSelections[e]=n.filter(n=>n.name!==l)})}getDefaultBackstore(l){let n=this.default_backstore;const e=this.getImageById(l);return this.validFeatures(e,this.default_backstore)||this.backstores.forEach(l=>{l!==this.default_backstore&&this.validFeatures(e,l)&&(n=l)}),n}isLunIdInUse(l,n){const e=this.disks.value.filter(l=>l!==n);return this.getLunIds(e).includes(l)}getLunIds(l){return i.map(l,l=>this.imagesSettings[l].lun)}nextLunId(l){const n=this.disks.value.filter(n=>n!==l),e=this.getLunIds(n);let t=0;for(;e.includes(t);)t++;return t}getWwns(l){return i.map(l,l=>this.imagesSettings[l].wwn).filter(l=>i.isString(l)&&""!==l)}onImageSelection(l){const n=l.option;if(n.selected){if(this.imagesSettings[n.name])this.isLunIdInUse(this.imagesSettings[n.name].lun,n.name)&&(this.imagesSettings[n.name].lun=this.nextLunId(n.name));else{const l=this.getDefaultBackstore(n.name);this.imagesSettings[n.name]={backstore:l,lun:this.nextLunId(n.name)},this.imagesSettings[n.name][l]={}}i.forEach(this.imagesInitiatorSelections,(l,e)=>{l.push(new a.a(!1,n.name,"")),this.imagesInitiatorSelections[e]=[...l]}),i.forEach(this.groupDiskSelections,(l,e)=>{l.push(new a.a(!1,n.name,"")),this.groupDiskSelections[e]=[...l]})}else this.removeImageRefs(n.name);this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1})}get initiators(){return this.targetForm.get("initiators")}addInitiator(){const l=new r.a({client_iqn:new t.i("",{validators:[t.B.required,d.a.custom("notUnique",l=>{const n=this.initiators.controls.reduce((function(l,n){return l.concat(n.value.client_iqn)}),[]);return n.indexOf(l)!==n.lastIndexOf(l)}),t.B.pattern(this.IQN_REGEX)]}),auth:new r.a({user:new t.i(""),password:new t.i(""),mutual_user:new t.i(""),mutual_password:new t.i("")}),luns:new t.i([]),cdIsInGroup:new t.i(!1)});this.setAuthValidator(l),this.initiators.push(l),i.forEach(this.groupMembersSelections,(l,n)=>{l.push(new a.a(!1,"","")),this.groupMembersSelections[n]=[...l]});const n=i.map(this.targetForm.getValue("disks"),l=>new a.a(!1,l,""));return this.imagesInitiatorSelections.push(n),l}setAuthValidator(l){d.a.validateIf(l.get("user"),()=>l.getValue("password")||l.getValue("mutual_user")||l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[l.get("password"),l.get("mutual_user"),l.get("mutual_password")]),d.a.validateIf(l.get("password"),()=>l.getValue("user")||l.getValue("mutual_user")||l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[l.get("user"),l.get("mutual_user"),l.get("mutual_password")]),d.a.validateIf(l.get("mutual_user"),()=>l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[l.get("user"),l.get("password"),l.get("mutual_password")]),d.a.validateIf(l.get("mutual_password"),()=>l.getValue("mutual_user"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[l.get("user"),l.get("password"),l.get("mutual_user")])}removeInitiator(l){const n=this.initiators.value[l];this.initiators.removeAt(l),i.forEach(this.groupMembersSelections,(n,e)=>{n.splice(l,1),this.groupMembersSelections[e]=[...n]}),this.groups.controls.forEach(l=>{const e=l.value.members.filter(l=>l!==n.client_iqn);l.get("members").setValue(e)}),this.imagesInitiatorSelections.splice(l,1)}updatedInitiatorSelector(){this.initiators.controls.forEach(l=>{l.get("client_iqn").updateValueAndValidity({emitEvent:!1})}),i.forEach(this.groupMembersSelections,(l,n)=>{i.forEach(l,(l,n)=>{const e=l.name;l.name=this.initiators.controls[n].value.client_iqn,this.groups.controls.forEach(n=>{const t=n.value.members,i=t.indexOf(e);-1!==i&&(t[i]=l.name),n.get("members").setValue(t)})}),this.groupMembersSelections[n]=[...this.groupMembersSelections[n]]})}removeInitiatorImage(l,n,e,t){const i=l.getValue("luns");return i.splice(n,1),l.patchValue({luns:i}),this.imagesInitiatorSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),!1}get groups(){return this.targetForm.get("groups")}addGroup(){const l=new r.a({group_id:new t.i("",{validators:[t.B.required]}),members:new t.i([]),disks:new t.i([])});this.groups.push(l);const n=i.map(this.targetForm.getValue("disks"),l=>new a.a(!1,l,""));this.groupDiskSelections.push(n);const e=i.map(this.initiators.value,l=>new a.a(!1,l.client_iqn,"",!l.cdIsInGroup));return this.groupMembersSelections.push(e),l}removeGroup(l){this.groups.removeAt(l),this.groupDiskSelections.splice(l,1)}onGroupMemberSelection(l){const n=l.option;let e;this.initiators.controls.forEach((l,t)=>{l.value.client_iqn===n.name&&(l.patchValue({luns:[]}),l.get("cdIsInGroup").setValue(n.selected),e=t)}),i.forEach(this.groupMembersSelections,l=>{l[e].enabled=!n.selected})}removeGroupInitiator(l,n,e){const t=l.getValue("members")[n];l.getValue("members").splice(n,1),this.groupMembersSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),this.groupMembersSelections[e]=[...this.groupMembersSelections[e]],this.onGroupMemberSelection({option:new a.a(!1,t,"")})}removeGroupDisk(l,n,e){const t=l.getValue("disks")[n];l.getValue("disks").splice(n,1),this.groupDiskSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),this.groupDiskSelections[e]=[...this.groupDiskSelections[e]]}submit(){const l=i.cloneDeep(this.targetForm.value),n={target_iqn:this.targetForm.getValue("target_iqn"),target_controls:this.targetForm.getValue("target_controls"),acl_enabled:this.targetForm.getValue("acl_enabled"),portals:[],disks:[],clients:[],groups:[]};if(this.cephIscsiConfigVersion>10){const l=this.targetForm.get("auth");l.getValue("user")||l.get("user").setValue(""),l.getValue("password")||l.get("password").setValue(""),l.getValue("mutual_user")||l.get("mutual_user").setValue(""),l.getValue("mutual_password")||l.get("mutual_password").setValue("");const e=this.targetForm.getValue("acl_enabled");n.auth={user:e?"":l.getValue("user"),password:e?"":l.getValue("password"),mutual_user:e?"":l.getValue("mutual_user"),mutual_password:e?"":l.getValue("mutual_password")}}let e;l.disks.forEach(l=>{const e=l.split("/"),t=this.imagesSettings[l].backstore;n.disks.push({pool:e[0],image:e[1],backstore:t,controls:this.imagesSettings[l][t],lun:this.imagesSettings[l].lun,wwn:this.imagesSettings[l].wwn})}),l.portals.forEach(l=>{const e=l.indexOf(":");n.portals.push({host:l.substring(0,e),ip:l.substring(e+1)})}),n.acl_enabled&&(l.initiators.forEach(l=>{l.auth.user||(l.auth.user=""),l.auth.password||(l.auth.password=""),l.auth.mutual_user||(l.auth.mutual_user=""),l.auth.mutual_password||(l.auth.mutual_password=""),delete l.cdIsInGroup;const n=[];l.luns.forEach(l=>{const e=l.split("/");n.push({pool:e[0],image:e[1]})}),l.luns=n}),n.clients=l.initiators),n.acl_enabled&&(l.groups.forEach(l=>{const n=[];l.disks.forEach(l=>{const e=l.split("/");n.push({pool:e[0],image:e[1]})}),l.disks=n}),n.groups=l.groups),this.isEdit?(n.new_target_iqn=n.target_iqn,n.target_iqn=this.target_iqn,e=this.taskWrapper.wrapTaskAroundCall({task:new c.a("iscsi/target/edit",{target_iqn:n.target_iqn}),call:this.iscsiService.updateTarget(this.target_iqn,n)})):e=this.taskWrapper.wrapTaskAroundCall({task:new c.a("iscsi/target/create",{target_iqn:n.target_iqn}),call:this.iscsiService.createTarget(n)}),e.subscribe(void 0,()=>{this.targetForm.setErrors({cdSubmitButton:!0})},()=>this.router.navigate(["/block/iscsi/targets"]))}targetSettingsModal(){const l={target_controls:this.targetForm.get("target_controls"),target_default_controls:this.target_default_controls,target_controls_limits:this.target_controls_limits};this.modalRef=this.modalService.show(p.a,{initialState:l})}imageSettingsModal(l){const n={imagesSettings:this.imagesSettings,image:l,api_version:this.api_version,disk_default_controls:this.disk_default_controls,disk_controls_limits:this.disk_controls_limits,backstores:this.getValidBackstores(this.getImageById(l)),control:this.targetForm.get("disks")};this.modalRef=this.modalService.show(m.a,{initialState:n})}validFeatures(l,n){const e=l.features,t=this.required_rbd_features[n];return(e&t)===t&&0==(e&this.unsupported_rbd_features[n])}getImageById(l){return this.imagesAll.find(n=>l===`${n.pool_name}/${n.name}`)}getValidBackstores(l){return this.backstores.filter(n=>this.validFeatures(l,n))}}},jMP8:function(l,n,e){"use strict";e.d(n,"a",(function(){return i}));var t=e("s7LF");e("QFaf");class i{ngOnInit(){const l=[];"min"in this.limits&&l.push(t.B.min(this.limits.min)),"max"in this.limits&&l.push(t.B.max(this.limits.max)),this.settingsForm.get(this.setting).setValidators(l)}}},"k/xb":function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e.d(n,"b",(function(){return S})),e.d(n,"c",(function(){return u})),e.d(n,"d",(function(){return s})),e.d(n,"j",(function(){return a})),e.d(n,"k",(function(){return o})),e.d(n,"l",(function(){return r})),e.d(n,"m",(function(){return d})),e.d(n,"n",(function(){return c})),e.d(n,"o",(function(){return m})),e.d(n,"p",(function(){return p})),e.d(n,"q",(function(){return h})),e.d(n,"e",(function(){return g})),e.d(n,"f",(function(){return f})),e.d(n,"g",(function(){return v})),e.d(n,"h",(function(){return b})),e.d(n,"i",(function(){return C}));var t=e("sne2");e("Vhfg"),e("gr3l"),e("e/kN"),e("roDX"),e("cxJu"),e("MyVl"),e("5GyT"),e("Z5tW"),e("WkyA"),e("chpi");class i{}const u={breadcrumbs:"Images"},s={breadcrumbs:"Namespaces"},a={breadcrumbs:"Trash"},o={breadcrumbs:"Overall Performance"},r={breadcrumbs:t.a.CREATE},d={breadcrumbs:t.a.EDIT},c={breadcrumbs:t.a.CLONE},m={breadcrumbs:t.a.COPY},p={breadcrumbs:t.a.COPY},h={breadcrumbs:"Mirroring"},g={breadcrumbs:"iSCSI"},f={breadcrumbs:"Overview"},v={breadcrumbs:"Targets"},b={breadcrumbs:t.a.CREATE},C={breadcrumbs:t.a.EDIT};class S{}},kccj:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{}},l7Jr:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("mXUL"),u=e("+gVj"),s=e("eF8U"),a=e("jMP8"),o=e("EEJc"),r=e("ajRT"),d=e("s7LF"),c=e("SVse"),m=e("gp3X"),p=e("sb0X"),h=e("KVJa"),g=e("Z21x"),f=e("sne2"),v=e("a6qe"),b=e("LqlI"),C=e("my5R");e.d(n,"a",(function(){return w}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](1,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"cd-iscsi-setting",[],null,null,null,s.b,s.a)),t["ɵdid"](6,114688,null,0,a.a,[],{settingsForm:[0,"settingsForm"],formDir:[1,"formDir"],setting:[2,"setting"],limits:[3,"limits"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,6,0,e.settingsForm,t["ɵnov"](n.parent,7),n.context.$implicit.key,e.getTargetControlLimits(n.context.$implicit.key))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess)}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,23,"cd-modal",[],null,null,null,o.c,o.b)),t["ɵdid"](1,49152,null,0,r.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Advanced Settings"])),(l()(),t["ɵeld"](4,0,null,1,19,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,18,"form",[["name","settingsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,d.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,d.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,d.d,null,[d.l]),t["ɵdid"](9,16384,null,0,d.s,[[4,d.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,5,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"p",[["class","alert-warning"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Changing these parameters from their default values is usually not necessary."])),(l()(),t["ɵand"](16777216,null,null,2,null,_)),t["ɵdid"](15,278528,null,0,c.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),t["ɵpid"](0,c.KeyValuePipe,[t.KeyValueDiffers]),(l()(),t["ɵeld"](17,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](18,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.save()&&t),t}),m.b,m.a)),t["ɵdid"](20,114688,null,0,p.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Confirm"])),(l()(),t["ɵeld"](22,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,h.b,h.a)),t["ɵdid"](23,49152,null,0,g.a,[c.Location,f.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.settingsForm),l(n,10,0,e.settingsForm),l(n,15,0,t["ɵunv"](n,15,0,t["ɵnov"](n,16).transform(e.settingsForm.controls))),l(n,20,0,e.settingsForm),l(n,23,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending)}))}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-iqn-settings-modal",[],null,null,null,R,S)),t["ɵdid"](1,114688,null,0,v.a,[b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var w=t["ɵccf"]("cd-iscsi-target-iqn-settings-modal",v.a,y,{},{},[])},lArG:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{}},"lz+O":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("+gVj"),s=e("SVse"),a=e("EEJc"),o=e("ajRT"),r=e("mXUL"),d=e("gp3X"),c=e("sb0X"),m=e("KVJa"),p=e("Z21x"),h=e("sne2"),g=e("WxU5"),f=e("aexS"),v=e("F83c"),b=e("LqlI"),C=e("2EZI"),S=e("Ekvf"),_=e("kn/O");e.d(n,"a",(function(){return N}));var R=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","poolName"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"poolName"),l(n,6,0,"poolName")}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass)}))}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","poolName"],["id","poolName"],["name","poolName"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,16384,null,0,u.h,[[3,i.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](7,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),t["ɵdid"](8,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](9,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](-1,null,["All"])),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](12,278528,null,0,s.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"poolName"),l(n,6,0,"poolName"),l(n,8,0,""),l(n,9,0,""),l(n,12,0,e.pools)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,6).validClass,t["ɵnov"](n,6).invalidClass)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,41,"cd-modal",[],null,null,null,a.c,a.b)),t["ɵdid"](1,49152,null,0,o.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Purge Trash"])),(l()(),t["ɵeld"](4,0,null,1,37,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,36,"form",[["class","form"],["name","purgeForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,23,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To purge, select one or"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["All"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](19,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["pools and click"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](22,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Purge Trash"])),(l()(),t["ɵted"](-1,null,[".  "])),(l()(),t["ɵeld"](25,0,null,null,9,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](26,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","col-form-label mx-auto"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool:"])),(l()(),t["ɵand"](16777216,null,0,1,null,y)),t["ɵdid"](32,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](34,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](35,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](36,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](37,0,null,null,2,"cd-submit-button",[["id","purgeFormButton"]],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.purge()&&t),t}),d.b,d.a)),t["ɵdid"](38,114688,null,0,c.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Purge Trash"])),(l()(),t["ɵeld"](40,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,m.b,m.a)),t["ɵdid"](41,49152,null,0,p.a,[s.Location,h.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.purgeForm),l(n,10,0,e.purgeForm),l(n,26,0),l(n,32,0,!e.poolPermission.read),l(n,34,0,e.poolPermission.read),l(n,38,0,e.purgeForm),l(n,41,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-purge-modal",[],null,null,null,I,R)),t["ɵdid"](1,114688,null,0,g.a,[f.a,v.a,b.a,C.a,S.a,_.a],null,null)],(function(l,n){l(n,1,0)}),null)}var N=t["ɵccf"]("cd-rbd-trash-purge-modal",g.a,E,{},{},[])},my5R:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("mrSG"),i=e("IheW"),u=e("xTzq"),s=e("8Y7J"),a=e("pL04");let o=(()=>{let l=class{constructor(l){this.http=l}listTargets(){return this.http.get("api/iscsi/target")}getTarget(l){return this.http.get(`api/iscsi/target/${l}`)}updateTarget(l,n){return this.http.put(`api/iscsi/target/${l}`,n,{observe:"response"})}status(){return this.http.get("ui-api/iscsi/status")}settings(){return this.http.get("ui-api/iscsi/settings")}version(){return this.http.get("ui-api/iscsi/version")}portals(){return this.http.get("ui-api/iscsi/portals")}createTarget(l){return this.http.post("api/iscsi/target",l,{observe:"response"})}deleteTarget(l){return this.http.delete(`api/iscsi/target/${l}`,{observe:"response"})}getDiscovery(){return this.http.get("api/iscsi/discoveryauth")}updateDiscovery(l){return this.http.put("api/iscsi/discoveryauth",l)}overview(){return this.http.get("ui-api/iscsi/overview")}};return l.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new l(s["ɵɵinject"](i.c))},token:l,providedIn:a.a}),l=t.__decorate([u.a,t.__metadata("design:paramtypes",[i.c])],l),l})()},nP0W:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("EEJc"),s=e("ajRT"),a=e("+gVj"),o=e("mXUL"),r=e("SVse"),d=e("gp3X"),c=e("sb0X"),m=e("KVJa"),p=e("Z21x"),h=e("sne2"),g=e("aa9H"),f=e("LqlI"),v=e("GiVz"),b=e("XED3"),C=e("kn/O");e.d(n,"a",(function(){return k}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.id),l(n,2,0,n.context.$implicit.id)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Peer clusters must be removed prior to disabling mirror."]))],null,null)}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,45,"cd-modal",[],null,null,null,u.c,u.b)),t["ɵdid"](1,49152,null,0,s.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit pool mirror mode"])),(l()(),t["ɵeld"](4,0,null,1,41,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,40,"form",[["class","form"],["name","editModeForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,27,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,8,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,7,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To edit the mirror mode for pool  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](16,null,["",""])),(l()(),t["ɵted"](-1,null,[", select a new mode from the list and click  "])),(l()(),t["ɵeld"](18,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Update"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](21,0,null,null,17,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](22,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](25,0,null,0,2,"label",[["class","col-form-label"],["for","mirrorMode"]],null,null,null,null,null)),(l()(),t["ɵeld"](26,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mode"])),(l()(),t["ɵeld"](28,0,null,0,8,"select",[["class","form-control custom-select"],["formControlName","mirrorMode"],["id","mirrorMode"],["name","mirrorMode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,29).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,29).onTouched()&&i),i}),null,null)),t["ɵdid"](29,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](31,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](33,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](34,16384,null,0,a.h,[[3,i.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,_)),t["ɵdid"](36,278528,null,0,r.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,R)),t["ɵdid"](38,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](39,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](40,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](41,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),d.b,d.a)),t["ɵdid"](42,114688,null,0,c.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Update"])),(l()(),t["ɵeld"](44,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,m.b,m.a)),t["ɵdid"](45,49152,null,0,p.a,[r.Location,h.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.editModeForm),l(n,10,0,e.editModeForm),l(n,22,0),l(n,31,0,"mirrorMode"),l(n,34,0,"mirrorMode"),l(n,36,0,e.mirrorModes),l(n,38,0,e.editModeForm.showError("mirrorMode",t["ɵnov"](n,7),"cannotDisable")),l(n,42,0,e.editModeForm),l(n,45,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,16,0,e.poolName),l(n,21,0,t["ɵnov"](n,22).hasErrors,t["ɵnov"](n,22).hasSuccess),l(n,28,0,t["ɵnov"](n,33).ngClassUntouched,t["ɵnov"](n,33).ngClassTouched,t["ɵnov"](n,33).ngClassPristine,t["ɵnov"](n,33).ngClassDirty,t["ɵnov"](n,33).ngClassValid,t["ɵnov"](n,33).ngClassInvalid,t["ɵnov"](n,33).ngClassPending,t["ɵnov"](n,34).validClass,t["ɵnov"](n,34).invalidClass)}))}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-pool-edit-mode-modal",[],null,null,null,y,S)),t["ɵdid"](1,245760,null,0,g.a,[f.a,v.a,b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var k=t["ɵccf"]("cd-pool-edit-mode-modal",g.a,w,{},{},[])},nhAp:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("mXUL"),u=e("+gVj"),s=e("s7LF"),a=e("SVse"),o=e("eF8U"),r=e("jMP8"),d=e("uYzU"),c=e("EEJc"),m=e("ajRT"),p=e("gp3X"),h=e("sb0X"),g=e("KVJa"),f=e("Z21x"),v=e("sne2"),b=e("Z4cD"),C=e("LqlI"),S=e("my5R");e.d(n,"a",(function(){return T}));var _=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,33,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Identifier"])),(l()(),t["ɵeld"](3,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](4,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](7,0,null,0,12,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](8,0,null,null,1,"label",[["class","col-form-label required"],["for","lun"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["lun"])),(l()(),t["ɵeld"](10,0,null,null,7,"input",[["class","form-control"],["formControlName","lun"],["id","lun"],["name","lun"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,11)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,11).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,11)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,11)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,12).onChange(e.target.value)&&i),"input"===n&&(i=!1!==t["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,12).onTouched()&&i),i}),null,null)),t["ɵdid"](11,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵdid"](12,16384,null,0,s.w,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,s.p,(function(l,n){return[l,n]}),[s.e,s.w]),t["ɵdid"](14,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](16,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](17,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,R)),t["ɵdid"](19,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](20,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](21,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](24,0,null,0,9,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](25,0,null,null,1,"label",[["class","col-form-label"],["for","wwn"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["wwn"])),(l()(),t["ɵeld"](27,0,null,null,6,"input",[["class","form-control"],["formControlName","wwn"],["id","wwn"],["name","wwn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,28)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,28).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,28)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,28)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](28,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](30,671744,[[3,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](32,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](33,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0),l(n,14,0,"lun"),l(n,17,0,"lun"),l(n,19,0,e.settingsForm.showError("lun",t["ɵnov"](n.parent,12),"required")),l(n,21,0),l(n,30,0,"wwn"),l(n,33,0,"wwn")}),(function(l,n){l(n,3,0,t["ɵnov"](n,4).hasErrors,t["ɵnov"](n,4).hasSuccess),l(n,10,0,t["ɵnov"](n,16).ngClassUntouched,t["ɵnov"](n,16).ngClassTouched,t["ɵnov"](n,16).ngClassPristine,t["ɵnov"](n,16).ngClassDirty,t["ɵnov"](n,16).ngClassValid,t["ɵnov"](n,16).ngClassInvalid,t["ɵnov"](n,16).ngClassPending,t["ɵnov"](n,17).validClass,t["ɵnov"](n,17).invalidClass),l(n,20,0,t["ɵnov"](n,21).hasErrors,t["ɵnov"](n,21).hasSuccess),l(n,27,0,t["ɵnov"](n,32).ngClassUntouched,t["ɵnov"](n,32).ngClassTouched,t["ɵnov"](n,32).ngClassPristine,t["ɵnov"](n,32).ngClassDirty,t["ɵnov"](n,32).ngClassValid,t["ɵnov"](n,32).ngClassInvalid,t["ɵnov"](n,32).ngClassPending,t["ɵnov"](n,33).validClass,t["ɵnov"](n,33).invalidClass)}))}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,s.v,[t.ElementRef,t.Renderer2,[2,s.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,s.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""])),t["ɵppd"](4,1)],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){var e=t["ɵunv"](n,3,0,l(n,4,0,t["ɵnov"](n.parent,0),n.context.$implicit));l(n,3,0,e)}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](1,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"cd-iscsi-setting",[],null,null,null,o.b,o.a)),t["ɵdid"](6,114688,null,0,r.a,[],{settingsForm:[0,"settingsForm"],formDir:[1,"formDir"],setting:[2,"setting"],limits:[3,"limits"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,6,0,e.settingsForm,t["ɵnov"](n.parent.parent.parent,12),n.context.$implicit.key,e.getDiskControlLimits(n.parent.parent.context.$implicit,n.context.$implicit.key))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,2,null,k)),t["ɵdid"](2,278528,null,0,a.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),t["ɵpid"](0,a.KeyValuePipe,[t.KeyValueDiffers]),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,2,0,t["ɵunv"](n,2,0,t["ɵnov"](n,3).transform(e.disk_default_controls[n.parent.context.$implicit])))}),null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](2,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,2,0,n.component.settingsForm.value.backstore===n.context.$implicit)}),null)}function N(l){return t["ɵvid"](0,[t["ɵpid"](0,d.a,[]),(l()(),t["ɵeld"](1,0,null,null,46,"cd-modal",[],null,null,null,c.c,c.b)),t["ɵdid"](2,49152,null,0,m.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](3,0,null,0,5,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Configure"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](7,0,null,null,1,"small",[],null,null,null,null,null)),(l()(),t["ɵted"](8,null,["",""])),(l()(),t["ɵeld"](9,0,null,1,38,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](10,0,null,null,37,"form",[["class","form"],["name","settingsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,12).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,12).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,15).onSubmit()&&i),i}),null,null)),t["ɵdid"](11,16384,null,0,s.G,[],null,null),t["ɵdid"](12,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](14,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](15,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](16,0,null,null,24,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"p",[["class","alert-warning"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Changing these parameters from their default values is usually not necessary."])),(l()(),t["ɵand"](16777216,null,null,1,null,y)),t["ɵdid"](20,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](21,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Settings"])),(l()(),t["ɵeld"](23,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](24,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](27,0,null,0,11,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](28,0,null,null,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Backstore"])),(l()(),t["ɵeld"](30,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","backstore"],["id","backstore"],["name","backstore"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,31).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,31).onTouched()&&i),i}),null,null)),t["ɵdid"](31,16384,null,0,s.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.A]),t["ɵdid"](33,671744,[[5,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](35,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](36,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](38,278528,null,0,a.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](40,278528,null,0,a.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](41,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](42,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](43,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.save()&&t),t}),p.b,p.a)),t["ɵdid"](44,114688,null,0,h.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Confirm"])),(l()(),t["ɵeld"](46,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,g.b,g.a)),t["ɵdid"](47,49152,null,0,f.a,[a.Location,v.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,2,0,e.modalRef),l(n,12,0,e.settingsForm),l(n,15,0,e.settingsForm),l(n,20,0,e.api_version>=1),l(n,24,0),l(n,33,0,"backstore"),l(n,36,0,"backstore"),l(n,38,0,e.backstores),l(n,40,0,e.backstores),l(n,44,0,e.settingsForm),l(n,47,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,8,0,n.component.image),l(n,10,0,t["ɵnov"](n,14).ngClassUntouched,t["ɵnov"](n,14).ngClassTouched,t["ɵnov"](n,14).ngClassPristine,t["ɵnov"](n,14).ngClassDirty,t["ɵnov"](n,14).ngClassValid,t["ɵnov"](n,14).ngClassInvalid,t["ɵnov"](n,14).ngClassPending),l(n,23,0,t["ɵnov"](n,24).hasErrors,t["ɵnov"](n,24).hasSuccess),l(n,30,0,t["ɵnov"](n,35).ngClassUntouched,t["ɵnov"](n,35).ngClassTouched,t["ɵnov"](n,35).ngClassPristine,t["ɵnov"](n,35).ngClassDirty,t["ɵnov"](n,35).ngClassValid,t["ɵnov"](n,35).ngClassInvalid,t["ɵnov"](n,35).ngClassPending,t["ɵnov"](n,36).validClass,t["ɵnov"](n,36).invalidClass)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-image-settings-modal",[],null,null,null,N,_)),t["ɵdid"](1,114688,null,0,b.a,[C.a,S.a],null,null)],(function(l,n){l(n,1,0)}),null)}var T=t["ɵccf"]("cd-iscsi-target-image-settings-modal",b.a,F,{},{},[])},o8EM:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("PhyI"),i=e("8Y7J"),u=e("GiVz");let s=(()=>{class l{constructor(l){this.i18n=l,this.sections=[{heading:this.i18n("Quality of Service"),class:"quality-of-service",options:[{name:"rbd_qos_bps_limit",displayName:this.i18n("BPS Limit"),description:this.i18n("The desired limit of IO bytes per second."),type:t.b.bps},{name:"rbd_qos_iops_limit",displayName:this.i18n("IOPS Limit"),description:this.i18n("The desired limit of IO operations per second."),type:t.b.iops},{name:"rbd_qos_read_bps_limit",displayName:this.i18n("Read BPS Limit"),description:this.i18n("The desired limit of read bytes per second."),type:t.b.bps},{name:"rbd_qos_read_iops_limit",displayName:this.i18n("Read IOPS Limit"),description:this.i18n("The desired limit of read operations per second."),type:t.b.iops},{name:"rbd_qos_write_bps_limit",displayName:this.i18n("Write BPS Limit"),description:this.i18n("The desired limit of write bytes per second."),type:t.b.bps},{name:"rbd_qos_write_iops_limit",displayName:this.i18n("Write IOPS Limit"),description:this.i18n("The desired limit of write operations per second."),type:t.b.iops},{name:"rbd_qos_bps_burst",displayName:this.i18n("BPS Burst"),description:this.i18n("The desired burst limit of IO bytes."),type:t.b.bps},{name:"rbd_qos_iops_burst",displayName:this.i18n("IOPS Burst"),description:this.i18n("The desired burst limit of IO operations."),type:t.b.iops},{name:"rbd_qos_read_bps_burst",displayName:this.i18n("Read BPS Burst"),description:this.i18n("The desired burst limit of read bytes."),type:t.b.bps},{name:"rbd_qos_read_iops_burst",displayName:this.i18n("Read IOPS Burst"),description:this.i18n("The desired burst limit of read operations."),type:t.b.iops},{name:"rbd_qos_write_bps_burst",displayName:this.i18n("Write BPS Burst"),description:this.i18n("The desired burst limit of write bytes."),type:t.b.bps},{name:"rbd_qos_write_iops_burst",displayName:this.i18n("Write IOPS Burst"),description:this.i18n("The desired burst limit of write operations."),type:t.b.iops}]}]}static getOptionsFromSections(l){return l.map(l=>l.options).reduce((l,n)=>l.concat(n))}filterConfigOptionsByName(n){return l.getOptionsFromSections(this.sections).filter(l=>l.name===n)}getOptionValueByName(l,n,e=""){const t=this.filterConfigOptionsByName(l);return 1===t.length?t.pop()[n]:e}getWritableSections(){return this.sections.map(l=>(l.options=l.options.filter(l=>!l.readOnly),l))}getOptionFields(){return l.getOptionsFromSections(this.sections)}getWritableOptionFields(){return l.getOptionsFromSections(this.getWritableSections())}getOptionByName(l){return this.filterConfigOptionsByName(l).pop()}getDisplayName(l){return this.getOptionValueByName(l,"displayName")}getDescription(l){return this.getOptionValueByName(l,"description")}}return l.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new l(i["ɵɵinject"](u.a))},token:l,providedIn:"root"}),l})()},puGn:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.createForm()}createForm(){this.editSiteNameForm=new i.a({siteName:new t.i("",{})})}ngOnInit(){this.editSiteNameForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(l=>{this.editSiteNameForm.get("siteName").setValue(l.site_name)})}update(){this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/mirroring/site_name/edit",{}),call:this.rbdMirroringService.setSiteName(this.editSiteNameForm.getValue("siteName"))}).subscribe(void 0,()=>this.editSiteNameForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},rFfW:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("8Y7J"),i=e("s7LF"),u=e("oxzT"),s=e("QFaf"),a=e("PhyI");e("aXbf"),e("o8EM");class o{constructor(l,n){this.formatterService=l,this.rbdConfigurationService=n,this.changes=new t.EventEmitter,this.icons=u.a,this.ngDataReady=new t.EventEmitter,this.configurationType=a.b,this.sectionVisibility={}}ngOnInit(){const l=this.createConfigurationFormGroup();this.form.addControl("configuration",l),l.valueChanges.subscribe(()=>{this.changes.emit(this.getDirtyValues.bind(this))}),this.initializeData&&this.initializeData.subscribe(l=>{this.initialData=l.initialData;const n=l.sourceType;this.rbdConfigurationService.getWritableOptionFields().forEach(e=>{const t=l.initialData.filter(l=>l.name===e.name).pop();t&&t.source===n&&this.form.get(`configuration.${e.name}`).setValue(t.value)}),this.ngDataReady.emit()}),this.rbdConfigurationService.getWritableSections().forEach(l=>this.sectionVisibility[l.class]=!1)}getDirtyValues(l=!1,n){if(l&&!n)throw new Error("ProgrammingError: If local values shall be included, a proper localFieldType argument has to be provided, too");const e={};return this.rbdConfigurationService.getWritableOptionFields().forEach(t=>{const i=this.form.get("configuration").get(t.name);this.initialData&&this.initialData[t.name]===i.value||(i.dirty||l&&i.source===n)&&(e[t.name]=null===i.value?i.value:t.type===a.b.bps?this.formatterService.toBytes(i.value):t.type===a.b.milliseconds?this.formatterService.toMilliseconds(i.value):t.type===a.b.iops?this.formatterService.toIops(i.value):i.value)}),e}createConfigurationFormGroup(){const l=new s.a({});return this.rbdConfigurationService.getWritableOptionFields().forEach(n=>{let e;if(n.type!==a.b.milliseconds&&n.type!==a.b.iops&&n.type!==a.b.bps)throw new Error(`Type ${n.type} is unknown, you may need to add it to RbdConfiguration class`);e=new i.i(0,i.B.min(0)),l.addControl(n.name,e)}),l}reset(l){const n=this.form.get("configuration").get(l);n.disabled?(n.setValue(n.previousValue||0),n.enable(),n.previousValue||n.markAsPristine()):(n.previousValue=n.value,n.setValue(null),n.markAsDirty(),n.disable())}isDisabled(l){return this.form.get("configuration").get(l).disabled}toggleSectionVisibility(l){this.sectionVisibility[l]=!this.sectionVisibility[l]}}},roDX:function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e("my5R");var t=e("x38r");e("o4+5"),e("uYzU");class i{constructor(l,n,e,t){this.iscsiService=l,this.dimlessPipe=n,this.iscsiBackstorePipe=e,this.i18n=t,this.gateways=[],this.images=[]}ngOnInit(){this.gatewaysColumns=[{name:this.i18n("Name"),prop:"name"},{name:this.i18n("State"),prop:"state",flexGrow:1,cellTransformation:t.a.badge,customTemplateConfig:{map:{up:{class:"badge-success"},down:{class:"badge-danger"}}}},{name:this.i18n("# Targets"),prop:"num_targets"},{name:this.i18n("# Sessions"),prop:"num_sessions"}],this.imagesColumns=[{name:this.i18n("Pool"),prop:"pool"},{name:this.i18n("Image"),prop:"image"},{name:this.i18n("Backstore"),prop:"backstore",pipe:this.iscsiBackstorePipe},{name:this.i18n("Read Bytes"),prop:"stats_history.rd_bytes",cellTemplate:this.iscsiSparklineTpl},{name:this.i18n("Write Bytes"),prop:"stats_history.wr_bytes",cellTemplate:this.iscsiSparklineTpl},{name:this.i18n("Read Ops"),prop:"stats.rd",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:this.i18n("Write Ops"),prop:"stats.wr",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:this.i18n("A/O Since"),prop:"optimized_since",cellTemplate:this.iscsiRelativeDateTpl}]}refresh(){this.iscsiService.overview().subscribe(l=>{this.gateways=l.gateways,this.images=l.images,this.images.map(l=>(l.stats_history&&(l.stats_history.rd_bytes=l.stats_history.rd_bytes.map(l=>l[1]),l.stats_history.wr_bytes=l.stats_history.wr_bytes.map(l=>l[1])),l.cdIsBinary=!0,l))})}}},u0yg:function(l,n,e){"use strict";e.d(n,"b",(function(){return t})),e.d(n,"a",(function(){return i}));class t{}var i=function(l){return l[l.V1=1]="V1",l[l.V2=2]="V2",l}({})},u2XS:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("25BL"),s=e("uIqm"),a=e("LOMR"),o=e("MP8s"),r=e("fxL3"),d=e("gk6K"),c=e("3ris"),m=e("GiVz"),p=e("uYzU"),h=e("iExv");e.d(n,"b",(function(){return g})),e.d(n,"c",(function(){return _})),e.d(n,"a",(function(){return y}));var g=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""])),(l()(),t["ɵted"](-1,null,["   "])),(l()(),t["ɵeld"](4,0,null,null,6,"span",[["class","badge"]],null,null,null,null,null)),t["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t["ɵpad"](7,1),t["ɵpad"](8,1),t["ɵpod"](9,{"badge-success":0,"badge-danger":1}),(l()(),t["ɵted"](10,null,[" "," "]))],(function(l,n){var e=l(n,9,0,l(n,7,0,"logged_in").includes(n.context.$implicit.data.status),l(n,8,0,"logged_out").includes(n.context.$implicit.data.status));l(n,6,0,"badge",e)}),(function(l,n){l(n,0,0,n.context.$implicit.data.cdIcon),l(n,2,0,n.context.$implicit.data.name),l(n,10,0,n.context.$implicit.data.status)}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"div",[["class","col-6 metadata"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""])),(l()(),t["ɵeld"](3,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,u.b,u.a)),t["ɵdid"](4,2867200,[[2,4],["detailTable",4]],0,s.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],limit:[3,"limit"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.data,e.columns,"flex",0)}),(function(l,n){l(n,2,0,n.component.title)}))}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵand"](16777216,null,null,1,null,b)),t["ɵdid"](1,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,C)),t["ɵdid"](3,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,void 0===n.context.row.default||n.context.row.default===n.context.row.current),l(n,3,0,void 0!==n.context.row.default&&n.context.row.default!==n.context.row.current)}),null)}function _(l){return t["ɵvid"](0,[t["ɵqud"](402653184,1,{highlightTpl:0}),t["ɵqud"](671088640,2,{content:0}),t["ɵqud"](671088640,3,{tree:0}),(l()(),t["ɵeld"](3,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,10,"div",[["class","col-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["iSCSI Topology"])),(l()(),t["ɵeld"](7,0,null,null,7,"tree-root",[],null,[[null,"updateData"],["body","keydown"],["body","mousedown"]],(function(l,n,e){var i=!0,u=l.component;return"body:keydown"===n&&(i=!1!==t["ɵnov"](l,9).onKeydown(e)&&i),"body:mousedown"===n&&(i=!1!==t["ɵnov"](l,9).onMousedown(e)&&i),"updateData"===n&&(i=!1!==u.onUpdateData()&&i),i}),a.b,a.a)),t["ɵprd"](131584,null,o.a,o.a,[]),t["ɵdid"](9,573440,[[3,4],["tree",4]],4,r.a,[o.a,d.a],{nodes:[0,"nodes"],options:[1,"options"]},{updateData:"updateData"}),t["ɵqud"](603979776,4,{loadingTemplate:0}),t["ɵqud"](603979776,5,{treeNodeTemplate:0}),t["ɵqud"](603979776,6,{treeNodeWrapperTemplate:0}),t["ɵqud"](603979776,7,{treeNodeFullTemplate:0}),(l()(),t["ɵand"](0,[[5,2],["treeNodeTemplate",2]],null,0,null,f)),(l()(),t["ɵand"](16777216,null,null,1,null,v)),t["ɵdid"](16,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["highlightTpl",2]],null,0,null,S))],(function(l,n){var e=n.component;l(n,9,0,e.nodes,e.treeOptions),l(n,16,0,e.data)}),null)}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-details",[],null,null,null,_,g)),t["ɵdid"](1,638976,null,0,c.a,[m.a,p.a,h.a],null,null)],(function(l,n){l(n,1,0)}),null)}var y=t["ɵccf"]("cd-iscsi-target-details",c.a,R,{selection:"selection",settings:"settings",cephIscsiConfigVersion:"cephIscsiConfigVersion"},{},[])},xvu0:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("mXUL"),r=e("IZUe"),d=e("gp3X"),c=e("sb0X"),m=e("KVJa"),p=e("Z21x"),h=e("SVse"),g=e("sne2"),f=e("puGn"),v=e("LqlI"),b=e("XED3"),C=e("kn/O");e.d(n,"a",(function(){return y}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,38,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit site name"])),(l()(),t["ɵeld"](4,0,null,1,34,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,33,"form",[["class","form"],["name","editSiteNameForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,20,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit the site name and click  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Update"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,13,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](19,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,7,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,26)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,26).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,26)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,26)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](28,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](30,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](31,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](32,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](33,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](34,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),d.b,d.a)),t["ɵdid"](35,114688,null,0,c.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Update"])),(l()(),t["ɵeld"](37,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,m.b,m.a)),t["ɵdid"](38,49152,null,0,p.a,[h.Location,g.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.editSiteNameForm),l(n,10,0,e.editSiteNameForm),l(n,19,0),l(n,25,0,""),l(n,28,0,"siteName"),l(n,31,0,"siteName"),l(n,35,0,e.editSiteNameForm),l(n,38,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,30).ngClassUntouched,t["ɵnov"](n,30).ngClassTouched,t["ɵnov"](n,30).ngClassPristine,t["ɵnov"](n,30).ngClassDirty,t["ɵnov"](n,30).ngClassValid,t["ɵnov"](n,30).ngClassInvalid,t["ɵnov"](n,30).ngClassPending,t["ɵnov"](n,31).validClass,t["ɵnov"](n,31).invalidClass)}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-edit-site-mode-modal",[],null,null,null,_,S)),t["ɵdid"](1,114688,null,0,f.a,[v.a,b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var y=t["ɵccf"]("cd-edit-site-mode-modal",f.a,R,{},{},[])}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.9e79c41bbaed982a50af.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/1.9e79c41bbaed982a50af.js
new file mode 100644 (file)
index 0000000..beb3103
--- /dev/null
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+26A":function(l,n,e){"use strict";e.d(n,"a",(function(){return d}));var t=e("s7LF"),i=e("LvDl"),u=e("GyhO"),s=e("cp0P"),a=e("NJ9Y"),o=(e("XED3"),e("QFaf")),r=e("kvvV");e("kn/O");class d{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.pools=[],this.directions=[{key:"rx-tx",desc:"Bidirectional"},{key:"rx",desc:"Unidirectional (receive-only)"}],this.createForm()}createForm(){this.importBootstrapForm=new o.a({siteName:new t.i("",{validators:[t.B.required]}),direction:new t.i("rx-tx",{}),pools:new t.k({},{validators:[this.validatePools()]}),token:new t.i("",{validators:[t.B.required,this.validateToken()]})})}ngOnInit(){this.rbdMirroringService.getSiteName().subscribe(l=>{this.importBootstrapForm.get("siteName").setValue(l.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.pools=l.content_data.pools.reduce((l,n)=>(l.push({name:n.name,mirror_mode:n.mirror_mode}),l),[]);const n=this.importBootstrapForm.get("pools");i.each(this.pools,l=>{const e=l.name,i="disabled"===l.mirror_mode,u=n.controls[e];u?i&&u.disabled?u.enable():!i&&u.enabled&&(u.disable(),u.setValue(!0)):n.addControl(e,new t.i({value:!i,disabled:!i}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return l=>{let n=0;return i.each(l.controls,l=>{!0===l.value&&++n}),n>0?null:{requirePool:!0}}}validateToken(){return l=>{try{if(JSON.parse(atob(l.value)))return null}catch(n){}return{invalidToken:!0}}}import(){const l=[],n=[],e=this.importBootstrapForm.get("pools");i.each(e.controls,(e,t)=>{!0===e.value&&(l.push(t),e.disabled||n.push(t))});const t={mirror_mode:"image"};let o=Object(u.a)(this.rbdMirroringService.setSiteName(this.importBootstrapForm.getValue("siteName")),Object(s.a)(n.map(l=>this.rbdMirroringService.updatePool(l,t))));o=l.reduce((l,n)=>Object(u.a)(l,this.rbdMirroringService.importBootstrapToken(n,this.importBootstrapForm.getValue("direction"),this.importBootstrapForm.getValue("token"))),o).pipe(Object(a.a)());const d=()=>{this.rbdMirroringService.refresh(),this.importBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new r.a("rbd/mirroring/bootstrap/import",{}),call:o}).subscribe(void 0,d,()=>{d(),this.modalRef.hide()})}}},"0BYw":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("ANnk"),s=e("f/UV"),a=e("aexS"),o=e("+gVj"),r=e("SVse"),d=e("EEJc"),c=e("ajRT"),m=e("mXUL"),p=e("IZUe"),h=e("gp3X"),g=e("sb0X"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("daK0"),S=e("LqlI"),_=e("9nlD"),R=e("Ekvf"),y=e("F83c"),w=e("GiVz");e.d(n,"a",(function(){return O}));var k=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","pool"],["id","pool"],["name","pool"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"pool"),l(n,7,0,"pool")}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["-- No rbd pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](-1,null,["-- Select a pool --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","pool"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](9,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,N)),t["ɵdid"](11,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,F)),t["ɵdid"](13,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,V)),t["ɵdid"](15,278528,null,0,r.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"pool"),l(n,7,0,"pool"),l(n,9,0,null===e.pools),l(n,11,0,null!==e.pools&&0===e.pools.length),l(n,13,0,null!==e.pools&&e.pools.length>0),l(n,15,0,e.pools)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function P(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function x(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Namespace already exists."]))],null,null)}function q(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,51,"cd-modal",[],null,null,null,d.c,d.b)),t["ɵdid"](1,49152,null,0,c.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Create Namespace"])),(l()(),t["ɵeld"](4,0,null,1,47,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,46,"form",[["name","namespaceForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,33,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,m.b,m.a)),t["ɵdid"](13,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","pool"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"])),(l()(),t["ɵeld"](18,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](20,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,T)),t["ɵdid"](22,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,D)),t["ɵdid"](24,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](25,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,m.b,m.a)),t["ɵdid"](26,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","namespace"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](31,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](32,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","namespace"],["id","namespace"],["name","namespace"],["placeholder","Namespace name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,33)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,33).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,33)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,33)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](33,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](35,671744,[[3,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](37,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](38,4210688,null,0,p.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](39,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](40,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,P)),t["ɵdid"](42,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,x)),t["ɵdid"](44,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](45,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](46,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](47,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submit()&&t),t}),h.b,h.a)),t["ɵdid"](48,114688,null,0,g.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Create Namespace"])),(l()(),t["ɵeld"](50,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,f.b,f.a)),t["ɵdid"](51,49152,null,0,v.a,[r.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.namespaceForm),l(n,10,0,e.namespaceForm),l(n,13,0),l(n,20,0,!e.poolPermission.read),l(n,22,0,e.poolPermission.read),l(n,24,0,e.namespaceForm.showError("pool",t["ɵnov"](n,7),"required")),l(n,26,0),l(n,35,0,"namespace"),l(n,38,0,""),l(n,40,0,"namespace"),l(n,42,0,e.namespaceForm.showError("namespace",t["ɵnov"](n,7),"required")),l(n,44,0,e.namespaceForm.showError("namespace",t["ɵnov"](n,7),"namespaceExists")),l(n,48,0,e.namespaceForm),l(n,51,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,12,0,t["ɵnov"](n,13).hasErrors,t["ɵnov"](n,13).hasSuccess),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess),l(n,32,0,t["ɵnov"](n,37).ngClassUntouched,t["ɵnov"](n,37).ngClassTouched,t["ɵnov"](n,37).ngClassPristine,t["ɵnov"](n,37).ngClassDirty,t["ɵnov"](n,37).ngClassValid,t["ɵnov"](n,37).ngClassInvalid,t["ɵnov"](n,37).ngClassPending,t["ɵnov"](n,40).validClass,t["ɵnov"](n,40).invalidClass)}))}function B(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-namespace-form-modal",[],null,null,null,q,k)),t["ɵdid"](1,114688,null,0,C.a,[S.a,a.a,_.a,R.a,y.a,w.a],null,null)],(function(l,n){l(n,1,0)}),null)}var O=t["ɵccf"]("cd-rbd-namespace-form-modal",C.a,B,{},{},[])},"0rTx":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("mXUL"),r=e("IZUe"),d=e("ANnk"),c=e("f/UV"),m=e("aexS"),p=e("SVse"),h=e("gp3X"),g=e("sb0X"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("2GqK"),S=e("F83c"),_=e("LqlI"),R=e("2EZI"),y=e("kn/O");e.d(n,"a",(function(){return N}));var w=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,48,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Restore Image"])),(l()(),t["ɵeld"](4,0,null,1,44,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,43,"form",[["class","form"],["name","restoreForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,30,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To restore"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](17,null,["","@",""])),(l()(),t["ɵted"](-1,null,[",  "])),(l()(),t["ɵeld"](19,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["type the image's new name and click"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](22,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Restore Image"])),(l()(),t["ɵted"](-1,null,[". "])),(l()(),t["ɵeld"](25,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](26,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["New Name"])),(l()(),t["ɵeld"](31,0,null,0,8,"input",[["autocomplete","off"],["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,32)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,32).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,32)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,32)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](32,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](34,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](36,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](37,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](38,4210688,null,0,d.a,[[2,c.a],m.a,t.ElementRef],null,null),t["ɵdid"](39,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](41,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](42,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](43,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](44,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.restore()&&t),t}),h.b,h.a)),t["ɵdid"](45,114688,null,0,g.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Restore Image"])),(l()(),t["ɵeld"](47,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,f.b,f.a)),t["ɵdid"](48,49152,null,0,v.a,[p.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.restoreForm),l(n,10,0,e.restoreForm),l(n,26,0),l(n,34,0,"name"),l(n,37,0,""),l(n,39,0,"name"),l(n,41,0,e.restoreForm.showError("name",t["ɵnov"](n,7),"required")),l(n,45,0,e.restoreForm),l(n,48,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,17,0,e.imageSpec,e.imageId),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess),l(n,31,0,t["ɵnov"](n,36).ngClassUntouched,t["ɵnov"](n,36).ngClassTouched,t["ɵnov"](n,36).ngClassPristine,t["ɵnov"](n,36).ngClassDirty,t["ɵnov"](n,36).ngClassValid,t["ɵnov"](n,36).ngClassInvalid,t["ɵnov"](n,36).ngClassPending,t["ɵnov"](n,39).validClass,t["ɵnov"](n,39).invalidClass)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-restore-modal",[],null,null,null,I,w)),t["ɵdid"](1,114688,null,0,C.a,[S.a,_.a,R.a,y.a],null,null)],(function(l,n){l(n,1,0)}),null)}var N=t["ɵccf"]("cd-rbd-trash-restore-modal",C.a,E,{},{},[])},"2GqK":function(l,n,e){"use strict";e.d(n,"a",(function(){return u})),e("F83c"),e("2EZI");var t=e("kvvV"),i=e("jVDg");e("kn/O");class u{constructor(l,n,e,t){this.rbdService=l,this.modalRef=n,this.fb=e,this.taskWrapper=t}ngOnInit(){this.imageSpec=new i.a(this.poolName,this.namespace,this.imageName).toString(),this.restoreForm=this.fb.group({name:this.imageName})}restore(){const l=this.restoreForm.getValue("name"),n=new i.a(this.poolName,this.namespace,this.imageId);this.taskWrapper.wrapTaskAroundCall({task:new t.a("rbd/trash/restore",{image_id_spec:n.toString(),new_image_name:l}),call:this.rbdService.restoreTrash(n,l)}).subscribe(void 0,()=>{this.restoreForm.setErrors({cdSubmitButton:!0})},()=>{this.modalRef.hide()})}}},"2JDI":function(l,n,e){"use strict";e.d(n,"a",(function(){return a}));var t=e("wd/R"),i=(e("F83c"),e("2EZI"),e("1Ni5")),u=e("kvvV"),s=e("jVDg");e("kn/O");class a{constructor(l,n,e,t){this.rbdService=l,this.modalRef=n,this.fb=e,this.taskWrapper=t,this.minDate=new Date,this.bsConfig={dateInputFormat:"YYYY-MM-DD HH:mm:ss",containerClass:"theme-default"},this.createForm()}createForm(){this.moveForm=this.fb.group({expiresAt:["",[i.a.custom("format",l=>!(""===l||t(l,"YYYY-MM-DD HH:mm:ss").isValid())),i.a.custom("expired",l=>t().isAfter(l))]]})}ngOnInit(){this.imageSpec=new s.a(this.poolName,this.namespace,this.imageName),this.imageSpecStr=this.imageSpec.toString(),this.pattern=`${this.poolName}/${this.imageName}`}moveImage(){let l=0;const n=this.moveForm.getValue("expiresAt");n&&(l=t(n).diff(t(),"seconds",!0)),l<0&&(l=0),this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/trash/move",{image_spec:this.imageSpecStr}),call:this.rbdService.moveTrash(this.imageSpec,l)}).subscribe(void 0,void 0,()=>{this.modalRef.hide()})}}},"3IYD":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("8xTl"),s=e("EEJc"),a=e("ajRT"),o=e("s7LF"),r=e("+gVj"),d=e("mXUL"),c=e("IZUe"),m=e("ANnk"),p=e("f/UV"),h=e("aexS"),g=e("gp3X"),f=e("sb0X"),v=e("KVJa"),b=e("Z21x"),C=e("sne2"),S=e("Fd71"),_=e("LqlI"),R=e("F83c"),y=e("VXsX"),w=e("9nlD"),k=e("GiVz");e.d(n,"a",(function(){return V}));var I=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function N(l){return t["ɵvid"](0,[t["ɵpid"](0,i.TitleCasePipe,[]),t["ɵpid"](0,u.a,[]),(l()(),t["ɵeld"](2,0,null,null,40,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](3,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),t["ɵted"](5,null,[""," ",""])),t["ɵppd"](6,1),t["ɵppd"](7,1),(l()(),t["ɵeld"](8,0,null,1,34,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](9,0,null,null,33,"form",[["name","snapshotForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),t["ɵdid"](10,16384,null,0,o.G,[],null,null),t["ɵdid"](11,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,o.d,null,[o.l]),t["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),t["ɵdid"](14,16384,null,0,r.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](15,0,null,null,18,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](16,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](17,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","snapshotName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](22,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","snapshotName"],["id","snapshotName"],["name","snapshotName"],["placeholder","Snapshot name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,24)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,24).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,24)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,24)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](24,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](26,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](28,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](29,4210688,null,0,c.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](30,4210688,null,0,m.a,[[2,p.a],h.a,t.ElementRef],null,null),t["ɵdid"](31,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](33,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](34,0,null,null,8,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](35,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](36,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submit()&&t),t}),g.b,g.a)),t["ɵdid"](37,114688,null,0,f.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](38,0,[""," ",""])),t["ɵppd"](39,1),t["ɵppd"](40,1),(l()(),t["ɵeld"](41,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,v.b,v.a)),t["ɵdid"](42,49152,null,0,b.a,[i.Location,C.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.modalRef),l(n,11,0,e.snapshotForm),l(n,14,0,e.snapshotForm),l(n,17,0),l(n,26,0,"snapshotName"),l(n,29,0,""),l(n,31,0,"snapshotName"),l(n,33,0,e.snapshotForm.showError("snapshotName",t["ɵnov"](n,11),"required")),l(n,37,0,e.snapshotForm),l(n,42,0,"Close",e.modalRef.hide)}),(function(l,n){var e=n.component,i=t["ɵunv"](n,5,0,l(n,6,0,t["ɵnov"](n,0),e.action)),u=t["ɵunv"](n,5,1,l(n,7,0,t["ɵnov"](n,1),e.resource));l(n,5,0,i,u),l(n,9,0,t["ɵnov"](n,13).ngClassUntouched,t["ɵnov"](n,13).ngClassTouched,t["ɵnov"](n,13).ngClassPristine,t["ɵnov"](n,13).ngClassDirty,t["ɵnov"](n,13).ngClassValid,t["ɵnov"](n,13).ngClassInvalid,t["ɵnov"](n,13).ngClassPending),l(n,16,0,t["ɵnov"](n,17).hasErrors,t["ɵnov"](n,17).hasSuccess),l(n,23,0,t["ɵnov"](n,28).ngClassUntouched,t["ɵnov"](n,28).ngClassTouched,t["ɵnov"](n,28).ngClassPristine,t["ɵnov"](n,28).ngClassDirty,t["ɵnov"](n,28).ngClassValid,t["ɵnov"](n,28).ngClassInvalid,t["ɵnov"](n,28).ngClassPending,t["ɵnov"](n,31).validClass,t["ɵnov"](n,31).invalidClass);var s=t["ɵunv"](n,38,0,l(n,39,0,t["ɵnov"](n,0),e.action)),a=t["ɵunv"](n,38,1,l(n,40,0,t["ɵnov"](n,1),e.resource));l(n,38,0,s,a)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-snapshot-form-modal",[],null,null,null,N,I)),t["ɵdid"](1,114688,null,0,S.a,[_.a,R.a,y.a,w.a,k.a,C.b],null,null)],(function(l,n){l(n,1,0)}),null)}var V=t["ɵccf"]("cd-rbd-snapshot-form-modal",S.a,F,{},{},[])},"3ris":function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("yYhs"),i=e("LvDl"),u=(e("uIqm"),e("oxzT"));e("iExv"),e("uYzU");class s{constructor(l,n,e){this.i18n=l,this.iscsiBackstorePipe=n,this.booleanTextPipe=e,this.icons=u.a,this.metadata={},this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}}}set content(l){this.detailTable=l,l&&l.updateColumns()}ngOnInit(){this.columns=[{prop:"displayName",name:this.i18n("Name"),flexGrow:1,cellTemplate:this.highlightTpl},{prop:"current",name:this.i18n("Current"),flexGrow:1,cellTemplate:this.highlightTpl},{prop:"default",name:this.i18n("Default"),flexGrow:1,cellTemplate:this.highlightTpl}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.generateTree()),this.data=void 0}generateTree(){const l=i.cloneDeep(this.selectedItem.target_controls);this.cephIscsiConfigVersion>10&&i.extend(l,i.cloneDeep(this.selectedItem.auth)),this.metadata={root:l};const n={target:{expanded:i.join(this.selectedItem.cdExecuting?[u.a.large,u.a.spinner,u.a.spin]:[u.a.large,u.a.bullseye]," ")},initiators:{expanded:i.join([u.a.large,u.a.user]," "),leaf:i.join([u.a.user]," ")},groups:{expanded:i.join([u.a.large,u.a.users]," "),leaf:i.join([u.a.users]," ")},disks:{expanded:i.join([u.a.large,u.a.disk]," "),leaf:i.join([u.a.disk]," ")},portals:{expanded:i.join([u.a.large,u.a.server]," "),leaf:i.join([u.a.server]," ")}},e=[];i.forEach(this.selectedItem.disks,l=>{const t="disk_"+l.pool+"_"+l.image;this.metadata[t]={controls:l.controls,backstore:l.backstore},["wwn","lun"].forEach(n=>{n in l&&(this.metadata[t][n]=l[n])}),e.push({name:`${l.pool}/${l.image}`,cdId:t,cdIcon:n.disks.leaf})});const t=[];i.forEach(this.selectedItem.portals,l=>{t.push({name:`${l.host}:${l.ip}`,cdIcon:n.portals.leaf})});const s=[];i.forEach(this.selectedItem.clients,l=>{const e=i.cloneDeep(l.auth);l.info&&(i.extend(e,l.info),delete e.state,i.forEach(Object.keys(l.info.state),n=>{e[n.toLowerCase()]=l.info.state[n]})),this.metadata["client_"+l.client_iqn]=e;const t=[];l.luns.forEach(l=>{t.push({name:`${l.pool}/${l.image}`,cdId:"disk_"+l.pool+"_"+l.image,cdIcon:n.disks.leaf})});let u="";l.info&&(u=Object.keys(l.info.state).includes("LOGGED_IN")?"logged_in":"logged_out"),s.push({name:l.client_iqn,status:u,cdId:"client_"+l.client_iqn,children:t,cdIcon:n.initiators.leaf})});const a=[];i.forEach(this.selectedItem.groups,l=>{const e=[];l.disks.forEach(l=>{e.push({name:`${l.pool}/${l.image}`,cdId:"disk_"+l.pool+"_"+l.image,cdIcon:n.disks.leaf})});const t=[];l.members.forEach(l=>{t.push({name:l,cdId:"client_"+l})}),a.push({name:l.group_id,cdIcon:n.groups.leaf,children:[{name:"Disks",children:e,cdIcon:n.disks.expanded},{name:"Initiators",children:t,cdIcon:n.initiators.expanded}]})}),this.nodes=[{name:this.selectedItem.target_iqn,cdId:"root",isExpanded:!0,cdIcon:n.target.expanded,children:[{name:"Disks",isExpanded:!0,children:e,cdIcon:n.disks.expanded},{name:"Portals",isExpanded:!0,children:t,cdIcon:n.portals.expanded},{name:"Initiators",isExpanded:!0,children:s,cdIcon:n.initiators.expanded},{name:"Groups",isExpanded:!0,children:a,cdIcon:n.groups.expanded}]}]}format(l){return"boolean"==typeof l?this.booleanTextPipe.transform(l):l}onNodeSelected(l,n){if(t.a.ACTIVATE(l,n,!0),n.data.cdId){this.title=n.data.name;const l=this.metadata[n.data.cdId]||{};"root"===n.data.cdId?(this.columns[2].isHidden=!1,this.data=i.map(this.settings.target_default_controls,(n,e)=>({displayName:e,default:n=this.format(n),current:i.isUndefined(l[e])?n:this.format(l[e])})),this.cephIscsiConfigVersion>10&&["user","password","mutual_user","mutual_password"].forEach(n=>{this.data.push({displayName:n,default:null,current:l[n]})})):n.data.cdId.toString().startsWith("disk_")?(this.columns[2].isHidden=!1,this.data=i.map(this.settings.disk_default_controls[l.backstore],(n,e)=>({displayName:e,default:n=this.format(n),current:i.isUndefined(l.controls[e])?n:this.format(l.controls[e])})),this.data.push({displayName:"backstore",default:this.iscsiBackstorePipe.transform(this.settings.default_backstore),current:this.iscsiBackstorePipe.transform(l.backstore)}),["wwn","lun"].forEach(n=>{n in l&&this.data.push({displayName:n,default:void 0,current:l[n]})})):(this.columns[2].isHidden=!0,this.data=i.map(l,(l,n)=>({displayName:n,default:void 0,current:this.format(l)})))}else this.data=void 0;this.detailTable&&this.detailTable.updateColumns()}onUpdateData(){this.tree.treeModel.expandAll()}}},"5GyT":function(l,n,e){"use strict";e.d(n,"a",(function(){return v})),e.d(n,"b",(function(){return f}));var t=e("LvDl"),i=(e("F83c"),e("+fVR")),u=e("OLbh"),s=e("0+/T"),a=(e("sne2"),e("uIqm"),e("x38r")),o=e("oxzT"),r=e("yJti"),d=e("vCyI"),c=e("kvvV"),m=e("jVDg"),p=(e("Fgil"),e("o4+5"),e("aexS"),e("VTlA"),e("kn/O"),e("EgGo")),h=e("2JDI"),g=e("u0yg");const f=new p.a("block/rbd");class v extends i.a{constructor(l,n,e,t,i,u,s,a,r,c){super(),this.authStorageService=l,this.rbdService=n,this.dimlessBinaryPipe=e,this.dimlessPipe=t,this.modalService=i,this.taskWrapper=u,this.taskListService=s,this.i18n=a,this.urlBuilder=r,this.actionLabels=c,this.selection=new d.a,this.builders={"rbd/create":l=>this.createRbdFromTask(l.pool_name,l.namespace,l.image_name),"rbd/delete":l=>this.createRbdFromTaskImageSpec(l.image_spec),"rbd/clone":l=>this.createRbdFromTask(l.child_pool_name,l.child_namespace,l.child_image_name),"rbd/copy":l=>this.createRbdFromTask(l.dest_pool_name,l.dest_namespace,l.dest_image_name)},this.permission=this.authStorageService.getPermissions().rbdImage;const p=()=>this.selection.first()&&new m.a(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name).toStringEncoded();this.tableActions=[{permission:"create",icon:o.a.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:l=>!l.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:o.a.edit,routerLink:()=>this.urlBuilder.getEdit(p()),name:this.actionLabels.EDIT},{permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>!l.hasSingleSelection||l.first().cdExecuting,icon:o.a.copy,routerLink:()=>"/block/rbd/copy/"+p(),name:this.actionLabels.COPY},{permission:"update",disable:l=>!l.hasSingleSelection||l.first().cdExecuting||!l.first().parent,icon:o.a.flatten,click:()=>this.flattenRbdModal(),name:this.actionLabels.FLATTEN},{permission:"delete",icon:o.a.destroy,click:()=>this.deleteRbdModal(),name:this.actionLabels.DELETE,disable:l=>this.getDeleteDisableDesc(l)},{permission:"delete",icon:o.a.trash,click:()=>this.trashRbdModal(),name:this.actionLabels.TRASH,disable:l=>!l.first()||!l.hasSingleSelection||l.first().image_format===g.a.V1}]}createRbdFromTaskImageSpec(l){const n=m.a.fromString(l);return this.createRbdFromTask(n.poolName,n.namespace,n.imageName)}createRbdFromTask(l,n,e){const t=new g.b;return t.id="-1",t.unique_id="-1",t.name=e,t.namespace=n,t.pool_name=l,t.image_format=g.a.V2,t}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:2,cellTransformation:a.a.executing},{name:this.i18n("Pool"),prop:"pool_name",flexGrow:2},{name:this.i18n("Namespace"),prop:"namespace",flexGrow:2},{name:this.i18n("Size"),prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Objects"),prop:"num_objs",flexGrow:1,cellClass:"text-right",pipe:this.dimlessPipe},{name:this.i18n("Object size"),prop:"obj_size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Provisioned"),prop:"disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe},{name:this.i18n("Total provisioned"),prop:"total_disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe},{name:this.i18n("Parent"),prop:"parent",flexGrow:2,cellTemplate:this.parentTpl}],this.taskListService.init(()=>this.rbdService.list(),l=>this.prepareResponse(l),l=>this.images=l,()=>this.onFetchError(),l=>["rbd/clone","rbd/copy","rbd/create","rbd/delete","rbd/edit","rbd/flatten","rbd/trash/move"].includes(l.name),(l,n)=>{let e;switch(n.name){case"rbd/copy":e=new m.a(n.metadata.dest_pool_name,n.metadata.dest_namespace,n.metadata.dest_image_name).toString();break;case"rbd/clone":e=new m.a(n.metadata.child_pool_name,n.metadata.child_namespace,n.metadata.child_image_name).toString();break;case"rbd/create":e=new m.a(n.metadata.pool_name,n.metadata.namespace,n.metadata.image_name).toString();break;default:e=n.metadata.image_spec}return e===new m.a(l.pool_name,l.namespace,l.name).toString()},this.builders)}onFetchError(){this.table.reset(),this.viewCacheStatusList=[{status:r.a.ValueException}]}prepareResponse(l){let n=[];const e={};l.forEach(l=>{t.isUndefined(e[l.status])&&(e[l.status]=[]),e[l.status].push(l.pool_name),n=n.concat(l.value)});const i=[];return t.forEach(e,(l,n)=>{i.push({status:parseInt(n,10),statusFor:(l.length>1?"pools ":"pool ")+"<strong>"+l.join("</strong>, <strong>")+"</strong>"})}),this.viewCacheStatusList=i,n}updateSelection(l){this.selection=l}deleteRbdModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().name,t=new m.a(l,n,e);this.modalRef=this.modalService.show(s.a,{initialState:{itemDescription:"RBD",itemNames:[t],bodyTemplate:this.deleteTpl,bodyContext:{hasSnapshots:this.hasSnapshots(),snapshots:this.listProtectedSnapshots()},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new c.a("rbd/delete",{image_spec:t.toString()}),call:this.rbdService.delete(t)})}})}trashRbdModal(){const l={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,hasSnapshots:this.hasSnapshots()};this.modalRef=this.modalService.show(h.a,{initialState:l})}flattenRbd(l){this.taskWrapper.wrapTaskAroundCall({task:new c.a("rbd/flatten",{image_spec:l.toString()}),call:this.rbdService.flatten(l)}).subscribe(void 0,void 0,()=>{this.modalRef.hide()})}flattenRbdModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().name,t=this.selection.first().parent,i=new m.a(t.pool_name,t.pool_namespace,t.image_name),s=new m.a(l,n,e),a={titleText:"RBD flatten",buttonText:"Flatten",bodyTpl:this.flattenTpl,bodyData:{parent:`${i}@${t.snap_name}`,child:s.toString()},onSubmit:()=>{this.flattenRbd(s)}};this.modalRef=this.modalService.show(u.a,{initialState:a})}hasSnapshots(){return(this.selection.first().snapshots||[]).length>0}hasClonedSnapshots(l){return(l.snapshots||[]).some(l=>l.children&&l.children.length>0)}listProtectedSnapshots(){return this.selection.first().snapshots.reduce((l,n)=>(n.is_protected&&l.push(n.name),l),[])}getDeleteDisableDesc(l){const n=l.first();return n&&this.hasClonedSnapshots(n)?this.i18n("This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD."):!l.first()||!l.hasSingleSelection||this.hasClonedSnapshots(l.first())}}},BH9v:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("aXbf");class s{constructor(l,n){this.control=l,this.formatter=n}setValue(l){const n=this.formatter.toMilliseconds(l);this.control.control.setValue(n+" ms")}ngOnInit(){this.setValue(this.control.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.control.value))}onUpdate(l){this.setValue(l)}}var a=e("ANnk"),o=e("f/UV"),r=e("aexS"),d=e("+gVj"),c=e("LvDl"),m=e("IzCI");class p{constructor(l,n,e,i){this.elementRef=l,this.control=n,this.dimlessBinaryPerSecondPipe=e,this.formatter=i,this.ngModelChange=new t.EventEmitter,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.el.value))}setValue(l){/^[\d.]+$/.test(l)&&(l+=this.defaultUnit||"m");const n=this.formatter.toBytes(l,0),e=this.round(n);this.el.value=this.dimlessBinaryPerSecondPipe.transform(e),null!==n?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(l){if(null!==l&&0!==l){if(!c.isUndefined(this.minBytes)&&l<this.minBytes)return this.minBytes;if(!c.isUndefined(this.maxBytes)&&l>this.maxBytes)return this.maxBytes;if(!c.isUndefined(this.roundPower)){const n=Math.round(Math.log(l)/Math.log(this.roundPower));return Math.pow(this.roundPower,n)}}return l}onBlur(l){this.setValue(l)}}class h{constructor(l,n){this.formatter=l,this.ngControl=n}setValue(l){const n=this.formatter.toIops(l);this.ngControl.control.setValue(n+" IOPS")}ngOnInit(){this.setValue(this.ngControl.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.ngControl.value))}onUpdate(l){this.setValue(l)}}var g=e("mXUL"),f=e("4HWh"),v=e("p4Cf"),b=e("SVse");e("rFfW"),e("o8EM"),e.d(n,"a",(function(){return C})),e.d(n,"b",(function(){return I}));var C=t["ɵcrt"]({encapsulation:0,styles:[[".collapsible[_ngcontent-%COMP%]{cursor:pointer;-moz-user-select:none;user-select:none}"]],data:{}});function S(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,8,"input",[["cdMilliseconds",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onUpdate(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,s,[i.q,u.a],{ngDataReady:[0,"ngDataReady"]},null),t["ɵdid"](8,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](9,16384,null,0,d.h,[[3,i.d],d.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady),l(n,9,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,9).validClass,t["ɵnov"](n,9).invalidClass])}))}function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,8,"input",[["cdDimlessBinaryPerSecond",""],["class","form-control"],["defaultUnit","b"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onBlur(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,p,[t.ElementRef,i.q,m.a,u.a],{ngDataReady:[0,"ngDataReady"],defaultUnit:[1,"defaultUnit"]},null),t["ɵdid"](8,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](9,16384,null,0,d.h,[[3,i.d],d.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady,"b"),l(n,9,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,9).validClass,t["ɵnov"](n,9).invalidClass])}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,8,"input",[["cdIops",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,2)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,2)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,2)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,7).onUpdate(e.target.value)&&i),i}),null,null)),t["ɵdid"](2,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](4,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,81920,null,0,h,[u.a,i.q],{ngDataReady:[0,"ngDataReady"]},null),t["ɵdid"](8,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](9,16384,null,0,d.h,[[3,i.d],d.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,n.parent.context.$implicit.name),l(n,7,0,e.ngDataReady),l(n,9,0,n.parent.context.$implicit.name)}),(function(l,n){l(n,1,1,[n.parent.context.$implicit.name,n.parent.context.$implicit.name,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,9).validClass,t["ɵnov"](n,9).invalidClass])}))}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The mininum value is 0"]))],null,null)}function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,g.b,g.a)),t["ɵdid"](1,1163264,null,2,d.c,[t.ElementRef,d.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](5,null,["",""])),(l()(),t["ɵeld"](6,0,null,null,2,"cd-helper",[],null,null,null,f.b,f.a)),t["ɵdid"](7,49152,null,0,v.a,[],null,null),(l()(),t["ɵted"](8,0,["",""])),(l()(),t["ɵeld"](9,0,null,0,20,"div",[],[[8,"className",0]],null,null,null,null)),(l()(),t["ɵeld"](10,0,null,null,17,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,7,null,null,null,null,null,null,null)),t["ɵdid"](12,16384,null,0,b.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,S)),t["ɵdid"](14,278528,null,0,b.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,b.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,_)),t["ɵdid"](16,278528,null,0,b.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,b.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,R)),t["ɵdid"](18,278528,null,0,b.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,b.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵeld"](19,0,null,null,8,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](20,0,null,null,7,"button",[["class","btn btn-light"],["data-toggle","button"],["title","Remove the local configuration value. The parent configuration value will be inherited and used instead."],["type","button"]],null,[[null,"click"]],(function(l,n,e){var t=!0;return"click"===n&&(t=!1!==l.component.reset(l.context.$implicit.name)&&t),t}),null,null)),t["ɵprd"](512,null,b["ɵNgClassImpl"],b["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](22,278528,null,0,b.NgClass,[b["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t["ɵpod"](23,{active:0}),(l()(),t["ɵeld"](24,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),t["ɵprd"](512,null,b["ɵNgClassImpl"],b["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](26,278528,null,0,b.NgClass,[b["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵpad"](27,1),(l()(),t["ɵand"](16777216,null,null,1,null,y)),t["ɵdid"](29,16384,null,0,b.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,12,0,n.context.$implicit.type),l(n,14,0,e.configurationType.milliseconds),l(n,16,0,e.configurationType.bps),l(n,18,0,e.configurationType.iops);var i=l(n,23,0,e.isDisabled(n.context.$implicit.name));l(n,22,0,"btn btn-light",i);var u=l(n,27,0,e.icons.erase);l(n,26,0,u),l(n,29,0,e.form.showError("configuration."+n.context.$implicit.name,t["ɵnov"](n.parent.parent,0),"min"))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess),l(n,4,0,n.context.$implicit.name),l(n,5,0,n.context.$implicit.displayName),l(n,8,0,n.context.$implicit.description),l(n,9,0,t["ɵinlineInterpolate"](1,"cd-col-form-input ",n.parent.context.$implicit.heading,""))}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,5,"h4",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵeld"](2,0,null,null,4,"span",[["class","collapsible"]],null,[[null,"click"]],(function(l,n,e){var t=!0;return"click"===n&&(t=!1!==l.component.toggleSectionVisibility(l.context.$implicit.class)&&t),t}),null,null)),(l()(),t["ɵted"](3,null,[" "," "])),(l()(),t["ɵeld"](4,0,null,null,2,"i",[["aria-hidden","true"]],null,null,null,null,null)),t["ɵprd"](512,null,b["ɵNgClassImpl"],b["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](6,278528,null,0,b.NgClass,[b["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(l()(),t["ɵeld"](7,0,null,null,2,"div",[],[[8,"className",0],[8,"hidden",0]],null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](9,278528,null,0,b.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,6,0,e.sectionVisibility[n.context.$implicit.class]?e.icons.minusCircle:e.icons.addCircle),l(n,9,0,n.context.$implicit.options)}),(function(l,n){var e=n.component;l(n,3,0,n.context.$implicit.heading),l(n,7,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.class,""),!e.sectionVisibility[n.context.$implicit.class])}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,[["cfgFormGroup",1]],null,8,"fieldset",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,1).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,1).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,4).onSubmit()&&i),i}),null,null)),t["ɵdid"](1,540672,null,0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](3,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](4,16384,null,0,d.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["RBD Configuration"])),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](8,278528,null,0,b.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.form.get("configuration")),l(n,4,0,e.form.get("configuration")),l(n,8,0,e.rbdConfigurationService.sections)}),(function(l,n){l(n,0,0,t["ɵnov"](n,3).ngClassUntouched,t["ɵnov"](n,3).ngClassTouched,t["ɵnov"](n,3).ngClassPristine,t["ɵnov"](n,3).ngClassDirty,t["ɵnov"](n,3).ngClassValid,t["ɵnov"](n,3).ngClassInvalid,t["ɵnov"](n,3).ngClassPending)}))}},E7j4:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("ANnk"),s=e("f/UV"),a=e("aexS"),o=e("+gVj"),r=e("EEJc"),d=e("ajRT"),c=e("mXUL"),m=e("IZUe"),p=e("SVse"),h=e("gp3X"),g=e("sb0X"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("+26A"),S=e("LqlI"),_=e("XED3"),R=e("kn/O");e.d(n,"a",(function(){return D}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.key),l(n,2,0,n.context.$implicit.key)}),(function(l,n){l(n,3,0,n.context.$implicit.desc)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,3).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,3).onTouched()&&i),i}),null,null)),t["ɵdid"](2,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](3,16384,null,0,i.c,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.c]),t["ɵdid"](5,671744,[[5,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](7,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](8,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](9,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](10,null,["",""]))],(function(l,n){l(n,5,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,8,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""))}),(function(l,n){l(n,1,1,[t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵnov"](n,7).ngClassUntouched,t["ɵnov"](n,7).ngClassTouched,t["ɵnov"](n,7).ngClassPristine,t["ɵnov"](n,7).ngClassDirty,t["ɵnov"](n,7).ngClassValid,t["ɵnov"](n,7).ngClassInvalid,t["ɵnov"](n,7).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass]),l(n,9,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,10,0,n.context.$implicit.name)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["At least one pool is required."]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The token is invalid."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,89,"cd-modal",[],null,null,null,r.c,r.b)),t["ɵdid"](1,49152,null,0,d.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Import Bootstrap Token"])),(l()(),t["ɵeld"](4,0,null,1,85,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,84,"form",[["class","form"],["name","importBootstrapForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,71,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To import a bootstrap token which was created by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, provide the generated token, and click "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Import"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](19,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,8,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,27)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,27).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,27)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,27)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,m.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](27,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](29,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](31,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](32,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,w)),t["ɵdid"](34,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](35,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](36,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](39,0,null,0,2,"label",[["class","col-form-label"],["for","direction"]],null,null,null,null,null)),(l()(),t["ɵeld"](40,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Direction"])),(l()(),t["ɵeld"](42,0,null,0,9,"select",[["class","form-control custom-select"],["formControlName","direction"],["id","direction"],["name","direction"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,44).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,44).onTouched()&&i),i}),null,null)),t["ɵdid"](43,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](44,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](46,671744,[[3,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](48,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](49,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](51,278528,null,0,p.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](52,0,null,null,12,"div",[["class","form-group"],["formGroupName","pools"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](53,212992,null,0,i.m,[[3,i.d],[8,null],[8,null]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.d,null,[i.m]),t["ɵdid"](55,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](56,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](59,0,null,0,1,"label",[["class","col-form-label required"],["for","pools"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵand"](16777216,null,0,1,null,I)),t["ɵdid"](62,278528,null,0,p.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,E)),t["ɵdid"](64,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](65,0,null,null,17,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](66,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](69,0,null,0,1,"label",[["class","col-form-label required"],["for","token"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Token"])),(l()(),t["ɵeld"](71,0,null,0,7,"textarea",[["class","form-control resize-vertical"],["formControlName","token"],["id","token"],["placeholder","Generated token..."]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,72)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,72).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,72)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,72)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](72,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](74,671744,[[7,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](76,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](77,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵted"](-1,null,["          "])),(l()(),t["ɵand"](16777216,null,0,1,null,N)),t["ɵdid"](80,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,F)),t["ɵdid"](82,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](83,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](84,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](85,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.import()&&t),t}),h.b,h.a)),t["ɵdid"](86,114688,null,0,g.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Import"])),(l()(),t["ɵeld"](88,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,f.b,f.a)),t["ɵdid"](89,49152,null,0,v.a,[p.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.importBootstrapForm),l(n,10,0,e.importBootstrapForm),l(n,19,0),l(n,25,0,""),l(n,29,0,"siteName"),l(n,32,0,"siteName"),l(n,34,0,e.importBootstrapForm.showError("siteName",t["ɵnov"](n,7),"required")),l(n,36,0),l(n,46,0,"direction"),l(n,49,0,"direction"),l(n,51,0,e.directions),l(n,53,0,"pools"),l(n,56,0),l(n,62,0,e.pools),l(n,64,0,e.importBootstrapForm.showError("pools",t["ɵnov"](n,7),"requirePool")),l(n,66,0),l(n,74,0,"token"),l(n,77,0,"token"),l(n,80,0,e.importBootstrapForm.showError("token",t["ɵnov"](n,7),"required")),l(n,82,0,e.importBootstrapForm.showError("token",t["ɵnov"](n,7),"invalidToken")),l(n,86,0,e.importBootstrapForm),l(n,89,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,31).ngClassUntouched,t["ɵnov"](n,31).ngClassTouched,t["ɵnov"](n,31).ngClassPristine,t["ɵnov"](n,31).ngClassDirty,t["ɵnov"](n,31).ngClassValid,t["ɵnov"](n,31).ngClassInvalid,t["ɵnov"](n,31).ngClassPending,t["ɵnov"](n,32).validClass,t["ɵnov"](n,32).invalidClass),l(n,35,0,t["ɵnov"](n,36).hasErrors,t["ɵnov"](n,36).hasSuccess),l(n,42,0,t["ɵnov"](n,48).ngClassUntouched,t["ɵnov"](n,48).ngClassTouched,t["ɵnov"](n,48).ngClassPristine,t["ɵnov"](n,48).ngClassDirty,t["ɵnov"](n,48).ngClassValid,t["ɵnov"](n,48).ngClassInvalid,t["ɵnov"](n,48).ngClassPending,t["ɵnov"](n,49).validClass,t["ɵnov"](n,49).invalidClass),l(n,52,0,t["ɵnov"](n,55).ngClassUntouched,t["ɵnov"](n,55).ngClassTouched,t["ɵnov"](n,55).ngClassPristine,t["ɵnov"](n,55).ngClassDirty,t["ɵnov"](n,55).ngClassValid,t["ɵnov"](n,55).ngClassInvalid,t["ɵnov"](n,55).ngClassPending,t["ɵnov"](n,56).hasErrors,t["ɵnov"](n,56).hasSuccess),l(n,65,0,t["ɵnov"](n,66).hasErrors,t["ɵnov"](n,66).hasSuccess),l(n,71,0,t["ɵnov"](n,76).ngClassUntouched,t["ɵnov"](n,76).ngClassTouched,t["ɵnov"](n,76).ngClassPristine,t["ɵnov"](n,76).ngClassDirty,t["ɵnov"](n,76).ngClassValid,t["ɵnov"](n,76).ngClassInvalid,t["ɵnov"](n,76).ngClassPending,t["ɵnov"](n,77).validClass,t["ɵnov"](n,77).invalidClass)}))}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-bootstrap-import-modal",[],null,null,null,V,y)),t["ɵdid"](1,245760,null,0,C.a,[S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var D=t["ɵccf"]("cd-bootstrap-import-modal",C.a,T,{},{},[])},EFGL:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("IzCI"),s=e("aXbf"),a=e("dEH0"),o=e("BQkM"),r=e("25BL"),d=e("uIqm");e("aAWM"),e("o8EM"),e("GiVz"),e.d(n,"a",(function(){return c})),e.d(n,"b",(function(){return _}));var c=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function m(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Global"]))],null,null)}function p(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Image"]))],null,null)}function h(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"]))],null,null)}function g(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"div",[],null,null,null,null,null)),t["ɵdid"](1,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,m)),t["ɵdid"](3,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,p)),t["ɵdid"](5,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,h)),t["ɵdid"](7,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],(function(l,n){l(n,1,0,n.context.value),l(n,3,0,"global"),l(n,5,0,"image"),l(n,7,0,"pool")}),null)}function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,0),n.parent.context.value));l(n,1,0,e)}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,1),n.parent.context.value));l(n,1,0,e)}))}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),t["ɵppd"](2,1)],null,(function(l,n){var e=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),n.parent.context.value));l(n,1,0,e)}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,9,"div",[],null,null,null,null,null)),t["ɵdid"](1,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,f)),t["ɵdid"](3,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,v)),t["ɵdid"](5,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,b)),t["ɵdid"](7,278528,null,0,i.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,C)),t["ɵdid"](9,16384,null,0,i.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,i.NgSwitch],null,null)],(function(l,n){var e=n.component;l(n,1,0,n.context.row.type),l(n,3,0,e.typeField.bps),l(n,5,0,e.typeField.milliseconds),l(n,7,0,e.typeField.iops)}),null)}function _(l){return t["ɵvid"](0,[t["ɵpid"](0,u.a,[s.a]),t["ɵpid"](0,a.a,[]),t["ɵpid"](0,o.a,[]),t["ɵqud"](402653184,1,{configurationSourceTpl:0}),t["ɵqud"](402653184,2,{configurationValueTpl:0}),t["ɵqud"](402653184,3,{poolConfTable:0}),(l()(),t["ɵeld"](6,0,null,null,1,"cd-table",[["identifier","name"]],null,null,null,r.b,r.a)),t["ɵdid"](7,2867200,[[3,4],["poolConfTable",4]],0,d.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],identifier:[2,"identifier"]},null),(l()(),t["ɵand"](0,[[1,2],["configurationSourceTpl",2]],null,0,null,g)),(l()(),t["ɵand"](0,[[2,2],["configurationValueTpl",2]],null,0,null,S))],(function(l,n){var e=n.component;l(n,7,0,e.data,e.poolConfigurationColumns,"name")}),null)}},Ekvf:function(l,n,e){"use strict";e.d(n,"a",(function(){return d}));var t=e("mrSG"),i=e("IheW"),u=e("lJxs"),s=e("xTzq"),a=e("o8EM"),o=e("8Y7J"),r=e("pL04");let d=(()=>{let l=class{constructor(l,n){this.http=l,this.rbdConfigurationService=n,this.apiPath="api/pool"}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}update(l){let n;return l.hasOwnProperty("srcpool")?(n=l.srcpool,delete l.srcpool):(n=l.pool,delete l.pool),this.http.put(`${this.apiPath}/${encodeURIComponent(n)}`,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}get(l){return this.http.get(`${this.apiPath}/${l}`)}getList(){return this.http.get(this.apiPath+"?stats=true")}getConfiguration(l){return this.http.get(`${this.apiPath}/${l}/configuration`).pipe(Object(u.a)(l=>l.map(l=>Object.assign(l,this.rbdConfigurationService.getOptionByName(l.name)))))}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}list(l=[]){const n=l.join(",");return this.http.get(`${this.apiPath}?attrs=${n}`).toPromise().then(l=>l)}};return l.ngInjectableDef=o["ɵɵdefineInjectable"]({factory:function(){return new l(o["ɵɵinject"](i.c),o["ɵɵinject"](a.a))},token:l,providedIn:r.a}),l=t.__decorate([s.a,t.__metadata("design:paramtypes",[i.c,a.a])],l),l})()},F83c:function(l,n,e){"use strict";e.d(n,"a",(function(){return m}));var t=e("mrSG"),i=e("IheW"),u=e("LvDl"),s=e("lJxs"),a=e("xTzq"),o=e("jVDg"),r=e("o8EM"),d=e("8Y7J"),c=e("pL04");let m=(()=>{let l=class{constructor(l,n){this.http=l,this.rbdConfigurationService=n}isRBDPool(l){return-1!==u.indexOf(l.application_metadata,"rbd")&&!l.pool_name.includes("/")}create(l){return this.http.post("api/block/image",l,{observe:"response"})}delete(l){return this.http.delete("api/block/image/"+l.toStringEncoded(),{observe:"response"})}update(l,n){return this.http.put("api/block/image/"+l.toStringEncoded(),n,{observe:"response"})}get(l){return this.http.get("api/block/image/"+l.toStringEncoded())}list(){return this.http.get("api/block/image").pipe(Object(s.a)(l=>l.map(l=>(l.value.map(l=>l.configuration?(l.configuration.map(l=>Object.assign(l,this.rbdConfigurationService.getOptionByName(l.name))),l):l),l))))}copy(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/copy`,n,{observe:"response"})}flatten(l){return this.http.post(`api/block/image/${l.toStringEncoded()}/flatten`,null,{observe:"response"})}defaultFeatures(){return this.http.get("api/block/image/default_features")}createSnapshot(l,n){const e={snapshot_name:n};return this.http.post(`api/block/image/${l.toStringEncoded()}/snap`,e,{observe:"response"})}renameSnapshot(l,n,e){const t={new_snap_name:e};return this.http.put(`api/block/image/${l.toStringEncoded()}/snap/${n}`,t,{observe:"response"})}protectSnapshot(l,n,e){const t={is_protected:e};return this.http.put(`api/block/image/${l.toStringEncoded()}/snap/${n}`,t,{observe:"response"})}rollbackSnapshot(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/snap/${n}/rollback`,null,{observe:"response"})}cloneSnapshot(l,n,e){return this.http.post(`api/block/image/${l.toStringEncoded()}/snap/${n}/clone`,e,{observe:"response"})}deleteSnapshot(l,n){return this.http.delete(`api/block/image/${l.toStringEncoded()}/snap/${n}`,{observe:"response"})}listTrash(){return this.http.get("api/block/image/trash/")}createNamespace(l,n){return this.http.post(`api/block/pool/${l}/namespace`,{namespace:n},{observe:"response"})}listNamespaces(l){return this.http.get(`api/block/pool/${l}/namespace/`)}deleteNamespace(l,n){return this.http.delete(`api/block/pool/${l}/namespace/${n}`,{observe:"response"})}moveTrash(l,n){return this.http.post(`api/block/image/${l.toStringEncoded()}/move_trash`,{delay:n},{observe:"response"})}purgeTrash(l){return this.http.post("api/block/image/trash/purge/?pool_name="+l,null,{observe:"response"})}restoreTrash(l,n){return this.http.post(`api/block/image/trash/${l.toStringEncoded()}/restore`,{new_image_name:n},{observe:"response"})}removeTrash(l,n=!1){return this.http.delete(`api/block/image/trash/${l.toStringEncoded()}/?force=${n}`,{observe:"response"})}};return l.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new l(d["ɵɵinject"](i.c),d["ɵɵinject"](r.a))},token:l,providedIn:c.a}),t.__decorate([t.__param(1,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String]),t.__metadata("design:returntype",void 0)],l.prototype,"createSnapshot",null),t.__decorate([t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String,String]),t.__metadata("design:returntype",void 0)],l.prototype,"renameSnapshot",null),t.__decorate([t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String,Boolean]),t.__metadata("design:returntype",void 0)],l.prototype,"protectSnapshot",null),t.__decorate([t.__param(1,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[o.a,String]),t.__metadata("design:returntype",void 0)],l.prototype,"restoreTrash",null),l=t.__decorate([a.a,t.__metadata("design:paramtypes",[i.c,r.a])],l),l})()},Fd71:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("s7LF"),i=e("XNiG"),u=(e("F83c"),e("sne2"),e("QFaf")),s=e("kvvV"),a=e("jVDg");e("9nlD"),e("VXsX");class o{constructor(l,n,e,t,i,u){this.modalRef=l,this.rbdService=n,this.taskManagerService=e,this.notificationService=t,this.i18n=i,this.actionLabels=u,this.editing=!1,this.action=this.actionLabels.CREATE,this.resource=this.i18n("RBD Snapshot"),this.createForm()}createForm(){this.snapshotForm=new u.a({snapshotName:new t.i("",{validators:[t.B.required]})})}ngOnInit(){this.onSubmit=new i.a}setSnapName(l){this.snapName=l,this.snapshotForm.get("snapshotName").setValue(l)}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.RENAME:this.actionLabels.CREATE}editAction(){const l=this.snapshotForm.getValue("snapshotName"),n=new a.a(this.poolName,this.namespace,this.imageName),e=new s.a;e.name="rbd/snap/edit",e.metadata={image_spec:n.toString(),snapshot_name:l},this.rbdService.renameSnapshot(n,this.snapName,l).toPromise().then(()=>{this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)}),this.modalRef.hide(),this.onSubmit.next(this.snapName)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}createAction(){const l=this.snapshotForm.getValue("snapshotName"),n=new a.a(this.poolName,this.namespace,this.imageName),e=new s.a;e.name="rbd/snap/create",e.metadata={image_spec:n.toString(),snapshot_name:l},this.rbdService.createSnapshot(n,l).toPromise().then(()=>{this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)}),this.modalRef.hide(),this.onSubmit.next(l)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}submit(){this.editing?this.editAction():this.createAction()}}},I4Qz:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("SVse"),r=e("mXUL"),d=e("ienR"),c=e("z/SZ"),m=e("ANnk"),p=e("f/UV"),h=e("aexS"),g=e("gp3X"),f=e("sb0X"),v=e("KVJa"),b=e("Z21x"),C=e("sne2"),S=e("2JDI"),_=e("F83c"),R=e("LqlI"),y=e("2EZI"),w=e("kn/O");e.d(n,"a",(function(){return T}));var k=t["ɵcrt"]({encapsulation:0,styles:[[".bs-datepicker-head bs-datepicker-navigation-view{display:flex;justify-content:space-between}"]],data:{}});function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"div",[["class","alert alert-warning"],["role","alert"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This image contains snapshot(s), which will prevent it from being removed after moved to trash."]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,['Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".']))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Protection has already expired. Please pick a future date or leave it empty."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,49,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Move an image to trash"])),(l()(),t["ɵeld"](4,0,null,1,45,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,44,"form",[["class","form"],["name","moveForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,31,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](13,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](14,0,null,null,7,"p",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To move "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](17,null,["",""])),(l()(),t["ɵted"](-1,null,[" to trash, click "])),(l()(),t["ɵeld"](19,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Move Image"])),(l()(),t["ɵted"](-1,null,[". Optionally, you can pick an expiration date."])),(l()(),t["ɵeld"](22,0,null,null,20,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](23,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](26,0,null,0,1,"label",[["class","col-form-label"],["for","expires"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Protection expires at"])),(l()(),t["ɵeld"](28,16777216,null,0,10,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","expiresAt"],["placeholder","NOT PROTECTED"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,29)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,29).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,29)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,29)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,31).onChange(e)&&i),"keyup.esc"===n&&(i=!1!==t["ɵnov"](l,31).hide()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,31).onBlur()&&i),i}),null,null)),t["ɵdid"](29,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵdid"](30,737280,null,0,d.c,[d.a,t.ElementRef,t.Renderer2,t.ViewContainerRef,c.a],{bsConfig:[0,"bsConfig"],minDate:[1,"minDate"]},null),t["ɵdid"](31,16384,null,0,d.f,[d.c,d.l,t.Renderer2,t.ElementRef,t.ChangeDetectorRef],null,null),t["ɵprd"](1024,null,s.o,(function(l){return[l]}),[d.f]),t["ɵprd"](1024,null,s.p,(function(l,n){return[l,n]}),[s.e,d.f]),t["ɵdid"](34,671744,[[1,4]],0,s.j,[[3,s.d],[6,s.o],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](36,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](37,4210688,null,0,m.a,[[2,p.a],h.a,t.ElementRef],null,null),t["ɵdid"](38,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,E)),t["ɵdid"](40,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,N)),t["ɵdid"](42,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](43,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](44,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](45,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.moveImage()&&t),t}),g.b,g.a)),t["ɵdid"](46,114688,null,0,f.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Move Image"])),(l()(),t["ɵeld"](48,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,v.b,v.a)),t["ɵdid"](49,49152,null,0,b.a,[o.Location,C.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.moveForm),l(n,10,0,e.moveForm),l(n,13,0,e.hasSnapshots),l(n,23,0),l(n,30,0,e.bsConfig,e.minDate),l(n,34,0,"expiresAt"),l(n,38,0,"expiresAt"),l(n,40,0,e.moveForm.showError("expiresAt",t["ɵnov"](n,7),"format")),l(n,42,0,e.moveForm.showError("expiresAt",t["ɵnov"](n,7),"expired")),l(n,46,0,e.moveForm),l(n,49,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,17,0,e.imageSpecStr),l(n,22,0,t["ɵnov"](n,23).hasErrors,t["ɵnov"](n,23).hasSuccess),l(n,28,0,t["ɵnov"](n,36).ngClassUntouched,t["ɵnov"](n,36).ngClassTouched,t["ɵnov"](n,36).ngClassPristine,t["ɵnov"](n,36).ngClassDirty,t["ɵnov"](n,36).ngClassValid,t["ɵnov"](n,36).ngClassInvalid,t["ɵnov"](n,36).ngClassPending,t["ɵnov"](n,38).validClass,t["ɵnov"](n,38).invalidClass)}))}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-move-modal",[],null,null,null,F,k)),t["ɵdid"](1,114688,null,0,S.a,[_.a,R.a,y.a,w.a],null,null)],(function(l,n){l(n,1,0)}),null)}var T=t["ɵccf"]("cd-rbd-trash-move-modal",S.a,V,{},{},[])},JBea:function(l,n,e){"use strict";e.d(n,"a",(function(){return t})),e("lArG");class t{constructor(){}ngOnChanges(){this.selection&&(this.rbdDashboardUrl=`rbd-details?var-Pool=${this.selection.pool_name}&var-Image=${this.selection.name}`)}}},"JIi+":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("978R"),u=e("z/SZ"),s=e("2uy1"),a=e("SVse"),o=e("pKUh"),r=e("2ZVE"),d=e("25BL"),c=e("uIqm"),m=e("NUGo"),p=e("S7zO"),h=e("VTlA"),g=e("ufoC"),f=e("mSOc"),v=e("wd/R"),b=e("LRne"),C=e("F83c"),S=e("OLbh"),_=e("0+/T"),R=e("sne2"),y=e("x38r"),w=e("vCyI"),k=e("QTAa"),I=e("kvvV"),E=e("jVDg"),N=e("a0VL"),F=e("Fgil"),V=e("aexS"),T=e("9nlD"),D=e("VXsX"),P=e("Fd71"),x=e("LvDl"),q=e("oxzT");class B{constructor(l,n,e){this.i18n=l,this.create={permission:"create",icon:q.a.add,name:n.CREATE},this.rename={permission:"update",icon:q.a.edit,name:n.RENAME},this.protect={permission:"update",icon:q.a.lock,visible:l=>l.hasSingleSelection&&!l.first().is_protected,name:n.PROTECT},this.unprotect={permission:"update",icon:q.a.unlock,visible:l=>l.hasSingleSelection&&l.first().is_protected,name:n.UNPROTECT},this.clone={permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>this.getCloneDisableDesc(l,e),icon:q.a.clone,name:n.CLONE},this.copy={permission:"create",canBePrimary:l=>l.hasSingleSelection,disable:l=>!l.hasSingleSelection||l.first().cdExecuting,icon:q.a.copy,name:n.COPY},this.rollback={permission:"update",icon:q.a.undo,name:n.ROLLBACK},this.deleteSnap={permission:"delete",icon:q.a.destroy,disable:l=>{const n=l.first();return!l.hasSingleSelection||n.cdExecuting||n.is_protected},name:n.DELETE},this.ordering=[this.create,this.rename,this.protect,this.unprotect,this.clone,this.copy,this.rollback,this.deleteSnap]}getCloneDisableDesc(l,n){return!(l&&l.hasSingleSelection&&!l.first().cdExecuting)||!x.includes(n,"layering")&&this.i18n("Parent image must support Layering")}}class O{}class A{constructor(l,n,e,t,i,u,s,a,o,r,d){this.authStorageService=l,this.modalService=n,this.dimlessBinaryPipe=e,this.cdDatePipe=t,this.rbdService=i,this.taskManagerService=u,this.notificationService=s,this.summaryService=a,this.taskListService=o,this.i18n=r,this.actionLabels=d,this.snapshots=[],this.selection=new w.a,this.builders={"rbd/snap/create":l=>{const n=new O;return n.name=l.snapshot_name,n}},this.permission=this.authStorageService.getPermissions().rbdImage}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",cellTransformation:y.a.executing,flexGrow:2},{name:this.i18n("Size"),prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("Provisioned"),prop:"disk_usage",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:this.i18n("State"),prop:"is_protected",flexGrow:1,cellTransformation:y.a.badge,customTemplateConfig:{map:{true:{value:this.i18n("PROTECTED"),class:"badge-success"},false:{value:this.i18n("UNPROTECTED"),class:"badge-info"}}}},{name:this.i18n("Created"),prop:"timestamp",flexGrow:1,pipe:this.cdDatePipe}]}ngOnChanges(){const l=new E.a(this.poolName,this.namespace,this.rbdName),n=new B(this.i18n,this.actionLabels,this.featuresName);n.create.click=()=>this.openCreateSnapshotModal(),n.rename.click=()=>this.openEditSnapshotModal(),n.protect.click=()=>this.toggleProtection(),n.unprotect.click=()=>this.toggleProtection();const e=()=>this.selection.first()&&`${l.toStringEncoded()}/${encodeURIComponent(this.selection.first().name)}`;n.clone.routerLink=()=>"/block/rbd/clone/"+e(),n.copy.routerLink=()=>"/block/rbd/copy/"+e(),n.rollback.click=()=>this.rollbackModal(),n.deleteSnap.click=()=>this.deleteSnapshotModal(),this.tableActions=n.ordering,this.taskListService.init(()=>Object(b.a)(this.snapshots),null,l=>this.data=l,()=>this.data=this.snapshots,n=>["rbd/snap/create","rbd/snap/delete","rbd/snap/edit","rbd/snap/rollback"].includes(n.name)&&l.toString()===n.metadata.image_spec,(l,n)=>l.name===n.metadata.snapshot_name,this.builders)}openSnapshotModal(l,n=null){this.modalRef=this.modalService.show(P.a),this.modalRef.content.poolName=this.poolName,this.modalRef.content.imageName=this.rbdName,this.modalRef.content.namespace=this.namespace,n?this.modalRef.content.setEditing():n=`${this.rbdName}_${v().toISOString(!0)}`,this.modalRef.content.setSnapName(n),this.modalRef.content.onSubmit.subscribe(n=>{const e=new k.a;e.name=l,e.metadata={image_name:this.rbdName,pool_name:this.poolName,snapshot_name:n},this.summaryService.addRunningTask(e),this.ngOnChanges()})}openCreateSnapshotModal(){this.openSnapshotModal("rbd/snap/create")}openEditSnapshotModal(){this.openSnapshotModal("rbd/snap/edit",this.selection.first().name)}toggleProtection(){const l=this.selection.first().name,n=this.selection.first().is_protected,e=new I.a;e.name="rbd/snap/edit";const t=new E.a(this.poolName,this.namespace,this.rbdName);e.metadata={image_spec:t.toString(),snapshot_name:l},this.rbdService.protectSnapshot(t,l,!n).toPromise().then(()=>{const l=new k.a;l.name=e.name,l.metadata=e.metadata,this.summaryService.addRunningTask(l),this.ngOnChanges(),this.taskManagerService.subscribe(e.name,e.metadata,l=>{this.notificationService.notifyTask(l)})})}_asyncTask(l,n,e){const t=new I.a;t.name=n,t.metadata={image_spec:new E.a(this.poolName,this.namespace,this.rbdName).toString(),snapshot_name:e};const i=new E.a(this.poolName,this.namespace,this.rbdName);this.rbdService[l](i,e).toPromise().then(()=>{const l=new k.a;l.name=t.name,l.metadata=t.metadata,this.summaryService.addRunningTask(l),this.modalRef.hide(),this.ngOnChanges(),this.taskManagerService.subscribe(l.name,l.metadata,l=>{this.notificationService.notifyTask(l)})}).catch(()=>{this.modalRef.content.stopLoadingSpinner()})}rollbackModal(){const l=this.selection.selected[0].name,n=new E.a(this.poolName,this.namespace,this.rbdName).toString(),e={titleText:this.i18n("RBD snapshot rollback"),buttonText:this.i18n("Rollback"),bodyTpl:this.rollbackTpl,bodyData:{snapName:`${n}@${l}`},onSubmit:()=>{this._asyncTask("rollbackSnapshot","rbd/snap/rollback",l)}};this.modalRef=this.modalService.show(S.a,{initialState:e})}deleteSnapshotModal(){const l=this.selection.selected[0].name;this.modalRef=this.modalService.show(_.a,{initialState:{itemDescription:this.i18n("RBD snapshot"),itemNames:[l],submitAction:()=>this._asyncTask("deleteSnapshot","rbd/snap/delete",l)}})}updateSelection(l){this.selection=l}}var M=e("LqlI"),L=e("GiVz"),j=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function U(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["You are about to rollback"])),(l()(),t["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](3,null,[" ",""])),(l()(),t["ɵted"](-1,null,[".\n"]))],null,(function(l,n){l(n,3,0,n.context.$implicit.snapName)}))}function G(l){return t["ɵvid"](0,[t["ɵqud"](671088640,1,{nameTpl:0}),t["ɵqud"](402653184,2,{rollbackTpl:0}),(l()(),t["ɵeld"](2,0,null,null,3,"cd-table",[["columnMode","flex"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(l,n,e){var t=!0;return"updateSelection"===n&&(t=!1!==l.component.updateSelection(e)&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),t["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,m.b,m.a)),t["ɵdid"](5,114688,null,0,p.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵand"](0,[[2,2],["rollbackTpl",2]],null,0,null,U))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex","single"),l(n,5,0,e.permission,e.selection,e.tableActions)}),null)}var $=e("EFGL"),z=e("aAWM"),X=e("aXbf"),W=e("o8EM"),J=e("a278"),Y=e("insk"),K=e("cUpR"),Z=e("20UP"),H=e("nSDx"),Q=e("o4+5"),ll=e("JBea");e.d(n,"b",(function(){return nl})),e.d(n,"c",(function(){return gl})),e.d(n,"a",(function(){return vl}));var nl=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function el(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Only available for RBD images with "])),(l()(),t["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["fast-diff"])),(l()(),t["ɵted"](-1,null,[" enabled"]))],null,null)}function tl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""]))],null,(function(l,n){l(n,2,0,n.context.$implicit)}))}function il(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"span",[["class","form-text text-muted"],["placement","right"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),t["ɵted"](-1,null,["N/A"]))],(function(l,n){l(n,2,0,t["ɵnov"](n.parent.parent,5),"right")}),null)}function ul(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,[" "," "])),t["ɵppd"](2,1)],null,(function(l,n){var e=n.component,i=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),e.selection.disk_usage));l(n,1,0,i)}))}function sl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"span",[["class","form-text text-muted"],["placement","right"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),t["ɵted"](-1,null,["N/A"]))],(function(l,n){l(n,2,0,t["ɵnov"](n.parent.parent,5),"right")}),null)}function al(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,[" "," "])),t["ɵppd"](2,1)],null,(function(l,n){var e=n.component,i=t["ɵunv"](n,1,0,l(n,2,0,t["ɵnov"](n.parent.parent,2),e.selection.total_disk_usage));l(n,1,0,i)}))}function ol(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["/",""]))],null,(function(l,n){l(n,1,0,n.component.selection.parent.pool_namespace)}))}function rl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""])),(l()(),t["ɵand"](16777216,null,null,1,null,ol)),t["ɵdid"](3,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵted"](4,null,["/","@",""]))],(function(l,n){l(n,3,0,n.component.selection.parent.pool_namespace)}),(function(l,n){var e=n.component;l(n,1,0,e.selection.parent.pool_name),l(n,4,0,e.selection.parent.image_name,e.selection.parent.snap_name)}))}function dl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["-"]))],null,null)}function cl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,114,"tabset",[],[[2,"tab-container",null]],null,null,o.b,o.a)),t["ɵdid"](1,180224,null,0,r.e,[r.f,t.Renderer2,t.ElementRef],null,null),(l()(),t["ɵeld"](2,0,null,0,99,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](3,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](4,0,null,null,97,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,96,"tbody",[],null,null,null,null,null)),(l()(),t["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](7,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Name"])),(l()(),t["ɵeld"](9,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),t["ɵted"](10,null,["",""])),(l()(),t["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool"])),(l()(),t["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](15,null,["",""])),(l()(),t["ɵeld"](16,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Data Pool"])),(l()(),t["ɵeld"](19,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](20,null,["",""])),t["ɵppd"](21,1),(l()(),t["ɵeld"](22,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Created"])),(l()(),t["ɵeld"](25,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](26,null,["",""])),t["ɵppd"](27,1),(l()(),t["ɵeld"](28,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](29,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Size"])),(l()(),t["ɵeld"](31,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](32,null,["",""])),t["ɵppd"](33,1),(l()(),t["ɵeld"](34,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](35,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Objects"])),(l()(),t["ɵeld"](37,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](38,null,["",""])),t["ɵppd"](39,1),(l()(),t["ɵeld"](40,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](41,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Object size"])),(l()(),t["ɵeld"](43,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](44,null,["",""])),t["ɵppd"](45,1),(l()(),t["ɵeld"](46,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](47,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Features"])),(l()(),t["ɵeld"](49,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,tl)),t["ɵdid"](51,278528,null,0,a.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](52,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](53,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Provisioned"])),(l()(),t["ɵeld"](55,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,il)),t["ɵdid"](57,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,ul)),t["ɵdid"](59,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](60,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](61,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Total provisioned"])),(l()(),t["ɵeld"](63,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,sl)),t["ɵdid"](65,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,al)),t["ɵdid"](67,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](68,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](69,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Striping unit"])),(l()(),t["ɵeld"](71,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](72,null,["",""])),t["ɵppd"](73,1),(l()(),t["ɵeld"](74,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](75,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Striping count"])),(l()(),t["ɵeld"](77,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](78,null,["",""])),(l()(),t["ɵeld"](79,0,null,null,7,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](80,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Parent"])),(l()(),t["ɵeld"](82,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,rl)),t["ɵdid"](84,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,dl)),t["ɵdid"](86,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](87,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](88,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Block name prefix"])),(l()(),t["ɵeld"](90,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](91,null,["",""])),(l()(),t["ɵeld"](92,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](93,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Order"])),(l()(),t["ɵeld"](95,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](96,null,["",""])),(l()(),t["ɵeld"](97,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t["ɵeld"](98,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Format Version"])),(l()(),t["ɵeld"](100,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t["ɵted"](101,null,["",""])),(l()(),t["ɵeld"](102,0,null,0,4,"tab",[["heading","Snapshots"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](103,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](104,0,null,null,2,"cd-rbd-snapshot-list",[],null,null,null,G,j)),t["ɵprd"](131584,null,h.a,h.a,[g.a,f.a]),t["ɵdid"](106,638976,null,0,A,[V.a,M.b,F.a,N.a,C.a,D.a,T.a,f.a,h.a,L.a,R.b],{snapshots:[0,"snapshots"],featuresName:[1,"featuresName"],poolName:[2,"poolName"],namespace:[3,"namespace"],rbdName:[4,"rbdName"]},null),(l()(),t["ɵeld"](107,0,null,0,3,"tab",[["heading","Configuration"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](108,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](109,0,null,null,1,"cd-rbd-configuration-table",[],null,null,null,$.b,$.a)),t["ɵdid"](110,638976,null,0,z.a,[X.a,W.a,L.a],{data:[0,"data"]},null),(l()(),t["ɵeld"](111,0,null,0,3,"tab",[["heading","Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](112,212992,null,0,r.b,[r.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵeld"](113,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","YhCYGcuZz"]],null,null,null,J.b,J.a)),t["ɵdid"](114,638976,null,0,Y.a,[K.b,Z.a,L.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){var e=n.component;l(n,3,0,"Details"),l(n,51,0,e.selection.features_name),l(n,57,0,-1===(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,59,0,-1!==(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,65,0,-1===(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,67,0,-1!==(null==e.selection.features_name?null:e.selection.features_name.indexOf("fast-diff"))),l(n,84,0,e.selection.parent),l(n,86,0,!e.selection.parent),l(n,103,0,"Snapshots"),l(n,106,0,e.selection.snapshots,e.selection.features_name,e.selection.pool_name,e.selection.namespace,e.selection.name),l(n,108,0,"Configuration"),l(n,110,0,e.selection.configuration),l(n,112,0,"Performance"),l(n,114,0,e.rbdDashboardUrl,"one","YhCYGcuZz")}),(function(l,n){var e=n.component;l(n,0,0,t["ɵnov"](n,1).clazz),l(n,2,0,t["ɵnov"](n,3).id,t["ɵnov"](n,3).active,t["ɵnov"](n,3).addClass,t["ɵnov"](n,3).role,t["ɵnov"](n,3).ariaLabelledby),l(n,10,0,e.selection.name),l(n,15,0,e.selection.pool_name);var i=t["ɵunv"](n,20,0,l(n,21,0,t["ɵnov"](n.parent,0),e.selection.data_pool));l(n,20,0,i);var u=t["ɵunv"](n,26,0,l(n,27,0,t["ɵnov"](n.parent,1),e.selection.timestamp));l(n,26,0,u);var s=t["ɵunv"](n,32,0,l(n,33,0,t["ɵnov"](n.parent,2),e.selection.size));l(n,32,0,s);var a=t["ɵunv"](n,38,0,l(n,39,0,t["ɵnov"](n.parent,3),e.selection.num_objs));l(n,38,0,a);var o=t["ɵunv"](n,44,0,l(n,45,0,t["ɵnov"](n.parent,2),e.selection.obj_size));l(n,44,0,o);var r=t["ɵunv"](n,72,0,l(n,73,0,t["ɵnov"](n.parent,2),e.selection.stripe_unit));l(n,72,0,r),l(n,78,0,e.selection.stripe_count),l(n,91,0,e.selection.block_name_prefix),l(n,96,0,e.selection.order),l(n,101,0,e.selection.image_format),l(n,102,0,t["ɵnov"](n,103).id,t["ɵnov"](n,103).active,t["ɵnov"](n,103).addClass,t["ɵnov"](n,103).role,t["ɵnov"](n,103).ariaLabelledby),l(n,107,0,t["ɵnov"](n,108).id,t["ɵnov"](n,108).active,t["ɵnov"](n,108).addClass,t["ɵnov"](n,108).role,t["ɵnov"](n,108).ariaLabelledby),l(n,111,0,t["ɵnov"](n,112).id,t["ɵnov"](n,112).active,t["ɵnov"](n,112).addClass,t["ɵnov"](n,112).role,t["ɵnov"](n,112).ariaLabelledby)}))}function ml(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,16777216,null,null,2,"strong",[["tooltip","This setting overrides the global value"]],null,null,null,null,null)),t["ɵdid"](2,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"]},null),(l()(),t["ɵted"](-1,null,["Image"])),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,2,0,"This setting overrides the global value")}),null)}function pl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,16777216,null,null,2,"span",[["tooltip","This is the global value. No value for this option has been set for this image."]],null,null,null,null,null)),t["ɵdid"](1,212992,null,0,i.c,[t.ViewContainerRef,u.a,i.a,t.ElementRef,t.Renderer2,s.a],{tooltip:[0,"tooltip"]},null),(l()(),t["ɵted"](-1,null,["Global"])),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"This is the global value. No value for this option has been set for this image.")}),null)}function hl(l){return t["ɵvid"](0,[(l()(),t["ɵand"](16777216,null,null,1,null,ml)),t["ɵdid"](1,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),t["ɵand"](0,[["global",2]],null,0,null,pl))],(function(l,n){l(n,1,0,n.context.value-0,t["ɵnov"](n,2))}),null)}function gl(l){return t["ɵvid"](0,[t["ɵpid"](0,H.a,[]),t["ɵpid"](0,N.a,[a.DatePipe]),t["ɵpid"](0,F.a,[X.a]),t["ɵpid"](0,Q.a,[X.a]),t["ɵqud"](402653184,1,{poolConfigurationSourceTpl:0}),(l()(),t["ɵand"](0,[["usageNotAvailableTooltipTpl",2]],null,0,null,el)),(l()(),t["ɵand"](16777216,null,null,1,null,cl)),t["ɵdid"](7,16384,null,0,a.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["poolConfigurationSourceTpl",2]],null,0,null,hl))],(function(l,n){l(n,7,0,n.component.selection)}),null)}function fl(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-details",[],null,null,null,gl,nl)),t["ɵdid"](1,573440,null,0,ll.a,[],null,null)],null,null)}var vl=t["ɵccf"]("cd-rbd-details",ll.a,fl,{selection:"selection",images:"images"},{},[])},L4us:function(l,n,e){"use strict";var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{}e.d(n,"a",(function(){return a}));class a{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.bsConfig={containerClass:"theme-default"},this.createForm()}createForm(){this.editPeerForm=new i.a({clusterName:new t.i("",{validators:[t.B.required,this.validateClusterName]}),clientID:new t.i("",{validators:[t.B.required,this.validateClientID]}),monAddr:new t.i("",{validators:[this.validateMonAddr]}),key:new t.i("",{validators:[this.validateKey]})})}ngOnInit(){this.pattern=`${this.poolName}/${this.peerUUID}`,"edit"===this.mode&&this.rbdMirroringService.getPeer(this.poolName,this.peerUUID).subscribe(l=>{this.setResponse(l)})}validateClusterName(l){if(!l.value.match(/^[\w\-_]*$/))return{invalidClusterName:{value:l.value}}}validateClientID(l){if(!l.value.match(/^(?!client\.)[\w\-_.]*$/))return{invalidClientID:{value:l.value}}}validateMonAddr(l){if(!l.value.match(/^[,; ]*([\w.\-_\[\]]+(:[\d]+)?[,; ]*)*$/))return{invalidMonAddr:{value:l.value}}}validateKey(l){try{if(""===l.value||atob(l.value))return null}catch(n){}return{invalidKey:{value:l.value}}}setResponse(l){this.response=l,this.editPeerForm.get("clusterName").setValue(l.cluster_name),this.editPeerForm.get("clientID").setValue(l.client_id),this.editPeerForm.get("monAddr").setValue(l.mon_host),this.editPeerForm.get("key").setValue(l.key)}update(){const l=new s;let n;l.cluster_name=this.editPeerForm.getValue("clusterName"),l.client_id=this.editPeerForm.getValue("clientID"),l.mon_host=this.editPeerForm.getValue("monAddr"),l.key=this.editPeerForm.getValue("key"),n=this.taskWrapper.wrapTaskAroundCall("edit"===this.mode?{task:new u.a("rbd/mirroring/peer/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePeer(this.poolName,this.peerUUID,l)}:{task:new u.a("rbd/mirroring/peer/add",{pool_name:this.poolName}),call:this.rbdMirroringService.addPeer(this.poolName,l)}),n.subscribe(void 0,()=>this.editPeerForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},MyVl:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("LvDl"),s=e("jtHE"),a=e("cp0P"),o=e("SxV6"),r=e("eIep"),d=(e("Ekvf"),e("F83c"),e("sne2"),e("oxzT")),c=e("QFaf"),m=e("PhyI"),p=e("kvvV"),h=e("jVDg"),g=(e("Fgil"),e("aexS"),e("aXbf"),e("kn/O"),e("u0yg"));class f{constructor(){this.features=[]}}class v{constructor(){this.features=[]}}var b=e("lArG");class C extends b.a{constructor(){super(...arguments),this.features=[]}}class S{constructor(){this.features=[]}}var _=function(l){return l.editing="editing",l.cloning="cloning",l.copying="copying",l}({});e.d(n,"a",(function(){return R}));class R{constructor(l,n,e,i,u,a,o,r,c,m){this.authStorageService=l,this.route=n,this.poolService=e,this.rbdService=i,this.formatter=u,this.taskWrapper=a,this.dimlessBinaryPipe=o,this.i18n=r,this.actionLabels=c,this.router=m,this.namespaces=[],this.namespacesByPoolCache={},this.pools=null,this.allPools=null,this.dataPools=null,this.allDataPools=null,this.featuresList=[],this.initializeConfigData=new t.EventEmitter,this.advancedEnabled=!1,this.rbdFormMode=_,this.defaultObjectSize="4 MiB",this.objectSizes=["4 KiB","8 KiB","16 KiB","32 KiB","64 KiB","128 KiB","256 KiB","512 KiB","1 MiB","2 MiB","4 MiB","8 MiB","16 MiB","32 MiB"],this.rbdImage=new s.a(1),this.icons=d.a,this.poolPermission=this.authStorageService.getPermissions().pool,this.resource=this.i18n("RBD"),this.features={"deep-flatten":{desc:this.i18n("Deep flatten"),requires:null,allowEnable:!1,allowDisable:!0},layering:{desc:this.i18n("Layering"),requires:null,allowEnable:!1,allowDisable:!1},"exclusive-lock":{desc:this.i18n("Exclusive lock"),requires:null,allowEnable:!0,allowDisable:!0},"object-map":{desc:this.i18n("Object map (requires exclusive-lock)"),requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},journaling:{desc:this.i18n("Journaling (requires exclusive-lock)"),requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},"fast-diff":{desc:this.i18n("Fast diff (interlocked with object-map)"),requires:"object-map",allowEnable:!0,allowDisable:!0,interlockedWith:"object-map",initDisabled:!0}},this.featuresList=this.objToArray(this.features),this.createForm()}objToArray(l){return u.map(l,(l,n)=>Object.assign(l,{key:n}))}createForm(){this.rbdForm=new c.a({parent:new i.i(""),name:new i.i("",{validators:[i.B.required,i.B.pattern(/^[^@/]+?$/)]}),pool:new i.i(null,{validators:[i.B.required]}),namespace:new i.i(null),useDataPool:new i.i(!1),dataPool:new i.i(null),size:new i.i(null,{updateOn:"blur"}),obj_size:new i.i(this.defaultObjectSize),features:new c.a(this.featuresList.reduce((l,n)=>(l[n.key]=new i.i({value:!1,disabled:!!n.initDisabled}),l),{})),stripingUnit:new i.i(null),stripingCount:new i.i(null,{updateOn:"blur"})},this.validateRbdForm(this.formatter))}disableForEdit(){this.rbdForm.get("parent").disable(),this.rbdForm.get("pool").disable(),this.rbdForm.get("namespace").disable(),this.rbdForm.get("useDataPool").disable(),this.rbdForm.get("dataPool").disable(),this.rbdForm.get("obj_size").disable(),this.rbdForm.get("stripingUnit").disable(),this.rbdForm.get("stripingCount").disable(),this.rbdImage.subscribe(l=>{l.image_format===g.a.V1&&(this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable(),this.rbdForm.get("exclusive-lock").disable())})}disableForClone(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}disableForCopy(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}ngOnInit(){let l;this.router.url.startsWith("/block/rbd/edit")?(this.mode=this.rbdFormMode.editing,this.action=this.actionLabels.EDIT,this.disableForEdit()):this.router.url.startsWith("/block/rbd/clone")?(this.mode=this.rbdFormMode.cloning,this.disableForClone(),this.action=this.actionLabels.CLONE):this.router.url.startsWith("/block/rbd/copy")?(this.mode=this.rbdFormMode.copying,this.action=this.actionLabels.COPY,this.disableForCopy()):this.action=this.actionLabels.CREATE,function(l){l.RbdServiceGet="rbdService.get",l.PoolServiceList="poolService.list"}(l||(l={}));const n={};this.mode===this.rbdFormMode.editing||this.mode===this.rbdFormMode.cloning||this.mode===this.rbdFormMode.copying?this.route.params.subscribe(e=>{const t=h.a.fromString(decodeURIComponent(e.image_spec));e.snap&&(this.snapName=decodeURIComponent(e.snap)),n[l.RbdServiceGet]=this.rbdService.get(t)}):this.rbdService.defaultFeatures().subscribe(l=>{this.setFeatures(l)}),this.mode!==this.rbdFormMode.editing&&this.poolPermission.read&&(n[l.PoolServiceList]=this.poolService.list(["pool_name","type","flags_names","application_metadata"])),Object(a.a)(n).subscribe(n=>{if(n[l.PoolServiceList]){const e=[],t=[];for(const i of n[l.PoolServiceList])this.rbdService.isRBDPool(i)&&("replicated"===i.type?(e.push(i),t.push(i)):"erasure"===i.type&&-1!==i.flags_names.indexOf("ec_overwrites")&&t.push(i));if(this.pools=e,this.allPools=e,this.dataPools=t,this.allDataPools=t,1===this.pools.length){const l=this.pools[0].pool_name;this.rbdForm.get("pool").setValue(l),this.onPoolChange(l)}}if(n[l.RbdServiceGet]){const e=n[l.RbdServiceGet];this.setResponse(e,this.snapName),this.rbdImage.next(e)}}),u.each(this.features,l=>{this.rbdForm.get("features").get(l.key).valueChanges.subscribe(n=>this.featureFormUpdate(l.key,n))})}onPoolChange(l){const n=this.allDataPools?this.allDataPools.filter(n=>n.pool_name!==l):[];this.rbdForm.getValue("dataPool")===l&&this.rbdForm.get("dataPool").setValue(null),this.dataPools=n,this.namespaces=null,l in this.namespacesByPoolCache?this.namespaces=this.namespacesByPoolCache[l]:this.rbdService.listNamespaces(l).subscribe(n=>{n=n.map(l=>l.namespace),this.namespacesByPoolCache[l]=n,this.namespaces=n}),this.rbdForm.get("namespace").setValue(null)}onUseDataPoolChange(){this.rbdForm.getValue("useDataPool")||(this.rbdForm.get("dataPool").setValue(null),this.onDataPoolChange(null))}onDataPoolChange(l){const n=this.allPools.filter(n=>n.pool_name!==l);this.rbdForm.getValue("pool")===l&&this.rbdForm.get("pool").setValue(null),this.pools=n}validateRbdForm(l){return n=>{const e=n.get("useDataPool"),t=n.get("dataPool");let i=null;e.value&&null==t.value&&(i={required:!0}),t.setErrors(i);const u=n.get("size"),s=n.get("obj_size"),a=l.toBytes(null!=s.value?s.value:this.defaultObjectSize),o=n.get("stripingCount"),r=null!=o.value?o.value:1;let d=null;null===u.value?d={required:!0}:r*a>l.toBytes(u.value)&&(d={invalidSizeObject:!0}),u.setErrors(d);const c=n.get("stripingUnit");let m=null;null===c.value&&null!==o.value?m={required:!0}:null!==c.value&&l.toBytes(c.value)>a&&(m={invalidStripingUnit:!0}),c.setErrors(m);let p=null;return null===o.value&&null!==c.value?p={required:!0}:r<1&&(p={min:!0}),o.setErrors(p),null}}getDependendChildFeatures(l){return u.filter(this.features,n=>n.requires===l)||[]}deepBoxCheck(l,n){this.getDependendChildFeatures(l).forEach(l=>{const e=this.rbdForm.get(l.key);n?e.enable({emitEvent:!1}):(e.disable({emitEvent:!1}),e.setValue(!1,{emitEvent:!1}),this.deepBoxCheck(l.key,n));const t=this.rbdForm.get("features");this.mode===this.rbdFormMode.editing&&t.get(l.key).enabled&&((-1===this.response.features_name.indexOf(l.key)||l.allowDisable)&&(-1!==this.response.features_name.indexOf(l.key)||l.allowEnable)||t.get(l.key).disable())})}interlockCheck(l,n){const e=this.featuresList.find(n=>n.key===l);if(this.response){const l=null!=e.interlockedWith,n=this.featuresList.find(l=>l.interlockedWith===e.key),t=!!this.response.features_name.find(l=>l===e.key);if(l){if(t!==!!this.response.features_name.find(l=>l===e.interlockedWith))return}else if(n&&!!this.response.features_name.find(l=>l===n.key)!==t)return}n?u.filter(this.features,n=>n.interlockedWith===l).forEach(l=>this.rbdForm.get(l.key).setValue(!0,{emitEvent:!1})):e.interlockedWith&&this.rbdForm.get("features").get(e.interlockedWith).setValue(!1)}featureFormUpdate(l,n){if(n){const n=this.features[l].requires;if(n&&!this.rbdForm.getValue(n))return void this.rbdForm.get("features."+l).setValue(!1)}this.deepBoxCheck(l,n),this.interlockCheck(l,n)}setFeatures(l){const n=this.rbdForm.get("features");u.forIn(this.features,e=>{-1!==l.indexOf(e.key)&&n.get(e.key).setValue(!0),this.featureFormUpdate(e.key,n.get(e.key).value)})}setResponse(l,n){this.response=l;const e=new h.a(l.pool_name,l.namespace,l.name).toString();if(this.mode===this.rbdFormMode.cloning)this.rbdForm.get("parent").setValue(`${e}@${n}`);else if(this.mode===this.rbdFormMode.copying)n?this.rbdForm.get("parent").setValue(`${e}@${n}`):this.rbdForm.get("parent").setValue(""+e);else if(l.parent){const n=l.parent;this.rbdForm.get("parent").setValue(`${n.pool_name}/${n.image_name}@${n.snap_name}`)}this.mode===this.rbdFormMode.editing&&this.rbdForm.get("name").setValue(l.name),this.rbdForm.get("pool").setValue(l.pool_name),this.onPoolChange(l.pool_name),this.rbdForm.get("namespace").setValue(l.namespace),l.data_pool&&(this.rbdForm.get("useDataPool").setValue(!0),this.rbdForm.get("dataPool").setValue(l.data_pool)),this.rbdForm.get("size").setValue(this.dimlessBinaryPipe.transform(l.size)),this.rbdForm.get("obj_size").setValue(this.dimlessBinaryPipe.transform(l.obj_size)),this.setFeatures(l.features_name),this.rbdForm.get("stripingUnit").setValue(this.dimlessBinaryPipe.transform(l.stripe_unit)),this.rbdForm.get("stripingCount").setValue(l.stripe_count),this.initializeConfigData.emit({initialData:this.response.configuration,sourceType:m.a.image})}createRequest(){const l=new C;return l.pool_name=this.rbdForm.getValue("pool"),l.namespace=this.rbdForm.getValue("namespace"),l.name=this.rbdForm.getValue("name"),l.size=this.formatter.toBytes(this.rbdForm.getValue("size")),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(),l}createAction(){const l=this.createRequest();return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/create",{pool_name:l.pool_name,namespace:l.namespace,image_name:l.name}),call:this.rbdService.create(l)})}editRequest(){const l=new S;return l.name=this.rbdForm.getValue("name"),l.size=this.formatter.toBytes(this.rbdForm.getValue("size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.configuration=this.getDirtyConfigurationValues(),l}cloneRequest(){const l=new f;return l.child_pool_name=this.rbdForm.getValue("pool"),l.child_namespace=this.rbdForm.getValue("namespace"),l.child_image_name=this.rbdForm.getValue("name"),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(!0,m.a.image),l}editAction(){const l=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/edit",{image_spec:l.toString()}),call:this.rbdService.update(l,this.editRequest())})}cloneAction(){const l=this.cloneRequest(),n=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/clone",{parent_image_spec:n.toString(),parent_snap_name:this.snapName,child_pool_name:l.child_pool_name,child_namespace:l.child_namespace,child_image_name:l.child_image_name}),call:this.rbdService.cloneSnapshot(n,this.snapName,l)})}copyRequest(){const l=new v;return this.snapName&&(l.snapshot_name=this.snapName),l.dest_pool_name=this.rbdForm.getValue("pool"),l.dest_namespace=this.rbdForm.getValue("namespace"),l.dest_image_name=this.rbdForm.getValue("name"),l.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),u.forIn(this.features,n=>{this.rbdForm.getValue(n.key)&&l.features.push(n.key)}),l.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),l.stripe_count=this.rbdForm.getValue("stripingCount"),l.data_pool=this.rbdForm.getValue("dataPool"),l.configuration=this.getDirtyConfigurationValues(!0,m.a.image),l}copyAction(){const l=this.copyRequest(),n=new h.a(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new p.a("rbd/copy",{src_image_spec:n.toString(),dest_pool_name:l.dest_pool_name,dest_namespace:l.dest_namespace,dest_image_name:l.dest_image_name}),call:this.rbdService.copy(n,l)})}submit(){this.mode||this.rbdImage.next("create"),this.rbdImage.pipe(Object(o.a)(),Object(r.a)(()=>this.mode===this.rbdFormMode.editing?this.editAction():this.mode===this.rbdFormMode.cloning?this.cloneAction():this.mode===this.rbdFormMode.copying?this.copyAction():this.createAction())).subscribe(()=>{},()=>this.rbdForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/block/rbd"]))}}},PhyI:function(l,n,e){"use strict";e.d(n,"a",(function(){return t})),e.d(n,"b",(function(){return i}));var t=function(l){return l[l.global=0]="global",l[l.pool=1]="pool",l[l.image=2]="image",l}({}),i=function(l){return l[l.bps=0]="bps",l[l.iops=1]="iops",l[l.milliseconds=2]="milliseconds",l}({})},QUzE:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("ANnk"),u=e("f/UV"),s=e("aexS"),a=e("s7LF"),o=e("+gVj"),r=e("EEJc"),d=e("ajRT"),c=e("mXUL"),m=e("IZUe"),p=e("SVse"),h=e("gp3X"),g=e("sb0X"),f=e("OcYo"),v=e("EApP"),b=e("GiVz"),C=e("KVJa"),S=e("Z21x"),_=e("sne2"),R=e("SuaG"),y=e("LqlI"),w=e("XED3"),k=e("kn/O");e.d(n,"a",(function(){return D}));var I=t["ɵcrt"]({encapsulation:0,styles:[[".form-group.ng-invalid[_ngcontent-%COMP%]   .invalid-feedback[_ngcontent-%COMP%]{display:block}"]],data:{}});function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,3).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,3).onTouched()&&i),i}),null,null)),t["ɵdid"](2,4210688,null,0,i.a,[[2,u.a],s.a,t.ElementRef],null,null),t["ɵdid"](3,16384,null,0,a.c,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.c]),t["ɵdid"](5,671744,[[3,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](7,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](8,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](9,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](10,null,["",""]))],(function(l,n){l(n,5,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,8,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""))}),(function(l,n){l(n,1,1,[t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,""),t["ɵnov"](n,7).ngClassUntouched,t["ɵnov"](n,7).ngClassTouched,t["ɵnov"](n,7).ngClassPristine,t["ɵnov"](n,7).ngClassDirty,t["ɵnov"](n,7).ngClassValid,t["ɵnov"](n,7).ngClassInvalid,t["ɵnov"](n,7).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass]),l(n,9,0,t["ɵinlineInterpolate"](1,"",n.context.$implicit.name,"")),l(n,10,0,n.context.$implicit.name)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["At least one pool is required."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,74,"cd-modal",[],null,null,null,r.c,r.b)),t["ɵdid"](1,49152,null,0,d.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Create Bootstrap Token"])),(l()(),t["ɵeld"](4,0,null,1,70,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,69,"form",[["class","form"],["name","createBootstrapForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,a.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,a.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,a.d,null,[a.l]),t["ɵdid"](9,16384,null,0,a.s,[[4,a.d]],null,null),t["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,59,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To create a bootstrap token which can be imported by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, and click  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Generate"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](19,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,8,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,27)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,27).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,27)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,27)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,m.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,4210688,null,0,i.a,[[2,u.a],s.a,t.ElementRef],null,null),t["ɵdid"](27,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](29,671744,[[1,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](31,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](32,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,E)),t["ɵdid"](34,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](35,0,null,null,12,"div",[["class","form-group"],["formGroupName","pools"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](36,212992,null,0,a.m,[[3,a.d],[8,null],[8,null]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.d,null,[a.m]),t["ɵdid"](38,16384,null,0,a.s,[[4,a.d]],null,null),t["ɵdid"](39,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](42,0,null,0,1,"label",[["class","col-form-label required"],["for","pools"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵand"](16777216,null,0,1,null,N)),t["ɵdid"](45,278528,null,0,p.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,F)),t["ɵdid"](47,16384,null,0,p.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](48,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](49,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.generate()&&t),t}),h.b,h.a)),t["ɵdid"](50,114688,null,0,g.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Generate"])),(l()(),t["ɵeld"](52,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,c.b,c.a)),t["ɵdid"](53,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](56,0,null,0,2,"label",[["class","col-form-label"],["for","token"]],null,null,null,null,null)),(l()(),t["ɵeld"](57,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Token"])),(l()(),t["ɵeld"](59,0,null,0,7,"textarea",[["class","form-control resize-vertical"],["formControlName","token"],["id","token"],["placeholder","Generated token..."],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,60)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,60).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,60)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,60)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](60,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](62,671744,[[5,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](64,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](65,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵted"](-1,null,["          "])),(l()(),t["ɵeld"](67,0,null,null,3,"button",[["aria-label","Copy to Clipboard"],["cdCopy2ClipboardButton","token"],["class","btn btn-primary mb-3 float-right"],["title","Copy to Clipboard"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,68).onClick()&&i),i}),null,null)),t["ɵdid"](68,81920,null,0,f.a,[t.ElementRef,t.Renderer2,v.j,b.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵeld"](69,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Copy to Clipboard"])),(l()(),t["ɵeld"](71,0,null,null,3,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](72,0,null,null,2,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](73,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,C.b,C.a)),t["ɵdid"](74,49152,null,0,S.a,[p.Location,_.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.createBootstrapForm),l(n,10,0,e.createBootstrapForm),l(n,19,0),l(n,25,0,""),l(n,29,0,"siteName"),l(n,32,0,"siteName"),l(n,34,0,e.createBootstrapForm.showError("siteName",t["ɵnov"](n,7),"required")),l(n,36,0,"pools"),l(n,39,0),l(n,45,0,e.pools),l(n,47,0,e.createBootstrapForm.showError("pools",t["ɵnov"](n,7),"requirePool")),l(n,50,0,e.createBootstrapForm),l(n,53,0),l(n,62,0,"token"),l(n,65,0,"token"),l(n,68,0,"token"),l(n,74,0,"Close",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,31).ngClassUntouched,t["ɵnov"](n,31).ngClassTouched,t["ɵnov"](n,31).ngClassPristine,t["ɵnov"](n,31).ngClassDirty,t["ɵnov"](n,31).ngClassValid,t["ɵnov"](n,31).ngClassInvalid,t["ɵnov"](n,31).ngClassPending,t["ɵnov"](n,32).validClass,t["ɵnov"](n,32).invalidClass),l(n,35,0,t["ɵnov"](n,38).ngClassUntouched,t["ɵnov"](n,38).ngClassTouched,t["ɵnov"](n,38).ngClassPristine,t["ɵnov"](n,38).ngClassDirty,t["ɵnov"](n,38).ngClassValid,t["ɵnov"](n,38).ngClassInvalid,t["ɵnov"](n,38).ngClassPending,t["ɵnov"](n,39).hasErrors,t["ɵnov"](n,39).hasSuccess),l(n,52,0,t["ɵnov"](n,53).hasErrors,t["ɵnov"](n,53).hasSuccess),l(n,59,0,t["ɵnov"](n,64).ngClassUntouched,t["ɵnov"](n,64).ngClassTouched,t["ɵnov"](n,64).ngClassPristine,t["ɵnov"](n,64).ngClassDirty,t["ɵnov"](n,64).ngClassValid,t["ɵnov"](n,64).ngClassInvalid,t["ɵnov"](n,64).ngClassPending,t["ɵnov"](n,65).validClass,t["ɵnov"](n,65).invalidClass)}))}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-bootstrap-create-modal",[],null,null,null,V,I)),t["ɵdid"](1,245760,null,0,R.a,[y.a,w.a,k.a],null,null)],(function(l,n){l(n,1,0)}),null)}var D=t["ɵccf"]("cd-bootstrap-create-modal",R.a,T,{},{},[])},RIVN:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("C6Ij"),u=e("AWcq"),s=e("NUGo"),a=e("S7zO"),o=e("SVse");class r{transform(l){return"warning"===l?"badge badge-warning":"error"===l?"badge badge-danger":"success"===l?"badge badge-success":"badge badge-info"}}var d=e("25BL"),c=e("uIqm"),m=e("XED3"),p=e("85J/");class h{constructor(l,n,e){this.rbdMirroringService=l,this.cephShortVersionPipe=n,this.i18n=e}ngOnInit(){this.columns=[{prop:"instance_id",name:this.i18n("Instance"),flexGrow:2},{prop:"id",name:this.i18n("ID"),flexGrow:2},{prop:"server_hostname",name:this.i18n("Hostname"),flexGrow:2},{prop:"version",name:this.i18n("Version"),pipe:this.cephShortVersionPipe,flexGrow:2},{prop:"health",name:this.i18n("Health"),cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.data=l.content_data.daemons})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}var g=e("GiVz"),f=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.health_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function b(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{healthTmpl:0}),(l()(),t["ɵeld"](2,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"}),(l()(),t["ɵand"](0,[[1,2],["healthTmpl",2]],null,0,null,v))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex",-1)}),null)}var C=e("HDdC"),S=e("0+/T"),_=e("oxzT"),R=e("vCyI"),y=e("kvvV"),w=e("aexS"),k=e("kn/O"),I=e("aa9H"),E=e("L4us");class N{constructor(l,n,e,t,i){this.authStorageService=l,this.rbdMirroringService=n,this.modalService=e,this.taskWrapper=t,this.i18n=i,this.selection=new R.a,this.data=[],this.permission=this.authStorageService.getPermissions().rbdMirroring;const u={permission:"update",icon:_.a.edit,click:()=>this.editModeModal(),name:this.i18n("Edit Mode"),canBePrimary:()=>!0},s={permission:"create",icon:_.a.add,name:this.i18n("Add Peer"),click:()=>this.editPeersModal("add"),disable:()=>!this.selection.first()||"disabled"===this.selection.first().mirror_mode,visible:()=>!this.getPeerUUID(),canBePrimary:()=>!1},a={permission:"update",icon:_.a.exchange,name:this.i18n("Edit Peer"),click:()=>this.editPeersModal("edit"),visible:()=>!!this.getPeerUUID()},o={permission:"delete",icon:_.a.destroy,name:this.i18n("Delete Peer"),click:()=>this.deletePeersModal(),visible:()=>!!this.getPeerUUID()};this.tableActions=[u,s,a,o]}ngOnInit(){this.columns=[{prop:"name",name:this.i18n("Name"),flexGrow:2},{prop:"mirror_mode",name:this.i18n("Mode"),flexGrow:2},{prop:"leader_id",name:this.i18n("Leader"),flexGrow:2},{prop:"image_local_count",name:this.i18n("# Local"),flexGrow:2},{prop:"image_remote_count",name:this.i18n("# Remote"),flexGrow:2},{prop:"health",name:this.i18n("Health"),cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.data=l.content_data.pools})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}editModeModal(){const l={poolName:this.selection.first().name};this.modalRef=this.modalService.show(I.a,{initialState:l})}editPeersModal(l){const n={poolName:this.selection.first().name,mode:l};"edit"===l&&(n.peerUUID=this.getPeerUUID()),this.modalRef=this.modalService.show(E.a,{initialState:n})}deletePeersModal(){const l=this.selection.first().name,n=this.getPeerUUID();this.modalRef=this.modalService.show(S.a,{initialState:{itemDescription:this.i18n("mirror peer"),itemNames:[`${l} (${n})`],submitActionObservable:()=>new C.a(e=>{this.taskWrapper.wrapTaskAroundCall({task:new y.a("rbd/mirroring/peer/delete",{pool_name:l}),call:this.rbdMirroringService.deletePeer(l,n)}).subscribe(void 0,l=>e.error(l),()=>{this.rbdMirroringService.refresh(),e.complete()})})}})}getPeerUUID(){const l=this.selection.first(),n=this.data.find(n=>l&&l.name===n.name);if(n&&n.peer_uuids)return n.peer_uuids[0]}updateSelection(l){this.selection=l}}var F=e("LqlI"),V=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.health_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function D(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{healthTmpl:0}),(l()(),t["ɵeld"](2,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","name"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,e){var t=!0,i=l.component;return"fetchData"===n&&(t=!1!==i.refresh()&&t),"updateSelection"===n&&(t=!1!==i.updateSelection(e)&&t),t}),d.b,d.a)),t["ɵdid"](3,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),t["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,s.b,s.a)),t["ɵdid"](5,114688,null,0,a.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵand"](0,[[1,2],["healthTmpl",2]],null,0,null,T))],(function(l,n){var e=n.component;l(n,3,0,e.data,e.columns,"flex",-1,"name","true","single"),l(n,5,0,e.permission,e.selection,e.tableActions)}),null)}var P=e("7qid"),x=e("38Bd"),q=e("pKUh"),B=e("2ZVE");class O{constructor(l,n){this.rbdMirroringService=l,this.i18n=n,this.image_error={data:[],columns:{}},this.image_syncing={data:[],columns:{}},this.image_ready={data:[],columns:{}}}ngOnInit(){this.image_error.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"description",name:this.i18n("Issue"),flexGrow:4},{prop:"state",name:this.i18n("State"),cellTemplate:this.stateTmpl,flexGrow:1}],this.image_syncing.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"progress",name:this.i18n("Progress"),cellTemplate:this.progressTmpl,flexGrow:2},{prop:"state",name:this.i18n("State"),cellTemplate:this.syncTmpl,flexGrow:1}],this.image_ready.columns=[{prop:"pool_name",name:this.i18n("Pool"),flexGrow:2},{prop:"name",name:this.i18n("Image"),flexGrow:2},{prop:"description",name:this.i18n("Description"),flexGrow:4},{prop:"state",name:this.i18n("State"),cellTemplate:this.stateTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.image_error.data=l.content_data.image_error,this.image_syncing.data=l.content_data.image_syncing,this.image_ready.data=l.content_data.image_ready})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}var A=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function M(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_error.data,e.image_error.columns,"flex",-1)}),null)}function L(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_syncing.data,e.image_syncing.columns,"flex",-1)}),null)}function j(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(l,n,e){var t=!0;return"fetchData"===n&&(t=!1!==l.component.refresh()&&t),t}),d.b,d.a)),t["ɵdid"](1,2867200,null,0,c.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(l,n){var e=n.component;l(n,1,0,e.image_ready.data,e.image_ready.columns,"flex",-1)}),null)}function U(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),t["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),t["ɵppd"](3,1),(l()(),t["ɵted"](4,null,["",""]))],(function(l,n){var e=t["ɵunv"](n,2,0,l(n,3,0,t["ɵnov"](n.parent,0),n.context.row.state_color));l(n,2,0,e)}),(function(l,n){l(n,4,0,n.context.value)}))}function G(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","badge badge-info"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Syncing"]))],null,null)}function $(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"progressbar",[["type","info"]],[[1,"max",0],[2,"progress",null]],null,null,P.b,P.a)),t["ɵdid"](1,49152,null,0,x.b,[x.c],{type:[0,"type"],value:[1,"value"]},null)],(function(l,n){l(n,1,0,"info",n.context.value)}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).max,t["ɵnov"](n,1).addClass)}))}function z(l){return t["ɵvid"](0,[t["ɵpid"](0,r,[]),t["ɵqud"](402653184,1,{stateTmpl:0}),t["ɵqud"](402653184,2,{syncTmpl:0}),t["ɵqud"](402653184,3,{progressTmpl:0}),(l()(),t["ɵeld"](4,0,null,null,13,"tabset",[],[[2,"tab-container",null]],null,null,q.b,q.a)),t["ɵdid"](5,180224,[["tabset",4]],0,B.e,[B.f,t.Renderer2,t.ElementRef],null,null),(l()(),t["ɵeld"](6,0,null,0,3,"tab",[["heading","Issues"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](7,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,M)),t["ɵdid"](9,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](10,0,null,0,3,"tab",[["heading","Syncing"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](11,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,L)),t["ɵdid"](13,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](14,0,null,0,3,"tab",[["heading","Ready"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),t["ɵdid"](15,212992,null,0,B.b,[B.e,t.ElementRef,t.Renderer2],{heading:[0,"heading"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,j)),t["ɵdid"](17,16384,null,0,o.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["stateTmpl",2]],null,0,null,U)),(l()(),t["ɵand"](0,[[2,2],["syncTmpl",2]],null,0,null,G)),(l()(),t["ɵand"](0,[[3,2],["progressTmpl",2]],null,0,null,$))],(function(l,n){l(n,7,0,"Issues"),l(n,9,0,null==t["ɵnov"](n,5).tabs[0]?null:t["ɵnov"](n,5).tabs[0].active),l(n,11,0,"Syncing"),l(n,13,0,null==t["ɵnov"](n,5).tabs[1]?null:t["ɵnov"](n,5).tabs[1].active),l(n,15,0,"Ready"),l(n,17,0,null==t["ɵnov"](n,5).tabs[2]?null:t["ɵnov"](n,5).tabs[2].active)}),(function(l,n){l(n,4,0,t["ɵnov"](n,5).clazz),l(n,6,0,t["ɵnov"](n,7).id,t["ɵnov"](n,7).active,t["ɵnov"](n,7).addClass,t["ɵnov"](n,7).role,t["ɵnov"](n,7).ariaLabelledby),l(n,10,0,t["ɵnov"](n,11).id,t["ɵnov"](n,11).active,t["ɵnov"](n,11).addClass,t["ɵnov"](n,11).role,t["ɵnov"](n,11).ariaLabelledby),l(n,14,0,t["ɵnov"](n,15).id,t["ɵnov"](n,15).active,t["ɵnov"](n,15).addClass,t["ɵnov"](n,15).role,t["ɵnov"](n,15).ariaLabelledby)}))}var X=e("cxJu");e.d(n,"a",(function(){return K}));var W=t["ɵcrt"]({encapsulation:0,styles:[["cd-mirroring cd-table-actions.float-right ul{right:0!important;left:auto!important}"]],data:{}});function J(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,i.b,i.a)),t["ɵdid"](1,114688,null,0,u.a,[],{status:[0,"status"]},null),(l()(),t["ɵeld"](2,0,null,null,7,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,6,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name:"])),(l()(),t["ɵted"](7,null,[" ",""])),(l()(),t["ɵeld"](8,0,null,null,1,"cd-table-actions",[["class","table-actions float-right"]],null,null,null,s.b,s.a)),t["ɵdid"](9,114688,null,0,a.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),t["ɵeld"](10,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Daemons"])),(l()(),t["ɵeld"](14,0,null,null,1,"cd-mirroring-daemons",[],null,null,null,b,f)),t["ɵdid"](15,245760,null,0,h,[m.a,p.a,g.a],null,null),(l()(),t["ɵeld"](16,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pools"])),(l()(),t["ɵeld"](19,0,null,null,1,"cd-mirroring-pools",[],null,null,null,D,V)),t["ɵdid"](20,245760,null,0,N,[w.a,m.a,F.b,k.a,g.a],null,null),(l()(),t["ɵeld"](21,0,null,null,5,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](22,0,null,null,4,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](23,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Images"])),(l()(),t["ɵeld"](25,0,null,null,1,"cd-mirroring-images",[],null,null,null,z,A)),t["ɵdid"](26,245760,null,0,O,[m.a,g.a],null,null)],(function(l,n){var e=n.component;l(n,1,0,e.status),l(n,9,0,e.permission,e.selection,e.tableActions),l(n,15,0),l(n,20,0),l(n,26,0)}),(function(l,n){l(n,7,0,n.component.siteName)}))}function Y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-mirroring",[],null,null,null,J,W)),t["ɵdid"](1,245760,null,0,X.a,[w.a,m.a,F.b,g.a],null,null)],(function(l,n){l(n,1,0)}),null)}var K=t["ɵccf"]("cd-mirroring",X.a,Y,{},{},[])},Sofw:function(l,n,e){"use strict";e.d(n,"a",(function(){return a}));var t=e("s7LF"),i=(e("my5R"),e("mtw6")),u=e("QFaf"),s=e("1Ni5");e("aexS"),e("9nlD");class a{constructor(l,n,e,t,i){this.authStorageService=l,this.bsModalRef=n,this.iscsiService=e,this.notificationService=t,this.i18n=i,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.permission=this.authStorageService.getPermissions().iscsi}ngOnInit(){this.hasPermission=this.permission.update,this.createForm(),this.iscsiService.getDiscovery().subscribe(l=>{this.discoveryForm.patchValue(l)})}createForm(){this.discoveryForm=new u.a({user:new t.i({value:"",disabled:!this.hasPermission}),password:new t.i({value:"",disabled:!this.hasPermission}),mutual_user:new t.i({value:"",disabled:!this.hasPermission}),mutual_password:new t.i({value:"",disabled:!this.hasPermission})}),s.a.validateIf(this.discoveryForm.get("user"),()=>this.discoveryForm.getValue("password")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("password"),()=>this.discoveryForm.getValue("user")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("mutual_user"),()=>this.discoveryForm.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_password")]),s.a.validateIf(this.discoveryForm.get("mutual_password"),()=>this.discoveryForm.getValue("mutual_user"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user")])}submitAction(){this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(()=>{this.notificationService.show(i.a.success,this.i18n("Updated discovery authentication")),this.bsModalRef.hide()},()=>{this.discoveryForm.setErrors({cdSubmitButton:!0})})}}},SuaG:function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("s7LF"),i=e("LvDl"),u=e("GyhO"),s=e("cp0P"),a=e("vkgz"),o=e("NJ9Y"),r=(e("XED3"),e("QFaf")),d=e("kvvV");e("kn/O");class c{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.pools=[],this.createForm()}createForm(){this.createBootstrapForm=new r.a({siteName:new t.i("",{validators:[t.B.required]}),pools:new t.k({},{validators:[this.validatePools()]}),token:new t.i("",{})})}ngOnInit(){this.createBootstrapForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(l=>{this.createBootstrapForm.get("siteName").setValue(l.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.pools=l.content_data.pools.reduce((l,n)=>(l.push({name:n.name,mirror_mode:n.mirror_mode}),l),[]);const n=this.createBootstrapForm.get("pools");i.each(this.pools,l=>{const e=l.name,i="disabled"===l.mirror_mode,u=n.controls[e];u?i&&u.disabled?u.enable():!i&&u.enabled&&(u.disable(),u.setValue(!0)):n.addControl(e,new t.i({value:!i,disabled:!i}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return l=>{let n=0;return i.each(l.controls,l=>{!0===l.value&&++n}),n>0?null:{requirePool:!0}}}generate(){this.createBootstrapForm.get("token").setValue("");let l="";const n=[],e=this.createBootstrapForm.get("pools");i.each(e.controls,(e,t)=>{!0===e.value&&(l=t,e.disabled||n.push(t))});const t={mirror_mode:"image"},r=Object(u.a)(this.rbdMirroringService.setSiteName(this.createBootstrapForm.getValue("siteName")),Object(s.a)(n.map(l=>this.rbdMirroringService.updatePool(l,t))),this.rbdMirroringService.createBootstrapToken(l).pipe(Object(a.a)(l=>this.createBootstrapForm.get("token").setValue(l.token)))).pipe(Object(o.a)()),c=()=>{this.rbdMirroringService.refresh(),this.createBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new d.a("rbd/mirroring/bootstrap/create",{}),call:r}).subscribe(void 0,c,c)}}},VBM6:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("SVse"),a=e("s7LF"),o=e("+gVj"),r=e("mXUL"),d=e("IZUe"),c=e("ANnk"),m=e("f/UV"),p=e("aexS"),h=e("gp3X"),g=e("sb0X"),f=e("KVJa"),v=e("Z21x"),b=e("sne2"),C=e("L4us"),S=e("LqlI"),_=e("XED3"),R=e("kn/O");e.d(n,"a",(function(){return B}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Edit"]))],null,null)}function k(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Add"]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Edit"]))],null,null)}function E(l){return t["ɵvid"](0,[(l()(),t["ɵted"](-1,null,["Add"]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The cluster name is not valid."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The CephX ID is not valid."]))],null,null)}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["The monitory address is not valid."]))],null,null)}function P(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX key must be base64 encoded."]))],null,null)}function x(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,110,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,7,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,5,null,null,null,null,null,null,null)),t["ɵdid"](4,16384,null,0,s.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](6,278528,null,0,s.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](8,16384,null,0,s.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],null,null),(l()(),t["ɵted"](-1,null,[" pool mirror peer"])),(l()(),t["ɵeld"](10,0,null,1,100,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](11,0,null,null,99,"form",[["class","form"],["name","editPeerForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,13).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,13).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,16).onSubmit()&&i),i}),null,null)),t["ɵdid"](12,16384,null,0,a.G,[],null,null),t["ɵdid"](13,540672,[["formDir",4]],0,a.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,a.d,null,[a.l]),t["ɵdid"](15,16384,null,0,a.s,[[4,a.d]],null,null),t["ɵdid"](16,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](17,0,null,null,86,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](18,0,null,null,14,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,13,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](20,0,null,null,5,null,null,null,null,null,null,null)),t["ɵdid"](21,16384,null,0,s.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](23,278528,null,0,s.NgSwitchCase,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](25,16384,null,0,s.NgSwitchDefault,[t.ViewContainerRef,t.TemplateRef,s.NgSwitch],null,null),(l()(),t["ɵted"](-1,null,[" the pool mirror peer attributes for pool "])),(l()(),t["ɵeld"](27,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](28,null,["",""])),(l()(),t["ɵted"](-1,null,[" and click "])),(l()(),t["ɵeld"](30,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Submit"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](33,0,null,null,18,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](34,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](37,0,null,0,1,"label",[["class","col-form-label required"],["for","clusterName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Cluster Name"])),(l()(),t["ɵeld"](39,0,null,0,8,"input",[["autofocus",""],["class","form-control"],["formControlName","clusterName"],["id","clusterName"],["name","clusterName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,42)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,42).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,42)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,42)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](40,4210688,null,0,d.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](41,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](42,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](44,671744,[[1,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](46,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](47,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,N)),t["ɵdid"](49,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,F)),t["ɵdid"](51,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](52,0,null,null,17,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](53,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](56,0,null,0,1,"label",[["class","col-form-label required"],["for","clientID"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX ID"])),(l()(),t["ɵeld"](58,0,null,0,7,"input",[["class","form-control"],["formControlName","clientID"],["id","clientID"],["name","clientID"],["placeholder","CephX ID..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,60)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,60).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,60)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,60)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](59,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](60,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](62,671744,[[3,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](64,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](65,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,V)),t["ɵdid"](67,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,T)),t["ɵdid"](69,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](70,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](71,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](74,0,null,0,2,"label",[["class","col-form-label"],["for","monAddr"]],null,null,null,null,null)),(l()(),t["ɵeld"](75,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Monitor Addresses"])),(l()(),t["ɵeld"](77,0,null,0,7,"input",[["class","form-control"],["formControlName","monAddr"],["id","monAddr"],["name","monAddr"],["placeholder","Comma-delimited addresses..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,79)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,79).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,79)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,79)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](78,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](79,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](81,671744,[[5,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](83,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](84,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,D)),t["ɵdid"](86,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](87,0,null,null,16,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,r.b,r.a)),t["ɵdid"](88,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](91,0,null,0,2,"label",[["class","col-form-label"],["for","key"]],null,null,null,null,null)),(l()(),t["ɵeld"](92,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["CephX Key"])),(l()(),t["ɵeld"](94,0,null,0,7,"input",[["class","form-control"],["formControlName","key"],["id","key"],["name","key"],["placeholder","Base64-encoded key..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,96)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,96).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,96)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,96)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](95,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](96,16384,null,0,a.e,[t.Renderer2,t.ElementRef,[2,a.b]],null,null),t["ɵprd"](1024,null,a.p,(function(l){return[l]}),[a.e]),t["ɵdid"](98,671744,[[7,4]],0,a.j,[[3,a.d],[8,null],[8,null],[6,a.p],[2,a.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,a.q,null,[a.j]),t["ɵdid"](100,16384,null,0,a.r,[[4,a.q]],null,null),t["ɵdid"](101,16384,null,0,o.h,[[3,a.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,P)),t["ɵdid"](103,16384,null,0,s.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](104,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](105,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](106,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),h.b,h.a)),t["ɵdid"](107,114688,null,0,g.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Submit"])),(l()(),t["ɵeld"](109,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,f.b,f.a)),t["ɵdid"](110,49152,null,0,v.a,[s.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,4,0,e.mode),l(n,6,0,"edit"),l(n,13,0,e.editPeerForm),l(n,16,0,e.editPeerForm),l(n,21,0,e.mode),l(n,23,0,"edit"),l(n,34,0),l(n,40,0,""),l(n,44,0,"clusterName"),l(n,47,0,"clusterName"),l(n,49,0,e.editPeerForm.showError("clusterName",t["ɵnov"](n,13),"required")),l(n,51,0,e.editPeerForm.showError("clusterName",t["ɵnov"](n,13),"invalidClusterName")),l(n,53,0),l(n,62,0,"clientID"),l(n,65,0,"clientID"),l(n,67,0,e.editPeerForm.showError("clientID",t["ɵnov"](n,13),"required")),l(n,69,0,e.editPeerForm.showError("clientID",t["ɵnov"](n,13),"invalidClientID")),l(n,71,0),l(n,81,0,"monAddr"),l(n,84,0,"monAddr"),l(n,86,0,e.editPeerForm.showError("monAddr",t["ɵnov"](n,13),"invalidMonAddr")),l(n,88,0),l(n,98,0,"key"),l(n,101,0,"key"),l(n,103,0,e.editPeerForm.showError("key",t["ɵnov"](n,13),"invalidKey")),l(n,107,0,e.editPeerForm),l(n,110,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,11,0,t["ɵnov"](n,15).ngClassUntouched,t["ɵnov"](n,15).ngClassTouched,t["ɵnov"](n,15).ngClassPristine,t["ɵnov"](n,15).ngClassDirty,t["ɵnov"](n,15).ngClassValid,t["ɵnov"](n,15).ngClassInvalid,t["ɵnov"](n,15).ngClassPending),l(n,28,0,e.poolName),l(n,33,0,t["ɵnov"](n,34).hasErrors,t["ɵnov"](n,34).hasSuccess),l(n,39,0,t["ɵnov"](n,46).ngClassUntouched,t["ɵnov"](n,46).ngClassTouched,t["ɵnov"](n,46).ngClassPristine,t["ɵnov"](n,46).ngClassDirty,t["ɵnov"](n,46).ngClassValid,t["ɵnov"](n,46).ngClassInvalid,t["ɵnov"](n,46).ngClassPending,t["ɵnov"](n,47).validClass,t["ɵnov"](n,47).invalidClass),l(n,52,0,t["ɵnov"](n,53).hasErrors,t["ɵnov"](n,53).hasSuccess),l(n,58,0,t["ɵnov"](n,64).ngClassUntouched,t["ɵnov"](n,64).ngClassTouched,t["ɵnov"](n,64).ngClassPristine,t["ɵnov"](n,64).ngClassDirty,t["ɵnov"](n,64).ngClassValid,t["ɵnov"](n,64).ngClassInvalid,t["ɵnov"](n,64).ngClassPending,t["ɵnov"](n,65).validClass,t["ɵnov"](n,65).invalidClass),l(n,70,0,t["ɵnov"](n,71).hasErrors,t["ɵnov"](n,71).hasSuccess),l(n,77,0,t["ɵnov"](n,83).ngClassUntouched,t["ɵnov"](n,83).ngClassTouched,t["ɵnov"](n,83).ngClassPristine,t["ɵnov"](n,83).ngClassDirty,t["ɵnov"](n,83).ngClassValid,t["ɵnov"](n,83).ngClassInvalid,t["ɵnov"](n,83).ngClassPending,t["ɵnov"](n,84).validClass,t["ɵnov"](n,84).invalidClass),l(n,87,0,t["ɵnov"](n,88).hasErrors,t["ɵnov"](n,88).hasSuccess),l(n,94,0,t["ɵnov"](n,100).ngClassUntouched,t["ɵnov"](n,100).ngClassTouched,t["ɵnov"](n,100).ngClassPristine,t["ɵnov"](n,100).ngClassDirty,t["ɵnov"](n,100).ngClassValid,t["ɵnov"](n,100).ngClassInvalid,t["ɵnov"](n,100).ngClassPending,t["ɵnov"](n,101).validClass,t["ɵnov"](n,101).invalidClass)}))}function q(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-pool-edit-peer-modal",[],null,null,null,x,y)),t["ɵdid"](1,114688,null,0,C.a,[S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var B=t["ɵccf"]("cd-pool-edit-peer-modal",C.a,q,{},{},[])},WkyA:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{constructor(){}}},WxU5:function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e("Ekvf"),e("F83c"),e("2EZI");var t=e("kvvV");e("aexS"),e("kn/O");class i{constructor(l,n,e,t,i,u){this.authStorageService=l,this.rbdService=n,this.modalRef=e,this.fb=t,this.poolService=i,this.taskWrapper=u,this.poolPermission=this.authStorageService.getPermissions().pool}createForm(){this.purgeForm=this.fb.group({poolName:""})}ngOnInit(){this.poolPermission.read&&this.poolService.list(["pool_name","application_metadata"]).then(l=>{this.pools=l.filter(l=>l.application_metadata.includes("rbd")).map(l=>l.pool_name)}),this.createForm()}purge(){const l=this.purgeForm.getValue("poolName")||"";this.taskWrapper.wrapTaskAroundCall({task:new t.a("rbd/trash/purge",{pool_name:l}),call:this.rbdService.purgeTrash(l)}).subscribe(void 0,()=>{this.purgeForm.setErrors({cdSubmitButton:!0})},()=>{this.modalRef.hide()})}}},XED3:function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("mrSG"),i=e("IheW"),u=e("2Vo4"),s=e("pLZG"),a=e("xTzq"),o=e("lOp/"),r=e("8Y7J"),d=e("pL04");let c=(()=>{let l=class{constructor(l,n){this.http=l,this.timerService=n,this.REFRESH_INTERVAL=3e4,this.summaryDataSource=new u.a(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/block/mirroring/summary")}retrieveSummaryObserver(){return l=>{this.summaryDataSource.next(l)}}subscribeSummary(l,n){return this.summaryData$.pipe(Object(s.a)(l=>!!l)).subscribe(l,n)}getPool(l){return this.http.get("api/block/mirroring/pool/"+l)}updatePool(l,n){return this.http.put("api/block/mirroring/pool/"+l,n,{observe:"response"})}getSiteName(){return this.http.get("api/block/mirroring/site_name")}setSiteName(l){return this.http.put("api/block/mirroring/site_name",{site_name:l},{observe:"response"})}createBootstrapToken(l){return this.http.post(`api/block/mirroring/pool/${l}/bootstrap/token`,{})}importBootstrapToken(l,n,e){return this.http.post(`api/block/mirroring/pool/${l}/bootstrap/peer`,{direction:n,token:e},{observe:"response"})}getPeer(l,n){return this.http.get(`api/block/mirroring/pool/${l}/peer/${n}`)}addPeer(l,n){return this.http.post(`api/block/mirroring/pool/${l}/peer`,n,{observe:"response"})}updatePeer(l,n,e){return this.http.put(`api/block/mirroring/pool/${l}/peer/${n}`,e,{observe:"response"})}deletePeer(l,n){return this.http.delete(`api/block/mirroring/pool/${l}/peer/${n}`,{observe:"response"})}};return l.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new l(r["ɵɵinject"](i.c),r["ɵɵinject"](o.a))},token:l,providedIn:d.a}),t.__decorate([t.__param(0,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[String]),t.__metadata("design:returntype",void 0)],l.prototype,"setSiteName",null),t.__decorate([t.__param(1,a.b),t.__param(2,a.b),t.__metadata("design:type",Function),t.__metadata("design:paramtypes",[String,String,String]),t.__metadata("design:returntype",void 0)],l.prototype,"importBootstrapToken",null),l=t.__decorate([a.a,t.__metadata("design:paramtypes",[i.c,o.a])],l),l})()},Z4cD:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=e("LvDl"),u=(e("my5R"),e("QFaf"));class s{constructor(l,n){this.modalRef=l,this.iscsiService=n}ngOnInit(){const l={backstore:new t.i(this.imagesSettings[this.image].backstore),lun:new t.i(this.imagesSettings[this.image].lun),wwn:new t.i(this.imagesSettings[this.image].wwn)};i.forEach(this.backstores,n=>{const e=this.imagesSettings[this.image][n]||{};i.forIn(this.disk_default_controls[n],(n,i)=>{l[i]=new t.i(e[i])})}),this.settingsForm=new u.a(l)}getDiskControlLimits(l,n){return this.disk_controls_limits?this.disk_controls_limits[l][n]:{type:"int"}}save(){const l=this.settingsForm.controls.backstore.value,n=this.settingsForm.controls.lun.value,e=this.settingsForm.controls.wwn.value,t={};i.forIn(this.settingsForm.controls,(n,e)=>{""!==n.value&&null!==n.value&&e in this.disk_default_controls[this.settingsForm.value.backstore]&&(t[e]=n.value,i.forEach(this.backstores,t=>{t!==l&&e in(this.imagesSettings[this.image][t]||{})&&(this.imagesSettings[this.image][t][e]=n.value)}))}),this.imagesSettings[this.image].backstore=l,this.imagesSettings[this.image].lun=n,this.imagesSettings[this.image].wwn=e,this.imagesSettings[this.image][l]=t,this.imagesSettings=Object.assign({},this.imagesSettings),this.control.updateValueAndValidity({emitEvent:!1}),this.modalRef.hide()}}},Z5tW:function(l,n,e){"use strict";e.d(n,"a",(function(){return r}));var t=e("cp0P"),i=(e("Ekvf"),e("F83c"),e("0+/T")),u=(e("sne2"),e("oxzT")),s=e("mtw6"),a=e("vCyI"),o=(e("aexS"),e("9nlD"),e("daK0"));class r{constructor(l,n,e,t,i,s,o){this.authStorageService=l,this.rbdService=n,this.poolService=e,this.modalService=t,this.notificationService=i,this.i18n=s,this.actionLabels=o,this.selection=new a.a,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"create",icon:u.a.add,click:()=>this.createModal(),name:this.actionLabels.CREATE},{permission:"delete",icon:u.a.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:this.i18n("Namespace"),prop:"namespace",flexGrow:1},{name:this.i18n("Pool"),prop:"pool",flexGrow:1},{name:this.i18n("Total images"),prop:"num_images",flexGrow:1}],this.refresh()}refresh(){this.poolService.list(["pool_name","type","application_metadata"]).then(l=>{l=l.filter(l=>this.rbdService.isRBDPool(l)&&"replicated"===l.type);const n=[];l.forEach(l=>{n.push(this.rbdService.listNamespaces(l.pool_name))}),n.length>0?Object(t.a)(n).subscribe(n=>{const e=[];for(let t=0;t<n.length;t++){const i=l[t].pool_name;n[t].forEach(l=>{e.push({id:`${i}/${l.namespace}`,pool:i,namespace:l.namespace,num_images:l.num_images})})}this.namespaces=e}):this.namespaces=[]})}updateSelection(l){this.selection=l}createModal(){this.modalRef=this.modalService.show(o.a),this.modalRef.content.onSubmit.subscribe(()=>{this.refresh()})}deleteModal(){const l=this.selection.first().pool,n=this.selection.first().namespace;this.modalRef=this.modalService.show(i.a,{initialState:{itemDescription:"Namespace",itemNames:[`${l}/${n}`],submitAction:()=>this.rbdService.deleteNamespace(l,n).subscribe(()=>{this.notificationService.show(s.a.success,this.i18n("Deleted namespace '{{pool}}/{{namespace}}'",{pool:l,namespace:n})),this.modalRef.hide(),this.refresh()},()=>{this.modalRef.content.stopLoadingSpinner()})}})}getDeleteDisableDesc(){const l=this.selection.first();return!l||l.num_images>0&&this.i18n("Namespace contains images")}}},a6qe:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=e("LvDl"),u=(e("my5R"),e("QFaf"));class s{constructor(l,n){this.modalRef=l,this.iscsiService=n}ngOnInit(){const l={};i.forIn(this.target_default_controls,(n,e)=>{l[e]=new t.i(this.target_controls.value[e])}),this.settingsForm=new u.a(l)}save(){const l={};i.forIn(this.settingsForm.controls,(n,e)=>{""!==n.value&&null!==n.value&&(l[e]=n.value)}),this.target_controls.setValue(l),this.modalRef.hide()}getTargetControlLimits(l){return this.target_controls_limits?this.target_controls_limits[l]:["Yes","No"].includes(this.target_default_controls[l])?{type:"bool"}:{type:"int"}}}},aAWM:function(l,n,e){"use strict";e("uIqm");var t=e("PhyI");class i{transform(l){return{0:"global",1:"pool",2:"image"}[l]}}e("aXbf"),e("o8EM"),e.d(n,"a",(function(){return u}));class u{constructor(l,n,e){this.formatterService=l,this.rbdConfigurationService=n,this.i18n=e,this.sourceField=t.a,this.typeField=t.b}ngOnInit(){this.poolConfigurationColumns=[{prop:"displayName",name:this.i18n("Name")},{prop:"description",name:this.i18n("Description")},{prop:"name",name:this.i18n("Key")},{prop:"source",name:this.i18n("Source"),cellTemplate:this.configurationSourceTpl,pipe:new i},{prop:"value",name:this.i18n("Value"),cellTemplate:this.configurationValueTpl}]}ngOnChanges(){this.data&&(this.data=this.data.filter(l=>this.rbdConfigurationService.getOptionFields().map(l=>l.name).includes(l.name)))}}},aa9H:function(l,n,e){"use strict";var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{}e.d(n,"a",(function(){return a}));class a{constructor(l,n,e,t){this.modalRef=l,this.i18n=n,this.rbdMirroringService=e,this.taskWrapper=t,this.bsConfig={containerClass:"theme-default"},this.peerExists=!1,this.mirrorModes=[{id:"disabled",name:this.i18n("Disabled")},{id:"pool",name:this.i18n("Pool")},{id:"image",name:this.i18n("Image")}],this.createForm()}createForm(){this.editModeForm=new i.a({mirrorMode:new t.i("",{validators:[t.B.required,this.validateMode.bind(this)]})})}ngOnInit(){this.pattern=""+this.poolName,this.rbdMirroringService.getPool(this.poolName).subscribe(l=>{this.setResponse(l)}),this.subs=this.rbdMirroringService.subscribeSummary(l=>{this.peerExists=!1;const n=l.content_data.pools.find(l=>this.poolName===l.name);this.peerExists=n&&n.peer_uuids.length})}ngOnDestroy(){this.subs.unsubscribe()}validateMode(l){return"disabled"===l.value&&this.peerExists?{cannotDisable:{value:l.value}}:null}setResponse(l){this.editModeForm.get("mirrorMode").setValue(l.mirror_mode)}update(){const l=new s;l.mirror_mode=this.editModeForm.getValue("mirrorMode"),this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/mirroring/pool/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePool(this.poolName,l)}).subscribe(void 0,()=>this.editModeForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},bUo2:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("gp3X"),u=e("sb0X"),s=e("EEJc"),a=e("ajRT"),o=e("s7LF"),r=e("+gVj"),d=e("mXUL"),c=e("ANnk"),m=e("f/UV"),p=e("aexS"),h=e("SVse"),g=e("D4zM"),f=e("OcYo"),v=e("EApP"),b=e("GiVz"),C=e("KVJa"),S=e("Z21x"),_=e("sne2"),R=e("Sofw"),y=e("LqlI"),w=e("my5R"),k=e("9nlD");e.d(n,"a",(function(){return A}));var I=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function T(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function P(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function x(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function q(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.submitAction()&&t),t}),i.b,i.a)),t["ɵdid"](1,114688,null,0,u.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Submit"]))],(function(l,n){l(n,1,0,n.component.discoveryForm)}),null)}function B(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,106,"cd-modal",[],null,null,null,s.c,s.b)),t["ɵdid"](1,49152,null,0,a.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Discovery Authentication"])),(l()(),t["ɵeld"](4,0,null,1,102,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,101,"form",[["name","discoveryForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,o.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,o.d,null,[o.l]),t["ɵdid"](9,16384,null,0,o.s,[[4,o.d]],null,null),t["ɵdid"](10,16384,null,0,r.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,89,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](13,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["User"])),(l()(),t["ɵeld"](18,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["id","user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,20)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,20).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,20)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,20)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](20,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](22,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](24,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](25,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](26,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](28,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,N)),t["ɵdid"](30,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](31,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](32,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](35,0,null,0,1,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Password"])),(l()(),t["ɵeld"](37,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](38,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](39,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,40)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,40).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,40)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,40)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](40,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](42,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](44,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](45,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](46,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](47,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](48,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,49).onClick()&&i),i}),null,null)),t["ɵdid"](49,81920,null,0,g.a,[t.ElementRef,t.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),t["ɵeld"](50,0,null,null,1,"button",[["cdCopy2ClipboardButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,51).onClick()&&i),i}),null,null)),t["ɵdid"](51,81920,null,0,f.a,[t.ElementRef,t.Renderer2,v.j,b.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,F)),t["ɵdid"](53,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,V)),t["ɵdid"](55,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](56,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](57,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](60,0,null,0,2,"label",[["class","cd-col-form-label"],["for","mutual_user"]],null,null,null,null,null)),(l()(),t["ɵeld"](61,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mutual User"])),(l()(),t["ɵeld"](63,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](64,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["id","mutual_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,65)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,65).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,65)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,65)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](65,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](67,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](69,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](70,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](71,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,T)),t["ɵdid"](73,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,D)),t["ɵdid"](75,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](76,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,d.b,d.a)),t["ɵdid"](77,1163264,null,2,r.c,[t.ElementRef,r.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](80,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mutual_password"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mutual Password"])),(l()(),t["ɵeld"](82,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),t["ɵeld"](83,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t["ɵeld"](84,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["id","mutual_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,85)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,85).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,85)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,85)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](85,16384,null,0,o.e,[t.Renderer2,t.ElementRef,[2,o.b]],null,null),t["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),t["ɵdid"](87,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,o.q,null,[o.j]),t["ɵdid"](89,16384,null,0,o.r,[[4,o.q]],null,null),t["ɵdid"](90,4210688,null,0,c.a,[[2,m.a],p.a,t.ElementRef],null,null),t["ɵdid"](91,16384,null,0,r.h,[[3,o.d],r.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](92,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),t["ɵeld"](93,0,null,null,1,"button",[["cdPasswordButton","mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,94).onClick()&&i),i}),null,null)),t["ɵdid"](94,81920,null,0,g.a,[t.ElementRef,t.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),t["ɵeld"](95,0,null,null,1,"button",[["cdCopy2ClipboardButton","mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var i=!0;return"click"===n&&(i=!1!==t["ɵnov"](l,96).onClick()&&i),i}),null,null)),t["ɵdid"](96,81920,null,0,f.a,[t.ElementRef,t.Renderer2,v.j,b.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,P)),t["ɵdid"](98,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,x)),t["ɵdid"](100,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](101,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](102,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,q)),t["ɵdid"](104,16384,null,0,h.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](105,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,C.b,C.a)),t["ɵdid"](106,49152,null,0,S.a,[h.Location,_.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.bsModalRef),l(n,7,0,e.discoveryForm),l(n,10,0,e.discoveryForm),l(n,13,0),l(n,22,0,"user"),l(n,26,0,"user"),l(n,28,0,e.discoveryForm.showError("user",t["ɵnov"](n,7),"required")),l(n,30,0,e.discoveryForm.showError("user",t["ɵnov"](n,7),"pattern")),l(n,32,0),l(n,42,0,"password"),l(n,46,0,"password"),l(n,49,0,"password"),l(n,51,0,"password"),l(n,53,0,e.discoveryForm.showError("password",t["ɵnov"](n,7),"required")),l(n,55,0,e.discoveryForm.showError("password",t["ɵnov"](n,7),"pattern")),l(n,57,0),l(n,67,0,"mutual_user"),l(n,71,0,"mutual_user"),l(n,73,0,e.discoveryForm.showError("mutual_user",t["ɵnov"](n,7),"required")),l(n,75,0,e.discoveryForm.showError("mutual_user",t["ɵnov"](n,7),"pattern")),l(n,77,0),l(n,87,0,"mutual_password"),l(n,91,0,"mutual_password"),l(n,94,0,"mutual_password"),l(n,96,0,"mutual_password"),l(n,98,0,e.discoveryForm.showError("mutual_password",t["ɵnov"](n,7),"required")),l(n,100,0,e.discoveryForm.showError("mutual_password",t["ɵnov"](n,7),"pattern")),l(n,104,0,e.hasPermission),l(n,106,0,"Cancel",e.bsModalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,12,0,t["ɵnov"](n,13).hasErrors,t["ɵnov"](n,13).hasSuccess),l(n,19,0,t["ɵnov"](n,24).ngClassUntouched,t["ɵnov"](n,24).ngClassTouched,t["ɵnov"](n,24).ngClassPristine,t["ɵnov"](n,24).ngClassDirty,t["ɵnov"](n,24).ngClassValid,t["ɵnov"](n,24).ngClassInvalid,t["ɵnov"](n,24).ngClassPending,t["ɵnov"](n,26).validClass,t["ɵnov"](n,26).invalidClass),l(n,31,0,t["ɵnov"](n,32).hasErrors,t["ɵnov"](n,32).hasSuccess),l(n,39,0,t["ɵnov"](n,44).ngClassUntouched,t["ɵnov"](n,44).ngClassTouched,t["ɵnov"](n,44).ngClassPristine,t["ɵnov"](n,44).ngClassDirty,t["ɵnov"](n,44).ngClassValid,t["ɵnov"](n,44).ngClassInvalid,t["ɵnov"](n,44).ngClassPending,t["ɵnov"](n,46).validClass,t["ɵnov"](n,46).invalidClass),l(n,56,0,t["ɵnov"](n,57).hasErrors,t["ɵnov"](n,57).hasSuccess),l(n,64,0,t["ɵnov"](n,69).ngClassUntouched,t["ɵnov"](n,69).ngClassTouched,t["ɵnov"](n,69).ngClassPristine,t["ɵnov"](n,69).ngClassDirty,t["ɵnov"](n,69).ngClassValid,t["ɵnov"](n,69).ngClassInvalid,t["ɵnov"](n,69).ngClassPending,t["ɵnov"](n,71).validClass,t["ɵnov"](n,71).invalidClass),l(n,76,0,t["ɵnov"](n,77).hasErrors,t["ɵnov"](n,77).hasSuccess),l(n,84,0,t["ɵnov"](n,89).ngClassUntouched,t["ɵnov"](n,89).ngClassTouched,t["ɵnov"](n,89).ngClassPristine,t["ɵnov"](n,89).ngClassDirty,t["ɵnov"](n,89).ngClassValid,t["ɵnov"](n,89).ngClassInvalid,t["ɵnov"](n,89).ngClassPending,t["ɵnov"](n,91).validClass,t["ɵnov"](n,91).invalidClass)}))}function O(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-discovery-modal",[],null,null,null,B,I)),t["ɵdid"](1,114688,null,0,R.a,[p.a,y.a,w.a,k.a,b.a],null,null)],(function(l,n){l(n,1,0)}),null)}var A=t["ɵccf"]("cd-iscsi-target-discovery-modal",R.a,O,{},{},[])},chpi:function(l,n,e){"use strict";e.d(n,"a",(function(){return h}));var t=e("LvDl"),i=e("wd/R"),u=(e("F83c"),e("0+/T")),s=(e("sne2"),e("uIqm"),e("x38r")),a=e("oxzT"),o=e("yJti"),r=e("vCyI"),d=e("kvvV"),c=e("jVDg"),m=(e("a0VL"),e("aexS"),e("VTlA"),e("kn/O"),e("WxU5")),p=e("2GqK");class h{constructor(l,n,e,t,i,u,s,o){this.authStorageService=l,this.rbdService=n,this.modalService=e,this.cdDatePipe=t,this.taskListService=i,this.taskWrapper=u,this.i18n=s,this.actionLabels=o,this.icons=a.a,this.executingTasks=[],this.selection=new r.a,this.disablePurgeBtn=!0,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"update",icon:a.a.undo,click:()=>this.restoreModal(),name:this.actionLabels.RESTORE},{permission:"delete",icon:a.a.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:1,cellTransformation:s.a.executing},{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Pool"),prop:"pool_name",flexGrow:1},{name:this.i18n("Namespace"),prop:"namespace",flexGrow:1},{name:this.i18n("Status"),prop:"deferment_end_time",flexGrow:1,cellTemplate:this.expiresTpl},{name:this.i18n("Deleted At"),prop:"deletion_time",flexGrow:1,pipe:this.cdDatePipe}],this.taskListService.init(()=>this.rbdService.listTrash(),l=>this.prepareResponse(l),l=>this.images=l,()=>this.onFetchError(),l=>["rbd/trash/remove","rbd/trash/restore"].includes(l.name),(l,n)=>new c.a(l.pool_name,l.namespace,l.id).toString()===n.metadata.image_id_spec,void 0)}prepareResponse(l){let n=[];const e={};l.forEach(l=>{t.isUndefined(e[l.status])&&(e[l.status]=[]),e[l.status].push(l.pool_name),n=n.concat(l.value),this.disablePurgeBtn=!n.length});const u=[];return t.forEach(e,(l,n)=>{u.push({status:parseInt(n,10),statusFor:(l.length>1?"pools ":"pool ")+"<strong>"+l.join("</strong>, <strong>")+"</strong>"})}),this.viewCacheStatusList=u,n.forEach(l=>{l.cdIsExpired=i().isAfter(l.deferment_end_time)}),n}onFetchError(){this.table.reset(),this.viewCacheStatusList=[{status:o.a.ValueException}]}updateSelection(l){this.selection=l}restoreModal(){const l={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,imageId:this.selection.first().id};this.modalRef=this.modalService.show(p.a,{initialState:l})}deleteModal(){const l=this.selection.first().pool_name,n=this.selection.first().namespace,e=this.selection.first().id,t=this.selection.first().deferment_end_time,i=new c.a(l,n,e);this.modalRef=this.modalService.show(u.a,{initialState:{itemDescription:"RBD",itemNames:[i],bodyTemplate:this.deleteTpl,bodyContext:{$implicit:t},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new d.a("rbd/trash/remove",{image_id_spec:i.toString()}),call:this.rbdService.removeTrash(i,!0)})}})}isExpired(l){return i().isAfter(l)}purgeModal(){this.modalService.show(m.a)}}},cxJu:function(l,n,e){"use strict";e.d(n,"a",(function(){return r}));var t=e("quSY"),i=(e("XED3"),e("oxzT")),u=e("vCyI"),s=(e("aexS"),e("SuaG")),a=e("+26A"),o=e("puGn");class r{constructor(l,n,e,s){this.authStorageService=l,this.rbdMirroringService=n,this.modalService=e,this.i18n=s,this.selection=new u.a,this.peersExist=!0,this.subs=new t.a,this.permission=this.authStorageService.getPermissions().rbdMirroring;const a={permission:"update",icon:i.a.edit,click:()=>this.editSiteNameModal(),name:this.i18n("Edit Site Name"),canBePrimary:()=>!0,disable:()=>!1},o={permission:"update",icon:i.a.upload,click:()=>this.createBootstrapModal(),name:this.i18n("Create Bootstrap Token"),disable:()=>!1},r={permission:"update",icon:i.a.download,click:()=>this.importBootstrapModal(),name:this.i18n("Import Bootstrap Token"),disable:()=>this.peersExist};this.tableActions=[a,o,r]}ngOnInit(){this.subs.add(this.rbdMirroringService.startPolling()),this.subs.add(this.rbdMirroringService.subscribeSummary(l=>{this.status=l.content_data.status,this.siteName=l.site_name,this.peersExist=!!l.content_data.pools.find(l=>l.peer_uuids.length>0)}))}ngOnDestroy(){this.subs.unsubscribe()}editSiteNameModal(){this.modalRef=this.modalService.show(o.a,{initialState:{siteName:this.siteName}})}createBootstrapModal(){this.modalRef=this.modalService.show(s.a,{initialState:{siteName:this.siteName}})}importBootstrapModal(){this.modalRef=this.modalService.show(a.a,{initialState:{siteName:this.siteName}})}}},daK0:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("s7LF"),i=e("XNiG"),u=(e("Ekvf"),e("F83c"),e("mtw6")),s=e("QFaf"),a=e("kvvV");e("aexS"),e("9nlD");class o{constructor(l,n,e,t,i,u){this.modalRef=l,this.authStorageService=n,this.notificationService=e,this.poolService=t,this.rbdService=i,this.i18n=u,this.pools=null,this.editing=!1,this.poolPermission=this.authStorageService.getPermissions().pool,this.createForm()}createForm(){this.namespaceForm=new s.a({pool:new t.i(""),namespace:new t.i("")},this.validator(),this.asyncValidator())}validator(){return l=>{const n=l.get("pool"),e=l.get("namespace");let t=null;n.value||(t={required:!0}),n.setErrors(t);let i=null;return e.value||(i={required:!0}),e.setErrors(i),null}}asyncValidator(){return l=>new Promise(n=>{const e=l.get("pool"),t=l.get("namespace");this.rbdService.listNamespaces(e.value).subscribe(l=>{if(l.some(l=>l.namespace===t.value)){const l={namespaceExists:!0};t.setErrors(l),n(l)}else n(null)})})}ngOnInit(){this.onSubmit=new i.a,this.poolPermission.read&&this.poolService.list(["pool_name","type","application_metadata"]).then(l=>{const n=[];for(const e of l)this.rbdService.isRBDPool(e)&&"replicated"===e.type&&n.push(e);if(this.pools=n,1===this.pools.length){const l=this.pools[0].pool_name;this.namespaceForm.get("pool").setValue(l)}})}submit(){const l=this.namespaceForm.getValue("pool"),n=this.namespaceForm.getValue("namespace"),e=new a.a;e.name="rbd/namespace/create",e.metadata={pool:l,namespace:n},this.rbdService.createNamespace(l,n).toPromise().then(()=>{this.notificationService.show(u.a.success,this.i18n("Created namespace '{{pool}}/{{namespace}}'",{pool:l,namespace:n})),this.modalRef.hide(),this.onSubmit.next()}).catch(()=>{this.namespaceForm.setErrors({cdSubmitButton:!0})})}}},"e/kN":function(l,n,e){"use strict";e.d(n,"a",(function(){return c}));var t=e("LvDl"),i=(e("my5R"),e("+fVR")),u=e("0+/T"),s=(e("sne2"),e("uIqm"),e("x38r")),a=e("oxzT"),o=e("vCyI"),r=e("kvvV"),d=(e("FFMq"),e("G1/K"),e("aexS"),e("VTlA"),e("kn/O"),e("Sofw"));class c extends i.a{constructor(l,n,e,t,i,u,s,r,d){super(),this.authStorageService=l,this.i18n=n,this.iscsiService=e,this.joinPipe=t,this.taskListService=i,this.notAvailablePipe=u,this.modalService=s,this.taskWrapper=r,this.actionLabels=d,this.available=void 0,this.selection=new o.a,this.targets=[],this.icons=a.a,this.builders={"iscsi/target/create":l=>({target_iqn:l.target_iqn})},this.permission=this.authStorageService.getPermissions().iscsi,this.tableActions=[{permission:"create",icon:a.a.add,routerLink:()=>"/block/iscsi/targets/create",name:this.actionLabels.CREATE},{permission:"update",icon:a.a.edit,routerLink:()=>"/block/iscsi/targets/edit/"+this.selection.first().target_iqn,name:this.actionLabels.EDIT,disable:()=>this.getEditDisableDesc()},{permission:"delete",icon:a.a.destroy,click:()=>this.deleteIscsiTargetModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:this.i18n("Target"),prop:"target_iqn",flexGrow:2,cellTransformation:s.a.executing},{name:this.i18n("Portals"),prop:"cdPortals",pipe:this.joinPipe,flexGrow:2},{name:this.i18n("Images"),prop:"cdImages",pipe:this.joinPipe,flexGrow:2},{name:this.i18n("# Sessions"),prop:"info.num_sessions",pipe:this.notAvailablePipe,flexGrow:1}],this.iscsiService.status().subscribe(l=>{this.available=l.available,l.available?(this.iscsiService.version().subscribe(l=>{this.cephIscsiConfigVersion=l.ceph_iscsi_config_version,this.taskListService.init(()=>this.iscsiService.listTargets(),l=>this.prepareResponse(l),l=>this.targets=l,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)}),this.iscsiService.settings().subscribe(l=>{this.settings=l})):this.status=l.message})}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}getEditDisableDesc(){const l=this.selection.first();return l&&l.cdExecuting?l.cdExecuting:l&&t.isUndefined(l.info)?this.i18n("Unavailable gateway(s)"):!l}getDeleteDisableDesc(){const l=this.selection.first();return l&&l.cdExecuting?l.cdExecuting:l&&t.isUndefined(l.info)?this.i18n("Unavailable gateway(s)"):l&&l.info&&l.info.num_sessions?this.i18n("Target has active sessions"):!l}prepareResponse(l){return l.forEach(l=>{l.cdPortals=l.portals.map(l=>`${l.host}:${l.ip}`),l.cdImages=l.disks.map(l=>`${l.pool}/${l.image}`)}),l}onFetchError(){this.table.reset()}itemFilter(l,n){return l.target_iqn===n.metadata.target_iqn}taskFilter(l){return["iscsi/target/create","iscsi/target/edit","iscsi/target/delete"].includes(l.name)}updateSelection(l){this.selection=l}deleteIscsiTargetModal(){const l=this.selection.first().target_iqn;this.modalRef=this.modalService.show(u.a,{initialState:{itemDescription:this.i18n("iSCSI target"),itemNames:[l],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new r.a("iscsi/target/delete",{target_iqn:l}),call:this.iscsiService.deleteTarget(l)})}})}configureDiscoveryAuth(){this.modalService.show(d.a,{})}}},eF8U:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("ANnk"),s=e("f/UV"),a=e("aexS"),o=e("+gVj"),r=e("SVse"),d=e("mXUL");e("jMP8"),e.d(n,"a",(function(){return c})),e.d(n,"b",(function(){return S}));var c=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function m(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function p(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,12,"select",[["class","form-control custom-select"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](8,0,null,null,2,"option",[],null,null,null,null,null)),t["ɵdid"](9,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),t["ɵdid"](10,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,m)),t["ɵdid"](12,278528,null,0,r.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.setting),l(n,7,0,e.setting),l(n,9,0,null),l(n,10,0,null),l(n,12,0,e.limits.values)}),(function(l,n){var e=n.component;l(n,0,1,[t["ɵinlineInterpolate"](1,"",e.setting,""),t["ɵinlineInterpolate"](1,"",e.setting,""),t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass])}))}function h(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,8,"input",[["class","form-control"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.value)&&i),"input"===n&&(i=!1!==t["ɵnov"](l,2).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,2).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](2,16384,null,0,i.w,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.w]),t["ɵdid"](4,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](6,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](7,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](8,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.setting),l(n,8,0,e.setting)}),(function(l,n){l(n,0,0,t["ɵnov"](n,6).ngClassUntouched,t["ɵnov"](n,6).ngClassTouched,t["ɵnov"](n,6).ngClassPristine,t["ɵnov"](n,6).ngClassDirty,t["ɵnov"](n,6).ngClassValid,t["ɵnov"](n,6).ngClassInvalid,t["ɵnov"](n,6).ngClassPending,t["ɵnov"](n,8).validClass,t["ɵnov"](n,8).invalidClass)}))}function g(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.setting),l(n,7,0,e.setting)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,25,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t["ɵeld"](2,0,null,null,11,"div",[["class","custom-control custom-radio custom-control-inline"]],null,null,null,null,null)),(l()(),t["ɵeld"](3,0,null,null,8,"input",[["class","custom-control-input"],["type","radio"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,4)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,4).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,4)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,4)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,5).onChange()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,5).onTouched()&&i),i}),null,null)),t["ɵdid"](4,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](5,212992,null,0,i.x,[t.Renderer2,t.ElementRef,i.D,t.Injector],{formControlName:[0,"formControlName"],value:[1,"value"]},null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.x]),t["ɵdid"](7,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](9,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](10,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](11,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](12,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](-1,null,["Yes"])),(l()(),t["ɵeld"](14,0,null,null,11,"div",[["class","custom-control custom-radio custom-control-inline"]],null,null,null,null,null)),(l()(),t["ɵeld"](15,0,null,null,8,"input",[["class","custom-control-input"],["type","radio"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,16)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,16).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,16)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,16)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,17).onChange()&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,17).onTouched()&&i),i}),null,null)),t["ɵdid"](16,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵdid"](17,212992,null,0,i.x,[t.Renderer2,t.ElementRef,i.D,t.Injector],{formControlName:[0,"formControlName"],value:[1,"value"]},null),t["ɵprd"](1024,null,i.p,(function(l,n){return[l,n]}),[i.e,i.x]),t["ɵdid"](19,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](21,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](22,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](23,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](24,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](-1,null,["No"]))],(function(l,n){var e=n.component;l(n,5,0,e.setting,!0),l(n,7,0,e.setting),l(n,11,0,e.setting),l(n,17,0,e.setting,!1),l(n,19,0,e.setting),l(n,23,0,e.setting)}),(function(l,n){var e=n.component;l(n,3,0,e.setting+"True",t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending,t["ɵnov"](n,11).validClass,t["ɵnov"](n,11).invalidClass),l(n,12,0,e.setting+"True"),l(n,15,0,e.setting+"False",t["ɵnov"](n,21).ngClassUntouched,t["ɵnov"](n,21).ngClassTouched,t["ɵnov"](n,21).ngClassPristine,t["ɵnov"](n,21).ngClassDirty,t["ɵnov"](n,21).ngClassValid,t["ɵnov"](n,21).ngClassInvalid,t["ɵnov"](n,21).ngClassPending,t["ɵnov"](n,23).validClass,t["ɵnov"](n,23).invalidClass),l(n,24,0,e.setting+"False")}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,h)),t["ɵdid"](2,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,g)),t["ɵdid"](4,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,f)),t["ɵdid"](6,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0,"int"===e.limits.type),l(n,4,0,"str"===e.limits.type),l(n,6,0,"bool"===e.limits.type)}),null)}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](2,null,["Must be greater than or equal to ","."]))],null,(function(l,n){l(n,2,0,n.component.limits.min)}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](2,null,["Must be less than or equal to ","."]))],null,(function(l,n){l(n,2,0,n.component.limits.max)}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,17,"div",[["class","form-group"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,1).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,1).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,4).onSubmit()&&i),i}),d.b,d.a)),t["ɵdid"](1,540672,null,0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](3,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](4,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),t["ɵdid"](5,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](8,0,null,0,1,"label",[["class","col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),t["ɵted"](9,null,["",""])),(l()(),t["ɵand"](16777216,null,0,1,null,p)),t["ɵdid"](11,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,v)),t["ɵdid"](13,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,b)),t["ɵdid"](15,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,C)),t["ɵdid"](17,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.settingsForm),l(n,4,0,e.settingsForm),l(n,5,0),l(n,11,0,"enum"===e.limits.type),l(n,13,0,"enum"!==e.limits.type),l(n,15,0,e.settingsForm.showError(e.setting,e.formDir,"min")),l(n,17,0,e.settingsForm.showError(e.setting,e.formDir,"max"))}),(function(l,n){var e=n.component;l(n,0,0,t["ɵnov"](n,3).ngClassUntouched,t["ɵnov"](n,3).ngClassTouched,t["ɵnov"](n,3).ngClassPristine,t["ɵnov"](n,3).ngClassDirty,t["ɵnov"](n,3).ngClassValid,t["ɵnov"](n,3).ngClassInvalid,t["ɵnov"](n,3).ngClassPending,t["ɵnov"](n,5).hasErrors,t["ɵnov"](n,5).hasSuccess),l(n,8,0,t["ɵinlineInterpolate"](1,"",e.setting,"")),l(n,9,0,e.setting)}))}},gr3l:function(l,n,e){"use strict";e.d(n,"a",(function(){return h}));var t=e("s7LF"),i=e("LvDl"),u=e("cp0P"),s=(e("my5R"),e("F83c"),e("DNAf")),a=e("a96k"),o=(e("sne2"),e("oxzT")),r=e("QFaf"),d=e("1Ni5"),c=e("kvvV"),m=(e("kn/O"),e("Z4cD")),p=e("a6qe");class h{constructor(l,n,e,t,i,u,a,r){this.iscsiService=l,this.modalService=n,this.rbdService=e,this.router=t,this.route=i,this.i18n=u,this.taskWrapper=a,this.actionLabels=r,this.api_version=0,this.minimum_gateways=1,this.icons=o.a,this.isEdit=!1,this.portalsSelections=[],this.imagesInitiatorSelections=[],this.groupDiskSelections=[],this.groupMembersSelections=[],this.imagesSettings={},this.messages={portals:new s.a({noOptions:this.i18n("There are no portals available.")},this.i18n),images:new s.a({noOptions:this.i18n("There are no images available.")},this.i18n),initiatorImage:new s.a({noOptions:this.i18n("There are no images available. Please make sure you add an image to the target.")},this.i18n),groupInitiator:new s.a({noOptions:this.i18n("There are no initiators available. Please make sure you add an initiator to the target.")},this.i18n)},this.IQN_REGEX=/^iqn\.(19|20)\d\d-(0[1-9]|1[0-2])\.\D{2,3}(\.[A-Za-z0-9-]+)+(:[A-Za-z0-9-\.]+)*$/,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.resource=this.i18n("target")}ngOnInit(){const l=[this.iscsiService.listTargets(),this.rbdService.list(),this.iscsiService.portals(),this.iscsiService.settings(),this.iscsiService.version()];this.router.url.startsWith("/block/iscsi/targets/edit")&&(this.isEdit=!0,this.route.params.subscribe(n=>{this.target_iqn=decodeURIComponent(n.target_iqn),l.push(this.iscsiService.getTarget(this.target_iqn))})),this.action=this.isEdit?this.actionLabels.EDIT:this.actionLabels.CREATE,Object(u.a)(l).subscribe(l=>{const n=i(l[0]).filter(l=>l.target_iqn!==this.target_iqn).flatMap(l=>l.disks).map(l=>`${l.pool}/${l.image}`).value();"api_version"in l[3]&&(this.api_version=l[3].api_version),this.minimum_gateways=l[3].config.minimum_gateways,this.target_default_controls=l[3].target_default_controls,this.target_controls_limits=l[3].target_controls_limits,this.disk_default_controls=l[3].disk_default_controls,this.disk_controls_limits=l[3].disk_controls_limits,this.backstores=l[3].backstores,this.default_backstore=l[3].default_backstore,this.unsupported_rbd_features=l[3].unsupported_rbd_features,this.required_rbd_features=l[3].required_rbd_features,this.imagesAll=i(l[1]).flatMap(l=>l.value).filter(l=>!l.namespace&&-1===n.indexOf(`${l.pool_name}/${l.name}`)&&0!==this.getValidBackstores(l).length).value(),this.imagesSelections=this.imagesAll.map(l=>new a.a(!1,`${l.pool_name}/${l.name}`,""));const e=[];l[2].forEach(l=>{l.ip_addresses.forEach(n=>{e.push(new a.a(!1,l.name+":"+n,""))})}),this.portalsSelections=[...e],this.cephIscsiConfigVersion=l[4].ceph_iscsi_config_version,this.createForm(),l[5]&&this.resolveModel(l[5])})}createForm(){if(this.targetForm=new r.a({target_iqn:new t.i("iqn.2001-07.com.ceph:"+Date.now(),{validators:[t.B.required,t.B.pattern(this.IQN_REGEX)]}),target_controls:new t.i({}),portals:new t.i([],{validators:[d.a.custom("minGateways",l=>i.uniq(l.map(l=>l.split(":")[0])).length<Math.max(1,this.minimum_gateways))]}),disks:new t.i([],{validators:[d.a.custom("dupLunId",l=>{const n=this.getLunIds(l);return n.length!==i.uniq(n).length}),d.a.custom("dupWwn",l=>{const n=this.getWwns(l);return n.length!==i.uniq(n).length})]}),initiators:new t.f([]),groups:new t.f([]),acl_enabled:new t.i(!1)}),this.cephIscsiConfigVersion>10){const l=new r.a({user:new t.i(""),password:new t.i(""),mutual_user:new t.i(""),mutual_password:new t.i("")});this.setAuthValidator(l),this.targetForm.addControl("auth",l)}}resolveModel(l){this.targetForm.patchValue({target_iqn:l.target_iqn,target_controls:l.target_controls,acl_enabled:l.acl_enabled}),this.cephIscsiConfigVersion>10&&this.targetForm.patchValue({auth:l.auth});const n=[];i.forEach(l.portals,l=>{n.push(`${l.host}:${l.ip}`)}),this.targetForm.patchValue({portals:n});const e=[];i.forEach(l.disks,l=>{const n=`${l.pool}/${l.image}`;e.push(n),this.imagesSettings[n]={backstore:l.backstore},this.imagesSettings[n][l.backstore]=l.controls,"lun"in l&&(this.imagesSettings[n].lun=l.lun),"wwn"in l&&(this.imagesSettings[n].wwn=l.wwn),this.onImageSelection({option:{name:n,selected:!0}})}),this.targetForm.patchValue({disks:e}),i.forEach(l.clients,l=>{const n=this.addInitiator();l.luns=i.map(l.luns,l=>`${l.pool}/${l.image}`),n.patchValue(l)}),i.forEach(l.groups,l=>{const n=this.addGroup();l.disks=i.map(l.disks,l=>`${l.pool}/${l.image}`),n.patchValue(l),i.forEach(l.members,l=>{this.onGroupMemberSelection({option:new a.a(!0,l,"")})})})}hasAdvancedSettings(l){return Object.values(l).length>0}get portals(){return this.targetForm.get("portals")}onPortalSelection(){this.portals.setValue(this.portals.value)}removePortal(l,n){return this.portalsSelections.forEach(l=>{l.name===n&&(l.selected=!1)}),this.portals.value.splice(l,1),this.portals.setValue(this.portals.value),!1}get disks(){return this.targetForm.get("disks")}removeImage(l,n){return this.imagesSelections.forEach(l=>{l.name===n&&(l.selected=!1)}),this.disks.value.splice(l,1),this.removeImageRefs(n),this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1}),!1}removeImageRefs(l){this.initiators.controls.forEach(n=>{const e=n.value.luns.filter(n=>n!==l);n.get("luns").setValue(e)}),this.groups.controls.forEach(n=>{const e=n.value.disks.filter(n=>n!==l);n.get("disks").setValue(e)}),i.forEach(this.imagesInitiatorSelections,(n,e)=>{this.imagesInitiatorSelections[e]=n.filter(n=>n.name!==l)}),i.forEach(this.groupDiskSelections,(n,e)=>{this.groupDiskSelections[e]=n.filter(n=>n.name!==l)})}getDefaultBackstore(l){let n=this.default_backstore;const e=this.getImageById(l);return this.validFeatures(e,this.default_backstore)||this.backstores.forEach(l=>{l!==this.default_backstore&&this.validFeatures(e,l)&&(n=l)}),n}isLunIdInUse(l,n){const e=this.disks.value.filter(l=>l!==n);return this.getLunIds(e).includes(l)}getLunIds(l){return i.map(l,l=>this.imagesSettings[l].lun)}nextLunId(l){const n=this.disks.value.filter(n=>n!==l),e=this.getLunIds(n);let t=0;for(;e.includes(t);)t++;return t}getWwns(l){return i.map(l,l=>this.imagesSettings[l].wwn).filter(l=>i.isString(l)&&""!==l)}onImageSelection(l){const n=l.option;if(n.selected){if(this.imagesSettings[n.name])this.isLunIdInUse(this.imagesSettings[n.name].lun,n.name)&&(this.imagesSettings[n.name].lun=this.nextLunId(n.name));else{const l=this.getDefaultBackstore(n.name);this.imagesSettings[n.name]={backstore:l,lun:this.nextLunId(n.name)},this.imagesSettings[n.name][l]={}}i.forEach(this.imagesInitiatorSelections,(l,e)=>{l.push(new a.a(!1,n.name,"")),this.imagesInitiatorSelections[e]=[...l]}),i.forEach(this.groupDiskSelections,(l,e)=>{l.push(new a.a(!1,n.name,"")),this.groupDiskSelections[e]=[...l]})}else this.removeImageRefs(n.name);this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1})}get initiators(){return this.targetForm.get("initiators")}addInitiator(){const l=new r.a({client_iqn:new t.i("",{validators:[t.B.required,d.a.custom("notUnique",l=>{const n=this.initiators.controls.reduce((function(l,n){return l.concat(n.value.client_iqn)}),[]);return n.indexOf(l)!==n.lastIndexOf(l)}),t.B.pattern(this.IQN_REGEX)]}),auth:new r.a({user:new t.i(""),password:new t.i(""),mutual_user:new t.i(""),mutual_password:new t.i("")}),luns:new t.i([]),cdIsInGroup:new t.i(!1)});this.setAuthValidator(l),this.initiators.push(l),i.forEach(this.groupMembersSelections,(l,n)=>{l.push(new a.a(!1,"","")),this.groupMembersSelections[n]=[...l]});const n=i.map(this.targetForm.getValue("disks"),l=>new a.a(!1,l,""));return this.imagesInitiatorSelections.push(n),l}setAuthValidator(l){d.a.validateIf(l.get("user"),()=>l.getValue("password")||l.getValue("mutual_user")||l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[l.get("password"),l.get("mutual_user"),l.get("mutual_password")]),d.a.validateIf(l.get("password"),()=>l.getValue("user")||l.getValue("mutual_user")||l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[l.get("user"),l.get("mutual_user"),l.get("mutual_password")]),d.a.validateIf(l.get("mutual_user"),()=>l.getValue("mutual_password"),[t.B.required],[t.B.pattern(this.USER_REGEX)],[l.get("user"),l.get("password"),l.get("mutual_password")]),d.a.validateIf(l.get("mutual_password"),()=>l.getValue("mutual_user"),[t.B.required],[t.B.pattern(this.PASSWORD_REGEX)],[l.get("user"),l.get("password"),l.get("mutual_user")])}removeInitiator(l){const n=this.initiators.value[l];this.initiators.removeAt(l),i.forEach(this.groupMembersSelections,(n,e)=>{n.splice(l,1),this.groupMembersSelections[e]=[...n]}),this.groups.controls.forEach(l=>{const e=l.value.members.filter(l=>l!==n.client_iqn);l.get("members").setValue(e)}),this.imagesInitiatorSelections.splice(l,1)}updatedInitiatorSelector(){this.initiators.controls.forEach(l=>{l.get("client_iqn").updateValueAndValidity({emitEvent:!1})}),i.forEach(this.groupMembersSelections,(l,n)=>{i.forEach(l,(l,n)=>{const e=l.name;l.name=this.initiators.controls[n].value.client_iqn,this.groups.controls.forEach(n=>{const t=n.value.members,i=t.indexOf(e);-1!==i&&(t[i]=l.name),n.get("members").setValue(t)})}),this.groupMembersSelections[n]=[...this.groupMembersSelections[n]]})}removeInitiatorImage(l,n,e,t){const i=l.getValue("luns");return i.splice(n,1),l.patchValue({luns:i}),this.imagesInitiatorSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),!1}get groups(){return this.targetForm.get("groups")}addGroup(){const l=new r.a({group_id:new t.i("",{validators:[t.B.required]}),members:new t.i([]),disks:new t.i([])});this.groups.push(l);const n=i.map(this.targetForm.getValue("disks"),l=>new a.a(!1,l,""));this.groupDiskSelections.push(n);const e=i.map(this.initiators.value,l=>new a.a(!1,l.client_iqn,"",!l.cdIsInGroup));return this.groupMembersSelections.push(e),l}removeGroup(l){this.groups.removeAt(l),this.groupDiskSelections.splice(l,1)}onGroupMemberSelection(l){const n=l.option;let e;this.initiators.controls.forEach((l,t)=>{l.value.client_iqn===n.name&&(l.patchValue({luns:[]}),l.get("cdIsInGroup").setValue(n.selected),e=t)}),i.forEach(this.groupMembersSelections,l=>{l[e].enabled=!n.selected})}removeGroupInitiator(l,n,e){const t=l.getValue("members")[n];l.getValue("members").splice(n,1),this.groupMembersSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),this.groupMembersSelections[e]=[...this.groupMembersSelections[e]],this.onGroupMemberSelection({option:new a.a(!1,t,"")})}removeGroupDisk(l,n,e){const t=l.getValue("disks")[n];l.getValue("disks").splice(n,1),this.groupDiskSelections[e].forEach(l=>{l.name===t&&(l.selected=!1)}),this.groupDiskSelections[e]=[...this.groupDiskSelections[e]]}submit(){const l=i.cloneDeep(this.targetForm.value),n={target_iqn:this.targetForm.getValue("target_iqn"),target_controls:this.targetForm.getValue("target_controls"),acl_enabled:this.targetForm.getValue("acl_enabled"),portals:[],disks:[],clients:[],groups:[]};if(this.cephIscsiConfigVersion>10){const l=this.targetForm.get("auth");l.getValue("user")||l.get("user").setValue(""),l.getValue("password")||l.get("password").setValue(""),l.getValue("mutual_user")||l.get("mutual_user").setValue(""),l.getValue("mutual_password")||l.get("mutual_password").setValue("");const e=this.targetForm.getValue("acl_enabled");n.auth={user:e?"":l.getValue("user"),password:e?"":l.getValue("password"),mutual_user:e?"":l.getValue("mutual_user"),mutual_password:e?"":l.getValue("mutual_password")}}let e;l.disks.forEach(l=>{const e=l.split("/"),t=this.imagesSettings[l].backstore;n.disks.push({pool:e[0],image:e[1],backstore:t,controls:this.imagesSettings[l][t],lun:this.imagesSettings[l].lun,wwn:this.imagesSettings[l].wwn})}),l.portals.forEach(l=>{const e=l.indexOf(":");n.portals.push({host:l.substring(0,e),ip:l.substring(e+1)})}),n.acl_enabled&&(l.initiators.forEach(l=>{l.auth.user||(l.auth.user=""),l.auth.password||(l.auth.password=""),l.auth.mutual_user||(l.auth.mutual_user=""),l.auth.mutual_password||(l.auth.mutual_password=""),delete l.cdIsInGroup;const n=[];l.luns.forEach(l=>{const e=l.split("/");n.push({pool:e[0],image:e[1]})}),l.luns=n}),n.clients=l.initiators),n.acl_enabled&&(l.groups.forEach(l=>{const n=[];l.disks.forEach(l=>{const e=l.split("/");n.push({pool:e[0],image:e[1]})}),l.disks=n}),n.groups=l.groups),this.isEdit?(n.new_target_iqn=n.target_iqn,n.target_iqn=this.target_iqn,e=this.taskWrapper.wrapTaskAroundCall({task:new c.a("iscsi/target/edit",{target_iqn:n.target_iqn}),call:this.iscsiService.updateTarget(this.target_iqn,n)})):e=this.taskWrapper.wrapTaskAroundCall({task:new c.a("iscsi/target/create",{target_iqn:n.target_iqn}),call:this.iscsiService.createTarget(n)}),e.subscribe(void 0,()=>{this.targetForm.setErrors({cdSubmitButton:!0})},()=>this.router.navigate(["/block/iscsi/targets"]))}targetSettingsModal(){const l={target_controls:this.targetForm.get("target_controls"),target_default_controls:this.target_default_controls,target_controls_limits:this.target_controls_limits};this.modalRef=this.modalService.show(p.a,{initialState:l})}imageSettingsModal(l){const n={imagesSettings:this.imagesSettings,image:l,api_version:this.api_version,disk_default_controls:this.disk_default_controls,disk_controls_limits:this.disk_controls_limits,backstores:this.getValidBackstores(this.getImageById(l)),control:this.targetForm.get("disks")};this.modalRef=this.modalService.show(m.a,{initialState:n})}validFeatures(l,n){const e=l.features,t=this.required_rbd_features[n];return(e&t)===t&&0==(e&this.unsupported_rbd_features[n])}getImageById(l){return this.imagesAll.find(n=>l===`${n.pool_name}/${n.name}`)}getValidBackstores(l){return this.backstores.filter(n=>this.validFeatures(l,n))}}},jMP8:function(l,n,e){"use strict";e.d(n,"a",(function(){return i}));var t=e("s7LF");e("QFaf");class i{ngOnInit(){const l=[];"min"in this.limits&&l.push(t.B.min(this.limits.min)),"max"in this.limits&&l.push(t.B.max(this.limits.max)),this.settingsForm.get(this.setting).setValidators(l)}}},"k/xb":function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e.d(n,"b",(function(){return S})),e.d(n,"c",(function(){return u})),e.d(n,"d",(function(){return s})),e.d(n,"j",(function(){return a})),e.d(n,"k",(function(){return o})),e.d(n,"l",(function(){return r})),e.d(n,"m",(function(){return d})),e.d(n,"n",(function(){return c})),e.d(n,"o",(function(){return m})),e.d(n,"p",(function(){return p})),e.d(n,"q",(function(){return h})),e.d(n,"e",(function(){return g})),e.d(n,"f",(function(){return f})),e.d(n,"g",(function(){return v})),e.d(n,"h",(function(){return b})),e.d(n,"i",(function(){return C}));var t=e("sne2");e("Vhfg"),e("gr3l"),e("e/kN"),e("roDX"),e("cxJu"),e("MyVl"),e("5GyT"),e("Z5tW"),e("WkyA"),e("chpi");class i{}const u={breadcrumbs:"Images"},s={breadcrumbs:"Namespaces"},a={breadcrumbs:"Trash"},o={breadcrumbs:"Overall Performance"},r={breadcrumbs:t.a.CREATE},d={breadcrumbs:t.a.EDIT},c={breadcrumbs:t.a.CLONE},m={breadcrumbs:t.a.COPY},p={breadcrumbs:t.a.COPY},h={breadcrumbs:"Mirroring"},g={breadcrumbs:"iSCSI"},f={breadcrumbs:"Overview"},v={breadcrumbs:"Targets"},b={breadcrumbs:t.a.CREATE},C={breadcrumbs:t.a.EDIT};class S{}},kccj:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{}},l7Jr:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("mXUL"),u=e("+gVj"),s=e("eF8U"),a=e("jMP8"),o=e("EEJc"),r=e("ajRT"),d=e("s7LF"),c=e("SVse"),m=e("gp3X"),p=e("sb0X"),h=e("KVJa"),g=e("Z21x"),f=e("sne2"),v=e("a6qe"),b=e("LqlI"),C=e("my5R");e.d(n,"a",(function(){return w}));var S=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](1,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"cd-iscsi-setting",[],null,null,null,s.b,s.a)),t["ɵdid"](6,114688,null,0,a.a,[],{settingsForm:[0,"settingsForm"],formDir:[1,"formDir"],setting:[2,"setting"],limits:[3,"limits"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,6,0,e.settingsForm,t["ɵnov"](n.parent,7),n.context.$implicit.key,e.getTargetControlLimits(n.context.$implicit.key))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess)}))}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,23,"cd-modal",[],null,null,null,o.c,o.b)),t["ɵdid"](1,49152,null,0,r.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Advanced Settings"])),(l()(),t["ɵeld"](4,0,null,1,19,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,18,"form",[["name","settingsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,d.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,d.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,d.d,null,[d.l]),t["ɵdid"](9,16384,null,0,d.s,[[4,d.d]],null,null),t["ɵdid"](10,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,5,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,1,"p",[["class","alert-warning"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Changing these parameters from their default values is usually not necessary."])),(l()(),t["ɵand"](16777216,null,null,2,null,_)),t["ɵdid"](15,278528,null,0,c.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),t["ɵpid"](0,c.KeyValuePipe,[t.KeyValueDiffers]),(l()(),t["ɵeld"](17,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](18,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](19,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.save()&&t),t}),m.b,m.a)),t["ɵdid"](20,114688,null,0,p.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Confirm"])),(l()(),t["ɵeld"](22,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,h.b,h.a)),t["ɵdid"](23,49152,null,0,g.a,[c.Location,f.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.settingsForm),l(n,10,0,e.settingsForm),l(n,15,0,t["ɵunv"](n,15,0,t["ɵnov"](n,16).transform(e.settingsForm.controls))),l(n,20,0,e.settingsForm),l(n,23,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending)}))}function y(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-iqn-settings-modal",[],null,null,null,R,S)),t["ɵdid"](1,114688,null,0,v.a,[b.a,C.a],null,null)],(function(l,n){l(n,1,0)}),null)}var w=t["ɵccf"]("cd-iscsi-target-iqn-settings-modal",v.a,y,{},{},[])},lArG:function(l,n,e){"use strict";e.d(n,"a",(function(){return t}));class t{}},"lz+O":function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("ANnk"),s=e("f/UV"),a=e("aexS"),o=e("+gVj"),r=e("SVse"),d=e("EEJc"),c=e("ajRT"),m=e("mXUL"),p=e("gp3X"),h=e("sb0X"),g=e("KVJa"),f=e("Z21x"),v=e("sne2"),b=e("WxU5"),C=e("F83c"),S=e("LqlI"),_=e("2EZI"),R=e("Ekvf"),y=e("kn/O");e.d(n,"a",(function(){return V}));var w=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","poolName"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,1)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,1)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,1)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.e,[t.Renderer2,t.ElementRef,[2,i.b]],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.e]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"poolName"),l(n,7,0,"poolName")}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","poolName"],["id","poolName"],["name","poolName"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,1).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,1).onTouched()&&i),i}),null,null)),t["ɵdid"](1,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](3,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](6,4210688,null,0,u.a,[[2,s.a],a.a,t.ElementRef],null,null),t["ɵdid"](7,16384,null,0,o.h,[[3,i.d],o.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](8,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),t["ɵdid"](9,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](10,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](-1,null,["All"])),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](13,278528,null,0,r.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"poolName"),l(n,7,0,"poolName"),l(n,9,0,""),l(n,10,0,""),l(n,13,0,e.pools)}),(function(l,n){l(n,0,0,t["ɵnov"](n,5).ngClassUntouched,t["ɵnov"](n,5).ngClassTouched,t["ɵnov"](n,5).ngClassPristine,t["ɵnov"](n,5).ngClassDirty,t["ɵnov"](n,5).ngClassValid,t["ɵnov"](n,5).ngClassInvalid,t["ɵnov"](n,5).ngClassPending,t["ɵnov"](n,7).validClass,t["ɵnov"](n,7).invalidClass)}))}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,41,"cd-modal",[],null,null,null,d.c,d.b)),t["ɵdid"](1,49152,null,0,c.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Purge Trash"])),(l()(),t["ɵeld"](4,0,null,1,37,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,36,"form",[["class","form"],["name","purgeForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,23,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,12,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To purge, select one or"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](16,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["All"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](19,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["pools and click"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](22,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Purge Trash"])),(l()(),t["ɵted"](-1,null,[".  "])),(l()(),t["ɵeld"](25,0,null,null,9,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,m.b,m.a)),t["ɵdid"](26,1163264,null,2,o.c,[t.ElementRef,o.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](29,0,null,0,1,"label",[["class","col-form-label mx-auto"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Pool:"])),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](32,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,E)),t["ɵdid"](34,16384,null,0,r.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](35,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](36,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](37,0,null,null,2,"cd-submit-button",[["id","purgeFormButton"]],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.purge()&&t),t}),p.b,p.a)),t["ɵdid"](38,114688,null,0,h.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Purge Trash"])),(l()(),t["ɵeld"](40,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,g.b,g.a)),t["ɵdid"](41,49152,null,0,f.a,[r.Location,v.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.purgeForm),l(n,10,0,e.purgeForm),l(n,26,0),l(n,32,0,!e.poolPermission.read),l(n,34,0,e.poolPermission.read),l(n,38,0,e.purgeForm),l(n,41,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,25,0,t["ɵnov"](n,26).hasErrors,t["ɵnov"](n,26).hasSuccess)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-rbd-trash-purge-modal",[],null,null,null,N,w)),t["ɵdid"](1,114688,null,0,b.a,[a.a,C.a,S.a,_.a,R.a,y.a],null,null)],(function(l,n){l(n,1,0)}),null)}var V=t["ɵccf"]("cd-rbd-trash-purge-modal",b.a,F,{},{},[])},my5R:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("mrSG"),i=e("IheW"),u=e("xTzq"),s=e("8Y7J"),a=e("pL04");let o=(()=>{let l=class{constructor(l){this.http=l}listTargets(){return this.http.get("api/iscsi/target")}getTarget(l){return this.http.get("api/iscsi/target/"+l)}updateTarget(l,n){return this.http.put("api/iscsi/target/"+l,n,{observe:"response"})}status(){return this.http.get("ui-api/iscsi/status")}settings(){return this.http.get("ui-api/iscsi/settings")}version(){return this.http.get("ui-api/iscsi/version")}portals(){return this.http.get("ui-api/iscsi/portals")}createTarget(l){return this.http.post("api/iscsi/target",l,{observe:"response"})}deleteTarget(l){return this.http.delete("api/iscsi/target/"+l,{observe:"response"})}getDiscovery(){return this.http.get("api/iscsi/discoveryauth")}updateDiscovery(l){return this.http.put("api/iscsi/discoveryauth",l)}overview(){return this.http.get("ui-api/iscsi/overview")}};return l.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new l(s["ɵɵinject"](i.c))},token:l,providedIn:a.a}),l=t.__decorate([u.a,t.__metadata("design:paramtypes",[i.c])],l),l})()},nP0W:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("s7LF"),u=e("EEJc"),s=e("ajRT"),a=e("+gVj"),o=e("mXUL"),r=e("ANnk"),d=e("f/UV"),c=e("aexS"),m=e("SVse"),p=e("gp3X"),h=e("sb0X"),g=e("KVJa"),f=e("Z21x"),v=e("sne2"),b=e("aa9H"),C=e("LqlI"),S=e("GiVz"),_=e("XED3"),R=e("kn/O");e.d(n,"a",(function(){return N}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,i.v,[t.ElementRef,t.Renderer2,[2,i.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,i.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.id),l(n,2,0,n.context.$implicit.id)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Peer clusters must be removed prior to disabling mirror."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,46,"cd-modal",[],null,null,null,u.c,u.b)),t["ɵdid"](1,49152,null,0,s.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit pool mirror mode"])),(l()(),t["ɵeld"](4,0,null,1,42,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,41,"form",[["class","form"],["name","editModeForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,i.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,i.d,null,[i.l]),t["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,28,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,8,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,7,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["To edit the mirror mode for pool  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](16,null,["",""])),(l()(),t["ɵted"](-1,null,[", select a new mode from the list and click  "])),(l()(),t["ɵeld"](18,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Update"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](21,0,null,null,18,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](22,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](25,0,null,0,2,"label",[["class","col-form-label"],["for","mirrorMode"]],null,null,null,null,null)),(l()(),t["ɵeld"](26,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Mode"])),(l()(),t["ɵeld"](28,0,null,0,9,"select",[["class","form-control custom-select"],["formControlName","mirrorMode"],["id","mirrorMode"],["name","mirrorMode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,30).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,30).onTouched()&&i),i}),null,null)),t["ɵdid"](29,4210688,null,0,r.a,[[2,d.a],c.a,t.ElementRef],null,null),t["ɵdid"](30,16384,null,0,i.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,i.p,(function(l){return[l]}),[i.A]),t["ɵdid"](32,671744,[[1,4]],0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,i.q,null,[i.j]),t["ɵdid"](34,16384,null,0,i.r,[[4,i.q]],null,null),t["ɵdid"](35,16384,null,0,a.h,[[3,i.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,w)),t["ɵdid"](37,278528,null,0,m.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,0,1,null,k)),t["ɵdid"](39,16384,null,0,m.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](40,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](41,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](42,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),p.b,p.a)),t["ɵdid"](43,114688,null,0,h.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Update"])),(l()(),t["ɵeld"](45,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,g.b,g.a)),t["ɵdid"](46,49152,null,0,f.a,[m.Location,v.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.editModeForm),l(n,10,0,e.editModeForm),l(n,22,0),l(n,32,0,"mirrorMode"),l(n,35,0,"mirrorMode"),l(n,37,0,e.mirrorModes),l(n,39,0,e.editModeForm.showError("mirrorMode",t["ɵnov"](n,7),"cannotDisable")),l(n,43,0,e.editModeForm),l(n,46,0,"Cancel",e.modalRef.hide)}),(function(l,n){var e=n.component;l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,16,0,e.poolName),l(n,21,0,t["ɵnov"](n,22).hasErrors,t["ɵnov"](n,22).hasSuccess),l(n,28,0,t["ɵnov"](n,34).ngClassUntouched,t["ɵnov"](n,34).ngClassTouched,t["ɵnov"](n,34).ngClassPristine,t["ɵnov"](n,34).ngClassDirty,t["ɵnov"](n,34).ngClassValid,t["ɵnov"](n,34).ngClassInvalid,t["ɵnov"](n,34).ngClassPending,t["ɵnov"](n,35).validClass,t["ɵnov"](n,35).invalidClass)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-pool-edit-mode-modal",[],null,null,null,I,y)),t["ɵdid"](1,245760,null,0,b.a,[C.a,S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var N=t["ɵccf"]("cd-pool-edit-mode-modal",b.a,E,{},{},[])},nhAp:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("mXUL"),u=e("+gVj"),s=e("s7LF"),a=e("ANnk"),o=e("f/UV"),r=e("aexS"),d=e("SVse"),c=e("eF8U"),m=e("jMP8"),p=e("uYzU"),h=e("EEJc"),g=e("ajRT"),f=e("gp3X"),v=e("sb0X"),b=e("KVJa"),C=e("Z21x"),S=e("sne2"),_=e("Z4cD"),R=e("LqlI"),y=e("my5R");e.d(n,"a",(function(){return P}));var w=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["This field is required."]))],null,null)}function I(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,35,"span",[],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Identifier"])),(l()(),t["ɵeld"](3,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](4,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](7,0,null,0,13,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](8,0,null,null,1,"label",[["class","col-form-label required"],["for","lun"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["lun"])),(l()(),t["ɵeld"](10,0,null,null,8,"input",[["class","form-control"],["formControlName","lun"],["id","lun"],["name","lun"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,11)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,11).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,11)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,11)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==t["ɵnov"](l,12).onChange(e.target.value)&&i),"input"===n&&(i=!1!==t["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,12).onTouched()&&i),i}),null,null)),t["ɵdid"](11,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵdid"](12,16384,null,0,s.w,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,s.p,(function(l,n){return[l,n]}),[s.e,s.w]),t["ɵdid"](14,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](16,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](17,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](18,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,k)),t["ɵdid"](20,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](21,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](22,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,3,{FormControlNames:1}),t["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),t["ɵeld"](25,0,null,0,10,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](26,0,null,null,1,"label",[["class","col-form-label"],["for","wwn"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["wwn"])),(l()(),t["ɵeld"](28,0,null,null,7,"input",[["class","form-control"],["formControlName","wwn"],["id","wwn"],["name","wwn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,29)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,29).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,29)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,29)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](29,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](31,671744,[[3,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](33,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](34,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](35,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){var e=n.component;l(n,4,0),l(n,14,0,"lun"),l(n,18,0,"lun"),l(n,20,0,e.settingsForm.showError("lun",t["ɵnov"](n.parent,12),"required")),l(n,22,0),l(n,31,0,"wwn"),l(n,35,0,"wwn")}),(function(l,n){l(n,3,0,t["ɵnov"](n,4).hasErrors,t["ɵnov"](n,4).hasSuccess),l(n,10,0,t["ɵnov"](n,16).ngClassUntouched,t["ɵnov"](n,16).ngClassTouched,t["ɵnov"](n,16).ngClassPristine,t["ɵnov"](n,16).ngClassDirty,t["ɵnov"](n,16).ngClassValid,t["ɵnov"](n,16).ngClassInvalid,t["ɵnov"](n,16).ngClassPending,t["ɵnov"](n,18).validClass,t["ɵnov"](n,18).invalidClass),l(n,21,0,t["ɵnov"](n,22).hasErrors,t["ɵnov"](n,22).hasSuccess),l(n,28,0,t["ɵnov"](n,33).ngClassUntouched,t["ɵnov"](n,33).ngClassTouched,t["ɵnov"](n,33).ngClassPristine,t["ɵnov"](n,33).ngClassDirty,t["ɵnov"](n,33).ngClassValid,t["ɵnov"](n,33).ngClassInvalid,t["ɵnov"](n,33).ngClassPending,t["ɵnov"](n,35).validClass,t["ɵnov"](n,35).invalidClass)}))}function E(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"option",[],null,null,null,null,null)),t["ɵdid"](1,147456,null,0,s.v,[t.ElementRef,t.Renderer2,[2,s.A]],{value:[0,"value"]},null),t["ɵdid"](2,147456,null,0,s.F,[t.ElementRef,t.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),t["ɵted"](3,null,["",""])),t["ɵppd"](4,1)],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){var e=t["ɵunv"](n,3,0,l(n,4,0,t["ɵnov"](n.parent,0),n.context.$implicit));l(n,3,0,e)}))}function N(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,6,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](1,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,7,{FormControlNames:1}),t["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),t["ɵeld"](4,0,null,0,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"cd-iscsi-setting",[],null,null,null,c.b,c.a)),t["ɵdid"](6,114688,null,0,m.a,[],{settingsForm:[0,"settingsForm"],formDir:[1,"formDir"],setting:[2,"setting"],limits:[3,"limits"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,6,0,e.settingsForm,t["ɵnov"](n.parent.parent.parent,12),n.context.$implicit.key,e.getDiskControlLimits(n.parent.parent.context.$implicit,n.context.$implicit.key))}),(function(l,n){l(n,0,0,t["ɵnov"](n,1).hasErrors,t["ɵnov"](n,1).hasSuccess)}))}function F(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,2,null,N)),t["ɵdid"](2,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),t["ɵpid"](0,d.KeyValuePipe,[t.KeyValueDiffers]),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,2,0,t["ɵunv"](n,2,0,t["ɵnov"](n,3).transform(e.disk_default_controls[n.parent.context.$implicit])))}),null)}function V(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(l()(),t["ɵand"](16777216,null,null,1,null,F)),t["ɵdid"](2,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,2,0,n.component.settingsForm.value.backstore===n.context.$implicit)}),null)}function T(l){return t["ɵvid"](0,[t["ɵpid"](0,p.a,[]),(l()(),t["ɵeld"](1,0,null,null,47,"cd-modal",[],null,null,null,h.c,h.b)),t["ɵdid"](2,49152,null,0,g.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](3,0,null,0,5,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Configure"])),(l()(),t["ɵted"](-1,null,["  "])),(l()(),t["ɵeld"](7,0,null,null,1,"small",[],null,null,null,null,null)),(l()(),t["ɵted"](8,null,["",""])),(l()(),t["ɵeld"](9,0,null,1,39,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](10,0,null,null,38,"form",[["class","form"],["name","settingsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,12).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,12).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,15).onSubmit()&&i),i}),null,null)),t["ɵdid"](11,16384,null,0,s.G,[],null,null),t["ɵdid"](12,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](14,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](15,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](16,0,null,null,25,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](17,0,null,null,1,"p",[["class","alert-warning"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Changing these parameters from their default values is usually not necessary."])),(l()(),t["ɵand"](16777216,null,null,1,null,I)),t["ɵdid"](20,16384,null,0,d.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵeld"](21,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Settings"])),(l()(),t["ɵeld"](23,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,i.b,i.a)),t["ɵdid"](24,1163264,null,2,u.c,[t.ElementRef,u.g],null,null),t["ɵqud"](603979776,5,{FormControlNames:1}),t["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),t["ɵeld"](27,0,null,0,12,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),t["ɵeld"](28,0,null,null,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Backstore"])),(l()(),t["ɵeld"](30,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","backstore"],["id","backstore"],["name","backstore"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==t["ɵnov"](l,31).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,31).onTouched()&&i),i}),null,null)),t["ɵdid"](31,16384,null,0,s.A,[t.Renderer2,t.ElementRef],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.A]),t["ɵdid"](33,671744,[[5,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](35,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](36,4210688,null,0,a.a,[[2,o.a],r.a,t.ElementRef],null,null),t["ɵdid"](37,16384,null,0,u.h,[[3,s.d],u.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,E)),t["ɵdid"](39,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,V)),t["ɵdid"](41,278528,null,0,d.NgForOf,[t.ViewContainerRef,t.TemplateRef,t.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),t["ɵeld"](42,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](43,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](44,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.save()&&t),t}),f.b,f.a)),t["ɵdid"](45,114688,null,0,v.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Confirm"])),(l()(),t["ɵeld"](47,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,b.b,b.a)),t["ɵdid"](48,49152,null,0,C.a,[d.Location,S.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,2,0,e.modalRef),l(n,12,0,e.settingsForm),l(n,15,0,e.settingsForm),l(n,20,0,e.api_version>=1),l(n,24,0),l(n,33,0,"backstore"),l(n,37,0,"backstore"),l(n,39,0,e.backstores),l(n,41,0,e.backstores),l(n,45,0,e.settingsForm),l(n,48,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,8,0,n.component.image),l(n,10,0,t["ɵnov"](n,14).ngClassUntouched,t["ɵnov"](n,14).ngClassTouched,t["ɵnov"](n,14).ngClassPristine,t["ɵnov"](n,14).ngClassDirty,t["ɵnov"](n,14).ngClassValid,t["ɵnov"](n,14).ngClassInvalid,t["ɵnov"](n,14).ngClassPending),l(n,23,0,t["ɵnov"](n,24).hasErrors,t["ɵnov"](n,24).hasSuccess),l(n,30,0,t["ɵnov"](n,35).ngClassUntouched,t["ɵnov"](n,35).ngClassTouched,t["ɵnov"](n,35).ngClassPristine,t["ɵnov"](n,35).ngClassDirty,t["ɵnov"](n,35).ngClassValid,t["ɵnov"](n,35).ngClassInvalid,t["ɵnov"](n,35).ngClassPending,t["ɵnov"](n,37).validClass,t["ɵnov"](n,37).invalidClass)}))}function D(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-image-settings-modal",[],null,null,null,T,w)),t["ɵdid"](1,114688,null,0,_.a,[R.a,y.a],null,null)],(function(l,n){l(n,1,0)}),null)}var P=t["ɵccf"]("cd-iscsi-target-image-settings-modal",_.a,D,{},{},[])},o8EM:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("PhyI"),i=e("8Y7J"),u=e("GiVz");let s=(()=>{class l{constructor(l){this.i18n=l,this.sections=[{heading:this.i18n("Quality of Service"),class:"quality-of-service",options:[{name:"rbd_qos_bps_limit",displayName:this.i18n("BPS Limit"),description:this.i18n("The desired limit of IO bytes per second."),type:t.b.bps},{name:"rbd_qos_iops_limit",displayName:this.i18n("IOPS Limit"),description:this.i18n("The desired limit of IO operations per second."),type:t.b.iops},{name:"rbd_qos_read_bps_limit",displayName:this.i18n("Read BPS Limit"),description:this.i18n("The desired limit of read bytes per second."),type:t.b.bps},{name:"rbd_qos_read_iops_limit",displayName:this.i18n("Read IOPS Limit"),description:this.i18n("The desired limit of read operations per second."),type:t.b.iops},{name:"rbd_qos_write_bps_limit",displayName:this.i18n("Write BPS Limit"),description:this.i18n("The desired limit of write bytes per second."),type:t.b.bps},{name:"rbd_qos_write_iops_limit",displayName:this.i18n("Write IOPS Limit"),description:this.i18n("The desired limit of write operations per second."),type:t.b.iops},{name:"rbd_qos_bps_burst",displayName:this.i18n("BPS Burst"),description:this.i18n("The desired burst limit of IO bytes."),type:t.b.bps},{name:"rbd_qos_iops_burst",displayName:this.i18n("IOPS Burst"),description:this.i18n("The desired burst limit of IO operations."),type:t.b.iops},{name:"rbd_qos_read_bps_burst",displayName:this.i18n("Read BPS Burst"),description:this.i18n("The desired burst limit of read bytes."),type:t.b.bps},{name:"rbd_qos_read_iops_burst",displayName:this.i18n("Read IOPS Burst"),description:this.i18n("The desired burst limit of read operations."),type:t.b.iops},{name:"rbd_qos_write_bps_burst",displayName:this.i18n("Write BPS Burst"),description:this.i18n("The desired burst limit of write bytes."),type:t.b.bps},{name:"rbd_qos_write_iops_burst",displayName:this.i18n("Write IOPS Burst"),description:this.i18n("The desired burst limit of write operations."),type:t.b.iops}]}]}static getOptionsFromSections(l){return l.map(l=>l.options).reduce((l,n)=>l.concat(n))}filterConfigOptionsByName(n){return l.getOptionsFromSections(this.sections).filter(l=>l.name===n)}getOptionValueByName(l,n,e=""){const t=this.filterConfigOptionsByName(l);return 1===t.length?t.pop()[n]:e}getWritableSections(){return this.sections.map(l=>(l.options=l.options.filter(l=>!l.readOnly),l))}getOptionFields(){return l.getOptionsFromSections(this.sections)}getWritableOptionFields(){return l.getOptionsFromSections(this.getWritableSections())}getOptionByName(l){return this.filterConfigOptionsByName(l).pop()}getDisplayName(l){return this.getOptionValueByName(l,"displayName")}getDescription(l){return this.getOptionValueByName(l,"description")}}return l.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new l(i["ɵɵinject"](u.a))},token:l,providedIn:"root"}),l})()},puGn:function(l,n,e){"use strict";e.d(n,"a",(function(){return s}));var t=e("s7LF"),i=(e("XED3"),e("QFaf")),u=e("kvvV");e("kn/O");class s{constructor(l,n,e){this.modalRef=l,this.rbdMirroringService=n,this.taskWrapper=e,this.createForm()}createForm(){this.editSiteNameForm=new i.a({siteName:new t.i("",{})})}ngOnInit(){this.editSiteNameForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(l=>{this.editSiteNameForm.get("siteName").setValue(l.site_name)})}update(){this.taskWrapper.wrapTaskAroundCall({task:new u.a("rbd/mirroring/site_name/edit",{}),call:this.rbdMirroringService.setSiteName(this.editSiteNameForm.getValue("siteName"))}).subscribe(void 0,()=>this.editSiteNameForm.setErrors({cdSubmitButton:!0}),()=>{this.rbdMirroringService.refresh(),this.modalRef.hide()})}}},rFfW:function(l,n,e){"use strict";e.d(n,"a",(function(){return o}));var t=e("8Y7J"),i=e("s7LF"),u=e("oxzT"),s=e("QFaf"),a=e("PhyI");e("aXbf"),e("o8EM");class o{constructor(l,n){this.formatterService=l,this.rbdConfigurationService=n,this.changes=new t.EventEmitter,this.icons=u.a,this.ngDataReady=new t.EventEmitter,this.configurationType=a.b,this.sectionVisibility={}}ngOnInit(){const l=this.createConfigurationFormGroup();this.form.addControl("configuration",l),l.valueChanges.subscribe(()=>{this.changes.emit(this.getDirtyValues.bind(this))}),this.initializeData&&this.initializeData.subscribe(l=>{this.initialData=l.initialData;const n=l.sourceType;this.rbdConfigurationService.getWritableOptionFields().forEach(e=>{const t=l.initialData.filter(l=>l.name===e.name).pop();t&&t.source===n&&this.form.get("configuration."+e.name).setValue(t.value)}),this.ngDataReady.emit()}),this.rbdConfigurationService.getWritableSections().forEach(l=>this.sectionVisibility[l.class]=!1)}getDirtyValues(l=!1,n){if(l&&!n)throw new Error("ProgrammingError: If local values shall be included, a proper localFieldType argument has to be provided, too");const e={};return this.rbdConfigurationService.getWritableOptionFields().forEach(t=>{const i=this.form.get("configuration").get(t.name);this.initialData&&this.initialData[t.name]===i.value||(i.dirty||l&&i.source===n)&&(e[t.name]=null===i.value?i.value:t.type===a.b.bps?this.formatterService.toBytes(i.value):t.type===a.b.milliseconds?this.formatterService.toMilliseconds(i.value):t.type===a.b.iops?this.formatterService.toIops(i.value):i.value)}),e}createConfigurationFormGroup(){const l=new s.a({});return this.rbdConfigurationService.getWritableOptionFields().forEach(n=>{let e;if(n.type!==a.b.milliseconds&&n.type!==a.b.iops&&n.type!==a.b.bps)throw new Error(`Type ${n.type} is unknown, you may need to add it to RbdConfiguration class`);e=new i.i(0,i.B.min(0)),l.addControl(n.name,e)}),l}reset(l){const n=this.form.get("configuration").get(l);n.disabled?(n.setValue(n.previousValue||0),n.enable(),n.previousValue||n.markAsPristine()):(n.previousValue=n.value,n.setValue(null),n.markAsDirty(),n.disable())}isDisabled(l){return this.form.get("configuration").get(l).disabled}toggleSectionVisibility(l){this.sectionVisibility[l]=!this.sectionVisibility[l]}}},roDX:function(l,n,e){"use strict";e.d(n,"a",(function(){return i})),e("my5R");var t=e("x38r");e("o4+5"),e("uYzU");class i{constructor(l,n,e,t){this.iscsiService=l,this.dimlessPipe=n,this.iscsiBackstorePipe=e,this.i18n=t,this.gateways=[],this.images=[]}ngOnInit(){this.gatewaysColumns=[{name:this.i18n("Name"),prop:"name"},{name:this.i18n("State"),prop:"state",flexGrow:1,cellTransformation:t.a.badge,customTemplateConfig:{map:{up:{class:"badge-success"},down:{class:"badge-danger"}}}},{name:this.i18n("# Targets"),prop:"num_targets"},{name:this.i18n("# Sessions"),prop:"num_sessions"}],this.imagesColumns=[{name:this.i18n("Pool"),prop:"pool"},{name:this.i18n("Image"),prop:"image"},{name:this.i18n("Backstore"),prop:"backstore",pipe:this.iscsiBackstorePipe},{name:this.i18n("Read Bytes"),prop:"stats_history.rd_bytes",cellTemplate:this.iscsiSparklineTpl},{name:this.i18n("Write Bytes"),prop:"stats_history.wr_bytes",cellTemplate:this.iscsiSparklineTpl},{name:this.i18n("Read Ops"),prop:"stats.rd",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:this.i18n("Write Ops"),prop:"stats.wr",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:this.i18n("A/O Since"),prop:"optimized_since",cellTemplate:this.iscsiRelativeDateTpl}]}refresh(){this.iscsiService.overview().subscribe(l=>{this.gateways=l.gateways,this.images=l.images,this.images.map(l=>(l.stats_history&&(l.stats_history.rd_bytes=l.stats_history.rd_bytes.map(l=>l[1]),l.stats_history.wr_bytes=l.stats_history.wr_bytes.map(l=>l[1])),l.cdIsBinary=!0,l))})}}},u0yg:function(l,n,e){"use strict";e.d(n,"b",(function(){return t})),e.d(n,"a",(function(){return i}));class t{}var i=function(l){return l[l.V1=1]="V1",l[l.V2=2]="V2",l}({})},u2XS:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("SVse"),u=e("25BL"),s=e("uIqm"),a=e("LOMR"),o=e("MP8s"),r=e("fxL3"),d=e("gk6K"),c=e("3ris"),m=e("GiVz"),p=e("uYzU"),h=e("iExv");e.d(n,"b",(function(){return g})),e.d(n,"c",(function(){return _})),e.d(n,"a",(function(){return y}));var g=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function f(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""])),(l()(),t["ɵted"](-1,null,["   "])),(l()(),t["ɵeld"](4,0,null,null,6,"span",[["class","badge"]],null,null,null,null,null)),t["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[t.IterableDiffers,t.KeyValueDiffers,t.ElementRef,t.Renderer2]),t["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t["ɵpad"](7,1),t["ɵpad"](8,1),t["ɵpod"](9,{"badge-success":0,"badge-danger":1}),(l()(),t["ɵted"](10,null,[" "," "]))],(function(l,n){var e=l(n,9,0,l(n,7,0,"logged_in").includes(n.context.$implicit.data.status),l(n,8,0,"logged_out").includes(n.context.$implicit.data.status));l(n,6,0,"badge",e)}),(function(l,n){l(n,0,0,n.context.$implicit.data.cdIcon),l(n,2,0,n.context.$implicit.data.name),l(n,10,0,n.context.$implicit.data.status)}))}function v(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,4,"div",[["class","col-6 metadata"]],null,null,null,null,null)),(l()(),t["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](2,null,["",""])),(l()(),t["ɵeld"](3,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,u.b,u.a)),t["ɵdid"](4,2867200,[[2,4],["detailTable",4]],0,s.a,[t.NgZone,t.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],limit:[3,"limit"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.data,e.columns,"flex",0)}),(function(l,n){l(n,2,0,n.component.title)}))}function b(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function C(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),t["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function S(l){return t["ɵvid"](0,[(l()(),t["ɵand"](16777216,null,null,1,null,b)),t["ɵdid"](1,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](16777216,null,null,1,null,C)),t["ɵdid"](3,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,void 0===n.context.row.default||n.context.row.default===n.context.row.current),l(n,3,0,void 0!==n.context.row.default&&n.context.row.default!==n.context.row.current)}),null)}function _(l){return t["ɵvid"](0,[t["ɵqud"](402653184,1,{highlightTpl:0}),t["ɵqud"](671088640,2,{content:0}),t["ɵqud"](671088640,3,{tree:0}),(l()(),t["ɵeld"](3,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(l()(),t["ɵeld"](4,0,null,null,10,"div",[["class","col-6"]],null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["iSCSI Topology"])),(l()(),t["ɵeld"](7,0,null,null,7,"tree-root",[],null,[[null,"updateData"],["body","keydown"],["body","mousedown"]],(function(l,n,e){var i=!0,u=l.component;return"body:keydown"===n&&(i=!1!==t["ɵnov"](l,9).onKeydown(e)&&i),"body:mousedown"===n&&(i=!1!==t["ɵnov"](l,9).onMousedown(e)&&i),"updateData"===n&&(i=!1!==u.onUpdateData()&&i),i}),a.b,a.a)),t["ɵprd"](131584,null,o.a,o.a,[]),t["ɵdid"](9,573440,[[3,4],["tree",4]],4,r.a,[o.a,d.a],{nodes:[0,"nodes"],options:[1,"options"]},{updateData:"updateData"}),t["ɵqud"](603979776,4,{loadingTemplate:0}),t["ɵqud"](603979776,5,{treeNodeTemplate:0}),t["ɵqud"](603979776,6,{treeNodeWrapperTemplate:0}),t["ɵqud"](603979776,7,{treeNodeFullTemplate:0}),(l()(),t["ɵand"](0,[[5,2],["treeNodeTemplate",2]],null,0,null,f)),(l()(),t["ɵand"](16777216,null,null,1,null,v)),t["ɵdid"](16,16384,null,0,i.NgIf,[t.ViewContainerRef,t.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),t["ɵand"](0,[[1,2],["highlightTpl",2]],null,0,null,S))],(function(l,n){var e=n.component;l(n,9,0,e.nodes,e.treeOptions),l(n,16,0,e.data)}),null)}function R(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-iscsi-target-details",[],null,null,null,_,g)),t["ɵdid"](1,638976,null,0,c.a,[m.a,p.a,h.a],null,null)],(function(l,n){l(n,1,0)}),null)}var y=t["ɵccf"]("cd-iscsi-target-details",c.a,R,{selection:"selection",settings:"settings",cephIscsiConfigVersion:"cephIscsiConfigVersion"},{},[])},xvu0:function(l,n,e){"use strict";var t=e("8Y7J"),i=e("EEJc"),u=e("ajRT"),s=e("s7LF"),a=e("+gVj"),o=e("mXUL"),r=e("IZUe"),d=e("ANnk"),c=e("f/UV"),m=e("aexS"),p=e("gp3X"),h=e("sb0X"),g=e("KVJa"),f=e("Z21x"),v=e("SVse"),b=e("sne2"),C=e("puGn"),S=e("LqlI"),_=e("XED3"),R=e("kn/O");e.d(n,"a",(function(){return I}));var y=t["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function w(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,39,"cd-modal",[],null,null,null,i.c,i.b)),t["ɵdid"](1,49152,null,0,u.a,[],{modalRef:[0,"modalRef"]},null),(l()(),t["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit site name"])),(l()(),t["ɵeld"](4,0,null,1,35,null,null,null,null,null,null,null)),(l()(),t["ɵeld"](5,0,null,null,34,"form",[["class","form"],["name","editSiteNameForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==t["ɵnov"](l,7).onSubmit(e)&&i),"reset"===n&&(i=!1!==t["ɵnov"](l,7).onReset()&&i),"submit"===n&&(i=!1!==t["ɵnov"](l,10).onSubmit()&&i),i}),null,null)),t["ɵdid"](6,16384,null,0,s.G,[],null,null),t["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),t["ɵprd"](2048,null,s.d,null,[s.l]),t["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),t["ɵdid"](10,16384,null,0,a.d,[],{formGroup:[0,"formGroup"]},null),(l()(),t["ɵeld"](11,0,null,null,21,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),t["ɵeld"](12,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t["ɵeld"](13,0,null,null,4,null,null,null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Edit the site name and click  "])),(l()(),t["ɵeld"](15,0,null,null,1,"kbd",[],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Update"])),(l()(),t["ɵted"](-1,null,["."])),(l()(),t["ɵeld"](18,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,o.b,o.a)),t["ɵdid"](19,1163264,null,2,a.c,[t.ElementRef,a.g],null,null),t["ɵqud"](603979776,1,{FormControlNames:1}),t["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),t["ɵeld"](22,0,null,0,1,"label",[["class","col-form-label required"],["for","siteName"]],null,null,null,null,null)),(l()(),t["ɵted"](-1,null,["Site Name"])),(l()(),t["ɵeld"](24,0,null,0,8,"input",[["autofocus",""],["class","form-control"],["formControlName","siteName"],["id","siteName"],["name","siteName"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==t["ɵnov"](l,27)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==t["ɵnov"](l,27).onTouched()&&i),"compositionstart"===n&&(i=!1!==t["ɵnov"](l,27)._compositionStart()&&i),"compositionend"===n&&(i=!1!==t["ɵnov"](l,27)._compositionEnd(e.target.value)&&i),i}),null,null)),t["ɵdid"](25,4210688,null,0,r.a,[t.ElementRef],{autofocus:[0,"autofocus"]},null),t["ɵdid"](26,4210688,null,0,d.a,[[2,c.a],m.a,t.ElementRef],null,null),t["ɵdid"](27,16384,null,0,s.e,[t.Renderer2,t.ElementRef,[2,s.b]],null,null),t["ɵprd"](1024,null,s.p,(function(l){return[l]}),[s.e]),t["ɵdid"](29,671744,[[1,4]],0,s.j,[[3,s.d],[8,null],[8,null],[6,s.p],[2,s.E]],{name:[0,"name"]},null),t["ɵprd"](2048,null,s.q,null,[s.j]),t["ɵdid"](31,16384,null,0,s.r,[[4,s.q]],null,null),t["ɵdid"](32,16384,null,0,a.h,[[3,s.d],a.a],{formControlName:[0,"formControlName"]},null),(l()(),t["ɵeld"](33,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),t["ɵeld"](34,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),t["ɵeld"](35,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var t=!0;return"submitAction"===n&&(t=!1!==l.component.update()&&t),t}),p.b,p.a)),t["ɵdid"](36,114688,null,0,h.a,[t.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),t["ɵted"](-1,0,["Update"])),(l()(),t["ɵeld"](38,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,g.b,g.a)),t["ɵdid"](39,49152,null,0,f.a,[v.Location,b.b],{name:[0,"name"],back:[1,"back"]},null)],(function(l,n){var e=n.component;l(n,1,0,e.modalRef),l(n,7,0,e.editSiteNameForm),l(n,10,0,e.editSiteNameForm),l(n,19,0),l(n,25,0,""),l(n,29,0,"siteName"),l(n,32,0,"siteName"),l(n,36,0,e.editSiteNameForm),l(n,39,0,"Cancel",e.modalRef.hide)}),(function(l,n){l(n,5,0,t["ɵnov"](n,9).ngClassUntouched,t["ɵnov"](n,9).ngClassTouched,t["ɵnov"](n,9).ngClassPristine,t["ɵnov"](n,9).ngClassDirty,t["ɵnov"](n,9).ngClassValid,t["ɵnov"](n,9).ngClassInvalid,t["ɵnov"](n,9).ngClassPending),l(n,18,0,t["ɵnov"](n,19).hasErrors,t["ɵnov"](n,19).hasSuccess),l(n,24,0,t["ɵnov"](n,31).ngClassUntouched,t["ɵnov"](n,31).ngClassTouched,t["ɵnov"](n,31).ngClassPristine,t["ɵnov"](n,31).ngClassDirty,t["ɵnov"](n,31).ngClassValid,t["ɵnov"](n,31).ngClassInvalid,t["ɵnov"](n,31).ngClassPending,t["ɵnov"](n,32).validClass,t["ɵnov"](n,32).invalidClass)}))}function k(l){return t["ɵvid"](0,[(l()(),t["ɵeld"](0,0,null,null,1,"cd-edit-site-mode-modal",[],null,null,null,w,y)),t["ɵdid"](1,114688,null,0,C.a,[S.a,_.a,R.a],null,null)],(function(l,n){l(n,1,0)}),null)}var I=t["ɵccf"]("cd-edit-site-mode-modal",C.a,k,{},{},[])}}]);
\ No newline at end of file
index 434dcbc40e2e25110e9130c9bd7fb9ec7dc19c7f..687527f976ba8e621ec68054f4cfa8cf6dc989d2 100644 (file)
@@ -595,6 +595,30 @@ ngx-bootstrap/typeahead
 
 ngx-bootstrap/utils
 
+ngx-pipe-function
+MIT License
+
+Copyright (c) 2019 Artem Lanovyy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
 ngx-toastr
 MIT
 The MIT License (MIT)
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.3532f17ccbf4b268177b.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.3532f17ccbf4b268177b.js
new file mode 100644 (file)
index 0000000..a59c44c
--- /dev/null
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{J6Oi:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),a=u("k/xb"),t=u("MdoF"),o=u("ES0t"),d=u("Xg1U"),i=u("z5nN"),s=u("iutN"),r=u("pMnS"),c=u("EEJc"),p=u("PEr+"),m=u("a40w"),g=u("hfeG"),f=u("QUzE"),v=u("E7j4"),C=u("xvu0"),b=u("RIVN"),h=u("nP0W"),R=u("VBM6"),I=u("atuK"),N=u("JIi+"),E=u("0BYw"),w=u("3IYD"),T=u("I4Qz"),y=u("0rTx"),V=u("lz+O"),x=u("u2XS"),q=u("nhAp"),k=u("l7Jr"),_=u("bUo2"),D=u("SVse"),F=u("yT6U"),P=u("4DD9"),S=u("iExv"),A=u("GiVz"),O=u("85J/"),j=u("+0ag"),U=u("aXbf"),B=u("Fgil"),$=u("IzCI"),M=u("o4+5"),L=u("Dwqy"),z=u("uYzU"),G=u("FFMq"),K=u("E2fk"),Z=u("a0VL"),J=u("nSDx"),W=u("SB+Q"),Q=u("TYzs"),Y=u("BQkM"),X=u("dEH0"),H=u("G1/K"),ll=u("8xTl"),nl=u("TJUb"),ul=u("efK2"),el=u("s7LF"),al=u("CNMR"),tl=u("KOzp"),ol=u("2uy1"),dl=u("z/SZ"),il=u("38Bd"),sl=u("978R"),rl=u("LqlI"),cl=u("w9WL"),pl=u("FE24"),ml=u("aexS"),gl=u("Avrn"),fl=u("iInd"),vl=u("2ZVE"),Cl=u("ienR"),bl=u("gk6K"),hl=u("9Xeq"),Rl=u("hrfs"),Il=u("yGOH"),Nl=u("+gVj"),El=u("bxSN"),wl=u("WF9J"),Tl=u("V/fk"),yl=u("ChqD"),Vl=u("pL04"),xl=u("PCNd"),ql=u("kccj"),kl=u("yYhs"),_l=u("C6Ij"),Dl=u("AWcq"),Fl=u("pKUh");class Pl{constructor(l,n){this.authStorageService=l,this.router=n,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var Sl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Al(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/performance")&&e),e}),null,null)),e["ɵdid"](1,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){l(n,1,0,"Overall Performance","/block/rbd/performance"===n.component.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function Ol(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,Fl.b,Fl.a)),e["ɵdid"](1,180224,null,0,vl.e,[vl.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Images"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Namespaces"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/namespaces")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](6,0,null,0,1,"tab",[["heading","Trash"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/trash")&&e),e}),null,null)),e["ɵdid"](7,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵand"](16777216,null,0,1,null,Al)),e["ɵdid"](9,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Images","/block/rbd"===u.url),l(n,5,0,"Namespaces","/block/rbd/namespaces"===u.url),l(n,7,0,"Trash","/block/rbd/trash"===u.url),l(n,9,0,u.grafanaPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby),l(n,6,0,e["ɵnov"](n,7).id,e["ɵnov"](n,7).active,e["ɵnov"](n,7).addClass,e["ɵnov"](n,7).role,e["ɵnov"](n,7).ariaLabelledby)}))}var jl=u("25BL"),Ul=u("uIqm"),Bl=u("NUGo"),$l=u("S7zO"),Ml=u("JBea"),Ll=u("VTlA"),zl=u("ufoC"),Gl=u("mSOc"),Kl=u("EgGo"),Zl=u("5GyT"),Jl=u("F83c"),Wl=u("kn/O"),Ql=u("sne2"),Yl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Xl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,_l.b,_l.a)),e["ɵdid"](1,114688,null,0,Dl.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function Hl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,0,"div",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(l,n){l(n,0,0,"Only available for RBD images with <strong>fast-diff</strong> enabled")}))}function ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["/",""]))],null,(function(l,n){l(n,1,0,n.parent.parent.context.value.pool_namespace)}))}function nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,ln)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵted"](4,null,["/","@",""]))],(function(l,n){l(n,3,0,n.parent.context.value.pool_namespace)}),(function(l,n){l(n,1,0,n.parent.context.value.pool_name),l(n,4,0,n.parent.context.value.image_name,n.parent.context.value.snap_name)}))}function un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function en(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,nn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,un)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.value),l(n,3,0,!n.context.value)}),null)}function an(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,[" You are about to flatten "])),(l()(),e["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](2,null,["",""])),(l()(),e["ɵted"](-1,null,[". "])),(l()(),e["ɵeld"](4,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" All blocks will be copied from parent "])),(l()(),e["ɵeld"](7,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](8,null,["",""])),(l()(),e["ɵted"](-1,null,[" to child "])),(l()(),e["ɵeld"](10,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](11,null,["",""])),(l()(),e["ɵted"](-1,null,[".\n"]))],null,(function(l,n){l(n,2,0,n.context.$implicit.child),l(n,8,0,n.context.$implicit.parent),l(n,11,0,n.context.$implicit.child)}))}function tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function on(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The following snapshots are currently protected and will be removed:"])),(l()(),e["ɵeld"](3,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,tn)),e["ɵdid"](5,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.parent.parent.context.snapshots)}),null)}function dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"div",[["class","alert alert-warning"],["role","alert"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Deleting this image will also delete all its snapshots."])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,on)),e["ɵdid"](5,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,5,0,n.parent.context.snapshots.length>0)}),null)}function sn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,dn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.hasSnapshots)}),null)}function rn(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](671088640,2,{usageTpl:0}),e["ɵqud"](402653184,3,{parentTpl:0}),e["ɵqud"](671088640,4,{nameTpl:0}),e["ɵqud"](402653184,5,{flattenTpl:0}),e["ɵqud"](402653184,6,{deleteTpl:0}),(l()(),e["ɵeld"](6,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](7,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,Xl)),e["ɵdid"](9,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](10,0,null,null,5,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","unique_id"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"setExpandedRow"===n&&(e=!1!==a.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](11,2867200,[[1,4],["table",4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"],searchableObjects:[7,"searchableObjects"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](12,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](13,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](14,0,null,3,1,"cd-rbd-details",[["cdTableDetail",""]],null,null,null,N.c,N.b)),e["ɵdid"](15,573440,null,0,Ml.a,[],{selection:[0,"selection"]},null),(l()(),e["ɵand"](0,[["usageNotAvailableTooltipTpl",2]],null,0,null,Hl)),(l()(),e["ɵand"](0,[[3,2],["parentTpl",2]],null,0,null,en)),(l()(),e["ɵand"](0,[[5,2],["flattenTpl",2]],null,0,null,an)),(l()(),e["ɵand"](0,[[6,2],["deleteTpl",2]],null,0,null,sn))],(function(l,n){var u=n.component;l(n,7,0),l(n,9,0,u.viewCacheStatusList),l(n,11,0,u.images,u.columns,"flex",!0,"unique_id","true","single",!0),l(n,13,0,u.permission,u.selection,u.tableActions),l(n,15,0,u.expandedRow)}),null)}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"cd-rbd-list",[],null,null,null,rn,Yl)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵprd"](256,null,Kl.a,Zl.b,[]),e["ɵdid"](3,114688,null,0,Zl.a,[ml.a,Jl.a,B.a,M.a,rl.b,Wl.a,Ll.a,A.a,Kl.a,Ql.b],null,null)],(function(l,n){l(n,3,0)}),null)}var pn=e["ɵccf"]("cd-rbd-list",Zl.a,cn,{},{},[]),mn=u("Z5tW"),gn=u("Ekvf"),fn=u("9nlD"),vn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](1,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵeld"](2,0,null,null,4,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"fetchData"===n&&(e=!1!==a.refresh()&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](3,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),e["ɵeld"](4,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](6,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,3,0,u.namespaces,u.columns,"flex","id","true","single"),l(n,6,0,u.permission,u.selection,u.tableActions)}),null)}function bn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rbd-namespace-list",[],null,null,null,Cn,vn)),e["ɵprd"](135680,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,114688,null,0,mn.a,[ml.a,Jl.a,gn.a,rl.b,fn.a,A.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var hn=e["ɵccf"]("cd-rbd-namespace-list",mn.a,bn,{},{},[]),Rn=u("chpi"),In=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,_l.b,_l.a)),e["ɵdid"](1,114688,null,0,Dl.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function En(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"button",[["class","btn btn-light"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.purgeModal()&&e),e}),null,null)),(l()(),e["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](3,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](4,1),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Purge Trash"]))],(function(l,n){var u=l(n,4,0,n.component.icons.destroy);l(n,3,0,u)}),(function(l,n){l(n,0,0,n.component.disablePurgeBtn)}))}function wn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Expired at"]))],null,null)}function Tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Protected until"]))],null,null)}function yn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,wn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tn)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵted"](4,null,[" ","\n"])),e["ɵppd"](5,1)],(function(l,n){l(n,1,0,n.context.row.cdIsExpired),l(n,3,0,!n.context.row.cdIsExpired)}),(function(l,n){var u=e["ɵunv"](n,4,0,l(n,5,0,e["ɵnov"](n.parent,0),n.context.value));l(n,4,0,u)}))}function Vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"p",[["class","text-danger"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,3,"strong",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,null,null,null,null,null,null,null)),(l()(),e["ɵted"](3,null,["This image is protected until ","."])),e["ɵppd"](4,1)],null,(function(l,n){var u=e["ɵunv"](n,3,0,l(n,4,0,e["ɵnov"](n.parent.parent,0),n.parent.context.$implicit));l(n,3,0,u)}))}function xn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Vn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,!n.component.isExpired(n.context.$implicit))}),null)}function qn(l){return e["ɵvid"](0,[e["ɵpid"](0,Z.a,[D.DatePipe]),e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](402653184,2,{expiresTpl:0}),e["ɵqud"](402653184,3,{deleteTpl:0}),(l()(),e["ɵeld"](4,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](5,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,Nn)),e["ɵdid"](7,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](8,0,null,null,6,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(l,n,u){var e=!0;return"updateSelection"===n&&(e=!1!==l.component.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](9,2867200,[[1,4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),e["ɵeld"](10,0,null,1,4,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](12,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,En)),e["ɵdid"](14,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,[[2,2],["expiresTpl",2]],null,0,null,yn)),(l()(),e["ɵand"](0,[[3,2],["deleteTpl",2]],null,0,null,xn))],(function(l,n){var u=n.component;l(n,5,0),l(n,7,0,u.viewCacheStatusList),l(n,9,0,u.images,u.columns,"flex","id","true","single"),l(n,12,0,u.permission,u.selection,u.tableActions),l(n,14,0,u.permission.delete)}),null)}function kn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rbd-trash-list",[],null,null,null,qn,In)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,114688,null,0,Rn.a,[ml.a,Jl.a,rl.b,Z.a,Ll.a,Wl.a,A.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var _n=e["ɵccf"]("cd-rbd-trash-list",Rn.a,kn,{},{},[]),Dn=u("a278"),Fn=u("insk"),Pn=u("cUpR"),Sn=u("20UP"),An=u("WkyA"),On=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function jn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](1,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","41FrpeUiz"]],null,null,null,Dn.b,Dn.a)),e["ɵdid"](3,638976,null,0,Fn.a,[Pn.b,Sn.a,A.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0),l(n,3,0,"rbd-overview?","two","41FrpeUiz")}),null)}function Un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-performance",[],null,null,null,jn,On)),e["ɵdid"](1,49152,null,0,An.a,[],null,null)],null,null)}var Bn=e["ɵccf"]("cd-rbd-performance",An.a,Un,{},{},[]),$n=u("mXUL"),Mn=u("ANnk"),Ln=u("f/UV"),zn=u("4HWh"),Gn=u("p4Cf"),Kn=u("IZUe"),Zn=u("EmSq"),Jn=u("BH9v"),Wn=u("rFfW"),Qn=u("o8EM"),Yn=u("gp3X"),Xn=u("sb0X"),Hn=u("KVJa"),lu=u("Z21x"),nu=u("MyVl"),uu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,2,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," from"])),e["ɵppd"](6,1),(l()(),e["ɵeld"](7,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,7,"input",[["class","form-control"],["formControlName","parent"],["id","parent"],["name","parent"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,9).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,9)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](9,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](11,671744,[[1,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](13,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](14,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](15,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){l(n,1,0),l(n,11,0,"parent"),l(n,15,0,"parent")}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess);var a=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n.parent,0),u.action));l(n,5,0,a),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["'/' and '@' are not allowed."]))],null,null)}function ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","pool"],["id","pool"],["name","pool"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"pool"),l(n,7,0,"pool")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function du(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No rbd pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a pool --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","pool"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,du)),e["ɵdid"](9,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,iu)),e["ɵdid"](11,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,su)),e["ɵdid"](13,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ru)),e["ɵdid"](15,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"pool"),l(n,7,0,"pool"),l(n,9,0,null===u.pools),l(n,11,0,null!==u.pools&&0===u.pools.length),l(n,13,0,null!==u.pools&&u.pools.length>0),l(n,15,0,u.pools)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function mu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,2)],(function(l,n){var u=n.component;l(n,1,0);var e=l(n,8,0,u.icons.spinner,u.icons.spin);l(n,7,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function gu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","namespace"],["id","namespace"],["name","namespace"],["placeholder","Namespace..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"namespace"),l(n,7,0,"namespace")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No namespaces available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a namespace --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function bu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function hu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","namespace"],["id","namespace"],["name","namespace"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fu)),e["ɵdid"](9,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vu)),e["ɵdid"](11,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Cu)),e["ɵdid"](13,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bu)),e["ɵdid"](15,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"namespace"),l(n,7,0,"namespace"),l(n,9,0,null===u.pools),l(n,11,0,null!==u.pools&&0===u.pools.length),l(n,13,0,null!==u.pools&&u.pools.length>0),l(n,15,0,u.namespaces)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function Ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,10,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","pool"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" Namespace "])),(l()(),e["ɵeld"](6,0,null,0,4,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,gu)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,hu)),e["ɵdid"](10,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,8,0,"editing"===u.mode||!u.poolPermission.read),l(n,10,0,"editing"!==u.mode&&u.poolPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function Iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","dataPool"],["id","dataPool"],["name","dataPool"],["placeholder","Data pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"dataPool"),l(n,7,0,"dataPool")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function Nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No data pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function wu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a data pool -- "]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function yu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","dataPool"],["id","dataPool"],["name","dataPool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0,t=l.component;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"change"===n&&(a=!1!==t.onDataPoolChange(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Nu)),e["ɵdid"](9,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Eu)),e["ɵdid"](11,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wu)),e["ɵdid"](13,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tu)),e["ɵdid"](15,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"dataPool"),l(n,7,0,"dataPool"),l(n,9,0,null===u.dataPools),l(n,11,0,null!==u.dataPools&&0===u.dataPools.length),l(n,13,0,null!==u.dataPools&&u.dataPools.length>0),l(n,15,0,u.dataPools)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function Vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,7,"label",[["class","cd-col-form-label"],["for","dataPool"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"span",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpod"](8,{required:0}),(l()(),e["ɵted"](-1,null,["Data pool"])),(l()(),e["ɵeld"](10,0,null,null,1,"cd-helper",[["html","Dedicated pool that stores the object-data of the RBD."]],null,null,null,zn.b,zn.a)),e["ɵdid"](11,49152,null,0,Gn.a,[],{html:[0,"html"]},null),(l()(),e["ɵeld"](12,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Iu)),e["ɵdid"](14,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,yu)),e["ɵdid"](16,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Vu)),e["ɵdid"](18,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var a=l(n,8,0,"editing"!==u.mode);l(n,7,0,a),l(n,11,0,"Dedicated pool that stores the object-data of the RBD."),l(n,14,0,"editing"===u.mode||!u.poolPermission.read),l(n,16,0,"editing"!==u.mode&&u.poolPermission.read),l(n,18,0,u.rbdForm.showError("dataPool",e["ɵnov"](n.parent,5),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function qu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ku(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["You have to increase the size."]))],null,null)}function _u(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-helper",[],null,null,null,zn.b,zn.a)),e["ɵdid"](1,49152,null,0,Gn.a,[],{html:[0,"html"]},null)],(function(l,n){l(n,1,0,e["ɵinlineInterpolate"](1,"",n.parent.context.$implicit.helperHtml,""))}),null)}function Du(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,2).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,2).onTouched()&&a),a}),null,null)),e["ɵdid"](2,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](4,671744,[[17,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](6,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](9,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](10,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,_u)),e["ɵdid"](12,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,8,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,12,0,n.context.$implicit.helperHtml)}),(function(l,n){l(n,1,1,[e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,""),e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,""),e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,8).validClass,e["ɵnov"](n,8).invalidClass]),l(n,9,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,10,0,n.context.$implicit.desc)}))}function Fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"a",[["class","float-right margin-right-md"],["href",""]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.advancedEnabled=!0,e=!1),e}),null,null)),(l()(),e["ɵted"](-1,null,["Advanced..."]))],null,null)}function Pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required because stripe count is defined!"]))],null,null)}function Ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Stripe unit is greater than object size."]))],null,null)}function ju(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required because stripe unit is defined!"]))],null,null)}function Uu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Stripe count must be greater than 0."]))],null,null)}function Bu(l){return e["ɵvid"](0,[e["ɵpid"](0,D.TitleCasePipe,[]),e["ɵpid"](0,ll.a,[]),(l()(),e["ɵeld"](2,0,null,null,193,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,192,"form",[["name","rbdForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var a=!0;return"submit"===n&&(a=!1!==e["ɵnov"](l,5).onSubmit(u)&&a),"reset"===n&&(a=!1!==e["ɵnov"](l,5).onReset()&&a),"submit"===n&&(a=!1!==e["ɵnov"](l,8).onSubmit()&&a),a}),null,null)),e["ɵdid"](4,16384,null,0,el.G,[],null,null),e["ɵdid"](5,540672,[["formDir",4]],0,el.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,el.d,null,[el.l]),e["ɵdid"](7,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](8,16384,null,0,Nl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](9,0,null,null,186,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](11,null,[""," ",""])),e["ɵppd"](12,1),e["ɵppd"](13,1),(l()(),e["ɵeld"](14,0,null,null,172,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,eu)),e["ɵdid"](16,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](17,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](18,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](21,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](23,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](24,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,25)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,25).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,25)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,25)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](25,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](27,671744,[[3,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](29,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](30,4210688,null,0,Kn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](31,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](32,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,au)),e["ɵdid"](34,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tu)),e["ɵdid"](36,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](37,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onPoolChange(u.target.value)&&e),e}),$n.b,$n.a)),e["ɵdid"](38,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](41,0,null,0,4,"label",[["class","cd-col-form-label"],["for","pool"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](43,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](44,{required:0}),(l()(),e["ɵted"](-1,null,["Pool"])),(l()(),e["ɵeld"](46,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ou)),e["ɵdid"](48,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,cu)),e["ɵdid"](50,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pu)),e["ɵdid"](52,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,mu)),e["ɵdid"](54,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ru)),e["ɵdid"](56,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](57,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](58,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](61,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](62,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](63,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","useDataPool"],["id","useDataPool"],["name","useDataPool"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0,t=l.component;return"change"===n&&(a=!1!==e["ɵnov"](l,64).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,64).onTouched()&&a),"change"===n&&(a=!1!==t.onUseDataPoolChange()&&a),a}),null,null)),e["ɵdid"](64,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](66,671744,[[11,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](68,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](69,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](70,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](71,0,null,null,1,"label",[["class","custom-control-label"],["for","useDataPool"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Use a dedicated data pool"])),(l()(),e["ɵand"](16777216,null,null,1,null,xu)),e["ɵdid"](74,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](75,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](76,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](79,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Size"])),(l()(),e["ɵeld"](81,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](82,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","GiB"],["formControlName","size"],["id","size"],["name","size"],["placeholder","e.g., 10GiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,83)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,83).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,83)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,83)._compositionEnd(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,88).onBlur(u.target.value)&&a),a}),null,null)),e["ɵdid"](83,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](85,671744,[[15,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](87,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](88,81920,null,0,Zn.a,[e.ElementRef,el.q,B.a,U.a],{defaultUnit:[0,"defaultUnit"]},null),e["ɵdid"](89,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](90,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,qu)),e["ɵdid"](92,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ku)),e["ɵdid"](94,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](95,0,null,null,11,"div",[["class","form-group row"],["formGroupName","features"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](96,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](98,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](99,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](102,0,null,0,1,"label",[["class","cd-col-form-label"],["for","features"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Features"])),(l()(),e["ɵeld"](104,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Du)),e["ɵdid"](106,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](107,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](108,0,null,null,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Fu)),e["ɵdid"](110,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](111,0,null,null,75,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e["ɵeld"](112,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Advanced"])),(l()(),e["ɵeld"](114,0,null,null,70,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](115,0,null,null,1,"h4",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Striping"])),(l()(),e["ɵeld"](117,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](118,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](121,0,null,0,1,"label",[["class","cd-col-form-label"],["for","size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Object size"])),(l()(),e["ɵeld"](123,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](124,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","obj_size"],["id","obj_size"],["name","obj_size"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,125).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,125).onTouched()&&a),a}),null,null)),e["ɵdid"](125,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](127,671744,[[19,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](129,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](130,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](131,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pu)),e["ɵdid"](133,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](134,0,null,null,27,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](135,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](138,0,null,0,4,"label",[["class","cd-col-form-label"],["for","stripingUnit"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](140,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](141,{required:0}),(l()(),e["ɵted"](-1,null,["Stripe unit"])),(l()(),e["ɵeld"](143,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](144,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","stripingUnit"],["id","stripingUnit"],["name","stripingUnit"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,145).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,145).onTouched()&&a),a}),null,null)),e["ɵdid"](145,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](147,671744,[[21,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](149,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](150,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](151,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](152,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](153,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](154,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select stripe unit --"])),(l()(),e["ɵand"](16777216,null,null,1,null,Su)),e["ɵdid"](157,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Au)),e["ɵdid"](159,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ou)),e["ɵdid"](161,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](162,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](163,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](166,0,null,0,4,"label",[["class","cd-col-form-label"],["for","stripingCount"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](168,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](169,{required:0}),(l()(),e["ɵted"](-1,null,["Stripe count"])),(l()(),e["ɵeld"](171,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](172,0,null,null,8,"input",[["class","form-control"],["formControlName","stripingCount"],["id","stripingCount"],["name","stripingCount"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,173)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,173).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,173)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,173)._compositionEnd(u.target.value)&&a),"change"===n&&(a=!1!==e["ɵnov"](l,174).onChange(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,174).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,174).onTouched()&&a),a}),null,null)),e["ɵdid"](173,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵdid"](174,16384,null,0,el.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l,n){return[l,n]}),[el.e,el.w]),e["ɵdid"](176,671744,[[23,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](178,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](179,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](180,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ju)),e["ɵdid"](182,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Uu)),e["ɵdid"](184,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](185,0,null,null,1,"cd-rbd-configuration-form",[],null,[[null,"changes"]],(function(l,n,u){var e=!0;return"changes"===n&&(e=!1!==(l.component.getDirtyConfigurationValues=u)&&e),e}),Jn.b,Jn.a)),e["ɵdid"](186,114688,null,0,Wn.a,[U.a,Qn.a],{form:[0,"form"],initializeData:[1,"initializeData"]},{changes:"changes"}),(l()(),e["ɵeld"](187,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](188,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](189,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](190,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](191,0,[""," ",""])),e["ɵppd"](192,1),e["ɵppd"](193,1),(l()(),e["ɵeld"](194,0,null,null,1,"cd-back-button",[],null,null,null,Hn.b,Hn.a)),e["ɵdid"](195,49152,null,0,lu.a,[D.Location,Ql.b],null,null)],(function(l,n){var u=n.component;l(n,5,0,u.rbdForm),l(n,8,0,u.rbdForm),l(n,16,0,u.rbdForm.getValue("parent")),l(n,18,0),l(n,27,0,"name"),l(n,30,0,""),l(n,32,0,"name"),l(n,34,0,u.rbdForm.showError("name",e["ɵnov"](n,5),"required")),l(n,36,0,u.rbdForm.showError("name",e["ɵnov"](n,5),"pattern")),l(n,38,0);var a=l(n,44,0,"editing"!==u.mode);l(n,43,0,"cd-col-form-label",a),l(n,48,0,"editing"===u.mode||!u.poolPermission.read),l(n,50,0,"editing"!==u.mode&&u.poolPermission.read),l(n,52,0,u.rbdForm.showError("pool",e["ɵnov"](n,5),"required")),l(n,54,0,"editing"!==u.mode&&u.rbdForm.getValue("pool")&&null===u.namespaces),l(n,56,0,"editing"===u.mode&&u.rbdForm.getValue("namespace")||"editing"!==u.mode&&(u.namespaces&&u.namespaces.length>0||!u.poolPermission.read)),l(n,58,0),l(n,66,0,"useDataPool"),l(n,70,0,"useDataPool"),l(n,74,0,u.rbdForm.getValue("useDataPool")),l(n,76,0),l(n,85,0,"size"),l(n,88,0,"GiB"),l(n,90,0,"size"),l(n,92,0,u.rbdForm.showError("size",e["ɵnov"](n,5),"required")),l(n,94,0,u.rbdForm.showError("size",e["ɵnov"](n,5),"invalidSizeObject")),l(n,96,0,"features"),l(n,99,0),l(n,106,0,u.featuresList),l(n,110,0,!u.advancedEnabled),l(n,118,0),l(n,127,0,"obj_size"),l(n,131,0,"obj_size"),l(n,133,0,u.objectSizes),l(n,135,0);var t=l(n,141,0,u.rbdForm.getValue("stripingCount"));l(n,140,0,"cd-col-form-label",t),l(n,147,0,"stripingUnit"),l(n,151,0,"stripingUnit"),l(n,153,0,null),l(n,154,0,null),l(n,157,0,u.objectSizes),l(n,159,0,u.rbdForm.showError("stripingUnit",e["ɵnov"](n,5),"required")),l(n,161,0,u.rbdForm.showError("stripingUnit",e["ɵnov"](n,5),"invalidStripingUnit")),l(n,163,0);var o=l(n,169,0,u.rbdForm.getValue("stripingUnit"));l(n,168,0,"cd-col-form-label",o),l(n,176,0,"stripingCount"),l(n,180,0,"stripingCount"),l(n,182,0,u.rbdForm.showError("stripingCount",e["ɵnov"](n,5),"required")),l(n,184,0,u.rbdForm.showError("stripingCount",e["ɵnov"](n,5),"min")),l(n,186,0,u.rbdForm,u.initializeConfigData),l(n,190,0,e["ɵnov"](n,5))}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,7).ngClassUntouched,e["ɵnov"](n,7).ngClassTouched,e["ɵnov"](n,7).ngClassPristine,e["ɵnov"](n,7).ngClassDirty,e["ɵnov"](n,7).ngClassValid,e["ɵnov"](n,7).ngClassInvalid,e["ɵnov"](n,7).ngClassPending);var a=e["ɵunv"](n,11,0,l(n,12,0,e["ɵnov"](n,0),u.action)),t=e["ɵunv"](n,11,1,l(n,13,0,e["ɵnov"](n,1),u.resource));l(n,11,0,a,t),l(n,17,0,e["ɵnov"](n,18).hasErrors,e["ɵnov"](n,18).hasSuccess),l(n,24,0,e["ɵnov"](n,29).ngClassUntouched,e["ɵnov"](n,29).ngClassTouched,e["ɵnov"](n,29).ngClassPristine,e["ɵnov"](n,29).ngClassDirty,e["ɵnov"](n,29).ngClassValid,e["ɵnov"](n,29).ngClassInvalid,e["ɵnov"](n,29).ngClassPending,e["ɵnov"](n,32).validClass,e["ɵnov"](n,32).invalidClass),l(n,37,0,e["ɵnov"](n,38).hasErrors,e["ɵnov"](n,38).hasSuccess),l(n,57,0,e["ɵnov"](n,58).hasErrors,e["ɵnov"](n,58).hasSuccess),l(n,63,0,e["ɵnov"](n,68).ngClassUntouched,e["ɵnov"](n,68).ngClassTouched,e["ɵnov"](n,68).ngClassPristine,e["ɵnov"](n,68).ngClassDirty,e["ɵnov"](n,68).ngClassValid,e["ɵnov"](n,68).ngClassInvalid,e["ɵnov"](n,68).ngClassPending,e["ɵnov"](n,70).validClass,e["ɵnov"](n,70).invalidClass),l(n,75,0,e["ɵnov"](n,76).hasErrors,e["ɵnov"](n,76).hasSuccess),l(n,82,0,e["ɵnov"](n,87).ngClassUntouched,e["ɵnov"](n,87).ngClassTouched,e["ɵnov"](n,87).ngClassPristine,e["ɵnov"](n,87).ngClassDirty,e["ɵnov"](n,87).ngClassValid,e["ɵnov"](n,87).ngClassInvalid,e["ɵnov"](n,87).ngClassPending,e["ɵnov"](n,90).validClass,e["ɵnov"](n,90).invalidClass),l(n,95,0,e["ɵnov"](n,98).ngClassUntouched,e["ɵnov"](n,98).ngClassTouched,e["ɵnov"](n,98).ngClassPristine,e["ɵnov"](n,98).ngClassDirty,e["ɵnov"](n,98).ngClassValid,e["ɵnov"](n,98).ngClassInvalid,e["ɵnov"](n,98).ngClassPending,e["ɵnov"](n,99).hasErrors,e["ɵnov"](n,99).hasSuccess),l(n,111,0,!u.advancedEnabled),l(n,117,0,e["ɵnov"](n,118).hasErrors,e["ɵnov"](n,118).hasSuccess),l(n,124,0,e["ɵnov"](n,129).ngClassUntouched,e["ɵnov"](n,129).ngClassTouched,e["ɵnov"](n,129).ngClassPristine,e["ɵnov"](n,129).ngClassDirty,e["ɵnov"](n,129).ngClassValid,e["ɵnov"](n,129).ngClassInvalid,e["ɵnov"](n,129).ngClassPending,e["ɵnov"](n,131).validClass,e["ɵnov"](n,131).invalidClass),l(n,134,0,e["ɵnov"](n,135).hasErrors,e["ɵnov"](n,135).hasSuccess),l(n,144,0,e["ɵnov"](n,149).ngClassUntouched,e["ɵnov"](n,149).ngClassTouched,e["ɵnov"](n,149).ngClassPristine,e["ɵnov"](n,149).ngClassDirty,e["ɵnov"](n,149).ngClassValid,e["ɵnov"](n,149).ngClassInvalid,e["ɵnov"](n,149).ngClassPending,e["ɵnov"](n,151).validClass,e["ɵnov"](n,151).invalidClass),l(n,162,0,e["ɵnov"](n,163).hasErrors,e["ɵnov"](n,163).hasSuccess),l(n,172,0,e["ɵnov"](n,178).ngClassUntouched,e["ɵnov"](n,178).ngClassTouched,e["ɵnov"](n,178).ngClassPristine,e["ɵnov"](n,178).ngClassDirty,e["ɵnov"](n,178).ngClassValid,e["ɵnov"](n,178).ngClassInvalid,e["ɵnov"](n,178).ngClassPending,e["ɵnov"](n,180).validClass,e["ɵnov"](n,180).invalidClass);var o=e["ɵunv"](n,191,0,l(n,192,0,e["ɵnov"](n,0),u.action)),d=e["ɵunv"](n,191,1,l(n,193,0,e["ɵnov"](n,1),u.resource));l(n,191,0,o,d)}))}function $u(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-form",[],null,null,null,Bu,uu)),e["ɵdid"](1,114688,null,0,nu.a,[ml.a,fl.a,gn.a,Jl.a,U.a,Wl.a,B.a,A.a,Ql.b,fl.m],null,null)],(function(l,n){l(n,1,0)}),null)}var Mu=e["ɵccf"]("cd-rbd-form",nu.a,$u,{},{},[]),Lu=u("JxMD"),zu=u("dgut");class Gu{constructor(l){this.router=l}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var Ku=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Zu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,Fl.b,Fl.a)),e["ɵdid"](1,180224,null,0,vl.e,[vl.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Overview"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/iscsi/overview")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Targets"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/iscsi/targets")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){var u=n.component;l(n,3,0,"Overview","/block/iscsi/overview"===u.url),l(n,5,0,"Targets","/block/iscsi/targets"===u.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby)}))}var Ju=u("roDX"),Wu=u("my5R"),Qu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Yu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"cd-sparkline",[],null,null,null,Lu.b,Lu.a)),e["ɵdid"](2,638976,null,0,zu.a,[B.a],{data:[0,"data"],isBinary:[1,"isBinary"]},null)],(function(l,n){l(n,2,0,n.parent.context.value,n.parent.context.row.cdIsBinary)}),null)}function Xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function Hu(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Yu)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Xu)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function le(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," /s "]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function ne(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function ue(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,le)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ne)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function ee(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent,0),n.parent.context.value));l(n,1,0,u)}))}function ae(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function te(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,ee)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ae)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function oe(l){return e["ɵvid"](0,[e["ɵpid"](0,L.a,[]),e["ɵqud"](402653184,1,{iscsiSparklineTpl:0}),e["ɵqud"](402653184,2,{iscsiPerSecondTpl:0}),e["ɵqud"](402653184,3,{iscsiRelativeDateTpl:0}),(l()(),e["ɵeld"](4,0,null,null,1,"cd-iscsi-tabs",[],null,null,null,Zu,Ku)),e["ɵdid"](5,114688,null,0,Gu,[fl.m],null,null),(l()(),e["ɵeld"](6,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Gateways"])),(l()(),e["ɵeld"](8,0,null,null,1,"cd-table",[],null,[[null,"fetchData"]],(function(l,n,u){var e=!0;return"fetchData"===n&&(e=!1!==l.component.refresh()&&e),e}),jl.b,jl.a)),e["ɵdid"](9,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},{fetchData:"fetchData"}),(l()(),e["ɵeld"](10,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](12,0,null,null,1,"cd-table",[],null,null,null,jl.b,jl.a)),e["ɵdid"](13,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null),(l()(),e["ɵand"](0,[[1,2],["iscsiSparklineTpl",2]],null,0,null,Hu)),(l()(),e["ɵand"](0,[[2,2],["iscsiPerSecondTpl",2]],null,0,null,ue)),(l()(),e["ɵand"](0,[[3,2],["iscsiRelativeDateTpl",2]],null,0,null,te))],(function(l,n){var u=n.component;l(n,5,0),l(n,9,0,u.gateways,u.gatewaysColumns),l(n,13,0,u.images,u.imagesColumns)}),null)}function de(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi",[],null,null,null,oe,Qu)),e["ɵdid"](1,114688,null,0,Ju.a,[Wu.a,M.a,z.a,A.a],null,null)],(function(l,n){l(n,1,0)}),null)}var ie=e["ɵccf"]("cd-iscsi",Ju.a,de,{},{},[]),se=u("DqMs"),re=u("/NlG"),ce=u("i4WA"),pe=u("6qls"),me=u("tz6c"),ge=u("3ris"),fe=u("e/kN"),ve=e["ɵcrt"]({encapsulation:0,styles:[["tabset.tabset>ul{border-bottom:0;float:left;display:block;margin-right:20px;border-right:1px solid #ddd;padding-right:15px}"]],data:{}});function Ce(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Available information:"])),(l()(),e["ɵeld"](4,0,null,null,1,"pre",[],null,null,null,null,null)),(l()(),e["ɵted"](5,null,["",""]))],null,(function(l,n){l(n,5,0,n.component.status)}))}function be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["title","iSCSI Targets not available"],["type","info"]],null,null,null,se.b,se.a)),e["ɵdid"](1,114688,null,0,re.a,[A.a],{title:[0,"title"],type:[1,"type"]},null),(l()(),e["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Please consult the "])),(l()(),e["ɵeld"](4,0,null,null,1,"cd-doc",[["section","iscsi"]],null,null,null,ce.b,ce.a)),e["ɵdid"](5,114688,null,0,pe.a,[me.a,A.a],{section:[0,"section"]},null),(l()(),e["ɵted"](-1,null,[" on how to configure and enable the iSCSI Targets management functionality."])),(l()(),e["ɵand"](16777216,null,0,1,null,Ce)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,"iSCSI Targets not available","info"),l(n,5,0,"iscsi"),l(n,8,0,u.status)}),null)}function he(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi-target-details",[["cdTableDetail",""]],null,null,null,x.c,x.b)),e["ɵdid"](1,638976,null,0,ge.a,[A.a,z.a,S.a],{selection:[0,"selection"],settings:[1,"settings"],cephIscsiConfigVersion:[2,"cephIscsiConfigVersion"]},null)],(function(l,n){var u=n.component;l(n,1,0,u.expandedRow,u.settings,u.cephIscsiConfigVersion)}),null)}function Re(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,13,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","target_iqn"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"setExpandedRow"===n&&(e=!1!==a.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](1,2867200,[[1,4],["table",4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](2,0,null,1,9,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](4,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](5,0,null,null,6,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.configureDiscoveryAuth()&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1),(l()(),e["ɵeld"](10,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Discovery authentication"])),(l()(),e["ɵand"](16777216,null,3,1,null,he)),e["ɵdid"](13,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,u.targets,u.columns,"flex",!0,"target_iqn","true","single"),l(n,4,0,u.permission,u.selection,u.tableActions);var e=l(n,9,0,u.icons.key);l(n,8,0,e),l(n,13,0,u.expandedRow)}),null)}function Ie(l){return e["ɵvid"](0,[e["ɵqud"](671088640,1,{table:0}),(l()(),e["ɵeld"](1,0,null,null,1,"cd-iscsi-tabs",[],null,null,null,Zu,Ku)),e["ɵdid"](2,114688,null,0,Gu,[fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,be)),e["ɵdid"](4,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Re)),e["ɵdid"](6,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,2,0),l(n,4,0,!1===u.available),l(n,6,0,!0===u.available)}),null)}function Ne(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-iscsi-target-list",[],null,null,null,Ie,ve)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,245760,null,0,fe.a,[ml.a,A.a,Wu.a,G.a,Ll.a,H.a,rl.b,Wl.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var Ee=e["ɵccf"]("cd-iscsi-target-list",fe.a,Ne,{},{},[]),we=u("D4zM"),Te=u("OcYo"),ye=u("EApP"),Ve=u("WiuZ"),xe=u("wnGv"),qe=u("LvDl");class ke{constructor(l){this.ngControl=l}onInput(l){this.setValue(l)}setValue(l){l=qe.isString(l)?l.trim():l,this.ngControl.control.setValue(l)}}var _e=u("gr3l"),De=e["ɵcrt"]({encapsulation:0,styles:[[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]],data:{}});function Fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["IQN has wrong pattern."]))],null,null)}function Se(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["An IQN has the following notation 'iqn.$year-$month.$reversedAddress:$definedName'"])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309"])),(l()(),e["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,1,"a",[["href","https://en.wikipedia.org/wiki/ISCSI#Addressing"],["target","_blank"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["More information"]))],null,null)}function Ae(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This target has modified advanced settings."]))],null,null)}function Oe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](3,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),(l()(),e["ɵeld"](4,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removePortal(l.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1)],(function(l,n){var u=l(n,9,0,n.component.icons.destroy);l(n,8,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["At least "," gateways are required."]))],null,(function(l,n){l(n,1,0,n.component.minimum_gateways)}))}function Ue(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["lun: ",""]))],null,(function(l,n){l(n,1,0,n.component.imagesSettings[n.parent.context.$implicit].lun)}))}function Be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(l()(),e["ɵted"](1,null,["Backstore: ",". "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,a=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent,2),u.imagesSettings[n.parent.context.$implicit].backstore));l(n,1,0,a)}))}function $e(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This image has modified settings."]))],null,null)}function Me(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,15,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](3,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),(l()(),e["ɵeld"](4,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ue)),e["ɵdid"](6,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](7,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.imageSettingsModal(l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](8,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](10,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](11,1),(l()(),e["ɵeld"](12,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeImage(l.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](13,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](15,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](16,1),(l()(),e["ɵeld"](17,0,null,null,4,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Be)),e["ɵdid"](19,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$e)),e["ɵdid"](21,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,6,0,u.api_version>=1);var e=l(n,11,0,u.icons.deepCheck);l(n,10,0,e);var a=l(n,16,0,u.icons.destroy);l(n,15,0,a),l(n,19,0,u.backstores.length>1),l(n,21,0,u.hasAdvancedSettings(u.imagesSettings[n.context.$implicit][u.imagesSettings[n.context.$implicit].backstore]))}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function Le(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Duplicated LUN numbers."]))],null,null)}function ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Duplicated WWN."]))],null,null)}function Ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ke(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function Ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function We(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Qe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function Ye(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Xe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function He(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,95,"div",[["formGroupName","auth"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](5,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](8,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User"])),(l()(),e["ɵeld"](11,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["id","target_user"],["name","target_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,13).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,13)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](13,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](15,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](17,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](18,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](19,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ge)),e["ɵdid"](21,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ke)),e["ɵdid"](23,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](24,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](25,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](28,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_password"]],null,null,null,null,null)),(l()(),e["ɵeld"](29,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵeld"](31,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](32,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](33,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","target_password"],["name","target_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,34)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,34).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,34)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,34)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](34,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](36,671744,[[11,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](38,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](39,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](40,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](41,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](42,0,null,null,1,"button",[["cdPasswordButton","target_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,43).onClick()&&a),a}),null,null)),e["ɵdid"](43,81920,null,0,we.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](44,0,null,null,1,"button",[["cdCopy2ClipboardButton","target_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,45).onClick()&&a),a}),null,null)),e["ɵdid"](45,81920,null,0,Te.a,[e.ElementRef,e.Renderer2,ye.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ze)),e["ɵdid"](47,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Je)),e["ɵdid"](49,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](50,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](51,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](54,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_mutual_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](55,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual User"])),(l()(),e["ɵeld"](57,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](58,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["id","target_mutual_user"],["name","target_mutual_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,59)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,59).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,59)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,59)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](59,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](61,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](63,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](64,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](65,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,We)),e["ɵdid"](67,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qe)),e["ɵdid"](69,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](70,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](71,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](74,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_mutual_password"]],null,null,null,null,null)),(l()(),e["ɵeld"](75,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual Password"])),(l()(),e["ɵeld"](77,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](78,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](79,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["id","target_mutual_password"],["name","target_mutual_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,80)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,80).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,80)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,80)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](80,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](82,671744,[[15,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](84,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](85,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](86,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](87,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](88,0,null,null,1,"button",[["cdPasswordButton","target_mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,89).onClick()&&a),a}),null,null)),e["ɵdid"](89,81920,null,0,we.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](90,0,null,null,1,"button",[["cdCopy2ClipboardButton","target_mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,91).onClick()&&a),a}),null,null)),e["ɵdid"](91,81920,null,0,Te.a,[e.ElementRef,e.Renderer2,ye.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ye)),e["ɵdid"](93,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Xe)),e["ɵdid"](95,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,"auth"),l(n,5,0),l(n,15,0,"user"),l(n,19,0,"user"),l(n,21,0,u.targetForm.showError("user",e["ɵnov"](n.parent,2),"required")),l(n,23,0,u.targetForm.showError("user",e["ɵnov"](n.parent,2),"pattern")),l(n,25,0),l(n,36,0,"password"),l(n,40,0,"password"),l(n,43,0,"target_password"),l(n,45,0,"target_password"),l(n,47,0,u.targetForm.showError("password",e["ɵnov"](n.parent,2),"required")),l(n,49,0,u.targetForm.showError("password",e["ɵnov"](n.parent,2),"pattern")),l(n,51,0),l(n,61,0,"mutual_user"),l(n,65,0,"mutual_user"),l(n,67,0,u.targetForm.showError("mutual_user",e["ɵnov"](n.parent,2),"required")),l(n,69,0,u.targetForm.showError("mutual_user",e["ɵnov"](n.parent,2),"pattern")),l(n,71,0),l(n,82,0,"mutual_password"),l(n,86,0,"mutual_password"),l(n,89,0,"target_mutual_password"),l(n,91,0,"target_mutual_password"),l(n,93,0,u.targetForm.showError("mutual_password",e["ɵnov"](n.parent,2),"required")),l(n,95,0,u.targetForm.showError("mutual_password",e["ɵnov"](n.parent,2),"pattern"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending),l(n,4,0,e["ɵnov"](n,5).hasErrors,e["ɵnov"](n,5).hasSuccess),l(n,12,0,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,19).validClass,e["ɵnov"](n,19).invalidClass),l(n,24,0,e["ɵnov"](n,25).hasErrors,e["ɵnov"](n,25).hasSuccess),l(n,33,0,e["ɵnov"](n,38).ngClassUntouched,e["ɵnov"](n,38).ngClassTouched,e["ɵnov"](n,38).ngClassPristine,e["ɵnov"](n,38).ngClassDirty,e["ɵnov"](n,38).ngClassValid,e["ɵnov"](n,38).ngClassInvalid,e["ɵnov"](n,38).ngClassPending,e["ɵnov"](n,40).validClass,e["ɵnov"](n,40).invalidClass),l(n,50,0,e["ɵnov"](n,51).hasErrors,e["ɵnov"](n,51).hasSuccess),l(n,58,0,e["ɵnov"](n,63).ngClassUntouched,e["ɵnov"](n,63).ngClassTouched,e["ɵnov"](n,63).ngClassPristine,e["ɵnov"](n,63).ngClassDirty,e["ɵnov"](n,63).ngClassValid,e["ɵnov"](n,63).ngClassInvalid,e["ɵnov"](n,63).ngClassPending,e["ɵnov"](n,65).validClass,e["ɵnov"](n,65).invalidClass),l(n,70,0,e["ɵnov"](n,71).hasErrors,e["ɵnov"](n,71).hasSuccess),l(n,79,0,e["ɵnov"](n,84).ngClassUntouched,e["ɵnov"](n,84).ngClassTouched,e["ɵnov"](n,84).ngClassPristine,e["ɵnov"](n,84).ngClassDirty,e["ɵnov"](n,84).ngClassValid,e["ɵnov"](n,84).ngClassInvalid,e["ɵnov"](n,84).ngClassPending,e["ɵnov"](n,86).validClass,e["ɵnov"](n,86).invalidClass)}))}function la(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator IQN needs to be unique."]))],null,null)}function na(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ua(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["IQN has wrong pattern."]))],null,null)}function ea(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function aa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function ta(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function oa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function da(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ia(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function sa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ra(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function ca(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](3,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),(l()(),e["ɵeld"](4,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeInitiatorImage(l.parent.context.$implicit,l.context.index,l.parent.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1)],(function(l,n){var u=l(n,9,0,n.component.icons.destroy);l(n,8,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function pa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator belongs to a group. Images will be configure in the group."]))],null,null)}function ma(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,null,null,Ve.b,Ve.a)),e["ɵdid"](3,638976,null,0,xe.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},null),(l()(),e["ɵeld"](4,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](7,1),(l()(),e["ɵeld"](8,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"]))],(function(l,n){var u=n.component,e=n.parent.context.$implicit.getValue("luns");l(n,3,0,"btn btn-light float-right",e,u.imagesInitiatorSelections[n.parent.context.index],u.messages.initiatorImage);var a=l(n,7,0,u.icons.add);l(n,6,0,a)}),null)}function ga(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,141,"div",[["class","card mb-2"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,8,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator"])),(l()(),e["ɵted"](7,null,[": "," "])),(l()(),e["ɵeld"](8,0,null,null,4,"button",[["class","close"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeInitiator(l.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,128,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](15,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](18,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","client_iqn"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Client IQN"])),(l()(),e["ɵeld"](20,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,8,"input",[["cdTrim",""],["class","form-control"],["formControlName","client_iqn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0,t=l.component;return"input"===n&&(a=!1!==e["ɵnov"](l,22)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,22).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,22)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,22)._compositionEnd(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,27).onInput(u.target.value)&&a),"blur"===n&&(a=!1!==t.updatedInitiatorSelector()&&a),a}),null,null)),e["ɵdid"](22,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](24,671744,[[19,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](26,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](27,16384,null,0,ke,[el.q],null,null),e["ɵdid"](28,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](29,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,la)),e["ɵdid"](31,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,na)),e["ɵdid"](33,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ua)),e["ɵdid"](35,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](36,0,null,null,92,null,null,null,null,null,null,null)),e["ɵdid"](37,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](39,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](40,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](41,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](44,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User"])),(l()(),e["ɵeld"](46,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](47,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,48)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,48).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,48)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,48)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](48,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](50,671744,[[21,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](52,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](53,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](54,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ea)),e["ɵdid"](56,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,aa)),e["ɵdid"](58,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](59,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](60,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](63,0,null,0,1,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵeld"](65,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](66,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](67,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["type","password"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,68)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,68).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,68)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,68)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](68,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](70,671744,[[23,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](72,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](73,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](74,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](75,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](76,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,77).onClick()&&a),a}),null,null)),e["ɵdid"](77,81920,null,0,we.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](78,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,79).onClick()&&a),a}),null,null)),e["ɵdid"](79,81920,null,0,Te.a,[e.ElementRef,e.Renderer2,ye.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ta)),e["ɵdid"](81,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,oa)),e["ɵdid"](83,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](84,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](85,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,25,{FormControlNames:1}),e["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),e["ɵeld"](88,0,null,0,2,"label",[["class","cd-col-form-label"],["for","mutual_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](89,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual User"])),(l()(),e["ɵeld"](91,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](92,0,null,null,7,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,93)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,93).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,93)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,93)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](93,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](95,671744,[[25,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](97,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](98,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](99,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,da)),e["ɵdid"](101,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ia)),e["ɵdid"](103,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](104,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](105,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,27,{FormControlNames:1}),e["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),e["ɵeld"](108,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mutual_password"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual Password"])),(l()(),e["ɵeld"](110,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](111,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](112,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["type","password"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,113)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,113).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,113)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,113)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](113,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](115,671744,[[27,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](117,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](118,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](119,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](120,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](121,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,122).onClick()&&a),a}),null,null)),e["ɵdid"](122,81920,null,0,we.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](123,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,124).onClick()&&a),a}),null,null)),e["ɵdid"](124,81920,null,0,Te.a,[e.ElementRef,e.Renderer2,ye.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,sa)),e["ɵdid"](126,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ra)),e["ɵdid"](128,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](129,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](130,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,29,{FormControlNames:1}),e["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),e["ɵeld"](133,0,null,0,1,"label",[["class","cd-col-form-label"],["for","luns"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](135,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ca)),e["ɵdid"](137,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pa)),e["ɵdid"](139,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ma)),e["ɵdid"](141,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,n.context.index);var a=l(n,12,0,u.icons.destroy);l(n,11,0,a),l(n,15,0),l(n,24,0,"client_iqn"),l(n,29,0,"client_iqn");var t=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"notUnique");l(n,31,0,t);var o=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"required");l(n,33,0,o);var d=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"pattern");l(n,35,0,d),l(n,37,0,"auth"),l(n,41,0),l(n,50,0,"user"),l(n,54,0,"user");var i=n.context.$implicit.showError("user",e["ɵnov"](n.parent.parent,2),"required");l(n,56,0,i);var s=n.context.$implicit.showError("user",e["ɵnov"](n.parent.parent,2),"pattern");l(n,58,0,s),l(n,60,0),l(n,70,0,"password"),l(n,74,0,"password"),l(n,77,0,"password"+n.context.index),l(n,79,0,"password"+n.context.index);var r=n.context.$implicit.showError("password",e["ɵnov"](n.parent.parent,2),"required");l(n,81,0,r);var c=n.context.$implicit.showError("password",e["ɵnov"](n.parent.parent,2),"pattern");l(n,83,0,c),l(n,85,0),l(n,95,0,"mutual_user"),l(n,99,0,"mutual_user");var p=n.context.$implicit.showError("mutual_user",e["ɵnov"](n.parent.parent,2),"required");l(n,101,0,p);var m=n.context.$implicit.showError("mutual_user",e["ɵnov"](n.parent.parent,2),"pattern");l(n,103,0,m),l(n,105,0),l(n,115,0,"mutual_password"),l(n,119,0,"mutual_password"),l(n,122,0,"mutual_password"+n.context.index),l(n,124,0,"mutual_password"+n.context.index);var g=n.context.$implicit.showError("mutual_password",e["ɵnov"](n.parent.parent,2),"required");l(n,126,0,g);var f=n.context.$implicit.showError("mutual_password",e["ɵnov"](n.parent.parent,2),"pattern");l(n,128,0,f),l(n,130,0);var v=n.context.$implicit.getValue("luns");l(n,137,0,v);var C=n.context.$implicit.getValue("cdIsInGroup");l(n,139,0,C);var b=!n.context.$implicit.getValue("cdIsInGroup");l(n,141,0,b)}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending);var u=n.context.$implicit.getValue("client_iqn");l(n,7,0,u),l(n,14,0,e["ɵnov"](n,15).hasErrors,e["ɵnov"](n,15).hasSuccess),l(n,21,0,e["ɵnov"](n,26).ngClassUntouched,e["ɵnov"](n,26).ngClassTouched,e["ɵnov"](n,26).ngClassPristine,e["ɵnov"](n,26).ngClassDirty,e["ɵnov"](n,26).ngClassValid,e["ɵnov"](n,26).ngClassInvalid,e["ɵnov"](n,26).ngClassPending,e["ɵnov"](n,29).validClass,e["ɵnov"](n,29).invalidClass),l(n,40,0,e["ɵnov"](n,41).hasErrors,e["ɵnov"](n,41).hasSuccess),l(n,47,0,"user"+n.context.index,e["ɵnov"](n,52).ngClassUntouched,e["ɵnov"](n,52).ngClassTouched,e["ɵnov"](n,52).ngClassPristine,e["ɵnov"](n,52).ngClassDirty,e["ɵnov"](n,52).ngClassValid,e["ɵnov"](n,52).ngClassInvalid,e["ɵnov"](n,52).ngClassPending,e["ɵnov"](n,54).validClass,e["ɵnov"](n,54).invalidClass),l(n,59,0,e["ɵnov"](n,60).hasErrors,e["ɵnov"](n,60).hasSuccess),l(n,67,0,"password"+n.context.index,e["ɵnov"](n,72).ngClassUntouched,e["ɵnov"](n,72).ngClassTouched,e["ɵnov"](n,72).ngClassPristine,e["ɵnov"](n,72).ngClassDirty,e["ɵnov"](n,72).ngClassValid,e["ɵnov"](n,72).ngClassInvalid,e["ɵnov"](n,72).ngClassPending,e["ɵnov"](n,74).validClass,e["ɵnov"](n,74).invalidClass),l(n,84,0,e["ɵnov"](n,85).hasErrors,e["ɵnov"](n,85).hasSuccess),l(n,92,0,"mutual_user"+n.context.index,e["ɵnov"](n,97).ngClassUntouched,e["ɵnov"](n,97).ngClassTouched,e["ɵnov"](n,97).ngClassPristine,e["ɵnov"](n,97).ngClassDirty,e["ɵnov"](n,97).ngClassValid,e["ɵnov"](n,97).ngClassInvalid,e["ɵnov"](n,97).ngClassPending,e["ɵnov"](n,99).validClass,e["ɵnov"](n,99).invalidClass),l(n,104,0,e["ɵnov"](n,105).hasErrors,e["ɵnov"](n,105).hasSuccess),l(n,112,0,"mutual_password"+n.context.index,e["ɵnov"](n,117).ngClassUntouched,e["ɵnov"](n,117).ngClassTouched,e["ɵnov"](n,117).ngClassPristine,e["ɵnov"](n,117).ngClassDirty,e["ɵnov"](n,117).ngClassValid,e["ɵnov"](n,117).ngClassInvalid,e["ɵnov"](n,117).ngClassPending,e["ɵnov"](n,119).validClass,e["ɵnov"](n,119).invalidClass),l(n,129,0,e["ɵnov"](n,130).hasErrors,e["ɵnov"](n,130).hasSuccess)}))}function fa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["No items added."]))],null,null)}function va(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","initiators"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiators"])),(l()(),e["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"],["formArrayName","initiators"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](7,212992,null,0,el.g,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.g]),e["ɵdid"](9,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,ga)),e["ɵdid"](11,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,9,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,fa)),e["ɵdid"](15,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](16,0,null,null,6,"button",[["class","btn btn-light float-right"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.addInitiator(),e=!1),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add initiator"])),(l()(),e["ɵeld"](23,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,1,0),l(n,7,0,"initiators"),l(n,11,0,u.initiators.controls),l(n,15,0,0===u.initiators.controls.length);var e=l(n,20,0,u.icons.add);l(n,19,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,9).ngClassUntouched,e["ɵnov"](n,9).ngClassTouched,e["ɵnov"](n,9).ngClassPristine,e["ɵnov"](n,9).ngClassDirty,e["ɵnov"](n,9).ngClassValid,e["ɵnov"](n,9).ngClassInvalid,e["ɵnov"](n,9).ngClassPending)}))}function Ca(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](3,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),(l()(),e["ɵeld"](4,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeGroupInitiator(l.parent.context.$implicit,l.context.index,l.parent.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1)],(function(l,n){var u=l(n,9,0,n.component.icons.destroy);l(n,8,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function ba(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](3,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),(l()(),e["ɵeld"](4,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeGroupDisk(l.parent.context.$implicit,l.context.index,l.parent.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1)],(function(l,n){var u=l(n,9,0,n.component.icons.destroy);l(n,8,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function ha(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,70,"div",[["class","card mb-2"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,8,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Group"])),(l()(),e["ɵted"](7,null,[": "," "])),(l()(),e["ɵeld"](8,0,null,null,4,"button",[["class","close"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.groups.removeAt(l.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,57,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](15,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,33,{FormControlNames:1}),e["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),e["ɵeld"](18,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","group_id"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](20,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,7,"input",[["class","form-control"],["formControlName","group_id"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,22)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,22).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,22)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,22)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](22,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](24,671744,[[33,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](26,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](27,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](28,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](29,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](30,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,35,{FormControlNames:1}),e["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),e["ɵeld"](33,0,null,0,2,"label",[["class","cd-col-form-label"],["for","members"]],null,null,null,null,null)),(l()(),e["ɵeld"](34,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiators"])),(l()(),e["ɵeld"](36,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ca)),e["ɵdid"](38,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](39,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](40,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](41,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onGroupMemberSelection(u)&&e),e}),Ve.b,Ve.a)),e["ɵdid"](42,638976,null,0,xe.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](43,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](45,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](46,1),(l()(),e["ɵeld"](47,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add initiator"])),(l()(),e["ɵeld"](49,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](50,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](51,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,37,{FormControlNames:1}),e["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),e["ɵeld"](54,0,null,0,2,"label",[["class","cd-col-form-label"],["for","disks"]],null,null,null,null,null)),(l()(),e["ɵeld"](55,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](57,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ba)),e["ɵdid"](59,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](60,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](62,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,null,null,Ve.b,Ve.a)),e["ɵdid"](63,638976,null,0,xe.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},null),(l()(),e["ɵeld"](64,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](66,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](67,1),(l()(),e["ɵeld"](68,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"])),(l()(),e["ɵeld"](70,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,1,0,n.context.index);var e=l(n,12,0,u.icons.destroy);l(n,11,0,e),l(n,15,0),l(n,24,0,"group_id"),l(n,28,0,"group_id"),l(n,30,0);var a=n.context.$implicit.getValue("members");l(n,38,0,a);var t=n.context.$implicit.getValue("members");l(n,42,0,"btn btn-light float-right",t,u.groupMembersSelections[n.context.index],u.messages.groupInitiator);var o=l(n,46,0,u.icons.add);l(n,45,0,o),l(n,51,0);var d=n.context.$implicit.getValue("disks");l(n,59,0,d);var i=n.context.$implicit.getValue("disks");l(n,63,0,"btn btn-light float-right",i,u.groupDiskSelections[n.context.index],u.messages.initiatorImage);var s=l(n,67,0,u.icons.add);l(n,66,0,s)}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending);var u=n.context.$implicit.getValue("group_id");l(n,7,0,u),l(n,14,0,e["ɵnov"](n,15).hasErrors,e["ɵnov"](n,15).hasSuccess),l(n,21,0,e["ɵnov"](n,26).ngClassUntouched,e["ɵnov"](n,26).ngClassTouched,e["ɵnov"](n,26).ngClassPristine,e["ɵnov"](n,26).ngClassDirty,e["ɵnov"](n,26).ngClassValid,e["ɵnov"](n,26).ngClassInvalid,e["ɵnov"](n,26).ngClassPending,e["ɵnov"](n,28).validClass,e["ɵnov"](n,28).invalidClass),l(n,29,0,e["ɵnov"](n,30).hasErrors,e["ɵnov"](n,30).hasSuccess),l(n,50,0,e["ɵnov"](n,51).hasErrors,e["ɵnov"](n,51).hasSuccess)}))}function Ra(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["No items added."]))],null,null)}function Ia(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,31,{FormControlNames:1}),e["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","initiators"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Groups"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"],["formArrayName","groups"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](7,212992,null,0,el.g,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.g]),e["ɵdid"](9,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,ha)),e["ɵdid"](11,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,9,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ra)),e["ɵdid"](15,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](16,0,null,null,6,"button",[["class","btn btn-light float-right"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.addGroup(),e=!1),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add group"]))],(function(l,n){var u=n.component;l(n,1,0),l(n,7,0,"groups"),l(n,11,0,u.groups.controls),l(n,15,0,0===u.groups.controls.length);var e=l(n,20,0,u.icons.add);l(n,19,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,9).ngClassUntouched,e["ɵnov"](n,9).ngClassTouched,e["ɵnov"](n,9).ngClassPristine,e["ɵnov"](n,9).ngClassDirty,e["ɵnov"](n,9).ngClassValid,e["ɵnov"](n,9).ngClassInvalid,e["ɵnov"](n,9).ngClassPending)}))}function Na(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,137,"form",[["name","targetForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var a=!0;return"submit"===n&&(a=!1!==e["ɵnov"](l,2).onSubmit(u)&&a),"reset"===n&&(a=!1!==e["ɵnov"](l,2).onReset()&&a),"submit"===n&&(a=!1!==e["ɵnov"](l,5).onSubmit()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.G,[],null,null),e["ɵdid"](2,540672,[["formDir",4]],0,el.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,el.d,null,[el.l]),e["ɵdid"](4,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](5,16384,null,0,Nl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](6,0,null,null,131,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](8,null,[""," ",""])),e["ɵppd"](9,1),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,117,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](13,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","target_iqn"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Target IQN"])),(l()(),e["ɵeld"](18,0,null,0,25,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,15,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](20,0,null,null,8,"input",[["cdTrim",""],["class","form-control"],["formControlName","target_iqn"],["id","target_iqn"],["name","target_iqn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,21)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,21).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,21)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,21)._compositionEnd(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,26).onInput(u.target.value)&&a),a}),null,null)),e["ɵdid"](21,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](23,671744,[[1,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](25,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](26,16384,null,0,ke,[el.q],null,null),e["ɵdid"](27,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](28,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](29,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](30,0,null,null,4,"button",[["class","btn btn-light"],["id","ecp-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.targetSettingsModal()&&e),e}),null,null)),(l()(),e["ɵeld"](31,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](33,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](34,1),(l()(),e["ɵand"](16777216,null,null,1,null,Fe)),e["ɵdid"](36,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pe)),e["ɵdid"](38,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Se)),e["ɵdid"](40,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ae)),e["ɵdid"](42,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](43,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](44,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](45,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](48,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","portals"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Portals"])),(l()(),e["ɵeld"](50,0,null,0,23,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Oe)),e["ɵdid"](52,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](53,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](54,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](55,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onPortalSelection(u)&&e),e}),Ve.b,Ve.a)),e["ɵdid"](56,638976,null,0,xe.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](57,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](59,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](60,1),(l()(),e["ɵeld"](61,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add portal"])),(l()(),e["ɵeld"](63,0,null,null,7,"input",[["class","form-control"],["formControlName","portals"],["id","portals"],["name","portals"],["type","hidden"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,64)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,64).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,64)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,64)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](64,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](66,671744,[[3,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](68,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](69,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](70,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,je)),e["ɵdid"](72,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](73,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](74,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](75,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](78,0,null,0,1,"label",[["class","cd-col-form-label"],["for","disks"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](80,0,null,0,25,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Me)),e["ɵdid"](82,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](83,0,null,null,7,"input",[["class","form-control"],["formControlName","disks"],["id","disks"],["name","disks"],["type","hidden"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,84)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,84).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,84)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,84)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](84,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](86,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](88,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](89,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](90,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Le)),e["ɵdid"](92,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ze)),e["ɵdid"](94,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](95,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](96,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](97,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onImageSelection(u)&&e),e}),Ve.b,Ve.a)),e["ɵdid"](98,638976,null,0,xe.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](99,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](101,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](102,1),(l()(),e["ɵeld"](103,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"])),(l()(),e["ɵeld"](105,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](106,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](107,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](110,0,null,0,12,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](111,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](112,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","acl_enabled"],["id","acl_enabled"],["name","acl_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,113).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,113).onTouched()&&a),a}),null,null)),e["ɵdid"](113,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](115,671744,[[7,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](117,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](118,4210688,null,0,Mn.a,[[2,Ln.a],ml.a,e.ElementRef],null,null),e["ɵdid"](119,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](120,0,null,null,1,"label",[["class","custom-control-label"],["for","acl_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["ACL authentication"])),(l()(),e["ɵeld"](122,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,He)),e["ɵdid"](124,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,va)),e["ɵdid"](126,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ia)),e["ɵdid"](128,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](129,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](130,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](131,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](132,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](133,0,[""," ",""])),e["ɵppd"](134,1),e["ɵppd"](135,1),(l()(),e["ɵeld"](136,0,null,null,1,"cd-back-button",[],null,null,null,Hn.b,Hn.a)),e["ɵdid"](137,49152,null,0,lu.a,[D.Location,Ql.b],null,null)],(function(l,n){var u=n.component;l(n,2,0,u.targetForm),l(n,5,0,u.targetForm),l(n,13,0),l(n,23,0,"target_iqn"),l(n,28,0,"target_iqn");var a=l(n,34,0,u.icons.deepCheck);l(n,33,0,a),l(n,36,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"required")),l(n,38,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"pattern")),l(n,40,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"iqn")),l(n,42,0,u.hasAdvancedSettings(u.targetForm.getValue("target_controls"))),l(n,45,0),l(n,52,0,u.portals.value),l(n,56,0,"btn btn-light float-right",u.portals.value,u.portalsSelections,u.messages.portals);var t=l(n,60,0,u.icons.add);l(n,59,0,t),l(n,66,0,"portals"),l(n,70,0,"portals"),l(n,72,0,u.targetForm.showError("portals",e["ɵnov"](n,2),"minGateways")),l(n,75,0),l(n,82,0,u.targetForm.getValue("disks")),l(n,86,0,"disks"),l(n,90,0,"disks"),l(n,92,0,u.targetForm.showError("disks",e["ɵnov"](n,2),"dupLunId")),l(n,94,0,u.targetForm.showError("disks",e["ɵnov"](n,2),"dupWwn")),l(n,98,0,"btn btn-light float-right",u.disks.value,u.imagesSelections,u.messages.images);var o=l(n,102,0,u.icons.add);l(n,101,0,o),l(n,107,0),l(n,115,0,"acl_enabled"),l(n,119,0,"acl_enabled"),l(n,124,0,u.cephIscsiConfigVersion>10&&!u.targetForm.getValue("acl_enabled")),l(n,126,0,u.targetForm.getValue("acl_enabled")),l(n,128,0,u.targetForm.getValue("acl_enabled")),l(n,132,0,e["ɵnov"](n,2))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,4).ngClassUntouched,e["ɵnov"](n,4).ngClassTouched,e["ɵnov"](n,4).ngClassPristine,e["ɵnov"](n,4).ngClassDirty,e["ɵnov"](n,4).ngClassValid,e["ɵnov"](n,4).ngClassInvalid,e["ɵnov"](n,4).ngClassPending);var a=e["ɵunv"](n,8,0,l(n,9,0,e["ɵnov"](n.parent,0),u.action)),t=e["ɵunv"](n,8,1,l(n,10,0,e["ɵnov"](n.parent,1),u.resource));l(n,8,0,a,t),l(n,12,0,e["ɵnov"](n,13).hasErrors,e["ɵnov"](n,13).hasSuccess),l(n,20,0,e["ɵnov"](n,25).ngClassUntouched,e["ɵnov"](n,25).ngClassTouched,e["ɵnov"](n,25).ngClassPristine,e["ɵnov"](n,25).ngClassDirty,e["ɵnov"](n,25).ngClassValid,e["ɵnov"](n,25).ngClassInvalid,e["ɵnov"](n,25).ngClassPending,e["ɵnov"](n,28).validClass,e["ɵnov"](n,28).invalidClass),l(n,44,0,e["ɵnov"](n,45).hasErrors,e["ɵnov"](n,45).hasSuccess),l(n,63,0,e["ɵnov"](n,68).ngClassUntouched,e["ɵnov"](n,68).ngClassTouched,e["ɵnov"](n,68).ngClassPristine,e["ɵnov"](n,68).ngClassDirty,e["ɵnov"](n,68).ngClassValid,e["ɵnov"](n,68).ngClassInvalid,e["ɵnov"](n,68).ngClassPending,e["ɵnov"](n,70).validClass,e["ɵnov"](n,70).invalidClass),l(n,74,0,e["ɵnov"](n,75).hasErrors,e["ɵnov"](n,75).hasSuccess),l(n,83,0,e["ɵnov"](n,88).ngClassUntouched,e["ɵnov"](n,88).ngClassTouched,e["ɵnov"](n,88).ngClassPristine,e["ɵnov"](n,88).ngClassDirty,e["ɵnov"](n,88).ngClassValid,e["ɵnov"](n,88).ngClassInvalid,e["ɵnov"](n,88).ngClassPending,e["ɵnov"](n,90).validClass,e["ɵnov"](n,90).invalidClass),l(n,106,0,e["ɵnov"](n,107).hasErrors,e["ɵnov"](n,107).hasSuccess),l(n,112,0,e["ɵnov"](n,117).ngClassUntouched,e["ɵnov"](n,117).ngClassTouched,e["ɵnov"](n,117).ngClassPristine,e["ɵnov"](n,117).ngClassDirty,e["ɵnov"](n,117).ngClassValid,e["ɵnov"](n,117).ngClassInvalid,e["ɵnov"](n,117).ngClassPending,e["ɵnov"](n,119).validClass,e["ɵnov"](n,119).invalidClass);var o=e["ɵunv"](n,133,0,l(n,134,0,e["ɵnov"](n.parent,0),u.action)),d=e["ɵunv"](n,133,1,l(n,135,0,e["ɵnov"](n.parent,1),u.resource));l(n,133,0,o,d)}))}function Ea(l){return e["ɵvid"](0,[e["ɵpid"](0,D.TitleCasePipe,[]),e["ɵpid"](0,ll.a,[]),e["ɵpid"](0,z.a,[]),(l()(),e["ɵeld"](3,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Na)),e["ɵdid"](5,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,5,0,n.component.targetForm)}),null)}function wa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi-target-form",[],null,null,null,Ea,De)),e["ɵdid"](1,114688,null,0,_e.a,[Wu.a,rl.b,Jl.a,fl.m,fl.a,A.a,Wl.a,Ql.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Ta=e["ɵccf"]("cd-iscsi-target-form",_e.a,wa,{},{},[]),ya=u("Vhfg"),Va=u("cxJu");u.d(n,"BlockModuleNgFactory",(function(){return xa})),u.d(n,"RoutedBlockModuleNgFactory",(function(){return qa}));var xa=e["ɵcmf"](a.a,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[t.a,o.a,d.a,i.a,i.b,s.a,r.a,c.a,p.a,m.a,g.a,f.a,v.a,C.a,b.a,h.a,R.a,I.a,I.c,I.b,I.d,N.a,E.a,w.a,T.a,y.a,V.a,x.a,q.a,k.a,_.a]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,D.NgLocalization,D.NgLocaleLocalization,[e.LOCALE_ID,[2,D["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,P.a,P.a,[]),e["ɵmpd"](4608,S.a,S.a,[A.a]),e["ɵmpd"](4608,D.DatePipe,D.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,B.a,B.a,[U.a]),e["ɵmpd"](4608,$.a,$.a,[U.a]),e["ɵmpd"](4608,M.a,M.a,[U.a]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[]),e["ɵmpd"](4608,K.a,K.a,[]),e["ɵmpd"](4608,Z.a,Z.a,[D.DatePipe]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,W.a,W.a,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,Y.a,Y.a,[]),e["ɵmpd"](4608,X.a,X.a,[]),e["ɵmpd"](4608,H.a,H.a,[A.a]),e["ɵmpd"](4608,ll.a,ll.a,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,ul.a,ul.a,[]),e["ɵmpd"](4608,el.D,el.D,[]),e["ɵmpd"](4608,el.h,el.h,[]),e["ɵmpd"](4608,al.b,al.b,[]),e["ɵmpd"](4608,tl.a,tl.a,[]),e["ɵmpd"](4608,ol.a,ol.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,dl.a,dl.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,ol.a,e.ApplicationRef]),e["ɵmpd"](4608,il.c,il.c,[]),e["ɵmpd"](4608,sl.a,sl.a,[]),e["ɵmpd"](4608,rl.b,rl.b,[e.RendererFactory2,dl.a]),e["ɵmpd"](4608,cl.y,cl.y,[D.DOCUMENT]),e["ɵmpd"](4608,cl.r,cl.r,[]),e["ɵmpd"](4608,cl.a,cl.a,[]),e["ɵmpd"](4608,pl.f,pl.f,[]),e["ɵmpd"](4608,ml.a,ml.a,[]),e["ɵmpd"](4608,gl.a,gl.a,[fl.m,ml.a]),e["ɵmpd"](4608,vl.f,vl.f,[]),e["ɵmpd"](4608,Cl.t,Cl.t,[]),e["ɵmpd"](4608,Cl.v,Cl.v,[]),e["ɵmpd"](4608,Cl.a,Cl.a,[]),e["ɵmpd"](4608,Cl.h,Cl.h,[]),e["ɵmpd"](4608,Cl.d,Cl.d,[]),e["ɵmpd"](4608,Cl.j,Cl.j,[]),e["ɵmpd"](4608,Cl.l,Cl.l,[]),e["ɵmpd"](4608,Cl.u,Cl.u,[Cl.v,Cl.l]),e["ɵmpd"](4608,bl.a,bl.a,[]),e["ɵmpd"](1073742336,D.CommonModule,D.CommonModule,[]),e["ɵmpd"](1073742336,vl.d,vl.d,[]),e["ɵmpd"](1073742336,hl.a,hl.a,[]),e["ɵmpd"](1073742336,el.C,el.C,[]),e["ɵmpd"](1073742336,el.n,el.n,[]),e["ɵmpd"](1073742336,el.y,el.y,[]),e["ɵmpd"](1073742336,al.c,al.c,[]),e["ɵmpd"](1073742336,tl.d,tl.d,[]),e["ɵmpd"](1073742336,il.d,il.d,[]),e["ɵmpd"](1073742336,sl.d,sl.d,[]),e["ɵmpd"](1073742336,Rl.b,Rl.b,[]),e["ɵmpd"](1073742336,rl.e,rl.e,[]),e["ɵmpd"](1073742336,Il.a,Il.a,[]),e["ɵmpd"](1073742336,pl.e,pl.e,[]),e["ɵmpd"](1073742336,Nl.f,Nl.f,[]),e["ɵmpd"](1073742336,El.ClickOutsideModule,El.ClickOutsideModule,[]),e["ɵmpd"](1073742336,wl.b,wl.b,[]),e["ɵmpd"](1073742336,fl.q,fl.q,[[2,fl.v],[2,fl.m]]),e["ɵmpd"](1073742336,Tl.a,Tl.a,[]),e["ɵmpd"](1073742336,cl.u,cl.u,[]),e["ɵmpd"](1073742336,yl.a,yl.a,[]),e["ɵmpd"](1073742336,Vl.a,Vl.a,[]),e["ɵmpd"](1073742336,xl.a,xl.a,[]),e["ɵmpd"](1073742336,ql.a,ql.a,[]),e["ɵmpd"](1073742336,Cl.g,Cl.g,[]),e["ɵmpd"](1073742336,kl.b,kl.b,[]),e["ɵmpd"](1073742336,a.a,a.a,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,pl.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),qa=e["ɵcmf"](a.b,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[t.a,o.a,d.a,i.a,i.b,s.a,r.a,c.a,p.a,m.a,g.a,f.a,v.a,C.a,b.a,h.a,R.a,I.a,I.c,I.b,I.d,N.a,E.a,w.a,T.a,y.a,V.a,x.a,q.a,k.a,_.a,pn,hn,_n,Bn,Mu,ie,Ee,Ta]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,D.NgLocalization,D.NgLocaleLocalization,[e.LOCALE_ID,[2,D["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,P.a,P.a,[]),e["ɵmpd"](4608,S.a,S.a,[A.a]),e["ɵmpd"](4608,D.DatePipe,D.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,B.a,B.a,[U.a]),e["ɵmpd"](4608,$.a,$.a,[U.a]),e["ɵmpd"](4608,M.a,M.a,[U.a]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[]),e["ɵmpd"](4608,K.a,K.a,[]),e["ɵmpd"](4608,Z.a,Z.a,[D.DatePipe]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,W.a,W.a,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,Y.a,Y.a,[]),e["ɵmpd"](4608,X.a,X.a,[]),e["ɵmpd"](4608,H.a,H.a,[A.a]),e["ɵmpd"](4608,ll.a,ll.a,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,ul.a,ul.a,[]),e["ɵmpd"](4608,el.D,el.D,[]),e["ɵmpd"](4608,el.h,el.h,[]),e["ɵmpd"](4608,al.b,al.b,[]),e["ɵmpd"](4608,tl.a,tl.a,[]),e["ɵmpd"](4608,ol.a,ol.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,dl.a,dl.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,ol.a,e.ApplicationRef]),e["ɵmpd"](4608,il.c,il.c,[]),e["ɵmpd"](4608,sl.a,sl.a,[]),e["ɵmpd"](4608,rl.b,rl.b,[e.RendererFactory2,dl.a]),e["ɵmpd"](4608,cl.y,cl.y,[D.DOCUMENT]),e["ɵmpd"](4608,cl.r,cl.r,[]),e["ɵmpd"](4608,cl.a,cl.a,[]),e["ɵmpd"](4608,pl.f,pl.f,[]),e["ɵmpd"](4608,ml.a,ml.a,[]),e["ɵmpd"](4608,gl.a,gl.a,[fl.m,ml.a]),e["ɵmpd"](4608,vl.f,vl.f,[]),e["ɵmpd"](4608,Cl.t,Cl.t,[]),e["ɵmpd"](4608,Cl.v,Cl.v,[]),e["ɵmpd"](4608,Cl.a,Cl.a,[]),e["ɵmpd"](4608,Cl.h,Cl.h,[]),e["ɵmpd"](4608,Cl.d,Cl.d,[]),e["ɵmpd"](4608,Cl.j,Cl.j,[]),e["ɵmpd"](4608,Cl.l,Cl.l,[]),e["ɵmpd"](4608,Cl.u,Cl.u,[Cl.v,Cl.l]),e["ɵmpd"](4608,bl.a,bl.a,[]),e["ɵmpd"](1073742336,D.CommonModule,D.CommonModule,[]),e["ɵmpd"](1073742336,vl.d,vl.d,[]),e["ɵmpd"](1073742336,hl.a,hl.a,[]),e["ɵmpd"](1073742336,el.C,el.C,[]),e["ɵmpd"](1073742336,el.n,el.n,[]),e["ɵmpd"](1073742336,el.y,el.y,[]),e["ɵmpd"](1073742336,al.c,al.c,[]),e["ɵmpd"](1073742336,tl.d,tl.d,[]),e["ɵmpd"](1073742336,il.d,il.d,[]),e["ɵmpd"](1073742336,sl.d,sl.d,[]),e["ɵmpd"](1073742336,Rl.b,Rl.b,[]),e["ɵmpd"](1073742336,rl.e,rl.e,[]),e["ɵmpd"](1073742336,Il.a,Il.a,[]),e["ɵmpd"](1073742336,pl.e,pl.e,[]),e["ɵmpd"](1073742336,Nl.f,Nl.f,[]),e["ɵmpd"](1073742336,El.ClickOutsideModule,El.ClickOutsideModule,[]),e["ɵmpd"](1073742336,wl.b,wl.b,[]),e["ɵmpd"](1073742336,fl.q,fl.q,[[2,fl.v],[2,fl.m]]),e["ɵmpd"](1073742336,Tl.a,Tl.a,[]),e["ɵmpd"](1073742336,cl.u,cl.u,[]),e["ɵmpd"](1073742336,yl.a,yl.a,[]),e["ɵmpd"](1073742336,Vl.a,Vl.a,[]),e["ɵmpd"](1073742336,xl.a,xl.a,[]),e["ɵmpd"](1073742336,ql.a,ql.a,[]),e["ɵmpd"](1073742336,Cl.g,Cl.g,[]),e["ɵmpd"](1073742336,kl.b,kl.b,[]),e["ɵmpd"](1073742336,a.a,a.a,[]),e["ɵmpd"](1073742336,a.b,a.b,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,pl.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,fl.k,(function(){return[[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"rbd",canActivate:[ya.a],data:a.c,children:[{path:"",component:Zl.a},{path:"namespaces",component:mn.a,data:a.d},{path:"trash",component:Rn.a,data:a.j},{path:"performance",component:An.a,data:a.k},{path:"create",component:nu.a,data:a.l},{path:"edit/:image_spec",component:nu.a,data:a.m},{path:"clone/:image_spec/:snap",component:nu.a,data:a.n},{path:"copy/:image_spec",component:nu.a,data:a.o},{path:"copy/:image_spec/:snap",component:nu.a,data:a.p}]},{path:"mirroring",component:Va.a,canActivate:[ya.a],data:a.q},{path:"iscsi",canActivate:[ya.a],data:a.e,children:[{path:"",redirectTo:"overview",pathMatch:"full"},{path:"overview",component:Ju.a,data:a.f},{path:"targets",data:a.g,children:[{path:"",component:fe.a},{path:"create",component:_e.a,data:a.h},{path:"edit/:target_iqn",component:_e.a,data:a.i}]}]}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.d6b08e1c042ba6fccdd6.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/5.d6b08e1c042ba6fccdd6.js
deleted file mode 100644 (file)
index aaced57..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{J6Oi:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),a=u("k/xb"),t=u("MdoF"),o=u("ES0t"),d=u("Xg1U"),i=u("z5nN"),s=u("iutN"),r=u("pMnS"),c=u("EEJc"),p=u("PEr+"),m=u("a40w"),g=u("hfeG"),f=u("QUzE"),v=u("E7j4"),C=u("xvu0"),b=u("RIVN"),h=u("nP0W"),I=u("VBM6"),R=u("atuK"),N=u("JIi+"),w=u("0BYw"),E=u("3IYD"),T=u("I4Qz"),y=u("0rTx"),V=u("lz+O"),x=u("u2XS"),q=u("nhAp"),k=u("l7Jr"),_=u("bUo2"),D=u("SVse"),F=u("yT6U"),P=u("4DD9"),S=u("iExv"),A=u("GiVz"),O=u("85J/"),j=u("+0ag"),U=u("aXbf"),B=u("Fgil"),$=u("IzCI"),M=u("o4+5"),L=u("Dwqy"),z=u("uYzU"),G=u("FFMq"),K=u("E2fk"),Z=u("a0VL"),J=u("nSDx"),W=u("SB+Q"),Q=u("TYzs"),Y=u("BQkM"),X=u("dEH0"),H=u("G1/K"),ll=u("8xTl"),nl=u("TJUb"),ul=u("efK2"),el=u("s7LF"),al=u("CNMR"),tl=u("KOzp"),ol=u("2uy1"),dl=u("z/SZ"),il=u("38Bd"),sl=u("978R"),rl=u("LqlI"),cl=u("w9WL"),pl=u("FE24"),ml=u("aexS"),gl=u("Avrn"),fl=u("iInd"),vl=u("2ZVE"),Cl=u("ienR"),bl=u("gk6K"),hl=u("9Xeq"),Il=u("hrfs"),Rl=u("yGOH"),Nl=u("+gVj"),wl=u("bxSN"),El=u("WF9J"),Tl=u("V/fk"),yl=u("ChqD"),Vl=u("pL04"),xl=u("PCNd"),ql=u("kccj"),kl=u("yYhs"),_l=u("C6Ij"),Dl=u("AWcq"),Fl=u("pKUh");class Pl{constructor(l,n){this.authStorageService=l,this.router=n,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var Sl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Al(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/performance")&&e),e}),null,null)),e["ɵdid"](1,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){l(n,1,0,"Overall Performance","/block/rbd/performance"===n.component.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function Ol(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,Fl.b,Fl.a)),e["ɵdid"](1,180224,null,0,vl.e,[vl.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Images"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Namespaces"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/namespaces")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](6,0,null,0,1,"tab",[["heading","Trash"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/rbd/trash")&&e),e}),null,null)),e["ɵdid"](7,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵand"](16777216,null,0,1,null,Al)),e["ɵdid"](9,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Images","/block/rbd"===u.url),l(n,5,0,"Namespaces","/block/rbd/namespaces"===u.url),l(n,7,0,"Trash","/block/rbd/trash"===u.url),l(n,9,0,u.grafanaPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby),l(n,6,0,e["ɵnov"](n,7).id,e["ɵnov"](n,7).active,e["ɵnov"](n,7).addClass,e["ɵnov"](n,7).role,e["ɵnov"](n,7).ariaLabelledby)}))}var jl=u("25BL"),Ul=u("uIqm"),Bl=u("NUGo"),$l=u("S7zO"),Ml=u("JBea"),Ll=u("VTlA"),zl=u("ufoC"),Gl=u("mSOc"),Kl=u("EgGo"),Zl=u("5GyT"),Jl=u("F83c"),Wl=u("kn/O"),Ql=u("sne2"),Yl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Xl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,_l.b,_l.a)),e["ɵdid"](1,114688,null,0,Dl.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function Hl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,0,"div",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(l,n){l(n,0,0,"Only available for RBD images with <strong>fast-diff</strong> enabled")}))}function ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["/",""]))],null,(function(l,n){l(n,1,0,n.parent.parent.context.value.pool_namespace)}))}function nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,ln)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵted"](4,null,["/","@",""]))],(function(l,n){l(n,3,0,n.parent.context.value.pool_namespace)}),(function(l,n){l(n,1,0,n.parent.context.value.pool_name),l(n,4,0,n.parent.context.value.image_name,n.parent.context.value.snap_name)}))}function un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function en(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,nn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,un)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.value),l(n,3,0,!n.context.value)}),null)}function an(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,[" You are about to flatten "])),(l()(),e["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](2,null,["",""])),(l()(),e["ɵted"](-1,null,[". "])),(l()(),e["ɵeld"](4,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" All blocks will be copied from parent "])),(l()(),e["ɵeld"](7,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](8,null,["",""])),(l()(),e["ɵted"](-1,null,[" to child "])),(l()(),e["ɵeld"](10,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](11,null,["",""])),(l()(),e["ɵted"](-1,null,[".\n"]))],null,(function(l,n){l(n,2,0,n.context.$implicit.child),l(n,8,0,n.context.$implicit.parent),l(n,11,0,n.context.$implicit.child)}))}function tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["",""]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function on(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The following snapshots are currently protected and will be removed:"])),(l()(),e["ɵeld"](3,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,tn)),e["ɵdid"](5,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.parent.parent.context.snapshots)}),null)}function dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"div",[["class","alert alert-warning"],["role","alert"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Deleting this image will also delete all its snapshots."])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,on)),e["ɵdid"](5,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,5,0,n.parent.context.snapshots.length>0)}),null)}function sn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,dn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.hasSnapshots)}),null)}function rn(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](671088640,2,{usageTpl:0}),e["ɵqud"](402653184,3,{parentTpl:0}),e["ɵqud"](671088640,4,{nameTpl:0}),e["ɵqud"](402653184,5,{flattenTpl:0}),e["ɵqud"](402653184,6,{deleteTpl:0}),(l()(),e["ɵeld"](6,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](7,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,Xl)),e["ɵdid"](9,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](10,0,null,null,5,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","unique_id"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"setExpandedRow"===n&&(e=!1!==a.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](11,2867200,[[1,4],["table",4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"],searchableObjects:[7,"searchableObjects"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](12,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](13,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](14,0,null,3,1,"cd-rbd-details",[["cdTableDetail",""]],null,null,null,N.c,N.b)),e["ɵdid"](15,49152,null,0,Ml.a,[],{selection:[0,"selection"]},null),(l()(),e["ɵand"](0,[["usageNotAvailableTooltipTpl",2]],null,0,null,Hl)),(l()(),e["ɵand"](0,[[3,2],["parentTpl",2]],null,0,null,en)),(l()(),e["ɵand"](0,[[5,2],["flattenTpl",2]],null,0,null,an)),(l()(),e["ɵand"](0,[[6,2],["deleteTpl",2]],null,0,null,sn))],(function(l,n){var u=n.component;l(n,7,0),l(n,9,0,u.viewCacheStatusList),l(n,11,0,u.images,u.columns,"flex",!0,"unique_id","true","single",!0),l(n,13,0,u.permission,u.selection,u.tableActions),l(n,15,0,u.expandedRow)}),null)}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"cd-rbd-list",[],null,null,null,rn,Yl)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵprd"](256,null,Kl.a,Zl.b,[]),e["ɵdid"](3,114688,null,0,Zl.a,[ml.a,Jl.a,B.a,M.a,rl.b,Wl.a,Ll.a,A.a,Kl.a,Ql.b],null,null)],(function(l,n){l(n,3,0)}),null)}var pn=e["ɵccf"]("cd-rbd-list",Zl.a,cn,{},{},[]),mn=u("Z5tW"),gn=u("Ekvf"),fn=u("9nlD"),vn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](1,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵeld"](2,0,null,null,4,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"fetchData"===n&&(e=!1!==a.refresh()&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](3,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),e["ɵeld"](4,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](6,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,3,0,u.namespaces,u.columns,"flex","id","true","single"),l(n,6,0,u.permission,u.selection,u.tableActions)}),null)}function bn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rbd-namespace-list",[],null,null,null,Cn,vn)),e["ɵprd"](135680,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,114688,null,0,mn.a,[ml.a,Jl.a,gn.a,rl.b,fn.a,A.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var hn=e["ɵccf"]("cd-rbd-namespace-list",mn.a,bn,{},{},[]),In=u("chpi"),Rn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,_l.b,_l.a)),e["ɵdid"](1,114688,null,0,Dl.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function wn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"button",[["class","btn btn-light"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.purgeModal()&&e),e}),null,null)),(l()(),e["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](3,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](4,1),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Purge Trash"]))],(function(l,n){var u=l(n,4,0,n.component.icons.destroy);l(n,3,0,u)}),(function(l,n){l(n,0,0,n.component.disablePurgeBtn)}))}function En(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Expired at"]))],null,null)}function Tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Protected until"]))],null,null)}function yn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,En)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tn)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵted"](4,null,[" ","\n"])),e["ɵppd"](5,1)],(function(l,n){l(n,1,0,n.context.row.cdIsExpired),l(n,3,0,!n.context.row.cdIsExpired)}),(function(l,n){var u=e["ɵunv"](n,4,0,l(n,5,0,e["ɵnov"](n.parent,0),n.context.value));l(n,4,0,u)}))}function Vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"p",[["class","text-danger"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,3,"strong",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,null,null,null,null,null,null,null)),(l()(),e["ɵted"](3,null,["This image is protected until ","."])),e["ɵppd"](4,1)],null,(function(l,n){var u=e["ɵunv"](n,3,0,l(n,4,0,e["ɵnov"](n.parent.parent,0),n.parent.context.$implicit));l(n,3,0,u)}))}function xn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Vn)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,!n.component.isExpired(n.context.$implicit))}),null)}function qn(l){return e["ɵvid"](0,[e["ɵpid"](0,Z.a,[D.DatePipe]),e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](402653184,2,{expiresTpl:0}),e["ɵqud"](402653184,3,{deleteTpl:0}),(l()(),e["ɵeld"](4,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](5,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,Nn)),e["ɵdid"](7,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](8,0,null,null,6,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(l,n,u){var e=!0;return"updateSelection"===n&&(e=!1!==l.component.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](9,2867200,[[1,4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),e["ɵeld"](10,0,null,1,4,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](12,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wn)),e["ɵdid"](14,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,[[2,2],["expiresTpl",2]],null,0,null,yn)),(l()(),e["ɵand"](0,[[3,2],["deleteTpl",2]],null,0,null,xn))],(function(l,n){var u=n.component;l(n,5,0),l(n,7,0,u.viewCacheStatusList),l(n,9,0,u.images,u.columns,"flex","id","true","single"),l(n,12,0,u.permission,u.selection,u.tableActions),l(n,14,0,u.permission.delete)}),null)}function kn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rbd-trash-list",[],null,null,null,qn,Rn)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,114688,null,0,In.a,[ml.a,Jl.a,rl.b,Z.a,Ll.a,Wl.a,A.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var _n=e["ɵccf"]("cd-rbd-trash-list",In.a,kn,{},{},[]),Dn=u("a278"),Fn=u("insk"),Pn=u("cUpR"),Sn=u("20UP"),An=u("WkyA"),On=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function jn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-tabs",[],null,null,null,Ol,Sl)),e["ɵdid"](1,114688,null,0,Pl,[ml.a,fl.m],null,null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","41FrpeUiz"]],null,null,null,Dn.b,Dn.a)),e["ɵdid"](3,638976,null,0,Fn.a,[Pn.b,Sn.a,A.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0),l(n,3,0,"rbd-overview?","two","41FrpeUiz")}),null)}function Un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-performance",[],null,null,null,jn,On)),e["ɵdid"](1,49152,null,0,An.a,[],null,null)],null,null)}var Bn=e["ɵccf"]("cd-rbd-performance",An.a,Un,{},{},[]),$n=u("mXUL"),Mn=u("4HWh"),Ln=u("p4Cf"),zn=u("IZUe"),Gn=u("EmSq"),Kn=u("BH9v"),Zn=u("rFfW"),Jn=u("o8EM"),Wn=u("gp3X"),Qn=u("sb0X"),Yn=u("KVJa"),Xn=u("Z21x"),Hn=u("MyVl"),lu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,2,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," from"])),e["ɵppd"](6,1),(l()(),e["ɵeld"](7,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,6,"input",[["class","form-control"],["formControlName","parent"],["id","parent"],["name","parent"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,9).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,9)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](9,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](11,671744,[[1,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](13,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](14,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){l(n,1,0),l(n,11,0,"parent"),l(n,14,0,"parent")}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess);var a=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n.parent,0),u.action));l(n,5,0,a),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function uu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["'/' and '@' are not allowed."]))],null,null)}function au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","pool"],["id","pool"],["name","pool"],["placeholder","Pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"pool"),l(n,6,0,"pool")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No rbd pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function du(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a pool --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","pool"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tu)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ou)),e["ɵdid"](10,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,du)),e["ɵdid"](12,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,iu)),e["ɵdid"](14,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"pool"),l(n,6,0,"pool"),l(n,8,0,null===u.pools),l(n,10,0,null!==u.pools&&0===u.pools.length),l(n,12,0,null!==u.pools&&u.pools.length>0),l(n,14,0,u.pools)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,2)],(function(l,n){var u=n.component;l(n,1,0);var e=l(n,8,0,u.icons.spinner,u.icons.spin);l(n,7,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","namespace"],["id","namespace"],["name","namespace"],["placeholder","Namespace..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"namespace"),l(n,6,0,"namespace")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function mu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function gu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No namespaces available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a namespace --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","namespace"],["id","namespace"],["name","namespace"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,mu)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,gu)),e["ɵdid"](10,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fu)),e["ɵdid"](12,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vu)),e["ɵdid"](14,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"namespace"),l(n,6,0,"namespace"),l(n,8,0,null===u.pools),l(n,10,0,null!==u.pools&&0===u.pools.length),l(n,12,0,null!==u.pools&&u.pools.length>0),l(n,14,0,u.namespaces)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function bu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,10,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","pool"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" Namespace "])),(l()(),e["ɵeld"](6,0,null,0,4,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,pu)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Cu)),e["ɵdid"](10,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,8,0,"editing"===u.mode||!u.poolPermission.read),l(n,10,0,"editing"!==u.mode&&u.poolPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function hu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","dataPool"],["id","dataPool"],["name","dataPool"],["placeholder","Data pool name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,1)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](3,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"dataPool"),l(n,6,0,"dataPool")}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function Iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- No data pools available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a data pool -- "]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function wu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.pool_name),l(n,2,0,n.context.$implicit.pool_name)}),(function(l,n){l(n,3,0,n.context.$implicit.pool_name)}))}function Eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","dataPool"],["id","dataPool"],["name","dataPool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0,t=l.component;return"change"===n&&(a=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,1).onTouched()&&a),"change"===n&&(a=!1!==t.onDataPoolChange(u.target.value)&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](3,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](5,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](6,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Iu)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ru)),e["ɵdid"](10,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Nu)),e["ɵdid"](12,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wu)),e["ɵdid"](14,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"dataPool"),l(n,6,0,"dataPool"),l(n,8,0,null===u.dataPools),l(n,10,0,null!==u.dataPools&&0===u.dataPools.length),l(n,12,0,null!==u.dataPools&&u.dataPools.length>0),l(n,14,0,u.dataPools)}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function Tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function yu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,7,"label",[["class","cd-col-form-label"],["for","dataPool"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,4,"span",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpod"](8,{required:0}),(l()(),e["ɵted"](-1,null,["Data pool"])),(l()(),e["ɵeld"](10,0,null,null,1,"cd-helper",[["html","Dedicated pool that stores the object-data of the RBD."]],null,null,null,Mn.b,Mn.a)),e["ɵdid"](11,49152,null,0,Ln.a,[],{html:[0,"html"]},null),(l()(),e["ɵeld"](12,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,hu)),e["ɵdid"](14,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Eu)),e["ɵdid"](16,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tu)),e["ɵdid"](18,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var a=l(n,8,0,"editing"!==u.mode);l(n,7,0,a),l(n,11,0,"Dedicated pool that stores the object-data of the RBD."),l(n,14,0,"editing"===u.mode||!u.poolPermission.read),l(n,16,0,"editing"!==u.mode&&u.poolPermission.read),l(n,18,0,u.rbdForm.showError("dataPool",e["ɵnov"](n.parent,5),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess)}))}function Vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["You have to increase the size."]))],null,null)}function qu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-helper",[],null,null,null,Mn.b,Mn.a)),e["ɵdid"](1,49152,null,0,Ln.a,[],{html:[0,"html"]},null)],(function(l,n){l(n,1,0,e["ɵinlineInterpolate"](1,"",n.parent.context.$implicit.helperHtml,""))}),null)}function ku(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,2).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,2).onTouched()&&a),a}),null,null)),e["ɵdid"](2,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](4,671744,[[17,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](6,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](7,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](8,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,qu)),e["ɵdid"](11,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,7,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,11,0,n.context.$implicit.helperHtml)}),(function(l,n){l(n,1,1,[e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,""),e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,""),e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass]),l(n,8,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.key,"")),l(n,9,0,n.context.$implicit.desc)}))}function _u(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"a",[["class","float-right margin-right-md"],["href",""]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.advancedEnabled=!0,e=!1),e}),null,null)),(l()(),e["ɵted"](-1,null,["Advanced..."]))],null,null)}function Du(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required because stripe count is defined!"]))],null,null)}function Su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Stripe unit is greater than object size."]))],null,null)}function Au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required because stripe unit is defined!"]))],null,null)}function Ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Stripe count must be greater than 0."]))],null,null)}function ju(l){return e["ɵvid"](0,[e["ɵpid"](0,D.TitleCasePipe,[]),e["ɵpid"](0,ll.a,[]),(l()(),e["ɵeld"](2,0,null,null,187,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,186,"form",[["name","rbdForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var a=!0;return"submit"===n&&(a=!1!==e["ɵnov"](l,5).onSubmit(u)&&a),"reset"===n&&(a=!1!==e["ɵnov"](l,5).onReset()&&a),"submit"===n&&(a=!1!==e["ɵnov"](l,8).onSubmit()&&a),a}),null,null)),e["ɵdid"](4,16384,null,0,el.G,[],null,null),e["ɵdid"](5,540672,[["formDir",4]],0,el.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,el.d,null,[el.l]),e["ɵdid"](7,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](8,16384,null,0,Nl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](9,0,null,null,180,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](11,null,[""," ",""])),e["ɵppd"](12,1),e["ɵppd"](13,1),(l()(),e["ɵeld"](14,0,null,null,166,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,nu)),e["ɵdid"](16,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](17,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](18,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](21,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](23,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](24,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,25)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,25).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,25)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,25)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](25,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](27,671744,[[3,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](29,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](30,4210688,null,0,zn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](31,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,uu)),e["ɵdid"](33,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,eu)),e["ɵdid"](35,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](36,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onPoolChange(u.target.value)&&e),e}),$n.b,$n.a)),e["ɵdid"](37,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](40,0,null,0,4,"label",[["class","cd-col-form-label"],["for","pool"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](42,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](43,{required:0}),(l()(),e["ɵted"](-1,null,["Pool"])),(l()(),e["ɵeld"](45,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,au)),e["ɵdid"](47,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,su)),e["ɵdid"](49,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ru)),e["ɵdid"](51,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,cu)),e["ɵdid"](53,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bu)),e["ɵdid"](55,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](56,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](57,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](60,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](62,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","useDataPool"],["id","useDataPool"],["name","useDataPool"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0,t=l.component;return"change"===n&&(a=!1!==e["ɵnov"](l,63).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,63).onTouched()&&a),"change"===n&&(a=!1!==t.onUseDataPoolChange()&&a),a}),null,null)),e["ɵdid"](63,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](65,671744,[[11,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](67,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](68,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](69,0,null,null,1,"label",[["class","custom-control-label"],["for","useDataPool"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Use a dedicated data pool"])),(l()(),e["ɵand"](16777216,null,null,1,null,yu)),e["ɵdid"](72,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](73,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](74,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](77,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Size"])),(l()(),e["ɵeld"](79,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](80,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","GiB"],["formControlName","size"],["id","size"],["name","size"],["placeholder","e.g., 10GiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,81)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,81).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,81)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,81)._compositionEnd(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,86).onBlur(u.target.value)&&a),a}),null,null)),e["ɵdid"](81,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](83,671744,[[15,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](85,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](86,81920,null,0,Gn.a,[e.ElementRef,el.q,B.a,U.a],{defaultUnit:[0,"defaultUnit"]},null),e["ɵdid"](87,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Vu)),e["ɵdid"](89,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,xu)),e["ɵdid"](91,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](92,0,null,null,11,"div",[["class","form-group row"],["formGroupName","features"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](93,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](95,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](96,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](99,0,null,0,1,"label",[["class","cd-col-form-label"],["for","features"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Features"])),(l()(),e["ɵeld"](101,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ku)),e["ɵdid"](103,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](104,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](105,0,null,null,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,_u)),e["ɵdid"](107,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](108,0,null,null,72,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e["ɵeld"](109,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Advanced"])),(l()(),e["ɵeld"](111,0,null,null,67,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](112,0,null,null,1,"h3",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Striping"])),(l()(),e["ɵeld"](114,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](115,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](118,0,null,0,1,"label",[["class","cd-col-form-label"],["for","size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Object size"])),(l()(),e["ɵeld"](120,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](121,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","obj_size"],["id","obj_size"],["name","obj_size"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,122).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,122).onTouched()&&a),a}),null,null)),e["ɵdid"](122,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](124,671744,[[19,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](126,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](127,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Du)),e["ɵdid"](129,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](130,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](131,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](134,0,null,0,4,"label",[["class","cd-col-form-label"],["for","stripingUnit"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](136,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](137,{required:0}),(l()(),e["ɵted"](-1,null,["Stripe unit"])),(l()(),e["ɵeld"](139,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](140,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","stripingUnit"],["id","stripingUnit"],["name","stripingUnit"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,141).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,141).onTouched()&&a),a}),null,null)),e["ɵdid"](141,16384,null,0,el.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.A]),e["ɵdid"](143,671744,[[21,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](145,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](146,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](147,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](148,147456,null,0,el.v,[e.ElementRef,e.Renderer2,[2,el.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](149,147456,null,0,el.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select stripe unit --"])),(l()(),e["ɵand"](16777216,null,null,1,null,Fu)),e["ɵdid"](152,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pu)),e["ɵdid"](154,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Su)),e["ɵdid"](156,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](157,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](158,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](161,0,null,0,4,"label",[["class","cd-col-form-label"],["for","stripingCount"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](163,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](164,{required:0}),(l()(),e["ɵted"](-1,null,["Stripe count"])),(l()(),e["ɵeld"](166,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](167,0,null,null,7,"input",[["class","form-control"],["formControlName","stripingCount"],["id","stripingCount"],["name","stripingCount"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,168)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,168).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,168)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,168)._compositionEnd(u.target.value)&&a),"change"===n&&(a=!1!==e["ɵnov"](l,169).onChange(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,169).onChange(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,169).onTouched()&&a),a}),null,null)),e["ɵdid"](168,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵdid"](169,16384,null,0,el.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l,n){return[l,n]}),[el.e,el.w]),e["ɵdid"](171,671744,[[23,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](173,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](174,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Au)),e["ɵdid"](176,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ou)),e["ɵdid"](178,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](179,0,null,null,1,"cd-rbd-configuration-form",[],null,[[null,"changes"]],(function(l,n,u){var e=!0;return"changes"===n&&(e=!1!==(l.component.getDirtyConfigurationValues=u)&&e),e}),Kn.b,Kn.a)),e["ɵdid"](180,114688,null,0,Zn.a,[U.a,Jn.a],{form:[0,"form"],initializeData:[1,"initializeData"]},{changes:"changes"}),(l()(),e["ɵeld"](181,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](182,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](183,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Wn.b,Wn.a)),e["ɵdid"](184,114688,null,0,Qn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](185,0,[""," ",""])),e["ɵppd"](186,1),e["ɵppd"](187,1),(l()(),e["ɵeld"](188,0,null,null,1,"cd-back-button",[],null,null,null,Yn.b,Yn.a)),e["ɵdid"](189,49152,null,0,Xn.a,[D.Location,Ql.b],null,null)],(function(l,n){var u=n.component;l(n,5,0,u.rbdForm),l(n,8,0,u.rbdForm),l(n,16,0,u.rbdForm.getValue("parent")),l(n,18,0),l(n,27,0,"name"),l(n,30,0,""),l(n,31,0,"name"),l(n,33,0,u.rbdForm.showError("name",e["ɵnov"](n,5),"required")),l(n,35,0,u.rbdForm.showError("name",e["ɵnov"](n,5),"pattern")),l(n,37,0);var a=l(n,43,0,"editing"!==u.mode);l(n,42,0,"cd-col-form-label",a),l(n,47,0,"editing"===u.mode||!u.poolPermission.read),l(n,49,0,"editing"!==u.mode&&u.poolPermission.read),l(n,51,0,u.rbdForm.showError("pool",e["ɵnov"](n,5),"required")),l(n,53,0,"editing"!==u.mode&&u.rbdForm.getValue("pool")&&null===u.namespaces),l(n,55,0,"editing"===u.mode&&u.rbdForm.getValue("namespace")||"editing"!==u.mode&&(u.namespaces&&u.namespaces.length>0||!u.poolPermission.read)),l(n,57,0),l(n,65,0,"useDataPool"),l(n,68,0,"useDataPool"),l(n,72,0,u.rbdForm.getValue("useDataPool")),l(n,74,0),l(n,83,0,"size"),l(n,86,0,"GiB"),l(n,87,0,"size"),l(n,89,0,u.rbdForm.showError("size",e["ɵnov"](n,5),"required")),l(n,91,0,u.rbdForm.showError("size",e["ɵnov"](n,5),"invalidSizeObject")),l(n,93,0,"features"),l(n,96,0),l(n,103,0,u.featuresList),l(n,107,0,!u.advancedEnabled),l(n,115,0),l(n,124,0,"obj_size"),l(n,127,0,"obj_size"),l(n,129,0,u.objectSizes),l(n,131,0);var t=l(n,137,0,u.rbdForm.getValue("stripingCount"));l(n,136,0,"cd-col-form-label",t),l(n,143,0,"stripingUnit"),l(n,146,0,"stripingUnit"),l(n,148,0,null),l(n,149,0,null),l(n,152,0,u.objectSizes),l(n,154,0,u.rbdForm.showError("stripingUnit",e["ɵnov"](n,5),"required")),l(n,156,0,u.rbdForm.showError("stripingUnit",e["ɵnov"](n,5),"invalidStripingUnit")),l(n,158,0);var o=l(n,164,0,u.rbdForm.getValue("stripingUnit"));l(n,163,0,"cd-col-form-label",o),l(n,171,0,"stripingCount"),l(n,174,0,"stripingCount"),l(n,176,0,u.rbdForm.showError("stripingCount",e["ɵnov"](n,5),"required")),l(n,178,0,u.rbdForm.showError("stripingCount",e["ɵnov"](n,5),"min")),l(n,180,0,u.rbdForm,u.initializeConfigData),l(n,184,0,e["ɵnov"](n,5))}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,7).ngClassUntouched,e["ɵnov"](n,7).ngClassTouched,e["ɵnov"](n,7).ngClassPristine,e["ɵnov"](n,7).ngClassDirty,e["ɵnov"](n,7).ngClassValid,e["ɵnov"](n,7).ngClassInvalid,e["ɵnov"](n,7).ngClassPending);var a=e["ɵunv"](n,11,0,l(n,12,0,e["ɵnov"](n,0),u.action)),t=e["ɵunv"](n,11,1,l(n,13,0,e["ɵnov"](n,1),u.resource));l(n,11,0,a,t),l(n,17,0,e["ɵnov"](n,18).hasErrors,e["ɵnov"](n,18).hasSuccess),l(n,24,0,e["ɵnov"](n,29).ngClassUntouched,e["ɵnov"](n,29).ngClassTouched,e["ɵnov"](n,29).ngClassPristine,e["ɵnov"](n,29).ngClassDirty,e["ɵnov"](n,29).ngClassValid,e["ɵnov"](n,29).ngClassInvalid,e["ɵnov"](n,29).ngClassPending,e["ɵnov"](n,31).validClass,e["ɵnov"](n,31).invalidClass),l(n,36,0,e["ɵnov"](n,37).hasErrors,e["ɵnov"](n,37).hasSuccess),l(n,56,0,e["ɵnov"](n,57).hasErrors,e["ɵnov"](n,57).hasSuccess),l(n,62,0,e["ɵnov"](n,67).ngClassUntouched,e["ɵnov"](n,67).ngClassTouched,e["ɵnov"](n,67).ngClassPristine,e["ɵnov"](n,67).ngClassDirty,e["ɵnov"](n,67).ngClassValid,e["ɵnov"](n,67).ngClassInvalid,e["ɵnov"](n,67).ngClassPending,e["ɵnov"](n,68).validClass,e["ɵnov"](n,68).invalidClass),l(n,73,0,e["ɵnov"](n,74).hasErrors,e["ɵnov"](n,74).hasSuccess),l(n,80,0,e["ɵnov"](n,85).ngClassUntouched,e["ɵnov"](n,85).ngClassTouched,e["ɵnov"](n,85).ngClassPristine,e["ɵnov"](n,85).ngClassDirty,e["ɵnov"](n,85).ngClassValid,e["ɵnov"](n,85).ngClassInvalid,e["ɵnov"](n,85).ngClassPending,e["ɵnov"](n,87).validClass,e["ɵnov"](n,87).invalidClass),l(n,92,0,e["ɵnov"](n,95).ngClassUntouched,e["ɵnov"](n,95).ngClassTouched,e["ɵnov"](n,95).ngClassPristine,e["ɵnov"](n,95).ngClassDirty,e["ɵnov"](n,95).ngClassValid,e["ɵnov"](n,95).ngClassInvalid,e["ɵnov"](n,95).ngClassPending,e["ɵnov"](n,96).hasErrors,e["ɵnov"](n,96).hasSuccess),l(n,108,0,!u.advancedEnabled),l(n,114,0,e["ɵnov"](n,115).hasErrors,e["ɵnov"](n,115).hasSuccess),l(n,121,0,e["ɵnov"](n,126).ngClassUntouched,e["ɵnov"](n,126).ngClassTouched,e["ɵnov"](n,126).ngClassPristine,e["ɵnov"](n,126).ngClassDirty,e["ɵnov"](n,126).ngClassValid,e["ɵnov"](n,126).ngClassInvalid,e["ɵnov"](n,126).ngClassPending,e["ɵnov"](n,127).validClass,e["ɵnov"](n,127).invalidClass),l(n,130,0,e["ɵnov"](n,131).hasErrors,e["ɵnov"](n,131).hasSuccess),l(n,140,0,e["ɵnov"](n,145).ngClassUntouched,e["ɵnov"](n,145).ngClassTouched,e["ɵnov"](n,145).ngClassPristine,e["ɵnov"](n,145).ngClassDirty,e["ɵnov"](n,145).ngClassValid,e["ɵnov"](n,145).ngClassInvalid,e["ɵnov"](n,145).ngClassPending,e["ɵnov"](n,146).validClass,e["ɵnov"](n,146).invalidClass),l(n,157,0,e["ɵnov"](n,158).hasErrors,e["ɵnov"](n,158).hasSuccess),l(n,167,0,e["ɵnov"](n,173).ngClassUntouched,e["ɵnov"](n,173).ngClassTouched,e["ɵnov"](n,173).ngClassPristine,e["ɵnov"](n,173).ngClassDirty,e["ɵnov"](n,173).ngClassValid,e["ɵnov"](n,173).ngClassInvalid,e["ɵnov"](n,173).ngClassPending,e["ɵnov"](n,174).validClass,e["ɵnov"](n,174).invalidClass);var o=e["ɵunv"](n,185,0,l(n,186,0,e["ɵnov"](n,0),u.action)),d=e["ɵunv"](n,185,1,l(n,187,0,e["ɵnov"](n,1),u.resource));l(n,185,0,o,d)}))}function Uu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rbd-form",[],null,null,null,ju,lu)),e["ɵdid"](1,114688,null,0,Hn.a,[ml.a,fl.a,gn.a,Jl.a,U.a,Wl.a,B.a,A.a,Ql.b,fl.m],null,null)],(function(l,n){l(n,1,0)}),null)}var Bu=e["ɵccf"]("cd-rbd-form",Hn.a,Uu,{},{},[]),$u=u("JxMD"),Mu=u("dgut");class Lu{constructor(l){this.router=l}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var zu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Gu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,Fl.b,Fl.a)),e["ɵdid"](1,180224,null,0,vl.e,[vl.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Overview"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/iscsi/overview")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Targets"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/block/iscsi/targets")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,vl.b,[vl.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){var u=n.component;l(n,3,0,"Overview","/block/iscsi/overview"===u.url),l(n,5,0,"Targets","/block/iscsi/targets"===u.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby)}))}var Ku=u("roDX"),Zu=u("my5R"),Ju=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Wu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"cd-sparkline",[],null,null,null,$u.b,$u.a)),e["ɵdid"](2,638976,null,0,Mu.a,[B.a],{data:[0,"data"],isBinary:[1,"isBinary"]},null)],(function(l,n){l(n,2,0,n.parent.context.value,n.parent.context.row.cdIsBinary)}),null)}function Qu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function Yu(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Wu)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qu)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function Xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," /s "]))],null,(function(l,n){l(n,1,0,n.parent.context.value)}))}function Hu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function le(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Xu)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Hu)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function ne(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent,0),n.parent.context.value));l(n,1,0,u)}))}function ue(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" n/a "]))],null,null)}function ee(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,ne)),e["ɵdid"](1,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ue)),e["ɵdid"](3,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,"user:rbd"===n.context.row.backstore),l(n,3,0,"user:rbd"!==n.context.row.backstore)}),null)}function ae(l){return e["ɵvid"](0,[e["ɵpid"](0,L.a,[]),e["ɵqud"](402653184,1,{iscsiSparklineTpl:0}),e["ɵqud"](402653184,2,{iscsiPerSecondTpl:0}),e["ɵqud"](402653184,3,{iscsiRelativeDateTpl:0}),(l()(),e["ɵeld"](4,0,null,null,1,"cd-iscsi-tabs",[],null,null,null,Gu,zu)),e["ɵdid"](5,114688,null,0,Lu,[fl.m],null,null),(l()(),e["ɵeld"](6,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Gateways"])),(l()(),e["ɵeld"](8,0,null,null,1,"cd-table",[],null,[[null,"fetchData"]],(function(l,n,u){var e=!0;return"fetchData"===n&&(e=!1!==l.component.refresh()&&e),e}),jl.b,jl.a)),e["ɵdid"](9,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},{fetchData:"fetchData"}),(l()(),e["ɵeld"](10,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](12,0,null,null,1,"cd-table",[],null,null,null,jl.b,jl.a)),e["ɵdid"](13,2867200,null,0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null),(l()(),e["ɵand"](0,[[1,2],["iscsiSparklineTpl",2]],null,0,null,Yu)),(l()(),e["ɵand"](0,[[2,2],["iscsiPerSecondTpl",2]],null,0,null,le)),(l()(),e["ɵand"](0,[[3,2],["iscsiRelativeDateTpl",2]],null,0,null,ee))],(function(l,n){var u=n.component;l(n,5,0),l(n,9,0,u.gateways,u.gatewaysColumns),l(n,13,0,u.images,u.imagesColumns)}),null)}function te(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi",[],null,null,null,ae,Ju)),e["ɵdid"](1,114688,null,0,Ku.a,[Zu.a,M.a,z.a,A.a],null,null)],(function(l,n){l(n,1,0)}),null)}var oe=e["ɵccf"]("cd-iscsi",Ku.a,te,{},{},[]),de=u("DqMs"),ie=u("/NlG"),se=u("i4WA"),re=u("6qls"),ce=u("tz6c"),pe=u("3ris"),me=u("e/kN"),ge=e["ɵcrt"]({encapsulation:0,styles:[["tabset.tabset>ul{border-bottom:0;float:left;display:block;margin-right:20px;border-right:1px solid #ddd;padding-right:15px}"]],data:{}});function fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Available information:"])),(l()(),e["ɵeld"](4,0,null,null,1,"pre",[],null,null,null,null,null)),(l()(),e["ɵted"](5,null,["",""]))],null,(function(l,n){l(n,5,0,n.component.status)}))}function ve(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["title","iSCSI Targets not available"],["type","info"]],null,null,null,de.b,de.a)),e["ɵdid"](1,114688,null,0,ie.a,[A.a],{title:[0,"title"],type:[1,"type"]},null),(l()(),e["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Please consult the "])),(l()(),e["ɵeld"](4,0,null,null,1,"cd-doc",[["section","iscsi"]],null,null,null,se.b,se.a)),e["ɵdid"](5,114688,null,0,re.a,[ce.a,A.a],{section:[0,"section"]},null),(l()(),e["ɵted"](-1,null,[" on how to configure and enable the iSCSI Targets management functionality."])),(l()(),e["ɵand"](16777216,null,0,1,null,fe)),e["ɵdid"](8,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,"iSCSI Targets not available","info"),l(n,5,0,"iscsi"),l(n,8,0,u.status)}),null)}function Ce(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi-target-details",[["cdTableDetail",""]],null,null,null,x.c,x.b)),e["ɵdid"](1,638976,null,0,pe.a,[A.a,z.a,S.a],{selection:[0,"selection"],settings:[1,"settings"],cephIscsiConfigVersion:[2,"cephIscsiConfigVersion"]},null)],(function(l,n){var u=n.component;l(n,1,0,u.expandedRow,u.settings,u.cephIscsiConfigVersion)}),null)}function be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,13,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","target_iqn"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,u){var e=!0,a=l.component;return"setExpandedRow"===n&&(e=!1!==a.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==a.updateSelection(u)&&e),e}),jl.b,jl.a)),e["ɵdid"](1,2867200,[[1,4],["table",4]],0,Ul.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](2,0,null,1,9,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Bl.b,Bl.a)),e["ɵdid"](4,114688,null,0,$l.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](5,0,null,null,6,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.configureDiscoveryAuth()&&e),e}),null,null)),(l()(),e["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](8,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](9,1),(l()(),e["ɵeld"](10,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Discovery authentication"])),(l()(),e["ɵand"](16777216,null,3,1,null,Ce)),e["ɵdid"](13,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,u.targets,u.columns,"flex",!0,"target_iqn","true","single"),l(n,4,0,u.permission,u.selection,u.tableActions);var e=l(n,9,0,u.icons.key);l(n,8,0,e),l(n,13,0,u.expandedRow)}),null)}function he(l){return e["ɵvid"](0,[e["ɵqud"](671088640,1,{table:0}),(l()(),e["ɵeld"](1,0,null,null,1,"cd-iscsi-tabs",[],null,null,null,Gu,zu)),e["ɵdid"](2,114688,null,0,Lu,[fl.m],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,ve)),e["ɵdid"](4,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,be)),e["ɵdid"](6,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,2,0),l(n,4,0,!1===u.available),l(n,6,0,!0===u.available)}),null)}function Ie(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-iscsi-target-list",[],null,null,null,he,ge)),e["ɵprd"](131584,null,Ll.a,Ll.a,[zl.a,Gl.a]),e["ɵdid"](2,245760,null,0,me.a,[ml.a,A.a,Zu.a,Ll.a,H.a,rl.b,Wl.a,Ql.b],null,null)],(function(l,n){l(n,2,0)}),null)}var Re=e["ɵccf"]("cd-iscsi-target-list",me.a,Ie,{},{},[]),Ne=u("D4zM"),we=u("OcYo"),Ee=u("EApP"),Te=u("WiuZ"),ye=u("wnGv"),Ve=u("LvDl");class xe{constructor(l){this.ngControl=l}onInput(l){this.setValue(l)}setValue(l){l=Ve.isString(l)?l.trim():l,this.ngControl.control.setValue(l)}}var qe=u("gr3l"),ke=e["ɵcrt"]({encapsulation:0,styles:[[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]],data:{}});function _e(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function De(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["IQN has wrong pattern."]))],null,null)}function Fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["An IQN has the following notation 'iqn.$year-$month.$reversedAddress:$definedName'"])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309"])),(l()(),e["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,1,"a",[["href","https://en.wikipedia.org/wiki/ISCSI#Addressing"],["target","_blank"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["More information"]))],null,null)}function Pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This target has modified advanced settings."]))],null,null)}function Se(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removePortal(l.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,1)],(function(l,n){var u=l(n,8,0,n.component.icons.destroy);l(n,7,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function Ae(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["At least "," gateways are required."]))],null,(function(l,n){l(n,1,0,n.component.minimum_gateways)}))}function Oe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,["lun: ",""]))],null,(function(l,n){l(n,1,0,n.component.imagesSettings[n.parent.context.$implicit].lun)}))}function je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(l()(),e["ɵted"](1,null,["Backstore: ",". "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,a=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent,2),u.imagesSettings[n.parent.context.$implicit].backstore));l(n,1,0,a)}))}function Ue(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This image has modified settings."]))],null,null)}function Be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,14,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Oe)),e["ɵdid"](5,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](6,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.imageSettingsModal(l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](7,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](9,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](10,1),(l()(),e["ɵeld"](11,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeImage(l.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](12,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](14,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](15,1),(l()(),e["ɵeld"](16,0,null,null,4,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,je)),e["ɵdid"](18,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ue)),e["ɵdid"](20,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,5,0,u.api_version>=1);var e=l(n,10,0,u.icons.deepCheck);l(n,9,0,e);var a=l(n,15,0,u.icons.destroy);l(n,14,0,a),l(n,18,0,u.backstores.length>1),l(n,20,0,u.hasAdvancedSettings(u.imagesSettings[n.context.$implicit][u.imagesSettings[n.context.$implicit].backstore]))}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function $e(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Duplicated LUN numbers."]))],null,null)}function Me(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Duplicated WWN."]))],null,null)}function Le(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function Ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ke(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function Ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function We(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Qe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function Ye(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,91,"div",[["formGroupName","auth"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](5,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](8,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User"])),(l()(),e["ɵeld"](11,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["id","target_user"],["name","target_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,13).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,13)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](13,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](15,671744,[[9,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](17,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](18,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Le)),e["ɵdid"](20,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ze)),e["ɵdid"](22,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](23,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](24,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](27,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_password"]],null,null,null,null,null)),(l()(),e["ɵeld"](28,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵeld"](30,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](31,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](32,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","target_password"],["name","target_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,33)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,33).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,33)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,33)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](33,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](35,671744,[[11,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](37,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](38,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](39,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](40,0,null,null,1,"button",[["cdPasswordButton","target_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,41).onClick()&&a),a}),null,null)),e["ɵdid"](41,81920,null,0,Ne.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](42,0,null,null,1,"button",[["cdCopy2ClipboardButton","target_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,43).onClick()&&a),a}),null,null)),e["ɵdid"](43,81920,null,0,we.a,[e.ElementRef,e.Renderer2,Ee.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ge)),e["ɵdid"](45,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ke)),e["ɵdid"](47,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](48,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](49,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](52,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_mutual_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](53,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual User"])),(l()(),e["ɵeld"](55,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](56,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["id","target_mutual_user"],["name","target_mutual_user"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,57)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,57).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,57)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,57)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](57,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](59,671744,[[13,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](61,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](62,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ze)),e["ɵdid"](64,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Je)),e["ɵdid"](66,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](67,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](68,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](71,0,null,0,2,"label",[["class","cd-col-form-label"],["for","target_mutual_password"]],null,null,null,null,null)),(l()(),e["ɵeld"](72,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual Password"])),(l()(),e["ɵeld"](74,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](75,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](76,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["id","target_mutual_password"],["name","target_mutual_password"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,77)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,77).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,77)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,77)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](77,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](79,671744,[[15,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](81,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](82,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](83,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](84,0,null,null,1,"button",[["cdPasswordButton","target_mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,85).onClick()&&a),a}),null,null)),e["ɵdid"](85,81920,null,0,Ne.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](86,0,null,null,1,"button",[["cdCopy2ClipboardButton","target_mutual_password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,87).onClick()&&a),a}),null,null)),e["ɵdid"](87,81920,null,0,we.a,[e.ElementRef,e.Renderer2,Ee.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,We)),e["ɵdid"](89,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qe)),e["ɵdid"](91,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,"auth"),l(n,5,0),l(n,15,0,"user"),l(n,18,0,"user"),l(n,20,0,u.targetForm.showError("user",e["ɵnov"](n.parent,2),"required")),l(n,22,0,u.targetForm.showError("user",e["ɵnov"](n.parent,2),"pattern")),l(n,24,0),l(n,35,0,"password"),l(n,38,0,"password"),l(n,41,0,"target_password"),l(n,43,0,"target_password"),l(n,45,0,u.targetForm.showError("password",e["ɵnov"](n.parent,2),"required")),l(n,47,0,u.targetForm.showError("password",e["ɵnov"](n.parent,2),"pattern")),l(n,49,0),l(n,59,0,"mutual_user"),l(n,62,0,"mutual_user"),l(n,64,0,u.targetForm.showError("mutual_user",e["ɵnov"](n.parent,2),"required")),l(n,66,0,u.targetForm.showError("mutual_user",e["ɵnov"](n.parent,2),"pattern")),l(n,68,0),l(n,79,0,"mutual_password"),l(n,82,0,"mutual_password"),l(n,85,0,"target_mutual_password"),l(n,87,0,"target_mutual_password"),l(n,89,0,u.targetForm.showError("mutual_password",e["ɵnov"](n.parent,2),"required")),l(n,91,0,u.targetForm.showError("mutual_password",e["ɵnov"](n.parent,2),"pattern"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending),l(n,4,0,e["ɵnov"](n,5).hasErrors,e["ɵnov"](n,5).hasSuccess),l(n,12,0,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass),l(n,23,0,e["ɵnov"](n,24).hasErrors,e["ɵnov"](n,24).hasSuccess),l(n,32,0,e["ɵnov"](n,37).ngClassUntouched,e["ɵnov"](n,37).ngClassTouched,e["ɵnov"](n,37).ngClassPristine,e["ɵnov"](n,37).ngClassDirty,e["ɵnov"](n,37).ngClassValid,e["ɵnov"](n,37).ngClassInvalid,e["ɵnov"](n,37).ngClassPending,e["ɵnov"](n,38).validClass,e["ɵnov"](n,38).invalidClass),l(n,48,0,e["ɵnov"](n,49).hasErrors,e["ɵnov"](n,49).hasSuccess),l(n,56,0,e["ɵnov"](n,61).ngClassUntouched,e["ɵnov"](n,61).ngClassTouched,e["ɵnov"](n,61).ngClassPristine,e["ɵnov"](n,61).ngClassDirty,e["ɵnov"](n,61).ngClassValid,e["ɵnov"](n,61).ngClassInvalid,e["ɵnov"](n,61).ngClassPending,e["ɵnov"](n,62).validClass,e["ɵnov"](n,62).invalidClass),l(n,67,0,e["ɵnov"](n,68).hasErrors,e["ɵnov"](n,68).hasSuccess),l(n,76,0,e["ɵnov"](n,81).ngClassUntouched,e["ɵnov"](n,81).ngClassTouched,e["ɵnov"](n,81).ngClassPristine,e["ɵnov"](n,81).ngClassDirty,e["ɵnov"](n,81).ngClassValid,e["ɵnov"](n,81).ngClassInvalid,e["ɵnov"](n,81).ngClassPending,e["ɵnov"](n,82).validClass,e["ɵnov"](n,82).invalidClass)}))}function Xe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator IQN needs to be unique."]))],null,null)}function He(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function la(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["IQN has wrong pattern."]))],null,null)}function na(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ua(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function ea(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function aa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function ta(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function oa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'."]))],null,null)}function da(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ia(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'."]))],null,null)}function sa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeInitiatorImage(l.parent.context.$implicit,l.context.index,l.parent.context.index,l.context.$implicit)&&e),e}),null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,1)],(function(l,n){var u=l(n,8,0,n.component.icons.destroy);l(n,7,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function ra(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator belongs to a group. Images will be configure in the group."]))],null,null)}function ca(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,null,null,Te.b,Te.a)),e["ɵdid"](3,638976,null,0,ye.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},null),(l()(),e["ɵeld"](4,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](7,1),(l()(),e["ɵeld"](8,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"]))],(function(l,n){var u=n.component,e=n.parent.context.$implicit.getValue("luns");l(n,3,0,"btn btn-light float-right",e,u.imagesInitiatorSelections[n.parent.context.index],u.messages.initiatorImage);var a=l(n,7,0,u.icons.add);l(n,6,0,a)}),null)}function pa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,136,"div",[["class","card mb-2"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,8,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiator"])),(l()(),e["ɵted"](7,null,[": "," "])),(l()(),e["ɵeld"](8,0,null,null,4,"button",[["class","close"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeInitiator(l.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,123,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](15,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](18,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","client_iqn"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Client IQN"])),(l()(),e["ɵeld"](20,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,7,"input",[["cdTrim",""],["class","form-control"],["formControlName","client_iqn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0,t=l.component;return"input"===n&&(a=!1!==e["ɵnov"](l,22)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,22).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,22)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,22)._compositionEnd(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,27).onInput(u.target.value)&&a),"blur"===n&&(a=!1!==t.updatedInitiatorSelector()&&a),a}),null,null)),e["ɵdid"](22,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](24,671744,[[19,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](26,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](27,16384,null,0,xe,[el.q],null,null),e["ɵdid"](28,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Xe)),e["ɵdid"](30,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,He)),e["ɵdid"](32,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,la)),e["ɵdid"](34,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](35,0,null,null,88,null,null,null,null,null,null,null)),e["ɵdid"](36,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](38,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](39,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](40,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](43,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User"])),(l()(),e["ɵeld"](45,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](46,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","user"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,47)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,47).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,47)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,47)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](47,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](49,671744,[[21,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](51,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](52,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,na)),e["ɵdid"](54,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ua)),e["ɵdid"](56,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](57,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](58,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](61,0,null,0,1,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵeld"](63,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](64,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](65,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["type","password"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,66)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,66).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,66)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,66)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](66,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](68,671744,[[23,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](70,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](71,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](72,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](73,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,74).onClick()&&a),a}),null,null)),e["ɵdid"](74,81920,null,0,Ne.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](75,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,76).onClick()&&a),a}),null,null)),e["ɵdid"](76,81920,null,0,we.a,[e.ElementRef,e.Renderer2,Ee.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ea)),e["ɵdid"](78,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,aa)),e["ɵdid"](80,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](81,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](82,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,25,{FormControlNames:1}),e["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),e["ɵeld"](85,0,null,0,2,"label",[["class","cd-col-form-label"],["for","mutual_user"]],null,null,null,null,null)),(l()(),e["ɵeld"](86,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual User"])),(l()(),e["ɵeld"](88,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](89,0,null,null,6,"input",[["autocomplete","off"],["class","form-control"],["formControlName","mutual_user"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,90)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,90).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,90)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,90)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](90,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](92,671744,[[25,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](94,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](95,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ta)),e["ɵdid"](97,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,oa)),e["ɵdid"](99,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](100,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](101,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,27,{FormControlNames:1}),e["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),e["ɵeld"](104,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mutual_password"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mutual Password"])),(l()(),e["ɵeld"](106,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](107,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](108,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","mutual_password"],["type","password"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,109)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,109).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,109)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,109)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](109,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](111,671744,[[27,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](113,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](114,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](115,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](116,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,117).onClick()&&a),a}),null,null)),e["ɵdid"](117,81920,null,0,Ne.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](118,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var a=!0;return"click"===n&&(a=!1!==e["ɵnov"](l,119).onClick()&&a),a}),null,null)),e["ɵdid"](119,81920,null,0,we.a,[e.ElementRef,e.Renderer2,Ee.j,A.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,da)),e["ɵdid"](121,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ia)),e["ɵdid"](123,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](124,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](125,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,29,{FormControlNames:1}),e["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),e["ɵeld"](128,0,null,0,1,"label",[["class","cd-col-form-label"],["for","luns"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](130,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,sa)),e["ɵdid"](132,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ra)),e["ɵdid"](134,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ca)),e["ɵdid"](136,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0,n.context.index);var a=l(n,12,0,u.icons.destroy);l(n,11,0,a),l(n,15,0),l(n,24,0,"client_iqn"),l(n,28,0,"client_iqn");var t=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"notUnique");l(n,30,0,t);var o=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"required");l(n,32,0,o);var d=n.context.$implicit.showError("client_iqn",e["ɵnov"](n.parent.parent,2),"pattern");l(n,34,0,d),l(n,36,0,"auth"),l(n,40,0),l(n,49,0,"user"),l(n,52,0,"user");var i=n.context.$implicit.showError("user",e["ɵnov"](n.parent.parent,2),"required");l(n,54,0,i);var s=n.context.$implicit.showError("user",e["ɵnov"](n.parent.parent,2),"pattern");l(n,56,0,s),l(n,58,0),l(n,68,0,"password"),l(n,71,0,"password"),l(n,74,0,"password"+n.context.index),l(n,76,0,"password"+n.context.index);var r=n.context.$implicit.showError("password",e["ɵnov"](n.parent.parent,2),"required");l(n,78,0,r);var c=n.context.$implicit.showError("password",e["ɵnov"](n.parent.parent,2),"pattern");l(n,80,0,c),l(n,82,0),l(n,92,0,"mutual_user"),l(n,95,0,"mutual_user");var p=n.context.$implicit.showError("mutual_user",e["ɵnov"](n.parent.parent,2),"required");l(n,97,0,p);var m=n.context.$implicit.showError("mutual_user",e["ɵnov"](n.parent.parent,2),"pattern");l(n,99,0,m),l(n,101,0),l(n,111,0,"mutual_password"),l(n,114,0,"mutual_password"),l(n,117,0,"mutual_password"+n.context.index),l(n,119,0,"mutual_password"+n.context.index);var g=n.context.$implicit.showError("mutual_password",e["ɵnov"](n.parent.parent,2),"required");l(n,121,0,g);var f=n.context.$implicit.showError("mutual_password",e["ɵnov"](n.parent.parent,2),"pattern");l(n,123,0,f),l(n,125,0);var v=n.context.$implicit.getValue("luns");l(n,132,0,v);var C=n.context.$implicit.getValue("cdIsInGroup");l(n,134,0,C);var b=!n.context.$implicit.getValue("cdIsInGroup");l(n,136,0,b)}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending);var u=n.context.$implicit.getValue("client_iqn");l(n,7,0,u),l(n,14,0,e["ɵnov"](n,15).hasErrors,e["ɵnov"](n,15).hasSuccess),l(n,21,0,e["ɵnov"](n,26).ngClassUntouched,e["ɵnov"](n,26).ngClassTouched,e["ɵnov"](n,26).ngClassPristine,e["ɵnov"](n,26).ngClassDirty,e["ɵnov"](n,26).ngClassValid,e["ɵnov"](n,26).ngClassInvalid,e["ɵnov"](n,26).ngClassPending,e["ɵnov"](n,28).validClass,e["ɵnov"](n,28).invalidClass),l(n,39,0,e["ɵnov"](n,40).hasErrors,e["ɵnov"](n,40).hasSuccess),l(n,46,0,"user"+n.context.index,e["ɵnov"](n,51).ngClassUntouched,e["ɵnov"](n,51).ngClassTouched,e["ɵnov"](n,51).ngClassPristine,e["ɵnov"](n,51).ngClassDirty,e["ɵnov"](n,51).ngClassValid,e["ɵnov"](n,51).ngClassInvalid,e["ɵnov"](n,51).ngClassPending,e["ɵnov"](n,52).validClass,e["ɵnov"](n,52).invalidClass),l(n,57,0,e["ɵnov"](n,58).hasErrors,e["ɵnov"](n,58).hasSuccess),l(n,65,0,"password"+n.context.index,e["ɵnov"](n,70).ngClassUntouched,e["ɵnov"](n,70).ngClassTouched,e["ɵnov"](n,70).ngClassPristine,e["ɵnov"](n,70).ngClassDirty,e["ɵnov"](n,70).ngClassValid,e["ɵnov"](n,70).ngClassInvalid,e["ɵnov"](n,70).ngClassPending,e["ɵnov"](n,71).validClass,e["ɵnov"](n,71).invalidClass),l(n,81,0,e["ɵnov"](n,82).hasErrors,e["ɵnov"](n,82).hasSuccess),l(n,89,0,"mutual_user"+n.context.index,e["ɵnov"](n,94).ngClassUntouched,e["ɵnov"](n,94).ngClassTouched,e["ɵnov"](n,94).ngClassPristine,e["ɵnov"](n,94).ngClassDirty,e["ɵnov"](n,94).ngClassValid,e["ɵnov"](n,94).ngClassInvalid,e["ɵnov"](n,94).ngClassPending,e["ɵnov"](n,95).validClass,e["ɵnov"](n,95).invalidClass),l(n,100,0,e["ɵnov"](n,101).hasErrors,e["ɵnov"](n,101).hasSuccess),l(n,108,0,"mutual_password"+n.context.index,e["ɵnov"](n,113).ngClassUntouched,e["ɵnov"](n,113).ngClassTouched,e["ɵnov"](n,113).ngClassPristine,e["ɵnov"](n,113).ngClassDirty,e["ɵnov"](n,113).ngClassValid,e["ɵnov"](n,113).ngClassInvalid,e["ɵnov"](n,113).ngClassPending,e["ɵnov"](n,114).validClass,e["ɵnov"](n,114).invalidClass),l(n,124,0,e["ɵnov"](n,125).hasErrors,e["ɵnov"](n,125).hasSuccess)}))}function ma(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["No items added."]))],null,null)}function ga(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","initiators"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiators"])),(l()(),e["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"],["formArrayName","initiators"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](7,212992,null,0,el.g,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.g]),e["ɵdid"](9,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,pa)),e["ɵdid"](11,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,9,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ma)),e["ɵdid"](15,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](16,0,null,null,6,"button",[["class","btn btn-light float-right"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.addInitiator(),e=!1),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add initiator"])),(l()(),e["ɵeld"](23,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,1,0),l(n,7,0,"initiators"),l(n,11,0,u.initiators.controls),l(n,15,0,0===u.initiators.controls.length);var e=l(n,20,0,u.icons.add);l(n,19,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,9).ngClassUntouched,e["ɵnov"](n,9).ngClassTouched,e["ɵnov"](n,9).ngClassPristine,e["ɵnov"](n,9).ngClassDirty,e["ɵnov"](n,9).ngClassValid,e["ɵnov"](n,9).ngClassInvalid,e["ɵnov"](n,9).ngClassPending)}))}function fa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeGroupInitiator(l.parent.context.$implicit,l.context.index,l.parent.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,1)],(function(l,n){var u=l(n,8,0,n.component.icons.destroy);l(n,7,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function va(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.removeGroupDisk(l.parent.context.$implicit,l.context.index,l.parent.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](7,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](8,1)],(function(l,n){var u=l(n,8,0,n.component.icons.destroy);l(n,7,0,u)}),(function(l,n){l(n,2,0,n.context.$implicit)}))}function Ca(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,69,"div",[["class","card mb-2"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](1,212992,null,0,el.m,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.m]),e["ɵdid"](3,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵeld"](4,0,null,null,8,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Group"])),(l()(),e["ɵted"](7,null,[": "," "])),(l()(),e["ɵeld"](8,0,null,null,4,"button",[["class","close"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.groups.removeAt(l.context.index)&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,56,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](15,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,33,{FormControlNames:1}),e["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),e["ɵeld"](18,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","group_id"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](20,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,6,"input",[["class","form-control"],["formControlName","group_id"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,22)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,22).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,22)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,22)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](22,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](24,671744,[[33,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](26,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](27,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](28,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](29,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,35,{FormControlNames:1}),e["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),e["ɵeld"](32,0,null,0,2,"label",[["class","cd-col-form-label"],["for","members"]],null,null,null,null,null)),(l()(),e["ɵeld"](33,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Initiators"])),(l()(),e["ɵeld"](35,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,fa)),e["ɵdid"](37,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](38,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](39,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](40,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onGroupMemberSelection(u)&&e),e}),Te.b,Te.a)),e["ɵdid"](41,638976,null,0,ye.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](42,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](44,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](45,1),(l()(),e["ɵeld"](46,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add initiator"])),(l()(),e["ɵeld"](48,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](49,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](50,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,37,{FormControlNames:1}),e["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),e["ɵeld"](53,0,null,0,2,"label",[["class","cd-col-form-label"],["for","disks"]],null,null,null,null,null)),(l()(),e["ɵeld"](54,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](56,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,va)),e["ɵdid"](58,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](59,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](60,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,null,null,Te.b,Te.a)),e["ɵdid"](62,638976,null,0,ye.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},null),(l()(),e["ɵeld"](63,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](65,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](66,1),(l()(),e["ɵeld"](67,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"])),(l()(),e["ɵeld"](69,0,null,null,0,"hr",[],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,1,0,n.context.index);var e=l(n,12,0,u.icons.destroy);l(n,11,0,e),l(n,15,0),l(n,24,0,"group_id"),l(n,27,0,"group_id"),l(n,29,0);var a=n.context.$implicit.getValue("members");l(n,37,0,a);var t=n.context.$implicit.getValue("members");l(n,41,0,"btn btn-light float-right",t,u.groupMembersSelections[n.context.index],u.messages.groupInitiator);var o=l(n,45,0,u.icons.add);l(n,44,0,o),l(n,50,0);var d=n.context.$implicit.getValue("disks");l(n,58,0,d);var i=n.context.$implicit.getValue("disks");l(n,62,0,"btn btn-light float-right",i,u.groupDiskSelections[n.context.index],u.messages.initiatorImage);var s=l(n,66,0,u.icons.add);l(n,65,0,s)}),(function(l,n){l(n,0,0,e["ɵnov"](n,3).ngClassUntouched,e["ɵnov"](n,3).ngClassTouched,e["ɵnov"](n,3).ngClassPristine,e["ɵnov"](n,3).ngClassDirty,e["ɵnov"](n,3).ngClassValid,e["ɵnov"](n,3).ngClassInvalid,e["ɵnov"](n,3).ngClassPending);var u=n.context.$implicit.getValue("group_id");l(n,7,0,u),l(n,14,0,e["ɵnov"](n,15).hasErrors,e["ɵnov"](n,15).hasSuccess),l(n,21,0,e["ɵnov"](n,26).ngClassUntouched,e["ɵnov"](n,26).ngClassTouched,e["ɵnov"](n,26).ngClassPristine,e["ɵnov"](n,26).ngClassDirty,e["ɵnov"](n,26).ngClassValid,e["ɵnov"](n,26).ngClassInvalid,e["ɵnov"](n,26).ngClassPending,e["ɵnov"](n,27).validClass,e["ɵnov"](n,27).invalidClass),l(n,28,0,e["ɵnov"](n,29).hasErrors,e["ɵnov"](n,29).hasSuccess),l(n,49,0,e["ɵnov"](n,50).hasErrors,e["ɵnov"](n,50).hasSuccess)}))}function ba(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["No items added."]))],null,null)}function ha(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](1,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,31,{FormControlNames:1}),e["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","initiators"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Groups"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"],["formArrayName","groups"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),e["ɵdid"](7,212992,null,0,el.g,[[3,el.d],[8,null],[8,null]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.d,null,[el.g]),e["ɵdid"](9,16384,null,0,el.s,[[4,el.d]],null,null),(l()(),e["ɵand"](16777216,null,null,1,null,Ca)),e["ɵdid"](11,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,9,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ba)),e["ɵdid"](15,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](16,0,null,null,6,"button",[["class","btn btn-light float-right"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(l.component.addGroup(),e=!1),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add group"]))],(function(l,n){var u=n.component;l(n,1,0),l(n,7,0,"groups"),l(n,11,0,u.groups.controls),l(n,15,0,0===u.groups.controls.length);var e=l(n,20,0,u.icons.add);l(n,19,0,e)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,9).ngClassUntouched,e["ɵnov"](n,9).ngClassTouched,e["ɵnov"](n,9).ngClassPristine,e["ɵnov"](n,9).ngClassDirty,e["ɵnov"](n,9).ngClassValid,e["ɵnov"](n,9).ngClassInvalid,e["ɵnov"](n,9).ngClassPending)}))}function Ia(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,133,"form",[["name","targetForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var a=!0;return"submit"===n&&(a=!1!==e["ɵnov"](l,2).onSubmit(u)&&a),"reset"===n&&(a=!1!==e["ɵnov"](l,2).onReset()&&a),"submit"===n&&(a=!1!==e["ɵnov"](l,5).onSubmit()&&a),a}),null,null)),e["ɵdid"](1,16384,null,0,el.G,[],null,null),e["ɵdid"](2,540672,[["formDir",4]],0,el.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,el.d,null,[el.l]),e["ɵdid"](4,16384,null,0,el.s,[[4,el.d]],null,null),e["ɵdid"](5,16384,null,0,Nl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](6,0,null,null,127,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](8,null,[""," ",""])),e["ɵppd"](9,1),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,113,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](13,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","target_iqn"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Target IQN"])),(l()(),e["ɵeld"](18,0,null,0,24,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,14,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](20,0,null,null,7,"input",[["cdTrim",""],["class","form-control"],["formControlName","target_iqn"],["id","target_iqn"],["name","target_iqn"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,21)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,21).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,21)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,21)._compositionEnd(u.target.value)&&a),"input"===n&&(a=!1!==e["ɵnov"](l,26).onInput(u.target.value)&&a),a}),null,null)),e["ɵdid"](21,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](23,671744,[[1,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](25,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](26,16384,null,0,xe,[el.q],null,null),e["ɵdid"](27,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](28,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](29,0,null,null,4,"button",[["class","btn btn-light"],["id","ecp-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.targetSettingsModal()&&e),e}),null,null)),(l()(),e["ɵeld"](30,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](32,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](33,1),(l()(),e["ɵand"](16777216,null,null,1,null,_e)),e["ɵdid"](35,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,De)),e["ɵdid"](37,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Fe)),e["ɵdid"](39,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pe)),e["ɵdid"](41,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](42,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](43,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](44,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](47,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","portals"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Portals"])),(l()(),e["ɵeld"](49,0,null,0,22,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Se)),e["ɵdid"](51,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](52,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](53,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](54,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onPortalSelection(u)&&e),e}),Te.b,Te.a)),e["ɵdid"](55,638976,null,0,ye.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](56,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](58,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](59,1),(l()(),e["ɵeld"](60,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add portal"])),(l()(),e["ɵeld"](62,0,null,null,6,"input",[["class","form-control"],["formControlName","portals"],["id","portals"],["name","portals"],["type","hidden"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,63)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,63).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,63)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,63)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](63,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](65,671744,[[3,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](67,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](68,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ae)),e["ɵdid"](70,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](71,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](72,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](73,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](76,0,null,0,1,"label",[["class","cd-col-form-label"],["for","disks"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Images"])),(l()(),e["ɵeld"](78,0,null,0,24,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Be)),e["ɵdid"](80,278528,null,0,D.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](81,0,null,null,6,"input",[["class","form-control"],["formControlName","disks"],["id","disks"],["name","disks"],["type","hidden"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var a=!0;return"input"===n&&(a=!1!==e["ɵnov"](l,82)._handleInput(u.target.value)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,82).onTouched()&&a),"compositionstart"===n&&(a=!1!==e["ɵnov"](l,82)._compositionStart()&&a),"compositionend"===n&&(a=!1!==e["ɵnov"](l,82)._compositionEnd(u.target.value)&&a),a}),null,null)),e["ɵdid"](82,16384,null,0,el.e,[e.Renderer2,e.ElementRef,[2,el.b]],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.e]),e["ɵdid"](84,671744,[[5,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](86,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](87,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$e)),e["ɵdid"](89,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Me)),e["ɵdid"](91,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](92,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](93,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](94,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(l,n,u){var e=!0;return"selection"===n&&(e=!1!==l.component.onImageSelection(u)&&e),e}),Te.b,Te.a)),e["ɵdid"](95,638976,null,0,ye.a,[A.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(l()(),e["ɵeld"](96,0,null,0,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,D["ɵNgClassImpl"],D["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](98,278528,null,0,D.NgClass,[D["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](99,1),(l()(),e["ɵeld"](100,0,null,0,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Add image"])),(l()(),e["ɵeld"](102,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](103,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,$n.b,$n.a)),e["ɵdid"](104,1163264,null,2,Nl.c,[e.ElementRef,Nl.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](107,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](108,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](109,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","acl_enabled"],["id","acl_enabled"],["name","acl_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var a=!0;return"change"===n&&(a=!1!==e["ɵnov"](l,110).onChange(u.target.checked)&&a),"blur"===n&&(a=!1!==e["ɵnov"](l,110).onTouched()&&a),a}),null,null)),e["ɵdid"](110,16384,null,0,el.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,el.p,(function(l){return[l]}),[el.c]),e["ɵdid"](112,671744,[[7,4]],0,el.j,[[3,el.d],[8,null],[8,null],[6,el.p],[2,el.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,el.q,null,[el.j]),e["ɵdid"](114,16384,null,0,el.r,[[4,el.q]],null,null),e["ɵdid"](115,16384,null,0,Nl.h,[[3,el.d],Nl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](116,0,null,null,1,"label",[["class","custom-control-label"],["for","acl_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["ACL authentication"])),(l()(),e["ɵeld"](118,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ye)),e["ɵdid"](120,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ga)),e["ɵdid"](122,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ha)),e["ɵdid"](124,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](125,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](126,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](127,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Wn.b,Wn.a)),e["ɵdid"](128,114688,null,0,Qn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](129,0,[""," ",""])),e["ɵppd"](130,1),e["ɵppd"](131,1),(l()(),e["ɵeld"](132,0,null,null,1,"cd-back-button",[],null,null,null,Yn.b,Yn.a)),e["ɵdid"](133,49152,null,0,Xn.a,[D.Location,Ql.b],null,null)],(function(l,n){var u=n.component;l(n,2,0,u.targetForm),l(n,5,0,u.targetForm),l(n,13,0),l(n,23,0,"target_iqn"),l(n,27,0,"target_iqn");var a=l(n,33,0,u.icons.deepCheck);l(n,32,0,a),l(n,35,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"required")),l(n,37,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"pattern")),l(n,39,0,u.targetForm.showError("target_iqn",e["ɵnov"](n,2),"iqn")),l(n,41,0,u.hasAdvancedSettings(u.targetForm.getValue("target_controls"))),l(n,44,0),l(n,51,0,u.portals.value),l(n,55,0,"btn btn-light float-right",u.portals.value,u.portalsSelections,u.messages.portals);var t=l(n,59,0,u.icons.add);l(n,58,0,t),l(n,65,0,"portals"),l(n,68,0,"portals"),l(n,70,0,u.targetForm.showError("portals",e["ɵnov"](n,2),"minGateways")),l(n,73,0),l(n,80,0,u.targetForm.getValue("disks")),l(n,84,0,"disks"),l(n,87,0,"disks"),l(n,89,0,u.targetForm.showError("disks",e["ɵnov"](n,2),"dupLunId")),l(n,91,0,u.targetForm.showError("disks",e["ɵnov"](n,2),"dupWwn")),l(n,95,0,"btn btn-light float-right",u.disks.value,u.imagesSelections,u.messages.images);var o=l(n,99,0,u.icons.add);l(n,98,0,o),l(n,104,0),l(n,112,0,"acl_enabled"),l(n,115,0,"acl_enabled"),l(n,120,0,u.cephIscsiConfigVersion>10&&!u.targetForm.getValue("acl_enabled")),l(n,122,0,u.targetForm.getValue("acl_enabled")),l(n,124,0,u.targetForm.getValue("acl_enabled")),l(n,128,0,e["ɵnov"](n,2))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,4).ngClassUntouched,e["ɵnov"](n,4).ngClassTouched,e["ɵnov"](n,4).ngClassPristine,e["ɵnov"](n,4).ngClassDirty,e["ɵnov"](n,4).ngClassValid,e["ɵnov"](n,4).ngClassInvalid,e["ɵnov"](n,4).ngClassPending);var a=e["ɵunv"](n,8,0,l(n,9,0,e["ɵnov"](n.parent,0),u.action)),t=e["ɵunv"](n,8,1,l(n,10,0,e["ɵnov"](n.parent,1),u.resource));l(n,8,0,a,t),l(n,12,0,e["ɵnov"](n,13).hasErrors,e["ɵnov"](n,13).hasSuccess),l(n,20,0,e["ɵnov"](n,25).ngClassUntouched,e["ɵnov"](n,25).ngClassTouched,e["ɵnov"](n,25).ngClassPristine,e["ɵnov"](n,25).ngClassDirty,e["ɵnov"](n,25).ngClassValid,e["ɵnov"](n,25).ngClassInvalid,e["ɵnov"](n,25).ngClassPending,e["ɵnov"](n,27).validClass,e["ɵnov"](n,27).invalidClass),l(n,43,0,e["ɵnov"](n,44).hasErrors,e["ɵnov"](n,44).hasSuccess),l(n,62,0,e["ɵnov"](n,67).ngClassUntouched,e["ɵnov"](n,67).ngClassTouched,e["ɵnov"](n,67).ngClassPristine,e["ɵnov"](n,67).ngClassDirty,e["ɵnov"](n,67).ngClassValid,e["ɵnov"](n,67).ngClassInvalid,e["ɵnov"](n,67).ngClassPending,e["ɵnov"](n,68).validClass,e["ɵnov"](n,68).invalidClass),l(n,72,0,e["ɵnov"](n,73).hasErrors,e["ɵnov"](n,73).hasSuccess),l(n,81,0,e["ɵnov"](n,86).ngClassUntouched,e["ɵnov"](n,86).ngClassTouched,e["ɵnov"](n,86).ngClassPristine,e["ɵnov"](n,86).ngClassDirty,e["ɵnov"](n,86).ngClassValid,e["ɵnov"](n,86).ngClassInvalid,e["ɵnov"](n,86).ngClassPending,e["ɵnov"](n,87).validClass,e["ɵnov"](n,87).invalidClass),l(n,103,0,e["ɵnov"](n,104).hasErrors,e["ɵnov"](n,104).hasSuccess),l(n,109,0,e["ɵnov"](n,114).ngClassUntouched,e["ɵnov"](n,114).ngClassTouched,e["ɵnov"](n,114).ngClassPristine,e["ɵnov"](n,114).ngClassDirty,e["ɵnov"](n,114).ngClassValid,e["ɵnov"](n,114).ngClassInvalid,e["ɵnov"](n,114).ngClassPending,e["ɵnov"](n,115).validClass,e["ɵnov"](n,115).invalidClass);var o=e["ɵunv"](n,129,0,l(n,130,0,e["ɵnov"](n.parent,0),u.action)),d=e["ɵunv"](n,129,1,l(n,131,0,e["ɵnov"](n.parent,1),u.resource));l(n,129,0,o,d)}))}function Ra(l){return e["ɵvid"](0,[e["ɵpid"](0,D.TitleCasePipe,[]),e["ɵpid"](0,ll.a,[]),e["ɵpid"](0,z.a,[]),(l()(),e["ɵeld"](3,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ia)),e["ɵdid"](5,16384,null,0,D.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,5,0,n.component.targetForm)}),null)}function Na(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-iscsi-target-form",[],null,null,null,Ra,ke)),e["ɵdid"](1,114688,null,0,qe.a,[Zu.a,rl.b,Jl.a,fl.m,fl.a,A.a,Wl.a,Ql.b],null,null)],(function(l,n){l(n,1,0)}),null)}var wa=e["ɵccf"]("cd-iscsi-target-form",qe.a,Na,{},{},[]),Ea=u("Vhfg"),Ta=u("cxJu");u.d(n,"BlockModuleNgFactory",(function(){return ya})),u.d(n,"RoutedBlockModuleNgFactory",(function(){return Va}));var ya=e["ɵcmf"](a.a,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[t.a,o.a,d.a,i.a,i.b,s.a,r.a,c.a,p.a,m.a,g.a,f.a,v.a,C.a,b.a,h.a,I.a,R.a,R.c,R.b,R.d,N.a,w.a,E.a,T.a,y.a,V.a,x.a,q.a,k.a,_.a]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,D.NgLocalization,D.NgLocaleLocalization,[e.LOCALE_ID,[2,D["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,P.a,P.a,[]),e["ɵmpd"](4608,S.a,S.a,[A.a]),e["ɵmpd"](4608,D.DatePipe,D.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,B.a,B.a,[U.a]),e["ɵmpd"](4608,$.a,$.a,[U.a]),e["ɵmpd"](4608,M.a,M.a,[U.a]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[]),e["ɵmpd"](4608,K.a,K.a,[]),e["ɵmpd"](4608,Z.a,Z.a,[D.DatePipe]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,W.a,W.a,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,Y.a,Y.a,[]),e["ɵmpd"](4608,X.a,X.a,[]),e["ɵmpd"](4608,H.a,H.a,[A.a]),e["ɵmpd"](4608,ll.a,ll.a,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,ul.a,ul.a,[]),e["ɵmpd"](4608,el.D,el.D,[]),e["ɵmpd"](4608,el.h,el.h,[]),e["ɵmpd"](4608,al.b,al.b,[]),e["ɵmpd"](4608,tl.a,tl.a,[]),e["ɵmpd"](4608,ol.a,ol.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,dl.a,dl.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,ol.a,e.ApplicationRef]),e["ɵmpd"](4608,il.c,il.c,[]),e["ɵmpd"](4608,sl.a,sl.a,[]),e["ɵmpd"](4608,rl.b,rl.b,[e.RendererFactory2,dl.a]),e["ɵmpd"](4608,cl.y,cl.y,[D.DOCUMENT]),e["ɵmpd"](4608,cl.r,cl.r,[]),e["ɵmpd"](4608,cl.a,cl.a,[]),e["ɵmpd"](4608,pl.f,pl.f,[]),e["ɵmpd"](4608,ml.a,ml.a,[]),e["ɵmpd"](4608,gl.a,gl.a,[fl.m,ml.a]),e["ɵmpd"](4608,vl.f,vl.f,[]),e["ɵmpd"](4608,Cl.t,Cl.t,[]),e["ɵmpd"](4608,Cl.v,Cl.v,[]),e["ɵmpd"](4608,Cl.a,Cl.a,[]),e["ɵmpd"](4608,Cl.h,Cl.h,[]),e["ɵmpd"](4608,Cl.d,Cl.d,[]),e["ɵmpd"](4608,Cl.j,Cl.j,[]),e["ɵmpd"](4608,Cl.l,Cl.l,[]),e["ɵmpd"](4608,Cl.u,Cl.u,[Cl.v,Cl.l]),e["ɵmpd"](4608,bl.a,bl.a,[]),e["ɵmpd"](1073742336,D.CommonModule,D.CommonModule,[]),e["ɵmpd"](1073742336,vl.d,vl.d,[]),e["ɵmpd"](1073742336,hl.a,hl.a,[]),e["ɵmpd"](1073742336,el.C,el.C,[]),e["ɵmpd"](1073742336,el.n,el.n,[]),e["ɵmpd"](1073742336,el.y,el.y,[]),e["ɵmpd"](1073742336,al.c,al.c,[]),e["ɵmpd"](1073742336,tl.d,tl.d,[]),e["ɵmpd"](1073742336,il.d,il.d,[]),e["ɵmpd"](1073742336,sl.d,sl.d,[]),e["ɵmpd"](1073742336,Il.b,Il.b,[]),e["ɵmpd"](1073742336,rl.e,rl.e,[]),e["ɵmpd"](1073742336,Rl.a,Rl.a,[]),e["ɵmpd"](1073742336,pl.e,pl.e,[]),e["ɵmpd"](1073742336,Nl.f,Nl.f,[]),e["ɵmpd"](1073742336,wl.ClickOutsideModule,wl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,El.b,El.b,[]),e["ɵmpd"](1073742336,fl.q,fl.q,[[2,fl.v],[2,fl.m]]),e["ɵmpd"](1073742336,Tl.a,Tl.a,[]),e["ɵmpd"](1073742336,cl.u,cl.u,[]),e["ɵmpd"](1073742336,yl.a,yl.a,[]),e["ɵmpd"](1073742336,Vl.a,Vl.a,[]),e["ɵmpd"](1073742336,xl.a,xl.a,[]),e["ɵmpd"](1073742336,ql.a,ql.a,[]),e["ɵmpd"](1073742336,Cl.g,Cl.g,[]),e["ɵmpd"](1073742336,kl.b,kl.b,[]),e["ɵmpd"](1073742336,a.a,a.a,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,pl.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),Va=e["ɵcmf"](a.b,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[t.a,o.a,d.a,i.a,i.b,s.a,r.a,c.a,p.a,m.a,g.a,f.a,v.a,C.a,b.a,h.a,I.a,R.a,R.c,R.b,R.d,N.a,w.a,E.a,T.a,y.a,V.a,x.a,q.a,k.a,_.a,pn,hn,_n,Bn,Bu,oe,Re,wa]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,D.NgLocalization,D.NgLocaleLocalization,[e.LOCALE_ID,[2,D["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,P.a,P.a,[]),e["ɵmpd"](4608,S.a,S.a,[A.a]),e["ɵmpd"](4608,D.DatePipe,D.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,B.a,B.a,[U.a]),e["ɵmpd"](4608,$.a,$.a,[U.a]),e["ɵmpd"](4608,M.a,M.a,[U.a]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[]),e["ɵmpd"](4608,K.a,K.a,[]),e["ɵmpd"](4608,Z.a,Z.a,[D.DatePipe]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,W.a,W.a,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,Y.a,Y.a,[]),e["ɵmpd"](4608,X.a,X.a,[]),e["ɵmpd"](4608,H.a,H.a,[A.a]),e["ɵmpd"](4608,ll.a,ll.a,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,ul.a,ul.a,[]),e["ɵmpd"](4608,el.D,el.D,[]),e["ɵmpd"](4608,el.h,el.h,[]),e["ɵmpd"](4608,al.b,al.b,[]),e["ɵmpd"](4608,tl.a,tl.a,[]),e["ɵmpd"](4608,ol.a,ol.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,dl.a,dl.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,ol.a,e.ApplicationRef]),e["ɵmpd"](4608,il.c,il.c,[]),e["ɵmpd"](4608,sl.a,sl.a,[]),e["ɵmpd"](4608,rl.b,rl.b,[e.RendererFactory2,dl.a]),e["ɵmpd"](4608,cl.y,cl.y,[D.DOCUMENT]),e["ɵmpd"](4608,cl.r,cl.r,[]),e["ɵmpd"](4608,cl.a,cl.a,[]),e["ɵmpd"](4608,pl.f,pl.f,[]),e["ɵmpd"](4608,ml.a,ml.a,[]),e["ɵmpd"](4608,gl.a,gl.a,[fl.m,ml.a]),e["ɵmpd"](4608,vl.f,vl.f,[]),e["ɵmpd"](4608,Cl.t,Cl.t,[]),e["ɵmpd"](4608,Cl.v,Cl.v,[]),e["ɵmpd"](4608,Cl.a,Cl.a,[]),e["ɵmpd"](4608,Cl.h,Cl.h,[]),e["ɵmpd"](4608,Cl.d,Cl.d,[]),e["ɵmpd"](4608,Cl.j,Cl.j,[]),e["ɵmpd"](4608,Cl.l,Cl.l,[]),e["ɵmpd"](4608,Cl.u,Cl.u,[Cl.v,Cl.l]),e["ɵmpd"](4608,bl.a,bl.a,[]),e["ɵmpd"](1073742336,D.CommonModule,D.CommonModule,[]),e["ɵmpd"](1073742336,vl.d,vl.d,[]),e["ɵmpd"](1073742336,hl.a,hl.a,[]),e["ɵmpd"](1073742336,el.C,el.C,[]),e["ɵmpd"](1073742336,el.n,el.n,[]),e["ɵmpd"](1073742336,el.y,el.y,[]),e["ɵmpd"](1073742336,al.c,al.c,[]),e["ɵmpd"](1073742336,tl.d,tl.d,[]),e["ɵmpd"](1073742336,il.d,il.d,[]),e["ɵmpd"](1073742336,sl.d,sl.d,[]),e["ɵmpd"](1073742336,Il.b,Il.b,[]),e["ɵmpd"](1073742336,rl.e,rl.e,[]),e["ɵmpd"](1073742336,Rl.a,Rl.a,[]),e["ɵmpd"](1073742336,pl.e,pl.e,[]),e["ɵmpd"](1073742336,Nl.f,Nl.f,[]),e["ɵmpd"](1073742336,wl.ClickOutsideModule,wl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,El.b,El.b,[]),e["ɵmpd"](1073742336,fl.q,fl.q,[[2,fl.v],[2,fl.m]]),e["ɵmpd"](1073742336,Tl.a,Tl.a,[]),e["ɵmpd"](1073742336,cl.u,cl.u,[]),e["ɵmpd"](1073742336,yl.a,yl.a,[]),e["ɵmpd"](1073742336,Vl.a,Vl.a,[]),e["ɵmpd"](1073742336,xl.a,xl.a,[]),e["ɵmpd"](1073742336,ql.a,ql.a,[]),e["ɵmpd"](1073742336,Cl.g,Cl.g,[]),e["ɵmpd"](1073742336,kl.b,kl.b,[]),e["ɵmpd"](1073742336,a.a,a.a,[]),e["ɵmpd"](1073742336,a.b,a.b,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,pl.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,fl.k,(function(){return[[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"rbd",canActivate:[Ea.a],data:a.c,children:[{path:"",component:Zl.a},{path:"namespaces",component:mn.a,data:a.d},{path:"trash",component:In.a,data:a.j},{path:"performance",component:An.a,data:a.k},{path:"create",component:Hn.a,data:a.l},{path:"edit/:image_spec",component:Hn.a,data:a.m},{path:"clone/:image_spec/:snap",component:Hn.a,data:a.n},{path:"copy/:image_spec",component:Hn.a,data:a.o},{path:"copy/:image_spec/:snap",component:Hn.a,data:a.p}]},{path:"mirroring",component:Ta.a,canActivate:[Ea.a],data:a.q},{path:"iscsi",canActivate:[Ea.a],data:a.e,children:[{path:"",redirectTo:"overview",pathMatch:"full"},{path:"overview",component:Ku.a,data:a.f},{path:"targets",data:a.g,children:[{path:"",component:me.a},{path:"create",component:qe.a,data:a.h},{path:"edit/:target_iqn",component:qe.a,data:a.i}]}]}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.1818f80c2e905e85a90f.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.1818f80c2e905e85a90f.js
deleted file mode 100644 (file)
index 35af65a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{nOaW:function(l,n,e){"use strict";e.r(n);var u=e("8Y7J"),i=e("sne2"),t=e("s7LF"),a=e("LvDl"),o=e("IheW"),s=e("GiVz"),r=e("pL04");let d=(()=>{class l{constructor(l,n){this.http=l,this.i18n=n,this.apiPath="api/crush_rule",this.formTooltips={root:this.i18n("The name of the node under which data should be placed."),failure_domain:this.i18n("The type of CRUSH nodes across which we should separate replicas."),device_class:this.i18n("The device class data should be placed on.")}}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return l.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new l(u["ɵɵinject"](o.c),u["ɵɵinject"](s.a))},token:l,providedIn:r.a}),l})(),c=(()=>{class l{constructor(l,n){this.http=l,this.i18n=n,this.apiPath="api/erasure_code_profile",this.formTooltips={k:this.i18n("Each object is split in data-chunks parts, each stored on a different OSD."),m:this.i18n("Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data."),plugins:{jerasure:{description:this.i18n("The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools."),technique:this.i18n("The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2."),packetSize:this.i18n("The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.")},lrc:{description:this.i18n("With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven."),l:this.i18n("Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set."),crushLocality:this.i18n("The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.")},isa:{description:this.i18n("The isa plugin encapsulates the ISA library. It only runs on Intel processors."),technique:this.i18n("The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.")},shec:{description:this.i18n("The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes."),c:this.i18n("The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.")}},crushRoot:this.i18n("The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default."),crushFailureDomain:this.i18n("Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host."),crushDeviceClass:this.i18n("Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map."),directory:this.i18n("Set the directory name from which the erasure code plugin is loaded.")}}list(){return this.http.get(this.apiPath)}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return l.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new l(u["ɵɵinject"](o.c),u["ɵɵinject"](s.a))},token:l,providedIn:r.a}),l})();var m=e("Ekvf");class f{constructor(){this.nodes=[],this.idTree={},this.allDevices=[],this.buckets=[],this.failureDomains={},this.failureDomainKeys=[],this.devices=[],this.deviceCount=0}static searchFailureDomains(l,n){return this.getFailureDomains(this.search(l,n))}static search(l,n){const[e,u]=n.split("~"),i=l.find(l=>["name","id","type"].some(n=>l[n]===e));return i?(l=this.getSubNodes(i,this.createIdTreeFromNodes(l)),u&&(l=this.filterNodesByDeviceType(l,u)),l):[]}static createIdTreeFromNodes(l){const n={};return l.forEach(l=>{n[l.id]=l}),n}static getSubNodes(l,n){let e=[l];return l.children?(l.children.forEach(l=>{e=e.concat(this.getSubNodes(n[l],n))}),e):e}static filterNodesByDeviceType(l,n){let e,u=l.filter(l=>l.device_class&&l.device_class!==n).map(l=>l.id),i=u;do{e=!1,l=l.filter(l=>!u.includes(l.id));const n=[];l.forEach(l=>{l.children&&l.children.every(l=>u.includes(l))&&(n.push(l.id),e=!0)}),e&&(u=n,i=i.concat(n))}while(e);return(l=a.cloneDeep(l)).map(l=>l.children?(l.children=l.children.filter(l=>!i.includes(l)),l):l)}static getFailureDomains(l){const n={};return l.forEach(l=>{const e=l.type;n[e]||(n[e]=[]),n[e].push(l)}),n}initCrushNodeSelection(l,n,e,u){this.nodes=l,this.idTree=f.createIdTreeFromNodes(l),l.forEach(l=>{this.idTree[l.id]=l}),this.buckets=a.sortBy(l.filter(l=>l.children),"name"),this.controls={root:n,failure:e,device:u},this.preSelectRoot(),this.controls.root.valueChanges.subscribe(()=>this.onRootChange()),this.controls.failure.valueChanges.subscribe(()=>this.onFailureDomainChange()),this.controls.device.valueChanges.subscribe(()=>this.onDeviceChange())}preSelectRoot(){const l=this.nodes.find(l=>"root"===l.type);this.silentSet(this.controls.root,l),this.onRootChange()}silentSet(l,n){l.setValue(n,{emitEvent:!1})}onRootChange(){const l=f.getSubNodes(this.controls.root.value,this.idTree),n=f.getFailureDomains(l);Object.keys(n).forEach(l=>{n[l].length<=1&&delete n[l]}),this.failureDomains=n,this.failureDomainKeys=Object.keys(n).sort(),this.updateFailureDomain()}updateFailureDomain(){let l=this.getIncludedCustomValue(this.controls.failure,Object.keys(this.failureDomains));""===l&&(l=this.setMostCommonDomain(this.controls.failure)),this.updateDevices(l)}getIncludedCustomValue(l,n){return l.dirty&&n.includes(l.value)?l.value:""}setMostCommonDomain(l){let n={n:0,type:""};return Object.keys(this.failureDomains).forEach(l=>{const e=this.failureDomains[l].length;n.n<e&&(n={n:e,type:l})}),this.silentSet(l,n.type),n.type}onFailureDomainChange(){this.updateDevices()}updateDevices(l=this.controls.failure.value){const n=a.flatten(this.failureDomains[l].map(l=>f.getSubNodes(l,this.idTree)));this.allDevices=n.filter(l=>l.device_class).map(l=>l.device_class),this.devices=a.uniq(this.allDevices).sort();const e=1===this.devices.length?this.devices[0]:this.getIncludedCustomValue(this.controls.device,this.devices);this.silentSet(this.controls.device,e),this.onDeviceChange(e)}onDeviceChange(l=this.controls.device.value){this.deviceCount=""===l?this.allDevices.length:this.allDevices.filter(n=>n===l).length}}var g=e("0+/T"),p=e("a96k"),h=e("oxzT"),v=e("QFaf"),b=e("1Ni5"),C=e("PhyI"),R=e("kvvV"),I=e("Fgil"),E=e("aexS"),N=e("aXbf"),y=e("kn/O"),V=e("2EZI");class w extends f{constructor(l,n,e,i,t,a){super(),this.formBuilder=l,this.bsModalRef=n,this.taskWrapper=e,this.crushRuleService=i,this.i18n=t,this.actionLabels=a,this.submitAction=new u.EventEmitter,this.tooltips=this.crushRuleService.formTooltips,this.action=this.actionLabels.CREATE,this.resource=this.i18n("Crush Rule"),this.createForm()}createForm(){this.form=this.formBuilder.group({name:["",[t.B.required,t.B.pattern("[A-Za-z0-9_-]+"),b.a.custom("uniqueName",l=>this.names&&-1!==this.names.indexOf(l))]],root:null,failure_domain:"",device_class:""})}ngOnInit(){this.crushRuleService.getInfo().subscribe(({names:l,nodes:n})=>{this.initCrushNodeSelection(n,this.form.get("root"),this.form.get("failure_domain"),this.form.get("device_class")),this.names=l})}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l=a.cloneDeep(this.form.value);l.root=l.root.name,""===l.device_class&&delete l.device_class,this.taskWrapper.wrapTaskAroundCall({task:new R.a("crushRule/create",l),call:this.crushRuleService.create(l)}).subscribe(void 0,()=>{this.form.setErrors({cdSubmitButton:!0})},()=>{this.bsModalRef.hide(),this.submitAction.emit(l)})}}class T{}class _ extends f{constructor(l,n,e,i,t,a){super(),this.formBuilder=l,this.bsModalRef=n,this.taskWrapper=e,this.ecpService=i,this.i18n=t,this.actionLabels=a,this.submitAction=new u.EventEmitter,this.tooltips=this.ecpService.formTooltips,this.PLUGIN={LRC:"lrc",SHEC:"shec",JERASURE:"jerasure",ISA:"isa"},this.plugin=this.PLUGIN.JERASURE,this.action=this.actionLabels.CREATE,this.resource=this.i18n("EC Profile"),this.createForm(),this.setJerasureDefaults()}createForm(){this.form=this.formBuilder.group({name:[null,[t.B.required,t.B.pattern("[A-Za-z0-9_-]+"),b.a.custom("uniqueName",l=>this.names&&-1!==this.names.indexOf(l))]],plugin:[this.PLUGIN.JERASURE,[t.B.required]],k:[4,[t.B.required,t.B.min(2),b.a.custom("max",()=>this.baseValueValidation(!0)),b.a.custom("unequal",l=>this.lrcDataValidation(l)),b.a.custom("kLowerM",l=>this.shecDataValidation(l))]],m:[2,[t.B.required,t.B.min(1),b.a.custom("max",()=>this.baseValueValidation())]],crushFailureDomain:"",crushRoot:null,crushDeviceClass:"",directory:"",technique:"reed_sol_van",packetSize:[2048,[t.B.min(1)]],l:[3,[t.B.required,t.B.min(1),b.a.custom("unequal",l=>this.lrcLocalityValidation(l))]],crushLocality:"",c:[2,[t.B.required,t.B.min(1),b.a.custom("cGreaterM",l=>this.shecDurabilityValidation(l))]]}),this.form.get("k").valueChanges.subscribe(()=>this.updateValidityOnChange(["m","l"])),this.form.get("m").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","l","c"])),this.form.get("l").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","m"])),this.form.get("plugin").valueChanges.subscribe(l=>this.onPluginChange(l))}baseValueValidation(l=!1){return this.validValidation(()=>this.getKMSum()>this.deviceCount&&this.form.getValue("k")>this.form.getValue("m")===l)}validValidation(l,n){return!((!this.form||n)&&this.plugin!==n)&&l()}getKMSum(){return this.form.getValue("k")+this.form.getValue("m")}lrcDataValidation(l){return this.validValidation(()=>{const n=this.form.getValue("m"),e=this.form.getValue("l"),u=l+n;return this.lrcMultiK=l/(u/e),l%(u/e)!=0},"lrc")}shecDataValidation(l){return this.validValidation(()=>this.form.getValue("m")>l,"shec")}lrcLocalityValidation(l){return this.validValidation(()=>{const n=this.getKMSum();return this.lrcGroups=l>0?n/l:0,l>0&&n%l!=0},"lrc")}shecDurabilityValidation(l){return this.validValidation(()=>{const n=this.form.getValue("m");return l>n},"shec")}updateValidityOnChange(l){l.forEach(l=>this.form.get(l).updateValueAndValidity({emitEvent:!1}))}onPluginChange(l){this.plugin=l,l===this.PLUGIN.JERASURE?this.setJerasureDefaults():l===this.PLUGIN.LRC?this.setLrcDefaults():l===this.PLUGIN.ISA?this.setIsaDefaults():l===this.PLUGIN.SHEC&&this.setShecDefaults(),this.updateValidityOnChange(["m"])}setJerasureDefaults(){this.setDefaults({k:4,m:2}),this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liberation","blaum_roth","liber8tion"]}setLrcDefaults(){this.setDefaults({k:4,m:2,l:3})}setIsaDefaults(){this.setDefaults({k:7,m:3}),this.techniques=["reed_sol_van","cauchy"]}setShecDefaults(){this.setDefaults({k:4,m:3,c:2})}setDefaults(l){Object.keys(l).forEach(n=>{const e=this.form.get(n),u=e.value;let i=e.pristine;"k"===n?i=[4,7].includes(u):"m"===n&&(i=[2,3].includes(u)),i&&this.form.get(n).setValue(l[n])})}ngOnInit(){this.ecpService.getInfo().subscribe(({plugins:l,names:n,directory:e,nodes:u})=>{this.initCrushNodeSelection(u,this.form.get("crushRoot"),this.form.get("crushFailureDomain"),this.form.get("crushDeviceClass")),this.plugins=l,this.names=n,this.form.silentSet("directory",e),this.preValidateNumericInputFields()})}preValidateNumericInputFields(){const l=["k","m","l","c"].map(l=>this.form.get(l));l.forEach(l=>{l.markAsTouched(),l.markAsDirty()}),l[1].updateValueAndValidity()}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l=this.createJson();this.taskWrapper.wrapTaskAroundCall({task:new R.a("ecp/create",{name:l.name}),call:this.ecpService.create(l)}).subscribe(void 0,()=>{this.form.setErrors({cdSubmitButton:!0})},()=>{this.bsModalRef.hide(),this.submitAction.emit(l)})}createJson(){const l={technique:[this.PLUGIN.ISA,this.PLUGIN.JERASURE],packetSize:[this.PLUGIN.JERASURE],l:[this.PLUGIN.LRC],crushLocality:[this.PLUGIN.LRC],c:[this.PLUGIN.SHEC]},n=new T,e=this.form.getValue("plugin");return Object.keys(this.form.controls).filter(n=>{const u=l[n],i=this.form.getValue(n);return(u&&u.includes(e)||!u)&&i&&""!==i}).forEach(l=>{this.extendJson(l,n)}),n}extendJson(l,n){const e=this.form.getValue(l);n[{crushFailureDomain:"crush-failure-domain",crushRoot:"crush-root",crushDeviceClass:"crush-device-class",packetSize:"packetsize",crushLocality:"crush-locality"}[l]||l]="crushRoot"===l?e.name:e}}var S=e("DNAf");class D{constructor(l){this.erasureInfo=!1,this.crushInfo=!1,this.pgs=1,this.poolTypes=["erasure","replicated"],this.applications={selected:[],default:["cephfs","rbd","rgw"],available:[],validators:[t.B.pattern("[A-Za-z0-9_]+"),t.B.maxLength(128)],messages:new S.a({empty:l("No applications added"),selectionLimit:{text:l("Applications limit reached"),tooltip:l("A pool can only have up to four applications definitions.")},customValidations:{pattern:l("Allowed characters '_a-zA-Z0-9'"),maxlength:l("Maximum length is 128 characters")},filter:l("Filter or add applications"),add:l("Add application")},l)}}}class k{constructor(l,n,e,t,a,o,s,r,d,c,m,f,g){this.dimlessBinaryPipe=l,this.route=n,this.router=e,this.modalService=t,this.poolService=a,this.authStorageService=o,this.formatter=s,this.bsModalService=r,this.taskWrapper=d,this.ecpService=c,this.crushRuleService=m,this.i18n=f,this.actionLabels=g,this.editing=!1,this.isReplicated=!1,this.isErasure=!1,this.data=new D(this.i18n),this.externalPgChange=!1,this.current={rules:[]},this.initializeConfigData=new u.EventEmitter,this.currentConfigurationValues={},this.icons=h.a,this.crushUsage=void 0,this.ecpUsage=void 0,this.editing=this.router.url.startsWith(`/pool/${i.e.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource=this.i18n("pool"),this.authenticate(),this.createForm()}authenticate(){this.permission=this.authStorageService.getPermissions().pool,(!this.permission.read||!this.permission.update&&this.editing||!this.permission.create&&!this.editing)&&this.router.navigate(["/404"])}createForm(){const l=new v.a({mode:new t.i("none"),algorithm:new t.i(""),minBlobSize:new t.i("",{updateOn:"blur"}),maxBlobSize:new t.i("",{updateOn:"blur"}),ratio:new t.i("",{updateOn:"blur"})});this.form=new v.a({name:new t.i("",{validators:[t.B.pattern(/^[.A-Za-z0-9_/-]+$/),t.B.required,b.a.custom("rbdPool",()=>this.form&&this.form.getValue("name").includes("/")&&this.data&&-1!==this.data.applications.selected.indexOf("rbd"))]}),poolType:new t.i("",{validators:[t.B.required]}),crushRule:new t.i(null,{validators:[b.a.custom("tooFewOsds",l=>this.info&&l&&this.info.osd_count<l.min_size),b.a.custom("required",l=>this.isReplicated&&this.info.crush_rules_replicated.length>0&&!l)]}),size:new t.i("",{updateOn:"blur"}),erasureProfile:new t.i(null),pgNum:new t.i("",{validators:[t.B.required,t.B.min(1)]}),pgAutoscaleMode:new t.i(null),ecOverwrites:new t.i(!1),compression:l,max_bytes:new t.i(""),max_objects:new t.i(0,{validators:[t.B.min(0)]})},[b.a.custom("form",()=>null)])}ngOnInit(){this.poolService.getInfo().subscribe(l=>{this.initInfo(l),this.editing?this.initEditMode():this.setAvailableApps(),this.listenToChanges(),this.setComplexValidators()})}initInfo(l){this.pgAutoscaleModes=l.pg_autoscale_modes,this.form.silentSet("pgAutoscaleMode",l.pg_autoscale_default_mode),this.form.silentSet("algorithm",l.bluestore_compression_algorithm),this.info=l,this.initEcp(l.erasure_code_profiles)}initEcp(l){this.setListControlStatus("erasureProfile",l),this.ecProfiles=l}setListControlStatus(l,n){const e=this.form.get(l),u=e.value;1!==n.length||u&&a.isEqual(u,n[0])?0===n.length&&u&&e.setValue(null):e.setValue(n[0]),n.length<=1?e.enabled&&e.disable():e.disabled&&e.enable()}initEditMode(){this.disableForEdit(),this.routeParamsSubscribe=this.route.params.subscribe(l=>this.poolService.get(l.name).subscribe(l=>{this.data.pool=l,this.initEditFormData(l)}))}disableForEdit(){["poolType","crushRule","size","erasureProfile","ecOverwrites"].forEach(l=>this.form.get(l).disable())}initEditFormData(l){this.initializeConfigData.emit({initialData:l.configuration,sourceType:C.a.pool}),this.poolTypeChange(l.type);const n=this.info.crush_rules_replicated.concat(this.info.crush_rules_erasure),e={name:l.pool_name,poolType:l.type,crushRule:n.find(n=>n.rule_name===l.crush_rule),size:l.size,erasureProfile:this.ecProfiles.find(n=>n.name===l.erasure_code_profile),pgAutoscaleMode:l.pg_autoscale_mode,pgNum:l.pg_num,ecOverwrites:l.flags_names.includes("ec_overwrites"),mode:l.options.compression_mode,algorithm:l.options.compression_algorithm,minBlobSize:this.dimlessBinaryPipe.transform(l.options.compression_min_blob_size),maxBlobSize:this.dimlessBinaryPipe.transform(l.options.compression_max_blob_size),ratio:l.options.compression_required_ratio,max_bytes:this.dimlessBinaryPipe.transform(l.quota_max_bytes),max_objects:l.quota_max_objects};Object.keys(e).forEach(l=>{const n=e[l];a.isUndefined(n)||""===n||this.form.silentSet(l,n)}),this.data.pgs=this.form.getValue("pgNum"),this.setAvailableApps(this.data.applications.default.concat(l.application_metadata)),this.data.applications.selected=l.application_metadata}setAvailableApps(l=this.data.applications.default){this.data.applications.available=a.uniq(l.sort()).map(l=>new p.a(!1,l,""))}listenToChanges(){this.listenToChangesDuringAddEdit(),this.editing||this.listenToChangesDuringAdd()}listenToChangesDuringAddEdit(){this.form.get("pgNum").valueChanges.subscribe(l=>{const n=l-this.data.pgs;1===Math.abs(n)&&2!==l?this.doPgPowerJump(n):this.data.pgs=l})}doPgPowerJump(l){const n=this.calculatePgPower()+l;this.setPgs(-1===l?Math.round(n):Math.floor(n))}calculatePgPower(l=this.form.getValue("pgNum")){return Math.log(l)/Math.log(2)}setPgs(l){const n=Math.pow(2,l<0?0:l);this.data.pgs=n,this.form.silentSet("pgNum",n)}listenToChangesDuringAdd(){this.form.get("poolType").valueChanges.subscribe(l=>{this.poolTypeChange(l)}),this.form.get("crushRule").valueChanges.subscribe(l=>{this.crushDeletionBtn&&this.crushDeletionBtn.isOpen&&this.crushDeletionBtn.hide(),l&&(this.setCorrectMaxSize(l),this.crushRuleIsUsedBy(l.rule_name),this.replicatedRuleChange(),this.pgCalc())}),this.form.get("size").valueChanges.subscribe(()=>{this.pgCalc()}),this.form.get("erasureProfile").valueChanges.subscribe(l=>{this.ecpDeletionBtn&&this.ecpDeletionBtn.isOpen&&this.ecpDeletionBtn.hide(),l&&(this.ecpIsUsedBy(l.name),this.pgCalc())}),this.form.get("mode").valueChanges.subscribe(()=>{["minBlobSize","maxBlobSize","ratio"].forEach(l=>{this.form.get(l).updateValueAndValidity({emitEvent:!1})})}),this.form.get("minBlobSize").valueChanges.subscribe(()=>{this.form.get("maxBlobSize").updateValueAndValidity({emitEvent:!1})}),this.form.get("maxBlobSize").valueChanges.subscribe(()=>{this.form.get("minBlobSize").updateValueAndValidity({emitEvent:!1})})}poolTypeChange(l){if("replicated"===l?this.setTypeBooleans(!0,!1):this.setTypeBooleans(!1,"erasure"===l),!l||!this.info)return void(this.current.rules=[]);const n=this.info["crush_rules_"+l]||[];this.current.rules=n,this.editing||(this.isReplicated&&this.setListControlStatus("crushRule",n),this.replicatedRuleChange(),this.pgCalc())}setTypeBooleans(l,n){this.isReplicated=l,this.isErasure=n}replicatedRuleChange(){if(!this.isReplicated)return;const l=this.form.get("size");let n=this.form.getValue("size")||3;const e=this.getMinSize(),u=this.getMaxSize();n<e?n=e:n>u&&(n=u),n!==l.value&&this.form.silentSet("size",n)}getMinSize(){if(!this.info||this.info.osd_count<1)return 0;const l=this.form.getValue("crushRule");return l?l.min_size:1}getMaxSize(){const l=this.form.getValue("crushRule");return this.info?l?l.usable_size:Math.min(this.info.osd_count,3):0}pgCalc(){const l=this.form.getValue("poolType");if(!this.info||this.form.get("pgNum").dirty||!l)return;const n=100*this.info.osd_count,e=this.isReplicated?this.replicatedPgCalc(n):this.erasurePgCalc(n);if(!e)return;const u=this.data.pgs;this.alignPgs(e),this.externalPgChange||(this.externalPgChange=u!==this.data.pgs)}setCorrectMaxSize(l=this.form.getValue("crushRule")){if(!l)return;const n=f.searchFailureDomains(this.info.nodes,l.steps[0].item_name)[l.steps[1].type];l.usable_size=Math.min(n?n.length:l.max_size,l.max_size)}replicatedPgCalc(l){const n=this.form.get("size"),e=n.value;return n.valid&&e>0?l/e:0}erasurePgCalc(l){const n=this.form.get("erasureProfile"),e=n.value;return(n.valid||n.disabled)&&e?l/(e.k+e.m):0}alignPgs(l=this.form.getValue("pgNum")){this.setPgs(Math.round(this.calculatePgPower(l<1?1:l)))}setComplexValidators(){this.editing?this.form.get("name").setValidators([this.form.get("name").validator,b.a.custom("uniqueName",l=>this.data.pool&&this.info&&-1!==this.info.pool_names.indexOf(l)&&this.info.pool_names.indexOf(l)!==this.info.pool_names.indexOf(this.data.pool.pool_name))]):(b.a.validateIf(this.form.get("size"),()=>this.isReplicated,[b.a.custom("min",l=>this.form.getValue("size")&&l<this.getMinSize()),b.a.custom("max",l=>this.form.getValue("size")&&this.getMaxSize()<l)]),this.form.get("name").setValidators([this.form.get("name").validator,b.a.custom("uniqueName",l=>this.info&&-1!==this.info.pool_names.indexOf(l))])),this.setCompressionValidators()}setCompressionValidators(){b.a.validateIf(this.form.get("minBlobSize"),()=>this.hasCompressionEnabled(),[t.B.min(0),b.a.custom("maximum",l=>this.oddBlobSize(l,this.form.getValue("maxBlobSize")))]),b.a.validateIf(this.form.get("maxBlobSize"),()=>this.hasCompressionEnabled(),[t.B.min(0),b.a.custom("minimum",l=>this.oddBlobSize(this.form.getValue("minBlobSize"),l))]),b.a.validateIf(this.form.get("ratio"),()=>this.hasCompressionEnabled(),[t.B.min(0),t.B.max(1)])}oddBlobSize(l,n){const e=this.formatter.toBytes(l),u=this.formatter.toBytes(n);return Boolean(e&&u&&e>=u)}hasCompressionEnabled(){return this.form.getValue("mode")&&"none"!==this.form.get("mode").value.toLowerCase()}describeCrushStep(l){return[l.op.replace("_"," "),l.item_name||"",l.type?l.num+" type "+l.type:""].join(" ")}addErasureCodeProfile(){this.addModal(_,l=>this.reloadECPs(l))}addModal(l,n){this.hideOpenTooltips(),this.bsModalService.show(l).content.submitAction.subscribe(l=>{n(l.name)})}hideOpenTooltips(){const l=l=>l&&l.isOpen&&l.hide();l(this.ecpDeletionBtn),l(this.crushDeletionBtn)}reloadECPs(l){this.reloadList({newItemName:l,getInfo:()=>this.ecpService.list(),initInfo:l=>this.initEcp(l),findNewItem:()=>this.ecProfiles.find(n=>n.name===l),controlName:"erasureProfile"})}reloadList({newItemName:l,getInfo:n,initInfo:e,findNewItem:u,controlName:i}){this.modalSubscription&&this.modalSubscription.unsubscribe(),n().subscribe(n=>{if(e(n),!l)return;const t=u();t&&this.form.get(i).setValue(t)})}deleteErasureCodeProfile(){this.deletionModal({value:this.form.getValue("erasureProfile"),usage:this.ecpUsage,deletionBtn:this.ecpDeletionBtn,dataName:"erasureInfo",getTabs:()=>this.ecpInfoTabs,tabPosition:1,nameAttribute:"name",itemDescription:this.i18n("erasure code profile"),reloadFn:()=>this.reloadECPs(),deleteFn:l=>this.ecpService.delete(l),taskName:"ecp/delete"})}deletionModal({value:l,usage:n,deletionBtn:e,dataName:u,getTabs:i,tabPosition:t,nameAttribute:a,itemDescription:o,reloadFn:s,deleteFn:r,taskName:d}){if(!l)return;if(n)return e.toggle(),this.data[u]=!0,void setTimeout(()=>{const l=i();l&&(l.tabs[t].active=!0)},50);const c=l[a];this.modalService.show(g.a,{initialState:{itemDescription:o,itemNames:[c],submitActionObservable:()=>{const l=r(c);return l.subscribe(()=>s()),this.taskWrapper.wrapTaskAroundCall({task:new R.a(d,{name:c}),call:l})}}})}addCrushRule(){this.addModal(w,l=>this.reloadCrushRules(l))}reloadCrushRules(l){this.reloadList({newItemName:l,getInfo:()=>this.poolService.getInfo(),initInfo:l=>{this.initInfo(l),this.poolTypeChange("replicated")},findNewItem:()=>this.info.crush_rules_replicated.find(n=>n.rule_name===l),controlName:"crushRule"})}deleteCrushRule(){this.deletionModal({value:this.form.getValue("crushRule"),usage:this.crushUsage,deletionBtn:this.crushDeletionBtn,dataName:"crushInfo",getTabs:()=>this.crushInfoTabs,tabPosition:2,nameAttribute:"rule_name",itemDescription:this.i18n("crush rule"),reloadFn:()=>this.reloadCrushRules(),deleteFn:l=>this.crushRuleService.delete(l),taskName:"crushRule/delete"})}crushRuleIsUsedBy(l){this.crushUsage=l?this.info.used_rules[l]:void 0}ecpIsUsedBy(l){this.ecpUsage=l?this.info.used_profiles[l]:void 0}submit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l={pool:this.form.getValue("name")};this.assignFormFields(l,[{externalFieldName:"pool_type",formControlName:"poolType"},{externalFieldName:"pg_autoscale_mode",formControlName:"pgAutoscaleMode",editable:!0},{externalFieldName:"pg_num",formControlName:"pgNum",replaceFn:l=>"on"===this.form.getValue("pgAutoscaleMode")?1:l,editable:!0},this.isReplicated?{externalFieldName:"size",formControlName:"size"}:{externalFieldName:"erasure_code_profile",formControlName:"erasureProfile",attr:"name"},{externalFieldName:"rule_name",formControlName:"crushRule",replaceFn:l=>this.isReplicated?l&&l.rule_name:void 0},{externalFieldName:"quota_max_bytes",formControlName:"max_bytes",replaceFn:this.formatter.toBytes,editable:!0,resetValue:this.editing?0:void 0},{externalFieldName:"quota_max_objects",formControlName:"max_objects",editable:!0,resetValue:this.editing?0:void 0}]),this.info.is_all_bluestore&&(this.assignFormField(l,{externalFieldName:"flags",formControlName:"ecOverwrites",replaceFn:()=>this.isErasure?["ec_overwrites"]:void 0}),"none"!==this.form.getValue("mode")?this.assignFormFields(l,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:l=>this.hasCompressionEnabled()&&l},{externalFieldName:"compression_algorithm",formControlName:"algorithm",editable:!0},{externalFieldName:"compression_min_blob_size",formControlName:"minBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_max_blob_size",formControlName:"maxBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_required_ratio",formControlName:"ratio",editable:!0,resetValue:0}]):this.editing&&this.assignFormFields(l,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:()=>"unset"},{externalFieldName:"srcpool",formControlName:"name",editable:!0,replaceFn:()=>this.data.pool.pool_name}]));const n=this.data.applications.selected;(n.length>0||this.editing)&&(l.application_metadata=n),this.isReplicated&&!a.isEmpty(this.currentConfigurationValues)&&(l.configuration=this.currentConfigurationValues),this.triggerApiTask(l)}assignFormFields(l,n){n.forEach(n=>this.assignFormField(l,n))}assignFormField(l,{externalFieldName:n,formControlName:e,attr:u,replaceFn:i,editable:t,resetValue:o}){if(this.editing&&(!t||this.form.get(e).pristine))return;const s=this.form.getValue(e);let r=i?i(s):u?a.get(s,u):s;if(!s||!r){if(!t||a.isUndefined(o))return;r=o}l[n]=r}triggerApiTask(l){this.taskWrapper.wrapTaskAroundCall({task:new R.a("pool/"+(this.editing?i.e.EDIT:i.e.CREATE),{pool_name:l.hasOwnProperty("srcpool")?l.srcpool:l.pool}),call:this.poolService[this.editing?i.e.UPDATE:i.e.CREATE](l)}).subscribe(void 0,l=>{a.isObject(l.error)&&"34"===l.error.code&&this.form.get("pgNum").setErrors({34:!0}),this.form.setErrors({cdSubmitButton:!0})},()=>this.router.navigate(["/pool"]))}appSelection(){this.form.get("name").updateValueAndValidity({emitEvent:!1,onlySelf:!0})}}var q=e("MuvH"),x=e("+fVR"),F=e("uIqm"),P=e("x38r"),A=e("yJti"),B=e("vCyI"),O=e("o4+5"),z=e("VTlA"),L=e("EgGo"),j=e("d+Og");class U{constructor(l){this.pool_name=l}}const M=new L.a("pool");class G extends x.a{constructor(l,n,e,u,i,t,o,s,r,d,c){super(),this.poolService=l,this.taskWrapper=n,this.authStorageService=e,this.taskListService=u,this.modalService=i,this.i18n=t,this.pgCategoryService=o,this.dimlessPipe=s,this.urlBuilder=r,this.configurationService=d,this.actionLabels=c,this.selection=new B.a,this.executingTasks=[],this.cacheTiers=[],this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:h.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:h.a.edit,routerLink:()=>this.urlBuilder.getEdit(encodeURIComponent(this.selection.first().pool_name)),name:this.actionLabels.EDIT},{permission:"delete",icon:h.a.destroy,click:()=>this.deletePoolModal(),name:this.actionLabels.DELETE,disable:()=>!this.selection.first()||!this.monAllowPoolDelete,disableDesc:()=>this.getDisableDesc()}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(l=>{if(a.has(l,"value")){const n=a.find(l.value,l=>"mon"===l.section)||{value:!1};this.monAllowPoolDelete="true"===n.value}})}ngOnInit(){const l=(l,n,e)=>a.get(n,l)>a.get(e,l)?1:-1;this.columns=[{prop:"pool_name",name:this.i18n("Name"),flexGrow:4,cellTransformation:P.a.executing},{prop:"type",name:this.i18n("Type"),flexGrow:2},{prop:"application_metadata",name:this.i18n("Applications"),flexGrow:3},{prop:"pg_status",name:this.i18n("PG Status"),flexGrow:3,cellClass:({row:l,column:n,value:e})=>this.getPgStatusCellClass(l,n,e)},{prop:"size",name:this.i18n("Replica Size"),flexGrow:2,cellClass:"text-right"},{prop:"last_change",name:this.i18n("Last Change"),flexGrow:2,cellClass:"text-right"},{prop:"erasure_code_profile",name:this.i18n("Erasure Coded Profile"),flexGrow:2},{prop:"crush_rule",name:this.i18n("Crush Ruleset"),flexGrow:3},{name:this.i18n("Usage"),prop:"usage",cellTemplate:this.poolUsageTpl,flexGrow:3},{prop:"stats.rd_bytes.rates",name:this.i18n("Read bytes"),comparator:(n,e,u,i)=>l("stats.rd_bytes.latest",u,i),cellTransformation:P.a.sparkline,flexGrow:3},{prop:"stats.wr_bytes.rates",name:this.i18n("Write bytes"),comparator:(n,e,u,i)=>l("stats.wr_bytes.latest",u,i),cellTransformation:P.a.sparkline,flexGrow:3},{prop:"stats.rd.rate",name:this.i18n("Read ops"),flexGrow:1,pipe:this.dimlessPipe,cellTransformation:P.a.perSecond},{prop:"stats.wr.rate",name:this.i18n("Write ops"),flexGrow:1,pipe:this.dimlessPipe,cellTransformation:P.a.perSecond}],this.taskListService.init(()=>this.poolService.getList(),void 0,l=>this.pools=this.transformPoolsData(l),()=>{this.table.reset(),this.viewCacheStatusList=[{status:A.a.ValueException}]},l=>l.name.startsWith("pool/"),(l,n)=>n.metadata.pool_name===l.pool_name,{default:l=>new U(l.pool_name)})}updateSelection(l){this.selection=l}deletePoolModal(){const l=this.selection.first().pool_name;this.modalRef=this.modalService.show(g.a,{initialState:{itemDescription:"Pool",itemNames:[l],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.a(`pool/${i.e.DELETE}`,{pool_name:l}),call:this.poolService.delete(l)})}})}getPgStatusCellClass(l,n,e){return{"text-right":!0,[`pg-${this.pgCategoryService.getTypeByStates(e)}`]:!0}}transformPoolsData(l){const n=["bytes_used","max_avail","avail_raw","percent_used","rd_bytes","wr_bytes","rd","wr"],e={latest:0,rate:0,rates:[]};return a.forEach(l,l=>{l.pg_status=this.transformPgStatus(l.pg_status);const u={};a.forEach(n,n=>{u[n]=l.stats&&l.stats[n]?l.stats[n]:e}),l.stats=u,l.usage=u.percent_used.latest,l.cdExecuting||l.pg_num+l.pg_placement_num===l.pg_num_target+l.pg_placement_num_target||(l.cdExecuting="Updating"),["rd_bytes","wr_bytes"].forEach(n=>{l.stats[n].rates=l.stats[n].rates.map(l=>l[1])}),l.cdIsBinary=!0}),l}transformPgStatus(l){const n=[];return a.forEach(l,(l,e)=>{n.push(`${l} ${e}`)}),n.join(", ")}getSelectionTiers(){if(void 0!==this.expandedRow){const l=this.expandedRow.tiers;this.cacheTiers=this.pools.filter(n=>l.includes(n.pool))}}getDisableDesc(){if(!this.monAllowPoolDelete)return this.i18n("Pool deletion is disabled by the mon_allow_pool_delete configuration setting.")}setExpandedRow(l){super.setExpandedRow(l),this.getSelectionTiers()}}class ${}const K={breadcrumbs:i.a.CREATE},J={breadcrumbs:i.a.EDIT};class W{}var Z=e("iutN"),H=e("MdoF"),X=e("ES0t"),Y=e("Xg1U"),Q=e("z5nN"),ll=e("pMnS"),nl=e("EEJc"),el=e("PEr+"),ul=e("a40w"),il=e("hfeG"),tl=e("QUzE"),al=e("E7j4"),ol=e("xvu0"),sl=e("RIVN"),rl=e("nP0W"),dl=e("VBM6"),cl=e("atuK"),ml=e("JIi+"),fl=e("0BYw"),gl=e("3IYD"),pl=e("I4Qz"),hl=e("0rTx"),vl=e("lz+O"),bl=e("u2XS"),Cl=e("nhAp"),Rl=e("l7Jr"),Il=e("bUo2"),El=e("SVse"),Nl=e("8xTl"),yl=e("ajRT"),Vl=e("+gVj"),wl=e("mXUL"),Tl=e("IZUe"),_l=e("4HWh"),Sl=e("p4Cf"),Dl=e("gp3X"),kl=e("sb0X"),ql=e("KVJa"),xl=e("Z21x"),Fl=e("LqlI"),Pl=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Al(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Bl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The name can only consist of alphanumeric characters, dashes and underscores."]))],null,null)}function Ol(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen erasure code profile name is already in use."]))],null,null)}function zl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Ll(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function jl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Ul(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Ml(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function Gl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function $l(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Kl(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),(l()(),u["ɵeld"](2,0,null,null,115,"cd-modal",[],null,null,null,nl.c,nl.b)),u["ɵdid"](3,49152,null,0,yl.a,[],{modalRef:[0,"modalRef"]},null),(l()(),u["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),u["ɵted"](5,null,[""," ",""])),u["ɵppd"](6,1),u["ɵppd"](7,1),(l()(),u["ɵeld"](8,0,null,1,109,null,null,null,null,null,null,null)),(l()(),u["ɵeld"](9,0,null,null,108,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),u["ɵdid"](10,16384,null,0,t.G,[],null,null),u["ɵdid"](11,540672,[["frm",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](13,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](14,16384,null,0,Vl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](15,0,null,null,94,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](16,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](17,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,1,{FormControlNames:1}),u["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),u["ɵeld"](20,0,null,0,3,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](23,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](24,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](25,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,27)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,27).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,27)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,27)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](26,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](27,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](29,671744,[[1,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](31,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](32,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Al)),u["ɵdid"](34,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Bl)),u["ɵdid"](36,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ol)),u["ɵdid"](38,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](39,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](40,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,3,{FormControlNames:1}),u["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),u["ɵeld"](43,0,null,0,5,"label",[["class","cd-col-form-label"],["for","root"]],null,null,null,null,null)),(l()(),u["ɵeld"](44,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Root"])),(l()(),u["ɵeld"](46,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](47,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](48,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](49,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](50,0,null,null,10,"select",[["class","form-control custom-select"],["formControlName","root"],["id","root"],["name","root"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,51).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,51).onTouched()&&i),i}),null,null)),u["ɵdid"](51,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](53,671744,[[3,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](55,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](56,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,zl)),u["ɵdid"](58,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ll)),u["ɵdid"](60,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,jl)),u["ɵdid"](62,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](63,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](64,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](67,0,null,0,5,"label",[["class","cd-col-form-label"],["for","failure_domain"]],null,null,null,null,null)),(l()(),u["ɵeld"](68,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Failure domain type"])),(l()(),u["ɵeld"](70,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](71,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](72,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](73,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](74,0,null,null,10,"select",[["class","form-control custom-select"],["formControlName","failure_domain"],["id","failure_domain"],["name","failure_domain"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,75).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,75).onTouched()&&i),i}),null,null)),u["ɵdid"](75,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](77,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](79,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](80,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ul)),u["ɵdid"](82,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ml)),u["ɵdid"](84,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Gl)),u["ɵdid"](86,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](87,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](88,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](91,0,null,0,4,"label",[["class","cd-col-form-label"],["for","device_class"]],null,null,null,null,null)),(l()(),u["ɵeld"](92,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Device class"])),(l()(),u["ɵeld"](94,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](95,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](96,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](97,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","device_class"],["id","device_class"],["name","device_class"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,98).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,98).onTouched()&&i),i}),null,null)),u["ɵdid"](98,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](100,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](102,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](103,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](104,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](105,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](106,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Let Ceph decide"])),(l()(),u["ɵand"](16777216,null,null,1,null,$l)),u["ɵdid"](109,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](110,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](111,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.onSubmit()&&u),u}),Dl.b,Dl.a)),u["ɵdid"](112,114688,null,0,kl.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](113,0,[""," ",""])),u["ɵppd"](114,1),u["ɵppd"](115,1),(l()(),u["ɵeld"](116,0,null,null,1,"cd-back-button",[],null,null,null,ql.b,ql.a)),u["ɵdid"](117,49152,null,0,xl.a,[El.Location,i.b],{back:[0,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.bsModalRef),l(n,11,0,e.form),l(n,14,0,e.form),l(n,17,0),l(n,26,0,""),l(n,29,0,"name"),l(n,32,0,"name"),l(n,34,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,36,0,e.form.showError("name",u["ɵnov"](n,11),"pattern")),l(n,38,0,e.form.showError("name",u["ɵnov"](n,11),"uniqueName")),l(n,40,0),l(n,47,0,e.tooltips.root),l(n,53,0,"root"),l(n,56,0,"root"),l(n,58,0,!e.buckets),l(n,60,0,e.buckets),l(n,62,0,e.form.showError("root",u["ɵnov"](n,11),"required")),l(n,64,0),l(n,71,0,e.tooltips.failure_domain),l(n,77,0,"failure_domain"),l(n,80,0,"failure_domain"),l(n,82,0,!e.failureDomains),l(n,84,0,e.failureDomainKeys),l(n,86,0,e.form.showError("failure_domain",u["ɵnov"](n,11),"required")),l(n,88,0),l(n,95,0,e.tooltips.device_class),l(n,100,0,"device_class"),l(n,103,0,"device_class"),l(n,105,0,""),l(n,106,0,""),l(n,109,0,e.devices),l(n,112,0,u["ɵnov"](n,11)),l(n,117,0,e.bsModalRef.hide)}),(function(l,n){var e=n.component,i=u["ɵunv"](n,5,0,l(n,6,0,u["ɵnov"](n,0),e.action)),t=u["ɵunv"](n,5,1,l(n,7,0,u["ɵnov"](n,1),e.resource));l(n,5,0,i,t),l(n,9,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending),l(n,16,0,u["ɵnov"](n,17).hasErrors,u["ɵnov"](n,17).hasSuccess),l(n,25,0,u["ɵnov"](n,31).ngClassUntouched,u["ɵnov"](n,31).ngClassTouched,u["ɵnov"](n,31).ngClassPristine,u["ɵnov"](n,31).ngClassDirty,u["ɵnov"](n,31).ngClassValid,u["ɵnov"](n,31).ngClassInvalid,u["ɵnov"](n,31).ngClassPending,u["ɵnov"](n,32).validClass,u["ɵnov"](n,32).invalidClass),l(n,39,0,u["ɵnov"](n,40).hasErrors,u["ɵnov"](n,40).hasSuccess),l(n,50,0,u["ɵnov"](n,55).ngClassUntouched,u["ɵnov"](n,55).ngClassTouched,u["ɵnov"](n,55).ngClassPristine,u["ɵnov"](n,55).ngClassDirty,u["ɵnov"](n,55).ngClassValid,u["ɵnov"](n,55).ngClassInvalid,u["ɵnov"](n,55).ngClassPending,u["ɵnov"](n,56).validClass,u["ɵnov"](n,56).invalidClass),l(n,63,0,u["ɵnov"](n,64).hasErrors,u["ɵnov"](n,64).hasSuccess),l(n,74,0,u["ɵnov"](n,79).ngClassUntouched,u["ɵnov"](n,79).ngClassTouched,u["ɵnov"](n,79).ngClassPristine,u["ɵnov"](n,79).ngClassDirty,u["ɵnov"](n,79).ngClassValid,u["ɵnov"](n,79).ngClassInvalid,u["ɵnov"](n,79).ngClassPending,u["ɵnov"](n,80).validClass,u["ɵnov"](n,80).invalidClass),l(n,87,0,u["ɵnov"](n,88).hasErrors,u["ɵnov"](n,88).hasSuccess),l(n,97,0,u["ɵnov"](n,102).ngClassUntouched,u["ɵnov"](n,102).ngClassTouched,u["ɵnov"](n,102).ngClassPristine,u["ɵnov"](n,102).ngClassDirty,u["ɵnov"](n,102).ngClassValid,u["ɵnov"](n,102).ngClassInvalid,u["ɵnov"](n,102).ngClassPending,u["ɵnov"](n,103).validClass,u["ɵnov"](n,103).invalidClass);var a=u["ɵunv"](n,113,0,l(n,114,0,u["ɵnov"](n,0),e.action)),o=u["ɵunv"](n,113,1,l(n,115,0,u["ɵnov"](n,1),e.resource));l(n,113,0,a,o)}))}function Jl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-crush-rule-form-modal",[],null,null,null,Kl,Pl)),u["ɵdid"](1,114688,null,0,w,[V.a,Fl.a,y.a,d,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Wl=u["ɵccf"]("cd-crush-rule-form-modal",w,Jl,{},{submitAction:"submitAction"},[]),Zl=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Hl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Xl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The name can only consist of alphanumeric characters, dashes and underscores."]))],null,null)}function Yl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen erasure code profile name is already in use."]))],null,null)}function Ql(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function ln(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function nn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function en(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function un(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 2."]))],null,null)}function tn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Chunks (k+m) have exceeded the available OSDs of ","."]))],null,(function(l,n){l(n,1,0,n.component.deviceCount)}))}function an(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["For an equal distribution k has to be a multiple of (k+m)/l."]))],null,null)}function on(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["K has to be equal to or greater than m in order to recover data correctly through c."]))],null,null)}function sn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Distribution factor: ",""]))],null,(function(l,n){l(n,1,0,n.component.lrcMultiK)}))}function rn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function dn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function cn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Chunks (k+m) have exceeded the available OSDs of ","."]))],null,(function(l,n){l(n,1,0,n.component.deviceCount)}))}function mn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function fn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["C has to be equal to or lower than m as m defines the amount of chunks that can be used."]))],null,null)}function gn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,9,{FormControlNames:1}),u["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","c"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Durability estimator (c)"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](8,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,7,"input",[["class","form-control"],["formControlName","c"],["id","c"],["name","c"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,11)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,11).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,11)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,11)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),i}),null,null)),u["ɵdid"](11,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](12,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](14,671744,[[9,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,mn)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,fn)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.shec.c),l(n,14,0,"c"),l(n,17,0,"c"),l(n,19,0,e.form.showError("c",u["ɵnov"](n.parent,11),"min")),l(n,21,0,e.form.showError("c",u["ɵnov"](n.parent,11),"cGreaterM"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass)}))}function pn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function hn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function vn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Can't split up chunks (k+m) correctly with the current locality."]))],null,null)}function bn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,11,{FormControlNames:1}),u["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","l"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Locality (l)"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](8,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,7,"input",[["class","form-control"],["formControlName","l"],["id","l"],["name","l"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,11)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,11).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,11)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,11)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),i}),null,null)),u["ɵdid"](11,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](12,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](14,671744,[[11,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,pn)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,hn)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,vn)),u["ɵdid"](23,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](24,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](25,null,["Locality groups: ",""]))],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.lrc.l),l(n,14,0,"l"),l(n,17,0,"l"),l(n,19,0,e.form.showError("l",u["ɵnov"](n.parent,11),"required")),l(n,21,0,e.form.showError("l",u["ɵnov"](n.parent,11),"min")),l(n,23,0,e.form.showError("l",u["ɵnov"](n.parent,11),"unequal"))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass),l(n,25,0,e.lrcGroups)}))}function Cn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Rn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function In(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function En(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["None"]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Nn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function yn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,15,{FormControlNames:1}),u["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushLocality"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush Locality"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](8,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","crushLocality"],["id","crushLocality"],["name","crushLocality"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,11).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,11).onTouched()&&i),i}),null,null)),u["ɵdid"](11,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](13,671744,[[15,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](15,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](16,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,In)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,En)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Nn)),u["ɵdid"](22,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.lrc.crushLocality),l(n,13,0,"crushLocality"),l(n,16,0,"crushLocality"),l(n,18,0,!e.failureDomains),l(n,20,0,e.failureDomainKeys.length>0),l(n,22,0,e.failureDomainKeys)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,15).ngClassUntouched,u["ɵnov"](n,15).ngClassTouched,u["ɵnov"](n,15).ngClassPristine,u["ɵnov"](n,15).ngClassDirty,u["ɵnov"](n,15).ngClassValid,u["ɵnov"](n,15).ngClassInvalid,u["ɵnov"](n,15).ngClassPending,u["ɵnov"](n,16).validClass,u["ɵnov"](n,16).invalidClass)}))}function Vn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function wn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,17,{FormControlNames:1}),u["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","technique"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Technique"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](8,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","technique"],["id","technique"],["name","technique"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,11).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,11).onTouched()&&i),i}),null,null)),u["ɵdid"](11,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](13,671744,[[17,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](15,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](16,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Vn)),u["ɵdid"](18,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins[e.plugin].technique),l(n,13,0,"technique"),l(n,16,0,"technique"),l(n,18,0,e.techniques)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,15).ngClassUntouched,u["ɵnov"](n,15).ngClassTouched,u["ɵnov"](n,15).ngClassPristine,u["ɵnov"](n,15).ngClassDirty,u["ɵnov"](n,15).ngClassValid,u["ɵnov"](n,15).ngClassInvalid,u["ɵnov"](n,15).ngClassPending,u["ɵnov"](n,16).validClass,u["ɵnov"](n,16).invalidClass)}))}function Tn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function _n(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,19,{FormControlNames:1}),u["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","packetSize"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Packetsize"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](8,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,7,"input",[["class","form-control"],["formControlName","packetSize"],["id","packetSize"],["name","packetSize"],["placeholder","Packetsize..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,11)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,11).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,11)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,11)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),i}),null,null)),u["ɵdid"](11,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](12,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](14,671744,[[19,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Tn)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.jerasure.packetSize),l(n,14,0,"packetSize"),l(n,17,0,"packetSize"),l(n,19,0,e.form.showError("packetSize",u["ɵnov"](n.parent,11),"min"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass)}))}function Sn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Dn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function kn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function qn(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),(l()(),u["ɵeld"](2,0,null,null,214,"cd-modal",[],null,null,null,nl.c,nl.b)),u["ɵdid"](3,49152,null,0,yl.a,[],{modalRef:[0,"modalRef"]},null),(l()(),u["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),u["ɵted"](5,null,[""," ",""])),u["ɵppd"](6,1),u["ɵppd"](7,1),(l()(),u["ɵeld"](8,0,null,1,208,null,null,null,null,null,null,null)),(l()(),u["ɵeld"](9,0,null,null,207,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),u["ɵdid"](10,16384,null,0,t.G,[],null,null),u["ɵdid"](11,540672,[["frm",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](13,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](14,16384,null,0,Vl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](15,0,null,null,193,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](16,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](17,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,1,{FormControlNames:1}),u["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),u["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](22,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](23,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,25)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,25).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,25)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,25)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](24,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](25,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](27,671744,[[1,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](29,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](30,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Hl)),u["ɵdid"](32,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Xl)),u["ɵdid"](34,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Yl)),u["ɵdid"](36,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](37,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](38,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,3,{FormControlNames:1}),u["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),u["ɵeld"](41,0,null,0,4,"label",[["class","cd-col-form-label"],["for","plugin"]],null,null,null,null,null)),(l()(),u["ɵeld"](42,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Plugin"])),(l()(),u["ɵeld"](44,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](45,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](46,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](47,0,null,null,10,"select",[["class","form-control custom-select"],["formControlName","plugin"],["id","plugin"],["name","plugin"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,48).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,48).onTouched()&&i),i}),null,null)),u["ɵdid"](48,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](50,671744,[[3,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](52,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](53,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ql)),u["ɵdid"](55,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ln)),u["ɵdid"](57,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,nn)),u["ɵdid"](59,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](60,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](61,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](64,0,null,0,4,"label",[["class","cd-col-form-label"],["for","k"]],null,null,null,null,null)),(l()(),u["ɵeld"](65,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Data chunks (k)"])),(l()(),u["ɵeld"](67,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](68,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](69,0,null,0,20,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](70,0,null,null,7,"input",[["class","form-control"],["formControlName","k"],["id","k"],["name","k"],["ng-model","$ctrl.erasureCodeProfile.k"],["placeholder","Data chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,71)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,71).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,71)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,71)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,72).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,72).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,72).onTouched()&&i),i}),null,null)),u["ɵdid"](71,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](72,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](74,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](76,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](77,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,en)),u["ɵdid"](79,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,un)),u["ɵdid"](81,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,tn)),u["ɵdid"](83,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,an)),u["ɵdid"](85,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,on)),u["ɵdid"](87,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,sn)),u["ɵdid"](89,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](90,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](91,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](94,0,null,0,4,"label",[["class","cd-col-form-label"],["for","m"]],null,null,null,null,null)),(l()(),u["ɵeld"](95,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Coding chunks (m)"])),(l()(),u["ɵeld"](97,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](98,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](99,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](100,0,null,null,7,"input",[["class","form-control"],["formControlName","m"],["id","m"],["name","m"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,101)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,101).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,101)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,101)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,102).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,102).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,102).onTouched()&&i),i}),null,null)),u["ɵdid"](101,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](102,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](104,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](106,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](107,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,rn)),u["ɵdid"](109,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,dn)),u["ɵdid"](111,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,cn)),u["ɵdid"](113,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,gn)),u["ɵdid"](115,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,bn)),u["ɵdid"](117,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](118,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](119,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,13,{FormControlNames:1}),u["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),u["ɵeld"](122,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushFailureDomain"]],null,null,null,null,null)),(l()(),u["ɵeld"](123,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush failure domain"])),(l()(),u["ɵeld"](125,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](126,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](127,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](128,0,null,null,10,"select",[["class","form-control custom-select"],["formControlName","crushFailureDomain"],["id","crushFailureDomain"],["name","crushFailureDomain"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,129).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,129).onTouched()&&i),i}),null,null)),u["ɵdid"](129,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](131,671744,[[13,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](133,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](134,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Cn)),u["ɵdid"](136,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Rn)),u["ɵdid"](138,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,yn)),u["ɵdid"](140,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,2,null,wn)),u["ɵdid"](142,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),u["ɵpad"](143,2),(l()(),u["ɵand"](16777216,null,null,1,null,_n)),u["ɵdid"](145,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](146,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](147,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,21,{FormControlNames:1}),u["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),u["ɵeld"](150,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushRoot"]],null,null,null,null,null)),(l()(),u["ɵeld"](151,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush root"])),(l()(),u["ɵeld"](153,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](154,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](155,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](156,0,null,null,10,"select",[["class","form-control custom-select"],["formControlName","crushRoot"],["id","crushRoot"],["name","crushRoot"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,157).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,157).onTouched()&&i),i}),null,null)),u["ɵdid"](157,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](159,671744,[[21,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](161,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](162,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Sn)),u["ɵdid"](164,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Dn)),u["ɵdid"](166,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](167,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](168,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,23,{FormControlNames:1}),u["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),u["ɵeld"](171,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushDeviceClass"]],null,null,null,null,null)),(l()(),u["ɵeld"](172,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush device class"])),(l()(),u["ɵeld"](174,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](175,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](176,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](177,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","crushDeviceClass"],["id","crushDeviceClass"],["name","crushDeviceClass"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,178).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,178).onTouched()&&i),i}),null,null)),u["ɵdid"](178,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](180,671744,[[23,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](182,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](183,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](184,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](185,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](186,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Let Ceph decide"])),(l()(),u["ɵand"](16777216,null,null,1,null,kn)),u["ɵdid"](189,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](190,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](191,null,["Available OSDs: ",""])),(l()(),u["ɵeld"](192,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](193,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,25,{FormControlNames:1}),u["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),u["ɵeld"](196,0,null,0,4,"label",[["class","cd-col-form-label"],["for","directory"]],null,null,null,null,null)),(l()(),u["ɵeld"](197,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Directory"])),(l()(),u["ɵeld"](199,0,null,null,1,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](200,49152,null,0,Sl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](201,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](202,0,null,null,6,"input",[["class","form-control"],["formControlName","directory"],["id","directory"],["name","directory"],["placeholder","Path..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,203)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,203).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,203)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,203)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](203,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](205,671744,[[25,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](207,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](208,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](209,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](210,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.onSubmit()&&u),u}),Dl.b,Dl.a)),u["ɵdid"](211,114688,null,0,kl.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](212,0,[""," ",""])),u["ɵppd"](213,1),u["ɵppd"](214,1),(l()(),u["ɵeld"](215,0,null,null,1,"cd-back-button",[],null,null,null,ql.b,ql.a)),u["ɵdid"](216,49152,null,0,xl.a,[El.Location,i.b],{back:[0,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.bsModalRef),l(n,11,0,e.form),l(n,14,0,e.form),l(n,17,0),l(n,24,0,""),l(n,27,0,"name"),l(n,30,0,"name"),l(n,32,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,34,0,e.form.showError("name",u["ɵnov"](n,11),"pattern")),l(n,36,0,e.form.showError("name",u["ɵnov"](n,11),"uniqueName")),l(n,38,0),l(n,45,0,e.tooltips.plugins[e.plugin].description),l(n,50,0,"plugin"),l(n,53,0,"plugin"),l(n,55,0,!e.plugins),l(n,57,0,e.plugins),l(n,59,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,61,0),l(n,68,0,e.tooltips.k),l(n,74,0,"k"),l(n,77,0,"k"),l(n,79,0,e.form.showError("k",u["ɵnov"](n,11),"required")),l(n,81,0,e.form.showError("k",u["ɵnov"](n,11),"min")),l(n,83,0,e.form.showError("k",u["ɵnov"](n,11),"max")),l(n,85,0,e.form.showError("k",u["ɵnov"](n,11),"unequal")),l(n,87,0,e.form.showError("k",u["ɵnov"](n,11),"kLowerM")),l(n,89,0,"lrc"===e.plugin),l(n,91,0),l(n,98,0,e.tooltips.m),l(n,104,0,"m"),l(n,107,0,"m"),l(n,109,0,e.form.showError("m",u["ɵnov"](n,11),"required")),l(n,111,0,e.form.showError("m",u["ɵnov"](n,11),"min")),l(n,113,0,e.form.showError("m",u["ɵnov"](n,11),"max")),l(n,115,0,"shec"===e.plugin),l(n,117,0,e.plugin===e.PLUGIN.LRC),l(n,119,0),l(n,126,0,e.tooltips.crushFailureDomain),l(n,131,0,"crushFailureDomain"),l(n,134,0,"crushFailureDomain"),l(n,136,0,!e.failureDomains),l(n,138,0,e.failureDomainKeys),l(n,140,0,e.plugin===e.PLUGIN.LRC);var i=l(n,143,0,e.PLUGIN.JERASURE,e.PLUGIN.ISA).includes(e.plugin);l(n,142,0,i),l(n,145,0,e.plugin===e.PLUGIN.JERASURE),l(n,147,0),l(n,154,0,e.tooltips.crushRoot),l(n,159,0,"crushRoot"),l(n,162,0,"crushRoot"),l(n,164,0,!e.buckets),l(n,166,0,e.buckets),l(n,168,0),l(n,175,0,e.tooltips.crushDeviceClass),l(n,180,0,"crushDeviceClass"),l(n,183,0,"crushDeviceClass"),l(n,185,0,""),l(n,186,0,""),l(n,189,0,e.devices),l(n,193,0),l(n,200,0,e.tooltips.directory),l(n,205,0,"directory"),l(n,208,0,"directory"),l(n,211,0,u["ɵnov"](n,11)),l(n,216,0,e.bsModalRef.hide)}),(function(l,n){var e=n.component,i=u["ɵunv"](n,5,0,l(n,6,0,u["ɵnov"](n,0),e.action)),t=u["ɵunv"](n,5,1,l(n,7,0,u["ɵnov"](n,1),e.resource));l(n,5,0,i,t),l(n,9,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending),l(n,16,0,u["ɵnov"](n,17).hasErrors,u["ɵnov"](n,17).hasSuccess),l(n,23,0,u["ɵnov"](n,29).ngClassUntouched,u["ɵnov"](n,29).ngClassTouched,u["ɵnov"](n,29).ngClassPristine,u["ɵnov"](n,29).ngClassDirty,u["ɵnov"](n,29).ngClassValid,u["ɵnov"](n,29).ngClassInvalid,u["ɵnov"](n,29).ngClassPending,u["ɵnov"](n,30).validClass,u["ɵnov"](n,30).invalidClass),l(n,37,0,u["ɵnov"](n,38).hasErrors,u["ɵnov"](n,38).hasSuccess),l(n,47,0,u["ɵnov"](n,52).ngClassUntouched,u["ɵnov"](n,52).ngClassTouched,u["ɵnov"](n,52).ngClassPristine,u["ɵnov"](n,52).ngClassDirty,u["ɵnov"](n,52).ngClassValid,u["ɵnov"](n,52).ngClassInvalid,u["ɵnov"](n,52).ngClassPending,u["ɵnov"](n,53).validClass,u["ɵnov"](n,53).invalidClass),l(n,60,0,u["ɵnov"](n,61).hasErrors,u["ɵnov"](n,61).hasSuccess),l(n,70,0,u["ɵnov"](n,76).ngClassUntouched,u["ɵnov"](n,76).ngClassTouched,u["ɵnov"](n,76).ngClassPristine,u["ɵnov"](n,76).ngClassDirty,u["ɵnov"](n,76).ngClassValid,u["ɵnov"](n,76).ngClassInvalid,u["ɵnov"](n,76).ngClassPending,u["ɵnov"](n,77).validClass,u["ɵnov"](n,77).invalidClass),l(n,90,0,u["ɵnov"](n,91).hasErrors,u["ɵnov"](n,91).hasSuccess),l(n,100,0,u["ɵnov"](n,106).ngClassUntouched,u["ɵnov"](n,106).ngClassTouched,u["ɵnov"](n,106).ngClassPristine,u["ɵnov"](n,106).ngClassDirty,u["ɵnov"](n,106).ngClassValid,u["ɵnov"](n,106).ngClassInvalid,u["ɵnov"](n,106).ngClassPending,u["ɵnov"](n,107).validClass,u["ɵnov"](n,107).invalidClass),l(n,118,0,u["ɵnov"](n,119).hasErrors,u["ɵnov"](n,119).hasSuccess),l(n,128,0,u["ɵnov"](n,133).ngClassUntouched,u["ɵnov"](n,133).ngClassTouched,u["ɵnov"](n,133).ngClassPristine,u["ɵnov"](n,133).ngClassDirty,u["ɵnov"](n,133).ngClassValid,u["ɵnov"](n,133).ngClassInvalid,u["ɵnov"](n,133).ngClassPending,u["ɵnov"](n,134).validClass,u["ɵnov"](n,134).invalidClass),l(n,146,0,u["ɵnov"](n,147).hasErrors,u["ɵnov"](n,147).hasSuccess),l(n,156,0,u["ɵnov"](n,161).ngClassUntouched,u["ɵnov"](n,161).ngClassTouched,u["ɵnov"](n,161).ngClassPristine,u["ɵnov"](n,161).ngClassDirty,u["ɵnov"](n,161).ngClassValid,u["ɵnov"](n,161).ngClassInvalid,u["ɵnov"](n,161).ngClassPending,u["ɵnov"](n,162).validClass,u["ɵnov"](n,162).invalidClass),l(n,167,0,u["ɵnov"](n,168).hasErrors,u["ɵnov"](n,168).hasSuccess),l(n,177,0,u["ɵnov"](n,182).ngClassUntouched,u["ɵnov"](n,182).ngClassTouched,u["ɵnov"](n,182).ngClassPristine,u["ɵnov"](n,182).ngClassDirty,u["ɵnov"](n,182).ngClassValid,u["ɵnov"](n,182).ngClassInvalid,u["ɵnov"](n,182).ngClassPending,u["ɵnov"](n,183).validClass,u["ɵnov"](n,183).invalidClass),l(n,191,0,e.deviceCount),l(n,192,0,u["ɵnov"](n,193).hasErrors,u["ɵnov"](n,193).hasSuccess),l(n,202,0,u["ɵnov"](n,207).ngClassUntouched,u["ɵnov"](n,207).ngClassTouched,u["ɵnov"](n,207).ngClassPristine,u["ɵnov"](n,207).ngClassDirty,u["ɵnov"](n,207).ngClassValid,u["ɵnov"](n,207).ngClassInvalid,u["ɵnov"](n,207).ngClassPending,u["ɵnov"](n,208).validClass,u["ɵnov"](n,208).invalidClass);var a=u["ɵunv"](n,212,0,l(n,213,0,u["ɵnov"](n,0),e.action)),o=u["ɵunv"](n,212,1,l(n,214,0,u["ɵnov"](n,1),e.resource));l(n,212,0,a,o)}))}function xn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-erasure-code-profile-form-modal",[],null,null,null,qn,Zl)),u["ɵdid"](1,114688,null,0,_,[V.a,Fl.a,y.a,c,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Fn=u["ɵccf"]("cd-erasure-code-profile-form-modal",_,xn,{},{submitAction:"submitAction"},[]),Pn=e("w9WL"),An=e("yT6U"),Bn=e("4DD9"),On=e("iExv"),zn=e("85J/"),Ln=e("+0ag"),jn=e("IzCI"),Un=e("Dwqy"),Mn=e("uYzU"),Gn=e("FFMq"),$n=e("E2fk"),Kn=e("a0VL"),Jn=e("nSDx"),Wn=e("SB+Q"),Zn=e("TYzs"),Hn=e("BQkM"),Xn=e("dEH0"),Yn=e("G1/K"),Qn=e("TJUb"),le=e("efK2"),ne=e("CNMR"),ee=e("KOzp"),ue=e("2uy1"),ie=e("z/SZ"),te=e("38Bd"),ae=e("978R"),oe=e("FE24"),se=e("Avrn"),re=e("iInd"),de=e("2ZVE"),ce=e("ienR"),me=e("gk6K"),fe=e("9Xeq"),ge=e("hrfs"),pe=e("yGOH"),he=e("bxSN"),ve=e("WF9J"),be=e("V/fk"),Ce=e("ChqD"),Re=e("PCNd"),Ie=e("kJI8"),Ee=e("kccj"),Ne=e("yYhs"),ye=e("k/xb"),Ve=e("C6Ij"),we=e("AWcq"),Te=e("xSw7"),_e=e("GgAd"),Se=e("a278"),De=e("insk"),ke=e("cUpR"),qe=e("20UP"),xe=e("pKUh"),Fe=e("25BL"),Pe=e("NUGo"),Ae=e("S7zO"),Be=e("EFGL"),Oe=e("aAWM"),ze=e("o8EM"),Le=e("sLuX"),je=e("FSuO");e("jKX/");class Ue{constructor(l,n){this.i18n=l,this.poolService=n,this.cacheTierColumns=[],this.cacheTierColumns=[{prop:"pool_name",name:this.i18n("Name"),flexGrow:3},{prop:"cache_mode",name:this.i18n("Cache Mode"),flexGrow:2},{prop:"cache_min_evict_age",name:this.i18n("Min Evict Age"),flexGrow:2},{prop:"cache_min_flush_age",name:this.i18n("Min Flush Age"),flexGrow:2},{prop:"target_max_bytes",name:this.i18n("Target Max Bytes"),flexGrow:2},{prop:"target_max_objects",name:this.i18n("Target Max Objects"),flexGrow:2}]}ngOnChanges(){this.selection&&this.poolService.getConfiguration(this.selection.pool_name).subscribe(l=>{this.selectedPoolConfiguration=l})}filterNonPoolData(l){return a.omit(l,["cdExecuting","cdIsBinary"])}}var Me=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ge(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","-xyV8KCiz"]],null,null,null,Se.b,Se.a)),u["ɵdid"](3,638976,null,0,De.a,[ke.b,qe.a,s.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Performance Details"),l(n,3,0,"ceph-pool-detail?var-pool_name="+e.selection.pool_name,"one","-xyV8KCiz")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function $e(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Configuration"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-rbd-configuration-table",[],null,null,null,Be.b,Be.a)),u["ɵdid"](3,638976,null,0,Oe.a,[N.a,ze.a,s.a],{data:[0,"data"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Configuration"),l(n,3,0,e.selectedPoolConfiguration)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function Ke(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Cache Tiers Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,Fe.b,Fe.a)),u["ɵdid"](3,2867200,null,0,F.a,[u.NgZone,u.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoSave:[3,"autoSave"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Cache Tiers Details"),l(n,3,0,e.cacheTiers,e.cacheTierColumns,"flex",!1)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function Je(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,11,"tabset",[["cdTableDetail",""]],[[2,"tab-container",null]],null,null,xe.b,xe.a)),u["ɵdid"](1,180224,[[1,4],["tabsetChild",4]],0,de.e,[de.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](3,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,Le.b,Le.a)),u["ɵdid"](5,638976,null,0,je.a,[Kn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,Ge)),u["ɵdid"](7,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,$e)),u["ɵdid"](9,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,Ke)),u["ɵdid"](11,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"Details"),l(n,5,0,e.filterNonPoolData(e.selection),!1,!0),l(n,7,0,e.permissions.grafana.read),l(n,9,0,"replicated"===e.selection.type),l(n,11,0,(null==e.selection.tiers?null:e.selection.tiers.length)>0)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).clazz),l(n,2,0,u["ɵnov"](n,3).id,u["ɵnov"](n,3).active,u["ɵnov"](n,3).addClass,u["ɵnov"](n,3).role,u["ɵnov"](n,3).ariaLabelledby)}))}function We(l){return u["ɵvid"](0,[u["ɵqud"](671088640,1,{tabsetChild:0}),(l()(),u["ɵand"](16777216,null,null,1,null,Je)),u["ɵdid"](2,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,2,0,n.component.selection)}),null)}var Ze=e("ufoC"),He=e("mSOc"),Xe=u["ɵcrt"]({encapsulation:0,styles:[[".pg-clean{color:#0b0}  .pg-working{color:#2b99a8}  .pg-warning{color:#ffc200}  .pg-unknown{color:red}"]],data:{}});function Ye(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,Ve.b,Ve.a)),u["ɵdid"](1,114688,null,0,we.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function Qe(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-usage-bar",[["decimals","2"]],null,null,null,Te.b,Te.a)),u["ɵdid"](1,573440,null,0,_e.a,[],{total:[0,"total"],used:[1,"used"],decimals:[2,"decimals"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.stats.bytes_used.latest+n.parent.context.row.stats.avail_raw.latest,n.parent.context.row.stats.bytes_used.latest,"2")}),null)}function lu(l){return u["ɵvid"](0,[(l()(),u["ɵand"](16777216,null,null,1,null,Qe)),u["ɵdid"](1,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,null==n.context.row.stats?null:null==n.context.row.stats.avail_raw?null:n.context.row.stats.avail_raw.latest)}),null)}function nu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","z99hzWtmk"]],null,null,null,Se.b,Se.a)),u["ɵdid"](3,638976,null,0,De.a,[ke.b,qe.a,s.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Overall Performance"),l(n,3,0,"ceph-pools-overview?","two","z99hzWtmk")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function eu(l){return u["ɵvid"](0,[u["ɵqud"](402653184,1,{table:0}),u["ɵqud"](402653184,2,{poolUsageTpl:0}),u["ɵqud"](671088640,3,{poolConfigurationSourceTpl:0}),(l()(),u["ɵeld"](3,0,null,null,14,"tabset",[],[[2,"tab-container",null]],null,null,xe.b,xe.a)),u["ɵdid"](4,180224,null,0,de.e,[de.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](5,0,null,0,10,"tab",[["heading","Pools List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](6,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ye)),u["ɵdid"](8,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](9,0,null,null,5,"cd-table",[["id","pool-list"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,e){var u=!0,i=l.component;return"setExpandedRow"===n&&(u=!1!==i.setExpandedRow(e)&&u),"updateSelection"===n&&(u=!1!==i.updateSelection(e)&&u),u}),Fe.b,Fe.a)),u["ɵdid"](10,2867200,[[1,4],["table",4]],0,F.a,[u.NgZone,u.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),u["ɵeld"](11,0,null,1,1,"cd-table-actions",[["class","table-actions"],["id","pool-list-actions"]],null,null,null,Pe.b,Pe.a)),u["ɵdid"](12,114688,null,0,Ae.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),u["ɵeld"](13,0,null,3,1,"cd-pool-details",[["cdTableDetail",""],["id","pool-list-details"]],null,null,null,We,Me)),u["ɵdid"](14,573440,null,0,Ue,[s.a,m.a],{selection:[0,"selection"],permissions:[1,"permissions"],cacheTiers:[2,"cacheTiers"]},null),(l()(),u["ɵand"](0,[[2,2],["poolUsageTpl",2]],null,0,null,lu)),(l()(),u["ɵand"](16777216,null,0,1,null,nu)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,6,0,"Pools List"),l(n,8,0,e.viewCacheStatusList),l(n,10,0,e.pools,e.columns,!0,"single"),l(n,12,0,e.permissions.pool,e.selection,e.tableActions),l(n,14,0,e.expandedRow,e.permissions,e.cacheTiers),l(n,17,0,e.permissions.grafana.read)}),(function(l,n){l(n,3,0,u["ɵnov"](n,4).clazz),l(n,5,0,u["ɵnov"](n,6).id,u["ɵnov"](n,6).active,u["ɵnov"](n,6).addClass,u["ɵnov"](n,6).role,u["ɵnov"](n,6).ariaLabelledby)}))}function uu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"cd-pool-list",[],null,null,null,eu,Xe)),u["ɵprd"](131584,null,z.a,z.a,[Ze.a,He.a]),u["ɵprd"](256,null,L.a,M,[]),u["ɵdid"](3,114688,null,0,G,[m.a,y.a,E.a,z.a,Fl.b,s.a,j.a,O.a,L.a,q.a,i.b],null,null)],(function(l,n){l(n,3,0)}),null)}var iu=u["ɵccf"]("cd-pool-list",G,uu,{},{},[]),tu=e("QC43"),au=e("XFyV"),ou=e("i4WA"),su=e("6qls"),ru=e("tz6c"),du=e("EmSq"),cu=e("pYKc"),mu=e("ppaS"),fu=e("BH9v"),gu=e("rFfW"),pu=u["ɵcrt"]({encapsulation:0,styles:[[".crush-rule-steps[_ngcontent-%COMP%]{margin-top:10px}"]],data:{}});function hu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,tu.b,tu.a)),u["ɵdid"](1,49152,null,0,au.a,[],null,null),(l()(),u["ɵted"](-1,0,["Loading..."]))],null,null)}function vu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function bu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen Ceph pool name is already in use."]))],null,null)}function Cu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list."]))],null,null)}function Ru(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Pool name can only contain letters, numbers, '.', '-', '_' or '/'."]))],null,null)}function Iu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Eu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Nu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function yu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Vu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["At least one placement group is needed!"]))],null,null)}function wu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Your cluster can't handle this many PGs. Please recalculate the PG amount needed."]))],null,null)}function Tu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The current PGs settings were calculated for you, you should make sure the values suit your needs before submit."]))],null,null)}function _u(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,27,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,11,{FormControlNames:1}),u["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","pgNum"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Placement groups"])),(l()(),u["ɵeld"](6,0,null,0,21,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,9,"input",[["class","form-control"],["formControlName","pgNum"],["id","pgNum"],["min","1"],["name","pgNum"],["required",""],["type","number"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"focus"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0,t=l.component;return"input"===n&&(i=!1!==u["ɵnov"](l,8)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,8).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,8)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,8)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),"focus"===n&&(i=0!=(t.externalPgChange=!1)&&i),"blur"===n&&(i=!1!==t.alignPgs()&&i),i}),null,null)),u["ɵdid"](8,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](9,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵdid"](10,16384,null,0,t.z,[],{required:[0,"required"]},null),u["ɵprd"](1024,null,t.o,(function(l){return[l]}),[t.z]),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](13,671744,[[11,4]],0,t.j,[[3,t.d],[6,t.o],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](15,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](16,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,yu)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Vu)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,wu)),u["ɵdid"](22,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](23,0,null,null,2,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵeld"](24,0,null,null,1,"cd-doc",[["docText","Calculation help"],["section","pgs"]],null,null,null,ou.b,ou.a)),u["ɵdid"](25,114688,null,0,su.a,[ru.a,s.a],{section:[0,"section"],docText:[1,"docText"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Tu)),u["ɵdid"](27,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,10,0,""),l(n,13,0,"pgNum"),l(n,16,0,"pgNum"),l(n,18,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"required")),l(n,20,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"min")),l(n,22,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"34")),l(n,25,0,"pgs","Calculation help"),l(n,27,0,e.externalPgChange)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,7,0,u["ɵnov"](n,10).required?"":null,u["ɵnov"](n,15).ngClassUntouched,u["ɵnov"](n,15).ngClassTouched,u["ɵnov"](n,15).ngClassPristine,u["ɵnov"](n,15).ngClassDirty,u["ɵnov"](n,15).ngClassValid,u["ɵnov"](n,15).ngClassInvalid,u["ɵnov"](n,15).ngClassPending,u["ɵnov"](n,16).validClass,u["ɵnov"](n,16).invalidClass)}))}function Su(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,5,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,4,"ul",[["class","list-inline"]],null,null,null,null,null)),(l()(),u["ɵeld"](2,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](3,null,["Minimum: ",""])),(l()(),u["ɵeld"](4,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](5,null,["Maximum: ",""]))],null,(function(l,n){var e=n.component;l(n,3,0,e.getMinSize()),l(n,5,0,e.getMaxSize())}))}function Du(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["The size specified is out of range. A value from "," to "," is usable."]))],null,(function(l,n){var e=n.component;l(n,1,0,e.getMinSize(),e.getMaxSize())}))}function ku(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,13,{FormControlNames:1}),u["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","size"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Replicated size"])),(l()(),u["ɵeld"](6,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","size"],["id","size"],["name","size"],["type","number"]],[[8,"max",0],[8,"min",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,8)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,8).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,8)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,8)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),i}),null,null)),u["ɵdid"](8,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](9,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](11,671744,[[13,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](13,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](14,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Su)),u["ɵdid"](16,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Du)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,11,0,"size"),l(n,14,0,"size"),l(n,16,0,e.form.showError("size",u["ɵnov"](n.parent.parent,2))),l(n,18,0,e.form.showError("size",u["ɵnov"](n.parent.parent,2)))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,7,1,[e.getMaxSize(),e.getMinSize(),u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending,u["ɵnov"](n,14).validClass,u["ɵnov"](n,14).invalidClass])}))}function qu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,15,{FormControlNames:1}),u["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Flags"])),(l()(),u["ɵeld"](6,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","ecOverwrites"],["id","ec-overwrites"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),i}),null,null)),u["ɵdid"](9,16384,null,0,t.c,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.c]),u["ɵdid"](11,671744,[[15,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](13,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](14,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](15,0,null,null,1,"label",[["class","custom-control-label"],["for","ec-overwrites"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["EC Overwrites"]))],(function(l,n){l(n,1,0),l(n,11,0,"ecOverwrites"),l(n,14,0,"ecOverwrites")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,8,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending,u["ɵnov"](n,14).validClass,u["ɵnov"](n,14).invalidClass)}))}function xu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,22,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](2,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,9,{FormControlNames:1}),u["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),u["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"],["for","pgAutoscaleMode"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["PG Autoscale"])),(l()(),u["ɵeld"](7,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","pgAutoscaleMode"],["id","pgAutoscaleMode"],["name","pgAutoscaleMode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),i}),null,null)),u["ɵdid"](9,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](11,671744,[[9,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](13,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](14,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Nu)),u["ɵdid"](16,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,_u)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ku)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,qu)),u["ɵdid"](22,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0),l(n,11,0,"pgAutoscaleMode"),l(n,14,0,"pgAutoscaleMode"),l(n,16,0,e.pgAutoscaleModes),l(n,18,0,"on"!==e.form.getValue("pgAutoscaleMode")),l(n,20,0,e.isReplicated),l(n,22,0,e.info.is_all_bluestore&&e.isErasure)}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).hasErrors,u["ɵnov"](n,2).hasSuccess),l(n,8,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending,u["ɵnov"](n,14).validClass,u["ɵnov"](n,14).invalidClass)}))}function Fu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Pu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- No erasure code profile available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Au(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select an erasure code profile --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Bu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function Ou(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.addErasureCodeProfile()&&u),u}),null,null)),(l()(),u["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](3,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](4,1)],(function(l,n){var e=l(n,4,0,n.component.icons.add);l(n,3,0,e)}),null)}function zu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","This profile can't be deleted as it is in use."],["triggers",""],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.deleteErasureCodeProfile()&&u),u}),null,null)),u["ɵdid"](1,212992,[[4,4],["ecpDeletionBtn",4]],0,ae.c,[u.ViewContainerRef,ie.a,ae.a,u.ElementRef,u.Renderer2,ue.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"]},null),(l()(),u["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](4,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](5,1),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,1,0,"This profile can't be deleted as it is in use.","");var u=l(n,5,0,e.icons.trash);l(n,4,0,u)}),null)}function Lu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Profile is not in use."]))],null,null)}function ju(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function Uu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,ju)),u["ɵdid"](2,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,2,0,n.component.ecpUsage)}),null)}function Mu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,12,"span",[["class","form-text text-muted"],["id","ecp-info-block"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,xe.b,xe.a)),u["ɵdid"](2,180224,[[3,4],["ecpInfoTabs",4]],0,de.e,[de.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](3,0,null,0,4,"tab",[["class","ecp-info"],["heading","Profile"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](4,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](5,0,null,null,2,"cd-table-key-value",[],null,null,null,Le.b,Le.a)),u["ɵdid"](6,638976,null,0,je.a,[Kn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],hideKeys:[3,"hideKeys"]},null),u["ɵpad"](7,1),(l()(),u["ɵeld"](8,0,null,0,4,"tab",[["class","used-by-pools"],["heading","Used by pools"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](9,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](0,[["ecpIsNotUsed",2]],null,0,null,Lu)),(l()(),u["ɵand"](16777216,null,null,1,null,Uu)),u["ɵdid"](12,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,4,0,"Profile");var i=e.form.getValue("erasureProfile"),t=l(n,7,0,"name");l(n,6,0,i,!1,!0,t),l(n,9,0,"Used by pools"),l(n,12,0,e.ecpUsage,u["ɵnov"](n,10))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).clazz),l(n,3,0,u["ɵnov"](n,4).id,u["ɵnov"](n,4).active,u["ɵnov"](n,4).addClass,u["ɵnov"](n,4).role,u["ɵnov"](n,4).ariaLabelledby),l(n,8,0,u["ɵnov"](n,9).id,u["ɵnov"](n,9).active,u["ɵnov"](n,9).addClass,u["ɵnov"](n,9).role,u["ɵnov"](n,9).ariaLabelledby)}))}function Gu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,37,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,19,{FormControlNames:1}),u["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","erasureProfile"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Erasure code profile"])),(l()(),u["ɵeld"](6,0,null,0,31,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,28,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","erasureProfile"],["id","erasureProfile"],["name","erasureProfile"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),i}),null,null)),u["ɵdid"](9,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](11,671744,[[19,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](13,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](14,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Fu)),u["ɵdid"](16,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Pu)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Au)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Bu)),u["ɵdid"](22,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](23,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),u["ɵeld"](24,0,null,null,7,"button",[["class","btn btn-light"],["id","ecp-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0,i=l.component;return"click"===n&&(u=0!=(i.data.erasureInfo=!i.data.erasureInfo)&&u),u}),null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](26,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),u["ɵpod"](27,{active:0}),(l()(),u["ɵeld"](28,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](30,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](31,1),(l()(),u["ɵand"](16777216,null,null,1,null,Ou)),u["ɵdid"](33,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,zu)),u["ɵdid"](35,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Mu)),u["ɵdid"](37,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,11,0,"erasureProfile"),l(n,14,0,"erasureProfile"),l(n,16,0,!e.ecProfiles),l(n,18,0,e.ecProfiles&&0===e.ecProfiles.length),l(n,20,0,e.ecProfiles&&e.ecProfiles.length>0),l(n,22,0,e.ecProfiles);var u=l(n,27,0,e.data.erasureInfo);l(n,26,0,"btn btn-light",u);var i=l(n,31,0,e.icons.questionCircle);l(n,30,0,i),l(n,33,0,!e.editing),l(n,35,0,!e.editing),l(n,37,0,e.data.erasureInfo&&e.form.getValue("erasureProfile"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,8,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending,u["ɵnov"](n,14).validClass,u["ɵnov"](n,14).invalidClass)}))}function $u(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,21,{FormControlNames:1}),u["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","crushRule"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush ruleset"])),(l()(),u["ɵeld"](6,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A new crush ruleset will be implicitly created."]))],(function(l,n){l(n,1,0)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess)}))}function Ku(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["There are no rules."])),(l()(),u["ɵted"](-1,null,["  "]))],null,null)}function Ju(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.rule_name)}))}function Wu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.addCrushRule()&&u),u}),null,null)),(l()(),u["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](3,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](4,1)],(function(l,n){var e=l(n,4,0,n.component.icons.add);l(n,3,0,e)}),null)}function Zu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","This rule can't be deleted as it is in use."],["triggers",""],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.deleteCrushRule()&&u),u}),null,null)),u["ɵdid"](1,212992,[[2,4],["crushDeletionBtn",4]],0,ae.c,[u.ViewContainerRef,ie.a,ae.a,u.ElementRef,u.Renderer2,ue.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"]},null),(l()(),u["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](4,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](5,1),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,1,0,"This rule can't be deleted as it is in use.","");var u=l(n,5,0,e.icons.trash);l(n,4,0,u)}),null)}function Hu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.describeCrushStep(n.context.$implicit))}))}function Xu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Rule is not in use."]))],null,null)}function Yu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function Qu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,Yu)),u["ɵdid"](2,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,2,0,n.component.crushUsage)}),null)}function li(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,17,"span",[["class","form-text text-muted"],["id","crush-info-block"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,16,"tabset",[],[[2,"tab-container",null]],null,null,xe.b,xe.a)),u["ɵdid"](2,180224,[[1,4],["crushInfoTabs",4]],0,de.e,[de.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](3,0,null,0,4,"tab",[["class","crush-rule-info"],["heading","Crush rule"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](4,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](5,0,null,null,2,"cd-table-key-value",[],null,null,null,Le.b,Le.a)),u["ɵdid"](6,638976,null,0,je.a,[Kn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],hideKeys:[3,"hideKeys"]},null),u["ɵpad"](7,4),(l()(),u["ɵeld"](8,0,null,0,4,"tab",[["class","crush-rule-steps"],["heading","Crush steps"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](9,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](10,0,null,null,2,"ol",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,Hu)),u["ɵdid"](12,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](13,0,null,0,4,"tab",[["class","used-by-pools"],["heading","Used by pools"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](14,212992,null,0,de.b,[de.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](0,[["ruleIsNotUsed",2]],null,0,null,Xu)),(l()(),u["ɵand"](16777216,null,null,1,null,Qu)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,4,0,"Crush rule");var i=e.form.getValue("crushRule"),t=l(n,7,0,"steps","ruleset","type","rule_name");l(n,6,0,i,!1,!1,t),l(n,9,0,"Crush steps"),l(n,12,0,e.form.get("crushRule").value.steps),l(n,14,0,"Used by pools"),l(n,17,0,e.crushUsage,u["ɵnov"](n,15))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).clazz),l(n,3,0,u["ɵnov"](n,4).id,u["ɵnov"](n,4).active,u["ɵnov"](n,4).addClass,u["ɵnov"](n,4).role,u["ɵnov"](n,4).ariaLabelledby),l(n,8,0,u["ɵnov"](n,9).id,u["ɵnov"](n,9).active,u["ɵnov"](n,9).addClass,u["ɵnov"](n,9).role,u["ɵnov"](n,9).ariaLabelledby),l(n,13,0,u["ɵnov"](n,14).id,u["ɵnov"](n,14).active,u["ɵnov"](n,14).addClass,u["ɵnov"](n,14).role,u["ɵnov"](n,14).ariaLabelledby)}))}function ni(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function ei(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The rule can't be used in the current cluster as it has too few OSDs to meet the minimum required OSD by this rule."]))],null,null)}function ui(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,33,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,26,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),u["ɵeld"](2,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","crushRule"],["id","crushRule"],["name","crushSet"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,3).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,3).onTouched()&&i),i}),null,null)),u["ɵdid"](3,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](5,671744,[[23,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](7,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](8,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](9,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](10,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](11,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select a crush rule --"])),(l()(),u["ɵand"](16777216,null,null,1,null,Ju)),u["ɵdid"](14,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](15,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),u["ɵeld"](16,0,null,null,7,"button",[["class","btn btn-light"],["id","crush-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0,i=l.component;return"click"===n&&(u=0!=(i.data.crushInfo=!i.data.crushInfo)&&u),u}),null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](18,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),u["ɵpod"](19,{active:0}),(l()(),u["ɵeld"](20,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](22,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](23,1),(l()(),u["ɵand"](16777216,null,null,1,null,Wu)),u["ɵdid"](25,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Zu)),u["ɵdid"](27,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,li)),u["ɵdid"](29,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ni)),u["ɵdid"](31,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ei)),u["ɵdid"](33,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,5,0,"crushRule"),l(n,8,0,"crushRule"),l(n,10,0,null),l(n,11,0,null),l(n,14,0,e.current.rules);var i=l(n,19,0,e.data.crushInfo);l(n,18,0,"btn btn-light",i);var t=l(n,23,0,e.icons.questionCircle);l(n,22,0,t),l(n,25,0,e.isReplicated&&!e.editing),l(n,27,0,e.isReplicated&&!e.editing),l(n,29,0,e.data.crushInfo&&e.form.getValue("crushRule")),l(n,31,0,e.form.showError("crushRule",u["ɵnov"](n.parent.parent.parent,2),"required")),l(n,33,0,e.form.showError("crushRule",u["ɵnov"](n.parent.parent.parent,2),"tooFewOsds"))}),(function(l,n){l(n,2,0,u["ɵnov"](n,7).ngClassUntouched,u["ɵnov"](n,7).ngClassTouched,u["ɵnov"](n,7).ngClassPristine,u["ɵnov"](n,7).ngClassDirty,u["ɵnov"](n,7).ngClassValid,u["ɵnov"](n,7).ngClassInvalid,u["ɵnov"](n,7).ngClassPending,u["ɵnov"](n,8).validClass,u["ɵnov"](n,8).invalidClass)}))}function ii(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,9,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,23,{FormControlNames:1}),u["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","crushRule"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush ruleset"])),(l()(),u["ɵeld"](6,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵand"](0,[["noRules",2]],null,0,null,Ku)),(l()(),u["ɵand"](16777216,null,null,1,null,ui)),u["ɵdid"](9,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,9,0,e.current.rules.length>0,u["ɵnov"](n,7))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess)}))}function ti(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["CRUSH"])),(l()(),u["ɵand"](16777216,null,null,1,null,Gu)),u["ɵdid"](4,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,$u)),u["ɵdid"](6,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ii)),u["ɵdid"](8,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.isErasure),l(n,6,0,e.isErasure&&!e.editing),l(n,8,0,e.isReplicated||e.editing)}),null)}function ai(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function oi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function si(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- No erasure compression algorithm available --"]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function ri(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function di(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than 0"]))],null,null)}function ci(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be less than the maximum blob size"]))],null,null)}function mi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than 0"]))],null,null)}function fi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than the minimum blob size"]))],null,null)}function gi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be between 0.0 and 1.0"]))],null,null)}function pi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,75,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](2,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,27,{FormControlNames:1}),u["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),u["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"],["for","algorithm"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Algorithm"])),(l()(),u["ɵeld"](7,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","algorithm"],["id","algorithm"],["name","algorithm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,9).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),i}),null,null)),u["ɵdid"](9,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](11,671744,[[27,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](13,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](14,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,oi)),u["ɵdid"](16,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,si)),u["ɵdid"](18,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ri)),u["ɵdid"](20,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](21,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](22,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,29,{FormControlNames:1}),u["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),u["ɵeld"](25,0,null,0,1,"label",[["class","cd-col-form-label"],["for","minBlobSize"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Minimum blob size"])),(l()(),u["ɵeld"](27,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](28,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","KiB"],["formControlName","minBlobSize"],["id","minBlobSize"],["min","0"],["name","minBlobSize"],["placeholder","e.g., 128KiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,29)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,29).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,29)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,29)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,33).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](29,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](31,671744,[[29,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](33,81920,null,0,du.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](34,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](35,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,di)),u["ɵdid"](37,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ci)),u["ɵdid"](39,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](40,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](41,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,31,{FormControlNames:1}),u["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),u["ɵeld"](44,0,null,0,1,"label",[["class","cd-col-form-label"],["for","maxBlobSize"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Maximum blob size"])),(l()(),u["ɵeld"](46,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](47,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","KiB"],["formControlName","maxBlobSize"],["id","maxBlobSize"],["min","0"],["placeholder","e.g., 512KiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,48)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,48).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,48)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,48)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,52).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](48,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](50,671744,[[31,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](52,81920,null,0,du.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](53,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](54,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,mi)),u["ɵdid"](56,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,fi)),u["ɵdid"](58,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](59,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](60,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,33,{FormControlNames:1}),u["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),u["ɵeld"](63,0,null,0,1,"label",[["class","cd-col-form-label"],["for","ratio"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Ratio"])),(l()(),u["ɵeld"](65,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](66,0,null,null,7,"input",[["class","form-control"],["formControlName","ratio"],["id","ratio"],["max","1"],["min","0"],["name","ratio"],["placeholder","Compression ratio"],["step","0.1"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,67)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,67).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,67)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,67)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,68).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,68).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,68).onTouched()&&i),i}),null,null)),u["ɵdid"](67,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](68,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](70,671744,[[33,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](72,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](73,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,gi)),u["ɵdid"](75,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0),l(n,11,0,"algorithm"),l(n,14,0,"algorithm"),l(n,16,0,!e.info.compression_algorithms),l(n,18,0,e.info.compression_algorithms&&0===e.info.compression_algorithms.length),l(n,20,0,e.info.compression_algorithms),l(n,22,0),l(n,31,0,"minBlobSize"),l(n,33,0,"KiB"),l(n,35,0,"minBlobSize"),l(n,37,0,e.form.showError("minBlobSize",u["ɵnov"](n.parent.parent,2),"min")),l(n,39,0,e.form.showError("minBlobSize",u["ɵnov"](n.parent.parent,2),"maximum")),l(n,41,0),l(n,50,0,"maxBlobSize"),l(n,52,0,"KiB"),l(n,54,0,"maxBlobSize"),l(n,56,0,e.form.showError("maxBlobSize",u["ɵnov"](n.parent.parent,2),"min")),l(n,58,0,e.form.showError("maxBlobSize",u["ɵnov"](n.parent.parent,2),"minimum")),l(n,60,0),l(n,70,0,"ratio"),l(n,73,0,"ratio"),l(n,75,0,e.form.showError("ratio",u["ɵnov"](n.parent.parent,2),"min")||e.form.showError("ratio",u["ɵnov"](n.parent.parent,2),"max"))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).hasErrors,u["ɵnov"](n,2).hasSuccess),l(n,8,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending,u["ɵnov"](n,14).validClass,u["ɵnov"](n,14).invalidClass),l(n,21,0,u["ɵnov"](n,22).hasErrors,u["ɵnov"](n,22).hasSuccess),l(n,28,0,u["ɵnov"](n,34).ngClassUntouched,u["ɵnov"](n,34).ngClassTouched,u["ɵnov"](n,34).ngClassPristine,u["ɵnov"](n,34).ngClassDirty,u["ɵnov"](n,34).ngClassValid,u["ɵnov"](n,34).ngClassInvalid,u["ɵnov"](n,34).ngClassPending,u["ɵnov"](n,35).validClass,u["ɵnov"](n,35).invalidClass),l(n,40,0,u["ɵnov"](n,41).hasErrors,u["ɵnov"](n,41).hasSuccess),l(n,47,0,u["ɵnov"](n,53).ngClassUntouched,u["ɵnov"](n,53).ngClassTouched,u["ɵnov"](n,53).ngClassPristine,u["ɵnov"](n,53).ngClassDirty,u["ɵnov"](n,53).ngClassValid,u["ɵnov"](n,53).ngClassInvalid,u["ɵnov"](n,53).ngClassPending,u["ɵnov"](n,54).validClass,u["ɵnov"](n,54).invalidClass),l(n,59,0,u["ɵnov"](n,60).hasErrors,u["ɵnov"](n,60).hasSuccess),l(n,66,0,u["ɵnov"](n,72).ngClassUntouched,u["ɵnov"](n,72).ngClassTouched,u["ɵnov"](n,72).ngClassPristine,u["ɵnov"](n,72).ngClassDirty,u["ɵnov"](n,72).ngClassValid,u["ɵnov"](n,72).ngClassInvalid,u["ɵnov"](n,72).ngClassPending,u["ɵnov"](n,73).validClass,u["ɵnov"](n,73).invalidClass)}))}function hi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,23,"div",[["formGroupName","compression"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),u["ɵdid"](1,212992,null,0,t.m,[[3,t.d],[8,null],[8,null]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.d,null,[t.m]),u["ɵdid"](3,16384,null,0,t.s,[[4,t.d]],null,null),(l()(),u["ɵeld"](4,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Compression"])),(l()(),u["ɵeld"](6,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](7,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,25,{FormControlNames:1}),u["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),u["ɵeld"](10,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mode"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Mode"])),(l()(),u["ɵeld"](12,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](13,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","mode"],["id","mode"],["name","mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,14).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,14).onTouched()&&i),i}),null,null)),u["ɵdid"](14,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](16,671744,[[25,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](18,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](19,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ai)),u["ɵdid"](21,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,pi)),u["ɵdid"](23,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0,"compression"),l(n,7,0),l(n,16,0,"mode"),l(n,19,0,"mode"),l(n,21,0,e.info.compression_modes),l(n,23,0,e.hasCompressionEnabled())}),(function(l,n){l(n,0,0,u["ɵnov"](n,3).ngClassUntouched,u["ɵnov"](n,3).ngClassTouched,u["ɵnov"](n,3).ngClassPristine,u["ɵnov"](n,3).ngClassDirty,u["ɵnov"](n,3).ngClassValid,u["ɵnov"](n,3).ngClassInvalid,u["ɵnov"](n,3).ngClassPending),l(n,6,0,u["ɵnov"](n,7).hasErrors,u["ɵnov"](n,7).hasSuccess),l(n,13,0,u["ɵnov"](n,18).ngClassUntouched,u["ɵnov"](n,18).ngClassTouched,u["ɵnov"](n,18).ngClassPristine,u["ɵnov"](n,18).ngClassDirty,u["ɵnov"](n,18).ngClassValid,u["ɵnov"](n,18).ngClassInvalid,u["ɵnov"](n,18).ngClassPending,u["ɵnov"](n,19).validClass,u["ɵnov"](n,19).invalidClass)}))}function vi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The value should be greater or equal to 0"]))],null,null)}function bi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,134,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,2).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,2).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,5).onSubmit()&&i),i}),null,null)),u["ɵdid"](1,16384,null,0,t.G,[],null,null),u["ɵdid"](2,540672,[["formDir",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](4,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](5,16384,null,0,Vl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](6,0,null,null,128,"div",[["class","card"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),u["ɵted"](8,null,[""," ",""])),u["ɵppd"](9,1),u["ɵppd"](10,1),(l()(),u["ɵeld"](11,0,null,null,114,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](12,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](13,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](18,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](19,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,21)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,21).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,21)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,21)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](20,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](21,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](23,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](25,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](26,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,vu)),u["ɵdid"](28,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,bu)),u["ɵdid"](30,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Cu)),u["ɵdid"](32,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ru)),u["ɵdid"](34,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](35,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](36,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](39,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","poolType"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Pool type"])),(l()(),u["ɵeld"](41,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](42,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","poolType"],["id","poolType"],["name","poolType"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,43).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,43).onTouched()&&i),i}),null,null)),u["ɵdid"](43,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](45,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](47,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](48,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](49,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](50,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](51,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select a pool type --"])),(l()(),u["ɵand"](16777216,null,null,1,null,Iu)),u["ɵdid"](54,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Eu)),u["ɵdid"](56,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,xu)),u["ɵdid"](58,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](59,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](60,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,17,{FormControlNames:1}),u["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),u["ɵeld"](63,0,null,0,1,"label",[["class","cd-col-form-label"],["for","applications"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Applications"])),(l()(),u["ɵeld"](65,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](66,0,null,null,1,"cd-select-badges",[["id","applications"]],null,[[null,"selection"]],(function(l,n,e){var u=!0;return"selection"===n&&(u=!1!==l.component.appSelection()&&u),u}),cu.b,cu.a)),u["ɵdid"](67,49152,null,0,mu.a,[s.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"],selectionLimit:[3,"selectionLimit"],customBadges:[4,"customBadges"],customBadgeValidators:[5,"customBadgeValidators"]},{selection:"selection"}),(l()(),u["ɵand"](16777216,null,null,1,null,ti)),u["ɵdid"](69,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,hi)),u["ɵdid"](71,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](72,0,null,null,50,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](73,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Quotas"])),(l()(),u["ɵeld"](75,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](76,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,35,{FormControlNames:1}),u["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),u["ɵeld"](79,0,null,0,9,"label",[["class","cd-col-form-label"],["for","max_bytes"]],null,null,null,null,null)),(l()(),u["ɵeld"](80,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Max bytes"])),(l()(),u["ɵeld"](82,0,null,null,6,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](83,49152,null,0,Sl.a,[],null,null),(l()(),u["ɵeld"](84,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Leave it blank or specify 0 to disable this quota."])),(l()(),u["ɵeld"](86,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),u["ɵeld"](87,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A valid quota should be greater than 0."])),(l()(),u["ɵeld"](89,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](90,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","GiB"],["formControlName","max_bytes"],["id","max_bytes"],["name","max_bytes"],["placeholder","e.g., 10GiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,91)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,91).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,91)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,91)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,95).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](91,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](93,671744,[[35,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](95,81920,null,0,du.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](96,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](97,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](98,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](99,1163264,null,2,Vl.c,[u.ElementRef,Vl.g],null,null),u["ɵqud"](603979776,37,{FormControlNames:1}),u["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),u["ɵeld"](102,0,null,0,9,"label",[["class","cd-col-form-label"],["for","max_objects"]],null,null,null,null,null)),(l()(),u["ɵeld"](103,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Max objects"])),(l()(),u["ɵeld"](105,0,null,null,6,"cd-helper",[],null,null,null,_l.b,_l.a)),u["ɵdid"](106,49152,null,0,Sl.a,[],null,null),(l()(),u["ɵeld"](107,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Leave it blank or specify 0 to disable this quota."])),(l()(),u["ɵeld"](109,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),u["ɵeld"](110,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A valid quota should be greater than 0."])),(l()(),u["ɵeld"](112,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](113,0,null,null,7,"input",[["class","form-control"],["formControlName","max_objects"],["id","max_objects"],["min","0"],["name","max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,114)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,114).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,114)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,114)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,115).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,115).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,115).onTouched()&&i),i}),null,null)),u["ɵdid"](114,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](115,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](117,671744,[[37,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](119,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](120,16384,null,0,Vl.h,[[3,t.d],Vl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,vi)),u["ɵdid"](122,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](123,0,null,null,2,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),u["ɵeld"](124,0,null,null,1,"cd-rbd-configuration-form",[],null,[[null,"changes"]],(function(l,n,e){var u=!0;return"changes"===n&&(u=!1!==(l.component.currentConfigurationValues=e())&&u),u}),fu.b,fu.a)),u["ɵdid"](125,114688,null,0,gu.a,[N.a,ze.a],{form:[0,"form"],initializeData:[1,"initializeData"]},{changes:"changes"}),(l()(),u["ɵeld"](126,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](127,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),u["ɵeld"](128,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.submit()&&u),u}),Dl.b,Dl.a)),u["ɵdid"](129,114688,null,0,kl.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](130,0,[""," "," "])),u["ɵppd"](131,1),u["ɵppd"](132,1),(l()(),u["ɵeld"](133,0,null,null,1,"cd-back-button",[],null,null,null,ql.b,ql.a)),u["ɵdid"](134,49152,null,0,xl.a,[El.Location,i.b],null,null)],(function(l,n){var e=n.component;l(n,2,0,e.form),l(n,5,0,e.form),l(n,13,0),l(n,20,0,""),l(n,23,0,"name"),l(n,26,0,"name"),l(n,28,0,e.form.showError("name",u["ɵnov"](n,2),"required")),l(n,30,0,e.form.showError("name",u["ɵnov"](n,2),"uniqueName")),l(n,32,0,e.form.showError("name",u["ɵnov"](n,2),"rbdPool")),l(n,34,0,e.form.showError("name",u["ɵnov"](n,2),"pattern")),l(n,36,0),l(n,45,0,"poolType"),l(n,48,0,"poolType"),l(n,50,0,""),l(n,51,0,""),l(n,54,0,e.data.poolTypes),l(n,56,0,e.form.showError("poolType",u["ɵnov"](n,2),"required")),l(n,58,0,e.isReplicated||e.isErasure),l(n,60,0),l(n,67,0,e.data.applications.selected,e.data.applications.available,e.data.applications.messages,4,!0,e.data.applications.validators),l(n,69,0,e.isErasure||e.isReplicated),l(n,71,0,e.info.is_all_bluestore),l(n,76,0),l(n,93,0,"max_bytes"),l(n,95,0,"GiB"),l(n,97,0,"max_bytes"),l(n,99,0),l(n,117,0,"max_objects"),l(n,120,0,"max_objects"),l(n,122,0,e.form.showError("max_objects",u["ɵnov"](n,2),"min")),l(n,125,0,e.form,e.initializeConfigData),l(n,129,0,u["ɵnov"](n,2))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,4).ngClassUntouched,u["ɵnov"](n,4).ngClassTouched,u["ɵnov"](n,4).ngClassPristine,u["ɵnov"](n,4).ngClassDirty,u["ɵnov"](n,4).ngClassValid,u["ɵnov"](n,4).ngClassInvalid,u["ɵnov"](n,4).ngClassPending);var i=u["ɵunv"](n,8,0,l(n,9,0,u["ɵnov"](n.parent,0),e.action)),t=u["ɵunv"](n,8,1,l(n,10,0,u["ɵnov"](n.parent,1),e.resource));l(n,8,0,i,t),l(n,12,0,u["ɵnov"](n,13).hasErrors,u["ɵnov"](n,13).hasSuccess),l(n,19,0,u["ɵnov"](n,25).ngClassUntouched,u["ɵnov"](n,25).ngClassTouched,u["ɵnov"](n,25).ngClassPristine,u["ɵnov"](n,25).ngClassDirty,u["ɵnov"](n,25).ngClassValid,u["ɵnov"](n,25).ngClassInvalid,u["ɵnov"](n,25).ngClassPending,u["ɵnov"](n,26).validClass,u["ɵnov"](n,26).invalidClass),l(n,35,0,u["ɵnov"](n,36).hasErrors,u["ɵnov"](n,36).hasSuccess),l(n,42,0,u["ɵnov"](n,47).ngClassUntouched,u["ɵnov"](n,47).ngClassTouched,u["ɵnov"](n,47).ngClassPristine,u["ɵnov"](n,47).ngClassDirty,u["ɵnov"](n,47).ngClassValid,u["ɵnov"](n,47).ngClassInvalid,u["ɵnov"](n,47).ngClassPending,u["ɵnov"](n,48).validClass,u["ɵnov"](n,48).invalidClass),l(n,59,0,u["ɵnov"](n,60).hasErrors,u["ɵnov"](n,60).hasSuccess),l(n,75,0,u["ɵnov"](n,76).hasErrors,u["ɵnov"](n,76).hasSuccess),l(n,90,0,u["ɵnov"](n,96).ngClassUntouched,u["ɵnov"](n,96).ngClassTouched,u["ɵnov"](n,96).ngClassPristine,u["ɵnov"](n,96).ngClassDirty,u["ɵnov"](n,96).ngClassValid,u["ɵnov"](n,96).ngClassInvalid,u["ɵnov"](n,96).ngClassPending,u["ɵnov"](n,97).validClass,u["ɵnov"](n,97).invalidClass),l(n,98,0,u["ɵnov"](n,99).hasErrors,u["ɵnov"](n,99).hasSuccess),l(n,113,0,u["ɵnov"](n,119).ngClassUntouched,u["ɵnov"](n,119).ngClassTouched,u["ɵnov"](n,119).ngClassPristine,u["ɵnov"](n,119).ngClassDirty,u["ɵnov"](n,119).ngClassValid,u["ɵnov"](n,119).ngClassInvalid,u["ɵnov"](n,119).ngClassPending,u["ɵnov"](n,120).validClass,u["ɵnov"](n,120).invalidClass),l(n,123,0,e.isErasure||-1===e.data.applications.selected.indexOf("rbd"));var a=u["ɵunv"](n,130,0,l(n,131,0,u["ɵnov"](n.parent,0),e.action)),o=u["ɵunv"](n,130,1,l(n,132,0,u["ɵnov"](n.parent,1),e.resource));l(n,130,0,a,o)}))}function Ci(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),u["ɵqud"](671088640,1,{crushInfoTabs:0}),u["ɵqud"](671088640,2,{crushDeletionBtn:0}),u["ɵqud"](671088640,3,{ecpInfoTabs:0}),u["ɵqud"](671088640,4,{ecpDeletionBtn:0}),(l()(),u["ɵand"](16777216,null,null,1,null,hu)),u["ɵdid"](7,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](8,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,bi)),u["ɵdid"](10,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,7,0,!(e.info&&e.ecProfiles)),l(n,10,0,e.info&&e.ecProfiles)}),null)}function Ri(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-pool-form",[],null,null,null,Ci,pu)),u["ɵdid"](1,114688,null,0,k,[I.a,re.a,re.m,Fl.b,m.a,E.a,N.a,Fl.b,y.a,c,d,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Ii=u["ɵccf"]("cd-pool-form",k,Ri,{},{},[]);e.d(n,"PoolModuleNgFactory",(function(){return Ei})),e.d(n,"RoutedPoolModuleNgFactory",(function(){return Ni}));var Ei=u["ɵcmf"]($,[],(function(l){return u["ɵmod"]([u["ɵmpd"](512,u.ComponentFactoryResolver,u["ɵCodegenComponentFactoryResolver"],[[8,[Z.a,H.a,X.a,Y.a,Q.a,Q.b,ll.a,nl.a,el.a,ul.a,il.a,tl.a,al.a,ol.a,sl.a,rl.a,dl.a,cl.a,cl.c,cl.b,cl.d,ml.a,fl.a,gl.a,pl.a,hl.a,vl.a,bl.a,Cl.a,Rl.a,Il.a,Wl,Fn]],[3,u.ComponentFactoryResolver],u.NgModuleRef]),u["ɵmpd"](4608,El.NgLocalization,El.NgLocaleLocalization,[u.LOCALE_ID,[2,El["ɵangular_packages_common_common_a"]]]),u["ɵmpd"](4608,Pn.y,Pn.y,[El.DOCUMENT]),u["ɵmpd"](4608,Pn.r,Pn.r,[]),u["ɵmpd"](4608,Pn.a,Pn.a,[]),u["ɵmpd"](4608,t.D,t.D,[]),u["ɵmpd"](4608,An.a,An.a,[]),u["ɵmpd"](4608,Bn.a,Bn.a,[]),u["ɵmpd"](4608,On.a,On.a,[s.a]),u["ɵmpd"](4608,El.DatePipe,El.DatePipe,[u.LOCALE_ID]),u["ɵmpd"](4608,zn.a,zn.a,[]),u["ɵmpd"](4608,Ln.a,Ln.a,[]),u["ɵmpd"](4608,N.a,N.a,[]),u["ɵmpd"](4608,I.a,I.a,[N.a]),u["ɵmpd"](4608,jn.a,jn.a,[N.a]),u["ɵmpd"](4608,O.a,O.a,[N.a]),u["ɵmpd"](4608,Un.a,Un.a,[]),u["ɵmpd"](4608,Mn.a,Mn.a,[]),u["ɵmpd"](4608,Gn.a,Gn.a,[]),u["ɵmpd"](4608,$n.a,$n.a,[]),u["ɵmpd"](4608,Kn.a,Kn.a,[El.DatePipe]),u["ɵmpd"](4608,Jn.a,Jn.a,[]),u["ɵmpd"](4608,Wn.a,Wn.a,[]),u["ɵmpd"](4608,Zn.a,Zn.a,[]),u["ɵmpd"](4608,Hn.a,Hn.a,[]),u["ɵmpd"](4608,Xn.a,Xn.a,[]),u["ɵmpd"](4608,Yn.a,Yn.a,[s.a]),u["ɵmpd"](4608,Nl.a,Nl.a,[]),u["ɵmpd"](4608,Qn.a,Qn.a,[]),u["ɵmpd"](4608,le.a,le.a,[]),u["ɵmpd"](4608,t.h,t.h,[]),u["ɵmpd"](4608,ne.b,ne.b,[]),u["ɵmpd"](4608,ee.a,ee.a,[]),u["ɵmpd"](4608,ue.a,ue.a,[u.NgZone,u.RendererFactory2,u.PLATFORM_ID]),u["ɵmpd"](4608,ie.a,ie.a,[u.ComponentFactoryResolver,u.NgZone,u.Injector,ue.a,u.ApplicationRef]),u["ɵmpd"](4608,te.c,te.c,[]),u["ɵmpd"](4608,ae.a,ae.a,[]),u["ɵmpd"](4608,Fl.b,Fl.b,[u.RendererFactory2,ie.a]),u["ɵmpd"](4608,oe.f,oe.f,[]),u["ɵmpd"](4608,E.a,E.a,[]),u["ɵmpd"](4608,se.a,se.a,[re.m,E.a]),u["ɵmpd"](4608,de.f,de.f,[]),u["ɵmpd"](4608,ce.t,ce.t,[]),u["ɵmpd"](4608,ce.v,ce.v,[]),u["ɵmpd"](4608,ce.a,ce.a,[]),u["ɵmpd"](4608,ce.h,ce.h,[]),u["ɵmpd"](4608,ce.d,ce.d,[]),u["ɵmpd"](4608,ce.j,ce.j,[]),u["ɵmpd"](4608,ce.l,ce.l,[]),u["ɵmpd"](4608,ce.u,ce.u,[ce.v,ce.l]),u["ɵmpd"](4608,me.a,me.a,[]),u["ɵmpd"](1073742336,El.CommonModule,El.CommonModule,[]),u["ɵmpd"](1073742336,Pn.u,Pn.u,[]),u["ɵmpd"](1073742336,t.C,t.C,[]),u["ɵmpd"](1073742336,t.n,t.n,[]),u["ɵmpd"](1073742336,oe.e,oe.e,[]),u["ɵmpd"](1073742336,fe.a,fe.a,[]),u["ɵmpd"](1073742336,t.y,t.y,[]),u["ɵmpd"](1073742336,ne.c,ne.c,[]),u["ɵmpd"](1073742336,ee.d,ee.d,[]),u["ɵmpd"](1073742336,te.d,te.d,[]),u["ɵmpd"](1073742336,ae.d,ae.d,[]),u["ɵmpd"](1073742336,ge.b,ge.b,[]),u["ɵmpd"](1073742336,Fl.e,Fl.e,[]),u["ɵmpd"](1073742336,pe.a,pe.a,[]),u["ɵmpd"](1073742336,Vl.f,Vl.f,[]),u["ɵmpd"](1073742336,he.ClickOutsideModule,he.ClickOutsideModule,[]),u["ɵmpd"](1073742336,ve.b,ve.b,[]),u["ɵmpd"](1073742336,re.q,re.q,[[2,re.v],[2,re.m]]),u["ɵmpd"](1073742336,be.a,be.a,[]),u["ɵmpd"](1073742336,Ce.a,Ce.a,[]),u["ɵmpd"](1073742336,r.a,r.a,[]),u["ɵmpd"](1073742336,Re.a,Re.a,[]),u["ɵmpd"](1073742336,de.d,de.d,[]),u["ɵmpd"](1073742336,Ie.a,Ie.a,[]),u["ɵmpd"](1073742336,Ee.a,Ee.a,[]),u["ɵmpd"](1073742336,ce.g,ce.g,[]),u["ɵmpd"](1073742336,Ne.b,Ne.b,[]),u["ɵmpd"](1073742336,ye.a,ye.a,[]),u["ɵmpd"](1073742336,$,$,[]),u["ɵmpd"](256,u.LOCALE_ID,"en-US",[]),u["ɵmpd"](256,oe.a,{autoClose:!0,insideClick:!1},[]),u["ɵmpd"](256,u.TRANSLATIONS_FORMAT,"xlf",[])])})),Ni=u["ɵcmf"](W,[],(function(l){return u["ɵmod"]([u["ɵmpd"](512,u.ComponentFactoryResolver,u["ɵCodegenComponentFactoryResolver"],[[8,[Z.a,H.a,X.a,Y.a,Q.a,Q.b,ll.a,nl.a,el.a,ul.a,il.a,tl.a,al.a,ol.a,sl.a,rl.a,dl.a,cl.a,cl.c,cl.b,cl.d,ml.a,fl.a,gl.a,pl.a,hl.a,vl.a,bl.a,Cl.a,Rl.a,Il.a,Wl,Fn,iu,Ii]],[3,u.ComponentFactoryResolver],u.NgModuleRef]),u["ɵmpd"](4608,El.NgLocalization,El.NgLocaleLocalization,[u.LOCALE_ID,[2,El["ɵangular_packages_common_common_a"]]]),u["ɵmpd"](4608,Pn.y,Pn.y,[El.DOCUMENT]),u["ɵmpd"](4608,Pn.r,Pn.r,[]),u["ɵmpd"](4608,Pn.a,Pn.a,[]),u["ɵmpd"](4608,t.D,t.D,[]),u["ɵmpd"](4608,An.a,An.a,[]),u["ɵmpd"](4608,Bn.a,Bn.a,[]),u["ɵmpd"](4608,On.a,On.a,[s.a]),u["ɵmpd"](4608,El.DatePipe,El.DatePipe,[u.LOCALE_ID]),u["ɵmpd"](4608,zn.a,zn.a,[]),u["ɵmpd"](4608,Ln.a,Ln.a,[]),u["ɵmpd"](4608,N.a,N.a,[]),u["ɵmpd"](4608,I.a,I.a,[N.a]),u["ɵmpd"](4608,jn.a,jn.a,[N.a]),u["ɵmpd"](4608,O.a,O.a,[N.a]),u["ɵmpd"](4608,Un.a,Un.a,[]),u["ɵmpd"](4608,Mn.a,Mn.a,[]),u["ɵmpd"](4608,Gn.a,Gn.a,[]),u["ɵmpd"](4608,$n.a,$n.a,[]),u["ɵmpd"](4608,Kn.a,Kn.a,[El.DatePipe]),u["ɵmpd"](4608,Jn.a,Jn.a,[]),u["ɵmpd"](4608,Wn.a,Wn.a,[]),u["ɵmpd"](4608,Zn.a,Zn.a,[]),u["ɵmpd"](4608,Hn.a,Hn.a,[]),u["ɵmpd"](4608,Xn.a,Xn.a,[]),u["ɵmpd"](4608,Yn.a,Yn.a,[s.a]),u["ɵmpd"](4608,Nl.a,Nl.a,[]),u["ɵmpd"](4608,Qn.a,Qn.a,[]),u["ɵmpd"](4608,le.a,le.a,[]),u["ɵmpd"](4608,t.h,t.h,[]),u["ɵmpd"](4608,ne.b,ne.b,[]),u["ɵmpd"](4608,ee.a,ee.a,[]),u["ɵmpd"](4608,ue.a,ue.a,[u.NgZone,u.RendererFactory2,u.PLATFORM_ID]),u["ɵmpd"](4608,ie.a,ie.a,[u.ComponentFactoryResolver,u.NgZone,u.Injector,ue.a,u.ApplicationRef]),u["ɵmpd"](4608,te.c,te.c,[]),u["ɵmpd"](4608,ae.a,ae.a,[]),u["ɵmpd"](4608,Fl.b,Fl.b,[u.RendererFactory2,ie.a]),u["ɵmpd"](4608,oe.f,oe.f,[]),u["ɵmpd"](4608,E.a,E.a,[]),u["ɵmpd"](4608,se.a,se.a,[re.m,E.a]),u["ɵmpd"](4608,de.f,de.f,[]),u["ɵmpd"](4608,ce.t,ce.t,[]),u["ɵmpd"](4608,ce.v,ce.v,[]),u["ɵmpd"](4608,ce.a,ce.a,[]),u["ɵmpd"](4608,ce.h,ce.h,[]),u["ɵmpd"](4608,ce.d,ce.d,[]),u["ɵmpd"](4608,ce.j,ce.j,[]),u["ɵmpd"](4608,ce.l,ce.l,[]),u["ɵmpd"](4608,ce.u,ce.u,[ce.v,ce.l]),u["ɵmpd"](4608,me.a,me.a,[]),u["ɵmpd"](1073742336,El.CommonModule,El.CommonModule,[]),u["ɵmpd"](1073742336,Pn.u,Pn.u,[]),u["ɵmpd"](1073742336,t.C,t.C,[]),u["ɵmpd"](1073742336,t.n,t.n,[]),u["ɵmpd"](1073742336,oe.e,oe.e,[]),u["ɵmpd"](1073742336,fe.a,fe.a,[]),u["ɵmpd"](1073742336,t.y,t.y,[]),u["ɵmpd"](1073742336,ne.c,ne.c,[]),u["ɵmpd"](1073742336,ee.d,ee.d,[]),u["ɵmpd"](1073742336,te.d,te.d,[]),u["ɵmpd"](1073742336,ae.d,ae.d,[]),u["ɵmpd"](1073742336,ge.b,ge.b,[]),u["ɵmpd"](1073742336,Fl.e,Fl.e,[]),u["ɵmpd"](1073742336,pe.a,pe.a,[]),u["ɵmpd"](1073742336,Vl.f,Vl.f,[]),u["ɵmpd"](1073742336,he.ClickOutsideModule,he.ClickOutsideModule,[]),u["ɵmpd"](1073742336,ve.b,ve.b,[]),u["ɵmpd"](1073742336,re.q,re.q,[[2,re.v],[2,re.m]]),u["ɵmpd"](1073742336,be.a,be.a,[]),u["ɵmpd"](1073742336,Ce.a,Ce.a,[]),u["ɵmpd"](1073742336,r.a,r.a,[]),u["ɵmpd"](1073742336,Re.a,Re.a,[]),u["ɵmpd"](1073742336,de.d,de.d,[]),u["ɵmpd"](1073742336,Ie.a,Ie.a,[]),u["ɵmpd"](1073742336,Ee.a,Ee.a,[]),u["ɵmpd"](1073742336,ce.g,ce.g,[]),u["ɵmpd"](1073742336,Ne.b,Ne.b,[]),u["ɵmpd"](1073742336,ye.a,ye.a,[]),u["ɵmpd"](1073742336,$,$,[]),u["ɵmpd"](1073742336,W,W,[]),u["ɵmpd"](256,u.LOCALE_ID,"en-US",[]),u["ɵmpd"](256,oe.a,{autoClose:!0,insideClick:!1},[]),u["ɵmpd"](1024,re.k,(function(){return[[{path:"",component:G},{path:"create",component:k,data:K},{path:"edit/:name",component:k,data:J}]]}),[]),u["ɵmpd"](256,u.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.9a60f7741889f52ed7ae.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/6.9a60f7741889f52ed7ae.js
new file mode 100644 (file)
index 0000000..19a0ddc
--- /dev/null
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{nOaW:function(l,n,e){"use strict";e.r(n);var u=e("8Y7J"),i=e("sne2"),t=e("s7LF"),a=e("LvDl"),o=e("IheW"),s=e("GiVz"),r=e("pL04");let d=(()=>{class l{constructor(l,n){this.http=l,this.i18n=n,this.apiPath="api/crush_rule",this.formTooltips={root:this.i18n("The name of the node under which data should be placed."),failure_domain:this.i18n("The type of CRUSH nodes across which we should separate replicas."),device_class:this.i18n("The device class data should be placed on.")}}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return l.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new l(u["ɵɵinject"](o.c),u["ɵɵinject"](s.a))},token:l,providedIn:r.a}),l})(),c=(()=>{class l{constructor(l,n){this.http=l,this.i18n=n,this.apiPath="api/erasure_code_profile",this.formTooltips={k:this.i18n("Each object is split in data-chunks parts, each stored on a different OSD."),m:this.i18n("Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data."),plugins:{jerasure:{description:this.i18n("The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools."),technique:this.i18n("The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2."),packetSize:this.i18n("The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.")},lrc:{description:this.i18n("With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven."),l:this.i18n("Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set."),crushLocality:this.i18n("The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.")},isa:{description:this.i18n("The isa plugin encapsulates the ISA library. It only runs on Intel processors."),technique:this.i18n("The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.")},shec:{description:this.i18n("The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes."),c:this.i18n("The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.")}},crushRoot:this.i18n("The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default."),crushFailureDomain:this.i18n("Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host."),crushDeviceClass:this.i18n("Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map."),directory:this.i18n("Set the directory name from which the erasure code plugin is loaded.")}}list(){return this.http.get(this.apiPath)}create(l){return this.http.post(this.apiPath,l,{observe:"response"})}delete(l){return this.http.delete(`${this.apiPath}/${l}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return l.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new l(u["ɵɵinject"](o.c),u["ɵɵinject"](s.a))},token:l,providedIn:r.a}),l})();var m=e("Ekvf");class f{constructor(){this.nodes=[],this.idTree={},this.allDevices=[],this.buckets=[],this.failureDomains={},this.failureDomainKeys=[],this.devices=[],this.deviceCount=0}static searchFailureDomains(l,n){return this.getFailureDomains(this.search(l,n))}static search(l,n){const[e,u]=n.split("~"),i=l.find(l=>["name","id","type"].some(n=>l[n]===e));return i?(l=this.getSubNodes(i,this.createIdTreeFromNodes(l)),u&&(l=this.filterNodesByDeviceType(l,u)),l):[]}static createIdTreeFromNodes(l){const n={};return l.forEach(l=>{n[l.id]=l}),n}static getSubNodes(l,n){let e=[l];return l.children?(l.children.forEach(l=>{e=e.concat(this.getSubNodes(n[l],n))}),e):e}static filterNodesByDeviceType(l,n){let e,u=l.filter(l=>l.device_class&&l.device_class!==n).map(l=>l.id),i=u;do{e=!1,l=l.filter(l=>!u.includes(l.id));const n=[];l.forEach(l=>{l.children&&l.children.every(l=>u.includes(l))&&(n.push(l.id),e=!0)}),e&&(u=n,i=i.concat(n))}while(e);return(l=a.cloneDeep(l)).map(l=>l.children?(l.children=l.children.filter(l=>!i.includes(l)),l):l)}static getFailureDomains(l){const n={};return l.forEach(l=>{const e=l.type;n[e]||(n[e]=[]),n[e].push(l)}),n}initCrushNodeSelection(l,n,e,u){this.nodes=l,this.idTree=f.createIdTreeFromNodes(l),l.forEach(l=>{this.idTree[l.id]=l}),this.buckets=a.sortBy(l.filter(l=>l.children),"name"),this.controls={root:n,failure:e,device:u},this.preSelectRoot(),this.controls.root.valueChanges.subscribe(()=>this.onRootChange()),this.controls.failure.valueChanges.subscribe(()=>this.onFailureDomainChange()),this.controls.device.valueChanges.subscribe(()=>this.onDeviceChange())}preSelectRoot(){const l=this.nodes.find(l=>"root"===l.type);this.silentSet(this.controls.root,l),this.onRootChange()}silentSet(l,n){l.setValue(n,{emitEvent:!1})}onRootChange(){const l=f.getSubNodes(this.controls.root.value,this.idTree),n=f.getFailureDomains(l);Object.keys(n).forEach(l=>{n[l].length<=1&&delete n[l]}),this.failureDomains=n,this.failureDomainKeys=Object.keys(n).sort(),this.updateFailureDomain()}updateFailureDomain(){let l=this.getIncludedCustomValue(this.controls.failure,Object.keys(this.failureDomains));""===l&&(l=this.setMostCommonDomain(this.controls.failure)),this.updateDevices(l)}getIncludedCustomValue(l,n){return l.dirty&&n.includes(l.value)?l.value:""}setMostCommonDomain(l){let n={n:0,type:""};return Object.keys(this.failureDomains).forEach(l=>{const e=this.failureDomains[l].length;n.n<e&&(n={n:e,type:l})}),this.silentSet(l,n.type),n.type}onFailureDomainChange(){this.updateDevices()}updateDevices(l=this.controls.failure.value){const n=a.flatten(this.failureDomains[l].map(l=>f.getSubNodes(l,this.idTree)));this.allDevices=n.filter(l=>l.device_class).map(l=>l.device_class),this.devices=a.uniq(this.allDevices).sort();const e=1===this.devices.length?this.devices[0]:this.getIncludedCustomValue(this.controls.device,this.devices);this.silentSet(this.controls.device,e),this.onDeviceChange(e)}onDeviceChange(l=this.controls.device.value){this.deviceCount=""===l?this.allDevices.length:this.allDevices.filter(n=>n===l).length}}var g=e("0+/T"),p=e("a96k"),h=e("oxzT"),v=e("QFaf"),b=e("1Ni5"),C=e("PhyI"),R=e("kvvV"),I=e("Fgil"),E=e("aexS"),N=e("aXbf"),V=e("kn/O"),y=e("2EZI");class w extends f{constructor(l,n,e,i,t,a){super(),this.formBuilder=l,this.bsModalRef=n,this.taskWrapper=e,this.crushRuleService=i,this.i18n=t,this.actionLabels=a,this.submitAction=new u.EventEmitter,this.tooltips=this.crushRuleService.formTooltips,this.action=this.actionLabels.CREATE,this.resource=this.i18n("Crush Rule"),this.createForm()}createForm(){this.form=this.formBuilder.group({name:["",[t.B.required,t.B.pattern("[A-Za-z0-9_-]+"),b.a.custom("uniqueName",l=>this.names&&-1!==this.names.indexOf(l))]],root:null,failure_domain:"",device_class:""})}ngOnInit(){this.crushRuleService.getInfo().subscribe(({names:l,nodes:n})=>{this.initCrushNodeSelection(n,this.form.get("root"),this.form.get("failure_domain"),this.form.get("device_class")),this.names=l})}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l=a.cloneDeep(this.form.value);l.root=l.root.name,""===l.device_class&&delete l.device_class,this.taskWrapper.wrapTaskAroundCall({task:new R.a("crushRule/create",l),call:this.crushRuleService.create(l)}).subscribe(void 0,()=>{this.form.setErrors({cdSubmitButton:!0})},()=>{this.bsModalRef.hide(),this.submitAction.emit(l)})}}class T{}class _ extends f{constructor(l,n,e,i,t,a){super(),this.formBuilder=l,this.bsModalRef=n,this.taskWrapper=e,this.ecpService=i,this.i18n=t,this.actionLabels=a,this.submitAction=new u.EventEmitter,this.tooltips=this.ecpService.formTooltips,this.PLUGIN={LRC:"lrc",SHEC:"shec",JERASURE:"jerasure",ISA:"isa"},this.plugin=this.PLUGIN.JERASURE,this.action=this.actionLabels.CREATE,this.resource=this.i18n("EC Profile"),this.createForm(),this.setJerasureDefaults()}createForm(){this.form=this.formBuilder.group({name:[null,[t.B.required,t.B.pattern("[A-Za-z0-9_-]+"),b.a.custom("uniqueName",l=>this.names&&-1!==this.names.indexOf(l))]],plugin:[this.PLUGIN.JERASURE,[t.B.required]],k:[4,[t.B.required,t.B.min(2),b.a.custom("max",()=>this.baseValueValidation(!0)),b.a.custom("unequal",l=>this.lrcDataValidation(l)),b.a.custom("kLowerM",l=>this.shecDataValidation(l))]],m:[2,[t.B.required,t.B.min(1),b.a.custom("max",()=>this.baseValueValidation())]],crushFailureDomain:"",crushRoot:null,crushDeviceClass:"",directory:"",technique:"reed_sol_van",packetSize:[2048,[t.B.min(1)]],l:[3,[t.B.required,t.B.min(1),b.a.custom("unequal",l=>this.lrcLocalityValidation(l))]],crushLocality:"",c:[2,[t.B.required,t.B.min(1),b.a.custom("cGreaterM",l=>this.shecDurabilityValidation(l))]]}),this.form.get("k").valueChanges.subscribe(()=>this.updateValidityOnChange(["m","l"])),this.form.get("m").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","l","c"])),this.form.get("l").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","m"])),this.form.get("plugin").valueChanges.subscribe(l=>this.onPluginChange(l))}baseValueValidation(l=!1){return this.validValidation(()=>this.getKMSum()>this.deviceCount&&this.form.getValue("k")>this.form.getValue("m")===l)}validValidation(l,n){return!((!this.form||n)&&this.plugin!==n)&&l()}getKMSum(){return this.form.getValue("k")+this.form.getValue("m")}lrcDataValidation(l){return this.validValidation(()=>{const n=this.form.getValue("m"),e=this.form.getValue("l"),u=l+n;return this.lrcMultiK=l/(u/e),l%(u/e)!=0},"lrc")}shecDataValidation(l){return this.validValidation(()=>this.form.getValue("m")>l,"shec")}lrcLocalityValidation(l){return this.validValidation(()=>{const n=this.getKMSum();return this.lrcGroups=l>0?n/l:0,l>0&&n%l!=0},"lrc")}shecDurabilityValidation(l){return this.validValidation(()=>{const n=this.form.getValue("m");return l>n},"shec")}updateValidityOnChange(l){l.forEach(l=>this.form.get(l).updateValueAndValidity({emitEvent:!1}))}onPluginChange(l){this.plugin=l,l===this.PLUGIN.JERASURE?this.setJerasureDefaults():l===this.PLUGIN.LRC?this.setLrcDefaults():l===this.PLUGIN.ISA?this.setIsaDefaults():l===this.PLUGIN.SHEC&&this.setShecDefaults(),this.updateValidityOnChange(["m"])}setJerasureDefaults(){this.setDefaults({k:4,m:2}),this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liberation","blaum_roth","liber8tion"]}setLrcDefaults(){this.setDefaults({k:4,m:2,l:3})}setIsaDefaults(){this.setDefaults({k:7,m:3}),this.techniques=["reed_sol_van","cauchy"]}setShecDefaults(){this.setDefaults({k:4,m:3,c:2})}setDefaults(l){Object.keys(l).forEach(n=>{const e=this.form.get(n),u=e.value;let i=e.pristine;"k"===n?i=[4,7].includes(u):"m"===n&&(i=[2,3].includes(u)),i&&this.form.get(n).setValue(l[n])})}ngOnInit(){this.ecpService.getInfo().subscribe(({plugins:l,names:n,directory:e,nodes:u})=>{this.initCrushNodeSelection(u,this.form.get("crushRoot"),this.form.get("crushFailureDomain"),this.form.get("crushDeviceClass")),this.plugins=l,this.names=n,this.form.silentSet("directory",e),this.preValidateNumericInputFields()})}preValidateNumericInputFields(){const l=["k","m","l","c"].map(l=>this.form.get(l));l.forEach(l=>{l.markAsTouched(),l.markAsDirty()}),l[1].updateValueAndValidity()}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l=this.createJson();this.taskWrapper.wrapTaskAroundCall({task:new R.a("ecp/create",{name:l.name}),call:this.ecpService.create(l)}).subscribe(void 0,()=>{this.form.setErrors({cdSubmitButton:!0})},()=>{this.bsModalRef.hide(),this.submitAction.emit(l)})}createJson(){const l={technique:[this.PLUGIN.ISA,this.PLUGIN.JERASURE],packetSize:[this.PLUGIN.JERASURE],l:[this.PLUGIN.LRC],crushLocality:[this.PLUGIN.LRC],c:[this.PLUGIN.SHEC]},n=new T,e=this.form.getValue("plugin");return Object.keys(this.form.controls).filter(n=>{const u=l[n],i=this.form.getValue(n);return(u&&u.includes(e)||!u)&&i&&""!==i}).forEach(l=>{this.extendJson(l,n)}),n}extendJson(l,n){const e=this.form.getValue(l);n[{crushFailureDomain:"crush-failure-domain",crushRoot:"crush-root",crushDeviceClass:"crush-device-class",packetSize:"packetsize",crushLocality:"crush-locality"}[l]||l]="crushRoot"===l?e.name:e}}var S=e("DNAf");class D{constructor(l){this.erasureInfo=!1,this.crushInfo=!1,this.pgs=1,this.poolTypes=["erasure","replicated"],this.applications={selected:[],default:["cephfs","rbd","rgw"],available:[],validators:[t.B.pattern("[A-Za-z0-9_]+"),t.B.maxLength(128)],messages:new S.a({empty:l("No applications added"),selectionLimit:{text:l("Applications limit reached"),tooltip:l("A pool can only have up to four applications definitions.")},customValidations:{pattern:l("Allowed characters '_a-zA-Z0-9'"),maxlength:l("Maximum length is 128 characters")},filter:l("Filter or add applications"),add:l("Add application")},l)}}}class k{constructor(l,n,e,t,a,o,s,r,d,c,m,f,g){this.dimlessBinaryPipe=l,this.route=n,this.router=e,this.modalService=t,this.poolService=a,this.authStorageService=o,this.formatter=s,this.bsModalService=r,this.taskWrapper=d,this.ecpService=c,this.crushRuleService=m,this.i18n=f,this.actionLabels=g,this.editing=!1,this.isReplicated=!1,this.isErasure=!1,this.data=new D(this.i18n),this.externalPgChange=!1,this.current={rules:[]},this.initializeConfigData=new u.EventEmitter,this.currentConfigurationValues={},this.icons=h.a,this.crushUsage=void 0,this.ecpUsage=void 0,this.editing=this.router.url.startsWith("/pool/"+i.e.EDIT),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource=this.i18n("pool"),this.authenticate(),this.createForm()}authenticate(){this.permission=this.authStorageService.getPermissions().pool,(!this.permission.read||!this.permission.update&&this.editing||!this.permission.create&&!this.editing)&&this.router.navigate(["/404"])}createForm(){const l=new v.a({mode:new t.i("none"),algorithm:new t.i(""),minBlobSize:new t.i("",{updateOn:"blur"}),maxBlobSize:new t.i("",{updateOn:"blur"}),ratio:new t.i("",{updateOn:"blur"})});this.form=new v.a({name:new t.i("",{validators:[t.B.pattern(/^[.A-Za-z0-9_/-]+$/),t.B.required,b.a.custom("rbdPool",()=>this.form&&this.form.getValue("name").includes("/")&&this.data&&-1!==this.data.applications.selected.indexOf("rbd"))]}),poolType:new t.i("",{validators:[t.B.required]}),crushRule:new t.i(null,{validators:[b.a.custom("tooFewOsds",l=>this.info&&l&&this.info.osd_count<l.min_size),b.a.custom("required",l=>this.isReplicated&&this.info.crush_rules_replicated.length>0&&!l)]}),size:new t.i("",{updateOn:"blur"}),erasureProfile:new t.i(null),pgNum:new t.i("",{validators:[t.B.required,t.B.min(1)]}),pgAutoscaleMode:new t.i(null),ecOverwrites:new t.i(!1),compression:l,max_bytes:new t.i(""),max_objects:new t.i(0,{validators:[t.B.min(0)]})},[b.a.custom("form",()=>null)])}ngOnInit(){this.poolService.getInfo().subscribe(l=>{this.initInfo(l),this.editing?this.initEditMode():this.setAvailableApps(),this.listenToChanges(),this.setComplexValidators()})}initInfo(l){this.pgAutoscaleModes=l.pg_autoscale_modes,this.form.silentSet("pgAutoscaleMode",l.pg_autoscale_default_mode),this.form.silentSet("algorithm",l.bluestore_compression_algorithm),this.info=l,this.initEcp(l.erasure_code_profiles)}initEcp(l){this.setListControlStatus("erasureProfile",l),this.ecProfiles=l}setListControlStatus(l,n){const e=this.form.get(l),u=e.value;1!==n.length||u&&a.isEqual(u,n[0])?0===n.length&&u&&e.setValue(null):e.setValue(n[0]),n.length<=1?e.enabled&&e.disable():e.disabled&&e.enable()}initEditMode(){this.disableForEdit(),this.routeParamsSubscribe=this.route.params.subscribe(l=>this.poolService.get(l.name).subscribe(l=>{this.data.pool=l,this.initEditFormData(l)}))}disableForEdit(){["poolType","crushRule","size","erasureProfile","ecOverwrites"].forEach(l=>this.form.get(l).disable())}initEditFormData(l){this.initializeConfigData.emit({initialData:l.configuration,sourceType:C.a.pool}),this.poolTypeChange(l.type);const n=this.info.crush_rules_replicated.concat(this.info.crush_rules_erasure),e={name:l.pool_name,poolType:l.type,crushRule:n.find(n=>n.rule_name===l.crush_rule),size:l.size,erasureProfile:this.ecProfiles.find(n=>n.name===l.erasure_code_profile),pgAutoscaleMode:l.pg_autoscale_mode,pgNum:l.pg_num,ecOverwrites:l.flags_names.includes("ec_overwrites"),mode:l.options.compression_mode,algorithm:l.options.compression_algorithm,minBlobSize:this.dimlessBinaryPipe.transform(l.options.compression_min_blob_size),maxBlobSize:this.dimlessBinaryPipe.transform(l.options.compression_max_blob_size),ratio:l.options.compression_required_ratio,max_bytes:this.dimlessBinaryPipe.transform(l.quota_max_bytes),max_objects:l.quota_max_objects};Object.keys(e).forEach(l=>{const n=e[l];a.isUndefined(n)||""===n||this.form.silentSet(l,n)}),this.data.pgs=this.form.getValue("pgNum"),this.setAvailableApps(this.data.applications.default.concat(l.application_metadata)),this.data.applications.selected=l.application_metadata}setAvailableApps(l=this.data.applications.default){this.data.applications.available=a.uniq(l.sort()).map(l=>new p.a(!1,l,""))}listenToChanges(){this.listenToChangesDuringAddEdit(),this.editing||this.listenToChangesDuringAdd()}listenToChangesDuringAddEdit(){this.form.get("pgNum").valueChanges.subscribe(l=>{const n=l-this.data.pgs;1===Math.abs(n)&&2!==l?this.doPgPowerJump(n):this.data.pgs=l})}doPgPowerJump(l){const n=this.calculatePgPower()+l;this.setPgs(-1===l?Math.round(n):Math.floor(n))}calculatePgPower(l=this.form.getValue("pgNum")){return Math.log(l)/Math.log(2)}setPgs(l){const n=Math.pow(2,l<0?0:l);this.data.pgs=n,this.form.silentSet("pgNum",n)}listenToChangesDuringAdd(){this.form.get("poolType").valueChanges.subscribe(l=>{this.poolTypeChange(l)}),this.form.get("crushRule").valueChanges.subscribe(l=>{this.crushDeletionBtn&&this.crushDeletionBtn.isOpen&&this.crushDeletionBtn.hide(),l&&(this.setCorrectMaxSize(l),this.crushRuleIsUsedBy(l.rule_name),this.replicatedRuleChange(),this.pgCalc())}),this.form.get("size").valueChanges.subscribe(()=>{this.pgCalc()}),this.form.get("erasureProfile").valueChanges.subscribe(l=>{this.ecpDeletionBtn&&this.ecpDeletionBtn.isOpen&&this.ecpDeletionBtn.hide(),l&&(this.ecpIsUsedBy(l.name),this.pgCalc())}),this.form.get("mode").valueChanges.subscribe(()=>{["minBlobSize","maxBlobSize","ratio"].forEach(l=>{this.form.get(l).updateValueAndValidity({emitEvent:!1})})}),this.form.get("minBlobSize").valueChanges.subscribe(()=>{this.form.get("maxBlobSize").updateValueAndValidity({emitEvent:!1})}),this.form.get("maxBlobSize").valueChanges.subscribe(()=>{this.form.get("minBlobSize").updateValueAndValidity({emitEvent:!1})})}poolTypeChange(l){if("replicated"===l?this.setTypeBooleans(!0,!1):this.setTypeBooleans(!1,"erasure"===l),!l||!this.info)return void(this.current.rules=[]);const n=this.info["crush_rules_"+l]||[];this.current.rules=n,this.editing||(this.isReplicated&&this.setListControlStatus("crushRule",n),this.replicatedRuleChange(),this.pgCalc())}setTypeBooleans(l,n){this.isReplicated=l,this.isErasure=n}replicatedRuleChange(){if(!this.isReplicated)return;const l=this.form.get("size");let n=this.form.getValue("size")||3;const e=this.getMinSize(),u=this.getMaxSize();n<e?n=e:n>u&&(n=u),n!==l.value&&this.form.silentSet("size",n)}getMinSize(){if(!this.info||this.info.osd_count<1)return 0;const l=this.form.getValue("crushRule");return l?l.min_size:1}getMaxSize(){const l=this.form.getValue("crushRule");return this.info?l?l.usable_size:Math.min(this.info.osd_count,3):0}pgCalc(){const l=this.form.getValue("poolType");if(!this.info||this.form.get("pgNum").dirty||!l)return;const n=100*this.info.osd_count,e=this.isReplicated?this.replicatedPgCalc(n):this.erasurePgCalc(n);if(!e)return;const u=this.data.pgs;this.alignPgs(e),this.externalPgChange||(this.externalPgChange=u!==this.data.pgs)}setCorrectMaxSize(l=this.form.getValue("crushRule")){if(!l)return;const n=f.searchFailureDomains(this.info.nodes,l.steps[0].item_name)[l.steps[1].type];l.usable_size=Math.min(n?n.length:l.max_size,l.max_size)}replicatedPgCalc(l){const n=this.form.get("size"),e=n.value;return n.valid&&e>0?l/e:0}erasurePgCalc(l){const n=this.form.get("erasureProfile"),e=n.value;return(n.valid||n.disabled)&&e?l/(e.k+e.m):0}alignPgs(l=this.form.getValue("pgNum")){this.setPgs(Math.round(this.calculatePgPower(l<1?1:l)))}setComplexValidators(){this.editing?this.form.get("name").setValidators([this.form.get("name").validator,b.a.custom("uniqueName",l=>this.data.pool&&this.info&&-1!==this.info.pool_names.indexOf(l)&&this.info.pool_names.indexOf(l)!==this.info.pool_names.indexOf(this.data.pool.pool_name))]):(b.a.validateIf(this.form.get("size"),()=>this.isReplicated,[b.a.custom("min",l=>this.form.getValue("size")&&l<this.getMinSize()),b.a.custom("max",l=>this.form.getValue("size")&&this.getMaxSize()<l)]),this.form.get("name").setValidators([this.form.get("name").validator,b.a.custom("uniqueName",l=>this.info&&-1!==this.info.pool_names.indexOf(l))])),this.setCompressionValidators()}setCompressionValidators(){b.a.validateIf(this.form.get("minBlobSize"),()=>this.hasCompressionEnabled(),[t.B.min(0),b.a.custom("maximum",l=>this.oddBlobSize(l,this.form.getValue("maxBlobSize")))]),b.a.validateIf(this.form.get("maxBlobSize"),()=>this.hasCompressionEnabled(),[t.B.min(0),b.a.custom("minimum",l=>this.oddBlobSize(this.form.getValue("minBlobSize"),l))]),b.a.validateIf(this.form.get("ratio"),()=>this.hasCompressionEnabled(),[t.B.min(0),t.B.max(1)])}oddBlobSize(l,n){const e=this.formatter.toBytes(l),u=this.formatter.toBytes(n);return Boolean(e&&u&&e>=u)}hasCompressionEnabled(){return this.form.getValue("mode")&&"none"!==this.form.get("mode").value.toLowerCase()}describeCrushStep(l){return[l.op.replace("_"," "),l.item_name||"",l.type?l.num+" type "+l.type:""].join(" ")}addErasureCodeProfile(){this.addModal(_,l=>this.reloadECPs(l))}addModal(l,n){this.hideOpenTooltips(),this.bsModalService.show(l).content.submitAction.subscribe(l=>{n(l.name)})}hideOpenTooltips(){const l=l=>l&&l.isOpen&&l.hide();l(this.ecpDeletionBtn),l(this.crushDeletionBtn)}reloadECPs(l){this.reloadList({newItemName:l,getInfo:()=>this.ecpService.list(),initInfo:l=>this.initEcp(l),findNewItem:()=>this.ecProfiles.find(n=>n.name===l),controlName:"erasureProfile"})}reloadList({newItemName:l,getInfo:n,initInfo:e,findNewItem:u,controlName:i}){this.modalSubscription&&this.modalSubscription.unsubscribe(),n().subscribe(n=>{if(e(n),!l)return;const t=u();t&&this.form.get(i).setValue(t)})}deleteErasureCodeProfile(){this.deletionModal({value:this.form.getValue("erasureProfile"),usage:this.ecpUsage,deletionBtn:this.ecpDeletionBtn,dataName:"erasureInfo",getTabs:()=>this.ecpInfoTabs,tabPosition:1,nameAttribute:"name",itemDescription:this.i18n("erasure code profile"),reloadFn:()=>this.reloadECPs(),deleteFn:l=>this.ecpService.delete(l),taskName:"ecp/delete"})}deletionModal({value:l,usage:n,deletionBtn:e,dataName:u,getTabs:i,tabPosition:t,nameAttribute:a,itemDescription:o,reloadFn:s,deleteFn:r,taskName:d}){if(!l)return;if(n)return e.toggle(),this.data[u]=!0,void setTimeout(()=>{const l=i();l&&(l.tabs[t].active=!0)},50);const c=l[a];this.modalService.show(g.a,{initialState:{itemDescription:o,itemNames:[c],submitActionObservable:()=>{const l=r(c);return l.subscribe(()=>s()),this.taskWrapper.wrapTaskAroundCall({task:new R.a(d,{name:c}),call:l})}}})}addCrushRule(){this.addModal(w,l=>this.reloadCrushRules(l))}reloadCrushRules(l){this.reloadList({newItemName:l,getInfo:()=>this.poolService.getInfo(),initInfo:l=>{this.initInfo(l),this.poolTypeChange("replicated")},findNewItem:()=>this.info.crush_rules_replicated.find(n=>n.rule_name===l),controlName:"crushRule"})}deleteCrushRule(){this.deletionModal({value:this.form.getValue("crushRule"),usage:this.crushUsage,deletionBtn:this.crushDeletionBtn,dataName:"crushInfo",getTabs:()=>this.crushInfoTabs,tabPosition:2,nameAttribute:"rule_name",itemDescription:this.i18n("crush rule"),reloadFn:()=>this.reloadCrushRules(),deleteFn:l=>this.crushRuleService.delete(l),taskName:"crushRule/delete"})}crushRuleIsUsedBy(l){this.crushUsage=l?this.info.used_rules[l]:void 0}ecpIsUsedBy(l){this.ecpUsage=l?this.info.used_profiles[l]:void 0}submit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const l={pool:this.form.getValue("name")};this.assignFormFields(l,[{externalFieldName:"pool_type",formControlName:"poolType"},{externalFieldName:"pg_autoscale_mode",formControlName:"pgAutoscaleMode",editable:!0},{externalFieldName:"pg_num",formControlName:"pgNum",replaceFn:l=>"on"===this.form.getValue("pgAutoscaleMode")?1:l,editable:!0},this.isReplicated?{externalFieldName:"size",formControlName:"size"}:{externalFieldName:"erasure_code_profile",formControlName:"erasureProfile",attr:"name"},{externalFieldName:"rule_name",formControlName:"crushRule",replaceFn:l=>this.isReplicated?l&&l.rule_name:void 0},{externalFieldName:"quota_max_bytes",formControlName:"max_bytes",replaceFn:this.formatter.toBytes,editable:!0,resetValue:this.editing?0:void 0},{externalFieldName:"quota_max_objects",formControlName:"max_objects",editable:!0,resetValue:this.editing?0:void 0}]),this.info.is_all_bluestore&&(this.assignFormField(l,{externalFieldName:"flags",formControlName:"ecOverwrites",replaceFn:()=>this.isErasure?["ec_overwrites"]:void 0}),"none"!==this.form.getValue("mode")?this.assignFormFields(l,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:l=>this.hasCompressionEnabled()&&l},{externalFieldName:"compression_algorithm",formControlName:"algorithm",editable:!0},{externalFieldName:"compression_min_blob_size",formControlName:"minBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_max_blob_size",formControlName:"maxBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_required_ratio",formControlName:"ratio",editable:!0,resetValue:0}]):this.editing&&this.assignFormFields(l,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:()=>"unset"},{externalFieldName:"srcpool",formControlName:"name",editable:!0,replaceFn:()=>this.data.pool.pool_name}]));const n=this.data.applications.selected;(n.length>0||this.editing)&&(l.application_metadata=n),this.isReplicated&&!a.isEmpty(this.currentConfigurationValues)&&(l.configuration=this.currentConfigurationValues),this.triggerApiTask(l)}assignFormFields(l,n){n.forEach(n=>this.assignFormField(l,n))}assignFormField(l,{externalFieldName:n,formControlName:e,attr:u,replaceFn:i,editable:t,resetValue:o}){if(this.editing&&(!t||this.form.get(e).pristine))return;const s=this.form.getValue(e);let r=i?i(s):u?a.get(s,u):s;if(!s||!r){if(!t||a.isUndefined(o))return;r=o}l[n]=r}triggerApiTask(l){this.taskWrapper.wrapTaskAroundCall({task:new R.a("pool/"+(this.editing?i.e.EDIT:i.e.CREATE),{pool_name:l.hasOwnProperty("srcpool")?l.srcpool:l.pool}),call:this.poolService[this.editing?i.e.UPDATE:i.e.CREATE](l)}).subscribe(void 0,l=>{a.isObject(l.error)&&"34"===l.error.code&&this.form.get("pgNum").setErrors({34:!0}),this.form.setErrors({cdSubmitButton:!0})},()=>this.router.navigate(["/pool"]))}appSelection(){this.form.get("name").updateValueAndValidity({emitEvent:!1,onlySelf:!0})}}var x=e("MuvH"),q=e("+fVR"),F=e("uIqm"),P=e("x38r"),A=e("yJti"),B=e("vCyI"),O=e("o4+5"),z=e("VTlA"),L=e("EgGo"),j=e("d+Og");class U{constructor(l){this.pool_name=l}}const M=new L.a("pool");class G extends q.a{constructor(l,n,e,u,i,t,o,s,r,d,c){super(),this.poolService=l,this.taskWrapper=n,this.authStorageService=e,this.taskListService=u,this.modalService=i,this.i18n=t,this.pgCategoryService=o,this.dimlessPipe=s,this.urlBuilder=r,this.configurationService=d,this.actionLabels=c,this.selection=new B.a,this.executingTasks=[],this.cacheTiers=[],this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:h.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:h.a.edit,routerLink:()=>this.urlBuilder.getEdit(encodeURIComponent(this.selection.first().pool_name)),name:this.actionLabels.EDIT},{permission:"delete",icon:h.a.destroy,click:()=>this.deletePoolModal(),name:this.actionLabels.DELETE,disable:this.getDisableDesc.bind(this)}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(l=>{if(a.has(l,"value")){const n=a.find(l.value,l=>"mon"===l.section)||{value:!1};this.monAllowPoolDelete="true"===n.value}})}ngOnInit(){const l=(l,n,e)=>a.get(n,l)>a.get(e,l)?1:-1;this.columns=[{prop:"pool_name",name:this.i18n("Name"),flexGrow:4,cellTransformation:P.a.executing},{prop:"type",name:this.i18n("Type"),flexGrow:2},{prop:"application_metadata",name:this.i18n("Applications"),flexGrow:3},{prop:"pg_status",name:this.i18n("PG Status"),flexGrow:3,cellClass:({row:l,column:n,value:e})=>this.getPgStatusCellClass(l,n,e)},{prop:"size",name:this.i18n("Replica Size"),flexGrow:2,cellClass:"text-right"},{prop:"last_change",name:this.i18n("Last Change"),flexGrow:2,cellClass:"text-right"},{prop:"erasure_code_profile",name:this.i18n("Erasure Coded Profile"),flexGrow:2},{prop:"crush_rule",name:this.i18n("Crush Ruleset"),flexGrow:3},{name:this.i18n("Usage"),prop:"usage",cellTemplate:this.poolUsageTpl,flexGrow:3},{prop:"stats.rd_bytes.rates",name:this.i18n("Read bytes"),comparator:(n,e,u,i)=>l("stats.rd_bytes.latest",u,i),cellTransformation:P.a.sparkline,flexGrow:3},{prop:"stats.wr_bytes.rates",name:this.i18n("Write bytes"),comparator:(n,e,u,i)=>l("stats.wr_bytes.latest",u,i),cellTransformation:P.a.sparkline,flexGrow:3},{prop:"stats.rd.rate",name:this.i18n("Read ops"),flexGrow:1,pipe:this.dimlessPipe,cellTransformation:P.a.perSecond},{prop:"stats.wr.rate",name:this.i18n("Write ops"),flexGrow:1,pipe:this.dimlessPipe,cellTransformation:P.a.perSecond}],this.taskListService.init(()=>this.poolService.getList(),void 0,l=>this.pools=this.transformPoolsData(l),()=>{this.table.reset(),this.viewCacheStatusList=[{status:A.a.ValueException}]},l=>l.name.startsWith("pool/"),(l,n)=>n.metadata.pool_name===l.pool_name,{default:l=>new U(l.pool_name)})}updateSelection(l){this.selection=l}deletePoolModal(){const l=this.selection.first().pool_name;this.modalRef=this.modalService.show(g.a,{initialState:{itemDescription:"Pool",itemNames:[l],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.a("pool/"+i.e.DELETE,{pool_name:l}),call:this.poolService.delete(l)})}})}getPgStatusCellClass(l,n,e){return{"text-right":!0,["pg-"+this.pgCategoryService.getTypeByStates(e)]:!0}}transformPoolsData(l){const n=["bytes_used","max_avail","avail_raw","percent_used","rd_bytes","wr_bytes","rd","wr"],e={latest:0,rate:0,rates:[]};return a.forEach(l,l=>{l.pg_status=this.transformPgStatus(l.pg_status);const u={};a.forEach(n,n=>{u[n]=l.stats&&l.stats[n]?l.stats[n]:e}),l.stats=u,l.usage=u.percent_used.latest,l.cdExecuting||l.pg_num+l.pg_placement_num===l.pg_num_target+l.pg_placement_num_target||(l.cdExecuting="Updating"),["rd_bytes","wr_bytes"].forEach(n=>{l.stats[n].rates=l.stats[n].rates.map(l=>l[1])}),l.cdIsBinary=!0}),l}transformPgStatus(l){const n=[];return a.forEach(l,(l,e)=>{n.push(`${l} ${e}`)}),n.join(", ")}getSelectionTiers(){if(void 0!==this.expandedRow){const l=this.expandedRow.tiers;this.cacheTiers=this.pools.filter(n=>l.includes(n.pool))}}getDisableDesc(){return!this.selection||!this.selection.hasSelection||!this.monAllowPoolDelete&&this.i18n("Pool deletion is disabled by the mon_allow_pool_delete configuration setting.")}setExpandedRow(l){super.setExpandedRow(l),this.getSelectionTiers()}}class ${}const K={breadcrumbs:i.a.CREATE},J={breadcrumbs:i.a.EDIT};class W{}var Z=e("iutN"),H=e("MdoF"),X=e("ES0t"),Y=e("Xg1U"),Q=e("z5nN"),ll=e("pMnS"),nl=e("EEJc"),el=e("PEr+"),ul=e("a40w"),il=e("hfeG"),tl=e("QUzE"),al=e("E7j4"),ol=e("xvu0"),sl=e("RIVN"),rl=e("nP0W"),dl=e("VBM6"),cl=e("atuK"),ml=e("JIi+"),fl=e("0BYw"),gl=e("3IYD"),pl=e("I4Qz"),hl=e("0rTx"),vl=e("lz+O"),bl=e("u2XS"),Cl=e("nhAp"),Rl=e("l7Jr"),Il=e("bUo2"),El=e("SVse"),Nl=e("8xTl"),Vl=e("ajRT"),yl=e("+gVj"),wl=e("mXUL"),Tl=e("IZUe"),_l=e("ANnk"),Sl=e("f/UV"),Dl=e("4HWh"),kl=e("p4Cf"),xl=e("gp3X"),ql=e("sb0X"),Fl=e("KVJa"),Pl=e("Z21x"),Al=e("LqlI"),Bl=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ol(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function zl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The name can only consist of alphanumeric characters, dashes and underscores."]))],null,null)}function Ll(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen erasure code profile name is already in use."]))],null,null)}function jl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Ul(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function Ml(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Gl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function $l(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function Kl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Jl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Wl(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),(l()(),u["ɵeld"](2,0,null,null,119,"cd-modal",[],null,null,null,nl.c,nl.b)),u["ɵdid"](3,49152,null,0,Vl.a,[],{modalRef:[0,"modalRef"]},null),(l()(),u["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),u["ɵted"](5,null,[""," ",""])),u["ɵppd"](6,1),u["ɵppd"](7,1),(l()(),u["ɵeld"](8,0,null,1,113,null,null,null,null,null,null,null)),(l()(),u["ɵeld"](9,0,null,null,112,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),u["ɵdid"](10,16384,null,0,t.G,[],null,null),u["ɵdid"](11,540672,[["frm",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](13,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](14,16384,null,0,yl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](15,0,null,null,98,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](16,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](17,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,1,{FormControlNames:1}),u["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),u["ɵeld"](20,0,null,0,3,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵeld"](21,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](23,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](24,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](25,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,28)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,28).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,28)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,28)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](26,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](27,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](28,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](30,671744,[[1,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](32,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](33,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ol)),u["ɵdid"](35,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,zl)),u["ɵdid"](37,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ll)),u["ɵdid"](39,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](40,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](41,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,3,{FormControlNames:1}),u["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),u["ɵeld"](44,0,null,0,5,"label",[["class","cd-col-form-label"],["for","root"]],null,null,null,null,null)),(l()(),u["ɵeld"](45,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Root"])),(l()(),u["ɵeld"](47,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](48,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](49,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](50,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](51,0,null,null,11,"select",[["class","form-control custom-select"],["formControlName","root"],["id","root"],["name","root"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,53).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,53).onTouched()&&i),i}),null,null)),u["ɵdid"](52,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](53,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](55,671744,[[3,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](57,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](58,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,jl)),u["ɵdid"](60,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ul)),u["ɵdid"](62,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ml)),u["ɵdid"](64,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](65,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](66,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](69,0,null,0,5,"label",[["class","cd-col-form-label"],["for","failure_domain"]],null,null,null,null,null)),(l()(),u["ɵeld"](70,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Failure domain type"])),(l()(),u["ɵeld"](72,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](73,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](74,0,null,null,0,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵeld"](75,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](76,0,null,null,11,"select",[["class","form-control custom-select"],["formControlName","failure_domain"],["id","failure_domain"],["name","failure_domain"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,78).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,78).onTouched()&&i),i}),null,null)),u["ɵdid"](77,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](78,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](80,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](82,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](83,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Gl)),u["ɵdid"](85,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,$l)),u["ɵdid"](87,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Kl)),u["ɵdid"](89,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](90,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](91,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](94,0,null,0,4,"label",[["class","cd-col-form-label"],["for","device_class"]],null,null,null,null,null)),(l()(),u["ɵeld"](95,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Device class"])),(l()(),u["ɵeld"](97,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](98,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](99,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](100,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","device_class"],["id","device_class"],["name","device_class"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,102).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,102).onTouched()&&i),i}),null,null)),u["ɵdid"](101,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](102,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](104,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](106,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](107,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](108,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](109,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](110,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Let Ceph decide"])),(l()(),u["ɵand"](16777216,null,null,1,null,Jl)),u["ɵdid"](113,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](114,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](115,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.onSubmit()&&u),u}),xl.b,xl.a)),u["ɵdid"](116,114688,null,0,ql.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](117,0,[""," ",""])),u["ɵppd"](118,1),u["ɵppd"](119,1),(l()(),u["ɵeld"](120,0,null,null,1,"cd-back-button",[],null,null,null,Fl.b,Fl.a)),u["ɵdid"](121,49152,null,0,Pl.a,[El.Location,i.b],{back:[0,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.bsModalRef),l(n,11,0,e.form),l(n,14,0,e.form),l(n,17,0),l(n,26,0,""),l(n,30,0,"name"),l(n,33,0,"name"),l(n,35,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,37,0,e.form.showError("name",u["ɵnov"](n,11),"pattern")),l(n,39,0,e.form.showError("name",u["ɵnov"](n,11),"uniqueName")),l(n,41,0),l(n,48,0,e.tooltips.root),l(n,55,0,"root"),l(n,58,0,"root"),l(n,60,0,!e.buckets),l(n,62,0,e.buckets),l(n,64,0,e.form.showError("root",u["ɵnov"](n,11),"required")),l(n,66,0),l(n,73,0,e.tooltips.failure_domain),l(n,80,0,"failure_domain"),l(n,83,0,"failure_domain"),l(n,85,0,!e.failureDomains),l(n,87,0,e.failureDomainKeys),l(n,89,0,e.form.showError("failure_domain",u["ɵnov"](n,11),"required")),l(n,91,0),l(n,98,0,e.tooltips.device_class),l(n,104,0,"device_class"),l(n,107,0,"device_class"),l(n,109,0,""),l(n,110,0,""),l(n,113,0,e.devices),l(n,116,0,u["ɵnov"](n,11)),l(n,121,0,e.bsModalRef.hide)}),(function(l,n){var e=n.component,i=u["ɵunv"](n,5,0,l(n,6,0,u["ɵnov"](n,0),e.action)),t=u["ɵunv"](n,5,1,l(n,7,0,u["ɵnov"](n,1),e.resource));l(n,5,0,i,t),l(n,9,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending),l(n,16,0,u["ɵnov"](n,17).hasErrors,u["ɵnov"](n,17).hasSuccess),l(n,25,0,u["ɵnov"](n,32).ngClassUntouched,u["ɵnov"](n,32).ngClassTouched,u["ɵnov"](n,32).ngClassPristine,u["ɵnov"](n,32).ngClassDirty,u["ɵnov"](n,32).ngClassValid,u["ɵnov"](n,32).ngClassInvalid,u["ɵnov"](n,32).ngClassPending,u["ɵnov"](n,33).validClass,u["ɵnov"](n,33).invalidClass),l(n,40,0,u["ɵnov"](n,41).hasErrors,u["ɵnov"](n,41).hasSuccess),l(n,51,0,u["ɵnov"](n,57).ngClassUntouched,u["ɵnov"](n,57).ngClassTouched,u["ɵnov"](n,57).ngClassPristine,u["ɵnov"](n,57).ngClassDirty,u["ɵnov"](n,57).ngClassValid,u["ɵnov"](n,57).ngClassInvalid,u["ɵnov"](n,57).ngClassPending,u["ɵnov"](n,58).validClass,u["ɵnov"](n,58).invalidClass),l(n,65,0,u["ɵnov"](n,66).hasErrors,u["ɵnov"](n,66).hasSuccess),l(n,76,0,u["ɵnov"](n,82).ngClassUntouched,u["ɵnov"](n,82).ngClassTouched,u["ɵnov"](n,82).ngClassPristine,u["ɵnov"](n,82).ngClassDirty,u["ɵnov"](n,82).ngClassValid,u["ɵnov"](n,82).ngClassInvalid,u["ɵnov"](n,82).ngClassPending,u["ɵnov"](n,83).validClass,u["ɵnov"](n,83).invalidClass),l(n,90,0,u["ɵnov"](n,91).hasErrors,u["ɵnov"](n,91).hasSuccess),l(n,100,0,u["ɵnov"](n,106).ngClassUntouched,u["ɵnov"](n,106).ngClassTouched,u["ɵnov"](n,106).ngClassPristine,u["ɵnov"](n,106).ngClassDirty,u["ɵnov"](n,106).ngClassValid,u["ɵnov"](n,106).ngClassInvalid,u["ɵnov"](n,106).ngClassPending,u["ɵnov"](n,107).validClass,u["ɵnov"](n,107).invalidClass);var a=u["ɵunv"](n,117,0,l(n,118,0,u["ɵnov"](n,0),e.action)),o=u["ɵunv"](n,117,1,l(n,119,0,u["ɵnov"](n,1),e.resource));l(n,117,0,a,o)}))}function Zl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-crush-rule-form-modal",[],null,null,null,Wl,Bl)),u["ɵdid"](1,114688,null,0,w,[y.a,Al.a,V.a,d,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Hl=u["ɵccf"]("cd-crush-rule-form-modal",w,Zl,{},{submitAction:"submitAction"},[]),Xl=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Yl(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Ql(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The name can only consist of alphanumeric characters, dashes and underscores."]))],null,null)}function ln(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen erasure code profile name is already in use."]))],null,null)}function nn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function en(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function un(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function tn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function an(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 2."]))],null,null)}function on(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Chunks (k+m) have exceeded the available OSDs of ","."]))],null,(function(l,n){l(n,1,0,n.component.deviceCount)}))}function sn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["For an equal distribution k has to be a multiple of (k+m)/l."]))],null,null)}function rn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["K has to be equal to or greater than m in order to recover data correctly through c."]))],null,null)}function dn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Distribution factor: ",""]))],null,(function(l,n){l(n,1,0,n.component.lrcMultiK)}))}function cn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function mn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function fn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["Chunks (k+m) have exceeded the available OSDs of ","."]))],null,(function(l,n){l(n,1,0,n.component.deviceCount)}))}function gn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function pn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["C has to be equal to or lower than m as m defines the amount of chunks that can be used."]))],null,null)}function hn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,9,{FormControlNames:1}),u["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","c"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Durability estimator (c)"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](8,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,8,"input",[["class","form-control"],["formControlName","c"],["id","c"],["name","c"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,12)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,12)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,12)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,13).onTouched()&&i),i}),null,null)),u["ɵdid"](11,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](12,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](13,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](15,671744,[[9,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](17,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](18,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,gn)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,pn)),u["ɵdid"](22,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.shec.c),l(n,15,0,"c"),l(n,18,0,"c"),l(n,20,0,e.form.showError("c",u["ɵnov"](n.parent,11),"min")),l(n,22,0,e.form.showError("c",u["ɵnov"](n.parent,11),"cGreaterM"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,17).ngClassUntouched,u["ɵnov"](n,17).ngClassTouched,u["ɵnov"](n,17).ngClassPristine,u["ɵnov"](n,17).ngClassDirty,u["ɵnov"](n,17).ngClassValid,u["ɵnov"](n,17).ngClassInvalid,u["ɵnov"](n,17).ngClassPending,u["ɵnov"](n,18).validClass,u["ɵnov"](n,18).invalidClass)}))}function vn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function bn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function Cn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Can't split up chunks (k+m) correctly with the current locality."]))],null,null)}function Rn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,11,{FormControlNames:1}),u["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","l"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Locality (l)"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](8,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,8,"input",[["class","form-control"],["formControlName","l"],["id","l"],["name","l"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,12)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,12)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,12)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,13).onTouched()&&i),i}),null,null)),u["ɵdid"](11,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](12,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](13,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](15,671744,[[11,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](17,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](18,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,vn)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,bn)),u["ɵdid"](22,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Cn)),u["ɵdid"](24,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](25,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](26,null,["Locality groups: ",""]))],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.lrc.l),l(n,15,0,"l"),l(n,18,0,"l"),l(n,20,0,e.form.showError("l",u["ɵnov"](n.parent,11),"required")),l(n,22,0,e.form.showError("l",u["ɵnov"](n.parent,11),"min")),l(n,24,0,e.form.showError("l",u["ɵnov"](n.parent,11),"unequal"))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,17).ngClassUntouched,u["ɵnov"](n,17).ngClassTouched,u["ɵnov"](n,17).ngClassPristine,u["ɵnov"](n,17).ngClassDirty,u["ɵnov"](n,17).ngClassValid,u["ɵnov"](n,17).ngClassInvalid,u["ɵnov"](n,17).ngClassPending,u["ɵnov"](n,18).validClass,u["ɵnov"](n,18).invalidClass),l(n,26,0,e.lrcGroups)}))}function In(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function En(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function Nn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function Vn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["None"]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function yn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," ( "," ) "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit,n.component.failureDomains[n.context.$implicit].length)}))}function wn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,15,{FormControlNames:1}),u["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushLocality"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush Locality"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](8,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","crushLocality"],["id","crushLocality"],["name","crushLocality"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),i}),null,null)),u["ɵdid"](11,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](12,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](14,671744,[[15,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Nn)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Vn)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,yn)),u["ɵdid"](23,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.lrc.crushLocality),l(n,14,0,"crushLocality"),l(n,17,0,"crushLocality"),l(n,19,0,!e.failureDomains),l(n,21,0,e.failureDomainKeys.length>0),l(n,23,0,e.failureDomainKeys)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass)}))}function Tn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function _n(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,17,{FormControlNames:1}),u["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","technique"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Technique"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](8,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","technique"],["id","technique"],["name","technique"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,12).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),i}),null,null)),u["ɵdid"](11,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](12,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](14,671744,[[17,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Tn)),u["ɵdid"](19,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins[e.plugin].technique),l(n,14,0,"technique"),l(n,17,0,"technique"),l(n,19,0,e.techniques)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass)}))}function Sn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Must be equal to or greater than 1."]))],null,null)}function Dn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,19,{FormControlNames:1}),u["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","packetSize"]],null,null,null,null,null)),(l()(),u["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Packetsize"])),(l()(),u["ɵeld"](7,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](8,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](9,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](10,0,null,null,8,"input",[["class","form-control"],["formControlName","packetSize"],["id","packetSize"],["name","packetSize"],["placeholder","Packetsize..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,12)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,12).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,12)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,12)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,13).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,13).onTouched()&&i),i}),null,null)),u["ɵdid"](11,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](12,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](13,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](15,671744,[[19,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](17,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](18,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Sn)),u["ɵdid"](20,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,8,0,e.tooltips.plugins.jerasure.packetSize),l(n,15,0,"packetSize"),l(n,18,0,"packetSize"),l(n,20,0,e.form.showError("packetSize",u["ɵnov"](n.parent,11),"min"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,10,0,u["ɵnov"](n,17).ngClassUntouched,u["ɵnov"](n,17).ngClassTouched,u["ɵnov"](n,17).ngClassPristine,u["ɵnov"](n,17).ngClassDirty,u["ɵnov"](n,17).ngClassValid,u["ɵnov"](n,17).ngClassInvalid,u["ɵnov"](n,17).ngClassPending,u["ɵnov"](n,18).validClass,u["ɵnov"](n,18).invalidClass)}))}function kn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function xn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function qn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Fn(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),(l()(),u["ɵeld"](2,0,null,null,222,"cd-modal",[],null,null,null,nl.c,nl.b)),u["ɵdid"](3,49152,null,0,Vl.a,[],{modalRef:[0,"modalRef"]},null),(l()(),u["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),u["ɵted"](5,null,[""," ",""])),u["ɵppd"](6,1),u["ɵppd"](7,1),(l()(),u["ɵeld"](8,0,null,1,216,null,null,null,null,null,null,null)),(l()(),u["ɵeld"](9,0,null,null,215,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,11).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,11).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,14).onSubmit()&&i),i}),null,null)),u["ɵdid"](10,16384,null,0,t.G,[],null,null),u["ɵdid"](11,540672,[["frm",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](13,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](14,16384,null,0,yl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](15,0,null,null,201,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](16,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](17,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,1,{FormControlNames:1}),u["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),u["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](22,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](23,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,26)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,26).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,26)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,26)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](24,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](25,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](26,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](28,671744,[[1,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](30,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](31,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Yl)),u["ɵdid"](33,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ql)),u["ɵdid"](35,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ln)),u["ɵdid"](37,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](38,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](39,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,3,{FormControlNames:1}),u["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),u["ɵeld"](42,0,null,0,4,"label",[["class","cd-col-form-label"],["for","plugin"]],null,null,null,null,null)),(l()(),u["ɵeld"](43,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Plugin"])),(l()(),u["ɵeld"](45,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](46,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](47,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](48,0,null,null,11,"select",[["class","form-control custom-select"],["formControlName","plugin"],["id","plugin"],["name","plugin"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,50).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,50).onTouched()&&i),i}),null,null)),u["ɵdid"](49,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](50,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](52,671744,[[3,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](54,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](55,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,nn)),u["ɵdid"](57,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,en)),u["ɵdid"](59,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,un)),u["ɵdid"](61,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](62,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](63,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](66,0,null,0,4,"label",[["class","cd-col-form-label"],["for","k"]],null,null,null,null,null)),(l()(),u["ɵeld"](67,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Data chunks (k)"])),(l()(),u["ɵeld"](69,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](70,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](71,0,null,0,21,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](72,0,null,null,8,"input",[["class","form-control"],["formControlName","k"],["id","k"],["name","k"],["ng-model","$ctrl.erasureCodeProfile.k"],["placeholder","Data chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,74)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,74).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,74)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,74)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,75).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,75).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,75).onTouched()&&i),i}),null,null)),u["ɵdid"](73,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](74,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](75,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](77,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](79,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](80,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,tn)),u["ɵdid"](82,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,an)),u["ɵdid"](84,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,on)),u["ɵdid"](86,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,sn)),u["ɵdid"](88,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,rn)),u["ɵdid"](90,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,dn)),u["ɵdid"](92,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](93,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](94,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](97,0,null,0,4,"label",[["class","cd-col-form-label"],["for","m"]],null,null,null,null,null)),(l()(),u["ɵeld"](98,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Coding chunks (m)"])),(l()(),u["ɵeld"](100,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](101,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](102,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](103,0,null,null,8,"input",[["class","form-control"],["formControlName","m"],["id","m"],["name","m"],["placeholder","Coding chunks..."],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,105)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,105).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,105)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,105)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,106).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,106).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,106).onTouched()&&i),i}),null,null)),u["ɵdid"](104,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](105,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](106,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](108,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](110,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](111,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,cn)),u["ɵdid"](113,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,mn)),u["ɵdid"](115,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,fn)),u["ɵdid"](117,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,hn)),u["ɵdid"](119,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Rn)),u["ɵdid"](121,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](122,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](123,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,13,{FormControlNames:1}),u["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),u["ɵeld"](126,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushFailureDomain"]],null,null,null,null,null)),(l()(),u["ɵeld"](127,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush failure domain"])),(l()(),u["ɵeld"](129,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](130,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](131,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](132,0,null,null,11,"select",[["class","form-control custom-select"],["formControlName","crushFailureDomain"],["id","crushFailureDomain"],["name","crushFailureDomain"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,134).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,134).onTouched()&&i),i}),null,null)),u["ɵdid"](133,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](134,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](136,671744,[[13,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](138,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](139,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,In)),u["ɵdid"](141,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,En)),u["ɵdid"](143,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,wn)),u["ɵdid"](145,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,2,null,_n)),u["ɵdid"](147,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),u["ɵpad"](148,2),(l()(),u["ɵand"](16777216,null,null,1,null,Dn)),u["ɵdid"](150,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](151,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](152,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,21,{FormControlNames:1}),u["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),u["ɵeld"](155,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushRoot"]],null,null,null,null,null)),(l()(),u["ɵeld"](156,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush root"])),(l()(),u["ɵeld"](158,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](159,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](160,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](161,0,null,null,11,"select",[["class","form-control custom-select"],["formControlName","crushRoot"],["id","crushRoot"],["name","crushRoot"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,163).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,163).onTouched()&&i),i}),null,null)),u["ɵdid"](162,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](163,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](165,671744,[[21,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](167,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](168,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,kn)),u["ɵdid"](170,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,xn)),u["ɵdid"](172,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](173,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](174,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,23,{FormControlNames:1}),u["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),u["ɵeld"](177,0,null,0,4,"label",[["class","cd-col-form-label"],["for","crushDeviceClass"]],null,null,null,null,null)),(l()(),u["ɵeld"](178,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush device class"])),(l()(),u["ɵeld"](180,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](181,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](182,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](183,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","crushDeviceClass"],["id","crushDeviceClass"],["name","crushDeviceClass"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,185).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,185).onTouched()&&i),i}),null,null)),u["ɵdid"](184,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](185,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](187,671744,[[23,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](189,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](190,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](191,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](192,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](193,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Let Ceph decide"])),(l()(),u["ɵand"](16777216,null,null,1,null,qn)),u["ɵdid"](196,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](197,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](198,null,["Available OSDs: ",""])),(l()(),u["ɵeld"](199,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](200,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,25,{FormControlNames:1}),u["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),u["ɵeld"](203,0,null,0,4,"label",[["class","cd-col-form-label"],["for","directory"]],null,null,null,null,null)),(l()(),u["ɵeld"](204,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Directory"])),(l()(),u["ɵeld"](206,0,null,null,1,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](207,49152,null,0,kl.a,[],{html:[0,"html"]},null),(l()(),u["ɵeld"](208,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](209,0,null,null,7,"input",[["class","form-control"],["formControlName","directory"],["id","directory"],["name","directory"],["placeholder","Path..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,211)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,211).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,211)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,211)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](210,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](211,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](213,671744,[[25,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](215,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](216,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](217,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](218,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.onSubmit()&&u),u}),xl.b,xl.a)),u["ɵdid"](219,114688,null,0,ql.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](220,0,[""," ",""])),u["ɵppd"](221,1),u["ɵppd"](222,1),(l()(),u["ɵeld"](223,0,null,null,1,"cd-back-button",[],null,null,null,Fl.b,Fl.a)),u["ɵdid"](224,49152,null,0,Pl.a,[El.Location,i.b],{back:[0,"back"]},null)],(function(l,n){var e=n.component;l(n,3,0,e.bsModalRef),l(n,11,0,e.form),l(n,14,0,e.form),l(n,17,0),l(n,24,0,""),l(n,28,0,"name"),l(n,31,0,"name"),l(n,33,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,35,0,e.form.showError("name",u["ɵnov"](n,11),"pattern")),l(n,37,0,e.form.showError("name",u["ɵnov"](n,11),"uniqueName")),l(n,39,0),l(n,46,0,e.tooltips.plugins[e.plugin].description),l(n,52,0,"plugin"),l(n,55,0,"plugin"),l(n,57,0,!e.plugins),l(n,59,0,e.plugins),l(n,61,0,e.form.showError("name",u["ɵnov"](n,11),"required")),l(n,63,0),l(n,70,0,e.tooltips.k),l(n,77,0,"k"),l(n,80,0,"k"),l(n,82,0,e.form.showError("k",u["ɵnov"](n,11),"required")),l(n,84,0,e.form.showError("k",u["ɵnov"](n,11),"min")),l(n,86,0,e.form.showError("k",u["ɵnov"](n,11),"max")),l(n,88,0,e.form.showError("k",u["ɵnov"](n,11),"unequal")),l(n,90,0,e.form.showError("k",u["ɵnov"](n,11),"kLowerM")),l(n,92,0,"lrc"===e.plugin),l(n,94,0),l(n,101,0,e.tooltips.m),l(n,108,0,"m"),l(n,111,0,"m"),l(n,113,0,e.form.showError("m",u["ɵnov"](n,11),"required")),l(n,115,0,e.form.showError("m",u["ɵnov"](n,11),"min")),l(n,117,0,e.form.showError("m",u["ɵnov"](n,11),"max")),l(n,119,0,"shec"===e.plugin),l(n,121,0,e.plugin===e.PLUGIN.LRC),l(n,123,0),l(n,130,0,e.tooltips.crushFailureDomain),l(n,136,0,"crushFailureDomain"),l(n,139,0,"crushFailureDomain"),l(n,141,0,!e.failureDomains),l(n,143,0,e.failureDomainKeys),l(n,145,0,e.plugin===e.PLUGIN.LRC);var i=l(n,148,0,e.PLUGIN.JERASURE,e.PLUGIN.ISA).includes(e.plugin);l(n,147,0,i),l(n,150,0,e.plugin===e.PLUGIN.JERASURE),l(n,152,0),l(n,159,0,e.tooltips.crushRoot),l(n,165,0,"crushRoot"),l(n,168,0,"crushRoot"),l(n,170,0,!e.buckets),l(n,172,0,e.buckets),l(n,174,0),l(n,181,0,e.tooltips.crushDeviceClass),l(n,187,0,"crushDeviceClass"),l(n,190,0,"crushDeviceClass"),l(n,192,0,""),l(n,193,0,""),l(n,196,0,e.devices),l(n,200,0),l(n,207,0,e.tooltips.directory),l(n,213,0,"directory"),l(n,216,0,"directory"),l(n,219,0,u["ɵnov"](n,11)),l(n,224,0,e.bsModalRef.hide)}),(function(l,n){var e=n.component,i=u["ɵunv"](n,5,0,l(n,6,0,u["ɵnov"](n,0),e.action)),t=u["ɵunv"](n,5,1,l(n,7,0,u["ɵnov"](n,1),e.resource));l(n,5,0,i,t),l(n,9,0,u["ɵnov"](n,13).ngClassUntouched,u["ɵnov"](n,13).ngClassTouched,u["ɵnov"](n,13).ngClassPristine,u["ɵnov"](n,13).ngClassDirty,u["ɵnov"](n,13).ngClassValid,u["ɵnov"](n,13).ngClassInvalid,u["ɵnov"](n,13).ngClassPending),l(n,16,0,u["ɵnov"](n,17).hasErrors,u["ɵnov"](n,17).hasSuccess),l(n,23,0,u["ɵnov"](n,30).ngClassUntouched,u["ɵnov"](n,30).ngClassTouched,u["ɵnov"](n,30).ngClassPristine,u["ɵnov"](n,30).ngClassDirty,u["ɵnov"](n,30).ngClassValid,u["ɵnov"](n,30).ngClassInvalid,u["ɵnov"](n,30).ngClassPending,u["ɵnov"](n,31).validClass,u["ɵnov"](n,31).invalidClass),l(n,38,0,u["ɵnov"](n,39).hasErrors,u["ɵnov"](n,39).hasSuccess),l(n,48,0,u["ɵnov"](n,54).ngClassUntouched,u["ɵnov"](n,54).ngClassTouched,u["ɵnov"](n,54).ngClassPristine,u["ɵnov"](n,54).ngClassDirty,u["ɵnov"](n,54).ngClassValid,u["ɵnov"](n,54).ngClassInvalid,u["ɵnov"](n,54).ngClassPending,u["ɵnov"](n,55).validClass,u["ɵnov"](n,55).invalidClass),l(n,62,0,u["ɵnov"](n,63).hasErrors,u["ɵnov"](n,63).hasSuccess),l(n,72,0,u["ɵnov"](n,79).ngClassUntouched,u["ɵnov"](n,79).ngClassTouched,u["ɵnov"](n,79).ngClassPristine,u["ɵnov"](n,79).ngClassDirty,u["ɵnov"](n,79).ngClassValid,u["ɵnov"](n,79).ngClassInvalid,u["ɵnov"](n,79).ngClassPending,u["ɵnov"](n,80).validClass,u["ɵnov"](n,80).invalidClass),l(n,93,0,u["ɵnov"](n,94).hasErrors,u["ɵnov"](n,94).hasSuccess),l(n,103,0,u["ɵnov"](n,110).ngClassUntouched,u["ɵnov"](n,110).ngClassTouched,u["ɵnov"](n,110).ngClassPristine,u["ɵnov"](n,110).ngClassDirty,u["ɵnov"](n,110).ngClassValid,u["ɵnov"](n,110).ngClassInvalid,u["ɵnov"](n,110).ngClassPending,u["ɵnov"](n,111).validClass,u["ɵnov"](n,111).invalidClass),l(n,122,0,u["ɵnov"](n,123).hasErrors,u["ɵnov"](n,123).hasSuccess),l(n,132,0,u["ɵnov"](n,138).ngClassUntouched,u["ɵnov"](n,138).ngClassTouched,u["ɵnov"](n,138).ngClassPristine,u["ɵnov"](n,138).ngClassDirty,u["ɵnov"](n,138).ngClassValid,u["ɵnov"](n,138).ngClassInvalid,u["ɵnov"](n,138).ngClassPending,u["ɵnov"](n,139).validClass,u["ɵnov"](n,139).invalidClass),l(n,151,0,u["ɵnov"](n,152).hasErrors,u["ɵnov"](n,152).hasSuccess),l(n,161,0,u["ɵnov"](n,167).ngClassUntouched,u["ɵnov"](n,167).ngClassTouched,u["ɵnov"](n,167).ngClassPristine,u["ɵnov"](n,167).ngClassDirty,u["ɵnov"](n,167).ngClassValid,u["ɵnov"](n,167).ngClassInvalid,u["ɵnov"](n,167).ngClassPending,u["ɵnov"](n,168).validClass,u["ɵnov"](n,168).invalidClass),l(n,173,0,u["ɵnov"](n,174).hasErrors,u["ɵnov"](n,174).hasSuccess),l(n,183,0,u["ɵnov"](n,189).ngClassUntouched,u["ɵnov"](n,189).ngClassTouched,u["ɵnov"](n,189).ngClassPristine,u["ɵnov"](n,189).ngClassDirty,u["ɵnov"](n,189).ngClassValid,u["ɵnov"](n,189).ngClassInvalid,u["ɵnov"](n,189).ngClassPending,u["ɵnov"](n,190).validClass,u["ɵnov"](n,190).invalidClass),l(n,198,0,e.deviceCount),l(n,199,0,u["ɵnov"](n,200).hasErrors,u["ɵnov"](n,200).hasSuccess),l(n,209,0,u["ɵnov"](n,215).ngClassUntouched,u["ɵnov"](n,215).ngClassTouched,u["ɵnov"](n,215).ngClassPristine,u["ɵnov"](n,215).ngClassDirty,u["ɵnov"](n,215).ngClassValid,u["ɵnov"](n,215).ngClassInvalid,u["ɵnov"](n,215).ngClassPending,u["ɵnov"](n,216).validClass,u["ɵnov"](n,216).invalidClass);var a=u["ɵunv"](n,220,0,l(n,221,0,u["ɵnov"](n,0),e.action)),o=u["ɵunv"](n,220,1,l(n,222,0,u["ɵnov"](n,1),e.resource));l(n,220,0,a,o)}))}function Pn(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-erasure-code-profile-form-modal",[],null,null,null,Fn,Xl)),u["ɵdid"](1,114688,null,0,_,[y.a,Al.a,V.a,c,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var An=u["ɵccf"]("cd-erasure-code-profile-form-modal",_,Pn,{},{submitAction:"submitAction"},[]),Bn=e("w9WL"),On=e("yT6U"),zn=e("4DD9"),Ln=e("iExv"),jn=e("85J/"),Un=e("+0ag"),Mn=e("IzCI"),Gn=e("Dwqy"),$n=e("uYzU"),Kn=e("FFMq"),Jn=e("E2fk"),Wn=e("a0VL"),Zn=e("nSDx"),Hn=e("SB+Q"),Xn=e("TYzs"),Yn=e("BQkM"),Qn=e("dEH0"),le=e("G1/K"),ne=e("TJUb"),ee=e("efK2"),ue=e("CNMR"),ie=e("KOzp"),te=e("2uy1"),ae=e("z/SZ"),oe=e("38Bd"),se=e("978R"),re=e("FE24"),de=e("Avrn"),ce=e("iInd"),me=e("2ZVE"),fe=e("ienR"),ge=e("gk6K"),pe=e("9Xeq"),he=e("hrfs"),ve=e("yGOH"),be=e("bxSN"),Ce=e("WF9J"),Re=e("V/fk"),Ie=e("ChqD"),Ee=e("PCNd"),Ne=e("zWsK"),Ve=e("kJI8"),ye=e("kccj"),we=e("yYhs"),Te=e("k/xb"),_e=e("C6Ij"),Se=e("AWcq"),De=e("xSw7"),ke=e("GgAd"),xe=e("a278"),qe=e("insk"),Fe=e("cUpR"),Pe=e("20UP"),Ae=e("pKUh"),Be=e("25BL"),Oe=e("NUGo"),ze=e("S7zO"),Le=e("EFGL"),je=e("aAWM"),Ue=e("o8EM"),Me=e("sLuX"),Ge=e("FSuO");e("jKX/");class $e{constructor(l,n){this.i18n=l,this.poolService=n,this.cacheTierColumns=[],this.cacheTierColumns=[{prop:"pool_name",name:this.i18n("Name"),flexGrow:3},{prop:"cache_mode",name:this.i18n("Cache Mode"),flexGrow:2},{prop:"cache_min_evict_age",name:this.i18n("Min Evict Age"),flexGrow:2},{prop:"cache_min_flush_age",name:this.i18n("Min Flush Age"),flexGrow:2},{prop:"target_max_bytes",name:this.i18n("Target Max Bytes"),flexGrow:2},{prop:"target_max_objects",name:this.i18n("Target Max Objects"),flexGrow:2}]}ngOnChanges(){this.selection&&this.poolService.getConfiguration(this.selection.pool_name).subscribe(l=>{this.selectedPoolConfiguration=l})}filterNonPoolData(l){return a.omit(l,["cdExecuting","cdIsBinary"])}}var Ke=u["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Je(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","three"],["uid","-xyV8KCiz"]],null,null,null,xe.b,xe.a)),u["ɵdid"](3,638976,null,0,qe.a,[Fe.b,Pe.a,s.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Performance Details"),l(n,3,0,"ceph-pool-detail?var-pool_name="+e.selection.pool_name,"three","-xyV8KCiz")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function We(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Configuration"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-rbd-configuration-table",[],null,null,null,Le.b,Le.a)),u["ɵdid"](3,638976,null,0,je.a,[N.a,Ue.a,s.a],{data:[0,"data"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Configuration"),l(n,3,0,e.selectedPoolConfiguration)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function Ze(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Cache Tiers Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,Be.b,Be.a)),u["ɵdid"](3,2867200,null,0,F.a,[u.NgZone,u.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoSave:[3,"autoSave"]},null)],(function(l,n){var e=n.component;l(n,1,0,"Cache Tiers Details"),l(n,3,0,e.cacheTiers,e.cacheTierColumns,"flex",!1)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function He(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,11,"tabset",[["cdTableDetail",""]],[[2,"tab-container",null]],null,null,Ae.b,Ae.a)),u["ɵdid"](1,180224,[[1,4],["tabsetChild",4]],0,me.e,[me.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](3,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,Me.b,Me.a)),u["ɵdid"](5,638976,null,0,Ge.a,[Wn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,Je)),u["ɵdid"](7,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,We)),u["ɵdid"](9,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,0,1,null,Ze)),u["ɵdid"](11,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,3,0,"Details"),l(n,5,0,e.filterNonPoolData(e.selection),!1,!0),l(n,7,0,e.permissions.grafana.read),l(n,9,0,"replicated"===e.selection.type),l(n,11,0,(null==e.selection.tiers?null:e.selection.tiers.length)>0)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).clazz),l(n,2,0,u["ɵnov"](n,3).id,u["ɵnov"](n,3).active,u["ɵnov"](n,3).addClass,u["ɵnov"](n,3).role,u["ɵnov"](n,3).ariaLabelledby)}))}function Xe(l){return u["ɵvid"](0,[u["ɵqud"](671088640,1,{tabsetChild:0}),(l()(),u["ɵand"](16777216,null,null,1,null,He)),u["ɵdid"](2,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,2,0,n.component.selection)}),null)}var Ye=e("ufoC"),Qe=e("mSOc"),lu=u["ɵcrt"]({encapsulation:0,styles:[[".pg-clean{color:#0b0}  .pg-working{color:#2b99a8}  .pg-warning{color:#ffc200}  .pg-unknown{color:red}"]],data:{}});function nu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,_e.b,_e.a)),u["ɵdid"](1,114688,null,0,Se.a,[],{status:[0,"status"],statusFor:[1,"statusFor"]},null)],(function(l,n){l(n,1,0,n.context.$implicit.status,n.context.$implicit.statusFor)}),null)}function eu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-usage-bar",[["decimals","2"]],null,null,null,De.b,De.a)),u["ɵdid"](1,573440,null,0,ke.a,[],{total:[0,"total"],used:[1,"used"],decimals:[2,"decimals"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.stats.bytes_used.latest+n.parent.context.row.stats.avail_raw.latest,n.parent.context.row.stats.bytes_used.latest,"2")}),null)}function uu(l){return u["ɵvid"](0,[(l()(),u["ɵand"](16777216,null,null,1,null,eu)),u["ɵdid"](1,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,null==n.context.row.stats||null==n.context.row.stats.avail_raw?null:n.context.row.stats.avail_raw.latest)}),null)}function iu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](1,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","z99hzWtmk"]],null,null,null,xe.b,xe.a)),u["ɵdid"](3,638976,null,0,qe.a,[Fe.b,Pe.a,s.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Overall Performance"),l(n,3,0,"ceph-pools-overview?","two","z99hzWtmk")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).id,u["ɵnov"](n,1).active,u["ɵnov"](n,1).addClass,u["ɵnov"](n,1).role,u["ɵnov"](n,1).ariaLabelledby)}))}function tu(l){return u["ɵvid"](0,[u["ɵqud"](402653184,1,{table:0}),u["ɵqud"](402653184,2,{poolUsageTpl:0}),u["ɵqud"](671088640,3,{poolConfigurationSourceTpl:0}),(l()(),u["ɵeld"](3,0,null,null,14,"tabset",[],[[2,"tab-container",null]],null,null,Ae.b,Ae.a)),u["ɵdid"](4,180224,null,0,me.e,[me.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](5,0,null,0,10,"tab",[["heading","Pools List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](6,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,nu)),u["ɵdid"](8,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](9,0,null,null,5,"cd-table",[["id","pool-list"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(l,n,e){var u=!0,i=l.component;return"setExpandedRow"===n&&(u=!1!==i.setExpandedRow(e)&&u),"updateSelection"===n&&(u=!1!==i.updateSelection(e)&&u),u}),Be.b,Be.a)),u["ɵdid"](10,2867200,[[1,4],["table",4]],0,F.a,[u.NgZone,u.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),u["ɵeld"](11,0,null,1,1,"cd-table-actions",[["class","table-actions"],["id","pool-list-actions"]],null,null,null,Oe.b,Oe.a)),u["ɵdid"](12,114688,null,0,ze.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),u["ɵeld"](13,0,null,3,1,"cd-pool-details",[["cdTableDetail",""],["id","pool-list-details"]],null,null,null,Xe,Ke)),u["ɵdid"](14,573440,null,0,$e,[s.a,m.a],{selection:[0,"selection"],permissions:[1,"permissions"],cacheTiers:[2,"cacheTiers"]},null),(l()(),u["ɵand"](0,[[2,2],["poolUsageTpl",2]],null,0,null,uu)),(l()(),u["ɵand"](16777216,null,0,1,null,iu)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,6,0,"Pools List"),l(n,8,0,e.viewCacheStatusList),l(n,10,0,e.pools,e.columns,!0,"single"),l(n,12,0,e.permissions.pool,e.selection,e.tableActions),l(n,14,0,e.expandedRow,e.permissions,e.cacheTiers),l(n,17,0,e.permissions.grafana.read)}),(function(l,n){l(n,3,0,u["ɵnov"](n,4).clazz),l(n,5,0,u["ɵnov"](n,6).id,u["ɵnov"](n,6).active,u["ɵnov"](n,6).addClass,u["ɵnov"](n,6).role,u["ɵnov"](n,6).ariaLabelledby)}))}function au(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"cd-pool-list",[],null,null,null,tu,lu)),u["ɵprd"](131584,null,z.a,z.a,[Ye.a,Qe.a]),u["ɵprd"](256,null,L.a,M,[]),u["ɵdid"](3,114688,null,0,G,[m.a,V.a,E.a,z.a,Al.b,s.a,j.a,O.a,L.a,x.a,i.b],null,null)],(function(l,n){l(n,3,0)}),null)}var ou=u["ɵccf"]("cd-pool-list",G,au,{},{},[]),su=e("QC43"),ru=e("XFyV"),du=e("i4WA"),cu=e("6qls"),mu=e("tz6c"),fu=e("EmSq"),gu=e("pYKc"),pu=e("ppaS"),hu=e("BH9v"),vu=e("rFfW"),bu=u["ɵcrt"]({encapsulation:0,styles:[[".crush-rule-steps[_ngcontent-%COMP%]{margin-top:10px}"]],data:{}});function Cu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,su.b,su.a)),u["ɵdid"](1,49152,null,0,ru.a,[],null,null),(l()(),u["ɵted"](-1,0,["Loading..."]))],null,null)}function Ru(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function Iu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The chosen Ceph pool name is already in use."]))],null,null)}function Eu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list."]))],null,null)}function Nu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Pool name can only contain letters, numbers, '.', '-', '_' or '/'."]))],null,null)}function Vu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function yu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function wu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Tu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function _u(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["At least one placement group is needed!"]))],null,null)}function Su(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Your cluster can't handle this many PGs. Please recalculate the PG amount needed."]))],null,null)}function Du(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The current PGs settings were calculated for you, you should make sure the values suit your needs before submit."]))],null,null)}function ku(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,11,{FormControlNames:1}),u["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","pgNum"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Placement groups"])),(l()(),u["ɵeld"](6,0,null,0,22,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,10,"input",[["class","form-control"],["formControlName","pgNum"],["id","pgNum"],["min","1"],["name","pgNum"],["required",""],["type","number"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"focus"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0,t=l.component;return"input"===n&&(i=!1!==u["ɵnov"](l,9)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,9)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,9)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),"focus"===n&&(i=0!=(t.externalPgChange=!1)&&i),"blur"===n&&(i=!1!==t.alignPgs()&&i),i}),null,null)),u["ɵdid"](8,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](9,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](10,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵdid"](11,16384,null,0,t.z,[],{required:[0,"required"]},null),u["ɵprd"](1024,null,t.o,(function(l){return[l]}),[t.z]),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](14,671744,[[11,4]],0,t.j,[[3,t.d],[6,t.o],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](16,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](17,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Tu)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,_u)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Su)),u["ɵdid"](23,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](24,0,null,null,2,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵeld"](25,0,null,null,1,"cd-doc",[["docText","Calculation help"],["section","pgs"]],null,null,null,du.b,du.a)),u["ɵdid"](26,114688,null,0,cu.a,[mu.a,s.a],{section:[0,"section"],docText:[1,"docText"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Du)),u["ɵdid"](28,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,11,0,""),l(n,14,0,"pgNum"),l(n,17,0,"pgNum"),l(n,19,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"required")),l(n,21,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"min")),l(n,23,0,e.form.showError("pgNum",u["ɵnov"](n.parent.parent,2),"34")),l(n,26,0,"pgs","Calculation help"),l(n,28,0,e.externalPgChange)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,7,0,u["ɵnov"](n,11).required?"":null,u["ɵnov"](n,16).ngClassUntouched,u["ɵnov"](n,16).ngClassTouched,u["ɵnov"](n,16).ngClassPristine,u["ɵnov"](n,16).ngClassDirty,u["ɵnov"](n,16).ngClassValid,u["ɵnov"](n,16).ngClassInvalid,u["ɵnov"](n,16).ngClassPending,u["ɵnov"](n,17).validClass,u["ɵnov"](n,17).invalidClass)}))}function xu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,5,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,4,"ul",[["class","list-inline"]],null,null,null,null,null)),(l()(),u["ɵeld"](2,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](3,null,["Minimum: ",""])),(l()(),u["ɵeld"](4,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](5,null,["Maximum: ",""]))],null,(function(l,n){var e=n.component;l(n,3,0,e.getMinSize()),l(n,5,0,e.getMaxSize())}))}function qu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](1,null,["The size specified is out of range. A value from "," to "," is usable."]))],null,(function(l,n){var e=n.component;l(n,1,0,e.getMinSize(),e.getMaxSize())}))}function Fu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","text-warning-dark"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A size of 1 will not create a replication of the object. The 'Replicated size' includes the object itself."]))],null,null)}function Pu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,13,{FormControlNames:1}),u["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","size"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Replicated size"])),(l()(),u["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,8,"input",[["class","form-control"],["formControlName","size"],["id","size"],["name","size"],["type","number"]],[[8,"max",0],[8,"min",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,9)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,9).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,9)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,9)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),i}),null,null)),u["ɵdid"](8,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](9,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](10,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](12,671744,[[13,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](14,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](15,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,xu)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,qu)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Fu)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,12,0,"size"),l(n,15,0,"size"),l(n,17,0,e.form.showError("size",u["ɵnov"](n.parent.parent,2))),l(n,19,0,e.form.showError("size",u["ɵnov"](n.parent.parent,2))),l(n,21,0,1===e.form.getValue("size"))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,7,1,[e.getMaxSize(),e.getMinSize(),u["ɵnov"](n,14).ngClassUntouched,u["ɵnov"](n,14).ngClassTouched,u["ɵnov"](n,14).ngClassPristine,u["ɵnov"](n,14).ngClassDirty,u["ɵnov"](n,14).ngClassValid,u["ɵnov"](n,14).ngClassInvalid,u["ɵnov"](n,14).ngClassPending,u["ɵnov"](n,15).validClass,u["ɵnov"](n,15).invalidClass])}))}function Au(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,15,{FormControlNames:1}),u["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Flags"])),(l()(),u["ɵeld"](6,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","ecOverwrites"],["id","ec-overwrites"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.checked)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),i}),null,null)),u["ɵdid"](9,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](10,16384,null,0,t.c,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.c]),u["ɵdid"](12,671744,[[15,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](14,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](15,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](16,0,null,null,1,"label",[["class","custom-control-label"],["for","ec-overwrites"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["EC Overwrites"]))],(function(l,n){l(n,1,0),l(n,12,0,"ecOverwrites"),l(n,15,0,"ecOverwrites")}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,8,0,u["ɵnov"](n,14).ngClassUntouched,u["ɵnov"](n,14).ngClassTouched,u["ɵnov"](n,14).ngClassPristine,u["ɵnov"](n,14).ngClassDirty,u["ɵnov"](n,14).ngClassValid,u["ɵnov"](n,14).ngClassInvalid,u["ɵnov"](n,14).ngClassPending,u["ɵnov"](n,15).validClass,u["ɵnov"](n,15).invalidClass)}))}function Bu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,23,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](2,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,9,{FormControlNames:1}),u["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),u["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"],["for","pgAutoscaleMode"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["PG Autoscale"])),(l()(),u["ɵeld"](7,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","pgAutoscaleMode"],["id","pgAutoscaleMode"],["name","pgAutoscaleMode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),i}),null,null)),u["ɵdid"](9,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](10,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](12,671744,[[9,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](14,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](15,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,wu)),u["ɵdid"](17,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ku)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Pu)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Au)),u["ɵdid"](23,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0),l(n,12,0,"pgAutoscaleMode"),l(n,15,0,"pgAutoscaleMode"),l(n,17,0,e.pgAutoscaleModes),l(n,19,0,"on"!==e.form.getValue("pgAutoscaleMode")),l(n,21,0,e.isReplicated),l(n,23,0,e.info.is_all_bluestore&&e.isErasure)}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).hasErrors,u["ɵnov"](n,2).hasSuccess),l(n,8,0,u["ɵnov"](n,14).ngClassUntouched,u["ɵnov"](n,14).ngClassTouched,u["ɵnov"](n,14).ngClassPristine,u["ɵnov"](n,14).ngClassDirty,u["ɵnov"](n,14).ngClassValid,u["ɵnov"](n,14).ngClassInvalid,u["ɵnov"](n,14).ngClassPending,u["ɵnov"](n,15).validClass,u["ɵnov"](n,15).invalidClass)}))}function Ou(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function zu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- No erasure code profile available --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Lu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select an erasure code profile --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function ju(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.name)}))}function Uu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.addErasureCodeProfile()&&u),u}),null,null)),(l()(),u["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](3,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](4,1)],(function(l,n){var e=l(n,4,0,n.component.icons.add);l(n,3,0,e)}),null)}function Mu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","This profile can't be deleted as it is in use."],["triggers",""],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.deleteErasureCodeProfile()&&u),u}),null,null)),u["ɵdid"](1,212992,[[4,4],["ecpDeletionBtn",4]],0,se.c,[u.ViewContainerRef,ae.a,se.a,u.ElementRef,u.Renderer2,te.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"]},null),(l()(),u["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](4,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](5,1),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,1,0,"This profile can't be deleted as it is in use.","");var u=l(n,5,0,e.icons.trash);l(n,4,0,u)}),null)}function Gu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Profile is not in use."]))],null,null)}function $u(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function Ku(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,$u)),u["ɵdid"](2,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,2,0,n.component.ecpUsage)}),null)}function Ju(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,12,"span",[["class","form-text text-muted"],["id","ecp-info-block"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,Ae.b,Ae.a)),u["ɵdid"](2,180224,[[3,4],["ecpInfoTabs",4]],0,me.e,[me.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](3,0,null,0,4,"tab",[["class","ecp-info"],["heading","Profile"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](4,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](5,0,null,null,2,"cd-table-key-value",[],null,null,null,Me.b,Me.a)),u["ɵdid"](6,638976,null,0,Ge.a,[Wn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],hideKeys:[3,"hideKeys"]},null),u["ɵpad"](7,1),(l()(),u["ɵeld"](8,0,null,0,4,"tab",[["class","used-by-pools"],["heading","Used by pools"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](9,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](0,[["ecpIsNotUsed",2]],null,0,null,Gu)),(l()(),u["ɵand"](16777216,null,null,1,null,Ku)),u["ɵdid"](12,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,4,0,"Profile");var i=e.form.getValue("erasureProfile"),t=l(n,7,0,"name");l(n,6,0,i,!1,!0,t),l(n,9,0,"Used by pools"),l(n,12,0,e.ecpUsage,u["ɵnov"](n,10))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).clazz),l(n,3,0,u["ɵnov"](n,4).id,u["ɵnov"](n,4).active,u["ɵnov"](n,4).addClass,u["ɵnov"](n,4).role,u["ɵnov"](n,4).ariaLabelledby),l(n,8,0,u["ɵnov"](n,9).id,u["ɵnov"](n,9).active,u["ɵnov"](n,9).addClass,u["ɵnov"](n,9).role,u["ɵnov"](n,9).ariaLabelledby)}))}function Wu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,38,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,19,{FormControlNames:1}),u["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","erasureProfile"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Erasure code profile"])),(l()(),u["ɵeld"](6,0,null,0,32,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,29,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","erasureProfile"],["id","erasureProfile"],["name","erasureProfile"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),i}),null,null)),u["ɵdid"](9,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](10,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](12,671744,[[19,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](14,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](15,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ou)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,zu)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Lu)),u["ɵdid"](21,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ju)),u["ɵdid"](23,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](24,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),u["ɵeld"](25,0,null,null,7,"button",[["class","btn btn-light"],["id","ecp-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0,i=l.component;return"click"===n&&(u=0!=(i.data.erasureInfo=!i.data.erasureInfo)&&u),u}),null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](27,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),u["ɵpod"](28,{active:0}),(l()(),u["ɵeld"](29,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](31,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](32,1),(l()(),u["ɵand"](16777216,null,null,1,null,Uu)),u["ɵdid"](34,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Mu)),u["ɵdid"](36,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ju)),u["ɵdid"](38,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,12,0,"erasureProfile"),l(n,15,0,"erasureProfile"),l(n,17,0,!e.ecProfiles),l(n,19,0,e.ecProfiles&&0===e.ecProfiles.length),l(n,21,0,e.ecProfiles&&e.ecProfiles.length>0),l(n,23,0,e.ecProfiles);var u=l(n,28,0,e.data.erasureInfo);l(n,27,0,"btn btn-light",u);var i=l(n,32,0,e.icons.questionCircle);l(n,31,0,i),l(n,34,0,!e.editing),l(n,36,0,!e.editing),l(n,38,0,e.data.erasureInfo&&e.form.getValue("erasureProfile"))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess),l(n,8,0,u["ɵnov"](n,14).ngClassUntouched,u["ɵnov"](n,14).ngClassTouched,u["ɵnov"](n,14).ngClassPristine,u["ɵnov"](n,14).ngClassDirty,u["ɵnov"](n,14).ngClassValid,u["ɵnov"](n,14).ngClassInvalid,u["ɵnov"](n,14).ngClassPending,u["ɵnov"](n,15).validClass,u["ɵnov"](n,15).invalidClass)}))}function Zu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,21,{FormControlNames:1}),u["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","crushRule"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush ruleset"])),(l()(),u["ɵeld"](6,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A new crush ruleset will be implicitly created."]))],(function(l,n){l(n,1,0)}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess)}))}function Hu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["There are no rules."])),(l()(),u["ɵted"](-1,null,["  "]))],null,null)}function Xu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit.rule_name)}))}function Yu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.addCrushRule()&&u),u}),null,null)),(l()(),u["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](3,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](4,1)],(function(l,n){var e=l(n,4,0,n.component.icons.add);l(n,3,0,e)}),null)}function Qu(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","This rule can't be deleted as it is in use."],["triggers",""],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0;return"click"===n&&(u=!1!==l.component.deleteCrushRule()&&u),u}),null,null)),u["ɵdid"](1,212992,[[2,4],["crushDeletionBtn",4]],0,se.c,[u.ViewContainerRef,ae.a,se.a,u.ElementRef,u.Renderer2,te.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"]},null),(l()(),u["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](4,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](5,1),(l()(),u["ɵand"](0,null,null,0))],(function(l,n){var e=n.component;l(n,1,0,"This rule can't be deleted as it is in use.","");var u=l(n,5,0,e.icons.trash);l(n,4,0,u)}),null)}function li(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.describeCrushStep(n.context.$implicit))}))}function ni(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Rule is not in use."]))],null,null)}function ei(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(l()(),u["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit)}))}function ui(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,2,"ul",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,ei)),u["ɵdid"](2,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,2,0,n.component.crushUsage)}),null)}function ii(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,17,"span",[["class","form-text text-muted"],["id","crush-info-block"]],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,16,"tabset",[],[[2,"tab-container",null]],null,null,Ae.b,Ae.a)),u["ɵdid"](2,180224,[[1,4],["crushInfoTabs",4]],0,me.e,[me.f,u.Renderer2,u.ElementRef],null,null),(l()(),u["ɵeld"](3,0,null,0,4,"tab",[["class","crush-rule-info"],["heading","Crush rule"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](4,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](5,0,null,null,2,"cd-table-key-value",[],null,null,null,Me.b,Me.a)),u["ɵdid"](6,638976,null,0,Ge.a,[Wn.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],hideKeys:[3,"hideKeys"]},null),u["ɵpad"](7,4),(l()(),u["ɵeld"](8,0,null,0,4,"tab",[["class","crush-rule-steps"],["heading","Crush steps"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](9,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵeld"](10,0,null,null,2,"ol",[],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,li)),u["ɵdid"](12,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](13,0,null,0,4,"tab",[["class","used-by-pools"],["heading","Used by pools"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),u["ɵdid"](14,212992,null,0,me.b,[me.e,u.ElementRef,u.Renderer2],{heading:[0,"heading"]},null),(l()(),u["ɵand"](0,[["ruleIsNotUsed",2]],null,0,null,ni)),(l()(),u["ɵand"](16777216,null,null,1,null,ui)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,4,0,"Crush rule");var i=e.form.getValue("crushRule"),t=l(n,7,0,"steps","ruleset","type","rule_name");l(n,6,0,i,!1,!1,t),l(n,9,0,"Crush steps"),l(n,12,0,e.form.get("crushRule").value.steps),l(n,14,0,"Used by pools"),l(n,17,0,e.crushUsage,u["ɵnov"](n,15))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).clazz),l(n,3,0,u["ɵnov"](n,4).id,u["ɵnov"](n,4).active,u["ɵnov"](n,4).addClass,u["ɵnov"](n,4).role,u["ɵnov"](n,4).ariaLabelledby),l(n,8,0,u["ɵnov"](n,9).id,u["ɵnov"](n,9).active,u["ɵnov"](n,9).addClass,u["ɵnov"](n,9).role,u["ɵnov"](n,9).ariaLabelledby),l(n,13,0,u["ɵnov"](n,14).id,u["ɵnov"](n,14).active,u["ɵnov"](n,14).addClass,u["ɵnov"](n,14).role,u["ɵnov"](n,14).ariaLabelledby)}))}function ti(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["This field is required!"]))],null,null)}function ai(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The rule can't be used in the current cluster as it has too few OSDs to meet the minimum required OSD by this rule."]))],null,null)}function oi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,34,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,27,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),u["ɵeld"](2,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","crushRule"],["id","crushRule"],["name","crushSet"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,4).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,4).onTouched()&&i),i}),null,null)),u["ɵdid"](3,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](4,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](6,671744,[[23,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](8,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](9,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](10,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](11,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](12,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select a crush rule --"])),(l()(),u["ɵand"](16777216,null,null,1,null,Xu)),u["ɵdid"](15,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](16,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),u["ɵeld"](17,0,null,null,7,"button",[["class","btn btn-light"],["id","crush-info-button"],["type","button"]],null,[[null,"click"]],(function(l,n,e){var u=!0,i=l.component;return"click"===n&&(u=0!=(i.data.crushInfo=!i.data.crushInfo)&&u),u}),null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](19,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),u["ɵpod"](20,{active:0}),(l()(),u["ɵeld"](21,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),u["ɵprd"](512,null,El["ɵNgClassImpl"],El["ɵNgClassR2Impl"],[u.IterableDiffers,u.KeyValueDiffers,u.ElementRef,u.Renderer2]),u["ɵdid"](23,278528,null,0,El.NgClass,[El["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),u["ɵpad"](24,1),(l()(),u["ɵand"](16777216,null,null,1,null,Yu)),u["ɵdid"](26,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Qu)),u["ɵdid"](28,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ii)),u["ɵdid"](30,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ti)),u["ɵdid"](32,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ai)),u["ɵdid"](34,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,6,0,"crushRule"),l(n,9,0,"crushRule"),l(n,11,0,null),l(n,12,0,null),l(n,15,0,e.current.rules);var i=l(n,20,0,e.data.crushInfo);l(n,19,0,"btn btn-light",i);var t=l(n,24,0,e.icons.questionCircle);l(n,23,0,t),l(n,26,0,e.isReplicated&&!e.editing),l(n,28,0,e.isReplicated&&!e.editing),l(n,30,0,e.data.crushInfo&&e.form.getValue("crushRule")),l(n,32,0,e.form.showError("crushRule",u["ɵnov"](n.parent.parent.parent,2),"required")),l(n,34,0,e.form.showError("crushRule",u["ɵnov"](n.parent.parent.parent,2),"tooFewOsds"))}),(function(l,n){l(n,2,0,u["ɵnov"](n,8).ngClassUntouched,u["ɵnov"](n,8).ngClassTouched,u["ɵnov"](n,8).ngClassPristine,u["ɵnov"](n,8).ngClassDirty,u["ɵnov"](n,8).ngClassValid,u["ɵnov"](n,8).ngClassInvalid,u["ɵnov"](n,8).ngClassPending,u["ɵnov"](n,9).validClass,u["ɵnov"](n,9).invalidClass)}))}function si(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,9,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](1,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,23,{FormControlNames:1}),u["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),u["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","crushRule"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Crush ruleset"])),(l()(),u["ɵeld"](6,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵand"](0,[["noRules",2]],null,0,null,Hu)),(l()(),u["ɵand"](16777216,null,null,1,null,oi)),u["ɵdid"](9,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(l,n){var e=n.component;l(n,1,0),l(n,9,0,e.current.rules.length>0,u["ɵnov"](n,7))}),(function(l,n){l(n,0,0,u["ɵnov"](n,1).hasErrors,u["ɵnov"](n,1).hasSuccess)}))}function ri(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["CRUSH"])),(l()(),u["ɵand"](16777216,null,null,1,null,Wu)),u["ɵdid"](4,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Zu)),u["ɵdid"](6,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,si)),u["ɵdid"](8,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,4,0,e.isErasure),l(n,6,0,e.isErasure&&!e.editing),l(n,8,0,e.isReplicated||e.editing)}),null)}function di(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function ci(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function mi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- No erasure compression algorithm available --"]))],(function(l,n){l(n,1,0,""),l(n,2,0,"")}),null)}function fi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),u["ɵdid"](1,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{value:[0,"value"]},null),u["ɵdid"](2,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),u["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function gi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than 0"]))],null,null)}function pi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be less than the maximum blob size"]))],null,null)}function hi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than 0"]))],null,null)}function vi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be greater than the minimum blob size"]))],null,null)}function bi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Value should be between 0.0 and 1.0"]))],null,null)}function Ci(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,79,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](1,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](2,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,27,{FormControlNames:1}),u["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),u["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"],["for","algorithm"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Algorithm"])),(l()(),u["ɵeld"](7,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](8,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","algorithm"],["id","algorithm"],["name","algorithm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,10).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,10).onTouched()&&i),i}),null,null)),u["ɵdid"](9,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](10,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](12,671744,[[27,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](14,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](15,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,ci)),u["ɵdid"](17,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,mi)),u["ɵdid"](19,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,fi)),u["ɵdid"](21,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵeld"](22,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](23,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,29,{FormControlNames:1}),u["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),u["ɵeld"](26,0,null,0,1,"label",[["class","cd-col-form-label"],["for","minBlobSize"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Minimum blob size"])),(l()(),u["ɵeld"](28,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](29,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","KiB"],["formControlName","minBlobSize"],["id","minBlobSize"],["min","0"],["name","minBlobSize"],["placeholder","e.g., 128KiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,30)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,30).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,30)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,30)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,34).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](30,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](32,671744,[[29,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](34,81920,null,0,fu.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](35,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](36,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](37,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,gi)),u["ɵdid"](39,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,pi)),u["ɵdid"](41,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](42,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](43,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,31,{FormControlNames:1}),u["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),u["ɵeld"](46,0,null,0,1,"label",[["class","cd-col-form-label"],["for","maxBlobSize"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Maximum blob size"])),(l()(),u["ɵeld"](48,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](49,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","KiB"],["formControlName","maxBlobSize"],["id","maxBlobSize"],["min","0"],["placeholder","e.g., 512KiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,50)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,50).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,50)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,50)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,54).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](50,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](52,671744,[[31,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](54,81920,null,0,fu.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](55,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](56,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](57,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,hi)),u["ɵdid"](59,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,vi)),u["ɵdid"](61,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](62,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](63,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,33,{FormControlNames:1}),u["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),u["ɵeld"](66,0,null,0,1,"label",[["class","cd-col-form-label"],["for","ratio"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Ratio"])),(l()(),u["ɵeld"](68,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](69,0,null,null,8,"input",[["class","form-control"],["formControlName","ratio"],["id","ratio"],["max","1"],["min","0"],["name","ratio"],["placeholder","Compression ratio"],["step","0.1"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,71)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,71).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,71)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,71)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,72).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,72).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,72).onTouched()&&i),i}),null,null)),u["ɵdid"](70,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](71,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](72,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](74,671744,[[33,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](76,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](77,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,bi)),u["ɵdid"](79,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,2,0),l(n,12,0,"algorithm"),l(n,15,0,"algorithm"),l(n,17,0,!e.info.compression_algorithms),l(n,19,0,e.info.compression_algorithms&&0===e.info.compression_algorithms.length),l(n,21,0,e.info.compression_algorithms),l(n,23,0),l(n,32,0,"minBlobSize"),l(n,34,0,"KiB"),l(n,37,0,"minBlobSize"),l(n,39,0,e.form.showError("minBlobSize",u["ɵnov"](n.parent.parent,2),"min")),l(n,41,0,e.form.showError("minBlobSize",u["ɵnov"](n.parent.parent,2),"maximum")),l(n,43,0),l(n,52,0,"maxBlobSize"),l(n,54,0,"KiB"),l(n,57,0,"maxBlobSize"),l(n,59,0,e.form.showError("maxBlobSize",u["ɵnov"](n.parent.parent,2),"min")),l(n,61,0,e.form.showError("maxBlobSize",u["ɵnov"](n.parent.parent,2),"minimum")),l(n,63,0),l(n,74,0,"ratio"),l(n,77,0,"ratio"),l(n,79,0,e.form.showError("ratio",u["ɵnov"](n.parent.parent,2),"min")||e.form.showError("ratio",u["ɵnov"](n.parent.parent,2),"max"))}),(function(l,n){l(n,1,0,u["ɵnov"](n,2).hasErrors,u["ɵnov"](n,2).hasSuccess),l(n,8,0,u["ɵnov"](n,14).ngClassUntouched,u["ɵnov"](n,14).ngClassTouched,u["ɵnov"](n,14).ngClassPristine,u["ɵnov"](n,14).ngClassDirty,u["ɵnov"](n,14).ngClassValid,u["ɵnov"](n,14).ngClassInvalid,u["ɵnov"](n,14).ngClassPending,u["ɵnov"](n,15).validClass,u["ɵnov"](n,15).invalidClass),l(n,22,0,u["ɵnov"](n,23).hasErrors,u["ɵnov"](n,23).hasSuccess),l(n,29,0,u["ɵnov"](n,36).ngClassUntouched,u["ɵnov"](n,36).ngClassTouched,u["ɵnov"](n,36).ngClassPristine,u["ɵnov"](n,36).ngClassDirty,u["ɵnov"](n,36).ngClassValid,u["ɵnov"](n,36).ngClassInvalid,u["ɵnov"](n,36).ngClassPending,u["ɵnov"](n,37).validClass,u["ɵnov"](n,37).invalidClass),l(n,42,0,u["ɵnov"](n,43).hasErrors,u["ɵnov"](n,43).hasSuccess),l(n,49,0,u["ɵnov"](n,56).ngClassUntouched,u["ɵnov"](n,56).ngClassTouched,u["ɵnov"](n,56).ngClassPristine,u["ɵnov"](n,56).ngClassDirty,u["ɵnov"](n,56).ngClassValid,u["ɵnov"](n,56).ngClassInvalid,u["ɵnov"](n,56).ngClassPending,u["ɵnov"](n,57).validClass,u["ɵnov"](n,57).invalidClass),l(n,62,0,u["ɵnov"](n,63).hasErrors,u["ɵnov"](n,63).hasSuccess),l(n,69,0,u["ɵnov"](n,76).ngClassUntouched,u["ɵnov"](n,76).ngClassTouched,u["ɵnov"](n,76).ngClassPristine,u["ɵnov"](n,76).ngClassDirty,u["ɵnov"](n,76).ngClassValid,u["ɵnov"](n,76).ngClassInvalid,u["ɵnov"](n,76).ngClassPending,u["ɵnov"](n,77).validClass,u["ɵnov"](n,77).invalidClass)}))}function Ri(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,24,"div",[["formGroupName","compression"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),u["ɵdid"](1,212992,null,0,t.m,[[3,t.d],[8,null],[8,null]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.d,null,[t.m]),u["ɵdid"](3,16384,null,0,t.s,[[4,t.d]],null,null),(l()(),u["ɵeld"](4,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Compression"])),(l()(),u["ɵeld"](6,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](7,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,25,{FormControlNames:1}),u["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),u["ɵeld"](10,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mode"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Mode"])),(l()(),u["ɵeld"](12,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](13,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","mode"],["id","mode"],["name","mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,15).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,15).onTouched()&&i),i}),null,null)),u["ɵdid"](14,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](15,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](17,671744,[[25,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](19,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](20,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,di)),u["ɵdid"](22,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ci)),u["ɵdid"](24,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,1,0,"compression"),l(n,7,0),l(n,17,0,"mode"),l(n,20,0,"mode"),l(n,22,0,e.info.compression_modes),l(n,24,0,e.hasCompressionEnabled())}),(function(l,n){l(n,0,0,u["ɵnov"](n,3).ngClassUntouched,u["ɵnov"](n,3).ngClassTouched,u["ɵnov"](n,3).ngClassPristine,u["ɵnov"](n,3).ngClassDirty,u["ɵnov"](n,3).ngClassValid,u["ɵnov"](n,3).ngClassInvalid,u["ɵnov"](n,3).ngClassPending),l(n,6,0,u["ɵnov"](n,7).hasErrors,u["ɵnov"](n,7).hasSuccess),l(n,13,0,u["ɵnov"](n,19).ngClassUntouched,u["ɵnov"](n,19).ngClassTouched,u["ɵnov"](n,19).ngClassPristine,u["ɵnov"](n,19).ngClassDirty,u["ɵnov"](n,19).ngClassValid,u["ɵnov"](n,19).ngClassInvalid,u["ɵnov"](n,19).ngClassPending,u["ɵnov"](n,20).validClass,u["ɵnov"](n,20).invalidClass)}))}function Ii(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["The value should be greater or equal to 0"]))],null,null)}function Ei(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,138,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,e){var i=!0;return"submit"===n&&(i=!1!==u["ɵnov"](l,2).onSubmit(e)&&i),"reset"===n&&(i=!1!==u["ɵnov"](l,2).onReset()&&i),"submit"===n&&(i=!1!==u["ɵnov"](l,5).onSubmit()&&i),i}),null,null)),u["ɵdid"](1,16384,null,0,t.G,[],null,null),u["ɵdid"](2,540672,[["formDir",4]],0,t.l,[[8,null],[8,null]],{form:[0,"form"]},null),u["ɵprd"](2048,null,t.d,null,[t.l]),u["ɵdid"](4,16384,null,0,t.s,[[4,t.d]],null,null),u["ɵdid"](5,16384,null,0,yl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),u["ɵeld"](6,0,null,null,132,"div",[["class","card"]],null,null,null,null,null)),(l()(),u["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),u["ɵted"](8,null,[""," ",""])),u["ɵppd"](9,1),u["ɵppd"](10,1),(l()(),u["ɵeld"](11,0,null,null,118,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),u["ɵeld"](12,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](13,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,5,{FormControlNames:1}),u["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),u["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Name"])),(l()(),u["ɵeld"](18,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](19,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,22)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,22).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,22)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,22)._compositionEnd(e.target.value)&&i),i}),null,null)),u["ɵdid"](20,4210688,null,0,Tl.a,[u.ElementRef],{autofocus:[0,"autofocus"]},null),u["ɵdid"](21,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](22,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](24,671744,[[5,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](26,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](27,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ru)),u["ɵdid"](29,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Iu)),u["ɵdid"](31,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Eu)),u["ɵdid"](33,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Nu)),u["ɵdid"](35,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](36,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](37,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,7,{FormControlNames:1}),u["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),u["ɵeld"](40,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","poolType"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Pool type"])),(l()(),u["ɵeld"](42,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](43,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","poolType"],["id","poolType"],["name","poolType"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,e){var i=!0;return"change"===n&&(i=!1!==u["ɵnov"](l,45).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,45).onTouched()&&i),i}),null,null)),u["ɵdid"](44,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](45,16384,null,0,t.A,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.A]),u["ɵdid"](47,671744,[[7,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](49,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](50,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](51,0,null,null,3,"option",[["ngValue",""]],null,null,null,null,null)),u["ɵdid"](52,147456,null,0,t.v,[u.ElementRef,u.Renderer2,[2,t.A]],{ngValue:[0,"ngValue"]},null),u["ɵdid"](53,147456,null,0,t.F,[u.ElementRef,u.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),u["ɵted"](-1,null,["-- Select a pool type --"])),(l()(),u["ɵand"](16777216,null,null,1,null,Vu)),u["ɵdid"](56,278528,null,0,El.NgForOf,[u.ViewContainerRef,u.TemplateRef,u.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,yu)),u["ɵdid"](58,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Bu)),u["ɵdid"](60,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](61,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](62,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,17,{FormControlNames:1}),u["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),u["ɵeld"](65,0,null,0,1,"label",[["class","cd-col-form-label"],["for","applications"]],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Applications"])),(l()(),u["ɵeld"](67,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](68,0,null,null,1,"cd-select-badges",[["id","applications"]],null,[[null,"selection"]],(function(l,n,e){var u=!0;return"selection"===n&&(u=!1!==l.component.appSelection()&&u),u}),gu.b,gu.a)),u["ɵdid"](69,49152,null,0,pu.a,[s.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"],selectionLimit:[3,"selectionLimit"],customBadges:[4,"customBadges"],customBadgeValidators:[5,"customBadgeValidators"]},{selection:"selection"}),(l()(),u["ɵand"](16777216,null,null,1,null,ri)),u["ɵdid"](71,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ri)),u["ɵdid"](73,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](74,0,null,null,52,"div",[],null,null,null,null,null)),(l()(),u["ɵeld"](75,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Quotas"])),(l()(),u["ɵeld"](77,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](78,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,35,{FormControlNames:1}),u["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),u["ɵeld"](81,0,null,0,9,"label",[["class","cd-col-form-label"],["for","max_bytes"]],null,null,null,null,null)),(l()(),u["ɵeld"](82,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Max bytes"])),(l()(),u["ɵeld"](84,0,null,null,6,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](85,49152,null,0,kl.a,[],null,null),(l()(),u["ɵeld"](86,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Leave it blank or specify 0 to disable this quota."])),(l()(),u["ɵeld"](88,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),u["ɵeld"](89,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A valid quota should be greater than 0."])),(l()(),u["ɵeld"](91,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](92,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["defaultUnit","GiB"],["formControlName","max_bytes"],["id","max_bytes"],["name","max_bytes"],["placeholder","e.g., 10GiB"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,93)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,93).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,93)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,93)._compositionEnd(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,97).onBlur(e.target.value)&&i),i}),null,null)),u["ɵdid"](93,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵprd"](1024,null,t.p,(function(l){return[l]}),[t.e]),u["ɵdid"](95,671744,[[35,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](97,81920,null,0,fu.a,[u.ElementRef,t.q,I.a,N.a],{defaultUnit:[0,"defaultUnit"]},null),u["ɵdid"](98,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](99,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](100,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵeld"](101,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,wl.b,wl.a)),u["ɵdid"](102,1163264,null,2,yl.c,[u.ElementRef,yl.g],null,null),u["ɵqud"](603979776,37,{FormControlNames:1}),u["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),u["ɵeld"](105,0,null,0,9,"label",[["class","cd-col-form-label"],["for","max_objects"]],null,null,null,null,null)),(l()(),u["ɵeld"](106,0,null,null,1,null,null,null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Max objects"])),(l()(),u["ɵeld"](108,0,null,null,6,"cd-helper",[],null,null,null,Dl.b,Dl.a)),u["ɵdid"](109,49152,null,0,kl.a,[],null,null),(l()(),u["ɵeld"](110,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["Leave it blank or specify 0 to disable this quota."])),(l()(),u["ɵeld"](112,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),u["ɵeld"](113,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),u["ɵted"](-1,null,["A valid quota should be greater than 0."])),(l()(),u["ɵeld"](115,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),u["ɵeld"](116,0,null,null,8,"input",[["class","form-control"],["formControlName","max_objects"],["id","max_objects"],["min","0"],["name","max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,e){var i=!0;return"input"===n&&(i=!1!==u["ɵnov"](l,118)._handleInput(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,118).onTouched()&&i),"compositionstart"===n&&(i=!1!==u["ɵnov"](l,118)._compositionStart()&&i),"compositionend"===n&&(i=!1!==u["ɵnov"](l,118)._compositionEnd(e.target.value)&&i),"change"===n&&(i=!1!==u["ɵnov"](l,119).onChange(e.target.value)&&i),"input"===n&&(i=!1!==u["ɵnov"](l,119).onChange(e.target.value)&&i),"blur"===n&&(i=!1!==u["ɵnov"](l,119).onTouched()&&i),i}),null,null)),u["ɵdid"](117,4210688,null,0,_l.a,[[2,Sl.a],E.a,u.ElementRef],null,null),u["ɵdid"](118,16384,null,0,t.e,[u.Renderer2,u.ElementRef,[2,t.b]],null,null),u["ɵdid"](119,16384,null,0,t.w,[u.Renderer2,u.ElementRef],null,null),u["ɵprd"](1024,null,t.p,(function(l,n){return[l,n]}),[t.e,t.w]),u["ɵdid"](121,671744,[[37,4]],0,t.j,[[3,t.d],[8,null],[8,null],[6,t.p],[2,t.E]],{name:[0,"name"]},null),u["ɵprd"](2048,null,t.q,null,[t.j]),u["ɵdid"](123,16384,null,0,t.r,[[4,t.q]],null,null),u["ɵdid"](124,16384,null,0,yl.h,[[3,t.d],yl.a],{formControlName:[0,"formControlName"]},null),(l()(),u["ɵand"](16777216,null,null,1,null,Ii)),u["ɵdid"](126,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](127,0,null,null,2,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),u["ɵeld"](128,0,null,null,1,"cd-rbd-configuration-form",[],null,[[null,"changes"]],(function(l,n,e){var u=!0;return"changes"===n&&(u=!1!==(l.component.currentConfigurationValues=e())&&u),u}),hu.b,hu.a)),u["ɵdid"](129,114688,null,0,vu.a,[N.a,Ue.a],{form:[0,"form"],initializeData:[1,"initializeData"]},{changes:"changes"}),(l()(),u["ɵeld"](130,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),u["ɵeld"](131,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),u["ɵeld"](132,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,e){var u=!0;return"submitAction"===n&&(u=!1!==l.component.submit()&&u),u}),xl.b,xl.a)),u["ɵdid"](133,114688,null,0,ql.a,[u.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),u["ɵted"](134,0,[""," "," "])),u["ɵppd"](135,1),u["ɵppd"](136,1),(l()(),u["ɵeld"](137,0,null,null,1,"cd-back-button",[],null,null,null,Fl.b,Fl.a)),u["ɵdid"](138,49152,null,0,Pl.a,[El.Location,i.b],null,null)],(function(l,n){var e=n.component;l(n,2,0,e.form),l(n,5,0,e.form),l(n,13,0),l(n,20,0,""),l(n,24,0,"name"),l(n,27,0,"name"),l(n,29,0,e.form.showError("name",u["ɵnov"](n,2),"required")),l(n,31,0,e.form.showError("name",u["ɵnov"](n,2),"uniqueName")),l(n,33,0,e.form.showError("name",u["ɵnov"](n,2),"rbdPool")),l(n,35,0,e.form.showError("name",u["ɵnov"](n,2),"pattern")),l(n,37,0),l(n,47,0,"poolType"),l(n,50,0,"poolType"),l(n,52,0,""),l(n,53,0,""),l(n,56,0,e.data.poolTypes),l(n,58,0,e.form.showError("poolType",u["ɵnov"](n,2),"required")),l(n,60,0,e.isReplicated||e.isErasure),l(n,62,0),l(n,69,0,e.data.applications.selected,e.data.applications.available,e.data.applications.messages,4,!0,e.data.applications.validators),l(n,71,0,e.isErasure||e.isReplicated),l(n,73,0,e.info.is_all_bluestore),l(n,78,0),l(n,95,0,"max_bytes"),l(n,97,0,"GiB"),l(n,100,0,"max_bytes"),l(n,102,0),l(n,121,0,"max_objects"),l(n,124,0,"max_objects"),l(n,126,0,e.form.showError("max_objects",u["ɵnov"](n,2),"min")),l(n,129,0,e.form,e.initializeConfigData),l(n,133,0,u["ɵnov"](n,2))}),(function(l,n){var e=n.component;l(n,0,0,u["ɵnov"](n,4).ngClassUntouched,u["ɵnov"](n,4).ngClassTouched,u["ɵnov"](n,4).ngClassPristine,u["ɵnov"](n,4).ngClassDirty,u["ɵnov"](n,4).ngClassValid,u["ɵnov"](n,4).ngClassInvalid,u["ɵnov"](n,4).ngClassPending);var i=u["ɵunv"](n,8,0,l(n,9,0,u["ɵnov"](n.parent,0),e.action)),t=u["ɵunv"](n,8,1,l(n,10,0,u["ɵnov"](n.parent,1),e.resource));l(n,8,0,i,t),l(n,12,0,u["ɵnov"](n,13).hasErrors,u["ɵnov"](n,13).hasSuccess),l(n,19,0,u["ɵnov"](n,26).ngClassUntouched,u["ɵnov"](n,26).ngClassTouched,u["ɵnov"](n,26).ngClassPristine,u["ɵnov"](n,26).ngClassDirty,u["ɵnov"](n,26).ngClassValid,u["ɵnov"](n,26).ngClassInvalid,u["ɵnov"](n,26).ngClassPending,u["ɵnov"](n,27).validClass,u["ɵnov"](n,27).invalidClass),l(n,36,0,u["ɵnov"](n,37).hasErrors,u["ɵnov"](n,37).hasSuccess),l(n,43,0,u["ɵnov"](n,49).ngClassUntouched,u["ɵnov"](n,49).ngClassTouched,u["ɵnov"](n,49).ngClassPristine,u["ɵnov"](n,49).ngClassDirty,u["ɵnov"](n,49).ngClassValid,u["ɵnov"](n,49).ngClassInvalid,u["ɵnov"](n,49).ngClassPending,u["ɵnov"](n,50).validClass,u["ɵnov"](n,50).invalidClass),l(n,61,0,u["ɵnov"](n,62).hasErrors,u["ɵnov"](n,62).hasSuccess),l(n,77,0,u["ɵnov"](n,78).hasErrors,u["ɵnov"](n,78).hasSuccess),l(n,92,0,u["ɵnov"](n,99).ngClassUntouched,u["ɵnov"](n,99).ngClassTouched,u["ɵnov"](n,99).ngClassPristine,u["ɵnov"](n,99).ngClassDirty,u["ɵnov"](n,99).ngClassValid,u["ɵnov"](n,99).ngClassInvalid,u["ɵnov"](n,99).ngClassPending,u["ɵnov"](n,100).validClass,u["ɵnov"](n,100).invalidClass),l(n,101,0,u["ɵnov"](n,102).hasErrors,u["ɵnov"](n,102).hasSuccess),l(n,116,0,u["ɵnov"](n,123).ngClassUntouched,u["ɵnov"](n,123).ngClassTouched,u["ɵnov"](n,123).ngClassPristine,u["ɵnov"](n,123).ngClassDirty,u["ɵnov"](n,123).ngClassValid,u["ɵnov"](n,123).ngClassInvalid,u["ɵnov"](n,123).ngClassPending,u["ɵnov"](n,124).validClass,u["ɵnov"](n,124).invalidClass),l(n,127,0,e.isErasure||-1===e.data.applications.selected.indexOf("rbd"));var a=u["ɵunv"](n,134,0,l(n,135,0,u["ɵnov"](n.parent,0),e.action)),o=u["ɵunv"](n,134,1,l(n,136,0,u["ɵnov"](n.parent,1),e.resource));l(n,134,0,a,o)}))}function Ni(l){return u["ɵvid"](0,[u["ɵpid"](0,El.TitleCasePipe,[]),u["ɵpid"](0,Nl.a,[]),u["ɵqud"](671088640,1,{crushInfoTabs:0}),u["ɵqud"](671088640,2,{crushDeletionBtn:0}),u["ɵqud"](671088640,3,{ecpInfoTabs:0}),u["ɵqud"](671088640,4,{ecpDeletionBtn:0}),(l()(),u["ɵand"](16777216,null,null,1,null,Cu)),u["ɵdid"](7,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),u["ɵeld"](8,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),u["ɵand"](16777216,null,null,1,null,Ei)),u["ɵdid"](10,16384,null,0,El.NgIf,[u.ViewContainerRef,u.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var e=n.component;l(n,7,0,!(e.info&&e.ecProfiles)),l(n,10,0,e.info&&e.ecProfiles)}),null)}function Vi(l){return u["ɵvid"](0,[(l()(),u["ɵeld"](0,0,null,null,1,"cd-pool-form",[],null,null,null,Ni,bu)),u["ɵdid"](1,114688,null,0,k,[I.a,ce.a,ce.m,Al.b,m.a,E.a,N.a,Al.b,V.a,c,d,s.a,i.b],null,null)],(function(l,n){l(n,1,0)}),null)}var yi=u["ɵccf"]("cd-pool-form",k,Vi,{},{},[]);e.d(n,"PoolModuleNgFactory",(function(){return wi})),e.d(n,"RoutedPoolModuleNgFactory",(function(){return Ti}));var wi=u["ɵcmf"]($,[],(function(l){return u["ɵmod"]([u["ɵmpd"](512,u.ComponentFactoryResolver,u["ɵCodegenComponentFactoryResolver"],[[8,[Z.a,H.a,X.a,Y.a,Q.a,Q.b,ll.a,nl.a,el.a,ul.a,il.a,tl.a,al.a,ol.a,sl.a,rl.a,dl.a,cl.a,cl.c,cl.b,cl.d,ml.a,fl.a,gl.a,pl.a,hl.a,vl.a,bl.a,Cl.a,Rl.a,Il.a,Hl,An]],[3,u.ComponentFactoryResolver],u.NgModuleRef]),u["ɵmpd"](4608,El.NgLocalization,El.NgLocaleLocalization,[u.LOCALE_ID,[2,El["ɵangular_packages_common_common_a"]]]),u["ɵmpd"](4608,Bn.y,Bn.y,[El.DOCUMENT]),u["ɵmpd"](4608,Bn.r,Bn.r,[]),u["ɵmpd"](4608,Bn.a,Bn.a,[]),u["ɵmpd"](4608,t.D,t.D,[]),u["ɵmpd"](4608,On.a,On.a,[]),u["ɵmpd"](4608,zn.a,zn.a,[]),u["ɵmpd"](4608,Ln.a,Ln.a,[s.a]),u["ɵmpd"](4608,El.DatePipe,El.DatePipe,[u.LOCALE_ID]),u["ɵmpd"](4608,jn.a,jn.a,[]),u["ɵmpd"](4608,Un.a,Un.a,[]),u["ɵmpd"](4608,N.a,N.a,[]),u["ɵmpd"](4608,I.a,I.a,[N.a]),u["ɵmpd"](4608,Mn.a,Mn.a,[N.a]),u["ɵmpd"](4608,O.a,O.a,[N.a]),u["ɵmpd"](4608,Gn.a,Gn.a,[]),u["ɵmpd"](4608,$n.a,$n.a,[]),u["ɵmpd"](4608,Kn.a,Kn.a,[]),u["ɵmpd"](4608,Jn.a,Jn.a,[]),u["ɵmpd"](4608,Wn.a,Wn.a,[El.DatePipe]),u["ɵmpd"](4608,Zn.a,Zn.a,[]),u["ɵmpd"](4608,Hn.a,Hn.a,[]),u["ɵmpd"](4608,Xn.a,Xn.a,[]),u["ɵmpd"](4608,Yn.a,Yn.a,[]),u["ɵmpd"](4608,Qn.a,Qn.a,[]),u["ɵmpd"](4608,le.a,le.a,[s.a]),u["ɵmpd"](4608,Nl.a,Nl.a,[]),u["ɵmpd"](4608,ne.a,ne.a,[]),u["ɵmpd"](4608,ee.a,ee.a,[]),u["ɵmpd"](4608,t.h,t.h,[]),u["ɵmpd"](4608,ue.b,ue.b,[]),u["ɵmpd"](4608,ie.a,ie.a,[]),u["ɵmpd"](4608,te.a,te.a,[u.NgZone,u.RendererFactory2,u.PLATFORM_ID]),u["ɵmpd"](4608,ae.a,ae.a,[u.ComponentFactoryResolver,u.NgZone,u.Injector,te.a,u.ApplicationRef]),u["ɵmpd"](4608,oe.c,oe.c,[]),u["ɵmpd"](4608,se.a,se.a,[]),u["ɵmpd"](4608,Al.b,Al.b,[u.RendererFactory2,ae.a]),u["ɵmpd"](4608,re.f,re.f,[]),u["ɵmpd"](4608,E.a,E.a,[]),u["ɵmpd"](4608,de.a,de.a,[ce.m,E.a]),u["ɵmpd"](4608,me.f,me.f,[]),u["ɵmpd"](4608,fe.t,fe.t,[]),u["ɵmpd"](4608,fe.v,fe.v,[]),u["ɵmpd"](4608,fe.a,fe.a,[]),u["ɵmpd"](4608,fe.h,fe.h,[]),u["ɵmpd"](4608,fe.d,fe.d,[]),u["ɵmpd"](4608,fe.j,fe.j,[]),u["ɵmpd"](4608,fe.l,fe.l,[]),u["ɵmpd"](4608,fe.u,fe.u,[fe.v,fe.l]),u["ɵmpd"](4608,ge.a,ge.a,[]),u["ɵmpd"](1073742336,El.CommonModule,El.CommonModule,[]),u["ɵmpd"](1073742336,Bn.u,Bn.u,[]),u["ɵmpd"](1073742336,t.C,t.C,[]),u["ɵmpd"](1073742336,t.n,t.n,[]),u["ɵmpd"](1073742336,re.e,re.e,[]),u["ɵmpd"](1073742336,pe.a,pe.a,[]),u["ɵmpd"](1073742336,t.y,t.y,[]),u["ɵmpd"](1073742336,ue.c,ue.c,[]),u["ɵmpd"](1073742336,ie.d,ie.d,[]),u["ɵmpd"](1073742336,oe.d,oe.d,[]),u["ɵmpd"](1073742336,se.d,se.d,[]),u["ɵmpd"](1073742336,he.b,he.b,[]),u["ɵmpd"](1073742336,Al.e,Al.e,[]),u["ɵmpd"](1073742336,ve.a,ve.a,[]),u["ɵmpd"](1073742336,yl.f,yl.f,[]),u["ɵmpd"](1073742336,be.ClickOutsideModule,be.ClickOutsideModule,[]),u["ɵmpd"](1073742336,Ce.b,Ce.b,[]),u["ɵmpd"](1073742336,ce.q,ce.q,[[2,ce.v],[2,ce.m]]),u["ɵmpd"](1073742336,Re.a,Re.a,[]),u["ɵmpd"](1073742336,Ie.a,Ie.a,[]),u["ɵmpd"](1073742336,r.a,r.a,[]),u["ɵmpd"](1073742336,Ee.a,Ee.a,[]),u["ɵmpd"](1073742336,me.d,me.d,[]),u["ɵmpd"](1073742336,Ne.a,Ne.a,[]),u["ɵmpd"](1073742336,Ve.a,Ve.a,[]),u["ɵmpd"](1073742336,ye.a,ye.a,[]),u["ɵmpd"](1073742336,fe.g,fe.g,[]),u["ɵmpd"](1073742336,we.b,we.b,[]),u["ɵmpd"](1073742336,Te.a,Te.a,[]),u["ɵmpd"](1073742336,$,$,[]),u["ɵmpd"](256,u.LOCALE_ID,"en-US",[]),u["ɵmpd"](256,re.a,{autoClose:!0,insideClick:!1},[]),u["ɵmpd"](256,u.TRANSLATIONS_FORMAT,"xlf",[])])})),Ti=u["ɵcmf"](W,[],(function(l){return u["ɵmod"]([u["ɵmpd"](512,u.ComponentFactoryResolver,u["ɵCodegenComponentFactoryResolver"],[[8,[Z.a,H.a,X.a,Y.a,Q.a,Q.b,ll.a,nl.a,el.a,ul.a,il.a,tl.a,al.a,ol.a,sl.a,rl.a,dl.a,cl.a,cl.c,cl.b,cl.d,ml.a,fl.a,gl.a,pl.a,hl.a,vl.a,bl.a,Cl.a,Rl.a,Il.a,Hl,An,ou,yi]],[3,u.ComponentFactoryResolver],u.NgModuleRef]),u["ɵmpd"](4608,El.NgLocalization,El.NgLocaleLocalization,[u.LOCALE_ID,[2,El["ɵangular_packages_common_common_a"]]]),u["ɵmpd"](4608,Bn.y,Bn.y,[El.DOCUMENT]),u["ɵmpd"](4608,Bn.r,Bn.r,[]),u["ɵmpd"](4608,Bn.a,Bn.a,[]),u["ɵmpd"](4608,t.D,t.D,[]),u["ɵmpd"](4608,On.a,On.a,[]),u["ɵmpd"](4608,zn.a,zn.a,[]),u["ɵmpd"](4608,Ln.a,Ln.a,[s.a]),u["ɵmpd"](4608,El.DatePipe,El.DatePipe,[u.LOCALE_ID]),u["ɵmpd"](4608,jn.a,jn.a,[]),u["ɵmpd"](4608,Un.a,Un.a,[]),u["ɵmpd"](4608,N.a,N.a,[]),u["ɵmpd"](4608,I.a,I.a,[N.a]),u["ɵmpd"](4608,Mn.a,Mn.a,[N.a]),u["ɵmpd"](4608,O.a,O.a,[N.a]),u["ɵmpd"](4608,Gn.a,Gn.a,[]),u["ɵmpd"](4608,$n.a,$n.a,[]),u["ɵmpd"](4608,Kn.a,Kn.a,[]),u["ɵmpd"](4608,Jn.a,Jn.a,[]),u["ɵmpd"](4608,Wn.a,Wn.a,[El.DatePipe]),u["ɵmpd"](4608,Zn.a,Zn.a,[]),u["ɵmpd"](4608,Hn.a,Hn.a,[]),u["ɵmpd"](4608,Xn.a,Xn.a,[]),u["ɵmpd"](4608,Yn.a,Yn.a,[]),u["ɵmpd"](4608,Qn.a,Qn.a,[]),u["ɵmpd"](4608,le.a,le.a,[s.a]),u["ɵmpd"](4608,Nl.a,Nl.a,[]),u["ɵmpd"](4608,ne.a,ne.a,[]),u["ɵmpd"](4608,ee.a,ee.a,[]),u["ɵmpd"](4608,t.h,t.h,[]),u["ɵmpd"](4608,ue.b,ue.b,[]),u["ɵmpd"](4608,ie.a,ie.a,[]),u["ɵmpd"](4608,te.a,te.a,[u.NgZone,u.RendererFactory2,u.PLATFORM_ID]),u["ɵmpd"](4608,ae.a,ae.a,[u.ComponentFactoryResolver,u.NgZone,u.Injector,te.a,u.ApplicationRef]),u["ɵmpd"](4608,oe.c,oe.c,[]),u["ɵmpd"](4608,se.a,se.a,[]),u["ɵmpd"](4608,Al.b,Al.b,[u.RendererFactory2,ae.a]),u["ɵmpd"](4608,re.f,re.f,[]),u["ɵmpd"](4608,E.a,E.a,[]),u["ɵmpd"](4608,de.a,de.a,[ce.m,E.a]),u["ɵmpd"](4608,me.f,me.f,[]),u["ɵmpd"](4608,fe.t,fe.t,[]),u["ɵmpd"](4608,fe.v,fe.v,[]),u["ɵmpd"](4608,fe.a,fe.a,[]),u["ɵmpd"](4608,fe.h,fe.h,[]),u["ɵmpd"](4608,fe.d,fe.d,[]),u["ɵmpd"](4608,fe.j,fe.j,[]),u["ɵmpd"](4608,fe.l,fe.l,[]),u["ɵmpd"](4608,fe.u,fe.u,[fe.v,fe.l]),u["ɵmpd"](4608,ge.a,ge.a,[]),u["ɵmpd"](1073742336,El.CommonModule,El.CommonModule,[]),u["ɵmpd"](1073742336,Bn.u,Bn.u,[]),u["ɵmpd"](1073742336,t.C,t.C,[]),u["ɵmpd"](1073742336,t.n,t.n,[]),u["ɵmpd"](1073742336,re.e,re.e,[]),u["ɵmpd"](1073742336,pe.a,pe.a,[]),u["ɵmpd"](1073742336,t.y,t.y,[]),u["ɵmpd"](1073742336,ue.c,ue.c,[]),u["ɵmpd"](1073742336,ie.d,ie.d,[]),u["ɵmpd"](1073742336,oe.d,oe.d,[]),u["ɵmpd"](1073742336,se.d,se.d,[]),u["ɵmpd"](1073742336,he.b,he.b,[]),u["ɵmpd"](1073742336,Al.e,Al.e,[]),u["ɵmpd"](1073742336,ve.a,ve.a,[]),u["ɵmpd"](1073742336,yl.f,yl.f,[]),u["ɵmpd"](1073742336,be.ClickOutsideModule,be.ClickOutsideModule,[]),u["ɵmpd"](1073742336,Ce.b,Ce.b,[]),u["ɵmpd"](1073742336,ce.q,ce.q,[[2,ce.v],[2,ce.m]]),u["ɵmpd"](1073742336,Re.a,Re.a,[]),u["ɵmpd"](1073742336,Ie.a,Ie.a,[]),u["ɵmpd"](1073742336,r.a,r.a,[]),u["ɵmpd"](1073742336,Ee.a,Ee.a,[]),u["ɵmpd"](1073742336,me.d,me.d,[]),u["ɵmpd"](1073742336,Ne.a,Ne.a,[]),u["ɵmpd"](1073742336,Ve.a,Ve.a,[]),u["ɵmpd"](1073742336,ye.a,ye.a,[]),u["ɵmpd"](1073742336,fe.g,fe.g,[]),u["ɵmpd"](1073742336,we.b,we.b,[]),u["ɵmpd"](1073742336,Te.a,Te.a,[]),u["ɵmpd"](1073742336,$,$,[]),u["ɵmpd"](1073742336,W,W,[]),u["ɵmpd"](256,u.LOCALE_ID,"en-US",[]),u["ɵmpd"](256,re.a,{autoClose:!0,insideClick:!1},[]),u["ɵmpd"](1024,ce.k,(function(){return[[{path:"",component:G},{path:"create",component:k,data:K},{path:"edit/:name",component:k,data:J}]]}),[]),u["ɵmpd"](256,u.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.1891b10149a7c2d765ac.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.1891b10149a7c2d765ac.js
new file mode 100644 (file)
index 0000000..f809445
--- /dev/null
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{Znkk:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),t=u("sne2"),a=u("Avrn");class i{constructor(l){this.route=l,this.message="The Object Gateway service is not configured."}ngOnInit(){this.routeParamsSubscribe=this.route.params.subscribe(l=>{this.message=l.message})}ngOnDestroy(){this.routeParamsSubscribe.unsubscribe()}}var o=u("s7LF"),s=u("LvDl"),d=u("mrSG"),r=u("IheW"),c=u("LRne"),m=u("5+tZ"),f=u("xTzq"),g=u("pL04");let p=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/bucket"}list(){let l=new r.h;return l=l.append("stats","true"),this.http.get(this.url,{params:l})}enumerate(){return this.http.get(this.url)}get(l){return this.http.get(`${this.url}/${l}`)}create(l,n,u,e,t,a,i,o){return this.http.post(this.url,null,{params:new r.h({fromObject:{bucket:l,uid:n,zonegroup:u,placement_target:e,lock_enabled:String(t),lock_mode:a,lock_retention_period_days:i,lock_retention_period_years:o}})})}update(l,n,u,e,t,a,i,o,s,d){let c=new r.h;return c=c.append("bucket_id",n),c=c.append("uid",u),c=c.append("versioning_state",e),c=c.append("mfa_delete",t),c=c.append("mfa_token_serial",a),c=c.append("mfa_token_pin",i),c=c.append("lock_mode",o),c=c.append("lock_retention_period_days",s),c=c.append("lock_retention_period_years",d),this.http.put(`${this.url}/${l}`,null,{params:c})}delete(l,n=!0){let u=new r.h;return u=u.append("purge_objects",n?"true":"false"),this.http.delete(`${this.url}/${l}`,{params:u})}exists(l){return this.enumerate().pipe(Object(m.a)(n=>{const u=s.indexOf(n,l);return Object(c.a)(-1!==u)}))}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:g.a}),l=d.__decorate([f.a,d.__metadata("design:paramtypes",[r.c])],l),l})(),v=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/site"}get(l){let n=new r.h;return l&&(n=n.append("query",l)),this.http.get(this.url,{params:n})}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:g.a}),l=d.__decorate([f.a,d.__metadata("design:paramtypes",[r.c])],l),l})();var b=u("P8lu"),h=u("oxzT"),C=u("mtw6"),_=u("2EZI"),R=u("1Ni5"),y=u("9nlD"),k=function(l){return l.ENABLED="Enabled",l.DISABLED="Disabled",l}({}),I=function(l){return l.ENABLED="Enabled",l.SUSPENDED="Suspended",l}({});class E{constructor(l,n,u,e,a,i,o,s,d){this.route=l,this.router=n,this.formBuilder=u,this.rgwBucketService=e,this.rgwSiteService=a,this.rgwUserService=i,this.notificationService=o,this.i18n=s,this.actionLabels=d,this.editing=!1,this.error=!1,this.loading=!1,this.owners=null,this.placementTargets=[],this.isVersioningEnabled=!1,this.isVersioningAlreadyEnabled=!1,this.isMfaDeleteEnabled=!1,this.isMfaDeleteAlreadyEnabled=!1,this.icons=h.a,this.editing=this.router.url.startsWith("/rgw/bucket/"+t.e.EDIT),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource=this.i18n("bucket"),this.createForm()}createForm(){const l=this,n=R.a.custom("eitherDaysOrYears",()=>{if(!l.bucketForm||!s.get(l.bucketForm.getRawValue(),"lock_enabled"))return!1;const n=l.bucketForm.getValue("lock_retention_period_years"),u=l.bucketForm.getValue("lock_retention_period_days");return u>0&&n>0||0===u&&0===n}),u=[0,[R.a.number(!1),n]];this.bucketForm=this.formBuilder.group({id:[null],bid:[null,[o.B.required],this.editing?[]:[this.bucketNameValidator()]],owner:[null,[o.B.required]],"placement-target":[null,this.editing?[]:[o.B.required]],versioning:[null],"mfa-delete":[null],"mfa-token-serial":[""],"mfa-token-pin":[""],lock_enabled:[{value:!1,disabled:this.editing}],lock_mode:["COMPLIANCE"],lock_retention_period_days:u,lock_retention_period_years:u})}ngOnInit(){this.rgwUserService.enumerate().subscribe(l=>{this.owners=l.sort()}),this.editing||this.rgwSiteService.get("placement-targets").subscribe(l=>{this.zonegroup=l.zonegroup,s.forEach(l.placement_targets,l=>{l.description=`${l.name} (${this.i18n("pool")}: ${l.data_pool})`,this.placementTargets.push(l)}),1===this.placementTargets.length&&this.bucketForm.get("placement-target").setValue(this.placementTargets[0].name)}),this.route.params.subscribe(l=>{if(!l.hasOwnProperty("bid"))return;const n=decodeURIComponent(l.bid);this.loading=!0,this.rgwBucketService.get(n).subscribe(l=>{this.loading=!1;const n=s.clone(this.bucketForm.getRawValue());let u=s.pick(l,s.keys(n));u["placement-target"]=l.placement_rule,u=s.merge(n,u),this.bucketForm.setValue(u),this.editing&&(this.setVersioningStatus(l.versioning),this.isVersioningAlreadyEnabled=this.isVersioningEnabled,this.setMfaDeleteStatus(l.mfa_delete),this.isMfaDeleteAlreadyEnabled=this.isMfaDeleteEnabled,this.setMfaDeleteValidators())})})}goToListView(){this.router.navigate(["/rgw/bucket"])}submit(){if(this.bucketForm.pristine)return void this.goToListView();const l=this.bucketForm.value;if(this.editing){const n=this.getVersioningStatus(),u=this.getMfaDeleteStatus();this.rgwBucketService.update(l.bid,l.id,l.owner,n,u,l["mfa-token-serial"],l["mfa-token-pin"],l.lock_mode,l.lock_retention_period_days,l.lock_retention_period_years).subscribe(()=>{this.notificationService.show(C.a.success,this.i18n('Updated Object Gateway bucket "{{bid}}".',l)),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}else this.rgwBucketService.create(l.bid,l.owner,this.zonegroup,l["placement-target"],l.lock_enabled,l.lock_mode,l.lock_retention_period_days,l.lock_retention_period_years).subscribe(()=>{this.notificationService.show(C.a.success,this.i18n('Created Object Gateway bucket "{{bid}}"',l)),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}bucketNameValidator(){const l=this.rgwBucketService;return n=>new Promise(u=>{if(n.pristine||""===n.value)return void u(null);const e=[];e.push(l=>!R.a.ip()(l)),e.push(l=>s.inRange(l.length,3,64)),e.push(l=>{const n=s.split(l,".");return s.every(n,l=>l===s.toLower(l)&&!l.includes("_")&&!!/[0-9a-z-]/.test(l)&&s.every([0,l.length],n=>/[a-z]/.test(l[n])||s.isInteger(s.parseInt(l[n]))))}),s.every(e,l=>l(n.value))?l.exists(n.value).subscribe(l=>{u(l?{bucketNameExists:!0}:null)}):u({bucketNameInvalid:!0})})}areMfaCredentialsRequired(){return this.isMfaDeleteEnabled!==this.isMfaDeleteAlreadyEnabled||this.isMfaDeleteAlreadyEnabled&&this.isVersioningEnabled!==this.isVersioningAlreadyEnabled}setMfaDeleteValidators(){const l=this.bucketForm.get("mfa-token-serial"),n=this.bucketForm.get("mfa-token-pin");this.areMfaCredentialsRequired()?(l.setValidators(o.B.required),n.setValidators(o.B.required)):(l.setValidators(null),n.setValidators(null)),l.updateValueAndValidity(),n.updateValueAndValidity()}getVersioningStatus(){return this.isVersioningEnabled?I.ENABLED:I.SUSPENDED}setVersioningStatus(l){this.isVersioningEnabled=l===I.ENABLED}updateVersioning(){this.isVersioningEnabled=!this.isVersioningEnabled,this.setMfaDeleteValidators()}getMfaDeleteStatus(){return this.isMfaDeleteEnabled?k.ENABLED:k.DISABLED}setMfaDeleteStatus(l){this.isMfaDeleteEnabled=l===k.ENABLED}updateMfaDelete(){this.isMfaDeleteEnabled=!this.isMfaDeleteEnabled,this.setMfaDeleteValidators()}}var w=u("HDdC"),q=u("cp0P"),N=u("+fVR"),T=u("0+/T"),x=u("uIqm"),V=u("vCyI"),S=u("Fgil"),D=u("o4+5"),F=u("aexS"),j=u("EgGo");const B=new j.a("rgw/bucket");class P extends N.a{constructor(l,n,u,e,t,a,i,o,s,d){super(),this.authStorageService=l,this.dimlessBinaryPipe=n,this.dimlessPipe=u,this.rgwBucketService=e,this.bsModalService=t,this.i18n=a,this.urlBuilder=i,this.actionLabels=o,this.ngZone=s,this.changeDetectorRef=d,this.columns=[],this.buckets=[],this.selection=new V.a,this.isStale=!1,this.permission=this.authStorageService.getPermissions().rgw;const r=()=>this.selection.first()&&""+encodeURIComponent(this.selection.first().bid);this.tableActions=[{permission:"create",icon:h.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:h.a.edit,routerLink:()=>this.urlBuilder.getEdit(r()),name:this.actionLabels.EDIT},{permission:"delete",icon:h.a.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.timeConditionReached()}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"bid",flexGrow:2},{name:this.i18n("Owner"),prop:"owner",flexGrow:3},{name:this.i18n("Used Capacity"),prop:"bucket_size",flexGrow:.5,pipe:this.dimlessBinaryPipe},{name:this.i18n("Capacity Limit %"),prop:"size_usage",cellTemplate:this.bucketSizeTpl,flexGrow:1},{name:this.i18n("Objects"),prop:"num_objects",flexGrow:.5,pipe:this.dimlessPipe},{name:this.i18n("Object Limit %"),prop:"object_usage",cellTemplate:this.bucketObjectTpl,flexGrow:1}]}transformBucketData(){s.forEach(this.buckets,l=>{const n=l.bucket_quota.max_size,u=l.bucket_quota.max_objects;let e=0,t=0;s.forEach(l.usage,l=>{e+=l.size_actual,t+=l.num_objects}),l.bucket_size=e,l.num_objects=t,l.size_usage=n>0?e/n:void 0,l.object_usage=u>0?t/u:void 0})}timeConditionReached(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.isStale=!0})},1e4)})}getBucketList(l){this.isStale=!1,this.timeConditionReached(),this.rgwBucketService.list().subscribe(l=>{this.buckets=l,this.transformBucketData(),this.changeDetectorRef.detectChanges()},()=>{l.error()})}updateSelection(l){this.selection=l}deleteAction(){this.bsModalService.show(T.a,{initialState:{itemDescription:this.i18n(this.selection.hasSingleSelection?"bucket":"buckets"),itemNames:this.selection.selected.map(l=>l.bid),submitActionObservable:()=>new w.a(l=>{Object(q.a)(this.selection.selected.map(l=>this.rgwBucketService.delete(l.bid))).subscribe(null,n=>{l.error(n),this.table.refreshBtn()},()=>{l.complete(),this.table.refreshBtn()})})}})}}let A=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/daemon"}list(){return this.http.get(this.url)}get(l){return this.http.get(`${this.url}/${l}`)}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:g.a}),l=d.__decorate([f.a,d.__metadata("design:paramtypes",[r.c])],l),l})();var M=u("85J/");class O extends N.a{constructor(l,n,u,e,t){super(),this.rgwDaemonService=l,this.authStorageService=n,this.cephShortVersionPipe=u,this.i18n=e,this.rgwSiteService=t,this.columns=[],this.daemons=[]}ngOnInit(){this.grafanaPermission=this.authStorageService.getPermissions().grafana,this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:2},{name:this.i18n("Hostname"),prop:"server_hostname",flexGrow:2},{name:this.i18n("Version"),prop:"version",flexGrow:1,pipe:this.cephShortVersionPipe}],this.rgwSiteService.get("realms").subscribe(l=>this.isMultiSite=l.length>0)}getDaemonList(l){this.rgwDaemonService.list().subscribe(l=>{this.daemons=l},()=>{l.error()})}}var U=u("GyhO"),L=u("aXbf"),z=function(l){return l.USERS="users",l.BUCKETS="buckets",l.METADATA="metadata",l.USAGE="usage",l.ZONE="zone",l}({});let G=(()=>{class l{static getAll(){return Object.values(l.capabilities)}}return l.capabilities=z,l})();class K{constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.editing=!0,this.types=[],this.resource=this.i18n("capability"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({type:[null,[o.B.required]],perm:[null,[o.B.required]]})}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.ADD}setValues(l,n){this.formGroup.setValue({type:l,perm:n})}setCapabilities(l){const n=[];l.forEach(l=>{n.push(l.type)}),this.types=[],G.getAll().forEach(l=>{-1===s.indexOf(n,l)&&this.types.push(l)})}onSubmit(){this.submitAction.emit(this.formGroup.value),this.bsModalRef.hide()}}class ${constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.viewing=!0,this.userCandidates=[],this.resource=this.i18n("S3 Key"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({user:[null,[o.B.required]],generate_key:[!0],access_key:[null,[R.a.requiredIf({generate_key:!1})]],secret_key:[null,[R.a.requiredIf({generate_key:!1})]]})}setViewing(l=!0){this.viewing=l,this.action=this.viewing?this.actionLabels.SHOW:this.actionLabels.CREATE}setValues(l,n,u){this.formGroup.setValue({user:l,generate_key:s.isEmpty(n),access_key:n,secret_key:u})}setUserCandidates(l){this.userCandidates=l}onSubmit(){this.submitAction.emit(this.formGroup.value),this.bsModalRef.hide()}}class Z{}class Q{constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.editing=!0,this.subusers=[],this.resource=this.i18n("Subuser"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({uid:[null],subuid:[null,[o.B.required,this.subuserValidator()]],perm:[null,[o.B.required]],generate_secret:[!0],secret_key:[null,[R.a.requiredIf({generate_secret:!1})]]})}subuserValidator(){const l=this;return n=>l.editing||Object(R.b)(n.value)?null:l.subusers.some(u=>s.isEqual(l.getSubuserName(u.id),n.value))?{subuserIdExists:!0}:null}getSubuserName(l){if(s.isEmpty(l))return l;const n=l.match(/([^:]+)(:(.+))?/);return s.isUndefined(n[3])?n[1]:n[3]}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE}setValues(l,n="",u=""){this.formGroup.setValue({uid:l,subuid:this.getSubuserName(n),perm:u,generate_secret:!0,secret_key:null})}setSubusers(l){this.subusers=l}onSubmit(){const l=this.formGroup.value,n=new Z;n.id=`${l.uid}:${l.subuid}`,n.permissions=l.perm,n.generate_secret=l.generate_secret,n.secret_key=l.secret_key,this.submitAction.emit(n),this.bsModalRef.hide()}}class Y{constructor(l,n,u){this.bsModalRef=l,this.i18n=n,this.actionLabels=u,this.resource=this.i18n("Swift Key"),this.action=this.actionLabels.SHOW}setValues(l,n){this.user=l,this.secret_key=n}}class W{constructor(l,n,u,e,t,a,i,o){this.formBuilder=l,this.route=n,this.router=u,this.rgwUserService=e,this.bsModalService=t,this.notificationService=a,this.i18n=i,this.actionLabels=o,this.editing=!1,this.error=!1,this.loading=!1,this.submitObservables=[],this.icons=h.a,this.subusers=[],this.s3Keys=[],this.swiftKeys=[],this.capabilities=[],this.resource=this.i18n("user"),this.subuserLabel=this.i18n("subuser"),this.s3keyLabel=this.i18n("S3 Key"),this.capabilityLabel=this.i18n("capability"),this.createForm()}createForm(){this.userForm=this.formBuilder.group({uid:[null,[o.B.required],[R.a.unique(this.rgwUserService.exists,this.rgwUserService)]],display_name:[null,[o.B.required]],email:[null,[R.a.email],[R.a.unique(this.rgwUserService.emailExists,this.rgwUserService)]],max_buckets_mode:[1],max_buckets:[1e3,[R.a.requiredIf({max_buckets_mode:"1"}),R.a.number(!1),o.B.min(1)]],suspended:[!1],generate_key:[!0],access_key:[null,[R.a.requiredIf({generate_key:!1})]],secret_key:[null,[R.a.requiredIf({generate_key:!1})]],user_quota_enabled:[!1],user_quota_max_size_unlimited:[!0],user_quota_max_size:[null,[R.a.composeIf({user_quota_enabled:!0,user_quota_max_size_unlimited:!1},[o.B.required,this.quotaMaxSizeValidator])]],user_quota_max_objects_unlimited:[!0],user_quota_max_objects:[null,[o.B.min(0),R.a.requiredIf({user_quota_enabled:!0,user_quota_max_objects_unlimited:!1})]],bucket_quota_enabled:[!1],bucket_quota_max_size_unlimited:[!0],bucket_quota_max_size:[null,[R.a.composeIf({bucket_quota_enabled:!0,bucket_quota_max_size_unlimited:!1},[o.B.required,this.quotaMaxSizeValidator])]],bucket_quota_max_objects_unlimited:[!0],bucket_quota_max_objects:[null,[o.B.min(0),R.a.requiredIf({bucket_quota_enabled:!0,bucket_quota_max_objects_unlimited:!1})]]})}ngOnInit(){this.editing=this.router.url.startsWith("/rgw/user/"+t.e.EDIT),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.route.params.subscribe(l=>{if(!l.hasOwnProperty("uid"))return;const n=decodeURIComponent(l.uid);this.loading=!0;const u=[];u.push(this.rgwUserService.get(n)),u.push(this.rgwUserService.getQuota(n)),Object(q.a)(u).subscribe(l=>{this.loading=!1;const n=s.clone(this.userForm.value);let u=s.pick(l[0],s.keys(this.userForm.value));switch(u.max_buckets){case-1:u.max_buckets_mode=-1,u.max_buckets="";break;case 0:u.max_buckets_mode=0,u.max_buckets="";break;default:u.max_buckets_mode=1}["user","bucket"].forEach(n=>{const e=l[1][n+"_quota"];u[n+"_quota_enabled"]=e.enabled,e.max_size<0?(u[n+"_quota_max_size_unlimited"]=!0,u[n+"_quota_max_size"]=null):(u[n+"_quota_max_size_unlimited"]=!1,u[n+"_quota_max_size"]=e.max_size+" B"),e.max_objects<0?(u[n+"_quota_max_objects_unlimited"]=!0,u[n+"_quota_max_objects"]=null):(u[n+"_quota_max_objects_unlimited"]=!1,u[n+"_quota_max_objects"]=e.max_objects)}),u=s.merge(n,u),this.userForm.setValue(u),this.subusers=l[0].subusers,this.s3Keys=l[0].keys,this.swiftKeys=l[0].swift_keys;const e={"read, write":"*"};l[0].caps.forEach(l=>{l.perm in e&&(l.perm=e[l.perm])}),this.capabilities=l[0].caps},l=>{this.error=l})})}goToListView(){this.router.navigate(["/rgw/user"])}onSubmit(){let l;if(this.userForm.pristine)return void this.goToListView();const n=this.userForm.getValue("uid");if(this.editing){if(this._isGeneralDirty()){const l=this._getUpdateArgs();this.submitObservables.push(this.rgwUserService.update(n,l))}l=this.i18n('Updated Object Gateway user "{{uid}}"',{uid:n})}else{const u=this._getCreateArgs();this.submitObservables.push(this.rgwUserService.create(u)),l=this.i18n('Created Object Gateway user "{{uid}}"',{uid:n})}if(this._isUserQuotaDirty()){const l=this._getUserQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,l))}if(this._isBucketQuotaDirty()){const l=this._getBucketQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,l))}Object(U.a)(...this.submitObservables).subscribe({error:()=>{this.userForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.notificationService.show(C.a.success,l),this.goToListView()}})}quotaMaxSizeValidator(l){return Object(R.b)(l.value)?null:null===RegExp("^(\\d+(\\.\\d+)?)\\s*(B|K(B|iB)?|M(B|iB)?|G(B|iB)?|T(B|iB)?)?$","i").exec(l.value)||(new L.a).toBytes(l.value)<1024?{quotaMaxSize:!0}:null}setSubuser(l,n){const u={"full-control":"full","read-write":"readwrite"},e=this.userForm.getValue("uid");this.submitObservables.push(this.rgwUserService.createSubuser(e,{subuser:l.id,access:l.permissions in u?u[l.permissions]:l.permissions,key_type:"swift",secret_key:l.secret_key,generate_secret:l.generate_secret?"true":"false"})),s.isNumber(n)?this.subusers[n]=l:(this.subusers.push(l),this.swiftKeys.push({user:l.id,secret_key:l.generate_secret?"Apply your changes first...":l.secret_key})),this.userForm.markAsDirty()}deleteSubuser(l){const n=this.subusers[l];this.submitObservables.push(this.rgwUserService.deleteSubuser(this.userForm.getValue("uid"),n.id)),this.s3Keys=this.s3Keys.filter(l=>l.user!==n.id),this.swiftKeys=this.swiftKeys.filter(l=>l.user!==n.id),this.subusers.splice(l,1),this.userForm.markAsDirty()}setCapability(l,n){const u=this.userForm.getValue("uid");if(s.isNumber(n)){const e=this.capabilities[n];this.submitObservables.push(this.rgwUserService.deleteCapability(u,e.type,e.perm)),this.submitObservables.push(this.rgwUserService.addCapability(u,l.type,l.perm)),this.capabilities[n]=l}else this.submitObservables.push(this.rgwUserService.addCapability(u,l.type,l.perm)),this.capabilities.push(l);this.userForm.markAsDirty()}deleteCapability(l){const n=this.capabilities[l];this.submitObservables.push(this.rgwUserService.deleteCapability(this.userForm.getValue("uid"),n.type,n.perm)),this.capabilities.splice(l,1),this.userForm.markAsDirty()}hasAllCapabilities(){return!s.difference(G.getAll(),s.map(this.capabilities,"type")).length}setS3Key(l,n){if(s.isNumber(n));else{const n=l.user.match(/([^:]+)(:(.+))?/),u=n[1],e={subuser:n[2]?n[3]:"",generate_key:l.generate_key?"true":"false"};"false"===e.generate_key&&(s.isNil(l.access_key)||(e.access_key=l.access_key),s.isNil(l.secret_key)||(e.secret_key=l.secret_key)),this.submitObservables.push(this.rgwUserService.addS3Key(u,e)),this.s3Keys.push({user:l.user,access_key:l.generate_key?"Apply your changes first...":l.access_key,secret_key:l.generate_key?"Apply your changes first...":l.secret_key})}this.userForm.markAsDirty()}deleteS3Key(l){const n=this.s3Keys[l];this.submitObservables.push(this.rgwUserService.deleteS3Key(this.userForm.getValue("uid"),n.access_key)),this.s3Keys.splice(l,1),this.userForm.markAsDirty()}showSubuserModal(l){const n=this.userForm.getValue("uid"),u=this.bsModalService.show(Q);if(s.isNumber(l)){const e=this.subusers[l];u.content.setEditing(),u.content.setValues(n,e.id,e.permissions)}else u.content.setEditing(!1),u.content.setValues(n),u.content.setSubusers(this.subusers);u.content.submitAction.subscribe(n=>{this.setSubuser(n,l)})}showS3KeyModal(l){const n=this.bsModalService.show($);if(s.isNumber(l)){const u=this.s3Keys[l];n.content.setViewing(),n.content.setValues(u.user,u.access_key,u.secret_key)}else{const l=this._getS3KeyUserCandidates();n.content.setViewing(!1),n.content.setUserCandidates(l),n.content.submitAction.subscribe(l=>{this.setS3Key(l)})}}showSwiftKeyModal(l){const n=this.bsModalService.show(Y),u=this.swiftKeys[l];n.content.setValues(u.user,u.secret_key)}showCapabilityModal(l){const n=this.bsModalService.show(K);if(s.isNumber(l)){const u=this.capabilities[l];n.content.setEditing(),n.content.setValues(u.type,u.perm)}else n.content.setEditing(!1),n.content.setCapabilities(this.capabilities);n.content.submitAction.subscribe(n=>{this.setCapability(n,l)})}_isGeneralDirty(){return["display_name","email","max_buckets_mode","max_buckets","suspended"].some(l=>this.userForm.get(l).dirty)}_isUserQuotaDirty(){return["user_quota_enabled","user_quota_max_size_unlimited","user_quota_max_size","user_quota_max_objects_unlimited","user_quota_max_objects"].some(l=>this.userForm.get(l).dirty)}_isBucketQuotaDirty(){return["bucket_quota_enabled","bucket_quota_max_size_unlimited","bucket_quota_max_size","bucket_quota_max_objects_unlimited","bucket_quota_max_objects"].some(l=>this.userForm.get(l).dirty)}_getCreateArgs(){const l={uid:this.userForm.getValue("uid"),display_name:this.userForm.getValue("display_name"),suspended:this.userForm.getValue("suspended"),email:"",max_buckets:this.userForm.getValue("max_buckets"),generate_key:this.userForm.getValue("generate_key"),access_key:"",secret_key:""},n=this.userForm.getValue("email");s.isString(n)&&n.length>0&&s.merge(l,{email:n}),this.userForm.getValue("generate_key")||s.merge(l,{generate_key:!1,access_key:this.userForm.getValue("access_key"),secret_key:this.userForm.getValue("secret_key")});const u=parseInt(this.userForm.getValue("max_buckets_mode"),10);return s.includes([-1,0],u)&&s.merge(l,{max_buckets:u}),l}_getUpdateArgs(){const l={},n=["display_name","email","max_buckets","suspended"];for(const e of n)l[e]=this.userForm.getValue(e);const u=parseInt(this.userForm.getValue("max_buckets_mode"),10);return s.includes([-1,0],u)&&(l.max_buckets=u),l}_getUserQuotaArgs(){const l={quota_type:"user",enabled:this.userForm.getValue("user_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("user_quota_max_size_unlimited")){const n=(new L.a).toBytes(this.userForm.getValue("user_quota_max_size"));l.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("user_quota_max_objects_unlimited")||(l.max_objects=this.userForm.getValue("user_quota_max_objects")),l}_getBucketQuotaArgs(){const l={quota_type:"bucket",enabled:this.userForm.getValue("bucket_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("bucket_quota_max_size_unlimited")){const n=(new L.a).toBytes(this.userForm.getValue("bucket_quota_max_size"));l.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("bucket_quota_max_objects_unlimited")||(l.max_objects=this.userForm.getValue("bucket_quota_max_objects")),l}_getS3KeyUserCandidates(){let l=[];const n=this.userForm.getValue("uid");return s.isString(n)&&!s.isEmpty(n)&&l.push(n),this.subusers.forEach(n=>{l.push(n.id)}),this.s3Keys.forEach(n=>{l.push(n.user)}),l=s.uniq(l),l}onMaxBucketsModeChange(l){"1"===l&&(this.userForm.get("max_buckets").valid||this.userForm.patchValue({max_buckets:1e3}))}}var J=u("x38r");const X=new j.a("rgw/user");class H extends N.a{constructor(l,n,u,e,t,a,i){super(),this.authStorageService=l,this.rgwUserService=n,this.bsModalService=u,this.i18n=e,this.urlBuilder=t,this.actionLabels=a,this.ngZone=i,this.columns=[],this.users=[],this.selection=new V.a,this.isStale=!1,this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:this.i18n("Username"),prop:"uid",flexGrow:1},{name:this.i18n("Full name"),prop:"display_name",flexGrow:1},{name:this.i18n("Email address"),prop:"email",flexGrow:1},{name:this.i18n("Suspended"),prop:"suspended",flexGrow:1,cellClass:"text-center",cellTransformation:J.a.checkIcon},{name:this.i18n("Max. buckets"),prop:"max_buckets",flexGrow:1,cellTransformation:J.a.map,customTemplateConfig:{"-1":this.i18n("Disabled"),0:this.i18n("Unlimited")}}];const o=()=>this.selection.first()&&""+encodeURIComponent(this.selection.first().uid);this.tableActions=[{permission:"create",icon:h.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:h.a.edit,routerLink:()=>this.urlBuilder.getEdit(o()),name:this.actionLabels.EDIT},{permission:"delete",icon:h.a.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.timeConditionReached()}timeConditionReached(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.isStale=!0})},1e4)})}getUserList(l){this.isStale=!1,this.timeConditionReached(),this.rgwUserService.list().subscribe(l=>{this.users=l},()=>{l.error()})}updateSelection(l){this.selection=l}deleteAction(){this.bsModalService.show(T.a,{initialState:{itemDescription:this.i18n(this.selection.hasSingleSelection?"user":"users"),itemNames:this.selection.selected.map(l=>l.uid),submitActionObservable:()=>new w.a(l=>{Object(q.a)(this.selection.selected.map(l=>this.rgwUserService.delete(l.uid))).subscribe(null,n=>{l.error(n),this.table.refreshBtn()},()=>{l.complete(),this.table.refreshBtn()})})}})}}class ll{}const nl={breadcrumbs:"Daemons"},ul={breadcrumbs:"Users"},el={breadcrumbs:t.a.CREATE},tl={breadcrumbs:t.a.EDIT},al={breadcrumbs:"Buckets"},il={breadcrumbs:t.a.CREATE},ol={breadcrumbs:t.a.EDIT},sl={breadcrumbs:"Object Gateway"};class dl{}var rl=u("MdoF"),cl=u("ES0t"),ml=u("Xg1U"),fl=u("z5nN"),gl=u("iutN"),pl=u("pMnS"),vl=u("EEJc"),bl=u("PEr+"),hl=u("a40w"),Cl=u("hfeG"),_l=u("2ZVE"),Rl=u("a278"),yl=u("insk"),kl=u("cUpR"),Il=u("20UP"),El=u("GiVz"),wl=u("pKUh"),ql=u("sLuX"),Nl=u("FSuO"),Tl=u("a0VL"),xl=u("j8L6"),Vl=u("b5OY"),Sl=u("pxLl"),Dl=u("SVse");class Fl{constructor(l,n){this.rgwDaemonService=l,this.authStorageService=n,this.serviceId="",this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection&&(this.serviceId=this.selection.id)}getMetaData(){s.isEmpty(this.serviceId)||this.rgwDaemonService.get(this.serviceId).subscribe(l=>{this.metadata=l.rgw_metadata})}}var jl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Bl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","x5ARzZtmk"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,El.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){var u=n.component;l(n,1,0,"Performance Details"),l(n,3,0,"rgw-instance-detail?var-rgw_servers=rgw."+u.serviceId,"one","x5ARzZtmk")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function Pl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,wl.b,wl.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,[[null,"fetchData"]],(function(l,n,u){var e=!0;return"fetchData"===n&&(e=!1!==l.component.getMetaData()&&e),e}),ql.b,ql.a)),e["ɵdid"](5,638976,null,0,Nl.a,[Tl.a],{data:[0,"data"]},{fetchData:"fetchData"}),(l()(),e["ɵeld"](6,0,null,0,3,"tab",[["heading","Performance Counters"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](7,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](8,0,null,null,1,"cd-table-performance-counter",[["serviceType","rgw"]],null,null,null,xl.b,xl.a)),e["ɵdid"](9,114688,null,0,Vl.a,[Sl.a,El.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,Bl)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.metadata),l(n,7,0,"Performance Counters"),l(n,9,0,"rgw",u.serviceId),l(n,11,0,u.grafanaPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,6,0,e["ɵnov"](n,7).id,e["ɵnov"](n,7).active,e["ɵnov"](n,7).addClass,e["ɵnov"](n,7).role,e["ɵnov"](n,7).ariaLabelledby)}))}function Al(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Pl)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,1,0,n.component.selection)}),null)}function Ml(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-daemon-details",[],null,null,null,Al,jl)),e["ɵdid"](1,573440,null,0,Fl,[A,F.a],null,null)],null,null)}var Ol=e["ɵccf"]("cd-rgw-daemon-details",Fl,Ml,{selection:"selection"},{},[]),Ul=u("iExv");class Ll{constructor(l){this.rgwBucketService=l}ngOnChanges(){this.selection&&this.rgwBucketService.get(this.selection.bid).subscribe(l=>{this.selection=l})}}var zl=e["ɵcrt"]({encapsulation:0,styles:[["table[_ngcontent-%COMP%]{table-layout:fixed}table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{word-wrap:break-word}"]],data:{}});function Gl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function Kl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.selection.bucket_quota.max_size));l(n,1,0,t)}))}function $l(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function Zl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.selection.bucket_quota.max_objects)}))}function Ql(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](3,0,null,null,21,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,20,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,6,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,Gl)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Kl)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](18,0,null,null,6,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,$l)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Zl)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,u.selection.bucket_quota.max_size<=-1),l(n,17,0,u.selection.bucket_quota.max_size>-1),l(n,22,0,u.selection.bucket_quota.max_objects<=-1),l(n,24,0,u.selection.bucket_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,1),u.selection.bucket_quota.enabled));l(n,9,0,t)}))}function Yl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mode"])),(l()(),e["ɵeld"](4,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](5,null,["",""])),(l()(),e["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Days"])),(l()(),e["ɵeld"](9,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](10,null,["",""])),(l()(),e["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Years"])),(l()(),e["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](15,null,["",""]))],null,(function(l,n){var u=n.component;l(n,5,0,u.selection.lock_mode),l(n,10,0,u.selection.lock_retention_period_days),l(n,15,0,u.selection.lock_retention_period_years)}))}function Wl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,82,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,67,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,66,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](7,null,["",""])),(l()(),e["ɵeld"](8,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["ID"])),(l()(),e["ɵeld"](11,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](12,null,["",""])),(l()(),e["ɵeld"](13,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Owner"])),(l()(),e["ɵeld"](16,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](17,null,["",""])),(l()(),e["ɵeld"](18,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Index type"])),(l()(),e["ɵeld"](21,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](22,null,["",""])),(l()(),e["ɵeld"](23,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](24,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Placement rule"])),(l()(),e["ɵeld"](26,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](27,null,["",""])),(l()(),e["ɵeld"](28,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](29,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Marker"])),(l()(),e["ɵeld"](31,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](32,null,["",""])),(l()(),e["ɵeld"](33,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](34,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum marker"])),(l()(),e["ɵeld"](36,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](37,null,["",""])),(l()(),e["ɵeld"](38,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](39,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Version"])),(l()(),e["ɵeld"](41,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](42,null,["",""])),(l()(),e["ɵeld"](43,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](44,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Master version"])),(l()(),e["ɵeld"](46,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](47,null,["",""])),(l()(),e["ɵeld"](48,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](49,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Modification time"])),(l()(),e["ɵeld"](51,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](52,null,["",""])),e["ɵppd"](53,1),(l()(),e["ɵeld"](54,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](55,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Zonegroup"])),(l()(),e["ɵeld"](57,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](58,null,["",""])),(l()(),e["ɵeld"](59,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](60,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Versioning"])),(l()(),e["ɵeld"](62,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](63,null,["",""])),(l()(),e["ɵeld"](64,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](65,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["MFA Delete"])),(l()(),e["ɵeld"](67,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](68,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,Ql)),e["ɵdid"](70,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](71,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Locking"])),(l()(),e["ɵeld"](73,0,null,null,9,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](74,0,null,null,8,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](75,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](76,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](78,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](79,null,["",""])),e["ɵppd"](80,1),(l()(),e["ɵand"](16777216,null,null,1,null,Yl)),e["ɵdid"](82,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,70,0,u.selection.bucket_quota),l(n,82,0,u.selection.lock_enabled)}),(function(l,n){var u=n.component;l(n,7,0,u.selection.bid),l(n,12,0,u.selection.id),l(n,17,0,u.selection.owner),l(n,22,0,u.selection.index_type),l(n,27,0,u.selection.placement_rule),l(n,32,0,u.selection.marker),l(n,37,0,u.selection.max_marker),l(n,42,0,u.selection.ver),l(n,47,0,u.selection.master_ver);var t=e["ɵunv"](n,52,0,l(n,53,0,e["ɵnov"](n.parent.parent,0),u.selection.mtime));l(n,52,0,t),l(n,58,0,u.selection.zonegroup),l(n,63,0,u.selection.versioning),l(n,68,0,u.selection.mfa_delete);var a=e["ɵunv"](n,79,0,l(n,80,0,e["ɵnov"](n.parent.parent,1),u.selection.lock_enabled));l(n,79,0,a)}))}function Jl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,wl.b,wl.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Wl)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.selection)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function Xl(l){return e["ɵvid"](0,[e["ɵpid"](0,Tl.a,[Dl.DatePipe]),e["ɵpid"](0,Ul.a,[El.a]),e["ɵpid"](0,D.a,[L.a]),(l()(),e["ɵand"](16777216,null,null,1,null,Jl)),e["ɵdid"](4,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,4,0,n.component.selection)}),null)}function Hl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-bucket-details",[],null,null,null,Xl,zl)),e["ɵdid"](1,573440,null,0,Ll,[p],null,null)],null,null)}var ln=e["ɵccf"]("cd-rgw-bucket-details",Ll,Hl,{selection:"selection"},{},[]),nn=u("25BL"),un=u("FE24"),en=u("z/SZ"),tn=u("GS7A"),an=u("TJUb");class on{constructor(l,n,u){this.rgwUserService=l,this.bsModalService=n,this.i18n=u,this.keys=[],this.keysColumns=[],this.keysSelection=new V.a,this.icons=h.a}ngOnInit(){this.keysColumns=[{name:this.i18n("Username"),prop:"username",flexGrow:1},{name:this.i18n("Type"),prop:"type",flexGrow:1}],this.maxBucketsMap={"-1":this.i18n("Disabled"),0:this.i18n("Unlimited")}}ngOnChanges(){this.selection&&(this.user=this.selection,this.user.subusers=s.sortBy(this.user.subusers,"id"),this.user.caps=s.sortBy(this.user.caps,"type"),this.rgwUserService.getQuota(this.user.uid).subscribe(l=>{s.extend(this.user,l)}),this.keys=[],this.user.keys&&this.user.keys.forEach(l=>{this.keys.push({id:this.keys.length+1,type:"S3",username:l.user,ref:l})}),this.user.swift_keys&&this.user.swift_keys.forEach(l=>{this.keys.push({id:this.keys.length+1,type:"Swift",username:l.user,ref:l})}),this.keys=s.sortBy(this.keys,"user"))}updateKeysSelection(l){this.keysSelection=l}showKeyModal(){const l=this.keysSelection.first(),n=this.bsModalService.show("S3"===l.type?$:Y);switch(l.type){case"S3":n.content.setViewing(),n.content.setValues(l.ref.user,l.ref.access_key,l.ref.secret_key);break;case"Swift":n.content.setValues(l.ref.user,l.ref.secret_key)}}}var sn=u("LqlI"),dn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email address"])),(l()(),e["ɵeld"](3,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](4,null,["",""]))],null,(function(l,n){l(n,4,0,n.component.user.email)}))}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," (",") "]))],null,(function(l,n){l(n,1,0,n.context.$implicit.id,n.context.$implicit.permissions)}))}function mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Subusers"])),(l()(),e["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,cn)),e["ɵdid"](5,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.component.user.subusers)}),null)}function fn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," (",") "]))],null,(function(l,n){l(n,1,0,n.context.$implicit.type,n.context.$implicit.perm)}))}function gn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Capabilities"])),(l()(),e["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,fn)),e["ɵdid"](5,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.component.user.caps)}),null)}function pn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function bn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.user.user_quota.max_size));l(n,1,0,t)}))}function hn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function _n(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.user.user_quota.max_objects)}))}function Rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,28,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User quota"])),(l()(),e["ɵeld"](3,0,null,null,25,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,24,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,pn)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vn)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bn)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](20,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,hn)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Cn)),e["ɵdid"](26,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,_n)),e["ɵdid"](28,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,!u.user.user_quota.enabled),l(n,17,0,u.user.user_quota.enabled&&u.user.user_quota.max_size<=-1),l(n,19,0,u.user.user_quota.enabled&&u.user.user_quota.max_size>-1),l(n,24,0,!u.user.user_quota.enabled),l(n,26,0,u.user.user_quota.enabled&&u.user.user_quota.max_objects<=-1),l(n,28,0,u.user.user_quota.enabled&&u.user.user_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,0),u.user.user_quota.enabled));l(n,9,0,t)}))}function yn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function kn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function In(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.user.bucket_quota.max_size));l(n,1,0,t)}))}function En(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function wn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function qn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.user.bucket_quota.max_objects)}))}function Nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,28,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](3,0,null,null,25,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,24,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,yn)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,kn)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,In)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](20,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,En)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wn)),e["ɵdid"](26,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,qn)),e["ɵdid"](28,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,!u.user.bucket_quota.enabled),l(n,17,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_size<=-1),l(n,19,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_size>-1),l(n,24,0,!u.user.bucket_quota.enabled),l(n,26,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_objects<=-1),l(n,28,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,0),u.user.bucket_quota.enabled));l(n,9,0,t)}))}function Tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,40,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,35,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,34,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](7,null,["",""])),(l()(),e["ɵeld"](8,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](11,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](12,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,rn)),e["ɵdid"](14,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](15,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Suspended"])),(l()(),e["ɵeld"](18,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](19,null,["",""])),e["ɵppd"](20,1),(l()(),e["ɵeld"](21,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["System"])),(l()(),e["ɵeld"](24,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](25,null,["",""])),e["ɵppd"](26,1),(l()(),e["ɵeld"](27,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](28,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum buckets"])),(l()(),e["ɵeld"](30,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](31,null,["",""])),e["ɵppd"](32,2),(l()(),e["ɵand"](16777216,null,null,1,null,mn)),e["ɵdid"](34,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,gn)),e["ɵdid"](36,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Rn)),e["ɵdid"](38,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Nn)),e["ɵdid"](40,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,14,0,null==u.user.email?null:u.user.email.length),l(n,34,0,u.user.subusers&&u.user.subusers.length),l(n,36,0,u.user.caps&&u.user.caps.length),l(n,38,0,u.user.user_quota),l(n,40,0,u.user.bucket_quota)}),(function(l,n){var u=n.component;l(n,7,0,u.user.uid),l(n,12,0,u.user.display_name);var t=e["ɵunv"](n,19,0,l(n,20,0,e["ɵnov"](n.parent.parent,0),u.user.suspended));l(n,19,0,t);var a=e["ɵunv"](n,25,0,l(n,26,0,e["ɵnov"](n.parent.parent,0),"true"===u.user.system));l(n,25,0,a);var i=e["ɵunv"](n,31,0,l(n,32,0,e["ɵnov"](n.parent.parent,1),u.user.max_buckets,u.maxBucketsMap));l(n,31,0,i)}))}function xn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"tab",[["heading","Keys"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,12,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["selectionType","multi"]],null,[[null,"updateSelection"]],(function(l,n,u){var e=!0;return"updateSelection"===n&&(e=!1!==l.component.updateKeysSelection(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](3,2867200,null,0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],forceIdentifier:[3,"forceIdentifier"],selectionType:[4,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),e["ɵeld"](4,0,null,1,10,"div",[["class","table-actions"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,16777216,null,null,9,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),e["ɵprd"](512,null,un.f,un.f,[]),e["ɵdid"](7,212992,null,0,un.c,[e.ElementRef,e.Renderer2,e.ViewContainerRef,en.a,un.f,un.a,tn.b],null,null),(l()(),e["ɵeld"](8,0,null,null,6,"button",[["class","btn btn-secondary"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showKeyModal()&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Show"]))],(function(l,n){var u=n.component;l(n,1,0,"Keys"),l(n,3,0,u.keys,u.keysColumns,"flex","true","multi"),l(n,7,0);var e=l(n,12,0,u.icons.show);l(n,11,0,e)}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby),l(n,5,0,e["ɵnov"](n,7).dropup,e["ɵnov"](n,7).isOpen,e["ɵnov"](n,7).isOpen&&e["ɵnov"](n,7).isBs4),l(n,8,0,!u.keysSelection.hasSingleSelection)}))}function Vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"tabset",[],[[2,"tab-container",null]],null,null,wl.b,wl.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tn)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,xn)),e["ɵdid"](7,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.user),l(n,7,0,u.keys.length)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function Sn(l){return e["ɵvid"](0,[e["ɵpid"](0,Ul.a,[El.a]),e["ɵpid"](0,an.a,[]),e["ɵpid"](0,S.a,[L.a]),e["ɵqud"](671088640,1,{accessKeyTpl:0}),e["ɵqud"](671088640,2,{secretKeyTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,Vn)),e["ɵdid"](6,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,6,0,n.component.selection)}),null)}function Dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-details",[],null,null,null,Sn,dn)),e["ɵdid"](1,638976,null,0,on,[b.a,sn.b,El.a],null,null)],(function(l,n){l(n,1,0)}),null)}var Fn=e["ɵccf"]("cd-rgw-user-details",on,Dn,{selection:"selection"},{},[]),jn=u("8xTl"),Bn=u("ajRT"),Pn=u("mXUL"),An=u("+gVj"),Mn=u("ANnk"),On=u("f/UV"),Un=u("D4zM"),Ln=u("OcYo"),zn=u("EApP"),Gn=u("KVJa"),Kn=u("Z21x"),$n=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Zn(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,51,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," "," "])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,45,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,41,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,40,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,12).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,12).onReset()&&t),t}),null,null)),e["ɵdid"](11,16384,null,0,o.G,[],null,null),e["ɵdid"](12,4210688,null,0,o.t,[[8,null],[8,null]],null,null),e["ɵprd"](2048,null,o.d,null,[o.t]),e["ɵdid"](14,16384,null,0,o.s,[[4,o.d]],null,null),(l()(),e["ɵeld"](15,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](16,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](19,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](21,0,null,0,8,"div",[["class","cd-col-form-inpu"]],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,7,"input",[["class","form-control"],["id","user"],["name","user"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e["ɵnov"](l,24)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,24).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,24)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,24)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.user=u)&&t),t}),null,null)),e["ɵdid"](23,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](24,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](26,671744,null,0,o.u,[[2,o.d],[8,null],[8,null],[6,o.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e["ɵprd"](2048,null,o.q,null,[o.u]),e["ɵdid"](28,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](29,16384,null,0,An.h,[[3,o.d],An.a],null,null),(l()(),e["ɵeld"](30,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](31,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](34,0,null,0,1,"label",[["class","cd-col-form-label"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](36,0,null,0,14,"div",[["class","cd-col-form-inpu"]],null,null,null,null,null)),(l()(),e["ɵeld"](37,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](38,0,null,null,7,"input",[["class","form-control"],["id","secret_key"],["name","secret_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e["ɵnov"](l,40)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,40).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,40)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,40)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.secret_key=u)&&t),t}),null,null)),e["ɵdid"](39,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](40,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](42,671744,null,0,o.u,[[2,o.d],[8,null],[8,null],[6,o.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e["ɵprd"](2048,null,o.q,null,[o.u]),e["ɵdid"](44,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](45,16384,null,0,An.h,[[3,o.d],An.a],null,null),(l()(),e["ɵeld"](46,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](47,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,48).onClick()&&t),t}),null,null)),e["ɵdid"](48,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](49,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,50).onClick()&&t),t}),null,null)),e["ɵdid"](50,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵeld"](51,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](52,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](53,49152,null,0,Kn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,16,0),l(n,26,0,"user",u.user),l(n,31,0),l(n,42,0,"secret_key",u.secret_key),l(n,48,0,"secret_key"),l(n,50,0,"secret_key"),l(n,53,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,a),l(n,10,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending),l(n,15,0,e["ɵnov"](n,16).hasErrors,e["ɵnov"](n,16).hasSuccess),l(n,22,0,!0,e["ɵnov"](n,28).ngClassUntouched,e["ɵnov"](n,28).ngClassTouched,e["ɵnov"](n,28).ngClassPristine,e["ɵnov"](n,28).ngClassDirty,e["ɵnov"](n,28).ngClassValid,e["ɵnov"](n,28).ngClassInvalid,e["ɵnov"](n,28).ngClassPending,e["ɵnov"](n,29).validClass,e["ɵnov"](n,29).invalidClass),l(n,30,0,e["ɵnov"](n,31).hasErrors,e["ɵnov"](n,31).hasSuccess),l(n,38,0,!0,e["ɵnov"](n,44).ngClassUntouched,e["ɵnov"](n,44).ngClassTouched,e["ɵnov"](n,44).ngClassPristine,e["ɵnov"](n,44).ngClassDirty,e["ɵnov"](n,44).ngClassValid,e["ɵnov"](n,44).ngClassInvalid,e["ɵnov"](n,44).ngClassPending,e["ɵnov"](n,45).validClass,e["ɵnov"](n,45).invalidClass)}))}function Qn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-swift-key-modal",[],null,null,null,Zn,$n)),e["ɵdid"](1,49152,null,0,Y,[sn.a,El.a,t.b],null,null)],null,null)}var Yn=e["ɵccf"]("cd-rgw-user-swift-key-modal",Y,Qn,{},{},[]),Wn=u("IZUe"),Jn=u("gp3X"),Xn=u("sb0X"),Hn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function lu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","user"],["id","user"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,2)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](2,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](4,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,4,0,"user"),l(n,7,0,"user")}),(function(l,n){l(n,0,0,!0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a username --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function uu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"select",[["autofocus",""],["class","form-control custom-select"],["formControlName","user"],["id","user"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,3).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,3).onTouched()&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](2,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](5,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](7,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](8,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,nu)),e["ɵdid"](10,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,uu)),e["ɵdid"](12,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,1,0,""),l(n,5,0,"user"),l(n,8,0,"user"),l(n,10,0,null!==u.userCandidates),l(n,12,0,u.userCandidates)}),(function(l,n){l(n,0,0,e["ɵnov"](n,7).ngClassUntouched,e["ɵnov"](n,7).ngClassTouched,e["ɵnov"](n,7).ngClassPristine,e["ɵnov"](n,7).ngClassDirty,e["ɵnov"](n,7).ngClassValid,e["ɵnov"](n,7).ngClassInvalid,e["ɵnov"](n,7).ngClassPending,e["ɵnov"](n,8).validClass,e["ɵnov"](n,8).invalidClass)}))}function tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","generate_key"],["id","generate_key"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](10,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate key"]))],(function(l,n){l(n,1,0),l(n,10,0,"generate_key"),l(n,13,0,"generate_key")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","access_key"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵted"](-1,null,["Access key"])),(l()(),e["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,7,"input",[["class","form-control"],["formControlName","access_key"],["id","access_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,13)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](12,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](15,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](17,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](18,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](19,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](20,0,null,null,1,"button",[["cdPasswordButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,21).onClick()&&t),t}),null,null)),e["ɵdid"](21,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](22,0,null,null,1,"button",[["cdCopy2ClipboardButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,23).onClick()&&t),t}),null,null)),e["ɵdid"](23,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,iu)),e["ɵdid"](25,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var t=l(n,7,0,!u.viewing);l(n,6,0,"cd-col-form-label",t),l(n,15,0,"access_key"),l(n,18,0,"access_key"),l(n,21,0,"access_key"),l(n,23,0,"access_key"),l(n,25,0,u.formGroup.showError("access_key",e["ɵnov"](n.parent,11),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,u.viewing,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass)}))}function su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function du(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","secret_key"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,7,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,13)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](12,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](15,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](17,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](18,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](19,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](20,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,21).onClick()&&t),t}),null,null)),e["ɵdid"](21,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](22,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,23).onClick()&&t),t}),null,null)),e["ɵdid"](23,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,su)),e["ɵdid"](25,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var t=l(n,7,0,!u.viewing);l(n,6,0,"cd-col-form-label",t),l(n,15,0,"secret_key"),l(n,18,0,"secret_key"),l(n,21,0,"secret_key"),l(n,23,0,"secret_key"),l(n,25,0,u.formGroup.showError("secret_key",e["ɵnov"](n.parent,11),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,u.viewing,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass)}))}function ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Jn.b,Jn.a)),e["ɵdid"](1,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](2,0,[""," ",""])),e["ɵppd"](3,1),e["ɵppd"](4,1)],(function(l,n){l(n,1,0,n.component.formGroup)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,2,0,l(n,3,0,e["ɵnov"](n.parent,0),u.action)),a=e["ɵunv"](n,2,1,l(n,4,0,e["ɵnov"](n.parent,1),u.resource));l(n,2,0,t,a)}))}function cu(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,40,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,34,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,33,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,22,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,4,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](22,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](23,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](25,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,lu)),e["ɵdid"](27,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,eu)),e["ɵdid"](29,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tu)),e["ɵdid"](31,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,au)),e["ɵdid"](33,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ou)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,du)),e["ɵdid"](37,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](38,0,null,null,4,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,ru)),e["ɵdid"](40,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](41,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](42,49152,null,0,Kn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0);var t=l(n,23,0,!u.viewing);l(n,22,0,"cd-col-form-label",t),l(n,27,0,u.viewing),l(n,29,0,!u.viewing),l(n,31,0,u.formGroup.showError("user",e["ɵnov"](n,11),"required")),l(n,33,0,!u.viewing),l(n,35,0,!u.formGroup.getValue("generate_key")),l(n,37,0,!u.formGroup.getValue("generate_key")),l(n,40,0,!u.viewing),l(n,42,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,a),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess)}))}function mu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-s3-key-modal",[],null,null,null,cu,Hn)),e["ɵdid"](1,49152,null,0,$,[_.a,sn.a,El.a,t.b],null,null)],null,null)}var fu=e["ɵccf"]("cd-rgw-user-s3-key-modal",$,mu,{},{submitAction:"submitAction"},[]),gu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","type"],["id","type"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,2)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](2,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](4,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,4,0,"type"),l(n,7,0,"type")}),(function(l,n){l(n,0,0,!0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a type --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function bu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function hu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"select",[["autofocus",""],["class","form-control custom-select"],["formControlName","type"],["id","type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,3).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,3).onTouched()&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](2,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](5,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](7,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](8,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vu)),e["ɵdid"](10,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bu)),e["ɵdid"](12,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,1,0,""),l(n,5,0,"type"),l(n,8,0,"type"),l(n,10,0,null!==u.types),l(n,12,0,u.types)}),(function(l,n){l(n,0,0,e["ɵnov"](n,7).ngClassUntouched,e["ɵnov"](n,7).ngClassTouched,e["ɵnov"](n,7).ngClassPristine,e["ɵnov"](n,7).ngClassDirty,e["ɵnov"](n,7).ngClassValid,e["ɵnov"](n,7).ngClassInvalid,e["ɵnov"](n,7).ngClassPending,e["ɵnov"](n,8).validClass,e["ɵnov"](n,8).invalidClass)}))}function Cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function _u(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function yu(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,61,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,55,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,54,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,40,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,4,"label",[["class","cd-col-form-label"],["for","type"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](22,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](23,{required:0}),(l()(),e["ɵted"](-1,null,["Type"])),(l()(),e["ɵeld"](25,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,pu)),e["ɵdid"](27,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,hu)),e["ɵdid"](29,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Cu)),e["ɵdid"](31,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](32,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](33,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](36,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","perm"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permission"])),(l()(),e["ɵeld"](38,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](39,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","perm"],["id","perm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,41).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,41).onTouched()&&t),t}),null,null)),e["ɵdid"](40,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](41,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](43,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](45,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](46,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](47,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](48,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](49,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a permission --"])),(l()(),e["ɵand"](16777216,null,null,2,null,_u)),e["ɵdid"](52,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),e["ɵpad"](53,3),(l()(),e["ɵand"](16777216,null,null,1,null,Ru)),e["ɵdid"](55,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](56,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](57,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Jn.b,Jn.a)),e["ɵdid"](58,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](59,0,[""," ",""])),e["ɵppd"](60,1),e["ɵppd"](61,1),(l()(),e["ɵeld"](62,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](63,49152,null,0,Kn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0);var t=l(n,23,0,!u.editing);l(n,22,0,"cd-col-form-label",t),l(n,27,0,u.editing),l(n,29,0,!u.editing),l(n,31,0,u.formGroup.showError("type",e["ɵnov"](n,11),"required")),l(n,33,0),l(n,43,0,"perm"),l(n,46,0,"perm"),l(n,48,0,null),l(n,49,0,null);var a=l(n,53,0,"read","write","*");l(n,52,0,a),l(n,55,0,u.formGroup.showError("perm",e["ɵnov"](n,11),"required")),l(n,58,0,u.formGroup),l(n,63,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,a),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess),l(n,32,0,e["ɵnov"](n,33).hasErrors,e["ɵnov"](n,33).hasSuccess),l(n,39,0,e["ɵnov"](n,45).ngClassUntouched,e["ɵnov"](n,45).ngClassTouched,e["ɵnov"](n,45).ngClassPristine,e["ɵnov"](n,45).ngClassDirty,e["ɵnov"](n,45).ngClassValid,e["ɵnov"](n,45).ngClassInvalid,e["ɵnov"](n,45).ngClassPending,e["ɵnov"](n,46).validClass,e["ɵnov"](n,46).invalidClass);var i=e["ɵunv"](n,59,0,l(n,60,0,e["ɵnov"](n,0),u.action)),o=e["ɵunv"](n,59,1,l(n,61,0,e["ɵnov"](n,1),u.resource));l(n,59,0,i,o)}))}function ku(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-capability-modal",[],null,null,null,yu,gu)),e["ɵdid"](1,49152,null,0,K,[_.a,sn.a,El.a,t.b],null,null)],null,null)}var Iu=e["ɵccf"]("cd-rgw-user-capability-modal",K,ku,{},{submitAction:"submitAction"},[]),Eu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function qu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen subuser ID is already in use."]))],null,null)}function Nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,7,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,10)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,10)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,10)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](10,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](12,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](17,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,18).onClick()&&t),t}),null,null)),e["ɵdid"](18,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,20).onClick()&&t),t}),null,null)),e["ɵdid"](20,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,xu)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,12,0,"secret_key"),l(n,15,0,"secret_key"),l(n,18,0,"secret_key"),l(n,20,0,"secret_key"),l(n,22,0,u.formGroup.showError("secret_key",e["ɵnov"](n.parent.parent,11),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function Su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Swift key"])),(l()(),e["ɵeld"](3,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","generate_secret"],["id","generate_secret"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,11).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,11).onTouched()&&t),t}),null,null)),e["ɵdid"](10,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](11,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](13,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](15,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](16,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](17,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_secret"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate secret"])),(l()(),e["ɵand"](16777216,null,null,1,null,Vu)),e["ɵdid"](20,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,13,0,"generate_secret"),l(n,16,0,"generate_secret"),l(n,20,0,!u.editing&&!u.formGroup.getValue("generate_secret"))}),(function(l,n){l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,e["ɵnov"](n,15).ngClassUntouched,e["ɵnov"](n,15).ngClassTouched,e["ɵnov"](n,15).ngClassPristine,e["ɵnov"](n,15).ngClassDirty,e["ɵnov"](n,15).ngClassValid,e["ɵnov"](n,15).ngClassInvalid,e["ɵnov"](n,15).ngClassPending,e["ɵnov"](n,16).validClass,e["ɵnov"](n,16).invalidClass)}))}function Du(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,93,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,87,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,86,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,72,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label"],["for","uid"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](22,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](23,0,null,null,7,"input",[["class","form-control"],["formControlName","uid"],["id","uid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,25)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,25).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,25)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,25)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](24,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](25,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](27,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](29,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](30,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](31,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](32,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](35,0,null,0,4,"label",[["class","cd-col-form-label"],["for","subuid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](37,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](38,{required:0}),(l()(),e["ɵted"](-1,null,["Subuser"])),(l()(),e["ɵeld"](40,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](41,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","subuid"],["id","subuid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,44)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,44).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,44)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,44)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](42,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](43,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](44,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](46,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](48,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](49,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wu)),e["ɵdid"](51,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,qu)),e["ɵdid"](53,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](54,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](55,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](58,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","perm"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permission"])),(l()(),e["ɵeld"](60,0,null,0,25,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,22,"select",[["class","form-control custom-select"],["formControlName","perm"],["id","perm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,63).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,63).onTouched()&&t),t}),null,null)),e["ɵdid"](62,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](63,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](65,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](67,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](68,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](69,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](70,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](71,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a permission --"])),(l()(),e["ɵand"](16777216,null,null,2,null,Nu)),e["ɵdid"](74,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),e["ɵpad"](75,2),(l()(),e["ɵeld"](76,0,null,null,3,"option",[["value","read-write"]],null,null,null,null,null)),e["ɵdid"](77,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](78,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["read, write"])),(l()(),e["ɵeld"](80,0,null,null,3,"option",[["value","full-control"]],null,null,null,null,null)),e["ɵdid"](81,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](82,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["full"])),(l()(),e["ɵand"](16777216,null,null,1,null,Tu)),e["ɵdid"](85,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Su)),e["ɵdid"](87,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](88,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](89,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Jn.b,Jn.a)),e["ɵdid"](90,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](91,0,[""," ",""])),e["ɵppd"](92,1),e["ɵppd"](93,1),(l()(),e["ɵeld"](94,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](95,49152,null,0,Kn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0),l(n,27,0,"uid"),l(n,30,0,"uid"),l(n,32,0);var t=l(n,38,0,!u.editing);l(n,37,0,"cd-col-form-label",t),l(n,42,0,""),l(n,46,0,"subuid"),l(n,49,0,"subuid"),l(n,51,0,u.formGroup.showError("subuid",e["ɵnov"](n,11),"required")),l(n,53,0,u.formGroup.showError("subuid",e["ɵnov"](n,11),"subuserIdExists")),l(n,55,0),l(n,65,0,"perm"),l(n,68,0,"perm"),l(n,70,0,null),l(n,71,0,null);var a=l(n,75,0,"read","write");l(n,74,0,a),l(n,77,0,"read-write"),l(n,78,0,"read-write"),l(n,81,0,"full-control"),l(n,82,0,"full-control"),l(n,85,0,u.formGroup.showError("perm",e["ɵnov"](n,11),"required")),l(n,87,0,!u.editing),l(n,90,0,u.formGroup),l(n,95,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,a),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess),l(n,23,0,!0,e["ɵnov"](n,29).ngClassUntouched,e["ɵnov"](n,29).ngClassTouched,e["ɵnov"](n,29).ngClassPristine,e["ɵnov"](n,29).ngClassDirty,e["ɵnov"](n,29).ngClassValid,e["ɵnov"](n,29).ngClassInvalid,e["ɵnov"](n,29).ngClassPending,e["ɵnov"](n,30).validClass,e["ɵnov"](n,30).invalidClass),l(n,31,0,e["ɵnov"](n,32).hasErrors,e["ɵnov"](n,32).hasSuccess),l(n,41,0,u.editing,e["ɵnov"](n,48).ngClassUntouched,e["ɵnov"](n,48).ngClassTouched,e["ɵnov"](n,48).ngClassPristine,e["ɵnov"](n,48).ngClassDirty,e["ɵnov"](n,48).ngClassValid,e["ɵnov"](n,48).ngClassInvalid,e["ɵnov"](n,48).ngClassPending,e["ɵnov"](n,49).validClass,e["ɵnov"](n,49).invalidClass),l(n,54,0,e["ɵnov"](n,55).hasErrors,e["ɵnov"](n,55).hasSuccess),l(n,61,0,e["ɵnov"](n,67).ngClassUntouched,e["ɵnov"](n,67).ngClassTouched,e["ɵnov"](n,67).ngClassPristine,e["ɵnov"](n,67).ngClassDirty,e["ɵnov"](n,67).ngClassValid,e["ɵnov"](n,67).ngClassInvalid,e["ɵnov"](n,67).ngClassPending,e["ɵnov"](n,68).validClass,e["ɵnov"](n,68).invalidClass);var i=e["ɵunv"](n,91,0,l(n,92,0,e["ɵnov"](n,0),u.action)),o=e["ɵunv"](n,91,1,l(n,93,0,e["ɵnov"](n,1),u.resource));l(n,91,0,i,o)}))}function Fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-subuser-modal",[],null,null,null,Du,Eu)),e["ɵdid"](1,49152,null,0,Q,[_.a,sn.a,El.a,t.b],null,null)],null,null)}var ju=e["ɵccf"]("cd-rgw-user-subuser-modal",Q,Fu,{},{submitAction:"submitAction"},[]),Bu=u("yT6U"),Pu=u("4DD9"),Au=u("+0ag"),Mu=u("IzCI"),Ou=u("Dwqy"),Uu=u("uYzU"),Lu=u("FFMq"),zu=u("E2fk"),Gu=u("nSDx"),Ku=u("SB+Q"),$u=u("TYzs"),Zu=u("BQkM"),Qu=u("dEH0"),Yu=u("G1/K"),Wu=u("efK2"),Ju=u("CNMR"),Xu=u("KOzp"),Hu=u("2uy1"),le=u("38Bd"),ne=u("978R"),ue=u("w9WL"),ee=u("iInd"),te=u("9Xeq"),ae=u("hrfs"),ie=u("yGOH"),oe=u("bxSN"),se=u("WF9J"),de=u("V/fk"),re=u("ChqD"),ce=u("PCNd"),me=u("G6Q+"),fe=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","WAkugZpiz"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,El.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Overall Performance"),l(n,3,0,"rgw-overview?","two","WAkugZpiz")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Sync Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","rgw-sync-overview"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,El.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Sync Performance"),l(n,3,0,"radosgw-sync-overview?","two","rgw-sync-overview")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function ve(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,wl.b,wl.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,5,"tab",[["heading","Daemons List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,3,"cd-table",[["columnMode","flex"]],null,[[null,"setExpandedRow"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"fetchData"===n&&(e=!1!==t.getDaemonList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](5,2867200,null,0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"]},{fetchData:"fetchData",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](6,0,null,3,1,"cd-rgw-daemon-details",[["cdTableDetail",""]],null,null,null,Al,jl)),e["ɵdid"](7,573440,null,0,Fl,[A,F.a],{selection:[0,"selection"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,ge)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,pe)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Daemons List"),l(n,5,0,u.daemons,u.columns,"flex",!0),l(n,7,0,u.expandedRow),l(n,9,0,u.grafanaPermission.read),l(n,11,0,u.grafanaPermission.read&&u.isMultiSite)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-daemon-list",[],null,null,null,ve,fe)),e["ɵdid"](1,114688,null,0,O,[A,F.a,M.a,El.a,v],null,null)],(function(l,n){l(n,1,0)}),null)}var he=e["ɵccf"]("cd-rgw-daemon-list",O,be,{},{},[]),Ce=u("DqMs"),_e=u("/NlG"),Re=u("NUGo"),ye=u("S7zO"),ke=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ie(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,Ce.b,Ce.a)),e["ɵdid"](1,114688,null,0,_e.a,[El.a],{type:[0,"type"],size:[1,"size"]},null),(l()(),e["ɵted"](-1,0,["The user list data might be stale. If needed, you can manually reload it."]))],(function(l,n){l(n,1,0,"warning","slim")}),null)}function Ee(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),(l()(),e["ɵand"](16777216,null,null,1,null,Ie)),e["ɵdid"](2,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](3,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","uid"],["selectionType","multiClick"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==t.updateSelection(u)&&e),"fetchData"===n&&(e=!1!==t.getUserList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](4,2867200,[[1,4],["table",4]],0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](5,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Re.b,Re.a)),e["ɵdid"](6,114688,null,0,ye.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](7,0,null,3,1,"cd-rgw-user-details",[["cdTableDetail",""]],null,null,null,Sn,dn)),e["ɵdid"](8,638976,null,0,on,[b.a,sn.b,El.a],{selection:[0,"selection"]},null)],(function(l,n){var u=n.component;l(n,2,0,u.isStale),l(n,4,0,u.users,u.columns,"flex",!0,!1,"uid","multiClick"),l(n,6,0,u.permission,u.selection,u.tableActions),l(n,8,0,u.expandedRow)}),null)}function we(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rgw-user-list",[],null,null,null,Ee,ke)),e["ɵprd"](256,null,j.a,X,[]),e["ɵdid"](2,49152,null,0,H,[F.a,b.a,sn.b,El.a,j.a,t.b,e.NgZone],null,null)],null,null)}var qe=e["ɵccf"]("cd-rgw-user-list",H,we,{},{},[]),Ne=u("QC43"),Te=u("XFyV"),xe=u("EmSq"),Ve=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Se(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ne.b,Ne.a)),e["ɵdid"](1,49152,null,0,Te.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading user data..."]))],null,null)}function De(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,[[null,"backAction"]],(function(l,n,u){var e=!0;return"backAction"===n&&(e=!1!==l.component.goToListView()&&e),e}),Ce.b,Ce.a)),e["ɵdid"](1,114688,null,0,_e.a,[El.a],{type:[0,"type"]},{backAction:"backAction"}),(l()(),e["ɵted"](-1,0,["The user data could not be loaded."]))],(function(l,n){l(n,1,0,"error")}),null)}function Fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen user ID is already in use."]))],null,null)}function Be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This is not a valid email address."]))],null,null)}function Ae(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen email address is already in use."]))],null,null)}function Me(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Oe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 1."]))],null,null)}function Ue(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,0,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,8,"input",[["class","form-control"],["formControlName","max_buckets"],["id","max_buckets"],["min","1"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](9,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](11,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Me)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Oe)),e["ɵdid"](18,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"max_buckets"),l(n,14,0,"max_buckets"),l(n,16,0,u.userForm.showError("max_buckets",e["ɵnov"](n.parent,3),"required")),l(n,18,0,u.userForm.showError("max_buckets",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function Le(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","access_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Access key"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,7,"input",[["class","form-control"],["formControlName","access_key"],["id","access_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,10)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,10)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,10)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](10,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](12,671744,[[15,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](17,0,null,null,1,"button",[["cdPasswordButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,18).onClick()&&t),t}),null,null)),e["ɵdid"](18,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdCopy2ClipboardButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,20).onClick()&&t),t}),null,null)),e["ɵdid"](20,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Le)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,12,0,"access_key"),l(n,15,0,"access_key"),l(n,18,0,"access_key"),l(n,20,0,"access_key"),l(n,22,0,u.userForm.showError("access_key",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function Ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ke(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,7,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,10)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,10)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,10)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](10,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](12,671744,[[17,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](17,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,18).onClick()&&t),t}),null,null)),e["ɵdid"](18,81920,null,0,Un.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,20).onClick()&&t),t}),null,null)),e["ɵdid"](20,81920,null,0,Ln.a,[e.ElementRef,e.Renderer2,zn.j,El.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ge)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,12,0,"secret_key"),l(n,15,0,"secret_key"),l(n,18,0,"secret_key"),l(n,20,0,"secret_key"),l(n,22,0,u.userForm.showError("secret_key",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function $e(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["S3 key"])),(l()(),e["ɵeld"](3,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","generate_key"],["id","generate_key"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,11).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,11).onTouched()&&t),t}),null,null)),e["ɵdid"](10,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](11,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](13,671744,[[13,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](15,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](16,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](17,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate key"])),(l()(),e["ɵand"](16777216,null,null,1,null,ze)),e["ɵdid"](20,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ke)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,13,0,"generate_key"),l(n,16,0,"generate_key"),l(n,20,0,!u.editing&&!u.userForm.getValue("generate_key")),l(n,22,0,!u.editing&&!u.userForm.getValue("generate_key"))}),(function(l,n){l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,e["ɵnov"](n,15).ngClassUntouched,e["ɵnov"](n,15).ngClassTouched,e["ɵnov"](n,15).ngClassPristine,e["ɵnov"](n,15).ngClassDirty,e["ɵnov"](n,15).ngClassValid,e["ɵnov"](n,15).ngClassInvalid,e["ɵnov"](n,15).ngClassPending,e["ɵnov"](n,16).validClass,e["ɵnov"](n,16).invalidClass)}))}function Ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no subusers."]))],null,null)}function Qe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,25,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,23,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),(l()(),e["ɵeld"](7,0,null,null,2,"div",[["class","input-group-prepend border-left-0 border-right-0"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,1,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](11,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),(l()(),e["ɵeld"](12,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,16777216,null,null,5,"button",[["class","btn btn-light tc_showSubuserButton"],["tooltip","Edit"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSubuserModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](14,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](15,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](17,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](18,1),(l()(),e["ɵeld"](19,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteSubuserButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteSubuser(l.context.index)&&e),e}),null,null)),e["ɵdid"](20,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](21,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](23,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](24,1),(l()(),e["ɵeld"](25,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,14,0,"Edit");var e=l(n,18,0,u.icons.edit);l(n,17,0,e),l(n,20,0,"Delete");var t=l(n,24,0,u.icons.destroy);l(n,23,0,t)}),(function(l,n){var u=n.component;l(n,4,0,e["ɵinlineInterpolate"](1,"",u.icons.user,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.id,"")),l(n,9,0,e["ɵinlineInterpolate"](1,"",u.icons.share,"")),l(n,10,0,e["ɵinlineInterpolate"](1,"","full-control"===n.context.$implicit.permissions?"full":n.context.$implicit.permissions,""))}))}function Ye(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Subusers"])),(l()(),e["ɵeld"](3,0,null,null,17,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,16,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ze)),e["ɵdid"](6,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qe)),e["ɵdid"](8,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](9,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,8,"button",[["class","btn btn-light float-right tc_addSubuserButton"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSubuserModal()&&e),e}),null,null)),(l()(),e["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](14,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](15,1),(l()(),e["ɵeld"](16,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](17,null,[""," ",""])),e["ɵppd"](18,1),e["ɵppd"](19,1),(l()(),e["ɵeld"](20,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,6,0,0===u.subusers.length),l(n,8,0,u.subusers);var e=l(n,15,0,u.icons.add);l(n,14,0,e)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,17,0,l(n,18,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.CREATE)),a=e["ɵunv"](n,17,1,l(n,19,0,e["ɵnov"](n.parent.parent,1),u.subuserLabel));l(n,17,0,t,a)}))}function We(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no keys."]))],null,null)}function Je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,18,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),(l()(),e["ɵeld"](7,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,16777216,null,null,5,"button",[["class","btn btn-light tc_showS3KeyButton"],["tooltip","Show"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showS3KeyModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](9,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](10,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](12,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](13,1),(l()(),e["ɵeld"](14,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteS3KeyButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteS3Key(l.context.index)&&e),e}),null,null)),e["ɵdid"](15,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](19,1),(l()(),e["ɵeld"](20,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,9,0,"Show");var e=l(n,13,0,u.icons.show);l(n,12,0,e),l(n,15,0,"Delete");var t=l(n,19,0,u.icons.destroy);l(n,18,0,t)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.key,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.user,""))}))}function Xe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no keys."]))],null,null)}function He(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),(l()(),e["ɵeld"](7,0,null,null,6,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,16777216,null,null,5,"button",[["class","btn btn-light tc_showSwiftKeyButton"],["tooltip","Show"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSwiftKeyModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](9,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](10,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](12,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](13,1),(l()(),e["ɵeld"](14,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,9,0,"Show");var e=l(n,13,0,u.icons.show);l(n,12,0,e)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.key,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.user,""))}))}function lt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,37,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Keys"])),(l()(),e["ɵeld"](3,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["S3"])),(l()(),e["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,We)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Je)),e["ɵdid"](13,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](14,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](15,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,8,"button",[["class","btn btn-light float-right tc_addS3KeyButton"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showS3KeyModal()&&e),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](22,null,[""," ",""])),e["ɵppd"](23,1),e["ɵppd"](24,1),(l()(),e["ɵeld"](25,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null)),(l()(),e["ɵeld"](26,0,null,0,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](27,0,null,null,10,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](28,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](31,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Swift"])),(l()(),e["ɵeld"](33,0,null,0,4,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Xe)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,He)),e["ɵdid"](37,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,11,0,0===u.s3Keys.length),l(n,13,0,u.s3Keys);var e=l(n,20,0,u.icons.add);l(n,19,0,e),l(n,28,0),l(n,35,0,0===u.swiftKeys.length),l(n,37,0,u.swiftKeys)}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess);var t=e["ɵunv"](n,22,0,l(n,23,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.CREATE)),a=e["ɵunv"](n,22,1,l(n,24,0,e["ɵnov"](n.parent.parent,1),u.s3keyLabel));l(n,22,0,t,a),l(n,27,0,e["ɵnov"](n,28).hasErrors,e["ɵnov"](n,28).hasSuccess)}))}function nt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no capabilities."]))],null,null)}function ut(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,18,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"span",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),e["ɵdid"](6,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),(l()(),e["ɵeld"](7,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,16777216,null,null,5,"button",[["class","btn btn-light tc_editCapButton"],["tooltip","Edit"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showCapabilityModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](9,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](10,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](12,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](13,1),(l()(),e["ɵeld"](14,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteCapButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteCapability(l.context.index)&&e),e}),null,null)),e["ɵdid"](15,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](19,1),(l()(),e["ɵeld"](20,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,9,0,"Edit");var e=l(n,13,0,u.icons.edit);l(n,12,0,e),l(n,15,0,"Delete");var t=l(n,19,0,u.icons.destroy);l(n,18,0,t)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.share,"")),l(n,5,0,e["ɵinlineInterpolate"](2,"",n.context.$implicit.type,":",n.context.$implicit.perm,""))}))}function et(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Capabilities"])),(l()(),e["ɵeld"](3,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,17,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,nt)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ut)),e["ɵdid"](11,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,11,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,10,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,16777216,null,null,9,"button",[["class","btn btn-light float-right tc_addCapButton"],["tooltip","All capabilities are already added."],["triggers","pointerenter pointerleave"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showCapabilityModal()&&e),e}),null,null)),e["ɵdid"](15,212992,null,0,ne.c,[e.ViewContainerRef,en.a,ne.a,e.ElementRef,e.Renderer2,Hu.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"],isDisabled:[2,"isDisabled"]},null),(l()(),e["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](19,1),(l()(),e["ɵeld"](20,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](21,null,[""," ",""])),e["ɵppd"](22,1),e["ɵppd"](23,1),(l()(),e["ɵeld"](24,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,4,0),l(n,9,0,0===u.capabilities.length),l(n,11,0,u.capabilities),l(n,15,0,"All capabilities are already added.","pointerenter pointerleave",!u.hasAllCapabilities());var e=l(n,19,0,u.icons.add);l(n,18,0,e)}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,14,0,u.hasAllCapabilities());var t=e["ɵunv"](n,21,0,l(n,22,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.ADD)),a=e["ɵunv"](n,21,1,l(n,23,0,e["ɵnov"](n.parent.parent,1),u.capabilityLabel));l(n,21,0,t,a)}))}function tt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,27,{FormControlNames:1}),e["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","user_quota_max_size_unlimited"],["id","user_quota_max_size_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](10,671744,[[27,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_max_size_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited size"]))],(function(l,n){l(n,1,0),l(n,10,0,"user_quota_max_size_unlimited"),l(n,13,0,"user_quota_max_size_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function at(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function it(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function ot(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,29,{FormControlNames:1}),e["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_quota_max_size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. size"])),(l()(),e["ɵeld"](6,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["formControlName","user_quota_max_size"],["id","user_quota_max_size"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onBlur(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[29,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,81920,null,0,xe.a,[e.ElementRef,o.q,S.a,L.a],null,null),e["ɵdid"](13,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,at)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,it)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"user_quota_max_size"),l(n,12,0),l(n,15,0,"user_quota_max_size"),l(n,17,0,u.userForm.showError("user_quota_max_size",e["ɵnov"](n.parent,3),"required")),l(n,19,0,u.userForm.showError("user_quota_max_size",e["ɵnov"](n.parent,3),"quotaMaxSize"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function st(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,31,{FormControlNames:1}),e["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","user_quota_max_objects_unlimited"],["id","user_quota_max_objects_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](10,671744,[[31,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_max_objects_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited objects"]))],(function(l,n){l(n,1,0),l(n,10,0,"user_quota_max_objects_unlimited"),l(n,13,0,"user_quota_max_objects_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function dt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function rt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 0."]))],null,null)}function ct(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,33,{FormControlNames:1}),e["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_quota_max_objects"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. objects"])),(l()(),e["ɵeld"](6,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,8,"input",[["class","form-control"],["formControlName","user_quota_max_objects"],["id","user_quota_max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](10,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](12,671744,[[33,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,dt)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,rt)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,12,0,"user_quota_max_objects"),l(n,15,0,"user_quota_max_objects"),l(n,17,0,u.userForm.showError("user_quota_max_objects",e["ɵnov"](n.parent,3),"required")),l(n,19,0,u.userForm.showError("user_quota_max_objects",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function mt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,37,{FormControlNames:1}),e["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","bucket_quota_max_size_unlimited"],["id","bucket_quota_max_size_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](10,671744,[[37,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_max_size_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited size"]))],(function(l,n){l(n,1,0),l(n,10,0,"bucket_quota_max_size_unlimited"),l(n,13,0,"bucket_quota_max_size_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function ft(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function gt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function pt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,39,{FormControlNames:1}),e["ɵqud"](603979776,40,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","bucket_quota_max_size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. size"])),(l()(),e["ɵeld"](6,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["formControlName","bucket_quota_max_size"],["id","bucket_quota_max_size"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onBlur(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[39,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,81920,null,0,xe.a,[e.ElementRef,o.q,S.a,L.a],null,null),e["ɵdid"](13,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ft)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,gt)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"bucket_quota_max_size"),l(n,12,0),l(n,15,0,"bucket_quota_max_size"),l(n,17,0,u.userForm.showError("bucket_quota_max_size",e["ɵnov"](n.parent,3),"required")),l(n,19,0,u.userForm.showError("bucket_quota_max_size",e["ɵnov"](n.parent,3),"quotaMaxSize"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function vt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,41,{FormControlNames:1}),e["ɵqud"](603979776,42,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","bucket_quota_max_objects_unlimited"],["id","bucket_quota_max_objects_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](8,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](10,671744,[[41,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_max_objects_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited objects"]))],(function(l,n){l(n,1,0),l(n,10,0,"bucket_quota_max_objects_unlimited"),l(n,13,0,"bucket_quota_max_objects_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function bt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ht(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 0."]))],null,null)}function Ct(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,43,{FormControlNames:1}),e["ɵqud"](603979776,44,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","bucket_quota_max_objects"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. objects"])),(l()(),e["ɵeld"](6,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,8,"input",[["class","form-control"],["formControlName","bucket_quota_max_objects"],["id","bucket_quota_max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](10,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](12,671744,[[43,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bt)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ht)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,12,0,"bucket_quota_max_objects"),l(n,15,0,"bucket_quota_max_objects"),l(n,17,0,u.userForm.showError("bucket_quota_max_objects",e["ɵnov"](n.parent,3),"required")),l(n,19,0,u.userForm.showError("bucket_quota_max_objects",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function _t(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,190,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,189,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,3).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,3).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,6).onSubmit()&&t),t}),null,null)),e["ɵdid"](2,16384,null,0,o.G,[],null,null),e["ɵdid"](3,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](5,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](6,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](7,0,null,null,183,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,[""," ",""])),e["ɵppd"](10,1),e["ɵppd"](11,1),(l()(),e["ɵeld"](12,0,null,null,169,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](14,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](17,0,null,0,4,"label",[["class","cd-col-form-label"],["for","uid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](20,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](22,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](23,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","uid"],["id","uid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,26)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,26).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,26)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,26)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](24,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](25,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](26,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](28,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](30,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](31,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Fe)),e["ɵdid"](33,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,je)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](36,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](37,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](40,0,null,0,4,"label",[["class","cd-col-form-label"],["for","display_name"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](42,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](43,{required:0}),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](45,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](46,0,null,null,7,"input",[["class","form-control"],["formControlName","display_name"],["id","display_name"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,48)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,48).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,48)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,48)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](47,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](48,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](50,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](52,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](53,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Be)),e["ɵdid"](55,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](56,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](57,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](60,0,null,0,1,"label",[["class","cd-col-form-label"],["for","email"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email address"])),(l()(),e["ɵeld"](62,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](63,0,null,null,7,"input",[["class","form-control"],["formControlName","email"],["id","email"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,65)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,65).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,65)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,65)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](64,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](65,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](67,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](69,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](70,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pe)),e["ɵdid"](72,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ae)),e["ɵdid"](74,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](75,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](76,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](79,0,null,0,1,"label",[["class","cd-col-form-label"],["for","max_buckets_mode"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. buckets"])),(l()(),e["ɵeld"](81,0,null,0,20,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](82,0,null,null,19,"select",[["class","form-control custom-select"],["formControlName","max_buckets_mode"],["id","max_buckets_mode"],["name","max_buckets_mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,84).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,84).onTouched()&&t),"change"===n&&(t=!1!==a.onMaxBucketsModeChange(u.target.value)&&t),t}),null,null)),e["ɵdid"](83,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](84,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](86,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](88,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](89,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](90,0,null,null,3,"option",[["value","-1"]],null,null,null,null,null)),e["ɵdid"](91,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](92,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Disabled"])),(l()(),e["ɵeld"](94,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e["ɵdid"](95,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](96,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Unlimited"])),(l()(),e["ɵeld"](98,0,null,null,3,"option",[["value","1"]],null,null,null,null,null)),e["ɵdid"](99,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](100,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Custom"])),(l()(),e["ɵand"](16777216,null,null,1,null,Ue)),e["ɵdid"](103,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](104,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](105,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](108,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](109,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](110,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","suspended"],["id","suspended"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,112).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,112).onTouched()&&t),t}),null,null)),e["ɵdid"](111,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](112,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](114,671744,[[11,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](116,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](117,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](118,0,null,null,1,"label",[["class","custom-control-label"],["for","suspended"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Suspended"])),(l()(),e["ɵand"](16777216,null,null,1,null,$e)),e["ɵdid"](121,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ye)),e["ɵdid"](123,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,lt)),e["ɵdid"](125,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,et)),e["ɵdid"](127,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](128,0,null,null,26,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](129,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User quota"])),(l()(),e["ɵeld"](131,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](132,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,25,{FormControlNames:1}),e["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),e["ɵeld"](135,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](136,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](137,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","user_quota_enabled"],["id","user_quota_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,139).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,139).onTouched()&&t),t}),null,null)),e["ɵdid"](138,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](139,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](141,671744,[[25,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](143,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](144,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](145,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵand"](16777216,null,null,1,null,tt)),e["ɵdid"](148,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ot)),e["ɵdid"](150,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,st)),e["ɵdid"](152,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ct)),e["ɵdid"](154,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](155,0,null,null,26,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](156,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](158,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](159,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,35,{FormControlNames:1}),e["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),e["ɵeld"](162,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](163,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](164,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","bucket_quota_enabled"],["id","bucket_quota_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,166).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,166).onTouched()&&t),t}),null,null)),e["ɵdid"](165,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](166,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](168,671744,[[35,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](170,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](171,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](172,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵand"](16777216,null,null,1,null,mt)),e["ɵdid"](175,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pt)),e["ɵdid"](177,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vt)),e["ɵdid"](179,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ct)),e["ɵdid"](181,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](182,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](183,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](184,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Jn.b,Jn.a)),e["ɵdid"](185,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](186,0,[""," ",""])),e["ɵppd"](187,1),e["ɵppd"](188,1),(l()(),e["ɵeld"](189,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](190,49152,null,0,Kn.a,[Dl.Location,t.b],null,null)],(function(l,n){var u=n.component;l(n,3,0,u.userForm),l(n,6,0,u.userForm),l(n,14,0);var t=l(n,20,0,!u.editing);l(n,19,0,"cd-col-form-label",t),l(n,24,0,""),l(n,28,0,"uid"),l(n,31,0,"uid"),l(n,33,0,u.userForm.showError("uid",e["ɵnov"](n,3),"required")),l(n,35,0,u.userForm.showError("uid",e["ɵnov"](n,3),"notUnique")),l(n,37,0);var a=l(n,43,0,!u.editing);l(n,42,0,"cd-col-form-label",a),l(n,50,0,"display_name"),l(n,53,0,"display_name"),l(n,55,0,u.userForm.showError("display_name",e["ɵnov"](n,3),"required")),l(n,57,0),l(n,67,0,"email"),l(n,70,0,"email"),l(n,72,0,u.userForm.showError("email",e["ɵnov"](n,3),"email")),l(n,74,0,u.userForm.showError("email",e["ɵnov"](n,3),"notUnique")),l(n,76,0),l(n,86,0,"max_buckets_mode"),l(n,89,0,"max_buckets_mode"),l(n,91,0,"-1"),l(n,92,0,"-1"),l(n,95,0,"0"),l(n,96,0,"0"),l(n,99,0,"1"),l(n,100,0,"1"),l(n,103,0,1==u.userForm.get("max_buckets_mode").value),l(n,105,0),l(n,114,0,"suspended"),l(n,117,0,"suspended"),l(n,121,0,!u.editing),l(n,123,0,u.editing),l(n,125,0,u.editing),l(n,127,0,u.editing),l(n,132,0),l(n,141,0,"user_quota_enabled"),l(n,144,0,"user_quota_enabled"),l(n,148,0,u.userForm.controls.user_quota_enabled.value),l(n,150,0,u.userForm.controls.user_quota_enabled.value&&!u.userForm.getValue("user_quota_max_size_unlimited")),l(n,152,0,u.userForm.controls.user_quota_enabled.value),l(n,154,0,u.userForm.controls.user_quota_enabled.value&&!u.userForm.getValue("user_quota_max_objects_unlimited")),l(n,159,0),l(n,168,0,"bucket_quota_enabled"),l(n,171,0,"bucket_quota_enabled"),l(n,175,0,u.userForm.controls.bucket_quota_enabled.value),l(n,177,0,u.userForm.controls.bucket_quota_enabled.value&&!u.userForm.getValue("bucket_quota_max_size_unlimited")),l(n,179,0,u.userForm.controls.bucket_quota_enabled.value),l(n,181,0,u.userForm.controls.bucket_quota_enabled.value&&!u.userForm.getValue("bucket_quota_max_objects_unlimited")),l(n,185,0,u.userForm)}),(function(l,n){var u=n.component;l(n,1,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending);var t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent,0),u.action)),a=e["ɵunv"](n,9,1,l(n,11,0,e["ɵnov"](n.parent,1),u.resource));l(n,9,0,t,a),l(n,13,0,e["ɵnov"](n,14).hasErrors,e["ɵnov"](n,14).hasSuccess),l(n,23,0,u.editing,e["ɵnov"](n,30).ngClassUntouched,e["ɵnov"](n,30).ngClassTouched,e["ɵnov"](n,30).ngClassPristine,e["ɵnov"](n,30).ngClassDirty,e["ɵnov"](n,30).ngClassValid,e["ɵnov"](n,30).ngClassInvalid,e["ɵnov"](n,30).ngClassPending,e["ɵnov"](n,31).validClass,e["ɵnov"](n,31).invalidClass),l(n,36,0,e["ɵnov"](n,37).hasErrors,e["ɵnov"](n,37).hasSuccess),l(n,46,0,e["ɵnov"](n,52).ngClassUntouched,e["ɵnov"](n,52).ngClassTouched,e["ɵnov"](n,52).ngClassPristine,e["ɵnov"](n,52).ngClassDirty,e["ɵnov"](n,52).ngClassValid,e["ɵnov"](n,52).ngClassInvalid,e["ɵnov"](n,52).ngClassPending,e["ɵnov"](n,53).validClass,e["ɵnov"](n,53).invalidClass),l(n,56,0,e["ɵnov"](n,57).hasErrors,e["ɵnov"](n,57).hasSuccess),l(n,63,0,e["ɵnov"](n,69).ngClassUntouched,e["ɵnov"](n,69).ngClassTouched,e["ɵnov"](n,69).ngClassPristine,e["ɵnov"](n,69).ngClassDirty,e["ɵnov"](n,69).ngClassValid,e["ɵnov"](n,69).ngClassInvalid,e["ɵnov"](n,69).ngClassPending,e["ɵnov"](n,70).validClass,e["ɵnov"](n,70).invalidClass),l(n,75,0,e["ɵnov"](n,76).hasErrors,e["ɵnov"](n,76).hasSuccess),l(n,82,0,e["ɵnov"](n,88).ngClassUntouched,e["ɵnov"](n,88).ngClassTouched,e["ɵnov"](n,88).ngClassPristine,e["ɵnov"](n,88).ngClassDirty,e["ɵnov"](n,88).ngClassValid,e["ɵnov"](n,88).ngClassInvalid,e["ɵnov"](n,88).ngClassPending,e["ɵnov"](n,89).validClass,e["ɵnov"](n,89).invalidClass),l(n,104,0,e["ɵnov"](n,105).hasErrors,e["ɵnov"](n,105).hasSuccess),l(n,110,0,e["ɵnov"](n,116).ngClassUntouched,e["ɵnov"](n,116).ngClassTouched,e["ɵnov"](n,116).ngClassPristine,e["ɵnov"](n,116).ngClassDirty,e["ɵnov"](n,116).ngClassValid,e["ɵnov"](n,116).ngClassInvalid,e["ɵnov"](n,116).ngClassPending,e["ɵnov"](n,117).validClass,e["ɵnov"](n,117).invalidClass),l(n,131,0,e["ɵnov"](n,132).hasErrors,e["ɵnov"](n,132).hasSuccess),l(n,137,0,e["ɵnov"](n,143).ngClassUntouched,e["ɵnov"](n,143).ngClassTouched,e["ɵnov"](n,143).ngClassPristine,e["ɵnov"](n,143).ngClassDirty,e["ɵnov"](n,143).ngClassValid,e["ɵnov"](n,143).ngClassInvalid,e["ɵnov"](n,143).ngClassPending,e["ɵnov"](n,144).validClass,e["ɵnov"](n,144).invalidClass),l(n,158,0,e["ɵnov"](n,159).hasErrors,e["ɵnov"](n,159).hasSuccess),l(n,164,0,e["ɵnov"](n,170).ngClassUntouched,e["ɵnov"](n,170).ngClassTouched,e["ɵnov"](n,170).ngClassPristine,e["ɵnov"](n,170).ngClassDirty,e["ɵnov"](n,170).ngClassValid,e["ɵnov"](n,170).ngClassInvalid,e["ɵnov"](n,170).ngClassPending,e["ɵnov"](n,171).validClass,e["ɵnov"](n,171).invalidClass);var i=e["ɵunv"](n,186,0,l(n,187,0,e["ɵnov"](n.parent,0),u.action)),o=e["ɵunv"](n,186,1,l(n,188,0,e["ɵnov"](n.parent,1),u.resource));l(n,186,0,i,o)}))}function Rt(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵand"](16777216,null,null,1,null,Se)),e["ɵdid"](3,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,De)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,_t)),e["ɵdid"](7,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.editing&&u.loading&&!u.error),l(n,5,0,u.editing&&u.error),l(n,7,0,!u.loading&&!u.error)}),null)}function yt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-form",[],null,null,null,Rt,Ve)),e["ɵdid"](1,114688,null,0,W,[_.a,ee.a,ee.m,b.a,sn.b,y.a,El.a,t.b],null,null)],(function(l,n){l(n,1,0)}),null)}var kt=e["ɵccf"]("cd-rgw-user-form",W,yt,{},{},[]),It=u("xSw7"),Et=u("GgAd"),wt=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function qt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,Ce.b,Ce.a)),e["ɵdid"](1,114688,null,0,_e.a,[El.a],{type:[0,"type"],size:[1,"size"]},null),(l()(),e["ɵted"](-1,0,["The bucket list data might be stale. If needed, you can manually reload it."]))],(function(l,n){l(n,1,0,"warning","slim")}),null)}function Nt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,It.b,It.a)),e["ɵdid"](1,573440,null,0,Et.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.bucket_quota.max_size,n.parent.context.row.bucket_size)}),null)}function Tt(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,["No Limit"]))],null,null)}function xt(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Nt)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](0,[["noSizeQuota",2]],null,0,null,Tt))],(function(l,n){l(n,1,0,n.context.row.bucket_quota.max_size>0&&n.context.row.bucket_quota.enabled,e["ɵnov"](n,2))}),null)}function Vt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,It.b,It.a)),e["ɵdid"](1,573440,null,0,Et.a,[],{total:[0,"total"],used:[1,"used"],isBinary:[2,"isBinary"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.bucket_quota.max_objects,n.parent.context.row.num_objects,!1)}),null)}function St(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,["No Limit"]))],null,null)}function Dt(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Vt)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](0,[["noObjectQuota",2]],null,0,null,St))],(function(l,n){l(n,1,0,n.context.row.bucket_quota.max_objects>0&&n.context.row.bucket_quota.enabled,e["ɵnov"](n,2))}),null)}function Ft(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](402653184,2,{bucketSizeTpl:0}),e["ɵqud"](402653184,3,{bucketObjectTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,qt)),e["ɵdid"](4,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](5,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","bid"],["selectionType","multiClick"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==t.updateSelection(u)&&e),"fetchData"===n&&(e=!1!==t.getBucketList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](6,2867200,[[1,4],["table",4]],0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](7,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Re.b,Re.a)),e["ɵdid"](8,114688,null,0,ye.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](9,0,null,3,1,"cd-rgw-bucket-details",[["cdTableDetail",""]],null,null,null,Xl,zl)),e["ɵdid"](10,573440,null,0,Ll,[p],{selection:[0,"selection"]},null),(l()(),e["ɵand"](0,[[2,2],["bucketSizeTpl",2]],null,0,null,xt)),(l()(),e["ɵand"](0,[[3,2],["bucketObjectTpl",2]],null,0,null,Dt))],(function(l,n){var u=n.component;l(n,4,0,u.isStale),l(n,6,0,u.buckets,u.columns,"flex",!0,!1,"bid","multiClick"),l(n,8,0,u.permission,u.selection,u.tableActions),l(n,10,0,u.expandedRow)}),null)}function jt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rgw-bucket-list",[],null,null,null,Ft,wt)),e["ɵprd"](256,null,j.a,B,[]),e["ɵdid"](2,114688,null,0,P,[F.a,S.a,D.a,p,sn.b,El.a,j.a,t.b,e.NgZone,e.ChangeDetectorRef],null,null)],(function(l,n){l(n,2,0)}),null)}var Bt=e["ɵccf"]("cd-rgw-bucket-list",P,jt,{},{},[]),Pt=u("4HWh"),At=u("p4Cf"),Mt=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ot(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ne.b,Ne.a)),e["ɵdid"](1,49152,null,0,Te.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading bucket data..."]))],null,null)}function Ut(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","id"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Id"])),(l()(),e["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","id"],["id","id"],["name","id"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,1,0),l(n,11,0,"id"),l(n,14,0,"id")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function Lt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function zt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function Gt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen name is already in use."]))],null,null)}function Kt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function $t(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a user --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Zt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Qt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Yt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Wt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a placement target --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Jt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.name),l(n,2,0,n.context.$implicit.name)}),(function(l,n){l(n,3,0,n.context.$implicit.description)}))}function Xt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ht(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","placement-target"],["id","placement-target"],["name","placement-target"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,2).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](2,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](4,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Yt)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Wt)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Jt)),e["ɵdid"](13,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Xt)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){var u=n.component;l(n,4,0,"placement-target"),l(n,7,0,"placement-target"),l(n,9,0,null===u.placementTargets),l(n,11,0,null!==u.placementTargets),l(n,13,0,u.placementTargets),l(n,15,0,u.bucketForm.showError("placement-target",e["ɵnov"](n.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function la(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,7,"input",[["class","form-control"],["formControlName","placement-target"],["id","placement-target"],["name","placement-target"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,3)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,3).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,3)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,3)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](2,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](5,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](7,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](8,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,5,0,"placement-target"),l(n,8,0,"placement-target")}),(function(l,n){l(n,1,0,e["ɵnov"](n,7).ngClassUntouched,e["ɵnov"](n,7).ngClassTouched,e["ɵnov"](n,7).ngClassPristine,e["ɵnov"](n,7).ngClassDirty,e["ɵnov"](n,7).ngClassValid,e["ɵnov"](n,7).ngClassInvalid,e["ɵnov"](n,7).ngClassPending,e["ɵnov"](n,8).validClass,e["ɵnov"](n,8).invalidClass)}))}function na(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Versioning"])),(l()(),e["ɵeld"](3,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,15,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,14,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","versioning"],["id","versioning"],["name","versioning"],["type","checkbox"]],[[8,"checked",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,11).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,11).onTouched()&&t),"change"===n&&(t=!1!==a.updateVersioning()&&t),t}),null,null)),e["ɵdid"](10,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](11,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](13,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](15,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](16,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](17,0,null,null,1,"label",[["class","custom-control-label"],["for","versioning"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](19,0,null,null,3,"cd-helper",[],null,null,null,Pt.b,Pt.a)),e["ɵdid"](20,49152,null,0,At.a,[],null,null),(l()(),e["ɵeld"](21,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables versioning for the objects in the bucket."]))],(function(l,n){l(n,4,0),l(n,13,0,"versioning"),l(n,16,0,"versioning")}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,u.isVersioningEnabled,e["ɵnov"](n,15).ngClassUntouched,e["ɵnov"](n,15).ngClassTouched,e["ɵnov"](n,15).ngClassPristine,e["ɵnov"](n,15).ngClassDirty,e["ɵnov"](n,15).ngClassValid,e["ɵnov"](n,15).ngClassInvalid,e["ɵnov"](n,15).ngClassPending,e["ɵnov"](n,16).validClass,e["ɵnov"](n,16).invalidClass)}))}function ua(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ea(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mfa-token-serial"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Token Serial Number"])),(l()(),e["ɵeld"](6,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","mfa-token-serial"],["id","mfa-token-serial"],["name","mfa-token-serial"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[13,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ua)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"mfa-token-serial"),l(n,14,0,"mfa-token-serial"),l(n,16,0,u.bucketForm.showError("mfa-token-serial",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function ta(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function aa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mfa-token-pin"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Token PIN"])),(l()(),e["ɵeld"](6,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","mfa-token-pin"],["id","mfa-token-pin"],["name","mfa-token-pin"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[15,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ta)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"mfa-token-pin"),l(n,14,0,"mfa-token-pin"),l(n,16,0,u.bucketForm.showError("mfa-token-pin",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function ia(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,26,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Multi-Factor Authentication"])),(l()(),e["ɵeld"](3,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,15,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,14,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","mfa-delete"],["id","mfa-delete"],["name","mfa-delete"],["type","checkbox"]],[[8,"checked",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,11).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,11).onTouched()&&t),"change"===n&&(t=!1!==a.updateMfaDelete()&&t),t}),null,null)),e["ɵdid"](10,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](11,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](13,671744,[[11,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](15,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](16,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](17,0,null,null,1,"label",[["class","custom-control-label"],["for","mfa-delete"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Delete enabled"])),(l()(),e["ɵeld"](19,0,null,null,3,"cd-helper",[],null,null,null,Pt.b,Pt.a)),e["ɵdid"](20,49152,null,0,At.a,[],null,null),(l()(),e["ɵeld"](21,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state."])),(l()(),e["ɵand"](16777216,null,null,1,null,ea)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,aa)),e["ɵdid"](26,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,13,0,"mfa-delete"),l(n,16,0,"mfa-delete"),l(n,24,0,u.areMfaCredentialsRequired()),l(n,26,0,u.areMfaCredentialsRequired())}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,u.isMfaDeleteEnabled,e["ɵnov"](n,15).ngClassUntouched,e["ɵnov"](n,15).ngClassTouched,e["ɵnov"](n,15).ngClassPristine,e["ɵnov"](n,15).ngClassDirty,e["ɵnov"](n,15).ngClassValid,e["ɵnov"](n,15).ngClassInvalid,e["ɵnov"](n,15).ngClassPending,e["ɵnov"](n,16).validClass,e["ɵnov"](n,16).invalidClass)}))}function oa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","lock_mode"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mode"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","lock_mode"],["id","lock_mode"],["name","lock_mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),t}),null,null)),e["ɵdid"](8,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](9,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](11,671744,[[19,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,3,"option",[["value","COMPLIANCE"]],null,null,null,null,null)),e["ɵdid"](16,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](17,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Compliance"])),(l()(),e["ɵeld"](19,0,null,null,3,"option",[["value","GOVERNANCE"]],null,null,null,null,null)),e["ɵdid"](20,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](21,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Governance"]))],(function(l,n){l(n,1,0),l(n,11,0,"lock_mode"),l(n,14,0,"lock_mode"),l(n,16,0,"COMPLIANCE"),l(n,17,0,"COMPLIANCE"),l(n,20,0,"GOVERNANCE"),l(n,21,0,"GOVERNANCE")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function sa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be a positive integer."]))],null,null)}function da(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Retention period requires either Days or Years."]))],null,null)}function ra(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,5,"label",[["class","cd-col-form-label"],["for","lock_retention_period_days"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Days"])),(l()(),e["ɵeld"](7,0,null,null,2,"cd-helper",[],null,null,null,Pt.b,Pt.a)),e["ɵdid"](8,49152,null,0,At.a,[],null,null),(l()(),e["ɵted"](-1,0,["The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket."])),(l()(),e["ɵeld"](10,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,8,"input",[["class","form-control"],["formControlName","lock_retention_period_days"],["id","lock_retention_period_days"],["min","0"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,13)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,14).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,14).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,14).onTouched()&&t),t}),null,null)),e["ɵdid"](12,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](14,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](16,671744,[[21,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](18,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](19,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,sa)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,da)),e["ɵdid"](23,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,16,0,"lock_retention_period_days"),l(n,19,0,"lock_retention_period_days"),l(n,21,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"pattern")),l(n,23,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"eitherDaysOrYears"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,18).ngClassUntouched,e["ɵnov"](n,18).ngClassTouched,e["ɵnov"](n,18).ngClassPristine,e["ɵnov"](n,18).ngClassDirty,e["ɵnov"](n,18).ngClassValid,e["ɵnov"](n,18).ngClassInvalid,e["ɵnov"](n,18).ngClassPending,e["ɵnov"](n,19).validClass,e["ɵnov"](n,19).invalidClass)}))}function ca(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be a positive integer."]))],null,null)}function ma(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Retention period requires either Days or Years."]))],null,null)}function fa(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,5,"label",[["class","cd-col-form-label"],["for","lock_retention_period_years"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Years"])),(l()(),e["ɵeld"](7,0,null,null,2,"cd-helper",[],null,null,null,Pt.b,Pt.a)),e["ɵdid"](8,49152,null,0,At.a,[],null,null),(l()(),e["ɵted"](-1,0,["The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket."])),(l()(),e["ɵeld"](10,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,8,"input",[["class","form-control"],["formControlName","lock_retention_period_years"],["id","lock_retention_period_years"],["min","0"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,13)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,13)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,13)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,14).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,14).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,14).onTouched()&&t),t}),null,null)),e["ɵdid"](12,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](14,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](16,671744,[[23,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](18,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](19,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ca)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ma)),e["ɵdid"](23,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,16,0,"lock_retention_period_years"),l(n,19,0,"lock_retention_period_years"),l(n,21,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"pattern")),l(n,23,0,u.bucketForm.showError("lock_retention_period_years",e["ɵnov"](n.parent,3),"eitherDaysOrYears"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,18).ngClassUntouched,e["ɵnov"](n,18).ngClassTouched,e["ɵnov"](n,18).ngClassPristine,e["ɵnov"](n,18).ngClassDirty,e["ɵnov"](n,18).ngClassValid,e["ɵnov"](n,18).ngClassInvalid,e["ɵnov"](n,18).ngClassPending,e["ɵnov"](n,19).validClass,e["ɵnov"](n,19).invalidClass)}))}function ga(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,118,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,117,"form",[["name","bucketForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,3).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,3).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,6).onSubmit()&&t),t}),null,null)),e["ɵdid"](2,16384,null,0,o.G,[],null,null),e["ɵdid"](3,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](5,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](6,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](7,0,null,null,111,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,[""," ",""])),e["ɵppd"](10,1),e["ɵppd"](11,1),(l()(),e["ɵeld"](12,0,null,null,97,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ut)),e["ɵdid"](14,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](15,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](16,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](19,0,null,0,4,"label",[["class","cd-col-form-label"],["for","bid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](21,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](22,{required:0}),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](24,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](25,0,null,null,8,"input",[["class","form-control"],["formControlName","bid"],["id","bid"],["name","bid"],["placeholder","Name..."],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,28)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,28).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,28)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,28)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](26,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](27,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](28,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](30,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](32,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](33,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Lt)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,zt)),e["ɵdid"](37,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Gt)),e["ɵdid"](39,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](40,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](41,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](44,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","owner"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Owner"])),(l()(),e["ɵeld"](46,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](47,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","owner"],["id","owner"],["name","owner"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,50).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,50).onTouched()&&t),t}),null,null)),e["ɵdid"](48,4210688,null,0,Wn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](49,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](50,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](52,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](54,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](55,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Kt)),e["ɵdid"](57,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$t)),e["ɵdid"](59,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Zt)),e["ɵdid"](61,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qt)),e["ɵdid"](63,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](64,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](65,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](68,0,null,0,4,"label",[["class","cd-col-form-label"],["for","placement-target"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](70,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](71,{required:0}),(l()(),e["ɵted"](-1,null,["Placement target"])),(l()(),e["ɵeld"](73,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](0,[["placementTargetSelect",2]],null,0,null,Ht)),(l()(),e["ɵand"](16777216,null,null,1,null,la)),e["ɵdid"](76,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,na)),e["ɵdid"](78,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ia)),e["ɵdid"](80,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](81,0,null,null,28,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](82,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Locking"])),(l()(),e["ɵeld"](84,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](85,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](88,0,null,0,15,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](89,0,null,null,14,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](90,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","lock_enabled"],["id","lock_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,92).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,92).onTouched()&&t),t}),null,null)),e["ɵdid"](91,4210688,null,0,Mn.a,[[2,On.a],F.a,e.ElementRef],null,null),e["ɵdid"](92,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](94,671744,[[17,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](96,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](97,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](98,0,null,null,1,"label",[["class","custom-control-label"],["for","lock_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](100,0,null,null,3,"cd-helper",[],null,null,null,Pt.b,Pt.a)),e["ɵdid"](101,49152,null,0,At.a,[],null,null),(l()(),e["ɵeld"](102,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket."])),(l()(),e["ɵand"](16777216,null,null,1,null,oa)),e["ɵdid"](105,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ra)),e["ɵdid"](107,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fa)),e["ɵdid"](109,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](110,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](111,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](112,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Jn.b,Jn.a)),e["ɵdid"](113,114688,null,0,Xn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](114,0,[""," ",""])),e["ɵppd"](115,1),e["ɵppd"](116,1),(l()(),e["ɵeld"](117,0,null,null,1,"cd-back-button",[],null,null,null,Gn.b,Gn.a)),e["ɵdid"](118,49152,null,0,Kn.a,[Dl.Location,t.b],null,null)],(function(l,n){var u=n.component;l(n,3,0,u.bucketForm),l(n,6,0,u.bucketForm),l(n,14,0,u.editing),l(n,16,0);var t=l(n,22,0,!u.editing);l(n,21,0,"cd-col-form-label",t),l(n,26,0,!u.editing),l(n,30,0,"bid"),l(n,33,0,"bid"),l(n,35,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"required")),l(n,37,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"bucketNameInvalid")),l(n,39,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"bucketNameExists")),l(n,41,0),l(n,48,0,u.editing),l(n,52,0,"owner"),l(n,55,0,"owner"),l(n,57,0,null===u.owners),l(n,59,0,null!==u.owners),l(n,61,0,u.owners),l(n,63,0,u.bucketForm.showError("owner",e["ɵnov"](n,3),"required")),l(n,65,0);var a=l(n,71,0,!u.editing);l(n,70,0,"cd-col-form-label",a),l(n,76,0,u.editing,e["ɵnov"](n,74)),l(n,78,0,u.editing),l(n,80,0,u.editing),l(n,85,0),l(n,94,0,"lock_enabled"),l(n,97,0,"lock_enabled"),l(n,105,0,u.bucketForm.getValue("lock_enabled")),l(n,107,0,u.bucketForm.getValue("lock_enabled")),l(n,109,0,u.bucketForm.getValue("lock_enabled")),l(n,113,0,u.bucketForm)}),(function(l,n){var u=n.component;l(n,1,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending);var t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent,0),u.action)),a=e["ɵunv"](n,9,1,l(n,11,0,e["ɵnov"](n.parent,1),u.resource));l(n,9,0,t,a),l(n,15,0,e["ɵnov"](n,16).hasErrors,e["ɵnov"](n,16).hasSuccess),l(n,25,0,u.editing,e["ɵnov"](n,32).ngClassUntouched,e["ɵnov"](n,32).ngClassTouched,e["ɵnov"](n,32).ngClassPristine,e["ɵnov"](n,32).ngClassDirty,e["ɵnov"](n,32).ngClassValid,e["ɵnov"](n,32).ngClassInvalid,e["ɵnov"](n,32).ngClassPending,e["ɵnov"](n,33).validClass,e["ɵnov"](n,33).invalidClass),l(n,40,0,e["ɵnov"](n,41).hasErrors,e["ɵnov"](n,41).hasSuccess),l(n,47,0,e["ɵnov"](n,54).ngClassUntouched,e["ɵnov"](n,54).ngClassTouched,e["ɵnov"](n,54).ngClassPristine,e["ɵnov"](n,54).ngClassDirty,e["ɵnov"](n,54).ngClassValid,e["ɵnov"](n,54).ngClassInvalid,e["ɵnov"](n,54).ngClassPending,e["ɵnov"](n,55).validClass,e["ɵnov"](n,55).invalidClass),l(n,64,0,e["ɵnov"](n,65).hasErrors,e["ɵnov"](n,65).hasSuccess),l(n,84,0,e["ɵnov"](n,85).hasErrors,e["ɵnov"](n,85).hasSuccess),l(n,90,0,e["ɵnov"](n,96).ngClassUntouched,e["ɵnov"](n,96).ngClassTouched,e["ɵnov"](n,96).ngClassPristine,e["ɵnov"](n,96).ngClassDirty,e["ɵnov"](n,96).ngClassValid,e["ɵnov"](n,96).ngClassInvalid,e["ɵnov"](n,96).ngClassPending,e["ɵnov"](n,97).validClass,e["ɵnov"](n,97).invalidClass);var i=e["ɵunv"](n,114,0,l(n,115,0,e["ɵnov"](n.parent,0),u.action)),o=e["ɵunv"](n,114,1,l(n,116,0,e["ɵnov"](n.parent,1),u.resource));l(n,114,0,i,o)}))}function pa(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵand"](16777216,null,null,1,null,Ot)),e["ɵdid"](3,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ga)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.editing&&u.loading&&!u.error),l(n,5,0,!u.loading&&!u.error)}),null)}function va(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-bucket-form",[],null,null,null,pa,Mt)),e["ɵdid"](1,114688,null,0,E,[ee.a,ee.m,_.a,p,v,b.a,y.a,El.a,t.b],null,null)],(function(l,n){l(n,1,0)}),null)}var ba=e["ɵccf"]("cd-rgw-bucket-form",E,va,{},{},[]),ha=u("i4WA"),Ca=u("6qls"),_a=u("tz6c"),Ra=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ya(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["type","info"]],null,null,null,Ce.b,Ce.a)),e["ɵdid"](1,114688,null,0,_e.a,[El.a],{type:[0,"type"]},null),(l()(),e["ɵted"](2,0,[" ",""])),(l()(),e["ɵeld"](3,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,0,4,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Please consult the "])),(l()(),e["ɵeld"](6,0,null,null,1,"cd-doc",[["section","rgw"]],null,null,null,ha.b,ha.a)),e["ɵdid"](7,114688,null,0,Ca.a,[_a.a,El.a],{section:[0,"section"]},null),(l()(),e["ɵted"](-1,null,[" on how to configure and enable the Object Gateway management functionality."]))],(function(l,n){l(n,1,0,"info"),l(n,7,0,"rgw")}),(function(l,n){l(n,2,0,n.component.message)}))}function ka(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-501",[],null,null,null,ya,Ra)),e["ɵdid"](1,245760,null,0,i,[ee.a],null,null)],(function(l,n){l(n,1,0)}),null)}var Ia=e["ɵccf"]("cd-rgw-501",i,ka,{},{},[]);u.d(n,"RgwModuleNgFactory",(function(){return Ea})),u.d(n,"RoutedRgwModuleNgFactory",(function(){return wa}));var Ea=e["ɵcmf"](ll,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[rl.a,cl.a,ml.a,fl.a,fl.b,gl.a,pl.a,vl.a,bl.a,hl.a,Cl.a,Ol,ln,Fn,Yn,fu,Iu,ju]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,Dl.NgLocalization,Dl.NgLocaleLocalization,[e.LOCALE_ID,[2,Dl["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,Bu.a,Bu.a,[]),e["ɵmpd"](4608,Pu.a,Pu.a,[]),e["ɵmpd"](4608,Ul.a,Ul.a,[El.a]),e["ɵmpd"](4608,Dl.DatePipe,Dl.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,Au.a,Au.a,[]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,S.a,S.a,[L.a]),e["ɵmpd"](4608,Mu.a,Mu.a,[L.a]),e["ɵmpd"](4608,D.a,D.a,[L.a]),e["ɵmpd"](4608,Ou.a,Ou.a,[]),e["ɵmpd"](4608,Uu.a,Uu.a,[]),e["ɵmpd"](4608,Lu.a,Lu.a,[]),e["ɵmpd"](4608,zu.a,zu.a,[]),e["ɵmpd"](4608,Tl.a,Tl.a,[Dl.DatePipe]),e["ɵmpd"](4608,Gu.a,Gu.a,[]),e["ɵmpd"](4608,Ku.a,Ku.a,[]),e["ɵmpd"](4608,$u.a,$u.a,[]),e["ɵmpd"](4608,Zu.a,Zu.a,[]),e["ɵmpd"](4608,Qu.a,Qu.a,[]),e["ɵmpd"](4608,Yu.a,Yu.a,[El.a]),e["ɵmpd"](4608,jn.a,jn.a,[]),e["ɵmpd"](4608,an.a,an.a,[]),e["ɵmpd"](4608,Wu.a,Wu.a,[]),e["ɵmpd"](4608,o.D,o.D,[]),e["ɵmpd"](4608,o.h,o.h,[]),e["ɵmpd"](4608,Ju.b,Ju.b,[]),e["ɵmpd"](4608,Xu.a,Xu.a,[]),e["ɵmpd"](4608,Hu.a,Hu.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,en.a,en.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,Hu.a,e.ApplicationRef]),e["ɵmpd"](4608,le.c,le.c,[]),e["ɵmpd"](4608,ne.a,ne.a,[]),e["ɵmpd"](4608,sn.b,sn.b,[e.RendererFactory2,en.a]),e["ɵmpd"](4608,ue.y,ue.y,[Dl.DOCUMENT]),e["ɵmpd"](4608,ue.r,ue.r,[]),e["ɵmpd"](4608,ue.a,ue.a,[]),e["ɵmpd"](4608,un.f,un.f,[]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,a.a,a.a,[ee.m,F.a]),e["ɵmpd"](4608,_l.f,_l.f,[]),e["ɵmpd"](1073742336,Dl.CommonModule,Dl.CommonModule,[]),e["ɵmpd"](1073742336,te.a,te.a,[]),e["ɵmpd"](1073742336,o.C,o.C,[]),e["ɵmpd"](1073742336,o.n,o.n,[]),e["ɵmpd"](1073742336,o.y,o.y,[]),e["ɵmpd"](1073742336,Ju.c,Ju.c,[]),e["ɵmpd"](1073742336,Xu.d,Xu.d,[]),e["ɵmpd"](1073742336,le.d,le.d,[]),e["ɵmpd"](1073742336,ne.d,ne.d,[]),e["ɵmpd"](1073742336,ae.b,ae.b,[]),e["ɵmpd"](1073742336,sn.e,sn.e,[]),e["ɵmpd"](1073742336,ie.a,ie.a,[]),e["ɵmpd"](1073742336,un.e,un.e,[]),e["ɵmpd"](1073742336,An.f,An.f,[]),e["ɵmpd"](1073742336,oe.ClickOutsideModule,oe.ClickOutsideModule,[]),e["ɵmpd"](1073742336,se.b,se.b,[]),e["ɵmpd"](1073742336,ee.q,ee.q,[[2,ee.v],[2,ee.m]]),e["ɵmpd"](1073742336,de.a,de.a,[]),e["ɵmpd"](1073742336,ue.u,ue.u,[]),e["ɵmpd"](1073742336,re.a,re.a,[]),e["ɵmpd"](1073742336,g.a,g.a,[]),e["ɵmpd"](1073742336,ce.a,ce.a,[]),e["ɵmpd"](1073742336,me.a,me.a,[]),e["ɵmpd"](1073742336,_l.d,_l.d,[]),e["ɵmpd"](1073742336,ll,ll,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,un.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),wa=e["ɵcmf"](dl,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[rl.a,cl.a,ml.a,fl.a,fl.b,gl.a,pl.a,vl.a,bl.a,hl.a,Cl.a,Ol,ln,Fn,Yn,fu,Iu,ju,he,qe,kt,Bt,ba,Ia]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,Dl.NgLocalization,Dl.NgLocaleLocalization,[e.LOCALE_ID,[2,Dl["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,Bu.a,Bu.a,[]),e["ɵmpd"](4608,Pu.a,Pu.a,[]),e["ɵmpd"](4608,Ul.a,Ul.a,[El.a]),e["ɵmpd"](4608,Dl.DatePipe,Dl.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,Au.a,Au.a,[]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,S.a,S.a,[L.a]),e["ɵmpd"](4608,Mu.a,Mu.a,[L.a]),e["ɵmpd"](4608,D.a,D.a,[L.a]),e["ɵmpd"](4608,Ou.a,Ou.a,[]),e["ɵmpd"](4608,Uu.a,Uu.a,[]),e["ɵmpd"](4608,Lu.a,Lu.a,[]),e["ɵmpd"](4608,zu.a,zu.a,[]),e["ɵmpd"](4608,Tl.a,Tl.a,[Dl.DatePipe]),e["ɵmpd"](4608,Gu.a,Gu.a,[]),e["ɵmpd"](4608,Ku.a,Ku.a,[]),e["ɵmpd"](4608,$u.a,$u.a,[]),e["ɵmpd"](4608,Zu.a,Zu.a,[]),e["ɵmpd"](4608,Qu.a,Qu.a,[]),e["ɵmpd"](4608,Yu.a,Yu.a,[El.a]),e["ɵmpd"](4608,jn.a,jn.a,[]),e["ɵmpd"](4608,an.a,an.a,[]),e["ɵmpd"](4608,Wu.a,Wu.a,[]),e["ɵmpd"](4608,o.D,o.D,[]),e["ɵmpd"](4608,o.h,o.h,[]),e["ɵmpd"](4608,Ju.b,Ju.b,[]),e["ɵmpd"](4608,Xu.a,Xu.a,[]),e["ɵmpd"](4608,Hu.a,Hu.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,en.a,en.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,Hu.a,e.ApplicationRef]),e["ɵmpd"](4608,le.c,le.c,[]),e["ɵmpd"](4608,ne.a,ne.a,[]),e["ɵmpd"](4608,sn.b,sn.b,[e.RendererFactory2,en.a]),e["ɵmpd"](4608,ue.y,ue.y,[Dl.DOCUMENT]),e["ɵmpd"](4608,ue.r,ue.r,[]),e["ɵmpd"](4608,ue.a,ue.a,[]),e["ɵmpd"](4608,un.f,un.f,[]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,a.a,a.a,[ee.m,F.a]),e["ɵmpd"](4608,_l.f,_l.f,[]),e["ɵmpd"](1073742336,Dl.CommonModule,Dl.CommonModule,[]),e["ɵmpd"](1073742336,te.a,te.a,[]),e["ɵmpd"](1073742336,o.C,o.C,[]),e["ɵmpd"](1073742336,o.n,o.n,[]),e["ɵmpd"](1073742336,o.y,o.y,[]),e["ɵmpd"](1073742336,Ju.c,Ju.c,[]),e["ɵmpd"](1073742336,Xu.d,Xu.d,[]),e["ɵmpd"](1073742336,le.d,le.d,[]),e["ɵmpd"](1073742336,ne.d,ne.d,[]),e["ɵmpd"](1073742336,ae.b,ae.b,[]),e["ɵmpd"](1073742336,sn.e,sn.e,[]),e["ɵmpd"](1073742336,ie.a,ie.a,[]),e["ɵmpd"](1073742336,un.e,un.e,[]),e["ɵmpd"](1073742336,An.f,An.f,[]),e["ɵmpd"](1073742336,oe.ClickOutsideModule,oe.ClickOutsideModule,[]),e["ɵmpd"](1073742336,se.b,se.b,[]),e["ɵmpd"](1073742336,ee.q,ee.q,[[2,ee.v],[2,ee.m]]),e["ɵmpd"](1073742336,de.a,de.a,[]),e["ɵmpd"](1073742336,ue.u,ue.u,[]),e["ɵmpd"](1073742336,re.a,re.a,[]),e["ɵmpd"](1073742336,g.a,g.a,[]),e["ɵmpd"](1073742336,ce.a,ce.a,[]),e["ɵmpd"](1073742336,me.a,me.a,[]),e["ɵmpd"](1073742336,_l.d,_l.d,[]),e["ɵmpd"](1073742336,ll,ll,[]),e["ɵmpd"](1073742336,dl,dl,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,un.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,ee.k,(function(){return[[{path:"",redirectTo:"daemon",pathMatch:"full"},{path:"daemon",component:O,data:nl},{path:"user",data:ul,children:[{path:"",component:H},{path:"create",component:W,data:el},{path:"edit/:uid",component:W,data:tl}]},{path:"bucket",data:al,children:[{path:"",component:P},{path:"create",component:E,data:il},{path:"edit/:bid",component:E,data:ol}]},{path:"501/:message",component:i,canActivate:[a.a],data:sl}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.8c5c2bbb556260a5cc3e.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/7.8c5c2bbb556260a5cc3e.js
deleted file mode 100644 (file)
index 70caf84..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{Znkk:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),t=u("sne2"),i=u("Avrn");class a{constructor(l){this.route=l,this.message="The Object Gateway service is not configured."}ngOnInit(){this.routeParamsSubscribe=this.route.params.subscribe(l=>{this.message=l.message})}ngOnDestroy(){this.routeParamsSubscribe.unsubscribe()}}var o=u("s7LF"),s=u("LvDl"),d=u("mrSG"),r=u("IheW"),c=u("cp0P"),m=u("LRne"),g=u("5+tZ"),p=u("xTzq"),f=u("pL04");let v=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/bucket"}list(){return this.enumerate().pipe(Object(g.a)(l=>l.length>0?Object(c.a)(l.map(l=>this.get(l))):Object(m.a)([])))}enumerate(){return this.http.get(this.url)}get(l){return this.http.get(`${this.url}/${l}`)}create(l,n,u,e,t,i,a,o){return this.http.post(this.url,null,{params:new r.h({fromObject:{bucket:l,uid:n,zonegroup:u,placement_target:e,lock_enabled:String(t),lock_mode:i,lock_retention_period_days:a,lock_retention_period_years:o}})})}update(l,n,u,e,t,i,a,o,s,d){let c=new r.h;return c=c.append("bucket_id",n),c=c.append("uid",u),c=c.append("versioning_state",e),c=c.append("mfa_delete",t),c=c.append("mfa_token_serial",i),c=c.append("mfa_token_pin",a),c=c.append("lock_mode",o),c=c.append("lock_retention_period_days",s),c=c.append("lock_retention_period_years",d),this.http.put(`${this.url}/${l}`,null,{params:c})}delete(l,n=!0){let u=new r.h;return u=u.append("purge_objects",n?"true":"false"),this.http.delete(`${this.url}/${l}`,{params:u})}exists(l){return this.enumerate().pipe(Object(g.a)(n=>{const u=s.indexOf(n,l);return Object(m.a)(-1!==u)}))}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:f.a}),l=d.__decorate([p.a,d.__metadata("design:paramtypes",[r.c])],l),l})(),b=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/site"}get(l){let n=new r.h;return l&&(n=n.append("query",l)),this.http.get(this.url,{params:n})}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:f.a}),l=d.__decorate([p.a,d.__metadata("design:paramtypes",[r.c])],l),l})();var h=u("P8lu"),C=u("oxzT"),_=u("mtw6"),R=u("2EZI"),y=u("1Ni5"),k=u("9nlD"),I=function(l){return l.ENABLED="Enabled",l.DISABLED="Disabled",l}({}),w=function(l){return l.ENABLED="Enabled",l.SUSPENDED="Suspended",l}({});class E{constructor(l,n,u,e,i,a,o,s,d){this.route=l,this.router=n,this.formBuilder=u,this.rgwBucketService=e,this.rgwSiteService=i,this.rgwUserService=a,this.notificationService=o,this.i18n=s,this.actionLabels=d,this.editing=!1,this.error=!1,this.loading=!1,this.owners=null,this.placementTargets=[],this.isVersioningEnabled=!1,this.isVersioningAlreadyEnabled=!1,this.isMfaDeleteEnabled=!1,this.isMfaDeleteAlreadyEnabled=!1,this.icons=C.a,this.editing=this.router.url.startsWith(`/rgw/bucket/${t.e.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource=this.i18n("bucket"),this.createForm()}createForm(){const l=this,n=y.a.custom("eitherDaysOrYears",()=>{if(!l.bucketForm||!s.get(l.bucketForm.getRawValue(),"lock_enabled"))return!1;const n=l.bucketForm.getValue("lock_retention_period_years"),u=l.bucketForm.getValue("lock_retention_period_days");return u>0&&n>0||0===u&&0===n}),u=[0,[y.a.number(!1),n]];this.bucketForm=this.formBuilder.group({id:[null],bid:[null,[o.B.required],this.editing?[]:[this.bucketNameValidator()]],owner:[null,[o.B.required]],"placement-target":[null,this.editing?[]:[o.B.required]],versioning:[null],"mfa-delete":[null],"mfa-token-serial":[""],"mfa-token-pin":[""],lock_enabled:[{value:!1,disabled:this.editing}],lock_mode:["COMPLIANCE"],lock_retention_period_days:u,lock_retention_period_years:u})}ngOnInit(){this.rgwUserService.enumerate().subscribe(l=>{this.owners=l.sort()}),this.editing||this.rgwSiteService.get("placement-targets").subscribe(l=>{this.zonegroup=l.zonegroup,s.forEach(l.placement_targets,l=>{l.description=`${l.name} (${this.i18n("pool")}: ${l.data_pool})`,this.placementTargets.push(l)}),1===this.placementTargets.length&&this.bucketForm.get("placement-target").setValue(this.placementTargets[0].name)}),this.route.params.subscribe(l=>{if(!l.hasOwnProperty("bid"))return;const n=decodeURIComponent(l.bid);this.loading=!0,this.rgwBucketService.get(n).subscribe(l=>{this.loading=!1;const n=s.clone(this.bucketForm.getRawValue());let u=s.pick(l,s.keys(n));u["placement-target"]=l.placement_rule,u=s.merge(n,u),this.bucketForm.setValue(u),this.editing&&(this.setVersioningStatus(l.versioning),this.isVersioningAlreadyEnabled=this.isVersioningEnabled,this.setMfaDeleteStatus(l.mfa_delete),this.isMfaDeleteAlreadyEnabled=this.isMfaDeleteEnabled,this.setMfaDeleteValidators())})})}goToListView(){this.router.navigate(["/rgw/bucket"])}submit(){if(this.bucketForm.pristine)return void this.goToListView();const l=this.bucketForm.value;if(this.editing){const n=this.getVersioningStatus(),u=this.getMfaDeleteStatus();this.rgwBucketService.update(l.bid,l.id,l.owner,n,u,l["mfa-token-serial"],l["mfa-token-pin"],l.lock_mode,l.lock_retention_period_days,l.lock_retention_period_years).subscribe(()=>{this.notificationService.show(_.a.success,this.i18n('Updated Object Gateway bucket "{{bid}}".',l)),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}else this.rgwBucketService.create(l.bid,l.owner,this.zonegroup,l["placement-target"],l.lock_enabled,l.lock_mode,l.lock_retention_period_days,l.lock_retention_period_years).subscribe(()=>{this.notificationService.show(_.a.success,this.i18n('Created Object Gateway bucket "{{bid}}"',l)),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}bucketNameValidator(){const l=this.rgwBucketService;return n=>new Promise(u=>{if(n.pristine||""===n.value)return void u(null);const e=[];e.push(l=>!y.a.ip()(l)),e.push(l=>s.inRange(l.length,3,64)),e.push(l=>{const n=s.split(l,".");return s.every(n,l=>l===s.toLower(l)&&!l.includes("_")&&!!/[0-9a-z-]/.test(l)&&s.every([0,l.length],n=>/[a-z]/.test(l[n])||s.isInteger(s.parseInt(l[n]))))}),s.every(e,l=>l(n.value))?l.exists(n.value).subscribe(l=>{u(l?{bucketNameExists:!0}:null)}):u({bucketNameInvalid:!0})})}areMfaCredentialsRequired(){return this.isMfaDeleteEnabled!==this.isMfaDeleteAlreadyEnabled||this.isMfaDeleteAlreadyEnabled&&this.isVersioningEnabled!==this.isVersioningAlreadyEnabled}setMfaDeleteValidators(){const l=this.bucketForm.get("mfa-token-serial"),n=this.bucketForm.get("mfa-token-pin");this.areMfaCredentialsRequired()?(l.setValidators(o.B.required),n.setValidators(o.B.required)):(l.setValidators(null),n.setValidators(null)),l.updateValueAndValidity(),n.updateValueAndValidity()}getVersioningStatus(){return this.isVersioningEnabled?w.ENABLED:w.SUSPENDED}setVersioningStatus(l){this.isVersioningEnabled=l===w.ENABLED}updateVersioning(){this.isVersioningEnabled=!this.isVersioningEnabled,this.setMfaDeleteValidators()}getMfaDeleteStatus(){return this.isMfaDeleteEnabled?I.ENABLED:I.DISABLED}setMfaDeleteStatus(l){this.isMfaDeleteEnabled=l===I.ENABLED}updateMfaDelete(){this.isMfaDeleteEnabled=!this.isMfaDeleteEnabled,this.setMfaDeleteValidators()}}var q=u("HDdC"),N=u("+fVR"),T=u("0+/T"),x=u("uIqm"),V=u("vCyI"),S=u("Fgil"),D=u("o4+5"),F=u("aexS"),j=u("EgGo");const B=new j.a("rgw/bucket");class P extends N.a{constructor(l,n,u,e,t,i,a,o,s,d){super(),this.authStorageService=l,this.dimlessBinaryPipe=n,this.dimlessPipe=u,this.rgwBucketService=e,this.bsModalService=t,this.i18n=i,this.urlBuilder=a,this.actionLabels=o,this.ngZone=s,this.changeDetectorRef=d,this.columns=[],this.buckets=[],this.selection=new V.a,this.isStale=!1,this.permission=this.authStorageService.getPermissions().rgw;const r=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().bid)}`;this.tableActions=[{permission:"create",icon:C.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:C.a.edit,routerLink:()=>this.urlBuilder.getEdit(r()),name:this.actionLabels.EDIT},{permission:"delete",icon:C.a.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.timeConditionReached()}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"bid",flexGrow:2},{name:this.i18n("Owner"),prop:"owner",flexGrow:3},{name:this.i18n("Used Capacity"),prop:"bucket_size",flexGrow:.5,pipe:this.dimlessBinaryPipe},{name:this.i18n("Capacity Limit %"),prop:"size_usage",cellTemplate:this.bucketSizeTpl,flexGrow:1},{name:this.i18n("Objects"),prop:"num_objects",flexGrow:.5,pipe:this.dimlessPipe},{name:this.i18n("Object Limit %"),prop:"object_usage",cellTemplate:this.bucketObjectTpl,flexGrow:1}]}transformBucketData(){s.forEach(this.buckets,l=>{const n=l.bucket_quota.max_size,u=l.bucket_quota.max_objects;let e=0,t=0;s.forEach(l.usage,l=>{e+=l.size_actual,t+=l.num_objects}),l.bucket_size=e,l.num_objects=t,l.size_usage=n>0?e/n:void 0,l.object_usage=u>0?t/u:void 0})}timeConditionReached(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.isStale=!0})},1e4)})}getBucketList(l){this.isStale=!1,this.timeConditionReached(),this.rgwBucketService.list().subscribe(l=>{this.buckets=l,this.transformBucketData(),this.changeDetectorRef.detectChanges()},()=>{l.error()})}updateSelection(l){this.selection=l}deleteAction(){this.bsModalService.show(T.a,{initialState:{itemDescription:this.i18n(this.selection.hasSingleSelection?"bucket":"buckets"),itemNames:this.selection.selected.map(l=>l.bid),submitActionObservable:()=>new q.a(l=>{Object(c.a)(this.selection.selected.map(l=>this.rgwBucketService.delete(l.bid))).subscribe(null,n=>{l.error(n),this.table.refreshBtn()},()=>{l.complete(),this.table.refreshBtn()})})}})}}let A=(()=>{let l=class{constructor(l){this.http=l,this.url="api/rgw/daemon"}list(){return this.http.get(this.url)}get(l){return this.http.get(`${this.url}/${l}`)}};return l.ngInjectableDef=e["ɵɵdefineInjectable"]({factory:function(){return new l(e["ɵɵinject"](r.c))},token:l,providedIn:f.a}),l=d.__decorate([p.a,d.__metadata("design:paramtypes",[r.c])],l),l})();var M=u("85J/");class O extends N.a{constructor(l,n,u,e,t){super(),this.rgwDaemonService=l,this.authStorageService=n,this.cephShortVersionPipe=u,this.i18n=e,this.rgwSiteService=t,this.columns=[],this.daemons=[]}ngOnInit(){this.grafanaPermission=this.authStorageService.getPermissions().grafana,this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:2},{name:this.i18n("Hostname"),prop:"server_hostname",flexGrow:2},{name:this.i18n("Version"),prop:"version",flexGrow:1,pipe:this.cephShortVersionPipe}],this.rgwSiteService.get("realms").subscribe(l=>this.isMultiSite=l.length>0)}getDaemonList(l){this.rgwDaemonService.list().subscribe(l=>{this.daemons=l},()=>{l.error()})}}var U=u("GyhO"),L=u("aXbf"),z=function(l){return l.USERS="users",l.BUCKETS="buckets",l.METADATA="metadata",l.USAGE="usage",l.ZONE="zone",l}({});let G=(()=>{class l{static getAll(){return Object.values(l.capabilities)}}return l.capabilities=z,l})();class K{constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.editing=!0,this.types=[],this.resource=this.i18n("capability"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({type:[null,[o.B.required]],perm:[null,[o.B.required]]})}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.ADD}setValues(l,n){this.formGroup.setValue({type:l,perm:n})}setCapabilities(l){const n=[];l.forEach(l=>{n.push(l.type)}),this.types=[],G.getAll().forEach(l=>{-1===s.indexOf(n,l)&&this.types.push(l)})}onSubmit(){this.submitAction.emit(this.formGroup.value),this.bsModalRef.hide()}}class ${constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.viewing=!0,this.userCandidates=[],this.resource=this.i18n("S3 Key"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({user:[null,[o.B.required]],generate_key:[!0],access_key:[null,[y.a.requiredIf({generate_key:!1})]],secret_key:[null,[y.a.requiredIf({generate_key:!1})]]})}setViewing(l=!0){this.viewing=l,this.action=this.viewing?this.actionLabels.SHOW:this.actionLabels.CREATE}setValues(l,n,u){this.formGroup.setValue({user:l,generate_key:s.isEmpty(n),access_key:n,secret_key:u})}setUserCandidates(l){this.userCandidates=l}onSubmit(){this.submitAction.emit(this.formGroup.value),this.bsModalRef.hide()}}class Z{}class Q{constructor(l,n,u,t){this.formBuilder=l,this.bsModalRef=n,this.i18n=u,this.actionLabels=t,this.submitAction=new e.EventEmitter,this.editing=!0,this.subusers=[],this.resource=this.i18n("Subuser"),this.createForm()}createForm(){this.formGroup=this.formBuilder.group({uid:[null],subuid:[null,[o.B.required,this.subuserValidator()]],perm:[null,[o.B.required]],generate_secret:[!0],secret_key:[null,[y.a.requiredIf({generate_secret:!1})]]})}subuserValidator(){const l=this;return n=>l.editing?null:Object(y.b)(n.value)?null:l.subusers.some(u=>s.isEqual(l.getSubuserName(u.id),n.value))?{subuserIdExists:!0}:null}getSubuserName(l){if(s.isEmpty(l))return l;const n=l.match(/([^:]+)(:(.+))?/);return s.isUndefined(n[3])?n[1]:n[3]}setEditing(l=!0){this.editing=l,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE}setValues(l,n="",u=""){this.formGroup.setValue({uid:l,subuid:this.getSubuserName(n),perm:u,generate_secret:!0,secret_key:null})}setSubusers(l){this.subusers=l}onSubmit(){const l=this.formGroup.value,n=new Z;n.id=`${l.uid}:${l.subuid}`,n.permissions=l.perm,n.generate_secret=l.generate_secret,n.secret_key=l.secret_key,this.submitAction.emit(n),this.bsModalRef.hide()}}class Y{constructor(l,n,u){this.bsModalRef=l,this.i18n=n,this.actionLabels=u,this.resource=this.i18n("Swift Key"),this.action=this.actionLabels.SHOW}setValues(l,n){this.user=l,this.secret_key=n}}class W{constructor(l,n,u,e,t,i,a,o){this.formBuilder=l,this.route=n,this.router=u,this.rgwUserService=e,this.bsModalService=t,this.notificationService=i,this.i18n=a,this.actionLabels=o,this.editing=!1,this.error=!1,this.loading=!1,this.submitObservables=[],this.icons=C.a,this.subusers=[],this.s3Keys=[],this.swiftKeys=[],this.capabilities=[],this.resource=this.i18n("user"),this.subuserLabel=this.i18n("subuser"),this.s3keyLabel=this.i18n("S3 Key"),this.capabilityLabel=this.i18n("capability"),this.createForm()}createForm(){this.userForm=this.formBuilder.group({uid:[null,[o.B.required],[y.a.unique(this.rgwUserService.exists,this.rgwUserService)]],display_name:[null,[o.B.required]],email:[null,[y.a.email],[y.a.unique(this.rgwUserService.emailExists,this.rgwUserService)]],max_buckets_mode:[1],max_buckets:[1e3,[y.a.requiredIf({max_buckets_mode:"1"}),y.a.number(!1),o.B.min(1)]],suspended:[!1],generate_key:[!0],access_key:[null,[y.a.requiredIf({generate_key:!1})]],secret_key:[null,[y.a.requiredIf({generate_key:!1})]],user_quota_enabled:[!1],user_quota_max_size_unlimited:[!0],user_quota_max_size:[null,[y.a.composeIf({user_quota_enabled:!0,user_quota_max_size_unlimited:!1},[o.B.required,this.quotaMaxSizeValidator])]],user_quota_max_objects_unlimited:[!0],user_quota_max_objects:[null,[o.B.min(0),y.a.requiredIf({user_quota_enabled:!0,user_quota_max_objects_unlimited:!1})]],bucket_quota_enabled:[!1],bucket_quota_max_size_unlimited:[!0],bucket_quota_max_size:[null,[y.a.composeIf({bucket_quota_enabled:!0,bucket_quota_max_size_unlimited:!1},[o.B.required,this.quotaMaxSizeValidator])]],bucket_quota_max_objects_unlimited:[!0],bucket_quota_max_objects:[null,[o.B.min(0),y.a.requiredIf({bucket_quota_enabled:!0,bucket_quota_max_objects_unlimited:!1})]]})}ngOnInit(){this.editing=this.router.url.startsWith(`/rgw/user/${t.e.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.route.params.subscribe(l=>{if(!l.hasOwnProperty("uid"))return;const n=decodeURIComponent(l.uid);this.loading=!0;const u=[];u.push(this.rgwUserService.get(n)),u.push(this.rgwUserService.getQuota(n)),Object(c.a)(u).subscribe(l=>{this.loading=!1;const n=s.clone(this.userForm.value);let u=s.pick(l[0],s.keys(this.userForm.value));switch(u.max_buckets){case-1:u.max_buckets_mode=-1,u.max_buckets="";break;case 0:u.max_buckets_mode=0,u.max_buckets="";break;default:u.max_buckets_mode=1}["user","bucket"].forEach(n=>{const e=l[1][n+"_quota"];u[n+"_quota_enabled"]=e.enabled,e.max_size<0?(u[n+"_quota_max_size_unlimited"]=!0,u[n+"_quota_max_size"]=null):(u[n+"_quota_max_size_unlimited"]=!1,u[n+"_quota_max_size"]=`${e.max_size} B`),e.max_objects<0?(u[n+"_quota_max_objects_unlimited"]=!0,u[n+"_quota_max_objects"]=null):(u[n+"_quota_max_objects_unlimited"]=!1,u[n+"_quota_max_objects"]=e.max_objects)}),u=s.merge(n,u),this.userForm.setValue(u),this.subusers=l[0].subusers,this.s3Keys=l[0].keys,this.swiftKeys=l[0].swift_keys;const e={"read, write":"*"};l[0].caps.forEach(l=>{l.perm in e&&(l.perm=e[l.perm])}),this.capabilities=l[0].caps},l=>{this.error=l})})}goToListView(){this.router.navigate(["/rgw/user"])}onSubmit(){let l;if(this.userForm.pristine)return void this.goToListView();const n=this.userForm.getValue("uid");if(this.editing){if(this._isGeneralDirty()){const l=this._getUpdateArgs();this.submitObservables.push(this.rgwUserService.update(n,l))}l=this.i18n('Updated Object Gateway user "{{uid}}"',{uid:n})}else{const u=this._getCreateArgs();this.submitObservables.push(this.rgwUserService.create(u)),l=this.i18n('Created Object Gateway user "{{uid}}"',{uid:n})}if(this._isUserQuotaDirty()){const l=this._getUserQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,l))}if(this._isBucketQuotaDirty()){const l=this._getBucketQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,l))}Object(U.a)(...this.submitObservables).subscribe({error:()=>{this.userForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.notificationService.show(_.a.success,l),this.goToListView()}})}quotaMaxSizeValidator(l){return Object(y.b)(l.value)?null:null===RegExp("^(\\d+(\\.\\d+)?)\\s*(B|K(B|iB)?|M(B|iB)?|G(B|iB)?|T(B|iB)?)?$","i").exec(l.value)?{quotaMaxSize:!0}:(new L.a).toBytes(l.value)<1024?{quotaMaxSize:!0}:null}setSubuser(l,n){const u={"full-control":"full","read-write":"readwrite"},e=this.userForm.getValue("uid");this.submitObservables.push(this.rgwUserService.createSubuser(e,{subuser:l.id,access:l.permissions in u?u[l.permissions]:l.permissions,key_type:"swift",secret_key:l.secret_key,generate_secret:l.generate_secret?"true":"false"})),s.isNumber(n)?this.subusers[n]=l:(this.subusers.push(l),this.swiftKeys.push({user:l.id,secret_key:l.generate_secret?"Apply your changes first...":l.secret_key})),this.userForm.markAsDirty()}deleteSubuser(l){const n=this.subusers[l];this.submitObservables.push(this.rgwUserService.deleteSubuser(this.userForm.getValue("uid"),n.id)),this.s3Keys=this.s3Keys.filter(l=>l.user!==n.id),this.swiftKeys=this.swiftKeys.filter(l=>l.user!==n.id),this.subusers.splice(l,1),this.userForm.markAsDirty()}setCapability(l,n){const u=this.userForm.getValue("uid");if(s.isNumber(n)){const e=this.capabilities[n];this.submitObservables.push(this.rgwUserService.deleteCapability(u,e.type,e.perm)),this.submitObservables.push(this.rgwUserService.addCapability(u,l.type,l.perm)),this.capabilities[n]=l}else this.submitObservables.push(this.rgwUserService.addCapability(u,l.type,l.perm)),this.capabilities.push(l);this.userForm.markAsDirty()}deleteCapability(l){const n=this.capabilities[l];this.submitObservables.push(this.rgwUserService.deleteCapability(this.userForm.getValue("uid"),n.type,n.perm)),this.capabilities.splice(l,1),this.userForm.markAsDirty()}hasAllCapabilities(){return!s.difference(G.getAll(),s.map(this.capabilities,"type")).length}setS3Key(l,n){if(s.isNumber(n));else{const n=l.user.match(/([^:]+)(:(.+))?/),u=n[1],e={subuser:n[2]?n[3]:"",generate_key:l.generate_key?"true":"false"};"false"===e.generate_key&&(s.isNil(l.access_key)||(e.access_key=l.access_key),s.isNil(l.secret_key)||(e.secret_key=l.secret_key)),this.submitObservables.push(this.rgwUserService.addS3Key(u,e)),this.s3Keys.push({user:l.user,access_key:l.generate_key?"Apply your changes first...":l.access_key,secret_key:l.generate_key?"Apply your changes first...":l.secret_key})}this.userForm.markAsDirty()}deleteS3Key(l){const n=this.s3Keys[l];this.submitObservables.push(this.rgwUserService.deleteS3Key(this.userForm.getValue("uid"),n.access_key)),this.s3Keys.splice(l,1),this.userForm.markAsDirty()}showSubuserModal(l){const n=this.userForm.getValue("uid"),u=this.bsModalService.show(Q);if(s.isNumber(l)){const e=this.subusers[l];u.content.setEditing(),u.content.setValues(n,e.id,e.permissions)}else u.content.setEditing(!1),u.content.setValues(n),u.content.setSubusers(this.subusers);u.content.submitAction.subscribe(n=>{this.setSubuser(n,l)})}showS3KeyModal(l){const n=this.bsModalService.show($);if(s.isNumber(l)){const u=this.s3Keys[l];n.content.setViewing(),n.content.setValues(u.user,u.access_key,u.secret_key)}else{const l=this._getS3KeyUserCandidates();n.content.setViewing(!1),n.content.setUserCandidates(l),n.content.submitAction.subscribe(l=>{this.setS3Key(l)})}}showSwiftKeyModal(l){const n=this.bsModalService.show(Y),u=this.swiftKeys[l];n.content.setValues(u.user,u.secret_key)}showCapabilityModal(l){const n=this.bsModalService.show(K);if(s.isNumber(l)){const u=this.capabilities[l];n.content.setEditing(),n.content.setValues(u.type,u.perm)}else n.content.setEditing(!1),n.content.setCapabilities(this.capabilities);n.content.submitAction.subscribe(n=>{this.setCapability(n,l)})}_isGeneralDirty(){return["display_name","email","max_buckets_mode","max_buckets","suspended"].some(l=>this.userForm.get(l).dirty)}_isUserQuotaDirty(){return["user_quota_enabled","user_quota_max_size_unlimited","user_quota_max_size","user_quota_max_objects_unlimited","user_quota_max_objects"].some(l=>this.userForm.get(l).dirty)}_isBucketQuotaDirty(){return["bucket_quota_enabled","bucket_quota_max_size_unlimited","bucket_quota_max_size","bucket_quota_max_objects_unlimited","bucket_quota_max_objects"].some(l=>this.userForm.get(l).dirty)}_getCreateArgs(){const l={uid:this.userForm.getValue("uid"),display_name:this.userForm.getValue("display_name"),suspended:this.userForm.getValue("suspended"),email:"",max_buckets:this.userForm.getValue("max_buckets"),generate_key:this.userForm.getValue("generate_key"),access_key:"",secret_key:""},n=this.userForm.getValue("email");s.isString(n)&&n.length>0&&s.merge(l,{email:n}),this.userForm.getValue("generate_key")||s.merge(l,{generate_key:!1,access_key:this.userForm.getValue("access_key"),secret_key:this.userForm.getValue("secret_key")});const u=parseInt(this.userForm.getValue("max_buckets_mode"),10);return s.includes([-1,0],u)&&s.merge(l,{max_buckets:u}),l}_getUpdateArgs(){const l={},n=["display_name","email","max_buckets","suspended"];for(const e of n)l[e]=this.userForm.getValue(e);const u=parseInt(this.userForm.getValue("max_buckets_mode"),10);return s.includes([-1,0],u)&&(l.max_buckets=u),l}_getUserQuotaArgs(){const l={quota_type:"user",enabled:this.userForm.getValue("user_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("user_quota_max_size_unlimited")){const n=(new L.a).toBytes(this.userForm.getValue("user_quota_max_size"));l.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("user_quota_max_objects_unlimited")||(l.max_objects=this.userForm.getValue("user_quota_max_objects")),l}_getBucketQuotaArgs(){const l={quota_type:"bucket",enabled:this.userForm.getValue("bucket_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("bucket_quota_max_size_unlimited")){const n=(new L.a).toBytes(this.userForm.getValue("bucket_quota_max_size"));l.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("bucket_quota_max_objects_unlimited")||(l.max_objects=this.userForm.getValue("bucket_quota_max_objects")),l}_getS3KeyUserCandidates(){let l=[];const n=this.userForm.getValue("uid");return s.isString(n)&&!s.isEmpty(n)&&l.push(n),this.subusers.forEach(n=>{l.push(n.id)}),this.s3Keys.forEach(n=>{l.push(n.user)}),l=s.uniq(l),l}onMaxBucketsModeChange(l){"1"===l&&(this.userForm.get("max_buckets").valid||this.userForm.patchValue({max_buckets:1e3}))}}var J=u("x38r");const X=new j.a("rgw/user");class H extends N.a{constructor(l,n,u,e,t,i,a){super(),this.authStorageService=l,this.rgwUserService=n,this.bsModalService=u,this.i18n=e,this.urlBuilder=t,this.actionLabels=i,this.ngZone=a,this.columns=[],this.users=[],this.selection=new V.a,this.isStale=!1,this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:this.i18n("Username"),prop:"uid",flexGrow:1},{name:this.i18n("Full name"),prop:"display_name",flexGrow:1},{name:this.i18n("Email address"),prop:"email",flexGrow:1},{name:this.i18n("Suspended"),prop:"suspended",flexGrow:1,cellClass:"text-center",cellTransformation:J.a.checkIcon},{name:this.i18n("Max. buckets"),prop:"max_buckets",flexGrow:1,cellTransformation:J.a.map,customTemplateConfig:{"-1":this.i18n("Disabled"),0:this.i18n("Unlimited")}}];const o=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().uid)}`;this.tableActions=[{permission:"create",icon:C.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:C.a.edit,routerLink:()=>this.urlBuilder.getEdit(o()),name:this.actionLabels.EDIT},{permission:"delete",icon:C.a.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.timeConditionReached()}timeConditionReached(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.isStale=!0})},1e4)})}getUserList(l){this.isStale=!1,this.timeConditionReached(),this.rgwUserService.list().subscribe(l=>{this.users=l},()=>{l.error()})}updateSelection(l){this.selection=l}deleteAction(){this.bsModalService.show(T.a,{initialState:{itemDescription:this.i18n(this.selection.hasSingleSelection?"user":"users"),itemNames:this.selection.selected.map(l=>l.uid),submitActionObservable:()=>new q.a(l=>{Object(c.a)(this.selection.selected.map(l=>this.rgwUserService.delete(l.uid))).subscribe(null,n=>{l.error(n),this.table.refreshBtn()},()=>{l.complete(),this.table.refreshBtn()})})}})}}class ll{}const nl={breadcrumbs:"Daemons"},ul={breadcrumbs:"Users"},el={breadcrumbs:t.a.CREATE},tl={breadcrumbs:t.a.EDIT},il={breadcrumbs:"Buckets"},al={breadcrumbs:t.a.CREATE},ol={breadcrumbs:t.a.EDIT},sl={breadcrumbs:"Object Gateway"};class dl{}var rl=u("MdoF"),cl=u("ES0t"),ml=u("Xg1U"),gl=u("z5nN"),pl=u("iutN"),fl=u("pMnS"),vl=u("EEJc"),bl=u("PEr+"),hl=u("a40w"),Cl=u("hfeG"),_l=u("2ZVE"),Rl=u("a278"),yl=u("insk"),kl=u("cUpR"),Il=u("20UP"),wl=u("GiVz"),El=u("pKUh"),ql=u("sLuX"),Nl=u("FSuO"),Tl=u("a0VL"),xl=u("j8L6"),Vl=u("b5OY"),Sl=u("pxLl"),Dl=u("SVse");class Fl{constructor(l,n){this.rgwDaemonService=l,this.authStorageService=n,this.serviceId="",this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection&&(this.serviceId=this.selection.id)}getMetaData(){s.isEmpty(this.serviceId)||this.rgwDaemonService.get(this.serviceId).subscribe(l=>{this.metadata=l.rgw_metadata})}}var jl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Bl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","x5ARzZtmk"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,wl.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){var u=n.component;l(n,1,0,"Performance Details"),l(n,3,0,"rgw-instance-detail?var-rgw_servers=rgw."+u.serviceId,"one","x5ARzZtmk")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function Pl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,El.b,El.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,[[null,"fetchData"]],(function(l,n,u){var e=!0;return"fetchData"===n&&(e=!1!==l.component.getMetaData()&&e),e}),ql.b,ql.a)),e["ɵdid"](5,638976,null,0,Nl.a,[Tl.a],{data:[0,"data"]},{fetchData:"fetchData"}),(l()(),e["ɵeld"](6,0,null,0,3,"tab",[["heading","Performance Counters"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](7,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](8,0,null,null,1,"cd-table-performance-counter",[["serviceType","rgw"]],null,null,null,xl.b,xl.a)),e["ɵdid"](9,114688,null,0,Vl.a,[Sl.a,wl.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,Bl)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.metadata),l(n,7,0,"Performance Counters"),l(n,9,0,"rgw",u.serviceId),l(n,11,0,u.grafanaPermission.read)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,6,0,e["ɵnov"](n,7).id,e["ɵnov"](n,7).active,e["ɵnov"](n,7).addClass,e["ɵnov"](n,7).role,e["ɵnov"](n,7).ariaLabelledby)}))}function Al(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Pl)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,1,0,n.component.selection)}),null)}function Ml(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-daemon-details",[],null,null,null,Al,jl)),e["ɵdid"](1,573440,null,0,Fl,[A,F.a],null,null)],null,null)}var Ol=e["ɵccf"]("cd-rgw-daemon-details",Fl,Ml,{selection:"selection"},{},[]),Ul=u("iExv");class Ll{constructor(){}}var zl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Gl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function Kl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.selection.bucket_quota.max_size));l(n,1,0,t)}))}function $l(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function Zl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.selection.bucket_quota.max_objects)}))}function Ql(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](3,0,null,null,21,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,20,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,6,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,Gl)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Kl)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](18,0,null,null,6,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,$l)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Zl)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,u.selection.bucket_quota.max_size<=-1),l(n,17,0,u.selection.bucket_quota.max_size>-1),l(n,22,0,u.selection.bucket_quota.max_objects<=-1),l(n,24,0,u.selection.bucket_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,1),u.selection.bucket_quota.enabled));l(n,9,0,t)}))}function Yl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mode"])),(l()(),e["ɵeld"](4,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](5,null,["",""])),(l()(),e["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Days"])),(l()(),e["ɵeld"](9,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](10,null,["",""])),(l()(),e["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Years"])),(l()(),e["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](15,null,["",""]))],null,(function(l,n){var u=n.component;l(n,5,0,u.selection.lock_mode),l(n,10,0,u.selection.lock_retention_period_days),l(n,15,0,u.selection.lock_retention_period_years)}))}function Wl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,82,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,67,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,66,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](7,null,["",""])),(l()(),e["ɵeld"](8,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["ID"])),(l()(),e["ɵeld"](11,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](12,null,["",""])),(l()(),e["ɵeld"](13,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](14,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Owner"])),(l()(),e["ɵeld"](16,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](17,null,["",""])),(l()(),e["ɵeld"](18,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Index type"])),(l()(),e["ɵeld"](21,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](22,null,["",""])),(l()(),e["ɵeld"](23,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](24,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Placement rule"])),(l()(),e["ɵeld"](26,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](27,null,["",""])),(l()(),e["ɵeld"](28,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](29,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Marker"])),(l()(),e["ɵeld"](31,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](32,null,["",""])),(l()(),e["ɵeld"](33,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](34,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum marker"])),(l()(),e["ɵeld"](36,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](37,null,["",""])),(l()(),e["ɵeld"](38,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](39,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Version"])),(l()(),e["ɵeld"](41,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](42,null,["",""])),(l()(),e["ɵeld"](43,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](44,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Master version"])),(l()(),e["ɵeld"](46,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](47,null,["",""])),(l()(),e["ɵeld"](48,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](49,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Modification time"])),(l()(),e["ɵeld"](51,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](52,null,["",""])),e["ɵppd"](53,1),(l()(),e["ɵeld"](54,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](55,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Zonegroup"])),(l()(),e["ɵeld"](57,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](58,null,["",""])),(l()(),e["ɵeld"](59,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](60,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Versioning"])),(l()(),e["ɵeld"](62,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](63,null,["",""])),(l()(),e["ɵeld"](64,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](65,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["MFA Delete"])),(l()(),e["ɵeld"](67,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](68,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,Ql)),e["ɵdid"](70,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](71,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Locking"])),(l()(),e["ɵeld"](73,0,null,null,9,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](74,0,null,null,8,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](75,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](76,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](78,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](79,null,["",""])),e["ɵppd"](80,1),(l()(),e["ɵand"](16777216,null,null,1,null,Yl)),e["ɵdid"](82,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,70,0,u.selection.bucket_quota),l(n,82,0,u.selection.lock_enabled)}),(function(l,n){var u=n.component;l(n,7,0,u.selection.bid),l(n,12,0,u.selection.id),l(n,17,0,u.selection.owner),l(n,22,0,u.selection.index_type),l(n,27,0,u.selection.placement_rule),l(n,32,0,u.selection.marker),l(n,37,0,u.selection.max_marker),l(n,42,0,u.selection.ver),l(n,47,0,u.selection.master_ver);var t=e["ɵunv"](n,52,0,l(n,53,0,e["ɵnov"](n.parent.parent,0),u.selection.mtime));l(n,52,0,t),l(n,58,0,u.selection.zonegroup),l(n,63,0,u.selection.versioning),l(n,68,0,u.selection.mfa_delete);var i=e["ɵunv"](n,79,0,l(n,80,0,e["ɵnov"](n.parent.parent,1),u.selection.lock_enabled));l(n,79,0,i)}))}function Jl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,El.b,El.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Wl)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.selection)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function Xl(l){return e["ɵvid"](0,[e["ɵpid"](0,Tl.a,[Dl.DatePipe]),e["ɵpid"](0,Ul.a,[wl.a]),e["ɵpid"](0,D.a,[L.a]),(l()(),e["ɵand"](16777216,null,null,1,null,Jl)),e["ɵdid"](4,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,4,0,n.component.selection)}),null)}function Hl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-bucket-details",[],null,null,null,Xl,zl)),e["ɵdid"](1,49152,null,0,Ll,[],null,null)],null,null)}var ln=e["ɵccf"]("cd-rgw-bucket-details",Ll,Hl,{selection:"selection"},{},[]),nn=u("25BL"),un=u("FE24"),en=u("z/SZ"),tn=u("GS7A"),an=u("TJUb");class on{constructor(l,n,u){this.rgwUserService=l,this.bsModalService=n,this.i18n=u,this.keys=[],this.keysColumns=[],this.keysSelection=new V.a,this.icons=C.a}ngOnInit(){this.keysColumns=[{name:this.i18n("Username"),prop:"username",flexGrow:1},{name:this.i18n("Type"),prop:"type",flexGrow:1}],this.maxBucketsMap={"-1":this.i18n("Disabled"),0:this.i18n("Unlimited")}}ngOnChanges(){this.selection&&(this.user=this.selection,this.user.subusers=s.sortBy(this.user.subusers,"id"),this.user.caps=s.sortBy(this.user.caps,"type"),this.rgwUserService.getQuota(this.user.uid).subscribe(l=>{s.extend(this.user,l)}),this.keys=[],this.user.keys&&this.user.keys.forEach(l=>{this.keys.push({id:this.keys.length+1,type:"S3",username:l.user,ref:l})}),this.user.swift_keys&&this.user.swift_keys.forEach(l=>{this.keys.push({id:this.keys.length+1,type:"Swift",username:l.user,ref:l})}),this.keys=s.sortBy(this.keys,"user"))}updateKeysSelection(l){this.keysSelection=l}showKeyModal(){const l=this.keysSelection.first(),n=this.bsModalService.show("S3"===l.type?$:Y);switch(l.type){case"S3":n.content.setViewing(),n.content.setValues(l.ref.user,l.ref.access_key,l.ref.secret_key);break;case"Swift":n.content.setValues(l.ref.user,l.ref.secret_key)}}}var sn=u("LqlI"),dn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email address"])),(l()(),e["ɵeld"](3,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](4,null,["",""]))],null,(function(l,n){l(n,4,0,n.component.user.email)}))}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," (",") "]))],null,(function(l,n){l(n,1,0,n.context.$implicit.id,n.context.$implicit.permissions)}))}function mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Subusers"])),(l()(),e["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,cn)),e["ɵdid"](5,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.component.user.subusers)}),null)}function gn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," (",") "]))],null,(function(l,n){l(n,1,0,n.context.$implicit.type,n.context.$implicit.perm)}))}function pn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Capabilities"])),(l()(),e["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,gn)),e["ɵdid"](5,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){l(n,5,0,n.component.user.caps)}),null)}function fn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function bn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.user.user_quota.max_size));l(n,1,0,t)}))}function hn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function _n(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.user.user_quota.max_objects)}))}function Rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,28,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User quota"])),(l()(),e["ɵeld"](3,0,null,null,25,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,24,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,fn)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vn)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bn)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](20,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,hn)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Cn)),e["ɵdid"](26,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,_n)),e["ɵdid"](28,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,!u.user.user_quota.enabled),l(n,17,0,u.user.user_quota.enabled&&u.user.user_quota.max_size<=-1),l(n,19,0,u.user.user_quota.enabled&&u.user.user_quota.max_size>-1),l(n,24,0,!u.user.user_quota.enabled),l(n,26,0,u.user.user_quota.enabled&&u.user.user_quota.max_objects<=-1),l(n,28,0,u.user.user_quota.enabled&&u.user.user_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,0),u.user.user_quota.enabled));l(n,9,0,t)}))}function yn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function kn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function In(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "])),e["ɵppd"](2,1)],null,(function(l,n){var u=n.component,t=e["ɵunv"](n,1,0,l(n,2,0,e["ɵnov"](n.parent.parent.parent.parent,2),u.user.bucket_quota.max_size));l(n,1,0,t)}))}function wn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["-"]))],null,null)}function En(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited"]))],null,null)}function qn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.user.bucket_quota.max_objects)}))}function Nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,28,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](3,0,null,null,25,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,24,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](8,0,null,null,2,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,["",""])),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum size"])),(l()(),e["ɵand"](16777216,null,null,1,null,yn)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,kn)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,In)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](20,0,null,null,8,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](21,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum objects"])),(l()(),e["ɵand"](16777216,null,null,1,null,wn)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,En)),e["ɵdid"](26,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,qn)),e["ɵdid"](28,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,15,0,!u.user.bucket_quota.enabled),l(n,17,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_size<=-1),l(n,19,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_size>-1),l(n,24,0,!u.user.bucket_quota.enabled),l(n,26,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_objects<=-1),l(n,28,0,u.user.bucket_quota.enabled&&u.user.bucket_quota.max_objects>-1)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent.parent.parent,0),u.user.bucket_quota.enabled));l(n,9,0,t)}))}function Tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,40,"div",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,35,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,34,"tbody",[],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](6,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(l()(),e["ɵted"](7,null,["",""])),(l()(),e["ɵeld"](8,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](11,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](12,null,["",""])),(l()(),e["ɵand"](16777216,null,null,1,null,rn)),e["ɵdid"](14,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](15,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Suspended"])),(l()(),e["ɵeld"](18,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](19,null,["",""])),e["ɵppd"](20,1),(l()(),e["ɵeld"](21,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["System"])),(l()(),e["ɵeld"](24,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](25,null,["",""])),e["ɵppd"](26,1),(l()(),e["ɵeld"](27,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e["ɵeld"](28,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Maximum buckets"])),(l()(),e["ɵeld"](30,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),e["ɵted"](31,null,["",""])),e["ɵppd"](32,2),(l()(),e["ɵand"](16777216,null,null,1,null,mn)),e["ɵdid"](34,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pn)),e["ɵdid"](36,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Rn)),e["ɵdid"](38,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Nn)),e["ɵdid"](40,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,14,0,null==u.user.email?null:u.user.email.length),l(n,34,0,u.user.subusers&&u.user.subusers.length),l(n,36,0,u.user.caps&&u.user.caps.length),l(n,38,0,u.user.user_quota),l(n,40,0,u.user.bucket_quota)}),(function(l,n){var u=n.component;l(n,7,0,u.user.uid),l(n,12,0,u.user.display_name);var t=e["ɵunv"](n,19,0,l(n,20,0,e["ɵnov"](n.parent.parent,0),u.user.suspended));l(n,19,0,t);var i=e["ɵunv"](n,25,0,l(n,26,0,e["ɵnov"](n.parent.parent,0),"true"===u.user.system));l(n,25,0,i);var a=e["ɵunv"](n,31,0,l(n,32,0,e["ɵnov"](n.parent.parent,1),u.user.max_buckets,u.maxBucketsMap));l(n,31,0,a)}))}function xn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"tab",[["heading","Keys"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,12,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["selectionType","multi"]],null,[[null,"updateSelection"]],(function(l,n,u){var e=!0;return"updateSelection"===n&&(e=!1!==l.component.updateKeysSelection(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](3,2867200,null,0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],forceIdentifier:[3,"forceIdentifier"],selectionType:[4,"selectionType"]},{updateSelection:"updateSelection"}),(l()(),e["ɵeld"](4,0,null,1,10,"div",[["class","table-actions"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,16777216,null,null,9,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),e["ɵprd"](512,null,un.f,un.f,[]),e["ɵdid"](7,212992,null,0,un.c,[e.ElementRef,e.Renderer2,e.ViewContainerRef,en.a,un.f,un.a,tn.b],null,null),(l()(),e["ɵeld"](8,0,null,null,6,"button",[["class","btn btn-secondary"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showKeyModal()&&e),e}),null,null)),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Show"]))],(function(l,n){var u=n.component;l(n,1,0,"Keys"),l(n,3,0,u.keys,u.keysColumns,"flex","true","multi"),l(n,7,0);var e=l(n,12,0,u.icons.show);l(n,11,0,e)}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby),l(n,5,0,e["ɵnov"](n,7).dropup,e["ɵnov"](n,7).isOpen,e["ɵnov"](n,7).isOpen&&e["ɵnov"](n,7).isBs4),l(n,8,0,!u.keysSelection.hasSingleSelection)}))}function Vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,"tabset",[],[[2,"tab-container",null]],null,null,El.b,El.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Tn)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,xn)),e["ɵdid"](7,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.user),l(n,7,0,u.keys.length)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function Sn(l){return e["ɵvid"](0,[e["ɵpid"](0,Ul.a,[wl.a]),e["ɵpid"](0,an.a,[]),e["ɵpid"](0,S.a,[L.a]),e["ɵqud"](671088640,1,{accessKeyTpl:0}),e["ɵqud"](671088640,2,{secretKeyTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,Vn)),e["ɵdid"](6,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,6,0,n.component.selection)}),null)}function Dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-details",[],null,null,null,Sn,dn)),e["ɵdid"](1,638976,null,0,on,[h.a,sn.b,wl.a],null,null)],(function(l,n){l(n,1,0)}),null)}var Fn=e["ɵccf"]("cd-rgw-user-details",on,Dn,{selection:"selection"},{},[]),jn=u("8xTl"),Bn=u("ajRT"),Pn=u("mXUL"),An=u("+gVj"),Mn=u("D4zM"),On=u("OcYo"),Un=u("EApP"),Ln=u("KVJa"),zn=u("Z21x"),Gn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Kn(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,49,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," "," "])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,43,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,39,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,38,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,12).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,12).onReset()&&t),t}),null,null)),e["ɵdid"](11,16384,null,0,o.G,[],null,null),e["ɵdid"](12,4210688,null,0,o.t,[[8,null],[8,null]],null,null),e["ɵprd"](2048,null,o.d,null,[o.t]),e["ɵdid"](14,16384,null,0,o.s,[[4,o.d]],null,null),(l()(),e["ɵeld"](15,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](16,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](19,0,null,0,1,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](21,0,null,0,7,"div",[["class","cd-col-form-inpu"]],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,6,"input",[["class","form-control"],["id","user"],["name","user"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0,i=l.component;return"input"===n&&(t=!1!==e["ɵnov"](l,23)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,23).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,23)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,23)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(i.user=u)&&t),t}),null,null)),e["ɵdid"](23,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](25,671744,null,0,o.u,[[2,o.d],[8,null],[8,null],[6,o.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e["ɵprd"](2048,null,o.q,null,[o.u]),e["ɵdid"](27,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](28,16384,null,0,An.h,[[3,o.d],An.a],null,null),(l()(),e["ɵeld"](29,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](30,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](33,0,null,0,1,"label",[["class","cd-col-form-label"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](35,0,null,0,13,"div",[["class","cd-col-form-inpu"]],null,null,null,null,null)),(l()(),e["ɵeld"](36,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](37,0,null,null,6,"input",[["class","form-control"],["id","secret_key"],["name","secret_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0,i=l.component;return"input"===n&&(t=!1!==e["ɵnov"](l,38)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,38).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,38)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,38)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(i.secret_key=u)&&t),t}),null,null)),e["ɵdid"](38,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](40,671744,null,0,o.u,[[2,o.d],[8,null],[8,null],[6,o.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e["ɵprd"](2048,null,o.q,null,[o.u]),e["ɵdid"](42,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](43,16384,null,0,An.h,[[3,o.d],An.a],null,null),(l()(),e["ɵeld"](44,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](45,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,46).onClick()&&t),t}),null,null)),e["ɵdid"](46,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](47,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,48).onClick()&&t),t}),null,null)),e["ɵdid"](48,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵeld"](49,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](50,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](51,49152,null,0,zn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,16,0),l(n,25,0,"user",u.user),l(n,30,0),l(n,40,0,"secret_key",u.secret_key),l(n,46,0,"secret_key"),l(n,48,0,"secret_key"),l(n,51,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),i=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,i),l(n,10,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending),l(n,15,0,e["ɵnov"](n,16).hasErrors,e["ɵnov"](n,16).hasSuccess),l(n,22,0,!0,e["ɵnov"](n,27).ngClassUntouched,e["ɵnov"](n,27).ngClassTouched,e["ɵnov"](n,27).ngClassPristine,e["ɵnov"](n,27).ngClassDirty,e["ɵnov"](n,27).ngClassValid,e["ɵnov"](n,27).ngClassInvalid,e["ɵnov"](n,27).ngClassPending,e["ɵnov"](n,28).validClass,e["ɵnov"](n,28).invalidClass),l(n,29,0,e["ɵnov"](n,30).hasErrors,e["ɵnov"](n,30).hasSuccess),l(n,37,0,!0,e["ɵnov"](n,42).ngClassUntouched,e["ɵnov"](n,42).ngClassTouched,e["ɵnov"](n,42).ngClassPristine,e["ɵnov"](n,42).ngClassDirty,e["ɵnov"](n,42).ngClassValid,e["ɵnov"](n,42).ngClassInvalid,e["ɵnov"](n,42).ngClassPending,e["ɵnov"](n,43).validClass,e["ɵnov"](n,43).invalidClass)}))}function $n(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-swift-key-modal",[],null,null,null,Kn,Gn)),e["ɵdid"](1,49152,null,0,Y,[sn.a,wl.a,t.b],null,null)],null,null)}var Zn=e["ɵccf"]("cd-rgw-user-swift-key-modal",Y,$n,{},{},[]),Qn=u("IZUe"),Yn=u("gp3X"),Wn=u("sb0X"),Jn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Xn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","user"],["id","user"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,1).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,1)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](1,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](3,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](5,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](6,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"user"),l(n,6,0,"user")}),(function(l,n){l(n,0,0,!0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function Hn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a username --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function lu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"select",[["autofocus",""],["class","form-control custom-select"],["formControlName","user"],["id","user"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,2).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](2,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](4,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Hn)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,lu)),e["ɵdid"](11,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,1,0,""),l(n,4,0,"user"),l(n,7,0,"user"),l(n,9,0,null!==u.userCandidates),l(n,11,0,u.userCandidates)}),(function(l,n){l(n,0,0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function uu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","generate_key"],["id","generate_key"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](9,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](11,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](12,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate key"]))],(function(l,n){l(n,1,0),l(n,9,0,"generate_key"),l(n,12,0,"generate_key")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","access_key"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵted"](-1,null,["Access key"])),(l()(),e["ɵeld"](9,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,6,"input",[["class","form-control"],["formControlName","access_key"],["id","access_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,12)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](12,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](14,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](16,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](17,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](18,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdPasswordButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,20).onClick()&&t),t}),null,null)),e["ɵdid"](20,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](21,0,null,null,1,"button",[["cdCopy2ClipboardButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,22).onClick()&&t),t}),null,null)),e["ɵdid"](22,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tu)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var t=l(n,7,0,!u.viewing);l(n,6,0,"cd-col-form-label",t),l(n,14,0,"access_key"),l(n,17,0,"access_key"),l(n,20,0,"access_key"),l(n,22,0,"access_key"),l(n,24,0,u.formGroup.showError("access_key",e["ɵnov"](n.parent,11),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,u.viewing,e["ɵnov"](n,16).ngClassUntouched,e["ɵnov"](n,16).ngClassTouched,e["ɵnov"](n,16).ngClassPristine,e["ɵnov"](n,16).ngClassDirty,e["ɵnov"](n,16).ngClassValid,e["ɵnov"](n,16).ngClassInvalid,e["ɵnov"](n,16).ngClassPending,e["ɵnov"](n,17).validClass,e["ɵnov"](n,17).invalidClass)}))}function au(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ou(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","secret_key"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](9,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,6,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,12)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](12,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](14,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](16,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](17,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](18,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,20).onClick()&&t),t}),null,null)),e["ɵdid"](20,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](21,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,22).onClick()&&t),t}),null,null)),e["ɵdid"](22,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,au)),e["ɵdid"](24,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var t=l(n,7,0,!u.viewing);l(n,6,0,"cd-col-form-label",t),l(n,14,0,"secret_key"),l(n,17,0,"secret_key"),l(n,20,0,"secret_key"),l(n,22,0,"secret_key"),l(n,24,0,u.formGroup.showError("secret_key",e["ɵnov"](n.parent,11),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,u.viewing,e["ɵnov"](n,16).ngClassUntouched,e["ɵnov"](n,16).ngClassTouched,e["ɵnov"](n,16).ngClassPristine,e["ɵnov"](n,16).ngClassDirty,e["ɵnov"](n,16).ngClassValid,e["ɵnov"](n,16).ngClassInvalid,e["ɵnov"](n,16).ngClassPending,e["ɵnov"](n,17).validClass,e["ɵnov"](n,17).invalidClass)}))}function su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](1,114688,null,0,Wn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](2,0,[""," ",""])),e["ɵppd"](3,1),e["ɵppd"](4,1)],(function(l,n){l(n,1,0,n.component.formGroup)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,2,0,l(n,3,0,e["ɵnov"](n.parent,0),u.action)),i=e["ɵunv"](n,2,1,l(n,4,0,e["ɵnov"](n.parent,1),u.resource));l(n,2,0,t,i)}))}function du(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,40,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,34,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,33,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,22,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,4,"label",[["class","cd-col-form-label"],["for","user"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](22,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](23,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](25,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Xn)),e["ɵdid"](27,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,nu)),e["ɵdid"](29,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,uu)),e["ɵdid"](31,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,eu)),e["ɵdid"](33,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,iu)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ou)),e["ɵdid"](37,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](38,0,null,null,4,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,su)),e["ɵdid"](40,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](41,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](42,49152,null,0,zn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0);var t=l(n,23,0,!u.viewing);l(n,22,0,"cd-col-form-label",t),l(n,27,0,u.viewing),l(n,29,0,!u.viewing),l(n,31,0,u.formGroup.showError("user",e["ɵnov"](n,11),"required")),l(n,33,0,!u.viewing),l(n,35,0,!u.formGroup.getValue("generate_key")),l(n,37,0,!u.formGroup.getValue("generate_key")),l(n,40,0,!u.viewing),l(n,42,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),i=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,i),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess)}))}function ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-s3-key-modal",[],null,null,null,du,Jn)),e["ɵdid"](1,49152,null,0,$,[R.a,sn.a,wl.a,t.b],null,null)],null,null)}var cu=e["ɵccf"]("cd-rgw-user-s3-key-modal",$,ru,{},{submitAction:"submitAction"},[]),mu=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function gu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","type"],["id","type"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,1)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,1).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,1)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,1)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](1,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](3,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](5,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](6,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,3,0,"type"),l(n,6,0,"type")}),(function(l,n){l(n,0,0,!0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function pu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a type --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function fu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function vu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"select",[["autofocus",""],["class","form-control custom-select"],["formControlName","type"],["id","type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,2).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),t}),null,null)),e["ɵdid"](1,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](2,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](4,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pu)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fu)),e["ɵdid"](11,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,1,0,""),l(n,4,0,"type"),l(n,7,0,"type"),l(n,9,0,null!==u.types),l(n,11,0,u.types)}),(function(l,n){l(n,0,0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function bu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function hu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function Cu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function _u(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,60,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,54,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,53,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,39,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,4,"label",[["class","cd-col-form-label"],["for","type"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](22,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](23,{required:0}),(l()(),e["ɵted"](-1,null,["Type"])),(l()(),e["ɵeld"](25,0,null,0,6,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,gu)),e["ɵdid"](27,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vu)),e["ɵdid"](29,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bu)),e["ɵdid"](31,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](32,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](33,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](36,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","perm"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permission"])),(l()(),e["ɵeld"](38,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](39,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","perm"],["id","perm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,40).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,40).onTouched()&&t),t}),null,null)),e["ɵdid"](40,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](42,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](44,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](45,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](46,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](47,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](48,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a permission --"])),(l()(),e["ɵand"](16777216,null,null,2,null,hu)),e["ɵdid"](51,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),e["ɵpad"](52,3),(l()(),e["ɵand"](16777216,null,null,1,null,Cu)),e["ɵdid"](54,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](55,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](56,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](57,114688,null,0,Wn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](58,0,[""," ",""])),e["ɵppd"](59,1),e["ɵppd"](60,1),(l()(),e["ɵeld"](61,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](62,49152,null,0,zn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0);var t=l(n,23,0,!u.editing);l(n,22,0,"cd-col-form-label",t),l(n,27,0,u.editing),l(n,29,0,!u.editing),l(n,31,0,u.formGroup.showError("type",e["ɵnov"](n,11),"required")),l(n,33,0),l(n,42,0,"perm"),l(n,45,0,"perm"),l(n,47,0,null),l(n,48,0,null);var i=l(n,52,0,"read","write","*");l(n,51,0,i),l(n,54,0,u.formGroup.showError("perm",e["ɵnov"](n,11),"required")),l(n,57,0,u.formGroup),l(n,62,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),i=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,i),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess),l(n,32,0,e["ɵnov"](n,33).hasErrors,e["ɵnov"](n,33).hasSuccess),l(n,39,0,e["ɵnov"](n,44).ngClassUntouched,e["ɵnov"](n,44).ngClassTouched,e["ɵnov"](n,44).ngClassPristine,e["ɵnov"](n,44).ngClassDirty,e["ɵnov"](n,44).ngClassValid,e["ɵnov"](n,44).ngClassInvalid,e["ɵnov"](n,44).ngClassPending,e["ɵnov"](n,45).validClass,e["ɵnov"](n,45).invalidClass);var a=e["ɵunv"](n,58,0,l(n,59,0,e["ɵnov"](n,0),u.action)),o=e["ɵunv"](n,58,1,l(n,60,0,e["ɵnov"](n,1),u.resource));l(n,58,0,a,o)}))}function Ru(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-capability-modal",[],null,null,null,_u,mu)),e["ɵdid"](1,49152,null,0,K,[R.a,sn.a,wl.a,t.b],null,null)],null,null)}var yu=e["ɵccf"]("cd-rgw-user-capability-modal",K,Ru,{},{submitAction:"submitAction"},[]),ku=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Iu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function wu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen subuser ID is already in use."]))],null,null)}function Eu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,[" "," "]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function qu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Nu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Tu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,6,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,17).onClick()&&t),t}),null,null)),e["ɵdid"](17,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](18,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,19).onClick()&&t),t}),null,null)),e["ɵdid"](19,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Nu)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"secret_key"),l(n,14,0,"secret_key"),l(n,17,0,"secret_key"),l(n,19,0,"secret_key"),l(n,21,0,u.formGroup.showError("secret_key",e["ɵnov"](n.parent.parent,11),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function xu(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Swift key"])),(l()(),e["ɵeld"](3,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","generate_secret"],["id","generate_secret"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](12,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_secret"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate secret"])),(l()(),e["ɵand"](16777216,null,null,1,null,Tu)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,12,0,"generate_secret"),l(n,15,0,"generate_secret"),l(n,19,0,!u.editing&&!u.formGroup.getValue("generate_secret"))}),(function(l,n){l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function Vu(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵeld"](2,0,null,null,90,"cd-modal",[],null,null,null,vl.c,vl.b)),e["ɵdid"](3,49152,null,0,Bn.a,[],{modalRef:[0,"modalRef"]},null),(l()(),e["ɵeld"](4,0,null,0,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](5,null,[""," ",""])),e["ɵppd"](6,1),e["ɵppd"](7,1),(l()(),e["ɵeld"](8,0,null,1,84,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,83,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,11).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,11).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,14).onSubmit()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.G,[],null,null),e["ɵdid"](11,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](14,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](15,0,null,null,69,"div",[["class","modal-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](17,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](20,0,null,0,1,"label",[["class","cd-col-form-label"],["for","uid"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](22,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](23,0,null,null,6,"input",[["class","form-control"],["formControlName","uid"],["id","uid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,24)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,24).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,24)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,24)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](24,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](26,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](28,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](29,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](30,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](31,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](34,0,null,0,4,"label",[["class","cd-col-form-label"],["for","subuid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](36,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](37,{required:0}),(l()(),e["ɵted"](-1,null,["Subuser"])),(l()(),e["ɵeld"](39,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](40,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","subuid"],["id","subuid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,42)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,42).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,42)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,42)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](41,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](42,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](44,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](46,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](47,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Iu)),e["ɵdid"](49,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,wu)),e["ɵdid"](51,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](52,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](53,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](56,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","perm"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permission"])),(l()(),e["ɵeld"](58,0,null,0,24,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](59,0,null,null,21,"select",[["class","form-control custom-select"],["formControlName","perm"],["id","perm"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,60).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,60).onTouched()&&t),t}),null,null)),e["ɵdid"](60,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](62,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](64,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](65,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](66,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](67,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](68,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a permission --"])),(l()(),e["ɵand"](16777216,null,null,2,null,Eu)),e["ɵdid"](71,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),e["ɵpad"](72,2),(l()(),e["ɵeld"](73,0,null,null,3,"option",[["value","read-write"]],null,null,null,null,null)),e["ɵdid"](74,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](75,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["read, write"])),(l()(),e["ɵeld"](77,0,null,null,3,"option",[["value","full-control"]],null,null,null,null,null)),e["ɵdid"](78,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](79,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["full"])),(l()(),e["ɵand"](16777216,null,null,1,null,qu)),e["ɵdid"](82,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,xu)),e["ɵdid"](84,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](85,0,null,null,7,"div",[["class","modal-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](86,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](87,114688,null,0,Wn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](88,0,[""," ",""])),e["ɵppd"](89,1),e["ɵppd"](90,1),(l()(),e["ɵeld"](91,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](92,49152,null,0,zn.a,[Dl.Location,t.b],{back:[0,"back"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.bsModalRef),l(n,11,0,u.formGroup),l(n,14,0,u.formGroup),l(n,17,0),l(n,26,0,"uid"),l(n,29,0,"uid"),l(n,31,0);var t=l(n,37,0,!u.editing);l(n,36,0,"cd-col-form-label",t),l(n,41,0,""),l(n,44,0,"subuid"),l(n,47,0,"subuid"),l(n,49,0,u.formGroup.showError("subuid",e["ɵnov"](n,11),"required")),l(n,51,0,u.formGroup.showError("subuid",e["ɵnov"](n,11),"subuserIdExists")),l(n,53,0),l(n,62,0,"perm"),l(n,65,0,"perm"),l(n,67,0,null),l(n,68,0,null);var i=l(n,72,0,"read","write");l(n,71,0,i),l(n,74,0,"read-write"),l(n,75,0,"read-write"),l(n,78,0,"full-control"),l(n,79,0,"full-control"),l(n,82,0,u.formGroup.showError("perm",e["ɵnov"](n,11),"required")),l(n,84,0,!u.editing),l(n,87,0,u.formGroup),l(n,92,0,u.bsModalRef.hide)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,5,0,l(n,6,0,e["ɵnov"](n,0),u.action)),i=e["ɵunv"](n,5,1,l(n,7,0,e["ɵnov"](n,1),u.resource));l(n,5,0,t,i),l(n,9,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending),l(n,16,0,e["ɵnov"](n,17).hasErrors,e["ɵnov"](n,17).hasSuccess),l(n,23,0,!0,e["ɵnov"](n,28).ngClassUntouched,e["ɵnov"](n,28).ngClassTouched,e["ɵnov"](n,28).ngClassPristine,e["ɵnov"](n,28).ngClassDirty,e["ɵnov"](n,28).ngClassValid,e["ɵnov"](n,28).ngClassInvalid,e["ɵnov"](n,28).ngClassPending,e["ɵnov"](n,29).validClass,e["ɵnov"](n,29).invalidClass),l(n,30,0,e["ɵnov"](n,31).hasErrors,e["ɵnov"](n,31).hasSuccess),l(n,40,0,u.editing,e["ɵnov"](n,46).ngClassUntouched,e["ɵnov"](n,46).ngClassTouched,e["ɵnov"](n,46).ngClassPristine,e["ɵnov"](n,46).ngClassDirty,e["ɵnov"](n,46).ngClassValid,e["ɵnov"](n,46).ngClassInvalid,e["ɵnov"](n,46).ngClassPending,e["ɵnov"](n,47).validClass,e["ɵnov"](n,47).invalidClass),l(n,52,0,e["ɵnov"](n,53).hasErrors,e["ɵnov"](n,53).hasSuccess),l(n,59,0,e["ɵnov"](n,64).ngClassUntouched,e["ɵnov"](n,64).ngClassTouched,e["ɵnov"](n,64).ngClassPristine,e["ɵnov"](n,64).ngClassDirty,e["ɵnov"](n,64).ngClassValid,e["ɵnov"](n,64).ngClassInvalid,e["ɵnov"](n,64).ngClassPending,e["ɵnov"](n,65).validClass,e["ɵnov"](n,65).invalidClass);var a=e["ɵunv"](n,88,0,l(n,89,0,e["ɵnov"](n,0),u.action)),o=e["ɵunv"](n,88,1,l(n,90,0,e["ɵnov"](n,1),u.resource));l(n,88,0,a,o)}))}function Su(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-subuser-modal",[],null,null,null,Vu,ku)),e["ɵdid"](1,49152,null,0,Q,[R.a,sn.a,wl.a,t.b],null,null)],null,null)}var Du=e["ɵccf"]("cd-rgw-user-subuser-modal",Q,Su,{},{submitAction:"submitAction"},[]),Fu=u("yT6U"),ju=u("4DD9"),Bu=u("+0ag"),Pu=u("IzCI"),Au=u("Dwqy"),Mu=u("uYzU"),Ou=u("FFMq"),Uu=u("E2fk"),Lu=u("nSDx"),zu=u("SB+Q"),Gu=u("TYzs"),Ku=u("BQkM"),$u=u("dEH0"),Zu=u("G1/K"),Qu=u("efK2"),Yu=u("CNMR"),Wu=u("KOzp"),Ju=u("2uy1"),Xu=u("38Bd"),Hu=u("978R"),le=u("w9WL"),ne=u("iInd"),ue=u("9Xeq"),ee=u("hrfs"),te=u("yGOH"),ie=u("bxSN"),ae=u("WF9J"),oe=u("V/fk"),se=u("ChqD"),de=u("PCNd"),re=u("G6Q+"),ce=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function me(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","WAkugZpiz"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,wl.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Overall Performance"),l(n,3,0,"rgw-overview?","two","WAkugZpiz")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"tab",[["heading","Sync Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](1,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","rgw-sync-overview"]],null,null,null,Rl.b,Rl.a)),e["ɵdid"](3,638976,null,0,yl.a,[kl.b,Il.a,wl.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(l,n){l(n,1,0,"Sync Performance"),l(n,3,0,"radosgw-sync-overview?","two","rgw-sync-overview")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).id,e["ɵnov"](n,1).active,e["ɵnov"](n,1).addClass,e["ɵnov"](n,1).role,e["ɵnov"](n,1).ariaLabelledby)}))}function pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,11,"tabset",[],[[2,"tab-container",null]],null,null,El.b,El.a)),e["ɵdid"](1,180224,null,0,_l.e,[_l.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,5,"tab",[["heading","Daemons List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,_l.b,[_l.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,3,"cd-table",[["columnMode","flex"]],null,[[null,"setExpandedRow"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"fetchData"===n&&(e=!1!==t.getDaemonList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](5,2867200,null,0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"]},{fetchData:"fetchData",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](6,0,null,3,1,"cd-rgw-daemon-details",[["cdTableDetail",""]],null,null,null,Al,jl)),e["ɵdid"](7,573440,null,0,Fl,[A,F.a],{selection:[0,"selection"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,me)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,0,1,null,ge)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Daemons List"),l(n,5,0,u.daemons,u.columns,"flex",!0),l(n,7,0,u.expandedRow),l(n,9,0,u.grafanaPermission.read),l(n,11,0,u.grafanaPermission.read&&u.isMultiSite)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-daemon-list",[],null,null,null,pe,ce)),e["ɵdid"](1,114688,null,0,O,[A,F.a,M.a,wl.a,b],null,null)],(function(l,n){l(n,1,0)}),null)}var ve=e["ɵccf"]("cd-rgw-daemon-list",O,fe,{},{},[]),be=u("DqMs"),he=u("/NlG"),Ce=u("NUGo"),_e=u("S7zO"),Re=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ye(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,be.b,be.a)),e["ɵdid"](1,114688,null,0,he.a,[wl.a],{type:[0,"type"],size:[1,"size"]},null),(l()(),e["ɵted"](-1,0,["The user list data might be stale. If needed, you can manually reload it."]))],(function(l,n){l(n,1,0,"warning","slim")}),null)}function ke(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),(l()(),e["ɵand"](16777216,null,null,1,null,ye)),e["ɵdid"](2,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](3,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","uid"],["selectionType","multiClick"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==t.updateSelection(u)&&e),"fetchData"===n&&(e=!1!==t.getUserList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](4,2867200,[[1,4],["table",4]],0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](5,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Ce.b,Ce.a)),e["ɵdid"](6,114688,null,0,_e.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](7,0,null,3,1,"cd-rgw-user-details",[["cdTableDetail",""]],null,null,null,Sn,dn)),e["ɵdid"](8,638976,null,0,on,[h.a,sn.b,wl.a],{selection:[0,"selection"]},null)],(function(l,n){var u=n.component;l(n,2,0,u.isStale),l(n,4,0,u.users,u.columns,"flex",!0,!1,"uid","multiClick"),l(n,6,0,u.permission,u.selection,u.tableActions),l(n,8,0,u.expandedRow)}),null)}function Ie(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rgw-user-list",[],null,null,null,ke,Re)),e["ɵprd"](256,null,j.a,X,[]),e["ɵdid"](2,49152,null,0,H,[F.a,h.a,sn.b,wl.a,j.a,t.b,e.NgZone],null,null)],null,null)}var we=e["ɵccf"]("cd-rgw-user-list",H,Ie,{},{},[]),Ee=u("QC43"),qe=u("XFyV"),Ne=u("EmSq"),Te=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function xe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ee.b,Ee.a)),e["ɵdid"](1,49152,null,0,qe.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading user data..."]))],null,null)}function Ve(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,[[null,"backAction"]],(function(l,n,u){var e=!0;return"backAction"===n&&(e=!1!==l.component.goToListView()&&e),e}),be.b,be.a)),e["ɵdid"](1,114688,null,0,he.a,[wl.a],{type:[0,"type"]},{backAction:"backAction"}),(l()(),e["ɵted"](-1,0,["The user data could not be loaded."]))],(function(l,n){l(n,1,0,"error")}),null)}function Se(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function De(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen user ID is already in use."]))],null,null)}function Fe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This is not a valid email address."]))],null,null)}function Be(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen email address is already in use."]))],null,null)}function Pe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ae(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 1."]))],null,null)}function Me(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,0,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","form-control"],["formControlName","max_buckets"],["id","max_buckets"],["min","1"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,7)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,7)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,7)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](8,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](10,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Pe)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ae)),e["ɵdid"](17,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"max_buckets"),l(n,13,0,"max_buckets"),l(n,15,0,u.userForm.showError("max_buckets",e["ɵnov"](n.parent,3),"required")),l(n,17,0,u.userForm.showError("max_buckets",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function Oe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ue(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","access_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Access key"])),(l()(),e["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,6,"input",[["class","form-control"],["formControlName","access_key"],["id","access_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[15,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"button",[["cdPasswordButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,17).onClick()&&t),t}),null,null)),e["ɵdid"](17,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](18,0,null,null,1,"button",[["cdCopy2ClipboardButton","access_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,19).onClick()&&t),t}),null,null)),e["ɵdid"](19,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Oe)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"access_key"),l(n,14,0,"access_key"),l(n,17,0,"access_key"),l(n,19,0,"access_key"),l(n,21,0,u.userForm.showError("access_key",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function Le(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","secret_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Secret key"])),(l()(),e["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,6,"input",[["class","form-control"],["formControlName","secret_key"],["id","secret_key"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,9)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](9,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](11,671744,[[17,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,4,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"button",[["cdPasswordButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,17).onClick()&&t),t}),null,null)),e["ɵdid"](17,81920,null,0,Mn.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](18,0,null,null,1,"button",[["cdCopy2ClipboardButton","secret_key"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e["ɵnov"](l,19).onClick()&&t),t}),null,null)),e["ɵdid"](19,81920,null,0,On.a,[e.ElementRef,e.Renderer2,Un.j,wl.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Le)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"secret_key"),l(n,14,0,"secret_key"),l(n,17,0,"secret_key"),l(n,19,0,"secret_key"),l(n,21,0,u.userForm.showError("secret_key",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function Ge(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["S3 key"])),(l()(),e["ɵeld"](3,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","generate_key"],["id","generate_key"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](12,671744,[[13,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,1,"label",[["class","custom-control-label"],["for","generate_key"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Auto-generate key"])),(l()(),e["ɵand"](16777216,null,null,1,null,Ue)),e["ɵdid"](19,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ze)),e["ɵdid"](21,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,12,0,"generate_key"),l(n,15,0,"generate_key"),l(n,19,0,!u.editing&&!u.userForm.getValue("generate_key")),l(n,21,0,!u.editing&&!u.userForm.getValue("generate_key"))}),(function(l,n){l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function Ke(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no subusers."]))],null,null)}function $e(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,23,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,21,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,2,"div",[["class","input-group-prepend border-left-0 border-right-0"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,0,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,16777216,null,null,5,"button",[["class","btn btn-light tc_showSubuserButton"],["tooltip","Edit"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSubuserModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](12,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](13,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](15,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](16,1),(l()(),e["ɵeld"](17,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteSubuserButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteSubuser(l.context.index)&&e),e}),null,null)),e["ɵdid"](18,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](19,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](21,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](22,1),(l()(),e["ɵeld"](23,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,12,0,"Edit");var e=l(n,16,0,u.icons.edit);l(n,15,0,e),l(n,18,0,"Delete");var t=l(n,22,0,u.icons.destroy);l(n,21,0,t)}),(function(l,n){var u=n.component;l(n,4,0,e["ɵinlineInterpolate"](1,"",u.icons.user,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.id,"")),l(n,8,0,e["ɵinlineInterpolate"](1,"",u.icons.share,"")),l(n,9,0,e["ɵinlineInterpolate"](1,"","full-control"===n.context.$implicit.permissions?"full":n.context.$implicit.permissions,""))}))}function Ze(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,20,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Subusers"])),(l()(),e["ɵeld"](3,0,null,null,17,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,16,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Ke)),e["ɵdid"](6,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$e)),e["ɵdid"](8,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](9,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,8,"button",[["class","btn btn-light float-right tc_addSubuserButton"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSubuserModal()&&e),e}),null,null)),(l()(),e["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](14,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](15,1),(l()(),e["ɵeld"](16,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](17,null,[""," ",""])),e["ɵppd"](18,1),e["ɵppd"](19,1),(l()(),e["ɵeld"](20,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,6,0,0===u.subusers.length),l(n,8,0,u.subusers);var e=l(n,15,0,u.icons.add);l(n,14,0,e)}),(function(l,n){var u=n.component,t=e["ɵunv"](n,17,0,l(n,18,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.CREATE)),i=e["ɵunv"](n,17,1,l(n,19,0,e["ɵnov"](n.parent.parent,1),u.subuserLabel));l(n,17,0,t,i)}))}function Qe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no keys."]))],null,null)}function Ye(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,17,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,16777216,null,null,5,"button",[["class","btn btn-light tc_showS3KeyButton"],["tooltip","Show"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showS3KeyModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](8,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteS3KeyButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteS3Key(l.context.index)&&e),e}),null,null)),e["ɵdid"](14,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](15,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](17,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](18,1),(l()(),e["ɵeld"](19,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,8,0,"Show");var e=l(n,12,0,u.icons.show);l(n,11,0,e),l(n,14,0,"Delete");var t=l(n,18,0,u.icons.destroy);l(n,17,0,t)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.key,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.user,""))}))}function We(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no keys."]))],null,null)}function Je(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,13,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,11,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"span",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,16777216,null,null,5,"button",[["class","btn btn-light tc_showSwiftKeyButton"],["tooltip","Show"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showSwiftKeyModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](8,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,8,0,"Show");var e=l(n,12,0,u.icons.show);l(n,11,0,e)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.key,"")),l(n,5,0,e["ɵinlineInterpolate"](1,"",n.context.$implicit.user,""))}))}function Xe(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,37,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Keys"])),(l()(),e["ɵeld"](3,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["S3"])),(l()(),e["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Qe)),e["ɵdid"](11,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ye)),e["ɵdid"](13,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](14,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](15,0,null,null,9,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,8,"button",[["class","btn btn-light float-right tc_addS3KeyButton"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showS3KeyModal()&&e),e}),null,null)),(l()(),e["ɵeld"](17,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](20,1),(l()(),e["ɵeld"](21,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](22,null,[""," ",""])),e["ɵppd"](23,1),e["ɵppd"](24,1),(l()(),e["ɵeld"](25,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null)),(l()(),e["ɵeld"](26,0,null,0,0,"hr",[],null,null,null,null,null)),(l()(),e["ɵeld"](27,0,null,null,10,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](28,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](31,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Swift"])),(l()(),e["ɵeld"](33,0,null,0,4,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,We)),e["ɵdid"](35,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Je)),e["ɵdid"](37,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,11,0,0===u.s3Keys.length),l(n,13,0,u.s3Keys);var e=l(n,20,0,u.icons.add);l(n,19,0,e),l(n,28,0),l(n,35,0,0===u.swiftKeys.length),l(n,37,0,u.swiftKeys)}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess);var t=e["ɵunv"](n,22,0,l(n,23,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.CREATE)),i=e["ɵunv"](n,22,1,l(n,24,0,e["ɵnov"](n.parent.parent,1),u.s3keyLabel));l(n,22,0,t,i),l(n,27,0,e["ɵnov"](n,28).hasErrors,e["ɵnov"](n,28).hasSuccess)}))}function He(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["There are no capabilities."]))],null,null)}function lt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,19,"span",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,17,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](2,0,null,null,2,"span",[["class","input-group-prepend"]],null,null,null,null,null)),(l()(),e["ɵeld"](3,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,0,"input",[["class","cd-form-control"],["readonly",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,16777216,null,null,5,"button",[["class","btn btn-light tc_editCapButton"],["tooltip","Edit"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showCapabilityModal(l.context.index)&&e),e}),null,null)),e["ɵdid"](8,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](11,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](12,1),(l()(),e["ɵeld"](13,16777216,null,null,5,"button",[["class","btn btn-light tc_deleteCapButton"],["tooltip","Delete"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.deleteCapability(l.context.index)&&e),e}),null,null)),e["ɵdid"](14,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"]},null),(l()(),e["ɵeld"](15,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](17,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](18,1),(l()(),e["ɵeld"](19,0,null,null,0,"span",[["class","form-text text-muted"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,8,0,"Edit");var e=l(n,12,0,u.icons.edit);l(n,11,0,e),l(n,14,0,"Delete");var t=l(n,18,0,u.icons.destroy);l(n,17,0,t)}),(function(l,n){l(n,4,0,e["ɵinlineInterpolate"](1,"",n.component.icons.share,"")),l(n,5,0,e["ɵinlineInterpolate"](2,"",n.context.$implicit.type,":",n.context.$implicit.perm,""))}))}function nt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,24,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Capabilities"])),(l()(),e["ɵeld"](3,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,17,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,He)),e["ɵdid"](9,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,lt)),e["ɵdid"](11,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵeld"](12,0,null,null,11,"div",[["class","row"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,10,"div",[["class","col-12"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,16777216,null,null,9,"button",[["class","btn btn-light float-right tc_addCapButton"],["tooltip","All capabilities are already added."],["triggers","pointerenter pointerleave"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.showCapabilityModal()&&e),e}),null,null)),e["ɵdid"](15,212992,null,0,Hu.c,[e.ViewContainerRef,en.a,Hu.a,e.ElementRef,e.Renderer2,Ju.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"],isDisabled:[2,"isDisabled"]},null),(l()(),e["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),e["ɵpad"](19,1),(l()(),e["ɵeld"](20,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e["ɵted"](21,null,[""," ",""])),e["ɵppd"](22,1),e["ɵppd"](23,1),(l()(),e["ɵeld"](24,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(l,n){var u=n.component;l(n,4,0),l(n,9,0,0===u.capabilities.length),l(n,11,0,u.capabilities),l(n,15,0,"All capabilities are already added.","pointerenter pointerleave",!u.hasAllCapabilities());var e=l(n,19,0,u.icons.add);l(n,18,0,e)}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,14,0,u.hasAllCapabilities());var t=e["ɵunv"](n,21,0,l(n,22,0,e["ɵnov"](n.parent.parent,0),u.actionLabels.ADD)),i=e["ɵunv"](n,21,1,l(n,23,0,e["ɵnov"](n.parent.parent,1),u.capabilityLabel));l(n,21,0,t,i)}))}function ut(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,27,{FormControlNames:1}),e["ɵqud"](603979776,28,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","user_quota_max_size_unlimited"],["id","user_quota_max_size_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](9,671744,[[27,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](11,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](12,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_max_size_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited size"]))],(function(l,n){l(n,1,0),l(n,9,0,"user_quota_max_size_unlimited"),l(n,12,0,"user_quota_max_size_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function et(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function tt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function it(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,29,{FormControlNames:1}),e["ɵqud"](603979776,30,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_quota_max_size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. size"])),(l()(),e["ɵeld"](6,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["formControlName","user_quota_max_size"],["id","user_quota_max_size"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onBlur(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[29,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,81920,null,0,Ne.a,[e.ElementRef,o.q,S.a,L.a],null,null),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,et)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tt)),e["ɵdid"](18,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"user_quota_max_size"),l(n,12,0),l(n,14,0,"user_quota_max_size"),l(n,16,0,u.userForm.showError("user_quota_max_size",e["ɵnov"](n.parent,3),"required")),l(n,18,0,u.userForm.showError("user_quota_max_size",e["ɵnov"](n.parent,3),"quotaMaxSize"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function at(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,31,{FormControlNames:1}),e["ɵqud"](603979776,32,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","user_quota_max_objects_unlimited"],["id","user_quota_max_objects_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](9,671744,[[31,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](11,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](12,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_max_objects_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited objects"]))],(function(l,n){l(n,1,0),l(n,9,0,"user_quota_max_objects_unlimited"),l(n,12,0,"user_quota_max_objects_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function ot(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function st(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 0."]))],null,null)}function dt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,33,{FormControlNames:1}),e["ɵqud"](603979776,34,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_quota_max_objects"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. objects"])),(l()(),e["ɵeld"](6,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","user_quota_max_objects"],["id","user_quota_max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](9,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](11,671744,[[33,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ot)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,st)),e["ɵdid"](18,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"user_quota_max_objects"),l(n,14,0,"user_quota_max_objects"),l(n,16,0,u.userForm.showError("user_quota_max_objects",e["ɵnov"](n.parent,3),"required")),l(n,18,0,u.userForm.showError("user_quota_max_objects",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function rt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,37,{FormControlNames:1}),e["ɵqud"](603979776,38,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","bucket_quota_max_size_unlimited"],["id","bucket_quota_max_size_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](9,671744,[[37,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](11,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](12,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_max_size_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited size"]))],(function(l,n){l(n,1,0),l(n,9,0,"bucket_quota_max_size_unlimited"),l(n,12,0,"bucket_quota_max_size_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function ct(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function mt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function gt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,39,{FormControlNames:1}),e["ɵqud"](603979776,40,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","bucket_quota_max_size"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. size"])),(l()(),e["ɵeld"](6,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["formControlName","bucket_quota_max_size"],["id","bucket_quota_max_size"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onBlur(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[39,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,81920,null,0,Ne.a,[e.ElementRef,o.q,S.a,L.a],null,null),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ct)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,mt)),e["ɵdid"](18,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"bucket_quota_max_size"),l(n,12,0),l(n,14,0,"bucket_quota_max_size"),l(n,16,0,u.userForm.showError("bucket_quota_max_size",e["ɵnov"](n.parent,3),"required")),l(n,18,0,u.userForm.showError("bucket_quota_max_size",e["ɵnov"](n.parent,3),"quotaMaxSize"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function pt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,41,{FormControlNames:1}),e["ɵqud"](603979776,42,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","bucket_quota_max_objects_unlimited"],["id","bucket_quota_max_objects_unlimited"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,7).onTouched()&&t),t}),null,null)),e["ɵdid"](7,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](9,671744,[[41,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](11,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](12,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_max_objects_unlimited"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Unlimited objects"]))],(function(l,n){l(n,1,0),l(n,9,0,"bucket_quota_max_objects_unlimited"),l(n,12,0,"bucket_quota_max_objects_unlimited")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function ft(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function vt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be >= 0."]))],null,null)}function bt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,43,{FormControlNames:1}),e["ɵqud"](603979776,44,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","bucket_quota_max_objects"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. objects"])),(l()(),e["ɵeld"](6,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","bucket_quota_max_objects"],["id","bucket_quota_max_objects"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,9).onTouched()&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](9,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](11,671744,[[43,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](13,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](14,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ft)),e["ɵdid"](16,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vt)),e["ɵdid"](18,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"bucket_quota_max_objects"),l(n,14,0,"bucket_quota_max_objects"),l(n,16,0,u.userForm.showError("bucket_quota_max_objects",e["ɵnov"](n.parent,3),"required")),l(n,18,0,u.userForm.showError("bucket_quota_max_objects",e["ɵnov"](n.parent,3),"min"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function ht(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,183,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,182,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,3).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,3).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,6).onSubmit()&&t),t}),null,null)),e["ɵdid"](2,16384,null,0,o.G,[],null,null),e["ɵdid"](3,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](5,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](6,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](7,0,null,null,176,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,[""," ",""])),e["ɵppd"](10,1),e["ɵppd"](11,1),(l()(),e["ɵeld"](12,0,null,null,162,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](14,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](17,0,null,0,4,"label",[["class","cd-col-form-label"],["for","uid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](19,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](20,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](22,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](23,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","uid"],["id","uid"],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,25)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,25).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,25)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,25)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](24,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](25,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](27,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](29,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](30,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Se)),e["ɵdid"](32,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,De)),e["ɵdid"](34,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](35,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](36,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](39,0,null,0,4,"label",[["class","cd-col-form-label"],["for","display_name"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](41,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](42,{required:0}),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](44,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](45,0,null,null,6,"input",[["class","form-control"],["formControlName","display_name"],["id","display_name"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,46)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,46).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,46)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,46)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](46,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](48,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](50,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](51,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Fe)),e["ɵdid"](53,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](54,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](55,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](58,0,null,0,1,"label",[["class","cd-col-form-label"],["for","email"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email address"])),(l()(),e["ɵeld"](60,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,6,"input",[["class","form-control"],["formControlName","email"],["id","email"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,62)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,62).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,62)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,62)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](62,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](64,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](66,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](67,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,je)),e["ɵdid"](69,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Be)),e["ɵdid"](71,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](72,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](73,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](76,0,null,0,1,"label",[["class","cd-col-form-label"],["for","max_buckets_mode"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Max. buckets"])),(l()(),e["ɵeld"](78,0,null,0,19,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](79,0,null,null,18,"select",[["class","form-control custom-select"],["formControlName","max_buckets_mode"],["id","max_buckets_mode"],["name","max_buckets_mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,i=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,80).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,80).onTouched()&&t),"change"===n&&(t=!1!==i.onMaxBucketsModeChange(u.target.value)&&t),t}),null,null)),e["ɵdid"](80,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](82,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](84,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](85,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](86,0,null,null,3,"option",[["value","-1"]],null,null,null,null,null)),e["ɵdid"](87,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](88,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Disabled"])),(l()(),e["ɵeld"](90,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e["ɵdid"](91,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](92,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Unlimited"])),(l()(),e["ɵeld"](94,0,null,null,3,"option",[["value","1"]],null,null,null,null,null)),e["ɵdid"](95,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](96,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Custom"])),(l()(),e["ɵand"](16777216,null,null,1,null,Me)),e["ɵdid"](99,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](100,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](101,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](104,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](105,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](106,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","suspended"],["id","suspended"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,107).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,107).onTouched()&&t),t}),null,null)),e["ɵdid"](107,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](109,671744,[[11,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](111,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](112,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](113,0,null,null,1,"label",[["class","custom-control-label"],["for","suspended"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Suspended"])),(l()(),e["ɵand"](16777216,null,null,1,null,Ge)),e["ɵdid"](116,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ze)),e["ɵdid"](118,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Xe)),e["ɵdid"](120,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,nt)),e["ɵdid"](122,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](123,0,null,null,25,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](124,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User quota"])),(l()(),e["ɵeld"](126,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](127,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,25,{FormControlNames:1}),e["ɵqud"](603979776,26,{messagesBlock:0}),(l()(),e["ɵeld"](130,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](131,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](132,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","user_quota_enabled"],["id","user_quota_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,133).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,133).onTouched()&&t),t}),null,null)),e["ɵdid"](133,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](135,671744,[[25,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](137,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](138,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](139,0,null,null,1,"label",[["class","custom-control-label"],["for","user_quota_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵand"](16777216,null,null,1,null,ut)),e["ɵdid"](142,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,it)),e["ɵdid"](144,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,at)),e["ɵdid"](146,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,dt)),e["ɵdid"](148,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](149,0,null,null,25,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](150,0,null,null,1,"legend",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Bucket quota"])),(l()(),e["ɵeld"](152,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](153,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,35,{FormControlNames:1}),e["ɵqud"](603979776,36,{messagesBlock:0}),(l()(),e["ɵeld"](156,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](157,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](158,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","bucket_quota_enabled"],["id","bucket_quota_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,159).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,159).onTouched()&&t),t}),null,null)),e["ɵdid"](159,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](161,671744,[[35,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](163,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](164,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](165,0,null,null,1,"label",[["class","custom-control-label"],["for","bucket_quota_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵand"](16777216,null,null,1,null,rt)),e["ɵdid"](168,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,gt)),e["ɵdid"](170,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pt)),e["ɵdid"](172,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,bt)),e["ɵdid"](174,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](175,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](176,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](177,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.onSubmit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](178,114688,null,0,Wn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](179,0,[""," ",""])),e["ɵppd"](180,1),e["ɵppd"](181,1),(l()(),e["ɵeld"](182,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](183,49152,null,0,zn.a,[Dl.Location,t.b],null,null)],(function(l,n){var u=n.component;l(n,3,0,u.userForm),l(n,6,0,u.userForm),l(n,14,0);var t=l(n,20,0,!u.editing);l(n,19,0,"cd-col-form-label",t),l(n,24,0,""),l(n,27,0,"uid"),l(n,30,0,"uid"),l(n,32,0,u.userForm.showError("uid",e["ɵnov"](n,3),"required")),l(n,34,0,u.userForm.showError("uid",e["ɵnov"](n,3),"notUnique")),l(n,36,0);var i=l(n,42,0,!u.editing);l(n,41,0,"cd-col-form-label",i),l(n,48,0,"display_name"),l(n,51,0,"display_name"),l(n,53,0,u.userForm.showError("display_name",e["ɵnov"](n,3),"required")),l(n,55,0),l(n,64,0,"email"),l(n,67,0,"email"),l(n,69,0,u.userForm.showError("email",e["ɵnov"](n,3),"email")),l(n,71,0,u.userForm.showError("email",e["ɵnov"](n,3),"notUnique")),l(n,73,0),l(n,82,0,"max_buckets_mode"),l(n,85,0,"max_buckets_mode"),l(n,87,0,"-1"),l(n,88,0,"-1"),l(n,91,0,"0"),l(n,92,0,"0"),l(n,95,0,"1"),l(n,96,0,"1"),l(n,99,0,1==u.userForm.get("max_buckets_mode").value),l(n,101,0),l(n,109,0,"suspended"),l(n,112,0,"suspended"),l(n,116,0,!u.editing),l(n,118,0,u.editing),l(n,120,0,u.editing),l(n,122,0,u.editing),l(n,127,0),l(n,135,0,"user_quota_enabled"),l(n,138,0,"user_quota_enabled"),l(n,142,0,u.userForm.controls.user_quota_enabled.value),l(n,144,0,u.userForm.controls.user_quota_enabled.value&&!u.userForm.getValue("user_quota_max_size_unlimited")),l(n,146,0,u.userForm.controls.user_quota_enabled.value),l(n,148,0,u.userForm.controls.user_quota_enabled.value&&!u.userForm.getValue("user_quota_max_objects_unlimited")),l(n,153,0),l(n,161,0,"bucket_quota_enabled"),l(n,164,0,"bucket_quota_enabled"),l(n,168,0,u.userForm.controls.bucket_quota_enabled.value),l(n,170,0,u.userForm.controls.bucket_quota_enabled.value&&!u.userForm.getValue("bucket_quota_max_size_unlimited")),l(n,172,0,u.userForm.controls.bucket_quota_enabled.value),l(n,174,0,u.userForm.controls.bucket_quota_enabled.value&&!u.userForm.getValue("bucket_quota_max_objects_unlimited")),l(n,178,0,u.userForm)}),(function(l,n){var u=n.component;l(n,1,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending);var t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent,0),u.action)),i=e["ɵunv"](n,9,1,l(n,11,0,e["ɵnov"](n.parent,1),u.resource));l(n,9,0,t,i),l(n,13,0,e["ɵnov"](n,14).hasErrors,e["ɵnov"](n,14).hasSuccess),l(n,23,0,u.editing,e["ɵnov"](n,29).ngClassUntouched,e["ɵnov"](n,29).ngClassTouched,e["ɵnov"](n,29).ngClassPristine,e["ɵnov"](n,29).ngClassDirty,e["ɵnov"](n,29).ngClassValid,e["ɵnov"](n,29).ngClassInvalid,e["ɵnov"](n,29).ngClassPending,e["ɵnov"](n,30).validClass,e["ɵnov"](n,30).invalidClass),l(n,35,0,e["ɵnov"](n,36).hasErrors,e["ɵnov"](n,36).hasSuccess),l(n,45,0,e["ɵnov"](n,50).ngClassUntouched,e["ɵnov"](n,50).ngClassTouched,e["ɵnov"](n,50).ngClassPristine,e["ɵnov"](n,50).ngClassDirty,e["ɵnov"](n,50).ngClassValid,e["ɵnov"](n,50).ngClassInvalid,e["ɵnov"](n,50).ngClassPending,e["ɵnov"](n,51).validClass,e["ɵnov"](n,51).invalidClass),l(n,54,0,e["ɵnov"](n,55).hasErrors,e["ɵnov"](n,55).hasSuccess),l(n,61,0,e["ɵnov"](n,66).ngClassUntouched,e["ɵnov"](n,66).ngClassTouched,e["ɵnov"](n,66).ngClassPristine,e["ɵnov"](n,66).ngClassDirty,e["ɵnov"](n,66).ngClassValid,e["ɵnov"](n,66).ngClassInvalid,e["ɵnov"](n,66).ngClassPending,e["ɵnov"](n,67).validClass,e["ɵnov"](n,67).invalidClass),l(n,72,0,e["ɵnov"](n,73).hasErrors,e["ɵnov"](n,73).hasSuccess),l(n,79,0,e["ɵnov"](n,84).ngClassUntouched,e["ɵnov"](n,84).ngClassTouched,e["ɵnov"](n,84).ngClassPristine,e["ɵnov"](n,84).ngClassDirty,e["ɵnov"](n,84).ngClassValid,e["ɵnov"](n,84).ngClassInvalid,e["ɵnov"](n,84).ngClassPending,e["ɵnov"](n,85).validClass,e["ɵnov"](n,85).invalidClass),l(n,100,0,e["ɵnov"](n,101).hasErrors,e["ɵnov"](n,101).hasSuccess),l(n,106,0,e["ɵnov"](n,111).ngClassUntouched,e["ɵnov"](n,111).ngClassTouched,e["ɵnov"](n,111).ngClassPristine,e["ɵnov"](n,111).ngClassDirty,e["ɵnov"](n,111).ngClassValid,e["ɵnov"](n,111).ngClassInvalid,e["ɵnov"](n,111).ngClassPending,e["ɵnov"](n,112).validClass,e["ɵnov"](n,112).invalidClass),l(n,126,0,e["ɵnov"](n,127).hasErrors,e["ɵnov"](n,127).hasSuccess),l(n,132,0,e["ɵnov"](n,137).ngClassUntouched,e["ɵnov"](n,137).ngClassTouched,e["ɵnov"](n,137).ngClassPristine,e["ɵnov"](n,137).ngClassDirty,e["ɵnov"](n,137).ngClassValid,e["ɵnov"](n,137).ngClassInvalid,e["ɵnov"](n,137).ngClassPending,e["ɵnov"](n,138).validClass,e["ɵnov"](n,138).invalidClass),l(n,152,0,e["ɵnov"](n,153).hasErrors,e["ɵnov"](n,153).hasSuccess),l(n,158,0,e["ɵnov"](n,163).ngClassUntouched,e["ɵnov"](n,163).ngClassTouched,e["ɵnov"](n,163).ngClassPristine,e["ɵnov"](n,163).ngClassDirty,e["ɵnov"](n,163).ngClassValid,e["ɵnov"](n,163).ngClassInvalid,e["ɵnov"](n,163).ngClassPending,e["ɵnov"](n,164).validClass,e["ɵnov"](n,164).invalidClass);var a=e["ɵunv"](n,179,0,l(n,180,0,e["ɵnov"](n.parent,0),u.action)),o=e["ɵunv"](n,179,1,l(n,181,0,e["ɵnov"](n.parent,1),u.resource));l(n,179,0,a,o)}))}function Ct(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵand"](16777216,null,null,1,null,xe)),e["ɵdid"](3,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ve)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ht)),e["ɵdid"](7,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.editing&&u.loading&&!u.error),l(n,5,0,u.editing&&u.error),l(n,7,0,!u.loading&&!u.error)}),null)}function _t(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-user-form",[],null,null,null,Ct,Te)),e["ɵdid"](1,114688,null,0,W,[R.a,ne.a,ne.m,h.a,sn.b,k.a,wl.a,t.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Rt=e["ɵccf"]("cd-rgw-user-form",W,_t,{},{},[]),yt=u("xSw7"),kt=u("GgAd"),It=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,be.b,be.a)),e["ɵdid"](1,114688,null,0,he.a,[wl.a],{type:[0,"type"],size:[1,"size"]},null),(l()(),e["ɵted"](-1,0,["The bucket list data might be stale. If needed, you can manually reload it."]))],(function(l,n){l(n,1,0,"warning","slim")}),null)}function Et(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,yt.b,yt.a)),e["ɵdid"](1,573440,null,0,kt.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.bucket_quota.max_size,n.parent.context.row.bucket_size)}),null)}function qt(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,["No Limit"]))],null,null)}function Nt(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Et)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](0,[["noSizeQuota",2]],null,0,null,qt))],(function(l,n){l(n,1,0,n.context.row.bucket_quota.max_size>0&&n.context.row.bucket_quota.enabled,e["ɵnov"](n,2))}),null)}function Tt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,yt.b,yt.a)),e["ɵdid"](1,573440,null,0,kt.a,[],{total:[0,"total"],used:[1,"used"],isBinary:[2,"isBinary"]},null)],(function(l,n){l(n,1,0,n.parent.context.row.bucket_quota.max_objects,n.parent.context.row.num_objects,!1)}),null)}function xt(l){return e["ɵvid"](0,[(l()(),e["ɵted"](-1,null,["No Limit"]))],null,null)}function Vt(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Tt)),e["ɵdid"](1,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](0,[["noObjectQuota",2]],null,0,null,xt))],(function(l,n){l(n,1,0,n.context.row.bucket_quota.max_objects>0&&n.context.row.bucket_quota.enabled,e["ɵnov"](n,2))}),null)}function St(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{table:0}),e["ɵqud"](402653184,2,{bucketSizeTpl:0}),e["ɵqud"](402653184,3,{bucketObjectTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,wt)),e["ɵdid"](4,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](5,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","bid"],["selectionType","multiClick"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(l,n,u){var e=!0,t=l.component;return"setExpandedRow"===n&&(e=!1!==t.setExpandedRow(u)&&e),"updateSelection"===n&&(e=!1!==t.updateSelection(u)&&e),"fetchData"===n&&(e=!1!==t.getBucketList(u)&&e),e}),nn.b,nn.a)),e["ɵdid"](6,2867200,[[1,4],["table",4]],0,x.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](7,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Ce.b,Ce.a)),e["ɵdid"](8,114688,null,0,_e.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](9,0,null,3,1,"cd-rgw-bucket-details",[["cdTableDetail",""]],null,null,null,Xl,zl)),e["ɵdid"](10,49152,null,0,Ll,[],{selection:[0,"selection"]},null),(l()(),e["ɵand"](0,[[2,2],["bucketSizeTpl",2]],null,0,null,Nt)),(l()(),e["ɵand"](0,[[3,2],["bucketObjectTpl",2]],null,0,null,Vt))],(function(l,n){var u=n.component;l(n,4,0,u.isStale),l(n,6,0,u.buckets,u.columns,"flex",!0,!1,"bid","multiClick"),l(n,8,0,u.permission,u.selection,u.tableActions),l(n,10,0,u.expandedRow)}),null)}function Dt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-rgw-bucket-list",[],null,null,null,St,It)),e["ɵprd"](256,null,j.a,B,[]),e["ɵdid"](2,114688,null,0,P,[F.a,S.a,D.a,v,sn.b,wl.a,j.a,t.b,e.NgZone,e.ChangeDetectorRef],null,null)],(function(l,n){l(n,2,0)}),null)}var Ft=e["ɵccf"]("cd-rgw-bucket-list",P,Dt,{},{},[]),jt=u("4HWh"),Bt=u("p4Cf"),Pt=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function At(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ee.b,Ee.a)),e["ɵdid"](1,49152,null,0,qe.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading bucket data..."]))],null,null)}function Mt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,1,{FormControlNames:1}),e["ɵqud"](603979776,2,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","id"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Id"])),(l()(),e["ɵeld"](6,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,6,"input",[["class","form-control"],["formControlName","id"],["id","id"],["name","id"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[1,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,1,0),l(n,10,0,"id"),l(n,13,0,"id")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function Ot(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ut(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The value is not valid."]))],null,null)}function Lt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen name is already in use."]))],null,null)}function zt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Gt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a user --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Kt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)}),(function(l,n){l(n,3,0,n.context.$implicit)}))}function $t(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Zt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["Loading..."]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Qt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{ngValue:[0,"ngValue"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e["ɵted"](-1,null,["-- Select a placement target --"]))],(function(l,n){l(n,1,0,null),l(n,2,0,null)}),null)}function Yt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),e["ɵdid"](1,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](2,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](3,null,["",""]))],(function(l,n){l(n,1,0,n.context.$implicit.name),l(n,2,0,n.context.$implicit.name)}),(function(l,n){l(n,3,0,n.context.$implicit.description)}))}function Wt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Jt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","placement-target"],["id","placement-target"],["name","placement-target"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,1).onTouched()&&t),t}),null,null)),e["ɵdid"](1,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](3,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](5,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](6,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Zt)),e["ɵdid"](8,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Qt)),e["ɵdid"](10,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Yt)),e["ɵdid"](12,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Wt)),e["ɵdid"](14,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){var u=n.component;l(n,3,0,"placement-target"),l(n,6,0,"placement-target"),l(n,8,0,null===u.placementTargets),l(n,10,0,null!==u.placementTargets),l(n,12,0,u.placementTargets),l(n,14,0,u.bucketForm.showError("placement-target",e["ɵnov"](n.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending,e["ɵnov"](n,6).validClass,e["ɵnov"](n,6).invalidClass)}))}function Xt(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,6,"input",[["class","form-control"],["formControlName","placement-target"],["id","placement-target"],["name","placement-target"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,2)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](2,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](4,671744,[[7,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](6,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](7,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null)],(function(l,n){l(n,4,0,"placement-target"),l(n,7,0,"placement-target")}),(function(l,n){l(n,1,0,e["ɵnov"](n,6).ngClassUntouched,e["ɵnov"](n,6).ngClassTouched,e["ɵnov"](n,6).ngClassPristine,e["ɵnov"](n,6).ngClassDirty,e["ɵnov"](n,6).ngClassValid,e["ɵnov"](n,6).ngClassInvalid,e["ɵnov"](n,6).ngClassPending,e["ɵnov"](n,7).validClass,e["ɵnov"](n,7).invalidClass)}))}function Ht(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Versioning"])),(l()(),e["ɵeld"](3,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,9,{FormControlNames:1}),e["ɵqud"](603979776,10,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,14,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,13,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","versioning"],["id","versioning"],["name","versioning"],["type","checkbox"]],[[8,"checked",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,i=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),"change"===n&&(t=!1!==i.updateVersioning()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](12,671744,[[9,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,1,"label",[["class","custom-control-label"],["for","versioning"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](18,0,null,null,3,"cd-helper",[],null,null,null,jt.b,jt.a)),e["ɵdid"](19,49152,null,0,Bt.a,[],null,null),(l()(),e["ɵeld"](20,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables versioning for the objects in the bucket."]))],(function(l,n){l(n,4,0),l(n,12,0,"versioning"),l(n,15,0,"versioning")}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,u.isVersioningEnabled,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function li(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ni(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,13,{FormControlNames:1}),e["ɵqud"](603979776,14,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mfa-token-serial"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Token Serial Number"])),(l()(),e["ɵeld"](6,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,6,"input",[["class","form-control"],["formControlName","mfa-token-serial"],["id","mfa-token-serial"],["name","mfa-token-serial"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[13,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,li)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"mfa-token-serial"),l(n,13,0,"mfa-token-serial"),l(n,15,0,u.bucketForm.showError("mfa-token-serial",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function ui(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ei(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,15,{FormControlNames:1}),e["ɵqud"](603979776,16,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","mfa-token-pin"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Token PIN"])),(l()(),e["ɵeld"](6,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,6,"input",[["class","form-control"],["formControlName","mfa-token-pin"],["id","mfa-token-pin"],["name","mfa-token-pin"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,8)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](10,671744,[[15,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ui)),e["ɵdid"](15,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,10,0,"mfa-token-pin"),l(n,13,0,"mfa-token-pin"),l(n,15,0,u.bucketForm.showError("mfa-token-pin",e["ɵnov"](n.parent.parent,3),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function ti(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,25,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Multi-Factor Authentication"])),(l()(),e["ɵeld"](3,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](4,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,11,{FormControlNames:1}),e["ɵqud"](603979776,12,{messagesBlock:0}),(l()(),e["ɵeld"](7,0,null,0,14,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,13,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](9,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","mfa-delete"],["id","mfa-delete"],["name","mfa-delete"],["type","checkbox"]],[[8,"checked",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0,i=l.component;return"change"===n&&(t=!1!==e["ɵnov"](l,10).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,10).onTouched()&&t),"change"===n&&(t=!1!==i.updateMfaDelete()&&t),t}),null,null)),e["ɵdid"](10,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](12,671744,[[11,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](14,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](15,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,1,"label",[["class","custom-control-label"],["for","mfa-delete"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Delete enabled"])),(l()(),e["ɵeld"](18,0,null,null,3,"cd-helper",[],null,null,null,jt.b,jt.a)),e["ɵdid"](19,49152,null,0,Bt.a,[],null,null),(l()(),e["ɵeld"](20,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state."])),(l()(),e["ɵand"](16777216,null,null,1,null,ni)),e["ɵdid"](23,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ei)),e["ɵdid"](25,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,4,0),l(n,12,0,"mfa-delete"),l(n,15,0,"mfa-delete"),l(n,23,0,u.areMfaCredentialsRequired()),l(n,25,0,u.areMfaCredentialsRequired())}),(function(l,n){var u=n.component;l(n,3,0,e["ɵnov"](n,4).hasErrors,e["ɵnov"](n,4).hasSuccess),l(n,9,0,u.isMfaDeleteEnabled,e["ɵnov"](n,14).ngClassUntouched,e["ɵnov"](n,14).ngClassTouched,e["ɵnov"](n,14).ngClassPristine,e["ɵnov"](n,14).ngClassDirty,e["ɵnov"](n,14).ngClassValid,e["ɵnov"](n,14).ngClassInvalid,e["ɵnov"](n,14).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function ii(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,19,{FormControlNames:1}),e["ɵqud"](603979776,20,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","lock_mode"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Mode"])),(l()(),e["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","lock_mode"],["id","lock_mode"],["name","lock_mode"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,8).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,8).onTouched()&&t),t}),null,null)),e["ɵdid"](8,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](10,671744,[[19,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](12,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](13,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,3,"option",[["value","COMPLIANCE"]],null,null,null,null,null)),e["ɵdid"](15,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](16,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Compliance"])),(l()(),e["ɵeld"](18,0,null,null,3,"option",[["value","GOVERNANCE"]],null,null,null,null,null)),e["ɵdid"](19,147456,null,0,o.v,[e.ElementRef,e.Renderer2,[2,o.A]],{value:[0,"value"]},null),e["ɵdid"](20,147456,null,0,o.F,[e.ElementRef,e.Renderer2,[8,null]],{value:[0,"value"]},null),(l()(),e["ɵted"](-1,null,["Governance"]))],(function(l,n){l(n,1,0),l(n,10,0,"lock_mode"),l(n,13,0,"lock_mode"),l(n,15,0,"COMPLIANCE"),l(n,16,0,"COMPLIANCE"),l(n,19,0,"GOVERNANCE"),l(n,20,0,"GOVERNANCE")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,7,0,e["ɵnov"](n,12).ngClassUntouched,e["ɵnov"](n,12).ngClassTouched,e["ɵnov"](n,12).ngClassPristine,e["ɵnov"](n,12).ngClassDirty,e["ɵnov"](n,12).ngClassValid,e["ɵnov"](n,12).ngClassInvalid,e["ɵnov"](n,12).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function ai(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be a positive integer."]))],null,null)}function oi(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Retention period requires either Days or Years."]))],null,null)}function si(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,21,{FormControlNames:1}),e["ɵqud"](603979776,22,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,5,"label",[["class","cd-col-form-label"],["for","lock_retention_period_days"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Days"])),(l()(),e["ɵeld"](7,0,null,null,2,"cd-helper",[],null,null,null,jt.b,jt.a)),e["ɵdid"](8,49152,null,0,Bt.a,[],null,null),(l()(),e["ɵted"](-1,0,["The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket."])),(l()(),e["ɵeld"](10,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,7,"input",[["class","form-control"],["formControlName","lock_retention_period_days"],["id","lock_retention_period_days"],["min","0"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,12)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,13).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,13).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),t}),null,null)),e["ɵdid"](12,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](13,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](15,671744,[[21,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](17,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](18,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ai)),e["ɵdid"](20,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,oi)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,15,0,"lock_retention_period_days"),l(n,18,0,"lock_retention_period_days"),l(n,20,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"pattern")),l(n,22,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"eitherDaysOrYears"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass)}))}function di(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The entered value must be a positive integer."]))],null,null)}function ri(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Retention period requires either Days or Years."]))],null,null)}function ci(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](1,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,23,{FormControlNames:1}),e["ɵqud"](603979776,24,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,5,"label",[["class","cd-col-form-label"],["for","lock_retention_period_years"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Years"])),(l()(),e["ɵeld"](7,0,null,null,2,"cd-helper",[],null,null,null,jt.b,jt.a)),e["ɵdid"](8,49152,null,0,Bt.a,[],null,null),(l()(),e["ɵted"](-1,0,["The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket."])),(l()(),e["ɵeld"](10,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,7,"input",[["class","form-control"],["formControlName","lock_retention_period_years"],["id","lock_retention_period_years"],["min","0"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,12).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,12)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e["ɵnov"](l,13).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e["ɵnov"](l,13).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,13).onTouched()&&t),t}),null,null)),e["ɵdid"](12,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵdid"](13,16384,null,0,o.w,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l,n){return[l,n]}),[o.e,o.w]),e["ɵdid"](15,671744,[[23,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](17,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](18,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,di)),e["ɵdid"](20,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ri)),e["ɵdid"](22,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,15,0,"lock_retention_period_years"),l(n,18,0,"lock_retention_period_years"),l(n,20,0,u.bucketForm.showError("lock_retention_period_days",e["ɵnov"](n.parent,3),"pattern")),l(n,22,0,u.bucketForm.showError("lock_retention_period_years",e["ɵnov"](n.parent,3),"eitherDaysOrYears"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,17).ngClassUntouched,e["ɵnov"](n,17).ngClassTouched,e["ɵnov"](n,17).ngClassPristine,e["ɵnov"](n,17).ngClassDirty,e["ɵnov"](n,17).ngClassValid,e["ɵnov"](n,17).ngClassInvalid,e["ɵnov"](n,17).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass)}))}function mi(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,115,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,114,"form",[["name","bucketForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e["ɵnov"](l,3).onSubmit(u)&&t),"reset"===n&&(t=!1!==e["ɵnov"](l,3).onReset()&&t),"submit"===n&&(t=!1!==e["ɵnov"](l,6).onSubmit()&&t),t}),null,null)),e["ɵdid"](2,16384,null,0,o.G,[],null,null),e["ɵdid"](3,540672,[["frm",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,o.d,null,[o.l]),e["ɵdid"](5,16384,null,0,o.s,[[4,o.d]],null,null),e["ɵdid"](6,16384,null,0,An.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](7,0,null,null,108,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](9,null,[""," ",""])),e["ɵppd"](10,1),e["ɵppd"](11,1),(l()(),e["ɵeld"](12,0,null,null,94,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,Mt)),e["ɵdid"](14,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](15,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](16,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,3,{FormControlNames:1}),e["ɵqud"](603979776,4,{messagesBlock:0}),(l()(),e["ɵeld"](19,0,null,0,4,"label",[["class","cd-col-form-label"],["for","bid"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](21,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](22,{required:0}),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](24,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](25,0,null,null,7,"input",[["class","form-control"],["formControlName","bid"],["id","bid"],["name","bid"],["placeholder","Name..."],["type","text"]],[[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var t=!0;return"input"===n&&(t=!1!==e["ɵnov"](l,27)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,27).onTouched()&&t),"compositionstart"===n&&(t=!1!==e["ɵnov"](l,27)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e["ɵnov"](l,27)._compositionEnd(u.target.value)&&t),t}),null,null)),e["ɵdid"](26,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](27,16384,null,0,o.e,[e.Renderer2,e.ElementRef,[2,o.b]],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.e]),e["ɵdid"](29,671744,[[3,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](31,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](32,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ot)),e["ɵdid"](34,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ut)),e["ɵdid"](36,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Lt)),e["ɵdid"](38,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](39,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](40,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,5,{FormControlNames:1}),e["ɵqud"](603979776,6,{messagesBlock:0}),(l()(),e["ɵeld"](43,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","owner"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Owner"])),(l()(),e["ɵeld"](45,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](46,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","owner"],["id","owner"],["name","owner"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,48).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,48).onTouched()&&t),t}),null,null)),e["ɵdid"](47,4210688,null,0,Qn.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](48,16384,null,0,o.A,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.A]),e["ɵdid"](50,671744,[[5,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](52,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](53,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,zt)),e["ɵdid"](55,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Gt)),e["ɵdid"](57,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Kt)),e["ɵdid"](59,278528,null,0,Dl.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$t)),e["ɵdid"](61,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](62,0,null,null,12,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](63,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,7,{FormControlNames:1}),e["ɵqud"](603979776,8,{messagesBlock:0}),(l()(),e["ɵeld"](66,0,null,0,4,"label",[["class","cd-col-form-label"],["for","placement-target"]],null,null,null,null,null)),e["ɵprd"](512,null,Dl["ɵNgClassImpl"],Dl["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](68,278528,null,0,Dl.NgClass,[Dl["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](69,{required:0}),(l()(),e["ɵted"](-1,null,["Placement target"])),(l()(),e["ɵeld"](71,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](0,[["placementTargetSelect",2]],null,0,null,Jt)),(l()(),e["ɵand"](16777216,null,null,1,null,Xt)),e["ɵdid"](74,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ht)),e["ɵdid"](76,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ti)),e["ɵdid"](78,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](79,0,null,null,27,"fieldset",[],null,null,null,null,null)),(l()(),e["ɵeld"](80,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Locking"])),(l()(),e["ɵeld"](82,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Pn.b,Pn.a)),e["ɵdid"](83,1163264,null,2,An.c,[e.ElementRef,An.g],null,null),e["ɵqud"](603979776,17,{FormControlNames:1}),e["ɵqud"](603979776,18,{messagesBlock:0}),(l()(),e["ɵeld"](86,0,null,0,14,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](87,0,null,null,13,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](88,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","lock_enabled"],["id","lock_enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e["ɵnov"](l,89).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e["ɵnov"](l,89).onTouched()&&t),t}),null,null)),e["ɵdid"](89,16384,null,0,o.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,o.p,(function(l){return[l]}),[o.c]),e["ɵdid"](91,671744,[[17,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,o.q,null,[o.j]),e["ɵdid"](93,16384,null,0,o.r,[[4,o.q]],null,null),e["ɵdid"](94,16384,null,0,An.h,[[3,o.d],An.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](95,0,null,null,1,"label",[["class","custom-control-label"],["for","lock_enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"])),(l()(),e["ɵeld"](97,0,null,null,3,"cd-helper",[],null,null,null,jt.b,jt.a)),e["ɵdid"](98,49152,null,0,Bt.a,[],null,null),(l()(),e["ɵeld"](99,0,null,0,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket."])),(l()(),e["ɵand"](16777216,null,null,1,null,ii)),e["ɵdid"](102,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,si)),e["ɵdid"](104,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ci)),e["ɵdid"](106,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](107,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](108,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](109,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),Yn.b,Yn.a)),e["ɵdid"](110,114688,null,0,Wn.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](111,0,[""," ",""])),e["ɵppd"](112,1),e["ɵppd"](113,1),(l()(),e["ɵeld"](114,0,null,null,1,"cd-back-button",[],null,null,null,Ln.b,Ln.a)),e["ɵdid"](115,49152,null,0,zn.a,[Dl.Location,t.b],null,null)],(function(l,n){var u=n.component;l(n,3,0,u.bucketForm),l(n,6,0,u.bucketForm),l(n,14,0,u.editing),l(n,16,0);var t=l(n,22,0,!u.editing);l(n,21,0,"cd-col-form-label",t),l(n,26,0,!u.editing),l(n,29,0,"bid"),l(n,32,0,"bid"),l(n,34,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"required")),l(n,36,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"bucketNameInvalid")),l(n,38,0,u.bucketForm.showError("bid",e["ɵnov"](n,3),"bucketNameExists")),l(n,40,0),l(n,47,0,u.editing),l(n,50,0,"owner"),l(n,53,0,"owner"),l(n,55,0,null===u.owners),l(n,57,0,null!==u.owners),l(n,59,0,u.owners),l(n,61,0,u.bucketForm.showError("owner",e["ɵnov"](n,3),"required")),l(n,63,0);var i=l(n,69,0,!u.editing);l(n,68,0,"cd-col-form-label",i),l(n,74,0,u.editing,e["ɵnov"](n,72)),l(n,76,0,u.editing),l(n,78,0,u.editing),l(n,83,0),l(n,91,0,"lock_enabled"),l(n,94,0,"lock_enabled"),l(n,102,0,u.bucketForm.getValue("lock_enabled")),l(n,104,0,u.bucketForm.getValue("lock_enabled")),l(n,106,0,u.bucketForm.getValue("lock_enabled")),l(n,110,0,u.bucketForm)}),(function(l,n){var u=n.component;l(n,1,0,e["ɵnov"](n,5).ngClassUntouched,e["ɵnov"](n,5).ngClassTouched,e["ɵnov"](n,5).ngClassPristine,e["ɵnov"](n,5).ngClassDirty,e["ɵnov"](n,5).ngClassValid,e["ɵnov"](n,5).ngClassInvalid,e["ɵnov"](n,5).ngClassPending);var t=e["ɵunv"](n,9,0,l(n,10,0,e["ɵnov"](n.parent,0),u.action)),i=e["ɵunv"](n,9,1,l(n,11,0,e["ɵnov"](n.parent,1),u.resource));l(n,9,0,t,i),l(n,15,0,e["ɵnov"](n,16).hasErrors,e["ɵnov"](n,16).hasSuccess),l(n,25,0,u.editing,e["ɵnov"](n,31).ngClassUntouched,e["ɵnov"](n,31).ngClassTouched,e["ɵnov"](n,31).ngClassPristine,e["ɵnov"](n,31).ngClassDirty,e["ɵnov"](n,31).ngClassValid,e["ɵnov"](n,31).ngClassInvalid,e["ɵnov"](n,31).ngClassPending,e["ɵnov"](n,32).validClass,e["ɵnov"](n,32).invalidClass),l(n,39,0,e["ɵnov"](n,40).hasErrors,e["ɵnov"](n,40).hasSuccess),l(n,46,0,e["ɵnov"](n,52).ngClassUntouched,e["ɵnov"](n,52).ngClassTouched,e["ɵnov"](n,52).ngClassPristine,e["ɵnov"](n,52).ngClassDirty,e["ɵnov"](n,52).ngClassValid,e["ɵnov"](n,52).ngClassInvalid,e["ɵnov"](n,52).ngClassPending,e["ɵnov"](n,53).validClass,e["ɵnov"](n,53).invalidClass),l(n,62,0,e["ɵnov"](n,63).hasErrors,e["ɵnov"](n,63).hasSuccess),l(n,82,0,e["ɵnov"](n,83).hasErrors,e["ɵnov"](n,83).hasSuccess),l(n,88,0,e["ɵnov"](n,93).ngClassUntouched,e["ɵnov"](n,93).ngClassTouched,e["ɵnov"](n,93).ngClassPristine,e["ɵnov"](n,93).ngClassDirty,e["ɵnov"](n,93).ngClassValid,e["ɵnov"](n,93).ngClassInvalid,e["ɵnov"](n,93).ngClassPending,e["ɵnov"](n,94).validClass,e["ɵnov"](n,94).invalidClass);var a=e["ɵunv"](n,111,0,l(n,112,0,e["ɵnov"](n.parent,0),u.action)),o=e["ɵunv"](n,111,1,l(n,113,0,e["ɵnov"](n.parent,1),u.resource));l(n,111,0,a,o)}))}function gi(l){return e["ɵvid"](0,[e["ɵpid"](0,Dl.TitleCasePipe,[]),e["ɵpid"](0,jn.a,[]),(l()(),e["ɵand"](16777216,null,null,1,null,At)),e["ɵdid"](3,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,mi)),e["ɵdid"](5,16384,null,0,Dl.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,3,0,u.editing&&u.loading&&!u.error),l(n,5,0,!u.loading&&!u.error)}),null)}function pi(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-bucket-form",[],null,null,null,gi,Pt)),e["ɵdid"](1,114688,null,0,E,[ne.a,ne.m,R.a,v,b,h.a,k.a,wl.a,t.b],null,null)],(function(l,n){l(n,1,0)}),null)}var fi=e["ɵccf"]("cd-rgw-bucket-form",E,pi,{},{},[]),vi=u("i4WA"),bi=u("6qls"),hi=u("tz6c"),Ci=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _i(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["type","info"]],null,null,null,be.b,be.a)),e["ɵdid"](1,114688,null,0,he.a,[wl.a],{type:[0,"type"]},null),(l()(),e["ɵted"](2,0,[" ",""])),(l()(),e["ɵeld"](3,0,null,0,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,0,4,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Please consult the "])),(l()(),e["ɵeld"](6,0,null,null,1,"cd-doc",[["section","rgw"]],null,null,null,vi.b,vi.a)),e["ɵdid"](7,114688,null,0,bi.a,[hi.a,wl.a],{section:[0,"section"]},null),(l()(),e["ɵted"](-1,null,[" on how to configure and enable the Object Gateway management functionality."]))],(function(l,n){l(n,1,0,"info"),l(n,7,0,"rgw")}),(function(l,n){l(n,2,0,n.component.message)}))}function Ri(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-rgw-501",[],null,null,null,_i,Ci)),e["ɵdid"](1,245760,null,0,a,[ne.a],null,null)],(function(l,n){l(n,1,0)}),null)}var yi=e["ɵccf"]("cd-rgw-501",a,Ri,{},{},[]);u.d(n,"RgwModuleNgFactory",(function(){return ki})),u.d(n,"RoutedRgwModuleNgFactory",(function(){return Ii}));var ki=e["ɵcmf"](ll,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[rl.a,cl.a,ml.a,gl.a,gl.b,pl.a,fl.a,vl.a,bl.a,hl.a,Cl.a,Ol,ln,Fn,Zn,cu,yu,Du]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,Dl.NgLocalization,Dl.NgLocaleLocalization,[e.LOCALE_ID,[2,Dl["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,Fu.a,Fu.a,[]),e["ɵmpd"](4608,ju.a,ju.a,[]),e["ɵmpd"](4608,Ul.a,Ul.a,[wl.a]),e["ɵmpd"](4608,Dl.DatePipe,Dl.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,Bu.a,Bu.a,[]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,S.a,S.a,[L.a]),e["ɵmpd"](4608,Pu.a,Pu.a,[L.a]),e["ɵmpd"](4608,D.a,D.a,[L.a]),e["ɵmpd"](4608,Au.a,Au.a,[]),e["ɵmpd"](4608,Mu.a,Mu.a,[]),e["ɵmpd"](4608,Ou.a,Ou.a,[]),e["ɵmpd"](4608,Uu.a,Uu.a,[]),e["ɵmpd"](4608,Tl.a,Tl.a,[Dl.DatePipe]),e["ɵmpd"](4608,Lu.a,Lu.a,[]),e["ɵmpd"](4608,zu.a,zu.a,[]),e["ɵmpd"](4608,Gu.a,Gu.a,[]),e["ɵmpd"](4608,Ku.a,Ku.a,[]),e["ɵmpd"](4608,$u.a,$u.a,[]),e["ɵmpd"](4608,Zu.a,Zu.a,[wl.a]),e["ɵmpd"](4608,jn.a,jn.a,[]),e["ɵmpd"](4608,an.a,an.a,[]),e["ɵmpd"](4608,Qu.a,Qu.a,[]),e["ɵmpd"](4608,o.D,o.D,[]),e["ɵmpd"](4608,o.h,o.h,[]),e["ɵmpd"](4608,Yu.b,Yu.b,[]),e["ɵmpd"](4608,Wu.a,Wu.a,[]),e["ɵmpd"](4608,Ju.a,Ju.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,en.a,en.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,Ju.a,e.ApplicationRef]),e["ɵmpd"](4608,Xu.c,Xu.c,[]),e["ɵmpd"](4608,Hu.a,Hu.a,[]),e["ɵmpd"](4608,sn.b,sn.b,[e.RendererFactory2,en.a]),e["ɵmpd"](4608,le.y,le.y,[Dl.DOCUMENT]),e["ɵmpd"](4608,le.r,le.r,[]),e["ɵmpd"](4608,le.a,le.a,[]),e["ɵmpd"](4608,un.f,un.f,[]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,i.a,i.a,[ne.m,F.a]),e["ɵmpd"](4608,_l.f,_l.f,[]),e["ɵmpd"](1073742336,Dl.CommonModule,Dl.CommonModule,[]),e["ɵmpd"](1073742336,ue.a,ue.a,[]),e["ɵmpd"](1073742336,o.C,o.C,[]),e["ɵmpd"](1073742336,o.n,o.n,[]),e["ɵmpd"](1073742336,o.y,o.y,[]),e["ɵmpd"](1073742336,Yu.c,Yu.c,[]),e["ɵmpd"](1073742336,Wu.d,Wu.d,[]),e["ɵmpd"](1073742336,Xu.d,Xu.d,[]),e["ɵmpd"](1073742336,Hu.d,Hu.d,[]),e["ɵmpd"](1073742336,ee.b,ee.b,[]),e["ɵmpd"](1073742336,sn.e,sn.e,[]),e["ɵmpd"](1073742336,te.a,te.a,[]),e["ɵmpd"](1073742336,un.e,un.e,[]),e["ɵmpd"](1073742336,An.f,An.f,[]),e["ɵmpd"](1073742336,ie.ClickOutsideModule,ie.ClickOutsideModule,[]),e["ɵmpd"](1073742336,ae.b,ae.b,[]),e["ɵmpd"](1073742336,ne.q,ne.q,[[2,ne.v],[2,ne.m]]),e["ɵmpd"](1073742336,oe.a,oe.a,[]),e["ɵmpd"](1073742336,le.u,le.u,[]),e["ɵmpd"](1073742336,se.a,se.a,[]),e["ɵmpd"](1073742336,f.a,f.a,[]),e["ɵmpd"](1073742336,de.a,de.a,[]),e["ɵmpd"](1073742336,re.a,re.a,[]),e["ɵmpd"](1073742336,_l.d,_l.d,[]),e["ɵmpd"](1073742336,ll,ll,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,un.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),Ii=e["ɵcmf"](dl,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[rl.a,cl.a,ml.a,gl.a,gl.b,pl.a,fl.a,vl.a,bl.a,hl.a,Cl.a,Ol,ln,Fn,Zn,cu,yu,Du,ve,we,Rt,Ft,fi,yi]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,Dl.NgLocalization,Dl.NgLocaleLocalization,[e.LOCALE_ID,[2,Dl["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,Fu.a,Fu.a,[]),e["ɵmpd"](4608,ju.a,ju.a,[]),e["ɵmpd"](4608,Ul.a,Ul.a,[wl.a]),e["ɵmpd"](4608,Dl.DatePipe,Dl.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,Bu.a,Bu.a,[]),e["ɵmpd"](4608,L.a,L.a,[]),e["ɵmpd"](4608,S.a,S.a,[L.a]),e["ɵmpd"](4608,Pu.a,Pu.a,[L.a]),e["ɵmpd"](4608,D.a,D.a,[L.a]),e["ɵmpd"](4608,Au.a,Au.a,[]),e["ɵmpd"](4608,Mu.a,Mu.a,[]),e["ɵmpd"](4608,Ou.a,Ou.a,[]),e["ɵmpd"](4608,Uu.a,Uu.a,[]),e["ɵmpd"](4608,Tl.a,Tl.a,[Dl.DatePipe]),e["ɵmpd"](4608,Lu.a,Lu.a,[]),e["ɵmpd"](4608,zu.a,zu.a,[]),e["ɵmpd"](4608,Gu.a,Gu.a,[]),e["ɵmpd"](4608,Ku.a,Ku.a,[]),e["ɵmpd"](4608,$u.a,$u.a,[]),e["ɵmpd"](4608,Zu.a,Zu.a,[wl.a]),e["ɵmpd"](4608,jn.a,jn.a,[]),e["ɵmpd"](4608,an.a,an.a,[]),e["ɵmpd"](4608,Qu.a,Qu.a,[]),e["ɵmpd"](4608,o.D,o.D,[]),e["ɵmpd"](4608,o.h,o.h,[]),e["ɵmpd"](4608,Yu.b,Yu.b,[]),e["ɵmpd"](4608,Wu.a,Wu.a,[]),e["ɵmpd"](4608,Ju.a,Ju.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,en.a,en.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,Ju.a,e.ApplicationRef]),e["ɵmpd"](4608,Xu.c,Xu.c,[]),e["ɵmpd"](4608,Hu.a,Hu.a,[]),e["ɵmpd"](4608,sn.b,sn.b,[e.RendererFactory2,en.a]),e["ɵmpd"](4608,le.y,le.y,[Dl.DOCUMENT]),e["ɵmpd"](4608,le.r,le.r,[]),e["ɵmpd"](4608,le.a,le.a,[]),e["ɵmpd"](4608,un.f,un.f,[]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,i.a,i.a,[ne.m,F.a]),e["ɵmpd"](4608,_l.f,_l.f,[]),e["ɵmpd"](1073742336,Dl.CommonModule,Dl.CommonModule,[]),e["ɵmpd"](1073742336,ue.a,ue.a,[]),e["ɵmpd"](1073742336,o.C,o.C,[]),e["ɵmpd"](1073742336,o.n,o.n,[]),e["ɵmpd"](1073742336,o.y,o.y,[]),e["ɵmpd"](1073742336,Yu.c,Yu.c,[]),e["ɵmpd"](1073742336,Wu.d,Wu.d,[]),e["ɵmpd"](1073742336,Xu.d,Xu.d,[]),e["ɵmpd"](1073742336,Hu.d,Hu.d,[]),e["ɵmpd"](1073742336,ee.b,ee.b,[]),e["ɵmpd"](1073742336,sn.e,sn.e,[]),e["ɵmpd"](1073742336,te.a,te.a,[]),e["ɵmpd"](1073742336,un.e,un.e,[]),e["ɵmpd"](1073742336,An.f,An.f,[]),e["ɵmpd"](1073742336,ie.ClickOutsideModule,ie.ClickOutsideModule,[]),e["ɵmpd"](1073742336,ae.b,ae.b,[]),e["ɵmpd"](1073742336,ne.q,ne.q,[[2,ne.v],[2,ne.m]]),e["ɵmpd"](1073742336,oe.a,oe.a,[]),e["ɵmpd"](1073742336,le.u,le.u,[]),e["ɵmpd"](1073742336,se.a,se.a,[]),e["ɵmpd"](1073742336,f.a,f.a,[]),e["ɵmpd"](1073742336,de.a,de.a,[]),e["ɵmpd"](1073742336,re.a,re.a,[]),e["ɵmpd"](1073742336,_l.d,_l.d,[]),e["ɵmpd"](1073742336,ll,ll,[]),e["ɵmpd"](1073742336,dl,dl,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,un.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,ne.k,(function(){return[[{path:"",redirectTo:"daemon",pathMatch:"full"},{path:"daemon",component:O,data:nl},{path:"user",data:ul,children:[{path:"",component:H},{path:"create",component:W,data:el},{path:"edit/:uid",component:W,data:tl}]},{path:"bucket",data:il,children:[{path:"",component:P},{path:"create",component:E,data:al},{path:"edit/:bid",component:E,data:ol}]},{path:"501/:message",component:a,canActivate:[i.a],data:sl}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.88af57a0fd5b75779391.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.88af57a0fd5b75779391.js
new file mode 100644 (file)
index 0000000..ffad09e
--- /dev/null
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{DY6s:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),o=u("LceX"),a=u("ES0t"),d=u("MdoF"),t=u("Xg1U"),s=u("z5nN"),i=u("iutN"),r=u("pMnS"),c=u("EEJc"),m=u("PEr+"),p=u("a40w"),f=u("hfeG"),v=u("atuK"),g=u("SVse"),h=u("s7LF"),b=u("yT6U"),C=u("4DD9"),R=u("iExv"),w=u("GiVz"),I=u("85J/"),E=u("+0ag"),y=u("aXbf"),N=u("Fgil"),x=u("IzCI"),T=u("o4+5"),k=u("Dwqy"),D=u("uYzU"),S=u("FFMq"),q=u("E2fk"),P=u("a0VL"),F=u("nSDx"),_=u("SB+Q"),V=u("TYzs"),U=u("BQkM"),M=u("dEH0"),L=u("G1/K"),A=u("8xTl"),O=u("TJUb"),j=u("efK2"),B=u("CNMR"),z=u("KOzp"),G=u("2uy1"),Z=u("z/SZ"),K=u("38Bd"),H=u("978R"),X=u("LqlI"),J=u("w9WL"),Y=u("FE24"),Q=u("aexS"),W=u("Avrn"),$=u("iInd"),ll=u("2ZVE"),nl=u("ienR"),ul=u("aHM3"),el=u("9Xeq"),ol=u("hrfs"),al=u("yGOH"),dl=u("+gVj"),tl=u("bxSN"),sl=u("WF9J"),il=u("V/fk"),rl=u("ChqD"),cl=u("pL04"),ml=u("PCNd"),pl=u("pKUh");class fl{constructor(l){this.router=l}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var vl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function gl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,pl.b,pl.a)),e["ɵdid"](1,180224,null,0,ll.e,[ll.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Users"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/user-management/users")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Roles"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/user-management/roles")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){var u=n.component;l(n,3,0,"Users","/user-management/users"===u.url),l(n,5,0,"Roles","/user-management/roles"===u.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby)}))}var hl=u("25BL"),bl=u("uIqm"),Cl=u("NUGo"),Rl=u("S7zO"),wl=u("EgGo"),Il=u("ZEkX"),El=u("Mxhz"),yl=u("9nlD"),Nl=u("sne2"),xl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Tl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" ",""," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit,n.context.last?"":", ")}))}function kl(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Tl)),e["ɵdid"](1,278528,null,0,g.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.value)}),null)}function Dl(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{userRolesTpl:0}),(l()(),e["ɵeld"](1,0,null,null,1,"cd-user-tabs",[],null,null,null,gl,vl)),e["ɵdid"](2,114688,null,0,fl,[$.m],null,null),(l()(),e["ɵeld"](3,0,null,null,3,"cd-table",[["columnMode","flex"],["identifier","username"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,o=l.component;return"fetchData"===n&&(e=!1!==o.getUsers()&&e),"updateSelection"===n&&(e=!1!==o.updateSelection(u)&&e),e}),hl.b,hl.a)),e["ɵdid"](4,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],selectionType:[4,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),e["ɵeld"](5,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Cl.b,Cl.a)),e["ɵdid"](6,114688,null,0,Rl.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵand"](0,[[1,2],["userRolesTpl",2]],null,0,null,kl))],(function(l,n){var u=n.component;l(n,2,0),l(n,4,0,u.users,u.columns,"flex","username","single"),l(n,6,0,u.permission,u.selection,u.tableActions)}),null)}function Sl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-user-list",[],null,null,null,Dl,xl)),e["ɵprd"](256,null,wl.a,Il.b,[]),e["ɵdid"](2,114688,null,0,Il.a,[El.a,F.a,X.b,yl.a,Q.a,w.a,wl.a,P.a,Nl.b],null,null)],(function(l,n){l(n,2,0)}),null)}var ql=e["ɵccf"]("cd-user-list",Il.a,Sl,{},{},[]),Pl=u("QC43"),Fl=u("XFyV"),_l=u("4HWh"),Vl=u("p4Cf"),Ul=u("mXUL"),Ml=u("ANnk"),Ll=u("f/UV"),Al=u("D4zM"),Ol=u("pYKc"),jl=u("ppaS"),Bl=u("IZUe"),zl=u("gp3X"),Gl=u("sb0X"),Zl=u("KVJa"),Kl=u("Z21x"),Hl=u("V3my"),Xl=u("DSvg"),Jl=u("SgmB"),Yl=u("1nQr"),Ql=u("2EZI"),Wl=u("20UP"),$l=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Pl.b,Pl.a)),e["ɵdid"](1,49152,null,0,Fl.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading..."]))],null,null)}function nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The username already exists."]))],null,null)}function en(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-helper",[["class","text-pre"]],null,null,null,_l.b,_l.a)),e["ɵdid"](1,49152,null,0,Vl.a,[],{class:[0,"class"],html:[1,"html"]},null)],(function(l,n){l(n,1,0,"text-pre",e["ɵinlineInterpolate"](1,"",n.component.passwordPolicyHelpText,""))}),null)}function on(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function an(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.passwordValuation)}))}function dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,27,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,4,{FormControlNames:1}),e["ɵqud"](603979776,5,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵand"](16777216,null,null,1,null,en)),e["ɵdid"](8,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](9,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,11,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","password"],["name","password"],["placeholder","Password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,12).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,12)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](12,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](14,671744,[[4,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](16,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](17,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](18,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](19,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](20,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,21).onClick()&&o),o}),null,null)),e["ɵdid"](21,81920,null,0,Al.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](22,0,null,null,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(l()(),e["ɵeld"](23,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,on)),e["ɵdid"](25,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,an)),e["ɵdid"](27,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,8,0,u.passwordPolicyHelpText.length>0),l(n,14,0,"password"),l(n,18,0,"password"),l(n,21,0,"password"),l(n,25,0,u.userForm.showError("password",e["ɵnov"](n.parent,2),"required")),l(n,27,0,u.userForm.showError("password",e["ɵnov"](n.parent,2),"passwordPolicy"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,16).ngClassUntouched,e["ɵnov"](n,16).ngClassTouched,e["ɵnov"](n,16).ngClassPristine,e["ɵnov"](n,16).ngClassDirty,e["ɵnov"](n,16).ngClassValid,e["ɵnov"](n,16).ngClassInvalid,e["ɵnov"](n,16).ngClassPending,e["ɵnov"](n,18).validClass,e["ɵnov"](n,18).invalidClass),l(n,23,0,e["ɵinlineInterpolate"](1,"",u.passwordStrengthLevelClass,""),e["ɵinlineInterpolate"](1,"",u.passwordValuation,""))}))}function tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password confirmation doesn't match the password."]))],null,null)}function sn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,6,{FormControlNames:1}),e["ɵqud"](603979776,7,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","confirmpassword"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Confirm password"])),(l()(),e["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,13,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","confirmpassword"],["id","confirmpassword"],["name","confirmpassword"],["placeholder","Confirm password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,9).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,9)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](9,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](11,671744,[[6,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](13,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](14,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](15,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](16,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](17,0,null,null,1,"button",[["cdPasswordButton","confirmpassword"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,18).onClick()&&o),o}),null,null)),e["ɵdid"](18,81920,null,0,Al.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tn)),e["ɵdid"](20,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,sn)),e["ɵdid"](22,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"confirmpassword"),l(n,15,0,"confirmpassword"),l(n,18,0,"confirmpassword"),l(n,20,0,u.userForm.showError("confirmpassword",e["ɵnov"](n.parent,2),"match")),l(n,22,0,u.userForm.showError("confirmpassword",e["ɵnov"](n.parent,2),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,15).validClass,e["ɵnov"](n,15).invalidClass)}))}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"cd-helper",[["class","text-pre"]],null,null,null,_l.b,_l.a)),e["ɵdid"](1,49152,null,0,Vl.a,[],{class:[0,"class"]},null),(l()(),e["ɵeld"](2,0,null,0,4,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" The Dashboard setting defining the expiration interval of passwords is currently set to "])),(l()(),e["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["0"])),(l()(),e["ɵted"](-1,null,[". This means if a date is set, the user password will only expire once. "])),(l()(),e["ɵeld"](7,0,null,0,5,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" Consider configuring the Dashboard setting "])),(l()(),e["ɵeld"](9,0,null,null,2,"a",[["class","alert-link"],["routerLink","/mgr-modules/edit/dashboard"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,10).onClick(u.button,u.ctrlKey,u.metaKey,u.shiftKey)&&o),o}),null,null)),e["ɵdid"](10,671744,null,0,$.p,[$.m,$.a,g.LocationStrategy],{routerLink:[0,"routerLink"]},null),(l()(),e["ɵted"](-1,null,["USER_PWD_EXPIRATION_SPAN"])),(l()(),e["ɵted"](-1,null,[" in order to let passwords expire periodically. "]))],(function(l,n){l(n,1,0,"text-pre"),l(n,10,0,"/mgr-modules/edit/dashboard")}),(function(l,n){l(n,9,0,e["ɵnov"](n,10).target,e["ɵnov"](n,10).href)}))}function mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function pn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,8,{FormControlNames:1}),e["ɵqud"](603979776,9,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,7,"label",[["class","cd-col-form-label"],["for","pwdExpirationDate"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵeld"](8,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password expiration date"])),(l()(),e["ɵand"](16777216,null,null,1,null,cn)),e["ɵdid"](11,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](12,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,16,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,16777216,null,null,10,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","pwdExpirationDate"],["id","pwdExpirationDate"],["name","pwdExpirationDate"],["placeholder","Password expiration date..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,15)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,15).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,15)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,15)._compositionEnd(u.target.value)&&o),"change"===n&&(o=!1!==e["ɵnov"](l,17).onChange(u)&&o),"keyup.esc"===n&&(o=!1!==e["ɵnov"](l,17).hide()&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,17).onBlur()&&o),o}),null,null)),e["ɵdid"](15,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵdid"](16,737280,null,0,nl.c,[nl.a,e.ElementRef,e.Renderer2,e.ViewContainerRef,Z.a],{bsConfig:[0,"bsConfig"],minDate:[1,"minDate"]},null),e["ɵdid"](17,16384,null,0,nl.f,[nl.c,nl.l,e.Renderer2,e.ElementRef,e.ChangeDetectorRef],null,null),e["ɵprd"](1024,null,h.o,(function(l){return[l]}),[nl.f]),e["ɵprd"](1024,null,h.p,(function(l,n){return[l,n]}),[h.e,nl.f]),e["ɵdid"](20,671744,[[8,4]],0,h.j,[[3,h.d],[6,h.o],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](22,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](23,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](24,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](25,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](26,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.clearExpirationDate()&&e),e}),null,null)),(l()(),e["ɵeld"](27,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,mn)),e["ɵdid"](29,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var o=l(n,7,0,u.pwdExpirationSettings.pwdExpirationSpan>0);l(n,6,0,"cd-col-form-label",o),l(n,11,0,0==u.pwdExpirationSettings.pwdExpirationSpan),l(n,16,0,u.bsConfig,u.minDate),l(n,20,0,"pwdExpirationDate"),l(n,24,0,"pwdExpirationDate"),l(n,29,0,u.userForm.showError("pwdExpirationDate",e["ɵnov"](n.parent,2),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,14,0,e["ɵnov"](n,22).ngClassUntouched,e["ɵnov"](n,22).ngClassTouched,e["ɵnov"](n,22).ngClassPristine,e["ɵnov"](n,22).ngClassDirty,e["ɵnov"](n,22).ngClassValid,e["ɵnov"](n,22).ngClassInvalid,e["ɵnov"](n,22).ngClassPending,e["ɵnov"](n,24).validClass,e["ɵnov"](n,24).invalidClass),l(n,27,0,e["ɵinlineInterpolate"](1,"icon-prepend ",u.icons.destroy,""))}))}function fn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Invalid email."]))],null,null)}function vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border full-height"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"cd-select-badges",[],null,null,null,Ol.b,Ol.a)),e["ɵdid"](2,49152,null,0,jl.a,[w.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"]},null)],(function(l,n){var u=n.component;l(n,2,0,u.userForm.controls.roles.value,u.allRoles,u.messages)}),null)}function gn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,16,{FormControlNames:1}),e["ɵqud"](603979776,17,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","enabled"],["id","enabled"],["name","enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var o=!0;return"change"===n&&(o=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,7).onTouched()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.c]),e["ɵdid"](9,671744,[[16,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](11,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](12,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"]))],(function(l,n){l(n,1,0),l(n,9,0,"enabled"),l(n,13,0,"enabled")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function hn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,18,{FormControlNames:1}),e["ɵqud"](603979776,19,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","pwdUpdateRequired"],["id","pwdUpdateRequired"],["name","pwdUpdateRequired"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var o=!0;return"change"===n&&(o=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,7).onTouched()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.c]),e["ɵdid"](9,671744,[[18,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](11,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](12,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](13,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](14,0,null,null,1,"label",[["class","custom-control-label"],["for","pwdUpdateRequired"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User must change password at next logon"]))],(function(l,n){l(n,1,0),l(n,9,0,"pwdUpdateRequired"),l(n,13,0,"pwdUpdateRequired")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,13).validClass,e["ɵnov"](n,13).invalidClass)}))}function bn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,94,"form",[["name","userForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var o=!0;return"submit"===n&&(o=!1!==e["ɵnov"](l,2).onSubmit(u)&&o),"reset"===n&&(o=!1!==e["ɵnov"](l,2).onReset()&&o),"submit"===n&&(o=!1!==e["ɵnov"](l,5).onSubmit()&&o),o}),null,null)),e["ɵdid"](1,16384,null,0,h.G,[],null,null),e["ɵdid"](2,540672,[["formDir",4]],0,h.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,h.d,null,[h.l]),e["ɵdid"](4,16384,null,0,h.s,[[4,h.d]],null,null),e["ɵdid"](5,16384,null,0,dl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](6,0,null,null,88,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](8,null,[""," ",""])),e["ɵppd"](9,1),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,74,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](13,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,2,{FormControlNames:1}),e["ɵqud"](603979776,3,{messagesBlock:0}),(l()(),e["ɵeld"](16,0,null,0,4,"label",[["class","cd-col-form-label"],["for","username"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](19,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](21,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,8,"input",[["autocomplete","off"],["autofocus",""],["class","form-control"],["formControlName","username"],["id","username"],["name","username"],["placeholder","Username..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,23)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,23).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,23)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,23)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](23,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](25,671744,[[2,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](27,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](28,4210688,null,0,Bl.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](29,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](30,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,nn)),e["ɵdid"](32,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,un)),e["ɵdid"](34,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,dn)),e["ɵdid"](36,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,rn)),e["ɵdid"](38,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pn)),e["ɵdid"](40,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](41,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](42,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,10,{FormControlNames:1}),e["ɵqud"](603979776,11,{messagesBlock:0}),(l()(),e["ɵeld"](45,0,null,0,1,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](47,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](48,0,null,null,7,"input",[["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Full name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,49)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,49).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,49)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,49)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](49,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](51,671744,[[10,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](53,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](54,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](55,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](56,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](57,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,12,{FormControlNames:1}),e["ɵqud"](603979776,13,{messagesBlock:0}),(l()(),e["ɵeld"](60,0,null,0,1,"label",[["class","cd-col-form-label"],["for","email"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email"])),(l()(),e["ɵeld"](62,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](63,0,null,null,7,"input",[["class","form-control"],["formControlName","email"],["id","email"],["name","email"],["placeholder","Email..."],["type","email"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,64)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,64).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,64)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,64)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](64,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](66,671744,[[12,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](68,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](69,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](70,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fn)),e["ɵdid"](72,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](73,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](74,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,14,{FormControlNames:1}),e["ɵqud"](603979776,15,{messagesBlock:0}),(l()(),e["ɵeld"](77,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Roles"])),(l()(),e["ɵeld"](79,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,vn)),e["ɵdid"](81,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,gn)),e["ɵdid"](83,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,hn)),e["ɵdid"](85,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](86,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](87,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](88,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),zl.b,zl.a)),e["ɵdid"](89,114688,null,0,Gl.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](90,0,[""," ",""])),e["ɵppd"](91,1),e["ɵppd"](92,1),(l()(),e["ɵeld"](93,0,null,null,1,"cd-back-button",[],null,null,null,Zl.b,Zl.a)),e["ɵdid"](94,49152,null,0,Kl.a,[g.Location,Nl.b],null,null)],(function(l,n){var u=n.component;l(n,2,0,u.userForm),l(n,5,0,u.userForm),l(n,13,0);var o=l(n,19,0,u.mode!==u.userFormMode.editing);l(n,18,0,"cd-col-form-label",o),l(n,25,0,"username"),l(n,28,0,""),l(n,30,0,"username"),l(n,32,0,u.userForm.showError("username",e["ɵnov"](n,2),"required")),l(n,34,0,u.userForm.showError("username",e["ɵnov"](n,2),"notUnique")),l(n,36,0,!u.authStorageService.isSSO()),l(n,38,0,!u.authStorageService.isSSO()),l(n,40,0,!u.authStorageService.isSSO()),l(n,42,0),l(n,51,0,"name"),l(n,55,0,"name"),l(n,57,0),l(n,66,0,"email"),l(n,70,0,"email"),l(n,72,0,u.userForm.showError("email",e["ɵnov"](n,2),"email")),l(n,74,0),l(n,81,0,u.allRoles),l(n,83,0,!u.isCurrentUser()),l(n,85,0,!u.isCurrentUser()&&!u.authStorageService.isSSO()),l(n,89,0,e["ɵnov"](n,2))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,4).ngClassUntouched,e["ɵnov"](n,4).ngClassTouched,e["ɵnov"](n,4).ngClassPristine,e["ɵnov"](n,4).ngClassDirty,e["ɵnov"](n,4).ngClassValid,e["ɵnov"](n,4).ngClassInvalid,e["ɵnov"](n,4).ngClassPending);var o=e["ɵunv"](n,8,0,l(n,9,0,e["ɵnov"](n.parent,0),u.action)),a=e["ɵunv"](n,8,1,l(n,10,0,e["ɵnov"](n.parent,1),u.resource));l(n,8,0,o,a),l(n,12,0,e["ɵnov"](n,13).hasErrors,e["ɵnov"](n,13).hasSuccess),l(n,22,0,e["ɵnov"](n,27).ngClassUntouched,e["ɵnov"](n,27).ngClassTouched,e["ɵnov"](n,27).ngClassPristine,e["ɵnov"](n,27).ngClassDirty,e["ɵnov"](n,27).ngClassValid,e["ɵnov"](n,27).ngClassInvalid,e["ɵnov"](n,27).ngClassPending,e["ɵnov"](n,30).validClass,e["ɵnov"](n,30).invalidClass),l(n,41,0,e["ɵnov"](n,42).hasErrors,e["ɵnov"](n,42).hasSuccess),l(n,48,0,e["ɵnov"](n,53).ngClassUntouched,e["ɵnov"](n,53).ngClassTouched,e["ɵnov"](n,53).ngClassPristine,e["ɵnov"](n,53).ngClassDirty,e["ɵnov"](n,53).ngClassValid,e["ɵnov"](n,53).ngClassInvalid,e["ɵnov"](n,53).ngClassPending,e["ɵnov"](n,55).validClass,e["ɵnov"](n,55).invalidClass),l(n,56,0,e["ɵnov"](n,57).hasErrors,e["ɵnov"](n,57).hasSuccess),l(n,63,0,e["ɵnov"](n,68).ngClassUntouched,e["ɵnov"](n,68).ngClassTouched,e["ɵnov"](n,68).ngClassPristine,e["ɵnov"](n,68).ngClassDirty,e["ɵnov"](n,68).ngClassValid,e["ɵnov"](n,68).ngClassInvalid,e["ɵnov"](n,68).ngClassPending,e["ɵnov"](n,70).validClass,e["ɵnov"](n,70).invalidClass),l(n,73,0,e["ɵnov"](n,74).hasErrors,e["ɵnov"](n,74).hasSuccess);var d=e["ɵunv"](n,90,0,l(n,91,0,e["ɵnov"](n.parent,0),u.action)),t=e["ɵunv"](n,90,1,l(n,92,0,e["ɵnov"](n.parent,1),u.resource));l(n,90,0,d,t)}))}function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,['You are about to remove "user read / update" permissions from your own user.'])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["If you continue, you will no longer be able to add or remove roles from any user."])),(l()(),e["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Are you sure you want to continue?"]))],null,null)}function Rn(l){return e["ɵvid"](0,[e["ɵpid"](0,g.TitleCasePipe,[]),e["ɵpid"](0,A.a,[]),e["ɵqud"](402653184,1,{removeSelfUserReadUpdatePermissionTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,ln)),e["ɵdid"](4,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](5,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,bn)),e["ɵdid"](7,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,[[1,2],["removeSelfUserReadUpdatePermissionTpl",2]],null,0,null,Cn))],(function(l,n){var u=n.component;l(n,4,0,!u.pwdExpirationSettings),l(n,7,0,u.pwdExpirationSettings)}),null)}function wn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-user-form",[],null,null,null,Rn,$l)),e["ɵdid"](1,114688,null,0,Hl.a,[Xl.a,Q.a,$.a,$.m,X.b,Jl.a,El.a,yl.a,w.a,Nl.b,Yl.a,Ql.a,Wl.a],null,null)],(function(l,n){l(n,1,0)}),null)}var In=e["ɵccf"]("cd-user-form",Hl.a,wn,{},{},[]),En=u("LvDl"),yn=u("x38r");class Nn{constructor(l){this.i18n=l,this.scopes_permissions=[]}ngOnInit(){this.columns=[{prop:"scope",name:this.i18n("Scope"),flexGrow:2},{prop:"read",name:this.i18n("Read"),flexGrow:1,cellClass:"text-center",cellTransformation:yn.a.checkIcon},{prop:"create",name:this.i18n("Create"),flexGrow:1,cellClass:"text-center",cellTransformation:yn.a.checkIcon},{prop:"update",name:this.i18n("Update"),flexGrow:1,cellClass:"text-center",cellTransformation:yn.a.checkIcon},{prop:"delete",name:this.i18n("Delete"),flexGrow:1,cellClass:"text-center",cellTransformation:yn.a.checkIcon}]}ngOnChanges(){if(this.selection){this.selectedItem=this.selection;const l=[];En.each(this.scopes,n=>{const u={read:!1,create:!1,update:!1,delete:!1};u.scope=n,n in this.selectedItem.scopes_permissions&&En.each(this.selectedItem.scopes_permissions[n],l=>{u[l]=!0}),l.push(u)}),this.scopes_permissions=l}}}var xn=e["ɵcrt"]({encapsulation:0,styles:[["thead[_ngcontent-%COMP%]{background-color:#f5f5f5}.fa[_ngcontent-%COMP%]{font-size:large}.fa.fa-square-o[_ngcontent-%COMP%]{color:#d1d1d1}"]],data:{}});function Tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,pl.b,pl.a)),e["ɵdid"](1,180224,null,0,ll.e,[ll.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,hl.b,hl.a)),e["ɵdid"](5,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],autoReload:[6,"autoReload"],autoSave:[7,"autoSave"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.scopes_permissions,u.columns,"flex",!1,!1,0,!1,!1)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function kn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Tn)),e["ɵdid"](1,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,1,0,n.component.selection)}),null)}var Dn=u("n/D3"),Sn=u("ZDA6"),qn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Pn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-user-tabs",[],null,null,null,gl,vl)),e["ɵdid"](1,114688,null,0,fl,[$.m],null,null),(l()(),e["ɵeld"](2,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","name"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,o=l.component;return"setExpandedRow"===n&&(e=!1!==o.setExpandedRow(u)&&e),"fetchData"===n&&(e=!1!==o.getRoles()&&e),"updateSelection"===n&&(e=!1!==o.updateSelection(u)&&e),e}),hl.b,hl.a)),e["ɵdid"](3,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],selectionType:[5,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Cl.b,Cl.a)),e["ɵdid"](5,114688,null,0,Rl.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](6,0,null,3,1,"cd-role-details",[["cdTableDetail",""]],null,null,null,kn,xn)),e["ɵdid"](7,638976,null,0,Nn,[w.a],{selection:[0,"selection"],scopes:[1,"scopes"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,3,0,u.roles,u.columns,"flex",!0,"name","single"),l(n,5,0,u.permission,u.selection,u.tableActions),l(n,7,0,u.expandedRow,u.scopes)}),null)}function Fn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-role-list",[],null,null,null,Pn,qn)),e["ɵprd"](256,null,wl.a,Dn.b,[]),e["ɵdid"](2,114688,null,0,Dn.a,[Jl.a,Sn.a,F.a,Q.a,X.b,yl.a,w.a,wl.a,Nl.b],null,null)],(function(l,n){l(n,2,0)}),null)}var _n=e["ɵccf"]("cd-role-list",Dn.a,Fn,{},{},[]),Vn=u("eTJe"),Un=e["ɵcrt"]({encapsulation:0,styles:[[".datatable-permissions-header-cell-label[_ngcontent-%COMP%], .datatable-permissions-scope-cell-label[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function Mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen name is already in use."]))],null,null)}function An(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,2,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"checked",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickCellCheckbox(l.context.row.scope,l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](4,0,null,null,1,"label",[["class","datatable-permissions-scope-cell-label custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](5,null,["",""]))],null,(function(l,n){var u=n.component;l(n,1,0,e["ɵinlineInterpolate"](1,"scope_",n.context.row.scope,""),u.isRowChecked(n.context.row.scope),e["ɵnov"](n,3).validClass,e["ɵnov"](n,3).invalidClass),l(n,4,0,e["ɵinlineInterpolate"](1,"scope_",n.context.row.scope,"")),l(n,5,0,n.context.value)}))}function On(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,2,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"checked",0],[8,"id",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickCellCheckbox(l.context.row.scope,l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](4,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],null,(function(l,n){l(n,1,0,n.context.value,n.context.row.scope+"-"+n.context.column.prop,e["ɵnov"](n,3).validClass,e["ɵnov"](n,3).invalidClass),l(n,4,0,n.context.row.scope+"-"+n.context.column.prop)}))}function jn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,2,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"checked",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickHeaderCheckbox(l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](3,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](4,0,null,null,1,"label",[["class","datatable-permissions-header-cell-label custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](5,null,["",""]))],null,(function(l,n){var u=n.component;l(n,1,0,e["ɵinlineInterpolate"](1,"header_",n.context.column.prop,""),u.isHeaderChecked(n.context.column.prop),e["ɵnov"](n,3).validClass,e["ɵnov"](n,3).invalidClass),l(n,4,0,e["ɵinlineInterpolate"](1,"header_",n.context.column.prop,"")),l(n,5,0,n.context.column.name)}))}function Bn(l){return e["ɵvid"](0,[e["ɵpid"](0,g.TitleCasePipe,[]),e["ɵpid"](0,A.a,[]),e["ɵqud"](402653184,1,{headerPermissionCheckboxTpl:0}),e["ɵqud"](402653184,2,{cellScopeCheckboxTpl:0}),e["ɵqud"](402653184,3,{cellPermissionCheckboxTpl:0}),(l()(),e["ɵeld"](5,0,null,null,68,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,67,"form",[["name","roleForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var o=!0;return"submit"===n&&(o=!1!==e["ɵnov"](l,8).onSubmit(u)&&o),"reset"===n&&(o=!1!==e["ɵnov"](l,8).onReset()&&o),"submit"===n&&(o=!1!==e["ɵnov"](l,11).onSubmit()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.G,[],null,null),e["ɵdid"](8,540672,[["formDir",4]],0,h.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,h.d,null,[h.l]),e["ɵdid"](10,16384,null,0,h.s,[[4,h.d]],null,null),e["ɵdid"](11,16384,null,0,dl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](12,0,null,null,61,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](14,null,[""," ",""])),e["ɵppd"](15,1),e["ɵppd"](16,1),(l()(),e["ɵeld"](17,0,null,null,47,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](18,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](19,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,4,{FormControlNames:1}),e["ɵqud"](603979776,5,{messagesBlock:0}),(l()(),e["ɵeld"](22,0,null,0,4,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](24,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](25,{required:0}),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](27,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](28,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,29)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,29).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,29)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,29)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](29,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](31,671744,[[4,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](33,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](34,4210688,null,0,Bl.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](35,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](36,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Mn)),e["ɵdid"](38,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Ln)),e["ɵdid"](40,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](41,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](42,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,6,{FormControlNames:1}),e["ɵqud"](603979776,7,{messagesBlock:0}),(l()(),e["ɵeld"](45,0,null,0,1,"label",[["class","cd-col-form-label"],["for","description"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Description"])),(l()(),e["ɵeld"](47,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](48,0,null,null,7,"input",[["class","form-control"],["formControlName","description"],["id","description"],["name","description"],["placeholder","Description..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,49)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,49).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,49)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,49)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](49,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](51,671744,[[6,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](53,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](54,4210688,null,0,Ml.a,[[2,Ll.a],Q.a,e.ElementRef],null,null),e["ɵdid"](55,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](56,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](57,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,8,{FormControlNames:1}),e["ɵqud"](603979776,9,{messagesBlock:0}),(l()(),e["ɵeld"](60,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permissions"])),(l()(),e["ɵeld"](62,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](63,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,hl.b,hl.a)),e["ɵdid"](64,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],autoReload:[6,"autoReload"],autoSave:[7,"autoSave"]},null),(l()(),e["ɵeld"](65,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](66,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](67,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),zl.b,zl.a)),e["ɵdid"](68,114688,null,0,Gl.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](69,0,[""," ",""])),e["ɵppd"](70,1),e["ɵppd"](71,1),(l()(),e["ɵeld"](72,0,null,null,1,"cd-back-button",[],null,null,null,Zl.b,Zl.a)),e["ɵdid"](73,49152,null,0,Kl.a,[g.Location,Nl.b],null,null),(l()(),e["ɵand"](0,[[2,2],["cellScopeCheckboxTpl",2]],null,0,null,An)),(l()(),e["ɵand"](0,[[3,2],["cellPermissionCheckboxTpl",2]],null,0,null,On)),(l()(),e["ɵand"](0,[[1,2],["headerPermissionCheckboxTpl",2]],null,0,null,jn))],(function(l,n){var u=n.component;l(n,8,0,u.roleForm),l(n,11,0,u.roleForm),l(n,19,0);var o=l(n,25,0,u.mode!==u.roleFormMode.editing);l(n,24,0,"cd-col-form-label",o),l(n,31,0,"name"),l(n,34,0,""),l(n,36,0,"name"),l(n,38,0,u.roleForm.showError("name",e["ɵnov"](n,8),"required")),l(n,40,0,u.roleForm.showError("name",e["ɵnov"](n,8),"notUnique")),l(n,42,0),l(n,51,0,"description"),l(n,55,0,"description"),l(n,57,0),l(n,64,0,u.scopes_permissions,u.columns,"flex",!1,!1,0,!1,!1),l(n,68,0,e["ɵnov"](n,8))}),(function(l,n){var u=n.component;l(n,6,0,e["ɵnov"](n,10).ngClassUntouched,e["ɵnov"](n,10).ngClassTouched,e["ɵnov"](n,10).ngClassPristine,e["ɵnov"](n,10).ngClassDirty,e["ɵnov"](n,10).ngClassValid,e["ɵnov"](n,10).ngClassInvalid,e["ɵnov"](n,10).ngClassPending);var o=e["ɵunv"](n,14,0,l(n,15,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,14,1,l(n,16,0,e["ɵnov"](n,1),u.resource));l(n,14,0,o,a),l(n,18,0,e["ɵnov"](n,19).hasErrors,e["ɵnov"](n,19).hasSuccess),l(n,28,0,e["ɵnov"](n,33).ngClassUntouched,e["ɵnov"](n,33).ngClassTouched,e["ɵnov"](n,33).ngClassPristine,e["ɵnov"](n,33).ngClassDirty,e["ɵnov"](n,33).ngClassValid,e["ɵnov"](n,33).ngClassInvalid,e["ɵnov"](n,33).ngClassPending,e["ɵnov"](n,36).validClass,e["ɵnov"](n,36).invalidClass),l(n,41,0,e["ɵnov"](n,42).hasErrors,e["ɵnov"](n,42).hasSuccess),l(n,48,0,e["ɵnov"](n,53).ngClassUntouched,e["ɵnov"](n,53).ngClassTouched,e["ɵnov"](n,53).ngClassPristine,e["ɵnov"](n,53).ngClassDirty,e["ɵnov"](n,53).ngClassValid,e["ɵnov"](n,53).ngClassInvalid,e["ɵnov"](n,53).ngClassPending,e["ɵnov"](n,55).validClass,e["ɵnov"](n,55).invalidClass),l(n,56,0,e["ɵnov"](n,57).hasErrors,e["ɵnov"](n,57).hasSuccess);var d=e["ɵunv"](n,69,0,l(n,70,0,e["ɵnov"](n,0),u.action)),t=e["ɵunv"](n,69,1,l(n,71,0,e["ɵnov"](n,1),u.resource));l(n,69,0,d,t)}))}function zn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-role-form",[],null,null,null,Bn,Un)),e["ɵdid"](1,114688,null,0,Vn.a,[$.a,$.m,Jl.a,Sn.a,yl.a,w.a,Nl.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Gn=e["ɵccf"]("cd-role-form",Vn.a,zn,{},{},[]);u.d(n,"AuthModuleNgFactory",(function(){return Zn})),u.d(n,"RoutedAuthModuleNgFactory",(function(){return Kn}));var Zn=e["ɵcmf"](o.a,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[a.a,d.a,t.a,s.a,s.b,i.a,r.a,c.a,m.a,p.a,f.a,v.a,v.c,v.b,v.d]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,g.NgLocalization,g.NgLocaleLocalization,[e.LOCALE_ID,[2,g["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,h.D,h.D,[]),e["ɵmpd"](4608,h.h,h.h,[]),e["ɵmpd"](4608,b.a,b.a,[]),e["ɵmpd"](4608,C.a,C.a,[]),e["ɵmpd"](4608,R.a,R.a,[w.a]),e["ɵmpd"](4608,g.DatePipe,g.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,I.a,I.a,[]),e["ɵmpd"](4608,E.a,E.a,[]),e["ɵmpd"](4608,y.a,y.a,[]),e["ɵmpd"](4608,N.a,N.a,[y.a]),e["ɵmpd"](4608,x.a,x.a,[y.a]),e["ɵmpd"](4608,T.a,T.a,[y.a]),e["ɵmpd"](4608,k.a,k.a,[]),e["ɵmpd"](4608,D.a,D.a,[]),e["ɵmpd"](4608,S.a,S.a,[]),e["ɵmpd"](4608,q.a,q.a,[]),e["ɵmpd"](4608,P.a,P.a,[g.DatePipe]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,_.a,_.a,[]),e["ɵmpd"](4608,V.a,V.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,L.a,L.a,[w.a]),e["ɵmpd"](4608,A.a,A.a,[]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,B.b,B.b,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,Z.a,Z.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,G.a,e.ApplicationRef]),e["ɵmpd"](4608,K.c,K.c,[]),e["ɵmpd"](4608,H.a,H.a,[]),e["ɵmpd"](4608,X.b,X.b,[e.RendererFactory2,Z.a]),e["ɵmpd"](4608,J.y,J.y,[g.DOCUMENT]),e["ɵmpd"](4608,J.r,J.r,[]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,Y.f,Y.f,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,W.a,W.a,[$.m,Q.a]),e["ɵmpd"](4608,ll.f,ll.f,[]),e["ɵmpd"](4608,nl.t,nl.t,[]),e["ɵmpd"](4608,nl.v,nl.v,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,nl.h,nl.h,[]),e["ɵmpd"](4608,nl.d,nl.d,[]),e["ɵmpd"](4608,nl.j,nl.j,[]),e["ɵmpd"](4608,nl.l,nl.l,[]),e["ɵmpd"](4608,nl.u,nl.u,[nl.v,nl.l]),e["ɵmpd"](1073742336,ul.a,ul.a,[]),e["ɵmpd"](1073742336,g.CommonModule,g.CommonModule,[]),e["ɵmpd"](1073742336,h.C,h.C,[]),e["ɵmpd"](1073742336,h.n,h.n,[]),e["ɵmpd"](1073742336,z.d,z.d,[]),e["ɵmpd"](1073742336,h.y,h.y,[]),e["ɵmpd"](1073742336,el.a,el.a,[]),e["ɵmpd"](1073742336,B.c,B.c,[]),e["ɵmpd"](1073742336,K.d,K.d,[]),e["ɵmpd"](1073742336,H.d,H.d,[]),e["ɵmpd"](1073742336,ol.b,ol.b,[]),e["ɵmpd"](1073742336,X.e,X.e,[]),e["ɵmpd"](1073742336,al.a,al.a,[]),e["ɵmpd"](1073742336,Y.e,Y.e,[]),e["ɵmpd"](1073742336,dl.f,dl.f,[]),e["ɵmpd"](1073742336,tl.ClickOutsideModule,tl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,sl.b,sl.b,[]),e["ɵmpd"](1073742336,$.q,$.q,[[2,$.v],[2,$.m]]),e["ɵmpd"](1073742336,il.a,il.a,[]),e["ɵmpd"](1073742336,J.u,J.u,[]),e["ɵmpd"](1073742336,rl.a,rl.a,[]),e["ɵmpd"](1073742336,cl.a,cl.a,[]),e["ɵmpd"](1073742336,ml.a,ml.a,[]),e["ɵmpd"](1073742336,ll.d,ll.d,[]),e["ɵmpd"](1073742336,nl.g,nl.g,[]),e["ɵmpd"](1073742336,o.a,o.a,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,Y.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),Kn=e["ɵcmf"](o.b,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[a.a,d.a,t.a,s.a,s.b,i.a,r.a,c.a,m.a,p.a,f.a,v.a,v.c,v.b,v.d,ql,In,_n,Gn]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,g.NgLocalization,g.NgLocaleLocalization,[e.LOCALE_ID,[2,g["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,h.D,h.D,[]),e["ɵmpd"](4608,h.h,h.h,[]),e["ɵmpd"](4608,b.a,b.a,[]),e["ɵmpd"](4608,C.a,C.a,[]),e["ɵmpd"](4608,R.a,R.a,[w.a]),e["ɵmpd"](4608,g.DatePipe,g.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,I.a,I.a,[]),e["ɵmpd"](4608,E.a,E.a,[]),e["ɵmpd"](4608,y.a,y.a,[]),e["ɵmpd"](4608,N.a,N.a,[y.a]),e["ɵmpd"](4608,x.a,x.a,[y.a]),e["ɵmpd"](4608,T.a,T.a,[y.a]),e["ɵmpd"](4608,k.a,k.a,[]),e["ɵmpd"](4608,D.a,D.a,[]),e["ɵmpd"](4608,S.a,S.a,[]),e["ɵmpd"](4608,q.a,q.a,[]),e["ɵmpd"](4608,P.a,P.a,[g.DatePipe]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,_.a,_.a,[]),e["ɵmpd"](4608,V.a,V.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,L.a,L.a,[w.a]),e["ɵmpd"](4608,A.a,A.a,[]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,B.b,B.b,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,Z.a,Z.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,G.a,e.ApplicationRef]),e["ɵmpd"](4608,K.c,K.c,[]),e["ɵmpd"](4608,H.a,H.a,[]),e["ɵmpd"](4608,X.b,X.b,[e.RendererFactory2,Z.a]),e["ɵmpd"](4608,J.y,J.y,[g.DOCUMENT]),e["ɵmpd"](4608,J.r,J.r,[]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,Y.f,Y.f,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,W.a,W.a,[$.m,Q.a]),e["ɵmpd"](4608,ll.f,ll.f,[]),e["ɵmpd"](4608,nl.t,nl.t,[]),e["ɵmpd"](4608,nl.v,nl.v,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,nl.h,nl.h,[]),e["ɵmpd"](4608,nl.d,nl.d,[]),e["ɵmpd"](4608,nl.j,nl.j,[]),e["ɵmpd"](4608,nl.l,nl.l,[]),e["ɵmpd"](4608,nl.u,nl.u,[nl.v,nl.l]),e["ɵmpd"](1073742336,ul.a,ul.a,[]),e["ɵmpd"](1073742336,g.CommonModule,g.CommonModule,[]),e["ɵmpd"](1073742336,h.C,h.C,[]),e["ɵmpd"](1073742336,h.n,h.n,[]),e["ɵmpd"](1073742336,z.d,z.d,[]),e["ɵmpd"](1073742336,h.y,h.y,[]),e["ɵmpd"](1073742336,el.a,el.a,[]),e["ɵmpd"](1073742336,B.c,B.c,[]),e["ɵmpd"](1073742336,K.d,K.d,[]),e["ɵmpd"](1073742336,H.d,H.d,[]),e["ɵmpd"](1073742336,ol.b,ol.b,[]),e["ɵmpd"](1073742336,X.e,X.e,[]),e["ɵmpd"](1073742336,al.a,al.a,[]),e["ɵmpd"](1073742336,Y.e,Y.e,[]),e["ɵmpd"](1073742336,dl.f,dl.f,[]),e["ɵmpd"](1073742336,tl.ClickOutsideModule,tl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,sl.b,sl.b,[]),e["ɵmpd"](1073742336,$.q,$.q,[[2,$.v],[2,$.m]]),e["ɵmpd"](1073742336,il.a,il.a,[]),e["ɵmpd"](1073742336,J.u,J.u,[]),e["ɵmpd"](1073742336,rl.a,rl.a,[]),e["ɵmpd"](1073742336,cl.a,cl.a,[]),e["ɵmpd"](1073742336,ml.a,ml.a,[]),e["ɵmpd"](1073742336,ll.d,ll.d,[]),e["ɵmpd"](1073742336,nl.g,nl.g,[]),e["ɵmpd"](1073742336,o.a,o.a,[]),e["ɵmpd"](1073742336,o.b,o.b,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,Y.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,$.k,(function(){return[[{path:"",redirectTo:"users",pathMatch:"full"},{path:"users",data:o.c,children:[{path:"",component:Il.a},{path:"create",component:Hl.a,data:o.d},{path:"edit/:username",component:Hl.a,data:o.e}]},{path:"roles",data:o.f,children:[{path:"",component:Dn.a},{path:"create",component:Vn.a,data:o.g},{path:"edit/:name",component:Vn.a,data:o.h}]}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.94051a156c6d11b38ada.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/8.94051a156c6d11b38ada.js
deleted file mode 100644 (file)
index 70ecc70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{DY6s:function(l,n,u){"use strict";u.r(n);var e=u("8Y7J"),o=u("LceX"),a=u("ES0t"),d=u("MdoF"),t=u("Xg1U"),s=u("z5nN"),i=u("iutN"),r=u("pMnS"),c=u("EEJc"),p=u("PEr+"),m=u("a40w"),v=u("hfeG"),f=u("atuK"),g=u("SVse"),h=u("s7LF"),b=u("yT6U"),C=u("4DD9"),R=u("iExv"),w=u("GiVz"),I=u("85J/"),E=u("+0ag"),y=u("aXbf"),N=u("Fgil"),x=u("IzCI"),T=u("o4+5"),k=u("Dwqy"),D=u("uYzU"),S=u("FFMq"),q=u("E2fk"),P=u("a0VL"),F=u("nSDx"),_=u("SB+Q"),V=u("TYzs"),U=u("BQkM"),M=u("dEH0"),L=u("G1/K"),A=u("8xTl"),O=u("TJUb"),j=u("efK2"),B=u("CNMR"),z=u("KOzp"),G=u("2uy1"),Z=u("z/SZ"),K=u("38Bd"),H=u("978R"),X=u("LqlI"),J=u("w9WL"),Y=u("FE24"),Q=u("aexS"),W=u("Avrn"),$=u("iInd"),ll=u("2ZVE"),nl=u("ienR"),ul=u("aHM3"),el=u("9Xeq"),ol=u("hrfs"),al=u("yGOH"),dl=u("+gVj"),tl=u("bxSN"),sl=u("WF9J"),il=u("V/fk"),rl=u("ChqD"),cl=u("pL04"),pl=u("PCNd"),ml=u("pKUh");class vl{constructor(l){this.router=l}ngOnInit(){this.url=this.router.url}navigateTo(l){this.router.navigate([l])}}var fl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function gl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,ml.b,ml.a)),e["ɵdid"](1,180224,null,0,ll.e,[ll.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,1,"tab",[["heading","Users"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/user-management/users")&&e),e}),null,null)),e["ɵdid"](3,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"}),(l()(),e["ɵeld"](4,0,null,0,1,"tab",[["heading","Roles"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(l,n,u){var e=!0;return"selectTab"===n&&(e=!1!==l.component.navigateTo("/user-management/roles")&&e),e}),null,null)),e["ɵdid"](5,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"],active:[1,"active"]},{selectTab:"selectTab"})],(function(l,n){var u=n.component;l(n,3,0,"Users","/user-management/users"===u.url),l(n,5,0,"Roles","/user-management/roles"===u.url)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby),l(n,4,0,e["ɵnov"](n,5).id,e["ɵnov"](n,5).active,e["ɵnov"](n,5).addClass,e["ɵnov"](n,5).role,e["ɵnov"](n,5).ariaLabelledby)}))}var hl=u("25BL"),bl=u("uIqm"),Cl=u("NUGo"),Rl=u("S7zO"),wl=u("EgGo"),Il=u("ZEkX"),El=u("Mxhz"),yl=u("9nlD"),Nl=u("sne2"),xl=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Tl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" ",""," "]))],null,(function(l,n){l(n,1,0,n.context.$implicit,n.context.last?"":", ")}))}function kl(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Tl)),e["ɵdid"](1,278528,null,0,g.NgForOf,[e.ViewContainerRef,e.TemplateRef,e.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(l()(),e["ɵand"](0,null,null,0))],(function(l,n){l(n,1,0,n.context.value)}),null)}function Dl(l){return e["ɵvid"](0,[e["ɵqud"](402653184,1,{userRolesTpl:0}),(l()(),e["ɵeld"](1,0,null,null,1,"cd-user-tabs",[],null,null,null,gl,fl)),e["ɵdid"](2,114688,null,0,vl,[$.m],null,null),(l()(),e["ɵeld"](3,0,null,null,3,"cd-table",[["columnMode","flex"],["identifier","username"],["selectionType","single"]],null,[[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,o=l.component;return"fetchData"===n&&(e=!1!==o.getUsers()&&e),"updateSelection"===n&&(e=!1!==o.updateSelection(u)&&e),e}),hl.b,hl.a)),e["ɵdid"](4,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],selectionType:[4,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection"}),(l()(),e["ɵeld"](5,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Cl.b,Cl.a)),e["ɵdid"](6,114688,null,0,Rl.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵand"](0,[[1,2],["userRolesTpl",2]],null,0,null,kl))],(function(l,n){var u=n.component;l(n,2,0),l(n,4,0,u.users,u.columns,"flex","username","single"),l(n,6,0,u.permission,u.selection,u.tableActions)}),null)}function Sl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-user-list",[],null,null,null,Dl,xl)),e["ɵprd"](256,null,wl.a,Il.b,[]),e["ɵdid"](2,114688,null,0,Il.a,[El.a,F.a,X.b,yl.a,Q.a,w.a,wl.a,P.a,Nl.b],null,null)],(function(l,n){l(n,2,0)}),null)}var ql=e["ɵccf"]("cd-user-list",Il.a,Sl,{},{},[]),Pl=u("QC43"),Fl=u("XFyV"),_l=u("4HWh"),Vl=u("p4Cf"),Ul=u("mXUL"),Ml=u("D4zM"),Ll=u("pYKc"),Al=u("ppaS"),Ol=u("IZUe"),jl=u("gp3X"),Bl=u("sb0X"),zl=u("KVJa"),Gl=u("Z21x"),Zl=u("V3my"),Kl=u("DSvg"),Hl=u("SgmB"),Xl=u("1nQr"),Jl=u("2EZI"),Yl=u("20UP"),Ql=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Wl(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Pl.b,Pl.a)),e["ɵdid"](1,49152,null,0,Fl.a,[],null,null),(l()(),e["ɵted"](-1,0,["Loading..."]))],null,null)}function $l(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The username already exists."]))],null,null)}function nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-helper",[["class","text-pre"]],null,null,null,_l.b,_l.a)),e["ɵdid"](1,49152,null,0,Vl.a,[],{class:[0,"class"],html:[1,"html"]},null)],(function(l,n){l(n,1,0,"text-pre",e["ɵinlineInterpolate"](1,"",n.component.passwordPolicyHelpText,""))}),null)}function un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function en(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](1,null,[" "," "]))],null,(function(l,n){l(n,1,0,n.component.passwordValuation)}))}function on(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,4,{FormControlNames:1}),e["ɵqud"](603979776,5,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","password"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password"])),(l()(),e["ɵand"](16777216,null,null,1,null,nn)),e["ɵdid"](8,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](9,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](10,0,null,null,10,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](11,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","password"],["id","password"],["name","password"],["placeholder","Password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,12)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,12).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,12)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,12)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](12,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](14,671744,[[4,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](16,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](17,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](18,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](19,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,20).onClick()&&o),o}),null,null)),e["ɵdid"](20,81920,null,0,Ml.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵeld"](21,0,null,null,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,un)),e["ɵdid"](24,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,en)),e["ɵdid"](26,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,8,0,u.passwordPolicyHelpText.length>0),l(n,14,0,"password"),l(n,17,0,"password"),l(n,20,0,"password"),l(n,24,0,u.userForm.showError("password",e["ɵnov"](n.parent,2),"required")),l(n,26,0,u.userForm.showError("password",e["ɵnov"](n.parent,2),"passwordPolicy"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,11,0,e["ɵnov"](n,16).ngClassUntouched,e["ɵnov"](n,16).ngClassTouched,e["ɵnov"](n,16).ngClassPristine,e["ɵnov"](n,16).ngClassDirty,e["ɵnov"](n,16).ngClassValid,e["ɵnov"](n,16).ngClassInvalid,e["ɵnov"](n,16).ngClassPending,e["ɵnov"](n,17).validClass,e["ɵnov"](n,17).invalidClass),l(n,22,0,e["ɵinlineInterpolate"](1,"",u.passwordStrengthLevelClass,""),e["ɵinlineInterpolate"](1,"",u.passwordValuation,""))}))}function an(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password confirmation doesn't match the password."]))],null,null)}function dn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function tn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,6,{FormControlNames:1}),e["ɵqud"](603979776,7,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"],["for","confirmpassword"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Confirm password"])),(l()(),e["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](8,0,null,null,6,"input",[["class","form-control"],["formControlName","confirmpassword"],["id","confirmpassword"],["name","confirmpassword"],["placeholder","Confirm password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,9)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,9).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,9)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,9)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](9,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](11,671744,[[6,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](13,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](14,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](15,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](16,0,null,null,1,"button",[["cdPasswordButton","confirmpassword"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,17).onClick()&&o),o}),null,null)),e["ɵdid"](17,81920,null,0,Ml.a,[e.ElementRef,e.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,an)),e["ɵdid"](19,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,dn)),e["ɵdid"](21,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,11,0,"confirmpassword"),l(n,14,0,"confirmpassword"),l(n,17,0,"confirmpassword"),l(n,19,0,u.userForm.showError("confirmpassword",e["ɵnov"](n.parent,2),"match")),l(n,21,0,u.userForm.showError("confirmpassword",e["ɵnov"](n.parent,2),"required"))}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,8,0,e["ɵnov"](n,13).ngClassUntouched,e["ɵnov"](n,13).ngClassTouched,e["ɵnov"](n,13).ngClassPristine,e["ɵnov"](n,13).ngClassDirty,e["ɵnov"](n,13).ngClassValid,e["ɵnov"](n,13).ngClassInvalid,e["ɵnov"](n,13).ngClassPending,e["ɵnov"](n,14).validClass,e["ɵnov"](n,14).invalidClass)}))}function sn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,12,"cd-helper",[["class","text-pre"]],null,null,null,_l.b,_l.a)),e["ɵdid"](1,49152,null,0,Vl.a,[],{class:[0,"class"]},null),(l()(),e["ɵeld"](2,0,null,0,4,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" The Dashboard setting defining the expiration interval of passwords is currently set to "])),(l()(),e["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["0"])),(l()(),e["ɵted"](-1,null,[". This means if a date is set, the user password will only expire once. "])),(l()(),e["ɵeld"](7,0,null,0,5,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,[" Consider configuring the Dashboard setting "])),(l()(),e["ɵeld"](9,0,null,null,2,"a",[["class","alert-link"],["routerLink","/mgr-modules/edit/dashboard"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(l,n,u){var o=!0;return"click"===n&&(o=!1!==e["ɵnov"](l,10).onClick(u.button,u.ctrlKey,u.metaKey,u.shiftKey)&&o),o}),null,null)),e["ɵdid"](10,671744,null,0,$.p,[$.m,$.a,g.LocationStrategy],{routerLink:[0,"routerLink"]},null),(l()(),e["ɵted"](-1,null,["USER_PWD_EXPIRATION_SPAN"])),(l()(),e["ɵted"](-1,null,[" in order to let passwords expire periodically. "]))],(function(l,n){l(n,1,0,"text-pre"),l(n,10,0,"/mgr-modules/edit/dashboard")}),(function(l,n){l(n,9,0,e["ɵnov"](n,10).target,e["ɵnov"](n,10).href)}))}function rn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,8,{FormControlNames:1}),e["ɵqud"](603979776,9,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,7,"label",[["class","cd-col-form-label"],["for","pwdExpirationDate"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](6,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](7,{required:0}),(l()(),e["ɵeld"](8,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Password expiration date"])),(l()(),e["ɵand"](16777216,null,null,1,null,sn)),e["ɵdid"](11,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](12,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,15,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e["ɵeld"](14,16777216,null,null,9,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","pwdExpirationDate"],["id","pwdExpirationDate"],["name","pwdExpirationDate"],["placeholder","Password expiration date..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,15)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,15).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,15)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,15)._compositionEnd(u.target.value)&&o),"change"===n&&(o=!1!==e["ɵnov"](l,17).onChange(u)&&o),"keyup.esc"===n&&(o=!1!==e["ɵnov"](l,17).hide()&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,17).onBlur()&&o),o}),null,null)),e["ɵdid"](15,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵdid"](16,737280,null,0,nl.c,[nl.a,e.ElementRef,e.Renderer2,e.ViewContainerRef,Z.a],{bsConfig:[0,"bsConfig"],minDate:[1,"minDate"]},null),e["ɵdid"](17,16384,null,0,nl.f,[nl.c,nl.l,e.Renderer2,e.ElementRef,e.ChangeDetectorRef],null,null),e["ɵprd"](1024,null,h.o,(function(l){return[l]}),[nl.f]),e["ɵprd"](1024,null,h.p,(function(l,n){return[l,n]}),[h.e,nl.f]),e["ɵdid"](20,671744,[[8,4]],0,h.j,[[3,h.d],[6,h.o],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](22,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](23,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](24,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(l()(),e["ɵeld"](25,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.clearExpirationDate()&&e),e}),null,null)),(l()(),e["ɵeld"](26,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,rn)),e["ɵdid"](28,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){var u=n.component;l(n,1,0);var o=l(n,7,0,u.pwdExpirationSettings.pwdExpirationSpan>0);l(n,6,0,"cd-col-form-label",o),l(n,11,0,0==u.pwdExpirationSettings.pwdExpirationSpan),l(n,16,0,u.bsConfig,u.minDate),l(n,20,0,"pwdExpirationDate"),l(n,23,0,"pwdExpirationDate"),l(n,28,0,u.userForm.showError("pwdExpirationDate",e["ɵnov"](n.parent,2),"required"))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,14,0,e["ɵnov"](n,22).ngClassUntouched,e["ɵnov"](n,22).ngClassTouched,e["ɵnov"](n,22).ngClassPristine,e["ɵnov"](n,22).ngClassDirty,e["ɵnov"](n,22).ngClassValid,e["ɵnov"](n,22).ngClassInvalid,e["ɵnov"](n,22).ngClassPending,e["ɵnov"](n,23).validClass,e["ɵnov"](n,23).invalidClass),l(n,26,0,e["ɵinlineInterpolate"](1,"icon-prepend ",u.icons.destroy,""))}))}function pn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Invalid email."]))],null,null)}function mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"span",[["class","no-border full-height"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"cd-select-badges",[],null,null,null,Ll.b,Ll.a)),e["ɵdid"](2,49152,null,0,Al.a,[w.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"]},null)],(function(l,n){var u=n.component;l(n,2,0,u.userForm.controls.roles.value,u.allRoles,u.messages)}),null)}function vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,16,{FormControlNames:1}),e["ɵqud"](603979776,17,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","enabled"],["id","enabled"],["name","enabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var o=!0;return"change"===n&&(o=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,7).onTouched()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.c]),e["ɵdid"](9,671744,[[16,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](11,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](12,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","enabled"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Enabled"]))],(function(l,n){l(n,1,0),l(n,9,0,"enabled"),l(n,12,0,"enabled")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function fn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](1,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,18,{FormControlNames:1}),e["ɵqud"](603979776,19,{messagesBlock:0}),(l()(),e["ɵeld"](4,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(l()(),e["ɵeld"](5,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","pwdUpdateRequired"],["id","pwdUpdateRequired"],["name","pwdUpdateRequired"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(l,n,u){var o=!0;return"change"===n&&(o=!1!==e["ɵnov"](l,7).onChange(u.target.checked)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,7).onTouched()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.c,[e.Renderer2,e.ElementRef],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.c]),e["ɵdid"](9,671744,[[18,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](11,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](12,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](13,0,null,null,1,"label",[["class","custom-control-label"],["for","pwdUpdateRequired"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["User must change password at next logon"]))],(function(l,n){l(n,1,0),l(n,9,0,"pwdUpdateRequired"),l(n,12,0,"pwdUpdateRequired")}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).hasErrors,e["ɵnov"](n,1).hasSuccess),l(n,6,0,e["ɵnov"](n,11).ngClassUntouched,e["ɵnov"](n,11).ngClassTouched,e["ɵnov"](n,11).ngClassPristine,e["ɵnov"](n,11).ngClassDirty,e["ɵnov"](n,11).ngClassValid,e["ɵnov"](n,11).ngClassInvalid,e["ɵnov"](n,11).ngClassPending,e["ɵnov"](n,12).validClass,e["ɵnov"](n,12).invalidClass)}))}function gn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,91,"form",[["name","userForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var o=!0;return"submit"===n&&(o=!1!==e["ɵnov"](l,2).onSubmit(u)&&o),"reset"===n&&(o=!1!==e["ɵnov"](l,2).onReset()&&o),"submit"===n&&(o=!1!==e["ɵnov"](l,5).onSubmit()&&o),o}),null,null)),e["ɵdid"](1,16384,null,0,h.G,[],null,null),e["ɵdid"](2,540672,[["formDir",4]],0,h.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,h.d,null,[h.l]),e["ɵdid"](4,16384,null,0,h.s,[[4,h.d]],null,null),e["ɵdid"](5,16384,null,0,dl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](6,0,null,null,85,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](8,null,[""," ",""])),e["ɵppd"](9,1),e["ɵppd"](10,1),(l()(),e["ɵeld"](11,0,null,null,71,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](12,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](13,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,2,{FormControlNames:1}),e["ɵqud"](603979776,3,{messagesBlock:0}),(l()(),e["ɵeld"](16,0,null,0,4,"label",[["class","cd-col-form-label"],["for","username"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](18,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](19,{required:0}),(l()(),e["ɵted"](-1,null,["Username"])),(l()(),e["ɵeld"](21,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](22,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","username"],["id","username"],["name","username"],["placeholder","Username..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,23)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,23).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,23)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,23)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](23,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](25,671744,[[2,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](27,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](28,4210688,null,0,Ol.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](29,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,$l)),e["ɵdid"](31,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,ln)),e["ɵdid"](33,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,on)),e["ɵdid"](35,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,tn)),e["ɵdid"](37,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,cn)),e["ɵdid"](39,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](40,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](41,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,10,{FormControlNames:1}),e["ɵqud"](603979776,11,{messagesBlock:0}),(l()(),e["ɵeld"](44,0,null,0,1,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Full name"])),(l()(),e["ɵeld"](46,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](47,0,null,null,6,"input",[["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Full name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,48)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,48).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,48)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,48)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](48,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](50,671744,[[10,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](52,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](53,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](54,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](55,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,12,{FormControlNames:1}),e["ɵqud"](603979776,13,{messagesBlock:0}),(l()(),e["ɵeld"](58,0,null,0,1,"label",[["class","cd-col-form-label"],["for","email"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Email"])),(l()(),e["ɵeld"](60,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,6,"input",[["class","form-control"],["formControlName","email"],["id","email"],["name","email"],["placeholder","Email..."],["type","email"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,62)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,62).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,62)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,62)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](62,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](64,671744,[[12,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](66,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](67,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,pn)),e["ɵdid"](69,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](70,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](71,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,14,{FormControlNames:1}),e["ɵqud"](603979776,15,{messagesBlock:0}),(l()(),e["ɵeld"](74,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Roles"])),(l()(),e["ɵeld"](76,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,mn)),e["ɵdid"](78,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,vn)),e["ɵdid"](80,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,fn)),e["ɵdid"](82,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](83,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](84,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](85,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),jl.b,jl.a)),e["ɵdid"](86,114688,null,0,Bl.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](87,0,[""," ",""])),e["ɵppd"](88,1),e["ɵppd"](89,1),(l()(),e["ɵeld"](90,0,null,null,1,"cd-back-button",[],null,null,null,zl.b,zl.a)),e["ɵdid"](91,49152,null,0,Gl.a,[g.Location,Nl.b],null,null)],(function(l,n){var u=n.component;l(n,2,0,u.userForm),l(n,5,0,u.userForm),l(n,13,0);var o=l(n,19,0,u.mode!==u.userFormMode.editing);l(n,18,0,"cd-col-form-label",o),l(n,25,0,"username"),l(n,28,0,""),l(n,29,0,"username"),l(n,31,0,u.userForm.showError("username",e["ɵnov"](n,2),"required")),l(n,33,0,u.userForm.showError("username",e["ɵnov"](n,2),"notUnique")),l(n,35,0,!u.authStorageService.isSSO()),l(n,37,0,!u.authStorageService.isSSO()),l(n,39,0,!u.authStorageService.isSSO()),l(n,41,0),l(n,50,0,"name"),l(n,53,0,"name"),l(n,55,0),l(n,64,0,"email"),l(n,67,0,"email"),l(n,69,0,u.userForm.showError("email",e["ɵnov"](n,2),"email")),l(n,71,0),l(n,78,0,u.allRoles),l(n,80,0,!u.isCurrentUser()),l(n,82,0,!u.isCurrentUser()&&!u.authStorageService.isSSO()),l(n,86,0,e["ɵnov"](n,2))}),(function(l,n){var u=n.component;l(n,0,0,e["ɵnov"](n,4).ngClassUntouched,e["ɵnov"](n,4).ngClassTouched,e["ɵnov"](n,4).ngClassPristine,e["ɵnov"](n,4).ngClassDirty,e["ɵnov"](n,4).ngClassValid,e["ɵnov"](n,4).ngClassInvalid,e["ɵnov"](n,4).ngClassPending);var o=e["ɵunv"](n,8,0,l(n,9,0,e["ɵnov"](n.parent,0),u.action)),a=e["ɵunv"](n,8,1,l(n,10,0,e["ɵnov"](n.parent,1),u.resource));l(n,8,0,o,a),l(n,12,0,e["ɵnov"](n,13).hasErrors,e["ɵnov"](n,13).hasSuccess),l(n,22,0,e["ɵnov"](n,27).ngClassUntouched,e["ɵnov"](n,27).ngClassTouched,e["ɵnov"](n,27).ngClassPristine,e["ɵnov"](n,27).ngClassDirty,e["ɵnov"](n,27).ngClassValid,e["ɵnov"](n,27).ngClassInvalid,e["ɵnov"](n,27).ngClassPending,e["ɵnov"](n,29).validClass,e["ɵnov"](n,29).invalidClass),l(n,40,0,e["ɵnov"](n,41).hasErrors,e["ɵnov"](n,41).hasSuccess),l(n,47,0,e["ɵnov"](n,52).ngClassUntouched,e["ɵnov"](n,52).ngClassTouched,e["ɵnov"](n,52).ngClassPristine,e["ɵnov"](n,52).ngClassDirty,e["ɵnov"](n,52).ngClassValid,e["ɵnov"](n,52).ngClassInvalid,e["ɵnov"](n,52).ngClassPending,e["ɵnov"](n,53).validClass,e["ɵnov"](n,53).invalidClass),l(n,54,0,e["ɵnov"](n,55).hasErrors,e["ɵnov"](n,55).hasSuccess),l(n,61,0,e["ɵnov"](n,66).ngClassUntouched,e["ɵnov"](n,66).ngClassTouched,e["ɵnov"](n,66).ngClassPristine,e["ɵnov"](n,66).ngClassDirty,e["ɵnov"](n,66).ngClassValid,e["ɵnov"](n,66).ngClassInvalid,e["ɵnov"](n,66).ngClassPending,e["ɵnov"](n,67).validClass,e["ɵnov"](n,67).invalidClass),l(n,70,0,e["ɵnov"](n,71).hasErrors,e["ɵnov"](n,71).hasSuccess);var d=e["ɵunv"](n,87,0,l(n,88,0,e["ɵnov"](n.parent,0),u.action)),t=e["ɵunv"](n,87,1,l(n,89,0,e["ɵnov"](n.parent,1),u.resource));l(n,87,0,d,t)}))}function hn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,['You are about to remove "user read / update" permissions from your own user.'])),(l()(),e["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e["ɵeld"](4,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["If you continue, you will no longer be able to add or remove roles from any user."])),(l()(),e["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Are you sure you want to continue?"]))],null,null)}function bn(l){return e["ɵvid"](0,[e["ɵpid"](0,g.TitleCasePipe,[]),e["ɵpid"](0,A.a,[]),e["ɵqud"](402653184,1,{removeSelfUserReadUpdatePermissionTpl:0}),(l()(),e["ɵand"](16777216,null,null,1,null,Wl)),e["ɵdid"](4,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](5,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵand"](16777216,null,null,1,null,gn)),e["ɵdid"](7,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](0,[[1,2],["removeSelfUserReadUpdatePermissionTpl",2]],null,0,null,hn))],(function(l,n){var u=n.component;l(n,4,0,!u.pwdExpirationSettings),l(n,7,0,u.pwdExpirationSettings)}),null)}function Cn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-user-form",[],null,null,null,bn,Ql)),e["ɵdid"](1,114688,null,0,Zl.a,[Kl.a,Q.a,$.a,$.m,X.b,Hl.a,El.a,yl.a,w.a,Nl.b,Xl.a,Jl.a,Yl.a],null,null)],(function(l,n){l(n,1,0)}),null)}var Rn=e["ɵccf"]("cd-user-form",Zl.a,Cn,{},{},[]),wn=u("LvDl"),In=u("x38r");class En{constructor(l){this.i18n=l,this.scopes_permissions=[]}ngOnInit(){this.columns=[{prop:"scope",name:this.i18n("Scope"),flexGrow:2},{prop:"read",name:this.i18n("Read"),flexGrow:1,cellClass:"text-center",cellTransformation:In.a.checkIcon},{prop:"create",name:this.i18n("Create"),flexGrow:1,cellClass:"text-center",cellTransformation:In.a.checkIcon},{prop:"update",name:this.i18n("Update"),flexGrow:1,cellClass:"text-center",cellTransformation:In.a.checkIcon},{prop:"delete",name:this.i18n("Delete"),flexGrow:1,cellClass:"text-center",cellTransformation:In.a.checkIcon}]}ngOnChanges(){if(this.selection){this.selectedItem=this.selection;const l=[];wn.each(this.scopes,n=>{const u={read:!1,create:!1,update:!1,delete:!1};u.scope=n,n in this.selectedItem.scopes_permissions&&wn.each(this.selectedItem.scopes_permissions[n],l=>{u[l]=!0}),l.push(u)}),this.scopes_permissions=l}}}var yn=e["ɵcrt"]({encapsulation:0,styles:[["thead[_ngcontent-%COMP%]{background-color:#f5f5f5}.fa[_ngcontent-%COMP%]{font-size:large}.fa.fa-square-o[_ngcontent-%COMP%]{color:#d1d1d1}"]],data:{}});function Nn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,ml.b,ml.a)),e["ɵdid"](1,180224,null,0,ll.e,[ll.f,e.Renderer2,e.ElementRef],null,null),(l()(),e["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),e["ɵdid"](3,212992,null,0,ll.b,[ll.e,e.ElementRef,e.Renderer2],{heading:[0,"heading"]},null),(l()(),e["ɵeld"](4,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,hl.b,hl.a)),e["ɵdid"](5,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],autoReload:[6,"autoReload"],autoSave:[7,"autoSave"]},null)],(function(l,n){var u=n.component;l(n,3,0,"Details"),l(n,5,0,u.scopes_permissions,u.columns,"flex",!1,!1,0,!1,!1)}),(function(l,n){l(n,0,0,e["ɵnov"](n,1).clazz),l(n,2,0,e["ɵnov"](n,3).id,e["ɵnov"](n,3).active,e["ɵnov"](n,3).addClass,e["ɵnov"](n,3).role,e["ɵnov"](n,3).ariaLabelledby)}))}function xn(l){return e["ɵvid"](0,[(l()(),e["ɵand"](16777216,null,null,1,null,Nn)),e["ɵdid"](1,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(l,n){l(n,1,0,n.component.selection)}),null)}var Tn=u("n/D3"),kn=u("ZDA6"),Dn=e["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Sn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-user-tabs",[],null,null,null,gl,fl)),e["ɵdid"](1,114688,null,0,vl,[$.m],null,null),(l()(),e["ɵeld"](2,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","name"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"fetchData"],[null,"updateSelection"]],(function(l,n,u){var e=!0,o=l.component;return"setExpandedRow"===n&&(e=!1!==o.setExpandedRow(u)&&e),"fetchData"===n&&(e=!1!==o.getRoles()&&e),"updateSelection"===n&&(e=!1!==o.updateSelection(u)&&e),e}),hl.b,hl.a)),e["ɵdid"](3,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],selectionType:[5,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(l()(),e["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Cl.b,Cl.a)),e["ɵdid"](5,114688,null,0,Rl.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(l()(),e["ɵeld"](6,0,null,3,1,"cd-role-details",[["cdTableDetail",""]],null,null,null,xn,yn)),e["ɵdid"](7,638976,null,0,En,[w.a],{selection:[0,"selection"],scopes:[1,"scopes"]},null)],(function(l,n){var u=n.component;l(n,1,0),l(n,3,0,u.roles,u.columns,"flex",!0,"name","single"),l(n,5,0,u.permission,u.selection,u.tableActions),l(n,7,0,u.expandedRow,u.scopes)}),null)}function qn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,2,"cd-role-list",[],null,null,null,Sn,Dn)),e["ɵprd"](256,null,wl.a,Tn.b,[]),e["ɵdid"](2,114688,null,0,Tn.a,[Hl.a,kn.a,F.a,Q.a,X.b,yl.a,w.a,wl.a,Nl.b],null,null)],(function(l,n){l(n,2,0)}),null)}var Pn=e["ɵccf"]("cd-role-list",Tn.a,qn,{},{},[]),Fn=u("eTJe"),_n=e["ɵcrt"]({encapsulation:0,styles:[[".datatable-permissions-header-cell-label[_ngcontent-%COMP%], .datatable-permissions-scope-cell-label[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function Vn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["This field is required."]))],null,null)}function Un(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["The chosen name is already in use."]))],null,null)}function Mn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"checked",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickCellCheckbox(l.context.row.scope,l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](3,0,null,null,1,"label",[["class","datatable-permissions-scope-cell-label custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](4,null,["",""]))],null,(function(l,n){var u=n.component;l(n,1,0,e["ɵinlineInterpolate"](1,"scope_",n.context.row.scope,""),u.isRowChecked(n.context.row.scope),e["ɵnov"](n,2).validClass,e["ɵnov"](n,2).invalidClass),l(n,3,0,e["ɵinlineInterpolate"](1,"scope_",n.context.row.scope,"")),l(n,4,0,n.context.value)}))}function Ln(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,3,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"checked",0],[8,"id",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickCellCheckbox(l.context.row.scope,l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](3,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],null,(function(l,n){l(n,1,0,n.context.value,n.context.row.scope+"-"+n.context.column.prop,e["ɵnov"](n,2).validClass,e["ɵnov"](n,2).invalidClass),l(n,3,0,n.context.row.scope+"-"+n.context.column.prop)}))}function An(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,4,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(l()(),e["ɵeld"](1,0,null,null,1,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"checked",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(l,n,u){var e=!0;return"change"===n&&(e=!1!==l.component.onClickHeaderCheckbox(l.context.column.prop,u)&&e),e}),null,null)),e["ɵdid"](2,16384,null,0,dl.h,[[8,null],dl.a],null,null),(l()(),e["ɵeld"](3,0,null,null,1,"label",[["class","datatable-permissions-header-cell-label custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(l()(),e["ɵted"](4,null,["",""]))],null,(function(l,n){var u=n.component;l(n,1,0,e["ɵinlineInterpolate"](1,"header_",n.context.column.prop,""),u.isHeaderChecked(n.context.column.prop),e["ɵnov"](n,2).validClass,e["ɵnov"](n,2).invalidClass),l(n,3,0,e["ɵinlineInterpolate"](1,"header_",n.context.column.prop,"")),l(n,4,0,n.context.column.name)}))}function On(l){return e["ɵvid"](0,[e["ɵpid"](0,g.TitleCasePipe,[]),e["ɵpid"](0,A.a,[]),e["ɵqud"](402653184,1,{headerPermissionCheckboxTpl:0}),e["ɵqud"](402653184,2,{cellScopeCheckboxTpl:0}),e["ɵqud"](402653184,3,{cellPermissionCheckboxTpl:0}),(l()(),e["ɵeld"](5,0,null,null,66,"div",[["class","cd-col-form"]],null,null,null,null,null)),(l()(),e["ɵeld"](6,0,null,null,65,"form",[["name","roleForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(l,n,u){var o=!0;return"submit"===n&&(o=!1!==e["ɵnov"](l,8).onSubmit(u)&&o),"reset"===n&&(o=!1!==e["ɵnov"](l,8).onReset()&&o),"submit"===n&&(o=!1!==e["ɵnov"](l,11).onSubmit()&&o),o}),null,null)),e["ɵdid"](7,16384,null,0,h.G,[],null,null),e["ɵdid"](8,540672,[["formDir",4]],0,h.l,[[8,null],[8,null]],{form:[0,"form"]},null),e["ɵprd"](2048,null,h.d,null,[h.l]),e["ɵdid"](10,16384,null,0,h.s,[[4,h.d]],null,null),e["ɵdid"](11,16384,null,0,dl.d,[],{formGroup:[0,"formGroup"]},null),(l()(),e["ɵeld"](12,0,null,null,59,"div",[["class","card"]],null,null,null,null,null)),(l()(),e["ɵeld"](13,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),e["ɵted"](14,null,[""," ",""])),e["ɵppd"](15,1),e["ɵppd"](16,1),(l()(),e["ɵeld"](17,0,null,null,45,"div",[["class","card-body"]],null,null,null,null,null)),(l()(),e["ɵeld"](18,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](19,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,4,{FormControlNames:1}),e["ɵqud"](603979776,5,{messagesBlock:0}),(l()(),e["ɵeld"](22,0,null,0,4,"label",[["class","cd-col-form-label"],["for","name"]],null,null,null,null,null)),e["ɵprd"](512,null,g["ɵNgClassImpl"],g["ɵNgClassR2Impl"],[e.IterableDiffers,e.KeyValueDiffers,e.ElementRef,e.Renderer2]),e["ɵdid"](24,278528,null,0,g.NgClass,[g["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e["ɵpod"](25,{required:0}),(l()(),e["ɵted"](-1,null,["Name"])),(l()(),e["ɵeld"](27,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](28,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","name"],["id","name"],["name","name"],["placeholder","Name..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,29)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,29).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,29)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,29)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](29,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](31,671744,[[4,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](33,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](34,4210688,null,0,Ol.a,[e.ElementRef],{autofocus:[0,"autofocus"]},null),e["ɵdid"](35,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Vn)),e["ɵdid"](37,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵand"](16777216,null,null,1,null,Un)),e["ɵdid"](39,16384,null,0,g.NgIf,[e.ViewContainerRef,e.TemplateRef],{ngIf:[0,"ngIf"]},null),(l()(),e["ɵeld"](40,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](41,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,6,{FormControlNames:1}),e["ɵqud"](603979776,7,{messagesBlock:0}),(l()(),e["ɵeld"](44,0,null,0,1,"label",[["class","cd-col-form-label"],["for","description"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Description"])),(l()(),e["ɵeld"](46,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](47,0,null,null,6,"input",[["class","form-control"],["formControlName","description"],["id","description"],["name","description"],["placeholder","Description..."],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(l,n,u){var o=!0;return"input"===n&&(o=!1!==e["ɵnov"](l,48)._handleInput(u.target.value)&&o),"blur"===n&&(o=!1!==e["ɵnov"](l,48).onTouched()&&o),"compositionstart"===n&&(o=!1!==e["ɵnov"](l,48)._compositionStart()&&o),"compositionend"===n&&(o=!1!==e["ɵnov"](l,48)._compositionEnd(u.target.value)&&o),o}),null,null)),e["ɵdid"](48,16384,null,0,h.e,[e.Renderer2,e.ElementRef,[2,h.b]],null,null),e["ɵprd"](1024,null,h.p,(function(l){return[l]}),[h.e]),e["ɵdid"](50,671744,[[6,4]],0,h.j,[[3,h.d],[8,null],[8,null],[6,h.p],[2,h.E]],{name:[0,"name"]},null),e["ɵprd"](2048,null,h.q,null,[h.j]),e["ɵdid"](52,16384,null,0,h.r,[[4,h.q]],null,null),e["ɵdid"](53,16384,null,0,dl.h,[[3,h.d],dl.a],{formControlName:[0,"formControlName"]},null),(l()(),e["ɵeld"](54,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,Ul.b,Ul.a)),e["ɵdid"](55,1163264,null,2,dl.c,[e.ElementRef,dl.g],null,null),e["ɵqud"](603979776,8,{FormControlNames:1}),e["ɵqud"](603979776,9,{messagesBlock:0}),(l()(),e["ɵeld"](58,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(l()(),e["ɵted"](-1,null,["Permissions"])),(l()(),e["ɵeld"](60,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(l()(),e["ɵeld"](61,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,hl.b,hl.a)),e["ɵdid"](62,2867200,null,0,bl.a,[e.NgZone,e.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],autoReload:[6,"autoReload"],autoSave:[7,"autoSave"]},null),(l()(),e["ɵeld"](63,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(l()(),e["ɵeld"](64,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(l()(),e["ɵeld"](65,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(l,n,u){var e=!0;return"submitAction"===n&&(e=!1!==l.component.submit()&&e),e}),jl.b,jl.a)),e["ɵdid"](66,114688,null,0,Bl.a,[e.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(l()(),e["ɵted"](67,0,[""," ",""])),e["ɵppd"](68,1),e["ɵppd"](69,1),(l()(),e["ɵeld"](70,0,null,null,1,"cd-back-button",[],null,null,null,zl.b,zl.a)),e["ɵdid"](71,49152,null,0,Gl.a,[g.Location,Nl.b],null,null),(l()(),e["ɵand"](0,[[2,2],["cellScopeCheckboxTpl",2]],null,0,null,Mn)),(l()(),e["ɵand"](0,[[3,2],["cellPermissionCheckboxTpl",2]],null,0,null,Ln)),(l()(),e["ɵand"](0,[[1,2],["headerPermissionCheckboxTpl",2]],null,0,null,An))],(function(l,n){var u=n.component;l(n,8,0,u.roleForm),l(n,11,0,u.roleForm),l(n,19,0);var o=l(n,25,0,u.mode!==u.roleFormMode.editing);l(n,24,0,"cd-col-form-label",o),l(n,31,0,"name"),l(n,34,0,""),l(n,35,0,"name"),l(n,37,0,u.roleForm.showError("name",e["ɵnov"](n,8),"required")),l(n,39,0,u.roleForm.showError("name",e["ɵnov"](n,8),"notUnique")),l(n,41,0),l(n,50,0,"description"),l(n,53,0,"description"),l(n,55,0),l(n,62,0,u.scopes_permissions,u.columns,"flex",!1,!1,0,!1,!1),l(n,66,0,e["ɵnov"](n,8))}),(function(l,n){var u=n.component;l(n,6,0,e["ɵnov"](n,10).ngClassUntouched,e["ɵnov"](n,10).ngClassTouched,e["ɵnov"](n,10).ngClassPristine,e["ɵnov"](n,10).ngClassDirty,e["ɵnov"](n,10).ngClassValid,e["ɵnov"](n,10).ngClassInvalid,e["ɵnov"](n,10).ngClassPending);var o=e["ɵunv"](n,14,0,l(n,15,0,e["ɵnov"](n,0),u.action)),a=e["ɵunv"](n,14,1,l(n,16,0,e["ɵnov"](n,1),u.resource));l(n,14,0,o,a),l(n,18,0,e["ɵnov"](n,19).hasErrors,e["ɵnov"](n,19).hasSuccess),l(n,28,0,e["ɵnov"](n,33).ngClassUntouched,e["ɵnov"](n,33).ngClassTouched,e["ɵnov"](n,33).ngClassPristine,e["ɵnov"](n,33).ngClassDirty,e["ɵnov"](n,33).ngClassValid,e["ɵnov"](n,33).ngClassInvalid,e["ɵnov"](n,33).ngClassPending,e["ɵnov"](n,35).validClass,e["ɵnov"](n,35).invalidClass),l(n,40,0,e["ɵnov"](n,41).hasErrors,e["ɵnov"](n,41).hasSuccess),l(n,47,0,e["ɵnov"](n,52).ngClassUntouched,e["ɵnov"](n,52).ngClassTouched,e["ɵnov"](n,52).ngClassPristine,e["ɵnov"](n,52).ngClassDirty,e["ɵnov"](n,52).ngClassValid,e["ɵnov"](n,52).ngClassInvalid,e["ɵnov"](n,52).ngClassPending,e["ɵnov"](n,53).validClass,e["ɵnov"](n,53).invalidClass),l(n,54,0,e["ɵnov"](n,55).hasErrors,e["ɵnov"](n,55).hasSuccess);var d=e["ɵunv"](n,67,0,l(n,68,0,e["ɵnov"](n,0),u.action)),t=e["ɵunv"](n,67,1,l(n,69,0,e["ɵnov"](n,1),u.resource));l(n,67,0,d,t)}))}function jn(l){return e["ɵvid"](0,[(l()(),e["ɵeld"](0,0,null,null,1,"cd-role-form",[],null,null,null,On,_n)),e["ɵdid"](1,114688,null,0,Fn.a,[$.a,$.m,Hl.a,kn.a,yl.a,w.a,Nl.b],null,null)],(function(l,n){l(n,1,0)}),null)}var Bn=e["ɵccf"]("cd-role-form",Fn.a,jn,{},{},[]);u.d(n,"AuthModuleNgFactory",(function(){return zn})),u.d(n,"RoutedAuthModuleNgFactory",(function(){return Gn}));var zn=e["ɵcmf"](o.a,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[a.a,d.a,t.a,s.a,s.b,i.a,r.a,c.a,p.a,m.a,v.a,f.a,f.c,f.b,f.d]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,g.NgLocalization,g.NgLocaleLocalization,[e.LOCALE_ID,[2,g["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,h.D,h.D,[]),e["ɵmpd"](4608,h.h,h.h,[]),e["ɵmpd"](4608,b.a,b.a,[]),e["ɵmpd"](4608,C.a,C.a,[]),e["ɵmpd"](4608,R.a,R.a,[w.a]),e["ɵmpd"](4608,g.DatePipe,g.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,I.a,I.a,[]),e["ɵmpd"](4608,E.a,E.a,[]),e["ɵmpd"](4608,y.a,y.a,[]),e["ɵmpd"](4608,N.a,N.a,[y.a]),e["ɵmpd"](4608,x.a,x.a,[y.a]),e["ɵmpd"](4608,T.a,T.a,[y.a]),e["ɵmpd"](4608,k.a,k.a,[]),e["ɵmpd"](4608,D.a,D.a,[]),e["ɵmpd"](4608,S.a,S.a,[]),e["ɵmpd"](4608,q.a,q.a,[]),e["ɵmpd"](4608,P.a,P.a,[g.DatePipe]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,_.a,_.a,[]),e["ɵmpd"](4608,V.a,V.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,L.a,L.a,[w.a]),e["ɵmpd"](4608,A.a,A.a,[]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,B.b,B.b,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,Z.a,Z.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,G.a,e.ApplicationRef]),e["ɵmpd"](4608,K.c,K.c,[]),e["ɵmpd"](4608,H.a,H.a,[]),e["ɵmpd"](4608,X.b,X.b,[e.RendererFactory2,Z.a]),e["ɵmpd"](4608,J.y,J.y,[g.DOCUMENT]),e["ɵmpd"](4608,J.r,J.r,[]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,Y.f,Y.f,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,W.a,W.a,[$.m,Q.a]),e["ɵmpd"](4608,ll.f,ll.f,[]),e["ɵmpd"](4608,nl.t,nl.t,[]),e["ɵmpd"](4608,nl.v,nl.v,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,nl.h,nl.h,[]),e["ɵmpd"](4608,nl.d,nl.d,[]),e["ɵmpd"](4608,nl.j,nl.j,[]),e["ɵmpd"](4608,nl.l,nl.l,[]),e["ɵmpd"](4608,nl.u,nl.u,[nl.v,nl.l]),e["ɵmpd"](1073742336,ul.a,ul.a,[]),e["ɵmpd"](1073742336,g.CommonModule,g.CommonModule,[]),e["ɵmpd"](1073742336,h.C,h.C,[]),e["ɵmpd"](1073742336,h.n,h.n,[]),e["ɵmpd"](1073742336,z.d,z.d,[]),e["ɵmpd"](1073742336,h.y,h.y,[]),e["ɵmpd"](1073742336,el.a,el.a,[]),e["ɵmpd"](1073742336,B.c,B.c,[]),e["ɵmpd"](1073742336,K.d,K.d,[]),e["ɵmpd"](1073742336,H.d,H.d,[]),e["ɵmpd"](1073742336,ol.b,ol.b,[]),e["ɵmpd"](1073742336,X.e,X.e,[]),e["ɵmpd"](1073742336,al.a,al.a,[]),e["ɵmpd"](1073742336,Y.e,Y.e,[]),e["ɵmpd"](1073742336,dl.f,dl.f,[]),e["ɵmpd"](1073742336,tl.ClickOutsideModule,tl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,sl.b,sl.b,[]),e["ɵmpd"](1073742336,$.q,$.q,[[2,$.v],[2,$.m]]),e["ɵmpd"](1073742336,il.a,il.a,[]),e["ɵmpd"](1073742336,J.u,J.u,[]),e["ɵmpd"](1073742336,rl.a,rl.a,[]),e["ɵmpd"](1073742336,cl.a,cl.a,[]),e["ɵmpd"](1073742336,pl.a,pl.a,[]),e["ɵmpd"](1073742336,ll.d,ll.d,[]),e["ɵmpd"](1073742336,nl.g,nl.g,[]),e["ɵmpd"](1073742336,o.a,o.a,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,Y.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])})),Gn=e["ɵcmf"](o.b,[],(function(l){return e["ɵmod"]([e["ɵmpd"](512,e.ComponentFactoryResolver,e["ɵCodegenComponentFactoryResolver"],[[8,[a.a,d.a,t.a,s.a,s.b,i.a,r.a,c.a,p.a,m.a,v.a,f.a,f.c,f.b,f.d,ql,Rn,Pn,Bn]],[3,e.ComponentFactoryResolver],e.NgModuleRef]),e["ɵmpd"](4608,g.NgLocalization,g.NgLocaleLocalization,[e.LOCALE_ID,[2,g["ɵangular_packages_common_common_a"]]]),e["ɵmpd"](4608,h.D,h.D,[]),e["ɵmpd"](4608,h.h,h.h,[]),e["ɵmpd"](4608,b.a,b.a,[]),e["ɵmpd"](4608,C.a,C.a,[]),e["ɵmpd"](4608,R.a,R.a,[w.a]),e["ɵmpd"](4608,g.DatePipe,g.DatePipe,[e.LOCALE_ID]),e["ɵmpd"](4608,I.a,I.a,[]),e["ɵmpd"](4608,E.a,E.a,[]),e["ɵmpd"](4608,y.a,y.a,[]),e["ɵmpd"](4608,N.a,N.a,[y.a]),e["ɵmpd"](4608,x.a,x.a,[y.a]),e["ɵmpd"](4608,T.a,T.a,[y.a]),e["ɵmpd"](4608,k.a,k.a,[]),e["ɵmpd"](4608,D.a,D.a,[]),e["ɵmpd"](4608,S.a,S.a,[]),e["ɵmpd"](4608,q.a,q.a,[]),e["ɵmpd"](4608,P.a,P.a,[g.DatePipe]),e["ɵmpd"](4608,F.a,F.a,[]),e["ɵmpd"](4608,_.a,_.a,[]),e["ɵmpd"](4608,V.a,V.a,[]),e["ɵmpd"](4608,U.a,U.a,[]),e["ɵmpd"](4608,M.a,M.a,[]),e["ɵmpd"](4608,L.a,L.a,[w.a]),e["ɵmpd"](4608,A.a,A.a,[]),e["ɵmpd"](4608,O.a,O.a,[]),e["ɵmpd"](4608,j.a,j.a,[]),e["ɵmpd"](4608,B.b,B.b,[]),e["ɵmpd"](4608,z.a,z.a,[]),e["ɵmpd"](4608,G.a,G.a,[e.NgZone,e.RendererFactory2,e.PLATFORM_ID]),e["ɵmpd"](4608,Z.a,Z.a,[e.ComponentFactoryResolver,e.NgZone,e.Injector,G.a,e.ApplicationRef]),e["ɵmpd"](4608,K.c,K.c,[]),e["ɵmpd"](4608,H.a,H.a,[]),e["ɵmpd"](4608,X.b,X.b,[e.RendererFactory2,Z.a]),e["ɵmpd"](4608,J.y,J.y,[g.DOCUMENT]),e["ɵmpd"](4608,J.r,J.r,[]),e["ɵmpd"](4608,J.a,J.a,[]),e["ɵmpd"](4608,Y.f,Y.f,[]),e["ɵmpd"](4608,Q.a,Q.a,[]),e["ɵmpd"](4608,W.a,W.a,[$.m,Q.a]),e["ɵmpd"](4608,ll.f,ll.f,[]),e["ɵmpd"](4608,nl.t,nl.t,[]),e["ɵmpd"](4608,nl.v,nl.v,[]),e["ɵmpd"](4608,nl.a,nl.a,[]),e["ɵmpd"](4608,nl.h,nl.h,[]),e["ɵmpd"](4608,nl.d,nl.d,[]),e["ɵmpd"](4608,nl.j,nl.j,[]),e["ɵmpd"](4608,nl.l,nl.l,[]),e["ɵmpd"](4608,nl.u,nl.u,[nl.v,nl.l]),e["ɵmpd"](1073742336,ul.a,ul.a,[]),e["ɵmpd"](1073742336,g.CommonModule,g.CommonModule,[]),e["ɵmpd"](1073742336,h.C,h.C,[]),e["ɵmpd"](1073742336,h.n,h.n,[]),e["ɵmpd"](1073742336,z.d,z.d,[]),e["ɵmpd"](1073742336,h.y,h.y,[]),e["ɵmpd"](1073742336,el.a,el.a,[]),e["ɵmpd"](1073742336,B.c,B.c,[]),e["ɵmpd"](1073742336,K.d,K.d,[]),e["ɵmpd"](1073742336,H.d,H.d,[]),e["ɵmpd"](1073742336,ol.b,ol.b,[]),e["ɵmpd"](1073742336,X.e,X.e,[]),e["ɵmpd"](1073742336,al.a,al.a,[]),e["ɵmpd"](1073742336,Y.e,Y.e,[]),e["ɵmpd"](1073742336,dl.f,dl.f,[]),e["ɵmpd"](1073742336,tl.ClickOutsideModule,tl.ClickOutsideModule,[]),e["ɵmpd"](1073742336,sl.b,sl.b,[]),e["ɵmpd"](1073742336,$.q,$.q,[[2,$.v],[2,$.m]]),e["ɵmpd"](1073742336,il.a,il.a,[]),e["ɵmpd"](1073742336,J.u,J.u,[]),e["ɵmpd"](1073742336,rl.a,rl.a,[]),e["ɵmpd"](1073742336,cl.a,cl.a,[]),e["ɵmpd"](1073742336,pl.a,pl.a,[]),e["ɵmpd"](1073742336,ll.d,ll.d,[]),e["ɵmpd"](1073742336,nl.g,nl.g,[]),e["ɵmpd"](1073742336,o.a,o.a,[]),e["ɵmpd"](1073742336,o.b,o.b,[]),e["ɵmpd"](256,e.LOCALE_ID,"en-US",[]),e["ɵmpd"](256,Y.a,{autoClose:!0,insideClick:!1},[]),e["ɵmpd"](1024,$.k,(function(){return[[{path:"",redirectTo:"users",pathMatch:"full"},{path:"users",data:o.c,children:[{path:"",component:Il.a},{path:"create",component:Zl.a,data:o.d},{path:"edit/:username",component:Zl.a,data:o.e}]},{path:"roles",data:o.f,children:[{path:"",component:Tn.a},{path:"create",component:Fn.a,data:o.g},{path:"edit/:name",component:Fn.a,data:o.h}]}]]}),[]),e["ɵmpd"](256,e.TRANSLATIONS_FORMAT,"xlf",[])])}))}}]);
\ No newline at end of file
index b7f969b9d36b2ae885bb4ed2e35f3cf4b679c9bd..b5760e1eea73409d2a2ca84c34aecd50f29cd5db 100644 (file)
@@ -10,7 +10,7 @@
 
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
-<link rel="stylesheet" href="styles.58a2c96c3b87bd02e7a7.css"></head>
+<link rel="stylesheet" href="styles.0d3cd206c82d5fe7076a.css"></head>
 <body>
   <noscript>
     <div class="noscript container"
@@ -24,5 +24,5 @@
   </noscript>
 
   <cd-root></cd-root>
-<script src="runtime.0907482258dfadeab004.js" defer></script><script src="polyfills.513b02b42d061373f212.js" defer></script><script src="scripts.76632aba1e576c7cc54a.js" defer></script><script src="main.cb10cd7f4a550e7a33c5.js" defer></script></body>
+<script src="runtime.0e1c754813ff535e4bd5.js" defer></script><script src="polyfills.14628a6f4ca10d3018fd.js" defer></script><script src="scripts.76632aba1e576c7cc54a.js" defer></script><script src="main.c43d13b597196a5f022f.js" defer></script></body>
 </html>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js
new file mode 100644 (file)
index 0000000..3a56af1
--- /dev/null
@@ -0,0 +1,2 @@
+/*! For license information please see main.c43d13b597196a5f022f.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"+0ag":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=/ceph version\s+[^ ]+\s+\(.+\)\s+(.+)\s+\((.+)\)/.exec(t);return e?"dev"===e[2]?"master":e[1]:t}}},"+FhV":function(t,e,n){var a=n("IMTC")(Object.getPrototypeOf,Object);t.exports=a},"+GvH":function(t,e,n){var a=n("rk81"),r=n("ezUo"),i=n("w4fU"),s=n("2bSy"),o=n("qwH+"),u=n("0GLT"),l=n("y/5f"),d=n("uPDw"),c="[object Object]",f=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,g,p){var b=u(t),m=u(e),y=b?"[object Array]":o(t),v=m?"[object Array]":o(e),x=(y="[object Arguments]"==y?c:y)==c,_=(v="[object Arguments]"==v?c:v)==c,T=y==v;if(T&&l(t)){if(!l(e))return!1;b=!0,x=!1}if(T&&!x)return p||(p=new a),b||d(t)?r(t,e,n,h,g,p):i(t,e,y,n,h,g,p);if(!(1&n)){var O=x&&f.call(t,"__wrapped__"),w=_&&f.call(e,"__wrapped__");if(O||w){var S=O?t.value():t,I=w?e.value():e;return p||(p=new a),g(S,I,n,h,p)}}return!!T&&(p||(p=new a),s(t,e,n,h,g,p))}},"+GxX":function(t,e,n){var a=n("77kF"),r=n("1Yk6");t.exports=function(t,e){return a(t,r(t),e)}},"+NyF":function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},"+Wg/":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="pt-BR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Alternar navegação</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Painel de controle</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitores</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Serviços</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuração</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mapa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Módulos do gerenciador</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Registros</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pools</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloco</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Imagens</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Espelhamento</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemas de arquivos</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Gateway de Objetos</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Usuários</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartimentos</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Selecionar Idioma</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Carregando dados do painel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Seletor de Horário do Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Redefinir Configurações</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Voltar</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Falha ao carregar dados.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>selecionado(s)</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>encontrado(s)</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nome</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descrição</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descrição extensa</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Padrão</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Padrão do daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valores</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Salvar</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visualizador de mapa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Carregando...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nome de host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Este campo é obrigatório.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sim, desejo.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Cancelar</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Fechar</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista de Hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Desempenho Geral</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nenhuma entrada encontrada</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Registros do Cluster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Registros de Auditoria</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Carregando configuração...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Não foi possível carregar a configuração.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Editar módulo do gerenciador</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>O valor inserido não é um UUID válido. Ex.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>O valor inserido precisa ser um endereço IP válido.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>O valor inserido precisa ser um número.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>O valor inserido precisa ser um número ou decimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Atualizar</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID do Cluster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap modificado</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>época de monmap</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con obrigatório</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon obrigatório</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>No Quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Não está no Quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Adicionar</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Recursos</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flags OSD de todo o Cluster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Enviar</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avançado...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioridade de Recuperação de OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioridade</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizar valores de prioridade</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Este campo é obrigatório!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>O valor precisa ser entre 0 e 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Reponderar</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profundo } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profundo} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista de OSDs</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valor</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Editar</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Excluir</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Saúde</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Estatísticas</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clientes</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Qualquer cliente pode acessar</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Endereços</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo obrigatório</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Deve conter um ou mais valores separados por vírgula</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Por exemplo:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo de Acesso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Executar Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Adicionar clientes</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Não há clusters disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Selecionar cluster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Adicionar daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend de Armazenamento</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Não há pools de dados disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Selecionar backend de armazenamento --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Usuário do Gateway de Objetos</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Não há usuários disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Selecionar usuário do gateway de objetos --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID de Usuário do CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Não há clientes disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Selecionar cliente do cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nome do CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Rótulo de Segurança</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Habilitar rótulo de segurança</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Caminho do CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>O caminho precisa começar com \'/\' e pode ser seguido de uma palavra</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Novo diretório será criado</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Caminho</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>O caminho pode ser apenas uma \'/\' ou uma palavra</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Novo compartimento será criado</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocolo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Clientes não podem montar subdiretórios (ou seja, se Tag = foo, o cliente não poderá montar foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Ao usar opções diferentes de Tag, o mesmo Caminho pode ser exportado várias vezes.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Ao usar opções diferentes de Pseudo, o mesmo Caminho pode ser exportado várias vezes.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Não há tipos de acesso disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Selecionar tipo de acesso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Não há squashes disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>--Selecionar que tipo de squash de ID de usuário será executado --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocolo de Transporte</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Bem-vindo ao Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nome de usuário é obrigatório</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Senha é obrigatória</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Login</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>O usuário não existe no Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Proibido</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Você não tem permissão para ver o que está procurando.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuração de RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Remova o valor de configuração local. No lugar dele, o valor de configuração pai será herdado e usado.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>O valor mínimo é 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista de Pools</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>O nome pode conter apenas caracteres alfanuméricos, traços e sublinhados.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>O nome do perfil de código de eliminação escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plug-in</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Pacotes de dados (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Deve ser igual ou maior do que 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Pacotes de codificação (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Deve ser igual ou maior do que 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimador de durabilidade (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localidade (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domínio de falha do Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localidade do Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nenhum</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Técnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Tamanho do pacote</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Raiz do Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe do dispositivo do Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>qualquer</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Diretório</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nome...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>O nome do pool do Ceph escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo de pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Selecionar tipo de pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupos de posicionamento</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Pelo menos um grupo de posicionamento é necessário!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Seu cluster não pode processar tantos PGs. Recalcule a quantidade de PG necessária.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Ajuda no cálculo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Tamanho replicado</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flags</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sobregravações de EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplicativos</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Perfil do código de eliminação</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Não há perfis de código de eliminação disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Selecionar perfil do código de eliminação --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Conjunto de regras do Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Selecionar regra de crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regra de Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Etapas do Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compactação</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modo</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Não há algoritmos de compactação de eliminação disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Tamanho mínimo do blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>ex. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>O valor deve ser maior do que 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Tamanho máximo do blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>ex. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>O valor deve ser maior do que o tamanho mínimo do blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Taxa</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Taxa de compactação</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>O valor deve ser entre 0.0 e 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ex. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detalhes</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detalhes de Desempenho</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detalhes das Camadas do Cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Mover imagem para o lixo</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Vencimento da proteção em</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NÃO PROTEGIDO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato de data incorreto. Use "AAAA-MM-DD HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>A proteção já venceu. Escolha uma data no futuro ou deixe-a vazia.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Mover Imagem</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Visão geral</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinos</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticação de Descoberta</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Usuário</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Os nomes de usuário devem ter entre 8 e 64 caracteres e\n              apenas podem conter letras, \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Senha</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Usuário Mútuo</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Senha Mútua</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informações disponíveis:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinos iSCSI não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool de Dados</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Criado</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Tamanho</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objetos</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Tamanho do objeto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unidade de distribuição</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Total de distribuições</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Pai</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefixo do nome do bloco</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Ordem</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantâneos</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Imagem</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Esta configuração substitui o valor global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Este é o valor global. Nenhum valor para esta opção foi definido para esta imagem.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' e \'@\' não são permitidos.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Não há pools de RBD disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Selecionar pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Usar pool de dados dedicado</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool de dados</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool dedicado que armazena os dados de objetos do RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Você precisa aumentar o tamanho.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avançado</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Distribuição</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unidade de distribuição</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Selecionar unidade de distribuição --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Este campo é obrigatório porque o total de distribuições foi definido!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>A unidade de distribuição é maior do que o tamanho do objeto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Total de distribuições</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Este campo é obrigatório porque a unidade de distribuição foi definida!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>O total de distribuições deve ser maior do que 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Você está prestes a fazer rollback</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Purgar Lixo</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tudo</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nome do pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurar Imagem</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Para restaurar</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>digite o novo nome da imagem e clique em</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Novo Nome</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Venceu em</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protegido até</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Não costuma ser necessário mudar o valor padrão destes parâmetros.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Configurações</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmar</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Configurações Avançadas</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN de Destino</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN tem padrão incorreto.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Por exemplo: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Mais informações</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Este destino tem configurações avançadas modificadas.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portais</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Adicionar portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Esta imagem tem configurações modificadas.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Adicionar imagem</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticação ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciadores</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciador</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN do Cliente</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>O IQN do Iniciador precisa ser exclusivo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Os nomes de usuário devem ter entre 8 e 64 caracteres e\n                        apenas podem conter letras, \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>O iniciador pertence a um grupo. As imagens serão configuradas no grupo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nenhum item adicionado.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Adicionar iniciador</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupos</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Adicionar grupo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Lixo</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemas</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizando</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Pronto</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Editar modo de espelho do pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Clusters de peer devem ser removidos antes de desabilitar o espelho.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Editar} other {Adicionar} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nome do Cluster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>O nome do cluster não é válido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID do CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID do CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>O ID do CephX não é válido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Endereços do Monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Endereços delimitados por vírgula...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>O endereço de monitoria não é válido.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Chave do CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Chave codificada com base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>A chave do CephX deve ser codificada com base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Contadores de desempenho não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista de Daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contadores de Desempenho</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Carregando dados do compartimento...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>O valor não é válido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>O nome escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Proprietário</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Selecionar usuário --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Habilitado</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo de índice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regra de posicionamento</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marcador</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marcador máximo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versão</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versão master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Horário da modificação</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Grupo de zonas</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Cota do compartimento</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Tamanho máximo</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Ilimitado</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Máximo de objetos</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nome de usuário</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Selecionar nome de usuário --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Gerar chave automaticamente</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Chave de acesso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Chave secreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nome completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Endereço de e-mail</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspenso</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Máximo de compartimentos</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subusuários</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Recursos</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Cota do usuário</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostrar</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Chaves</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Selecionar tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Permissão</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Selecionar permissão --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subusuário</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>O ID de subusuário escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>leitura, gravação</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>completo</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Chave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Gerar segredo automaticamente</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Carregando dados do usuário...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Não foi possível carregar os dados do usuário.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>O ID de usuário escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Este não é um endereço de e-mail válido.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>O endereço de e-mail escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Máx. de compartimentos</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Desabilitado</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizado</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Chave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Não há subusuários.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Não há chaves.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Não há recursos.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Tamanho ilimitado</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Tamanho máx.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objetos ilimitados</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Máx. de objetos</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>O valor inserido deve ser &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descrição...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Permissões</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Funções</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmar senha</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>A confirmação de senha não corresponde à senha.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>E-mail inválido.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Você está prestes a remover as permissões de "leitura/atualização de usuário" do seu próprio usuário.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Se você continuar, não poderá mais adicionar ou remover funções de nenhum usuário.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Deseja realmente continuar?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Ajuda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentação</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Sobre</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Configurações do Painel de Controle</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gerenciamento de usuários</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Usuário que efetuou login</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Efetuar logout</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributos (mapa OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadados não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadados</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contador de desempenho</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Gravações</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Leituras</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histograma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valores atuais</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Mín.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Máx.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origem</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Nível</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Pode ser atualizado em tempo de execução (editável)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tags</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valores de enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Consulte também</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status do Cluster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons do Gerenciador</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Gateways de Objetos</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Servidores de Metadados</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Gateways iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS do Cliente</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Throughput do Cliente</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Leitura/Gravação do Cliente</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Throughput de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Remoção</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Desempenho</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacidade Bruta</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PGs por OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status do PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacidade</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Posições</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Atual</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticação de descoberta atualizada</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Não há portais disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Não há imagens disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Não há imagens disponíveis. Adicione uma imagem ao destino.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Não há iniciadores disponíveis. Adicione um iniciador ao destino.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destino</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes de Leitura</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes de Gravação</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Op. de Leitura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Op. de Gravação</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Desde</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instância</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Andamento</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Modo de Edição</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Adicionar Peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Editar Peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Excluir Peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>Nº Local</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>Nº Remoto</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>espelhar peer</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Chave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Nivelamento profundo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Disposição em camadas</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Bloqueio exclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa de objetos (requer bloqueio exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Registro em diário (requer bloqueio exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NÃO PROTEGIDO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback de instantâneo do RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Fazer Rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Instantâneo do RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Excluído à(s)</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>estado</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versão</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>raiz</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons de standby</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Posição</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Atividade</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Uso</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Atualizado</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>É possível atualizar o valor em temo de execução.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemons/clientes não extraem este valor do\n      banco de dados de configuração do monitor. A configuração desta opção não é permitida por meio de \'ceph config\n      set ...\'. Essa opção deve ser configurada por meio do ceph.conf ou da\n      linha de comando.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>A opção entra em vigor apenas durante a inicialização do daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>A opção afeta apenas a criação do cluster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>A opção afeta apenas a criação do daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Serviço</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valor atual</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Editável</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Habilitar</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Desabilitar</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Reconectando, aguarde...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Endereço Público</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessões Abertas</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Não Entrada</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Os OSDs que já foram marcados como saída não serão remarcados como entrada ao serem iniciados</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Não Saída</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Os OSDs não serão automaticamente marcados como saída após o intervalo configurado</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Não Ativo</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Os OSDs não podem ser iniciados</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Não Inativo</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Os relatórios de falha de OSD estão sendo ignorados, portanto, os monitores não marcarão os OSDs como inativos</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pausar</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pausa leituras e gravações</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Sem Remoção</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Remoção desabilitada</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Sem Remoção Profunda</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Remoção Profunda desabilitada</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Sem Provisionamento</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Provisionamento de PGs suspenso</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Sem Recuperação</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Recuperação de PGs suspensa</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Classificação Bit a Bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usar classificação bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdirs Purgados</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDs converteram snapsets</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Exclusões de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Exclusões realizadas durante a recuperação, e não o emparelhamento</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite Físico do Registro de PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Atribui um limite físico ao tamanho do registro de PG</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flags OSD Atualizadas</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>saída</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>entrada</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>inativo</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marcar</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdido</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marcado como perdido</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Purgar</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>purgado</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>destruir</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>destruído</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>excluir</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PGs</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes de leitura</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes de gravação</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Op. de leitura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Op. de gravação</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Máx. de Provisionamentos</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Máx. Recuperação Ativo</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Máx. Recuperação Inicialização Única</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Suspensão de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Tarefa</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravidade</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Iniciado</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Usado</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Disp.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Limpar</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Em funcionamento</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Aviso</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Desconhecido</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>ativo</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>sem sistemas de arquivos</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>ativo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon ativo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>O serviço NFS Ganesha não está configurado.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transporte</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Usuário do CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Sistema de Arquivos do CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(herdado da configuração global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>herdado da configuração global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Selecionar que tipo de squash de ID de usuário será executado --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Não há daemons disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modo de Cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Tempo Mín. Expulsão</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Tempo Mín. Descarregamento</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Máx. de Bytes de Destino</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Máx. de Objetos de Destino</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nenhum aplicativo adicionado</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Limite de aplicativos atingido</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Um pool apenas pode ter até quatro definições de aplicativos.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caracteres permitidos: \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Tamanho máximo de 128 caracteres</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrar ou adicionar aplicativos</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Adicionar aplicativo</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>perfil de código de eliminação</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Tamanho da Réplica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Última Alteração</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Perfil Codificado para Eliminação</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Conjunto de Regras do Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartimento</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartimentos</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>usuário</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>usuários</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Escopo</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Leitura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Criar</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Função do Sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Atualizar usuário</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuar</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Você foi automaticamente desconectado porque suas funções foram alteradas.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Cada objeto é dividido em partes de pacotes de dados, cada uma armazenada em um OSD diferente.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcule os pacotes de codificação de cada objeto e armazene-os em diferentes OSDs.\n      O número de pacotes de codificação é também o número de OSDs que podem ficar inativos sem perda de dados.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>O plug-in jerasure é o mais genérico e flexível,\n          além de ser o padrão para pools codificados para eliminação do Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>A técnica mais flexível é reed_sol_van: ela é suficiente para definir k\n          e m. A técnica cauchy_good pode ser mais rápida, mas você precisa escolher o tamanho do pacote\n          com cuidado. Todos os reed_sol_r6_op, liberation, blaum_roth e liber8tion são equivalentes ao RAID6\n          no sentido de que só podem ser configurados com m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>A codificação será feita em pacotes de tamanho de bytes um de cada vez.\n          A escolha do tamanho do pacote certo é difícil.\n          A documentação do jerasure contém informações completas sobre este tópico.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Com o plug-in jerasure, quando um objeto codificado para eliminação é armazenado em\n          vários OSDs, a recuperação após a perda de um OSD requer a leitura de todos os outros.\n          Por exemplo, se o jerasure for configurado com k=8 e m=4, a perda de um OSD exigirá a leitura\n          dos outros onze para fazer o reparo.\n\n          O plug-in de código de eliminação lrc cria pacotes locais de paridade para conseguir recuperar usando\n          menos OSDs. Por exemplo, se o lrc for configurado com k=8, m=4 e l=4, ele criará\n          um pacote de paridade adicional para cada quatro OSDs. Quando um único OSD é perdido, ele pode ser\n          recuperado apenas com quatro OSDs, em vez de onze.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Agrupe os pacotes de codificação e dados em conjuntos de localidades com tamanho. Por exemplo,\n          no caso de k=4 e m=2, quando locality=3, dois grupos de três são criados. Cada conjunto pode\n          ser recuperado sem a leitura dos pacotes do outro conjunto.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>O tipo do compartimento de crush em que cada conjunto de pacotes definido\n          por l será armazenado. Por exemplo, se isso for definido como rack, cada grupo de pacotes l será\n          colocado em um rack diferente. Isso é usado para criar uma etapa da regra CRUSH, como a etapa de escolha do\n          rack. Se isso não for definido, esse tipo de agrupamento não será feito.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>O plug-in isa encapsula a biblioteca ISA. Ele apenas é executado em processadores Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>O plug-in ISA vem em dois formatos de Reed Solomon.\n          Se reed_sol_van for definido, ele será Vandermonde, se cauchy for definido, ele será Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>O plug-in shec encapsula a biblioteca múltipla SHEC.\n          Ele permite ao ceph recuperar dados com mais eficiência do que os códigos de Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>O número de pacotes de paridade, em que cada um inclui cada pacote de dados em sua\n          faixa de cálculo. O número é usado como estimador de durabilidade. Por exemplo, se c=2,\n          2 OSDs podem ficar inativos sem perda de dados.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>O nome do compartimento de crush usado para a primeira etapa da regra CRUSH.\n      Por exemplo, a etapa assumir o padrão.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Verifique se não há dois pacotes em um compartimento com o mesmo domínio de\n      falha. Por exemplo, se o domínio de falha for um host, não armazene dois pacotes no mesmo\n      host. Isso é usado para criar uma etapa da regra CRUSH, como a etapa de escolha do host folha.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restrinja o posicionamento a dispositivos de uma classe específica\n      (ex. ssd ou hdd), usando nomes de classe de dispositivo crush no mapa CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Defina o nome do diretório do qual o plug-in de código de eliminação é carregado.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Permite todas as operações</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Permite apenas as operações que não modificam o servidor</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Não permite operações de leitura ou gravação, mas permite qualquer outra operação</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Não permite leitura, gravação ou qualquer operação que modifica os atributos do arquivo ou o conteúdo do diretório</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Não permite nenhum tipo de acesso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Selecionar prioridade --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Baixa</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informações</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Últimos 5 minutos</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Últimos 15 minutos</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Últimos 30 minutos</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Última 1 hora (Padrão)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Últimas 3 horas</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Últimas 6 horas</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Últimas 12 horas</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Últimas 24 horas</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ontem</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hoje</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Até agora hoje</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Antes de ontem</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Últimos 2 dias</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Este dia na semana passada</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Semana anterior</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Esta semana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Até agora nesta semana</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Últimos 7 dias</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Mês anterior</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Este mês</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Até agora neste mês</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Últimos 30 dias</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Últimos 90 dias</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Últimos 6 meses</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Último ano</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Ano anterior</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Este ano</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Até agora neste ano</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Últimos 2 anos</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Últimos 5 anos</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nenhum item selecionado.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Desmarcar item para selecionar novamente</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Limite de seleção atingido</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tags de filtro</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Adicionar selo</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Não há itens disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clonar</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copiar</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Remoção Profunda</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Destruir</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Nivelar</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marcar como Inativo</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marcar como Entrada</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marcar como Perdido</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marcar como Saída</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renomear</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurar</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Mover para Lixo</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Cancelar proteção</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Excluído</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonado</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiado</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Nivelado</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Purgado</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restaurado</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback feito</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sim</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Não</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualidade do Serviço</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite de BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>O limite de bytes por segundo de E/S desejado.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite de IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>O limite de operações por segundo de E/S desejado.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite de BPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>O limite de bytes por segundo de leitura desejado.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite de IOPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>O limite de operações por segundo de leitura desejado.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite de BPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>O limite de bytes por segundo de gravação desejado.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite de IOPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>O limite de operações por segundo de gravação desejado.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Intermitência de BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>O limite de bytes de E/S de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Intermitência de IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>O limite de operações de E/S de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Intermitência de BPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>O limite de bytes de leitura de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Intermitência de IOPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>O limite de operações de leitura de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Intermitência de BPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>O limite de bytes de gravação de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Intermitência de IOPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>O limite de operações de gravação de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Executando</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>executar</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Executado</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tarefa desconhecida</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Criando</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>criar</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Atualizando</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>atualizar</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Excluindo</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonando</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clonar</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copiando</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copiar</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Nivelando</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>nivelar</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Fazendo rollback</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Movendo</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>mover</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Movido</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Imagem não encontrada.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Restaurando</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurar</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Purgando</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>purgar</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>todos os pools</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossível desabilitar espelhamento porque ele contém um peer.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"+Z6c":function(t,e,n){var a=n("TbD+"),r=n("LJNh")((function(t,e){return null==t?{}:a(t,e)}));t.exports=r},"+fVR":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{setExpandedRow(t){this.expandedRow=t}}},"+gVj":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return f})),n.d(e,"d",(function(){return i})),n.d(e,"e",(function(){return l})),n.d(e,"f",(function(){return g})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return h}));var a=n("8Y7J"),r=n("s7LF");class i{constructor(){this.validSubmit=new a.EventEmitter}onSubmit(){this.markAsTouchedAndDirty(this.formGroup),this.formGroup.valid&&this.validSubmit.emit(this.formGroup.value)}markAsTouchedAndDirty(t){t instanceof r.k?Object.keys(t.controls).forEach(e=>this.markAsTouchedAndDirty(t.controls[e])):t instanceof r.f?t.controls.forEach(t=>this.markAsTouchedAndDirty(t)):t instanceof r.i&&t.enabled&&(t.markAsDirty(),t.markAsTouched(),t.updateValueAndValidity())}}const s=function(){var t={Three:0,Four:1};return t[t.Three]="Three",t[t.Four]="Four",t}(),o=new a.InjectionToken("ng-bootstrap-form-validation custom error messages"),u=new a.InjectionToken("ng-bootstrap-form-validation module options");class l{constructor(t){this.bootstrapVersion=t,this.messages=()=>[]}get className(){switch(this.bootstrapVersion){case s.Three:return"help-block";case s.Four:return"invalid-feedback"}}}const d=[{error:"required",format:t=>t+" is required"},{error:"pattern",format:t=>t+" is invalid"},{error:"minlength",format:(t,e)=>`${t} must be at least ${e.requiredLength} characters`},{error:"maxlength",format:(t,e)=>`${t} must be no longer than ${e.requiredLength} characters`},{error:"requiredTrue",format:(t,e)=>t+" is required"},{error:"email",format:(t,e)=>"Invalid email address"},{error:"max",format:(t,e)=>`${t} must be no greater than ${e.max}`},{error:"min",format:(t,e)=>`${t} must be no less than ${e.min}`}];let c=(()=>{class t{constructor(t){this.customErrorMessages=t,this.defaultErrors=d,this.errorMessages=t.reduce((t,e)=>t.concat(e),this.defaultErrors)}}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(o))},token:t,providedIn:"root"}),t})();class f{constructor(t,e){this.elRef=t,this.errorMessageService=e,this.customErrorMessages=[],this.validationDisabled=!1,this.messages=()=>this.getMessages()}get hasErrors(){return this.FormControlNames.some(t=>!t.valid&&t.dirty&&t.touched)&&!this.validationDisabled}get hasSuccess(){return!this.FormControlNames.some(t=>!t.valid)&&this.FormControlNames.some(t=>t.dirty&&t.touched)&&!this.validationDisabled}ngAfterContentInit(){this.messagesBlock&&(this.messagesBlock.messages=this.messages)}ngOnInit(){this.errorMessages=this.errorMessageService.errorMessages.concat(this.customErrorMessages).reverse()}get label(){const t=this.elRef.nativeElement.querySelector("label");return t&&t.textContent?t.textContent.trim():"This field"}get isDirtyAndTouched(){return this.FormControlNames.some(t=>t.dirty&&t.touched)}getMessages(){const t=[];if(!this.isDirtyAndTouched||this.validationDisabled)return t;const e=this.FormControlNames.map(t=>t.name);return this.FormControlNames.filter((t,n)=>!t.valid&&!!t.errors&&e.indexOf(t.name)===n).forEach(e=>{Object.keys(e.errors).forEach(n=>{const a=this.errorMessages.find(t=>t.error===n);a&&t.push(a.format(this.label,e.errors[n]))})}),t}}class h{constructor(t,e){this.parent=t,this.bootstrapVersion=e}get validClass(){return!!this.control&&this.bootstrapFour&&this.control.valid&&(this.control.touched||this.control.dirty)}get invalidClass(){return!!this.control&&this.bootstrapFour&&this.control.invalid&&this.control.touched&&this.control.dirty}get path(){return[...this.parent.path,this.formControlName]}get control(){return this.formDirective&&this.formDirective.getControl(this)}get formDirective(){return this.parent?this.parent.formDirective:null}get bootstrapFour(){return this.bootstrapVersion===s.Four}}class g{static forRoot(t={bootstrapVersion:s.Four}){return{ngModule:g,providers:[{provide:o,useValue:t.customErrorMessages||[],multi:!0},{provide:u,useValue:t.bootstrapVersion},c]}}}},"+s0g":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),a=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"+xYL":function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},"//9w":function(t,e,n){!function(t){"use strict";t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"/F2L":function(t,e,n){var a=n("emnf"),r=n("G3uG")(a);t.exports=r},"/GqU":function(t,e,n){var a=n("RK3t"),r=n("HYAF");t.exports=function(t){return a(r(t))}},"/Gx3":function(t,e,n){var a=n("aHcz"),r=n("8V0S"),i=n("/F2L");t.exports=function(t,e){return i(r(t,e,a),t+"")}},"/NlG":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("8Y7J"),r=n("oxzT");class i{constructor(t){this.i18n=t,this.title="",this.bootstrapClass="",this.backAction=new a.EventEmitter,this.size="normal",this.showIcon=!0,this.showTitle=!0,this.icons=r.a}ngOnInit(){switch(this.type){case"warning":this.title=this.title||this.i18n("Warning"),this.typeIcon=this.typeIcon||r.a.warning,this.bootstrapClass=this.bootstrapClass||"warning";break;case"error":this.title=this.title||this.i18n("Error"),this.typeIcon=this.typeIcon||r.a.destroyCircle,this.bootstrapClass=this.bootstrapClass||"danger";break;case"info":this.title=this.title||this.i18n("Information"),this.typeIcon=this.typeIcon||r.a.infoCircle,this.bootstrapClass=this.bootstrapClass||"info";break;case"success":this.title=this.title||this.i18n("Success"),this.typeIcon=this.typeIcon||r.a.check,this.bootstrapClass=this.bootstrapClass||"success"}}}},"/X5v":function(t,e,n){!function(t){"use strict";t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},"/b8u":function(t,e,n){var a=n("STAE");t.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},"/byt":function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},"/rd/":function(t,e,n){var a=n("im1V"),r=n("x3F9");t.exports=function(t){return r(t)&&a(t)}},0:function(t,e,n){t.exports=n("zUnb")},"0+/T":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("s7LF"),r=n("QFaf");n("sb0X");class i{constructor(t){this.modalRef=t,this.actionDescription="delete"}ngOnInit(){const t={confirmation:new a.i(!1,[a.B.requiredTrue])};if(this.childFormGroup&&(t.child=this.childFormGroup),this.deletionForm=new r.a(t),!this.submitAction&&!this.submitActionObservable)throw new Error("No submit action defined")}callSubmitAction(){this.submitActionObservable?this.submitActionObservable().subscribe(null,this.stopLoadingSpinner.bind(this),this.hideModal.bind(this)):this.submitAction()}hideModal(){this.modalRef.hide()}stopLoadingSpinner(){this.deletionForm.setErrors({cdSubmitButton:!0})}}},"02OF":function(t,e,n){var a=n("IfUl"),r=n("j09V"),i=n("lEOU"),s=n("Y3RO"),o=n("pcUq"),u=n("PHub"),l=n("0GLT"),d=n("/rd/"),c=n("y/5f"),f=n("Q7RW"),h=n("hmSm"),g=n("CslI"),p=n("uPDw"),b=n("dCge"),m=n("eAIQ");t.exports=function(t,e,n,y,v,x,_){var T=b(t,n),O=b(e,n),w=_.get(O);if(w)a(t,n,w);else{var S=x?x(T,O,n+"",t,e,_):void 0,I=void 0===S;if(I){var N=l(O),C=!N&&c(O),R=!N&&!C&&p(O);S=O,N||C||R?l(T)?S=T:d(T)?S=s(T):C?(I=!1,S=r(O,!0)):R?(I=!1,S=i(O,!0)):S=[]:g(O)||u(O)?(S=T,u(T)?S=m(T):h(T)&&!f(T)||(S=o(O))):I=!1}I&&(_.set(O,S),v(S,O,y,x,_),_.delete(O)),a(t,n,S)}}},"07d7":function(t,e,n){var a=n("AO7/"),r=n("busE"),i=n("sEFX");a||r(Object.prototype,"toString",i,{unsafe:!0})},"0BK2":function(t,e){t.exports={}},"0BcO":function(t,e,n){var a=n("KFwg")(n("Wa4q"),"WeakMap");t.exports=a},"0Dky":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"0EUg":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("bHdf");function r(){return Object(a.a)(1)}},"0GLT":function(t,e){t.exports=Array.isArray},"0GbY":function(t,e,n){var a=n("Qo9l"),r=n("2oRo"),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(a[t])||i(r[t]):a[t]&&a[t][e]||r[t]&&r[t][e]}},"0eef":function(t,e,n){"use strict";var a={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!a.call({1:2},1);e.f=i?function(t){var e=r(this,t);return!!e&&e.enumerable}:a},"0mo+":function(t,e,n){!function(t){"use strict";var e={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};t.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(t){return t.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(t,e){return 12===t&&(t=0),"མཚན་མོ"===e&&t>=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n("wd/R"))},"0nKi":function(t,e){t.exports=function(t){return function(e){return t(e)}}},"0rEg":function(t,e){t.exports=function(t,e,n){for(var a=n-1,r=t.length;++a<r;)if(t[a]===e)return a;return-1}},"0rvr":function(t,e,n){var a=n("glrk"),r=n("O741");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(i){}return function(n,i){return a(n),r(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},"0tRk":function(t,e,n){!function(t){"use strict";t.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n("wd/R"))},"128B":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("Kqap"),r=n("BFxc"),i=n("xbPD"),s=n("mCNh");function o(t,e){return arguments.length>=2?function(n){return Object(s.a)(Object(a.a)(t,e),Object(r.a)(1),Object(i.a)(e))(n)}:function(e){return Object(s.a)(Object(a.a)((e,n,a)=>t(e,n,a+1)),Object(r.a)(1))(e)}}},"14R3":function(t,e){"undefined"!=typeof Element&&("function"!=typeof Element.prototype.matches&&(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.webkitMatchesSelector||function(t){for(var e=(this.document||this.ownerDocument).querySelectorAll(t),n=0;e[n]&&e[n]!==this;)++n;return Boolean(e[n])}),"function"!=typeof Element.prototype.closest&&(Element.prototype.closest=function(t){for(var e=this;e&&1===e.nodeType;){if(e.matches(t))return e;e=e.parentNode}return null}))},"14Sl":function(t,e,n){"use strict";n("rB9j");var a=n("busE"),r=n("0Dky"),i=n("tiKp"),s=n("kmMV"),o=n("kRJp"),u=i("species"),l=!r((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),d="$0"==="a".replace(/./,"$0"),c=i("replace"),f=!!/./[c]&&""===/./[c]("a","$0"),h=!r((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,c){var g=i(t),p=!r((function(){var e={};return e[g]=function(){return 7},7!=""[t](e)})),b=p&&!r((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[u]=function(){return n},n.flags="",n[g]=/./[g]),n.exec=function(){return e=!0,null},n[g](""),!e}));if(!p||!b||"replace"===t&&(!l||!d||f)||"split"===t&&!h){var m=/./[g],y=n(g,""[t],(function(t,e,n,a,r){return e.exec===s?p&&!r?{done:!0,value:m.call(e,n,a)}:{done:!0,value:t.call(n,e,a)}:{done:!1}}),{REPLACE_KEEPS_$0:d,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:f}),v=y[1];a(String.prototype,t,y[0]),a(RegExp.prototype,g,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}c&&o(RegExp.prototype[g],"sham",!0)}},"1E5z":function(t,e,n){var a=n("m/L8").f,r=n("UTVS"),i=n("tiKp")("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},"1Ni5":function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("LRne"),s=n("PqYM"),o=n("eIep");function u(t,e){return e?Object(o.a)(()=>t,e):Object(o.a)(()=>t)}var l=n("lJxs"),d=n("IzEk"),c=n("Fgil"),f=n("aXbf");function h(t){return null==t||0===t.length}n.d(e,"b",(function(){return h})),n.d(e,"a",(function(){return g}));class g{static email(t){return h(t.value)?null:a.B.email(t)}static ip(t=0){const e=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,n=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;return a.B.pattern(4===t?e:6===t?n:new RegExp(e.source+"|"+n.source))}static number(t=!0){return a.B.pattern(t?/^-?[0-9]+$/i:/^[0-9]+$/i)}static decimalNumber(t=!0){return a.B.pattern(t?/^-?[0-9]+(.[0-9]+)?$/i:/^[0-9]+(.[0-9]+)?$/i)}static requiredIf(t,e){let n=!1;return a=>(!n&&a.parent&&(Object.keys(t).forEach(t=>{a.parent.get(t).valueChanges.subscribe(()=>{a.updateValueAndValidity({emitEvent:!1})})}),n=!0),Object.keys(t).every(e=>a.parent&&a.parent.get(e).value===t[e])&&(r.isFunction(e)?e.call(e,a.value):h(a.value))?{required:!0}:null)}static composeIf(t,e){let n=!1;return r=>(!n&&r.parent&&(Object.keys(t).forEach(t=>{r.parent.get(t).valueChanges.subscribe(()=>{r.updateValueAndValidity({emitEvent:!1})})}),n=!0),Object.keys(t).every(e=>r.parent&&r.parent.get(e).value===t[e])?a.B.compose(e)(r):null)}static custom(t,e){return n=>{const a=e.call(this,n.value);return a?{[t]:a}:null}}static validateIf(t,e,n,r=[],i=[]){n=n.concat(r),t.setValidators(t=>e.call(this)?a.B.compose(n)(t):r.length>0?a.B.compose(r)(t):null),i.forEach(e=>{e.valueChanges.subscribe(()=>{t.updateValueAndValidity({emitEvent:!1})})})}static match(t,e){return n=>{const a=n.get(t),i=n.get(e);if(!a||!i)return null;if(a.value!==i.value)i.setErrors({match:!0});else if(i.hasError("match")){const t=i.errors;r.unset(t,"match"),i.setErrors(r.isEmpty(r.keys(t))?null:t)}return null}}static unique(t,e=null,n=500){return a=>a.pristine||h(a.value)?Object(i.a)(null):Object(s.a)(n).pipe(u(t.call(e,a.value)),Object(l.a)(t=>t?{notUnique:!0}:null),Object(d.a)(1))}static uuid(t=!1){const e=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return n=>n.pristine&&n.untouched?null:t||n.value?e.test(n.value)?null:{invalidUuid:"This is not a valid UUID"}:null}static binaryMin(t){return e=>{const n=new f.a,a=(new f.a).toBytes(e.value);if(t<=a)return null;const r=new c.a(n).transform(t);return{binaryMin:t=>t("Size has to be at least {{value}} or more",{value:r})}}}static binaryMax(t){return e=>{const n=new f.a,a=n.toBytes(e.value);if(t>=a)return null;const r=new c.a(n).transform(t);return{binaryMax:t=>t("Size has to be at most {{value}} or less",{value:r})}}}static passwordPolicy(t,e,n){return a=>{if(a.pristine||""===a.value)return r.isFunction(n)&&n(!0,0),Object(i.a)(null);let o;return r.isFunction(e)&&(o=e()),Object(s.a)(500).pipe(u(r.invoke(t,"validatePassword",a.value,o)),Object(l.a)(t=>(r.isFunction(n)&&n(t.valid,t.credits,t.valuation),t.valid?null:{passwordPolicy:!0})),Object(d.a)(1))}}}},"1Y/n":function(t,e,n){var a=n("HAuM"),r=n("ewvW"),i=n("RK3t"),s=n("UMSQ"),o=function(t){return function(e,n,o,u){a(n);var l=r(e),d=i(l),c=s(l.length),f=t?c-1:0,h=t?-1:1;if(o<2)for(;;){if(f in d){u=d[f],f+=h;break}if(f+=h,t?f<0:c<=f)throw TypeError("Reduce of empty array with no initial value")}for(;t?f>=0:c>f;f+=h)f in d&&(u=n(u,d[f],f,l));return u}};t.exports={left:o(!1),right:o(!0)}},"1Yk6":function(t,e,n){var a=n("IyEx"),r=n("kA6G"),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;t.exports=s?function(t){return null==t?[]:(t=Object(t),a(s(t),(function(e){return i.call(t,e)})))}:r},"1nQr":function(t,e,n){"use strict";var a=n("LvDl"),r=n("lJxs"),i=n("20UP");class s{constructor(t){this.pwdPolicyEnabled=t.pwd_policy_enabled,this.pwdPolicyMinLength=t.pwd_policy_min_length,this.pwdPolicyCheckLengthEnabled=t.pwd_policy_check_length_enabled,this.pwdPolicyCheckOldpwdEnabled=t.pwd_policy_check_oldpwd_enabled,this.pwdPolicyCheckUsernameEnabled=t.pwd_policy_check_username_enabled,this.pwdPolicyCheckExclusionListEnabled=t.pwd_policy_check_exclusion_list_enabled,this.pwdPolicyCheckRepetitiveCharsEnabled=t.pwd_policy_check_repetitive_chars_enabled,this.pwdPolicyCheckSequentialCharsEnabled=t.pwd_policy_check_sequential_chars_enabled,this.pwdPolicyCheckComplexityEnabled=t.pwd_policy_check_complexity_enabled}}var o=n("8Y7J"),u=n("GiVz");n.d(e,"a",(function(){return l}));let l=(()=>{class t{constructor(t,e){this.i18n=t,this.settingsService=e}getHelpText(){return this.settingsService.getStandardSettings().pipe(Object(r.a)(t=>{const e=new s(t);let n=[];if(e.pwdPolicyEnabled){n.push(this.i18n("Required rules for passwords:"));const t={pwdPolicyCheckLengthEnabled:this.i18n("Must contain at least {{length}} characters",{length:e.pwdPolicyMinLength}),pwdPolicyCheckOldpwdEnabled:this.i18n("Must not be the same as the previous one"),pwdPolicyCheckUsernameEnabled:this.i18n("Cannot contain the username"),pwdPolicyCheckExclusionListEnabled:this.i18n("Cannot contain any configured keyword"),pwdPolicyCheckRepetitiveCharsEnabled:this.i18n('Cannot contain any repetitive characters e.g. "aaa"'),pwdPolicyCheckSequentialCharsEnabled:this.i18n('Cannot contain any sequential characters e.g. "abc"'),pwdPolicyCheckComplexityEnabled:this.i18n("Must consist of characters from the following groups:\n  * Alphabetic a-z, A-Z\n  * Numbers 0-9\n  * Special chars: !\"#$%& '()*+,-./:;<=>?@[\\]^_`{{|}}~\n  * Any other characters (signs)")};n=n.concat(a.keys(t).filter(t=>a.get(e,t)).map(e=>"- "+a.get(t,e)))}return n.join("\n")}))}mapCreditsToCssClass(t){let e="very-strong";return t<10?e="too-weak":t<15?e="weak":t<20?e="ok":t<25&&(e="strong"),e}}return t.ngInjectableDef=o["ɵɵdefineInjectable"]({factory:function(){return new t(o["ɵɵinject"](u.a),o["ɵɵinject"](i.a))},token:t,providedIn:"root"}),t})()},"1rYy":function(t,e,n){!function(t){"use strict";t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},"1xZ4":function(t,e,n){!function(t){"use strict";t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n("wd/R"))},"20UP":function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("LvDl"),r=n("lJxs"),i=n("8Y7J"),s=n("IheW"),o=n("pL04");let u=(()=>{class t{constructor(t){this.http=t,this.settings={}}getValues(t){return a.isArray(t)&&(t=t.join(",")),this.http.get("api/settings?names="+t).pipe(Object(r.a)(t=>{const e={};return a.forEach(t,t=>{a.set(e,t.name,t.value)}),e}))}ifSettingConfigured(t,e,n){const a=this.settings[t];void 0===a?this.http.get(t).subscribe(a=>{this.settings[t]=this.getSettingsValue(a),this.ifSettingConfigured(t,e,n)},e=>{401!==e.status&&(this.settings[t]="")}):""!==a?e(a):n&&n()}disableSetting(t){this.settings[t]=""}getSettingsValue(t){return t.value||t.instance||""}validateGrafanaDashboardUrl(t){return this.http.get("api/grafana/validation/"+t)}getStandardSettings(){return this.http.get("ui-api/standard_settings")}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.c))},token:t,providedIn:o.a}),t})()},2316:function(t,e,n){var a=n("LWR0"),r=n("hmSm");t.exports=function(t,e,n){var i=!0,s=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return r(n)&&(i="leading"in n?!!n.leading:i,s="trailing"in n?!!n.trailing:s),a(t,e,{leading:i,maxWait:e,trailing:s})}},"25BL":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("DqMs"),i=n("/NlG"),s=n("GiVz"),o=n("SVse"),u=n("FE24"),l=n("z/SZ"),d=n("GS7A"),c=n("s7LF"),f=n("w9WL"),h=a["ɵcrt"]({encapsulation:2,styles:[".ngx-datatable{display:block;overflow:hidden;justify-content:center;position:relative;-webkit-transform:translate3d(0,0,0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{overflow-x:auto;-webkit-overflow-scrolling:touch}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{display:flex;flex-direction:row;-o-flex-flow:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{overflow-x:hidden;vertical-align:top;display:inline-block;line-height:1.625}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:0}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{align-items:stretch;-webkit-align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{position:relative;display:inline-block}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{line-height:100%;vertical-align:middle;display:inline-block;cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{display:inline-block;position:absolute;right:0;top:0;bottom:0;width:5px;padding:0 4px;visibility:hidden}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{position:absolute;top:0;bottom:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{position:relative;z-index:10;display:block}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:0}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;width:100%;overflow:auto}.ngx-datatable .datatable-footer .datatable-footer-inner{display:flex;align-items:center;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{padding:0;margin:0;display:inline-block;list-style:none}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:0}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],data:{}});function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"datatable-header",[["class","datatable-header"]],[[4,"height",null],[4,"width",null]],[[null,"sort"],[null,"resize"],[null,"reorder"],[null,"select"],[null,"columnContextmenu"]],(function(t,e,n){var a=!0,r=t.component;return"sort"===e&&(a=!1!==r.onColumnSort(n)&&a),"resize"===e&&(a=!1!==r.onColumnResize(n)&&a),"reorder"===e&&(a=!1!==r.onColumnReorder(n)&&a),"select"===e&&(a=!1!==r.onHeaderSelect(n)&&a),"columnContextmenu"===e&&(a=!1!==r.onColumnContextmenu(n)&&a),a}),x,m)),a["ɵdid"](1,180224,[[2,4]],0,f.i,[a.ChangeDetectorRef],{sortAscendingIcon:[0,"sortAscendingIcon"],sortDescendingIcon:[1,"sortDescendingIcon"],scrollbarH:[2,"scrollbarH"],dealsWithGroup:[3,"dealsWithGroup"],targetMarkerTemplate:[4,"targetMarkerTemplate"],innerWidth:[5,"innerWidth"],sorts:[6,"sorts"],sortType:[7,"sortType"],allRowsSelected:[8,"allRowsSelected"],selectionType:[9,"selectionType"],reorderable:[10,"reorderable"],headerHeight:[11,"headerHeight"],columns:[12,"columns"],offsetX:[13,"offsetX"]},{sort:"sort",reorder:"reorder",resize:"resize",select:"select",columnContextmenu:"columnContextmenu"}),a["ɵpid"](131072,o.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,1,[n.cssClasses.sortAscending,n.cssClasses.sortDescending,n.scrollbarH,void 0!==n.groupedRows,n.targetMarkerTemplate,n._innerWidth,n.sorts,n.sortType,n.allRowsSelected,n.selectionType,n.reorderable,n.headerHeight,n._internalColumns,a["ɵunv"](e,1,13,a["ɵnov"](e,2).transform(n._offsetX))])}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).headerHeight,a["ɵnov"](e,1).headerWidth)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-footer",[["class","datatable-footer"]],null,[[null,"page"]],(function(t,e,n){var a=!0;return"page"===e&&(a=!1!==t.component.onFooterPage(n)&&a),a}),Nt,_t)),a["ɵdid"](1,49152,null,0,f.f,[],{footerHeight:[0,"footerHeight"],rowCount:[1,"rowCount"],pageSize:[2,"pageSize"],offset:[3,"offset"],pagerLeftArrowIcon:[4,"pagerLeftArrowIcon"],pagerRightArrowIcon:[5,"pagerRightArrowIcon"],pagerPreviousIcon:[6,"pagerPreviousIcon"],pagerNextIcon:[7,"pagerNextIcon"],totalMessage:[8,"totalMessage"],footerTemplate:[9,"footerTemplate"],selectedCount:[10,"selectedCount"],selectedMessage:[11,"selectedMessage"]},{page:"page"})],(function(t,e){var n=e.component;t(e,1,1,[n.footerHeight,n.rowCount,n.pageSize,n.offset,n.cssClasses.pagerLeftArrow,n.cssClasses.pagerRightArrow,n.cssClasses.pagerPrevious,n.cssClasses.pagerNext,n.messages.totalMessage,n.footer,n.selected.length,!!n.selectionType&&n.messages.selectedMessage])}),null)}function b(t){return a["ɵvid"](2,[a["ɵqud"](671088640,1,{bodyComponent:0}),a["ɵqud"](671088640,2,{headerComponent:0}),(t()(),a["ɵeld"](2,0,null,null,8,"div",[["visibilityObserver",""]],[[2,"visible",null]],[[null,"visible"]],(function(t,e,n){var a=!0;return"visible"===e&&(a=!1!==t.component.recalculate()&&a),a}),null,null)),a["ɵdid"](3,212992,null,0,f.B,[a.ElementRef,a.NgZone],null,{visible:"visible"}),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](6,0,null,null,2,"datatable-body",[["class","datatable-body"]],[[4,"width",null],[4,"height",null]],[[null,"page"],[null,"activate"],[null,"rowContextmenu"],[null,"select"],[null,"scroll"],[null,"treeAction"]],(function(t,e,n){var a=!0,r=t.component;return"page"===e&&(a=!1!==r.onBodyPage(n)&&a),"activate"===e&&(a=!1!==r.activate.emit(n)&&a),"rowContextmenu"===e&&(a=!1!==r.onRowContextmenu(n)&&a),"select"===e&&(a=!1!==r.onBodySelect(n)&&a),"scroll"===e&&(a=!1!==r.onBodyScroll(n)&&a),"treeAction"===e&&(a=!1!==r.onTreeAction(n)&&a),a}),F,R)),a["ɵdid"](7,245760,[[1,4]],0,f.c,[a.ChangeDetectorRef],{scrollbarV:[0,"scrollbarV"],scrollbarH:[1,"scrollbarH"],loadingIndicator:[2,"loadingIndicator"],externalPaging:[3,"externalPaging"],rowHeight:[4,"rowHeight"],offsetX:[5,"offsetX"],emptyMessage:[6,"emptyMessage"],selectionType:[7,"selectionType"],selected:[8,"selected"],rowIdentity:[9,"rowIdentity"],rowDetail:[10,"rowDetail"],groupHeader:[11,"groupHeader"],selectCheck:[12,"selectCheck"],displayCheck:[13,"displayCheck"],trackByProp:[14,"trackByProp"],rowClass:[15,"rowClass"],groupedRows:[16,"groupedRows"],groupExpansionDefault:[17,"groupExpansionDefault"],innerWidth:[18,"innerWidth"],groupRowsBy:[19,"groupRowsBy"],virtualization:[20,"virtualization"],summaryRow:[21,"summaryRow"],summaryPosition:[22,"summaryPosition"],summaryHeight:[23,"summaryHeight"],pageSize:[24,"pageSize"],rows:[25,"rows"],columns:[26,"columns"],offset:[27,"offset"],rowCount:[28,"rowCount"],bodyHeight:[29,"bodyHeight"]},{scroll:"scroll",page:"page",activate:"activate",select:"select",rowContextmenu:"rowContextmenu",treeAction:"treeAction"}),a["ɵpid"](131072,o.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](10,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0),t(e,5,0,n.headerHeight),t(e,7,1,[n.scrollbarV,n.scrollbarH,n.loadingIndicator,n.externalPaging,n.rowHeight,a["ɵunv"](e,7,5,a["ɵnov"](e,8).transform(n._offsetX)),n.messages.emptyMessage,n.selectionType,n.selected,n.rowIdentity,n.rowDetail,n.groupHeader,n.selectCheck,n.displayCheck,n.trackByProp,n.rowClass,n.groupedRows,n.groupExpansionDefault,n._innerWidth,n.groupRowsBy,n.virtualization,n.summaryRow,n.summaryPosition,n.summaryHeight,n.pageSize,n._internalRows,n._internalColumns,n.offset,n.rowCount,n.bodyHeight]),t(e,10,0,n.footerHeight)}),(function(t,e){t(e,2,0,a["ɵnov"](e,3).isVisible),t(e,6,0,a["ɵnov"](e,7).bodyWidth,a["ɵnov"](e,7).bodyHeight)}))}var m=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"datatable-header-cell",[["class","datatable-header-cell"],["draggable",""],["long-press",""],["resizeable",""]],[[2,"resizeable",null],[2,"press",null],[2,"longpress",null],[4,"height","px"],[8,"className",0],[1,"title",0],[4,"minWidth","px"],[4,"maxWidth","px"],[4,"width","px"]],[[null,"resize"],[null,"longPressStart"],[null,"longPressEnd"],[null,"sort"],[null,"select"],[null,"columnContextmenu"],[null,"mousedown"],[null,"contextmenu"]],(function(t,e,n){var r=!0,i=t.component;return"mousedown"===e&&(r=!1!==a["ɵnov"](t,2).onMousedown(n)&&r),"mousedown"===e&&(r=!1!==a["ɵnov"](t,3).onMouseDown(n)&&r),"contextmenu"===e&&(r=!1!==a["ɵnov"](t,4).onContextmenu(n)&&r),"resize"===e&&(r=!1!==i.onColumnResized(n,t.context.$implicit)&&r),"longPressStart"===e&&(r=!1!==i.onLongPressStart(n)&&r),"longPressEnd"===e&&(r=!1!==i.onLongPressEnd(n)&&r),"sort"===e&&(r=!1!==i.onSort(n)&&r),"select"===e&&(r=!1!==i.select.emit(n)&&r),"columnContextmenu"===e&&(r=!1!==i.columnContextmenu.emit(n)&&r),r}),C,_)),a["ɵdid"](1,671744,[[1,4]],0,f.s,[a.ElementRef],{dragEventTarget:[0,"dragEventTarget"],dragModel:[1,"dragModel"],dragX:[2,"dragX"],dragY:[3,"dragY"]},null),a["ɵdid"](2,4341760,null,0,f.x,[a.ElementRef,a.Renderer2],{resizeEnabled:[0,"resizeEnabled"]},{resize:"resize"}),a["ɵdid"](3,147456,null,0,f.t,[],{pressEnabled:[0,"pressEnabled"],pressModel:[1,"pressModel"]},{longPressStart:"longPressStart",longPressEnd:"longPressEnd"}),a["ɵdid"](4,49152,null,0,f.h,[a.ChangeDetectorRef],{sortType:[0,"sortType"],sortAscendingIcon:[1,"sortAscendingIcon"],sortDescendingIcon:[2,"sortDescendingIcon"],isTarget:[3,"isTarget"],targetMarkerTemplate:[4,"targetMarkerTemplate"],targetMarkerContext:[5,"targetMarkerContext"],allRowsSelected:[6,"allRowsSelected"],selectionType:[7,"selectionType"],column:[8,"column"],headerHeight:[9,"headerHeight"],sorts:[10,"sorts"]},{sort:"sort",select:"select",columnContextmenu:"columnContextmenu"})],(function(t,e){var n=e.component;t(e,1,0,n.dragEventTarget,e.context.$implicit,n.reorderable&&e.context.$implicit.draggable&&e.context.$implicit.dragging,!1),t(e,2,0,e.context.$implicit.resizeable),t(e,3,0,n.reorderable&&e.context.$implicit.draggable,e.context.$implicit),t(e,4,1,[n.sortType,n.sortAscendingIcon,n.sortDescendingIcon,e.context.$implicit.isTarget,n.targetMarkerTemplate,e.context.$implicit.targetMarkerContext,n.allRowsSelected,n.selectionType,e.context.$implicit,n.headerHeight,n.sorts])}),(function(t,e){t(e,0,0,a["ɵnov"](e,2).resizeEnabled,a["ɵnov"](e,3).press,a["ɵnov"](e,3).isLongPress,a["ɵnov"](e,4).headerHeight,a["ɵnov"](e,4).columnCssClasses,a["ɵnov"](e,4).name,a["ɵnov"](e,4).minWidth,a["ɵnov"](e,4).maxWidth,a["ɵnov"](e,4).width)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[8,"className",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,2,0,n._styleByGroup[e.context.$implicit.type]),t(e,4,0,e.context.$implicit.columns,n.columnTrackingFn)}),(function(t,e){t(e,0,0,"datatable-row-"+e.context.$implicit.type)}))}function x(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","datatable-header-inner"],["orderable",""]],[[4,"width","px"]],[[null,"reorder"],[null,"targetChanged"]],(function(t,e,n){var a=!0,r=t.component;return"reorder"===e&&(a=!1!==r.onColumnReordered(n)&&a),"targetChanged"===e&&(a=!1!==r.onTargetChanged(n)&&a),a}),null,null)),a["ɵdid"](1,1196032,null,1,f.v,[a.KeyValueDiffers,o.DOCUMENT],null,{reorder:"reorder",targetChanged:"targetChanged"}),a["ɵqud"](603979776,1,{draggables:1}),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,4,0,n._columnsByPin,n.trackByGroups)}),(function(t,e){t(e,0,0,e.component._columnGroupWidths.total)}))}var _=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function T(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.targetMarkerContext,n.targetMarkerTemplate)}),null)}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"label",[["class","datatable-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],[[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==r.select.emit(!r.allRowsSelected)&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.allRowsSelected)}))}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","datatable-header-cell-wrapper"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"span",[["class","datatable-header-cell-label draggable"]],[[8,"innerHTML",1]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onSort()&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.name)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function N(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.cellContext,n.column.headerTemplate)}),null)}function C(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","datatable-header-cell-template-wrap"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,O)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,S)),a["ɵdid"](6,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,N)),a["ɵdid"](8,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](9,0,null,null,0,"span",[],[[8,"className",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onSort()&&a),a}),null,null))],(function(t,e){var n=e.component;t(e,2,0,n.isTarget),t(e,4,0,n.isCheckboxable),t(e,6,0,!n.column.headerTemplate),t(e,8,0,n.column.headerTemplate)}),(function(t,e){t(e,9,0,e.component.sortClass)}))}var R=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-progress",[],null,null,null,rt,at)),a["ɵdid"](1,49152,null,0,f.w,[],null,null)],null,null)}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-summary-row",[["class","datatable-summary-row"]],null,null,null,xt,yt)),a["ɵdid"](1,573440,null,0,f.m,[],{rows:[0,"rows"],columns:[1,"columns"],rowHeight:[2,"rowHeight"],offsetX:[3,"offsetX"],innerWidth:[4,"innerWidth"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.rows,n.columns,n.summaryHeight,n.offsetX,n.innerWidth)}),null)}function E(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"treeAction"],[null,"activate"],[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0,i=t.component;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),"treeAction"===e&&(r=!1!==i.onTreeAction(t.parent.context.$implicit)&&r),"activate"===e&&(r=!1!==a["ɵnov"](t.parent.parent.parent,2).onActivate(n,i.indexes.first+t.parent.context.index)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],expanded:[2,"expanded"],rowClass:[3,"rowClass"],row:[4,"row"],isSelected:[5,"isSelected"],rowIndex:[6,"rowIndex"],displayCheck:[7,"displayCheck"],treeStatus:[8,"treeStatus"],offsetX:[9,"offsetX"],rowHeight:[10,"rowHeight"]},{activate:"activate",treeAction:"treeAction"})],(function(t,e){var n=e.component;t(e,1,1,[n.columns,n.innerWidth,n.getRowExpanded(e.parent.context.$implicit),n.rowClass,e.parent.context.$implicit,a["ɵnov"](e.parent.parent.parent,2).getRowSelected(e.parent.context.$implicit),n.getRowIndex(e.parent.context.$implicit),n.displayCheck,e.parent.context.$implicit.treeStatus,n.offsetX,n.getRowHeight(e.parent.context.$implicit)])}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function L(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"activate"],[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),"activate"===e&&(r=!1!==a["ɵnov"](t.parent.parent.parent.parent,2).onActivate(n,t.context.index)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],expanded:[2,"expanded"],rowClass:[3,"rowClass"],row:[4,"row"],group:[5,"group"],isSelected:[6,"isSelected"],rowIndex:[7,"rowIndex"],offsetX:[8,"offsetX"],rowHeight:[9,"rowHeight"]},{activate:"activate"})],(function(t,e){var n=e.component;t(e,1,0,n.columns,n.innerWidth,n.getRowExpanded(e.context.$implicit),n.rowClass,e.context.$implicit,e.parent.parent.context.$implicit.value,a["ɵnov"](e.parent.parent.parent.parent,2).getRowSelected(e.context.$implicit),n.getRowIndex(e.context.$implicit),n.offsetX,n.getRowHeight(e.context.$implicit))}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function D(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,L)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.parent.context.$implicit.value,e.component.rowTrackingFn)}),null)}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"datatable-row-wrapper",[["class","datatable-row-wrapper"]],null,[[null,"rowContextmenu"],[null,"contextmenu"]],(function(t,e,n){var r=!0,i=t.component;return"contextmenu"===e&&(r=!1!==a["ɵnov"](t,3).onContextmenu(n)&&r),"rowContextmenu"===e&&(r=!1!==i.rowContextmenu.emit(n)&&r),r}),pt,ot)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),a["ɵdid"](3,311296,null,0,f.k,[a.ChangeDetectorRef,a.KeyValueDiffers],{innerWidth:[0,"innerWidth"],rowDetail:[1,"rowDetail"],groupHeader:[2,"groupHeader"],offsetX:[3,"offsetX"],detailRowHeight:[4,"detailRowHeight"],row:[5,"row"],groupedRows:[6,"groupedRows"],rowIndex:[7,"rowIndex"],expanded:[8,"expanded"]},{rowContextmenu:"rowContextmenu"}),(t()(),a["ɵand"](16777216,null,0,1,null,E)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["groupedRowsTemplate",2]],0,0,null,D))],(function(t,e){var n=e.component;t(e,2,0,n.getRowsStyles(e.context.$implicit)),t(e,3,0,n.innerWidth,n.rowDetail,n.groupHeader,n.offsetX,n.getDetailRowHeight(e.context.$implicit[e.context.index],e.context.index),e.context.$implicit,n.groupedRows,n.getRowIndex(e.context.$implicit[e.context.index]),n.getRowExpanded(e.context.$implicit)),t(e,5,0,!n.groupedRows,a["ɵnov"](e,6))}),null)}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"datatable-summary-row",[["class","datatable-summary-row"]],null,null,null,xt,yt)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),a["ɵdid"](3,573440,null,0,f.m,[],{rows:[0,"rows"],columns:[1,"columns"],rowHeight:[2,"rowHeight"],offsetX:[3,"offsetX"],innerWidth:[4,"innerWidth"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.getBottomSummaryRowStyles()),t(e,3,0,n.rows,n.columns,n.summaryHeight,n.offsetX,n.innerWidth)}),null)}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"datatable-scroller",[["class","datatable-scroll"]],[[4,"height","px"],[4,"width","px"]],[[null,"scroll"]],(function(t,e,n){var a=!0;return"scroll"===e&&(a=!1!==t.component.onBodyScroll(n)&&a),a}),st,it)),a["ɵdid"](1,245760,[[1,4]],0,f.z,[a.NgZone,a.ElementRef,a.Renderer2],{scrollbarV:[0,"scrollbarV"],scrollbarH:[1,"scrollbarH"],scrollHeight:[2,"scrollHeight"],scrollWidth:[3,"scrollWidth"]},{scroll:"scroll"}),(t()(),a["ɵand"](16777216,null,0,1,null,k)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,P)),a["ɵdid"](5,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,M)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.scrollbarV,n.scrollbarH,n.scrollHeight,null==n.columnGroupWidths?null:n.columnGroupWidths.total),t(e,3,0,n.summaryRow&&"top"===n.summaryPosition),t(e,5,0,n.temp,n.rowTrackingFn),t(e,7,0,n.summaryRow&&"bottom"===n.summaryPosition)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).scrollHeight,a["ɵnov"](e,1).scrollWidth)}))}function j(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","empty-row"]],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,0,0,e.component.emptyMessage)}))}function F(t){return a["ɵvid"](2,[a["ɵqud"](671088640,1,{scroller:0}),(t()(),a["ɵeld"](1,0,null,null,7,"datatable-selection",[],null,[[null,"select"],[null,"activate"]],(function(t,e,n){var a=!0,r=t.component;return"select"===e&&(a=!1!==r.select.emit(n)&&a),"activate"===e&&(a=!1!==r.activate.emit(n)&&a),a}),mt,bt)),a["ɵdid"](2,49152,[["selector",4]],0,f.l,[],{rows:[0,"rows"],selected:[1,"selected"],selectEnabled:[2,"selectEnabled"],selectionType:[3,"selectionType"],rowIdentity:[4,"rowIdentity"],selectCheck:[5,"selectCheck"]},{activate:"activate",select:"select"}),(t()(),a["ɵand"](16777216,null,0,1,null,A)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,q)),a["ɵdid"](6,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,j)),a["ɵdid"](8,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.rows,n.selected,n.selectEnabled,n.selectionType,n.rowIdentity,n.selectCheck),t(e,4,0,n.loadingIndicator),t(e,6,0,null==n.rows?null:n.rows.length),t(e,8,0,!(null!=n.rows&&n.rows.length||n.loadingIndicator))}),null)}var G=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"label",[["class","datatable-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onCheckboxChange(n)&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.isSelected)}))}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-collapse"]],null,null,null,null,null))],null,null)}function B(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-up"]],null,null,null,null,null))],null,null)}function Y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-down"]],null,null,null,null,null))],null,null)}function H(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"button",[["class","datatable-tree-button"]],[[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onTreeAction()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,z)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,B)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Y)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"loading"===n.treeStatus),t(e,5,0,"collapsed"===n.treeStatus),t(e,7,0,"expanded"===n.treeStatus||"disabled"===n.treeStatus)}),(function(t,e){t(e,0,0,"disabled"===e.component.treeStatus)}))}function U(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function W(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,U)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](2,{cellContext:0}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,2,0,n.cellContext);t(e,1,0,a,n.column.treeToggleTemplate)}),null)}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,H)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,W)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,!n.column.treeToggleTemplate),t(e,4,0,n.column.treeToggleTemplate)}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[],[[8,"title",0],[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.sanitizedValue,n.value)}))}function J(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function Z(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,[[1,3],["cellTemplate",2]],null,1,null,J)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.cellContext,n.column.cellTemplate)}),null)}function Q(t){return a["ɵvid"](2,[a["ɵqud"](402653184,1,{cellTemplate:0}),(t()(),a["ɵeld"](1,0,null,null,8,"div",[["class","datatable-body-cell-label"]],[[4,"margin-left","px"]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,K)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,$)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Z)),a["ɵdid"](9,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.column.checkboxable&&(!n.displayCheck||n.displayCheck(n.row,n.column,n.value))),t(e,5,0,n.column.isTreeColumn),t(e,7,0,!n.column.cellTemplate),t(e,9,0,n.column.cellTemplate)}),(function(t,e){var n=e.component;t(e,1,0,n.calcLeftMargin(n.column,n.row))}))}var X=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-cell",[["tabindex","-1"]],[[8,"className",0],[4,"width","px"],[4,"minWidth","px"],[4,"maxWidth","px"],[4,"height",null]],[[null,"activate"],[null,"treeAction"],[null,"focus"],[null,"blur"],[null,"click"],[null,"dblclick"],[null,"keydown"]],(function(t,e,n){var r=!0,i=t.component;return"focus"===e&&(r=!1!==a["ɵnov"](t,1).onFocus()&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onBlur()&&r),"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick(n)&&r),"dblclick"===e&&(r=!1!==a["ɵnov"](t,1).onDblClick(n)&&r),"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"activate"===e&&(r=!1!==i.onActivate(n,t.context.index)&&r),"treeAction"===e&&(r=!1!==i.onTreeAction()&&r),r}),Q,G)),a["ɵdid"](1,442368,null,0,f.b,[a.ElementRef,a.ChangeDetectorRef],{displayCheck:[0,"displayCheck"],group:[1,"group"],rowHeight:[2,"rowHeight"],isSelected:[3,"isSelected"],expanded:[4,"expanded"],rowIndex:[5,"rowIndex"],column:[6,"column"],row:[7,"row"],treeStatus:[8,"treeStatus"]},{activate:"activate",treeAction:"treeAction"})],(function(t,e){var n=e.component;t(e,1,0,n.displayCheck,n.group,n.rowHeight,n.isSelected,n.expanded,n.rowIndex,e.context.$implicit,n.row,n.treeStatus)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).columnCssClasses,a["ɵnov"](e,1).width,a["ɵnov"](e,1).minWidth,a["ɵnov"](e,1).maxWidth,a["ɵnov"](e,1).height)}))}function et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[8,"className",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,tt)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,2,0,n._groupStyles[e.context.$implicit.type]),t(e,4,0,e.context.$implicit.columns,n.columnTrackingFn)}),(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"datatable-row-",e.context.$implicit.type," datatable-row-group"))}))}function nt(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,et)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,1,0,n._columnsByPin,n.trackByGroups)}),null)}var at=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function rt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","progress-linear"],["role","progressbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","container"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,0,"div",[["class","bar"]],null,null,null,null,null))],null,null)}var it=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function st(t){return a["ɵvid"](2,[a["ɵncd"](null,0)],null,null)}var ot=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ut(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function lt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,ut)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.groupContext,n.groupHeader.template)}),null)}function dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","datatable-group-header"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,lt)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.getGroupHeaderStyle()),t(e,4,0,n.groupHeader&&n.groupHeader.template)}),null)}function ct(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,null)}function ft(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function ht(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,ft)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.rowContext,n.rowDetail.template)}),null)}function gt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","datatable-row-detail"]],[[4,"height","px"]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ht)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.rowDetail&&n.rowDetail.template)}),(function(t,e){t(e,0,0,e.component.detailRowHeight)}))}function pt(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,dt)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ct)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,gt)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.groupHeader&&n.groupHeader.template),t(e,3,0,n.groupHeader&&n.groupHeader.template&&n.expanded||!n.groupHeader||!n.groupHeader.template),t(e,5,0,n.rowDetail&&n.rowDetail.template&&n.expanded)}),null)}var bt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function mt(t){return a["ɵvid"](2,[a["ɵncd"](null,0)],null,null)}var yt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function vt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],row:[2,"row"],rowIndex:[3,"rowIndex"],offsetX:[4,"offsetX"],rowHeight:[5,"rowHeight"]},null)],(function(t,e){var n=e.component;t(e,1,0,n._internalColumns,n.innerWidth,n.summaryRow,-1,n.offsetX,n.rowHeight)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function xt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,vt)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.summaryRow&&n._internalColumns)}),null)}var _t=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Tt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function Ot(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,Tt)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](2,{rowCount:0,pageSize:1,selectedCount:2,curPage:3,offset:4}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,2,0,n.rowCount,n.pageSize,n.selectedCount,n.curPage,n.offset);t(e,1,0,a,n.footerTemplate.template)}),null)}function wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "," / "]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.selectedCount?null:n.selectedCount.toLocaleString(),n.selectedMessage)}))}function St(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","page-count"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,wt)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](3,null,[" "," "," "]))],(function(t,e){t(e,2,0,e.component.selectedMessage)}),(function(t,e){var n=e.component;t(e,3,0,null==n.rowCount?null:n.rowCount.toLocaleString(),n.totalMessage)}))}function It(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-pager",[["class","datatable-pager"]],[[8,"hidden",0]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==t.component.page.emit(n)&&a),a}),At,Ct)),a["ɵdid"](1,49152,null,0,f.j,[],{pagerLeftArrowIcon:[0,"pagerLeftArrowIcon"],pagerRightArrowIcon:[1,"pagerRightArrowIcon"],pagerPreviousIcon:[2,"pagerPreviousIcon"],pagerNextIcon:[3,"pagerNextIcon"],size:[4,"size"],count:[5,"count"],page:[6,"page"]},{change:"change"})],(function(t,e){var n=e.component;t(e,1,0,n.pagerLeftArrowIcon,n.pagerRightArrowIcon,n.pagerPreviousIcon,n.pagerNextIcon,n.pageSize,n.rowCount,n.curPage)}),(function(t,e){t(e,0,0,!e.component.isVisible)}))}function Nt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","datatable-footer-inner"]],[[4,"height","px"]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{"selected-count":0}),(t()(),a["ɵand"](16777216,null,null,1,null,Ot)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,St)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,It)),a["ɵdid"](9,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=t(e,3,0,n.selectedMessage);t(e,2,0,"datatable-footer-inner",a),t(e,5,0,n.footerTemplate),t(e,7,0,!n.footerTemplate),t(e,9,0,!n.footerTemplate)}),(function(t,e){t(e,0,0,e.component.footerHeight)}))}var Ct=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[["class","pages"],["role","button"]],[[1,"aria-label",0],[2,"active",null]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"a",[["href","javascript:void(0)"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectPage(t.context.$implicit.number)&&a),a}),null,null)),(t()(),a["ɵted"](2,null,[" "," "]))],null,(function(t,e){t(e,0,0,"page "+e.context.$implicit.number,e.context.$implicit.number===e.component.page),t(e,2,0,e.context.$implicit.text)}))}function At(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,14,"ul",[["class","pager"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"a",[["aria-label","go to first page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectPage(1)&&a),a}),null,null)),(t()(),a["ɵeld"](3,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](4,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,1,"a",[["aria-label","go to previous page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.prevPage()&&a),a}),null,null)),(t()(),a["ɵeld"](6,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Rt)),a["ɵdid"](8,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](9,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](10,0,null,null,1,"a",[["aria-label","go to next page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.nextPage()&&a),a}),null,null)),(t()(),a["ɵeld"](11,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](12,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](13,0,null,null,1,"a",[["aria-label","go to last page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectPage(r.totalPages)&&a),a}),null,null)),(t()(),a["ɵeld"](14,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null))],(function(t,e){t(e,8,0,e.component.pages)}),(function(t,e){var n=e.component;t(e,1,0,!n.canPrevious()),t(e,3,0,a["ɵinlineInterpolate"](1,"",n.pagerPreviousIcon,"")),t(e,4,0,!n.canPrevious()),t(e,6,0,a["ɵinlineInterpolate"](1,"",n.pagerLeftArrowIcon,"")),t(e,9,0,!n.canNext()),t(e,11,0,a["ɵinlineInterpolate"](1,"",n.pagerRightArrowIcon,"")),t(e,12,0,!n.canNext()),t(e,14,0,a["ɵinlineInterpolate"](1,"",n.pagerNextIcon,""))}))}var kt=n("JxMD"),Et=n("dgut"),Lt=n("Fgil"),Dt=n("iInd"),Pt=n("4DD9"),Mt=n("yT6U"),qt=n("TJUb"),jt=n("efK2");n("uIqm"),n.d(e,"a",(function(){return Ft})),n.d(e,"b",(function(){return we}));var Ft=a["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";.dataTables_wrapper[_ngcontent-%COMP%]{margin-bottom:25px}.dataTables_wrapper[_ngcontent-%COMP%]   .separator[_ngcontent-%COMP%]{height:30px;border-left:1px solid rgba(0,0,0,.09);padding-left:5px;margin-left:5px;display:inline-block;vertical-align:middle}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]{float:right;border-left:1px solid rgba(0,0,0,.09);padding:0 8px}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-left:0}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]{white-space:nowrap}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]{cursor:default}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{width:100%;margin-bottom:0;padding-left:0;padding-right:0;cursor:pointer}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]   input[_ngcontent-%COMP%]{cursor:pointer}.dataTables_wrapper[_ngcontent-%COMP%]   .dataTables_length[_ngcontent-%COMP%] > input[_ngcontent-%COMP%]{line-height:25px;text-align:right}.dataTables_header[_ngcontent-%COMP%]{background-color:#f5f5f5;border:1px solid #d1d1d1;border-bottom:none;padding:5px;position:relative}.dataTables_header[_ngcontent-%COMP%]   .cd-datatable-actions[_ngcontent-%COMP%]{float:left}.dataTables_header[_ngcontent-%COMP%]     .table-filters{float:right;border-left:1px solid rgba(0,0,0,.09);padding-left:8px}.dataTables_header[_ngcontent-%COMP%]     .table-filters label{margin-right:4px}.dataTables_header[_ngcontent-%COMP%]   .form-group[_ngcontent-%COMP%]{padding-left:8px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]{float:right;border-left:1px solid rgba(0,0,0,.09);padding-left:8px;padding-right:8px;width:40%;max-width:250px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]   .form-control[_ngcontent-%COMP%]{height:30px}.dataTables_header[_ngcontent-%COMP%]   .input-group.dataTables_paginate[_ngcontent-%COMP%]{width:8%;min-width:85px;padding-right:8px}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]{float:right;padding:0 8px}  .cd-datatable{border:1px solid #d1d1d1;margin-bottom:0;max-width:none!important}  .cd-datatable .progress-linear{display:block;position:relative;width:100%;height:5px;padding:0;margin:0}  .cd-datatable .progress-linear .container{background-color:#afd9ee}  .cd-datatable .progress-linear .container .bar{left:0;height:100%;width:100%;position:absolute;overflow:hidden;background-color:#afd9ee}  .cd-datatable .progress-linear .container .bar:before{display:block;position:absolute;content:"";left:-200px;width:200px;height:100%;background-color:#2b99a8;animation:3s linear infinite progress-loading}  .cd-datatable .datatable-header{background-clip:padding-box;background-color:#f5f5f5;background-image:linear-gradient(to bottom,#f5f5f5 0,#ededed 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffafafa", endColorstr="#ffededed", GradientType=0)}  .cd-datatable .datatable-header .sort-asc,   .cd-datatable .datatable-header .sort-desc{color:#2b99a8}  .cd-datatable .datatable-header .datatable-header-cell{padding:5px;border:none;border-left:1px solid #d1d1d1;border-bottom:1px solid #d1d1d1;text-align:left;font-weight:700}  .cd-datatable .datatable-header .datatable-header-cell .datatable-header-cell-label:after{font-family:ForkAwesome;font-weight:400;height:9px;left:10px;line-height:12px;position:relative;vertical-align:baseline;width:12px}  .cd-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-asc .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-desc .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell:first-child{border-left:none}  .cd-datatable .datatable-body{margin-bottom:-6px}  .cd-datatable .datatable-body .empty-row{background-color:#fff3cd;text-align:center;font-weight:700;font-style:italic;padding-top:5px;padding-bottom:5px}  .cd-datatable .datatable-body .datatable-body-row.clickable:hover .datatable-row-group{background-color:#eee;transition-property:background;transition-duration:.3s;transition-timing-function:linear}  .cd-datatable .datatable-body .datatable-body-row.datatable-row-even{background-color:#fff}  .cd-datatable .datatable-body .datatable-body-row.datatable-row-odd{background-color:#f5f5f5}  .cd-datatable .datatable-body .datatable-body-row.active,   .cd-datatable .datatable-body .datatable-body-row.active:hover{background-color:#d1ecf1}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell{padding:5px;border:none;border-left:1px solid #d1d1d1;border-bottom:1px solid #d1d1d1}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell:first-child{border-left:none}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell .datatable-body-cell-label{display:block;height:100%}  .cd-datatable .datatable-body .datatable-row-detail{padding:20px;border-bottom:2px solid #d1d1d1;overflow-y:visible!important}  .cd-datatable .datatable-body .expand-collapse-icon{display:block;height:100%;text-align:center}  .cd-datatable .datatable-body .expand-collapse-icon:hover{text-decoration:none}  .cd-datatable .datatable-body .expand-collapse-icon-right:before{font-family:ForkAwesome,sans-serif;font-size:1rem;color:#212529;line-height:1;content:""}  .cd-datatable .datatable-body .expand-collapse-icon-down:before{font-family:ForkAwesome,sans-serif;font-size:1rem;color:#212529;line-height:1;content:""}  .cd-datatable .datatable-footer{display:unset!important}  .cd-datatable .datatable-footer .page-count,   .cd-datatable .datatable-footer .selected-count{font-style:italic;padding-left:5px}  .cd-datatable .cd-datatable-checkbox{text-align:center}@keyframes progress-loading{from{left:-200px;width:15%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}']],data:{}});function Gt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Failed to load data."]))],(function(t,e){t(e,1,0,"error")}),null)}function Vt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","cd-datatable-actions"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,null)}function zt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"a",[["class","dropdown-item"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onSelectFilter(t.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.column.name)}))}function Bt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu dropdown-menu-right px-1"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,zt)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.columnFilters)}),null)}function Yt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),null)}function Ht(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"a",[["class","dropdown-item"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(r.onChangeFilter(r.selectedFilter,t.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵted"](2,null,[""," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Yt)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,4,0,void 0!==n.selectedFilter.value&&n.selectedFilter.value.raw===e.context.$implicit.raw)}),(function(t,e){t(e,2,0,e.context.$implicit.formatted)}))}function Ut(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu dropdown-menu-right px-1"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ht)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.selectedFilter.options)}),null)}function Wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,20,"div",[["class","btn-group widget-toolbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,16777216,null,null,11,"div",[["class","btn-group tc_filter_name"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](3,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],null,null),(t()(),a["ɵeld"](4,0,null,null,6,"a",[["class","btn btn-light dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,5).onClick()&&r),r}),null,null)),a["ɵdid"](5,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](8,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](9,2),(t()(),a["ɵted"](10,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Bt)),a["ɵdid"](12,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null),(t()(),a["ɵeld"](13,16777216,null,null,7,"div",[["class","btn-group tc_filter_option"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](15,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],null,null),(t()(),a["ɵeld"](16,0,null,null,2,"a",[["class","btn btn-light dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""]],[[2,"disabled",null],[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,17).onClick()&&r),r}),null,null)),a["ɵdid"](17,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵted"](18,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Ut)),a["ɵdid"](20,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,3,0);var a=t(e,9,0,n.icons.large,n.icons.filter);t(e,8,0,a),t(e,15,0)}),(function(t,e){var n=e.component;t(e,1,0,a["ɵnov"](e,3).dropup,a["ɵnov"](e,3).isOpen,a["ɵnov"](e,3).isOpen&&a["ɵnov"](e,3).isBs4),t(e,4,0,!0,a["ɵnov"](e,5).isDisabled,a["ɵnov"](e,5).isOpen),t(e,10,0,n.selectedFilter.column.name),t(e,13,0,a["ɵnov"](e,15).dropup,a["ɵnov"](e,15).isOpen,a["ɵnov"](e,15).isOpen&&a["ɵnov"](e,15).isBs4),t(e,16,0,0===n.selectedFilter.options.length,!0,a["ɵnov"](e,17).isDisabled,a["ɵnov"](e,17).isOpen),t(e,18,0,n.selectedFilter.value?n.selectedFilter.value.formatted:"Any")}))}function Kt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,15,"div",[["class","input-group search"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"span",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,4,"span",[["class","input-group-text"]],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,1),(t()(),a["ɵeld"](7,0,null,null,5,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0,i=t.component;return"input"===e&&(r=!1!==a["ɵnov"](t,8)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,8).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,8)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,8)._compositionEnd(n.target.value)&&r),"ngModelChange"===e&&(r=!1!==(i.search=n)&&r),"keyup"===e&&(r=!1!==i.updateFilter()&&r),r}),null,null)),a["ɵdid"](8,16384,null,0,c.e,[a.Renderer2,a.ElementRef,[2,c.b]],null,null),a["ɵprd"](1024,null,c.p,(function(t){return[t]}),[c.e]),a["ɵdid"](10,671744,null,0,c.u,[[8,null],[8,null],[8,null],[6,c.p]],{model:[0,"model"]},{update:"ngModelChange"}),a["ɵprd"](2048,null,c.q,null,[c.u]),a["ɵdid"](12,16384,null,0,c.r,[[4,c.q]],null,null),(t()(),a["ɵeld"](13,0,null,null,2,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),a["ɵeld"](14,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onClearSearch()&&a),a}),null,null)),(t()(),a["ɵeld"](15,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null))],(function(t,e){var n=e.component,a=t(e,6,0,n.icons.search);t(e,5,0,a),t(e,10,0,n.search)}),(function(t,e){var n=e.component;t(e,7,0,a["ɵnov"](e,12).ngClassUntouched,a["ɵnov"](e,12).ngClassTouched,a["ɵnov"](e,12).ngClassPristine,a["ɵnov"](e,12).ngClassDirty,a["ɵnov"](e,12).ngClassValid,a["ɵnov"](e,12).ngClassInvalid,a["ɵnov"](e,12).ngClassPending),t(e,15,0,a["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,""))}))}function $t(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"div",[["class","input-group dataTables_paginate"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["class","form-control"],["max","9999"],["min","1"],["type","number"]],[[8,"value",0]],[[null,"click"],[null,"keyup"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.setLimit(n)&&a),"keyup"===e&&(a=!1!==r.setLimit(n)&&a),"blur"===e&&(a=!1!==r.setLimit(n)&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.userConfig.limit)}))}function Jt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"li",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,0,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"name",0],[8,"id",0],[8,"checked",0]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==t.component.toggleColumn(n)&&a),a}),null,null)),(t()(),a["ɵeld"](3,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),a["ɵted"](4,null,["",""]))],null,(function(t,e){t(e,2,0,e.parent.context.$implicit.prop,e.parent.context.$implicit.prop,!e.parent.context.$implicit.isHidden),t(e,3,0,e.parent.context.$implicit.prop),t(e,4,0,e.parent.context.$implicit.name)}))}function Zt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Jt)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0,""!==e.context.$implicit.name)}),null)}function Qt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu px-3"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Zt)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.columns)}),null)}function Xt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["class","widget-toolbar tc_refreshBtn"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.refreshBtn()&&a),a}),null,null)),(t()(),a["ɵeld"](2,0,null,null,3,"i",[],[[2,"fa-spin",null]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](5,2)],(function(t,e){var n=e.component,a=t(e,5,0,n.icons.large,n.icons.refresh);t(e,4,0,a)}),(function(t,e){var n=e.component;t(e,2,0,n.updating||n.loadingIndicator)}))}function te(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,23,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","cd-datatable-actions"]],null,null,null,null,null)),a["ɵncd"](null,1),a["ɵncd"](null,2),(t()(),a["ɵand"](16777216,null,null,1,null,Wt)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Kt)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,$t)),a["ɵdid"](9,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](10,0,null,null,11,"div",[["class","widget-toolbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](11,16777216,null,null,10,"div",[["class","dropdown tc_menuitem tc_menuitem_cluster"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](13,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],{insideClick:[0,"insideClick"]},null),(t()(),a["ɵeld"](14,0,null,null,5,"a",[["class","btn btn-light dropdown-toggle tc_columnBtn"],["data-toggle","dropdown"],["dropdownToggle",""]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,15).onClick()&&r),r}),null,null)),a["ɵdid"](15,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](18,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](19,2),(t()(),a["ɵand"](16777216,null,null,1,null,Qt)),a["ɵdid"](21,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,Xt)),a["ɵdid"](23,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,0!==n.columnFilters.length),t(e,7,0,n.searchField),t(e,9,0,n.limit),t(e,13,0,!0);var a=t(e,19,0,n.icons.large,n.icons.table);t(e,18,0,a),t(e,23,0,n.fetchData.observers.length>0)}),(function(t,e){t(e,11,0,a["ɵnov"](e,13).dropup,a["ɵnov"](e,13).isOpen,a["ɵnov"](e,13).isOpen&&a["ɵnov"](e,13).isBs4),t(e,14,0,!0,a["ɵnov"](e,15).isDisabled,a["ɵnov"](e,15).isOpen)}))}function ee(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"span",[["class","badge badge-info mr-2"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[["class","mr-2"]],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",": ",""])),(t()(),a["ɵeld"](3,0,null,null,4,"a",[["class","badge-remove"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onChangeFilter(t.parent.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](6,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](7,1)],(function(t,e){var n=t(e,7,0,e.component.icons.destroy);t(e,6,0,n)}),(function(t,e){t(e,2,0,e.parent.context.$implicit.column.name,e.parent.context.$implicit.value.formatted)}))}function ne(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ee)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit.value)}),null)}function ae(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","filter-chips"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ne)),a["ɵdid"](3,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](4,0,null,null,2,"a",[["class","tc_clearSelections"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onClearFilters(),a=!1),a}),null,null)),(t()(),a["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Clear filters"]))],(function(t,e){t(e,3,0,e.component.columnFilters)}),null)}function re(t){return a["ɵvid"](0,[a["ɵncd"](null,3),(t()(),a["ɵand"](0,null,null,0))],null,null)}function ie(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "])),(t()(),a["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["selected"])),(t()(),a["ɵted"](-1,null,[" / "]))],null,(function(t,e){t(e,1,0,e.parent.context.selectedCount)}))}function se(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "])),(t()(),a["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["found"])),(t()(),a["ɵted"](-1,null,[" / "]))],null,(function(t,e){t(e,1,0,e.parent.context.rowCount)}))}function oe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[["class","page-count"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ie)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,se)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](5,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](6,null,[" "," "])),(t()(),a["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["total"])),(t()(),a["ɵeld"](9,0,null,null,1,"datatable-pager",[["class","datatable-pager"]],[[8,"hidden",0]],[[null,"change"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t.parent,26).onFooterPage(n)&&r),r}),At,Ct)),a["ɵdid"](10,49152,null,0,f.j,[],{pagerLeftArrowIcon:[0,"pagerLeftArrowIcon"],pagerRightArrowIcon:[1,"pagerRightArrowIcon"],pagerPreviousIcon:[2,"pagerPreviousIcon"],pagerNextIcon:[3,"pagerNextIcon"],size:[4,"size"],count:[5,"count"],page:[6,"page"]},{change:"change"})],(function(t,e){var n=e.component;t(e,2,0,n.selectionType),t(e,4,0,e.context.rowCount!=(null==n.data?null:n.data.length)),t(e,10,0,n.paginationClasses.pagerLeftArrow,n.paginationClasses.pagerRightArrow,n.paginationClasses.pagerPrevious,n.paginationClasses.pagerNext,e.context.pageSize,e.context.rowCount,e.context.curPage)}),(function(t,e){var n=e.component;t(e,6,0,(null==n.data?null:n.data.length)||0),t(e,9,0,!(e.context.rowCount/e.context.pageSize>1))}))}function ue(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.value)}))}function le(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-sparkline",[],null,null,null,kt.b,kt.a)),a["ɵdid"](1,638976,null,0,Et.a,[Lt.a],{data:[0,"data"],isBinary:[1,"isBinary"]},null)],(function(t,e){t(e,1,0,e.context.value,e.context.row.cdIsBinary)}),null)}function de(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&r),r}),null,null)),a["ɵdid"](1,671744,null,0,Dt.p,[Dt.m,Dt.a,o.LocationStrategy],{queryParams:[0,"queryParams"],routerLink:[1,"routerLink"]},null),a["ɵpad"](2,1),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){var n=e.context.row.cdParams,a=t(e,2,0,e.context.row.cdLink);t(e,1,0,n,a)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).target,a["ɵnov"](e,1).href),t(e,3,0,e.context.value)}))}function ce(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"i",[],[[8,"hidden",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1),a["ɵppd"](4,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),(function(t,e){var n=!a["ɵunv"](e,0,0,t(e,4,0,a["ɵnov"](e.parent,0),e.context.value));t(e,0,0,n)}))}function fe(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," /s\n"]))],null,(function(t,e){t(e,0,0,e.context.value)}))}function he(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,2)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function ge(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","text-muted italic"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["(",")"]))],null,(function(t,e){t(e,1,0,e.parent.context.row.cdExecuting)}))}function pe(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,he)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](2,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,ge)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.row.cdExecuting),t(e,4,0,e.context.row.cdExecuting)}),(function(t,e){t(e,2,0,e.context.value)}))}function be(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"",e.component.useCustomClass(e.context.value),"")),t(e,1,0,e.context.value)}))}function me(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[["class","badge"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,"badge",null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.map&&null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&null!=e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit]&&e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].class?e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].class:null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.class?e.parent.parent.context.column.customTemplateConfig.class:"badge-primary")}),(function(t,e){t(e,3,0,null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.map&&null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&null!=e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit]&&e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].value?e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].value:null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.prefix?e.parent.parent.context.column.customTemplateConfig.prefix+e.parent.context.$implicit:e.parent.context.$implicit)}))}function ye(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" "]))],null,null)}function ve(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,me)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ye)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&e.parent.context.column.customTemplateConfig.map&&null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&null!=e.parent.context.column.customTemplateConfig.map[e.context.$implicit]&&e.parent.context.column.customTemplateConfig.map[e.context.$implicit].value?e.parent.context.column.customTemplateConfig.map[e.context.$implicit].value:null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&e.parent.context.column.customTemplateConfig.prefix?e.parent.context.column.customTemplateConfig.prefix+e.context.$implicit:e.context.$implicit),t(e,4,0,!e.context.last)}),null)}function xe(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,ve)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵppd"](2,1),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,1),e.context.value));t(e,1,0,n)}),null)}function _e(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""])),a["ɵppd"](2,2)],null,(function(t,e){var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,2),e.context.value,null==e.context.column?null:e.context.column.customTemplateConfig));t(e,1,0,n)}))}function Te(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[["data-toggle","tooltip"]],[[8,"title",0]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""])),a["ɵppd"](2,3)],null,(function(t,e){t(e,0,0,e.context.value);var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,3),e.context.value,null==e.context.column||null==e.context.column.customTemplateConfig?null:e.context.column.customTemplateConfig.length,null==e.context.column||null==e.context.column.customTemplateConfig?null:e.context.column.customTemplateConfig.omission));t(e,1,0,n)}))}function Oe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"a",[["class","expand-collapse-icon tc_expand-collapse"],["href","javascript:void(0)"],["title","Expand/Collapse Row"]],[[2,"expand-collapse-icon-right",null],[2,"expand-collapse-icon-down",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleExpandRow(t.context.row,t.context.expanded)&&a),a}),null,null))],null,(function(t,e){t(e,0,0,!e.context.expanded,e.context.expanded)}))}function we(t){return a["ɵvid"](2,[a["ɵpid"](0,Pt.a,[]),a["ɵpid"](0,Mt.a,[]),a["ɵpid"](0,qt.a,[]),a["ɵpid"](0,jt.a,[]),a["ɵqud"](402653184,1,{table:0}),a["ɵqud"](402653184,2,{tableCellBoldTpl:0}),a["ɵqud"](402653184,3,{sparklineTpl:0}),a["ɵqud"](402653184,4,{routerLinkTpl:0}),a["ɵqud"](402653184,5,{checkIconTpl:0}),a["ɵqud"](402653184,6,{perSecondTpl:0}),a["ɵqud"](402653184,7,{executingTpl:0}),a["ɵqud"](402653184,8,{classAddingTpl:0}),a["ɵqud"](402653184,9,{badgeTpl:0}),a["ɵqud"](402653184,10,{mapTpl:0}),a["ɵqud"](402653184,11,{truncateTpl:0}),a["ɵqud"](402653184,12,{rowDetailsTpl:0}),(t()(),a["ɵand"](16777216,null,null,1,null,Gt)),a["ɵdid"](17,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](18,0,null,null,22,"div",[["class","dataTables_wrapper"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Vt)),a["ɵdid"](20,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,te)),a["ɵdid"](22,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ae)),a["ɵdid"](24,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](25,0,null,null,15,"ngx-datatable",[["class","bootstrap cd-datatable ngx-datatable"]],[[2,"fixed-header",null],[2,"fixed-row",null],[2,"scroll-vertical",null],[2,"virtualized",null],[2,"scroll-horz",null],[2,"selectable",null],[2,"checkbox-selection",null],[2,"cell-selection",null],[2,"single-selection",null],[2,"multi-selection",null],[2,"multi-click-selection",null]],[[null,"select"],[null,"sort"],["window","resize"]],(function(t,e,n){var r=!0,i=t.component;return"window:resize"===e&&(r=!1!==a["ɵnov"](t,26).onWindowResize()&&r),"select"===e&&(r=!1!==i.onSelect(n)&&r),"sort"===e&&(r=!1!==i.changeSorting(n)&&r),r}),b,h)),a["ɵdid"](26,5750784,[[1,4],["table",4]],4,f.n,[[1,f.y],[1,f.r],a.ChangeDetectorRef,a.ElementRef,a.KeyValueDiffers,f.a,[2,"configuration"]],{rows:[0,"rows"],columns:[1,"columns"],selected:[2,"selected"],rowHeight:[3,"rowHeight"],columnMode:[4,"columnMode"],headerHeight:[5,"headerHeight"],footerHeight:[6,"footerHeight"],limit:[7,"limit"],loadingIndicator:[8,"loadingIndicator"],selectionType:[9,"selectionType"],sorts:[10,"sorts"],cssClasses:[11,"cssClasses"],rowClass:[12,"rowClass"],rowIdentity:[13,"rowIdentity"]},{select:"select",sort:"sort"}),a["ɵqud"](603979776,13,{columnTemplates:1}),a["ɵqud"](603979776,14,{rowDetail:0}),a["ɵqud"](603979776,15,{groupHeader:0}),a["ɵqud"](603979776,16,{footer:0}),(t()(),a["ɵeld"](31,0,[["detailRow",1]],null,4,"ngx-datatable-row-detail",[["rowHeight","auto"]],null,null,null,null,null)),a["ɵdid"](32,16384,[[14,4]],1,f.p,[],{rowHeight:[0,"rowHeight"]},null),a["ɵqud"](335544320,17,{_templateQuery:0}),(t()(),a["ɵand"](0,[[17,2]],null,1,null,re)),a["ɵdid"](35,16384,null,0,f.q,[a.TemplateRef],null,null),(t()(),a["ɵeld"](36,0,null,null,4,"ngx-datatable-footer",[],null,null,null,null,null)),a["ɵdid"](37,16384,[[16,4]],1,f.o,[],null,null),a["ɵqud"](603979776,18,{_templateQuery:0}),(t()(),a["ɵand"](0,[[18,2]],null,1,null,oe)),a["ɵdid"](40,16384,null,0,f.g,[a.TemplateRef],null,null),(t()(),a["ɵand"](0,[[2,2],["tableCellBoldTpl",2]],null,0,null,ue)),(t()(),a["ɵand"](0,[[3,2],["sparklineTpl",2]],null,0,null,le)),(t()(),a["ɵand"](0,[[4,2],["routerLinkTpl",2]],null,0,null,de)),(t()(),a["ɵand"](0,[[5,2],["checkIconTpl",2]],null,0,null,ce)),(t()(),a["ɵand"](0,[[6,2],["perSecondTpl",2]],null,0,null,fe)),(t()(),a["ɵand"](0,[[7,2],["executingTpl",2]],null,0,null,pe)),(t()(),a["ɵand"](0,[[8,2],["classAddingTpl",2]],null,0,null,be)),(t()(),a["ɵand"](0,[[9,2],["badgeTpl",2]],null,0,null,xe)),(t()(),a["ɵand"](0,[[10,2],["mapTpl",2]],null,0,null,_e)),(t()(),a["ɵand"](0,[[11,2],["truncateTpl",2]],null,0,null,Te)),(t()(),a["ɵand"](0,[[12,2],["rowDetailsTpl",2]],null,1,null,Oe)),a["ɵdid"](52,16384,null,0,f.e,[a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,17,0,n.loadingError),t(e,20,0,n.onlyActionHeader),t(e,22,0,n.toolHeader),t(e,24,0,n.toolHeader&&n.columnFiltered),t(e,26,1,[n.rows,n.tableColumns,n.selection.selected,"auto",n.columnMode,n.header?"auto":0,n.footer?"auto":0,n.userConfig.limit>0?n.userConfig.limit:void 0,n.loadingIndicator,n.selectionType,n.userConfig.sorts,n.paginationClasses,n.getRowClass(),n.rowIdentity()]),t(e,32,0,"auto")}),(function(t,e){t(e,25,1,[a["ɵnov"](e,26).isFixedHeader,a["ɵnov"](e,26).isFixedRow,a["ɵnov"](e,26).isVertScroll,a["ɵnov"](e,26).isVirtualized,a["ɵnov"](e,26).isHorScroll,a["ɵnov"](e,26).isSelectable,a["ɵnov"](e,26).isCheckboxSelection,a["ɵnov"](e,26).isCellSelection,a["ɵnov"](e,26).isSingleSelection,a["ɵnov"](e,26).isMultiSelection,a["ɵnov"](e,26).isMultiClickSelection])}))}},"2EZI":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("s7LF"),r=n("QFaf"),i=n("8Y7J");let s=(()=>{class t extends a.h{group(t,e=null){const n=super.group(t,e);return new r.a(n.controls,n.validator,n.asyncValidator)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},"2QA8":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>"function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random())()},"2Vo4":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("XNiG"),r=n("9ppp");class i extends a.a{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){const e=super._subscribe(t);return e&&!e.closed&&t.next(this._value),e}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new r.a;return this._value}next(t){super.next(this._value=t)}}},"2ZVE":function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return u})),n.d(e,"d",(function(){return l})),n.d(e,"e",(function(){return s})),n.d(e,"f",(function(){return i}));var a=n("8Y7J");class r{constructor(t){this.viewRef=t}set ngTransclude(t){this._ngTransclude=t,t&&this.viewRef.createEmbeddedView(t)}get ngTransclude(){return this._ngTransclude}}class i{constructor(){this.type="tabs",this.ariaLabel="Tabs"}}class s{constructor(t,e,n){this.renderer=e,this.elementRef=n,this.clazz=!0,this.tabs=[],this.classMap={},Object.assign(this,t)}get vertical(){return this._vertical}set vertical(t){this._vertical=t,this.setClassMap()}get justified(){return this._justified}set justified(t){this._justified=t,this.setClassMap()}get type(){return this._type}set type(t){this._type=t,this.setClassMap()}ngOnDestroy(){this.isDestroyed=!0}addTab(t){this.tabs.push(t),t.active=1===this.tabs.length&&void 0===t.active}removeTab(t,e={reselect:!0,emit:!0}){const n=this.tabs.indexOf(t);if(-1!==n&&!this.isDestroyed){if(e.reselect&&t.active&&this.hasAvailableTabs(n)){const t=this.getClosestTabIndex(n);this.tabs[t].active=!0}e.emit&&t.removed.emit(t),this.tabs.splice(n,1),t.elementRef.nativeElement.parentNode&&this.renderer.removeChild(t.elementRef.nativeElement.parentNode,t.elementRef.nativeElement)}}keyNavActions(t,e){const n=Array.from(this.elementRef.nativeElement.querySelectorAll(".nav-link"));if(13!==t.keyCode&&"Enter"!==t.key&&32!==t.keyCode&&"Space"!==t.key)if(39!==t.keyCode&&"RightArrow"!==t.key)if(37!==t.keyCode&&"LeftArrow"!==t.key)if(36!==t.keyCode&&"Home"!==t.key)if(35!==t.keyCode&&"End"!==t.key){if((46===t.keyCode||"Delete"===t.key)&&this.tabs[e].removable){if(this.removeTab(this.tabs[e]),n[e+1])return void n[(e+1)%n.length].focus();n[n.length-1]&&n[0].focus()}}else{let a;t.preventDefault();let r=1,i=e;do{i-r<0?(i=n.length-1,a=n[i],r=0):a=n[i-r],r++}while(a.classList.contains("disabled"));a.focus()}else{let e;t.preventDefault();let a=0;do{e=n[a%n.length],a++}while(e.classList.contains("disabled"));e.focus()}else{let t,a=1,r=e;do{r-a<0?(r=n.length-1,t=n[r],a=0):t=n[r-a],a++}while(t.classList.contains("disabled"));t.focus()}else{let t,a=1;do{t=n[(e+a)%n.length],a++}while(t.classList.contains("disabled"));t.focus()}else t.preventDefault(),n[e%n.length].click()}getClosestTabIndex(t){const e=this.tabs.length;if(!e)return-1;for(let n=1;n<=e;n+=1){const e=t-n,a=t+n;if(this.tabs[e]&&!this.tabs[e].disabled)return e;if(this.tabs[a]&&!this.tabs[a].disabled)return a}return-1}hasAvailableTabs(t){const e=this.tabs.length;if(!e)return!1;for(let n=0;n<e;n+=1)if(!this.tabs[n].disabled&&n!==t)return!0;return!1}setClassMap(){this.classMap={"nav-stacked":this.vertical,"flex-column":this.vertical,"nav-justified":this.justified,["nav-"+this.type]:!0}}}class o{constructor(t,e,n){this.elementRef=e,this.renderer=n,this.selectTab=new a.EventEmitter,this.deselect=new a.EventEmitter,this.removed=new a.EventEmitter,this.addClass=!0,this.role="tabpanel",this.tabset=t,this.tabset.addTab(this)}get customClass(){return this._customClass}set customClass(t){this.customClass&&this.customClass.split(" ").forEach(t=>{this.renderer.removeClass(this.elementRef.nativeElement,t)}),this._customClass=t?t.trim():null,this.customClass&&this.customClass.split(" ").forEach(t=>{this.renderer.addClass(this.elementRef.nativeElement,t)})}get active(){return this._active}set active(t){this._active!==t&&(this.disabled&&t||!t?this._active&&!t&&(this.deselect.emit(this),this._active=t):(this._active=t,this.selectTab.emit(this),this.tabset.tabs.forEach(t=>{t!==this&&(t.active=!1)})))}get ariaLabelledby(){return this.id?this.id+"-link":""}ngOnInit(){this.removable=this.removable}ngOnDestroy(){this.tabset.removeTab(this,{reselect:!1,emit:!1})}}class u{constructor(t,e){e.headingRef=t}}class l{static forRoot(){return{ngModule:l,providers:[i]}}}},"2bSy":function(t,e,n){var a=n("iQ+a"),r=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,s,o){var u=1&n,l=a(t),d=l.length;if(d!=a(e).length&&!u)return!1;for(var c=d;c--;){var f=l[c];if(!(u?f in e:r.call(e,f)))return!1}var h=o.get(t),g=o.get(e);if(h&&g)return h==e&&g==t;var p=!0;o.set(t,e),o.set(e,t);for(var b=u;++c<d;){var m=t[f=l[c]],y=e[f];if(i)var v=u?i(y,m,f,e,t,o):i(m,y,f,t,e,o);if(!(void 0===v?m===y||s(m,y,n,i,o):v)){p=!1;break}b||(b="constructor"==f)}if(p&&!b){var x=t.constructor,_=e.constructor;x==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof _&&_ instanceof _||(p=!1)}return o.delete(t),o.delete(e),p}},"2fFW":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));let a=!1;const r={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){if(t){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else a&&console.log("RxJS: Back to a better error behavior. Thank you. <3");a=t},get useDeprecatedSynchronousErrorHandling(){return a}}},"2fjn":function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})}(n("wd/R"))},"2oRo":function(t,e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||Function("return this")()},"2oum":function(t,e){t.exports=function(t){return this.__data__.has(t)}},"2uy1":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("XNiG"),s=n("VRyK"),o=n("xgIS"),u=n("LRne"),l=n("3N8a");class d extends l.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}requestAsyncId(t,e,n=0){return null!==n&&n>0?super.requestAsyncId(t,e,n):(t.actions.push(this),t.scheduled||(t.scheduled=requestAnimationFrame(()=>t.flush(null))))}recycleAsyncId(t,e,n=0){if(null!==n&&n>0||null===n&&this.delay>0)return super.recycleAsyncId(t,e,n);0===t.actions.length&&(cancelAnimationFrame(e),t.scheduled=void 0)}}var c=n("IjjT");class f extends c.a{flush(t){this.active=!0,this.scheduled=void 0;const{actions:e}=this;let n,a=-1,r=e.length;t=t||e.shift();do{if(n=t.execute(t.state,t.delay))break}while(++a<r&&(t=e.shift()));if(this.active=!1,n){for(;++a<r&&(t=e.shift());)t.unsubscribe();throw n}}}const h=new f(d);function g(t,e){if(1!==t.nodeType)return[];const n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function p(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function b(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}const{overflow:e,overflowX:n,overflowY:a}=g(t);return/(auto|scroll|overlay)/.test(String(e)+String(a)+String(n))?t:b(p(t))}n.d(e,"a",(function(){return U}));const m="undefined"!=typeof window&&"undefined"!=typeof document,y=m&&!(!window.MSInputMethodContext||!document.documentMode),v=m&&!(!window.MSInputMethodContext||!/MSIE 10/.test(navigator.userAgent));function x(t){return 11===t?y:10===t?v:y||v}function _(t){if(!t)return document.documentElement;const e=x(10)?document.body:null;let n,a=t.offsetParent||null;for(;a===e&&t.nextElementSibling&&n!==t.nextElementSibling;)n=t.nextElementSibling,a=n.offsetParent;const r=a&&a.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(a.nodeName)&&"static"===g(a,"position")?_(a):a:n?n.ownerDocument.documentElement:document.documentElement}function T(t){return null!==t.parentNode?T(t.parentNode):t}function O(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;const n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,a=n?t:e,r=n?e:t,i=document.createRange();i.setStart(a,0),i.setEnd(r,0);const{commonAncestorContainer:s}=i;if(t!==s&&e!==s||a.contains(r))return function(t){const{nodeName:e}=t;return"BODY"!==e&&("HTML"===e||_(t.firstElementChild)===t)}(s)?s:_(s);const o=T(t);return o.host?O(o.host,e):O(t,T(e).host)}function w(t,e){const n="x"===e?"Left":"Top",a="Left"===n?"Right":"Bottom";return parseFloat(t[`border${n}Width`])+parseFloat(t[`border${a}Width`])}function S(t,e,n,a){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],x(10)?parseInt(n["offset"+t],10)+parseInt(a["margin"+("Height"===t?"Top":"Left")],10)+parseInt(a["margin"+("Height"===t?"Bottom":"Right")],10):0)}function I(t){const e=t.body,n=t.documentElement,a=x(10)&&getComputedStyle(n);return{height:S("Height",e,n,a),width:S("Width",e,n,a)}}function N(t,e="top"){const n="top"===e?"scrollTop":"scrollLeft",a=t.nodeName;if("BODY"===a||"HTML"===a){const e=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||e)[n]}return t[n]}function C(t){return Object.assign({},t,{right:t.left+t.width,bottom:t.top+t.height})}function R(t){let e={};try{if(x(10)){e=t.getBoundingClientRect();const n=N(t,"top"),a=N(t,"left");e.top+=n,e.left+=a,e.bottom+=n,e.right+=a}else e=t.getBoundingClientRect()}catch(s){return}const n={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},a="HTML"===t.nodeName?I(t.ownerDocument):{};let r=t.offsetWidth-(a.width||t.clientWidth||n.right-n.left),i=t.offsetHeight-(a.height||t.clientHeight||n.bottom-n.top);if(r||i){const e=g(t);r-=w(e,"x"),i-=w(e,"y"),n.width-=r,n.height-=i}return C(n)}function A(t,e,n=!1){const a=x(10),r="HTML"===e.nodeName,i=R(t),s=R(e),o=b(t),u=g(e),l=parseFloat(u.borderTopWidth),d=parseFloat(u.borderLeftWidth);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));let c=C({top:i.top-s.top-l,left:i.left-s.left-d,width:i.width,height:i.height});if(c.marginTop=0,c.marginLeft=0,!a&&r){const t=parseFloat(u.marginTop),e=parseFloat(u.marginLeft);c.top-=l-t,c.bottom-=l-t,c.left-=d-e,c.right-=d-e,c.marginTop=t,c.marginLeft=e}return(a&&!n?e.contains(o):e===o&&"BODY"!==o.nodeName)&&(c=function(t,e,n=!1){const a=N(e,"top"),r=N(e,"left"),i=n?-1:1;return t.top+=a*i,t.bottom+=a*i,t.left+=r*i,t.right+=r*i,t}(c,e)),c}function k(t){if(!t||!t.parentElement||x())return document.documentElement;let e=t.parentElement;for(;e&&"none"===g(e,"transform");)e=e.parentElement;return e||document.documentElement}function E(t,e,n=0,a,r=!1){let i={top:0,left:0};const s=r?k(t):O(t,e);if("viewport"===a)i=function(t,e=!1){const n=t.ownerDocument.documentElement,a=A(t,n),r=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:N(n),o=e?0:N(n,"left");return C({top:s-Number(a.top)+Number(a.marginTop),left:o-Number(a.left)+Number(a.marginLeft),width:r,height:i})}(s,r);else{let n;"scrollParent"===a?(n=b(p(e)),"BODY"===n.nodeName&&(n=t.ownerDocument.documentElement)):n="window"===a?t.ownerDocument.documentElement:a;const o=A(n,s,r);if("HTML"!==n.nodeName||function t(e){const n=e.nodeName;return"BODY"!==n&&"HTML"!==n&&("fixed"===g(e,"position")||t(p(e)))}(s))i=o;else{const{height:e,width:n}=I(t.ownerDocument);i.top+=o.top-o.marginTop,i.bottom=Number(e)+Number(o.top),i.left+=o.left-o.marginLeft,i.right=Number(n)+Number(o.left)}}return i.left+=n,i.top+=n,i.right-=n,i.bottom-=n,i}function L({width:t,height:e}){return t*e}function D(t,e,n,a,r=["top","bottom","right","left"],i="viewport",s=0){if(-1===t.indexOf("auto"))return t;const o=E(n,a,s,i),u={top:{width:o.width,height:e.top-o.top},right:{width:o.right-e.right,height:o.height},bottom:{width:o.width,height:o.bottom-e.bottom},left:{width:e.left-o.left,height:o.height}},l=Object.keys(u).map(t=>Object.assign({key:t},u[t],{area:L(u[t])})).sort((t,e)=>e.area-t.area);let d=l.filter(({width:t,height:e})=>t>=n.clientWidth&&e>=n.clientHeight);d=d.filter(t=>r.some(e=>e===t.key));const c=d.length>0?d[0].key:l[0].key,f=t.split(" ")[1];return n.className=n.className.replace(/bs-tooltip-auto/g,"bs-tooltip-"+c),c+(f?"-"+f:"")}function P(t){const e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),a=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:Number(t.offsetWidth)+a,height:Number(t.offsetHeight)+n}}function M(t,e,n=null){return A(e,n?k(t):O(t,e),n)}function q(t,e,n){const a=n.split(" ")[0],r=P(t),i={width:r.width,height:r.height},s=-1!==["right","left"].indexOf(a),o=s?"top":"left",u=s?"left":"top",l=s?"height":"width",d=s?"width":"height";return i[o]=e[o]+e[l]/2-r[l]/2,i[u]=a===u?e[u]-r[d]:e[function(t){const e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,t=>e[t])}(u)],i}function j(t,e){return t&&t.modifiers&&t.modifiers[e]&&t.modifiers[e].enabled}function F(t,e,n){Object.keys(e).forEach(a=>{let r="";var i;-1!==["width","height","top","right","bottom","left"].indexOf(a)&&""!==(i=e[a])&&!isNaN(parseFloat(i))&&isFinite(i)&&(r="px"),n?n.setStyle(t,a,`${String(e[a])}${r}`):t.style[a]=String(e[a])+r})}function G(t){let e=t.offsets.target;const n=t.instance.target.querySelector(".arrow");if(!n)return t;const a=-1!==["left","right"].indexOf(t.placement),r=a?"height":"width",i=a?"Top":"Left",s=i.toLowerCase(),o=a?"left":"top",u=a?"bottom":"right",l=P(n)[r];t.offsets.host[u]-l<e[s]&&(e[s]-=e[s]-(t.offsets.host[u]-l)),Number(t.offsets.host[s])+Number(l)>e[u]&&(e[s]+=Number(t.offsets.host[s])+Number(l)-Number(e[u])),e=C(e);const d=Number(t.offsets.host[s])+Number(t.offsets.host[r]/2-l/2),c=g(t.instance.target),f=parseFloat(c["margin"+i]),h=parseFloat(c[`border${i}Width`]);let p=d-e[s]-f-h;return p=Math.max(Math.min(e[r]-l,p),0),t.offsets.arrow={[s]:Math.round(p),[o]:""},t.instance.arrow=n,t}function V(t){if(t.offsets.target=C(t.offsets.target),!j(t.options,"flip"))return t.offsets.target=Object.assign({},t.offsets.target,q(t.instance.target,t.offsets.host,t.placement)),t;const e=E(t.instance.target,t.instance.host,0,"viewport",!1);let n=t.placement.split(" ")[0],a=t.placement.split(" ")[1]||"";const r=D("auto",t.offsets.host,t.instance.target,t.instance.host,t.options.allowedPositions),i=[n,r];return i.forEach((r,s)=>{if(n!==r||i.length===s+1)return t;n=t.placement.split(" ")[0];const o="left"===n&&Math.floor(t.offsets.target.right)>Math.floor(t.offsets.host.left)||"right"===n&&Math.floor(t.offsets.target.left)<Math.floor(t.offsets.host.right)||"top"===n&&Math.floor(t.offsets.target.bottom)>Math.floor(t.offsets.host.top)||"bottom"===n&&Math.floor(t.offsets.target.top)<Math.floor(t.offsets.host.bottom),u=Math.floor(t.offsets.target.left)<Math.floor(e.left),l=Math.floor(t.offsets.target.right)>Math.floor(e.right),d=Math.floor(t.offsets.target.top)<Math.floor(e.top),c=Math.floor(t.offsets.target.bottom)>Math.floor(e.bottom),f="left"===n&&u||"right"===n&&l||"top"===n&&d||"bottom"===n&&c,h=-1!==["top","bottom"].indexOf(n),g=h&&"left"===a&&u||h&&"right"===a&&l||!h&&"left"===a&&d||!h&&"right"===a&&c;(o||f||g)&&((o||f)&&(n=i[s+1]),g&&(a=function(t){return"right"===t?"left":"left"===t?"right":t}(a)),t.placement=n+(a?" "+a:""),t.offsets.target=Object.assign({},t.offsets.target,q(t.instance.target,t.offsets.host,t.placement)))}),t}function z(t){if(!j(t.options,"preventOverflow"))return t;const e="transform",n=t.instance.target.style,{top:a,left:r,[e]:i}=n;n.top="",n.left="",n[e]="";const s=E(t.instance.target,t.instance.host,0,"scrollParent",!1);n.top=a,n.left=r,n[e]=i;const o={primary(e){let n=t.offsets.target[e];return t.offsets.target[e]<s[e]&&(n=Math.max(t.offsets.target[e],s[e])),{[e]:n}},secondary(e){const n="right"===e?"left":"top";let a=t.offsets.target[n];return t.offsets.target[e]>s[e]&&(a=Math.min(t.offsets.target[n],s[e]-("right"===e?t.offsets.target.width:t.offsets.target.height))),{[n]:a}}};let u;return["left","right","top","bottom"].forEach(e=>{u=-1!==["left","top"].indexOf(e)?"primary":"secondary",t.offsets.target=Object.assign({},t.offsets.target,o[u](e))}),t}function B(t){const e=t.placement,n=e.split(" ")[0],a=e.split(" ")[1];if(a){const{host:e,target:r}=t.offsets,i=-1!==["bottom","top"].indexOf(n),s=i?"left":"top",o=i?"width":"height";t.offsets.target=Object.assign({},r,{start:{[s]:e[s]},end:{[s]:e[s]+e[o]-r[o]}}[a])}return t}class Y{position(t,e,n=!0){return this.offset(t,e,!1)}offset(t,e,n=!0){return M(e,t)}positionElements(t,e,n,a,r){return[V,B,z,G].reduce((t,e)=>e(t),function(t,e,n,a){const r=M(t,e);n.match(/^(auto)*\s*(left|right|top|bottom)*$/)||n.match(/^(left|right|top|bottom)*\s*(start|end)*$/)||(n="auto");const i=!!n.match(/auto/g);let s=n.match(/auto\s(left|right|top|bottom)/)?n.split(" ")[1]||"auto":n;const o=q(t,r,s);return s=D(s,r,t,e,a?a.allowedPositions:void 0),{options:a,instance:{target:t,host:e,arrow:null},offsets:{target:o,host:r,arrow:null},positionFixed:!1,placement:s,placementAuto:i}}(e,t,n,r))}}const H=new Y;class U{constructor(t,e,n){this.update$$=new i.a,this.positionElements=new Map,this.isDisabled=!1,Object(r.isPlatformBrowser)(n)&&t.runOutsideAngular(()=>{this.triggerEvent$=Object(s.a)(Object(o.a)(window,"scroll",{passive:!0}),Object(o.a)(window,"resize",{passive:!0}),Object(u.a)(0,h),this.update$$),this.triggerEvent$.subscribe(()=>{this.isDisabled||this.positionElements.forEach(t=>{!function(t,e,n,a,r,i){const s=H.positionElements(t,e,n,a,r),o=function(t){return{width:t.offsets.target.width,height:t.offsets.target.height,left:Math.floor(t.offsets.target.left),top:Math.round(t.offsets.target.top),bottom:Math.round(t.offsets.target.bottom),right:Math.floor(t.offsets.target.right)}}(s);F(e,{"will-change":"transform",top:"0px",left:"0px",transform:`translate3d(${o.left}px, ${o.top}px, 0px)`},i),s.instance.arrow&&F(s.instance.arrow,s.offsets.arrow,i),function(t,e){const n=t.instance.target;let a=n.className;t.placementAuto&&(a=a.replace(/bs-popover-auto/g,"bs-popover-"+t.placement),a=a.replace(/bs-tooltip-auto/g,"bs-tooltip-"+t.placement),a=a.replace(/\sauto/g," "+t.placement),-1!==a.indexOf("popover")&&-1===a.indexOf("popover-auto")&&(a+=" popover-auto"),-1!==a.indexOf("tooltip")&&-1===a.indexOf("tooltip-auto")&&(a+=" tooltip-auto")),a=a.replace(/left|right|top|bottom/g,""+t.placement.split(" ")[0]),e?e.setAttribute(n,"class",a):n.className=a}(s,i)}(W(t.target),W(t.element),t.attachment,t.appendToBody,this.options,e.createRenderer(null,null))})})})}position(t){this.addPositionElement(t)}get event$(){return this.triggerEvent$}disable(){this.isDisabled=!0}enable(){this.isDisabled=!1}addPositionElement(t){this.positionElements.set(W(t.element),t)}calcPosition(){this.update$$.next()}deletePositionElement(t){this.positionElements.delete(W(t))}setOptions(t){this.options=t}}function W(t){return"string"==typeof t?document.querySelector(t):t instanceof a.ElementRef?t.nativeElement:t}},"2vnA":function(t,e,n){"use strict";n.d(e,"a",(function(){return Jt})),n.d(e,"b",(function(){return Qt})),n.d(e,"c",(function(){return it})),n.d(e,"d",(function(){return et})),n.d(e,"e",(function(){return ee}));var a=[];Object.freeze(a);var r={};Object.freeze(r);var i={};function s(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:i}function o(){return++kt.mobxGuid}function u(t){throw l(!1,t),"X"}function l(t,e){if(!t)throw new Error("[mobx] "+(e||"An invariant failed, however the error is obfuscated because this is an production build."))}function d(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var c=function(){};function f(t){return null!==t&&"object"==typeof t}function h(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function g(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!0,configurable:!0,value:n})}function p(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!1,configurable:!0,value:n})}function b(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return f(t)&&!0===t[n]}}function m(t){return void 0!==s().Map&&t instanceof s().Map}function y(t){return t instanceof Set}function v(t){for(var e=[];;){var n=t.next();if(n.done)break;e.push(n.value)}return e}function x(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function _(t){return null===t?null:"object"==typeof t?""+t:t}function T(t,e){for(var n=t.next();!n.done;)e(n.value),n=t.next()}function O(){return"function"==typeof Symbol&&Symbol.iterator||"@@iterator"}function w(t,e){p(t,O(),e)}function S(t){return t[O()]=N,t}function I(){return"function"==typeof Symbol&&Symbol.toStringTag||"@@toStringTag"}function N(){return this}var C=function(){function t(t){void 0===t&&(t="Atom@"+o()),this.name=t,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=st.NOT_TRACKING}return t.prototype.onBecomeUnobserved=function(){},t.prototype.onBecomeObserved=function(){},t.prototype.reportObserved=function(){return qt(this)},t.prototype.reportChanged=function(){Pt(),function(t){if(t.lowestObserverState!==st.STALE){t.lowestObserverState=st.STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===st.UP_TO_DATE&&(a.isTracing!==ot.NONE&&jt(a,t),a.onBecomeStale()),a.dependenciesState=st.STALE}}}(this),Mt()},t.prototype.toString=function(){return this.name},t}(),R=b("Atom",C);function A(t,e,n){void 0===e&&(e=c),void 0===n&&(n=c);var a=new C(t);return ae("onBecomeObserved",a,e,void 0),ne(a,n),a}function k(t,e){return t===e}var E={identity:k,structural:function(t,e){return We(t,e)},default:function(t,e){return function(t,e){return"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(t,e)||k(t,e)},shallow:function(t,e){return We(t,e,1)}},L=function(t,e){return(L=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function D(t,e){function n(){this.constructor=t}L(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var P=function(){return(P=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function M(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var a,r,i=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(a=i.next()).done;)s.push(a.value)}catch(o){r={error:o}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return s}function q(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(M(arguments[e]));return t}var j={},F={};function G(t,e){var n=e?j:F;return n[t]||(n[t]={configurable:!0,enumerable:e,get:function(){return V(this),this[t]},set:function(e){V(this),this[t]=e}})}function V(t){if(!0!==t.__mobxDidRunLazyInitializers){var e=t.__mobxDecorators;if(e)for(var n in g(t,"__mobxDidRunLazyInitializers",!0),e){var a=e[n];a.propertyCreator(t,a.prop,a.descriptor,a.decoratorTarget,a.decoratorArguments)}}}function z(t,e){return function(){var n,r=function(a,r,i,s){return!0===s?(e(a,r,i,a,n),null):(Object.prototype.hasOwnProperty.call(a,"__mobxDecorators")||g(a,"__mobxDecorators",P({},a.__mobxDecorators)),a.__mobxDecorators[r]={prop:r,propertyCreator:e,descriptor:i,decoratorTarget:a,decoratorArguments:n},G(r,t))};return B(arguments)?(n=a,r.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),r)}}function B(t){return(2===t.length||3===t.length)&&"string"==typeof t[1]||4===t.length&&!0===t[3]}function Y(t,e,n){return oe(t)?t:Array.isArray(t)?et.array(t,{name:n}):h(t)?et.object(t,void 0,{name:n}):m(t)?et.map(t,{name:n}):y(t)?et.set(t,{name:n}):t}function H(t){return t}function U(t){l(t);var e=z(!0,(function(e,n,a,r,i){!function(t,e,n,a){var r=Fe(t);if(de(r)){var i=fe(r,{object:t,name:e,type:"add",newValue:n});if(!i)return;n=i.newValue}n=(r.values[e]=new It(n,a,r.name+"."+e,!1)).value,Object.defineProperty(t,e,function(t){return Ge[t]||(Ge[t]={configurable:!0,enumerable:!0,get:function(){return this.$mobx.read(this,t)},set:function(e){this.$mobx.write(this,t,e)}})}(e)),r.keys&&r.keys.push(e),function(t,e,n,a){var r=he(t),i=zt(),s=r||i?{type:"add",object:e,name:n,newValue:a}:null;i&&Yt(P(P({},s),{name:t.name,key:n})),r&&pe(t,s),i&&Ut()}(r,t,e,n)}(e,n,a?a.initializer?a.initializer.call(e):a.value:void 0,t)})),n=("undefined"!=typeof process&&process,e);return n.enhancer=t,n}var W={deep:!0,name:void 0,defaultDecorator:void 0};function K(t){return null==t?W:"string"==typeof t?{name:t,deep:!0}:t}function $(t){return t.defaultDecorator?t.defaultDecorator.enhancer:!1===t.deep?H:Y}Object.freeze(W),Object.freeze({deep:!1,name:void 0,defaultDecorator:void 0});var J=U(Y),Z=U((function(t,e,n){return null==t||Ye(t)||Ae(t)||De(t)||qe(t)?t:Array.isArray(t)?et.array(t,{name:n,deep:!1}):h(t)?et.object(t,void 0,{name:n,deep:!1}):m(t)?et.map(t,{name:n,deep:!1}):y(t)?et.set(t,{name:n,deep:!1}):u(!1)})),Q=U(H),X=U((function(t,e,n){return We(t,e)?e:t})),tt={box:function(t,e){arguments.length>2&&nt("box");var n=K(e);return new It(t,$(n),n.name,!0,n.equals)},shallowBox:function(t,e){return arguments.length>2&&nt("shallowBox"),et.box(t,{name:e,deep:!1})},array:function(t,e){arguments.length>2&&nt("array");var n=K(e);return new we(t,$(n),n.name)},shallowArray:function(t,e){return arguments.length>2&&nt("shallowArray"),et.array(t,{name:e,deep:!1})},map:function(t,e){arguments.length>2&&nt("map");var n=K(e);return new Ee(t,$(n),n.name)},shallowMap:function(t,e){return arguments.length>2&&nt("shallowMap"),et.map(t,{name:e,deep:!1})},set:function(t,e){arguments.length>2&&nt("set");var n=K(e);return new Me(t,$(n),n.name)},object:function(t,e,n){"string"==typeof arguments[1]&&nt("object");var a=K(n);return re({},t,e,a)},shallowObject:function(t,e){return"string"==typeof arguments[1]&&nt("shallowObject"),et.object(t,{},{name:e,deep:!1})},ref:Q,shallow:Z,deep:J,struct:X},et=function(t,e,n){if("string"==typeof arguments[1])return J.apply(null,arguments);if(oe(t))return t;var a=h(t)?et.object(t,e,n):Array.isArray(t)?et.array(t,e):m(t)?et.map(t,e):y(t)?et.set(t,e):t;if(a!==t)return a;u(!1)};function nt(t){u("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}Object.keys(tt).forEach((function(t){return et[t]=tt[t]}));var at=z(!1,(function(t,e,n,a,r){var i,s,o,u;i=t,s=e,o=P({get:n.get,set:n.set},r[0]||{}),u=Fe(i),o.name=u.name+"."+s,o.context=i,u.values[s]=new Nt(o),Object.defineProperty(i,s,function(t){return Ve[t]||(Ve[t]={configurable:kt.computedConfigurable,enumerable:!1,get:function(){return ze(this).read(this,t)},set:function(e){ze(this).write(this,t,e)}})}(s))})),rt=at({equals:E.structural}),it=function(t,e,n){if("string"==typeof e)return at.apply(null,arguments);if(null!==t&&"object"==typeof t&&1===arguments.length)return at.apply(null,arguments);var a="object"==typeof e?e:{};return a.get=t,a.set="function"==typeof e?e:a.set,a.name=a.name||t.name||"",new Nt(a)};it.struct=rt;var st=function(t){return t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE",t}({}),ot=function(t){return t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK",t}({}),ut=function(){return function(t){this.cause=t}}();function lt(t){return t instanceof ut}function dt(t){switch(t.dependenciesState){case st.UP_TO_DATE:return!1;case st.NOT_TRACKING:case st.STALE:return!0;case st.POSSIBLY_STALE:for(var e=mt(!0),n=pt(),a=t.observing,r=a.length,i=0;i<r;i++){var s=a[i];if(Ct(s)){if(kt.disableErrorBoundaries)s.get();else try{s.get()}catch(o){return bt(n),yt(e),!0}if(t.dependenciesState===st.STALE)return bt(n),yt(e),!0}}return vt(t),bt(n),yt(e),!1}}function ct(t){var e=t.observers.length>0;kt.computationDepth>0&&e&&u(!1),kt.allowStateChanges||!e&&"strict"!==kt.enforceActions||u(!1)}function ft(t,e,n){var a=mt(!0);vt(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++kt.runId;var r,i=kt.trackingDerivation;if(kt.trackingDerivation=t,!0===kt.disableErrorBoundaries)r=e.call(n);else try{r=e.call(n)}catch(s){r=new ut(s)}return kt.trackingDerivation=i,function(t){for(var e=t.observing,n=t.observing=t.newObserving,a=st.UP_TO_DATE,r=0,i=t.unboundDepsCount,s=0;s<i;s++)0===(o=n[s]).diffValue&&(o.diffValue=1,r!==s&&(n[r]=o),r++),o.dependenciesState>a&&(a=o.dependenciesState);for(n.length=r,t.newObserving=null,i=e.length;i--;)0===(o=e[i]).diffValue&&Lt(o,t),o.diffValue=0;for(;r--;){var o;1===(o=n[r]).diffValue&&(o.diffValue=0,Et(o,t))}a!==st.UP_TO_DATE&&(t.dependenciesState=a,t.onBecomeStale())}(t),yt(a),r}function ht(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)Lt(e[n],t);t.dependenciesState=st.NOT_TRACKING}function gt(t){var e=pt(),n=t();return bt(e),n}function pt(){var t=kt.trackingDerivation;return kt.trackingDerivation=null,t}function bt(t){kt.trackingDerivation=t}function mt(t){var e=kt.allowStateReads;return kt.allowStateReads=t,e}function yt(t){kt.allowStateReads=t}function vt(t){if(t.dependenciesState!==st.UP_TO_DATE){t.dependenciesState=st.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=st.UP_TO_DATE}}var xt=0,_t=1;function Tt(t,e){var n=function(){return Ot(t,e,this,arguments)};return n.isMobxAction=!0,n}function Ot(t,e,n,a){var r=function(t,e,n){var a=zt()&&!!t,r=0;if(a){r=Date.now();var i=n&&n.length||0,s=new Array(i);if(i>0)for(var o=0;o<i;o++)s[o]=n[o];Yt({type:"action",name:t,object:e,arguments:s})}var u=pt();Pt();var l={prevDerivation:u,prevAllowStateChanges:wt(!0),prevAllowStateReads:mt(!0),notifySpy:a,startTime:r,actionId:_t++,parentActionId:xt};return xt=l.actionId,l}(t,n,a);try{return e.apply(n,a)}catch(i){throw r.error=i,i}finally{!function(t){xt!==t.actionId&&u("invalid action stack. did you forget to finish an action?"),xt=t.parentActionId,void 0!==t.error&&(kt.suppressReactionErrors=!0),St(t.prevAllowStateChanges),yt(t.prevAllowStateReads),Mt(),bt(t.prevDerivation),t.notifySpy&&Ut({time:Date.now()-t.startTime}),kt.suppressReactionErrors=!1}(r)}}function wt(t){var e=kt.allowStateChanges;return kt.allowStateChanges=t,e}function St(t){kt.allowStateChanges=t}Object.getOwnPropertyDescriptor((function(){}),"name");var It=function(t){function e(e,n,a,r,i){void 0===a&&(a="ObservableValue@"+o()),void 0===r&&(r=!0),void 0===i&&(i=E.default);var s=t.call(this,a)||this;return s.enhancer=n,s.name=a,s.equals=i,s.hasUnreportedChange=!1,s.value=n(e,void 0,a),r&&zt()&&Bt({type:"create",name:s.name,newValue:""+s.value}),s}return D(e,t),e.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},e.prototype.set=function(t){var e=this.value;if((t=this.prepareNewValue(t))!==kt.UNCHANGED){var n=zt();n&&Yt({type:"update",name:this.name,newValue:t,oldValue:e}),this.setNewValue(t),n&&Ut()}},e.prototype.prepareNewValue=function(t){if(ct(this),de(this)){var e=fe(this,{object:this,type:"update",newValue:t});if(!e)return kt.UNCHANGED;t=e.newValue}return t=this.enhancer(t,this.value,this.name),this.equals(this.value,t)?kt.UNCHANGED:t},e.prototype.setNewValue=function(t){var e=this.value;this.value=t,this.reportChanged(),he(this)&&pe(this,{type:"update",object:this,newValue:t,oldValue:e})},e.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},e.prototype.intercept=function(t){return ce(this,t)},e.prototype.observe=function(t,e){return e&&t({object:this,type:"update",newValue:this.value,oldValue:void 0}),ge(this,t)},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.value+"]"},e.prototype.valueOf=function(){return _(this.get())},e}(C);It.prototype[x()]=It.prototype.valueOf,b("ObservableValue",It);var Nt=function(){function t(t){this.dependenciesState=st.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=st.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+o(),this.value=new ut(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=ot.NONE,l(t.get,"missing option for computed: get"),this.derivation=t.get,this.name=t.name||"ComputedValue@"+o(),t.set&&(this.setter=Tt(this.name+"-setter",t.set)),this.equals=t.equals||(t.compareStructural||t.struct?E.structural:E.default),this.scope=t.context,this.requiresReaction=!!t.requiresReaction,this.keepAlive=!!t.keepAlive}return t.prototype.onBecomeStale=function(){!function(t){if(t.lowestObserverState===st.UP_TO_DATE){t.lowestObserverState=st.POSSIBLY_STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===st.UP_TO_DATE&&(a.dependenciesState=st.POSSIBLY_STALE,a.isTracing!==ot.NONE&&jt(a,t),a.onBecomeStale())}}}(this)},t.prototype.onBecomeUnobserved=function(){},t.prototype.onBecomeObserved=function(){},t.prototype.get=function(){this.isComputing&&u("Cycle detected in computation "+this.name+": "+this.derivation),0!==kt.inBatch||0!==this.observers.length||this.keepAlive?(qt(this),dt(this)&&this.trackAndCompute()&&function(t){if(t.lowestObserverState!==st.STALE){t.lowestObserverState=st.STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===st.POSSIBLY_STALE?a.dependenciesState=st.STALE:a.dependenciesState===st.UP_TO_DATE&&(t.lowestObserverState=st.UP_TO_DATE)}}}(this)):dt(this)&&(this.warnAboutUntrackedRead(),Pt(),this.value=this.computeValue(!1),Mt());var t=this.value;if(lt(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(lt(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){l(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else l(!1,!1)},t.prototype.trackAndCompute=function(){zt()&&Bt({object:this.scope,type:"compute",name:this.name});var t=this.value,e=this.dependenciesState===st.NOT_TRACKING,n=this.computeValue(!0),a=e||lt(t)||lt(n)||!this.equals(t,n);return a&&(this.value=n),a},t.prototype.computeValue=function(t){var e;if(this.isComputing=!0,kt.computationDepth++,t)e=ft(this,this.derivation,this.scope);else if(!0===kt.disableErrorBoundaries)e=this.derivation.call(this.scope);else try{e=this.derivation.call(this.scope)}catch(n){e=new ut(n)}return kt.computationDepth--,this.isComputing=!1,e},t.prototype.suspend=function(){this.keepAlive||(ht(this),this.value=void 0)},t.prototype.observe=function(t,e){var n=this,a=!0,r=void 0;return Qt((function(){var i=n.get();if(!a||e){var s=pt();t({type:"update",object:n,newValue:i,oldValue:r}),bt(s)}a=!1,r=i}))},t.prototype.warnAboutUntrackedRead=function(){},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return _(this.get())},t}();Nt.prototype[x()]=Nt.prototype.valueOf;var Ct=b("ComputedValue",Nt),Rt=function(){return function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1}}(),At=!0,kt=function(){var t=s();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(At=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==(new Rt).version&&(At=!1),At?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new Rt):(setTimeout((function(){u("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Rt)}();function Et(t,e){var n=t.observers.length;n&&(t.observersIndexes[e.__mapid]=n),t.observers[n]=e,t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function Lt(t,e){if(1===t.observers.length)t.observers.length=0,Dt(t);else{var n=t.observers,a=t.observersIndexes,r=n.pop();if(r!==e){var i=a[e.__mapid]||0;i?a[r.__mapid]=i:delete a[r.__mapid],n[i]=r}delete a[e.__mapid]}}function Dt(t){!1===t.isPendingUnobservation&&(t.isPendingUnobservation=!0,kt.pendingUnobservations.push(t))}function Pt(){kt.inBatch++}function Mt(){if(0==--kt.inBatch){Gt();for(var t=kt.pendingUnobservations,e=0;e<t.length;e++){var n=t[e];n.isPendingUnobservation=!1,0===n.observers.length&&(n.isBeingObserved&&(n.isBeingObserved=!1,n.onBecomeUnobserved()),n instanceof Nt&&n.suspend())}kt.pendingUnobservations=[]}}function qt(t){var e=kt.trackingDerivation;return null!==e?(e.runId!==t.lastAccessedBy&&(t.lastAccessedBy=e.runId,e.newObserving[e.unboundDepsCount++]=t,t.isBeingObserved||(t.isBeingObserved=!0,t.onBecomeObserved())),!0):(0===t.observers.length&&kt.inBatch>0&&Dt(t),!1)}function jt(t,e){if(console.log("[mobx.trace] '"+t.name+"' is invalidated due to a change in: '"+e.name+"'"),t.isTracing===ot.BREAK){var n=[];!function t(e,n,a){n.length>=1e3?n.push("(and many more)"):(n.push(""+new Array(a).join("\t")+e.name),e.dependencies&&e.dependencies.forEach((function(e){return t(e,n,a+1)})))}((a=t,ie(He(a,void 0))),n,1),new Function("debugger;\n/*\nTracing '"+t.name+"'\n\nYou are entering this break point because derivation '"+t.name+"' is being traced and '"+e.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(t instanceof Nt?t.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n    ")()}var a}var Ft=function(){function t(t,e,n,a){void 0===t&&(t="Reaction@"+o()),void 0===a&&(a=!1),this.name=t,this.onInvalidate=e,this.errorHandler=n,this.requiresObservable=a,this.observing=[],this.newObserving=[],this.dependenciesState=st.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+o(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=ot.NONE}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,kt.pendingReactions.push(this),Gt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){if(!this.isDisposed){if(Pt(),this._isScheduled=!1,dt(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending&&zt()&&Bt({name:this.name,type:"scheduled-reaction"})}catch(t){this.reportExceptionInDerivation(t)}}Mt()}},t.prototype.track=function(t){Pt();var e,n=zt();n&&(e=Date.now(),Yt({name:this.name,type:"reaction"})),this._isRunning=!0;var a=ft(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ht(this),lt(a)&&this.reportExceptionInDerivation(a.cause),n&&Ut({time:Date.now()-e}),Mt()},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)this.errorHandler(t,this);else{if(kt.disableErrorBoundaries)throw t;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";kt.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,t),zt()&&Bt({type:"error",name:this.name,message:n,error:""+t}),kt.globalReactionErrorHandlers.forEach((function(n){return n(t,e)}))}},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Pt(),ht(this),Mt()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t.$mobx=this,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.trace=function(t){void 0===t&&(t=!1),function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=!1;"boolean"==typeof t[t.length-1]&&(n=t.pop());var a=ue(t);if(!a)return u(!1);a.isTracing===ot.NONE&&console.log("[mobx.trace] '"+a.name+"' tracing enabled"),a.isTracing=n?ot.BREAK:ot.LOG}(this,t)},t}();function Gt(){kt.inBatch>0||kt.isRunningReactions||function(){kt.isRunningReactions=!0;for(var t=kt.pendingReactions,e=0;t.length>0;){100==++e&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),a=0,r=n.length;a<r;a++)n[a].runReaction()}kt.isRunningReactions=!1}()}var Vt=b("Reaction",Ft);function zt(){return!!kt.spyListeners.length}function Bt(t){if(kt.spyListeners.length)for(var e=kt.spyListeners,n=0,a=e.length;n<a;n++)e[n](t)}function Yt(t){Bt(P(P({},t),{spyReportStart:!0}))}var Ht={spyReportEnd:!0};function Ut(t){Bt(t?P(P({},t),{spyReportEnd:!0}):Ht)}function Wt(){u(!1)}function Kt(t){return function(e,n,a){if(a){if(a.value)return{value:Tt(t,a.value),enumerable:!1,configurable:!0,writable:!0};var r=a.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return Tt(t,r.call(this))}}}return $t(t).apply(this,arguments)}}function $t(t){return function(e,n,a){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get:function(){},set:function(e){g(this,n,Jt(t,e))}})}}var Jt=function(t,e,n,a){return 1===arguments.length&&"function"==typeof t?Tt(t.name||"<unnamed action>",t):2===arguments.length&&"function"==typeof e?Tt(t,e):1===arguments.length&&"string"==typeof t?Kt(t):!0!==a?Kt(e).apply(null,arguments):void(t[e]=Tt(t.name||e,n.value))};function Zt(t,e,n){g(t,e,Tt(e,n.bind(t)))}function Qt(t,e){void 0===e&&(e=r);var n,a=e&&e.name||t.name||"Autorun@"+o();if(e.scheduler||e.delay){var i=te(e),s=!1;n=new Ft(a,(function(){s||(s=!0,i((function(){s=!1,n.isDisposed||n.track(u)})))}),e.onError,e.requiresObservable)}else n=new Ft(a,(function(){this.track(u)}),e.onError,e.requiresObservable);function u(){t(n)}return n.schedule(),n.getDisposer()}Jt.bound=function(t,e,n,a){return!0===a?(Zt(t,e,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return Zt(this,e,n.value||n.initializer.call(this)),this[e]},set:Wt}:{enumerable:!1,configurable:!0,set:function(t){Zt(this,e,t)},get:function(){}}};var Xt=function(t){return t()};function te(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:Xt}function ee(t,e,n){void 0===n&&(n=r),"boolean"==typeof n&&(n={fireImmediately:n});var a,i,s,u=n.name||"Reaction@"+o(),l=Jt(u,n.onError?(a=n.onError,i=e,function(){try{return i.apply(this,arguments)}catch(t){a.call(this,t)}}):e),d=!n.scheduler&&!n.delay,c=te(n),f=!0,h=!1,g=n.compareStructural?E.structural:n.equals||E.default,p=new Ft(u,(function(){f||d?b():h||(h=!0,c(b))}),n.onError,n.requiresObservable);function b(){if(h=!1,!p.isDisposed){var e=!1;p.track((function(){var n=t(p);e=f||!g(s,n),s=n})),f&&n.fireImmediately&&l(s,p),f||!0!==e||l(s,p),f&&(f=!1)}}return p.schedule(),p.getDisposer()}function ne(t,e,n){return ae("onBecomeUnobserved",t,e,n)}function ae(t,e,n,a){var r="function"==typeof a?He(e,n):He(e),i="function"==typeof a?a:n,s=r[t];return"function"!=typeof s?u(!1):(r[t]=function(){s.call(this),i.call(this)},function(){r[t]=s})}function re(t,e,n,a){var r=(a=K(a)).defaultDecorator||(!1===a.deep?Q:J);V(t),Fe(t,a.name,r.enhancer),Pt();try{for(var i=Object.getOwnPropertyNames(e),s=0,o=i.length;s<o;s++){var u=i[s],l=Object.getOwnPropertyDescriptor(e,u),d=(n&&u in n?n[u]:l.get?at:r)(t,u,l,!0);d&&Object.defineProperty(t,u,d)}}finally{Mt()}return t}function ie(t){var e,n,a={name:t.name};return t.observing&&t.observing.length>0&&(a.dependencies=(e=t.observing,n=[],e.forEach((function(t){-1===n.indexOf(t)&&n.push(t)})),n).map(ie)),a}function se(t,e){if(null==t)return!1;if(void 0!==e){if(Ye(t)){var n=t.$mobx;return n.values&&!!n.values[e]}return!1}return Ye(t)||!!t.$mobx||R(t)||Vt(t)||Ct(t)}function oe(t){return 1!==arguments.length&&u(!1),se(t)}function ue(t){switch(t.length){case 0:return kt.trackingDerivation;case 1:return He(t[0]);case 2:return He(t[0],t[1])}}function le(t,e){void 0===e&&(e=void 0),Pt();try{return t.apply(e)}finally{Mt()}}function de(t){return void 0!==t.interceptors&&t.interceptors.length>0}function ce(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),d((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function fe(t,e){var n=pt();try{var a=t.interceptors;if(a)for(var r=0,i=a.length;r<i&&(l(!(e=a[r](e))||e.type,"Intercept handlers should return nothing or a change object"),e);r++);return e}finally{bt(n)}}function he(t){return void 0!==t.changeListeners&&t.changeListeners.length>0}function ge(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),d((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function pe(t,e){var n=pt(),a=t.changeListeners;if(a){for(var r=0,i=(a=a.slice()).length;r<i;r++)a[r](e);bt(n)}}Object.create(Error.prototype);var be,me,ye,ve,xe=(be=!1,me={},Object.defineProperty(me,"0",{set:function(){be=!0}}),Object.create(me)[0]=1,!1===be),_e=0,Te=function(){return function(){}}();ye=Te,ve=Array.prototype,void 0!==Object.setPrototypeOf?Object.setPrototypeOf(ye.prototype,ve):void 0!==ye.prototype.__proto__?ye.prototype.__proto__=ve:ye.prototype=ve,Object.isFrozen(Array)&&["constructor","push","shift","concat","pop","unshift","replace","find","findIndex","splice","reverse","sort"].forEach((function(t){Object.defineProperty(Te.prototype,t,{configurable:!0,writable:!0,value:Array.prototype[t]})}));var Oe=function(){function t(t,e,n,a){this.array=n,this.owned=a,this.values=[],this.lastKnownLength=0,this.atom=new C(t||"ObservableArray@"+o()),this.enhancer=function(n,a){return e(n,a,t+"[..]")}}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.dehanceValues=function(t){return void 0!==this.dehancer&&t.length>0?t.map(this.dehancer):t},t.prototype.intercept=function(t){return ce(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),ge(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),a=0;a<t-e;a++)n[a]=void 0;this.spliceWithArray(e,0,n)}else this.spliceWithArray(t,e-t)},t.prototype.updateArrayLength=function(t,e){if(t!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed. Did you use peek() to change it?");this.lastKnownLength+=e,e>0&&t+e+1>_e&&Ce(t+e+1)},t.prototype.spliceWithArray=function(t,e,n){var r=this;ct(this.atom);var i=this.values.length;if(void 0===t?t=0:t>i?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:null==e?0:Math.max(0,Math.min(e,i-t)),void 0===n&&(n=a),de(this)){var s=fe(this,{object:this.array,type:"splice",index:t,removedCount:e,added:n});if(!s)return a;e=s.removedCount,n=s.added}var o=(n=0===n.length?n:n.map((function(t){return r.enhancer(t,void 0)}))).length-e;this.updateArrayLength(i,o);var u=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,u),this.dehanceValues(u)},t.prototype.spliceItemsIntoValues=function(t,e,n){var a;if(n.length<1e4)return(a=this.values).splice.apply(a,q([t,e],n));var r=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),r},t.prototype.notifyArrayChildUpdate=function(t,e,n){var a=!this.owned&&zt(),r=he(this),i=r||a?{object:this.array,type:"update",index:t,newValue:e,oldValue:n}:null;a&&Yt(P(P({},i),{name:this.atom.name})),this.atom.reportChanged(),r&&pe(this,i),a&&Ut()},t.prototype.notifyArraySplice=function(t,e,n){var a=!this.owned&&zt(),r=he(this),i=r||a?{object:this.array,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;a&&Yt(P(P({},i),{name:this.atom.name})),this.atom.reportChanged(),r&&pe(this,i),a&&Ut()},t}(),we=function(t){function e(e,n,a,r){void 0===a&&(a="ObservableArray@"+o()),void 0===r&&(r=!1);var i=t.call(this)||this,s=new Oe(a,n,i,r);if(p(i,"$mobx",s),e&&e.length){var u=wt(!0);i.spliceWithArray(0,0,e),St(u)}return xe&&Object.defineProperty(s.array,"0",Se),i}return D(e,t),e.prototype.intercept=function(t){return this.$mobx.intercept(t)},e.prototype.observe=function(t,e){return void 0===e&&(e=!1),this.$mobx.observe(t,e)},e.prototype.clear=function(){return this.splice(0)},e.prototype.concat=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this.$mobx.atom.reportObserved(),Array.prototype.concat.apply(this.peek(),t.map((function(t){return Ae(t)?t.peek():t})))},e.prototype.replace=function(t){return this.$mobx.spliceWithArray(0,this.$mobx.values.length,t)},e.prototype.toJS=function(){return this.slice()},e.prototype.toJSON=function(){return this.toJS()},e.prototype.peek=function(){return this.$mobx.atom.reportObserved(),this.$mobx.dehanceValues(this.$mobx.values)},e.prototype.find=function(t,e,n){void 0===n&&(n=0);var a=this.findIndex.apply(this,arguments);return-1===a?void 0:this.get(a)},e.prototype.findIndex=function(t,e,n){void 0===n&&(n=0);for(var a=this.peek(),r=a.length,i=n;i<r;i++)if(t.call(e,a[i],i,this))return i;return-1},e.prototype.splice=function(t,e){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];switch(arguments.length){case 0:return[];case 1:return this.$mobx.spliceWithArray(t);case 2:return this.$mobx.spliceWithArray(t,e)}return this.$mobx.spliceWithArray(t,e,n)},e.prototype.spliceWithArray=function(t,e,n){return this.$mobx.spliceWithArray(t,e,n)},e.prototype.push=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.$mobx;return n.spliceWithArray(n.values.length,0,t),n.values.length},e.prototype.pop=function(){return this.splice(Math.max(this.$mobx.values.length-1,0),1)[0]},e.prototype.shift=function(){return this.splice(0,1)[0]},e.prototype.unshift=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.$mobx;return n.spliceWithArray(0,0,t),n.values.length},e.prototype.reverse=function(){var t=this.slice();return t.reverse.apply(t,arguments)},e.prototype.sort=function(t){var e=this.slice();return e.sort.apply(e,arguments)},e.prototype.remove=function(t){var e=this.$mobx.dehanceValues(this.$mobx.values).indexOf(t);return e>-1&&(this.splice(e,1),!0)},e.prototype.move=function(t,e){function n(t){if(t<0)throw new Error("[mobx.array] Index out of bounds: "+t+" is negative");var e=this.$mobx.values.length;if(t>=e)throw new Error("[mobx.array] Index out of bounds: "+t+" is not smaller than "+e)}if(n.call(this,t),n.call(this,e),t!==e){var a,r=this.$mobx.values;a=t<e?q(r.slice(0,t),r.slice(t+1,e+1),[r[t]],r.slice(e+1)):q(r.slice(0,e),[r[t]],r.slice(e,t),r.slice(t+1)),this.replace(a)}},e.prototype.get=function(t){var e=this.$mobx;if(e){if(t<e.values.length)return e.atom.reportObserved(),e.dehanceValue(e.values[t]);console.warn("[mobx.array] Attempt to read an array index ("+t+") that is out of bounds ("+e.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},e.prototype.set=function(t,e){var n=this.$mobx,a=n.values;if(t<a.length){ct(n.atom);var r=a[t];if(de(n)){var i=fe(n,{type:"update",object:this,index:t,newValue:e});if(!i)return;e=i.newValue}(e=n.enhancer(e,r))!==r&&(a[t]=e,n.notifyArrayChildUpdate(t,e,r))}else{if(t!==a.length)throw new Error("[mobx.array] Index out of bounds, "+t+" is larger than "+a.length);n.spliceWithArray(t,0,[e])}},e}(Te);w(we.prototype,(function(){this.$mobx.atom.reportObserved();var t=this,e=0;return S({next:function(){return e<t.length?{value:t[e++],done:!1}:{done:!0,value:void 0}}})})),Object.defineProperty(we.prototype,"length",{enumerable:!1,configurable:!0,get:function(){return this.$mobx.getArrayLength()},set:function(t){this.$mobx.setArrayLength(t)}}),g(we.prototype,I(),"Array"),["indexOf","join","lastIndexOf","slice","toString","toLocaleString"].forEach((function(t){var e=Array.prototype[t];l("function"==typeof e,"Base function not defined on Array prototype: '"+t+"'"),g(we.prototype,t,(function(){return e.apply(this.peek(),arguments)}))})),["every","filter","forEach","map","some"].forEach((function(t){l("function"==typeof Array.prototype[t],"Base function not defined on Array prototype: '"+t+"'"),g(we.prototype,t,(function(e,n){var a=this,r=this.$mobx;return r.atom.reportObserved(),r.dehanceValues(r.values)[t]((function(t,r){return e.call(n,t,r,a)}),n)}))})),["reduce","reduceRight"].forEach((function(t){g(we.prototype,t,(function(e,n){var a=this,r=this.$mobx;return r.atom.reportObserved(),r.values[t]((function(t,n,i){return n=r.dehanceValue(n),e(t,n,i,a)}),n)}))})),function(t,e){for(var n=0;n<e.length;n++)g(t,e[n],t[e[n]])}(we.prototype,["constructor","intercept","observe","clear","concat","get","replace","toJS","toJSON","peek","find","findIndex","splice","spliceWithArray","push","pop","set","shift","unshift","reverse","sort","remove","move","toString","toLocaleString"]);var Se=Ie(0);function Ie(t){return{enumerable:!1,configurable:!1,get:function(){return this.get(t)},set:function(e){this.set(t,e)}}}function Ne(t){Object.defineProperty(we.prototype,""+t,Ie(t))}function Ce(t){for(var e=_e;e<t;e++)Ne(e);_e=t}Ce(1e3);var Re=b("ObservableArrayAdministration",Oe);function Ae(t){return f(t)&&Re(t.$mobx)}var ke={},Ee=function(){function t(t,e,n){if(void 0===e&&(e=Y),void 0===n&&(n="ObservableMap@"+o()),this.enhancer=e,this.name=n,this.$mobx=ke,this._keysAtom=A(this.name+".keys()"),"function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(t)}return t.prototype._has=function(t){return this._data.has(t)},t.prototype.has=function(t){var e=this;if(!kt.trackingDerivation)return this._has(t);var n=this._hasMap.get(t);if(!n){var a=n=new It(this._has(t),H,this.name+"."+Le(t)+"?",!1);this._hasMap.set(t,a),ne(a,(function(){return e._hasMap.delete(t)}))}return n.get()},t.prototype.set=function(t,e){var n=this._has(t);if(de(this)){var a=fe(this,{type:n?"update":"add",object:this,newValue:e,name:t});if(!a)return this;e=a.newValue}return n?this._updateValue(t,e):this._addValue(t,e),this},t.prototype.delete=function(t){var e=this;if(ct(this._keysAtom),de(this)&&!(r=fe(this,{type:"delete",object:this,name:t})))return!1;if(this._has(t)){var n=zt(),a=he(this),r=a||n?{type:"delete",object:this,oldValue:this._data.get(t).value,name:t}:null;return n&&Yt(P(P({},r),{name:this.name,key:t})),le((function(){e._keysAtom.reportChanged(),e._updateHasMapEntry(t,!1),e._data.get(t).setNewValue(void 0),e._data.delete(t)})),a&&pe(this,r),n&&Ut(),!0}return!1},t.prototype._updateHasMapEntry=function(t,e){var n=this._hasMap.get(t);n&&n.setNewValue(e)},t.prototype._updateValue=function(t,e){var n=this._data.get(t);if((e=n.prepareNewValue(e))!==kt.UNCHANGED){var a=zt(),r=he(this),i=r||a?{type:"update",object:this,oldValue:n.value,name:t,newValue:e}:null;a&&Yt(P(P({},i),{name:this.name,key:t})),n.setNewValue(e),r&&pe(this,i),a&&Ut()}},t.prototype._addValue=function(t,e){var n=this;ct(this._keysAtom),le((function(){var a=new It(e,n.enhancer,n.name+"."+Le(t),!1);n._data.set(t,a),e=a.value,n._updateHasMapEntry(t,!0),n._keysAtom.reportChanged()}));var a=zt(),r=he(this),i=r||a?{type:"add",object:this,name:t,newValue:e}:null;a&&Yt(P(P({},i),{name:this.name,key:t})),r&&pe(this,i),a&&Ut()},t.prototype.get=function(t){return this.has(t)?this.dehanceValue(this._data.get(t).get()):this.dehanceValue(void 0)},t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.keys=function(){return this._keysAtom.reportObserved(),this._data.keys()},t.prototype.values=function(){var t=this,e=this.keys();return S({next:function(){var n=e.next(),a=n.done;return{done:a,value:a?void 0:t.get(n.value)}}})},t.prototype.entries=function(){var t=this,e=this.keys();return S({next:function(){var n=e.next(),a=n.done,r=n.value;return{done:a,value:a?void 0:[r,t.get(r)]}}})},t.prototype.forEach=function(t,e){var n=this;this._keysAtom.reportObserved(),this._data.forEach((function(a,r){return t.call(e,n.get(r),r,n)}))},t.prototype.merge=function(t){var e=this;return De(t)&&(t=t.toJS()),le((function(){var n=wt(!0);try{h(t)?Object.keys(t).forEach((function(n){return e.set(n,t[n])})):Array.isArray(t)?t.forEach((function(t){var n=M(t,2);return e.set(n[0],n[1])})):m(t)?t.constructor!==Map?u("Cannot initialize from classes that inherit from Map: "+t.constructor.name):t.forEach((function(t,n){return e.set(n,t)})):null!=t&&u("Cannot initialize map from "+t)}finally{St(n)}})),this},t.prototype.clear=function(){var t=this;le((function(){gt((function(){t._data.forEach((function(e,n){return t.delete(n)}))}))}))},t.prototype.replace=function(t){var e=this;return le((function(){var n=function(t){if(m(t)||De(t))return t;if(Array.isArray(t))return new Map(t);if(h(t)){var e=new Map;for(var n in t)e.set(n,t[n]);return e}return u("Cannot convert to map from '"+t+"'")}(t),a=new Map,r=!1;if(T(e._data.keys(),(function(t){if(!n.has(t))if(e.delete(t))r=!0;else{var i=e._data.get(t);a.set(t,i)}})),T(n.entries(),(function(t){var n=M(t,2),i=n[0],s=n[1],o=e._data.has(i);if(e.set(i,s),e._data.has(i)){var u=e._data.get(i);a.set(i,u),o||(r=!0)}})),!r)if(e._data.size!==a.size)e._keysAtom.reportChanged();else for(var i=e._data.keys(),s=a.keys(),o=i.next(),l=s.next();!o.done;){if(o.value!==l.value){e._keysAtom.reportChanged();break}o=i.next(),l=s.next()}e._data=a})),this},Object.defineProperty(t.prototype,"size",{get:function(){return this._keysAtom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.toPOJO=function(){var t=this,e={};return this.forEach((function(n,a){return e["symbol"==typeof a?a:Le(a)]=t.get(a)})),e},t.prototype.toJS=function(){return new Map(this)},t.prototype.toJSON=function(){return this.toPOJO()},t.prototype.toString=function(){var t=this;return this.name+"[{ "+v(this.keys()).map((function(e){return Le(e)+": "+t.get(e)})).join(", ")+" }]"},t.prototype.observe=function(t,e){return ge(this,t)},t.prototype.intercept=function(t){return ce(this,t)},t}();function Le(t){return t&&t.toString?t.toString():new String(t).toString()}w(Ee.prototype,(function(){return this.entries()})),p(Ee.prototype,I(),"Map");var De=b("ObservableMap",Ee),Pe={},Me=function(){function t(t,e,n){if(void 0===e&&(e=Y),void 0===n&&(n="ObservableSet@"+o()),this.name=n,this.$mobx=Pe,this._data=new Set,this._atom=A(this.name),"function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(t,a){return e(t,a,n)},t&&this.replace(t)}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.clear=function(){var t=this;le((function(){gt((function(){t._data.forEach((function(e){t.delete(e)}))}))}))},t.prototype.forEach=function(t,e){var n=this;this._atom.reportObserved(),this._data.forEach((function(a){t.call(e,a,a,n)}))},Object.defineProperty(t.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.add=function(t){var e=this;if(ct(this._atom),de(this)&&!(r=fe(this,{type:"add",object:this,newValue:t})))return this;if(!this.has(t)){le((function(){e._data.add(e.enhancer(t,void 0)),e._atom.reportChanged()}));var n=zt(),a=he(this),r=a||n?{type:"add",object:this,newValue:t}:null;a&&pe(this,r)}return this},t.prototype.delete=function(t){var e=this;if(de(this)&&!(r=fe(this,{type:"delete",object:this,oldValue:t})))return!1;if(this.has(t)){var n=zt(),a=he(this),r=a||n?{type:"delete",object:this,oldValue:t}:null;return le((function(){e._atom.reportChanged(),e._data.delete(t)})),a&&pe(this,r),!0}return!1},t.prototype.has=function(t){return this._atom.reportObserved(),this._data.has(this.dehanceValue(t))},t.prototype.entries=function(){var t=0,e=v(this.keys()),n=v(this.values());return S({next:function(){var a=t;return t+=1,a<n.length?{value:[e[a],n[a]],done:!1}:{done:!0}}})},t.prototype.keys=function(){return this.values()},t.prototype.values=function(){this._atom.reportObserved();var t,e=this,n=0;return void 0!==this._data.values?t=v(this._data.values()):(t=[],this._data.forEach((function(e){return t.push(e)}))),S({next:function(){return n<t.length?{value:e.dehanceValue(t[n++]),done:!1}:{done:!0}}})},t.prototype.replace=function(t){var e=this;return qe(t)&&(t=t.toJS()),le((function(){var n=wt(!0);try{Array.isArray(t)||y(t)?(e.clear(),t.forEach((function(t){return e.add(t)}))):null!=t&&u("Cannot initialize set from "+t)}finally{St(n)}})),this},t.prototype.observe=function(t,e){return ge(this,t)},t.prototype.intercept=function(t){return ce(this,t)},t.prototype.toJS=function(){return new Set(this)},t.prototype.toString=function(){return this.name+"[ "+v(this.keys()).join(", ")+" ]"},t}();w(Me.prototype,(function(){return this.values()})),p(Me.prototype,I(),"Set");var qe=b("ObservableSet",Me),je=function(){function t(t,e,n){this.target=t,this.name=e,this.defaultEnhancer=n,this.values={}}return t.prototype.read=function(t,e){if(this.target===t||(this.illegalAccess(t,e),this.values[e]))return this.values[e].get()},t.prototype.write=function(t,e,n){var a=this.target;a!==t&&this.illegalAccess(t,e);var r=this.values[e];if(r instanceof Nt)r.set(n);else{if(de(this)){if(!(o=fe(this,{type:"update",object:a,name:e,newValue:n})))return;n=o.newValue}if((n=r.prepareNewValue(n))!==kt.UNCHANGED){var i=he(this),s=zt(),o=i||s?{type:"update",object:a,oldValue:r.value,name:e,newValue:n}:null;s&&Yt(P(P({},o),{name:this.name,key:e})),r.setNewValue(n),i&&pe(this,o),s&&Ut()}}},t.prototype.remove=function(t){if(this.values[t]){var e=this.target;if(de(this)&&!(i=fe(this,{object:e,name:t,type:"remove"})))return;try{Pt();var n=he(this),a=zt(),r=this.values[t].get();this.keys&&this.keys.remove(t),delete this.values[t],delete this.target[t];var i=n||a?{type:"remove",object:e,oldValue:r,name:t}:null;a&&Yt(P(P({},i),{name:this.name,key:t})),n&&pe(this,i),a&&Ut()}finally{Mt()}}},t.prototype.illegalAccess=function(t,e){console.warn("Property '"+e+"' of '"+t+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},t.prototype.observe=function(t,e){return ge(this,t)},t.prototype.intercept=function(t){return ce(this,t)},t.prototype.getKeys=function(){var t=this;return void 0===this.keys&&(this.keys=new we(Object.keys(this.values).filter((function(e){return t.values[e]instanceof It})),H,"keys("+this.name+")",!0)),this.keys.slice()},t}();function Fe(t,e,n){void 0===e&&(e=""),void 0===n&&(n=Y);var a=t.$mobx;return a||(h(t)||(e=(t.constructor.name||"ObservableObject")+"@"+o()),e||(e="ObservableObject@"+o()),p(t,"$mobx",a=new je(t,e,n)),a)}var Ge=Object.create(null),Ve=Object.create(null);function ze(t){return t.$mobx||(V(t),t.$mobx)}var Be=b("ObservableObjectAdministration",je);function Ye(t){return!!f(t)&&(V(t),Be(t.$mobx))}function He(t,e){if("object"==typeof t&&null!==t){if(Ae(t))return void 0!==e&&u(!1),t.$mobx.atom;if(qe(t))return t.$mobx;if(De(t)){var n=t;return void 0===e?n._keysAtom:((a=n._data.get(e)||n._hasMap.get(e))||u(!1),a)}var a;if(V(t),Ye(t))return e?((a=t.$mobx.values[e])||u(!1),a):u(!1);if(R(t)||Ct(t)||Vt(t))return t}else if("function"==typeof t&&Vt(t.$mobx))return t.$mobx;return u(!1)}var Ue=Object.prototype.toString;function We(t,e,n){return void 0===n&&(n=-1),function t(e,n,a,r,i){if(e===n)return 0!==e||1/e==1/n;if(null==e||null==n)return!1;if(e!=e)return n!=n;var s=typeof e;if("function"!==s&&"object"!==s&&"object"!=typeof n)return!1;e=Ke(e),n=Ke(n);var o=Ue.call(e);if(o!==Ue.call(n))return!1;switch(o){case"[object RegExp]":case"[object String]":return""+e==""+n;case"[object Number]":return+e!=+e?+n!=+n:0==+e?1/+e==1/n:+e==+n;case"[object Date]":case"[object Boolean]":return+e==+n;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(e)===Symbol.valueOf.call(n)}var u="[object Array]"===o;if(!u){if("object"!=typeof e||"object"!=typeof n)return!1;var l=e.constructor,d=n.constructor;if(l!==d&&!("function"==typeof l&&l instanceof l&&"function"==typeof d&&d instanceof d)&&"constructor"in e&&"constructor"in n)return!1}if(0===a)return!1;a<0&&(a=-1),i=i||[];for(var c=(r=r||[]).length;c--;)if(r[c]===e)return i[c]===n;if(r.push(e),i.push(n),u){if((c=e.length)!==n.length)return!1;for(;c--;)if(!t(e[c],n[c],a-1,r,i))return!1}else{var f=Object.keys(e),h=void 0;if(c=f.length,Object.keys(n).length!==c)return!1;for(;c--;)if(!$e(n,h=f[c])||!t(e[h],n[h],a-1,r,i))return!1}return r.pop(),i.pop(),!0}(t,e,n)}function Ke(t){return Ae(t)?t.peek():m(t)||De(t)||y(t)||qe(t)?v(t.entries()):t}function $e(t,e){return Object.prototype.hasOwnProperty.call(t,e)}"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function(t){return kt.spyListeners.push(t),d((function(){kt.spyListeners=kt.spyListeners.filter((function(e){return e!==t}))}))},extras:{getDebugName:function(t,e){return(void 0!==e?He(t,e):Ye(t)||De(t)||qe(t)?function t(e,n){return e||u("Expecting some object"),void 0!==n?t(He(e,n)):R(e)||Ct(e)||Vt(e)||De(e)||qe(e)?e:(V(e),e.$mobx?e.$mobx:void u(!1))}(t):He(t)).name}},$mobx:"$mobx"})},"2ykv":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),a=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"2zzJ":function(t,e,n){var a=n("MOZO"),r=n("Wv1A");t.exports=function(t,e){for(var n=0,i=(e=a(e,t)).length;null!=t&&n<i;)t=t[r(e[n++])];return n&&n==i?t:void 0}},"3+CB":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="ko-KR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>네비게이션 전환</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>현황판</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>클러스터</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>호스트들</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>모니터들</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>서비스들</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD들</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>설정</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>크러쉬맵</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>메니저 모듈들</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>로그들</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>풀들</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>블럭</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>이미지들</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>미러링</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>파일시스템들</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>오브젝트게이트웨이</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>데몬들</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>버킷들</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>언어선택</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>패널 데이타 로딩 중...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>그라파나 타임 픽커</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>설정 초기화</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>뒤로</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>데이타 로딩 실폐</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>선택된</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>발견된</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>전체</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>이름</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>설명</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>자세한 설명</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>기본값</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>데모 기본값</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>값들</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>저장하기</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>크러쉬맵 보기</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>로딩중...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>호스트이름</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>이 필드는 필수적입니다.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>예, 확실합니다.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>취소</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>닫기</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>호스트 목록들</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>통합 성능치</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>항목들을 찾을 수 없음</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>클러스터 로그들</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>감사 로그들</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>설정 로딩 중</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>설정을 로드할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>관리모듈 편집하기</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>입력된 값이 유효한 UUID가 아닙니다, 예.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>입력된 값은 유효한 IP주소 여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>입력된 값은 적어도 하나의 숫자를 필요로 합니다.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>입력 된 값은 숫자 또는 십진수여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>갱신</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>클러스터 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>몬맵 변경시간</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>몬맵 변경번호</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>정족수 일치번호</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>정족수 모니터상태</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>요구되는 일치번호</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>요구되는 모니터상태</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>정족수에 포함</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>정족수 미포함</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>추가</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>특징들</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>클러스터-수준의 OSD 플레그들</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>제출</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>자세한 옵션...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 복구 우선순위</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>우선순위</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>우선 순위 값 맞춤 설정</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>이 필드는 요구됩니다!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>값은 0과 1사이어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>재-조정</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, 선택, 1 {깊이 } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, 선택, 1 {깊이 } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 목록들</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>값</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>편집</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>삭제</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>건강상태</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>통계들</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>클라이언트들</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>모든 클라이언트 접근가능</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>주소들</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>필수 입력란</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>반드시 하나 이상의 쉼표로 구분 된 값을 포함해야 함</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>예를들면:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>접근형태</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>클라이언트들 추가</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 사용가능 클러스터 없음 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 클러스터 선택 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>데몬 추가하기</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>스토리지 백엔드</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 이용가능한 데이타풀 없음 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 스토리지 백엔드 선택 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>객체 게이트웨이 사용자</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 사용가능한 사용자들 없음 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 객체 게이트웨이 사용자 선택 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 사용자 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 사용가능한 클라이언트 없음 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephx 클라이언트 선택 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 이름</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>보안 레이블</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>보안 레이블 사용</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 경로</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>경로는 \'/\'로 시작해야하며 그 뒤에 단어가 올 수 있습니다</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>새로운 디렉토리가 만들어 질 것입니다</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>경로</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>경로는 하나의 \'/\' 또는 하나의 단어 일 수 있습니다</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>새로운 버킷이 만들어 질 것입니다</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 프로토콜</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 태크</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>클라이언트는 하위 디렉토리를 마운트 할 수 없습니다 (즉, Tag = foo 인 경우 클라이언트가 foo / baz를 마운트하지 못할 수 있습니다).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>다른 태그 옵션을 사용하면 같은 경로를 여러 번 내보낼 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>다른 Pseudo 옵션을 사용하면 동일한 경로를 여러 번 내보낼 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 사용가능한 접근형태 없음 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 접근형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 사용가능한 squash 없음 --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 어떤 종류의 사용자 ID 스쿼시가 수행되는지 선택하세요 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>전송프로토콜</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Ceph 사용을 환영합니다.</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>사용자이름이 필요합니다</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>암호가 필요합니다</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>로그인</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>미안합니다. 사용자가 Ceph내에 존재하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>금지됨</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>미안합니다. 당신이 요청할 것을 열람하는 것이 허락되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 설정들</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>로컬 구성 값을 제거하십시오. 상위 구성 값은 계승되고 대신 사용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>최소값은 0입니다.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>풀 목록들</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>이름은 영숫자, 대시 및 밑줄로만 구성 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>선택한 Erasure Code 프로파일 이름이 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>플러그인</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>데이터 덩어리들 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>반드시 2보다 크거나 같아야합니다.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>코딩 덩어리들 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>반드시 1보다 크거나 같아야합니다.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>내구성 평가(c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>지역 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>크러쉬 실패 도메인</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>크러쉬 지역</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>없음</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>기술</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>패킷크기</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>크러쉬루트</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>크러쉬 장치 클래스</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>모든</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>디렉토리</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>이름...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>선택한 Ceph 풀이름이 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>풀 형태</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 풀 형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>게재위치 그룹</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>적어도 하나의 게재위치 그룹이 필요함!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>클러스터는 이 많은 PG들를 처리 할 수 없습니다. 필요한 PG 양을 다시 계산하십시오.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>계산 도움말</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>복제되는 크기</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>플레그들</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 덮어쓰기</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>응용프로그램들</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Erasure Code 프로파일</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 사용가능한 Erasure Code 프로파일 없음 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 한개의 Erasure Code 프로파일 선택 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>크러쉬 룰셋</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 크러쉬 룰 선택 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>크러쉬 룰</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>크러쉬 단계들</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>압축</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>양식</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>알고리즘</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 이용가능한 Erasure 압축알고리즘 없음 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>최소 blob 크기</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>예) 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>값은 0보다 커야합니다</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>최대 blob 크기</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>예) 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>값은 최소 blob 크기보다 커야 합니다</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>비율</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>압축율</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>값은 0.0과 1.0 사이 여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>예., 100 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>세부설명</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>성능 세부정보들</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>케쉬 계층들 상세설명들</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>이미지를 휴지통에 이동</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>보호가 만료되는 </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>보호되지 않음</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>날짜 형식 오류. "YYYY-MM-DD HH:mm:ss" 형식으로 지정하세요.</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>보호기간이 이미 만료되었습니다. 더 미래의 날짜를 선택하거나 공란으로 남겨두세요.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>이미지 옮기기</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>개관</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>타겟들</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>인증 탐색</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>사용자이름은 8~64자까지 길이의 문자들을 가져야 하며 그리고, 오직 , \'.\', \'@\', \'-\', \'_\', \':\' 등의 특수 문자들만을 포함가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>암호</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>공동 사용자</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>공통 암호</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>이용가능한 정보:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI 타겟이 이용 불가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>풀</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>데이타 풀</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>생성된</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>크기</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>오브젝트들</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>객체크기</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>준비된</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>이용불가</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>준비된 총계</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>스트라이핑 단위</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>스트라이핑 횟수</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>상위</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>블록 이름 접두사</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>순서</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>스냅삿</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>이미지</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>이 설정은 전역 값을 덮어씁니다.</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>글로벌</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>이것은 전역 값입니다. 이 이미지에 대해 이 옵션의 값이 설정되지 않았습니다.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' 와 \'@\' 문자는 사용불가입니다.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 이용가능한 rbd풀 없음 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 풀 선택 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>전용 데이타 풀들을 사용하세요</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>데이타 풀</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>RBD의 객체-데이타를 저장하고 있는 전용 풀</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>사이즈를 증가시켜야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>자세한</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>분산저장</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>분산저장단위</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 분산저장단위 선택 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>분산저장 개수가 정의되어 있으므로 이 필드는 필수입니다!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>분산저장단위는 객체크기보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>분산저장 갯수</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>분산저장 단위가 정의되어 있으므로 이 필드는 필수입니다!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>분산저장 갯수는 반드시 0보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>롤백하려고 합니다.</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>휴지통 비우기</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>모든</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>풀:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>풀 이름:</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>이미지 복구하기</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>복구를 위해</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>이미지들의 새로운 이름을 입력하고 클릭하세요</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>새로운 이름</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>폐기될</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>까지 보호됨</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 토폴로지</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>기본설정 값들로 부터 인자를 변경하는 것은 일반적으로 필요하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>설정들</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>백스토어</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>확인</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>고급설정들</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>타겟 IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN이 잘못된 패턴을 가지고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Key\n예를들면: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>추가 정보</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>이 타겟은 고급설정들을 수정했습니다.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>포털</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>포털 추가</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>이 이미지는 설정들을 수정했습니다. </target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>이미지 추가</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 인증</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>개시자들</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>개시자들</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>클라이언트 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>개시자 IQN은 유일해야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>사용자이름은 8~64자까지 길이의 문자들을 가져야 하며 그리고, 오직 , \'.\', \'@\', \'-\', \'_\', \':\' 등의 특수 문자들만 포함이 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>개시자는 하나의 그룹에 속해야 하고, 이미지는 그룹안에서 설정합니다.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>추가된 아이템들이 없음</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>게시자 추가</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>그룹들</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>그룹</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>그룹추가</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>휴지통</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>이슈들</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>동기화중</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>준비됨</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>풀 미러모드를 편집하기</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>상대방 클러스터들은 미러를 단절하기 전에 반드시 제거되어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>클러스터 이름</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>클러스터 이름이 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX 아이디</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX 아이디...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX 아이디가 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>모니터 주소들</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>콤마로 분리된 주소들...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>모니터 주소가 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 키</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64로 인코딩 된 키 ...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 키는 반드시 base64로 인코드 되어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>성능 카운터들을 사용 할 수 없음</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>데몬 목록들</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>성능 카운터</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>버킷데이타 적재 중</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>값이 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>선택한 이름이 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>소유자</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 사용자 선택 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>이용가능</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>색인형식</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>위치규칙</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>표시</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>최대 마커</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>버젼</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>마스터 버젼</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>수정된 시간</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>제로그룹</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>버킷 할당량</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>최대 크기</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>무제한</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>최대 객체들</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>사용자명</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 사용자명 선택 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>자동생성된 키</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>접근 키</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>비밀 키</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>전체 이름</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>전자우편 주소</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>유예되다.</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>시스템</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>최대 버킷들</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>보조사용자들</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>능력치들</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>사용자 할당량</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>보기</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>키들</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>형태</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>권한</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 권한 선택 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>보조사용자</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>선택한 보조사용자 아이디가 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>읽기, 쓰기</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>가득찬</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>스위프트 키</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>자동생선된 비밀</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>사용자 데이타 적재 중...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>사용자 데이타를 적재할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>선택된 사용자 아이디가 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>이것은 유효한 전자우편 주소가 아닙니다.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>선택한 전자우편 주소가 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>최대 버킷들</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>설정해제됨</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>커스텀</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 키</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>보조사용자가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>키가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>스위프트</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>능력치가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>무제한 크기</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>최대 크기</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>무제한 객체들</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>최대 객체들</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>입력된 값은 반드시 0보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>세부설명...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>권한들</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>역할들</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>암호 확인</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>암호 확인이 암호와 일치하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>전자우편</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>유효하지않는 전자우편.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>당신의 사용자로부터 "사용자 읽기 / 업데이트"권한을 제거하려고합니다.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>계속하면 모든 사용자에게 역할을 추가하거나 제거 할 수 없게됩니다.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>계속 진행하기를 원하십니까?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>도움말</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>문서</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>대하여</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>대쉬보드 설정</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>사용자 관리</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>로그인된 사용자</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>로그아웃</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>속성들 (OSD 맵)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>메타데이타 사용할 수 없음</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>메타데이타</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>성능 카운터</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>쓰기</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>읽기</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>히스토그램</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>현재 값들</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>최소</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>최대</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>소스</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>수준</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>수행시간에 갱신가능함(편집가능)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>테크들</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>열거형 값들</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>추가로 더보기</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>클러스터 상태</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>관리자 데몬들</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>오브젝트 게이트웨이들</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>메타데이타 서버들</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 게이트웨이들</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>클라이언트 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>클라이언트 처리량</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>클라이언트 읽기/쓰기</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>복구 처리량</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>세정작업</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>성능</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>원시용량</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>OSD당 PG들</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 상태들</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>용량</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>순위</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>현재</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>업데이트된 검색 인증</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>사용가능한 포탈들이 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>사용가능한 이미지들이 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>사용할 수있는 이미지가 없습니다. 대상에 이미지를 추가했는지 확인하십시오.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>사용할 수있는 개시자가 없습니다. 대상에 개시자를 추가했는지 확인하십시오.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>타겟</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>읽은 바이트들</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>쓰기 바이트들</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>읽기 Ops</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>쓰기 Ops</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O 이래로</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>인스탄스</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>이슈</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>진행중</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>편집모드</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>상대방 추가</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>상대방 편집</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>상대방 삭제</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>리더</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># 로컬</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># 원격</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>상대방 미러</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>키</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>딥 패턴</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>계층화</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>배타적인 락</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>오프젝트-맵(배타적인-락을 요구한다)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>저널링(배탁적인-락을 요구합니다.)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>보호안됨</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 스냅샷 롤백</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>롤백</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 스냅샷</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>삭제될 </target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>형태</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>버젼</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>호스트</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>루트</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>대기 데몬들</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>순위</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>데몬</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>활동</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>덴트리들</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>아이노드들</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>사용량</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>갱신된</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>이 값은 런타임에 업데이트 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>데몬들 / 클라이언트들은 모니터 구성 데이터베이스에서이 값을 가져 오지 않습니다. \'ceph config set ...\'을 통해이 옵션을 설정하는 것은 허락되지 않습니다. 이 옵션은 ceph.conf 또는 명령 줄을 통해 구성해야합니다.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>옵션은 데몬 시작 중에 만 적용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>옵션은 클러스터 생성할 때 만 영향을 줍니다.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>옵션은 데몬 생성할 때만 영향을줍니다.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>서비스</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>현재값</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>편집가능</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>사용가능</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>사용불가</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>재-접속 중, 기다려 주세요...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>공개 주소</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>열린 세션들</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>들어올 수 없는</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>이전에 마크 아웃 된 OSD는 시작시 다시 표시되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>나갈 수 없는</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD들은 구성된 간격 후에는 자동으로 표시되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>살아나지 않는</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD는 시작할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>죽일 수 없는</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>모니터가 OSD들의 다운을 표시하지 않도록 OSD 장애 보고서가 무시되고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>멈출</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>읽기와 쓰기를 멈춤</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>스크러빙 않됨</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>스크러빙이 비활성화되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>딥 스크럽 안됨</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>딥 스크러빙이 비활성되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>백필 없음</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG들의 백필이 일시중지 되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>복구 않됨</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG들의 복구가 일시중지 되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>비트단위 정렬</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>비트단위 정렬을 사용하세요</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>완전삭제된 스냅디렉토리들</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD들이 변화된 스냅셋을 가지고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>삭제된 복구들</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>피어링 대신 복구 중에 수행된 삭제물들</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 로그 하드 한계</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>pg 로그 길이에 하드 한계를 넣으세요</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>갱신된 OSD 플래그들</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>아웃</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>인</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>다운</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>표시</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 손실</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>손실 표시</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>완전제거</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>완전제거된</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>파괴된</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>삭제</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>읽은 바이트들</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>쓰여진 바이트들</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>읽기 ops</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>쓰기 ops</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>최대 백필들</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>최대 활성화를 복구하기</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>최대 단일 시작을 복구하기</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>잠자기를 복구하기</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>일</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>심각도</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>시작된</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>사용된</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>이용가능:</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>깨끗한</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>정상동작중</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>경고</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>알려지지 않은</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>정상</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>파일시스템들 없음</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>활성화된</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>대기중인</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>이용불가</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>활성화된 데몬들</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>정족수</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganesha 서비스가 설정되지 않음</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>전송</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 사용자</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 파일시스템</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(전역 구성에서 상속)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>전역 구성에서 상속</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>- 어떤 종류의 사용자 ID 스쿼시가 수행되는지 선택 -</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>사용가능한 데몬이 없읍니다.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>캐쉬모드</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>최소 퇴거 연령</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>최소 플러시 연령</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>목표 최대 바이트들</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>목표 최대 오브젝트들</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>추가된 응용프로그램 없음</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>응용프로그램 한계에 도달함</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>하나의 풀은 오직 네개의 응용프로그램 정의들을 가질 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target> \'_a-zA-Z0-9\' 문자들만 허락됨</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>최대 길이는 128글자이다.</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>필터 또는 추가된 응용프로그램들</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>응용프로그램 추가</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>Erasure 코드 프로파일</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>복제 크기</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>마지막 변경</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Erasure 코드화된 프로파일</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>크러쉬 룰셋</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>버킷</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>버킷들</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>사용자들</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>범위</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>읽기</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>만들기</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>시스템 롤</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>갱신된 사용자</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>계속</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>당신의 롤들이 변경되어 당신은 자동적으로 로그아웃되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>각각의 오브젝트들은 데이타-청크 부분들로 분리되어, 각기 다른 OSD에 보관됩니다.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>각 오브젝트들에 대한 코딩 청크를 계산하고 서로 다른 OSD에 저장합니다. \n코딩된 청크의 수는 데이터 손실없이 작동중지 되어 질 수있는 OSD의 숫자이기도합니다.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Jerasure 플러그인은 가장 일반적이고 유연한 플러그인으로,\n또한 Ceph erasure 코드 풀의 기본값이기도합니다.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>보다 유연한 기술은 reed_sol_van입니다 : k와 m을 설정하면 충분합니다. \ncauchy_good 기술은 빠를 수 있지만 패킷크기를 주의깊게 선택해야합니다. \nreed_sol_r6_op, liberation, blaum_roth, liber8tion은 모두 m = 2로만 구성 할 수 있다는 점에서 RAID-6에 해당합니다.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>인코딩은 한번에 바이트들 크기의 패킷에 대해 수행됩니다. 올바른 패킷 크기를 선택하는 것은 어렵습니다. jerasure 문서에는이 주제에 대한 광범위한 정보가 들어 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>jerasure 플러그인을 사용하면 삭제 된 코딩 된 객체가 여러 OSD에 저장 될 때 하나의 OSD가 손실되는 것을 복구하려면 다른 모든 OSD를 읽어야합니다. 예를 들어 jerasure가 k = 8 및 m = 4로 구성되어있는 경우 하나의 OSD를 잃어 버리면 11 명의 다른 사람들이 수리해야합니다.\nlrc erasure code plugin은 적은 양의 OSD를 사용하여 복구 할 수 있도록 로컬 패리티 청크를 만듭니다. 예를 들어, lrc가 k = 8, m = 4 및 l = 4로 구성된 경우 4 개의 OSD마다 추가 패리티 덩어리가 생성됩니다. 단일 OSD가 손실되면 11 개 대신 4 개의 OSD만으로 복구 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>코딩 및 데이터 청크를 크기 지역 집합으로 그룹화합니다. 예를 들어, k = 4 및 m = 2에 대해, 지역성 = 3 일 때 두 개의 세 그룹이 생성됩니다. 각 세트는 다른 세트의 청크를 읽지 않고도 복구 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>l로 정의 된 각 청크 집합이 저장되는 크러시 버킷의 유형입니다. 예를 들어 랙으로 설정하면 l 개의 청크 그룹이 각각 다른 랙에 배치됩니다. \n랙 선택 단계와 같은 CRUSH 규칙 단계를 만드는 데 사용됩니다. 설정되어 있지 않으면, 그러한 그룹화가 수행되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 플러그인은 ISA 라이브러리를 캡슐화합니다. 인텔 프로세서에서만 실행됩니다.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 플러그인은 두 개의 리드 솔로몬 형식으로 제공됩니다.\nreed_sol_van이 설정되면 Vandermonde, cauchy가 설정되면 Cauchy입니다.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec plugin은 다중 SHEC 라이브러리를 캡슐화합니다.\n           ceph가 리드 솔로몬 코드보다 더 효율적으로 데이터를 복구 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>각 데이터 청크가 계산 범위에 포함되는 패리티 청크의 수입니다. 이 수치는 내구성 측정기로 사용됩니다. 예를 들어, c = 2 인 경우 2 개의 OSD가 데이터 손실없이 중단 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSH 규칙의 첫 번째 단계에 사용 된 크러시 버킷의 이름입니다. 예를 들어 step은 기본값을 취합니다.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>동일한 실패 도메인을 가진 양동이에 두 개의 청크가 없는지 확인하십시오. 예를 들어 실패 도메인이 호스트 인 경우 두 개의 청크가 동일한 호스트에 저장되지 않습니다. 이 단계는 리프 호스트를 선택하는 단계와 같은 CRUSH 규칙 단계를 만드는 데 사용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>CRUSH지도에서 크래시 장치 클래스 이름을 사용하여 특정 클래스 (예 : ssd 또는 hdd)의 장치로 배치를 제한합니다.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>삭제 코드 플러그인이로드되는 디렉토리 이름을 설정하십시오.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>모든 작업들 허용</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>오직 서버를 수정하지 않는 작업들만 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>읽기와 쓰기 작업은 허용되지 않지만, 그외 모든 작업이 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>파일의 속성과 디렉토리 내용을 변경하는 읽기, 쓰기 또는 어떠한 작업은 허용되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>전혀 어떠한 접근도 허용되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 우선순위 선택 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>낮음</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>높음</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>정보</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>마지막 5분</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>지난 15분</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>지난 30분</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>지난 1시간(기본)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>지난 3시간</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>지난 6시간</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>지난 12시간</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>지난 24시간</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>어제</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>오늘</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>오늘 지금까지</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>그저께</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>지난 2일</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>이번 주 마지막날</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>전주</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>이번주</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>이번주 지금까지</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>지난 7일</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>지난 달</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>이번 달</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>이번 달 지금까지</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>지난 30일</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>지난 90일</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>지난 6개월</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>지난 1년</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>전년도</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>금년도</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>금년 지금까지</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>지난 2년</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>지난 5년</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>선택된 아이템 없음</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>다시 선택하기 위해 아이템 선택을 취소</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>선택 한계에 도달함</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>필터 테그들</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>베찌 추가</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>사용가능한 아이템 없음</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>복제</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>복사</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>딥 스크럽</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>단조로움</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>다운 표시</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>인 표시</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>손실 표시</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>아웃 표시</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>보호</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>이름변경</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>복구</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>휴지통으로 옮기기</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>보호않됨</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>삭제돔</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>복제된</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>복사된</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>평평하게 됨</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>완전삭제됨</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>복구됨</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>롤백됨</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>예</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>아니오</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>서비스 량</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 한계</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>원하는 초당 IO 바이트 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 제한</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>원하는 초당 IO 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>읽기 BPS 제한</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>원하는 초당 읽기 바이스 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>읽기 IOPS 한도</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>원하는 초당 읽기 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>쓰기 BPS 한도</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>원하는 초당 쓰기 바이트 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>쓰기 IOPS 제한</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>원하는 초당 쓰기 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>원하는 버스트 IO 바이트 한도 입니다.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>원하는 IO 작업의 버스트 한계입니다.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>읽기 BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>원하는 읽기 버스트 한계입니다.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>읽기 IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>원하는 읽기 작업의 버스트 한도입니다.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>쓰기 BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>쓰기 바이트의 원하는 버스트 한도.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>쓰기 IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>쓰기 바이트의 원하는 버스트 한도.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>수행중</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>수행</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>수행된</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>알려지지 않는 작업</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>생성하는 중</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>생성</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>갱신 중</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>갱신</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>삭제 중</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>복제중</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>복제</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>복사중</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>복사</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>평평하게 하는 중</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>평평함</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>롤백 중</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>롤백</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>옮기는 중</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>옮기기</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>옮겨짐</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>이미지를 찾을 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>복구중</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>복구</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>완전삭제 중</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>완전삭제</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>모든 풀들</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>피어가 포함되어 있기 때문에 미러링을 비활성화 할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"33Wh":function(t,e,n){var a=n("yoRg"),r=n("eDl+");t.exports=Object.keys||function(t){return a(t,r)}},"372+":function(t,e,n){var a=n("LaC8"),r=n("0GLT"),i=n("x3F9");t.exports=function(t){return"string"==typeof t||!r(t)&&i(t)&&"[object String]"==a(t)}},"38Bd":function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return r})),n.d(e,"d",(function(){return o}));var a=n("hpHm");class r{constructor(){this.animate=!1,this.max=100}}class i{constructor(t){this.isStacked=!1,this.addClass=!0,this.bars=[],this._max=100,Object.assign(this,t)}set animate(t){this._animate=t,this.bars.forEach(e=>{e.animate=t})}set striped(t){this._striped=t,this.bars.forEach(e=>{e.striped=t})}set value(t){this.isStacked=Array.isArray(t),this._value=t}get isBs3(){return Object(a.d)()}get max(){return this._max}set max(t){this._max=t,this.bars.forEach(t=>{t.recalculatePercentage()})}addBar(t){t.animate=this._animate,t.striped=this._striped,this.bars.push(t)}removeBar(t){this.bars.splice(this.bars.indexOf(t),1)}}class s{constructor(t,e,n){this.el=t,this.renderer=n,this.addClass=!0,this.percent=0,this.progress=e}get type(){return this._type}set type(t){this._type=t,this.applyTypeClasses()}get value(){return this._value}set value(t){(t||0===t)&&(this._value=t,this.recalculatePercentage())}get setBarWidth(){return this.recalculatePercentage(),this.percent}get isBs3(){return Object(a.d)()}ngOnInit(){this.progress.addBar(this)}ngOnDestroy(){this.progress.removeBar(this)}recalculatePercentage(){this.percent=+(this.value/this.progress.max*100).toFixed(2);const t=this.progress.bars.reduce((function(t,e){return t+e.percent}),0);t>100&&(this.percent-=t-100)}applyTypeClasses(){if(this._prevType){const t="bg-"+this._prevType;this.renderer.removeClass(this.el.nativeElement,"progress-bar-"+this._prevType),this.renderer.removeClass(this.el.nativeElement,t),this._prevType=null}if(this._type){const t="bg-"+this._type;this.renderer.addClass(this.el.nativeElement,"progress-bar-"+this._type),this.renderer.addClass(this.el.nativeElement,t),this._prevType=this._type}}}class o{static forRoot(){return{ngModule:o,providers:[r]}}}},"3E1r":function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात"===e?t<4?t:t+12:"सुबह"===e?t:"दोपहर"===e?t>=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n("wd/R"))},"3ENo":function(t,e,n){var a=n("Ytn0");t.exports=function(t){return a(this,t).has(t)}},"3N8a":function(t,e,n){"use strict";var a=n("quSY");class r extends a.a{constructor(t,e){super()}schedule(t,e=0){return this}}n.d(e,"a",(function(){return i}));class i extends r{constructor(t,e){super(t,e),this.scheduler=t,this.work=e,this.pending=!1}schedule(t,e=0){if(this.closed)return this;this.state=t;const n=this.id,a=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(a,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(a,this.id,e),this}requestAsyncId(t,e,n=0){return setInterval(t.flush.bind(t,this),n)}recycleAsyncId(t,e,n=0){if(null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)}execute(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(t,e){let n=!1,a=void 0;try{this.work(t)}catch(r){n=!0,a=!!r&&r||new Error(r)}if(n)return this.unsubscribe(),a}_unsubscribe(){const t=this.id,e=this.scheduler,n=e.actions,a=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==a&&n.splice(a,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null}}},"3a3P":function(t,e,n){var a=n("2zzJ");t.exports=function(t){return function(e){return a(e,t)}}},"3bBZ":function(t,e,n){var a=n("2oRo"),r=n("/byt"),i=n("4mDm"),s=n("kRJp"),o=n("tiKp"),u=o("iterator"),l=o("toStringTag"),d=i.values;for(var c in r){var f=a[c],h=f&&f.prototype;if(h){if(h[u]!==d)try{s(h,u,d)}catch(p){h[u]=d}if(h[l]||s(h,l,c),r[c])for(var g in i)if(h[g]!==i[g])try{s(h,g,i[g])}catch(p){h[g]=i[g]}}}},"43VP":function(t,e,n){var a=n("SDUG"),r=n("TAQX")(a);t.exports=r},"4DD9":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){let e=!1;switch(t){case!0:case 1:case"y":case"yes":case"t":case"true":case"on":case"1":e=!0}return e}}},"4Dmd":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},i=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},s=function(){function t(t,e,n){this.renderer=t,this.templateRef=e,this.viewContainerRef=n}return Object.defineProperty(t.prototype,"isOpen",{set:function(t){t?(this._show(),this.isEnabled&&!1===this._isOpen&&this._animateOpen()):this.isEnabled?this._animateClose():this._hide(),this._isOpen=!!t},enumerable:!0,configurable:!0}),t.prototype._show=function(){this.innerElement||(this.innerElement=this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0])},t.prototype._hide=function(){this.viewContainerRef.clear(),this.innerElement=null},t.prototype._animateOpen=function(){var t=this,e=this.animateSpeed,n=this.animateAcceleration,a=0;this.renderer.setStyle(this.innerElement,"max-height","0"),setTimeout((function(){var r=setInterval((function(){if(!t._isOpen||!t.innerElement)return clearInterval(r);var i=Math.round(a+=e);t.renderer.setStyle(t.innerElement,"max-height",i+"px");var s=t.innerElement.getBoundingClientRect?t.innerElement.getBoundingClientRect().height:0;e*=n,n*=1.005,s<i&&(t.renderer.setStyle(t.innerElement,"max-height",null),clearInterval(r))}),17)}))},t.prototype._animateClose=function(){var t=this;if(this.innerElement)var e=this.animateSpeed,n=this.animateAcceleration,a=this.innerElement.getBoundingClientRect().height,r=setInterval((function(){if(t._isOpen||!t.innerElement)return clearInterval(r);t.renderer.setStyle(t.innerElement,"max-height",(a-=e)+"px"),e*=n,n*=1.005,a<=0&&(t.viewContainerRef.clear(),t.innerElement=null,clearInterval(r))}),17)},r([Object(a.Input)("treeAnimateOpenSpeed"),i("design:type",Number)],t.prototype,"animateSpeed",void 0),r([Object(a.Input)("treeAnimateOpenAcceleration"),i("design:type",Number)],t.prototype,"animateAcceleration",void 0),r([Object(a.Input)("treeAnimateOpenEnabled"),i("design:type",Boolean)],t.prototype,"isEnabled",void 0),r([Object(a.Input)("treeAnimateOpen"),i("design:type",Boolean),i("design:paramtypes",[Boolean])],t.prototype,"isOpen",null),r([Object(a.Directive)({selector:"[treeAnimateOpen]"}),i("design:paramtypes",[a.Renderer2,a.TemplateRef,a.ViewContainerRef])],t)}()},"4HWh":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("KOzp"),s=n("z/SZ"),o=n("2uy1");n("p4Cf"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return d}));var u=a["ɵcrt"]({encapsulation:0,styles:[["i[_ngcontent-%COMP%]{color:#2b99a8;cursor:pointer;padding-left:4px}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[],[[8,"className",0],[8,"innerHTML",1]],null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,(function(t,e){var n=e.component;t(e,0,0,n.class,n.html)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,[["popoverTpl",2]],null,0,null,l)),(t()(),a["ɵeld"](1,16777216,null,null,4,"i",[["aria-hidden","true"],["container","body"],["placement","bottom"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==n.preventDefault()&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](4,1),a["ɵdid"](5,212992,null,0,i.c,[i.a,a.ElementRef,a.Renderer2,a.ViewContainerRef,s.a,o.a],{popover:[0,"popover"],placement:[1,"placement"],outsideClick:[2,"outsideClick"],container:[3,"container"]},null)],(function(t,e){var n=t(e,4,0,e.component.icons.questionCircle);t(e,3,0,n),t(e,5,0,a["ɵnov"](e,0),"bottom",!0,"body")}),null)}},"4I5i":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t})()},"4MV3":function(t,e,n){!function(t){"use strict";var e={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};t.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(t){return t.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(t,e){return 12===t&&(t=0),"રાત"===e?t<4?t:t+12:"સવાર"===e?t:"બપોર"===e?t>=10?t:t+12:"સાંજ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"રાત":t<10?"સવાર":t<17?"બપોર":t<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n("wd/R"))},"4WOD":function(t,e,n){var a=n("UTVS"),r=n("ewvW"),i=n("93I0"),s=n("4Xet"),o=i("IE_PROTO"),u=Object.prototype;t.exports=s?Object.getPrototypeOf:function(t){return t=r(t),a(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},"4Xet":function(t,e,n){var a=n("0Dky");t.exports=!a((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},"4a5m":function(t,e,n){var a=n("zAeO");t.exports=function(t){var e=a(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},"4dOw":function(t,e,n){!function(t){"use strict";t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},"4l63":function(t,e,n){var a=n("I+eb"),r=n("wg0c");a({global:!0,forced:parseInt!=r},{parseInt:r})},"4mDm":function(t,e,n){"use strict";var a=n("/GqU"),r=n("RNIs"),i=n("P4y1"),s=n("afO8"),o=n("fdAy"),u=s.set,l=s.getterFor("Array Iterator");t.exports=o(Array,"Array",(function(t,e){u(this,{type:"Array Iterator",target:a(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,n=t.kind,a=t.index++;return!e||a>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:a,done:!1}:"values"==n?{value:e[a],done:!1}:{value:[a,e[a]],done:!1}}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},"4syw":function(t,e,n){var a=n("busE");t.exports=function(t,e,n){for(var r in e)a(t,r,e[r],n);return t}},"5+tZ":function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("ZUHj"),r=n("l7GE"),i=n("51Dv"),s=n("lJxs"),o=n("Cfvw");function u(t,e,n=Number.POSITIVE_INFINITY){return"function"==typeof e?a=>a.pipe(u((n,a)=>Object(o.a)(t(n,a)).pipe(Object(s.a)((t,r)=>e(n,t,a,r))),n)):("number"==typeof e&&(n=e),e=>e.lift(new l(t,n)))}class l{constructor(t,e=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=e}call(t,e){return e.subscribe(new d(t,this.project,this.concurrent))}}class d extends r.a{constructor(t,e,n=Number.POSITIVE_INFINITY){super(t),this.project=e,this.concurrent=n,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)}_tryNext(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(a){return void this.destination.error(a)}this.active++,this._innerSub(e,t,n)}_innerSub(t,e,n){const r=new i.a(this,e,n),s=this.destination;s.add(r);const o=Object(a.a)(this,t,void 0,void 0,r);o!==r&&s.add(o)}_complete(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()}notifyNext(t,e,n,a,r){this.destination.next(e)}notifyComplete(t){const e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}},"51Dv":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");class r extends a.a{constructor(t,e,n){super(),this.parent=t,this.outerValue=e,this.outerIndex=n,this.index=0}_next(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)}_error(t){this.parent.notifyError(t,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}},"5DBd":function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a&&!1!==e(t[n],n,t););return t}},"5EpR":function(t,e,n){var a=n("jNLg");t.exports=function(t){return t?(t=a(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},"5itS":function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},"6+QB":function(t,e,n){!function(t){"use strict";t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},"6B0Y":function(t,e,n){!function(t){"use strict";var e={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(t){return"ល្ងាច"===t},meridiem:function(t,e,n){return t<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(t){return t.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n("wd/R"))},"6II+":function(t,e,n){var a=n("R8cQ");t.exports=function(t){return null==t?"":a(t)}},"6JNq":function(t,e,n){var a=n("UTVS"),r=n("Vu81"),i=n("Bs8V"),s=n("m/L8");t.exports=function(t,e){for(var n=r(e),o=s.f,u=i.f,l=0;l<n.length;l++){var d=n[l];a(t,d)||o(t,d,u(e,d))}}},"6LWA":function(t,e,n){var a=n("xrYK");t.exports=Array.isArray||function(t){return"Array"==a(t)}},"6MU2":function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},"6MUB":function(t,e,n){"use strict";var a=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,r){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(r){var i=encodeURIComponent(a(r))+n;return Array.isArray(t[r])?t[r].map((function(t){return i+encodeURIComponent(a(t))})).join(e):i+encodeURIComponent(a(t[r]))})).join(e):r?encodeURIComponent(a(r))+n+encodeURIComponent(a(t)):""}},"6VoE":function(t,e,n){var a=n("tiKp"),r=n("P4y1"),i=a("iterator"),s=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||s[i]===t)}},"6eui":function(t,e,n){var a=n("hmSm"),r=n("5itS"),i=n("l2xC"),s=Object.prototype.hasOwnProperty;t.exports=function(t){if(!a(t))return i(t);var e=r(t),n=[];for(var o in t)("constructor"!=o||!e&&s.call(t,o))&&n.push(o);return n}},"6qls":function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("tz6c");class a{constructor(t,e){this.docService=t,this.i18n=e,this.docText=this.i18n("documentation")}ngOnInit(){this.docService.subscribeOnce(this.section,t=>{this.docUrl=t})}}},"7+rY":function(t,e,n){var a=n("bQrF"),r=n("MOZO"),i=n("Uies"),s=n("hmSm"),o=n("Wv1A");t.exports=function(t,e,n,u){if(!s(t))return t;for(var l=-1,d=(e=r(e,t)).length,c=d-1,f=t;null!=f&&++l<d;){var h=o(e[l]),g=n;if("__proto__"===h||"constructor"===h||"prototype"===h)return t;if(l!=c){var p=f[h];void 0===(g=u?u(p,h,f):void 0)&&(g=s(p)?p:i(e[l+1])?[]:{})}a(f,h,g),f=f[h]}return t}},"77kF":function(t,e,n){var a=n("bQrF"),r=n("ZPW6");t.exports=function(t,e,n,i){var s=!n;n||(n={});for(var o=-1,u=e.length;++o<u;){var l=e[o],d=i?i(n[l],t[l],l,n,t):void 0;void 0===d&&(d=t[l]),s?r(n,l,d):a(n,l,d)}return n}},"7BjC":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[t+"sekundi",t+"sekundit"],m:["ühe minuti","üks minut"],mm:[t+" minuti",t+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[t+" tunni",t+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[t+" kuu",t+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[t+" aasta",t+" aastat"]};return e?r[n][2]?r[n][2]:r[n][1]:a?r[n][0]:r[n][1]}t.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d päeva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"7Igq":function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},"7Nlv":function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(!e(t[n],n,t))return!1;return!0}},"7VGY":function(t,e,n){var a=n("7Nlv"),r=n("BkBO"),i=n("l9nr"),s=n("0GLT"),o=n("QUkU");t.exports=function(t,e,n){var u=s(t)?a:r;return n&&o(t,e,n)&&(e=void 0),u(t,i(e,3))}},"7aV9":function(t,e,n){!function(t){"use strict";t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n("wd/R"))},"7o/Q":function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("n6bG"),r=n("gRHU"),i=n("quSY"),s=n("2QA8"),o=n("2fFW"),u=n("NJ4a");class l extends i.a{constructor(t,e,n){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=r.a;break;case 1:if(!t){this.destination=r.a;break}if("object"==typeof t){t instanceof l?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new d(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new d(this,t,e,n)}}[s.a](){return this}static create(t,e,n){const a=new l(t,e,n);return a.syncErrorThrowable=!1,a}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class d extends l{constructor(t,e,n,i){let s;super(),this._parentSubscriber=t;let o=this;Object(a.a)(e)?s=e:e&&(s=e.next,n=e.error,i=e.complete,e!==r.a&&(o=Object.create(e),Object(a.a)(o.unsubscribe)&&this.add(o.unsubscribe.bind(o)),o.unsubscribe=this.unsubscribe.bind(this))),this._context=o,this._next=s,this._error=n,this._complete=i}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:e}=this;o.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:e}=this,{useDeprecatedSynchronousErrorHandling:n}=o.a;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):Object(u.a)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;Object(u.a)(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const e=()=>this._complete.call(this._context);o.a.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,e){try{t.call(this._context,e)}catch(n){if(this.unsubscribe(),o.a.useDeprecatedSynchronousErrorHandling)throw n;Object(u.a)(n)}}__tryOrSetError(t,e,n){if(!o.a.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(a){return o.a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=a,t.syncErrorThrown=!0,!0):(Object(u.a)(a),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}},"7qid":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return f}));var a=n("8Y7J"),r=n("38Bd"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](0,[a["ɵncd"](null,0)],null,null)}var u=a["ɵcrt"]({encapsulation:0,styles:["[_nghost-%COMP%] {\n      width: 100%;\n      display: flex;\n    }"],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bar",[["aria-valuemin","0"],["role","progressbar"]],[[2,"progress-bar-animated",null],[2,"progress-bar-striped",null],[2,"active",null],[1,"aria-valuenow",0],[1,"aria-valuetext",0],[1,"aria-valuemax",0],[4,"height","%"],[4,"width","%"],[2,"progress-bar",null]],null,null,o,s)),a["ɵdid"](1,245760,null,0,r.a,[a.ElementRef,r.b,a.Renderer2],{type:[0,"type"],value:[1,"value"]},null),a["ɵncd"](0,0)],(function(t,e){var n=e.component;t(e,1,0,n.type,n._value)}),(function(t,e){t(e,0,0,!a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).striped,a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).value,a["ɵnov"](e,1).percent?a["ɵnov"](e,1).percent.toFixed(0)+"%":"",a["ɵnov"](e,1).max,"100",a["ɵnov"](e,1).setBarWidth,a["ɵnov"](e,1).addClass)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bar",[["aria-valuemin","0"],["role","progressbar"]],[[2,"progress-bar-animated",null],[2,"progress-bar-striped",null],[2,"active",null],[1,"aria-valuenow",0],[1,"aria-valuetext",0],[1,"aria-valuemax",0],[4,"height","%"],[4,"width","%"],[2,"progress-bar",null]],null,null,o,s)),a["ɵdid"](1,245760,null,0,r.a,[a.ElementRef,r.b,a.Renderer2],{type:[0,"type"],value:[1,"value"]},null),(t()(),a["ɵted"](2,0,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.type,e.context.$implicit.value)}),(function(t,e){t(e,0,0,!a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).striped,a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).value,a["ɵnov"](e,1).percent?a["ɵnov"](e,1).percent.toFixed(0)+"%":"",a["ɵnov"](e,1).max,"100",a["ɵnov"](e,1).setBarWidth,a["ɵnov"](e,1).addClass),t(e,2,0,e.context.$implicit.label)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](1,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component._value)}),null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](3,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,!n.isStacked),t(e,3,0,n.isStacked)}),null)}},"8+Q7":function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,a=new t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(a.index=t.index,a.input=t.input),a}},"8+is":function(t,e,n){var a=n("IWUC"),r=n("0nKi"),i=n("L0Z1"),s=i&&i.isSet,o=s?r(s):a;t.exports=o},"8/+R":function(t,e,n){!function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n("wd/R"))},"85J/":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=/ceph version\s+([^ ]+)\s+\(.+\)/.exec(t);return e?e[1]:t}}},"8SuI":function(t,e,n){t.exports=n("K3g9")},"8Tpr":function(t,e,n){var a=n("r2+u"),r=n("0nKi"),i=n("L0Z1"),s=i&&i.isMap,o=s?r(s):a;t.exports=o},"8V0S":function(t,e,n){var a=n("6MU2"),r=Math.max;t.exports=function(t,e,n){return e=r(void 0===e?t.length-1:e,0),function(){for(var i=arguments,s=-1,o=r(i.length-e,0),u=Array(o);++s<o;)u[s]=i[e+s];s=-1;for(var l=Array(e+1);++s<e;)l[s]=i[s];return l[e]=n(u),a(t,this,l)}}},"8Y7J":function(t,e,n){"use strict";n.r(e);var a=n("XNiG"),r=n("quSY"),i=n("HDdC"),s=n("VRyK"),o=n("7o/Q");function u(){return function(t){return t.lift(new l(t))}}class l{constructor(t){this.connectable=t}call(t,e){const{connectable:n}=this;n._refCount++;const a=new d(t,n),r=e.subscribe(a);return a.closed||(a.connection=n.connect()),r}}class d extends o.a{constructor(t,e){super(t),this.connectable=e}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);const{connection:n}=this,a=t._connection;this.connection=null,!a||n&&a!==n||a.unsubscribe()}}class c extends i.a{constructor(t,e){super(),this.source=t,this.subjectFactory=e,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new r.a,t.add(this.source.subscribe(new h(this.getSubject(),this))),t.closed&&(this._connection=null,t=r.a.EMPTY)),t}refCount(){return u()(this)}}const f=(()=>{const t=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}})();class h extends a.b{constructor(t,e){super(t),this.connectable=e}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}}}function g(){return new a.a}n.d(e,"ɵangular_packages_core_core_q",(function(){return fv})),n.d(e,"ɵangular_packages_core_core_n",(function(){return lv})),n.d(e,"ɵangular_packages_core_core_o",(function(){return dv})),n.d(e,"ɵangular_packages_core_core_p",(function(){return cv})),n.d(e,"ɵangular_packages_core_core_r",(function(){return hv})),n.d(e,"ɵangular_packages_core_core_f",(function(){return xm})),n.d(e,"ɵangular_packages_core_core_l",(function(){return lf})),n.d(e,"ɵangular_packages_core_core_m",(function(){return bf})),n.d(e,"ɵangular_packages_core_core_k",(function(){return Wy})),n.d(e,"ɵangular_packages_core_core_j",(function(){return Uy})),n.d(e,"ɵangular_packages_core_core_b",(function(){return ut})),n.d(e,"ɵangular_packages_core_core_a",(function(){return at})),n.d(e,"ɵangular_packages_core_core_c",(function(){return yu})),n.d(e,"ɵangular_packages_core_core_d",(function(){return su})),n.d(e,"ɵangular_packages_core_core_e",(function(){return fu})),n.d(e,"ɵangular_packages_core_core_i",(function(){return Py})),n.d(e,"ɵangular_packages_core_core_s",(function(){return ty})),n.d(e,"ɵangular_packages_core_core_u",(function(){return Jm})),n.d(e,"ɵangular_packages_core_core_t",(function(){return $m})),n.d(e,"ɵangular_packages_core_core_x",(function(){return Xm})),n.d(e,"ɵangular_packages_core_core_v",(function(){return Zm})),n.d(e,"ɵangular_packages_core_core_w",(function(){return Qm})),n.d(e,"ɵangular_packages_core_core_ba",(function(){return Sg})),n.d(e,"ɵangular_packages_core_core_bb",(function(){return xa})),n.d(e,"ɵangular_packages_core_core_bc",(function(){return Ae})),n.d(e,"ɵangular_packages_core_core_bd",(function(){return Ve})),n.d(e,"ɵangular_packages_core_core_be",(function(){return rn})),n.d(e,"ɵangular_packages_core_core_bm",(function(){return ca})),n.d(e,"ɵangular_packages_core_core_bl",(function(){return ve})),n.d(e,"ɵangular_packages_core_core_g",(function(){return $s})),n.d(e,"ɵangular_packages_core_core_h",(function(){return Js})),n.d(e,"ɵangular_packages_core_core_bg",(function(){return Cr})),n.d(e,"ɵangular_packages_core_core_bk",(function(){return wt})),n.d(e,"ɵangular_packages_core_core_bh",(function(){return x})),n.d(e,"ɵangular_packages_core_core_bi",(function(){return _})),n.d(e,"ɵangular_packages_core_core_bn",(function(){return R})),n.d(e,"ɵangular_packages_core_core_y",(function(){return dg})),n.d(e,"ɵangular_packages_core_core_z",(function(){return Gf})),n.d(e,"createPlatform",(function(){return Sy})),n.d(e,"assertPlatform",(function(){return Ny})),n.d(e,"destroyPlatform",(function(){return Cy})),n.d(e,"getPlatform",(function(){return Ry})),n.d(e,"PlatformRef",(function(){return Ay})),n.d(e,"ApplicationRef",(function(){return Ey})),n.d(e,"createPlatformFactory",(function(){return Iy})),n.d(e,"NgProbeToken",(function(){return wy})),n.d(e,"enableProdMode",(function(){return Ka})),n.d(e,"isDevMode",(function(){return Wa})),n.d(e,"APP_ID",(function(){return vm})),n.d(e,"PACKAGE_ROOT_URL",(function(){return Im})),n.d(e,"PLATFORM_INITIALIZER",(function(){return Om})),n.d(e,"PLATFORM_ID",(function(){return wm})),n.d(e,"APP_BOOTSTRAP_LISTENER",(function(){return Sm})),n.d(e,"APP_INITIALIZER",(function(){return mm})),n.d(e,"ApplicationInitStatus",(function(){return ym})),n.d(e,"DebugElement",(function(){return ov})),n.d(e,"DebugEventListener",(function(){return Hy})),n.d(e,"DebugNode",(function(){return sv})),n.d(e,"asNativeElements",(function(){return Ky})),n.d(e,"getDebugNode",(function(){return rv})),n.d(e,"Testability",(function(){return py})),n.d(e,"TestabilityRegistry",(function(){return by})),n.d(e,"setTestabilityGetter",(function(){return yy})),n.d(e,"TRANSLATIONS",(function(){return Rm})),n.d(e,"TRANSLATIONS_FORMAT",(function(){return Am})),n.d(e,"LOCALE_ID",(function(){return Cm})),n.d(e,"MissingTranslationStrategy",(function(){return km})),n.d(e,"ApplicationModule",(function(){return gv})),n.d(e,"wtfCreateScope",(function(){return ny})),n.d(e,"wtfLeave",(function(){return ay})),n.d(e,"wtfStartTimeRange",(function(){return ry})),n.d(e,"wtfEndTimeRange",(function(){return iy})),n.d(e,"Type",(function(){return no})),n.d(e,"EventEmitter",(function(){return tb})),n.d(e,"ErrorHandler",(function(){return Da})),n.d(e,"Sanitizer",(function(){return vr})),n.d(e,"SecurityContext",(function(){return yr})),n.d(e,"Attribute",(function(){return N})),n.d(e,"ANALYZE_FOR_ENTRY_COMPONENTS",(function(){return vu})),n.d(e,"ContentChild",(function(){return Tu})),n.d(e,"ContentChildren",(function(){return _u})),n.d(e,"Query",(function(){return xu})),n.d(e,"ViewChild",(function(){return wu})),n.d(e,"ViewChildren",(function(){return Ou})),n.d(e,"Component",(function(){return nm})),n.d(e,"Directive",(function(){return em})),n.d(e,"HostBinding",(function(){return sm})),n.d(e,"HostListener",(function(){return om})),n.d(e,"Input",(function(){return rm})),n.d(e,"Output",(function(){return im})),n.d(e,"Pipe",(function(){return am})),n.d(e,"NgModule",(function(){return gm})),n.d(e,"CUSTOM_ELEMENTS_SCHEMA",(function(){return Pa})),n.d(e,"NO_ERRORS_SCHEMA",(function(){return Ma})),n.d(e,"ViewEncapsulation",(function(){return Ot})),n.d(e,"Version",(function(){return of})),n.d(e,"VERSION",(function(){return uf})),n.d(e,"InjectFlags",(function(){return C})),n.d(e,"ɵɵdefineInjectable",(function(){return k})),n.d(e,"defineInjectable",(function(){return E})),n.d(e,"ɵɵdefineInjector",(function(){return L})),n.d(e,"forwardRef",(function(){return G})),n.d(e,"resolveForwardRef",(function(){return V})),n.d(e,"Injectable",(function(){return So})),n.d(e,"Injector",(function(){return Bo})),n.d(e,"ɵɵinject",(function(){return rt})),n.d(e,"inject",(function(){return it})),n.d(e,"INJECTOR",(function(){return $})),n.d(e,"ReflectiveInjector",(function(){return mu})),n.d(e,"ResolvedReflectiveFactory",(function(){return lu})),n.d(e,"ReflectiveKey",(function(){return eu})),n.d(e,"InjectionToken",(function(){return K})),n.d(e,"Inject",(function(){return T})),n.d(e,"Optional",(function(){return O})),n.d(e,"Self",(function(){return w})),n.d(e,"SkipSelf",(function(){return S})),n.d(e,"Host",(function(){return I})),n.d(e,"NgZone",(function(){return uy})),n.d(e,"ɵNoopNgZone",(function(){return gy})),n.d(e,"RenderComponentType",(function(){return Zc})),n.d(e,"Renderer",(function(){return Xc})),n.d(e,"Renderer2",(function(){return af})),n.d(e,"RendererFactory2",(function(){return ef})),n.d(e,"RendererStyleFlags2",(function(){return nf})),n.d(e,"RootRenderer",(function(){return tf})),n.d(e,"COMPILER_OPTIONS",(function(){return Hm})),n.d(e,"Compiler",(function(){return Ym})),n.d(e,"CompilerFactory",(function(){return Um})),n.d(e,"ModuleWithComponentFactories",(function(){return Dm})),n.d(e,"ComponentFactory",(function(){return Gc})),n.d(e,"ɵComponentFactory",(function(){return Gc})),n.d(e,"ComponentRef",(function(){return Fc})),n.d(e,"ComponentFactoryResolver",(function(){return Yc})),n.d(e,"ElementRef",(function(){return Kc})),n.d(e,"NgModuleFactory",(function(){return ht})),n.d(e,"NgModuleRef",(function(){return ft})),n.d(e,"NgModuleFactoryLoader",(function(){return Dy})),n.d(e,"getModuleFactory",(function(){return qy})),n.d(e,"QueryList",(function(){return nb})),n.d(e,"SystemJsNgModuleLoader",(function(){return Vy})),n.d(e,"SystemJsNgModuleLoaderConfig",(function(){return Fy})),n.d(e,"TemplateRef",(function(){return wf})),n.d(e,"ViewContainerRef",(function(){return Nf})),n.d(e,"EmbeddedViewRef",(function(){return Yy})),n.d(e,"ViewRef",(function(){return By})),n.d(e,"ChangeDetectionStrategy",(function(){return xt})),n.d(e,"ChangeDetectorRef",(function(){return Xs})),n.d(e,"DefaultIterableDiffer",(function(){return cf})),n.d(e,"IterableDiffers",(function(){return vf})),n.d(e,"KeyValueDiffers",(function(){return xf})),n.d(e,"SimpleChange",(function(){return Tc})),n.d(e,"WrappedValue",(function(){return Mu})),n.d(e,"platformCore",(function(){return uv})),n.d(e,"ɵALLOW_MULTIPLE_PLATFORMS",(function(){return Oy})),n.d(e,"ɵAPP_ID_RANDOM_PROVIDER",(function(){return _m})),n.d(e,"ɵdefaultIterableDiffers",(function(){return Tf})),n.d(e,"ɵdefaultKeyValueDiffers",(function(){return Of})),n.d(e,"ɵdevModeEqual",(function(){return Pu})),n.d(e,"ɵisListLikeIterable",(function(){return qu})),n.d(e,"ɵChangeDetectorStatus",(function(){return _t})),n.d(e,"ɵisDefaultChangeDetectionStrategy",(function(){return Tt})),n.d(e,"ɵConsole",(function(){return Nm})),n.d(e,"ɵsetCurrentInjector",(function(){return et})),n.d(e,"ɵgetInjectableDef",(function(){return D})),n.d(e,"ɵAPP_ROOT",(function(){return Co})),n.d(e,"ɵDEFAULT_LOCALE_ID",(function(){return Dg})),n.d(e,"ɵivyEnabled",(function(){return Lm})),n.d(e,"ɵCodegenComponentFactoryResolver",(function(){return Hc})),n.d(e,"ɵclearResolutionOfComponentResourcesQueue",(function(){return Ru})),n.d(e,"ɵresolveComponentResources",(function(){return Su})),n.d(e,"ɵReflectionCapabilities",(function(){return uo})),n.d(e,"ɵRenderDebugInfo",(function(){return Qc})),n.d(e,"ɵ_sanitizeHtml",(function(){return br})),n.d(e,"ɵ_sanitizeStyle",(function(){return Tr})),n.d(e,"ɵ_sanitizeUrl",(function(){return Qa})),n.d(e,"ɵglobal",(function(){return U})),n.d(e,"ɵlooseIdentical",(function(){return Du})),n.d(e,"ɵstringify",(function(){return j})),n.d(e,"ɵmakeDecorator",(function(){return y})),n.d(e,"ɵisObservable",(function(){return ed})),n.d(e,"ɵisPromise",(function(){return td})),n.d(e,"ɵclearOverrides",(function(){return Bx})),n.d(e,"ɵinitServicesIfNeeded",(function(){return rx})),n.d(e,"ɵoverrideComponentView",(function(){return zx})),n.d(e,"ɵoverrideProvider",(function(){return Vx})),n.d(e,"ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR",(function(){return mg})),n.d(e,"ɵgetLocalePluralCase",(function(){return Eg})),n.d(e,"ɵfindLocaleData",(function(){return Lg})),n.d(e,"ɵLOCALE_DATA",(function(){return Cg})),n.d(e,"ɵLocaleDataIndex",(function(){return Rg})),n.d(e,"ɵɵattribute",(function(){return Wu})),n.d(e,"ɵɵattributeInterpolate1",(function(){return al})),n.d(e,"ɵɵattributeInterpolate2",(function(){return rl})),n.d(e,"ɵɵattributeInterpolate3",(function(){return il})),n.d(e,"ɵɵattributeInterpolate4",(function(){return sl})),n.d(e,"ɵɵattributeInterpolate5",(function(){return ol})),n.d(e,"ɵɵattributeInterpolate6",(function(){return ul})),n.d(e,"ɵɵattributeInterpolate7",(function(){return ll})),n.d(e,"ɵɵattributeInterpolate8",(function(){return dl})),n.d(e,"ɵɵattributeInterpolateV",(function(){return cl})),n.d(e,"ɵɵdefineBase",(function(){return zt})),n.d(e,"ɵɵdefineComponent",(function(){return Pt})),n.d(e,"ɵɵdefineDirective",(function(){return Bt})),n.d(e,"ɵɵdefinePipe",(function(){return Yt})),n.d(e,"ɵɵdefineNgModule",(function(){return Ft})),n.d(e,"ɵdetectChanges",(function(){return fl})),n.d(e,"ɵrenderComponent",(function(){return bc})),n.d(e,"ɵRender3ComponentFactory",(function(){return Ig})),n.d(e,"ɵRender3ComponentRef",(function(){return Ng})),n.d(e,"ɵɵdirectiveInject",(function(){return Tl})),n.d(e,"ɵɵinjectAttribute",(function(){return Ol})),n.d(e,"ɵɵinjectPipeChangeDetectorRef",(function(){return Sb})),n.d(e,"ɵɵgetFactoryOf",(function(){return Ra})),n.d(e,"ɵɵgetInheritedFactory",(function(){return Aa})),n.d(e,"ɵɵsetComponentScope",(function(){return Mt})),n.d(e,"ɵɵsetNgModuleScope",(function(){return Gt})),n.d(e,"ɵɵtemplateRefExtractor",(function(){return wb})),n.d(e,"ɵɵProvidersFeature",(function(){return jc})),n.d(e,"ɵɵInheritDefinitionFeature",(function(){return Nc})),n.d(e,"ɵɵNgOnChangesFeature",(function(){return Oc})),n.d(e,"ɵLifecycleHooksFeature",(function(){return xc})),n.d(e,"ɵRender3NgModuleRef",(function(){return Lp})),n.d(e,"ɵmarkDirty",(function(){return hl})),n.d(e,"ɵNgModuleFactory",(function(){return Dp})),n.d(e,"ɵNO_CHANGE",(function(){return ci})),n.d(e,"ɵɵcontainer",(function(){return gl})),n.d(e,"ɵɵnextContext",(function(){return od})),n.d(e,"ɵɵelementStart",(function(){return Bl})),n.d(e,"ɵɵnamespaceHTML",(function(){return gn})),n.d(e,"ɵɵnamespaceMathML",(function(){return hn})),n.d(e,"ɵɵnamespaceSVG",(function(){return fn})),n.d(e,"ɵɵelement",(function(){return Hl})),n.d(e,"ɵɵlistener",(function(){return nd})),n.d(e,"ɵɵtext",(function(){return Od})),n.d(e,"ɵɵtextInterpolate",(function(){return Sd})),n.d(e,"ɵɵtextInterpolate1",(function(){return Id})),n.d(e,"ɵɵtextInterpolate2",(function(){return Nd})),n.d(e,"ɵɵtextInterpolate3",(function(){return Cd})),n.d(e,"ɵɵtextInterpolate4",(function(){return Rd})),n.d(e,"ɵɵtextInterpolate5",(function(){return Ad})),n.d(e,"ɵɵtextInterpolate6",(function(){return kd})),n.d(e,"ɵɵtextInterpolate7",(function(){return Ed})),n.d(e,"ɵɵtextInterpolate8",(function(){return Ld})),n.d(e,"ɵɵtextInterpolateV",(function(){return Dd})),n.d(e,"ɵɵembeddedViewStart",(function(){return Zl})),n.d(e,"ɵɵprojection",(function(){return fd})),n.d(e,"ɵɵpipeBind1",(function(){return Wp})),n.d(e,"ɵɵpipeBind2",(function(){return Kp})),n.d(e,"ɵɵpipeBind3",(function(){return $p})),n.d(e,"ɵɵpipeBind4",(function(){return Jp})),n.d(e,"ɵɵpipeBindV",(function(){return Zp})),n.d(e,"ɵɵpureFunction0",(function(){return Mp})),n.d(e,"ɵɵpureFunction1",(function(){return qp})),n.d(e,"ɵɵpureFunction2",(function(){return jp})),n.d(e,"ɵɵpureFunction3",(function(){return Fp})),n.d(e,"ɵɵpureFunction4",(function(){return Gp})),n.d(e,"ɵɵpureFunction5",(function(){return Vp})),n.d(e,"ɵɵpureFunction6",(function(){return zp})),n.d(e,"ɵɵpureFunction7",(function(){return Bp})),n.d(e,"ɵɵpureFunction8",(function(){return Yp})),n.d(e,"ɵɵpureFunctionV",(function(){return Hp})),n.d(e,"ɵɵgetCurrentView",(function(){return Xl})),n.d(e,"ɵgetDirectives",(function(){return sc})),n.d(e,"ɵgetHostElement",(function(){return uc})),n.d(e,"ɵɵrestoreView",(function(){return Ge})),n.d(e,"ɵɵcontainerRefreshStart",(function(){return bl})),n.d(e,"ɵɵcontainerRefreshEnd",(function(){return ml})),n.d(e,"ɵɵqueryRefresh",(function(){return cb})),n.d(e,"ɵɵviewQuery",(function(){return hb})),n.d(e,"ɵɵstaticViewQuery",(function(){return fb})),n.d(e,"ɵɵstaticContentQuery",(function(){return mb})),n.d(e,"ɵɵloadViewQuery",(function(){return pb})),n.d(e,"ɵɵcontentQuery",(function(){return bb})),n.d(e,"ɵɵloadContentQuery",(function(){return vb})),n.d(e,"ɵɵelementEnd",(function(){return Yl})),n.d(e,"ɵɵhostProperty",(function(){return Xd})),n.d(e,"ɵɵproperty",(function(){return Hu})),n.d(e,"ɵɵpropertyInterpolate",(function(){return hd})),n.d(e,"ɵɵpropertyInterpolate1",(function(){return gd})),n.d(e,"ɵɵpropertyInterpolate2",(function(){return pd})),n.d(e,"ɵɵpropertyInterpolate3",(function(){return bd})),n.d(e,"ɵɵpropertyInterpolate4",(function(){return md})),n.d(e,"ɵɵpropertyInterpolate5",(function(){return yd})),n.d(e,"ɵɵpropertyInterpolate6",(function(){return vd})),n.d(e,"ɵɵpropertyInterpolate7",(function(){return xd})),n.d(e,"ɵɵpropertyInterpolate8",(function(){return _d})),n.d(e,"ɵɵpropertyInterpolateV",(function(){return Td})),n.d(e,"ɵɵupdateSyntheticHostBinding",(function(){return tc})),n.d(e,"ɵɵcomponentHostSyntheticListener",(function(){return ad})),n.d(e,"ɵɵprojectionDef",(function(){return ld})),n.d(e,"ɵɵreference",(function(){return xl})),n.d(e,"ɵɵenableBindings",(function(){return Ce})),n.d(e,"ɵɵdisableBindings",(function(){return Re})),n.d(e,"ɵɵallocHostVars",(function(){return ku})),n.d(e,"ɵɵelementContainerStart",(function(){return Kl})),n.d(e,"ɵɵelementContainerEnd",(function(){return $l})),n.d(e,"ɵɵelementContainer",(function(){return Jl})),n.d(e,"ɵɵstyling",(function(){return wl})),n.d(e,"ɵɵstyleMap",(function(){return Al})),n.d(e,"ɵɵstyleSanitizer",(function(){return Sl})),n.d(e,"ɵɵclassMap",(function(){return kl})),n.d(e,"ɵɵclassMapInterpolate1",(function(){return Pd})),n.d(e,"ɵɵclassMapInterpolate2",(function(){return Md})),n.d(e,"ɵɵclassMapInterpolate3",(function(){return qd})),n.d(e,"ɵɵclassMapInterpolate4",(function(){return jd})),n.d(e,"ɵɵclassMapInterpolate5",(function(){return Fd})),n.d(e,"ɵɵclassMapInterpolate6",(function(){return Gd})),n.d(e,"ɵɵclassMapInterpolate7",(function(){return Vd})),n.d(e,"ɵɵclassMapInterpolate8",(function(){return zd})),n.d(e,"ɵɵclassMapInterpolateV",(function(){return Bd})),n.d(e,"ɵɵstyleProp",(function(){return Il})),n.d(e,"ɵɵstylePropInterpolate1",(function(){return Yd})),n.d(e,"ɵɵstylePropInterpolate2",(function(){return Hd})),n.d(e,"ɵɵstylePropInterpolate3",(function(){return Ud})),n.d(e,"ɵɵstylePropInterpolate4",(function(){return Wd})),n.d(e,"ɵɵstylePropInterpolate5",(function(){return Kd})),n.d(e,"ɵɵstylePropInterpolate6",(function(){return $d})),n.d(e,"ɵɵstylePropInterpolate7",(function(){return Jd})),n.d(e,"ɵɵstylePropInterpolate8",(function(){return Zd})),n.d(e,"ɵɵstylePropInterpolateV",(function(){return Qd})),n.d(e,"ɵɵstylingApply",(function(){return Pl})),n.d(e,"ɵɵclassProp",(function(){return Cl})),n.d(e,"ɵɵelementHostAttrs",(function(){return Ul})),n.d(e,"ɵɵselect",(function(){return Oi})),n.d(e,"ɵɵtextBinding",(function(){return wd})),n.d(e,"ɵɵtemplate",(function(){return pl})),n.d(e,"ɵɵembeddedViewEnd",(function(){return Ql})),n.d(e,"ɵstore",(function(){return vl})),n.d(e,"ɵɵload",(function(){return _l})),n.d(e,"ɵɵpipe",(function(){return Up})),n.d(e,"ɵwhenRendered",(function(){return _c})),n.d(e,"ɵɵi18n",(function(){return dp})),n.d(e,"ɵɵi18nAttributes",(function(){return cp})),n.d(e,"ɵɵi18nExp",(function(){return gp})),n.d(e,"ɵɵi18nStart",(function(){return np})),n.d(e,"ɵɵi18nEnd",(function(){return sp})),n.d(e,"ɵɵi18nApply",(function(){return pp})),n.d(e,"ɵɵi18nPostprocess",(function(){return ip})),n.d(e,"ɵi18nConfigureLocalize",(function(){return Tp})),n.d(e,"ɵɵi18nLocalize",(function(){return wp})),n.d(e,"ɵsetLocaleId",(function(){return Ip})),n.d(e,"ɵsetClassMetadata",(function(){return Pp})),n.d(e,"ɵɵresolveWindow",(function(){return Tn})),n.d(e,"ɵɵresolveDocument",(function(){return On})),n.d(e,"ɵɵresolveBody",(function(){return wn})),n.d(e,"ɵcompileComponent",(function(){return zb})),n.d(e,"ɵcompileDirective",(function(){return Bb})),n.d(e,"ɵcompileNgModule",(function(){return Eb})),n.d(e,"ɵcompileNgModuleDefs",(function(){return Lb})),n.d(e,"ɵpatchComponentDefWithScope",(function(){return jb})),n.d(e,"ɵresetCompiledComponents",(function(){return Mb})),n.d(e,"ɵflushModuleScopingQueueAsMuchAsPossible",(function(){return Ab})),n.d(e,"ɵtransitiveScopesFor",(function(){return Fb})),n.d(e,"ɵcompilePipe",(function(){return tm})),n.d(e,"ɵɵsanitizeHtml",(function(){return Or})),n.d(e,"ɵɵsanitizeStyle",(function(){return wr})),n.d(e,"ɵɵdefaultStyleSanitizer",(function(){return Ar})),n.d(e,"ɵɵsanitizeScript",(function(){return Nr})),n.d(e,"ɵɵsanitizeUrl",(function(){return Sr})),n.d(e,"ɵɵsanitizeResourceUrl",(function(){return Ir})),n.d(e,"ɵɵsanitizeUrlOrResourceUrl",(function(){return Rr})),n.d(e,"ɵbypassSanitizationTrustHtml",(function(){return Fa})),n.d(e,"ɵbypassSanitizationTrustStyle",(function(){return Ga})),n.d(e,"ɵbypassSanitizationTrustScript",(function(){return Va})),n.d(e,"ɵbypassSanitizationTrustUrl",(function(){return za})),n.d(e,"ɵbypassSanitizationTrustResourceUrl",(function(){return Ba})),n.d(e,"ɵgetLContext",(function(){return Dr})),n.d(e,"ɵNG_ELEMENT_ID",(function(){return Lt})),n.d(e,"ɵNG_COMPONENT_DEF",(function(){return Nt})),n.d(e,"ɵNG_DIRECTIVE_DEF",(function(){return Ct})),n.d(e,"ɵNG_PIPE_DEF",(function(){return Rt})),n.d(e,"ɵNG_MODULE_DEF",(function(){return At})),n.d(e,"ɵNG_BASE_DEF",(function(){return Et})),n.d(e,"ɵNG_INJECTABLE_DEF",(function(){return M})),n.d(e,"ɵNG_INJECTOR_DEF",(function(){return q})),n.d(e,"ɵcompileNgModuleFactory__POST_R3__",(function(){return _y})),n.d(e,"ɵisBoundToModule__POST_R3__",(function(){return Ty})),n.d(e,"ɵSWITCH_COMPILE_COMPONENT__POST_R3__",(function(){return um})),n.d(e,"ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__",(function(){return lm})),n.d(e,"ɵSWITCH_COMPILE_PIPE__POST_R3__",(function(){return dm})),n.d(e,"ɵSWITCH_COMPILE_NGMODULE__POST_R3__",(function(){return pm})),n.d(e,"ɵgetDebugNode__POST_R3__",(function(){return av})),n.d(e,"ɵSWITCH_COMPILE_INJECTABLE__POST_R3__",(function(){return Io})),n.d(e,"ɵSWITCH_IVY_ENABLED__POST_R3__",(function(){return Em})),n.d(e,"ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__",(function(){return to})),n.d(e,"ɵCompiler_compileModuleSync__POST_R3__",(function(){return Mm})),n.d(e,"ɵCompiler_compileModuleAsync__POST_R3__",(function(){return jm})),n.d(e,"ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__",(function(){return Gm})),n.d(e,"ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__",(function(){return zm})),n.d(e,"ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__",(function(){return $c})),n.d(e,"ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__",(function(){return Sf})),n.d(e,"ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__",(function(){return Cf})),n.d(e,"ɵSWITCH_RENDERER2_FACTORY__POST_R3__",(function(){return rf})),n.d(e,"ɵgetModuleFactory__POST_R3__",(function(){return My})),n.d(e,"ɵregisterNgModuleType",(function(){return Ap})),n.d(e,"ɵpublishGlobalUtil",(function(){return pc})),n.d(e,"ɵpublishDefaultGlobalUtils",(function(){return gc})),n.d(e,"ɵcreateInjector",(function(){return Do})),n.d(e,"ɵINJECTOR_IMPL__POST_R3__",(function(){return Vo})),n.d(e,"ɵregisterModuleFactory",(function(){return Cp})),n.d(e,"ɵEMPTY_ARRAY",(function(){return Th})),n.d(e,"ɵEMPTY_MAP",(function(){return Oh})),n.d(e,"ɵand",(function(){return pv})),n.d(e,"ɵccf",(function(){return Mh})),n.d(e,"ɵcmf",(function(){return Yx})),n.d(e,"ɵcrt",(function(){return Uf})),n.d(e,"ɵdid",(function(){return og})),n.d(e,"ɵeld",(function(){return bv})),n.d(e,"ɵgetComponentViewDefinitionFactory",(function(){return qh})),n.d(e,"ɵinlineInterpolate",(function(){return xh})),n.d(e,"ɵinterpolate",(function(){return vh})),n.d(e,"ɵmod",(function(){return Rh})),n.d(e,"ɵmpd",(function(){return Ch})),n.d(e,"ɵncd",(function(){return Iv})),n.d(e,"ɵnov",(function(){return Kh})),n.d(e,"ɵpid",(function(){return ug})),n.d(e,"ɵprd",(function(){return lg})),n.d(e,"ɵpad",(function(){return Rv})),n.d(e,"ɵpod",(function(){return Av})),n.d(e,"ɵppd",(function(){return Cv})),n.d(e,"ɵqud",(function(){return _v})),n.d(e,"ɵted",(function(){return Ev})),n.d(e,"ɵunv",(function(){return Hf})),n.d(e,"ɵvid",(function(){return Pv}));const p="__annotations__",b="__parameters__",m="__prop__metadata__";function y(t,e,n,a,r){const i=v(e);function s(...t){if(this instanceof s)return i.call(this,...t),this;const e=new s(...t);return function(n){return r&&r(n,...t),(n.hasOwnProperty(p)?n[p]:Object.defineProperty(n,p,{value:[]})[p]).push(e),a&&a(n),n}}return n&&(s.prototype=Object.create(n.prototype)),s.prototype.ngMetadataName=t,s.annotationCls=s,s}function v(t){return function(...e){if(t){const n=t(...e);for(const t in n)this[t]=n[t]}}}function x(t,e,n){const a=v(e);function r(...t){if(this instanceof r)return a.apply(this,t),this;const e=new r(...t);return n.annotation=e,n;function n(t,n,a){const r=t.hasOwnProperty(b)?t[b]:Object.defineProperty(t,b,{value:[]})[b];for(;r.length<=a;)r.push(null);return(r[a]=r[a]||[]).push(e),t}}return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=t,r.annotationCls=r,r}function _(t,e,n,a){const r=v(e);function i(...t){if(this instanceof i)return r.apply(this,t),this;const e=new i(...t);return function(n,r){const i=n.constructor,s=i.hasOwnProperty(m)?i[m]:Object.defineProperty(i,m,{value:{}})[m];s[r]=s.hasOwnProperty(r)&&s[r]||[],s[r].unshift(e),a&&a(n,r,...t)}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=t,i.annotationCls=i,i}const T=x("Inject",t=>({token:t})),O=x("Optional"),w=x("Self"),S=x("SkipSelf"),I=x("Host"),N=x("Attribute",t=>({attributeName:t}));var C=function(t){return t[t.Default=0]="Default",t[t.Host=1]="Host",t[t.Self=2]="Self",t[t.SkipSelf=4]="SkipSelf",t[t.Optional=8]="Optional",t}({});function R(t){for(let e in t)if(t[e]===R)return e;throw Error("Could not find renamed property on target object.")}function A(t,e){for(const n in e)e.hasOwnProperty(n)&&!t.hasOwnProperty(n)&&(t[n]=e[n])}function k(t){return{token:t.token,providedIn:t.providedIn||null,factory:t.factory,value:void 0}}const E=k;function L(t){return{factory:t.factory,providers:t.providers||[],imports:t.imports||[]}}function D(t){const e=t[M];return e&&e.token===t?e:null}function P(t){return t&&t.hasOwnProperty(q)?t[q]:null}const M=R({ngInjectableDef:R}),q=R({ngInjectorDef:R});function j(t){if("string"==typeof t)return t;if(t instanceof Array)return"["+t.map(j).join(", ")+"]";if(null==t)return""+t;if(t.overriddenName)return""+t.overriddenName;if(t.name)return""+t.name;const e=t.toString();if(null==e)return""+e;const n=e.indexOf("\n");return-1===n?e:e.substring(0,n)}const F=R({__forward_ref__:R});function G(t){return t.__forward_ref__=G,t.toString=function(){return j(this())},t}function V(t){const e=t;return"function"==typeof e&&e.hasOwnProperty(F)&&e.__forward_ref__===G?e():t}const z="undefined"!=typeof globalThis&&globalThis,B="undefined"!=typeof window&&window,Y="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,H="undefined"!=typeof global&&global,U=z||H||B||Y;function W(){const t=U.ng;if(!t||!t.ɵcompilerFacade)throw new Error("Angular JIT compilation failed: '@angular/compiler' not loaded!\n  - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\n  - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\n  - Alternatively provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.");return t.ɵcompilerFacade}class K{constructor(t,e){this._desc=t,this.ngMetadataName="InjectionToken",this.ngInjectableDef=void 0,"number"==typeof e?this.__NG_ELEMENT_ID__=e:void 0!==e&&(this.ngInjectableDef=k({token:this,providedIn:e.providedIn||"root",factory:e.factory}))}toString(){return"InjectionToken "+this._desc}}const $=new K("INJECTOR",-1),J=new Object,Z=/\n/gm,Q=R({provide:String,useValue:R});let X,tt=void 0;function et(t){const e=tt;return tt=t,e}function nt(t){const e=X;return X=t,e}function at(t,e=C.Default){if(void 0===tt)throw new Error("inject() must be called from an injection context");return null===tt?st(t,void 0,e):tt.get(t,e&C.Optional?null:void 0,e)}function rt(t,e=C.Default){return(X||at)(t,e)}const it=rt;function st(t,e,n){const a=D(t);if(a&&"root"==a.providedIn)return void 0===a.value?a.value=a.factory():a.value;if(n&C.Optional)return null;if(void 0!==e)return e;throw new Error(`Injector: NOT_FOUND [${j(t)}]`)}function ot(t){const e=[];for(let n=0;n<t.length;n++){const a=V(t[n]);if(Array.isArray(a)){if(0===a.length)throw new Error("Arguments array must have arguments.");let t=void 0,n=C.Default;for(let e=0;e<a.length;e++){const r=a[e];r instanceof O||"Optional"===r.ngMetadataName||r===O?n|=C.Optional:r instanceof S||"SkipSelf"===r.ngMetadataName||r===S?n|=C.SkipSelf:r instanceof w||"Self"===r.ngMetadataName||r===w?n|=C.Self:t=r instanceof T||r===T?r.token:r}e.push(rt(t,n))}else e.push(rt(a))}return e}class ut{get(t,e=J){if(e===J){const e=new Error(`NullInjectorError: No provider for ${j(t)}!`);throw e.name="NullInjectorError",e}return e}}function lt(t,e,n,a){const r=t.ngTempTokenPath;throw e.__source&&r.unshift(e.__source),t.message=dt("\n"+t.message,r,n,a),t.ngTokenPath=r,t.ngTempTokenPath=null,t}function dt(t,e,n,a=null){t=t&&"\n"===t.charAt(0)&&"ɵ"==t.charAt(1)?t.substr(2):t;let r=j(e);if(e instanceof Array)r=e.map(j).join(" -> ");else if("object"==typeof e){let t=[];for(let n in e)if(e.hasOwnProperty(n)){let a=e[n];t.push(n+":"+("string"==typeof a?JSON.stringify(a):j(a)))}r=`{${t.join(", ")}}`}return`${n}${a?"("+a+")":""}[${r}]: ${t.replace(Z,"\n  ")}`}const ct={"ɵɵdefineInjectable":k,"ɵɵdefineInjector":L,"ɵɵinject":rt,"ɵɵgetFactoryOf":function(t){const e=t,n=D(e)||P(e);return n&&void 0!==n.factory?n.factory:null}};class ft{}class ht{}function gt(t,e){for(let n=0;n<t.length;n++)e.push(t[n])}function pt(t,e){void 0===e&&(e=t);for(let n=0;n<t.length;n++){let a=t[n];Array.isArray(a)?(e===t&&(e=t.slice(0,n)),pt(a,e)):e!==t&&e.push(a)}return e}function bt(t,e){t.forEach(t=>Array.isArray(t)?bt(t,e):e(t))}function mt(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function yt(t,e){return e>=t.length-1?t.pop():t.splice(e,1)[0]}function vt(t){throw new Error("ASSERTION ERROR: "+t)}const xt=function(){var t={OnPush:0,Default:1};return t[t.OnPush]="OnPush",t[t.Default]="Default",t}(),_t=function(){var t={CheckOnce:0,Checked:1,CheckAlways:2,Detached:3,Errored:4,Destroyed:5};return t[t.CheckOnce]="CheckOnce",t[t.Checked]="Checked",t[t.CheckAlways]="CheckAlways",t[t.Detached]="Detached",t[t.Errored]="Errored",t[t.Destroyed]="Destroyed",t}();function Tt(t){return null==t||t===xt.Default}const Ot=function(){var t={Emulated:0,Native:1,None:2,ShadowDom:3};return t[t.Emulated]="Emulated",t[t.Native]="Native",t[t.None]="None",t[t.ShadowDom]="ShadowDom",t}();function wt(t){return""+{toString:t}}const St={},It=[],Nt=R({ngComponentDef:R}),Ct=R({ngDirectiveDef:R}),Rt=R({ngPipeDef:R}),At=R({ngModuleDef:R}),kt=R({ngLocaleIdDef:R}),Et=R({ngBaseDef:R}),Lt=R({__NG_ELEMENT_ID__:R});let Dt=0;function Pt(t){const e=t.type,n=e.prototype,a={},r={type:e,providersResolver:null,consts:t.consts,vars:t.vars,factory:t.factory,template:t.template||null,ngContentSelectors:t.ngContentSelectors,hostBindings:t.hostBindings||null,contentQueries:t.contentQueries||null,declaredInputs:a,inputs:null,outputs:null,exportAs:t.exportAs||null,onChanges:null,onInit:n.ngOnInit||null,doCheck:n.ngDoCheck||null,afterContentInit:n.ngAfterContentInit||null,afterContentChecked:n.ngAfterContentChecked||null,afterViewInit:n.ngAfterViewInit||null,afterViewChecked:n.ngAfterViewChecked||null,onDestroy:n.ngOnDestroy||null,onPush:t.changeDetection===xt.OnPush,directiveDefs:null,pipeDefs:null,selectors:t.selectors,viewQuery:t.viewQuery||null,features:t.features||null,data:t.data||{},encapsulation:t.encapsulation||Ot.Emulated,id:"c",styles:t.styles||It,_:null,setInput:null,schemas:t.schemas||null,tView:null};return r._=wt(()=>{const n=t.directives,i=t.features,s=t.pipes;r.id+=Dt++,r.inputs=Vt(t.inputs,a),r.outputs=Vt(t.outputs),i&&i.forEach(t=>t(r)),r.directiveDefs=n?()=>("function"==typeof n?n():n).map(qt):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(jt):null,e.hasOwnProperty(M)||(e[M]=k({token:e,factory:t.factory}))}),r}function Mt(t,e,n){const a=t.ngComponentDef;a.directiveDefs=()=>e.map(qt),a.pipeDefs=()=>n.map(jt)}function qt(t){return Ht(t)||Ut(t)}function jt(t){return Wt(t)}function Ft(t){return{type:t.type,bootstrap:t.bootstrap||It,declarations:t.declarations||It,imports:t.imports||It,exports:t.exports||It,transitiveCompileScopes:null,schemas:t.schemas||null,id:t.id||null}}function Gt(t,e){return wt(()=>{const n=$t(t,!0);n.declarations=e.declarations||It,n.imports=e.imports||It,n.exports=e.exports||It})}function Vt(t,e){if(null==t)return St;const n={};for(const a in t)if(t.hasOwnProperty(a)){let r=t[a],i=r;Array.isArray(r)&&(i=r[1],r=r[0]),n[r]=a,e&&(e[r]=i)}return n}function zt(t){const e={};return{inputs:Vt(t.inputs,e),declaredInputs:e,outputs:Vt(t.outputs),viewQuery:t.viewQuery||null,contentQueries:t.contentQueries||null,hostBindings:t.hostBindings||null}}const Bt=Pt;function Yt(t){return{name:t.name,factory:t.factory,pure:!1!==t.pure,onDestroy:t.type.prototype.ngOnDestroy||null}}function Ht(t){return t[Nt]||null}function Ut(t){return t[Ct]||null}function Wt(t){return t[Rt]||null}function Kt(t){return t[Et]||null}function $t(t,e){const n=t[At]||null;if(!n&&!0===e)throw new Error(`Type ${j(t)} does not have 'ngModuleDef' property.`);return n}function Jt(t){return Array.isArray(t)&&"object"==typeof t[1]}function Zt(t){return Array.isArray(t)&&!0===t[1]}function Qt(t){return 0!=(4&t.flags)}function Xt(t){return 1==(1&t.flags)}function te(t){return null!==t.template}function ee(t){return 0!=(512&t[2])}class ne{constructor(t,e,n){this.factory=t,this.resolving=!1,this.canSeeViewProviders=e,this.injectImpl=n}}function ae(t,e,n,a,r,i){const{onChanges:s,onInit:o,doCheck:u}=e;r>=0&&(!n.preOrderHooks||r===n.preOrderHooks.length)&&(s||o||u)&&(n.preOrderHooks||(n.preOrderHooks=[])).push(a),i>=0&&(!n.preOrderCheckHooks||i===n.preOrderCheckHooks.length)&&(s||u)&&(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(a),s&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,s)),o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(-t,o),u&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,u))}function re(t,e){if(t.firstTemplatePass)for(let n=e.directiveStart,a=e.directiveEnd;n<a;n++){const e=t.data[n];e.afterContentInit&&(t.contentHooks||(t.contentHooks=[])).push(-n,e.afterContentInit),e.afterContentChecked&&((t.contentHooks||(t.contentHooks=[])).push(n,e.afterContentChecked),(t.contentCheckHooks||(t.contentCheckHooks=[])).push(n,e.afterContentChecked)),e.afterViewInit&&(t.viewHooks||(t.viewHooks=[])).push(-n,e.afterViewInit),e.afterViewChecked&&((t.viewHooks||(t.viewHooks=[])).push(n,e.afterViewChecked),(t.viewCheckHooks||(t.viewCheckHooks=[])).push(n,e.afterViewChecked)),null!=e.onDestroy&&(t.destroyHooks||(t.destroyHooks=[])).push(n,e.onDestroy)}}function ie(t,e,n,a){n||se(t,e.preOrderHooks,e.preOrderCheckHooks,n,0,void 0!==a?a:null)}function se(t,e,n,a,r,i){if(a)return;const s=(3&t[2])===r?e:n;s&&function(t,e,n,a){const r=null!=a?a:-1;let i=0;for(let s=void 0!==a?65535&t[18]:0;s<e.length;s++)if("number"==typeof e[s+1]){if(i=e[s],null!=a&&i>=a)break}else e[s]<0&&(t[18]+=65536),(i<r||-1==r)&&(oe(t,n,e,s),t[18]=(4294901760&t[18])+s+2),s++}(t,s,r,i),null==i&&(3&t[2])===r&&3!==r&&(t[2]&=1023,t[2]+=1)}function oe(t,e,n,a){const r=n[a]<0,i=n[a+1],s=t[r?-n[a]:n[a]];r?t[2]>>10<t[18]>>16&&(3&t[2])===e&&(t[2]+=1024,i.call(s)):i.call(s)}let ue=null;const le=new Map;let de,ce=null;function fe(t,e){return ce&&t===ce||(ce=t,e&&(ue=le.get(t)||null),ue=ue||{classesBitMask:0,classesIndex:1,stylesBitMask:0,stylesIndex:1}),ue}function he(){ue=null,ce=null}function ge(t){for(;Array.isArray(t);)t=t[0];return t}function pe(t,e){return ge(e[t+19])}function be(t,e){return ge(e[t.index])}function me(t,e){const n=t.index;return-1==n?null:ge(e[n])}function ye(t,e){return e[1].data[t+19]}function ve(t,e){return t[e+19]}function xe(t,e){const n=e[t];return Jt(n)?n:n[0]}function _e(t){return t.__ngContext__}function Te(t){const e=_e(t);return e?Array.isArray(e)?e:e.lView:null}function Oe(t){t[18]=0}let we,Se=null;function Ie(t){Se=t}function Ne(){return we}function Ce(){we=!0}function Re(){we=!1}function Ae(){return Le}let ke,Ee,Le,De=1,Pe=0,Me=0;function qe(t=null){on!==t&&(ln(null==t?-1:t),De=null==t?0:1,Pe=0,Me=0)}function je(){De+=1+Me,Pe=0,Me=0}function Fe(t){Pe+=t,Me=Math.max(Me,Pe)}function Ge(t){We=t}function Ve(){return ke}function ze(t,e){ke=t,Ee=e}function Be(t,e){ke=t,Le=e}function Ye(){return Ee}function He(){Ee=!1}function Ue(t=Le){return 4==(4&t[2])}let We=null,Ke=!1;function $e(){return Ke}function Je(t){Ke=t}let Ze=-1;function Qe(){return Ze}function Xe(t){Ze=t}let tn=0;function en(){return tn}function nn(t){tn=t}function an(t,e){const n=Le;return t&&(Ze=t[1].bindingStartIndex),ke=e,Ee=!0,Le=We=t,n}function rn(t=1){return We=function(t,e){for(;t>0;)e=e[16],t--;return e}(t,We),We[9]}function sn(t,e){const n=Le[1];if(Ue(Le))Le[2]&=-5;else try{Oe(Le),e&&se(Le,n.viewHooks,n.viewCheckHooks,Ke,2,void 0)}finally{Le[2]&=-73,Le[7]=n.bindingStartIndex}an(t,null)}let on=-1;function un(){return on}function ln(t){on=t,he()}let dn,cn=null;function fn(){cn="http://www.w3.org/2000/svg"}function hn(){cn="http://www.w3.org/1998/MathML/"}function gn(){pn()}function pn(){cn=null}function bn(t){dn=t}function mn(){return dn}function yn(t,e){return!(t!=t&&e!=e)&&t!==e}function vn(t){return"string"==typeof t?t:null==t?"":""+t}function xn(t){return"function"==typeof t?t.name||t.toString():"object"==typeof t&&null!=t&&"function"==typeof t.type?t.type.name||t.type.toString():vn(t)}const _n=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(U))();function Tn(t){return{name:"window",target:t.ownerDocument.defaultView}}function On(t){return{name:"document",target:t.ownerDocument}}function wn(t){return{name:"body",target:t.ownerDocument.body}}function Sn(t){return t.indexOf("�")>=0}function In(t){return t instanceof Function?t():t}function Nn(t,e){0===e?t[2]>0&&function(t){Rn(t,2|Cn(t))}(t):t[2]=e}function Cn(t){return t[1]}function Rn(t,e){t[1]=e}function An(t,e){return t[e+2]}function kn(t,e){return 1&t[e+0]}function En(t,e){return(1&kn(t,e))>0}function Ln(t,e){return t[e+0]>>1}function Dn(t,e,n){const a=kn(t,e);t[e+0]=a|n<<1}function Pn(t,e){return t[e+1]}function Mn(t,e,n){return t[e+3+n]}function qn(t,e){return!(!t||e!==t[2])}function jn(t){return(1&Cn(t))>0}function Fn(t){return(2&Cn(t))>0}function Gn(t){return 6+t[4]}function Vn(t,e){let n=Array.isArray(t)?t[0]:t,a=Array.isArray(e)?e[0]:e;return n instanceof String&&(n=n.toString()),a instanceof String&&(a=a.toString()),yn(n,a)}function zn(t){return null!=t&&""!==t}function Bn(t,e,n=" "){return t+(e.length&&t.length?n:"")+e}function Yn(t){return t.replace(/[a-z][A-Z]/g,t=>t.charAt(0)+"-"+t.charAt(1)).toLowerCase()}function Hn(t){return Un(t)?t[0]:t}function Un(t){return Array.isArray(t)&&t.length>=6&&"string"!=typeof t[1]}function Wn(t){const e=Hn(t);return e&&e[0]||""}function Kn(t){return 0!=(8&t.flags)}function $n(t){return 0!=(16&t.flags)}function Jn(t,e){return t[e+0]}function Zn(t,e,n){t[e+1]=n}function Qn(t,e){return t[e+1]}const Xn=function(){var t={Important:1,DashCase:2};return t[t.Important]="Important",t[t.DashCase]="DashCase",t}();function ta(t){return!!t.listen}const ea={createRenderer:(t,e)=>document};function na(t,e){const n=Ae()[12],a=ta(n);let r=0;for(;r<e.length;){const i=e[r];if("number"==typeof i){if(0!==i)break;r++;const s=e[r++],o=e[r++],u=e[r++];a?n.setAttribute(t,o,u,s):t.setAttributeNS(s,o,u)}else{const s=i,o=e[++r];ra(s)?a&&n.setProperty(t,s,o):a?n.setAttribute(t,s,o):t.setAttribute(s,o),r++}}return r}function aa(t){return 3===t||4===t||6===t}function ra(t){return"@"===t[0]}function ia(t){return-1!==t}function sa(t){return 32767&t}function oa(t){return t>>16}function ua(t,e){let n=oa(t),a=e;for(;n>0;)a=a[16],n--;return a}function la(t){const e=t[3];return Zt(e)?e[3]:e}function da(t){let e=t[6];for(;null!==e&&2===e.type;)e=(t=t[16])[6];return t}function ca(t){return function(t){let e=Jt(t)?t:Te(t);for(;e&&!(512&e[2]);)e=la(e);return e}(t)[9]}let fa=!0;function ha(t){const e=fa;return fa=t,e}let ga=0;function pa(t,e){const n=ma(t,e);if(-1!==n)return n;const a=e[1];a.firstTemplatePass&&(t.injectorIndex=e.length,ba(a.data,t),ba(e,null),ba(a.blueprint,null));const r=ya(t,e),i=sa(r),s=ua(r,e),o=t.injectorIndex;if(ia(r)){const t=s[1].data;for(let n=0;n<8;n++)e[o+n]=s[i+n]|t[i+n]}return e[o+8]=r,o}function ba(t,e){t.push(0,0,0,0,0,0,0,0,e)}function ma(t,e){return-1===t.injectorIndex||t.parent&&t.parent.injectorIndex===t.injectorIndex||null==e[t.injectorIndex+8]?-1:t.injectorIndex}function ya(t,e){if(t.parent&&-1!==t.parent.injectorIndex)return t.parent.injectorIndex;let n=e[6],a=1;for(;n&&-1===n.injectorIndex;)n=(e=e[16])?e[6]:null,a++;return n?n.injectorIndex|a<<16:-1}function va(t,e,n){!function(t,e,n){let a="string"!=typeof n?n[Lt]:n.charCodeAt(0)||0;null==a&&(a=n[Lt]=ga++);const r=255&a,i=1<<r,s=64&r,o=32&r,u=e.data;128&r?s?o?u[t+7]|=i:u[t+6]|=i:o?u[t+5]|=i:u[t+4]|=i:s?o?u[t+3]|=i:u[t+2]|=i:o?u[t+1]|=i:u[t]|=i}(t,e,n)}function xa(t,e){if("class"===e)return Wn(t.classes);if("style"===e)return Wn(t.styles);const n=t.attrs;if(n){const t=n.length;let a=0;for(;a<t;){const r=n[a];if(aa(r))break;if(0===r)a+=2;else if("number"==typeof r)for(a++;a<t&&"string"==typeof n[a];)a++;else{if(r===e)return n[a+1];a+=2}}}return null}function _a(t,e,n,a=C.Default,r){if(t){const r=function(t){if("string"==typeof t)return t.charCodeAt(0)||0;const e=t[Lt];return"number"==typeof e&&e>0?255&e:e}(n);if("function"==typeof r){const i=Ve(),s=Ae();Be(t,e);try{const t=r();if(null!=t||a&C.Optional)return t;throw new Error(`No provider for ${xn(n)}!`)}finally{Be(i,s)}}else if("number"==typeof r){if(-1===r)return new Ca(t,e);let i=null,s=ma(t,e),o=-1,u=a&C.Host?da(e)[6]:null;for((-1===s||a&C.SkipSelf)&&(o=-1===s?ya(t,e):e[s+8],Na(a,!1)?(i=e[1],s=sa(o),e=ua(o,e)):s=-1);-1!==s;){o=e[s+8];const t=e[1];if(Ia(r,s,t.data)){const t=Oa(s,e,n,i,a,u);if(t!==Ta)return t}Na(a,e[1].data[s+8]===u)&&Ia(r,s,e)?(i=t,s=sa(o),e=ua(o,e)):s=-1}}}if(a&C.Optional&&void 0===r&&(r=null),0==(a&(C.Self|C.Host))){const t=e[10],i=nt(void 0);try{return t?t.get(n,r,a&C.Optional):st(n,r,a&C.Optional)}finally{nt(i)}}if(a&C.Optional)return r;throw new Error(`NodeInjector: NOT_FOUND [${xn(n)}]`)}const Ta={};function Oa(t,e,n,a,r,i){const s=e[1],o=s.data[t+8],u=wa(o,s,n,null==a?Xt(o)&&fa:a!=s&&3===o.type,r&C.Host&&i===o);return null!==u?Sa(s.data,e,u,o):Ta}function wa(t,e,n,a,r){const i=t.providerIndexes,s=e.data,o=65535&i,u=t.directiveStart,l=i>>16,d=r?o+l:t.directiveEnd;for(let c=a?o:o+l;c<d;c++){const t=s[c];if(c<u&&n===t||c>=u&&t.type===n)return c}if(r){const t=s[u];if(t&&te(t)&&t.type===n)return u}return null}function Sa(t,e,n,a){let r=e[n];if(null!==(i=r)&&"object"==typeof i&&Object.getPrototypeOf(i)==ne.prototype){const i=r;if(i.resolving)throw new Error("Circular dep for "+xn(t[n]));const s=ha(i.canSeeViewProviders);let o;i.resolving=!0,i.injectImpl&&(o=nt(i.injectImpl));const u=Ve(),l=Ae();Be(a,e);try{r=e[n]=i.factory(void 0,t,e,a)}finally{i.injectImpl&&nt(o),ha(s),i.resolving=!1,Be(u,l)}}var i;return r}function Ia(t,e,n){const a=64&t,r=32&t;let i;return i=128&t?a?r?n[e+7]:n[e+6]:r?n[e+5]:n[e+4]:a?r?n[e+3]:n[e+2]:r?n[e+1]:n[e],!!(i&1<<t)}function Na(t,e){return!(t&C.Self||t&C.Host&&e)}class Ca{constructor(t,e){this._tNode=t,this._lView=e}get(t,e){return _a(this._tNode,this._lView,t,void 0,e)}}function Ra(t){const e=t,n=Ht(e)||Ut(e)||Wt(e)||D(e)||P(e);return n&&void 0!==n.factory?n.factory:null}function Aa(t){const e=Ra(Object.getPrototypeOf(t.prototype).constructor);return null!==e?e:t=>new t}function ka(t){return t.ngDebugContext}function Ea(t){return t.ngOriginalError}function La(t,...e){t.error(...e)}class Da{constructor(){this._console=console}handleError(t){const e=this._findOriginalError(t),n=this._findContext(t),a=function(t){return t.ngErrorLogger||La}(t);a(this._console,"ERROR",t),e&&a(this._console,"ORIGINAL ERROR",e),n&&a(this._console,"ERROR CONTEXT",n)}_findContext(t){return t?ka(t)?ka(t):this._findContext(Ea(t)):null}_findOriginalError(t){let e=Ea(t);for(;e&&Ea(e);)e=Ea(e);return e}}const Pa={name:"custom-elements"},Ma={name:"no-errors-schema"},qa="__SANITIZER_TRUSTED_BRAND__";function ja(t,e){return t instanceof String&&t[qa]===e}function Fa(t){return Ya(t,"Html")}function Ga(t){return Ya(t,"Style")}function Va(t){return Ya(t,"Script")}function za(t){return Ya(t,"Url")}function Ba(t){return Ya(t,"ResourceUrl")}function Ya(t,e){const n=new String(t);return n[qa]=e,n}let Ha=!0,Ua=!1;function Wa(){return Ua=!0,Ha}function Ka(){if(Ua)throw new Error("Cannot enable prod mode after platform setup.");Ha=!1}class $a{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),this.inertBodyElement=this.inertDocument.body,null==this.inertBodyElement){const t=this.inertDocument.createElement("html");this.inertDocument.appendChild(t),this.inertBodyElement=this.inertDocument.createElement("body"),t.appendChild(this.inertBodyElement)}this.inertBodyElement.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',!this.inertBodyElement.querySelector||this.inertBodyElement.querySelector("svg")?(this.inertBodyElement.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',this.getInertBodyElement=this.inertBodyElement.querySelector&&this.inertBodyElement.querySelector("svg img")&&function(){try{return!!window.DOMParser}catch(t){return!1}}()?this.getInertBodyElement_DOMParser:this.getInertBodyElement_InertDocument):this.getInertBodyElement=this.getInertBodyElement_XHR}getInertBodyElement_XHR(t){t="<body><remove></remove>"+t+"</body>";try{t=encodeURI(t)}catch(a){return null}const e=new XMLHttpRequest;e.responseType="document",e.open("GET","data:text/html;charset=utf-8,"+t,!1),e.send(void 0);const n=e.response.body;return n.removeChild(n.firstChild),n}getInertBodyElement_DOMParser(t){t="<body><remove></remove>"+t+"</body>";try{const e=(new window.DOMParser).parseFromString(t,"text/html").body;return e.removeChild(e.firstChild),e}catch(e){return null}}getInertBodyElement_InertDocument(t){const e=this.inertDocument.createElement("template");return"content"in e?(e.innerHTML=t,e):(this.inertBodyElement.innerHTML=t,this.defaultDoc.documentMode&&this.stripCustomNsAttrs(this.inertBodyElement),this.inertBodyElement)}stripCustomNsAttrs(t){const e=t.attributes;for(let a=e.length-1;0<a;a--){const n=e.item(a).name;"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||t.removeAttribute(n)}let n=t.firstChild;for(;n;)n.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(n),n=n.nextSibling}}const Ja=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Za=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;function Qa(t){return(t=String(t)).match(Ja)||t.match(Za)?t:(Wa()&&console.warn(`WARNING: sanitizing unsafe URL value ${t} (see http://g.co/ng/security#xss)`),"unsafe:"+t)}function Xa(t){return(t=String(t)).split(",").map(t=>Qa(t.trim())).join(", ")}function tr(t){const e={};for(const n of t.split(","))e[n]=!0;return e}function er(...t){const e={};for(const n of t)for(const t in n)n.hasOwnProperty(t)&&(e[t]=!0);return e}const nr=tr("area,br,col,hr,img,wbr"),ar=tr("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),rr=tr("rp,rt"),ir=er(rr,ar),sr=er(nr,er(ar,tr("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),er(rr,tr("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),ir),or=tr("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),ur=tr("srcset"),lr=er(or,ur,tr("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),tr("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),dr=tr("script,style,template");class cr{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(t){let e=t.firstChild,n=!0;for(;e;)if(e.nodeType===Node.ELEMENT_NODE?n=this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,n&&e.firstChild)e=e.firstChild;else for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);let t=this.checkClobberedElement(e,e.nextSibling);if(t){e=t;break}e=this.checkClobberedElement(e,e.parentNode)}return this.buf.join("")}startElement(t){const e=t.nodeName.toLowerCase();if(!sr.hasOwnProperty(e))return this.sanitizedSomething=!0,!dr.hasOwnProperty(e);this.buf.push("<"),this.buf.push(e);const n=t.attributes;for(let a=0;a<n.length;a++){const t=n.item(a),e=t.name,r=e.toLowerCase();if(!lr.hasOwnProperty(r)){this.sanitizedSomething=!0;continue}let i=t.value;or[r]&&(i=Qa(i)),ur[r]&&(i=Xa(i)),this.buf.push(" ",e,'="',gr(i),'"')}return this.buf.push(">"),!0}endElement(t){const e=t.nodeName.toLowerCase();sr.hasOwnProperty(e)&&!nr.hasOwnProperty(e)&&(this.buf.push("</"),this.buf.push(e),this.buf.push(">"))}chars(t){this.buf.push(gr(t))}checkClobberedElement(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error("Failed to sanitize html because the element is clobbered: "+t.outerHTML);return e}}const fr=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,hr=/([^\#-~ |!])/g;function gr(t){return t.replace(/&/g,"&amp;").replace(fr,(function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"})).replace(hr,(function(t){return"&#"+t.charCodeAt(0)+";"})).replace(/</g,"&lt;").replace(/>/g,"&gt;")}let pr;function br(t,e){let n=null;try{pr=pr||new $a(t);let a=e?String(e):"";n=pr.getInertBodyElement(a);let r=5,i=a;do{if(0===r)throw new Error("Failed to sanitize html because the input is unstable");r--,a=i,i=n.innerHTML,n=pr.getInertBodyElement(a)}while(a!==i);const s=new cr,o=s.sanitizeChildren(mr(n)||n);return Wa()&&s.sanitizedSomething&&console.warn("WARNING: sanitizing HTML stripped some content, see http://g.co/ng/security#xss"),o}finally{if(n){const t=mr(n)||n;for(;t.firstChild;)t.removeChild(t.firstChild)}}}function mr(t){return"content"in t&&function(t){return t.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===t.nodeName}(t)?t.content:null}const yr=function(){var t={NONE:0,HTML:1,STYLE:2,SCRIPT:3,URL:4,RESOURCE_URL:5};return t[t.NONE]="NONE",t[t.HTML]="HTML",t[t.STYLE]="STYLE",t[t.SCRIPT]="SCRIPT",t[t.URL]="URL",t[t.RESOURCE_URL]="RESOURCE_URL",t}();class vr{}const xr=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|Z|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),_r=/^url\(([^)]+)\)$/;function Tr(t){if(!(t=String(t).trim()))return"";const e=t.match(_r);return e&&Qa(e[1])===e[1]||t.match(xr)&&function(t){let e=!0,n=!0;for(let a=0;a<t.length;a++){const r=t.charAt(a);"'"===r&&n?e=!e:'"'===r&&e&&(n=!n)}return e&&n}(t)?t:(Wa()&&console.warn(`WARNING: sanitizing unsafe style value ${t} (see http://g.co/ng/security#xss).`),"unsafe")}function Or(t){const e=kr();return e?e.sanitize(yr.HTML,t)||"":ja(t,"Html")?t.toString():br(document,vn(t))}function wr(t){const e=kr();return e?e.sanitize(yr.STYLE,t)||"":ja(t,"Style")?t.toString():Tr(vn(t))}function Sr(t){const e=kr();return e?e.sanitize(yr.URL,t)||"":ja(t,"Url")?t.toString():Qa(vn(t))}function Ir(t){const e=kr();if(e)return e.sanitize(yr.RESOURCE_URL,t)||"";if(ja(t,"ResourceUrl"))return t.toString();throw new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)")}function Nr(t){const e=kr();if(e)return e.sanitize(yr.SCRIPT,t)||"";if(ja(t,"Script"))return t.toString();throw new Error("unsafe value used in a script context")}function Cr(t,e){return"src"===e&&("embed"===t||"frame"===t||"iframe"===t||"media"===t||"script"===t)||"href"===e&&("base"===t||"link"===t)?Ir:Sr}function Rr(t,e,n){return Cr(e,n)(t)}const Ar=function(t,e,n){let a=!0;return 1&(n=n||3)&&(a="background-image"===t||"background"===t||"border-image"===t||"filter"===t||"list-style"===t||"list-style-image"===t||"clip-path"===t),2&n?a?wr(e):e:a};function kr(){const t=Ae();return t&&t[13]}const Er=/([A-Z])/g;function Lr(t){try{return null!=t?t.toString().slice(0,30):t}catch(e){return"[ERROR] Exception while trying to serialize the value"}}function Dr(t){let e=_e(t);if(e){if(Array.isArray(e)){const a=e;let r,i=void 0,s=void 0;if((n=t)&&n.constructor&&n.constructor.ngComponentDef){if(r=Gr(a,t),-1==r)throw new Error("The provided component was not found in the application");i=t}else if(function(t){return t&&t.constructor&&t.constructor.ngDirectiveDef}(t)){if(r=function(t,e){let n=t[1].firstChild;for(;n;){const a=n.directiveEnd;for(let r=n.directiveStart;r<a;r++)if(t[r]===e)return n.index;n=Fr(n)}return-1}(a,t),-1==r)throw new Error("The provided directive was not found in the application");s=Vr(r,a,!1)}else if(r=jr(a,t),-1==r)return null;const o=ge(a[r]),u=_e(o),l=u&&!Array.isArray(u)?u:Pr(a,r,o);if(i&&void 0===l.component&&(l.component=i,qr(l.component,l)),s&&void 0===l.directives){l.directives=s;for(let t=0;t<s.length;t++)qr(s[t],l)}qr(l.native,l),e=l}}else{const n=t;let a=n;for(;a=a.parentNode;){const t=_e(a);if(t){let a;if(a=Array.isArray(t)?t:t.lView,!a)return null;const r=jr(a,n);if(r>=0){const t=ge(a[r]),n=Pr(a,r,t);qr(t,n),e=n;break}}}}var n;return e||null}function Pr(t,e,n){return{lView:t,nodeIndex:e,native:n,component:void 0,directives:void 0,localRefs:void 0}}function Mr(t){let e,n=_e(t);if(Array.isArray(n)){const a=Gr(n,t);e=xe(a,n);const r=Pr(n,a,e[0]);r.component=t,qr(t,r),qr(r.native,r)}else e=xe(n.nodeIndex,n.lView);return e}function qr(t,e){t.__ngContext__=e}function jr(t,e){let n=t[1].firstChild;for(;n;){if(me(n,t)===e)return n.index;n=Fr(n)}return-1}function Fr(t){if(t.child)return t.child;if(t.next)return t.next;for(;t.parent&&!t.parent.next;)t=t.parent;return t.parent&&t.parent.next}function Gr(t,e){const n=t[1].components;if(n)for(let a=0;a<n.length;a++){const r=n[a];if(xe(r,t)[9]===e)return r}else if(xe(19,t)[9]===e)return 19;return-1}function Vr(t,e,n){const a=e[1].data[t];let r=a.directiveStart;return 0==r?It:(!n&&1&a.flags&&r++,e.slice(r,a.directiveEnd))}function zr(t){throw new Error("Multiple components match node with tagname "+t.tagName)}function Br(){throw new Error("Cannot mix multi providers and regular providers")}function Yr(t,e){const n=t.length,a=t.indexOf(e),r=a+e.length;return!(-1===a||a>0&&" "!==t[a-1]||r<n&&" "!==t[r])}function Hr(t,e,n){return e===(0!==t.type||n?t.tagName:"ng-template")}function Ur(t,e,n){let a=4;const r=t.attrs||[],i=function(t){for(let e=0;e<t.length;e++)if(aa(t[e]))return e;return t.length}(r);let s=!1;for(let o=0;o<e.length;o++){const u=e[o];if("number"!=typeof u){if(!s)if(4&a){if(a=2|1&a,""!==u&&!Hr(t,u,n)||""===u&&1===e.length){if(Wr(a))return!1;s=!0}}else{const l=8&a?u:e[++o];if(8&a&&t.classes){if(!Yr(Wn(t.classes),l)){if(Wr(a))return!1;s=!0}continue}const d=Kr(8&a?"class":u,r,0==t.type&&"ng-template"!==t.tagName,n);if(-1===d){if(Wr(a))return!1;s=!0;continue}if(""!==l){let t;t=d>i?"":r[d+1];const e=8&a?t:null;if(e&&!Yr(e,l)||2&a&&l!==t){if(Wr(a))return!1;s=!0}}}}else{if(!s&&!Wr(a)&&!Wr(u))return!1;if(s&&Wr(u))continue;s=!1,a=u|1&a}}return Wr(a)||s}function Wr(t){return 0==(1&t)}function Kr(t,e,n,a){if(null===e)return-1;let r=0;if(a||!n){let n=!1;for(;r<e.length;){const a=e[r];if(a===t)return r;if(3===a||6===a)n=!0;else{if(1===a){let t=e[++r];for(;"string"==typeof t;)t=e[++r];continue}if(4===a)break;if(0===a){r+=4;continue}}r+=n?1:2}return-1}return function(t,e){let n=t.indexOf(4);if(n>-1)for(n++;n<t.length;){if(t[n]===e)return n;n++}return-1}(e,t)}function $r(t,e,n=!1){for(let a=0;a<e.length;a++)if(Ur(t,e[a],n))return!0;return!1}function Jr(t,e){t:for(let n=0;n<e.length;n++){const a=e[n];if(t.length===a.length){for(let e=0;e<t.length;e++)if(t[e]!==a[e])continue t;return!0}}return!1}let Zr=[];function Qr(t,e,n,a,r,i,s,o){const u=!a,l=fe(n,Fn(t)),d=u?0:l.classesIndex++;return!(!ti(t,e,d,a,r,i,s,o,!1)&&!o||(l.classesBitMask|=1<<d,0))}function Xr(t,e,n,a,r,i,s,o,u){const l=!a,d=fe(n,Fn(t)),c=l?0:d.stylesIndex++;return!(!ti(t,e,c,a,r,i,o,u,!!l||!!s&&s(a,null,1))&&!u||(d.stylesBitMask|=1<<c,0))}function ti(t,e,n,a,r,i,s,o,u){jn(t)||(s?function(t,e,n,a,r){Zr.unshift(t,e,n,a,r)}(t,n,a,r,u):(Zr.length&&ei(),ni(t,n,a,r,u)));const l=o||Vn(e[r],i);return l&&(e[r]=i),l}function ei(){let t=0;for(;t<Zr.length;)ni(Zr[t++],Zr[t++],Zr[t++],Zr[t++],Zr[t++]);Zr.length=0}function ni(t,e,n,a,r){let i=!1;if(n){let s=!1,o=Gn(t);for(;o<t.length;){const i=Pn(t,o),u=An(t,o);if(s=n<=u,s){n<u&&ai(t,o,n,r),ri(t,!1,o,a,e);break}o+=3+i}s||(ai(t,t.length,n,r),ri(t,!1,o,a,e),i=!0)}else ri(t,!0,3,a,e),i=!0;return i}function ai(t,e,n,a){t.splice(e,0,a?1:0,1,n,null),Dn(t,e,1)}function ri(t,e,n,a,r){const i=n+3;let s=i+Pn(t,n);if(e||s--,"number"==typeof a){for(let e=i;e<=s;e++)if(t[e]===a)return;t.splice(s,0,a),t[n+1]++,Dn(t,n,Ln(t,n)|1<<r)}else null!==a&&null==t[s]&&(t[s]=a)}function ii(t,e,n,a,r,i,s,o){return r&&a&&(function(t){if(!jn(t)){const e=Hn(t);e&&function(t,e){for(let n=1;n<e.length;n+=2){const a=Qn(e,n);a&&ni(t,-1,Jn(e,n),a,!1)}}(t,e),function(t){Rn(t,1|Cn(t))}(t)}}(a),function(t,e){return t&&e>0}(a,i))?(si(a,t,e,n,i,s,o),!0):r}function si(t,e,n,a,r,i,s){const o=!0===(u=r)?-1:!1===u?0:u;var u;const l=oi,d=(o&Ln(t,3))>0?1:0;let c=Gn(t);for(;c<t.length;){const r=Pn(t,c);if(o&Ln(t,c)){let o=!1;const u=An(t,c),f=r-1,h=Mn(t,c,f);for(let r=0;r<f;r++){const l=Mn(t,c,r),d=a[l];if(zn(d)){i(e,n,u,s&&En(t,c)?s(u,d,2):d,l),o=!0;break}}if(l){const r=l(t,e,n,a,i,s,d|(o?4:2),u,h);o=o||r}o||i(e,n,u,h)}c+=3+r}l&&l(t,e,n,a,i,s,d)}let oi=null;const ui=(t,e,n,a)=>{const r=e.style;a?(a=a.toString(),t&&ta(t)?t.setStyle(e,n,a,Xn.DashCase):r&&r.setProperty(n,a)):t&&ta(t)?t.removeStyle(e,n,Xn.DashCase):r&&r.removeProperty(n)},li=(t,e,n,a)=>{if(""!==n){const r=e.classList;a?t&&ta(t)?t.addClass(e,n):r&&r.add(n):t&&ta(t)?t.removeClass(e,n):r&&r.remove(n)}};function di(t,e,n,a){const r=Hn(n);if(r)for(let i=1;i<r.length;i+=2){const n=Jn(r,i),s=Qn(r,i);a?li(t,e,n,s):ui(t,e,n,s)}}const ci={},fi={marker:"element"},hi={marker:"comment"},gi=(t,e,n,a,r,i,s,o,u)=>{let l=!1;if(Pn(t,3)){let d=!0;const c=!o;c&&-2&s&&(d=!1,l=!0),d&&(l=function t(e,n,a,r,i,s,o,u,l,d){let c=!1;if(l<Pn(e,3)){const f=Mn(e,3,l),h=r[f];let g=function(t){return t>=yi.length&&yi.push(1),yi[t]}(l);for(;g<h.length;){const p=Jn(h,g),b=u&&p>u,m=!b&&p===u,y=Qn(h,g),v=zn(y);let x=t(e,n,a,r,i,s,b?o:bi(o,v,m),b?u:p,l+1,d);if(b){c||(c=x);break}if(!x&&mi(o,m)){const t=m&&!v,e=t?d:y,r=t?f:null;i(n,a,p,s?s(p,e,3):e,r),x=!0}c=x&&m,g+=2}if(yi[l]=g,1===h.length||!u)return t(e,n,a,r,i,s,o,u,l+1,d)}return c}(t,e,n,a,r,i,s,o||null,0,u||null)),c&&function(){for(let t=0;t<yi.length;t++)yi[t]=1}()}return l};function pi(){oi=gi}function bi(t,e,n){let a=t;return e||4&t||!(n||1&t)?(a|=4,a&=-3):(a|=2,a&=-5),a}function mi(t,e){let n=(1&t)>0;return n?4&t&&e&&(n=!1):2&t&&(n=e),n}const yi=[];function vi(t,e,n,a){for(let r=1;r<t.length;r+=2){const i=Jn(t,r);if(e<=i){let s=!1;if(i===e){const e=t[r];!a&&zn(e)||(s=!0,Zn(t,r,n))}else s=!0,t.splice(r,0,e,n);return s}}return t.push(e,n),!0}function xi(t,e){let n="";for(let a=1;a<t.length;a+=2){const r=Jn(t,a),i=Qn(t,a),s=Bn(r,e?"":i,":");n=Bn(n,s,e?" ":"; ")}return n}function _i(t){let e={};if(t)for(let n=1;n<t.length;n+=2){const a=Jn(t,n),r=Qn(t,n);e[a]=r}return e}class Ti{constructor(t,e,n){this.context=t,this._data=e,this._isClassBased=n,this._sanitizer=null}overrideSanitizer(t){this._sanitizer=t}get summary(){const t={};return this._mapValues((e,n,a)=>{t[e]={prop:e,value:n,bindingIndex:a}}),t}get values(){const t={};return this._mapValues((e,n)=>{t[e]=n}),t}_mapValues(t){Pn(this.context,3)>0&&pi();const e=this._isClassBased?null:this._sanitizer||mn();si(this.context,null,{},this._data,!0,(e,n,a,r,i)=>{t(a,r,i||null)},e)}}function Oi(t){wi(Ae(),t)}function wi(t,e){ie(t,t[1],$e(),e),ln(e)}const Si=(()=>Promise.resolve(null))();function Ii(t){const e=t[1],n=Ue(t);if(e.firstTemplatePass=!1,t[7]=e.bindingStartIndex,!n){const n=$e();ie(t,e,n,void 0),function(t){for(let e=t[14];null!==e;e=e[4])if(-1===e[2]&&Zt(e))for(let t=9;t<e.length;t++){const n=e[t];Ei(n,n[1],n[9])}}(t),Ni(e,t),Oe(t),se(t,e.contentHooks,e.contentCheckHooks,n,1,void 0),function(t,e){const n=un();try{if(t.expandoInstructions){let n=e[7]=t.expandoStartIndex;Xe(n);let a=-1,r=-1;for(let i=0;i<t.expandoInstructions.length;i++){const s=t.expandoInstructions[i];"number"==typeof s?(s<=0?(r=-s,qe(r),n+=9+t.expandoInstructions[++i],a=n):n+=s,Xe(n)):(null!==s&&(e[7]=n,s(2,ge(e[a]),r),je()),a++)}}}finally{qe(n)}}(e,t)}n&&e.staticContentQueries&&Ni(e,t),n&&!e.staticViewQueries||ds(2,e,t[9]),function(t,e){if(null!=e)for(let n=0;n<e.length;n++)as(t,e[n])}(t,e.components)}function Ni(t,e){const n=t.contentQueries;if(null!==n)for(let a=0;a<n.length;a+=2){const r=n[a],i=n[a+1];if(-1!==i){const n=t.data[i];nn(r),n.contentQueries(2,e[i],i)}}}function Ci(t,e){let n;const a=e||Ae()[12],r=cn;return n=ta(a)?a.createElement(t,r):null===r?a.createElement(t):a.createElementNS(r,t),n}function Ri(t,e,n,a,r,i,s,o,u,l){const d=e.blueprint.slice();return d[0]=r,d[2]=140|a,Oe(d),d[3]=d[16]=t,d[9]=n,d[11]=s||t&&t[11],d[12]=o||t&&t[12],d[13]=u||t&&t[13]||null,d[10]=l||t&&t[10]||null,d[6]=i,d}function Ai(t,e,n,a,r,i){const s=n+19,o=t.data[s]||function(t,e,n,a,r,i,s){const o=Ve(),u=Ye(),l=u?o:o&&o.parent,d=t.data[n]=Vi(0,l&&l!==e?l:null,a,n,r,i);return 0!==s&&t.firstChild||(t.firstChild=d),o&&(!u||null!=o.child||null===d.parent&&2!==o.type?u||(o.next=d):o.child=d),d}(t,e,s,a,r,i,n);return ze(o,!0),o}function ki(t,e,n,a){let r=t.node;return null==r&&(t.node=r=Vi(0,e,2,n,null,null)),a[6]=r}function Ei(t,e,n){const a=Ye(),r=Ve();let i;if(512&t[2])ss(ca(t));else{let s=!1;try{ze(null,!0),i=an(t,t[6]),Oe(t),Di(t,e.template,Pi(t),n),e.firstTemplatePass=!1,Ii(t),s=!0}finally{sn(i,s),ze(r,a)}}}function Li(t,e,n){const a=t[11],r=an(t,t[6]),i=!$e(),s=Ue(t);let o=!1;try{i&&!s&&a.begin&&a.begin(),s&&(n&&Di(t,n,1,e),Ii(t),t[2]&=-5),Oe(t),n&&Di(t,n,2,e),Ii(t),o=!0}finally{i&&!s&&a.end&&a.end(),sn(r,o)}}function Di(t,e,n,a){pn();const r=un();try{qe(null),2&n&&wi(t,0),e(n,a)}finally{ln(r)}}function Pi(t){return Ue(t)?1:2}function Mi(t,e,n){if(Qt(e)){const a=e.directiveEnd;for(let r=e.directiveStart;r<a;r++){const e=t.data[r];e.contentQueries&&e.contentQueries(1,n[r],r)}}}function qi(t,e,n,a=be){Ne()&&(function(t,e,n){const a=n.directiveStart,r=n.directiveEnd;!t.firstTemplatePass&&a<r&&pa(n,e);for(let i=a;i<r;i++){const a=t.data[i];te(a)&&ts(e,n,a),Ki(e,Sa(t.data,e,i,n),a,i)}}(t,e,n),function(t,e,n){const a=n.directiveStart,r=n.directiveEnd,i=t.expandoInstructions,s=t.firstTemplatePass,o=n.index-19,u=un();try{qe(o);for(let o=a;o<r;o++){const a=t.data[o],r=e[o];a.hostBindings?(Ui(a,i,r,n,s),je()):s&&i.push(null)}}finally{qe(u)}}(t,e,n),function(t,e,n){const a=e.localNames;if(a){let r=e.index+1;for(let i=0;i<a.length;i+=2){const s=a[i+1],o=-1===s?n(e,t):t[s];t[r++]=o}}}(e,n,a),qe(null))}function ji(t){return t.tView||(t.tView=Fi(-1,t.template,t.consts,t.vars,t.directiveDefs,t.pipeDefs,t.viewQuery,t.schemas))}function Fi(t,e,n,a,r,i,s,o){const u=19+n,l=u+a,d=function(t,e){const n=new Array(e).fill(null,0,t).fill(ci,t);return n[7]=t,n}(u,l);return d[1]={id:t,blueprint:d,template:e,queries:null,viewQuery:s,node:null,data:d.slice().fill(null,u),bindingStartIndex:u,expandoStartIndex:l,expandoInstructions:null,firstTemplatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof r?r():r,pipeRegistry:"function"==typeof i?i():i,firstChild:null,schemas:o}}function Gi(t,e){const n=t.createRenderer(null,null);return"string"==typeof e?ta(n)?n.selectRootElement(e):n.querySelector(e):e}function Vi(t,e,n,a,r,i){return{type:n,index:a,injectorIndex:e?e.injectorIndex:-1,directiveStart:-1,directiveEnd:-1,propertyMetadataStartIndex:-1,propertyMetadataEndIndex:-1,flags:0,providerIndexes:0,tagName:r,attrs:i,localNames:null,initialInputs:void 0,inputs:void 0,outputs:void 0,tViews:null,next:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,classes:null}}function zi(t,e){const n=Ae()[1];let a=null;const r=t.directiveStart,i=t.directiveEnd;if(i>r){const t=0===e,s=n.data;for(let e=r;e<i;e++){const n=s[e],r=t?n.inputs:n.outputs;for(let t in r)if(r.hasOwnProperty(t)){a=a||{};const n=r[t];a.hasOwnProperty(t)?a[t].push(e,t,n):a[t]=[e,t,n]}}}return a}const Bi={class:"className",for:"htmlFor",formaction:"formAction",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"};function Yi(t,e,n,a,r,i){const s=Ae(),o=pe(t,s),u=ye(t,s);let l,d;if(!r&&(l=hs(u))&&(d=l[e]))ys(s,d,n),Xt(u)&&function(t,e){const n=xe(e,t);16&n[2]||(n[2]|=64)}(s,t+19);else if(3===u.type){!function(t,e,n,a,r){const i=e[7]-1,s=a[i];"�"==s[0]&&(a[i]=n+s,r||(-1==t.propertyMetadataStartIndex&&(t.propertyMetadataStartIndex=i),t.propertyMetadataEndIndex=i+1))}(u,s,e=Bi[e]||e,s[1].data,r);const t=i?i(u,s):s[12];n=null!=a?a(n,u.tagName||"",e):n,ta(t)?t.setProperty(o,e,n):ra(e)||(o.setProperty?o.setProperty(e,n):o[e]=n)}}function Hi(t,e,n,a){if(!Ne())return;const r=function(t,e,n){const a=t.directiveRegistry;let r=null;if(a)for(let i=0;i<a.length;i++){const s=a[i];$r(n,s.selectors,!1)&&(r||(r=[]),va(pa(n,e),t,s.type),te(s)?(1&n.flags&&zr(n),n.flags=1,r.unshift(s)):r.push(s))}return r}(t,e,n),i=a?{"":-1}:null;if(r){Qi(n,t.data.length,r.length);for(let t=0;t<r.length;t++){const e=r[t];e.providersResolver&&e.providersResolver(e)}Wi(t,n,r.length);const a=t.preOrderHooks&&t.preOrderHooks.length||0,s=t.preOrderCheckHooks&&t.preOrderCheckHooks.length||0,o=n.index-19;for(let n=0;n<r.length;n++){const u=r[n],l=t.data.length;Xi(t,e,u,u.factory),Zi(t.data.length-1,u,i),ae(l,u,t,o,a,s)}}i&&function(t,e,n){if(e){const a=t.localNames=[];for(let t=0;t<e.length;t+=2){const r=n[e[t+1]];if(null==r)throw new Error(`Export of name '${e[t+1]}' not found!`);a.push(e[t],r)}}}(n,a,i)}function Ui(t,e,n,a,r){const i=e.length;Ie(t),t.hostBindings(1,n,a.index-19),Ie(null),i===e.length&&r&&e.push(t.hostBindings)}function Wi(t,e,n){const a=-(e.index-19),r=t.data.length-(65535&e.providerIndexes);(t.expandoInstructions||(t.expandoInstructions=[])).push(a,r,n)}function Ki(t,e,n,a){const r=Ve();$i(t,r,e),r&&r.attrs&&function(t,e,n,a){let r=a.initialInputs;(void 0===r||t>=r.length)&&(r=function(t,e,n){const a=n.initialInputs||(n.initialInputs=[]);for(let s=a.length;s<=t;s++)a.push(null);const r=n.attrs;let i=0;for(;i<r.length;){const n=r[i];if(0===n){i+=4;continue}if(5===n){i+=2;continue}if("number"==typeof n)break;const s=e[n],o=r[i+1];void 0!==s&&(a[t]||(a[t]=[])).push(n,s,o),i+=2}return a}(t,n.inputs,a));const i=r[t];if(i){const t=n.setInput;for(let a=0;a<i.length;){const r=i[a++],s=i[a++],o=i[a++];t?n.setInput(e,o,r,s):e[s]=o}}}(a,e,n,r),t[1].firstTemplatePass&&n.contentQueries&&(r.flags|=4),te(n)&&(xe(r.index,t)[9]=e)}function $i(t,e,n){const a=be(e,t);qr(n,t),a&&qr(a,t)}function Ji(t){const e=Ae()[1];(e.components||(e.components=[])).push(t.index)}function Zi(t,e,n){if(n){if(e.exportAs)for(let a=0;a<e.exportAs.length;a++)n[e.exportAs[a]]=t;e.template&&(n[""]=t)}}function Qi(t,e,n){t.flags=1&t.flags,t.directiveStart=e,t.directiveEnd=e+n,t.providerIndexes=e}function Xi(t,e,n,a){t.data.push(n);const r=new ne(a,te(n),null);t.blueprint.push(r),e.push(r)}function ts(t,e,n){const a=be(e,t),r=ji(n),i=t[11],s=rs(t,Ri(t,r,null,n.onPush?64:16,t[e.index],e,i,i.createRenderer(a,n)));s[6]=e,t[e.index]=s,t[1].firstTemplatePass&&Ji(e)}function es(t,e,n,a,r,i){const s=pe(t,a),o=a[12];if(null==n)ta(o)?o.removeAttribute(s,e,i):s.removeAttribute(e);else{const u=ye(t,a),l=null==r?vn(n):r(n,u.tagName||"",e);ta(o)?o.setAttribute(s,e,l,i):i?s.setAttributeNS(i,e,l):s.setAttribute(e,l)}}function ns(t,e,n,a,r){return new Array(t,!0,r?-1:0,e,null,null,a,n,null)}function as(t,e){const n=xe(e,t);(128==(128&n[2])||Ue(t))&&80&n[2]&&(function(t){const e=t[1];for(let n=t.length;n<e.blueprint.length;n++)t[n]=e.blueprint[n]}(n),ls(n,n[9]))}function rs(t,e){return t[14]?t[15][4]=e:t[14]=e,t[15]=e,e}function is(t){for(;t;){t[2]|=64;const e=la(t);if(ee(t)&&!e)return t;t=e}return null}function ss(t){for(let e=0;e<t.components.length;e++){const n=t.components[e];Li(Te(n),n)}}function os(t,e){const n=t[11];n.begin&&n.begin();try{Ue(t)&&ls(t,e),ls(t,e)}catch(a){throw ms(t,a),a}finally{n.end&&n.end()}}function us(t){ss(t[9])}function ls(t,e){const n=t[1],a=an(t,t[6]),r=n.template,i=Ue(t);let s=!1;try{Oe(t),i&&ds(1,n,e),Di(t,r,Pi(t),e),Ii(t),s=!0}finally{sn(a,s)}}function ds(t,e,n){const a=e.viewQuery;null!==a&&(nn(0),a(t,n))}function cs(t,e="",n=""){const a=t[1].data,r=t[7]-1;return null==a[r]?a[r]="�"+e+"�"+n:null}const fs=Si;function hs(t){return void 0===t.inputs&&(t.inputs=zi(t,0)),t.inputs}function gs(t){return t[8]||(t[8]=[])}function ps(t){return t[1].cleanup||(t[1].cleanup=[])}function bs(t,e){return e[t.index][12]}function ms(t,e){const n=t[10],a=n?n.get(Da,null):null;a&&a.handleError(e)}function ys(t,e,n){const a=t[1];for(let r=0;r<e.length;){const i=e[r++],s=e[r++],o=e[r++],u=t[i],l=a.data[i];l.setInput?l.setInput(u,n,s,o):u[o]=n}}function vs(t,e,n){const a=pe(e,t),r=t[12];ta(r)?r.setValue(a,n):a.textContent=n}function xs(t,e,n){di(t,e,n.classes,!0),di(t,e,n.styles,!1)}function _s(t,e){const n=e[3];return-1===t.index?Zt(n)?n:null:n}function Ts(t,e){const n=_s(t,e);return n?Ps(e[12],n[7]):null}function Os(t,e,n,a,r){if(null!=a){let i,s=!1;Zt(a)?i=a:Jt(a)&&(s=!0,a=a[0]);const o=ge(a);0===t?Ls(e,n,o,r||null):1===t?js(e,o,s):2===t&&e.destroyNode(o),null!=i&&function(t,e,n,a,r){const i=n[7];i!==ge(n)&&Os(e,t,a,i,r);for(let s=9;s<n.length;s++)zs(t,e,n[s],a,i)}(e,t,i,n,r)}}function ws(t,e){return ta(e)?e.createText(vn(t)):e.createTextNode(vn(t))}function Ss(t,e,n){const a=Ts(t[1].node,t);a&&zs(t[12],e?0:1,t,a,n)}function Is(t,e,n){const a=9+n,r=e.length;n>0&&(e[a-1][4]=t),n<r-9?(t[4]=e[a],mt(e,9+n,t)):(e.push(t),t[4]=null),t[3]=e;const i=t[17];null!==i&&e!==i&&function(t,e){const n=t[5];null===n?t[5]=[e]:n.push(e)}(i,t);const s=t[5];null!==s&&s.insertView(t[1]),t[2]|=128}function Ns(t,e){const n=t[5],a=n.indexOf(e);n.splice(a,1)}function Cs(t,e){if(t.length<=9)return;const n=9+e,a=t[n];if(a){const r=a[17];null!==r&&r!==t&&Ns(r,a),e>0&&(t[n-1][4]=a[4]);const i=yt(t,9+e);Ss(a,!1);const s=i[5];null!==s&&s.detachView(i[1]),a[3]=null,a[4]=null,a[2]&=-129}return a}function Rs(t,e){const n=Cs(t,e);n&&As(n)}function As(t){if(!(256&t[2])){const e=t[12];ta(e)&&e.destroyNode&&zs(e,2,t,null,null),function(t){let e=t[14];if(!e)return Es(t);for(;e;){let n=null;if(Jt(e))n=e[14];else{const t=e[9];t&&(n=t)}if(!n){for(;e&&!e[4]&&e!==t;)Es(e),e=ks(e,t);Es(e||t),n=e&&e[4]}e=n}}(t)}}function ks(t,e){let n;return Jt(t)&&(n=t[6])&&2===n.type?_s(n,t):t[3]===e?null:t[3]}function Es(t){if(Jt(t)&&!(256&t[2])){t[2]&=-129,t[2]|=256,function(t){const e=t[1];let n;if(null!=e&&null!=(n=e.destroyHooks))for(let a=0;a<n.length;a+=2){const e=t[n[a]];e instanceof ne||n[a+1].call(e)}}(t),function(t){const e=t[1].cleanup;if(null!==e){const n=t[8];for(let a=0;a<e.length-1;a+=2)if("string"==typeof e[a]){const r=e[a+1],i="function"==typeof r?r(t):ge(t[r]),s=n[e[a+2]],o=e[a+3];"boolean"==typeof o?i.removeEventListener(e[a],s,o):o>=0?n[o]():n[-o].unsubscribe(),a+=2}else e[a].call(n[e[a+1]]);t[8]=null}}(t);const e=t[6];e&&3===e.type&&ta(t[12])&&t[12].destroy();const n=t[17];if(null!==n&&Zt(t[3])){n!==t[3]&&Ns(n,t);const e=t[5];null!==e&&e.detachView(t[1])}}}function Ls(t,e,n,a){ta(t)?t.insertBefore(e,n,a):e.insertBefore(n,a,!0)}function Ds(t,e,n,a){null!==a?Ls(t,e,n,a):function(t,e,n){ta(t)?t.appendChild(e,n):e.appendChild(n)}(t,e,n)}function Ps(t,e){return ta(t)?t.parentNode(e):e.parentNode}function Ms(t,e,n){const a=function(t,e){if(ee(e))return Ps(e[12],be(t,e));const n=function(t){for(;null!=t.parent&&(4===t.parent.type||5===t.parent.type);)t=t.parent;return t}(t),a=n.parent;if(null==a){const t=e[6];return 2===t.type?Ts(t,e):function(t){const e=t[6];return e&&3===e.type?be(e,la(t)):null}(e)}{const t=n&&5===n.type;if(t&&2&n.flags)return be(n,e).parentNode;if(1&a.flags&&!t){const t=e[1].data,n=t[t[a.index].directiveStart].encapsulation;if(n!==Ot.ShadowDom&&n!==Ot.Native)return null}return be(a,e)}}(e,n);if(null!=a){const r=n[12],i=function(t,e){if(2===t.type){const n=_s(t,e);return qs(n.indexOf(e,9)-9,n)}return 4===t.type||5===t.type?be(t,e):null}(e.parent||n[6],n);if(Array.isArray(t))for(let e of t)Ds(r,a,e,i);else Ds(r,a,t,i)}}function qs(t,e){const n=9+t+1;if(n<e.length){const t=e[n],a=t[6].child;return null!==a?me(a,t):e[7]}return e[7]}function js(t,e,n){const a=Ps(t,e);a&&function(t,e,n,a){ta(t)?t.removeChild(e,n,a):e.removeChild(n)}(t,a,e,n)}function Fs(t,e,n,a){const r=a[3];let i=a[6].projection[n];if(Array.isArray(i))Ms(i,e,t);else for(;i;)32&i.flags||(1===i.type?Fs(t,e,i.projection,da(r)):(i.flags|=2,Vs(i,e,t,r))),i=i.projectionNext}function Gs(t,e,n,a){for(;t;)Vs(t,e,n,a),t=t.next}function Vs(t,e,n,a){const r=be(t,a);Ms(r,e,n),qr(r,a);const i=a[t.index];if(0===t.type)for(let s=9;s<i.length;s++)Ss(i[s],!0,i[7]);else if(5===t.type){let e=t.child;Gs(e,e,a,a)}else 4===t.type&&Gs(t.child,e,n,a),Zt(i)&&Ms(i[7],e,n)}function zs(t,e,n,a,r){let i=n[1].node.child;for(;null!==i;)Bs(t,e,n,i,a,r),i=i.next}function Bs(t,e,n,a,r,i){const s=a.type;32&a.flags||(4===s||5===s?function(t,e,n,a,r,i){Os(e,t,r,n[a.index],i);let s=a.child;for(;s;)Bs(t,e,n,s,r,i),s=s.next}(t,e,n,a,r,i):1===s?function(t,e,n,a,r,i){const s=da(n),o=s[6].projection[a.projection];if(void 0!==o)if(Array.isArray(o))for(let u=0;u<o.length;u++)Os(e,t,r,o[u],i);else{let n=o;const a=s[3];for(;null!==n;)Bs(t,e,a,n,r,i),n=n.projectionNext}}(t,e,n,a,r,i):Os(e,t,r,n[a.index],i))}class Ys{constructor(t,e,n){this._context=e,this._componentIndex=n,this._appRef=null,this._viewContainerRef=null,this._tViewNode=null,this._lView=t}get rootNodes(){return null==this._lView[0]?function t(e,n,a){let r=n.child;for(;r;){const n=me(r,e);if(n&&a.push(n),4===r.type)t(e,r,a);else if(1===r.type){const t=da(e),n=t[6],i=la(t);let s=n.projection[r.projection];for(;s&&i;)a.push(be(s,i)),s=s.next}r=r.next}return a}(this._lView,this._lView[6],[]):[]}get context(){return this._context?this._context:this._lookUpContext()}get destroyed(){return 256==(256&this._lView[2])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._viewContainerRef){const t=this._viewContainerRef.indexOf(this);t>-1&&this._viewContainerRef.detach(t),this._viewContainerRef=null}As(this._lView)}onDestroy(t){var e,n;n=t,gs(e=this._lView).push(n),e[1].firstTemplatePass&&ps(e).push(e[8].length-1,null)}markForCheck(){is(this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){os(this._lView,this.context)}checkNoChanges(){!function(t,e){Je(!0);try{os(t,e)}finally{Je(!1)}}(this._lView,this.context)}attachToViewContainerRef(t){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=t}detachFromAppRef(){this._appRef=null,function(t){zs(t[12],1,t,null,null)}(this._lView)}attachToAppRef(t){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}_lookUpContext(){return this._context=la(this._lView)[this._componentIndex]}}class Hs extends Ys{constructor(t){super(t,null,-1),this._view=t}detectChanges(){us(this._view)}checkNoChanges(){!function(t){Je(!0);try{us(t)}finally{Je(!1)}}(this._view)}get context(){return null}}let Us,Ws,Ks;function $s(t,e,n){return Us||(Us=class extends t{}),new Us(be(e,n))}function Js(t,e,n,a){return Ws||(Ws=class extends t{constructor(t,e,n){super(),this._declarationView=t,this._declarationTContainer=e,this.elementRef=n}createEmbeddedView(t){const e=this._declarationTContainer.tViews,n=function(t,e,n,a){const r=Ye(),i=Ve();ze(null,!0);const s=Ri(n,t,e,16,null,null);return s[16]=n,ki(t,null,-1,s),t.firstTemplatePass&&(t.node.injectorIndex=a),ze(i,r),s}(e,t,this._declarationView,this._declarationTContainer.injectorIndex);n[17]=this._declarationView[this._declarationTContainer.index];const a=this._declarationView[5];null!==a&&(n[5]=a.createEmbeddedView(e)),Ei(n,e,t);const r=new Ys(n,t,-1);return r._tViewNode=n[6],r}}),0===n.type?new Ws(a,n,$s(e,n,a)):null}function Zs(t,e,n,a){let r;Ks||(Ks=class extends t{constructor(t,e,n){super(),this._lContainer=t,this._hostTNode=e,this._hostView=n}get element(){return $s(e,this._hostTNode,this._hostView)}get injector(){return new Ca(this._hostTNode,this._hostView)}get parentInjector(){const t=ya(this._hostTNode,this._hostView),e=ua(t,this._hostView),n=function(t,e,n){if(n.parent&&-1!==n.parent.injectorIndex){const t=n.parent.injectorIndex;let e=n.parent;for(;null!=e.parent&&t==e.injectorIndex;)e=e.parent;return e}let a=oa(t),r=e,i=e[6];for(;a>1;)r=r[16],i=r[6],a--;return i}(t,this._hostView,this._hostTNode);return ia(t)&&null!=n?new Ca(n,e):new Ca(null,this._hostView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){return null!==this._lContainer[8]&&this._lContainer[8][t]||null}get length(){return this._lContainer.length-9}createEmbeddedView(t,e,n){const a=t.createEmbeddedView(e||{});return this.insert(a,n),a}createComponent(t,e,n,a,r){const i=n||this.parentInjector;!r&&null==t.ngModule&&i&&(r=i.get(ft,null));const s=t.create(i,a,void 0,r);return this.insert(s.hostView,e),s}insert(t,e){if(t.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");this.allocateContainerIfNeeded();const n=t._lView,a=this._adjustIndex(e);return Zt(n[3])?this.move(t,a):(Is(n,this._lContainer,a),Ss(n,!0,qs(a,this._lContainer)),t.attachToViewContainerRef(this),mt(this._lContainer[8],a,t),t)}move(t,e){if(t.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");const n=this.indexOf(t);return-1!==n&&this.detach(n),this.insert(t,e),t}indexOf(t){return null!==this._lContainer[8]?this._lContainer[8].indexOf(t):0}remove(t){this.allocateContainerIfNeeded();const e=this._adjustIndex(t,-1);Rs(this._lContainer,e),yt(this._lContainer[8],e)}detach(t){this.allocateContainerIfNeeded();const e=this._adjustIndex(t,-1),n=Cs(this._lContainer,e);return n&&null!=yt(this._lContainer[8],e)?new Ys(n,n[9],-1):null}_adjustIndex(t,e=0){return null==t?this.length+e:t}allocateContainerIfNeeded(){null===this._lContainer[8]&&(this._lContainer[8]=[])}});const i=a[n.index];if(Zt(i))r=i,r[2]=-1;else{let t;if(t=4===n.type?ge(i):a[12].createComment(""),ee(a)){const e=a[12],r=be(n,a);Ls(e,Ps(e,r),t,function(t,e){return ta(t)?t.nextSibling(e):e.nextSibling}(e,r))}else Ms(t,n,a);a[n.index]=r=ns(i,a,t,n,!0),rs(a,r)}return new Ks(r,n,a)}function Qs(t=!1){return function(t,e,n){if(Xt(t)&&!n){const n=t.directiveStart,a=xe(t.index,e);return new Ys(a,null,n)}if(3===t.type||0===t.type||4===t.type){const t=da(e);return new Ys(t,t[9],-1)}return null}(Ve(),Ae(),t)}let Xs=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>eo(),t})();const to=Qs,eo=(...t)=>{},no=Function;function ao(t){return"function"==typeof t}const ro=/^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/,io=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/,so=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/,oo=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{\s+super\(\.\.\.arguments\)/;class uo{constructor(t){this._reflect=t||U.Reflect}isReflectionEnabled(){return!0}factory(t){return(...e)=>new t(...e)}_zipTypesAndAnnotations(t,e){let n;n=new Array(void 0===t?e.length:t.length);for(let a=0;a<n.length;a++)n[a]=void 0===t?[]:t[a]&&t[a]!=Object?[t[a]]:[],e&&null!=e[a]&&(n[a]=n[a].concat(e[a]));return n}_ownParameters(t,e){if(n=t.toString(),ro.test(n)||oo.test(n)||io.test(n)&&!so.test(n))return null;var n;if(t.parameters&&t.parameters!==e.parameters)return t.parameters;const a=t.ctorParameters;if(a&&a!==e.ctorParameters){const t="function"==typeof a?a():a,e=t.map(t=>t&&t.type),n=t.map(t=>t&&lo(t.decorators));return this._zipTypesAndAnnotations(e,n)}const r=t.hasOwnProperty(b)&&t[b],i=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata("design:paramtypes",t);return i||r?this._zipTypesAndAnnotations(i,r):new Array(t.length).fill(void 0)}parameters(t){if(!ao(t))return[];const e=co(t);let n=this._ownParameters(t,e);return n||e===Object||(n=this.parameters(e)),n||[]}_ownAnnotations(t,e){if(t.annotations&&t.annotations!==e.annotations){let e=t.annotations;return"function"==typeof e&&e.annotations&&(e=e.annotations),e}return t.decorators&&t.decorators!==e.decorators?lo(t.decorators):t.hasOwnProperty(p)?t[p]:null}annotations(t){if(!ao(t))return[];const e=co(t),n=this._ownAnnotations(t,e)||[];return(e!==Object?this.annotations(e):[]).concat(n)}_ownPropMetadata(t,e){if(t.propMetadata&&t.propMetadata!==e.propMetadata){let e=t.propMetadata;return"function"==typeof e&&e.propMetadata&&(e=e.propMetadata),e}if(t.propDecorators&&t.propDecorators!==e.propDecorators){const e=t.propDecorators,n={};return Object.keys(e).forEach(t=>{n[t]=lo(e[t])}),n}return t.hasOwnProperty(m)?t[m]:null}propMetadata(t){if(!ao(t))return{};const e=co(t),n={};if(e!==Object){const t=this.propMetadata(e);Object.keys(t).forEach(e=>{n[e]=t[e]})}const a=this._ownPropMetadata(t,e);return a&&Object.keys(a).forEach(t=>{const e=[];n.hasOwnProperty(t)&&e.push(...n[t]),e.push(...a[t]),n[t]=e}),n}ownPropMetadata(t){return ao(t)&&this._ownPropMetadata(t,co(t))||{}}hasLifecycleHook(t,e){return t instanceof no&&e in t.prototype}guards(t){return{}}getter(t){return new Function("o","return o."+t+";")}setter(t){return new Function("o","v","return o."+t+" = v;")}method(t){return new Function("o","args",`if (!o.${t}) throw new Error('"${t}" is undefined');\n        return o.${t}.apply(o, args);`)}importUri(t){return"object"==typeof t&&t.filePath?t.filePath:"./"+j(t)}resourceUri(t){return"./"+j(t)}resolveIdentifier(t,e,n,a){return a}resolveEnum(t,e){return t[e]}}function lo(t){return t?t.map(t=>new(0,t.type.annotationCls)(...t.args?t.args:[])):[]}function co(t){const e=t.prototype?Object.getPrototypeOf(t.prototype):null;return(e?e.constructor:null)||Object}let fo=null;function ho(){return fo=fo||new uo}function go(t){return po(ho().parameters(t))}function po(t){const e=W();return t.map(t=>function(t,e){const n={token:null,host:!1,optional:!1,resolved:t.R3ResolvedDependencyType.Token,self:!1,skipSelf:!1};function a(e){n.resolved=t.R3ResolvedDependencyType.Token,n.token=e}if(Array.isArray(e)){if(0===e.length)throw new Error("Dependency array must have arguments.");for(let r=0;r<e.length;r++){const i=e[r];if(void 0!==i)if(i instanceof O||"Optional"===i.__proto__.ngMetadataName)n.optional=!0;else if(i instanceof S||"SkipSelf"===i.__proto__.ngMetadataName)n.skipSelf=!0;else if(i instanceof w||"Self"===i.__proto__.ngMetadataName)n.self=!0;else if(i instanceof I||"Host"===i.__proto__.ngMetadataName)n.host=!0;else if(i instanceof T)n.token=i.token;else if(i instanceof N){if(void 0===i.attributeName)throw new Error("Attribute name must be defined.");n.token=i.attributeName,n.resolved=t.R3ResolvedDependencyType.Attribute}else i===Xs?(n.token=i,n.resolved=t.R3ResolvedDependencyType.ChangeDetectorRef):a(i)}}else a(e);return n}(e,t))}function bo(t,e){let n=null;t.hasOwnProperty(M)||Object.defineProperty(t,M,{get:()=>{if(null===n){const a=e||{providedIn:null},r=yo(a)||xo(a)||vo(a)||_o(a),i={name:t.name,type:t,typeArgumentCount:0,providedIn:a.providedIn,ctorDeps:go(t),userDeps:void 0};if((yo(a)||xo(a))&&void 0!==a.deps&&(i.userDeps=po(a.deps)),r)if(yo(a))i.useClass=a.useClass;else if(vo(a))i.useValue=a.useValue;else if(xo(a))i.useFactory=a.useFactory;else{if(!_o(a))throw new Error("Unreachable state.");i.useExisting=a.useExisting}else i.useClass=t;n=W().compileInjectable(ct,`ng:///${t.name}/ngInjectableDef.js`,i)}return n}})}const mo=R({provide:String,useValue:R});function yo(t){return void 0!==t.useClass}function vo(t){return mo in t}function xo(t){return void 0!==t.useFactory}function _o(t){return void 0!==t.useExisting}const To=R({provide:String,useValue:R}),Oo=[];function wo(t,e){if(!e){const e=(new uo).parameters(t);return()=>new t(...ot(e))}if(To in e){const t=e;return()=>t.useValue}if(e.useExisting){const t=e;return()=>rt(t.useExisting)}if(e.useFactory){const t=e;return()=>t.useFactory(...ot(t.deps||Oo))}if(e.useClass){const n=e;let a=e.deps;if(!a){const e=new uo;a=e.parameters(t)}return()=>new n.useClass(...ot(a))}{let n=e.deps;if(!n){const e=new uo;n=e.parameters(t)}return()=>new t(...ot(n))}}const So=y("Injectable",void 0,void 0,void 0,(t,e)=>No(t,e)),Io=bo,No=function(t,e){e&&void 0!==e.providedIn&&!D(t)&&(t.ngInjectableDef=k({token:t,providedIn:e.providedIn,factory:wo(t,e)}))},Co=new K("The presence of this token marks an injector as being the root injector."),Ro={},Ao={},ko=[];let Eo=void 0;function Lo(){return void 0===Eo&&(Eo=new ut),Eo}function Do(t,e=null,n=null,a){return e=e||Lo(),new Po(t,n,e,a)}class Po{constructor(t,e,n,a=null){this.parent=n,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this._destroyed=!1;const r=[];bt([t],t=>this.processInjectorType(t,[],r)),e&&bt(e,n=>this.processProvider(n,t,e)),this.records.set($,jo(void 0,this)),this.isRootInjector=this.records.has(Co),this.injectorDefTypes.forEach(t=>this.get(t)),this.source=a||("object"==typeof t?null:j(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,e=J,n=C.Default){this.assertNotDestroyed();const a=et(this);try{if(!(n&C.SkipSelf)){let e=this.records.get(t);if(void 0===e){const n=("function"==typeof(r=t)||"object"==typeof r&&r instanceof K)&&D(t);n&&this.injectableDefInScope(n)&&(e=jo(Mo(t),Ro),this.records.set(t,e))}if(void 0!==e)return this.hydrate(t,e)}return(n&C.Self?Lo():this.parent).get(t,n&C.Optional?null:e)}catch(i){if("NullInjectorError"===i.name){if((i.ngTempTokenPath=i.ngTempTokenPath||[]).unshift(j(t)),a)throw i;return lt(i,t,"R3InjectorError",this.source)}throw i}finally{et(a)}var r}toString(){const t=[];return this.records.forEach((e,n)=>t.push(j(n))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(t,e,n){if(!(t=V(t)))return!1;let a=P(t);const r=null==a&&t.ngModule||void 0,i=void 0===r?t:r,s=-1!==n.indexOf(i);if(void 0!==r&&(a=P(r)),null==a)return!1;if(this.injectorDefTypes.add(i),this.records.set(i,jo(a.factory,Ro)),null!=a.imports&&!s){let t;n.push(i);try{bt(a.imports,a=>{this.processInjectorType(a,e,n)&&(void 0===t&&(t=[]),t.push(a))})}finally{}if(void 0!==t)for(let e=0;e<t.length;e++){const{ngModule:n,providers:a}=t[e];bt(a,t=>this.processProvider(t,n,a||ko))}}const o=a.providers;if(null!=o&&!s){const e=t;bt(o,t=>this.processProvider(t,e,o))}return void 0!==r&&void 0!==t.providers}processProvider(t,e,n){let a=Go(t=V(t))?t:V(t&&t.provide);const r=function(t,e,n){let a=qo(t,e,n);return Fo(t)?jo(void 0,t.useValue):jo(a,Ro)}(t,e,n);if(Go(t)||!0!==t.multi){const t=this.records.get(a);t&&void 0!==t.multi&&Br()}else{let e=this.records.get(a);e?void 0===e.multi&&Br():(e=jo(void 0,Ro,!0),e.factory=()=>ot(e.multi),this.records.set(a,e)),a=t,e.multi.push(t)}this.records.set(a,r)}hydrate(t,e){var n;return e.value===Ao?function(t){throw new Error("Cannot instantiate cyclic dependency! "+t)}(j(t)):e.value===Ro&&(e.value=Ao,e.value=e.factory()),"object"==typeof e.value&&e.value&&null!==(n=e.value)&&"object"==typeof n&&"function"==typeof n.ngOnDestroy&&this.onDestroy.add(e.value),e.value}injectableDefInScope(t){return!!t.providedIn&&("string"==typeof t.providedIn?"any"===t.providedIn||"root"===t.providedIn&&this.isRootInjector:this.injectorDefTypes.has(t.providedIn))}}function Mo(t){const e=D(t);if(null!==e)return e.factory;const n=P(t);if(null!==n)return n.factory;if(t instanceof K)throw new Error(`Token ${j(t)} is missing an ngInjectableDef definition.`);if(t instanceof Function)return function(t){const e=t.length;if(e>0){const n=new Array(e).fill("?");throw new Error(`Can't resolve all parameters for ${j(t)}: (${n.join(", ")}).`)}const n=(a=t)&&a[M]?(console.warn(`DEPRECATED: DI is instantiating a token "${a.name}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in v10. Please add @Injectable() to the "${a.name}" class.`),a[M]):null;var a;return null!==n?()=>n.factory(t):()=>new t}(t);throw new Error("unreachable")}function qo(t,e,n){let a=void 0;if(Go(t))return Mo(V(t));if(Fo(t))a=()=>V(t.useValue);else if((r=t)&&r.useExisting)a=()=>rt(V(t.useExisting));else if(function(t){return!(!t||!t.useFactory)}(t))a=()=>t.useFactory(...ot(t.deps||[]));else{const r=V(t&&(t.useClass||t.provide));if(r||function(t,e,n){let a="";throw t&&e&&(a=` - only instances of Provider and Type are allowed, got: [${e.map(t=>t==n?"?"+n+"?":"...").join(", ")}]`),new Error(`Invalid provider for the NgModule '${j(t)}'`+a)}(e,n,t),!function(t){return!!t.deps}(t))return Mo(r);a=()=>new r(...ot(t.deps))}var r;return a}function jo(t,e,n=!1){return{factory:t,value:e,multi:n?[]:void 0}}function Fo(t){return null!==t&&"object"==typeof t&&Q in t}function Go(t){return"function"==typeof t}function Vo(t,e,n){return Do({name:n},e,t,n)}const zo=function(t,e,n){return new Ko(t,e,n)};let Bo=(()=>{class t{static create(t,e){return Array.isArray(t)?zo(t,e,""):zo(t.providers,t.parent,t.name||"")}}return t.THROW_IF_NOT_FOUND=J,t.NULL=new ut,t.ngInjectableDef=k({token:t,providedIn:"any",factory:()=>rt($)}),t.__NG_ELEMENT_ID__=-1,t})();const Yo=function(t){return t},Ho=[],Uo=Yo,Wo=function(){return Array.prototype.slice.call(arguments)};class Ko{constructor(t,e=Bo.NULL,n=null){this.parent=e,this.source=n;const a=this._records=new Map;a.set(Bo,{token:Bo,fn:Yo,deps:Ho,value:this,useNew:!1}),a.set($,{token:$,fn:Yo,deps:Ho,value:this,useNew:!1}),function t(e,n){if(n)if((n=V(n))instanceof Array)for(let a=0;a<n.length;a++)t(e,n[a]);else{if("function"==typeof n)throw Jo("Function/Class not supported",n);if(!n||"object"!=typeof n||!n.provide)throw Jo("Unexpected provider",n);{let t=V(n.provide);const a=function(t){const e=function(t){let e=Ho;const n=t.deps;if(n&&n.length){e=[];for(let t=0;t<n.length;t++){let a=6,r=V(n[t]);if(r instanceof Array)for(let t=0,e=r;t<e.length;t++){const n=e[t];n instanceof O||n==O?a|=1:n instanceof S||n==S?a&=-3:n instanceof w||n==w?a&=-5:r=n instanceof T?n.token:V(n)}e.push({token:r,options:a})}}else if(t.useExisting)e=[{token:V(t.useExisting),options:6}];else if(!n&&!(Q in t))throw Jo("'deps' required",t);return e}(t);let n=Yo,a=Ho,r=!1,i=V(t.provide);if(Q in t)a=t.useValue;else if(t.useFactory)n=t.useFactory;else if(t.useExisting);else if(t.useClass)r=!0,n=V(t.useClass);else{if("function"!=typeof i)throw Jo("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",t);r=!0,n=i}return{deps:e,fn:n,useNew:r,value:a}}(n);if(!0===n.multi){let a=e.get(t);if(a){if(a.fn!==Wo)throw $o(t)}else e.set(t,a={token:n.provide,deps:[],useNew:!1,fn:Wo,value:Ho});t=n,a.deps.push({token:t,options:6})}const r=e.get(t);if(r&&r.fn==Wo)throw $o(t);e.set(t,a)}}}(a,t)}get(t,e,n=C.Default){const a=this._records.get(t);try{return function t(e,n,a,r,i,s){try{return function(e,n,a,r,i,s){let o;if(!n||s&C.SkipSelf)s&C.Self||(o=r.get(e,i,C.Default));else{if(o=n.value,o==Uo)throw Error("ɵCircular dependency");if(o===Ho){n.value=Uo;let e=void 0,i=n.useNew,s=n.fn,u=n.deps,l=Ho;if(u.length){l=[];for(let e=0;e<u.length;e++){const n=u[e],i=n.options,s=2&i?a.get(n.token):void 0;l.push(t(n.token,s,a,s||4&i?r:Bo.NULL,1&i?null:Bo.THROW_IF_NOT_FOUND,C.Default))}}n.value=o=i?new s(...l):s.apply(e,l)}}return o}(e,n,a,r,i,s)}catch(o){throw o instanceof Error||(o=new Error(o)),(o.ngTempTokenPath=o.ngTempTokenPath||[]).unshift(e),n&&n.value==Uo&&(n.value=Ho),o}}(t,a,this._records,this.parent,e,n)}catch(r){return lt(r,t,"StaticInjectorError",this.source)}}toString(){const t=[];return this._records.forEach((e,n)=>t.push(j(n))),`StaticInjector[${t.join(", ")}]`}}function $o(t){return Jo("Cannot mix multi providers and regular providers",t)}function Jo(t,e){return new Error(dt(t,e,"StaticInjectorError"))}function Zo(t){return t.length>1?" ("+function(t){const e=[];for(let n=0;n<t.length;++n){if(e.indexOf(t[n])>-1)return e.push(t[n]),e;e.push(t[n])}return e}(t.slice().reverse()).map(t=>j(t.token)).join(" -> ")+")":""}function Qo(t,e,n,a){const r=[e],i=n(r),s=a?function(t,e){const n=`${t} caused by: ${e instanceof Error?e.message:e}`,a=Error(n);return a.ngOriginalError=e,a}(i,a):Error(i);return s.addKey=Xo,s.keys=r,s.injectors=[t],s.constructResolvingMessage=n,s.ngOriginalError=a,s}function Xo(t,e){this.injectors.push(t),this.keys.push(e),this.message=this.constructResolvingMessage(this.keys)}function tu(t,e){const n=[];for(let a=0,r=e.length;a<r;a++){const t=e[a];n.push(t&&0!=t.length?t.map(j).join(" "):"?")}return Error("Cannot resolve all parameters for '"+j(t)+"'("+n.join(", ")+"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '"+j(t)+"' is decorated with Injectable.")}class eu{constructor(t,e){if(this.token=t,this.id=e,!t)throw new Error("Token must be defined!");this.displayName=j(this.token)}static get(t){return au.get(V(t))}static get numberOfKeys(){return au.numberOfKeys}}class nu{constructor(){this._allKeys=new Map}get(t){if(t instanceof eu)return t;if(this._allKeys.has(t))return this._allKeys.get(t);const e=new eu(t,eu.numberOfKeys);return this._allKeys.set(t,e),e}get numberOfKeys(){return this._allKeys.size}}const au=new nu;class ru{constructor(t){this.reflectionCapabilities=t}updateCapabilities(t){this.reflectionCapabilities=t}factory(t){return this.reflectionCapabilities.factory(t)}parameters(t){return this.reflectionCapabilities.parameters(t)}annotations(t){return this.reflectionCapabilities.annotations(t)}propMetadata(t){return this.reflectionCapabilities.propMetadata(t)}hasLifecycleHook(t,e){return this.reflectionCapabilities.hasLifecycleHook(t,e)}getter(t){return this.reflectionCapabilities.getter(t)}setter(t){return this.reflectionCapabilities.setter(t)}method(t){return this.reflectionCapabilities.method(t)}importUri(t){return this.reflectionCapabilities.importUri(t)}resourceUri(t){return this.reflectionCapabilities.resourceUri(t)}resolveIdentifier(t,e,n,a){return this.reflectionCapabilities.resolveIdentifier(t,e,n,a)}resolveEnum(t,e){return this.reflectionCapabilities.resolveEnum(t,e)}}const iu=new ru(new uo);class su{constructor(t,e,n){this.key=t,this.optional=e,this.visibility=n}static fromKey(t){return new su(t,!1,null)}}const ou=[];class uu{constructor(t,e,n){this.key=t,this.resolvedFactories=e,this.multiProvider=n,this.resolvedFactory=this.resolvedFactories[0]}}class lu{constructor(t,e){this.factory=t,this.dependencies=e}}function du(t){let e,n;if(t.useClass){const a=V(t.useClass);e=iu.factory(a),n=hu(a)}else t.useExisting?(e=t=>t,n=[su.fromKey(eu.get(t.useExisting))]):t.useFactory?(e=t.useFactory,n=function(t,e){if(e){const n=e.map(t=>[t]);return e.map(e=>gu(t,e,n))}return hu(t)}(t.useFactory,t.deps)):(e=()=>t.useValue,n=ou);return new lu(e,n)}function cu(t){return new uu(eu.get(t.provide),[du(t)],t.multi||!1)}function fu(t){const e=function(t,e){for(let n=0;n<t.length;n++){const a=t[n],r=e.get(a.key.id);if(r){if(a.multiProvider!==r.multiProvider)throw Error(`Cannot mix multi providers and regular providers, got: ${r} ${a}`);if(a.multiProvider)for(let t=0;t<a.resolvedFactories.length;t++)r.resolvedFactories.push(a.resolvedFactories[t]);else e.set(a.key.id,a)}else{let t;t=a.multiProvider?new uu(a.key,a.resolvedFactories.slice(),a.multiProvider):a,e.set(a.key.id,t)}}return e}(function t(e,n){return e.forEach(e=>{if(e instanceof no)n.push({provide:e,useClass:e});else if(e&&"object"==typeof e&&void 0!==e.provide)n.push(e);else{if(!(e instanceof Array))throw Error("Invalid provider - only instances of Provider and Type are allowed, got: "+e);t(e,n)}}),n}(t,[]).map(cu),new Map);return Array.from(e.values())}function hu(t){const e=iu.parameters(t);if(!e)return[];if(e.some(t=>null==t))throw tu(t,e);return e.map(n=>gu(t,n,e))}function gu(t,e,n){let a=null,r=!1;if(!Array.isArray(e))return pu(e instanceof T?e.token:e,r,null);let i=null;for(let s=0;s<e.length;++s){const t=e[s];t instanceof no?a=t:t instanceof T?a=t.token:t instanceof O?r=!0:t instanceof w||t instanceof S?i=t:t instanceof K&&(a=t)}if(a=V(a),null!=a)return pu(a,r,i);throw tu(t,n)}function pu(t,e,n){return new su(eu.get(t),e,n)}const bu=new Object;class mu{static resolve(t){return fu(t)}static resolveAndCreate(t,e){const n=mu.resolve(t);return mu.fromResolvedProviders(n,e)}static fromResolvedProviders(t,e){return new yu(t,e)}}let yu=(()=>{class t{constructor(t,e){this._constructionCounter=0,this._providers=t,this.parent=e||null;const n=t.length;this.keyIds=new Array(n),this.objs=new Array(n);for(let a=0;a<n;a++)this.keyIds[a]=t[a].key.id,this.objs[a]=bu}get(t,e=J){return this._getByKey(eu.get(t),null,e)}resolveAndCreateChild(t){const e=mu.resolve(t);return this.createChildFromResolved(e)}createChildFromResolved(e){const n=new t(e);return n.parent=this,n}resolveAndInstantiate(t){return this.instantiateResolved(mu.resolve([t])[0])}instantiateResolved(t){return this._instantiateProvider(t)}getProviderAtIndex(t){if(t<0||t>=this._providers.length)throw function(t){return Error(`Index ${t} is out-of-bounds.`)}(t);return this._providers[t]}_new(t){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw Qo(this,t.key,(function(t){return"Cannot instantiate cyclic dependency!"+Zo(t)}));return this._instantiateProvider(t)}_getMaxNumberOfObjects(){return this.objs.length}_instantiateProvider(t){if(t.multiProvider){const e=new Array(t.resolvedFactories.length);for(let n=0;n<t.resolvedFactories.length;++n)e[n]=this._instantiate(t,t.resolvedFactories[n]);return e}return this._instantiate(t,t.resolvedFactories[0])}_instantiate(t,e){const n=e.factory;let a,r;try{a=e.dependencies.map(t=>this._getByReflectiveDependency(t))}catch(s){throw s.addKey&&s.addKey(this,t.key),s}try{r=n(...a)}catch(s){throw Qo(this,t.key,(function(t){const e=j(t[0].token);return`${i.message}: Error during instantiation of ${e}!${Zo(t)}.`}),i=s)}var i;return r}_getByReflectiveDependency(t){return this._getByKey(t.key,t.visibility,t.optional?null:J)}_getByKey(e,n,a){return e===t.INJECTOR_KEY?this:n instanceof w?this._getByKeySelf(e,a):this._getByKeyDefault(e,a,n)}_getObjByKeyId(t){for(let e=0;e<this.keyIds.length;e++)if(this.keyIds[e]===t)return this.objs[e]===bu&&(this.objs[e]=this._new(this._providers[e])),this.objs[e];return bu}_throwOrNull(t,e){if(e!==J)return e;throw function(t,e){return Qo(t,e,(function(t){return`No provider for ${j(t[0].token)}!${Zo(t)}`}))}(this,t)}_getByKeySelf(t,e){const n=this._getObjByKeyId(t.id);return n!==bu?n:this._throwOrNull(t,e)}_getByKeyDefault(e,n,a){let r;for(r=a instanceof S?this.parent:this;r instanceof t;){const t=r,n=t._getObjByKeyId(e.id);if(n!==bu)return n;r=t.parent}return null!==r?r.get(e.token,n):this._throwOrNull(e,n)}get displayName(){return`ReflectiveInjector(providers: [${function(t,e){const n=new Array(t._providers.length);for(let a=0;a<t._providers.length;++a)n[a]=e(t.getProviderAtIndex(a));return n}(this,t=>' "'+t.key.displayName+'" ').join(", ")}])`}toString(){return this.displayName}}return t.INJECTOR_KEY=eu.get(Bo),t})();const vu=new K("AnalyzeForEntryComponents");class xu{}const _u=_("ContentChildren",(t,e={})=>Object.assign({selector:t,first:!1,isViewQuery:!1,descendants:!1},e),xu),Tu=_("ContentChild",(t,e={})=>Object.assign({selector:t,first:!0,isViewQuery:!1,descendants:!0},e),xu),Ou=_("ViewChildren",(t,e={})=>Object.assign({selector:t,first:!1,isViewQuery:!0,descendants:!0},e),xu),wu=_("ViewChild",(t,e)=>Object.assign({selector:t,first:!0,isViewQuery:!0,descendants:!0},e),xu);function Su(t){const e=[],n=new Map;function a(e){let a=n.get(e);if(!a){const r=t(e);n.set(e,a=r.then(Au))}return a}return Iu.forEach((t,n)=>{const r=[];t.templateUrl&&r.push(a(t.templateUrl).then(e=>{t.template=e}));const i=t.styleUrls,s=t.styles||(t.styles=[]),o=t.styles.length;i&&i.forEach((e,n)=>{s.push(""),r.push(a(e).then(a=>{s[o+n]=a,i.splice(i.indexOf(e),1),0==i.length&&(t.styleUrls=void 0)}))});const u=Promise.all(r).then(()=>function(t){Nu.delete(t)}(n));e.push(u)}),Ru(),Promise.all(e).then(()=>{})}let Iu=new Map;const Nu=new Set;function Cu(t){return!!(t.templateUrl&&!t.hasOwnProperty("template")||t.styleUrls&&t.styleUrls.length)}function Ru(){const t=Iu;return Iu=new Map,t}function Au(t){return"string"==typeof t?t:t.text()}function ku(t){const e=Ae(),n=e[1];n.firstTemplatePass&&(function(t,e,n){const a=t.expandoInstructions,r=a.length;r>=2&&a[r-2]===e.hostBindings?a[r-1]=a[r-1]+n:a.push(e.hostBindings,n)}(n,Se,t),function(t,e,n){for(let a=0;a<n;a++)e.push(ci),t.blueprint.push(ci),t.data.push(null)}(n,e,t))}let Eu=null;function Lu(){if(!Eu){const t=U.Symbol;if(t&&t.iterator)Eu=t.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let e=0;e<t.length;++e){const n=t[e];"entries"!==n&&"size"!==n&&Map.prototype[n]===Map.prototype.entries&&(Eu=n)}}}return Eu}function Du(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}function Pu(t,e){const n=qu(t),a=qu(e);if(n&&a)return function(t,e,n){const a=t[Lu()](),r=e[Lu()]();for(;;){const t=a.next(),e=r.next();if(t.done&&e.done)return!0;if(t.done||e.done)return!1;if(!n(t.value,e.value))return!1}}(t,e,Pu);{const r=t&&("object"==typeof t||"function"==typeof t),i=e&&("object"==typeof e||"function"==typeof e);return!(n||!r||a||!i)||Du(t,e)}}class Mu{constructor(t){this.wrapped=t}static wrap(t){return new Mu(t)}static unwrap(t){return Mu.isWrapped(t)?t.wrapped:t}static isWrapped(t){return t instanceof Mu}}function qu(t){return!!ju(t)&&(Array.isArray(t)||!(t instanceof Map)&&Lu()in t)}function ju(t){return null!==t&&("function"==typeof t||"object"==typeof t)}function Fu(t,e,n){return t[e]=n}function Gu(t,e){return t[e]}function Vu(t,e,n){return!!yn(t[e],n)&&(t[e]=n,!0)}function zu(t,e,n,a){const r=Vu(t,e,n);return Vu(t,e+1,a)||r}function Bu(t,e,n,a,r){const i=zu(t,e,n,a);return Vu(t,e+2,r)||i}function Yu(t,e,n,a,r,i){const s=zu(t,e,n,a);return zu(t,e+2,r,i)||s}function Hu(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n),Hu}function Uu(t,e){const n=t[7]++;return cs(t),Vu(t,n,e)?e:ci}function Wu(t,e,n,a){const r=un(),i=Ae(),s=Uu(i,e);return s!==ci&&es(r,t,s,i,n,a),Wu}function Ku(t,e){let n=!1;const a=t[1].data;let r=t[7];if(null==a[r]){for(let t=2;t<e.length;t+=2)a[r++]=e[t];r=t[7]}for(let s=1;s<e.length;s+=2)n=Vu(t,r++,e[s])||n;if(t[7]=r,cs(t,e[0],e[e.length-1]),!n)return ci;let i=e[0];for(let s=1;s<e.length;s+=2)i+=vn(e[s])+e[s+1];return i}function $u(t,e,n,a){const r=Vu(t,t[7]++,n);return cs(t,e,a),r?e+vn(n)+a:ci}function Ju(t,e,n,a,r,i){const s=t[7],o=zu(t,s,n,r);return t[7]+=2,cs(t,e,i)&&(t[1].data[s]=a),o?e+vn(n)+a+vn(r)+i:ci}function Zu(t,e,n,a,r,i,s,o){const u=t[7],l=Bu(t,u,n,r,s);if(t[7]+=3,cs(t,e,o)){const e=t[1].data;e[u]=a,e[u+1]=i}return l?e+vn(n)+a+vn(r)+i+vn(s)+o:ci}function Qu(t,e,n,a,r,i,s,o,u,l){const d=t[7],c=Yu(t,d,n,r,s,u);if(t[7]+=4,cs(t,e,l)){const e=t[1].data;e[d]=a,e[d+1]=i,e[d+2]=o}return c?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l:ci}function Xu(t,e,n,a,r,i,s,o,u,l,d,c){const f=t[7];let h=Yu(t,f,n,r,s,u);if(h=Vu(t,f+4,d)||h,t[7]+=5,cs(t,e,c)){const e=t[1].data;e[f]=a,e[f+1]=i,e[f+2]=o,e[f+3]=l}return h?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c:ci}function tl(t,e,n,a,r,i,s,o,u,l,d,c,f,h){const g=t[7];let p=Yu(t,g,n,r,s,u);if(p=zu(t,g+4,d,f)||p,t[7]+=6,cs(t,e,h)){const e=t[1].data;e[g]=a,e[g+1]=i,e[g+2]=o,e[g+3]=l,e[g+4]=c}return p?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h:ci}function el(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p){const b=t[7];let m=Yu(t,b,n,r,s,u);if(m=Bu(t,b+4,d,f,g)||m,t[7]+=7,cs(t,e,p)){const e=t[1].data;e[b]=a,e[b+1]=i,e[b+2]=o,e[b+3]=l,e[b+4]=c,e[b+5]=h}return m?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h+vn(g)+p:ci}function nl(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m){const y=t[7];let v=Yu(t,y,n,r,s,u);if(v=Yu(t,y+4,d,f,g,b)||v,t[7]+=8,cs(t,e,m)){const e=t[1].data;e[y]=a,e[y+1]=i,e[y+2]=o,e[y+3]=l,e[y+4]=c,e[y+5]=h,e[y+6]=p}return v?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h+vn(g)+p+vn(b)+m:ci}function al(t,e,n,a,r,i){const s=un(),o=Ae(),u=$u(o,e,n,a);return u!==ci&&es(s,t,u,o,r,i),al}function rl(t,e,n,a,r,i,s,o){const u=un(),l=Ae(),d=Ju(l,e,n,a,r,i);return d!==ci&&es(u,t,d,l,s,o),rl}function il(t,e,n,a,r,i,s,o,u,l){const d=un(),c=Ae(),f=Zu(c,e,n,a,r,i,s,o);return f!==ci&&es(d,t,f,c,u,l),il}function sl(t,e,n,a,r,i,s,o,u,l,d,c){const f=un(),h=Ae(),g=Qu(h,e,n,a,r,i,s,o,u,l);return g!==ci&&es(f,t,g,h,d,c),sl}function ol(t,e,n,a,r,i,s,o,u,l,d,c,f,h){const g=un(),p=Ae(),b=Xu(p,e,n,a,r,i,s,o,u,l,d,c);return b!==ci&&es(g,t,b,p,f,h),ol}function ul(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p){const b=un(),m=Ae(),y=tl(m,e,n,a,r,i,s,o,u,l,d,c,f,h);return y!==ci&&es(b,t,y,m,g,p),ul}function ll(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m){const y=un(),v=Ae(),x=el(v,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return x!==ci&&es(y,t,x,v,b,m),ll}function dl(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y,v){const x=un(),_=Ae(),T=nl(_,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return T!==ci&&es(x,t,T,_,y,v),dl}function cl(t,e,n,a){const r=un(),i=Ae(),s=Ku(i,e);return s!==ci&&es(r,t,s,i,n,a),cl}function fl(t){os(Mr(t),t)}function hl(t){!function(t,e){const n=0===t.flags;if(t.flags|=1,n&&t.clean==Si){let e;t.clean=new Promise(t=>e=t),t.scheduler(()=>{if(1&t.flags&&(t.flags&=-2,ss(t)),2&t.flags){t.flags&=-3;const e=t.playerHandler;e&&e.flushPlayers()}t.clean=Si,e(null)})}}(is(Mr(t))[9])}function gl(t){const e=Ae(),n=yl(e,t,null,null);e[1].firstTemplatePass&&(n.tViews=[]),He()}function pl(t,e,n,a,r,i,s,o){const u=Ae(),l=u[1],d=yl(u,t,r||null,i||null);if(l.firstTemplatePass){Hi(l,u,d,s||null);const t=d.tViews=Fi(-1,e,n,a,l.directiveRegistry,l.pipeRegistry,null,null);null!==l.queries&&(l.queries.template(l,d),t.queries=l.queries.embeddedTView(d))}qi(l,u,d,o),qr(be(d,u),u),re(l,d),He()}function bl(t){const e=Ae(),n=e[1];ze(ve(n.data,t),!0),e[t+19][2]=0,ie(e,n,$e(),void 0)}function ml(){let t=Ve();Ye()?He():(t=t.parent,ze(t,!1));const e=Ae()[t.index],n=e[2];for(;n<e.length-9;)Rs(e,n)}function yl(t,e,n,a){const r=e+19,i=t[r]=t[12].createComment(""),s=Ai(t[1],t[6],e,0,n,a),o=t[r]=ns(i,t,i,s);return Ms(i,s,t),rs(t,o),s}function vl(t,e){const n=Ae(),a=n[1],r=t+19;r>=a.data.length&&(a.data[r]=null,a.blueprint[r]=null),n[r]=e}function xl(t){return ve(We,t)}function _l(t){return ve(Ae(),t)}function Tl(t,e=C.Default){t=V(t);const n=Ae();return null==n?rt(t,e):_a(Ve(),n,t,e)}function Ol(t){return xa(Ve(),t)}function wl(){var t,e;Ae()[1].firstTemplatePass&&(t=Ve(),e=jl(),Nn(Gl(t),e),Nn(Fl(t),e))}function Sl(t){bn(t)}function Il(t,e,n){Nl(un(),t,e,n)}function Nl(t,e,n,a){Rl(t,Ae()[7]++,e,function(t,e){if(t===ci)return t;let n=null;return null!==t&&(n=e?vn(t)+e:t),n}(n,a),!1,zl())}function Cl(t,e){const n=Ae()[7]++;Rl(un(),n,t,e,!0,zl())}function Rl(t,e,n,a,r,i){const s=Ae(),o=ye(t,s),u=be(o,s);let l=!1;if(a!==ci)if(r)l=Qr(Gl(o),s,u,n,e,a,i,!1);else{const t=mn();l=Xr(Fl(o),s,u,n,e,a,t,i,!1)}return l}function Al(t){const e=un(),n=Ae(),a=ye(e,n),r=Fl(a),i=jl(),s=n[7]++;!i&&$n(a)&&t!==ci&&(Dl(r,n,a,s,t,!1),t=ci),Ll(e,r,s,t,!1,zl())}function kl(t){El(un(),t)}function El(t,e){const n=Ae(),a=ye(t,n),r=Gl(a),i=jl(),s=n[7]++;!i&&Kn(a)&&e!==ci&&(Dl(r,n,a,s,e,!0),e=ci),Ll(t,r,s,e,!0,zl())}function Ll(t,e,n,a,r,i){pi();const s=Ae();let o=!1;if(a!==ci){const u=be(ye(t,s),s),l=s[n];o=Vn(l,a);const d=function(t,e,n){const a=Array.isArray(t)?t:[null];a[0]=e||null;for(let o=1;o<a.length;o+=2)Zn(a,o,null);let r,i=null,s=!1;if("string"==typeof e?e.length&&(i=e.split(/\s+/),s=!0):(i=e?Object.keys(e):null,r=e),i)for(let o=0;o<i.length;o++){const t=i[o];vi(a,n?Yn(t):t,!!s||r[t],!0)}return a}(l,a,!r);r?Qr(e,s,u,null,n,d,i,o):Xr(e,s,u,null,n,d,mn(),i,o)}return o}function Dl(t,e,n,a,r,i){e[a]!==r&&((r||jn(t))&&ys(e,n.inputs[i?"class":"style"],function(t,e,n){let a=e;var r;return t.length>0&&(a=n?Bn(t,((r=e)&&"string"!=typeof r&&(r=Object.keys(r).join(" ")),r||"")):Bn(t,function(t){let e="";if(t){const n=Object.keys(t);for(let a=0;a<n.length;a++){const r=n[a];e=Bn(e,`${r}:${t[r]}`,";")}}return e}(e),";")),a}(Wn(t),r,i)),e[a]=r)}function Pl(){const t=un(),e=Ae(),n=ye(t,e),a=function(t,e){return 3===t.type?e[12]:null}(n,e),r=be(n,e),i=jl(),s=mn();(function(t,e,n,a,r,i,s){const o=n?Fn(n):!!a&&Fn(a),u=qn(n,i),l=qn(a,i);Zr.length&&(u||l)&&ei();const d=fe(r,o),c=ii(t,r,e,n,u,d.classesBitMask,li,null),f=ii(t,r,e,a,l,d.stylesBitMask,ui,s);c&&f?(he(),o&&function(t){le.delete(t)}(r)):o&&function(t,e){le.set(t,e)}(r,d)})(a,e,Gl(n),Fl(n),r,i,s),bn(null)}function Ml(t,e,n){let a=!1,r=Hn(t.styles),i=Hn(t.classes),s=-1;for(let o=n;o<e.length;o++){const t=e[o];"number"==typeof t?s=t:1==s?(i=i||[""],vi(i,t,!0),a=!0):2==s&&(r=r||[""],vi(r,t,e[++o]),a=!0)}return i&&i.length>1&&(t.classes||(t.classes=i),ql(t.classes,xi(i,!0))),r&&r.length>1&&(t.styles||(t.styles=r),ql(t.styles,xi(r,!1))),a}function ql(t,e){Hn(t)[0]=e}function jl(){return De+Pe}function Fl(t){return Vl(t,!1)}function Gl(t){return Vl(t,!0)}function Vl(t,e){let n=e?t.classes:t.styles;return Un(n)||(n=[n||[""],0,0,1,0,"--MAP--"],e?t.classes=n:t.styles=n),n}function zl(){return Me>0}function Bl(t,e,n,a){const r=Ae(),i=r[1],s=r[t+19]=Ci(e),o=r[12],u=Ai(i,r[6],t,3,e,n||null);if(null!=n){const t=na(s,n);i.firstTemplatePass&&Ml(u,n,t)}if(xs(o,s,u),Ms(s,u,r),0===de&&qr(s,r),de++,i.firstTemplatePass){Hi(i,r,u,a||null);const t=hs(u);t&&t.hasOwnProperty("class")&&(u.flags|=8),t&&t.hasOwnProperty("style")&&(u.flags|=16),null!==i.queries&&i.queries.elementStart(i,u)}qi(i,r,u),Mi(i,u,r)}function Yl(){let t=Ve();Ye()?He():(t=t.parent,ze(t,!1));const e=t,n=Ae(),a=n[1];re(a,t),de--,a.firstTemplatePass&&null!==a.queries&&Qt(t)&&a.queries.elementEnd(t),Kn(e)&&e.classes&&Wl(e.classes,n,e.inputs.class),$n(e)&&e.styles&&Wl(e.styles,n,e.inputs.style)}function Hl(t,e,n,a){Bl(t,e,n,a),Yl()}function Ul(t){const e=un(),n=Ae(),a=n[1],r=ye(e,n);if(3===r.type){const e=be(r,n),i=na(e,t);a.firstTemplatePass&&Ml(r,t,i)&&xs(n[12],e,r)}}function Wl(t,e,n){ys(e,n,Wn(t)||null)}function Kl(t,e,n){const a=Ae(),r=a[1],i=a[t+19]=a[12].createComment(""),s=Ai(r,a[6],t,4,"ng-container",e||null);e&&r.firstTemplatePass&&Ml(s,e,0),Ms(i,s,a),r.firstTemplatePass&&(Hi(r,a,s,n||null),r.queries&&r.queries.elementStart(r,s)),qi(r,a,s),qr(i,a),Mi(r,s,a)}function $l(){let t=Ve();const e=Ae()[1];Ye()?He():(t=t.parent,ze(t,!1)),re(e,t),e.firstTemplatePass&&null!==e.queries&&Qt(t)&&e.queries.elementEnd(t)}function Jl(t,e,n){Kl(t,e,n),$l()}function Zl(t,e,n){const a=Ae(),r=Ve(),i=2===r.type?r.parent:r,s=a[i.index];let o=function(t,e,n){for(let a=e+9;a<t.length;a++){const e=t[a][1].id;if(e===n)return t[a];if(!(e<n))break;Rs(t,a-9)}return null}(s,s[2],t);if(o)Ee=!0,an(o,o[1].node);else{o=Ri(a,function(t,e,n,a){const r=Ae()[1],i=a.tViews;return(t>=i.length||null==i[t])&&(i[t]=Fi(t,null,e,n,r.directiveRegistry,r.pipeRegistry,null,null)),i[t]}(t,e,n,i),null,16,null,null);const s=Ye()?r:r&&r.parent;ki(o[1],s,t,o),an(o,o[1].node)}return s&&(Ue(o)&&Is(o,s,s[2]),s[2]++),Ue(o)?3:2}function Ql(){const t=Ae(),e=t[6];Ue(t)&&(Ii(t),t[2]&=-5),Oe(t),Ii(t),sn(t[3][3],!0),ze(e,!1)}function Xl(){return Ae()}function td(t){return!!t&&"function"==typeof t.then}function ed(t){return!!t&&"function"==typeof t.subscribe}function nd(t,e,n=!1,a){rd(t,e,n,a)}function ad(t,e,n=!1,a){rd(t,e,n,a,bs)}function rd(t,e,n=!1,a,r){const i=Ae(),s=Ve(),o=i[1],u=o.firstTemplatePass&&(o.cleanup||(o.cleanup=[]));let l=!0;if(3===s.type){const o=be(s,i),d=a?a(o):St,c=d.target||o,f=r?r(s,i):i[12],h=gs(i),g=h.length,p=a?t=>a(ge(t[s.index])).target:s.index;if(ta(f)){let n=null;if(!a&&function(t){return t.directiveEnd>t.directiveStart}(s)&&(n=function(t,e,n){const a=t[1].cleanup;if(null!=a)for(let r=0;r<a.length-1;r+=2){const i=a[r];if(i===e&&a[r+1]===n){const e=t[8],n=a[r+2];return e.length>n?e[n]:null}"string"==typeof i&&(r+=2)}return null}(i,t,s.index)),null!==n)e.__ngNextListenerFn__=n.__ngNextListenerFn__,n.__ngNextListenerFn__=e,l=!1;else{e=sd(s,i,e,!1);const n=f.listen(d.name||c,t,e);h.push(e,n),u&&u.push(t,p,g,g+1)}}else e=sd(s,i,e,!0),c.addEventListener(t,e,n),h.push(e),u&&u.push(t,p,g,n)}void 0===s.outputs&&(s.outputs=zi(s,1));const d=s.outputs;let c;if(l&&d&&(c=d[t])){const n=c.length;if(n){const a=gs(i);for(let r=0;r<n;r+=3){const n=i[c[r]][c[r+2]].subscribe(e),o=a.length;a.push(e,n),u&&u.push(t,s.index,o,-(o+1))}}}}function id(t,e,n){try{return!1!==e(n)}catch(a){return ms(t,a),!1}}function sd(t,e,n,a){return function r(i){const s=1&t.flags?xe(t.index,e):e;0==(32&e[2])&&is(s);let o=id(e,n,i),u=r.__ngNextListenerFn__;for(;u;)o=id(e,u,i)&&o,u=u.__ngNextListenerFn__;return a&&!1===o&&(i.preventDefault(),i.returnValue=!1),o}}function od(t=1){return rn(t)}function ud(t,e){let n=null;const a=function(t){const e=t.attrs;if(null!=e){const t=e.indexOf(5);if(0==(1&t))return e[t+1]}return null}(t);for(let r=0;r<e.length;r++){const i=e[r];if("*"!==i){if(null===a?$r(t,i,!0):Jr(a,i))return r}else n=r}return n}function ld(t){const e=da(Ae())[6];if(!e.projection){const n=e.projection=new Array(t?t.length:1).fill(null),a=n.slice();let r=e.child;for(;null!==r;){const e=t?ud(r,t):0;null!==e&&(a[e]?a[e].projectionNext=r:n[e]=r,a[e]=r),r=r.next}}}let dd=!1;function cd(t){dd=t}function fd(t,e=0,n){const a=Ae(),r=Ai(a[1],a[6],t,1,null,n||null);null===r.projection&&(r.projection=e),He(),dd||Fs(a,r,e,da(a))}function hd(t,e,n){return gd(t,"",e,"",n),hd}function gd(t,e,n,a,r){const i=un(),s=$u(Ae(),e,n,a);return s!==ci&&Yi(i,t,s,r),gd}function pd(t,e,n,a,r,i,s){const o=un(),u=Ju(Ae(),e,n,a,r,i);return u!==ci&&Yi(o,t,u,s),pd}function bd(t,e,n,a,r,i,s,o,u){const l=un(),d=Zu(Ae(),e,n,a,r,i,s,o);return d!==ci&&Yi(l,t,d,u),bd}function md(t,e,n,a,r,i,s,o,u,l,d){const c=un(),f=Qu(Ae(),e,n,a,r,i,s,o,u,l);return f!==ci&&Yi(c,t,f,d),md}function yd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=un(),g=Xu(Ae(),e,n,a,r,i,s,o,u,l,d,c);return g!==ci&&Yi(h,t,g,f),yd}function vd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=un(),b=tl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h);return b!==ci&&Yi(p,t,b,g),vd}function xd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=un(),y=el(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return y!==ci&&Yi(m,t,y,b),xd}function _d(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y){const v=un(),x=nl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return x!==ci&&Yi(v,t,x,y),_d}function Td(t,e,n){const a=un(),r=Ku(Ae(),e);return r!==ci&&Yi(a,t,r,n),Td}function Od(t,e){const n=Ae(),a=n[t+19]=ws(e,n[12]),r=Ai(n[1],n[6],t,3,null,null);He(),Ms(a,r,n)}function wd(t){const e=Ae(),n=un(),a=Uu(e,t);a!==ci&&vs(e,n,vn(a))}function Sd(t){return Id("",t,""),Sd}function Id(t,e,n){const a=un(),r=Ae(),i=$u(r,t,e,n);return i!==ci&&vs(r,a,i),Id}function Nd(t,e,n,a,r){const i=un(),s=Ae(),o=Ju(s,t,e,n,a,r);return o!==ci&&vs(s,i,o),Nd}function Cd(t,e,n,a,r,i,s){const o=un(),u=Ae(),l=Zu(u,t,e,n,a,r,i,s);return l!==ci&&vs(u,o,l),Cd}function Rd(t,e,n,a,r,i,s,o,u){const l=un(),d=Ae(),c=Qu(d,t,e,n,a,r,i,s,o,u);return c!==ci&&vs(d,l,c),Rd}function Ad(t,e,n,a,r,i,s,o,u,l,d){const c=un(),f=Ae(),h=Xu(f,t,e,n,a,r,i,s,o,u,l,d);return h!==ci&&vs(f,c,h),Ad}function kd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=un(),g=Ae(),p=tl(g,t,e,n,a,r,i,s,o,u,l,d,c,f);return p!==ci&&vs(g,h,p),kd}function Ed(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=un(),b=Ae(),m=el(b,t,e,n,a,r,i,s,o,u,l,d,c,f,h,g);return m!==ci&&vs(b,p,m),Ed}function Ld(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=un(),y=Ae(),v=nl(y,t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b);return v!==ci&&vs(y,m,v),Ld}function Dd(t){const e=un(),n=Ae(),a=Ku(n,t);return a!==ci&&vs(n,e,a),Dd}function Pd(t,e,n){const a=$u(Ae(),t,e,n);El(un(),a)}function Md(t,e,n,a,r){const i=Ju(Ae(),t,e,n,a,r);El(un(),i)}function qd(t,e,n,a,r,i,s){const o=Zu(Ae(),t,e,n,a,r,i,s);El(un(),o)}function jd(t,e,n,a,r,i,s,o,u){const l=Qu(Ae(),t,e,n,a,r,i,s,o,u);El(un(),l)}function Fd(t,e,n,a,r,i,s,o,u,l,d){const c=Xu(Ae(),t,e,n,a,r,i,s,o,u,l,d);El(un(),c)}function Gd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=tl(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f);El(un(),h)}function Vd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=el(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f,h,g);El(un(),p)}function zd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=nl(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b);El(un(),m)}function Bd(t){const e=Ku(Ae(),t);El(un(),e)}function Yd(t,e,n,a,r){const i=$u(Ae(),e,n,a);return Nl(un(),t,i,r),Yd}function Hd(t,e,n,a,r,i,s){const o=Ju(Ae(),e,n,a,r,i);return Nl(un(),t,o,s),Hd}function Ud(t,e,n,a,r,i,s,o,u){const l=Zu(Ae(),e,n,a,r,i,s,o);return Nl(un(),t,l,u),Ud}function Wd(t,e,n,a,r,i,s,o,u,l,d){const c=Qu(Ae(),e,n,a,r,i,s,o,u,l);return Nl(un(),t,c,d),Wd}function Kd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=Xu(Ae(),e,n,a,r,i,s,o,u,l,d,c);return Nl(un(),t,h,f),Kd}function $d(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=tl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h);return Nl(un(),t,p,g),$d}function Jd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=el(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return Nl(un(),t,m,b),Jd}function Zd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y){const v=nl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return Nl(un(),t,v,y),Zd}function Qd(t,e,n){const a=Ku(Ae(),e);return Nl(un(),t,a,n),Qd}function Xd(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n,!0),Xd}function tc(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n,!0,bs),tc}function ec(t){const e=lc(t);return void 0===e.component&&(e.component=function(t,e){const n=e[1].data[t];return 1&n.flags?e[n.directiveStart]:null}(e.nodeIndex,e.lView)),e.component}function nc(t){return lc(t).lView[9]}function ac(t){let e,n=oc(t).lView;for(;null===n[0]&&(e=la(n));)n=e;return 512&n[2]?null:n[9]}function rc(t){return[...ca(t).components]}function ic(t){const e=oc(t);return new Ca(e.lView[1].data[e.nodeIndex],e.lView)}function sc(t){const e=oc(t);return void 0===e.directives&&(e.directives=Vr(e.nodeIndex,e.lView,!1)),e.directives||[]}function oc(t,e=!0){const n=Dr(t);if(!n&&e)throw new Error("Invalid ng target");return n}function uc(t){return Dr(t).native}function lc(t){if(!(t instanceof Node))throw new Error("Expecting instance of DOM Node");return oc(t)}function dc(t){return"boolean"==typeof t.useCapture}function cc(t){const e=lc(t).lView,n=e[8],a=e[1].cleanup,r=[];if(a&&n)for(let i=0;i<a.length;){const s=a[i++],o=a[i++];if("string"==typeof s){const u=s,l=ge(e[o]),d=n[a[i++]],c=a[i++],f="boolean"==typeof c?c:!(c>=0)&&null;t==l&&r.push({element:t,name:u,callback:d,useCapture:f})}}return r.sort(fc),r}function fc(t,e){return t.name==e.name?0:t.name<e.name?-1:1}let hc=!1;function gc(){hc||(hc=!0,pc("getComponent",ec),pc("getContext",nc),pc("getListeners",cc),pc("getViewComponent",ac),pc("getHostElement",uc),pc("getInjector",ic),pc("getRootComponents",rc),pc("getDirectives",sc),pc("markDirty",hl))}function pc(t,e){if(U){let n=U.ng;n||(n=U.ng={}),n[t]=e}}function bc(t,e={}){qe(null);const n=e.rendererFactory||ea,a=e.sanitizer||null,r=Ht(t);r.type!=t&&(r.type=t);const i=Gi(n,e.host||r.selectors[0][0]),s=r.onPush?576:528,o=vc(e.scheduler,e.playerHandler),u=n.createRenderer(i,r),l=Ri(null,Fi(-1,null,1,0,null,null,null,null),o,s,null,null,n,u,void 0,e.injector||null),d=an(l,null);let c,f=!1;try{n.begin&&n.begin();const t=mc(i,r,l,n,u,a);c=yc(t,r,l,o,e.hostFeatures||null),rs(l,t),Ii(l),l[2]&=-5,Oe(l),Ii(l),f=!0}finally{sn(d,f),n.end&&n.end()}return c}function mc(t,e,n,a,r,i){Ee=!1,ke=null,de=0,we=!0,bn(null),he(),le.clear();const s=n[1];n[19]=t;const o=Ai(s,null,0,3,null,null),u=Ri(n,ji(e),null,e.onPush?64:16,n[19],o,a,r,i);return s.firstTemplatePass&&(va(pa(o,n),s,e.type),o.flags=1,Qi(o,n.length,1),Ji(o)),n[19]=u}function yc(t,e,n,a,r){const i=n[1],s=function(t,e,n){const a=Ve();t.firstTemplatePass&&(n.providersResolver&&n.providersResolver(n),Wi(t,a,1),Xi(t,e,n,n.factory));const r=Sa(t.data,e,e.length-1,a);return $i(e,a,r),r}(i,n,e);a.components.push(s),t[9]=s,r&&r.forEach(t=>t(s,e)),e.contentQueries&&e.contentQueries(1,s,n.length-1);const o=Ve();return i.firstTemplatePass&&e.hostBindings&&(qe(o.index-19),Ui(e,i.expandoInstructions,s,o,i.firstTemplatePass),qe(null)),s}function vc(t,e){return{components:[],scheduler:t||_n,clean:fs,playerHandler:e||null,flags:0}}function xc(t,e){const n=Te(t)[1],a=n.data.length-1;ae(a,e,n,-1,-1,-1),re(n,{directiveStart:a,directiveEnd:a+1})}function _c(t){return ca(t).clean}class Tc{constructor(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}isFirstChange(){return this.firstChange}}function Oc(){return wc.ngInherit=!0,wc}function wc(t){t.type.prototype.ngOnChanges&&(t.setInput=Sc,t.onChanges=function(){const t=Ic(this),e=t&&t.current;if(e){const n=t.previous;if(n===St)t.previous=e;else for(let t in e)n[t]=e[t];t.current=null,this.ngOnChanges(e)}})}function Sc(t,e,n,a){const r=Ic(t)||function(t,e){return t.__ngSimpleChanges__=e}(t,{previous:St,current:null}),i=r.current||(r.current={}),s=r.previous,o=this.declaredInputs[n],u=s[o];i[o]=new Tc(u&&u.currentValue,e,s===St),t[a]=e}function Ic(t){return t.__ngSimpleChanges__||null}function Nc(t){let e=Object.getPrototypeOf(t.type.prototype).constructor;for(;e;){let n=void 0;if(te(t))n=e.ngComponentDef||e.ngDirectiveDef;else{if(e.ngComponentDef)throw new Error("Directives cannot inherit Components");n=e.ngDirectiveDef}const a=e.ngBaseDef;if(a||n){const e=t;e.inputs=Cc(t.inputs),e.declaredInputs=Cc(t.declaredInputs),e.outputs=Cc(t.outputs)}if(a){const e=a.viewQuery,n=a.contentQueries,r=a.hostBindings;r&&kc(t,r),e&&Rc(t,e),n&&Ac(t,n),A(t.inputs,a.inputs),A(t.declaredInputs,a.declaredInputs),A(t.outputs,a.outputs)}if(n){const e=n.hostBindings;e&&kc(t,e);const a=n.viewQuery,r=n.contentQueries;a&&Rc(t,a),r&&Ac(t,r),A(t.inputs,n.inputs),A(t.declaredInputs,n.declaredInputs),A(t.outputs,n.outputs),t.afterContentChecked=t.afterContentChecked||n.afterContentChecked,t.afterContentInit=t.afterContentInit||n.afterContentInit,t.afterViewChecked=t.afterViewChecked||n.afterViewChecked,t.afterViewInit=t.afterViewInit||n.afterViewInit,t.doCheck=t.doCheck||n.doCheck,t.onDestroy=t.onDestroy||n.onDestroy,t.onInit=t.onInit||n.onInit;const i=n.features;if(i)for(const n of i)n&&n.ngInherit&&n(t)}else{const n=e.prototype;n&&(t.afterContentChecked=t.afterContentChecked||n.ngAfterContentChecked,t.afterContentInit=t.afterContentInit||n.ngAfterContentInit,t.afterViewChecked=t.afterViewChecked||n.ngAfterViewChecked,t.afterViewInit=t.afterViewInit||n.ngAfterViewInit,t.doCheck=t.doCheck||n.ngDoCheck,t.onDestroy=t.onDestroy||n.ngOnDestroy,t.onInit=t.onInit||n.ngOnInit,n.ngOnChanges&&Oc()(t))}e=Object.getPrototypeOf(e)}}function Cc(t){return t===St?{}:t===It?[]:t}function Rc(t,e){const n=t.viewQuery;t.viewQuery=n?(t,a)=>{e(t,a),n(t,a)}:e}function Ac(t,e){const n=t.contentQueries;t.contentQueries=n?(t,a,r)=>{e(t,a,r),n(t,a,r)}:e}function kc(t,e){const n=t.hostBindings;e!==n&&(t.hostBindings=n?(t,a,r)=>{Fe(1);try{e(t,a,r)}finally{Fe(-1)}n(t,a,r)}:e)}function Ec(t,e,n,a,r){if(t=V(t),Array.isArray(t))for(let i=0;i<t.length;i++)Ec(t[i],e,n,a,r);else{const i=Ae(),s=i[1];let o=Go(t)?t:V(t.provide),u=qo(t);const l=Ve(),d=65535&l.providerIndexes,c=l.directiveStart,f=l.providerIndexes>>16;if(t.useClass||Go(t)){const n=(t.useClass||t).prototype.ngOnDestroy;n&&(s.destroyHooks||(s.destroyHooks=[])).push(e.length,n)}if(Go(t)||!t.multi){const t=new ne(u,r,Tl),a=Dc(o,e,r?d:d+f,c);-1==a?(va(pa(l,i),s,o),e.push(o),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=65536),n.push(t),i.push(t)):(n[a]=t,i[a]=t)}else{const t=Dc(o,e,d+f,c),h=Dc(o,e,d,d+f),g=t>=0&&n[t],p=h>=0&&n[h];if(r&&!p||!r&&!g){va(pa(l,i),s,o);const t=function(t,e,n,a,r){const i=new ne(t,n,Tl);return i.multi=[],i.index=e,i.componentProviders=0,Lc(i,r,a&&!n),i}(r?Mc:Pc,n.length,r,a,u);!r&&p&&(n[h].providerFactory=t),e.push(o),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=65536),n.push(t),i.push(t)}else Lc(n[r?h:t],u,!r&&a);!r&&a&&p&&n[h].componentProviders++}}}function Lc(t,e,n){t.multi.push(e),n&&t.componentProviders++}function Dc(t,e,n,a){for(let r=n;r<a;r++)if(e[r]===t)return r;return-1}function Pc(t,e,n,a){return qc(this.multi,[])}function Mc(t,e,n,a){const r=this.multi;let i;if(this.providerFactory){const t=this.providerFactory.componentProviders,s=Sa(e,n,this.providerFactory.index,a);i=s.slice(0,t),qc(r,i);for(let e=t;e<s.length;e++)i.push(s[e])}else i=[],qc(r,i);return i}function qc(t,e){for(let n=0;n<t.length;n++)e.push((0,t[n])());return e}function jc(t,e=[]){return n=>{n.providersResolver=(n,a)=>function(t,e,n){const a=Ae()[1];if(a.firstTemplatePass){const r=te(t);Ec(n,a.data,a.blueprint,r,!0),Ec(e,a.data,a.blueprint,r,!1)}}(n,a?a(t):t,e)}}class Fc{}class Gc{}function Vc(t){const e=Error(`No component factory found for ${j(t)}. Did you add it to @NgModule.entryComponents?`);return e[zc]=t,e}const zc="ngComponent";class Bc{resolveComponentFactory(t){throw Vc(t)}}let Yc=(()=>{class t{}return t.NULL=new Bc,t})();class Hc{constructor(t,e,n){this._parent=e,this._ngModule=n,this._factories=new Map;for(let a=0;a<t.length;a++){const e=t[a];this._factories.set(e.componentType,e)}}resolveComponentFactory(t){let e=this._factories.get(t);if(!e&&this._parent&&(e=this._parent.resolveComponentFactory(t)),!e)throw Vc(t);return new Uc(e,this._ngModule)}}class Uc extends Gc{constructor(t,e){super(),this.factory=t,this.ngModule=e,this.selector=t.selector,this.componentType=t.componentType,this.ngContentSelectors=t.ngContentSelectors,this.inputs=t.inputs,this.outputs=t.outputs}create(t,e,n,a){return this.factory.create(t,e,n,a||this.ngModule)}}function Wc(...t){}let Kc=(()=>{class t{constructor(t){this.nativeElement=t}}return t.__NG_ELEMENT_ID__=()=>Jc(t),t})();const $c=function(t){return $s(t,Ve(),Ae())},Jc=Wc;class Zc{constructor(t,e,n,a,r,i){this.id=t,this.templateUrl=e,this.slotCount=n,this.encapsulation=a,this.styles=r,this.animations=i}}class Qc{}class Xc{}class tf{}class ef{}const nf=function(){var t={Important:1,DashCase:2};return t[t.Important]="Important",t[t.DashCase]="DashCase",t}();let af=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>sf(),t})();const rf=function(){const t=Ae(),e=xe(Ve().index,t);return function(t){const e=t[12];if(ta(e))return e;throw new Error("Cannot inject Renderer2 when the application uses Renderer3!")}(Jt(e)?e:t)},sf=Wc;class of{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const uf=new of("8.2.14");class lf{constructor(){}supports(t){return qu(t)}create(t){return new cf(t)}}const df=(t,e)=>e;class cf{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||df}forEachItem(t){let e;for(e=this._itHead;null!==e;e=e._next)t(e)}forEachOperation(t){let e=this._itHead,n=this._removalsHead,a=0,r=null;for(;e||n;){const i=!n||e&&e.currentIndex<pf(n,a,r)?e:n,s=pf(i,a,r),o=i.currentIndex;if(i===n)a--,n=n._nextRemoved;else if(e=e._next,null==i.previousIndex)a++;else{r||(r=[]);const t=s-a,e=o-a;if(t!=e){for(let n=0;n<t;n++){const a=n<r.length?r[n]:r[n]=0,i=a+n;e<=i&&i<t&&(r[n]=a+1)}r[i.previousIndex]=e-t}}s!==o&&t(i,s,o)}}forEachPreviousItem(t){let e;for(e=this._previousItHead;null!==e;e=e._nextPrevious)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachMovedItem(t){let e;for(e=this._movesHead;null!==e;e=e._nextMoved)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}forEachIdentityChange(t){let e;for(e=this._identityChangesHead;null!==e;e=e._nextIdentityChange)t(e)}diff(t){if(null==t&&(t=[]),!qu(t))throw new Error(`Error trying to diff '${j(t)}'. Only arrays and iterables are allowed`);return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e,n,a,r=this._itHead,i=!1;if(Array.isArray(t)){this.length=t.length;for(let e=0;e<this.length;e++)n=t[e],a=this._trackByFn(e,n),null!==r&&Du(r.trackById,a)?(i&&(r=this._verifyReinsertion(r,n,a,e)),Du(r.item,n)||this._addIdentityChange(r,n)):(r=this._mismatch(r,n,a,e),i=!0),r=r._next}else e=0,function(t,e){if(Array.isArray(t))for(let n=0;n<t.length;n++)e(t[n]);else{const n=t[Lu()]();let a;for(;!(a=n.next()).done;)e(a.value)}}(t,t=>{a=this._trackByFn(e,t),null!==r&&Du(r.trackById,a)?(i&&(r=this._verifyReinsertion(r,t,a,e)),Du(r.item,t)||this._addIdentityChange(r,t)):(r=this._mismatch(r,t,a,e),i=!0),r=r._next,e++}),this.length=e;return this._truncate(r),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t,e;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=e)t.previousIndex=t.currentIndex,e=t._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,e,n,a){let r;return null===t?r=this._itTail:(r=t._prev,this._remove(t)),null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(n,a))?(Du(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,r,a)):null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(Du(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,r,a)):t=this._addAfter(new ff(e,n),r,a),t}_verifyReinsertion(t,e,n,a){let r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==r?t=this._reinsertAfter(r,t._prev,a):t.currentIndex!=a&&(t.currentIndex=a,this._addToMoves(t,a)),t}_truncate(t){for(;null!==t;){const e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,e,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const a=t._prevRemoved,r=t._nextRemoved;return null===a?this._removalsHead=r:a._nextRemoved=r,null===r?this._removalsTail=a:r._prevRemoved=a,this._insertAfter(t,e,n),this._addToMoves(t,n),t}_moveAfter(t,e,n){return this._unlink(t),this._insertAfter(t,e,n),this._addToMoves(t,n),t}_addAfter(t,e,n){return this._insertAfter(t,e,n),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,e,n){const a=null===e?this._itHead:e._next;return t._next=a,t._prev=e,null===a?this._itTail=t:a._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new gf),this._linkedRecords.put(t),t.currentIndex=n,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const e=t._prev,n=t._next;return null===e?this._itHead=n:e._next=n,null===n?this._itTail=e:n._prev=e,t}_addToMoves(t,e){return t.previousIndex===e||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new gf),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class ff{constructor(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class hf{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,e){let n;for(n=this._head;null!==n;n=n._nextDup)if((null===e||e<=n.currentIndex)&&Du(n.trackById,t))return n;return null}remove(t){const e=t._prevDup,n=t._nextDup;return null===e?this._head=n:e._nextDup=n,null===n?this._tail=e:n._prevDup=e,null===this._head}}class gf{constructor(){this.map=new Map}put(t){const e=t.trackById;let n=this.map.get(e);n||(n=new hf,this.map.set(e,n)),n.add(t)}get(t,e){const n=this.map.get(t);return n?n.get(t,e):null}remove(t){const e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function pf(t,e,n){const a=t.previousIndex;if(null===a)return a;let r=0;return n&&a<n.length&&(r=n[a]),a+e+r}class bf{constructor(){}supports(t){return t instanceof Map||ju(t)}create(){return new mf}}class mf{constructor(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}get isDirty(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead}forEachItem(t){let e;for(e=this._mapHead;null!==e;e=e._next)t(e)}forEachPreviousItem(t){let e;for(e=this._previousMapHead;null!==e;e=e._nextPrevious)t(e)}forEachChangedItem(t){let e;for(e=this._changesHead;null!==e;e=e._nextChanged)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}diff(t){if(t){if(!(t instanceof Map||ju(t)))throw new Error(`Error trying to diff '${j(t)}'. Only maps and objects are allowed`)}else t=new Map;return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e=this._mapHead;if(this._appendAfter=null,this._forEach(t,(t,n)=>{if(e&&e.key===n)this._maybeAddToChanges(e,t),this._appendAfter=e,e=e._next;else{const a=this._getOrCreateRecordForKey(n,t);e=this._insertBeforeOrAppend(e,a)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let t=e;null!==t;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,e){if(t){const n=t._prev;return e._next=t,e._prev=n,t._prev=e,n&&(n._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(t,e){if(this._records.has(t)){const n=this._records.get(t);this._maybeAddToChanges(n,e);const a=n._prev,r=n._next;return a&&(a._next=r),r&&(r._prev=a),n._next=null,n._prev=null,n}const n=new yf(t);return this._records.set(t,n),n.currentValue=e,this._addToAdditions(n),n}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,e){Du(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(n=>e(t[n],n))}}class yf{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}let vf=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(null!=n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return t.create(e,n)},deps:[[t,new S,new O]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(null!=e)return e;throw new Error(`Cannot find a differ supporting object '${t}' of type '${n=t,n.name||typeof n}'`);var n}}return t.ngInjectableDef=k({token:t,providedIn:"root",factory:()=>new t([new lf])}),t})(),xf=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return t.create(e,n)},deps:[[t,new S,new O]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(e)return e;throw new Error(`Cannot find a differ supporting object '${t}'`)}}return t.ngInjectableDef=k({token:t,providedIn:"root",factory:()=>new t([new bf])}),t})();const _f=[new bf],Tf=new vf([new lf]),Of=new xf(_f);let wf=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>If(t,Kc),t})();const Sf=function(t,e){return Js(t,e,Ve(),Ae())},If=Wc;let Nf=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>Rf(t,Kc),t})();const Cf=function(t,e){return Zs(t,e,Ve(),Ae())},Rf=Wc;function Af(t,e,n,a){let r=`ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '${e}'. Current value: '${n}'.`;return a&&(r+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(t,e){const n=new Error(t);return kf(n,e),n}(r,t)}function kf(t,e){t.ngDebugContext=e,t.ngErrorLogger=e.logError.bind(e)}function Ef(t){return new Error("ViewDestroyedError: Attempt to use a destroyed view: "+t)}function Lf(t,e,n){const a=t.state,r=1792&a;return r===e?(t.state=-1793&a|n,t.initIndex=-1,!0):r===n}function Df(t,e,n){return(1792&t.state)===e&&t.initIndex<=n&&(t.initIndex=n+1,!0)}function Pf(t,e){return t.nodes[e]}function Mf(t,e){return t.nodes[e]}function qf(t,e){return t.nodes[e]}function jf(t,e){return t.nodes[e]}function Ff(t,e){return t.nodes[e]}class Gf{}const Vf={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},zf=()=>{},Bf=new Map;function Yf(t){let e=Bf.get(t);return e||(e=j(t)+"_"+Bf.size,Bf.set(t,e)),e}function Hf(t,e,n,a){if(Mu.isWrapped(a)){a=Mu.unwrap(a);const r=t.def.nodes[e].bindingIndex+n,i=Mu.unwrap(t.oldValues[r]);t.oldValues[r]=new Mu(i)}return a}function Uf(t){return{id:"$$undefined",styles:t.styles,encapsulation:t.encapsulation,data:t.data}}let Wf=0;function Kf(t,e,n,a){return!(!(2&t.state)&&Du(t.oldValues[e.bindingIndex+n],a))}function $f(t,e,n,a){return!!Kf(t,e,n,a)&&(t.oldValues[e.bindingIndex+n]=a,!0)}function Jf(t,e,n,a){const r=t.oldValues[e.bindingIndex+n];if(1&t.state||!Pu(r,a)){const i=e.bindings[n].name;throw Af(Vf.createDebugContext(t,e.nodeIndex),`${i}: ${r}`,`${i}: ${a}`,0!=(1&t.state))}}function Zf(t){let e=t;for(;e;)2&e.def.flags&&(e.state|=8),e=e.viewContainerParent||e.parent}function Qf(t,e){let n=t;for(;n&&n!==e;)n.state|=64,n=n.viewContainerParent||n.parent}function Xf(t,e,n,a){try{return Zf(33554432&t.def.nodes[e].flags?Mf(t,e).componentView:t),Vf.handleEvent(t,e,n,a)}catch(r){t.root.errorHandler.handleError(r)}}function th(t){return t.parent?Mf(t.parent,t.parentNodeDef.nodeIndex):null}function eh(t){return t.parent?t.parentNodeDef.parent:null}function nh(t,e){switch(201347067&e.flags){case 1:return Mf(t,e.nodeIndex).renderElement;case 2:return Pf(t,e.nodeIndex).renderText}}function ah(t){return!!t.parent&&!!(32768&t.parentNodeDef.flags)}function rh(t){return!(!t.parent||32768&t.parentNodeDef.flags)}function ih(t){return 1<<t%32}function sh(t){const e={};let n=0;const a={};return t&&t.forEach(([t,r])=>{"number"==typeof t?(e[t]=r,n|=ih(t)):a[t]=r}),{matchedQueries:e,references:a,matchedQueryIds:n}}function oh(t,e){return t.map(t=>{let n,a;return Array.isArray(t)?[a,n]=t:(a=0,n=t),n&&("function"==typeof n||"object"==typeof n)&&e&&Object.defineProperty(n,"__source",{value:e,configurable:!0}),{flags:a,token:n,tokenKey:Yf(n)}})}function uh(t,e,n){let a=n.renderParent;return a?0==(1&a.flags)||0==(33554432&a.flags)||a.element.componentRendererType&&a.element.componentRendererType.encapsulation===Ot.Native?Mf(t,n.renderParent.nodeIndex).renderElement:void 0:e}const lh=new WeakMap;function dh(t){let e=lh.get(t);return e||(e=t(()=>zf),e.factory=t,lh.set(t,e)),e}function ch(t,e,n,a,r){3===e&&(n=t.renderer.parentNode(nh(t,t.def.lastRenderRootNode))),fh(t,e,0,t.def.nodes.length-1,n,a,r)}function fh(t,e,n,a,r,i,s){for(let o=n;o<=a;o++){const n=t.def.nodes[o];11&n.flags&&gh(t,n,e,r,i,s),o+=n.childCount}}function hh(t,e,n,a,r,i){let s=t;for(;s&&!ah(s);)s=s.parent;const o=s.parent,u=eh(s),l=u.nodeIndex+u.childCount;for(let d=u.nodeIndex+1;d<=l;d++){const t=o.def.nodes[d];t.ngContentIndex===e&&gh(o,t,n,a,r,i),d+=t.childCount}if(!o.parent){const s=t.root.projectableNodes[e];if(s)for(let e=0;e<s.length;e++)ph(t,s[e],n,a,r,i)}}function gh(t,e,n,a,r,i){if(8&e.flags)hh(t,e.ngContent.index,n,a,r,i);else{const s=nh(t,e);if(3===n&&33554432&e.flags&&48&e.bindingFlags?(16&e.bindingFlags&&ph(t,s,n,a,r,i),32&e.bindingFlags&&ph(Mf(t,e.nodeIndex).componentView,s,n,a,r,i)):ph(t,s,n,a,r,i),16777216&e.flags){const s=Mf(t,e.nodeIndex).viewContainer._embeddedViews;for(let t=0;t<s.length;t++)ch(s[t],n,a,r,i)}1&e.flags&&!e.element.name&&fh(t,n,e.nodeIndex+1,e.nodeIndex+e.childCount,a,r,i)}}function ph(t,e,n,a,r,i){const s=t.renderer;switch(n){case 1:s.appendChild(a,e);break;case 2:s.insertBefore(a,e,r);break;case 3:s.removeChild(a,e);break;case 0:i.push(e)}}const bh=/^:([^:]+):(.+)$/;function mh(t){if(":"===t[0]){const e=t.match(bh);return[e[1],e[2]]}return["",t]}function yh(t){let e=0;for(let n=0;n<t.length;n++)e|=t[n].flags;return e}function vh(t,e){let n="";for(let a=0;a<2*t;a+=2)n=n+e[a]+_h(e[a+1]);return n+e[2*t]}function xh(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y,v){switch(t){case 1:return e+_h(n)+a;case 2:return e+_h(n)+a+_h(r)+i;case 3:return e+_h(n)+a+_h(r)+i+_h(s)+o;case 4:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l;case 5:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c;case 6:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h;case 7:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p;case 8:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p+_h(b)+m;case 9:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p+_h(b)+m+_h(y)+v;default:throw new Error("Does not support more than 9 expressions")}}function _h(t){return null!=t?t.toString():""}const Th=[],Oh={},wh=new Object,Sh=Yf(Bo),Ih=Yf($),Nh=Yf(ft);function Ch(t,e,n,a){return n=V(n),{index:-1,deps:oh(a,j(e)),flags:t,token:e,value:n}}function Rh(t){const e={},n=[];let a=!1;for(let r=0;r<t.length;r++){const i=t[r];i.token===Co&&!0===i.value&&(a=!0),1073741824&i.flags&&n.push(i.token),i.index=r,e[Yf(i.token)]=i}return{factory:null,providersByKey:e,providers:t,modules:n,isRoot:a}}function Ah(t,e,n=Bo.THROW_IF_NOT_FOUND){const a=et(t);try{if(8&e.flags)return e.token;if(2&e.flags&&(n=null),1&e.flags)return t._parent.get(e.token,n);const s=e.tokenKey;switch(s){case Sh:case Ih:case Nh:return t}const o=t._def.providersByKey[s];let u;if(o){let e=t._providers[o.index];return void 0===e&&(e=t._providers[o.index]=kh(t,o)),e===wh?void 0:e}if((u=D(e.token))&&(r=t,null!=(i=u).providedIn&&(function(t,e){return t._def.modules.indexOf(e)>-1}(r,i.providedIn)||"root"===i.providedIn&&r._def.isRoot))){const n=t._providers.length;return t._def.providers[n]=t._def.providersByKey[e.tokenKey]={flags:5120,value:u.factory,deps:[],index:n,token:e.token},t._providers[n]=wh,t._providers[n]=kh(t,t._def.providersByKey[e.tokenKey])}return 4&e.flags?n:t._parent.get(e.token,n)}finally{et(a)}var r,i}function kh(t,e){let n;switch(201347067&e.flags){case 512:n=function(t,e,n){const a=n.length;switch(a){case 0:return new e;case 1:return new e(Ah(t,n[0]));case 2:return new e(Ah(t,n[0]),Ah(t,n[1]));case 3:return new e(Ah(t,n[0]),Ah(t,n[1]),Ah(t,n[2]));default:const r=new Array(a);for(let e=0;e<a;e++)r[e]=Ah(t,n[e]);return new e(...r)}}(t,e.value,e.deps);break;case 1024:n=function(t,e,n){const a=n.length;switch(a){case 0:return e();case 1:return e(Ah(t,n[0]));case 2:return e(Ah(t,n[0]),Ah(t,n[1]));case 3:return e(Ah(t,n[0]),Ah(t,n[1]),Ah(t,n[2]));default:const r=Array(a);for(let e=0;e<a;e++)r[e]=Ah(t,n[e]);return e(...r)}}(t,e.value,e.deps);break;case 2048:n=Ah(t,e.deps[0]);break;case 256:n=e.value}return n===wh||null===n||"object"!=typeof n||131072&e.flags||"function"!=typeof n.ngOnDestroy||(e.flags|=131072),void 0===n?wh:n}function Eh(t,e){const n=t.viewContainer._embeddedViews;if((null==e||e>=n.length)&&(e=n.length-1),e<0)return null;const a=n[e];return a.viewContainerParent=null,yt(n,e),Vf.dirtyParentQueries(a),Dh(a),a}function Lh(t,e,n){const a=e?nh(e,e.def.lastRenderRootNode):t.renderElement,r=n.renderer.parentNode(a),i=n.renderer.nextSibling(a);ch(n,2,r,i,void 0)}function Dh(t){ch(t,3,null,null,void 0)}const Ph=new Object;function Mh(t,e,n,a,r,i){return new jh(t,e,n,a,r,i)}function qh(t){return t.viewDefFactory}class jh extends Gc{constructor(t,e,n,a,r,i){super(),this.selector=t,this.componentType=e,this._inputs=a,this._outputs=r,this.ngContentSelectors=i,this.viewDefFactory=n}get inputs(){const t=[],e=this._inputs;for(let n in e)t.push({propName:n,templateName:e[n]});return t}get outputs(){const t=[];for(let e in this._outputs)t.push({propName:e,templateName:this._outputs[e]});return t}create(t,e,n,a){if(!a)throw new Error("ngModule should be provided");const r=dh(this.viewDefFactory),i=r.nodes[0].element.componentProvider.nodeIndex,s=Vf.createRootView(t,e||[],n,r,a,Ph),o=qf(s,i).instance;return n&&s.renderer.setAttribute(Mf(s,0).renderElement,"ng-version",uf.full),new Fh(s,new Bh(s),o)}}class Fh extends Fc{constructor(t,e,n){super(),this._view=t,this._viewRef=e,this._component=n,this._elDef=this._view.def.nodes[0],this.hostView=e,this.changeDetectorRef=e,this.instance=n}get location(){return new Kc(Mf(this._view,this._elDef.nodeIndex).renderElement)}get injector(){return new Wh(this._view,this._elDef)}get componentType(){return this._component.constructor}destroy(){this._viewRef.destroy()}onDestroy(t){this._viewRef.onDestroy(t)}}function Gh(t,e,n){return new Vh(t,e,n)}class Vh{constructor(t,e,n){this._view=t,this._elDef=e,this._data=n,this._embeddedViews=[]}get element(){return new Kc(this._data.renderElement)}get injector(){return new Wh(this._view,this._elDef)}get parentInjector(){let t=this._view,e=this._elDef.parent;for(;!e&&t;)e=eh(t),t=t.parent;return t?new Wh(t,e):new Wh(this._view,null)}clear(){for(let t=this._embeddedViews.length-1;t>=0;t--){const e=Eh(this._data,t);Vf.destroyView(e)}}get(t){const e=this._embeddedViews[t];if(e){const t=new Bh(e);return t.attachToViewContainerRef(this),t}return null}get length(){return this._embeddedViews.length}createEmbeddedView(t,e,n){const a=t.createEmbeddedView(e||{});return this.insert(a,n),a}createComponent(t,e,n,a,r){const i=n||this.parentInjector;r||t instanceof Uc||(r=i.get(ft));const s=t.create(i,a,void 0,r);return this.insert(s.hostView,e),s}insert(t,e){if(t.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");const n=t;return function(t,e,n,a){let r=e.viewContainer._embeddedViews;null==n&&(n=r.length),a.viewContainerParent=t,mt(r,n,a),function(t,e){const n=th(e);if(!n||n===t||16&e.state)return;e.state|=16;let a=n.template._projectedViews;a||(a=n.template._projectedViews=[]),a.push(e),function(t,e){if(4&e.flags)return;t.nodeFlags|=4,e.flags|=4;let n=e.parent;for(;n;)n.childFlags|=4,n=n.parent}(e.parent.def,e.parentNodeDef)}(e,a),Vf.dirtyParentQueries(a),Lh(e,n>0?r[n-1]:null,a)}(this._view,this._data,e,n._view),n.attachToViewContainerRef(this),t}move(t,e){if(t.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");const n=this._embeddedViews.indexOf(t._view);return function(t,e,n){const a=t.viewContainer._embeddedViews,r=a[e];yt(a,e),null==n&&(n=a.length),mt(a,n,r),Vf.dirtyParentQueries(r),Dh(r),Lh(t,n>0?a[n-1]:null,r)}(this._data,n,e),t}indexOf(t){return this._embeddedViews.indexOf(t._view)}remove(t){const e=Eh(this._data,t);e&&Vf.destroyView(e)}detach(t){const e=Eh(this._data,t);return e?new Bh(e):null}}function zh(t){return new Bh(t)}class Bh{constructor(t){this._view=t,this._viewContainerRef=null,this._appRef=null}get rootNodes(){return function(t){const e=[];return ch(t,0,void 0,void 0,e),e}(this._view)}get context(){return this._view.context}get destroyed(){return 0!=(128&this._view.state)}markForCheck(){Zf(this._view)}detach(){this._view.state&=-5}detectChanges(){const t=this._view.root.rendererFactory;t.begin&&t.begin();try{Vf.checkAndUpdateView(this._view)}finally{t.end&&t.end()}}checkNoChanges(){Vf.checkNoChangesView(this._view)}reattach(){this._view.state|=4}onDestroy(t){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(t)}destroy(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),Vf.destroyView(this._view)}detachFromAppRef(){this._appRef=null,Dh(this._view),Vf.dirtyParentQueries(this._view)}attachToAppRef(t){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}attachToViewContainerRef(t){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=t}}function Yh(t,e){return new Hh(t,e)}class Hh extends wf{constructor(t,e){super(),this._parentView=t,this._def=e}createEmbeddedView(t){return new Bh(Vf.createEmbeddedView(this._parentView,this._def,this._def.element.template,t))}get elementRef(){return new Kc(Mf(this._parentView,this._def.nodeIndex).renderElement)}}function Uh(t,e){return new Wh(t,e)}class Wh{constructor(t,e){this.view=t,this.elDef=e}get(t,e=Bo.THROW_IF_NOT_FOUND){return Vf.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:t,tokenKey:Yf(t)},e)}}function Kh(t,e){const n=t.def.nodes[e];if(1&n.flags){const e=Mf(t,n.nodeIndex);return n.element.template?e.template:e.renderElement}if(2&n.flags)return Pf(t,n.nodeIndex).renderText;if(20240&n.flags)return qf(t,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+e)}function $h(t){return new Jh(t.renderer)}class Jh{constructor(t){this.delegate=t}selectRootElement(t){return this.delegate.selectRootElement(t)}createElement(t,e){const[n,a]=mh(e),r=this.delegate.createElement(a,n);return t&&this.delegate.appendChild(t,r),r}createViewRoot(t){return t}createTemplateAnchor(t){const e=this.delegate.createComment("");return t&&this.delegate.appendChild(t,e),e}createText(t,e){const n=this.delegate.createText(e);return t&&this.delegate.appendChild(t,n),n}projectNodes(t,e){for(let n=0;n<e.length;n++)this.delegate.appendChild(t,e[n])}attachViewAfter(t,e){const n=this.delegate.parentNode(t),a=this.delegate.nextSibling(t);for(let r=0;r<e.length;r++)this.delegate.insertBefore(n,e[r],a)}detachView(t){for(let e=0;e<t.length;e++){const n=t[e],a=this.delegate.parentNode(n);this.delegate.removeChild(a,n)}}destroyView(t,e){for(let n=0;n<e.length;n++)this.delegate.destroyNode(e[n])}listen(t,e,n){return this.delegate.listen(t,e,n)}listenGlobal(t,e,n){return this.delegate.listen(t,e,n)}setElementProperty(t,e,n){this.delegate.setProperty(t,e,n)}setElementAttribute(t,e,n){const[a,r]=mh(e);null!=n?this.delegate.setAttribute(t,r,n,a):this.delegate.removeAttribute(t,r,a)}setBindingDebugInfo(t,e,n){}setElementClass(t,e,n){n?this.delegate.addClass(t,e):this.delegate.removeClass(t,e)}setElementStyle(t,e,n){null!=n?this.delegate.setStyle(t,e,n):this.delegate.removeStyle(t,e)}invokeElementMethod(t,e,n){t[e].apply(t,n)}setText(t,e){this.delegate.setValue(t,e)}animate(){throw new Error("Renderer.animate is no longer supported!")}}function Zh(t,e,n,a){return new Qh(t,e,n,a)}class Qh{constructor(t,e,n,a){this._moduleType=t,this._parent=e,this._bootstrapComponents=n,this._def=a,this._destroyListeners=[],this._destroyed=!1,this.injector=this,function(t){const e=t._def,n=t._providers=new Array(e.providers.length);for(let a=0;a<e.providers.length;a++){const r=e.providers[a];4096&r.flags||void 0===n[a]&&(n[a]=kh(t,r))}}(this)}get(t,e=Bo.THROW_IF_NOT_FOUND,n=C.Default){let a=0;return n&C.SkipSelf?a|=1:n&C.Self&&(a|=4),Ah(this,{token:t,tokenKey:Yf(t),flags:a},e)}get instance(){return this.get(this._moduleType)}get componentFactoryResolver(){return this.get(Yc)}destroy(){if(this._destroyed)throw new Error(`The ng module ${j(this.instance.constructor)} has already been destroyed.`);this._destroyed=!0,function(t,e){const n=t._def,a=new Set;for(let r=0;r<n.providers.length;r++)if(131072&n.providers[r].flags){const e=t._providers[r];if(e&&e!==wh){const t=e.ngOnDestroy;"function"!=typeof t||a.has(e)||(t.apply(e),a.add(e))}}}(this),this._destroyListeners.forEach(t=>t())}onDestroy(t){this._destroyListeners.push(t)}}const Xh=Yf(Xc),tg=Yf(af),eg=Yf(Kc),ng=Yf(Nf),ag=Yf(wf),rg=Yf(Xs),ig=Yf(Bo),sg=Yf($);function og(t,e,n,a,r,i,s,o){const u=[];if(s)for(let d in s){const[t,e]=s[d];u[t]={flags:8,name:d,nonMinifiedName:e,ns:null,securityContext:null,suffix:null}}const l=[];if(o)for(let d in o)l.push({type:1,propName:d,target:null,eventName:o[d]});return dg(t,e|=16384,n,a,r,r,i,u,l)}function ug(t,e,n){return dg(-1,t|=16,null,0,e,e,n)}function lg(t,e,n,a,r){return dg(-1,t,e,0,n,a,r)}function dg(t,e,n,a,r,i,s,o,u){const{matchedQueries:l,references:d,matchedQueryIds:c}=sh(n);u||(u=[]),o||(o=[]),i=V(i);const f=oh(s,j(r));return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l,matchedQueryIds:c,references:d,ngContentIndex:-1,childCount:a,bindings:o,bindingFlags:yh(o),outputs:u,element:null,provider:{token:r,value:i,deps:f},text:null,query:null,ngContent:null}}function cg(t,e){return pg(t,e)}function fg(t,e){let n=t;for(;n.parent&&!ah(n);)n=n.parent;return bg(n.parent,eh(n),!0,e.provider.value,e.provider.deps)}function hg(t,e){const n=bg(t,e.parent,(32768&e.flags)>0,e.provider.value,e.provider.deps);if(e.outputs.length)for(let a=0;a<e.outputs.length;a++){const r=e.outputs[a],i=n[r.propName];if(!ed(i))throw new Error(`@Output ${r.propName} not initialized in '${n.constructor.name}'.`);{const n=i.subscribe(gg(t,e.parent.nodeIndex,r.eventName));t.disposables[e.outputIndex+a]=n.unsubscribe.bind(n)}}return n}function gg(t,e,n){return a=>Xf(t,e,n,a)}function pg(t,e){const n=(8192&e.flags)>0,a=e.provider;switch(201347067&e.flags){case 512:return bg(t,e.parent,n,a.value,a.deps);case 1024:return function(t,e,n,a,r){const i=r.length;switch(i){case 0:return a();case 1:return a(yg(t,e,n,r[0]));case 2:return a(yg(t,e,n,r[0]),yg(t,e,n,r[1]));case 3:return a(yg(t,e,n,r[0]),yg(t,e,n,r[1]),yg(t,e,n,r[2]));default:const s=Array(i);for(let a=0;a<i;a++)s[a]=yg(t,e,n,r[a]);return a(...s)}}(t,e.parent,n,a.value,a.deps);case 2048:return yg(t,e.parent,n,a.deps[0]);case 256:return a.value}}function bg(t,e,n,a,r){const i=r.length;switch(i){case 0:return new a;case 1:return new a(yg(t,e,n,r[0]));case 2:return new a(yg(t,e,n,r[0]),yg(t,e,n,r[1]));case 3:return new a(yg(t,e,n,r[0]),yg(t,e,n,r[1]),yg(t,e,n,r[2]));default:const s=new Array(i);for(let a=0;a<i;a++)s[a]=yg(t,e,n,r[a]);return new a(...s)}}const mg={};function yg(t,e,n,a,r=Bo.THROW_IF_NOT_FOUND){if(8&a.flags)return a.token;const i=t;2&a.flags&&(r=null);const s=a.tokenKey;s===rg&&(n=!(!e||!e.element.componentView)),e&&1&a.flags&&(n=!1,e=e.parent);let o=t;for(;o;){if(e)switch(s){case Xh:return $h(vg(o,e,n));case tg:return vg(o,e,n).renderer;case eg:return new Kc(Mf(o,e.nodeIndex).renderElement);case ng:return Mf(o,e.nodeIndex).viewContainer;case ag:if(e.element.template)return Mf(o,e.nodeIndex).template;break;case rg:return zh(vg(o,e,n));case ig:case sg:return Uh(o,e);default:const t=(n?e.element.allProviders:e.element.publicProviders)[s];if(t){let e=qf(o,t.nodeIndex);return e||(e={instance:pg(o,t)},o.nodes[t.nodeIndex]=e),e.instance}}n=ah(o),e=eh(o),o=o.parent,4&a.flags&&(o=null)}const u=i.root.injector.get(a.token,mg);return u!==mg||r===mg?u:i.root.ngModule.injector.get(a.token,r)}function vg(t,e,n){let a;if(n)a=Mf(t,e.nodeIndex).componentView;else for(a=t;a.parent&&!ah(a);)a=a.parent;return a}function xg(t,e,n,a,r,i){if(32768&n.flags){const e=Mf(t,n.parent.nodeIndex).componentView;2&e.def.flags&&(e.state|=8)}if(e.instance[n.bindings[a].name]=r,524288&n.flags){i=i||{};const e=Mu.unwrap(t.oldValues[n.bindingIndex+a]);i[n.bindings[a].nonMinifiedName]=new Tc(e,r,0!=(2&t.state))}return t.oldValues[n.bindingIndex+a]=r,i}function _g(t,e){if(!(t.def.nodeFlags&e))return;const n=t.def.nodes;let a=0;for(let r=0;r<n.length;r++){const i=n[r];let s=i.parent;for(!s&&i.flags&e&&Og(t,r,i.flags&e,a++),0==(i.childFlags&e)&&(r+=i.childCount);s&&1&s.flags&&r===s.nodeIndex+s.childCount;)s.directChildFlags&e&&(a=Tg(t,s,e,a)),s=s.parent}}function Tg(t,e,n,a){for(let r=e.nodeIndex+1;r<=e.nodeIndex+e.childCount;r++){const e=t.def.nodes[r];e.flags&n&&Og(t,r,e.flags&n,a++),r+=e.childCount}return a}function Og(t,e,n,a){const r=qf(t,e);if(!r)return;const i=r.instance;i&&(Vf.setCurrentNode(t,e),1048576&n&&Df(t,512,a)&&i.ngAfterContentInit(),2097152&n&&i.ngAfterContentChecked(),4194304&n&&Df(t,768,a)&&i.ngAfterViewInit(),8388608&n&&i.ngAfterViewChecked(),131072&n&&i.ngOnDestroy())}function wg(t){const e=[];for(let n in t)t.hasOwnProperty(n)&&e.push({propName:t[n],templateName:n});return e}const Sg=new K("SCHEDULER_TOKEN",{providedIn:"root",factory:()=>_n});class Ig extends Gc{constructor(t,e){super(),this.componentDef=t,this.ngModule=e,this.componentType=t.type,this.selector=t.selectors[0][0]||"div",this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!e}get inputs(){return wg(this.componentDef.inputs)}get outputs(){return wg(this.componentDef.outputs)}create(t,e,n,a){const r=(a=a||this.ngModule)?function(t,e){return{get:(n,a,r)=>{const i=t.get(n,mg,r);return i!==mg||a===mg?i:e.get(n,a,r)}}}(t,a.injector):t,i=r.get(ef,ea),s=r.get(vr,null);pn();const o=n?Gi(i,n):Ci(this.selector,i.createRenderer(null,this.componentDef)),u=this.componentDef.onPush?576:528,l="string"==typeof n&&/^#root-ng-internal-isolated-\d+/.test(n),d=vc(),c=i.createRenderer(o,this.componentDef);n&&o&&(ta(c)?c.setAttribute(o,"ng-version",uf.full):o.setAttribute("ng-version",uf.full));const f=Ri(null,Fi(-1,null,1,0,null,null,null,null),d,u,null,null,i,c,s,r),h=an(f,null);let g,p,b=!1;try{const t=mc(o,this.componentDef,f,i,c);p=ye(0,f),e&&(p.projection=e.map(t=>Array.from(t))),g=yc(t,this.componentDef,f,d,[xc]),rs(f,t),Ii(f),b=!0}finally{sn(h,b)}const m=new Ng(this.componentType,g,$s(Kc,p,f),f,p);return n&&!l||(m.hostView._tViewNode.child=p),m}}class Ng extends Fc{constructor(t,e,n,a,r){super(),this.location=n,this._rootLView=a,this._tNode=r,this.destroyCbs=[],this.instance=e,this.hostView=this.changeDetectorRef=new Hs(a),this.hostView._tViewNode=ki(a[1],null,-1,a),this.componentType=t}get injector(){return new Ca(this._tNode,this._rootLView)}destroy(){this.destroyCbs&&(this.destroyCbs.forEach(t=>t()),this.destroyCbs=null,!this.hostView.destroyed&&this.hostView.destroy())}onDestroy(t){this.destroyCbs&&this.destroyCbs.push(t)}}const Cg={},Rg=function(){var t={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencySymbol:15,CurrencyName:16,Currencies:17,PluralCase:18,ExtraData:19};return t[t.LocaleId]="LocaleId",t[t.DayPeriodsFormat]="DayPeriodsFormat",t[t.DayPeriodsStandalone]="DayPeriodsStandalone",t[t.DaysFormat]="DaysFormat",t[t.DaysStandalone]="DaysStandalone",t[t.MonthsFormat]="MonthsFormat",t[t.MonthsStandalone]="MonthsStandalone",t[t.Eras]="Eras",t[t.FirstDayOfWeek]="FirstDayOfWeek",t[t.WeekendRange]="WeekendRange",t[t.DateFormat]="DateFormat",t[t.TimeFormat]="TimeFormat",t[t.DateTimeFormat]="DateTimeFormat",t[t.NumberSymbols]="NumberSymbols",t[t.NumberFormats]="NumberFormats",t[t.CurrencySymbol]="CurrencySymbol",t[t.CurrencyName]="CurrencyName",t[t.Currencies]="Currencies",t[t.PluralCase]="PluralCase",t[t.ExtraData]="ExtraData",t}(),Ag=void 0;var kg=["en",[["a","p"],["AM","PM"],Ag],[["AM","PM"],Ag,Ag],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Ag,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Ag,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Ag,"{1} 'at' {0}",Ag],[".",",",";","%","+","-","E","×","‰","∞","NaN",":"],["#,##0.###","#,##0%","¤#,##0.00","#E0"],"$","US Dollar",{},function(t){let e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\.?/,"").length;return 1===e&&0===n?1:5}];function Eg(t){return Lg(t)[Rg.PluralCase]}function Lg(t){const e=t.toLowerCase().replace(/_/g,"-");let n=Cg[e];if(n)return n;const a=e.split("-")[0];if(n=Cg[a],n)return n;if("en"===a)return kg;throw new Error(`Missing locale data for the locale "${t}".`)}const Dg="en-US",Pg=/^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/,Mg=/�\/?\*(\d+:\d+)�/gi,qg=/�(\/?[#*!]\d+):?\d*�/gi,jg=/�(\d+):?\d*�/gi,Fg=/({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi,Gg=/\[(�.+?�?)\]/,Vg=/\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g,zg=/({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g,Bg=/{([A-Z0-9_]+)}/g,Yg=/�I18N_EXP_(ICU(_\d+)?)�/g,Hg=/\/\*/,Ug=/\d+\:(\d+)/;function Wg(t){if(!t)return[];let e=0;const n=[],a=[],r=/[{}]/g;let i;for(r.lastIndex=0;i=r.exec(t);){const r=i.index;if("}"==i[0]){if(n.pop(),0==n.length){const n=t.substring(e,r);Pg.test(n)?a.push(Kg(n)):a.push(n),e=r+1}}else{if(0==n.length){const n=t.substring(e,r);a.push(n),e=r+1}n.push("{")}}const s=t.substring(e);return a.push(s),a}function Kg(t){const e=[],n=[];let a=1,r=0;const i=Wg(t=t.replace(Pg,(function(t,e,n){return a="select"===n?0:1,r=parseInt(e.substr(1),10),""})));for(let s=0;s<i.length;){let t=i[s++].trim();1===a&&(t=t.replace(/\s*(?:=)?(\w+)\s*/,"$1")),t.length&&e.push(t);const r=Wg(i[s++]);e.length>n.length&&n.push(r)}return'Missing key "other" in ICU statement.',e.indexOf("other")<=-1&&vt('Missing key "other" in ICU statement.'),{type:a,mainBinding:r,cases:e,values:n}}function $g(t){let e,n,a="",r=0,i=!1;for(;null!==(e=Mg.exec(t));)i?e[0]===`�/*${n}�`&&(r=e.index,i=!1):(a+=t.substring(r,e.index+e[0].length),n=e[1],i=!0);return a+=t.substr(r),a}function Jg(t,e,n,a=null){const r=[null,null],i=t.split(jg);let s=0;for(let o=0;o<i.length;o++){const t=i[o];if(1&o){const e=parseInt(t,10);r.push(-1-e),s|=tp(e)}else""!==t&&r.push(t)}return r.push(e<<2|(n?1:0)),n&&r.push(n,a),r[0]=s,r[1]=r.length-2,r}function Zg(t,e=0){let n;e|=tp(t.mainBinding);for(let a=0;a<t.values.length;a++){const r=t.values[a];for(let t=0;t<r.length;t++){const a=r[t];if("string"==typeof a)for(;n=jg.exec(a);)e|=tp(parseInt(n[1],10));else e=Zg(a,e)}}return e}const Qg=[];let Xg=-1;function tp(t){return 1<<Math.min(t,31)}const ep=[];function np(t,e,n){const a=Ae()[1];Qg[++Xg]=t,cd(!0),a.firstTemplatePass&&null===a.data[t+19]&&function(t,e,n,a){const r=Ae(),i=t.blueprint.length-19;ap=0;const s=Ve(),o=Ye()?Ve():s&&s.parent;let u=o&&o!==r[6]?o.index-19:e,l=0;ep[l]=u;const d=[];e>0&&s!==o&&d.push(s.index<<3|0);const c=[],f=[],h=(g=function(t,e){if("number"!=typeof e)return $g(t);{const n=t.indexOf(`:${e}�`)+2+e.toString().length,a=t.search(new RegExp(`�\\/\\*\\d+:${e}�`));return $g(t.substring(n,a))}}(n,a),g.replace(xp," ")).split(qg);var g;for(let p=0;p<h.length;p++){let t=h[p];if(1&p)if("/"===t.charAt(0)){if("#"===t.charAt(1)){const e=parseInt(t.substr(2),10);u=ep[--l],d.push(e<<3|5)}}else{const e=parseInt(t.substr(1),10);d.push(e<<3|0,u<<17|1),"#"===t.charAt(0)&&(ep[++l]=u=e)}else{const e=Wg(t);for(let t=0;t<e.length;t++)if(1&t){const n=i+ap++;d.push(hi,"",n,u<<17|1);const a=e[t],r=Zg(a);mp(f,a,n,n);const s=f.length-1;c.push(tp(a.mainBinding),3,-1-a.mainBinding,n<<2|2,s,r,2,n<<2|3,s)}else if(""!==e[t]){const n=e[t],a=n.match(jg),r=i+ap++;d.push(a?"":n,r,u<<17|1),a&&gt(Jg(n,r),c)}}}ap>0&&function(t,e){if(e>0){const n=t[1];if(n.firstTemplatePass){for(let a=0;a<e;a++)n.blueprint.push(null),n.data.push(null),t.push(null);n.expandoInstructions?n.expandoInstructions.push(e):n.expandoStartIndex+=e}}}(r,ap),t.data[e+19]={vars:ap,create:d,update:c,icus:f.length?f:null}}(a,t,e,n)}let ap;function rp(t,e,n,a){const r=t.next;n||(n=e),n===e&&t!==e.child?(t.next=e.child,e.child=t):n!==e&&t!==n.next?(t.next=n.next,n.next=t):t.next=null,e!==a[6]&&(t.parent=e);let i=t.next;for(;i;)i.next===t&&(i.next=r),i=i.next;if(1===t.type)return Fs(a,t,t.projection,da(a)),t;Ms(be(t,a),t,a);const s=a[t.index];return 0!==t.type&&Zt(s)&&Ms(s[7],t,a),t}function ip(t,e={}){let n=t;if(Gg.test(t)){const t={},e=[0];n=n.replace(Vg,(n,a,r)=>{const i=a||r,s=t[i]||[];if(s.length||(i.split("|").forEach(t=>{const e=t.match(Ug),n=e?parseInt(e[1],10):0,a=Hg.test(t);s.push([n,a,t])}),t[i]=s),!s.length)throw new Error("i18n postprocess: unmatched placeholder - "+i);const o=e[e.length-1];let u=0;for(let t=0;t<s.length;t++)if(s[t][0]===o){u=t;break}const[l,d,c]=s[u];return d?e.pop():o!==l&&e.push(l),s.splice(u,1),c})}return Object.keys(e).length?(n=n.replace(zg,(t,n,a,r,i,s)=>e.hasOwnProperty(a)?`${n}${e[a]}${s}`:t),n=n.replace(Bg,(t,n)=>e.hasOwnProperty(n)?e[n]:t),n=n.replace(Yg,(t,n)=>{if(e.hasOwnProperty(n)){const a=e[n];if(!a.length)throw new Error(`i18n postprocess: unmatched ICU - ${t} with key: ${n}`);return a.shift()}return t}),n):n}function sp(){!function(t){const e=Ae(),n=Qg[Xg--],a=t.data[n+19];let r=Ve();const i=up(n,a.create,0,e);for(let s=n+1;s<=r.index-19;s++)-1===i.indexOf(s)&&lp(s,e)}(Ae()[1]),cd(!1)}function op(t,e,n,a,r){const i=Ve();t[e+19]=a;const s=Ai(t[1],t[6],e,n,r,null);return i.next===s&&(i.next=null),s}function up(t,e,n,a){const r=Ae()[12];let i=null,s=null;const o=[];for(let u=0;u<e.length;u++){const n=e[u];if("string"==typeof n){const t=ws(n,r),l=e[++u];s=i,i=op(a,l,3,t,null),o.push(l),He()}else if("number"==typeof n)switch(7&n){case 1:const r=n>>>17;let l;l=r===t?a[6]:ye(r,a),s=rp(i,l,s,a);break;case 0:const d=n>>>3;o.push(d),s=i,i=ye(d,a),i&&ze(i,3===i.type);break;case 5:s=i=ye(n>>>3,a),ze(i,!1);break;case 4:es(n>>>3,e[++u],e[++u],a);break;default:throw new Error(`Unable to determine the type of mutate operation for "${n}"`)}else switch(n){case hi:const t=e[++u],l=e[++u],d=r.createComment(t);s=i,i=op(a,l,5,d,null),o.push(l),qr(d,a),i.activeCaseIndex=null,He();break;case fi:const c=e[++u],f=e[++u];s=i,i=op(a,f,3,r.createElement(c),c),o.push(f);break;default:throw new Error(`Unable to determine the type of mutate operation for "${n}"`)}}return He(),o}function lp(t,e){const n=ye(t,e),a=pe(t,e);a&&js(e[12],a);const r=_l(t);if(Zt(r)){const t=r;0!==n.type&&js(e[12],t[7])}n.flags|=32}function dp(t,e,n){np(t,e,n),sp()}function cp(t,e){!function(t,e,n){const a=Ve().index-19,r=[];for(let i=0;i<n.length;i+=2){const s=n[i],o=n[i+1].split(Fg);for(let n=0;n<o.length;n++){const i=o[n];if(1&n)throw new Error("ICU expressions are not yet supported in attributes");if(""!==i)if(i.match(jg))t.firstTemplatePass&&null===t.data[e+19]&&gt(Jg(i,a,s),r);else{const t=Ae();es(a,s,i,t);const e=ye(a,t),n=e.inputs&&e.inputs[s];n&&ys(t,n,i)}}}t.firstTemplatePass&&null===t.data[e+19]&&(t.data[e+19]=r)}(Ae()[1],t,e)}let fp=0,hp=0;function gp(t){return Uu(Ae(),t)!==ci&&(fp|=1<<hp),hp++,gp}function pp(t){if(hp){const e=Ae(),n=e[1].data[t+19];let a,r=null;Array.isArray(n)?a=n:(a=n.update,r=n.icus),function t(e,n,a,r,i,s=!1){let o=!1;for(let u=0;u<e.length;u++){const l=e[u],d=e[++u];if(s||l&r){let s="";for(let l=u+1;l<=u+d;l++){const u=e[l];if("string"==typeof u)s+=u;else if("number"==typeof u)if(u<0)s+=vn(i[a-u]);else{const d=u>>>2;let c,f,h;switch(3&u){case 1:Yi(d,e[++l],s,e[++l]);break;case 0:vs(i,d,s);break;case 2:if(c=e[++l],f=n[c],h=ye(d,i),null!==h.activeCaseIndex){const t=f.remove[h.activeCaseIndex];for(let e=0;e<t.length;e++){const a=t[e];switch(7&a){case 3:lp(a>>>3,i);break;case 6:const r=ye(t[e+1]>>>3,i).activeCaseIndex;null!==r&&gt(n[a>>>3].remove[r],t)}}}const u=bp(f,s);h.activeCaseIndex=-1!==u?u:null,up(-1,f.create[u],0,i),o=!0;break;case 3:c=e[++l],f=n[c],h=ye(d,i),t(f.update[h.activeCaseIndex],n,a,r,i,o)}}}}u+=d}}(a,r,e[7]-hp-1,fp,e),fp=0,hp=0}}function bp(t,e){let n=t.cases.indexOf(e);if(-1===n)switch(t.type){case 1:{const a=function(t,e){switch(Eg(e)(t)){case 0:return"zero";case 1:return"one";case 2:return"two";case 3:return"few";case 4:return"many";default:return"other"}}(e,Sp);n=t.cases.indexOf(a),-1===n&&"other"!==a&&(n=t.cases.indexOf("other"));break}case 0:n=t.cases.indexOf("other")}return n}function mp(t,e,n,a){const r=[],i=[],s=[],o=[],u=[];for(let l=0;l<e.values.length;l++){const d=e.values[l],c=[];for(let t=0;t<d.length;t++){const e=d[t];if("string"!=typeof e){const n=c.push(e)-1;d[t]=`\x3c!--�${n}�--\x3e`}}const f=yp(d.join(""),n,c,t,a);r.push(f.create),i.push(f.remove),s.push(f.update),o.push(f.vars),u.push(f.childIcus)}t.push({type:e.type,vars:o,childIcus:u,cases:e.cases,create:r,remove:i,update:s}),ap+=Math.max(...o)}function yp(t,e,n,a,r){const i=new $a(document).getInertBodyElement(t);if(!i)throw new Error("Unable to generate inert body element");const s={vars:0,childIcus:[],create:[],remove:[],update:[]};return function t(e,n,a,r,i,s){if(e){const o=[];for(;e;){const u=e.nextSibling,l=s+ ++n.vars;switch(e.nodeType){case Node.ELEMENT_NODE:const u=e,d=u.tagName.toLowerCase();if(sr.hasOwnProperty(d)){n.create.push(fi,d,l,a<<17|1);const o=u.attributes;for(let t=0;t<o.length;t++){const e=o.item(t),a=e.name.toLowerCase();e.value.match(jg)?lr.hasOwnProperty(a)&&gt(or[a]?Jg(e.value,l,e.name,Qa):ur[a]?Jg(e.value,l,e.name,Xa):Jg(e.value,l,e.name),n.update):n.create.push(l<<3|4,e.name,e.value)}t(e.firstChild,n,l,r,i,s),n.remove.push(l<<3|3)}else n.vars--;break;case Node.TEXT_NODE:const c=e.textContent||"",f=c.match(jg);n.create.push(f?"":c,l,a<<17|1),n.remove.push(l<<3|3),f&&gt(Jg(c,l),n.update);break;case Node.COMMENT_NODE:const h=vp.exec(e.textContent||"");if(h){const t=parseInt(h[1],10);n.create.push(hi,"",l,a<<17|1),o.push([r[t],l])}else n.vars--;break;default:n.vars--}e=u}for(let t=0;t<o.length;t++){const e=o[t][0],a=o[t][1];mp(i,e,a,s+n.vars);const r=i.length-1;n.vars+=Math.max(...i[r].vars),n.childIcus.push(r);const u=Zg(e);n.update.push(tp(e.mainBinding),3,-1-e.mainBinding,a<<2|2,r,u,2,a<<2|3,r),n.remove.push(r<<3|6,a<<3|3)}}}((mr(i)||i).firstChild,s,e,n,a,r),s}const vp=/�(\d+)�/,xp=/\uE500/g;let _p={};function Tp(t={translations:{}}){_p=t.translations}const Op=/\{\$(.*?)\}/g;function wp(t,e){return void 0!==_p[t]&&(t=_p[t]),void 0!==e&&Object.keys(e).length?t.replace(Op,(t,n)=>e[n]||""):t}let Sp=Dg;function Ip(t){null==t&&vt("Expected localeId to be defined"),"string"==typeof t&&(Sp=t.toLowerCase().replace(/_/g,"-"))}const Np=new Map;function Cp(t,e){const n=Np.get(t);Rp(t,n&&n.moduleType,e.moduleType),Np.set(t,e)}function Rp(t,e,n){if(e&&e!==n)throw new Error(`Duplicate module registered for ${t} - ${j(e)} vs ${j(e.name)}`)}function Ap(t){if(null!==t.ngModuleDef.id){const e=t.ngModuleDef.id;Rp(e,Np.get(e),t),Np.set(e,t)}let e=t.ngModuleDef.imports;e instanceof Function&&(e=e()),e&&e.forEach(t=>Ap(t))}function kp(t){return Np.get(t)}const Ep={provide:Yc,useClass:class extends Yc{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const e=Ht(t);return new Ig(e,this.ngModule)}},deps:[ft]};class Lp extends ft{constructor(t,e){super(),this._parent=e,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[];const n=$t(t),a=t[kt]||null;a&&Ip(a),this._bootstrapComponents=In(n.bootstrap),this._r3Injector=Do(t,e,[{provide:ft,useValue:this},Ep],j(t)),this.instance=this.get(t)}get(t,e=Bo.THROW_IF_NOT_FOUND,n=C.Default){return t===Bo||t===ft||t===$?this:this._r3Injector.get(t,e,n)}get componentFactoryResolver(){return this.get(Yc)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Dp extends ht{constructor(t){super(),this.moduleType=t,null!==$t(t)&&Ap(t)}create(t){return new Lp(this.moduleType,t)}}function Pp(t,e,n,a){return wt(()=>{const r=t,i=r.prototype?Object.getPrototypeOf(r.prototype):null,s=i&&i.constructor;null!==e&&(void 0===r.decorators||s&&s.decorators===r.decorators?r.decorators=e:r.decorators.push(...e)),null!==n&&(r.ctorParameters=n),null!==a&&(r.propDecorators=void 0===r.propDecorators||s&&s.propDecorators===r.propDecorators?a:Object.assign({},r.propDecorators,a))})}function Mp(t,e,n){const a=Qe()+t,r=Ae();return Ue()?Fu(r,a,n?e.call(n):e()):Gu(r,a)}function qp(t,e,n,a){const r=Ae(),i=Qe()+t;return Vu(r,i,n)?Fu(r,i+1,a?e.call(a,n):e(n)):Gu(r,i+1)}function jp(t,e,n,a,r){const i=Qe()+t,s=Ae();return zu(s,i,n,a)?Fu(s,i+2,r?e.call(r,n,a):e(n,a)):Gu(s,i+2)}function Fp(t,e,n,a,r,i){const s=Qe()+t,o=Ae();return Bu(o,s,n,a,r)?Fu(o,s+3,i?e.call(i,n,a,r):e(n,a,r)):Gu(o,s+3)}function Gp(t,e,n,a,r,i,s){const o=Qe()+t,u=Ae();return Yu(u,o,n,a,r,i)?Fu(u,o+4,s?e.call(s,n,a,r,i):e(n,a,r,i)):Gu(u,o+4)}function Vp(t,e,n,a,r,i,s,o){const u=Qe()+t,l=Ae(),d=Yu(l,u,n,a,r,i);return Vu(l,u+4,s)||d?Fu(l,u+5,o?e.call(o,n,a,r,i,s):e(n,a,r,i,s)):Gu(l,u+5)}function zp(t,e,n,a,r,i,s,o,u){const l=Qe()+t,d=Ae(),c=Yu(d,l,n,a,r,i);return zu(d,l+4,s,o)||c?Fu(d,l+6,u?e.call(u,n,a,r,i,s,o):e(n,a,r,i,s,o)):Gu(d,l+6)}function Bp(t,e,n,a,r,i,s,o,u,l){const d=Qe()+t,c=Ae();let f=Yu(c,d,n,a,r,i);return Bu(c,d+4,s,o,u)||f?Fu(c,d+7,l?e.call(l,n,a,r,i,s,o,u):e(n,a,r,i,s,o,u)):Gu(c,d+7)}function Yp(t,e,n,a,r,i,s,o,u,l,d){const c=Qe()+t,f=Ae(),h=Yu(f,c,n,a,r,i);return Yu(f,c+4,s,o,u,l)||h?Fu(f,c+8,d?e.call(d,n,a,r,i,s,o,u,l):e(n,a,r,i,s,o,u,l)):Gu(f,c+8)}function Hp(t,e,n,a){let r=Qe()+t,i=!1;const s=Ae();for(let o=0;o<n.length;o++)Vu(s,r++,n[o])&&(i=!0);return i?Fu(s,r,e.apply(a,n)):Gu(s,r)}function Up(t,e){const n=Ae()[1];let a;const r=t+19;n.firstTemplatePass?(a=function(t,e){if(e)for(let n=e.length-1;n>=0;n--){const a=e[n];if(t===a.name)return a}throw new Error(`The pipe '${t}' could not be found!`)}(e,n.pipeRegistry),n.data[r]=a,a.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(r,a.onDestroy)):a=n.data[r];const i=a.factory();return vl(t,i),i}function Wp(t,e,n){const a=_l(t);return Xp(Qp(t)?qp(e,a.transform,n,a):a.transform(n))}function Kp(t,e,n,a){const r=_l(t);return Xp(Qp(t)?jp(e,r.transform,n,a,r):r.transform(n,a))}function $p(t,e,n,a,r){const i=_l(t);return Xp(Qp(t)?Fp(e,i.transform,n,a,r,i):i.transform(n,a,r))}function Jp(t,e,n,a,r,i){const s=_l(t);return Xp(Qp(t)?Gp(e,s.transform,n,a,r,i,s):s.transform(n,a,r,i))}function Zp(t,e,n){const a=_l(t);return Xp(Qp(t)?Hp(e,a.transform,n,a):a.transform.apply(a,n))}function Qp(t){return Ae()[1].data[t+19].pure}function Xp(t){if(Mu.isWrapped(t)){t=Mu.unwrap(t);const e=Ae();e[e[7]]=ci}return t}class tb extends a.a{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,e,n){let a,i=t=>null,s=()=>null;t&&"object"==typeof t?(a=this.__isAsync?e=>{setTimeout(()=>t.next(e))}:e=>{t.next(e)},t.error&&(i=this.__isAsync?e=>{setTimeout(()=>t.error(e))}:e=>{t.error(e)}),t.complete&&(s=this.__isAsync?()=>{setTimeout(()=>t.complete())}:()=>{t.complete()})):(a=this.__isAsync?e=>{setTimeout(()=>t(e))}:e=>{t(e)},e&&(i=this.__isAsync?t=>{setTimeout(()=>e(t))}:t=>{e(t)}),n&&(s=this.__isAsync?()=>{setTimeout(()=>n())}:()=>{n()}));const o=super.subscribe(a,i,s);return t instanceof r.a&&t.add(o),o}}function eb(){return this._results[Lu()]()}class nb{constructor(){this.dirty=!0,this._results=[],this.changes=new tb,this.length=0;const t=Lu(),e=nb.prototype;e[t]||(e[t]=eb)}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,e){return this._results.reduce(t,e)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t){this._results=pt(t),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]}notifyOnChanges(){this.changes.emit(this)}setDirty(){this.dirty=!0}destroy(){this.changes.complete(),this.changes.unsubscribe()}}class ab{constructor(t){this.queryList=t,this.matches=null}clone(){return new ab(this.queryList)}setDirty(){this.queryList.setDirty()}}class rb{constructor(t=[]){this.queries=t}createEmbeddedView(t){const e=t.queries;if(null!==e){const n=null!==t.contentQueries?t.contentQueries[0]:e.length,a=new Array(n);for(let t=0;t<n;t++){const n=e.getByIndex(t);a[t]=this.queries[n.indexInDeclarationView].clone()}return new rb(a)}return null}insertView(t){this.dirtyQueriesWithMatches(t)}detachView(t){this.dirtyQueriesWithMatches(t)}dirtyQueriesWithMatches(t){for(let e=0;e<this.queries.length;e++)null!==Ob(t,e).matches&&this.queries[e].setDirty()}}class ib{constructor(t,e,n,a=null){this.predicate=t,this.descendants=e,this.isStatic=n,this.read=a}}class sb{constructor(t=[]){this.queries=t}elementStart(t,e){for(let n of this.queries)n.elementStart(t,e)}elementEnd(t){for(let e of this.queries)e.elementEnd(t)}embeddedTView(t){let e=null;for(let n=0;n<this.length;n++){const a=null!==e?e.length:0,r=this.getByIndex(n).embeddedTView(t,a);r&&(r.indexInDeclarationView=n,null!==e?e.push(r):e=[r])}return null!==e?new sb(e):null}template(t,e){for(let n of this.queries)n.template(t,e)}getByIndex(t){return this.queries[t]}get length(){return this.queries.length}track(t){this.queries.push(t)}}class ob{constructor(t,e=-1){this.metadata=t,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=e}elementStart(t,e){this.isApplyingToNode(e)&&this.matchTNode(t,e)}elementEnd(t){this._declarationNodeIndex===t.index&&(this._appliesToNextNode=!1)}template(t,e){this.elementStart(t,e)}embeddedTView(t,e){return this.isApplyingToNode(t)?(this.crossesNgTemplate=!0,this.addMatch(-t.index,e),new ob(this.metadata)):null}isApplyingToNode(t){return this._appliesToNextNode&&!1===this.metadata.descendants?this._declarationNodeIndex===(t.parent?t.parent.index:-1):this._appliesToNextNode}matchTNode(t,e){if(Array.isArray(this.metadata.predicate)){const n=this.metadata.predicate;for(let a=0;a<n.length;a++)this.matchTNodeWithReadOption(t,e,ub(e,n[a]))}else{const n=this.metadata.predicate;n===wf?0===e.type&&this.matchTNodeWithReadOption(t,e,-1):this.matchTNodeWithReadOption(t,e,wa(e,t,n,!1,!1))}}matchTNodeWithReadOption(t,e,n){if(null!==n){const a=this.metadata.read;if(null!==a)if(a===Kc||a===Nf||a===wf&&0===e.type)this.addMatch(e.index,-2);else{const n=wa(e,t,a,!1,!1);null!==n&&this.addMatch(e.index,n)}else this.addMatch(e.index,n)}}addMatch(t,e){null===this.matches?this.matches=[t,e]:this.matches.push(t,e)}}function ub(t,e){const n=t.localNames;if(null!==n)for(let a=0;a<n.length;a+=2)if(n[a]===e)return n[a+1];return null}function lb(t,e,n,a){return-1===n?function(t,e){return 3===t.type||4===t.type?$s(Kc,t,e):0===t.type?Js(wf,Kc,t,e):null}(e,t):-2===n?function(t,e,n){return n===Kc?$s(Kc,e,t):n===wf?Js(wf,Kc,e,t):n===Nf?Zs(Nf,Kc,e,t):void 0}(t,e,a):Sa(t[1].data,t,n,e)}function db(t,e,n){const a=t[5].queries[n];if(null===a.matches){const n=t[1].data,r=e.matches,i=new Array(r.length/2);for(let a=0;a<r.length;a+=2){const s=r[a];i[a/2]=s<0?null:lb(t,n[s],r[a+1],e.metadata.read)}a.matches=i}return a.matches}function cb(t){const e=Ae(),n=en();nn(n+1);const a=Ob(e[1],n);if(t.dirty&&Ue()===a.metadata.isStatic){if(null===a.matches)t.reset([]);else{const r=a.crossesNgTemplate?function t(e,n,a){const r=e[1].queries.getByIndex(n),i=r.matches;if(null!==i){const s=db(e,r,n);for(let n=0;n<i.length;n+=2){const r=i[n];if(r>0)a.push(s[n/2]);else{const s=i[n+1],o=e[-r];for(let e=9;e<o.length;e++){const n=o[e];n[17]===n[3]&&t(n,s,a)}if(null!==o[5])for(let e of o[5])t(e,s,a)}}}return a}(e,n,[]):db(e,a,n);t.reset(r),t.notifyOnChanges()}return!0}return!1}function fb(t,e,n){gb(Ae(),t,e,n,!0)}function hb(t,e,n){gb(Ae(),t,e,n,!1)}function gb(t,e,n,a,r){const i=t[1];i.firstTemplatePass&&(Tb(i,new ib(e,n,r,a),-1),r&&(i.staticViewQueries=!0)),_b(t)}function pb(){return xb(Ae(),en())}function bb(t,e,n,a){yb(Ae(),e,n,a,!1,Ve(),t)}function mb(t,e,n,a){yb(Ae(),e,n,a,!0,Ve(),t)}function yb(t,e,n,a,r,i,s){const o=t[1];o.firstTemplatePass&&(Tb(o,new ib(e,n,r,a),i.index),function(t,e){const n=t.contentQueries||(t.contentQueries=[]);e!==(t.contentQueries.length?n[n.length-1]:-1)&&n.push(t.queries.length-1,e)}(o,s),r&&(o.staticContentQueries=!0)),_b(t)}function vb(){return xb(Ae(),en())}function xb(t,e){return t[5].queries[e].queryList}function _b(t){const e=new nb;!function(t,e,n){const a=gs(t);a.push(e),t[1].firstTemplatePass&&ps(t).push(n,a.length-1)}(t,e,e.destroy),null===t[5]&&(t[5]=new rb),t[5].queries.push(new ab(e))}function Tb(t,e,n){null===t.queries&&(t.queries=new sb),t.queries.track(new ob(e,n))}function Ob(t,e){return t.queries.getByIndex(e)}function wb(t,e){return Js(wf,Kc,t,e)}function Sb(t=C.Default){const e=Qs(!0);if(null!=e||t&C.Optional)return e;throw new Error("No provider for ChangeDetectorRef!")}const Ib=(()=>({"ɵɵattribute":Wu,"ɵɵattributeInterpolate1":al,"ɵɵattributeInterpolate2":rl,"ɵɵattributeInterpolate3":il,"ɵɵattributeInterpolate4":sl,"ɵɵattributeInterpolate5":ol,"ɵɵattributeInterpolate6":ul,"ɵɵattributeInterpolate7":ll,"ɵɵattributeInterpolate8":dl,"ɵɵattributeInterpolateV":cl,"ɵɵdefineBase":zt,"ɵɵdefineComponent":Pt,"ɵɵdefineDirective":Bt,"ɵɵdefineInjectable":k,"ɵɵdefineInjector":L,"ɵɵdefineNgModule":Ft,"ɵɵdefinePipe":Yt,"ɵɵdirectiveInject":Tl,"ɵɵgetFactoryOf":Ra,"ɵɵgetInheritedFactory":Aa,"ɵɵinject":rt,"ɵɵinjectAttribute":Ol,"ɵɵinjectPipeChangeDetectorRef":Sb,"ɵɵtemplateRefExtractor":wb,"ɵɵNgOnChangesFeature":Oc,"ɵɵProvidersFeature":jc,"ɵɵInheritDefinitionFeature":Nc,"ɵɵcontainer":gl,"ɵɵnextContext":od,"ɵɵcontainerRefreshStart":bl,"ɵɵcontainerRefreshEnd":ml,"ɵɵnamespaceHTML":gn,"ɵɵnamespaceMathML":hn,"ɵɵnamespaceSVG":fn,"ɵɵenableBindings":Ce,"ɵɵdisableBindings":Re,"ɵɵallocHostVars":ku,"ɵɵelementStart":Bl,"ɵɵelementEnd":Yl,"ɵɵelement":Hl,"ɵɵelementContainerStart":Kl,"ɵɵelementContainerEnd":$l,"ɵɵelementContainer":Jl,"ɵɵpureFunction0":Mp,"ɵɵpureFunction1":qp,"ɵɵpureFunction2":jp,"ɵɵpureFunction3":Fp,"ɵɵpureFunction4":Gp,"ɵɵpureFunction5":Vp,"ɵɵpureFunction6":zp,"ɵɵpureFunction7":Bp,"ɵɵpureFunction8":Yp,"ɵɵpureFunctionV":Hp,"ɵɵgetCurrentView":Xl,"ɵɵrestoreView":Ge,"ɵɵlistener":nd,"ɵɵload":_l,"ɵɵprojection":fd,"ɵɵupdateSyntheticHostBinding":tc,"ɵɵcomponentHostSyntheticListener":ad,"ɵɵpipeBind1":Wp,"ɵɵpipeBind2":Kp,"ɵɵpipeBind3":$p,"ɵɵpipeBind4":Jp,"ɵɵpipeBindV":Zp,"ɵɵprojectionDef":ld,"ɵɵhostProperty":Xd,"ɵɵproperty":Hu,"ɵɵpropertyInterpolate":hd,"ɵɵpropertyInterpolate1":gd,"ɵɵpropertyInterpolate2":pd,"ɵɵpropertyInterpolate3":bd,"ɵɵpropertyInterpolate4":md,"ɵɵpropertyInterpolate5":yd,"ɵɵpropertyInterpolate6":vd,"ɵɵpropertyInterpolate7":xd,"ɵɵpropertyInterpolate8":_d,"ɵɵpropertyInterpolateV":Td,"ɵɵpipe":Up,"ɵɵqueryRefresh":cb,"ɵɵviewQuery":hb,"ɵɵstaticViewQuery":fb,"ɵɵstaticContentQuery":mb,"ɵɵloadViewQuery":pb,"ɵɵcontentQuery":bb,"ɵɵloadContentQuery":vb,"ɵɵreference":xl,"ɵɵelementHostAttrs":Ul,"ɵɵclassMap":kl,"ɵɵclassMapInterpolate1":Pd,"ɵɵclassMapInterpolate2":Md,"ɵɵclassMapInterpolate3":qd,"ɵɵclassMapInterpolate4":jd,"ɵɵclassMapInterpolate5":Fd,"ɵɵclassMapInterpolate6":Gd,"ɵɵclassMapInterpolate7":Vd,"ɵɵclassMapInterpolate8":zd,"ɵɵclassMapInterpolateV":Bd,"ɵɵstyling":wl,"ɵɵstyleMap":Al,"ɵɵstyleProp":Il,"ɵɵstylePropInterpolate1":Yd,"ɵɵstylePropInterpolate2":Hd,"ɵɵstylePropInterpolate3":Ud,"ɵɵstylePropInterpolate4":Wd,"ɵɵstylePropInterpolate5":Kd,"ɵɵstylePropInterpolate6":$d,"ɵɵstylePropInterpolate7":Jd,"ɵɵstylePropInterpolate8":Zd,"ɵɵstylePropInterpolateV":Qd,"ɵɵstyleSanitizer":Sl,"ɵɵstylingApply":Pl,"ɵɵclassProp":Cl,"ɵɵselect":Oi,"ɵɵtemplate":pl,"ɵɵtext":Od,"ɵɵtextBinding":wd,"ɵɵtextInterpolate":Sd,"ɵɵtextInterpolate1":Id,"ɵɵtextInterpolate2":Nd,"ɵɵtextInterpolate3":Cd,"ɵɵtextInterpolate4":Rd,"ɵɵtextInterpolate5":Ad,"ɵɵtextInterpolate6":kd,"ɵɵtextInterpolate7":Ed,"ɵɵtextInterpolate8":Ld,"ɵɵtextInterpolateV":Dd,"ɵɵembeddedViewStart":Zl,"ɵɵembeddedViewEnd":Ql,"ɵɵi18n":dp,"ɵɵi18nAttributes":cp,"ɵɵi18nExp":gp,"ɵɵi18nStart":np,"ɵɵi18nEnd":sp,"ɵɵi18nApply":pp,"ɵɵi18nPostprocess":ip,"ɵɵi18nLocalize":wp,"ɵɵresolveWindow":Tn,"ɵɵresolveDocument":On,"ɵɵresolveBody":wn,"ɵɵsetComponentScope":Mt,"ɵɵsetNgModuleScope":Gt,"ɵɵsanitizeHtml":Or,"ɵɵsanitizeStyle":wr,"ɵɵdefaultStyleSanitizer":Ar,"ɵɵsanitizeResourceUrl":Ir,"ɵɵsanitizeScript":Nr,"ɵɵsanitizeUrl":Sr,"ɵɵsanitizeUrlOrResourceUrl":Rr}))(),Nb=[],Cb=[];let Rb=!1;function Ab(){if(!Rb){Rb=!0;try{for(let t=Cb.length-1;t>=0;t--){const{moduleType:e,ngModule:n}=Cb[t];n.declarations&&n.declarations.every(kb)&&(Cb.splice(t,1),qb(e,n))}}finally{Rb=!1}}}function kb(t){return Array.isArray(t)?t.every(kb):!!V(t)}function Eb(t,e={}){Lb(t,e),function(t,e){Cb.push({moduleType:t,ngModule:e})}(t,e)}function Lb(t,e,n=!1){const a=pt(e.declarations||Nb);let r=null;Object.defineProperty(t,At,{configurable:!0,get:()=>(null===r&&(r=W().compileNgModule(Ib,`ng:///${t.name}/ngModuleDef.js`,{type:t,bootstrap:pt(e.bootstrap||Nb).map(V),declarations:a.map(V),imports:pt(e.imports||Nb).map(V).map(Gb),exports:pt(e.exports||Nb).map(V).map(Gb),emitInline:!0,schemas:e.schemas?pt(e.schemas):null,id:e.id||null})),r)});let i=null;Object.defineProperty(t,q,{get:()=>{if(null===i){const n={name:t.name,type:t,deps:go(t),providers:e.providers||Nb,imports:[(e.imports||Nb).map(V),(e.exports||Nb).map(V)]};i=W().compileInjector(Ib,`ng:///${t.name}/ngInjectorDef.js`,n)}return i},configurable:!1})}let Db=new Map,Pb=new Map;function Mb(){Db=new Map,Pb=new Map,Cb.length=0}function qb(t,e){const n=pt(e.declarations||Nb),a=Fb(t);n.forEach(e=>{e.hasOwnProperty(Nt)?jb(Ht(e),a):e.hasOwnProperty(Ct)||e.hasOwnProperty(Rt)||(e.ngSelectorScope=t)})}function jb(t,e){t.directiveDefs=()=>Array.from(e.compilation.directives).map(t=>t.hasOwnProperty(Nt)?Ht(t):Ut(t)).filter(t=>!!t),t.pipeDefs=()=>Array.from(e.compilation.pipes).map(t=>Wt(t)),t.schemas=e.schemas,t.tView=null}function Fb(t,e){if(!Vb(t))throw new Error(t.name+" does not have an ngModuleDef");const n=$t(t);if(null!==n.transitiveCompileScopes)return n.transitiveCompileScopes;const a={schemas:n.schemas||null,compilation:{directives:new Set,pipes:new Set},exported:{directives:new Set,pipes:new Set}};return In(n.declarations).forEach(t=>{Wt(t)?a.compilation.pipes.add(t):a.compilation.directives.add(t)}),In(n.imports).forEach(t=>{const n=t;if(!Vb(n))throw new Error(`Importing ${n.name} which does not have an ngModuleDef`);e&&e(n);const r=Fb(n,e);r.exported.directives.forEach(t=>a.compilation.directives.add(t)),r.exported.pipes.forEach(t=>a.compilation.pipes.add(t))}),In(n.exports).forEach(t=>{const n=t;if(Vb(n)){const t=Fb(n,e);t.exported.directives.forEach(t=>{a.compilation.directives.add(t),a.exported.directives.add(t)}),t.exported.pipes.forEach(t=>{a.compilation.pipes.add(t),a.exported.pipes.add(t)})}else Wt(n)?a.exported.pipes.add(n):a.exported.directives.add(n)}),n.transitiveCompileScopes=a,a}function Gb(t){return function(t){return void 0!==t.ngModule}(t)?t.ngModule:t}function Vb(t){return!!$t(t)}function zb(t,e){let n=null;!function(t,e){Cu(e)&&(Iu.set(t,e),Nu.add(t))}(t,e),Object.defineProperty(t,Nt,{get:()=>{const a=W();if(null===n){if(Cu(e)){const n=[`Component '${t.name}' is not resolved:`];throw e.templateUrl&&n.push(" - templateUrl: "+e.templateUrl),e.styleUrls&&e.styleUrls.length&&n.push(" - styleUrls: "+JSON.stringify(e.styleUrls)),n.push("Did you run and wait for 'resolveComponentResources()'?"),new Error(n.join("\n"))}const r=e.templateUrl||`ng:///${t.name}/template.html`,i=Object.assign({},Hb(t,e),{typeSourceSpan:a.createParseSourceSpan("Component",t.name,r),template:e.template||"",preserveWhitespaces:e.preserveWhitespaces||!1,styles:e.styles||It,animations:e.animations,directives:[],changeDetection:e.changeDetection,pipes:new Map,encapsulation:e.encapsulation||Ot.Emulated,interpolation:e.interpolation,viewProviders:e.viewProviders||null});if(i.usesInheritance&&Ub(t),n=a.compileComponent(Ib,r,i),Ab(),void 0!==t.ngSelectorScope){const e=Fb(t.ngSelectorScope);jb(n,e)}}return n},configurable:!1}),bo(t)}function Bb(t,e){let n=null;Object.defineProperty(t,Ct,{get:()=>{if(null===n){const a=t&&t.name,r=`ng:///${a}/ngDirectiveDef.js`,i=W(),s=Hb(t,e);s.typeSourceSpan=i.createParseSourceSpan("Directive",a,r),s.usesInheritance&&Ub(t),n=i.compileDirective(Ib,r,s)}return n},configurable:!1}),bo(t)}function Yb(t){return Object.getPrototypeOf(t.prototype)===Object.prototype}function Hb(t,e){const n=ho().ownPropMetadata(t);return{name:t.name,type:t,typeArgumentCount:0,selector:e.selector,deps:go(t),host:e.host||St,propMetadata:n,inputs:e.inputs||It,outputs:e.outputs||It,queries:Jb(t,n,Zb),lifecycle:{usesOnChanges:t.prototype.hasOwnProperty("ngOnChanges")},typeSourceSpan:null,usesInheritance:!Yb(t),exportAs:(a=e.exportAs,void 0===a?null:a.split(",").map(t=>t.trim())),providers:e.providers||null,viewQueries:Jb(t,n,Qb)};var a}function Ub(t){const e=Object.prototype;let n=Object.getPrototypeOf(t);for(;n&&n!==e;){if(!Ut(n)&&!Ht(n)&&!Kt(n)){const t=Kb(n);t&&Wb(n,t)}n=Object.getPrototypeOf(n)}}function Wb(t,e){let n=null;Object.defineProperty(t,Et,{get:()=>{if(null===n){const a=`ng://${t&&t.name}/ngBaseDef.js`,r=W();n=r.compileBase(Ib,a,e)}return n},configurable:!1})}function Kb(t){const e=ho().ownPropMetadata(t),n=Jb(t,e,Qb),a=Jb(t,e,Zb);let r,i,s=!1;for(const o in e)e[o].forEach(t=>{const e=t.ngMetadataName;"Input"===e?(r=r||{},r[o]=t.bindingPropertyName?[t.bindingPropertyName,o]:o):"Output"===e?(i=i||{},i[o]=t.bindingPropertyName||o):"HostBinding"!==e&&"HostListener"!==e||(s=!0)});return r||i||n.length||a.length||s?{name:t.name,type:t,inputs:r,outputs:i,viewQueries:n,queries:a,propMetadata:e}:null}function $b(t,e){return{propertyName:t,predicate:(n=e.selector,"string"==typeof n?n.split(",").map(t=>t.trim()):V(n)),descendants:e.descendants,first:e.first,read:e.read?e.read:null,static:!!e.static};var n}function Jb(t,e,n){const a=[];for(const r in e)if(e.hasOwnProperty(r)){const i=e[r];i.forEach(e=>{if(n(e)){if(!e.selector)throw new Error(`Can't construct a query for the property "${r}" of "${xn(t)}" since the query selector wasn't defined.`);if(i.some(Xb))throw new Error("Cannot combine @Input decorators with query decorators");a.push($b(r,e))}})}return a}function Zb(t){const e=t.ngMetadataName;return"ContentChild"===e||"ContentChildren"===e}function Qb(t){const e=t.ngMetadataName;return"ViewChild"===e||"ViewChildren"===e}function Xb(t){return"Input"===t.ngMetadataName}function tm(t,e){let n=null;Object.defineProperty(t,Rt,{get:()=>{if(null===n){const a=t.name;n=W().compilePipe(Ib,`ng:///${a}/ngPipeDef.js`,{type:t,typeArgumentCount:0,name:a,deps:go(t),pipeName:e.name,pure:void 0===e.pure||e.pure})}return n},configurable:!1})}const em=y("Directive",(t={})=>t,void 0,void 0,(t,e)=>fm(t,e)),nm=y("Component",(t={})=>Object.assign({changeDetection:xt.Default},t),em,void 0,(t,e)=>cm(t,e)),am=y("Pipe",t=>Object.assign({pure:!0},t),void 0,void 0,(t,e)=>hm(t,e)),rm=_("Input",t=>({bindingPropertyName:t})),im=_("Output",t=>({bindingPropertyName:t})),sm=_("HostBinding",t=>({hostPropertyName:t})),om=_("HostListener",(t,e)=>({eventName:t,args:e})),um=zb,lm=Bb,dm=tm,cm=Wc,fm=Wc,hm=Wc,gm=y("NgModule",t=>t,void 0,void 0,(t,e)=>bm(t,e)),pm=Eb,bm=function(t,e){let n=e&&e.imports||[];e&&e.exports&&(n=[...n,e.exports]),t.ngInjectorDef=L({factory:wo(t,{useClass:t}),providers:e&&e.providers,imports:n})},mm=new K("Application Initializer");class ym{constructor(t){this.appInits=t,this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}runInitializers(){if(this.initialized)return;const t=[],e=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let n=0;n<this.appInits.length;n++){const e=this.appInits[n]();td(e)&&t.push(e)}Promise.all(t).then(()=>{e()}).catch(t=>{this.reject(t)}),0===t.length&&e(),this.initialized=!0}}const vm=new K("AppId");function xm(){return`${Tm()}${Tm()}${Tm()}`}const _m={provide:vm,useFactory:xm,deps:[]};function Tm(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Om=new K("Platform Initializer"),wm=new K("Platform ID"),Sm=new K("appBootstrapListener"),Im=new K("Application Packages Root URL");class Nm{log(t){console.log(t)}warn(t){console.warn(t)}}const Cm=new K("LocaleId"),Rm=new K("Translations"),Am=new K("TranslationsFormat"),km=function(){var t={Error:0,Warning:1,Ignore:2};return t[t.Error]="Error",t[t.Warning]="Warning",t[t.Ignore]="Ignore",t}(),Em=!0,Lm=!1;class Dm{constructor(t,e){this.ngModuleFactory=t,this.componentFactories=e}}function Pm(){throw new Error("Runtime compiler is not loaded")}const Mm=function(t){return new Dp(t)},qm=Pm,jm=function(t){return Promise.resolve(Mm(t))},Fm=Pm,Gm=function(t){const e=Mm(t),n=In($t(t).declarations).reduce((t,e)=>{const n=Ht(e);return n&&t.push(new Ig(n)),t},[]);return new Dm(e,n)},Vm=Pm,zm=function(t){return Promise.resolve(Gm(t))},Bm=Pm;class Ym{constructor(){this.compileModuleSync=qm,this.compileModuleAsync=Fm,this.compileModuleAndAllComponentsSync=Vm,this.compileModuleAndAllComponentsAsync=Bm}clearCache(){}clearCacheFor(t){}getModuleId(t){}}const Hm=new K("compilerOptions");class Um{}let Wm,Km;function $m(){const t=U.wtf;return!(!t||(Wm=t.trace,!Wm)||(Km=Wm.events,0))}function Jm(t,e=null){return Km.createScope(t,e)}function Zm(t,e){return Wm.leaveScope(t,e),e}function Qm(t,e){return Wm.beginTimeRange(t,e)}function Xm(t){Wm.endTimeRange(t)}const ty=$m();function ey(t,e){return null}const ny=ty?Jm:(t,e)=>ey,ay=ty?Zm:(t,e)=>e,ry=ty?Qm:(t,e)=>null,iy=ty?Xm:t=>null,sy=(()=>Promise.resolve(0))();function oy(t){"undefined"==typeof Zone?sy.then(()=>{t&&t.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",t)}class uy{constructor({enableLongStackTrace:t=!1}){if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new tb(!1),this.onMicrotaskEmpty=new tb(!1),this.onStable=new tb(!1),this.onError=new tb(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");var e;Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),Zone.TaskTrackingZoneSpec&&(this._inner=this._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),(e=this)._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,n,a,r,i,s)=>{try{return fy(e),t.invokeTask(a,r,i,s)}finally{hy(e)}},onInvoke:(t,n,a,r,i,s,o)=>{try{return fy(e),t.invoke(a,r,i,s,o)}finally{hy(e)}},onHasTask:(t,n,a,r)=>{t.hasTask(a,r),n===a&&("microTask"==r.change?(e.hasPendingMicrotasks=r.microTask,cy(e)):"macroTask"==r.change&&(e.hasPendingMacrotasks=r.macroTask))},onHandleError:(t,n,a,r)=>(t.handleError(a,r),e.runOutsideAngular(()=>e.onError.emit(r)),!1)})}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uy.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(uy.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,e,n){return this._inner.run(t,e,n)}runTask(t,e,n,a){const r=this._inner,i=r.scheduleEventTask("NgZoneEvent: "+a,t,dy,ly,ly);try{return r.runTask(i,e,n)}finally{r.cancelTask(i)}}runGuarded(t,e,n){return this._inner.runGuarded(t,e,n)}runOutsideAngular(t){return this._outer.run(t)}}function ly(){}const dy={};function cy(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(()=>t.onStable.emit(null))}finally{t.isStable=!0}}}function fy(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function hy(t){t._nesting--,cy(t)}class gy{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new tb,this.onMicrotaskEmpty=new tb,this.onStable=new tb,this.onError=new tb}run(t){return t()}runGuarded(t){return t()}runOutsideAngular(t){return t()}runTask(t){return t()}}class py{constructor(t){this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uy.assertNotInAngularZone(),oy(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())oy(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(e=>!e.updateCb||!e.updateCb(t)||(clearTimeout(e.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,e,n){let a=-1;e&&e>0&&(a=setTimeout(()=>{this._callbacks=this._callbacks.filter(t=>t.timeoutId!==a),t(this._didWork,this.getPendingTasks())},e)),this._callbacks.push({doneCb:t,timeoutId:a,updateCb:n})}whenStable(t,e,n){if(n&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');this.addCallback(t,e,n),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(t,e,n){return[]}}class by{constructor(){this._applications=new Map,xy.addToWindow(this)}registerApplication(t,e){this._applications.set(t,e)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,e=!0){return xy.findTestabilityInTree(this,t,e)}}class my{addToWindow(t){}findTestabilityInTree(t,e,n){return null}}function yy(t){xy=t}let vy,xy=new my;function _y(t,e,n){const a=new Dp(n);if(0===Iu.size)return Promise.resolve(a);const r=function(t){const e=[];return t.forEach(t=>t&&e.push(...t)),e}(t.get(Hm,[]).concat(e).map(t=>t.providers));if(0===r.length)return Promise.resolve(a);const i=W(),s=Bo.create({providers:r}).get(i.ResourceLoader);return Su(t=>Promise.resolve(s.get(t))).then(()=>a)}function Ty(t){return t.isBoundToModule}const Oy=new K("AllowMultipleToken");class wy{constructor(t,e){this.name=t,this.token=e}}function Sy(t){if(vy&&!vy.destroyed&&!vy.injector.get(Oy,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");vy=t.get(Ay);const e=t.get(Om,null);return e&&e.forEach(t=>t()),vy}function Iy(t,e,n=[]){const a="Platform: "+e,r=new K(a);return(e=[])=>{let i=Ry();if(!i||i.injector.get(Oy,!1))if(t)t(n.concat(e).concat({provide:r,useValue:!0}));else{const t=n.concat(e).concat({provide:r,useValue:!0});Sy(Bo.create({providers:t,name:a}))}return Ny(r)}}function Ny(t){const e=Ry();if(!e)throw new Error("No platform exists!");if(!e.injector.get(t,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return e}function Cy(){vy&&!vy.destroyed&&vy.destroy()}function Ry(){return vy&&!vy.destroyed?vy:null}class Ay{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,e){const n=function(t){let e;return e="noop"===t?new gy:("zone.js"===t?void 0:t)||new uy({enableLongStackTrace:Wa()}),e}(e?e.ngZone:void 0),a=[{provide:uy,useValue:n}];return n.run(()=>{const e=Bo.create({providers:a,parent:this.injector,name:t.moduleType.name}),r=t.create(e),i=r.injector.get(Da,null);if(!i)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return Lm&&Ip(r.injector.get(Cm,Dg)||Dg),r.onDestroy(()=>Ly(this._modules,r)),n.runOutsideAngular(()=>n.onError.subscribe({next:t=>{i.handleError(t)}})),function(t,e,n){try{const a=n();return td(a)?a.catch(n=>{throw e.runOutsideAngular(()=>t.handleError(n)),n}):a}catch(a){throw e.runOutsideAngular(()=>t.handleError(a)),a}}(i,n,()=>{const t=r.injector.get(ym);return t.runInitializers(),t.donePromise.then(()=>(this._moduleDoBootstrap(r),r))})})}bootstrapModule(t,e=[]){const n=ky({},e);return function(t,e,n){return t.get(Um).createCompiler([e]).compileModuleAsync(n)}(this.injector,n,t).then(t=>this.bootstrapModuleFactory(t,n))}_moduleDoBootstrap(t){const e=t.injector.get(Ey);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(t=>e.bootstrap(t));else{if(!t.instance.ngDoBootstrap)throw new Error(`The module ${j(t.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);t.instance.ngDoBootstrap(e)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(t=>t.destroy()),this._destroyListeners.forEach(t=>t()),this._destroyed=!0}get destroyed(){return this._destroyed}}function ky(t,e){return Array.isArray(e)?e.reduce(ky,t):Object.assign({},t,e)}let Ey=(()=>{class t{constructor(t,e,n,a,r,o){this._zone=t,this._console=e,this._injector=n,this._exceptionHandler=a,this._componentFactoryResolver=r,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=Wa(),this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new i.a(t=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{t.next(this._stable),t.complete()})}),d=new i.a(t=>{let e;this._zone.runOutsideAngular(()=>{e=this._zone.onStable.subscribe(()=>{uy.assertNotInAngularZone(),oy(()=>{this._stable||this._zone.hasPendingMacrotasks||this._zone.hasPendingMicrotasks||(this._stable=!0,t.next(!0))})})});const n=this._zone.onUnstable.subscribe(()=>{uy.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{t.next(!1)}))});return()=>{e.unsubscribe(),n.unsubscribe()}});this.isStable=Object(s.a)(l,d.pipe(t=>{return u()((e=g,function(t){let n;n="function"==typeof e?e:function(){return e};const a=Object.create(t,f);return a.source=t,a.subjectFactory=n,a})(t));var e}))}bootstrap(t,e){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let n;n=t instanceof Gc?t:this._componentFactoryResolver.resolveComponentFactory(t),this.componentTypes.push(n.componentType);const a=n instanceof Uc?null:this._injector.get(ft),r=n.create(Bo.NULL,[],e||n.selector,a);r.onDestroy(()=>{this._unloadComponent(r)});const i=r.injector.get(py,null);return i&&r.injector.get(by).registerApplication(r.location.nativeElement,i),this._loadComponent(r),Wa()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),r}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");const e=t._tickScope();try{this._runningTick=!0;for(let t of this._views)t.detectChanges();if(this._enforceNoNewChanges)for(let t of this._views)t.checkNoChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1,ay(e)}}attachView(t){const e=t;this._views.push(e),e.attachToAppRef(this)}detachView(t){const e=t;Ly(this._views,e),e.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(Sm,[]).concat(this._bootstrapListeners).forEach(e=>e(t))}_unloadComponent(t){this.detachView(t.hostView),Ly(this.components,t)}ngOnDestroy(){this._views.slice().forEach(t=>t.destroy())}get viewCount(){return this._views.length}}return t._tickScope=ny("ApplicationRef#tick()"),t})();function Ly(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}class Dy{}function Py(t){const e=kp(t);if(!e)throw jy(t);return e}function My(t){const e=kp(t);if(!e)throw jy(t);return new Dp(e)}const qy=Py;function jy(t){return new Error(`No module with ID ${t} loaded`)}class Fy{}const Gy={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"};class Vy{constructor(t,e){this._compiler=t,this._config=e||Gy}load(t){return!Lm&&this._compiler instanceof Ym?this.loadFactory(t):this.loadAndCompile(t)}loadAndCompile(t){let[e,a]=t.split("#");return void 0===a&&(a="default"),n("crnd")(e).then(t=>t[a]).then(t=>zy(t,e,a)).then(t=>this._compiler.compileModuleAsync(t))}loadFactory(t){let[e,a]=t.split("#"),r="NgFactory";return void 0===a&&(a="default",r=""),n("crnd")(this._config.factoryPathPrefix+e+this._config.factoryPathSuffix).then(t=>t[a+r]).then(t=>zy(t,e,a))}}function zy(t,e,n){if(!t)throw new Error(`Cannot find '${n}' in '${e}'`);return t}class By extends Xs{}class Yy extends By{}class Hy{constructor(t,e){this.name=t,this.callback=e}}class Uy{constructor(t,e,n){this.listeners=[],this.parent=null,this._debugContext=n,this.nativeNode=t,e&&e instanceof Wy&&e.addChild(this)}get injector(){return this._debugContext.injector}get componentInstance(){return this._debugContext.component}get context(){return this._debugContext.context}get references(){return this._debugContext.references}get providerTokens(){return this._debugContext.providerTokens}}class Wy extends Uy{constructor(t,e,n){super(t,e,n),this.properties={},this.attributes={},this.classes={},this.styles={},this.childNodes=[],this.nativeElement=t}addChild(t){t&&(this.childNodes.push(t),t.parent=this)}removeChild(t){const e=this.childNodes.indexOf(t);-1!==e&&(t.parent=null,this.childNodes.splice(e,1))}insertChildrenAfter(t,e){const n=this.childNodes.indexOf(t);-1!==n&&(this.childNodes.splice(n+1,0,...e),e.forEach(e=>{e.parent&&e.parent.removeChild(e),t.parent=this}))}insertBefore(t,e){const n=this.childNodes.indexOf(t);-1===n?this.addChild(e):(e.parent&&e.parent.removeChild(e),e.parent=this,this.childNodes.splice(n,0,e))}query(t){return this.queryAll(t)[0]||null}queryAll(t){const e=[];return function t(e,n,a){e.childNodes.forEach(e=>{e instanceof Wy&&(n(e)&&a.push(e),t(e,n,a))})}(this,t,e),e}queryAllNodes(t){const e=[];return function t(e,n,a){e instanceof Wy&&e.childNodes.forEach(e=>{n(e)&&a.push(e),e instanceof Wy&&t(e,n,a)})}(this,t,e),e}get children(){return this.childNodes.filter(t=>t instanceof Wy)}triggerEventHandler(t,e){this.listeners.forEach(n=>{n.name==t&&n.callback(e)})}}function Ky(t){return t.map(t=>t.nativeElement)}class $y{constructor(t){this.nativeNode=t}get parent(){const t=this.nativeNode.parentNode;return t?new Jy(t):null}get injector(){return ic(this.nativeNode)}get componentInstance(){const t=this.nativeNode;return t&&(ec(t)||ac(t))}get context(){return ec(this.nativeNode)||nc(this.nativeNode)}get listeners(){return cc(this.nativeNode).filter(dc)}get references(){return function(t){const e=oc(t);return void 0===e.localRefs&&(e.localRefs=function(t,e){const n=t[1].data[e];if(n&&n.localNames){const e={};let a=n.index+1;for(let r=0;r<n.localNames.length;r+=2)e[n.localNames[r]]=t[a],a++;return e}return null}(e.lView,e.nodeIndex)),e.localRefs||{}}(this.nativeNode)}get providerTokens(){return function(t){const e=oc(t,!1);if(!e)return[];const n=e.lView[1],a=n.data[e.nodeIndex],r=[],i=a.directiveEnd;for(let o=65535&a.providerIndexes;o<i;o++){let t=n.data[o];void 0!==(s=t).type&&void 0!==s.template&&void 0!==s.declaredInputs&&(t=t.type),r.push(t)}var s;return r}(this.nativeNode)}}class Jy extends $y{constructor(t){super(t)}get nativeElement(){return this.nativeNode.nodeType==Node.ELEMENT_NODE?this.nativeNode:null}get name(){return this.nativeElement.nodeName}get properties(){const t=oc(this.nativeNode),e=t.lView,n=e[1].data,a=n[t.nodeIndex],r=function(t,e,n){const a={};let r=function(t,e){let n=t-1,a=e[n];for(;"string"==typeof a&&!Sn(a);)a=e[--n];return n+1}(t.propertyMetadataStartIndex,n);for(;r<t.propertyMetadataEndIndex;){let t,i=n[r];for(;!Sn(i);)t=(t||"")+vn(e[r])+n[r],i=n[++r];t=void 0===t?e[r]:t+=e[r];const s=i.split("�"),o=s[0];o&&(a[o]=s[1]&&s[2]?s[1]+t+s[2]:t),r++}return a}(a,e,n),i=function(t,e,n){const a={};let r=t.directiveEnd,i=n[r];for(;"string"==typeof i;)a[i.split("�")[0]]=e[r],i=n[++r];return a}(a,e,n),s=function(t){const e=t.classes;let n="";for(const a of Object.keys(e))e[a]&&(n=n?n+" "+a:a);return n}(this),o=Object.assign({},r,i);return s&&(o.className=o.className?o.className+" "+s:s),o}get attributes(){const t={},e=this.nativeElement;if(!e)return t;const n=oc(e),a=n.lView[1].data[n.nodeIndex].attrs,r=[];if(a){let e=0;for(;e<a.length;){const n=a[e];if("string"!=typeof n)break;t[n]=a[e+1],r.push(n.toLowerCase()),e+=2}}const i=e.attributes;for(let s=0;s<i.length;s++){const e=i[s];-1===r.indexOf(e.name)&&(t[e.name]=e.value)}return t}get styles(){return Zy(this.nativeElement,!1)}get classes(){return Zy(this.nativeElement,!0)}get childNodes(){const t=this.nativeNode.childNodes,e=[];for(let n=0;n<t.length;n++)e.push(av(t[n]));return e}get children(){const t=this.nativeElement;if(!t)return[];const e=t.children,n=[];for(let a=0;a<e.length;a++)n.push(av(e[a]));return n}query(t){return this.queryAll(t)[0]||null}queryAll(t){const e=[];return Qy(this,t,e,!0),e}queryAllNodes(t){const e=[];return Qy(this,t,e,!1),e}triggerEventHandler(t,e){this.listeners.forEach(n=>{n.name===t&&n.callback(e)})}}function Zy(t,e){if(t){const n=lc(t),a=n.lView,r=a[1].data[n.nodeIndex];return e?Un(r.classes)?new Ti(r.classes,a,!0).values:_i(r.classes):Un(r.styles)?new Ti(r.styles,a,!1).values:_i(r.styles)}return{}}function Qy(t,e,n,a){const r=oc(t.nativeNode);Xy(r.lView[1].data[r.nodeIndex],r.lView,e,n,a,t.nativeNode)}function Xy(t,e,n,a,r,i){const s=me(t,e);if(3===t.type||4===t.type){if(ev(s,n,a,r,i),Xt(t)){const s=xe(t.index,e);s&&s[1].firstChild&&Xy(s[1].firstChild,s,n,a,r,i)}else t.child&&Xy(t.child,e,n,a,r,i),s&&function t(e,n,a,r){const i=e.childNodes,s=i.length;for(let o=0;o<s;o++){const e=i[o],s=rv(e);s&&((r&&s instanceof Jy&&n(s)&&-1===a.indexOf(s)||!r&&n(s)&&-1===a.indexOf(s))&&a.push(s),t(e,n,a,r))}}(s,n,a,r);const o=e[t.index];Zt(o)&&tv(o,n,a,r,i)}else if(0===t.type){const s=e[t.index];ev(s[7],n,a,r,i),tv(s,n,a,r,i)}else if(1===t.type){const s=da(e),o=s[6].projection[t.projection];if(Array.isArray(o))for(let t of o)ev(t,n,a,r,i);else if(o){const t=s[3];Xy(t[1].data[o.index],t,n,a,r,i)}}else t.child&&Xy(t.child,e,n,a,r,i);if(i!==s){const s=2&t.flags?t.projectionNext:t.next;s&&Xy(s,e,n,a,r,i)}}function tv(t,e,n,a,r){for(let i=9;i<t.length;i++){const s=t[i];Xy(s[1].node,s,e,n,a,r)}}function ev(t,e,n,a,r){if(r!==t){const r=rv(t);if(!r)return;(a&&r instanceof Jy&&e(r)&&-1===n.indexOf(r)||!a&&e(r)&&-1===n.indexOf(r))&&n.push(r)}}const nv=new Map;function av(t){return t instanceof Node?(t.hasOwnProperty("__ng_debug__")||(t.__ng_debug__=t.nodeType==Node.ELEMENT_NODE?new Jy(t):new $y(t)),t.__ng_debug__):null}const rv=function(t){return nv.get(t)||null};function iv(t){nv.set(t.nativeNode,t)}const sv=Uy,ov=Wy,uv=Iy(null,"core",[{provide:wm,useValue:"unknown"},{provide:Ay,deps:[Bo]},{provide:by,deps:[]},{provide:Nm,deps:[]}]);function lv(){return Tf}function dv(){return Of}function cv(t){return t?(Lm&&Ip(t),t):Dg}const fv=[{provide:Ey,useClass:Ey,deps:[uy,Nm,Bo,Da,Yc,ym]},{provide:Sg,deps:[uy],useFactory:hv},{provide:ym,useClass:ym,deps:[[new O,mm]]},{provide:Ym,useClass:Ym,deps:[]},_m,{provide:vf,useFactory:lv,deps:[]},{provide:xf,useFactory:dv,deps:[]},{provide:Cm,useFactory:cv,deps:[[new T(Cm),new O,new S]]}];function hv(t){let e=[];return t.onStable.subscribe(()=>{for(;e.length;)e.pop()()}),function(t){e.push(t)}}class gv{constructor(t){}}function pv(t,e,n,a,r,i){t|=1;const{matchedQueries:s,references:o,matchedQueryIds:u}=sh(e);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:t,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:s,matchedQueryIds:u,references:o,ngContentIndex:n,childCount:a,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:i?dh(i):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:r||zf},provider:null,text:null,query:null,ngContent:null}}function bv(t,e,n,a,r,i,s=[],o,u,l,d,c){l||(l=zf);const{matchedQueries:f,references:h,matchedQueryIds:g}=sh(n);let p=null,b=null;i&&([p,b]=mh(i)),o=o||[];const m=new Array(o.length);for(let x=0;x<o.length;x++){const[t,e,n]=o[x],[a,r]=mh(e);let i=void 0,s=void 0;switch(15&t){case 4:s=n;break;case 1:case 8:i=n}m[x]={flags:t,ns:a,name:r,nonMinifiedName:r,securityContext:i,suffix:s}}u=u||[];const y=new Array(u.length);for(let x=0;x<u.length;x++){const[t,e]=u[x];y[x]={type:0,target:t,eventName:e,propName:null}}const v=(s=s||[]).map(([t,e])=>{const[n,a]=mh(t);return[n,a,e]});return c=function(t){if(t&&"$$undefined"===t.id){const e=null!=t.encapsulation&&t.encapsulation!==Ot.None||t.styles.length||Object.keys(t.data).length;t.id=e?"c"+Wf++:"$$empty"}return t&&"$$empty"===t.id&&(t=null),t||null}(c),d&&(e|=33554432),{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e|=1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:g,references:h,ngContentIndex:a,childCount:r,bindings:m,bindingFlags:yh(m),outputs:y,element:{ns:p,name:b,attrs:v,template:null,componentProvider:null,componentView:d||null,componentRendererType:c,publicProviders:null,allProviders:null,handleEvent:l||zf},provider:null,text:null,query:null,ngContent:null}}function mv(t,e,n){const a=n.element,r=t.root.selectorOrNode,i=t.renderer;let s;if(t.parent||!r){s=a.name?i.createElement(a.name,a.ns):i.createComment("");const r=uh(t,e,n);r&&i.appendChild(r,s)}else s=i.selectRootElement(r,!!a.componentRendererType&&a.componentRendererType.encapsulation===Ot.ShadowDom);if(a.attrs)for(let o=0;o<a.attrs.length;o++){const[t,e,n]=a.attrs[o];i.setAttribute(s,e,n,t)}return s}function yv(t,e,n,a){for(let s=0;s<n.outputs.length;s++){const o=n.outputs[s],u=vv(t,n.nodeIndex,(i=o.eventName,(r=o.target)?`${r}:${i}`:i));let l=o.target,d=t;"component"===o.target&&(l=null,d=e);const c=d.renderer.listen(l||a,o.eventName,u);t.disposables[n.outputIndex+s]=c}var r,i}function vv(t,e,n){return a=>Xf(t,e,n,a)}function xv(t,e,n,a){if(!$f(t,e,n,a))return!1;const r=e.bindings[n],i=Mf(t,e.nodeIndex),s=i.renderElement,o=r.name;switch(15&r.flags){case 1:!function(t,e,n,a,r,i){const s=e.securityContext;let o=s?t.root.sanitizer.sanitize(s,i):i;o=null!=o?o.toString():null;const u=t.renderer;null!=i?u.setAttribute(n,r,o,a):u.removeAttribute(n,r,a)}(t,r,s,r.ns,o,a);break;case 2:!function(t,e,n,a){const r=t.renderer;a?r.addClass(e,n):r.removeClass(e,n)}(t,s,o,a);break;case 4:!function(t,e,n,a,r){let i=t.root.sanitizer.sanitize(yr.STYLE,r);if(null!=i){i=i.toString();const t=e.suffix;null!=t&&(i+=t)}else i=null;const s=t.renderer;null!=i?s.setStyle(n,a,i):s.removeStyle(n,a)}(t,r,s,o,a);break;case 8:!function(t,e,n,a,r){const i=e.securityContext;let s=i?t.root.sanitizer.sanitize(i,r):r;t.renderer.setProperty(n,a,s)}(33554432&e.flags&&32&r.flags?i.componentView:t,r,s,o,a)}return!0}function _v(t,e,n){let a=[];for(let r in n)a.push({propName:r,bindingType:n[r]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:e,filterId:ih(e),bindings:a},ngContent:null}}function Tv(t){const e=t.def.nodeMatchedQueries;for(;t.parent&&rh(t);){let n=t.parentNodeDef;t=t.parent;const a=n.nodeIndex+n.childCount;for(let r=0;r<=a;r++){const a=t.def.nodes[r];67108864&a.flags&&536870912&a.flags&&(a.query.filterId&e)===a.query.filterId&&Ff(t,r).setDirty(),!(1&a.flags&&r+a.childCount<n.nodeIndex)&&67108864&a.childFlags&&536870912&a.childFlags||(r+=a.childCount)}}if(134217728&t.def.nodeFlags)for(let n=0;n<t.def.nodes.length;n++){const e=t.def.nodes[n];134217728&e.flags&&536870912&e.flags&&Ff(t,n).setDirty(),n+=e.childCount}}function Ov(t,e){const n=Ff(t,e.nodeIndex);if(!n.dirty)return;let a,r=void 0;if(67108864&e.flags){const n=e.parent.parent;r=wv(t,n.nodeIndex,n.nodeIndex+n.childCount,e.query,[]),a=qf(t,e.parent.nodeIndex).instance}else 134217728&e.flags&&(r=wv(t,0,t.def.nodes.length-1,e.query,[]),a=t.component);n.reset(r);const i=e.query.bindings;let s=!1;for(let o=0;o<i.length;o++){const t=i[o];let e;switch(t.bindingType){case 0:e=n.first;break;case 1:e=n,s=!0}a[t.propName]=e}s&&n.notifyOnChanges()}function wv(t,e,n,a,r){for(let i=e;i<=n;i++){const e=t.def.nodes[i],n=e.matchedQueries[a.id];if(null!=n&&r.push(Sv(t,e,n)),1&e.flags&&e.element.template&&(e.element.template.nodeMatchedQueries&a.filterId)===a.filterId){const n=Mf(t,i);if((e.childMatchedQueries&a.filterId)===a.filterId&&(wv(t,i+1,i+e.childCount,a,r),i+=e.childCount),16777216&e.flags){const t=n.viewContainer._embeddedViews;for(let e=0;e<t.length;e++){const i=t[e],s=th(i);s&&s===n&&wv(i,0,i.def.nodes.length-1,a,r)}}const s=n.template._projectedViews;if(s)for(let t=0;t<s.length;t++){const e=s[t];wv(e,0,e.def.nodes.length-1,a,r)}}(e.childMatchedQueries&a.filterId)!==a.filterId&&(i+=e.childCount)}return r}function Sv(t,e,n){if(null!=n)switch(n){case 1:return Mf(t,e.nodeIndex).renderElement;case 0:return new Kc(Mf(t,e.nodeIndex).renderElement);case 2:return Mf(t,e.nodeIndex).template;case 3:return Mf(t,e.nodeIndex).viewContainer;case 4:return qf(t,e.nodeIndex).instance}}function Iv(t,e){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:e}}}function Nv(t,e,n){const a=uh(t,e,n);a&&hh(t,n.ngContent.index,1,a,null,void 0)}function Cv(t,e){return kv(128,t,new Array(e+1))}function Rv(t,e){return kv(32,t,new Array(e))}function Av(t,e){const n=Object.keys(e),a=n.length,r=new Array(a);for(let i=0;i<a;i++){const t=n[i];r[e[t]]=t}return kv(64,t,r)}function kv(t,e,n){const a=new Array(n.length);for(let r=0;r<n.length;r++){const t=n[r];a[r]={flags:8,name:t,ns:null,nonMinifiedName:t,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:a,bindingFlags:yh(a),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Ev(t,e,n){const a=new Array(n.length-1);for(let r=1;r<n.length;r++)a[r-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[r]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:a,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function Lv(t,e,n){let a;const r=t.renderer;a=r.createText(n.text.prefix);const i=uh(t,e,n);return i&&r.appendChild(i,a),{renderText:a}}function Dv(t,e){return(null!=t?t.toString():"")+e.suffix}function Pv(t,e,n,a){let r=0,i=0,s=0,o=0,u=0,l=null,d=null,c=!1,f=!1,h=null;for(let g=0;g<e.length;g++){const t=e[g];if(t.nodeIndex=g,t.parent=l,t.bindingIndex=r,t.outputIndex=i,t.renderParent=d,s|=t.flags,u|=t.matchedQueryIds,t.element){const e=t.element;e.publicProviders=l?l.element.publicProviders:Object.create(null),e.allProviders=e.publicProviders,c=!1,f=!1,t.element.template&&(u|=t.element.template.nodeMatchedQueries)}if(qv(l,t,e.length),r+=t.bindings.length,i+=t.outputs.length,!d&&3&t.flags&&(h=t),20224&t.flags){c||(c=!0,l.element.publicProviders=Object.create(l.element.publicProviders),l.element.allProviders=l.element.publicProviders);const e=0!=(32768&t.flags);0==(8192&t.flags)||e?l.element.publicProviders[Yf(t.provider.token)]=t:(f||(f=!0,l.element.allProviders=Object.create(l.element.publicProviders)),l.element.allProviders[Yf(t.provider.token)]=t),e&&(l.element.componentProvider=t)}if(l?(l.childFlags|=t.flags,l.directChildFlags|=t.flags,l.childMatchedQueries|=t.matchedQueryIds,t.element&&t.element.template&&(l.childMatchedQueries|=t.element.template.nodeMatchedQueries)):o|=t.flags,t.childCount>0)l=t,Mv(t)||(d=t);else for(;l&&g===l.nodeIndex+l.childCount;){const t=l.parent;t&&(t.childFlags|=l.childFlags,t.childMatchedQueries|=l.childMatchedQueries),l=t,d=l&&Mv(l)?l.renderParent:l}}return{factory:null,nodeFlags:s,rootNodeFlags:o,nodeMatchedQueries:u,flags:t,nodes:e,updateDirectives:n||zf,updateRenderer:a||zf,handleEvent:(t,n,a,r)=>e[n].element.handleEvent(t,a,r),bindingCount:r,outputCount:i,lastRenderRootNode:h}}function Mv(t){return 0!=(1&t.flags)&&null===t.element.name}function qv(t,e,n){const a=e.element&&e.element.template;if(a){if(!a.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(a.lastRenderRootNode&&16777216&a.lastRenderRootNode.flags)throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${e.nodeIndex}!`)}if(20224&e.flags&&0==(1&(t?t.flags:0)))throw new Error(`Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ${e.nodeIndex}!`);if(e.query){if(67108864&e.flags&&(!t||0==(16384&t.flags)))throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${e.nodeIndex}!`);if(134217728&e.flags&&t)throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${e.nodeIndex}!`)}if(e.childCount){const a=t?t.nodeIndex+t.childCount:n-1;if(e.nodeIndex<=a&&e.nodeIndex+e.childCount>a)throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${e.nodeIndex}!`)}}function jv(t,e,n,a){const r=Vv(t.root,t.renderer,t,e,n);return zv(r,t.component,a),Bv(r),r}function Fv(t,e,n){const a=Vv(t,t.renderer,null,null,e);return zv(a,n,n),Bv(a),a}function Gv(t,e,n,a){const r=e.element.componentRendererType;let i;return i=r?t.root.rendererFactory.createRenderer(a,r):t.root.renderer,Vv(t.root,i,t,e.element.componentProvider,n)}function Vv(t,e,n,a,r){const i=new Array(r.nodes.length),s=r.outputCount?new Array(r.outputCount):null;return{def:r,parent:n,viewContainerParent:null,parentNodeDef:a,context:null,component:null,nodes:i,state:13,root:t,renderer:e,oldValues:new Array(r.bindingCount),disposables:s,initIndex:-1}}function zv(t,e,n){t.component=e,t.context=n}function Bv(t){let e;ah(t)&&(e=Mf(t.parent,t.parentNodeDef.parent.nodeIndex).renderElement);const n=t.def,a=t.nodes;for(let r=0;r<n.nodes.length;r++){const i=n.nodes[r];let s;switch(Vf.setCurrentNode(t,r),201347067&i.flags){case 1:const n=mv(t,e,i);let o=void 0;if(33554432&i.flags){const e=dh(i.element.componentView);o=Vf.createComponentView(t,i,e,n)}yv(t,o,i,n),s={renderElement:n,componentView:o,viewContainer:null,template:i.element.template?Yh(t,i):void 0},16777216&i.flags&&(s.viewContainer=Gh(t,i,s));break;case 2:s=Lv(t,e,i);break;case 512:case 1024:case 2048:case 256:s=a[r],s||4096&i.flags||(s={instance:cg(t,i)});break;case 16:s={instance:fg(t,i)};break;case 16384:s=a[r],s||(s={instance:hg(t,i)}),32768&i.flags&&zv(Mf(t,i.parent.nodeIndex).componentView,s.instance,s.instance);break;case 32:case 64:case 128:s={value:void 0};break;case 67108864:case 134217728:s=new nb;break;case 8:Nv(t,e,i),s=void 0}a[r]=s}Qv(t,Zv.CreateViewNodes),nx(t,201326592,268435456,0)}function Yv(t){Wv(t),Vf.updateDirectives(t,1),Xv(t,Zv.CheckNoChanges),Vf.updateRenderer(t,1),Qv(t,Zv.CheckNoChanges),t.state&=-97}function Hv(t){1&t.state?(t.state&=-2,t.state|=2):t.state&=-3,Lf(t,0,256),Wv(t),Vf.updateDirectives(t,0),Xv(t,Zv.CheckAndUpdate),nx(t,67108864,536870912,0);let e=Lf(t,256,512);_g(t,2097152|(e?1048576:0)),Vf.updateRenderer(t,0),Qv(t,Zv.CheckAndUpdate),nx(t,134217728,536870912,0),e=Lf(t,512,768),_g(t,8388608|(e?4194304:0)),2&t.def.flags&&(t.state&=-9),t.state&=-97,Lf(t,768,1024)}function Uv(t,e,n,a,r,i,s,o,u,l,d,c,f){return 0===n?function(t,e,n,a,r,i,s,o,u,l,d,c){switch(201347067&e.flags){case 1:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings.length;let h=!1;return f>0&&xv(t,e,0,n)&&(h=!0),f>1&&xv(t,e,1,a)&&(h=!0),f>2&&xv(t,e,2,r)&&(h=!0),f>3&&xv(t,e,3,i)&&(h=!0),f>4&&xv(t,e,4,s)&&(h=!0),f>5&&xv(t,e,5,o)&&(h=!0),f>6&&xv(t,e,6,u)&&(h=!0),f>7&&xv(t,e,7,l)&&(h=!0),f>8&&xv(t,e,8,d)&&(h=!0),f>9&&xv(t,e,9,c)&&(h=!0),h}(t,e,n,a,r,i,s,o,u,l,d,c);case 2:return function(t,e,n,a,r,i,s,o,u,l,d,c){let f=!1;const h=e.bindings,g=h.length;if(g>0&&$f(t,e,0,n)&&(f=!0),g>1&&$f(t,e,1,a)&&(f=!0),g>2&&$f(t,e,2,r)&&(f=!0),g>3&&$f(t,e,3,i)&&(f=!0),g>4&&$f(t,e,4,s)&&(f=!0),g>5&&$f(t,e,5,o)&&(f=!0),g>6&&$f(t,e,6,u)&&(f=!0),g>7&&$f(t,e,7,l)&&(f=!0),g>8&&$f(t,e,8,d)&&(f=!0),g>9&&$f(t,e,9,c)&&(f=!0),f){let f=e.text.prefix;g>0&&(f+=Dv(n,h[0])),g>1&&(f+=Dv(a,h[1])),g>2&&(f+=Dv(r,h[2])),g>3&&(f+=Dv(i,h[3])),g>4&&(f+=Dv(s,h[4])),g>5&&(f+=Dv(o,h[5])),g>6&&(f+=Dv(u,h[6])),g>7&&(f+=Dv(l,h[7])),g>8&&(f+=Dv(d,h[8])),g>9&&(f+=Dv(c,h[9]));const p=Pf(t,e.nodeIndex).renderText;t.renderer.setValue(p,f)}return f}(t,e,n,a,r,i,s,o,u,l,d,c);case 16384:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=qf(t,e.nodeIndex),h=f.instance;let g=!1,p=void 0;const b=e.bindings.length;return b>0&&Kf(t,e,0,n)&&(g=!0,p=xg(t,f,e,0,n,p)),b>1&&Kf(t,e,1,a)&&(g=!0,p=xg(t,f,e,1,a,p)),b>2&&Kf(t,e,2,r)&&(g=!0,p=xg(t,f,e,2,r,p)),b>3&&Kf(t,e,3,i)&&(g=!0,p=xg(t,f,e,3,i,p)),b>4&&Kf(t,e,4,s)&&(g=!0,p=xg(t,f,e,4,s,p)),b>5&&Kf(t,e,5,o)&&(g=!0,p=xg(t,f,e,5,o,p)),b>6&&Kf(t,e,6,u)&&(g=!0,p=xg(t,f,e,6,u,p)),b>7&&Kf(t,e,7,l)&&(g=!0,p=xg(t,f,e,7,l,p)),b>8&&Kf(t,e,8,d)&&(g=!0,p=xg(t,f,e,8,d,p)),b>9&&Kf(t,e,9,c)&&(g=!0,p=xg(t,f,e,9,c,p)),p&&h.ngOnChanges(p),65536&e.flags&&Df(t,256,e.nodeIndex)&&h.ngOnInit(),262144&e.flags&&h.ngDoCheck(),g}(t,e,n,a,r,i,s,o,u,l,d,c);case 32:case 64:case 128:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings;let h=!1;const g=f.length;if(g>0&&$f(t,e,0,n)&&(h=!0),g>1&&$f(t,e,1,a)&&(h=!0),g>2&&$f(t,e,2,r)&&(h=!0),g>3&&$f(t,e,3,i)&&(h=!0),g>4&&$f(t,e,4,s)&&(h=!0),g>5&&$f(t,e,5,o)&&(h=!0),g>6&&$f(t,e,6,u)&&(h=!0),g>7&&$f(t,e,7,l)&&(h=!0),g>8&&$f(t,e,8,d)&&(h=!0),g>9&&$f(t,e,9,c)&&(h=!0),h){const h=jf(t,e.nodeIndex);let p;switch(201347067&e.flags){case 32:p=new Array(f.length),g>0&&(p[0]=n),g>1&&(p[1]=a),g>2&&(p[2]=r),g>3&&(p[3]=i),g>4&&(p[4]=s),g>5&&(p[5]=o),g>6&&(p[6]=u),g>7&&(p[7]=l),g>8&&(p[8]=d),g>9&&(p[9]=c);break;case 64:p={},g>0&&(p[f[0].name]=n),g>1&&(p[f[1].name]=a),g>2&&(p[f[2].name]=r),g>3&&(p[f[3].name]=i),g>4&&(p[f[4].name]=s),g>5&&(p[f[5].name]=o),g>6&&(p[f[6].name]=u),g>7&&(p[f[7].name]=l),g>8&&(p[f[8].name]=d),g>9&&(p[f[9].name]=c);break;case 128:const t=n;switch(g){case 1:p=t.transform(n);break;case 2:p=t.transform(a);break;case 3:p=t.transform(a,r);break;case 4:p=t.transform(a,r,i);break;case 5:p=t.transform(a,r,i,s);break;case 6:p=t.transform(a,r,i,s,o);break;case 7:p=t.transform(a,r,i,s,o,u);break;case 8:p=t.transform(a,r,i,s,o,u,l);break;case 9:p=t.transform(a,r,i,s,o,u,l,d);break;case 10:p=t.transform(a,r,i,s,o,u,l,d,c)}}h.value=p}return h}(t,e,n,a,r,i,s,o,u,l,d,c);default:throw"unreachable"}}(t,e,a,r,i,s,o,u,l,d,c,f):function(t,e,n){switch(201347067&e.flags){case 1:return function(t,e,n){let a=!1;for(let r=0;r<n.length;r++)xv(t,e,r,n[r])&&(a=!0);return a}(t,e,n);case 2:return function(t,e,n){const a=e.bindings;let r=!1;for(let i=0;i<n.length;i++)$f(t,e,i,n[i])&&(r=!0);if(r){let r="";for(let t=0;t<n.length;t++)r+=Dv(n[t],a[t]);r=e.text.prefix+r;const i=Pf(t,e.nodeIndex).renderText;t.renderer.setValue(i,r)}return r}(t,e,n);case 16384:return function(t,e,n){const a=qf(t,e.nodeIndex),r=a.instance;let i=!1,s=void 0;for(let o=0;o<n.length;o++)Kf(t,e,o,n[o])&&(i=!0,s=xg(t,a,e,o,n[o],s));return s&&r.ngOnChanges(s),65536&e.flags&&Df(t,256,e.nodeIndex)&&r.ngOnInit(),262144&e.flags&&r.ngDoCheck(),i}(t,e,n);case 32:case 64:case 128:return function(t,e,n){const a=e.bindings;let r=!1;for(let i=0;i<n.length;i++)$f(t,e,i,n[i])&&(r=!0);if(r){const r=jf(t,e.nodeIndex);let i;switch(201347067&e.flags){case 32:i=n;break;case 64:i={};for(let r=0;r<n.length;r++)i[a[r].name]=n[r];break;case 128:const t=n[0],e=n.slice(1);i=t.transform(...e)}r.value=i}return r}(t,e,n);default:throw"unreachable"}}(t,e,a)}function Wv(t){const e=t.def;if(4&e.nodeFlags)for(let n=0;n<e.nodes.length;n++){const a=e.nodes[n];if(4&a.flags){const e=Mf(t,n).template._projectedViews;if(e)for(let n=0;n<e.length;n++){const a=e[n];a.state|=32,Qf(a,t)}}else 0==(4&a.childFlags)&&(n+=a.childCount)}}function Kv(t,e,n,a,r,i,s,o,u,l,d,c,f){return 0===n?function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings.length;f>0&&Jf(t,e,0,n),f>1&&Jf(t,e,1,a),f>2&&Jf(t,e,2,r),f>3&&Jf(t,e,3,i),f>4&&Jf(t,e,4,s),f>5&&Jf(t,e,5,o),f>6&&Jf(t,e,6,u),f>7&&Jf(t,e,7,l),f>8&&Jf(t,e,8,d),f>9&&Jf(t,e,9,c)}(t,e,a,r,i,s,o,u,l,d,c,f):function(t,e,n){for(let a=0;a<n.length;a++)Jf(t,e,a,n[a])}(t,e,a),!1}function $v(t,e){if(Ff(t,e.nodeIndex).dirty)throw Af(Vf.createDebugContext(t,e.nodeIndex),`Query ${e.query.id} not dirty`,`Query ${e.query.id} dirty`,0!=(1&t.state))}function Jv(t){if(!(128&t.state)){if(Xv(t,Zv.Destroy),Qv(t,Zv.Destroy),_g(t,131072),t.disposables)for(let e=0;e<t.disposables.length;e++)t.disposables[e]();!function(t){if(!(16&t.state))return;const e=th(t);if(e){const n=e.template._projectedViews;n&&(yt(n,n.indexOf(t)),Vf.dirtyParentQueries(t))}}(t),t.renderer.destroyNode&&function(t){const e=t.def.nodes.length;for(let n=0;n<e;n++){const e=t.def.nodes[n];1&e.flags?t.renderer.destroyNode(Mf(t,n).renderElement):2&e.flags?t.renderer.destroyNode(Pf(t,n).renderText):(67108864&e.flags||134217728&e.flags)&&Ff(t,n).destroy()}}(t),ah(t)&&t.renderer.destroy(),t.state|=128}}const Zv=function(){var t={CreateViewNodes:0,CheckNoChanges:1,CheckNoChangesProjectedViews:2,CheckAndUpdate:3,CheckAndUpdateProjectedViews:4,Destroy:5};return t[t.CreateViewNodes]="CreateViewNodes",t[t.CheckNoChanges]="CheckNoChanges",t[t.CheckNoChangesProjectedViews]="CheckNoChangesProjectedViews",t[t.CheckAndUpdate]="CheckAndUpdate",t[t.CheckAndUpdateProjectedViews]="CheckAndUpdateProjectedViews",t[t.Destroy]="Destroy",t}();function Qv(t,e){const n=t.def;if(33554432&n.nodeFlags)for(let a=0;a<n.nodes.length;a++){const r=n.nodes[a];33554432&r.flags?tx(Mf(t,a).componentView,e):0==(33554432&r.childFlags)&&(a+=r.childCount)}}function Xv(t,e){const n=t.def;if(16777216&n.nodeFlags)for(let a=0;a<n.nodes.length;a++){const r=n.nodes[a];if(16777216&r.flags){const n=Mf(t,a).viewContainer._embeddedViews;for(let t=0;t<n.length;t++)tx(n[t],e)}else 0==(16777216&r.childFlags)&&(a+=r.childCount)}}function tx(t,e){const n=t.state;switch(e){case Zv.CheckNoChanges:0==(128&n)&&(12==(12&n)?Yv(t):64&n&&ex(t,Zv.CheckNoChangesProjectedViews));break;case Zv.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?Yv(t):64&n&&ex(t,e));break;case Zv.CheckAndUpdate:0==(128&n)&&(12==(12&n)?Hv(t):64&n&&ex(t,Zv.CheckAndUpdateProjectedViews));break;case Zv.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?Hv(t):64&n&&ex(t,e));break;case Zv.Destroy:Jv(t);break;case Zv.CreateViewNodes:Bv(t)}}function ex(t,e){Xv(t,e),Qv(t,e)}function nx(t,e,n,a){if(!(t.def.nodeFlags&e&&t.def.nodeFlags&n))return;const r=t.def.nodes.length;for(let i=0;i<r;i++){const r=t.def.nodes[i];if(r.flags&e&&r.flags&n)switch(Vf.setCurrentNode(t,r.nodeIndex),a){case 0:Ov(t,r);break;case 1:$v(t,r)}r.childFlags&e&&r.childFlags&n||(i+=r.childCount)}}let ax=!1;function rx(){if(ax)return;ax=!0;const t=Wa()?{setCurrentNode:Nx,createRootView:sx,createEmbeddedView:ux,createComponentView:lx,createNgModuleRef:dx,overrideProvider:gx,overrideComponentView:px,clearOverrides:bx,checkAndUpdateView:xx,checkNoChangesView:_x,destroyView:Tx,createDebugContext:(t,e)=>new Px(t,e),handleEvent:Cx,updateDirectives:Rx,updateRenderer:Ax}:{setCurrentNode:()=>{},createRootView:ix,createEmbeddedView:jv,createComponentView:Gv,createNgModuleRef:Zh,overrideProvider:zf,overrideComponentView:zf,clearOverrides:zf,checkAndUpdateView:Hv,checkNoChangesView:Yv,destroyView:Jv,createDebugContext:(t,e)=>new Px(t,e),handleEvent:(t,e,n,a)=>t.def.handleEvent(t,e,n,a),updateDirectives:(t,e)=>t.def.updateDirectives(0===e?yx:vx,t),updateRenderer:(t,e)=>t.def.updateRenderer(0===e?yx:vx,t)};Vf.setCurrentNode=t.setCurrentNode,Vf.createRootView=t.createRootView,Vf.createEmbeddedView=t.createEmbeddedView,Vf.createComponentView=t.createComponentView,Vf.createNgModuleRef=t.createNgModuleRef,Vf.overrideProvider=t.overrideProvider,Vf.overrideComponentView=t.overrideComponentView,Vf.clearOverrides=t.clearOverrides,Vf.checkAndUpdateView=t.checkAndUpdateView,Vf.checkNoChangesView=t.checkNoChangesView,Vf.destroyView=t.destroyView,Vf.resolveDep=yg,Vf.createDebugContext=t.createDebugContext,Vf.handleEvent=t.handleEvent,Vf.updateDirectives=t.updateDirectives,Vf.updateRenderer=t.updateRenderer,Vf.dirtyParentQueries=Tv}function ix(t,e,n,a,r,i){const s=r.injector.get(ef);return Fv(ox(t,r,s,e,n),a,i)}function sx(t,e,n,a,r,i){const s=r.injector.get(ef),o=ox(t,r,new Fx(s),e,n),u=mx(a);return qx(Ox.create,Fv,null,[o,u,i])}function ox(t,e,n,a,r){const i=e.injector.get(vr),s=e.injector.get(Da),o=n.createRenderer(null,null);return{ngModule:e,injector:t,projectableNodes:a,selectorOrNode:r,sanitizer:i,rendererFactory:n,renderer:o,errorHandler:s}}function ux(t,e,n,a){const r=mx(n);return qx(Ox.create,jv,null,[t,e,r,a])}function lx(t,e,n,a){return n=hx.get(e.element.componentProvider.provider.token)||mx(n),qx(Ox.create,Gv,null,[t,e,n,a])}function dx(t,e,n,a){return Zh(t,e,n,function(t){const{hasOverrides:e,hasDeprecatedOverrides:n}=function(t){let e=!1,n=!1;return 0===cx.size||(t.providers.forEach(t=>{const a=cx.get(t.token);3840&t.flags&&a&&(e=!0,n=n||a.deprecatedBehavior)}),t.modules.forEach(t=>{fx.forEach((a,r)=>{D(r).providedIn===t&&(e=!0,n=n||a.deprecatedBehavior)})})),{hasOverrides:e,hasDeprecatedOverrides:n}}(t);return e?(function(t){for(let e=0;e<t.providers.length;e++){const a=t.providers[e];n&&(a.flags|=4096);const r=cx.get(a.token);r&&(a.flags=-3841&a.flags|r.flags,a.deps=oh(r.deps),a.value=r.value)}if(fx.size>0){let e=new Set(t.modules);fx.forEach((a,r)=>{if(e.has(D(r).providedIn)){let e={token:r,flags:a.flags|(n?4096:0),deps:oh(a.deps),value:a.value,index:t.providers.length};t.providers.push(e),t.providersByKey[Yf(r)]=e}})}}(t=t.factory(()=>zf)),t):t}(a))}const cx=new Map,fx=new Map,hx=new Map;function gx(t){let e;cx.set(t.token,t),"function"==typeof t.token&&(e=D(t.token))&&"function"==typeof e.providedIn&&fx.set(t.token,t)}function px(t,e){const n=dh(qh(e)),a=dh(n.nodes[0].element.componentView);hx.set(t,a)}function bx(){cx.clear(),fx.clear(),hx.clear()}function mx(t){if(0===cx.size)return t;const e=function(t){const e=[];let n=null;for(let a=0;a<t.nodes.length;a++){const r=t.nodes[a];1&r.flags&&(n=r),n&&3840&r.flags&&cx.has(r.provider.token)&&(e.push(n.nodeIndex),n=null)}return e}(t);if(0===e.length)return t;t=t.factory(()=>zf);for(let a=0;a<e.length;a++)n(t,e[a]);return t;function n(t,e){for(let n=e+1;n<t.nodes.length;n++){const e=t.nodes[n];if(1&e.flags)return;if(3840&e.flags){const t=e.provider,n=cx.get(t.token);n&&(e.flags=-3841&e.flags|n.flags,t.deps=oh(n.deps),t.value=n.value)}}}}function yx(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=t.def.nodes[e];return Uv(t,h,n,a,r,i,s,o,u,l,d,c,f),224&h.flags?jf(t,e).value:void 0}function vx(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=t.def.nodes[e];return Kv(t,h,n,a,r,i,s,o,u,l,d,c,f),224&h.flags?jf(t,e).value:void 0}function xx(t){return qx(Ox.detectChanges,Hv,null,[t])}function _x(t){return qx(Ox.checkNoChanges,Yv,null,[t])}function Tx(t){return qx(Ox.destroy,Jv,null,[t])}const Ox=function(){var t={create:0,detectChanges:1,checkNoChanges:2,destroy:3,handleEvent:4};return t[t.create]="create",t[t.detectChanges]="detectChanges",t[t.checkNoChanges]="checkNoChanges",t[t.destroy]="destroy",t[t.handleEvent]="handleEvent",t}();let wx,Sx,Ix;function Nx(t,e){Sx=t,Ix=e}function Cx(t,e,n,a){return Nx(t,e),qx(Ox.handleEvent,t.def.handleEvent,null,[t,e,n,a])}function Rx(t,e){if(128&t.state)throw Ef(Ox[wx]);return Nx(t,Lx(t,0)),t.def.updateDirectives((function(t,n,a,...r){const i=t.def.nodes[n];return 0===e?kx(t,i,a,r):Ex(t,i,a,r),16384&i.flags&&Nx(t,Lx(t,n)),224&i.flags?jf(t,i.nodeIndex).value:void 0}),t)}function Ax(t,e){if(128&t.state)throw Ef(Ox[wx]);return Nx(t,Dx(t,0)),t.def.updateRenderer((function(t,n,a,...r){const i=t.def.nodes[n];return 0===e?kx(t,i,a,r):Ex(t,i,a,r),3&i.flags&&Nx(t,Dx(t,n)),224&i.flags?jf(t,i.nodeIndex).value:void 0}),t)}function kx(t,e,n,a){if(Uv(t,e,n,...a)){const i=1===n?a[0]:a;if(16384&e.flags){const n={};for(let t=0;t<e.bindings.length;t++){const a=e.bindings[t],s=i[t];8&a.flags&&(n[(r=a.nonMinifiedName,"ng-reflect-"+r.replace(/[$@]/g,"_").replace(Er,(...t)=>"-"+t[1].toLowerCase()))]=Lr(s))}const a=e.parent,s=Mf(t,a.nodeIndex).renderElement;if(a.element.name)for(let e in n){const a=n[e];null!=a?t.renderer.setAttribute(s,e,a):t.renderer.removeAttribute(s,e)}else t.renderer.setValue(s,"bindings="+JSON.stringify(n,null,2))}}var r}function Ex(t,e,n,a){Kv(t,e,n,...a)}function Lx(t,e){for(let n=e;n<t.def.nodes.length;n++){const e=t.def.nodes[n];if(16384&e.flags&&e.bindings&&e.bindings.length)return n}return null}function Dx(t,e){for(let n=e;n<t.def.nodes.length;n++){const e=t.def.nodes[n];if(3&e.flags&&e.bindings&&e.bindings.length)return n}return null}class Px{constructor(t,e){this.view=t,this.nodeIndex=e,null==e&&(this.nodeIndex=e=0),this.nodeDef=t.def.nodes[e];let n=this.nodeDef,a=t;for(;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&a;)n=eh(a),a=a.parent;this.elDef=n,this.elView=a}get elOrCompView(){return Mf(this.elView,this.elDef.nodeIndex).componentView||this.view}get injector(){return Uh(this.elView,this.elDef)}get component(){return this.elOrCompView.component}get context(){return this.elOrCompView.context}get providerTokens(){const t=[];if(this.elDef)for(let e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){const n=this.elView.def.nodes[e];20224&n.flags&&t.push(n.provider.token),e+=n.childCount}return t}get references(){const t={};if(this.elDef){Mx(this.elView,this.elDef,t);for(let e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){const n=this.elView.def.nodes[e];20224&n.flags&&Mx(this.elView,n,t),e+=n.childCount}}return t}get componentRenderElement(){const t=function(t){for(;t&&!ah(t);)t=t.parent;return t.parent?Mf(t.parent,eh(t).nodeIndex):null}(this.elOrCompView);return t?t.renderElement:void 0}get renderNode(){return 2&this.nodeDef.flags?nh(this.view,this.nodeDef):nh(this.elView,this.elDef)}logError(t,...e){let n,a;2&this.nodeDef.flags?(n=this.view.def,a=this.nodeDef.nodeIndex):(n=this.elView.def,a=this.elDef.nodeIndex);const r=function(t,e){let n=-1;for(let a=0;a<=e;a++)3&t.nodes[a].flags&&n++;return n}(n,a);let i=-1;n.factory(()=>(i++,i===r?t.error.bind(t,...e):zf)),i<r&&(t.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),t.error(...e))}}function Mx(t,e,n){for(let a in e.references)n[a]=Sv(t,e,e.references[a])}function qx(t,e,n,a){const r=wx,i=Sx,s=Ix;try{wx=t;const o=e.apply(n,a);return Sx=i,Ix=s,wx=r,o}catch(o){if(ka(o)||!Sx)throw o;throw function(t,e){return t instanceof Error||(t=new Error(t.toString())),kf(t,e),t}(o,jx())}}function jx(){return Sx?new Px(Sx,Ix):null}class Fx{constructor(t){this.delegate=t}createRenderer(t,e){return new Gx(this.delegate.createRenderer(t,e))}begin(){this.delegate.begin&&this.delegate.begin()}end(){this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)}}class Gx{constructor(t){this.delegate=t,this.debugContextFactory=jx,this.data=this.delegate.data}createDebugContext(t){return this.debugContextFactory(t)}destroyNode(t){const e=rv(t);!function(t){nv.delete(t.nativeNode)}(e),e instanceof Uy&&(e.listeners.length=0),this.delegate.destroyNode&&this.delegate.destroyNode(t)}destroy(){this.delegate.destroy()}createElement(t,e){const n=this.delegate.createElement(t,e),a=this.createDebugContext(n);if(a){const e=new Wy(n,null,a);e.name=t,iv(e)}return n}createComment(t){const e=this.delegate.createComment(t),n=this.createDebugContext(e);return n&&iv(new Uy(e,null,n)),e}createText(t){const e=this.delegate.createText(t),n=this.createDebugContext(e);return n&&iv(new Uy(e,null,n)),e}appendChild(t,e){const n=rv(t),a=rv(e);n&&a&&n instanceof Wy&&n.addChild(a),this.delegate.appendChild(t,e)}insertBefore(t,e,n){const a=rv(t),r=rv(e),i=rv(n);a&&r&&a instanceof Wy&&a.insertBefore(i,r),this.delegate.insertBefore(t,e,n)}removeChild(t,e){const n=rv(t),a=rv(e);n&&a&&n instanceof Wy&&n.removeChild(a),this.delegate.removeChild(t,e)}selectRootElement(t,e){const n=this.delegate.selectRootElement(t,e),a=jx();return a&&iv(new Wy(n,null,a)),n}setAttribute(t,e,n,a){const r=rv(t);r&&r instanceof Wy&&(r.attributes[a?a+":"+e:e]=n),this.delegate.setAttribute(t,e,n,a)}removeAttribute(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.attributes[n?n+":"+e:e]=null),this.delegate.removeAttribute(t,e,n)}addClass(t,e){const n=rv(t);n&&n instanceof Wy&&(n.classes[e]=!0),this.delegate.addClass(t,e)}removeClass(t,e){const n=rv(t);n&&n instanceof Wy&&(n.classes[e]=!1),this.delegate.removeClass(t,e)}setStyle(t,e,n,a){const r=rv(t);r&&r instanceof Wy&&(r.styles[e]=n),this.delegate.setStyle(t,e,n,a)}removeStyle(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.styles[e]=null),this.delegate.removeStyle(t,e,n)}setProperty(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.properties[e]=n),this.delegate.setProperty(t,e,n)}listen(t,e,n){if("string"!=typeof t){const a=rv(t);a&&a.listeners.push(new Hy(e,n))}return this.delegate.listen(t,e,n)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setValue(t,e){return this.delegate.setValue(t,e)}}function Vx(t){return rx(),Vf.overrideProvider(t)}function zx(t,e){return rx(),Vf.overrideComponentView(t,e)}function Bx(){return rx(),Vf.clearOverrides()}function Yx(t,e,n){return new Hx(t,e,n)}class Hx extends ht{constructor(t,e,n){super(),this.moduleType=t,this._bootstrapComponents=e,this._ngModuleDefFactory=n}create(t){rx();const e=function(t){const e=Array.from(t.providers),n=Array.from(t.modules),a={};for(const r in t.providersByKey)a[r]=t.providersByKey[r];return{factory:t.factory,isRoot:t.isRoot,providers:e,modules:n,providersByKey:a}}(dh(this._ngModuleDefFactory));return Vf.createNgModuleRef(this.moduleType,t||Bo.NULL,this._bootstrapComponents,e)}}},"8YOa":function(t,e,n){var a=n("0BK2"),r=n("hh1v"),i=n("UTVS"),s=n("m/L8").f,o=n("kOOl"),u=n("uy83"),l=o("meta"),d=0,c=Object.isExtensible||function(){return!0},f=function(t){s(t,l,{value:{objectID:"O"+ ++d,weakData:{}}})},h=t.exports={REQUIRED:!1,fastKey:function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,l)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[l].objectID},getWeakData:function(t,e){if(!i(t,l)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[l].weakData},onFreeze:function(t){return u&&h.REQUIRED&&c(t)&&!i(t,l)&&f(t),t}};a[l]=!0},"8a/S":function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},"8j5A":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="it-IT">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Attiva/Disattiva barra di navigazione</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dashboard</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Servizi</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configurazione</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mappa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Moduli Manager</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Log</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blocco</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Immagini</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Esecuzione della copia speculare</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI </target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>File system</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Utenti</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartimenti</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Selezionare una lingua</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Caricamento pannello dati in corso...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Selezione ora di Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Impostazioni di ripristino</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Indietro</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Non è stato possibile caricare i dati.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>selezionato</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>trovato</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>totale</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nome</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descrizione</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descrizione lunga</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Default</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Default del daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valori</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Salva</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visualizzatore mappa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Caricamento in corso...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nome host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Questo campo è obbligatorio.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sì.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Annulla</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Chiudi</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Elenco degli host</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Prestazioni complessive</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nessuna voce trovata</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Log dei cluster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Log delle revisioni</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Caricamento della configurazione in corso...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Impossibile caricare la configurazione.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Modifica modulo Manager</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Il valore immesso non è un UUID valido, ad es.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Il valore immesso deve essere un indirizzo IP valido.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Il valore immesso deve essere un numero.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Il valore immesso deve essere un numero o un decimale.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aggiorna</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID cluster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>mappa mon modificata</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>epoca mappa mon</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con richiesta</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon richiesto</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Nel quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Non nel quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Aggiungi</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funzioni</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flag OSD in tutto il cluster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Invia</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avanzate...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorità di recupero OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorità</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizza valori di priorità</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Questo campo è obbligatorio.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Il valore deve essere compreso tra 0 e 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ripesa</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Elenco degli OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valore</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Modifica</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Elimina</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiche</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Client</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Può accedere qualsiasi client</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Indirizzi</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo obbligatorio</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Deve contenere uno o più valori delimitati da virgole</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Ad esempio:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo di accesso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Esegui squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Aggiungi client</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Nessun cluster disponibile --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Selezionare il cluster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Aggiungi daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend di storage</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Nessun pool di dati disponibile --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Selezionare il backend di storage --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Utente Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Nessun utente disponibile --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Selezionare l\'utente Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID utente CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Nessun client disponibile --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Selezionare il client Cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nome CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etichetta di sicurezza</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Abilita etichetta di sicurezza</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Percorso CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Il percorso deve iniziare con una barra \'/\' e può essere seguito da una parola</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Viene creata la nuova directory</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Percorso</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Il percorso può essere solo una singola barra \'/\' o parola</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Viene creato il nuovo compartimento</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocollo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>I client non possono montare le sottodirectory (ad es. se Tag = foo, il client non può montare foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Utilizzando diverse opzioni Tag, è possibile esportare più volte lo stesso percorso.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Utilizzando diverse opzioni Pseudo, è possibile esportare più volte lo stesso percorso.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Nessun tipo di accesso disponibile --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Selezionare il tipo di accesso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Nessuno squash disponibile --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>--Selezionare il tipo di squash dell\'ID utente da eseguire --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocollo di trasporto</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Benvenuto in Ceph.</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nome utente necessario</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Password richiesta</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Login</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Spiacenti, l\'utente non esiste in Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Non consentito</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Spiacenti, non è consentito visualizzare ciò che si stava cercando.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configurazione RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Rimuovere il valore della configurazione locale. Al suo posto verrà ereditato e utilizzato il valore della configurazione superiore.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Il valore minimo è 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Elenco dei pool</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Il nome può contenere solo caratteri alfanumerici, trattini e caratteri di sottolineatura.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Il nome del profilo del codice di cancellazione selezionato è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Porzioni di dati (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Deve essere uguale o maggiore di 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Porzioni di codice (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Deve essere uguale o maggiore di 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Stima durata (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Località (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Dominio di errore Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Località Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nessuno</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Tecnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Dimensione del pacchetto</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Radice Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe dispositivo Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>qualsiasi</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Directory</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nome...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Il nome del pool Ceph scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo di pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Selezionare un tipo di pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Gruppi di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>È necessario almeno un gruppo di posizionamento.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Il cluster non può gestire questo numero eccessivo di gruppi di posizionamento. Ricalcolare il numero di gruppi di posizionamento necessari.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Guida per il calcolo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Dimensioni replicate</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flag</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sovrascritture EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Applicazioni</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profilo del codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Nessun profilo del codice di cancellazione disponibile --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Selezionare un profilo del codice di cancellazione --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Set di regole Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Selezionare una regola Crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regola Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Passaggi Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compressione</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modalità</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Nessun algoritmo di compressione della cancellazione disponibile --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Dimensioni minime del blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>ad es. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Il valore deve essere maggiore di 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Dimensioni massime del blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>ad es. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Il valore deve essere maggiore delle dimensioni minime del blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rapporto</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rapporto di compressione</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Il valore deve essere compreso tra 0,0 e 1,0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ad es. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Dettagli</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Dettagli sulle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Dettagli livelli cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Sposta un\'immagine nel cestino</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protezione scade alle</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NON PROTETTO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato data errato. Utilizzare "AAAA-MM-GG HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protezione è già scaduta. Selezionare una data futura o lasciarla vuota.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Sposta immagine</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Panoramica</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinazioni</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticazione rilevazione</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Utente</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>I nomi utente devono avere una lunghezza compresa tra 8 e 64 caratteri e\n              possono contenere solo lettere, \'.\', \'@\', \'-\', \'_\' o \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Password</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Utente reciproco</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Password reciproca</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informazioni disponibili:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinazioni iSCSI non disponibili</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool di dati</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Creato</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Dimensioni</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Oggetti</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Dimensioni oggetto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Soggetto al provisioning</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/D</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Totale soggetto al provisioning</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unità di striping</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Conteggio di striping</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Superiore</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefisso nome blocco</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Ordine</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshot</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Immagine</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Questa impostazione sostituisce il valore globale</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globale</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Questo è il valore globale. Nessun valore di opzione è stato impostato per questa immagine.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' e \'@\' non sono consentiti.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Nessun pool rbd disponibile --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Selezionare un pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Utilizza un pool di dati dedicato</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool di dati</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool dedicato che archivia i dati oggetto dell\'RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>È necessario aumentare le dimensioni.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avanzate</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Striping</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unità di striping</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Selezionare l\'unità di striping --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Questo campo è obbligatorio perché è specificato il numero di striping.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>L\'unità di striping è maggiore delle dimensioni dell\'oggetto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Numero di striping</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Questo campo è obbligatorio perché è specificata l\'unità di striping.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Il numero di striping deve essere maggiore di 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Si sta per eseguire il rollback</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Elimina definitivamente contenuto del cestino</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tutto</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nome pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Ripristina immagine</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Per ripristinare,</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>digitare il nuovo nome dell\'immagine e fare clic su</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nuovo nome</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Scaduto alle</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protetto fino alle</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Di solito non è necessario modificare questi parametri rispetto ai valori di default.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Impostazioni</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Conferma</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Impostazioni avanzate</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN di destinazione</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN contiene un modello errato.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Ad esempio: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Ulteriori informazioni</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Questa destinazione contiene impostazioni avanzate modificate.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portali</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Aggiungi portale</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Questa immagine contiene impostazioni modificate.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Aggiungi immagine</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticazione ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniziatori</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniziatore</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN client</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>L\'IQN dell\'iniziatore deve essere univoco.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>I nomi utente devono avere una lunghezza compresa tra 8 e 64 caratteri e\n                        possono contenere solo lettere, \'.\', \'@\', \'-\', \'_\' o \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>L\'iniziatore appartiene a un gruppo. Le immagini verranno configurate nel gruppo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nessun elemento aggiunto.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Aggiungi iniziatore</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Gruppi</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Gruppo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Aggiungi gruppo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Cestino</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemi</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizzazione in corso</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Pronto</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Modifica modalità speculare per il pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>È necessario rimuovere i cluster peer prima di disabilitare la copia speculare.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nome cluster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Il nome del cluster non è valido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>L\'ID CephX non è valido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Indirizzi dei monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Indirizzi con valori delimitati da virgole...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>L\'indirizzo del monitor non è valido.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Chiave CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Chiave con codifica Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La chiave CephX deve essere con codifica Base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Contatori delle prestazioni non disponibili</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Elenco dei daemon</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contatori delle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Caricamento dati compartimento in corso...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Il valore non è valido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Il nome scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Proprietario</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Selezionare un utente --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Abilitato</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo di indice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regola di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Contrassegno</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Contrassegno massimo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versione</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versione master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Ora di modifica</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Gruppo di zone</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Quota compartimenti</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Dimensioni massime</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Illimitato</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Numero massimo di oggetti</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nome utente</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Selezionare un nome utente --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Generazione automatica chiave</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Chiave di accesso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Chiave segreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nome completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Indirizzo e-mail</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Sospeso</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Numero massimo di compartimenti</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Sottoutenti</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Capacità</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Quota utenti</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostra</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Chiavi</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Selezionare un tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Autorizzazione</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Selezionare un\'autorizzazione --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Sottoutente</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>L\'ID del sottoutente scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lettura, scrittura</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>pieno</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Chiave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Generazione automatica segreto</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Caricamento dati utente in corso...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Impossibile caricare i dati utente.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>L\'ID utente scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Non è un indirizzo e-mail valido.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>L\'indirizzo e-mail scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Numero max. di compartimenti</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Disabilitato</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizzato</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Chiave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Non esistono sottoutenti.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Non esistono chiavi.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Non esistono capacità.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Dimensioni illimitate</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Dimensione max.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Oggetti illimitati</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Numero max. di oggetti</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Il valore immesso deve essere &gt;= a 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descrizione...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Autorizzazioni</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Ruoli</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Conferma password</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>La password di conferma non corrisponde alla password.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>E-mail non valida.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Si stanno per rimuovere le autorizzazioni di "lettura/aggiornamento utente" dal proprio utente.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Se si continua, non è più possibile aggiungere o rimuovere ruoli da qualsiasi utente.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Continuare?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Guida</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentazione</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Informazioni su</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Impostazioni del dashboard</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestione utenti</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Utente connesso</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Disconnetti</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attributi (mappa OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadati non disponibili</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadati</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contatore delle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Scritture</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Letture</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Istogramma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valori attuali</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origine</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Livello</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Può essere aggiornato al runtime (modificabile)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tag</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valori di enumerazione</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Vedere anche</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Stato del cluster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manager Daemon</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Server di metadati</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI Gateway</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS client</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Velocità effettiva client</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lettura/scrittura client</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Velocità effettiva di recupero</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Pulitura</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Prestazioni</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacità di base</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Gruppi di posizionamento per OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Stato gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacità</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Classificazioni</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Attuale</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticazione rilevazione aggiornata</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Non sono disponibili pool.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Non sono disponibili immagini.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Non sono disponibili immagini. Assicurarsi di aggiungere un\'immagine alla destinazione.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Non sono disponibili iniziatori. Assicurarsi di aggiungere un iniziatore alla destinazione.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destinazione</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Byte letti</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Byte scritti</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operazioni di lettura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operazioni di scrittura</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O da</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Istanza</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Avanzamento</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Modalità di modifica</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Aggiungi peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Modifica peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Elimina peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Sequenza iniziale</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Locale</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Remoto</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>peer copia speculare</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Chiave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Appiattimento profondo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Su strati</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Blocco esclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mappa oggetti (richiede il blocco escluso)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journaling (richiede il blocco esclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NON PROTETTO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Esegui rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Eliminato alle</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stato</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versione</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>root</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemon in standby</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Classificazione</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Task</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentry</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Utilizzo</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aggiornato</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>È possibile aggiornare il valore al runtime.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>I daemon/client non estraggono questo valore dal\n      database della configurazione di monitoraggio. Non è consentito impostare questa opzione tramite \'ceph config\n      set ...\'. È necessario configurare questa opzione tramite ceph.conf o dalla\n      riga di comando.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>L\'opzione diventa attiva solo all\'avvio del daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>L\'opzione interessa solo la creazione del cluster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>L\'opzione interessa solo la creazione del daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Servizio</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valore attuale</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Modificabile</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Abilita</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Disabilita</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Riconnessione in corso. Attendere.</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Indirizzo pubblico</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessioni aperte</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Nessuno in entrata</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Gli OSD che sono stati contrassegnati come disattivi in precedenza non verranno contrassegnati nuovamente come attivi all\'avvio</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Nessuno in uscita</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Gli OSD non verranno disattivati automaticamente dopo l\'intervallo configurato</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Nessuno attivo</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Non è consentito l\'avvio degli OSD</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Nessuno disattivo</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>I rapporti di errore degli OSD vengono ignorati in modo che i monitor non disattivino gli OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Sospendi</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Sospende le operazioni di lettura e scrittura</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nessuna pulitura</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Pulitura disabilitata</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nessun pulitura approfondita</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Pulitura approfondita disabilitata</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Nessuna operazione di recupero</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Recupero dei gruppi di posizionamento sospeso</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Nessun recupero</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Recupero dei gruppi di posizionamento sospeso</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Ordinamento bitwise</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usa ordinamento bitwise</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdir eliminate definitivamente</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Gli OSD contengono set di snap convertiti</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Eliminazioni recuperi</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Eliminazioni eseguite durante il recupero invece del peering</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite rigido log gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Inserisce un limite rigido alla lunghezza del log del gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flag OSD aggiornati</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>esterno</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>interno</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>in basso</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Contrassegna</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perso</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>contrassegnato come perso</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>elimina</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Gruppi di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Byte letti</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Byte scritti</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operazioni di lettura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operazioni di scrittura</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Numero max di recuperi informazioni</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Numero max di recuperi attivi</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Avvio singolo numero max di recuperi</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Sospensione recupero</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Lavoro</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravità</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Avviato</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Utilizzato</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispon.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Pulisci</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>In funzione</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Avviso</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Sconosciuto</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>su</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>nessun file system</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>attivo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/d</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon attivo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target> quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Il servizio NFS Ganesha non è configurato.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Trasporto</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Utente CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>File system CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(ereditato dalla configurazione globale)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>importato dalla configurazione globale</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Selezionare il tipo di squash dell\'ID utente che viene eseguito --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Non vi sono daemon disponibili.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modalità cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Numero minimo di giorni per la rimozione</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Numero minimo di giorni per la cancellazione</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Numero max di byte di destinazione</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Numero max di oggetti di destinazione</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Non sono state aggiunte applicazioni.</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Raggiunto il limite di applicazioni</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Un pool può contenere solo fino a quattro definizioni delle applicazioni.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caratteri consentiti \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La lunghezza massima è di 128 caratteri</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtra o aggiungi applicazioni</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Aggiungi applicazione</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profilo del codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Dimensioni della replica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Ultima modifica</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profilo con codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Set di regole Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartimento</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartimenti</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>utente</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>utenti</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Ambito</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lettura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Crea</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Ruolo di sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Aggiorna utente</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continua</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Si è stati automaticamente disconnessi perché i ruoli sono stati modificati.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Ogni oggetto è suddiviso in porzioni di dati, ciascuna delle quali è memorizzata su un diverso OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcola le porzioni di codice relative a ciascun oggetto e le memorizza su diversi OSD.\n      Il numero di porzioni di codice è anche il numero degli OSD che è possibile disattivare senza perdere i dati.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Il plugin jerasure è il plugin più generico e flessibile,\n          ed è anche il plugin di default dei pool con codice di cancellazione di Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La tecnica più flessibile è reed_sol_van: è sufficiente impostare k\n          ed m. La tecnica cauchy_good può essere più rapida ma occorre selezionare attentamente la dimensione del\n          pacchetto. reed_sol_r6_op, liberation, blaum_roth, liber8tion sono tutti equivalenti a RAID6,\n          nel senso che è possibile configurarli solo con m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>La codifica viene eseguita su pacchetti di dimensioni in byte, uno alla volta.\n          È difficile scegliere la dimensione del pacchetto corretta.\n          La documentazione su jerasure fornisce informazioni esaustive su questo argomento.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Con il plugin di jerasure, quando un oggetto con codice di cancellazione viene memorizzato su\n          più OSD, il recupero della perdita di un OSD richiede la lettura di tutti gli altri.\n          Ad esempio, se jerasure è configurato con k=8 e m=4, la perdita di un OSD richiede la lettura\n          degli altri undici per il ripristino.\n\n          Il plugin del codice di cancellazione lrc crea porzioni di parità locali che è possibile recuperare utilizzando un\n          minor numero di OSD. Ad esempio, se lrc è configurato con k=8, m=4 e l=4, crea\n          una porzione di parità aggiuntiva ogni quattro OSD. Quando si perde un singolo OSD, è possibile\n          recuperarlo solo con quattro OSD invece che con undici.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Raggruppa le porzioni di codice e dati in set di località dimensione. Ad esempio,\n          per k=4 e m=2, se località=3 vengono creati due gruppi su tre. È possibile recuperare ciascun set\n          senza leggere le porzioni di un altro set.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Il tipo di compartimento Crush in cui viene memorizzato ciascun set di porzioni definito\n          dall\'utente. Ad esempio, se è impostato su rack, ciascun gruppo di porzioni viene\n          posizionato in un diverso rack. Viene utilizzato per creare un passaggio della regola CRUSH come il passaggio choose\n          rack. Se non è impostato, il raggruppamento non viene eseguito.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Il plugin ISA incapsula la libreria ISA. Viene eseguito solo su processori Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Il plugin ISA è disponibile in due formati Reed Solomon.\n          Se è impostato reed_sol_van, il formato è Vandermonde, se è impostato cauchy, il formato è Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Il plugin shec incapsula la libreria SHEC multipla.\n          Consente a Ceph di recuperare i dati in modo più efficiente rispetto ai codici Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Il numero di compartimenti di parità, ciascuno dei quali include i singoli compartimenti di dati\n          nell\'intervallo di calcolo. Il numero viene utilizzato come strumento di stima della durabilità. Ad esempio, se c=2,\n          è possibile disattivare 2 OSD senza perdere i dati.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Il nome del compartimento Crush utilizzato per il primo passaggio della regola CRUSH.\n      Ad esempio il passaggio take default.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Assicurarsi che non esistano due porzioni in un compartimento con lo stesso dominio\n      di errore. Ad esempio, se il dominio di errore è l\'host, non verranno memorizzate due porzioni sullo stesso\n      host. Viene utilizzato per creare un passaggio della regola CRUSH come passaggio chooseleaf host.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Limitare il posizionamento ai dispositivi di una classe specifica\n      (ad es. ssd o hdd) usando i nomi delle classi di dispositivi Crush nella mappa CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Impostare il nome della directory da cui viene caricato il plugin del codice di cancellazione.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Consente tutte le operazioni</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Consente solo le operazioni che non modificano il server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Non consente operazioni di lettura o scrittura, ma consente qualsiasi altra operazione</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Non consente operazioni di lettura o scrittura o qualsiasi operazione che modifichi gli attributi dei file o il contenuto della directory</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Non consente alcun accesso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Selezionare la priorità --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Bassa</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informazioni</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Ultimi 5 minuti</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Ultimi 15 minuti</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Ultimi 30 minuti</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Ultima ora (Default)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Ultime 3 ore</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Ultime 6 ore</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Ultime 12 ore</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Ultime 24 ore</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ieri</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Oggi</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Fino a oggi</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Giorno prima di ieri</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Ultimi 2 giorni</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Questo giorno della scorsa settimana</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Settimana precedente</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Questa settimana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Fino a questa settimana</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Ultimi 7 giorni</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Mese precedente</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Questo mese</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Fino a questo mese</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Ultimi 30 giorni</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Ultimi 90 giorni</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Ultimi 6 mesi</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Ultimo anno</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Anno precedente</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Quest\'anno</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Fino a quest\'anno</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Ultimi 2 anni</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Ultimi 5 anni</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nessun elemento selezionato.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Deselezionare l\'elemento per selezionare di nuovo</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target> Raggiunto il limite per la selezione</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtra tag</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Aggiungi badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Non vi sono elementi disponibili.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clona</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copia</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Pulitura approfondita</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Eliminazione definitiva</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Appiattisci</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Declassa</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Attiva</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Contrassegna come perso</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Disattiva</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteggi</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Rinomina</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Ripristina</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Sposta nel cestino</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Rimuovi protezione</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Eliminato</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonato</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiato</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Appiattito</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Ripristinato</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback eseguito</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sì</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>No</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualità di servizio</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite di BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Il limite desiderato di byte I/O al secondo.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite di IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Il limite desiderato di operazioni I/O al secondo.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite BPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Il limite desiderato dei byte letti al secondo.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite di IOPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Il limite desiderato di operazioni di lettura al secondo.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite di BPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Il limite desiderato di byte scritti al secondo.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite di IOPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Il limite desiderato di operazioni di scrittura al secondo.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Burst BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Il limite di burst desiderato dei byte di I/O.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Burst IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di I/O.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Burst BPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Il limite di burst desiderato dei byte letti.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Burst IOPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di lettura.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Burst BPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Il limite di burst desiderato dei byte scritti.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Burst di IOPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di scrittura.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>In esecuzione</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>esegui</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Eseguito</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>task sconosciuto</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Creazione in corso</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>crea</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aggiornamento in corso</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aggiorna</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Eliminazione in corso</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonazione in corso</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clona</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copia in corso</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copia</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Appiattimento</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>appiattisci</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Rollback in corso</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Spostamento in corso</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>sposta</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Spostato</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Impossibile trovare l\'immagine.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Ripristino in corso</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>ripristina</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Eliminazione in corso</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>tutti i pool</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossibile disabilitare l\'esecuzione della copia speculare perché contiene un peer.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"8mBD":function(t,e,n){!function(t){"use strict";t.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},"8rQ2":function(t,e,n){var a=n("6MU2"),r=n("/Gx3"),i=n("Uqmq"),s=n("qjUL"),o=r((function(t){return t.push(void 0,i),a(s,void 0,t)}));t.exports=o},"8xTl":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t){return a.upperFirst(t)}}},"9/5/":function(t,e){var n=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,i=/^0o[0-7]+$/i,s=parseInt,o="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,l=o||u||Function("return this")(),d=Object.prototype.toString,c=Math.max,f=Math.min,h=function(){return l.Date.now()};function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function p(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==d.call(t)}(t))return NaN;if(g(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=g(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var o=r.test(t);return o||i.test(t)?s(t.slice(2),o?2:8):a.test(t)?NaN:+t}t.exports=function(t,e,n){var a,r,i,s,o,u,l=0,d=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=a,i=r;return a=r=void 0,l=e,s=t.apply(i,n)}function v(t){return l=t,o=setTimeout(_,e),d?y(t):s}function x(t){var n=t-u;return void 0===u||n>=e||n<0||b&&t-l>=i}function _(){var t=h();if(x(t))return T(t);o=setTimeout(_,function(t){var n=e-(t-u);return b?f(n,i-(t-l)):n}(t))}function T(t){return o=void 0,m&&a?y(t):(a=r=void 0,s)}function O(){var t=h(),n=x(t);if(a=arguments,r=this,u=t,n){if(void 0===o)return v(u);if(b)return o=setTimeout(_,e),y(u)}return void 0===o&&(o=setTimeout(_,e)),s}return e=p(e)||0,g(n)&&(d=!!n.leading,i=(b="maxWait"in n)?c(p(n.maxWait)||0,e):i,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==o&&clearTimeout(o),l=0,a=u=r=o=void 0},O.flush=function(){return void 0===o?s:T(h())},O}},"93I0":function(t,e,n){var a=n("VpIT"),r=n("kOOl"),i=a("keys");t.exports=function(t){return i[t]||(i[t]=r(t))}},"978R":function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"c",(function(){return f})),n.d(e,"d",(function(){return h}));var a=n("8Y7J"),r=n("hpHm"),i=n("mrSG"),s=n("z/SZ"),o=n("2uy1"),u=n("PqYM");class l{constructor(){this.adaptivePosition=!0,this.placement="top",this.triggers="hover focus",this.delay=0}}class d{constructor(t){Object.assign(this,t)}get isBs3(){return Object(r.d)()}ngAfterViewInit(){this.classMap={in:!1,fade:!1},this.classMap[this.placement]=!0,this.classMap["tooltip-"+this.placement]=!0,this.classMap.in=!0,this.animation&&(this.classMap.fade=!0),this.containerClass&&(this.classMap[this.containerClass]=!0)}}let c=0,f=(()=>{class t{constructor(t,e,n,r,i,s){this._elementRef=r,this._renderer=i,this._positionService=s,this.tooltipId=c++,this.tooltipChange=new a.EventEmitter,this.containerClass="",this.tooltipAnimation=!0,this.tooltipFadeDuration=150,this.tooltipStateChanged=new a.EventEmitter,this._tooltip=e.createLoader(this._elementRef,t,this._renderer).provide({provide:l,useValue:n}),Object.assign(this,n),this.onShown=this._tooltip.onShown,this.onHidden=this._tooltip.onHidden}get isOpen(){return this._tooltip.isShown}set isOpen(t){t?this.show():this.hide()}set htmlContent(t){Object(r.i)("tooltipHtml was deprecated, please use `tooltip` instead"),this.tooltip=t}set _placement(t){Object(r.i)("tooltipPlacement was deprecated, please use `placement` instead"),this.placement=t}set _isOpen(t){Object(r.i)("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen=t}get _isOpen(){return Object(r.i)("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen}set _enable(t){Object(r.i)("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled=!t}get _enable(){return Object(r.i)("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled}set _appendToBody(t){Object(r.i)('tooltipAppendToBody was deprecated, please use `container="body"` instead'),this.container=t?"body":this.container}get _appendToBody(){return Object(r.i)('tooltipAppendToBody was deprecated, please use `container="body"` instead'),"body"===this.container}set _popupClass(t){Object(r.i)("tooltipClass deprecated")}set _tooltipContext(t){Object(r.i)("tooltipContext deprecated")}set _tooltipPopupDelay(t){Object(r.i)("tooltipPopupDelay is deprecated, use `delay` instead"),this.delay=t}get _tooltipTrigger(){return Object(r.i)("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers}set _tooltipTrigger(t){Object(r.i)("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers=(t||"").toString()}ngOnInit(){this._tooltip.listen({triggers:this.triggers,show:()=>this.show()}),this.tooltipChange.subscribe(t=>{t||this._tooltip.hide()}),this.onShown.subscribe(()=>{this.setAriaDescribedBy()}),this.onHidden.subscribe(()=>{this.setAriaDescribedBy()})}setAriaDescribedBy(){this._ariaDescribedby=this.isOpen?"tooltip-"+this.tooltipId:null,this._ariaDescribedby?this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ariaDescribedby):this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby")}toggle(){if(this.isOpen)return this.hide();this.show()}show(){if(this._positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition},preventOverflow:{enabled:this.adaptivePosition}}}),this.isOpen||this.isDisabled||this._delayTimeoutId||!this.tooltip)return;const t=()=>{this._delayTimeoutId&&(this._delayTimeoutId=void 0),this._tooltip.attach(d).to(this.container).position({attachment:this.placement}).show({content:this.tooltip,placement:this.placement,containerClass:this.containerClass,id:"tooltip-"+this.tooltipId})},e=()=>{this._tooltipCancelShowFn&&this._tooltipCancelShowFn()};if(this.delay){const n=Object(u.a)(this.delay).subscribe(()=>{t(),e()});this.triggers&&Object(r.f)(this.triggers).forEach(t=>{this._tooltipCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,t.close,()=>{n.unsubscribe(),e()})})}else t()}hide(){this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this._tooltip.isShown&&(this._tooltip.instance.classMap.in=!1,setTimeout(()=>{this._tooltip.hide()},this.tooltipFadeDuration))}ngOnDestroy(){this._tooltip.dispose(),this.tooltipChange.unsubscribe(),this.onShown.unsubscribe(),this.onHidden.unsubscribe()}}return Object(i.__decorate)([Object(r.a)(),Object(i.__metadata)("design:type",Object)],t.prototype,"tooltip",void 0),t})();class h{static forRoot(){return{ngModule:h,providers:[l,s.a,o.a]}}}},"9Xeq":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},"9d/t":function(t,e,n){var a=n("AO7/"),r=n("xrYK"),i=n("tiKp")("toStringTag"),s="Arguments"==r(function(){return arguments}());t.exports=a?r:function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(n){}}(e=Object(t),i))?n:s?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},"9nlD":function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("LvDl"),r=n("2Vo4"),i=n("XNiG"),s=n("mtw6"),o=n("G1I9"),u=n("a0VL"),l=n("ufoC"),d=n("8Y7J"),c=n("EApP");let f=(()=>{class t{constructor(t,e,n){this.toastr=t,this.taskMessageService=e,this.cdDatePipe=n,this.hideToasties=!1,this.dataSource=new r.a([]),this.data$=this.dataSource.asObservable(),this.sidebarSubject=new i.a,this.queued=[],this.KEY="cdNotifications";const s=localStorage.getItem(this.KEY);let u=[];a.isString(s)&&(u=JSON.parse(s,(t,e)=>a.isPlainObject(e)?a.assign(new o.a,e):e)),this.dataSource.next(u)}removeAll(){localStorage.removeItem(this.KEY),this.dataSource.next([])}remove(t){const e=this.dataSource.getValue();e.splice(t,1),this.dataSource.next(e),localStorage.setItem(this.KEY,JSON.stringify(e))}save(t){const e=this.dataSource.getValue();for(e.push(t),e.sort((t,e)=>t.timestamp>e.timestamp?-1:1);e.length>10;)e.pop();this.dataSource.next(e),localStorage.setItem(this.KEY,JSON.stringify(e))}show(t,e,n,r,i){return window.setTimeout(()=>{let s;s=a.isFunction(t)?t():a.isObject(t)?t:new o.b(t,e,n,r,i),this.queueToShow(s)},10)}queueToShow(t){this.cancel(this.queuedTimeoutId),this.queued.find(e=>a.isEqual(e,t))||this.queued.push(t),this.queuedTimeoutId=window.setTimeout(()=>{this.showQueued()},500)}showQueued(){this.getUnifiedTitleQueue().forEach(t=>{const e=new o.a(t);e.isFinishedTask||this.save(e),this.showToasty(e)})}getUnifiedTitleQueue(){return Object.values(this.queueShiftByTitle()).map(t=>{const e=t[0];return t.length>1&&(e.message="<ul>"+t.map(t=>`<li>${t.message}</li>`).join("")+"</ul>"),e})}queueShiftByTitle(){const t={};let e;for(;e=this.queued.shift();)t[e.title]||(t[e.title]=[]),t[e.title].push(e);return t}showToasty(t){this.hideToasties||this.toastr[["error","info","success"][t.type]]((t.message?t.message+"<br>":"")+this.renderTimeAndApplicationHtml(t),t.title,t.options)}renderTimeAndApplicationHtml(t){return`<small class="date">${this.cdDatePipe.transform(t.timestamp)}</small><i class="float-right custom-icon ${t.applicationClass}" title="${t.application}"></i>`}notifyTask(t,e=!0){const n=this.finishedTaskToNotification(t,e);return n.isFinishedTask=!0,this.show(n)}finishedTaskToNotification(t,e=!0){let n;return n=t.success&&e?new o.b(s.a.success,this.taskMessageService.getSuccessTitle(t)):new o.b(s.a.error,this.taskMessageService.getErrorTitle(t),this.taskMessageService.getErrorMessage(t)),n.isFinishedTask=!0,n}cancel(t){window.clearTimeout(t)}suspendToasties(t){this.hideToasties=t}toggleSidebar(t=!1){this.sidebarSubject.next(t)}}return t.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new t(d["ɵɵinject"](c.j),d["ɵɵinject"](l.a),d["ɵɵinject"](u.a))},token:t,providedIn:"root"}),t})()},"9ppp":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return t.prototype=Object.create(Error.prototype),t})()},"9rRi":function(t,e,n){!function(t){"use strict";t.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n("wd/R"))},"A+xa":function(t,e,n){!function(t){"use strict";t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){return t+(/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n("wd/R"))},A2ZE:function(t,e,n){var a=n("HAuM");t.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},ANnk:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aexS"),n("f/UV");class a{constructor(t,e,n){this.formScope=t,this.authStorageService=e,this.elementRef=n}ngAfterViewInit(){this.permissions=this.authStorageService.getPermissions(),null!==this.formScope&&(this.service_name=this.formScope.cdFormScope),this.service_name&&!this.permissions[this.service_name].update&&(this.elementRef.nativeElement.disabled=!0)}}},"AO7/":function(t,e,n){var a={};a[n("tiKp")("toStringTag")]="z",t.exports="[object z]"===String(a)},AQ68:function(t,e,n){!function(t){"use strict";t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n("wd/R"))},AWcq:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("yJti");class r{constructor(){this.vcs=a.a}ngOnInit(){}}},AfCQ:function(t,e,n){"use strict";var a=n("2Vo4"),r=n("qgXg"),i=n("HDdC"),s=n("pxpQ"),o=n("Kqap"),u=n("lJxs"),l=n("7o/Q");class d{constructor(t,e){this.compare=t,this.keySelector=e}call(t,e){return e.subscribe(new c(t,this.compare,this.keySelector))}}class c extends l.a{constructor(t,e,n){super(t),this.keySelector=n,this.hasKey=!1,"function"==typeof e&&(this.compare=e)}compare(t,e){return t===e}_next(t){let e;try{const{keySelector:n}=this;e=n?n(t):t}catch(a){return this.destination.error(a)}let n=!1;if(this.hasKey)try{const{compare:t}=this;n=t(this.key,e)}catch(a){return this.destination.error(a)}else this.hasKey=!0;n||(this.key=e,this.destination.next(t))}}n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return h}));class f extends a.a{constructor(t,e,n){super(t),e.pipe(Object(s.b)(r.a)).pipe(Object(o.a)((t,e)=>e?n(t,e):t,t)).subscribe(t=>this.next(t))}}class h extends i.a{constructor(t,e,n){super(),this._dispatcher=t,this._reducer=e,this.source=n}select(t){return this.source.pipe(Object(u.a)(t)).pipe(t=>t.lift(new d(void 0,void 0)))}lift(t){const e=new h(this._dispatcher,this._reducer,this);return e.operator=t,e}dispatch(t){this._dispatcher.next(t)}next(t){this._dispatcher.next(t)}error(t){this._dispatcher.error(t)}complete(){}}},AiMb:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="zh-CN">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>切换导航</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>仪表盘</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>集群</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>主机</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>对应的服务</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>配置项</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH 索引</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Manager 扩展模块</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>日志</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>存储池</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>块设备</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>映像</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>镜像</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>文件系统</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>对象网关</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>守护进程</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>请选择语言</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>正在加载面板的相关数据…</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana 时间选择工具</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>重新设置</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>返回</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>无法加载数据。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>选中个数</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>命中个数</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>总数</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名称</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>解释</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>更详尽的解释</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>缺省值</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>守护进程的缺省值</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>可选值</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>保存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>检查 CRUSH 索引图</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>正在加载…</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>主机名</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>请填写此栏目!</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>是的,我确定。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>取消</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>关闭</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>主机列表</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>总体性能</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>无法找到相关条目</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>集群日志</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>审计日志</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>正在加载相关配置信息...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>配置信息无法加载。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>编辑 Manager 扩展模块</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>输入值不是有效的 UUID,如:67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>输入的应该是个有效的 IP 地址。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>输入须为数字。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>输入的应该是一个浮点数或者十进制整数。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>集群 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap 修改时间</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con </target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>仲裁成员</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非仲裁成员</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>添加</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>特性</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>集群范围的 OSD 标志</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>提交</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>高级设置…</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 恢复优先级</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>优先级</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>自定义优先级</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>这个字段是必填的!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>权重值必须在 0 和 1 之间</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>重设权重</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深度}}</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深度} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 列表</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>编辑</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>删除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>健康状况</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>统计数据</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>客户端</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任何客户端均可访问</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>地址</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必填项</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>必须包含一个或多个逗号分隔值</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例如:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>访问类型</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>添加客户端</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 无可用集群 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 请选择一个集群 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>添加守护进程</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>存储后端</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 没有可用的数据存储池 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 请选择存储后端 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>对象网关用户</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 无可选用户 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 请选择对象网关用户 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 用户 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 无可用客户端 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- 请选择 cephx 客户端 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 名称</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>安全标签</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>启用安全标签</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 路径</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>路径需以“/”开头,后面可跟单词</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>将创建新文件夹</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>路径</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>路径只能是单个“/”或单词</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>将创建新的桶</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 协议</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 标签</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>客户端不能装入子目录(即如果标记为 foo,则客户端无法装入 foo/baz)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>通过使用不同标记选项,可将同一路径导出多次。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>伪</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>通过使用不同伪选项,可将同一路径导出多次。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 没有可用的访问类型 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 选择访问类型 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 没有可用的 squash --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 选择执行哪种类型的用户 ID 匿名访问 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>传输协议</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>欢迎使用 Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>请输入用户名</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>请输入密码</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>登录</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>抱歉,此用户不存在。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>禁止访问</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>抱歉,您无权访问这个页面。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 配置</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>删除本地的配置项,改用更高作用域的配置值。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小值为 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>存储池列表</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名称只能由字母、数字、短划线和下划线组成。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>此纠删码配置名称已被使用。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>纠删码算法</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>数据块 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>必须大于等于 2</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>校验块 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>必须大于等于 1</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>持久因子 (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>局部性因子 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>CRUSH 故障域</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>CRUSH 局部性</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>无</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>算法</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>packetsize</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>CRUSH 根</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>CRUSH 设备类型</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任意</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>目录</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名称…</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>此 Ceph 存储池名称已被使用。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>存储池类型</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 请选择存储池的类型 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>归置组 (PG)</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>至少需要一个归置组!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>您的集群没法支持这么多的 PG。请重新计算需要的 PG 个数。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>在线 PG 计算器</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>副本个数</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>标志</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 重写 (overwrite)</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>应用类型</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 无纠删码配置可选 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 请选择一个纠删码配置 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>CRUSH 算法规则组</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 选择 CRUSH 规则 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>CRUSH 规则</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>CRUSH 步骤</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>压缩</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>模式</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>算法</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 无可用的纠删码压缩算法 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>blob 大小下限</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>比如 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>取值必须大于 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>blob 大小上限</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>如 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>取值必须大于 blob 大小下限</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>比例</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>压缩率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>取值必须在 0.0 和 1.0 之间</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>如 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>详情</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>性能详情</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>缓存层详细信息</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>将映像移至回收站</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保护期一直到</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>无保护</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日期格式有问题。请使用“YYYY-MM-DD HH:mm:ss”。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保护期限已经过了。请设置一个将来的日期,或者清空不填。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>移动映像</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>概览</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>目标</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>发现身份验证</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>用户名长度必须在 8 到 64 个字符之间,且只能包含\n以下字符:英文字母、“.”、“@”、“-”、“_”或“:”。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>密码</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>互认证用户</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>互认证密码</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>可用信息:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>无可用 iSCSI 目标</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>存储池</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>数据存储池</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>创建</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>对象数</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>对象大小</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>供给容量</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>总供给容量</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>条带单元</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>条带个数</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>父节点</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>块存储名字前缀</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>order</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>快照</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>映像</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>此设置会覆盖全局值</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>全局</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>该值为全局值。没有为此映像设置此选项的值。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>不允许使用“/”和“@”。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 没有可用的 RBD 存储池 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 请选择存储池 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>使用一个专用的数据池</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>数据池</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>为保存 RBD 的对象数据单独分配的存储池。</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>您需要设置大一些的容量。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>高级设置</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>条带</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>条带单元大小</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 选择条带单元大小 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>因为设置了条带个数,所以这个字段是必选的!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>条带单元大小超过了对象大小。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>条带个数</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>因为设置了条带单元大小,所以这个字段是必选的!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>条带的个数必须大于 0。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>您即将进行回滚操作</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>清空回收站</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>全选</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>存储池:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>存储池名称…</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>恢复映像</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>要恢复</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>输入映像的新名称,并点击</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新名称</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>过期时间</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保护期限</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 结构图</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常无须改变这些默认参数值。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>设置</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>后备存储</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>确认</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>高级设置</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>目标限定名</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN 格式错误。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例如:iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>更多信息</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>此目标的高级设置项存在修改。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>端口</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>添加端口</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>此映像的设置项存在修改。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>添加映像</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 身份验证</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>授权人</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>授权人</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>客户端 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>授权人 IQN 必须唯一。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>用户名长度必须在 8 到 64 个字符之间,且只能包含\n以下字符:英文字母、“.”、“@”、“-”、“_”或“:”。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>授权人属于群组。映像须在群组中进行设置。</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>无项目添加。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>添加授权人</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>群组</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>群组</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>添加群组</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>回收站</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>问题</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>正在同步</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>已就绪</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>编辑存储池镜像模式</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>在禁用镜像功能前必须先移除同伴集群。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {编辑} other {添加} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>集群名称</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>集群名称无效。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID 无效。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Monitor 地址</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>逗号分割的地址...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Monitor 地址无效。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 密钥</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64 编码的密钥...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 密钥必须是 base64 编码的。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>无法读取性能计数器</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>守护进程列表</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>性能计数器</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>正在加载存储桶数据…</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>输入值无效。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>所选名称已经被使用。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>所有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 请选择一个用户 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>开启</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>索引类型</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>归置规则</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>标识</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>max marker</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>主版本</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>修改时间</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>zonegroup</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>存储桶配额</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大数目</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>无限制</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大对象数目</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>用户名</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 请选择用户名 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>自动生成密钥</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>访问密钥</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>秘密密钥</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>全名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>邮箱</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>冻结</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>系统</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大存储桶数目</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>子用户</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>用户权限</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>用户配额</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>显示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>密钥</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>类型</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 请选择一个类型 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>权限</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 请选择权限类型 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>子用户</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>所选的子用户 ID 已被使用。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>读、写</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>全部</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift 密钥</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>自动生成密钥</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>正在加载用户数据…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>用户数据无法加载。 </target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>所选的用户 ID 已被使用。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>无效的邮箱地址。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>此邮箱地址已被使用。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>存储桶个数的上限</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>禁用</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>自定义</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 密钥</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>没有子用户。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>没有任何密钥。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>权限为空。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>空间无限制</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>空间上限</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>对象个数无限制</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>对象个数上限</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>设置的值必须 &gt;= 0。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>描述…</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>权限</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>角色</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>确认密码</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>密码和之前的输入不匹配。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>邮箱</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>邮箱地址无效。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>您即将取消您自己用户的 "user read / update" 权限。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>如果您继续的话,您以后就没办法为其他用户添加或者删除角色了。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>您确实要继续吗?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>帮助</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>文档</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>关于</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>仪表盘设置</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>用户管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>登录的用户</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>登出</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>OSD map</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>元数据不可用</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>相关元数据</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>性能计数器</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>写入请求</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>读取请求</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>直方图</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>当前值</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>下限</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>上限</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>来源</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>级别</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>可在运行时更新(可编辑)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>标记</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>可选项</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>参见</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>集群状态</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>manager 守护进程</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>对象网关</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>metadata 服务器</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 网关</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>客户端 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>客户端吞吐量</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>客户端读/写</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>恢复吞吐量</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>洗刷</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>性能</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>基本容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>每个 OSD 的 PG 数</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 状态</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>排位</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>当前</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>已更新发现身份验证</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>无可用端口。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>无可用映像。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>无可用映像。请确保为目标添加一个映像。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>无可用授权人。请确保为目标添加一个授权人。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>目标</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>读字节数</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>写字节数</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>读请求数</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>写请求数</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>活动/优化自</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>实例</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>问题</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>进度</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>编辑模式</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>添加 peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>编辑 peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>删除 peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># 本地</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># 远程</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>镜像 peer</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>密钥</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>完全展开</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>分层</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>互斥锁</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>object map(要求互斥锁支持)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>日志(要求互斥锁支持)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>无保护的</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 快照回滚</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>回滚</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 快照</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>定点删除</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>类型</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>主机</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>根</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>备用服务</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>排位</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>守护进程</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>活跃度</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用率</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>更新完成</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>该值可在运行时更新。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>服务器或客户端不会主动从 monitor 的配置数据库读取这个配置。\n 所以不能用“ceph config set ...”设置它。但是可以通过\n ceph.conf 或者用命令行进行配置。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>该配置只有在服务启动的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>该配置只在创建集群的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>该配置只在服务创建的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>服务</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>当前值</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>可编辑</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>启用</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>禁用</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>正在重新连接,请稍候…</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>外部地址</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>活动会话</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>禁止加入</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>之前被除名的 OSD 在启动之后,不会被加入集群</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>禁止除名</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>在发现 OSD 没有响应之后一段时间,该 OSD 会被踢出集群。该标志会禁止这个功能。</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>禁止启用</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>不允许 OSD 启动</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>禁止停用</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>当前不受理对 OSD 的失效报告,因而 monitor 不会停用 OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>暂停</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>暂停读写</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>禁止洗刷</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>洗刷已禁止</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>禁止深层洗刷</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>深层洗刷已禁止</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>禁止回填</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG 回填已推迟</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>禁止恢复</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG 恢复已推迟</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>逐位排序</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>使用逐位排序</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>老版本的快照已全部升级</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD 上的快照已全部转换完毕</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>在恢复时进行删除操作</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>在恢复时,而非对齐阶段进行删除</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 日志硬限制</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>为 pg 日志长度添加硬限制</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>已更新 OSD 标志</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>除名</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>加入</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>停用</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>标记</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 丢失</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>已标记丢失</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>销毁</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>已销毁</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>删除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>读字节数</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>写字节数</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>读请求数</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>写请求数</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大回填量</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>最大活跃恢复请求数</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>最大单次恢复操作数</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>恢复/回填操作间隔睡眠时间</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>任务</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>严重程度</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>已启动</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>已使用</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>空闲</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>正常</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>运行中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警报</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>未知</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>启用中</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>无文件系统</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>工作</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>待机</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>工作的守护进程</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganesha 服务的配置还没有完成。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>传输</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 用户</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 文件系统</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(继承自全局配置)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>继承自全局配置</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 选择执行哪种类型的用户 ID 匿名访问 --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>没有可用的守护进程。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>缓存模式</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>最少延迟赶出时间</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>最少延迟刷回时间</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>目标器最大字节数</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>目标器最大对象数</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>还没有任何应用标记</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>应用标记到了上限</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>一个存储池最多能有四个应用标记。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>可用的字符为“_a-zA-Z0-9”</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>长度限制为 128 个字符</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>添加应用标记或根据其进行筛选</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>添加应用标记</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>副本个数</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>最后修改时间</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>CRUSH 规则集</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>作用范围</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>读权限</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>新建</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>系统角色</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>更新用户</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>继续</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>您被自动登出,因为您的角色有了变动。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target> 各对象都被分割为数据块,分别存储于不同 OSD 。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>计算各对象的编码块、并存储于不同 OSD 。\n编码块的数量等同于在不丢数据的前提下允许同时失效的 OSD 数量。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>jerasure 插件是最通用、最灵活的插件,\n也是 Ceph 纠删码存储池的默认插件。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>reed_sol_van 技术更灵活:它足以设置 k 和 m 值。 \ncauchy_good 技术更快,但你得谨慎地选择 packetsize 值。\nreed_sol_r6_op 、 liberation 、 blaum_roth 、 liber8tion 都是与 RAID6 等价的技术,\n它们只能配置为 m=2 。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target> 以 bytes 大小的包为单位进行编码。\n确定合适的包尺寸很难, \njerasure 文档对此有很详细的描述。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>用 jerasure 插件时,纠删码编码的对象存储在多个 OSD 上,\n丢失一个 OSD 的恢复过程需读取所有其他的 OSD 。\n比如 jerasure 的配置为 k=8 且 m=4 ,丢失一个 OSD 后需读取其他 11 个 OSD 才能恢复。\n\nlrc 纠删码插件创建的是局部校验块,这样只需较少的 OSD 即可恢复。\n比如 lrc 的配置为 k=8 、 m=4 且 l=4 ,它将为每四个 OSD 创建额外的校验块,\n当一个 OSD 丢失时,它只需四个 OSD 即可恢复,而不需要十一个。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>把编码块和数据块分组为大小为 locality 的集合。\n比如, k=4 且 m=2 时,若设置 locality=3 ,将会分组为大小为三的两组,\n这样各组都能自行恢复,无需从另一组读数据块。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>由 l 定义的块集合将按哪种 crush 桶类型存储。\n比如,若设置为 rack ,大小为 l 块的各组将被存入不同的机架,\n此值会被用于创建类似 step choose rack 的规则集。\n如果没设置,就不会这样分组。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 插件封装了 ISA 库。它只能运行在 Intel 处理器上。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 插件包含两种 Reed Solomon 编码形式。\n设置为 reed_sol_van 表示用 Vandermonde 算法,设置为 cauchy 表示用 Cauchy 算法。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec 插件封装了 multiple SHEC 库。\n与 Reed Solomon 编码相比,它能使 Ceph 更高效地恢复数据。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target> 奇偶校验块数量,它们在各自的计算范围内包含了各数据块。\n此数值被用作持久性估值。\n例如,假设 c=2 ,就是说不丟数据的情况下可损失 2 个 OSD 。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>规则集第一步所指向的 CRUSH 桶之名,\n如 step take default 。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>确保两个编码块不会存在于同一故障域的桶里面。\n比如,假设故障域是 host ,就不会有两个编码块存储到同一主机;\n此值用于在规则集中创建类似 step chooseleaf host 的步骤。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>使用 CRUSH 索引中的 crush 设备类名,\n将归置限制于特定类的设备(例如,ssd 或 hdd)。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>设置纠删码插件所在目录。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>允许所有操作</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>只允许不修改服务器端数据的操作</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>禁止读写,但是允许其他的操作</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>禁止读、写以及任何可能修改文件内容的操作</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>完全禁止访问</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 选择优先级 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>信息</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>过去 5 分钟</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>过去 15 分钟</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>过去 30 分钟</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>过去 1 小时(默认)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>过去 3 小时</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>过去 6 小时</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>过去 12 小时</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>过去 24 小时</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨天</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>今天</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>今天到现在为止</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>前天</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>过去 2 天</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>上周的今天</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>上个星期</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>本周</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>本周以来</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>过去 7 天</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>上个月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>当月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>本月以来</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>过去 30 天</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>过去 90 天</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>过去 6 个月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>过去 1 年</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>去年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年以来</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>过去 2 年</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>过去 5 年</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>无选中项目。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>取消选择</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>达到选择项数上限。</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>过滤标签</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>添加 badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>无可选项目。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>复制</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>深层洗刷</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>销毁</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>展开</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>标记为停用</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>标记为加入</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>标记为丢失</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>标记为已除名</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保护</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>重命名</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>恢复</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>移至回收站</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>解除保护</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>删除完成</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>克隆完成</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>复制完成</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>展开完成</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>已经把</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>回滚完成</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>是</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>否</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>服务质量 (QoS)</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>指定的每秒 IO 字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>指定的每秒 IO 操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>读 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>指定的每秒内读取的字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>读 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>指定的每秒读操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>写 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>指定的每秒内写入的字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>写 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>指定的每秒写操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>指定的 IO 字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>指定的 IO 操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>读 BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>指定的读取的字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>读 IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>指定的读操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>写 BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>指定的写入的字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>写 IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>指定的写操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>正在执行</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>执行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>执行完毕</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>未知任务</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>正在创建</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>创建</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>正在更新</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>正在删除</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>正在克隆</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>正在复制</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>复制</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>正在展开</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>展开</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>正在回滚</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>回滚</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>正在把</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>把</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>已经把</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>无法找到映像。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>正在把</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>把</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>正在清除</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>所有存储池</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>因为包含同伴集群,无法禁用镜像功能</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},Avrn:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("aexS"),r=n("8Y7J"),i=n("iInd");let s=(()=>{class t{constructor(t,e){this.router=t,this.authStorageService=e}canActivate(t,e){return!!this.authStorageService.isLoggedIn()||(this.router.navigate(["/login"],{queryParams:{returnUrl:e.url}}),!1)}canActivateChild(t,e){return this.canActivate(t,e)}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t(r["ɵɵinject"](i.m),r["ɵɵinject"](a.a))},token:t,providedIn:"root"}),t})()},AvvY:function(t,e,n){!function(t){"use strict";t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})}(n("wd/R"))},AxL3:function(t,e){var n=!("undefined"==typeof window||!window.document||!window.document.createElement);t.exports=n},B55N:function(t,e,n){!function(t){"use strict";t.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(t){return t.week()<this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(t){return this.week()<t.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n("wd/R"))},BFxc:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("4I5i"),i=n("EY2u");function s(t){return function(e){return 0===t?Object(i.b)():e.lift(new o(t))}}class o{constructor(t){if(this.total=t,this.total<0)throw new r.a}call(t,e){return e.subscribe(new u(t,this.total))}}class u extends a.a{constructor(t,e){super(t),this.total=e,this.ring=new Array,this.count=0}_next(t){const e=this.ring,n=this.total,a=this.count++;e.length<n?e.push(t):e[a%n]=t}_complete(){const t=this.destination;let e=this.count;if(e>0){const n=this.count>=this.total?this.total:this.count,a=this.ring;for(let r=0;r<n;r++){const r=e++%n;t.next(a[r])}}t.complete()}}},BJMh:function(t,e,n){var a=n("KFwg")(n("Wa4q"),"Promise");t.exports=a},BQkM:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return t+" IOPS"}}},BVg3:function(t,e,n){!function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,a,r){var i=t+" ";switch(a){case"s":return n||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return e(t)?i+(n||r?"sekúndur":"sekúndum"):i+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?i+(n||r?"mínútur":"mínútum"):n?i+"mínúta":i+"mínútu";case"hh":return e(t)?i+(n||r?"klukkustundir":"klukkustundum"):i+"klukkustund";case"d":return n?"dagur":r?"dag":"degi";case"dd":return e(t)?n?i+"dagar":i+(r?"daga":"dögum"):n?i+"dagur":i+(r?"dag":"degi");case"M":return n?"mánuður":r?"mánuð":"mánuði";case"MM":return e(t)?n?i+"mánuðir":i+(r?"mánuði":"mánuðum"):n?i+"mánuður":i+(r?"mánuð":"mánuði");case"y":return n||r?"ár":"ári";case"yy":return e(t)?i+(n||r?"ár":"árum"):i+(n||r?"ár":"ári")}}t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},BVkS:function(t,e,n){var a=n("2zzJ"),r=n("Eey9");t.exports=function(t,e){return e.length<2?t:a(t,r(e,0,-1))}},BkBO:function(t,e,n){var a=n("43VP");t.exports=function(t,e){var n=!0;return a(t,(function(t,a,r){return n=!!e(t,a,r)})),n}},Bs8V:function(t,e,n){var a=n("g6v/"),r=n("0eef"),i=n("XGwC"),s=n("/GqU"),o=n("wE6v"),u=n("UTVS"),l=n("DPsx"),d=Object.getOwnPropertyDescriptor;e.f=a?d:function(t,e){if(t=s(t),e=o(e,!0),l)try{return d(t,e)}catch(n){}if(u(t,e))return i(!r.f.call(t,e),t[e])}},ByF4:function(t,e,n){!function(t){"use strict";t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},C523:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("gk6K"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e,n,a){this.el=t,this.renderer=e,this.treeDraggedElement=n,this.ngZone=a,this.dragEventHandler=this.onDrag.bind(this)}return t.prototype.ngAfterViewInit=function(){var t=this,e=this.el.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("drag",t.dragEventHandler)}))},t.prototype.ngDoCheck=function(){this.renderer.setAttribute(this.el.nativeElement,"draggable",this.treeDragEnabled?"true":"false")},t.prototype.ngOnDestroy=function(){this.el.nativeElement.removeEventListener("drag",this.dragEventHandler)},t.prototype.onDragStart=function(t){t.dataTransfer.setData("text",t.target.id),this.treeDraggedElement.set(this.draggedElement),this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragStart",t)},t.prototype.onDrag=function(t){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("drag",t)},t.prototype.onDragEnd=function(){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragEnd"),this.treeDraggedElement.set(null)},i([Object(a.Input)("treeDrag"),s("design:type",Object)],t.prototype,"draggedElement",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"treeDragEnabled",void 0),i([Object(a.HostListener)("dragstart",["$event"]),s("design:type",Function),s("design:paramtypes",[Object]),s("design:returntype",void 0)],t.prototype,"onDragStart",null),i([Object(a.HostListener)("dragend"),s("design:type",Function),s("design:paramtypes",[]),s("design:returntype",void 0)],t.prototype,"onDragEnd",null),i([Object(a.Directive)({selector:"[treeDrag]"}),s("design:paramtypes",[a.ElementRef,a.Renderer2,r.a,a.NgZone])],t)}()},C6Ij:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("DqMs"),i=n("/NlG"),s=n("GiVz"),o=n("SVse");n("AWcq"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return p}));var u=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","info"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Retrieving data"])),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[". Please wait..."]))],(function(t,e){var n=e.component;t(e,1,0,"info"),t(e,5,0,n.statusFor)}),null)}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","warning"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Displaying previously cached data"])),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,["."]))],(function(t,e){var n=e.component;t(e,1,0,"warning"),t(e,5,0,n.statusFor)}),null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","error"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Could not load data"])),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[". Please check the cluster health."]))],(function(t,e){var n=e.component;t(e,1,0,"error"),t(e,5,0,n.statusFor)}),null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.status===n.vcs.ValueNone),t(e,3,0,n.status===n.vcs.ValueStale),t(e,5,0,n.status===n.vcs.ValueException)}),null)}},CFvb:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a={LEFT:37,UP:38,RIGHT:39,DOWN:40,ENTER:13,SPACE:32,CONTEXT_MENU:32}},CNMR:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return s})),n.d(e,"c",(function(){return u}));var a=n("mrSG"),r=n("8Y7J"),i=n("hpHm");class s{constructor(){this.type="warning",this.dismissible=!1,this.dismissOnTimeout=void 0}}let o=(()=>{class t{constructor(t,e){this.changeDetection=e,this.type="warning",this.dismissible=!1,this.isOpen=!0,this.onClose=new r.EventEmitter,this.onClosed=new r.EventEmitter,this.classes="",this.dismissibleChange=new r.EventEmitter,Object.assign(this,t),this.dismissibleChange.subscribe(t=>{this.classes=this.dismissible?"alert-dismissible":"",this.changeDetection.markForCheck()})}ngOnInit(){this.dismissOnTimeout&&setTimeout(()=>this.close(),parseInt(this.dismissOnTimeout,10))}close(){this.isOpen&&(this.onClose.emit(this),this.isOpen=!1,this.changeDetection.markForCheck(),this.onClosed.emit(this))}}return Object(a.__decorate)([Object(i.a)(),Object(a.__metadata)("design:type",Object)],t.prototype,"dismissible",void 0),t})();class u{static forRoot(){return{ngModule:u,providers:[s]}}}},CNUl:function(t,e,n){var a=n("XhiP");t.exports=function(t){var e=new t.constructor(t.byteLength);return new a(e).set(new a(t)),e}},CUJ1:function(t,e,n){var a=n("xAZD"),r=n("J9xi"),i=n("kna9"),s=n("MOZO"),o=n("77kF"),u=n("tpUd"),l=n("LJNh"),d=n("mOnh"),c=l((function(t,e){var n={};if(null==t)return n;var l=!1;e=a(e,(function(e){return e=s(e,t),l||(l=e.length>1),e})),o(t,d(t),n),l&&(n=r(n,7,u));for(var c=e.length;c--;)i(n,e[c]);return n}));t.exports=c},Cfvw:function(t,e,n){"use strict";var a=n("HDdC"),r=n("SeVD"),i=n("quSY"),s=n("kJWO"),o=n("jZKg"),u=n("Lhse"),l=n("c2HN"),d=n("I55L");function c(t,e){return e?function(t,e){if(null!=t){if(function(t){return t&&"function"==typeof t[s.a]}(t))return function(t,e){return new a.a(n=>{const a=new i.a;return a.add(e.schedule(()=>{const r=t[s.a]();a.add(r.subscribe({next(t){a.add(e.schedule(()=>n.next(t)))},error(t){a.add(e.schedule(()=>n.error(t)))},complete(){a.add(e.schedule(()=>n.complete()))}}))})),a})}(t,e);if(Object(l.a)(t))return function(t,e){return new a.a(n=>{const a=new i.a;return a.add(e.schedule(()=>t.then(t=>{a.add(e.schedule(()=>{n.next(t),a.add(e.schedule(()=>n.complete()))}))},t=>{a.add(e.schedule(()=>n.error(t)))}))),a})}(t,e);if(Object(d.a)(t))return Object(o.a)(t,e);if(function(t){return t&&"function"==typeof t[u.a]}(t)||"string"==typeof t)return function(t,e){if(!t)throw new Error("Iterable cannot be null");return new a.a(n=>{const a=new i.a;let r;return a.add(()=>{r&&"function"==typeof r.return&&r.return()}),a.add(e.schedule(()=>{r=t[u.a](),a.add(e.schedule((function(){if(n.closed)return;let t,e;try{const n=r.next();t=n.value,e=n.done}catch(a){return void n.error(a)}e?n.complete():(n.next(t),this.schedule())})))})),a})}(t,e)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")}(t,e):t instanceof a.a?t:new a.a(Object(r.a)(t))}n.d(e,"a",(function(){return c}))},ChqD:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},CjzT:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},CoRJ:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n("wd/R"))},CoVI:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("2vnA"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e){this.templateRef=t,this.viewContainer=e,this.templateBindings={}}return t.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.templateRef),this.dispose&&this.dispose(),this.shouldDetach()&&this.view.detach(),this.autoDetect(this.view)},t.prototype.shouldDetach=function(){return this.treeMobxAutorun&&this.treeMobxAutorun.detach},t.prototype.autoDetect=function(t){this.dispose=Object(r.b)((function(){return t.detectChanges()}))},t.prototype.ngOnDestroy=function(){this.dispose&&this.dispose()},i([Object(a.Input)(),s("design:type",Object)],t.prototype,"treeMobxAutorun",void 0),i([Object(a.Directive)({selector:"[treeMobxAutorun]"}),s("design:paramtypes",[a.TemplateRef,a.ViewContainerRef])],t)}()},CslI:function(t,e,n){var a=n("LaC8"),r=n("+FhV"),i=n("x3F9"),s=Function.prototype.toString,o=Object.prototype.hasOwnProperty,u=s.call(Object);t.exports=function(t){if(!i(t)||"[object Object]"!=a(t))return!1;var e=r(t);if(null===e)return!0;var n=o.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==u}},CwBR:function(t,e,n){var a=n("pMcL"),r=n("PHub"),i=n("0GLT"),s=a?a.isConcatSpreadable:void 0;t.exports=function(t){return i(t)||r(t)||!!(s&&t&&t[s])}},CxY0:function(t,e,n){"use strict";var a=n("nYho"),r=n("Nehr");function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}e.parse=v,e.resolve=function(t,e){return v(t,!1,!0).resolve(e)},e.resolveObject=function(t,e){return t?v(t,!1,!0).resolveObject(e):e},e.format=function(t){return r.isString(t)&&(t=v(t)),t instanceof i?t.format():i.prototype.format.call(t)},e.Url=i;var s=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,u=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),d=["'"].concat(l),c=["%","/","?",";","#"].concat(d),f=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,g=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,p={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n("r8II");function v(t,e,n){if(t&&r.isObject(t)&&t instanceof i)return t;var a=new i;return a.parse(t,e,n),a}i.prototype.parse=function(t,e,n){if(!r.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),o=-1!==i&&i<t.indexOf("#")?"?":"#",l=t.split(o);l[0]=l[0].replace(/\\/g,"/");var v=t=l.join(o);if(v=v.trim(),!n&&1===t.split("#").length){var x=u.exec(v);if(x)return this.path=v,this.href=v,this.pathname=x[1],x[2]?(this.search=x[2],this.query=e?y.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var _=s.exec(v);if(_){var T=(_=_[0]).toLowerCase();this.protocol=T,v=v.substr(_.length)}if(n||_||v.match(/^\/\/[^@\/]+@[^@\/]+/)){var O="//"===v.substr(0,2);!O||_&&b[_]||(v=v.substr(2),this.slashes=!0)}if(!b[_]&&(O||_&&!m[_])){for(var w,S,I=-1,N=0;N<f.length;N++)-1!==(C=v.indexOf(f[N]))&&(-1===I||C<I)&&(I=C);for(-1!==(S=-1===I?v.lastIndexOf("@"):v.lastIndexOf("@",I))&&(w=v.slice(0,S),v=v.slice(S+1),this.auth=decodeURIComponent(w)),I=-1,N=0;N<c.length;N++){var C;-1!==(C=v.indexOf(c[N]))&&(-1===I||C<I)&&(I=C)}-1===I&&(I=v.length),this.host=v.slice(0,I),v=v.slice(I),this.parseHost(),this.hostname=this.hostname||"";var R="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!R)for(var A=this.hostname.split(/\./),k=(N=0,A.length);N<k;N++){var E=A[N];if(E&&!E.match(h)){for(var L="",D=0,P=E.length;D<P;D++)E.charCodeAt(D)>127?L+="x":L+=E[D];if(!L.match(h)){var M=A.slice(0,N),q=A.slice(N+1),j=E.match(g);j&&(M.push(j[1]),q.unshift(j[2])),q.length&&(v="/"+q.join(".")+v),this.hostname=M.join(".");break}}}this.hostname=this.hostname.length>255?"":this.hostname.toLowerCase(),R||(this.hostname=a.toASCII(this.hostname)),this.host=(this.hostname||"")+(this.port?":"+this.port:""),this.href+=this.host,R&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==v[0]&&(v="/"+v))}if(!p[T])for(N=0,k=d.length;N<k;N++){var F=d[N];if(-1!==v.indexOf(F)){var G=encodeURIComponent(F);G===F&&(G=escape(F)),v=v.split(F).join(G)}}var V=v.indexOf("#");-1!==V&&(this.hash=v.substr(V),v=v.slice(0,V));var z=v.indexOf("?");return-1!==z?(this.search=v.substr(z),this.query=v.substr(z+1),e&&(this.query=y.parse(this.query)),v=v.slice(0,z)):e&&(this.search="",this.query={}),v&&(this.pathname=v),m[T]&&this.hostname&&!this.pathname&&(this.pathname="/"),(this.pathname||this.search)&&(this.path=(this.pathname||"")+(this.search||"")),this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=(t=encodeURIComponent(t)).replace(/%3A/i,":"),t+="@");var e=this.protocol||"",n=this.pathname||"",a=this.hash||"",i=!1,s="";this.host?i=t+this.host:this.hostname&&(i=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&r.isObject(this.query)&&Object.keys(this.query).length&&(s=y.stringify(this.query));var o=this.search||s&&"?"+s||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||m[e])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),a&&"#"!==a.charAt(0)&&(a="#"+a),o&&"?"!==o.charAt(0)&&(o="?"+o),e+i+(n=n.replace(/[?#]/g,(function(t){return encodeURIComponent(t)})))+(o=o.replace("#","%23"))+a},i.prototype.resolve=function(t){return this.resolveObject(v(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(r.isString(t)){var e=new i;e.parse(t,!1,!0),t=e}for(var n=new i,a=Object.keys(this),s=0;s<a.length;s++){var o=a[s];n[o]=this[o]}if(n.hash=t.hash,""===t.href)return n.href=n.format(),n;if(t.slashes&&!t.protocol){for(var u=Object.keys(t),l=0;l<u.length;l++){var d=u[l];"protocol"!==d&&(n[d]=t[d])}return m[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(t.protocol&&t.protocol!==n.protocol){if(!m[t.protocol]){for(var c=Object.keys(t),f=0;f<c.length;f++){var h=c[f];n[h]=t[h]}return n.href=n.format(),n}if(n.protocol=t.protocol,t.host||b[t.protocol])n.pathname=t.pathname;else{for(var g=(t.pathname||"").split("/");g.length&&!(t.host=g.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==g[0]&&g.unshift(""),g.length<2&&g.unshift(""),n.pathname=g.join("/")}return n.search=t.search,n.query=t.query,n.host=t.host||"",n.auth=t.auth,n.hostname=t.hostname||t.host,n.port=t.port,(n.pathname||n.search)&&(n.path=(n.pathname||"")+(n.search||"")),n.slashes=n.slashes||t.slashes,n.href=n.format(),n}var p=n.pathname&&"/"===n.pathname.charAt(0),y=t.host||t.pathname&&"/"===t.pathname.charAt(0),v=y||p||n.host&&t.pathname,x=v,_=n.pathname&&n.pathname.split("/")||[],T=(g=t.pathname&&t.pathname.split("/")||[],n.protocol&&!m[n.protocol]);if(T&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===g[0]?g[0]=t.host:g.unshift(t.host)),t.host=null),v=v&&(""===g[0]||""===_[0])),y)n.host=t.host||""===t.host?t.host:n.host,n.hostname=t.hostname||""===t.hostname?t.hostname:n.hostname,n.search=t.search,n.query=t.query,_=g;else if(g.length)_||(_=[]),_.pop(),_=_.concat(g),n.search=t.search,n.query=t.query;else if(!r.isNullOrUndefined(t.search))return T&&(n.hostname=n.host=_.shift(),(N=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=N.shift(),n.host=n.hostname=N.shift())),n.search=t.search,n.query=t.query,r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n;if(!_.length)return n.pathname=null,n.path=n.search?"/"+n.search:null,n.href=n.format(),n;for(var O=_.slice(-1)[0],w=(n.host||t.host||_.length>1)&&("."===O||".."===O)||""===O,S=0,I=_.length;I>=0;I--)"."===(O=_[I])?_.splice(I,1):".."===O?(_.splice(I,1),S++):S&&(_.splice(I,1),S--);if(!v&&!x)for(;S--;S)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),w&&"/"!==_.join("/").substr(-1)&&_.push("");var N,C=""===_[0]||_[0]&&"/"===_[0].charAt(0);return T&&(n.hostname=n.host=C?"":_.length?_.shift():"",(N=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=N.shift(),n.host=n.hostname=N.shift())),(v=v||n.host&&_.length)&&!C&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=t.auth||n.auth,n.slashes=n.slashes||t.slashes,n.href=n.format(),n},i.prototype.parseHost=function(){var t=this.host,e=o.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},"D/JM":function(t,e,n){!function(t){"use strict";t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},D0XW:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("3N8a");const r=new(n("IjjT").a)(a.a)},D4zM:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e){this.elementRef=t,this.renderer=e}ngOnInit(){this.renderer.setAttribute(this.elementRef.nativeElement,"tabindex","-1"),this.iElement=this.renderer.createElement("i"),this.renderer.addClass(this.iElement,"fa"),this.renderer.appendChild(this.elementRef.nativeElement,this.iElement),this.update()}getInputElement(){return document.getElementById(this.cdPasswordButton)}update(){const t=this.getInputElement();t&&"text"===t.type?(this.renderer.removeClass(this.iElement,"fa-eye"),this.renderer.addClass(this.iElement,"fa-eye-slash")):(this.renderer.removeClass(this.iElement,"fa-eye-slash"),this.renderer.addClass(this.iElement,"fa-eye"))}onClick(){const t=this.getInputElement();t.type="password"===t.type?"text":"password",this.update()}}},DH7j:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>Array.isArray||(t=>t&&"number"==typeof t.length))()},"DKr+":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["thodde secondanim","thodde second"],ss:[t+" secondanim",t+" second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka voran","ek vor"],hh:[t+" voranim",t+" voram"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?r[n][0]:r[n][1]}t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})}(n("wd/R"))},DNAf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{constructor(t,e){this.customValidations={},this.i18n=e,this.empty=this.i18n("No items selected."),this.selectionLimit={tooltip:this.i18n("Deselect item to select again"),text:this.i18n("Selection limit reached")},this.filter=this.i18n("Filter tags"),this.add=this.i18n("Add badge"),this.noOptions=this.i18n("There are no items available."),a.merge(this,t)}}},DPsx:function(t,e,n){var a=n("g6v/"),r=n("0Dky"),i=n("zBJ4");t.exports=!a&&!r((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},DSvg:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("vkgz"),r=n("aexS"),i=n("8Y7J"),s=n("IheW"),o=n("iInd"),u=n("pL04");let l=(()=>{class t{constructor(t,e,n){this.authStorageService=t,this.http=e,this.router=n}check(t){return this.http.post("api/auth/check",{token:t})}login(t){return this.http.post("api/auth",t).pipe(Object(a.a)(t=>{this.authStorageService.set(t.username,t.token,t.permissions,t.sso,t.pwdExpirationDate,t.pwdUpdateRequired)}))}logout(t=null){return this.http.post("api/auth/logout",null).subscribe(e=>{this.router.navigate(["/login"],{skipLocationChange:!0}),this.authStorageService.remove(),t&&t(),window.location.replace(e.redirect_url)})}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](r.a),i["ɵɵinject"](s.c),i["ɵɵinject"](o.m))},token:t,providedIn:u.a}),t})()},Dd78:function(t,e,n){var a=n("qG07"),r=n("aT2Y"),i=n("Gf4A");t.exports=function(){this.size=0,this.__data__={hash:new a,map:new(i||r),string:new a}}},Dkky:function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n("wd/R"))},Dmvi:function(t,e,n){!function(t){"use strict";t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},DoHr:function(t,e,n){!function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(t,n){switch(n){case"d":case"D":case"Do":case"DD":return t;default:if(0===t)return t+"'ıncı";var a=t%10;return t+(e[a]||e[t%100-a]||e[t>=100?100:null])}},week:{dow:1,doy:7}})}(n("wd/R"))},DqMs:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("IZUe"),s=n("MdoF"),o=n("CNMR");n("/NlG"),n("GiVz"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return v}));var u=a["ɵcrt"]({encapsulation:0,styles:[[".alert-panel-icon[_ngcontent-%COMP%]{vertical-align:top;padding-right:.5em}.alert-panel-title[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"td",[["class","alert-panel-icon"],["rowspan","2"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpad"](4,1)],(function(t,e){var n=e.component,r=a["ɵinlineInterpolate"](2,"alert-",n.bootstrapClass," ",n.typeIcon,""),i=t(e,4,0,n.icons.large3x);t(e,3,0,r,i)}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-title"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,2,"td",[["class","alert-panel-text"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](9,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.showIcon),t(e,5,0,n.showTitle),t(e,9,0,a["ɵnov"](e.parent,6))}),null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-icon"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"i",[["aria-hidden","true"]],[[8,"className",0]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](2,"alert-",n.bootstrapClass," ",n.typeIcon,""))}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-title"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](5,0,null,null,2,"td",[["class","alert-panel-text"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](7,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.showIcon),t(e,4,0,n.showTitle),t(e,7,0,a["ɵnov"](e.parent,6))}),null)}function m(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"button",[["autofocus",""],["class","btn btn-light tc_backButton"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.backAction.emit()&&a),a}),null,null)),a["ɵdid"](2,4210688,null,0,i.a,[a.ElementRef],{autofocus:[0,"autofocus"]},null),(t()(),a["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,2,0,"")}),null)}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"alert",[],null,null,null,s.c,s.b)),a["ɵdid"](1,114688,null,0,o.a,[o.b,a.ChangeDetectorRef],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,3,"table",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["slim",2]],null,0,null,b)),(t()(),a["ɵand"](0,[["content",2]],null,0,null,m)),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](8,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](1,"",n.bootstrapClass,"")),t(e,4,0,"normal"===n.size,a["ɵnov"](e,5)),t(e,8,0,n.backAction.observers.length>0)}),null)}},Dwqy:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("wd/R");class r{constructor(){}transform(t){return t?a(1e3*t).fromNow():"unknown"}}},DxQv:function(t,e,n){!function(t){"use strict";t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},Dzi0:function(t,e,n){!function(t){"use strict";t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n("wd/R"))},"E+lV":function(t,e,n){!function(t){"use strict";var e={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},E2fk:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return"[INF]"===t?"info":"[WRN]"===t?"warn":"[ERR]"===t?"err":""}}},E9XD:function(t,e,n){"use strict";var a=n("I+eb"),r=n("1Y/n").left,i=n("pkCn"),s=n("rkAj"),o=i("reduce"),u=s("reduce",{1:0});a({target:"Array",proto:!0,forced:!o||!u},{reduce:function(t){return r(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},EApP:function(t,e,n){"use strict";n.d(e,"a",(function(){return _})),n.d(e,"b",(function(){return d})),n.d(e,"c",(function(){return v})),n.d(e,"d",(function(){return o})),n.d(e,"e",(function(){return S})),n.d(e,"f",(function(){return N})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return O})),n.d(e,"i",(function(){return T})),n.d(e,"j",(function(){return y}));var a=n("8Y7J"),r=n("XNiG"),i=n("cUpR"),s=n("SVse");let o=class{};class u{constructor(t,e,n,a,i,s){this.toastId=t,this.config=e,this.message=n,this.title=a,this.toastType=i,this.toastRef=s,this._onTap=new r.a,this._onAction=new r.a,this.toastRef.afterClosed().subscribe(()=>{this._onAction.complete(),this._onTap.complete()})}triggerTap(){this._onTap.next(),this.config.tapToDismiss&&this._onTap.complete()}onTap(){return this._onTap.asObservable()}triggerAction(t){this._onAction.next(t)}onAction(){return this._onAction.asObservable()}}const l={maxOpened:0,autoDismiss:!1,newestOnTop:!0,preventDuplicates:!1,countDuplicates:!1,resetTimeoutOnDuplicate:!1,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},closeButton:!1,disableTimeOut:!1,timeOut:5e3,extendedTimeOut:1e3,enableHtml:!1,progressBar:!1,toastClass:"ngx-toastr",positionClass:"toast-top-right",titleClass:"toast-title",messageClass:"toast-message",easing:"ease-in",easeTime:300,tapToDismiss:!0,onActivateTick:!1,progressAnimation:"decreasing"},d=new a.InjectionToken("ToastConfig");class c{constructor(t,e){this.component=t,this.injector=e}attach(t,e){return this._attachedHost=t,t.attach(this,e)}detach(){const t=this._attachedHost;if(t)return this._attachedHost=void 0,t.detach()}get isAttached(){return null!=this._attachedHost}setAttachedHost(t){this._attachedHost=t}}class f extends class{attach(t,e){return this._attachedPortal=t,this.attachComponentPortal(t,e)}detach(){this._attachedPortal&&this._attachedPortal.setAttachedHost(),this._attachedPortal=void 0,this._disposeFn&&(this._disposeFn(),this._disposeFn=void 0)}setDisposeFn(t){this._disposeFn=t}}{constructor(t,e,n){super(),this._hostDomElement=t,this._componentFactoryResolver=e,this._appRef=n}attachComponentPortal(t,e){const n=this._componentFactoryResolver.resolveComponentFactory(t.component);let a;return a=n.create(t.injector),this._appRef.attachView(a.hostView),this.setDisposeFn(()=>{this._appRef.detachView(a.hostView),a.destroy()}),e?this._hostDomElement.insertBefore(this._getComponentRootNode(a),this._hostDomElement.firstChild):this._hostDomElement.appendChild(this._getComponentRootNode(a)),a}_getComponentRootNode(t){return t.hostView.rootNodes[0]}}let h=(()=>{let t=class{constructor(t){this._document=t}ngOnDestroy(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const t=this._document.createElement("div");t.classList.add("overlay-container"),this._document.body.appendChild(t),this._containerElement=t}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(s.DOCUMENT))},token:t,providedIn:"root"}),t})();class g{constructor(t){this._portalHost=t}attach(t,e=!0){return this._portalHost.attach(t,e)}detach(){return this._portalHost.detach()}}let p=(()=>{let t=class{constructor(t,e,n,a){this._overlayContainer=t,this._componentFactoryResolver=e,this._appRef=n,this._document=a,this._paneElements=new Map}create(t,e){return this._createOverlayRef(this.getPaneElement(t,e))}getPaneElement(t="",e){return this._paneElements.get(e)||this._paneElements.set(e,{}),this._paneElements.get(e)[t]||(this._paneElements.get(e)[t]=this._createPaneElement(t,e)),this._paneElements.get(e)[t]}_createPaneElement(t,e){const n=this._document.createElement("div");return n.id="toast-container",n.classList.add(t),n.classList.add("toast-container"),e?e.getContainerElement().appendChild(n):this._overlayContainer.getContainerElement().appendChild(n),n}_createPortalHost(t){return new f(t,this._componentFactoryResolver,this._appRef)}_createOverlayRef(t){return new g(this._createPortalHost(t))}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(h),Object(a["ɵɵinject"])(a.ComponentFactoryResolver),Object(a["ɵɵinject"])(a.ApplicationRef),Object(a["ɵɵinject"])(s.DOCUMENT))},token:t,providedIn:"root"}),t})();class b{constructor(t){this._overlayRef=t,this.duplicatesCount=0,this._afterClosed=new r.a,this._activate=new r.a,this._manualClose=new r.a,this._resetTimeout=new r.a,this._countDuplicate=new r.a}manualClose(){this._manualClose.next(),this._manualClose.complete()}manualClosed(){return this._manualClose.asObservable()}timeoutReset(){return this._resetTimeout.asObservable()}countDuplicate(){return this._countDuplicate.asObservable()}close(){this._overlayRef.detach(),this._afterClosed.next(),this._manualClose.next(),this._afterClosed.complete(),this._manualClose.complete(),this._activate.complete(),this._resetTimeout.complete(),this._countDuplicate.complete()}afterClosed(){return this._afterClosed.asObservable()}isInactive(){return this._activate.isStopped}activate(){this._activate.next(),this._activate.complete()}afterActivate(){return this._activate.asObservable()}onDuplicate(t,e){t&&this._resetTimeout.next(),e&&this._countDuplicate.next(++this.duplicatesCount)}}class m{constructor(t,e){this._toastPackage=t,this._parentInjector=e}get(t,e,n){return t===u?this._toastPackage:this._parentInjector.get(t,e,n)}}let y=(()=>{let t=class{constructor(t,e,n,a,r){this.overlay=e,this._injector=n,this.sanitizer=a,this.ngZone=r,this.currentlyActive=0,this.toasts=[],this.index=0,this.toastrConfig=Object.assign({},t.default,t.config),t.config.iconClasses&&(this.toastrConfig.iconClasses=Object.assign({},t.default.iconClasses,t.config.iconClasses))}show(t,e,n={},a=""){return this._preBuildNotification(a,t,e,this.applyConfig(n))}success(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.success||"",t,e,this.applyConfig(n))}error(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.error||"",t,e,this.applyConfig(n))}info(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.info||"",t,e,this.applyConfig(n))}warning(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.warning||"",t,e,this.applyConfig(n))}clear(t){for(const e of this.toasts)if(void 0!==t){if(e.toastId===t)return void e.toastRef.manualClose()}else e.toastRef.manualClose()}remove(t){const e=this._findToast(t);if(!e)return!1;if(e.activeToast.toastRef.close(),this.toasts.splice(e.index,1),this.currentlyActive=this.currentlyActive-1,!this.toastrConfig.maxOpened||!this.toasts.length)return!1;if(this.currentlyActive<this.toastrConfig.maxOpened&&this.toasts[this.currentlyActive]){const t=this.toasts[this.currentlyActive].toastRef;t.isInactive()||(this.currentlyActive=this.currentlyActive+1,t.activate())}return!0}findDuplicate(t,e,n){for(const a of this.toasts)if(a.message===t)return a.toastRef.onDuplicate(e,n),a;return null}applyConfig(t={}){return Object.assign({},this.toastrConfig,t)}_findToast(t){for(let e=0;e<this.toasts.length;e++)if(this.toasts[e].toastId===t)return{index:e,activeToast:this.toasts[e]};return null}_preBuildNotification(t,e,n,a){return a.onActivateTick?this.ngZone.run(()=>this._buildNotification(t,e,n,a)):this._buildNotification(t,e,n,a)}_buildNotification(t,e,n,r){if(!r.toastComponent)throw new Error("toastComponent required");const i=this.findDuplicate(e,this.toastrConfig.resetTimeoutOnDuplicate&&r.timeOut>0,this.toastrConfig.countDuplicates);if(e&&this.toastrConfig.preventDuplicates&&null!==i)return i;this.previousToastMessage=e;let s=!1;this.toastrConfig.maxOpened&&this.currentlyActive>=this.toastrConfig.maxOpened&&(s=!0,this.toastrConfig.autoDismiss&&this.clear(this.toasts[0].toastId));const o=this.overlay.create(r.positionClass,this.overlayContainer);this.index=this.index+1;let l=e;e&&r.enableHtml&&(l=this.sanitizer.sanitize(a.SecurityContext.HTML,e));const d=new b(o),f=new u(this.index,r,l,n,t,d),h=new m(f,this._injector),g=new c(r.toastComponent,h),p=o.attach(g,this.toastrConfig.newestOnTop);d.componentInstance=p._component;const y={toastId:this.index,message:e||"",toastRef:d,onShown:d.afterActivate(),onHidden:d.afterClosed(),onTap:f.onTap(),onAction:f.onAction(),portal:p};return s||(this.currentlyActive=this.currentlyActive+1,setTimeout(()=>{y.toastRef.activate()})),this.toasts.push(y),y}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(d),Object(a["ɵɵinject"])(p),Object(a["ɵɵinject"])(a.INJECTOR),Object(a["ɵɵinject"])(i.b),Object(a["ɵɵinject"])(a.NgZone))},token:t,providedIn:"root"}),t})(),v=class{constructor(t,e,n){this.toastrService=t,this.toastPackage=e,this.ngZone=n,this.width=-1,this.toastClasses="",this.state={value:"inactive",params:{easeTime:this.toastPackage.config.easeTime,easing:"ease-in"}},this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(t=>{this.duplicatesCount=t})}get displayStyle(){if("inactive"===this.state.value)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state=Object.assign({},this.state,{value:"active"}),!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.outsideTimeout(()=>this.remove(),this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const t=(new Date).getTime();this.width=(this.hideTime-t)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state=Object.assign({},this.state,{value:"active"}),this.outsideTimeout(()=>this.remove(),this.originalTimeout),this.options.timeOut=this.originalTimeout,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10)}remove(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.state=Object.assign({},this.state,{value:"removed"}),this.outsideTimeout(()=>this.toastrService.remove(this.toastPackage.toastId),+this.toastPackage.config.easeTime))}tapToast(){"removed"!==this.state.value&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0!==this.options.disableTimeOut&&"extendedTimeOut"!==this.options.disableTimeOut&&0!==this.options.extendedTimeOut&&"removed"!==this.state.value&&(this.outsideTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}outsideTimeout(t,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.timeout=setTimeout(()=>this.runInsideAngular(t),e)):this.timeout=setTimeout(()=>t(),e)}outsideInterval(t,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.intervalId=setInterval(()=>this.runInsideAngular(t),e)):this.intervalId=setInterval(()=>t(),e)}runInsideAngular(t){this.ngZone?this.ngZone.run(()=>t()):t()}};var x;const _=Object.assign({},l,{toastComponent:v});let T=x=class{static forRoot(t={}){return{ngModule:x,providers:[{provide:d,useValue:{default:_,config:t}}]}}},O=class{static forRoot(t={}){return{ngModule:T,providers:[{provide:d,useValue:{default:l,config:t}}]}}};var w;let S=class{constructor(t,e,n){this.toastrService=t,this.toastPackage=e,this.appRef=n,this.width=-1,this.toastClasses="",this.state="inactive",this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(t=>{this.duplicatesCount=t})}get displayStyle(){if("inactive"===this.state)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state="active",!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.timeout=setTimeout(()=>{this.remove()},this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))),this.options.onActivateTick&&this.appRef.tick()}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const t=(new Date).getTime();this.width=(this.hideTime-t)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state="active",this.options.timeOut=this.originalTimeout,this.timeout=setTimeout(()=>this.remove(),this.originalTimeout),this.hideTime=(new Date).getTime()+(this.originalTimeout||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))}remove(){"removed"!==this.state&&(clearTimeout(this.timeout),this.state="removed",this.timeout=setTimeout(()=>this.toastrService.remove(this.toastPackage.toastId)))}tapToast(){"removed"!==this.state&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0!==this.options.disableTimeOut&&"extendedTimeOut"!==this.options.disableTimeOut&&0!==this.options.extendedTimeOut&&"removed"!==this.state&&(this.timeout=setTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10)))}};const I=Object.assign({},l,{toastComponent:S});let N=w=class{static forRoot(t={}){return{ngModule:w,providers:[{provide:d,useValue:{default:I,config:t}}]}}}},EEJc:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("ajRT");n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return s})),n.d(e,"a",(function(){return u}));var i=a["ɵcrt"]({encapsulation:0,styles:[[".modal-header[_ngcontent-%COMP%]{border-bottom:1px solid #d1d1d1;background-color:#f5f5f5;border-radius:5px 5px 0 0}  .modal-footer{border-bottom:1px solid #d1d1d1;background-color:#f5f5f5;border-radius:0 0 5px 5px}  .modal-body{max-height:70vh;overflow-y:auto;overflow-x:hidden}"]],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["class","modal-header"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"h4",[["class","modal-title float-left"]],null,null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵeld"](3,0,null,null,2,"button",[["aria-label","Close"],["class","close float-right"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.close()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["×"])),a["ɵncd"](null,1)],null,null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-modal",[],null,null,null,s,i)),a["ɵdid"](1,49152,null,0,r.a,[],null,null)],null,null)}var u=a["ɵccf"]("cd-modal",r.a,o,{modalRef:"modalRef"},{hide:"hide"},[".modal-title",".modal-content"])},ENF9:function(t,e,n){"use strict";var a,r=n("2oRo"),i=n("4syw"),s=n("8YOa"),o=n("bWFh"),u=n("rKzb"),l=n("hh1v"),d=n("afO8").enforce,c=n("f5p1"),f=!r.ActiveXObject&&"ActiveXObject"in r,h=Object.isExtensible,g=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},p=t.exports=o("WeakMap",g,u);if(c&&f){a=u.getConstructor(g,"WeakMap",!0),s.REQUIRED=!0;var b=p.prototype,m=b.delete,y=b.has,v=b.get,x=b.set;i(b,{delete:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),m.call(this,t)||e.frozen.delete(t)}return m.call(this,t)},has:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),y.call(this,t)||e.frozen.has(t)}return y.call(this,t)},get:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),y.call(this,t)?v.call(this,t):e.frozen.get(t)}return v.call(this,t)},set:function(t,e){if(l(t)&&!h(t)){var n=d(this);n.frozen||(n.frozen=new a),y.call(this,t)?x.call(this,t,e):n.frozen.set(t,e)}else x.call(this,t,e);return this}})}},EOgW:function(t,e,n){!function(t){"use strict";t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n("wd/R"))},ES0t:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("8Y7J"),r=n("KOzp"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:[".bs3.popover-top[_nghost-%COMP%] {\n      margin-bottom: 10px;\n    }\n    .bs3.popover.top[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -2px;\n    }\n    .bs3.popover.top[_nghost-%COMP%] {\n      margin-bottom: 10px;\n    }\n    .popover.bottom[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -4px;\n    }\n    .bs3.bs-popover-left[_nghost-%COMP%] {\n      margin-right: .5rem;\n    }\n    .bs3.bs-popover-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs3.bs-popover-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%]{\n      margin: .3rem 0;\n    }"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"h3",[["class","popover-title popover-header"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function u(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","popover-arrow arrow"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"div",[["class","popover-content popover-body"]],null,null,null,null,null)),a["ɵncd"](null,0)],(function(t,e){t(e,2,0,e.component.title)}),null)}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"popover-container",[["role","tooltip"],["style","display:block;"]],[[8,"className",0],[2,"show",null],[2,"bs3",null]],null,null,u,s)),a["ɵdid"](1,49152,null,0,r.b,[r.a],null,null)],null,(function(t,e){t(e,0,0,"popover in popover-"+a["ɵnov"](e,1).placement+" bs-popover-"+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).containerClass,!a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).isBs3)}))}var d=a["ɵccf"]("popover-container",r.b,l,{placement:"placement",title:"title"},{},["*"])},EWmY:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},EY2u:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("HDdC");const r=new a.a(t=>t.complete());function i(t){return t?function(t){return new a.a(e=>t.schedule(()=>e.complete()))}(t):r}},Eey9:function(t,e){t.exports=function(t,e,n){var a=-1,r=t.length;e<0&&(e=-e>r?0:r+e),(n=n>r?r:n)<0&&(n+=r),r=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(r);++a<r;)i[a]=t[a+e];return i}},EgGo:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("SVse"),r=n("sne2");class i{constructor(t){this.base=t}static concatURLSegments(t){return t.reduce(a.Location.joinWithSlash)}static buildURL(t,...e){return i.concatURLSegments([...t?["/"]:[],...e])}getURL(t,e=!0,...n){return i.buildURL(e,this.base,t,...n)}getCreate(t=!0){return this.getURL(r.e.CREATE,t)}getCreateFrom(t,e=!0){return this.getURL(r.e.CREATE,e,t)}getDelete(t=!0){return this.getURL(r.e.DELETE,t)}getEdit(t,e=!0){return this.getURL(r.e.EDIT,e,t)}getUpdate(t,e=!0){return this.getURL(r.e.UPDATE,e,t)}getAdd(t=!0){return this.getURL(r.e.ADD,t)}getRemove(t=!0){return this.getURL(r.e.REMOVE,t)}getRecreate(t,e=!0){return this.getURL(r.e.RECREATE,e,t)}}},EiPl:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="de-DE">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Navigation umschalten</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dashboard</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Verzeichnis</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitore</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Services</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfiguration</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH-Zuordnung</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Manager-Module</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Protokolle</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Überwachung</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pools</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Block</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Images</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Spiegelung</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Dateisysteme</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Objektgateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Buckets</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Daten \n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> für\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>werden abgerufen. Bitte warten...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Zuvor zwischengespeicherte Daten\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  für \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> werden angezeigt.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Daten\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> für\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> konnten nicht geladen werden.\n  Prüfen Sie die Clusterintegrität.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Benachrichtigungen löschen</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Benachrichtigungen entfernen</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Dauer:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>Es sind keine Benachrichtigungen verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Aufträge und Benachrichtigungen</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Sprache auswählen</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Bereichsdaten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Lesen Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Überwachungsfunktion.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Das Grafana-Dashboard ist nicht vorhanden. In der\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> wird beschrieben,\n  wie Grafana Dashboards hinzugefügt werden.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana-Zeitauswahl</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Einstellungen für Zurücksetzungen</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Entfernen Sie den aktuellen Konfigurationswert. Stattdessen wird der Standard-Konfigurationswert übernommen und verwendet.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Zurück</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Das Passwort läuft in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>weniger als 1 \n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>Tag ab. Klicken Sie \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> hier \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, um es jetzt zu ändern.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Das Passwort läuft in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>Tag(en) ab. Klicken Sie \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> hier \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, um es jetzt zu ändern.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Das Modul "Orchestrator" ist nicht verfügbar. Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>zum Konfigurieren und Aktivieren dieses Moduls.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Daten konnten nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Filter löschen</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>ausgewählt</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>gefunden</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>insgesamt</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Name</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Beschreibung</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Detaillierte Beschreibung</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Standard</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon-Standard</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Werte</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Standard --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>wahr</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>falsch</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Speichern</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSH-Betrachter</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Laden...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Hostname</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Dies ist ein Pflichtfeld.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>Der ausgewählte Hostname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Sind Sie sicher dass Sie die ausgewählten Einträge \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> möchten?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Sind Sie sicher dass Sie die ausgewählten \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> möchten?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ja, ich bin sicher.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Abbrechen</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Schließen</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Liste mit Hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Gesamtleistung</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Laufwerke</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Keine Einträge gefunden</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Clusterprotokolle</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Revisionsprotokoll</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priorität:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Schlüsselwort:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Datum:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datumsauswahl</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Zeitraum:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Konfiguration wird geladen...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Die Konfiguration konnte nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Manager-Modul bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Der eingegebene Wert ist kein gültiger UUID, z. B.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Der eingegebene Wert muss eine gültige IP-Adresse sein.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er muss kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/> sein oder diesem Wert entsprechen.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er muss größer als \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/> sein oder diesem Wert entsprechen.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Der eingegebene Wert muss eine Zahl sein.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Der eingegebene Wert muss eine Zahl oder Dezimalzahl sein.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aktualisiere</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Cluster-ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Monmap geändert</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>Monmap-Epoche</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>erforderliche Verbindung</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>erforderliche Überwachung</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>In Quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Nicht in Quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>Vorschau der OSD-Erstellung</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> Laufwerke\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Löschen</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Geteilte Laufwerke</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL Slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>Wie viele OSDs pro WAL-Laufwerk.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Geben Sie 0 an, um das Orchestrator-Backend entscheiden zu lassen.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Der Wert sollte größer als oder gleich 0 sein</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB Slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>Wie viele OSDs pro DB-Laufwerk.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funktionen</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Vorschau</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Clusterweite OSD-Flags</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Absenden</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Erweitert...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Erweiterte Konfigurationsoptionen</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD-Wiederherstellungspriorität</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorität</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Prioritätswerte anpassen</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Dies ist ein Pflichtfeld!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Der Wert muss zwischen 0 und 1 liegen.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Neu gewichten</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Tief } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {tief } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD-Liste</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Aktive Warnungen</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>Alle Warnungen</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Wählen Sie das zu vergleichende Attribut --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Wert</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Regulären Ausdruck verwenden</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Löschen</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Das Bearbeiten einer Stummschaltung löscht die Vorherige und legt eine neue Stummschaltung an.</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Ersteller</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Kommentar</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Startzeit</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>Wenn die Startzeit in der Vergangenheit liegt, wird die Erstellungszeit verwendet</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Dauer</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>Ende</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Integrität</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiken</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für NFS Ganesha.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clients</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Jeder Client hat Zugriff</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adressen</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Pflichtfeld</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Muss mindestens einen kommagetrennten Wert enthalten</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Beispielsweise:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Zugriffstyp</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Clients hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Kein Cluster verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Cluster auswählen --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Daemon hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Speicher-Back-End</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Keine Datenpools verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Speicher-Back-End auswählen --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Objektgatewaybenutzer</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Keine Benutzer verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Objektgatewaybenutzer auswählen --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS-Benutzer-ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- keine Clients verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephx-Client auswählen --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS-Name</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- Kein CephFS Dateisystem verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- CephFS Dateisystem auswählen --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Sicherheitsbezeichnung</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Sicherheitsbezeichnung aktivieren</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS-Pfad</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Pfad muss mit einem \'/\' beginnen und kann von einem Wort gefolgt werden</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Neues Verzeichnis wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Pfad</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Pfad darf nur ein einzelner \'/\' oder ein Wort sein</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Neuer Bucket wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS-Protokoll</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS-Tag</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternativer Zugriff für \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>-Mountpunkte (dürfen keinen führenden / enthalten)\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Clients können Unterverzeichnisse möglicherweise nicht mounten (d. h. wenn der Pfad = foo ist, kann der Client foo/baz möglicherweise nicht mounten).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Wenn unterschiedliche Tag-Optionen verwendet werden, wird derselbe Pfad möglicherweise mehrfach exportiert.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>Die Position dieses \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>-Exports\n                auf dem \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo-Dateisystem\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (muss eindeutig sein).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Wenn unterschiedliche Pseudo-Optionen verwendet werden, wird derselbe Pfad möglicherweise mehrfach exportiert.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Kein Zugriffstyp verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Zugriffstyp auswählen --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>Das NFS-Backend für das Objektgateway besitzt eine Reihe von\n Einschränkungen, die Schreibvorgänge von Anwendungen auf diese\n Freigaben ernsthaft beeinträchtigen. Bitte konsultieren Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> Dokumentation \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> für weitere Informationen, bevor Sie den Schreibzugriff aktivieren.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Kein Squash verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Durchzuführende Benutzer-ID-Squashing-Art auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Transportprotokoll</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Altes Passwort</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>Das alte und neue Passwort müssen unterschiedlich sein.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>Neues Passwort</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Neues Passwort bestätigen</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Passwortbestätigung stimmt nicht mit dem neuen Passwort überein.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Bitte legen Sie ein neues Passwort fest.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>Sie werden anschließend auf die Login-Seite weitergeleitet.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Willkommen bei Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Benutzername ist erforderlich</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Passwort ist erforderlich</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Anmeldung</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Der Benutzer ist in Ceph leider nicht enthalten.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Kehren Sie zur \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Anmeldeseite\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zurück. Sie werden vom Identitätsanbieter abgemeldet, wenn Sie versuchen, sich erneut anzumelden.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Verboten</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Leider sind Sie nicht berechtigt, den gewünschten Inhalt anzuzeigen.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Leider konnte der gewünschte Inhalt nicht gefunden werden.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Weder Hostname noch OSD ID angegeben</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>bestanden</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>fehlgeschlagen</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Laufwerksinformationen</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>Keine SMART-Daten für dieses Laufwerk verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART-Daten werden geladen.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD-Konfiguration</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Entfernen Sie den lokalen Konfigurationswert. Stattdessen wird der übergeordnete Konfigurationswert übernommen und verwendet.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Der Mindestwert lautet 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Pool-Liste</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Der Name darf nur alphanumerische Zeichen, Bindestriche und Unterstriche enthalten.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Der ausgewählte Erasure-Coding-Profilname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Laufwerksklasse</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Datenblöcke (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Muss größer oder gleich 2 sein.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Datenblöcke für die Codierung (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Muss größer oder gleich 1 sein.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Dauerhaftigkeitsschätzung (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Standort (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Crush-Ausfalldomäne</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Crush-Standort</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Keine</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technik</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Paketgröße</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crush-Stamm</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Crush-Geräteklasse</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>beliebig</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Verzeichnis</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Name...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Der ausgewählte Poolname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Pooltyp</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Pooltyp auswählen --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoskalierung</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Platzierungsgruppen</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Es wird mindestens eine Platzierungsgruppe benötigt.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Ihr Cluster kann nicht so viele Platzierungsgruppen verarbeiten. Berechnen Sie die benötigte Anzahl an Platzierungsgruppen.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Hilfe zur Berechnung</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>Die aktuellen Einstellungen für die Platzierungsgruppen wurden für Sie berechnet.\n                    Stellen Sie vor dem Senden sicher, dass die Werte Ihren Anforderungen entsprechen.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Reproduzierte Größe</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>Die angegebene Größe liegt außerhalb des Bereichs. Gültige Werte liegen zwischen\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> und \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flags</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC-Überschreibungen</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Anwendungen</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Kein Erasure-Coding-Profil verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Erasure-Coding-Profil auswählen --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Crush-Regelsatz</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>Ein neuer CRUSH Regelsatz wird implizit erstellt.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>Keine Regeln vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Crush-Regel auswählen --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crush-Regel</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush-Schritte</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Komprimierung</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modus</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorithmus</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Kein Komprimierungsalgorithmus für Erasure-Coding verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimale Blobgröße</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>z. B. 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Wert sollte größer als 0 sein</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Wert sollte niedriger als die maximale Blobgröße sein</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Maximale Blobgröße</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>z. B. 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Wert sollte größer als die minimale Blobgröße sein</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Verhältnis</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Komprimierungsverhältnis</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Wert sollte zwischen 0,0 und 1,0 liegen</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Kontingente</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max. Bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Lassen Sie das Feld leer oder geben Sie 0 an, um dieses Quota zu deaktivieren.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>Ein gültiges Kontingent sollte größer als 0 sein.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>z. B. 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max. Objekte</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>Der Wert sollte größer als oder gleich 0 sein</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Details</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Leistungsdetails</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Details zu den Cache-Ebenen</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Bootstrap-Token erstellen</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site-Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>Mindestens ein Pool ist erforderlich.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Erzeugen</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Erzeugtes Token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Bootstrap-Token importieren</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Richtung</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>Der Token ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Site-Namen bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site-Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Image in Papierkorb verschieben</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Schutz läuft ab am</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NICHT GESCHÜTZT</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Falsches Datumsformat. Verwenden Sie "TT.MM.JJJJ HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Schutz ist bereits abgelaufen. Wählen Sie ein künftiges Datum aus oder lassen Sie es leer.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Image verschieben</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Muss grösser oder gleich \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Muss kleiner oder gleich \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Übersicht</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Ziele</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Ermittlungsauthentifizierung</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Benutzernamen müssen zwischen 8 und 64 Zeichen lang sein und\n              dürfen nur Buchstaben, \'.\', \'@\', \'-\', \'_\' oder \':\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Passwort</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Gemeinsamer Benutzer</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Gemeinsames Passwort</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Lesen Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für iSCSI-Ziele.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Verfügbare Informationen:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI-Ziele nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Ermittlungsauthentifizierung</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Nur für RBD-Images verfügbar, bei denen \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> aktiviert ist\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Datenpool</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Erstellt</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Größe</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objekte</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Objektgröße</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Bereitgestellt</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>n. v.</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Bereitgestellt gesamt</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Striping-Einheit</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Striping-Anzahl</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Übergeordnet</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Präfix für Blockname</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Reihenfolge</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshots</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Diese Einstellung überschreibt den globalen Wert</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Dies ist der globale Wert. Kein Wert für diese Option wurde für dieses Image festgelegt.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' und \'@\' sind nicht zulässig.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Keine rbd-Pools verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Pool auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- Keine Namensräume verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Namensraum auswählen --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Dedizierten Datenpool verwenden</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Datenpool</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Dedizierter Pool zur Speicherung von RBD-Objektdaten.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Sie müssen die Größe erhöhen.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Erweitert</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Striping</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Stripe-Einheit</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Stripe-Einheit auswählen --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Dies ist ein Pflichtfeld, da eine Stripe-Anzahl definiert wurde!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Die Stripe-Einheit ist größer als die Objektgröße.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Stripe-Anzahl</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Dies ist ein Pflichtfeld, da eine Stripe-Einheit definiert wurde!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Die Stripe-Anzahl muss größer als 0 sein.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Namensraum anlegen</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namensraum existiert bereits.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Sie sind dabei, ein Rollback durchzuführen</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Papierkorb bereinigen</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Alle</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Poolname...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Image wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Zum Wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>Neuen Namen des Images eingeben und klicken</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Neuer Name</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Abgelaufen am</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Geschützt bis</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>Dieses Image ist geschützt bis \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI-Topologie</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Konfigurieren</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Eine Änderung dieser Parameter von ihren Standardwerten ist in der Regel nicht erforderlich.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Bezeichner</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Bestätigen</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Erweiterte Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Ziel-IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN hat ein fehlerhaftes Muster.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>Eine IQN hat die folgende Notation \n\'iqn.$jahr-$monat.$umkehradresse:$definierterName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Zum Beispiel: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Weitere Informationen</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Erweiterte Einstellungen bei diesem Ziel wurden geändert.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portale</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Portal hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>Es sind mindestens \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> Gateways erforderlich.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Einstellungen bei diesem Image wurden geändert.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Image hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL-Authentifizierung</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Initiatoren</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Initiator</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Client-IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Initiator-IQN muss eindeutig sein.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Benutzernamen müssen zwischen 8 und 64 Zeichen lang sein und\n                        dürfen nur Buchstaben, \'.\', \'@\', \'-\', \'_\' oder \':\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Der Initiator gehört zu einer Gruppe. Images werden in der Gruppe konfiguriert.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Keine Elemente hinzugefügt.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Initiator hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Gruppen</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Gruppe</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Gruppe hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namensräume</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Papierkorb</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Probleme</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Wird synchronisiert</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Fertig</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Spiegelungsmodus für Pool bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Wählen Sie zum Bearbeiten des Spiegelungsmodus für den Pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> einen neuen Modus aus der Liste aus und klicken Sie auf \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Aktualisieren\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Vor dem Deaktivieren der Spiegelung müssen Peer-Cluster entfernt werden.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  Peer für Poolspiegelung\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Bearbeiten} other {Hinzufügen} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Clustername</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Der Clustername ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX-ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX-ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>Die CephX ID ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adressen der Monitore</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Kommagetrennte Adressen...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Die Anrede ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64-codierter Schlüssel...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX-Schlüssel muss base64-codiert sein.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Leistungsindikatoren nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für das Objektgateway.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Liste der Daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Leistungsindikatoren</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Bucket-Daten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Der Wert ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Der ausgewählte Name wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Inhaber</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Benutzer auswählen --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Aktiviert</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Indextyp</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Platzierungsregel</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marker</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Maximum für Marker</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Masterversion</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Änderungszeit</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Zonengruppe</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Bucket-Quote</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Maximale Größe</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Unbegrenzt</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Maximale Objekte</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Benutzername</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Benutzername auswählen --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Schlüssel automatisch generieren</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Zugriffsschlüssel</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Geheimer Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Vollständiger Name</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>E-Mail-Adresse</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Angehalten</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>System</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Maximale Buckets</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Befähigungen</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Benutzerquote</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Anzeigen</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Typ auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Berechtigung</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Berechtigung auswählen --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Die ausgewählte Unterbenutzer-ID wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lesen, schreiben</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>voll</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Geheimnis automatisch generieren</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Benutzerdaten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Die Benutzerdaten konnten nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Die ausgewählte Benutzer-ID wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Dies ist keine gültige E-Mail-Adresse.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Die ausgewählte E-Mail-Adresse wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Max. Buckets</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Benutzerdefiniert</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Keine Unterbenutzer vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Keine Schlüssel vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Keine Befähigungen vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Unbegrenzte Größe</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Max. Größe</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Unbegrenzte Objekte</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Max. Objekte</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Der eingegebene Wert muss &gt;=0 sein.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Beschreibung...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Berechtigungen</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Rollen</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Passwort bestätigen</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Passwortbestätigung stimmt nicht mit dem Passwort überein.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Ablaufdatum des Passworts</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Ablaufdatum des Passworts...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-Mail-Adresse</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Ungültige E-Mail-Adresse.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>Benutzer muss das Passwort bei der nächsten Anmeldung ändern</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Sie sind dabei, die Lese-/Aktualisierungsberechtigungen für Benutzer von Ihrem eigenen Benutzer zu entfernen.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Wenn Sie den Vorgang fortsetzen, können Sie Benutzerrollen nicht mehr hinzufügen oder entfernen.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Möchten Sie den Vorgang wirklich fortsetzen?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Hilfe</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentation</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Über</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Dashboard-Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Benutzerverwaltung</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Angemeldeter Benutzer</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Angemeldet als\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Passwort ändern</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Abmelden</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attribute (OSD-Zuordnung)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadaten nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadaten</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Laufwerkszustand</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Leistungsindikator</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogramm nicht verfügbar: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Schreiben</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lesen</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogramm</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>Hostname nicht gefunden.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Aktuelle Werte</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Quelle</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Ebene</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Kann zur Laufzeit aktualisiert werden (bearbeitbar)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tags</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Auflistungswerte</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Siehe auch</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Clusterstatus</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manager-Daemons</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Objektgateways</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Metadatenserver</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI-Gateways</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>Client-IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Clientdurchsatz</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Client-Lese-/Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Wiederherstellungsdurchsatz</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Scrub</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Leistung</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Rohkapazität</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Platzierungsgruppen pro OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Platzierungsgruppenstatus</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapazität</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> Weitere Details finden Sie in den \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Protokollen\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Ränge</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS Leistungsindikatoren</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Verzeichnisse</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Aktuell</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target> Ermittlungsauthentifizierung aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Keine Portale verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Keine Images verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Keine Images verfügbar. Fügen Sie dem Ziel ein Image hinzu.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Keine Initiatoren verfügen. Fügen Sie dem Ziel einen Initiator hinzu.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Ziel</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Zustand</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes für Lesevorgang</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes für Schreibvorgang</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O seit</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instanz</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problem</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Fortschritt</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Bearbeitungsmodus</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Peer hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Peer bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Peer löschen</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># lokal</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># remote</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>Peer spiegeln</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Umfassende Vereinfachung</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Schichtung</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Exklusive Sperre</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Objektzuordnung (erfordert exklusive Sperre)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journaling (erfordert exklusive Sperre)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namensraum</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Images insgesamt</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namensraum enthält Images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NICHT GESCHÜTZT</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback für RBD-Snapshot</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD-Snapshot</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Gelöscht am</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>Zustand</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>Stamm</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Standby-Daemons</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Rang</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivität</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Nutzung</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Der Wert kann zur Laufzeit aktualisiert werden.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemons/Clients rufen diesen Wert nicht aus der\n      Datenbank \'monitor config\' ab. Es ist nicht zulässig, diese Option über \'ceph config\n      set ...\' festzulegen. Diese Option sollte über \'ceph.conf\' oder an der\n      Befehlszeile konfiguriert werden.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Die Option wird nur während des Daemon-Starts wirksam.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Die Option wirkt sich nur auf die Cluster-Erstellung aus.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Die Option wirkt sich nur auf die Daemon-Erstellung aus.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Aktualisierte Konfigurationsoption \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Service</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Aktueller Wert</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Bearbeitbar</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Laufwerkspfad</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identifiziere Laufwerk \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifikation von \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' auf Host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\' gestartet\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Aktivieren</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Deaktivieren</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Verbindung wird erneut hergestellt, bitte warten...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Öffentliche Adresse</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Offene Sitzungen</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Kein In-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSDs, die zuvor als \'out\' markiert wurden, werden beim Start nicht wieder markiert</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Kein Out-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSDs werden nach dem konfigurierten Intervall nicht automatisch als \'out\' markiert</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Kein Up-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSDs dürfen nicht gestartet werden</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Kein Down-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>OSD-Fehlerberichte werden ignoriert, sodass die Monitore die OSDs nicht als ausgefallen markieren</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pause</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Hält Lese- und Schreibvorgänge an</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Kein Scrub</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Scrubbing ist deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Kein umfassender Scrub</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Umfassendes Scrubbing ist deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Kein Abgleich</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Abgleich der Platzierungsgruppen ist ausgesetzt</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Keine Wiederherstellung</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Wiederherstellung der Platzierungsgruppen ist ausgesetzt</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Bitweise Sortierung</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Bitweise Sortierung verwenden</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Bereinigte Snapdirs</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDs besitzen konvertierte Snapsets</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Löschvorgänge bei Wiederherstellungen</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Bei der Wiederherstellung anstelle des Peerings durchgeführte Löschvorgänge</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Hardlimit für Platzierungsgruppen-Protokoll</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Legt ein Hardlimit für die Platzierungsgruppen-Protokolllänge fest</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Aktualisierte OSD-Flags</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>aus</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>ein</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>ausgefallen</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Markieren</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD verloren</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>markierter Verlust</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Bereinigen</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>bereinigt</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>vernichten</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>vernichtet</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>löschen</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Wiederherstellungspriorität</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG Scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Platzierungsgruppen</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes für Lesevorgang</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes für Schreibvorgang</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/> markieren\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/> markieren\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG Scrub-Optionen</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Aktualisierte PG Scrub-Optionen</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max. Abgleiche</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Wiederherstellung, max. aktiv</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Wiederherstellung, max. - einzelner Start</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Wiederherstellung - Inaktivität</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Auftrag</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Schweregrad</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Gestartet</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attributname</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regulärer Ausdruck</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Bitte fügen Sie Ihren Prometheus-Host zur Dashboard-Konfiguration hinzu und aktualisieren die Seite</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Erstellt von</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Endet</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Verwendet</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Verf.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Bereinigen</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>In Bearbeitung</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Warnung</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Unbekannt</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>aktiv</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>keine Dateisysteme</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktiv</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>Standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n. v.</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktiver Daemon</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>Quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Der NFS Ganesha-Dienst ist nicht konfiguriert.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS-Benutzer</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS-Dateisystem</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(aus globaler Konfiguration übernommen)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>aus globaler Konfiguration übernommen</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Durchzuführende Benutzer-ID-Squashing-Art auswählen --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Keine Daemons verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS-Export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC-Profil</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Cache-Modus</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min. Alter für Vertreibung</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min. Alter für Leerung</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Max. Bytes für Ziel</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Max. Objekte für Ziel</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Keine Anwendungen hinzugefügt</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Anwendungslimit erreicht</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Ein Pool kann nur bis zu vier Anwendungsdefinitionen aufweisen.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Zulässige Zeichen \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Maximale Länge beträgt 128 Zeichen</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Anwendungen filtern oder hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Anwendung hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Größe des Replikats</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Letzte Änderung</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Crush-Regelsatz</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Das Löschen des Pools ist durch die Konfigurationsoption mon_allow_pool_delete deaktiviert.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>Bucket</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>Buckets</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Laufwerks-ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Laufwerksname</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Bereich</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lesen</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Erstelle</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>Rolle</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' erstellt\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' aktualisiert\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Systemrolle</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' gelöscht\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Benutzer aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Fortfahren</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Sie wurden automatisch abgemeldet, da Ihre Rollen geändert wurden.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>Passwort</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Benutzerpasswort aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Jedes Objekt wird in Datenblöcke aufgeteilt und jeweils auf einem anderen OSD gespeichert.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Berechnen Sie Codierungsdatenblöcke für jedes Objekt und speichern Sie sie auf unterschiedlichen OSDs.\n      Die Anzahl der Codierungsdatenblöcke entspricht auch der Anzahl der OSDs, die ausfallen können, ohne dass Daten verloren gehen.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Das jerasure-Modul ist das allgemeinste und flexibelste Modul\n          und fungiert auch als der Standard für Ceph-Pools mit Löschcodierung.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Die flexiblere Technik ist \'reed_sol_van :\', wobei es ausreicht, k\n          und m festzulegen. Die Technik \'cauchy_good\' kann schneller sein. Sie müssen jedoch die Paketgröße sorgfältig\n          auswählen. Sämtliche \'reed_sol_r6_op\'-, \'liberation\'-, \'blaum_roth\'- und \'liber8tion\'-Vorgänge sind dahingehend RAID6-Entsprechungen,\n          dass sie nur mit \'m=2\' konfiguriert werden können.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Die Codierung wird jeweils für Pakete auf Bytes-Größe vorgenommen.\n          Die Auswahl der richtigen Paketgröße ist schwierig.\n          In der Jerasure-Dokumentation sind ausführliche Informationen zu diesem Thema enthalten.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Bei Verwendung des Jerasure-Moduls, wenn ein Objekt mit Löschcodierung auf mehreren OSDs gespeichert ist,\n          müssen alle anderen OSDs gelesen werden, um die verloren gegangenen Daten eines OSDs wiederherzustellen.\n          Wenn jerasure beispielsweise mit \'k=8\' und \'m=4\' konfiguriert ist,\n          müssen bei Verlust eines OSDs zum Reparieren die elf anderen gelesen werden.\n\n          Das lrc-Löschcode-Modul erstellt lokale Paritätsdatenblöcke, um die Wiederherstellung mit weniger OSDs auszuführen.\n          Wenn lrc beispielsweise mit \'k=8\', \'m=4\' und \'l=4\' konfiguriert ist, wird ein zusätzlicher Paritätsdatenblock für jeweils vier OSDs erstellt.\n          Geht ein einzelnes OSD verloren, kann es mit nur vier OSDs anstelle\n          von elf wiederhergestellt werden.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Gruppieren Sie die Codierungs- und Datenblöcke in Sätze entsprechend dem Speicherort.\n          Beispielsweise werden für \'k=4\' und \'m=2\', wenn der Speicherort \'3\' entspricht, zwei Dreiergruppen erstellt.\n          Jeder Satz kann wiederhergestellt werden, ohne dass Datenblöcke aus einem anderen Satz gelesen werden.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Der Typ des Crush-Buckets, in dem jeder durch l definierte Satz von Datenblöcken gespeichert wird.\n          Wenn er beispielsweise auf \'rack\' festgelegt ist, wird jede Gruppe an l-Datenblöcken in einem anderen Rack platziert.\n          Er wird zum Erstellen eines CRUSH-Regelschritts verwendet, beispielsweise für einen Schritt zum Auswählen des Racks.\n          Wenn er nicht festgelegt ist, wird keine solche Gruppierung vorgenommen.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Das isa-Modul kapselt die ISA-Bibliothek und wird nur auf Intel-Prozessoren ausgeführt.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Das ISA-Modul wird in zwei Reed Solomon-Formularen bereitgestellt.\n          Wenn \'reed_sol_van\' festgelegt ist, entspricht dies Vandermonde. Ist \'cauchy\' festgelegt, entspricht dies \'Cauchy\'.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Das shec-Modul kapselt die SHEC-Mehrfachbibliothek.\n          Dadurch kann ceph Daten effizienter wiederherstellen als Reed Solomon-Codes.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Die Anzahl der Paritätsdatenblöcke, von denen jeder jeden Datenblock in seinem Berechnungsbereich enthält.\n          Die Anzahl wird als eine Dauerhaftigkeitsschätzung verwendet. Wenn beispielsweise \'c=2\' vorliegt,\n          können 2 OSDs ausfallen, ohne dass Daten verloren gehen.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Der Name des für den ersten Schritt der CRUSH-Regel verwendeten Crush-Buckets.\n      Beispielsweise \'step take default\'.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Stellen Sie sicher, dass sich keine zwei Datenblöcke in einem Bucket mit derselben Ausfalldomäne befinden.\n      Wenn die Ausfalldomäne beispielsweise als Host fungiert, werden keine zwei Datenblöcke auf demselben Host gespeichert.\n      Er wird zum Erstellen eines CRUSH-Regelschritts verwendet, beispielsweise \'step chooseleaf host\'.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Schränken Sie mithilfe der Klassennamen für Crush-Geräte in der CRUSH-Zuordnung die Platzierung\n      auf Geräte einer bestimmten Klasse (z. B. SSD oder HDD) ein.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Legen Sie den Verzeichnisnamen fest, über den das Löschcode-Modul geladen wird.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Lässt alle Vorgänge zu</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Lässt nur Vorgänge zu, die den Server nicht ändern</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Lässt weder Lese- noch Schreibvorgänge zu, jedoch alle anderen Vorgänge</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Lässt Lese-/Schreibvorgänge und andere Vorgänge nicht zu, die Dateiattribute oder Verzeichnisinhalte ändern</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Lässt überhaupt keinen Zugriff zu</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Priorität auswählen --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Niedrig</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Hoch</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informationen</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Letzte 5 Minuten</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Letzte 15 Minuten</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Letzte 30 Minuten</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Letzte Stunde (Standard)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Letzte 3 Stunden</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Letzte 6 Stunden</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Letzte 12 Stunden</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Letzte 24 Stunden</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Gestern</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Heute</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Heute bisher</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Vorgestern</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Letzte 2 Tage</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Dieser Tag letzte Woche</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Vorwoche</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Diese Woche</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Diese Woche bisher</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Letzte 7 Tage</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Vormonat</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Dieser Monat</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Dieser Monat bisher</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Letzte 30 Tage</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Letzte 90 Tage</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Letzte 6 Monate</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Letztes Jahr</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Vorjahr</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Dieses Jahr</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Dieses Jahr bisher</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Letzte 2 Jahre</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Letzte 5 Jahre</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Keine Elemente ausgewählt.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Elementauswahl zum erneuten Auswählen aufheben</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Auswahllimit erreicht</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tags filtern</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Badge hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Keine Elemente verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Entfernen</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klonen</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopieren</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Umfassender Scrub</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Vernichten</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Vereinfachen</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Als ausgefallen markieren</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Mit Befehl \'In\' markieren</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Als verloren markieren</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Mit Befehl \'Out\' markieren</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Schützen</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Umbenennen</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>In Papierkorb verschieben</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Schutz aufheben</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Ändern</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Gelöscht</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Hinzugefügt</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Entfernt</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Bearbeitet</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Abgebrochen</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Geklont</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Kopiert</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Vereinfacht</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Geschützt</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Bereinigt</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Umbenannt</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Wiederhergestellt</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback wurde ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>In den Papierkorb verschoben</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Schutz aufgehoben</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Abgelaufen</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ja</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Nein</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Erforderliche Regeln für Passwörter:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>keine aktiven Warnungen</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 aktive Warnung</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> aktive Warnungen\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> mit \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Quality of Service</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS-Limit</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Das gewünschte Limit der E/A-Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS-Limit</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Das gewünschte Limit der E/A-Vorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>BPS-Limit für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Das gewünschte Limit der gelesenen Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>IOPS-Limit für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Das gewünschte Limit für Lesevorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>BPS-Limit für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Das gewünschte Limit der geschriebenen Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>IOPS-Limit für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Das gewünschte Limit für Schreibvorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS-Block</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Das gewünschte Blocklimit der E/A-Bytes.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS-Block</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Das gewünschte Blocklimit der E/A-Vorgänge.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>BPS-Block für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Das gewünschte Blocklimit der gelesenen Bytes.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>IOPS-Block für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Das gewünschte Blocklimit der Lesevorgänge.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>BPS-Block für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Das gewünschte Blocklimit der geschriebenen Bytes.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>IOPS-Block für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Das gewünschte Blocklimit der Schreibvorgänge.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Wird ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>ausführen</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>Unbekannte Aufgabe</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>erstellen</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Wird aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Wird gelöscht</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD-Snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>Spiegelungsmodus für Pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>Alle Dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> enthält Snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Wird geklont</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klonen</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot von \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> muss geschützt sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Wird kopiert</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>kopieren</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Wird vereinfacht</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>vereinfachen</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Der Schutz von \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> kann aufgrund untergeordneter Images nicht aufgehoben werden.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> kann nicht gelöscht werden, da es geschützt ist.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Rollback wird ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>Rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Wird verschoben</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>verschieben</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Verschoben</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' in Papierkorb verschieben\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Image konnte nicht gefunden werden.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Wird wiederhergestellt</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' in \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\' verschieben\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image-Name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' wird bereits verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Wird bereinigt</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>bereinigen</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>alle Pools</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>Images von \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Spiegelung kann nicht deaktiviert werden, da sie einen Peer enthält.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>Pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>Erasure-Coding-Profil \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>Ziel \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},EmSq:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("8Y7J"),r=n("LvDl");n("Fgil"),n("aXbf");class i{constructor(t,e,n,r){this.elementRef=t,this.control=e,this.dimlessBinaryPipe=n,this.formatter=r,this.ngModelChange=new a.EventEmitter,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value)}setValue(t){/^[\d.]+$/.test(t)&&(t+=this.defaultUnit||"m");const e=this.formatter.toBytes(t),n=this.round(e);this.el.value=this.dimlessBinaryPipe.transform(n),null!==e?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(t){if(null!==t&&0!==t){if(!r.isUndefined(this.minBytes)&&t<this.minBytes)return this.minBytes;if(!r.isUndefined(this.maxBytes)&&t>this.maxBytes)return this.maxBytes;if(!r.isUndefined(this.roundPower)){const e=Math.round(Math.log(t)/Math.log(this.roundPower));return Math.pow(this.roundPower,e)}}return t}onBlur(t){this.setValue(t)}}},"F+uO":function(t,e,n){var a={"./messages.cs.xlf":"ViD7","./messages.de-DE.xlf":"EiPl","./messages.es-ES.xlf":"yt+r","./messages.fr-FR.xlf":"V5SL","./messages.id-ID.xlf":"jqst","./messages.it-IT.xlf":"8j5A","./messages.ja-JP.xlf":"bN42","./messages.ko-KR.xlf":"3+CB","./messages.pl-PL.xlf":"SPu7","./messages.pt-BR.xlf":"+Wg/","./messages.zh-CN.xlf":"AiMb","./messages.zh-TW.xlf":"HjS5"};function r(t){var e=i(t);return n(e)}function i(t){if(!n.o(a,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return a[t]}r.keys=function(){return Object.keys(a)},r.resolve=i,t.exports=r,r.id="F+uO"},F8JR:function(t,e,n){"use strict";var a=n("tycR").forEach,r=n("pkCn"),i=n("rkAj"),s=r("forEach"),o=i("forEach");t.exports=s&&o?[].forEach:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}},FE24:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return f})),n.d(e,"c",(function(){return h})),n.d(e,"d",(function(){return g})),n.d(e,"e",(function(){return b})),n.d(e,"f",(function(){return d})),n.d(e,"g",(function(){return p}));var a=n("8Y7J"),r=n("pLZG"),i=n("z/SZ"),s=n("hpHm"),o=n("GS7A"),u=n("2uy1");class l{constructor(){this.autoClose=!0,this.insideClick=!1,this.isAnimated=!1}}class d{constructor(){this.direction="down",this.isOpenChange=new a.EventEmitter,this.isDisabledChange=new a.EventEmitter,this.toggleClick=new a.EventEmitter,this.dropdownMenu=new Promise(t=>{this.resolveDropdownMenu=t})}}const c=[Object(o.h)({height:0,overflow:"hidden"}),Object(o.e)("220ms cubic-bezier(0, 0, 0.2, 1)",Object(o.h)({height:"*",overflow:"hidden"}))];class f{constructor(t,e,n,a,r){this._state=t,this.cd=e,this._renderer=n,this._element=a,this.isOpen=!1,this._factoryDropDownAnimation=r.build(c),this._subscription=t.isOpenChange.subscribe(t=>{this.isOpen=t;const e=this._element.nativeElement.querySelector(".dropdown-menu");this._renderer.addClass(this._element.nativeElement.querySelector("div"),"open"),e&&!Object(s.d)()&&(this._renderer.addClass(e,"show"),e.classList.contains("dropdown-menu-right")&&(this._renderer.setStyle(e,"left","auto"),this._renderer.setStyle(e,"right","0")),"up"===this.direction&&(this._renderer.setStyle(e,"top","auto"),this._renderer.setStyle(e,"transform","translateY(-101%)"))),e&&this._state.isAnimated&&this._factoryDropDownAnimation.create(e).play(),this.cd.markForCheck(),this.cd.detectChanges()})}get direction(){return this._state.direction}_contains(t){return this._element.nativeElement.contains(t)}ngOnDestroy(){this._subscription.unsubscribe()}}class h{constructor(t,e,n,a,r,i,s){this._elementRef=t,this._renderer=e,this._viewContainerRef=n,this._cis=a,this._state=r,this._config=i,this._isInlineOpen=!1,this._subscriptions=[],this._isInited=!1,this._state.autoClose=this._config.autoClose,this._state.insideClick=this._config.insideClick,this._state.isAnimated=this._config.isAnimated,this._factoryDropDownAnimation=s.build(c),this._dropdown=this._cis.createLoader(this._elementRef,this._viewContainerRef,this._renderer).provide({provide:d,useValue:this._state}),this.onShown=this._dropdown.onShown,this.onHidden=this._dropdown.onHidden,this.isOpenChange=this._state.isOpenChange}set autoClose(t){this._state.autoClose=t}get autoClose(){return this._state.autoClose}set isAnimated(t){this._state.isAnimated=t}get isAnimated(){return this._state.isAnimated}set insideClick(t){this._state.insideClick=t}get insideClick(){return this._state.insideClick}set isDisabled(t){this._isDisabled=t,this._state.isDisabledChange.emit(t),t&&this.hide()}get isDisabled(){return this._isDisabled}get isOpen(){return this._showInline?this._isInlineOpen:this._dropdown.isShown}set isOpen(t){t?this.show():this.hide()}get isBs4(){return!Object(s.d)()}get _showInline(){return!this.container}ngOnInit(){this._isInited||(this._isInited=!0,this._dropdown.listen({outsideClick:!1,triggers:this.triggers,show:()=>this.show()}),this._subscriptions.push(this._state.toggleClick.subscribe(t=>this.toggle(t))),this._subscriptions.push(this._state.isDisabledChange.pipe(Object(r.a)(t=>t)).subscribe(t=>this.hide())))}show(){if(!this.isOpen&&!this.isDisabled)return this._showInline?(this._inlinedMenu||this._state.dropdownMenu.then(t=>{this._dropdown.attachInline(t.viewContainer,t.templateRef),this._inlinedMenu=this._dropdown._inlineViewRef,this.addBs4Polyfills(),this._renderer.addClass(this._inlinedMenu.rootNodes[0].parentNode,"open"),this.playAnimation()}).catch(),this.addBs4Polyfills(),this._isInlineOpen=!0,this.onShown.emit(!0),this._state.isOpenChange.emit(!0),void this.playAnimation()):void this._state.dropdownMenu.then(t=>{const e=this.dropup||void 0!==this.dropup&&this.dropup;this._state.direction=e?"up":"down";const n=this.placement||(e?"top start":"bottom start");this._dropdown.attach(f).to(this.container).position({attachment:n}).show({content:t.templateRef,placement:n}),this._state.isOpenChange.emit(!0)}).catch()}hide(){this.isOpen&&(this._showInline?(this.removeShowClass(),this.removeDropupStyles(),this._isInlineOpen=!1,this.onHidden.emit(!0)):this._dropdown.hide(),this._state.isOpenChange.emit(!1))}toggle(t){return this.isOpen||!t?this.hide():this.show()}_contains(t){return this._elementRef.nativeElement.contains(t.target)||this._dropdown.instance&&this._dropdown.instance._contains(t.target)}ngOnDestroy(){for(const t of this._subscriptions)t.unsubscribe();this._dropdown.dispose()}addBs4Polyfills(){Object(s.d)()||(this.addShowClass(),this.checkRightAlignment(),this.addDropupStyles())}playAnimation(){this._state.isAnimated&&this._inlinedMenu&&this._factoryDropDownAnimation.create(this._inlinedMenu.rootNodes[0]).play()}addShowClass(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.addClass(this._inlinedMenu.rootNodes[0],"show")}removeShowClass(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.removeClass(this._inlinedMenu.rootNodes[0],"show")}checkRightAlignment(){if(this._inlinedMenu&&this._inlinedMenu.rootNodes[0]){const t=this._inlinedMenu.rootNodes[0].classList.contains("dropdown-menu-right");this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"left",t?"auto":"0"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"right",t?"0":"auto")}}addDropupStyles(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"top",this.dropup?"auto":"100%"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"transform",this.dropup?"translateY(-101%)":"translateY(0)"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"bottom","auto"))}removeDropupStyles(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"top"),this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"transform"),this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"bottom"))}}class g{constructor(t,e,n){t.resolveDropdownMenu({templateRef:n,viewContainer:e})}}class p{constructor(t,e,n,a,r){this._changeDetectorRef=t,this._dropdown=e,this._element=n,this._renderer=a,this._state=r,this.isDisabled=null,this._subscriptions=[],this._subscriptions.push(this._state.isOpenChange.subscribe(t=>{this.isOpen=t,t?(this._documentClickListener=this._renderer.listen("document","click",t=>{!this._state.autoClose||2===t.button||this._element.nativeElement.contains(t.target)||this._state.insideClick&&this._dropdown._contains(t)||(this._state.toggleClick.emit(!1),this._changeDetectorRef.detectChanges())}),this._escKeyUpListener=this._renderer.listen(this._element.nativeElement,"keyup.esc",()=>{this._state.autoClose&&(this._state.toggleClick.emit(!1),this._changeDetectorRef.detectChanges())})):(this._documentClickListener(),this._escKeyUpListener())})),this._subscriptions.push(this._state.isDisabledChange.subscribe(t=>this.isDisabled=t||null))}onClick(){this.isDisabled||this._state.toggleClick.emit(!0)}ngOnDestroy(){this._documentClickListener&&this._documentClickListener(),this._escKeyUpListener&&this._escKeyUpListener();for(const t of this._subscriptions)t.unsubscribe()}}class b{static forRoot(t){return{ngModule:b,providers:[i.a,u.a,d,{provide:l,useValue:t||{autoClose:!0,insideClick:!1}}]}}}},FFMq:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return t.join(", ")}}},FGWQ:function(t,e,n){var a=n("pmjB"),r=n("p33Q"),i=n("im1V");t.exports=function(t){return i(t)?a(t):r(t)}},FMNM:function(t,e,n){var a=n("xrYK"),r=n("kmMV");t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==a(t))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(t,e)}},FSuO:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("LvDl"),i=n("x38r");n("a0VL"),n("uIqm");class s{constructor(t){this.datePipe=t,this.autoReload=5e3,this.renderObjects=!1,this.appendParentKey=!0,this.hideEmpty=!1,this.hideKeys=[],this.columns=[],this.fetchData=new a.EventEmitter}ngOnInit(){this.columns=[{prop:"key",flexGrow:1,cellTransformation:i.a.bold},{prop:"value",flexGrow:3}],this.customCss&&(this.columns[1].cellTransformation=i.a.classAdding),this.fetchData.observers.length>0&&this.table.fetchData.subscribe(()=>{this.fetchData.emit()}),this.useData()}ngOnChanges(){this.useData()}useData(){if(!this.data)return;let t=this.makePairs(this.data);this.hideKeys&&(t=t.filter(t=>!this.hideKeys.includes(t.key))),this.tableData=t}makePairs(t){let e=[];if(t){if(r.isArray(t))e=this.makePairsFromArray(t);else{if(!r.isObject(t))throw new Error("Wrong data format");e=this.makePairsFromObject(t)}return e=e.map(t=>(t.value=this.convertValue(t.value),t)).filter(t=>null!==t.value),r.sortBy(this.renderObjects?this.insertFlattenObjects(e):e,"key")}}makePairsFromArray(t){let e=[];const n=t[0];if(r.isArray(n)){if(2!==n.length)throw new Error(`Array contains too many elements (${n.length}). Needs to be of type [string, any][]`);e=t.map(t=>({key:t[0],value:t[1]}))}else r.isObject(n)&&(e=r.has(n,"key")&&r.has(n,"value")?[...t]:t.reduce((t,e)=>t.concat(this.makePairsFromObject(e)),e));return e}makePairsFromObject(t){return Object.keys(t).map(e=>({key:e,value:t[e]}))}insertFlattenObjects(t){return r.flattenDeep(t.map(t=>{const e=t.value,n=r.isObject(e);return!n||r.isEmpty(e)?(n&&(t.value=""),t):this.splitItemIntoItems(t)}))}splitItemIntoItems(t){return this.makePairs(t.value).map(e=>(this.appendParentKey&&(e.key=t.key+" "+e.key),e))}convertValue(t){if(r.isArray(t)){if(r.isEmpty(t)&&this.hideEmpty)return null;t=t.map(t=>r.isObject(t)?JSON.stringify(t):t).join(", ")}else if(r.isObject(t)){if(this.hideEmpty&&r.isEmpty(t)||!this.renderObjects)return null}else if(r.isString(t)){if(""===t&&this.hideEmpty)return null;this.isDate(t)&&(t=this.datePipe.transform(t)||t)}return t}isDate(t){const e="\\d{2}[ -:.TZ]";return t.match(new RegExp("^\\d{4}[ -:.TZ]"+e+e+e+e+e+"\\d*Z?$"))}}},FZtP:function(t,e,n){var a=n("2oRo"),r=n("/byt"),i=n("F8JR"),s=n("kRJp");for(var o in r){var u=a[o],l=u&&u.prototype;if(l&&l.forEach!==i)try{s(l,"forEach",i)}catch(d){l.forEach=i}}},Fgil:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1024,["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"])}}},Fwy9:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("gk6K"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e,n,r){this.el=t,this.renderer=e,this.treeDraggedElement=n,this.ngZone=r,this.allowDragoverStyling=!0,this.onDropCallback=new a.EventEmitter,this.onDragOverCallback=new a.EventEmitter,this.onDragLeaveCallback=new a.EventEmitter,this.onDragEnterCallback=new a.EventEmitter,this._allowDrop=function(t,e){return!0},this.dragOverEventHandler=this.onDragOver.bind(this),this.dragEnterEventHandler=this.onDragEnter.bind(this),this.dragLeaveEventHandler=this.onDragLeave.bind(this)}return Object.defineProperty(t.prototype,"treeAllowDrop",{set:function(t){this._allowDrop=t instanceof Function?t:function(e,n){return t}},enumerable:!0,configurable:!0}),t.prototype.allowDrop=function(t){return this._allowDrop(this.treeDraggedElement.get(),t)},t.prototype.ngAfterViewInit=function(){var t=this,e=this.el.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("dragover",t.dragOverEventHandler),e.addEventListener("dragenter",t.dragEnterEventHandler),e.addEventListener("dragleave",t.dragLeaveEventHandler)}))},t.prototype.ngOnDestroy=function(){var t=this.el.nativeElement;t.removeEventListener("dragover",this.dragOverEventHandler),t.removeEventListener("dragenter",this.dragEnterEventHandler),t.removeEventListener("dragleave",this.dragLeaveEventHandler)},t.prototype.onDragOver=function(t){if(!this.allowDrop(t))return this.allowDragoverStyling?this.addDisabledClass():void 0;this.onDragOverCallback.emit({event:t,element:this.treeDraggedElement.get()}),t.preventDefault(),this.allowDragoverStyling&&this.addClass()},t.prototype.onDragEnter=function(t){this.allowDrop(t)&&(t.preventDefault(),this.onDragEnterCallback.emit({event:t,element:this.treeDraggedElement.get()}))},t.prototype.onDragLeave=function(t){if(!this.allowDrop(t))return this.allowDragoverStyling?this.removeDisabledClass():void 0;this.onDragLeaveCallback.emit({event:t,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass()},t.prototype.onDrop=function(t){this.allowDrop(t)&&(t.preventDefault(),this.onDropCallback.emit({event:t,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass(),this.treeDraggedElement.set(null))},t.prototype.addClass=function(){this.renderer.addClass(this.el.nativeElement,"is-dragging-over")},t.prototype.removeClass=function(){this.renderer.removeClass(this.el.nativeElement,"is-dragging-over")},t.prototype.addDisabledClass=function(){this.renderer.addClass(this.el.nativeElement,"is-dragging-over-disabled")},t.prototype.removeDisabledClass=function(){this.renderer.removeClass(this.el.nativeElement,"is-dragging-over-disabled")},i([Object(a.Input)(),s("design:type",Object)],t.prototype,"allowDragoverStyling",void 0),i([Object(a.Output)("treeDrop"),s("design:type",Object)],t.prototype,"onDropCallback",void 0),i([Object(a.Output)("treeDropDragOver"),s("design:type",Object)],t.prototype,"onDragOverCallback",void 0),i([Object(a.Output)("treeDropDragLeave"),s("design:type",Object)],t.prototype,"onDragLeaveCallback",void 0),i([Object(a.Output)("treeDropDragEnter"),s("design:type",Object)],t.prototype,"onDragEnterCallback",void 0),i([Object(a.Input)(),s("design:type",Object),s("design:paramtypes",[Object])],t.prototype,"treeAllowDrop",null),i([Object(a.HostListener)("drop",["$event"]),s("design:type",Function),s("design:paramtypes",[Object]),s("design:returntype",void 0)],t.prototype,"onDrop",null),i([Object(a.Directive)({selector:"[treeDrop]"}),s("design:paramtypes",[a.ElementRef,a.Renderer2,r.a,a.NgZone])],t)}()},"G+Rx":function(t,e,n){var a=n("0GbY");t.exports=a("document","documentElement")},G0Uy:function(t,e,n){!function(t){"use strict";t.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},"G1/K":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.i18n=t}transform(t){return""===t?this.i18n("n/a"):t}}},G1I9:function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return s}));var a=n("oxzT"),r=n("mtw6");class i{constructor(t=r.a.info,e,n,a,i="Ceph"){this.type=t,this.title=e,this.message=n,this.options=a,this.application=i,this.isFinishedTask=!1,this.classes={Ceph:"ceph-icon",Prometheus:"prometheus-icon"},this.applicationClass=this.classes[this.application]}}class s extends i{constructor(t=new i){super(t.type,t.title,t.message,t.options,t.application),this.config=t,this.textClasses=["text-danger","text-info","text-success"],this.iconClasses=[a.a.warning,a.a.info,a.a.check],delete this.config,this.timestamp=(new Date).toJSON(),this.iconClass=this.iconClasses[this.type],this.textClass=this.textClasses[this.type],this.isFinishedTask=t.isFinishedTask}}},G3dZ:function(t,e,n){var a=n("77kF"),r=n("Z2DA");t.exports=function(t,e){return a(t,r(t),e)}},G3uG:function(t,e){var n=Date.now;t.exports=function(t){var e=0,a=0;return function(){var r=n(),i=16-(r-a);if(a=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},"G6Q+":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},GS7A:function(t,e,n){"use strict";n.d(e,"b",(function(){return a})),n.d(e,"c",(function(){return r})),n.d(e,"a",(function(){return i})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return c})),n.d(e,"j",(function(){return s})),n.d(e,"d",(function(){return h})),n.d(e,"k",(function(){return g})),n.d(e,"l",(function(){return p}));class a{}class r{}const i="*";function s(t,e){return{type:7,name:t,definitions:e,options:{}}}function o(t,e=null){return{type:4,styles:e,timings:t}}function u(t,e=null){return{type:2,steps:t,options:e}}function l(t){return{type:6,styles:t,offset:null}}function d(t,e,n){return{type:0,name:t,styles:e,options:n}}function c(t,e,n=null){return{type:1,expr:t,animation:e,options:n}}function f(t){Promise.resolve(null).then(t)}class h{constructor(t=0,e=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=t+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){f(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){}setPosition(t){}getPosition(){return 0}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class g{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let e=0,n=0,a=0;const r=this.players.length;0==r?f(()=>this._onFinish()):this.players.forEach(t=>{t.onDone(()=>{++e==r&&this._onFinish()}),t.onDestroy(()=>{++n==r&&this._onDestroy()}),t.onStart(()=>{++a==r&&this._onStart()})}),this.totalTime=this.players.reduce((t,e)=>Math.max(t,e.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){const e=t*this.totalTime;this.players.forEach(t=>{const n=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(n)})}getPosition(){let t=0;return this.players.forEach(e=>{const n=e.getPosition();t=Math.min(n,t)}),t}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}const p="!"},GarU:function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},Gf4A:function(t,e,n){var a=n("KFwg")(n("Wa4q"),"Map");t.exports=a},GgAd:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(){this.isBinary=!0,this.decimals=0}ngOnChanges(){this.usedPercentage=this.total>0?this.used/this.total*100:0,this.freePercentage=100-this.usedPercentage}}},GiVz:function(t,e,n){"use strict";n.d(e,"a",(function(){return We})),n.d(e,"b",(function(){return Ue}));var a=n("SVse"),r=n("8Y7J");class i{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitText(this,e)}}class s{constructor(t,e,n,a,r){this.switchValue=t,this.type=e,this.cases=n,this.sourceSpan=a,this.switchValueSourceSpan=r}visit(t,e){return t.visitExpansion(this,e)}}class o{constructor(t,e,n,a,r){this.value=t,this.expression=e,this.sourceSpan=n,this.valueSourceSpan=a,this.expSourceSpan=r}visit(t,e){return t.visitExpansionCase(this,e)}}class u{constructor(t,e,n,a){this.name=t,this.value=e,this.sourceSpan=n,this.valueSpan=a}visit(t,e){return t.visitAttribute(this,e)}}class l{constructor(t,e,n,a,r=null,i=null){this.name=t,this.attrs=e,this.children=n,this.sourceSpan=a,this.startSourceSpan=r,this.endSourceSpan=i}visit(t,e){return t.visitElement(this,e)}}class d{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitComment(this,e)}}function c(t,e,n=null){const a=[],r=t.visit?e=>t.visit(e,n)||e.visit(t,n):e=>e.visit(t,n);return e.forEach(t=>{const e=r(t);e&&a.push(e)}),a}class f{constructor(t,e,n,a,r,i){this.nodes=t,this.placeholders=e,this.placeholderToMessage=n,this.meaning=a,this.description=r,this.id=i,this.sources=t.length?[{filePath:t[0].sourceSpan.start.file.url,startLine:t[0].sourceSpan.start.line+1,startCol:t[0].sourceSpan.start.col+1,endLine:t[t.length-1].sourceSpan.end.line+1,endCol:t[0].sourceSpan.start.col+1}]:[]}}class h{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitText(this,e)}}class g{constructor(t,e){this.children=t,this.sourceSpan=e}visit(t,e){return t.visitContainer(this,e)}}class p{constructor(t,e,n,a){this.expression=t,this.type=e,this.cases=n,this.sourceSpan=a}visit(t,e){return t.visitIcu(this,e)}}class b{constructor(t,e,n,a,r,i,s){this.tag=t,this.attrs=e,this.startName=n,this.closeName=a,this.children=r,this.isVoid=i,this.sourceSpan=s}visit(t,e){return t.visitTagPlaceholder(this,e)}}class m{constructor(t,e,n){this.value=t,this.name=e,this.sourceSpan=n}visit(t,e){return t.visitPlaceholder(this,e)}}class y{constructor(t,e,n){this.value=t,this.name=e,this.sourceSpan=n}visit(t,e){return t.visitIcuPlaceholder(this,e)}}class v{constructor(t,e,n,a){this.file=t,this.offset=e,this.line=n,this.col=a}toString(){return null!=this.offset?`${this.line}:${this.col}`:""}getContext(t,e){const n=this.file.content;let a=this.offset;if(null!=a){a>n.length-1&&(a=n.length-1);let r=a,i=0,s=0;for(;i<t&&a>0&&(a--,i++,"\n"!==n[a]||++s!==e););for(i=0,s=0;i<t&&r<n.length-1&&(r++,i++,"\n"!==n[r]||++s!==e););return{before:n.substring(a,this.offset),after:n.substring(this.offset,r+1)}}return null}}class x{constructor(t,e=""){this.content=t,this.url=e}}class _{constructor(t,e,n=null){this.start=t,this.end=e,this.details=n}toString(){return this.start.file.content.substring(this.start.offset,this.end.offset)}}const T=function(){var t={WARNING:0,ERROR:1};return t[t.WARNING]="WARNING",t[t.ERROR]="ERROR",t}();class O{constructor(t,e,n=T.ERROR){this.span=t,this.msg=e,this.level=n}contextualMessage(){const t=this.span.start.getContext(100,3);return t?` ("${t.before}[${T[this.level]} ->]${t.after}")`:""}toString(){const t=this.span.details?", "+this.span.details:"";return`${this.msg}${this.contextualMessage()}: ${this.span.start}${t}`}}class w extends O{constructor(t,e){super(t,e)}}function S(t){return t.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}class I{constructor(t,e){this.start=t,this.end=e}}const N=new I("{{","}}");function C(t){return t>=9&&t<=32||160===t}function R(t){return 48<=t&&t<=57}function A(t){return t>=97&&t<=122||t>=65&&t<=90}const k=function(){var t={RAW_TEXT:0,ESCAPABLE_RAW_TEXT:1,PARSABLE_DATA:2};return t[t.RAW_TEXT]="RAW_TEXT",t[t.ESCAPABLE_RAW_TEXT]="ESCAPABLE_RAW_TEXT",t[t.PARSABLE_DATA]="PARSABLE_DATA",t}();function E(t){if(":"!==t[0])return[null,t];const e=t.indexOf(":",1);if(-1===e)throw new Error(`Unsupported format "${t}" expecting ":namespace:name"`);return[t.slice(1,e),t.slice(e+1)]}function L(t){return null===t?null:E(t)[0]}function D(t,e){return t?`:${t}:${e}`:e}const P={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",alefsym:"ℵ",Alpha:"Α",alpha:"α",amp:"&",and:"∧",ang:"∠",apos:"'",Aring:"Å",aring:"å",asymp:"≈",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",bdquo:"„",Beta:"Β",beta:"β",brvbar:"¦",bull:"•",cap:"∩",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",Chi:"Χ",chi:"χ",circ:"ˆ",clubs:"♣",cong:"≅",copy:"©",crarr:"↵",cup:"∪",curren:"¤",dagger:"†",Dagger:"‡",darr:"↓",dArr:"⇓",deg:"°",Delta:"Δ",delta:"δ",diams:"♦",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",empty:"∅",emsp:" ",ensp:" ",Epsilon:"Ε",epsilon:"ε",equiv:"≡",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",exist:"∃",fnof:"ƒ",forall:"∀",frac12:"½",frac14:"¼",frac34:"¾",frasl:"⁄",Gamma:"Γ",gamma:"γ",ge:"≥",gt:">",harr:"↔",hArr:"⇔",hearts:"♥",hellip:"…",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",image:"ℑ",infin:"∞",int:"∫",Iota:"Ι",iota:"ι",iquest:"¿",isin:"∈",Iuml:"Ï",iuml:"ï",Kappa:"Κ",kappa:"κ",Lambda:"Λ",lambda:"λ",lang:"⟨",laquo:"«",larr:"←",lArr:"⇐",lceil:"⌈",ldquo:"“",le:"≤",lfloor:"⌊",lowast:"∗",loz:"◊",lrm:"‎",lsaquo:"‹",lsquo:"‘",lt:"<",macr:"¯",mdash:"—",micro:"µ",middot:"·",minus:"−",Mu:"Μ",mu:"μ",nabla:"∇",nbsp:" ",ndash:"–",ne:"≠",ni:"∋",not:"¬",notin:"∉",nsub:"⊄",Ntilde:"Ñ",ntilde:"ñ",Nu:"Ν",nu:"ν",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",OElig:"Œ",oelig:"œ",Ograve:"Ò",ograve:"ò",oline:"‾",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",oplus:"⊕",or:"∨",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",otimes:"⊗",Ouml:"Ö",ouml:"ö",para:"¶",permil:"‰",perp:"⊥",Phi:"Φ",phi:"φ",Pi:"Π",pi:"π",piv:"ϖ",plusmn:"±",pound:"£",prime:"′",Prime:"″",prod:"∏",prop:"∝",Psi:"Ψ",psi:"ψ",quot:'"',radic:"√",rang:"⟩",raquo:"»",rarr:"→",rArr:"⇒",rceil:"⌉",rdquo:"”",real:"ℜ",reg:"®",rfloor:"⌋",Rho:"Ρ",rho:"ρ",rlm:"‏",rsaquo:"›",rsquo:"’",sbquo:"‚",Scaron:"Š",scaron:"š",sdot:"⋅",sect:"§",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sim:"∼",spades:"♠",sub:"⊂",sube:"⊆",sum:"∑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supe:"⊇",szlig:"ß",Tau:"Τ",tau:"τ",there4:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thinsp:" ",THORN:"Þ",thorn:"þ",tilde:"˜",times:"×",trade:"™",Uacute:"Ú",uacute:"ú",uarr:"↑",uArr:"⇑",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",Uuml:"Ü",uuml:"ü",weierp:"℘",Xi:"Ξ",xi:"ξ",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ",Yuml:"Ÿ",Zeta:"Ζ",zeta:"ζ",zwj:"‍",zwnj:"‌",ngsp:""},M=function(){var t={TAG_OPEN_START:0,TAG_OPEN_END:1,TAG_OPEN_END_VOID:2,TAG_CLOSE:3,TEXT:4,ESCAPABLE_RAW_TEXT:5,RAW_TEXT:6,COMMENT_START:7,COMMENT_END:8,CDATA_START:9,CDATA_END:10,ATTR_NAME:11,ATTR_VALUE:12,DOC_TYPE:13,EXPANSION_FORM_START:14,EXPANSION_CASE_VALUE:15,EXPANSION_CASE_EXP_START:16,EXPANSION_CASE_EXP_END:17,EXPANSION_FORM_END:18,EOF:19};return t[t.TAG_OPEN_START]="TAG_OPEN_START",t[t.TAG_OPEN_END]="TAG_OPEN_END",t[t.TAG_OPEN_END_VOID]="TAG_OPEN_END_VOID",t[t.TAG_CLOSE]="TAG_CLOSE",t[t.TEXT]="TEXT",t[t.ESCAPABLE_RAW_TEXT]="ESCAPABLE_RAW_TEXT",t[t.RAW_TEXT]="RAW_TEXT",t[t.COMMENT_START]="COMMENT_START",t[t.COMMENT_END]="COMMENT_END",t[t.CDATA_START]="CDATA_START",t[t.CDATA_END]="CDATA_END",t[t.ATTR_NAME]="ATTR_NAME",t[t.ATTR_VALUE]="ATTR_VALUE",t[t.DOC_TYPE]="DOC_TYPE",t[t.EXPANSION_FORM_START]="EXPANSION_FORM_START",t[t.EXPANSION_CASE_VALUE]="EXPANSION_CASE_VALUE",t[t.EXPANSION_CASE_EXP_START]="EXPANSION_CASE_EXP_START",t[t.EXPANSION_CASE_EXP_END]="EXPANSION_CASE_EXP_END",t[t.EXPANSION_FORM_END]="EXPANSION_FORM_END",t[t.EOF]="EOF",t}();class q{constructor(t,e,n){this.type=t,this.parts=e,this.sourceSpan=n}}class j extends O{constructor(t,e,n){super(n,t),this.tokenType=e}}class F{constructor(t,e){this.tokens=t,this.errors=e}}const G=/\r\n?/g;function V(t){return`Unexpected character "${0===t?"EOF":String.fromCharCode(t)}"`}function z(t){return`Unknown entity "${t}" - use the "&#<decimal>;" or  "&#x<hex>;" syntax`}class B{constructor(t){this.error=t}}class Y{constructor(t,e,n,a=N){this._file=t,this._getTagDefinition=e,this._tokenizeIcu=n,this._interpolationConfig=a,this._peek=-1,this._nextPeek=-1,this._index=-1,this._line=0,this._column=-1,this._expansionCaseStack=[],this._inInterpolation=!1,this.tokens=[],this.errors=[],this._input=t.content,this._length=t.content.length,this._advance()}_processCarriageReturns(t){return t.replace(G,"\n")}tokenize(){for(;0!==this._peek;){const e=this._getLocation();try{this._attemptCharCode(60)?this._attemptCharCode(33)?this._attemptCharCode(91)?this._consumeCdata(e):this._attemptCharCode(45)?this._consumeComment(e):this._consumeDocType(e):this._attemptCharCode(47)?this._consumeTagClose(e):this._consumeTagOpen(e):this._tokenizeIcu&&this._tokenizeExpansionForm()||this._consumeText()}catch(t){if(!(t instanceof B))throw t;this.errors.push(t.error)}}return this._beginToken(M.EOF),this._endToken([]),new F(function(t){const e=[];let n=void 0;for(let a=0;a<t.length;a++){const r=t[a];n&&n.type===M.TEXT&&r.type===M.TEXT?(n.parts[0]+=r.parts[0],n.sourceSpan.end=r.sourceSpan.end):(n=r,e.push(n))}return e}(this.tokens),this.errors)}_tokenizeExpansionForm(){if($(this._input,this._index,this._interpolationConfig))return this._consumeExpansionFormStart(),!0;if((61===(t=this._peek)||A(t)||R(t))&&this._isInExpansionForm())return this._consumeExpansionCaseStart(),!0;var t;if(125===this._peek){if(this._isInExpansionCase())return this._consumeExpansionCaseEnd(),!0;if(this._isInExpansionForm())return this._consumeExpansionFormEnd(),!0}return!1}_getLocation(){return new v(this._file,this._index,this._line,this._column)}_getSpan(t=this._getLocation(),e=this._getLocation()){return new _(t,e)}_beginToken(t,e=this._getLocation()){this._currentTokenStart=e,this._currentTokenType=t}_endToken(t,e=this._getLocation()){const n=new q(this._currentTokenType,t,new _(this._currentTokenStart,e));return this.tokens.push(n),this._currentTokenStart=null,this._currentTokenType=null,n}_createError(t,e){this._isInExpansionForm()&&(t+=' (Do you have an unescaped "{" in your template? Use "{{ \'{\' }}") to escape it.)');const n=new j(t,this._currentTokenType,e);return this._currentTokenStart=null,this._currentTokenType=null,new B(n)}_advance(){if(this._index>=this._length)throw this._createError(V(0),this._getSpan());10===this._peek?(this._line++,this._column=0):10!==this._peek&&13!==this._peek&&this._column++,this._index++,this._peek=this._index>=this._length?0:this._input.charCodeAt(this._index),this._nextPeek=this._index+1>=this._length?0:this._input.charCodeAt(this._index+1)}_attemptCharCode(t){return this._peek===t&&(this._advance(),!0)}_attemptCharCodeCaseInsensitive(t){return e=t,J(this._peek)===J(e)&&(this._advance(),!0);var e}_requireCharCode(t){const e=this._getLocation();if(!this._attemptCharCode(t))throw this._createError(V(this._peek),this._getSpan(e,e))}_attemptStr(t){const e=t.length;if(this._index+e>this._length)return!1;const n=this._savePosition();for(let a=0;a<e;a++)if(!this._attemptCharCode(t.charCodeAt(a)))return this._restorePosition(n),!1;return!0}_attemptStrCaseInsensitive(t){for(let e=0;e<t.length;e++)if(!this._attemptCharCodeCaseInsensitive(t.charCodeAt(e)))return!1;return!0}_requireStr(t){const e=this._getLocation();if(!this._attemptStr(t))throw this._createError(V(this._peek),this._getSpan(e))}_attemptCharCodeUntilFn(t){for(;!t(this._peek);)this._advance()}_requireCharCodeUntilFn(t,e){const n=this._getLocation();if(this._attemptCharCodeUntilFn(t),this._index-n.offset<e)throw this._createError(V(this._peek),this._getSpan(n,n))}_attemptUntilChar(t){for(;this._peek!==t;)this._advance()}_readChar(t){if(t&&38===this._peek)return this._decodeEntity();{const t=this._index;return this._advance(),this._input[t]}}_decodeEntity(){const t=this._getLocation();if(this._advance(),!this._attemptCharCode(35)){const e=this._savePosition();if(this._attemptCharCodeUntilFn(K),59!==this._peek)return this._restorePosition(e),"&";this._advance();const n=this._input.substring(t.offset+1,this._index-1),a=P[n];if(!a)throw this._createError(z(n),this._getSpan(t));return a}{const n=this._attemptCharCode(120)||this._attemptCharCode(88),a=this._getLocation().offset;if(this._attemptCharCodeUntilFn(W),59!==this._peek)throw this._createError(V(this._peek),this._getSpan());this._advance();const r=this._input.substring(a,this._index-1);try{const t=parseInt(r,n?16:10);return String.fromCharCode(t)}catch(e){const n=this._input.substring(t.offset+1,this._index-1);throw this._createError(z(n),this._getSpan(t))}}}_consumeRawText(t,e,n){let a;const r=this._getLocation();this._beginToken(t?M.ESCAPABLE_RAW_TEXT:M.RAW_TEXT,r);const i=[];for(;a=this._getLocation(),!this._attemptCharCode(e)||!n();)for(this._index>a.offset&&i.push(this._input.substring(a.offset,this._index));this._peek!==e;)i.push(this._readChar(t));return this._endToken([this._processCarriageReturns(i.join(""))],a)}_consumeComment(t){this._beginToken(M.COMMENT_START,t),this._requireCharCode(45),this._endToken([]);const e=this._consumeRawText(!1,45,()=>this._attemptStr("->"));this._beginToken(M.COMMENT_END,e.sourceSpan.end),this._endToken([])}_consumeCdata(t){this._beginToken(M.CDATA_START,t),this._requireStr("CDATA["),this._endToken([]);const e=this._consumeRawText(!1,93,()=>this._attemptStr("]>"));this._beginToken(M.CDATA_END,e.sourceSpan.end),this._endToken([])}_consumeDocType(t){this._beginToken(M.DOC_TYPE,t),this._attemptUntilChar(62),this._advance(),this._endToken([this._input.substring(t.offset+2,this._index-1)])}_consumePrefixAndName(){const t=this._index;let e=null;for(;58!==this._peek&&!(((n=this._peek)<97||122<n)&&(n<65||90<n)&&(n<48||n>57));)this._advance();var n;let a;return 58===this._peek?(this._advance(),e=this._input.substring(t,this._index-1),a=this._index):a=t,this._requireCharCodeUntilFn(U,this._index===a?1:0),[e,this._input.substring(a,this._index)]}_consumeTagOpen(t){const e=this._savePosition();let n,a;try{if(!A(this._peek))throw this._createError(V(this._peek),this._getSpan());const e=this._index;for(this._consumeTagOpenStart(t),n=this._input.substring(e,this._index),a=n.toLowerCase(),this._attemptCharCodeUntilFn(H);47!==this._peek&&62!==this._peek;)this._consumeAttributeName(),this._attemptCharCodeUntilFn(H),this._attemptCharCode(61)&&(this._attemptCharCodeUntilFn(H),this._consumeAttributeValue()),this._attemptCharCodeUntilFn(H);this._consumeTagOpenEnd()}catch(i){if(i instanceof B)return this._restorePosition(e),this._beginToken(M.TEXT,t),void this._endToken(["<"]);throw i}const r=this._getTagDefinition(n).contentType;r===k.RAW_TEXT?this._consumeRawTextWithTagClose(a,!1):r===k.ESCAPABLE_RAW_TEXT&&this._consumeRawTextWithTagClose(a,!0)}_consumeRawTextWithTagClose(t,e){const n=this._consumeRawText(e,60,()=>!!this._attemptCharCode(47)&&(this._attemptCharCodeUntilFn(H),!!this._attemptStrCaseInsensitive(t)&&(this._attemptCharCodeUntilFn(H),this._attemptCharCode(62))));this._beginToken(M.TAG_CLOSE,n.sourceSpan.end),this._endToken([null,t])}_consumeTagOpenStart(t){this._beginToken(M.TAG_OPEN_START,t);const e=this._consumePrefixAndName();this._endToken(e)}_consumeAttributeName(){this._beginToken(M.ATTR_NAME);const t=this._consumePrefixAndName();this._endToken(t)}_consumeAttributeValue(){let t;if(this._beginToken(M.ATTR_VALUE),39===this._peek||34===this._peek){const e=this._peek;this._advance();const n=[];for(;this._peek!==e;)n.push(this._readChar(!0));t=n.join(""),this._advance()}else{const e=this._index;this._requireCharCodeUntilFn(U,1),t=this._input.substring(e,this._index)}this._endToken([this._processCarriageReturns(t)])}_consumeTagOpenEnd(){const t=this._attemptCharCode(47)?M.TAG_OPEN_END_VOID:M.TAG_OPEN_END;this._beginToken(t),this._requireCharCode(62),this._endToken([])}_consumeTagClose(t){this._beginToken(M.TAG_CLOSE,t),this._attemptCharCodeUntilFn(H);const e=this._consumePrefixAndName();this._attemptCharCodeUntilFn(H),this._requireCharCode(62),this._endToken(e)}_consumeExpansionFormStart(){this._beginToken(M.EXPANSION_FORM_START,this._getLocation()),this._requireCharCode(123),this._endToken([]),this._expansionCaseStack.push(M.EXPANSION_FORM_START),this._beginToken(M.RAW_TEXT,this._getLocation());const t=this._readUntil(44);this._endToken([t],this._getLocation()),this._requireCharCode(44),this._attemptCharCodeUntilFn(H),this._beginToken(M.RAW_TEXT,this._getLocation());const e=this._readUntil(44);this._endToken([e],this._getLocation()),this._requireCharCode(44),this._attemptCharCodeUntilFn(H)}_consumeExpansionCaseStart(){this._beginToken(M.EXPANSION_CASE_VALUE,this._getLocation());const t=this._readUntil(123).trim();this._endToken([t],this._getLocation()),this._attemptCharCodeUntilFn(H),this._beginToken(M.EXPANSION_CASE_EXP_START,this._getLocation()),this._requireCharCode(123),this._endToken([],this._getLocation()),this._attemptCharCodeUntilFn(H),this._expansionCaseStack.push(M.EXPANSION_CASE_EXP_START)}_consumeExpansionCaseEnd(){this._beginToken(M.EXPANSION_CASE_EXP_END,this._getLocation()),this._requireCharCode(125),this._endToken([],this._getLocation()),this._attemptCharCodeUntilFn(H),this._expansionCaseStack.pop()}_consumeExpansionFormEnd(){this._beginToken(M.EXPANSION_FORM_END,this._getLocation()),this._requireCharCode(125),this._endToken([]),this._expansionCaseStack.pop()}_consumeText(){const t=this._getLocation();this._beginToken(M.TEXT,t);const e=[];do{this._interpolationConfig&&this._attemptStr(this._interpolationConfig.start)?(e.push(this._interpolationConfig.start),this._inInterpolation=!0):this._interpolationConfig&&this._inInterpolation&&this._attemptStr(this._interpolationConfig.end)?(e.push(this._interpolationConfig.end),this._inInterpolation=!1):e.push(this._readChar(!0))}while(!this._isTextEnd());this._endToken([this._processCarriageReturns(e.join(""))])}_isTextEnd(){if(60===this._peek||0===this._peek)return!0;if(this._tokenizeIcu&&!this._inInterpolation){if($(this._input,this._index,this._interpolationConfig))return!0;if(125===this._peek&&this._isInExpansionCase())return!0}return!1}_savePosition(){return[this._peek,this._index,this._column,this._line,this.tokens.length]}_readUntil(t){const e=this._index;return this._attemptUntilChar(t),this._input.substring(e,this._index)}_restorePosition(t){this._peek=t[0],this._index=t[1],this._column=t[2],this._line=t[3];const e=t[4];e<this.tokens.length&&(this.tokens=this.tokens.slice(0,e))}_isInExpansionCase(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===M.EXPANSION_CASE_EXP_START}_isInExpansionForm(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===M.EXPANSION_FORM_START}}function H(t){return!C(t)||0===t}function U(t){return C(t)||62===t||47===t||39===t||34===t||61===t}function W(t){return 59===t||0===t||!function(t){return t>=97&&t<=102||t>=65&&t<=70||R(t)}(t)}function K(t){return 59===t||0===t||!A(t)}function $(t,e,n){const a=!!n&&t.indexOf(n.start,e)===e;return 123===t.charCodeAt(e)&&!a}function J(t){return t>=97&&t<=122?t-97+65:t}class Z extends O{constructor(t,e,n){super(e,n),this.elementName=t}static create(t,e,n){return new Z(t,e,n)}}class Q{constructor(t,e){this.rootNodes=t,this.errors=e}}class X{constructor(t){this.getTagDefinition=t}parse(t,e,n=!1,a=N){const r=function(t,e,n,a=!1,r=N){return new Y(new x(t,e),n,a,r).tokenize()}(t,e,this.getTagDefinition,n,a),i=new tt(r.tokens,this.getTagDefinition).build();return new Q(i.rootNodes,r.errors.concat(i.errors))}}class tt{constructor(t,e){this.tokens=t,this.getTagDefinition=e,this._index=-1,this._rootNodes=[],this._errors=[],this._elementStack=[],this._advance()}build(){for(;this._peek.type!==M.EOF;)this._peek.type===M.TAG_OPEN_START?this._consumeStartTag(this._advance()):this._peek.type===M.TAG_CLOSE?this._consumeEndTag(this._advance()):this._peek.type===M.CDATA_START?(this._closeVoidElement(),this._consumeCdata(this._advance())):this._peek.type===M.COMMENT_START?(this._closeVoidElement(),this._consumeComment(this._advance())):this._peek.type===M.TEXT||this._peek.type===M.RAW_TEXT||this._peek.type===M.ESCAPABLE_RAW_TEXT?(this._closeVoidElement(),this._consumeText(this._advance())):this._peek.type===M.EXPANSION_FORM_START?this._consumeExpansion(this._advance()):this._advance();return new Q(this._rootNodes,this._errors)}_advance(){const t=this._peek;return this._index<this.tokens.length-1&&this._index++,this._peek=this.tokens[this._index],t}_advanceIf(t){return this._peek.type===t?this._advance():null}_consumeCdata(t){this._consumeText(this._advance()),this._advanceIf(M.CDATA_END)}_consumeComment(t){const e=this._advanceIf(M.RAW_TEXT);this._advanceIf(M.COMMENT_END);const n=null!==e?e.parts[0].trim():null;this._addToParent(new d(n,t.sourceSpan))}_consumeExpansion(t){const e=this._advance(),n=this._advance(),a=[];for(;this._peek.type===M.EXPANSION_CASE_VALUE;){const t=this._parseExpansionCase();if(!t)return;a.push(t)}if(this._peek.type!==M.EXPANSION_FORM_END)return void this._errors.push(Z.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '}'."));const r=new _(t.sourceSpan.start,this._peek.sourceSpan.end);this._addToParent(new s(e.parts[0],n.parts[0],a,r,e.sourceSpan)),this._advance()}_parseExpansionCase(){const t=this._advance();if(this._peek.type!==M.EXPANSION_CASE_EXP_START)return this._errors.push(Z.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '{'.")),null;const e=this._advance(),n=this._collectExpansionExpTokens(e);if(!n)return null;const a=this._advance();n.push(new q(M.EOF,[],a.sourceSpan));const r=new tt(n,this.getTagDefinition).build();if(r.errors.length>0)return this._errors=this._errors.concat(r.errors),null;const i=new _(t.sourceSpan.start,a.sourceSpan.end),s=new _(e.sourceSpan.start,a.sourceSpan.end);return new o(t.parts[0],r.rootNodes,i,t.sourceSpan,s)}_collectExpansionExpTokens(t){const e=[],n=[M.EXPANSION_CASE_EXP_START];for(;;){if(this._peek.type!==M.EXPANSION_FORM_START&&this._peek.type!==M.EXPANSION_CASE_EXP_START||n.push(this._peek.type),this._peek.type===M.EXPANSION_CASE_EXP_END){if(!et(n,M.EXPANSION_CASE_EXP_START))return this._errors.push(Z.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;if(n.pop(),0===n.length)return e}if(this._peek.type===M.EXPANSION_FORM_END){if(!et(n,M.EXPANSION_FORM_START))return this._errors.push(Z.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;n.pop()}if(this._peek.type===M.EOF)return this._errors.push(Z.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;e.push(this._advance())}}_consumeText(t){let e=t.parts[0];if(e.length>0&&"\n"===e[0]){const t=this._getParentElement();null!==t&&0===t.children.length&&this.getTagDefinition(t.name).ignoreFirstLf&&(e=e.substring(1))}e.length>0&&this._addToParent(new i(e,t.sourceSpan))}_closeVoidElement(){const t=this._getParentElement();t&&this.getTagDefinition(t.name).isVoid&&this._elementStack.pop()}_consumeStartTag(t){const e=t.parts[0],n=t.parts[1],a=[];for(;this._peek.type===M.ATTR_NAME;)a.push(this._consumeAttr(this._advance()));const r=this._getElementFullName(e,n,this._getParentElement());let i=!1;if(this._peek.type===M.TAG_OPEN_END_VOID){this._advance(),i=!0;const e=this.getTagDefinition(r);e.canSelfClose||null!==L(r)||e.isVoid||this._errors.push(Z.create(r,t.sourceSpan,`Only void and foreign elements can be self closed "${t.parts[1]}"`))}else this._peek.type===M.TAG_OPEN_END&&(this._advance(),i=!1);const s=new _(t.sourceSpan.start,this._peek.sourceSpan.start),o=new l(r,a,[],s,s,void 0);this._pushElement(o),i&&(this._popElement(r),o.endSourceSpan=s)}_pushElement(t){const e=this._getParentElement();e&&this.getTagDefinition(e.name).isClosedByChild(t.name)&&this._elementStack.pop();const n=this.getTagDefinition(t.name),{parent:a,container:r}=this._getParentElementSkippingContainers();if(a&&n.requireExtraParent(a.name)){const e=new l(n.parentToAdd,[],[],t.sourceSpan,t.startSourceSpan,t.endSourceSpan);this._insertBeforeContainer(a,r,e)}this._addToParent(t),this._elementStack.push(t)}_consumeEndTag(t){const e=this._getElementFullName(t.parts[0],t.parts[1],this._getParentElement());this._getParentElement()&&(this._getParentElement().endSourceSpan=t.sourceSpan),this.getTagDefinition(e).isVoid?this._errors.push(Z.create(e,t.sourceSpan,`Void elements do not have end tags "${t.parts[1]}"`)):this._popElement(e)||this._errors.push(Z.create(e,t.sourceSpan,`Unexpected closing tag "${e}". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags`))}_popElement(t){for(let e=this._elementStack.length-1;e>=0;e--){const n=this._elementStack[e];if(n.name===t)return this._elementStack.splice(e,this._elementStack.length-e),!0;if(!this.getTagDefinition(n.name).closedByParent)return!1}return!1}_consumeAttr(t){const e=D(t.parts[0],t.parts[1]);let n=t.sourceSpan.end,a="",r=void 0;if(this._peek.type===M.ATTR_VALUE){const t=this._advance();a=t.parts[0],n=t.sourceSpan.end,r=t.sourceSpan}return new u(e,a,new _(t.sourceSpan.start,n),r)}_getParentElement(){return this._elementStack.length>0?this._elementStack[this._elementStack.length-1]:null}_getParentElementSkippingContainers(){let t=null;for(let e=this._elementStack.length-1;e>=0;e--){if("ng-container"!==E(this._elementStack[e].name)[1])return{parent:this._elementStack[e],container:t};t=this._elementStack[e]}return{parent:null,container:t}}_addToParent(t){const e=this._getParentElement();null!==e?e.children.push(t):this._rootNodes.push(t)}_insertBeforeContainer(t,e,n){if(e){if(t){const a=t.children.indexOf(e);t.children[a]=n}else this._rootNodes.push(n);n.children.push(e),this._elementStack.splice(this._elementStack.indexOf(e),0,n)}else this._addToParent(n),this._elementStack.push(n)}_getElementFullName(t,e,n){return null===t&&null===(t=this.getTagDefinition(e).implicitNamespacePrefix)&&null!==n&&(t=L(n.name)),D(t,e)}}function et(t,e){return t.length>0&&t[t.length-1]===e}class nt{constructor(){this.closedByParent=!1,this.contentType=k.PARSABLE_DATA,this.isVoid=!1,this.ignoreFirstLf=!1,this.canSelfClose=!0}requireExtraParent(t){return!1}isClosedByChild(t){return!1}}const at=new nt;function rt(t){return at}class it{constructor({closedByChildren:t,requiredParents:e,implicitNamespacePrefix:n,contentType:a=k.PARSABLE_DATA,closedByParent:r=!1,isVoid:i=!1,ignoreFirstLf:s=!1}={}){this.closedByChildren={},this.closedByParent=!1,this.canSelfClose=!1,t&&t.length>0&&t.forEach(t=>this.closedByChildren[t]=!0),this.isVoid=i,this.closedByParent=r||i,e&&e.length>0&&(this.requiredParents={},this.parentToAdd=e[0],e.forEach(t=>this.requiredParents[t]=!0)),this.implicitNamespacePrefix=n||null,this.contentType=a,this.ignoreFirstLf=s}requireExtraParent(t){if(!this.requiredParents)return!1;if(!t)return!0;const e=t.toLowerCase();return!("template"===e||"ng-template"===t)&&!0!==this.requiredParents[e]}isClosedByChild(t){return this.isVoid||t.toLowerCase()in this.closedByChildren}}const st={base:new it({isVoid:!0}),meta:new it({isVoid:!0}),area:new it({isVoid:!0}),embed:new it({isVoid:!0}),link:new it({isVoid:!0}),img:new it({isVoid:!0}),input:new it({isVoid:!0}),param:new it({isVoid:!0}),hr:new it({isVoid:!0}),br:new it({isVoid:!0}),source:new it({isVoid:!0}),track:new it({isVoid:!0}),wbr:new it({isVoid:!0}),p:new it({closedByChildren:["address","article","aside","blockquote","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","nav","ol","p","pre","section","table","ul"],closedByParent:!0}),thead:new it({closedByChildren:["tbody","tfoot"]}),tbody:new it({closedByChildren:["tbody","tfoot"],closedByParent:!0}),tfoot:new it({closedByChildren:["tbody"],closedByParent:!0}),tr:new it({closedByChildren:["tr"],requiredParents:["tbody","tfoot","thead"],closedByParent:!0}),td:new it({closedByChildren:["td","th"],closedByParent:!0}),th:new it({closedByChildren:["td","th"],closedByParent:!0}),col:new it({requiredParents:["colgroup"],isVoid:!0}),svg:new it({implicitNamespacePrefix:"svg"}),math:new it({implicitNamespacePrefix:"math"}),li:new it({closedByChildren:["li"],closedByParent:!0}),dt:new it({closedByChildren:["dt","dd"]}),dd:new it({closedByChildren:["dt","dd"],closedByParent:!0}),rb:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rt:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rtc:new it({closedByChildren:["rb","rtc","rp"],closedByParent:!0}),rp:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),optgroup:new it({closedByChildren:["optgroup"],closedByParent:!0}),option:new it({closedByChildren:["option","optgroup"],closedByParent:!0}),pre:new it({ignoreFirstLf:!0}),listing:new it({ignoreFirstLf:!0}),style:new it({contentType:k.RAW_TEXT}),script:new it({contentType:k.RAW_TEXT}),title:new it({contentType:k.ESCAPABLE_RAW_TEXT}),textarea:new it({contentType:k.ESCAPABLE_RAW_TEXT,ignoreFirstLf:!0})},ot=new it;function ut(t){return st[t.toLowerCase()]||ot}class lt extends class{visitText(t,e){}visitContainer(t,e){t.children.forEach(t=>t.visit(this))}visitIcu(t,e){Object.keys(t.cases).forEach(e=>{t.cases[e].visit(this)})}visitTagPlaceholder(t,e){t.children.forEach(t=>t.visit(this))}visitPlaceholder(t,e){}visitIcuPlaceholder(t,e){}}{constructor(t,e){super(),this.mapName=e,this.internalToPublic={},this.publicToNextId={},this.publicToInternal={},t.nodes.forEach(t=>t.visit(this))}toPublicName(t){return this.internalToPublic.hasOwnProperty(t)?this.internalToPublic[t]:null}toInternalName(t){return this.publicToInternal.hasOwnProperty(t)?this.publicToInternal[t]:null}visitText(t,e){return null}visitTagPlaceholder(t,e){this.visitPlaceholderName(t.startName),super.visitTagPlaceholder(t,e),this.visitPlaceholderName(t.closeName)}visitPlaceholder(t,e){this.visitPlaceholderName(t.name)}visitIcuPlaceholder(t,e){this.visitPlaceholderName(t.name)}visitPlaceholderName(t){if(!t||this.internalToPublic.hasOwnProperty(t))return;let e=this.mapName(t);if(this.publicToInternal.hasOwnProperty(e)){const t=this.publicToNextId[e];this.publicToNextId[e]=t+1,e=`${e}_${t}`}else this.publicToNextId[e]=1;this.internalToPublic[t]=e,this.publicToInternal[e]=t}}const dt=new a.I18nSelectPipe;class ct{constructor(t,e){this.params=e,this.i18nPluralPipe=new a.I18nPluralPipe(new a.NgLocaleLocalization(t))}visitElement(t,e){return ut(t.name).isVoid?`<${t.name}${this.serializeNodes(t.attrs," ")}/>`:`<${t.name}${this.serializeNodes(t.attrs," ")}>${this.serializeNodes(t.children)}</${t.name}>`}visitAttribute(t,e){return`${t.name}="${t.value}"`}visitText(t,e){return t.value}visitComment(t,e){return`\x3c!--${t.value}--\x3e`}visitExpansion(t,e){const n={};switch(t.cases.forEach(t=>n[t.value]=this.serializeNodes(t.expression)),t.type){case"select":return dt.transform(this.params[t.switchValue]||"",n);case"plural":return this.i18nPluralPipe.transform(this.params[t.switchValue],n)}throw new Error(`Unknown expansion type "${t.type}"`)}visitExpansionCase(t,e){return` ${t.value} {${this.serializeNodes(t.expression)}}`}serializeNodes(t,e=""){return 0===t.length?"":e+t.map(t=>t.visit(this,null)).join(e)}}function ft(t){return t.id||function(t){const e=At(t),n=function(t,e){const n=Array(t.length+3>>>2);for(let a=0;a<n.length;a++)n[a]=It(t,4*a,e);return n}(e,xt.Big),a=8*e.length,r=new Array(80);let[i,s,o,u,l]=[1732584193,4023233417,2562383102,271733878,3285377520];n[a>>5]|=128<<24-a%32,n[15+(a+64>>9<<4)]=a;for(let d=0;d<n.length;d+=16){const[t,e,a,c,f]=[i,s,o,u,l];for(let h=0;h<80;h++){r[h]=h<16?n[d+h]:wt(r[h-3]^r[h-8]^r[h-14]^r[h-16],1);const[t,e]=bt(h,s,o,u),a=[wt(i,5),t,l,e,r[h]].reduce(_t);[l,u,o,s,i]=[u,o,wt(s,30),i,a]}[i,s,o,u,l]=[_t(i,t),_t(s,e),_t(o,a),_t(u,c),_t(l,f)]}return function(t){let e="";for(let n=0;n<t.length;n++){const a=St(t,n);e+=(a>>>4).toString(16)+(15&a).toString(16)}return e.toLowerCase()}(Nt([i,s,o,u,l]))}((e=t.nodes,e.map(t=>t.visit(gt,null))).join("")+`[${t.meaning}]`);var e}class ht{visitText(t,e){return t.value}visitContainer(t,e){return`[${t.children.map(t=>t.visit(this)).join(", ")}]`}visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${t.expression}, ${t.type}, ${n.join(", ")}}`}visitTagPlaceholder(t,e){return t.isVoid?`<ph tag name="${t.startName}"/>`:`<ph tag name="${t.startName}">${t.children.map(t=>t.visit(this)).join(", ")}</ph name="${t.closeName}">`}visitPlaceholder(t,e){return t.value?`<ph name="${t.name}">${t.value}</ph>`:`<ph name="${t.name}"/>`}visitIcuPlaceholder(t,e){return`<ph icu name="${t.name}">${t.value.visit(this)}</ph>`}}const gt=new ht;class pt extends ht{visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${t.type}, ${n.join(", ")}}`}}function bt(t,e,n,a){return t<20?[e&n|~e&a,1518500249]:t<40?[e^n^a,1859775393]:t<60?[e&n|e&a|n&a,2400959708]:[e^n^a,3395469782]}function mt(t){const e=At(t);let[n,a]=[yt(e,0),yt(e,102072)];return 0!==n||0!==a&&1!==a||(n^=319790063,a^=-1801410264),[n,a]}function yt(t,e){let n,[a,r]=[2654435769,2654435769];const i=t.length;for(n=0;n+12<=i;n+=12)a=_t(a,It(t,n,xt.Little)),r=_t(r,It(t,n+4,xt.Little)),e=_t(e,It(t,n+8,xt.Little)),[a,r,e]=vt([a,r,e]);return a=_t(a,It(t,n,xt.Little)),r=_t(r,It(t,n+4,xt.Little)),e=_t(e,i),vt([a,r,e=_t(e,It(t,n+8,xt.Little)<<8)])[2]}function vt([t,e,n]){return t=Ot(t,e),t=Ot(t,n),t^=n>>>13,e=Ot(e,n),e=Ot(e,t),e^=t<<8,n=Ot(n,t),n=Ot(n,e),n^=e>>>13,t=Ot(t,e),t=Ot(t,n),t^=n>>>12,e=Ot(e,n),e=Ot(e,t),e^=t<<16,n=Ot(n,t),n=Ot(n,e),n^=e>>>5,t=Ot(t,e),t=Ot(t,n),t^=n>>>3,e=Ot(e,n),e=Ot(e,t),e^=t<<10,n=Ot(n,t),n=Ot(n,e),[t,e,n^=e>>>15]}const xt=function(){var t={Little:0,Big:1};return t[t.Little]="Little",t[t.Big]="Big",t}();function _t(t,e){return Tt(t,e)[1]}function Tt(t,e){const n=(65535&t)+(65535&e),a=(t>>>16)+(e>>>16)+(n>>>16);return[a>>>16,a<<16|65535&n]}function Ot(t,e){const n=(65535&t)-(65535&e);return(t>>16)-(e>>16)+(n>>16)<<16|65535&n}function wt(t,e){return t<<e|t>>>32-e}function St(t,e){return e>=t.length?0:255&t.charCodeAt(e)}function It(t,e,n){let a=0;if(n===xt.Big)for(let r=0;r<4;r++)a+=St(t,e+r)<<24-8*r;else for(let r=0;r<4;r++)a+=St(t,e+r)<<8*r;return a}function Nt(t){return t.reduce((t,e)=>t+function(t){let e="";for(let n=0;n<4;n++)e+=String.fromCharCode(t>>>8*(3-n)&255);return e}(e),"")}function Ct(t,e){let n="";const a=Math.max(t.length,e.length);for(let r=0,i=0;r<a||i;r++){const a=i+ +(t[r]||0)+ +(e[r]||0);a>=10?(i=1,n+=a-10):(i=0,n+=a)}return n}function Rt(t,e){let n="",a=e;for(;0!==t;t>>>=1)1&t&&(n=Ct(n,a)),a=Ct(a,a);return n}function At(t){let e="";for(let n=0;n<t.length;n++){let a=t.charCodeAt(n);if(a>=55296&&a<=56319&&t.length>n+1){const e=t.charCodeAt(n+1);e>=56320&&e<=57343&&(n++,a=(a-55296<<10)+e-56320+65536)}a<=127?e+=String.fromCharCode(a):a<=2047?e+=String.fromCharCode(a>>6&31|192,63&a|128):a<=65535?e+=String.fromCharCode(a>>12|224,a>>6&63|128,63&a|128):a<=2097151&&(e+=String.fromCharCode(a>>18&7|240,a>>12&63|128,a>>6&63|128,63&a|128))}return e}function kt(t){const e=new Lt,{msgIdToHtml:n,errors:a}=e.parse(t),r={},i=new Dt;if(Object.keys(n).forEach(t=>{const{i18nNodes:e,errors:s}=i.convert(n[t]);a.push(...s),r[t]=e}),a.length)throw new Error("xliff parse errors:\n"+a.join("\n"));return r}const Et=ft;class Lt{parse(t){this._unitMlString=null,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"trans-unit":this._unitMlString=null;const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;this._msgIdToHtml.hasOwnProperty(n)?this._addError(t,"Duplicated translations for msg "+n):(c(this,t.children,null),"string"==typeof this._unitMlString?this._msgIdToHtml[n]=this._unitMlString:this._addError(t,`Message ${n} misses a translation`))}else this._addError(t,'<trans-unit> misses the "id" attribute');break;case"source":break;case"target":const n=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._unitMlString=n;break;case"file":c(this,t.children,null);break;default:c(this,t.children,null)}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Dt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:c(this,e.rootNodes),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitElement(t,e){if("x"===t.name){const e=t.attrs.find(t=>"id"===t.name);if(e)return new m("",e.value,t.sourceSpan);this._addError(t,'<x> misses the "id" attribute')}else this._addError(t,"Unexpected tag");return null}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:c(this,t.expression)}}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}function Pt(t){const e=new qt,{msgIdToHtml:n,errors:a}=e.parse(t),r={},i=new jt;if(Object.keys(n).forEach(t=>{const{i18nNodes:e,errors:s}=i.convert(n[t]);a.push(...s),r[t]=e}),a.length)throw new Error("xliff2 parse errors:\n"+a.join("\n"));return r}const Mt=function(t){if(t.id)return t.id;const e=new pt;return function(t,e){let[n,a]=mt(t);if(e){const[t,r]=mt(e);[n,a]=function([t,e],[n,a]){const[r,i]=Tt(e,a);return[_t(_t(t,n),r),i]}(function([t,e],n){return[t<<n|e>>>32-n,e<<n|t>>>32-n]}([n,a],1),[t,r])}return function(t){let e="",n="1";for(let a=t.length-1;a>=0;a--)e=Ct(e,Rt(St(t,a),n)),n=Rt(256,n);return e.split("").reverse().join("")}(Nt([2147483647&n,a]))}(t.nodes.map(t=>t.visit(e,null)).join(""),t.meaning)};class qt{parse(t){this._unitMlString=null,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"unit":this._unitMlString=null;const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;this._msgIdToHtml.hasOwnProperty(n)?this._addError(t,"Duplicated translations for msg "+n):(c(this,t.children,null),"string"==typeof this._unitMlString?this._msgIdToHtml[n]=this._unitMlString:this._addError(t,`Message ${n} misses a translation`))}else this._addError(t,'<unit> misses the "id" attribute');break;case"source":break;case"target":const n=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._unitMlString=n;break;case"xliff":const a=t.attrs.find(t=>"version"===t.name);if(a){const e=a.value;"2.0"!==e?this._addError(t,`The XLIFF file version ${e} is not compatible with XLIFF 2.0 serializer`):c(this,t.children,null)}break;default:c(this,t.children,null)}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class jt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:[].concat(...c(this,e.rootNodes)),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitElement(t,e){switch(t.name){case"ph":const e=t.attrs.find(t=>"equiv"===t.name);if(e)return[new m("",e.value,t.sourceSpan)];this._addError(t,'<ph> misses the "equiv" attribute');break;case"pc":const n=t.attrs.find(t=>"equivStart"===t.name),a=t.attrs.find(t=>"equivEnd"===t.name);if(n){if(a){const e=a.value;return[].concat(new m("",n.value,t.sourceSpan),...t.children.map(t=>t.visit(this,null)),new m("",e,t.sourceSpan))}this._addError(t,'<ph> misses the "equivEnd" attribute')}else this._addError(t,'<ph> misses the "equivStart" attribute');break;default:this._addError(t,"Unexpected tag")}return null}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:[].concat(...c(this,t.expression))}}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}function Ft(t){return t.toUpperCase().replace(/[^A-Z0-9_]/g,"_")}function Gt(t){const e=new Bt,{msgIdToHtml:n,errors:a}=e.parse(t);if(a.length)throw new Error("xtb parse errors:\n"+a.join("\n"));const r={},i=new Yt;return Object.keys(n).forEach(t=>{var e,a;e=r,a=t,Object.defineProperty(e,a,{configurable:!0,enumerable:!0,get:()=>{const r=(()=>{const{i18nNodes:e,errors:a}=i.convert(n[t]);if(a.length)throw new Error("xtb parse errors:\n"+a.join("\n"));return e})();return Object.defineProperty(e,a,{enumerable:!0,value:r}),r},set:t=>{throw new Error("Could not overwrite an XTB translation")}})}),r}const Vt=ft,zt=function(t){return new lt(t,Ft)};class Bt{parse(t){this._bundleDepth=0,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"translationbundle":this._bundleDepth++,this._bundleDepth>1&&this._addError(t,"<translationbundle> elements can not be nested"),c(this,t.children,null),this._bundleDepth--;break;case"translation":const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;if(this._msgIdToHtml.hasOwnProperty(n))this._addError(t,"Duplicated translations for msg "+n);else{const e=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._msgIdToHtml[n]=e}}else this._addError(t,'<translation> misses the "id" attribute');break;default:this._addError(t,"Unexpected tag")}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Yt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:c(this,e.rootNodes),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:c(this,t.expression)}}visitElement(t,e){if("ph"===t.name){const e=t.attrs.find(t=>"name"===t.name);if(e)return new m("",e.value,t.sourceSpan);this._addError(t,'<ph> misses the "name" attribute')}else this._addError(t,"Unexpected tag");return null}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Ht{constructor(t,e,n,a){this.input=e,this.errLocation=n,this.ctxLocation=a,this.message=`Parser Error: ${t} ${n} [${e}] in ${a}`}}class Ut{constructor(t,e){this.start=t,this.end=e}}class Wt{constructor(t){this.span=t}visit(t,e=null){return null}toString(){return"AST"}}class Kt extends Wt{constructor(t,e,n,a){super(t),this.prefix=e,this.uninterpretedExpression=n,this.location=a}visit(t,e=null){return t.visitQuote(this,e)}toString(){return"Quote"}}class $t extends Wt{visit(t,e=null){}}class Jt extends Wt{visit(t,e=null){return t.visitImplicitReceiver(this,e)}}class Zt extends Wt{constructor(t,e){super(t),this.expressions=e}visit(t,e=null){return t.visitChain(this,e)}}class Qt extends Wt{constructor(t,e,n,a){super(t),this.condition=e,this.trueExp=n,this.falseExp=a}visit(t,e=null){return t.visitConditional(this,e)}}class Xt extends Wt{constructor(t,e,n){super(t),this.receiver=e,this.name=n}visit(t,e=null){return t.visitPropertyRead(this,e)}}class te extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.value=a}visit(t,e=null){return t.visitPropertyWrite(this,e)}}class ee extends Wt{constructor(t,e,n){super(t),this.receiver=e,this.name=n}visit(t,e=null){return t.visitSafePropertyRead(this,e)}}class ne extends Wt{constructor(t,e,n){super(t),this.obj=e,this.key=n}visit(t,e=null){return t.visitKeyedRead(this,e)}}class ae extends Wt{constructor(t,e,n,a){super(t),this.obj=e,this.key=n,this.value=a}visit(t,e=null){return t.visitKeyedWrite(this,e)}}class re extends Wt{constructor(t,e,n,a){super(t),this.exp=e,this.name=n,this.args=a}visit(t,e=null){return t.visitPipe(this,e)}}class ie extends Wt{constructor(t,e){super(t),this.value=e}visit(t,e=null){return t.visitLiteralPrimitive(this,e)}}class se extends Wt{constructor(t,e){super(t),this.expressions=e}visit(t,e=null){return t.visitLiteralArray(this,e)}}class oe extends Wt{constructor(t,e,n){super(t),this.keys=e,this.values=n}visit(t,e=null){return t.visitLiteralMap(this,e)}}class ue extends Wt{constructor(t,e,n){super(t),this.strings=e,this.expressions=n}visit(t,e=null){return t.visitInterpolation(this,e)}}class le extends Wt{constructor(t,e,n,a){super(t),this.operation=e,this.left=n,this.right=a}visit(t,e=null){return t.visitBinary(this,e)}}class de extends Wt{constructor(t,e){super(t),this.expression=e}visit(t,e=null){return t.visitPrefixNot(this,e)}}class ce extends Wt{constructor(t,e){super(t),this.expression=e}visit(t,e=null){return t.visitNonNullAssert(this,e)}}class fe extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.args=a}visit(t,e=null){return t.visitMethodCall(this,e)}}class he extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.args=a}visit(t,e=null){return t.visitSafeMethodCall(this,e)}}class ge extends Wt{constructor(t,e,n){super(t),this.target=e,this.args=n}visit(t,e=null){return t.visitFunctionCall(this,e)}}class pe extends Wt{constructor(t,e,n,a){super(new Ut(0,null==e?0:e.length)),this.ast=t,this.source=e,this.location=n,this.errors=a}visit(t,e=null){return this.ast.visit(t,e)}toString(){return`${this.source} in ${this.location}`}}class be{constructor(t,e,n,a,r){this.span=t,this.key=e,this.keyIsVar=n,this.name=a,this.expression=r}}const me=function(){var t={Character:0,Identifier:1,Keyword:2,String:3,Operator:4,Number:5,Error:6};return t[t.Character]="Character",t[t.Identifier]="Identifier",t[t.Keyword]="Keyword",t[t.String]="String",t[t.Operator]="Operator",t[t.Number]="Number",t[t.Error]="Error",t}(),ye=["var","let","as","null","undefined","true","false","if","else","this"];class ve{tokenize(t){const e=new we(t),n=[];let a=e.scanToken();for(;null!=a;)n.push(a),a=e.scanToken();return n}}class xe{constructor(t,e,n,a){this.index=t,this.type=e,this.numValue=n,this.strValue=a}isCharacter(t){return this.type===me.Character&&this.numValue===t}isNumber(){return this.type===me.Number}isString(){return this.type===me.String}isOperator(t){return this.type===me.Operator&&this.strValue===t}isIdentifier(){return this.type===me.Identifier}isKeyword(){return this.type===me.Keyword}isKeywordLet(){return this.type===me.Keyword&&"let"===this.strValue}isKeywordAs(){return this.type===me.Keyword&&"as"===this.strValue}isKeywordNull(){return this.type===me.Keyword&&"null"===this.strValue}isKeywordUndefined(){return this.type===me.Keyword&&"undefined"===this.strValue}isKeywordTrue(){return this.type===me.Keyword&&"true"===this.strValue}isKeywordFalse(){return this.type===me.Keyword&&"false"===this.strValue}isKeywordThis(){return this.type===me.Keyword&&"this"===this.strValue}isError(){return this.type===me.Error}toNumber(){return this.type===me.Number?this.numValue:-1}toString(){switch(this.type){case me.Character:case me.Identifier:case me.Keyword:case me.Operator:case me.String:case me.Error:return this.strValue;case me.Number:return this.numValue.toString();default:return null}}}function _e(t,e){return new xe(t,me.Character,e,String.fromCharCode(e))}function Te(t,e){return new xe(t,me.Operator,0,e)}const Oe=new xe(-1,me.Character,0,"");class we{constructor(t){this.input=t,this.peek=0,this.index=-1,this.length=t.length,this.advance()}advance(){this.peek=++this.index>=this.length?0:this.input.charCodeAt(this.index)}scanToken(){const t=this.input,e=this.length;let n=this.peek,a=this.index;for(;n<=32;){if(++a>=e){n=0;break}n=t.charCodeAt(a)}if(this.peek=n,this.index=a,a>=e)return null;if(Se(n))return this.scanIdentifier();if(R(n))return this.scanNumber(a);const r=a;switch(n){case 46:return this.advance(),R(this.peek)?this.scanNumber(r):_e(r,46);case 40:case 41:case 123:case 125:case 91:case 93:case 44:case 58:case 59:return this.scanCharacter(r,n);case 39:case 34:return this.scanString();case 35:case 43:case 45:case 42:case 47:case 37:case 94:return this.scanOperator(r,String.fromCharCode(n));case 63:return this.scanComplexOperator(r,"?",46,".");case 60:case 62:return this.scanComplexOperator(r,String.fromCharCode(n),61,"=");case 33:case 61:return this.scanComplexOperator(r,String.fromCharCode(n),61,"=",61,"=");case 38:return this.scanComplexOperator(r,"&",38,"&");case 124:return this.scanComplexOperator(r,"|",124,"|");case 160:for(;C(this.peek);)this.advance();return this.scanToken()}return this.advance(),this.error(`Unexpected character [${String.fromCharCode(n)}]`,0)}scanCharacter(t,e){return this.advance(),_e(t,e)}scanOperator(t,e){return this.advance(),Te(t,e)}scanComplexOperator(t,e,n,a,r,i){this.advance();let s=e;return this.peek===n&&(this.advance(),s+=a),null!=r&&this.peek===r&&(this.advance(),s+=i),Te(t,s)}scanIdentifier(){const t=this.index;for(this.advance();Ie(this.peek);)this.advance();const e=this.input.substring(t,this.index);return ye.indexOf(e)>-1?new xe(t,me.Keyword,0,e):function(t,e){return new xe(t,me.Identifier,0,e)}(t,e)}scanNumber(t){let e=this.index===t;for(this.advance();;){if(R(this.peek));else if(46===this.peek)e=!1;else{if(101!==(n=this.peek)&&69!==n)break;if(this.advance(),Ne(this.peek)&&this.advance(),!R(this.peek))return this.error("Invalid exponent",-1);e=!1}this.advance()}var n;const a=this.input.substring(t,this.index),r=e?function(t){const e=parseInt(t,10);if(isNaN(e))throw new Error("Invalid integer literal when parsing "+t);return e}(a):parseFloat(a);return new xe(t,me.Number,r,"")}scanString(){const t=this.index,e=this.peek;this.advance();let n="",a=this.index;const r=this.input;for(;this.peek!==e;)if(92===this.peek){let t;if(n+=r.substring(a,this.index),this.advance(),this.peek=this.peek,117===this.peek){const e=r.substring(this.index+1,this.index+5);if(!/^[0-9a-f]+$/i.test(e))return this.error(`Invalid unicode escape [\\u${e}]`,0);t=parseInt(e,16);for(let t=0;t<5;t++)this.advance()}else t=Ce(this.peek),this.advance();n+=String.fromCharCode(t),a=this.index}else{if(0===this.peek)return this.error("Unterminated quote",0);this.advance()}const i=r.substring(a,this.index);return this.advance(),new xe(t,me.String,0,n+i)}error(t,e){const n=this.index+e;return function(t,e){return new xe(t,me.Error,0,e)}(n,`Lexer Error: ${t} at column ${n} in expression [${this.input}]`)}}function Se(t){return 97<=t&&t<=122||65<=t&&t<=90||95===t||36===t}function Ie(t){return A(t)||R(t)||95===t||36===t}function Ne(t){return 45===t||43===t}function Ce(t){switch(t){case 110:return 10;case 102:return 12;case 114:return 13;case 116:return 9;case 118:return 11;default:return t}}class Re{constructor(t,e,n){this.strings=t,this.expressions=e,this.offsets=n}}class Ae{constructor(t,e,n){this.templateBindings=t,this.warnings=e,this.errors=n}}function ke(t){const e=S(t.start)+"([\\s\\S]*?)"+S(t.end);return new RegExp(e,"g")}class Ee{constructor(t){this._lexer=t,this.errors=[]}parseAction(t,e,n=N){this._checkNoInterpolation(t,e,n);const a=this._stripComments(t),r=this._lexer.tokenize(this._stripComments(t)),i=new Le(t,e,r,a.length,!0,this.errors,t.length-a.length).parseChain();return new pe(i,t,e,this.errors)}parseBinding(t,e,n=N){const a=this._parseBindingAst(t,e,n);return new pe(a,t,e,this.errors)}parseSimpleBinding(t,e,n=N){const a=this._parseBindingAst(t,e,n),r=De.check(a);return r.length>0&&this._reportError("Host binding expression cannot contain "+r.join(" "),t,e),new pe(a,t,e,this.errors)}_reportError(t,e,n,a){this.errors.push(new Ht(t,e,n,a))}_parseBindingAst(t,e,n){const a=this._parseQuote(t,e);if(null!=a)return a;this._checkNoInterpolation(t,e,n);const r=this._stripComments(t),i=this._lexer.tokenize(r);return new Le(t,e,i,r.length,!1,this.errors,t.length-r.length).parseChain()}_parseQuote(t,e){if(null===t)return null;const n=t.indexOf(":");if(-1===n)return null;const a=t.substring(0,n).trim();if(!function(t){if(0===t.length)return!1;const e=new we(t);if(!Se(e.peek))return!1;for(e.advance();0!==e.peek;){if(!Ie(e.peek))return!1;e.advance()}return!0}(a))return null;const r=t.substring(n+1);return new Kt(new Ut(0,t.length),a,r,e)}parseTemplateBindings(t,e,n){const a=this._lexer.tokenize(e);if(t){const e=this._lexer.tokenize(t).map(t=>(t.index=0,t));a.unshift(...e)}return new Le(e,n,a,e.length,!1,this.errors,0).parseTemplateBindings()}parseInterpolation(t,e,n=N){const a=this.splitInterpolation(t,e,n);if(null===a)return null;const r=[];for(let i=0;i<a.expressions.length;++i){const n=a.expressions[i],s=this._stripComments(n),o=this._lexer.tokenize(s),u=new Le(t,e,o,s.length,!1,this.errors,a.offsets[i]+(n.length-s.length)).parseChain();r.push(u)}return new pe(new ue(new Ut(0,null===t?0:t.length),a.strings,r),t,e,this.errors)}splitInterpolation(t,e,n=N){const a=ke(n),r=t.split(a);if(r.length<=1)return null;const i=[],s=[],o=[];let u=0;for(let l=0;l<r.length;l++){const a=r[l];l%2==0?(i.push(a),u+=a.length):a.trim().length>0?(u+=n.start.length,s.push(a),o.push(u),u+=a.length+n.end.length):(this._reportError("Blank expressions are not allowed in interpolated strings",t,`at column ${this._findInterpolationErrorColumn(r,l,n)} in`,e),s.push("$implict"),o.push(u))}return new Re(i,s,o)}wrapLiteralPrimitive(t,e){return new pe(new ie(new Ut(0,null===t?0:t.length),t),t,e,this.errors)}_stripComments(t){const e=this._commentStart(t);return null!=e?t.substring(0,e).trim():t}_commentStart(t){let e=null;for(let a=0;a<t.length-1;a++){const r=t.charCodeAt(a),i=t.charCodeAt(a+1);if(47===r&&47===i&&null===e)return a;e===r?e=null:null===e&&(39===(n=r)||34===n||96===n)&&(e=r)}var n;return null}_checkNoInterpolation(t,e,n){const a=ke(n),r=t.split(a);r.length>1&&this._reportError(`Got interpolation (${n.start}${n.end}) where expression was expected`,t,`at column ${this._findInterpolationErrorColumn(r,1,n)} in`,e)}_findInterpolationErrorColumn(t,e,n){let a="";for(let r=0;r<e;r++)a+=r%2==0?t[r]:`${n.start}${t[r]}${n.end}`;return a.length}}class Le{constructor(t,e,n,a,r,i,s){this.input=t,this.location=e,this.tokens=n,this.inputLength=a,this.parseAction=r,this.errors=i,this.offset=s,this.rparensExpected=0,this.rbracketsExpected=0,this.rbracesExpected=0,this.index=0}peek(t){const e=this.index+t;return e<this.tokens.length?this.tokens[e]:Oe}get next(){return this.peek(0)}get inputIndex(){return this.index<this.tokens.length?this.next.index+this.offset:this.inputLength+this.offset}span(t){return new Ut(t,this.inputIndex)}advance(){this.index++}optionalCharacter(t){return!!this.next.isCharacter(t)&&(this.advance(),!0)}peekKeywordLet(){return this.next.isKeywordLet()}peekKeywordAs(){return this.next.isKeywordAs()}expectCharacter(t){this.optionalCharacter(t)||this.error("Missing expected "+String.fromCharCode(t))}optionalOperator(t){return!!this.next.isOperator(t)&&(this.advance(),!0)}expectOperator(t){this.optionalOperator(t)||this.error("Missing expected operator "+t)}expectIdentifierOrKeyword(){const t=this.next;return t.isIdentifier()||t.isKeyword()?(this.advance(),t.toString()):(this.error(`Unexpected token ${t}, expected identifier or keyword`),"")}expectIdentifierOrKeywordOrString(){const t=this.next;return t.isIdentifier()||t.isKeyword()||t.isString()?(this.advance(),t.toString()):(this.error(`Unexpected token ${t}, expected identifier, keyword, or string`),"")}parseChain(){const t=[],e=this.inputIndex;for(;this.index<this.tokens.length;){const e=this.parsePipe();if(t.push(e),this.optionalCharacter(59))for(this.parseAction||this.error("Binding expression cannot contain chained expression");this.optionalCharacter(59););else this.index<this.tokens.length&&this.error(`Unexpected token '${this.next}'`)}return 0===t.length?new $t(this.span(e)):1===t.length?t[0]:new Zt(this.span(e),t)}parsePipe(){let t=this.parseExpression();if(this.optionalOperator("|")){this.parseAction&&this.error("Cannot have a pipe in an action expression");do{const e=this.expectIdentifierOrKeyword(),n=[];for(;this.optionalCharacter(58);)n.push(this.parseExpression());t=new re(this.span(t.span.start),t,e,n)}while(this.optionalOperator("|"))}return t}parseExpression(){return this.parseConditional()}parseConditional(){const t=this.inputIndex,e=this.parseLogicalOr();if(this.optionalOperator("?")){const n=this.parsePipe();let a;if(this.optionalCharacter(58))a=this.parsePipe();else{const e=this.input.substring(t,this.inputIndex);this.error(`Conditional expression ${e} requires all 3 expressions`),a=new $t(this.span(t))}return new Qt(this.span(t),e,n,a)}return e}parseLogicalOr(){let t=this.parseLogicalAnd();for(;this.optionalOperator("||");){const e=this.parseLogicalAnd();t=new le(this.span(t.span.start),"||",t,e)}return t}parseLogicalAnd(){let t=this.parseEquality();for(;this.optionalOperator("&&");){const e=this.parseEquality();t=new le(this.span(t.span.start),"&&",t,e)}return t}parseEquality(){let t=this.parseRelational();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"==":case"===":case"!=":case"!==":this.advance();const n=this.parseRelational();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseRelational(){let t=this.parseAdditive();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"<":case">":case"<=":case">=":this.advance();const n=this.parseAdditive();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseAdditive(){let t=this.parseMultiplicative();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"+":case"-":this.advance();const n=this.parseMultiplicative();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseMultiplicative(){let t=this.parsePrefix();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"*":case"%":case"/":this.advance();const n=this.parsePrefix();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parsePrefix(){if(this.next.type===me.Operator){const t=this.inputIndex,e=this.next.strValue;let n;switch(e){case"+":return this.advance(),this.parsePrefix();case"-":return this.advance(),n=this.parsePrefix(),new le(this.span(t),e,new ie(new Ut(t,t),0),n);case"!":return this.advance(),n=this.parsePrefix(),new de(this.span(t),n)}}return this.parseCallChain()}parseCallChain(){let t=this.parsePrimary();for(;;)if(this.optionalCharacter(46))t=this.parseAccessMemberOrMethodCall(t,!1);else if(this.optionalOperator("?."))t=this.parseAccessMemberOrMethodCall(t,!0);else if(this.optionalCharacter(91)){this.rbracketsExpected++;const e=this.parsePipe();if(this.rbracketsExpected--,this.expectCharacter(93),this.optionalOperator("=")){const n=this.parseConditional();t=new ae(this.span(t.span.start),t,e,n)}else t=new ne(this.span(t.span.start),t,e)}else if(this.optionalCharacter(40)){this.rparensExpected++;const e=this.parseCallArguments();this.rparensExpected--,this.expectCharacter(41),t=new ge(this.span(t.span.start),t,e)}else{if(!this.optionalOperator("!"))return t;t=new ce(this.span(t.span.start),t)}}parsePrimary(){const t=this.inputIndex;if(this.optionalCharacter(40)){this.rparensExpected++;const t=this.parsePipe();return this.rparensExpected--,this.expectCharacter(41),t}if(this.next.isKeywordNull())return this.advance(),new ie(this.span(t),null);if(this.next.isKeywordUndefined())return this.advance(),new ie(this.span(t),void 0);if(this.next.isKeywordTrue())return this.advance(),new ie(this.span(t),!0);if(this.next.isKeywordFalse())return this.advance(),new ie(this.span(t),!1);if(this.next.isKeywordThis())return this.advance(),new Jt(this.span(t));if(this.optionalCharacter(91)){this.rbracketsExpected++;const e=this.parseExpressionList(93);return this.rbracketsExpected--,this.expectCharacter(93),new se(this.span(t),e)}if(this.next.isCharacter(123))return this.parseLiteralMap();if(this.next.isIdentifier())return this.parseAccessMemberOrMethodCall(new Jt(this.span(t)),!1);if(this.next.isNumber()){const e=this.next.toNumber();return this.advance(),new ie(this.span(t),e)}if(this.next.isString()){const e=this.next.toString();return this.advance(),new ie(this.span(t),e)}return this.index>=this.tokens.length?(this.error("Unexpected end of expression: "+this.input),new $t(this.span(t))):(this.error("Unexpected token "+this.next),new $t(this.span(t)))}parseExpressionList(t){const e=[];if(!this.next.isCharacter(t))do{e.push(this.parsePipe())}while(this.optionalCharacter(44));return e}parseLiteralMap(){const t=[],e=[],n=this.inputIndex;if(this.expectCharacter(123),!this.optionalCharacter(125)){this.rbracesExpected++;do{const n=this.next.isString(),a=this.expectIdentifierOrKeywordOrString();t.push({key:a,quoted:n}),this.expectCharacter(58),e.push(this.parsePipe())}while(this.optionalCharacter(44));this.rbracesExpected--,this.expectCharacter(125)}return new oe(this.span(n),t,e)}parseAccessMemberOrMethodCall(t,e=!1){const n=t.span.start,a=this.expectIdentifierOrKeyword();if(this.optionalCharacter(40)){this.rparensExpected++;const r=this.parseCallArguments();this.expectCharacter(41),this.rparensExpected--;const i=this.span(n);return e?new he(i,t,a,r):new fe(i,t,a,r)}if(e)return this.optionalOperator("=")?(this.error("The '?.' operator cannot be used in the assignment"),new $t(this.span(n))):new ee(this.span(n),t,a);if(this.optionalOperator("=")){if(!this.parseAction)return this.error("Bindings cannot contain assignments"),new $t(this.span(n));const e=this.parseConditional();return new te(this.span(n),t,a,e)}return new Xt(this.span(n),t,a)}parseCallArguments(){if(this.next.isCharacter(41))return[];const t=[];do{t.push(this.parsePipe())}while(this.optionalCharacter(44));return t}expectTemplateBindingKey(){let t="",e=!1;do{t+=this.expectIdentifierOrKeywordOrString(),e=this.optionalOperator("-"),e&&(t+="-")}while(e);return t.toString()}parseTemplateBindings(){const t=[];let e=null;for(;this.index<this.tokens.length;){const n=this.inputIndex;let a=this.peekKeywordLet();a&&this.advance();const r=this.expectTemplateBindingKey();let i=r;a||(null===e?e=i:i=e+i[0].toUpperCase()+i.substring(1)),this.optionalCharacter(58);let s=null,o=null;if(a)s=this.optionalOperator("=")?this.expectTemplateBindingKey():"$implicit";else if(this.peekKeywordAs())this.advance(),s=r,i=this.expectTemplateBindingKey(),a=!0;else if(this.next!==Oe&&!this.peekKeywordLet()){const t=this.inputIndex,e=this.parsePipe(),n=this.input.substring(t-this.offset,this.inputIndex-this.offset);o=new pe(e,n,this.location,this.errors)}if(t.push(new be(this.span(n),i,a,s,o)),this.peekKeywordAs()&&!a){const e=this.inputIndex;this.advance();const n=this.expectTemplateBindingKey();t.push(new be(this.span(e),n,!0,i,null))}this.optionalCharacter(59)||this.optionalCharacter(44)}return new Ae(t,[],this.errors)}error(t,e=null){this.errors.push(new Ht(t,this.input,this.locationText(e),this.location)),this.skip()}locationText(t=null){return null===t&&(t=this.index),t<this.tokens.length?`at column ${this.tokens[t].index+1} in`:"at the end of the expression"}skip(){let t=this.next;for(;this.index<this.tokens.length&&!t.isCharacter(59)&&(this.rparensExpected<=0||!t.isCharacter(41))&&(this.rbracesExpected<=0||!t.isCharacter(125))&&(this.rbracketsExpected<=0||!t.isCharacter(93));)this.next.isError()&&this.errors.push(new Ht(this.next.toString(),this.input,this.locationText(),this.location)),this.advance(),t=this.next}}class De{constructor(){this.errors=[]}static check(t){const e=new De;return t.visit(e),e.errors}visitImplicitReceiver(t,e){}visitInterpolation(t,e){}visitLiteralPrimitive(t,e){}visitPropertyRead(t,e){}visitPropertyWrite(t,e){}visitSafePropertyRead(t,e){}visitMethodCall(t,e){}visitSafeMethodCall(t,e){}visitFunctionCall(t,e){}visitLiteralArray(t,e){this.visitAll(t.expressions)}visitLiteralMap(t,e){this.visitAll(t.values)}visitBinary(t,e){}visitPrefixNot(t,e){}visitNonNullAssert(t,e){}visitConditional(t,e){}visitPipe(t,e){this.errors.push("pipes")}visitKeyedRead(t,e){}visitKeyedWrite(t,e){}visitAll(t){return t.map(t=>t.visit(this))}visitChain(t,e){}visitQuote(t,e){}}const Pe={A:"LINK",B:"BOLD_TEXT",BR:"LINE_BREAK",EM:"EMPHASISED_TEXT",H1:"HEADING_LEVEL1",H2:"HEADING_LEVEL2",H3:"HEADING_LEVEL3",H4:"HEADING_LEVEL4",H5:"HEADING_LEVEL5",H6:"HEADING_LEVEL6",HR:"HORIZONTAL_RULE",I:"ITALIC_TEXT",LI:"LIST_ITEM",LINK:"MEDIA_LINK",OL:"ORDERED_LIST",P:"PARAGRAPH",Q:"QUOTATION",S:"STRIKETHROUGH_TEXT",SMALL:"SMALL_TEXT",SUB:"SUBSTRIPT",SUP:"SUPERSCRIPT",TBODY:"TABLE_BODY",TD:"TABLE_CELL",TFOOT:"TABLE_FOOTER",TH:"TABLE_HEADER_CELL",THEAD:"TABLE_HEADER",TR:"TABLE_ROW",TT:"MONOSPACED_TEXT",U:"UNDERLINED_TEXT",UL:"UNORDERED_LIST"};class Me{constructor(){this._placeHolderNameCounts={},this._signatureToName={}}getStartTagPlaceholderName(t,e,n){const a=this._hashTag(t,e,n);if(this._signatureToName[a])return this._signatureToName[a];const r=t.toUpperCase(),i=Pe[r]||"TAG_"+r,s=this._generateUniqueName(n?i:"START_"+i);return this._signatureToName[a]=s,s}getCloseTagPlaceholderName(t){const e=this._hashClosingTag(t);if(this._signatureToName[e])return this._signatureToName[e];const n=t.toUpperCase(),a=this._generateUniqueName("CLOSE_"+(Pe[n]||"TAG_"+n));return this._signatureToName[e]=a,a}getPlaceholderName(t,e){const n=t.toUpperCase(),a=`PH: ${n}=${e}`;if(this._signatureToName[a])return this._signatureToName[a];const r=this._generateUniqueName(n);return this._signatureToName[a]=r,r}getUniquePlaceholder(t){return this._generateUniqueName(t.toUpperCase())}_hashTag(t,e,n){return"<"+t+Object.keys(e).sort().map(t=>` ${t}=${e[t]}`).join("")+(n?"/>":`></${t}>`)}_hashClosingTag(t){return this._hashTag("/"+t,{},!1)}_generateUniqueName(t){if(!this._placeHolderNameCounts.hasOwnProperty(t))return this._placeHolderNameCounts[t]=1,t;const e=this._placeHolderNameCounts[t];return this._placeHolderNameCounts[t]=e+1,`${t}_${e}`}}const qe=new Ee(new ve);class je{constructor(t,e){this._expressionParser=t,this._interpolationConfig=e}toI18nMessage(t,e,n,a){this._isIcu=1===t.length&&t[0]instanceof s,this._icuDepth=0,this._placeholderRegistry=new Me,this._placeholderToContent={},this._placeholderToMessage={};const r=c(this,t,{});return new f(r,this._placeholderToContent,this._placeholderToMessage,e,n,a)}visitElement(t,e){const n=c(this,t.children),a={};t.attrs.forEach(t=>{a[t.name]=t.value});const r=ut(t.name).isVoid,i=this._placeholderRegistry.getStartTagPlaceholderName(t.name,a,r);this._placeholderToContent[i]=t.sourceSpan?t.sourceSpan.toString():"";let s="";return r||(s=this._placeholderRegistry.getCloseTagPlaceholderName(t.name),this._placeholderToContent[s]=`</${t.name}>`),new b(t.name,a,i,s,n,r,t.sourceSpan)}visitAttribute(t,e){return this._visitTextWithInterpolation(t.value,t.sourceSpan)}visitText(t,e){return this._visitTextWithInterpolation(t.value,t.sourceSpan)}visitComment(t,e){return null}visitExpansion(t,e){this._icuDepth++;const n={},a=new p(t.switchValue,t.type,n,t.sourceSpan);if(t.cases.forEach(t=>{n[t.value]=new g(t.expression.map(t=>t.visit(this,{})),t.expSourceSpan)}),this._icuDepth--,this._isIcu||this._icuDepth>0){const e=this._placeholderRegistry.getUniquePlaceholder("VAR_"+t.type);return a.expressionPlaceholder=e,this._placeholderToContent[e]=t.switchValue,a}const r=this._placeholderRegistry.getPlaceholderName("ICU",t.sourceSpan.toString()),i=new je(this._expressionParser,this._interpolationConfig);return this._placeholderToMessage[r]=i.toI18nMessage([t],"","",""),new y(a,r,t.sourceSpan)}visitExpansionCase(t,e){throw new Error("Unreachable code")}_visitTextWithInterpolation(t,e){const n=this._expressionParser.splitInterpolation(t,e.start.toString(),this._interpolationConfig);if(!n)return new h(t,e);const a=[],r=new g(a,e),{start:i,end:s}=this._interpolationConfig;for(let u=0;u<n.strings.length-1;u++){const t=n.expressions[u],r=t.split(Fe)[2]||"INTERPOLATION",o=this._placeholderRegistry.getPlaceholderName(r,t);n.strings[u].length&&a.push(new h(n.strings[u],e)),a.push(new m(t,o,e)),this._placeholderToContent[o]=i+t+s}const o=n.strings.length-1;return n.strings[o].length&&a.push(new h(n.strings[o],e)),r}}const Fe=/\/\/[\s\S]*i18n[\s\S]*\([\s\S]*ph[\s\S]*=[\s\S]*("|')([\s\S]*?)\1[\s\S]*\)/g;class Ge extends X{constructor(t=N){super(ut),this.interpolationConfig=t}parse(t,e,n=!1){return super.parse(t,e,n,this.interpolationConfig)}extractMessages(t){const e=new He(["wrapper"]),n=new l("wrapper",[],t,void 0,void 0,void 0);return e.extract(n,this.interpolationConfig)}mergeTranslations(t,e,n,a,r=[]){const i=new He(r),s=new l("wrapper",[],t,void 0,void 0,void 0);return i.merge(s,e,this.interpolationConfig,n,a)}}class Ve{constructor(t,e){this.messages=t,this.errors=e}}class ze{constructor(t={},e,n,a,r,i){this.i18nNodesByMsgId=t,this.digest=e,this.mapperFactory=r,this.i18nToHtml=new Be(t,e,r,a,n,i)}static load(t,e,n,a,r,i,s=N){const o=r(t,e);return new ze(o,t=>n(t),s,i,t=>a(t),console)}get(t,e){const n=this.i18nToHtml.convert(t,e);if(n.errors.length)throw new Error(n.errors.join("\n"));return n.nodes}has(t){return this.digest(t)in this.i18nNodesByMsgId}}class Be{constructor(t={},e,n,a,r,i){this._i18nNodesByMsgId=t,this._digest=e,this._mapperFactory=n,this._missingTranslationStrategy=a,this._interpolationConfig=r,this._console=i,this._contextStack=[],this._errors=[]}convert(t,e){this._contextStack.length=0,this._errors.length=0,this._params=e,this._paramKeys=Object.keys(e);const n=this.convertToText(t),a=t.nodes[0].sourceSpan.start.file.url,r=(new Ge).parse(n,a,!0);return{nodes:r.rootNodes,errors:[...this._errors,...r.errors]}}visitText(t,e){return t.value}visitContainer(t,e){return t.children.map(t=>t.visit(this)).join("")}visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${this._srcMsg.placeholders.hasOwnProperty(t.expression)?this._srcMsg.placeholders[t.expression]:t.expression}, ${t.type}, ${n.join(" ")}}`}visitPlaceholder(t,e){const n=this._mapper(t.name);return this._srcMsg.placeholders.hasOwnProperty(n)?this.convertToValue(this._srcMsg.placeholders[n]):this._srcMsg.placeholderToMessage.hasOwnProperty(n)?this.convertToText(this._srcMsg.placeholderToMessage[n]):(this._addError(t,`Unknown placeholder "${t.name}"`),"")}visitTagPlaceholder(t,e){const n=""+t.tag,a=Object.keys(t.attrs).map(e=>`${e}="${t.attrs[e]}"`).join(" ");return t.isVoid?`<${n} ${a}/>`:`<${n} ${a}>${t.children.map(t=>t.visit(this)).join("")}</${n}>`}visitIcuPlaceholder(t,e){return this.convertToText(this._srcMsg.placeholderToMessage[t.name])}convertToText(t){const e=this._digest(t),n=this._mapperFactory?this._mapperFactory(t):null;let a;this._contextStack.push({msg:this._srcMsg,mapper:this._mapper}),this._srcMsg=t,this._i18nNodesByMsgId.hasOwnProperty(e)?(a=this._i18nNodesByMsgId[e],this._mapper=t=>n?n.toInternalName(t):t):(this._missingTranslationStrategy===r.MissingTranslationStrategy.Error?this._addError(t.nodes[0],`Missing translation for message "${e}"`):this._console&&this._missingTranslationStrategy===r.MissingTranslationStrategy.Warning&&this._console.warn(`Missing translation for message "${e}"`),a=t.nodes,this._mapper=t=>t);const i=a.map(t=>t.visit(this)).join(""),s=this._contextStack.pop();return this._srcMsg=s.msg,this._mapper=s.mapper,i}convertToValue(t){const e=t.replace(this._interpolationConfig.start,"").replace(this._interpolationConfig.end,"");return-1!==this._paramKeys.indexOf(e)?this._params[e]:t}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}const Ye=function(){var t={Extract:0,Merge:1};return t[t.Extract]="Extract",t[t.Merge]="Merge",t}();class He{constructor(t=[]){this._implicitTags=t,this.blockChildren=[]}extract(t,e){return this.init(Ye.Extract,e),t.visit(this,null),this.inI18nBlock&&this._reportError(t,"Unclosed block"),new Ve(this.messages,this.errors)}merge(t,e,n,a,r={}){this.init(Ye.Merge,n,a),this.translations=e,this.metadata=r;const i=t.visit(this,null);return this.inI18nBlock&&this._reportError(t,"Unclosed block"),new Q(i.children,this.errors)}visitExpansionCase(t,e){const n=c(this,t.expression,e);if(this.mode===Ye.Merge)return new o(t.value,n,t.sourceSpan,t.valueSourceSpan,t.expSourceSpan)}visitExpansion(t,e){this.mayBeAddBlockChildren(t);const n=this.inIcu;this.inIcu||(this.isInTranslatableSection&&this.addMessage([t]),this.inIcu=!0);const a=c(this,t.cases,e);return this.mode===Ye.Merge&&(t=new s(t.switchValue,t.type,a,t.sourceSpan,t.switchValueSourceSpan)),this.inIcu=n,t}visitComment(t,e){}visitText(t,e){return this.isInTranslatableSection&&this.mayBeAddBlockChildren(t),t}visitElement(t,e){this.mayBeAddBlockChildren(t),this.depth++;const n=this.inI18nNode,a=this.inImplicitNode;let r=[],i=void 0;const s=t.attrs.find(t=>"i18n"===t.name)||null,o=this._implicitTags.some(e=>t.name===e)&&!this.inIcu&&!this.isInTranslatableSection,u=!a&&o;if(this.inImplicitNode=a||o,this.isInTranslatableSection||this.inIcu)(s||u)&&this._reportError(t,"Could not mark an element as translatable inside a translatable section"),this.mode===Ye.Extract&&c(this,t.children);else{if(s||u){this.inI18nNode=!0;const e=this.addMessage(t.children,this.metadata);i=this.translateMessage(t,e)}if(this.mode===Ye.Extract){const e=s||u;e&&this.openTranslatableSection(t),c(this,t.children),e&&this._closeTranslatableSection(t,t.children)}}return this.mode===Ye.Merge&&(i||t.children).forEach(t=>{const n=t.visit(this,e);n&&!this.isInTranslatableSection&&(r=r.concat(n))}),this.depth--,this.inI18nNode=n,this.inImplicitNode=a,this.mode===Ye.Merge?new l(t.name,[],r,t.sourceSpan,t.startSourceSpan,t.endSourceSpan):null}visitAttribute(t,e){throw new Error("unreachable code")}init(t,e,n={}){this.mode=t,this.inI18nBlock=!1,this.inI18nNode=!1,this.depth=0,this.inIcu=!1,this.msgCountAtSectionStart=void 0,this.errors=[],this.messages=[],this.inImplicitNode=!1,this.createI18nMessage=function(t){const e=new je(qe,t);return(t,n,a,r)=>e.toI18nMessage(t,n,a,r)}(e),this.params=n}addMessage(t,{meaning:e="",description:n="",id:a=""}={}){if(0===t.length||1===t.length&&t[0]instanceof u&&!t[0].value)return null;const r=this.createI18nMessage(t,e,n,a);return this.messages.push(r),r}translateMessage(t,e){if(e&&this.mode===Ye.Merge){const n=this.translations.get(e,this.params);if(n)return n;this._reportError(t,`Translation unavailable for message id="${this.translations.digest(e)}"`)}return[]}mayBeAddBlockChildren(t){this.inI18nBlock&&!this.inIcu&&this.depth===this.blockStartDepth&&this.blockChildren.push(t)}openTranslatableSection(t){this.isInTranslatableSection?this._reportError(t,"Unexpected section start"):this.msgCountAtSectionStart=this.messages.length}get isInTranslatableSection(){return void 0!==this.msgCountAtSectionStart}_closeTranslatableSection(t,e){if(!this.isInTranslatableSection)return void this._reportError(t,"Unexpected section end");const n=this.msgCountAtSectionStart;if(1===e.reduce((t,e)=>t+(e instanceof d?0:1),0))for(let a=this.messages.length-1;a>=n;a--){const t=this.messages[a].nodes;if(!(1===t.length&&t[0]instanceof h)){this.messages.splice(a,1);break}}this.msgCountAtSectionStart=void 0}_reportError(t,e){this.errors.push(new w(t.sourceSpan,e))}}const Ue=new r.InjectionToken("MissingTranslationStrategy");class We{constructor(t,e,n,a=r.MissingTranslationStrategy.Warning){let i,s,o=t=>null;switch(t=(t||"xlf").toLowerCase()){case"xtb":i=Gt,s=Vt,o=zt;break;case"xliff2":case"xlf2":i=Pt,s=Mt;break;case"xliff":case"xlf":i=kt,s=Et;break;default:throw new Error("Unknown translations format "+t)}const u=new Ge,l=ze.load(e,"i18n",s,o,i,a);return(t,e={})=>{const a="string"==typeof t?t:t.value,r={};"object"==typeof t&&(r.id=t.id,r.meaning=t.meaning,r.description=t.description);const i=u.parse(a,"",!0);if(i.errors.length)throw i.errors;return function(t,e,n){return t.map(t=>t.visit(new ct(e,n),null))}(u.mergeTranslations(i.rootNodes,l,e,r,["wrapper"]).rootNodes,n,e).join("")}}}},GyhO:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LRne"),r=n("0EUg");function i(...t){return Object(r.a)()(Object(a.a)(...t))}},"H+zY":function(t,e,n){var a=n("5EpR");t.exports=function(t){var e=a(t),n=e%1;return e==e?n?e-n:e:0}},H8ED:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"хвіліна":"хвіліну":"h"===n?e?"гадзіна":"гадзіну":t+" "+(a=+t,r={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:e?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:e,mm:e,h:e,hh:e,d:"дзень",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},HAuM:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},HDdC:function(t,e,n){"use strict";var a=n("7o/Q"),r=n("2QA8"),i=n("gRHU"),s=n("kJWO"),o=n("mCNh"),u=n("2fFW");n.d(e,"a",(function(){return l}));let l=(()=>{class t{constructor(t){this._isScalar=!1,t&&(this._subscribe=t)}lift(e){const n=new t;return n.source=this,n.operator=e,n}subscribe(t,e,n){const{operator:s}=this,o=function(t,e,n){if(t){if(t instanceof a.a)return t;if(t[r.a])return t[r.a]()}return t||e||n?new a.a(t,e,n):new a.a(i.a)}(t,e,n);if(o.add(s?s.call(o,this.source):this.source||u.a.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),u.a.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o}_trySubscribe(t){try{return this._subscribe(t)}catch(e){u.a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){const{closed:e,destination:n,isStopped:r}=t;if(e||r)return!1;t=n&&n instanceof a.a?n:null}return!0}(t)?t.error(e):console.warn(e)}}forEach(t,e){return new(e=d(e))((e,n)=>{let a;a=this.subscribe(e=>{try{t(e)}catch(r){n(r),a&&a.unsubscribe()}},n,e)})}_subscribe(t){const{source:e}=this;return e&&e.subscribe(t)}[s.a](){return this}pipe(...t){return 0===t.length?this:Object(o.b)(t)(this)}toPromise(t){return new(t=d(t))((t,e)=>{let n;this.subscribe(t=>n=t,t=>e(t),()=>t(n))})}}return t.create=e=>new t(e),t})();function d(t){if(t||(t=u.a.Promise||Promise),!t)throw new Error("no Promise impl found");return t}},HH4o:function(t,e,n){var a=n("tiKp")("iterator"),r=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){r=!0}};s[a]=function(){return this},Array.from(s,(function(){throw 2}))}catch(o){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i={};i[a]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(o){}return n}},HIU9:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("dApe"),i=n("X+05"),s=n("2316"),o=n.n(s),u=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},l=function(){function t(t,e,n){var a=this;this.elementRef=t,this.ngZone=e,this.virtualScroll=n,this.setViewport=o()((function(){a.virtualScroll.setViewport(a.elementRef.nativeElement)}),17),this.scrollEventHandler=this.setViewport.bind(this)}return t.prototype.ngOnInit=function(){this.virtualScroll.init()},t.prototype.ngAfterViewInit=function(){var t=this;setTimeout((function(){t.setViewport(),t.virtualScroll.fireEvent({eventName:i.a.initialized})}));var e=this.elementRef.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("scroll",t.scrollEventHandler)}))},t.prototype.ngOnDestroy=function(){this.virtualScroll.clear(),this.elementRef.nativeElement.removeEventListener("scroll",this.scrollEventHandler)},t.prototype.getTotalHeight=function(){return this.virtualScroll.isEnabled()&&this.virtualScroll.totalHeight+"px"||"auto"},function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.Component)({selector:"tree-viewport",styles:[],providers:[r.a],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div [style.height]="getTotalHeight()">\n        <ng-content></ng-content>\n      </div>\n    </ng-container>\n  '}),u("design:paramtypes",[a.ElementRef,a.NgZone,r.a])],t)}()},HP3h:function(t,e,n){!function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},a={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(t){return function(e,r,i,s){var o=n(e),u=a[t][n(e)];return 2===o&&(u=u[r?0:1]),u.replace(/%d/i,e)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar-ly",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},HYAF:function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},Hd5f:function(t,e,n){var a=n("0Dky"),r=n("tiKp"),i=n("LQDL"),s=r("species");t.exports=function(t){return i>=51||!a((function(){var e=[];return(e.constructor={})[s]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},HjS5:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="zh-TW">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>切換導覽</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>儀表板</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>叢集</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>主機</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>監控程式</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>服務</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>組態</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH 地圖</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>管理員模組</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>記錄</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>池</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>區塊</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>影像</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>鏡像</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>檔案系統</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>物件閘道</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>精靈</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>刪除通知</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>沒有通知。</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>任務與通知</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>選取語言</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>正在載入面板資料...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana 時間選擇器</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>重設設定</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>刷新</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>返回</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>無法載入資料。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>選取的數目</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>找到的數目</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>總計</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名稱</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>描述</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>詳細描述</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>預設值</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>精靈預設值</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>儲存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSH 地圖檢視器</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>正在載入...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>主機名稱</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>此欄位為必填欄位。</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>是的,我確定。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>取消</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>關閉</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>主機清單</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>整體效能</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>找不到項目</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>叢集記錄</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>稽核記錄</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>正在載入組態...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>無法載入組態。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>編輯管理員模組</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>輸入的值不是有效的 UUID,例如 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>輸入的值必須是有效的  IP 位址。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>輸入的值必須為數字。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>輸入的值必須為數字或小數。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>叢集 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap 修改時間</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap 版本編號</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>仲裁成員</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非仲裁成員</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>新增</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>功能</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>叢集範圍的 OSD 旗標</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>提交</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>進階...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 復原優先程度</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>優先程度</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>自訂優先程度值</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>此欄位為必填欄位!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>該值必須介於 0 至 1 之間。</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>重新設定權數</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深層} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深層} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 清單</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>編輯</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>刪除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>統計資料</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>用戶端</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任何用戶端均可存取</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>位址</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必填欄位</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>必須包含一或多個逗號分隔值</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例如︰</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>存取類型</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>新增用戶端</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 沒有可用的叢集 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 選取叢集 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>新增精靈</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>儲存後端</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 沒有可用的資料池 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 選取儲存後端 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>物件閘道使用者</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 沒有可用的使用者 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 選取物件閘道使用者 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 使用者 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 沒有可用的用戶端 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- 選取 cephx 用戶端 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 名稱</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>安全標籤</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>啟用安全標籤</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 路徑</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>路徑必須以「/」開頭,後面可接單詞</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>將建立新目錄</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>路徑</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>路徑只能以單一「/」或單詞開頭</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>將建立新桶</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 通訊協定</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 標記</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>用戶端不能掛接子目錄 (即如果標記為 foo,則用戶端無法掛接 foo/baz)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>透過使用不同標記選項,可將同一路徑輸出多次。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>虛擬</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>透過使用不同虛擬選項,可將同一路徑輸出多次。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 沒有可用的存取類型 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 選取存取類型 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 沒有可用的 squash --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 選取執行哪種類型的使用者 ID 匿名存取 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>傳輸通訊協定</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>歡迎使用 Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>需要指定使用者名稱</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>需要指定密碼</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>登入</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>抱歉,該使用者不存在於 Ceph 中。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>已禁止</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>抱歉,您無權查看您要尋找的內容。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 組態</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>移除本地組態值。將繼承並使用父組態值。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小值為 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>池清單</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名稱只能由英數字元、破折號和底線組成。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>所選的糾刪碼設定檔名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>外掛程式</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>資料區塊 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>必須大於或等於 2。</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>編碼區塊 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>必須大於或等於 1。</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>持久性估值 (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>本地性 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>CRUSH 故障網域</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>CRUSH 本地性</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>技術</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>封包大小</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>CRUSH 根</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>CRUSH 裝置類別</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任何</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>目錄</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名稱...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>所選的 Ceph 池名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>池類型</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 選取池類型 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>放置群組</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>至少需要一個放置群組!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>您的叢集無法處理這麼多的 PG。請重新計算所需的 PG 數量。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>計算說明</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>複製大小</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>旗標</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 覆寫</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>應用程式</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 沒有可用的糾刪碼設定檔 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 選取糾刪碼設定檔 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>CRUSH 規則集</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 選取 CRUSH 規則 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>CRUSH 規則</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>CRUSH 步驟</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>壓縮</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>模式</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>演算法</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 沒有可用的糾刪壓縮演算法 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Blob 最小大小</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>例如 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>值應大於 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Blob 最大大小</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>例如 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>值應大於 blob 最小大小</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>比率</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>壓縮率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>值應介於 0.0 至 1.0 之間</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>例如 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>詳細資料</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>效能詳細資料</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>快取層詳細資料</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>將影像移至垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保護的過期日為</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>無保護</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日期格式錯誤。請使用「YYYY-MM-DD HH:mm:ss」。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保護已過期。請選取一個未來的日期或保留空白。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>移動影像</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>綜覽</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>目標</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>探查驗證</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>使用者名稱的長度必須介於 8 至 64 個字元之間,並且只能包含以下\n                        字元︰字母、「.」、「@」、「-」、「_」或「:」。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>密碼</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>雙向驗證使用者</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>雙向驗證密碼</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>可用資訊︰</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>無法使用 iSCSI 目標</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>池</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>資料池</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>已建立</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>大小</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>物件</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>物件大小</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>已佈建</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>總佈建數</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>分割單位</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>分割計數</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>父</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>區塊名稱字首</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>順序</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>快照</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>影像</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>此設定會覆寫全域值</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>全域</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>此值為全域值。未為此影像設定此選項的值。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>不允許使用「/」和「@」。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 沒有可用的 RBD 池 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 選取池 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>使用專屬的資料池</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>資料池</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>專用於儲存 RBD 的物件資料的池</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>您必須增加大小。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>進階</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>分割</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>分割單位</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 選取分割單位 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>由於已定義分割計數,因此必須填寫此欄位!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>分割單位大於物件大小。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>分割計數</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>由於已定義分割單位,因此必須填寫此欄位!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>分割計數必須大於 0。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>您正要復原</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>清除垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>全部</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>池︰</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>池名稱...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>回存影像</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>若要回存</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>鍵入影像的新名稱并按一下</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新名稱</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>過期日為</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保護過期日為</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 拓撲</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常不需要變更這些參數的預設值。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>支援儲存</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>確認</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>進階設定</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>目標 IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN 模式錯誤。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例如:iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>更多資訊</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>此目標的進階設定存在修改。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>入口網站</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>新增入口網站</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>此影像的設定存在修改。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>新增影像</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 驗證</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>啟動器</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>啟動器</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>用戶端 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>啟動器 IQN 必須唯一。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>使用者名稱的長度必須介於 8 至 64 個字元之間,並且只能包含以下\n                        字元︰字母、「.」、「@」、「-」、「_」或「:」。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>啟動器屬於群組。影像須在群組中進行設定。 </target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>未新增項目。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>新增啟動器</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>群組</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>群組</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>新增群組</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>正在同步</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>準備就緒</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>編輯池鏡像模式</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>在停用鏡像之前,必須先移除對等叢集。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {編輯} other {新增} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>叢集名稱</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>叢集名稱無效。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID 無效。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>監控程式位址</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>逗號分隔的位址...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>監控程式位址無效。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 金鑰</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64 編碼的金鑰...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 金鑰必須為 Base64 編碼的金鑰。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>沒有可用的效能計數器</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>精靈清單</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>效能計數器</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>正在載入桶資料...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>該值無效。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>所選的名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>擁有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 選取使用者 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>已啟用</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>索引類型</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>放置規則</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>標記</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>最大標記數</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>主版本</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>修改時間</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>區域群組</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>桶定額</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大大小</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>無限制</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大物件數</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>使用者名稱</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 選取使用者名稱 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>自動產生金鑰</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>存取金鑰</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>機密金鑰</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>全名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>電子郵件地址</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>已暫停</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>系統</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大桶數</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>子使用者</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>功能</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>使用者定額</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>顯示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>金鑰</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>類型</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 選取類型 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>許可權</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 選取許可權 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>子使用者</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>所選的子使用者 ID 已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>讀取、寫入</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>完整</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift 金鑰</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>自動產生機密金鑰</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>正在載入使用者資料...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>無法載入使用者資料。</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>所選的使用者 ID 已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>電子郵件地址無效。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>所選的電子郵件地址已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>最大桶數</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>已停用</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>自訂</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 金鑰</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>沒有子使用者。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>沒有金鑰。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>沒有功能。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>大小不限</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>最大大小</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>物件數不限</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>最大物件數</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>輸入的值必須大於或等於 0。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>描述...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>許可權</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>角色</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>確認密碼</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>確認的密碼與之前輸入的密碼不符。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>電子郵件</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>電子郵件無效。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>您正要為您自己的使用者移除「使用者讀取/寫入」許可權。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>若繼續,您將再也無法為任何使用者新增或移除角色。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>確定要繼續嗎?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>說明</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>文件</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>關於</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>儀表板設定</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>使用者管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>登入的使用者</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>登出</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>屬性 (OSD 地圖)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>無法使用中繼資料</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>中繼資料</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>效能計數器</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>寫入</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>讀取</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>長條圖</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>目前的值</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>最小值</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>最大值</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>來源</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>層級</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>可在執行時期更新 (可編輯)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>標記</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>列舉值</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>另請參閱</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>叢集狀態</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>管理員精靈</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>物件閘道</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>中繼資料伺服器</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 閘道</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>用戶端 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>用戶端輸送量</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>用戶端讀取/寫入</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>復原輸送量</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>整理</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>效能</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>原始容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>每個 OSD 的 PG 數</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 狀態</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>階層</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>目前</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>已更新探查驗證</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>沒有可用的入口網站。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>沒有可用的影像。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>沒有可用的影像。請確定為目標新增一個影像。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>沒有可用的啟動器。請確定為目標新增一個啟動器。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>目標</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>讀取位元組數</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>寫入位元組數</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>讀取操作數</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>寫入操作數</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>使用中/最佳化開始時間</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>例項</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>進度</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>編輯模式</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>新增對等</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>編輯對等</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>刪除對等</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>本地數量</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>遠端數量</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>鏡像對等</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>金鑰</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>深層壓平</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>分層</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>獨佔鎖定</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>物件對應 (需要獨佔鎖定)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>記錄 (需要獨佔鎖定)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>未受保護</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 快照復原</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>復原</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 快照</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>刪除位置</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>類型</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>主機</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>根</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>待命精靈</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>階層</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>精靈</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>活動</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentry</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用率</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>已更新</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>該值可在執行時期更新。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>精靈/用戶端不會從監控程式組態資料庫\n      提取此值。我們不允許透過「ceph config set ...」\n      設定此選項。應透過 ceph.conf 或使用指令行\n      進行設定。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>該選項僅在精靈啟動期間生效。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>該選項僅影響叢集建立。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>該選項僅影響精靈建立。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>服務</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>目前的值</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>可編輯</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>啟用</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>停用</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>正在重新連接,請稍候...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>公用位址</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>開啟的工作階段</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>禁止標示為 In</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>之前標示為 out 的 OSD 在啟動時將不會重新標示為 in</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>禁止標示為 Out</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD 在設定的間隔過後將不會自動標示為 out</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>禁止標示為 Up</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>不允許 OSD 啟動</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>禁止標示為 Down</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>將會忽略 OSD 故障報告,如此監控程式便不會將 OSD 標示為 down</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>暫停</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>暫停讀取和寫入</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>禁止整理</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>整理已停用</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>禁止深層整理</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>深層整理已停用</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>禁止回填</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG 回填已暫停</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>禁止復原</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG 復原已暫停</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>按位元排序</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>使用按位元排序</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>已清除 Snapdir</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD 已轉換 snapset</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>復原刪除</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>在復原期間,而非在建立互聯時執行刪除</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 記錄硬限制</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>為 pg 記錄長度設定硬限制</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>已更新 OSD 旗標</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>out</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>in</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>down</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>標示</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 遺失</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>已標示為遺失</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>損毀</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>已損毀</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>刪除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>讀取位元組數</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>寫入位元組數</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>讀取操作數</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>寫入操作數</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大回填數</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>處於使用中狀態的最大復原操作數</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>單次啟動的最大復原操作數</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>復原操作間隔睡眠時間</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>工作</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>嚴重性</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>已啟動</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>已使用</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>可用</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>乾淨</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>工作中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警告</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>未知</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>啟用中</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>無檔案系統</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>使用中</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>待命</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>使用中的精靈</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>未設定 NFS Ganesha 服務。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>傳輸</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 使用者</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 檔案系統</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(繼承自全域組態)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>繼承自全域組態</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 選取執行哪種類型的使用者 ID 匿名存取 --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>沒有可用的精靈。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>快取模式</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>逐出前至少可留存的時間</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>衝洗前至少可留存的時間</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>目標最大位元組數</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>目標最大物件數</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>未新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>已達到應用程式上限</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>一個池最多只能四個應用程式定義。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>允許的字元為「_a-zA-Z0-9」</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>最大長度為 128 個字元</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>過濾或新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>複本大小</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>上次變更時間</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>CRUSH 規則集</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>範圍</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>讀取</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>建立</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>系統角色</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>更新使用者</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>繼續</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>您已被自動登出,因為您的角色發生了變更。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>各物件都被分割成資料區塊部分,分別儲存於不同的 OSD。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>運算各物件的編碼區塊并將它們儲存到不同的 OSD。\n      編碼區塊的數量等同於在不遺失資料的前提下,可停機的 OSD 數量。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Jerasure 外掛程式是最一般、最靈活的外掛程式,\n          也是 Ceph 糾刪碼池的預設外掛程式。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Reed_sol_van 方法更靈活︰它足以設定 k\n          和 m。Cauchy_good 方法更快,但您需要小心選取封包大小。\n          所有 reed_sol_r6_op、liberation、blaum_roth、liber8tion 都\n          等同於 RAID6,它們只能設定為 m=2。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>將以位元組大小的封包為單位進行編碼。\n          選取合適的封包大小很難。\n          Jerasure 文件包含有關此主題的詳細資訊。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>使用 jerasure 外掛程式時,若糾刪碼物件儲存於\n          多個 OSD 上,則復原一個遺失的 OSD 時需要讀取所有其他 OSD。\n          例如,若 jerasure 設定為 k=8 且 m=4,則遺失一個 OSD 後需讀取\n          其他十一個 OSD 才能修復。\n\n          lrc 糾刪碼外掛程式會建立本地同位區塊,因此只需較少的 OSD 即\n          可復原。例如,若 lrc 設定為 k=8、m=4 且 l=4,它將為每四個 OSD\n          建立額外的同位區塊。這樣,當一個 OSD 遺失時,它只需四個 OSD\n          即可復原,而不需要十一個。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>將編碼區塊和資料區塊分組為大小為 locality 的集合。例如,\n          k=4 且 m=2 時,若 locality=3,則會建立 2 個大小為 3 的組。這樣,各組都能\n          自行復原,而無需從另一組讀取區塊。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>由 l 定義的區塊集將按哪種 CRUSH 桶類型儲存。\n          例如,若設定為機架,則各組 l 區塊將會被放置到不同的\n          機架中。該值用於建立類似 step choose rack 的 CRUSH\n          規則步驟。若未設定,則不會進行此類分組。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 外掛程式封包了 ISA 程式庫。它只能在 Intel 處理器上執行。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 外掛程式包含兩種 Reed Solomon 格式。\n          若設定為 reed_sol_van,則為 Vandermonde。若設定為 cauchy,則為 Cauchy。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec 外掛程式封包了多個 SHEC 程式庫。\n          與 Reed Solomon 代碼相比,它能更有效地復原資料。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>同位區塊的數量,它們在各自的計算範圍內包含了\n          各資料區塊。該數值被用做持久性估值。例如,若 c=2,\n          則在不遺失資料的前提下,可有 2 個 OSD 停機。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSH 規則的第一步所指向的 CRUSH 桶名稱。\n      例如 step take default。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>確定兩個區塊不會存在於同一故障網域的桶中。\n      例如,若故障網域為主機,則不會有兩個區塊儲存於同一主機中。\n      該值用於建立類似 step chooseleaf host 的 CRUSH 規則步驟。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>使用 CRUSH 地圖中的 crush 裝置類別名稱,\n      將放置限制於特定類別的裝置 (例如 ssd 或 hdd)。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>設定糾刪碼外掛程式所在目錄。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>允許所有操作</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>僅允許不修改伺服器的操作</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>不允許讀取或寫入操作,但是允許任何其他操作</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>不允許讀取、寫入或任何可能修改檔案屬性或目錄內容的操作</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>完全禁止存取</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 選取優先程度 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>資訊</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>過去 5 分鐘</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>過去 15 分鐘</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>過去 30 分鐘</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>過去 1 小時 (預設值)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>過去 3 小時</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>過去 6 小時</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>過去 12 小時</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>過去 24 小時</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨天</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>今天</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>今天到目前為止</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>前天</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>過去 2 天</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>上週的今天</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>上週</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>本週</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>本週目前為止</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>過去 7 天</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>上個月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>本月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>本月目前為止</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>過去 30 天</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>過去 90 天</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>過去 6 個月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>過去 1 年</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>去年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年目前為止</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>過去 2 年</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>過去 5 年</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>未選取項目。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>取消選取項目以再次選取</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>已達到選取上限</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>過濾標記</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>新增徽章</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>沒有可用的項目。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>深層整理</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>損毀</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>壓平</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>標示為 Down</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>標示為 In</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>標示為遺失</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>標示為 Out</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保護</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>重新命名</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>還原</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>移至垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>取消保護</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>已刪除</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>已克隆</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>已複製</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>已壓平</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>已還原</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>已復原</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>是</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>否</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>服務品質</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>指定的每秒 IO 位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>指定的每秒 IO 操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>讀取 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>指定的每秒內讀取的位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>讀取 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>指定的每秒讀取操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>寫入 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>指定的每秒內寫入的位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>寫入 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>指定的每秒寫入操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>指定的 IO 位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>指定的 IO 操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>讀取 BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>指定的讀取的位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>讀取 IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>指定的讀取操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>寫入 BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>指定的寫入的位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>寫入 IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>指定的寫入操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>正在執行</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>執行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>已執行</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>未知任務</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>正在建立</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>建立</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>正在更新</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>正在刪除</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>正在克隆</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>正在複製</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>正在壓平</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>壓平</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>正在復原</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>復原</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>正在移動</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>移動</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>已移動</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>找不到影像。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>正在還原</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>還原</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>正在清除</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>所有池</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>無法停用鏡像,因為其包含對等。</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"I+eb":function(t,e,n){var a=n("2oRo"),r=n("Bs8V").f,i=n("kRJp"),s=n("busE"),o=n("zk60"),u=n("6JNq"),l=n("lMq5");t.exports=function(t,e){var n,d,c,f,h,g=t.target,p=t.global,b=t.stat;if(n=p?a:b?a[g]||o(g,{}):(a[g]||{}).prototype)for(d in e){if(f=e[d],c=t.noTargetGet?(h=r(n,d))&&h.value:n[d],!l(p?d:g+(b?".":"#")+d,t.forced)&&void 0!==c){if(typeof f==typeof c)continue;u(f,c)}(t.sham||c&&c.sham)&&i(f,"sham",!0),s(n,d,f,t)}}},I55L:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=t=>t&&"number"==typeof t.length&&"function"!=typeof t},I8vh:function(t,e,n){var a=n("ppGB"),r=Math.max,i=Math.min;t.exports=function(t,e){var n=a(t);return n<0?r(n+e,0):i(n,e)}},IBtZ:function(t,e,n){!function(t){"use strict";t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(t)?t.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20==0||t%100==0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}})}(n("wd/R"))},IMTC:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},IWUC:function(t,e,n){var a=n("qwH+"),r=n("x3F9");t.exports=function(t){return r(t)&&"[object Set]"==a(t)}},IZUe:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{constructor(t){this.elementRef=t,this.focus=!0}ngAfterViewInit(){const t=this.elementRef.nativeElement;this.focus&&a.isFunction(t.focus)&&t.focus()}set autofocus(t){a.isBoolean(t)?this.focus=t:a.isFunction(t)&&(this.focus=t())}}},Iab2:function(t,e,n){var a,r;void 0===(r="function"==typeof(a=function(){"use strict";function e(t,e,n){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){i(a.response,e,n)},a.onerror=function(){console.error("could not download file")},a.send()}function n(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch(t){}return 200<=e.status&&299>=e.status}function a(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(e){var n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(n)}}var r="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,i=r.saveAs||("object"!=typeof window||window!==r?function(){}:"download"in HTMLAnchorElement.prototype?function(t,i,s){var o=r.URL||r.webkitURL,u=document.createElement("a");u.download=i=i||t.name||"download",u.rel="noopener","string"==typeof t?(u.href=t,u.origin===location.origin?a(u):n(u.href)?e(t,i,s):a(u,u.target="_blank")):(u.href=o.createObjectURL(t),setTimeout((function(){o.revokeObjectURL(u.href)}),4e4),setTimeout((function(){a(u)}),0))}:"msSaveOrOpenBlob"in navigator?function(t,r,i){if(r=r||t.name||"download","string"!=typeof t)navigator.msSaveOrOpenBlob(function(t,e){return void 0===e?e={autoBom:!1}:"object"!=typeof e&&(console.warn("Deprecated: Expected third argument to be a object"),e={autoBom:!e}),e.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\ufeff",t],{type:t.type}):t}(t,i),r);else if(n(t))e(t,r,i);else{var s=document.createElement("a");s.href=t,s.target="_blank",setTimeout((function(){a(s)}))}}:function(t,n,a,i){if((i=i||open("","_blank"))&&(i.document.title=i.document.body.innerText="downloading..."),"string"==typeof t)return e(t,n,a);var s="application/octet-stream"===t.type,o=/constructor/i.test(r.HTMLElement)||r.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&o)&&"object"==typeof FileReader){var l=new FileReader;l.onloadend=function(){var t=l.result;t=u?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"),i?i.location.href=t:location=t,i=null},l.readAsDataURL(t)}else{var d=r.URL||r.webkitURL,c=d.createObjectURL(t);i?i.location=c:location.href=c,i=null,setTimeout((function(){d.revokeObjectURL(c)}),4e4)}});r.saveAs=i.saveAs=i,t.exports=i})?a.apply(e,[]):a)||(t.exports=r)},IeEY:function(t,e,n){var a=n("vJUC"),r=n("CwBR");t.exports=function t(e,n,i,s,o){var u=-1,l=e.length;for(i||(i=r),o||(o=[]);++u<l;){var d=e[u];n>0&&i(d)?n>1?t(d,n-1,i,s,o):a(o,d):s||(o[o.length]=d)}return o}},IfUl:function(t,e,n){var a=n("ZPW6"),r=n("JEWA");t.exports=function(t,e,n){(void 0!==n&&!r(t[e],n)||void 0===n&&!(e in t))&&a(t,e,n)}},IheW:function(t,e,n){"use strict";n.d(e,"m",(function(){return E})),n.d(e,"p",(function(){return q})),n.d(e,"q",(function(){return j})),n.d(e,"n",(function(){return D})),n.d(e,"o",(function(){return P})),n.d(e,"b",(function(){return c})),n.d(e,"g",(function(){return d})),n.d(e,"c",(function(){return I})),n.d(e,"a",(function(){return C})),n.d(e,"d",(function(){return V})),n.d(e,"e",(function(){return G})),n.d(e,"l",(function(){return F})),n.d(e,"h",(function(){return p})),n.d(e,"f",(function(){return w})),n.d(e,"i",(function(){return L})),n.d(e,"k",(function(){return k})),n.d(e,"j",(function(){return M}));var a=n("8Y7J"),r=n("LRne"),i=n("HDdC"),s=n("bOdf"),o=n("pLZG"),u=n("lJxs"),l=n("SVse");class d{}class c{}class f{constructor(t){this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?()=>{this.headers=new Map,t.split("\n").forEach(t=>{const e=t.indexOf(":");if(e>0){const n=t.slice(0,e),a=n.toLowerCase(),r=t.slice(e+1).trim();this.maybeSetNormalizedName(n,a),this.headers.has(a)?this.headers.get(a).push(r):this.headers.set(a,[r])}})}:()=>{this.headers=new Map,Object.keys(t).forEach(e=>{let n=t[e];const a=e.toLowerCase();"string"==typeof n&&(n=[n]),n.length>0&&(this.headers.set(a,n),this.maybeSetNormalizedName(e,a))})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();const e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,e){return this.clone({name:t,value:e,op:"a"})}set(t,e){return this.clone({name:t,value:e,op:"s"})}delete(t,e){return this.clone({name:t,value:e,op:"d"})}maybeSetNormalizedName(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)}init(){this.lazyInit&&(this.lazyInit instanceof f?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(e=>{this.headers.set(e,t.headers.get(e)),this.normalizedNames.set(e,t.normalizedNames.get(e))})}clone(t){const e=new f;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof f?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e}applyUpdate(t){const e=t.name.toLowerCase();switch(t.op){case"a":case"s":let n=t.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(t.name,e);const a=("a"===t.op?this.headers.get(e):void 0)||[];a.push(...n),this.headers.set(e,a);break;case"d":const r=t.value;if(r){let t=this.headers.get(e);if(!t)return;t=t.filter(t=>-1===r.indexOf(t)),0===t.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,t)}else this.headers.delete(e),this.normalizedNames.delete(e)}}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(e=>t(this.normalizedNames.get(e),this.headers.get(e)))}}class h{encodeKey(t){return g(t)}encodeValue(t){return g(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}}function g(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}class p{constructor(t={}){if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new h,t.fromString){if(t.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function(t,e){const n=new Map;return t.length>0&&t.split("&").forEach(t=>{const a=t.indexOf("="),[r,i]=-1==a?[e.decodeKey(t),""]:[e.decodeKey(t.slice(0,a)),e.decodeValue(t.slice(a+1))],s=n.get(r)||[];s.push(i),n.set(r,s)}),n}(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(e=>{const n=t.fromObject[e];this.map.set(e,Array.isArray(n)?n:[n])})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();const e=this.map.get(t);return e?e[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,e){return this.clone({param:t,value:e,op:"a"})}set(t,e){return this.clone({param:t,value:e,op:"s"})}delete(t,e){return this.clone({param:t,value:e,op:"d"})}toString(){return this.init(),this.keys().map(t=>{const e=this.encoder.encodeKey(t);return this.map.get(t).map(t=>e+"="+this.encoder.encodeValue(t)).join("&")}).join("&")}clone(t){const e=new p({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat([t]),e}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":const e=("a"===t.op?this.map.get(t.param):void 0)||[];e.push(t.value),this.map.set(t.param,e);break;case"d":if(void 0===t.value){this.map.delete(t.param);break}{let e=this.map.get(t.param)||[];const n=e.indexOf(t.value);-1!==n&&e.splice(n,1),e.length>0?this.map.set(t.param,e):this.map.delete(t.param)}}}),this.cloneFrom=this.updates=null)}}function b(t){return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer}function m(t){return"undefined"!=typeof Blob&&t instanceof Blob}function y(t){return"undefined"!=typeof FormData&&t instanceof FormData}class v{constructor(t,e,n,a){let r;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase(),function(t){switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||a?(this.body=void 0!==n?n:null,r=a):r=n,r&&(this.reportProgress=!!r.reportProgress,this.withCredentials=!!r.withCredentials,r.responseType&&(this.responseType=r.responseType),r.headers&&(this.headers=r.headers),r.params&&(this.params=r.params)),this.headers||(this.headers=new f),this.params){const t=this.params.toString();if(0===t.length)this.urlWithParams=e;else{const n=e.indexOf("?");this.urlWithParams=e+(-1===n?"?":n<e.length-1?"&":"")+t}}else this.params=new p,this.urlWithParams=e}serializeBody(){return null===this.body?null:b(this.body)||m(this.body)||y(this.body)||"string"==typeof this.body?this.body:this.body instanceof p?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()}detectContentTypeHeader(){return null===this.body||y(this.body)?null:m(this.body)?this.body.type||null:b(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof p?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null}clone(t={}){const e=t.method||this.method,n=t.url||this.url,a=t.responseType||this.responseType,r=void 0!==t.body?t.body:this.body,i=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,s=void 0!==t.reportProgress?t.reportProgress:this.reportProgress;let o=t.headers||this.headers,u=t.params||this.params;return void 0!==t.setHeaders&&(o=Object.keys(t.setHeaders).reduce((e,n)=>e.set(n,t.setHeaders[n]),o)),t.setParams&&(u=Object.keys(t.setParams).reduce((e,n)=>e.set(n,t.setParams[n]),u)),new v(e,n,r,{params:u,headers:o,reportProgress:s,responseType:a,withCredentials:i})}}const x=function(){var t={Sent:0,UploadProgress:1,ResponseHeader:2,DownloadProgress:3,Response:4,User:5};return t[t.Sent]="Sent",t[t.UploadProgress]="UploadProgress",t[t.ResponseHeader]="ResponseHeader",t[t.DownloadProgress]="DownloadProgress",t[t.Response]="Response",t[t.User]="User",t}();class _{constructor(t,e=200,n="OK"){this.headers=t.headers||new f,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||n,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}class T extends _{constructor(t={}){super(t),this.type=x.ResponseHeader}clone(t={}){return new T({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class O extends _{constructor(t={}){super(t),this.type=x.Response,this.body=void 0!==t.body?t.body:null}clone(t={}){return new O({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class w extends _{constructor(t){super(t,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?"Http failure during parsing for "+(t.url||"(unknown url)"):`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}}function S(t,e){return{body:e,headers:t.headers,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials}}class I{constructor(t){this.handler=t}request(t,e,n={}){let a;if(t instanceof v)a=t;else{let r=void 0;r=n.headers instanceof f?n.headers:new f(n.headers);let i=void 0;n.params&&(i=n.params instanceof p?n.params:new p({fromObject:n.params})),a=new v(t,e,void 0!==n.body?n.body:null,{headers:r,params:i,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}const i=Object(r.a)(a).pipe(Object(s.a)(t=>this.handler.handle(t)));if(t instanceof v||"events"===n.observe)return i;const l=i.pipe(Object(o.a)(t=>t instanceof O));switch(n.observe||"body"){case"body":switch(a.responseType){case"arraybuffer":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&!(t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return t.body}));case"blob":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&!(t.body instanceof Blob))throw new Error("Response is not a Blob.");return t.body}));case"text":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&"string"!=typeof t.body)throw new Error("Response is not a string.");return t.body}));case"json":default:return l.pipe(Object(u.a)(t=>t.body))}case"response":return l;default:throw new Error(`Unreachable: unhandled observe type ${n.observe}}`)}}delete(t,e={}){return this.request("DELETE",t,e)}get(t,e={}){return this.request("GET",t,e)}head(t,e={}){return this.request("HEAD",t,e)}jsonp(t,e){return this.request("JSONP",t,{params:(new p).append(e,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(t,e={}){return this.request("OPTIONS",t,e)}patch(t,e,n={}){return this.request("PATCH",t,S(n,e))}post(t,e,n={}){return this.request("POST",t,S(n,e))}put(t,e,n={}){return this.request("PUT",t,S(n,e))}}class N{constructor(t,e){this.next=t,this.interceptor=e}handle(t){return this.interceptor.intercept(t,this.next)}}const C=new a.InjectionToken("HTTP_INTERCEPTORS");class R{intercept(t,e){return e.handle(t)}}const A=/^\)\]\}',?\n/;class k{}class E{constructor(){}build(){return new XMLHttpRequest}}class L{constructor(t){this.xhrFactory=t}handle(t){if("JSONP"===t.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new i.a(e=>{const n=this.xhrFactory.build();if(n.open(t.method,t.urlWithParams),t.withCredentials&&(n.withCredentials=!0),t.headers.forEach((t,e)=>n.setRequestHeader(t,e.join(","))),t.headers.has("Accept")||n.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){const e=t.detectContentTypeHeader();null!==e&&n.setRequestHeader("Content-Type",e)}if(t.responseType){const e=t.responseType.toLowerCase();n.responseType="json"!==e?e:"text"}const a=t.serializeBody();let r=null;const i=()=>{if(null!==r)return r;const e=1223===n.status?204:n.status,a=n.statusText||"OK",i=new f(n.getAllResponseHeaders()),s=function(t){return"responseURL"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader("X-Request-URL"):null}(n)||t.url;return r=new T({headers:i,status:e,statusText:a,url:s}),r},s=()=>{let{headers:a,status:r,statusText:s,url:o}=i(),u=null;204!==r&&(u=void 0===n.response?n.responseText:n.response),0===r&&(r=u?200:0);let l=r>=200&&r<300;if("json"===t.responseType&&"string"==typeof u){const t=u;u=u.replace(A,"");try{u=""!==u?JSON.parse(u):null}catch(d){u=t,l&&(l=!1,u={error:d,text:u})}}l?(e.next(new O({body:u,headers:a,status:r,statusText:s,url:o||void 0})),e.complete()):e.error(new w({error:u,headers:a,status:r,statusText:s,url:o||void 0}))},o=t=>{const{url:a}=i(),r=new w({error:t,status:n.status||0,statusText:n.statusText||"Unknown Error",url:a||void 0});e.error(r)};let u=!1;const l=a=>{u||(e.next(i()),u=!0);let r={type:x.DownloadProgress,loaded:a.loaded};a.lengthComputable&&(r.total=a.total),"text"===t.responseType&&n.responseText&&(r.partialText=n.responseText),e.next(r)},d=t=>{let n={type:x.UploadProgress,loaded:t.loaded};t.lengthComputable&&(n.total=t.total),e.next(n)};return n.addEventListener("load",s),n.addEventListener("error",o),t.reportProgress&&(n.addEventListener("progress",l),null!==a&&n.upload&&n.upload.addEventListener("progress",d)),n.send(a),e.next({type:x.Sent}),()=>{n.removeEventListener("error",o),n.removeEventListener("load",s),t.reportProgress&&(n.removeEventListener("progress",l),null!==a&&n.upload&&n.upload.removeEventListener("progress",d)),n.abort()}})}}const D=new a.InjectionToken("XSRF_COOKIE_NAME"),P=new a.InjectionToken("XSRF_HEADER_NAME");class M{}class q{constructor(t,e,n){this.doc=t,this.platform=e,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(l["ɵparseCookieValue"])(t,this.cookieName),this.lastCookieString=t),this.lastToken}}class j{constructor(t,e){this.tokenService=t,this.headerName=e}intercept(t,e){const n=t.url.toLowerCase();if("GET"===t.method||"HEAD"===t.method||n.startsWith("http://")||n.startsWith("https://"))return e.handle(t);const a=this.tokenService.getToken();return null===a||t.headers.has(this.headerName)||(t=t.clone({headers:t.headers.set(this.headerName,a)})),e.handle(t)}}class F{constructor(t,e){this.backend=t,this.injector=e,this.chain=null}handle(t){if(null===this.chain){const t=this.injector.get(C,[]);this.chain=t.reduceRight((t,e)=>new N(t,e),this.backend)}return this.chain.handle(t)}}class G{static disable(){return{ngModule:G,providers:[{provide:j,useClass:R}]}}static withOptions(t={}){return{ngModule:G,providers:[t.cookieName?{provide:D,useValue:t.cookieName}:[],t.headerName?{provide:P,useValue:t.headerName}:[]]}}}class V{}},IjjT:function(t,e,n){"use strict";let a=(()=>{class t{constructor(e,n=t.now){this.SchedulerAction=e,this.now=n}schedule(t,e=0,n){return new this.SchedulerAction(this,t).schedule(n,e)}}return t.now=()=>Date.now(),t})();n.d(e,"a",(function(){return r}));class r extends a{constructor(t,e=a.now){super(t,()=>r.delegate&&r.delegate!==this?r.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(t,e=0,n){return r.delegate&&r.delegate!==this?r.delegate.schedule(t,e,n):super.schedule(t,e,n)}flush(t){const{actions:e}=this;if(this.active)return void e.push(t);let n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}}},ImZN:function(t,e,n){var a=n("glrk"),r=n("6VoE"),i=n("UMSQ"),s=n("A2ZE"),o=n("NaFW"),u=n("m92n"),l=function(t,e){this.stopped=t,this.result=e};(t.exports=function(t,e,n,d,c){var f,h,g,p,b,m,y,v=s(e,n,d?2:1);if(c)f=t;else{if("function"!=typeof(h=o(t)))throw TypeError("Target is not iterable");if(r(h)){for(g=0,p=i(t.length);p>g;g++)if((b=d?v(a(y=t[g])[0],y[1]):v(t[g]))&&b instanceof l)return b;return new l(!1)}f=h.call(t)}for(m=f.next;!(y=m.call(f)).done;)if("object"==typeof(b=u(f,v,y.value,d))&&b&&b instanceof l)return b;return new l(!1)}).stop=function(t){return new l(!0,t)}},"Ivi+":function(t,e,n){!function(t){"use strict";t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})}(n("wd/R"))},IyEx:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length,r=0,i=[];++n<a;){var s=t[n];e(s,n,t)&&(i[r++]=s)}return i}},IzCI:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1024,["B/s","kB/s","MB/s","GB/s","TB/s","PB/s","EB/s","ZB/s","YB/s"])}}},IzEk:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("4I5i"),i=n("EY2u");function s(t){return e=>0===t?Object(i.b)():e.lift(new o(t))}class o{constructor(t){if(this.total=t,this.total<0)throw new r.a}call(t,e){return e.subscribe(new u(t,this.total))}}class u extends a.a{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){const e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))}}},J3wx:function(t,e,n){var a=n("qN6l");t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=a&&void 0===e?"__lodash_hash_undefined__":e,this}},J9xi:function(t,e,n){var a=n("rk81"),r=n("5DBd"),i=n("bQrF"),s=n("xOlK"),o=n("pYe4"),u=n("j09V"),l=n("Y3RO"),d=n("+GxX"),c=n("G3dZ"),f=n("iQ+a"),h=n("mOnh"),g=n("qwH+"),p=n("8+Q7"),b=n("hTsC"),m=n("pcUq"),y=n("0GLT"),v=n("y/5f"),x=n("8Tpr"),_=n("hmSm"),T=n("8+is"),O=n("FGWQ"),w=n("MBcj"),S={};S["[object Arguments]"]=S["[object Array]"]=S["[object ArrayBuffer]"]=S["[object DataView]"]=S["[object Boolean]"]=S["[object Date]"]=S["[object Float32Array]"]=S["[object Float64Array]"]=S["[object Int8Array]"]=S["[object Int16Array]"]=S["[object Int32Array]"]=S["[object Map]"]=S["[object Number]"]=S["[object Object]"]=S["[object RegExp]"]=S["[object Set]"]=S["[object String]"]=S["[object Symbol]"]=S["[object Uint8Array]"]=S["[object Uint8ClampedArray]"]=S["[object Uint16Array]"]=S["[object Uint32Array]"]=!0,S["[object Error]"]=S["[object Function]"]=S["[object WeakMap]"]=!1,t.exports=function t(e,n,I,N,C,R){var A,k=1&n,E=2&n,L=4&n;if(I&&(A=C?I(e,N,C,R):I(e)),void 0!==A)return A;if(!_(e))return e;var D=y(e);if(D){if(A=p(e),!k)return l(e,A)}else{var P=g(e),M="[object Function]"==P||"[object GeneratorFunction]"==P;if(v(e))return u(e,k);if("[object Object]"==P||"[object Arguments]"==P||M&&!C){if(A=E||M?{}:m(e),!k)return E?c(e,o(A,e)):d(e,s(A,e))}else{if(!S[P])return C?e:{};A=b(e,P,k)}}R||(R=new a);var q=R.get(e);if(q)return q;R.set(e,A),T(e)?e.forEach((function(a){A.add(t(a,n,I,a,e,R))})):x(e)&&e.forEach((function(a,r){A.set(r,t(a,n,I,r,e,R))}));var j=D?void 0:(L?E?h:f:E?w:O)(e);return r(j||e,(function(a,r){j&&(a=e[r=a]),i(A,r,t(a,n,I,r,e,R))})),A}},JBy8:function(t,e,n){var a=n("yoRg"),r=n("eDl+").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return a(t,r)}},"JCF/":function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];t.defineLocale("ku",{months:a,monthsShort:a,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(t){return/ئێواره‌/.test(t)},meridiem:function(t,e,n){return t<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},JEWA:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},JIr8:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("l7GE"),r=n("51Dv"),i=n("ZUHj");function s(t){return function(e){const n=new o(t),a=e.lift(n);return n.caught=a}}class o{constructor(t){this.selector=t}call(t,e){return e.subscribe(new u(t,this.selector,this.caught))}}class u extends a.a{constructor(t,e,n){super(t),this.selector=e,this.caught=n}error(t){if(!this.isStopped){let n;try{n=this.selector(t,this.caught)}catch(e){return void super.error(e)}this._unsubscribeAndRecycle();const a=new r.a(this,void 0,void 0);this.add(a);const s=Object(i.a)(this,n,void 0,void 0,a);s!==a&&this.add(s)}}}},JTPl:function(t,e,n){var a,r=n("isl5"),i=(a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";t.exports=function(t){return!!i&&i in t}},JVSJ:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=t+" ";switch(n){case"ss":return a+(1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return a+(1===t?"minuta":2===t||3===t||4===t?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return a+(1===t?"sat":2===t||3===t||4===t?"sata":"sati");case"dd":return a+(1===t?"dan":"dana");case"MM":return a+(1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci");case"yy":return a+(1===t?"godina":2===t||3===t||4===t?"godine":"godina")}}t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},JvlW:function(t,e,n){!function(t){"use strict";var e={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(t,e,n,a){return e?r(n)[0]:a?r(n)[1]:r(n)[2]}function a(t){return t%10==0||t>10&&t<20}function r(t){return e[t].split("_")}function i(t,e,i,s){var o=t+" ";return 1===t?o+n(0,e,i[0],s):e?o+(a(t)?r(i)[1]:r(i)[0]):s?o+r(i)[1]:o+(a(t)?r(i)[1]:r(i)[2])}t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(t,e,n,a){return e?"kelios sekundės":a?"kelių sekundžių":"kelias sekundes"},ss:i,m:n,mm:i,h:n,hh:i,d:n,dd:i,M:n,MM:i,y:n,yy:i},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})}(n("wd/R"))},JxMD:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("hrfs");n("dgut"),n("Fgil"),n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return o}));var s=a["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto;cursor:pointer;overflow:visible;position:static!important}']],data:{}});function o(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{chartCanvasRef:0}),a["ɵqud"](402653184,2,{chartTooltipRef:0}),(t()(),a["ɵeld"](2,0,null,null,6,"div",[["class","chart-container"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgStyleImpl"],r["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgStyle,[r["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵeld"](5,0,[[1,0],["sparkCanvas",1]],null,1,"canvas",[["baseChart",""]],null,null,null,null,null)),a["ɵdid"](6,999424,null,0,i.a,[a.ElementRef,i.c],{datasets:[0,"datasets"],labels:[1,"labels"],options:[2,"options"],chartType:[3,"chartType"],colors:[4,"colors"]},null),(t()(),a["ɵeld"](7,0,[[2,0],["sparkTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),a["ɵeld"](8,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.style),t(e,6,0,n.datasets,n.labels,n.options,"line",n.colors)}),null)}},"K/tc":function(t,e,n){!function(t){"use strict";t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},K1DE:function(t,e){t.exports=function(t,e){return t.has(e)}},K3g9:function(t,e){t.exports=function(t){return t&&t.length?t[0]:void 0}},KFwg:function(t,e,n){var a=n("r467"),r=n("k9+3");t.exports=function(t,e){var n=r(t,e);return a(n)?n:void 0}},KNDS:function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},KOzp:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return d}));var a=n("z/SZ"),r=n("hpHm"),i=n("2uy1"),s=n("PqYM");class o{constructor(){this.adaptivePosition=!0,this.placement="top",this.triggers="click",this.outsideClick=!1,this.delay=0}}class u{constructor(t){Object.assign(this,t)}get isBs3(){return Object(r.d)()}}class l{constructor(t,e,n,a,r,i){this._elementRef=e,this._renderer=n,this._positionService=i,this.outsideClick=!1,this.containerClass="",this._isInited=!1,this._popover=r.createLoader(e,a,n).provide({provide:o,useValue:t}),Object.assign(this,t),this.onShown=this._popover.onShown,this.onHidden=this._popover.onHidden,"undefined"!=typeof window&&e.nativeElement.addEventListener("click",(function(){try{e.nativeElement.focus()}catch(t){return}}))}get isOpen(){return this._popover.isShown}set isOpen(t){t?this.show():this.hide()}show(){if(this._popover.isShown||!this.popover||this._delayTimeoutId)return;this._positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition},preventOverflow:{enabled:this.adaptivePosition}}});const t=()=>{this._delayTimeoutId&&(this._delayTimeoutId=void 0),this._popover.attach(u).to(this.container).position({attachment:this.placement}).show({content:this.popover,context:this.popoverContext,placement:this.placement,title:this.popoverTitle,containerClass:this.containerClass}),this.adaptivePosition||(this._positionService.calcPosition(),this._positionService.deletePositionElement(this._popover._componentRef.location)),this.isOpen=!0},e=()=>{this._popoverCancelShowFn&&this._popoverCancelShowFn()};if(this.delay){const n=Object(s.a)(this.delay).subscribe(()=>{t(),e()});this.triggers&&Object(r.f)(this.triggers).forEach(t=>{this._popoverCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,t.close,()=>{n.unsubscribe(),e()})})}else t()}hide(){this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this.isOpen&&(this._popover.hide(),this.isOpen=!1)}toggle(){if(this.isOpen)return this.hide();this.show()}ngOnInit(){this._isInited||(this._isInited=!0,this._popover.listen({triggers:this.triggers,outsideClick:this.outsideClick,show:()=>this.show()}))}ngOnDestroy(){this._popover.dispose()}}class d{static forRoot(){return{ngModule:d,providers:[o,a.a,i.a]}}}},KQir:function(t,e){t.exports=function(){return!1}},KSF8:function(t,e,n){!function(t){"use strict";t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n("wd/R"))},KTz0:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},KVJa:function(t,e,n){"use strict";var a=n("8Y7J");n("Z21x"),n("SVse"),n("sne2"),n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var r=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function i(t){return a["ɵvid"](0,[(t()(),a["ɵted"](-1,null,[" \n"])),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-light tc_backButton"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.back()&&a),a}),null,null)),(t()(),a["ɵted"](2,null,[" ","\n"]))],null,(function(t,e){t(e,2,0,e.component.name)}))}},Kqap:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){let n=!1;return arguments.length>=2&&(n=!0),function(a){return a.lift(new i(t,e,n))}}class i{constructor(t,e,n=!1){this.accumulator=t,this.seed=e,this.hasSeed=n}call(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))}}class s extends a.a{constructor(t,e,n,a){super(t),this.accumulator=e,this._seed=n,this.hasSeed=a,this.index=0}get seed(){return this._seed}set seed(t){this.hasSeed=!0,this._seed=t}_next(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)}_tryNext(t){const e=this.index++;let n;try{n=this.accumulator(this.seed,t,e)}catch(a){this.destination.error(a)}this.seed=n,this.destination.next(n)}}},KqfI:function(t,e,n){"use strict";function a(){}n.d(e,"a",(function(){return a}))},L0Z1:function(t,e,n){(function(t){var a=n("qzZ1"),r=e&&!e.nodeType&&e,i=r&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===r&&a.process,o=function(){try{return i&&i.require&&i.require("util").types||s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=o}).call(this,n("YuTi")(t))},LJNh:function(t,e,n){var a=n("zDBQ"),r=n("8V0S"),i=n("/F2L");t.exports=function(t){return i(r(t,void 0,a),t+"")}},LOMR:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("Fwy9"),i=n("gk6K"),s=n("woSy"),o=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"div",[["class","node-drop-slot"]],null,[[null,"treeDrop"],[null,"drop"]],(function(t,e,n){var r=!0,i=t.component;return"drop"===e&&(r=!1!==a["ɵnov"](t,1).onDrop(n)&&r),"treeDrop"===e&&(r=!1!==i.onDrop(n)&&r),r}),null,null)),a["ɵdid"](1,4341760,null,0,r.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{allowDragoverStyling:[0,"allowDragoverStyling"],treeAllowDrop:[1,"treeAllowDrop"]},{onDropCallback:"treeDrop"})],(function(t,e){var n=e.component;t(e,1,0,!0,n.allowDrop.bind(n))}),null)}var l=n("SVse"),d=n("CoVI"),c=n("uNpg"),f=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["class","tree-node-checkbox"],["type","checkbox"]],[[8,"checked",0],[8,"indeterminate",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.node.mouseAction("checkboxClick",n)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,1,0,n.node.isSelected,n.node.isPartiallySelected)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,h)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var p=n("jV1L"),b=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","toggle-children-wrapper"]],[[2,"toggle-children-wrapper-expanded",null],[2,"toggle-children-wrapper-collapsed",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.node.mouseAction("expanderClick",n)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"span",[["class","toggle-children"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.node.isExpanded,n.node.isCollapsed)}))}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[["class","toggle-children-placeholder"]],null,null,null,null,null))],null,null)}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](4,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.node.hasChildren),t(e,4,0,!n.node.hasChildren)}),null)}function x(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,v)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var _=n("C523"),T=n("rZud"),O=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.node.displayField)}))}function S(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0,node:1,index:2})],(function(t,e){var n=e.component;t(e,1,0,!n.template);var a=t(e,4,0,n.node,n.node,n.index);t(e,3,0,a,n.template)}),null)}var I=n("OIDT"),N=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-checkbox",[],null,null,null,g,f)),a["ɵdid"](1,49152,null,0,c.a,[],{node:[0,"node"]},null)],(function(t,e){t(e,1,0,e.component.node)}),null)}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","node-wrapper"]],[[4,"padding-left",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,C)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"tree-node-expander",[],null,null,null,x,b)),a["ɵdid"](4,49152,null,0,p.a,[],{node:[0,"node"]},null),(t()(),a["ɵeld"](5,0,null,null,4,"div",[["class","node-content-wrapper"]],[[2,"node-content-wrapper-active",null],[2,"node-content-wrapper-focused",null]],[[null,"click"],[null,"dblclick"],[null,"mouseover"],[null,"mouseout"],[null,"contextmenu"],[null,"treeDrop"],[null,"treeDropDragOver"],[null,"treeDropDragLeave"],[null,"treeDropDragEnter"],[null,"drop"],[null,"dragstart"],[null,"dragend"]],(function(t,e,n){var r=!0,i=t.component;return"drop"===e&&(r=!1!==a["ɵnov"](t,6).onDrop(n)&&r),"dragstart"===e&&(r=!1!==a["ɵnov"](t,7).onDragStart(n)&&r),"dragend"===e&&(r=!1!==a["ɵnov"](t,7).onDragEnd()&&r),"click"===e&&(r=!1!==i.node.mouseAction("click",n)&&r),"dblclick"===e&&(r=!1!==i.node.mouseAction("dblClick",n)&&r),"mouseover"===e&&(r=!1!==i.node.mouseAction("mouseOver",n)&&r),"mouseout"===e&&(r=!1!==i.node.mouseAction("mouseOut",n)&&r),"contextmenu"===e&&(r=!1!==i.node.mouseAction("contextMenu",n)&&r),"treeDrop"===e&&(r=!1!==i.node.onDrop(n)&&r),"treeDropDragOver"===e&&(r=!1!==i.node.mouseAction("dragOver",n)&&r),"treeDropDragLeave"===e&&(r=!1!==i.node.mouseAction("dragLeave",n)&&r),"treeDropDragEnter"===e&&(r=!1!==i.node.mouseAction("dragEnter",n)&&r),r}),null,null)),a["ɵdid"](6,4341760,null,0,r.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{allowDragoverStyling:[0,"allowDragoverStyling"],treeAllowDrop:[1,"treeAllowDrop"]},{onDropCallback:"treeDrop",onDragOverCallback:"treeDropDragOver",onDragLeaveCallback:"treeDropDragLeave",onDragEnterCallback:"treeDropDragEnter"}),a["ɵdid"](7,4603904,null,0,_.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{draggedElement:[0,"draggedElement"],treeDragEnabled:[1,"treeDragEnabled"]},null),(t()(),a["ɵeld"](8,0,null,null,1,"tree-node-content",[],null,null,null,S,O)),a["ɵdid"](9,49152,null,0,T.a,[],{node:[0,"node"],index:[1,"index"],template:[2,"template"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.node.options.useCheckbox),t(e,4,0,n.node),t(e,6,0,n.node.allowDragoverStyling(),n.node.allowDrop),t(e,7,0,n.node,n.node.allowDrag()),t(e,9,0,n.node,n.index,n.templates.treeNodeTemplate)}),(function(t,e){var n=e.component;t(e,0,0,n.node.getNodePadding()),t(e,5,0,n.node.isActive,n.node.isFocused)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,R)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0,node:1,index:2,templates:3})],(function(t,e){var n=e.component;t(e,1,0,!n.templates.treeNodeWrapperTemplate);var a=t(e,4,0,n.node,n.node,n.index,n.templates);t(e,3,0,a,n.templates.treeNodeWrapperTemplate)}),null)}var k=n("WaXT"),E=n("ZhuC"),L=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["loading..."]))],null,null)}function P(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,D)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0})],(function(t,e){var n=e.component;t(e,1,0,!n.template);var a=t(e,4,0,n.node);t(e,3,0,a,n.template)}),null)}var M=n("4Dmd"),q=n("pcHL"),j=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function F(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-collection",[],null,null,null,X,J)),a["ɵdid"](1,245760,null,0,k.a,[],{nodes:[0,"nodes"],treeModel:[1,"treeModel"],templates:[2,"templates"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.node.children,n.node.treeModel,n.templates)}),null)}function G(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-loading-component",[["class","tree-node-loading"]],[[4,"padding-left",null]],null,null,P,L)),a["ɵdid"](1,49152,null,0,E.a,[],{template:[0,"template"],node:[1,"node"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.templates.loadingTemplate,n.node)}),(function(t,e){t(e,0,0,e.component.node.getNodePadding())}))}function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[2,"tree-children",null],[2,"tree-children-no-padding",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,F)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,G)),a["ɵdid"](4,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.node.children),t(e,4,0,!n.node.children)}),(function(t,e){t(e,0,0,!0,e.component.node.options.levelPadding)}))}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](2,16384,null,0,M.a,[a.Renderer2,a.TemplateRef,a.ViewContainerRef],{animateSpeed:[0,"animateSpeed"],animateAcceleration:[1,"animateAcceleration"],isEnabled:[2,"isEnabled"],isOpen:[3,"isOpen"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.node.options.animateSpeed,n.node.options.animateAcceleration,n.node.options.animateExpand,n.node.isExpanded)}),null)}function B(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,z)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var Y=n("TNUL"),H=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function U(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-drop-slot",[],null,null,null,u,o)),a["ɵdid"](1,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.node.parent,n.node.index)}),null)}function W(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[],[[8,"className",0],[2,"tree-node",null],[2,"tree-node-expanded",null],[2,"tree-node-collapsed",null],[2,"tree-node-leaf",null],[2,"tree-node-active",null],[2,"tree-node-focused",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,U)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"tree-node-wrapper",[],null,null,null,A,N)),a["ɵdid"](4,49152,null,0,I.a,[],{node:[0,"node"],index:[1,"index"],templates:[2,"templates"]},null),(t()(),a["ɵeld"](5,0,null,null,1,"tree-node-children",[],null,null,null,B,j)),a["ɵdid"](6,49152,null,0,q.a,[],{node:[0,"node"],templates:[1,"templates"]},null),(t()(),a["ɵeld"](7,0,null,null,1,"tree-node-drop-slot",[],null,null,null,u,o)),a["ɵdid"](8,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){var n=e.component;t(e,2,0,0===n.index),t(e,4,0,n.node,n.index,n.templates),t(e,6,0,n.node,n.templates),t(e,8,0,n.node.parent,n.node.index+1)}),(function(t,e){var n=e.component;t(e,0,0,n.node.getClass(),!0,n.node.isExpanded&&n.node.hasChildren,n.node.isCollapsed&&n.node.hasChildren,n.node.isLeaf,n.node.isActive,n.node.isFocused)}))}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,W)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](4,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](5,{$implicit:0,node:1,index:2,templates:3}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,!n.templates.treeNodeFullTemplate);var a=t(e,5,0,n.node,n.node,n.index,n.templates);t(e,4,0,a,n.templates.treeNodeFullTemplate)}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,K)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var J=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node",[],null,null,null,$,H)),a["ɵdid"](1,49152,null,0,Y.a,[],{node:[0,"node"],index:[1,"index"],templates:[2,"templates"]},null)],(function(t,e){t(e,1,0,e.context.$implicit,e.context.index,e.component.templates)}),null)}function Q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"div",[],[[4,"margin-top",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Z)),a["ɵdid"](3,278528,null,0,l.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.viewportNodes,n.trackNode)}),(function(t,e){t(e,1,0,e.component.marginTop)}))}function X(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,Q)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var tt=n("dApe"),et=n("MP8s"),nt=n("HIU9"),at=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[],[[4,"height",null]],null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){t(e,1,0,e.component.getTotalHeight())}))}function it(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,rt)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}n("fxL3"),n.d(e,"a",(function(){return st})),n.d(e,"b",(function(){return lt}));var st=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tree-node-collection",[],null,null,null,X,J)),a["ɵdid"](1,245760,null,0,k.a,[],{nodes:[0,"nodes"],treeModel:[1,"treeModel"],templates:[2,"templates"]},null),a["ɵpod"](2,{loadingTemplate:0,treeNodeTemplate:1,treeNodeWrapperTemplate:2,treeNodeFullTemplate:3})],(function(t,e){var n=e.component,a=n.treeModel.roots,r=n.treeModel,i=t(e,2,0,n.loadingTemplate,n.treeNodeTemplate,n.treeNodeWrapperTemplate,n.treeNodeFullTemplate);t(e,1,0,a,r,i)}),null)}function ut(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-drop-slot",[["class","empty-tree-drop-slot"]],null,null,null,u,o)),a["ɵdid"](1,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){t(e,1,0,e.component.treeModel.virtualRoot,0)}),null)}function lt(t){return a["ɵvid"](0,[a["ɵqud"](671088640,1,{viewportComponent:0}),(t()(),a["ɵeld"](1,0,null,null,7,"tree-viewport",[],null,null,null,it,at)),a["ɵprd"](512,null,tt.a,tt.a,[et.a]),a["ɵdid"](3,4440064,[[1,4],["viewport",4]],0,nt.a,[a.ElementRef,a.NgZone,tt.a],null,null),(t()(),a["ɵeld"](4,0,null,0,4,"div",[["class","angular-tree-component"]],[[2,"node-dragging",null],[2,"angular-tree-component-rtl",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ot)),a["ɵdid"](6,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ut)),a["ɵdid"](8,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0),t(e,6,0,n.treeModel.roots),t(e,8,0,n.treeModel.isEmptyTree())}),(function(t,e){var n=e.component;t(e,4,0,n.treeDraggedElement.isDragging(),n.treeModel.options.rtl)}))}},LQDL:function(t,e,n){var a,r,i=n("2oRo"),s=n("NC/Y"),o=i.process,u=o&&o.versions,l=u&&u.v8;l?r=(a=l.split("."))[0]+a[1]:s&&(!(a=s.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=s.match(/Chrome\/(\d+)/))&&(r=a[1]),t.exports=r&&+r},LRne:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("z+Ro"),r=n("yCtX"),i=n("jZKg");function s(...t){let e=t[t.length-1];return Object(a.a)(e)?(t.pop(),Object(i.a)(t,e)):Object(r.a)(t)}},LWR0:function(t,e,n){var a=n("hmSm"),r=n("fIUv"),i=n("jNLg"),s=Math.max,o=Math.min;t.exports=function(t,e,n){var u,l,d,c,f,h,g=0,p=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=u,a=l;return u=l=void 0,g=e,c=t.apply(a,n)}function v(t){return g=t,f=setTimeout(_,e),p?y(t):c}function x(t){var n=t-h;return void 0===h||n>=e||n<0||b&&t-g>=d}function _(){var t=r();if(x(t))return T(t);f=setTimeout(_,function(t){var n=e-(t-h);return b?o(n,d-(t-g)):n}(t))}function T(t){return f=void 0,m&&u?y(t):(u=l=void 0,c)}function O(){var t=r(),n=x(t);if(u=arguments,l=this,h=t,n){if(void 0===f)return v(h);if(b)return clearTimeout(f),f=setTimeout(_,e),y(h)}return void 0===f&&(f=setTimeout(_,e)),c}return e=i(e)||0,a(n)&&(p=!!n.leading,d=(b="maxWait"in n)?s(i(n.maxWait)||0,e):d,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==f&&clearTimeout(f),g=0,u=h=l=f=void 0},O.flush=function(){return void 0===f?c:T(r())},O}},LaC8:function(t,e,n){var a=n("pMcL"),r=n("sA22"),i=n("eNG0"),s=a?a.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":s&&s in Object(t)?r(t):i(t)}},LceX:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return c})),n.d(e,"c",(function(){return i})),n.d(e,"d",(function(){return s})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return u})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return d}));var a=n("sne2");n("eTJe"),n("n/D3"),n("V3my"),n("ZEkX");class r{}const i={breadcrumbs:"Users"},s={breadcrumbs:a.a.CREATE},o={breadcrumbs:a.a.EDIT},u={breadcrumbs:"Roles"},l={breadcrumbs:a.a.CREATE},d={breadcrumbs:a.a.EDIT};class c{}},LgIp:function(t,e){t.exports=function(t){for(var e=-1,n=null==t?0:t.length,a=0,r=[];++e<n;){var i=t[e];i&&(r[a++]=i)}return r}},Lhse:function(t,e,n){"use strict";function a(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}n.d(e,"a",(function(){return r}));const r=a()},Loxo:function(t,e,n){!function(t){"use strict";t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n("wd/R"))},LqlI:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return f})),n.d(e,"c",(function(){return c})),n.d(e,"d",(function(){return d})),n.d(e,"e",(function(){return h})),n.d(e,"f",(function(){return u}));var a=n("8Y7J"),r=n("hpHm"),i=n("z/SZ"),s=n("2uy1");class o{constructor(){this.hide=Function,this.setClass=Function}}class u{}const l={backdrop:!0,keyboard:!0,focus:!0,show:!1,ignoreBackdropClick:!1,class:"",animated:!0,initialState:{}};class d{constructor(t,e,n){this._element=e,this._renderer=n,this.isShown=!1,this.isModalHiding=!1,this.clickStartedInContent=!1,this.config=Object.assign({},t)}ngOnInit(){this.isAnimated&&this._renderer.addClass(this._element.nativeElement,"fade"),this._renderer.setStyle(this._element.nativeElement,"display","block"),setTimeout(()=>{this.isShown=!0,this._renderer.addClass(this._element.nativeElement,Object(r.d)()?"in":"show")},this.isAnimated?150:0),document&&document.body&&(1===this.bsModalService.getModalsCount()&&(this.bsModalService.checkScrollbar(),this.bsModalService.setScrollbar()),this._renderer.addClass(document.body,"modal-open")),this._element.nativeElement&&this._element.nativeElement.focus()}onClickStarted(t){this.clickStartedInContent=t.target!==this._element.nativeElement}onClickStop(t){this.config.ignoreBackdropClick||"static"===this.config.backdrop||t.target!==this._element.nativeElement||this.clickStartedInContent?this.clickStartedInContent=!1:(this.bsModalService.setDismissReason("backdrop-click"),this.hide())}onEsc(t){this.isShown&&(27!==t.keyCode&&"Escape"!==t.key||t.preventDefault(),this.config.keyboard&&this.level===this.bsModalService.getModalsCount()&&(this.bsModalService.setDismissReason("esc"),this.hide()))}ngOnDestroy(){this.isShown&&this.hide()}hide(){!this.isModalHiding&&this.isShown&&(this.isModalHiding=!0,this._renderer.removeClass(this._element.nativeElement,Object(r.d)()?"in":"show"),setTimeout(()=>{this.isShown=!1,document&&document.body&&1===this.bsModalService.getModalsCount()&&this._renderer.removeClass(document.body,"modal-open"),this.bsModalService.hide(this.level),this.isModalHiding=!1},this.isAnimated?300:0))}}class c{constructor(t,e){this._isShown=!1,this.element=t,this.renderer=e}get isAnimated(){return this._isAnimated}set isAnimated(t){this._isAnimated=t}get isShown(){return this._isShown}set isShown(t){this._isShown=t,t?this.renderer.addClass(this.element.nativeElement,"in"):this.renderer.removeClass(this.element.nativeElement,"in"),Object(r.d)()||(t?this.renderer.addClass(this.element.nativeElement,"show"):this.renderer.removeClass(this.element.nativeElement,"show"))}ngOnInit(){this.isAnimated&&(this.renderer.addClass(this.element.nativeElement,"fade"),r.b.reflow(this.element.nativeElement)),this.isShown=!0}}class f{constructor(t,e){this.clf=e,this.config=l,this.onShow=new a.EventEmitter,this.onShown=new a.EventEmitter,this.onHide=new a.EventEmitter,this.onHidden=new a.EventEmitter,this.isBodyOverflowing=!1,this.originalBodyPadding=0,this.scrollbarWidth=0,this.modalsCount=0,this.lastDismissReason="",this.loaders=[],this._backdropLoader=this.clf.createLoader(null,null,null),this._renderer=t.createRenderer(null,null)}show(t,e){return this.modalsCount++,this._createLoaders(),this.config=Object.assign({},l,e),this._showBackdrop(),this.lastDismissReason=null,this._showModal(t)}hide(t){1===this.modalsCount&&(this._hideBackdrop(),this.resetScrollbar()),this.modalsCount=this.modalsCount>=1?this.modalsCount-1:0,setTimeout(()=>{this._hideModal(t),this.removeLoaders(t)},this.config.animated?150:0)}_showBackdrop(){const t=this.config.backdrop||"static"===this.config.backdrop,e=!this.backdropRef||!this.backdropRef.instance.isShown;1===this.modalsCount&&(this.removeBackdrop(),t&&e&&(this._backdropLoader.attach(c).to("body").show({isAnimated:this.config.animated}),this.backdropRef=this._backdropLoader._componentRef))}_hideBackdrop(){this.backdropRef&&(this.backdropRef.instance.isShown=!1,setTimeout(()=>this.removeBackdrop(),this.config.animated?150:0))}_showModal(t){const e=this.loaders[this.loaders.length-1],n=new o,a=e.provide({provide:u,useValue:this.config}).provide({provide:o,useValue:n}).attach(d).to("body").show({content:t,isAnimated:this.config.animated,initialState:this.config.initialState,bsModalService:this});return a.instance.level=this.getModalsCount(),n.hide=()=>{setTimeout(()=>a.instance.hide(),this.config.animated?300:0)},n.content=e.getInnerComponent()||null,n.setClass=t=>{a.instance.config.class=t},n}_hideModal(t){const e=this.loaders[t-1];e&&e.hide()}getModalsCount(){return this.modalsCount}setDismissReason(t){this.lastDismissReason=t}removeBackdrop(){this._backdropLoader.hide(),this.backdropRef=null}checkScrollbar(){this.isBodyOverflowing=document.body.clientWidth<window.innerWidth,this.scrollbarWidth=this.getScrollbarWidth()}setScrollbar(){document&&(this.originalBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")||"0",10),this.isBodyOverflowing&&(document.body.style.paddingRight=this.originalBodyPadding+this.scrollbarWidth+"px"))}resetScrollbar(){document.body.style.paddingRight=this.originalBodyPadding+"px"}getScrollbarWidth(){const t=this._renderer.createElement("div");this._renderer.addClass(t,"modal-scrollbar-measure"),this._renderer.appendChild(document.body,t);const e=t.offsetWidth-t.clientWidth;return this._renderer.removeChild(document.body,t),e}_createLoaders(){const t=this.clf.createLoader(null,null,null);this.copyEvent(t.onBeforeShow,this.onShow),this.copyEvent(t.onShown,this.onShown),this.copyEvent(t.onBeforeHide,this.onHide),this.copyEvent(t.onHidden,this.onHidden),this.loaders.push(t)}removeLoaders(t){this.loaders.splice(t-1,1),this.loaders.forEach((t,e)=>{t.instance.level=e+1})}copyEvent(t,e){t.subscribe(()=>{e.emit(this.lastDismissReason)})}}class h{static forRoot(){return{ngModule:h,providers:[f,i.a,s.a]}}static forChild(){return{ngModule:h,providers:[f,i.a,s.a]}}}},LvDl:function(t,e,n){(function(t){var a;(function(){var r="Expected a function",i="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],o="[object Arguments]",u="[object Array]",l="[object Boolean]",d="[object Date]",c="[object Error]",f="[object Function]",h="[object GeneratorFunction]",g="[object Map]",p="[object Number]",b="[object Object]",m="[object RegExp]",y="[object Set]",v="[object String]",x="[object Symbol]",_="[object WeakMap]",T="[object ArrayBuffer]",O="[object DataView]",w="[object Float32Array]",S="[object Float64Array]",I="[object Int8Array]",N="[object Int16Array]",C="[object Int32Array]",R="[object Uint8Array]",A="[object Uint16Array]",k="[object Uint32Array]",E=/\b__p \+= '';/g,L=/\b(__p \+=) '' \+/g,D=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,M=/[&<>"']/g,q=RegExp(P.source),j=RegExp(M.source),F=/<%-([\s\S]+?)%>/g,G=/<%([\s\S]+?)%>/g,V=/<%=([\s\S]+?)%>/g,z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,B=/^\w*$/,Y=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,U=RegExp(H.source),W=/^\s+|\s+$/g,K=/^\s+/,$=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Z=/\{\n\/\* \[wrapped with (.+)\] \*/,Q=/,? & /,X=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tt=/\\(\\)?/g,et=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,at=/^[-+]0x[0-9a-f]+$/i,rt=/^0b[01]+$/i,it=/^\[object .+?Constructor\]$/,st=/^0o[0-7]+$/i,ot=/^(?:0|[1-9]\d*)$/,ut=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,lt=/($^)/,dt=/['\n\r\u2028\u2029\\]/g,ct="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ft="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ht="["+ft+"]",gt="["+ct+"]",pt="\\d+",bt="[a-z\\xdf-\\xf6\\xf8-\\xff]",mt="[^\\ud800-\\udfff"+ft+pt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",yt="\\ud83c[\\udffb-\\udfff]",vt="[^\\ud800-\\udfff]",xt="(?:\\ud83c[\\udde6-\\uddff]){2}",_t="[\\ud800-\\udbff][\\udc00-\\udfff]",Tt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ot="(?:"+bt+"|"+mt+")",wt="(?:"+Tt+"|"+mt+")",St="(?:"+gt+"|"+yt+")?",It="[\\ufe0e\\ufe0f]?"+St+"(?:\\u200d(?:"+[vt,xt,_t].join("|")+")[\\ufe0e\\ufe0f]?"+St+")*",Nt="(?:"+["[\\u2700-\\u27bf]",xt,_t].join("|")+")"+It,Ct="(?:"+[vt+gt+"?",gt,xt,_t,"[\\ud800-\\udfff]"].join("|")+")",Rt=RegExp("['’]","g"),At=RegExp(gt,"g"),kt=RegExp(yt+"(?="+yt+")|"+Ct+It,"g"),Et=RegExp([Tt+"?"+bt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ht,Tt,"$"].join("|")+")",wt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ht,Tt+Ot,"$"].join("|")+")",Tt+"?"+Ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Tt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",pt,Nt].join("|"),"g"),Lt=RegExp("[\\u200d\\ud800-\\udfff"+ct+"\\ufe0e\\ufe0f]"),Dt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Pt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mt=-1,qt={};qt[w]=qt[S]=qt[I]=qt[N]=qt[C]=qt[R]=qt["[object Uint8ClampedArray]"]=qt[A]=qt[k]=!0,qt[o]=qt[u]=qt[T]=qt[l]=qt[O]=qt[d]=qt[c]=qt[f]=qt[g]=qt[p]=qt[b]=qt[m]=qt[y]=qt[v]=qt[_]=!1;var jt={};jt[o]=jt[u]=jt[T]=jt[O]=jt[l]=jt[d]=jt[w]=jt[S]=jt[I]=jt[N]=jt[C]=jt[g]=jt[p]=jt[b]=jt[m]=jt[y]=jt[v]=jt[x]=jt[R]=jt["[object Uint8ClampedArray]"]=jt[A]=jt[k]=!0,jt[c]=jt[f]=jt[_]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Gt=parseFloat,Vt=parseInt,zt="object"==typeof global&&global&&global.Object===Object&&global,Bt="object"==typeof self&&self&&self.Object===Object&&self,Yt=zt||Bt||Function("return this")(),Ht=e&&!e.nodeType&&e,Ut=Ht&&"object"==typeof t&&t&&!t.nodeType&&t,Wt=Ut&&Ut.exports===Ht,Kt=Wt&&zt.process,$t=function(){try{return Ut&&Ut.require&&Ut.require("util").types||Kt&&Kt.binding&&Kt.binding("util")}catch(t){}}(),Jt=$t&&$t.isArrayBuffer,Zt=$t&&$t.isDate,Qt=$t&&$t.isMap,Xt=$t&&$t.isRegExp,te=$t&&$t.isSet,ee=$t&&$t.isTypedArray;function ne(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function ae(t,e,n,a){for(var r=-1,i=null==t?0:t.length;++r<i;){var s=t[r];e(a,s,n(s),t)}return a}function re(t,e){for(var n=-1,a=null==t?0:t.length;++n<a&&!1!==e(t[n],n,t););return t}function ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function se(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(!e(t[n],n,t))return!1;return!0}function oe(t,e){for(var n=-1,a=null==t?0:t.length,r=0,i=[];++n<a;){var s=t[n];e(s,n,t)&&(i[r++]=s)}return i}function ue(t,e){return!(null==t||!t.length)&&ye(t,e,0)>-1}function le(t,e,n){for(var a=-1,r=null==t?0:t.length;++a<r;)if(n(e,t[a]))return!0;return!1}function de(t,e){for(var n=-1,a=null==t?0:t.length,r=Array(a);++n<a;)r[n]=e(t[n],n,t);return r}function ce(t,e){for(var n=-1,a=e.length,r=t.length;++n<a;)t[r+n]=e[n];return t}function fe(t,e,n,a){var r=-1,i=null==t?0:t.length;for(a&&i&&(n=t[++r]);++r<i;)n=e(n,t[r],r,t);return n}function he(t,e,n,a){var r=null==t?0:t.length;for(a&&r&&(n=t[--r]);r--;)n=e(n,t[r],r,t);return n}function ge(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(e(t[n],n,t))return!0;return!1}var pe=Te("length");function be(t,e,n){var a;return n(t,(function(t,n,r){if(e(t,n,r))return a=n,!1})),a}function me(t,e,n,a){for(var r=t.length,i=n+(a?1:-1);a?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function ye(t,e,n){return e==e?function(t,e,n){for(var a=n-1,r=t.length;++a<r;)if(t[a]===e)return a;return-1}(t,e,n):me(t,xe,n)}function ve(t,e,n,a){for(var r=n-1,i=t.length;++r<i;)if(a(t[r],e))return r;return-1}function xe(t){return t!=t}function _e(t,e){var n=null==t?0:t.length;return n?Se(t,e)/n:NaN}function Te(t){return function(e){return null==e?void 0:e[t]}}function Oe(t){return function(e){return null==t?void 0:t[e]}}function we(t,e,n,a,r){return r(t,(function(t,r,i){n=a?(a=!1,t):e(n,t,r,i)})),n}function Se(t,e){for(var n,a=-1,r=t.length;++a<r;){var i=e(t[a]);void 0!==i&&(n=void 0===n?i:n+i)}return n}function Ie(t,e){for(var n=-1,a=Array(t);++n<t;)a[n]=e(n);return a}function Ne(t){return function(e){return t(e)}}function Ce(t,e){return de(e,(function(e){return t[e]}))}function Re(t,e){return t.has(e)}function Ae(t,e){for(var n=-1,a=t.length;++n<a&&ye(e,t[n],0)>-1;);return n}function ke(t,e){for(var n=t.length;n--&&ye(e,t[n],0)>-1;);return n}function Ee(t,e){for(var n=t.length,a=0;n--;)t[n]===e&&++a;return a}var Le=Oe({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),De=Oe({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function Pe(t){return"\\"+Ft[t]}function Me(t){return Lt.test(t)}function qe(t){var e=-1,n=Array(t.size);return t.forEach((function(t,a){n[++e]=[a,t]})),n}function je(t,e){return function(n){return t(e(n))}}function Fe(t,e){for(var n=-1,a=t.length,r=0,s=[];++n<a;){var o=t[n];o!==e&&o!==i||(t[n]=i,s[r++]=n)}return s}function Ge(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}function Ve(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=[t,t]})),n}function ze(t){return Me(t)?function(t){for(var e=kt.lastIndex=0;kt.test(t);)++e;return e}(t):pe(t)}function Be(t){return Me(t)?function(t){return t.match(kt)||[]}(t):function(t){return t.split("")}(t)}var Ye=Oe({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),He=function t(e){var n,a=(e=null==e?Yt:He.defaults(Yt.Object(),e,He.pick(Yt,Pt))).Array,ct=e.Date,ft=e.Error,ht=e.Function,gt=e.Math,pt=e.Object,bt=e.RegExp,mt=e.String,yt=e.TypeError,vt=a.prototype,xt=pt.prototype,_t=e["__core-js_shared__"],Tt=ht.prototype.toString,Ot=xt.hasOwnProperty,wt=0,St=(n=/[^.]+$/.exec(_t&&_t.keys&&_t.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",It=xt.toString,Nt=Tt.call(pt),Ct=Yt._,kt=bt("^"+Tt.call(Ot).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Lt=Wt?e.Buffer:void 0,Ft=e.Symbol,zt=e.Uint8Array,Bt=Lt?Lt.allocUnsafe:void 0,Ht=je(pt.getPrototypeOf,pt),Ut=pt.create,Kt=xt.propertyIsEnumerable,$t=vt.splice,pe=Ft?Ft.isConcatSpreadable:void 0,Oe=Ft?Ft.iterator:void 0,Ue=Ft?Ft.toStringTag:void 0,We=function(){try{var t=Zr(pt,"defineProperty");return t({},"",{}),t}catch(e){}}(),Ke=e.clearTimeout!==Yt.clearTimeout&&e.clearTimeout,$e=ct&&ct.now!==Yt.Date.now&&ct.now,Je=e.setTimeout!==Yt.setTimeout&&e.setTimeout,Ze=gt.ceil,Qe=gt.floor,Xe=pt.getOwnPropertySymbols,tn=Lt?Lt.isBuffer:void 0,en=e.isFinite,nn=vt.join,an=je(pt.keys,pt),rn=gt.max,sn=gt.min,on=ct.now,un=e.parseInt,ln=gt.random,dn=vt.reverse,cn=Zr(e,"DataView"),fn=Zr(e,"Map"),hn=Zr(e,"Promise"),gn=Zr(e,"Set"),pn=Zr(e,"WeakMap"),bn=Zr(pt,"create"),mn=pn&&new pn,yn={},vn=Ii(cn),xn=Ii(fn),_n=Ii(hn),Tn=Ii(gn),On=Ii(pn),wn=Ft?Ft.prototype:void 0,Sn=wn?wn.valueOf:void 0,In=wn?wn.toString:void 0;function Nn(t){if(Bs(t)&&!Es(t)&&!(t instanceof kn)){if(t instanceof An)return t;if(Ot.call(t,"__wrapped__"))return Ni(t)}return new An(t)}var Cn=function(){function t(){}return function(e){if(!zs(e))return{};if(Ut)return Ut(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Rn(){}function An(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function kn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function En(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Ln(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Dn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Pn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Dn;++e<n;)this.add(t[e])}function Mn(t){var e=this.__data__=new Ln(t);this.size=e.size}function qn(t,e){var n=Es(t),a=!n&&ks(t),r=!n&&!a&&Ms(t),i=!n&&!a&&!r&&Zs(t),s=n||a||r||i,o=s?Ie(t.length,mt):[],u=o.length;for(var l in t)!e&&!Ot.call(t,l)||s&&("length"==l||r&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||ri(l,u))||o.push(l);return o}function jn(t){var e=t.length;return e?t[Da(0,e-1)]:void 0}function Fn(t,e){return _i(pr(t),Kn(e,0,t.length))}function Gn(t){return _i(pr(t))}function Vn(t,e,n){(void 0!==n&&!Cs(t[e],n)||void 0===n&&!(e in t))&&Un(t,e,n)}function zn(t,e,n){var a=t[e];Ot.call(t,e)&&Cs(a,n)&&(void 0!==n||e in t)||Un(t,e,n)}function Bn(t,e){for(var n=t.length;n--;)if(Cs(t[n][0],e))return n;return-1}function Yn(t,e,n,a){return Xn(t,(function(t,r,i){e(a,t,n(t),i)})),a}function Hn(t,e){return t&&br(e,xo(e),t)}function Un(t,e,n){"__proto__"==e&&We?We(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Wn(t,e){for(var n=-1,r=e.length,i=a(r),s=null==t;++n<r;)i[n]=s?void 0:po(t,e[n]);return i}function Kn(t,e,n){return t==t&&(void 0!==n&&(t=t<=n?t:n),void 0!==e&&(t=t>=e?t:e)),t}function $n(t,e,n,a,r,i){var s,u=1&e,c=2&e,_=4&e;if(n&&(s=r?n(t,a,r,i):n(t)),void 0!==s)return s;if(!zs(t))return t;var E=Es(t);if(E){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&Ot.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return pr(t,s)}else{var L=ti(t),D=L==f||L==h;if(Ms(t))return lr(t,u);if(L==b||L==o||D&&!r){if(s=c||D?{}:ni(t),!u)return c?function(t,e){return br(t,Xr(t),e)}(t,function(t,e){return t&&br(e,_o(e),t)}(s,t)):function(t,e){return br(t,Qr(t),e)}(t,Hn(s,t))}else{if(!jt[L])return r?t:{};s=function(t,e,n){var a=t.constructor;switch(e){case T:return dr(t);case l:case d:return new a(+t);case O:return function(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case w:case S:case I:case N:case C:case R:case"[object Uint8ClampedArray]":case A:case k:return cr(t,n);case g:return new a;case p:case v:return new a(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case y:return new a;case x:return Sn?pt(Sn.call(t)):{}}}(t,L,u)}}i||(i=new Mn);var P=i.get(t);if(P)return P;i.set(t,s),Ks(t)?t.forEach((function(a){s.add($n(a,e,n,a,t,i))})):Ys(t)&&t.forEach((function(a,r){s.set(r,$n(a,e,n,r,t,i))}));var M=E?void 0:(_?c?Yr:Br:c?_o:xo)(t);return re(M||t,(function(a,r){M&&(a=t[r=a]),zn(s,r,$n(a,e,n,r,t,i))})),s}function Jn(t,e,n){var a=n.length;if(null==t)return!a;for(t=pt(t);a--;){var r=n[a],i=t[r];if(void 0===i&&!(r in t)||!(0,e[r])(i))return!1}return!0}function Zn(t,e,n){if("function"!=typeof t)throw new yt(r);return mi((function(){t.apply(void 0,n)}),e)}function Qn(t,e,n,a){var r=-1,i=ue,s=!0,o=t.length,u=[],l=e.length;if(!o)return u;n&&(e=de(e,Ne(n))),a?(i=le,s=!1):e.length>=200&&(i=Re,s=!1,e=new Pn(e));t:for(;++r<o;){var d=t[r],c=null==n?d:n(d);if(d=a||0!==d?d:0,s&&c==c){for(var f=l;f--;)if(e[f]===c)continue t;u.push(d)}else i(e,c,a)||u.push(d)}return u}Nn.templateSettings={escape:F,evaluate:G,interpolate:V,variable:"",imports:{_:Nn}},(Nn.prototype=Rn.prototype).constructor=Nn,(An.prototype=Cn(Rn.prototype)).constructor=An,(kn.prototype=Cn(Rn.prototype)).constructor=kn,En.prototype.clear=function(){this.__data__=bn?bn(null):{},this.size=0},En.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},En.prototype.get=function(t){var e=this.__data__;if(bn){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return Ot.call(e,t)?e[t]:void 0},En.prototype.has=function(t){var e=this.__data__;return bn?void 0!==e[t]:Ot.call(e,t)},En.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=bn&&void 0===e?"__lodash_hash_undefined__":e,this},Ln.prototype.clear=function(){this.__data__=[],this.size=0},Ln.prototype.delete=function(t){var e=this.__data__,n=Bn(e,t);return!(n<0||(n==e.length-1?e.pop():$t.call(e,n,1),--this.size,0))},Ln.prototype.get=function(t){var e=this.__data__,n=Bn(e,t);return n<0?void 0:e[n][1]},Ln.prototype.has=function(t){return Bn(this.__data__,t)>-1},Ln.prototype.set=function(t,e){var n=this.__data__,a=Bn(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this},Dn.prototype.clear=function(){this.size=0,this.__data__={hash:new En,map:new(fn||Ln),string:new En}},Dn.prototype.delete=function(t){var e=$r(this,t).delete(t);return this.size-=e?1:0,e},Dn.prototype.get=function(t){return $r(this,t).get(t)},Dn.prototype.has=function(t){return $r(this,t).has(t)},Dn.prototype.set=function(t,e){var n=$r(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this},Pn.prototype.add=Pn.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Pn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.clear=function(){this.__data__=new Ln,this.size=0},Mn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Mn.prototype.get=function(t){return this.__data__.get(t)},Mn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Ln){var a=n.__data__;if(!fn||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new Dn(a)}return n.set(t,e),this.size=n.size,this};var Xn=vr(oa),ta=vr(ua,!0);function ea(t,e){var n=!0;return Xn(t,(function(t,a,r){return n=!!e(t,a,r)})),n}function na(t,e,n){for(var a=-1,r=t.length;++a<r;){var i=t[a],s=e(i);if(null!=s&&(void 0===o?s==s&&!Js(s):n(s,o)))var o=s,u=i}return u}function aa(t,e){var n=[];return Xn(t,(function(t,a,r){e(t,a,r)&&n.push(t)})),n}function ra(t,e,n,a,r){var i=-1,s=t.length;for(n||(n=ai),r||(r=[]);++i<s;){var o=t[i];e>0&&n(o)?e>1?ra(o,e-1,n,a,r):ce(r,o):a||(r[r.length]=o)}return r}var ia=xr(),sa=xr(!0);function oa(t,e){return t&&ia(t,e,xo)}function ua(t,e){return t&&sa(t,e,xo)}function la(t,e){return oe(e,(function(e){return Fs(t[e])}))}function da(t,e){for(var n=0,a=(e=ir(e,t)).length;null!=t&&n<a;)t=t[Si(e[n++])];return n&&n==a?t:void 0}function ca(t,e,n){var a=e(t);return Es(t)?a:ce(a,n(t))}function fa(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Ue&&Ue in pt(t)?function(t){var e=Ot.call(t,Ue),n=t[Ue];try{t[Ue]=void 0;var a=!0}catch(i){}var r=It.call(t);return a&&(e?t[Ue]=n:delete t[Ue]),r}(t):function(t){return It.call(t)}(t)}function ha(t,e){return t>e}function ga(t,e){return null!=t&&Ot.call(t,e)}function pa(t,e){return null!=t&&e in pt(t)}function ba(t,e,n){for(var r=n?le:ue,i=t[0].length,s=t.length,o=s,u=a(s),l=1/0,d=[];o--;){var c=t[o];o&&e&&(c=de(c,Ne(e))),l=sn(c.length,l),u[o]=!n&&(e||i>=120&&c.length>=120)?new Pn(o&&c):void 0}c=t[0];var f=-1,h=u[0];t:for(;++f<i&&d.length<l;){var g=c[f],p=e?e(g):g;if(g=n||0!==g?g:0,!(h?Re(h,p):r(d,p,n))){for(o=s;--o;){var b=u[o];if(!(b?Re(b,p):r(t[o],p,n)))continue t}h&&h.push(p),d.push(g)}}return d}function ma(t,e,n){var a=null==(t=hi(t,e=ir(e,t)))?t:t[Si(ji(e))];return null==a?void 0:ne(a,t,n)}function ya(t){return Bs(t)&&fa(t)==o}function va(t,e,n,a,r){return t===e||(null==t||null==e||!Bs(t)&&!Bs(e)?t!=t&&e!=e:function(t,e,n,a,r,i){var s=Es(t),f=Es(e),h=s?u:ti(t),_=f?u:ti(e),w=(h=h==o?b:h)==b,S=(_=_==o?b:_)==b,I=h==_;if(I&&Ms(t)){if(!Ms(e))return!1;s=!0,w=!1}if(I&&!w)return i||(i=new Mn),s||Zs(t)?Vr(t,e,n,a,r,i):function(t,e,n,a,r,i,s){switch(n){case O:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case T:return!(t.byteLength!=e.byteLength||!i(new zt(t),new zt(e)));case l:case d:case p:return Cs(+t,+e);case c:return t.name==e.name&&t.message==e.message;case m:case v:return t==e+"";case g:var o=qe;case y:if(o||(o=Ge),t.size!=e.size&&!(1&a))return!1;var u=s.get(t);if(u)return u==e;a|=2,s.set(t,e);var f=Vr(o(t),o(e),a,r,i,s);return s.delete(t),f;case x:if(Sn)return Sn.call(t)==Sn.call(e)}return!1}(t,e,h,n,a,r,i);if(!(1&n)){var N=w&&Ot.call(t,"__wrapped__"),C=S&&Ot.call(e,"__wrapped__");if(N||C){var R=N?t.value():t,A=C?e.value():e;return i||(i=new Mn),r(R,A,n,a,i)}}return!!I&&(i||(i=new Mn),function(t,e,n,a,r,i){var s=1&n,o=Br(t),u=o.length;if(u!=Br(e).length&&!s)return!1;for(var l=u;l--;){var d=o[l];if(!(s?d in e:Ot.call(e,d)))return!1}var c=i.get(t),f=i.get(e);if(c&&f)return c==e&&f==t;var h=!0;i.set(t,e),i.set(e,t);for(var g=s;++l<u;){var p=t[d=o[l]],b=e[d];if(a)var m=s?a(b,p,d,e,t,i):a(p,b,d,t,e,i);if(!(void 0===m?p===b||r(p,b,n,a,i):m)){h=!1;break}g||(g="constructor"==d)}if(h&&!g){var y=t.constructor,v=e.constructor;y==v||!("constructor"in t)||!("constructor"in e)||"function"==typeof y&&y instanceof y&&"function"==typeof v&&v instanceof v||(h=!1)}return i.delete(t),i.delete(e),h}(t,e,n,a,r,i))}(t,e,n,a,va,r))}function xa(t,e,n,a){var r=n.length,i=r,s=!a;if(null==t)return!i;for(t=pt(t);r--;){var o=n[r];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++r<i;){var u=(o=n[r])[0],l=t[u],d=o[1];if(s&&o[2]){if(void 0===l&&!(u in t))return!1}else{var c=new Mn;if(a)var f=a(l,d,u,t,e,c);if(!(void 0===f?va(d,l,3,a,c):f))return!1}}return!0}function _a(t){return!(!zs(t)||(e=t,St&&St in e))&&(Fs(t)?kt:it).test(Ii(t));var e}function Ta(t){return"function"==typeof t?t:null==t?Uo:"object"==typeof t?Es(t)?Na(t[0],t[1]):Ia(t):eu(t)}function Oa(t){if(!li(t))return an(t);var e=[];for(var n in pt(t))Ot.call(t,n)&&"constructor"!=n&&e.push(n);return e}function wa(t,e){return t<e}function Sa(t,e){var n=-1,r=Ds(t)?a(t.length):[];return Xn(t,(function(t,a,i){r[++n]=e(t,a,i)})),r}function Ia(t){var e=Jr(t);return 1==e.length&&e[0][2]?ci(e[0][0],e[0][1]):function(n){return n===t||xa(n,t,e)}}function Na(t,e){return si(t)&&di(e)?ci(Si(t),e):function(n){var a=po(n,t);return void 0===a&&a===e?bo(n,t):va(e,a,3)}}function Ca(t,e,n,a,r){t!==e&&ia(e,(function(i,s){if(r||(r=new Mn),zs(i))!function(t,e,n,a,r,i,s){var o=pi(t,n),u=pi(e,n),l=s.get(u);if(l)Vn(t,n,l);else{var d=i?i(o,u,n+"",t,e,s):void 0,c=void 0===d;if(c){var f=Es(u),h=!f&&Ms(u),g=!f&&!h&&Zs(u);d=u,f||h||g?Es(o)?d=o:Ps(o)?d=pr(o):h?(c=!1,d=lr(u,!0)):g?(c=!1,d=cr(u,!0)):d=[]:Us(u)||ks(u)?(d=o,ks(o)?d=io(o):zs(o)&&!Fs(o)||(d=ni(u))):c=!1}c&&(s.set(u,d),r(d,u,a,i,s),s.delete(u)),Vn(t,n,d)}}(t,e,s,n,Ca,a,r);else{var o=a?a(pi(t,s),i,s+"",t,e,r):void 0;void 0===o&&(o=i),Vn(t,s,o)}}),_o)}function Ra(t,e){var n=t.length;if(n)return ri(e+=e<0?n:0,n)?t[e]:void 0}function Aa(t,e,n){e=e.length?de(e,(function(t){return Es(t)?function(e){return da(e,1===t.length?t[0]:t)}:t})):[Uo];var a=-1;return e=de(e,Ne(Kr())),function(t,e){var a=t.length;for(t.sort((function(t,e){return function(t,e,n){for(var a=-1,r=t.criteria,i=e.criteria,s=r.length,o=n.length;++a<s;){var u=fr(r[a],i[a]);if(u)return a>=o?u:u*("desc"==n[a]?-1:1)}return t.index-e.index}(t,e,n)}));a--;)t[a]=t[a].value;return t}(Sa(t,(function(t,n,r){return{criteria:de(e,(function(e){return e(t)})),index:++a,value:t}})))}function ka(t,e,n){for(var a=-1,r=e.length,i={};++a<r;){var s=e[a],o=da(t,s);n(o,s)&&Fa(i,ir(s,t),o)}return i}function Ea(t,e,n,a){var r=a?ve:ye,i=-1,s=e.length,o=t;for(t===e&&(e=pr(e)),n&&(o=de(t,Ne(n)));++i<s;)for(var u=0,l=e[i],d=n?n(l):l;(u=r(o,d,u,a))>-1;)o!==t&&$t.call(o,u,1),$t.call(t,u,1);return t}function La(t,e){for(var n=t?e.length:0,a=n-1;n--;){var r=e[n];if(n==a||r!==i){var i=r;ri(r)?$t.call(t,r,1):Za(t,r)}}return t}function Da(t,e){return t+Qe(ln()*(e-t+1))}function Pa(t,e){var n="";if(!t||e<1||e>9007199254740991)return n;do{e%2&&(n+=t),(e=Qe(e/2))&&(t+=t)}while(e);return n}function Ma(t,e){return yi(fi(t,e,Uo),t+"")}function qa(t){return jn(Ro(t))}function ja(t,e){var n=Ro(t);return _i(n,Kn(e,0,n.length))}function Fa(t,e,n,a){if(!zs(t))return t;for(var r=-1,i=(e=ir(e,t)).length,s=i-1,o=t;null!=o&&++r<i;){var u=Si(e[r]),l=n;if("__proto__"===u||"constructor"===u||"prototype"===u)return t;if(r!=s){var d=o[u];void 0===(l=a?a(d,u,o):void 0)&&(l=zs(d)?d:ri(e[r+1])?[]:{})}zn(o,u,l),o=o[u]}return t}var Ga=mn?function(t,e){return mn.set(t,e),t}:Uo,Va=We?function(t,e){return We(t,"toString",{configurable:!0,enumerable:!1,value:Bo(e),writable:!0})}:Uo;function za(t){return _i(Ro(t))}function Ba(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var s=a(i);++r<i;)s[r]=t[r+e];return s}function Ya(t,e){var n;return Xn(t,(function(t,a,r){return!(n=e(t,a,r))})),!!n}function Ha(t,e,n){var a=0,r=null==t?a:t.length;if("number"==typeof e&&e==e&&r<=2147483647){for(;a<r;){var i=a+r>>>1,s=t[i];null!==s&&!Js(s)&&(n?s<=e:s<e)?a=i+1:r=i}return r}return Ua(t,e,Uo,n)}function Ua(t,e,n,a){var r=0,i=null==t?0:t.length;if(0===i)return 0;for(var s=(e=n(e))!=e,o=null===e,u=Js(e),l=void 0===e;r<i;){var d=Qe((r+i)/2),c=n(t[d]),f=void 0!==c,h=null===c,g=c==c,p=Js(c);if(s)var b=a||g;else b=l?g&&(a||f):o?g&&f&&(a||!h):u?g&&f&&!h&&(a||!p):!h&&!p&&(a?c<=e:c<e);b?r=d+1:i=d}return sn(i,4294967294)}function Wa(t,e){for(var n=-1,a=t.length,r=0,i=[];++n<a;){var s=t[n],o=e?e(s):s;if(!n||!Cs(o,u)){var u=o;i[r++]=0===s?0:s}}return i}function Ka(t){return"number"==typeof t?t:Js(t)?NaN:+t}function $a(t){if("string"==typeof t)return t;if(Es(t))return de(t,$a)+"";if(Js(t))return In?In.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ja(t,e,n){var a=-1,r=ue,i=t.length,s=!0,o=[],u=o;if(n)s=!1,r=le;else if(i>=200){var l=e?null:Pr(t);if(l)return Ge(l);s=!1,r=Re,u=new Pn}else u=e?[]:o;t:for(;++a<i;){var d=t[a],c=e?e(d):d;if(d=n||0!==d?d:0,s&&c==c){for(var f=u.length;f--;)if(u[f]===c)continue t;e&&u.push(c),o.push(d)}else r(u,c,n)||(u!==o&&u.push(c),o.push(d))}return o}function Za(t,e){return null==(t=hi(t,e=ir(e,t)))||delete t[Si(ji(e))]}function Qa(t,e,n,a){return Fa(t,e,n(da(t,e)),a)}function Xa(t,e,n,a){for(var r=t.length,i=a?r:-1;(a?i--:++i<r)&&e(t[i],i,t););return n?Ba(t,a?0:i,a?i+1:r):Ba(t,a?i+1:0,a?r:i)}function tr(t,e){var n=t;return n instanceof kn&&(n=n.value()),fe(e,(function(t,e){return e.func.apply(e.thisArg,ce([t],e.args))}),n)}function er(t,e,n){var r=t.length;if(r<2)return r?Ja(t[0]):[];for(var i=-1,s=a(r);++i<r;)for(var o=t[i],u=-1;++u<r;)u!=i&&(s[i]=Qn(s[i]||o,t[u],e,n));return Ja(ra(s,1),e,n)}function nr(t,e,n){for(var a=-1,r=t.length,i=e.length,s={};++a<r;)n(s,t[a],a<i?e[a]:void 0);return s}function ar(t){return Ps(t)?t:[]}function rr(t){return"function"==typeof t?t:Uo}function ir(t,e){return Es(t)?t:si(t,e)?[t]:wi(so(t))}var sr=Ma;function or(t,e,n){var a=t.length;return n=void 0===n?a:n,!e&&n>=a?t:Ba(t,e,n)}var ur=Ke||function(t){return Yt.clearTimeout(t)};function lr(t,e){if(e)return t.slice();var n=t.length,a=Bt?Bt(n):new t.constructor(n);return t.copy(a),a}function dr(t){var e=new t.constructor(t.byteLength);return new zt(e).set(new zt(t)),e}function cr(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function fr(t,e){if(t!==e){var n=void 0!==t,a=null===t,r=t==t,i=Js(t),s=void 0!==e,o=null===e,u=e==e,l=Js(e);if(!o&&!l&&!i&&t>e||i&&s&&u&&!o&&!l||a&&s&&u||!n&&u||!r)return 1;if(!a&&!i&&!l&&t<e||l&&n&&r&&!a&&!i||o&&n&&r||!s&&r||!u)return-1}return 0}function hr(t,e,n,r){for(var i=-1,s=t.length,o=n.length,u=-1,l=e.length,d=rn(s-o,0),c=a(l+d),f=!r;++u<l;)c[u]=e[u];for(;++i<o;)(f||i<s)&&(c[n[i]]=t[i]);for(;d--;)c[u++]=t[i++];return c}function gr(t,e,n,r){for(var i=-1,s=t.length,o=-1,u=n.length,l=-1,d=e.length,c=rn(s-u,0),f=a(c+d),h=!r;++i<c;)f[i]=t[i];for(var g=i;++l<d;)f[g+l]=e[l];for(;++o<u;)(h||i<s)&&(f[g+n[o]]=t[i++]);return f}function pr(t,e){var n=-1,r=t.length;for(e||(e=a(r));++n<r;)e[n]=t[n];return e}function br(t,e,n,a){var r=!n;n||(n={});for(var i=-1,s=e.length;++i<s;){var o=e[i],u=a?a(n[o],t[o],o,n,t):void 0;void 0===u&&(u=t[o]),r?Un(n,o,u):zn(n,o,u)}return n}function mr(t,e){return function(n,a){var r=Es(n)?ae:Yn,i=e?e():{};return r(n,t,Kr(a,2),i)}}function yr(t){return Ma((function(e,n){var a=-1,r=n.length,i=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(i=t.length>3&&"function"==typeof i?(r--,i):void 0,s&&ii(n[0],n[1],s)&&(i=r<3?void 0:i,r=1),e=pt(e);++a<r;){var o=n[a];o&&t(e,o,a,i)}return e}))}function vr(t,e){return function(n,a){if(null==n)return n;if(!Ds(n))return t(n,a);for(var r=n.length,i=e?r:-1,s=pt(n);(e?i--:++i<r)&&!1!==a(s[i],i,s););return n}}function xr(t){return function(e,n,a){for(var r=-1,i=pt(e),s=a(e),o=s.length;o--;){var u=s[t?o:++r];if(!1===n(i[u],u,i))break}return e}}function _r(t){return function(e){var n=Me(e=so(e))?Be(e):void 0,a=n?n[0]:e.charAt(0),r=n?or(n,1).join(""):e.slice(1);return a[t]()+r}}function Tr(t){return function(e){return fe(Go(Eo(e).replace(Rt,"")),t,"")}}function Or(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Cn(t.prototype),a=t.apply(n,e);return zs(a)?a:n}}function wr(t){return function(e,n,a){var r=pt(e);if(!Ds(e)){var i=Kr(n,3);e=xo(e),n=function(t){return i(r[t],t,r)}}var s=t(e,n,a);return s>-1?r[i?e[s]:s]:void 0}}function Sr(t){return zr((function(e){var n=e.length,a=n,i=An.prototype.thru;for(t&&e.reverse();a--;){var s=e[a];if("function"!=typeof s)throw new yt(r);if(i&&!o&&"wrapper"==Ur(s))var o=new An([],!0)}for(a=o?a:n;++a<n;){var u=Ur(s=e[a]),l="wrapper"==u?Hr(s):void 0;o=l&&oi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?o[Ur(l[0])].apply(o,l[3]):1==s.length&&oi(s)?o[u]():o.thru(s)}return function(){var t=arguments,a=t[0];if(o&&1==t.length&&Es(a))return o.plant(a).value();for(var r=0,i=n?e[r].apply(this,t):a;++r<n;)i=e[r].call(this,i);return i}}))}function Ir(t,e,n,r,i,s,o,u,l,d){var c=128&e,f=1&e,h=2&e,g=24&e,p=512&e,b=h?void 0:Or(t);return function m(){for(var y=arguments.length,v=a(y),x=y;x--;)v[x]=arguments[x];if(g)var _=Wr(m),T=Ee(v,_);if(r&&(v=hr(v,r,i,g)),s&&(v=gr(v,s,o,g)),y-=T,g&&y<d){var O=Fe(v,_);return Lr(t,e,Ir,m.placeholder,n,v,O,u,l,d-y)}var w=f?n:this,S=h?w[t]:t;return y=v.length,u?v=gi(v,u):p&&y>1&&v.reverse(),c&&l<y&&(v.length=l),this&&this!==Yt&&this instanceof m&&(S=b||Or(S)),S.apply(w,v)}}function Nr(t,e){return function(n,a){return function(t,e,n,a){return oa(t,(function(t,r,i){e(a,n(t),r,i)})),a}(n,t,e(a),{})}}function Cr(t,e){return function(n,a){var r;if(void 0===n&&void 0===a)return e;if(void 0!==n&&(r=n),void 0!==a){if(void 0===r)return a;"string"==typeof n||"string"==typeof a?(n=$a(n),a=$a(a)):(n=Ka(n),a=Ka(a)),r=t(n,a)}return r}}function Rr(t){return zr((function(e){return e=de(e,Ne(Kr())),Ma((function(n){var a=this;return t(e,(function(t){return ne(t,a,n)}))}))}))}function Ar(t,e){var n=(e=void 0===e?" ":$a(e)).length;if(n<2)return n?Pa(e,t):e;var a=Pa(e,Ze(t/ze(e)));return Me(e)?or(Be(a),0,t).join(""):a.slice(0,t)}function kr(t){return function(e,n,r){return r&&"number"!=typeof r&&ii(e,n,r)&&(n=r=void 0),e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n,r){for(var i=-1,s=rn(Ze((e-t)/(n||1)),0),o=a(s);s--;)o[r?s:++i]=t,t+=n;return o}(e,n,r=void 0===r?e<n?1:-1:eo(r),t)}}function Er(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=ro(e),n=ro(n)),t(e,n)}}function Lr(t,e,n,a,r,i,s,o,u,l){var d=8&e;e|=d?32:64,4&(e&=~(d?64:32))||(e&=-4);var c=[t,e,r,d?i:void 0,d?s:void 0,d?void 0:i,d?void 0:s,o,u,l],f=n.apply(void 0,c);return oi(t)&&bi(f,c),f.placeholder=a,vi(f,t,e)}function Dr(t){var e=gt[t];return function(t,n){if(t=ro(t),(n=null==n?0:sn(no(n),292))&&en(t)){var a=(so(t)+"e").split("e");return+((a=(so(e(a[0]+"e"+(+a[1]+n)))+"e").split("e"))[0]+"e"+(+a[1]-n))}return e(t)}}var Pr=gn&&1/Ge(new gn([,-0]))[1]==1/0?function(t){return new gn(t)}:Zo;function Mr(t){return function(e){var n=ti(e);return n==g?qe(e):n==y?Ve(e):function(t,e){return de(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function qr(t,e,n,s,o,u,l,d){var c=2&e;if(!c&&"function"!=typeof t)throw new yt(r);var f=s?s.length:0;if(f||(e&=-97,s=o=void 0),l=void 0===l?l:rn(no(l),0),d=void 0===d?d:no(d),f-=o?o.length:0,64&e){var h=s,g=o;s=o=void 0}var p=c?void 0:Hr(t),b=[t,e,n,s,o,h,g,u,l,d];if(p&&function(t,e){var n=t[1],a=e[1],r=n|a;if(!(r<131||128==a&&8==n||128==a&&256==n&&t[7].length<=e[8]||384==a&&e[7].length<=e[8]&&8==n))return t;1&a&&(t[2]=e[2],r|=1&n?0:4);var s=e[3];if(s){var o=t[3];t[3]=o?hr(o,s,e[4]):s,t[4]=o?Fe(t[3],i):e[4]}(s=e[5])&&(t[5]=(o=t[5])?gr(o,s,e[6]):s,t[6]=o?Fe(t[5],i):e[6]),(s=e[7])&&(t[7]=s),128&a&&(t[8]=null==t[8]?e[8]:sn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=r}(b,p),t=b[0],e=b[1],n=b[2],s=b[3],o=b[4],!(d=b[9]=void 0===b[9]?c?0:t.length:rn(b[9]-f,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var r=Or(t);return function i(){for(var s=arguments.length,o=a(s),u=s,l=Wr(i);u--;)o[u]=arguments[u];var d=s<3&&o[0]!==l&&o[s-1]!==l?[]:Fe(o,l);if((s-=d.length)<n)return Lr(t,e,Ir,i.placeholder,void 0,o,d,void 0,void 0,n-s);var c=this&&this!==Yt&&this instanceof i?r:t;return ne(c,this,o)}}(t,e,d):32!=e&&33!=e||o.length?Ir.apply(void 0,b):function(t,e,n,r){var i=1&e,s=Or(t);return function e(){for(var o=-1,u=arguments.length,l=-1,d=r.length,c=a(d+u),f=this&&this!==Yt&&this instanceof e?s:t;++l<d;)c[l]=r[l];for(;u--;)c[l++]=arguments[++o];return ne(f,i?n:this,c)}}(t,e,n,s);else var m=function(t,e,n){var a=1&e,r=Or(t);return function e(){var i=this&&this!==Yt&&this instanceof e?r:t;return i.apply(a?n:this,arguments)}}(t,e,n);return vi((p?Ga:bi)(m,b),t,e)}function jr(t,e,n,a){return void 0===t||Cs(t,xt[n])&&!Ot.call(a,n)?e:t}function Fr(t,e,n,a,r,i){return zs(t)&&zs(e)&&(i.set(e,t),Ca(t,e,void 0,Fr,i),i.delete(e)),t}function Gr(t){return Us(t)?void 0:t}function Vr(t,e,n,a,r,i){var s=1&n,o=t.length,u=e.length;if(o!=u&&!(s&&u>o))return!1;var l=i.get(t),d=i.get(e);if(l&&d)return l==e&&d==t;var c=-1,f=!0,h=2&n?new Pn:void 0;for(i.set(t,e),i.set(e,t);++c<o;){var g=t[c],p=e[c];if(a)var b=s?a(p,g,c,e,t,i):a(g,p,c,t,e,i);if(void 0!==b){if(b)continue;f=!1;break}if(h){if(!ge(e,(function(t,e){if(!Re(h,e)&&(g===t||r(g,t,n,a,i)))return h.push(e)}))){f=!1;break}}else if(g!==p&&!r(g,p,n,a,i)){f=!1;break}}return i.delete(t),i.delete(e),f}function zr(t){return yi(fi(t,void 0,Li),t+"")}function Br(t){return ca(t,xo,Qr)}function Yr(t){return ca(t,_o,Xr)}var Hr=mn?function(t){return mn.get(t)}:Zo;function Ur(t){for(var e=t.name+"",n=yn[e],a=Ot.call(yn,e)?n.length:0;a--;){var r=n[a],i=r.func;if(null==i||i==t)return r.name}return e}function Wr(t){return(Ot.call(Nn,"placeholder")?Nn:t).placeholder}function Kr(){var t=Nn.iteratee||Wo;return t=t===Wo?Ta:t,arguments.length?t(arguments[0],arguments[1]):t}function $r(t,e){var n,a,r=t.__data__;return("string"==(a=typeof(n=e))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==n:null===n)?r["string"==typeof e?"string":"hash"]:r.map}function Jr(t){for(var e=xo(t),n=e.length;n--;){var a=e[n],r=t[a];e[n]=[a,r,di(r)]}return e}function Zr(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return _a(n)?n:void 0}var Qr=Xe?function(t){return null==t?[]:(t=pt(t),oe(Xe(t),(function(e){return Kt.call(t,e)})))}:ru,Xr=Xe?function(t){for(var e=[];t;)ce(e,Qr(t)),t=Ht(t);return e}:ru,ti=fa;function ei(t,e,n){for(var a=-1,r=(e=ir(e,t)).length,i=!1;++a<r;){var s=Si(e[a]);if(!(i=null!=t&&n(t,s)))break;t=t[s]}return i||++a!=r?i:!!(r=null==t?0:t.length)&&Vs(r)&&ri(s,r)&&(Es(t)||ks(t))}function ni(t){return"function"!=typeof t.constructor||li(t)?{}:Cn(Ht(t))}function ai(t){return Es(t)||ks(t)||!!(pe&&t&&t[pe])}function ri(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&ot.test(t))&&t>-1&&t%1==0&&t<e}function ii(t,e,n){if(!zs(n))return!1;var a=typeof e;return!!("number"==a?Ds(n)&&ri(e,n.length):"string"==a&&e in n)&&Cs(n[e],t)}function si(t,e){if(Es(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!Js(t))||B.test(t)||!z.test(t)||null!=e&&t in pt(e)}function oi(t){var e=Ur(t),n=Nn[e];if("function"!=typeof n||!(e in kn.prototype))return!1;if(t===n)return!0;var a=Hr(n);return!!a&&t===a[0]}(cn&&ti(new cn(new ArrayBuffer(1)))!=O||fn&&ti(new fn)!=g||hn&&"[object Promise]"!=ti(hn.resolve())||gn&&ti(new gn)!=y||pn&&ti(new pn)!=_)&&(ti=function(t){var e=fa(t),n=e==b?t.constructor:void 0,a=n?Ii(n):"";if(a)switch(a){case vn:return O;case xn:return g;case _n:return"[object Promise]";case Tn:return y;case On:return _}return e});var ui=_t?Fs:iu;function li(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||xt)}function di(t){return t==t&&!zs(t)}function ci(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in pt(n))}}function fi(t,e,n){return e=rn(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,s=rn(r.length-e,0),o=a(s);++i<s;)o[i]=r[e+i];i=-1;for(var u=a(e+1);++i<e;)u[i]=r[i];return u[e]=n(o),ne(t,this,u)}}function hi(t,e){return e.length<2?t:da(t,Ba(e,0,-1))}function gi(t,e){for(var n=t.length,a=sn(e.length,n),r=pr(t);a--;){var i=e[a];t[a]=ri(i,n)?r[i]:void 0}return t}function pi(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var bi=xi(Ga),mi=Je||function(t,e){return Yt.setTimeout(t,e)},yi=xi(Va);function vi(t,e,n){var a=e+"";return yi(t,function(t,e){var n=e.length;if(!n)return t;var a=n-1;return e[a]=(n>1?"& ":"")+e[a],e=e.join(n>2?", ":" "),t.replace(J,"{\n/* [wrapped with "+e+"] */\n")}(a,function(t,e){return re(s,(function(n){var a="_."+n[0];e&n[1]&&!ue(t,a)&&t.push(a)})),t.sort()}(function(t){var e=t.match(Z);return e?e[1].split(Q):[]}(a),n)))}function xi(t){var e=0,n=0;return function(){var a=on(),r=16-(a-n);if(n=a,r>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function _i(t,e){var n=-1,a=t.length,r=a-1;for(e=void 0===e?a:e;++n<e;){var i=Da(n,r),s=t[i];t[i]=t[n],t[n]=s}return t.length=e,t}var Ti,Oi,wi=(Ti=Ts((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Y,(function(t,n,a,r){e.push(a?r.replace(tt,"$1"):n||t)})),e}),(function(t){return 500===Oi.size&&Oi.clear(),t})),Oi=Ti.cache,Ti);function Si(t){if("string"==typeof t||Js(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ii(t){if(null!=t){try{return Tt.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function Ni(t){if(t instanceof kn)return t.clone();var e=new An(t.__wrapped__,t.__chain__);return e.__actions__=pr(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Ci=Ma((function(t,e){return Ps(t)?Qn(t,ra(e,1,Ps,!0)):[]})),Ri=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),Kr(n,2)):[]})),Ai=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),void 0,n):[]}));function ki(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),me(t,Kr(e,3),r)}function Ei(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a-1;return void 0!==n&&(r=no(n),r=n<0?rn(a+r,0):sn(r,a-1)),me(t,Kr(e,3),r,!0)}function Li(t){return null!=t&&t.length?ra(t,1):[]}function Di(t){return t&&t.length?t[0]:void 0}var Pi=Ma((function(t){var e=de(t,ar);return e.length&&e[0]===t[0]?ba(e):[]})),Mi=Ma((function(t){var e=ji(t),n=de(t,ar);return e===ji(n)?e=void 0:n.pop(),n.length&&n[0]===t[0]?ba(n,Kr(e,2)):[]})),qi=Ma((function(t){var e=ji(t),n=de(t,ar);return(e="function"==typeof e?e:void 0)&&n.pop(),n.length&&n[0]===t[0]?ba(n,void 0,e):[]}));function ji(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}var Fi=Ma(Gi);function Gi(t,e){return t&&t.length&&e&&e.length?Ea(t,e):t}var Vi=zr((function(t,e){var n=null==t?0:t.length,a=Wn(t,e);return La(t,de(e,(function(t){return ri(t,n)?+t:t})).sort(fr)),a}));function zi(t){return null==t?t:dn.call(t)}var Bi=Ma((function(t){return Ja(ra(t,1,Ps,!0))})),Yi=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),Ja(ra(t,1,Ps,!0),Kr(e,2))})),Hi=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,Ja(ra(t,1,Ps,!0),void 0,e)}));function Ui(t){if(!t||!t.length)return[];var e=0;return t=oe(t,(function(t){if(Ps(t))return e=rn(t.length,e),!0})),Ie(e,(function(e){return de(t,Te(e))}))}function Wi(t,e){if(!t||!t.length)return[];var n=Ui(t);return null==e?n:de(n,(function(t){return ne(e,void 0,t)}))}var Ki=Ma((function(t,e){return Ps(t)?Qn(t,e):[]})),$i=Ma((function(t){return er(oe(t,Ps))})),Ji=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),er(oe(t,Ps),Kr(e,2))})),Zi=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,er(oe(t,Ps),void 0,e)})),Qi=Ma(Ui),Xi=Ma((function(t){var e=t.length,n=e>1?t[e-1]:void 0;return n="function"==typeof n?(t.pop(),n):void 0,Wi(t,n)}));function ts(t){var e=Nn(t);return e.__chain__=!0,e}function es(t,e){return e(t)}var ns=zr((function(t){var e=t.length,n=e?t[0]:0,a=this.__wrapped__,r=function(e){return Wn(e,t)};return!(e>1||this.__actions__.length)&&a instanceof kn&&ri(n)?((a=a.slice(n,+n+(e?1:0))).__actions__.push({func:es,args:[r],thisArg:void 0}),new An(a,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(r)})),as=mr((function(t,e,n){Ot.call(t,n)?++t[n]:Un(t,n,1)})),rs=wr(ki),is=wr(Ei);function ss(t,e){return(Es(t)?re:Xn)(t,Kr(e,3))}function os(t,e){return(Es(t)?ie:ta)(t,Kr(e,3))}var us=mr((function(t,e,n){Ot.call(t,n)?t[n].push(e):Un(t,n,[e])})),ls=Ma((function(t,e,n){var r=-1,i="function"==typeof e,s=Ds(t)?a(t.length):[];return Xn(t,(function(t){s[++r]=i?ne(e,t,n):ma(t,e,n)})),s})),ds=mr((function(t,e,n){Un(t,n,e)}));function cs(t,e){return(Es(t)?de:Sa)(t,Kr(e,3))}var fs=mr((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]})),hs=Ma((function(t,e){if(null==t)return[];var n=e.length;return n>1&&ii(t,e[0],e[1])?e=[]:n>2&&ii(e[0],e[1],e[2])&&(e=[e[0]]),Aa(t,ra(e,1),[])})),gs=$e||function(){return Yt.Date.now()};function ps(t,e,n){return e=n?void 0:e,qr(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function bs(t,e){var n;if("function"!=typeof e)throw new yt(r);return t=no(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=void 0),n}}var ms=Ma((function(t,e,n){var a=1;if(n.length){var r=Fe(n,Wr(ms));a|=32}return qr(t,a,e,n,r)})),ys=Ma((function(t,e,n){var a=3;if(n.length){var r=Fe(n,Wr(ys));a|=32}return qr(e,a,t,n,r)}));function vs(t,e,n){var a,i,s,o,u,l,d=0,c=!1,f=!1,h=!0;if("function"!=typeof t)throw new yt(r);function g(e){var n=a,r=i;return a=i=void 0,d=e,o=t.apply(r,n)}function p(t){return d=t,u=mi(m,e),c?g(t):o}function b(t){var n=t-l;return void 0===l||n>=e||n<0||f&&t-d>=s}function m(){var t=gs();if(b(t))return y(t);u=mi(m,function(t){var n=e-(t-l);return f?sn(n,s-(t-d)):n}(t))}function y(t){return u=void 0,h&&a?g(t):(a=i=void 0,o)}function v(){var t=gs(),n=b(t);if(a=arguments,i=this,l=t,n){if(void 0===u)return p(l);if(f)return ur(u),u=mi(m,e),g(l)}return void 0===u&&(u=mi(m,e)),o}return e=ro(e)||0,zs(n)&&(c=!!n.leading,s=(f="maxWait"in n)?rn(ro(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h),v.cancel=function(){void 0!==u&&ur(u),d=0,a=l=i=u=void 0},v.flush=function(){return void 0===u?o:y(gs())},v}var xs=Ma((function(t,e){return Zn(t,1,e)})),_s=Ma((function(t,e,n){return Zn(t,ro(e)||0,n)}));function Ts(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new yt(r);var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s)||i,s};return n.cache=new(Ts.Cache||Dn),n}function Os(t){if("function"!=typeof t)throw new yt(r);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ts.Cache=Dn;var ws=sr((function(t,e){var n=(e=1==e.length&&Es(e[0])?de(e[0],Ne(Kr())):de(ra(e,1),Ne(Kr()))).length;return Ma((function(a){for(var r=-1,i=sn(a.length,n);++r<i;)a[r]=e[r].call(this,a[r]);return ne(t,this,a)}))})),Ss=Ma((function(t,e){return qr(t,32,void 0,e,Fe(e,Wr(Ss)))})),Is=Ma((function(t,e){return qr(t,64,void 0,e,Fe(e,Wr(Is)))})),Ns=zr((function(t,e){return qr(t,256,void 0,void 0,void 0,e)}));function Cs(t,e){return t===e||t!=t&&e!=e}var Rs=Er(ha),As=Er((function(t,e){return t>=e})),ks=ya(function(){return arguments}())?ya:function(t){return Bs(t)&&Ot.call(t,"callee")&&!Kt.call(t,"callee")},Es=a.isArray,Ls=Jt?Ne(Jt):function(t){return Bs(t)&&fa(t)==T};function Ds(t){return null!=t&&Vs(t.length)&&!Fs(t)}function Ps(t){return Bs(t)&&Ds(t)}var Ms=tn||iu,qs=Zt?Ne(Zt):function(t){return Bs(t)&&fa(t)==d};function js(t){if(!Bs(t))return!1;var e=fa(t);return e==c||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Us(t)}function Fs(t){if(!zs(t))return!1;var e=fa(t);return e==f||e==h||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Gs(t){return"number"==typeof t&&t==no(t)}function Vs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function zs(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Bs(t){return null!=t&&"object"==typeof t}var Ys=Qt?Ne(Qt):function(t){return Bs(t)&&ti(t)==g};function Hs(t){return"number"==typeof t||Bs(t)&&fa(t)==p}function Us(t){if(!Bs(t)||fa(t)!=b)return!1;var e=Ht(t);if(null===e)return!0;var n=Ot.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Tt.call(n)==Nt}var Ws=Xt?Ne(Xt):function(t){return Bs(t)&&fa(t)==m},Ks=te?Ne(te):function(t){return Bs(t)&&ti(t)==y};function $s(t){return"string"==typeof t||!Es(t)&&Bs(t)&&fa(t)==v}function Js(t){return"symbol"==typeof t||Bs(t)&&fa(t)==x}var Zs=ee?Ne(ee):function(t){return Bs(t)&&Vs(t.length)&&!!qt[fa(t)]},Qs=Er(wa),Xs=Er((function(t,e){return t<=e}));function to(t){if(!t)return[];if(Ds(t))return $s(t)?Be(t):pr(t);if(Oe&&t[Oe])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Oe]());var e=ti(t);return(e==g?qe:e==y?Ge:Ro)(t)}function eo(t){return t?(t=ro(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function no(t){var e=eo(t),n=e%1;return e==e?n?e-n:e:0}function ao(t){return t?Kn(no(t),0,4294967295):0}function ro(t){if("number"==typeof t)return t;if(Js(t))return NaN;if(zs(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=zs(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(W,"");var n=rt.test(t);return n||st.test(t)?Vt(t.slice(2),n?2:8):at.test(t)?NaN:+t}function io(t){return br(t,_o(t))}function so(t){return null==t?"":$a(t)}var oo=yr((function(t,e){if(li(e)||Ds(e))br(e,xo(e),t);else for(var n in e)Ot.call(e,n)&&zn(t,n,e[n])})),uo=yr((function(t,e){br(e,_o(e),t)})),lo=yr((function(t,e,n,a){br(e,_o(e),t,a)})),co=yr((function(t,e,n,a){br(e,xo(e),t,a)})),fo=zr(Wn),ho=Ma((function(t,e){t=pt(t);var n=-1,a=e.length,r=a>2?e[2]:void 0;for(r&&ii(e[0],e[1],r)&&(a=1);++n<a;)for(var i=e[n],s=_o(i),o=-1,u=s.length;++o<u;){var l=s[o],d=t[l];(void 0===d||Cs(d,xt[l])&&!Ot.call(t,l))&&(t[l]=i[l])}return t})),go=Ma((function(t){return t.push(void 0,Fr),ne(Oo,void 0,t)}));function po(t,e,n){var a=null==t?void 0:da(t,e);return void 0===a?n:a}function bo(t,e){return null!=t&&ei(t,e,pa)}var mo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),t[e]=n}),Bo(Uo)),yo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),Ot.call(t,e)?t[e].push(n):t[e]=[n]}),Kr),vo=Ma(ma);function xo(t){return Ds(t)?qn(t):Oa(t)}function _o(t){return Ds(t)?qn(t,!0):function(t){if(!zs(t))return function(t){var e=[];if(null!=t)for(var n in pt(t))e.push(n);return e}(t);var e=li(t),n=[];for(var a in t)("constructor"!=a||!e&&Ot.call(t,a))&&n.push(a);return n}(t)}var To=yr((function(t,e,n){Ca(t,e,n)})),Oo=yr((function(t,e,n,a){Ca(t,e,n,a)})),wo=zr((function(t,e){var n={};if(null==t)return n;var a=!1;e=de(e,(function(e){return e=ir(e,t),a||(a=e.length>1),e})),br(t,Yr(t),n),a&&(n=$n(n,7,Gr));for(var r=e.length;r--;)Za(n,e[r]);return n})),So=zr((function(t,e){return null==t?{}:function(t,e){return ka(t,e,(function(e,n){return bo(t,n)}))}(t,e)}));function Io(t,e){if(null==t)return{};var n=de(Yr(t),(function(t){return[t]}));return e=Kr(e),ka(t,n,(function(t,n){return e(t,n[0])}))}var No=Mr(xo),Co=Mr(_o);function Ro(t){return null==t?[]:Ce(t,xo(t))}var Ao=Tr((function(t,e,n){return e=e.toLowerCase(),t+(n?ko(e):e)}));function ko(t){return Fo(so(t).toLowerCase())}function Eo(t){return(t=so(t))&&t.replace(ut,Le).replace(At,"")}var Lo=Tr((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Do=Tr((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Po=_r("toLowerCase"),Mo=Tr((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()})),qo=Tr((function(t,e,n){return t+(n?" ":"")+Fo(e)})),jo=Tr((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Fo=_r("toUpperCase");function Go(t,e,n){return t=so(t),void 0===(e=n?void 0:e)?function(t){return Dt.test(t)}(t)?function(t){return t.match(Et)||[]}(t):function(t){return t.match(X)||[]}(t):t.match(e)||[]}var Vo=Ma((function(t,e){try{return ne(t,void 0,e)}catch(n){return js(n)?n:new ft(n)}})),zo=zr((function(t,e){return re(e,(function(e){e=Si(e),Un(t,e,ms(t[e],t))})),t}));function Bo(t){return function(){return t}}var Yo=Sr(),Ho=Sr(!0);function Uo(t){return t}function Wo(t){return Ta("function"==typeof t?t:$n(t,1))}var Ko=Ma((function(t,e){return function(n){return ma(n,t,e)}})),$o=Ma((function(t,e){return function(n){return ma(t,n,e)}}));function Jo(t,e,n){var a=xo(e),r=la(e,a);null!=n||zs(e)&&(r.length||!a.length)||(n=e,e=t,t=this,r=la(e,xo(e)));var i=!(zs(n)&&"chain"in n&&!n.chain),s=Fs(t);return re(r,(function(n){var a=e[n];t[n]=a,s&&(t.prototype[n]=function(){var e=this.__chain__;if(i||e){var n=t(this.__wrapped__),r=n.__actions__=pr(this.__actions__);return r.push({func:a,args:arguments,thisArg:t}),n.__chain__=e,n}return a.apply(t,ce([this.value()],arguments))})})),t}function Zo(){}var Qo=Rr(de),Xo=Rr(se),tu=Rr(ge);function eu(t){return si(t)?Te(Si(t)):function(t){return function(e){return da(e,t)}}(t)}var nu=kr(),au=kr(!0);function ru(){return[]}function iu(){return!1}var su,ou=Cr((function(t,e){return t+e}),0),uu=Dr("ceil"),lu=Cr((function(t,e){return t/e}),1),du=Dr("floor"),cu=Cr((function(t,e){return t*e}),1),fu=Dr("round"),hu=Cr((function(t,e){return t-e}),0);return Nn.after=function(t,e){if("function"!=typeof e)throw new yt(r);return t=no(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=ps,Nn.assign=oo,Nn.assignIn=uo,Nn.assignInWith=lo,Nn.assignWith=co,Nn.at=fo,Nn.before=bs,Nn.bind=ms,Nn.bindAll=zo,Nn.bindKey=ys,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Es(t)?t:[t]},Nn.chain=ts,Nn.chunk=function(t,e,n){e=(n?ii(t,e,n):void 0===e)?1:rn(no(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,s=0,o=a(Ze(r/e));i<r;)o[s++]=Ba(t,i,i+=e);return o},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,a=0,r=[];++e<n;){var i=t[e];i&&(r[a++]=i)}return r},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=a(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ce(Es(n)?pr(n):[n],ra(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=Kr();return t=e?de(t,(function(t){if("function"!=typeof t[1])throw new yt(r);return[n(t[0]),t[1]]})):[],Ma((function(n){for(var a=-1;++a<e;){var r=t[a];if(ne(r[0],this,n))return ne(r[1],this,n)}}))},Nn.conforms=function(t){return function(t){var e=xo(t);return function(n){return Jn(n,t,e)}}($n(t,1))},Nn.constant=Bo,Nn.countBy=as,Nn.create=function(t,e){var n=Cn(t);return null==e?n:Hn(n,e)},Nn.curry=function t(e,n,a){var r=qr(e,8,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.curryRight=function t(e,n,a){var r=qr(e,16,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.debounce=vs,Nn.defaults=ho,Nn.defaultsDeep=go,Nn.defer=xs,Nn.delay=_s,Nn.difference=Ci,Nn.differenceBy=Ri,Nn.differenceWith=Ai,Nn.drop=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=n||void 0===e?1:no(e))<0?0:e,a):[]},Nn.dropRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,0,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0):[]},Nn.fill=function(t,e,n,a){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&ii(t,e,n)&&(n=0,a=r),function(t,e,n,a){var r=t.length;for((n=no(n))<0&&(n=-n>r?0:r+n),(a=void 0===a||a>r?r:no(a))<0&&(a+=r),a=n>a?0:ao(a);n<a;)t[n++]=e;return t}(t,e,n,a)):[]},Nn.filter=function(t,e){return(Es(t)?oe:aa)(t,Kr(e,3))},Nn.flatMap=function(t,e){return ra(cs(t,e),1)},Nn.flatMapDeep=function(t,e){return ra(cs(t,e),1/0)},Nn.flatMapDepth=function(t,e,n){return n=void 0===n?1:no(n),ra(cs(t,e),n)},Nn.flatten=Li,Nn.flattenDeep=function(t){return null!=t&&t.length?ra(t,1/0):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?ra(t,e=void 0===e?1:no(e)):[]},Nn.flip=function(t){return qr(t,512)},Nn.flow=Yo,Nn.flowRight=Ho,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,a={};++e<n;){var r=t[e];a[r[0]]=r[1]}return a},Nn.functions=function(t){return null==t?[]:la(t,xo(t))},Nn.functionsIn=function(t){return null==t?[]:la(t,_o(t))},Nn.groupBy=us,Nn.initial=function(t){return null!=t&&t.length?Ba(t,0,-1):[]},Nn.intersection=Pi,Nn.intersectionBy=Mi,Nn.intersectionWith=qi,Nn.invert=mo,Nn.invertBy=yo,Nn.invokeMap=ls,Nn.iteratee=Wo,Nn.keyBy=ds,Nn.keys=xo,Nn.keysIn=_o,Nn.map=cs,Nn.mapKeys=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,e(t,a,r),t)})),n},Nn.mapValues=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,a,e(t,a,r))})),n},Nn.matches=function(t){return Ia($n(t,1))},Nn.matchesProperty=function(t,e){return Na(t,$n(e,1))},Nn.memoize=Ts,Nn.merge=To,Nn.mergeWith=Oo,Nn.method=Ko,Nn.methodOf=$o,Nn.mixin=Jo,Nn.negate=Os,Nn.nthArg=function(t){return t=no(t),Ma((function(e){return Ra(e,t)}))},Nn.omit=wo,Nn.omitBy=function(t,e){return Io(t,Os(Kr(e)))},Nn.once=function(t){return bs(2,t)},Nn.orderBy=function(t,e,n,a){return null==t?[]:(Es(e)||(e=null==e?[]:[e]),Es(n=a?void 0:n)||(n=null==n?[]:[n]),Aa(t,e,n))},Nn.over=Qo,Nn.overArgs=ws,Nn.overEvery=Xo,Nn.overSome=tu,Nn.partial=Ss,Nn.partialRight=Is,Nn.partition=fs,Nn.pick=So,Nn.pickBy=Io,Nn.property=eu,Nn.propertyOf=function(t){return function(e){return null==t?void 0:da(t,e)}},Nn.pull=Fi,Nn.pullAll=Gi,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,Kr(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,void 0,n):t},Nn.pullAt=Vi,Nn.range=nu,Nn.rangeRight=au,Nn.rearg=Ns,Nn.reject=function(t,e){return(Es(t)?oe:aa)(t,Os(Kr(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var a=-1,r=[],i=t.length;for(e=Kr(e,3);++a<i;){var s=t[a];e(s,a,t)&&(n.push(s),r.push(a))}return La(t,r),n},Nn.rest=function(t,e){if("function"!=typeof t)throw new yt(r);return Ma(t,e=void 0===e?e:no(e))},Nn.reverse=zi,Nn.sampleSize=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),(Es(t)?Fn:ja)(t,e)},Nn.set=function(t,e,n){return null==t?t:Fa(t,e,n)},Nn.setWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Fa(t,e,n,a)},Nn.shuffle=function(t){return(Es(t)?Gn:za)(t)},Nn.slice=function(t,e,n){var a=null==t?0:t.length;return a?(n&&"number"!=typeof n&&ii(t,e,n)?(e=0,n=a):(e=null==e?0:no(e),n=void 0===n?a:no(n)),Ba(t,e,n)):[]},Nn.sortBy=hs,Nn.sortedUniq=function(t){return t&&t.length?Wa(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?Wa(t,Kr(e,2)):[]},Nn.split=function(t,e,n){return n&&"number"!=typeof n&&ii(t,e,n)&&(e=n=void 0),(n=void 0===n?4294967295:n>>>0)?(t=so(t))&&("string"==typeof e||null!=e&&!Ws(e))&&!(e=$a(e))&&Me(t)?or(Be(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if("function"!=typeof t)throw new yt(r);return e=null==e?0:rn(no(e),0),Ma((function(n){var a=n[e],r=or(n,0,e);return a&&ce(r,a),ne(t,this,r)}))},Nn.tail=function(t){var e=null==t?0:t.length;return e?Ba(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?Ba(t,0,(e=n||void 0===e?1:no(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e,a):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var a=!0,i=!0;if("function"!=typeof t)throw new yt(r);return zs(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),vs(t,e,{leading:a,maxWait:e,trailing:i})},Nn.thru=es,Nn.toArray=to,Nn.toPairs=No,Nn.toPairsIn=Co,Nn.toPath=function(t){return Es(t)?de(t,Si):Js(t)?[t]:pr(wi(so(t)))},Nn.toPlainObject=io,Nn.transform=function(t,e,n){var a=Es(t),r=a||Ms(t)||Zs(t);if(e=Kr(e,4),null==n){var i=t&&t.constructor;n=r?a?new i:[]:zs(t)&&Fs(i)?Cn(Ht(t)):{}}return(r?re:oa)(t,(function(t,a,r){return e(n,t,a,r)})),n},Nn.unary=function(t){return ps(t,1)},Nn.union=Bi,Nn.unionBy=Yi,Nn.unionWith=Hi,Nn.uniq=function(t){return t&&t.length?Ja(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?Ja(t,Kr(e,2)):[]},Nn.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Ja(t,void 0,e):[]},Nn.unset=function(t,e){return null==t||Za(t,e)},Nn.unzip=Ui,Nn.unzipWith=Wi,Nn.update=function(t,e,n){return null==t?t:Qa(t,e,rr(n))},Nn.updateWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Qa(t,e,rr(n),a)},Nn.values=Ro,Nn.valuesIn=function(t){return null==t?[]:Ce(t,_o(t))},Nn.without=Ki,Nn.words=Go,Nn.wrap=function(t,e){return Ss(rr(e),t)},Nn.xor=$i,Nn.xorBy=Ji,Nn.xorWith=Zi,Nn.zip=Qi,Nn.zipObject=function(t,e){return nr(t||[],e||[],zn)},Nn.zipObjectDeep=function(t,e){return nr(t||[],e||[],Fa)},Nn.zipWith=Xi,Nn.entries=No,Nn.entriesIn=Co,Nn.extend=uo,Nn.extendWith=lo,Jo(Nn,Nn),Nn.add=ou,Nn.attempt=Vo,Nn.camelCase=Ao,Nn.capitalize=ko,Nn.ceil=uu,Nn.clamp=function(t,e,n){return void 0===n&&(n=e,e=void 0),void 0!==n&&(n=(n=ro(n))==n?n:0),void 0!==e&&(e=(e=ro(e))==e?e:0),Kn(ro(t),e,n)},Nn.clone=function(t){return $n(t,4)},Nn.cloneDeep=function(t){return $n(t,5)},Nn.cloneDeepWith=function(t,e){return $n(t,5,e="function"==typeof e?e:void 0)},Nn.cloneWith=function(t,e){return $n(t,4,e="function"==typeof e?e:void 0)},Nn.conformsTo=function(t,e){return null==e||Jn(t,e,xo(e))},Nn.deburr=Eo,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=lu,Nn.endsWith=function(t,e,n){t=so(t),e=$a(e);var a=t.length,r=n=void 0===n?a:Kn(no(n),0,a);return(n-=e.length)>=0&&t.slice(n,r)==e},Nn.eq=Cs,Nn.escape=function(t){return(t=so(t))&&j.test(t)?t.replace(M,De):t},Nn.escapeRegExp=function(t){return(t=so(t))&&U.test(t)?t.replace(H,"\\$&"):t},Nn.every=function(t,e,n){var a=Es(t)?se:ea;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.find=rs,Nn.findIndex=ki,Nn.findKey=function(t,e){return be(t,Kr(e,3),oa)},Nn.findLast=is,Nn.findLastIndex=Ei,Nn.findLastKey=function(t,e){return be(t,Kr(e,3),ua)},Nn.floor=du,Nn.forEach=ss,Nn.forEachRight=os,Nn.forIn=function(t,e){return null==t?t:ia(t,Kr(e,3),_o)},Nn.forInRight=function(t,e){return null==t?t:sa(t,Kr(e,3),_o)},Nn.forOwn=function(t,e){return t&&oa(t,Kr(e,3))},Nn.forOwnRight=function(t,e){return t&&ua(t,Kr(e,3))},Nn.get=po,Nn.gt=Rs,Nn.gte=As,Nn.has=function(t,e){return null!=t&&ei(t,e,ga)},Nn.hasIn=bo,Nn.head=Di,Nn.identity=Uo,Nn.includes=function(t,e,n,a){t=Ds(t)?t:Ro(t),n=n&&!a?no(n):0;var r=t.length;return n<0&&(n=rn(r+n,0)),$s(t)?n<=r&&t.indexOf(e,n)>-1:!!r&&ye(t,e,n)>-1},Nn.indexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),ye(t,e,r)},Nn.inRange=function(t,e,n){return e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n){return t>=sn(e,n)&&t<rn(e,n)}(t=ro(t),e,n)},Nn.invoke=vo,Nn.isArguments=ks,Nn.isArray=Es,Nn.isArrayBuffer=Ls,Nn.isArrayLike=Ds,Nn.isArrayLikeObject=Ps,Nn.isBoolean=function(t){return!0===t||!1===t||Bs(t)&&fa(t)==l},Nn.isBuffer=Ms,Nn.isDate=qs,Nn.isElement=function(t){return Bs(t)&&1===t.nodeType&&!Us(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Ds(t)&&(Es(t)||"string"==typeof t||"function"==typeof t.splice||Ms(t)||Zs(t)||ks(t)))return!t.length;var e=ti(t);if(e==g||e==y)return!t.size;if(li(t))return!Oa(t).length;for(var n in t)if(Ot.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return va(t,e)},Nn.isEqualWith=function(t,e,n){var a=(n="function"==typeof n?n:void 0)?n(t,e):void 0;return void 0===a?va(t,e,void 0,n):!!a},Nn.isError=js,Nn.isFinite=function(t){return"number"==typeof t&&en(t)},Nn.isFunction=Fs,Nn.isInteger=Gs,Nn.isLength=Vs,Nn.isMap=Ys,Nn.isMatch=function(t,e){return t===e||xa(t,e,Jr(e))},Nn.isMatchWith=function(t,e,n){return n="function"==typeof n?n:void 0,xa(t,e,Jr(e),n)},Nn.isNaN=function(t){return Hs(t)&&t!=+t},Nn.isNative=function(t){if(ui(t))throw new ft("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return _a(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=Hs,Nn.isObject=zs,Nn.isObjectLike=Bs,Nn.isPlainObject=Us,Nn.isRegExp=Ws,Nn.isSafeInteger=function(t){return Gs(t)&&t>=-9007199254740991&&t<=9007199254740991},Nn.isSet=Ks,Nn.isString=$s,Nn.isSymbol=Js,Nn.isTypedArray=Zs,Nn.isUndefined=function(t){return void 0===t},Nn.isWeakMap=function(t){return Bs(t)&&ti(t)==_},Nn.isWeakSet=function(t){return Bs(t)&&"[object WeakSet]"==fa(t)},Nn.join=function(t,e){return null==t?"":nn.call(t,e)},Nn.kebabCase=Lo,Nn.last=ji,Nn.lastIndexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a;return void 0!==n&&(r=(r=no(n))<0?rn(a+r,0):sn(r,a-1)),e==e?function(t,e,n){for(var a=n+1;a--;)if(t[a]===e)return a;return a}(t,e,r):me(t,xe,r,!0)},Nn.lowerCase=Do,Nn.lowerFirst=Po,Nn.lt=Qs,Nn.lte=Xs,Nn.max=function(t){return t&&t.length?na(t,Uo,ha):void 0},Nn.maxBy=function(t,e){return t&&t.length?na(t,Kr(e,2),ha):void 0},Nn.mean=function(t){return _e(t,Uo)},Nn.meanBy=function(t,e){return _e(t,Kr(e,2))},Nn.min=function(t){return t&&t.length?na(t,Uo,wa):void 0},Nn.minBy=function(t,e){return t&&t.length?na(t,Kr(e,2),wa):void 0},Nn.stubArray=ru,Nn.stubFalse=iu,Nn.stubObject=function(){return{}},Nn.stubString=function(){return""},Nn.stubTrue=function(){return!0},Nn.multiply=cu,Nn.nth=function(t,e){return t&&t.length?Ra(t,no(e)):void 0},Nn.noConflict=function(){return Yt._===this&&(Yt._=Ct),this},Nn.noop=Zo,Nn.now=gs,Nn.pad=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;if(!e||a>=e)return t;var r=(e-a)/2;return Ar(Qe(r),n)+t+Ar(Ze(r),n)},Nn.padEnd=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?t+Ar(e-a,n):t},Nn.padStart=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?Ar(e-a,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),un(so(t).replace(K,""),e||0)},Nn.random=function(t,e,n){if(n&&"boolean"!=typeof n&&ii(t,e,n)&&(e=n=void 0),void 0===n&&("boolean"==typeof e?(n=e,e=void 0):"boolean"==typeof t&&(n=t,t=void 0)),void 0===t&&void 0===e?(t=0,e=1):(t=eo(t),void 0===e?(e=t,t=0):e=eo(e)),t>e){var a=t;t=e,e=a}if(n||t%1||e%1){var r=ln();return sn(t+r*(e-t+Gt("1e-"+((r+"").length-1))),e)}return Da(t,e)},Nn.reduce=function(t,e,n){var a=Es(t)?fe:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,Xn)},Nn.reduceRight=function(t,e,n){var a=Es(t)?he:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,ta)},Nn.repeat=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),Pa(so(t),e)},Nn.replace=function(){var t=arguments,e=so(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var a=-1,r=(e=ir(e,t)).length;for(r||(r=1,t=void 0);++a<r;){var i=null==t?void 0:t[Si(e[a])];void 0===i&&(a=r,i=n),t=Fs(i)?i.call(t):i}return t},Nn.round=fu,Nn.runInContext=t,Nn.sample=function(t){return(Es(t)?jn:qa)(t)},Nn.size=function(t){if(null==t)return 0;if(Ds(t))return $s(t)?ze(t):t.length;var e=ti(t);return e==g||e==y?t.size:Oa(t).length},Nn.snakeCase=Mo,Nn.some=function(t,e,n){var a=Es(t)?ge:Ya;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.sortedIndex=function(t,e){return Ha(t,e)},Nn.sortedIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var a=Ha(t,e);if(a<n&&Cs(t[a],e))return a}return-1},Nn.sortedLastIndex=function(t,e){return Ha(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=Ha(t,e,!0)-1;if(Cs(t[n],e))return n}return-1},Nn.startCase=qo,Nn.startsWith=function(t,e,n){return t=so(t),n=null==n?0:Kn(no(n),0,t.length),e=$a(e),t.slice(n,n+e.length)==e},Nn.subtract=hu,Nn.sum=function(t){return t&&t.length?Se(t,Uo):0},Nn.sumBy=function(t,e){return t&&t.length?Se(t,Kr(e,2)):0},Nn.template=function(t,e,n){var a=Nn.templateSettings;n&&ii(t,e,n)&&(e=void 0),t=so(t),e=lo({},e,a,jr);var r,i,s=lo({},e.imports,a.imports,jr),o=xo(s),u=Ce(s,o),l=0,d=e.interpolate||lt,c="__p += '",f=bt((e.escape||lt).source+"|"+d.source+"|"+(d===V?et:lt).source+"|"+(e.evaluate||lt).source+"|$","g"),h="//# sourceURL="+(Ot.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Mt+"]")+"\n";t.replace(f,(function(e,n,a,s,o,u){return a||(a=s),c+=t.slice(l,u).replace(dt,Pe),n&&(r=!0,c+="' +\n__e("+n+") +\n'"),o&&(i=!0,c+="';\n"+o+";\n__p += '"),a&&(c+="' +\n((__t = ("+a+")) == null ? '' : __t) +\n'"),l=u+e.length,e})),c+="';\n";var g=Ot.call(e,"variable")&&e.variable;g||(c="with (obj) {\n"+c+"\n}\n"),c=(i?c.replace(E,""):c).replace(L,"$1").replace(D,"$1;"),c="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(r?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+c+"return __p\n}";var p=Vo((function(){return ht(o,h+"return "+c).apply(void 0,u)}));if(p.source=c,js(p))throw p;return p},Nn.times=function(t,e){if((t=no(t))<1||t>9007199254740991)return[];var n=4294967295,a=sn(t,4294967295);t-=4294967295;for(var r=Ie(a,e=Kr(e));++n<t;)e(n);return r},Nn.toFinite=eo,Nn.toInteger=no,Nn.toLength=ao,Nn.toLower=function(t){return so(t).toLowerCase()},Nn.toNumber=ro,Nn.toSafeInteger=function(t){return t?Kn(no(t),-9007199254740991,9007199254740991):0===t?t:0},Nn.toString=so,Nn.toUpper=function(t){return so(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(W,"");if(!t||!(e=$a(e)))return t;var a=Be(t),r=Be(e);return or(a,Ae(a,r),ke(a,r)+1).join("")},Nn.trimEnd=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace($,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,0,ke(a,Be(e))+1).join("")},Nn.trimStart=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(K,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,Ae(a,Be(e))).join("")},Nn.truncate=function(t,e){var n=30,a="...";if(zs(e)){var r="separator"in e?e.separator:r;n="length"in e?no(e.length):n,a="omission"in e?$a(e.omission):a}var i=(t=so(t)).length;if(Me(t)){var s=Be(t);i=s.length}if(n>=i)return t;var o=n-ze(a);if(o<1)return a;var u=s?or(s,0,o).join(""):t.slice(0,o);if(void 0===r)return u+a;if(s&&(o+=u.length-o),Ws(r)){if(t.slice(o).search(r)){var l,d=u;for(r.global||(r=bt(r.source,so(nt.exec(r))+"g")),r.lastIndex=0;l=r.exec(d);)var c=l.index;u=u.slice(0,void 0===c?o:c)}}else if(t.indexOf($a(r),o)!=o){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+a},Nn.unescape=function(t){return(t=so(t))&&q.test(t)?t.replace(P,Ye):t},Nn.uniqueId=function(t){var e=++wt;return so(t)+e},Nn.upperCase=jo,Nn.upperFirst=Fo,Nn.each=ss,Nn.eachRight=os,Nn.first=Di,Jo(Nn,(su={},oa(Nn,(function(t,e){Ot.call(Nn.prototype,e)||(su[e]=t)})),su),{chain:!1}),Nn.VERSION="4.17.20",re(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Nn[t].placeholder=Nn})),re(["drop","take"],(function(t,e){kn.prototype[t]=function(n){n=void 0===n?1:rn(no(n),0);var a=this.__filtered__&&!e?new kn(this):this.clone();return a.__filtered__?a.__takeCount__=sn(n,a.__takeCount__):a.__views__.push({size:sn(n,4294967295),type:t+(a.__dir__<0?"Right":"")}),a},kn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),re(["filter","map","takeWhile"],(function(t,e){var n=e+1,a=1==n||3==n;kn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Kr(t,3),type:n}),e.__filtered__=e.__filtered__||a,e}})),re(["head","last"],(function(t,e){var n="take"+(e?"Right":"");kn.prototype[t]=function(){return this[n](1).value()[0]}})),re(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");kn.prototype[t]=function(){return this.__filtered__?new kn(this):this[n](1)}})),kn.prototype.compact=function(){return this.filter(Uo)},kn.prototype.find=function(t){return this.filter(t).head()},kn.prototype.findLast=function(t){return this.reverse().find(t)},kn.prototype.invokeMap=Ma((function(t,e){return"function"==typeof t?new kn(this):this.map((function(n){return ma(n,t,e)}))})),kn.prototype.reject=function(t){return this.filter(Os(Kr(t)))},kn.prototype.slice=function(t,e){t=no(t);var n=this;return n.__filtered__&&(t>0||e<0)?new kn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),void 0!==e&&(n=(e=no(e))<0?n.dropRight(-e):n.take(e-t)),n)},kn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},kn.prototype.toArray=function(){return this.take(4294967295)},oa(kn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),a=/^(?:head|last)$/.test(e),r=Nn[a?"take"+("last"==e?"Right":""):e],i=a||/^find/.test(e);r&&(Nn.prototype[e]=function(){var e=this.__wrapped__,s=a?[1]:arguments,o=e instanceof kn,u=s[0],l=o||Es(e),d=function(t){var e=r.apply(Nn,ce([t],s));return a&&c?e[0]:e};l&&n&&"function"==typeof u&&1!=u.length&&(o=l=!1);var c=this.__chain__,f=!!this.__actions__.length,h=i&&!c,g=o&&!f;if(!i&&l){e=g?e:new kn(this);var p=t.apply(e,s);return p.__actions__.push({func:es,args:[d],thisArg:void 0}),new An(p,c)}return h&&g?t.apply(this,s):(p=this.thru(d),h?a?p.value()[0]:p.value():p)})})),re(["pop","push","shift","sort","splice","unshift"],(function(t){var e=vt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",a=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(a&&!this.__chain__){var r=this.value();return e.apply(Es(r)?r:[],t)}return this[n]((function(n){return e.apply(Es(n)?n:[],t)}))}})),oa(kn.prototype,(function(t,e){var n=Nn[e];if(n){var a=n.name+"";Ot.call(yn,a)||(yn[a]=[]),yn[a].push({name:e,func:n})}})),yn[Ir(void 0,2).name]=[{name:"wrapper",func:void 0}],kn.prototype.clone=function(){var t=new kn(this.__wrapped__);return t.__actions__=pr(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=pr(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=pr(this.__views__),t},kn.prototype.reverse=function(){if(this.__filtered__){var t=new kn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},kn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Es(t),a=e<0,r=n?t.length:0,i=function(t,e,n){for(var a=-1,r=n.length;++a<r;){var i=n[a],s=i.size;switch(i.type){case"drop":t+=s;break;case"dropRight":e-=s;break;case"take":e=sn(e,t+s);break;case"takeRight":t=rn(t,e-s)}}return{start:t,end:e}}(0,r,this.__views__),s=i.start,o=i.end,u=o-s,l=a?o:s-1,d=this.__iteratees__,c=d.length,f=0,h=sn(u,this.__takeCount__);if(!n||!a&&r==u&&h==u)return tr(t,this.__actions__);var g=[];t:for(;u--&&f<h;){for(var p=-1,b=t[l+=e];++p<c;){var m=d[p],y=m.type,v=(0,m.iteratee)(b);if(2==y)b=v;else if(!v){if(1==y)continue t;break t}}g[f++]=b}return g},Nn.prototype.at=ns,Nn.prototype.chain=function(){return ts(this)},Nn.prototype.commit=function(){return new An(this.value(),this.__chain__)},Nn.prototype.next=function(){void 0===this.__values__&&(this.__values__=to(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof Rn;){var a=Ni(n);a.__index__=0,a.__values__=void 0,e?r.__wrapped__=a:e=a;var r=a;n=n.__wrapped__}return r.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof kn){var e=t;return this.__actions__.length&&(e=new kn(this)),(e=e.reverse()).__actions__.push({func:es,args:[zi],thisArg:void 0}),new An(e,this.__chain__)}return this.thru(zi)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return tr(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Oe&&(Nn.prototype[Oe]=function(){return this}),Nn}();Yt._=He,void 0===(a=(function(){return He}).call(e,n,e,t))||(t.exports=a)}).call(this)}).call(this,n("YuTi")(t))},LxgN:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(e(t[n],n,t))return!0;return!1}},"M+Mf":function(t,e,n){var a=n("rk81"),r=n("IfUl"),i=n("PjNX"),s=n("02OF"),o=n("hmSm"),u=n("MBcj"),l=n("dCge");t.exports=function t(e,n,d,c,f){e!==n&&i(n,(function(i,u){if(f||(f=new a),o(i))s(e,n,u,d,t,c,f);else{var h=c?c(l(e,u),i,u+"",e,n,f):void 0;void 0===h&&(h=i),r(e,u,h)}}),u)}},MBcj:function(t,e,n){var a=n("pmjB"),r=n("6eui"),i=n("im1V");t.exports=function(t){return i(t)?a(t,!0):r(t)}},"MO+k":function(t,e,n){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={rgb2hsl:n,rgb2hsv:a,rgb2hwb:i,rgb2cmyk:s,rgb2keyword:o,rgb2xyz:u,rgb2lab:l,rgb2lch:function(t){return v(l(t))},hsl2rgb:d,hsl2hsv:function(t){var e=t[1]/100,n=t[2]/100;return 0===n?[0,0,0]:[t[0],2*(e*=(n*=2)<=1?n:2-n)/(n+e)*100,(n+e)/2*100]},hsl2hwb:function(t){return i(d(t))},hsl2cmyk:function(t){return s(d(t))},hsl2keyword:function(t){return o(d(t))},hsv2rgb:c,hsv2hsl:function(t){var e,n,a=t[1]/100,r=t[2]/100;return e=a*r,[t[0],100*(e=(e/=(n=(2-a)*r)<=1?n:2-n)||0),100*(n/=2)]},hsv2hwb:function(t){return i(c(t))},hsv2cmyk:function(t){return s(c(t))},hsv2keyword:function(t){return o(c(t))},hwb2rgb:f,hwb2hsl:function(t){return n(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return s(f(t))},hwb2keyword:function(t){return o(f(t))},cmyk2rgb:h,cmyk2hsl:function(t){return n(h(t))},cmyk2hsv:function(t){return a(h(t))},cmyk2hwb:function(t){return i(h(t))},cmyk2keyword:function(t){return o(h(t))},keyword2rgb:T,keyword2hsl:function(t){return n(T(t))},keyword2hsv:function(t){return a(T(t))},keyword2hwb:function(t){return i(T(t))},keyword2cmyk:function(t){return s(T(t))},keyword2lab:function(t){return l(T(t))},keyword2xyz:function(t){return u(T(t))},xyz2rgb:p,xyz2lab:m,xyz2lch:function(t){return v(m(t))},lab2xyz:y,lab2rgb:x,lab2lch:v,lch2lab:_,lch2xyz:function(t){return y(_(t))},lch2rgb:function(t){return x(_(t))}};function n(t){var e,n,a=t[0]/255,r=t[1]/255,i=t[2]/255,s=Math.min(a,r,i),o=Math.max(a,r,i),u=o-s;return o==s?e=0:a==o?e=(r-i)/u:r==o?e=2+(i-a)/u:i==o&&(e=4+(a-r)/u),(e=Math.min(60*e,360))<0&&(e+=360),n=(s+o)/2,[e,100*(o==s?0:n<=.5?u/(o+s):u/(2-o-s)),100*n]}function a(t){var e,n,a=t[0],r=t[1],i=t[2],s=Math.min(a,r,i),o=Math.max(a,r,i),u=o-s;return n=0==o?0:u/o*1e3/10,o==s?e=0:a==o?e=(r-i)/u:r==o?e=2+(i-a)/u:i==o&&(e=4+(a-r)/u),(e=Math.min(60*e,360))<0&&(e+=360),[e,n,o/255*1e3/10]}function i(t){var e=t[0],a=t[1],r=t[2];return[n(t)[0],1/255*Math.min(e,Math.min(a,r))*100,100*(r=1-1/255*Math.max(e,Math.max(a,r)))]}function s(t){var e,n=t[0]/255,a=t[1]/255,r=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-a,1-r)))/(1-e)||0),100*((1-a-e)/(1-e)||0),100*((1-r-e)/(1-e)||0),100*e]}function o(t){return w[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(a=a>.04045?Math.pow((a+.055)/1.055,2.4):a/12.92)),100*(.2126*e+.7152*n+.0722*a),100*(.0193*e+.1192*n+.9505*a)]}function l(t){var e=u(t),n=e[0],a=e[1],r=e[2];return a/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(n-a),200*(a-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]}function d(t){var e,n,a,r,i,s=t[0]/360,o=t[1]/100,u=t[2]/100;if(0==o)return[i=255*u,i,i];e=2*u-(n=u<.5?u*(1+o):u+o-u*o),r=[0,0,0];for(var l=0;l<3;l++)(a=s+1/3*-(l-1))<0&&a++,a>1&&a--,r[l]=255*(i=6*a<1?e+6*(n-e)*a:2*a<1?n:3*a<2?e+(n-e)*(2/3-a)*6:e);return r}function c(t){var e=t[0]/60,n=t[1]/100,a=t[2]/100,r=Math.floor(e)%6,i=e-Math.floor(e),s=255*a*(1-n),o=255*a*(1-n*i),u=255*a*(1-n*(1-i));switch(a*=255,r){case 0:return[a,u,s];case 1:return[o,a,s];case 2:return[s,a,u];case 3:return[s,o,a];case 4:return[u,s,a];case 5:return[a,s,o]}}function f(t){var e,n,a,i,s=t[0]/360,o=t[1]/100,u=t[2]/100,l=o+u;switch(l>1&&(o/=l,u/=l),a=6*s-(e=Math.floor(6*s)),0!=(1&e)&&(a=1-a),i=o+a*((n=1-u)-o),e){default:case 6:case 0:r=n,g=i,b=o;break;case 1:r=i,g=n,b=o;break;case 2:r=o,g=n,b=i;break;case 3:r=o,g=i,b=n;break;case 4:r=i,g=o,b=n;break;case 5:r=n,g=o,b=i}return[255*r,255*g,255*b]}function h(t){var e=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,t[0]/100*(1-a)+a)),255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,n,a,r=t[0]/100,i=t[1]/100,s=t[2]/100;return n=-.9689*r+1.8758*i+.0415*s,a=.0557*r+-.204*i+1.057*s,e=(e=3.2406*r+-1.5372*i+-.4986*s)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,a=a>.0031308?1.055*Math.pow(a,1/2.4)-.055:a*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(a=Math.min(Math.max(0,a),1))]}function m(t){var e=t[0],n=t[1],a=t[2];return n/=100,a/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function y(t){var e,n,a,r,i=t[0],s=t[1],o=t[2];return i<=8?r=(n=100*i/903.3)/100*7.787+16/116:(n=100*Math.pow((i+16)/116,3),r=Math.pow(n/100,1/3)),[e=e/95.047<=.008856?e=95.047*(s/500+r-16/116)/7.787:95.047*Math.pow(s/500+r,3),n,a=a/108.883<=.008859?a=108.883*(r-o/200-16/116)/7.787:108.883*Math.pow(r-o/200,3)]}function v(t){var e,n=t[0],a=t[1],r=t[2];return(e=360*Math.atan2(r,a)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(a*a+r*r),e]}function x(t){return p(y(t))}function _(t){var e,n=t[1];return e=t[2]/360*2*Math.PI,[t[0],n*Math.cos(e),n*Math.sin(e)]}function T(t){return O[t]}var O={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},w={};for(var S in O)w[JSON.stringify(O[S])]=S;var I=function(){return new k};for(var N in e){I[N+"Raw"]=function(t){return function(n){return"number"==typeof n&&(n=Array.prototype.slice.call(arguments)),e[t](n)}}(N);var C=/(\w+)2(\w+)/.exec(N),R=C[1],A=C[2];(I[R]=I[R]||{})[A]=I[N]=function(t){return function(n){"number"==typeof n&&(n=Array.prototype.slice.call(arguments));var a=e[t](n);if("string"==typeof a||void 0===a)return a;for(var r=0;r<a.length;r++)a[r]=Math.round(a[r]);return a}}(N)}var k=function(){this.convs={}};k.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},k.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},k.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space;e=I[n][t](this.convs[n]),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach((function(t){k.prototype[t]=function(e){return this.routeSpace(t,arguments)}}));var E=I,L={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},D={getRgba:P,getHsla:M,getRgb:function(t){var e=P(t);return e&&e.slice(0,3)},getHsl:function(t){var e=M(t);return e&&e.slice(0,3)},getHwb:q,getAlpha:function(t){var e=P(t);return e||(e=M(t))||(e=q(t))?e[3]:void 0},hexString:function(t,e){return e=void 0!==e&&3===t.length?e:t[3],"#"+z(t[0])+z(t[1])+z(t[2])+(e>=0&&e<1?z(Math.round(255*e)):"")},rgbString:function(t,e){return e<1||t[3]&&t[3]<1?j(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:j,percentString:function(t,e){return e<1||t[3]&&t[3]<1?F(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"},percentaString:F,hslString:function(t,e){return e<1||t[3]&&t[3]<1?G(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:G,hwbString:function(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return B[t.slice(0,3)]}};function P(t){if(t){var e=[0,0,0],n=1,a=t.match(/^#([a-fA-F0-9]{3,4})$/i),r="";if(a){r=(a=a[1])[3];for(var i=0;i<e.length;i++)e[i]=parseInt(a[i]+a[i],16);r&&(n=Math.round(parseInt(r+r,16)/255*100)/100)}else if(a=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(r=a[2],a=a[1],i=0;i<e.length;i++)e[i]=parseInt(a.slice(2*i,2*i+2),16);r&&(n=Math.round(parseInt(r,16)/255*100)/100)}else if(a=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(i=0;i<e.length;i++)e[i]=parseInt(a[i+1]);n=parseFloat(a[4])}else if(a=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(i=0;i<e.length;i++)e[i]=Math.round(2.55*parseFloat(a[i+1]));n=parseFloat(a[4])}else if(a=t.match(/(\w+)/)){if("transparent"==a[1])return[0,0,0,0];if(!(e=L[a[1]]))return}for(i=0;i<e.length;i++)e[i]=V(e[i],0,255);return n=n||0==n?V(n,0,1):1,e[3]=n,e}}function M(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function q(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function j(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function F(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function G(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function V(t,e,n){return Math.min(Math.max(e,t),n)}function z(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var B={};for(var Y in L)B[L[Y]]=Y;var H=function(t){return t instanceof H?t:this instanceof H?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=D.getRgba(t))?this.setValues("rgb",e):(e=D.getHsla(t))?this.setValues("hsl",e):(e=D.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new H(t);var e};H.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return D.hexString(this.values.rgb)},rgbString:function(){return D.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return D.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return D.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return D.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return D.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return D.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return D.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var a=t[n]/255;e[n]=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,a=void 0===e?.5:e,r=2*a-1,i=this.alpha()-n.alpha(),s=((r*i==-1?r:(r+i)/(1+r*i))+1)/2,o=1-s;return this.rgb(s*this.red()+o*n.red(),s*this.green()+o*n.green(),s*this.blue()+o*n.blue()).alpha(this.alpha()*a+n.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new H,a=this.values,r=n.values;for(var i in a)a.hasOwnProperty(i)&&("[object Array]"===(e={}.toString.call(t=a[i]))?r[i]=t.slice(0):"[object Number]"===e?r[i]=t:console.error("unexpected color value:",t));return n}},H.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},H.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},H.prototype.getValues=function(t){for(var e=this.values,n={},a=0;a<t.length;a++)n[t.charAt(a)]=e[t][a];return 1!==e.alpha&&(n.a=e.alpha),n},H.prototype.setValues=function(t,e){var n,a,r=this.values,i=this.spaces,s=this.maxes,o=1;if(this.valid=!0,"alpha"===t)o=e;else if(e.length)r[t]=e.slice(0,t.length),o=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)r[t][n]=e[t.charAt(n)];o=e.a}else if(void 0!==e[i[t][0]]){var u=i[t];for(n=0;n<t.length;n++)r[t][n]=e[u[n]];o=e.alpha}if(r.alpha=Math.max(0,Math.min(1,void 0===o?r.alpha:o)),"alpha"===t)return!1;for(n=0;n<t.length;n++)a=Math.max(0,Math.min(s[t][n],r[t][n])),r[t][n]=Math.round(a);for(var l in i)l!==t&&(r[l]=E[t][l](r[t]));return!0},H.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},H.prototype.setChannel=function(t,e,n){var a=this.values[t];return void 0===n?a[e]:(n===a[e]||(a[e]=n,this.setValues(t,a)),this)},"undefined"!=typeof window&&(window.Color=H);var U,W=H,K={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return K.valueOrDefault(K.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,a){var r,i,s;if(K.isArray(t))if(i=t.length,a)for(r=i-1;r>=0;r--)e.call(n,t[r],r);else for(r=0;r<i;r++)e.call(n,t[r],r);else if(K.isObject(t))for(i=(s=Object.keys(t)).length,r=0;r<i;r++)e.call(n,t[s[r]],s[r])},arrayEquals:function(t,e){var n,a,r,i;if(!t||!e||t.length!==e.length)return!1;for(n=0,a=t.length;n<a;++n)if(i=e[n],(r=t[n])instanceof Array&&i instanceof Array){if(!K.arrayEquals(r,i))return!1}else if(r!==i)return!1;return!0},clone:function(t){if(K.isArray(t))return t.map(K.clone);if(K.isObject(t)){for(var e={},n=Object.keys(t),a=n.length,r=0;r<a;++r)e[n[r]]=K.clone(t[n[r]]);return e}return t},_merger:function(t,e,n,a){var r=e[t],i=n[t];K.isObject(r)&&K.isObject(i)?K.merge(r,i,a):e[t]=K.clone(i)},_mergerIf:function(t,e,n){var a=e[t],r=n[t];K.isObject(a)&&K.isObject(r)?K.mergeIf(a,r):e.hasOwnProperty(t)||(e[t]=K.clone(r))},merge:function(t,e,n){var a,r,i,s,o,u=K.isArray(e)?e:[e],l=u.length;if(!K.isObject(t))return t;for(a=(n=n||{}).merger||K._merger,r=0;r<l;++r)if(K.isObject(e=u[r]))for(o=0,s=(i=Object.keys(e)).length;o<s;++o)a(i[o],t,e,n);return t},mergeIf:function(t,e){return K.merge(t,e,{merger:K._mergerIf})},extend:function(t){for(var e=function(e,n){t[n]=e},n=1,a=arguments.length;n<a;++n)K.each(arguments[n],e);return t},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},a=function(){this.constructor=n};return a.prototype=e.prototype,n.prototype=new a,n.extend=K.inherits,t&&K.extend(n.prototype,t),n.__super__=e.prototype,n}},$=K;K.callCallback=K.callback,K.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},K.getValueOrDefault=K.valueOrDefault,K.getValueAtIndexOrDefault=K.valueAtIndexOrDefault;var J={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:1===t?1:(n||(n=.3),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),-a*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:1===t?1:(n||(n=.3),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),a*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),t<1?a*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:a*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-J.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*J.easeInBounce(2*t):.5*J.easeOutBounce(2*t-1)+.5}},Z={effects:J};$.easingEffects=J;var Q=Math.PI,X=Q/180,tt=2*Q,et=Q/2,nt=Q/4,at=2*Q/3,rt={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,a,r,i){if(i){var s=Math.min(i,r/2,a/2),o=e+s,u=n+s,l=e+a-s,d=n+r-s;t.moveTo(e,u),o<l&&u<d?(t.arc(o,u,s,-Q,-et),t.arc(l,u,s,-et,0),t.arc(l,d,s,0,et),t.arc(o,d,s,et,Q)):o<l?(t.moveTo(o,n),t.arc(l,u,s,-et,et),t.arc(o,u,s,et,Q+et)):u<d?(t.arc(o,u,s,-Q,0),t.arc(o,d,s,0,Q)):t.arc(o,u,s,-Q,Q),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,a,r)},drawPoint:function(t,e,n,a,r,i){var s,o,u,l,d,c=(i||0)*X;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(s=e.toString())&&"[object HTMLCanvasElement]"!==s){if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(a,r,n,0,tt),t.closePath();break;case"triangle":t.moveTo(a+Math.sin(c)*n,r-Math.cos(c)*n),c+=at,t.lineTo(a+Math.sin(c)*n,r-Math.cos(c)*n),c+=at,t.lineTo(a+Math.sin(c)*n,r-Math.cos(c)*n),t.closePath();break;case"rectRounded":l=n-(d=.516*n),o=Math.cos(c+nt)*l,u=Math.sin(c+nt)*l,t.arc(a-o,r-u,d,c-Q,c-et),t.arc(a+u,r-o,d,c-et,c),t.arc(a+o,r+u,d,c,c+et),t.arc(a-u,r+o,d,c+et,c+Q),t.closePath();break;case"rect":if(!i){l=Math.SQRT1_2*n,t.rect(a-l,r-l,2*l,2*l);break}c+=nt;case"rectRot":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+u,r-o),t.lineTo(a+o,r+u),t.lineTo(a-u,r+o),t.closePath();break;case"crossRot":c+=nt;case"cross":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o);break;case"star":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o),c+=nt,o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o);break;case"line":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u);break;case"dash":t.moveTo(a,r),t.lineTo(a+Math.cos(c)*n,r+Math.sin(c)*n)}t.fill(),t.stroke()}}else t.drawImage(e,a-e.width/2,r-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,a){var r=n.steppedLine;if(r){if("middle"===r){var i=(e.x+n.x)/2;t.lineTo(i,a?n.y:e.y),t.lineTo(i,a?e.y:n.y)}else"after"===r&&!a||"after"!==r&&a?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(a?e.controlPointPreviousX:e.controlPointNextX,a?e.controlPointPreviousY:e.controlPointNextY,a?n.controlPointNextX:n.controlPointPreviousX,a?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},it=rt;$.clear=rt.clear,$.drawRoundedRectangle=function(t){t.beginPath(),rt.roundedRect.apply(rt,arguments)};var st={_set:function(t,e){return $.merge(this[t]||(this[t]={}),e)}};st._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var ot=st,ut=$.valueOrDefault,lt={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,a,r;return $.isObject(t)?(e=+t.top||0,n=+t.right||0,a=+t.bottom||0,r=+t.left||0):e=n=a=r=+t||0,{top:e,right:n,bottom:a,left:r,height:e+a,width:r+n}},_parseFont:function(t){var e=ot.global,n=ut(t.fontSize,e.defaultFontSize),a={family:ut(t.fontFamily,e.defaultFontFamily),lineHeight:$.options.toLineHeight(ut(t.lineHeight,e.defaultLineHeight),n),size:n,style:ut(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return a.string=function(t){return!t||$.isNullOrUndef(t.size)||$.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(a),a},resolve:function(t,e,n){var a,r,i;for(a=0,r=t.length;a<r;++a)if(void 0!==(i=t[a])&&(void 0!==e&&"function"==typeof i&&(i=i(e)),void 0!==n&&$.isArray(i)&&(i=i[n]),void 0!==i))return i}},dt=$,ct=it,ft=lt;dt.easing=Z,dt.canvas=ct,dt.options=ft;var ht=function(t){dt.extend(this,t),this.initialize.apply(this,arguments)};dt.extend(ht.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=dt.clone(t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,a=e._start,r=e._view;return n&&1!==t?(r||(r=e._view={}),a||(a=e._start={}),function(t,e,n,a){var r,i,s,o,u,l,d,c,f,h=Object.keys(n);for(r=0,i=h.length;r<i;++r)if(l=n[s=h[r]],e.hasOwnProperty(s)||(e[s]=l),(o=e[s])!==l&&"_"!==s[0]){if(t.hasOwnProperty(s)||(t[s]=o),(d=typeof l)==typeof(u=t[s]))if("string"===d){if((c=W(u)).valid&&(f=W(l)).valid){e[s]=f.mix(c,a).rgbString();continue}}else if(dt.isFinite(u)&&dt.isFinite(l)){e[s]=u+(l-u)*a;continue}e[s]=l}}(a,r,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return dt.isNumber(this._model.x)&&dt.isNumber(this._model.y)}}),ht.extend=dt.inherits;var gt=ht,pt=gt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),bt=pt;Object.defineProperty(pt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(pt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),ot._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:dt.noop,onComplete:dt.noop}});var mt={animations:[],request:null,addAnimation:function(t,e,n,a){var r,i,s=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,a||(t.animating=!0),r=0,i=s.length;r<i;++r)if(s[r].chart===t)return void(s[r]=e);s.push(e),1===s.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=dt.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=dt.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,a,r=this.animations,i=0;i<r.length;)e=(t=r[i]).chart,n=t.numSteps,a=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(a,n),dt.callback(t.render,[e,t],e),dt.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(dt.callback(t.onAnimationComplete,[t],e),e.animating=!1,r.splice(i,1)):++i}},yt=dt.options.resolve,vt=["push","pop","shift","splice","unshift"];function xt(t,e){var n=t._chartjs;if(n){var a=n.listeners,r=a.indexOf(e);-1!==r&&a.splice(r,1),a.length>0||(vt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var _t=function(t,e){this.initialize(t,e)};dt.extend(_t.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&xt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),a=this.getDataset().data||[],r=n.data;for(t=0,e=a.length;t<e;++t)r[t]=r[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,a=n.getDataset(),r=a.data||(a.data=[]);n._data!==r&&(n._data&&xt(n._data,n),r&&Object.isExtensible(r)&&(e=n,(t=r)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),vt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),r=a.apply(this,e);return dt.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),r}})})))),n._data=r),n.resyncElements()},update:dt.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],a=n.length,r=0;r<a;++r)n[r].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,a=0;for(t.dataset&&t.dataset.draw();a<n;++a)e[a].draw()},removeHoverStyle:function(t){dt.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},r=t._model,i=dt.getHoverColor;t.$previousStyle={backgroundColor:r.backgroundColor,borderColor:r.borderColor,borderWidth:r.borderWidth},r.backgroundColor=yt([a.hoverBackgroundColor,e.hoverBackgroundColor,i(r.backgroundColor)],void 0,n),r.borderColor=yt([a.hoverBorderColor,e.hoverBorderColor,i(r.borderColor)],void 0,n),r.borderWidth=yt([a.hoverBorderWidth,e.hoverBorderWidth,r.borderWidth],void 0,n)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,a=e.length;a<n?t.data.splice(a,n-a):a>n&&this.insertElements(n,a-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),_t.extend=dt.inherits;var Tt=_t;ot._set("global",{elements:{arc:{backgroundColor:ot.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Ot=gt.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var a=dt.getAngleFromPoint(n,{x:t,y:e}),r=a.angle,i=a.distance,s=n.startAngle,o=n.endAngle;o<s;)o+=2*Math.PI;for(;r>o;)r-=2*Math.PI;for(;r<s;)r+=2*Math.PI;return r>=s&&r<=o&&i>=n.innerRadius&&i<=n.outerRadius}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,a=n.startAngle,r=n.endAngle,i="inner"===n.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(n.x,n.y,Math.max(n.outerRadius-i,0),a,r),e.arc(n.x,n.y,n.innerRadius,r,a,!0),e.closePath(),e.fillStyle=n.backgroundColor,e.fill(),n.borderWidth&&("inner"===n.borderAlign?(e.beginPath(),e.arc(n.x,n.y,n.outerRadius,a-(t=i/n.outerRadius),r+t),n.innerRadius>i?e.arc(n.x,n.y,n.innerRadius-i,r+(t=i/n.innerRadius),a-t,!0):e.arc(n.x,n.y,i,r+Math.PI/2,a-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(n.x,n.y,n.outerRadius,a,r),e.arc(n.x,n.y,n.innerRadius,r,a,!0),e.closePath(),e.lineWidth=2*n.borderWidth,e.lineJoin="round"):(e.lineWidth=n.borderWidth,e.lineJoin="bevel"),e.strokeStyle=n.borderColor,e.stroke()),e.restore()}}),wt=dt.valueOrDefault,St=ot.global.defaultColor;ot._set("global",{elements:{line:{tension:.4,backgroundColor:St,borderWidth:3,borderColor:St,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var It=gt.extend({draw:function(){var t,e,n,a,r=this._view,i=this._chart.ctx,s=r.spanGaps,o=this._children.slice(),u=ot.global,l=u.elements.line,d=-1;for(this._loop&&o.length&&o.push(o[0]),i.save(),i.lineCap=r.borderCapStyle||l.borderCapStyle,i.setLineDash&&i.setLineDash(r.borderDash||l.borderDash),i.lineDashOffset=wt(r.borderDashOffset,l.borderDashOffset),i.lineJoin=r.borderJoinStyle||l.borderJoinStyle,i.lineWidth=wt(r.borderWidth,l.borderWidth),i.strokeStyle=r.borderColor||u.defaultColor,i.beginPath(),d=-1,t=0;t<o.length;++t)e=o[t],n=dt.previousItem(o,t),a=e._view,0===t?a.skip||(i.moveTo(a.x,a.y),d=t):(n=-1===d?n:o[d],a.skip||(d!==t-1&&!s||-1===d?i.moveTo(a.x,a.y):dt.canvas.lineTo(i,n._view,e._view),d=t));i.stroke(),i.restore()}}),Nt=dt.valueOrDefault,Ct=ot.global.defaultColor;function Rt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}ot._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Ct,borderColor:Ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var At=gt.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:Rt,inXRange:Rt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,a=e.pointStyle,r=e.rotation,i=e.radius,s=e.x,o=e.y,u=ot.global,l=u.defaultColor;e.skip||(void 0===t||dt.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||l,n.lineWidth=Nt(e.borderWidth,u.elements.point.borderWidth),n.fillStyle=e.backgroundColor||l,dt.canvas.drawPoint(n,a,i,s,o,r))}}),kt=ot.global.defaultColor;function Et(t){return t&&void 0!==t.width}function Lt(t){var e,n,a,r,i;return Et(t)?(e=t.x-(i=t.width/2),n=t.x+i,a=Math.min(t.y,t.base),r=Math.max(t.y,t.base)):(i=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),a=t.y-i,r=t.y+i),{left:e,top:a,right:n,bottom:r}}function Dt(t,e,n){return t===e?n:t===n?e:t}function Pt(t,e,n){var a=null===e,r=null===n,i=!(!t||a&&r)&&Lt(t);return i&&(a||e>=i.left&&e<=i.right)&&(r||n>=i.top&&n<=i.bottom)}ot._set("global",{elements:{rectangle:{backgroundColor:kt,borderColor:kt,borderSkipped:"bottom",borderWidth:0}}});var Mt=gt.extend({draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=Lt(t),n=e.right-e.left,a=e.bottom-e.top,r=function(t,e,n){var a,r,i,s,o=t.borderWidth,u=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=Dt(e,"left","right")):t.base<t.y&&(e=Dt(e,"bottom","top")),n[e]=!0,n):n}(t);return dt.isObject(o)?(a=+o.top||0,r=+o.right||0,i=+o.bottom||0,s=+o.left||0):a=r=i=s=+o||0,{t:u.top||a<0?0:a>n?n:a,r:u.right||r<0?0:r>e?e:r,b:u.bottom||i<0?0:i>n?n:i,l:u.left||s<0?0:s>e?e:s}}(t,n/2,a/2);return{outer:{x:e.left,y:e.top,w:n,h:a},inner:{x:e.left+r.l,y:e.top+r.t,w:n-r.l-r.r,h:a-r.t-r.b}}}(e),a=n.outer,r=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(a.x,a.y,a.w,a.h),a.w===r.w&&a.h===r.h||(t.save(),t.beginPath(),t.rect(a.x,a.y,a.w,a.h),t.clip(),t.fillStyle=e.borderColor,t.rect(r.x,r.y,r.w,r.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Pt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return Et(n)?Pt(n,t,null):Pt(n,null,e)},inXRange:function(t){return Pt(this._view,t,null)},inYRange:function(t){return Pt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return Et(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return Et(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),qt={},jt=It,Ft=At,Gt=Mt;qt.Arc=Ot,qt.Line=jt,qt.Point=Ft,qt.Rectangle=Gt;var Vt=dt.options.resolve;ot._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var zt=Tt.extend({dataElementType:qt.Rectangle,initialize:function(){var t,e=this;Tt.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0},update:function(t){var e,n,a=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=a.length;e<n;++e)this.updateElement(a[e],e,t)},updateElement:function(t,e,n){var a=this,r=a.getMeta(),i=a.getDataset(),s=a._resolveElementOptions(t,e);t._xScale=a.getScaleForId(r.xAxisID),t._yScale=a.getScaleForId(r.yAxisID),t._datasetIndex=a.index,t._index=e,t._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderSkipped:s.borderSkipped,borderWidth:s.borderWidth,datasetLabel:i.label,label:a.chart.data.labels[e]},a._updateElementGeometry(t,e,n),t.pivot()},_updateElementGeometry:function(t,e,n){var a=this,r=t._model,i=a._getValueScale(),s=i.getBasePixel(),o=i.isHorizontal(),u=a._ruler||a.getRuler(),l=a.calculateBarValuePixels(a.index,e),d=a.calculateBarIndexPixels(a.index,e,u);r.horizontal=o,r.base=n?s:l.base,r.x=o?n?s:l.head:d.center,r.y=o?d.center:n?s:l.head,r.height=o?d.size:void 0,r.width=o?void 0:d.size},_getStacks:function(t){var e,n,a=this.chart,r=this._getIndexScale().options.stacked,i=void 0===t?a.data.datasets.length:t+1,s=[];for(e=0;e<i;++e)(n=a.getDatasetMeta(e)).bar&&a.isDatasetVisible(e)&&(!1===r||!0===r&&-1===s.indexOf(n.stack)||void 0===r&&(void 0===n.stack||-1===s.indexOf(n.stack)))&&s.push(n.stack);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),a=void 0!==e?n.indexOf(e):-1;return-1===a?n.length-1:a},getRuler:function(){var t,e,n=this._getIndexScale(),a=this.getStackCount(),r=this.index,i=n.isHorizontal(),s=i?n.left:n.top,o=s+(i?n.width:n.height),u=[];for(t=0,e=this.getMeta().data.length;t<e;++t)u.push(n.getPixelForValue(null,t,r));return{min:dt.isNullOrUndef(n.options.barThickness)?function(t,e){var n,a,r,i,s=t.isHorizontal()?t.width:t.height,o=t.getTicks();for(r=1,i=e.length;r<i;++r)s=Math.min(s,Math.abs(e[r]-e[r-1]));for(r=0,i=o.length;r<i;++r)a=t.getPixelForTick(r),s=r>0?Math.min(s,a-n):s,n=a;return s}(n,u):-1,pixels:u,start:s,end:o,stackCount:a,scale:n}},calculateBarValuePixels:function(t,e){var n,a,r,i,s,o,u=this.chart,l=this.getMeta(),d=this._getValueScale(),c=d.isHorizontal(),f=u.data.datasets,h=+d.getRightValue(f[t].data[e]),g=d.options.minBarLength,p=d.options.stacked,b=l.stack,m=0;if(p||void 0===p&&void 0!==b)for(n=0;n<t;++n)(a=u.getDatasetMeta(n)).bar&&a.stack===b&&a.controller._getValueScaleId()===d.id&&u.isDatasetVisible(n)&&(r=+d.getRightValue(f[n].data[e]),(h<0&&r<0||h>=0&&r>0)&&(m+=r));return i=d.getPixelForValue(m),o=(s=d.getPixelForValue(m+h))-i,void 0!==g&&Math.abs(o)<g&&(o=g,s=h>=0&&!c||h<0&&c?i-g:i+g),{size:o,base:i,head:s,center:s+o/2}},calculateBarIndexPixels:function(t,e,n){var a=n.scale.options,r="flex"===a.barThickness?function(t,e,n){var a,r=e.pixels,i=r[t],s=t>0?r[t-1]:null,o=t<r.length-1?r[t+1]:null,u=n.categoryPercentage;return null===s&&(s=i-(null===o?e.end-e.start:o-i)),null===o&&(o=i+i-s),a=i-(i-Math.min(s,o))/2*u,{chunk:Math.abs(o-s)/2*u/e.stackCount,ratio:n.barPercentage,start:a}}(e,n,a):function(t,e,n){var a,r,i=n.barThickness,s=e.stackCount,o=e.pixels[t];return dt.isNullOrUndef(i)?(a=e.min*n.categoryPercentage,r=n.barPercentage):(a=i*s,r=1),{chunk:a/s,ratio:r,start:o-a/2}}(e,n,a),i=this.getStackIndex(t,this.getMeta().stack),s=r.start+r.chunk*i+r.chunk/2,o=Math.min(dt.valueOrDefault(a.maxBarThickness,1/0),r.chunk*r.ratio);return{base:s-o/2,head:s+o/2,center:s,size:o}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,a=this.getDataset(),r=n.length,i=0;for(dt.canvas.clipArea(t.ctx,t.chartArea);i<r;++i)isNaN(e.getRightValue(a.data[i]))||n[i].draw();dt.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.rectangle,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=Vt([o[r],s[r],u[r]],d,e);return l}}),Bt=dt.valueOrDefault,Yt=dt.options.resolve;ot._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+": ("+t.xLabel+", "+t.yLabel+", "+e.datasets[t.datasetIndex].data[t.index].r+")"}}}});var Ht=Tt.extend({dataElementType:qt.Point,update:function(t){var e=this,n=e.getMeta();dt.each(n.data,(function(n,a){e.updateElement(n,a,t)}))},updateElement:function(t,e,n){var a=this,r=a.getMeta(),i=t.custom||{},s=a.getScaleForId(r.xAxisID),o=a.getScaleForId(r.yAxisID),u=a._resolveElementOptions(t,e),l=a.getDataset().data[e],d=a.index,c=n?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof l?l:NaN,e,d),f=n?o.getBasePixel():o.getPixelForValue(l,e,d);t._xScale=s,t._yScale=o,t._options=u,t._datasetIndex=d,t._index=e,t._model={backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,hitRadius:u.hitRadius,pointStyle:u.pointStyle,rotation:u.rotation,radius:n?0:u.radius,skip:i.skip||isNaN(c)||isNaN(f),x:c,y:f},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Bt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Bt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Bt(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l=s.data[e],d={},c={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},f=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(n=0,a=f.length;n<a;++n)d[r=f[n]]=Yt([o[r],s[r],u[r]],c,e);return d.radius=Yt([o.radius,l?l.r:void 0,s.radius,u.radius],c,e),d}}),Ut=dt.options.resolve,Wt=dt.valueOrDefault;ot._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,a=n.datasets,r=n.labels;if(a.length)for(var i=0;i<a[0].data.length;++i)e.push('<li><span style="background-color:'+a[0].backgroundColor[i]+'"></span>'),r[i]&&e.push(r[i]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,a){var r=t.getDatasetMeta(0),i=e.datasets[0],s=r.data[a],o=s&&s.custom||{},u=t.options.elements.arc;return{text:n,fillStyle:Ut([o.backgroundColor,i.backgroundColor,u.backgroundColor],void 0,a),strokeStyle:Ut([o.borderColor,i.borderColor,u.borderColor],void 0,a),lineWidth:Ut([o.borderWidth,i.borderWidth,u.borderWidth],void 0,a),hidden:isNaN(i.data[a])||r.data[a].hidden,index:a}})):[]}},onClick:function(t,e){var n,a,r,i=e.index,s=this.chart;for(n=0,a=(s.data.datasets||[]).length;n<a;++n)(r=s.getDatasetMeta(n)).data[i]&&(r.data[i].hidden=!r.data[i].hidden);s.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],a=": "+e.datasets[t.datasetIndex].data[t.index];return dt.isArray(n)?(n=n.slice())[0]+=a:n+=a,n}}}});var Kt=Tt.extend({dataElementType:qt.Arc,linkScales:dt.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,a=this,r=a.chart,i=r.chartArea,s=r.options,o=i.right-i.left,u=i.bottom-i.top,l=Math.min(o,u),d={x:0,y:0},c=a.getMeta(),f=c.data,h=s.cutoutPercentage,g=s.circumference,p=a._getRingWeight(a.index);if(g<2*Math.PI){var b=s.rotation%(2*Math.PI),m=(b+=2*Math.PI*(b>=Math.PI?-1:b<-Math.PI?1:0))+g,y={x:Math.cos(b),y:Math.sin(b)},v={x:Math.cos(m),y:Math.sin(m)},x=b<=0&&m>=0||b<=2*Math.PI&&2*Math.PI<=m,_=b<=.5*Math.PI&&.5*Math.PI<=m||b<=2.5*Math.PI&&2.5*Math.PI<=m,T=b<=-Math.PI&&-Math.PI<=m||b<=Math.PI&&Math.PI<=m,O=b<=.5*-Math.PI&&.5*-Math.PI<=m||b<=1.5*Math.PI&&1.5*Math.PI<=m,w=h/100,S={x:T?-1:Math.min(y.x*(y.x<0?1:w),v.x*(v.x<0?1:w)),y:O?-1:Math.min(y.y*(y.y<0?1:w),v.y*(v.y<0?1:w))},I={x:x?1:Math.max(y.x*(y.x>0?1:w),v.x*(v.x>0?1:w)),y:_?1:Math.max(y.y*(y.y>0?1:w),v.y*(v.y>0?1:w))},N={width:.5*(I.x-S.x),height:.5*(I.y-S.y)};l=Math.min(o/N.width,u/N.height),d={x:-.5*(I.x+S.x),y:-.5*(I.y+S.y)}}for(e=0,n=f.length;e<n;++e)f[e]._options=a._resolveElementOptions(f[e],e);for(r.borderWidth=a.getMaxBorderWidth(),r.outerRadius=Math.max((l-r.borderWidth)/2,0),r.innerRadius=Math.max(h?r.outerRadius/100*h:0,0),r.radiusLength=(r.outerRadius-r.innerRadius)/(a._getVisibleDatasetWeightTotal()||1),r.offsetX=d.x*r.outerRadius,r.offsetY=d.y*r.outerRadius,c.total=a.calculateTotal(),a.outerRadius=r.outerRadius-r.radiusLength*a._getRingWeightOffset(a.index),a.innerRadius=Math.max(a.outerRadius-r.radiusLength*p,0),e=0,n=f.length;e<n;++e)a.updateElement(f[e],e,t)},updateElement:function(t,e,n){var a=this,r=a.chart,i=r.chartArea,s=r.options,o=s.animation,u=(i.left+i.right)/2,l=(i.top+i.bottom)/2,d=s.rotation,c=s.rotation,f=a.getDataset(),h=n&&o.animateRotate||t.hidden?0:a.calculateCircumference(f.data[e])*(s.circumference/(2*Math.PI)),g=t._options||{};dt.extend(t,{_datasetIndex:a.index,_index:e,_model:{backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,borderAlign:g.borderAlign,x:u+r.offsetX,y:l+r.offsetY,startAngle:d,endAngle:c,circumference:h,outerRadius:n&&o.animateScale?0:a.outerRadius,innerRadius:n&&o.animateScale?0:a.innerRadius,label:dt.valueAtIndexOrDefault(f.label,e,r.data.labels[e])}});var p=t._model;n&&o.animateRotate||(p.startAngle=0===e?s.rotation:a.getMeta().data[e-1]._model.endAngle,p.endAngle=p.startAngle+p.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),a=0;return dt.each(n.data,(function(n,r){t=e.data[r],isNaN(t)||n.hidden||(a+=Math.abs(t))})),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,a,r,i,s,o,u,l=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(a=d.getDatasetMeta(e)).data,e!==this.index&&(i=a.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)r=t[e],"inner"!==(s=i?i._resolveElementOptions(r,e):r._options).borderAlign&&(l=(u=s.hoverBorderWidth)>(l=(o=s.borderWidth)>l?o:l)?u:l);return l},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Wt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=this.getDataset(),o=t.custom||{},u=i.options.elements.arc,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=Ut([o[r],s[r],u[r]],d,e);return l},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Wt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});ot._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var $t=zt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Jt=dt.valueOrDefault,Zt=dt.options.resolve,Qt=dt.canvas._isPointInArea;function Xt(t,e){return Jt(t.showLine,e.showLines)}ot._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var te=Tt.extend({datasetElementType:qt.Line,dataElementType:qt.Point,update:function(t){var e,n,a=this,r=a.getMeta(),i=r.dataset,s=r.data||[],o=a.getScaleForId(r.yAxisID),u=a.getDataset(),l=Xt(u,a.chart.options);for(l&&(void 0!==u.tension&&void 0===u.lineTension&&(u.lineTension=u.tension),i._scale=o,i._datasetIndex=a.index,i._children=s,i._model=a._resolveLineOptions(i),i.pivot()),e=0,n=s.length;e<n;++e)a.updateElement(s[e],e,t);for(l&&0!==i._model.tension&&a.updateBezierControlPoints(),e=0,n=s.length;e<n;++e)s[e].pivot()},updateElement:function(t,e,n){var a,r,i=this,s=i.getMeta(),o=t.custom||{},u=i.getDataset(),l=i.index,d=u.data[e],c=i.getScaleForId(s.yAxisID),f=i.getScaleForId(s.xAxisID),h=s.dataset._model,g=i._resolvePointOptions(t,e);a=f.getPixelForValue("object"==typeof d?d:NaN,e,l),r=n?c.getBasePixel():i.calculatePointY(d,e,l),t._xScale=f,t._yScale=c,t._options=g,t._datasetIndex=l,t._index=e,t._model={x:a,y:r,skip:o.skip||isNaN(a)||isNaN(r),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Jt(o.tension,h?h.tension:0),steppedLine:!!h&&h.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},f=Object.keys(c);for(n=0,a=f.length;n<a;++n)l[r=f[n]]=Zt([o[r],s[c[r]],s[r],u[r]],d,e);return l},_resolveLineOptions:function(t){var e,n,a,r=this.chart,i=r.data.datasets[this.index],s=t.custom||{},o=r.options,u=o.elements.line,l={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,n=d.length;e<n;++e)l[a=d[e]]=Zt([s[a],i[a],u[a]]);return l.spanGaps=Jt(i.spanGaps,o.spanGaps),l.tension=Jt(i.lineTension,u.tension),l.steppedLine=Zt([s.steppedLine,i.steppedLine,u.stepped]),l},calculatePointY:function(t,e,n){var a,r,i,s=this.chart,o=this.getMeta(),u=this.getScaleForId(o.yAxisID),l=0,d=0;if(u.options.stacked){for(a=0;a<n;a++)if(r=s.data.datasets[a],"line"===(i=s.getDatasetMeta(a)).type&&i.yAxisID===u.id&&s.isDatasetVisible(a)){var c=Number(u.getRightValue(r.data[e]));c<0?d+=c||0:l+=c||0}var f=Number(u.getRightValue(t));return u.getPixelForValue(f<0?d+f:l+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,a,r=this.chart,i=this.getMeta(),s=i.dataset._model,o=r.chartArea,u=i.data||[];function l(t,e,n){return Math.max(Math.min(t,n),e)}if(s.spanGaps&&(u=u.filter((function(t){return!t._model.skip}))),"monotone"===s.cubicInterpolationMode)dt.splineCurveMonotone(u);else for(t=0,e=u.length;t<e;++t)n=u[t]._model,a=dt.splineCurve(dt.previousItem(u,t)._model,n,dt.nextItem(u,t)._model,s.tension),n.controlPointPreviousX=a.previous.x,n.controlPointPreviousY=a.previous.y,n.controlPointNextX=a.next.x,n.controlPointNextY=a.next.y;if(r.options.elements.line.capBezierPoints)for(t=0,e=u.length;t<e;++t)Qt(n=u[t]._model,o)&&(t>0&&Qt(u[t-1]._model,o)&&(n.controlPointPreviousX=l(n.controlPointPreviousX,o.left,o.right),n.controlPointPreviousY=l(n.controlPointPreviousY,o.top,o.bottom)),t<u.length-1&&Qt(u[t+1]._model,o)&&(n.controlPointNextX=l(n.controlPointNextX,o.left,o.right),n.controlPointNextY=l(n.controlPointNextY,o.top,o.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),a=n.data||[],r=e.chartArea,i=a.length,s=0;for(Xt(this.getDataset(),e.options)&&(dt.canvas.clipArea(e.ctx,{left:r.left,right:r.right,top:r.top-(t=(n.dataset._model.borderWidth||0)/2),bottom:r.bottom+t}),n.dataset.draw(),dt.canvas.unclipArea(e.ctx));s<i;++s)a[s].draw(r)},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Jt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Jt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Jt(n.hoverBorderWidth,n.borderWidth),e.radius=Jt(n.hoverRadius,n.radius)}}),ee=dt.options.resolve;ot._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,a=n.datasets,r=n.labels;if(a.length)for(var i=0;i<a[0].data.length;++i)e.push('<li><span style="background-color:'+a[0].backgroundColor[i]+'"></span>'),r[i]&&e.push(r[i]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,a){var r=t.getDatasetMeta(0),i=e.datasets[0],s=r.data[a].custom||{},o=t.options.elements.arc;return{text:n,fillStyle:ee([s.backgroundColor,i.backgroundColor,o.backgroundColor],void 0,a),strokeStyle:ee([s.borderColor,i.borderColor,o.borderColor],void 0,a),lineWidth:ee([s.borderWidth,i.borderWidth,o.borderWidth],void 0,a),hidden:isNaN(i.data[a])||r.data[a].hidden,index:a}})):[]}},onClick:function(t,e){var n,a,r,i=e.index,s=this.chart;for(n=0,a=(s.data.datasets||[]).length;n<a;++n)(r=s.getDatasetMeta(n)).data[i].hidden=!r.data[i].hidden;s.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var ne=Tt.extend({dataElementType:qt.Arc,linkScales:dt.noop,update:function(t){var e,n,a,r=this,i=r.getDataset(),s=r.getMeta(),o=r.chart.options.startAngle||0,u=r._starts=[],l=r._angles=[],d=s.data;for(r._updateRadius(),s.count=r.countVisibleElements(),e=0,n=i.data.length;e<n;e++)u[e]=o,a=r._computeAngle(e),l[e]=a,o+=a;for(e=0,n=d.length;e<n;++e)d[e]._options=r._resolveElementOptions(d[e],e),r.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,a=e.options,r=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(r/2,0),e.innerRadius=Math.max(a.cutoutPercentage?e.outerRadius/100*a.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var a=this,r=a.chart,i=a.getDataset(),s=r.options,o=s.animation,u=r.scale,l=r.data.labels,d=u.xCenter,c=u.yCenter,f=s.startAngle,h=t.hidden?0:u.getDistanceFromCenterForValue(i.data[e]),g=a._starts[e],p=g+(t.hidden?0:a._angles[e]),b=o.animateScale?0:u.getDistanceFromCenterForValue(i.data[e]),m=t._options||{};dt.extend(t,{_datasetIndex:a.index,_index:e,_scale:u,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:d,y:c,innerRadius:0,outerRadius:n?b:h,startAngle:n&&o.animateRotate?f:g,endAngle:n&&o.animateRotate?f:p,label:dt.valueAtIndexOrDefault(l,e,l[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return dt.each(e.data,(function(e,a){isNaN(t.data[a])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor,r=dt.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=r(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=r(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=r(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=this.getDataset(),o=t.custom||{},u=i.options.elements.arc,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=ee([o[r],s[r],u[r]],d,e);return l},_computeAngle:function(t){var e=this,n=this.getMeta().count,a=e.getDataset(),r=e.getMeta();return isNaN(a.data[t])||r.data[t].hidden?0:ee([e.chart.options.elements.arc.angle,2*Math.PI/n],{chart:e.chart,dataIndex:t,dataset:a,datasetIndex:e.index},t)}});ot._set("pie",dt.clone(ot.doughnut)),ot._set("pie",{cutoutPercentage:0});var ae=Kt,re=dt.valueOrDefault,ie=dt.options.resolve;ot._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var se=Tt.extend({datasetElementType:qt.Line,dataElementType:qt.Point,linkScales:dt.noop,update:function(t){var e,n,a=this,r=a.getMeta(),i=r.dataset,s=r.data||[],o=a.chart.scale,u=a.getDataset();for(void 0!==u.tension&&void 0===u.lineTension&&(u.lineTension=u.tension),i._scale=o,i._datasetIndex=a.index,i._children=s,i._loop=!0,i._model=a._resolveLineOptions(i),i.pivot(),e=0,n=s.length;e<n;++e)a.updateElement(s[e],e,t);for(a.updateBezierControlPoints(),e=0,n=s.length;e<n;++e)s[e].pivot()},updateElement:function(t,e,n){var a=this,r=t.custom||{},i=a.getDataset(),s=a.chart.scale,o=s.getPointPositionForValue(e,i.data[e]),u=a._resolvePointOptions(t,e),l=a.getMeta().dataset._model,d=n?s.xCenter:o.x,c=n?s.yCenter:o.y;t._scale=s,t._options=u,t._datasetIndex=a.index,t._index=e,t._model={x:d,y:c,skip:r.skip||isNaN(d)||isNaN(c),radius:u.radius,pointStyle:u.pointStyle,rotation:u.rotation,backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,tension:re(r.tension,l?l.tension:0),hitRadius:u.hitRadius}},_resolvePointOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},f=Object.keys(c);for(n=0,a=f.length;n<a;++n)l[r=f[n]]=ie([o[r],s[c[r]],s[r],u[r]],d,e);return l},_resolveLineOptions:function(t){var e,n,a,r=this.chart,i=r.data.datasets[this.index],s=t.custom||{},o=r.options.elements.line,u={},l=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,n=l.length;e<n;++e)u[a=l[e]]=ie([s[a],i[a],o[a]]);return u.tension=re(i.lineTension,o.tension),u},updateBezierControlPoints:function(){var t,e,n,a,r=this.getMeta(),i=this.chart.chartArea,s=r.data||[];function o(t,e,n){return Math.max(Math.min(t,n),e)}for(t=0,e=s.length;t<e;++t)n=s[t]._model,a=dt.splineCurve(dt.previousItem(s,t,!0)._model,n,dt.nextItem(s,t,!0)._model,n.tension),n.controlPointPreviousX=o(a.previous.x,i.left,i.right),n.controlPointPreviousY=o(a.previous.y,i.top,i.bottom),n.controlPointNextX=o(a.next.x,i.left,i.right),n.controlPointNextY=o(a.next.y,i.top,i.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=re(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=re(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=re(n.hoverBorderWidth,n.borderWidth),e.radius=re(n.hoverRadius,n.radius)}});ot._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var oe={bar:zt,bubble:Ht,doughnut:Kt,horizontalBar:$t,line:te,polarArea:ne,pie:ae,radar:se,scatter:te};function ue(t,e){return t.native?{x:t.x,y:t.y}:dt.getRelativePosition(t,e)}function le(t,e){var n,a,r,i,s;for(a=0,i=t.data.datasets.length;a<i;++a)if(t.isDatasetVisible(a))for(r=0,s=(n=t.getDatasetMeta(a)).data.length;r<s;++r){var o=n.data[r];o._view.skip||e(o)}}function de(t,e){var n=[];return le(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ce(t,e,n,a){var r=Number.POSITIVE_INFINITY,i=[];return le(t,(function(t){if(!n||t.inRange(e.x,e.y)){var s=t.getCenterPoint(),o=a(e,s);o<r?(i=[t],r=o):o===r&&i.push(t)}})),i}function fe(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,a){var r=e?Math.abs(t.x-a.x):0,i=n?Math.abs(t.y-a.y):0;return Math.sqrt(Math.pow(r,2)+Math.pow(i,2))}}function he(t,e,n){var a=ue(e,t);n.axis=n.axis||"x";var r=fe(n.axis),i=n.intersect?de(t,a):ce(t,a,!1,r),s=[];return i.length?(t.data.datasets.forEach((function(e,n){if(t.isDatasetVisible(n)){var a=t.getDatasetMeta(n).data[i[0]._index];a&&!a._view.skip&&s.push(a)}})),s):[]}var ge={modes:{single:function(t,e){var n=ue(e,t),a=[];return le(t,(function(t){if(t.inRange(n.x,n.y))return a.push(t),a})),a.slice(0,1)},label:he,index:he,dataset:function(t,e,n){var a=ue(e,t);n.axis=n.axis||"xy";var r=fe(n.axis),i=n.intersect?de(t,a):ce(t,a,!1,r);return i.length>0&&(i=t.getDatasetMeta(i[0]._datasetIndex).data),i},"x-axis":function(t,e){return he(t,e,{intersect:!1})},point:function(t,e){return de(t,ue(e,t))},nearest:function(t,e,n){var a=ue(e,t);n.axis=n.axis||"xy";var r=fe(n.axis);return ce(t,a,n.intersect,r)},x:function(t,e,n){var a=ue(e,t),r=[],i=!1;return le(t,(function(t){t.inXRange(a.x)&&r.push(t),t.inRange(a.x,a.y)&&(i=!0)})),n.intersect&&!i&&(r=[]),r},y:function(t,e,n){var a=ue(e,t),r=[],i=!1;return le(t,(function(t){t.inYRange(a.y)&&r.push(t),t.inRange(a.x,a.y)&&(i=!0)})),n.intersect&&!i&&(r=[]),r}}};function pe(t,e){return dt.where(t,(function(t){return t.position===e}))}function be(t,e){t.forEach((function(t,e){return t._tmpIndex_=e,t})),t.sort((function(t,n){var a=e?n:t,r=e?t:n;return a.weight===r.weight?a._tmpIndex_-r._tmpIndex_:a.weight-r.weight})),t.forEach((function(t){delete t._tmpIndex_}))}function me(t,e){dt.each(t,(function(t){e[t.position]+=t.isHorizontal()?t.height:t.width}))}ot._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ye,ve={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var a,r=["fullWidth","position","weight"],i=r.length,s=0;s<i;++s)n.hasOwnProperty(a=r[s])&&(e[a]=n[a])},update:function(t,e,n){if(t){var a=dt.options.toPadding((t.options.layout||{}).padding),r=a.left,i=a.right,s=a.top,o=a.bottom,u=pe(t.boxes,"left"),l=pe(t.boxes,"right"),d=pe(t.boxes,"top"),c=pe(t.boxes,"bottom"),f=pe(t.boxes,"chartArea");be(u,!0),be(l,!1),be(d,!0),be(c,!1);var h,g=u.concat(l),p=d.concat(c),b=g.concat(p),m=e-r-i,y=n-s-o,v=(e-m/2)/g.length,x=m,_=y,T={top:s,left:r,bottom:o,right:i},O=[];dt.each(b,(function(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?m:x,y/2),_-=e.height):(e=t.update(v,_),x-=e.width),O.push({horizontal:n,width:e.width,box:t})})),h=function(t){var e=0,n=0,a=0,r=0;return dt.each(t,(function(t){if(t.getPadding){var i=t.getPadding();e=Math.max(e,i.top),n=Math.max(n,i.left),a=Math.max(a,i.bottom),r=Math.max(r,i.right)}})),{top:e,left:n,bottom:a,right:r}}(b),dt.each(g,A),me(g,T),dt.each(p,A),me(p,T),dt.each(g,(function(t){var e=dt.findNextWhere(O,(function(e){return e.box===t}));e&&t.update(e.width,_,{left:0,right:0,top:T.top,bottom:T.bottom})})),me(b,T={top:s,left:r,bottom:o,right:i});var w=Math.max(h.left-T.left,0);T.left+=w,T.right+=Math.max(h.right-T.right,0);var S=Math.max(h.top-T.top,0);T.top+=S,T.bottom+=Math.max(h.bottom-T.bottom,0);var I=n-T.top-T.bottom,N=e-T.left-T.right;N===x&&I===_||(dt.each(g,(function(t){t.height=I})),dt.each(p,(function(t){t.fullWidth||(t.width=N)})),_=I,x=N);var C=r+w,R=s+S;dt.each(u.concat(d),k),C+=x,R+=_,dt.each(l,k),dt.each(c,k),t.chartArea={left:T.left,top:T.top,right:T.left+x,bottom:T.top+_},dt.each(f,(function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(x,_)}))}function A(t){var e=dt.findNextWhere(O,(function(e){return e.box===t}));if(e)if(e.horizontal){var n={left:Math.max(T.left,h.left),right:Math.max(T.right,h.right),top:0,bottom:0};t.update(t.fullWidth?m:x,y/2,n)}else t.update(e.width,_)}function k(t){t.isHorizontal()?(t.left=t.fullWidth?r:T.left,t.right=t.fullWidth?e-i:T.left+x,t.top=R,t.bottom=R+t.height,R=t.bottom):(t.left=C,t.right=C+t.width,t.top=T.top,t.bottom=T.top+_,C=t.right)}}},xe=(ye=Object.freeze({default:"/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"}))&&ye.default||ye,_e=["animationstart","webkitAnimationStart"],Te={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function Oe(t,e){var n=dt.getStyle(t,e),a=n&&n.match(/^(\d+)(\.\d+)?px$/);return a?Number(a[1]):void 0}var we=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(n){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,we)}function Ie(t,e,n){t.removeEventListener(e,n,we)}function Ne(t,e,n,a,r){return{type:t,chart:e,native:r||null,x:void 0!==n?n:null,y:void 0!==a?a:null}}function Ce(t){var e=document.createElement("div");return e.className=t||"",e}var Re={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){this._loaded||(this._loaded=!0,this.disableCSSInjection||function(t,e){var n=t._style||document.createElement("style");t._style||(t._style=n,e="/* Chart.js */\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}(this,xe))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),n&&n.canvas===t?(function(t,e){var n=t.style,a=t.getAttribute("height"),r=t.getAttribute("width");if(t.$chartjs={initial:{height:a,width:r,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===r||""===r){var i=Oe(t,"width");void 0!==i&&(t.width=i)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var s=Oe(t,"height");void 0!==i&&(t.height=s)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e.$chartjs){var n=e.$chartjs.initial;["height","width"].forEach((function(t){var a=n[t];dt.isNullOrUndef(a)?e.removeAttribute(t):e.setAttribute(t,a)})),dt.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e.$chartjs}},addEventListener:function(t,e,n){var a=t.canvas;if("resize"!==e){var r=n.$chartjs||(n.$chartjs={});Se(a,e,(r.proxies||(r.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=Te[t.type]||t.type,a=dt.getRelativePosition(t,e);return Ne(n,e,a.x,a.y,t)}(e,t))})}else!function(t,e,n){var a,r,i,s,o=t.$chartjs||(t.$chartjs={}),u=o.resizer=function(t){var e=Ce("chartjs-size-monitor"),n=Ce("chartjs-size-monitor-expand"),a=Ce("chartjs-size-monitor-shrink");n.appendChild(Ce()),a.appendChild(Ce()),e.appendChild(n),e.appendChild(a),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,a.scrollLeft=1e6,a.scrollTop=1e6};var r=function(){e._reset(),t()};return Se(n,"scroll",r.bind(n,"expand")),Se(a,"scroll",r.bind(a,"shrink")),e}((a=function(){if(o.resizer){var a=n.options.maintainAspectRatio&&t.parentNode,r=a?a.clientWidth:0;e(Ne("resize",n)),a&&a.clientWidth<r&&n.canvas&&e(Ne("resize",n))}},i=!1,s=[],function(){s=Array.prototype.slice.call(arguments),r=r||this,i||(i=!0,dt.requestAnimFrame.call(window,(function(){i=!1,a.apply(r,s)})))}));!function(t,e){var n=t.$chartjs||(t.$chartjs={}),a=n.renderProxy=function(t){"chartjs-render-animation"===t.animationName&&e()};dt.each(_e,(function(e){Se(t,e,a)})),n.reflow=!!t.offsetParent,t.classList.add("chartjs-render-monitor")}(t,(function(){if(o.resizer){var e=t.parentNode;e&&e!==u.parentNode&&e.insertBefore(u,e.firstChild),u._reset()}}))}(a,n,t)},removeEventListener:function(t,e,n){var a,r,i,s=t.canvas;if("resize"!==e){var o=((n.$chartjs||{}).proxies||{})[t.id+"_"+e];o&&Ie(s,e,o)}else i=(r=(a=s).$chartjs||{}).resizer,delete r.resizer,function(t){var e=t.$chartjs||{},n=e.renderProxy;n&&(dt.each(_e,(function(e){Ie(t,e,n)})),delete e.renderProxy),t.classList.remove("chartjs-render-monitor")}(a),i&&i.parentNode&&i.parentNode.removeChild(i)}};dt.addEvent=Se,dt.removeEvent=Ie;var Ae=dt.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Re._enabled?Re:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}});ot._set("global",{plugins:{}});var ke={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var a,r,i,s,o,u=this.descriptors(t),l=u.length;for(a=0;a<l;++a)if("function"==typeof(o=(i=(r=u[a]).plugin)[e])&&((s=[t].concat(n||[])).push(r.options),!1===o.apply(i,s)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],a=[],r=t&&t.config||{},i=r.options&&r.options.plugins||{};return this._plugins.concat(r.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,r=i[e];!1!==r&&(!0===r&&(r=dt.clone(ot.global.plugins[e])),n.push(t),a.push({plugin:t,options:r||{}}))}})),e.descriptors=a,e.id=this._cacheId,a},_invalidate:function(t){delete t.$plugins}},Ee={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=dt.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?dt.merge({},[ot.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=dt.extend(this.defaults[t],e))},addScalesToLayout:function(t){dt.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ve.addBox(t,e)}))}},Le=dt.valueOrDefault;ot._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:dt.noop,title:function(t,e){var n="",a=e.labels,r=a?a.length:0;if(t.length>0){var i=t[0];i.label?n=i.label:i.xLabel?n=i.xLabel:r>0&&i.index<r&&(n=a[i.index])}return n},afterTitle:dt.noop,beforeBody:dt.noop,beforeLabel:dt.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),dt.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:dt.noop,afterBody:dt.noop,beforeFooter:dt.noop,footer:dt.noop,afterFooter:dt.noop}}});var De={average:function(t){if(!t.length)return!1;var e,n,a=0,r=0,i=0;for(e=0,n=t.length;e<n;++e){var s=t[e];if(s&&s.hasValue()){var o=s.tooltipPosition();a+=o.x,r+=o.y,++i}}return{x:a/i,y:r/i}},nearest:function(t,e){var n,a,r,i=e.x,s=e.y,o=Number.POSITIVE_INFINITY;for(n=0,a=t.length;n<a;++n){var u=t[n];if(u&&u.hasValue()){var l=u.getCenterPoint(),d=dt.distanceBetweenPoints(e,l);d<o&&(o=d,r=u)}}if(r){var c=r.tooltipPosition();i=c.x,s=c.y}return{x:i,y:s}}};function Pe(t,e){return e&&(dt.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Me(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function qe(t){var e=ot.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Le(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Le(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Le(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Le(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Le(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Le(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Le(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Le(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Le(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function je(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Fe(t){return Pe([],Me(t))}var Ge=gt.extend({initialize:function(){this._model=qe(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,a=n.beforeTitle.apply(t,arguments),r=n.title.apply(t,arguments),i=n.afterTitle.apply(t,arguments),s=[];return s=Pe(s,Me(a)),s=Pe(s,Me(r)),Pe(s,Me(i))},getBeforeBody:function(){return Fe(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,a=n._options.callbacks,r=[];return dt.each(t,(function(t){var i={before:[],lines:[],after:[]};Pe(i.before,Me(a.beforeLabel.call(n,t,e))),Pe(i.lines,a.label.call(n,t,e)),Pe(i.after,Me(a.afterLabel.call(n,t,e))),r.push(i)})),r},getAfterBody:function(){return Fe(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),r=e.afterFooter.apply(t,arguments),i=[];return i=Pe(i,Me(n)),i=Pe(i,Me(a)),Pe(i,Me(r))},update:function(t){var e,n,a,r,i,s,o,u,l,d,c=this,f=c._options,h=c._model,g=c._model=qe(f),p=c._active,b=c._data,m={xAlign:h.xAlign,yAlign:h.yAlign},y={x:h.x,y:h.y},v={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(p.length){g.opacity=1;var _=[],T=[];x=De[f.position].call(c,p,c._eventPosition);var O=[];for(e=0,n=p.length;e<n;++e)O.push((r=void 0,i=void 0,u=void 0,l=void 0,d=void 0,r=(a=p[e])._xScale,i=a._yScale||a._scale,s=a._index,l=(u=a._chart.getDatasetMeta(o=a._datasetIndex).controller)._getIndexScale(),d=u._getValueScale(),{xLabel:r?r.getLabelForIndex(s,o):"",yLabel:i?i.getLabelForIndex(s,o):"",label:l?""+l.getLabelForIndex(s,o):"",value:d?""+d.getLabelForIndex(s,o):"",index:s,datasetIndex:o,x:a._model.x,y:a._model.y}));f.filter&&(O=O.filter((function(t){return f.filter(t,b)}))),f.itemSort&&(O=O.sort((function(t,e){return f.itemSort(t,e,b)}))),dt.each(O,(function(t){_.push(f.callbacks.labelColor.call(c,t,c._chart)),T.push(f.callbacks.labelTextColor.call(c,t,c._chart))})),g.title=c.getTitle(O,b),g.beforeBody=c.getBeforeBody(O,b),g.body=c.getBody(O,b),g.afterBody=c.getAfterBody(O,b),g.footer=c.getFooter(O,b),g.x=x.x,g.y=x.y,g.caretPadding=f.caretPadding,g.labelColors=_,g.labelTextColors=T,g.dataPoints=O,v=function(t,e){var n=t._chart.ctx,a=2*e.yPadding,r=0,i=e.body,s=i.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0),o=e.title.length,u=e.footer.length,l=e.titleFontSize,d=e.bodyFontSize,c=e.footerFontSize;a+=o*l,a+=o?(o-1)*e.titleSpacing:0,a+=o?e.titleMarginBottom:0,a+=(s+=e.beforeBody.length+e.afterBody.length)*d,a+=s?(s-1)*e.bodySpacing:0,a+=u?e.footerMarginTop:0,a+=u*c,a+=u?(u-1)*e.footerSpacing:0;var f=0,h=function(t){r=Math.max(r,n.measureText(t).width+f)};return n.font=dt.fontString(l,e._titleFontStyle,e._titleFontFamily),dt.each(e.title,h),n.font=dt.fontString(d,e._bodyFontStyle,e._bodyFontFamily),dt.each(e.beforeBody.concat(e.afterBody),h),f=e.displayColors?d+2:0,dt.each(i,(function(t){dt.each(t.before,h),dt.each(t.lines,h),dt.each(t.after,h)})),f=0,n.font=dt.fontString(c,e._footerFontStyle,e._footerFontFamily),dt.each(e.footer,h),{width:r+=2*e.xPadding,height:a}}(this,g),y=function(t,e,n,a){var r=t.x,i=t.y,s=t.caretPadding,o=n.xAlign,u=n.yAlign,l=t.caretSize+s,d=t.cornerRadius+s;return"right"===o?r-=e.width:"center"===o&&((r-=e.width/2)+e.width>a.width&&(r=a.width-e.width),r<0&&(r=0)),"top"===u?i+=l:i-="bottom"===u?e.height+l:e.height/2,"center"===u?"left"===o?r+=l:"right"===o&&(r-=l):"left"===o?r-=d:"right"===o&&(r+=d),{x:r,y:i}}(g,v,m=function(t,e){var n,a,r,i,s,o=t._model,u=t._chart,l=t._chart.chartArea,d="center",c="center";o.y<e.height?c="top":o.y>u.height-e.height&&(c="bottom");var f=(l.left+l.right)/2,h=(l.top+l.bottom)/2;"center"===c?(n=function(t){return t<=f},a=function(t){return t>f}):(n=function(t){return t<=e.width/2},a=function(t){return t>=u.width-e.width/2}),r=function(t){return t+e.width+o.caretSize+o.caretPadding>u.width},i=function(t){return t-e.width-o.caretSize-o.caretPadding<0},s=function(t){return t<=h?"top":"bottom"},n(o.x)?(d="left",r(o.x)&&(d="center",c=s(o.y))):a(o.x)&&(d="right",i(o.x)&&(d="center",c=s(o.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:c}}(this,v),c._chart)}else g.opacity=0;return g.xAlign=m.xAlign,g.yAlign=m.yAlign,g.x=y.x,g.y=y.y,g.width=v.width,g.height=v.height,g.caretX=x.x,g.caretY=x.y,c._model=g,t&&f.custom&&f.custom.call(c,g),c},drawCaret:function(t,e){var n=this._chart.ctx,a=this.getCaretPosition(t,e,this._view);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var a,r,i,s,o,u,l=n.caretSize,d=n.cornerRadius,c=n.xAlign,f=n.yAlign,h=t.x,g=t.y,p=e.width,b=e.height;if("center"===f)o=g+b/2,"left"===c?(r=(a=h)-l,i=a,s=o+l,u=o-l):(r=(a=h+p)+l,i=a,s=o-l,u=o+l);else if("left"===c?(a=(r=h+d+l)-l,i=r+l):"right"===c?(a=(r=h+p-d-l)-l,i=r+l):(a=(r=n.caretX)-l,i=r+l),"top"===f)o=(s=g)-l,u=s;else{o=(s=g+b)+l,u=s;var m=i;i=a,a=m}return{x1:a,x2:r,x3:i,y1:s,y2:o,y3:u}},drawTitle:function(t,e,n){var a=e.title;if(a.length){t.x=je(e,e._titleAlign),n.textAlign=e._titleAlign,n.textBaseline="top";var r,i,s=e.titleFontSize,o=e.titleSpacing;for(n.fillStyle=e.titleFontColor,n.font=dt.fontString(s,e._titleFontStyle,e._titleFontFamily),r=0,i=a.length;r<i;++r)n.fillText(a[r],t.x,t.y),t.y+=s+o,r+1===a.length&&(t.y+=e.titleMarginBottom-o)}},drawBody:function(t,e,n){var a,r=e.bodyFontSize,i=e.bodySpacing,s=e._bodyAlign,o=e.body,u=e.displayColors,l=e.labelColors,d=0,c=u?je(e,"left"):0;n.textAlign=s,n.textBaseline="top",n.font=dt.fontString(r,e._bodyFontStyle,e._bodyFontFamily),t.x=je(e,s);var f=function(e){n.fillText(e,t.x+d,t.y),t.y+=r+i};n.fillStyle=e.bodyFontColor,dt.each(e.beforeBody,f),d=u&&"right"!==s?"center"===s?r/2+1:r+2:0,dt.each(o,(function(i,s){n.fillStyle=a=e.labelTextColors[s],dt.each(i.before,f),dt.each(i.lines,(function(i){u&&(n.fillStyle=e.legendColorBackground,n.fillRect(c,t.y,r,r),n.lineWidth=1,n.strokeStyle=l[s].borderColor,n.strokeRect(c,t.y,r,r),n.fillStyle=l[s].backgroundColor,n.fillRect(c+1,t.y+1,r-2,r-2),n.fillStyle=a),f(i)})),dt.each(i.after,f)})),d=0,dt.each(e.afterBody,f),t.y-=i},drawFooter:function(t,e,n){var a=e.footer;a.length&&(t.x=je(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=e._footerAlign,n.textBaseline="top",n.fillStyle=e.footerFontColor,n.font=dt.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),dt.each(a,(function(a){n.fillText(a,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing})))},drawBackground:function(t,e,n,a){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var r=e.xAlign,i=e.yAlign,s=t.x,o=t.y,u=a.width,l=a.height,d=e.cornerRadius;n.beginPath(),n.moveTo(s+d,o),"top"===i&&this.drawCaret(t,a),n.lineTo(s+u-d,o),n.quadraticCurveTo(s+u,o,s+u,o+d),"center"===i&&"right"===r&&this.drawCaret(t,a),n.lineTo(s+u,o+l-d),n.quadraticCurveTo(s+u,o+l,s+u-d,o+l),"bottom"===i&&this.drawCaret(t,a),n.lineTo(s+d,o+l),n.quadraticCurveTo(s,o+l,s,o+l-d),"center"===i&&"left"===r&&this.drawCaret(t,a),n.lineTo(s,o+d),n.quadraticCurveTo(s,o,s+d,o),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},a={x:e.x,y:e.y},r=Math.abs(e.opacity<.001)?0:e.opacity;this._options.enabled&&(e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length)&&(t.save(),t.globalAlpha=r,this.drawBackground(a,e,t,n),a.y+=e.yPadding,this.drawTitle(a,e,t),this.drawBody(a,e,t),this.drawFooter(a,e,t),t.restore())}},handleEvent:function(t){var e,n=this,a=n._options;return n._lastActive=n._lastActive||[],n._active="mouseout"===t.type?[]:n._chart.getElementsAtEventForMode(t,a.mode,a),(e=!dt.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(a.enabled||a.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}});Ge.positioners=De;var Ve=dt.valueOrDefault;function ze(){return dt.merge({},[].slice.call(arguments),{merger:function(t,e,n,a){if("xAxes"===t||"yAxes"===t){var r,i,s,o=n[t].length;for(e[t]||(e[t]=[]),r=0;r<o;++r)i=Ve((s=n[t][r]).type,"xAxes"===t?"category":"linear"),r>=e[t].length&&e[t].push({}),dt.merge(e[t][r],!e[t][r].type||s.type&&s.type!==e[t][r].type?[Ee.getScaleDefaults(i),s]:s)}else dt._merger(t,e,n,a)}})}function Be(){return dt.merge({},[].slice.call(arguments),{merger:function(t,e,n,a){var r=e[t]||{},i=n[t];"scales"===t?e[t]=ze(r,i):"scale"===t?e[t]=dt.merge(r,[Ee.getScaleDefaults(i.type),i]):dt._merger(t,e,n,a)}})}function Ye(t){var e=t.options;dt.each(t.scales,(function(e){ve.removeBox(t,e)})),e=Be(ot.global,ot[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function He(t){return"top"===t||"bottom"===t}ot._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ue=function(t,e){return this.construct(t,e),this};dt.extend(Ue.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Be(ot.global,ot[t.type],t.options||{}),t}(e);var a=Ae.acquireContext(t,e),r=a&&a.canvas,i=r&&r.height,s=r&&r.width;n.id=dt.uid(),n.ctx=a,n.canvas=r,n.config=e,n.width=s,n.height=i,n.aspectRatio=i?s/i:null,n.options=e.options,n._bufferedRender=!1,n.chart=n,n.controller=n,Ue.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),a&&r?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return ke.notify(t,"beforeInit"),dt.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),ke.notify(t,"afterInit"),t},clear:function(){return dt.canvas.clear(this),this},stop:function(){return mt.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,a=e.canvas,r=n.maintainAspectRatio&&e.aspectRatio||null,i=Math.max(0,Math.floor(dt.getMaximumWidth(a))),s=Math.max(0,Math.floor(r?i/r:dt.getMaximumHeight(a)));if((e.width!==i||e.height!==s)&&(a.width=e.width=i,a.height=e.height=s,a.style.width=i+"px",a.style.height=s+"px",dt.retinaScale(e,n.devicePixelRatio),!t)){var o={width:i,height:s};ke.notify(e,"resize",[o]),n.onResize&&n.onResize(e,o),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;dt.each(e.xAxes,(function(t,e){t.id=t.id||"x-axis-"+e})),dt.each(e.yAxes,(function(t,e){t.id=t.id||"y-axis-"+e})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},a=[],r=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(a=a.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&a.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),dt.each(a,(function(e){var a=e.options,i=a.id,s=Ve(a.type,e.dtype);He(a.position)!==He(e.dposition)&&(a.position=e.dposition),r[i]=!0;var o=null;if(i in n&&n[i].type===s)(o=n[i]).options=a,o.ctx=t.ctx,o.chart=t;else{var u=Ee.getScaleConstructor(s);if(!u)return;o=new u({id:i,type:s,options:a,ctx:t.ctx,chart:t}),n[o.id]=o}o.mergeTicksOptions(),e.isDefault&&(t.scale=o)})),dt.each(r,(function(t,e){t||delete n[e]})),t.scales=n,Ee.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return dt.each(t.data.datasets,(function(n,a){var r=t.getDatasetMeta(a),i=n.type||t.config.type;if(r.type&&r.type!==i&&(t.destroyDatasetMeta(a),r=t.getDatasetMeta(a)),r.type=i,r.controller)r.controller.updateIndex(a),r.controller.linkScales();else{var s=oe[r.type];if(void 0===s)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new s(t,a),e.push(r.controller)}}),t),e},resetElements:function(){var t=this;dt.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ye(e),ke._invalidate(e),!1!==ke.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var n=e.buildOrUpdateControllers();dt.each(e.data.datasets,(function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()}),e),e.updateLayout(),e.options.animation&&e.options.animation.duration&&dt.each(n,(function(t){t.reset()})),e.updateDatasets(),e.tooltip.initialize(),e.lastActive=[],ke.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){!1!==ke.notify(this,"beforeLayout")&&(ve.update(this,this.width,this.height),ke.notify(this,"afterScaleUpdate"),ke.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==ke.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);ke.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==ke.notify(this,"beforeDatasetUpdate",[n])&&(e.controller.update(),ke.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,a=Ve(t.duration,n&&n.duration),r=t.lazy;if(!1!==ke.notify(e,"beforeRender")){var i=function(t){ke.notify(e,"afterRender"),dt.callback(n&&n.onComplete,[t],e)};if(n&&a){var s=new bt({numSteps:a/16.66,easing:t.easing||n.easing,render:function(t,e){var n=e.currentStep,a=n/e.numSteps;t.draw((0,dt.easing.effects[e.easing])(a),a,n)},onAnimationProgress:n.onProgress,onAnimationComplete:i});mt.addAnimation(e,s,a,r)}else e.draw(),i(new bt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),dt.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==ke.notify(e,"beforeDraw",[t])&&(dt.each(e.boxes,(function(t){t.draw(e.chartArea)}),e),e.drawDatasets(t),e._drawTooltip(t),ke.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==ke.notify(e,"beforeDatasetsDraw",[t])){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);ke.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this.getDatasetMeta(t),a={meta:n,index:t,easingValue:e};!1!==ke.notify(this,"beforeDatasetDraw",[a])&&(n.controller.draw(e),ke.notify(this,"afterDatasetDraw",[a]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==ke.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),ke.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return ge.modes.single(this,t)},getElementsAtEvent:function(t){return ge.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ge.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var a=ge.modes[e];return"function"==typeof a?a(this,t,n):[]},getDatasetAtEvent:function(t){return ge.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],a=n._meta&&n._meta[e];a&&(a.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,a=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);a&&(n.unbindEvents(),dt.canvas.clear(n),Ae.releaseContext(n.ctx),n.canvas=null,n.ctx=null),ke.notify(n,"destroy"),delete Ue.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ge({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};dt.each(t.options.events,(function(a){Ae.addEventListener(t,a,n),e[a]=n})),t.options.responsive&&(n=function(){t.resize()},Ae.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,dt.each(e,(function(e,n){Ae.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var a,r,i,s=n?"setHoverStyle":"removeHoverStyle";for(r=0,i=t.length;r<i;++r)(a=t[r])&&this.getDatasetMeta(a._datasetIndex).controller[s](a)},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==ke.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var a=e.handleEvent(t);n&&(a=n._start?n.handleEvent(t):a|n.handleEvent(t)),ke.notify(e,"afterEvent",[t]);var r=e._bufferedRequest;return r?e.render(r):a&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,a=n.options||{},r=a.hover;return n.lastActive=n.lastActive||[],n.active="mouseout"===t.type?[]:n.getElementsAtEventForMode(t,r.mode,r),dt.callback(a.onHover||a.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||a.onClick&&a.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,r.mode,!1),n.active.length&&r.mode&&n.updateHoverStyle(n.active,r.mode,!0),e=!dt.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),Ue.instances={};var We=Ue;function Ke(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function $e(t){this.options=t||{}}Ue.Controller=Ue,Ue.types={},dt.configMerge=Be,dt.scaleMerge=ze,dt.extend($e.prototype,{formats:Ke,parse:Ke,format:Ke,add:Ke,diff:Ke,startOf:Ke,endOf:Ke,_create:function(t){return t}}),$e.override=function(t){dt.extend($e.prototype,t)};var Je={_date:$e},Ze={formatters:{values:function(t){return dt.isArray(t)?t:""+t},linear:function(t,e,n){var a=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var r=dt.log10(Math.abs(a)),i="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var s=dt.log10(Math.abs(t));i=t.toExponential(Math.floor(s)-Math.floor(r))}else{var o=-1*Math.floor(r);o=Math.max(Math.min(o,20),0),i=t.toFixed(o)}else i="0";return i},logarithmic:function(t,e,n){var a=t/Math.pow(10,Math.floor(dt.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===e||e===n.length-1?t.toExponential():""}}},Qe=dt.valueOrDefault,Xe=dt.valueAtIndexOrDefault;function tn(t){var e,n,a=[];for(e=0,n=t.length;e<n;++e)a.push(t[e].label);return a}function en(t,e,n){return dt.isArray(e)?dt.longestText(t,n,e):t.measureText(e).width}ot._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Ze.formatters.values,minor:{},major:{}}});var nn=gt.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){dt.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a,r,i,s,o,u,l=this;for(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=dt.extend({left:0,right:0,top:0,bottom:0},n),l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],o=l.afterBuildTicks(o)||o,l.beforeTickToLabelConversion(),i=l.convertTicksToLabels(o)||l.ticks,l.afterTickToLabelConversion(),l.ticks=i,a=0,r=i.length;a<r;++a)s=i[a],(u=o[a])?u.label=s:o.push(u={label:s,major:!1});return l._ticks=o,l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l.afterUpdate(),l.minSize},afterUpdate:function(){dt.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){dt.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){dt.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){dt.callback(this.options.beforeDataLimits,[this])},determineDataLimits:dt.noop,afterDataLimits:function(){dt.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){dt.callback(this.options.beforeBuildTicks,[this])},buildTicks:dt.noop,afterBuildTicks:function(t){var e=this;return dt.isArray(t)&&t.length?dt.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=dt.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){dt.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){dt.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){dt.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,n=t.options.ticks,a=tn(t._ticks),r=dt.options._parseFont(n);e.font=r.string;var i=n.minRotation||0;if(a.length&&t.options.display&&t.isHorizontal())for(var s,o=dt.longestText(e,r.string,a,t.longestTextCache),u=o,l=t.getPixelForTick(1)-t.getPixelForTick(0)-6;u>l&&i<n.maxRotation;){var d=dt.toRadians(i);if(s=Math.cos(d),Math.sin(d)*o>t.maxHeight){i--;break}i++,u=s*o}t.labelRotation=i},afterCalculateTickRotation:function(){dt.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){dt.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=tn(t._ticks),a=t.options,r=a.ticks,i=a.scaleLabel,s=a.gridLines,o=t._isVisible(),u=a.position,l=t.isHorizontal(),d=dt.options._parseFont,c=d(r),f=a.gridLines.tickMarkLength;if(e.width=l?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:o&&s.drawTicks?f:0,e.height=l?o&&s.drawTicks?f:0:t.maxHeight,i.display&&o){var h=d(i),g=dt.options.toPadding(i.padding),p=h.lineHeight+g.height;l?e.height+=p:e.width+=p}if(r.display&&o){var b=dt.longestText(t.ctx,c.string,n,t.longestTextCache),m=dt.numberOfLabelLines(n),y=.5*c.size,v=t.options.ticks.padding;if(t._maxLabelLines=m,t.longestLabelWidth=b,l){var x=dt.toRadians(t.labelRotation),_=Math.cos(x),T=Math.sin(x);e.height=Math.min(t.maxHeight,e.height+(T*b+c.lineHeight*m+y)+v),t.ctx.font=c.string;var O,w,S=en(t.ctx,n[0],c.string),I=en(t.ctx,n[n.length-1],c.string),N=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(n.length-1);0!==t.labelRotation?(O="bottom"===u?_*S:_*y,w="bottom"===u?_*y:_*I):(O=S/2,w=I/2),t.paddingLeft=Math.max(O-N,0)+3,t.paddingRight=Math.max(w-C,0)+3}else r.mirror?b=0:b+=v+y,e.width=Math.min(t.maxWidth,e.width+b),t.paddingTop=c.size/2,t.paddingBottom=c.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){dt.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(dt.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:dt.noop,getPixelForValue:dt.noop,getValueForPixel:dt.noop,getPixelForTick:function(t){var e=this,n=e.options.offset;if(e.isHorizontal()){var a=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),r=a*t+e.paddingLeft;return n&&(r+=a/2),e.left+r+(e.isFullWidth()?e.margins.left:0)}return e.top+t*((e.height-(e.paddingTop+e.paddingBottom))/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;return e.isHorizontal()?e.left+((e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft)+(e.isFullWidth()?e.margins.left:0):e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,a=this,r=a.isHorizontal(),i=t.length,s=!1,o=a.options.ticks.minor.maxTicksLimit,u=a._tickSize()*(i-1),l=r?a.width-(a.paddingLeft+a.paddingRight):a.height-(a.paddingTop+a.PaddingBottom),d=[];for(u>l&&(s=1+Math.floor(u/l)),i>o&&(s=Math.max(s,1+Math.floor(i/o))),e=0;e<i;e++)n=t[e],s>1&&e%s>0&&delete n.label,d.push(n);return d},_tickSize:function(){var t=this,e=t.isHorizontal(),n=t.options.ticks.minor,a=dt.toRadians(t.labelRotation),r=Math.abs(Math.cos(a)),i=Math.abs(Math.sin(a)),s=n.autoSkipPadding||0,o=t.longestLabelWidth+s||0,u=dt.options._parseFont(n),l=t._maxLabelLines*u.lineHeight+s||0;return e?l*r>o*i?o/r:l/i:l*i<o*r?l/r:o/i},_isVisible:function(){var t,e,n,a=this.chart,r=this.options.display;if("auto"!==r)return!!r;for(t=0,e=a.data.datasets.length;t<e;++t)if(a.isDatasetVisible(t)&&((n=a.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,n=e.options;if(e._isVisible()){var a,r,i,s=e.chart,o=e.ctx,u=ot.global.defaultFontColor,l=n.ticks.minor,d=n.ticks.major||l,c=n.gridLines,f=n.scaleLabel,h=n.position,g=0!==e.labelRotation,p=l.mirror,b=e.isHorizontal(),m=dt.options._parseFont,y=l.display&&l.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),v=Qe(l.fontColor,u),x=m(l),_=x.lineHeight,T=Qe(d.fontColor,u),O=m(d),w=l.padding,S=l.labelOffset,I=c.drawTicks?c.tickMarkLength:0,N=Qe(f.fontColor,u),C=m(f),R=dt.options.toPadding(f.padding),A=dt.toRadians(e.labelRotation),k=[],E=c.drawBorder?Xe(c.lineWidth,0,0):0,L=dt._alignPixel;if("top"===h?(a=L(s,e.bottom,E),r=e.bottom-I,i=a-E/2):"bottom"===h?(a=L(s,e.top,E),r=a+E/2,i=e.top+I):"left"===h?(a=L(s,e.right,E),r=e.right-I,i=a-E/2):(a=L(s,e.left,E),r=a+E/2,i=e.left+I),dt.each(y,(function(a,o){if(!dt.isNullOrUndef(a.label)){var u,l,d,f,m,y,v,x,T,O,N,C,R,D,P,M,q=a.label;o===e.zeroLineIndex&&n.offset===c.offsetGridLines?(u=c.zeroLineWidth,l=c.zeroLineColor,d=c.zeroLineBorderDash||[],f=c.zeroLineBorderDashOffset||0):(u=Xe(c.lineWidth,o),l=Xe(c.color,o),d=c.borderDash||[],f=c.borderDashOffset||0);var j=dt.isArray(q)?q.length:1,F=function(t,e,n){var a=t.getPixelForTick(e);return n&&(1===t.getTicks().length?a-=t.isHorizontal()?Math.max(a-t.left,t.right-a):Math.max(a-t.top,t.bottom-a):a-=0===e?(t.getPixelForTick(1)-a)/2:(a-t.getPixelForTick(e-1))/2),a}(e,o,c.offsetGridLines);if(b){var G=I+w;F<e.left-1e-7&&(l="rgba(0,0,0,0)"),m=v=T=N=L(s,F,u),y=r,x=i,R=e.getPixelForTick(o)+S,"top"===h?(O=L(s,t.top,E)+E/2,C=t.bottom,P=((g?1:.5)-j)*_,M=g?"left":"center",D=e.bottom-G):(O=t.top,C=L(s,t.bottom,E)-E/2,P=(g?0:.5)*_,M=g?"right":"center",D=e.top+G)}else{var V=(p?0:I)+w;F<e.top-1e-7&&(l="rgba(0,0,0,0)"),m=r,v=i,y=x=O=C=L(s,F,u),D=e.getPixelForTick(o)+S,P=(1-j)*_/2,"left"===h?(T=L(s,t.left,E)+E/2,N=t.right,M=p?"left":"right",R=e.right-V):(T=t.left,N=L(s,t.right,E)-E/2,M=p?"right":"left",R=e.left+V)}k.push({tx1:m,ty1:y,tx2:v,ty2:x,x1:T,y1:O,x2:N,y2:C,labelX:R,labelY:D,glWidth:u,glColor:l,glBorderDash:d,glBorderDashOffset:f,rotation:-1*A,label:q,major:a.major,textOffset:P,textAlign:M})}})),dt.each(k,(function(t){var e=t.glWidth,n=t.glColor;if(c.display&&e&&n&&(o.save(),o.lineWidth=e,o.strokeStyle=n,o.setLineDash&&(o.setLineDash(t.glBorderDash),o.lineDashOffset=t.glBorderDashOffset),o.beginPath(),c.drawTicks&&(o.moveTo(t.tx1,t.ty1),o.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&&(o.moveTo(t.x1,t.y1),o.lineTo(t.x2,t.y2)),o.stroke(),o.restore()),l.display){o.save(),o.translate(t.labelX,t.labelY),o.rotate(t.rotation),o.font=t.major?O.string:x.string,o.fillStyle=t.major?T:v,o.textBaseline="middle",o.textAlign=t.textAlign;var a=t.label,r=t.textOffset;if(dt.isArray(a))for(var i=0;i<a.length;++i)o.fillText(""+a[i],0,r),r+=_;else o.fillText(a,0,r);o.restore()}})),f.display){var D,P,M=0,q=C.lineHeight/2;if(b)D=e.left+(e.right-e.left)/2,P="bottom"===h?e.bottom-q-R.bottom:e.top+q+R.top;else{var j="left"===h;D=j?e.left+q+R.top:e.right-q-R.top,P=e.top+(e.bottom-e.top)/2,M=j?-.5*Math.PI:.5*Math.PI}o.save(),o.translate(D,P),o.rotate(M),o.textAlign="center",o.textBaseline="middle",o.fillStyle=N,o.font=C.string,o.fillText(f.labelString,0,0),o.restore()}if(E){var F,G,V,z,B=E,Y=Xe(c.lineWidth,y.length-1,0);b?(F=L(s,e.left,B)-B/2,G=L(s,e.right,Y)+Y/2,V=z=a):(V=L(s,e.top,B)-B/2,z=L(s,e.bottom,Y)+Y/2,F=G=a),o.lineWidth=E,o.strokeStyle=Xe(c.color,0),o.beginPath(),o.moveTo(F,V),o.lineTo(G,z),o.stroke()}}}}),an=nn.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,n=e.getLabels();e.minIndex=0,e.maxIndex=n.length-1,void 0!==e.options.ticks.min&&(t=n.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=n.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=n[e.minIndex],e.max=n[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,a=n.chart;return a.getDatasetMeta(e).controller._getValueScaleId()===n.id?n.getRightValue(a.data.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var n,a=this,r=a.options.offset,i=Math.max(a.maxIndex+1-a.minIndex-(r?0:1),1);if(null!=t&&(n=a.isHorizontal()?t.x:t.y),void 0!==n||void 0!==t&&isNaN(e)){var s=a.getLabels().indexOf(t=n||t);e=-1!==s?s:e}if(a.isHorizontal()){var o=a.width/i,u=o*(e-a.minIndex);return r&&(u+=o/2),a.left+u}var l=a.height/i,d=l*(e-a.minIndex);return r&&(d+=l/2),a.top+d},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,n=e.options.offset,a=Math.max(e._ticks.length-(n?0:1),1),r=e.isHorizontal(),i=(r?e.width:e.height)/a;return t-=r?e.left:e.top,n&&(t-=i/2),(t<=0?0:Math.round(t/i))+e.minIndex},getBasePixel:function(){return this.bottom}});an._defaults={position:"bottom"};var rn=dt.isNullOrUndef,sn=nn.extend({getRightValue:function(t){return"string"==typeof t?+t:nn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=dt.sign(t.min),a=dt.sign(t.max);n<0&&a<0?t.max=0:n>0&&a>0&&(t.min=0)}var r=void 0!==e.min||void 0!==e.suggestedMin,i=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(t.min=null===t.min?e.suggestedMin:Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(t.max=null===t.max?e.suggestedMax:Math.max(t.max,e.suggestedMax)),r!==i&&t.min>=t.max&&(r?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,a=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),a=a||11),a&&(t=Math.min(a,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:dt.noop,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),a={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:dt.valueOrDefault(e.fixedStepSize,e.stepSize)},r=t.ticks=function(t,e){var n,a,r,i,s=[],o=t.stepSize,u=o||1,l=t.maxTicks-1,d=t.min,c=t.max,f=t.precision,h=e.min,g=e.max,p=dt.niceNum((g-h)/l/u)*u;if(p<1e-14&&rn(d)&&rn(c))return[h,g];(i=Math.ceil(g/p)-Math.floor(h/p))>l&&(p=dt.niceNum(i*p/l/u)*u),o||rn(f)?n=Math.pow(10,dt._decimalPlaces(p)):(n=Math.pow(10,f),p=Math.ceil(p*n)/n),a=Math.floor(h/p)*p,r=Math.ceil(g/p)*p,o&&(!rn(d)&&dt.almostWhole(d/p,p/1e3)&&(a=d),!rn(c)&&dt.almostWhole(c/p,p/1e3)&&(r=c)),i=dt.almostEquals(i=(r-a)/p,Math.round(i),p/1e3)?Math.round(i):Math.ceil(i),a=Math.round(a*n)/n,r=Math.round(r*n)/n,s.push(rn(d)?a:d);for(var b=1;b<i;++b)s.push(Math.round((a+b*p)*n)/n);return s.push(rn(c)?r:c),s}(a,t);t.handleDirectionalChanges(),t.max=dt.max(r),t.min=dt.min(r),e.reverse?(r.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),nn.prototype.convertTicksToLabels.call(t)}}),on={position:"left",ticks:{callback:Ze.formatters.linear}},un=sn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,a=n.data.datasets,r=t.isHorizontal();function i(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var s=e.stacked;if(void 0===s&&dt.each(a,(function(t,e){if(!s){var a=n.getDatasetMeta(e);n.isDatasetVisible(e)&&i(a)&&void 0!==a.stack&&(s=!0)}})),e.stacked||s){var o={};dt.each(a,(function(a,r){var s=n.getDatasetMeta(r),u=[s.type,void 0===e.stacked&&void 0===s.stack?r:"",s.stack].join(".");void 0===o[u]&&(o[u]={positiveValues:[],negativeValues:[]});var l=o[u].positiveValues,d=o[u].negativeValues;n.isDatasetVisible(r)&&i(s)&&dt.each(a.data,(function(n,a){var r=+t.getRightValue(n);isNaN(r)||s.data[a].hidden||(l[a]=l[a]||0,d[a]=d[a]||0,e.relativePoints?l[a]=100:r<0?d[a]+=r:l[a]+=r)}))})),dt.each(o,(function(e){var n=e.positiveValues.concat(e.negativeValues),a=dt.min(n),r=dt.max(n);t.min=null===t.min?a:Math.min(t.min,a),t.max=null===t.max?r:Math.max(t.max,r)}))}else dt.each(a,(function(e,a){var r=n.getDatasetMeta(a);n.isDatasetVisible(a)&&i(r)&&dt.each(e.data,(function(e,n){var a=+t.getRightValue(e);isNaN(a)||r.data[n].hidden||((null===t.min||a<t.min)&&(t.min=a),(null===t.max||a>t.max)&&(t.max=a))}))}));t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=dt.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,n=e.start,a=+e.getRightValue(t),r=e.end-n;return e.isHorizontal()?e.left+e.width/r*(a-n):e.bottom-e.height/r*(a-n)},getValueForPixel:function(t){var e=this,n=e.isHorizontal();return e.start+(n?t-e.left:e.bottom-t)/(n?e.width:e.height)*(e.end-e.start)},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});un._defaults=on;var ln=dt.valueOrDefault,dn={position:"left",ticks:{callback:Ze.formatters.logarithmic}};function cn(t,e){return dt.isFinite(t)&&t>=0?t:e}var fn=nn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,a=n.data.datasets,r=t.isHorizontal();function i(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var s=e.stacked;if(void 0===s&&dt.each(a,(function(t,e){if(!s){var a=n.getDatasetMeta(e);n.isDatasetVisible(e)&&i(a)&&void 0!==a.stack&&(s=!0)}})),e.stacked||s){var o={};dt.each(a,(function(a,r){var s=n.getDatasetMeta(r),u=[s.type,void 0===e.stacked&&void 0===s.stack?r:"",s.stack].join(".");n.isDatasetVisible(r)&&i(s)&&(void 0===o[u]&&(o[u]=[]),dt.each(a.data,(function(e,n){var a=o[u],r=+t.getRightValue(e);isNaN(r)||s.data[n].hidden||r<0||(a[n]=a[n]||0,a[n]+=r)})))})),dt.each(o,(function(e){if(e.length>0){var n=dt.min(e),a=dt.max(e);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?a:Math.max(t.max,a)}}))}else dt.each(a,(function(e,a){var r=n.getDatasetMeta(a);n.isDatasetVisible(a)&&i(r)&&dt.each(e.data,(function(e,n){var a=+t.getRightValue(e);isNaN(a)||r.data[n].hidden||a<0||((null===t.min||a<t.min)&&(t.min=a),(null===t.max||a>t.max)&&(t.max=a),0!==a&&(null===t.minNotZero||a<t.minNotZero)&&(t.minNotZero=a))}))}));this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=cn(e.min,t.min),t.max=cn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(dt.log10(t.min))-1),t.max=Math.pow(10,Math.floor(dt.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(dt.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(dt.log10(t.min))+1):10),null===t.minNotZero&&(t.minNotZero=t.min>0?t.min:t.max<1?Math.pow(10,Math.floor(dt.log10(t.max))):1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),a={min:cn(e.min),max:cn(e.max)},r=t.ticks=function(t,e){var n,a,r=[],i=ln(t.min,Math.pow(10,Math.floor(dt.log10(e.min)))),s=Math.floor(dt.log10(e.max)),o=Math.ceil(e.max/Math.pow(10,s));0===i?(n=Math.floor(dt.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,n)),r.push(i),i=a*Math.pow(10,n)):(n=Math.floor(dt.log10(i)),a=Math.floor(i/Math.pow(10,n)));var u=n<0?Math.pow(10,Math.abs(n)):1;do{r.push(i),10==++a&&(a=1,u=++n>=0?1:u),i=Math.round(a*Math.pow(10,n)*u)/u}while(n<s||n===s&&a<o);var l=ln(t.max,i);return r.push(l),r}(a,t);t.max=dt.max(r),t.min=dt.min(r),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&r.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),nn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(dt.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,n,a,r,i,s=this,o=s.options.ticks,u=o.reverse,l=dt.log10,d=s._getFirstTickValue(s.minNotZero),c=0;return t=+s.getRightValue(t),u?(a=s.end,r=s.start,i=-1):(a=s.start,r=s.end,i=1),s.isHorizontal()?(e=s.width,n=u?s.right:s.left):(e=s.height,i*=-1,n=u?s.top:s.bottom),t!==a&&(0===a&&(e-=c=ln(o.fontSize,ot.global.defaultFontSize),a=d),0!==t&&(c+=e/(l(r)-l(a))*(l(t)-l(a))),n+=i*c),n},getValueForPixel:function(t){var e,n,a,r,i=this,s=i.options.ticks,o=s.reverse,u=dt.log10,l=i._getFirstTickValue(i.minNotZero);if(o?(n=i.end,a=i.start):(n=i.start,a=i.end),i.isHorizontal()?(e=i.width,r=o?i.right-t:t-i.left):(e=i.height,r=o?t-i.top:i.bottom-t),r!==n){if(0===n){var d=ln(s.fontSize,ot.global.defaultFontSize);r-=d,e-=d,n=l}r*=u(a)-u(n),r/=e,r=Math.pow(10,u(n)+r)}return r}});fn._defaults=dn;var hn=dt.valueOrDefault,gn=dt.valueAtIndexOrDefault,pn=dt.options.resolve,bn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Ze.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function mn(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function yn(t){var e=t.ticks;return e.display&&t.display?hn(e.fontSize,ot.global.defaultFontSize)+2*e.backdropPaddingY:0}function vn(t,e,n,a,r){return t===a||t===r?{start:e-n/2,end:e+n/2}:t<a||t>r?{start:e-n,end:e}:{start:e,end:e+n}}function xn(t){return 0===t||180===t?"center":t<180?"left":"right"}function _n(t,e,n,a){var r,i,s=n.y+a/2;if(dt.isArray(e))for(r=0,i=e.length;r<i;++r)t.fillText(e[r],n.x,s),s+=a;else t.fillText(e,n.x,s)}function Tn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function On(t){return dt.isNumber(t)?t:0}var wn=sn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=yn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;dt.each(e.data.datasets,(function(r,i){if(e.isDatasetVisible(i)){var s=e.getDatasetMeta(i);dt.each(r.data,(function(e,r){var i=+t.getRightValue(e);isNaN(i)||s.data[r].hidden||(n=Math.min(i,n),a=Math.max(i,a))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=a===Number.NEGATIVE_INFINITY?0:a,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/yn(this.options))},convertTicksToLabels:function(){var t=this;sn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,a,r=dt.options._parseFont(t.options.pointLabels),i={l:0,r:t.width,t:0,b:t.height-t.paddingTop},s={};t.ctx.font=r.string,t._pointLabelSizes=[];var o,u,l,d=mn(t);for(e=0;e<d;e++){a=t.getPointPosition(e,t.drawingArea+5),o=t.ctx,u=r.lineHeight,n=dt.isArray(l=t.pointLabels[e]||"")?{w:dt.longestText(o,o.font,l),h:l.length*u}:{w:o.measureText(l).width,h:u},t._pointLabelSizes[e]=n;var c=t.getIndexAngle(e),f=dt.toDegrees(c)%360,h=vn(f,a.x,n.w,0,180),g=vn(f,a.y,n.h,90,270);h.start<i.l&&(i.l=h.start,s.l=c),h.end>i.r&&(i.r=h.end,s.r=c),g.start<i.t&&(i.t=g.start,s.t=c),g.end>i.b&&(i.b=g.end,s.b=c)}t.setReductions(t.drawingArea,i,s)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var a=this,r=e.l/Math.sin(n.l),i=Math.max(e.r-a.width,0)/Math.sin(n.r),s=-e.t/Math.cos(n.t),o=-Math.max(e.b-(a.height-a.paddingTop),0)/Math.cos(n.b);r=On(r),i=On(i),s=On(s),o=On(o),a.drawingArea=Math.min(Math.floor(t-(r+i)/2),Math.floor(t-(s+o)/2)),a.setCenterPoint(r,i,s,o)},setCenterPoint:function(t,e,n,a){var r=this,i=n+r.drawingArea,s=r.height-r.paddingTop-a-r.drawingArea;r.xCenter=Math.floor((t+r.drawingArea+(r.width-e-r.drawingArea))/2+r.left),r.yCenter=Math.floor((i+s)/2+r.top+r.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/mn(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,a=e.ticks;if(e.display){var r=t.ctx,i=this.getIndexAngle(0),s=dt.options._parseFont(a);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,n=t.options,a=n.angleLines,r=n.gridLines,i=n.pointLabels,s=hn(a.lineWidth,r.lineWidth),o=hn(a.color,r.color),u=yn(n);e.save(),e.lineWidth=s,e.strokeStyle=o,e.setLineDash&&(e.setLineDash(pn([a.borderDash,r.borderDash,[]])),e.lineDashOffset=pn([a.borderDashOffset,r.borderDashOffset,0]));var l=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),d=dt.options._parseFont(i);e.font=d.string,e.textBaseline="middle";for(var c=mn(t)-1;c>=0;c--){if(a.display&&s&&o){var f=t.getPointPosition(c,l);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(f.x,f.y),e.stroke()}if(i.display){var h=t.getPointPosition(c,l+(0===c?u/2:0)+5),g=gn(i.fontColor,c,ot.global.defaultFontColor);e.fillStyle=g;var p=t.getIndexAngle(c),b=dt.toDegrees(p);e.textAlign=xn(b),Tn(b,t._pointLabelSizes[c],h),_n(e,t.pointLabels[c]||"",h,d.lineHeight)}}e.restore()}(t),dt.each(t.ticks,(function(e,o){if(o>0||a.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[o]);if(n.display&&0!==o&&function(t,e,n,a){var r,i=t.ctx,s=e.circular,o=mn(t),u=gn(e.color,a-1),l=gn(e.lineWidth,a-1);if((s||o)&&u&&l){if(i.save(),i.strokeStyle=u,i.lineWidth=l,i.setLineDash&&(i.setLineDash(e.borderDash||[]),i.lineDashOffset=e.borderDashOffset||0),i.beginPath(),s)i.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{r=t.getPointPosition(0,n),i.moveTo(r.x,r.y);for(var d=1;d<o;d++)r=t.getPointPosition(d,n),i.lineTo(r.x,r.y)}i.closePath(),i.stroke(),i.restore()}}(t,n,u,o),a.display){var l=hn(a.fontColor,ot.global.defaultFontColor);if(r.font=s.string,r.save(),r.translate(t.xCenter,t.yCenter),r.rotate(i),a.showLabelBackdrop){var d=r.measureText(e).width;r.fillStyle=a.backdropColor,r.fillRect(-d/2-a.backdropPaddingX,-u-s.size/2-a.backdropPaddingY,d+2*a.backdropPaddingX,s.size+2*a.backdropPaddingY)}r.textAlign="center",r.textBaseline="middle",r.fillStyle=l,r.fillText(e,0,-u),r.restore()}}}))}}});wn._defaults=bn;var Sn=dt.valueOrDefault,In=Number.MIN_SAFE_INTEGER||-9007199254740991,Nn=Number.MAX_SAFE_INTEGER||9007199254740991,Cn={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},Rn=Object.keys(Cn);function An(t,e){return t-e}function kn(t){var e,n,a,r={},i=[];for(e=0,n=t.length;e<n;++e)r[a=t[e]]||(r[a]=!0,i.push(a));return i}function En(t,e,n,a){var r=function(t,e,n){for(var a,r,i,s=0,o=t.length-1;s>=0&&s<=o;){if(i=t[a=s+o>>1],!(r=t[a-1]||null))return{lo:null,hi:i};if(i[e]<n)s=a+1;else{if(!(r[e]>n))return{lo:r,hi:i};o=a-1}}return{lo:i,hi:null}}(t,e,n),i=r.lo?r.hi?r.lo:t[t.length-2]:t[0],s=r.lo?r.hi?r.hi:t[t.length-1]:t[1],o=s[e]-i[e];return i[a]+(s[a]-i[a])*(o?(n-i[e])/o:0)}function Ln(t,e){var n=t._adapter,a=t.options.time,r=a.parser,i=r||a.format,s=e;return"function"==typeof r&&(s=r(s)),dt.isFinite(s)||(s="string"==typeof i?n.parse(s,i):n.parse(s)),null!==s?+s:(r||"function"!=typeof i||(s=i(e),dt.isFinite(s)||(s=n.parse(s))),s)}function Dn(t,e){if(dt.isNullOrUndef(e))return null;var n=t.options.time,a=Ln(t,t.getRightValue(e));return null===a||n.round&&(a=+t._adapter.startOf(a,n.round)),a}function Pn(t){for(var e=Rn.indexOf(t)+1,n=Rn.length;e<n;++e)if(Cn[Rn[e]].common)return Rn[e]}var Mn=nn.extend({initialize:function(){this.mergeTicksOptions(),nn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),a=t._adapter=new Je._date(e.adapters.date);return n.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),dt.mergeIf(n.displayFormats,a.formats()),nn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),nn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,a,r,i,s=this,o=s.chart,u=s._adapter,l=s.options.time,d=l.unit||"day",c=Nn,f=In,h=[],g=[],p=[],b=o.data.labels||[];for(t=0,n=b.length;t<n;++t)p.push(Dn(s,b[t]));for(t=0,n=(o.data.datasets||[]).length;t<n;++t)if(o.isDatasetVisible(t))if(dt.isObject((r=o.data.datasets[t].data)[0]))for(g[t]=[],e=0,a=r.length;e<a;++e)i=Dn(s,r[e]),h.push(i),g[t][e]=i;else{for(e=0,a=p.length;e<a;++e)h.push(p[e]);g[t]=p.slice(0)}else g[t]=[];p.length&&(p=kn(p).sort(An),c=Math.min(c,p[0]),f=Math.max(f,p[p.length-1])),h.length&&(h=kn(h).sort(An),c=Math.min(c,h[0]),f=Math.max(f,h[h.length-1])),c=Dn(s,l.min)||c,f=Dn(s,l.max)||f,c=c===Nn?+u.startOf(Date.now(),d):c,f=f===In?+u.endOf(Date.now(),d)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._horizontal=s.isHorizontal(),s._table=[],s._timestamps={data:h,datasets:g,labels:p}},buildTicks:function(){var t,e,n,a=this,r=a.min,i=a.max,s=a.options,o=s.time,u=[],l=[];switch(s.ticks.source){case"data":u=a._timestamps.data;break;case"labels":u=a._timestamps.labels;break;case"auto":default:u=function(t,e,n,a){var r,i=t._adapter,s=t.options,o=s.time,u=o.unit||function(t,e,n,a){var r,i,s=Rn.length;for(r=Rn.indexOf(t);r<s-1;++r)if((i=Cn[Rn[r]]).common&&Math.ceil((n-e)/((i.steps?i.steps[i.steps.length-1]:Nn)*i.size))<=a)return Rn[r];return Rn[s-1]}(o.minUnit,e,n,a),l=Pn(u),d=Sn(o.stepSize,o.unitStepSize),c="week"===u&&o.isoWeekday,f=s.ticks.major.enabled,h=Cn[u],g=e,p=n,b=[];for(d||(d=function(t,e,n,a){var r,i,s,o=e-t,u=Cn[n],l=u.size,d=u.steps;if(!d)return Math.ceil(o/(a*l));for(r=0,i=d.length;r<i&&(s=d[r],!(Math.ceil(o/(l*s))<=a));++r);return s}(e,n,u,a)),c&&(g=+i.startOf(g,"isoWeek",c),p=+i.startOf(p,"isoWeek",c)),g=+i.startOf(g,c?"day":u),(p=+i.startOf(p,c?"day":u))<n&&(p=+i.add(p,1,u)),r=g,f&&l&&!c&&!o.round&&(r=+i.startOf(r,l),r=+i.add(r,~~((g-r)/(h.size*d))*d,u));r<p;r=+i.add(r,d,u))b.push(+r);return b.push(+r),b}(a,r,i,a.getLabelCapacity(r))}for("ticks"===s.bounds&&u.length&&(r=u[0],i=u[u.length-1]),r=Dn(a,o.min)||r,i=Dn(a,o.max)||i,t=0,e=u.length;t<e;++t)(n=u[t])>=r&&n<=i&&l.push(n);return a.min=r,a.max=i,a._unit=o.unit||function(t,e,n,a,r){var i,s;for(i=Rn.length-1;i>=Rn.indexOf(n);i--)if(Cn[s=Rn[i]].common&&t._adapter.diff(r,a,s)>=e.length)return s;return Rn[n?Rn.indexOf(n):0]}(a,l,o.minUnit,a.min,a.max),a._majorUnit=Pn(a._unit),a._table=function(t,e,n,a){if("linear"===a||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var r,i,s,o,u,l=[],d=[e];for(r=0,i=t.length;r<i;++r)(o=t[r])>e&&o<n&&d.push(o);for(d.push(n),r=0,i=d.length;r<i;++r)u=d[r+1],o=d[r],void 0!==(s=d[r-1])&&void 0!==u&&Math.round((u+s)/2)===o||l.push({time:o,pos:r/(i-1)});return l}(a._timestamps.data,r,i,s.distribution),a._offsets=function(t,e,n,a,r){var i,s,o=0,u=0;return r.offset&&e.length&&(r.time.min||(i=En(t,"time",e[0],"pos"),o=1===e.length?1-i:(En(t,"time",e[1],"pos")-i)/2),r.time.max||(s=En(t,"time",e[e.length-1],"pos"),u=1===e.length?s:(s-En(t,"time",e[e.length-2],"pos"))/2)),{start:o,end:u}}(a._table,l,0,0,s),s.ticks.reverse&&l.reverse(),function(t,e,n){var a,r,i,s,o=[];for(a=0,r=e.length;a<r;++a)i=e[a],s=!!n&&i===+t._adapter.startOf(i,n),o.push({value:i,major:s});return o}(a,l,a._majorUnit)},getLabelForIndex:function(t,e){var n=this,a=n._adapter,r=n.chart.data,i=n.options.time,s=r.labels&&t<r.labels.length?r.labels[t]:"",o=r.datasets[e].data[t];return dt.isObject(o)&&(s=n.getRightValue(o)),i.tooltipFormat?a.format(Ln(n,s),i.tooltipFormat):"string"==typeof s?s:a.format(Ln(n,s),i.displayFormats.datetime)},tickFormatFunction:function(t,e,n,a){var r=this._adapter,i=this.options,s=i.time.displayFormats,o=s[this._unit],u=this._majorUnit,l=s[u],d=+r.startOf(t,u),c=i.ticks.major,f=c.enabled&&u&&l&&t===d,h=r.format(t,a||(f?l:o)),g=f?c:i.ticks.minor,p=Sn(g.callback,g.userCallback);return p?p(h,e,n):h},convertTicksToLabels:function(t){var e,n,a=[];for(e=0,n=t.length;e<n;++e)a.push(this.tickFormatFunction(t[e].value,e,t));return a},getPixelForOffset:function(t){var e=this,n=e.options.ticks.reverse,a=e._horizontal?e.width:e.height,r=e._horizontal?n?e.right:e.left:n?e.bottom:e.top,i=En(e._table,"time",t,"pos"),s=a*(e._offsets.start+i)/(e._offsets.start+1+e._offsets.end);return n?r-s:r+s},getPixelForValue:function(t,e,n){var a=null;if(void 0!==e&&void 0!==n&&(a=this._timestamps.datasets[n][e]),null===a&&(a=Dn(this,t)),null!==a)return this.getPixelForOffset(a)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,n=e._horizontal?e.width:e.height,a=En(e._table,"pos",(n?(t-(e._horizontal?e.left:e.top))/n:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,"time");return e._adapter._create(a)},getLabelWidth:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,a=dt.toRadians(e.maxRotation),r=Math.cos(a),i=Math.sin(a);return n*r+Sn(e.fontSize,ot.global.defaultFontSize)*i},getLabelCapacity:function(t){var e=this,n=e.tickFormatFunction(t,0,[],e.options.time.displayFormats.millisecond),a=e.getLabelWidth(n),r=e.isHorizontal()?e.width:e.height,i=Math.floor(r/a);return i>0?i:1}});Mn._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var qn={category:an,linear:un,logarithmic:fn,radialLinear:wn,time:Mn},jn={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Je._date.override("function"==typeof t?{_id:"moment",formats:function(){return jn},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,a){return t(e).add(n,a).valueOf()},diff:function(e,n,a){return t.duration(t(e).diff(t(n))).as(a)},startOf:function(e,n,a){return e=t(e),"isoWeek"===n?e.isoWeekday(a).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),ot._set("global",{plugins:{filler:{propagate:!0}}});var Fn={dataset:function(t){var e=t.fill,n=t.chart,a=n.getDatasetMeta(e),r=a&&n.isDatasetVisible(e)&&a.dataset._children||[],i=r.length||0;return i?function(t,e){return e<i&&r[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,a=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===a?t.y:a}}}};function Gn(t,e,n){var a,r=t._model||{},i=r.fill;if(void 0===i&&(i=!!r.backgroundColor),!1===i||null===i)return!1;if(!0===i)return"origin";if(a=parseFloat(i,10),isFinite(a)&&Math.floor(a)===a)return"-"!==i[0]&&"+"!==i[0]||(a=e+a),!(a===e||a<0||a>=n)&&a;switch(i){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return i;default:return!1}}function Vn(t){var e,n=t.el._model||{},a=t.el._scale||{},r=t.fill,i=null;if(isFinite(r))return null;if("start"===r?i=void 0===n.scaleBottom?a.bottom:n.scaleBottom:"end"===r?i=void 0===n.scaleTop?a.top:n.scaleTop:void 0!==n.scaleZero?i=n.scaleZero:a.getBasePosition?i=a.getBasePosition():a.getBasePixel&&(i=a.getBasePixel()),null!=i){if(void 0!==i.x&&void 0!==i.y)return i;if(dt.isFinite(i))return{x:(e=a.isHorizontal())?i:null,y:e?null:i}}return null}function zn(t,e,n){var a,r=t[e].fill,i=[e];if(!n)return r;for(;!1!==r&&-1===i.indexOf(r);){if(!isFinite(r))return r;if(!(a=t[r]))return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function Bn(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),Fn[n](t))}function Yn(t){return t&&!t.skip}function Hn(t,e,n,a,r){var i;if(a&&r){for(t.moveTo(e[0].x,e[0].y),i=1;i<a;++i)dt.canvas.lineTo(t,e[i-1],e[i]);for(t.lineTo(n[r-1].x,n[r-1].y),i=r-1;i>0;--i)dt.canvas.lineTo(t,n[i],n[i-1],!0)}}var Un={id:"filler",afterDatasetsUpdate:function(t,e){var n,a,r,i,s=(t.data.datasets||[]).length,o=e.propagate,u=[];for(a=0;a<s;++a)i=null,(r=(n=t.getDatasetMeta(a)).dataset)&&r._model&&r instanceof qt.Line&&(i={visible:t.isDatasetVisible(a),fill:Gn(r,a,s),chart:t,el:r}),n.$filler=i,u.push(i);for(a=0;a<s;++a)(i=u[a])&&(i.fill=zn(u,a,o),i.boundary=Vn(i),i.mapper=Bn(i))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var a=t.ctx,r=n.el,i=r._view,s=r._children||[],o=n.mapper,u=i.backgroundColor||ot.global.defaultColor;o&&u&&s.length&&(dt.canvas.clipArea(a,t.chartArea),function(t,e,n,a,r,i){var s,o,u,l,d,c,f,h=e.length,g=a.spanGaps,p=[],b=[],m=0,y=0;for(t.beginPath(),s=0,o=h+!!i;s<o;++s)d=n(l=e[u=s%h]._view,u,a),c=Yn(l),f=Yn(d),c&&f?(m=p.push(l),y=b.push(d)):m&&y&&(g?(c&&p.push(l),f&&b.push(d)):(Hn(t,p,b,m,y),m=y=0,p=[],b=[]));Hn(t,p,b,m,y),t.closePath(),t.fillStyle=r,t.fill()}(a,s,o,i,u,r._loop),dt.canvas.unclipArea(a))}}},Wn=dt.noop,Kn=dt.valueOrDefault;function $n(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}ot._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,a=this.chart,r=a.getDatasetMeta(n);r.hidden=null===r.hidden?!a.data.datasets[n].hidden:null,a.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return dt.isArray(e.datasets)?e.datasets.map((function(e,n){return{text:e.label,fillStyle:dt.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}}),this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var Jn=gt.extend({initialize:function(t){dt.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Wn,update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=n,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Wn,beforeSetDimensions:Wn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Wn,beforeBuildLabels:Wn,buildLabels:function(){var t=this,e=t.options.labels||{},n=dt.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Wn,beforeFit:Wn,fit:function(){var t=this,e=t.options,n=e.labels,a=e.display,r=t.ctx,i=dt.options._parseFont(n),s=i.size,o=t.legendHitBoxes=[],u=t.minSize,l=t.isHorizontal();if(l?(u.width=t.maxWidth,u.height=a?10:0):(u.width=a?10:0,u.height=t.maxHeight),a)if(r.font=i.string,l){var d=t.lineWidths=[0],c=0;r.textAlign="left",r.textBaseline="top",dt.each(t.legendItems,(function(t,e){var a=$n(n,s)+s/2+r.measureText(t.text).width;(0===e||d[d.length-1]+a+n.padding>u.width)&&(c+=s+n.padding,d[d.length-(e>0?0:1)]=n.padding),o[e]={left:0,top:0,width:a,height:s},d[d.length-1]+=a+n.padding})),u.height+=c}else{var f=n.padding,h=t.columnWidths=[],g=n.padding,p=0,b=0,m=s+f;dt.each(t.legendItems,(function(t,e){var a=$n(n,s)+s/2+r.measureText(t.text).width;e>0&&b+m>u.height-f&&(g+=p+n.padding,h.push(p),p=0,b=0),p=Math.max(p,a),b+=m,o[e]={left:0,top:0,width:a,height:s}})),g+=p,h.push(p),u.width+=g}t.width=u.width,t.height=u.height},afterFit:Wn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,a=ot.global,r=a.defaultColor,i=a.elements.line,s=t.width,o=t.lineWidths;if(e.display){var u,l=t.ctx,d=Kn(n.fontColor,a.defaultFontColor),c=dt.options._parseFont(n),f=c.size;l.textAlign="left",l.textBaseline="middle",l.lineWidth=.5,l.strokeStyle=d,l.fillStyle=d,l.font=c.string;var h=$n(n,f),g=t.legendHitBoxes,p=t.isHorizontal();u=p?{x:t.left+(s-o[0])/2+n.padding,y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+n.padding,line:0};var b=f+n.padding;dt.each(t.legendItems,(function(a,d){var c=l.measureText(a.text).width,m=h+f/2+c,y=u.x,v=u.y;p?d>0&&y+m+n.padding>t.left+t.minSize.width&&(v=u.y+=b,u.line++,y=u.x=t.left+(s-o[u.line])/2+n.padding):d>0&&v+b>t.top+t.minSize.height&&(y=u.x=y+t.columnWidths[u.line]+n.padding,v=u.y=t.top+n.padding,u.line++),function(t,n,a){if(!(isNaN(h)||h<=0)){l.save();var s=Kn(a.lineWidth,i.borderWidth);if(l.fillStyle=Kn(a.fillStyle,r),l.lineCap=Kn(a.lineCap,i.borderCapStyle),l.lineDashOffset=Kn(a.lineDashOffset,i.borderDashOffset),l.lineJoin=Kn(a.lineJoin,i.borderJoinStyle),l.lineWidth=s,l.strokeStyle=Kn(a.strokeStyle,r),l.setLineDash&&l.setLineDash(Kn(a.lineDash,i.borderDash)),e.labels&&e.labels.usePointStyle){var o=h*Math.SQRT2/2;dt.canvas.drawPoint(l,a.pointStyle,o,t+h/2,n+f/2)}else 0!==s&&l.strokeRect(t,n,h,f),l.fillRect(t,n,h,f);l.restore()}}(y,v,a),g[d].left=y,g[d].top=v,function(t,e,n,a){var r=f/2,i=h+r+t,s=e+r;l.fillText(n.text,i,s),n.hidden&&(l.beginPath(),l.lineWidth=2,l.moveTo(i,s),l.lineTo(i+a,s),l.stroke())}(y,v,a,c),p?u.x+=m+n.padding:u.y+=b}))}},_getLegendItemAt:function(t,e){var n,a,r,i=this;if(t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom)for(r=i.legendHitBoxes,n=0;n<r.length;++n)if(t>=(a=r[n]).left&&t<=a.left+a.width&&e>=a.top&&e<=a.top+a.height)return i.legendItems[n];return null},handleEvent:function(t){var e,n=this,a=n.options,r="mouseup"===t.type?"click":t.type;if("mousemove"===r){if(!a.onHover&&!a.onLeave)return}else{if("click"!==r)return;if(!a.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===r?e&&a.onClick&&a.onClick.call(n,t.native,e):(a.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&a.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),a.onHover&&e&&a.onHover.call(n,t.native,e))}});function Zn(t,e){var n=new Jn({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.legend=n}var Qn={id:"legend",_element:Jn,beforeInit:function(t){var e=t.options.legend;e&&Zn(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(dt.mergeIf(e,ot.global.legend),n?(ve.configure(t,n,e),n.options=e):Zn(t,e)):n&&(ve.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Xn=dt.noop;ot._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ta=gt.extend({initialize:function(t){dt.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Xn,update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=n,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Xn,beforeSetDimensions:Xn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Xn,beforeBuildLabels:Xn,buildLabels:Xn,afterBuildLabels:Xn,beforeFit:Xn,fit:function(){var t=this,e=t.options,n=e.display,a=t.minSize,r=dt.isArray(e.text)?e.text.length:1,i=dt.options._parseFont(e),s=n?r*i.lineHeight+2*e.padding:0;t.isHorizontal()?(a.width=t.maxWidth,a.height=s):(a.width=s,a.height=t.maxHeight),t.width=a.width,t.height=a.height},afterFit:Xn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var a,r,i,s=dt.options._parseFont(n),o=s.lineHeight,u=o/2+n.padding,l=0,d=t.top,c=t.left,f=t.bottom,h=t.right;e.fillStyle=dt.valueOrDefault(n.fontColor,ot.global.defaultFontColor),e.font=s.string,t.isHorizontal()?(r=c+(h-c)/2,i=d+u,a=h-c):(r="left"===n.position?c+u:h-u,i=d+(f-d)/2,a=f-d,l=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(r,i),e.rotate(l),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(dt.isArray(g))for(var p=0,b=0;b<g.length;++b)e.fillText(g[b],0,p,a),p+=o;else e.fillText(g,0,0,a);e.restore()}}});function ea(t,e){var n=new ta({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.titleBlock=n}var na={},aa=Un,ra=Qn,ia={id:"title",_element:ta,beforeInit:function(t){var e=t.options.title;e&&ea(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(dt.mergeIf(e,ot.global.title),n?(ve.configure(t,n,e),n.options=e):ea(t,e)):n&&(ve.removeBox(t,n),delete t.titleBlock)}};for(var sa in na.filler=aa,na.legend=ra,na.title=ia,We.helpers=dt,function(){function t(t,e,n){var a;return"string"==typeof t?(a=parseInt(t,10),-1!==t.indexOf("%")&&(a=a/100*e.parentNode[n])):a=t,a}function e(t){return null!=t&&"none"!==t}function n(n,a,r){var i=document.defaultView,s=dt._getParentNode(n),o=i.getComputedStyle(n)[a],u=i.getComputedStyle(s)[a],l=e(o),d=e(u),c=Number.POSITIVE_INFINITY;return l||d?Math.min(l?t(o,n,r):c,d?t(u,s,r):c):"none"}dt.where=function(t,e){if(dt.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return dt.each(t,(function(t){e(t)&&n.push(t)})),n},dt.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var a=0,r=t.length;a<r;++a)if(e.call(n,t[a],a,t))return a;return-1},dt.findNextWhere=function(t,e,n){dt.isNullOrUndef(n)&&(n=-1);for(var a=n+1;a<t.length;a++){var r=t[a];if(e(r))return r}},dt.findPreviousWhere=function(t,e,n){dt.isNullOrUndef(n)&&(n=t.length);for(var a=n-1;a>=0;a--){var r=t[a];if(e(r))return r}},dt.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},dt.almostEquals=function(t,e,n){return Math.abs(t-e)<n},dt.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},dt.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},dt.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},dt.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},dt.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e},dt.toRadians=function(t){return t*(Math.PI/180)},dt.toDegrees=function(t){return t*(180/Math.PI)},dt._decimalPlaces=function(t){if(dt.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},dt.getAngleFromPoint=function(t,e){var n=e.x-t.x,a=e.y-t.y,r=Math.sqrt(n*n+a*a),i=Math.atan2(a,n);return i<-.5*Math.PI&&(i+=2*Math.PI),{angle:i,distance:r}},dt.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},dt.aliasPixel=function(t){return t%2==0?0:.5},dt._alignPixel=function(t,e,n){var a=t.currentDevicePixelRatio,r=n/2;return Math.round((e-r)*a)/a+r},dt.splineCurve=function(t,e,n,a){var r=t.skip?e:t,i=e,s=n.skip?e:n,o=Math.sqrt(Math.pow(i.x-r.x,2)+Math.pow(i.y-r.y,2)),u=Math.sqrt(Math.pow(s.x-i.x,2)+Math.pow(s.y-i.y,2)),l=o/(o+u),d=u/(o+u),c=a*(l=isNaN(l)?0:l),f=a*(d=isNaN(d)?0:d);return{previous:{x:i.x-c*(s.x-r.x),y:i.y-c*(s.y-r.y)},next:{x:i.x+f*(s.x-r.x),y:i.y+f*(s.y-r.y)}}},dt.EPSILON=Number.EPSILON||1e-14,dt.splineCurveMonotone=function(t){var e,n,a,r,i,s,o,u,l,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),c=d.length;for(e=0;e<c;++e)if(!(a=d[e]).model.skip){if(n=e>0?d[e-1]:null,(r=e<c-1?d[e+1]:null)&&!r.model.skip){var f=r.model.x-a.model.x;a.deltaK=0!==f?(r.model.y-a.model.y)/f:0}a.mK=!n||n.model.skip?a.deltaK:!r||r.model.skip?n.deltaK:this.sign(n.deltaK)!==this.sign(a.deltaK)?0:(n.deltaK+a.deltaK)/2}for(e=0;e<c-1;++e)r=d[e+1],(a=d[e]).model.skip||r.model.skip||(dt.almostEquals(a.deltaK,0,this.EPSILON)?a.mK=r.mK=0:(i=a.mK/a.deltaK,s=r.mK/a.deltaK,(u=Math.pow(i,2)+Math.pow(s,2))<=9||(o=3/Math.sqrt(u),a.mK=i*o*a.deltaK,r.mK=s*o*a.deltaK)));for(e=0;e<c;++e)(a=d[e]).model.skip||(r=e<c-1?d[e+1]:null,(n=e>0?d[e-1]:null)&&!n.model.skip&&(a.model.controlPointPreviousX=a.model.x-(l=(a.model.x-n.model.x)/3),a.model.controlPointPreviousY=a.model.y-l*a.mK),r&&!r.model.skip&&(a.model.controlPointNextX=a.model.x+(l=(r.model.x-a.model.x)/3),a.model.controlPointNextY=a.model.y+l*a.mK))},dt.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},dt.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},dt.niceNum=function(t,e){var n=Math.floor(dt.log10(t)),a=t/Math.pow(10,n);return(e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10)*Math.pow(10,n)},dt.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},dt.getRelativePosition=function(t,e){var n,a,r=t.originalEvent||t,i=t.target||t.srcElement,s=i.getBoundingClientRect(),o=r.touches;o&&o.length>0?(n=o[0].clientX,a=o[0].clientY):(n=r.clientX,a=r.clientY);var u=parseFloat(dt.getStyle(i,"padding-left")),l=parseFloat(dt.getStyle(i,"padding-top")),d=parseFloat(dt.getStyle(i,"padding-right")),c=parseFloat(dt.getStyle(i,"padding-bottom")),f=s.bottom-s.top-l-c;return{x:n=Math.round((n-s.left-u)/(s.right-s.left-u-d)*i.width/e.currentDevicePixelRatio),y:a=Math.round((a-s.top-l)/f*i.height/e.currentDevicePixelRatio)}},dt.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},dt.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},dt._calculatePadding=function(t,e,n){return(e=dt.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},dt._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},dt.getMaximumWidth=function(t){var e=dt._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,a=n-dt._calculatePadding(e,"padding-left",n)-dt._calculatePadding(e,"padding-right",n),r=dt.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},dt.getMaximumHeight=function(t){var e=dt._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,a=n-dt._calculatePadding(e,"padding-top",n)-dt._calculatePadding(e,"padding-bottom",n),r=dt.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},dt.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},dt.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var a=t.canvas,r=t.height,i=t.width;a.height=r*n,a.width=i*n,t.ctx.scale(n,n),a.style.height||a.style.width||(a.style.height=r+"px",a.style.width=i+"px")}},dt.fontString=function(t,e,n){return e+" "+t+"px "+n},dt.longestText=function(t,e,n,a){var r=(a=a||{}).data=a.data||{},i=a.garbageCollect=a.garbageCollect||[];a.font!==e&&(r=a.data={},i=a.garbageCollect=[],a.font=e),t.font=e;var s=0;dt.each(n,(function(e){null!=e&&!0!==dt.isArray(e)?s=dt.measureText(t,r,i,s,e):dt.isArray(e)&&dt.each(e,(function(e){null==e||dt.isArray(e)||(s=dt.measureText(t,r,i,s,e))}))}));var o=i.length/2;if(o>n.length){for(var u=0;u<o;u++)delete r[i[u]];i.splice(0,o)}return s},dt.measureText=function(t,e,n,a,r){var i=e[r];return i||(i=e[r]=t.measureText(r).width,n.push(r)),i>a&&(a=i),a},dt.numberOfLabelLines=function(t){var e=1;return dt.each(t,(function(t){dt.isArray(t)&&t.length>e&&(e=t.length)})),e},dt.color=W?function(t){return t instanceof CanvasGradient&&(t=ot.global.defaultColor),W(t)}:function(t){return console.error("Color.js not found!"),t},dt.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:dt.color(t).saturate(.5).darken(.1).rgbString()}}(),We._adapters=Je,We.Animation=bt,We.animationService=mt,We.controllers=oe,We.DatasetController=Tt,We.defaults=ot,We.Element=gt,We.elements=qt,We.Interaction=ge,We.layouts=ve,We.platform=Ae,We.plugins=ke,We.Scale=nn,We.scaleService=Ee,We.Ticks=Ze,We.Tooltip=Ge,We.helpers.each(qn,(function(t,e){We.scaleService.registerScaleType(e,t,t._defaults)})),na)na.hasOwnProperty(sa)&&We.plugins.register(na[sa]);We.platform.initialize();var oa=We;return"undefined"!=typeof window&&(window.Chart=We),We.Chart=We,We.Legend=na.legend._element,We.Title=na.title._element,We.pluginService=We.plugins,We.PluginBase=We.Element.extend({}),We.canvasHelpers=We.helpers.canvas,We.layoutService=We.layouts,We.LinearScaleBase=sn,We.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){We[t]=function(e,n){return new We(e,We.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),oa}(function(){try{return n("wd/R")}catch(t){}}())},MOZO:function(t,e,n){var a=n("0GLT"),r=n("VLqJ"),i=n("fqHM"),s=n("6II+");t.exports=function(t,e){return a(t)?t:r(t,e)?[t]:i(s(t))}},MP8s:function(t,e,n){"use strict";n.d(e,"a",(function(){return T}));var a=n("8Y7J"),r=n("2vnA"),i=n("f95s"),s=n("mfoh"),o=n("X+05"),u=n("8SuI"),l=n.n(u),d=n("gBXJ"),c=n.n(d),f=n("LgIp"),h=n.n(f),g=n("n9Vz"),p=n.n(g),b=n("372+"),m=n.n(b),y=n("Q7RW"),v=n.n(y),x=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},_=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},T=function(){function t(){this.options=new s.b,this.eventNames=Object.keys(o.a),this.expandedNodeIds={},this.selectedLeafNodeIds={},this.activeNodeIds={},this.hiddenNodeIds={},this.focusedNodeId=null,this.firstUpdate=!0,this.subscriptions=[]}var e;return e=t,t.prototype.fireEvent=function(t){t.treeModel=this,this.events[t.eventName].emit(t),this.events.event.emit(t)},t.prototype.subscribe=function(t,e){var n=this.events[t].subscribe(e);this.subscriptions.push(n)},t.prototype.getFocusedNode=function(){return this.focusedNode},t.prototype.getActiveNode=function(){return this.activeNodes[0]},t.prototype.getActiveNodes=function(){return this.activeNodes},t.prototype.getVisibleRoots=function(){return this.virtualRoot.visibleChildren},t.prototype.getFirstRoot=function(t){return void 0===t&&(t=!1),l()(t?this.getVisibleRoots():this.roots)},t.prototype.getLastRoot=function(t){return void 0===t&&(t=!1),c()(t?this.getVisibleRoots():this.roots)},Object.defineProperty(t.prototype,"isFocused",{get:function(){return e.focusedTree===this},enumerable:!0,configurable:!0}),t.prototype.isNodeFocused=function(t){return this.focusedNode===t},t.prototype.isEmptyTree=function(){return this.roots&&0===this.roots.length},Object.defineProperty(t.prototype,"focusedNode",{get:function(){return this.focusedNodeId?this.getNodeById(this.focusedNodeId):null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"expandedNodes",{get:function(){var t=this,e=Object.keys(this.expandedNodeIds).filter((function(e){return t.expandedNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeNodes",{get:function(){var t=this,e=Object.keys(this.activeNodeIds).filter((function(e){return t.activeNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hiddenNodes",{get:function(){var t=this,e=Object.keys(this.hiddenNodeIds).filter((function(e){return t.hiddenNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedLeafNodes",{get:function(){var t=this,e=Object.keys(this.selectedLeafNodeIds).filter((function(e){return t.selectedLeafNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),t.prototype.getNodeByPath=function(t,e){if(void 0===e&&(e=null),!t)return null;if(e=e||this.virtualRoot,0===t.length)return e;if(!e.children)return null;var n=t.shift(),a=p()(e.children,{id:n});return a?this.getNodeByPath(t,a):null},t.prototype.getNodeById=function(t){var e=t.toString();return this.getNodeBy((function(t){return t.id.toString()===e}))},t.prototype.getNodeBy=function(t,e){if(void 0===e&&(e=null),!(e=e||this.virtualRoot).children)return null;var n=p()(e.children,t);if(n)return n;for(var a=0,r=e.children;a<r.length;a++){var i=this.getNodeBy(t,r[a]);if(i)return i}},t.prototype.isExpanded=function(t){return this.expandedNodeIds[t.id]},t.prototype.isHidden=function(t){return this.hiddenNodeIds[t.id]},t.prototype.isActive=function(t){return this.activeNodeIds[t.id]},t.prototype.isSelected=function(t){return this.selectedLeafNodeIds[t.id]},t.prototype.ngOnDestroy=function(){this.dispose(),this.unsubscribeAll()},t.prototype.dispose=function(){this.virtualRoot&&this.virtualRoot.dispose()},t.prototype.unsubscribeAll=function(){this.subscriptions.forEach((function(t){return t.unsubscribe()})),this.subscriptions=[]},t.prototype.setData=function(t){var e=t.nodes,n=t.options,a=void 0===n?null:n,r=t.events,i=void 0===r?null:r;a&&(this.options=new s.b(a)),i&&(this.events=i),e&&(this.nodes=e),this.update()},t.prototype.update=function(){var t,e=((t={id:this.options.rootId,virtual:!0})[this.options.childrenField]=this.nodes,t);this.dispose(),this.virtualRoot=new i.a(e,null,this,0),this.roots=this.virtualRoot.children,this.firstUpdate?this.roots&&(this.firstUpdate=!1,this._calculateExpandedNodes()):this.fireEvent({eventName:o.a.updateData})},t.prototype.setFocusedNode=function(t){this.focusedNodeId=t?t.id:null},t.prototype.setFocus=function(t){e.focusedTree=t?this:null},t.prototype.doForAll=function(t){this.roots.forEach((function(e){return e.doForAll(t)}))},t.prototype.focusNextNode=function(){var t=this.getFocusedNode(),e=t?t.findNextNode(!0,!0):this.getFirstRoot(!0);e&&e.focus()},t.prototype.focusPreviousNode=function(){var t=this.getFocusedNode(),e=t?t.findPreviousNode(!0):this.getLastRoot(!0);e&&e.focus()},t.prototype.focusDrillDown=function(){var t=this.getFocusedNode();if(t&&t.isCollapsed&&t.hasChildren)t.toggleExpanded();else{var e=t?t.getFirstChild(!0):this.getFirstRoot(!0);e&&e.focus()}},t.prototype.focusDrillUp=function(){var t=this.getFocusedNode();if(t)if(t.isExpanded)t.toggleExpanded();else{var e=t.realParent;e&&e.focus()}},t.prototype.setActiveNode=function(t,e,n){void 0===n&&(n=!1),n?this._setActiveNodeMulti(t,e):this._setActiveNodeSingle(t,e),e?(t.focus(this.options.scrollOnActivate),this.fireEvent({eventName:o.a.activate,node:t}),this.fireEvent({eventName:o.a.nodeActivate,node:t})):(this.fireEvent({eventName:o.a.deactivate,node:t}),this.fireEvent({eventName:o.a.nodeDeactivate,node:t}))},t.prototype.setSelectedNode=function(t,e){var n;this.selectedLeafNodeIds=Object.assign({},this.selectedLeafNodeIds,((n={})[t.id]=e,n)),e?(t.focus(),this.fireEvent({eventName:o.a.select,node:t})):this.fireEvent({eventName:o.a.deselect,node:t})},t.prototype.setExpandedNode=function(t,e){var n;this.expandedNodeIds=Object.assign({},this.expandedNodeIds,((n={})[t.id]=e,n)),this.fireEvent({eventName:o.a.toggleExpanded,node:t,isExpanded:e})},t.prototype.expandAll=function(){this.roots.forEach((function(t){return t.expandAll()}))},t.prototype.collapseAll=function(){this.roots.forEach((function(t){return t.collapseAll()}))},t.prototype.setIsHidden=function(t,e){var n;this.hiddenNodeIds=Object.assign({},this.hiddenNodeIds,((n={})[t.id]=e,n))},t.prototype.setHiddenNodeIds=function(t){this.hiddenNodeIds=t.reduce((function(t,e){var n;return Object.assign(t,((n={})[e]=!0,n))}),{})},t.prototype.performKeyAction=function(t,e){var n=this.options.actionMapping.keys[e.keyCode];return!!n&&(e.preventDefault(),n(this,t,e),!0)},t.prototype.filterNodes=function(t,e){var n,a=this;if(void 0===e&&(e=!0),!t)return this.clearFilter();if(m()(t))n=function(e){return-1!==e.displayField.toLowerCase().indexOf(t.toLowerCase())};else{if(!v()(t))return console.error("Don't know what to do with filter",t),void console.error("Should be either a string or function");n=t}var r={};this.roots.forEach((function(t){return a._filterNode(r,t,n,e)})),this.hiddenNodeIds=r,this.fireEvent({eventName:o.a.changeFilter})},t.prototype.clearFilter=function(){this.hiddenNodeIds={},this.fireEvent({eventName:o.a.changeFilter})},t.prototype.moveNode=function(t,e){var n=t.getIndexInParent(),a=t.parent;if(this.canMoveNode(t,e,n)){var r=a.getField("children");e.parent.getField("children")||e.parent.setField("children",[]);var i=e.parent.getField("children"),s=r.splice(n,1)[0],u=a===e.parent&&e.index>n?e.index-1:e.index;i.splice(u,0,s),a.treeModel.update(),e.parent.treeModel!==a.treeModel&&e.parent.treeModel.update(),this.fireEvent({eventName:o.a.moveNode,node:s,to:{parent:e.parent.data,index:u},from:{parent:a.data,index:n}})}},t.prototype.copyNode=function(t,e){var n=t.getIndexInParent();if(this.canMoveNode(t,e,n)){e.parent.getField("children")||e.parent.setField("children",[]);var a=e.parent.getField("children"),r=this.options.getNodeClone(t);a.splice(e.index,0,r),t.treeModel.update(),e.parent.treeModel!==t.treeModel&&e.parent.treeModel.update(),this.fireEvent({eventName:o.a.copyNode,node:r,to:{parent:e.parent.data,index:e.index}})}},t.prototype.getState=function(){return{expandedNodeIds:this.expandedNodeIds,selectedLeafNodeIds:this.selectedLeafNodeIds,activeNodeIds:this.activeNodeIds,hiddenNodeIds:this.hiddenNodeIds,focusedNodeId:this.focusedNodeId}},t.prototype.setState=function(t){t&&Object.assign(this,{expandedNodeIds:t.expandedNodeIds||{},selectedLeafNodeIds:t.selectedLeafNodeIds||{},activeNodeIds:t.activeNodeIds||{},hiddenNodeIds:t.hiddenNodeIds||{},focusedNodeId:t.focusedNodeId})},t.prototype.subscribeToState=function(t){var e=this;Object(r.b)((function(){return t(e.getState())}))},t.prototype.canMoveNode=function(t,e,n){return void 0===n&&(n=void 0),n||t.getIndexInParent(),(t.parent!==e.parent||n!==e.index)&&!e.parent.isDescendantOf(t)},t.prototype.calculateExpandedNodes=function(){this._calculateExpandedNodes()},t.prototype._filterNode=function(t,e,n,a){var r=this,i=n(e);return e.children&&e.children.forEach((function(e){r._filterNode(t,e,n,a)&&(i=!0)})),i||(t[e.id]=!0),a&&i&&e.ensureVisible(),i},t.prototype._calculateExpandedNodes=function(t){var e,n=this;void 0===t&&(t=null),(t=t||this.virtualRoot).data[this.options.isExpandedField]&&(this.expandedNodeIds=Object.assign({},this.expandedNodeIds,((e={})[t.id]=!0,e))),t.children&&t.children.forEach((function(t){return n._calculateExpandedNodes(t)}))},t.prototype._setActiveNodeSingle=function(t,e){var n,a=this;this.activeNodes.filter((function(e){return e!==t})).forEach((function(t){a.fireEvent({eventName:o.a.deactivate,node:t}),a.fireEvent({eventName:o.a.nodeDeactivate,node:t})})),this.activeNodeIds=e?((n={})[t.id]=!0,n):{}},t.prototype._setActiveNodeMulti=function(t,e){var n;this.activeNodeIds=Object.assign({},this.activeNodeIds,((n={})[t.id]=e,n))},t.focusedTree=null,x([r.d,_("design:type",Array)],t.prototype,"roots",void 0),x([r.d,_("design:type",Object)],t.prototype,"expandedNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"selectedLeafNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"activeNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"hiddenNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"focusedNodeId",void 0),x([r.d,_("design:type",i.a)],t.prototype,"virtualRoot",void 0),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"focusedNode",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"expandedNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"activeNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"hiddenNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"selectedLeafNodes",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setData",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"update",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setFocusedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setFocus",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"doForAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusNextNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusPreviousNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusDrillDown",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusDrillUp",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object,Object]),_("design:returntype",void 0)],t.prototype,"setActiveNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setSelectedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setExpandedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"expandAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"collapseAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setIsHidden",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setHiddenNodeIds",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"filterNodes",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"clearFilter",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"moveNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"copyNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setState",null),e=x([Object(a.Injectable)()],t)}()},MaPG:function(t,e,n){var a=n("8a/S"),r=n("3a3P"),i=n("VLqJ"),s=n("Wv1A");t.exports=function(t){return i(t)?a(s(t)):r(t)}},MdoF:function(t,e,n){"use strict";n.d(e,"b",(function(){return s})),n.d(e,"c",(function(){return l})),n.d(e,"a",(function(){return c}));var a=n("8Y7J"),r=n("CNMR"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"button",[["aria-label","Close"],["class","close"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.close()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["×"])),(t()(),a["ɵeld"](3,0,null,null,1,"span",[["class","sr-only"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Close"]))],null,null)}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["role","alert"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](4,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"alert alert-"+n.type,n.classes),t(e,4,0,n.dismissible)}),null)}function l(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,u)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.isOpen)}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"alert",[],null,null,null,l,s)),a["ɵdid"](1,114688,null,0,r.a,[r.b,a.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}var c=a["ɵccf"]("alert,bs-alert",r.a,d,{type:"type",dismissible:"dismissible",dismissOnTimeout:"dismissOnTimeout",isOpen:"isOpen"},{onClose:"onClose",onClosed:"onClosed"},["*"])},MuvH:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("IheW"),i=n("pL04");let s=(()=>{class t{constructor(t){this.http=t}findValue(t,e){if(t.value)return t.value.find(t=>t.section===e)}getValue(t,e){let n=this.findValue(t,e);if(!n){const a=e.indexOf(".");-1!==a&&(n=this.findValue(t,e.substring(0,a)))}return n||(n=this.findValue(t,"global")),n?n.value:t.default}getConfigData(){return this.http.get("api/cluster_conf/")}get(t){return this.http.get("api/cluster_conf/"+t)}filter(t){return this.http.get("api/cluster_conf/filter?names="+t.join(","))}create(t){return this.http.post("api/cluster_conf/",t)}delete(t,e){return this.http.delete(`api/cluster_conf/${t}?section=${e}`)}bulkCreate(t){return this.http.put("api/cluster_conf/",t)}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.c))},token:t,providedIn:i.a}),t})()},Mxhz:function(t,e,n){"use strict";var a=n("IheW"),r=n("LRne"),i=n("7o/Q");class s{constructor(t){this.value=t}call(t,e){return e.subscribe(new o(t,this.value))}}class o extends i.a{constructor(t,e){super(t),this.value=e}_next(t){this.destination.next(this.value)}}var u=n("JIr8"),l=n("8Y7J"),d=n("pL04");n.d(e,"a",(function(){return c}));let c=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("api/user")}delete(t){return this.http.delete("api/user/"+t)}get(t){return this.http.get("api/user/"+t)}create(t){return this.http.post("api/user",t)}update(t){return this.http.put("api/user/"+t.username,t)}changePassword(t,e,n){return this.http.post(`api/user/${t}/change_password`,{old_password:e,new_password:n})}validateUserName(t){return this.get(t).pipe(t=>t.lift(new s(!0)),Object(u.a)(t=>(t.preventDefault(),Object(r.a)(!1))))}validatePassword(t,e=null,n=null){let r=new a.h;return r=r.append("password",t),e&&(r=r.append("username",e)),n&&(r=r.append("old_password",n)),this.http.post("api/user/validate_password",null,{params:r})}}return t.ngInjectableDef=l["ɵɵdefineInjectable"]({factory:function(){return new t(l["ɵɵinject"](a.c))},token:t,providedIn:d.a}),t})()},"N+g0":function(t,e,n){var a=n("g6v/"),r=n("m/L8"),i=n("glrk"),s=n("33Wh");t.exports=a?Object.defineProperties:function(t,e){i(t);for(var n,a=s(e),o=a.length,u=0;o>u;)r.f(t,n=a[u++],e[n]);return t}},"NC/Y":function(t,e,n){var a=n("0GbY");t.exports=a("navigator","userAgent")||""},NEZu:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n,a){this.customColors={backgroundColor:void 0,borderColor:void 0},this.checkOffset=!1,this.chartEl=t.nativeElement,this.getStyleLeft=n,this.getStyleTop=a,this.tooltipEl=e.nativeElement}customTooltips(t){if(0===t.opacity)return void(this.tooltipEl.style.opacity=0);if(this.tooltipEl.classList.remove("above","below","no-transform"),this.tooltipEl.classList.add(t.yAlign?t.yAlign:"no-transform"),t.body){const e=t.title||[],n=t.body.map(t=>t.lines);let a="<thead>";e.forEach(t=>{a+="<tr><th>"+this.getTitle(t)+"</th></tr>"}),a+="</thead><tbody>",n.forEach((e,n)=>{const r=t.labelColors[n];let i="background:"+(this.customColors.backgroundColor||r.backgroundColor);i+="; border-color:"+(this.customColors.borderColor||r.borderColor),i+="; border-width: 2px",a+='<tr><td nowrap><span class="chartjs-tooltip-key" style="'+i+'"></span>'+this.getBody(e)+"</td></tr>"}),a+="</tbody>",this.tooltipEl.querySelector("table").innerHTML=a}const e=this.chartEl.offsetTop,n=this.chartEl.offsetLeft;if(this.checkOffset){const e=t.width/2;this.tooltipEl.classList.remove("transform-left"),this.tooltipEl.classList.remove("transform-right"),t.caretX-e<0?this.tooltipEl.classList.add("transform-left"):t.caretX+e>this.chartEl.width&&this.tooltipEl.classList.add("transform-right")}this.tooltipEl.style.left=this.getStyleLeft(t,n),this.tooltipEl.style.top=this.getStyleTop(t,e),this.tooltipEl.style.opacity=1,this.tooltipEl.style.fontFamily=t._fontFamily,this.tooltipEl.style.fontSize=t.fontSize,this.tooltipEl.style.fontStyle=t._fontStyle,this.tooltipEl.style.padding=t.yPadding+"px "+t.xPadding+"px"}getBody(t){return t}getTitle(t){return t}}},NJ4a:function(t,e,n){"use strict";function a(t){setTimeout(()=>{throw t},0)}n.d(e,"a",(function(){return a}))},NJ9Y:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("sVev"),r=n("pLZG"),i=n("BFxc"),s=n("XDbj"),o=n("xbPD"),u=n("SpAZ");function l(t,e){const n=arguments.length>=2;return l=>l.pipe(t?Object(r.a)((e,n)=>t(e,n,l)):u.a,Object(i.a)(1),n?Object(o.a)(e):Object(s.a)(()=>new a.a))}},NSEa:function(t,e,n){var a=n("CNUl");t.exports=function(t,e){var n=e?a(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},NUGo:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("iInd"),s=n("FE24"),o=n("z/SZ"),u=n("GS7A");n("S7zO"),n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return b}));var l=a["ɵcrt"]({encapsulation:0,styles:[[".dropdown-menu[_ngcontent-%COMP%] > .disabled[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{pointer-events:auto;cursor:default!important}"]],data:{}});function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,10,"button",[["type","button"]],null,[[null,"click"]],(function(t,e,n){var r=!0,i=t.component;return"click"===e&&(r=!1!==a["ɵnov"](t,5).onClick()&&r),"click"===e&&(r=!1!==i.useClickAction(t.context.ngIf)&&r),r}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](4,{disabled:0}),a["ɵdid"](5,16384,null,0,i.n,[i.m,i.a,[8,null],a.Renderer2,a.ElementRef],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](8,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](9,1),(t()(),a["ɵeld"](10,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](11,null,["",""]))],(function(t,e){var n=e.component,r=a["ɵinlineInterpolate"](1,"btn btn-",n.btnColor,""),i=t(e,4,0,n.disableSelectionAction(e.context.ngIf));t(e,3,0,r,i),t(e,5,0,e.context.ngIf.preserveFragment?"":null,n.useRouterLink(e.context.ngIf));var s=t(e,9,0,e.context.ngIf.icon);t(e,8,0,s)}),(function(t,e){t(e,11,0,e.context.ngIf.name)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](1,null,[""," "]))],null,(function(t,e){t(e,1,0,e.component.dropDownOnly)}))}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[["class","sr-only"]],null,null,null,null,null))],null,null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"button",[["dropdownToggle",""],["type","button"]],[[8,"className",0],[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick()&&r),r}),null,null)),a["ɵdid"](1,147456,null,0,s.g,[a.ChangeDetectorRef,s.c,a.ElementRef,a.Renderer2,s.f],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.dropDownOnly),t(e,5,0,!n.dropDownOnly)}),(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"btn btn-",e.component.btnColor," dropdown-toggle dropdown-toggle-split"),!0,a["ɵnov"](e,1).isDisabled,a["ɵnov"](e,1).isOpen)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,12,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,11,"li",[["data-toggle","tooltip"],["role","menuitem"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,10,"a",[["class","dropdown-item"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var r=!0,i=t.component;return"click"===e&&(r=!1!==a["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&r),"click"===e&&(r=!1!==i.useClickAction(t.context.$implicit)&&r),r}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](5,{disabled:0}),a["ɵdid"](6,671744,null,0,i.p,[i.m,i.a,r.LocationStrategy],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),a["ɵeld"](7,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](9,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](10,1),(t()(),a["ɵeld"](11,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](12,null,["",""]))],(function(t,e){var n=e.component,a=t(e,5,0,n.disableSelectionAction(e.context.$implicit));t(e,4,0,"dropdown-item",a),t(e,6,0,e.context.$implicit.preserveFragment?"":null,n.useRouterLink(e.context.$implicit));var r=t(e,10,0,e.context.$implicit.icon);t(e,9,0,r)}),(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](1,"",n.toClassName(e.context.$implicit.name),""),a["ɵinlineInterpolate"](1,"",n.useDisableDesc(e.context.$implicit),"")),t(e,2,0,a["ɵnov"](e,6).target,a["ɵnov"](e,6).href),t(e,12,0,e.context.$implicit.name)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](2,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.dropDownActions)}),null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,8,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,s.f,s.f,[]),a["ɵdid"](2,212992,null,0,s.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,o.a,s.f,s.a,u.b],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](8,16384,null,0,s.d,[s.f,a.ViewContainerRef,a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0,n.getCurrentButton()),t(e,6,0,n.showDropDownActions())}),(function(t,e){t(e,0,0,a["ɵnov"](e,2).dropup,a["ɵnov"](e,2).isOpen,a["ɵnov"](e,2).isOpen&&a["ɵnov"](e,2).isBs4)}))}},NaFW:function(t,e,n){var a=n("9d/t"),r=n("P4y1"),i=n("tiKp")("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||r[a(t)]}},Nehr:function(t,e,n){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},NtIB:function(t,e,n){var a=n("uy3s"),r=n("eQba"),i=n("jqoL"),s=n("VLqJ"),o=n("kXVT"),u=n("YLnZ"),l=n("Wv1A");t.exports=function(t,e){return s(t)&&o(e)?u(l(t),e):function(n){var s=r(n,t);return void 0===s&&s===e?i(n,t):a(e,s,3)}}},O741:function(t,e,n){var a=n("hh1v");t.exports=function(t){if(!a(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},O9Tv:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n("YzqF");e.Mutex=a.default},OIDT:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"tree-node-wrapper",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n      <div *ngIf="!templates.treeNodeWrapperTemplate" class="node-wrapper" [style.padding-left]="node.getNodePadding()">\n          <tree-node-checkbox *ngIf="node.options.useCheckbox" [node]="node"></tree-node-checkbox>\n          <tree-node-expander [node]="node"></tree-node-expander>\n          <div class="node-content-wrapper"\n               [class.node-content-wrapper-active]="node.isActive"\n               [class.node-content-wrapper-focused]="node.isFocused"\n               (click)="node.mouseAction(\'click\', $event)"\n               (dblclick)="node.mouseAction(\'dblClick\', $event)"\n               (mouseover)="node.mouseAction(\'mouseOver\', $event)"\n               (mouseout)="node.mouseAction(\'mouseOut\', $event)"\n               (contextmenu)="node.mouseAction(\'contextMenu\', $event)"\n               (treeDrop)="node.onDrop($event)"\n               (treeDropDragOver)="node.mouseAction(\'dragOver\', $event)"\n               (treeDropDragLeave)="node.mouseAction(\'dragLeave\', $event)"\n               (treeDropDragEnter)="node.mouseAction(\'dragEnter\', $event)"\n               [treeAllowDrop]="node.allowDrop"\n               [allowDragoverStyling]="node.allowDragoverStyling()"\n               [treeDrag]="node"\n               [treeDragEnabled]="node.allowDrag()">\n\n              <tree-node-content [node]="node" [index]="index" [template]="templates.treeNodeTemplate">\n              </tree-node-content>\n          </div>\n      </div>\n      <ng-container\n              [ngTemplateOutlet]="templates.treeNodeWrapperTemplate"\n              [ngTemplateOutletContext]="{ $implicit: node, node: node, index: index, templates: templates }">\n      </ng-container>\n  '}),s("design:paramtypes",[])],t)}()},OIYi:function(t,e,n){!function(t){"use strict";t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n("wd/R"))},OLbh:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("s7LF");class r{constructor(t,e){this.modalRef=t,this.modalService=e,this.boundCancel=this.cancel.bind(this),this.canceled=!1,this.confirmationForm=new a.k({}),this.onHide=this.modalService.onHide.subscribe(t=>{this.onCancel&&(t||this.canceled)&&this.onCancel()})}ngOnInit(){if(this.bodyContext=this.bodyContext||{},this.bodyContext.$implicit=this.bodyData,!this.onSubmit)throw new Error("No submit action defined");if(!this.buttonText)throw new Error("No action name defined");if(!this.titleText)throw new Error("No title defined");if(!this.bodyTpl&&!this.description)throw new Error("No description defined")}ngOnDestroy(){this.onHide.unsubscribe()}cancel(){this.canceled=!0,this.modalRef.hide()}stopLoadingSpinner(){this.confirmationForm.setErrors({cdSubmitButton:!0})}}},Oaa7:function(t,e,n){!function(t){"use strict";t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},Ob0Z:function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function a(t,e,n,a){var r="";if(e)switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे"}else switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां"}return r.replace(/%d/i,t)}t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n("wd/R"))},OcYo:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("e0ae");class r{constructor(t,e,n,a){this.elementRef=t,this.renderer=e,this.toastr=n,this.i18n=a}ngOnInit(){const t=this.renderer.createElement("i");this.renderer.addClass(t,"fa"),this.renderer.addClass(t,"fa-clipboard"),this.renderer.setAttribute(t,"title",this.i18n("Copy to clipboard")),this.renderer.appendChild(this.elementRef.nativeElement,t)}getText(){return document.getElementById(this.cdCopy2ClipboardButton).value}onClick(){try{const t=Object(a.a)(),e=this.getText(),n=()=>{this.toastr.success("Copied text to the clipboard successfully.")};["firefox","ie","ios","safari"].includes(t.name)?navigator.clipboard.writeText(e).then(()=>n()):navigator.permissions.query({name:"clipboard-write"}).then(t=>{"granted"!==t.state&&"prompt"!==t.state||navigator.clipboard.writeText(e).then(()=>n())})}catch(t){this.toastr.error("Failed to copy text to the clipboard.")}}}},OjkT:function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n("wd/R"))},Oxv6:function(t,e,n){!function(t){"use strict";var e={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};t.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(t,e){return 12===t&&(t=0),"шаб"===e?t<4?t:t+12:"субҳ"===e?t:"рӯз"===e?t>=11?t:t+12:"бегоҳ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"шаб":t<11?"субҳ":t<16?"рӯз":t<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},P4y1:function(t,e){t.exports={}},P8lu:function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("mrSG"),r=n("IheW"),i=n("LvDl"),s=n("cp0P"),o=n("LRne"),u=n("5+tZ"),l=n("xTzq"),d=n("8Y7J"),c=n("pL04");let f=(()=>{let t=class{constructor(t){this.http=t,this.url="api/rgw/user"}list(){return this.enumerate().pipe(Object(u.a)(t=>t.length>0?Object(s.a)(t.map(t=>this.get(t))):Object(o.a)([])))}enumerate(){return this.http.get(this.url)}enumerateEmail(){return this.http.get(this.url+"/get_emails")}get(t){return this.http.get(`${this.url}/${t}`)}getQuota(t){return this.http.get(`${this.url}/${t}/quota`)}create(t){let e=new r.h;return i.keys(t).forEach(n=>{e=e.append(n,t[n])}),this.http.post(this.url,null,{params:e})}update(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.put(`${this.url}/${t}`,null,{params:n})}updateQuota(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.put(`${this.url}/${t}/quota`,null,{params:n})}delete(t){return this.http.delete(`${this.url}/${t}`)}createSubuser(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.post(`${this.url}/${t}/subuser`,null,{params:n})}deleteSubuser(t,e){return this.http.delete(`${this.url}/${t}/subuser/${e}`)}addCapability(t,e,n){let a=new r.h;return a=a.append("type",e),a=a.append("perm",n),this.http.post(`${this.url}/${t}/capability`,null,{params:a})}deleteCapability(t,e,n){let a=new r.h;return a=a.append("type",e),a=a.append("perm",n),this.http.delete(`${this.url}/${t}/capability`,{params:a})}addS3Key(t,e){let n=new r.h;return n=n.append("key_type","s3"),i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.post(`${this.url}/${t}/key`,null,{params:n})}deleteS3Key(t,e){let n=new r.h;return n=n.append("key_type","s3"),n=n.append("access_key",e),this.http.delete(`${this.url}/${t}/key`,{params:n})}exists(t){return this.enumerate().pipe(Object(u.a)(e=>{const n=i.indexOf(e,t);return Object(o.a)(-1!==n)}))}emailExists(t){return t=decodeURIComponent(t),this.enumerateEmail().pipe(Object(u.a)(e=>{const n=i.indexOf(e,t);return Object(o.a)(-1!==n)}))}};return t.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new t(d["ɵɵinject"](r.c))},token:t,providedIn:c.a}),t=a.__decorate([l.a,a.__metadata("design:paramtypes",[r.c])],t),t})()},PA2r:function(t,e,n){!function(t){"use strict";var e="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),a=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function i(t){return t>1&&t<5&&1!=~~(t/10)}function s(t,e,n,a){var r=t+" ";switch(n){case"s":return e||a?"pár sekund":"pár sekundami";case"ss":return e||a?r+(i(t)?"sekundy":"sekund"):r+"sekundami";case"m":return e?"minuta":a?"minutu":"minutou";case"mm":return e||a?r+(i(t)?"minuty":"minut"):r+"minutami";case"h":return e?"hodina":a?"hodinu":"hodinou";case"hh":return e||a?r+(i(t)?"hodiny":"hodin"):r+"hodinami";case"d":return e||a?"den":"dnem";case"dd":return e||a?r+(i(t)?"dny":"dní"):r+"dny";case"M":return e||a?"měsíc":"měsícem";case"MM":return e||a?r+(i(t)?"měsíce":"měsíců"):r+"měsíci";case"y":return e||a?"rok":"rokem";case"yy":return e||a?r+(i(t)?"roky":"let"):r+"lety"}}t.defineLocale("cs",{months:e,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},PCNd:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},"PEr+":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("EEJc"),s=n("ajRT"),o=n("s7LF"),u=n("+gVj"),l=n("mXUL"),d=n("IZUe"),c=n("ANnk"),f=n("f/UV"),h=n("aexS"),g=n("gp3X"),p=n("sb0X"),b=n("KVJa"),m=n("Z21x"),y=n("sne2"),v=n("0+/T"),x=n("LqlI");n.d(e,"a",(function(){return D}));var _=a["ɵcrt"]({encapsulation:0,styles:[[".modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]{margin-top:1em}.modal-body[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-top:7px}"]],data:{}});function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," "])),a["ɵppd"](2,1),(t()(),a["ɵeld"](3,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](4,null,["",""])),(t()(),a["ɵted"](-1,null,["?"]))],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent.parent,0),n.actionDescription));t(e,1,0,r),t(e,4,0,n.itemNames[0])}))}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," the selected items?"])),a["ɵppd"](2,1),(t()(),a["ɵeld"](3,0,null,null,2,"ul",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,S)),a["ɵdid"](5,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,5,0,e.component.itemNames)}),(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent.parent,0),n.actionDescription));t(e,1,0,r)}))}function N(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["manyNames",2]],null,0,null,I))],(function(t,e){t(e,2,0,1===e.component.itemNames.length,a["ɵnov"](e,3))}),null)}function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," the selected ","?"])),a["ɵppd"](2,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,0),n.actionDescription));t(e,1,0,r,n.itemDescription)}))}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function k(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," ","\n"])),a["ɵppd"](1,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,0,0,t(e,1,0,a["ɵnov"](e.parent,1),n.actionDescription));t(e,0,0,r,n.itemDescription)}))}function E(t){return a["ɵvid"](0,[a["ɵpid"](0,r.LowerCasePipe,[]),a["ɵpid"](0,r.TitleCasePipe,[]),a["ɵqud"](402653184,1,{submitButton:0}),(t()(),a["ɵeld"](3,0,null,null,44,"cd-modal",[],null,null,null,i.c,i.b)),a["ɵdid"](4,49152,[["modal",4]],0,s.a,[],{modalRef:[0,"modalRef"]},null),(t()(),a["ɵeld"](5,0,null,0,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](7,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](8,0,null,1,39,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](9,0,null,null,38,"form",[["name","deletionForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,11).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,11).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,14).onSubmit()&&r),r}),null,null)),a["ɵdid"](10,16384,null,0,o.G,[],null,null),a["ɵdid"](11,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,o.d,null,[o.l]),a["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),a["ɵdid"](14,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](15,0,null,null,25,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,O)),a["ɵdid"](17,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](18,0,null,null,22,"div",[["class","question"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,N)),a["ɵdid"](20,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["noNames",2]],null,0,null,C)),(t()(),a["ɵand"](16777216,null,null,2,null,R)),a["ɵdid"](23,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](24,{form:0}),(t()(),a["ɵeld"](25,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,l.b,l.a)),a["ɵdid"](26,1163264,null,2,u.c,[a.ElementRef,u.g],null,null),a["ɵqud"](603979776,2,{FormControlNames:1}),a["ɵqud"](603979776,3,{messagesBlock:0}),(t()(),a["ɵeld"](29,0,null,0,11,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](30,0,null,null,8,"input",[["autofocus",""],["class","custom-control-input"],["formControlName","confirmation"],["id","confirmation"],["name","confirmation"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t,31).onChange(n.target.checked)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,31).onTouched()&&r),r}),null,null)),a["ɵdid"](31,16384,null,0,o.c,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,o.p,(function(t){return[t]}),[o.c]),a["ɵdid"](33,671744,[[2,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,o.q,null,[o.j]),a["ɵdid"](35,16384,null,0,o.r,[[4,o.q]],null,null),a["ɵdid"](36,4210688,null,0,d.a,[a.ElementRef],{autofocus:[0,"autofocus"]},null),a["ɵdid"](37,4210688,null,0,c.a,[[2,f.a],h.a,a.ElementRef],null,null),a["ɵdid"](38,16384,null,0,u.h,[[3,o.d],u.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵeld"](39,0,null,null,1,"label",[["class","custom-control-label"],["for","confirmation"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Yes, I am sure."])),(t()(),a["ɵeld"](41,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](42,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.callSubmitAction()&&a),a}),g.b,g.a)),a["ɵdid"](43,114688,[[1,4],["submitButton",4]],0,p.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵand"](16777216,null,0,1,null,A)),a["ɵdid"](45,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](46,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,b.b,b.a)),a["ɵdid"](47,49152,null,0,m.a,[r.Location,y.b],{name:[0,"name"],back:[1,"back"]},null),(t()(),a["ɵand"](0,[["deletionHeading",2]],null,0,null,k))],(function(t,e){var n=e.component;t(e,4,0,n.modalRef),t(e,7,0,a["ɵnov"](e,48)),t(e,11,0,n.deletionForm),t(e,14,0,n.deletionForm),t(e,17,0,n.bodyContext,n.bodyTemplate),t(e,20,0,n.itemNames,a["ɵnov"](e,21));var r=t(e,24,0,n.deletionForm);t(e,23,0,r,n.childFormGroupTemplate),t(e,26,0),t(e,33,0,"confirmation"),t(e,36,0,""),t(e,38,0,"confirmation"),t(e,43,0,n.deletionForm),t(e,45,0,a["ɵnov"](e,48)),t(e,47,0,"Cancel",n.modalRef.hide)}),(function(t,e){t(e,9,0,a["ɵnov"](e,13).ngClassUntouched,a["ɵnov"](e,13).ngClassTouched,a["ɵnov"](e,13).ngClassPristine,a["ɵnov"](e,13).ngClassDirty,a["ɵnov"](e,13).ngClassValid,a["ɵnov"](e,13).ngClassInvalid,a["ɵnov"](e,13).ngClassPending),t(e,25,0,a["ɵnov"](e,26).hasErrors,a["ɵnov"](e,26).hasSuccess),t(e,30,0,a["ɵnov"](e,35).ngClassUntouched,a["ɵnov"](e,35).ngClassTouched,a["ɵnov"](e,35).ngClassPristine,a["ɵnov"](e,35).ngClassDirty,a["ɵnov"](e,35).ngClassValid,a["ɵnov"](e,35).ngClassInvalid,a["ɵnov"](e,35).ngClassPending,a["ɵnov"](e,38).validClass,a["ɵnov"](e,38).invalidClass)}))}function L(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-deletion-modal",[],null,null,null,E,_)),a["ɵdid"](1,114688,null,0,v.a,[x.a],null,null)],(function(t,e){t(e,1,0)}),null)}var D=a["ɵccf"]("cd-deletion-modal",v.a,L,{},{},[])},PHub:function(t,e,n){var a=n("PnUS"),r=n("x3F9"),i=Object.prototype,s=i.hasOwnProperty,o=i.propertyIsEnumerable,u=a(function(){return arguments}())?a:function(t){return r(t)&&s.call(t,"callee")&&!o.call(t,"callee")};t.exports=u},PKPk:function(t,e,n){"use strict";var a=n("ZUd8").charAt,r=n("afO8"),i=n("fdAy"),s=r.set,o=r.getterFor("String Iterator");i(String,"String",(function(t){s(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=o(this),n=e.string,r=e.index;return r>=n.length?{value:void 0,done:!0}:(t=a(n,r),e.index+=t.length,{value:t,done:!1})}))},PeUW:function(t,e,n){!function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e||"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})}(n("wd/R"))},PjNX:function(t,e,n){var a=n("eH2F")();t.exports=a},PnUS:function(t,e,n){var a=n("LaC8"),r=n("x3F9");t.exports=function(t){return r(t)&&"[object Arguments]"==a(t)}},PpIw:function(t,e,n){!function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})}(n("wd/R"))},PqYM:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("D0XW"),i=n("Y7HM"),s=n("z+Ro");function o(t=0,e,n){let o=-1;return Object(i.a)(e)?o=Number(e)<1?1:Number(e):Object(s.a)(e)&&(n=e),Object(s.a)(n)||(n=r.a),new a.a(e=>{const a=Object(i.a)(t)?t:+t-n.now();return n.schedule(u,a,{index:0,period:o,subscriber:e})})}function u(t){const{index:e,period:n,subscriber:a}=t;if(a.next(e),!a.closed){if(-1===n)return a.complete();t.index=e+1,this.schedule(t,n)}}},Q7RW:function(t,e,n){var a=n("LaC8"),r=n("hmSm");t.exports=function(t){if(!r(t))return!1;var e=a(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},QC43:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("MdoF"),i=n("CNMR"),s=n("SVse");n("XFyV"),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u}));var o=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"alert",[["type","info"]],null,null,null,r.c,r.b)),a["ɵdid"](1,114688,null,0,i.a,[i.b,a.ChangeDetectorRef],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,"strong",[],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,s["ɵNgClassImpl"],s["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,s.NgClass,[s["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,2),a["ɵncd"](0,0)],(function(t,e){var n=e.component;t(e,1,0,"info");var a=t(e,6,0,n.icons.spinner,n.icons.spin);t(e,5,0,a)}),null)}},QCZx:function(t,e,n){var a=n("2zzJ"),r=n("7+rY"),i=n("MOZO");t.exports=function(t,e,n){for(var s=-1,o=e.length,u={};++s<o;){var l=e[s],d=a(t,l);n(d,l)&&r(u,i(l,t),d)}return u}},QFaf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("s7LF");class r extends a.k{constructor(t,e,n){super(t,e,n),this.controls=t}get(t){const e=this._get(t);if(!e)throw new Error(`Control '${t}' could not be found!`);return e}_get(t){return super.get(t)||Object.values(this.controls).filter(t=>t.get).map(e=>e instanceof r?e._get(t):e.get(t)).find(t=>Boolean(t))}getValue(t){return this.get(t).value}silentSet(t,e){this.get(t).setValue(e,{emitEvent:!1})}showError(t,e,n){const a=this.get(t);return(e.submitted||a.dirty)&&(n?a.hasError(n):a.invalid)}}},QTAa:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("t/zF");class r extends a.a{}},QUkU:function(t,e,n){var a=n("JEWA"),r=n("im1V"),i=n("Uies"),s=n("hmSm");t.exports=function(t,e,n){if(!s(n))return!1;var o=typeof e;return!!("number"==o?r(n)&&i(e,n.length):"string"==o&&e in n)&&a(n[e],t)}},QWBl:function(t,e,n){"use strict";var a=n("I+eb"),r=n("F8JR");a({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},Qj4J:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n("wd/R"))},QjCD:function(t,e,n){var a=n("kGkW"),r=n("nC65"),i=n("YLnZ");t.exports=function(t){var e=r(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||a(n,t,e)}}},Qo9l:function(t,e,n){var a=n("2oRo");t.exports=a},QpVZ:function(t,e,n){var a=n("LaC8"),r=n("x3F9");t.exports=function(t){return"symbol"==typeof t||r(t)&&"[object Symbol]"==a(t)}},QuoE:function(t,e,n){var a=n("bX23"),r=n("vIot"),i=n("0rEg");t.exports=function(t,e,n){return e==e?i(t,e,n):a(t,r,n)}},R2cF:function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},R6RA:function(t,e,n){var a=n("hmSm"),r=Object.create,i=function(){function t(){}return function(e){if(!a(e))return{};if(r)return r(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},R8cQ:function(t,e,n){var a=n("pMcL"),r=n("xAZD"),i=n("0GLT"),s=n("QpVZ"),o=a?a.prototype:void 0,u=o?o.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return r(e,t)+"";if(s(e))return u?u.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},RAwQ:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?r[n][0]:r[n][1]}function n(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10;return n(0===e?t/10:e)}if(t<1e4){for(;t>=10;)t/=10;return n(t)}return n(t/=1e3)}t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(t){return n(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t},past:function(t){return n(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t},s:"e puer Sekonnen",ss:"%d Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},RBUI:function(t,e){t.exports=function(t,e){for(var n=-1,a=Array(t);++n<t;)a[n]=e(n);return a}},RK3t:function(t,e,n){var a=n("0Dky"),r=n("xrYK"),i="".split;t.exports=a((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==r(t)?i.call(t,""):Object(t)}:Object},RNIs:function(t,e,n){var a=n("tiKp"),r=n("fHMY"),i=n("m/L8"),s=a("unscopables"),o=Array.prototype;null==o[s]&&i.f(o,s,{configurable:!0,value:r(null)}),t.exports=function(t){o[s][t]=!0}},Rf2I:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("s7LF"),r=n("LvDl");n("2EZI"),n("Fgil"),n("aXbf");class i{constructor(t,e,n,a,r){this.bsModalRef=t,this.formBuilder=e,this.formatter=n,this.dimlessBinaryPipe=a,this.i18n=r}ngOnInit(){this.createForm()}createForm(){const t={};this.fields.forEach(e=>{t[e.name]=this.createFormControl(e)}),this.formGroup=this.formBuilder.group(t)}createFormControl(t){let e=[];return r.isBoolean(t.required)&&t.required&&e.push(a.B.required),t.validators&&(e=e.concat(t.validators)),new a.i(r.defaultTo("binary"===t.type?this.dimlessBinaryPipe.transform(t.value):t.value,null),{validators:e})}getError(t){const e=this.formGroup.get(t.name).errors;return Object.keys(e).map(n=>this.getErrorMessage(n,e[n],t.errors)).join("<br>")}getErrorMessage(t,e,n){if(n){const e=n[t];if(e)return e}return["binaryMin","binaryMax"].includes(t)?e(this.i18n):this.i18n("required"===t?"This field is required.":"An error occurred.")}onSubmitForm(t){this.fields.filter(t=>"binary"===t.type).map(t=>t.name).forEach(e=>{const n=t[e];n&&(t[e]=this.formatter.toBytes(n))}),this.bsModalRef.hide(),r.isFunction(this.onSubmit)&&this.onSubmit(t)}}},Rm1S:function(t,e,n){"use strict";var a=n("14Sl"),r=n("glrk"),i=n("UMSQ"),s=n("HYAF"),o=n("iqWW"),u=n("FMNM");a("match",1,(function(t,e,n){return[function(e){var n=s(this),a=null==e?void 0:e[t];return void 0!==a?a.call(e,n):new RegExp(e)[t](String(n))},function(t){var a=n(e,t,this);if(a.done)return a.value;var s=r(t),l=String(this);if(!s.global)return u(s,l);var d=s.unicode;s.lastIndex=0;for(var c,f=[],h=0;null!==(c=u(s,l));){var g=String(c[0]);f[h]=g,""===g&&(s.lastIndex=o(l,i(s.lastIndex),d)),h++}return 0===h?null:f}]}))},RnhZ:function(t,e,n){var a={"./af":"K/tc","./af.js":"K/tc","./ar":"jnO4","./ar-dz":"o1bE","./ar-dz.js":"o1bE","./ar-kw":"Qj4J","./ar-kw.js":"Qj4J","./ar-ly":"HP3h","./ar-ly.js":"HP3h","./ar-ma":"CoRJ","./ar-ma.js":"CoRJ","./ar-sa":"gjCT","./ar-sa.js":"gjCT","./ar-tn":"bYM6","./ar-tn.js":"bYM6","./ar.js":"jnO4","./az":"SFxW","./az.js":"SFxW","./be":"H8ED","./be.js":"H8ED","./bg":"hKrs","./bg.js":"hKrs","./bm":"p/rL","./bm.js":"p/rL","./bn":"kEOa","./bn.js":"kEOa","./bo":"0mo+","./bo.js":"0mo+","./br":"aIdf","./br.js":"aIdf","./bs":"JVSJ","./bs.js":"JVSJ","./ca":"1xZ4","./ca.js":"1xZ4","./cs":"PA2r","./cs.js":"PA2r","./cv":"A+xa","./cv.js":"A+xa","./cy":"l5ep","./cy.js":"l5ep","./da":"DxQv","./da.js":"DxQv","./de":"tGlX","./de-at":"s+uk","./de-at.js":"s+uk","./de-ch":"u3GI","./de-ch.js":"u3GI","./de.js":"tGlX","./dv":"WYrj","./dv.js":"WYrj","./el":"jUeY","./el.js":"jUeY","./en-SG":"zavE","./en-SG.js":"zavE","./en-au":"Dmvi","./en-au.js":"Dmvi","./en-ca":"OIYi","./en-ca.js":"OIYi","./en-gb":"Oaa7","./en-gb.js":"Oaa7","./en-ie":"4dOw","./en-ie.js":"4dOw","./en-il":"czMo","./en-il.js":"czMo","./en-nz":"b1Dy","./en-nz.js":"b1Dy","./eo":"Zduo","./eo.js":"Zduo","./es":"iYuL","./es-do":"CjzT","./es-do.js":"CjzT","./es-us":"Vclq","./es-us.js":"Vclq","./es.js":"iYuL","./et":"7BjC","./et.js":"7BjC","./eu":"D/JM","./eu.js":"D/JM","./fa":"jfSC","./fa.js":"jfSC","./fi":"gekB","./fi.js":"gekB","./fo":"ByF4","./fo.js":"ByF4","./fr":"nyYc","./fr-ca":"2fjn","./fr-ca.js":"2fjn","./fr-ch":"Dkky","./fr-ch.js":"Dkky","./fr.js":"nyYc","./fy":"cRix","./fy.js":"cRix","./ga":"USCx","./ga.js":"USCx","./gd":"9rRi","./gd.js":"9rRi","./gl":"iEDd","./gl.js":"iEDd","./gom-latn":"DKr+","./gom-latn.js":"DKr+","./gu":"4MV3","./gu.js":"4MV3","./he":"x6pH","./he.js":"x6pH","./hi":"3E1r","./hi.js":"3E1r","./hr":"S6ln","./hr.js":"S6ln","./hu":"WxRl","./hu.js":"WxRl","./hy-am":"1rYy","./hy-am.js":"1rYy","./id":"UDhR","./id.js":"UDhR","./is":"BVg3","./is.js":"BVg3","./it":"bpih","./it-ch":"bxKX","./it-ch.js":"bxKX","./it.js":"bpih","./ja":"B55N","./ja.js":"B55N","./jv":"tUCv","./jv.js":"tUCv","./ka":"IBtZ","./ka.js":"IBtZ","./kk":"bXm7","./kk.js":"bXm7","./km":"6B0Y","./km.js":"6B0Y","./kn":"PpIw","./kn.js":"PpIw","./ko":"Ivi+","./ko.js":"Ivi+","./ku":"JCF/","./ku.js":"JCF/","./ky":"lgnt","./ky.js":"lgnt","./lb":"RAwQ","./lb.js":"RAwQ","./lo":"sp3z","./lo.js":"sp3z","./lt":"JvlW","./lt.js":"JvlW","./lv":"uXwI","./lv.js":"uXwI","./me":"KTz0","./me.js":"KTz0","./mi":"aIsn","./mi.js":"aIsn","./mk":"aQkU","./mk.js":"aQkU","./ml":"AvvY","./ml.js":"AvvY","./mn":"lYtQ","./mn.js":"lYtQ","./mr":"Ob0Z","./mr.js":"Ob0Z","./ms":"6+QB","./ms-my":"ZAMP","./ms-my.js":"ZAMP","./ms.js":"6+QB","./mt":"G0Uy","./mt.js":"G0Uy","./my":"honF","./my.js":"honF","./nb":"bOMt","./nb.js":"bOMt","./ne":"OjkT","./ne.js":"OjkT","./nl":"+s0g","./nl-be":"2ykv","./nl-be.js":"2ykv","./nl.js":"+s0g","./nn":"uEye","./nn.js":"uEye","./pa-in":"8/+R","./pa-in.js":"8/+R","./pl":"jVdC","./pl.js":"jVdC","./pt":"8mBD","./pt-br":"0tRk","./pt-br.js":"0tRk","./pt.js":"8mBD","./ro":"lyxo","./ro.js":"lyxo","./ru":"lXzo","./ru.js":"lXzo","./sd":"Z4QM","./sd.js":"Z4QM","./se":"//9w","./se.js":"//9w","./si":"7aV9","./si.js":"7aV9","./sk":"e+ae","./sk.js":"e+ae","./sl":"gVVK","./sl.js":"gVVK","./sq":"yPMs","./sq.js":"yPMs","./sr":"zx6S","./sr-cyrl":"E+lV","./sr-cyrl.js":"E+lV","./sr.js":"zx6S","./ss":"Ur1D","./ss.js":"Ur1D","./sv":"X709","./sv.js":"X709","./sw":"dNwA","./sw.js":"dNwA","./ta":"PeUW","./ta.js":"PeUW","./te":"XLvN","./te.js":"XLvN","./tet":"V2x9","./tet.js":"V2x9","./tg":"Oxv6","./tg.js":"Oxv6","./th":"EOgW","./th.js":"EOgW","./tl-ph":"Dzi0","./tl-ph.js":"Dzi0","./tlh":"z3Vd","./tlh.js":"z3Vd","./tr":"DoHr","./tr.js":"DoHr","./tzl":"z1FC","./tzl.js":"z1FC","./tzm":"wQk9","./tzm-latn":"tT3J","./tzm-latn.js":"tT3J","./tzm.js":"wQk9","./ug-cn":"YRex","./ug-cn.js":"YRex","./uk":"raLr","./uk.js":"raLr","./ur":"UpQW","./ur.js":"UpQW","./uz":"Loxo","./uz-latn":"AQ68","./uz-latn.js":"AQ68","./uz.js":"Loxo","./vi":"KSF8","./vi.js":"KSF8","./x-pseudo":"/X5v","./x-pseudo.js":"/X5v","./yo":"fzPg","./yo.js":"fzPg","./zh-cn":"XDpg","./zh-cn.js":"XDpg","./zh-hk":"SatO","./zh-hk.js":"SatO","./zh-tw":"kOpN","./zh-tw.js":"kOpN"};function r(t){var e=i(t);return n(e)}function i(t){if(!n.o(a,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return a[t]}r.keys=function(){return Object.keys(a)},r.resolve=i,t.exports=r,r.id="RnhZ"},RvDp:function(t,e,n){var a=n("MOZO"),r=n("PHub"),i=n("0GLT"),s=n("Uies"),o=n("KNDS"),u=n("Wv1A");t.exports=function(t,e,n){for(var l=-1,d=(e=a(e,t)).length,c=!1;++l<d;){var f=u(e[l]);if(!(c=null!=t&&n(t,f)))break;t=t[f]}return c||++l!=d?c:!!(d=null==t?0:t.length)&&o(d)&&s(f,d)&&(i(t)||r(t))}},S6ln:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=t+" ";switch(n){case"ss":return a+(1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return a+(1===t?"minuta":2===t||3===t||4===t?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return a+(1===t?"sat":2===t||3===t||4===t?"sata":"sati");case"dd":return a+(1===t?"dan":"dana");case"MM":return a+(1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci");case"yy":return a+(1===t?"godina":2===t||3===t||4===t?"godine":"godina")}}t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},S7zO:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LvDl"),r=n("oxzT");n("vCyI"),n("jKX/");class i{constructor(){this.btnColor="secondary",this.dropDownActions=[],this.icons=r.a}ngOnInit(){this.removeActionsWithNoPermissions(),this.updateDropDownActions()}toClassName(t){return t.replace(/ /g,"-").replace(/[^a-z-]/gi,"").toLowerCase()}removeActionsWithNoPermissions(){if(!this.permission)return void(this.tableActions=[]);const t=Object.keys(this.permission).filter(t=>this.permission[t]);this.tableActions=this.tableActions.filter(e=>t.includes(e.permission))}updateDropDownActions(){this.dropDownActions=this.tableActions.filter(t=>t.visible?t.visible(this.selection):t)}getCurrentButton(){if(this.dropDownOnly)return;let t=this.dropDownActions.find(t=>this.showableAction(t));return!t&&this.dropDownActions.length>0&&(t=this.dropDownActions[0]),t}showableAction(t){const e=t.canBePrimary,n=this.selection.hasSingleSelection,a="create"===t.permission?!n:n;return e&&e(this.selection)||!e&&a}useRouterLink(t){if(t.routerLink&&!this.disableSelectionAction(t))return a.isString(t.routerLink)?t.routerLink:t.routerLink()}disableSelectionAction(t){const e=t.disable;if(e)return Boolean(e(this.selection));const n=t.permission,a=this.selection.hasSingleSelection&&this.selection.first();return Boolean(["update","delete"].includes(n)&&(!a||a.cdExecuting))}showDropDownActions(){return this.updateDropDownActions(),this.dropDownActions.length>1}useClickAction(t){return!this.disableSelectionAction(t)&&t.click&&t.click()}useDisableDesc(t){if(t.disable){const e=t.disable(this.selection);return a.isString(e)?e:void 0}}}},"SB+Q":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return encodeURIComponent(t)}}},SDUG:function(t,e,n){var a=n("PjNX"),r=n("FGWQ");t.exports=function(t,e){return t&&a(t,e,r)}},SFxW:function(t,e,n){!function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10;return t+(e[n]||e[t%100-n]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},SPu7:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="pl-PL">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Rozwiń</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Pulpit</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klaster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosty</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitory</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Usługi</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD-ki</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfiguracja</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH mapa</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Zarządca modułów</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Logi</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pule</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Dostęp blokowy</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Obrazy</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Kopia lustrzana</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>Sieciowy system plików NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Systemy plików</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Dostęp obiektowy</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Demony</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Wiadra</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Wybierz język</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Trwa ładowanie danych...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Wybór czasu Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Zresetuj ustawienia</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Wstecz</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Błąd wczytywania danych.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>Wybrane</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>Znaleziono</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>Razem</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nazwa</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Opis</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Długi opis</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Domyślna</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Domyślny demon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Wartości</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Zapisz</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>widok CRUSH mapy</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Ładowanie...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nazwa hosta</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Pole jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Tak, jestem pewny.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Anuluj</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Zamknij</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista hostów</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Całkowita wydajność</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nie znaleziono wejść</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Logi z klastra </target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Audyt logów</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Ładowanie konfiguracji.</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Nie można załadować konfiguracji</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Edytuj moduł zarządzania</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Wpisana wartość nie jest poprawnym UUID, np. 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Wpisana wartość musi być poprawnym adresem IP</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Podana wartość musi być liczbą</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Podana wartość musi być liczbą albo dziesiętną.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Zaktualizuj</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Klaster ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Zmodyfikowana monmapa</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>epoka monmap</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kworum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kworum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>wymagany con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>Wymagane mon </target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>W kworum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Nie w kworum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Dodaj</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funkcje</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flagi OSD w całym klastrze</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Zatwierdź</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Zaawansowane...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorytet odzyskiwania OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorytet</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Dostosuj wartości priorytetowe</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>To pole jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Wartość powinna być pomiędzy 0 a 1. </target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ponowne ważenie</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, wybierz, 1 {Głębokość} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, wybierz, 1 {głębokość} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista OSD-ków </target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Wartość</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Edytuj</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Usuń</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Zdrowie</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statystyki</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klienci</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Każdy klient ma dostęp</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresy</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Obowiązkowe pole</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Musi zawierać jedną albo więcej ,rozdzielonych przecinkiem, wartości </target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Na przykład: </target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Typ dostępu</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Dodaj klientów </target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Brak dostępnego klastra -- </target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Wybierz klaster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Dodaj demona</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Pamięć Podręczna</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Brak danych puli -- </target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Wybierz pamięć podręczną -- </target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Użytkownik dostępu obiektowego</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Brak dostępnych użytkowników -- </target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Wybierz użytkownika dostępu obiektowego -- </target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS Użytkownik ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Brak dostępnych klientów -- </target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Wybierz klienta cephx -- </target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nazwa CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etykieta bezpieczeństwa</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Uruchom etykietę bezpieczeństwa</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Ścieżka CephFS </target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Ścieżka powinna zaczynać się z \'/\' i następne może być słowo</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Nowy katalog będzie stworzony. </target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Ścieżka</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Ścieżką może być tylko \'/\' albo słowo</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Nowe wiadro będzie stworzone </target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protokół NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klient może nie montować podkatalogów ( np. jeśli Tag = foo, klient może nie montować foo/baz) </target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Używając różnych opcji Tagu, ta sama Ścieżka może być wyeksportowana kilka razy.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Używając różnych opcji Pseudo, ta sama Ścieżka może być wyeksportowana kilka razy.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Brak dostępnych typów dostępu --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Wybierz typ dostępu --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>- Brak squasha -</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Wybierz, jakiego rodzaju identyfikacja użytkownika ma być przeprowadzana --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protokół Transportu </target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Witamy w Cephie! </target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nazwa użytkownika jest wymagana</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Hasło jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Zaloguj</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Przepraszam, użytkownik nie istnieje w  Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Zakazany</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Przepraszam, nie masz dostępu do tego czego szukasz. </target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Konfiguracja RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Usuń wartość konfiguracji lokalnej. Wartość konfiguracji rodzica będzie odziedziczona i zostanie użyta zamiast tej.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Minimalna wartość wynosi 0.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista puli</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Nazwa może składać się z alfanumerycznych znaków, kresek i podkreśleń.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Wybrana nazwa profilu kodu kasowania jest już używana.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Wtyczka</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Ramka danych (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Musi być większa bądź równa 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Kodowanie kawałka (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Musi być większa bądź równa 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estymator trwałości (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Lokalność  (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domena niepowodzenia Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalność Crusha</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nic</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technika</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Rozmiar pakietu</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>korzeń Crusha</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>urządzenie klasy Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>którykolwiek</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Katalog</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nazwa...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Wybrana nazwa Ceph pula jest już użyta.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Typ pula</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Wybierz typ pula --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupa umieszczenia</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Przynajmniej jedna grupa umieszczenia jest wymagana</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Twój klaster nie obsługuje tylu PG. Skalkuluj proszę potrzebną ilość PG.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Pomoc obliczeniowa</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Replikowany rozmiar</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flagi</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC Nadpisuje</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Zastosowania</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Skasuj profil kodu.</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Brak profilu kasowania --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Wybierz profil kodu wymazywania --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>zbiór zasad Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Wybierz zasadę Crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>zasada Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Kroki Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Kompresja</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Tryb</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorytm</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Brak algorytmu kompresji wymazywania --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>np. 128 KB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Wartość powinna być większa niż 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Maksymalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>np. 512 KB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Wartość powinna być większa niż minimalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Stosunek</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Skompresowany stosunek</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Wartość powinna być pomiędzy 0.0, a 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>np. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Szczegóły</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Szczegóły wydajności</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Szczegóły poziomów pamięci podręcznej</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Przenieś obraz do kosza</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Zabezpieczenie wygasa w </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NIEZABEZPIECZONY </target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Zły format daty. Proszę używać "RRRR-MM-DD GG:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Ochrona już wygasła. Proszę wybrać przyszłą datę lub zostawić pustą.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Przenieś obraz</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Przegląd</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Obiekty docelowe</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Uwierzytelnianie wykrywania</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Użytkownik</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nazwy użytkowników muszą mieć długość od 8 do 64 znaków i \nmogą zawierać jedynie litery, \'.\', \'@\', \'-\', \'_\' lub \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Hasło</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Wspólny użytkownik </target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Wspólne hasło</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Dostępne informacje: </target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>obiekty docelowe iSCSI niedostępne </target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pul</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Dane pula</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Utworzony</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Rozmiar</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Obiekty</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Rozmiar obiektu</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Zaopatrzony</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>Niedostępny</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Całkowite rezerwy</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Jednostka maskowana</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Licznik maskowania</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Rodzic</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefiks nazwy bloku</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Zamówienie</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Migawki</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Obraz</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>To ustawienie zastępuję wartość globalną.</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globalne</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>To jest globalna wartość. Dla tego obrazu nie ustawiono żadnej wartości dla tej opcji.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' and \'@\' nie są dozwolone.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Brak dostępnych rbd puli --  </target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Wybierz pul --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Użyj dedykowanych danych pul </target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Dane pul</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Dedykowany pul, który przechowuje dane obiektowe z RBD</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Musisz zwiększyć rozmiar.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Zaawansowane</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Maskowanie</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Jednostka pasków</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Wybierz jednostkę pasków -- </target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Pole jest wymagane, ponieważ licznik pasków jest zdefiniowany. </target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Jednostka pasków jest większa niż rozmiar obiektu.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Licznik pasków </target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Pole jest wymagane, ponieważ jednostka pasków jest zdefiniowana! </target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Licznik pasków musi być większy od 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Zaraz się wycofasz. </target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Usuń Śmieci</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Wszystkie</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pul:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nazwa pula</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Przywróć obraz</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Przywróć</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>Wpisz nazwe nowego obrazu i kliknij. </target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nowa Nazwa</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Wygasły w</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Zabezpieczony do</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Zmiana tych parametrów z domyślnych wartości przeważnie nie jest potrzebna.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Ustawienia</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Tylny koniec przechowywania</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Potwierdź</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Ustawienia zaawansowane</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Nazwa IQN obiektu docelowego iSCSI</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Błędna składnia nazwy IQN.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Na przykład: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Więcej informacji</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Ten obiekt docelowy  zmodyfikował zaawansowane ustawienia.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portale</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Dodaj portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Ten obraz zmodyfikował ustawienia. </target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Dodaj obraz.</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Uwierzytelnianie ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Inicjatory iSCSI</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Inicjator iSCSI</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Klient IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Inicjator IQN powinien być unikalny.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nazwy użytkowników muszą mieć długość od 8 do 64 znaków i mogą zawierać jedynie litery,  \'.\', \'@\', \'-\', \'_\' lub  \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Inicjator iSCSI należą do grupy. Obrazy będą skonfigurowane w grupie. </target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Brak dodanych pozycji.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Dodaj inicjator iSCSI</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupy</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupa</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Dodaj grupę</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Kosz</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Zagadnienia</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronizacja</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Gotowy</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Tryb edycji lustrzanego pula</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Sparowany klaster musi być usunięty  przed wyłączeniem lustra. </target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, wybierz, edytuj{Edytuj} inaczej {Dodaj} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nazwa Klastra</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Nazwa klastra jest niepoprawna </target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>ID CephX nie jest poprawne.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adres monitora </target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Adresy rozdzielane przecinkami... </target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Adres monitora nie jest poprawny.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Klucz CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Klucz zakodowany w Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Klucz CephX musi być zakodowany w Base64/</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Liczniki wydajności nie są dostępne</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista demonów</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Liczniki wydajności</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Ładowanie wiadra danych</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Number ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Wartość nie jest poprawna.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Wybrana nazwa już jest użyta.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Właściciel</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Wybierz użytkownika -- </target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Uaktywniony</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Typ indeksu</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Zasada umieszczania</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Znacznik</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Maksymalny znacznik</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Wersja</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Główna wersja</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Czas modyfikacji</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Strefa </target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>kontyngent wiadra</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Maksymalny rozmiar</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Nielimitowany</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Maksimum obiektów</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nazwa użytkownika</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Wybierz nazwę użytkownika -- </target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Auto-generowany klucz</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Klucz dostępu</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Tajny klucz </target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Pełne imię </target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Adres email</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Zawieszony</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>System</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Maksimum wiader</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>pod-użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Zdolności</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Limit użytkownika</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Pokaż</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Klucze</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- wybierz typ --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Pozwolenie </target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Wybierz pozwolenie --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>pod-użytkownik</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Wybrane ID pod-użytkownika jest już użyte.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>odczyt, zapis</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>pełny</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Szybki klucz</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Auto-generowany sekret</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Ładowanie danych użytkownika...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Nie można załadować danych użytkownika.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Wybrane ID użytkownika jest już użyte.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ten adres email nie jest poprawny.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Wybrany adres email jest już użyty.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Max. wiader </target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Wyłączony</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Zwyczaj</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>klucz S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Nie ma pod-użytkowników.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3 (prosty serwis przechowywania) </target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Nie ma kluczy.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Szybki</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Nie ma zdolności. </target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Nielimitowany rozmiar</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Max. rozmiar</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Nielimitowane obiekty</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Max. obiektów</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Podana wartość musi być &gt;= 0</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Opis...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Pozwolenia</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Role</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Potwierdź hasło</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Potwierdzające hasło nie pokrywa się z hasłem.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Email</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Niepoprawny email.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Zamierzasz usunąć uprawnienia „odczytu / aktualizacji użytkownika” od własnego użytkownika.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Jeśli kontynuujesz, nie będziesz mógł dodawać albo usuwać role od użytkowników.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Jesteś pewny, że chcesz kontynuować? </target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Pomoc</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentacja</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>Interfejs API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>O</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Ustawienia Pulpitu</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Zarządzanie użytkownikami</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Zalogowany użytkownik</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Wyloguj</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atrybuty (mapa OSD-ków)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Niedostępne metadane</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadane</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Licznik wydajności</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Pisze</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Czyta</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Obecne wartości </target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Źródło </target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Poziom</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Może być aktualizowany w czasie wykonywania (edytowalny)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tagi</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Wartości enumerowane </target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Zobacz także </target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status klastra</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Zarządzanie demonami</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Obiekty bram </target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Serwery metadanych</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Bramy iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>Klient IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Przepustowość klienta</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Odczyt/Zapis klienta</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Przepustowość odzyskiwania</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Szoruj</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Wydajność</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Pojemność rzędu</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PG-y na OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Pojemność</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Szeregi</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Obecny</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Zaktualizowane uwierzytelnianie wykrywania</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Brak dostępnych portali.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Nie ma dostępnych obrazów. </target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Nie ma dostępnych obrazów. Proszę się upewnić, że dodajesz obraz do obiektu docelowego. </target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Nie ma dostępnych inicjatorów iSCSI. Proszę upewnić się, że dodajesz inicjator iSCSI do obiektu docelowego.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>obiekt docelowy iSCSI</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stan</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Odczyt bajtów </target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Zapis bajtów</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Odczyt Ops</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Zapis Ops</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Od</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instancja</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Zagadnienie </target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Progres</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Tryb Edycji</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Dodaj parowanie </target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Edytuj parowanie</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Usuń parowanie</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Lider</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Lokalny</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Zdalny</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>lustrzane parowanie</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Klucz</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Głębokie spłaszczenie</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Warstwowanie </target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Wyłączna blokada</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa obiektów (wymaga wyłącznej blokady)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Kronikowanie  (wymaga wyłącznej blokady)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NIEZABEZPIECZONY </target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Wycofywanie migawek RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Wycofanie</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>migawka RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Usunięty o </target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stan</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>wersja</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>administrator</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Czuwanie demona </target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Ranga</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Demon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktywność</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>centrale</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>i-węzły</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Użycie</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Zaktualizowany</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Wartość może być zaktualizowana w czasie wykonywania . </target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Demony/klienci nie pobierają tej wartości z\nbazy danych skonfigurowanego monitora. Nie zezwalamy na ustawienie tej opcji przez \'konfiguracje ceph\nustaw.. \'. Ta opcja powinna być skonfigurowana przez ceph.conf albo przez\nterminal.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Opcja działa tylko podczas startu demona.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Opcja dotyczy tylko tworzenia klastra.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Opcja tylko wpływa na tworzenie demona.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Usługa</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Obecna wartość</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Edytowalny</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Włączyć</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Wyłączyć</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Ponowne łączenie, proszę czekać</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Adres publiczny</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Otwarte sesje</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Nie w </target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD-ki, które zostały oznaczone jako poza, nie będą oznaczone ponownie jako w gdy zostaną uruchomion</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Nie poza</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD-ki nie będą automatycznie oznaczone jako poza po konfiguracji interwału</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Nie powstały </target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD-ki nie mogą startować</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Nie upadły</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Raport z niepowodzenia OSD jest ignorowany, także monitory nie oznaczą OSD jako upadłego. </target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pauza </target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pauzuje czytanie i zapisywanie</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nie szoruj</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Szorowanie jest wyłączone</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nie ma głębokiego szorowania</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Głębokie szorowanie jest wyłączone</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Brak zasypywania</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Zasypywanie PG jest zawieszone</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Nie przywrócono</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Przywrócenie PGy jest zawieszone </target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Sortuj bitowo</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Użyj sortowania bitowego</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Usuń snap katalogi</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD-ki zmieniły snapsety</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Odzyskaj usunięte</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Podczas zdrowienia zastosowano usunięcie zamiast parowania</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Twardy limit logów PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Ustawia twardy limit na długość logów PG</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Zaktualizowane flagi OSD-ków</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD-ik</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>poza</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>w</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>upadły</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Zaznacz</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>Stracony OSD</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>Zaznaczony jako stracony</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Czyść</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>Oczyszczony</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>Zniszcz</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>Zniszczony</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>Usuń</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG-y</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Czytanie bajtów</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Zapis bajtów </target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Czytanie ops</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Zapis ops</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max zasypywanie</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Max aktywność wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Max pojedynczy start wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Uśpienie wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Praca</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>surowość</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Wystartowany</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Użyty</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dostępny</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Czyść</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Działający</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Ostrzeżenie </target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Nieznany</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>Podniesiony</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>brak systemów plików</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktywny</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>Rezerwa</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>niedostępny</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktywny demon</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kworum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Usługa NFS Ganesha nie jest skonfigurowana</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Użytkownik CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>system plików CephFS </target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(Odziedziczyło z globalnej konfiguracji)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>Odziedziczyło z globalnej konfiguracji</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Wybierz, jakiego rodzaju identyfikacja użytkownika ma być przeprowadzana -- </target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Brak dostępnym demonów</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Tryb pamięci podręcznej</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min wiek eksmisji</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min wiek wyrównania </target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Max bajtów obiektu docelowego </target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Max obiektów docelowych</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nie dodano żadnego zastosowania</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Osiągnięto limit zastosowań </target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Pul może mieć maksymalnie 4 definicje aplikacji. </target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Dozwolone znaki \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Maksymalna długość wynosi 128 znaków</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtruj lub dodaj zastosowanie</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Dodaj zastosowanie</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>skasuj profil kodu</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Rozmiar repliki</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Ostatnia zmiana</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Skasuj profil zakodowany</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Zbiór zasad Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>wiadro</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>Wiadra</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>użytkownik</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Zakres</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Czytaj</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Stwórz</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>System roli </target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Zaktualizuj użytkownika</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Kontynuuj </target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Zostałeś automatycznie wylogowany, ponieważ zostały zmienione twoje role.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Każdy obiekt jest podzielony na części fragmentów danych, każdy jest przechowywany na innym OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Oblicz porcje kodu dla każdego obiektu i przechowuj je na różnych OSD.\n Liczba fragmentów kodujących to również liczba OSD, które mogą zostać wyłączone bez utraty danych.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Wtyczka jerasure jest najbardziej uniwersalną i elastyczną wtyczką,\n jest to również domyślne ustawienie dla pui kodowanych przez Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Bardziej elastyczną techniką jest reed_sol_van: wystarczy ustawić k\n oraz m. Technika cauchy_good może być szybsza, ale musisz wybrać rozmiar pakietu\n ostrożnie. Wszystkie reed_sol_r6_op, liberation, blaum_roth, liber8tion są odpowiednikami RAID6\n w tym sensie, że mogą być skonfigurowane tylko z m = 2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Kodowanie będzie wykonywane na pakietach o rozmiarze bajtów naraz.\n Wybór odpowiedniego rozmiaru pakietu jest trudny.\n Dokumentacja jerasure zawiera obszerne informacje na ten temat.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Z wtyczką jerasure, gdy obiekt zakodowany przy użyciu skasowania jest przechowywany na \n wielu OSD-kach, odzyskiwanie po utracie jednego OSD wymaga odczytu ze wszystkich pozostałych.\n Na przykład, jeśli konfiguracja skryptu ma wartość k = 8 ,m = 4 i l=4, utrata jednego OSD wymaga odczytu\n od jedenastu innych do naprawy.\n\n Wtyczka kodu wymazywania lrc tworzy fragmenty o parzystości lokalnej, aby móc je odzyskać\n mniej OSD. Na przykład, jeśli lrc jest skonfigurowane z k = 8, m = 4 i l = 4, zostanie utworzony\n dodatkowy fragment parzystości na każde cztery OSD. Gdy jeden OSD zostanie utracone, może to być\n odzyskane tylko z czterema OSD zamiast jedenastu.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Grupuj fragmenty kodu i danych w zestawy lokalizacji wielkości. Na przykład,\n dla k = 4 i m = 2, gdy lokalność = 3 tworzone są dwie grupy po trzy. Każdy zestaw może\n odzyskać bez czytania kawałków z innego zestawu.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Typ wiadra CRUSH, w którym zdefiniowano każdy zestaw porcji\n przez l zostaną zapisane. Na przykład, jeśli jest ustawiony na rack, każda grupa l porcji będzie\n umieszczona w innym raku. Służy do utworzenia kroku reguły CRUSH, takiego jak krok wyboru\n racka. Jeśli nie jest ustawiony, nie ma takiego grupowania.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Wtyczka isa zawiera bibliotekę ISA. Działa tylko na procesorach Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Wtyczka ISA jest dostępna w dwóch formach Reed Solomon.\n Jeśli ustawiono reed_sol_van, jest to Vandermonde, jeśli ustawiono cauchy, to jest to Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Wtyczka shec zawiera wiele bibliotek SHEC.\n Pozwala ceph odzyskać dane bardziej efektywnie niż kody Reeda Solomona.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Liczba kawałków parzystości, z których każdy zawiera każdą porcję danych w swoim zakresie obliczeń. Liczba jest używana jako estymator trwałości. Na przykład, jeśli c = 2,\n 2 OSD można wyłączyć bez utraty danych.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nazwa wiadra crush jest użyte do pierwszego kroku reguły CRUSH.\nNa przykład krok jest domyślny.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Upewnij się, że żadne dwie porcje nie znajdują się w wiadrze z tą samą awarią\n domeny. Na przykład, jeśli domena awarii jest hostem, nie zostaną na niej zapisane dwie porcje\n hosta. Służy do utworzenia kroku reguły CRUSH, takiego jak krok wyboru hosta.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Ogranicz umieszczanie do urządzeń określonej klasy\n (np. ssd lub hdd), używając nazw klas urządzeń zgniatających na mapie CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Ustaw nazwę katalogu, z którego ładowana jest wtyczka kodu kasowania.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Dozwolone są wszystkie operacje</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Dozwolone są operacje, które nie modyfikują serweru</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Operacje odczytu i zapisu są zakazane, wszystkie inne dozwolone</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Operacje odczytu i zapisu, oraz wszystkie operacje modyfikujące atrybuty albo katalogi są zakazane </target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Brak dostępu w ogóle</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- wybierz priorytet -- </target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Niski</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Wysoki</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informacja</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Ostatnie 5 minut</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Ostatnie 15 minut</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Ostatnie 30 minut</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Ostatnia 1 godzina (domyślnie)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Ostatnie 3 godziny</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Ostatnie 6 godzin</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Ostatnie 12 godzin</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Ostatnie 24 godziny</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Wczoraj</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Dzisiaj</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Do tej pory dzisiaj</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Przedwczoraj</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Ostatnie 2 dni</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Tego dnia tydzień temu</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Poprzedni tydzień</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Ten tydzień </target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Do tej pory w tym tygodniu</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Ostatnie 7 dni</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Poprzedniego miesiąca</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>ten miesiąc</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Do tej pory w tym miesiącu</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Ostatnie 30 dni</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Ostatnie 90 dni</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Ostatnie 6 miesięcy</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Ostatni 1 rok</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Poprzedniego roku</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Bieżącego roku</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Do tej pory bieżącego roku</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Ostatnie 2 lata</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Ostatnie 5 lat</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nie wybrano żadnej pozycji</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Odznacz pozycję, żeby wybrać ponownie</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Osiągnięto limit wyboru. </target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtr tagów.</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Dodaj odznakę</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Brak dostępnych pozycji.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Sklonuj</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopia</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Szoruj głęboko</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Zniszcz</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Spłaszcz</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>zaznacz jako upadły</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Zaznacz jako w </target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Zaznacz jako stracony</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Zaznacz jako poza</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Zabezpiecz</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Zmień nazwę</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Przywróć</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Przenieś do kosza</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Odbezpiecz </target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Usunięty</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Sklonowano</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Skopiowano </target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Spłaszczony</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Oczyszczony</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Przywrócony</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Wycofaj</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Tak</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Nie</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Jakość serwisu</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Pożądany limit IO bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Pożądany limit operacji IO na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>limit odczytu BPS</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Pożądany limit odczytu bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>limit  odczytu IOPS</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Pożądany limit operacji odczytu na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit zapisu BPS</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Pożądany limit zapisu bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit zapisu IOPS</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Pożądany limit operacji zapisu na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Wiązka BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Żądana granica serii IO bajtów.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Wiązka IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Żądana granica serii operacji IO.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Odczyt wiązki BPS</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Żądana granica serii odczytanych bajtów.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Odczyt wiązki IOPS</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target> Żądana granica serii operacji odczytu.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Zapis wiązki BPS</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Żądana granica serii bajtów zapisu.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Zapis wiązki IOPS</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Żądana granica serii operacji zapisu.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Wykonywanie </target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>Wykonaj</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Wykonany</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>Nieznane zadanie</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Tworzenie</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>Utwórz</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aktualizowanie </target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>Zaktualizuj</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Usuwanie</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Klonowanie</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>Sklonuj </target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Kopiowanie </target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>Kopiuj</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Spłaszczanie</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>Spłaszcz</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Wycofywanie </target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>Wycofanie</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Przenoszenie</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>Przenieś</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Przeniesiono</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Nie znaleziono obrazu.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Przywracanie</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>Przywróć </target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>oczyszczać</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>oczyść</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>Wszystkie pule</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Nie można wyłączyć lustrzenia ponieważ zawiera parowanie.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},SQuY:function(t,e,n){var a=n("Dd78"),r=n("Tq0f"),i=n("lPUB"),s=n("3ENo"),o=n("wgvl");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},STAE:function(t,e,n){var a=n("0Dky");t.exports=!!Object.getOwnPropertySymbols&&!a((function(){return!String(Symbol())}))},SVse:function(t,e,n){"use strict";n.r(e),n.d(e,"ɵangular_packages_common_common_c",(function(){return ae})),n.d(e,"ɵangular_packages_common_common_h",(function(){return At})),n.d(e,"ɵangular_packages_common_common_g",(function(){return Ct})),n.d(e,"ɵangular_packages_common_common_f",(function(){return Nt})),n.d(e,"ɵangular_packages_common_common_k",(function(){return Qt})),n.d(e,"ɵangular_packages_common_common_j",(function(){return Jt})),n.d(e,"ɵangular_packages_common_common_i",(function(){return $t})),n.d(e,"ɵangular_packages_common_common_a",(function(){return ft})),n.d(e,"ɵangular_packages_common_common_b",(function(){return bt})),n.d(e,"ɵangular_packages_common_common_e",(function(){return Se})),n.d(e,"ɵangular_packages_common_common_d",(function(){return Ke})),n.d(e,"ɵregisterLocaleData",(function(){return mt})),n.d(e,"registerLocaleData",(function(){return mt})),n.d(e,"formatDate",(function(){return K})),n.d(e,"formatCurrency",(function(){return ot})),n.d(e,"formatNumber",(function(){return lt})),n.d(e,"formatPercent",(function(){return ut})),n.d(e,"NgLocaleLocalization",(function(){return pt})),n.d(e,"NgLocalization",(function(){return ht})),n.d(e,"Plural",(function(){return g})),n.d(e,"NumberFormatStyle",(function(){return h})),n.d(e,"FormStyle",(function(){return p})),n.d(e,"TranslationWidth",(function(){return b})),n.d(e,"FormatWidth",(function(){return m})),n.d(e,"NumberSymbol",(function(){return y})),n.d(e,"WeekDay",(function(){return v})),n.d(e,"getNumberOfCurrencyDigits",(function(){return V})),n.d(e,"getCurrencySymbol",(function(){return G})),n.d(e,"getLocaleDayPeriods",(function(){return _})),n.d(e,"getLocaleDayNames",(function(){return T})),n.d(e,"getLocaleMonthNames",(function(){return O})),n.d(e,"getLocaleId",(function(){return x})),n.d(e,"getLocaleEraNames",(function(){return w})),n.d(e,"getLocaleWeekEndRange",(function(){return I})),n.d(e,"getLocaleFirstDayOfWeek",(function(){return S})),n.d(e,"getLocaleDateFormat",(function(){return N})),n.d(e,"getLocaleDateTimeFormat",(function(){return R})),n.d(e,"getLocaleExtraDayPeriodRules",(function(){return M})),n.d(e,"getLocaleExtraDayPeriods",(function(){return q})),n.d(e,"getLocalePluralCase",(function(){return D})),n.d(e,"getLocaleTimeFormat",(function(){return C})),n.d(e,"getLocaleNumberSymbol",(function(){return A})),n.d(e,"getLocaleNumberFormat",(function(){return k})),n.d(e,"getLocaleCurrencyName",(function(){return L})),n.d(e,"getLocaleCurrencySymbol",(function(){return E})),n.d(e,"ɵparseCookieValue",(function(){return yt})),n.d(e,"CommonModule",(function(){return $e})),n.d(e,"DeprecatedI18NPipesModule",(function(){return Je})),n.d(e,"NgClass",(function(){return Lt})),n.d(e,"NgClassBase",(function(){return Et})),n.d(e,"NgForOf",(function(){return Mt})),n.d(e,"NgForOfContext",(function(){return Pt})),n.d(e,"NgIf",(function(){return jt})),n.d(e,"NgIfContext",(function(){return Ft})),n.d(e,"NgPlural",(function(){return Ht})),n.d(e,"NgPluralCase",(function(){return Ut})),n.d(e,"NgStyle",(function(){return ee})),n.d(e,"NgStyleBase",(function(){return te})),n.d(e,"NgSwitch",(function(){return zt})),n.d(e,"NgSwitchCase",(function(){return Bt})),n.d(e,"NgSwitchDefault",(function(){return Yt})),n.d(e,"NgTemplateOutlet",(function(){return ne})),n.d(e,"NgComponentOutlet",(function(){return Dt})),n.d(e,"DOCUMENT",(function(){return Ze})),n.d(e,"AsyncPipe",(function(){return Ae})),n.d(e,"DatePipe",(function(){return Pe})),n.d(e,"I18nPluralPipe",(function(){return qe})),n.d(e,"I18nSelectPipe",(function(){return je})),n.d(e,"JsonPipe",(function(){return Fe})),n.d(e,"LowerCasePipe",(function(){return ke})),n.d(e,"CurrencyPipe",(function(){return Ye})),n.d(e,"DecimalPipe",(function(){return ze})),n.d(e,"PercentPipe",(function(){return Be})),n.d(e,"SlicePipe",(function(){return We})),n.d(e,"UpperCasePipe",(function(){return De})),n.d(e,"TitleCasePipe",(function(){return Le})),n.d(e,"KeyValuePipe",(function(){return Ge})),n.d(e,"DeprecatedDatePipe",(function(){return ve})),n.d(e,"DeprecatedCurrencyPipe",(function(){return we})),n.d(e,"DeprecatedDecimalPipe",(function(){return Te})),n.d(e,"DeprecatedPercentPipe",(function(){return Oe})),n.d(e,"ɵPLATFORM_BROWSER_ID",(function(){return Qe})),n.d(e,"ɵPLATFORM_SERVER_ID",(function(){return Xe})),n.d(e,"ɵPLATFORM_WORKER_APP_ID",(function(){return tn})),n.d(e,"ɵPLATFORM_WORKER_UI_ID",(function(){return en})),n.d(e,"isPlatformBrowser",(function(){return nn})),n.d(e,"isPlatformServer",(function(){return an})),n.d(e,"isPlatformWorkerApp",(function(){return rn})),n.d(e,"isPlatformWorkerUi",(function(){return sn})),n.d(e,"VERSION",(function(){return on})),n.d(e,"ViewportScroller",(function(){return un})),n.d(e,"ɵNullViewportScroller",(function(){return dn})),n.d(e,"ɵNgClassImplProvider__POST_R3__",(function(){return Rt})),n.d(e,"ɵNgClassR2Impl",(function(){return It})),n.d(e,"ɵNgClassImpl",(function(){return St})),n.d(e,"ɵNgStyleImplProvider__POST_R3__",(function(){return Zt})),n.d(e,"ɵNgStyleR2Impl",(function(){return Kt})),n.d(e,"ɵNgStyleImpl",(function(){return Wt})),n.d(e,"ɵngStyleDirectiveDef__POST_R3__",(function(){return Xt})),n.d(e,"ɵngClassDirectiveDef__POST_R3__",(function(){return kt})),n.d(e,"PlatformLocation",(function(){return r})),n.d(e,"LOCATION_INITIALIZED",(function(){return i})),n.d(e,"LocationStrategy",(function(){return s})),n.d(e,"APP_BASE_HREF",(function(){return o})),n.d(e,"HashLocationStrategy",(function(){return d})),n.d(e,"PathLocationStrategy",(function(){return c})),n.d(e,"Location",(function(){return u}));var a=n("8Y7J");class r{}const i=new a.InjectionToken("Location Initialized");class s{}const o=new a.InjectionToken("appBaseHref");class u{constructor(t,e){this._subject=new a.EventEmitter,this._urlChangeListeners=[],this._platformStrategy=t;const n=this._platformStrategy.getBaseHref();this._platformLocation=e,this._baseHref=u.stripTrailingSlash(l(n)),this._platformStrategy.onPopState(t=>{this._subject.emit({url:this.path(!0),pop:!0,state:t.state,type:t.type})})}path(t=!1){return this.normalize(this._platformStrategy.path(t))}getState(){return this._platformLocation.getState()}isCurrentPathEqualTo(t,e=""){return this.path()==this.normalize(t+u.normalizeQueryParams(e))}normalize(t){return u.stripTrailingSlash(function(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,l(t)))}prepareExternalUrl(t){return t&&"/"!==t[0]&&(t="/"+t),this._platformStrategy.prepareExternalUrl(t)}go(t,e="",n=null){this._platformStrategy.pushState(n,"",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+u.normalizeQueryParams(e)),n)}replaceState(t,e="",n=null){this._platformStrategy.replaceState(n,"",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+u.normalizeQueryParams(e)),n)}forward(){this._platformStrategy.forward()}back(){this._platformStrategy.back()}onUrlChange(t){this._urlChangeListeners.push(t),this.subscribe(t=>{this._notifyUrlChangeListeners(t.url,t.state)})}_notifyUrlChangeListeners(t="",e){this._urlChangeListeners.forEach(n=>n(t,e))}subscribe(t,e,n){return this._subject.subscribe({next:t,error:e,complete:n})}static normalizeQueryParams(t){return t&&"?"!==t[0]?"?"+t:t}static joinWithSlash(t,e){if(0==t.length)return e;if(0==e.length)return t;let n=0;return t.endsWith("/")&&n++,e.startsWith("/")&&n++,2==n?t+e.substring(1):1==n?t+e:t+"/"+e}static stripTrailingSlash(t){const e=t.match(/#|\?|$/),n=e&&e.index||t.length;return t.slice(0,n-("/"===t[n-1]?1:0))+t.slice(n)}}function l(t){return t.replace(/\/index.html$/,"")}class d extends s{constructor(t,e){super(),this._platformLocation=t,this._baseHref="",null!=e&&(this._baseHref=e)}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}path(t=!1){let e=this._platformLocation.hash;return null==e&&(e="#"),e.length>0?e.substring(1):e}prepareExternalUrl(t){const e=u.joinWithSlash(this._baseHref,t);return e.length>0?"#"+e:e}pushState(t,e,n,a){let r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.pushState(t,e,r)}replaceState(t,e,n,a){let r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,r)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}class c extends s{constructor(t,e){if(super(),this._platformLocation=t,null==e&&(e=this._platformLocation.getBaseHrefFromDOM()),null==e)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");this._baseHref=e}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return u.joinWithSlash(this._baseHref,t)}path(t=!1){const e=this._platformLocation.pathname+u.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?`${e}${n}`:e}pushState(t,e,n,a){const r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));this._platformLocation.pushState(t,e,r)}replaceState(t,e,n,a){const r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));this._platformLocation.replaceState(t,e,r)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}const f={ADP:[void 0,void 0,0],AFN:[void 0,void 0,0],ALL:[void 0,void 0,0],AMD:[void 0,void 0,0],AOA:[void 0,"Kz"],ARS:[void 0,"$"],AUD:["A$","$"],BAM:[void 0,"KM"],BBD:[void 0,"$"],BDT:[void 0,"৳"],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,"$"],BND:[void 0,"$"],BOB:[void 0,"Bs"],BRL:["R$"],BSD:[void 0,"$"],BWP:[void 0,"P"],BYN:[void 0,"р.",2],BYR:[void 0,void 0,0],BZD:[void 0,"$"],CAD:["CA$","$",2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,"$",0],CNY:["CN¥","¥"],COP:[void 0,"$",0],CRC:[void 0,"₡",2],CUC:[void 0,"$"],CUP:[void 0,"$"],CZK:[void 0,"Kč",2],DJF:[void 0,void 0,0],DKK:[void 0,"kr",2],DOP:[void 0,"$"],EGP:[void 0,"E£"],ESP:[void 0,"₧",0],EUR:["€"],FJD:[void 0,"$"],FKP:[void 0,"£"],GBP:["£"],GEL:[void 0,"₾"],GIP:[void 0,"£"],GNF:[void 0,"FG",0],GTQ:[void 0,"Q"],GYD:[void 0,"$",0],HKD:["HK$","$"],HNL:[void 0,"L"],HRK:[void 0,"kn"],HUF:[void 0,"Ft",2],IDR:[void 0,"Rp",0],ILS:["₪"],INR:["₹"],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,"kr",0],ITL:[void 0,void 0,0],JMD:[void 0,"$"],JOD:[void 0,void 0,3],JPY:["¥",void 0,0],KHR:[void 0,"៛"],KMF:[void 0,"CF",0],KPW:[void 0,"₩",0],KRW:["₩",void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,"$"],KZT:[void 0,"₸"],LAK:[void 0,"₭",0],LBP:[void 0,"L£",0],LKR:[void 0,"Rs"],LRD:[void 0,"$"],LTL:[void 0,"Lt"],LUF:[void 0,void 0,0],LVL:[void 0,"Ls"],LYD:[void 0,void 0,3],MGA:[void 0,"Ar",0],MGF:[void 0,void 0,0],MMK:[void 0,"K",0],MNT:[void 0,"₮",0],MRO:[void 0,void 0,0],MUR:[void 0,"Rs",0],MXN:["MX$","$"],MYR:[void 0,"RM"],NAD:[void 0,"$"],NGN:[void 0,"₦"],NIO:[void 0,"C$"],NOK:[void 0,"kr",2],NPR:[void 0,"Rs"],NZD:["NZ$","$"],OMR:[void 0,void 0,3],PHP:[void 0,"₱"],PKR:[void 0,"Rs",0],PLN:[void 0,"zł"],PYG:[void 0,"₲",0],RON:[void 0,"lei"],RSD:[void 0,void 0,0],RUB:[void 0,"₽"],RUR:[void 0,"р."],RWF:[void 0,"RF",0],SBD:[void 0,"$"],SEK:[void 0,"kr",2],SGD:[void 0,"$"],SHP:[void 0,"£"],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,"$"],SSP:[void 0,"£"],STD:[void 0,void 0,0],STN:[void 0,"Db"],SYP:[void 0,"£",0],THB:[void 0,"฿"],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,"T$"],TRL:[void 0,void 0,0],TRY:[void 0,"₺"],TTD:[void 0,"$"],TWD:["NT$","$",2],TZS:[void 0,void 0,0],UAH:[void 0,"₴"],UGX:[void 0,void 0,0],USD:["$"],UYI:[void 0,void 0,0],UYU:[void 0,"$"],UZS:[void 0,void 0,0],VEF:[void 0,"Bs"],VND:["₫",void 0,0],VUV:[void 0,void 0,0],XAF:["FCFA",void 0,0],XCD:["EC$","$"],XOF:["CFA",void 0,0],XPF:["CFPF",void 0,0],YER:[void 0,void 0,0],ZAR:[void 0,"R"],ZMK:[void 0,void 0,0],ZMW:[void 0,"ZK"],ZWD:[void 0,void 0,0]},h=function(){var t={Decimal:0,Percent:1,Currency:2,Scientific:3};return t[t.Decimal]="Decimal",t[t.Percent]="Percent",t[t.Currency]="Currency",t[t.Scientific]="Scientific",t}(),g=function(){var t={Zero:0,One:1,Two:2,Few:3,Many:4,Other:5};return t[t.Zero]="Zero",t[t.One]="One",t[t.Two]="Two",t[t.Few]="Few",t[t.Many]="Many",t[t.Other]="Other",t}(),p=function(){var t={Format:0,Standalone:1};return t[t.Format]="Format",t[t.Standalone]="Standalone",t}(),b=function(){var t={Narrow:0,Abbreviated:1,Wide:2,Short:3};return t[t.Narrow]="Narrow",t[t.Abbreviated]="Abbreviated",t[t.Wide]="Wide",t[t.Short]="Short",t}(),m=function(){var t={Short:0,Medium:1,Long:2,Full:3};return t[t.Short]="Short",t[t.Medium]="Medium",t[t.Long]="Long",t[t.Full]="Full",t}(),y=function(){var t={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};return t[t.Decimal]="Decimal",t[t.Group]="Group",t[t.List]="List",t[t.PercentSign]="PercentSign",t[t.PlusSign]="PlusSign",t[t.MinusSign]="MinusSign",t[t.Exponential]="Exponential",t[t.SuperscriptingExponent]="SuperscriptingExponent",t[t.PerMille]="PerMille",t[t.Infinity]="Infinity",t[t.NaN]="NaN",t[t.TimeSeparator]="TimeSeparator",t[t.CurrencyDecimal]="CurrencyDecimal",t[t.CurrencyGroup]="CurrencyGroup",t}(),v=function(){var t={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6};return t[t.Sunday]="Sunday",t[t.Monday]="Monday",t[t.Tuesday]="Tuesday",t[t.Wednesday]="Wednesday",t[t.Thursday]="Thursday",t[t.Friday]="Friday",t[t.Saturday]="Saturday",t}();function x(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].LocaleId]}function _(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].DayPeriodsFormat],r[a["ɵLocaleDataIndex"].DayPeriodsStandalone]],e);return j(i,n)}function T(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].DaysFormat],r[a["ɵLocaleDataIndex"].DaysStandalone]],e);return j(i,n)}function O(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].MonthsFormat],r[a["ɵLocaleDataIndex"].MonthsStandalone]],e);return j(i,n)}function w(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].Eras],e)}function S(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].FirstDayOfWeek]}function I(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].WeekendRange]}function N(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].DateFormat],e)}function C(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].TimeFormat],e)}function R(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].DateTimeFormat],e)}function A(t,e){const n=Object(a["ɵfindLocaleData"])(t),r=n[a["ɵLocaleDataIndex"].NumberSymbols][e];if(void 0===r){if(e===y.CurrencyDecimal)return n[a["ɵLocaleDataIndex"].NumberSymbols][y.Decimal];if(e===y.CurrencyGroup)return n[a["ɵLocaleDataIndex"].NumberSymbols][y.Group]}return r}function k(t,e){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].NumberFormats][e]}function E(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].CurrencySymbol]||null}function L(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].CurrencyName]||null}const D=a["ɵgetLocalePluralCase"];function P(t){if(!t[a["ɵLocaleDataIndex"].ExtraData])throw new Error(`Missing extra locale data for the locale "${t[a["ɵLocaleDataIndex"].LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function M(t){const e=Object(a["ɵfindLocaleData"])(t);return P(e),(e[a["ɵLocaleDataIndex"].ExtraData][2]||[]).map(t=>"string"==typeof t?F(t):[F(t[0]),F(t[1])])}function q(t,e,n){const r=Object(a["ɵfindLocaleData"])(t);P(r);const i=j([r[a["ɵLocaleDataIndex"].ExtraData][0],r[a["ɵLocaleDataIndex"].ExtraData][1]],e)||[];return j(i,n)||[]}function j(t,e){for(let n=e;n>-1;n--)if(void 0!==t[n])return t[n];throw new Error("Locale data API: locale data undefined")}function F(t){const[e,n]=t.split(":");return{hours:+e,minutes:+n}}function G(t,e,n="en"){const r=function(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].Currencies]}(n)[t]||f[t]||[],i=r[1];return"narrow"===e&&"string"==typeof i?i:r[0]||t}function V(t){let e;const n=f[t];return n&&(e=n[2]),"number"==typeof e?e:2}const z=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,B={},Y=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,H=function(){var t={Short:0,ShortGMT:1,Long:2,Extended:3};return t[t.Short]="Short",t[t.ShortGMT]="ShortGMT",t[t.Long]="Long",t[t.Extended]="Extended",t}(),U=function(){var t={FullYear:0,Month:1,Date:2,Hours:3,Minutes:4,Seconds:5,FractionalSeconds:6,Day:7};return t[t.FullYear]="FullYear",t[t.Month]="Month",t[t.Date]="Date",t[t.Hours]="Hours",t[t.Minutes]="Minutes",t[t.Seconds]="Seconds",t[t.FractionalSeconds]="FractionalSeconds",t[t.Day]="Day",t}(),W=function(){var t={DayPeriods:0,Days:1,Months:2,Eras:3};return t[t.DayPeriods]="DayPeriods",t[t.Days]="Days",t[t.Months]="Months",t[t.Eras]="Eras",t}();function K(t,e,n,a){let r=function(t){if(rt(t))return t;if("number"==typeof t&&!isNaN(t))return new Date(t);if("string"==typeof t){t=t.trim();const e=parseFloat(t);if(!isNaN(t-e))return new Date(e);if(/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){const[e,n,a]=t.split("-").map(t=>+t);return new Date(e,n-1,a)}let n;if(n=t.match(z))return at(n)}const e=new Date(t);if(!rt(e))throw new Error(`Unable to convert "${t}" into a date`);return e}(t);e=function t(e,n){const a=x(e);if(B[a]=B[a]||{},B[a][n])return B[a][n];let r="";switch(n){case"shortDate":r=N(e,m.Short);break;case"mediumDate":r=N(e,m.Medium);break;case"longDate":r=N(e,m.Long);break;case"fullDate":r=N(e,m.Full);break;case"shortTime":r=C(e,m.Short);break;case"mediumTime":r=C(e,m.Medium);break;case"longTime":r=C(e,m.Long);break;case"fullTime":r=C(e,m.Full);break;case"short":const n=t(e,"shortTime"),a=t(e,"shortDate");r=$(R(e,m.Short),[n,a]);break;case"medium":const i=t(e,"mediumTime"),s=t(e,"mediumDate");r=$(R(e,m.Medium),[i,s]);break;case"long":const o=t(e,"longTime"),u=t(e,"longDate");r=$(R(e,m.Long),[o,u]);break;case"full":const l=t(e,"fullTime"),d=t(e,"fullDate");r=$(R(e,m.Full),[l,d])}return r&&(B[a][n]=r),r}(n,e)||e;let i,s=[];for(;e;){if(i=Y.exec(e),!i){s.push(e);break}{s=s.concat(i.slice(1));const t=s.pop();if(!t)break;e=t}}let o=r.getTimezoneOffset();a&&(o=nt(a,o),r=function(t,e,n){const a=t.getTimezoneOffset();return function(t,e){return(t=new Date(t.getTime())).setMinutes(t.getMinutes()+e),t}(t,-1*(nt(e,a)-a))}(r,a));let u="";return s.forEach(t=>{const e=function(t){if(et[t])return et[t];let e;switch(t){case"G":case"GG":case"GGG":e=Q(W.Eras,b.Abbreviated);break;case"GGGG":e=Q(W.Eras,b.Wide);break;case"GGGGG":e=Q(W.Eras,b.Narrow);break;case"y":e=Z(U.FullYear,1,0,!1,!0);break;case"yy":e=Z(U.FullYear,2,0,!0,!0);break;case"yyy":e=Z(U.FullYear,3,0,!1,!0);break;case"yyyy":e=Z(U.FullYear,4,0,!1,!0);break;case"M":case"L":e=Z(U.Month,1,1);break;case"MM":case"LL":e=Z(U.Month,2,1);break;case"MMM":e=Q(W.Months,b.Abbreviated);break;case"MMMM":e=Q(W.Months,b.Wide);break;case"MMMMM":e=Q(W.Months,b.Narrow);break;case"LLL":e=Q(W.Months,b.Abbreviated,p.Standalone);break;case"LLLL":e=Q(W.Months,b.Wide,p.Standalone);break;case"LLLLL":e=Q(W.Months,b.Narrow,p.Standalone);break;case"w":e=tt(1);break;case"ww":e=tt(2);break;case"W":e=tt(1,!0);break;case"d":e=Z(U.Date,1);break;case"dd":e=Z(U.Date,2);break;case"E":case"EE":case"EEE":e=Q(W.Days,b.Abbreviated);break;case"EEEE":e=Q(W.Days,b.Wide);break;case"EEEEE":e=Q(W.Days,b.Narrow);break;case"EEEEEE":e=Q(W.Days,b.Short);break;case"a":case"aa":case"aaa":e=Q(W.DayPeriods,b.Abbreviated);break;case"aaaa":e=Q(W.DayPeriods,b.Wide);break;case"aaaaa":e=Q(W.DayPeriods,b.Narrow);break;case"b":case"bb":case"bbb":e=Q(W.DayPeriods,b.Abbreviated,p.Standalone,!0);break;case"bbbb":e=Q(W.DayPeriods,b.Wide,p.Standalone,!0);break;case"bbbbb":e=Q(W.DayPeriods,b.Narrow,p.Standalone,!0);break;case"B":case"BB":case"BBB":e=Q(W.DayPeriods,b.Abbreviated,p.Format,!0);break;case"BBBB":e=Q(W.DayPeriods,b.Wide,p.Format,!0);break;case"BBBBB":e=Q(W.DayPeriods,b.Narrow,p.Format,!0);break;case"h":e=Z(U.Hours,1,-12);break;case"hh":e=Z(U.Hours,2,-12);break;case"H":e=Z(U.Hours,1);break;case"HH":e=Z(U.Hours,2);break;case"m":e=Z(U.Minutes,1);break;case"mm":e=Z(U.Minutes,2);break;case"s":e=Z(U.Seconds,1);break;case"ss":e=Z(U.Seconds,2);break;case"S":e=Z(U.FractionalSeconds,1);break;case"SS":e=Z(U.FractionalSeconds,2);break;case"SSS":e=Z(U.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":e=X(H.Short);break;case"ZZZZZ":e=X(H.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":e=X(H.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":e=X(H.Long);break;default:return null}return et[t]=e,e}(t);u+=e?e(r,n,o):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),u}function $(t,e){return e&&(t=t.replace(/\{([^}]+)}/g,(function(t,n){return null!=e&&n in e?e[n]:t}))),t}function J(t,e,n="-",a,r){let i="";(t<0||r&&t<=0)&&(r?t=1-t:(t=-t,i=n));let s=String(t);for(;s.length<e;)s="0"+s;return a&&(s=s.substr(s.length-e)),i+s}function Z(t,e,n=0,a=!1,r=!1){return function(i,s){let o=function(t,e){switch(t){case U.FullYear:return e.getFullYear();case U.Month:return e.getMonth();case U.Date:return e.getDate();case U.Hours:return e.getHours();case U.Minutes:return e.getMinutes();case U.Seconds:return e.getSeconds();case U.FractionalSeconds:return e.getMilliseconds();case U.Day:return e.getDay();default:throw new Error(`Unknown DateType value "${t}".`)}}(t,i);if((n>0||o>-n)&&(o+=n),t===U.Hours)0===o&&-12===n&&(o=12);else if(t===U.FractionalSeconds)return u=e,J(o,3).substr(0,u);var u;const l=A(s,y.MinusSign);return J(o,e,l,a,r)}}function Q(t,e,n=p.Format,a=!1){return function(r,i){return function(t,e,n,a,r,i){switch(n){case W.Months:return O(e,r,a)[t.getMonth()];case W.Days:return T(e,r,a)[t.getDay()];case W.DayPeriods:const s=t.getHours(),o=t.getMinutes();if(i){const t=M(e),n=q(e,r,a);let i;if(t.forEach((t,e)=>{if(Array.isArray(t)){const{hours:a,minutes:r}=t[0],{hours:u,minutes:l}=t[1];s>=a&&o>=r&&(s<u||s===u&&o<l)&&(i=n[e])}else{const{hours:a,minutes:r}=t;a===s&&r===o&&(i=n[e])}}),i)return i}return _(e,r,a)[s<12?0:1];case W.Eras:return w(e,a)[t.getFullYear()<=0?0:1];default:throw new Error("unexpected translation type "+n)}}(r,i,t,e,n,a)}}function X(t){return function(e,n,a){const r=-1*a,i=A(n,y.MinusSign),s=r>0?Math.floor(r/60):Math.ceil(r/60);switch(t){case H.Short:return(r>=0?"+":"")+J(s,2,i)+J(Math.abs(r%60),2,i);case H.ShortGMT:return"GMT"+(r>=0?"+":"")+J(s,1,i);case H.Long:return"GMT"+(r>=0?"+":"")+J(s,2,i)+":"+J(Math.abs(r%60),2,i);case H.Extended:return 0===a?"Z":(r>=0?"+":"")+J(s,2,i)+":"+J(Math.abs(r%60),2,i);default:throw new Error(`Unknown zone width "${t}"`)}}}function tt(t,e=!1){return function(n,a){let r;if(e){const t=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,e=n.getDate();r=1+Math.floor((e+t)/7)}else{const t=function(t){const e=new Date(t,0,1).getDay();return new Date(t,0,1+(e<=4?4:11)-e)}(n.getFullYear()),e=(i=n,new Date(i.getFullYear(),i.getMonth(),i.getDate()+(4-i.getDay()))).getTime()-t.getTime();r=1+Math.round(e/6048e5)}var i;return J(r,t,A(a,y.MinusSign))}}const et={};function nt(t,e){t=t.replace(/:/g,"");const n=Date.parse("Jan 01, 1970 00:00:00 "+t)/6e4;return isNaN(n)?e:n}function at(t){const e=new Date(0);let n=0,a=0;const r=t[8]?e.setUTCFullYear:e.setFullYear,i=t[8]?e.setUTCHours:e.setHours;t[9]&&(n=Number(t[9]+t[10]),a=Number(t[9]+t[11])),r.call(e,Number(t[1]),Number(t[2])-1,Number(t[3]));const s=Number(t[4]||0)-n,o=Number(t[5]||0)-a,u=Number(t[6]||0),l=Math.round(1e3*parseFloat("0."+(t[7]||0)));return i.call(e,s,o,u,l),e}function rt(t){return t instanceof Date&&!isNaN(t.valueOf())}const it=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function st(t,e,n,a,r,i,s=!1){let o="",u=!1;if(isFinite(t)){let l=function(t){let e,n,a,r,i,s=Math.abs(t)+"",o=0;for((n=s.indexOf("."))>-1&&(s=s.replace(".","")),(a=s.search(/e/i))>0?(n<0&&(n=a),n+=+s.slice(a+1),s=s.substring(0,a)):n<0&&(n=s.length),a=0;"0"===s.charAt(a);a++);if(a===(i=s.length))e=[0],n=1;else{for(i--;"0"===s.charAt(i);)i--;for(n-=a,e=[],r=0;a<=i;a++,r++)e[r]=Number(s.charAt(a))}return n>22&&(e=e.splice(0,21),o=n-1,n=1),{digits:e,exponent:o,integerLen:n}}(t);s&&(l=function(t){if(0===t.digits[0])return t;const e=t.digits.length-t.integerLen;return t.exponent?t.exponent+=2:(0===e?t.digits.push(0,0):1===e&&t.digits.push(0),t.integerLen+=2),t}(l));let d=e.minInt,c=e.minFrac,f=e.maxFrac;if(i){const t=i.match(it);if(null===t)throw new Error(i+" is not a valid digit info");const e=t[1],n=t[3],a=t[5];null!=e&&(d=ct(e)),null!=n&&(c=ct(n)),null!=a?f=ct(a):null!=n&&c>f&&(f=c)}!function(t,e,n){if(e>n)throw new Error(`The minimum number of digits after fraction (${e}) is higher than the maximum (${n}).`);let a=t.digits,r=a.length-t.integerLen;const i=Math.min(Math.max(e,r),n);let s=i+t.integerLen,o=a[s];if(s>0){a.splice(Math.max(t.integerLen,s));for(let t=s;t<a.length;t++)a[t]=0}else{r=Math.max(0,r),t.integerLen=1,a.length=Math.max(1,s=i+1),a[0]=0;for(let t=1;t<s;t++)a[t]=0}if(o>=5)if(s-1<0){for(let e=0;e>s;e--)a.unshift(0),t.integerLen++;a.unshift(1),t.integerLen++}else a[s-1]++;for(;r<Math.max(0,i);r++)a.push(0);let u=0!==i;const l=e+t.integerLen,d=a.reduceRight((function(t,e,n,a){return a[n]=(e+=t)<10?e:e-10,u&&(0===a[n]&&n>=l?a.pop():u=!1),e>=10?1:0}),0);d&&(a.unshift(d),t.integerLen++)}(l,c,f);let h=l.digits,g=l.integerLen;const p=l.exponent;let b=[];for(u=h.every(t=>!t);g<d;g++)h.unshift(0);for(;g<0;g++)h.unshift(0);g>0?b=h.splice(g,h.length):(b=h,h=[0]);const m=[];for(h.length>=e.lgSize&&m.unshift(h.splice(-e.lgSize,h.length).join(""));h.length>e.gSize;)m.unshift(h.splice(-e.gSize,h.length).join(""));h.length&&m.unshift(h.join("")),o=m.join(A(n,a)),b.length&&(o+=A(n,r)+b.join("")),p&&(o+=A(n,y.Exponential)+"+"+p)}else o=A(n,y.Infinity);return o=t<0&&!u?e.negPre+o+e.negSuf:e.posPre+o+e.posSuf,o}function ot(t,e,n,a,r){const i=dt(k(e,h.Currency),A(e,y.MinusSign));return i.minFrac=V(a),i.maxFrac=i.minFrac,st(t,i,e,y.CurrencyGroup,y.CurrencyDecimal,r).replace("¤",n).replace("¤","")}function ut(t,e,n){return st(t,dt(k(e,h.Percent),A(e,y.MinusSign)),e,y.Group,y.Decimal,n,!0).replace(new RegExp("%","g"),A(e,y.PercentSign))}function lt(t,e,n){return st(t,dt(k(e,h.Decimal),A(e,y.MinusSign)),e,y.Group,y.Decimal,n)}function dt(t,e="-"){const n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},a=t.split(";"),r=a[0],i=a[1],s=-1!==r.indexOf(".")?r.split("."):[r.substring(0,r.lastIndexOf("0")+1),r.substring(r.lastIndexOf("0")+1)],o=s[0],u=s[1]||"";n.posPre=o.substr(0,o.indexOf("#"));for(let d=0;d<u.length;d++){const t=u.charAt(d);"0"===t?n.minFrac=n.maxFrac=d+1:"#"===t?n.maxFrac=d+1:n.posSuf+=t}const l=o.split(",");if(n.gSize=l[1]?l[1].length:0,n.lgSize=l[2]||l[1]?(l[2]||l[1]).length:0,i){const t=r.length-n.posPre.length-n.posSuf.length,e=i.indexOf("#");n.negPre=i.substr(0,e).replace(/'/g,""),n.negSuf=i.substr(e+t).replace(/'/g,"")}else n.negPre=e+n.posPre,n.negSuf=n.posSuf;return n}function ct(t){const e=parseInt(t);if(isNaN(e))throw new Error("Invalid integer literal when parsing "+t);return e}const ft=new a.InjectionToken("UseV4Plurals");class ht{}function gt(t,e,n,a){let r="="+t;if(e.indexOf(r)>-1)return r;if(r=n.getPluralCategory(t,a),e.indexOf(r)>-1)return r;if(e.indexOf("other")>-1)return"other";throw new Error(`No plural message found for value "${t}"`)}class pt extends ht{constructor(t,e){super(),this.locale=t,this.deprecatedPluralFn=e}getPluralCategory(t,e){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(e||this.locale,t):D(e||this.locale)(t)){case g.Zero:return"zero";case g.One:return"one";case g.Two:return"two";case g.Few:return"few";case g.Many:return"many";default:return"other"}}}function bt(t,e){"string"==typeof e&&(e=parseInt(e,10));const n=e,a=n.toString().replace(/^[^.]*\.?/,""),r=Math.floor(Math.abs(n)),i=a.length,s=parseInt(a,10),o=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0;switch(t.split("-")[0].toLowerCase()){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?g.One:g.Other;case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?g.One:g.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===r||1===n?g.One:g.Other;case"ar":return 0===n?g.Zero:1===n?g.One:2===n?g.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?g.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?g.Many:g.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===r&&0===i?g.One:g.Other;case"be":return n%10==1&&n%100!=11?g.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?g.Few:n%10==0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?g.Many:g.Other;case"br":return n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?g.One:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?g.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10==9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?g.Few:0!==n&&n%1e6==0?g.Many:g.Other;case"bs":case"hr":case"sr":return 0===i&&r%10==1&&r%100!=11||s%10==1&&s%100!=11?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)||s%10===Math.floor(s%10)&&s%10>=2&&s%10<=4&&!(s%100>=12&&s%100<=14)?g.Few:g.Other;case"cs":case"sk":return 1===r&&0===i?g.One:r===Math.floor(r)&&r>=2&&r<=4&&0===i?g.Few:0!==i?g.Many:g.Other;case"cy":return 0===n?g.Zero:1===n?g.One:2===n?g.Two:3===n?g.Few:6===n?g.Many:g.Other;case"da":return 1===n||0!==o&&(0===r||1===r)?g.One:g.Other;case"dsb":case"hsb":return 0===i&&r%100==1||s%100==1?g.One:0===i&&r%100==2||s%100==2?g.Two:0===i&&r%100===Math.floor(r%100)&&r%100>=3&&r%100<=4||s%100===Math.floor(s%100)&&s%100>=3&&s%100<=4?g.Few:g.Other;case"ff":case"fr":case"hy":case"kab":return 0===r||1===r?g.One:g.Other;case"fil":return 0===i&&(1===r||2===r||3===r)||0===i&&r%10!=4&&r%10!=6&&r%10!=9||0!==i&&s%10!=4&&s%10!=6&&s%10!=9?g.One:g.Other;case"ga":return 1===n?g.One:2===n?g.Two:n===Math.floor(n)&&n>=3&&n<=6?g.Few:n===Math.floor(n)&&n>=7&&n<=10?g.Many:g.Other;case"gd":return 1===n||11===n?g.One:2===n||12===n?g.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?g.Few:g.Other;case"gv":return 0===i&&r%10==1?g.One:0===i&&r%10==2?g.Two:0!==i||r%100!=0&&r%100!=20&&r%100!=40&&r%100!=60&&r%100!=80?0!==i?g.Many:g.Other:g.Few;case"he":return 1===r&&0===i?g.One:2===r&&0===i?g.Two:0!==i||n>=0&&n<=10||n%10!=0?g.Other:g.Many;case"is":return 0===o&&r%10==1&&r%100!=11||0!==o?g.One:g.Other;case"ksh":return 0===n?g.Zero:1===n?g.One:g.Other;case"kw":case"naq":case"se":case"smn":return 1===n?g.One:2===n?g.Two:g.Other;case"lag":return 0===n?g.Zero:0!==r&&1!==r||0===n?g.Other:g.One;case"lt":return n%10!=1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?g.Few:0!==s?g.Many:g.Other:g.One;case"lv":case"prg":return n%10==0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===i&&s%100===Math.floor(s%100)&&s%100>=11&&s%100<=19?g.Zero:n%10==1&&n%100!=11||2===i&&s%10==1&&s%100!=11||2!==i&&s%10==1?g.One:g.Other;case"mk":return 0===i&&r%10==1||s%10==1?g.One:g.Other;case"mt":return 1===n?g.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?g.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?g.Many:g.Other;case"pl":return 1===r&&0===i?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)?g.Few:0===i&&1!==r&&r%10===Math.floor(r%10)&&r%10>=0&&r%10<=1||0===i&&r%10===Math.floor(r%10)&&r%10>=5&&r%10<=9||0===i&&r%100===Math.floor(r%100)&&r%100>=12&&r%100<=14?g.Many:g.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?g.One:g.Other;case"ro":return 1===r&&0===i?g.One:0!==i||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?g.Few:g.Other;case"ru":case"uk":return 0===i&&r%10==1&&r%100!=11?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)?g.Few:0===i&&r%10==0||0===i&&r%10===Math.floor(r%10)&&r%10>=5&&r%10<=9||0===i&&r%100===Math.floor(r%100)&&r%100>=11&&r%100<=14?g.Many:g.Other;case"shi":return 0===r||1===n?g.One:n===Math.floor(n)&&n>=2&&n<=10?g.Few:g.Other;case"si":return 0===n||1===n||0===r&&1===s?g.One:g.Other;case"sl":return 0===i&&r%100==1?g.One:0===i&&r%100==2?g.Two:0===i&&r%100===Math.floor(r%100)&&r%100>=3&&r%100<=4||0!==i?g.Few:g.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?g.One:g.Other;default:return g.Other}}function mt(t,e,n){"string"!=typeof e&&(n=e,e=t[a["ɵLocaleDataIndex"].LocaleId]),e=e.toLowerCase().replace(/_/g,"-"),a["ɵLOCALE_DATA"][e]=t,n&&(a["ɵLOCALE_DATA"][e][a["ɵLocaleDataIndex"].ExtraData]=n)}function yt(t,e){e=encodeURIComponent(e);for(const n of t.split(";")){const t=n.indexOf("="),[a,r]=-1==t?[n,""]:[n.slice(0,t),n.slice(t+1)];if(a.trim()===e)return decodeURIComponent(r)}return null}class vt{constructor(t,e){this._name=t,this._options=e,this.value=null,this._lastSetValue=null,this._lastSetValueType=0,this._lastSetValueIdentityChange=!1}setValue(t){if(Array.isArray(t))this._lastSetValueType=4;else if(t instanceof Set)this._lastSetValueType=8;else if(t&&"string"==typeof t){if(!(4&this._options))throw new Error(this._name+" string values are not allowed");this._lastSetValueType=1}else this._lastSetValueType=t?2:0;this._lastSetValueIdentityChange=!0,this._lastSetValue=t||null}hasValueChanged(){let t=this._lastSetValueIdentityChange;if(!(t||14&this._lastSetValueType))return!1;let e=null;const n=!!(1&this._options),a=!!(8&this._options),r=!!(2&this._options);switch(this._lastSetValueType){case 1:const i=this._lastSetValue.split(/\s+/g);16&this._options?(e={},i.forEach((t,n)=>e[t]=!0)):e=i.reduce((t,e,n)=>t+(n?" ":"")+e);break;case 2:const s=this._lastSetValue,o=Object.keys(s);t||(t=!this.value||function(t,e,n){const a=t;if(!wt(Object.keys(e),a))return!0;for(let r=0;r<a.length;r++){const t=a[r];if(e[t]!==n[t])return!0}return!1}(o,this.value,s)),t&&(e=xt(this._name,n,a,r,s,o));break;case 4:case 8:const u=Array.from(this._lastSetValue);t||(t=!wt(Object.keys(this.value),u)),t&&(e=xt(this._name,n,a,r,u));break;default:e=null}return t&&(this.value=e),t}}function xt(t,e,n,a,r,i){const s={};if(i)for(let o=0;o<i.length;o++){let t=i[o];t=e?t.trim():t,Tt(s,t,r[t],n,a)}else for(let o=0;o<r.length;o++){let n=r[o];_t(t,n),n=e?n.trim():n,Tt(s,n,!0,!1,a)}return s}function _t(t,e){if("string"!=typeof e)throw new Error(`${t} can only toggle CSS classes expressed as strings, got ${e}`)}function Tt(t,e,n,a,r){if(r&&e.indexOf(" ")>0){const r=e.split(/\s+/g);for(let e=0;e<r.length;e++)Ot(t,r[e],n,a)}else Ot(t,e,n,a)}function Ot(t,e,n,a){if(a){const t=function(t,e){const n=t.indexOf(".");if(n>0){const a=t.substr(n+1);t=t.substring(0,n),null!=e&&(e+=a)}return{key:t,value:e}}(e,n);n=t.value,e=t.key}t[e]=n}function wt(t,e){if(t&&e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(-1===e.indexOf(t[n]))return!1;return!0}return!1}class St{}class It{constructor(t,e,n,a){this._iterableDiffers=t,this._keyValueDiffers=e,this._ngEl=n,this._renderer=a,this._initialClasses=[]}getValue(){return null}setClass(t){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof t?t.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}setNgClass(t){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof t?t.split(/\s+/):t,this._rawClass&&(Object(a["ɵisListLikeIterable"])(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}applyChanges(){if(this._iterableDiffer){const t=this._iterableDiffer.diff(this._rawClass);t&&this._applyIterableChanges(t)}else if(this._keyValueDiffer){const t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}}_applyKeyValueChanges(t){t.forEachAddedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachChangedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachRemovedItem(t=>{t.previousValue&&this._toggleClass(t.key,!1)})}_applyIterableChanges(t){t.forEachAddedItem(t=>{if("string"!=typeof t.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(a["ɵstringify"])(t.item));this._toggleClass(t.item,!0)}),t.forEachRemovedItem(t=>this._toggleClass(t.item,!1))}_applyClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!0)):Object.keys(t).forEach(e=>this._toggleClass(e,!!t[e])))}_removeClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!1)):Object.keys(t).forEach(t=>this._toggleClass(t,!1)))}_toggleClass(t,e){(t=t.trim())&&t.split(/\s+/g).forEach(t=>{e?this._renderer.addClass(this._ngEl.nativeElement,t):this._renderer.removeClass(this._ngEl.nativeElement,t)})}}class Nt{constructor(){this._value=null,this._ngClassDiffer=new vt("NgClass",23),this._classStringDiffer=null}getValue(){return this._value}setClass(t){(t||this._classStringDiffer)&&(this._classStringDiffer=this._classStringDiffer||new vt("class",20),this._classStringDiffer.setValue(t))}setNgClass(t){this._ngClassDiffer.setValue(t)}applyChanges(){const t=!!this._classStringDiffer&&this._classStringDiffer.hasValueChanged(),e=this._ngClassDiffer.hasValueChanged();if(t||e){let t=this._ngClassDiffer.value;if(this._classStringDiffer){let e=this._classStringDiffer.value;e&&(t=t?Object.assign({},e,t):e)}this._value=t}}}const Ct={provide:St,useClass:It},Rt={provide:St,useClass:Nt},At=Ct,kt=Object(a["ɵɵdefineDirective"])({type:function(){},selectors:null,factory:()=>{},hostBindings:function(t,e,n){1&t&&(Object(a["ɵɵallocHostVars"])(1),Object(a["ɵɵstyling"])()),2&t&&(Object(a["ɵɵclassMap"])(e.getValue()),Object(a["ɵɵstylingApply"])())}});let Et=(()=>{class t{constructor(t){this._delegate=t}getValue(){return this._delegate.getValue()}}return t.ngDirectiveDef=void 0,t})();class Lt extends Et{constructor(t){super(t)}set klass(t){this._delegate.setClass(t)}set ngClass(t){this._delegate.setNgClass(t)}ngDoCheck(){this._delegate.applyChanges()}}class Dt{constructor(t){this._viewContainerRef=t,this._componentRef=null,this._moduleRef=null}ngOnChanges(t){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){const e=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(t.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){const t=e.get(a.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(t.injector)}else this._moduleRef=null;const n=(this._moduleRef?this._moduleRef.componentFactoryResolver:e.get(a.ComponentFactoryResolver)).resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(n,this._viewContainerRef.length,e,this.ngComponentOutletContent)}}ngOnDestroy(){this._moduleRef&&this._moduleRef.destroy()}}class Pt{constructor(t,e,n,a){this.$implicit=t,this.ngForOf=e,this.index=n,this.count=a}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}class Mt{constructor(t,e,n){this._viewContainer=t,this._template=e,this._differs=n,this._ngForOfDirty=!0,this._differ=null}set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){Object(a.isDevMode)()&&null!=t&&"function"!=typeof t&&console&&console.warn&&console.warn(`trackBy must be a function, but received ${JSON.stringify(t)}. See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.`),this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(e){throw new Error(`Cannot find a differ supporting object '${n}' of type '${t=n,t.name||typeof t}'. NgFor only supports binding to Iterables such as Arrays.`)}}var t;if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const e=[];t.forEachOperation((t,n,a)=>{if(null==t.previousIndex){const n=this._viewContainer.createEmbeddedView(this._template,new Pt(null,this._ngForOf,-1,-1),null===a?void 0:a),r=new qt(t,n);e.push(r)}else if(null==a)this._viewContainer.remove(null===n?void 0:n);else if(null!==n){const r=this._viewContainer.get(n);this._viewContainer.move(r,a);const i=new qt(t,r);e.push(i)}});for(let n=0;n<e.length;n++)this._perViewChange(e[n].view,e[n].record);for(let n=0,a=this._viewContainer.length;n<a;n++){const t=this._viewContainer.get(n);t.context.index=n,t.context.count=a,t.context.ngForOf=this._ngForOf}t.forEachIdentityChange(t=>{this._viewContainer.get(t.currentIndex).context.$implicit=t.item})}_perViewChange(t,e){t.context.$implicit=e.item}static ngTemplateContextGuard(t,e){return!0}}class qt{constructor(t,e){this.record=t,this.view=e}}class jt{constructor(t,e){this._viewContainer=t,this._context=new Ft,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=e}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){Gt("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){Gt("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}}class Ft{constructor(){this.$implicit=null,this.ngIf=null}}function Gt(t,e){if(e&&!e.createEmbeddedView)throw new Error(`${t} must be a TemplateRef, but received '${Object(a["ɵstringify"])(e)}'.`)}class Vt{constructor(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()}}class zt{constructor(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(t){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(t)}_matchCase(t){const e=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||e,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),e}_updateDefaultCases(t){if(this._defaultViews&&t!==this._defaultUsed){this._defaultUsed=t;for(let e=0;e<this._defaultViews.length;e++)this._defaultViews[e].enforceState(t)}}}class Bt{constructor(t,e,n){this.ngSwitch=n,n._addCase(),this._view=new Vt(t,e)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}class Yt{constructor(t,e,n){n._addDefault(new Vt(t,e))}}class Ht{constructor(t){this._localization=t,this._caseViews={}}set ngPlural(t){this._switchValue=t,this._updateView()}addCase(t,e){this._caseViews[t]=e}_updateView(){this._clearViews();const t=Object.keys(this._caseViews),e=gt(this._switchValue,t,this._localization);this._activateView(this._caseViews[e])}_clearViews(){this._activeView&&this._activeView.destroy()}_activateView(t){t&&(this._activeView=t,this._activeView.create())}}class Ut{constructor(t,e,n,a){this.value=t;const r=!isNaN(Number(t));a.addCase(r?"="+t:t,new Vt(n,e))}}class Wt{}class Kt{constructor(t,e,n){this._ngEl=t,this._differs=e,this._renderer=n}getValue(){return null}setNgStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}applyChanges(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_applyChanges(t){t.forEachRemovedItem(t=>this._setStyle(t.key,null)),t.forEachAddedItem(t=>this._setStyle(t.key,t.currentValue)),t.forEachChangedItem(t=>this._setStyle(t.key,t.currentValue))}_setStyle(t,e){const[n,a]=t.split(".");null!=(e=null!=e&&a?`${e}${a}`:e)?this._renderer.setStyle(this._ngEl.nativeElement,n,e):this._renderer.removeStyle(this._ngEl.nativeElement,n)}}class $t{constructor(){this._differ=new vt("NgStyle",8),this._value=null}getValue(){return this._value}setNgStyle(t){this._differ.setValue(t)}applyChanges(){this._differ.hasValueChanged()&&(this._value=this._differ.value)}}const Jt={provide:Wt,useClass:Kt},Zt={provide:Wt,useClass:$t},Qt=Jt,Xt=Object(a["ɵɵdefineDirective"])({type:function(){},selectors:null,factory:()=>{},hostBindings:function(t,e,n){1&t&&Object(a["ɵɵstyling"])(),2&t&&(Object(a["ɵɵstyleMap"])(e.getValue()),Object(a["ɵɵstylingApply"])())}});let te=(()=>{class t{constructor(t){this._delegate=t}getValue(){return this._delegate.getValue()}}return t.ngDirectiveDef=void 0,t})();class ee extends te{constructor(t){super(t)}set ngStyle(t){this._delegate.setNgStyle(t)}ngDoCheck(){this._delegate.applyChanges()}}class ne{constructor(t){this._viewContainerRef=t,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}ngOnChanges(t){this._shouldRecreateView(t)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)}_shouldRecreateView(t){const e=t.ngTemplateOutletContext;return!!t.ngTemplateOutlet||e&&this._hasContextShapeChanged(e)}_hasContextShapeChanged(t){const e=Object.keys(t.previousValue||{}),n=Object.keys(t.currentValue||{});if(e.length===n.length){for(let t of n)if(-1===e.indexOf(t))return!0;return!1}return!0}_updateExistingContext(t){for(let e of Object.keys(t))this._viewRef.context[e]=this.ngTemplateOutletContext[e]}}const ae=[Lt,Dt,Mt,jt,ne,ee,zt,Bt,Yt,Ht,Ut];function re(t,e){return Error(`InvalidPipeArgument: '${e}' for pipe '${Object(a["ɵstringify"])(t)}'`)}const ie=/((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/,se={yMMMdjms:me(be([ge("year",1),pe("month",3),ge("day",1),ge("hour",1),ge("minute",1),ge("second",1)])),yMdjm:me(be([ge("year",1),ge("month",1),ge("day",1),ge("hour",1),ge("minute",1)])),yMMMMEEEEd:me(be([ge("year",1),pe("month",4),pe("weekday",4),ge("day",1)])),yMMMMd:me(be([ge("year",1),pe("month",4),ge("day",1)])),yMMMd:me(be([ge("year",1),pe("month",3),ge("day",1)])),yMd:me(be([ge("year",1),ge("month",1),ge("day",1)])),jms:me(be([ge("hour",1),ge("second",1),ge("minute",1)])),jm:me(be([ge("hour",1),ge("minute",1)]))},oe={yyyy:me(ge("year",4)),yy:me(ge("year",2)),y:me(ge("year",1)),MMMM:me(pe("month",4)),MMM:me(pe("month",3)),MM:me(ge("month",2)),M:me(ge("month",1)),LLLL:me(pe("month",4)),L:me(pe("month",1)),dd:me(ge("day",2)),d:me(ge("day",1)),HH:ue(de(me(he(ge("hour",2),!1)))),H:de(me(he(ge("hour",1),!1))),hh:ue(de(me(he(ge("hour",2),!0)))),h:de(me(he(ge("hour",1),!0))),jj:me(ge("hour",2)),j:me(ge("hour",1)),mm:ue(me(ge("minute",2))),m:me(ge("minute",1)),ss:ue(me(ge("second",2))),s:me(ge("second",1)),sss:me(ge("second",3)),EEEE:me(pe("weekday",4)),EEE:me(pe("weekday",3)),EE:me(pe("weekday",2)),E:me(pe("weekday",1)),a:le(me(he(ge("hour",1),!0))),Z:fe("short"),z:fe("long"),ww:me({}),w:me({}),G:me(pe("era",1)),GG:me(pe("era",2)),GGG:me(pe("era",3)),GGGG:me(pe("era",4))};function ue(t){return function(e,n){const a=t(e,n);return 1==a.length?"0"+a:a}}function le(t){return function(e,n){return t(e,n).split(" ")[1]}}function de(t){return function(e,n){return t(e,n).split(" ")[0]}}function ce(t,e,n){return new Intl.DateTimeFormat(e,n).format(t).replace(/[\u200e\u200f]/g,"")}function fe(t){const e={hour:"2-digit",hour12:!1,timeZoneName:t};return function(t,n){const a=ce(t,n,e);return a?a.substring(3):""}}function he(t,e){return t.hour12=e,t}function ge(t,e){const n={};return n[t]=2===e?"2-digit":"numeric",n}function pe(t,e){const n={};return n[t]=e<4?e>1?"short":"narrow":"long",n}function be(t){return t.reduce((t,e)=>Object.assign({},t,e),{})}function me(t){return(e,n)=>ce(e,n,t)}const ye=new Map;let ve=(()=>{class t{constructor(t){this._locale=t}transform(e,n="mediumDate"){if(null==e||""===e||e!=e)return null;let a;if("string"==typeof e&&(e=e.trim()),xe(e))a=e;else if(isNaN(e-parseFloat(e)))if("string"==typeof e&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(e)){const[t,n,r]=e.split("-").map(t=>parseInt(t,10));a=new Date(t,n-1,r)}else a=new Date(e);else a=new Date(parseFloat(e));if(!xe(a)){let n;if("string"!=typeof e||!(n=e.match(z)))throw re(t,e);a=at(n)}return class{static format(t,e,n){return function(t,e,n){const a=se[t];if(a)return a(e,n);const r=t;let i=ye.get(r);if(!i){let e;i=[],ie.exec(t);let n=t;for(;n;)e=ie.exec(n),e?(i=i.concat(e.slice(1)),n=i.pop()):(i.push(n),n=null);ye.set(r,i)}return i.reduce((t,a)=>{const r=oe[a];return t+(r?r(e,n):function(t){return"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}(a))},"")}(n,t,e)}}.format(a,this._locale,t._ALIASES[n]||n)}}return t._ALIASES={medium:"yMMMdjms",short:"yMdjm",fullDate:"yMMMMEEEEd",longDate:"yMMMMd",mediumDate:"yMMMd",shortDate:"yMd",mediumTime:"jms",shortTime:"jm"},t})();function xe(t){return t instanceof Date&&!isNaN(t.valueOf())}function _e(t,e,n,a,r,i=null,s=!1){if(null==n)return null;if("number"!=typeof(n="string"!=typeof n||isNaN(+n-parseFloat(n))?n:+n))throw re(t,n);let o,u,l;if(a!==h.Currency&&(o=1,u=0,l=3),r){const t=r.match(it);if(null===t)throw new Error(r+" is not a valid digit info for number pipes");null!=t[1]&&(o=ct(t[1])),null!=t[3]&&(u=ct(t[3])),null!=t[5]&&(l=ct(t[5]))}return class{static format(t,e,n,a={}){const{minimumIntegerDigits:r,minimumFractionDigits:i,maximumFractionDigits:s,currency:o,currencyAsSymbol:u=!1}=a,l={minimumIntegerDigits:r,minimumFractionDigits:i,maximumFractionDigits:s,style:h[n].toLowerCase()};return n==h.Currency&&(l.currency="string"==typeof o?o:void 0,l.currencyDisplay=u?"symbol":"code"),new Intl.NumberFormat(e,l).format(t)}}.format(n,e,a,{minimumIntegerDigits:o,minimumFractionDigits:u,maximumFractionDigits:l,currency:i,currencyAsSymbol:s})}class Te{constructor(t){this._locale=t}transform(t,e){return _e(Te,this._locale,t,h.Decimal,e)}}class Oe{constructor(t){this._locale=t}transform(t,e){return _e(Oe,this._locale,t,h.Percent,e)}}class we{constructor(t){this._locale=t}transform(t,e="USD",n=!1,a){return _e(we,this._locale,t,h.Currency,a,e,n)}}const Se=[Te,Oe,we,ve];class Ie{createSubscription(t,e){return t.subscribe({next:e,error:t=>{throw t}})}dispose(t){t.unsubscribe()}onDestroy(t){t.unsubscribe()}}class Ne{createSubscription(t,e){return t.then(e,t=>{throw t})}dispose(t){}onDestroy(t){}}const Ce=new Ne,Re=new Ie;class Ae{constructor(t){this._ref=t,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}ngOnDestroy(){this._subscription&&this._dispose()}transform(t){return this._obj?t!==this._obj?(this._dispose(),this.transform(t)):Object(a["ɵlooseIdentical"])(this._latestValue,this._latestReturnedValue)?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,a.WrappedValue.wrap(this._latestValue)):(t&&this._subscribe(t),this._latestReturnedValue=this._latestValue,this._latestValue)}_subscribe(t){this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,e=>this._updateLatestValue(t,e))}_selectStrategy(t){if(Object(a["ɵisPromise"])(t))return Ce;if(Object(a["ɵisObservable"])(t))return Re;throw re(Ae,t)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null}_updateLatestValue(t,e){t===this._obj&&(this._latestValue=e,this._ref.markForCheck())}}class ke{transform(t){if(!t)return t;if("string"!=typeof t)throw re(ke,t);return t.toLowerCase()}}const Ee=/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\S*/g;class Le{transform(t){if(!t)return t;if("string"!=typeof t)throw re(Le,t);return t.replace(Ee,t=>t[0].toUpperCase()+t.substr(1).toLowerCase())}}class De{transform(t){if(!t)return t;if("string"!=typeof t)throw re(De,t);return t.toUpperCase()}}class Pe{constructor(t){this.locale=t}transform(t,e="mediumDate",n,a){if(null==t||""===t||t!=t)return null;try{return K(t,e,a||this.locale,n)}catch(r){throw re(Pe,r.message)}}}const Me=/#/g;class qe{constructor(t){this._localization=t}transform(t,e,n){if(null==t)return"";if("object"!=typeof e||null===e)throw re(qe,e);return e[gt(t,Object.keys(e),this._localization,n)].replace(Me,t.toString())}}class je{transform(t,e){if(null==t)return"";if("object"!=typeof e||"string"!=typeof t)throw re(je,e);return e.hasOwnProperty(t)?e[t]:e.hasOwnProperty("other")?e.other:""}}class Fe{transform(t){return JSON.stringify(t,null,2)}}class Ge{constructor(t){this.differs=t,this.keyValues=[]}transform(t,e=Ve){if(!t||!(t instanceof Map)&&"object"!=typeof t)return null;this.differ||(this.differ=this.differs.find(t).create());const n=this.differ.diff(t);return n&&(this.keyValues=[],n.forEachItem(t=>{this.keyValues.push({key:t.key,value:t.currentValue})}),this.keyValues.sort(e)),this.keyValues}}function Ve(t,e){const n=t.key,a=e.key;if(n===a)return 0;if(void 0===n)return 1;if(void 0===a)return-1;if(null===n)return 1;if(null===a)return-1;if("string"==typeof n&&"string"==typeof a)return n<a?-1:1;if("number"==typeof n&&"number"==typeof a)return n-a;if("boolean"==typeof n&&"boolean"==typeof a)return n<a?-1:1;const r=String(n),i=String(a);return r==i?0:r<i?-1:1}class ze{constructor(t){this._locale=t}transform(t,e,n){if(He(t))return null;n=n||this._locale;try{return lt(Ue(t),n,e)}catch(a){throw re(ze,a.message)}}}class Be{constructor(t){this._locale=t}transform(t,e,n){if(He(t))return null;n=n||this._locale;try{return ut(Ue(t),n,e)}catch(a){throw re(Be,a.message)}}}class Ye{constructor(t){this._locale=t}transform(t,e,n="symbol",a,r){if(He(t))return null;r=r||this._locale,"boolean"==typeof n&&(console&&console.warn&&console.warn('Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".'),n=n?"symbol":"code");let i=e||"USD";"code"!==n&&(i="symbol"===n||"symbol-narrow"===n?G(i,"symbol"===n?"wide":"narrow",r):n);try{return ot(Ue(t),r,i,e,a)}catch(s){throw re(Ye,s.message)}}}function He(t){return null==t||""===t||t!=t}function Ue(t){if("string"==typeof t&&!isNaN(Number(t)-parseFloat(t)))return Number(t);if("number"!=typeof t)throw new Error(t+" is not a number");return t}class We{transform(t,e,n){if(null==t)return t;if(!this.supports(t))throw re(We,t);return t.slice(e,n)}supports(t){return"string"==typeof t||Array.isArray(t)}}const Ke=[Ae,De,ke,Fe,We,ze,Be,Le,Ye,Pe,qe,je,Ge];class $e{}class Je{}const Ze=new a.InjectionToken("DocumentToken"),Qe="browser",Xe="server",tn="browserWorkerApp",en="browserWorkerUi";function nn(t){return t===Qe}function an(t){return t===Xe}function rn(t){return t===tn}function sn(t){return t===en}const on=new a.Version("8.2.14");let un=(()=>{class t{}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({token:t,providedIn:"root",factory:()=>new ln(Object(a["ɵɵinject"])(Ze),window,Object(a["ɵɵinject"])(a.ErrorHandler))}),t})();class ln{constructor(t,e,n){this.document=t,this.window=e,this.errorHandler=n,this.offset=()=>[0,0]}setOffset(t){this.offset=Array.isArray(t)?()=>t:t}getScrollPosition(){return this.supportScrollRestoration()?[this.window.scrollX,this.window.scrollY]:[0,0]}scrollToPosition(t){this.supportScrollRestoration()&&this.window.scrollTo(t[0],t[1])}scrollToAnchor(t){if(this.supportScrollRestoration()){t=this.window.CSS&&this.window.CSS.escape?this.window.CSS.escape(t):t.replace(/(\"|\'\ |:|\.|\[|\]|,|=)/g,"\\$1");try{const e=this.document.querySelector("#"+t);if(e)return void this.scrollToElement(e);const n=this.document.querySelector(`[name='${t}']`);if(n)return void this.scrollToElement(n)}catch(e){this.errorHandler.handleError(e)}}}setHistoryScrollRestoration(t){if(this.supportScrollRestoration()){const e=this.window.history;e&&e.scrollRestoration&&(e.scrollRestoration=t)}}scrollToElement(t){const e=t.getBoundingClientRect(),n=e.left+this.window.pageXOffset,a=e.top+this.window.pageYOffset,r=this.offset();this.window.scrollTo(n-r[0],a-r[1])}supportScrollRestoration(){try{return!!this.window&&!!this.window.scrollTo}catch(t){return!1}}}class dn{setOffset(t){}getScrollPosition(){return[0,0]}scrollToPosition(t){}scrollToAnchor(t){}setHistoryScrollRestoration(t){}}},SatO:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("wd/R"))},SeVD:function(t,e,n){"use strict";var a=n("ngJS"),r=n("NJ4a"),i=n("Lhse"),s=n("kJWO"),o=n("I55L"),u=n("c2HN"),l=n("XoHu");n.d(e,"a",(function(){return d}));const d=t=>{if(t&&"function"==typeof t[s.a])return d=t,t=>{const e=d[s.a]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)};if(Object(o.a)(t))return Object(a.a)(t);if(Object(u.a)(t))return n=t,t=>(n.then(e=>{t.closed||(t.next(e),t.complete())},e=>t.error(e)).then(null,r.a),t);if(t&&"function"==typeof t[i.a])return e=t,t=>{const n=e[i.a]();for(;;){const e=n.next();if(e.done){t.complete();break}if(t.next(e.value),t.closed)break}return"function"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t};{const e=Object(l.a)(t)?"an invalid object":`'${t}'`;throw new TypeError(`You provided ${e} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`)}var e,n,d}},SgmB:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("IheW"),r=n("LRne"),i=n("5+tZ"),s=n("8Y7J"),o=n("pL04");let u=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("api/role")}delete(t){return this.http.delete("api/role/"+t)}get(t){return this.http.get("api/role/"+t)}create(t){return this.http.post("api/role",t)}clone(t,e){let n=new a.h;return n=n.append("new_name",e),this.http.post(`api/role/${t}/clone`,null,{params:n})}update(t){return this.http.put("api/role/"+t.name,t)}exists(t){return this.list().pipe(Object(i.a)(e=>{const n=e.some(e=>e.name===t);return Object(r.a)(n)}))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](a.c))},token:t,providedIn:o.a}),t})()},SpAZ:function(t,e,n){"use strict";function a(t){return t}n.d(e,"a",(function(){return a}))},SxV6:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("sVev"),r=n("pLZG"),i=n("IzEk"),s=n("xbPD"),o=n("XDbj"),u=n("SpAZ");function l(t,e){const n=arguments.length>=2;return l=>l.pipe(t?Object(r.a)((e,n)=>t(e,n,l)):u.a,Object(i.a)(1),n?Object(s.a)(e):Object(o.a)(()=>new a.a))}},TAQX:function(t,e,n){var a=n("im1V");t.exports=function(t,e){return function(n,r){if(null==n)return n;if(!a(n))return t(n,r);for(var i=n.length,s=e?i:-1,o=Object(n);(e?s--:++s<i)&&!1!==r(o[s],s,o););return n}}},THq6:function(t,e,n){var a=n("pMcL"),r=a?a.prototype:void 0,i=r?r.valueOf:void 0;t.exports=function(t){return i?Object(i.call(t)):{}}},TJUb:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e){return a.isPlainObject(e)?a.get(e,t,t):t}}},TNUL:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"TreeNode, tree-node",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div\n        *ngIf="!templates.treeNodeFullTemplate"\n        [class]="node.getClass()"\n        [class.tree-node]="true"\n        [class.tree-node-expanded]="node.isExpanded && node.hasChildren"\n        [class.tree-node-collapsed]="node.isCollapsed && node.hasChildren"\n        [class.tree-node-leaf]="node.isLeaf"\n        [class.tree-node-active]="node.isActive"\n        [class.tree-node-focused]="node.isFocused"\n      >\n        <tree-node-drop-slot\n          *ngIf="index === 0"\n          [dropIndex]="node.index"\n          [node]="node.parent"\n        ></tree-node-drop-slot>\n\n        <tree-node-wrapper\n          [node]="node"\n          [index]="index"\n          [templates]="templates"\n        ></tree-node-wrapper>\n\n        <tree-node-children\n          [node]="node"\n          [templates]="templates"\n        ></tree-node-children>\n        <tree-node-drop-slot\n          [dropIndex]="node.index + 1"\n          [node]="node.parent"\n        ></tree-node-drop-slot>\n      </div>\n      <ng-container\n        [ngTemplateOutlet]="templates.treeNodeFullTemplate"\n        [ngTemplateOutletContext]="{\n          $implicit: node,\n          node: node,\n          index: index,\n          templates: templates\n        }"\n      >\n      </ng-container>\n    </ng-container>\n  '})],t)}()},TWQb:function(t,e,n){var a=n("/GqU"),r=n("UMSQ"),i=n("I8vh"),s=function(t){return function(e,n,s){var o,u=a(e),l=r(u.length),d=i(s,l);if(t&&n!=n){for(;l>d;)if((o=u[d++])!=o)return!0}else for(;l>d;d++)if((t||d in u)&&u[d]===n)return t||d||0;return!t&&-1}};t.exports={includes:s(!0),indexOf:s(!1)}},TYzs:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=parseInt(t,10);return isNaN(e)?t:t+(1===Math.floor(e/10)?"th":e%10==1?"st":e%10==2?"nd":e%10==3?"rd":"th")}}},"TbD+":function(t,e,n){var a=n("QCZx"),r=n("jqoL");t.exports=function(t,e){return a(t,e,(function(e,n){return r(t,n)}))}},TeQF:function(t,e,n){"use strict";var a=n("I+eb"),r=n("tycR").filter,i=n("Hd5f"),s=n("rkAj"),o=i("filter"),u=s("filter");a({target:"Array",proto:!0,forced:!o||!u},{filter:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}})},Tq0f:function(t,e,n){var a=n("Ytn0");t.exports=function(t){var e=a(this,t).delete(t);return this.size-=e?1:0,e}},U02d:function(t,e,n){var a=n("qN6l"),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(a){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return r.call(e,t)?e[t]:void 0}},UDhR:function(t,e,n){!function(t){"use strict";t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},UMSQ:function(t,e,n){var a=n("ppGB"),r=Math.min;t.exports=function(t){return t>0?r(a(t),9007199254740991):0}},USCx:function(t,e,n){!function(t){"use strict";t.defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Méitheamh","Iúil","Lúnasa","Meán Fómhair","Deaireadh Fómhair","Samhain","Nollaig"],monthsShort:["Eaná","Feab","Márt","Aibr","Beal","Méit","Iúil","Lúna","Meán","Deai","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Satharn"],weekdaysShort:["Dom","Lua","Mái","Céa","Déa","hAo","Sat"],weekdaysMin:["Do","Lu","Má","Ce","Dé","hA","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné aig] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n("wd/R"))},UTVS:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},Uies:function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var a=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==a||"symbol"!=a&&n.test(t))&&t>-1&&t%1==0&&t<e}},UnOm:function(t,e,n){var a=n("ktBm"),r=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=a(e,t);return!(n<0||(n==e.length-1?e.pop():r.call(e,n,1),--this.size,0))}},UpQW:function(t,e,n){!function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n("wd/R"))},Uqmq:function(t,e,n){var a=n("M+Mf"),r=n("hmSm");t.exports=function t(e,n,i,s,o,u){return r(e)&&r(n)&&(u.set(n,e),a(e,n,void 0,t,u),u.delete(n)),e}},Ur1D:function(t,e,n){!function(t){"use strict";t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n("wd/R"))},UxlC:function(t,e,n){"use strict";var a=n("14Sl"),r=n("glrk"),i=n("ewvW"),s=n("UMSQ"),o=n("ppGB"),u=n("HYAF"),l=n("iqWW"),d=n("FMNM"),c=Math.max,f=Math.min,h=Math.floor,g=/\$([$&'`]|\d\d?|<[^>]*>)/g,p=/\$([$&'`]|\d\d?)/g;a("replace",2,(function(t,e,n,a){var b=a.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=a.REPLACE_KEEPS_$0,y=b?"$":"$0";return[function(n,a){var r=u(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,r,a):e.call(String(r),n,a)},function(t,a){if(!b&&m||"string"==typeof a&&-1===a.indexOf(y)){var i=n(e,t,this,a);if(i.done)return i.value}var u=r(t),h=String(this),g="function"==typeof a;g||(a=String(a));var p=u.global;if(p){var x=u.unicode;u.lastIndex=0}for(var _=[];;){var T=d(u,h);if(null===T)break;if(_.push(T),!p)break;""===String(T[0])&&(u.lastIndex=l(h,s(u.lastIndex),x))}for(var O,w="",S=0,I=0;I<_.length;I++){T=_[I];for(var N=String(T[0]),C=c(f(o(T.index),h.length),0),R=[],A=1;A<T.length;A++)R.push(void 0===(O=T[A])?O:String(O));var k=T.groups;if(g){var E=[N].concat(R,C,h);void 0!==k&&E.push(k);var L=String(a.apply(void 0,E))}else L=v(N,h,C,R,k,a);C>=S&&(w+=h.slice(S,C)+L,S=C+N.length)}return w+h.slice(S)}];function v(t,n,a,r,s,o){var u=a+t.length,l=r.length,d=p;return void 0!==s&&(s=i(s),d=g),e.call(o,d,(function(e,i){var o;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,a);case"'":return n.slice(u);case"<":o=s[i.slice(1,-1)];break;default:var d=+i;if(0===d)return e;if(d>l){var c=h(d/10);return 0===c?e:c<=l?void 0===r[c-1]?i.charAt(1):r[c-1]+i.charAt(1):e}o=r[d-1]}return void 0===o?"":o}))}}))},"V/fk":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},V2x9:function(t,e,n){!function(t){"use strict";t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},V3my:function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("cp0P"),s=(n("DSvg"),n("SgmB"),n("20UP"),n("Mxhz"),n("OLbh")),o=n("DNAf"),u=(n("sne2"),n("oxzT")),l=n("mtw6"),d=(n("2EZI"),n("1Ni5")),c=n("oMSZ"),f=(n("aexS"),n("9nlD"),n("1nQr"),function(t){return t.editing="editing",t}({}));class h{}n.d(e,"a",(function(){return g}));class g{constructor(t,e,n,a,r,i,s,l,d,c,h,g,p){this.authService=t,this.authStorageService=e,this.route=n,this.router=a,this.modalService=r,this.roleService=i,this.userService=s,this.notificationService=l,this.i18n=d,this.actionLabels=c,this.passwordPolicyService=h,this.formBuilder=g,this.settingsService=p,this.userFormMode=f,this.messages=new o.a({empty:this.i18n("There are no roles.")},this.i18n),this.passwordPolicyHelpText="",this.icons=u.a,this.bsConfig={dateInputFormat:"YYYY-MM-DD",containerClass:"theme-default"},this.resource=this.i18n("user"),this.createForm(),this.messages=new o.a({empty:this.i18n("There are no roles.")},this.i18n)}createForm(){this.passwordPolicyService.getHelpText().subscribe(t=>{this.passwordPolicyHelpText=t}),this.userForm=this.formBuilder.group({username:["",[a.B.required],[d.a.unique(this.userService.validateUserName,this.userService)]],name:[""],password:["",[],[d.a.passwordPolicy(this.userService,()=>this.userForm.getValue("username"),(t,e,n)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(e),this.passwordValuation=r.defaultTo(n,"")})]],confirmpassword:[""],pwdExpirationDate:[""],email:["",[d.a.email]],roles:[[]],enabled:[!0,[a.B.required]],pwdUpdateRequired:[!0]},{validators:[d.a.match("password","confirmpassword")]})}ngOnInit(){this.router.url.startsWith("/user-management/users/edit")?(this.mode=this.userFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.minDate=new Date;const t=[this.roleService.list(),this.settingsService.getStandardSettings()];Object(i.a)(t).subscribe(t=>{if(this.allRoles=r.map(t[0],t=>(t.enabled=!0,t)),this.pwdExpirationSettings=new c.a(t[1]),this.mode===this.userFormMode.editing)this.initEdit();else if(this.pwdExpirationSettings.pwdExpirationSpan>0){const t=this.userForm.get("pwdExpirationDate"),e=new Date;e.setDate(this.minDate.getDate()+this.pwdExpirationSettings.pwdExpirationSpan),t.setValue(e),t.setValidators([a.B.required])}})}initEdit(){this.disableForEdit(),this.route.params.subscribe(t=>{this.userService.get(t.username).subscribe(t=>{this.response=r.cloneDeep(t),this.setResponse(t)})})}disableForEdit(){this.userForm.get("username").disable()}setResponse(t){["username","name","email","roles","enabled","pwdUpdateRequired"].forEach(e=>this.userForm.get(e).setValue(t[e]));const e=t.pwdExpirationDate;e&&this.userForm.get("pwdExpirationDate").setValue(new Date(1e3*e))}getRequest(){const t=new h;["username","password","name","email","roles","enabled","pwdUpdateRequired"].forEach(e=>t[e]=this.userForm.get(e).value);const e=this.userForm.get("pwdExpirationDate").value;return e&&(this.mode===this.userFormMode.editing&&this.response.pwdExpirationDate===Number(e)/1e3||e.setHours(23,59,59),t.pwdExpirationDate=Number(e)/1e3),t}createAction(){const t=this.getRequest();this.userService.create(t).subscribe(()=>{this.notificationService.show(l.a.success,this.i18n('Created user "{{username}}"',{username:t.username})),this.router.navigate(["/user-management/users"])},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}editAction(){if(this.isUserRemovingNeededRolePermissions()){const t={titleText:this.i18n("Update user"),buttonText:this.i18n("Continue"),bodyTpl:this.removeSelfUserReadUpdatePermissionTpl,onSubmit:()=>{this.modalRef.hide(),this.doEditAction()},onCancel:()=>{this.userForm.setErrors({cdSubmitButton:!0}),this.userForm.get("roles").reset(this.userForm.get("roles").value)}};this.modalRef=this.modalService.show(s.a,{initialState:t})}else this.doEditAction()}isCurrentUser(){return this.authStorageService.getUsername()===this.userForm.getValue("username")}isUserChangingRoles(){return this.isCurrentUser()&&this.response&&!r.isEqual(this.response.roles,this.userForm.getValue("roles"))}isUserRemovingNeededRolePermissions(){return this.isCurrentUser()&&!this.hasUserReadUpdatePermissions(this.userForm.getValue("roles"))}hasUserReadUpdatePermissions(t=[]){for(const e of this.allRoles)if(-1!==t.indexOf(e.name)&&e.scopes_permissions.user){const t=e.scopes_permissions.user;return["read","update"].every(e=>-1!==t.indexOf(e))}return!1}doEditAction(){const t=this.getRequest();this.userService.update(t).subscribe(()=>{this.isUserChangingRoles()?this.authService.logout(()=>{this.notificationService.show(l.a.info,this.i18n("You were automatically logged out because your roles have been changed."))}):(this.notificationService.show(l.a.success,this.i18n('Updated user "{{username}}"',{username:t.username})),this.router.navigate(["/user-management/users"]))},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}clearExpirationDate(){this.userForm.get("pwdExpirationDate").setValue(void 0)}submit(){this.mode===this.userFormMode.editing?this.editAction():this.createAction()}}},V5SL:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="fr-FR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Activer/Désactiver la navigation</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Tableau de bord</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Grappe</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Serveurs</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Moniteurs</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Services</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuration</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Carte CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Modules Manager</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Journaux</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Réserves</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloc</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Images</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Mise en miroir</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Systèmes de fichiers</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartiments</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Sélectionner une langue</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Chargement des données du panneau...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Sélecteur d\'heure Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Réinitialiser les paramètres</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Retour</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Échec du chargement des données.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>sélectionné(e)(s)</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>trouvé(e)(s)</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nom</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Description</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Description longue</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Valeur par défaut</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Valeur par défaut du daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valeurs</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Sauvegarder</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visionneuse de carte CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Chargement...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nom d\'hôte</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Ce champs est requis.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Oui.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Annuler</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Fermer</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Liste d\'hôtes</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Performance globale</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Aucune entrée trouvée</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Journaux de grappes</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Journaux d\'audit</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Chargement de la configuration...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>La configuration n\'a pas pu être chargée.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Modifier le module Manager</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>La valeur entrée n\'est pas un UUID valide, par exemple : 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>La valeur entrée doit être une adresse IP valide.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>La valeur entrée doit être un nombre.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>La valeur entrée doit être un nombre ou une valeur décimale.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Mise à jour</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Statut</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID de grappe</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap modifié</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Dans le quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Hors quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Ajouter</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Fonctionnalités</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Drapeaux OSD à l\'échelle de la grappe</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Soumettre</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avancé...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorité de récupération des OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorité</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personnaliser les valeurs de priorité</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Ce champ est obligatoire !</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>La valeur doit être comprise entre 0 et 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Réévaluer</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profondeur } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profondeur } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Liste des OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valeur</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Modifier</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Supprimer</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Santé</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiques</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clients</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Accès possible par tous les clients</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresses</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Champ obligatoire</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Doit contenir une ou plusieurs valeurs séparées par une virgule</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Par exemple :</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Type d\'accès</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Ajouter des clients</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Aucune grappe disponible --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Sélectionner la grappe --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Ajouter un daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend de stockage</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Aucune réserve de données disponible --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Sélectionner le backend de stockage --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Utilisateur Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Aucun utilisateur disponible --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Sélectionner l\'utilisateur Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID utilisateur CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Aucun client disponible --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Sélectionner le client cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nom CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Libellé de sécurité</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Activer le libellé de sécurité</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Chemin CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Le chemin doit commencer par \'/\' et peut être suivi d\'un mot</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Un nouveau répertoire sera créé</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Chemin</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Le chemin peut être constitué d\'un seul \'/\' ou d\'un seul mot</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Un compartiment sera créé</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocole NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Balise NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Les clients ne peuvent pas monter de sous-répertoires (si la balise = foo, le client ne peut pas monter foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>En utilisant différentes options de balise, il est possible d\'exporter plusieurs fois le même chemin.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>En utilisant différentes options de pseudo, il est possible d\'exporter exporter plusieurs fois le même chemin.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Aucun type d\'accès disponible --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Sélectionner le type d\'accès --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Aucun squash disponible --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Sélectionnez le type de squash d\'ID utilisateur qui est effectué --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocole de transport</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Bienvenue dans Ceph !</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nom d\'utilisateur requis</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Mot de passe requis</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Connexion</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Désolé, l\'utilisateur n\'existe pas dans Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Interdit</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Désolé, vous n\'êtes pas autorisé à voir ce que vous cherchez.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuration RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Supprimez la valeur de configuration locale. La valeur de configuration parent sera héritée et utilisée à la place.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>La valeur minimale est 0.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Liste des réserves</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Le nom doit être exclusivement composé de caractères alphanumériques, de tirets et de traits de soulignement.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Le nom de profil du code d\'effacement sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plug-in</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Blocs de données (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Doit être égal ou supérieur à 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Blocs de codage (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Doit être égal ou supérieur à 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimateur de durabilité (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localité (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domaine de défaillance Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localité Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Aucun</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technique</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Taille de paquet</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Racine Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe de périphérique Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>tout</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Répertoire</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nom...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Le nom de réserve Ceph sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Type de réserve</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Sélectionner un type de réserve --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Au moins un groupe de placements est nécessaire.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Votre grappe ne peut pas gérer autant de groupes de placements. Veuillez recalculer le nombre de groupes de placements nécessaires.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Aide au calcul</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Taille de réplication</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Drapeaux</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Écrasements EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Applications</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Aucun profil de code d\'effacement n\'est disponible --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Sélectionner un profil de code d\'effacement --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Jeu de règles Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Sélectionner une règle crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Règle Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Étapes Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compression</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Mode</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorithme</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Aucun algorithme de compression d\'effacement n\'est disponible --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Taille de blob minimale</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>par ex. 128 Kio</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>La valeur doit être supérieure à 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Taille de blob maximale</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>par ex., 512 Kio</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>La valeur doit être supérieure à la taille de blob minimale.</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rapport</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rapport de compression</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>La valeur doit se situer entre 0.0 et 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>par exemple, 10 Gio</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Détails</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Détails des performances</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Détails des niveaux de mise en cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Déplacer une image vers la corbeille.</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protection expire le </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NON PROTÉGÉ</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Format de date incorrect. Veuillez utiliser "AAAA-MM-JJ HH:mm:ss"</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protection a déjà expiré. Veuillez sélectionner une date ultérieure ou laisser le champ vide.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Déplacer une image</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Présentation</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Cibles</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Authentification de la découverte</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Utilisateur</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Les noms d\'utilisateur doivent comporter entre 8 et 64 caractères et\n                        ne peuvent contenir que des lettres et les caractères \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Mot de passe</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Utilisateur commun</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Mot de passe commun</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informations disponibles :</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Cibles iSCSI non disponibles</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Réserve</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Réserve de données</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Créé</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Taille</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objets</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Taille de l\'objet</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Provisionné</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Provisionnement total</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unité de segmentation</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Nombre de segmentations</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Parent</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Préfixe du nom de bloc</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Tri</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantanés</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Ce paramètre remplace la valeur globale</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Il s\'agit de la valeur globale. Aucune valeur de cette option n\'a été définie pour cette image.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>Les caractères \'/\' et \'@\' ne sont pas autorisés.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Aucune réserve RBD disponible --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Sélectionner une réserve --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Utiliser une réserve de données dédiée</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Réserve de données</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Réserve dédiée qui stocke les données objet du RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Vous devez augmenter la taille.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avancé</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Segmentation</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unité de segmentation</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Sélectionner une unité de segmentation --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Ce champ est obligatoire, car le nombre de segments est défini.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>L\'unité de segmentation est supérieure à la taille de l\'objet.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Nombre de segments</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Ce champ est obligatoire, car l\'unité de segmentation est définie.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Le nombre de segments doit être supérieur à 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Vous êtes sur le point de revenir à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vider la corbeille</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tout</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Réserve :</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nom de la réserve...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurer l\'image</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Pour restaurer</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>saisissez le nouveau nom de l\'image, puis cliquez sur</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nouveau nom</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Expiration le </target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protection jusqu\'au</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologie iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Il n\'est généralement pas nécessaire de modifier ces paramètres par défaut.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Paramètres</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmer</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Paramètres avancés</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN cible</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Modèle IQN incorrect.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Par exemple : iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Plus d\'informations</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Des paramètres avancés de cette cible ont été modifiés.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portails</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Ajouter un portail</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Des paramètres avancés de cette image ont été modifiés.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Ajouter une image</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Authentification ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Initiateurs</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Initiateur</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN client</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>L\'IQN de l\'initiateur doit être unique.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Les noms d\'utilisateur doivent comporter entre 8 et 64 caractères et\n                        ne peuvent contenir que des lettres et les caractères \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>L\'initiateur appartient à un groupe dans lequel les images seront configurées.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Aucun élément ajouté.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Ajouter un initiateur</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Groupes</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Groupe</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Ajouter un groupe</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Corbeille</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problèmes</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronisation en cours</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Prêt</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Modifier le mode de mise en miroir de la réserve</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Les grappes d\'homologues doivent être supprimées avant de désactiver la mise en miroir.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Modifier} other {Ajouter} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nom de grappe</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Le nom de grappe n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>L\'ID CephX n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adresses du moniteur</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Adresses séparées par une virgule...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>L\'adresse du moniteur n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Clef CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Clef Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La clef CephX doit être codée en base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Compteurs de performance non disponibles</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Liste de daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Compteurs de performance</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Chargement des données de compartiment...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>La valeur n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Le nom sélectionné est déjà en cours d\'utilisation.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Propriétaire</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Sélectionner un utilisateur --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Activé</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Type d\'index</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Règle de placement</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marqueur</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marqueur maximum</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Version principale</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Date de modification</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Groupe de zones</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Quota de compartiments</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Taille maximale</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Illimité</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Nombre maximal d\'objets</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nom d\'utilisateur</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Sélectionner un nom d\'utilisateur --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Générer automatiquement la clef</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Clef d\'accès</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Clef secrète</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nom complet</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Adresse électronique</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspendu</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Système</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Nombre maximal de compartiments</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Utilisateurs secondaires</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Fonctionnalités</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Quota utilisateur</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Afficher</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Clefs</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Type</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Sélectionner un type --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Autorisation</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Sélectionner une autorisation --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Utilisateur secondaire</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>L\'ID d\'utilisateur secondaire sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lire, écrire</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>complet</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Clé Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Générer automatiquement le secret</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Chargement des donnés utilisateur…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Les donnés utilisateur n\'ont pas pu être chargées.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>L\'ID utilisateur spécifié est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ceci n\'est pas une adresse électronique valide.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>L\'adresse électronique spécifiée est déjà utilisée.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Nombre max. de compartiments</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Désactivé</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personnalisé</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Clef S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Il n\'y a aucun utilisateur secondaire.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Il n\'y a pas de clefs.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Il n\'y a aucune fonctionnalité.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Taille illimitée</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Taille max.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objets illimités</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Nombre max. d\'objets</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>La valeur saisie doit être &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Description...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Autorisations</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Rôles</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmer le mot de passe</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Le mot de passe de confirmation ne correspond pas au mot de passe.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Adresse électronique</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>L\'adresse électronique n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Vous êtes sur le point de supprimer les autorisations "lecture/mise à jour utilisateur" de votre propre utilisateur.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Si vous continuez, vous ne serez plus en mesure d\'ajouter ni de supprimer des rôles pour n\'importe quel utilisateur.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Voulez-vous vraiment continuer ?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Aide</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentation</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>À propos de</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Paramètres du tableau de bord</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestion des utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Utilisateur connecté</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Se déconnecter</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attributs (carte OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Métadonnées non disponibles</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Métadonnées</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Compteur de performance</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Écritures</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lectures</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogramme</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valeurs actuelles</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Minimum</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Maximum</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Source</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Niveau</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Mise à jour possible lors de l\'exécution (modifiable)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Balises</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valeurs d\'énuménation</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Voir aussi</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Statut de la grappe</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons du gestionnaire</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Passerelles d\'objet</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Serveurs de métadonnées</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Passerelles iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS client</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Débit client</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lectures/Écritures client</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Débit de récupération</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Nettoyer</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Performance</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacité brute</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Groupes de placements par OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Statut du groupe de placements</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacité</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Rangs</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Actuel</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Authentification de la découverte mise à jour</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Il n\'y a aucun portail disponible.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Il n\'y a aucune image disponible.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Il n\'y a aucune image disponible. Veillez à ajouter une image à la cible.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Il n\'y a aucun initiateur disponible. Veillez à ajouter un initiateur à la cible.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Cible</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>État</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Octets de lecture</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Octets d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Opérations d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O depuis</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problème</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Avancement</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Mode d\'édition</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Ajouter un homologue</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Modifier un homologue</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Supprimer un homologue</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>nb en local</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>nb à distance</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>mettre en miroir l\'homologue</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Clef</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Aplatissement en profondeur</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Superposition</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Verrou exclusif</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Assignation d\'objet (nécessite exclusive-lock)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journalisation (nécessite exclusive-lock)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NON PROTÉGÉ</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Retour à l\'état initial de l\'instantané RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Revenir à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Intantané RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Supprimé le</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>type</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>état</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>version</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Hôte</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>racine</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons en veille</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Rang</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Activité</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Utilisation</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Mis à jour</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>La valeur peut être mise à jour au moment de l\'exécution.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Les daemons/clients ne tirent pas cette valeur de\n  la base de données de configuration de Monitor. Nous n\'autorisons pas le réglage de cette option via \'ceph config\n  set ...\'. Cette option doit être configurée via ceph.conf ou via\n  la ligne de commande.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>L\'option ne prend effet qu\'au démarrage du daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>L\'option n\'affecte que la création des grappes.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>L\'option n\'affecte que la création des daemons.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Service</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valeur actuelle</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Modifiable</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Activer</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Désactiver</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Reconnexion en cours… Veuillez patienter.</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Adresse publique</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessions ouvertes</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Pas rentrés</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Les OSD qui ont été marqués comme sortis ne seront pas marqués comme rentrés à leur démarrage.</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Pas sortis</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Les OSD ne seront pas marqués automatiquement comme sortis après l\'intervalle configuré.</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Pas démarrés</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Les OSD ne sont pas autorisés à démarrer.</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Pas arrêtés</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Les rapports de défaillance des OSD sont ignorés, de sorte que les moniteurs ne marquent pas les OSD comme étant arrêtés.</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pause</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Met en pause les lectures et écritures</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Pas de nettoyage</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Nettoyage désactivé</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Pas de nettoyage en profondeur</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Le nettoyage en profondeur est désactivé</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Pas de renvoi</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Le renvoi des groupes de placements est suspendu</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Pas de récupération</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>La récupération des groupes de placements est suspendue</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Tri au niveau du bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Utiliser le tri au niveau du bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Variables snapdir purgées</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Les OSD ont converti les variables snapset</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Suppressions des récupérations</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Suppressions effectuées pendant la restauration et non l\'homologation</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite stricte de journalisation des groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Impose une limite stricte à la longueur du journal des groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Drapeaux OSD mis à jour</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>sorti</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>rentré</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>arrêté</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marquer</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdu</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marqué comme perdu</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Purger</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>purgé</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>détruire</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>détruit</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>supprimer</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Octets de lecture</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Octets d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Opérations d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Nbre max. de renvois</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Nombre maximum de récupérations actives</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Nombre maximum de démarrages uniques de récupérations</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Mise en veille de la récupération</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Travail</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravité</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Démarré</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Utilisé</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispo.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Nettoyé</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>En cours</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Avertissement</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Inconnu</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>opérationnel</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>aucun système de fichiers</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>actif</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>veille</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon actif</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Le service NFS Ganesha n\'est pas configuré.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Utilisateur CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Système de fichiers CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(hérité de la configuration globale)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>hérité de la configuration globale</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Sélectionner le type de squashing d\'ID utilisateur effectué --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Aucun daemon n\'est disponible.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Mode cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Âge évict min.</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Âge vidage min.</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Nombre max d\'octets cibles</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Nombre max. d\'objets cibles</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Aucune application ajoutée</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Limite d\'applications atteinte</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Une réserve peut avoir quatre définitions d\'application maximum.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caractère autorisés \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La longueur maximale est de 128 caractères.</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrer ou ajouter des applications</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Ajouter une application</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Taille de la réplique</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Dernier changement</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Jeu de règles Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartiment</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartiments</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>utilisateur</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Périmètre</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lecture</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Créer</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Rôle système</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Mettre à jour l\'utilisateur</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuer</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Vous avez été automatiquement déconnecté, car vos rôles ont changé.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Chaque objet est divisé en parties de blocs de données, chacune étant stockée sur un OSD différent.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calculez des blocs de codage pour chaque objet et stockez-les sur différents OSD.\n Le nombre de blocs de codage correspond également au nombre d\'OSD qui peuvent être arrêtés sans perdre de données.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Le plugin jerasure est le plugin le plus générique et le plus flexible,\n  c\'est aussi la valeur par défaut des réserves codées à effacement Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La technique la plus flexible est reed_sol_van_van : il suffit de définir k\n et m. La technique cauchy_good peut être plus rapide, mais vous devez choisir la taille du paquet\n avec précaution. reed_sol_r6_op, liberation, blaum_roth et liber8tion sont des équivalents RAID6\n en ce sens qu\'ils ne peuvent être configurés qu\'avec m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>L\'encodage se fera sur des paquets de taille d\'octets.\n  Choisir la bonne taille de paquet est difficile.\n  La documentation de jerasure contient de nombreuses informations à ce sujet.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Avec le plugin jerasure, lorsqu\'un objet codé à effacement est stocké sur\n plusieurs OSD, la récupération à la suite de la perte d\'un OSD nécessite la lecture de tous les autres.\n Par exemple, si jerasure est configuré avec k=8 et m=4, la perte d\'un OSD nécessite de lire\n les onze autres pour pouvoir effectuer une réparation.\n\n Le plugin de code d\'effacement lrc crée des blocs de parité locale pour permettre la récupération avec\n moins d\'OSD. Par exemple, si lrc est configuré avec k=8, m=4 et l=4,\n un bloc de parité supplémentaire est créé pour chaque groupe de quatre OSD. Lorsqu\'un seul OSD est perdu, il peut être\n récupéré avec seulement quatre OSD au lieu de onze.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Regroupez les blocs de données et de codage en ensembles de localité de taille. Par exemple,\n pour k=4 et m=2, lorsque locality=3, deux groupes de trois sont créés. Chaque ensemble peut\n être récupéré sans lire les blocs d\'un autre jeu.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Type de compartiment Crush dans lequel chaque ensemble de blocs défini\n par I sera stocké. Par exemple, s\'il est réglé sur rack, chaque groupe de blocs I sera\n placé dans un rack différent. Il est utilisé pour créer une étape de la règle CRUSH telle que l\'étape de choix\n d\'un rack. S\'il n\'est pas défini, aucun regroupement de ce type n\'est effectué.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Le plug-in isa encapsule la bibliothèque ISA. Il ne fonctionne qu\'avec des processeurs Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Le plugin ISA se présente sous deux formes Reed Solomon.\n Si reed_sol_van est défini, il équivaut à Vandermonde. Si cauchy est configuré, il équivaut à Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Le plug-in shec encapsule la bibliothèque SHEC multiple.\n Il permet à Ceph de récupérer les données plus efficacement qu\'avec les codes Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Nombre de blocs de parité, chacun incluant chaque bloc de données dans sa\n plage de calcul. Ce nombre est utilisé comme estimateur de durabilité. Par exemple, si c=2,\n 2 OSD peuvent être arrêtés sans perte de données.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nom du compartiment crush utilisé pour la première étape de la règle CRUSH.\n Par exemple, l\'étape de définition des valeurs par défaut.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Vérifiez qu\'il n\'existe pas deux blocs dans un compartiment avec le même domaine de\n défaillance. Par exemple, si le domaine de défaillance est un hôte, deux blocs ne seront pas stockés sur le même\n hôte. Cette option est utilisée pour créer une étape de la règle CRUSH telle que chooseleaf host.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restreindre le placement aux périphériques d\'une classe spécifique\n (par exemple, ssd ou hdd), en utilisant les noms des classes de périphériques crush dans la carte CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Définissez le nom du répertoire à partir duquel le plug-in de code d\'effacement est chargé.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Autoriser toutes les opérations</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Autorise uniquement les opérations qui ne modifient pas le serveur</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>N\'autorise pas les opérations de lecture ou d\'écriture, mais toutes les autres.</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>N\'autorise pas la lecture, l\'écriture ni aucune autre opération modifiant les attributs d\'un fichier ou le contenu d\'un répertoire.</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>N\'autorise aucun accès</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Sélectionner la priorité --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Faible</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Élevée</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informations</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Les 5 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Les 15 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Les 30 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>La dernière heure (par défaut)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Les 3 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Les 6 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Les 12 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Les 24 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Hier</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Aujourd\'hui</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Depuis le début de la journée</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Avant-hier</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Les 2 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Il y a huit jours</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>La semaine dernière</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Cette semaine</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Depuis le début de la semaine</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Les 7 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Le mois dernier</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Ce mois</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Depuis le début du mois</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Les 30 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Les 90 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Les 6 derniers mois</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>L\'année écoulée</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>L\'année dernière</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Cette année</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Depuis le début de l\'année</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Les 2 dernières années</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Les 5 dernières années</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Aucun élément sélectionné.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Désélectionnez l\'élément pour le sélectionner à nouveau.</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Limite de sélection atteinte</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Balises de filtre</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Ajouter un badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Aucun élément disponible.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Cloner</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copier</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Nettoyage en profondeur</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Détruire</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Aplatir</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marquer comme arrêté</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marquer comme rentré</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marquer comme perdu</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marquer comme sorti</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Protéger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renommer</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurer</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Déplacer vers la corbeille</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Annuler la protection</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Supprimé</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Cloné</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copié</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Applati</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Purgé</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restauré</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rétabli à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Oui</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Non</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualité de service</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite de bits/s</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Limite souhaitée d\'octets E/S par seconde.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite E/S par seconde</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Limite souhaitée d\'opérations E/S par seconde.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite de bits/s en lecture</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Limite souhaitée de lecture d\'octets par seconde.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Limite souhaitée d\'opérations de lecture par seconde.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite de bits/s en écriture</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Limite souhaitée d\'écriture d\'octets par seconde.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Limite souhaitée d\'opérations d\'écriture par seconde.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Rafale de bits/s</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Limite de rafale d\'octets en E/S souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Rafale E/S par seconde</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Limite de rafale d\'opérations E/S souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Rafale E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Limite de rafale d\'octets lus par seconde.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Rafale E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Limite de rafale d\'opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Rafale E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Limite de rafale de lectures d\'octets souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Rafale d\'E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Limite de rafale d\'opérations d\'écriture souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>En cours d\'exécution</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>exécuter</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Exécuté</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tâche inconnue</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>En cours de création</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>créer</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>En cours de mise à jour</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>mettre à jour</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>En cours de suppression</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonage en cours</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>cloner</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>En cours de copie</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copie</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Aplatissement</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>aplatir</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Retour à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rétablir l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>En cours de déplacement</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>déplacer</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Déplacé</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Impossible de trouver l\'image.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>En cours de restauration.</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurer</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>En cours de purge</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>purger</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>toutes les réserves</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossible de désactiver la mise en miroir, car l\'élément contient un homologue.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},VLqJ:function(t,e,n){var a=n("0GLT"),r=n("QpVZ"),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(a(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!r(t))||s.test(t)||!i.test(t)||null!=e&&t in Object(e)}},VRyK:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("z+Ro"),i=n("bHdf"),s=n("yCtX");function o(...t){let e=Number.POSITIVE_INFINITY,n=null,o=t[t.length-1];return Object(r.a)(o)?(n=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(e=t.pop())):"number"==typeof o&&(e=t.pop()),null===n&&1===t.length&&t[0]instanceof a.a?t[0]:Object(i.a)(e)(Object(s.a)(t,n))}},VTlA:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("mSOc"),n("ufoC");class a{constructor(t,e){this.taskMessageService=t,this.summaryService=e}init(t,e,n,a,r,i,s){this.getUpdate=t,this.preProcessing=e,this.setList=n,this.onFetchError=a,this.taskFilter=r,this.itemFilter=i,this.builders=s||{},this.summaryDataSubscription=this.summaryService.subscribe(t=>{this.getUpdate().subscribe(e=>{this.updateData(e,t.executing_tasks.filter(this.taskFilter))},this.onFetchError)},this.onFetchError)}updateData(t,e){const n=this.preProcessing?this.preProcessing(t):t;this.addMissing(n,e),n.forEach(t=>{const n=e.filter(e=>this.itemFilter(t,e));t.cdExecuting=this.getTaskAction(n)}),this.setList(n)}addMissing(t,e){const n=this.builders.default;e.forEach(e=>{const a=t.find(t=>this.itemFilter(t,e)),r=this.builders[e.name];a||!r&&!n||t.push(r?r(e.metadata):n(e.metadata))})}getTaskAction(t){if(0!==t.length)return t.map(t=>{const e=t.progress?` ${t.progress}%`:"";return this.taskMessageService.getRunningText(t)+"..."+e}).join(", ")}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}}},VXsX:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("LvDl"),r=n("8Y7J");class i{constructor(t,e,n){this.name=t,this.metadata=e,this.onTaskFinished=n}}let s=(()=>{class t{constructor(){this.subscriptions=[]}init(t){return t.subscribe(t=>{const e=t.executing_tasks,n=t.finished_tasks,a=[];for(const r of this.subscriptions){const t=this._getTask(r,n),i=this._getTask(r,e);null!==t&&null===i&&r.onTaskFinished(t),null!==i&&a.push(r),this.subscriptions=a}})}subscribe(t,e,n){this.subscriptions.push(new i(t,e,n))}_getTask(t,e){for(const n of e)if(n.name===t.name&&a.isEqual(n.metadata,t.metadata))return n;return null}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},Vclq:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n("wd/R"))},Vhfg:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("lJxs"),r=n("ej+x"),i=n("8Y7J"),s=n("iInd");let o=(()=>{class t{constructor(t,e){this.router=t,this.featureToggles=e}canActivate(t){return this.featureToggles.get().pipe(Object(a.a)(e=>!1!==e[t.routeConfig.path]||(this.router.navigate(["404"]),!1)))}canActivateChild(t){return this.canActivate(t.parent)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.m),i["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})()},ViD7:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="cs">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Zobraz./skrýt navigaci</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Přehled</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klastr</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Stroje</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitory</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Služby</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Nastavení</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH mapa</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Moduly správy</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Záznamy událostí</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Fondy</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blok</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Obrazy</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Zrcadlení</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Souborové systémy</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Objektová brána</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Procesy služeb</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Uživatelé</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Nádoby</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Získávají se data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> pro\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Čekejte…\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Zobrazují se data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>z mezipaměti\n  pro \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Nedaří se načíst dat \n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> pro\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Zkontrolujte zdraví klastru.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Vyčistit oznámení</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Odebrat oznámení</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Trvání:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>Nejsou zde žádná oznámení.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Úlohy a oznámení</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Vyberte jazyk</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Načítání údajů panelu…</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Nahlédněte do\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, kde naleznete jak\n  nastavit a zapnout funkci monitorování.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana přehled neexistuje. Podívejte se do\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> jak\n  přidat přehledy do Grafany.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Volič čas Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Resetovat nastavení</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Načíst znovu</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Odebrat uživatelsky určenou hodnotu nastavení. Namísto toho bude převzato a použito výchozí nastavení.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Nemůže být vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Nemůže být nižší než 1.</target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Zpět</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Data se nepodařilo načíst</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>vybráno</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>nalezeno</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>celkem</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Název</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Popis</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Podrobnější popis</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Výchozí</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Výchozí pro proces služby</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Hodnoty</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Nemůže být vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Nemůže být nižší než \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Uložit</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>prohlížeč CRUSH mapy</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Načítání…</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Název stroje</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Tuto kolonku je třeba vyplnit.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>Zvolený název stroje už je používán.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Opravdu chcete \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Opravdu chcete označené položky \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> ?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Opravdu chcete \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> označené \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ano, opravdu to chci.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Storno</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Zavřít</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Seznam strojů</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Celková výkonnost</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Zařízení</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nenalezeny žádné položky</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Záznamy událostí v klastra</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Auditní záznamy událostí</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priorita:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Klíčové slovo:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Datum:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Volba data</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Časový rozsah:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Načítání nastavení…</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Toto nastavení se nepodařilo načíst.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Upravit modul správy</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Zadaná hodnota není platné UUID, např.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Je třeba, aby zadaná hodnota byla platnou IP adresou.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Je třeba, aby byla nižší nebo rovná \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Je třeba, aby byla vyšší než nebo rovná \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Je třeba, aby zadaná hodnota byla číslo.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Je třeba, aby zadaná hodnota byla číslo nebo desítkové.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aktualizovat</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Stav</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Identif. kastru</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>mapa monitorů změněna</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epocha</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kvórum spojení</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kvórum monitor</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>vyžadováno spojení</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>vyžadováno monitorů</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>V kvóru</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Není v kvóru</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Přidat</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funkce</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Příznaky OSD pro celý klastr</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Odeslat</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Pokročilé…</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Pokročilé volby nastavení</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorita obnovení OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorita</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Přizpůsobit hodnoty priority</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Tuto kolonku je třeba vyplnit!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká, je třeba, aby nebyla vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Je třeba, aby byla nižší než \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Je třeba, aby hodnota byla mezi 0 a 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Znovu vyvážit</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSD \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>kontrola\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, vybrat, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, vybrat, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Seznam OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Ticha</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Vyberte atribut vůči kterému hledat shodu --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Hodnota</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Použít regulární výraz</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Upravit</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Smazat</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Úprava ticha skončí platnost původního ticha a znovu ho vytvoří jako nové ticho</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Tvůrce</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Komentář</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Čas začátku</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>Pokud čas začátku leží v minulosti, bude namísto něj použit okamžik vytvoření</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Trvání</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>Čas konce</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Zdraví</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiky</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Ohledně nastavení a zapnutí funkce správy NFS Ganesha nahlédněte do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klienti</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Přistupovat může libovolný klient</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresy</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Vyžadovaná kolonka</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Je třeba, aby obsahovalo jednu nebo více čárkou oddělovaných hodnot</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Například:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Typ přístupu</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Přidat klienty</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Žádný klastr k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Vyberte klastr --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Přidat proces služby</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Podpůrná vrstva úložiště</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Žádné fondy k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Vyberte podpůrnou vrstvu úložiště --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Uživatel objektové brány</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Žádní uživatelé k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Vyberte uživatele brány objektů --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>Identif. uživatele CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Žádní klienti k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Vyberte cephx klienta --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Název CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- Žádný souborový systém CephFS k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Vyberte CephFS souborový systém --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Štítek zabezpečení</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Zapnout štítek zabezpečení</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Popis umístění CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Je třeba, aby popis umístění začínal na „/“, za kterým následuje slovo</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Bude vytvořena nová složka</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Popis umístění</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Popis umístění může být pouze jediné „/“ nebo slovo</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Bude vytvořena nová nádoba</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS protokol</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS štítek</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternativní přístup pro \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> připojení (nemůže začínat na /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klienti nemohou připojovat podsložky (tj. pokud Tag = neco, klient nemůže připojit neco/podslozka).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Použitím různých voleb Štítku, může to stejné umístění být exportováno vícekrát.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>Pozice kterou tento \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export zabírá\n                v \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (je třeba, aby se neopakovalo).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>By using different Pseudo options, the same Path may be exported multiple times.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Je třeba, aby Pseudo začínalo na „/“ a a nemůže obsahovat nic z následujícího: &gt;, &lt;, |, &amp;, ( nebo ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Žádný typ přístupu k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Vyberte typ přístupu --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Žádné squash k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Vyberte jaký druh squashování identifikátor uživatele je prováděn --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Transportní protokol</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Původní heslo</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>Je třeba, aby původní a nové heslo nebyly stejné</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>Nové heslo</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Zopakování zadání nového hesla</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Kontrolní zadání nového hesla se neshoduje.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Vítejte v Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Je třeba vyplnit uživatelské jméno</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Je třeba vyplnit heslo</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Přihlásit</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Je nám líto, uživatel v Ceph neexistuje.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Vrátit se na \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Přihlašovací stránku\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. Budete odhlášeni od poskytovatele identity když se pokusíte znovu přihlásit.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Odepřeno</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Omlouváme se, ale nemáte oprávnění zobrazit to, po čem se  poohlížíte.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>Data obdržena v JSON formátu verze 2.x, což je v tuto chvíli nekompatibilní s přehledem.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>výsledek SMART testu samoposouzení celkového stavu</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Informace o zařízení</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Nastavení RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Odebrat hodnotu místnímu nastavení. Namísto ní bude použita hodnota nadřazeného nastavení.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Minimální hodnota je 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Seznam fondů</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Název může být tvořen pouze písmeny a číslicemi, dále ještě spojovníky a podtržítky.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Zvolený název pro profil mazacího kódu je už používán.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Zásuvný modul</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Shluky dat (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Je třeba, aby bylo 2 a více.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Shluky kódování (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Je třeba, aby bylo 1 a více.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Odhadování odolnosti (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Umístění (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Doména selhání crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalita crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Žádné</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technika</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Velikostpaketu</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Kořen crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Třída crush zařízení</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>libovolné</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Složka</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Název…</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Zvolený název pro Ceph fond je už používán.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>Není možné vytvořit RBD fond s názvem „/“ v názvu.\n              Změňte název nebo \'rbd\' odeberte ze seznamu aplikací.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Typ fondul</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Vybrat typ fondu --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Je třeba alespoň jedné skupiny umístění!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Váš klastr nemůže obsloužit tolik skupin umístění. Přepočítejte potřebné množství skupin umístění.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Nápověda k výpočtu</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Replikovaná velikost</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Nejméně: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Nejvíce: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>Zadaná velikost je mimo rozsah. Platná hodnota je\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> až \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> .\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Příznaky</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC přebití</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplikace</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil mazacího kódu</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Žádný profil mazacího kódu --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Vyberte profil mazacího kódu --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Sada pravidel crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Vybrat crush pravidlo --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crush pravidlo</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush kroky</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Komprese</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Režim</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmus</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Žádný algoritmus komprese mazání --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimální velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>např. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Hodnota by měla být vyšší než nula</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Hodnota by měla být nižší než maximální velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Nejvyšší velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>např. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Hodnota by měla být vyšší než nejnižší velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Poměr</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Kompresní poměr</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Hodnota by měla být z rozmezí 0.0 až 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Kvóty</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Nejvýše bajtů</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Pro vypnutí této kvóty nevyplňujte nebo zadejte 0 (nulu).</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>Platná kvóta by měla být vyšší než 0 (nula).</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>např. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>Hodnota by měla být vyšší nebo rovna 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Podrobnosti</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Podrobnosti o výkonnosti</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Podrobnosti o stupních mezipaměti</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Přesunout obraz do koše</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Platnost ochrany skončí v</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NECHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Chybný formát data. Použijte „RRRR-MM-DD HH:mm:ss“.</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Platnost ochrany už skončila. Zvolte budoucí datum nebo nevyplňujte.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Přesunout obraz</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Brány</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Je třeba, aby bylo vyšší nebo rovno \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Je třeba, aby bylo nižší nebo rovno \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Přehled</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Cíle</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Uživatele</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména byla 8 až 64 znaků dlouhá a\n              mohu obsahovat pouze písmena a znaky „.“, „@“, „-“, „_“ a „:“.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Heslo</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla byla 12 až 16 znaků dlouhá\n              a mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Uživatel pro vzájemné ověření</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Heslo pro vzájemné ověření</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby heslo byla 12 až 16 znaků dlouhá a\n              mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Podívejte se do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  jak nastavit a zapnout funkci správy iSCSI cílů.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informace k dispozici:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI cíl není k dispozici</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>K dispozici pouze pro RBD obrazy se zapnutým \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Fond</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Datový fond</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Vytvořeno</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Velikost</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objekty</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Velikost objektu</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Poskytováno</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>neaplikovatelné</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Celkem poskytováno</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Proužkovací jednotka</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Počet proužkování</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Nadřazené</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Předpona názvu bloku</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Pořadí</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Zachycené stavy</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Obraz</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Toto nastavení přebije globální hodnotu</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globální</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Toto je globální hodnota. Pro tento obraz nebyla u této volby nastavena žádná hodnota.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> od\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>„/“ a „@“ nejsou dovoleny.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Žádné rbd fondy k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Vybrat fond --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Použít vyhrazený datový fond</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Datový fond</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Vyhrazený fond který uchovává objektová data RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Je třeba zvětšit.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Pokročilé</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Proužkování</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Jednotka proužku</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Vybrat jednotku proužku --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Tuto kolonku je třeba vyplnit, protože je definován počet proužků!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Jednotka proužku je vyšší než velikost objektu.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Počet proužků</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Tuto kolonku je třeba vyplnit, protože je definována jednotka proužku!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Je třeba, aby počet proužků byl větší než nula.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Chystáte se vrátit zpět</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vysypat koš</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Vše</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Fond:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Název fondu…</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Obnovit obraz</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Pro obnovení</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>zadejte nový název pro obraz a klikněte na</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nový název</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Platnost skončila v</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Chráněno do</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>Tento obraz je chráněn do\n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologie iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Měnit tyto parametry z jejich výchozích hodnot obvykle není potřeba.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Nastavení</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Potvrdit</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Pokročilá nastavení</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN cíle</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN nemá správný formát.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>IQN má následující formu zápisu\n                \'iqn.$rok-$mesic.$adresaObracene:$definovanyNazev\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Například: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Další informace</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Tento cíl má změněná pokročilá nastavení.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portály</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Přidat portál</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>Je třeba alespoň \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> bran.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Tento obraz má změněná nastavení.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Přidat obraz</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL ověřování</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména měla délku 8 až 64 znaků a\n                obsahovala pouze písmena a případně ještě znaky „.“, „@“, „-“, „_“ nebo „:“.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 až 16 znaků\n                a obsahovala písmena a znaky „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciátory</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciátor</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN klienta</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Je třeba, aby se IQN iniciátoru neopakovalo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména měla délku 8 až 64 znaků a\n                        mohou obsahovat pouze písmena a znaky „.“, „@“, „-“, „_“ nebo „:“.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 až 16 znaků\n                        a mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 znaků 16 a\n                        mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Iniciátor spadá do skupiny. Obrazy budou nastaveny ve skupině.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nepřidány žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Přidat iniciátor</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Skupiny</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Skupina</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Přidat skupinu</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Koš</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>problémy</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronizuje se</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Připraveno</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Upravit režim zrcadlení fondu</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Pro úpravu režimu zrcadlení pro fond \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, vyberte ze seznamu nový režim a klikněte na \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Aktualizovat\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Před vypnutím zrcadlení je třeba odebrat klastry-protějšky.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  protějšek zrcadlení fondu\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Název klastru</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Název klastru není platný</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX identif.</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX identif. …</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX identif. není platný.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adresy monitorů</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Čárkou oddělované adresy…</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Adresa monitoru není platná.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX klíč</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Klíč v base64 kódování…</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Je třeba, aby CephX klíč byl v kódování base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Výkonnostní čítače nejsou k dispozici</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Podívejte se do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  jak nastavit a zapnout funkci správy brány objektů.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Seznam procesů služeb</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Výkonnostní čítače</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Načítání dat nádoby…</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Identif.</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Hodnota není platná.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Zvolený název už je používán.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Vlastník</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Vybrat uživatele --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Cíl umístění</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Vybrat cíl umístění --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Verzování</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Zapnuto</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>Identif.</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Typ rejstříku</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Pravidlo umístění</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Označovač</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Nejvyšší označovač</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Verze</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Hlavní verze</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Okamžik úpravy</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Skupinazóny</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Kvóta nádoby</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Nejvyšší velikost</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Neomezeno</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Uživatelské jméno</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Vybrat uživatelské jméno --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Automaticky vytvořit klíč</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Přístupový klíč</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Tajný klíč</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Celé jméno</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>E-mailová adresa</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Systém</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Nejvýše nádob</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Dílčí uživatelé</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Schopnosti</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Kvóta uživatele</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Zobrazit</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Klíče</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Vybrat typ --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Oprávnění</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Vybrat oprávnění --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Dílčí uživatel</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Zvolený identifikátor dílčího uživatele už je používán.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>číst, zapisovat</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>plné</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift klíč</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Automaticky vytvořit tajemství</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Načítání údajů uživatele…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Údaje uživatele se nepodařilo načíst.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Zvolený identif. uživatele už je používán.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Toto není platná e-mailová adresa.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Zvolená e-mailová adresa už je používána.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Nejvýše nádob</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Vypnuto</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Uživatelsky určené</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 klíč</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Nejsou zde žádní dílčí uživatelé.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Nejsou zde žádné klíče.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Nejsou zde žádné schopnosti.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Neomezená velikost</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Nejvyšší velikost</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Neomezené objekty</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Je třeba, aby zadaná hodnota byla 0 a vyšší.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Popis…</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Oprávnění</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Role</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Potvrzení zadání hesla</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Zadání hesla se neshodují.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Neplatný e-mail.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Chystáte se odebrat oprávnění „uživatel číst/aktualizovat“ svému vlastnímu účtu.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Pokud budete pokračovat, nebudete nadále schopní přidávat nebo nebo odebírat role žádnému z uživatelů.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Opravdu chcete pokračovat?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Nápověda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentace</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>Aplikační program. rozhraní</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>O aplikaci</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Nastavení přehledu</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Správa uživatelů</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Přihlášený uživatel</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Přihlášeni jako\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Změnit heslo</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Odhlásit</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributy (OSD mapa)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadata nejsou k dispozici</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadata</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Stav zařízení</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Výkonnostní čítač</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram není k dispozici: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Zápisy</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Čtení</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Stávající hodnoty</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Zdroj</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Úroveň</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Je možné aktualizovat za provozu (upravitelné)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Štítky</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Vyčíslit hodnoty</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Viz také</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Stav klastru</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Procesy služby správy</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Objektové brány</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Metadata servery</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI brány</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>vst/výst. klienta</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Propustnost klienta</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Čtení/zápis klienta</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Propustnost zotavení</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Kontrola</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Výkonnost</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Holá kapacita</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Skupin umístění na OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Stav skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapacita</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>Další podrobnosti \n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> naleznete v \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>záznamech událostí\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Hodnocení</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>čítače výkonnosti MDS</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Složky</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Klienti (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Stávající</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Aktualizováno ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Nejsou k dispozici žádné portály.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Nejsou k dispozici žádné obrazy.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Nejsou k dispozici žádné obrazy. Ověřte, že jste cíli přidali obraz.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Nejsou k dispozici žádné iniciátory. Ověřte, že jste cíli přidali iniciátor.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>cíl</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Cíl</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target>Počet relací</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Cíl má aktivní relace</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI cíl</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stav</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target>Počet cílů</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bajtů čtení</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bajtů zápis</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operací/s čtení</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operací/s zápis</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O od</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problém</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Ukazatel postupu</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Upravit režim</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Přidat protějšek</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Upravit protějšek</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Smazat protějšek</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Vedoucí</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>Počet místních</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>Počet vzdálených</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>zrcadlit protějšek</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Klíč</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Hluboké zploštění</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Vrstvení</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Výhradní zámek</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa objektů (vyžaduje výhradní zámek)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Žurnálování (vyžaduje výhradní zámek)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Je třeba, aby nadřazený obraz podporoval vrstvy</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>CHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NECHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Vrácení zachyceného stavu RBD zpět</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Vrácení zpět</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Zachycený stav RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Smazáno v</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>identif.</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stav</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>verze</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Stroj</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>kořen</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Procesy služeb v pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Hodnocení</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Proces služby</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivita</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Struktury složek</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>I-uzlů</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Využití</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Původ</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aktualizováno</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Hodnotu je možné aktualizovat za chodu.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Procesy služeb / klienti nezískávají tuto hodnotu\n      z databáze nastavení monitoru. Není umožněno nastavit tuto volbu\n      prostřednictvím „ceph config set …\'. Tato volba by měla být nastavena\n      z příkazového řádku.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Volba se uplatní pouze při spouštění procesu služby.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Volba ovlivní pouze vytváření klastru.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Volba ovlivní pouze vytvoření procesu služby.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Aktualizována volba nastavení \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Služba</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Stávající hodnota</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Upravitelné</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>stroj</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Popis umístění zařízení</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>K dispozici</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Aktualizována volba pro modul „\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Zapnout</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Vypnout</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>Modul Zpráva je vždy zapnutý.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Opětovné připojování, čekejte…</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Veřejná adresa</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Otevřené relace</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Počet do</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD které byly dříve odznačeny nebudou označeny nazpět když spustí</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Počet ven</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD nebudou automaticky odznačeny po nastaveném intervalu</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Počet aktivních</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD není dovoleno spuštění</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Počet neaktivních</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Hlášení o selhání OSD jsou ignorovány, jako například že monitory OSD neoznačí jako nedostupné</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pozastavit</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pozastavit čtení a zápisy</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Žádná kontrola</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Kontrola je vypnutá</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Žádná hloubková kontrola</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Hloubková kontrola je vypnutá</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Žádné zasypávání</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Zasypávání skupin umístění je pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Žádné obnovení</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Obnovování skupin umístění je pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Bitové třídění</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Třídit podle bitů</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Vyčištěné složky zachycených stavů</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD mají převedené sady zachycených stavů</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Smazáno při zotavování</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Mazání provedená při obnovování namísto peeringu</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Nepřekročitelný limit záznamu událostí PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Zapne nepřekročitelný limit na délku záznamu událostí v pg</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Aktualizovány OSD příznaky</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>ven</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>dovnitř</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>nedostupné</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Značka</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD ztraceno</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>označeno jako ztracené</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Vyčistit</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>vyčištěno</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>zlikvidovat</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>zlikvidováno</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>smazat</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Priorita zotavování</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Přečteno bajtů</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Zapsáno bajtů</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operací/s čtení</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operací/s zápis</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Označit OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Označit \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max Backfills</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Recovery Max Active</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Recovery Max Single Start</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Uspání zotavení</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Aktualizována rychlost zotavení OSD „\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Úloha</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Závažnost</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Zahájeno</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL adresa</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>ticho</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Název atributu</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regulární výraz</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Přidejte hostitele s Prometheus do nastavení přehledu a znovu načtete stránku</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Vytvořil(a)</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Končí</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Ticho</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Popis stavu</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Použito</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>K dispozici</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Čisté</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Pracující</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Varování</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Neznámé</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Zdravé</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Chybně umístěno</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degradováno</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Odnalezeno</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>repliky</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>aktivní</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>žádné souborové systémy</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktivní</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>v pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>neaplikovatelné</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktivní proces služby</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kvórum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Služba NFS Ganesha není nastavena.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS uživatel</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Souborový systém CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(převzato z globálního nastavení)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>převzato z globálního nastavení</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Vyberte jaký druh squashování identifikátor uživatele je prováděn --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Nejsou k dispozici žádné procesy služeb.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC profil</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Režim mezipaměti</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min Evict Age</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min Flush Age</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Nejvýše bajtů cíle</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Nejvýše objektů cíle</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nebyla přidána žádná aplikace</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Dosažen limit aplikací</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Fond může mít nejvýše čtyři definice aplikací.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Použitelné znaky „_a-zA-Z0-9“</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Nejvyšší délka je 128 znaků</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrovat nebo přidat aplikace</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Přidat aplikaci</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>fond</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil mazacího kódu</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Velikost repliky</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Nejnovější změna</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Mazáním kódovaný profil</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Sada crush pravidel</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Smazání fondu je vypnuto nastavením mon_allow_pool_delete configuration.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>nádoba</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Vytvořena nádoba objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>nádoby</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>schopnost</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>uživatel</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>dílčí uživatel</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 klíč</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Aktualizován uživatel objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Vytvořen uživatel objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>uživatelé</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift klíč</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>Vyskytla se chyba s kódem \n          <x id="INTERPOLATION" equiv-text="{{code}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Nezpracované</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Práh</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>Když se nezdařilo</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Nejhorší</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Rozsah</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Čtení</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Vytvořit</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Vytvořena role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Aktualizována role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Systémová role</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Smazána role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>Nejsou zde žádné role.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Vytvořen uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Aktualizovat uživatele</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Pokračovat</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Byli jste automaticky odhlášeni protože vaše role byly změněny.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Aktualizován uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Smazán uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Nepodařilo se smazat uživatele „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>Nyní jste přihlášení jako „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“.\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>heslo</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Aktualizované heslo uživatele"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Každý objekt je rozdělen v částech shluků dat, každé uložené na jiném OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Počítat kódovací shluky pro každý objekt a ukládat je na různých OSD.\n      Počet kódovacích shluků je také počet OSD, které mohou vypadnou, aniž dojde ke ztrátě dat.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Zásuvný modul jerasure je nejobecnější a nejpřizpůsobivější,\n je také výchozí pro Ceph fondy kódované mazáním.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Přizpůsobivější technikou je reed_sol_van: postačí nastvit k\n          a m. Technika cauchy_good technique může být rychlejší, ale je třeba pečlivě nastavit velikost\n          paketu. Všechny z reed_sol_r6_op, liberation, blaum_roth, liber8tion jsou ekvivalenty RAID6\n          v tom smyslu, že je možné je nastavit pouze s m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Zásuvný modul isa obaluje knihovnu ISA. Funguje pouze na procesorech Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Zásuvný modul ISA přichází ve dvou Reed Solomon podobách.\n          Pokud je nastaveno reed_sol_van, je to Vandermonde, pokud je nastaveno Cauchy, je Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Počet paritních shluků, ze kterých každý obsahuje každý shluk dat ve svém\n          výpočetním rozsahu. Číslo je použito pro odhad odolnosti. Například, pokud c=2,\n          2 OSD mohou vypadnou aniž by byla ztracena data.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Název crush nádoby sloužící jako první krok CRUSH pravidla.\n Například krok vzít výchozí.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Zajistit, aby žádné dva shluky nebyly v nádobě nacházejícící se ve stejné\n      doméně selhání. Například, pokud doména selhání je hostitel, žádné dva shluky nebudou uloženy na stejném hostiteli\n      Je použito pro vytvoření kroku CRUSH pravidla jako krok chooseleaf hostitele.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Omezit umístění na zařízení určité třídy\n      (např., ssd nebo hdd), pomocí názvu crush třídy zařízení v  CRUSH mapě.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Nastavit složku ze které načítat zásuvný modul mazacího kódu.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Umožnit všechny operace</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Umožnit pouze operace které neupraví server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Neumožňuje operace čtení či zápisu, ale umožňuje ostatní</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Neumožňuje čtení, zápis nebo jinou operaci která upravuje atributy        souboru nebo obsah složky</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Neumožnit vůbec žádný přístup</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Vyberte prioritu --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Nízká</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Vysoká</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Chyba</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informace</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Úspěch</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Uplynulých 5 minut</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Uplynulých 15 minut</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Uplynulých 30 minut</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Uplynulá 1 hodina (výchozí)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Uplynulé 3 hodiny</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Uplynulých 6 hodin</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Uplynulých 12 hodin</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Uplynulých 24 hodin</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Včera</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Dnes</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Dnes doposud</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Včerejšek</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Uplynulé 2 dny</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Tento den minulý týden</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Předchozí týden</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Tento týden</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Tento týden doposud</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Uplynulých 7 dnů</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Předchozí měsíc</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Tento měsíc</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Tento měsíc doposud</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Uplynulých 30 dnů</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Uplynulých 90 dnů</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Uplynulých 6 měsíců</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Uplynulý 1 rok</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Předchozí rok</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Tento rok</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Tento rok doposud</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Uplynulé 2 roky</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Uplynulých 5 let</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nevybrány žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Aby položku bylo možné znovu vybrat, je třeba nejprve zrušit její výběr</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Dosažen limit výběru</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtrovat štítky</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Přidat odznak</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Nejsou k dispozici žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Odebrat</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klonovat</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopírovat</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Hloubková kontrola</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Zlikvidovat</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Zploštit</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Označit</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Označit</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Označit ztracené</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Odznačit</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Ochránit</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Přejmenovat</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Obnovit</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Přesunout do koše</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Zrušit ochranu</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Změnit</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Znovuvytvořit</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Ukončit platnost</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Smazáno</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Přidáno</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Odebráno</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Upraveno</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Zrušeno</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Naklonováno</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Zkopírováno</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Zlikvidováno</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Zploštěno</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Označeno jako ztracené</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Chráněno</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Vyčištěno</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Přejmenováno</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Obnoveno</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Vzato zpět</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Zobrazeno</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Přesunout do koše</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Ochrana zrušena</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Znovu vytvořeno</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Platnost skončila</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ano</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Ne</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>žádné aktivní výstrahy</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>Jedna aktivní výstraha</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> aktivních výstrah\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Odpovídá jednomu pravidlu</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Odpovídá \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> pravidlům\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> s \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Kvalita služby</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Požadovaný limit vst./výstup. bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit vst/výstup. operací / s</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Požadovaný limit vst./výstup. operací za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limit BPS čtení</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Požadovaný limit čtení bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limit IOPS čtení</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Požadovaný limit operací čtení za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit BPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Požadovaný limit zápisu bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit IOPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Požadovaný limit operací čtení za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS dávka</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Požadovaný limit dávky bajtů vstup/výstupu.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS dávka</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Požadovaný limit dávky vst./výstup. operací.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Dávka BPS čtení</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Požadovaný limit dávky bajtů čtení.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Dávka IOPS čtení</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Požadovaný limit dávky čtení bajtů.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Dávka BPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Požadovaný limit bajtů dávky zápisu.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Dávka IOPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Požadovaný limit dávky operace zápisu.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Nepodařilo se \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Vykonává se</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>vykonat</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Vykonáno</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>neznámý úkol</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Vytváří se</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>vytvořit</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aktualizuje se</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aktualizovat</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Maže se</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Přidávání</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>přidat</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Odebírání</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>odebrat</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD zachycený stav „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>režim zrcadlení pro fond „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>protějšek zrcadlení pro fond „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>všechny přehledy</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> obsahuje zachycené stavy.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Klonuje se</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klonovat</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Je třeba, aby zachycený stav \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> byl chráněný.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Kopíruje se</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>zkopírovat</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Zploštění</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>zploštit</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Název už je používán pro \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Není možné zrušit ochranu \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>, protože obsahuje podřízené obrazy.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> není možné smazat, protože je chráněné.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Bere se zpět</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>vzít zpět</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Přesouvá se</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>přesunout</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Přesunuto</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ do koše\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Obraz se nedaří najít.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Obnovuje se</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>obnovit</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ do „\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Název „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ už je používán pro jiný obraz.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Čistí se</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>vyčistit</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>všechny fondy</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>obrazy z \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Zrcadlení nelze vypnout protože obsahuje protějšek.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>stroj „\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>fond „\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>profil mazacího kódu „\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>cíl „\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},VpIT:function(t,e,n){var a=n("xDBR"),r=n("xs3f");(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:a?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},Vu81:function(t,e,n){var a=n("0GbY"),r=n("JBy8"),i=n("dBg+"),s=n("glrk");t.exports=a("Reflect","ownKeys")||function(t){var e=r.f(s(t)),n=i.f;return n?e.concat(n(t)):e}},WF9J:function(t,e,n){"use strict";n("TeQF"),n("QWBl"),n("4mDm"),n("zKZe"),n("07d7"),n("4l63"),n("PKPk"),n("ENF9"),n("3bBZ");var a=n("hKI/"),r=n.n(a),i=n("9/5/"),s=n.n(i),o=n("uyHG"),u=n.n(o),l=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,a){return t[0]===e&&(n=a,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),a=this.__entries__[n];return a&&a[1]},e.prototype.set=function(e,n){var a=t(this.__entries__,e);~a?this.__entries__[a][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,a=t(n,e);~a&&n.splice(a,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,a=this.__entries__;n<a.length;n++){var r=a[n];t.call(e,r[1],r[0])}},e}()}(),d="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,c="undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),f="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(c):function(t){return setTimeout((function(){return t(Date.now())}),1e3/60)},h=["top","right","bottom","left","width","height","size","weight"],g="undefined"!=typeof MutationObserver,p=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,a=!1,r=0;function i(){n&&(n=!1,t()),a&&o()}function s(){f(i)}function o(){var t=Date.now();if(n){if(t-r<2)return;a=!0}else n=!0,a=!1,setTimeout(s,20);r=t}return o}(this.refresh.bind(this))}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},t.prototype.connect_=function(){d&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),g?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){d&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;h.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),b=function(t,e){for(var n=0,a=Object.keys(e);n<a.length;n++){var r=a[n];Object.defineProperty(t,r,{value:e[r],enumerable:!1,writable:!1,configurable:!0})}return t},m=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||c},y=T(0,0,0,0);function v(t){return parseFloat(t)||0}function x(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce((function(e,n){return e+v(t["border-"+n+"-width"])}),0)}var _="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof m(t).SVGGraphicsElement}:function(t){return t instanceof m(t).SVGElement&&"function"==typeof t.getBBox};function T(t,e,n,a){return{x:t,y:e,width:n,height:a}}var O=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=T(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t,e=(t=this.target,d?_(t)?function(t){var e=t.getBBox();return T(0,0,e.width,e.height)}(t):function(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return y;var a=m(t).getComputedStyle(t),r=function(t){for(var e={},n=0,a=["top","right","bottom","left"];n<a.length;n++){var r=a[n];e[r]=v(t["padding-"+r])}return e}(a),i=r.left+r.right,s=r.top+r.bottom,o=v(a.width),u=v(a.height);if("border-box"===a.boxSizing&&(Math.round(o+i)!==e&&(o-=x(a,"left","right")+i),Math.round(u+s)!==n&&(u-=x(a,"top","bottom")+s)),!function(t){return t===m(t).document.documentElement}(t)){var l=Math.round(o+i)-e,d=Math.round(u+s)-n;1!==Math.abs(l)&&(o-=l),1!==Math.abs(d)&&(u-=d)}return T(r.left,r.top,o,u)}(t):y);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),w=function(t,e){var n,a,r,i,s,o,u,l=(a=(n=e).x,r=n.y,i=n.width,s=n.height,o="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,u=Object.create(o.prototype),b(u,{x:a,y:r,width:i,height:s,top:r,right:a+i,bottom:s+r,left:a}),u);b(this,{target:t,contentRect:l})},S=function(){function t(t,e,n){if(this.activeObservations_=[],this.observations_=new l,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=n}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof m(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new O(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof m(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new w(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),I="undefined"!=typeof WeakMap?new WeakMap:new l,N=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=p.getInstance(),a=new S(e,n,this);I.set(this,a)};["observe","unobserve","disconnect"].forEach((function(t){N.prototype[t]=function(){var e;return(e=I.get(this))[t].apply(e,arguments)}}));var C=void 0!==c.ResizeObserver?c.ResizeObserver:N,R=n("AxL3"),A=n.n(R),k=(n("E9XD"),n("sMBO"),n("rB9j"),n("Rm1S"),n("UxlC"),null),E=null;function L(){if(null===k){if("undefined"==typeof document)return k=0;var t=document.body,e=document.createElement("div");e.classList.add("simplebar-hide-scrollbar"),t.appendChild(e);var n=e.getBoundingClientRect().right;t.removeChild(e),k=n}return k}function D(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window}function P(t){return t&&t.ownerDocument?t.ownerDocument:document}A.a&&window.addEventListener("resize",(function(){E!==window.devicePixelRatio&&(E=window.devicePixelRatio,k=null)}));var M=function(){function t(e,n){var a=this;this.onScroll=function(){var t=D(a.el);a.scrollXTicking||(t.requestAnimationFrame(a.scrollX),a.scrollXTicking=!0),a.scrollYTicking||(t.requestAnimationFrame(a.scrollY),a.scrollYTicking=!0)},this.scrollX=function(){a.axis.x.isOverflowing&&(a.showScrollbar("x"),a.positionScrollbar("x")),a.scrollXTicking=!1},this.scrollY=function(){a.axis.y.isOverflowing&&(a.showScrollbar("y"),a.positionScrollbar("y")),a.scrollYTicking=!1},this.onMouseEnter=function(){a.showScrollbar("x"),a.showScrollbar("y")},this.onMouseMove=function(t){a.mouseX=t.clientX,a.mouseY=t.clientY,(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseMoveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseMoveForAxis("y")},this.onMouseLeave=function(){a.onMouseMove.cancel(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseLeaveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseLeaveForAxis("y"),a.mouseX=-1,a.mouseY=-1},this.onWindowResize=function(){a.scrollbarWidth=a.getScrollbarWidth(),a.hideNativeScrollbar()},this.hideScrollbars=function(){a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.track.rect)||(a.axis.y.scrollbar.el.classList.remove(a.classNames.visible),a.axis.y.isVisible=!1),a.isWithinBounds(a.axis.x.track.rect)||(a.axis.x.scrollbar.el.classList.remove(a.classNames.visible),a.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,n;a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&(e=a.isWithinBounds(a.axis.x.track.rect)),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&(n=a.isWithinBounds(a.axis.y.track.rect)),(e||n)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&(a.axis.x.scrollbar.rect=a.axis.x.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.x.scrollbar.rect)?a.onDragStart(t,"x"):a.onTrackClick(t,"x")),n&&(a.axis.y.scrollbar.rect=a.axis.y.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.scrollbar.rect)?a.onDragStart(t,"y"):a.onTrackClick(t,"y"))))},this.drag=function(e){var n=a.axis[a.draggedAxis].track,r=n.rect[a.axis[a.draggedAxis].sizeAttr],i=a.axis[a.draggedAxis].scrollbar,s=a.contentWrapperEl[a.axis[a.draggedAxis].scrollSizeAttr],o=parseInt(a.elStyles[a.axis[a.draggedAxis].sizeAttr],10);e.preventDefault(),e.stopPropagation();var u=(("y"===a.draggedAxis?e.pageY:e.pageX)-n.rect[a.axis[a.draggedAxis].offsetAttr]-a.axis[a.draggedAxis].dragOffset)/(r-i.size)*(s-o);"x"===a.draggedAxis&&(u=a.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?u-(r+i.size):u,u=a.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-u:u),a.contentWrapperEl[a.axis[a.draggedAxis].scrollOffsetAttr]=u},this.onEndDrag=function(t){var e=P(a.el),n=D(a.el);t.preventDefault(),t.stopPropagation(),a.el.classList.remove(a.classNames.dragging),e.removeEventListener("mousemove",a.drag,!0),e.removeEventListener("mouseup",a.onEndDrag,!0),a.removePreventClickId=n.setTimeout((function(){e.removeEventListener("click",a.preventClick,!0),e.removeEventListener("dblclick",a.preventClick,!0),a.removePreventClickId=null}))},this.preventClick=function(t){t.preventDefault(),t.stopPropagation()},this.el=e,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,{},n),this.classNames=Object.assign({},t.defaultOptions.classNames,{},this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,t.instances.has(this.el)||(this.recalculate=r()(this.recalculate.bind(this),64),this.onMouseMove=r()(this.onMouseMove.bind(this),64),this.hideScrollbars=s()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=s()(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=u()(t.getRtlHelpers),this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var n=e.firstElementChild;document.body.appendChild(n);var a=n.firstElementChild;n.scrollLeft=0;var r=t.getOffset(n),i=t.getOffset(a);n.scrollLeft=999;var s=t.getOffset(a);return{isRtlScrollingInverted:r.left!==i.left&&i.left-s.left!=0,isRtlScrollbarInverted:r.left!==i.left}},t.getOffset=function(t){var e=t.getBoundingClientRect(),n=P(t),a=D(t);return{top:e.top+(a.pageYOffset||n.documentElement.scrollTop),left:e.left+(a.pageXOffset||n.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){t.instances.set(this.el,this),A.a&&(this.initDOM(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,(function(e){return e.classList.contains(t.classNames.wrapper)})).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this,e=D(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),e.addEventListener("resize",this.onWindowResize);var n=!1;this.resizeObserver=new(e.ResizeObserver||C)((function(){n&&t.recalculate()})),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),e.requestAnimationFrame((function(){n=!0})),this.mutationObserver=new e.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},e.recalculate=function(){var t=D(this.el);this.elStyles=t.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var e=this.contentEl.offsetWidth,n=this.heightAutoObserverEl.offsetHeight<=1,a=this.heightAutoObserverEl.offsetWidth<=1||e>0,r=this.contentWrapperEl.offsetWidth,i=this.elStyles.overflowX,s=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var o=this.contentEl.scrollHeight,u=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=n?"auto":"100%",this.placeholderEl.style.width=a?(e||u)+"px":"auto",this.placeholderEl.style.height=o+"px";var l=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=0!==e&&u>e,this.axis.y.isOverflowing=o>l,this.axis.x.isOverflowing="hidden"!==i&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==s&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var d=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&u>r-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&o>l-d,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){if(void 0===t&&(t="y"),!this.axis[t].isOverflowing)return 0;var e,n=this.axis[t].track.el[this.axis[t].offsetSizeAttr];return e=Math.max(~~(n/this.contentEl[this.axis[t].scrollSizeAttr]*n),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e},e.positionScrollbar=function(e){if(void 0===e&&(e="y"),this.axis[e].isOverflowing){var n=this.contentWrapperEl[this.axis[e].scrollSizeAttr],a=this.axis[e].track.el[this.axis[e].offsetSizeAttr],r=parseInt(this.elStyles[this.axis[e].sizeAttr],10),i=this.axis[e].scrollbar,s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=~~((s="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-s:s)/(n-r)*(a-i.size));o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o+(a-i.size):o,i.el.style.transform="x"===e?"translate3d("+o+"px, 0, 0)":"translate3d(0, "+o+"px, 0)"}},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,n=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),n.style.display=this.axis[t].isOverflowing?"block":"none"},e.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y"),this.axis[t].isVisible||(this.axis[t].scrollbar.el.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var n=P(this.el),a=D(this.el);this.axis[e].dragOffset=("y"===e?t.pageY:t.pageX)-this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),n.addEventListener("mousemove",this.drag,!0),n.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(n.addEventListener("click",this.preventClick,!0),n.addEventListener("dblclick",this.preventClick,!0)):(a.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},e.onTrackClick=function(t,e){var n=this;if(void 0===e&&(e="y"),this.options.clickOnTrack){var a=D(this.el);this.axis[e].scrollbar.rect=this.axis[e].scrollbar.el.getBoundingClientRect();var r=this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],i=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=("y"===e?this.mouseY-r:this.mouseX-r)<0?-1:1,u=-1===o?s-i:s+i;!function t(){var r,i;-1===o?s>u&&(n.contentWrapperEl.scrollTo(((r={})[n.axis[e].offsetAttr]=s-=40,r)),a.requestAnimationFrame(t)):s<u&&(n.contentWrapperEl.scrollTo(((i={})[n.axis[e].offsetAttr]=s+=40,i)),a.requestAnimationFrame(t))}()}},e.getContentElement=function(){return this.contentEl},e.getScrollElement=function(){return this.contentWrapperEl},e.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:L()}catch(t){return L()}},e.removeListeners=function(){var t=this,e=D(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onWindowResize),this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),t.instances.delete(this.el)},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},e.findChild=function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;return Array.prototype.filter.call(t.children,(function(t){return n.call(t,e)}))[0]},t}();M.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},M.instances=new WeakMap;var q=M,j=(n("FZtP"),null),F=null;function G(){if(null===j){if("undefined"==typeof document)return j=0;var t=document.body,e=document.createElement("div");e.classList.add("simplebar-hide-scrollbar"),t.appendChild(e);var n=e.getBoundingClientRect().right;t.removeChild(e),j=n}return j}A.a&&window.addEventListener("resize",(function(){F!==window.devicePixelRatio&&(F=window.devicePixelRatio,j=null)}));var V=function(t){return Array.prototype.reduce.call(t,(function(t,e){var n=e.name.match(/data-simplebar-(.+)/);if(n){var a=n[1].replace(/\W+(.)/g,(function(t,e){return e.toUpperCase()}));switch(e.value){case"true":t[a]=!0;break;case"false":t[a]=!1;break;case void 0:t[a]=!0;break;default:t[a]=e.value}}return t}),{})};function z(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window}function B(t){return t&&t.ownerDocument?t.ownerDocument:document}var Y=function(){function t(e,n){var a=this;this.onScroll=function(){var t=z(a.el);a.scrollXTicking||(t.requestAnimationFrame(a.scrollX),a.scrollXTicking=!0),a.scrollYTicking||(t.requestAnimationFrame(a.scrollY),a.scrollYTicking=!0)},this.scrollX=function(){a.axis.x.isOverflowing&&(a.showScrollbar("x"),a.positionScrollbar("x")),a.scrollXTicking=!1},this.scrollY=function(){a.axis.y.isOverflowing&&(a.showScrollbar("y"),a.positionScrollbar("y")),a.scrollYTicking=!1},this.onMouseEnter=function(){a.showScrollbar("x"),a.showScrollbar("y")},this.onMouseMove=function(t){a.mouseX=t.clientX,a.mouseY=t.clientY,(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseMoveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseMoveForAxis("y")},this.onMouseLeave=function(){a.onMouseMove.cancel(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseLeaveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseLeaveForAxis("y"),a.mouseX=-1,a.mouseY=-1},this.onWindowResize=function(){a.scrollbarWidth=a.getScrollbarWidth(),a.hideNativeScrollbar()},this.hideScrollbars=function(){a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.track.rect)||(a.axis.y.scrollbar.el.classList.remove(a.classNames.visible),a.axis.y.isVisible=!1),a.isWithinBounds(a.axis.x.track.rect)||(a.axis.x.scrollbar.el.classList.remove(a.classNames.visible),a.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,n;a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&(e=a.isWithinBounds(a.axis.x.track.rect)),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&(n=a.isWithinBounds(a.axis.y.track.rect)),(e||n)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&(a.axis.x.scrollbar.rect=a.axis.x.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.x.scrollbar.rect)?a.onDragStart(t,"x"):a.onTrackClick(t,"x")),n&&(a.axis.y.scrollbar.rect=a.axis.y.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.scrollbar.rect)?a.onDragStart(t,"y"):a.onTrackClick(t,"y"))))},this.drag=function(e){var n=a.axis[a.draggedAxis].track,r=n.rect[a.axis[a.draggedAxis].sizeAttr],i=a.axis[a.draggedAxis].scrollbar,s=a.contentWrapperEl[a.axis[a.draggedAxis].scrollSizeAttr],o=parseInt(a.elStyles[a.axis[a.draggedAxis].sizeAttr],10);e.preventDefault(),e.stopPropagation();var u=(("y"===a.draggedAxis?e.pageY:e.pageX)-n.rect[a.axis[a.draggedAxis].offsetAttr]-a.axis[a.draggedAxis].dragOffset)/(r-i.size)*(s-o);"x"===a.draggedAxis&&(u=a.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?u-(r+i.size):u,u=a.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-u:u),a.contentWrapperEl[a.axis[a.draggedAxis].scrollOffsetAttr]=u},this.onEndDrag=function(t){var e=B(a.el),n=z(a.el);t.preventDefault(),t.stopPropagation(),a.el.classList.remove(a.classNames.dragging),e.removeEventListener("mousemove",a.drag,!0),e.removeEventListener("mouseup",a.onEndDrag,!0),a.removePreventClickId=n.setTimeout((function(){e.removeEventListener("click",a.preventClick,!0),e.removeEventListener("dblclick",a.preventClick,!0),a.removePreventClickId=null}))},this.preventClick=function(t){t.preventDefault(),t.stopPropagation()},this.el=e,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,{},n),this.classNames=Object.assign({},t.defaultOptions.classNames,{},this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,t.instances.has(this.el)||(this.recalculate=r()(this.recalculate.bind(this),64),this.onMouseMove=r()(this.onMouseMove.bind(this),64),this.hideScrollbars=s()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=s()(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=u()(t.getRtlHelpers),this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var n=e.firstElementChild;document.body.appendChild(n);var a=n.firstElementChild;n.scrollLeft=0;var r=t.getOffset(n),i=t.getOffset(a);n.scrollLeft=999;var s=t.getOffset(a);return{isRtlScrollingInverted:r.left!==i.left&&i.left-s.left!=0,isRtlScrollbarInverted:r.left!==i.left}},t.getOffset=function(t){var e=t.getBoundingClientRect(),n=B(t),a=z(t);return{top:e.top+(a.pageYOffset||n.documentElement.scrollTop),left:e.left+(a.pageXOffset||n.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){t.instances.set(this.el,this),A.a&&(this.initDOM(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,(function(e){return e.classList.contains(t.classNames.wrapper)})).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this,e=z(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),e.addEventListener("resize",this.onWindowResize);var n=!1;this.resizeObserver=new(e.ResizeObserver||C)((function(){n&&t.recalculate()})),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),e.requestAnimationFrame((function(){n=!0})),this.mutationObserver=new e.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},e.recalculate=function(){var t=z(this.el);this.elStyles=t.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var e=this.contentEl.offsetWidth,n=this.heightAutoObserverEl.offsetHeight<=1,a=this.heightAutoObserverEl.offsetWidth<=1||e>0,r=this.contentWrapperEl.offsetWidth,i=this.elStyles.overflowX,s=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var o=this.contentEl.scrollHeight,u=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=n?"auto":"100%",this.placeholderEl.style.width=a?(e||u)+"px":"auto",this.placeholderEl.style.height=o+"px";var l=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=0!==e&&u>e,this.axis.y.isOverflowing=o>l,this.axis.x.isOverflowing="hidden"!==i&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==s&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var d=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&u>r-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&o>l-d,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){if(void 0===t&&(t="y"),!this.axis[t].isOverflowing)return 0;var e,n=this.axis[t].track.el[this.axis[t].offsetSizeAttr];return e=Math.max(~~(n/this.contentEl[this.axis[t].scrollSizeAttr]*n),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e},e.positionScrollbar=function(e){if(void 0===e&&(e="y"),this.axis[e].isOverflowing){var n=this.contentWrapperEl[this.axis[e].scrollSizeAttr],a=this.axis[e].track.el[this.axis[e].offsetSizeAttr],r=parseInt(this.elStyles[this.axis[e].sizeAttr],10),i=this.axis[e].scrollbar,s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=~~((s="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-s:s)/(n-r)*(a-i.size));o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o+(a-i.size):o,i.el.style.transform="x"===e?"translate3d("+o+"px, 0, 0)":"translate3d(0, "+o+"px, 0)"}},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,n=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),n.style.display=this.axis[t].isOverflowing?"block":"none"},e.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y"),this.axis[t].isVisible||(this.axis[t].scrollbar.el.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var n=B(this.el),a=z(this.el);this.axis[e].dragOffset=("y"===e?t.pageY:t.pageX)-this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),n.addEventListener("mousemove",this.drag,!0),n.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(n.addEventListener("click",this.preventClick,!0),n.addEventListener("dblclick",this.preventClick,!0)):(a.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},e.onTrackClick=function(t,e){var n=this;if(void 0===e&&(e="y"),this.options.clickOnTrack){var a=z(this.el);this.axis[e].scrollbar.rect=this.axis[e].scrollbar.el.getBoundingClientRect();var r=this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],i=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=("y"===e?this.mouseY-r:this.mouseX-r)<0?-1:1,u=-1===o?s-i:s+i;!function t(){var r,i;-1===o?s>u&&(n.contentWrapperEl.scrollTo(((r={})[n.axis[e].offsetAttr]=s-=40,r)),a.requestAnimationFrame(t)):s<u&&(n.contentWrapperEl.scrollTo(((i={})[n.axis[e].offsetAttr]=s+=40,i)),a.requestAnimationFrame(t))}()}},e.getContentElement=function(){return this.contentEl},e.getScrollElement=function(){return this.contentWrapperEl},e.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:G()}catch(t){return G()}},e.removeListeners=function(){var t=this,e=z(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onWindowResize),this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),t.instances.delete(this.el)},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},e.findChild=function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;return Array.prototype.filter.call(t.children,(function(t){return n.call(t,e)}))[0]},t}();Y.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},Y.instances=new WeakMap,Y.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll("[data-simplebar]"),(function(t){"init"===t.getAttribute("data-simplebar")||Y.instances.has(t)||new Y(t,V(t.attributes))}))},Y.removeObserver=function(){this.globalObserver.disconnect()},Y.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(Y.handleMutations),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},Y.handleMutations=function(t){t.forEach((function(t){Array.prototype.forEach.call(t.addedNodes,(function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?!Y.instances.has(t)&&new Y(t,V(t.attributes)):Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),(function(t){"init"===t.getAttribute("data-simplebar")||Y.instances.has(t)||new Y(t,V(t.attributes))})))})),Array.prototype.forEach.call(t.removedNodes,(function(t){1===t.nodeType&&(t.hasAttribute('[data-simplebar="init"]')?Y.instances.has(t)&&Y.instances.get(t).unMount():Array.prototype.forEach.call(t.querySelectorAll('[data-simplebar="init"]'),(function(t){Y.instances.has(t)&&Y.instances.get(t).unMount()})))}))}))},Y.getOptions=V,A.a&&Y.initHtmlApi(),n.d(e,"a",(function(){return H})),n.d(e,"b",(function(){return U}));class H{constructor(t){this.elRef=t}ngOnInit(){}ngAfterViewInit(){this.SimpleBar=new q(this.elRef.nativeElement,this.options||{})}ngOnDestroy(){this.SimpleBar.unMount(),this.SimpleBar=null}}class U{}},WJkJ:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},WKiH:function(t,e,n){var a=n("HYAF"),r="["+n("WJkJ")+"]",i=RegExp("^"+r+r+"*"),s=RegExp(r+r+"*$"),o=function(t){return function(e){var n=String(a(e));return 1&t&&(n=n.replace(i,"")),2&t&&(n=n.replace(s,"")),n}};t.exports={start:o(1),end:o(2),trim:o(3)}},WYrj:function(t,e,n){!function(t){"use strict";var e=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(t){return"މފ"===t},meridiem:function(t,e,n){return t<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n("wd/R"))},Wa4q:function(t,e,n){var a=n("qzZ1"),r="object"==typeof self&&self&&self.Object===Object&&self,i=a||r||Function("return this")();t.exports=i},WaXT:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("2vnA"),i=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.a.apply(void 0,t)}),r.a),s=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.c.apply(void 0,t)}),r.c),o=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.d.apply(void 0,t)}),r.d),u=n("MP8s");n.d(e,"a",(function(){return c}));var l=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},d=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},c=function(){function t(){this._dispose=[]}return Object.defineProperty(t.prototype,"nodes",{get:function(){return this._nodes},set:function(t){this.setNodes(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"marginTop",{get:function(){var t=this.viewportNodes&&this.viewportNodes.length&&this.viewportNodes[0];return(t&&t.parent?t.position-t.parent.position-t.parent.getSelfHeight():0)+"px"},enumerable:!0,configurable:!0}),t.prototype.setNodes=function(t){this._nodes=t},t.prototype.ngOnInit=function(){var t=this;this.virtualScroll=this.treeModel.virtualScroll,this._dispose=[Object(r.e)((function(){return t.virtualScroll.getViewportNodes(t.nodes).map((function(t){return t.index}))}),(function(e){t.viewportNodes=e.map((function(e){return t.nodes[e]}))}),{compareStructural:!0,fireImmediately:!0}),Object(r.e)((function(){return t.nodes}),(function(e){t.viewportNodes=t.virtualScroll.getViewportNodes(e)}))]},t.prototype.ngOnDestroy=function(){this._dispose.forEach((function(t){return t()}))},t.prototype.trackNode=function(t,e){return e.id},l([Object(a.Input)(),d("design:type",Object),d("design:paramtypes",[Object])],t.prototype,"nodes",null),l([Object(a.Input)(),d("design:type",u.a)],t.prototype,"treeModel",void 0),l([o,d("design:type",Object)],t.prototype,"_nodes",void 0),l([Object(a.Input)(),d("design:type",Object)],t.prototype,"templates",void 0),l([o,d("design:type",Array)],t.prototype,"viewportNodes",void 0),l([s,d("design:type",String),d("design:paramtypes",[])],t.prototype,"marginTop",null),l([i,d("design:type",Function),d("design:paramtypes",[Object]),d("design:returntype",void 0)],t.prototype,"setNodes",null),l([Object(a.Component)({selector:"tree-node-collection",encapsulation:a.ViewEncapsulation.None,template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div [style.margin-top]="marginTop">\n        <tree-node\n          *ngFor="let node of viewportNodes; let i = index; trackBy: trackNode"\n          [node]="node"\n          [index]="i"\n          [templates]="templates"\n        >\n        </tree-node>\n      </div>\n    </ng-container>\n  '})],t)}()},WiuZ:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("978R"),s=n("z/SZ"),o=n("2uy1"),u=n("s7LF"),l=n("+gVj"),d=n("ANnk"),c=n("f/UV"),f=n("aexS"),h=n("KOzp");n("wnGv"),n("GiVz"),n.d(e,"a",(function(){return g})),n.d(e,"b",(function(){return N}));var g=a["ɵcrt"]({encapsulation:0,styles:[[".select-menu-item[_ngcontent-%COMP%]{display:block;cursor:pointer;border-bottom:1px solid rgba(0,0,0,.09);font-size:12px}.select-menu-item[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.select-menu-item-icon[_ngcontent-%COMP%]{float:left;padding:.5em;width:3em}.select-menu-item-content[_ngcontent-%COMP%]{padding:.5em}"]],data:{}});function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback text-center"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.messages.customValidations[e.parent.context.$implicit])}))}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.form.showError("filter",a["ɵnov"](e.parent,2))&&n.filter.hasError(e.context.$implicit))}),null)}function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"small",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),a["ɵted"](3,null,[" ","  "]))],null,(function(t,e){t(e,3,0,e.parent.context.$implicit.description)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,11,"div",[["class","select-menu-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.triggerSelection(t.context.$implicit)&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{"help-block disabled":0}),(t()(),a["ɵeld"](4,0,null,null,3,"div",[["class","select-menu-item-icon"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,["   "])),(t()(),a["ɵeld"](8,0,null,null,3,"div",[["class","select-menu-item-content"]],null,null,null,null,null)),(t()(),a["ɵted"](9,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](11,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=t(e,3,0,!(n.data.length!==n.selectionLimit&&e.context.$implicit.enabled||e.context.$implicit.selected));t(e,2,0,"select-menu-item",a),t(e,6,0,e.context.$implicit.selected),t(e,11,0,e.context.$implicit.description)}),(function(t,e){t(e,9,0,e.context.$implicit.name)}))}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[["class","select-menu-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.addCustomOption()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","select-menu-item-icon"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](5,1),(t()(),a["ɵted"](-1,null,["   "])),(t()(),a["ɵeld"](7,0,null,null,1,"div",[["class","select-menu-item-content"]],null,null,null,null,null)),(t()(),a["ɵted"](8,null,[" "," '","' "]))],(function(t,e){var n=t(e,5,0,e.component.icons.tag);t(e,4,0,n)}),(function(t,e){var n=e.component;t(e,8,0,n.messages.add,n.filter.value)}))}function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,2,"span",[["class","form-text text-muted text-center text-warning"]],null,null,null,null,null)),a["ɵdid"](1,212992,null,0,i.c,[a.ViewContainerRef,s.a,i.a,a.ElementRef,a.Renderer2,o.a],{tooltip:[0,"tooltip"]},null),(t()(),a["ɵted"](2,null,[" "," "])),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.messages.selectionLimit.tooltip)}),(function(t,e){t(e,2,0,e.component.messages.selectionLimit.text)}))}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","is-invalid"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,_)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.data.length===n.selectionLimit)}),null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,2).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,2).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,5).onSubmit()&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,u.G,[],null,null),a["ɵdid"](2,540672,[["formDir",4]],0,u.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,u.d,null,[u.l]),a["ɵdid"](4,16384,null,0,u.s,[[4,u.d]],null,null),a["ɵdid"](5,16384,null,0,l.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](6,0,null,null,10,"div",[],null,null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,7,"input",[["class","form-control text-center"],["formControlName","filter"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0,i=t.component;return"input"===e&&(r=!1!==a["ɵnov"](t,8)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,8).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,8)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,8)._compositionEnd(n.target.value)&&r),"keyup"===e&&(r=!1!==(13==n.keyCode?i.selectOption():i.updateFilter())&&r),r}),null,null)),a["ɵdid"](8,16384,null,0,u.e,[a.Renderer2,a.ElementRef,[2,u.b]],null,null),a["ɵprd"](1024,null,u.p,(function(t){return[t]}),[u.e]),a["ɵdid"](10,671744,null,0,u.j,[[3,u.d],[8,null],[8,null],[6,u.p],[2,u.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,u.q,null,[u.j]),a["ɵdid"](12,16384,null,0,u.r,[[4,u.q]],null,null),a["ɵdid"](13,4210688,null,0,d.a,[[2,c.a],f.a,a.ElementRef],null,null),a["ɵdid"](14,16384,null,0,l.h,[[3,u.d],l.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,b)),a["ɵdid"](16,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](18,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,x)),a["ɵdid"](20,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](22,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.form),t(e,5,0,n.form),t(e,10,0,"filter"),t(e,14,0,"filter"),t(e,16,0,n.Object.keys(n.messages.customValidations)),t(e,18,0,n.filteredOptions),t(e,20,0,n.isCreatable()),t(e,22,0,n.data.length===n.selectionLimit)}),(function(t,e){var n=e.component;t(e,0,0,a["ɵnov"](e,4).ngClassUntouched,a["ɵnov"](e,4).ngClassTouched,a["ɵnov"](e,4).ngClassPristine,a["ɵnov"](e,4).ngClassDirty,a["ɵnov"](e,4).ngClassValid,a["ɵnov"](e,4).ngClassInvalid,a["ɵnov"](e,4).ngClassPending),t(e,7,0,n.messages.filter,a["ɵnov"](e,12).ngClassUntouched,a["ɵnov"](e,12).ngClassTouched,a["ɵnov"](e,12).ngClassPristine,a["ɵnov"](e,12).ngClassDirty,a["ɵnov"](e,12).ngClassValid,a["ɵnov"](e,12).ngClassInvalid,a["ɵnov"](e,12).ngClassPending,a["ɵnov"](e,14).validClass,a["ɵnov"](e,14).invalidClass)}))}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,4,"a",[["class","select-menu-edit float-left"],["container","body"],["outsideClick","true"],["placement","bottom"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵdid"](3,212992,null,0,h.c,[h.a,a.ElementRef,a.Renderer2,a.ViewContainerRef,s.a,o.a],{popover:[0,"popover"],placement:[1,"placement"],outsideClick:[2,"outsideClick"],container:[3,"container"]},null),a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0,"select-menu-edit float-left",e.component.elemClass),t(e,3,0,a["ɵnov"](e.parent,0),"bottom","true","body")}),null)}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted float-left"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" ","\n"]))],null,(function(t,e){t(e,1,0,e.component.messages.empty)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted  float-left"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" ","\n"]))],null,(function(t,e){t(e,1,0,e.component.messages.noOptions)}))}function N(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,[["popTemplate",2]],null,0,null,O)),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,S)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.customBadges||n.options.length>0),t(e,4,0,0===n.data.length&&!(!n.customBadges&&0===n.options.length)),t(e,6,0,!n.customBadges&&0===n.options.length)}),null)}},Wv1A:function(t,e,n){var a=n("QpVZ");t.exports=function(t){if("string"==typeof t||a(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},WxRl:function(t,e,n){!function(t){"use strict";var e="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(t,e,n,a){var r=t;switch(n){case"s":return a||e?"néhány másodperc":"néhány másodperce";case"ss":return r+(a||e)?" másodperc":" másodperce";case"m":return"egy"+(a||e?" perc":" perce");case"mm":return r+(a||e?" perc":" perce");case"h":return"egy"+(a||e?" óra":" órája");case"hh":return r+(a||e?" óra":" órája");case"d":return"egy"+(a||e?" nap":" napja");case"dd":return r+(a||e?" nap":" napja");case"M":return"egy"+(a||e?" hónap":" hónapja");case"MM":return r+(a||e?" hónap":" hónapja");case"y":return"egy"+(a||e?" év":" éve");case"yy":return r+(a||e?" év":" éve")}return""}function a(t){return(t?"":"[múlt] ")+"["+e[this.day()]+"] LT[-kor]"}t.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return a.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return a.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"X+05":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a={toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",initialized:"initialized",updateData:"updateData",moveNode:"moveNode",copyNode:"copyNode",event:"event",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",stateChange:"stateChange"}},X709:function(t,e,n){!function(t){"use strict";t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"e":1===e||2===e?"a":"e")},week:{dow:1,doy:4}})}(n("wd/R"))},XDbj:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("sVev"),r=n("7o/Q");function i(t=u){return e=>e.lift(new s(t))}class s{constructor(t){this.errorFactory=t}call(t,e){return e.subscribe(new o(t,this.errorFactory))}}class o extends r.a{constructor(t,e){super(t),this.errorFactory=e,this.hasValue=!1}_next(t){this.hasValue=!0,this.destination.next(t)}_complete(){if(this.hasValue)return this.destination.complete();{let e;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)}}}function u(){return new a.a}},XDpg:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n("wd/R"))},XFPk:function(t,e,n){var a=n("qN6l"),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return a?void 0!==e[t]:r.call(e,t)}},XFyV:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");class r{constructor(){this.icons=a.a}}},XGwC:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},XLvN:function(t,e,n){!function(t){"use strict";t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n("wd/R"))},XNiG:function(t,e,n){"use strict";n.d(e,"b",(function(){return l})),n.d(e,"a",(function(){return d}));var a=n("HDdC"),r=n("7o/Q"),i=n("quSY"),s=n("9ppp"),o=n("Ylt2"),u=n("2QA8");class l extends r.a{constructor(t){super(t),this.destination=t}}let d=(()=>{class t extends a.a{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[u.a](){return new l(this)}lift(t){const e=new c(this,this);return e.operator=t,e}next(t){if(this.closed)throw new s.a;if(!this.isStopped){const{observers:e}=this,n=e.length,a=e.slice();for(let r=0;r<n;r++)a[r].next(t)}}error(t){if(this.closed)throw new s.a;this.hasError=!0,this.thrownError=t,this.isStopped=!0;const{observers:e}=this,n=e.length,a=e.slice();for(let r=0;r<n;r++)a[r].error(t);this.observers.length=0}complete(){if(this.closed)throw new s.a;this.isStopped=!0;const{observers:t}=this,e=t.length,n=t.slice();for(let a=0;a<e;a++)n[a].complete();this.observers.length=0}unsubscribe(){this.isStopped=!0,this.closed=!0,this.observers=null}_trySubscribe(t){if(this.closed)throw new s.a;return super._trySubscribe(t)}_subscribe(t){if(this.closed)throw new s.a;return this.hasError?(t.error(this.thrownError),i.a.EMPTY):this.isStopped?(t.complete(),i.a.EMPTY):(this.observers.push(t),new o.a(this,t))}asObservable(){const t=new a.a;return t.source=this,t}}return t.create=(t,e)=>new c(t,e),t})();class c extends d{constructor(t,e){super(),this.destination=t,this.source=e}next(t){const{destination:e}=this;e&&e.next&&e.next(t)}error(t){const{destination:e}=this;e&&e.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:e}=this;return e?this.source.subscribe(t):i.a.EMPTY}}},Xg1U:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("8Y7J"),r=n("978R"),i=(n("SVse"),a["ɵcrt"]({encapsulation:0,styles:[".tooltip[_nghost-%COMP%] {\n      display: block;\n      pointer-events: none;\n    }\n    .bs3.tooltip.top[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -2px;\n    }\n    .bs3.tooltip.bottom[_nghost-%COMP%] {\n      margin-top: 0px;\n    }\n    .bs3.bs-tooltip-left[_nghost-%COMP%], .bs3.bs-tooltip-right[_nghost-%COMP%]{\n      margin: 0px;\n    }\n    .bs3.bs-tooltip-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs3.bs-tooltip-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      margin: .3rem 0;\n    }"],data:{}}));function s(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","tooltip-arrow arrow"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","tooltip-inner"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-tooltip-container",[["role","tooltip"]],[[8,"className",0],[2,"show",null],[2,"bs3",null],[1,"id",0]],null,null,s,i)),a["ɵdid"](1,4243456,null,0,r.b,[r.a],null,null)],null,(function(t,e){t(e,0,0,"tooltip in tooltip-"+a["ɵnov"](e,1).placement+" bs-tooltip-"+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).containerClass,!a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).id)}))}var u=a["ɵccf"]("bs-tooltip-container",r.b,o,{},{},["*"])},XhiP:function(t,e,n){var a=n("Wa4q");t.exports=a.Uint8Array},XoHu:function(t,e,n){"use strict";function a(t){return null!==t&&"object"==typeof t}n.d(e,"a",(function(){return a}))},Y3RO:function(t,e){t.exports=function(t,e){var n=-1,a=t.length;for(e||(e=Array(a));++n<a;)e[n]=t[n];return e}},Y7HM:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("DH7j");function r(t){return!Object(a.a)(t)&&t-parseFloat(t)+1>=0}},YCpU:function(t,e,n){var a=n("QuoE"),r=n("im1V"),i=n("372+"),s=n("H+zY"),o=n("yb/u"),u=Math.max;t.exports=function(t,e,n,l){t=r(t)?t:o(t),n=n&&!l?s(n):0;var d=t.length;return n<0&&(n=u(d+n,0)),i(t)?n<=d&&t.indexOf(e,n)>-1:!!d&&a(t,e,n)>-1}},YGUN:function(t,e){t.exports=function(t){return function(){return t}}},YLnZ:function(t,e){t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},YNrV:function(t,e,n){"use strict";var a=n("g6v/"),r=n("0Dky"),i=n("33Wh"),s=n("dBg+"),o=n("0eef"),u=n("ewvW"),l=n("RK3t"),d=Object.assign,c=Object.defineProperty;t.exports=!d||r((function(){if(a&&1!==d({b:1},d(c({},"a",{enumerable:!0,get:function(){c(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=d({},t)[n]||"abcdefghijklmnopqrst"!=i(d({},e)).join("")}))?function(t,e){for(var n=u(t),r=arguments.length,d=1,c=s.f,f=o.f;r>d;)for(var h,g=l(arguments[d++]),p=c?i(g).concat(c(g)):i(g),b=p.length,m=0;b>m;)h=p[m++],a&&!f.call(g,h)||(n[h]=g[h]);return n}:d},YRex:function(t,e,n){!function(t){"use strict";t.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(t,e){return 12===t&&(t=0),"يېرىم كېچە"===e||"سەھەر"===e||"چۈشتىن بۇرۇن"===e?t:"چۈشتىن كېيىن"===e||"كەچ"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var a=100*t+e;return a<600?"يېرىم كېچە":a<900?"سەھەر":a<1130?"چۈشتىن بۇرۇن":a<1230?"چۈش":a<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"-كۈنى";case"w":case"W":return t+"-ھەپتە";default:return t}},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n("wd/R"))},YcCt:function(t,e,n){"use strict";function a(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,n,r){n=n||"=";var i={};if("string"!=typeof t||0===t.length)return i;var s=/\+/g;t=t.split(e=e||"&");var o=1e3;r&&"number"==typeof r.maxKeys&&(o=r.maxKeys);var u=t.length;o>0&&u>o&&(u=o);for(var l=0;l<u;++l){var d,c,f,h,g=t[l].replace(s,"%20"),p=g.indexOf(n);p>=0?(d=g.substr(0,p),c=g.substr(p+1)):(d=g,c=""),f=decodeURIComponent(d),h=decodeURIComponent(c),a(i,f)?Array.isArray(i[f])?i[f].push(h):i[f]=[i[f],h]:i[f]=h}return i}},"Yj/I":function(t,e,n){var a=n("l9nr"),r=n("im1V"),i=n("FGWQ");t.exports=function(t){return function(e,n,s){var o=Object(e);if(!r(e)){var u=a(n,3);e=i(e),n=function(t){return u(o[t],t,o)}}var l=t(e,n,s);return l>-1?o[u?e[l]:l]:void 0}}},Ylt2:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("quSY");class r extends a.a{constructor(t,e){super(),this.subject=t,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,e=t.observers;if(this.subject=null,!e||0===e.length||t.isStopped||t.closed)return;const n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},Ytn0:function(t,e,n){var a=n("sEik");t.exports=function(t,e){var n=t.__data__;return a(e)?n["string"==typeof e?"string":"hash"]:n.map}},YuTi:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},YzqF:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(){this._queue=[],this._pending=!1}return t.prototype.isLocked=function(){return this._pending},t.prototype.acquire=function(){var t=this,e=new Promise((function(e){return t._queue.push(e)}));return this._pending||this._dispatchNext(),e},t.prototype.runExclusive=function(t){return this.acquire().then((function(e){var n;try{n=t()}catch(a){throw e(),a}return Promise.resolve(n).then((function(t){return e(),t}),(function(t){throw e(),t}))}))},t.prototype._dispatchNext=function(){this._queue.length>0?(this._pending=!0,this._queue.shift()(this._dispatchNext.bind(this))):this._pending=!1},t}();e.default=a},Z21x:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("sne2");class a{constructor(t,e){this.location=t,this.actionLabels=e,this.name=this.actionLabels.CANCEL,this.back=()=>this.location.back()}}},Z2DA:function(t,e,n){var a=n("vJUC"),r=n("+FhV"),i=n("1Yk6"),s=n("kA6G");t.exports=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)a(e,i(t)),t=r(t);return e}:s},Z4QM:function(t,e,n){!function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n("wd/R"))},ZAMP:function(t,e,n){!function(t){"use strict";t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},ZDA6:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("IheW"),i=n("pL04");let s=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("ui-api/scope")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.c))},token:t,providedIn:i.a}),t})()},ZEkX:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return u})),n("Mxhz");var a=n("0+/T"),r=(n("sne2"),n("x38r")),i=n("oxzT"),s=n("mtw6"),o=n("vCyI");n("a0VL"),n("nSDx"),n("aexS"),n("9nlD");const u=new(n("EgGo").a)("user-management/users");class l{constructor(t,e,n,a,r,s,u,l,d){this.userService=t,this.emptyPipe=e,this.modalService=n,this.notificationService=a,this.authStorageService=r,this.i18n=s,this.urlBuilder=u,this.cdDatePipe=l,this.actionLabels=d,this.selection=new o.a,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:i.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:i.a.edit,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().username),name:this.actionLabels.EDIT},{permission:"delete",icon:i.a.destroy,click:()=>this.deleteUserModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Username"),prop:"username",flexGrow:1},{name:this.i18n("Name"),prop:"name",flexGrow:1,pipe:this.emptyPipe},{name:this.i18n("Email"),prop:"email",flexGrow:1,pipe:this.emptyPipe},{name:this.i18n("Roles"),prop:"roles",flexGrow:1,cellTemplate:this.userRolesTpl},{name:this.i18n("Enabled"),prop:"enabled",flexGrow:1,cellTransformation:r.a.checkIcon},{name:this.i18n("Password expiration date"),prop:"pwdExpirationDate",flexGrow:1,pipe:this.cdDatePipe}]}getUsers(){this.userService.list().subscribe(t=>{t.forEach(t=>{t.pwdExpirationDate&&t.pwdExpirationDate>0&&(t.pwdExpirationDate=1e3*t.pwdExpirationDate)}),this.users=t})}updateSelection(t){this.selection=t}deleteUser(t){this.userService.delete(t).subscribe(()=>{this.getUsers(),this.modalRef.hide(),this.notificationService.show(s.a.success,this.i18n('Deleted user "{{username}}"',{username:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}deleteUserModal(){const t=this.authStorageService.getUsername(),e=this.selection.first().username;t!==e?this.modalRef=this.modalService.show(a.a,{initialState:{itemDescription:"User",itemNames:[e],submitAction:()=>this.deleteUser(e)}}):this.notificationService.show(s.a.error,this.i18n('Failed to delete user "{{username}}"',{username:e}),this.i18n('You are currently logged in as "{{username}}".',{username:e}))}}},ZPW6:function(t,e,n){var a=n("w/8D");t.exports=function(t,e,n){"__proto__"==e&&a?a(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},ZUHj:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("51Dv"),r=n("SeVD"),i=n("HDdC");function s(t,e,n,s,o=new a.a(t,n,s)){if(!o.closed)return e instanceof i.a?e.subscribe(o):Object(r.a)(e)(o)}},ZUd8:function(t,e,n){var a=n("ppGB"),r=n("HYAF"),i=function(t){return function(e,n){var i,s,o=String(r(e)),u=a(n),l=o.length;return u<0||u>=l?t?"":void 0:(i=o.charCodeAt(u))<55296||i>56319||u+1===l||(s=o.charCodeAt(u+1))<56320||s>57343?t?o.charAt(u):i:t?o.slice(u,u+2):s-56320+(i-55296<<10)+65536}};t.exports={codeAt:i(!1),charAt:i(!0)}},ZY2H:function(t,e,n){var a=n("/Gx3"),r=n("QUkU");t.exports=function(t){return a((function(e,n){var a=-1,i=n.length,s=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(s=t.length>3&&"function"==typeof s?(i--,s):void 0,o&&r(n[0],n[1],o)&&(s=i<3?void 0:s,i=1),e=Object(e);++a<i;){var u=n[a];u&&t(e,u,a,s)}return e}))}},Zduo:function(t,e,n){!function(t){"use strict";t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n("wd/R"))},ZfDv:function(t,e,n){var a=n("hh1v"),r=n("6LWA"),i=n("tiKp")("species");t.exports=function(t,e){var n;return r(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!r(n.prototype)?a(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},ZhuC:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",a.TemplateRef)],t.prototype,"template",void 0),i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({encapsulation:a.ViewEncapsulation.None,selector:"tree-loading-component",template:'\n    <span *ngIf="!template">loading...</span>\n    <ng-container\n      [ngTemplateOutlet]="template"\n      [ngTemplateOutletContext]="{ $implicit: node }">\n    </ng-container>\n  '})],t)}()},a0VL:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.datePipe=t}transform(t){return null===t||""===t?"":this.datePipe.transform(t,"shortDate")+" "+this.datePipe.transform(t,"mediumTime")}}},a1D2:function(t,e,n){var a=n("43VP");t.exports=function(t,e){var n;return a(t,(function(t,a,r){return!(n=e(t,a,r))})),!!n}},a278:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("QC43"),i=n("XFyV"),s=n("DqMs"),o=n("/NlG"),u=n("GiVz"),l=n("i4WA"),d=n("6qls"),c=n("tz6c"),f=n("s7LF"),h=n("ANnk"),g=n("f/UV"),p=n("aexS"),b=n("SVse");n("insk"),n("cUpR"),n("20UP"),n.d(e,"a",(function(){return m})),n.d(e,"b",(function(){return O}));var m=a["ɵcrt"]({encapsulation:0,styles:[[".grafana[_ngcontent-%COMP%]{width:100%;height:600px;z-index:0}.grafana_one[_ngcontent-%COMP%]{height:400px}.grafana_two[_ngcontent-%COMP%]{height:750px}.grafana_three[_ngcontent-%COMP%]{height:900px}.grafana_four[_ngcontent-%COMP%]{height:1160px}.timepicker[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.dropdown-menu[_ngcontent-%COMP%]{top:20px;right:20px;left:auto}"]],data:{}});function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,r.b,r.a)),a["ɵdid"](1,49152,null,0,i.a,[],null,null),(t()(),a["ɵted"](-1,0,["Loading panel data..."]))],null,null)}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Please consult the "])),(t()(),a["ɵeld"](3,0,null,0,1,"cd-doc",[["section","grafana"]],null,null,null,l.b,l.a)),a["ɵdid"](4,114688,null,0,d.a,[c.a,u.a],{section:[0,"section"]},null),(t()(),a["ɵted"](-1,0,[" on how to configure and enable the monitoring functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"grafana")}),null)}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Grafana Dashboard doesn't exist. Please refer to "])),(t()(),a["ɵeld"](3,0,null,0,1,"cd-doc",[["section","grafana"]],null,null,null,l.b,l.a)),a["ɵdid"](4,114688,null,0,d.a,[c.a,u.a],{section:[0,"section"]},null),(t()(),a["ɵted"](-1,0,[" on how to add dashboards to Grafana."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"grafana")}),null)}function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,f.v,[a.ElementRef,a.Renderer2,[2,f.A]],{ngValue:[0,"ngValue"]},null),a["ɵdid"](2,147456,null,0,f.F,[a.ElementRef,a.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),a["ɵted"](3,null,[""," "]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,25,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,18,"div",[["class","row"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,17,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,16,"div",[["class","form-inline timepicker"]],null,null,null,null,null)),(t()(),a["ɵeld"](4,0,null,null,1,"label",[["class","ml-1 my-1 col-form-label"],["for","timepicker"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Grafana Time Picker"])),(t()(),a["ɵeld"](6,0,null,null,8,"select",[["class","custom-select my-1 mx-3"],["id","timepicker"],["name","timepicker"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0,i=t.component;return"change"===e&&(r=!1!==a["ɵnov"](t,7).onChange(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,7).onTouched()&&r),"ngModelChange"===e&&(r=!1!==(i.time=n)&&r),"ngModelChange"===e&&(r=!1!==i.onTimepickerChange(n)&&r),r}),null,null)),a["ɵdid"](7,16384,null,0,f.A,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,f.p,(function(t){return[t]}),[f.A]),a["ɵdid"](9,671744,null,0,f.u,[[8,null],[8,null],[8,null],[6,f.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),a["ɵprd"](2048,null,f.q,null,[f.u]),a["ɵdid"](11,16384,null,0,f.r,[[4,f.q]],null,null),a["ɵdid"](12,4210688,null,0,h.a,[[2,g.a],p.a,a.ElementRef],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,_)),a["ɵdid"](14,278528,null,0,b.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](15,0,null,null,4,"button",[["class","btn btn-light my-1"],["title","Reset Settings"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.reset()&&a),a}),null,null)),(t()(),a["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,b["ɵNgClassImpl"],b["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](18,278528,null,0,b.NgClass,[b["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](19,1),(t()(),a["ɵeld"](20,0,null,null,5,"div",[["class","row"]],null,null,null,null,null)),(t()(),a["ɵeld"](21,0,null,null,4,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),a["ɵeld"](22,0,null,null,3,"div",[["class","grafana-container"]],null,null,null,null,null)),(t()(),a["ɵeld"](23,0,[["iframe",1]],null,2,"iframe",[["class","grafana"],["frameborder","0"],["id","iframe"],["scrolling","no"]],[[8,"src",5]],null,null,null,null)),a["ɵprd"](512,null,b["ɵNgClassImpl"],b["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](25,278528,null,0,b.NgClass,[b["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null)],(function(t,e){var n=e.component;t(e,9,0,"timepicker",n.time),t(e,14,0,n.grafanaTimes);var a=t(e,19,0,n.icons.undo);t(e,18,0,a),t(e,25,0,"grafana",n.panelStyle)}),(function(t,e){var n=e.component;t(e,6,0,a["ɵnov"](e,11).ngClassUntouched,a["ɵnov"](e,11).ngClassTouched,a["ɵnov"](e,11).ngClassPristine,a["ɵnov"](e,11).ngClassDirty,a["ɵnov"](e,11).ngClassValid,a["ɵnov"](e,11).ngClassInvalid,a["ɵnov"](e,11).ngClassPending),t(e,23,0,n.grafanaSrc)}))}function O(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](1,16384,null,0,b.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](3,16384,null,0,b.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,x)),a["ɵdid"](5,16384,null,0,b.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](7,16384,null,0,b.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.loading&&n.grafanaExist),t(e,3,0,!n.grafanaExist),t(e,5,0,!n.dashboardExist),t(e,7,0,n.grafanaExist&&n.dashboardExist)}),null)}},a40w:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("EEJc"),i=n("ajRT"),s=n("s7LF"),o=n("+gVj"),u=n("SVse"),l=n("gp3X"),d=n("sb0X"),c=n("KVJa"),f=n("Z21x"),h=n("sne2"),g=n("OLbh"),p=n("LqlI");n.d(e,"a",(function(){return _}));var b=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.description)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,22,"cd-modal",[],null,[[null,"hide"]],(function(t,e,n){var a=!0;return"hide"===e&&(a=!1!==t.component.cancel()&&a),a}),r.c,r.b)),a["ɵdid"](1,49152,null,0,i.a,[],null,{hide:"hide"}),(t()(),a["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](3,null,["",""])),(t()(),a["ɵeld"](4,0,null,1,18,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,17,"form",[["name","confirmationForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,7).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,7).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,10).onSubmit()&&r),r}),null,null)),a["ɵdid"](6,16384,null,0,s.G,[],null,null),a["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,s.d,null,[s.l]),a["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),a["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](11,0,null,null,4,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](13,540672,null,0,u.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](15,16384,null,0,u.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](16,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](17,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](18,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0,r=t.component;return"submitAction"===e&&(a=!1!==r.onSubmit(r.confirmationForm.value)&&a),a}),l.b,l.a)),a["ɵdid"](19,114688,null,0,d.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵted"](20,0,[" "," "])),(t()(),a["ɵeld"](21,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,c.b,c.a)),a["ɵdid"](22,49152,null,0,f.a,[u.Location,h.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,7,0,n.confirmationForm),t(e,10,0,n.confirmationForm),t(e,13,0,n.bodyContext,n.bodyTpl),t(e,15,0,n.description),t(e,19,0,n.confirmationForm),t(e,22,0,"Cancel",n.boundCancel)}),(function(t,e){var n=e.component;t(e,3,0,n.titleText),t(e,5,0,a["ɵnov"](e,9).ngClassUntouched,a["ɵnov"](e,9).ngClassTouched,a["ɵnov"](e,9).ngClassPristine,a["ɵnov"](e,9).ngClassDirty,a["ɵnov"](e,9).ngClassValid,a["ɵnov"](e,9).ngClassInvalid,a["ɵnov"](e,9).ngClassPending),t(e,20,0,n.buttonText)}))}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-confirmation-modal",[],null,null,null,v,b)),a["ɵdid"](1,245760,null,0,g.a,[p.a,p.b],null,null)],(function(t,e){t(e,1,0)}),null)}var _=a["ɵccf"]("cd-confirmation-modal",g.a,x,{},{},[])},a96k:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n,a=!0){this.selected=t,this.name=e,this.description=n,this.enabled=a}}},aHM3:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("8Y7J"),n("s7LF");class a{static forRoot(){return{ngModule:a,providers:[]}}}},aHcz:function(t,e){t.exports=function(t){return t}},aIdf:function(t,e,n){!function(t){"use strict";function e(t,e,n){return t+" "+function(t,e){return 2===e?function(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}(t):t}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}t.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:function(t){switch(function t(e){return e>9?t(e%10):e}(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(t){return t+(1===t?"añ":"vet")},week:{dow:1,doy:4}})}(n("wd/R"))},aIsn:function(t,e,n){!function(t){"use strict";t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},aKKh:function(t,e,n){var a=n("ktBm");t.exports=function(t,e){var n=this.__data__,r=a(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}},aQkU:function(t,e,n){!function(t){"use strict";t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n("wd/R"))},aT2Y:function(t,e,n){var a=n("o3PY"),r=n("UnOm"),i=n("mWP/"),s=n("bdl3"),o=n("aKKh");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},aTV8:function(t,e,n){var a=n("LxgN"),r=n("l9nr"),i=n("a1D2"),s=n("0GLT"),o=n("QUkU");t.exports=function(t,e,n){var u=s(t)?a:i;return n&&o(t,e,n)&&(e=void 0),u(t,r(e,3))}},aXbf:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LvDl"),r=n("8Y7J");let i=(()=>{class t{constructor(){}format_number(t,e,n,r=1){if(a.isString(t)&&(t=Number(t)),!a.isNumber(t))return"-";let i=t<1?0:Math.floor(Math.log(t)/Math.log(e));i=i>=n.length?n.length-1:i;let s=a.round(t/Math.pow(e,i),r).toString();return""===s?"-":(""!==n[i]&&(s=`${s} ${n[i]}`),s)}toBytes(t,e=null){const n=["b","k","m","g","t","p","e","z","y"],r=RegExp("^(\\d+(.\\d+)?) ?(["+n.join("")+"]?(b|ib|B/s)?)?$","i").exec(t);if(null===r)return e;let i=parseFloat(r[1]);return a.isString(r[3])&&(i*=Math.pow(1024,n.indexOf(r[3].toLowerCase()[0]))),Math.round(i)}toMilliseconds(t){const e=/^\s*(\d+)\s*(ms)?\s*$/i.exec(t);return null!==e?+e[1]:0}toIops(t){const e=/^\s*(\d+)\s*(IOPS)?\s*$/i.exec(t);return null!==e?+e[1]:0}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},aexS:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("2Vo4"),r=n("jKX/"),i=n("8Y7J");let s=(()=>{class t{constructor(){this.isPwdDisplayedSource=new a.a(!1),this.isPwdDisplayed$=this.isPwdDisplayedSource.asObservable()}set(t,e,n={},a=!1,i=null,s=!1){localStorage.setItem("dashboard_username",t),localStorage.setItem("access_token",e),localStorage.setItem("dashboard_permissions",JSON.stringify(new r.a(n))),localStorage.setItem("user_pwd_expiration_date",String(i)),localStorage.setItem("user_pwd_update_required",String(s)),localStorage.setItem("sso",String(a))}remove(){localStorage.removeItem("access_token"),localStorage.removeItem("dashboard_username"),localStorage.removeItem("user_pwd_expiration_data"),localStorage.removeItem("user_pwd_update_required")}getToken(){return localStorage.getItem("access_token")}isLoggedIn(){return null!==localStorage.getItem("dashboard_username")}getUsername(){return localStorage.getItem("dashboard_username")}getPermissions(){return JSON.parse(localStorage.getItem("dashboard_permissions")||JSON.stringify(new r.a({})))}getPwdExpirationDate(){return Number(localStorage.getItem("user_pwd_expiration_date"))}getPwdUpdateRequired(){return"true"===localStorage.getItem("user_pwd_update_required")}isSSO(){return"true"===localStorage.getItem("sso")}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},afO8:function(t,e,n){var a,r,i,s=n("f5p1"),o=n("2oRo"),u=n("hh1v"),l=n("kRJp"),d=n("UTVS"),c=n("93I0"),f=n("0BK2");if(s){var h=new(0,o.WeakMap),g=h.get,p=h.has,b=h.set;a=function(t,e){return b.call(h,t,e),e},r=function(t){return g.call(h,t)||{}},i=function(t){return p.call(h,t)}}else{var m=c("state");f[m]=!0,a=function(t,e){return l(t,m,e),e},r=function(t){return d(t,m)?t[m]:{}},i=function(t){return d(t,m)}}t.exports={set:a,get:r,has:i,enforce:function(t){return i(t)?r(t):a(t,{})},getterFor:function(t){return function(e){var n;if(!u(e)||(n=r(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},ajRT:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("8Y7J");class r{constructor(){this.hide=new a.EventEmitter}close(){this.modalRef&&this.modalRef.hide(),this.hide.emit()}}},atuK:function(t,e,n){"use strict";n.d(e,"a",(function(){return v})),n.d(e,"b",(function(){return E})),n.d(e,"d",(function(){return H})),n.d(e,"c",(function(){return rt}));var a=n("8Y7J"),r=n("ienR"),i=n("SVse"),s=(n("s7LF"),n("2uy1")),o=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,u)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,d)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,f)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function m(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,b)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-datepicker-container",[["aria-label","calendar"],["class","bottom"],["role","dialog"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),m,o)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.b,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var v=a["ɵccf"]("bs-datepicker-container",r.b,y,{},{},[]),x=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,_)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,O)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,S)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function N(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,N)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,C)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,R)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-datepicker-inline-container",[],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),A,x)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.e,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var E=a["ɵccf"]("bs-datepicker-inline-container",r.e,k,{},{},[]),L=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,D)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,M)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function j(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function F(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,j)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function G(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,P)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,q)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,F)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,G)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function B(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,z)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function Y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-daterangepicker-inline-container",[],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),B,L)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.k,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var H=a["ɵccf"]("bs-daterangepicker-inline-container",r.k,Y,{},{},[]),U=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function W(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,W)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function J(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,$)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function Z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function Q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,Z)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function X(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,K)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,J)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Q)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,X)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,tt)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function nt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,et)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function at(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-daterangepicker-container",[["aria-label","calendar"],["class","bottom"],["role","dialog"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),nt,U)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.i,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var rt=a["ɵccf"]("bs-daterangepicker-container",r.i,at,{},{},[]),it=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function st(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-current-date",[["title","hey there"]],null,null,null,dt,lt)),a["ɵdid"](1,49152,null,0,r.x,[],{title:[0,"title"]},null)],(function(t,e){t(e,1,0,"hey there")}),null)}function ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-timepicker",[],null,null,null,Et,kt)),a["ɵdid"](1,49152,null,0,r.D,[],null,null)],null,null)}function ut(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,st)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,0,null,null,1,"div",[["class","bs-datepicker-head"]],null,null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵeld"](4,0,null,null,1,"div",[["class","bs-datepicker-body"]],null,null,null,null,null)),a["ɵncd"](null,1),(t()(),a["ɵand"](16777216,null,null,1,null,ot)),a["ɵdid"](7,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,!1),t(e,7,0,!1)}),null)}var lt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","current-timedate"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.component.title)}))}var ct=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ft(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"button",[["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.$implicit.label)}))}function ht(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"button",[["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Custom Range"]))],null,null)}function gt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-predefined-btns"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ft)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ht)),a["ɵdid"](4,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.ranges),t(e,4,0,n.isCustomRangeShown)}),null)}var pt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function bt(t){return a["ɵvid"](2,[(t()(),a["ɵted"](0,null,["",""]))],null,(function(t,e){t(e,0,0,e.component.day.label)}))}var mt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function yt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"button",[["class","current"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.view("month")&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.component.calendar.monthTitle)}))}function vt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,2,"button",[["class","previous"],["type","button"]],[[8,"disabled",0],[4,"visibility",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.navTo(!0)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["‹"])),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵand"](16777216,null,null,1,null,yt)),a["ɵdid"](5,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵeld"](7,0,null,null,2,"button",[["class","current"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.view("year")&&a),a}),null,null)),(t()(),a["ɵeld"](8,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](9,null,["",""])),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵeld"](11,0,null,null,2,"button",[["class","next"],["type","button"]],[[8,"disabled",0],[4,"visibility",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.navTo(!1)&&a),a}),null,null)),(t()(),a["ɵeld"](12,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["›"]))],(function(t,e){t(e,5,0,e.component.calendar.monthTitle)}),(function(t,e){var n=e.component;t(e,0,0,n.calendar.disableLeftArrow,n.calendar.hideLeftArrow?"hidden":"visible"),t(e,9,0,n.calendar.yearTitle),t(e,11,0,n.calendar.disableRightArrow,n.calendar.hideRightArrow?"hidden":"visible")}))}var xt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function _t(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"th",[],null,null,null,null,null))],null,null)}function Tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"th",[["aria-label","weekday"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[""," "]))],null,(function(t,e){t(e,1,0,e.component.calendar.weekdays[e.context.index])}))}function Ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["class","week"]],[[2,"active-week",null]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectWeek(t.parent.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.weekHoverHandler(t.parent.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.weekHoverHandler(t.parent.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){var n=e.component;t(e,0,0,n.isWeekHovered),t(e,2,0,n.calendar.weekNumbers[e.parent.context.index])}))}function wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"td",[["role","gridcell"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"span",[["bsDatepickerDayDecorator",""]],[[2,"disabled",null],[2,"is-highlighted",null],[2,"is-other-month",null],[2,"is-active-other-month",null],[2,"in-range",null],[2,"select-start",null],[2,"select-end",null],[2,"selected",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectDay(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverDay(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverDay(t.context.$implicit,!1)&&a),a}),bt,pt)),a["ɵdid"](2,114688,null,0,r.z,[r.a,a.ElementRef,a.Renderer2],{day:[0,"day"]},null),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,1,0,a["ɵnov"](e,2).day.isDisabled,a["ɵnov"](e,2).day.isHovered,a["ɵnov"](e,2).day.isOtherMonth,a["ɵnov"](e,2).day.isOtherMonthHovered,a["ɵnov"](e,2).day.isInRange,a["ɵnov"](e,2).day.isSelectionStart,a["ɵnov"](e,2).day.isSelectionEnd,a["ɵnov"](e,2).day.isSelected),t(e,3,0,e.context.$implicit.label)}))}function St(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ot)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,wt)),a["ɵdid"](4,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.options.showWeekNumbers),t(e,4,0,e.context.$implicit.days)}),null)}function It(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,13,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,9,"table",[["class","days weeks"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,5,"thead",[],null,null,null,null,null)),(t()(),a["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,_t)),a["ɵdid"](8,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Tt)),a["ɵdid"](10,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](11,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,St)),a["ɵdid"](13,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,8,0,n.options.showWeekNumbers),t(e,10,0,n.calendar.weekdays),t(e,13,0,n.calendar.weeks)}),null)}var Nt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Ct(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["role","gridcell"]],[[2,"disabled",null],[2,"is-highlighted",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.viewMonth(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverMonth(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverMonth(t.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],[[2,"selected",null]],null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,0,0,e.context.$implicit.isDisabled,e.context.$implicit.isHovered),t(e,1,0,e.context.$implicit.isSelected),t(e,2,0,e.context.$implicit.label)}))}function Rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ct)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function At(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,3,"table",[["class","months"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Rt)),a["ɵdid"](7,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,7,0,n.calendar.months)}),null)}var kt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,15,"div",[["class","bs-timepicker-container"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","bs-timepicker-controls"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"button",[["class","bs-decrease"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["-"])),(t()(),a["ɵeld"](4,0,null,null,0,"input",[["placeholder","00"],["type","text"]],[[8,"value",0]],null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,1,"button",[["class","bs-increase"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["+"])),(t()(),a["ɵeld"](7,0,null,null,5,"div",[["class","bs-timepicker-controls"]],null,null,null,null,null)),(t()(),a["ɵeld"](8,0,null,null,1,"button",[["class","bs-decrease"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["-"])),(t()(),a["ɵeld"](10,0,null,null,0,"input",[["placeholder","00"],["type","text"]],[[8,"value",0]],null,null,null,null)),(t()(),a["ɵeld"](11,0,null,null,1,"button",[["class","bs-increase"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["+"])),(t()(),a["ɵeld"](13,0,null,null,2,"button",[["class","switch-time-format"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](14,null,[""," "])),(t()(),a["ɵeld"](15,0,null,null,0,"img",[["alt",""],["src","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAYAAABi8KSDAAABSElEQVQYV3XQPUvDUBQG4HNuagtVqc6KgouCv6GIuIntYBLB9hcIQpLStCAIV7DYmpTcRWcXqZio3Vwc/UCc/QEqfgyKGbr0I7nS1EiHeqYzPO/h5SD0jaxUZjmSLCB+OFb+UFINFwASAEAdpu9gaGXVyAHHFQBkHpKHc6a9dzECvADyY9sqlAMsK9W0jzxDXqeytr3mhQckxSji27TJJ5/rPmIpwJJq3HrtduriYOurv1a4i1p5HnhkG9OFymi0ReoO05cGwb+ayv4dysVygjeFmsP05f8wpZQ8fsdvfmuY9zjWSNqUtgYFVnOVReILYoBFzdQI5/GGFzNHhGbeZnopDGU29sZbscgldmC99w35VOATTycIMMcBXIfpSVGzZhA6C8hh00conln6VQ9TGgV32OEAKQC4DrBq7CJwd0ggR7Vq/rPrfgB+C3sGypY5DAAAAABJRU5ErkJggg=="]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,4,0,n.hours),t(e,10,0,n.minutes),t(e,14,0,n.ampm)}))}var Lt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["role","gridcell"]],[[2,"disabled",null],[2,"is-highlighted",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.viewYear(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverYear(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverYear(t.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],[[2,"selected",null]],null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,0,0,e.context.$implicit.isDisabled,e.context.$implicit.isHovered),t(e,1,0,e.context.$implicit.isSelected),t(e,2,0,e.context.$implicit.label)}))}function Pt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Dt)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function Mt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,3,"table",[["class","years"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Pt)),a["ɵdid"](7,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,7,0,n.calendar.years)}),null)}},b1Dy:function(t,e,n){!function(t){"use strict";t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},b5OY:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("pxLl");class a{constructor(t,e){this.performanceCounterService=t,this.i18n=e,this.columns=[],this.counters=[]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Description"),prop:"description",flexGrow:1},{name:this.i18n("Value"),prop:"value",cellTemplate:this.valueTpl,flexGrow:1}]}getCounters(t){this.performanceCounterService.get(this.serviceType,this.serviceId).subscribe(t=>{this.counters=t},e=>{404===e.status?(e.preventDefault(),this.counters=null):t.error()})}}},bHdf:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("5+tZ"),r=n("SpAZ");function i(t=Number.POSITIVE_INFINITY){return Object(a.a)(r.a,t)}},bN42:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="ja-JP">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>ナビゲーションの切り替え</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>ダッシュボード</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>クラスタ</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>ホスト</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>モニター</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>サービス</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSHマップ</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>マネージャモジュール</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>ログ</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>プール</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>ブロック</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>イメージ</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>ミラーリング</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>ファイルシステム</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>オブジェクトゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>デーモン</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>バケット</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>言語の選択</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>パネルデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana Time Picker</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>設定のリセット</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>戻る</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>データを読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>選択済み</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>検出済み</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>合計</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名前</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>説明</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>長い説明</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>デフォルト</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>デーモンのデフォルト</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>値</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>保存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSHマップビューア</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>ホスト名</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>はい。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>キャンセル</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>閉じる</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>ホストリスト</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>全体的なパフォーマンス</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>エントリが見つかりません</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>クラスタログ</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>監査ログ</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>設定を読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>設定を読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>マネージャモジュールの編集</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>入力された値は有効なUUIDではありません(有効なUUIDの例: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8)。</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>有効なIPアドレスを入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>数字を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>数字または小数を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>ステータス</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>クラスタID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmapが変更されました</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmapエポック</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>定数con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>定数mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>必須のcon</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>必須のmon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>定数内</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非定数内</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>追加</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>機能</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>クラスタ全体のOSDフラグ</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>送信</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>詳細...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD回復優先度</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>優先度</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>優先度値のカスタマイズ</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>値は0と1の間である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>再重みづけ</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSDリスト</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>値</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>編集</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>削除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>ヘルス</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>統計情報</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>クライアント</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任意のクライアントからアクセスできます</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>アドレス</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必須フィールド</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>1つ以上のカンマ区切り値を含んでいる必要があります</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>アクセスタイプ</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>スカッシュ</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>クライアントの追加</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 使用可能なクラスタがありません --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- クラスタを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>デーモンの追加</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>ストレージバックエンド</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 使用可能なデータプールがありません --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- ストレージバックエンドを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>オブジェクトゲートウェイユーザ</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 使用可能なユーザがありません --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- オブジェクトゲートウェイユーザを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFSユーザID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 使用可能なクライアントがありません --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephxクライアントを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS名</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>セキュリティラベル</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>セキュリティラベルの有効化</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFSパス</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>パスは「/」で始まる必要があり、その後ろに1つの単語を配置できます</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>新しいディレクトリが作成されます</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>パス</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>パスは単一の「/」または1つの単語である必要があります</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>新しいバケットが作成されます</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFSプロトコル</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFSタグ</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>クライアントはサブディレクトリをマウントできません(たとえば、[タグ] = fooの場合は、クライアントはfoo/bazをマウントできません)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>異なる[タグ]オプションを使用することで、同じパスを複数回エクスポートできます。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>疑似</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>異なる[疑似]オプションを使用することで、同じパスを複数回エクスポートできます。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 使用可能なアクセスタイプがありません --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- アクセスタイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 使用可能なスカッシュがありません --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 実行されるユーザIDスカッシュ操作の種類を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>トランスポートプロトコル</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Cephにようこそ!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>ユーザ名は必須です</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>パスワードは必須です</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>ログイン</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>このユーザはCephに存在しません。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>禁止</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>検索していた内容を表示することは許可されていません。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD設定</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>ローカル設定値を削除します。親設定値が継承されて代わりに使用されます。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小値は0です</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>プールリスト</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名前は英数字、ダッシュ、および下線のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>選択されたイレイジャコードプロファイル名はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>プラグイン</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>データチャンク(k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>2以上である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>コーディングチャンク(m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>1以上である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>耐久性推定子(c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>地域(l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Crush障害ドメイン</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Crush地域</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>技法</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>パケットサイズ</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crushルート</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Crushデバイスクラス</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任意</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>ディレクトリ</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名前...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>選択されたCephプール名はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>プールタイプ</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- プールタイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>配置グループ</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>少なくとも1つの配置グループが必要です。</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>ご使用のクラスタはこれだけ多数の配置グループを処理できません。必要な配置グループの数を再計算してください。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>計算のヘルプ</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>複製されたサイズ</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>フラグ</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>ECの上書き</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>アプリケーション</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>イレイジャコードプロファイル</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 使用可能なイレイジャコードプロファイルがありません --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- イレイジャコードプロファイルを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Crushルールセット</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Crushルールを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crushルール</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crushステップ</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>圧縮</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>モード</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>アルゴリズム</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 使用可能なイレイジャ圧縮アルゴリズムがありません --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>最小blobサイズ</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>例: 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>値は0より大きい必要があります</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>最大blobサイズ</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>例: 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>値は最小blobサイズより大きい必要があります</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>率</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>圧縮率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>値は0.0~1.0の間である必要があります</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>例: 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>詳細</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>パフォーマンスの詳細</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>キャッシュ層の詳細</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>イメージをごみ箱に移動する</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保護の失効日</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>保護されていません</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日付の形式が正しくありません。「YYYY-MM-DD HH:mm:ss」という形式を使用してください。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保護はすでに失効しています。将来の日付を選択するか、日付を空白のままにしてください。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>イメージの移動</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>概要</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>ターゲット</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>検出認証</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>ユーザ名は8~64文字の長さである必要があり、\n英字、「.」、「@」、「-」、「_」、または「:」のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>パスワード</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>相互ユーザ</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>相互パスワード</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>取得可能な情報:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>使用可能なiSCSIターゲットがありません</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>プール</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>データプール</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>作成済み</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>サイズ</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>オブジェクトサイズ</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>プロビジョニング済み</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>プロビジョニング済み合計</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>ストライピング単位</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>ストライピング数</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>親</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>ブロック名のプレフィックス</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>順番</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>スナップショット</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>イメージ</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>この設定はグローバル値よりも優先されます</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>グローバル</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>これはグローバル値です。このイメージについて、このオプションの値は設定されていません。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>「/」と「@」は使用できません。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 使用可能なrbdプールがありません --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- プールを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>専用のデータプールを使用してください</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>データプール</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>RBDのオブジェクトデータを保管するための専用プール</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>サイズを大きくする必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>詳細</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>ストライピング</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>ストライプ単位</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- ストライプ単位を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>ストライプ数が定義されているため、このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>ストライプ単位がオブジェクトサイズより大きいです。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>ストライプ数</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>ストライプ単位が定義されているため、このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>ストライプ数は0より大きい必要があります。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>ロールバックしようとしています</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>ごみ箱を空にする</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>すべて</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>プール:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>プール名...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>イメージの復元</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>復元するには</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>イメージの新しい名前を入力してクリックします</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新しい名前</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>失効日</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保護の終了日</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSIトポロジ</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常はこれらのパラメータをデフォルト値から変更する必要はありません。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>バックストア</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>確認</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>詳細設定</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>ターゲットIQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQNのパターンが正しくありません。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>詳細情報</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>このターゲットの詳細設定は変更されています。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>ポータル</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>ポータルの追加</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>このイメージの設定は変更されています。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>イメージの追加</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL認証</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>イニシエータ</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>イニシエータ</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>クライアントIQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>イニシエータIQNは一意である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>ユーザ名は8~64文字の長さである必要があり、\n英字、「.」、「@」、「-」、「_」、または「:」のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>イニシエータはいずれかのグループに属します。イメージはそのグループ内で設定されます。</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>アイテムが追加されていません。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>イニシエータの追加</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>グループ</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>グループ</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>グループの追加</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>ごみ箱</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>同期中</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>準備完了</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>プールのミラーモードの編集</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>ミラーを無効にする前に、ピアクラスタを削除する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>クラスタ名</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>このクラスタ名は無効です。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>このCephX IDは無効です。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>モニターアドレス</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>カンマ区切りアドレス...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>この警告アドレスは無効です。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephXキー</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64エンコード化済みキー...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephXキーはbase64でエンコードされている必要があります。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>パフォーマンスカウンタを使用できません</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>デーモンリスト</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>パフォーマンスカウンタ</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>バケットデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Id</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>この値は無効です。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>選択された名前はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>所有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- ユーザを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>有効化済み</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>インデックスタイプ</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>配置ルール</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>マーカー</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>最大マーカー</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>バージョン</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>マスタバージョン</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>変更時間</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>ゾーングループ</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>バケットクォータ</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大サイズ</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>無制限</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>ユーザ名</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- ユーザ名を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>キーの自動生成</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>アクセスキー</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>秘密キー</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>氏名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>電子メールアドレス</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>中断済み</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>システム</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大バケット数</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>サブユーザ</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>機能</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>ユーザクォータ</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>表示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>キー</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>タイプ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- タイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>許可</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 許可を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>サブユーザ</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>選択されたサブユーザIDはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>読み取り、書き込み</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>フル</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>スウィフトキー</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>秘密の自動生成</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>ユーザデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>ユーザデータを読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>選択されたユーザIDはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>これは有効な電子メールアドレスではありません。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>選択された電子メールアドレスはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>最大バケット数</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>無効化済み</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>カスタム</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3キー</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>サブユーザがいません。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>キーがありません。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>スウィフト</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>機能がありません。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>無制限のサイズ</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>最大サイズ</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>無制限のオブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>0以上の値を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>説明...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>許可</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>役割</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>パスワードの確認入力</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>確認入力されたパスワードがパスワードと一致しません。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>電子メール</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>無効な電子メールです。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>自身のユーザから「user read / update」という許可を削除しようとしています。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>続行した場合は、どのユーザの役割も追加および削除できなくなります。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>続行してもよろしいですか?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>ヘルプ</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>ドキュメント</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>バージョン情報</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>ダッシュボード設定</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>ユーザ管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>ログイン済みユーザ</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>サインアウト</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>属性(OSDマップ)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>メタデータを使用できません</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>メタデータ</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>パフォーマンスカウンタ</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>書き込み回数</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>読み取り回数</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>ヒストグラム</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>現行値</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>最小</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>最大</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>ソース</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>レベル</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>実行時に更新できます(編集可能)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>タグ</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>列挙値</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>関連項目</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>クラスタのステータス</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>マネージャデーモン</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>オブジェクトゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>メタデータサーバ</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSIゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>クライアントのIOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>クライアントのスループット</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>クライアントの読み取り/書き込み</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>回復スループット</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>スクラブ</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>パフォーマンス</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>未フォーマット時の容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>OSDあたりの配置グループ数</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>配置グループのステータス</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>ランク</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>現在</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>検出認証を更新しました</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>使用可能なポータルはありません。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>使用可能なイメージはありません。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>使用可能なイメージはありません。ターゲットにイメージを追加したことを確認してください。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>使用可能なイニシエータはありません。ターゲットにイニシエータを追加したことを確認してください。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>ターゲット</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>状態</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>読み取りバイト数</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>書き込みバイト数</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>読み取り操作数</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>書き込み操作数</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>次の日付以降のA/O</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>インスタンス</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>進捗</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>モードの編集</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>ピアの追加</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>ピアの編集</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>ピアの削除</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>リーダー</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>#ローカル</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>#リモート</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>ミラーピア</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>キー</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>ディープフラット化</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>階層化</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>排他ロック</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>オブジェクトマップ(排他ロックが必要)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>ジャーナリング(排他ロックが必要)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>未保護</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBDスナップショットのロールバック</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>ロールバック</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBDスナップショット</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>削除日時</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>タイプ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>状態</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>バージョン</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>ホスト</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>ルート</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>スタンバイデーモン</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>ランク</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>デーモン</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>アクティビティ</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>dエントリ</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>iノード</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用量</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>更新済み</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>この値は実行時に更新できます。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>デーモン/クライアントはこの値をモニター設定データベースから取得しません。\nこのオプションを「ceph config set ...」を通じて設定することは禁止されています。\nこのオプションは、ceph.confまたはコマンドラインを通じて\n設定する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>オプションはデーモン始動時のみに有効になります。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>オプションはクラスタの作成のみに適用されます。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>オプションはデーモンの作成のみに適用されます。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>サービス</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>現行値</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>編集可能</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>有効化</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>無効化</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>再接続していますので、しばらくお待ちください...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>パブリックアドレス</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>セッションの開始</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>インなし</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>以前にアウトとしてマークされたOSDは、それらの始動時にインとしてマークされることはありません</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>アウトなし</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSDは、設定済みの間隔が経過した後に自動的にアウトとしてマークされます</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>アップなし</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSDを始動することは許可されていません</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>ダウンなし</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>OSDの障害レポートは無視されているため、OSDはモニターによってダウンとしてマークされません</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>一時停止</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>読み取りと書き込みを一時停止します</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>スクラブなし</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>スクラブ処理は無効化されています</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>ディープスクラブなし</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>ディープスクラブ処理は無効化されています</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>バックフィルなし</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>配置グループのバックフィルは中断されています</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>回復なし</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>配置グループの回復は中断されています</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>ビット単位のソート</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>ビット単位のソートを使用する</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>消去されたスナップディレクトリ</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDによってスナップセットが変換されました</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>回復の削除</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>ピアリングの代わりに回復時に削除が実行されました</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>配置グループログのハード制限</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>配置グループログ長のハード制限を適用します</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>OSDフラグを更新しました</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>アウト</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>イン</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>ダウン</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>マーク</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>喪失したOSD</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>喪失としてマーク済み</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>消去</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>消去済み</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>破棄</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>破棄済み</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>削除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>配置グループ数</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>読み取りバイト数</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>書き込みバイト数</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>読み取り操作数</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>書き込み操作数</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大バックフィル数</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>回復最大アクティブ</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>回復最大単一始動</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>回復スリープ</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>ジョブ</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>重大度</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>始動済み</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>使用済み</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>使用可能</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>クリーン</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>動作中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警告</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>不明</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>アップ</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>ファイルシステムがありません</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>アクティブ</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>スタンバイ</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>アクティブデーモン</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>定数</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganeshaサービスが設定されていません。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>トランスポート</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFSユーザ</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFSファイルシステム</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(グローバル設定から継承)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>グローバル設定から継承されました</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 実行されるユーザIDスカッシュ操作を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>使用可能なデーモンがありません。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>キャッシュモード</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>退去までの最小経過時間</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>消去までの最小経過時間</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>ターゲットの最大バイト数</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>ターゲットの最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>アプリケーションは追加されていません</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>アプリケーション数の上限に達しました</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>1つのプールは最大で4つのアプリケーション定義しか保有できません。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>使用可能な文字「_a-zA-Z0-9」</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>最大長は128文字です</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>アプリケーションのフィルタリングまたは追加</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>アプリケーションの追加</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>イレイジャコードプロファイル</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>レプリカサイズ</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>最後の変更</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>イレイジャコード化済みプロファイル</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Crushルールセット</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>バケット</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>バケット数</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>ユーザ数</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>範囲</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>読み取り</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>作成</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>システム役割</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>ユーザの更新</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>続行</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>このユーザの役割が変更されたため、このユーザは自動的にログアウトされました。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>各オブジェクトは複数のデータチャンクパートに分割されており、それぞれのパートは異なるOSDに保管されています。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>各オブジェクトのコーディングチャンクを計算して、これらのチャンクを別々のOSDに保管します。\nコーディングチャンクの数は、データを失うことなくダウン状態になることができるOSDの数でもあります。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>jerasureプラグインは最も汎用的で柔軟性の高いプラグインです。\nこのプラグインは、Cephイレイジャコード化済みプール用のデフォルトでもあります。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>さらに柔軟性の高い技法はreed_sol_vanです。kとmを\n設定するだけで十分です。\ncauchy_good技法はより高速となり得ますが、パケットサイズを慎重に選択する必要があります。\nreed_sol_r6_op、liberation、blaum_roth、liber8tionはすべて、\nm=2を使用した設定のみが可能という意味でRAID6と同等です。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>エンコードはバイトサイズのパケット群に対して同時に実行されます。\n適切なパケットサイズを選択することは困難です。\njerasureのドキュメントにはこのトピックに関する詳細な情報が記載されています。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>jerasureプラグインを使用すると、イレイジャコード化済みオブジェクトが複数のOSDに保管されている場合は、\n1つのOSDの喪失から回復するには、他のすべてのOSDからの読み取りが必要になります。\nたとえば、k=8およびm=4を使用してjerasureが設定されている場合は、1つのOSDが失われた場合、\n修復のためには他の11個のOSDからの読み取りが必要になります。\n\nlrcイレイジャコードプラグインは、これより少ないOSDを使用した回復を可能にするために、\nローカルパリティチャンクを作成します。たとえば、lrcがk=8、m=4、およびl=4を使用して設定されている場合は、\nlrcは、4つのOSDごとに1つの追加パリティチャンクを作成します。1つのOSDが失われた場合は、\n11個の代わりに4つのOSDのみを使用してそのOSDを回復できます。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>コーディングチャンクとデータチャンクをサイズ地域の複数セットにグループ分けします。\nたとえば、k=4およびm=2の場合に、[地域]=3の場合は、3つのチャンクからなるグループが2つ作成されます。\n各セットは、別のセットからチャンクを読み取ることなく回復できます。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>1によって定義されたチャンクの各セットが保管されるCrushバケットのタイプ。\nたとえば、このバケットタイプがラックに設定されている場合は、1のチャンクの各グループは異なるラックに配置されます。\nこのバケットタイプを使用して、「ラックの選択」ステップなどのCRUSHルールステップが作成されます。\nこのバケットタイプが設定されていない場合は、このようなグループ分けは行われません。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isaプラグインはISAライブラリをカプセル化します。このプラグインはIntelプロセッサ上のみで動作します。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISAプラグインは2つのリードソロモン形式で提供されています。reed_sol_vanが設定されている場合は、Vandermondeであり、cauchyが設定されている場合は、Cauchyです。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shecプラグインは複数のSHECライブラリをカプセル化します。\nこのプラグインを使用すると、cephはリードソロモンコードより効率的にデータを回復できます。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>それぞれが各データチャンクを各自の計算範囲内に含んでいるパリティチャンクの数。\nこの数は、耐久性推定子として使用されます。\nたとえば、c=2の場合は、データを失うことなく2つのOSDがダウン状態になることができます。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSHルールの最初のステップ(「デフォルトの使用」ステップなど)用に\n使用されるCrushバケットの名前。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>同じ障害ドメインの単一バケット内に2つのチャンクが配置されることを防止します。\nたとえば、障害ドメインがホストである場合は、2つのチャンクが同じホストに保管されることはありません。\nこれを使用して、「リーフホストの選択」ステップなどのCRUSHルールステップが作成されます。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>CRUSHマップ内でCrushデバイスクラス名を使用して、配置先を特定クラス(ssdやhddなど)のデバイスのみに制限します。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>イレイジャコードプラグインの読み込み元となるディレクトリ名を設定します。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>すべての操作を許可します</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>サーバに変更を加えない操作のみを許可します</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>読み取り/書き込み操作を許可しませんが、他のすべての操作を許可します</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>読み取り/書き込み操作、およびファイル属性やディレクトリ内容を変更するどの操作も許可しません</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>アクセスを一切許可しません</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 優先度を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>情報</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>直前の5分間</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>直前の15分間</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>直前の30分間</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>直前の1時間(デフォルト)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>直前の3時間</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>直前の6時間</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>直前の12時間</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>直前の24時間</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨日</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>本日</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>本日の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>一昨日</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>過去2日間</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>先週の同じ曜日</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>前週</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>今週</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>今週の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>過去7日間</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>前月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>今月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>今月の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>過去30日間</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>過去90日間</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>過去6カ月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>過去1年間</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>前年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>過去2年間</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>過去5年間</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>アイテムが選択されていません。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>アイテムを選択解除して再選択してください</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>選択の上限に達しました</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>タグのフィルタリング</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>バッジの追加</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>使用可能なアイテムはありません。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>コピー</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>ディープスクラブ</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>破棄</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>フラット化</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>ダウンとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>インとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>喪失としてマーク</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>アウトとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保護</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>名前の変更</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>復元</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>ごみ箱に移動する</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>保護解除</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>削除済み</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>複製済み</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>コピー済み</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>フラット化済み</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>消去済み</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>復元済み</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>ロールバック済み</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>はい</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>いいえ</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>サービス品質</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS制限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>希望する秒あたり入出力バイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS制限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>希望する秒あたり入出力操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>読み取りBPS制限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>希望する秒あたり読み取りバイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>読み取りIOPS制限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>希望する秒あたり読み取り操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>書き込みBPS制限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>希望する秒あたり書き込みバイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>書き込みIOPS制限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>希望する秒あたり書き込み操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPSバースト</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>希望する入出力バイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>希望する入出力操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>読み取りBPSバースト</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>希望する読み取りバイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>読み取りIOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>希望する読み取り操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>書き込みBPSバースト</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>希望する書き込みバイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>書き込みIOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>希望する書き込み操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>実行中</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>実行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>実行済み</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>不明なタスク</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>作成中</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>作成</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>更新中</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>削除中</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>複製中</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>コピー中</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>コピー</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>フラット化中</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>フラット化</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>ロールバック中</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>ロールバック</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>移動中</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>移動</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>移動済み</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>イメージが見つかりませんでした。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>復元中</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>復元</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>消去中</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>消去</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>すべてのプール</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>ピアを含んでいるためミラーリングを無効化できません。</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},bOMt:function(t,e,n){!function(t){"use strict";t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},bOdf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("5+tZ");function r(t,e){return Object(a.a)(t,e,1)}},bQrF:function(t,e,n){var a=n("ZPW6"),r=n("JEWA"),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var s=t[e];i.call(t,e)&&r(s,n)&&(void 0!==n||e in t)||a(t,e,n)}},bWFh:function(t,e,n){"use strict";var a=n("I+eb"),r=n("2oRo"),i=n("lMq5"),s=n("busE"),o=n("8YOa"),u=n("ImZN"),l=n("GarU"),d=n("hh1v"),c=n("0Dky"),f=n("HH4o"),h=n("1E5z"),g=n("cVYH");t.exports=function(t,e,n){var p=-1!==t.indexOf("Map"),b=-1!==t.indexOf("Weak"),m=p?"set":"add",y=r[t],v=y&&y.prototype,x=y,_={},T=function(t){var e=v[t];s(v,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(b&&!d(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return b&&!d(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(b&&!d(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(i(t,"function"!=typeof y||!(b||v.forEach&&!c((function(){(new y).entries().next()})))))x=n.getConstructor(e,t,p,m),o.REQUIRED=!0;else if(i(t,!0)){var O=new x,w=O[m](b?{}:-0,1)!=O,S=c((function(){O.has(1)})),I=f((function(t){new y(t)})),N=!b&&c((function(){for(var t=new y,e=5;e--;)t[m](e,e);return!t.has(-0)}));I||((x=e((function(e,n){l(e,x,t);var a=g(new y,e,x);return null!=n&&u(n,a[m],a,p),a}))).prototype=v,v.constructor=x),(S||N)&&(T("delete"),T("has"),p&&T("get")),(N||w)&&T(m),b&&v.clear&&delete v.clear}return _[t]=x,a({global:!0,forced:x!=y},_),h(x,t),b||n.setStrong(x,t,p),x}},bWnS:function(t,e,n){var a=n("qN6l");t.exports=function(){this.__data__=a?a(null):{},this.size=0}},bX23:function(t,e){t.exports=function(t,e,n,a){for(var r=t.length,i=n+(a?1:-1);a?i--:++i<r;)if(e(t[i],i,t))return i;return-1}},bXm7:function(t,e,n){!function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},bYM6:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n("wd/R"))},bdl3:function(t,e,n){var a=n("ktBm");t.exports=function(t){return a(this.__data__,t)>-1}},bpih:function(t,e,n){!function(t){"use strict";t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},busE:function(t,e,n){var a=n("2oRo"),r=n("kRJp"),i=n("UTVS"),s=n("zk60"),o=n("iSVu"),u=n("afO8"),l=u.get,d=u.enforce,c=String(String).split("String");(t.exports=function(t,e,n,o){var u=!!o&&!!o.unsafe,l=!!o&&!!o.enumerable,f=!!o&&!!o.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||r(n,"name",e),d(n).source=c.join("string"==typeof e?e:"")),t!==a?(u?!f&&t[e]&&(l=!0):delete t[e],l?t[e]=n:r(t,e,n)):l?t[e]=n:s(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||o(this)}))},bxKX:function(t,e,n){!function(t){"use strict";t.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},bxSN:function(t,e,n){var a=n("mrSG").__decorate;Object.defineProperty(e,"__esModule",{value:!0});var r=n("8Y7J"),i=n("moLw");e.ClickOutsideModule=function(){return a([r.NgModule({declarations:[i.ClickOutsideDirective],exports:[i.ClickOutsideDirective]})],(function(){}))}()},c2HN:function(t,e,n){"use strict";function a(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}n.d(e,"a",(function(){return a}))},cRL0:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},cRix:function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},cUpR:function(t,e,n){"use strict";n.d(e,"p",(function(){return _})),n.d(e,"a",(function(){return dt})),n.d(e,"h",(function(){return lt})),n.d(e,"c",(function(){return T})),n.d(e,"d",(function(){return O})),n.d(e,"e",(function(){return W})),n.d(e,"f",(function(){return K})),n.d(e,"g",(function(){return $})),n.d(e,"b",(function(){return tt})),n.d(e,"q",(function(){return s})),n.d(e,"j",(function(){return k})),n.d(e,"i",(function(){return H})),n.d(e,"m",(function(){return J})),n.d(e,"n",(function(){return X})),n.d(e,"l",(function(){return I})),n.d(e,"o",(function(){return S})),n.d(e,"k",(function(){return et}));var a=n("SVse"),r=n("8Y7J");let i=null;function s(){return i}const o={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},u={"\b":"Backspace","\t":"Tab","\7f":"Delete","\e":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},l={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\90":"NumLock"},d=(()=>{if(r["ɵglobal"].Node)return r["ɵglobal"].Node.prototype.contains||function(t){return!!(16&this.compareDocumentPosition(t))}})();class c extends class extends class{constructor(){this.resourceLoaderType=null}get attrToPropMap(){return this._attrToPropMap}set attrToPropMap(t){this._attrToPropMap=t}}{constructor(){super(),this._animationPrefix=null,this._transitionEnd=null;try{const t=this.createElement("div",document);if(null!=this.getStyle(t,"animationName"))this._animationPrefix="";else{const e=["Webkit","Moz","O","ms"];for(let n=0;n<e.length;n++)if(null!=this.getStyle(t,e[n]+"AnimationName")){this._animationPrefix="-"+e[n].toLowerCase()+"-";break}}const e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(e).forEach(n=>{null!=this.getStyle(t,n)&&(this._transitionEnd=e[n])})}catch(t){this._animationPrefix=null,this._transitionEnd=null}}getDistributedNodes(t){return t.getDistributedNodes()}resolveAndSetHref(t,e,n){t.href=null==n?e:e+"/../"+n}supportsDOMEvents(){return!0}supportsNativeShadowDOM(){return"function"==typeof document.body.createShadowRoot}getAnimationPrefix(){return this._animationPrefix?this._animationPrefix:""}getTransitionEnd(){return this._transitionEnd?this._transitionEnd:""}supportsAnimation(){return null!=this._animationPrefix&&null!=this._transitionEnd}}{parse(t){throw new Error("parse not implemented")}static makeCurrent(){var t;t=new c,i||(i=t)}hasProperty(t,e){return e in t}setProperty(t,e,n){t[e]=n}getProperty(t,e){return t[e]}invoke(t,e,n){t[e](...n)}logError(t){window.console&&(console.error?console.error(t):console.log(t))}log(t){window.console&&window.console.log&&window.console.log(t)}logGroup(t){window.console&&window.console.group&&window.console.group(t)}logGroupEnd(){window.console&&window.console.groupEnd&&window.console.groupEnd()}get attrToPropMap(){return o}contains(t,e){return d.call(t,e)}querySelector(t,e){return t.querySelector(e)}querySelectorAll(t,e){return t.querySelectorAll(e)}on(t,e,n){t.addEventListener(e,n,!1)}onAndCancel(t,e,n){return t.addEventListener(e,n,!1),()=>{t.removeEventListener(e,n,!1)}}dispatchEvent(t,e){t.dispatchEvent(e)}createMouseEvent(t){const e=this.getDefaultDocument().createEvent("MouseEvent");return e.initEvent(t,!0,!0),e}createEvent(t){const e=this.getDefaultDocument().createEvent("Event");return e.initEvent(t,!0,!0),e}preventDefault(t){t.preventDefault(),t.returnValue=!1}isPrevented(t){return t.defaultPrevented||null!=t.returnValue&&!t.returnValue}getInnerHTML(t){return t.innerHTML}getTemplateContent(t){return"content"in t&&this.isTemplateElement(t)?t.content:null}getOuterHTML(t){return t.outerHTML}nodeName(t){return t.nodeName}nodeValue(t){return t.nodeValue}type(t){return t.type}content(t){return this.hasProperty(t,"content")?t.content:t}firstChild(t){return t.firstChild}nextSibling(t){return t.nextSibling}parentElement(t){return t.parentNode}childNodes(t){return t.childNodes}childNodesAsList(t){const e=t.childNodes,n=new Array(e.length);for(let a=0;a<e.length;a++)n[a]=e[a];return n}clearNodes(t){for(;t.firstChild;)t.removeChild(t.firstChild)}appendChild(t,e){t.appendChild(e)}removeChild(t,e){t.removeChild(e)}replaceChild(t,e,n){t.replaceChild(e,n)}remove(t){return t.parentNode&&t.parentNode.removeChild(t),t}insertBefore(t,e,n){t.insertBefore(n,e)}insertAllBefore(t,e,n){n.forEach(n=>t.insertBefore(n,e))}insertAfter(t,e,n){t.insertBefore(n,e.nextSibling)}setInnerHTML(t,e){t.innerHTML=e}getText(t){return t.textContent}setText(t,e){t.textContent=e}getValue(t){return t.value}setValue(t,e){t.value=e}getChecked(t){return t.checked}setChecked(t,e){t.checked=e}createComment(t){return this.getDefaultDocument().createComment(t)}createTemplate(t){const e=this.getDefaultDocument().createElement("template");return e.innerHTML=t,e}createElement(t,e){return(e=e||this.getDefaultDocument()).createElement(t)}createElementNS(t,e,n){return(n=n||this.getDefaultDocument()).createElementNS(t,e)}createTextNode(t,e){return(e=e||this.getDefaultDocument()).createTextNode(t)}createScriptTag(t,e,n){const a=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return a.setAttribute(t,e),a}createStyleElement(t,e){const n=(e=e||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(t,e)),n}createShadowRoot(t){return t.createShadowRoot()}getShadowRoot(t){return t.shadowRoot}getHost(t){return t.host}clone(t){return t.cloneNode(!0)}getElementsByClassName(t,e){return t.getElementsByClassName(e)}getElementsByTagName(t,e){return t.getElementsByTagName(e)}classList(t){return Array.prototype.slice.call(t.classList,0)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}hasClass(t,e){return t.classList.contains(e)}setStyle(t,e,n){t.style[e]=n}removeStyle(t,e){t.style[e]=""}getStyle(t,e){return t.style[e]}hasStyle(t,e,n){const a=this.getStyle(t,e)||"";return n?a==n:a.length>0}tagName(t){return t.tagName}attributeMap(t){const e=new Map,n=t.attributes;for(let a=0;a<n.length;a++){const t=n.item(a);e.set(t.name,t.value)}return e}hasAttribute(t,e){return t.hasAttribute(e)}hasAttributeNS(t,e,n){return t.hasAttributeNS(e,n)}getAttribute(t,e){return t.getAttribute(e)}getAttributeNS(t,e,n){return t.getAttributeNS(e,n)}setAttribute(t,e,n){t.setAttribute(e,n)}setAttributeNS(t,e,n,a){t.setAttributeNS(e,n,a)}removeAttribute(t,e){t.removeAttribute(e)}removeAttributeNS(t,e,n){t.removeAttributeNS(e,n)}templateAwareRoot(t){return this.isTemplateElement(t)?this.content(t):t}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}getBoundingClientRect(t){try{return t.getBoundingClientRect()}catch(e){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}}getTitle(t){return t.title}setTitle(t,e){t.title=e||""}elementMatches(t,e){return!!this.isElementNode(t)&&(t.matches&&t.matches(e)||t.msMatchesSelector&&t.msMatchesSelector(e)||t.webkitMatchesSelector&&t.webkitMatchesSelector(e))}isTemplateElement(t){return this.isElementNode(t)&&"TEMPLATE"===t.nodeName}isTextNode(t){return t.nodeType===Node.TEXT_NODE}isCommentNode(t){return t.nodeType===Node.COMMENT_NODE}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}hasShadowRoot(t){return null!=t.shadowRoot&&t instanceof HTMLElement}isShadowRoot(t){return t instanceof DocumentFragment}importIntoDoc(t){return document.importNode(this.templateAwareRoot(t),!0)}adoptNode(t){return document.adoptNode(t)}getHref(t){return t.getAttribute("href")}getEventKey(t){let e=t.key;if(null==e){if(e=t.keyIdentifier,null==e)return"Unidentified";e.startsWith("U+")&&(e=String.fromCharCode(parseInt(e.substring(2),16)),3===t.location&&l.hasOwnProperty(e)&&(e=l[e]))}return u[e]||e}getGlobalEventTarget(t,e){return"window"===e?window:"document"===e?t:"body"===e?t.body:null}getHistory(){return window.history}getLocation(){return window.location}getBaseHref(t){const e=h||(h=document.querySelector("base"),h)?h.getAttribute("href"):null;return null==e?null:(n=e,f||(f=document.createElement("a")),f.setAttribute("href",n),"/"===f.pathname.charAt(0)?f.pathname:"/"+f.pathname);var n}resetBaseElement(){h=null}getUserAgent(){return window.navigator.userAgent}setData(t,e,n){this.setAttribute(t,"data-"+e,n)}getData(t,e){return this.getAttribute(t,"data-"+e)}getComputedStyle(t){return getComputedStyle(t)}supportsWebAnimation(){return"function"==typeof Element.prototype.animate}performanceNow(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()}supportsCookies(){return!0}getCookie(t){return Object(a["ɵparseCookieValue"])(document.cookie,t)}setCookie(t,e){document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)}}let f,h=null;function g(){return!!window.history.pushState}const p=new r.InjectionToken("TRANSITION_ID"),b=[{provide:r.APP_INITIALIZER,useFactory:function(t,e,n){return()=>{n.get(r.ApplicationInitStatus).donePromise.then(()=>{const n=s();Array.prototype.slice.apply(n.querySelectorAll(e,"style[ng-transition]")).filter(e=>n.getAttribute(e,"ng-transition")===t).forEach(t=>n.remove(t))})}},deps:[p,a.DOCUMENT,r.Injector],multi:!0}];class m{static init(){Object(r.setTestabilityGetter)(new m)}addToWindow(t){r["ɵglobal"].getAngularTestability=(e,n=!0)=>{const a=t.findTestabilityInTree(e,n);if(null==a)throw new Error("Could not find testability for element.");return a},r["ɵglobal"].getAllAngularTestabilities=()=>t.getAllTestabilities(),r["ɵglobal"].getAllAngularRootElements=()=>t.getAllRootElements(),r["ɵglobal"].frameworkStabilizers||(r["ɵglobal"].frameworkStabilizers=[]),r["ɵglobal"].frameworkStabilizers.push(t=>{const e=r["ɵglobal"].getAllAngularTestabilities();let n=e.length,a=!1;const i=function(e){a=a||e,n--,0==n&&t(a)};e.forEach((function(t){t.whenStable(i)}))})}findTestabilityInTree(t,e,n){if(null==e)return null;const a=t.getTestability(e);return null!=a?a:n?s().isShadowRoot(e)?this.findTestabilityInTree(t,s().getHost(e),!0):this.findTestabilityInTree(t,s().parentElement(e),!0):null}}function y(t,e){"undefined"!=typeof COMPILED&&COMPILED||((r["ɵglobal"].ng=r["ɵglobal"].ng||{})[t]=e)}const v=(()=>({ApplicationRef:r.ApplicationRef,NgZone:r.NgZone}))();function x(t){return Object(r.getDebugNode)(t)}function _(t){return y("probe",x),y("coreTokens",Object.assign({},v,(t||[]).reduce((t,e)=>(t[e.name]=e.token,t),{}))),()=>x}const T=new r.InjectionToken("EventManagerPlugins");class O{constructor(t,e){this._zone=e,this._eventNameToPlugin=new Map,t.forEach(t=>t.manager=this),this._plugins=t.slice().reverse()}addEventListener(t,e,n){return this._findPluginFor(e).addEventListener(t,e,n)}addGlobalEventListener(t,e,n){return this._findPluginFor(e).addGlobalEventListener(t,e,n)}getZone(){return this._zone}_findPluginFor(t){const e=this._eventNameToPlugin.get(t);if(e)return e;const n=this._plugins;for(let a=0;a<n.length;a++){const e=n[a];if(e.supports(t))return this._eventNameToPlugin.set(t,e),e}throw new Error("No event manager plugin found for event "+t)}}class w{constructor(t){this._doc=t}addGlobalEventListener(t,e,n){const a=s().getGlobalEventTarget(this._doc,t);if(!a)throw new Error(`Unsupported event target ${a} for event ${e}`);return this.addEventListener(a,e,n)}}class S{constructor(){this._stylesSet=new Set}addStyles(t){const e=new Set;t.forEach(t=>{this._stylesSet.has(t)||(this._stylesSet.add(t),e.add(t))}),this.onStylesAdded(e)}onStylesAdded(t){}getAllStyles(){return Array.from(this._stylesSet)}}class I extends S{constructor(t){super(),this._doc=t,this._hostNodes=new Set,this._styleNodes=new Set,this._hostNodes.add(t.head)}_addStylesToHost(t,e){t.forEach(t=>{const n=this._doc.createElement("style");n.textContent=t,this._styleNodes.add(e.appendChild(n))})}addHost(t){this._addStylesToHost(this._stylesSet,t),this._hostNodes.add(t)}removeHost(t){this._hostNodes.delete(t)}onStylesAdded(t){this._hostNodes.forEach(e=>this._addStylesToHost(t,e))}ngOnDestroy(){this._styleNodes.forEach(t=>s().remove(t))}}const N={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},C=/%COMP%/g;function R(t,e,n){for(let a=0;a<e.length;a++){let r=e[a];Array.isArray(r)?R(t,r,n):(r=r.replace(C,t),n.push(r))}return n}function A(t){return e=>{!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}class k{constructor(t,e,n){this.eventManager=t,this.sharedStylesHost=e,this.appId=n,this.rendererByCompId=new Map,this.defaultRenderer=new E(t)}createRenderer(t,e){if(!t||!e)return this.defaultRenderer;switch(e.encapsulation){case r.ViewEncapsulation.Emulated:{let n=this.rendererByCompId.get(e.id);return n||(n=new P(this.eventManager,this.sharedStylesHost,e,this.appId),this.rendererByCompId.set(e.id,n)),n.applyToHost(t),n}case r.ViewEncapsulation.Native:case r.ViewEncapsulation.ShadowDom:return new M(this.eventManager,this.sharedStylesHost,t,e);default:if(!this.rendererByCompId.has(e.id)){const t=R(e.id,e.styles,[]);this.sharedStylesHost.addStyles(t),this.rendererByCompId.set(e.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}class E{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,e){return e?document.createElementNS(N[e]||e,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,e){t.appendChild(e)}insertBefore(t,e,n){t&&t.insertBefore(e,n)}removeChild(t,e){t&&t.removeChild(e)}selectRootElement(t,e){let n="string"==typeof t?document.querySelector(t):t;if(!n)throw new Error(`The selector "${t}" did not match any elements`);return e||(n.textContent=""),n}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,e,n,a){if(a){e=a+":"+e;const r=N[a];r?t.setAttributeNS(r,e,n):t.setAttribute(e,n)}else t.setAttribute(e,n)}removeAttribute(t,e,n){if(n){const a=N[n];a?t.removeAttributeNS(a,e):t.removeAttribute(`${n}:${e}`)}else t.removeAttribute(e)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}setStyle(t,e,n,a){a&r.RendererStyleFlags2.DashCase?t.style.setProperty(e,n,a&r.RendererStyleFlags2.Important?"important":""):t.style[e]=n}removeStyle(t,e,n){n&r.RendererStyleFlags2.DashCase?t.style.removeProperty(e):t.style[e]=""}setProperty(t,e,n){D(e,"property"),t[e]=n}setValue(t,e){t.nodeValue=e}listen(t,e,n){return D(e,"listener"),"string"==typeof t?this.eventManager.addGlobalEventListener(t,e,A(n)):this.eventManager.addEventListener(t,e,A(n))}}const L=(()=>"@".charCodeAt(0))();function D(t,e){if(t.charCodeAt(0)===L)throw new Error(`Found the synthetic ${e} ${t}. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.`)}class P extends E{constructor(t,e,n,a){super(t),this.component=n;const r=R(a+"-"+n.id,n.styles,[]);e.addStyles(r),this.contentAttr="_ngcontent-%COMP%".replace(C,a+"-"+n.id),this.hostAttr=function(t){return"_nghost-%COMP%".replace(C,t)}(a+"-"+n.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,e){const n=super.createElement(t,e);return super.setAttribute(n,this.contentAttr,""),n}}class M extends E{constructor(t,e,n,a){super(t),this.sharedStylesHost=e,this.hostEl=n,this.component=a,this.shadowRoot=a.encapsulation===r.ViewEncapsulation.ShadowDom?n.attachShadow({mode:"open"}):n.createShadowRoot(),this.sharedStylesHost.addHost(this.shadowRoot);const i=R(a.id,a.styles,[]);for(let r=0;r<i.length;r++){const t=document.createElement("style");t.textContent=i[r],this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}appendChild(t,e){return super.appendChild(this.nodeOrShadowRoot(t),e)}insertBefore(t,e,n){return super.insertBefore(this.nodeOrShadowRoot(t),e,n)}removeChild(t,e){return super.removeChild(this.nodeOrShadowRoot(t),e)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}}const q=(()=>"undefined"!=typeof Zone&&Zone.__symbol__||function(t){return"__zone_symbol__"+t})(),j=q("addEventListener"),F=q("removeEventListener"),G={},V="__zone_symbol__propagationStopped",z=(()=>{const t="undefined"!=typeof Zone&&Zone[q("BLACK_LISTED_EVENTS")];if(t){const e={};return t.forEach(t=>{e[t]=t}),e}})(),B=function(t){return!!z&&z.hasOwnProperty(t)},Y=function(t){const e=G[t.type];if(!e)return;const n=this[e];if(!n)return;const a=[t];if(1===n.length){const t=n[0];return t.zone!==Zone.current?t.zone.run(t.handler,this,a):t.handler.apply(this,a)}{const e=n.slice();for(let n=0;n<e.length&&!0!==t[V];n++){const t=e[n];t.zone!==Zone.current?t.zone.run(t.handler,this,a):t.handler.apply(this,a)}}};class H extends w{constructor(t,e,n){super(t),this.ngZone=e,n&&Object(a.isPlatformServer)(n)||this.patchEvent()}patchEvent(){if("undefined"==typeof Event||!Event||!Event.prototype)return;if(Event.prototype.__zone_symbol__stopImmediatePropagation)return;const t=Event.prototype.__zone_symbol__stopImmediatePropagation=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[V]=!0),t&&t.apply(this,arguments)}}supports(t){return!0}addEventListener(t,e,n){let a=n;if(!t[j]||r.NgZone.isInAngularZone()&&!B(e))t.addEventListener(e,a,!1);else{let n=G[e];n||(n=G[e]=q("ANGULAR"+e+"FALSE"));let r=t[n];const i=r&&r.length>0;r||(r=t[n]=[]);const s=B(e)?Zone.root:Zone.current;if(0===r.length)r.push({zone:s,handler:a});else{let t=!1;for(let e=0;e<r.length;e++)if(r[e].handler===a){t=!0;break}t||r.push({zone:s,handler:a})}i||t[j](e,Y,!1)}return()=>this.removeEventListener(t,e,a)}removeEventListener(t,e,n){let a=t[F];if(!a)return t.removeEventListener.apply(t,[e,n,!1]);let r=G[e],i=r&&t[r];if(!i)return t.removeEventListener.apply(t,[e,n,!1]);let s=!1;for(let o=0;o<i.length;o++)if(i[o].handler===n){s=!0,i.splice(o,1);break}s?0===i.length&&a.apply(t,[e,Y,!1]):t.removeEventListener.apply(t,[e,n,!1])}}const U={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},W=new r.InjectionToken("HammerGestureConfig"),K=new r.InjectionToken("HammerLoader");class ${constructor(){this.events=[],this.overrides={}}buildHammer(t){const e=new Hammer(t,this.options);e.get("pinch").set({enable:!0}),e.get("rotate").set({enable:!0});for(const n in this.overrides)e.get(n).set(this.overrides[n]);return e}}class J extends w{constructor(t,e,n,a){super(t),this._config=e,this.console=n,this.loader=a}supports(t){return!(!U.hasOwnProperty(t.toLowerCase())&&!this.isCustomEvent(t)||!window.Hammer&&!this.loader&&(this.console.warn(`The "${t}" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.`),1))}addEventListener(t,e,n){const a=this.manager.getZone();if(e=e.toLowerCase(),!window.Hammer&&this.loader){let a=!1,r=()=>{a=!0};return this.loader().then(()=>{if(!window.Hammer)return this.console.warn("The custom HAMMER_LOADER completed, but Hammer.JS is not present."),void(r=()=>{});a||(r=this.addEventListener(t,e,n))}).catch(()=>{this.console.warn(`The "${e}" event cannot be bound because the custom Hammer.JS loader failed.`),r=()=>{}}),()=>{r()}}return a.runOutsideAngular(()=>{const r=this._config.buildHammer(t),i=function(t){a.runGuarded((function(){n(t)}))};return r.on(e,i),()=>{r.off(e,i),"function"==typeof r.destroy&&r.destroy()}})}isCustomEvent(t){return this._config.events.indexOf(t)>-1}}const Z=["alt","control","meta","shift"],Q={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey};class X extends w{constructor(t){super(t)}supports(t){return null!=X.parseEventName(t)}addEventListener(t,e,n){const a=X.parseEventName(e),r=X.eventCallback(a.fullKey,n,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>s().onAndCancel(t,a.domEventName,r))}static parseEventName(t){const e=t.toLowerCase().split("."),n=e.shift();if(0===e.length||"keydown"!==n&&"keyup"!==n)return null;const a=X._normalizeKey(e.pop());let r="";if(Z.forEach(t=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),r+=t+".")}),r+=a,0!=e.length||0===a.length)return null;const i={};return i.domEventName=n,i.fullKey=r,i}static getEventFullKey(t){let e="",n=s().getEventKey(t);return n=n.toLowerCase()," "===n?n="space":"."===n&&(n="dot"),Z.forEach(a=>{a!=n&&(0,Q[a])(t)&&(e+=a+".")}),e+=n,e}static eventCallback(t,e,n){return a=>{X.getEventFullKey(a)===t&&n.runGuarded(()=>e(a))}}static _normalizeKey(t){switch(t){case"esc":return"escape";default:return t}}}class tt{}class et extends tt{constructor(t){super(),this._doc=t}sanitize(t,e){if(null==e)return null;switch(t){case r.SecurityContext.NONE:return e;case r.SecurityContext.HTML:return e instanceof at?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"HTML"),Object(r["ɵ_sanitizeHtml"])(this._doc,String(e)));case r.SecurityContext.STYLE:return e instanceof rt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"Style"),Object(r["ɵ_sanitizeStyle"])(e));case r.SecurityContext.SCRIPT:if(e instanceof it)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"Script"),new Error("unsafe value used in a script context");case r.SecurityContext.URL:return e instanceof ot||e instanceof st?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"URL"),Object(r["ɵ_sanitizeUrl"])(String(e)));case r.SecurityContext.RESOURCE_URL:if(e instanceof ot)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error(`Unexpected SecurityContext ${t} (see http://g.co/ng/security#xss)`)}}checkNotSafeValue(t,e){if(t instanceof nt)throw new Error(`Required a safe ${e}, got a ${t.getTypeName()} (see http://g.co/ng/security#xss)`)}bypassSecurityTrustHtml(t){return new at(t)}bypassSecurityTrustStyle(t){return new rt(t)}bypassSecurityTrustScript(t){return new it(t)}bypassSecurityTrustUrl(t){return new st(t)}bypassSecurityTrustResourceUrl(t){return new ot(t)}}class nt{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"}}class at extends nt{getTypeName(){return"HTML"}}class rt extends nt{getTypeName(){return"Style"}}class it extends nt{getTypeName(){return"Script"}}class st extends nt{getTypeName(){return"URL"}}class ot extends nt{getTypeName(){return"ResourceURL"}}const ut=[{provide:r.PLATFORM_ID,useValue:a["ɵPLATFORM_BROWSER_ID"]},{provide:r.PLATFORM_INITIALIZER,useValue:function(){c.makeCurrent(),m.init()},multi:!0},{provide:a.PlatformLocation,useClass:class extends a.PlatformLocation{constructor(t){super(),this._doc=t,this._init()}_init(){this.location=s().getLocation(),this._history=s().getHistory()}getBaseHrefFromDOM(){return s().getBaseHref(this._doc)}onPopState(t){s().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",t,!1)}onHashChange(t){s().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",t,!1)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(t){this.location.pathname=t}pushState(t,e,n){g()?this._history.pushState(t,e,n):this.location.hash=n}replaceState(t,e,n){g()?this._history.replaceState(t,e,n):this.location.hash=n}forward(){this._history.forward()}back(){this._history.back()}getState(){return this._history.state}},deps:[a.DOCUMENT]},{provide:a.DOCUMENT,useFactory:function(){return document},deps:[]}],lt=Object(r.createPlatformFactory)(r.platformCore,"browser",ut);class dt{constructor(t){if(t)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(t){return{ngModule:dt,providers:[{provide:r.APP_ID,useValue:t.appId},{provide:p,useExisting:r.APP_ID},b]}}}"undefined"!=typeof window&&window},cVYH:function(t,e,n){var a=n("hh1v"),r=n("0rvr");t.exports=function(t,e,n){var i,s;return r&&"function"==typeof(i=e.constructor)&&i!==n&&a(s=i.prototype)&&s!==n.prototype&&r(t,s),t}},cjaf:function(t,e){t.exports=function(t){return this.__data__.get(t)}},cp0P:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("HDdC"),r=n("DH7j"),i=n("lJxs"),s=n("XoHu"),o=n("Cfvw");function u(...t){if(1===t.length){const e=t[0];if(Object(r.a)(e))return l(e,null);if(Object(s.a)(e)&&Object.getPrototypeOf(e)===Object.prototype){const t=Object.keys(e);return l(t.map(t=>e[t]),t)}}if("function"==typeof t[t.length-1]){const e=t.pop();return l(t=1===t.length&&Object(r.a)(t[0])?t[0]:t,null).pipe(Object(i.a)(t=>e(...t)))}return l(t,null)}function l(t,e){return new a.a(n=>{const a=t.length;if(0===a)return void n.complete();const r=new Array(a);let i=0,s=0;for(let u=0;u<a;u++){const l=Object(o.a)(t[u]);let d=!1;n.add(l.subscribe({next:t=>{d||(d=!0,s++),r[u]=t},error:t=>n.error(t),complete:()=>{i++,i!==a&&d||(s===a&&n.next(e?e.reduce((t,e,n)=>(t[e]=r[n],t),{}):r),n.complete())}}))}})}},crnd:function(t,e){function n(t){return Promise.resolve().then((function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}))}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id="crnd"},czMo:function(t,e,n){!function(t){"use strict";t.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n("wd/R"))},"d+Og":function(t,e,n){"use strict";var a=n("LvDl");let r=(()=>{class t{constructor(t){if(this.type=t,!this.isValidType())throw new Error("Wrong placement group category type");this.setTypeStates()}isValidType(){return t.VALID_CATEGORIES.includes(this.type)}setTypeStates(){switch(this.type){case t.CATEGORY_CLEAN:this.states=["active","clean"];break;case t.CATEGORY_WORKING:this.states=["activating","backfill_wait","backfilling","creating","deep","degraded","forced_backfill","forced_recovery","peering","peered","recovering","recovery_wait","repair","scrubbing","snaptrim","snaptrim_wait"];break;case t.CATEGORY_WARNING:this.states=["backfill_toofull","backfill_unfound","down","incomplete","inconsistent","recovery_toofull","recovery_unfound","remapped","snaptrim_error","stale","undersized"];break;default:this.states=[]}}}return t.CATEGORY_CLEAN="clean",t.CATEGORY_WORKING="working",t.CATEGORY_WARNING="warning",t.CATEGORY_UNKNOWN="unknown",t.VALID_CATEGORIES=[t.CATEGORY_CLEAN,t.CATEGORY_WORKING,t.CATEGORY_WARNING,t.CATEGORY_UNKNOWN],t})();var i=n("8Y7J"),s=n("kJI8");n.d(e,"a",(function(){return o}));let o=(()=>{class t{constructor(){this.categories=this.createCategories()}getAllTypes(){return r.VALID_CATEGORIES}getTypeByStates(t){const e=this.getPgStatesFromText(t);if(0===e.length)return r.CATEGORY_UNKNOWN;const n=a.zipObject(r.VALID_CATEGORIES,r.VALID_CATEGORIES.map(t=>a.intersection(this.categories[t].states,e).length));if(n[r.CATEGORY_WARNING]>0)return r.CATEGORY_WARNING;const i=n[r.CATEGORY_WORKING];return e.length>n[r.CATEGORY_CLEAN]+i?r.CATEGORY_UNKNOWN:i?r.CATEGORY_WORKING:r.CATEGORY_CLEAN}createCategories(){return a.zipObject(r.VALID_CATEGORIES,r.VALID_CATEGORIES.map(t=>new r(t)))}getPgStatesFromText(t){const e=t.replace(/[^a-z]+/g," ").trim().split(" ");return a.uniq(e)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:s.a}),t})()},dApe:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("2vnA"),i=n("MP8s"),s=n("X+05"),o=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},u=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},l=function(){function t(t){var e=this;this.treeModel=t,this.yBlocks=0,this.x=0,this.viewportHeight=null,this.viewport=null,t.virtualScroll=this,this._dispose=[Object(r.b)((function(){return e.fixScroll()}))]}return Object.defineProperty(t.prototype,"y",{get:function(){return 150*this.yBlocks},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"totalHeight",{get:function(){return this.treeModel.virtualRoot?this.treeModel.virtualRoot.height:0},enumerable:!0,configurable:!0}),t.prototype.fireEvent=function(t){this.treeModel.fireEvent(t)},t.prototype.init=function(){var t=this,e=this.recalcPositions.bind(this);e(),this._dispose=this._dispose.concat([Object(r.e)((function(){return t.treeModel.roots}),e),Object(r.e)((function(){return t.treeModel.expandedNodeIds}),e),Object(r.e)((function(){return t.treeModel.hiddenNodeIds}),e)]),this.treeModel.subscribe(s.a.loadNodeChildren,e)},t.prototype.isEnabled=function(){return this.treeModel.options.useVirtualScroll},t.prototype._setYBlocks=function(t){this.yBlocks=t},t.prototype.recalcPositions=function(){this.treeModel.virtualRoot.height=this._getPositionAfter(this.treeModel.getVisibleRoots(),0)},t.prototype._getPositionAfter=function(t,e){var n=this,a=e;return t.forEach((function(t){t.position=a,a=n._getPositionAfterNode(t,a)})),a},t.prototype._getPositionAfterNode=function(t,e){var n=t.getSelfHeight()+e;return t.children&&t.isExpanded&&(n=this._getPositionAfter(t.visibleChildren,n)),t.height=n-e,n},t.prototype.clear=function(){this._dispose.forEach((function(t){return t()}))},t.prototype.setViewport=function(t){Object.assign(this,{viewport:t,x:t.scrollLeft,yBlocks:Math.round(t.scrollTop/150),viewportHeight:t.getBoundingClientRect?t.getBoundingClientRect().height:0})},t.prototype.scrollIntoView=function(t,e,n){if(void 0===n&&(n=!0),t.options.scrollContainer){var a=t.options.scrollContainer,r=a.getBoundingClientRect().height,i=a.getBoundingClientRect().top,s=this.viewport.getBoundingClientRect().top+t.position-i;(e||s<a.scrollTop||s+t.getSelfHeight()>a.scrollTop+r)&&(a.scrollTop=n?s-r/2:s)}else(e||t.position<this.y||t.position+t.getSelfHeight()>this.y+this.viewportHeight)&&this.viewport&&(this.viewport.scrollTop=n?t.position-this.viewportHeight/2:t.position,this._setYBlocks(Math.floor(this.viewport.scrollTop/150)))},t.prototype.getViewportNodes=function(t){var e=this;if(!t)return[];var n=t.filter((function(t){return!t.isHidden}));if(!this.isEnabled())return n;if(!this.viewportHeight||!n.length)return[];var a=d(n,(function(t){return t.position+500>e.y||t.position+t.height>e.y})),r=d(n,(function(t){return t.position-500>e.y+e.viewportHeight}),a),i=[];if(r-a>(1e3+this.viewportHeight)/n[0].treeModel.options.options.nodeHeight)return[];for(var s=a;s<=r;s++)i.push(n[s]);return i},t.prototype.fixScroll=function(){var t=Math.max(0,this.totalHeight-this.viewportHeight);this.y<0&&this._setYBlocks(0),this.y>t&&this._setYBlocks(t/150)},o([r.d,u("design:type",Object)],t.prototype,"yBlocks",void 0),o([r.d,u("design:type",Object)],t.prototype,"x",void 0),o([r.d,u("design:type",Object)],t.prototype,"viewportHeight",void 0),o([r.c,u("design:type",Object),u("design:paramtypes",[])],t.prototype,"y",null),o([r.c,u("design:type",Object),u("design:paramtypes",[])],t.prototype,"totalHeight",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object]),u("design:returntype",void 0)],t.prototype,"_setYBlocks",null),o([r.a,u("design:type",Function),u("design:paramtypes",[]),u("design:returntype",void 0)],t.prototype,"recalcPositions",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object]),u("design:returntype",void 0)],t.prototype,"setViewport",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object,Object,Object]),u("design:returntype",void 0)],t.prototype,"scrollIntoView",null),o([Object(a.Injectable)(),u("design:paramtypes",[i.a])],t)}();function d(t,e,n){void 0===n&&(n=0);for(var a=n,r=t.length-1;a!==r;){var i=Math.floor((a+r)/2);e(t[i])?r=i:a=a===i?r:i}return a}},"dBg+":function(t,e){e.f=Object.getOwnPropertySymbols},dCge:function(t,e){t.exports=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}},dEH0:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return t+" ms"}}},dNwA:function(t,e,n){!function(t){"use strict";t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n("wd/R"))},dX5L:function(t,e,n){var a=n("KFwg")(n("Wa4q"),"DataView");t.exports=a},dgut:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("NEZu");n("Fgil");class r{constructor(t){this.dimlessBinaryPipe=t,this.style={height:"30px",width:"100px"},this.colors=[{backgroundColor:"rgba(40,140,234,0.2)",borderColor:"rgba(40,140,234,1)",pointBackgroundColor:"rgba(40,140,234,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(40,140,234,0.8)"}],this.options={animation:{duration:0},responsive:!0,maintainAspectRatio:!1,legend:{display:!1},elements:{line:{borderWidth:1}},tooltips:{enabled:!1,mode:"index",intersect:!1,custom:void 0,callbacks:{label:t=>this.isBinary?this.dimlessBinaryPipe.transform(t.yLabel):t.yLabel,title:()=>""}},scales:{yAxes:[{display:!1}],xAxes:[{display:!1}]}},this.datasets=[{data:[]}],this.labels=[]}ngOnInit(){const t=new a.a(this.chartCanvasRef,this.chartTooltipRef,(t,e)=>e+t.caretX+"px",t=>t.caretY-t.height-t.yPadding-5+"px");t.customColors={backgroundColor:this.colors[0].pointBackgroundColor,borderColor:this.colors[0].pointBorderColor},this.options.tooltips.custom=e=>{t.customTooltips(e)}}ngOnChanges(t){this.datasets[0].data=t.data.currentValue,this.labels=[...Array(t.data.currentValue.length)]}}},"e+ae":function(t,e,n){!function(t){"use strict";var e="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function a(t){return t>1&&t<5}function r(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"pár sekúnd":"pár sekundami";case"ss":return e||r?i+(a(t)?"sekundy":"sekúnd"):i+"sekundami";case"m":return e?"minúta":r?"minútu":"minútou";case"mm":return e||r?i+(a(t)?"minúty":"minút"):i+"minútami";case"h":return e?"hodina":r?"hodinu":"hodinou";case"hh":return e||r?i+(a(t)?"hodiny":"hodín"):i+"hodinami";case"d":return e||r?"deň":"dňom";case"dd":return e||r?i+(a(t)?"dni":"dní"):i+"dňami";case"M":return e||r?"mesiac":"mesiacom";case"MM":return e||r?i+(a(t)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return e||r?"rok":"rokom";case"yy":return e||r?i+(a(t)?"roky":"rokov"):i+"rokmi"}}t.defineLocale("sk",{months:e,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},e0ae:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=function(t,e,n){this.name=t,this.version=e,this.os=n,this.type="browser"},r=function(t){this.version=t,this.type="node",this.name="node",this.os=process.platform},i=function(t,e,n,a){this.name=t,this.version=e,this.os=n,this.bot=a,this.type="bot-device"},s=function(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null},o=/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,u=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/Edg\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],l=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function d(t){return t?c(t):"undefined"!=typeof navigator?c(navigator.userAgent):"undefined"!=typeof process&&process.version?new r(process.version.slice(1)):null}function c(t){var e=function(t){return""!==t&&u.reduce((function(e,n){var a=n[0];if(e)return e;var r=n[1].exec(t);return!!r&&[a,r]}),!1)}(t);if(!e)return null;var n=e[0],r=e[1];if("searchbot"===n)return new s;var d=r[1]&&r[1].split(/[._]/).slice(0,3);d?d.length<3&&(d=function(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var a=Array(t),r=0;for(e=0;e<n;e++)for(var i=arguments[e],s=0,o=i.length;s<o;s++,r++)a[r]=i[s];return a}(d,function(t){for(var e=[],n=0;n<t;n++)e.push("0");return e}(3-d.length))):d=[];var c=d.join("."),f=function(t){for(var e=0,n=l.length;e<n;e++){var a=l[e],r=a[0];if(a[1].exec(t))return r}return null}(t),h=o.exec(t);return h&&h[1]?new i(n,c,f,h[1]):new a(n,d.join("."),f)}},eAIQ:function(t,e,n){var a=n("77kF"),r=n("MBcj");t.exports=function(t){return a(t,r(t))}},"eDl+":function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},eH2F:function(t,e){t.exports=function(t){return function(e,n,a){for(var r=-1,i=Object(e),s=a(e),o=s.length;o--;){var u=s[t?o:++r];if(!1===n(i[u],u,i))break}return e}}},eIep:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("l7GE"),r=n("51Dv"),i=n("ZUHj"),s=n("lJxs"),o=n("Cfvw");function u(t,e){return"function"==typeof e?n=>n.pipe(u((n,a)=>Object(o.a)(t(n,a)).pipe(Object(s.a)((t,r)=>e(n,t,a,r))))):e=>e.lift(new l(t))}class l{constructor(t){this.project=t}call(t,e){return e.subscribe(new d(t,this.project))}}class d extends a.a{constructor(t,e){super(t),this.project=e,this.index=0}_next(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(a){return void this.destination.error(a)}this._innerSub(e,t,n)}_innerSub(t,e,n){const a=this.innerSubscription;a&&a.unsubscribe();const s=new r.a(this,e,n),o=this.destination;o.add(s),this.innerSubscription=Object(i.a)(this,t,void 0,void 0,s),this.innerSubscription!==s&&o.add(this.innerSubscription)}_complete(){const{innerSubscription:t}=this;t&&!t.closed||super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=null}notifyComplete(t){this.destination.remove(t),this.innerSubscription=null,this.isStopped&&super._complete()}notifyNext(t,e,n,a,r){this.destination.next(e)}}},eNG0:function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},eQba:function(t,e,n){var a=n("2zzJ");t.exports=function(t,e,n){var r=null==t?void 0:a(t,e);return void 0===r?n:r}},eTJe:function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("cp0P"),s=(n("SgmB"),n("ZDA6"),n("sne2"),n("mtw6")),o=n("QFaf"),u=n("1Ni5"),l=(n("9nlD"),function(t){return t.editing="editing",t}({}));class d{}n.d(e,"a",(function(){return c}));class c{constructor(t,e,n,a,r,i,s){this.route=t,this.router=e,this.roleService=n,this.scopeService=a,this.notificationService=r,this.i18n=i,this.actionLabels=s,this.scopes=[],this.scopes_permissions=[],this.roleFormMode=l,this.resource=this.i18n("role"),this.createForm(),this.listenToChanges()}createForm(){this.roleForm=new o.a({name:new a.i("",{validators:[a.B.required],asyncValidators:[u.a.unique(this.roleService.exists,this.roleService)]}),description:new a.i(""),scopes_permissions:new a.i({})})}ngOnInit(){this.columns=[{prop:"scope",name:this.i18n("All"),flexGrow:2,cellTemplate:this.cellScopeCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"read",name:this.i18n("Read"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"create",name:this.i18n("Create"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"update",name:this.i18n("Update"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"delete",name:this.i18n("Delete"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl}],this.router.url.startsWith("/user-management/roles/edit")?(this.mode=this.roleFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.mode===this.roleFormMode.editing?this.initEdit():this.initCreate()}initCreate(){this.scopeService.list().subscribe(t=>{this.scopes=t,this.roleForm.get("scopes_permissions").setValue({})})}initEdit(){this.roleForm.get("name").disable(),this.route.params.subscribe(t=>{const e=[];e.push(this.scopeService.list()),e.push(this.roleService.get(t.name)),Object(i.a)(e).subscribe(t=>{this.scopes=t[0],["name","description","scopes_permissions"].forEach(e=>this.roleForm.get(e).setValue(t[1][e]))})})}listenToChanges(){this.roleForm.get("scopes_permissions").valueChanges.subscribe(t=>{const e=[];r.each(this.scopes,n=>{const a={read:!1,create:!1,update:!1,delete:!1};a.scope=n,n in t&&r.each(t[n],t=>{a[t]=!0}),e.push(a)}),this.scopes_permissions=e})}isRowChecked(t){const e=r.find(this.scopes_permissions,e=>e.scope===t);return!r.isUndefined(e)&&e.read&&e.create&&e.update&&e.delete}isHeaderChecked(t){let e=[t];return"scope"===t&&(e=["read","create","update","delete"]),e.every(t=>this.scopes_permissions.every(e=>e[t]))}onClickCellCheckbox(t,e,n=null){const a=r.cloneDeep(this.roleForm.getValue("scopes_permissions"));let i=[e];"scope"===e&&(i=["read","create","update","delete"]),t in a||(a[t]=[]),n&&n.target.checked||!r.isEqual(i.sort(),r.intersection(a[t],i).sort())?a[t]=r.union(a[t],i):(a[t]=r.difference(a[t],i),r.isEmpty(a[t])&&r.unset(a,t)),this.roleForm.get("scopes_permissions").setValue(a)}onClickHeaderCheckbox(t,e){const n=r.cloneDeep(this.roleForm.getValue("scopes_permissions"));let a=[t];"scope"===t&&(a=["read","create","update","delete"]),r.each(a,t=>{r.each(this.scopes,a=>{e.target.checked?n[a]=r.union(n[a],[t]):(n[a]=r.difference(n[a],[t]),r.isEmpty(n[a])&&r.unset(n,a))})}),this.roleForm.get("scopes_permissions").setValue(n)}getRequest(){const t=new d;return["name","description","scopes_permissions"].forEach(e=>t[e]=this.roleForm.get(e).value),t}createAction(){const t=this.getRequest();this.roleService.create(t).subscribe(()=>{this.notificationService.show(s.a.success,this.i18n("Created role '{{role_name}}'",{role_name:t.name})),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}editAction(){const t=this.getRequest();this.roleService.update(t).subscribe(()=>{this.notificationService.show(s.a.success,this.i18n("Updated role '{{role_name}}'",{role_name:t.name})),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}submit(){this.mode===this.roleFormMode.editing?this.editAction():this.createAction()}}},efK2:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e,n){return a.isString(t)?(n=a.defaultTo(n,""),a.truncate(t,{length:e,omission:n})):t}}},"ej+x":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("lOp/"),r=n("8Y7J"),i=n("IheW");let s=(()=>{class t{constructor(t,e){this.http=t,this.timerService=e,this.API_URL="api/feature_toggles",this.REFRESH_INTERVAL=3e4,this.featureToggleMap$=this.timerService.get(()=>this.http.get(this.API_URL),this.REFRESH_INTERVAL)}get(){return this.featureToggleMap$}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t(r["ɵɵinject"](i.c),r["ɵɵinject"](a.a))},token:t,providedIn:"root"}),t})()},emnf:function(t,e,n){var a=n("YGUN"),r=n("w/8D"),i=n("aHcz");t.exports=r?function(t,e){return r(t,"toString",{configurable:!0,enumerable:!1,value:a(e),writable:!0})}:i},ewvW:function(t,e,n){var a=n("HYAF");t.exports=function(t){return Object(a(t))}},ezUo:function(t,e,n){var a=n("xT5m"),r=n("LxgN"),i=n("K1DE");t.exports=function(t,e,n,s,o,u){var l=1&n,d=t.length,c=e.length;if(d!=c&&!(l&&c>d))return!1;var f=u.get(t),h=u.get(e);if(f&&h)return f==e&&h==t;var g=-1,p=!0,b=2&n?new a:void 0;for(u.set(t,e),u.set(e,t);++g<d;){var m=t[g],y=e[g];if(s)var v=l?s(y,m,g,e,t,u):s(m,y,g,t,e,u);if(void 0!==v){if(v)continue;p=!1;break}if(b){if(!r(e,(function(t,e){if(!i(b,e)&&(m===t||o(m,t,n,s,u)))return b.push(e)}))){p=!1;break}}else if(m!==y&&!o(m,y,n,s,u)){p=!1;break}}return u.delete(t),u.delete(e),p}},"f/UV":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},f5p1:function(t,e,n){var a=n("2oRo"),r=n("iSVu"),i=a.WeakMap;t.exports="function"==typeof i&&/native code/.test(r(i))},f95s:function(t,e,n){"use strict";n.d(e,"a",(function(){return p}));var a=n("2vnA"),r=n("X+05"),i=n("8SuI"),s=n.n(i),o=n("gBXJ"),u=n.n(o),l=n("aTV8"),d=n.n(l),c=n("7VGY"),f=n.n(c),h=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},g=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},p=function(){function t(t,e,n,a){var r=this;this.data=t,this.parent=e,this.treeModel=n,this.position=0,this.allowDrop=function(t,e){return r.options.allowDrop(t,{parent:r,index:0},e)},this.allowDragoverStyling=function(){return r.options.allowDragoverStyling},null==this.id&&(this.id=Math.floor(1e13*Math.random())),this.index=a,this.getField("children")&&this._initChildren(),this.autoLoadChildren()}return Object.defineProperty(t.prototype,"isHidden",{get:function(){return this.treeModel.isHidden(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.treeModel.isExpanded(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isActive",{get:function(){return this.treeModel.isActive(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isFocused",{get:function(){return this.treeModel.isNodeFocused(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isSelected",{get:function(){return this.isSelectable()?this.treeModel.isSelected(this):d()(this.children,(function(t){return t.isSelected}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isAllSelected",{get:function(){return this.isSelectable()?this.treeModel.isSelected(this):f()(this.children,(function(t){return t.isAllSelected}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isPartiallySelected",{get:function(){return this.isSelected&&!this.isAllSelected},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"level",{get:function(){return this.parent?this.parent.level+1:0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return this.parent?this.parent.path.concat([this.id]):[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"elementRef",{get:function(){throw"Element Ref is no longer supported since introducing virtual scroll\n\n      You may use a template to obtain a reference to the element"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalNode",{get:function(){return this._originalNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasChildren",{get:function(){return!!(this.getField("hasChildren")||this.children&&this.children.length>0)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isCollapsed",{get:function(){return!this.isExpanded},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLeaf",{get:function(){return!this.hasChildren},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isRoot",{get:function(){return this.parent.data.virtual},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"realParent",{get:function(){return this.isRoot?null:this.parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return this.treeModel.options},enumerable:!0,configurable:!0}),t.prototype.fireEvent=function(t){this.treeModel.fireEvent(t)},Object.defineProperty(t.prototype,"displayField",{get:function(){return this.getField("display")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.getField("id")},set:function(t){this.setField("id",t)},enumerable:!0,configurable:!0}),t.prototype.getField=function(t){return this.data[this.options[t+"Field"]]},t.prototype.setField=function(t,e){this.data[this.options[t+"Field"]]=e},t.prototype._findAdjacentSibling=function(t,e){void 0===e&&(e=!1);var n=this._getParentsChildren(e),a=n.indexOf(this);return n.length>a+t?n[a+t]:null},t.prototype.findNextSibling=function(t){return void 0===t&&(t=!1),this._findAdjacentSibling(1,t)},t.prototype.findPreviousSibling=function(t){return void 0===t&&(t=!1),this._findAdjacentSibling(-1,t)},t.prototype.getVisibleChildren=function(){return this.visibleChildren},Object.defineProperty(t.prototype,"visibleChildren",{get:function(){return(this.children||[]).filter((function(t){return!t.isHidden}))},enumerable:!0,configurable:!0}),t.prototype.getFirstChild=function(t){void 0===t&&(t=!1);var e=t?this.visibleChildren:this.children;return s()(e||[])},t.prototype.getLastChild=function(t){void 0===t&&(t=!1);var e=t?this.visibleChildren:this.children;return u()(e||[])},t.prototype.findNextNode=function(t,e){return void 0===t&&(t=!0),void 0===e&&(e=!1),t&&this.isExpanded&&this.getFirstChild(e)||this.findNextSibling(e)||this.parent&&this.parent.findNextNode(!1,e)},t.prototype.findPreviousNode=function(t){void 0===t&&(t=!1);var e=this.findPreviousSibling(t);return e?e._getLastOpenDescendant(t):this.realParent},t.prototype._getLastOpenDescendant=function(t){void 0===t&&(t=!1);var e=this.getLastChild(t);return this.isCollapsed||!e?this:e._getLastOpenDescendant(t)},t.prototype._getParentsChildren=function(t){return void 0===t&&(t=!1),this.parent&&(t?this.parent.getVisibleChildren():this.parent.children)||[]},t.prototype.getIndexInParent=function(t){return void 0===t&&(t=!1),this._getParentsChildren(t).indexOf(this)},t.prototype.isDescendantOf=function(t){return this===t||this.parent&&this.parent.isDescendantOf(t)},t.prototype.getNodePadding=function(){return this.options.levelPadding*(this.level-1)+"px"},t.prototype.getClass=function(){return[this.options.nodeClass(this),"tree-node-level-"+this.level].join(" ")},t.prototype.onDrop=function(t){this.mouseAction("drop",t.event,{from:t.element,to:{parent:this,index:0,dropOnNode:!0}})},t.prototype.allowDrag=function(){return this.options.allowDrag(this)},t.prototype.loadNodeChildren=function(){var t=this;return this.options.getChildren?Promise.resolve(this.options.getChildren(this)).then((function(e){e&&(t.setField("children",e),t._initChildren(),t.options.useTriState&&t.treeModel.isSelected(t)&&t.setIsSelected(!0),t.children.forEach((function(t){t.getField("isExpanded")&&t.hasChildren&&t.expand()})))})).then((function(){t.fireEvent({eventName:r.a.loadNodeChildren,node:t})})):Promise.resolve()},t.prototype.expand=function(){return this.isExpanded||this.toggleExpanded(),this},t.prototype.collapse=function(){return this.isExpanded&&this.toggleExpanded(),this},t.prototype.doForAll=function(t){var e=this;Promise.resolve(t(this)).then((function(){e.children&&e.children.forEach((function(e){return e.doForAll(t)}))}))},t.prototype.expandAll=function(){this.doForAll((function(t){return t.expand()}))},t.prototype.collapseAll=function(){this.doForAll((function(t){return t.collapse()}))},t.prototype.ensureVisible=function(){return this.realParent&&(this.realParent.expand(),this.realParent.ensureVisible()),this},t.prototype.toggleExpanded=function(){return this.setIsExpanded(!this.isExpanded),this},t.prototype.setIsExpanded=function(t){return this.hasChildren&&this.treeModel.setExpandedNode(this,t),this},t.prototype.autoLoadChildren=function(){var t=this;this.handler=Object(a.e)((function(){return t.isExpanded}),(function(e){!t.children&&t.hasChildren&&e&&t.loadNodeChildren()}),{fireImmediately:!0})},t.prototype.dispose=function(){this.children&&this.children.forEach((function(t){return t.dispose()})),this.handler&&this.handler(),this.parent=null,this.children=null},t.prototype.setIsActive=function(t,e){return void 0===e&&(e=!1),this.treeModel.setActiveNode(this,t,e),t&&this.focus(this.options.scrollOnActivate),this},t.prototype.isSelectable=function(){return this.isLeaf||!this.children||!this.options.useTriState},t.prototype.setIsSelected=function(t){return this.isSelectable()?this.treeModel.setSelectedNode(this,t):this.visibleChildren.forEach((function(e){return e.setIsSelected(t)})),this},t.prototype.toggleSelected=function(){return this.setIsSelected(!this.isSelected),this},t.prototype.toggleActivated=function(t){return void 0===t&&(t=!1),this.setIsActive(!this.isActive,t),this},t.prototype.setActiveAndVisible=function(t){return void 0===t&&(t=!1),this.setIsActive(!0,t).ensureVisible(),setTimeout(this.scrollIntoView.bind(this)),this},t.prototype.scrollIntoView=function(t){void 0===t&&(t=!1),this.treeModel.virtualScroll.scrollIntoView(this,t)},t.prototype.focus=function(t){void 0===t&&(t=!0);var e=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(this),t&&this.scrollIntoView(),e&&this.fireEvent({eventName:r.a.blur,node:e}),this.fireEvent({eventName:r.a.focus,node:this}),this},t.prototype.blur=function(){var t=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(null),t&&this.fireEvent({eventName:r.a.blur,node:this}),this},t.prototype.setIsHidden=function(t){this.treeModel.setIsHidden(this,t)},t.prototype.hide=function(){this.setIsHidden(!0)},t.prototype.show=function(){this.setIsHidden(!1)},t.prototype.mouseAction=function(t,e,n){void 0===n&&(n=null),this.treeModel.setFocus(!0);var a=this.options.actionMapping.mouse[t];a&&a(this.treeModel,this,e,n)},t.prototype.getSelfHeight=function(){return this.options.nodeHeight(this)},t.prototype._initChildren=function(){var e=this;this.children=this.getField("children").map((function(n,a){return new t(n,e,e.treeModel,a)}))},h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isHidden",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isExpanded",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isActive",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isFocused",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isSelected",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isAllSelected",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isPartiallySelected",null),h([a.d,g("design:type",Array)],t.prototype,"children",void 0),h([a.d,g("design:type",Number)],t.prototype,"index",void 0),h([a.d,g("design:type",Object)],t.prototype,"position",void 0),h([a.d,g("design:type",Number)],t.prototype,"height",void 0),h([a.c,g("design:type",Number),g("design:paramtypes",[])],t.prototype,"level",null),h([a.c,g("design:type",Array),g("design:paramtypes",[])],t.prototype,"path",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"visibleChildren",null),h([a.a,g("design:type",Function),g("design:paramtypes",[Object]),g("design:returntype",void 0)],t.prototype,"setIsSelected",null),h([a.a,g("design:type",Function),g("design:paramtypes",[]),g("design:returntype",void 0)],t.prototype,"_initChildren",null),t}()},fHMY:function(t,e,n){var a,r=n("glrk"),i=n("N+g0"),s=n("eDl+"),o=n("0BK2"),u=n("G+Rx"),l=n("zBJ4"),d=n("93I0")("IE_PROTO"),c=function(){},f=function(t){return"<script>"+t+"<\/script>"},h=function(){try{a=document.domain&&new ActiveXObject("htmlfile")}catch(r){}var t,e;h=a?function(t){t.write(f("")),t.close();var e=t.parentWindow.Object;return t=null,e}(a):((e=l("iframe")).style.display="none",u.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(f("document.F=Object")),t.close(),t.F);for(var n=s.length;n--;)delete h.prototype[s[n]];return h()};o[d]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(c.prototype=r(t),n=new c,c.prototype=null,n[d]=t):n=h(),void 0===e?n:i(n,e)}},fIUv:function(t,e,n){var a=n("Wa4q");t.exports=function(){return a.Date.now()}},fdAy:function(t,e,n){"use strict";var a=n("I+eb"),r=n("ntOU"),i=n("4WOD"),s=n("0rvr"),o=n("1E5z"),u=n("kRJp"),l=n("busE"),d=n("tiKp"),c=n("xDBR"),f=n("P4y1"),h=n("rpNk"),g=h.IteratorPrototype,p=h.BUGGY_SAFARI_ITERATORS,b=d("iterator"),m=function(){return this};t.exports=function(t,e,n,d,h,y,v){r(n,e,d);var x,_,T,O=function(t){if(t===h&&C)return C;if(!p&&t in I)return I[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},w=e+" Iterator",S=!1,I=t.prototype,N=I[b]||I["@@iterator"]||h&&I[h],C=!p&&N||O(h),R="Array"==e&&I.entries||N;if(R&&(x=i(R.call(new t)),g!==Object.prototype&&x.next&&(c||i(x)===g||(s?s(x,g):"function"!=typeof x[b]&&u(x,b,m)),o(x,w,!0,!0),c&&(f[w]=m))),"values"==h&&N&&"values"!==N.name&&(S=!0,C=function(){return N.call(this)}),c&&!v||I[b]===C||u(I,b,C),f[e]=C,h)if(_={values:O("values"),keys:y?C:O("keys"),entries:O("entries")},v)for(T in _)(p||S||!(T in I))&&l(I,T,_[T]);else a({target:e,proto:!0,forced:p||S},_);return _}},fqHM:function(t,e,n){var a=n("4a5m"),r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,s=a((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(r,(function(t,n,a,r){e.push(a?r.replace(i,"$1"):n||t)})),e}));t.exports=s},fxL3:function(t,e,n){"use strict";n.d(e,"a",(function(){return g}));var a=n("8Y7J"),r=n("MP8s"),i=n("gk6K"),s=n("mfoh"),o=n("HIU9"),u=n("YCpU"),l=n.n(u),d=n("+Z6c"),c=n.n(d),f=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},h=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},g=function(){function t(t,e){var n=this;this.treeModel=t,this.treeDraggedElement=e,t.eventNames.forEach((function(t){return n[t]=new a.EventEmitter})),t.subscribeToState((function(t){return n.stateChange.emit(t)}))}return Object.defineProperty(t.prototype,"nodes",{set:function(t){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{set:function(t){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focused",{set:function(t){this.treeModel.setFocus(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{set:function(t){this.treeModel.setState(t)},enumerable:!0,configurable:!0}),t.prototype.onKeydown=function(t){if(this.treeModel.isFocused&&!l()(["input","textarea"],document.activeElement.tagName.toLowerCase())){var e=this.treeModel.getFocusedNode();this.treeModel.performKeyAction(e,t)}},t.prototype.onMousedown=function(t){(function t(e,n){return!e||e.localName!==n&&t(e.parentElement,n)})(t.target,"tree-root")&&this.treeModel.setFocus(!1)},t.prototype.ngOnChanges=function(t){(t.options||t.nodes)&&this.treeModel.setData({options:t.options&&t.options.currentValue,nodes:t.nodes&&t.nodes.currentValue,events:c()(this,this.treeModel.eventNames)})},t.prototype.sizeChanged=function(){this.viewportComponent.setViewport()},f([Object(a.ContentChild)("loadingTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"loadingTemplate",void 0),f([Object(a.ContentChild)("treeNodeTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeTemplate",void 0),f([Object(a.ContentChild)("treeNodeWrapperTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeWrapperTemplate",void 0),f([Object(a.ContentChild)("treeNodeFullTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeFullTemplate",void 0),f([Object(a.ViewChild)("viewport",{static:!1}),h("design:type",o.a)],t.prototype,"viewportComponent",void 0),f([Object(a.Input)(),h("design:type",Array),h("design:paramtypes",[Array])],t.prototype,"nodes",null),f([Object(a.Input)(),h("design:type",s.b),h("design:paramtypes",[s.b])],t.prototype,"options",null),f([Object(a.Input)(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],t.prototype,"focused",null),f([Object(a.Input)(),h("design:type",Object),h("design:paramtypes",[Object])],t.prototype,"state",null),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"toggleExpanded",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"activate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"deactivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"nodeActivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"nodeDeactivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"select",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"deselect",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"focus",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"blur",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"updateData",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"initialized",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"moveNode",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"copyNode",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"loadNodeChildren",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"changeFilter",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"event",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"stateChange",void 0),f([Object(a.HostListener)("body: keydown",["$event"]),h("design:type",Function),h("design:paramtypes",[Object]),h("design:returntype",void 0)],t.prototype,"onKeydown",null),f([Object(a.HostListener)("body: mousedown",["$event"]),h("design:type",Function),h("design:paramtypes",[Object]),h("design:returntype",void 0)],t.prototype,"onMousedown",null),f([Object(a.Component)({selector:"Tree, tree-root",providers:[r.a],styles:[],template:'\n      <tree-viewport #viewport>\n          <div\n                  class="angular-tree-component"\n                  [class.node-dragging]="treeDraggedElement.isDragging()"\n                  [class.angular-tree-component-rtl]="treeModel.options.rtl">\n              <tree-node-collection\n                      *ngIf="treeModel.roots"\n                      [nodes]="treeModel.roots"\n                      [treeModel]="treeModel"\n                      [templates]="{\n            loadingTemplate: loadingTemplate,\n            treeNodeTemplate: treeNodeTemplate,\n            treeNodeWrapperTemplate: treeNodeWrapperTemplate,\n            treeNodeFullTemplate: treeNodeFullTemplate\n          }">\n              </tree-node-collection>\n              <tree-node-drop-slot\n                      class="empty-tree-drop-slot"\n                      *ngIf="treeModel.isEmptyTree()"\n                      [dropIndex]="0"\n                      [node]="treeModel.virtualRoot">\n              </tree-node-drop-slot>\n          </div>\n      </tree-viewport>\n  '}),h("design:paramtypes",[r.a,i.a])],t)}()},fzPg:function(t,e,n){!function(t){"use strict";t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n("wd/R"))},"g6v/":function(t,e,n){var a=n("0Dky");t.exports=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},gBXJ:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},gHid:function(t,e,n){var a=n("aT2Y"),r=n("Gf4A"),i=n("SQuY");t.exports=function(t,e){var n=this.__data__;if(n instanceof a){var s=n.__data__;if(!r||s.length<199)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(t,e),this.size=n.size,this}},gRHU:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("2fFW"),r=n("NJ4a");const i={closed:!0,next(t){},error(t){if(a.a.useDeprecatedSynchronousErrorHandling)throw t;Object(r.a)(t)},complete(){}}},gVVK:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r=t+" ";switch(n){case"s":return e||a?"nekaj sekund":"nekaj sekundami";case"ss":return r+(1===t?e?"sekundo":"sekundi":2===t?e||a?"sekundi":"sekundah":t<5?e||a?"sekunde":"sekundah":"sekund");case"m":return e?"ena minuta":"eno minuto";case"mm":return r+(1===t?e?"minuta":"minuto":2===t?e||a?"minuti":"minutama":t<5?e||a?"minute":"minutami":e||a?"minut":"minutami");case"h":return e?"ena ura":"eno uro";case"hh":return r+(1===t?e?"ura":"uro":2===t?e||a?"uri":"urama":t<5?e||a?"ure":"urami":e||a?"ur":"urami");case"d":return e||a?"en dan":"enim dnem";case"dd":return r+(1===t?e||a?"dan":"dnem":2===t?e||a?"dni":"dnevoma":e||a?"dni":"dnevi");case"M":return e||a?"en mesec":"enim mesecem";case"MM":return r+(1===t?e||a?"mesec":"mesecem":2===t?e||a?"meseca":"mesecema":t<5?e||a?"mesece":"meseci":e||a?"mesecev":"meseci");case"y":return e||a?"eno leto":"enim letom";case"yy":return r+(1===t?e||a?"leto":"letom":2===t?e||a?"leti":"letoma":t<5?e||a?"leta":"leti":e||a?"let":"leti")}}t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},gekB:function(t,e,n){!function(t){"use strict";var e="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",e[7],e[8],e[9]];function a(t,a,r,i){var s="";switch(r){case"s":return i?"muutaman sekunnin":"muutama sekunti";case"ss":return i?"sekunnin":"sekuntia";case"m":return i?"minuutin":"minuutti";case"mm":s=i?"minuutin":"minuuttia";break;case"h":return i?"tunnin":"tunti";case"hh":s=i?"tunnin":"tuntia";break;case"d":return i?"päivän":"päivä";case"dd":s=i?"päivän":"päivää";break;case"M":return i?"kuukauden":"kuukausi";case"MM":s=i?"kuukauden":"kuukautta";break;case"y":return i?"vuoden":"vuosi";case"yy":s=i?"vuoden":"vuotta"}return function(t,a){return t<10?a?n[t]:e[t]:t}(t,i)+" "+s}t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},gjCT:function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};t.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n("wd/R"))},gk6K:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("8Y7J"),r=function(){function t(){this._draggedElement=null}return t.prototype.set=function(t){this._draggedElement=t},t.prototype.get=function(){return this._draggedElement},t.prototype.isDragging=function(){return!!this.get()},function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.Injectable)()],t)}()},glrk:function(t,e,n){var a=n("hh1v");t.exports=function(t){if(!a(t))throw TypeError(String(t)+" is not an object");return t}},gp3X:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse");n("sb0X"),n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var i=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](4,2)],(function(t,e){var n=e.component,a=t(e,4,0,n.icons.spinner,n.icons.spin);t(e,3,0,a)}),null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"button",[["class","btn btn-secondary tc_submitButton"]],[[8,"type",0],[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.submit(n)&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵncd"](null,0),(t()(),a["ɵand"](16777216,null,null,1,null,s)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"btn btn-secondary tc_submitButton",n.btnClass),t(e,5,0,n.loading)}),(function(t,e){var n=e.component;t(e,0,0,n.type,n.loading||n.disabled)}))}},h7vy:function(t,e,n){var a=n("LaC8"),r=n("x3F9");t.exports=function(t){return"number"==typeof t||r(t)&&"[object Number]"==a(t)}},"hKI/":function(t,e){var n=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,i=/^0o[0-7]+$/i,s=parseInt,o="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,l=o||u||Function("return this")(),d=Object.prototype.toString,c=Math.max,f=Math.min,h=function(){return l.Date.now()};function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function p(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==d.call(t)}(t))return NaN;if(g(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=g(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var o=r.test(t);return o||i.test(t)?s(t.slice(2),o?2:8):a.test(t)?NaN:+t}t.exports=function(t,e,n){var a=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return g(n)&&(a="leading"in n?!!n.leading:a,r="trailing"in n?!!n.trailing:r),function(t,e,n){var a,r,i,s,o,u,l=0,d=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=a,i=r;return a=r=void 0,l=e,s=t.apply(i,n)}function v(t){return l=t,o=setTimeout(_,e),d?y(t):s}function x(t){var n=t-u;return void 0===u||n>=e||n<0||b&&t-l>=i}function _(){var t=h();if(x(t))return T(t);o=setTimeout(_,function(t){var n=e-(t-u);return b?f(n,i-(t-l)):n}(t))}function T(t){return o=void 0,m&&a?y(t):(a=r=void 0,s)}function O(){var t=h(),n=x(t);if(a=arguments,r=this,u=t,n){if(void 0===o)return v(u);if(b)return o=setTimeout(_,e),y(u)}return void 0===o&&(o=setTimeout(_,e)),s}return e=p(e)||0,g(n)&&(d=!!n.leading,i=(b="maxWait"in n)?c(p(n.maxWait)||0,e):i,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==o&&clearTimeout(o),l=0,a=u=r=o=void 0},O.flush=function(){return void 0===o?s:T(h())},O}(t,e,{leading:a,maxWait:e,trailing:r})}},hKrs:function(t,e,n){!function(t){"use strict";t.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n("wd/R"))},hTsC:function(t,e,n){var a=n("CNUl"),r=n("NSEa"),i=n("R2cF"),s=n("THq6"),o=n("lEOU");t.exports=function(t,e,n){var u=t.constructor;switch(e){case"[object ArrayBuffer]":return a(t);case"[object Boolean]":case"[object Date]":return new u(+t);case"[object DataView]":return r(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return o(t,n);case"[object Map]":return new u;case"[object Number]":case"[object String]":return new u(t);case"[object RegExp]":return i(t);case"[object Set]":return new u;case"[object Symbol]":return s(t)}}},hfeG:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("s7LF"),s=n("ANnk"),o=n("f/UV"),u=n("aexS"),l=n("+gVj"),d=n("EmSq"),c=n("Fgil"),f=n("aXbf"),h=n("pYKc"),g=n("ppaS"),p=n("GiVz"),b=n("mXUL"),m=n("EEJc"),y=n("ajRT"),v=n("gp3X"),x=n("sb0X"),_=n("KVJa"),T=n("Z21x"),O=n("sne2"),w=n("Rf2I"),S=n("LqlI"),I=n("2EZI");n.d(e,"a",(function(){return V}));var N=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.titleText)}))}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.message)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{required:0}),(t()(),a["ɵted"](4,null,[" "," "]))],(function(t,e){var n=t(e,3,0,!0===(null==e.parent.context.$implicit?null:e.parent.context.$implicit.required));t(e,2,0,"cd-col-form-label",n)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name),t(e,4,0,e.parent.context.$implicit.label)}))}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0;return"input"===e&&(r=!1!==a["ɵnov"](t,1)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,1)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,1)._compositionEnd(n.target.value)&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.e,[a.Renderer2,a.ElementRef,[2,i.b]],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.e]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,4210688,null,0,s.a,[[2,o.a],u.a,a.ElementRef],null,null),a["ɵdid"](7,16384,null,0,l.h,[[3,i.d],l.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,7,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,1,[e.parent.context.$implicit.type,e.parent.context.$implicit.name,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,7).validClass,a["ɵnov"](e,7).invalidClass])}))}function E(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"input",[["cdDimlessBinary",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0;return"input"===e&&(r=!1!==a["ɵnov"](t,1)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,1)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,1)._compositionEnd(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,6).onBlur(n.target.value)&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.e,[a.Renderer2,a.ElementRef,[2,i.b]],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.e]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,81920,null,0,d.a,[a.ElementRef,i.q,c.a,f.a],null,null),a["ɵdid"](7,4210688,null,0,s.a,[[2,o.a],u.a,a.ElementRef],null,null),a["ɵdid"](8,16384,null,0,l.h,[[3,i.d],l.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,6,0),t(e,8,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,1,[e.parent.context.$implicit.name,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,8).validClass,a["ɵnov"](e,8).invalidClass])}))}function L(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,i.v,[a.ElementRef,a.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),a["ɵdid"](2,147456,null,0,i.F,[a.ElementRef,a.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,null),t(e,2,0,null)}),(function(t,e){t(e,3,0,null==e.parent.parent.context.$implicit||null==e.parent.parent.context.$implicit.typeConfig?null:e.parent.parent.context.$implicit.typeConfig.placeholder)}))}function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,i.v,[a.ElementRef,a.Renderer2,[2,i.A]],{value:[0,"value"]},null),a["ɵdid"](2,147456,null,0,i.F,[a.ElementRef,a.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.text)}))}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,11,"select",[["class","form-control custom-select"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t,1).onChange(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.A,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.A]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,4210688,null,0,s.a,[[2,o.a],u.a,a.ElementRef],null,null),a["ɵdid"](7,16384,null,0,l.h,[[3,i.d],l.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,L)),a["ɵdid"](9,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,D)),a["ɵdid"](11,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,7,0,e.parent.context.$implicit.name),t(e,9,0,null==e.parent.context.$implicit||null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.placeholder),t(e,11,0,null==e.parent.context.$implicit||null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.options)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,7).validClass,a["ɵnov"](e,7).invalidClass)}))}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-select-badges",[],[[8,"id",0]],null,null,h.b,h.a)),a["ɵdid"](1,49152,null,0,g.a,[p.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"],customBadges:[3,"customBadges"]},null)],(function(t,e){t(e,1,0,e.parent.context.$implicit.value,null==e.parent.context.$implicit||null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.options,null==e.parent.context.$implicit||null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.messages,null==e.parent.context.$implicit||null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.customBadges)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name)}))}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.getError(e.parent.context.$implicit))}))}function j(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,21,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,20,"div",[],[[8,"className",0],[2,"has-error",null],[2,"has-success",null]],null,null,b.b,b.a)),a["ɵdid"](2,1163264,null,2,l.c,[a.ElementRef,l.g],null,null),a["ɵqud"](603979776,1,{FormControlNames:1}),a["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),a["ɵand"](16777216,null,0,1,null,A)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](7,0,null,0,14,"div",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](9,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpod"](10,{"cd-col-form-input":0,"col-sm-12":1}),(t()(),a["ɵand"](16777216,null,null,2,null,k)),a["ɵdid"](12,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpad"](13,2),(t()(),a["ɵand"](16777216,null,null,1,null,E)),a["ɵdid"](15,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,P)),a["ɵdid"](17,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,M)),a["ɵdid"](19,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,q)),a["ɵdid"](21,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0),t(e,6,0,e.context.$implicit.label);var r=t(e,10,0,e.context.$implicit.label,!e.context.$implicit.label);t(e,9,0,r);var i=t(e,13,0,"text","number").includes(e.context.$implicit.type);t(e,12,0,i),t(e,15,0,"binary"===e.context.$implicit.type),t(e,17,0,"select"===e.context.$implicit.type),t(e,19,0,"select-badges"===e.context.$implicit.type),t(e,21,0,n.formGroup.showError(e.context.$implicit.name,a["ɵnov"](e.parent,7)))}),(function(t,e){t(e,1,0,a["ɵinlineInterpolate"](1,"form-group row cd-",e.context.$implicit.name,"-form-group"),a["ɵnov"](e,2).hasErrors,a["ɵnov"](e,2).hasSuccess)}))}function F(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,22,"cd-modal",[],null,null,null,m.c,m.b)),a["ɵdid"](1,49152,null,0,y.a,[],{modalRef:[0,"modalRef"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,C)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](4,0,null,1,18,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,17,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,7).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,7).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,10).onSubmit()&&r),r}),null,null)),a["ɵdid"](6,16384,null,0,i.G,[],null,null),a["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,i.d,null,[i.l]),a["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),a["ɵdid"](10,16384,null,0,l.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](11,0,null,null,4,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,R)),a["ɵdid"](13,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,j)),a["ɵdid"](15,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](16,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](17,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](18,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0,r=t.component;return"submitAction"===e&&(a=!1!==r.onSubmitForm(r.formGroup.value)&&a),a}),v.b,v.a)),a["ɵdid"](19,114688,null,0,x.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵted"](20,0,[" "," "])),(t()(),a["ɵeld"](21,0,null,null,1,"cd-back-button",[],null,null,null,_.b,_.a)),a["ɵdid"](22,49152,null,0,T.a,[r.Location,O.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,3,0,n.titleText),t(e,7,0,n.formGroup),t(e,10,0,n.formGroup),t(e,13,0,n.message),t(e,15,0,n.fields),t(e,19,0,n.formGroup),t(e,22,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,5,0,a["ɵnov"](e,9).ngClassUntouched,a["ɵnov"](e,9).ngClassTouched,a["ɵnov"](e,9).ngClassPristine,a["ɵnov"](e,9).ngClassDirty,a["ɵnov"](e,9).ngClassValid,a["ɵnov"](e,9).ngClassInvalid,a["ɵnov"](e,9).ngClassPending),t(e,20,0,n.submitButtonText)}))}function G(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-form-modal",[],null,null,null,F,N)),a["ɵdid"](1,114688,null,0,w.a,[S.a,I.a,f.a,c.a,p.a],null,null)],(function(t,e){t(e,1,0)}),null)}var V=a["ɵccf"]("cd-form-modal",w.a,G,{},{},[])},hh1v:function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},hmSm:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},honF:function(t,e,n){!function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n("wd/R"))},hpHm:function(t,e,n){"use strict";n.d(e,"a",(function(){return g})),n.d(e,"b",(function(){return p})),n.d(e,"c",(function(){return c})),n.d(e,"d",(function(){return h})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return s})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return u})),n.d(e,"i",(function(){return y})),n.d(e,"j",(function(){return d}));var a=n("8Y7J");class r{constructor(t,e){this.open=t,this.close=e||t}isManual(){return"manual"===this.open||"manual"===this.close}}const i={hover:["mouseover","mouseout"],focus:["focusin","focusout"]};function s(t,e=i){const n=(t||"").trim();if(0===n.length)return[];const a=n.split(/\s+/).map(t=>t.split(":")).map(t=>{const n=e[t[0]]||t;return new r(n[0],n[1])}),s=a.filter(t=>t.isManual());if(s.length>1)throw new Error("Triggers parse error: only one manual trigger is allowed");if(1===s.length&&a.length>1)throw new Error("Triggers parse error: manual trigger can't be mixed with other triggers");return a}function o(t,e){const n=s(e.triggers),a=e.target;if(1===n.length&&n[0].isManual())return Function.prototype;const r=[],i=[],o=()=>{i.forEach(t=>r.push(t())),i.length=0};return n.forEach(n=>{const s=n.open===n.close,u=s?e.toggle:e.show;s||i.push(()=>t.listen(a,n.close,e.hide)),r.push(t.listen(a,n.open,()=>u(o)))}),()=>{r.forEach(t=>t())}}function u(t,e){return e.outsideClick?t.listen("document","click",t=>{e.target&&e.target.contains(t.target)||e.targets&&e.targets.some(e=>e.contains(t.target))||e.hide()}):Function.prototype}function l(t,e){return e.outsideEsc?t.listen("document","keyup.esc",t=>{e.target&&e.target.contains(t.target)||e.targets&&e.targets.some(e=>e.contains(t.target))||e.hide()}):Function.prototype}const d="undefined"!=typeof window&&window||{},c=d.document;let f;function h(){return void 0===d||(void 0===d.__theme?(f||(f=function(){if("undefined"==typeof document)return null;const t=document.createElement("span");t.innerText="test bs version",document.body.appendChild(t),t.classList.add("d-none");const e=t.getBoundingClientRect();return document.body.removeChild(t),e&&0===e.top?"bs4":"bs3"}()),"bs3"===f):"bs4"!==d.__theme)}function g(t){return function(t,e){const n=` __${e}Value`;Object.defineProperty(t,e,{get(){return this[n]},set(t){const a=this[n];this[n]=t,a!==t&&this[e+"Change"]&&this[e+"Change"].emit(t)}})}}class p{static reflow(t){}static getStyles(t){let e=t.ownerDocument.defaultView;return e&&e.opener||(e=d),e.getComputedStyle(t)}}const b={},m="undefined"==typeof console||!("warn"in console);function y(t){!Object(a.isDevMode)()||m||t in b||(b[t]=!0,console.warn(t))}},hrfs:function(t,e,n){"use strict";n.d(e,"a",(function(){return b})),n.d(e,"b",(function(){return m})),n.d(e,"c",(function(){return g}));var a=n("8Y7J"),r=n("MO+k"),i=n("2Vo4"),s=n("lsW8");const o=[[255,99,132],[54,162,235],[255,206,86],[231,233,237],[75,192,192],[151,187,205],[220,220,220],[247,70,74],[70,191,189],[253,180,92],[148,159,177],[77,83,96]];function u(t,e){return"rgba("+t.concat(e).join(",")+")"}function l(t,e){return Math.floor(Math.random()*(e-t+1))+t}function d(t){return{backgroundColor:t.map(t=>u(t,.6)),borderColor:t.map(()=>"#fff"),pointBackgroundColor:t.map(t=>u(t,1)),pointBorderColor:t.map(()=>"#fff"),pointHoverBackgroundColor:t.map(t=>u(t,1)),pointHoverBorderColor:t.map(t=>u(t,1))}}function c(){return[l(0,255),l(0,255),l(0,255)]}function f(t){return o[t]||c()}function h(t){const e=new Array(t);for(let n=0;n<t;n++)e[n]=o[n]||c();return e}let g=(()=>{class t{constructor(){this.pColorschemesOptions={},this.colorschemesOptions=new i.a({})}setColorschemesOptions(t){this.pColorschemesOptions=t,this.colorschemesOptions.next(t)}getColorschemesOptions(){return this.pColorschemesOptions}}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t},token:t,providedIn:"root"}),t})();const p=function(){var t={Default:0,Update:1,Refresh:2};return t[t.Default]="Default",t[t.Update]="Update",t[t.Refresh]="Refresh",t}();class b{constructor(t,e){this.element=t,this.themeService=e,this.options={},this.chartClick=new a.EventEmitter,this.chartHover=new a.EventEmitter,this.old={dataExists:!1,dataLength:0,datasetsExists:!1,datasetsLength:0,datasetsDataObjects:[],datasetsDataLengths:[],colorsExists:!1,colors:[],labelsExist:!1,labels:[],legendExists:!1,legend:{}},this.subs=[]}static registerPlugin(t){r.Chart.plugins.register(t)}static unregisterPlugin(t){r.Chart.plugins.unregister(t)}ngOnInit(){this.ctx=this.element.nativeElement.getContext("2d"),this.refresh(),this.subs.push(this.themeService.colorschemesOptions.subscribe(t=>this.themeChanged(t)))}themeChanged(t){this.refresh()}ngDoCheck(){if(!this.chart)return;let t=p.Default;const e=e=>{t=e>t?e:t};switch(!!this.data!==this.old.dataExists&&(this.propagateDataToDatasets(this.data),this.old.dataExists=!!this.data,e(p.Update)),this.data&&this.data.length!==this.old.dataLength&&(this.old.dataLength=this.data&&this.data.length||0,e(p.Update)),!!this.datasets!==this.old.datasetsExists&&(this.old.datasetsExists=!!this.datasets,e(p.Update)),this.datasets&&this.datasets.length!==this.old.datasetsLength&&(this.old.datasetsLength=this.datasets&&this.datasets.length||0,e(p.Update)),this.datasets&&this.datasets.filter((t,e)=>t.data!==this.old.datasetsDataObjects[e]).length&&(this.old.datasetsDataObjects=this.datasets.map(t=>t.data),e(p.Update)),this.datasets&&this.datasets.filter((t,e)=>t.data.length!==this.old.datasetsDataLengths[e]).length&&(this.old.datasetsDataLengths=this.datasets.map(t=>t.data.length),e(p.Update)),!!this.colors!==this.old.colorsExists&&(this.old.colorsExists=!!this.colors,this.updateColors(),e(p.Update)),this.colors&&this.colors.filter((t,e)=>!this.colorsEqual(t,this.old.colors[e])).length&&(this.old.colors=this.colors.map(t=>this.copyColor(t)),this.updateColors(),e(p.Update)),!!this.labels!==this.old.labelsExist&&(this.old.labelsExist=!!this.labels,e(p.Update)),this.labels&&this.labels.filter((t,e)=>!this.labelsEqual(t,this.old.labels[e])).length&&(this.old.labels=this.labels.map(t=>this.copyLabel(t)),e(p.Update)),!!this.options.legend!==this.old.legendExists&&(this.old.legendExists=!!this.options.legend,e(p.Refresh)),this.options.legend&&this.options.legend.position!==this.old.legend.position&&(this.old.legend.position=this.options.legend.position,e(p.Refresh)),t){case p.Default:break;case p.Update:this.update();break;case p.Refresh:this.refresh()}}copyLabel(t){return Array.isArray(t)?[...t]:t}labelsEqual(t,e){return Array.isArray(t)===Array.isArray(e)&&(Array.isArray(t)||t===e)&&(!Array.isArray(t)||t.length===e.length)&&(!Array.isArray(t)||0===t.filter((t,n)=>t!==e[n]).length)}copyColor(t){return{backgroundColor:t.backgroundColor,borderWidth:t.borderWidth,borderColor:t.borderColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,pointBorderColor:t.pointBorderColor,pointBackgroundColor:t.pointBackgroundColor,pointBorderWidth:t.pointBorderWidth,pointRadius:t.pointRadius,pointHoverRadius:t.pointHoverRadius,pointHitRadius:t.pointHitRadius,pointHoverBackgroundColor:t.pointHoverBackgroundColor,pointHoverBorderColor:t.pointHoverBorderColor,pointHoverBorderWidth:t.pointHoverBorderWidth,pointStyle:t.pointStyle,hoverBackgroundColor:t.hoverBackgroundColor,hoverBorderColor:t.hoverBorderColor,hoverBorderWidth:t.hoverBorderWidth}}colorsEqual(t,e){return!t==!e&&(!t||t.backgroundColor===e.backgroundColor&&t.borderWidth===e.borderWidth&&t.borderColor===e.borderColor&&t.borderCapStyle===e.borderCapStyle&&t.borderDash===e.borderDash&&t.borderDashOffset===e.borderDashOffset&&t.borderJoinStyle===e.borderJoinStyle&&t.pointBorderColor===e.pointBorderColor&&t.pointBackgroundColor===e.pointBackgroundColor&&t.pointBorderWidth===e.pointBorderWidth&&t.pointRadius===e.pointRadius&&t.pointHoverRadius===e.pointHoverRadius&&t.pointHitRadius===e.pointHitRadius&&t.pointHoverBackgroundColor===e.pointHoverBackgroundColor&&t.pointHoverBorderColor===e.pointHoverBorderColor&&t.pointHoverBorderWidth===e.pointHoverBorderWidth&&t.pointStyle===e.pointStyle&&t.hoverBackgroundColor===e.hoverBackgroundColor&&t.hoverBorderColor===e.hoverBorderColor&&t.hoverBorderWidth===e.hoverBorderWidth)}updateColors(){this.datasets.forEach((t,e)=>{this.colors&&this.colors[e]?Object.assign(t,this.colors[e]):Object.assign(t,function(t,e,n){if("pie"===t||"doughnut"===t)return d(h(n));if("polarArea"===t)return{backgroundColor:(a=h(n)).map(t=>u(t,.6)),borderColor:a.map(t=>u(t,1)),hoverBackgroundColor:a.map(t=>u(t,.8)),hoverBorderColor:a.map(t=>u(t,1))};var a;if("line"===t||"radar"===t)return function(t){return{backgroundColor:u(t,.4),borderColor:u(t,1),pointBackgroundColor:u(t,1),pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:u(t,.8)}}(f(e));if("bar"===t||"horizontalBar"===t)return function(t){return{backgroundColor:u(t,.6),borderColor:u(t,1),hoverBackgroundColor:u(t,.8),hoverBorderColor:u(t,1)}}(f(e));if("bubble"===t)return d(h(n));if("scatter"===t)return d(h(n));throw new Error("getColors - Unsupported chart type "+t)}(this.chartType,e,t.data.length),Object.assign({},t))})}ngOnChanges(t){let e=p.Default;const n=t=>{e=t>e?t:e};switch(t.hasOwnProperty("data")&&t.data.currentValue&&(this.propagateDataToDatasets(t.data.currentValue),n(p.Update)),t.hasOwnProperty("datasets")&&t.datasets.currentValue&&(this.propagateDatasetsToData(t.datasets.currentValue),n(p.Update)),t.hasOwnProperty("labels")&&(this.chart&&(this.chart.data.labels=t.labels.currentValue),n(p.Update)),t.hasOwnProperty("legend")&&(this.chart&&(this.chart.config.options.legend.display=t.legend.currentValue,this.chart.generateLegend()),n(p.Update)),t.hasOwnProperty("options")&&n(p.Refresh),e){case p.Update:this.update();break;case p.Refresh:case p.Default:this.refresh()}}ngOnDestroy(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.subs.forEach(t=>t.unsubscribe())}update(t,e){if(this.chart)return this.chart.update(t,e)}hideDataset(t,e){this.chart.getDatasetMeta(t).hidden=e,this.chart.update()}isDatasetHidden(t){return this.chart.getDatasetMeta(t).hidden}toBase64Image(){return this.chart.toBase64Image()}getChartConfiguration(){const t=this.getDatasets(),e=Object.assign({},this.options);!1===this.legend&&(e.legend={display:!1}),e.hover=e.hover||{},e.hover.onHover||(e.hover.onHover=(t,e)=>{e&&!e.length||this.chartHover.emit({event:t,active:e})}),e.onClick||(e.onClick=(t,e)=>{this.chartClick.emit({event:t,active:e})});const n=this.smartMerge(e,this.themeService.getColorschemesOptions());return{type:this.chartType,data:{labels:this.labels||[],datasets:t},plugins:this.plugins,options:n}}getChartBuilder(t){const e=this.getChartConfiguration();return new r.Chart(t,e)}smartMerge(t,e,n=0){if(0===n&&(t=Object(s.cloneDeep)(t)),Object.keys(e).forEach(a=>{if(Array.isArray(e[a])){const r=t[a];r&&r.forEach(t=>{this.smartMerge(t,e[a][0],n+1)})}else"object"==typeof e[a]?(a in t||(t[a]={}),this.smartMerge(t[a],e[a],n+1)):t[a]=e[a]}),0===n)return t}isMultiLineLabel(t){return Array.isArray(t)}joinLabel(t){return t?this.isMultiLineLabel(t)?t.join(" "):t:null}propagateDatasetsToData(t){this.data=this.datasets.map(t=>t.data),this.chart&&(this.chart.data.datasets=t),this.updateColors()}propagateDataToDatasets(t){this.isMultiDataSet(t)?this.datasets&&t.length===this.datasets.length?this.datasets.forEach((e,n)=>{e.data=t[n]}):(this.datasets=t.map((t,e)=>({data:t,label:this.joinLabel(this.labels[e])||"Label "+e})),this.chart&&(this.chart.data.datasets=this.datasets)):this.datasets?(this.datasets[0].data=t,this.datasets.splice(1)):(this.datasets=[{data:t}],this.chart&&(this.chart.data.datasets=this.datasets)),this.updateColors()}isMultiDataSet(t){return Array.isArray(t[0])}getDatasets(){if(!this.datasets&&!this.data)throw new Error("ng-charts configuration error, data or datasets field are required to render chart "+this.chartType);return this.datasets?(this.propagateDatasetsToData(this.datasets),this.datasets):this.data?(this.propagateDataToDatasets(this.data),this.datasets):void 0}refresh(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.ctx&&(this.chart=this.getChartBuilder(this.ctx))}}class m{}},i4WA:function(t,e,n){"use strict";var a=n("8Y7J");n("6qls"),n("tz6c"),n("GiVz"),n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var r=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function i(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"a",[["target","_blank"]],[[8,"href",4]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,0,0,a["ɵinlineInterpolate"](1,"",n.docUrl,"")),t(e,1,0,n.docText)}))}},iEDd:function(t,e,n){!function(t){"use strict";t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},iExv:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.i18n=t}transform(t,e=this.i18n("Yes"),n=this.i18n("No")){return Boolean(t)?e:n}}},iInd:function(t,e,n){"use strict";var a=n("SVse"),r=n("8Y7J"),i=n("LRne"),s=n("Cfvw"),o=n("2Vo4"),u=n("HDdC"),l=n("sVev"),d=n("z+Ro"),c=n("DH7j"),f=n("l7GE"),h=n("ZUHj"),g=n("yCtX");const p={};class b{constructor(t){this.resultSelector=t}call(t,e){return e.subscribe(new m(t,this.resultSelector))}}class m extends f.a{constructor(t,e){super(t),this.resultSelector=e,this.active=0,this.values=[],this.observables=[]}_next(t){this.values.push(p),this.observables.push(t)}_complete(){const t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(let n=0;n<e;n++){const e=t[n];this.add(Object(h.a)(this,e,e,n))}}}notifyComplete(t){0==(this.active-=1)&&this.destination.complete()}notifyNext(t,e,n,a,r){const i=this.values,s=this.toRespond?i[n]===p?--this.toRespond:this.toRespond:0;i[n]=e,0===s&&(this.resultSelector?this._tryResultSelector(i):this.destination.next(i.slice()))}_tryResultSelector(t){let e;try{e=this.resultSelector.apply(this,t)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}var y=n("EY2u");function v(t){return new u.a(e=>{let n;try{n=t()}catch(a){return void e.error(a)}return(n?Object(s.a)(n):Object(y.b)()).subscribe(e)})}var x=n("XNiG"),_=n("lJxs"),T=n("0EUg"),O=n("NJ9Y"),w=n("JIr8"),S=n("SxV6"),I=n("5+tZ"),N=n("7o/Q");class C{constructor(t,e,n){this.predicate=t,this.thisArg=e,this.source=n}call(t,e){return e.subscribe(new R(t,this.predicate,this.thisArg,this.source))}}class R extends N.a{constructor(t,e,n,a){super(t),this.predicate=e,this.thisArg=n,this.source=a,this.index=0,this.thisArg=n||this}notifyComplete(t){this.destination.next(t),this.destination.complete()}_next(t){let e=!1;try{e=this.predicate.call(this.thisArg,t,this.index++,this.source)}catch(n){return void this.destination.error(n)}e||this.notifyComplete(!1)}_complete(){this.notifyComplete(!0)}}var A=n("eIep"),k=n("IzEk"),E=n("GyhO"),L=n("Kqap"),D=n("pLZG"),P=n("bOdf"),M=n("128B"),q=n("vkgz"),j=n("quSY");class F{constructor(t){this.callback=t}call(t,e){return e.subscribe(new G(t,this.callback))}}class G extends N.a{constructor(t,e){super(t),this.add(new j.a(e))}}var V=n("bHdf"),z=n("cUpR");n.d(e,"F",(function(){return st})),n.d(e,"v",(function(){return _n})),n.d(e,"C",(function(){return kn})),n.d(e,"x",(function(){return Sn})),n.d(e,"D",(function(){return En})),n.d(e,"E",(function(){return Ln})),n.d(e,"z",(function(){return Nn})),n.d(e,"y",(function(){return In})),n.d(e,"B",(function(){return An})),n.d(e,"w",(function(){return On})),n.d(e,"A",(function(){return Rn})),n.d(e,"G",(function(){return vn})),n.d(e,"n",(function(){return on})),n.d(e,"p",(function(){return un})),n.d(e,"o",(function(){return dn})),n.d(e,"r",(function(){return hn})),n.d(e,"d",(function(){return H})),n.d(e,"e",(function(){return Y})),n.d(e,"l",(function(){return Je})),n.d(e,"m",(function(){return sn})),n.d(e,"k",(function(){return Qe})),n.d(e,"i",(function(){return xn})),n.d(e,"j",(function(){return Dn})),n.d(e,"q",(function(){return wn})),n.d(e,"b",(function(){return fn})),n.d(e,"f",(function(){return mn})),n.d(e,"g",(function(){return bn})),n.d(e,"h",(function(){return pn})),n.d(e,"s",(function(){return yn})),n.d(e,"a",(function(){return $t})),n.d(e,"t",(function(){return tn})),n.d(e,"c",(function(){return Ct})),n.d(e,"u",(function(){return Nt}));class B{constructor(t,e){this.id=t,this.url=e}}class Y extends B{constructor(t,e,n="imperative",a=null){super(t,e),this.navigationTrigger=n,this.restoredState=a}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class H extends B{constructor(t,e,n){super(t,e),this.urlAfterRedirects=n}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class U extends B{constructor(t,e,n){super(t,e),this.reason=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class W extends B{constructor(t,e,n){super(t,e),this.error=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class K extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class $ extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class J extends B{constructor(t,e,n,a,r){super(t,e),this.urlAfterRedirects=n,this.state=a,this.shouldActivate=r}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class Z extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Q extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class X{constructor(t){this.route=t}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class tt{constructor(t){this.route=t}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class et{constructor(t){this.snapshot=t}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class nt{constructor(t){this.snapshot=t}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class at{constructor(t){this.snapshot=t}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class rt{constructor(t){this.snapshot=t}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class it{constructor(t,e,n){this.routerEvent=t,this.position=e,this.anchor=n}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class st{}class ot{constructor(t){this.params=t||{}}has(t){return this.params.hasOwnProperty(t)}get(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e[0]:e}return null}getAll(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e:[e]}return[]}get keys(){return Object.keys(this.params)}}function ut(t){return new ot(t)}function lt(t){const e=Error("NavigationCancelingError: "+t);return e.ngNavigationCancelingError=!0,e}function dt(t,e,n){const a=n.path.split("/");if(a.length>t.length)return null;if("full"===n.pathMatch&&(e.hasChildren()||a.length<t.length))return null;const r={};for(let i=0;i<a.length;i++){const e=a[i],n=t[i];if(e.startsWith(":"))r[e.substring(1)]=n;else if(e!==n.path)return null}return{consumed:t.slice(0,a.length),posParams:r}}class ct{constructor(t,e){this.routes=t,this.module=e}}function ft(t,e=""){for(let n=0;n<t.length;n++){const a=t[n];ht(a,gt(e,a))}}function ht(t,e){if(!t)throw new Error(`\n      Invalid configuration of route '${e}': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    `);if(Array.isArray(t))throw new Error(`Invalid configuration of route '${e}': Array cannot be specified`);if(!t.component&&!t.children&&!t.loadChildren&&t.outlet&&"primary"!==t.outlet)throw new Error(`Invalid configuration of route '${e}': a componentless route without children or loadChildren cannot have a named outlet set`);if(t.redirectTo&&t.children)throw new Error(`Invalid configuration of route '${e}': redirectTo and children cannot be used together`);if(t.redirectTo&&t.loadChildren)throw new Error(`Invalid configuration of route '${e}': redirectTo and loadChildren cannot be used together`);if(t.children&&t.loadChildren)throw new Error(`Invalid configuration of route '${e}': children and loadChildren cannot be used together`);if(t.redirectTo&&t.component)throw new Error(`Invalid configuration of route '${e}': redirectTo and component cannot be used together`);if(t.path&&t.matcher)throw new Error(`Invalid configuration of route '${e}': path and matcher cannot be used together`);if(void 0===t.redirectTo&&!t.component&&!t.children&&!t.loadChildren)throw new Error(`Invalid configuration of route '${e}'. One of the following must be provided: component, redirectTo, children or loadChildren`);if(void 0===t.path&&void 0===t.matcher)throw new Error(`Invalid configuration of route '${e}': routes must have either a path or a matcher specified`);if("string"==typeof t.path&&"/"===t.path.charAt(0))throw new Error(`Invalid configuration of route '${e}': path cannot start with a slash`);if(""===t.path&&void 0!==t.redirectTo&&void 0===t.pathMatch)throw new Error(`Invalid configuration of route '{path: "${e}", redirectTo: "${t.redirectTo}"}': please provide 'pathMatch'. The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`);if(void 0!==t.pathMatch&&"full"!==t.pathMatch&&"prefix"!==t.pathMatch)throw new Error(`Invalid configuration of route '${e}': pathMatch can only be set to 'prefix' or 'full'`);t.children&&ft(t.children,e)}function gt(t,e){return e?t||e.path?t&&!e.path?t+"/":!t&&e.path?e.path:`${t}/${e.path}`:"":t}function pt(t){const e=t.children&&t.children.map(pt),n=e?Object.assign({},t,{children:e}):Object.assign({},t);return!n.component&&(e||n.loadChildren)&&n.outlet&&"primary"!==n.outlet&&(n.component=st),n}function bt(t,e){const n=Object.keys(t),a=Object.keys(e);if(!n||!a||n.length!=a.length)return!1;let r;for(let i=0;i<n.length;i++)if(r=n[i],t[r]!==e[r])return!1;return!0}function mt(t){return Array.prototype.concat.apply([],t)}function yt(t){return t.length>0?t[t.length-1]:null}function vt(t,e){for(const n in t)t.hasOwnProperty(n)&&e(t[n],n)}function xt(t){return Object(r["ɵisObservable"])(t)?t:Object(r["ɵisPromise"])(t)?Object(s.a)(Promise.resolve(t)):Object(i.a)(t)}function _t(t,e,n){return n?function(t,e){return bt(t,e)}(t.queryParams,e.queryParams)&&function t(e,n){if(!St(e.segments,n.segments))return!1;if(e.numberOfChildren!==n.numberOfChildren)return!1;for(const a in n.children){if(!e.children[a])return!1;if(!t(e.children[a],n.children[a]))return!1}return!0}(t.root,e.root):function(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(n=>e[n]===t[n])}(t.queryParams,e.queryParams)&&function t(e,n){return function e(n,a,r){if(n.segments.length>r.length)return!!St(n.segments.slice(0,r.length),r)&&!a.hasChildren();if(n.segments.length===r.length){if(!St(n.segments,r))return!1;for(const e in a.children){if(!n.children[e])return!1;if(!t(n.children[e],a.children[e]))return!1}return!0}{const t=r.slice(0,n.segments.length),i=r.slice(n.segments.length);return!!St(n.segments,t)&&!!n.children.primary&&e(n.children.primary,a,i)}}(e,n,n.segments)}(t.root,e.root)}class Tt{constructor(t,e,n){this.root=t,this.queryParams=e,this.fragment=n}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ut(this.queryParams)),this._queryParamMap}toString(){return Rt.serialize(this)}}class Ot{constructor(t,e){this.segments=t,this.children=e,this.parent=null,vt(e,(t,e)=>t.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return At(this)}}class wt{constructor(t,e){this.path=t,this.parameters=e}get parameterMap(){return this._parameterMap||(this._parameterMap=ut(this.parameters)),this._parameterMap}toString(){return Mt(this)}}function St(t,e){return t.length===e.length&&t.every((t,n)=>t.path===e[n].path)}function It(t,e){let n=[];return vt(t.children,(t,a)=>{"primary"===a&&(n=n.concat(e(t,a)))}),vt(t.children,(t,a)=>{"primary"!==a&&(n=n.concat(e(t,a)))}),n}class Nt{}class Ct{parse(t){const e=new Vt(t);return new Tt(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())}serialize(t){return`${"/"+function t(e,n){if(!e.hasChildren())return At(e);if(n){const n=e.children.primary?t(e.children.primary,!1):"",a=[];return vt(e.children,(e,n)=>{"primary"!==n&&a.push(`${n}:${t(e,!1)}`)}),a.length>0?`${n}(${a.join("//")})`:n}{const n=It(e,(n,a)=>"primary"===a?[t(e.children.primary,!1)]:[`${a}:${t(n,!1)}`]);return`${At(e)}/(${n.join("//")})`}}(t.root,!0)}${function(t){const e=Object.keys(t).map(e=>{const n=t[e];return Array.isArray(n)?n.map(t=>`${Et(e)}=${Et(t)}`).join("&"):`${Et(e)}=${Et(n)}`});return e.length?"?"+e.join("&"):""}(t.queryParams)}${"string"==typeof t.fragment?"#"+encodeURI(t.fragment):""}`}}const Rt=new Ct;function At(t){return t.segments.map(t=>Mt(t)).join("/")}function kt(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Et(t){return kt(t).replace(/%3B/gi,";")}function Lt(t){return kt(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Dt(t){return decodeURIComponent(t)}function Pt(t){return Dt(t.replace(/\+/g,"%20"))}function Mt(t){return`${Lt(t.path)}${e=t.parameters,Object.keys(e).map(t=>`;${Lt(t)}=${Lt(e[t])}`).join("")}`;var e}const qt=/^[^\/()?;=#]+/;function jt(t){const e=t.match(qt);return e?e[0]:""}const Ft=/^[^=?&#]+/,Gt=/^[^?&#]+/;class Vt{constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Ot([],{}):new Ot([],this.parseChildren())}parseQueryParams(){const t={};if(this.consumeOptional("?"))do{this.parseQueryParam(t)}while(this.consumeOptional("&"));return t}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());let e={};this.peekStartsWith("/(")&&(this.capture("/"),e=this.parseParens(!0));let n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1)),(t.length>0||Object.keys(e).length>0)&&(n.primary=new Ot(t,e)),n}parseSegment(){const t=jt(this.remaining);if(""===t&&this.peekStartsWith(";"))throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);return this.capture(t),new wt(Dt(t),this.parseMatrixParams())}parseMatrixParams(){const t={};for(;this.consumeOptional(";");)this.parseParam(t);return t}parseParam(t){const e=jt(this.remaining);if(!e)return;this.capture(e);let n="";if(this.consumeOptional("=")){const t=jt(this.remaining);t&&(n=t,this.capture(n))}t[Dt(e)]=Dt(n)}parseQueryParam(t){const e=function(t){const e=t.match(Ft);return e?e[0]:""}(this.remaining);if(!e)return;this.capture(e);let n="";if(this.consumeOptional("=")){const t=function(t){const e=t.match(Gt);return e?e[0]:""}(this.remaining);t&&(n=t,this.capture(n))}const a=Pt(e),r=Pt(n);if(t.hasOwnProperty(a)){let e=t[a];Array.isArray(e)||(e=[e],t[a]=e),e.push(r)}else t[a]=r}parseParens(t){const e={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const n=jt(this.remaining),a=this.remaining[n.length];if("/"!==a&&")"!==a&&";"!==a)throw new Error(`Cannot parse url '${this.url}'`);let r=void 0;n.indexOf(":")>-1?(r=n.substr(0,n.indexOf(":")),this.capture(r),this.capture(":")):t&&(r="primary");const i=this.parseChildren();e[r]=1===Object.keys(i).length?i.primary:new Ot([],i),this.consumeOptional("//")}return e}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)}capture(t){if(!this.consumeOptional(t))throw new Error(`Expected "${t}".`)}}class zt{constructor(t){this._root=t}get root(){return this._root.value}parent(t){const e=this.pathFromRoot(t);return e.length>1?e[e.length-2]:null}children(t){const e=Bt(t,this._root);return e?e.children.map(t=>t.value):[]}firstChild(t){const e=Bt(t,this._root);return e&&e.children.length>0?e.children[0].value:null}siblings(t){const e=Yt(t,this._root);return e.length<2?[]:e[e.length-2].children.map(t=>t.value).filter(e=>e!==t)}pathFromRoot(t){return Yt(t,this._root).map(t=>t.value)}}function Bt(t,e){if(t===e.value)return e;for(const n of e.children){const e=Bt(t,n);if(e)return e}return null}function Yt(t,e){if(t===e.value)return[e];for(const n of e.children){const a=Yt(t,n);if(a.length)return a.unshift(e),a}return[]}class Ht{constructor(t,e){this.value=t,this.children=e}toString(){return`TreeNode(${this.value})`}}function Ut(t){const e={};return t&&t.children.forEach(t=>e[t.value.outlet]=t),e}class Wt extends zt{constructor(t,e){super(t),this.snapshot=e,Xt(this,t)}toString(){return this.snapshot.toString()}}function Kt(t,e){const n=function(t,e){const n=new Zt([],{},{},"",{},"primary",e,null,t.root,-1,{});return new Qt("",new Ht(n,[]))}(t,e),a=new o.a([new wt("",{})]),r=new o.a({}),i=new o.a({}),s=new o.a({}),u=new o.a(""),l=new $t(a,r,s,u,i,"primary",e,n.root);return l.snapshot=n.root,new Wt(new Ht(l,[]),n)}class $t{constructor(t,e,n,a,r,i,s,o){this.url=t,this.params=e,this.queryParams=n,this.fragment=a,this.data=r,this.outlet=i,this.component=s,this._futureSnapshot=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(Object(_.a)(t=>ut(t)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Object(_.a)(t=>ut(t)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Jt(t,e="emptyOnly"){const n=t.pathFromRoot;let a=0;if("always"!==e)for(a=n.length-1;a>=1;){const t=n[a],e=n[a-1];if(t.routeConfig&&""===t.routeConfig.path)a--;else{if(e.component)break;a--}}return function(t){return t.reduce((t,e)=>({params:Object.assign({},t.params,e.params),data:Object.assign({},t.data,e.data),resolve:Object.assign({},t.resolve,e._resolvedData)}),{params:{},data:{},resolve:{}})}(n.slice(a))}class Zt{constructor(t,e,n,a,r,i,s,o,u,l,d){this.url=t,this.params=e,this.queryParams=n,this.fragment=a,this.data=r,this.outlet=i,this.component=s,this.routeConfig=o,this._urlSegment=u,this._lastPathIndex=l,this._resolve=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=ut(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ut(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(t=>t.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class Qt extends zt{constructor(t,e){super(e),this.url=t,Xt(this,e)}toString(){return te(this._root)}}function Xt(t,e){e.value._routerState=t,e.children.forEach(e=>Xt(t,e))}function te(t){const e=t.children.length>0?` { ${t.children.map(te).join(", ")} } `:"";return`${t.value}${e}`}function ee(t){if(t.snapshot){const e=t.snapshot,n=t._futureSnapshot;t.snapshot=n,bt(e.queryParams,n.queryParams)||t.queryParams.next(n.queryParams),e.fragment!==n.fragment&&t.fragment.next(n.fragment),bt(e.params,n.params)||t.params.next(n.params),function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!bt(t[n],e[n]))return!1;return!0}(e.url,n.url)||t.url.next(n.url),bt(e.data,n.data)||t.data.next(n.data)}else t.snapshot=t._futureSnapshot,t.data.next(t._futureSnapshot.data)}function ne(t,e){var n,a;return bt(t.params,e.params)&&St(n=t.url,a=e.url)&&n.every((t,e)=>bt(t.parameters,a[e].parameters))&&!(!t.parent!=!e.parent)&&(!t.parent||ne(t.parent,e.parent))}function ae(t){return"object"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function re(t,e,n,a,r){let i={};return a&&vt(a,(t,e)=>{i[e]=Array.isArray(t)?t.map(t=>""+t):""+t}),new Tt(n.root===t?e:function t(e,n,a){const r={};return vt(e.children,(e,i)=>{r[i]=e===n?a:t(e,n,a)}),new Ot(e.segments,r)}(n.root,t,e),i,r)}class ie{constructor(t,e,n){if(this.isAbsolute=t,this.numberOfDoubleDots=e,this.commands=n,t&&n.length>0&&ae(n[0]))throw new Error("Root segment cannot have matrix parameters");const a=n.find(t=>"object"==typeof t&&null!=t&&t.outlets);if(a&&a!==yt(n))throw new Error("{outlets:{}} has to be the last command")}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class se{constructor(t,e,n){this.segmentGroup=t,this.processChildren=e,this.index=n}}function oe(t){return"object"==typeof t&&null!=t&&t.outlets?t.outlets.primary:""+t}function ue(t,e,n){if(t||(t=new Ot([],{})),0===t.segments.length&&t.hasChildren())return le(t,e,n);const a=function(t,e,n){let a=0,r=e;const i={match:!1,pathIndex:0,commandIndex:0};for(;r<t.segments.length;){if(a>=n.length)return i;const e=t.segments[r],s=oe(n[a]),o=a<n.length-1?n[a+1]:null;if(r>0&&void 0===s)break;if(s&&o&&"object"==typeof o&&void 0===o.outlets){if(!he(s,o,e))return i;a+=2}else{if(!he(s,{},e))return i;a++}r++}return{match:!0,pathIndex:r,commandIndex:a}}(t,e,n),r=n.slice(a.commandIndex);if(a.match&&a.pathIndex<t.segments.length){const e=new Ot(t.segments.slice(0,a.pathIndex),{});return e.children.primary=new Ot(t.segments.slice(a.pathIndex),t.children),le(e,0,r)}return a.match&&0===r.length?new Ot(t.segments,{}):a.match&&!t.hasChildren()?de(t,e,n):a.match?le(t,0,r):de(t,e,n)}function le(t,e,n){if(0===n.length)return new Ot(t.segments,{});{const a=function(t){return"object"!=typeof t[0]||void 0===t[0].outlets?{primary:t}:t[0].outlets}(n),r={};return vt(a,(n,a)=>{null!==n&&(r[a]=ue(t.children[a],e,n))}),vt(t.children,(t,e)=>{void 0===a[e]&&(r[e]=t)}),new Ot(t.segments,r)}}function de(t,e,n){const a=t.segments.slice(0,e);let r=0;for(;r<n.length;){if("object"==typeof n[r]&&void 0!==n[r].outlets){const t=ce(n[r].outlets);return new Ot(a,t)}if(0===r&&ae(n[0])){a.push(new wt(t.segments[e].path,n[0])),r++;continue}const i=oe(n[r]),s=r<n.length-1?n[r+1]:null;i&&s&&ae(s)?(a.push(new wt(i,fe(s))),r+=2):(a.push(new wt(i,{})),r++)}return new Ot(a,{})}function ce(t){const e={};return vt(t,(t,n)=>{null!==t&&(e[n]=de(new Ot([],{}),0,t))}),e}function fe(t){const e={};return vt(t,(t,n)=>e[n]=""+t),e}function he(t,e,n){return t==n.path&&bt(e,n.parameters)}class ge{constructor(t,e,n,a){this.routeReuseStrategy=t,this.futureState=e,this.currState=n,this.forwardEvent=a}activate(t){const e=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,n,t),ee(this.futureState.root),this.activateChildRoutes(e,n,t)}deactivateChildRoutes(t,e,n){const a=Ut(e);t.children.forEach(t=>{const e=t.value.outlet;this.deactivateRoutes(t,a[e],n),delete a[e]}),vt(a,(t,e)=>{this.deactivateRouteAndItsChildren(t,n)})}deactivateRoutes(t,e,n){const a=t.value,r=e?e.value:null;if(a===r)if(a.component){const r=n.getContext(a.outlet);r&&this.deactivateChildRoutes(t,e,r.children)}else this.deactivateChildRoutes(t,e,n);else r&&this.deactivateRouteAndItsChildren(e,n)}deactivateRouteAndItsChildren(t,e){this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,e):this.deactivateRouteAndOutlet(t,e)}detachAndStoreRouteSubtree(t,e){const n=e.getContext(t.value.outlet);if(n&&n.outlet){const e=n.outlet.detach(),a=n.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:e,route:t,contexts:a})}}deactivateRouteAndOutlet(t,e){const n=e.getContext(t.value.outlet);if(n){const a=Ut(t),r=t.value.component?n.children:e;vt(a,(t,e)=>this.deactivateRouteAndItsChildren(t,r)),n.outlet&&(n.outlet.deactivate(),n.children.onOutletDeactivated())}}activateChildRoutes(t,e,n){const a=Ut(e);t.children.forEach(t=>{this.activateRoutes(t,a[t.value.outlet],n),this.forwardEvent(new rt(t.value.snapshot))}),t.children.length&&this.forwardEvent(new nt(t.value.snapshot))}activateRoutes(t,e,n){const a=t.value,r=e?e.value:null;if(ee(a),a===r)if(a.component){const r=n.getOrCreateContext(a.outlet);this.activateChildRoutes(t,e,r.children)}else this.activateChildRoutes(t,e,n);else if(a.component){const e=n.getOrCreateContext(a.outlet);if(this.routeReuseStrategy.shouldAttach(a.snapshot)){const t=this.routeReuseStrategy.retrieve(a.snapshot);this.routeReuseStrategy.store(a.snapshot,null),e.children.onOutletReAttached(t.contexts),e.attachRef=t.componentRef,e.route=t.route.value,e.outlet&&e.outlet.attach(t.componentRef,t.route.value),pe(t.route)}else{const n=function(t){for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig;if(t&&t.component)return null}return null}(a.snapshot),r=n?n.module.componentFactoryResolver:null;e.attachRef=null,e.route=a,e.resolver=r,e.outlet&&e.outlet.activateWith(a,r),this.activateChildRoutes(t,null,e.children)}}else this.activateChildRoutes(t,null,n)}}function pe(t){ee(t.value),t.children.forEach(pe)}function be(t){return"function"==typeof t}function me(t){return t instanceof Tt}class ye{constructor(t){this.segmentGroup=t||null}}class ve{constructor(t){this.urlTree=t}}function xe(t){return new u.a(e=>e.error(new ye(t)))}function _e(t){return new u.a(e=>e.error(new ve(t)))}function Te(t){return new u.a(e=>e.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${t}'`)))}class Oe{constructor(t,e,n,a,i){this.configLoader=e,this.urlSerializer=n,this.urlTree=a,this.config=i,this.allowRedirects=!0,this.ngModule=t.get(r.NgModuleRef)}apply(){return this.expandSegmentGroup(this.ngModule,this.config,this.urlTree.root,"primary").pipe(Object(_.a)(t=>this.createUrlTree(t,this.urlTree.queryParams,this.urlTree.fragment))).pipe(Object(w.a)(t=>{if(t instanceof ve)return this.allowRedirects=!1,this.match(t.urlTree);if(t instanceof ye)throw this.noMatchError(t);throw t}))}match(t){return this.expandSegmentGroup(this.ngModule,this.config,t.root,"primary").pipe(Object(_.a)(e=>this.createUrlTree(e,t.queryParams,t.fragment))).pipe(Object(w.a)(t=>{if(t instanceof ye)throw this.noMatchError(t);throw t}))}noMatchError(t){return new Error(`Cannot match any routes. URL Segment: '${t.segmentGroup}'`)}createUrlTree(t,e,n){const a=t.segments.length>0?new Ot([],{primary:t}):t;return new Tt(a,e,n)}expandSegmentGroup(t,e,n,a){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(t,e,n).pipe(Object(_.a)(t=>new Ot([],t))):this.expandSegment(t,n,e,n.segments,a,!0)}expandChildren(t,e,n){return function(t,e){if(0===Object.keys(t).length)return Object(i.a)({});const n=[],a=[],r={};return vt(t,(t,i)=>{const s=e(i,t).pipe(Object(_.a)(t=>r[i]=t));"primary"===i?n.push(s):a.push(s)}),i.a.apply(null,n.concat(a)).pipe(Object(T.a)(),Object(O.a)(),Object(_.a)(()=>r))}(n.children,(n,a)=>this.expandSegmentGroup(t,e,a,n))}expandSegment(t,e,n,a,r,s){return Object(i.a)(...n).pipe(Object(_.a)(o=>this.expandSegmentAgainstRoute(t,e,n,o,a,r,s).pipe(Object(w.a)(t=>{if(t instanceof ye)return Object(i.a)(null);throw t}))),Object(T.a)(),Object(S.a)(t=>!!t),Object(w.a)((t,n)=>{if(t instanceof l.a||"EmptyError"===t.name){if(this.noLeftoversInUrl(e,a,r))return Object(i.a)(new Ot([],{}));throw new ye(e)}throw t}))}noLeftoversInUrl(t,e,n){return 0===e.length&&!t.children[n]}expandSegmentAgainstRoute(t,e,n,a,r,i,s){return Ne(a)!==i?xe(e):void 0===a.redirectTo?this.matchSegmentAgainstRoute(t,e,a,r):s&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i):xe(e)}expandSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i){return"**"===a.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,a,i):this.expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i)}expandWildCardWithParamsAgainstRouteUsingRedirect(t,e,n,a){const r=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith("/")?_e(r):this.lineralizeSegments(n,r).pipe(Object(I.a)(n=>{const r=new Ot(n,{});return this.expandSegment(t,r,e,n,a,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i){const{matched:s,consumedSegments:o,lastChild:u,positionalParamSegments:l}=we(e,a,r);if(!s)return xe(e);const d=this.applyRedirectCommands(o,a.redirectTo,l);return a.redirectTo.startsWith("/")?_e(d):this.lineralizeSegments(a,d).pipe(Object(I.a)(a=>this.expandSegment(t,e,n,a.concat(r.slice(u)),i,!1)))}matchSegmentAgainstRoute(t,e,n,a){if("**"===n.path)return n.loadChildren?this.configLoader.load(t.injector,n).pipe(Object(_.a)(t=>(n._loadedConfig=t,new Ot(a,{})))):Object(i.a)(new Ot(a,{}));const{matched:r,consumedSegments:s,lastChild:o}=we(e,n,a);if(!r)return xe(e);const u=a.slice(o);return this.getChildConfig(t,n,a).pipe(Object(I.a)(t=>{const n=t.module,a=t.routes,{segmentGroup:r,slicedSegments:o}=function(t,e,n,a){return n.length>0&&function(t,e,n){return n.some(n=>Ie(t,e,n)&&"primary"!==Ne(n))}(t,n,a)?{segmentGroup:Se(new Ot(e,function(t,e){const n={};n.primary=e;for(const a of t)""===a.path&&"primary"!==Ne(a)&&(n[Ne(a)]=new Ot([],{}));return n}(a,new Ot(n,t.children)))),slicedSegments:[]}:0===n.length&&function(t,e,n){return n.some(n=>Ie(t,e,n))}(t,n,a)?{segmentGroup:Se(new Ot(t.segments,function(t,e,n,a){const r={};for(const i of n)Ie(t,e,i)&&!a[Ne(i)]&&(r[Ne(i)]=new Ot([],{}));return Object.assign({},a,r)}(t,n,a,t.children))),slicedSegments:n}:{segmentGroup:t,slicedSegments:n}}(e,s,u,a);return 0===o.length&&r.hasChildren()?this.expandChildren(n,a,r).pipe(Object(_.a)(t=>new Ot(s,t))):0===a.length&&0===o.length?Object(i.a)(new Ot(s,{})):this.expandSegment(n,r,a,o,"primary",!0).pipe(Object(_.a)(t=>new Ot(s.concat(t.segments),t.children)))}))}getChildConfig(t,e,n){return e.children?Object(i.a)(new ct(e.children,t)):e.loadChildren?void 0!==e._loadedConfig?Object(i.a)(e._loadedConfig):function(t,e,n){const a=e.canLoad;return a&&0!==a.length?Object(s.a)(a).pipe(Object(_.a)(a=>{const r=t.get(a);let i;if(function(t){return t&&be(t.canLoad)}(r))i=r.canLoad(e,n);else{if(!be(r))throw new Error("Invalid CanLoad guard");i=r(e,n)}return xt(i)})).pipe(Object(T.a)(),(r=t=>!0===t,t=>t.lift(new C(r,void 0,t)))):Object(i.a)(!0);var r}(t.injector,e,n).pipe(Object(I.a)(n=>n?this.configLoader.load(t.injector,e).pipe(Object(_.a)(t=>(e._loadedConfig=t,t))):function(t){return new u.a(e=>e.error(lt(`Cannot load children because the guard of the route "path: '${t.path}'" returned false`)))}(e))):Object(i.a)(new ct([],t))}lineralizeSegments(t,e){let n=[],a=e.root;for(;;){if(n=n.concat(a.segments),0===a.numberOfChildren)return Object(i.a)(n);if(a.numberOfChildren>1||!a.children.primary)return Te(t.redirectTo);a=a.children.primary}}applyRedirectCommands(t,e,n){return this.applyRedirectCreatreUrlTree(e,this.urlSerializer.parse(e),t,n)}applyRedirectCreatreUrlTree(t,e,n,a){const r=this.createSegmentGroup(t,e.root,n,a);return new Tt(r,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)}createQueryParams(t,e){const n={};return vt(t,(t,a)=>{if("string"==typeof t&&t.startsWith(":")){const r=t.substring(1);n[a]=e[r]}else n[a]=t}),n}createSegmentGroup(t,e,n,a){const r=this.createSegments(t,e.segments,n,a);let i={};return vt(e.children,(e,r)=>{i[r]=this.createSegmentGroup(t,e,n,a)}),new Ot(r,i)}createSegments(t,e,n,a){return e.map(e=>e.path.startsWith(":")?this.findPosParam(t,e,a):this.findOrReturn(e,n))}findPosParam(t,e,n){const a=n[e.path.substring(1)];if(!a)throw new Error(`Cannot redirect to '${t}'. Cannot find '${e.path}'.`);return a}findOrReturn(t,e){let n=0;for(const a of e){if(a.path===t.path)return e.splice(n),a;n++}return t}}function we(t,e,n){if(""===e.path)return"full"===e.pathMatch&&(t.hasChildren()||n.length>0)?{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}:{matched:!0,consumedSegments:[],lastChild:0,positionalParamSegments:{}};const a=(e.matcher||dt)(n,t,e);return a?{matched:!0,consumedSegments:a.consumed,lastChild:a.consumed.length,positionalParamSegments:a.posParams}:{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}}function Se(t){if(1===t.numberOfChildren&&t.children.primary){const e=t.children.primary;return new Ot(t.segments.concat(e.segments),e.children)}return t}function Ie(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0!==n.redirectTo}function Ne(t){return t.outlet||"primary"}class Ce{constructor(t){this.path=t,this.route=this.path[this.path.length-1]}}class Re{constructor(t,e){this.component=t,this.route=e}}function Ae(t,e,n){const a=t._root;return function t(e,n,a,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=Ut(n);return e.children.forEach(e=>{!function(e,n,a,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=e.value,o=n?n.value:null,u=a?a.getContext(e.value.outlet):null;if(o&&s.routeConfig===o.routeConfig){const l=function(t,e,n){if("function"==typeof n)return n(t,e);switch(n){case"pathParamsChange":return!St(t.url,e.url);case"pathParamsOrQueryParamsChange":return!St(t.url,e.url)||!bt(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!ne(t,e)||!bt(t.queryParams,e.queryParams);case"paramsChange":default:return!ne(t,e)}}(o,s,s.routeConfig.runGuardsAndResolvers);l?i.canActivateChecks.push(new Ce(r)):(s.data=o.data,s._resolvedData=o._resolvedData),t(e,n,s.component?u?u.children:null:a,r,i),l&&i.canDeactivateChecks.push(new Re(u&&u.outlet&&u.outlet.component||null,o))}else o&&Ee(n,u,i),i.canActivateChecks.push(new Ce(r)),t(e,null,s.component?u?u.children:null:a,r,i)}(e,s[e.value.outlet],a,r.concat([e.value]),i),delete s[e.value.outlet]}),vt(s,(t,e)=>Ee(t,a.getContext(e),i)),i}(a,e?e._root:null,n,[a.value])}function ke(t,e,n){const a=function(t){if(!t)return null;for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig}return null}(e);return(a?a.module.injector:n).get(t)}function Ee(t,e,n){const a=Ut(t),r=t.value;vt(a,(t,a)=>{Ee(t,r.component?e?e.children.getContext(a):null:e,n)}),n.canDeactivateChecks.push(new Re(r.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,r))}const Le=Symbol("INITIAL_VALUE");function De(){return Object(A.a)(t=>function(...t){let e=null,n=null;return Object(d.a)(t[t.length-1])&&(n=t.pop()),"function"==typeof t[t.length-1]&&(e=t.pop()),1===t.length&&Object(c.a)(t[0])&&(t=t[0]),Object(g.a)(t,n).lift(new b(e))}(...t.map(t=>t.pipe(Object(k.a)(1),function(...t){const e=t[t.length-1];return Object(d.a)(e)?(t.pop(),n=>Object(E.a)(t,n,e)):e=>Object(E.a)(t,e)}(Le)))).pipe(Object(L.a)((t,e)=>{let n=!1;return e.reduce((t,a,r)=>{if(t!==Le)return t;if(a===Le&&(n=!0),!n){if(!1===a)return a;if(r===e.length-1||me(a))return a}return t},t)},Le),Object(D.a)(t=>t!==Le),Object(_.a)(t=>me(t)?t:!0===t),Object(k.a)(1)))}function Pe(t,e){return null!==t&&e&&e(new at(t)),Object(i.a)(!0)}function Me(t,e){return null!==t&&e&&e(new et(t)),Object(i.a)(!0)}function qe(t,e,n){const a=e.routeConfig?e.routeConfig.canActivate:null;if(!a||0===a.length)return Object(i.a)(!0);const r=a.map(a=>v(()=>{const r=ke(a,e,n);let i;if(function(t){return t&&be(t.canActivate)}(r))i=xt(r.canActivate(e,t));else{if(!be(r))throw new Error("Invalid CanActivate guard");i=xt(r(e,t))}return i.pipe(Object(S.a)())}));return Object(i.a)(r).pipe(De())}function je(t,e,n){const a=e[e.length-1],r=e.slice(0,e.length-1).reverse().map(t=>function(t){const e=t.routeConfig?t.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:t,guards:e}:null}(t)).filter(t=>null!==t).map(e=>v(()=>{const r=e.guards.map(r=>{const i=ke(r,e.node,n);let s;if(function(t){return t&&be(t.canActivateChild)}(i))s=xt(i.canActivateChild(a,t));else{if(!be(i))throw new Error("Invalid CanActivateChild guard");s=xt(i(a,t))}return s.pipe(Object(S.a)())});return Object(i.a)(r).pipe(De())}));return Object(i.a)(r).pipe(De())}class Fe{}class Ge{constructor(t,e,n,a,r,i){this.rootComponentType=t,this.config=e,this.urlTree=n,this.url=a,this.paramsInheritanceStrategy=r,this.relativeLinkResolution=i}recognize(){try{const t=Be(this.urlTree.root,[],[],this.config,this.relativeLinkResolution).segmentGroup,e=this.processSegmentGroup(this.config,t,"primary"),n=new Zt([],Object.freeze({}),Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,{},"primary",this.rootComponentType,null,this.urlTree.root,-1,{}),a=new Ht(n,e),r=new Qt(this.url,a);return this.inheritParamsAndData(r._root),Object(i.a)(r)}catch(t){return new u.a(e=>e.error(t))}}inheritParamsAndData(t){const e=t.value,n=Jt(e,this.paramsInheritanceStrategy);e.params=Object.freeze(n.params),e.data=Object.freeze(n.data),t.children.forEach(t=>this.inheritParamsAndData(t))}processSegmentGroup(t,e,n){return 0===e.segments.length&&e.hasChildren()?this.processChildren(t,e):this.processSegment(t,e,e.segments,n)}processChildren(t,e){const n=It(e,(e,n)=>this.processSegmentGroup(t,e,n));return function(t){const e={};t.forEach(t=>{const n=e[t.value.outlet];if(n){const e=n.url.map(t=>t.toString()).join("/"),a=t.value.url.map(t=>t.toString()).join("/");throw new Error(`Two segments cannot have the same outlet name: '${e}' and '${a}'.`)}e[t.value.outlet]=t.value})}(n),n.sort((t,e)=>"primary"===t.value.outlet?-1:"primary"===e.value.outlet?1:t.value.outlet.localeCompare(e.value.outlet)),n}processSegment(t,e,n,a){for(const i of t)try{return this.processSegmentAgainstRoute(i,e,n,a)}catch(r){if(!(r instanceof Fe))throw r}if(this.noLeftoversInUrl(e,n,a))return[];throw new Fe}noLeftoversInUrl(t,e,n){return 0===e.length&&!t.children[n]}processSegmentAgainstRoute(t,e,n,a){if(t.redirectTo)throw new Fe;if((t.outlet||"primary")!==a)throw new Fe;let r,i=[],s=[];if("**"===t.path){const i=n.length>0?yt(n).parameters:{};r=new Zt(n,i,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,Ue(t),a,t.component,t,Ve(e),ze(e)+n.length,We(t))}else{const o=function(t,e,n){if(""===e.path){if("full"===e.pathMatch&&(t.hasChildren()||n.length>0))throw new Fe;return{consumedSegments:[],lastChild:0,parameters:{}}}const a=(e.matcher||dt)(n,t,e);if(!a)throw new Fe;const r={};vt(a.posParams,(t,e)=>{r[e]=t.path});const i=a.consumed.length>0?Object.assign({},r,a.consumed[a.consumed.length-1].parameters):r;return{consumedSegments:a.consumed,lastChild:a.consumed.length,parameters:i}}(e,t,n);i=o.consumedSegments,s=n.slice(o.lastChild),r=new Zt(i,o.parameters,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,Ue(t),a,t.component,t,Ve(e),ze(e)+i.length,We(t))}const o=function(t){return t.children?t.children:t.loadChildren?t._loadedConfig.routes:[]}(t),{segmentGroup:u,slicedSegments:l}=Be(e,i,s,o,this.relativeLinkResolution);if(0===l.length&&u.hasChildren()){const t=this.processChildren(o,u);return[new Ht(r,t)]}if(0===o.length&&0===l.length)return[new Ht(r,[])];const d=this.processSegment(o,u,l,"primary");return[new Ht(r,d)]}}function Ve(t){let e=t;for(;e._sourceSegment;)e=e._sourceSegment;return e}function ze(t){let e=t,n=e._segmentIndexShift?e._segmentIndexShift:0;for(;e._sourceSegment;)e=e._sourceSegment,n+=e._segmentIndexShift?e._segmentIndexShift:0;return n-1}function Be(t,e,n,a,r){if(n.length>0&&function(t,e,n){return n.some(n=>Ye(t,e,n)&&"primary"!==He(n))}(t,n,a)){const r=new Ot(e,function(t,e,n,a){const r={};r.primary=a,a._sourceSegment=t,a._segmentIndexShift=e.length;for(const i of n)if(""===i.path&&"primary"!==He(i)){const n=new Ot([],{});n._sourceSegment=t,n._segmentIndexShift=e.length,r[He(i)]=n}return r}(t,e,a,new Ot(n,t.children)));return r._sourceSegment=t,r._segmentIndexShift=e.length,{segmentGroup:r,slicedSegments:[]}}if(0===n.length&&function(t,e,n){return n.some(n=>Ye(t,e,n))}(t,n,a)){const i=new Ot(t.segments,function(t,e,n,a,r,i){const s={};for(const o of a)if(Ye(t,n,o)&&!r[He(o)]){const n=new Ot([],{});n._sourceSegment=t,n._segmentIndexShift="legacy"===i?t.segments.length:e.length,s[He(o)]=n}return Object.assign({},r,s)}(t,e,n,a,t.children,r));return i._sourceSegment=t,i._segmentIndexShift=e.length,{segmentGroup:i,slicedSegments:n}}const i=new Ot(t.segments,t.children);return i._sourceSegment=t,i._segmentIndexShift=e.length,{segmentGroup:i,slicedSegments:n}}function Ye(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0===n.redirectTo}function He(t){return t.outlet||"primary"}function Ue(t){return t.data||{}}function We(t){return t.resolve||{}}function Ke(t,e,n,a){const r=ke(t,e,a);return xt(r.resolve?r.resolve(e,n):r(e,n))}function $e(t){return function(e){return e.pipe(Object(A.a)(e=>{const n=t(e);return n?Object(s.a)(n).pipe(Object(_.a)(()=>e)):Object(s.a)([e])}))}}class Je{}class Ze{shouldDetach(t){return!1}store(t,e){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,e){return t.routeConfig===e.routeConfig}}const Qe=new r.InjectionToken("ROUTES");class Xe{constructor(t,e,n,a){this.loader=t,this.compiler=e,this.onLoadStartListener=n,this.onLoadEndListener=a}load(t,e){return this.onLoadStartListener&&this.onLoadStartListener(e),this.loadModuleFactory(e.loadChildren).pipe(Object(_.a)(n=>{this.onLoadEndListener&&this.onLoadEndListener(e);const a=n.create(t);return new ct(mt(a.injector.get(Qe)).map(pt),a)}))}loadModuleFactory(t){return"string"==typeof t?Object(s.a)(this.loader.load(t)):xt(t()).pipe(Object(I.a)(t=>t instanceof r.NgModuleFactory?Object(i.a)(t):Object(s.a)(this.compiler.compileModuleAsync(t))))}}class tn{}class en{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,e){return t}}function nn(t){throw t}function an(t,e,n){return e.parse("/")}function rn(t,e){return Object(i.a)(null)}class sn{constructor(t,e,n,a,i,s,u,l){this.rootComponentType=t,this.urlSerializer=e,this.rootContexts=n,this.location=a,this.config=l,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.navigationId=0,this.isNgZoneEnabled=!1,this.events=new x.a,this.errorHandler=nn,this.malformedUriErrorHandler=an,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:rn,afterPreactivation:rn},this.urlHandlingStrategy=new en,this.routeReuseStrategy=new Ze,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="legacy",this.ngModule=i.get(r.NgModuleRef),this.console=i.get(r["ɵConsole"]);const d=i.get(r.NgZone);this.isNgZoneEnabled=d instanceof r.NgZone,this.resetConfig(l),this.currentUrlTree=new Tt(new Ot([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new Xe(s,u,t=>this.triggerEvent(new X(t)),t=>this.triggerEvent(new tt(t))),this.routerState=Kt(this.currentUrlTree,this.rootComponentType),this.transitions=new o.a({id:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}setupNavigations(t){const e=this.events;return t.pipe(Object(D.a)(t=>0!==t.id),Object(_.a)(t=>Object.assign({},t,{extractedUrl:this.urlHandlingStrategy.extract(t.rawUrl)})),Object(A.a)(t=>{let n=!1,a=!1;return Object(i.a)(t).pipe(Object(q.a)(t=>{this.currentNavigation={id:t.id,initialUrl:t.currentRawUrl,extractedUrl:t.extractedUrl,trigger:t.source,extras:t.extras,previousNavigation:this.lastSuccessfulNavigation?Object.assign({},this.lastSuccessfulNavigation,{previousNavigation:null}):null}}),Object(A.a)(t=>{const n=!this.navigated||t.extractedUrl.toString()!==this.browserUrlTree.toString();if(("reload"===this.onSameUrlNavigation||n)&&this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl))return Object(i.a)(t).pipe(Object(A.a)(t=>{const n=this.transitions.getValue();return e.next(new Y(t.id,this.serializeUrl(t.extractedUrl),t.source,t.restoredState)),n!==this.transitions.getValue()?y.a:[t]}),Object(A.a)(t=>Promise.resolve(t)),(a=this.ngModule.injector,r=this.configLoader,s=this.urlSerializer,o=this.config,function(t){return t.pipe(Object(A.a)(t=>function(t,e,n,a,r){return new Oe(t,e,n,a,r).apply()}(a,r,s,t.extractedUrl,o).pipe(Object(_.a)(e=>Object.assign({},t,{urlAfterRedirects:e})))))}),Object(q.a)(t=>{this.currentNavigation=Object.assign({},this.currentNavigation,{finalUrl:t.urlAfterRedirects})}),function(t,e,n,a,r){return function(i){return i.pipe(Object(I.a)(i=>function(t,e,n,a,r="emptyOnly",i="legacy"){return new Ge(t,e,n,a,r,i).recognize()}(t,e,i.urlAfterRedirects,n(i.urlAfterRedirects),a,r).pipe(Object(_.a)(t=>Object.assign({},i,{targetSnapshot:t})))))}}(this.rootComponentType,this.config,t=>this.serializeUrl(t),this.paramsInheritanceStrategy,this.relativeLinkResolution),Object(q.a)(t=>{"eager"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(t.urlAfterRedirects,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects)}),Object(q.a)(t=>{const n=new K(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);e.next(n)}));var a,r,s,o;if(n&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:n,extractedUrl:a,source:r,restoredState:s,extras:o}=t,u=new Y(n,this.serializeUrl(a),r,s);e.next(u);const l=Kt(a,this.rootComponentType).snapshot;return Object(i.a)(Object.assign({},t,{targetSnapshot:l,urlAfterRedirects:a,extras:Object.assign({},o,{skipLocationChange:!1,replaceUrl:!1})}))}return this.rawUrlTree=t.rawUrl,this.browserUrlTree=t.urlAfterRedirects,t.resolve(null),y.a}),$e(t=>{const{targetSnapshot:e,id:n,extractedUrl:a,rawUrl:r,extras:{skipLocationChange:i,replaceUrl:s}}=t;return this.hooks.beforePreactivation(e,{navigationId:n,appliedUrlTree:a,rawUrlTree:r,skipLocationChange:!!i,replaceUrl:!!s})}),Object(q.a)(t=>{const e=new $(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),Object(_.a)(t=>Object.assign({},t,{guards:Ae(t.targetSnapshot,t.currentSnapshot,this.rootContexts)})),function(t,e){return function(n){return n.pipe(Object(I.a)(n=>{const{targetSnapshot:a,currentSnapshot:r,guards:{canActivateChecks:o,canDeactivateChecks:u}}=n;return 0===u.length&&0===o.length?Object(i.a)(Object.assign({},n,{guardsResult:!0})):function(t,e,n,a){return Object(s.a)(t).pipe(Object(I.a)(t=>function(t,e,n,a,r){const s=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!s||0===s.length)return Object(i.a)(!0);const o=s.map(i=>{const s=ke(i,e,r);let o;if(function(t){return t&&be(t.canDeactivate)}(s))o=xt(s.canDeactivate(t,e,n,a));else{if(!be(s))throw new Error("Invalid CanDeactivate guard");o=xt(s(t,e,n,a))}return o.pipe(Object(S.a)())});return Object(i.a)(o).pipe(De())}(t.component,t.route,n,e,a)),Object(S.a)(t=>!0!==t,!0))}(u,a,r,t).pipe(Object(I.a)(n=>n&&"boolean"==typeof n?function(t,e,n,a){return Object(s.a)(e).pipe(Object(P.a)(e=>Object(s.a)([Me(e.route.parent,a),Pe(e.route,a),je(t,e.path,n),qe(t,e.route,n)]).pipe(Object(T.a)(),Object(S.a)(t=>!0!==t,!0))),Object(S.a)(t=>!0!==t,!0))}(a,o,t,e):Object(i.a)(n)),Object(_.a)(t=>Object.assign({},n,{guardsResult:t})))}))}}(this.ngModule.injector,t=>this.triggerEvent(t)),Object(q.a)(t=>{if(me(t.guardsResult)){const e=lt(`Redirecting to "${this.serializeUrl(t.guardsResult)}"`);throw e.url=t.guardsResult,e}}),Object(q.a)(t=>{const e=new J(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot,!!t.guardsResult);this.triggerEvent(e)}),Object(D.a)(t=>{if(!t.guardsResult){this.resetUrlToCurrentUrlTree();const n=new U(t.id,this.serializeUrl(t.extractedUrl),"");return e.next(n),t.resolve(!1),!1}return!0}),$e(t=>{if(t.guards.canActivateChecks.length)return Object(i.a)(t).pipe(Object(q.a)(t=>{const e=new Z(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),(e=this.paramsInheritanceStrategy,n=this.ngModule.injector,function(t){return t.pipe(Object(I.a)(t=>{const{targetSnapshot:a,guards:{canActivateChecks:r}}=t;return r.length?Object(s.a)(r).pipe(Object(P.a)(t=>function(t,e,n,a){return function(t,e,n,a){const r=Object.keys(t);if(0===r.length)return Object(i.a)({});if(1===r.length){const i=r[0];return Ke(t[i],e,n,a).pipe(Object(_.a)(t=>({[i]:t})))}const o={};return Object(s.a)(r).pipe(Object(I.a)(r=>Ke(t[r],e,n,a).pipe(Object(_.a)(t=>(o[r]=t,t))))).pipe(Object(O.a)(),Object(_.a)(()=>o))}(t._resolve,t,e,a).pipe(Object(_.a)(e=>(t._resolvedData=e,t.data=Object.assign({},t.data,Jt(t,n).resolve),null)))}(t.route,a,e,n)),Object(M.a)((t,e)=>t),Object(_.a)(e=>t)):Object(i.a)(t)}))}),Object(q.a)(t=>{const e=new Q(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}));var e,n}),$e(t=>{const{targetSnapshot:e,id:n,extractedUrl:a,rawUrl:r,extras:{skipLocationChange:i,replaceUrl:s}}=t;return this.hooks.afterPreactivation(e,{navigationId:n,appliedUrlTree:a,rawUrlTree:r,skipLocationChange:!!i,replaceUrl:!!s})}),Object(_.a)(t=>{const e=function(t,e,n){const a=function t(e,n,a){if(a&&e.shouldReuseRoute(n.value,a.value.snapshot)){const r=a.value;r._futureSnapshot=n.value;const i=function(e,n,a){return n.children.map(n=>{for(const r of a.children)if(e.shouldReuseRoute(r.value.snapshot,n.value))return t(e,n,r);return t(e,n)})}(e,n,a);return new Ht(r,i)}{const a=e.retrieve(n.value);if(a){const t=a.route;return function t(e,n){if(e.value.routeConfig!==n.value.routeConfig)throw new Error("Cannot reattach ActivatedRouteSnapshot created from a different route");if(e.children.length!==n.children.length)throw new Error("Cannot reattach ActivatedRouteSnapshot with a different number of children");n.value._futureSnapshot=e.value;for(let a=0;a<e.children.length;++a)t(e.children[a],n.children[a])}(n,t),t}{const a=new $t(new o.a((r=n.value).url),new o.a(r.params),new o.a(r.queryParams),new o.a(r.fragment),new o.a(r.data),r.outlet,r.component,r),i=n.children.map(n=>t(e,n));return new Ht(a,i)}}var r}(t,e._root,n?n._root:void 0);return new Wt(a,e)}(this.routeReuseStrategy,t.targetSnapshot,t.currentRouterState);return Object.assign({},t,{targetRouterState:e})}),Object(q.a)(t=>{this.currentUrlTree=t.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl),this.routerState=t.targetRouterState,"deferred"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects)}),(u=this.rootContexts,l=this.routeReuseStrategy,d=t=>this.triggerEvent(t),Object(_.a)(t=>(new ge(l,t.targetRouterState,t.currentRouterState,d).activate(u),t))),Object(q.a)({next(){n=!0},complete(){n=!0}}),(r=()=>{if(!n&&!a){this.resetUrlToCurrentUrlTree();const n=new U(t.id,this.serializeUrl(t.extractedUrl),`Navigation ID ${t.id} is not equal to the current navigation id ${this.navigationId}`);e.next(n),t.resolve(!1)}this.currentNavigation=null},t=>t.lift(new F(r))),Object(w.a)(n=>{if(a=!0,(r=n)&&r.ngNavigationCancelingError){const a=me(n.url);a||(this.navigated=!0,this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl));const r=new U(t.id,this.serializeUrl(t.extractedUrl),n.message);e.next(r),t.resolve(!1),a&&this.navigateByUrl(n.url)}else{this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl);const a=new W(t.id,this.serializeUrl(t.extractedUrl),n);e.next(a);try{t.resolve(this.errorHandler(n))}catch(i){t.reject(i)}}var r;return y.a}));var r,u,l,d}))}resetRootComponentType(t){this.rootComponentType=t,this.routerState.root.component=this.rootComponentType}getTransition(){const t=this.transitions.value;return t.urlAfterRedirects=this.browserUrlTree,t}setTransition(t){this.transitions.next(Object.assign({},this.getTransition(),t))}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{let e=this.parseUrl(t.url);const n="popstate"===t.type?"popstate":"hashchange",a=t.state&&t.state.navigationId?t.state:null;setTimeout(()=>{this.scheduleNavigation(e,n,a,{replaceUrl:!0})},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(t){this.events.next(t)}resetConfig(t){ft(t),this.config=t.map(pt),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=null)}createUrlTree(t,e={}){const{relativeTo:n,queryParams:a,fragment:i,preserveQueryParams:s,queryParamsHandling:o,preserveFragment:u}=e;Object(r.isDevMode)()&&s&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead.");const l=n||this.routerState.root,d=u?this.currentUrlTree.fragment:i;let c=null;if(o)switch(o){case"merge":c=Object.assign({},this.currentUrlTree.queryParams,a);break;case"preserve":c=this.currentUrlTree.queryParams;break;default:c=a||null}else c=s?this.currentUrlTree.queryParams:a||null;return null!==c&&(c=this.removeEmptyProps(c)),function(t,e,n,a,r){if(0===n.length)return re(e.root,e.root,e,a,r);const i=function(t){if("string"==typeof t[0]&&1===t.length&&"/"===t[0])return new ie(!0,0,t);let e=0,n=!1;const a=t.reduce((t,a,r)=>{if("object"==typeof a&&null!=a){if(a.outlets){const e={};return vt(a.outlets,(t,n)=>{e[n]="string"==typeof t?t.split("/"):t}),[...t,{outlets:e}]}if(a.segmentPath)return[...t,a.segmentPath]}return"string"!=typeof a?[...t,a]:0===r?(a.split("/").forEach((a,r)=>{0==r&&"."===a||(0==r&&""===a?n=!0:".."===a?e++:""!=a&&t.push(a))}),t):[...t,a]},[]);return new ie(n,e,a)}(n);if(i.toRoot())return re(e.root,new Ot([],{}),e,a,r);const s=function(t,e,n){if(t.isAbsolute)return new se(e.root,!0,0);if(-1===n.snapshot._lastPathIndex)return new se(n.snapshot._urlSegment,!0,0);const a=ae(t.commands[0])?0:1;return function(t,e,n){let a=t,r=e,i=n;for(;i>r;){if(i-=r,a=a.parent,!a)throw new Error("Invalid number of '../'");r=a.segments.length}return new se(a,!1,r-i)}(n.snapshot._urlSegment,n.snapshot._lastPathIndex+a,t.numberOfDoubleDots)}(i,e,t),o=s.processChildren?le(s.segmentGroup,s.index,i.commands):ue(s.segmentGroup,s.index,i.commands);return re(s.segmentGroup,o,e,a,r)}(l,this.currentUrlTree,t,c,d)}navigateByUrl(t,e={skipLocationChange:!1}){Object(r.isDevMode)()&&this.isNgZoneEnabled&&!r.NgZone.isInAngularZone()&&this.console.warn("Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?");const n=me(t)?t:this.parseUrl(t),a=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(a,"imperative",null,e)}navigate(t,e={skipLocationChange:!1}){return function(t){for(let e=0;e<t.length;e++){const n=t[e];if(null==n)throw new Error(`The requested path contains ${n} segment at index ${e}`)}}(t),this.navigateByUrl(this.createUrlTree(t,e),e)}serializeUrl(t){return this.urlSerializer.serialize(t)}parseUrl(t){let e;try{e=this.urlSerializer.parse(t)}catch(n){e=this.malformedUriErrorHandler(n,this.urlSerializer,t)}return e}isActive(t,e){if(me(t))return _t(this.currentUrlTree,t,e);const n=this.parseUrl(t);return _t(this.currentUrlTree,n,e)}removeEmptyProps(t){return Object.keys(t).reduce((e,n)=>{const a=t[n];return null!=a&&(e[n]=a),e},{})}processNavigations(){this.navigations.subscribe(t=>{this.navigated=!0,this.lastSuccessfulId=t.id,this.events.next(new H(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,this.currentNavigation=null,t.resolve(!0)},t=>{this.console.warn("Unhandled Navigation Error: ")})}scheduleNavigation(t,e,n,a){const r=this.getTransition();if(r&&"imperative"!==e&&"imperative"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(r&&"hashchange"==e&&"popstate"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(r&&"popstate"==e&&"hashchange"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);let i=null,s=null;const o=new Promise((t,e)=>{i=t,s=e}),u=++this.navigationId;return this.setTransition({id:u,source:e,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:t,extras:a,resolve:i,reject:s,promise:o,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),o.catch(t=>Promise.reject(t))}setBrowserUrl(t,e,n,a){const r=this.urlSerializer.serialize(t);a=a||{},this.location.isCurrentPathEqualTo(r)||e?this.location.replaceState(r,"",Object.assign({},a,{navigationId:n})):this.location.go(r,"",Object.assign({},a,{navigationId:n}))}resetStateAndUrl(t,e,n){this.routerState=t,this.currentUrlTree=e,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",{navigationId:this.lastSuccessfulId})}}class on{constructor(t,e,n,a,r){this.router=t,this.route=e,this.commands=[],null==n&&a.setAttribute(r.nativeElement,"tabindex","0")}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}set preserveQueryParams(t){Object(r.isDevMode)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated!, use queryParamsHandling instead."),this.preserve=t}onClick(){const t={skipLocationChange:ln(this.skipLocationChange),replaceUrl:ln(this.replaceUrl)};return this.router.navigateByUrl(this.urlTree,t),!0}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:ln(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:ln(this.preserveFragment)})}}class un{constructor(t,e,n){this.router=t,this.route=e,this.locationStrategy=n,this.commands=[],this.subscription=t.events.subscribe(t=>{t instanceof H&&this.updateTargetUrlAndHref()})}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}set preserveQueryParams(t){Object(r.isDevMode)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead."),this.preserve=t}ngOnChanges(t){this.updateTargetUrlAndHref()}ngOnDestroy(){this.subscription.unsubscribe()}onClick(t,e,n,a){if(0!==t||e||n||a)return!0;if("string"==typeof this.target&&"_self"!=this.target)return!0;const r={skipLocationChange:ln(this.skipLocationChange),replaceUrl:ln(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,r),!1}updateTargetUrlAndHref(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:ln(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:ln(this.preserveFragment)})}}function ln(t){return""===t||!!t}class dn{constructor(t,e,n,a,r){this.router=t,this.element=e,this.renderer=n,this.link=a,this.linkWithHref=r,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.subscription=t.events.subscribe(t=>{t instanceof H&&this.update()})}ngAfterContentInit(){this.links.changes.subscribe(t=>this.update()),this.linksWithHrefs.changes.subscribe(t=>this.update()),this.update()}set routerLinkActive(t){const e=Array.isArray(t)?t:t.split(" ");this.classes=e.filter(t=>!!t)}ngOnChanges(t){this.update()}ngOnDestroy(){this.subscription.unsubscribe()}update(){this.links&&this.linksWithHrefs&&this.router.navigated&&Promise.resolve().then(()=>{const t=this.hasActiveLinks();this.isActive!==t&&(this.isActive=t,this.classes.forEach(e=>{t?this.renderer.addClass(this.element.nativeElement,e):this.renderer.removeClass(this.element.nativeElement,e)}))})}isLinkActive(t){return e=>t.isActive(e.urlTree,this.routerLinkActiveOptions.exact)}hasActiveLinks(){const t=this.isLinkActive(this.router);return this.link&&t(this.link)||this.linkWithHref&&t(this.linkWithHref)||this.links.some(t)||this.linksWithHrefs.some(t)}}class cn{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.children=new fn,this.attachRef=null}}class fn{constructor(){this.contexts=new Map}onChildOutletCreated(t,e){const n=this.getOrCreateContext(t);n.outlet=e,this.contexts.set(t,n)}onChildOutletDestroyed(t){const e=this.getContext(t);e&&(e.outlet=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let e=this.getContext(t);return e||(e=new cn,this.contexts.set(t,e)),e}getContext(t){return this.contexts.get(t)||null}}class hn{constructor(t,e,n,a,i){this.parentContexts=t,this.location=e,this.resolver=n,this.changeDetector=i,this.activated=null,this._activatedRoute=null,this.activateEvents=new r.EventEmitter,this.deactivateEvents=new r.EventEmitter,this.name=a||"primary",t.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const t=this.parentContexts.getContext(this.name);t&&t.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.resolver||null))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,t}attach(t,e){this.activated=t,this._activatedRoute=e,this.location.insert(t.hostView)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,e){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=t;const n=(e=e||this.resolver).resolveComponentFactory(t._futureSnapshot.routeConfig.component),a=this.parentContexts.getOrCreateContext(this.name).children,r=new gn(t,a,this.location.injector);this.activated=this.location.createComponent(n,this.location.length,r),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}class gn{constructor(t,e,n){this.route=t,this.childContexts=e,this.parent=n}get(t,e){return t===$t?this.route:t===fn?this.childContexts:this.parent.get(t,e)}}class pn{}class bn{preload(t,e){return e().pipe(Object(w.a)(()=>Object(i.a)(null)))}}class mn{preload(t,e){return Object(i.a)(null)}}class yn{constructor(t,e,n,a,r){this.router=t,this.injector=a,this.preloadingStrategy=r,this.loader=new Xe(e,n,e=>t.triggerEvent(new X(e)),e=>t.triggerEvent(new tt(e)))}setUpPreloading(){this.subscription=this.router.events.pipe(Object(D.a)(t=>t instanceof H),Object(P.a)(()=>this.preload())).subscribe(()=>{})}preload(){const t=this.injector.get(r.NgModuleRef);return this.processRoutes(t,this.router.config)}ngOnDestroy(){this.subscription.unsubscribe()}processRoutes(t,e){const n=[];for(const a of e)if(a.loadChildren&&!a.canLoad&&a._loadedConfig){const t=a._loadedConfig;n.push(this.processRoutes(t.module,t.routes))}else a.loadChildren&&!a.canLoad?n.push(this.preloadConfig(t,a)):a.children&&n.push(this.processRoutes(t,a.children));return Object(s.a)(n).pipe(Object(V.a)(),Object(_.a)(t=>{}))}preloadConfig(t,e){return this.preloadingStrategy.preload(e,()=>this.loader.load(t.injector,e).pipe(Object(I.a)(t=>(e._loadedConfig=t,this.processRoutes(t.module,t.routes)))))}}class vn{constructor(t,e,n={}){this.router=t,this.viewportScroller=e,this.options=n,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||"disabled",n.anchorScrolling=n.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(t=>{t instanceof Y?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof H&&(this.lastId=t.id,this.scheduleScrollEvent(t,this.router.parseUrl(t.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(t=>{t instanceof it&&(t.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,e){this.router.triggerEvent(new it(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,e))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}const xn=new r.InjectionToken("ROUTER_CONFIGURATION"),_n=new r.InjectionToken("ROUTER_FORROOT_GUARD"),Tn=[a.Location,{provide:Nt,useClass:Ct},{provide:sn,useFactory:Rn,deps:[r.ApplicationRef,Nt,fn,a.Location,r.Injector,r.NgModuleFactoryLoader,r.Compiler,Qe,xn,[tn,new r.Optional],[Je,new r.Optional]]},fn,{provide:$t,useFactory:An,deps:[sn]},{provide:r.NgModuleFactoryLoader,useClass:r.SystemJsNgModuleLoader},yn,mn,bn,{provide:xn,useValue:{enableTracing:!1}}];function On(){return new r.NgProbeToken("Router",sn)}class wn{constructor(t,e){}static forRoot(t,e){return{ngModule:wn,providers:[Tn,Cn(t),{provide:_n,useFactory:Nn,deps:[[sn,new r.Optional,new r.SkipSelf]]},{provide:xn,useValue:e||{}},{provide:a.LocationStrategy,useFactory:In,deps:[a.PlatformLocation,[new r.Inject(a.APP_BASE_HREF),new r.Optional],xn]},{provide:vn,useFactory:Sn,deps:[sn,a.ViewportScroller,xn]},{provide:pn,useExisting:e&&e.preloadingStrategy?e.preloadingStrategy:mn},{provide:r.NgProbeToken,multi:!0,useFactory:On},[kn,{provide:r.APP_INITIALIZER,multi:!0,useFactory:En,deps:[kn]},{provide:Dn,useFactory:Ln,deps:[kn]},{provide:r.APP_BOOTSTRAP_LISTENER,multi:!0,useExisting:Dn}]]}}static forChild(t){return{ngModule:wn,providers:[Cn(t)]}}}function Sn(t,e,n){return n.scrollOffset&&e.setOffset(n.scrollOffset),new vn(t,e,n)}function In(t,e,n={}){return n.useHash?new a.HashLocationStrategy(t,e):new a.PathLocationStrategy(t,e)}function Nn(t){if(t)throw new Error("RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.");return"guarded"}function Cn(t){return[{provide:r.ANALYZE_FOR_ENTRY_COMPONENTS,multi:!0,useValue:t},{provide:Qe,multi:!0,useValue:t}]}function Rn(t,e,n,a,r,i,s,o,u={},l,d){const c=new sn(null,e,n,a,r,i,s,mt(o));if(l&&(c.urlHandlingStrategy=l),d&&(c.routeReuseStrategy=d),u.errorHandler&&(c.errorHandler=u.errorHandler),u.malformedUriErrorHandler&&(c.malformedUriErrorHandler=u.malformedUriErrorHandler),u.enableTracing){const t=Object(z.q)();c.events.subscribe(e=>{t.logGroup("Router Event: "+e.constructor.name),t.log(e.toString()),t.log(e),t.logGroupEnd()})}return u.onSameUrlNavigation&&(c.onSameUrlNavigation=u.onSameUrlNavigation),u.paramsInheritanceStrategy&&(c.paramsInheritanceStrategy=u.paramsInheritanceStrategy),u.urlUpdateStrategy&&(c.urlUpdateStrategy=u.urlUpdateStrategy),u.relativeLinkResolution&&(c.relativeLinkResolution=u.relativeLinkResolution),c}function An(t){return t.routerState.root}class kn{constructor(t){this.injector=t,this.initNavigation=!1,this.resultOfPreactivationDone=new x.a}appInitializer(){return this.injector.get(a.LOCATION_INITIALIZED,Promise.resolve(null)).then(()=>{let t=null;const e=new Promise(e=>t=e),n=this.injector.get(sn),a=this.injector.get(xn);if(this.isLegacyDisabled(a)||this.isLegacyEnabled(a))t(!0);else if("disabled"===a.initialNavigation)n.setUpLocationChangeListener(),t(!0);else{if("enabled"!==a.initialNavigation)throw new Error(`Invalid initialNavigation options: '${a.initialNavigation}'`);n.hooks.afterPreactivation=()=>this.initNavigation?Object(i.a)(null):(this.initNavigation=!0,t(!0),this.resultOfPreactivationDone),n.initialNavigation()}return e})}bootstrapListener(t){const e=this.injector.get(xn),n=this.injector.get(yn),a=this.injector.get(vn),i=this.injector.get(sn),s=this.injector.get(r.ApplicationRef);t===s.components[0]&&(this.isLegacyEnabled(e)?i.initialNavigation():this.isLegacyDisabled(e)&&i.setUpLocationChangeListener(),n.setUpPreloading(),a.init(),i.resetRootComponentType(s.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())}isLegacyEnabled(t){return"legacy_enabled"===t.initialNavigation||!0===t.initialNavigation||void 0===t.initialNavigation}isLegacyDisabled(t){return"legacy_disabled"===t.initialNavigation||!1===t.initialNavigation}}function En(t){return t.appInitializer.bind(t)}function Ln(t){return t.bootstrapListener.bind(t)}const Dn=new r.InjectionToken("Router Initializer")},"iQ+a":function(t,e,n){var a=n("nTk+"),r=n("1Yk6"),i=n("FGWQ");t.exports=function(t){return a(t,i,r)}},iSVu:function(t,e,n){var a=n("xs3f"),r=Function.toString;"function"!=typeof a.inspectSource&&(a.inspectSource=function(t){return r.call(t)}),t.exports=a.inspectSource},iYuL:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},ienR:function(t,e,n){"use strict";n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return q})),n.d(e,"c",(function(){return j})),n.d(e,"d",(function(){return F})),n.d(e,"e",(function(){return G})),n.d(e,"f",(function(){return Y})),n.d(e,"g",(function(){return nt})),n.d(e,"h",(function(){return H})),n.d(e,"i",(function(){return z})),n.d(e,"j",(function(){return V})),n.d(e,"k",(function(){return B})),n.d(e,"l",(function(){return b})),n.d(e,"m",(function(){return st})),n.d(e,"n",(function(){return rt})),n.d(e,"o",(function(){return it})),n.d(e,"p",(function(){return dt})),n.d(e,"q",(function(){return ot})),n.d(e,"r",(function(){return ut})),n.d(e,"s",(function(){return lt})),n.d(e,"t",(function(){return M})),n.d(e,"u",(function(){return m})),n.d(e,"v",(function(){return p})),n.d(e,"w",(function(){return U})),n.d(e,"x",(function(){return W})),n.d(e,"y",(function(){return K})),n.d(e,"z",(function(){return $})),n.d(e,"A",(function(){return Z})),n.d(e,"B",(function(){return Q})),n.d(e,"C",(function(){return X})),n.d(e,"D",(function(){return tt})),n.d(e,"E",(function(){return et}));var a=n("8Y7J"),r=n("pLZG"),i=n("lJxs"),s=n("IzEk"),o=n("xj/R"),u=n("2Vo4"),l=n("AfCQ"),d=n("2uy1"),c=(n("GS7A"),n("z/SZ")),f=(n("s7LF"),n("hpHm"));class h{constructor(){this.adaptivePosition=!1,this.useUtc=!1,this.isAnimated=!1,this.containerClass="theme-green",this.displayMonths=1,this.showWeekNumbers=!0,this.dateInputFormat="L",this.rangeSeparator=" - ",this.rangeInputFormat="L",this.monthTitle="MMMM",this.yearTitle="YYYY",this.dayLabel="D",this.monthLabel="MMMM",this.yearLabel="YYYY",this.weekNumbers="w"}}class g{constructor(){this._customRangesFish=[]}set minDate(t){this._effects.setMinDate(t)}set maxDate(t){this._effects.setMaxDate(t)}set daysDisabled(t){this._effects.setDaysDisabled(t)}set datesDisabled(t){this._effects.setDatesDisabled(t)}set isDisabled(t){this._effects.setDisabled(t)}set dateCustomClasses(t){this._effects.setDateCustomClasses(t)}setViewMode(t){}navigateTo(t){}dayHoverHandler(t){}weekHoverHandler(t){}monthHoverHandler(t){}yearHoverHandler(t){}daySelectHandler(t){}monthSelectHandler(t){}yearSelectHandler(t){}_stopPropagation(t){t.stopPropagation()}}let p=(()=>{class t{calculate(){return{type:t.CALCULATE}}format(){return{type:t.FORMAT}}flag(){return{type:t.FLAG}}select(e){return{type:t.SELECT,payload:e}}changeViewMode(e){return{type:t.CHANGE_VIEWMODE,payload:e}}navigateTo(e){return{type:t.NAVIGATE_TO,payload:e}}navigateStep(e){return{type:t.NAVIGATE_OFFSET,payload:e}}setOptions(e){return{type:t.SET_OPTIONS,payload:e}}selectRange(e){return{type:t.SELECT_RANGE,payload:e}}hoverDay(e){return{type:t.HOVER,payload:e.isHovered?e.cell.date:null}}minDate(e){return{type:t.SET_MIN_DATE,payload:e}}maxDate(e){return{type:t.SET_MAX_DATE,payload:e}}daysDisabled(e){return{type:t.SET_DAYSDISABLED,payload:e}}datesDisabled(e){return{type:t.SET_DATESDISABLED,payload:e}}isDisabled(e){return{type:t.SET_IS_DISABLED,payload:e}}setDateCustomClasses(e){return{type:t.SET_DATE_CUSTOM_CLASSES,payload:e}}setLocale(e){return{type:t.SET_LOCALE,payload:e}}}return t.CALCULATE="[datepicker] calculate dates matrix",t.FORMAT="[datepicker] format datepicker values",t.FLAG="[datepicker] set flags",t.SELECT="[datepicker] select date",t.NAVIGATE_OFFSET="[datepicker] shift view date",t.NAVIGATE_TO="[datepicker] change view date",t.SET_OPTIONS="[datepicker] update render options",t.HOVER="[datepicker] hover date",t.CHANGE_VIEWMODE="[datepicker] switch view mode",t.SET_MIN_DATE="[datepicker] set min date",t.SET_MAX_DATE="[datepicker] set max date",t.SET_DAYSDISABLED="[datepicker] set days disabled",t.SET_DATESDISABLED="[datepicker] set dates disabled",t.SET_IS_DISABLED="[datepicker] set is disabled",t.SET_DATE_CUSTOM_CLASSES="[datepicker] set date custom classes",t.SET_LOCALE="[datepicker] set datepicker locale",t.SELECT_RANGE="[daterangepicker] select dates range",t})();class b{constructor(){this._defaultLocale="en",this._locale=new u.a(this._defaultLocale),this._localeChange=this._locale.asObservable()}get locale(){return this._locale}get localeChange(){return this._localeChange}get currentLocale(){return this._locale.getValue()}use(t){t!==this.currentLocale&&this._locale.next(t)}}class m{constructor(t,e){this._actions=t,this._localeService=e,this._subs=[]}init(t){return this._store=t,this}setValue(t){this._store.dispatch(this._actions.select(t))}setRangeValue(t){this._store.dispatch(this._actions.selectRange(t))}setMinDate(t){return this._store.dispatch(this._actions.minDate(t)),this}setMaxDate(t){return this._store.dispatch(this._actions.maxDate(t)),this}setDaysDisabled(t){return this._store.dispatch(this._actions.daysDisabled(t)),this}setDatesDisabled(t){return this._store.dispatch(this._actions.datesDisabled(t)),this}setDisabled(t){return this._store.dispatch(this._actions.isDisabled(t)),this}setDateCustomClasses(t){return this._store.dispatch(this._actions.setDateCustomClasses(t)),this}setOptions(t){const e=Object.assign({locale:this._localeService.currentLocale},t);return this._store.dispatch(this._actions.setOptions(e)),this}setBindings(t){return t.daysCalendar=this._store.select(t=>t.flaggedMonths).pipe(Object(r.a)(t=>!!t)),t.monthsCalendar=this._store.select(t=>t.flaggedMonthsCalendar).pipe(Object(r.a)(t=>!!t)),t.yearsCalendar=this._store.select(t=>t.yearsCalendarFlagged).pipe(Object(r.a)(t=>!!t)),t.viewMode=this._store.select(t=>t.view.mode),t.options=this._store.select(t=>t.showWeekNumbers).pipe(Object(i.a)(t=>({showWeekNumbers:t}))),this}setEventHandlers(t){return t.setViewMode=t=>{this._store.dispatch(this._actions.changeViewMode(t))},t.navigateTo=t=>{this._store.dispatch(this._actions.navigateStep(t.step))},t.dayHoverHandler=t=>{const e=t.cell;e.isOtherMonth||e.isDisabled||(this._store.dispatch(this._actions.hoverDay(t)),e.isHovered=t.isHovered)},t.monthHoverHandler=t=>{t.cell.isHovered=t.isHovered},t.yearHoverHandler=t=>{t.cell.isHovered=t.isHovered},t.monthSelectHandler=t=>{t.isDisabled||this._store.dispatch(this._actions.navigateTo({unit:{month:Object(o.l)(t.date),year:Object(o.j)(t.date)},viewMode:"day"}))},t.yearSelectHandler=t=>{t.isDisabled||this._store.dispatch(this._actions.navigateTo({unit:{year:Object(o.j)(t.date)},viewMode:"month"}))},this}registerDatepickerSideEffects(){return this._subs.push(this._store.select(t=>t.view).subscribe(t=>{this._store.dispatch(this._actions.calculate())})),this._subs.push(this._store.select(t=>t.monthsModel).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.format()))),this._subs.push(this._store.select(t=>t.formattedMonths).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.selectedDate).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.selectedRange).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.monthsCalendar).subscribe(()=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.yearsCalendarModel).pipe(Object(r.a)(t=>!!t)).subscribe(()=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.hoveredDate).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.dateCustomClasses).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._localeService.localeChange.subscribe(t=>this._store.dispatch(this._actions.setLocale(t)))),this}destroy(){for(const t of this._subs)t.unsubscribe()}}const y={date:new Date,mode:"day"},v=Object.assign(new h,{locale:"en",view:y,selectedRange:[],monthViewOptions:{width:7,height:6}});function x(t,e,n){const a=e&&Object(o.p)(Object(o.d)(t,"month"),e,"day"),r=n&&Object(o.n)(Object(o.G)(t,"month"),n,"day");return a||r}function _(t,e,n){const a=e&&Object(o.p)(Object(o.d)(t,"year"),e,"day"),r=n&&Object(o.n)(Object(o.G)(t,"year"),n,"day");return a||r}function T(t,e=0){const n=t&&t.yearsCalendarModel&&t.yearsCalendarModel[e];return n&&n.years&&n.years[0]&&n.years[0][0]&&n.years[0][0].date}function O(t,e){let n=t.initialDate;const a=new Array(t.height);for(let r=0;r<t.height;r++){a[r]=new Array(t.width);for(let i=0;i<t.width;i++)a[r][i]=e(n),n=Object(o.F)(n,t.shift)}return a}function w(t,e){const n=Object(o.i)(t),a=function(t,e){if(Object(o.t)(t,e.firstDayOfWeek))return t;const n=function(t,e){if(0===e)return t;const n=t-e%7;return n<0?n+7:n}(Object(o.h)(t),e.firstDayOfWeek);return Object(o.F)(t,{day:-n})}(n,e);return{daysMatrix:O({width:e.width,height:e.height,initialDate:a,shift:{day:1}},t=>t),month:n}}function S(t){const e=Object(o.k)(t),n=e.weekdaysShort(),a=e.firstDayOfWeek();return[...n.slice(a),...n.slice(0,a)]}function I(t,e){return!e||t>=e}const N={month:1};function C(t,e){return{months:O({width:3,height:4,initialDate:Object(o.G)(t,"year"),shift:N},t=>({date:t,label:Object(o.f)(t,e.monthLabel,e.locale)})),monthTitle:"",yearTitle:Object(o.f)(t,e.yearTitle,e.locale)}}const R=-1*(Math.floor(8)-1),A={year:1};function k(t,e,n){const a=O({width:4,height:4,initialDate:function(t,e){return e&&t.getFullYear()>=e.getFullYear()&&t.getFullYear()<e.getFullYear()+16?e:Object(o.F)(t,{year:R})}(t,n),shift:A},t=>({date:t,label:Object(o.f)(t,e.yearLabel,e.locale)}));return{years:a,monthTitle:"",yearTitle:function(t,e){return`${Object(o.f)(t[0][0].date,e.yearTitle,e.locale)} - ${Object(o.f)(t[3][3].date,e.yearTitle,e.locale)}`}(a,e)}}function E(t=v,e){switch(e.type){case p.CALCULATE:return function(t){const e=t.displayMonths;let n=t.view.date;if("day"===t.view.mode){t.showPreviousMonth&&0===t.selectedRange.length&&(n=Object(o.F)(n,{month:-1})),t.monthViewOptions.firstDayOfWeek=Object(o.k)(t.locale).firstDayOfWeek();const a=new Array(e);for(let r=0;r<e;r++)a[r]=w(n,t.monthViewOptions),n=Object(o.F)(n,{month:1});return Object.assign({},t,{monthsModel:a})}if("month"===t.view.mode){const a=new Array(e);for(let r=0;r<e;r++)a[r]=C(n,D(t)),n=Object(o.F)(n,{year:1});return Object.assign({},t,{monthsCalendar:a})}if("year"===t.view.mode){const a=new Array(e);for(let r=0;r<e;r++)a[r]=k(n,D(t),"year"===t.minMode?T(t,r):void 0),n=Object(o.F)(n,{year:16});return Object.assign({},t,{yearsCalendarModel:a})}return t}(t);case p.FORMAT:return function(t,e){if("day"===t.view.mode){const e=t.monthsModel.map((e,n)=>function(t,e,n){return{month:t.month,monthTitle:Object(o.f)(t.month,e.monthTitle,e.locale),yearTitle:Object(o.f)(t.month,e.yearTitle,e.locale),weekNumbers:(a=t.daysMatrix,r=e.weekNumbers,i=e.locale,a.map(t=>t[0]?Object(o.f)(t[0],r,i):"")),weekdays:S(e.locale),weeks:t.daysMatrix.map((t,a)=>({days:t.map((t,r)=>({date:t,label:Object(o.f)(t,e.dayLabel,e.locale),monthIndex:n,weekIndex:a,dayIndex:r}))}))};var a,r,i}(e,D(t),n));return Object.assign({},t,{formattedMonths:e})}const n=t.displayMonths;let a=t.view.date;if("month"===t.view.mode){const e=new Array(n);for(let r=0;r<n;r++)e[r]=C(a,D(t)),a=Object(o.F)(a,{year:1});return Object.assign({},t,{monthsCalendar:e})}if("year"===t.view.mode){const e=new Array(n);for(let r=0;r<n;r++)e[r]=k(a,D(t)),a=Object(o.F)(a,{year:16});return Object.assign({},t,{yearsCalendarModel:e})}return t}(t);case p.FLAG:return function(t,e){if("day"===t.view.mode){const e=t.formattedMonths.map((e,n)=>function(t,e){return t.weeks.forEach(n=>{n.days.forEach((a,r)=>{const i=!Object(o.w)(a.date,t.month),s=!i&&Object(o.v)(a.date,e.hoveredDate),u=!i&&e.selectedRange&&Object(o.v)(a.date,e.selectedRange[0]),l=!i&&e.selectedRange&&Object(o.v)(a.date,e.selectedRange[1]),d=!i&&Object(o.v)(a.date,e.selectedDate)||u||l,c=!i&&e.selectedRange&&function(t,e,n){return!(!t||!e[0])&&(e[1]?t>e[0]&&t<=e[1]:!!n&&t>e[0]&&t<=n)}(a.date,e.selectedRange,e.hoveredDate),f=e.isDisabled||Object(o.p)(a.date,e.minDate,"day")||Object(o.n)(a.date,e.maxDate,"day")||Object(o.s)(a.date,e.daysDisabled)||(h=a.date,!(void 0===(g=e.datesDisabled)||!g||!g.length)&&g.some(t=>Object(o.u)(h,t,"date")));var h,g;const p=new Date,b=!i&&Object(o.v)(a.date,p),m=e.dateCustomClasses&&e.dateCustomClasses.map(t=>Object(o.v)(a.date,t.date)?t.classes:[]).reduce((t,e)=>t.concat(e),[]).join(" ")||"",y=Object.assign({},a,{isOtherMonth:i,isHovered:s,isSelected:d,isSelectionStart:u,isSelectionEnd:l,isInRange:c,isDisabled:f,isToday:b,customClasses:m});a.isOtherMonth===y.isOtherMonth&&a.isHovered===y.isHovered&&a.isSelected===y.isSelected&&a.isSelectionStart===y.isSelectionStart&&a.isSelectionEnd===y.isSelectionEnd&&a.isDisabled===y.isDisabled&&a.isInRange===y.isInRange&&a.customClasses===y.customClasses||(n.days[r]=y)})}),t.hideLeftArrow=e.isDisabled||e.monthIndex>0&&e.monthIndex!==e.displayMonths,t.hideRightArrow=e.isDisabled||e.monthIndex<e.displayMonths&&e.monthIndex+1!==e.displayMonths,t.disableLeftArrow=x(Object(o.F)(t.month,{month:-1}),e.minDate,e.maxDate),t.disableRightArrow=x(Object(o.F)(t.month,{month:1}),e.minDate,e.maxDate),t}(e,{isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,daysDisabled:t.daysDisabled,datesDisabled:t.datesDisabled,hoveredDate:t.hoveredDate,selectedDate:t.selectedDate,selectedRange:t.selectedRange,displayMonths:t.displayMonths,dateCustomClasses:t.dateCustomClasses,monthIndex:n}));return Object.assign({},t,{flaggedMonths:e})}if("month"===t.view.mode){const e=t.monthsCalendar.map((e,n)=>{return r={isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,hoveredMonth:t.hoveredMonth,selectedDate:t.selectedDate,displayMonths:t.displayMonths,monthIndex:n},(a=e).months.forEach((t,e)=>{t.forEach((t,n)=>{const i=Object(o.w)(t.date,r.hoveredMonth),s=r.isDisabled||x(t.date,r.minDate,r.maxDate),u=Object(o.w)(t.date,r.selectedDate),l=Object.assign(t,{isHovered:i,isDisabled:s,isSelected:u});t.isHovered===l.isHovered&&t.isDisabled===l.isDisabled&&t.isSelected===l.isSelected||(a.months[e][n]=l)})}),a.hideLeftArrow=r.monthIndex>0&&r.monthIndex!==r.displayMonths,a.hideRightArrow=r.monthIndex<r.displayMonths&&r.monthIndex+1!==r.displayMonths,a.disableLeftArrow=_(Object(o.F)(a.months[0][0].date,{year:-1}),r.minDate,r.maxDate),a.disableRightArrow=_(Object(o.F)(a.months[0][0].date,{year:1}),r.minDate,r.maxDate),a;var a,r});return Object.assign({},t,{flaggedMonthsCalendar:e})}if("year"===t.view.mode){const e=t.yearsCalendarModel.map((e,n)=>function(t,e){t.years.forEach((n,a)=>{n.forEach((n,r)=>{const i=Object(o.x)(n.date,e.hoveredYear),s=e.isDisabled||_(n.date,e.minDate,e.maxDate),u=Object(o.x)(n.date,e.selectedDate),l=Object.assign(n,{isHovered:i,isDisabled:s,isSelected:u});n.isHovered===l.isHovered&&n.isDisabled===l.isDisabled&&n.isSelected===l.isSelected||(t.years[a][r]=l)})}),t.hideLeftArrow=e.yearIndex>0&&e.yearIndex!==e.displayMonths,t.hideRightArrow=e.yearIndex<e.displayMonths&&e.yearIndex+1!==e.displayMonths,t.disableLeftArrow=_(Object(o.F)(t.years[0][0].date,{year:-1}),e.minDate,e.maxDate);const n=t.years.length-1,a=t.years[n].length-1;return t.disableRightArrow=_(Object(o.F)(t.years[n][a].date,{year:1}),e.minDate,e.maxDate),t}(e,{isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,hoveredYear:t.hoveredYear,selectedDate:t.selectedDate,displayMonths:t.displayMonths,yearIndex:n}));return Object.assign({},t,{yearsCalendarFlagged:e})}return t}(t);case p.NAVIGATE_OFFSET:return function(t,e){const n={view:{mode:t.view.mode,date:L(t,e)}};return Object.assign({},t,n)}(t,e);case p.NAVIGATE_TO:{const n=e.payload,a=Object(o.E)(t.view.date,n.unit);let r,i;return I(n.viewMode,t.minMode)?(i=n.viewMode,r={view:{date:a,mode:i}}):(i=t.view.mode,r={selectedDate:a,view:{date:a,mode:i}}),Object.assign({},t,r)}case p.CHANGE_VIEWMODE:return I(e.payload,t.minMode)?Object.assign({},t,{view:{date:t.view.date,mode:e.payload}}):t;case p.HOVER:return Object.assign({},t,{hoveredDate:e.payload});case p.SELECT:{const n={selectedDate:e.payload,view:t.view},a=t.view.mode,r=P(e.payload||t.view.date,t.minDate,t.maxDate);return n.view={mode:a,date:r},Object.assign({},t,n)}case p.SET_OPTIONS:{const n=e.payload,a=n.minMode?n.minMode:t.view.mode,r=P(Object(o.r)(n.value)&&n.value||Object(o.o)(n.value)&&Object(o.r)(n.value[0])&&n.value[0]||t.view.date,n.minDate,n.maxDate);return n.view={mode:a,date:r},n.value&&(Object(o.o)(n.value)&&(n.selectedRange=n.value),n.value instanceof Date&&(n.selectedDate=n.value)),Object.assign({},t,n)}case p.SELECT_RANGE:{const n={selectedRange:e.payload,view:t.view},a=t.view.mode,r=P(e.payload&&e.payload[0]||t.view.date,t.minDate,t.maxDate);return n.view={mode:a,date:r},Object.assign({},t,n)}case p.SET_MIN_DATE:return Object.assign({},t,{minDate:e.payload});case p.SET_MAX_DATE:return Object.assign({},t,{maxDate:e.payload});case p.SET_IS_DISABLED:return Object.assign({},t,{isDisabled:e.payload});case p.SET_DATE_CUSTOM_CLASSES:return Object.assign({},t,{dateCustomClasses:e.payload});default:return t}}function L(t,e){if("year"===t.view.mode&&"year"===t.minMode){const n=T(t,0),a=Object(o.F)(n,{year:-R});return Object(o.F)(a,e.payload)}return Object(o.F)(Object(o.G)(t.view.date,"month"),e.payload)}function D(t){return{locale:t.locale,monthTitle:t.monthTitle,yearTitle:t.yearTitle,dayLabel:t.dayLabel,monthLabel:t.monthLabel,yearLabel:t.yearLabel,weekNumbers:t.weekNumbers}}function P(t,e,n){const a=Array.isArray(t)?t[0]:t;return e&&Object(o.n)(e,a,"day")?e:n&&Object(o.p)(n,a,"day")?n:a}class M extends l.b{constructor(){const t=new u.a({type:"[datepicker] dispatcher init"});super(t,E,new l.a(v,t,E))}}class q extends g{constructor(t,e,n,r,i,s,o){super(),this._config=e,this._store=n,this._element=r,this._actions=i,this._positionService=o,this.valueChange=new a.EventEmitter,this.animationState="void",this._subs=[],this._effects=s,t.setStyle(r.nativeElement,"display","block"),t.setStyle(r.nativeElement,"position","absolute")}set value(t){this._effects.setValue(t)}ngOnInit(){this._positionService.setOptions({modifiers:{flip:{enabled:this._config.adaptivePosition}},allowedPositions:["top","bottom"]}),this._positionService.event$.pipe(Object(s.a)(1)).subscribe(()=>{this._positionService.disable(),this.animationState=this._config.isAnimated?this.isTopPosition?"animated-up":"animated-down":"unanimated"}),this.isOtherMonthsActive=this._config.selectFromOtherMonth,this.containerClass=this._config.containerClass,this._effects.init(this._store).setOptions(this._config).setBindings(this).setEventHandlers(this).registerDatepickerSideEffects(),this._subs.push(this._store.select(t=>t.selectedDate).subscribe(t=>this.valueChange.emit(t)))}get isTopPosition(){return this._element.nativeElement.classList.contains("top")}positionServiceEnable(){this._positionService.enable()}daySelectHandler(t){(this.isOtherMonthsActive?t.isDisabled:t.isOtherMonth||t.isDisabled)||this._store.dispatch(this._actions.select(t.date))}ngOnDestroy(){for(const t of this._subs)t.unsubscribe();this._effects.destroy()}}class j{constructor(t,e,n,r,i){this._config=t,this.placement="bottom",this.triggers="click",this.outsideClick=!0,this.container="body",this.outsideEsc=!0,this.bsValueChange=new a.EventEmitter,this._subs=[],Object.assign(this,this._config),this._datepicker=i.createLoader(e,r,n),this.onShown=this._datepicker.onShown,this.onHidden=this._datepicker.onHidden}get isOpen(){return this._datepicker.isShown}set isOpen(t){t?this.show():this.hide()}set bsValue(t){this._bsValue&&t&&this._bsValue.getTime()===t.getTime()||(this._bsValue=t,this.bsValueChange.emit(t))}ngOnInit(){this._datepicker.listen({outsideClick:this.outsideClick,outsideEsc:this.outsideEsc,triggers:this.triggers,show:()=>this.show()}),this.setConfig()}ngOnChanges(t){this._datepickerRef&&this._datepickerRef.instance&&(t.minDate&&(this._datepickerRef.instance.minDate=this.minDate),t.maxDate&&(this._datepickerRef.instance.maxDate=this.maxDate),t.daysDisabled&&(this._datepickerRef.instance.daysDisabled=this.daysDisabled),t.datesDisabled&&(this._datepickerRef.instance.datesDisabled=this.datesDisabled),t.isDisabled&&(this._datepickerRef.instance.isDisabled=this.isDisabled),t.dateCustomClasses&&(this._datepickerRef.instance.dateCustomClasses=this.dateCustomClasses))}show(){this._datepicker.isShown||(this.setConfig(),this._datepickerRef=this._datepicker.provide({provide:h,useValue:this._config}).attach(q).to(this.container).position({attachment:this.placement}).show({placement:this.placement}),this._subs.push(this.bsValueChange.subscribe(t=>{this._datepickerRef.instance.value=t})),this._subs.push(this._datepickerRef.instance.valueChange.subscribe(t=>{this.bsValue=t,this.hide()})))}hide(){this.isOpen&&this._datepicker.hide();for(const t of this._subs)t.unsubscribe()}toggle(){if(this.isOpen)return this.hide();this.show()}setConfig(){this._config=Object.assign({},this._config,this.bsConfig,{value:this._bsValue,isDisabled:this.isDisabled,minDate:this.minDate||this.bsConfig&&this.bsConfig.minDate,maxDate:this.maxDate||this.bsConfig&&this.bsConfig.maxDate,daysDisabled:this.daysDisabled||this.bsConfig&&this.bsConfig.daysDisabled,dateCustomClasses:this.dateCustomClasses||this.bsConfig&&this.bsConfig.dateCustomClasses,datesDisabled:this.datesDisabled||this.bsConfig&&this.bsConfig.datesDisabled,minMode:this.minMode||this.bsConfig&&this.bsConfig.minMode})}ngOnDestroy(){this._datepicker.dispose()}}class F extends h{}class G extends q{constructor(t,e,n,a,r,i,s){super(t,e,n,a,r,i,s),t.setStyle(a.nativeElement,"display","inline-block"),t.setStyle(a.nativeElement,"position","static")}}class V extends h{constructor(){super(...arguments),this.displayMonths=2,this.isAnimated=!1}}class z extends g{constructor(t,e,n,r,i,s,o){super(),this._config=e,this._store=n,this._element=r,this._actions=i,this._positionService=o,this.valueChange=new a.EventEmitter,this.animationState="void",this._rangeStack=[],this._subs=[],this._effects=s,t.setStyle(r.nativeElement,"display","block"),t.setStyle(r.nativeElement,"position","absolute")}set value(t){this._effects.setRangeValue(t)}ngOnInit(){this._positionService.setOptions({modifiers:{flip:{enabled:this._config.adaptivePosition}},allowedPositions:["top","bottom"]}),this._positionService.event$.pipe(Object(s.a)(1)).subscribe(()=>{this._positionService.disable(),this.animationState=this._config.isAnimated?this.isTopPosition?"animated-up":"animated-down":"unanimated"}),this.containerClass=this._config.containerClass,this.isOtherMonthsActive=this._config.selectFromOtherMonth,this._effects.init(this._store).setOptions(this._config).setBindings(this).setEventHandlers(this).registerDatepickerSideEffects(),this._subs.push(this._store.select(t=>t.selectedRange).subscribe(t=>this.valueChange.emit(t)))}get isTopPosition(){return this._element.nativeElement.classList.contains("top")}positionServiceEnable(){this._positionService.enable()}daySelectHandler(t){(this.isOtherMonthsActive?t.isDisabled:t.isOtherMonth||t.isDisabled)||(1===this._rangeStack.length&&(this._rangeStack=t.date>=this._rangeStack[0]?[this._rangeStack[0],t.date]:[t.date]),0===this._rangeStack.length&&(this._rangeStack=[t.date]),this._store.dispatch(this._actions.selectRange(this._rangeStack)),2===this._rangeStack.length&&(this._rangeStack=[]))}ngOnDestroy(){for(const t of this._subs)t.unsubscribe();this._effects.destroy()}}class B extends z{constructor(t,e,n,a,r,i,s){super(t,e,n,a,r,i,s),t.setStyle(a.nativeElement,"display","inline-block"),t.setStyle(a.nativeElement,"position","static")}}class Y{constructor(t,e,n,a,r){this._picker=t,this._localeService=e,this._renderer=n,this._elRef=a,this.changeDetection=r,this._onChange=Function.prototype,this._onTouched=Function.prototype,this._validatorChange=Function.prototype,this._picker.bsValueChange.subscribe(t=>{let e=t;if(t){const n=this._localeService.currentLocale,a=Object(o.k)(n);if(!a)throw new Error(`Locale "${n}" is not defined, please add it with "defineLocale(...)"`);e=a.preinput(t)}this._setInputValue(e),this._value!==e&&(this._value=e,this._onChange(e),this._onTouched()),this.changeDetection.markForCheck()}),this._localeService.localeChange.subscribe(()=>{this._setInputValue(this._value)})}_setInputValue(t){const e=t?Object(o.f)(t,this._picker._config.dateInputFormat,this._localeService.currentLocale):"";this._renderer.setProperty(this._elRef.nativeElement,"value",e)}onChange(t){this.writeValue(t.target.value),this._onChange(this._value),this._onTouched()}validate(t){const e=t.value;if(null==e||""===e)return null;if(Object(o.q)(e)){if(!Object(o.r)(e))return{bsDate:{invalid:e}};if(this._picker&&this._picker.minDate&&Object(o.p)(e,this._picker.minDate,"date"))return this.writeValue(this._picker.minDate),{bsDate:{minDate:this._picker.minDate}};if(this._picker&&this._picker.maxDate&&Object(o.n)(e,this._picker.maxDate,"date"))return this.writeValue(this._picker.maxDate),{bsDate:{maxDate:this._picker.maxDate}}}}registerOnValidatorChange(t){this._validatorChange=t}writeValue(t){if(t){const e=this._localeService.currentLocale;if(!Object(o.k)(e))throw new Error(`Locale "${e}" is not defined, please add it with "defineLocale(...)"`);this._value=Object(o.B)(t,this._picker._config.dateInputFormat,this._localeService.currentLocale),this._picker._config.useUtc&&(this._value=Object(o.H)(this._value))}else this._value=null;this._picker.bsValue=this._value}setDisabledState(t){this._picker.isDisabled=t,t?this._renderer.setAttribute(this._elRef.nativeElement,"disabled","disabled"):this._renderer.removeAttribute(this._elRef.nativeElement,"disabled")}registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}onBlur(){this._onTouched()}hide(){this._picker.hide(),this._renderer.selectRootElement(this._elRef.nativeElement).blur()}}class H extends h{constructor(){super(...arguments),this.displayMonths=2}}class U{}class W{}class K{}class ${constructor(t,e,n){this._config=t,this._elRef=e,this._renderer=n}ngOnInit(){this.day.isToday&&this._config&&this._config.customTodayClass&&this._renderer.addClass(this._elRef.nativeElement,this._config.customTodayClass),"string"==typeof this.day.customClasses&&this.day.customClasses.split(" ").filter(t=>t).forEach(t=>{this._renderer.addClass(this._elRef.nativeElement,t)})}}const J=function(){var t={UP:0,DOWN:1};return t[t.UP]="UP",t[t.DOWN]="DOWN",t}();class Z{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter}navTo(t){this.onNavigate.emit(t?J.DOWN:J.UP)}view(t){this.onViewMode.emit(t)}}class Q{constructor(t){this._config=t,this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter,this.onHoverWeek=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{month:J.DOWN===t?-1:1}})}changeViewMode(t){this.onViewMode.emit(t)}selectDay(t){this.onSelect.emit(t)}selectWeek(t){if(!this._config.selectWeek)return;if(t.days&&t.days[0]&&!t.days[0].isDisabled&&this._config.selectFromOtherMonth)return void this.onSelect.emit(t.days[0]);if(0===t.days.length)return;const e=t.days.find(t=>(this._config.selectFromOtherMonth||!t.isOtherMonth)&&!t.isDisabled);this.onSelect.emit(e)}weekHoverHandler(t,e){this._config.selectWeek&&t.days.find(t=>(this._config.selectFromOtherMonth||!t.isOtherMonth)&&!t.isDisabled)&&(t.isHovered=e,this.isWeekHovered=e,this.onHoverWeek.emit(t))}hoverDay(t,e){this._config.selectFromOtherMonth&&t.isOtherMonth&&(t.isOtherMonthHovered=e),this.onHover.emit({cell:t,isHovered:e})}}class X{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{year:J.DOWN===t?-1:1}})}viewMonth(t){this.onSelect.emit(t)}hoverMonth(t,e){this.onHover.emit({cell:t,isHovered:e})}changeViewMode(t){this.onViewMode.emit(t)}}class tt{constructor(){this.ampm="ok",this.hours=0,this.minutes=0}}class et{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{year:16*(J.DOWN===t?-1:1)}})}viewYear(t){this.onSelect.emit(t)}hoverYear(t,e){this.onHover.emit({cell:t,isHovered:e})}changeViewMode(t){this.onViewMode.emit(t)}}class nt{static forRoot(){return{ngModule:nt,providers:[c.a,d.a,M,p,h,H,F,V,m,b]}}}class at{format(t,e,n){return Object(o.f)(t,e,n)}}class rt{constructor(){this.selectionDone=new a.EventEmitter(void 0),this.update=new a.EventEmitter(!1),this.activeDateChange=new a.EventEmitter(void 0),this.stepDay={},this.stepMonth={},this.stepYear={},this.modes=["day","month","year"],this.dateFormatter=new at}get activeDate(){return this._activeDate}set activeDate(t){this._activeDate=t}ngOnInit(){this.uniqueId="datepicker--"+Math.floor(1e4*Math.random()),this.initDate?(this.activeDate=this.initDate,this.selectedDate=new Date(this.activeDate.valueOf()),this.update.emit(this.activeDate)):void 0===this.activeDate&&(this.activeDate=new Date)}ngOnChanges(t){this.refreshView(),this.checkIfActiveDateGotUpdated(t.activeDate)}checkIfActiveDateGotUpdated(t){if(t&&!t.firstChange){const e=t.previousValue;e&&e instanceof Date&&e.getTime()!==t.currentValue.getTime()&&this.activeDateChange.emit(this.activeDate)}}setCompareHandler(t,e){"day"===e&&(this.compareHandlerDay=t),"month"===e&&(this.compareHandlerMonth=t),"year"===e&&(this.compareHandlerYear=t)}compare(t,e){if(void 0!==t&&void 0!==e)return"day"===this.datepickerMode&&this.compareHandlerDay?this.compareHandlerDay(t,e):"month"===this.datepickerMode&&this.compareHandlerMonth?this.compareHandlerMonth(t,e):"year"===this.datepickerMode&&this.compareHandlerYear?this.compareHandlerYear(t,e):void 0}setRefreshViewHandler(t,e){"day"===e&&(this.refreshViewHandlerDay=t),"month"===e&&(this.refreshViewHandlerMonth=t),"year"===e&&(this.refreshViewHandlerYear=t)}refreshView(){"day"===this.datepickerMode&&this.refreshViewHandlerDay&&this.refreshViewHandlerDay(),"month"===this.datepickerMode&&this.refreshViewHandlerMonth&&this.refreshViewHandlerMonth(),"year"===this.datepickerMode&&this.refreshViewHandlerYear&&this.refreshViewHandlerYear()}dateFilter(t,e){return this.dateFormatter.format(t,e,this.locale)}isActive(t){return 0===this.compare(t.date,this.activeDate)&&(this.activeDateId=t.uid,!0)}createDateObject(t,e){const n={};return n.date=new Date(t.getFullYear(),t.getMonth(),t.getDate()),n.date=this.fixTimeZone(n.date),n.label=this.dateFilter(t,e),n.selected=0===this.compare(t,this.selectedDate),n.disabled=this.isDisabled(t),n.current=0===this.compare(t,new Date),n.customClass=this.getCustomClassForDate(n.date),n}split(t,e){const n=[];for(;t.length>0;)n.push(t.splice(0,e));return n}fixTimeZone(t){const e=t.getHours();return new Date(t.getFullYear(),t.getMonth(),t.getDate(),23===e?e+2:0)}select(t,e=!0){this.datepickerMode===this.minMode?(this.activeDate||(this.activeDate=new Date(0,0,0,0,0,0,0)),this.activeDate=new Date(t.getFullYear(),t.getMonth(),t.getDate()),this.activeDate=this.fixTimeZone(this.activeDate),e&&this.selectionDone.emit(this.activeDate)):(this.activeDate=new Date(t.getFullYear(),t.getMonth(),t.getDate()),this.activeDate=this.fixTimeZone(this.activeDate),e&&(this.datepickerMode=this.modes[this.modes.indexOf(this.datepickerMode)-1])),this.selectedDate=new Date(this.activeDate.valueOf()),this.update.emit(this.activeDate),this.refreshView()}move(t){let e;if("day"===this.datepickerMode&&(e=this.stepDay),"month"===this.datepickerMode&&(e=this.stepMonth),"year"===this.datepickerMode&&(e=this.stepYear),e){const n=this.activeDate.getFullYear()+t*(e.years||0),a=this.activeDate.getMonth()+t*(e.months||0);this.activeDate=new Date(n,a,1),this.refreshView(),this.activeDateChange.emit(this.activeDate)}}toggleMode(t){const e=t||1;this.datepickerMode===this.maxMode&&1===e||this.datepickerMode===this.minMode&&-1===e||(this.datepickerMode=this.modes[this.modes.indexOf(this.datepickerMode)+e],this.refreshView())}getCustomClassForDate(t){if(!this.customClass)return"";const e=this.customClass.find(e=>e.date.valueOf()===t.valueOf()&&e.mode===this.datepickerMode,this);return void 0===e?"":e.clazz}compareDateDisabled(t,e){if(void 0!==t&&void 0!==e)return"day"===t.mode&&this.compareHandlerDay?this.compareHandlerDay(t.date,e):"month"===t.mode&&this.compareHandlerMonth?this.compareHandlerMonth(t.date,e):"year"===t.mode&&this.compareHandlerYear?this.compareHandlerYear(t.date,e):void 0}isDisabled(t){let e=!1;return this.dateDisabled&&this.dateDisabled.forEach(n=>{0===this.compareDateDisabled(n,t)&&(e=!0)}),this.dayDisabled&&(e=e||this.dayDisabled.indexOf(t.getDay())>-1),e||this.minDate&&this.compare(t,this.minDate)<0||this.maxDate&&this.compare(t,this.maxDate)>0}}class it{constructor(){this.locale="en",this.datepickerMode="day",this.startingDay=0,this.yearRange=20,this.minMode="day",this.maxMode="year",this.showWeeks=!0,this.formatDay="DD",this.formatMonth="MMMM",this.formatYear="YYYY",this.formatDayHeader="dd",this.formatDayTitle="MMMM YYYY",this.formatMonthTitle="YYYY",this.onlyCurrentMonth=!1,this.monthColLimit=3,this.yearColLimit=5,this.shortcutPropagation=!1}}class st{constructor(t){this.datepickerMode="day",this.showWeeks=!0,this.selectionDone=new a.EventEmitter(void 0),this.activeDateChange=new a.EventEmitter(void 0),this.onChange=Function.prototype,this.onTouched=Function.prototype,this._now=new Date,this.config=t,this.configureOptions()}get activeDate(){return this._activeDate||this._now}set activeDate(t){this._activeDate=t}configureOptions(){Object.assign(this,this.config)}onUpdate(t){this.activeDate=t,this.onChange(t)}onSelectionDone(t){this.selectionDone.emit(t)}onActiveDateChange(t){this.activeDateChange.emit(t)}writeValue(t){if(0!==this._datePicker.compare(t,this._activeDate))return t&&t instanceof Date?(this.activeDate=t,void this._datePicker.select(t,!1)):void(this.activeDate=t?new Date(t):void 0)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}}class ot{constructor(t){this.labels=[],this.rows=[],this.weekNumbers=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepDay={months:1},this.datePicker.setRefreshViewHandler((function(){const e=this.activeDate.getFullYear(),n=this.activeDate.getMonth(),a=new Date(e,n,1),r=this.startingDay-a.getDay(),i=r>0?7-r:-r,s=new Date(a.getTime());i>0&&s.setDate(1-i);const o=t.getDates(s,42),u=[];for(let t=0;t<42;t++){const e=this.createDateObject(o[t],this.formatDay);e.secondary=o[t].getMonth()!==n,e.uid=this.uniqueId+"-"+t,u[t]=e}t.labels=[];for(let l=0;l<7;l++)t.labels[l]={},t.labels[l].abbr=this.dateFilter(u[l].date,this.formatDayHeader),t.labels[l].full=this.dateFilter(u[l].date,"EEEE");if(t.title=this.dateFilter(this.activeDate,this.formatDayTitle),t.rows=this.split(u,7),this.showWeeks){t.weekNumbers=[];const e=(11-this.startingDay)%7,n=t.rows.length;for(let a=0;a<n;a++)t.weekNumbers.push(t.getISO8601WeekNumber(t.rows[a][e].date))}}),"day"),this.datePicker.setCompareHandler((function(t,e){const n=new Date(t.getFullYear(),t.getMonth(),t.getDate()),a=new Date(e.getFullYear(),e.getMonth(),e.getDate());return n.getTime()-a.getTime()}),"day"),this.datePicker.refreshView()}getDates(t,e){const n=new Array(e);let a,r=new Date(t.getTime()),i=0;for(;i<e;)a=new Date(r.getTime()),a=this.datePicker.fixTimeZone(a),n[i++]=a,r=new Date(a.getFullYear(),a.getMonth(),a.getDate()+1);return n}getISO8601WeekNumber(t){const e=new Date(t.getTime());e.setDate(e.getDate()+4-(e.getDay()||7));const n=e.getTime();return e.setMonth(0),e.setDate(1),Math.floor(Math.round((n-e.getTime())/864e5)/7)+1}}class ut{constructor(t){this.rows=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepMonth={years:1},this.datePicker.setRefreshViewHandler((function(){const e=new Array(12),n=this.activeDate.getFullYear();let a;for(let t=0;t<12;t++)a=new Date(n,t,1),a=this.fixTimeZone(a),e[t]=this.createDateObject(a,this.formatMonth),e[t].uid=this.uniqueId+"-"+t;t.title=this.dateFilter(this.activeDate,this.formatMonthTitle),t.rows=this.split(e,t.datePicker.monthColLimit)}),"month"),this.datePicker.setCompareHandler((function(t,e){const n=new Date(t.getFullYear(),t.getMonth()),a=new Date(e.getFullYear(),e.getMonth());return n.getTime()-a.getTime()}),"month"),this.datePicker.refreshView()}}class lt{constructor(t){this.rows=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepYear={years:this.datePicker.yearRange},this.datePicker.setRefreshViewHandler((function(){const e=new Array(this.yearRange);let n;const a=t.getStartingYear(this.activeDate.getFullYear());for(let t=0;t<this.yearRange;t++)n=new Date(a+t,0,1),n=this.fixTimeZone(n),e[t]=this.createDateObject(n,this.formatYear),e[t].uid=this.uniqueId+"-"+t;t.title=[e[0].label,e[this.yearRange-1].label].join(" - "),t.rows=this.split(e,t.datePicker.yearColLimit)}),"year"),this.datePicker.setCompareHandler((function(t,e){return t.getFullYear()-e.getFullYear()}),"year"),this.datePicker.refreshView()}getStartingYear(t){return(t-1)/this.datePicker.yearRange*this.datePicker.yearRange+1}}class dt{static forRoot(){return{ngModule:dt,providers:[it]}}}},im1V:function(t,e,n){var a=n("Q7RW"),r=n("KNDS");t.exports=function(t){return null!=t&&r(t.length)&&!a(t)}},insk:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");n("20UP");class r{constructor(t,e,n){this.sanitizer=t,this.settingsService=e,this.i18n=n,this.grafanaExist=!1,this.mode="&kiosk",this.loading=!0,this.styles={},this.dashboardExist=!0,this.icons=a.a,this.DEFAULT_TIME="from=now-1h&to=now",this.grafanaTimes=[{name:this.i18n("Last 5 minutes"),value:"from=now-5m&to=now"},{name:this.i18n("Last 15 minutes"),value:"from=now-15m&to=now"},{name:this.i18n("Last 30 minutes"),value:"from=now-30m&to=now"},{name:this.i18n("Last 1 hour (Default)"),value:"from=now-1h&to=now"},{name:this.i18n("Last 3 hours"),value:"from=now-3h&to=now"},{name:this.i18n("Last 6 hours"),value:"from=now-6h&to=now"},{name:this.i18n("Last 12 hours"),value:"from=now-12h&to=now"},{name:this.i18n("Last 24 hours"),value:"from=now-24h&to=now"},{name:this.i18n("Yesterday"),value:"from=now-1d%2Fd&to=now-1d%2Fd"},{name:this.i18n("Today so far"),value:"from=now%2Fd&to=now"},{name:this.i18n("Day before yesterday"),value:"from=now-2d%2Fd&to=now-2d%2Fd"},{name:this.i18n("Last 2 days"),value:"from=now-2d&to=now"},{name:this.i18n("This day last week"),value:"from=now-7d%2Fd&to=now-7d%2Fd"},{name:this.i18n("Previous week"),value:"from=now-1w%2Fw&to=now-1w%2Fw"},{name:this.i18n("This week so far"),value:"from=now%2Fw&to=now"},{name:this.i18n("Last 7 days"),value:"from=now-7d&to=now"},{name:this.i18n("Previous month"),value:"from=now-1M%2FM&to=now-1M%2FM"},{name:this.i18n("This month so far"),value:"from=now%2FM&to=now"},{name:this.i18n("Last 30 days"),value:"from=now-30d&to=now"},{name:this.i18n("Last 90 days"),value:"from=now-90d&to=now"},{name:this.i18n("Last 6 months"),value:"from=now-6M&to=now"},{name:this.i18n("Last 1 year"),value:"from=now-1y&to=now"},{name:this.i18n("Previous year"),value:"from=now-1y%2Fy&to=now-1y%2Fy"},{name:this.i18n("This year so far"),value:"from=now%2Fy&to=now"},{name:this.i18n("Last 2 years"),value:"from=now-2y&to=now"},{name:this.i18n("Last 5 years"),value:"from=now-5y&to=now"}]}ngOnInit(){this.time=this.DEFAULT_TIME,this.styles={one:"grafana_one",two:"grafana_two",three:"grafana_three",four:"grafana_four"},this.settingsService.ifSettingConfigured("api/grafana/url",t=>{this.grafanaExist=!0,this.loading=!1,this.baseUrl=t+"/d/",this.getFrame()}),this.panelStyle=this.styles[this.grafanaStyle]}getFrame(){this.settingsService.validateGrafanaDashboardUrl(this.uid).subscribe(t=>this.dashboardExist=200===t),this.url=this.baseUrl+this.uid+"/"+this.grafanaPath+"&refresh=2s"+this.mode+"&"+this.time,this.grafanaSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.url)}onTimepickerChange(){this.grafanaExist&&this.getFrame()}reset(){this.time=this.DEFAULT_TIME,this.grafanaExist&&this.getFrame()}ngOnChanges(){this.grafanaExist&&this.getFrame()}}},ioe2:function(t,e,n){var a=n("xAZD");t.exports=function(t,e){return a(e,(function(e){return t[e]}))}},iqWW:function(t,e,n){"use strict";var a=n("ZUd8").charAt;t.exports=function(t,e,n){return e+(n?a(t,e).length:1)}},isl5:function(t,e,n){var a=n("Wa4q");t.exports=a["__core-js_shared__"]},iutN:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("FE24"),i=n("GS7A"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,1,"div",[],[[2,"dropup",null],[2,"dropdown",null],[2,"show",null],[2,"open",null]],null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){var n=e.component;t(e,0,0,"up"===n.direction,"down"===n.direction,n.isOpen,n.isOpen)}))}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-dropdown-container",[["style","display:block;position: absolute;"]],null,null,null,o,s)),a["ɵdid"](1,180224,null,0,r.b,[r.f,a.ChangeDetectorRef,a.Renderer2,a.ElementRef,i.b],null,null)],null,null)}var l=a["ɵccf"]("bs-dropdown-container",r.b,u,{},{},["*"])},j09V:function(t,e,n){(function(t){var a=n("Wa4q"),r=e&&!e.nodeType&&e,i=r&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===r?a.Buffer:void 0,o=s?s.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,a=o?o(n):new t.constructor(n);return t.copy(a),a}}).call(this,n("YuTi")(t))},j8L6:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("25BL"),i=n("uIqm"),s=n("DqMs"),o=n("/NlG"),u=n("GiVz"),l=n("o4+5"),d=n("aXbf"),c=n("SVse");n("b5OY"),n("pxLl"),n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return b}));var f=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function h(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," "," "])),a["ɵppd"](1,1)],null,(function(t,e){var n=a["ɵunv"](e,0,0,t(e,1,0,a["ɵnov"](e.parent.parent,0),e.context.row.value));t(e,0,0,n,e.context.row.unit)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.getCounters(n)&&a),a}),r.b,r.a)),a["ɵdid"](1,2867200,null,0,i.a,[a.NgZone,a.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoSave:[3,"autoSave"]},{fetchData:"fetchData"}),(t()(),a["ɵand"](0,[[1,2],["valueTpl",2]],null,0,null,h))],(function(t,e){var n=e.component;t(e,1,0,n.counters,n.columns,"flex",!1)}),null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Performance counters not available"]))],(function(t,e){t(e,1,0,"warning")}),null)}function b(t){return a["ɵvid"](0,[a["ɵpid"](0,l.a,[d.a]),a["ɵqud"](671088640,1,{valueTpl:0}),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](3,16384,null,0,c.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["warning",2]],null,0,null,p))],(function(t,e){t(e,3,0,e.component.counters,a["ɵnov"](e,4))}),null)}},"jKX/":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));class a{constructor(t=[]){["read","create","update","delete"].forEach(e=>this[e]=t.includes(e))}}class r{constructor(t){this.hosts=new a(t.hosts),this.configOpt=new a(t["config-opt"]),this.pool=new a(t.pool),this.osd=new a(t.osd),this.monitor=new a(t.monitor),this.rbdImage=new a(t["rbd-image"]),this.iscsi=new a(t.iscsi),this.rbdMirroring=new a(t["rbd-mirroring"]),this.rgw=new a(t.rgw),this.cephfs=new a(t.cephfs),this.manager=new a(t.manager),this.log=new a(t.log),this.user=new a(t.user),this.grafana=new a(t.grafana),this.prometheus=new a(t.prometheus),this.nfs=new a(t["nfs-ganesha"])}}},jNLg:function(t,e,n){var a=n("hmSm"),r=n("QpVZ"),i=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(r(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var n=o.test(t);return n||u.test(t)?l(t.slice(2),n?2:8):s.test(t)?NaN:+t}},jUeY:function(t,e,n){!function(t){"use strict";t.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(t,e){return t?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(t,e,n){return t>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(t){return"μ"===(t+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(t,e){var n,a=this._calendarEl[t],r=e&&e.hours();return((n=a)instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(a=a.apply(e)),a.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n("wd/R"))},jV1L:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({selector:"tree-node-expander",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <span\n        *ngIf="node.hasChildren"\n        [class.toggle-children-wrapper-expanded]="node.isExpanded"\n        [class.toggle-children-wrapper-collapsed]="node.isCollapsed"\n        class="toggle-children-wrapper"\n        (click)="node.mouseAction(\'expanderClick\', $event)"\n      >\n        <span class="toggle-children"></span>\n      </span>\n      <span *ngIf="!node.hasChildren" class="toggle-children-placeholder">\n      </span>\n    </ng-container>\n  '})],t)}()},jVDg:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n){this.poolName=t,this.namespace=e,this.imageName=n}static fromString(t){const e=t.split("/");return new this(e[0],e.length>=3?e[1]:null,e.length>=3?e[2]:e[1])}getNameSpace(){return this.namespace?this.namespace+"/":""}toString(){return`${this.poolName}/${this.getNameSpace()}${this.imageName}`}toStringEncoded(){return encodeURIComponent(`${this.poolName}/${this.getNameSpace()}${this.imageName}`)}}},jVdC:function(t,e,n){!function(t){"use strict";var e="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function a(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function r(t,e,n){var r=t+" ";switch(n){case"ss":return r+(a(t)?"sekundy":"sekund");case"m":return e?"minuta":"minutę";case"mm":return r+(a(t)?"minuty":"minut");case"h":return e?"godzina":"godzinę";case"hh":return r+(a(t)?"godziny":"godzin");case"MM":return r+(a(t)?"miesiące":"miesięcy");case"yy":return r+(a(t)?"lata":"lat")}}t.defineLocale("pl",{months:function(t,a){return t?""===a?"("+n[t.month()]+"|"+e[t.month()]+")":/D MMMM/.test(a)?n[t.month()]:e[t.month()]:e},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:r,m:r,mm:r,h:r,hh:r,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:r,y:"rok",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},jZKg:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("HDdC"),r=n("quSY");function i(t,e){return new a.a(n=>{const a=new r.a;let i=0;return a.add(e.schedule((function(){i!==t.length?(n.next(t[i++]),n.closed||a.add(this.schedule())):n.complete()}))),a})}},jfSC:function(t,e,n){!function(t){"use strict";var e={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};t.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(t){return/بعد از ظهر/.test(t)},meridiem:function(t,e,n){return t<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(t){return t.replace(/[۰-۹]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n("wd/R"))},jnO4:function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,n,i,s){var o=a(e),u=r[t][a(e)];return 2===o&&(u=u[n?0:1]),u.replace(/%d/i,e)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},jqoL:function(t,e,n){var a=n("+NyF"),r=n("RvDp");t.exports=function(t,e){return null!=t&&r(t,e,a)}},jqst:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="id-ID">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Pengalih navigasi</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dasbor</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klaster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hos</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Layanan</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfigurasi</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>peta CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Modul Ceph Manajer</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Log</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blok</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Pencerminan</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemfile</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Pengguna</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Buket</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Pilih bahasa</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Memuat data panel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Pemilih Waktu Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Reset Pengaturan</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Kembali</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Gagal memuat data.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>dipilih</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>ditemukan</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nama</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Deskripsi</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Deskripsi lengkap</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Bawaan</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon bawaan</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Nilai</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Simpan</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Penampil peta CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Memuat...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nama hos</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Isian ini tidak boleh kosong.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ya, saya yakin.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Batal</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Tutup</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Daftar Hos</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Performa Keseluruhan</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Entri tidak ditemukan</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Log Klaster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Log Audit</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Memuat konfigurasi...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Konfigurasi tidak dapat dimuat.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Edit modul Ceph Manajer</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Nilai yang dimasukkan bukan UUID yang valid, cth: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Nilai yang dimasukkan harus alamat IP yang valid.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Nilai yang dimasukkan harus berupa angka.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Nilai yang dimasukkan harus berupa angka atau desimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Perbarui</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID Klaster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap diubah</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kuorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kuorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con yang dibutuhkan</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon yang dibutuhkan</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Memenuhi Kuorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Tidak dalam Kuorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Tambah</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Fitur</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flag OSD Klaster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Kirim</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Tingkat lanjut...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioritas pemulihan OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioritas</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Ubah nilai prioritas</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Isian ini harus diisi!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Nilai harus antara 0 dan 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ubah bobot</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Dalam } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {dalam } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Daftar OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Nilai</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Edit</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Hapus</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Kesehatan</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistik </target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klien</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Semua klien dapat mengakses</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Alamat</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Wajib diisi</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Harus mengandung satu atau lebih nilai yang dipisahkan koma</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Contoh:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipe Akses</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Tambah klien</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Klaster tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Pilih klaster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Tambah daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend Penyimpanan</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Tidak ada pool data tersedia --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Pilih backend penyimpanan --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Pengguna Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Pengguna tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Pilih pengguna gerbang objek --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID Pengguna CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Klien tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Pilih klien cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nama CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Label Keamanan</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Aktifkan label keamanan</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS Path</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Lintasan atau path harus dimulai dengan \'/\' dan diikuti dengan kata</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Direktori baru akan dibuat</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Path</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Path hanya boleh berupa \'/\' atau kata</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Buket baru akan dibuat</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protokol NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klien mungkin tidak dapat mount subdirektori (cth. jika Tag = foo, klien mungkin tidak bisa mount foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Dengan menggunakan opsi Tag yang berbeda, Path yang sama akan diekspor beberapa kali.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Dengan menggunakan opsi Pseudo yang berbeda, Path yang sama akan diekspor beberapa kali.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Tipe akses tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Pilih tipe akses --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Squash tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Pilih jenis squashing id pengguna yang akan dilakukan --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protokol Transport</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Selamat datang di Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nama pengguna harus diisi</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Kata sandi harus diisi</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Masuk</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Maaf, pengguna tidak terdaftar di Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Terlarang</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Maaf, Anda tidak dizinkan melihat hal yang Anda inginkan.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Konfigurasi RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Menghapus nilai konfigurasi lokal. Nilai konfigurasi induk akan diturun dan digunakan.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Nilai minimum adalah 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Daftar pool</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Nama hanya boleh terdiri dari alfanumerik, tanda hubung, dan garis bawah.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Nama profil erasure code sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Pecahan data (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Harus sama dengan atau lebih dari 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Pecahan Coding (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Harus sama dengan atau lebih dari 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Penduga daya tahan (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Lokalitas (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domain kegagalan Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalitas Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Tidak ada</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Teknik</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Ukuran paket</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crush root</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Kelas perangkat Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>apa saja</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Direktori</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nama...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Nama pool Ceph yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Jenis pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Pilih jenis pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grup penempatan</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Dibutuhkan setidaknya satu grup penempatan!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Klaster Anda tidak dapat menangani PG sebanyak ini. Mohon hitung ulang jumlah PG yang dibutuhkan.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Bantuan penghitungan</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Jumlah replikasi</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flag</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC Overwrites</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplikasi</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil erasure code</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Tidak ada profil erasure code --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Pilih profil erasure code --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Aturan CRUSH</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Pilih aturan crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Aturan crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush steps</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Kompresi</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Mode</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritma</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Tidak ada algoritma pengompresian erasure --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Ukuran blob minimum</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>cth. 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Nilai harus lebih besar dari 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Ukuran maksimum blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>cth. 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Nilai harus lebih besar dari ukuran minimum blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rasio</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rasio kompresi</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Nilai harus antara 0.0 dan 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>cth. 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detail</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detail Performa</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detil Cache Bertingkat</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Pindahkan image ke tempat sampah</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Proteksi berakhir pada</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>TIDAK DIPROTEKSI</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Format tanggal salah. Mohon gunakan "TTTT-BB-HH JJ:mm:dd".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Proteksi telah kedaluarsa. Mohon pilih tanggal masa mendatang atau kosongkan.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Pindahkan Image</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Ikhtisar</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Target</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Otentikasi Discovery</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Pengguna</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nama pengguna harus terdiri dari 8 hingga 64 karakter dan\nhanya boleh mengandung huruf, \'.\', \'@\', \'-\', \'_\' atau \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Kata sandi</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Pengguna Bersama</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Kata sandi bersama</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informasi tersedia:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI Target tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool Data</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Dibuat</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Ukuran</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objek</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Ukuran objek</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Disiapkan</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total disiapkan</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unit setrip</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Jumlah setrip</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Induk</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Awalan nama blok</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Urutan</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshot</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Pengaturan ini akan membatalkan nilai global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Ini adalah nilai global. Tidak ada nilai yang diset untuk image ini.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' dan \'@\' tidak diperbolehkan.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Tidak ada pool rbd tersedia --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Pilih pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Gunakan pool data terdedikasi</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool data</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool terdedikasi yang menyimpan data-objek dari RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Anda harus menaikkan ukuran.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Tingkat lanjut</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Setrip</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unit setrip</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Pilih ukuran setrip --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Isian ini harus diisi karena jumlah setrip telah ditentukan!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Unit setrip lebih besar dari ukuran objek.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Jumlah setrip</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Isian wajib diisi karena unit setrip didefinisikan!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Jumlah setrip harus lebih besar dari 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Anda akan mengembalikan semula</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Kosongkan Tempah Sampah</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Semua</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nama Pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Pulihkan Image</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Untuk memulihkan</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>ketik nama baru image dan pilih</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nama Baru</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Kedaluwarsa pada</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Diproteksi hingga</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologi iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Mengganti parameter ini dari nilai bawaan biasanya tidak diperlukan.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Pengaturan</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Konfirmasi</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Pengaturan Lanjut</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Target IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Pola IQN salah.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Contoh: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Informasi lainnya</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Pengaturan lanjutan target ini telah dimodifikasi.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portal</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Tambahkan portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Pengaturan Image ini telah dimodifikasi.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Tambahkan image</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Otentikasi ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Inisiator</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Inisiator</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Klien IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Inisiator IQN harus unik.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nama pengguna harus terdiri atas 8 hingga 64 karakter dan\nhanya boleh mengandung huruf, \'.\', \'@\', \'-\', \'_\' atau \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Inisiator termasuk ke dalam grup. Image akan dikonfigurasi di dalam grup.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Tidak ada yang ditambahkan.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Tambahkan inisiator</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grup</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grup</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Tambahkan grup</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Tempat sampah</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Masalah</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Menyinkronkan</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Siap</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Edit mode pencerminan pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Klaster mitra harus dihapus sebelum menonaktfikan pencerminan.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Tambah} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nama Klaster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Nama klaster tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Alamat Monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Alamat dengan pemisah-koma...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Alamat monitor tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX Key</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64-encoded key...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Kunci CephX harus base64 encoded.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Penghitung kinerja tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Daftar Daemon</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Penghitung Performa</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Memuat data buket...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Id</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Nilai tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Nama yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Pemilik</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Pilih pengguna --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Diaktifkan</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Jenis indeks</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Aturan penempatan</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Penanda</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Penanda maksimum</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versi</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versi Master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Modifikasi waktu</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Zona grup</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Kuota Buket</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Ukuran maksimum</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Objek maksimum</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nama pengguna</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Pilih nama pengguna --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Kunci otomatis-dibuat</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Kunci akses</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Kunci rahasia</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nama lengkap</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Alamat email</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Dihentikan</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistem</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Buket maksimum</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subpengguna</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Kemampuan</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Kuota pengguna</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Tampilkan</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Kunci</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipe</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Pilih tipe --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Izin</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Pilih izin --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subpengguna</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>ID subpengguna sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>baca, tulis</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>penuh</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Kunci Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Sandi otomatis-dibuat</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Memuat data pengguna...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Data pengguna tidak dapat dimuat.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>ID pengguna yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ini bukan alamat email yang valid.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Alamat email yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Maks. buket</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Dimatikan</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Ubahsuai</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Kunci S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Tidak ada sub-pengguna.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Kunci tidak ditemukan.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Kemampuan tidak ada.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Ukuran tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Ukuran maks.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objek tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Objek maks.</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Nilai yang dimasukkan harus &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Deskripsi...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Izin</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Peran</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Konfirmasi kata sandi</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Konfirmasi kata sandi tidak sesuai dengan kata sandi.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Email</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Email tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Anda akan menghapus izin "pengguna baca / perbarui" dari diri Anda sendiri.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Jika melanjutkan, Anda tidak akan lagi dapat menambahkan atau menghapus peran dari pengguna manapun.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Anda yakin ingin melanjutkan?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Bantuan</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentasi </target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Tentang</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Pengaturan Dasbor</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Manajemen Pengguna</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Pengguna masuk</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Keluar</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atribut (peta OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadata tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadata</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Penghitung kinerja</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Tulis</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Baca</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Nilai saat ini</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Maks</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Sumber</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Level</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Boleh diperbarui saat dijalankan (bisa diedit)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tag</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Nilai Enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Lihat juga</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status Klaster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manajer Daemon</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Server Metadata</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Gateway iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS klien</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Throughput Pengguna</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Baca/Tulis Klien</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Throughput Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Scrub</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Kinerja</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Kapasitas mentah</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PG per OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapasitas</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Peringkat</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Terkini</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Otentikasi penemuan telah diperbarui</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Tidak ada portal yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Tidak ada image yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Tidak ada image yang tersedia. Mohon pastikan Anda telah menambahkan image ke target.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Tidak ada inisiator tersedia. Mohon pastikan Anda telah menambahkan inisiator ke target.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Target</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Keadaan</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Baca Bytes</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Tulis Bytes</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Ops Baca</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Ops Tulis</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Sejak</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Isu</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Kemajuan</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Mode Edit</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Tambahkan Mitra</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Edit Mitra</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Hapus Mitra</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Pemimpin</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Lokal</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Jauh</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>mitra pencerminan</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Kunci</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Perataan mendalam</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Lapisan</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Kunci eksklusif</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Peta objek (butuh kunci-eksklusif)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Penjurnalan (membutuhkan kunci-eksklusif)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>TIDAK DIPROTEKSI</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Kembalikan snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Kembalikan</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Dihapus pada</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipe</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>keadaan</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versi</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Hos</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>induk</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemon siaga</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Peringkat</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivitas</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Penggunaan</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Diperbarui</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Nilai dapat diperbarui saat runtime.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemon/klien tidak dapat mengambil nilai dari\nbasis data konfigurasi monitor. Kami tidak mengizinkan mengubah ini dari \'ceph config\nset ...\'. Pilihan ini harus dikonfigurasi melalui ceph.conf atau CLI.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Pilihan hanya dapat bekerja selama daemon dimulai.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Pilihan hanya berpengaruh pada pembuatan klaster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Pilihan hanya berpengaruh pada pembuatan daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Layanan</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Nilai saat ini</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Dapat diedit</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Aktifkan</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Nonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Menghubungkan kembali, mohon tunggu...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Alamat Publik</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Buka Sesi</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Tidak boleh Masuk</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD yang telah ditandai keluar tidak akan ditandai masuk saat mereka menyala</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Tidak boleh Keluar</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD tidak akan otomatis ditandai keluar setelah interval dikonfigurasi</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Tidak Nyala</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD tidak diizinkan menyala</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Tidak Mati</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Laporan kegagalan OSD sedang diabaikan sehingga monitor tidak akan menandai OSD mati</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Jeda</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Jeda baca dan tulis</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nonaktifkan Scrub</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Scrubbing dinonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nonaktifkan Deep Scrub</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Deep Scrubing dinonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Tidak ada Penambalan</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Penambalan PG dihentikan</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Tidak ada Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Pemulihan PG dihentikan</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Urutan Bitwise</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Gunakan urutan bitwise</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Buang Snapdirs</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD memiliki snapset yang dikonversi</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Pulihkan yang telah dihapus</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Penghapusan dilakukan saat pemulihan bukan saat bermitra</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Batas Maks Log PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Taruh batas maks pada panjang log pg</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flag OSD diperbarui</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>keluar</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>masuk</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>gugur</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Tandai</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD hilang</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>ditandai hilang</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Buang</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>dibuang</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>hancurkan</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>dihancurkan</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>hapus</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bita baca</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bita tulis</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Ops baca</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Ops tulis</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Maks Penambalan</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Maks Pemulihan Aktif</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Maks Menjalankan Pemulihan Tunggal</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Jeda Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Tugas</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Keparahan</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Dimulai</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Terpakai</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Tersedia</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Bersih</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Bekerja</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Peringatan</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Tidak diketahui</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>nyala</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>tidak ada filesistem</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktif</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>siaga</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon aktif</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kuorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Layanan NFS Ganesha belum dikonfigurasi.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Pengguna CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Filesistem CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(diturunkan dari konfig global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>diturunkan dari konfig global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Pilih jenis squashing id pengguna yang akan dilakukan --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Tidak ada daemon tersedia.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Mode Cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min Waktu Usir</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min Waktu Buang</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Target Maks Bita</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Target Maks Objek</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Tidak ada aplikasi ditambahkan</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Batas aplikasi tercapai</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Sebuah pool hanya dapat memiliki empat definisi aplikasi.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Karakter diperbolehkan \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Panjang maksimum 128 karakter</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Saring atau tambah aplikasi</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Tambah aplikasi</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil erasure code</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Ukuran Replikasi</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Perubahan Terakhir</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profil Erasure Code</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Aturan Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>buket</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>buket</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>pengguna</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>pengguna</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Cakupan</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Baca</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Buat</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Peran Sistem</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Perbarui pengguna</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Lanjutkan</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Anda dikeluarkan otomatis karena peran Anda telah berubah.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Tiap objek dipecah dalam pecahan-data, masing-masing disimpan pada OSD yang berbeda.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Hitung pecahan coding untuk tiap objek dan simpan pada OSD yang berbeda.\nJumlah pecahan data juga menjadi jumlah OSD yang diperbolehkan mati tanpa kehilangan data.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Plugin jerasure merupakan plugin paling umum dan fleksibel,\nserta merupakan plugin bawaan Ceph untuk pool erasure code.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Teknik yang lebih fleksibel yaitu reed_sol_van : cukup mengeset k\ndan m. Teknik cauchy_good bisa lebih cepat, namun Anda harus memilih ukuran paket\ndengan seksama. Semua reed_sol_r6_op, liberation, blaum_roth, liber8tion setara dengan RAID6\ndalam hal mereka hanya bisa diatur dengan m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Penyandian dilakukan setiap saat pada ukuran bita paket.\nSulit untuk menentukan ukuran paket yang tepat.\nSilakan cek dokumentasi jerasure untuk informasi lebih mendalam.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Pada plugin jerasure, saat objek dengan erasure code disimpan pada\nbanyak OSD, pemulihan dari OSD yang hilang membutuhkan akses dari OSD lainnya.\nContoh, saat jerasure dikonfigurasi dengan k=8 dan m=4, saat satu OSD mati, maka pemulihan akan membutuhkan pembacaan dari tujuh OSD lainnya.\n\nPlugin lrc erasure code membuat pecahan paritas lokal agar dapat memulihkan \ndengan OSD yang lebih sedikit. Contoh, jika lrc dikonfigurasi dengan k=8, m=4, dan l=4, maka lrc akan\nmembuat pecahan paritas tambahan tiap empat OSD. Saat satu OSD mati, maka pemulihan dapat dilakukan hanya dengan 4 OSD, alih-alih 7 OSD.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Kelompokkan pecahan data dan coding ke dalam ukuran lokalitas. Controh\nuntuk k=4 dan m=2, saat lokalitas=3 dua grup dari tiga akan dibuat. Setiap set akan\ndipulihkan tanpa membaca pecahan dari set lainnya.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Tipe buket crush setiap set pecahan yang didefinisikan oleh l  \nakan disimpan. Contoh, jika diset pada rak, tiap grup pecahan l akan \nditempatkan pada rak berbeda. Ini akan digunakan pada aturan step CRUSH yaitu \nmemilih tiap rak. Jika tidak diset, tidak akan ada pengelompokkan.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Plugin isa menghimpun perpustakaan ISA. Hanya dapat berjalan pada prosesor Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Plugin ISA memiliki dua jenis Reed Solomon.\nJika reed_sol_van diset, maka menjadi Vandermonde, jika cauchy diset, maka menjadi Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Plugin shec mengenkapsulasi banyak pustaka SHEC.\nHal ini agar ceph dapat dipulihkan dengan lebih efisien dari kode Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Jumlah potongan paritas yang masing-masing mencakup setiap potongan data \ndalam rentang perhitungannya. Nilai ini digunakan untuk perkiraan daya tahan. Contoh, jika c=2, \n2 OSD dapat mati tanpa kehilangan data.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nama buket crush digunakan sebagai langkah pertama dari aturan CRUSH.\nContoh diambil langkah bawaan.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Memastikan tidak ada pecahan data berada pada buket dengan domain kegagalan\nyang sama. Contoh, saat domain gagal adalah hos, maka tidak ada pecahan data yang akan disimpan \npada hos yang sama. Aturan CRUSH seperti step chooseleaf hos akan digunakan untuk hal tersebut.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Batasi penempatan ke perangkat dengan kelas tertentu\n(cth. ssd atau hdd), menggunakan nama kelas perangkat crush pada peta CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Set nama direktori empat plugin erasure code akan dimuat.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Izinkan semua operasi</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Izinkan hanya untuk operasi yang tidak mengubah server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Tidak diizinkan untuk operasi baca dan tulis, namun izinkan operasi lainnya</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Tidak diizinkan untuk baca, tulis, atau operasi lainnya yang mengubah atribut berkas atau konten direktori</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Tidak diizinkan untuk semua hal</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Pilih prioritas --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Rendah</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Tinggi</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informasi</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>5 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>15 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>30 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>1 Jam Terakhir (Bawaan)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>3 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>6 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>12 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>24 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Kemarin</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hari ini</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Sejauh hari ini</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Kemarin dulu</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>2 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Hari ini minggu lalu</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Minggu lalu</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Minggu ini</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Sejauh minggu ini</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>7 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Bulan lalu</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Bulan ini</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Sejauh bulan ini</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>30 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>90 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>6 bulan terakhir</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>1 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Tahun lalu</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Tahun ini</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Sejauh tahun ini</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>2 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>5 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Tidak ada yang dipilih.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Batalkan memilih untuk memilih ulang</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Batas pemilihan tercapai</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tanda penyaringan</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Tambahkan lencana</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Tidak ada yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klon</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Salin</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Deep Scrub</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Hancurkan</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Ratakan</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Tandai Gugur</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Tandai Masuk</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Tandai Hilang</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Tandai Keluar</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteksi</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Ubah nama</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Pulihkan</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Pindahkan ke Tempat Sampah</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Tidak diproteksi</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Dihapus</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Diklon</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Disalin</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Diratakan</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Dibuang</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Dipulihkan</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Dikembalikan</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ya</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Tidak</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Kualitas Layanan atau QoS</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Limit IO bytes per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Limit operasi IO per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limit Baca BPS </target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Limit byte baca per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limit IOPS Baca</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Limit operasi baca per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit Tulis BPS</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Limit tulis byte per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit IOPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Limit operasi tulis per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Letupan BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari IO byte.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Letupan IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst operasi IO.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Letupan Baca BPS</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari baca byte.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Letupan IOPS Baca</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst operasi baca.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Letupan BPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari tulis byte.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Letupan IOPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari operasi baca.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Mengeksekusi</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>eksekusi</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Dieksekusi</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tugas tak diketahui</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Membuat</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>buat</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Memperbarui</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>perbarui</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Menghapus</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Pengklonan</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klon</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Menyalin</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>salin</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Meratakan</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>ratakan</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Mengembalikan</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>kembalikan</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Memindahkan</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>pindah</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>dipindahkan</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Tidak dapat menemukan image.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Memulihkan</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>pulihkan</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Membuang</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>buang</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>semua pool</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Gagal menonaktifkan pencerminan karena sedang bermitra.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},jtHE:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("XNiG"),r=n("qgXg"),i=n("quSY"),s=n("pxpQ"),o=n("9ppp"),u=n("Ylt2");class l extends a.a{constructor(t=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,n){super(),this.scheduler=n,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=t<1?1:t,this._windowTime=e<1?1:e,e===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(t){const e=this._events;e.push(t),e.length>this._bufferSize&&e.shift(),super.next(t)}nextTimeWindow(t){this._events.push(new d(this._getNow(),t)),this._trimBufferThenGetEvents(),super.next(t)}_subscribe(t){const e=this._infiniteTimeWindow,n=e?this._events:this._trimBufferThenGetEvents(),a=this.scheduler,r=n.length;let l;if(this.closed)throw new o.a;if(this.isStopped||this.hasError?l=i.a.EMPTY:(this.observers.push(t),l=new u.a(this,t)),a&&t.add(t=new s.a(t,a)),e)for(let i=0;i<r&&!t.closed;i++)t.next(n[i]);else for(let i=0;i<r&&!t.closed;i++)t.next(n[i].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),l}_getNow(){return(this.scheduler||r.a).now()}_trimBufferThenGetEvents(){const t=this._getNow(),e=this._bufferSize,n=this._windowTime,a=this._events,r=a.length;let i=0;for(;i<r&&!(t-a[i].time<n);)i++;return r>e&&(i=Math.max(i,r-e)),i>0&&a.splice(0,i),a}}class d{constructor(t,e){this.time=t,this.value=e}}},jy8Y:function(t,e){t.exports=function(t){return this.__data__.has(t)}},"k9+3":function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},kA6G:function(t,e){t.exports=function(){return[]}},kEOa:function(t,e,n){!function(t){"use strict";var e={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};t.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(t){return t.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(t,e){return 12===t&&(t=0),"রাত"===e&&t>=4||"দুপুর"===e&&t<5||"বিকাল"===e?t+12:t},meridiem:function(t,e,n){return t<4?"রাত":t<10?"সকাল":t<17?"দুপুর":t<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n("wd/R"))},kGkW:function(t,e,n){var a=n("rk81"),r=n("uy3s");t.exports=function(t,e,n,i){var s=n.length,o=s,u=!i;if(null==t)return!o;for(t=Object(t);s--;){var l=n[s];if(u&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++s<o;){var d=(l=n[s])[0],c=t[d],f=l[1];if(u&&l[2]){if(void 0===c&&!(d in t))return!1}else{var h=new a;if(i)var g=i(c,f,d,t,e,h);if(!(void 0===g?r(f,c,3,i,h):g))return!1}}return!0}},kJI8:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},kJWO:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>"function"==typeof Symbol&&Symbol.observable||"@@observable")()},kOOl:function(t,e){var n=0,a=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+a).toString(36)}},kOpN:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("wd/R"))},kRJp:function(t,e,n){var a=n("g6v/"),r=n("m/L8"),i=n("XGwC");t.exports=a?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},kXVT:function(t,e,n){var a=n("hmSm");t.exports=function(t){return t==t&&!a(t)}},kmMV:function(t,e,n){"use strict";var a,r,i=n("rW0t"),s=n("n3/R"),o=RegExp.prototype.exec,u=String.prototype.replace,l=o,d=(r=/b*/g,o.call(a=/a/,"a"),o.call(r,"a"),0!==a.lastIndex||0!==r.lastIndex),c=s.UNSUPPORTED_Y||s.BROKEN_CARET,f=void 0!==/()??/.exec("")[1];(d||f||c)&&(l=function(t){var e,n,a,r,s=this,l=c&&s.sticky,h=i.call(s),g=s.source,p=0,b=t;return l&&(-1===(h=h.replace("y","")).indexOf("g")&&(h+="g"),b=String(t).slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==t[s.lastIndex-1])&&(g="(?: "+g+")",b=" "+b,p++),n=new RegExp("^(?:"+g+")",h)),f&&(n=new RegExp("^"+g+"$(?!\\s)",h)),d&&(e=s.lastIndex),a=o.call(l?n:s,b),l?a?(a.input=a.input.slice(p),a[0]=a[0].slice(p),a.index=s.lastIndex,s.lastIndex+=a[0].length):s.lastIndex=0:d&&a&&(s.lastIndex=s.global?a.index+a[0].length:e),f&&a&&a.length>1&&u.call(a[0],n,(function(){for(r=1;r<arguments.length-2;r++)void 0===arguments[r]&&(a[r]=void 0)})),a}),t.exports=l},"kn/O":function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("HDdC"),r=n("mtw6"),i=n("G1I9"),s=n("QTAa"),o=n("9nlD"),u=n("mSOc"),l=n("VXsX"),d=n("ufoC"),c=n("8Y7J");let f=(()=>{class t{constructor(t,e,n,a){this.notificationService=t,this.summaryService=e,this.taskMessageService=n,this.taskManagerService=a}wrapTaskAroundCall({task:t,call:e}){return new a.a(n=>{e.subscribe(e=>{202===e.status?this._handleExecutingTasks(t):(this.summaryService.refresh(),t.success=!0,this.notificationService.notifyTask(t))},e=>{t.success=!1,t.exception=e.error,n.error(e)},()=>{n.complete()})})}_handleExecutingTasks(t){const e=new i.b(r.a.info,this.taskMessageService.getRunningTitle(t));e.isFinishedTask=!0,this.notificationService.show(e);const n=new s.a(t.name,t.metadata);this.summaryService.addRunningTask(n),this.taskManagerService.subscribe(n.name,n.metadata,t=>{this.notificationService.notifyTask(t)})}}return t.ngInjectableDef=c["ɵɵdefineInjectable"]({factory:function(){return new t(c["ɵɵinject"](o.a),c["ɵɵinject"](u.a),c["ɵɵinject"](d.a),c["ɵɵinject"](l.a))},token:t,providedIn:"root"}),t})()},kna9:function(t,e,n){var a=n("MOZO"),r=n("gBXJ"),i=n("BVkS"),s=n("Wv1A");t.exports=function(t,e){return e=a(e,t),null==(t=i(t,e))||delete t[s(r(e))]}},ktBm:function(t,e,n){var a=n("JEWA");t.exports=function(t,e){for(var n=t.length;n--;)if(a(t[n][0],e))return n;return-1}},kvvV:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("t/zF");class r extends a.a{}},l2xC:function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},l5ep:function(t,e,n){!function(t){"use strict";t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e="";return t>20?e=40===t||50===t||60===t||80===t||100===t?"fed":"ain":t>0&&(e=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][t]),t+e},week:{dow:1,doy:4}})}(n("wd/R"))},l7GE:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");class r extends a.a{notifyNext(t,e,n,a,r){this.destination.next(e)}notifyError(t,e){this.destination.error(t)}notifyComplete(t){this.destination.complete()}}},l9nr:function(t,e,n){var a=n("QjCD"),r=n("NtIB"),i=n("aHcz"),s=n("0GLT"),o=n("MaPG");t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?s(t)?r(t[0],t[1]):a(t):o(t)}},lEOU:function(t,e,n){var a=n("CNUl");t.exports=function(t,e){var n=e?a(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},lJxs:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){return function(n){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new i(t,e))}}class i{constructor(t,e){this.project=t,this.thisArg=e}call(t,e){return e.subscribe(new s(t,this.project,this.thisArg))}}class s extends a.a{constructor(t,e,n){super(t),this.project=e,this.count=0,this.thisArg=n||this}_next(t){let e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}},lMq5:function(t,e,n){var a=n("0Dky"),r=/#|\.prototype\./,i=function(t,e){var n=o[s(t)];return n==l||n!=u&&("function"==typeof e?a(e):!!e)},s=i.normalize=function(t){return String(t).replace(r,".").toLowerCase()},o=i.data={},u=i.NATIVE="N",l=i.POLYFILL="P";t.exports=i},"lOp/":function(t,e,n){"use strict";var a=n("PqYM"),r=n("pxpQ"),i=n("eIep"),s=n("jtHE"),o=n("D0XW"),u=n("8Y7J");class l{constructor(t){this.zone=t,this.scheduler=o.a}now(){return this.scheduler.now()}}let d=(()=>{class t extends l{constructor(t){super(t)}schedule(...t){return this.zone.runOutsideAngular(()=>this.scheduler.schedule.apply(this.scheduler,t))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](u.NgZone))},token:t,providedIn:"root"}),t})(),c=(()=>{class t extends l{constructor(t){super(t)}schedule(...t){return this.zone.run(()=>this.scheduler.schedule.apply(this.scheduler,t))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](u.NgZone))},token:t,providedIn:"root"}),t})(),f=(()=>{class t{constructor(t,e){this.leave=t,this.enter=e}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](d),u["ɵɵinject"](c))},token:t,providedIn:"root"}),t})();n.d(e,"a",(function(){return h}));let h=(()=>{class t{constructor(t){this.ngZone=t,this.DEFAULT_REFRESH_INTERVAL=5e3,this.DEFAULT_DUE_TIME=0}get(t,e=this.DEFAULT_REFRESH_INTERVAL,n=this.DEFAULT_DUE_TIME){return Object(a.a)(n,e,this.ngZone.leave).pipe(Object(r.b)(this.ngZone.enter),Object(i.a)(t),function(t,e,n){let a;return a=t&&"object"==typeof t?t:{bufferSize:t,windowTime:void 0,refCount:!1,scheduler:void 0},t=>t.lift(function({bufferSize:t=Number.POSITIVE_INFINITY,windowTime:e=Number.POSITIVE_INFINITY,refCount:n,scheduler:a}){let r,i,o=0,u=!1,l=!1;return function(d){o++,r&&!u||(u=!1,r=new s.a(t,e,a),i=d.subscribe({next(t){r.next(t)},error(t){u=!0,r.error(t)},complete(){l=!0,i=void 0,r.complete()}}));const c=r.subscribe(this);this.add(()=>{o--,c.unsubscribe(),i&&!l&&n&&0===o&&(i.unsubscribe(),i=void 0,r=void 0)})}}(a))}({refCount:!0,bufferSize:1}))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](f))},token:t,providedIn:"root"}),t})()},lPUB:function(t,e,n){var a=n("Ytn0");t.exports=function(t){return a(this,t).get(t)}},lXzo:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"минута":"минуту":t+" "+(a=+t,r={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:e,m:e,mm:e,h:"час",hh:e,d:"день",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:4}})}(n("wd/R"))},lYtQ:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){switch(n){case"s":return e?"хэдхэн секунд":"хэдхэн секундын";case"ss":return t+(e?" секунд":" секундын");case"m":case"mm":return t+(e?" минут":" минутын");case"h":case"hh":return t+(e?" цаг":" цагийн");case"d":case"dd":return t+(e?" өдөр":" өдрийн");case"M":case"MM":return t+(e?" сар":" сарын");case"y":case"yy":return t+(e?" жил":" жилийн");default:return t}}t.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(t){return"ҮХ"===t},meridiem:function(t,e,n){return t<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+" өдөр";default:return t}}})}(n("wd/R"))},lgnt:function(t,e,n){!function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},lsW8:function(t,e,n){(function(t){var a;(function(){var r="Expected a function",i="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],o="[object Arguments]",u="[object Array]",l="[object Boolean]",d="[object Date]",c="[object Error]",f="[object Function]",h="[object GeneratorFunction]",g="[object Map]",p="[object Number]",b="[object Object]",m="[object RegExp]",y="[object Set]",v="[object String]",x="[object Symbol]",_="[object WeakMap]",T="[object ArrayBuffer]",O="[object DataView]",w="[object Float32Array]",S="[object Float64Array]",I="[object Int8Array]",N="[object Int16Array]",C="[object Int32Array]",R="[object Uint8Array]",A="[object Uint16Array]",k="[object Uint32Array]",E=/\b__p \+= '';/g,L=/\b(__p \+=) '' \+/g,D=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,M=/[&<>"']/g,q=RegExp(P.source),j=RegExp(M.source),F=/<%-([\s\S]+?)%>/g,G=/<%([\s\S]+?)%>/g,V=/<%=([\s\S]+?)%>/g,z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,B=/^\w*$/,Y=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,U=RegExp(H.source),W=/^\s+|\s+$/g,K=/^\s+/,$=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Z=/\{\n\/\* \[wrapped with (.+)\] \*/,Q=/,? & /,X=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tt=/\\(\\)?/g,et=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,at=/^[-+]0x[0-9a-f]+$/i,rt=/^0b[01]+$/i,it=/^\[object .+?Constructor\]$/,st=/^0o[0-7]+$/i,ot=/^(?:0|[1-9]\d*)$/,ut=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,lt=/($^)/,dt=/['\n\r\u2028\u2029\\]/g,ct="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ft="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ht="["+ft+"]",gt="["+ct+"]",pt="\\d+",bt="[a-z\\xdf-\\xf6\\xf8-\\xff]",mt="[^\\ud800-\\udfff"+ft+pt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",yt="\\ud83c[\\udffb-\\udfff]",vt="[^\\ud800-\\udfff]",xt="(?:\\ud83c[\\udde6-\\uddff]){2}",_t="[\\ud800-\\udbff][\\udc00-\\udfff]",Tt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ot="(?:"+bt+"|"+mt+")",wt="(?:"+Tt+"|"+mt+")",St="(?:"+gt+"|"+yt+")?",It="[\\ufe0e\\ufe0f]?"+St+"(?:\\u200d(?:"+[vt,xt,_t].join("|")+")[\\ufe0e\\ufe0f]?"+St+")*",Nt="(?:"+["[\\u2700-\\u27bf]",xt,_t].join("|")+")"+It,Ct="(?:"+[vt+gt+"?",gt,xt,_t,"[\\ud800-\\udfff]"].join("|")+")",Rt=RegExp("['’]","g"),At=RegExp(gt,"g"),kt=RegExp(yt+"(?="+yt+")|"+Ct+It,"g"),Et=RegExp([Tt+"?"+bt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ht,Tt,"$"].join("|")+")",wt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ht,Tt+Ot,"$"].join("|")+")",Tt+"?"+Ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Tt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",pt,Nt].join("|"),"g"),Lt=RegExp("[\\u200d\\ud800-\\udfff"+ct+"\\ufe0e\\ufe0f]"),Dt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Pt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mt=-1,qt={};qt[w]=qt[S]=qt[I]=qt[N]=qt[C]=qt[R]=qt["[object Uint8ClampedArray]"]=qt[A]=qt[k]=!0,qt[o]=qt[u]=qt[T]=qt[l]=qt[O]=qt[d]=qt[c]=qt[f]=qt[g]=qt[p]=qt[b]=qt[m]=qt[y]=qt[v]=qt[_]=!1;var jt={};jt[o]=jt[u]=jt[T]=jt[O]=jt[l]=jt[d]=jt[w]=jt[S]=jt[I]=jt[N]=jt[C]=jt[g]=jt[p]=jt[b]=jt[m]=jt[y]=jt[v]=jt[x]=jt[R]=jt["[object Uint8ClampedArray]"]=jt[A]=jt[k]=!0,jt[c]=jt[f]=jt[_]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Gt=parseFloat,Vt=parseInt,zt="object"==typeof global&&global&&global.Object===Object&&global,Bt="object"==typeof self&&self&&self.Object===Object&&self,Yt=zt||Bt||Function("return this")(),Ht=e&&!e.nodeType&&e,Ut=Ht&&"object"==typeof t&&t&&!t.nodeType&&t,Wt=Ut&&Ut.exports===Ht,Kt=Wt&&zt.process,$t=function(){try{return Ut&&Ut.require&&Ut.require("util").types||Kt&&Kt.binding&&Kt.binding("util")}catch(t){}}(),Jt=$t&&$t.isArrayBuffer,Zt=$t&&$t.isDate,Qt=$t&&$t.isMap,Xt=$t&&$t.isRegExp,te=$t&&$t.isSet,ee=$t&&$t.isTypedArray;function ne(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function ae(t,e,n,a){for(var r=-1,i=null==t?0:t.length;++r<i;){var s=t[r];e(a,s,n(s),t)}return a}function re(t,e){for(var n=-1,a=null==t?0:t.length;++n<a&&!1!==e(t[n],n,t););return t}function ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function se(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(!e(t[n],n,t))return!1;return!0}function oe(t,e){for(var n=-1,a=null==t?0:t.length,r=0,i=[];++n<a;){var s=t[n];e(s,n,t)&&(i[r++]=s)}return i}function ue(t,e){return!(null==t||!t.length)&&ye(t,e,0)>-1}function le(t,e,n){for(var a=-1,r=null==t?0:t.length;++a<r;)if(n(e,t[a]))return!0;return!1}function de(t,e){for(var n=-1,a=null==t?0:t.length,r=Array(a);++n<a;)r[n]=e(t[n],n,t);return r}function ce(t,e){for(var n=-1,a=e.length,r=t.length;++n<a;)t[r+n]=e[n];return t}function fe(t,e,n,a){var r=-1,i=null==t?0:t.length;for(a&&i&&(n=t[++r]);++r<i;)n=e(n,t[r],r,t);return n}function he(t,e,n,a){var r=null==t?0:t.length;for(a&&r&&(n=t[--r]);r--;)n=e(n,t[r],r,t);return n}function ge(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(e(t[n],n,t))return!0;return!1}var pe=Te("length");function be(t,e,n){var a;return n(t,(function(t,n,r){if(e(t,n,r))return a=n,!1})),a}function me(t,e,n,a){for(var r=t.length,i=n+(a?1:-1);a?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function ye(t,e,n){return e==e?function(t,e,n){for(var a=n-1,r=t.length;++a<r;)if(t[a]===e)return a;return-1}(t,e,n):me(t,xe,n)}function ve(t,e,n,a){for(var r=n-1,i=t.length;++r<i;)if(a(t[r],e))return r;return-1}function xe(t){return t!=t}function _e(t,e){var n=null==t?0:t.length;return n?Se(t,e)/n:NaN}function Te(t){return function(e){return null==e?void 0:e[t]}}function Oe(t){return function(e){return null==t?void 0:t[e]}}function we(t,e,n,a,r){return r(t,(function(t,r,i){n=a?(a=!1,t):e(n,t,r,i)})),n}function Se(t,e){for(var n,a=-1,r=t.length;++a<r;){var i=e(t[a]);void 0!==i&&(n=void 0===n?i:n+i)}return n}function Ie(t,e){for(var n=-1,a=Array(t);++n<t;)a[n]=e(n);return a}function Ne(t){return function(e){return t(e)}}function Ce(t,e){return de(e,(function(e){return t[e]}))}function Re(t,e){return t.has(e)}function Ae(t,e){for(var n=-1,a=t.length;++n<a&&ye(e,t[n],0)>-1;);return n}function ke(t,e){for(var n=t.length;n--&&ye(e,t[n],0)>-1;);return n}function Ee(t,e){for(var n=t.length,a=0;n--;)t[n]===e&&++a;return a}var Le=Oe({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),De=Oe({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function Pe(t){return"\\"+Ft[t]}function Me(t){return Lt.test(t)}function qe(t){var e=-1,n=Array(t.size);return t.forEach((function(t,a){n[++e]=[a,t]})),n}function je(t,e){return function(n){return t(e(n))}}function Fe(t,e){for(var n=-1,a=t.length,r=0,s=[];++n<a;){var o=t[n];o!==e&&o!==i||(t[n]=i,s[r++]=n)}return s}function Ge(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}function Ve(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=[t,t]})),n}function ze(t){return Me(t)?function(t){for(var e=kt.lastIndex=0;kt.test(t);)++e;return e}(t):pe(t)}function Be(t){return Me(t)?function(t){return t.match(kt)||[]}(t):function(t){return t.split("")}(t)}var Ye=Oe({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),He=function t(e){var n,a=(e=null==e?Yt:He.defaults(Yt.Object(),e,He.pick(Yt,Pt))).Array,ct=e.Date,ft=e.Error,ht=e.Function,gt=e.Math,pt=e.Object,bt=e.RegExp,mt=e.String,yt=e.TypeError,vt=a.prototype,xt=pt.prototype,_t=e["__core-js_shared__"],Tt=ht.prototype.toString,Ot=xt.hasOwnProperty,wt=0,St=(n=/[^.]+$/.exec(_t&&_t.keys&&_t.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",It=xt.toString,Nt=Tt.call(pt),Ct=Yt._,kt=bt("^"+Tt.call(Ot).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Lt=Wt?e.Buffer:void 0,Ft=e.Symbol,zt=e.Uint8Array,Bt=Lt?Lt.allocUnsafe:void 0,Ht=je(pt.getPrototypeOf,pt),Ut=pt.create,Kt=xt.propertyIsEnumerable,$t=vt.splice,pe=Ft?Ft.isConcatSpreadable:void 0,Oe=Ft?Ft.iterator:void 0,Ue=Ft?Ft.toStringTag:void 0,We=function(){try{var t=Zr(pt,"defineProperty");return t({},"",{}),t}catch(e){}}(),Ke=e.clearTimeout!==Yt.clearTimeout&&e.clearTimeout,$e=ct&&ct.now!==Yt.Date.now&&ct.now,Je=e.setTimeout!==Yt.setTimeout&&e.setTimeout,Ze=gt.ceil,Qe=gt.floor,Xe=pt.getOwnPropertySymbols,tn=Lt?Lt.isBuffer:void 0,en=e.isFinite,nn=vt.join,an=je(pt.keys,pt),rn=gt.max,sn=gt.min,on=ct.now,un=e.parseInt,ln=gt.random,dn=vt.reverse,cn=Zr(e,"DataView"),fn=Zr(e,"Map"),hn=Zr(e,"Promise"),gn=Zr(e,"Set"),pn=Zr(e,"WeakMap"),bn=Zr(pt,"create"),mn=pn&&new pn,yn={},vn=Ii(cn),xn=Ii(fn),_n=Ii(hn),Tn=Ii(gn),On=Ii(pn),wn=Ft?Ft.prototype:void 0,Sn=wn?wn.valueOf:void 0,In=wn?wn.toString:void 0;function Nn(t){if(Bs(t)&&!Es(t)&&!(t instanceof kn)){if(t instanceof An)return t;if(Ot.call(t,"__wrapped__"))return Ni(t)}return new An(t)}var Cn=function(){function t(){}return function(e){if(!zs(e))return{};if(Ut)return Ut(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Rn(){}function An(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function kn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function En(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Ln(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Dn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Pn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Dn;++e<n;)this.add(t[e])}function Mn(t){var e=this.__data__=new Ln(t);this.size=e.size}function qn(t,e){var n=Es(t),a=!n&&ks(t),r=!n&&!a&&Ms(t),i=!n&&!a&&!r&&Zs(t),s=n||a||r||i,o=s?Ie(t.length,mt):[],u=o.length;for(var l in t)!e&&!Ot.call(t,l)||s&&("length"==l||r&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||ri(l,u))||o.push(l);return o}function jn(t){var e=t.length;return e?t[Da(0,e-1)]:void 0}function Fn(t,e){return _i(pr(t),Kn(e,0,t.length))}function Gn(t){return _i(pr(t))}function Vn(t,e,n){(void 0!==n&&!Cs(t[e],n)||void 0===n&&!(e in t))&&Un(t,e,n)}function zn(t,e,n){var a=t[e];Ot.call(t,e)&&Cs(a,n)&&(void 0!==n||e in t)||Un(t,e,n)}function Bn(t,e){for(var n=t.length;n--;)if(Cs(t[n][0],e))return n;return-1}function Yn(t,e,n,a){return Xn(t,(function(t,r,i){e(a,t,n(t),i)})),a}function Hn(t,e){return t&&br(e,xo(e),t)}function Un(t,e,n){"__proto__"==e&&We?We(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Wn(t,e){for(var n=-1,r=e.length,i=a(r),s=null==t;++n<r;)i[n]=s?void 0:po(t,e[n]);return i}function Kn(t,e,n){return t==t&&(void 0!==n&&(t=t<=n?t:n),void 0!==e&&(t=t>=e?t:e)),t}function $n(t,e,n,a,r,i){var s,u=1&e,c=2&e,_=4&e;if(n&&(s=r?n(t,a,r,i):n(t)),void 0!==s)return s;if(!zs(t))return t;var E=Es(t);if(E){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&Ot.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return pr(t,s)}else{var L=ti(t),D=L==f||L==h;if(Ms(t))return lr(t,u);if(L==b||L==o||D&&!r){if(s=c||D?{}:ni(t),!u)return c?function(t,e){return br(t,Xr(t),e)}(t,function(t,e){return t&&br(e,_o(e),t)}(s,t)):function(t,e){return br(t,Qr(t),e)}(t,Hn(s,t))}else{if(!jt[L])return r?t:{};s=function(t,e,n){var a=t.constructor;switch(e){case T:return dr(t);case l:case d:return new a(+t);case O:return function(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case w:case S:case I:case N:case C:case R:case"[object Uint8ClampedArray]":case A:case k:return cr(t,n);case g:return new a;case p:case v:return new a(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case y:return new a;case x:return Sn?pt(Sn.call(t)):{}}}(t,L,u)}}i||(i=new Mn);var P=i.get(t);if(P)return P;i.set(t,s),Ks(t)?t.forEach((function(a){s.add($n(a,e,n,a,t,i))})):Ys(t)&&t.forEach((function(a,r){s.set(r,$n(a,e,n,r,t,i))}));var M=E?void 0:(_?c?Yr:Br:c?_o:xo)(t);return re(M||t,(function(a,r){M&&(a=t[r=a]),zn(s,r,$n(a,e,n,r,t,i))})),s}function Jn(t,e,n){var a=n.length;if(null==t)return!a;for(t=pt(t);a--;){var r=n[a],i=t[r];if(void 0===i&&!(r in t)||!(0,e[r])(i))return!1}return!0}function Zn(t,e,n){if("function"!=typeof t)throw new yt(r);return mi((function(){t.apply(void 0,n)}),e)}function Qn(t,e,n,a){var r=-1,i=ue,s=!0,o=t.length,u=[],l=e.length;if(!o)return u;n&&(e=de(e,Ne(n))),a?(i=le,s=!1):e.length>=200&&(i=Re,s=!1,e=new Pn(e));t:for(;++r<o;){var d=t[r],c=null==n?d:n(d);if(d=a||0!==d?d:0,s&&c==c){for(var f=l;f--;)if(e[f]===c)continue t;u.push(d)}else i(e,c,a)||u.push(d)}return u}Nn.templateSettings={escape:F,evaluate:G,interpolate:V,variable:"",imports:{_:Nn}},(Nn.prototype=Rn.prototype).constructor=Nn,(An.prototype=Cn(Rn.prototype)).constructor=An,(kn.prototype=Cn(Rn.prototype)).constructor=kn,En.prototype.clear=function(){this.__data__=bn?bn(null):{},this.size=0},En.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},En.prototype.get=function(t){var e=this.__data__;if(bn){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return Ot.call(e,t)?e[t]:void 0},En.prototype.has=function(t){var e=this.__data__;return bn?void 0!==e[t]:Ot.call(e,t)},En.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=bn&&void 0===e?"__lodash_hash_undefined__":e,this},Ln.prototype.clear=function(){this.__data__=[],this.size=0},Ln.prototype.delete=function(t){var e=this.__data__,n=Bn(e,t);return!(n<0||(n==e.length-1?e.pop():$t.call(e,n,1),--this.size,0))},Ln.prototype.get=function(t){var e=this.__data__,n=Bn(e,t);return n<0?void 0:e[n][1]},Ln.prototype.has=function(t){return Bn(this.__data__,t)>-1},Ln.prototype.set=function(t,e){var n=this.__data__,a=Bn(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this},Dn.prototype.clear=function(){this.size=0,this.__data__={hash:new En,map:new(fn||Ln),string:new En}},Dn.prototype.delete=function(t){var e=$r(this,t).delete(t);return this.size-=e?1:0,e},Dn.prototype.get=function(t){return $r(this,t).get(t)},Dn.prototype.has=function(t){return $r(this,t).has(t)},Dn.prototype.set=function(t,e){var n=$r(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this},Pn.prototype.add=Pn.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Pn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.clear=function(){this.__data__=new Ln,this.size=0},Mn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Mn.prototype.get=function(t){return this.__data__.get(t)},Mn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Ln){var a=n.__data__;if(!fn||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new Dn(a)}return n.set(t,e),this.size=n.size,this};var Xn=vr(oa),ta=vr(ua,!0);function ea(t,e){var n=!0;return Xn(t,(function(t,a,r){return n=!!e(t,a,r)})),n}function na(t,e,n){for(var a=-1,r=t.length;++a<r;){var i=t[a],s=e(i);if(null!=s&&(void 0===o?s==s&&!Js(s):n(s,o)))var o=s,u=i}return u}function aa(t,e){var n=[];return Xn(t,(function(t,a,r){e(t,a,r)&&n.push(t)})),n}function ra(t,e,n,a,r){var i=-1,s=t.length;for(n||(n=ai),r||(r=[]);++i<s;){var o=t[i];e>0&&n(o)?e>1?ra(o,e-1,n,a,r):ce(r,o):a||(r[r.length]=o)}return r}var ia=xr(),sa=xr(!0);function oa(t,e){return t&&ia(t,e,xo)}function ua(t,e){return t&&sa(t,e,xo)}function la(t,e){return oe(e,(function(e){return Fs(t[e])}))}function da(t,e){for(var n=0,a=(e=ir(e,t)).length;null!=t&&n<a;)t=t[Si(e[n++])];return n&&n==a?t:void 0}function ca(t,e,n){var a=e(t);return Es(t)?a:ce(a,n(t))}function fa(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Ue&&Ue in pt(t)?function(t){var e=Ot.call(t,Ue),n=t[Ue];try{t[Ue]=void 0;var a=!0}catch(i){}var r=It.call(t);return a&&(e?t[Ue]=n:delete t[Ue]),r}(t):function(t){return It.call(t)}(t)}function ha(t,e){return t>e}function ga(t,e){return null!=t&&Ot.call(t,e)}function pa(t,e){return null!=t&&e in pt(t)}function ba(t,e,n){for(var r=n?le:ue,i=t[0].length,s=t.length,o=s,u=a(s),l=1/0,d=[];o--;){var c=t[o];o&&e&&(c=de(c,Ne(e))),l=sn(c.length,l),u[o]=!n&&(e||i>=120&&c.length>=120)?new Pn(o&&c):void 0}c=t[0];var f=-1,h=u[0];t:for(;++f<i&&d.length<l;){var g=c[f],p=e?e(g):g;if(g=n||0!==g?g:0,!(h?Re(h,p):r(d,p,n))){for(o=s;--o;){var b=u[o];if(!(b?Re(b,p):r(t[o],p,n)))continue t}h&&h.push(p),d.push(g)}}return d}function ma(t,e,n){var a=null==(t=hi(t,e=ir(e,t)))?t:t[Si(ji(e))];return null==a?void 0:ne(a,t,n)}function ya(t){return Bs(t)&&fa(t)==o}function va(t,e,n,a,r){return t===e||(null==t||null==e||!Bs(t)&&!Bs(e)?t!=t&&e!=e:function(t,e,n,a,r,i){var s=Es(t),f=Es(e),h=s?u:ti(t),_=f?u:ti(e),w=(h=h==o?b:h)==b,S=(_=_==o?b:_)==b,I=h==_;if(I&&Ms(t)){if(!Ms(e))return!1;s=!0,w=!1}if(I&&!w)return i||(i=new Mn),s||Zs(t)?Vr(t,e,n,a,r,i):function(t,e,n,a,r,i,s){switch(n){case O:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case T:return!(t.byteLength!=e.byteLength||!i(new zt(t),new zt(e)));case l:case d:case p:return Cs(+t,+e);case c:return t.name==e.name&&t.message==e.message;case m:case v:return t==e+"";case g:var o=qe;case y:if(o||(o=Ge),t.size!=e.size&&!(1&a))return!1;var u=s.get(t);if(u)return u==e;a|=2,s.set(t,e);var f=Vr(o(t),o(e),a,r,i,s);return s.delete(t),f;case x:if(Sn)return Sn.call(t)==Sn.call(e)}return!1}(t,e,h,n,a,r,i);if(!(1&n)){var N=w&&Ot.call(t,"__wrapped__"),C=S&&Ot.call(e,"__wrapped__");if(N||C){var R=N?t.value():t,A=C?e.value():e;return i||(i=new Mn),r(R,A,n,a,i)}}return!!I&&(i||(i=new Mn),function(t,e,n,a,r,i){var s=1&n,o=Br(t),u=o.length;if(u!=Br(e).length&&!s)return!1;for(var l=u;l--;){var d=o[l];if(!(s?d in e:Ot.call(e,d)))return!1}var c=i.get(t),f=i.get(e);if(c&&f)return c==e&&f==t;var h=!0;i.set(t,e),i.set(e,t);for(var g=s;++l<u;){var p=t[d=o[l]],b=e[d];if(a)var m=s?a(b,p,d,e,t,i):a(p,b,d,t,e,i);if(!(void 0===m?p===b||r(p,b,n,a,i):m)){h=!1;break}g||(g="constructor"==d)}if(h&&!g){var y=t.constructor,v=e.constructor;y==v||!("constructor"in t)||!("constructor"in e)||"function"==typeof y&&y instanceof y&&"function"==typeof v&&v instanceof v||(h=!1)}return i.delete(t),i.delete(e),h}(t,e,n,a,r,i))}(t,e,n,a,va,r))}function xa(t,e,n,a){var r=n.length,i=r,s=!a;if(null==t)return!i;for(t=pt(t);r--;){var o=n[r];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++r<i;){var u=(o=n[r])[0],l=t[u],d=o[1];if(s&&o[2]){if(void 0===l&&!(u in t))return!1}else{var c=new Mn;if(a)var f=a(l,d,u,t,e,c);if(!(void 0===f?va(d,l,3,a,c):f))return!1}}return!0}function _a(t){return!(!zs(t)||(e=t,St&&St in e))&&(Fs(t)?kt:it).test(Ii(t));var e}function Ta(t){return"function"==typeof t?t:null==t?Uo:"object"==typeof t?Es(t)?Na(t[0],t[1]):Ia(t):eu(t)}function Oa(t){if(!li(t))return an(t);var e=[];for(var n in pt(t))Ot.call(t,n)&&"constructor"!=n&&e.push(n);return e}function wa(t,e){return t<e}function Sa(t,e){var n=-1,r=Ds(t)?a(t.length):[];return Xn(t,(function(t,a,i){r[++n]=e(t,a,i)})),r}function Ia(t){var e=Jr(t);return 1==e.length&&e[0][2]?ci(e[0][0],e[0][1]):function(n){return n===t||xa(n,t,e)}}function Na(t,e){return si(t)&&di(e)?ci(Si(t),e):function(n){var a=po(n,t);return void 0===a&&a===e?bo(n,t):va(e,a,3)}}function Ca(t,e,n,a,r){t!==e&&ia(e,(function(i,s){if(r||(r=new Mn),zs(i))!function(t,e,n,a,r,i,s){var o=pi(t,n),u=pi(e,n),l=s.get(u);if(l)Vn(t,n,l);else{var d=i?i(o,u,n+"",t,e,s):void 0,c=void 0===d;if(c){var f=Es(u),h=!f&&Ms(u),g=!f&&!h&&Zs(u);d=u,f||h||g?Es(o)?d=o:Ps(o)?d=pr(o):h?(c=!1,d=lr(u,!0)):g?(c=!1,d=cr(u,!0)):d=[]:Us(u)||ks(u)?(d=o,ks(o)?d=io(o):zs(o)&&!Fs(o)||(d=ni(u))):c=!1}c&&(s.set(u,d),r(d,u,a,i,s),s.delete(u)),Vn(t,n,d)}}(t,e,s,n,Ca,a,r);else{var o=a?a(pi(t,s),i,s+"",t,e,r):void 0;void 0===o&&(o=i),Vn(t,s,o)}}),_o)}function Ra(t,e){var n=t.length;if(n)return ri(e+=e<0?n:0,n)?t[e]:void 0}function Aa(t,e,n){e=e.length?de(e,(function(t){return Es(t)?function(e){return da(e,1===t.length?t[0]:t)}:t})):[Uo];var a=-1;return e=de(e,Ne(Kr())),function(t,e){var a=t.length;for(t.sort((function(t,e){return function(t,e,n){for(var a=-1,r=t.criteria,i=e.criteria,s=r.length,o=n.length;++a<s;){var u=fr(r[a],i[a]);if(u)return a>=o?u:u*("desc"==n[a]?-1:1)}return t.index-e.index}(t,e,n)}));a--;)t[a]=t[a].value;return t}(Sa(t,(function(t,n,r){return{criteria:de(e,(function(e){return e(t)})),index:++a,value:t}})))}function ka(t,e,n){for(var a=-1,r=e.length,i={};++a<r;){var s=e[a],o=da(t,s);n(o,s)&&Fa(i,ir(s,t),o)}return i}function Ea(t,e,n,a){var r=a?ve:ye,i=-1,s=e.length,o=t;for(t===e&&(e=pr(e)),n&&(o=de(t,Ne(n)));++i<s;)for(var u=0,l=e[i],d=n?n(l):l;(u=r(o,d,u,a))>-1;)o!==t&&$t.call(o,u,1),$t.call(t,u,1);return t}function La(t,e){for(var n=t?e.length:0,a=n-1;n--;){var r=e[n];if(n==a||r!==i){var i=r;ri(r)?$t.call(t,r,1):Za(t,r)}}return t}function Da(t,e){return t+Qe(ln()*(e-t+1))}function Pa(t,e){var n="";if(!t||e<1||e>9007199254740991)return n;do{e%2&&(n+=t),(e=Qe(e/2))&&(t+=t)}while(e);return n}function Ma(t,e){return yi(fi(t,e,Uo),t+"")}function qa(t){return jn(Ro(t))}function ja(t,e){var n=Ro(t);return _i(n,Kn(e,0,n.length))}function Fa(t,e,n,a){if(!zs(t))return t;for(var r=-1,i=(e=ir(e,t)).length,s=i-1,o=t;null!=o&&++r<i;){var u=Si(e[r]),l=n;if("__proto__"===u||"constructor"===u||"prototype"===u)return t;if(r!=s){var d=o[u];void 0===(l=a?a(d,u,o):void 0)&&(l=zs(d)?d:ri(e[r+1])?[]:{})}zn(o,u,l),o=o[u]}return t}var Ga=mn?function(t,e){return mn.set(t,e),t}:Uo,Va=We?function(t,e){return We(t,"toString",{configurable:!0,enumerable:!1,value:Bo(e),writable:!0})}:Uo;function za(t){return _i(Ro(t))}function Ba(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var s=a(i);++r<i;)s[r]=t[r+e];return s}function Ya(t,e){var n;return Xn(t,(function(t,a,r){return!(n=e(t,a,r))})),!!n}function Ha(t,e,n){var a=0,r=null==t?a:t.length;if("number"==typeof e&&e==e&&r<=2147483647){for(;a<r;){var i=a+r>>>1,s=t[i];null!==s&&!Js(s)&&(n?s<=e:s<e)?a=i+1:r=i}return r}return Ua(t,e,Uo,n)}function Ua(t,e,n,a){var r=0,i=null==t?0:t.length;if(0===i)return 0;for(var s=(e=n(e))!=e,o=null===e,u=Js(e),l=void 0===e;r<i;){var d=Qe((r+i)/2),c=n(t[d]),f=void 0!==c,h=null===c,g=c==c,p=Js(c);if(s)var b=a||g;else b=l?g&&(a||f):o?g&&f&&(a||!h):u?g&&f&&!h&&(a||!p):!h&&!p&&(a?c<=e:c<e);b?r=d+1:i=d}return sn(i,4294967294)}function Wa(t,e){for(var n=-1,a=t.length,r=0,i=[];++n<a;){var s=t[n],o=e?e(s):s;if(!n||!Cs(o,u)){var u=o;i[r++]=0===s?0:s}}return i}function Ka(t){return"number"==typeof t?t:Js(t)?NaN:+t}function $a(t){if("string"==typeof t)return t;if(Es(t))return de(t,$a)+"";if(Js(t))return In?In.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ja(t,e,n){var a=-1,r=ue,i=t.length,s=!0,o=[],u=o;if(n)s=!1,r=le;else if(i>=200){var l=e?null:Pr(t);if(l)return Ge(l);s=!1,r=Re,u=new Pn}else u=e?[]:o;t:for(;++a<i;){var d=t[a],c=e?e(d):d;if(d=n||0!==d?d:0,s&&c==c){for(var f=u.length;f--;)if(u[f]===c)continue t;e&&u.push(c),o.push(d)}else r(u,c,n)||(u!==o&&u.push(c),o.push(d))}return o}function Za(t,e){return null==(t=hi(t,e=ir(e,t)))||delete t[Si(ji(e))]}function Qa(t,e,n,a){return Fa(t,e,n(da(t,e)),a)}function Xa(t,e,n,a){for(var r=t.length,i=a?r:-1;(a?i--:++i<r)&&e(t[i],i,t););return n?Ba(t,a?0:i,a?i+1:r):Ba(t,a?i+1:0,a?r:i)}function tr(t,e){var n=t;return n instanceof kn&&(n=n.value()),fe(e,(function(t,e){return e.func.apply(e.thisArg,ce([t],e.args))}),n)}function er(t,e,n){var r=t.length;if(r<2)return r?Ja(t[0]):[];for(var i=-1,s=a(r);++i<r;)for(var o=t[i],u=-1;++u<r;)u!=i&&(s[i]=Qn(s[i]||o,t[u],e,n));return Ja(ra(s,1),e,n)}function nr(t,e,n){for(var a=-1,r=t.length,i=e.length,s={};++a<r;)n(s,t[a],a<i?e[a]:void 0);return s}function ar(t){return Ps(t)?t:[]}function rr(t){return"function"==typeof t?t:Uo}function ir(t,e){return Es(t)?t:si(t,e)?[t]:wi(so(t))}var sr=Ma;function or(t,e,n){var a=t.length;return n=void 0===n?a:n,!e&&n>=a?t:Ba(t,e,n)}var ur=Ke||function(t){return Yt.clearTimeout(t)};function lr(t,e){if(e)return t.slice();var n=t.length,a=Bt?Bt(n):new t.constructor(n);return t.copy(a),a}function dr(t){var e=new t.constructor(t.byteLength);return new zt(e).set(new zt(t)),e}function cr(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function fr(t,e){if(t!==e){var n=void 0!==t,a=null===t,r=t==t,i=Js(t),s=void 0!==e,o=null===e,u=e==e,l=Js(e);if(!o&&!l&&!i&&t>e||i&&s&&u&&!o&&!l||a&&s&&u||!n&&u||!r)return 1;if(!a&&!i&&!l&&t<e||l&&n&&r&&!a&&!i||o&&n&&r||!s&&r||!u)return-1}return 0}function hr(t,e,n,r){for(var i=-1,s=t.length,o=n.length,u=-1,l=e.length,d=rn(s-o,0),c=a(l+d),f=!r;++u<l;)c[u]=e[u];for(;++i<o;)(f||i<s)&&(c[n[i]]=t[i]);for(;d--;)c[u++]=t[i++];return c}function gr(t,e,n,r){for(var i=-1,s=t.length,o=-1,u=n.length,l=-1,d=e.length,c=rn(s-u,0),f=a(c+d),h=!r;++i<c;)f[i]=t[i];for(var g=i;++l<d;)f[g+l]=e[l];for(;++o<u;)(h||i<s)&&(f[g+n[o]]=t[i++]);return f}function pr(t,e){var n=-1,r=t.length;for(e||(e=a(r));++n<r;)e[n]=t[n];return e}function br(t,e,n,a){var r=!n;n||(n={});for(var i=-1,s=e.length;++i<s;){var o=e[i],u=a?a(n[o],t[o],o,n,t):void 0;void 0===u&&(u=t[o]),r?Un(n,o,u):zn(n,o,u)}return n}function mr(t,e){return function(n,a){var r=Es(n)?ae:Yn,i=e?e():{};return r(n,t,Kr(a,2),i)}}function yr(t){return Ma((function(e,n){var a=-1,r=n.length,i=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(i=t.length>3&&"function"==typeof i?(r--,i):void 0,s&&ii(n[0],n[1],s)&&(i=r<3?void 0:i,r=1),e=pt(e);++a<r;){var o=n[a];o&&t(e,o,a,i)}return e}))}function vr(t,e){return function(n,a){if(null==n)return n;if(!Ds(n))return t(n,a);for(var r=n.length,i=e?r:-1,s=pt(n);(e?i--:++i<r)&&!1!==a(s[i],i,s););return n}}function xr(t){return function(e,n,a){for(var r=-1,i=pt(e),s=a(e),o=s.length;o--;){var u=s[t?o:++r];if(!1===n(i[u],u,i))break}return e}}function _r(t){return function(e){var n=Me(e=so(e))?Be(e):void 0,a=n?n[0]:e.charAt(0),r=n?or(n,1).join(""):e.slice(1);return a[t]()+r}}function Tr(t){return function(e){return fe(Go(Eo(e).replace(Rt,"")),t,"")}}function Or(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Cn(t.prototype),a=t.apply(n,e);return zs(a)?a:n}}function wr(t){return function(e,n,a){var r=pt(e);if(!Ds(e)){var i=Kr(n,3);e=xo(e),n=function(t){return i(r[t],t,r)}}var s=t(e,n,a);return s>-1?r[i?e[s]:s]:void 0}}function Sr(t){return zr((function(e){var n=e.length,a=n,i=An.prototype.thru;for(t&&e.reverse();a--;){var s=e[a];if("function"!=typeof s)throw new yt(r);if(i&&!o&&"wrapper"==Ur(s))var o=new An([],!0)}for(a=o?a:n;++a<n;){var u=Ur(s=e[a]),l="wrapper"==u?Hr(s):void 0;o=l&&oi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?o[Ur(l[0])].apply(o,l[3]):1==s.length&&oi(s)?o[u]():o.thru(s)}return function(){var t=arguments,a=t[0];if(o&&1==t.length&&Es(a))return o.plant(a).value();for(var r=0,i=n?e[r].apply(this,t):a;++r<n;)i=e[r].call(this,i);return i}}))}function Ir(t,e,n,r,i,s,o,u,l,d){var c=128&e,f=1&e,h=2&e,g=24&e,p=512&e,b=h?void 0:Or(t);return function m(){for(var y=arguments.length,v=a(y),x=y;x--;)v[x]=arguments[x];if(g)var _=Wr(m),T=Ee(v,_);if(r&&(v=hr(v,r,i,g)),s&&(v=gr(v,s,o,g)),y-=T,g&&y<d){var O=Fe(v,_);return Lr(t,e,Ir,m.placeholder,n,v,O,u,l,d-y)}var w=f?n:this,S=h?w[t]:t;return y=v.length,u?v=gi(v,u):p&&y>1&&v.reverse(),c&&l<y&&(v.length=l),this&&this!==Yt&&this instanceof m&&(S=b||Or(S)),S.apply(w,v)}}function Nr(t,e){return function(n,a){return function(t,e,n,a){return oa(t,(function(t,r,i){e(a,n(t),r,i)})),a}(n,t,e(a),{})}}function Cr(t,e){return function(n,a){var r;if(void 0===n&&void 0===a)return e;if(void 0!==n&&(r=n),void 0!==a){if(void 0===r)return a;"string"==typeof n||"string"==typeof a?(n=$a(n),a=$a(a)):(n=Ka(n),a=Ka(a)),r=t(n,a)}return r}}function Rr(t){return zr((function(e){return e=de(e,Ne(Kr())),Ma((function(n){var a=this;return t(e,(function(t){return ne(t,a,n)}))}))}))}function Ar(t,e){var n=(e=void 0===e?" ":$a(e)).length;if(n<2)return n?Pa(e,t):e;var a=Pa(e,Ze(t/ze(e)));return Me(e)?or(Be(a),0,t).join(""):a.slice(0,t)}function kr(t){return function(e,n,r){return r&&"number"!=typeof r&&ii(e,n,r)&&(n=r=void 0),e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n,r){for(var i=-1,s=rn(Ze((e-t)/(n||1)),0),o=a(s);s--;)o[r?s:++i]=t,t+=n;return o}(e,n,r=void 0===r?e<n?1:-1:eo(r),t)}}function Er(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=ro(e),n=ro(n)),t(e,n)}}function Lr(t,e,n,a,r,i,s,o,u,l){var d=8&e;e|=d?32:64,4&(e&=~(d?64:32))||(e&=-4);var c=[t,e,r,d?i:void 0,d?s:void 0,d?void 0:i,d?void 0:s,o,u,l],f=n.apply(void 0,c);return oi(t)&&bi(f,c),f.placeholder=a,vi(f,t,e)}function Dr(t){var e=gt[t];return function(t,n){if(t=ro(t),(n=null==n?0:sn(no(n),292))&&en(t)){var a=(so(t)+"e").split("e");return+((a=(so(e(a[0]+"e"+(+a[1]+n)))+"e").split("e"))[0]+"e"+(+a[1]-n))}return e(t)}}var Pr=gn&&1/Ge(new gn([,-0]))[1]==1/0?function(t){return new gn(t)}:Zo;function Mr(t){return function(e){var n=ti(e);return n==g?qe(e):n==y?Ve(e):function(t,e){return de(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function qr(t,e,n,s,o,u,l,d){var c=2&e;if(!c&&"function"!=typeof t)throw new yt(r);var f=s?s.length:0;if(f||(e&=-97,s=o=void 0),l=void 0===l?l:rn(no(l),0),d=void 0===d?d:no(d),f-=o?o.length:0,64&e){var h=s,g=o;s=o=void 0}var p=c?void 0:Hr(t),b=[t,e,n,s,o,h,g,u,l,d];if(p&&function(t,e){var n=t[1],a=e[1],r=n|a;if(!(r<131||128==a&&8==n||128==a&&256==n&&t[7].length<=e[8]||384==a&&e[7].length<=e[8]&&8==n))return t;1&a&&(t[2]=e[2],r|=1&n?0:4);var s=e[3];if(s){var o=t[3];t[3]=o?hr(o,s,e[4]):s,t[4]=o?Fe(t[3],i):e[4]}(s=e[5])&&(t[5]=(o=t[5])?gr(o,s,e[6]):s,t[6]=o?Fe(t[5],i):e[6]),(s=e[7])&&(t[7]=s),128&a&&(t[8]=null==t[8]?e[8]:sn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=r}(b,p),t=b[0],e=b[1],n=b[2],s=b[3],o=b[4],!(d=b[9]=void 0===b[9]?c?0:t.length:rn(b[9]-f,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var r=Or(t);return function i(){for(var s=arguments.length,o=a(s),u=s,l=Wr(i);u--;)o[u]=arguments[u];var d=s<3&&o[0]!==l&&o[s-1]!==l?[]:Fe(o,l);if((s-=d.length)<n)return Lr(t,e,Ir,i.placeholder,void 0,o,d,void 0,void 0,n-s);var c=this&&this!==Yt&&this instanceof i?r:t;return ne(c,this,o)}}(t,e,d):32!=e&&33!=e||o.length?Ir.apply(void 0,b):function(t,e,n,r){var i=1&e,s=Or(t);return function e(){for(var o=-1,u=arguments.length,l=-1,d=r.length,c=a(d+u),f=this&&this!==Yt&&this instanceof e?s:t;++l<d;)c[l]=r[l];for(;u--;)c[l++]=arguments[++o];return ne(f,i?n:this,c)}}(t,e,n,s);else var m=function(t,e,n){var a=1&e,r=Or(t);return function e(){var i=this&&this!==Yt&&this instanceof e?r:t;return i.apply(a?n:this,arguments)}}(t,e,n);return vi((p?Ga:bi)(m,b),t,e)}function jr(t,e,n,a){return void 0===t||Cs(t,xt[n])&&!Ot.call(a,n)?e:t}function Fr(t,e,n,a,r,i){return zs(t)&&zs(e)&&(i.set(e,t),Ca(t,e,void 0,Fr,i),i.delete(e)),t}function Gr(t){return Us(t)?void 0:t}function Vr(t,e,n,a,r,i){var s=1&n,o=t.length,u=e.length;if(o!=u&&!(s&&u>o))return!1;var l=i.get(t),d=i.get(e);if(l&&d)return l==e&&d==t;var c=-1,f=!0,h=2&n?new Pn:void 0;for(i.set(t,e),i.set(e,t);++c<o;){var g=t[c],p=e[c];if(a)var b=s?a(p,g,c,e,t,i):a(g,p,c,t,e,i);if(void 0!==b){if(b)continue;f=!1;break}if(h){if(!ge(e,(function(t,e){if(!Re(h,e)&&(g===t||r(g,t,n,a,i)))return h.push(e)}))){f=!1;break}}else if(g!==p&&!r(g,p,n,a,i)){f=!1;break}}return i.delete(t),i.delete(e),f}function zr(t){return yi(fi(t,void 0,Li),t+"")}function Br(t){return ca(t,xo,Qr)}function Yr(t){return ca(t,_o,Xr)}var Hr=mn?function(t){return mn.get(t)}:Zo;function Ur(t){for(var e=t.name+"",n=yn[e],a=Ot.call(yn,e)?n.length:0;a--;){var r=n[a],i=r.func;if(null==i||i==t)return r.name}return e}function Wr(t){return(Ot.call(Nn,"placeholder")?Nn:t).placeholder}function Kr(){var t=Nn.iteratee||Wo;return t=t===Wo?Ta:t,arguments.length?t(arguments[0],arguments[1]):t}function $r(t,e){var n,a,r=t.__data__;return("string"==(a=typeof(n=e))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==n:null===n)?r["string"==typeof e?"string":"hash"]:r.map}function Jr(t){for(var e=xo(t),n=e.length;n--;){var a=e[n],r=t[a];e[n]=[a,r,di(r)]}return e}function Zr(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return _a(n)?n:void 0}var Qr=Xe?function(t){return null==t?[]:(t=pt(t),oe(Xe(t),(function(e){return Kt.call(t,e)})))}:ru,Xr=Xe?function(t){for(var e=[];t;)ce(e,Qr(t)),t=Ht(t);return e}:ru,ti=fa;function ei(t,e,n){for(var a=-1,r=(e=ir(e,t)).length,i=!1;++a<r;){var s=Si(e[a]);if(!(i=null!=t&&n(t,s)))break;t=t[s]}return i||++a!=r?i:!!(r=null==t?0:t.length)&&Vs(r)&&ri(s,r)&&(Es(t)||ks(t))}function ni(t){return"function"!=typeof t.constructor||li(t)?{}:Cn(Ht(t))}function ai(t){return Es(t)||ks(t)||!!(pe&&t&&t[pe])}function ri(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&ot.test(t))&&t>-1&&t%1==0&&t<e}function ii(t,e,n){if(!zs(n))return!1;var a=typeof e;return!!("number"==a?Ds(n)&&ri(e,n.length):"string"==a&&e in n)&&Cs(n[e],t)}function si(t,e){if(Es(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!Js(t))||B.test(t)||!z.test(t)||null!=e&&t in pt(e)}function oi(t){var e=Ur(t),n=Nn[e];if("function"!=typeof n||!(e in kn.prototype))return!1;if(t===n)return!0;var a=Hr(n);return!!a&&t===a[0]}(cn&&ti(new cn(new ArrayBuffer(1)))!=O||fn&&ti(new fn)!=g||hn&&"[object Promise]"!=ti(hn.resolve())||gn&&ti(new gn)!=y||pn&&ti(new pn)!=_)&&(ti=function(t){var e=fa(t),n=e==b?t.constructor:void 0,a=n?Ii(n):"";if(a)switch(a){case vn:return O;case xn:return g;case _n:return"[object Promise]";case Tn:return y;case On:return _}return e});var ui=_t?Fs:iu;function li(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||xt)}function di(t){return t==t&&!zs(t)}function ci(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in pt(n))}}function fi(t,e,n){return e=rn(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,s=rn(r.length-e,0),o=a(s);++i<s;)o[i]=r[e+i];i=-1;for(var u=a(e+1);++i<e;)u[i]=r[i];return u[e]=n(o),ne(t,this,u)}}function hi(t,e){return e.length<2?t:da(t,Ba(e,0,-1))}function gi(t,e){for(var n=t.length,a=sn(e.length,n),r=pr(t);a--;){var i=e[a];t[a]=ri(i,n)?r[i]:void 0}return t}function pi(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var bi=xi(Ga),mi=Je||function(t,e){return Yt.setTimeout(t,e)},yi=xi(Va);function vi(t,e,n){var a=e+"";return yi(t,function(t,e){var n=e.length;if(!n)return t;var a=n-1;return e[a]=(n>1?"& ":"")+e[a],e=e.join(n>2?", ":" "),t.replace(J,"{\n/* [wrapped with "+e+"] */\n")}(a,function(t,e){return re(s,(function(n){var a="_."+n[0];e&n[1]&&!ue(t,a)&&t.push(a)})),t.sort()}(function(t){var e=t.match(Z);return e?e[1].split(Q):[]}(a),n)))}function xi(t){var e=0,n=0;return function(){var a=on(),r=16-(a-n);if(n=a,r>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function _i(t,e){var n=-1,a=t.length,r=a-1;for(e=void 0===e?a:e;++n<e;){var i=Da(n,r),s=t[i];t[i]=t[n],t[n]=s}return t.length=e,t}var Ti,Oi,wi=(Ti=Ts((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Y,(function(t,n,a,r){e.push(a?r.replace(tt,"$1"):n||t)})),e}),(function(t){return 500===Oi.size&&Oi.clear(),t})),Oi=Ti.cache,Ti);function Si(t){if("string"==typeof t||Js(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ii(t){if(null!=t){try{return Tt.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function Ni(t){if(t instanceof kn)return t.clone();var e=new An(t.__wrapped__,t.__chain__);return e.__actions__=pr(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Ci=Ma((function(t,e){return Ps(t)?Qn(t,ra(e,1,Ps,!0)):[]})),Ri=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),Kr(n,2)):[]})),Ai=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),void 0,n):[]}));function ki(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),me(t,Kr(e,3),r)}function Ei(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a-1;return void 0!==n&&(r=no(n),r=n<0?rn(a+r,0):sn(r,a-1)),me(t,Kr(e,3),r,!0)}function Li(t){return null!=t&&t.length?ra(t,1):[]}function Di(t){return t&&t.length?t[0]:void 0}var Pi=Ma((function(t){var e=de(t,ar);return e.length&&e[0]===t[0]?ba(e):[]})),Mi=Ma((function(t){var e=ji(t),n=de(t,ar);return e===ji(n)?e=void 0:n.pop(),n.length&&n[0]===t[0]?ba(n,Kr(e,2)):[]})),qi=Ma((function(t){var e=ji(t),n=de(t,ar);return(e="function"==typeof e?e:void 0)&&n.pop(),n.length&&n[0]===t[0]?ba(n,void 0,e):[]}));function ji(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}var Fi=Ma(Gi);function Gi(t,e){return t&&t.length&&e&&e.length?Ea(t,e):t}var Vi=zr((function(t,e){var n=null==t?0:t.length,a=Wn(t,e);return La(t,de(e,(function(t){return ri(t,n)?+t:t})).sort(fr)),a}));function zi(t){return null==t?t:dn.call(t)}var Bi=Ma((function(t){return Ja(ra(t,1,Ps,!0))})),Yi=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),Ja(ra(t,1,Ps,!0),Kr(e,2))})),Hi=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,Ja(ra(t,1,Ps,!0),void 0,e)}));function Ui(t){if(!t||!t.length)return[];var e=0;return t=oe(t,(function(t){if(Ps(t))return e=rn(t.length,e),!0})),Ie(e,(function(e){return de(t,Te(e))}))}function Wi(t,e){if(!t||!t.length)return[];var n=Ui(t);return null==e?n:de(n,(function(t){return ne(e,void 0,t)}))}var Ki=Ma((function(t,e){return Ps(t)?Qn(t,e):[]})),$i=Ma((function(t){return er(oe(t,Ps))})),Ji=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),er(oe(t,Ps),Kr(e,2))})),Zi=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,er(oe(t,Ps),void 0,e)})),Qi=Ma(Ui),Xi=Ma((function(t){var e=t.length,n=e>1?t[e-1]:void 0;return n="function"==typeof n?(t.pop(),n):void 0,Wi(t,n)}));function ts(t){var e=Nn(t);return e.__chain__=!0,e}function es(t,e){return e(t)}var ns=zr((function(t){var e=t.length,n=e?t[0]:0,a=this.__wrapped__,r=function(e){return Wn(e,t)};return!(e>1||this.__actions__.length)&&a instanceof kn&&ri(n)?((a=a.slice(n,+n+(e?1:0))).__actions__.push({func:es,args:[r],thisArg:void 0}),new An(a,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(r)})),as=mr((function(t,e,n){Ot.call(t,n)?++t[n]:Un(t,n,1)})),rs=wr(ki),is=wr(Ei);function ss(t,e){return(Es(t)?re:Xn)(t,Kr(e,3))}function os(t,e){return(Es(t)?ie:ta)(t,Kr(e,3))}var us=mr((function(t,e,n){Ot.call(t,n)?t[n].push(e):Un(t,n,[e])})),ls=Ma((function(t,e,n){var r=-1,i="function"==typeof e,s=Ds(t)?a(t.length):[];return Xn(t,(function(t){s[++r]=i?ne(e,t,n):ma(t,e,n)})),s})),ds=mr((function(t,e,n){Un(t,n,e)}));function cs(t,e){return(Es(t)?de:Sa)(t,Kr(e,3))}var fs=mr((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]})),hs=Ma((function(t,e){if(null==t)return[];var n=e.length;return n>1&&ii(t,e[0],e[1])?e=[]:n>2&&ii(e[0],e[1],e[2])&&(e=[e[0]]),Aa(t,ra(e,1),[])})),gs=$e||function(){return Yt.Date.now()};function ps(t,e,n){return e=n?void 0:e,qr(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function bs(t,e){var n;if("function"!=typeof e)throw new yt(r);return t=no(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=void 0),n}}var ms=Ma((function(t,e,n){var a=1;if(n.length){var r=Fe(n,Wr(ms));a|=32}return qr(t,a,e,n,r)})),ys=Ma((function(t,e,n){var a=3;if(n.length){var r=Fe(n,Wr(ys));a|=32}return qr(e,a,t,n,r)}));function vs(t,e,n){var a,i,s,o,u,l,d=0,c=!1,f=!1,h=!0;if("function"!=typeof t)throw new yt(r);function g(e){var n=a,r=i;return a=i=void 0,d=e,o=t.apply(r,n)}function p(t){return d=t,u=mi(m,e),c?g(t):o}function b(t){var n=t-l;return void 0===l||n>=e||n<0||f&&t-d>=s}function m(){var t=gs();if(b(t))return y(t);u=mi(m,function(t){var n=e-(t-l);return f?sn(n,s-(t-d)):n}(t))}function y(t){return u=void 0,h&&a?g(t):(a=i=void 0,o)}function v(){var t=gs(),n=b(t);if(a=arguments,i=this,l=t,n){if(void 0===u)return p(l);if(f)return ur(u),u=mi(m,e),g(l)}return void 0===u&&(u=mi(m,e)),o}return e=ro(e)||0,zs(n)&&(c=!!n.leading,s=(f="maxWait"in n)?rn(ro(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h),v.cancel=function(){void 0!==u&&ur(u),d=0,a=l=i=u=void 0},v.flush=function(){return void 0===u?o:y(gs())},v}var xs=Ma((function(t,e){return Zn(t,1,e)})),_s=Ma((function(t,e,n){return Zn(t,ro(e)||0,n)}));function Ts(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new yt(r);var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s)||i,s};return n.cache=new(Ts.Cache||Dn),n}function Os(t){if("function"!=typeof t)throw new yt(r);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ts.Cache=Dn;var ws=sr((function(t,e){var n=(e=1==e.length&&Es(e[0])?de(e[0],Ne(Kr())):de(ra(e,1),Ne(Kr()))).length;return Ma((function(a){for(var r=-1,i=sn(a.length,n);++r<i;)a[r]=e[r].call(this,a[r]);return ne(t,this,a)}))})),Ss=Ma((function(t,e){return qr(t,32,void 0,e,Fe(e,Wr(Ss)))})),Is=Ma((function(t,e){return qr(t,64,void 0,e,Fe(e,Wr(Is)))})),Ns=zr((function(t,e){return qr(t,256,void 0,void 0,void 0,e)}));function Cs(t,e){return t===e||t!=t&&e!=e}var Rs=Er(ha),As=Er((function(t,e){return t>=e})),ks=ya(function(){return arguments}())?ya:function(t){return Bs(t)&&Ot.call(t,"callee")&&!Kt.call(t,"callee")},Es=a.isArray,Ls=Jt?Ne(Jt):function(t){return Bs(t)&&fa(t)==T};function Ds(t){return null!=t&&Vs(t.length)&&!Fs(t)}function Ps(t){return Bs(t)&&Ds(t)}var Ms=tn||iu,qs=Zt?Ne(Zt):function(t){return Bs(t)&&fa(t)==d};function js(t){if(!Bs(t))return!1;var e=fa(t);return e==c||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Us(t)}function Fs(t){if(!zs(t))return!1;var e=fa(t);return e==f||e==h||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Gs(t){return"number"==typeof t&&t==no(t)}function Vs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function zs(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Bs(t){return null!=t&&"object"==typeof t}var Ys=Qt?Ne(Qt):function(t){return Bs(t)&&ti(t)==g};function Hs(t){return"number"==typeof t||Bs(t)&&fa(t)==p}function Us(t){if(!Bs(t)||fa(t)!=b)return!1;var e=Ht(t);if(null===e)return!0;var n=Ot.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Tt.call(n)==Nt}var Ws=Xt?Ne(Xt):function(t){return Bs(t)&&fa(t)==m},Ks=te?Ne(te):function(t){return Bs(t)&&ti(t)==y};function $s(t){return"string"==typeof t||!Es(t)&&Bs(t)&&fa(t)==v}function Js(t){return"symbol"==typeof t||Bs(t)&&fa(t)==x}var Zs=ee?Ne(ee):function(t){return Bs(t)&&Vs(t.length)&&!!qt[fa(t)]},Qs=Er(wa),Xs=Er((function(t,e){return t<=e}));function to(t){if(!t)return[];if(Ds(t))return $s(t)?Be(t):pr(t);if(Oe&&t[Oe])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Oe]());var e=ti(t);return(e==g?qe:e==y?Ge:Ro)(t)}function eo(t){return t?(t=ro(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function no(t){var e=eo(t),n=e%1;return e==e?n?e-n:e:0}function ao(t){return t?Kn(no(t),0,4294967295):0}function ro(t){if("number"==typeof t)return t;if(Js(t))return NaN;if(zs(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=zs(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(W,"");var n=rt.test(t);return n||st.test(t)?Vt(t.slice(2),n?2:8):at.test(t)?NaN:+t}function io(t){return br(t,_o(t))}function so(t){return null==t?"":$a(t)}var oo=yr((function(t,e){if(li(e)||Ds(e))br(e,xo(e),t);else for(var n in e)Ot.call(e,n)&&zn(t,n,e[n])})),uo=yr((function(t,e){br(e,_o(e),t)})),lo=yr((function(t,e,n,a){br(e,_o(e),t,a)})),co=yr((function(t,e,n,a){br(e,xo(e),t,a)})),fo=zr(Wn),ho=Ma((function(t,e){t=pt(t);var n=-1,a=e.length,r=a>2?e[2]:void 0;for(r&&ii(e[0],e[1],r)&&(a=1);++n<a;)for(var i=e[n],s=_o(i),o=-1,u=s.length;++o<u;){var l=s[o],d=t[l];(void 0===d||Cs(d,xt[l])&&!Ot.call(t,l))&&(t[l]=i[l])}return t})),go=Ma((function(t){return t.push(void 0,Fr),ne(Oo,void 0,t)}));function po(t,e,n){var a=null==t?void 0:da(t,e);return void 0===a?n:a}function bo(t,e){return null!=t&&ei(t,e,pa)}var mo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),t[e]=n}),Bo(Uo)),yo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),Ot.call(t,e)?t[e].push(n):t[e]=[n]}),Kr),vo=Ma(ma);function xo(t){return Ds(t)?qn(t):Oa(t)}function _o(t){return Ds(t)?qn(t,!0):function(t){if(!zs(t))return function(t){var e=[];if(null!=t)for(var n in pt(t))e.push(n);return e}(t);var e=li(t),n=[];for(var a in t)("constructor"!=a||!e&&Ot.call(t,a))&&n.push(a);return n}(t)}var To=yr((function(t,e,n){Ca(t,e,n)})),Oo=yr((function(t,e,n,a){Ca(t,e,n,a)})),wo=zr((function(t,e){var n={};if(null==t)return n;var a=!1;e=de(e,(function(e){return e=ir(e,t),a||(a=e.length>1),e})),br(t,Yr(t),n),a&&(n=$n(n,7,Gr));for(var r=e.length;r--;)Za(n,e[r]);return n})),So=zr((function(t,e){return null==t?{}:function(t,e){return ka(t,e,(function(e,n){return bo(t,n)}))}(t,e)}));function Io(t,e){if(null==t)return{};var n=de(Yr(t),(function(t){return[t]}));return e=Kr(e),ka(t,n,(function(t,n){return e(t,n[0])}))}var No=Mr(xo),Co=Mr(_o);function Ro(t){return null==t?[]:Ce(t,xo(t))}var Ao=Tr((function(t,e,n){return e=e.toLowerCase(),t+(n?ko(e):e)}));function ko(t){return Fo(so(t).toLowerCase())}function Eo(t){return(t=so(t))&&t.replace(ut,Le).replace(At,"")}var Lo=Tr((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Do=Tr((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Po=_r("toLowerCase"),Mo=Tr((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()})),qo=Tr((function(t,e,n){return t+(n?" ":"")+Fo(e)})),jo=Tr((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Fo=_r("toUpperCase");function Go(t,e,n){return t=so(t),void 0===(e=n?void 0:e)?function(t){return Dt.test(t)}(t)?function(t){return t.match(Et)||[]}(t):function(t){return t.match(X)||[]}(t):t.match(e)||[]}var Vo=Ma((function(t,e){try{return ne(t,void 0,e)}catch(n){return js(n)?n:new ft(n)}})),zo=zr((function(t,e){return re(e,(function(e){e=Si(e),Un(t,e,ms(t[e],t))})),t}));function Bo(t){return function(){return t}}var Yo=Sr(),Ho=Sr(!0);function Uo(t){return t}function Wo(t){return Ta("function"==typeof t?t:$n(t,1))}var Ko=Ma((function(t,e){return function(n){return ma(n,t,e)}})),$o=Ma((function(t,e){return function(n){return ma(t,n,e)}}));function Jo(t,e,n){var a=xo(e),r=la(e,a);null!=n||zs(e)&&(r.length||!a.length)||(n=e,e=t,t=this,r=la(e,xo(e)));var i=!(zs(n)&&"chain"in n&&!n.chain),s=Fs(t);return re(r,(function(n){var a=e[n];t[n]=a,s&&(t.prototype[n]=function(){var e=this.__chain__;if(i||e){var n=t(this.__wrapped__),r=n.__actions__=pr(this.__actions__);return r.push({func:a,args:arguments,thisArg:t}),n.__chain__=e,n}return a.apply(t,ce([this.value()],arguments))})})),t}function Zo(){}var Qo=Rr(de),Xo=Rr(se),tu=Rr(ge);function eu(t){return si(t)?Te(Si(t)):function(t){return function(e){return da(e,t)}}(t)}var nu=kr(),au=kr(!0);function ru(){return[]}function iu(){return!1}var su,ou=Cr((function(t,e){return t+e}),0),uu=Dr("ceil"),lu=Cr((function(t,e){return t/e}),1),du=Dr("floor"),cu=Cr((function(t,e){return t*e}),1),fu=Dr("round"),hu=Cr((function(t,e){return t-e}),0);return Nn.after=function(t,e){if("function"!=typeof e)throw new yt(r);return t=no(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=ps,Nn.assign=oo,Nn.assignIn=uo,Nn.assignInWith=lo,Nn.assignWith=co,Nn.at=fo,Nn.before=bs,Nn.bind=ms,Nn.bindAll=zo,Nn.bindKey=ys,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Es(t)?t:[t]},Nn.chain=ts,Nn.chunk=function(t,e,n){e=(n?ii(t,e,n):void 0===e)?1:rn(no(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,s=0,o=a(Ze(r/e));i<r;)o[s++]=Ba(t,i,i+=e);return o},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,a=0,r=[];++e<n;){var i=t[e];i&&(r[a++]=i)}return r},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=a(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ce(Es(n)?pr(n):[n],ra(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=Kr();return t=e?de(t,(function(t){if("function"!=typeof t[1])throw new yt(r);return[n(t[0]),t[1]]})):[],Ma((function(n){for(var a=-1;++a<e;){var r=t[a];if(ne(r[0],this,n))return ne(r[1],this,n)}}))},Nn.conforms=function(t){return function(t){var e=xo(t);return function(n){return Jn(n,t,e)}}($n(t,1))},Nn.constant=Bo,Nn.countBy=as,Nn.create=function(t,e){var n=Cn(t);return null==e?n:Hn(n,e)},Nn.curry=function t(e,n,a){var r=qr(e,8,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.curryRight=function t(e,n,a){var r=qr(e,16,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.debounce=vs,Nn.defaults=ho,Nn.defaultsDeep=go,Nn.defer=xs,Nn.delay=_s,Nn.difference=Ci,Nn.differenceBy=Ri,Nn.differenceWith=Ai,Nn.drop=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=n||void 0===e?1:no(e))<0?0:e,a):[]},Nn.dropRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,0,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0):[]},Nn.fill=function(t,e,n,a){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&ii(t,e,n)&&(n=0,a=r),function(t,e,n,a){var r=t.length;for((n=no(n))<0&&(n=-n>r?0:r+n),(a=void 0===a||a>r?r:no(a))<0&&(a+=r),a=n>a?0:ao(a);n<a;)t[n++]=e;return t}(t,e,n,a)):[]},Nn.filter=function(t,e){return(Es(t)?oe:aa)(t,Kr(e,3))},Nn.flatMap=function(t,e){return ra(cs(t,e),1)},Nn.flatMapDeep=function(t,e){return ra(cs(t,e),1/0)},Nn.flatMapDepth=function(t,e,n){return n=void 0===n?1:no(n),ra(cs(t,e),n)},Nn.flatten=Li,Nn.flattenDeep=function(t){return null!=t&&t.length?ra(t,1/0):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?ra(t,e=void 0===e?1:no(e)):[]},Nn.flip=function(t){return qr(t,512)},Nn.flow=Yo,Nn.flowRight=Ho,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,a={};++e<n;){var r=t[e];a[r[0]]=r[1]}return a},Nn.functions=function(t){return null==t?[]:la(t,xo(t))},Nn.functionsIn=function(t){return null==t?[]:la(t,_o(t))},Nn.groupBy=us,Nn.initial=function(t){return null!=t&&t.length?Ba(t,0,-1):[]},Nn.intersection=Pi,Nn.intersectionBy=Mi,Nn.intersectionWith=qi,Nn.invert=mo,Nn.invertBy=yo,Nn.invokeMap=ls,Nn.iteratee=Wo,Nn.keyBy=ds,Nn.keys=xo,Nn.keysIn=_o,Nn.map=cs,Nn.mapKeys=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,e(t,a,r),t)})),n},Nn.mapValues=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,a,e(t,a,r))})),n},Nn.matches=function(t){return Ia($n(t,1))},Nn.matchesProperty=function(t,e){return Na(t,$n(e,1))},Nn.memoize=Ts,Nn.merge=To,Nn.mergeWith=Oo,Nn.method=Ko,Nn.methodOf=$o,Nn.mixin=Jo,Nn.negate=Os,Nn.nthArg=function(t){return t=no(t),Ma((function(e){return Ra(e,t)}))},Nn.omit=wo,Nn.omitBy=function(t,e){return Io(t,Os(Kr(e)))},Nn.once=function(t){return bs(2,t)},Nn.orderBy=function(t,e,n,a){return null==t?[]:(Es(e)||(e=null==e?[]:[e]),Es(n=a?void 0:n)||(n=null==n?[]:[n]),Aa(t,e,n))},Nn.over=Qo,Nn.overArgs=ws,Nn.overEvery=Xo,Nn.overSome=tu,Nn.partial=Ss,Nn.partialRight=Is,Nn.partition=fs,Nn.pick=So,Nn.pickBy=Io,Nn.property=eu,Nn.propertyOf=function(t){return function(e){return null==t?void 0:da(t,e)}},Nn.pull=Fi,Nn.pullAll=Gi,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,Kr(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,void 0,n):t},Nn.pullAt=Vi,Nn.range=nu,Nn.rangeRight=au,Nn.rearg=Ns,Nn.reject=function(t,e){return(Es(t)?oe:aa)(t,Os(Kr(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var a=-1,r=[],i=t.length;for(e=Kr(e,3);++a<i;){var s=t[a];e(s,a,t)&&(n.push(s),r.push(a))}return La(t,r),n},Nn.rest=function(t,e){if("function"!=typeof t)throw new yt(r);return Ma(t,e=void 0===e?e:no(e))},Nn.reverse=zi,Nn.sampleSize=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),(Es(t)?Fn:ja)(t,e)},Nn.set=function(t,e,n){return null==t?t:Fa(t,e,n)},Nn.setWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Fa(t,e,n,a)},Nn.shuffle=function(t){return(Es(t)?Gn:za)(t)},Nn.slice=function(t,e,n){var a=null==t?0:t.length;return a?(n&&"number"!=typeof n&&ii(t,e,n)?(e=0,n=a):(e=null==e?0:no(e),n=void 0===n?a:no(n)),Ba(t,e,n)):[]},Nn.sortBy=hs,Nn.sortedUniq=function(t){return t&&t.length?Wa(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?Wa(t,Kr(e,2)):[]},Nn.split=function(t,e,n){return n&&"number"!=typeof n&&ii(t,e,n)&&(e=n=void 0),(n=void 0===n?4294967295:n>>>0)?(t=so(t))&&("string"==typeof e||null!=e&&!Ws(e))&&!(e=$a(e))&&Me(t)?or(Be(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if("function"!=typeof t)throw new yt(r);return e=null==e?0:rn(no(e),0),Ma((function(n){var a=n[e],r=or(n,0,e);return a&&ce(r,a),ne(t,this,r)}))},Nn.tail=function(t){var e=null==t?0:t.length;return e?Ba(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?Ba(t,0,(e=n||void 0===e?1:no(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e,a):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var a=!0,i=!0;if("function"!=typeof t)throw new yt(r);return zs(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),vs(t,e,{leading:a,maxWait:e,trailing:i})},Nn.thru=es,Nn.toArray=to,Nn.toPairs=No,Nn.toPairsIn=Co,Nn.toPath=function(t){return Es(t)?de(t,Si):Js(t)?[t]:pr(wi(so(t)))},Nn.toPlainObject=io,Nn.transform=function(t,e,n){var a=Es(t),r=a||Ms(t)||Zs(t);if(e=Kr(e,4),null==n){var i=t&&t.constructor;n=r?a?new i:[]:zs(t)&&Fs(i)?Cn(Ht(t)):{}}return(r?re:oa)(t,(function(t,a,r){return e(n,t,a,r)})),n},Nn.unary=function(t){return ps(t,1)},Nn.union=Bi,Nn.unionBy=Yi,Nn.unionWith=Hi,Nn.uniq=function(t){return t&&t.length?Ja(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?Ja(t,Kr(e,2)):[]},Nn.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Ja(t,void 0,e):[]},Nn.unset=function(t,e){return null==t||Za(t,e)},Nn.unzip=Ui,Nn.unzipWith=Wi,Nn.update=function(t,e,n){return null==t?t:Qa(t,e,rr(n))},Nn.updateWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Qa(t,e,rr(n),a)},Nn.values=Ro,Nn.valuesIn=function(t){return null==t?[]:Ce(t,_o(t))},Nn.without=Ki,Nn.words=Go,Nn.wrap=function(t,e){return Ss(rr(e),t)},Nn.xor=$i,Nn.xorBy=Ji,Nn.xorWith=Zi,Nn.zip=Qi,Nn.zipObject=function(t,e){return nr(t||[],e||[],zn)},Nn.zipObjectDeep=function(t,e){return nr(t||[],e||[],Fa)},Nn.zipWith=Xi,Nn.entries=No,Nn.entriesIn=Co,Nn.extend=uo,Nn.extendWith=lo,Jo(Nn,Nn),Nn.add=ou,Nn.attempt=Vo,Nn.camelCase=Ao,Nn.capitalize=ko,Nn.ceil=uu,Nn.clamp=function(t,e,n){return void 0===n&&(n=e,e=void 0),void 0!==n&&(n=(n=ro(n))==n?n:0),void 0!==e&&(e=(e=ro(e))==e?e:0),Kn(ro(t),e,n)},Nn.clone=function(t){return $n(t,4)},Nn.cloneDeep=function(t){return $n(t,5)},Nn.cloneDeepWith=function(t,e){return $n(t,5,e="function"==typeof e?e:void 0)},Nn.cloneWith=function(t,e){return $n(t,4,e="function"==typeof e?e:void 0)},Nn.conformsTo=function(t,e){return null==e||Jn(t,e,xo(e))},Nn.deburr=Eo,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=lu,Nn.endsWith=function(t,e,n){t=so(t),e=$a(e);var a=t.length,r=n=void 0===n?a:Kn(no(n),0,a);return(n-=e.length)>=0&&t.slice(n,r)==e},Nn.eq=Cs,Nn.escape=function(t){return(t=so(t))&&j.test(t)?t.replace(M,De):t},Nn.escapeRegExp=function(t){return(t=so(t))&&U.test(t)?t.replace(H,"\\$&"):t},Nn.every=function(t,e,n){var a=Es(t)?se:ea;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.find=rs,Nn.findIndex=ki,Nn.findKey=function(t,e){return be(t,Kr(e,3),oa)},Nn.findLast=is,Nn.findLastIndex=Ei,Nn.findLastKey=function(t,e){return be(t,Kr(e,3),ua)},Nn.floor=du,Nn.forEach=ss,Nn.forEachRight=os,Nn.forIn=function(t,e){return null==t?t:ia(t,Kr(e,3),_o)},Nn.forInRight=function(t,e){return null==t?t:sa(t,Kr(e,3),_o)},Nn.forOwn=function(t,e){return t&&oa(t,Kr(e,3))},Nn.forOwnRight=function(t,e){return t&&ua(t,Kr(e,3))},Nn.get=po,Nn.gt=Rs,Nn.gte=As,Nn.has=function(t,e){return null!=t&&ei(t,e,ga)},Nn.hasIn=bo,Nn.head=Di,Nn.identity=Uo,Nn.includes=function(t,e,n,a){t=Ds(t)?t:Ro(t),n=n&&!a?no(n):0;var r=t.length;return n<0&&(n=rn(r+n,0)),$s(t)?n<=r&&t.indexOf(e,n)>-1:!!r&&ye(t,e,n)>-1},Nn.indexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),ye(t,e,r)},Nn.inRange=function(t,e,n){return e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n){return t>=sn(e,n)&&t<rn(e,n)}(t=ro(t),e,n)},Nn.invoke=vo,Nn.isArguments=ks,Nn.isArray=Es,Nn.isArrayBuffer=Ls,Nn.isArrayLike=Ds,Nn.isArrayLikeObject=Ps,Nn.isBoolean=function(t){return!0===t||!1===t||Bs(t)&&fa(t)==l},Nn.isBuffer=Ms,Nn.isDate=qs,Nn.isElement=function(t){return Bs(t)&&1===t.nodeType&&!Us(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Ds(t)&&(Es(t)||"string"==typeof t||"function"==typeof t.splice||Ms(t)||Zs(t)||ks(t)))return!t.length;var e=ti(t);if(e==g||e==y)return!t.size;if(li(t))return!Oa(t).length;for(var n in t)if(Ot.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return va(t,e)},Nn.isEqualWith=function(t,e,n){var a=(n="function"==typeof n?n:void 0)?n(t,e):void 0;return void 0===a?va(t,e,void 0,n):!!a},Nn.isError=js,Nn.isFinite=function(t){return"number"==typeof t&&en(t)},Nn.isFunction=Fs,Nn.isInteger=Gs,Nn.isLength=Vs,Nn.isMap=Ys,Nn.isMatch=function(t,e){return t===e||xa(t,e,Jr(e))},Nn.isMatchWith=function(t,e,n){return n="function"==typeof n?n:void 0,xa(t,e,Jr(e),n)},Nn.isNaN=function(t){return Hs(t)&&t!=+t},Nn.isNative=function(t){if(ui(t))throw new ft("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return _a(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=Hs,Nn.isObject=zs,Nn.isObjectLike=Bs,Nn.isPlainObject=Us,Nn.isRegExp=Ws,Nn.isSafeInteger=function(t){return Gs(t)&&t>=-9007199254740991&&t<=9007199254740991},Nn.isSet=Ks,Nn.isString=$s,Nn.isSymbol=Js,Nn.isTypedArray=Zs,Nn.isUndefined=function(t){return void 0===t},Nn.isWeakMap=function(t){return Bs(t)&&ti(t)==_},Nn.isWeakSet=function(t){return Bs(t)&&"[object WeakSet]"==fa(t)},Nn.join=function(t,e){return null==t?"":nn.call(t,e)},Nn.kebabCase=Lo,Nn.last=ji,Nn.lastIndexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a;return void 0!==n&&(r=(r=no(n))<0?rn(a+r,0):sn(r,a-1)),e==e?function(t,e,n){for(var a=n+1;a--;)if(t[a]===e)return a;return a}(t,e,r):me(t,xe,r,!0)},Nn.lowerCase=Do,Nn.lowerFirst=Po,Nn.lt=Qs,Nn.lte=Xs,Nn.max=function(t){return t&&t.length?na(t,Uo,ha):void 0},Nn.maxBy=function(t,e){return t&&t.length?na(t,Kr(e,2),ha):void 0},Nn.mean=function(t){return _e(t,Uo)},Nn.meanBy=function(t,e){return _e(t,Kr(e,2))},Nn.min=function(t){return t&&t.length?na(t,Uo,wa):void 0},Nn.minBy=function(t,e){return t&&t.length?na(t,Kr(e,2),wa):void 0},Nn.stubArray=ru,Nn.stubFalse=iu,Nn.stubObject=function(){return{}},Nn.stubString=function(){return""},Nn.stubTrue=function(){return!0},Nn.multiply=cu,Nn.nth=function(t,e){return t&&t.length?Ra(t,no(e)):void 0},Nn.noConflict=function(){return Yt._===this&&(Yt._=Ct),this},Nn.noop=Zo,Nn.now=gs,Nn.pad=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;if(!e||a>=e)return t;var r=(e-a)/2;return Ar(Qe(r),n)+t+Ar(Ze(r),n)},Nn.padEnd=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?t+Ar(e-a,n):t},Nn.padStart=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?Ar(e-a,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),un(so(t).replace(K,""),e||0)},Nn.random=function(t,e,n){if(n&&"boolean"!=typeof n&&ii(t,e,n)&&(e=n=void 0),void 0===n&&("boolean"==typeof e?(n=e,e=void 0):"boolean"==typeof t&&(n=t,t=void 0)),void 0===t&&void 0===e?(t=0,e=1):(t=eo(t),void 0===e?(e=t,t=0):e=eo(e)),t>e){var a=t;t=e,e=a}if(n||t%1||e%1){var r=ln();return sn(t+r*(e-t+Gt("1e-"+((r+"").length-1))),e)}return Da(t,e)},Nn.reduce=function(t,e,n){var a=Es(t)?fe:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,Xn)},Nn.reduceRight=function(t,e,n){var a=Es(t)?he:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,ta)},Nn.repeat=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),Pa(so(t),e)},Nn.replace=function(){var t=arguments,e=so(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var a=-1,r=(e=ir(e,t)).length;for(r||(r=1,t=void 0);++a<r;){var i=null==t?void 0:t[Si(e[a])];void 0===i&&(a=r,i=n),t=Fs(i)?i.call(t):i}return t},Nn.round=fu,Nn.runInContext=t,Nn.sample=function(t){return(Es(t)?jn:qa)(t)},Nn.size=function(t){if(null==t)return 0;if(Ds(t))return $s(t)?ze(t):t.length;var e=ti(t);return e==g||e==y?t.size:Oa(t).length},Nn.snakeCase=Mo,Nn.some=function(t,e,n){var a=Es(t)?ge:Ya;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.sortedIndex=function(t,e){return Ha(t,e)},Nn.sortedIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var a=Ha(t,e);if(a<n&&Cs(t[a],e))return a}return-1},Nn.sortedLastIndex=function(t,e){return Ha(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=Ha(t,e,!0)-1;if(Cs(t[n],e))return n}return-1},Nn.startCase=qo,Nn.startsWith=function(t,e,n){return t=so(t),n=null==n?0:Kn(no(n),0,t.length),e=$a(e),t.slice(n,n+e.length)==e},Nn.subtract=hu,Nn.sum=function(t){return t&&t.length?Se(t,Uo):0},Nn.sumBy=function(t,e){return t&&t.length?Se(t,Kr(e,2)):0},Nn.template=function(t,e,n){var a=Nn.templateSettings;n&&ii(t,e,n)&&(e=void 0),t=so(t),e=lo({},e,a,jr);var r,i,s=lo({},e.imports,a.imports,jr),o=xo(s),u=Ce(s,o),l=0,d=e.interpolate||lt,c="__p += '",f=bt((e.escape||lt).source+"|"+d.source+"|"+(d===V?et:lt).source+"|"+(e.evaluate||lt).source+"|$","g"),h="//# sourceURL="+(Ot.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Mt+"]")+"\n";t.replace(f,(function(e,n,a,s,o,u){return a||(a=s),c+=t.slice(l,u).replace(dt,Pe),n&&(r=!0,c+="' +\n__e("+n+") +\n'"),o&&(i=!0,c+="';\n"+o+";\n__p += '"),a&&(c+="' +\n((__t = ("+a+")) == null ? '' : __t) +\n'"),l=u+e.length,e})),c+="';\n";var g=Ot.call(e,"variable")&&e.variable;g||(c="with (obj) {\n"+c+"\n}\n"),c=(i?c.replace(E,""):c).replace(L,"$1").replace(D,"$1;"),c="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(r?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+c+"return __p\n}";var p=Vo((function(){return ht(o,h+"return "+c).apply(void 0,u)}));if(p.source=c,js(p))throw p;return p},Nn.times=function(t,e){if((t=no(t))<1||t>9007199254740991)return[];var n=4294967295,a=sn(t,4294967295);t-=4294967295;for(var r=Ie(a,e=Kr(e));++n<t;)e(n);return r},Nn.toFinite=eo,Nn.toInteger=no,Nn.toLength=ao,Nn.toLower=function(t){return so(t).toLowerCase()},Nn.toNumber=ro,Nn.toSafeInteger=function(t){return t?Kn(no(t),-9007199254740991,9007199254740991):0===t?t:0},Nn.toString=so,Nn.toUpper=function(t){return so(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(W,"");if(!t||!(e=$a(e)))return t;var a=Be(t),r=Be(e);return or(a,Ae(a,r),ke(a,r)+1).join("")},Nn.trimEnd=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace($,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,0,ke(a,Be(e))+1).join("")},Nn.trimStart=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(K,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,Ae(a,Be(e))).join("")},Nn.truncate=function(t,e){var n=30,a="...";if(zs(e)){var r="separator"in e?e.separator:r;n="length"in e?no(e.length):n,a="omission"in e?$a(e.omission):a}var i=(t=so(t)).length;if(Me(t)){var s=Be(t);i=s.length}if(n>=i)return t;var o=n-ze(a);if(o<1)return a;var u=s?or(s,0,o).join(""):t.slice(0,o);if(void 0===r)return u+a;if(s&&(o+=u.length-o),Ws(r)){if(t.slice(o).search(r)){var l,d=u;for(r.global||(r=bt(r.source,so(nt.exec(r))+"g")),r.lastIndex=0;l=r.exec(d);)var c=l.index;u=u.slice(0,void 0===c?o:c)}}else if(t.indexOf($a(r),o)!=o){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+a},Nn.unescape=function(t){return(t=so(t))&&q.test(t)?t.replace(P,Ye):t},Nn.uniqueId=function(t){var e=++wt;return so(t)+e},Nn.upperCase=jo,Nn.upperFirst=Fo,Nn.each=ss,Nn.eachRight=os,Nn.first=Di,Jo(Nn,(su={},oa(Nn,(function(t,e){Ot.call(Nn.prototype,e)||(su[e]=t)})),su),{chain:!1}),Nn.VERSION="4.17.20",re(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Nn[t].placeholder=Nn})),re(["drop","take"],(function(t,e){kn.prototype[t]=function(n){n=void 0===n?1:rn(no(n),0);var a=this.__filtered__&&!e?new kn(this):this.clone();return a.__filtered__?a.__takeCount__=sn(n,a.__takeCount__):a.__views__.push({size:sn(n,4294967295),type:t+(a.__dir__<0?"Right":"")}),a},kn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),re(["filter","map","takeWhile"],(function(t,e){var n=e+1,a=1==n||3==n;kn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Kr(t,3),type:n}),e.__filtered__=e.__filtered__||a,e}})),re(["head","last"],(function(t,e){var n="take"+(e?"Right":"");kn.prototype[t]=function(){return this[n](1).value()[0]}})),re(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");kn.prototype[t]=function(){return this.__filtered__?new kn(this):this[n](1)}})),kn.prototype.compact=function(){return this.filter(Uo)},kn.prototype.find=function(t){return this.filter(t).head()},kn.prototype.findLast=function(t){return this.reverse().find(t)},kn.prototype.invokeMap=Ma((function(t,e){return"function"==typeof t?new kn(this):this.map((function(n){return ma(n,t,e)}))})),kn.prototype.reject=function(t){return this.filter(Os(Kr(t)))},kn.prototype.slice=function(t,e){t=no(t);var n=this;return n.__filtered__&&(t>0||e<0)?new kn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),void 0!==e&&(n=(e=no(e))<0?n.dropRight(-e):n.take(e-t)),n)},kn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},kn.prototype.toArray=function(){return this.take(4294967295)},oa(kn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),a=/^(?:head|last)$/.test(e),r=Nn[a?"take"+("last"==e?"Right":""):e],i=a||/^find/.test(e);r&&(Nn.prototype[e]=function(){var e=this.__wrapped__,s=a?[1]:arguments,o=e instanceof kn,u=s[0],l=o||Es(e),d=function(t){var e=r.apply(Nn,ce([t],s));return a&&c?e[0]:e};l&&n&&"function"==typeof u&&1!=u.length&&(o=l=!1);var c=this.__chain__,f=!!this.__actions__.length,h=i&&!c,g=o&&!f;if(!i&&l){e=g?e:new kn(this);var p=t.apply(e,s);return p.__actions__.push({func:es,args:[d],thisArg:void 0}),new An(p,c)}return h&&g?t.apply(this,s):(p=this.thru(d),h?a?p.value()[0]:p.value():p)})})),re(["pop","push","shift","sort","splice","unshift"],(function(t){var e=vt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",a=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(a&&!this.__chain__){var r=this.value();return e.apply(Es(r)?r:[],t)}return this[n]((function(n){return e.apply(Es(n)?n:[],t)}))}})),oa(kn.prototype,(function(t,e){var n=Nn[e];if(n){var a=n.name+"";Ot.call(yn,a)||(yn[a]=[]),yn[a].push({name:e,func:n})}})),yn[Ir(void 0,2).name]=[{name:"wrapper",func:void 0}],kn.prototype.clone=function(){var t=new kn(this.__wrapped__);return t.__actions__=pr(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=pr(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=pr(this.__views__),t},kn.prototype.reverse=function(){if(this.__filtered__){var t=new kn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},kn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Es(t),a=e<0,r=n?t.length:0,i=function(t,e,n){for(var a=-1,r=n.length;++a<r;){var i=n[a],s=i.size;switch(i.type){case"drop":t+=s;break;case"dropRight":e-=s;break;case"take":e=sn(e,t+s);break;case"takeRight":t=rn(t,e-s)}}return{start:t,end:e}}(0,r,this.__views__),s=i.start,o=i.end,u=o-s,l=a?o:s-1,d=this.__iteratees__,c=d.length,f=0,h=sn(u,this.__takeCount__);if(!n||!a&&r==u&&h==u)return tr(t,this.__actions__);var g=[];t:for(;u--&&f<h;){for(var p=-1,b=t[l+=e];++p<c;){var m=d[p],y=m.type,v=(0,m.iteratee)(b);if(2==y)b=v;else if(!v){if(1==y)continue t;break t}}g[f++]=b}return g},Nn.prototype.at=ns,Nn.prototype.chain=function(){return ts(this)},Nn.prototype.commit=function(){return new An(this.value(),this.__chain__)},Nn.prototype.next=function(){void 0===this.__values__&&(this.__values__=to(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof Rn;){var a=Ni(n);a.__index__=0,a.__values__=void 0,e?r.__wrapped__=a:e=a;var r=a;n=n.__wrapped__}return r.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof kn){var e=t;return this.__actions__.length&&(e=new kn(this)),(e=e.reverse()).__actions__.push({func:es,args:[zi],thisArg:void 0}),new An(e,this.__chain__)}return this.thru(zi)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return tr(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Oe&&(Nn.prototype[Oe]=function(){return this}),Nn}();Yt._=He,void 0===(a=(function(){return He}).call(e,n,e,t))||(t.exports=a)}).call(this)}).call(this,n("YuTi")(t))},lyxo:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=" ";return(t%100>=20||t>=100&&t%100==0)&&(a=" de "),t+a+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[n]}t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:e,m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})}(n("wd/R"))},"m/L8":function(t,e,n){var a=n("g6v/"),r=n("DPsx"),i=n("glrk"),s=n("wE6v"),o=Object.defineProperty;e.f=a?o:function(t,e,n){if(i(t),e=s(e,!0),i(n),r)try{return o(t,e,n)}catch(a){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},m92n:function(t,e,n){var a=n("glrk");t.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(s){var i=t.return;throw void 0!==i&&a(i.call(t)),s}}},mCNh:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("KqfI");function r(...t){return i(t)}function i(t){return t?1===t.length?t[0]:function(e){return t.reduce((t,e)=>e(t),e)}:a.a}},mOnh:function(t,e,n){var a=n("nTk+"),r=n("Z2DA"),i=n("MBcj");t.exports=function(t){return a(t,i,r)}},mSOc:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("LvDl"),r=n("2Vo4"),i=n("pLZG"),s=n("SxV6"),o=n("lOp/"),u=n("8Y7J"),l=n("IheW");let d=(()=>{class t{constructor(t,e){this.http=t,this.timerService=e,this.REFRESH_INTERVAL=5e3,this.summaryDataSource=new r.a(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/summary")}retrieveSummaryObserver(){return t=>{this.summaryDataSource.next(t)}}subscribeOnce(t,e){return this.summaryData$.pipe(Object(i.a)(t=>!!t),Object(s.a)()).subscribe(t,e)}subscribe(t,e){return this.summaryData$.pipe(Object(i.a)(t=>!!t)).subscribe(t,e)}addRunningTask(t){const e=this.summaryDataSource.getValue();e&&(a.isArray(e.executing_tasks)?e.executing_tasks.find(e=>e.name===t.name&&a.isEqual(e.metadata,t.metadata))||e.executing_tasks.push(t):e.executing_tasks=[t],this.summaryDataSource.next(e))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](l.c),u["ɵɵinject"](o.a))},token:t,providedIn:"root"}),t})()},"mWP/":function(t,e,n){var a=n("ktBm");t.exports=function(t){var e=this.__data__,n=a(e,t);return n<0?void 0:e[n][1]}},mXUL:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return c}));var a=n("8Y7J"),r=n("+gVj"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:[".invalid-feedback[_ngcontent-%COMP%], .valid-feedback[_ngcontent-%COMP%] {\n        display: block;\n      }"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){t(e,2,0,e.component.className)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function u(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](1,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,e.component.messages())}),null)}var l=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bfv-messages",[],null,null,null,u,s)),a["ɵdid"](1,49152,null,0,r.e,[r.a],{messages:[0,"messages"]},null)],(function(t,e){t(e,1,0,e.component.messages)}),null)}function c(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,!e.component.messagesBlock)}),null)}},mfoh:function(t,e,n){"use strict";n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return p}));var a,r=n("CFvb"),i=n("8rQ2"),s=n.n(i),o=n("eQba"),u=n.n(o),l=n("CUJ1"),d=n.n(l),c=n("h7vy"),f=n.n(c),h={TOGGLE_ACTIVE:function(t,e,n){return e&&e.toggleActivated()},TOGGLE_ACTIVE_MULTI:function(t,e,n){return e&&e.toggleActivated(!0)},TOGGLE_SELECTED:function(t,e,n){return e&&e.toggleSelected()},ACTIVATE:function(t,e,n){return e.setIsActive(!0)},DEACTIVATE:function(t,e,n){return e.setIsActive(!1)},SELECT:function(t,e,n){return e.setIsSelected(!0)},DESELECT:function(t,e,n){return e.setIsSelected(!1)},FOCUS:function(t,e,n){return e.focus()},TOGGLE_EXPANDED:function(t,e,n){return e.hasChildren&&e.toggleExpanded()},EXPAND:function(t,e,n){return e.expand()},COLLAPSE:function(t,e,n){return e.collapse()},DRILL_DOWN:function(t,e,n){return t.focusDrillDown()},DRILL_UP:function(t,e,n){return t.focusDrillUp()},NEXT_NODE:function(t,e,n){return t.focusNextNode()},PREVIOUS_NODE:function(t,e,n){return t.focusPreviousNode()},MOVE_NODE:function(t,e,n,a){var r=a.from,i=a.to;n.ctrlKey?t.copyNode(r,i):t.moveNode(r,i)}},g={mouse:{click:h.TOGGLE_ACTIVE,dblClick:null,contextMenu:null,expanderClick:h.TOGGLE_EXPANDED,checkboxClick:h.TOGGLE_SELECTED,drop:h.MOVE_NODE},keys:(a={},a[r.a.RIGHT]=h.DRILL_DOWN,a[r.a.LEFT]=h.DRILL_UP,a[r.a.DOWN]=h.NEXT_NODE,a[r.a.UP]=h.PREVIOUS_NODE,a[r.a.SPACE]=h.TOGGLE_ACTIVE,a[r.a.ENTER]=h.TOGGLE_ACTIVE,a)},p=function(){function t(t){void 0===t&&(t={}),this.options=t,this.actionMapping=s()({},this.options.actionMapping,g),t.rtl&&(this.actionMapping.keys[r.a.RIGHT]=u()(t,["actionMapping","keys",r.a.RIGHT])||h.DRILL_UP,this.actionMapping.keys[r.a.LEFT]=u()(t,["actionMapping","keys",r.a.LEFT])||h.DRILL_DOWN)}return Object.defineProperty(t.prototype,"hasChildrenField",{get:function(){return this.options.hasChildrenField||"hasChildren"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"childrenField",{get:function(){return this.options.childrenField||"children"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"displayField",{get:function(){return this.options.displayField||"name"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"idField",{get:function(){return this.options.idField||"id"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpandedField",{get:function(){return this.options.isExpandedField||"isExpanded"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"getChildren",{get:function(){return this.options.getChildren},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"levelPadding",{get:function(){return this.options.levelPadding||0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useVirtualScroll",{get:function(){return this.options.useVirtualScroll},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateExpand",{get:function(){return this.options.animateExpand},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateSpeed",{get:function(){return this.options.animateSpeed||1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateAcceleration",{get:function(){return this.options.animateAcceleration||1.2},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollOnActivate",{get:function(){return void 0===this.options.scrollOnActivate||this.options.scrollOnActivate},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rtl",{get:function(){return!!this.options.rtl},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rootId",{get:function(){return this.options.rootId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useCheckbox",{get:function(){return this.options.useCheckbox},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useTriState",{get:function(){return void 0===this.options.useTriState||this.options.useTriState},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollContainer",{get:function(){return this.options.scrollContainer},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"allowDragoverStyling",{get:function(){return void 0===this.options.allowDragoverStyling||this.options.allowDragoverStyling},enumerable:!0,configurable:!0}),t.prototype.getNodeClone=function(t){return this.options.getNodeClone?this.options.getNodeClone(t):d()(Object.assign({},t.data),["id"])},t.prototype.allowDrop=function(t,e,n){return this.options.allowDrop instanceof Function?this.options.allowDrop(t,e,n):void 0===this.options.allowDrop||this.options.allowDrop},t.prototype.allowDrag=function(t){return this.options.allowDrag instanceof Function?this.options.allowDrag(t):this.options.allowDrag},t.prototype.nodeClass=function(t){return this.options.nodeClass?this.options.nodeClass(t):""},t.prototype.nodeHeight=function(t){if(t.data.virtual)return 0;var e=this.options.nodeHeight||22;return"function"==typeof e&&(e=e(t)),e+(0===t.index?2:1)*this.dropSlotHeight},Object.defineProperty(t.prototype,"dropSlotHeight",{get:function(){return f()(this.options.dropSlotHeight)?this.options.dropSlotHeight:2},enumerable:!0,configurable:!0}),t}()},moLw:function(t,e,n){var a=n("mrSG").__decorate,r=n("mrSG").__metadata;Object.defineProperty(e,"__esModule",{value:!0});var i=n("8Y7J"),s=n("SVse");e.ClickOutsideDirective=function(){function t(t,e,n){this._el=t,this._ngZone=e,this.platformId=n,this.clickOutsideEnabled=!0,this.attachOutsideOnClick=!1,this.delayClickOutsideInit=!1,this.emitOnBlur=!1,this.exclude="",this.excludeBeforeClick=!1,this.clickOutsideEvents="",this.clickOutside=new i.EventEmitter,this._nodesExcluded=[],this._events=["click"],this._initOnClickBody=this._initOnClickBody.bind(this),this._onClickBody=this._onClickBody.bind(this),this._onWindowBlur=this._onWindowBlur.bind(this)}return t.prototype.ngOnInit=function(){s.isPlatformBrowser(this.platformId)&&this._init()},t.prototype.ngOnDestroy=function(){s.isPlatformBrowser(this.platformId)&&(this._removeClickOutsideListener(),this._removeAttachOutsideOnClickListener(),this._removeWindowBlurListener())},t.prototype.ngOnChanges=function(t){s.isPlatformBrowser(this.platformId)&&(t.attachOutsideOnClick||t.exclude||t.emitOnBlur)&&this._init()},t.prototype._init=function(){""!==this.clickOutsideEvents&&(this._events=this.clickOutsideEvents.split(",").map((function(t){return t.trim()}))),this._excludeCheck(),this.attachOutsideOnClick?this._initAttachOutsideOnClickListener():this._initOnClickBody(),this.emitOnBlur&&this._initWindowBlurListener()},t.prototype._initOnClickBody=function(){this.delayClickOutsideInit?setTimeout(this._initClickOutsideListener.bind(this)):this._initClickOutsideListener()},t.prototype._excludeCheck=function(){if(this.exclude)try{var t=Array.from(document.querySelectorAll(this.exclude));t&&(this._nodesExcluded=t)}catch(e){console.error("[ng-click-outside] Check your exclude selector syntax.",e)}},t.prototype._onClickBody=function(t){this.clickOutsideEnabled&&(this.excludeBeforeClick&&this._excludeCheck(),this._el.nativeElement.contains(t.target)||this._shouldExclude(t.target)||(this._emit(t),this.attachOutsideOnClick&&this._removeClickOutsideListener()))},t.prototype._onWindowBlur=function(t){var e=this;setTimeout((function(){document.hidden||e._emit(t)}))},t.prototype._emit=function(t){var e=this;this.clickOutsideEnabled&&this._ngZone.run((function(){return e.clickOutside.emit(t)}))},t.prototype._shouldExclude=function(t){for(var e=0,n=this._nodesExcluded;e<n.length;e++)if(n[e].contains(t))return!0;return!1},t.prototype._initClickOutsideListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return document.addEventListener(e,t._onClickBody)}))}))},t.prototype._removeClickOutsideListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return document.removeEventListener(e,t._onClickBody)}))}))},t.prototype._initAttachOutsideOnClickListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return t._el.nativeElement.addEventListener(e,t._initOnClickBody)}))}))},t.prototype._removeAttachOutsideOnClickListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return t._el.nativeElement.removeEventListener(e,t._initOnClickBody)}))}))},t.prototype._initWindowBlurListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){window.addEventListener("blur",t._onWindowBlur)}))},t.prototype._removeWindowBlurListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){window.removeEventListener("blur",t._onWindowBlur)}))},a([i.Input(),r("design:type",Boolean)],t.prototype,"clickOutsideEnabled",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"attachOutsideOnClick",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"delayClickOutsideInit",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"emitOnBlur",void 0),a([i.Input(),r("design:type",String)],t.prototype,"exclude",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"excludeBeforeClick",void 0),a([i.Input(),r("design:type",String)],t.prototype,"clickOutsideEvents",void 0),a([i.Output(),r("design:type",i.EventEmitter)],t.prototype,"clickOutside",void 0),a([i.Injectable(),i.Directive({selector:"[clickOutside]"})],t)}()},mrSG:function(t,e,n){"use strict";n.r(e),n.d(e,"__extends",(function(){return r})),n.d(e,"__assign",(function(){return i})),n.d(e,"__rest",(function(){return s})),n.d(e,"__decorate",(function(){return o})),n.d(e,"__param",(function(){return u})),n.d(e,"__metadata",(function(){return l})),n.d(e,"__awaiter",(function(){return d})),n.d(e,"__generator",(function(){return c})),n.d(e,"__exportStar",(function(){return f})),n.d(e,"__values",(function(){return h})),n.d(e,"__read",(function(){return g})),n.d(e,"__spread",(function(){return p})),n.d(e,"__spreadArrays",(function(){return b})),n.d(e,"__await",(function(){return m})),n.d(e,"__asyncGenerator",(function(){return y})),n.d(e,"__asyncDelegator",(function(){return v})),n.d(e,"__asyncValues",(function(){return x})),n.d(e,"__makeTemplateObject",(function(){return _})),n.d(e,"__importStar",(function(){return T})),n.d(e,"__importDefault",(function(){return O})),n.d(e,"__classPrivateFieldGet",(function(){return w})),n.d(e,"__classPrivateFieldSet",(function(){return S}));var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function r(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function s(t,e){var n={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(t);r<a.length;r++)e.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(t,a[r])&&(n[a[r]]=t[a[r]])}return n}function o(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}function u(t,e){return function(n,a){e(n,a,t)}}function l(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function d(t,e,n,a){return new(n||(n=Promise))((function(r,i){function s(t){try{u(a.next(t))}catch(e){i(e)}}function o(t){try{u(a.throw(t))}catch(e){i(e)}}function u(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}u((a=a.apply(t,e||[])).next())}))}function c(t,e){var n,a,r,i,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(i){return function(o){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,a&&(r=2&i[0]?a.return:i[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,i[1])).done)return r;switch(a=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,a=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((r=(r=s.trys).length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){s.label=i[1];break}if(6===i[0]&&s.label<r[1]){s.label=r[1],r=i;break}if(r&&s.label<r[2]){s.label=r[2],s.ops.push(i);break}r[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(o){i=[6,o],a=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,o])}}}function f(t,e){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}function h(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],a=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var a,r,i=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(a=i.next()).done;)s.push(a.value)}catch(o){r={error:o}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return s}function p(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(g(arguments[e]));return t}function b(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var a=Array(t),r=0;for(e=0;e<n;e++)for(var i=arguments[e],s=0,o=i.length;s<o;s++,r++)a[r]=i[s];return a}function m(t){return this instanceof m?(this.v=t,this):new m(t)}function y(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a,r=n.apply(t,e||[]),i=[];return a={},s("next"),s("throw"),s("return"),a[Symbol.asyncIterator]=function(){return this},a;function s(t){r[t]&&(a[t]=function(e){return new Promise((function(n,a){i.push([t,e,n,a])>1||o(t,e)}))})}function o(t,e){try{!function(t){t.value instanceof m?Promise.resolve(t.value.v).then(u,l):d(i[0][2],t)}(r[t](e))}catch(n){d(i[0][3],n)}}function u(t){o("next",t)}function l(t){o("throw",t)}function d(t,e){t(e),i.shift(),i.length&&o(i[0][0],i[0][1])}}function v(t){var e,n;return e={},a("next"),a("throw",(function(t){throw t})),a("return"),e[Symbol.iterator]=function(){return this},e;function a(a,r){e[a]=t[a]?function(e){return(n=!n)?{value:m(t[a](e)),done:"return"===a}:r?r(e):e}:r}}function x(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=h(t),e={},a("next"),a("throw"),a("return"),e[Symbol.asyncIterator]=function(){return this},e);function a(n){e[n]=t[n]&&function(e){return new Promise((function(a,r){!function(t,e,n,a){Promise.resolve(a).then((function(e){t({value:e,done:n})}),e)}(a,r,(e=t[n](e)).done,e.value)}))}}}function _(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function T(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function O(t){return t&&t.__esModule?t:{default:t}}function w(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function S(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}},mtw6:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t[t.error=0]="error",t[t.info=1]="info",t[t.success=2]="success",t}({})},"n/D3":function(t,e,n){"use strict";n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return c}));var a=n("cp0P"),r=(n("SgmB"),n("ZDA6"),n("+fVR")),i=n("0+/T"),s=n("Rf2I"),o=(n("sne2"),n("x38r")),u=n("oxzT"),l=n("mtw6"),d=n("vCyI");n("nSDx"),n("aexS"),n("9nlD");const c=new(n("EgGo").a)("user-management/roles");class f extends r.a{constructor(t,e,n,a,r,i,s,o,l){super(),this.roleService=t,this.scopeService=e,this.emptyPipe=n,this.authStorageService=a,this.modalService=r,this.notificationService=i,this.i18n=s,this.urlBuilder=o,this.actionLabels=l,this.selection=new d.a,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:u.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"create",icon:u.a.clone,name:this.actionLabels.CLONE,disable:()=>!this.selection.hasSingleSelection,click:()=>this.cloneRole()},{permission:"update",icon:u.a.edit,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().name),name:this.actionLabels.EDIT},{permission:"delete",icon:u.a.destroy,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,click:()=>this.deleteRoleModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:3},{name:this.i18n("Description"),prop:"description",flexGrow:5,pipe:this.emptyPipe},{name:this.i18n("System Role"),prop:"system",cellClass:"text-center",flexGrow:1,cellTransformation:o.a.checkIcon}]}getRoles(){Object(a.a)([this.roleService.list(),this.scopeService.list()]).subscribe(t=>{this.roles=t[0],this.scopes=t[1]})}updateSelection(t){this.selection=t}deleteRole(t){this.roleService.delete(t).subscribe(()=>{this.getRoles(),this.modalRef.hide(),this.notificationService.show(l.a.success,this.i18n("Deleted role '{{role_name}}'",{role_name:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}deleteRoleModal(){const t=this.selection.first().name;this.modalRef=this.modalService.show(i.a,{initialState:{itemDescription:"Role",itemNames:[t],submitAction:()=>this.deleteRole(t)}})}cloneRole(){const t=this.selection.first().name;this.modalRef=this.modalService.show(s.a,{initialState:{fields:[{type:"text",name:"newName",value:t+"_clone",label:this.i18n("New name"),required:!0}],titleText:this.i18n("Clone Role"),submitButtonText:this.i18n("Clone Role"),onSubmit:e=>{this.roleService.clone(t,e.newName).subscribe(()=>{this.getRoles(),this.notificationService.show(l.a.success,this.i18n("Cloned role '{{dst_name}}' from '{{src_name}}'",{src_name:t,dst_name:e.newName}))})}}})}}},"n3/R":function(t,e,n){"use strict";var a=n("0Dky");function r(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=a((function(){var t=r("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=a((function(){var t=r("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},n6bG:function(t,e,n){"use strict";function a(t){return"function"==typeof t}n.d(e,"a",(function(){return a}))},n9Vz:function(t,e,n){var a=n("Yj/I")(n("xdB7"));t.exports=a},nC65:function(t,e,n){var a=n("kXVT"),r=n("FGWQ");t.exports=function(t){for(var e=r(t),n=e.length;n--;){var i=e[n],s=t[i];e[n]=[i,s,a(s)]}return e}},nSDx:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t){return a.isUndefined(t)||a.isNull(t)?"-":t}}},"nTk+":function(t,e,n){var a=n("vJUC"),r=n("0GLT");t.exports=function(t,e,n){var i=e(t);return r(t)?i:a(i,n(t))}},nYho:function(t,e,n){(function(t){var a;!function(r){"object"==typeof global&&global;var i,s=2147483647,o=/^xn--/,u=/[^\x20-\x7E]/,l=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=Math.floor,f=String.fromCharCode;function h(t){throw RangeError(d[t])}function g(t,e){for(var n=t.length,a=[];n--;)a[n]=e(t[n]);return a}function p(t,e){var n=t.split("@"),a="";return n.length>1&&(a=n[0]+"@",t=n[1]),a+g((t=t.replace(l,".")).split("."),e).join(".")}function b(t){for(var e,n,a=[],r=0,i=t.length;r<i;)(e=t.charCodeAt(r++))>=55296&&e<=56319&&r<i?56320==(64512&(n=t.charCodeAt(r++)))?a.push(((1023&e)<<10)+(1023&n)+65536):(a.push(e),r--):a.push(e);return a}function m(t){return g(t,(function(t){var e="";return t>65535&&(e+=f((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+f(t)})).join("")}function y(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function v(t,e,n){var a=0;for(t=n?c(t/700):t>>1,t+=c(t/e);t>455;a+=36)t=c(t/35);return c(a+36*t/(t+38))}function x(t){var e,n,a,r,i,o,u,l,d,f,g,p=[],b=t.length,y=0,x=128,_=72;for((n=t.lastIndexOf("-"))<0&&(n=0),a=0;a<n;++a)t.charCodeAt(a)>=128&&h("not-basic"),p.push(t.charCodeAt(a));for(r=n>0?n+1:0;r<b;){for(i=y,o=1,u=36;r>=b&&h("invalid-input"),((l=(g=t.charCodeAt(r++))-48<10?g-22:g-65<26?g-65:g-97<26?g-97:36)>=36||l>c((s-y)/o))&&h("overflow"),y+=l*o,!(l<(d=u<=_?1:u>=_+26?26:u-_));u+=36)o>c(s/(f=36-d))&&h("overflow"),o*=f;_=v(y-i,e=p.length+1,0==i),c(y/e)>s-x&&h("overflow"),x+=c(y/e),y%=e,p.splice(y++,0,x)}return m(p)}function _(t){var e,n,a,r,i,o,u,l,d,g,p,m,x,_,T,O=[];for(m=(t=b(t)).length,e=128,n=0,i=72,o=0;o<m;++o)(p=t[o])<128&&O.push(f(p));for(a=r=O.length,r&&O.push("-");a<m;){for(u=s,o=0;o<m;++o)(p=t[o])>=e&&p<u&&(u=p);for(u-e>c((s-n)/(x=a+1))&&h("overflow"),n+=(u-e)*x,e=u,o=0;o<m;++o)if((p=t[o])<e&&++n>s&&h("overflow"),p==e){for(l=n,d=36;!(l<(g=d<=i?1:d>=i+26?26:d-i));d+=36)O.push(f(y(g+(T=l-g)%(_=36-g),0))),l=c(T/_);O.push(f(y(l,0))),i=v(n,x,a==r),n=0,++a}++n,++e}return O.join("")}i={version:"1.3.2",ucs2:{decode:b,encode:m},decode:x,encode:_,toASCII:function(t){return p(t,(function(t){return u.test(t)?"xn--"+_(t):t}))},toUnicode:function(t){return p(t,(function(t){return o.test(t)?x(t.slice(4).toLowerCase()):t}))}},void 0===(a=(function(){return i}).call(e,n,e,t))||(t.exports=a)}()}).call(this,n("YuTi")(t))},ngJS:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=t=>e=>{for(let n=0,a=t.length;n<a&&!e.closed;n++)e.next(t[n]);e.complete()}},ntOU:function(t,e,n){"use strict";var a=n("rpNk").IteratorPrototype,r=n("fHMY"),i=n("XGwC"),s=n("1E5z"),o=n("P4y1"),u=function(){return this};t.exports=function(t,e,n){var l=e+" Iterator";return t.prototype=r(a,{next:i(1,n)}),s(t,l,!1,!0),o[l]=u,t}},ntis:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},nyYc:function(t,e,n){!function(t){"use strict";t.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n("wd/R"))},o1bE:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n("wd/R"))},o3PY:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},"o4+5":function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1e3,["","k","M","G","T","P","E","Z","Y"])}}},oMSZ:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.pwdExpirationSpan=0,this.pwdExpirationSpan=t.user_pwd_expiration_span,this.pwdExpirationWarning1=t.user_pwd_expiration_warning_1,this.pwdExpirationWarning2=t.user_pwd_expiration_warning_2}}},oRml:function(t,e,n){var a=n("LaC8"),r=n("KNDS"),i=n("x3F9"),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&r(t.length)&&!!s[a(t)]}},oxzT:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t.add="fa fa-plus",t.addCircle="fa fa-plus-circle",t.minusCircle="fa fa-minus-circle",t.edit="fa fa-pencil",t.destroy="fa fa-times",t.destroyCircle="fa fa-times-circle",t.exchange="fa fa-exchange",t.copy="fa fa-copy",t.clipboard="fa fa-clipboard",t.flatten="fa fa-chain-broken",t.trash="fa fa-trash-o",t.lock="fa fa-lock",t.unlock="fa fa-unlock",t.clone="fa fa-clone",t.undo="fa fa-undo",t.search="fa fa-search",t.start="fa fa-play",t.stop="fa fa-stop",t.analyse="fa fa-stethoscope",t.deepCheck="fa fa-cog",t.reweight="fa fa-balance-scale",t.left="fa fa-arrow-left",t.right="fa fa-arrow-right",t.down="fa fa-arrow-down",t.erase="fa fa-eraser",t.user="fa fa-user",t.users="fa fa-users",t.share="fa fa-share-alt",t.key="fa fa-key-modern",t.warning="fa fa-exclamation-triangle",t.info="fa fa-info",t.infoCircle="fa fa-info-circle",t.questionCircle="fa fa-question-circle-o",t.check="fa fa-check",t.show="fa fa-eye",t.paragraph="fa fa-paragraph",t.terminal="fa fa-terminal",t.magic="fa fa-magic",t.hourglass="fa fa-hourglass-o",t.filledHourglass="fa fa-hourglass",t.table="fa fa-table",t.spinner="fa fa-spinner",t.refresh="fa fa-refresh",t.bullseye="fa fa-bullseye",t.disk="fa fa-hdd-o",t.server="fa fa-server",t.filter="fa fa-filter",t.lineChart="fa fa-line-chart",t.signOut="fa fa-sign-out",t.health="fa fa-heartbeat",t.circle="fa fa-circle",t.bell="fa fa-bell",t.tag="fa fa-tag",t.leftArrow="fa fa-angle-left",t.rightArrow="fa fa-angle-right",t.leftArrowDouble="fa fa-angle-double-left",t.rightArrowDouble="fa fa-angle-double-right",t.flag="fa fa-flag",t.clearFilters="fa fa-window-close",t.download="fa fa-download",t.upload="fa fa-upload",t.large="fa fa-lg",t.large2x="fa fa-2x",t.large3x="fa fa-3x",t.stack="fa fa-stack",t.stack1x="fa fa-stack-1x",t.stack2x="fa fa-stack-2x",t.pulse="fa fa-pulse",t.spin="fa fa-spin",t.inverse="fa fa-inverse",t}({})},"p/rL":function(t,e,n){!function(t){"use strict";t.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n("wd/R"))},p33Q:function(t,e,n){var a=n("5itS"),r=n("qeWI"),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!a(t))return r(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},p4Cf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");class r{constructor(){this.icons=a.a}}},pKUh:function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return l}));var a=n("8Y7J"),r=n("2ZVE"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:["[_nghost-%COMP%]   .nav-tabs[_ngcontent-%COMP%]   .nav-item.disabled[_ngcontent-%COMP%]   a.disabled[_ngcontent-%COMP%]{cursor:default}"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","bs-remove-tab"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(n.preventDefault(),a=!1!==r.removeTab(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),a["ɵted"](-1,null,[" ❌"]))],null,null)}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,"li",[],[[2,"active",null],[2,"disabled",null]],[[null,"keydown"]],(function(t,e,n){var a=!0;return"keydown"===e&&(a=!1!==t.component.keyNavActions(n,t.context.index)&&a),a}),null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,2),(t()(),a["ɵeld"](4,0,null,null,5,"a",[["class","nav-link"],["href","javascript:void(0);"],["role","tab"]],[[1,"aria-controls",0],[1,"aria-selected",0],[1,"id",0],[2,"active",null],[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=0!=(t.context.$implicit.active=!0)&&a),a}),null,null)),(t()(),a["ɵeld"](5,16777216,null,null,2,"span",[],null,null,null,null,null)),a["ɵdid"](6,16384,null,0,r.a,[a.ViewContainerRef],{ngTransclude:[0,"ngTransclude"]},null),(t()(),a["ɵted"](7,null,["",""])),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](9,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=t(e,3,0,"nav-item",e.context.$implicit.customClass||"");t(e,2,0,n),t(e,6,0,e.context.$implicit.headingRef),t(e,9,0,e.context.$implicit.removable)}),(function(t,e){t(e,0,0,e.context.$implicit.active,e.context.$implicit.disabled),t(e,4,0,e.context.$implicit.id?e.context.$implicit.id:"",!!e.context.$implicit.active,e.context.$implicit.id?e.context.$implicit.id+"-link":"",e.context.$implicit.active,e.context.$implicit.disabled),t(e,7,0,e.context.$implicit.heading)}))}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"ul",[["class","nav"],["role","tablist"]],[[1,"aria-label",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==n.preventDefault()&&a),a}),null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,u)),a["ɵdid"](4,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](5,0,null,null,1,"div",[["class","tab-content"]],null,null,null,null,null)),a["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"nav",n.classMap),t(e,4,0,n.tabs)}),(function(t,e){t(e,0,0,e.component.ariaLabel)}))}},pL04:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},pLZG:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){return function(n){return n.lift(new i(t,e))}}class i{constructor(t,e){this.predicate=t,this.thisArg=e}call(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))}}class s extends a.a{constructor(t,e,n){super(t),this.predicate=e,this.thisArg=n,this.count=0}_next(t){let e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}e&&this.destination.next(t)}}},pMcL:function(t,e,n){var a=n("Wa4q");t.exports=a.Symbol},pMnS:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("8Y7J"),r=n("iInd"),i=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),a["ɵdid"](1,212992,null,0,r.r,[r.b,a.ViewContainerRef,a.ComponentFactoryResolver,[8,null],a.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"ng-component",[],null,null,null,s,i)),a["ɵdid"](1,49152,null,0,r.F,[],null,null)],null,null)}var u=a["ɵccf"]("ng-component",r.F,o,{},{},[])},pYKc:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("WiuZ"),s=n("wnGv"),o=n("GiVz");n("ppaS"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return d}));var u=a["ɵcrt"]({encapsulation:0,styles:[[".badge-remove[_ngcontent-%COMP%]{color:#fff}i.fa-pencil[_ngcontent-%COMP%]{font-size:1.1rem}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"span",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,7,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"span",[["class","mr-2"]],null,null,null,null,null)),(t()(),a["ɵted"](3,null,["",""])),(t()(),a["ɵeld"](4,0,null,null,4,"a",[["class","badge-remove"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t.parent,2).removeItem(t.context.$implicit)&&r),r}),null,null)),(t()(),a["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](7,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](8,1)],(function(t,e){var n=t(e,8,0,e.component.icons.destroy);t(e,7,0,n)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function d(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{cdSelect:0}),(t()(),a["ɵeld"](1,0,null,null,5,"cd-select",[["elemClass","mr-2 select-menu-edit"]],null,[[null,"selection"]],(function(t,e,n){var a=!0;return"selection"===e&&(a=!1!==t.component.selection.emit(n)&&a),a}),i.b,i.a)),a["ɵdid"](2,638976,[[1,4],["cdSelect",4]],0,s.a,[o.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"],selectionLimit:[4,"selectionLimit"],customBadges:[5,"customBadges"],customBadgeValidators:[6,"customBadgeValidators"]},{selection:"selection"}),(t()(),a["ɵeld"](3,0,null,0,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,1),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](8,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"mr-2 select-menu-edit",n.data,n.options,n.messages,n.selectionLimit,n.customBadges,n.customBadgeValidators);var a=t(e,6,0,n.icons.edit);t(e,5,0,a),t(e,8,0,n.data)}),null)}},pYe4:function(t,e,n){var a=n("77kF"),r=n("MBcj");t.exports=function(t,e){return t&&a(e,r(e),t)}},pcHL:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"tree-node-children",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div\n        [class.tree-children]="true"\n        [class.tree-children-no-padding]="node.options.levelPadding"\n        *treeAnimateOpen="\n          node.isExpanded;\n          speed: node.options.animateSpeed;\n          acceleration: node.options.animateAcceleration;\n          enabled: node.options.animateExpand\n        "\n      >\n        <tree-node-collection\n          *ngIf="node.children"\n          [nodes]="node.children"\n          [templates]="templates"\n          [treeModel]="node.treeModel"\n        >\n        </tree-node-collection>\n        <tree-loading-component\n          [style.padding-left]="node.getNodePadding()"\n          class="tree-node-loading"\n          *ngIf="!node.children"\n          [template]="templates.loadingTemplate"\n          [node]="node"\n        ></tree-loading-component>\n      </div>\n    </ng-container>\n  '})],t)}()},pcUq:function(t,e,n){var a=n("R6RA"),r=n("+FhV"),i=n("5itS");t.exports=function(t){return"function"!=typeof t.constructor||i(t)?{}:a(r(t))}},pkCn:function(t,e,n){"use strict";var a=n("0Dky");t.exports=function(t,e){var n=[][t];return!!n&&a((function(){n.call(null,e||function(){throw 1},1)}))}},pmjB:function(t,e,n){var a=n("RBUI"),r=n("PHub"),i=n("0GLT"),s=n("y/5f"),o=n("Uies"),u=n("uPDw"),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),d=!n&&r(t),c=!n&&!d&&s(t),f=!n&&!d&&!c&&u(t),h=n||d||c||f,g=h?a(t.length,String):[],p=g.length;for(var b in t)!e&&!l.call(t,b)||h&&("length"==b||c&&("offset"==b||"parent"==b)||f&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||o(b,p))||g.push(b);return g}},ppGB:function(t,e){var n=Math.ceil,a=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?a:n)(t)}},ppaS:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("oxzT"),i=n("DNAf");n("wnGv");class s{constructor(t){this.i18n=t,this.data=[],this.options=[],this.messages=new i.a({},this.i18n),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new a.EventEmitter,this.icons=r.a}}},pxLl:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("mrSG"),r=n("IheW"),i=n("LRne"),s=n("5+tZ"),o=n("xTzq"),u=n("8Y7J"),l=n("pL04");let d=(()=>{let t=class{constructor(t){this.http=t,this.url="api/perf_counters"}list(){return this.http.get(this.url)}get(t,e){return this.http.get(`${this.url}/${t}/${e}`).pipe(Object(s.a)(t=>Object(i.a)(t.counters)))}};return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](r.c))},token:t,providedIn:l.a}),t=a.__decorate([o.a,a.__metadata("design:paramtypes",[r.c])],t),t})()},pxpQ:function(t,e,n){"use strict";var a=n("7o/Q"),r=n("EY2u"),i=n("LRne"),s=n("z6cu");let o=(()=>{class t{constructor(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue="N"===t}observe(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}}do(t,e,n){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return n&&n()}}accept(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)}toObservable(){switch(this.kind){case"N":return Object(i.a)(this.value);case"E":return Object(s.a)(this.error);case"C":return Object(r.b)()}throw new Error("unexpected notification kind value")}static createNext(e){return void 0!==e?new t("N",e):t.undefinedValueNotification}static createError(e){return new t("E",void 0,e)}static createComplete(){return t.completeNotification}}return t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t})();function u(t,e=0){return function(n){return n.lift(new l(t,e))}}n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return d}));class l{constructor(t,e=0){this.scheduler=t,this.delay=e}call(t,e){return e.subscribe(new d(t,this.scheduler,this.delay))}}class d extends a.a{constructor(t,e,n=0){super(t),this.scheduler=e,this.delay=n}static dispatch(t){const{notification:e,destination:n}=t;e.observe(n),this.unsubscribe()}scheduleMessage(t){this.destination.add(this.scheduler.schedule(d.dispatch,this.delay,new c(t,this.destination)))}_next(t){this.scheduleMessage(o.createNext(t))}_error(t){this.scheduleMessage(o.createError(t)),this.unsubscribe()}_complete(){this.scheduleMessage(o.createComplete()),this.unsubscribe()}}class c{constructor(t,e){this.notification=t,this.destination=e}}},qG07:function(t,e,n){var a=n("bWnS"),r=n("ntis"),i=n("U02d"),s=n("XFPk"),o=n("J3wx");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},qN6l:function(t,e,n){var a=n("KFwg")(Object,"create");t.exports=a},qeWI:function(t,e,n){var a=n("IMTC")(Object.keys,Object);t.exports=a},qgXg:function(t,e,n){"use strict";var a=n("3N8a");class r extends a.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}schedule(t,e=0){return e>0?super.schedule(t,e):(this.delay=e,this.state=t,this.scheduler.flush(this),this)}execute(t,e){return e>0||this.closed?super.execute(t,e):this._execute(t,e)}requestAsyncId(t,e,n=0){return null!==n&&n>0||null===n&&this.delay>0?super.requestAsyncId(t,e,n):t.flush(this)}}var i=n("IjjT");class s extends i.a{}n.d(e,"a",(function(){return o}));const o=new s(r)},qjN6:function(t,e,n){var a=n("KFwg")(n("Wa4q"),"Set");t.exports=a},qjUL:function(t,e,n){var a=n("M+Mf"),r=n("ZY2H")((function(t,e,n,r){a(t,e,n,r)}));t.exports=r},quSY:function(t,e,n){"use strict";var a=n("DH7j"),r=n("XoHu"),i=n("n6bG");const s=(()=>{function t(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((t,e)=>`${e+1}) ${t.toString()}`).join("\n  ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t})();n.d(e,"a",(function(){return o}));let o=(()=>{class t{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}unsubscribe(){let e;if(this.closed)return;let{_parentOrParents:n,_unsubscribe:o,_subscriptions:l}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof t)n.remove(this);else if(null!==n)for(let t=0;t<n.length;++t)n[t].remove(this);if(Object(i.a)(o))try{o.call(this)}catch(d){e=d instanceof s?u(d.errors):[d]}if(Object(a.a)(l)){let t=-1,n=l.length;for(;++t<n;){const n=l[t];if(Object(r.a)(n))try{n.unsubscribe()}catch(d){e=e||[],d instanceof s?e=e.concat(u(d.errors)):e.push(d)}}}if(e)throw new s(e)}add(e){let n=e;if(!e)return t.EMPTY;switch(typeof e){case"function":n=new t(e);case"object":if(n===this||n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof t)){const e=n;n=new t,n._subscriptions=[e]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}let{_parentOrParents:a}=n;if(null===a)n._parentOrParents=this;else if(a instanceof t){if(a===this)return n;n._parentOrParents=[a,this]}else{if(-1!==a.indexOf(this))return n;a.push(this)}const r=this._subscriptions;return null===r?this._subscriptions=[n]:r.push(n),n}remove(t){const e=this._subscriptions;if(e){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}}}var e;return t.EMPTY=((e=new t).closed=!0,e),t})();function u(t){return t.reduce((t,e)=>t.concat(e instanceof s?e.errors:e),[])}},"qwH+":function(t,e,n){var a=n("dX5L"),r=n("Gf4A"),i=n("BJMh"),s=n("qjN6"),o=n("0BcO"),u=n("LaC8"),l=n("+xYL"),d=l(a),c=l(r),f=l(i),h=l(s),g=l(o),p=u;(a&&"[object DataView]"!=p(new a(new ArrayBuffer(1)))||r&&"[object Map]"!=p(new r)||i&&"[object Promise]"!=p(i.resolve())||s&&"[object Set]"!=p(new s)||o&&"[object WeakMap]"!=p(new o))&&(p=function(t){var e=u(t),n="[object Object]"==e?t.constructor:void 0,a=n?l(n):"";if(a)switch(a){case d:return"[object DataView]";case c:return"[object Map]";case f:return"[object Promise]";case h:return"[object Set]";case g:return"[object WeakMap]"}return e}),t.exports=p},qzZ1:function(t,e){var n="object"==typeof global&&global&&global.Object===Object&&global;t.exports=n},"r2+u":function(t,e,n){var a=n("qwH+"),r=n("x3F9");t.exports=function(t){return r(t)&&"[object Map]"==a(t)}},r467:function(t,e,n){var a=n("Q7RW"),r=n("JTPl"),i=n("hmSm"),s=n("+xYL"),o=/^\[object .+?Constructor\]$/,u=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||r(t))&&(a(t)?u:o).test(s(t))}},r8II:function(t,e,n){"use strict";e.decode=e.parse=n("YcCt"),e.encode=e.stringify=n("6MUB")},rB9j:function(t,e,n){"use strict";var a=n("I+eb"),r=n("kmMV");a({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},rKzb:function(t,e,n){"use strict";var a=n("4syw"),r=n("8YOa").getWeakData,i=n("glrk"),s=n("hh1v"),o=n("GarU"),u=n("ImZN"),l=n("tycR"),d=n("UTVS"),c=n("afO8"),f=c.set,h=c.getterFor,g=l.find,p=l.findIndex,b=0,m=function(t){return t.frozen||(t.frozen=new y)},y=function(){this.entries=[]},v=function(t,e){return g(t.entries,(function(t){return t[0]===e}))};y.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=p(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,l){var c=t((function(t,a){o(t,c,e),f(t,{type:e,id:b++,frozen:void 0}),null!=a&&u(a,t[l],t,n)})),g=h(e),p=function(t,e,n){var a=g(t),s=r(i(e),!0);return!0===s?m(a).set(e,n):s[a.id]=n,t};return a(c.prototype,{delete:function(t){var e=g(this);if(!s(t))return!1;var n=r(t);return!0===n?m(e).delete(t):n&&d(n,e.id)&&delete n[e.id]},has:function(t){var e=g(this);if(!s(t))return!1;var n=r(t);return!0===n?m(e).has(t):n&&d(n,e.id)}}),a(c.prototype,n?{get:function(t){var e=g(this);if(s(t)){var n=r(t);return!0===n?m(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return p(this,t,e)}}:{add:function(t){return p(this,t,!0)}}),c}}},rW0t:function(t,e,n){"use strict";var a=n("glrk");t.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},rZud:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",a.TemplateRef)],t.prototype,"template",void 0),i([Object(a.Component)({selector:"tree-node-content",encapsulation:a.ViewEncapsulation.None,template:'\n  <span *ngIf="!template">{{ node.displayField }}</span>\n  <ng-container\n    [ngTemplateOutlet]="template"\n    [ngTemplateOutletContext]="{ $implicit: node, node: node, index: index }">\n  </ng-container>'})],t)}()},raLr:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"хвилина":"хвилину":"h"===n?e?"година":"годину":t+" "+(a=+t,r={ss:e?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:e?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:e?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}function n(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===t?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):t?n[/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative"][t.day()]:n.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:e,m:e,mm:e,h:"годину",hh:e,d:"день",dd:e,M:"місяць",MM:e,y:"рік",yy:e},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},rk81:function(t,e,n){var a=n("aT2Y"),r=n("vDHD"),i=n("EWmY"),s=n("cjaf"),o=n("2oum"),u=n("gHid");function l(t){var e=this.__data__=new a(t);this.size=e.size}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=s,l.prototype.has=o,l.prototype.set=u,t.exports=l},rkAj:function(t,e,n){var a=n("g6v/"),r=n("0Dky"),i=n("UTVS"),s=Object.defineProperty,o={},u=function(t){throw t};t.exports=function(t,e){if(i(o,t))return o[t];e||(e={});var n=[][t],l=!!i(e,"ACCESSORS")&&e.ACCESSORS,d=i(e,0)?e[0]:u,c=i(e,1)?e[1]:void 0;return o[t]=!!n&&!r((function(){if(l&&!a)return!0;var t={length:-1};l?s(t,1,{enumerable:!0,get:u}):t[1]=1,n.call(t,d,c)}))}},rpNk:function(t,e,n){"use strict";var a,r,i,s=n("4WOD"),o=n("kRJp"),u=n("UTVS"),l=n("tiKp"),d=n("xDBR"),c=l("iterator"),f=!1;[].keys&&("next"in(i=[].keys())?(r=s(s(i)))!==Object.prototype&&(a=r):f=!0),null==a&&(a={}),d||u(a,c)||o(a,c,(function(){return this})),t.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:f}},"s+uk":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"s4/e":function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,a){n[++e]=[a,t]})),n}},s7LF:function(t,e,n){"use strict";n.d(e,"C",(function(){return Tt})),n.d(e,"G",(function(){return gt})),n.d(e,"D",(function(){return R})),n.d(e,"E",(function(){return pt})),n.d(e,"F",(function(){return F})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return h})),n.d(e,"p",(function(){return u})),n.d(e,"b",(function(){return d})),n.d(e,"e",(function(){return c})),n.d(e,"q",(function(){return p})),n.d(e,"r",(function(){return m})),n.d(e,"s",(function(){return y})),n.d(e,"t",(function(){return ot})),n.d(e,"u",(function(){return ht})),n.d(e,"w",(function(){return C})),n.d(e,"x",(function(){return A})),n.d(e,"j",(function(){return xt})),n.d(e,"l",(function(){return bt})),n.d(e,"g",(function(){return yt})),n.d(e,"m",(function(){return mt})),n.d(e,"v",(function(){return q})),n.d(e,"A",(function(){return M})),n.d(e,"z",(function(){return _t})),n.d(e,"h",(function(){return Ot})),n.d(e,"a",(function(){return nt})),n.d(e,"f",(function(){return it})),n.d(e,"i",(function(){return at})),n.d(e,"k",(function(){return rt})),n.d(e,"o",(function(){return x})),n.d(e,"B",(function(){return T})),n.d(e,"n",(function(){return wt})),n.d(e,"y",(function(){return St}));var a=n("8Y7J"),r=n("cUpR"),i=n("cp0P"),s=n("Cfvw"),o=n("lJxs");const u=new a.InjectionToken("NgValueAccessor");class l{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"checked",t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}}const d=new a.InjectionToken("CompositionEventMode");class c{constructor(t,e,n){this._renderer=t,this._elementRef=e,this._compositionMode=n,this.onChange=t=>{},this.onTouched=()=>{},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const t=Object(r.q)()?Object(r.q)().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}())}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==t?"":t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}}class f{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}reset(t){this.control&&this.control.reset(t)}hasError(t,e){return!!this.control&&this.control.hasError(t,e)}getError(t,e){return this.control?this.control.getError(t,e):null}}class h extends f{get formDirective(){return null}get path(){return null}}function g(){throw new Error("unimplemented")}class p extends f{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null,this._rawValidators=[],this._rawAsyncValidators=[]}get validator(){return g()}get asyncValidator(){return g()}}class b{constructor(t){this._cd=t}get ngClassUntouched(){return!!this._cd.control&&this._cd.control.untouched}get ngClassTouched(){return!!this._cd.control&&this._cd.control.touched}get ngClassPristine(){return!!this._cd.control&&this._cd.control.pristine}get ngClassDirty(){return!!this._cd.control&&this._cd.control.dirty}get ngClassValid(){return!!this._cd.control&&this._cd.control.valid}get ngClassInvalid(){return!!this._cd.control&&this._cd.control.invalid}get ngClassPending(){return!!this._cd.control&&this._cd.control.pending}}class m extends b{constructor(t){super(t)}}class y extends b{constructor(t){super(t)}}function v(t){return null==t||0===t.length}const x=new a.InjectionToken("NgValidators"),_=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class T{static min(t){return e=>{if(v(e.value)||v(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n<t?{min:{min:t,actual:e.value}}:null}}static max(t){return e=>{if(v(e.value)||v(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n>t?{max:{max:t,actual:e.value}}:null}}static required(t){return v(t.value)?{required:!0}:null}static requiredTrue(t){return!0===t.value?null:{required:!0}}static email(t){return v(t.value)||_.test(t.value)?null:{email:!0}}static minLength(t){return e=>{if(v(e.value))return null;const n=e.value?e.value.length:0;return n<t?{minlength:{requiredLength:t,actualLength:n}}:null}}static maxLength(t){return e=>{const n=e.value?e.value.length:0;return n>t?{maxlength:{requiredLength:t,actualLength:n}}:null}}static pattern(t){if(!t)return T.nullValidator;let e,n;return"string"==typeof t?(n="","^"!==t.charAt(0)&&(n+="^"),n+=t,"$"!==t.charAt(t.length-1)&&(n+="$"),e=new RegExp(n)):(n=t.toString(),e=t),t=>{if(v(t.value))return null;const a=t.value;return e.test(a)?null:{pattern:{requiredPattern:n,actualValue:a}}}}static nullValidator(t){return null}static compose(t){if(!t)return null;const e=t.filter(O);return 0==e.length?null:function(t){return S(function(t,e){return e.map(e=>e(t))}(t,e))}}static composeAsync(t){if(!t)return null;const e=t.filter(O);return 0==e.length?null:function(t){const n=function(t,e){return e.map(e=>e(t))}(t,e).map(w);return Object(i.a)(n).pipe(Object(o.a)(S))}}}function O(t){return null!=t}function w(t){const e=Object(a["ɵisPromise"])(t)?Object(s.a)(t):t;if(!Object(a["ɵisObservable"])(e))throw new Error("Expected validator to return Promise or Observable.");return e}function S(t){const e=t.reduce((t,e)=>null!=e?Object.assign({},t,e):t,{});return 0===Object.keys(e).length?null:e}function I(t){return t.validate?e=>t.validate(e):t}function N(t){return t.validate?e=>t.validate(e):t}class C{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==t?"":t)}registerOnChange(t){this.onChange=e=>{t(""==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}}class R{constructor(){this._accessors=[]}add(t,e){this._accessors.push([t,e])}remove(t){for(let e=this._accessors.length-1;e>=0;--e)if(this._accessors[e][1]===t)return void this._accessors.splice(e,1)}select(t){this._accessors.forEach(e=>{this._isSameGroup(e,t)&&e[1]!==t&&e[1].fireUncheck(t.value)})}_isSameGroup(t,e){return!!t[0].control&&t[0]._parent===e._control._parent&&t[1].name===e.name}}class A{constructor(t,e,n,a){this._renderer=t,this._elementRef=e,this._registry=n,this._injector=a,this.onChange=()=>{},this.onTouched=()=>{}}ngOnInit(){this._control=this._injector.get(p),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(t){this._state=t===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)}registerOnChange(t){this._fn=t,this.onChange=()=>{t(this.value),this._registry.select(this)}}fireUncheck(t){this.writeValue(t)}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_checkName(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)}_throwNameError(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')}}const k='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',E='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',L='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>';class D{static controlParentException(){throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+k)}static ngModelGroupException(){throw new Error(`formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        ${E}\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        ${L}`)}static missingFormException(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       "+k)}static groupParentException(){throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+E)}static arrayParentException(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });')}static disabledAttrWarning(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")}static ngModelWarning(t){console.warn(`\n    It looks like you're using ngModel on the same form field as ${t}. \n    Support for using the ngModel input property and ngModelChange event with \n    reactive form directives has been deprecated in Angular v6 and will be removed \n    in Angular v7.\n    \n    For more information on this, see our API docs here:\n    https://angular.io/api/forms/${"formControl"===t?"FormControlDirective":"FormControlName"}#use-with-ngmodel\n    `)}}function P(t,e){return null==t?""+e:(e&&"object"==typeof e&&(e="Object"),`${t}: ${e}`.slice(0,50))}class M{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=a["ɵlooseIdentical"]}set compareWith(t){if("function"!=typeof t)throw new Error("compareWith must be a function, but received "+JSON.stringify(t));this._compareWith=t}writeValue(t){this.value=t;const e=this._getOptionId(t);null==e&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);const n=P(e,t);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)}registerOnChange(t){this.onChange=e=>{this.value=this._getOptionValue(e),t(this.value)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e),t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(":")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e):t}}class q{constructor(t,e,n){this._element=t,this._renderer=e,this._select=n,this._select&&(this.id=this._select._registerOption())}set ngValue(t){null!=this._select&&(this._select._optionMap.set(this.id,t),this._setElementValue(P(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._setElementValue(t),this._select&&this._select.writeValue(this._select.value)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}function j(t,e){return null==t?""+e:("string"==typeof e&&(e=`'${e}'`),e&&"object"==typeof e&&(e="Object"),`${t}: ${e}`.slice(0,50))}class F{constructor(t,e,n){this._element=t,this._renderer=e,this._select=n,this._select&&(this.id=this._select._registerOption(this))}set ngValue(t){null!=this._select&&(this._value=t,this._setElementValue(j(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._select?(this._value=t,this._setElementValue(j(this.id,t)),this._select.writeValue(this._select.value)):this._setElementValue(t)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}_setSelected(t){this._renderer.setProperty(this._element.nativeElement,"selected",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}function G(t,e){return[...e.path,t]}function V(t,e){t||H(e,"Cannot find control with"),e.valueAccessor||H(e,"No value accessor for form control with"),t.validator=T.compose([t.validator,e.validator]),t.asyncValidator=T.composeAsync([t.asyncValidator,e.asyncValidator]),e.valueAccessor.writeValue(t.value),function(t,e){e.valueAccessor.registerOnChange(n=>{t._pendingValue=n,t._pendingChange=!0,t._pendingDirty=!0,"change"===t.updateOn&&z(t,e)})}(t,e),function(t,e){t.registerOnChange((t,n)=>{e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)})}(t,e),function(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,"blur"===t.updateOn&&t._pendingChange&&z(t,e),"submit"!==t.updateOn&&t.markAsTouched()})}(t,e),e.valueAccessor.setDisabledState&&t.registerOnDisabledChange(t=>{e.valueAccessor.setDisabledState(t)}),e._rawValidators.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(()=>t.updateValueAndValidity())}),e._rawAsyncValidators.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(()=>t.updateValueAndValidity())})}function z(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function B(t,e){null==t&&H(e,"Cannot find control with"),t.validator=T.compose([t.validator,e.validator]),t.asyncValidator=T.composeAsync([t.asyncValidator,e.asyncValidator])}function Y(t){return H(t,"There is no FormControl instance attached to form control element with")}function H(t,e){let n;throw n=t.path.length>1?`path: '${t.path.join(" -> ")}'`:t.path[0]?`name: '${t.path}'`:"unspecified name attribute",new Error(`${e} ${n}`)}function U(t){return null!=t?T.compose(t.map(I)):null}function W(t){return null!=t?T.composeAsync(t.map(N)):null}function K(t,e){if(!t.hasOwnProperty("model"))return!1;const n=t.model;return!!n.isFirstChange()||!Object(a["ɵlooseIdentical"])(e,n.currentValue)}const $=[l,class{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(t))}registerOnChange(t){this.onChange=e=>{t(""==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}},C,M,class{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=a["ɵlooseIdentical"]}set compareWith(t){if("function"!=typeof t)throw new Error("compareWith must be a function, but received "+JSON.stringify(t));this._compareWith=t}writeValue(t){let e;if(this.value=t,Array.isArray(t)){const n=t.map(t=>this._getOptionId(t));e=(t,e)=>{t._setSelected(n.indexOf(e.toString())>-1)}}else e=(t,e)=>{t._setSelected(!1)};this._optionMap.forEach(e)}registerOnChange(t){this.onChange=e=>{const n=[];if(e.hasOwnProperty("selectedOptions")){const t=e.selectedOptions;for(let e=0;e<t.length;e++){const a=t.item(e),r=this._getOptionValue(a.value);n.push(r)}}else{const t=e.options;for(let e=0;e<t.length;e++){const a=t.item(e);if(a.selected){const t=this._getOptionValue(a.value);n.push(t)}}}this.value=n,t(n)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_registerOption(t){const e=(this._idCounter++).toString();return this._optionMap.set(e,t),e}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e)._value,t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(":")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e)._value:t}},A];function J(t,e){t._syncPendingControls(),e.forEach(t=>{const e=t.control;"submit"===e.updateOn&&e._pendingChange&&(t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1)})}function Z(t,e){if(!e)return null;Array.isArray(e)||H(t,"Value accessor was not provided as an array for form control with");let n=void 0,a=void 0,r=void 0;return e.forEach(e=>{var i;e.constructor===c?n=e:(i=e,$.some(t=>i.constructor===t)?(a&&H(t,"More than one built-in value accessor matches form control with"),a=e):(r&&H(t,"More than one custom value accessor matches form control with"),r=e))}),r||a||n||(H(t,"No valid value accessor for form control with"),null)}function Q(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}function X(t){const e=et(t)?t.validators:t;return Array.isArray(e)?U(e):e||null}function tt(t,e){const n=et(e)?e.asyncValidators:t;return Array.isArray(n)?W(n):n||null}function et(t){return null!=t&&!Array.isArray(t)&&"object"==typeof t}class nt{constructor(t,e){this.validator=t,this.asyncValidator=e,this._onCollectionChange=()=>{},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}get parent(){return this._parent}get valid(){return"VALID"===this.status}get invalid(){return"INVALID"===this.status}get pending(){return"PENDING"==this.status}get disabled(){return"DISABLED"===this.status}get enabled(){return"DISABLED"!==this.status}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this.validator=X(t)}setAsyncValidators(t){this.asyncValidator=tt(t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status="PENDING",!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status="DISABLED",this.errors=null,this._forEachChild(e=>{e.disable(Object.assign({},t,{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign({},t,{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!0))}enable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status="VALID",this._forEachChild(e=>{e.enable(Object.assign({},t,{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign({},t,{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),"VALID"!==this.status&&"PENDING"!==this.status||this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?"DISABLED":"VALID"}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status="PENDING";const e=w(this.asyncValidator(this));this._asyncValidationSubscription=e.subscribe(e=>this.setErrors(e,{emitEvent:t}))}}_cancelExistingSubscription(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()}setErrors(t,e={}){this.errors=t,this._updateControlsErrors(!1!==e.emitEvent)}get(t){return function(t,e,n){return null==e?null:(e instanceof Array||(e=e.split(".")),e instanceof Array&&0===e.length?null:e.reduce((t,e)=>t instanceof rt?t.controls.hasOwnProperty(e)?t.controls[e]:null:t instanceof it&&t.at(e)||null,t))}(this,t)}getError(t,e){const n=e?this.get(e):this;return n&&n.errors?n.errors[t]:null}hasError(t,e){return!!this.getError(t,e)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new a.EventEmitter,this.statusChanges=new a.EventEmitter}_calculateStatus(){return this._allControlsDisabled()?"DISABLED":this.errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"}_anyControlsHaveStatus(t){return this._anyControls(e=>e.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){et(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&this._parent&&this._parent.dirty&&!this._parent._anyControlsDirty()}}class at extends nt{constructor(t=null,e,n){super(X(e),tt(n,e)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(e),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),this._initObservables()}setValue(t,e={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==e.emitModelToViewChange&&this._onChange.forEach(t=>t(this.value,!1!==e.emitViewToModelChange)),this.updateValueAndValidity(e)}patchValue(t,e={}){this.setValue(t,e)}reset(t=null,e={}){this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_clearChangeFns(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=()=>{}}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class rt extends nt{constructor(t,e,n){super(X(e),tt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1})}registerControl(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(t,e){this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}removeControl(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity(),this._onCollectionChange()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,e={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(n=>{this._throwIfControlMissing(n),this.controls[n].setValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){Object.keys(t).forEach(n=>{this.controls[n]&&this.controls[n].patchValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t={},e={}){this._forEachChild((n,a)=>{n.reset(t[a],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this._reduceChildren({},(t,e,n)=>(t[n]=e instanceof at?e.value:e.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(t,e)=>!!e._syncPendingControls()||t);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(e=>t(this.controls[e],e))}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){let e=!1;return this._forEachChild((n,a)=>{e=e||this.contains(a)&&t(n)}),e}_reduceValue(){return this._reduceChildren({},(t,e,n)=>((e.enabled||this.disabled)&&(t[n]=e.value),t))}_reduceChildren(t,e){let n=t;return this._forEachChild((t,a)=>{n=e(n,t,a)}),n}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control with name: '${n}'.`)})}}class it extends nt{constructor(t,e,n){super(X(e),tt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1})}at(t){return this.controls[t]}push(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()}insert(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity()}removeAt(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,e={}){this._checkAllValuesPresent(t),t.forEach((t,n)=>{this._throwIfControlMissing(n),this.at(n).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t.forEach((t,n)=>{this.at(n)&&this.at(n).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t=[],e={}){this._forEachChild((n,a)=>{n.reset(t[a],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this.controls.map(t=>t instanceof at?t.value:t.getRawValue())}clear(){this.controls.length<1||(this._forEachChild(t=>t._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity())}_syncPendingControls(){let t=this.controls.reduce((t,e)=>!!e._syncPendingControls()||t,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(t))throw new Error("Cannot find form control at index "+t)}_forEachChild(t){this.controls.forEach((e,n)=>{t(e,n)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(e=>e.enabled&&t(e))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control at index: ${n}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const st=(()=>Promise.resolve(null))();class ot extends h{constructor(t,e){super(),this.submitted=!1,this._directives=[],this.ngSubmit=new a.EventEmitter,this.form=new rt({},U(t),W(e))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(t){st.then(()=>{const e=this._findContainer(t.path);t.control=e.registerControl(t.name,t.control),V(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),this._directives.push(t)})}getControl(t){return this.form.get(t.path)}removeControl(t){st.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name),Q(this._directives,t)})}addFormGroup(t){st.then(()=>{const e=this._findContainer(t.path),n=new rt({});B(n,t),e.registerControl(t.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(t){st.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name)})}getFormGroup(t){return this.form.get(t.path)}updateModel(t,e){st.then(()=>{this.form.get(t.path).setValue(e)})}setValue(t){this.control.setValue(t)}onSubmit(t){return this.submitted=!0,J(this.form,this._directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(t){return t.pop(),t.length?this.form.get(t):this.form}}class ut{static modelParentException(){throw new Error(`\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup's partner directive "formControlName" instead.  Example:\n\n      ${k}\n\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formControlName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  `)}static formGroupNameException(){throw new Error(`\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      ${E}\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      ${L}`)}static missingNameException(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')}static modelGroupParentException(){throw new Error(`\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      ${E}\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      ${L}`)}static ngFormWarning(){console.warn("\n    It looks like you're using 'ngForm'.\n\n    Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n    in Angular v9.\n\n    Use 'ng-form' instead.\n\n    Before:\n    <ngForm #myForm=\"ngForm\">\n\n    After:\n    <ng-form #myForm=\"ngForm\">\n    ")}}const lt=new a.InjectionToken("NgFormSelectorWarning");class dt extends h{ngOnInit(){this._checkParentType(),this.formDirective.addFormGroup(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormGroup(this)}get control(){return this.formDirective.getFormGroup(this)}get path(){return G(this.name,this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._validators)}get asyncValidator(){return W(this._asyncValidators)}_checkParentType(){}}class ct extends dt{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}_checkParentType(){this._parent instanceof ct||this._parent instanceof ot||ut.modelGroupParentException()}}const ft=(()=>Promise.resolve(null))();class ht extends p{constructor(t,e,n,r){super(),this.control=new at,this._registered=!1,this.update=new a.EventEmitter,this._parent=t,this._rawValidators=e||[],this._rawAsyncValidators=n||[],this.valueAccessor=Z(this,r)}ngOnChanges(t){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in t&&this._updateDisabled(t),K(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?G(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._rawValidators)}get asyncValidator(){return W(this._rawAsyncValidators)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){V(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){!(this._parent instanceof ct)&&this._parent instanceof dt?ut.formGroupNameException():this._parent instanceof ct||this._parent instanceof ot||ut.modelParentException()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||ut.missingNameException()}_updateValue(t){ft.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1})})}_updateDisabled(t){const e=t.isDisabled.currentValue,n=""===e||e&&"false"!==e;ft.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable()})}}class gt{}const pt=new a.InjectionToken("NgModelWithFormControlWarning");class bt extends h{constructor(t,e){super(),this._validators=t,this._asyncValidators=e,this.submitted=!1,this.directives=[],this.form=null,this.ngSubmit=new a.EventEmitter}ngOnChanges(t){this._checkFormPresent(),t.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(t){const e=this.form.get(t.path);return V(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e}getControl(t){return this.form.get(t.path)}removeControl(t){Q(this.directives,t)}addFormGroup(t){const e=this.form.get(t.path);B(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormGroup(t){}getFormGroup(t){return this.form.get(t.path)}addFormArray(t){const e=this.form.get(t.path);B(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormArray(t){}getFormArray(t){return this.form.get(t.path)}updateModel(t,e){this.form.get(t.path).setValue(e)}onSubmit(t){return this.submitted=!0,J(this.form,this.directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_updateDomValue(){this.directives.forEach(t=>{const e=this.form.get(t.path);t.control!==e&&(function(t,e){e.valueAccessor.registerOnChange(()=>Y(e)),e.valueAccessor.registerOnTouched(()=>Y(e)),e._rawValidators.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),e._rawAsyncValidators.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),t&&t._clearChangeFns()}(t.control,t),e&&V(e,t),t.control=e)}),this.form._updateTreeValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(()=>this._updateDomValue()),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{}),this._oldForm=this.form}_updateValidators(){const t=U(this._validators);this.form.validator=T.compose([this.form.validator,t]);const e=W(this._asyncValidators);this.form.asyncValidator=T.composeAsync([this.form.asyncValidator,e])}_checkFormPresent(){this.form||D.missingFormException()}}class mt extends dt{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}_checkParentType(){vt(this._parent)&&D.groupParentException()}}class yt extends h{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}ngOnInit(){this._checkParentType(),this.formDirective.addFormArray(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormArray(this)}get control(){return this.formDirective.getFormArray(this)}get formDirective(){return this._parent?this._parent.formDirective:null}get path(){return G(this.name,this._parent)}get validator(){return U(this._validators)}get asyncValidator(){return W(this._asyncValidators)}_checkParentType(){vt(this._parent)&&D.arrayParentException()}}function vt(t){return!(t instanceof mt||t instanceof bt||t instanceof yt)}let xt=(()=>{class t extends p{constructor(t,e,n,r,i){super(),this._ngModelWarningConfig=i,this._added=!1,this.update=new a.EventEmitter,this._ngModelWarningSent=!1,this._parent=t,this._rawValidators=e||[],this._rawAsyncValidators=n||[],this.valueAccessor=Z(this,r)}set isDisabled(t){D.disabledAttrWarning()}ngOnChanges(e){var n,r;this._added||this._setUpControl(),K(e,this.viewModel)&&("formControlName",n=t,this,r=this._ngModelWarningConfig,Object(a.isDevMode)()&&"never"!==r&&((null!==r&&"once"!==r||n._ngModelWarningSentOnce)&&("always"!==r||this._ngModelWarningSent)||(D.ngModelWarning("formControlName"),n._ngModelWarningSentOnce=!0,this._ngModelWarningSent=!0)),this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}get path(){return G(this.name,this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._rawValidators)}get asyncValidator(){return W(this._rawAsyncValidators)}_checkParentType(){!(this._parent instanceof mt)&&this._parent instanceof dt?D.ngModelGroupException():this._parent instanceof mt||this._parent instanceof bt||this._parent instanceof yt||D.controlParentException()}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0}}return t._ngModelWarningSentOnce=!1,t})();class _t{get required(){return this._required}set required(t){this._required=null!=t&&!1!==t&&""+t!="false",this._onChange&&this._onChange()}validate(t){return this.required?T.required(t):null}registerOnValidatorChange(t){this._onChange=t}}class Tt{}class Ot{group(t,e=null){const n=this._reduceControls(t);let a=null,r=null,i=void 0;return null!=e&&(function(t){return void 0!==t.asyncValidators||void 0!==t.validators||void 0!==t.updateOn}(e)?(a=null!=e.validators?e.validators:null,r=null!=e.asyncValidators?e.asyncValidators:null,i=null!=e.updateOn?e.updateOn:void 0):(a=null!=e.validator?e.validator:null,r=null!=e.asyncValidator?e.asyncValidator:null)),new rt(n,{asyncValidators:r,updateOn:i,validators:a})}control(t,e,n){return new at(t,e,n)}array(t,e,n){const a=t.map(t=>this._createControl(t));return new it(a,e,n)}_reduceControls(t){const e={};return Object.keys(t).forEach(n=>{e[n]=this._createControl(t[n])}),e}_createControl(t){return t instanceof at||t instanceof rt||t instanceof it?t:Array.isArray(t)?this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null):this.control(t)}}class wt{static withConfig(t){return{ngModule:wt,providers:[{provide:lt,useValue:t.warnOnDeprecatedNgFormSelector}]}}}class St{static withConfig(t){return{ngModule:St,providers:[{provide:pt,useValue:t.warnOnNgModelWithFormControl}]}}}},sA22:function(t,e,n){var a=n("pMcL"),r=Object.prototype,i=r.hasOwnProperty,s=r.toString,o=a?a.toStringTag:void 0;t.exports=function(t){var e=i.call(t,o),n=t[o];try{t[o]=void 0;var a=!0}catch(u){}var r=s.call(t);return a&&(e?t[o]=n:delete t[o]),r}},sEFX:function(t,e,n){"use strict";var a=n("AO7/"),r=n("9d/t");t.exports=a?{}.toString:function(){return"[object "+r(this)+"]"}},sEik:function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},sLuX:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("25BL"),i=n("uIqm");n("FSuO"),n("a0VL"),n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return o}));var s=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function o(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{table:0}),(t()(),a["ɵeld"](1,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,r.b,r.a)),a["ɵdid"](2,2867200,[[1,4],["table",4]],0,i.a,[a.NgZone,a.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],header:[4,"header"],footer:[5,"footer"],limit:[6,"limit"],autoReload:[7,"autoReload"],autoSave:[8,"autoSave"],customCss:[9,"customCss"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.tableData,n.columns,"flex",!1,!1,!1,0,n.autoReload,!1,n.customCss)}),null)}},sMBO:function(t,e,n){var a=n("g6v/"),r=n("m/L8").f,i=Function.prototype,s=i.toString,o=/^\s*function ([^ (]*)/;a&&!("name"in i)&&r(i,"name",{configurable:!0,get:function(){try{return s.call(this).match(o)[1]}catch(t){return""}}})},sVev:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return t.prototype=Object.create(Error.prototype),t})()},sb0X:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("s7LF"),i=n("oxzT"),s=n("LvDl");class o{constructor(t){this.elRef=t,this.type="submit",this.disabled=!1,this.submitAction=new a.EventEmitter,this.loading=!1,this.icons=i.a}ngOnInit(){this.form.statusChanges.subscribe(()=>{s.has(this.form.errors,"cdSubmitButton")&&(this.loading=!1,s.unset(this.form.errors,"cdSubmitButton"),this.form instanceof r.a&&this.form.updateValueAndValidity())})}submit(t){this.focusButton(),this.form instanceof r.l&&this.form.onSubmit(t),this.form.invalid?this.focusInvalid():(this.loading=!0,this.submitAction.emit())}focusButton(){this.elRef.nativeElement.offsetParent.querySelector(`button[type="${this.type}"]`).focus()}focusInvalid(){const t=this.elRef.nativeElement.offsetParent.querySelector("input.ng-invalid, select.ng-invalid");t&&t.focus()}}},sne2:function(t,e,n){"use strict";n.d(e,"c",(function(){return i})),n.d(e,"e",(function(){return s})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u})),n.d(e,"d",(function(){return l}));var a=n("8Y7J"),r=n("GiVz");let i=(()=>{class t{}return t.organization="ceph",t.projectName="Ceph Dashboard",t.license="Free software (LGPL 2.1).",t})();var s=function(t){return t.CREATE="create",t.EDIT="edit",t.UPDATE="update",t.REMOVE="remove",t.DELETE="delete",t.ADD="add",t.COPY="copy",t.CLONE="clone",t.RECREATE="recreate",t.EXPIRE="expire",t}({}),o=function(t){return t.CREATE="Create",t.DELETE="Delete",t.ADD="Add",t.REMOVE="Remove",t.EDIT="Edit",t.CANCEL="Cancel",t.COPY="Copy",t.CLONE="Clone",t.UPDATE="Update",t.EVICT="Evict",t.SHOW="Show",t.RECREATE="Recreate",t.EXPIRE="Expire",t}({});let u=(()=>{class t{constructor(t){this.i18n=t,this.CREATE=this.i18n("Create"),this.DELETE=this.i18n("Delete"),this.ADD=this.i18n("Add"),this.SET=this.i18n("Set"),this.REMOVE=this.i18n("Remove"),this.UNSET=this.i18n("Unset"),this.EDIT=this.i18n("Edit"),this.UPDATE=this.i18n("Update"),this.CANCEL=this.i18n("Cancel"),this.CLONE=this.i18n("Clone"),this.COPY=this.i18n("Copy"),this.DEEP_SCRUB=this.i18n("Deep Scrub"),this.DESTROY=this.i18n("Destroy"),this.EVICT=this.i18n("Evict"),this.FLATTEN=this.i18n("Flatten"),this.MARK_DOWN=this.i18n("Mark Down"),this.MARK_IN=this.i18n("Mark In"),this.MARK_LOST=this.i18n("Mark Lost"),this.MARK_OUT=this.i18n("Mark Out"),this.PROTECT=this.i18n("Protect"),this.PURGE=this.i18n("Purge"),this.RENAME=this.i18n("Rename"),this.RESTORE=this.i18n("Restore"),this.REWEIGHT=this.i18n("Reweight"),this.ROLLBACK=this.i18n("Rollback"),this.SCRUB=this.i18n("Scrub"),this.SHOW=this.i18n("Show"),this.TRASH=this.i18n("Move to Trash"),this.UNPROTECT=this.i18n("Unprotect"),this.CHANGE=this.i18n("Change"),this.RECREATE=this.i18n("Recreate"),this.EXPIRE=this.i18n("Expire")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})(),l=(()=>{class t{constructor(t){this.i18n=t,this.CREATED=this.i18n("Created"),this.DELETED=this.i18n("Deleted"),this.ADDED=this.i18n("Added"),this.REMOVED=this.i18n("Removed"),this.EDITED=this.i18n("Edited"),this.CANCELED=this.i18n("Canceled"),this.CLONED=this.i18n("Cloned"),this.COPIED=this.i18n("Copied"),this.DEEP_SCRUBBED=this.i18n("Deep Scrubbed"),this.DESTROYED=this.i18n("Destroyed"),this.FLATTENED=this.i18n("Flattened"),this.MARKED_DOWN=this.i18n("Marked Down"),this.MARKED_IN=this.i18n("Marked In"),this.MARKED_LOST=this.i18n("Marked Lost"),this.MARKED_OUT=this.i18n("Marked Out"),this.PROTECTED=this.i18n("Protected"),this.PURGED=this.i18n("Purged"),this.RENAMED=this.i18n("Renamed"),this.RESTORED=this.i18n("Restored"),this.REWEIGHTED=this.i18n("Reweighted"),this.ROLLED_BACK=this.i18n("Rolled back"),this.SCRUBBED=this.i18n("Scrubbed"),this.SHOWED=this.i18n("Showed"),this.TRASHED=this.i18n("Moved to Trash"),this.UNPROTECTED=this.i18n("Unprotected"),this.CHANGE=this.i18n("Change"),this.RECREATED=this.i18n("Recreated"),this.EXPIRED=this.i18n("Expired")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})()},sp3z:function(t,e,n){!function(t){"use strict";t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}})}(n("wd/R"))},"t/zF":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e){this.name=t,this.metadata=e}}},tAZD:function(t,e,n){var a,r,i;!function(s){if("object"==typeof t.exports){var o=s(0,e);void 0!==o&&(t.exports=o)}else r=[n,e],void 0===(i="function"==typeof(a=s)?a.apply(e,r):a)||(t.exports=i)}((function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=void 0;e.default=["en",[["a","p"],["AM","PM"],n],[["AM","PM"],n,n],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],n,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],n,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",n,"{1} 'at' {0}",n],[".",",",";","%","+","-","E","×","‰","∞","NaN",":"],["#,##0.###","#,##0%","¤#,##0.00","#E0"],"$","US Dollar",{},function(t){var e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\.?/,"").length;return 1===e&&0===n?1:5}]}))},tGlX:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},tT3J:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n("wd/R"))},tUCv:function(t,e,n){!function(t){"use strict";t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n("wd/R"))},tiKp:function(t,e,n){var a=n("2oRo"),r=n("VpIT"),i=n("UTVS"),s=n("kOOl"),o=n("STAE"),u=n("/b8u"),l=r("wks"),d=a.Symbol,c=u?d:d&&d.withoutSetter||s;t.exports=function(t){return i(l,t)||(l[t]=o&&i(d,t)?d[t]:c("Symbol."+t)),l[t]}},tpUd:function(t,e,n){var a=n("CslI");t.exports=function(t){return a(t)?void 0:t}},tycR:function(t,e,n){var a=n("A2ZE"),r=n("RK3t"),i=n("ewvW"),s=n("UMSQ"),o=n("ZfDv"),u=[].push,l=function(t){var e=1==t,n=2==t,l=3==t,d=4==t,c=6==t,f=5==t||c;return function(h,g,p,b){for(var m,y,v=i(h),x=r(v),_=a(g,p,3),T=s(x.length),O=0,w=b||o,S=e?w(h,T):n?w(h,0):void 0;T>O;O++)if((f||O in x)&&(y=_(m=x[O],O,v),t))if(e)S[O]=y;else if(y)switch(t){case 3:return!0;case 5:return m;case 6:return O;case 2:u.call(S,m)}else if(d)return!1;return c?-1:l||d?d:S}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},tz6c:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("2Vo4"),r=n("pLZG"),i=n("lJxs"),s=n("SxV6"),o=n("+0ag"),u=n("mSOc"),l=n("8Y7J");let d=(()=>{class t{constructor(t,e){this.summaryservice=t,this.cephReleaseNamePipe=e,this.releaseDataSource=new a.a(null),this.releaseData$=this.releaseDataSource.asObservable(),this.summaryservice.subscribeOnce(t=>{const e=this.cephReleaseNamePipe.transform(t.version);this.releaseDataSource.next(e)})}urlGenerator(t,e){const n=`http://docs.ceph.com/docs/${t}/`;return{iscsi:n+"mgr/dashboard/#enabling-iscsi-management",prometheus:n+"mgr/dashboard/#enabling-prometheus-alerting","nfs-ganesha":n+"mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard","rgw-nfs":n+"radosgw/nfs",rgw:n+"mgr/dashboard/#enabling-the-object-gateway-management-frontend",dashboard:n+"mgr/dashboard",grafana:n+"mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards",orch:n+"mgr/orchestrator",pgs:"http://ceph.com/pgcalc"}[e]}subscribeOnce(t,e,n){return this.releaseData$.pipe(Object(r.a)(t=>!!t),Object(i.a)(e=>this.urlGenerator(e,t)),Object(s.a)()).subscribe(e,n)}}return t.ngInjectableDef=l["ɵɵdefineInjectable"]({factory:function(){return new t(l["ɵɵinject"](u.a),l["ɵɵinject"](o.a))},token:t,providedIn:"root"}),t})()},u3GI:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},uEye:function(t,e,n){!function(t){"use strict";t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},uIqm:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("w9WL"),i=n("LvDl"),s=n("PqYM"),o=n("HDdC"),u=n("oxzT"),l=n("x38r");class d{constructor(t){this.errorConfig={resetData:!0,displayError:!0},this.error=t}}var c=n("vCyI");n.d(e,"a",(function(){return f}));class f{constructor(t,e){this.ngZone=t,this.cdRef=e,this.columnMode="flex",this.onlyActionHeader=!1,this.toolHeader=!0,this.searchField=!0,this.header=!0,this.footer=!0,this.limit=10,this.hasDetails=!1,this.autoReload=5e3,this.identifier="id",this.forceIdentifier=!1,this.selectionType=void 0,this.updateSelectionOnRefresh="onChange",this.updateExpandedOnRefresh="onChange",this.autoSave=!0,this.searchableObjects=!1,this.extraFilterableColumns=[],this.fetchData=new a.EventEmitter,this.updateSelection=new a.EventEmitter,this.setExpandedRow=new a.EventEmitter,this.columnFiltersChanged=new a.EventEmitter,this.selection=new c.a,this.expanded=void 0,this.icons=u.a,this.cellTemplates={},this.search="",this.rows=[],this.loadingIndicator=!0,this.loadingError=!1,this.paginationClasses={pagerLeftArrow:u.a.leftArrowDouble,pagerRightArrow:u.a.rightArrowDouble,pagerPrevious:u.a.leftArrow,pagerNext:u.a.rightArrow},this.userConfig={},this.localStorage=window.localStorage,this.updating=!1,this.columnFilters=[]}get columnFiltered(){return i.some(this.columnFilters,t=>void 0!==t.value)}static prepareSearch(t){return(t=t.toLowerCase().replace(/,/g,"")).match(/['"][^'"]+['"]/)&&(t=t.replace(/['"][^'"]+['"]/g,t=>t.replace(/(['"])([^'"]+)(['"])/g,"$2").replace(/ /g,"+"))),t.split(" ").filter(t=>t)}ngOnInit(){if(this.table.element.addEventListener("mouseenter",t=>t.stopPropagation(),!0),this._addTemplates(),!this.sorts){const t=-1!==i.findIndex(this.columns,["prop",this.identifier]);this.sorts=this.createSortingDefinition(t?this.identifier:this.columns[0].prop+""),t||this.forceIdentifier||(this.identifier=this.columns[0].prop+"")}this.initUserConfig(),this.columns.forEach(t=>{t.cellTransformation&&(t.cellTemplate=this.cellTemplates[t.cellTransformation]),t.flexGrow||(t.flexGrow=t.prop+""===this.identifier?1:2),t.resizeable||(t.resizeable=!1)}),this.initExpandCollapseColumn(),this.initCheckboxColumn(),this.filterHiddenColumns(),this.initColumnFilters(),this.updateColumnFilterOptions(),this.fetchData.observers.length>0&&(this.loadingIndicator=!0),i.isInteger(this.autoReload)&&this.autoReload>0?this.ngZone.runOutsideAngular(()=>{this.reloadSubscriber=Object(s.a)(0,this.autoReload).subscribe(()=>{this.ngZone.run(()=>this.reloadData())})}):this.autoReload?this.useData():this.reloadData()}initUserConfig(){this.autoSave&&(this.tableName=this._calculateUniqueTableName(this.columns),this._loadUserConfig(),this._initUserConfigAutoSave()),this.userConfig.limit||(this.userConfig.limit=this.limit),this.userConfig.sorts||(this.userConfig.sorts=this.sorts),this.userConfig.columns?this.columns.forEach((t,e)=>{t.isHidden=this.userConfig.columns[e].isHidden}):this.updateUserColumns()}_calculateUniqueTableName(t){const e=t=>{if(!i.isString(t))return 0;let e=0;for(let n=0;n<t.length;n++)e+=t.charCodeAt(n)*n;return e};return t.reduce((t,n,a)=>(e(n.prop)+e(n.name))*(a+1)+t,0).toString()}_loadUserConfig(){const t=this.localStorage.getItem(this.tableName);t&&(this.userConfig=JSON.parse(t))}_initUserConfigAutoSave(){const t=o.a.create(this._initUserConfigProxy.bind(this));this.saveSubscriber=t.subscribe(this._saveUserConfig.bind(this))}_initUserConfigProxy(t){this.userConfig=new Proxy(this.userConfig,{set:(e,n,a)=>(e[n]=a,t.next(e),!0)})}_saveUserConfig(t){this.localStorage.setItem(this.tableName,JSON.stringify(t))}updateUserColumns(){this.userConfig.columns=this.columns.map(t=>({prop:t.prop,name:t.name,isHidden:!!t.isHidden}))}initCheckboxColumn(){"multiClick"===this.selectionType&&this.columns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,checkboxable:!0,canAutoResize:!1,cellClass:"cd-datatable-checkbox",width:30})}initExpandCollapseColumn(){this.hasDetails&&this.columns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,isHidden:!1,canAutoResize:!1,cellClass:"cd-datatable-expand-collapse",width:40,cellTemplate:this.rowDetailsTpl})}filterHiddenColumns(){this.tableColumns=this.columns.filter(t=>!t.isHidden)}initColumnFilters(){let t=i.filter(this.columns,{filterable:!0});t=[...t,...this.extraFilterableColumns],this.columnFilters=t.map(t=>({column:t,options:[],value:t.filterInitValue?this.createColumnFilterOption(t.filterInitValue,t.pipe):void 0})),this.selectedFilter=i.first(this.columnFilters)}createColumnFilterOption(t,e){return{raw:i.toString(t),formatted:e?e.transform(t):i.toString(t)}}updateColumnFilterOptions(){this.columnFilters.forEach(t=>{let e=[];if(i.isUndefined(t.column.filterOptions)){const n=i.filter(i.map(this.data,t.column.prop),t=>i.isString(t)&&""!==t||i.isBoolean(t)||i.isFinite(t)||i.isDate(t));e=i.sortedUniq(n.sort())}else e=t.column.filterOptions;const n=e.map(e=>this.createColumnFilterOption(e,t.column.pipe));t.value&&i.isUndefined(i.find(n,{raw:t.value.raw}))&&(t.value=void 0),t.options=n})}onSelectFilter(t){this.selectedFilter=t}onChangeFilter(t,e){t.value=i.isEqual(t.value,e)?void 0:e,this.updateFilter()}doColumnFiltering(){const t=[];let e=[...this.data],n=[];return this.columnFilters.forEach(a=>{if(void 0===a.value)return;t.push({name:a.column.name,prop:a.column.prop,value:a.value});const s=i.partition(e,t=>{const e=Object(r.C)(a.column.prop)(t,a.column.prop);return i.isUndefined(a.column.filterPredicate)?""+e===a.value.raw:a.column.filterPredicate(t,a.value.raw)});e=s[0],n=[...n,...s[1]]}),this.columnFiltersChanged.emit({filters:t,data:e,dataOut:n}),i.forEach(this.selection.selected,t=>{void 0===i.find(e,{[this.identifier]:t[this.identifier]})&&(this.selection=new c.a,this.onSelect(this.selection))}),e}ngOnDestroy(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe(),this.saveSubscriber&&this.saveSubscriber.unsubscribe()}ngAfterContentChecked(){this.table&&this.table.element.clientWidth!==this.currentWidth&&(this.currentWidth=this.table.element.clientWidth,this.table.recalculate(),i.get(this.table,"cd").markForCheck())}_addTemplates(){this.cellTemplates.bold=this.tableCellBoldTpl,this.cellTemplates.checkIcon=this.checkIconTpl,this.cellTemplates.sparkline=this.sparklineTpl,this.cellTemplates.routerLink=this.routerLinkTpl,this.cellTemplates.perSecond=this.perSecondTpl,this.cellTemplates.executing=this.executingTpl,this.cellTemplates.classAdding=this.classAddingTpl,this.cellTemplates.badge=this.badgeTpl,this.cellTemplates.map=this.mapTpl,this.cellTemplates.truncate=this.truncateTpl}useCustomClass(t){if(!this.customCss)throw new Error("Custom classes are not set!");const e=Object.keys(this.customCss),n=Object.values(this.customCss).map((n,a)=>(i.isFunction(n)&&n(t)||n===t)&&e[a]).filter(t=>t).join(" ");return i.isEmpty(n)?void 0:n}ngOnChanges(t){t.data&&t.data.currentValue&&this.useData()}setLimit(t){const e=parseInt(t.target.value,10);e>0&&(this.userConfig.limit=e)}reloadData(){if(!this.updating){this.loadingError=!1;const t=new d(()=>{this.loadingError=t.errorConfig.displayError,t.errorConfig.resetData&&(this.data=[]),this.useData()});this.fetchData.emit(t),this.updating=!0}}refreshBtn(){this.loadingIndicator=!0,this.reloadData()}rowIdentity(){return t=>{const e=t[this.identifier];if(i.isUndefined(e))throw new Error(`Wrong identifier "${this.identifier}" -> "${e}"`);return e}}useData(){this.data&&(this.updateColumnFilterOptions(),this.updateFilter(),this.reset(),this.updateSelected(),this.updateExpanded())}reset(){this.loadingIndicator=!1,this.updating=!1}updateSelected(){if("never"===this.updateSelectionOnRefresh)return;const t=[];this.selection.selected.forEach(e=>{for(const n of this.data)e[this.identifier]===n[this.identifier]&&t.push(n)}),"onChange"===this.updateSelectionOnRefresh&&i.isEqual(this.selection.selected,t)||(this.selection.selected=t,this.onSelect(this.selection))}updateExpanded(){if(i.isUndefined(this.expanded)||"never"===this.updateExpandedOnRefresh)return;const t=this.expanded[this.identifier],e=i.find(this.data,e=>t===e[this.identifier]);"onChange"===this.updateExpandedOnRefresh&&i.isEqual(this.expanded,e)||(this.expanded=e,this.setExpandedRow.emit(e))}onSelect(t){i.has(t,"selected")&&(this.selection.selected=t.selected),this.updateSelection.emit(i.clone(this.selection))}toggleColumn(t){const e=t.target.name,n=!t.target.checked;n&&1===this.tableColumns.length?t.target.checked=!0:(i.find(this.columns,t=>t.prop===e).isHidden=n,this.updateColumns())}updateColumns(){this.updateUserColumns(),this.filterHiddenColumns();const t=this.userConfig.sorts[0].prop;i.find(this.tableColumns,e=>e.prop===t)||(this.userConfig.sorts=this.createSortingDefinition(this.tableColumns[0].prop)),this.table.recalculate(),this.cdRef.detectChanges()}createSortingDefinition(t){return[{prop:t,dir:r.A.asc}]}changeSorting({sorts:t}){this.userConfig.sorts=t}onClearSearch(){this.search="",this.updateFilter()}onClearFilters(){this.columnFilters.forEach(t=>{t.value=void 0}),this.selectedFilter=i.first(this.columnFilters),this.updateFilter()}updateFilter(){let t=0!==this.columnFilters.length?this.doColumnFiltering():this.data;if(this.search.length>0&&t){const e=this.columns.filter(t=>t.cellTransformation!==l.a.sparkline);t=this.subSearch(t,f.prepareSearch(this.search),e),this.table.offset=0}this.rows=t}subSearch(t,e,n){if(0===e.length||0===t.length)return t;const a=e.pop().replace(/\+/g," ").split(":"),r=[...n];return 2===a.length&&(n=r.filter(t=>-1!==t.name.toLowerCase().indexOf(a[0]))),t=this.basicDataSearch(i.last(a),t,n),this.subSearch(t,e,r)}basicDataSearch(t,e,n){return 0===t.length?e:e.filter(e=>n.filter(n=>{let a=i.get(e,n.prop);if(i.isUndefined(n.pipe)||(a=n.pipe.transform(a)),i.isUndefined(a)||i.isNull(a))return!1;if(i.isArray(a)?a=a.join(" "):(i.isNumber(a)||i.isBoolean(a))&&(a=a.toString()),i.isObjectLike(a)){if(!this.searchableObjects)return!1;a=JSON.stringify(a)}return-1!==a.toLowerCase().indexOf(t)}).length>0)}getRowClass(){return()=>({clickable:!i.isUndefined(this.selectionType)})}toggleExpandRow(t,e){e?(this.expanded=void 0,this.setExpandedRow.emit(void 0)):(this.expanded=t,this.table.rowDetail.collapseAllRows(),this.setExpandedRow.emit(t)),this.table.rowDetail.toggleExpandRow(t)}}},uNpg:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({selector:"tree-node-checkbox",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <input\n        class="tree-node-checkbox"\n        type="checkbox"\n        (click)="node.mouseAction(\'checkboxClick\', $event)"\n        [checked]="node.isSelected"\n        [indeterminate]="node.isPartiallySelected"\n      />\n    </ng-container>\n  '})],t)}()},uPDw:function(t,e,n){var a=n("oRml"),r=n("0nKi"),i=n("L0Z1"),s=i&&i.isTypedArray,o=s?r(s):a;t.exports=o},uXwI:function(t,e,n){!function(t){"use strict";var e={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function a(t,a,r){return t+" "+n(e[r],t,a)}function r(t,a,r){return n(e[r],t,a)}t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(t,e){return e?"dažas sekundes":"dažām sekundēm"},ss:a,m:r,mm:a,h:r,hh:a,d:r,dd:a,M:r,MM:a,y:r,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},uYzU:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(){}transform(t){switch(t){case"user:rbd":return"user:rbd (tcmu-runner)";default:return t}}}},ufoC:function(t,e,n){"use strict";var a=function(t){return t.auth="Login",t.cephfs="CephFS",t.rbd="RBD",t.pool="Pool",t.osd="OSD",t.role="Role",t.user="User",t}({}),r=n("jVDg"),i=n("8Y7J"),s=n("GiVz");n.d(e,"a",(function(){return l}));class o{constructor(t,e,n){this.running=t,this.failure=e,this.success=n}}class u{failure(t){return this.i18n("Failed to {{failure}} {{metadata}}",{failure:this.operation.failure,metadata:this.involves(t)})}running(t){return`${this.operation.running} ${this.involves(t)}`}success(t){return`${this.operation.success} ${this.involves(t)}`}constructor(t,e,n,a){this.i18n=t,this.operation=e,this.involves=n,this.errors=a||(()=>({}))}}let l=(()=>{class t{constructor(t){this.i18n=t,this.defaultMessage=this.newTaskMessage(new o(this.i18n("Executing"),this.i18n("execute"),this.i18n("Executed")),t=>t&&(a[t.component]||t.component)||this.i18n("unknown task"),()=>({})),this.commonOperations={create:new o(this.i18n("Creating"),this.i18n("create"),this.i18n("Created")),update:new o(this.i18n("Updating"),this.i18n("update"),this.i18n("Updated")),delete:new o(this.i18n("Deleting"),this.i18n("delete"),this.i18n("Deleted")),add:new o(this.i18n("Adding"),this.i18n("add"),this.i18n("Added")),remove:new o(this.i18n("Removing"),this.i18n("remove"),this.i18n("Removed")),import:new o(this.i18n("Importing"),this.i18n("import"),this.i18n("Imported"))},this.rbd={default:t=>this.i18n("RBD '{{id}}'",{id:""+t.image_spec}),create:t=>{const e=new r.a(t.pool_name,t.namespace,t.image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},child:t=>{const e=new r.a(t.child_pool_name,t.child_namespace,t.child_image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},destination:t=>{const e=new r.a(t.dest_pool_name,t.dest_namespace,t.dest_image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},snapshot:t=>this.i18n("RBD snapshot '{{id}}'",{id:`${t.image_spec}@${t.snapshot_name}`})},this.rbd_mirroring={site_name:()=>this.i18n("mirroring site name"),bootstrap:()=>this.i18n("bootstrap token"),pool:t=>this.i18n("mirror mode for pool '{{id}}'",{id:""+t.pool_name}),pool_peer:t=>this.i18n("mirror peer for pool '{{id}}'",{id:""+t.pool_name})},this.grafana={update_dashboards:()=>this.i18n("all dashboards")},this.messages={"host/create":this.newTaskMessage(this.commonOperations.create,t=>this.host(t)),"host/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.host(t)),"osd/create":this.newTaskMessage(this.commonOperations.create,t=>this.i18n("OSDs (DriveGroups: {{tracking_id}})",{tracking_id:t.tracking_id})),"osd/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.osd(t)),"pool/create":this.newTaskMessage(this.commonOperations.create,t=>this.pool(t),t=>({17:this.i18n("Name is already used by {{pool_name}}.",{pool_name:this.pool(t)})})),"pool/edit":this.newTaskMessage(this.commonOperations.update,t=>this.pool(t),t=>({17:this.i18n("Name is already used by {{pool_name}}.",{pool_name:this.pool(t)})})),"pool/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.pool(t)),"ecp/create":this.newTaskMessage(this.commonOperations.create,t=>this.ecp(t),t=>({17:this.i18n("Name is already used by {{name}}.",{name:this.ecp(t)})})),"ecp/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.ecp(t)),"crushRule/create":this.newTaskMessage(this.commonOperations.create,t=>this.crushRule(t),t=>({17:this.i18n("Name is already used by {{name}}.",{name:this.crushRule(t)})})),"crushRule/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.crushRule(t)),"rbd/create":this.newTaskMessage(this.commonOperations.create,this.rbd.create,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.create(t)})})),"rbd/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.default,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.default(t)})})),"rbd/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.default,t=>({16:this.i18n("{{rbd_name}} is busy.",{rbd_name:this.rbd.default(t)}),39:this.i18n("{{rbd_name}} contains snapshots.",{rbd_name:this.rbd.default(t)})})),"rbd/clone":this.newTaskMessage(new o(this.i18n("Cloning"),this.i18n("clone"),this.i18n("Cloned")),this.rbd.child,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.child(t)}),22:this.i18n("Snapshot of {{rbd_name}} must be protected.",{rbd_name:this.rbd.child(t)})})),"rbd/copy":this.newTaskMessage(new o(this.i18n("Copying"),this.i18n("copy"),this.i18n("Copied")),this.rbd.destination,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.destination(t)})})),"rbd/flatten":this.newTaskMessage(new o(this.i18n("Flattening"),this.i18n("flatten"),this.i18n("Flattened")),this.rbd.default),"rbd/snap/create":this.newTaskMessage(this.commonOperations.create,this.rbd.snapshot,t=>({17:this.i18n("Name is already used by {{snap_name}}.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.snapshot,t=>({16:this.i18n("Cannot unprotect {{snap_name}} because it contains child images.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.snapshot,t=>({16:this.i18n("Cannot delete {{snap_name}} because it's protected.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/rollback":this.newTaskMessage(new o(this.i18n("Rolling back"),this.i18n("rollback"),this.i18n("Rolled back")),this.rbd.snapshot),"rbd/trash/move":this.newTaskMessage(new o(this.i18n("Moving"),this.i18n("move"),this.i18n("Moved")),t=>this.i18n("image '{{id}}' to trash",{id:t.image_spec}),()=>({2:this.i18n("Could not find image.")})),"rbd/trash/restore":this.newTaskMessage(new o(this.i18n("Restoring"),this.i18n("restore"),this.i18n("Restored")),t=>this.i18n("image '{{id}}' into '{{new_id}}'",{id:t.image_id_spec,new_id:t.new_image_name}),t=>({17:this.i18n("Image name '{{id}}' is already in use.",{id:t.new_image_name})})),"rbd/trash/remove":this.newTaskMessage(new o(this.i18n("Deleting"),this.i18n("delete"),this.i18n("Deleted")),t=>this.i18n("image '{{id}}'",{id:""+t.image_id_spec})),"rbd/trash/purge":this.newTaskMessage(new o(this.i18n("Purging"),this.i18n("purge"),this.i18n("Purged")),t=>{let e=this.i18n("all pools");return t.pool_name&&(e=`'${t.pool_name}'`),this.i18n("images from {{message}}",{message:e})}),"rbd/mirroring/site_name/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.site_name,()=>({})),"rbd/mirroring/bootstrap/create":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/bootstrap/import":this.newTaskMessage(this.commonOperations.import,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/pool/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool,()=>({16:this.i18n("Cannot disable mirroring because it contains a peer.")})),"rbd/mirroring/peer/add":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd_mirroring.pool_peer,()=>({})),"iscsi/target/create":this.newTaskMessage(this.commonOperations.create,t=>this.iscsiTarget(t)),"iscsi/target/edit":this.newTaskMessage(this.commonOperations.update,t=>this.iscsiTarget(t)),"iscsi/target/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.iscsiTarget(t)),"nfs/create":this.newTaskMessage(this.commonOperations.create,t=>this.nfs(t)),"nfs/edit":this.newTaskMessage(this.commonOperations.update,t=>this.nfs(t)),"nfs/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.nfs(t)),"grafana/dashboards/update":this.newTaskMessage(this.commonOperations.update,this.grafana.update_dashboards,()=>({})),"orchestrator/identify_device":this.newTaskMessage(new o(this.i18n("Identifying"),this.i18n("identify"),this.i18n("Identified")),t=>this.i18n("device '{{device}}' on host '{{hostname}}'",t))}}newTaskMessage(t,e,n){return new u(this.i18n,t,e,n)}host(t){return this.i18n("host '{{hostname}}'",{hostname:t.hostname})}osd(t){return this.i18n("OSD '{{svc_id}}'",{svc_id:t.svc_id})}pool(t){return this.i18n("pool '{{pool_name}}'",{pool_name:t.pool_name})}ecp(t){return this.i18n("erasure code profile '{{name}}'",{name:t.name})}crushRule(t){return this.i18n("crush rule '{{name}}'",{name:t.name})}iscsiTarget(t){return this.i18n("target '{{target_iqn}}'",{target_iqn:t.target_iqn})}nfs(t){return this.i18n("NFS {{nfs_id}}",{nfs_id:`'${t.cluster_id}:${t.export_id?t.export_id:t.path}'`})}_getTaskTitle(t){return t.name&&t.name.startsWith("progress/")?this.newTaskMessage(new o(t.name.replace("progress/",""),"",t.name.replace("progress/","")),t=>""):this.messages[t.name]||this.defaultMessage}getSuccessTitle(t){return this._getTaskTitle(t).success(t.metadata)}getErrorMessage(t){return this._getTaskTitle(t).errors(t.metadata)[t.exception.code]||t.exception.detail}getErrorTitle(t){return this._getTaskTitle(t).failure(t.metadata)}getRunningTitle(t){return this._getTaskTitle(t).running(t.metadata)}getRunningText(t){return this._getTaskTitle(t).operation.running}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.a))},token:t,providedIn:"root"}),t})()},uy3s:function(t,e,n){var a=n("+GvH"),r=n("x3F9");t.exports=function t(e,n,i,s,o){return e===n||(null==e||null==n||!r(e)&&!r(n)?e!=e&&n!=n:a(e,n,i,s,t,o))}},uy83:function(t,e,n){var a=n("0Dky");t.exports=!a((function(){return Object.isExtensible(Object.preventExtensions({}))}))},uyHG:function(t,e){var n,a=/^\[object .+?Constructor\]$/,r="object"==typeof global&&global&&global.Object===Object&&global,i="object"==typeof self&&self&&self.Object===Object&&self,s=r||i||Function("return this")(),o=Array.prototype,u=Function.prototype,l=Object.prototype,d=s["__core-js_shared__"],c=(n=/[^.]+$/.exec(d&&d.keys&&d.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",f=u.toString,h=l.hasOwnProperty,g=l.toString,p=RegExp("^"+f.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=o.splice,m=w(s,"Map"),y=w(Object,"create");function v(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function x(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function _(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function T(t,e){for(var n,a,r=t.length;r--;)if((n=t[r][0])===(a=e)||n!=n&&a!=a)return r;return-1}function O(t,e){var n,a,r=t.__data__;return("string"==(a=typeof(n=e))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==n:null===n)?r["string"==typeof e?"string":"hash"]:r.map}function w(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!I(t)||(e=t,c&&c in e))&&(function(t){var e=I(t)?g.call(t):"";return"[object Function]"==e||"[object GeneratorFunction]"==e}(t)||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(n){}return e}(t)?p:a).test(function(t){if(null!=t){try{return f.call(t)}catch(e){}try{return t+""}catch(e){}}return""}(t));var e}(n)?n:void 0}function S(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s),s};return n.cache=new(S.Cache||_),n}function I(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}v.prototype.clear=function(){this.__data__=y?y(null):{}},v.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},v.prototype.get=function(t){var e=this.__data__;if(y){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return h.call(e,t)?e[t]:void 0},v.prototype.has=function(t){var e=this.__data__;return y?void 0!==e[t]:h.call(e,t)},v.prototype.set=function(t,e){return this.__data__[t]=y&&void 0===e?"__lodash_hash_undefined__":e,this},x.prototype.clear=function(){this.__data__=[]},x.prototype.delete=function(t){var e=this.__data__,n=T(e,t);return!(n<0||(n==e.length-1?e.pop():b.call(e,n,1),0))},x.prototype.get=function(t){var e=this.__data__,n=T(e,t);return n<0?void 0:e[n][1]},x.prototype.has=function(t){return T(this.__data__,t)>-1},x.prototype.set=function(t,e){var n=this.__data__,a=T(n,t);return a<0?n.push([t,e]):n[a][1]=e,this},_.prototype.clear=function(){this.__data__={hash:new v,map:new(m||x),string:new v}},_.prototype.delete=function(t){return O(this,t).delete(t)},_.prototype.get=function(t){return O(this,t).get(t)},_.prototype.has=function(t){return O(this,t).has(t)},_.prototype.set=function(t,e){return O(this,t).set(t,e),this},S.Cache=_,t.exports=S},vCyI:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this._selected=[],t&&(this._selected=t),this.update()}update(){this.hasSelection=this._selected.length>0,this.hasSingleSelection=1===this._selected.length,this.hasMultiSelection=this._selected.length>1}set selected(t){this._selected=t,this.update()}get selected(){return this._selected}add(t){this._selected.push(t),this.update()}first(){return this.hasSelection?this._selected[0]:null}}},vDHD:function(t,e,n){var a=n("aT2Y");t.exports=function(){this.__data__=new a,this.size=0}},vIot:function(t,e){t.exports=function(t){return t!=t}},vJUC:function(t,e){t.exports=function(t,e){for(var n=-1,a=e.length,r=t.length;++n<a;)t[r+n]=e[n];return t}},vkgz:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("KqfI"),i=n("n6bG");function s(t,e,n){return function(a){return a.lift(new o(t,e,n))}}class o{constructor(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}call(t,e){return e.subscribe(new u(t,this.nextOrObserver,this.error,this.complete))}}class u extends a.a{constructor(t,e,n,a){super(t),this._tapNext=r.a,this._tapError=r.a,this._tapComplete=r.a,this._tapError=n||r.a,this._tapComplete=a||r.a,Object(i.a)(e)?(this._context=this,this._tapNext=e):e&&(this._context=e,this._tapNext=e.next||r.a,this._tapError=e.error||r.a,this._tapComplete=e.complete||r.a)}_next(t){try{this._tapNext.call(this._context,t)}catch(e){return void this.destination.error(e)}this.destination.next(t)}_error(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)}_complete(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()}}},"w/8D":function(t,e,n){var a=n("KFwg"),r=function(){try{var t=a(Object,"defineProperty");return t({},"",{}),t}catch(e){}}();t.exports=r},w4fU:function(t,e,n){var a=n("pMcL"),r=n("XhiP"),i=n("JEWA"),s=n("ezUo"),o=n("s4/e"),u=n("cRL0"),l=a?a.prototype:void 0,d=l?l.valueOf:void 0;t.exports=function(t,e,n,a,l,c,f){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!c(new r(t),new r(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=o;case"[object Set]":if(h||(h=u),t.size!=e.size&&!(1&a))return!1;var g=f.get(t);if(g)return g==e;a|=2,f.set(t,e);var p=s(h(t),h(e),a,l,c,f);return f.delete(t),p;case"[object Symbol]":if(d)return d.call(t)==d.call(e)}return!1}},w9WL:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("XNiG"),i=n("xgIS"),s=n("2Vo4"),o=n("l7GE"),u=n("ZUHj");function l(t){return e=>e.lift(new d(t))}class d{constructor(t){this.notifier=t}call(t,e){const n=new c(t),a=Object(u.a)(n,this.notifier);return a&&!n.seenValue?(n.add(a),e.subscribe(n)):n}}class c extends o.a{constructor(t){super(t),this.seenValue=!1}notifyNext(t,e,n,a,r){this.seenValue=!0,this.complete()}notifyComplete(){}}var f=n("mrSG");n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return pt})),n.d(e,"c",(function(){return tt})),n.d(e,"d",(function(){return ht})),n.d(e,"e",(function(){return D})),n.d(e,"f",(function(){return lt})),n.d(e,"g",(function(){return b})),n.d(e,"h",(function(){return ut})),n.d(e,"i",(function(){return et})),n.d(e,"j",(function(){return dt})),n.d(e,"k",(function(){return gt})),n.d(e,"l",(function(){return mt})),n.d(e,"m",(function(){return xt})),n.d(e,"n",(function(){return ot})),n.d(e,"o",(function(){return q})),n.d(e,"p",(function(){return M})),n.d(e,"q",(function(){return P})),n.d(e,"r",(function(){return g})),n.d(e,"s",(function(){return y})),n.d(e,"t",(function(){return _})),n.d(e,"u",(function(){return _t})),n.d(e,"v",(function(){return x})),n.d(e,"w",(function(){return ct})),n.d(e,"x",(function(){return v})),n.d(e,"y",(function(){return h})),n.d(e,"z",(function(){return T})),n.d(e,"A",(function(){return it})),n.d(e,"B",(function(){return m})),n.d(e,"C",(function(){return w}));class h{constructor(t){this.document=t,this.width=this.getWidth()}getWidth(){const t=this.document.createElement("div");t.style.visibility="hidden",t.style.width="100px",t.style.msOverflowStyle="scrollbar",this.document.body.appendChild(t);const e=t.offsetWidth;t.style.overflow="scroll";const n=this.document.createElement("div");n.style.width="100%",t.appendChild(n);const a=n.offsetWidth;return t.parentNode.removeChild(t),e-a}}class g{getDimensions(t){return t.getBoundingClientRect()}}class p{constructor(){this.columnInputChanges=new r.a}get columnInputChanges$(){return this.columnInputChanges.asObservable()}onInputChange(){this.columnInputChanges.next()}}class b{constructor(t){this.template=t}}class m{constructor(t,e){this.element=t,this.zone=e,this.isVisible=!1,this.visible=new a.EventEmitter}ngOnInit(){this.runCheck()}ngOnDestroy(){clearTimeout(this.timeout)}onVisibilityChange(){this.zone.run(()=>{this.isVisible=!0,this.visible.emit(!0)})}runCheck(){const t=()=>{const{offsetHeight:e,offsetWidth:n}=this.element.nativeElement;e&&n?(clearTimeout(this.timeout),this.onVisibilityChange()):(clearTimeout(this.timeout),this.zone.runOutsideAngular(()=>{this.timeout=setTimeout(()=>t(),50)}))};this.timeout=setTimeout(()=>t())}}class y{constructor(t){this.dragX=!0,this.dragY=!0,this.dragStart=new a.EventEmitter,this.dragging=new a.EventEmitter,this.dragEnd=new a.EventEmitter,this.isDragging=!1,this.element=t.nativeElement}ngOnChanges(t){t.dragEventTarget&&t.dragEventTarget.currentValue&&this.dragModel.dragging&&this.onMousedown(t.dragEventTarget.currentValue)}ngOnDestroy(){this._destroySubscription()}onMouseup(t){this.isDragging&&(this.isDragging=!1,this.element.classList.remove("dragging"),this.subscription&&(this._destroySubscription(),this.dragEnd.emit({event:t,element:this.element,model:this.dragModel})))}onMousedown(t){if(t.target.classList.contains("draggable")&&(this.dragX||this.dragY)){t.preventDefault(),this.isDragging=!0;const e={x:t.clientX,y:t.clientY},n=Object(i.a)(document,"mouseup");this.subscription=n.subscribe(t=>this.onMouseup(t));const a=Object(i.a)(document,"mousemove").pipe(l(n)).subscribe(t=>this.move(t,e));this.subscription.add(a),this.dragStart.emit({event:t,element:this.element,model:this.dragModel})}}move(t,e){if(!this.isDragging)return;const n=t.clientY-e.y;this.dragX&&(this.element.style.left=t.clientX-e.x+"px"),this.dragY&&(this.element.style.top=n+"px"),this.element.classList.add("dragging"),this.dragging.emit({event:t,element:this.element,model:this.dragModel})}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}"undefined"!=typeof window&&window||global,"undefined"!=typeof window&&window||global,"undefined"!=typeof window&&window||global;class v{constructor(t,e){this.renderer=e,this.resizeEnabled=!0,this.resize=new a.EventEmitter,this.resizing=!1,this.element=t.nativeElement}ngAfterViewInit(){const t=this.renderer;this.resizeHandle=t.createElement("span"),t.addClass(this.resizeHandle,this.resizeEnabled?"resize-handle":"resize-handle--not-resizable"),t.appendChild(this.element,this.resizeHandle)}ngOnDestroy(){this._destroySubscription(),this.renderer.destroyNode?this.renderer.destroyNode(this.resizeHandle):this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle),this.resizeHandle)}onMouseup(){this.resizing=!1,this.subscription&&!this.subscription.closed&&(this._destroySubscription(),this.resize.emit(this.element.clientWidth))}onMousedown(t){const e=t.target.classList.contains("resize-handle"),n=this.element.clientWidth,a=t.screenX;if(e){t.stopPropagation(),this.resizing=!0;const e=Object(i.a)(document,"mouseup");this.subscription=e.subscribe(t=>this.onMouseup());const r=Object(i.a)(document,"mousemove").pipe(l(e)).subscribe(t=>this.move(t,n,a));this.subscription.add(r)}}move(t,e,n){const a=e+(t.screenX-n);(!this.minWidth||a>=this.minWidth)&&(!this.maxWidth||a<=this.maxWidth)&&(this.element.style.width=a+"px")}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}class x{constructor(t,e){this.document=e,this.reorder=new a.EventEmitter,this.targetChanged=new a.EventEmitter,this.differ=t.find({}).create()}ngAfterContentInit(){this.updateSubscriptions(),this.draggables.changes.subscribe(this.updateSubscriptions.bind(this))}ngOnDestroy(){this.draggables.forEach(t=>{t.dragStart.unsubscribe(),t.dragging.unsubscribe(),t.dragEnd.unsubscribe()})}updateSubscriptions(){const t=this.differ.diff(this.createMapDiffs());if(t){const e=({currentValue:t,previousValue:e})=>{n({previousValue:e}),t&&(t.dragStart.subscribe(this.onDragStart.bind(this)),t.dragging.subscribe(this.onDragging.bind(this)),t.dragEnd.subscribe(this.onDragEnd.bind(this)))},n=({previousValue:t})=>{t&&(t.dragStart.unsubscribe(),t.dragging.unsubscribe(),t.dragEnd.unsubscribe())};t.forEachAddedItem(e),t.forEachRemovedItem(n)}}onDragStart(){this.positions={};let t=0;for(const e of this.draggables.toArray()){const n=e.element,a=parseInt(n.offsetLeft.toString(),0);this.positions[e.dragModel.prop]={left:a,right:a+parseInt(n.offsetWidth.toString(),0),index:t++,element:n}}}onDragging({model:t,event:e}){const n=this.positions[t.prop],a=this.isTarget(t,e);a?this.lastDraggingIndex!==a.i&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,newIndex:a.i,initialIndex:n.index}),this.lastDraggingIndex=a.i):this.lastDraggingIndex!==n.index&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,initialIndex:n.index}),this.lastDraggingIndex=n.index)}onDragEnd({element:t,model:e,event:n}){const a=this.positions[e.prop],r=this.isTarget(e,n);r&&this.reorder.emit({prevIndex:a.index,newIndex:r.i,model:e}),this.lastDraggingIndex=void 0,t.style.left="auto"}isTarget(t,e){let n=0;const a=this.document.elementsFromPoint(e.x||e.clientX,e.y||e.clientY);for(const r in this.positions){const e=this.positions[r];if(t.prop!==r&&a.find(t=>t===e.element))return{pos:e,i:n};n++}}createMapDiffs(){return this.draggables.toArray().reduce((t,e)=>(t[e.dragModel.$$id]=e,t),{})}}class _{constructor(){this.pressEnabled=!0,this.duration=500,this.longPressStart=new a.EventEmitter,this.longPressing=new a.EventEmitter,this.longPressEnd=new a.EventEmitter,this.mouseX=0,this.mouseY=0}get press(){return this.pressing}get isLongPress(){return this.isLongPressing}onMouseDown(t){if(1!==t.which||!this.pressEnabled)return;if(t.target.classList.contains("resize-handle"))return;this.mouseX=t.clientX,this.mouseY=t.clientY,this.pressing=!0,this.isLongPressing=!1;const e=Object(i.a)(document,"mouseup");this.subscription=e.subscribe(t=>this.onMouseup()),this.timeout=setTimeout(()=>{this.isLongPressing=!0,this.longPressStart.emit({event:t,model:this.pressModel}),this.subscription.add(Object(i.a)(document,"mousemove").pipe(l(e)).subscribe(t=>this.onMouseMove(t))),this.loop(t)},this.duration),this.loop(t)}onMouseMove(t){if(this.pressing&&!this.isLongPressing){const e=Math.abs(t.clientX-this.mouseX)>10,n=Math.abs(t.clientY-this.mouseY)>10;(e||n)&&this.endPress()}}loop(t){this.isLongPressing&&(this.timeout=setTimeout(()=>{this.longPressing.emit({event:t,model:this.pressModel}),this.loop(t)},50))}endPress(){clearTimeout(this.timeout),this.isLongPressing=!1,this.pressing=!1,this._destroySubscription(),this.longPressEnd.emit({model:this.pressModel})}onMouseup(){this.endPress()}ngOnDestroy(){this._destroySubscription()}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}class T{constructor(t,e,n){this.ngZone=t,this.renderer=n,this.scrollbarV=!1,this.scrollbarH=!1,this.scroll=new a.EventEmitter,this.scrollYPos=0,this.scrollXPos=0,this.prevScrollYPos=0,this.prevScrollXPos=0,this._scrollEventListener=null,this.element=e.nativeElement}ngOnInit(){if(this.scrollbarV||this.scrollbarH){const t=this.renderer;this.parentElement=t.parentNode(t.parentNode(this.element)),this._scrollEventListener=this.onScrolled.bind(this),this.parentElement.addEventListener("scroll",this._scrollEventListener)}}ngOnDestroy(){this._scrollEventListener&&(this.parentElement.removeEventListener("scroll",this._scrollEventListener),this._scrollEventListener=null)}setOffset(t){this.parentElement&&(this.parentElement.scrollTop=t)}onScrolled(t){const e=t.currentTarget;requestAnimationFrame(()=>{this.scrollYPos=e.scrollTop,this.scrollXPos=e.scrollLeft,this.updateOffset()})}updateOffset(){let t;this.scrollYPos<this.prevScrollYPos?t="down":this.scrollYPos>this.prevScrollYPos&&(t="up"),this.scroll.emit({direction:t,scrollYPos:this.scrollYPos,scrollXPos:this.scrollXPos}),this.prevScrollYPos=this.scrollYPos,this.prevScrollXPos=this.scrollXPos}}function O(){return""}function w(t){return null==t?O:"number"==typeof t?S:-1!==t.indexOf(".")?N:I}function S(t,e){if(null==t)return"";if(!t||null==e)return t;const n=t[e];return null==n?"":n}function I(t,e){if(null==t)return"";if(!t||!e)return t;const n=t[e];return null==n?"":n}function N(t,e){if(null==t)return"";if(!t||!e)return t;let n=t[e];if(void 0!==n)return n;n=t;const a=e.split(".");if(a.length)for(let r=0;r<a.length;r++)if(n=n[a[r]],null==n)return"";return n}function C(t){return t&&(e=>w(t)(e,t))}function R(t,e,n){if(e&&n){const a={},r=t.length;let i=null;a[0]=new A;const s=t.reduce((t,e)=>{const a=n(e);return-1===t.indexOf(a)&&t.push(a),t},[]);for(let e=0;e<r;e++)a[n(t[e])]=new A(t[e]);for(let u=0;u<r;u++){i=a[n(t[u])];let r=0;const o=e(i.row);o&&s.indexOf(o)>-1&&(r=o),i.parent=a[r],i.row.level=i.parent.row.level+1,i.parent.children.push(i)}let o=[];return a[0].flatten((function(){o=[...o,this.row]}),!0),o}return t}class A{constructor(t=null){t||(t={level:-1,treeStatus:"expanded"}),this.row=t,this.parent=null,this.children=[]}flatten(t,e){if("expanded"===this.row.treeStatus)for(let n=0,a=this.children.length;n<a;n++){const a=this.children[n];t.apply(a,Array.prototype.slice.call(arguments,2)),e&&a.flatten.apply(a,arguments)}}}function k(t){return(t=(t=(t=t.replace(/[^a-zA-Z0-9 ]/g," ")).replace(/([a-z](?=[A-Z]))/g,"$1 ")).replace(/([^a-zA-Z0-9 ])|^[0-9]+/g,"").trim().toLowerCase()).replace(/([ 0-9]+)([a-zA-Z])/g,(function(t,e,n){return e.trim()+n.toUpperCase()}))}function E(t){if(!t)return;let e=!1;for(const n of t)n.$$id||(n.$$id=("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)),L(n.prop)&&n.name&&(n.prop=k(n.name)),n.$$valueGetter||(n.$$valueGetter=w(n.prop)),!L(n.prop)&&L(n.name)&&(n.name=String(n.prop).replace(/([A-Z])/g,t=>" "+t).replace(/^./,t=>t.toUpperCase())),L(n.prop)&&L(n.name)&&(n.name=""),n.hasOwnProperty("resizeable")||(n.resizeable=!0),n.hasOwnProperty("sortable")||(n.sortable=!0),n.hasOwnProperty("draggable")||(n.draggable=!0),n.hasOwnProperty("canAutoResize")||(n.canAutoResize=!0),n.hasOwnProperty("width")||(n.width=150),n.hasOwnProperty("isTreeColumn")&&n.isTreeColumn&&!e?e=!0:n.isTreeColumn=!1}function L(t){return null==t}class D{constructor(t){this.template=t}}class P{constructor(t){this.template=t}}class M{constructor(){this.rowHeight=0,this.toggle=new a.EventEmitter}get template(){return this._templateInput||this._templateQuery}toggleExpandRow(t){this.toggle.emit({type:"row",value:t})}expandAllRows(){this.toggle.emit({type:"all",value:!0})}collapseAllRows(){this.toggle.emit({type:"all",value:!1})}}class q{get template(){return this._templateInput||this._templateQuery}}function j(t){const e={left:[],center:[],right:[]};if(t)for(const n of t)n.frozenLeft?e.left.push(n):n.frozenRight?e.right.push(n):e.center.push(n);return e}function F(t,e){return{left:G(t.left),center:G(t.center),right:G(t.right),total:Math.floor(G(e))}}function G(t,e){let n=0;if(t)for(const a of t)n+=parseFloat(e&&a[e]?a[e]:a.width);return n}function V(t){const e=[],n=j(t);return e.push({type:"left",columns:n.left}),e.push({type:"center",columns:n.center}),e.push({type:"right",columns:n.right}),e}class z{constructor(){this.treeArray=[]}clearCache(){this.treeArray=[]}initCache(t){const{rows:e,rowHeight:n,detailRowHeight:a,externalVirtual:r,rowCount:i,rowIndexes:s,rowExpansions:o}=t,u="function"==typeof n,l="function"==typeof a;if(!u&&isNaN(n))throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n        valid number or function value: (${n}) when 'scrollbarV' is enabled.`);if(!l&&isNaN(a))throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n        valid number or function value: (${a}) when 'scrollbarV' is enabled.`);const d=r?i:e.length;this.treeArray=new Array(d);for(let c=0;c<d;++c)this.treeArray[c]=0;for(let c=0;c<d;++c){const t=e[c];let r=n;u&&(r=n(t));const i=o.has(t);t&&i&&(r+=l?a(t,s.get(t)):a),this.update(c,r)}}getRowIndex(t){return 0===t?0:this.calcRowIndex(t)}update(t,e){if(!this.treeArray.length)throw new Error(`Update at index ${t} with value ${e} failed:\n        Row Height cache not initialized.`);const n=this.treeArray.length;for(t|=0;t<n;)this.treeArray[t]+=e,t|=t+1}query(t){if(!this.treeArray.length)throw new Error(`query at index ${t} failed: Fenwick tree array not initialized.`);let e=0;for(t|=0;t>=0;)e+=this.treeArray[t],t=(t&t+1)-1;return e}queryBetween(t,e){return this.query(e)-this.query(t-1)}calcRowIndex(t){if(!this.treeArray.length)return 0;let e=-1;const n=this.treeArray.length;for(let a=Math.pow(2,n.toString(2).length-1);0!==a;a>>=1){const r=e+a;r<n&&t>=this.treeArray[r]&&(t-=this.treeArray[r],e=r)}return e+1}}const B={},Y="undefined"!=typeof document?document.createElement("div").style:void 0,H=function(){const t="undefined"!=typeof window?window.getComputedStyle(document.documentElement,""):void 0,e=void 0!==t?Array.prototype.slice.call(t).join("").match(/-(moz|webkit|ms)-/):null,n=null!==e?e[1]:void 0,a=void 0!==n?"WebKit|Moz|MS|O".match(new RegExp("("+n+")","i"))[1]:void 0;return a?{dom:a,lowercase:n,css:`-${n}-`,js:n[0].toUpperCase()+n.substr(1)}:void 0}();function U(t){const e=k(t);return B[e]||(void 0!==H&&void 0!==Y[H.css+t]?B[e]=H.css+t:void 0!==Y[t]&&(B[e]=t)),B[e]}const W="undefined"!=typeof window?U("transform"):void 0,K="undefined"!=typeof window?U("backfaceVisibility"):void 0,$="undefined"!=typeof window?!!U("transform"):void 0,J="undefined"!=typeof window?!!U("perspective"):void 0,Z="undefined"!=typeof window?window.navigator.userAgent:"Chrome",Q=/Safari\//.test(Z)&&!/Chrome\//.test(Z);function X(t,e,n){void 0!==W&&$?!Q&&J?(t[W]=`translate3d(${e}px, ${n}px, 0)`,t[K]="hidden"):t[k(W)]=`translate(${e}px, ${n}px)`:(t.top=n+"px",t.left=e+"px")}class tt{constructor(t){this.cd=t,this.selected=[],this.scroll=new a.EventEmitter,this.page=new a.EventEmitter,this.activate=new a.EventEmitter,this.select=new a.EventEmitter,this.detailToggle=new a.EventEmitter,this.rowContextmenu=new a.EventEmitter(!1),this.treeAction=new a.EventEmitter,this.rowHeightsCache=new z,this.temp=[],this.offsetY=0,this.indexes={},this.rowIndexes=new Map,this.rowExpansions=[],this.getDetailRowHeight=(t,e)=>{if(!this.rowDetail)return 0;const n=this.rowDetail.rowHeight;return"function"==typeof n?n(t,e):n},this.rowTrackingFn=(t,e)=>{const n=this.getRowIndex(e);return this.trackByProp?e[this.trackByProp]:n}}set pageSize(t){this._pageSize=t,this.recalcLayout()}get pageSize(){return this._pageSize}set rows(t){this._rows=t,this.recalcLayout()}get rows(){return this._rows}set columns(t){this._columns=t;const e=j(t);this.columnGroupWidths=F(e,t)}get columns(){return this._columns}set offset(t){this._offset=t,(!this.scrollbarV||this.scrollbarV&&!this.virtualization)&&this.recalcLayout()}get offset(){return this._offset}set rowCount(t){this._rowCount=t,this.recalcLayout()}get rowCount(){return this._rowCount}get bodyWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}set bodyHeight(t){this._bodyHeight=this.scrollbarV?t+"px":"auto",this.recalcLayout()}get bodyHeight(){return this._bodyHeight}get selectEnabled(){return!!this.selectionType}get scrollHeight(){if(this.scrollbarV&&this.virtualization&&this.rowCount)return this.rowHeightsCache.query(this.rowCount-1)}ngOnInit(){this.rowDetail&&(this.listener=this.rowDetail.toggle.subscribe(({type:t,value:e})=>{"row"===t&&this.toggleRowExpansion(e),"all"===t&&this.toggleAllRows(e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()})),this.groupHeader&&(this.listener=this.groupHeader.toggle.subscribe(({type:t,value:e})=>{"group"===t&&this.toggleRowExpansion(e),"all"===t&&this.toggleAllRows(e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()}))}ngOnDestroy(){(this.rowDetail||this.groupHeader)&&this.listener.unsubscribe()}updateOffsetY(t){this.scroller&&(this.scrollbarV&&this.virtualization&&t?t=this.rowHeightsCache.query(this.pageSize*t-1):this.scrollbarV&&!this.virtualization&&(t=0),this.scroller.setOffset(t||0))}onBodyScroll(t){const e=t.scrollYPos,n=t.scrollXPos;this.offsetY===e&&this.offsetX===n||this.scroll.emit({offsetY:e,offsetX:n}),this.offsetY=e,this.offsetX=n,this.updateIndexes(),this.updatePage(t.direction),this.updateRows()}updatePage(t){let e=this.indexes.first/this.pageSize;"up"===t?e=Math.ceil(e):"down"===t&&(e=Math.floor(e)),void 0===t||isNaN(e)||this.page.emit({offset:e})}updateRows(){const{first:t,last:e}=this.indexes;let n=t,a=0;const r=[];if(this.rowIndexes.clear(),this.groupedRows){let t=3;for(1===this.groupedRows.length&&(t=this.groupedRows[0].value.length);n<e&&n<this.groupedRows.length;)r[a]=this.groupedRows[n],a++,n++}else for(;n<e&&n<this.rowCount;){const t=this.rows[n];t&&(this.rowIndexes.set(t,n),r[a]=t),a++,n++}this.temp=r}getRowHeight(t){return"function"==typeof this.rowHeight?this.rowHeight(t):this.rowHeight}getGroupHeight(t){let e=0;if(t.value)for(let n=0;n<t.value.length;n++)e+=this.getRowAndDetailHeight(t.value[n]);return e}getRowAndDetailHeight(t){let e=this.getRowHeight(t);return this.getRowExpanded(t)&&(e+=this.getDetailRowHeight(t)),e}getRowsStyles(t){const e={};if(this.groupedRows&&(e.width=this.columnGroupWidths.total),this.scrollbarV&&this.virtualization){let n=0;if(this.groupedRows){const e=t[t.length-1];n=e?this.getRowIndex(e):0}else n=this.getRowIndex(t);X(e,0,this.rowHeightsCache.query(n-1))}return e}getBottomSummaryRowStyles(){if(!this.scrollbarV||!this.rows||!this.rows.length)return null;const t={position:"absolute"};return X(t,0,this.rowHeightsCache.query(this.rows.length-1)),t}hideIndicator(){setTimeout(()=>this.loadingIndicator=!1,500)}updateIndexes(){let t=0,e=0;if(this.scrollbarV)if(this.virtualization){const n=parseInt(this.bodyHeight,0);t=this.rowHeightsCache.getRowIndex(this.offsetY),e=this.rowHeightsCache.getRowIndex(n+this.offsetY)+1}else t=0,e=this.rowCount;else this.externalPaging||(t=Math.max(this.offset*this.pageSize,0)),e=Math.min(t+this.pageSize,this.rowCount);this.indexes={first:t,last:e}}refreshRowHeightCache(){if(this.scrollbarV&&(!this.scrollbarV||this.virtualization)&&(this.rowHeightsCache.clearCache(),this.rows&&this.rows.length)){const t=new Set;for(const e of this.rows)this.getRowExpanded(e)&&t.add(e);this.rowHeightsCache.initCache({rows:this.rows,rowHeight:this.rowHeight,detailRowHeight:this.getDetailRowHeight,externalVirtual:this.scrollbarV&&this.externalPaging,rowCount:this.rowCount,rowIndexes:this.rowIndexes,rowExpansions:t})}}getAdjustedViewPortIndex(){const t=this.indexes.first;return this.scrollbarV&&this.virtualization&&this.rowHeightsCache.query(t-1)<=this.offsetY?t-1:t}toggleRowExpansion(t){const e=this.getAdjustedViewPortIndex(),n=this.getRowExpandedIdx(t,this.rowExpansions),a=n>-1;if(this.scrollbarV&&this.virtualization){const e=this.getDetailRowHeight(t)*(a?-1:1),n=this.getRowIndex(t);this.rowHeightsCache.update(n,e)}a?this.rowExpansions.splice(n,1):this.rowExpansions.push(t),this.detailToggle.emit({rows:[t],currentIndex:e})}toggleAllRows(t){this.rowExpansions=[];const e=this.getAdjustedViewPortIndex();if(t)for(const n of this.rows)this.rowExpansions.push(n);this.scrollbarV&&this.recalcLayout(),this.detailToggle.emit({rows:this.rows,currentIndex:e})}recalcLayout(){this.refreshRowHeightCache(),this.updateIndexes(),this.updateRows()}columnTrackingFn(t,e){return e.$$id}stylesByGroup(t){const e=this.columnGroupWidths,n=this.offsetX,a={width:e[t]+"px"};if("left"===t)X(a,n,0);else if("right"===t){const t=parseInt(this.innerWidth+"",0);X(a,-1*(e.total-t-n),0)}return a}getRowExpanded(t){if(0===this.rowExpansions.length&&this.groupExpansionDefault)for(const e of this.groupedRows)this.rowExpansions.push(e);return this.getRowExpandedIdx(t,this.rowExpansions)>-1}getRowExpandedIdx(t,e){if(!e||!e.length)return-1;const n=this.rowIdentity(t);return e.findIndex(t=>this.rowIdentity(t)===n)}getRowIndex(t){return this.rowIndexes.get(t)||0}onTreeAction(t){this.treeAction.emit({row:t})}}class et{constructor(t){this.cd=t,this.sort=new a.EventEmitter,this.reorder=new a.EventEmitter,this.resize=new a.EventEmitter,this.select=new a.EventEmitter,this.columnContextmenu=new a.EventEmitter(!1),this._columnGroupWidths={total:100},this._styleByGroup={left:{},center:{},right:{}},this.destroyed=!1}set innerWidth(t){this._innerWidth=t,setTimeout(()=>{if(this._columns){const t=j(this._columns);this._columnGroupWidths=F(t,this._columns),this.setStylesByGroup()}})}get innerWidth(){return this._innerWidth}set headerHeight(t){this._headerHeight="auto"!==t?t+"px":t}get headerHeight(){return this._headerHeight}set columns(t){this._columns=t;const e=j(t);this._columnsByPin=V(t),setTimeout(()=>{this._columnGroupWidths=F(e,t),this.setStylesByGroup()})}get columns(){return this._columns}set offsetX(t){this._offsetX=t,this.setStylesByGroup()}get offsetX(){return this._offsetX}ngOnDestroy(){this.destroyed=!0}onLongPressStart({event:t,model:e}){e.dragging=!0,this.dragEventTarget=t}onLongPressEnd({event:t,model:e}){this.dragEventTarget=t,setTimeout(()=>{const t=this._columns.find(t=>t.$$id===e.$$id);t&&(t.dragging=!1)},5)}get headerWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}trackByGroups(t,e){return e.type}columnTrackingFn(t,e){return e.$$id}onColumnResized(t,e){t<=e.minWidth?t=e.minWidth:t>=e.maxWidth&&(t=e.maxWidth),this.resize.emit({column:e,prevValue:e.width,newValue:t})}onColumnReordered({prevIndex:t,newIndex:e,model:n}){const a=this.getColumn(e);a.isTarget=!1,a.targetMarkerContext=void 0,this.reorder.emit({column:n,prevValue:t,newValue:e})}onTargetChanged({prevIndex:t,newIndex:e,initialIndex:n}){if(t||0===t){const e=this.getColumn(t);e.isTarget=!1,e.targetMarkerContext=void 0}if(e||0===e){const t=this.getColumn(e);t.isTarget=!0,n!==e&&(t.targetMarkerContext={class:"targetMarker ".concat(n>e?"dragFromRight":"dragFromLeft")})}}getColumn(t){const e=this._columnsByPin[0].columns.length;if(t<e)return this._columnsByPin[0].columns[t];const n=this._columnsByPin[1].columns.length;return t<e+n?this._columnsByPin[1].columns[t-e]:this._columnsByPin[2].columns[t-e-n]}onSort({column:t,prevValue:e,newValue:n}){if(t.dragging)return;const a=this.calcNewSorts(t,e,n);this.sort.emit({sorts:a,column:t,prevValue:e,newValue:n})}calcNewSorts(t,e,n){let a=0;this.sorts||(this.sorts=[]);const r=this.sorts.map((e,n)=>((e=Object.assign({},e)).prop===t.prop&&(a=n),e));return void 0===n?r.splice(a,1):e?r[a].dir=n:("single"===this.sortType&&r.splice(0,this.sorts.length),r.push({dir:n,prop:t.prop})),r}setStylesByGroup(){this._styleByGroup.left=this.calcStylesByGroup("left"),this._styleByGroup.center=this.calcStylesByGroup("center"),this._styleByGroup.right=this.calcStylesByGroup("right"),this.destroyed||this.cd.detectChanges()}calcStylesByGroup(t){const e=this._columnGroupWidths,n={width:e[t]+"px"};return"center"===t?X(n,-1*this.offsetX,0):"right"===t&&X(n,-1*(e.total-this.innerWidth),0),n}}function nt(t,e,n){let a,r,i;n=n||{};let s=null,o=0;function u(){o=!1===n.leading?0:+new Date,s=null,i=t.apply(a,r)}return function(){const l=+new Date;o||!1!==n.leading||(o=l);const d=e-(l-o);return a=this,r=arguments,d<=0?(clearTimeout(s),s=null,o=l,i=t.apply(a,r)):s||!1===n.trailing||(s=setTimeout(u,d)),i}}function at(t,e){for(const n of e){const e=t.indexOf(n);t.splice(e,1)}}function rt(t,e=300){let n=0;for(const a of t)n+=a.width||e;return n}const it={asc:"asc",desc:"desc"};function st(t,e){if(null==t&&(t=0),null==e&&(e=0),t instanceof Date&&e instanceof Date){if(t<e)return-1;if(t>e)return 1}else if(isNaN(parseFloat(t))||!isFinite(t)||isNaN(parseFloat(e))||!isFinite(e)){if(t=String(t),e=String(e),t.toLowerCase()<e.toLowerCase())return-1;if(t.toLowerCase()>e.toLowerCase())return 1}else{if(parseFloat(t)<parseFloat(e))return-1;if(parseFloat(t)>parseFloat(e))return 1}return 0}let ot=(()=>{class t{constructor(t,e,n,r,i,o,u){this.scrollbarHelper=t,this.dimensionsHelper=e,this.cd=n,this.columnChangesService=o,this.configuration=u,this.selected=[],this.scrollbarV=!1,this.scrollbarH=!1,this.rowHeight=30,this.columnMode="standard",this.headerHeight=30,this.footerHeight=0,this.externalPaging=!1,this.externalSorting=!1,this.loadingIndicator=!1,this.reorderable=!0,this.swapColumns=!0,this.sortType="single",this.sorts=[],this.cssClasses={sortAscending:"datatable-icon-up",sortDescending:"datatable-icon-down",pagerLeftArrow:"datatable-icon-left",pagerRightArrow:"datatable-icon-right",pagerPrevious:"datatable-icon-prev",pagerNext:"datatable-icon-skip"},this.messages={emptyMessage:"No data to display",totalMessage:"total",selectedMessage:"selected"},this.groupExpansionDefault=!1,this.selectAllRowsOnPage=!1,this.virtualization=!0,this.summaryRow=!1,this.summaryHeight=30,this.summaryPosition="top",this.scroll=new a.EventEmitter,this.activate=new a.EventEmitter,this.select=new a.EventEmitter,this.sort=new a.EventEmitter,this.page=new a.EventEmitter,this.reorder=new a.EventEmitter,this.resize=new a.EventEmitter,this.tableContextmenu=new a.EventEmitter(!1),this.treeAction=new a.EventEmitter,this.rowCount=0,this._offsetX=new s.a(0),this._count=0,this._offset=0,this._subscriptions=[],this.rowIdentity=t=>this._groupRowsBy?t.key:t,this.element=r.nativeElement,this.rowDiffer=i.find({}).create(),this.configuration&&this.configuration.messages&&(this.messages=Object.assign({},this.configuration.messages))}set rows(t){this._rows=t,t&&(this._internalRows=[...t]),this.externalSorting||this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.recalculate(),this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)),this.cd.markForCheck()}get rows(){return this._rows}set groupRowsBy(t){t&&(this._groupRowsBy=t,this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)))}get groupRowsBy(){return this._groupRowsBy}set columns(t){t&&(this._internalColumns=[...t],E(this._internalColumns),this.recalculateColumns()),this._columns=t}get columns(){return this._columns}set limit(t){this._limit=t,this.recalculate()}get limit(){return this._limit}set count(t){this._count=t,this.recalculate()}get count(){return this._count}set offset(t){this._offset=t}get offset(){return Math.max(Math.min(this._offset,Math.ceil(this.rowCount/this.pageSize)-1),0)}get isFixedHeader(){const t=this.headerHeight;return"string"!=typeof t||"auto"!==t}get isFixedRow(){return"auto"!==this.rowHeight}get isVertScroll(){return this.scrollbarV}get isVirtualized(){return this.virtualization}get isHorScroll(){return this.scrollbarH}get isSelectable(){return void 0!==this.selectionType}get isCheckboxSelection(){return"checkbox"===this.selectionType}get isCellSelection(){return"cell"===this.selectionType}get isSingleSelection(){return"single"===this.selectionType}get isMultiSelection(){return"multi"===this.selectionType}get isMultiClickSelection(){return"multiClick"===this.selectionType}set columnTemplates(t){this._columnTemplates=t,this.translateColumns(t)}get columnTemplates(){return this._columnTemplates}get allRowsSelected(){let t=this.rows&&this.selected&&this.selected.length===this.rows.length;if(this.selectAllRowsOnPage){const e=this.bodyComponent.indexes;t=this.selected.length===e.last-e.first}return this.selected&&this.rows&&0!==this.rows.length&&t}ngOnInit(){this.recalculate()}ngAfterViewInit(){this.externalSorting||this.sortInternalRows(),"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{this.recalculate(),this.externalPaging&&this.scrollbarV&&this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:0})})}ngAfterContentInit(){this.columnTemplates.changes.subscribe(t=>this.translateColumns(t)),this.listenForColumnInputChanges()}translateColumns(t){if(t){const e=t.toArray();e.length&&(this._internalColumns=function(t){const e=[];for(const n of t){const t={},a=Object.getOwnPropertyNames(n);for(const e of a)t[e]=n[e];n.headerTemplate&&(t.headerTemplate=n.headerTemplate),n.cellTemplate&&(t.cellTemplate=n.cellTemplate),n.summaryFunc&&(t.summaryFunc=n.summaryFunc),n.summaryTemplate&&(t.summaryTemplate=n.summaryTemplate),e.push(t)}return e}(e),E(this._internalColumns),this.recalculateColumns(),this.sortInternalRows(),this.cd.markForCheck())}}groupArrayBy(t,e){const n=new Map;return t.forEach(t=>{const a=t[e];n.has(a)?n.get(a).push(t):n.set(a,[t])}),Array.from(n,t=>({key:t[0],value:t[1]}))}ngDoCheck(){this.rowDiffer.diff(this.rows)&&(this.externalSorting?this._internalRows=[...this.rows]:this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.recalculatePages(),this.cd.markForCheck())}recalculate(){this.recalculateDims(),this.recalculateColumns()}onWindowResize(){this.recalculate()}recalculateColumns(t=this._internalColumns,e=-1,n=this.scrollbarH){if(!t)return;let a=this._innerWidth;return this.scrollbarV&&(a-=this.scrollbarHelper.width),"force"===this.columnMode?function(t,e,n,a,r=300){const i=t.slice(n+1,t.length).filter(t=>!1!==t.canAutoResize);for(const c of i)c.$$oldWidth||(c.$$oldWidth=c.width);let s=0,o=!1,u=rt(t,r),l=e-u;const d=[];do{s=l/i.length,o=u>=e;for(const t of i){if(o&&a)t.width=t.$$oldWidth||t.width||r;else{const e=(t.width||r)+s;t.minWidth&&e<t.minWidth?(t.width=t.minWidth,d.push(t)):t.maxWidth&&e>t.maxWidth?(t.width=t.maxWidth,d.push(t)):t.width=e}t.width=Math.max(0,t.width)}u=rt(t),l=e-u,at(i,d)}while(l>1&&0!==i.length)}(t,a,e,n):"flex"===this.columnMode&&function(t,e){const n=function(t,e){let n=0;for(const a of t)n+=a.width;return n}(t),a=function(t){let e=0;for(const n of t)e+=n.flexGrow||0;return e}(t),r=j(t);n!==e&&function(t,e,n){for(const i in t)for(const a of t[i])a.canAutoResize?a.width=0:(e-=a.width,n-=a.flexGrow?a.flexGrow:0);const a={};let r=e;do{const e=r/n;r=0;for(const n in t)for(const i of t[n])if(i.canAutoResize&&!a[i.prop]){const t=i.width+i.flexGrow*e;void 0!==i.minWidth&&t<i.minWidth?(r+=t-i.minWidth,i.width=i.minWidth,a[i.prop]=!0):i.width=t}}while(0!==r)}(r,e,a)}(t,a),t}recalculateDims(){const t=this.dimensionsHelper.getDimensions(this.element);if(this._innerWidth=Math.floor(t.width),this.scrollbarV){let e=t.height;this.headerHeight&&(e-=this.headerHeight),this.footerHeight&&(e-=this.footerHeight),this.bodyHeight=e}this.recalculatePages()}recalculatePages(){this.pageSize=this.calcPageSize(),this.rowCount=this.calcRowCount()}onBodyPage({offset:t}){this.externalPaging&&!this.virtualization||(this.offset=t,this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}))}onBodyScroll(t){this._offsetX.next(t.offsetX),this.scroll.emit(t),this.cd.detectChanges()}onFooterPage(t){this.offset=t.page-1,this.bodyComponent.updateOffsetY(this.offset),this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}),this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected}))}calcPageSize(t=this.rows){if(this.scrollbarV&&this.virtualization){const t=Math.ceil(this.bodyHeight/this.rowHeight);return Math.max(t,0)}return void 0!==this.limit?this.limit:t?t.length:0}calcRowCount(t=this.rows){return this.externalPaging?this.count:t?this.groupedRows?this.groupedRows.length:null!=this.treeFromRelation&&null!=this.treeToRelation?this._internalRows.length:t.length:0}onColumnContextmenu({event:t,column:e}){this.tableContextmenu.emit({event:t,type:"header",content:e})}onRowContextmenu({event:t,row:e}){this.tableContextmenu.emit({event:t,type:"body",content:e})}onColumnResize({column:t,newValue:e}){if(void 0===t)return;let n;const a=this._internalColumns.map((a,r)=>((a=Object.assign({},a)).$$id===t.$$id&&(n=r,a.width=e,a.$$oldWidth=e),a));this.recalculateColumns(a,n),this._internalColumns=a,this.resize.emit({column:t,newValue:e})}onColumnReorder({column:t,newValue:e,prevValue:n}){const a=this._internalColumns.map(t=>Object.assign({},t));if(this.swapColumns){const r=a[e];a[e]=t,a[n]=r}else if(e>n){const t=a[n];for(let r=n;r<e;r++)a[r]=a[r+1];a[e]=t}else{const t=a[n];for(let r=n;r>e;r--)a[r]=a[r-1];a[e]=t}this._internalColumns=a,this.reorder.emit({column:t,newValue:e,prevValue:n})}onColumnSort(t){this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected})),this.sorts=t.sorts,!1===this.externalSorting&&this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.offset=0,this.bodyComponent.updateOffsetY(this.offset),this.sort.emit(t)}onHeaderSelect(t){if(this.selectAllRowsOnPage){const t=this.bodyComponent.indexes.first,e=this.bodyComponent.indexes.last,n=this.selected.length===e-t;this.selected=[],n||this.selected.push(...this._internalRows.slice(t,e))}else{const t=this.selected.length===this.rows.length;this.selected=[],t||this.selected.push(...this.rows)}this.select.emit({selected:this.selected})}onBodySelect(t){this.select.emit(t)}onTreeAction(t){const e=t.row,n=this._rows.findIndex(e=>e[this.treeToRelation]===t.row[this.treeToRelation]);this.treeAction.emit({row:e,rowIndex:n})}ngOnDestroy(){this._subscriptions.forEach(t=>t.unsubscribe())}listenForColumnInputChanges(){this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(()=>{this.columnTemplates&&this.columnTemplates.notifyOnChanges()}))}sortInternalRows(){this._internalRows=function(t,e,n){if(!t)return[];if(!n||!n.length||!e)return[...t];const a=new Map;t.forEach((t,e)=>a.set(t,e));const r=[...t],i=e.reduce((t,e)=>(e.comparator&&"function"==typeof e.comparator&&(t[e.prop]=e.comparator),t),{}),s=n.map(t=>{const e=t.prop;return{prop:e,dir:t.dir,valueGetter:w(e),compareFn:i[e]||st}});return r.sort((function(t,e){for(const n of s){const{prop:a,valueGetter:r}=n,i=r(t,a),s=r(e,a),o=n.dir!==it.desc?n.compareFn(i,s,t,e,n.dir):-n.compareFn(i,s,t,e,n.dir);if(0!==o)return o}return a.has(t)&&a.has(e)?a.get(t)<a.get(e)?-1:1:0}))}(this._internalRows,this._internalColumns,this.sorts)}}return Object(f.__decorate)([function(t,e,n){return{configurable:!0,enumerable:n.enumerable,get:function(){return Object.defineProperty(this,e,{configurable:!0,enumerable:n.enumerable,value:nt(n.value,5,void 0)}),this[e]}}},Object(f.__metadata)("design:type",Function),Object(f.__metadata)("design:paramtypes",[]),Object(f.__metadata)("design:returntype",void 0)],t.prototype,"onWindowResize",null),t})();class ut{constructor(t){this.cd=t,this.sort=new a.EventEmitter,this.select=new a.EventEmitter,this.columnContextmenu=new a.EventEmitter(!1),this.sortFn=this.onSort.bind(this),this.selectFn=this.select.emit.bind(this.select),this.cellContext={column:this.column,sortDir:this.sortDir,sortFn:this.sortFn,allRowsSelected:this.allRowsSelected,selectFn:this.selectFn}}set allRowsSelected(t){this._allRowsSelected=t,this.cellContext.allRowsSelected=t}get allRowsSelected(){return this._allRowsSelected}set column(t){this._column=t,this.cellContext.column=t,this.cd.markForCheck()}get column(){return this._column}set sorts(t){this._sorts=t,this.sortDir=this.calcSortDir(t),this.cellContext.sortDir=this.sortDir,this.sortClass=this.calcSortClass(this.sortDir),this.cd.markForCheck()}get sorts(){return this._sorts}get columnCssClasses(){let t="datatable-header-cell";if(this.column.sortable&&(t+=" sortable"),this.column.resizeable&&(t+=" resizeable"),this.column.headerClass)if("string"==typeof this.column.headerClass)t+=" "+this.column.headerClass;else if("function"==typeof this.column.headerClass){const e=this.column.headerClass({column:this.column});if("string"==typeof e)t+=e;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=" "+a)}}const e=this.sortDir;return e&&(t+=" sort-active sort-"+e),t}get name(){return void 0===this.column.headerTemplate?this.column.name:void 0}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get width(){return this.column.width}get isCheckboxable(){return this.column.checkboxable&&this.column.headerCheckboxable&&"checkbox"===this.selectionType}onContextmenu(t){this.columnContextmenu.emit({event:t,column:this.column})}calcSortDir(t){if(t&&this.column){const e=t.find(t=>t.prop===this.column.prop);if(e)return e.dir}}onSort(){if(!this.column.sortable)return;const t=(e=this.sortDir,"single"===this.sortType?e===it.asc?it.desc:it.asc:e?e===it.asc?it.desc:void 0:it.asc);var e;this.sort.emit({column:this.column,prevValue:this.sortDir,newValue:t})}calcSortClass(t){return t===it.asc?"sort-btn sort-asc "+this.sortAscendingIcon:t===it.desc?"sort-btn sort-desc "+this.sortDescendingIcon:"sort-btn"}}class lt{constructor(){this.selectedCount=0,this.page=new a.EventEmitter}get isVisible(){return this.rowCount/this.pageSize>1}get curPage(){return this.offset+1}}class dt{constructor(){this.change=new a.EventEmitter,this._count=0,this._page=1,this._size=0}set size(t){this._size=t,this.pages=this.calcPages()}get size(){return this._size}set count(t){this._count=t,this.pages=this.calcPages()}get count(){return this._count}set page(t){this._page=t,this.pages=this.calcPages()}get page(){return this._page}get totalPages(){const t=this.size<1?1:Math.ceil(this.count/this.size);return Math.max(t||0,1)}canPrevious(){return this.page>1}canNext(){return this.page<this.totalPages}prevPage(){this.selectPage(this.page-1)}nextPage(){this.selectPage(this.page+1)}selectPage(t){t>0&&t<=this.totalPages&&t!==this.page&&(this.page=t,this.change.emit({page:t}))}calcPages(t){const e=[];let n=1,a=this.totalPages;t=t||this.page,5<this.totalPages&&(n=t-Math.floor(2.5),a=t+Math.floor(2.5),n<1?(n=1,a=Math.min(n+5-1,this.totalPages)):a>this.totalPages&&(n=Math.max(this.totalPages-5+1,1),a=this.totalPages));for(let r=n;r<=a;r++)e.push({number:r,text:r});return e}}class ct{}const ft=function(){var t={up:38,down:40,return:13,escape:27,left:37,right:39};return t[t.up]="up",t[t.down]="down",t[t.return]="return",t[t.escape]="escape",t[t.left]="left",t[t.right]="right",t}();class ht{constructor(t,e,n,r){this.differs=t,this.scrollbarHelper=e,this.cd=n,this.treeStatus="collapsed",this.activate=new a.EventEmitter,this.treeAction=new a.EventEmitter,this._groupStyles={left:{},center:{},right:{}},this._element=r.nativeElement,this._rowDiffer=t.find({}).create()}set columns(t){this._columns=t,this.recalculateColumns(t),this.buildStylesByGroup()}get columns(){return this._columns}set innerWidth(t){if(this._columns){const t=j(this._columns);this._columnGroupWidths=F(t,this._columns)}this._innerWidth=t,this.recalculateColumns(),this.buildStylesByGroup()}get innerWidth(){return this._innerWidth}set offsetX(t){this._offsetX=t,this.buildStylesByGroup()}get offsetX(){return this._offsetX}get cssClass(){let t="datatable-body-row";if(this.isSelected&&(t+=" active"),this.rowIndex%2!=0&&(t+=" datatable-row-odd"),this.rowIndex%2==0&&(t+=" datatable-row-even"),this.rowClass){const e=this.rowClass(this.row);if("string"==typeof e)t+=" "+e;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=" "+a)}}return t}get columnsTotalWidths(){return this._columnGroupWidths.total}ngDoCheck(){this._rowDiffer.diff(this.row)&&this.cd.markForCheck()}trackByGroups(t,e){return e.type}columnTrackingFn(t,e){return e.$$id}buildStylesByGroup(){this._groupStyles.left=this.calcStylesByGroup("left"),this._groupStyles.center=this.calcStylesByGroup("center"),this._groupStyles.right=this.calcStylesByGroup("right"),this.cd.markForCheck()}calcStylesByGroup(t){const e=this._columnGroupWidths,n=this.offsetX,a={width:e[t]+"px"};if("left"===t)X(a,n,0);else if("right"===t){const t=parseInt(this.innerWidth+"",0);X(a,-1*(e.total-t-n+this.scrollbarHelper.width),0)}return a}onActivate(t,e){t.cellIndex=e,t.rowElement=this._element,this.activate.emit(t)}onKeyDown(t){const e=t.keyCode;(e===ft.return||e===ft.down||e===ft.up||e===ft.left||e===ft.right)&&t.target===this._element&&(t.preventDefault(),t.stopPropagation(),this.activate.emit({type:"keydown",event:t,row:this.row,rowElement:this._element}))}onMouseenter(t){this.activate.emit({type:"mouseenter",event:t,row:this.row,rowElement:this._element})}recalculateColumns(t=this.columns){this._columns=t;const e=j(this._columns);this._columnsByPin=V(this._columns),this._columnGroupWidths=F(e,this._columns)}onTreeAction(){this.treeAction.emit()}}class gt{constructor(t,e){this.cd=t,this.differs=e,this.rowContextmenu=new a.EventEmitter(!1),this.groupContext={group:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this.rowContext={row:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this._expanded=!1,this.rowDiffer=e.find({}).create()}set rowIndex(t){this._rowIndex=t,this.rowContext.rowIndex=t,this.groupContext.rowIndex=t,this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set expanded(t){this._expanded=t,this.groupContext.expanded=t,this.rowContext.expanded=t,this.cd.markForCheck()}get expanded(){return this._expanded}ngDoCheck(){this.rowDiffer.diff(this.row)&&(this.rowContext.row=this.row,this.groupContext.group=this.row,this.cd.markForCheck())}onContextmenu(t){this.rowContextmenu.emit({event:t,row:this.row})}getGroupHeaderStyle(){const t={};return t.transform="translate3d("+this.offsetX+"px, 0px, 0px)",t["backface-visibility"]="hidden",t.width=this.innerWidth,t}}class pt{constructor(t,e){this.cd=e,this.activate=new a.EventEmitter,this.treeAction=new a.EventEmitter,this.isFocused=!1,this.onCheckboxChangeFn=this.onCheckboxChange.bind(this),this.activateFn=this.activate.emit.bind(this.activate),this.cellContext={onCheckboxChangeFn:this.onCheckboxChangeFn,activateFn:this.activateFn,row:this.row,group:this.group,value:this.value,column:this.column,rowHeight:this.rowHeight,isSelected:this.isSelected,rowIndex:this.rowIndex,treeStatus:this.treeStatus,onTreeAction:this.onTreeAction.bind(this)},this._element=t.nativeElement}set group(t){this._group=t,this.cellContext.group=t,this.checkValueUpdates(),this.cd.markForCheck()}get group(){return this._group}set rowHeight(t){this._rowHeight=t,this.cellContext.rowHeight=t,this.checkValueUpdates(),this.cd.markForCheck()}get rowHeight(){return this._rowHeight}set isSelected(t){this._isSelected=t,this.cellContext.isSelected=t,this.cd.markForCheck()}get isSelected(){return this._isSelected}set expanded(t){this._expanded=t,this.cellContext.expanded=t,this.cd.markForCheck()}get expanded(){return this._expanded}set rowIndex(t){this._rowIndex=t,this.cellContext.rowIndex=t,this.checkValueUpdates(),this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set column(t){this._column=t,this.cellContext.column=t,this.checkValueUpdates(),this.cd.markForCheck()}get column(){return this._column}set row(t){this._row=t,this.cellContext.row=t,this.checkValueUpdates(),this.cd.markForCheck()}get row(){return this._row}set sorts(t){this._sorts=t,this.calcSortDir=this.calcSortDir(t)}get sorts(){return this._sorts}set treeStatus(t){this._treeStatus="collapsed"!==t&&"expanded"!==t&&"loading"!==t&&"disabled"!==t?"collapsed":t,this.cellContext.treeStatus=this._treeStatus,this.checkValueUpdates(),this.cd.markForCheck()}get treeStatus(){return this._treeStatus}get columnCssClasses(){let t="datatable-body-cell";if(this.column.cellClass)if("string"==typeof this.column.cellClass)t+=" "+this.column.cellClass;else if("function"==typeof this.column.cellClass){const e=this.column.cellClass({row:this.row,group:this.group,column:this.column,value:this.value,rowHeight:this.rowHeight});if("string"==typeof e)t+=e;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=" "+a)}}return this.sortDir||(t+=" sort-active"),this.isFocused&&(t+=" active"),this.sortDir===it.asc&&(t+=" sort-asc"),this.sortDir===it.desc&&(t+=" sort-desc"),t}get width(){return this.column.width}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get height(){const t=this.rowHeight;return isNaN(t)?t:t+"px"}ngDoCheck(){this.checkValueUpdates()}ngOnDestroy(){this.cellTemplate&&this.cellTemplate.clear()}checkValueUpdates(){let t="";if(this.row&&this.column){const e=this.column.$$valueGetter(this.row,this.column.prop),n=this.column.pipe;n?t=n.transform(e):void 0!==t&&(t=e)}else t="";this.value!==t&&(this.value=t,this.cellContext.value=t,this.sanitizedValue=null!=t?this.stripHtml(t):t,this.cd.markForCheck())}onFocus(){this.isFocused=!0}onBlur(){this.isFocused=!1}onClick(t){this.activate.emit({type:"click",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onDblClick(t){this.activate.emit({type:"dblclick",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onKeyDown(t){const e=t.keyCode;(e===ft.return||e===ft.down||e===ft.up||e===ft.left||e===ft.right)&&t.target===this._element&&(t.preventDefault(),t.stopPropagation(),this.activate.emit({type:"keydown",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element}))}onCheckboxChange(t){this.activate.emit({type:"checkbox",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element,treeStatus:"collapsed"})}calcSortDir(t){if(!t)return;const e=t.find(t=>t.prop===this.column.prop);return e?e.dir:void 0}stripHtml(t){return t.replace?t.replace(/<\/?[^>]+(>|$)/g,""):t}onTreeAction(){this.treeAction.emit(this.row)}calcLeftMargin(t,e){return t.isTreeColumn?e.level*(null!=t.treeLevelIndent?t.treeLevelIndent:50):0}}function bt(t,e,n){const a=n(e,t);return a>-1?t.splice(a,1):t.push(e),t}class mt{constructor(){this.activate=new a.EventEmitter,this.select=new a.EventEmitter}selectRow(t,e,n){if(!this.selectEnabled)return;const a="checkbox"===this.selectionType,r="multiClick"===this.selectionType;let i=[];i="multi"===this.selectionType||a||r?t.shiftKey?function(t,e,n,a,r){const i=n<a;for(let s=0;s<e.length;s++){const r=e[s],o=s>=a&&s<=n,u=s<=a&&s>=n;let l={start:0,end:0};l=i?{start:n,end:a}:{start:a,end:n+1},(i&&u||!i&&o)&&s>=l.start&&s<=l.end&&t.push(r)}return t}([],this.rows,e,this.prevIndex,this.getRowSelectedIdx.bind(this)):bt(t.ctrlKey||t.metaKey||r||a?[...this.selected]:[],n,this.getRowSelectedIdx.bind(this)):bt([],n,this.getRowSelectedIdx.bind(this)),"function"==typeof this.selectCheck&&(i=i.filter(this.selectCheck.bind(this))),this.selected.splice(0,this.selected.length),this.selected.push(...i),this.prevIndex=e,this.select.emit({selected:i})}onActivate(t,e){const{type:n,event:a,row:r}=t,i="checkbox"===this.selectionType;!i&&("click"===n||"dblclick"===n)||i&&"checkbox"===n?this.selectRow(a,e,r):"keydown"===n&&(a.keyCode===ft.return?this.selectRow(a,e,r):this.onKeyboardFocus(t)),this.activate.emit(t)}onKeyboardFocus(t){const{keyCode:e}=t.event;if(e===ft.up||e===ft.down||e===ft.right||e===ft.left){const n="cell"===this.selectionType;t.cellElement&&n?n&&this.focusCell(t.cellElement,t.rowElement,e,t.cellIndex):this.focusRow(t.rowElement,e)}}focusRow(t,e){const n=this.getPrevNextRow(t,e);n&&n.focus()}getPrevNextRow(t,e){const n=t.parentElement;if(n){let t;if(e===ft.up?t=n.previousElementSibling:e===ft.down&&(t=n.nextElementSibling),t&&t.children.length)return t.children[0]}}focusCell(t,e,n,a){let r;if(n===ft.left)r=t.previousElementSibling;else if(n===ft.right)r=t.nextElementSibling;else if(n===ft.up||n===ft.down){const t=this.getPrevNextRow(e,n);if(t){const e=t.getElementsByClassName("datatable-body-cell");e.length&&(r=e[a])}}r&&r.focus()}getRowSelected(t){return this.getRowSelectedIdx(t,this.selected)>-1}getRowSelectedIdx(t,e){if(!e||!e.length)return-1;const n=this.rowIdentity(t);return e.findIndex(t=>this.rowIdentity(t)===n)}}function yt(t){const e=t.filter(t=>!!t);return e.length?e.some(t=>"number"!=typeof t)?null:e.reduce((t,e)=>t+e):null}function vt(t){return null}class xt{constructor(){this.summaryRow={}}ngOnChanges(){this.columns&&this.rows&&(this.updateInternalColumns(),this.updateValues())}updateInternalColumns(){this._internalColumns=this.columns.map(t=>Object.assign({},t,{cellTemplate:t.summaryTemplate}))}updateValues(){this.summaryRow={},this.columns.filter(t=>!t.summaryTemplate).forEach(t=>{const e=this.rows.map(e=>e[t.prop]),n=this.getSummaryFunction(t);this.summaryRow[t.prop]=t.pipe?t.pipe.transform(n(e)):n(e)})}getSummaryFunction(t){return void 0===t.summaryFunc?yt:null===t.summaryFunc?vt:t.summaryFunc}}class _t{static forRoot(t){return{ngModule:_t,providers:[{provide:"configuration",useValue:t}]}}}"undefined"==typeof document||document.elementsFromPoint||(document.elementsFromPoint=function(t,e){const n=[],a=[];let r,i,s;for(;(r=document.elementFromPoint(t,e))&&-1===n.indexOf(r)&&null!=r;)n.push(r),a.push({value:r.style.getPropertyValue("pointer-events"),priority:r.style.getPropertyPriority("pointer-events")}),r.style.setProperty("pointer-events","none","important");for(i=a.length;s=a[--i];)n[i].style.setProperty("pointer-events",s.value?s.value:"",s.priority);return n})},wE6v:function(t,e,n){var a=n("hh1v");t.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},wQk9:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n("wd/R"))},"wd/R":function(t,e,n){(function(t){t.exports=function(){"use strict";var e,a;function r(){return e.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function s(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){return void 0===t}function u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function d(t,e){var n,a=[];for(n=0;n<t.length;++n)a.push(e(t[n],n));return a}function c(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function f(t,e){for(var n in e)c(e,n)&&(t[n]=e[n]);return c(e,"toString")&&(t.toString=e.toString),c(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,a){return Oe(t,e,n,a,!0).utc()}function g(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function p(t){if(null==t._isValid){var e=g(t),n=a.call(e.parsedDateParts,(function(t){return null!=t})),r=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(r=r&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return r;t._isValid=r}return t._isValid}function b(t){var e=h(NaN);return null!=t?f(g(e),t):g(e).userInvalidated=!0,e}a=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,a=0;a<n;a++)if(a in e&&t.call(this,e[a],a,e))return!0;return!1};var m=r.momentProperties=[];function y(t,e){var n,a,r;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=g(e)),o(e._locale)||(t._locale=e._locale),m.length>0)for(n=0;n<m.length;n++)o(r=e[a=m[n]])||(t[a]=r);return t}var v=!1;function x(t){y(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,r.updateOffset(this),v=!1)}function _(t){return t instanceof x||null!=t&&null!=t._isAMomentObject}function T(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function O(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=T(e)),n}function w(t,e,n){var a,r=Math.min(t.length,e.length),i=Math.abs(t.length-e.length),s=0;for(a=0;a<r;a++)(n&&t[a]!==e[a]||!n&&O(t[a])!==O(e[a]))&&s++;return s+i}function S(t){!1===r.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function I(t,e){var n=!0;return f((function(){if(null!=r.deprecationHandler&&r.deprecationHandler(null,t),n){for(var a,i=[],s=0;s<arguments.length;s++){if(a="","object"==typeof arguments[s]){for(var o in a+="\n["+s+"] ",arguments[0])a+=o+": "+arguments[0][o]+", ";a=a.slice(0,-2)}else a=arguments[s];i.push(a)}S(t+"\nArguments: "+Array.prototype.slice.call(i).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var N,C={};function R(t,e){null!=r.deprecationHandler&&r.deprecationHandler(t,e),C[t]||(S(e),C[t]=!0)}function A(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function k(t,e){var n,a=f({},t);for(n in e)c(e,n)&&(s(t[n])&&s(e[n])?(a[n]={},f(a[n],t[n]),f(a[n],e[n])):null!=e[n]?a[n]=e[n]:delete a[n]);for(n in t)c(t,n)&&!c(e,n)&&s(t[n])&&(a[n]=f({},a[n]));return a}function E(t){null!=t&&this.set(t)}r.suppressDeprecationWarnings=!1,r.deprecationHandler=null,N=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)c(t,e)&&n.push(e);return n};var L={};function D(t,e){var n=t.toLowerCase();L[n]=L[n+"s"]=L[e]=t}function P(t){return"string"==typeof t?L[t]||L[t.toLowerCase()]:void 0}function M(t){var e,n,a={};for(n in t)c(t,n)&&(e=P(n))&&(a[e]=t[n]);return a}var q={};function j(t,e){q[t]=e}function F(t,e,n){var a=""+Math.abs(t);return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-a.length)).toString().substr(1)+a}var G=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,z={},B={};function Y(t,e,n,a){var r=a;"string"==typeof a&&(r=function(){return this[a]()}),t&&(B[t]=r),e&&(B[e[0]]=function(){return F(r.apply(this,arguments),e[1],e[2])}),n&&(B[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function H(t,e){return t.isValid()?(e=U(e,t.localeData()),z[e]=z[e]||function(t){var e,n,a,r=t.match(G);for(e=0,n=r.length;e<n;e++)r[e]=B[r[e]]?B[r[e]]:(a=r[e]).match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"");return function(e){var a,i="";for(a=0;a<n;a++)i+=A(r[a])?r[a].call(e,t):r[a];return i}}(e),z[e](t)):t.localeData().invalidDate()}function U(t,e){var n=5;function a(t){return e.longDateFormat(t)||t}for(V.lastIndex=0;n>=0&&V.test(t);)t=t.replace(V,a),V.lastIndex=0,n-=1;return t}var W=/\d/,K=/\d\d/,$=/\d{3}/,J=/\d{4}/,Z=/[+-]?\d{6}/,Q=/\d\d?/,X=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,at=/[+-]?\d{1,6}/,rt=/\d+/,it=/[+-]?\d+/,st=/Z|[+-]\d\d:?\d\d/gi,ot=/Z|[+-]\d\d(?::?\d\d)?/gi,ut=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lt={};function dt(t,e,n){lt[t]=A(e)?e:function(t,a){return t&&n?n:e}}function ct(t,e){return c(lt,t)?lt[t](e._strict,e._locale):new RegExp(ft(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,a,r){return e||n||a||r}))))}function ft(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ht={};function gt(t,e){var n,a=e;for("string"==typeof t&&(t=[t]),u(e)&&(a=function(t,n){n[e]=O(t)}),n=0;n<t.length;n++)ht[t[n]]=a}function pt(t,e){gt(t,(function(t,n,a,r){a._w=a._w||{},e(t,a._w,a,r)}))}function bt(t,e,n){null!=e&&c(ht,t)&&ht[t](e,n._a,n,t)}function mt(t){return yt(t)?366:365}function yt(t){return t%4==0&&t%100!=0||t%400==0}Y("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),Y(0,["YY",2],0,(function(){return this.year()%100})),Y(0,["YYYY",4],0,"year"),Y(0,["YYYYY",5],0,"year"),Y(0,["YYYYYY",6,!0],0,"year"),D("year","y"),j("year",1),dt("Y",it),dt("YY",Q,K),dt("YYYY",nt,J),dt("YYYYY",at,Z),dt("YYYYYY",at,Z),gt(["YYYYY","YYYYYY"],0),gt("YYYY",(function(t,e){e[0]=2===t.length?r.parseTwoDigitYear(t):O(t)})),gt("YY",(function(t,e){e[0]=r.parseTwoDigitYear(t)})),gt("Y",(function(t,e){e[0]=parseInt(t,10)})),r.parseTwoDigitYear=function(t){return O(t)+(O(t)>68?1900:2e3)};var vt,xt=_t("FullYear",!0);function _t(t,e){return function(n){return null!=n?(Ot(this,t,n),r.updateOffset(this,e),this):Tt(this,t)}}function Tt(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Ot(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&yt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=(e%12+12)%12;return t+=(e-n)/12,1===n?yt(t)?29:28:31-n%7%2}vt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},Y("M",["MM",2],"Mo",(function(){return this.month()+1})),Y("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),Y("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),D("month","M"),j("month",8),dt("M",Q),dt("MM",Q,K),dt("MMM",(function(t,e){return e.monthsShortRegex(t)})),dt("MMMM",(function(t,e){return e.monthsRegex(t)})),gt(["M","MM"],(function(t,e){e[1]=O(t)-1})),gt(["MMM","MMMM"],(function(t,e,n,a){var r=n._locale.monthsParse(t,a,n._strict);null!=r?e[1]=r:g(n).invalidMonth=t}));var St=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,It="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Nt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ct(t,e,n){var a,r,i,s=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],a=0;a<12;++a)i=h([2e3,a]),this._shortMonthsParse[a]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[a]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(r=vt.call(this._shortMonthsParse,s))?r:null:-1!==(r=vt.call(this._longMonthsParse,s))?r:null:"MMM"===e?-1!==(r=vt.call(this._shortMonthsParse,s))||-1!==(r=vt.call(this._longMonthsParse,s))?r:null:-1!==(r=vt.call(this._longMonthsParse,s))||-1!==(r=vt.call(this._shortMonthsParse,s))?r:null}function Rt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=O(e);else if(!u(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function At(t){return null!=t?(Rt(this,t),r.updateOffset(this,!0),this):Tt(this,"Month")}var kt=ut,Et=ut;function Lt(){function t(t,e){return e.length-t.length}var e,n,a=[],r=[],i=[];for(e=0;e<12;e++)n=h([2e3,e]),a.push(this.monthsShort(n,"")),r.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(a.sort(t),r.sort(t),i.sort(t),e=0;e<12;e++)a[e]=ft(a[e]),r[e]=ft(r[e]);for(e=0;e<24;e++)i[e]=ft(i[e]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Dt(t,e,n,a,r,i,s){var o;return t<100&&t>=0?(o=new Date(t+400,e,n,a,r,i,s),isFinite(o.getFullYear())&&o.setFullYear(t)):o=new Date(t,e,n,a,r,i,s),o}function Pt(t){var e;if(t<100&&t>=0){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Mt(t,e,n){var a=7+e-n;return-(7+Pt(t,0,a).getUTCDay()-e)%7+a-1}function qt(t,e,n,a,r){var i,s,o=1+7*(e-1)+(7+n-a)%7+Mt(t,a,r);return o<=0?s=mt(i=t-1)+o:o>mt(t)?(i=t+1,s=o-mt(t)):(i=t,s=o),{year:i,dayOfYear:s}}function jt(t,e,n){var a,r,i=Mt(t.year(),e,n),s=Math.floor((t.dayOfYear()-i-1)/7)+1;return s<1?a=s+Ft(r=t.year()-1,e,n):s>Ft(t.year(),e,n)?(a=s-Ft(t.year(),e,n),r=t.year()+1):(r=t.year(),a=s),{week:a,year:r}}function Ft(t,e,n){var a=Mt(t,e,n),r=Mt(t+1,e,n);return(mt(t)-a+r)/7}function Gt(t,e){return t.slice(e,7).concat(t.slice(0,e))}Y("w",["ww",2],"wo","week"),Y("W",["WW",2],"Wo","isoWeek"),D("week","w"),D("isoWeek","W"),j("week",5),j("isoWeek",5),dt("w",Q),dt("ww",Q,K),dt("W",Q),dt("WW",Q,K),pt(["w","ww","W","WW"],(function(t,e,n,a){e[a.substr(0,1)]=O(t)})),Y("d",0,"do","day"),Y("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),Y("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),Y("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),Y("e",0,0,"weekday"),Y("E",0,0,"isoWeekday"),D("day","d"),D("weekday","e"),D("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),dt("d",Q),dt("e",Q),dt("E",Q),dt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),dt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),dt("dddd",(function(t,e){return e.weekdaysRegex(t)})),pt(["dd","ddd","dddd"],(function(t,e,n,a){var r=n._locale.weekdaysParse(t,a,n._strict);null!=r?e.d=r:g(n).invalidWeekday=t})),pt(["d","e","E"],(function(t,e,n,a){e[a]=O(t)}));var Vt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),zt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Bt="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Yt(t,e,n){var a,r,i,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],a=0;a<7;++a)i=h([2e3,1]).day(a),this._minWeekdaysParse[a]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[a]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[a]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(r=vt.call(this._weekdaysParse,s))?r:null:"ddd"===e?-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:null:-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:"dddd"===e?-1!==(r=vt.call(this._weekdaysParse,s))||-1!==(r=vt.call(this._shortWeekdaysParse,s))||-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:"ddd"===e?-1!==(r=vt.call(this._shortWeekdaysParse,s))||-1!==(r=vt.call(this._weekdaysParse,s))||-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:-1!==(r=vt.call(this._minWeekdaysParse,s))||-1!==(r=vt.call(this._weekdaysParse,s))||-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:null}var Ht=ut,Ut=ut,Wt=ut;function Kt(){function t(t,e){return e.length-t.length}var e,n,a,r,i,s=[],o=[],u=[],l=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),a=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),i=this.weekdays(n,""),s.push(a),o.push(r),u.push(i),l.push(a),l.push(r),l.push(i);for(s.sort(t),o.sort(t),u.sort(t),l.sort(t),e=0;e<7;e++)o[e]=ft(o[e]),u[e]=ft(u[e]),l[e]=ft(l[e]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function $t(){return this.hours()%12||12}function Jt(t,e){Y(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Zt(t,e){return e._meridiemParse}Y("H",["HH",2],0,"hour"),Y("h",["hh",2],0,$t),Y("k",["kk",2],0,(function(){return this.hours()||24})),Y("hmm",0,0,(function(){return""+$t.apply(this)+F(this.minutes(),2)})),Y("hmmss",0,0,(function(){return""+$t.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)})),Y("Hmm",0,0,(function(){return""+this.hours()+F(this.minutes(),2)})),Y("Hmmss",0,0,(function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)})),Jt("a",!0),Jt("A",!1),D("hour","h"),j("hour",13),dt("a",Zt),dt("A",Zt),dt("H",Q),dt("h",Q),dt("k",Q),dt("HH",Q,K),dt("hh",Q,K),dt("kk",Q,K),dt("hmm",X),dt("hmmss",tt),dt("Hmm",X),dt("Hmmss",tt),gt(["H","HH"],3),gt(["k","kk"],(function(t,e,n){var a=O(t);e[3]=24===a?0:a})),gt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),gt(["h","hh"],(function(t,e,n){e[3]=O(t),g(n).bigHour=!0})),gt("hmm",(function(t,e,n){var a=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a)),g(n).bigHour=!0})),gt("hmmss",(function(t,e,n){var a=t.length-4,r=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a,2)),e[5]=O(t.substr(r)),g(n).bigHour=!0})),gt("Hmm",(function(t,e,n){var a=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a))})),gt("Hmmss",(function(t,e,n){var a=t.length-4,r=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a,2)),e[5]=O(t.substr(r))}));var Qt,Xt=_t("Hours",!0),te={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:It,monthsShort:Nt,week:{dow:0,doy:6},weekdays:Vt,weekdaysMin:Bt,weekdaysShort:zt,meridiemParse:/[ap]\.?m?\.?/i},ee={},ne={};function ae(t){return t?t.toLowerCase().replace("_","-"):t}function re(e){var a=null;if(!ee[e]&&void 0!==t&&t&&t.exports)try{a=Qt._abbr,n("RnhZ")("./"+e),ie(a)}catch(r){}return ee[e]}function ie(t,e){var n;return t&&((n=o(e)?oe(t):se(t,e))?Qt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Qt._abbr}function se(t,e){if(null!==e){var n,a=te;if(e.abbr=t,null!=ee[t])R("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),a=ee[t]._config;else if(null!=e.parentLocale)if(null!=ee[e.parentLocale])a=ee[e.parentLocale]._config;else{if(null==(n=re(e.parentLocale)))return ne[e.parentLocale]||(ne[e.parentLocale]=[]),ne[e.parentLocale].push({name:t,config:e}),null;a=n._config}return ee[t]=new E(k(a,e)),ne[t]&&ne[t].forEach((function(t){se(t.name,t.config)})),ie(t),ee[t]}return delete ee[t],null}function oe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Qt;if(!i(t)){if(e=re(t))return e;t=[t]}return function(t){for(var e,n,a,r,i=0;i<t.length;){for(e=(r=ae(t[i]).split("-")).length,n=(n=ae(t[i+1]))?n.split("-"):null;e>0;){if(a=re(r.slice(0,e).join("-")))return a;if(n&&n.length>=e&&w(r,n,!0)>=e-1)break;e--}i++}return Qt}(t)}function ue(t){var e,n=t._a;return n&&-2===g(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,g(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),g(t)._overflowWeeks&&-1===e&&(e=7),g(t)._overflowWeekday&&-1===e&&(e=8),g(t).overflow=e),t}function le(t,e,n){return null!=t?t:null!=e?e:n}function de(t){var e,n,a,i,s,o=[];if(!t._d){for(a=function(t){var e=new Date(r.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,a,r,i,s,o,u;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)i=1,s=4,n=le(e.GG,t._a[0],jt(we(),1,4).year),a=le(e.W,1),((r=le(e.E,1))<1||r>7)&&(u=!0);else{i=t._locale._week.dow,s=t._locale._week.doy;var l=jt(we(),i,s);n=le(e.gg,t._a[0],l.year),a=le(e.w,l.week),null!=e.d?((r=e.d)<0||r>6)&&(u=!0):null!=e.e?(r=e.e+i,(e.e<0||e.e>6)&&(u=!0)):r=i}a<1||a>Ft(n,i,s)?g(t)._overflowWeeks=!0:null!=u?g(t)._overflowWeekday=!0:(o=qt(n,a,r,i,s),t._a[0]=o.year,t._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(s=le(t._a[0],a[0]),(t._dayOfYear>mt(s)||0===t._dayOfYear)&&(g(t)._overflowDayOfYear=!0),n=Pt(s,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=o[e]=a[e];for(;e<7;e++)t._a[e]=o[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Pt:Dt).apply(null,o),i=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==i&&(g(t).weekdayMismatch=!0)}}var ce=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,fe=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,he=/Z|[+-]\d\d(?::?\d\d)?/,ge=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],pe=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],be=/^\/?Date\((\-?\d+)/i;function me(t){var e,n,a,r,i,s,o=t._i,u=ce.exec(o)||fe.exec(o);if(u){for(g(t).iso=!0,e=0,n=ge.length;e<n;e++)if(ge[e][1].exec(u[1])){r=ge[e][0],a=!1!==ge[e][2];break}if(null==r)return void(t._isValid=!1);if(u[3]){for(e=0,n=pe.length;e<n;e++)if(pe[e][1].exec(u[3])){i=(u[2]||" ")+pe[e][0];break}if(null==i)return void(t._isValid=!1)}if(!a&&null!=i)return void(t._isValid=!1);if(u[4]){if(!he.exec(u[4]))return void(t._isValid=!1);s="Z"}t._f=r+(i||"")+(s||""),_e(t)}else t._isValid=!1}var ye=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ve={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function xe(t){var e,n,a,r,i,s,o,u,l=ye.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(l){var d=(e=l[3],n=l[2],a=l[5],r=l[6],i=l[7],s=[(o=l[4],u=parseInt(o,10),u<=49?2e3+u:u<=999?1900+u:u),Nt.indexOf(e),parseInt(n,10),parseInt(a,10),parseInt(r,10)],i&&s.push(parseInt(i,10)),s);if(!function(t,e,n){return!t||zt.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(g(n).weekdayMismatch=!0,n._isValid=!1,!1)}(l[1],d,t))return;t._a=d,t._tzm=function(t,e,n){if(t)return ve[t];if(e)return 0;var a=parseInt(n,10),r=a%100;return(a-r)/100*60+r}(l[8],l[9],l[10]),t._d=Pt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),g(t).rfc2822=!0}else t._isValid=!1}function _e(t){if(t._f!==r.ISO_8601)if(t._f!==r.RFC_2822){t._a=[],g(t).empty=!0;var e,n,a,i,s,o=""+t._i,u=o.length,l=0;for(a=U(t._f,t._locale).match(G)||[],e=0;e<a.length;e++)(n=(o.match(ct(i=a[e],t))||[])[0])&&((s=o.substr(0,o.indexOf(n))).length>0&&g(t).unusedInput.push(s),o=o.slice(o.indexOf(n)+n.length),l+=n.length),B[i]?(n?g(t).empty=!1:g(t).unusedTokens.push(i),bt(i,n,t)):t._strict&&!n&&g(t).unusedTokens.push(i);g(t).charsLeftOver=u-l,o.length>0&&g(t).unusedInput.push(o),t._a[3]<=12&&!0===g(t).bigHour&&t._a[3]>0&&(g(t).bigHour=void 0),g(t).parsedDateParts=t._a.slice(0),g(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var a;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((a=t.isPM(n))&&e<12&&(e+=12),a||12!==e||(e=0),e):e}(t._locale,t._a[3],t._meridiem),de(t),ue(t)}else xe(t);else me(t)}function Te(t){var e=t._i,n=t._f;return t._locale=t._locale||oe(t._l),null===e||void 0===n&&""===e?b({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),_(e)?new x(ue(e)):(l(e)?t._d=e:i(n)?function(t){var e,n,a,r,i;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;r<t._f.length;r++)i=0,e=y({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[r],_e(e),p(e)&&(i+=g(e).charsLeftOver,i+=10*g(e).unusedTokens.length,g(e).score=i,(null==a||i<a)&&(a=i,n=e));f(t,n||e)}(t):n?_e(t):function(t){var e=t._i;o(e)?t._d=new Date(r.now()):l(e)?t._d=new Date(e.valueOf()):"string"==typeof e?function(t){var e=be.exec(t._i);null===e?(me(t),!1===t._isValid&&(delete t._isValid,xe(t),!1===t._isValid&&(delete t._isValid,r.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):i(e)?(t._a=d(e.slice(0),(function(t){return parseInt(t,10)})),de(t)):s(e)?function(t){if(!t._d){var e=M(t._i);t._a=d([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),de(t)}}(t):u(e)?t._d=new Date(e):r.createFromInputFallback(t)}(t),p(t)||(t._d=null),t))}function Oe(t,e,n,a,r){var o,u={};return!0!==n&&!1!==n||(a=n,n=void 0),(s(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||i(t)&&0===t.length)&&(t=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=r,u._l=n,u._i=t,u._f=e,u._strict=a,(o=new x(ue(Te(u))))._nextDay&&(o.add(1,"d"),o._nextDay=void 0),o}function we(t,e,n,a){return Oe(t,e,n,a,!1)}r.createFromInputFallback=I("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),r.ISO_8601=function(){},r.RFC_2822=function(){};var Se=I("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:b()})),Ie=I("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:b()}));function Ne(t,e){var n,a;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return we();for(n=e[0],a=1;a<e.length;++a)e[a].isValid()&&!e[a][t](n)||(n=e[a]);return n}var Ce=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Re(t){var e=M(t),n=e.year||0,a=e.quarter||0,r=e.month||0,i=e.week||e.isoWeek||0,s=e.day||0,o=e.hour||0,u=e.minute||0,l=e.second||0,d=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===vt.call(Ce,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,a=0;a<Ce.length;++a)if(t[Ce[a]]){if(n)return!1;parseFloat(t[Ce[a]])!==O(t[Ce[a]])&&(n=!0)}return!0}(e),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+s+7*i,this._months=+r+3*a+12*n,this._data={},this._locale=oe(),this._bubble()}function Ae(t){return t instanceof Re}function ke(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ee(t,e){Y(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+F(~~(t/60),2)+e+F(~~t%60,2)}))}Ee("Z",":"),Ee("ZZ",""),dt("Z",ot),dt("ZZ",ot),gt(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=De(ot,t)}));var Le=/([\+\-]|\d\d)/gi;function De(t,e){var n=(e||"").match(t);if(null===n)return null;var a=((n[n.length-1]||[])+"").match(Le)||["-",0,0],r=60*a[1]+O(a[2]);return 0===r?0:"+"===a[0]?r:-r}function Pe(t,e){var n,a;return e._isUTC?(n=e.clone(),a=(_(t)||l(t)?t.valueOf():we(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+a),r.updateOffset(n,!1),n):we(t).local()}function Me(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function qe(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var je=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Fe=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ge(t,e){var n,a,r,i,s,o,l=t,d=null;return Ae(t)?l={ms:t._milliseconds,d:t._days,M:t._months}:u(t)?(l={},e?l[e]=t:l.milliseconds=t):(d=je.exec(t))?(n="-"===d[1]?-1:1,l={y:0,d:O(d[2])*n,h:O(d[3])*n,m:O(d[4])*n,s:O(d[5])*n,ms:O(ke(1e3*d[6]))*n}):(d=Fe.exec(t))?l={y:Ve(d[2],n="-"===d[1]?-1:1),M:Ve(d[3],n),w:Ve(d[4],n),d:Ve(d[5],n),h:Ve(d[6],n),m:Ve(d[7],n),s:Ve(d[8],n)}:null==l?l={}:"object"==typeof l&&("from"in l||"to"in l)&&(i=we(l.from),s=we(l.to),r=i.isValid()&&s.isValid()?(s=Pe(s,i),i.isBefore(s)?o=ze(i,s):((o=ze(s,i)).milliseconds=-o.milliseconds,o.months=-o.months),o):{milliseconds:0,months:0},(l={}).ms=r.milliseconds,l.M=r.months),a=new Re(l),Ae(t)&&c(t,"_locale")&&(a._locale=t._locale),a}function Ve(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function ze(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Be(t,e){return function(n,a){var r;return null===a||isNaN(+a)||(R(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=a,a=r),Ye(this,Ge(n="string"==typeof n?+n:n,a),t),this}}function Ye(t,e,n,a){var i=e._milliseconds,s=ke(e._days),o=ke(e._months);t.isValid()&&(a=null==a||a,o&&Rt(t,Tt(t,"Month")+o*n),s&&Ot(t,"Date",Tt(t,"Date")+s*n),i&&t._d.setTime(t._d.valueOf()+i*n),a&&r.updateOffset(t,s||o))}Ge.fn=Re.prototype,Ge.invalid=function(){return Ge(NaN)};var He=Be(1,"add"),Ue=Be(-1,"subtract");function We(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),a=t.clone().add(n,"months");return-(n+(e-a<0?(e-a)/(a-t.clone().add(n-1,"months")):(e-a)/(t.clone().add(n+1,"months")-a)))||0}function Ke(t){var e;return void 0===t?this._locale._abbr:(null!=(e=oe(t))&&(this._locale=e),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var $e=I("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function Je(){return this._locale}function Ze(t,e){return(t%e+e)%e}function Qe(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-126227808e5:new Date(t,e,n).valueOf()}function Xe(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-126227808e5:Date.UTC(t,e,n)}function tn(t,e){Y(0,[t,t.length],0,e)}function en(t,e,n,a,r){var i;return null==t?jt(this,a,r).year:(e>(i=Ft(t,a,r))&&(e=i),nn.call(this,t,e,n,a,r))}function nn(t,e,n,a,r){var i=qt(t,e,n,a,r),s=Pt(i.year,0,i.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}Y(0,["gg",2],0,(function(){return this.weekYear()%100})),Y(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),tn("gggg","weekYear"),tn("ggggg","weekYear"),tn("GGGG","isoWeekYear"),tn("GGGGG","isoWeekYear"),D("weekYear","gg"),D("isoWeekYear","GG"),j("weekYear",1),j("isoWeekYear",1),dt("G",it),dt("g",it),dt("GG",Q,K),dt("gg",Q,K),dt("GGGG",nt,J),dt("gggg",nt,J),dt("GGGGG",at,Z),dt("ggggg",at,Z),pt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,a){e[a.substr(0,2)]=O(t)})),pt(["gg","GG"],(function(t,e,n,a){e[a]=r.parseTwoDigitYear(t)})),Y("Q",0,"Qo","quarter"),D("quarter","Q"),j("quarter",7),dt("Q",W),gt("Q",(function(t,e){e[1]=3*(O(t)-1)})),Y("D",["DD",2],"Do","date"),D("date","D"),j("date",9),dt("D",Q),dt("DD",Q,K),dt("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),gt(["D","DD"],2),gt("Do",(function(t,e){e[2]=O(t.match(Q)[0])}));var an=_t("Date",!0);Y("DDD",["DDDD",3],"DDDo","dayOfYear"),D("dayOfYear","DDD"),j("dayOfYear",4),dt("DDD",et),dt("DDDD",$),gt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=O(t)})),Y("m",["mm",2],0,"minute"),D("minute","m"),j("minute",14),dt("m",Q),dt("mm",Q,K),gt(["m","mm"],4);var rn=_t("Minutes",!1);Y("s",["ss",2],0,"second"),D("second","s"),j("second",15),dt("s",Q),dt("ss",Q,K),gt(["s","ss"],5);var sn,on=_t("Seconds",!1);for(Y("S",0,0,(function(){return~~(this.millisecond()/100)})),Y(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),Y(0,["SSS",3],0,"millisecond"),Y(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),Y(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),Y(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),Y(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),Y(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),Y(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),D("millisecond","ms"),j("millisecond",16),dt("S",et,W),dt("SS",et,K),dt("SSS",et,$),sn="SSSS";sn.length<=9;sn+="S")dt(sn,rt);function un(t,e){e[6]=O(1e3*("0."+t))}for(sn="S";sn.length<=9;sn+="S")gt(sn,un);var ln=_t("Milliseconds",!1);Y("z",0,0,"zoneAbbr"),Y("zz",0,0,"zoneName");var dn=x.prototype;function cn(t){return t}dn.add=He,dn.calendar=function(t,e){var n=t||we(),a=Pe(n,this).startOf("day"),i=r.calendarFormat(this,a)||"sameElse",s=e&&(A(e[i])?e[i].call(this,n):e[i]);return this.format(s||this.localeData().calendar(i,this,we(n)))},dn.clone=function(){return new x(this)},dn.diff=function(t,e,n){var a,r,i;if(!this.isValid())return NaN;if(!(a=Pe(t,this)).isValid())return NaN;switch(r=6e4*(a.utcOffset()-this.utcOffset()),e=P(e)){case"year":i=We(this,a)/12;break;case"month":i=We(this,a);break;case"quarter":i=We(this,a)/3;break;case"second":i=(this-a)/1e3;break;case"minute":i=(this-a)/6e4;break;case"hour":i=(this-a)/36e5;break;case"day":i=(this-a-r)/864e5;break;case"week":i=(this-a-r)/6048e5;break;default:i=this-a}return n?i:T(i)},dn.endOf=function(t){var e;if(void 0===(t=P(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Xe:Qe;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Ze(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Ze(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Ze(e,1e3)-1}return this._d.setTime(e),r.updateOffset(this,!0),this},dn.format=function(t){t||(t=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var e=H(this,t);return this.localeData().postformat(e)},dn.from=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ge({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},dn.fromNow=function(t){return this.from(we(),t)},dn.to=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ge({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},dn.toNow=function(t){return this.to(we(),t)},dn.get=function(t){return A(this[t=P(t)])?this[t]():this},dn.invalidAt=function(){return g(this).overflow},dn.isAfter=function(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},dn.isBefore=function(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},dn.isBetween=function(t,e,n,a){var r=_(t)?t:we(t),i=_(e)?e:we(e);return!!(this.isValid()&&r.isValid()&&i.isValid())&&("("===(a=a||"()")[0]?this.isAfter(r,n):!this.isBefore(r,n))&&(")"===a[1]?this.isBefore(i,n):!this.isAfter(i,n))},dn.isSame=function(t,e){var n,a=_(t)?t:we(t);return!(!this.isValid()||!a.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()===a.valueOf():(n=a.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},dn.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},dn.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},dn.isValid=function(){return p(this)},dn.lang=$e,dn.locale=Ke,dn.localeData=Je,dn.max=Ie,dn.min=Se,dn.parsingFlags=function(){return f({},g(this))},dn.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:q[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=M(t)),a=0;a<n.length;a++)this[n[a].unit](t[n[a].unit]);else if(A(this[t=P(t)]))return this[t](e);return this},dn.startOf=function(t){var e;if(void 0===(t=P(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Xe:Qe;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Ze(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Ze(e,6e4);break;case"second":e=this._d.valueOf(),e-=Ze(e,1e3)}return this._d.setTime(e),r.updateOffset(this,!0),this},dn.subtract=Ue,dn.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},dn.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},dn.toDate=function(){return new Date(this.valueOf())},dn.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?H(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):A(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(n,"Z")):H(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},dn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(n+a+"-MM-DD[T]HH:mm:ss.SSS"+e+'[")]')},dn.toJSON=function(){return this.isValid()?this.toISOString():null},dn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},dn.unix=function(){return Math.floor(this.valueOf()/1e3)},dn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},dn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},dn.year=xt,dn.isLeapYear=function(){return yt(this.year())},dn.weekYear=function(t){return en.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},dn.isoWeekYear=function(t){return en.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},dn.quarter=dn.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},dn.month=At,dn.daysInMonth=function(){return wt(this.year(),this.month())},dn.week=dn.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},dn.isoWeek=dn.isoWeeks=function(t){var e=jt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},dn.weeksInYear=function(){var t=this.localeData()._week;return Ft(this.year(),t.dow,t.doy)},dn.isoWeeksInYear=function(){return Ft(this.year(),1,4)},dn.date=an,dn.day=dn.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},dn.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},dn.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},dn.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},dn.hour=dn.hours=Xt,dn.minute=dn.minutes=rn,dn.second=dn.seconds=on,dn.millisecond=dn.milliseconds=ln,dn.utcOffset=function(t,e,n){var a,i=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=De(ot,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(a=Me(this)),this._offset=t,this._isUTC=!0,null!=a&&this.add(a,"m"),i!==t&&(!e||this._changeInProgress?Ye(this,Ge(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Me(this)},dn.utc=function(t){return this.utcOffset(0,t)},dn.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Me(this),"m")),this},dn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=De(st,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},dn.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?we(t).utcOffset():0,(this.utcOffset()-t)%60==0)},dn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},dn.isLocal=function(){return!!this.isValid()&&!this._isUTC},dn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},dn.isUtc=qe,dn.isUTC=qe,dn.zoneAbbr=function(){return this._isUTC?"UTC":""},dn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},dn.dates=I("dates accessor is deprecated. Use date instead.",an),dn.months=I("months accessor is deprecated. Use month instead",At),dn.years=I("years accessor is deprecated. Use year instead",xt),dn.zone=I("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),dn.isDSTShifted=I("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),(t=Te(t))._a){var e=t._isUTC?h(t._a):we(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var fn=E.prototype;function hn(t,e,n,a){var r=oe(),i=h().set(a,e);return r[n](i,t)}function gn(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||"",null!=e)return hn(t,e,n,"month");var a,r=[];for(a=0;a<12;a++)r[a]=hn(t,a,n,"month");return r}function pn(t,e,n,a){"boolean"==typeof t?(u(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,u(e)&&(n=e,e=void 0),e=e||"");var r,i=oe(),s=t?i._week.dow:0;if(null!=n)return hn(e,(n+s)%7,a,"day");var o=[];for(r=0;r<7;r++)o[r]=hn(e,(r+s)%7,a,"day");return o}fn.calendar=function(t,e,n){var a=this._calendar[t]||this._calendar.sameElse;return A(a)?a.call(e,n):a},fn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},fn.invalidDate=function(){return this._invalidDate},fn.ordinal=function(t){return this._ordinal.replace("%d",t)},fn.preparse=cn,fn.postformat=cn,fn.relativeTime=function(t,e,n,a){var r=this._relativeTime[n];return A(r)?r(t,e,n,a):r.replace(/%d/i,t)},fn.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return A(n)?n(e):n.replace(/%s/i,e)},fn.set=function(t){var e,n;for(n in t)A(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},fn.months=function(t,e){return t?i(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||St).test(e)?"format":"standalone"][t.month()]:i(this._months)?this._months:this._months.standalone},fn.monthsShort=function(t,e){return t?i(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[St.test(e)?"format":"standalone"][t.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},fn.monthsParse=function(t,e,n){var a,r,i;if(this._monthsParseExact)return Ct.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),a=0;a<12;a++){if(r=h([2e3,a]),n&&!this._longMonthsParse[a]&&(this._longMonthsParse[a]=new RegExp("^"+this.months(r,"").replace(".","")+"$","i"),this._shortMonthsParse[a]=new RegExp("^"+this.monthsShort(r,"").replace(".","")+"$","i")),n||this._monthsParse[a]||(i="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[a]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[a].test(t))return a;if(n&&"MMM"===e&&this._shortMonthsParse[a].test(t))return a;if(!n&&this._monthsParse[a].test(t))return a}},fn.monthsRegex=function(t){return this._monthsParseExact?(c(this,"_monthsRegex")||Lt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=Et),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},fn.monthsShortRegex=function(t){return this._monthsParseExact?(c(this,"_monthsRegex")||Lt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=kt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},fn.week=function(t){return jt(t,this._week.dow,this._week.doy).week},fn.firstDayOfYear=function(){return this._week.doy},fn.firstDayOfWeek=function(){return this._week.dow},fn.weekdays=function(t,e){var n=i(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?Gt(n,this._week.dow):t?n[t.day()]:n},fn.weekdaysMin=function(t){return!0===t?Gt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},fn.weekdaysShort=function(t){return!0===t?Gt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},fn.weekdaysParse=function(t,e,n){var a,r,i;if(this._weekdaysParseExact)return Yt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),a=0;a<7;a++){if(r=h([2e3,1]).day(a),n&&!this._fullWeekdaysParse[a]&&(this._fullWeekdaysParse[a]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[a]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[a]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[a]||(i="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[a]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[a].test(t))return a;if(n&&"ddd"===e&&this._shortWeekdaysParse[a].test(t))return a;if(n&&"dd"===e&&this._minWeekdaysParse[a].test(t))return a;if(!n&&this._weekdaysParse[a].test(t))return a}},fn.weekdaysRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Ht),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},fn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},fn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Wt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},fn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},fn.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},ie("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===O(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),r.lang=I("moment.lang is deprecated. Use moment.locale instead.",ie),r.langData=I("moment.langData is deprecated. Use moment.localeData instead.",oe);var bn=Math.abs;function mn(t,e,n,a){var r=Ge(e,n);return t._milliseconds+=a*r._milliseconds,t._days+=a*r._days,t._months+=a*r._months,t._bubble()}function yn(t){return t<0?Math.floor(t):Math.ceil(t)}function vn(t){return 4800*t/146097}function xn(t){return 146097*t/4800}function _n(t){return function(){return this.as(t)}}var Tn=_n("ms"),On=_n("s"),wn=_n("m"),Sn=_n("h"),In=_n("d"),Nn=_n("w"),Cn=_n("M"),Rn=_n("Q"),An=_n("y");function kn(t){return function(){return this.isValid()?this._data[t]:NaN}}var En=kn("milliseconds"),Ln=kn("seconds"),Dn=kn("minutes"),Pn=kn("hours"),Mn=kn("days"),qn=kn("months"),jn=kn("years"),Fn=Math.round,Gn={ss:44,s:45,m:45,h:22,d:26,M:11};function Vn(t,e,n,a,r){return r.relativeTime(e||1,!!n,t,a)}var zn=Math.abs;function Bn(t){return(t>0)-(t<0)||+t}function Yn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=zn(this._milliseconds)/1e3,a=zn(this._days),r=zn(this._months);t=T(n/60),e=T(t/60),n%=60,t%=60;var i=T(r/12),s=r%=12,o=a,u=e,l=t,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var f=c<0?"-":"",h=Bn(this._months)!==Bn(c)?"-":"",g=Bn(this._days)!==Bn(c)?"-":"",p=Bn(this._milliseconds)!==Bn(c)?"-":"";return f+"P"+(i?h+i+"Y":"")+(s?h+s+"M":"")+(o?g+o+"D":"")+(u||l||d?"T":"")+(u?p+u+"H":"")+(l?p+l+"M":"")+(d?p+d+"S":"")}var Hn=Re.prototype;return Hn.isValid=function(){return this._isValid},Hn.abs=function(){var t=this._data;return this._milliseconds=bn(this._milliseconds),this._days=bn(this._days),this._months=bn(this._months),t.milliseconds=bn(t.milliseconds),t.seconds=bn(t.seconds),t.minutes=bn(t.minutes),t.hours=bn(t.hours),t.months=bn(t.months),t.years=bn(t.years),this},Hn.add=function(t,e){return mn(this,t,e,1)},Hn.subtract=function(t,e){return mn(this,t,e,-1)},Hn.as=function(t){if(!this.isValid())return NaN;var e,n,a=this._milliseconds;if("month"===(t=P(t))||"quarter"===t||"year"===t)switch(n=this._months+vn(e=this._days+a/864e5),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(xn(this._months)),t){case"week":return e/7+a/6048e5;case"day":return e+a/864e5;case"hour":return 24*e+a/36e5;case"minute":return 1440*e+a/6e4;case"second":return 86400*e+a/1e3;case"millisecond":return Math.floor(864e5*e)+a;default:throw new Error("Unknown unit "+t)}},Hn.asMilliseconds=Tn,Hn.asSeconds=On,Hn.asMinutes=wn,Hn.asHours=Sn,Hn.asDays=In,Hn.asWeeks=Nn,Hn.asMonths=Cn,Hn.asQuarters=Rn,Hn.asYears=An,Hn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*O(this._months/12):NaN},Hn._bubble=function(){var t,e,n,a,r,i=this._milliseconds,s=this._days,o=this._months,u=this._data;return i>=0&&s>=0&&o>=0||i<=0&&s<=0&&o<=0||(i+=864e5*yn(xn(o)+s),s=0,o=0),u.milliseconds=i%1e3,t=T(i/1e3),u.seconds=t%60,e=T(t/60),u.minutes=e%60,n=T(e/60),u.hours=n%24,s+=T(n/24),o+=r=T(vn(s)),s-=yn(xn(r)),a=T(o/12),o%=12,u.days=s,u.months=o,u.years=a,this},Hn.clone=function(){return Ge(this)},Hn.get=function(t){return t=P(t),this.isValid()?this[t+"s"]():NaN},Hn.milliseconds=En,Hn.seconds=Ln,Hn.minutes=Dn,Hn.hours=Pn,Hn.days=Mn,Hn.weeks=function(){return T(this.days()/7)},Hn.months=qn,Hn.years=jn,Hn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var a=Ge(t).abs(),r=Fn(a.as("s")),i=Fn(a.as("m")),s=Fn(a.as("h")),o=Fn(a.as("d")),u=Fn(a.as("M")),l=Fn(a.as("y")),d=r<=Gn.ss&&["s",r]||r<Gn.s&&["ss",r]||i<=1&&["m"]||i<Gn.m&&["mm",i]||s<=1&&["h"]||s<Gn.h&&["hh",s]||o<=1&&["d"]||o<Gn.d&&["dd",o]||u<=1&&["M"]||u<Gn.M&&["MM",u]||l<=1&&["y"]||["yy",l];return d[2]=e,d[3]=+t>0,d[4]=n,Vn.apply(null,d)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},Hn.toISOString=Yn,Hn.toString=Yn,Hn.toJSON=Yn,Hn.locale=Ke,Hn.localeData=Je,Hn.toIsoString=I("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Yn),Hn.lang=$e,Y("X",0,0,"unix"),Y("x",0,0,"valueOf"),dt("x",it),dt("X",/[+-]?\d+(\.\d{1,3})?/),gt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),gt("x",(function(t,e,n){n._d=new Date(O(t))})),r.version="2.24.0",e=we,r.fn=dn,r.min=function(){var t=[].slice.call(arguments,0);return Ne("isBefore",t)},r.max=function(){var t=[].slice.call(arguments,0);return Ne("isAfter",t)},r.now=function(){return Date.now?Date.now():+new Date},r.utc=h,r.unix=function(t){return we(1e3*t)},r.months=function(t,e){return gn(t,e,"months")},r.isDate=l,r.locale=ie,r.invalid=b,r.duration=Ge,r.isMoment=_,r.weekdays=function(t,e,n){return pn(t,e,n,"weekdays")},r.parseZone=function(){return we.apply(null,arguments).parseZone()},r.localeData=oe,r.isDuration=Ae,r.monthsShort=function(t,e){return gn(t,e,"monthsShort")},r.weekdaysMin=function(t,e,n){return pn(t,e,n,"weekdaysMin")},r.defineLocale=se,r.updateLocale=function(t,e){if(null!=e){var n,a,r=te;null!=(a=re(t))&&(r=a._config),(n=new E(e=k(r,e))).parentLocale=ee[t],ee[t]=n,ie(t)}else null!=ee[t]&&(null!=ee[t].parentLocale?ee[t]=ee[t].parentLocale:null!=ee[t]&&delete ee[t]);return ee[t]},r.locales=function(){return N(ee)},r.weekdaysShort=function(t,e,n){return pn(t,e,n,"weekdaysShort")},r.normalizeUnits=P,r.relativeTimeRounding=function(t){return void 0===t?Fn:"function"==typeof t&&(Fn=t,!0)},r.relativeTimeThreshold=function(t,e){return void 0!==Gn[t]&&(void 0===e?Gn[t]:(Gn[t]=e,"s"===t&&(Gn.ss=e-1),!0))},r.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},r.prototype=dn,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()}).call(this,n("YuTi")(t))},wg0c:function(t,e,n){var a=n("2oRo"),r=n("WKiH").trim,i=n("WJkJ"),s=a.parseInt,o=/^[+-]?0[Xx]/,u=8!==s(i+"08")||22!==s(i+"0x16");t.exports=u?function(t,e){var n=r(String(t));return s(n,e>>>0||(o.test(n)?16:10))}:s},wgvl:function(t,e,n){var a=n("Ytn0");t.exports=function(t,e){var n=a(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}},wnGv:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("8Y7J"),r=n("s7LF"),i=n("LvDl"),s=n("oxzT"),o=n("QFaf"),u=n("DNAf"),l=n("a96k");class d{constructor(t){this.i18n=t,this.data=[],this.options=[],this.messages=new u.a({},this.i18n),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new a.EventEmitter,this.Object=Object,this.filteredOptions=[],this.icons=s.a}ngOnInit(){this.initFilter(),this.data.length>0&&this.initMissingOptions(),this.options=i.sortBy(this.options,["name"]),this.updateOptions()}initFilter(){this.filter=new r.i("",{validators:this.customBadgeValidators}),this.form=new o.a({filter:this.filter}),this.filteredOptions=[...this.options||[]]}initMissingOptions(){const t=this.options.map(t=>t.name);this.data.filter(e=>-1===t.indexOf(e)).forEach(t=>this.addOption(t)),this.forceOptionsToReflectData()}addOption(t){this.options.push(new l.a(!1,t,"")),this.options=i.sortBy(this.options,["name"]),this.triggerSelection(this.options.find(e=>e.name===t))}triggerSelection(t){!t||this.selectionLimit&&!t.selected&&this.data.length>=this.selectionLimit||(t.selected=!t.selected,this.updateOptions(),this.selection.emit({option:t}))}updateOptions(){this.data.splice(0,this.data.length),this.options.forEach(t=>{t.selected&&this.data.push(t.name)}),this.updateFilter()}updateFilter(){this.filteredOptions=this.options.filter(t=>t.name.includes(this.filter.value))}forceOptionsToReflectData(){this.options.forEach(t=>{-1!==this.data.indexOf(t.name)&&(t.selected=!0)})}ngOnChanges(){this.filter&&this.updateFilter(),this.options&&this.data&&0!==this.data.length&&this.forceOptionsToReflectData()}selectOption(){0===this.filteredOptions.length?this.addCustomOption():(this.triggerSelection(this.filteredOptions[0]),this.resetFilter())}addCustomOption(){this.isCreatable()&&(this.addOption(this.filter.value),this.resetFilter())}isCreatable(){return this.customBadges&&this.filter.valid&&this.filter.value.length>0&&this.filteredOptions.every(t=>t.name!==this.filter.value)}resetFilter(){this.filter.setValue(""),this.updateFilter()}removeItem(t){this.triggerSelection(this.options.find(e=>e.name===t&&e.selected))}}},woSy:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return t.prototype.onDrop=function(t){this.node.mouseAction("drop",t.event,{from:t.element,to:{parent:this.node,index:this.dropIndex}})},t.prototype.allowDrop=function(t,e){return this.node.options.allowDrop(t,{parent:this.node,index:this.dropIndex},e)},i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"dropIndex",void 0),i([Object(a.Component)({selector:"TreeNodeDropSlot, tree-node-drop-slot",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <div\n      class="node-drop-slot"\n      (treeDrop)="onDrop($event)"\n      [treeAllowDrop]="allowDrop.bind(this)"\n      [allowDragoverStyling]="true">\n    </div>\n  '})],t)}()},x38r:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t.bold="bold",t.sparkline="sparkline",t.perSecond="perSecond",t.checkIcon="checkIcon",t.routerLink="routerLink",t.executing="executing",t.classAdding="classAdding",t.badge="badge",t.map="map",t.truncate="truncate",t}({})},x3F9:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},x6pH:function(t,e,n){!function(t){"use strict";t.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(t){return 2===t?"שעתיים":t+" שעות"},d:"יום",dd:function(t){return 2===t?"יומיים":t+" ימים"},M:"חודש",MM:function(t){return 2===t?"חודשיים":t+" חודשים"},y:"שנה",yy:function(t){return 2===t?"שנתיים":t%10==0&&10!==t?t+" שנה":t+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(t){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(t)},meridiem:function(t,e,n){return t<5?"לפנות בוקר":t<10?"בבוקר":t<12?n?'לפנה"צ':"לפני הצהריים":t<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n("wd/R"))},xAZD:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length,r=Array(a);++n<a;)r[n]=e(t[n],n,t);return r}},xDBR:function(t,e){t.exports=!1},xOlK:function(t,e,n){var a=n("77kF"),r=n("FGWQ");t.exports=function(t,e){return t&&a(e,r(e),t)}},xSw7:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("Fgil"),i=n("aXbf"),s=n("o4+5"),o=n("SVse"),u=n("978R"),l=n("z/SZ"),d=n("2uy1");n("GgAd"),n.d(e,"a",(function(){return c})),n.d(e,"b",(function(){return h}));var c=a["ɵcrt"]({encapsulation:0,styles:[[".bg-info[_ngcontent-%COMP%]{background-color:#2b99a8!important}.bg-freespace[_ngcontent-%COMP%]{background-color:#d1d1d1!important}.progress[_ngcontent-%COMP%]{height:20px;position:relative;margin-bottom:0}.progress[_ngcontent-%COMP%]   div.progress-bar[_ngcontent-%COMP%]{position:static}.progress[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{position:absolute;display:block;width:100%;color:#000;font-weight:400}"]],data:{}});function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"table",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"td",[["class","text-left"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Used: "])),(t()(),a["ɵeld"](4,0,null,null,4,"td",[["class","text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,3,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](6,null,[" ",""])),a["ɵppd"](7,1),a["ɵppd"](8,1),(t()(),a["ɵeld"](9,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](10,0,null,null,1,"td",[["class","text-left"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Free: "])),(t()(),a["ɵeld"](12,0,null,null,4,"td",[["class","'text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](13,0,null,null,3,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](14,null,["",""])),a["ɵppd"](15,1),a["ɵppd"](16,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,6,0,n.isBinary?t(e,7,0,a["ɵnov"](e.parent,0),n.used):t(e,8,0,a["ɵnov"](e.parent,1),n.used));t(e,6,0,r);var i=a["ɵunv"](e,14,0,n.isBinary?t(e,15,0,a["ɵnov"](e.parent,0),n.total-n.used):t(e,16,0,a["ɵnov"](e.parent,1),n.total-n.used));t(e,14,0,i)}))}function h(t){return a["ɵvid"](0,[a["ɵpid"](0,r.a,[i.a]),a["ɵpid"](0,s.a,[i.a]),a["ɵpid"](0,o.DecimalPipe,[a.LOCALE_ID]),(t()(),a["ɵand"](0,[["usageTooltipTpl",2]],null,0,null,f)),(t()(),a["ɵeld"](4,16777216,null,null,6,"div",[["class","progress"],["data-placement","left"]],null,null,null,null,null)),a["ɵdid"](5,212992,null,0,u.c,[a.ViewContainerRef,l.a,u.a,a.ElementRef,a.Renderer2,d.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"div",[["class","progress-bar bg-info"],["role","progressbar"]],[[4,"width",null]],null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](8,null,["","%"])),a["ɵppd"](9,2),(t()(),a["ɵeld"](10,0,null,null,0,"div",[["class","progress-bar bg-freespace"],["role","progressbar"]],[[4,"width",null]],null,null,null,null))],(function(t,e){t(e,5,0,a["ɵnov"](e,3),"left")}),(function(t,e){var n=e.component;t(e,6,0,n.usedPercentage+"%");var r=a["ɵunv"](e,8,0,t(e,9,0,a["ɵnov"](e,2),n.usedPercentage,"1.0-"+n.decimals));t(e,8,0,r),t(e,10,0,n.freePercentage+"%")}))}},xT5m:function(t,e,n){var a=n("SQuY"),r=n("7Igq"),i=n("jy8Y");function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new a;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=r,s.prototype.has=i,t.exports=s},xTzq:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("LvDl");function r(...t){switch(t.length){case 1:return s.apply(void 0,t);case 3:return o.apply(void 0,t);default:throw new Error}}function i(t,e,n){const a="__ignore_"+e;Array.isArray(t[a])?t[a].push(n):t[a]=[n]}function s(t){for(const e of Object.getOwnPropertyNames(t.prototype)){const n=Object.getOwnPropertyDescriptor(t.prototype,e),a="constructor"===e;n.value instanceof Function&&!a&&(o(t.prototype,e,n),Object.defineProperty(t.prototype,e,n))}}function o(t,e,n){void 0===n&&(n=Object.getOwnPropertyDescriptor(t,e));const r=n.value;n.value=function(){const n="__ignore_"+e,i=t[n]||[],s=[];for(let t=0;t<arguments.length;t++)s[t]=a.isString(arguments[t])&&-1===i.indexOf(t)?encodeURIComponent(arguments[t]):arguments[t];const o=r.apply(this,s);return o}}},xbPD:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t=null){return e=>e.lift(new i(t))}class i{constructor(t){this.defaultValue=t}call(t,e){return e.subscribe(new s(t,this.defaultValue))}}class s extends a.a{constructor(t,e){super(t),this.defaultValue=e,this.isEmpty=!0}_next(t){this.isEmpty=!1,this.destination.next(t)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}},xdB7:function(t,e,n){var a=n("bX23"),r=n("l9nr"),i=n("H+zY"),s=Math.max;t.exports=function(t,e,n){var o=null==t?0:t.length;if(!o)return-1;var u=null==n?0:i(n);return u<0&&(u=s(o+u,0)),a(t,r(e,3),u)}},xgIS:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("DH7j"),i=n("n6bG"),s=n("lJxs");function o(t,e,n,u){return Object(i.a)(n)&&(u=n,n=void 0),u?o(t,e,n).pipe(Object(s.a)(t=>Object(r.a)(t)?u(...t):u(t))):new a.a(a=>{!function t(e,n,a,r,i){let s;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){const t=e;e.addEventListener(n,a,i),s=()=>t.removeEventListener(n,a,i)}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){const t=e;e.on(n,a),s=()=>t.off(n,a)}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){const t=e;e.addListener(n,a),s=()=>t.removeListener(n,a)}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(let s=0,o=e.length;s<o;s++)t(e[s],n,a,r,i)}r.add(s)}(t,e,(function(t){a.next(arguments.length>1?Array.prototype.slice.call(arguments):t)}),a,n)})}},"xj/R":function(t,e,n){"use strict";function a(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function r(t){return"string"==typeof t}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t){return t&&t.getTime&&!isNaN(t.getTime())}function o(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function f(t){return void 0===t}function h(t){const e=+t;let n=0;return 0!==e&&isFinite(e)&&(n=a(e)),n}n.d(e,"a",(function(){return Je})),n.d(e,"b",(function(){return Qe})),n.d(e,"c",(function(){return Qt})),n.d(e,"d",(function(){return Tt})),n.d(e,"e",(function(){return an})),n.d(e,"f",(function(){return _e})),n.d(e,"g",(function(){return rn})),n.d(e,"h",(function(){return R})),n.d(e,"i",(function(){return L})),n.d(e,"j",(function(){return E})),n.d(e,"k",(function(){return Xt})),n.d(e,"l",(function(){return k})),n.d(e,"m",(function(){return sn})),n.d(e,"n",(function(){return Ae})),n.d(e,"o",(function(){return l})),n.d(e,"p",(function(){return ke})),n.d(e,"q",(function(){return i})),n.d(e,"r",(function(){return s})),n.d(e,"s",(function(){return Ee})),n.d(e,"t",(function(){return D})),n.d(e,"u",(function(){return Le})),n.d(e,"v",(function(){return q})),n.d(e,"w",(function(){return P})),n.d(e,"x",(function(){return M})),n.d(e,"y",(function(){return on})),n.d(e,"z",(function(){return un})),n.d(e,"A",(function(){return ln})),n.d(e,"B",(function(){return Ne})),n.d(e,"C",(function(){return gn})),n.d(e,"D",(function(){return pn})),n.d(e,"E",(function(){return bt})),n.d(e,"F",(function(){return pt})),n.d(e,"G",(function(){return _t})),n.d(e,"H",(function(){return Ce})),n.d(e,"I",(function(){return bn}));const g={},p={date:"day",hour:"hours",minute:"minutes",second:"seconds",millisecond:"milliseconds"};function b(t,e){const n=t.toLowerCase();let a=t;n in p&&(a=p[n]),g[n]=g[n+"s"]=g[e]=a}function m(t){return r(t)?g[t]||g[t.toLowerCase()]:void 0}function y(t,e,n){const a=""+Math.abs(t);return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-a.length)).toString().substr(1)+a}let v={},x={};const _=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;function T(t,e,n,a){t&&(x[t]=a),e&&(x[e[0]]=function(){return y(a.apply(null,arguments),e[1],e[2])}),n&&(x[n]=function(e,n){return n.locale.ordinal(a.apply(null,arguments),t)})}function O(t,e,n){const a=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(a.getUTCFullYear())&&a.setUTCFullYear(t),a}function w(t,e=0,n=1,a=0,r=0,i=0,s=0){const o=new Date(t,e,n,a,r,i,s);return t<100&&t>=0&&isFinite(o.getFullYear())&&o.setFullYear(t),o}function S(t,e=!1){return e?t.getUTCHours():t.getHours()}function I(t,e=!1){return e?t.getUTCMinutes():t.getMinutes()}function N(t,e=!1){return e?t.getUTCSeconds():t.getSeconds()}function C(t,e=!1){return e?t.getUTCMilliseconds():t.getMilliseconds()}function R(t,e=!1){return e?t.getUTCDay():t.getDay()}function A(t,e=!1){return e?t.getUTCDate():t.getDate()}function k(t,e=!1){return e?t.getUTCMonth():t.getMonth()}function E(t,e=!1){return e?t.getUTCFullYear():t.getFullYear()}function L(t){return w(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds())}function D(t,e){return t.getDay()===e}function P(t,e){return!(!t||!e)&&M(t,e)&&k(t)===k(e)}function M(t,e){return!(!t||!e)&&E(t)===E(e)}function q(t,e){return!(!t||!e)&&M(t,e)&&P(t,e)&&A(t)===A(e)}const j=/\d/,F=/\d\d/,G=/\d{3}/,V=/\d{4}/,z=/[+-]?\d{6}/,B=/\d\d?/,Y=/\d\d\d\d?/,H=/\d\d\d\d\d\d?/,U=/\d{1,3}/,W=/\d{1,4}/,K=/[+-]?\d{1,6}/,$=/\d+/,J=/[+-]?\d+/,Z=/Z|[+-]\d\d(?::?\d\d)?/gi,Q=/[+-]?\d+(\.\d{1,3})?/,X=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,tt={};function et(t,e,n){tt[t]=o(e)?e:function(t,a){return t&&n?n:e}}function nt(t,e){return d(tt,t)?tt[t](!1,e):new RegExp(at(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(t,e,n,a,r)=>e||n||a||r)))}function at(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}const rt={};function it(t,e){const n=r(t)?[t]:t;let a=e;if(u(e)&&(a=function(t,n,a){return n[e]=h(t),a}),l(n)&&o(a)){let t;for(t=0;t<n.length;t++)rt[n[t]]=a}}function st(t,e){it(t,(function(t,n,a,r){return a._w=a._w||{},e(t,a._w,a,r)}))}function ot(t,e,n){return null!=e&&d(rt,t)&&rt[t](e,n._a,n,t),n}function ut(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function lt(t,e){return E(t,e.isUTC).toString()}function dt(t){return h(t)+(h(t)>68?1900:2e3)}function ct(t){return ft(t)?366:365}function ft(t){return t%4==0&&t%100!=0||t%400==0}function ht(t,e){if(isNaN(t)||isNaN(e))return NaN;const n=(e%12+12)%12;return 1===n?ft(t+(e-n)/12)?29:28:31-n%7%2}const gt={year:0,month:0,day:0,hour:0,minute:0,seconds:0};function pt(t,e){const n=Object.assign({},gt,e),a=t.getFullYear()+(n.year||0),r=t.getMonth()+(n.month||0);let i=t.getDate()+(n.day||0);return n.month&&!n.day&&(i=Math.min(i,ht(a,r))),w(a,r,i,t.getHours()+(n.hour||0),t.getMinutes()+(n.minute||0),t.getSeconds()+(n.seconds||0))}function bt(t,e){return w(mt(t.getFullYear(),e.year),mt(t.getMonth(),e.month),1,mt(t.getHours(),e.hour),mt(t.getMinutes(),e.minute),mt(t.getSeconds(),e.seconds),mt(t.getMilliseconds(),e.milliseconds))}function mt(t,e){return u(e)?e:t}function yt(t,e,n){const a=Math.min(A(t),ht(E(t),e));return n?t.setUTCMonth(e,a):t.setMonth(e,a),t}function vt(t,e,n){return n?t.setUTCDate(e):t.setDate(e),t}function xt(t){return new Date(t.getTime())}function _t(t,e,n){const a=xt(t);switch(e){case"year":yt(a,0,n);case"quarter":case"month":vt(a,1,n);case"week":case"isoWeek":case"day":case"date":!function(t,e,n){n?t.setUTCHours(0):t.setHours(0)}(a,0,n);case"hours":!function(t,e,n){n?t.setUTCMinutes(0):t.setMinutes(0)}(a,0,n);case"minutes":!function(t,e,n){n?t.setUTCSeconds(0):t.setSeconds(0)}(a,0,n);case"seconds":!function(t,e,n){n?t.setUTCMilliseconds(0):t.setMilliseconds(0)}(a,0,n)}return"week"===e&&function(t,e,n={}){Fe(t,0-Be(t,n.locale,n.isUTC),"day")}(a,0,{isUTC:n}),"isoWeek"===e&&function(t,e,n={}){const a=function(t,e=Xt()){return r(t)?e.weekdaysParse(t)%7||7:u(t)&&isNaN(t)?null:t}(1,n.locale);Ve(t,ze(t)%7?a:a-7)}(a),"quarter"===e&&yt(a,3*Math.floor(k(a,n)/3),n),a}function Tt(t,e,n){let a=e;return"date"===a&&(a="day"),function(t,e,n,a){return Ge(t,Me(1,"milliseconds"),-1,a)}(Fe(_t(t,a,n),1,"isoWeek"===a?"week":a,n),0,0,n)}function Ot(t,e){const n=+_t(t,"day",e),a=+_t(t,"year",e);return Math.round((n-a)/864e5)+1}function wt(t,e,n){const a=e-n+7;return-(O(t,0,a).getUTCDay()-e+7)%7+a-1}function St(t,e,n,a){const r=wt(E(t,a),e,n),i=Math.floor((Ot(t,a)-r-1)/7)+1;let s,o;return i<1?(o=E(t,a)-1,s=i+It(o,e,n)):i>It(E(t,a),e,n)?(s=i-It(E(t,a),e,n),o=E(t,a)+1):(o=E(t,a),s=i),{week:s,year:o}}function It(t,e,n){const a=wt(t,e,n),r=wt(t+1,e,n);return(ct(t)-a+r)/7}const Nt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ct="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Rt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),At="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),kt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Et="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Lt={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Dt=X,Pt=X;class Mt{constructor(t){t&&this.set(t)}set(t){let e;for(e in t){if(!t.hasOwnProperty(e))continue;const n=t[e];this[o(n)?e:"_"+e]=n}this._config=t}calendar(t,e,n){const a=this._calendar[t]||this._calendar.sameElse;return o(a)?a.call(null,e,n):a}longDateFormat(t){const e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])}get invalidDate(){return this._invalidDate}set invalidDate(t){this._invalidDate=t}ordinal(t,e){return this._ordinal.replace("%d",t.toString(10))}preparse(t){return t}preinput(t){return t}postvalue(t){return t}postformat(t){return t}relativeTime(t,e,n,a){const r=this._relativeTime[n];return o(r)?r(t,e,n,a):r.replace(/%d/i,t.toString(10))}pastFuture(t,e){const n=this._relativeTime[t>0?"future":"past"];return o(n)?n(e):n.replace(/%s/i,e)}months(t,e,n=!1){if(!t)return l(this._months)?this._months:this._months.standalone;if(l(this._months))return this._months[k(t,n)];const a=(this._months.isFormat||Nt).test(e)?"format":"standalone";return this._months[a][k(t,n)]}monthsShort(t,e,n=!1){if(!t)return l(this._monthsShort)?this._monthsShort:this._monthsShort.standalone;if(l(this._monthsShort))return this._monthsShort[k(t,n)];const a=Nt.test(e)?"format":"standalone";return this._monthsShort[a][k(t,n)]}monthsParse(t,e,n){let a,r,i;if(this._monthsParseExact)return this.handleMonthStrictParse(t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=new Date(Date.UTC(2e3,i)),n&&!this._longMonthsParse[i]){const t=this.months(a,"",!0).replace(".",""),e=this.monthsShort(a,"",!0).replace(".","");this._longMonthsParse[i]=new RegExp(`^${t}$`,"i"),this._shortMonthsParse[i]=new RegExp(`^${e}$`,"i")}if(n||this._monthsParse[i]||(r=`^${this.months(a,"",!0)}|^${this.monthsShort(a,"",!0)}`,this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}monthsRegex(t){return this._monthsParseExact?(d(this,"_monthsRegex")||this.computeMonthsParse(),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Pt),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}monthsShortRegex(t){return this._monthsParseExact?(d(this,"_monthsRegex")||this.computeMonthsParse(),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Dt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}week(t,e){return St(t,this._week.dow,this._week.doy,e).week}firstDayOfWeek(){return this._week.dow}firstDayOfYear(){return this._week.doy}weekdays(t,e,n){if(!t)return l(this._weekdays)?this._weekdays:this._weekdays.standalone;if(l(this._weekdays))return this._weekdays[R(t,n)];const a=this._weekdays.isFormat.test(e)?"format":"standalone";return this._weekdays[a][R(t,n)]}weekdaysMin(t,e,n){return t?this._weekdaysMin[R(t,n)]:this._weekdaysMin}weekdaysShort(t,e,n){return t?this._weekdaysShort[R(t,n)]:this._weekdaysShort}weekdaysParse(t,e,n){let a,r;if(this._weekdaysParseExact)return this.handleWeekStrictParse(t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),a=0;a<7;a++){const i=Ve(new Date(Date.UTC(2e3,1)),a,null,!0);if(n&&!this._fullWeekdaysParse[a]&&(this._fullWeekdaysParse[a]=new RegExp(`^${this.weekdays(i,"",!0).replace(".",".?")}$`,"i"),this._shortWeekdaysParse[a]=new RegExp(`^${this.weekdaysShort(i,"",!0).replace(".",".?")}$`,"i"),this._minWeekdaysParse[a]=new RegExp(`^${this.weekdaysMin(i,"",!0).replace(".",".?")}$`,"i")),this._weekdaysParse[a]||(r=`^${this.weekdays(i,"",!0)}|^${this.weekdaysShort(i,"",!0)}|^${this.weekdaysMin(i,"",!0)}`,this._weekdaysParse[a]=new RegExp(r.replace(".",""),"i")),!(l(this._fullWeekdaysParse)&&l(this._shortWeekdaysParse)&&l(this._minWeekdaysParse)&&l(this._weekdaysParse)))return;if(n&&"dddd"===e&&this._fullWeekdaysParse[a].test(t))return a;if(n&&"ddd"===e&&this._shortWeekdaysParse[a].test(t))return a;if(n&&"dd"===e&&this._minWeekdaysParse[a].test(t))return a;if(!n&&this._weekdaysParse[a].test(t))return a}}weekdaysRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=X),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}weekdaysShortRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=X),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}weekdaysMinRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=X),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}isPM(t){return"p"===t.toLowerCase().charAt(0)}meridiem(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}formatLongDate(t){this._longDateFormat=this._longDateFormat?this._longDateFormat:Lt;const e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,t=>t.slice(1)),this._longDateFormat[t])}handleMonthStrictParse(t,e,n){const a=t.toLocaleLowerCase();let r,i,s;if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)s=new Date(2e3,r),this._shortMonthsParse[r]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(s,"").toLocaleLowerCase();return n?"MMM"===e?(i=this._shortMonthsParse.indexOf(a),-1!==i?i:null):(i=this._longMonthsParse.indexOf(a),-1!==i?i:null):"MMM"===e?(i=this._shortMonthsParse.indexOf(a),-1!==i?i:(i=this._longMonthsParse.indexOf(a),-1!==i?i:null)):(i=this._longMonthsParse.indexOf(a),-1!==i?i:(i=this._shortMonthsParse.indexOf(a),-1!==i?i:null))}handleWeekStrictParse(t,e,n){let a;const r=t.toLocaleLowerCase();if(!this._weekdaysParse){let t;for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],t=0;t<7;++t){const e=Ve(new Date(Date.UTC(2e3,1)),t,null,!0);this._minWeekdaysParse[t]=this.weekdaysMin(e).toLocaleLowerCase(),this._shortWeekdaysParse[t]=this.weekdaysShort(e).toLocaleLowerCase(),this._weekdaysParse[t]=this.weekdays(e,"").toLocaleLowerCase()}}if(l(this._weekdaysParse)&&l(this._shortWeekdaysParse)&&l(this._minWeekdaysParse))return n?"dddd"===e?(a=this._weekdaysParse.indexOf(r),-1!==a?a:null):"ddd"===e?(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:null):(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null):"dddd"===e?(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null))):"ddd"===e?(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null))):(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:null)))}computeMonthsParse(){const t=[],e=[],n=[];let a,r;for(r=0;r<12;r++)a=new Date(2e3,r),t.push(this.monthsShort(a,"")),e.push(this.months(a,"")),n.push(this.months(a,"")),n.push(this.monthsShort(a,""));for(t.sort(qt),e.sort(qt),n.sort(qt),r=0;r<12;r++)t[r]=at(t[r]),e[r]=at(e[r]);for(r=0;r<24;r++)n[r]=at(n[r]);this._monthsRegex=new RegExp(`^(${n.join("|")})`,"i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(`^(${e.join("|")})`,"i"),this._monthsShortStrictRegex=new RegExp(`^(${t.join("|")})`,"i")}computeWeekdaysParse(){const t=[],e=[],n=[],a=[];let r;for(r=0;r<7;r++){const i=Ve(new Date(Date.UTC(2e3,1)),r,null,!0),s=this.weekdaysMin(i),o=this.weekdaysShort(i),u=this.weekdays(i);t.push(s),e.push(o),n.push(u),a.push(s),a.push(o),a.push(u)}for(t.sort(qt),e.sort(qt),n.sort(qt),a.sort(qt),r=0;r<7;r++)e[r]=at(e[r]),n[r]=at(n[r]),a[r]=at(a[r]);this._weekdaysRegex=new RegExp(`^(${a.join("|")})`,"i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(`^(${n.join("|")})`,"i"),this._weekdaysShortStrictRegex=new RegExp(`^(${e.join("|")})`,"i"),this._weekdaysMinStrictRegex=new RegExp(`^(${t.join("|")})`,"i")}}function qt(t,e){return e.length-t.length}const jt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:Lt,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ct,monthsShort:Rt,week:{dow:0,doy:6},weekdays:At,weekdaysMin:Et,weekdaysShort:kt,meridiemParse:/[ap]\.?m?\.?/i};function Ft(t,e,n){const a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length);let i,s=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&h(t[i])!==h(e[i]))&&s++;return s+r}function Gt(t,e){T(null,[t,t.length,!1],null,e)}function Vt(t,e){return Bt(t,e.locale).toString()}function zt(t){return Yt(t).toString()}function Bt(t,e=Xt(),n){return St(t,e.firstDayOfWeek(),e.firstDayOfYear(),n).year}function Yt(t,e){return St(t,1,4,e).year}function Ht(t,e){T(t,null,null,(function(t,n){let a=function(t,e={}){return e._isUTC?e._offset||0:function(t){return 15*-Math.round(t.getTimezoneOffset()/15)}(t)}(t,{_isUTC:n.isUTC,_offset:n.offset}),r="+";return a<0&&(a=-a,r="-"),r+y(~~(a/60),2)+e+y(~~a%60,2)}))}const Ut=/([\+\-]|\d\d)/gi,Wt={},Kt={};let $t;function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function Zt(t,e){let n;return t&&(f(e)?n=Xt(t):r(t)&&(n=Qt(t,e)),n&&($t=n)),$t&&$t._abbr}function Qt(t,e){if(null===e)return delete Wt[t],$t=Xt("en"),null;if(!e)return;let n=jt;if(e.abbr=t,null!=e.parentLocale){if(null==Wt[e.parentLocale])return Kt[e.parentLocale]||(Kt[e.parentLocale]=[]),Kt[e.parentLocale].push({name:t,config:e}),null;n=Wt[e.parentLocale]._config}return Wt[t]=new Mt(function(t,e){const n=Object.assign({},t);for(const a in e)d(e,a)&&(c(t[a])&&c(e[a])?(n[a]={},Object.assign(n[a],t[a]),Object.assign(n[a],e[a])):null!=e[a]?n[a]=e[a]:delete n[a]);for(const a in t)d(t,a)&&!d(e,a)&&c(t[a])&&(n[a]=Object.assign({},n[a]));return n}(n,e)),Kt[t]&&Kt[t].forEach((function(t){Qt(t.name,t.config)})),Zt(t),Wt[t]}function Xt(t){return Wt.en||(Zt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal(t){const e=t%10;return t+(1===h(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),T("w",["ww",2,!1],"wo",(function(t,e){return function(t,e=Xt(),n){return e.week(t,void 0)}(t,e.locale).toString(10)})),T("W",["WW",2,!1],"Wo",(function(t){return function(t,e){return St(t,1,4,void 0).week}(t).toString(10)})),b("week","w"),b("isoWeek","W"),et("w",B),et("ww",B,F),et("W",B),et("WW",B,F),st(["w","ww","W","WW"],(function(t,e,n,a){return e[a.substr(0,1)]=h(t),n})),T(null,["gg",2,!1],null,(function(t,e){return(Bt(t,e.locale)%100).toString()})),T(null,["GG",2,!1],null,(function(t){return(Yt(t)%100).toString()})),Gt("gggg",Vt),Gt("ggggg",Vt),Gt("GGGG",zt),Gt("GGGGG",zt),b("weekYear","gg"),b("isoWeekYear","GG"),et("G",J),et("g",J),et("GG",B,F),et("gg",B,F),et("GGGG",W,V),et("gggg",W,V),et("GGGGG",K,z),et("ggggg",K,z),st(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,a){return e[a.substr(0,2)]=h(t),n})),st(["gg","GG"],(function(t,e,n,a){return e[a]=dt(t),n})),T("Y",null,null,(function(t,e){const n=E(t,e.isUTC);return n<=9999?n.toString(10):"+"+n})),T(null,["YY",2,!1],null,(function(t,e){return(E(t,e.isUTC)%100).toString(10)})),T(null,["YYYY",4,!1],null,lt),T(null,["YYYYY",5,!1],null,lt),T(null,["YYYYYY",6,!0],null,lt),b("year","y"),et("Y",J),et("YY",B,F),et("YYYY",W,V),et("YYYYY",K,z),et("YYYYYY",K,z),it(["YYYYY","YYYYYY"],0),it("YYYY",(function(t,e,n){return e[0]=2===t.length?dt(t):h(t),n})),it("YY",(function(t,e,n){return e[0]=dt(t),n})),it("Y",(function(t,e,n){return e[0]=parseInt(t,10),n})),T("z",null,null,(function(t,e){return e.isUTC?"UTC":""})),T("zz",null,null,(function(t,e){return e.isUTC?"Coordinated Universal Time":""})),T("X",null,null,(function(t){return function(t){return Math.floor(t.valueOf()/1e3)}(t).toString(10)})),T("x",null,null,(function(t){return t.valueOf().toString(10)})),et("x",J),et("X",Q),it("X",(function(t,e,n){return n._d=new Date(1e3*parseFloat(t)),n})),it("x",(function(t,e,n){return n._d=new Date(h(t)),n})),T("s",["ss",2,!1],null,(function(t,e){return N(t,e.isUTC).toString(10)})),b("second","s"),et("s",B),et("ss",B,F),it(["s","ss"],5),T("Q",null,"Qo",(function(t,e){return function(t,e=!1){return Math.ceil((k(t,e)+1)/3)}(t,e.isUTC).toString(10)})),b("quarter","Q"),et("Q",j),it("Q",(function(t,e,n){return e[1]=3*(h(t)-1),n})),Ht("Z",":"),Ht("ZZ",""),et("Z",Z),et("ZZ",Z),it(["Z","ZZ"],(function(t,e,n){return n._useUTC=!0,n._tzm=function(t,e){const n=(e||"").match(t);if(null===n)return null;const a=n[n.length-1].match(Ut)||["-","0","0"],r=60*parseInt(a[1],10)+h(a[2]);return 0===r?0:"+"===a[0]?r:-r}(Z,t),n})),T("M",["MM",2,!1],"Mo",(function(t,e){return(k(t,e.isUTC)+1).toString(10)})),T("MMM",null,null,(function(t,e){return e.locale.monthsShort(t,e.format,e.isUTC)})),T("MMMM",null,null,(function(t,e){return e.locale.months(t,e.format,e.isUTC)})),b("month","M"),et("M",B),et("MM",B,F),et("MMM",(function(t,e){return e.monthsShortRegex(t)})),et("MMMM",(function(t,e){return e.monthsRegex(t)})),it(["M","MM"],(function(t,e,n){return e[1]=h(t)-1,n})),it(["MMM","MMMM"],(function(t,e,n,a){const r=n._locale.monthsParse(t,a,n._strict);return null!=r?e[1]=r:ut(n).invalidMonth=!!t,n})),T("m",["mm",2,!1],null,(function(t,e){return I(t,e.isUTC).toString(10)})),b("minute","m"),et("m",B),et("mm",B,F),it(["m","mm"],4),function(){let t;for(T("S",null,null,(function(t,e){return(~~(C(t,e.isUTC)/100)).toString(10)})),T(null,["SS",2,!1],null,(function(t,e){return(~~(C(t,e.isUTC)/10)).toString(10)})),T(null,["SSS",3,!1],null,(function(t,e){return C(t,e.isUTC).toString(10)})),T(null,["SSSS",4,!1],null,(function(t,e){return(10*C(t,e.isUTC)).toString(10)})),T(null,["SSSSS",5,!1],null,(function(t,e){return(100*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSS",6,!1],null,(function(t,e){return(1e3*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSS",7,!1],null,(function(t,e){return(1e4*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSSS",8,!1],null,(function(t,e){return(1e5*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSSSS",9,!1],null,(function(t,e){return(1e6*C(t,e.isUTC)).toString(10)})),b("millisecond","ms"),et("S",U,j),et("SS",U,F),et("SSS",U,G),t="SSSS";t.length<=9;t+="S")et(t,$);function e(t,e,n){return e[6]=h(1e3*parseFloat("0."+t)),n}for(t="S";t.length<=9;t+="S")it(t,e)}(),function(){function t(t,e){return S(t,e)%12||12}function e(t,e){T(t,null,null,(function(t,n){return n.locale.meridiem(S(t,n.isUTC),I(t,n.isUTC),e)}))}function n(t,e){return e._meridiemParse}T("H",["HH",2,!1],null,(function(t,e){return S(t,e.isUTC).toString(10)})),T("h",["hh",2,!1],null,(function(e,n){return t(e,n.isUTC).toString(10)})),T("k",["kk",2,!1],null,(function(t,e){return function(t,e){return S(t,e)||24}(t,e.isUTC).toString(10)})),T("hmm",null,null,(function(e,n){return`${t(e,n.isUTC)}${y(I(e,n.isUTC),2)}`})),T("hmmss",null,null,(function(e,n){return`${t(e,n.isUTC)}${y(I(e,n.isUTC),2)}${y(N(e,n.isUTC),2)}`})),T("Hmm",null,null,(function(t,e){return`${S(t,e.isUTC)}${y(I(t,e.isUTC),2)}`})),T("Hmmss",null,null,(function(t,e){return`${S(t,e.isUTC)}${y(I(t,e.isUTC),2)}${y(N(t,e.isUTC),2)}`})),e("a",!0),e("A",!1),b("hour","h"),et("a",n),et("A",n),et("H",B),et("h",B),et("k",B),et("HH",B,F),et("hh",B,F),et("kk",B,F),et("hmm",Y),et("hmmss",H),et("Hmm",Y),et("Hmmss",H),it(["H","HH"],3),it(["k","kk"],(function(t,e,n){const a=h(t);return e[3]=24===a?0:a,n})),it(["a","A"],(function(t,e,n){return n._isPm=n._locale.isPM(t),n._meridiem=t,n})),it(["h","hh"],(function(t,e,n){return e[3]=h(t),ut(n).bigHour=!0,n})),it("hmm",(function(t,e,n){const a=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a)),ut(n).bigHour=!0,n})),it("hmmss",(function(t,e,n){const a=t.length-4,r=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a,2)),e[5]=h(t.substr(r)),ut(n).bigHour=!0,n})),it("Hmm",(function(t,e,n){const a=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a)),n})),it("Hmmss",(function(t,e,n){const a=t.length-4,r=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a,2)),e[5]=h(t.substr(r)),n}))}(),T("DDD",["DDDD",3,!1],"DDDo",(function(t){return Ot(t).toString(10)})),b("dayOfYear","DDD"),et("DDD",U),et("DDDD",G),it(["DDD","DDDD"],(function(t,e,n){return n._dayOfYear=h(t),n})),T("d",null,"do",(function(t,e){return R(t,e.isUTC).toString(10)})),T("dd",null,null,(function(t,e){return e.locale.weekdaysMin(t,e.format,e.isUTC)})),T("ddd",null,null,(function(t,e){return e.locale.weekdaysShort(t,e.format,e.isUTC)})),T("dddd",null,null,(function(t,e){return e.locale.weekdays(t,e.format,e.isUTC)})),T("e",null,null,(function(t,e){return Be(t,e.locale,e.isUTC).toString(10)})),T("E",null,null,(function(t,e){return function(t,e){return R(t,e)||7}(t,e.isUTC).toString(10)})),b("day","d"),b("weekday","e"),b("isoWeekday","E"),et("d",B),et("e",B),et("E",B),et("dd",(function(t,e){return e.weekdaysMinRegex(t)})),et("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),et("dddd",(function(t,e){return e.weekdaysRegex(t)})),st(["dd","ddd","dddd"],(function(t,e,n,a){const r=n._locale.weekdaysParse(t,a,n._strict);return null!=r?e.d=r:ut(n).invalidWeekday=!!t,n})),st(["d","e","E"],(function(t,e,n,a){return e[a]=h(t),n})),T("D",["DD",2,!1],"Do",(function(t,e){return A(t,e.isUTC).toString(10)})),b("date","D"),et("D",B),et("DD",B,F),et("Do",(function(t,e){return e._dayOfMonthOrdinalParse||e._ordinalParse})),it(["D","DD"],2),it("Do",(function(t,e,n){return e[2]=h(t.match(B)[0]),n}))),t?function(t){let e,n,a=0;for(;a<t.length;){const i=Jt(t[a]).split("-");let s=i.length;for(e=Jt(t[a+1]),e=e?e.split("-"):null;s>0;){if(r=i.slice(0,s).join("-"),Wt[r]||console.error(`Khronos locale error: please load locale "${r}" before using it`),n=Wt[r],n)return n;if(e&&e.length>=s&&Ft(i,e,!0)>=s-1)break;s--}a++}var r;return null}(l(t)?t:[t]):$t}const te=["year","quarter","month","week","day","hours","minutes","seconds","milliseconds"],ee=te.reduce((t,e)=>(t[e]=!0,t),{});function ne(t){return t<0?Math.floor(t):Math.ceil(t)}function ae(t){return 4800*t/146097}function re(t){return 146097*t/4800}let ie=Math.round;function se(t,e,n,a,r){return r.relativeTime(e||1,!!n,t,a)}class oe{constructor(t,e={}){this._data={},this._locale=Xt(),this._locale=e&&e._locale||Xt();const n=t.year||0,r=t.quarter||0,i=t.month||0,s=t.week||0,o=t.day||0,u=t.hours||0,l=t.minutes||0,d=t.seconds||0,c=t.milliseconds||0;return this._isValid=function(t){if(Object.keys(t).some(e=>e in ee&&null===t[e]||isNaN(t[e])))return!1;let e=!1;for(let n=0;n<te.length;++n)if(t[te[n]]){if(e)return!1;t[te[n]]!==h(t[te[n]])&&(e=!0)}return!0}(t),this._milliseconds=+c+1e3*d+60*l*1e3+1e3*u*60*60,this._days=+o+7*s,this._months=+i+3*r+12*n,function(t){let e=t._milliseconds,n=t._days,r=t._months;const i=t._data;e>=0&&n>=0&&r>=0||e<=0&&n<=0&&r<=0||(e+=864e5*ne(re(r)+n),n=0,r=0),i.milliseconds=e%1e3;const s=a(e/1e3);i.seconds=s%60;const o=a(s/60);i.minutes=o%60;const u=a(o/60);i.hours=u%24,n+=a(u/24);const l=a(ae(n));r+=l,n-=ne(re(l));const d=a(r/12);return r%=12,i.day=n,i.month=r,i.year=d,t}(this)}isValid(){return this._isValid}humanize(t){if(!this.isValid())return this.localeData().invalidDate;const e=this.localeData();let n=function(t,e,n){const a=Me(t).abs(),r=ie(a.as("s")),i=ie(a.as("m")),s=ie(a.as("h")),o=ie(a.as("d")),u=ie(a.as("M")),l=ie(a.as("y")),d=r<=44&&["s",r]||r<45&&["ss",r]||i<=1&&["m"]||i<45&&["mm",i]||s<=1&&["h"]||s<22&&["hh",s]||o<=1&&["d"]||o<26&&["dd",o]||u<=1&&["M"]||u<11&&["MM",u]||l<=1&&["y"]||["yy",l];return se.apply(null,[d[0],d[1],e,+t>0,n])}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}localeData(){return this._locale}locale(t){return t?(this._locale=Xt(t)||this._locale,this):this._locale._abbr}abs(){const t=Math.abs,e=this._data;return this._milliseconds=t(this._milliseconds),this._days=t(this._days),this._months=t(this._months),e.milliseconds=t(e.milliseconds),e.seconds=t(e.seconds),e.minutes=t(e.minutes),e.hours=t(e.hours),e.month=t(e.month),e.year=t(e.year),this}as(t){if(!this.isValid())return NaN;let e,n;const a=this._milliseconds,r=m(t);if("month"===r||"year"===r)return e=this._days+a/864e5,n=this._months+ae(e),"month"===r?n:n/12;switch(e=this._days+Math.round(re(this._months)),r){case"week":return e/7+a/6048e5;case"day":return e+a/864e5;case"hours":return 24*e+a/36e5;case"minutes":return 1440*e+a/6e4;case"seconds":return 86400*e+a/1e3;case"milliseconds":return Math.floor(864e5*e)+a;default:throw new Error("Unknown unit "+r)}}valueOf(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*h(this._months/12):NaN}}function ue(t){if(null==t._isValid){const e=ut(t),n=Array.prototype.some.call(e.parsedDateParts,(function(t){return null!=t}));let a=!isNaN(t._d&&t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return a;t._isValid=a}return t._isValid}function le(t,e){return t._d=new Date(NaN),Object.assign(ut(t),e||{userInvalidated:!0}),t}const de=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,fe=/Z|[+-]\d\d(?::?\d\d)?/,he=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/,!0],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/,!0],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/,!0],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/,!0],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/,!0],["YYYYMMDD",/\d{8}/,!0],["GGGG[W]WWE",/\d{4}W\d{3}/,!0],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/,!0]],ge=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pe=/^\/?Date\((\-?\d+)/i,be={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480},me=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function ye(t){if(!r(t._i))return t;const e=t._i,n=de.exec(e)||ce.exec(e);let a,i,s,o,u,l;if(!n)return t._isValid=!1,t;for(u=0,l=he.length;u<l;u++)if(he[u][1].exec(n[1])){i=he[u][0],a=!1!==he[u][2];break}if(null==i)return t._isValid=!1,t;if(n[3]){for(u=0,l=ge.length;u<l;u++)if(ge[u][1].exec(n[3])){s=(n[2]||" ")+ge[u][0];break}if(null==s)return t._isValid=!1,t}if(!a&&null!=s)return t._isValid=!1,t;if(n[4]){if(!fe.exec(n[4]))return t._isValid=!1,t;o="Z"}return t._f=i+(s||"")+(o||""),Ie(t)}function ve(t){const e=parseInt(t,10);return e<=49?e+2e3:e}function xe(t){if(!r(t._i))return t;const e=me.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim());if(!e)return function(t){return t._isValid=!1,t}(t);const n=function(t,e,n,a,r,i){const s=[ve(t),Rt.indexOf(e),parseInt(n,10),parseInt(a,10),parseInt(r,10)];return i&&s.push(parseInt(i,10)),s}(e[4],e[3],e[2],e[5],e[6],e[7]);return function(t,e,n){return!t||kt.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(ut(n).weekdayMismatch=!0,n._isValid=!1,!1)}(e[1],n,t)?(t._a=n,t._tzm=function(t,e,n){if(t)return be[t];if(e)return 0;{const t=parseInt(n,10),e=t%100;return(t-e)/100*60+e}}(e[8],e[9],e[10]),t._d=O.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),ut(t).rfc2822=!0,t):t}function _e(t,e,n,a,r=0){const i=Xt(n||"en");if(!i)throw new Error(`Locale "${n}" is not defined, please add it with "defineLocale(...)"`);const u=function(t,e,n,a,r=0){if(!s(t))return n.invalidDate;const i=Te(e,n);return v[i]=v[i]||function(t){const e=t.match(_),n=e.length,a=new Array(n);for(let i=0;i<n;i++)a[i]=x[e[i]]?x[e[i]]:(r=e[i]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");var r;return function(e,r,i,s=0){const u=r.postvalue(e);let l="";for(let d=0;d<n;d++)l+=o(a[d])?a[d].call(null,u,{format:t,locale:r,isUTC:i,offset:s}):a[d];return l}}(i),v[i](t,n,a,r)}(t,e||(a?"YYYY-MM-DDTHH:mm:ss[Z]":"YYYY-MM-DDTHH:mm:ssZ"),i,a,r);return u?i.postformat(u):u}function Te(t,e){let n=t,a=5;const r=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,i=t=>e.formatLongDate(t)||t;for(r.lastIndex=0;a>=0&&r.test(n);)n=n.replace(r,i),r.lastIndex=0,a-=1;return n}function Oe(t,e,n){return null!=t?t:null!=e?e:n}function we(t){const e=[];let n,a,r,i,s;if(t._d)return t;for(r=function(t){const e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){let e,n,a,r,i,s,o,u;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)i=1,s=4,n=Oe(e.GG,t._a[0],St(new Date,1,4).year),a=Oe(e.W,1),r=Oe(e.E,1),(r<1||r>7)&&(u=!0);else{i=t._locale._week.dow,s=t._locale._week.doy;const o=St(new Date,i,s);n=Oe(e.gg,t._a[0],o.year),a=Oe(e.w,o.week),null!=e.d?(r=e.d,(r<0||r>6)&&(u=!0)):null!=e.e?(r=e.e+i,(e.e<0||e.e>6)&&(u=!0)):r=i}a<1||a>It(n,i,s)?ut(t)._overflowWeeks=!0:null!=u?ut(t)._overflowWeekday=!0:(o=function(t,e,n,a,r){const i=1+7*(e-1)+(7+n-a)%7+wt(t,a,r);let s,o;return i<=0?(s=t-1,o=ct(s)+i):i>ct(t)?(s=t+1,o=i-ct(t)):(s=t,o=i),{year:s,dayOfYear:o}}(n,a,r,i,s),t._a[0]=o.year,t._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(s=Oe(t._a[0],r[0]),(t._dayOfYear>ct(s)||0===t._dayOfYear)&&(ut(t)._overflowDayOfYear=!0),a=new Date(Date.UTC(s,0,t._dayOfYear)),t._a[1]=a.getUTCMonth(),t._a[2]=a.getUTCDate()),n=0;n<3&&null==t._a[n];++n)t._a[n]=e[n]=r[n];for(;n<7;n++)t._a[n]=e[n]=null==t._a[n]?2===n?1:0:t._a[n];return 24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?O:w).apply(null,e),i=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==i&&(ut(t).weekdayMismatch=!0),t}function Se(t){let e;const n=t._a;return n&&-2===ut(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>ht(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,ut(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),ut(t)._overflowWeeks&&-1===e&&(e=7),ut(t)._overflowWeekday&&-1===e&&(e=8),ut(t).overflow=e),t}function Ie(t){if("ISO_8601"===t._f)return ye(t);if("RFC_2822"===t._f)return xe(t);if(t._a=[],ut(t).empty=!0,l(t._f)||!t._i&&0!==t._i)return t;let e=t._i.toString(),n=0;const a=e.length,r=Te(t._f,t._locale).match(_)||[];let i,s,o,u;for(i=0;i<r.length;i++)s=r[i],o=(e.match(nt(s,t._locale))||[])[0],o&&(u=e.substr(0,e.indexOf(o)),u.length>0&&ut(t).unusedInput.push(u),e=e.slice(e.indexOf(o)+o.length),n+=o.length),x[s]?(o?ut(t).empty=!1:ut(t).unusedTokens.push(s),ot(s,o,t)):t._strict&&!o&&ut(t).unusedTokens.push(s);return ut(t).charsLeftOver=a-n,e.length>0&&ut(t).unusedInput.push(e),t._a[3]<=12&&!0===ut(t).bigHour&&t._a[3]>0&&(ut(t).bigHour=void 0),ut(t).parsedDateParts=t._a.slice(0),ut(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){let a=e;if(null==n)return a;if(null!=t.meridiemHour)return t.meridiemHour(a,n);if(null==t.isPM)return a;const r=t.isPM(n);return r&&a<12&&(a+=12),r||12!==a||(a=0),a}(t._locale,t._a[3],t._meridiem),we(t),Se(t)}function Ne(t,e,n,a,s){return i(t)?t:function(t,e,n,a,s){const o={};let h=t;return(c(h)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;let e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(h)||l(h)&&0===h.length)&&(h=void 0),o._useUTC=o._isUTC=s,o._l=n,o._i=h,o._f=e,o._strict=a,function(t){const e=Se(function(t){let e=t._i;const n=t._f;return t._locale=t._locale||Xt(t._l),null===e||void 0===n&&""===e?le(t,{nullInput:!0}):(r(e)&&(t._i=e=t._locale.preparse(e)),i(e)?(t._d=xt(e),t):(l(n)?function(t){let e,n,a,r,i;if(!t._f||0===t._f.length)return ut(t).invalidFormat=!0,le(t);for(i=0;i<t._f.length;i++)r=0,e=Object.assign({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],Ie(e),ue(e)&&(r+=ut(e).charsLeftOver,r+=10*ut(e).unusedTokens.length,ut(e).score=r,(null==a||r<a)&&(a=r,n=e));Object.assign(t,n||e)}(t):n?Ie(t):function(t){const e=t._i;if(f(e))t._d=new Date;else if(i(e))t._d=xt(e);else if(r(e))!function(t){if(!r(t._i))return t;const e=pe.exec(t._i);null!==e?t._d=new Date(+e[1]):(ye(t),!1!==t._isValid||(delete t._isValid,xe(t),!1!==t._isValid||(delete t._isValid,le(t))))}(t);else if(l(e)&&e.length){const n=e.slice(0);t._a=n.map(t=>r(t)?parseInt(t,10):t),we(t)}else if(c(e))!function(t){if(t._d)return t;const e=t._i;if(c(e)){const n=function(t){const e={};let n,a;for(a in t)d(t,a)&&(n=m(a),n&&(e[n]=t[a]));return e}(e);t._a=[n.year,n.month,n.day,n.hours,n.minutes,n.seconds,n.milliseconds].map(t=>r(t)?parseInt(t,10):t)}we(t)}(t);else{if(!u(e))return le(t);t._d=new Date(e)}}(t),ue(t)||(t._d=null),t))}(t));return e._d=new Date(null!=e._d?e._d.getTime():NaN),ue(Object.assign({},e,{_isValid:null}))||(e._d=new Date(NaN)),e}(o)}(t,e,n,a,s)._d}function Ce(t){return t instanceof Date?new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()):null}function Re(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ae(t,e,n="milliseconds"){return!(!t||!e)&&("milliseconds"===n?t.valueOf()>e.valueOf():e.valueOf()<_t(t,n).valueOf())}function ke(t,e,n="milliseconds"){return!(!t||!e)&&("milliseconds"===n?t.valueOf()<e.valueOf():Tt(t,n).valueOf()<e.valueOf())}function Ee(t,e){return!(void 0===e||!e||!e.length)&&e.some(e=>e===t.getDay())}function Le(t,e,n="milliseconds"){if(!t||!e)return!1;if("milliseconds"===n)return t.valueOf()===e.valueOf();const a=e.valueOf();return _t(t,n).valueOf()<=a&&a<=Tt(t,n).valueOf()}const De=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Pe=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Me(t,e,n={}){const a=function(t,e){if(null==t)return{};if(t instanceof oe)return{milliseconds:t._milliseconds,day:t._days,month:t._months};if(u(t))return e?{[e]:t}:{milliseconds:t};if(r(t)){let e=De.exec(t);if(e){const t="-"===e[1]?-1:1;return{year:0,day:h(e[2])*t,hours:h(e[3])*t,minutes:h(e[4])*t,seconds:h(e[5])*t,milliseconds:h(Re(1e3*h(e[6])))*t}}if(e=Pe.exec(t),e){const t="-"===e[1]?-1:1;return{year:qe(e[2],t),month:qe(e[3],t),week:qe(e[4],t),day:qe(e[5],t),hours:qe(e[6],t),minutes:qe(e[7],t),seconds:qe(e[8],t)}}}if(c(t)&&("from"in t||"to"in t)){const e=function(t,e){if(!s(t)||!s(e))return{milliseconds:0,months:0};let n;const a=function(t,e,n={}){if(!n._isUTC)return t;const a=xt(e),r=6e4*(n._offset||0),i=t.valueOf()-a.valueOf()+r;return a.setTime(a.valueOf()+i),a}(e,t,{_offset:t.getTimezoneOffset()});return ke(t,a)?n=je(t,a):(n=je(a,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n}(Ne(t.from),Ne(t.to));return{milliseconds:e.milliseconds,month:e.months}}return t}(t,e);return new oe(a,n)}function qe(t,e){const n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function je(t,e){const n={milliseconds:0,months:0};return n.months=k(e)-k(t)+12*(E(e)-E(t)),Ae(Fe(xt(t),n.months,"month"),e)&&--n.months,n.milliseconds=+e-+Fe(xt(t),n.months,"month"),n}function Fe(t,e,n,a){return Ge(t,Me(e,n),1,a)}function Ge(t,e,n,a){const r=e._milliseconds,i=Re(e._days),s=Re(e._months);return s&&yt(t,k(t,a)+s*n,a),i&&vt(t,A(t,a)+i*n,a),r&&function(t,e){t.setTime(e)}(t,function(t){return t.getTime()}(t)+r*n),xt(t)}function Ve(t,e,n=Xt(),a){const i=R(t,a);return Fe(t,function(t,e){if(!r(t))return t;const n=parseInt(t,10);if(!isNaN(n))return n;const a=e.weekdaysParse(t);return u(a)?a:null}(e,n)-i,"day")}function ze(t,e){return R(t,e)}function Be(t,e=Xt(),n){return(R(t,n)+7-e.firstDayOfWeek())%7}const Ye="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),He="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");function Ue(t){return t>1&&t<5&&1!=~~(t/10)}function We(t,e,n,a){const r=t+" ";switch(n){case"s":return e||a?"pár sekund":"pár sekundami";case"ss":return e||a?r+(Ue(t)?"sekundy":"sekund"):r+"sekundami";case"m":return e?"minuta":a?"minutu":"minutou";case"mm":return e||a?r+(Ue(t)?"minuty":"minut"):r+"minutami";case"h":return e?"hodina":a?"hodinu":"hodinou";case"hh":return e||a?r+(Ue(t)?"hodiny":"hodin"):r+"hodinami";case"d":return e||a?"den":"dnem";case"dd":return e||a?r+(Ue(t)?"dny":"dní"):r+"dny";case"M":return e||a?"měsíc":"měsícem";case"MM":return e||a?r+(Ue(t)?"měsíce":"měsíců"):r+"měsíci";case"y":return e||a?"rok":"rokem";case"yy":return e||a?r+(Ue(t)?"roky":"let"):r+"lety"}}const Ke=function(t){let e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n},$e=function(t){let e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n},Je={abbr:"cs",months:Ye,monthsShort:He,monthsParse:function(t,e){let n,a=[];for(n=0;n<12;n++)a[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return a}(Ye,He),shortMonthsParse:Ke(He),longMonthsParse:$e(Ye),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek(t){switch(ze(t)){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek(t){switch(ze(t)){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:We,ss:We,m:We,mm:We,h:We,hh:We,d:We,dd:We,M:We,MM:We,y:We,yy:We},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}};function Ze(t,e,n,a){const r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}const Qe={abbr:"de",months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Ze,mm:"%d Minuten",h:Ze,hh:"%d Stunden",d:Ze,dd:Ze,M:Ze,MM:Ze,y:Ze,yy:Ze},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}};let Xe="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),tn="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),en=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],nn=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;const an={abbr:"es",months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:(t,e,n)=>t?/-MMM-/.test(e)?tn[k(t,n)]:Xe[k(t,n)]:Xe,monthsRegex:nn,monthsShortRegex:nn,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:en,longMonthsParse:en,shortMonthsParse:en,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:t=>"[hoy a la"+(1!==S(t)?"s":"")+"] LT",nextDay:t=>"[mañana a la"+(1!==S(t)?"s":"")+"] LT",nextWeek:t=>"dddd [a la"+(1!==S(t)?"s":"")+"] LT",lastDay:t=>"[ayer a la"+(1!==S(t)?"s":"")+"] LT",lastWeek:t=>"[el] dddd [pasado a la"+(1!==S(t)?"s":"")+"] LT",sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}},rn={abbr:"fr",months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal(t,e){const n=Number(t);switch(e){case"D":return n+(1===n?"er":"");default:case"M":case"Q":case"DDD":case"d":return n+(1===n?"er":"e");case"w":case"W":return n+(1===n?"re":"e")}},week:{dow:1,doy:4}},sn={abbr:"id",months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:(t,e)=>(12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0),meridiem:(t,e,n)=>t<11?"pagi":t<15?"siang":t<19?"sore":"malam",calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}},on={abbr:"it",months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek(t){switch(ze(t)){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:t=>(/^[0-9].+$/.test(t.toString(10))?"tra":"in")+" "+t,past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}},un={abbr:"ja",months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:t=>"午後"===t,meridiem:(t,e,n)=>t<12?"午前":"午後",calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t.toString(10)}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}},ln={abbr:"ko",months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t.toString(10)}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}};let dn="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),cn="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function fn(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function hn(t,e,n){let a=t+" ";switch(n){case"ss":return a+(fn(t)?"sekundy":"sekund");case"m":return e?"minuta":"minutę";case"mm":return a+(fn(t)?"minuty":"minut");case"h":return e?"godzina":"godzinę";case"hh":return a+(fn(t)?"godziny":"godzin");case"MM":return a+(fn(t)?"miesiące":"miesięcy");case"yy":return a+(fn(t)?"lata":"lat")}}const gn={abbr:"pl",months:(t,e,n)=>t?""===e?"("+cn[k(t,n)]+"|"+dn[k(t,n)]+")":/D MMMM/.test(e)?cn[k(t,n)]:dn[k(t,n)]:dn,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek(t){switch(ze(t)){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 5:return"[W piątek o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek(t){switch(ze(t)){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 4:return"[W zeszłą czwartek o] LT";case 5:return"[W zeszłą piątek o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:hn,m:hn,mm:hn,h:hn,hh:hn,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:hn,y:"rok",yy:hn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}},pn={abbr:"pt-br",months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:t=>0===ze(t)||6===ze(t)?"[Último] dddd [às] LT":"[Última] dddd [às] LT",sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"},bn={abbr:"zh-cn",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:(t,e)=>(12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12),meridiem(t,e,n){let a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal(t,e){const n=Number(t);switch(e){case"d":case"D":case"DDD":return n+"日";case"M":return n+"月";case"w":case"W":return n+"周";default:return n.toString()}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}},xrYK:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},xs3f:function(t,e,n){var a=n("2oRo"),r=n("zk60"),i=a["__core-js_shared__"]||r("__core-js_shared__",{});t.exports=i},"y/5f":function(t,e,n){(function(t){var a=n("Wa4q"),r=n("KQir"),i=e&&!e.nodeType&&e,s=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=s&&s.exports===i?a.Buffer:void 0;t.exports=(o?o.isBuffer:void 0)||r}).call(this,n("YuTi")(t))},yCtX:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("HDdC"),r=n("ngJS"),i=n("jZKg");function s(t,e){return e?Object(i.a)(t,e):new a.a(Object(r.a)(t))}},yGOH:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},yJti:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t[t.ValueOk=0]="ValueOk",t[t.ValueStale=1]="ValueStale",t[t.ValueNone=2]="ValueNone",t[t.ValueException=3]="ValueException",t}({})},yPMs:function(t,e,n){!function(t){"use strict";t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},yT6U:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e=!1){let n=t;return(!a.isArray(t)||a.isArray(t)&&e)&&(n=[t]),n}}},yYhs:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("CoVI"),s=n("mfoh"),o=(n("CFvb"),n("MP8s"),n("f95s"),n("gk6K")),u=(n("dApe"),n("ZhuC")),l=n("fxL3"),d=n("TNUL"),c=n("rZud"),f=n("woSy"),h=n("jV1L"),g=n("pcHL"),p=n("WaXT"),b=n("OIDT"),m=n("HIU9"),y=n("uNpg"),v=n("Fwy9"),x=n("C523"),_=n("4Dmd");n("14R3"),n.d(e,"b",(function(){return T})),n.d(e,"a",(function(){return s.a}));var T=function(){function t(){}var e;return e=t,t.forRoot=function(){return{ngModule:e,providers:[o.a]}},e=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.NgModule)({declarations:[l.a,d.a,c.a,u.a,v.a,x.a,h.a,g.a,f.a,p.a,m.a,b.a,y.a,_.a,i.a],exports:[l.a,d.a,c.a,u.a,v.a,x.a,h.a,g.a,f.a,p.a,m.a,b.a,y.a,_.a,i.a],imports:[r.CommonModule],providers:[]})],t)}()},"yb/u":function(t,e,n){var a=n("ioe2"),r=n("FGWQ");t.exports=function(t){return null==t?[]:a(t,r(t))}},yoRg:function(t,e,n){var a=n("UTVS"),r=n("/GqU"),i=n("TWQb").indexOf,s=n("0BK2");t.exports=function(t,e){var n,o=r(t),u=0,l=[];for(n in o)!a(s,n)&&a(o,n)&&l.push(n);for(;e.length>u;)a(o,n=e[u++])&&(~i(l,n)||l.push(n));return l}},"yt+r":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="es-ES">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Alternar navegación</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Consola</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Clúster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitores</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Servicios</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuración</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mapa de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Módulos de gestor</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Registros</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Repositorios</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloque</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Imágenes</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Duplicación</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemas de archivos</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Usuarios</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Papeleras</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Seleccione un idioma</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Cargando datos del panel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Selector de hora de Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Restablecer ajustes</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Atrás</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Error al cargar los datos.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>seleccionados</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>encontrados</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nombre</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descripción</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descripción larga</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Opción por defecto</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon por defecto</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valores</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Guardar</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visor del mapa de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Cargando...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nombre de host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Este campo es obligatorio.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sí, seguro.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Cancelar</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Cerrar</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista de hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Rendimiento general</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>No se encuentra ninguna entrada</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Registros del clúster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Registros de auditoría</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Cargando configuración...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>No es posible cargar la configuración.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Módulo del gestor de edición</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>El valor introducido no es un UUID válido, por ejemplo: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>El valor introducido debe ser una dirección IP válida.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>El valor introducido debe ser un número.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>El valor introducido debe ser un número o un decimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Actualizar</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID de clúster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Mapa de supervisión modificado</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>Época de mapa de supervisión</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quórum de con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quórum de mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con requerido</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon requerido</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Con quórum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Sin quórum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Añadir</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Características</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Indicadores OSD de todo el clúster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Enviar</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avanzado...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioridad de recuperación de OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioridad</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizar valores de prioridad</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Este campo es obligatorio.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>El valor debe estar entre 0 y 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Reequilibrar peso</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profundo} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profundo} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista de OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valor</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Editar</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Suprimir</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Estadísticas</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clientes</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Cualquier cliente puede acceder</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Destinatarios</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo requerido</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Debe contener uno o varios valores separados por comas</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Por ejemplo:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo de acceso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Reducir privilegios</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Añadir clientes</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- No hay ningún clúster disponible --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Seleccione el clúster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Añadir daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Motor de almacenamiento</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- No hay ningún repositorio de datos disponible --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Seleccione el motor de almacenamiento --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Usuario de Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- No hay ningún usuario disponible --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Seleccione el usuario de Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID de usuario de CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- No hay ningún cliente disponible --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Seleccione el cliente de CephX --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nombre de CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etiqueta de seguridad</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Habilitar etiqueta de seguridad</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Ruta de CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>La ruta debe empezar por "/" y puede ir seguida de una palabra</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Se creará un directorio nuevo</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Ruta</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>La ruta solo puede ser una "/" o una palabra</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Se creará una papelera nueva</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocolo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Etiqueta NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Puede que los clientes no monten subdirectorios (es decir, si Etiqueta = foo, el cliente puede que no monte foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Al usar distintas opciones de Etiqueta, la misma Ruta se puede exportar varias veces.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Al usar distintas opciones de Pseudo, la misma Ruta se puede exportar varias veces.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- No hay ningún tipo de acceso disponible --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Seleccione el tipo de acceso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- No hay ninguna reducción de privilegios disponible --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Seleccione el tipo de reducción de privilegios de ID de usuario que se va a realizar --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocolo de transporte</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>¡Bienvenidos a Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>El nombre de usuario es obligatorio</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>La contraseña es obligatoria</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Entrada</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Lo sentimos. El usuario no existe en Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Prohibido</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Lo sentimos. No tiene permiso para ver lo que busca.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuración de RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Elimina el valor de configuración local. Se heredará y usará en su lugar el valor de configuración padre.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>El valor mínimo es 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista de repositorios</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>El nombre solo puede tener caracteres alfanuméricos, guiones y guiones bajos.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>El nombre del perfil de código de borrado que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Complemento</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Porciones de datos (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Debe ser igual o mayor que 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Porciones de código (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Debe ser igual o mayor que 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimador de durabilidad (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localización (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Dominio de error de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localización de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Ninguna</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Técnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Tamaño del paquete</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Raíz de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Clase de dispositivo de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>cualquiera</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Directorio</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nombre...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>El nombre del repositorio de Ceph que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo de repositorio</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Seleccione un tipo de repositorio --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupos de colocación</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Se necesita al menos un grupo de colocación.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>El clúster no puede gestionar tantos grupos de colocación. Vuelva a calcular la cantidad que necesita.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Ayuda para el cálculo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Tamaño replicado</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Indicadores</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sustituciones de códigos de borrado</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- No hay ningún perfil de código de borrado disponible --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Seleccione un perfil de código de borrado --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Conjunto de reglas de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Seleccione una regla de CRUSH --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regla de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Pasos de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compresión</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modo</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- No hay ningún algoritmo de compresión de borrado disponible --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Tamaño de Blob mínimo</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>p. ej. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>El valor debe ser mayor que 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Tamaño de Blob máximo</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>p. ej. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>El valor debe ser mayor que el tamaño de Blob mínimo</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Relación</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Relación de compresión</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>El valor debe estar entre 0,0 y 1,0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ej.: 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detalles</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detalles de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detalles de niveles de caché</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Mover una imagen a la papelera</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protección caduca a las</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>SIN PROTECCIÓN</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato de fecha erróneo. Use el formato "AAAA-MM-DD HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protección ya ha caducado. Seleccione una fecha del futuro o deje el campo vacío.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Mover imagen</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Resumen</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinos</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticación de descubrimiento</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Usuario</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Los nombres de usuario deben tener entre 8 y 64 caracteres y\n                        solo pueden incluir letras y estos caracteres: ".", "@", "-", "_" o ":".</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Contraseña</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Usuario mutuo</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Contraseña mutua</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Información disponible:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinos iSCSI no disponibles</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Repositorio</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Repositorio de datos</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Creados</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Tamaño</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objetos</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Tamaño del objeto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Aprovisionados</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/D</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unidad de repartición</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Recuento de repartición</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Padre</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefijo de nombre de bloque</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Orden</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantáneas</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Imagen</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Este ajuste sustituye al valor global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Este es el valor global. No se ha definido ningún valor para esta opción para esta imagen.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>No se permiten los caracteres "/" ni "@".</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- No hay ningún repositorio RBD disponible --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Seleccione un repositorio --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Usar un repositorio dedicado para datos</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Repositorio de datos</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Repositorio dedicado para almacenar los datos de objeto de RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Debe aumentar el tamaño.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avanzado</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Repartición</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unidad de repartición</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Seleccione la unidad de repartición --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Este campo es obligatorio porque se ha definido el recuento de repartición.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>La unidad de repartición es mayor que el tamaño del objeto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Recuento de repartición</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Este campo es obligatorio porque se ha definido la unidad de repartición.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>El recuento de repartición debe ser mayor que 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Se dispone a revertir</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vaciar papelera</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Todas</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Repositorio:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nombre del repositorio...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurar imágenes</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Para restaurar</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>escriba el nombre nuevo de la imagen y haga clic en</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nombre nuevo</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Caducó a las</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protección hasta</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topología iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Normalmente no es necesario cambiar los valores por defecto de estos parámetros.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Ajustes</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Almacén</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmar</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Ajustes avanzados</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN de destino</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>El IQN tiene un patrón erróneo.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Por ejemplo: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Más información</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Este destino tiene ajustes avanzados modificados.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portales</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Añadir portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Esta imagen tiene ajustes modificados.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Añadir imagen</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticación de ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciadores</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciador</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN del cliente</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>El IQN del iniciador debe ser exclusivo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Los nombres de usuario deben tener entre 8 y 64 caracteres y\n                        solo pueden incluir letras y estos caracteres: ".", "@", "-", "_" o ":".</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>El iniciador pertenece a un grupo. Las imágenes se configurarán en el grupo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>No se ha añadido ningún elemento.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Añadir iniciador</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupos</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Añadir grupo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Papelera</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemas</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizando</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Listo</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Editar modo de duplicación de repositorio</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Los clústeres de par deben eliminarse antes de inhabilitar la duplicación.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Editar} other {Añadir} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nombre del clúster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>El nombre del clúster no es válido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID de CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID de CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>El ID de CephX no es válido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Direcciones de monitores</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Direcciones delimitadas por comas...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>La dirección del monitor no es válida.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Clave de CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Clave con cifrado base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La clave de CephX debe tener cifrado base64</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Los contadores de rendimiento no están disponibles</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista de daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contadores de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Cargando datos de la papelera...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>El valor no es válido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>El nombre que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Propietario</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Seleccione un usuario --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Habilitado</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo de índice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regla de colocación</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marcador</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marcador máximo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versión</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versión maestra</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Hora de modificación</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Grupo de zona</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Cuota de papelera</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Tamaño máximo</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Sin límite</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Número máximo de objetos</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nombre de usuario</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Seleccione un nombre de usuario --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Autogenerar clave</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Clave de acceso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Clave secreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nombre completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Dirección de correo electrónico</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspendido</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Número máximo de papeleras</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subusuarios</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Capacidades</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Cuota de usuario</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostrar</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Claves</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Seleccione un tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Permiso</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Seleccione un permiso --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subusuario</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>El ID de subusuario que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lectura, escritura</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>todos</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Clave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Autogenerar secreto</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Cargando datos del usuario...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>No es posible cargar los datos del usuario.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>El ID de usuario que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Esta dirección no es válida.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>La dirección de correo electrónico que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Máx. papeleras</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Inhabilitado</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizar</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Clave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>No hay ningún subusuario.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>No hay ninguna clave.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>No hay ninguna capacidad</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Tamaño ilimitado</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Tamaño máx.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objetos ilimitados</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Objetos máx.</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>El valor introducido debe ser mayor o igual que 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descripción...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Permisos</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Funciones</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmar contraseña</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Las contraseñas no coinciden.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Correo electrónico</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Correo electrónico no válido.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Se dispone a eliminar los permisos "lectura/actualización de usuario" de su propio usuario.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Si continúa, no podrá añadir ni eliminar funciones en ningún usuario.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>¿Seguro que desea continuar?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Ayuda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentación</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Acerca de</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Ajustes de la consola</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestión del usuario</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Usuario que ha entrado</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Salir</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributos (mapa de OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Los metadatos no están disponibles</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadatos</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contandor de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Escrituras</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lecturas</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histograma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valores actuales</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Mín.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Máx.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origen</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Nivel</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Se puede actualizar en el tiempo de ejecución (editable)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Etiquetas</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valores Enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Véase también</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Estado del clúster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons de gestor</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Instancias de Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Servidores de metadatos</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Puertas de enlace iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS de cliente</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Rendimiento del cliente</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lectura/escritura de cliente</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Rendimiento de recuperación</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Depuración</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Rendimiento</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacidad en bruto</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Grupos de colocación por OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Estado del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacidad</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Clasificaciones</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Actual</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticación de descubrimiento actualizada</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>No hay ningún portal disponible.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>No hay ninguna imagen disponible.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>No hay ninguna imagen disponible. Asegúrese de añadir una imagen al destino.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>No hay ningún iniciador disponible. Asegúrese de añadir un iniciador al destino.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destino</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes de lectura</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes de escritura</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operaciones de lectura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operaciones de escritura</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O desde</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instancia</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Progreso</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Editar modo</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Añadir par</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Editar par</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Suprimir par</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Líder</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>N.º locales</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>N.º remotos</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>duplicar par</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Clave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Aplanamiento profundo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>En capas</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Bloqueo exclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa de objetos (requiere bloqueo exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>En diario (requiere bloqueo exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>SIN PROTECCIÓN</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Reversión de instantánea RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Revertir</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Instantánea RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Suprimido a las</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>estado</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versión</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>raíz</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons de reserva</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Clasificación</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Actividad</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodos</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Uso</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Actualizado</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>El valor se puede actualizar en el tiempo de ejecución.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Los daemons/clientes no extraen este valor de la\n      base de datos de configuración del monitor. No se recomienda definir esta opción con "ceph config\n      set ...". Esta opción se debe configurar mediante ceph.conf o a través\n      de la línea de comandos.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>La opción solo surte efecto durante el inicio del daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>La opción solo afecta a la creación del clúster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>La opción solo afecta a la creación del daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Servicio</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valor actual</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Editable</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Habilitar</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Inhabilitar</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Conectando de nuevo. Espere...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Dirección pública</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sesiones abiertas</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>No incluir</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Los OSD que se excluyeron anteriormente no se volverán a incluir cuando se inicien</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>No excluir</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Los OSD no se excluirán automáticamente después del intervalo configurado</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>No activar</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>No se permite que los OSD se inicien</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>No desactivar</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Se ignoran los informes de error de OSD, de forma que los monitores no desactivarán los OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pausa</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pone en pausa las lecturas y escrituras</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>No depurar</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>La depuración está inhabilitada</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>No depuración profunda</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>La depuración profunda está inhabilitada</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>No reponer</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>La reposición de grupos de colocación se suspende</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>No recuperar</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>La recuperación de los grupos de colocación se suspende</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Orden bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usar orden bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdir limpiados</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Los OSD tienen snapset convertidos</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Supresiones de recuperación</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Supresiones realizadas durante la recuperación, en lugar de emparejamientos</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Límite estricto de registro del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Establece un límite estricto para la longitud del registro del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Indicadores de OSD actualizados</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>excluir</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>Incluir</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>desactivar</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marcar</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdido</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marcado como perdido</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Limpiar</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>limpiado</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>destruir</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>destruido</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>suprimir</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Grupos de colocación</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes de lectura</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes de escritura</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operaciones de lectura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operaciones de escritura</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Número máximo de reposiciones</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Máximo de recuperaciones activas</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Máximo de recuperaciones de inicio único</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Reposo de recuperación</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Trabajo</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravedad</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Iniciado</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Usado</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispon.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Limpio</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>En curso</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Advertencia</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Desconocido</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>activo</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>sin sistemas de archivos</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>activo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>reserva</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/d</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon activo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quórum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>El servicio NFS Ganesha no está configurado.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transportar</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Usuario de CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Sistemas de archivos CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(se hereda de la configuración global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>se hereda de la configuración global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Seleccione el tipo de reducción de privilegios de ID de usuario que se va a realizar --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>No hay ningún daemon disponible.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modo de caché</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Antigüedad mínima de expulsión</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Antigüedad mínima de vaciado</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Número máximo de bytes de destino</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Número máximo de objetos de destino</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>No se ha añadido ninguna aplicación</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Se ha alcanzado el límite de aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Un repositorio solo puede tener hasta cuatro definiciones de aplicaciones.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caracteres permitidos: _, a-z, A-Z y 0-9</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La longitud máxima es 128 caracteres</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrar o añadir aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Añadir aplicación</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Tamaño de réplica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Último cambio</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Conjunto de reglas de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>papelera</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>papeleras</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>usuario</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>usuarios</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Ámbito</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lectura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Crear</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Función del sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Actualizar usuario</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuar</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>La sesión se ha cerrado automáticamente porque sus funciones han cambiado.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Cada objeto se divide en porciones de datos, cada una almacenada en un OSD distinto.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcula las porciones de código para cada objeto y las almacena en distintos OSD.\n      El número de porciones de código es también el número de OSD que pueden estar inactivos sin que se pierdan datos.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>El complemento jerasure es el más genérico y flexible,\n          y también el complemento por defecto para los repositorios de código de borrado de Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La técnica más flexible es reed_sol_van: basta con definir k y m.\n          La técnica cauchy_good puede ser más rápida, pero hay que elegir con cuidado el tamaño\n          del paquete. reed_sol_r6_op, liberation, blaum_roth y liber8tion son todas equivalentes a RAID6\n          en el sentido de que solo se pueden configurar con m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>La codificación se realizará según el tamaño de los paquetes de bytes de uno en uno.\n          Elegir el tamaño correcto es difícil.\n          La documentación de jerasure incluye información completa sobre el tema.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Con el complemento jerasure, cuando un objeto de código de borrado se almacena\n          en varios OSD, para recuperarse de la pérdida de un OSD es necesario leer de todos los demás.\n          Por ejemplo, si jerasure está configurado con k=8 y m=4, cuando se pierde un OSD es necesario leer\n          de los otros once para repararlo.\n\n          El complemento de código de borrado lrc crea porciones de paridad local para poder realizar la recuperación con\n          menos OSDs. Por ejemplo, is lrc está configurado con k=8, m=4 y l=4, creará\n          una porción de paridad adicional para cada cuatro OSDs. Si se pierde un solo OSD, se puede recuperar\n          solo con cuatro OSD, en lugar de con once.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Agrupa las porciones de código y de datos en localizaciones de conjuntos de tamaño. Por ejemplo,\n          para k=4 y m=2, si locality=3, se crean dos grupos de tres. Cada conjunto\n          se puede recuperar sin leer porciones de otro conjunto.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>El tipo de papelera de CRUSH en el que se almacenará cada\n          conjunto de porciones definido por l. Por ejemplo, si se define como bastidor, cada grupo de l porciones\n          se colocará en un bastidor distinto. Se usa para crear un paso de regla de CRUSH, por ejemplo, "step choose\n          rack". Si no se define, no se realiza este tipo de agrupamiento.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>El complemento isa encapsula la biblioteca ISA. Solo funciona en procesadores Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>El complemento ISA viene en dos formatos de Reed Solomon.\n          Si se define reed_sol_van, se trata de Vandermonde; si se define cauchy, se trata de Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>El complemento shec encapsula las distintas bibliotecas SHEC.\n          Permite a Ceph recuperar datos de forma más eficiente que los códigos de Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>El número de porciones de paridad. Cada uno de ellas incluye cada porción de datos\n           en su intervalo de cálculo. El número se usa como estimador de durabilidad. Por ejemplo, si c=2,\n          2 OSD pueden estar inactivos sin que se pierdan datos.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>El nombre de la papelera de CRUSH usado para el primer paso de la regla de CRUSH.\n      Por ejemplo, "step take default".</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Asegúrese de que no hay dos porciones en una papelera con el mismo\n      dominio de error. Por ejemplo, si el dominio de error es host, no debe haber dos porciones almacenadas en el mismo\n      host. Se usa para crear un paso de regla de CRUSH, por ejemplo, "step chooseleaf host".</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restringe la colocación a dispositivos de una clase concreta\n      (p.ej., ssd o hdd) usando los nombre de clase de dispositivo CRUSH en el mapa de CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Define el nombre de directorio del que se cargará el complemento de código de borrado.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Permite todas las operaciones</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Permite solo las operaciones que no modifican el servidor</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>No permite operaciones de lectura o escritura, pero sí cualquier otra</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>No permite operaciones de lectura o escritura, ni ninguna otra que modifique los atributos del archivo o el contenido del directorio</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>No permite ningún tipo de acceso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Seleccione la prioridad --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Baja</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Información</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Últimos 5 minutos</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Últimos 15 minutos</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Últimos 30 minutos</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Última hora (opción por defecto)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Últimas 3 horas</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Últimas 6 horas</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Últimas 12 horas</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Últimas 24 horas</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ayer</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hoy</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Hoy hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Anteayer</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Los últimos 2 días</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Este día la semana pasada</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>La semana pasada</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Esta semana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Esta semana hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Los últimos 7 días</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>El mes pasado</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Este mes</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Este mes hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Los últimos 30 días</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Los últimos 90 días</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Los últimos 6 meses</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>El último año</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>El año pasado</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Este año</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Este año hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Los últimos 2 años</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Los últimos 5 años</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>No se ha seleccionado ningún elemento.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Deseleccione el elemento para volver a seleccionarlo</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Se ha alcanzado el límite de selección</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtrar etiquetas</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Añadir insignia</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>No hay ningún elemento disponible.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clonar</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copiar</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Depuración profunda</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Destruir</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Aplanar</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marcar para desactivar</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marcar para incluir</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marcar como perdido</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marcar para excluir</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renombrar</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurar</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Mover a la papelera</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Desproteger</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Suprimido</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonado</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiado</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Aplanado</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Limpiado</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restaurado</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Revertido</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sí</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>No</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Calidad del servicio</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Límite de BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>El límite deseado de bytes de E/S por segundo.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Límite de IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>El límite deseado de operaciones de E/S por segundo.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Límite de BPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>El límite deseado de bytes de lectura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Límite de IOPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>El límite deseado de operaciones de lectura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Límite de BPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>El límite deseado de bytes de escritura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Límite de IOPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>El límite deseado de operaciones de escritura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Ráfaga de BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de E/S.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Ráfaga de IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de E/S.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Ráfaga de BPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de lectura.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Ráfaga de IOPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de lectura.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Ráfaga de BPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de escritura.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Ráfaga de IOPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de escritura.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Ejecutando</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>ejecutar</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Ejecutado</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tarea desconocida</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Creando</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>crear</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Actualizando</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>actualizar</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Suprimiendo</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonando</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clonar</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copiando</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copiar</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Aplanando</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>aplanar</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Revirtiendo</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>revertir</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Moviendo</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>mover</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Movido</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>No se encuentra la imagen.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Restaurando</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurar</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Limpiando</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>limpiar</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>todos los repositorios</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>No es posible inhabilitar la duplicación porque contiene un par</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"z+Ro":function(t,e,n){"use strict";function a(t){return t&&"function"==typeof t.schedule}n.d(e,"a",(function(){return a}))},"z/SZ":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("hpHm");class i{constructor(t,e,n){this.nodes=t,this.viewRef=e,this.componentRef=n}}class s{constructor(t,e,n,r,i,s,o,u){this._viewContainerRef=t,this._renderer=e,this._elementRef=n,this._injector=r,this._componentFactoryResolver=i,this._ngZone=s,this._applicationRef=o,this._posService=u,this.onBeforeShow=new a.EventEmitter,this.onShown=new a.EventEmitter,this.onBeforeHide=new a.EventEmitter,this.onHidden=new a.EventEmitter,this._providers=[],this._isHiding=!1,this.containerDefaultSelector="body",this._listenOpts={},this._globalListener=Function.prototype}get isShown(){return!this._isHiding&&!!this._componentRef}attach(t){return this._componentFactory=this._componentFactoryResolver.resolveComponentFactory(t),this}to(t){return this.container=t||this.container,this}position(t){return this.attachment=t.attachment||this.attachment,this._elementRef=t.target||this._elementRef,this}provide(t){return this._providers.push(t),this}show(t={}){if(this._subscribePositioning(),this._innerComponent=null,!this._componentRef){this.onBeforeShow.emit(),this._contentRef=this._getContentRef(t.content,t.context,t.initialState);const e=a.Injector.create({providers:this._providers,parent:this._injector});this._componentRef=this._componentFactory.create(e,this._contentRef.nodes),this._applicationRef.attachView(this._componentRef.hostView),this.instance=this._componentRef.instance,Object.assign(this._componentRef.instance,t),this.container instanceof a.ElementRef&&this.container.nativeElement.appendChild(this._componentRef.location.nativeElement),"string"==typeof this.container&&"undefined"!=typeof document&&(document.querySelector(this.container)||document.querySelector(this.containerDefaultSelector)).appendChild(this._componentRef.location.nativeElement),!this.container&&this._elementRef&&this._elementRef.nativeElement.parentElement&&this._elementRef.nativeElement.parentElement.appendChild(this._componentRef.location.nativeElement),this._contentRef.componentRef&&(this._innerComponent=this._contentRef.componentRef.instance,this._contentRef.componentRef.changeDetectorRef.markForCheck(),this._contentRef.componentRef.changeDetectorRef.detectChanges()),this._componentRef.changeDetectorRef.markForCheck(),this._componentRef.changeDetectorRef.detectChanges(),this.onShown.emit(this._componentRef.instance)}return this._registerOutsideClick(),this._componentRef}hide(){if(!this._componentRef)return this;this._posService.deletePositionElement(this._componentRef.location),this.onBeforeHide.emit(this._componentRef.instance);const t=this._componentRef.location.nativeElement;return t.parentNode.removeChild(t),this._contentRef.componentRef&&this._contentRef.componentRef.destroy(),this._componentRef.destroy(),this._viewContainerRef&&this._contentRef.viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef)),this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._contentRef=null,this._componentRef=null,this._removeGlobalListener(),this.onHidden.emit(),this}toggle(){this.isShown?this.hide():this.show()}dispose(){this.isShown&&this.hide(),this._unsubscribePositioning(),this._unregisterListenersFn&&this._unregisterListenersFn()}listen(t){this.triggers=t.triggers||this.triggers,this._listenOpts.outsideClick=t.outsideClick,this._listenOpts.outsideEsc=t.outsideEsc,t.target=t.target||this._elementRef.nativeElement;const e=this._listenOpts.hide=()=>t.hide?t.hide():void this.hide(),n=this._listenOpts.show=e=>{t.show?t.show(e):this.show(e),e()};return this._unregisterListenersFn=Object(r.e)(this._renderer,{target:t.target,triggers:t.triggers,show:n,hide:e,toggle:t=>{this.isShown?e():n(t)}}),this}_removeGlobalListener(){this._globalListener&&(this._globalListener(),this._globalListener=null)}attachInline(t,e){return this._inlineViewRef=t.createEmbeddedView(e),this}_registerOutsideClick(){if(this._componentRef&&this._componentRef.location){if(this._listenOpts.outsideClick){const t=this._componentRef.location.nativeElement;setTimeout(()=>{this._globalListener=Object(r.h)(this._renderer,{targets:[t,this._elementRef.nativeElement],outsideClick:this._listenOpts.outsideClick,hide:()=>this._listenOpts.hide()})})}if(this._listenOpts.outsideEsc){const t=this._componentRef.location.nativeElement;this._globalListener=Object(r.g)(this._renderer,{targets:[t,this._elementRef.nativeElement],outsideEsc:this._listenOpts.outsideEsc,hide:()=>this._listenOpts.hide()})}}}getInnerComponent(){return this._innerComponent}_subscribePositioning(){!this._zoneSubscription&&this.attachment&&(this.onShown.subscribe(()=>{this._posService.position({element:this._componentRef.location,target:this._elementRef,attachment:this.attachment,appendToBody:"body"===this.container})}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>{this._componentRef&&this._posService.calcPosition()}))}_unsubscribePositioning(){this._zoneSubscription&&(this._zoneSubscription.unsubscribe(),this._zoneSubscription=null)}_getContentRef(t,e,n){if(!t)return new i([]);if(t instanceof a.TemplateRef){if(this._viewContainerRef){const n=this._viewContainerRef.createEmbeddedView(t,e);return n.markForCheck(),new i([n.rootNodes],n)}const n=t.createEmbeddedView({});return this._applicationRef.attachView(n),new i([n.rootNodes],n)}if("function"==typeof t){const e=this._componentFactoryResolver.resolveComponentFactory(t),r=a.Injector.create({providers:this._providers,parent:this._injector}),s=e.create(r);return Object.assign(s.instance,n),this._applicationRef.attachView(s.hostView),new i([[s.location.nativeElement]],s.hostView,s)}return new i([[this._renderer.createText(""+t)]])}}class o{constructor(t,e,n,a,r){this._componentFactoryResolver=t,this._ngZone=e,this._injector=n,this._posService=a,this._applicationRef=r}createLoader(t,e,n){return new s(e,n,t,this._injector,this._componentFactoryResolver,this._ngZone,this._applicationRef,this._posService)}}},z1FC:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["viensas secunds","'iensas secunds"],ss:[t+" secunds",t+" secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return a||e?r[n][0]:r[n][1]}t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},z3Vd:function(t,e,n){!function(t){"use strict";var e="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(t,n,a,r){var i=function(t){var n=Math.floor(t%1e3/100),a=Math.floor(t%100/10),r=t%10,i="";return n>0&&(i+=e[n]+"vatlh"),a>0&&(i+=(""!==i?" ":"")+e[a]+"maH"),r>0&&(i+=(""!==i?" ":"")+e[r]),""===i?"pagh":i}(t);switch(a){case"ss":return i+" lup";case"mm":return i+" tup";case"hh":return i+" rep";case"dd":return i+" jaj";case"MM":return i+" jar";case"yy":return i+" DIS"}}t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(t){var e=t;return-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"},past:function(t){var e=t;return-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu’":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},z5nN:function(t,e,n){"use strict";n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return f}));var a=n("8Y7J"),r=n("LqlI"),i=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["role","document"]],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","modal-content"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){var n=e.component;t(e,0,0,"modal-dialog"+(n.config.class?" "+n.config.class:""))}))}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"modal-container",[["class","modal"],["role","dialog"],["tabindex","-1"]],[[1,"aria-modal",0]],[[null,"mousedown"],[null,"mouseup"],["window","keydown.esc"]],(function(t,e,n){var r=!0;return"mousedown"===e&&(r=!1!==a["ɵnov"](t,1).onClickStarted(n)&&r),"mouseup"===e&&(r=!1!==a["ɵnov"](t,1).onClickStop(n)&&r),"window:keydown.esc"===e&&(r=!1!==a["ɵnov"](t,1).onEsc(n)&&r),r}),s,i)),a["ɵdid"](1,245760,null,0,r.d,[r.f,a.ElementRef,a.Renderer2],null,null)],(function(t,e){t(e,1,0)}),(function(t,e){t(e,0,0,!0)}))}var u=a["ɵccf"]("modal-container",r.d,o,{},{},["*"]),l=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function d(t){return a["ɵvid"](0,[],null,null)}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-modal-backdrop",[["class","modal-backdrop"]],null,null,null,d,l)),a["ɵdid"](1,114688,null,0,r.c,[a.ElementRef,a.Renderer2],null,null)],(function(t,e){t(e,1,0)}),null)}var f=a["ɵccf"]("bs-modal-backdrop",r.c,c,{},{},[])},z6cu:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("HDdC");function r(t,e){return new a.a(e?n=>e.schedule(i,0,{error:t,subscriber:n}):e=>e.error(t))}function i({error:t,subscriber:e}){e.error(t)}},zAeO:function(t,e,n){var a=n("SQuY");function r(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s)||i,s};return n.cache=new(r.Cache||a),n}r.Cache=a,t.exports=r},zBJ4:function(t,e,n){var a=n("2oRo"),r=n("hh1v"),i=a.document,s=r(i)&&r(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},zDBQ:function(t,e,n){var a=n("IeEY");t.exports=function(t){return null!=t&&t.length?a(t,1):[]}},zKZe:function(t,e,n){var a=n("I+eb"),r=n("YNrV");a({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},zUnb:function(t,e,n){"use strict";n.r(e);var a=n("tAZD"),r=n.n(a),i=n("SVse"),s=n("8Y7J");function o(){return localStorage.getItem("access_token")}const u=t=>{t=t||"en-US";try{return n("F+uO")(`./messages.${t}.xlf`).default}catch(e){return[]}};class l{}class d{constructor(){}}var c=n("EApP"),f=s["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"flyInOut",definitions:[{type:0,name:"inactive",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:0,name:"active",styles:{type:6,styles:{opacity:1},offset:null},options:void 0},{type:0,name:"removed",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:1,expr:"inactive => active",animation:{type:4,styles:null,timings:"{{ easeTime }}ms {{ easing }}"},options:null},{type:1,expr:"active => removed",animation:{type:4,styles:null,timings:"{{ easeTime }}ms {{ easing }}"},options:null}],options:{}}]}});function h(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"button",[["aria-label","Close"],["class","toast-close-button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.remove()&&a),a}),null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"]))],null,null)}function g(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](1,null,["[","]"]))],null,(function(t,e){t(e,1,0,e.component.duplicatesCount+1)}))}function p(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[],[[8,"className",0],[1,"aria-label",0]],null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,g)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,3,0,e.component.duplicatesCount)}),(function(t,e){var n=e.component;t(e,0,0,n.options.titleClass,n.title),t(e,1,0,n.title)}))}function b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"div",[["aria-live","polite"],["role","alertdialog"]],[[8,"className",0],[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.options.messageClass,n.message)}))}function m(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["aria-live","polite"],["role","alertdialog"]],[[8,"className",0],[1,"aria-label",0]],null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,n.options.messageClass,n.message),t(e,1,0,n.message)}))}function y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"div",[["class","toast-progress"]],[[4,"width",null]],null,null,null,null))],null,(function(t,e){t(e,1,0,e.component.width+"%")}))}function v(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,h)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,p)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,b)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,m)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,y)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.options.closeButton),t(e,3,0,n.title),t(e,5,0,n.message&&n.options.enableHtml),t(e,7,0,n.message&&!n.options.enableHtml),t(e,9,0,n.options.progressBar)}),null)}function x(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["toast-component",""]],[[8,"className",0],[40,"@flyInOut",0],[4,"display",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).tapToast()&&a),"mouseenter"===e&&(a=!1!==s["ɵnov"](t,1).stickAround()&&a),"mouseleave"===e&&(a=!1!==s["ɵnov"](t,1).delayedHideToast()&&a),a}),v,f)),s["ɵdid"](1,180224,null,0,c.c,[c.j,c.g,s.NgZone],null,null)],null,(function(t,e){t(e,0,0,s["ɵnov"](e,1).toastClasses,s["ɵnov"](e,1).state,s["ɵnov"](e,1).displayStyle)}))}var _=s["ɵccf"]("[toast-component]",c.c,x,{},{},[]),T=n("pMnS"),O=n("jtHE");let w=(()=>{class t{}return t.START="start",t.STOP="stop",t.UPDATE="update",t.RESET="reset",t.UNSUBSCRIBE="unsubscribe",t})();class S{constructor(){this.blockUISettings={},this.blockUIInstances={},this.blockUISubject=new O.a,this.blockUIObservable=this.blockUISubject.asObservable(),this.blockUIObservable.subscribe(this.blockUIMiddleware.bind(this))}getSettings(){return this.blockUISettings}updateSettings(t={}){this.blockUISettings=Object.assign({},this.blockUISettings,t)}decorate(t="block-ui-main"){const e={name:t,isActive:!1,blockCount:0,start:this.dispatch(this.blockUISubject,w.START,t),update:this.dispatch(this.blockUISubject,w.UPDATE,t),stop:this.dispatch(this.blockUISubject,w.STOP,t),reset:this.dispatch(this.blockUISubject,w.RESET,t),unsubscribe:this.dispatch(this.blockUISubject,w.UNSUBSCRIBE,t)};return this.blockUIInstances[t]=this.blockUIInstances[t]||e,e}observe(){return this.blockUIObservable}blockUIMiddleware({action:t,name:e}){let n=null;switch(t){case w.START:n=!0;break;case w.STOP:case w.RESET:n=!1}null!==n&&(this.blockUIInstances[e].isActive=n)}dispatch(t,e,n="block-ui-main"){return a=>{t.next({name:n,action:e,message:a})}}}class I{constructor(t){this.blockUI=t}ngOnInit(){this.name=this.name||"block-ui-main",this.template=this.template||this.blockUI.blockUISettings.template}}class N{constructor(t,e,n){this.blockUI=t,this.resolver=e,this.changeDetectionRef=n,this.name="block-ui-main",this.delayStart=0,this.delayStop=0,this.state={startTimeout:null,stopTimeout:null,blockCount:0},this.active=!1}ngOnInit(){this.settings=this.blockUI.getSettings(),this.blockUISubscription=this.subscribeToBlockUI(this.blockUI.observe())}ngAfterViewInit(){try{if(!this.templateCmp)return!1;if(this.templateCmp instanceof s.TemplateRef)this.templateOutlet.createEmbeddedView(this.templateCmp);else{const t=this.resolver.resolveComponentFactory(this.templateCmp);this.templateCompRef=this.templateOutlet.createComponent(t),this.updateBlockTemplate(this.message)}}catch(t){console.error("ng-block-ui:",t)}}ngAfterViewChecked(){this.detectChanges()}subscribeToBlockUI(t){return t.subscribe(t=>this.onDispatchedEvent(t))}onDispatchedEvent(t){switch(t.action){case w.START:this.onStart(t);break;case w.STOP:this.onStop(t);break;case w.UPDATE:this.onUpdate(t);break;case w.RESET:this.onReset();break;case w.UNSUBSCRIBE:this.onStop(t),this.onUnsubscribe(t.name)}}onStart({name:t,message:e}){if(t===this.name){const t=this.delayStart||this.settings.delayStart||0;null===this.state.startTimeout&&(0===t?this.showBlock(e):this.state.startTimeout=setTimeout(()=>{this.showBlock(e)},t)),this.state.blockCount++,this.updateInstanceBlockCount()}}onStop({name:t}){if(t===this.name){const t=this.delayStop||this.settings.delayStop||0;this.state.blockCount>1?this.state.blockCount--:this.active?null===this.state.stopTimeout&&(0===t?this.hideBlock():this.state.stopTimeout=setTimeout(()=>{this.hideBlock()},t)):this.clearState(),this.updateInstanceBlockCount()}}onReset(){this.hideBlock()}onUpdate({name:t,message:e}){if(t===this.name){const t=this.delayStart||this.settings.delayStart||0;0===t?this.updateMessage(e):setTimeout(()=>{this.updateMessage(e)},t)}}updateMessage(t){this.message=t||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}showBlock(t){this.active=!0,this.message=t||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}hideBlock(){this.clearState(),this.active=!1,this.detectChanges()}clearState(){null!=this.state.startTimeout&&clearTimeout(this.state.startTimeout),null!=this.state.stopTimeout&&clearTimeout(this.state.stopTimeout),this.state.blockCount=0,this.state.startTimeout=null,this.state.stopTimeout=null,this.updateInstanceBlockCount()}updateBlockTemplate(t){this.templateCompRef&&this.templateCompRef instanceof s.ComponentRef&&(this.templateCompRef.instance.message=t)}onUnsubscribe(t){this.blockUISubscription&&t===this.name&&this.blockUISubscription.unsubscribe()}updateInstanceBlockCount(){this.blockUI.blockUIInstances[this.name]&&(this.blockUI.blockUIInstances[this.name].blockCount=this.state.blockCount)}detectChanges(){this.changeDetectionRef.destroyed||this.changeDetectionRef.detectChanges()}ngOnDestroy(){this.onUnsubscribe(this.name)}}class C{constructor(t){this.blockUIInstance=t}start(t,e){this.dispatch(t,w.START,e)}stop(t){this.dispatch(t,w.STOP)}reset(t){this.dispatch(t,w.RESET)}unsubscribe(t){this.dispatch(t,w.UNSUBSCRIBE)}isActive(t=null){const e=t?this.toArray(t):null,n=this.blockUIInstance.blockUIInstances;return Object.keys(n).some(t=>e?e.indexOf(n[t].name)>=0&&n[t].isActive:n[t].isActive)}dispatch(t=[],e,n){this.toArray(t).forEach(t=>this.blockUIInstance.decorate(t)[e](n))}toArray(t=[]){return"string"==typeof t?[t]:t}}const R=new S,A=new s.InjectionToken("BlockUIModuleSettings");function k(t){return R.updateSettings(t),R}class E{static forRoot(t={}){return{ngModule:E,providers:[{provide:A,useValue:t},{provide:S,useFactory:k,deps:[A]},C]}}}function L(t){return function(e,n,a){e[n]=R.decorate(t)}}var D=s["ɵcrt"]({encapsulation:2,styles:[],data:{}});function P(t){return s["ɵvid"](0,[s["ɵncd"](null,0),(t()(),s["ɵeld"](1,0,null,null,1,"block-ui-content",[],null,null,null,B,j)),s["ɵdid"](2,12828672,null,0,N,[S,s.ComponentFactoryResolver,s.ChangeDetectorRef],{name:[0,"name"],delayStart:[1,"delayStart"],delayStop:[2,"delayStop"],defaultMessage:[3,"defaultMessage"],templateCmp:[4,"templateCmp"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.name,n.delayStart,n.delayStop,n.message,n.template)}),null)}function M(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"block-ui",[],null,null,null,P,D)),s["ɵdid"](1,114688,null,0,I,[S],null,null)],(function(t,e){t(e,1,0)}),null)}var q=s["ɵccf"]("block-ui",I,M,{name:"name",message:"message",delayStart:"delayStart",delayStop:"delayStop",template:"template"},{},["*"]),j=s["ɵcrt"]({encapsulation:2,styles:["\n.block-ui-wrapper {\n  display: none;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  top: 0;\n  left: 0;\n  background: rgba(0, 0, 0, 0.70);\n  z-index: 30000;\n  cursor: wait;\n}\n\n.block-ui-wrapper.block-ui-wrapper--element {\n  position: absolute;\n}\n\n.block-ui-wrapper.active {\n  display: block;\n}\n\n.block-ui-wrapper.block-ui-main {\n  position: fixed;\n}\n\n.block-ui-spinner,\n.block-ui-template {\n  position: absolute;\n  top: 40%;\n  margin: 0 auto;\n  left: 0;\n  right: 0;\n  transform: translateY(-50%);\n}\n\n.block-ui-spinner > .message {\n  font-size: 1.3em;\n  text-align: center;\n  color: #fff;\n}\n\n.block-ui__element {\n  position: relative;\n}\n\n.loader,\n.loader:after {\n  border-radius: 50%;\n  width: 10em;\n  height: 10em;\n}\n.loader {\n  margin: 7px auto;\n  font-size: 5px;\n  position: relative;\n  text-indent: -9999em;\n  border-top: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-right: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-bottom: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-left: 1.1em solid #ffffff;\n  -webkit-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-animation: load8 1.1s infinite linear;\n  animation: load8 1.1s infinite linear;\n}\n\n@-webkit-keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n"],data:{}});function F(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,1,0,n.message||n.defaultMessage)}))}function G(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","block-ui-spinner"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"div",[["class","loader"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,F)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.message||n.defaultMessage)}),null)}function V(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function z(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,[[1,3],["templateOutlet",2]],null,0,null,V)),(t()(),s["ɵand"](0,null,null,0))],null,null)}function B(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{templateOutlet:0}),(t()(),s["ɵeld"](1,0,null,null,7,"div",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](4,{active:0}),(t()(),s["ɵand"](16777216,null,null,1,null,G)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,z)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=s["ɵinlineInterpolate"](2,"block-ui-wrapper ",n.name," ",n.className,""),r=t(e,4,0,n.active);t(e,3,0,a,r),t(e,6,0,!n.templateCmp),t(e,8,0,n.templateCmp)}),null)}function Y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"block-ui-content",[],null,null,null,B,j)),s["ɵdid"](1,12828672,null,0,N,[S,s.ComponentFactoryResolver,s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}var H=s["ɵccf"]("block-ui-content",N,Y,{name:"name",delayStart:"delayStart",delayStop:"delayStop",defaultMessage:"message",templateCmp:"template"},{},[]),U=n("FE24"),W=n("z/SZ"),K=n("GS7A"),$=n("s7LF"),J=n("ANnk"),Z=n("f/UV"),Q=n("aexS"),X=n("+gVj"),tt=n("LvDl"),et=n("xj/R"),nt=n("IheW");let at=(()=>{class t{constructor(t,e){this.http=t,this.localeId=e}getLocale(){return this.localeId||"en-US"}setLocale(t){document.cookie="cd-lang="+t}getLanguages(){return this.http.get("ui-api/langs")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](s.LOCALE_ID))},token:t,providedIn:"root"}),t})();var rt=function(t){return t.cs="Čeština",t["de-DE"]="Deutsch",t["en-US"]="English",t["es-ES"]="Español",t["fr-FR"]="Français",t["id-ID"]="Bahasa Indonesia",t["it-IT"]="Italiano",t["ja-JP"]="日本語",t["ko-KR"]="한국어",t["pl-PL"]="Polski",t["pt-BR"]="Português (brasileiro)",t["zh-CN"]="中文 (简体)",t["zh-TW"]="中文 (繁體)",t}({});let it={cs:et.a,de:et.b,es:et.e,fr:et.g,id:et.m,it:et.y,ja:et.z,ko:et.A,pl:et.C,pt:et.D,zh:et.I};class st{constructor(t,e){this.localeService=t,this.languageService=e,this.isDropdown=!0,this.supportedLanguages=rt}ngOnInit(){this.selectedLanguage=this.languageService.getLocale(),this.defineUsedLanguage(),this.languageService.getLanguages().subscribe(t=>{this.supportedLanguages=tt.pick(this.supportedLanguages,t)})}defineUsedLanguage(){const t=this.selectedLanguage.slice(0,2);t in it&&(Object(et.c)(t,it[t]),this.localeService.use(t))}reloadWindow(){window.location.reload()}changeLanguage(t){this.languageService.setLocale(t),this.reloadWindow()}}var ot=n("ienR"),ut=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function lt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.changeLanguage(t.context.$implicit.key)&&a),a}),null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.value)}))}function dt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"ul",[["class","dropdown-menu dropdown-menu-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,lt)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,2,0,s["ɵunv"](e,2,0,s["ɵnov"](e,3).transform(n.supportedLanguages)))}),null)}function ct(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,7,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,2,"a",[["class","dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""],["title","Select a Language"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵted"](5,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,dt)),s["ɵdid"](7,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen),t(e,5,0,n.supportedLanguages[n.selectedLanguage])}))}function ft(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.key),t(e,2,0,e.context.$implicit.key)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function ht(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"select",[["class","form-control custom-select"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,1).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"change"===e&&(a=!1!==r.changeLanguage(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.selectedLanguage=n)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](3,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](7,16384,null,0,X.h,[[8,null],X.a],null,null),(t()(),s["ɵand"](16777216,null,null,2,null,ft)),s["ɵdid"](9,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,3,0,n.selectedLanguage),t(e,9,0,s["ɵunv"](e,9,0,s["ɵnov"](e,10).transform(n.supportedLanguages)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,7).validClass,s["ɵnov"](e,7).invalidClass)}))}function gt(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ct)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ht)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.isDropdown),t(e,3,0,!n.isDropdown)}),null)}var pt=n("quSY"),bt=n("oxzT"),mt=n("9nlD"),yt=n("mSOc");class vt{constructor(t,e){this.notificationService=t,this.summaryService=e,this.icons=bt.a,this.hasRunningTasks=!1,this.hasNotifications=!1,this.subs=new pt.a}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.hasRunningTasks=t.executing_tasks.length>0})),this.subs.add(this.notificationService.data$.subscribe(t=>{this.hasNotifications=t.length>0}))}ngOnDestroy(){this.subs.unsubscribe()}toggleSidebar(){this.notificationService.toggleSidebar()}}var xt=s["ɵcrt"]({encapsulation:0,styles:[[".running[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{color:#2b99a8}.running[_ngcontent-%COMP%]:hover   i[_ngcontent-%COMP%]{color:#fff}a[_ngcontent-%COMP%]   .dot[_ngcontent-%COMP%]{background-color:#2b99a8;border:2px solid #374249;border-radius:50%;height:11px;position:absolute;right:17px;top:10px;width:10px}a[_ngcontent-%COMP%]:hover   .dot[_ngcontent-%COMP%]{background-color:#fff;border-color:#2b99a8}"]],data:{}});function _t(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"span",[["class","dot"]],null,null,null,null,null))],null,null)}function Tt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"a",[["title","Tasks and Notifications"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSidebar()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](3,{running:0}),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵand"](16777216,null,null,1,null,_t)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](10,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tasks and Notifications"]))],(function(t,e){var n=e.component,a=t(e,3,0,n.hasRunningTasks);t(e,2,0,a);var r=t(e,7,0,n.icons.bell);t(e,6,0,r),t(e,9,0,n.hasNotifications)}),null)}var Ot=n("tz6c"),wt=n("e0ae"),St=n("Mxhz"),It=n("sne2");class Nt{constructor(t,e,n,a){this.modalRef=t,this.summaryService=e,this.userService=n,this.authStorageService=a,this.userPermission=this.authStorageService.getPermissions().user}ngOnInit(){this.copyright="Copyright(c) 2020 Ceph contributors.",this.projectConstants=It.c,this.hostAddr=window.location.hostname,this.modalVariables=this.setVariables(),this.subs=this.summaryService.subscribe(t=>{const e=t.version.replace("ceph version ","").split(" ");this.hostAddr=t.mgr_host.replace(/(^\w+:|^)\/\//,"").replace(/\/$/,""),this.versionNumber=e[0],this.versionHash=e[1],this.versionName=e.slice(2,e.length).join(" ")})}ngOnDestroy(){this.subs.unsubscribe()}setVariables(){const t={};t.user=localStorage.getItem("dashboard_username"),t.role="user",this.userPermission.read&&this.userService.get(t.user).subscribe(e=>{t.role=e.roles});const e=Object(wt.a)();return t.browserName=e&&e.name?e.name:"Not detected",t.browserVersion=e&&e.version?e.version:"Not detected",t.browserOS=e&&e.os?e.os:"Not detected",t}}class Ct{constructor(t,e,n){this.modalService=t,this.authStorageService=e,this.docService=n,this.icons=bt.a}ngOnInit(){this.docService.subscribeOnce("dashboard",t=>{this.docsUrl=t})}openAboutModal(){this.modalRef=this.modalService.show(Nt),this.modalRef.setClass("modal-lg")}goToApiDocs(){this.docsFormElement.nativeElement.children[0].value=this.authStorageService.getToken(),this.docsFormElement.nativeElement.submit()}}var Rt=n("LqlI"),At=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function kt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"a",[["class","dropdown-item text-capitalize"],["target","_blank"]],[[8,"href",4]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](5,{disabled:0}),(t()(),s["ɵted"](-1,null,["documentation"])),(t()(),s["ɵeld"](7,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.goToApiDocs()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["API"])),(t()(),s["ɵeld"](10,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.openAboutModal()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["About"]))],(function(t,e){var n=t(e,5,0,!e.component.docsUrl);t(e,4,0,"dropdown-item text-capitalize",n)}),(function(t,e){t(e,2,0,s["ɵinlineInterpolate"](1,"",e.component.docsUrl,""))}))}function Et(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{docsFormElement:0}),(t()(),s["ɵeld"](1,0,[[1,0],["docsForm",1]],null,2,"form",[["action","/docs"],["method","post"],["target","_blank"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"input",[["name","token"],["type","hidden"]],null,null,null,null,null)),s["ɵdid"](3,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),(t()(),s["ɵeld"](4,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](6,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](7,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Help"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,8).onClick()&&a),a}),null,null)),s["ɵdid"](8,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](9,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](11,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](12,1),(t()(),s["ɵeld"](13,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Help"])),(t()(),s["ɵand"](16777216,null,null,1,null,kt)),s["ɵdid"](16,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,6,0);var a=t(e,12,0,n.icons.questionCircle);t(e,11,0,a)}),(function(t,e){t(e,4,0,s["ɵnov"](e,6).dropup,s["ɵnov"](e,6).isOpen,s["ɵnov"](e,6).isOpen&&s["ɵnov"](e,6).isBs4),t(e,7,0,!0,s["ɵnov"](e,8).isDisabled,s["ɵnov"](e,8).isOpen)}))}var Lt=n("iInd");class Dt{constructor(t){this.authStorageService=t,this.icons=bt.a;const e=this.authStorageService.getPermissions();this.userPermission=e.user,this.configOptPermission=e.configOpt}ngOnInit(){}}var Pt=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Mt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"a",[["class","dropdown-item"],["routerLink","/user-management"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["User management"]))],(function(t,e){t(e,2,0,"/user-management")}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function qt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"a",[["class","dropdown-item"],["routerLink","/telemetry"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Telemetry configuration"]))],(function(t,e){t(e,2,0,"/telemetry")}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function jt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Mt)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qt)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.userPermission.read),t(e,4,0,n.configOptPermission.read)}),null)}function Ft(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Dashboard Settings"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](8,1),(t()(),s["ɵeld"](9,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Dashboard Settings"])),(t()(),s["ɵand"](16777216,null,null,1,null,jt)),s["ɵdid"](12,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0);var a=t(e,8,0,n.icons.deepCheck);t(e,7,0,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen)}))}function Gt(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ft)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.userPermission.read)}),null)}var Vt=n("DSvg");class zt{constructor(t,e){this.authStorageService=t,this.authService=e,this.icons=bt.a}ngOnInit(){this.username=this.authStorageService.getUsername(),this.sso=this.authStorageService.isSSO()}logout(){this.authService.logout()}}var Bt=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Yt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"a",[["class","dropdown-item"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](3,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](5,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](6,1),(t()(),s["ɵeld"](7,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Change password"]))],(function(t,e){var n=e.component;t(e,2,0,"/user-profile/edit");var a=t(e,6,0,n.icons.lock);t(e,5,0,a)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function Ht(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,16,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"li",[["class","disabled"],["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"a",[["class","dropdown-item disabled"],["href","#"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Signed in as "])),(t()(),s["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵeld"](6,0,null,null,0,"li",[["class","dropdown-divider"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Yt)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,null,7,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,6,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.logout()&&a),a}),null,null)),(t()(),s["ɵeld"](11,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](13,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](14,1),(t()(),s["ɵeld"](15,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sign out"]))],(function(t,e){var n=e.component;t(e,8,0,!n.sso);var a=t(e,14,0,n.icons.signOut);t(e,13,0,a)}),(function(t,e){t(e,5,0,e.component.username)}))}function Ut(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Logged in user"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](8,1),(t()(),s["ɵeld"](9,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Logged in user"])),(t()(),s["ɵand"](16777216,null,null,1,null,Ht)),s["ɵdid"](12,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,2,0);var a=t(e,8,0,n.icons.user);t(e,7,0,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen)}))}const Wt=[Object(K.h)({height:0,visibility:"hidden"}),Object(K.e)("400ms cubic-bezier(0.4,0.0,0.2,1)",Object(K.h)({height:"*",visibility:"visible"}))],Kt=[Object(K.h)({height:"*",visibility:"visible"}),Object(K.e)("400ms cubic-bezier(0.4,0.0,0.2,1)",Object(K.h)({height:0,visibility:"hidden"}))];class $t{constructor(t,e,n){this._el=t,this._renderer=e,this.collapsed=new s.EventEmitter,this.collapses=new s.EventEmitter,this.expanded=new s.EventEmitter,this.expands=new s.EventEmitter,this.isExpanded=!0,this.isCollapsed=!1,this.isCollapse=!0,this.isCollapsing=!1,this.isAnimated=!1,this._display="block",this._stylesLoaded=!1,this._COLLAPSE_ACTION_NAME="collapse",this._EXPAND_ACTION_NAME="expand",this._factoryCollapseAnimation=n.build(Kt),this._factoryExpandAnimation=n.build(Wt)}set display(t){this.isAnimated?(this._display=t,"none"!==t?this.show():this.hide()):this._renderer.setStyle(this._el.nativeElement,"display",t)}set collapse(t){this._player&&!this._isAnimationDone||(this.isExpanded=t,this.toggle())}get collapse(){return this.isExpanded}ngAfterViewChecked(){this._stylesLoaded=!0,this._player&&this._isAnimationDone&&(this._player.reset(),this._renderer.setStyle(this._el.nativeElement,"height","*"))}toggle(){this.isExpanded?this.hide():this.show()}hide(){this.isCollapsing=!0,this.isExpanded=!1,this.isCollapsed=!0,this.isCollapsing=!1,this.collapses.emit(this),this._isAnimationDone=!1,this.animationRun(this.isAnimated,this._COLLAPSE_ACTION_NAME)(()=>{this._isAnimationDone=!0,this.collapsed.emit(this),this._renderer.setStyle(this._el.nativeElement,"display","none")})}show(){this._renderer.setStyle(this._el.nativeElement,"display",this._display),this.isCollapsing=!0,this.isExpanded=!0,this.isCollapsed=!1,this.isCollapsing=!1,this.expands.emit(this),this._isAnimationDone=!1,this.animationRun(this.isAnimated,this._EXPAND_ACTION_NAME)(()=>{this._isAnimationDone=!0,this.expanded.emit(this)})}animationRun(t,e){if(!t||!this._stylesLoaded)return t=>t();this._renderer.setStyle(this._el.nativeElement,"overflow","hidden"),this._renderer.addClass(this._el.nativeElement,"collapse");const n=e===this._EXPAND_ACTION_NAME?this._factoryExpandAnimation:this._factoryCollapseAnimation;return this._player&&this._player.destroy(),this._player=n.create(this._el.nativeElement),this._player.play(),t=>this._player.onDone(t)}}class Jt{static forRoot(){return{ngModule:Jt,providers:[]}}}class Zt{transform(t){return"HEALTH_OK"===t?{color:"#00bb00"}:"HEALTH_WARN"===t?{color:"#ffa500"}:"HEALTH_ERR"===t?{color:"#ff0000"}:null}}var Qt=n("MdoF"),Xt=n("CNMR"),te=n("20UP"),ee=n("oMSZ");class ne{constructor(t,e){this.settingsService=t,this.authStorageService=e,this.displayNotification=!1}ngOnInit(){this.settingsService.getStandardSettings().subscribe(t=>{this.pwdExpirationSettings=new ee.a(t);const e=this.authStorageService.getPwdExpirationDate();e&&(this.expirationDays=this.getExpirationDays(e),this.alertType=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning2?"danger":"warning",this.displayNotification=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning1,this.authStorageService.isPwdDisplayedSource.next(this.displayNotification))})}ngOnDestroy(){this.authStorageService.isPwdDisplayedSource.next(!1)}getExpirationDays(t){const e=new Date,n=new Date(1e3*t);return Math.floor((n.valueOf()-e.valueOf())/864e5)}close(){this.authStorageService.isPwdDisplayedSource.next(!1),this.displayNotification=!1}}var ae=s["ɵcrt"]({encapsulation:0,styles:[[".no-margin-bottom .alert{margin-bottom:0}"]],data:{}});function re(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Your password will expire in "])),(t()(),s["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["less than 1"])),(t()(),s["ɵted"](-1,null,[" day. Click "])),(t()(),s["ɵeld"](5,0,null,null,2,"a",[["class","alert-link"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to change it now."]))],(function(t,e){t(e,6,0,"/user-profile/edit")}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function ie(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Your password will expire in "])),(t()(),s["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""])),(t()(),s["ɵted"](-1,null,[" day(s). Click "])),(t()(),s["ɵeld"](5,0,null,null,2,"a",[["class","alert-link"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to change it now."]))],(function(t,e){t(e,6,0,"/user-profile/edit")}),(function(t,e){t(e,3,0,e.component.expirationDays),t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function se(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"alert",[["class","no-margin-bottom"]],null,[[null,"onClose"]],(function(t,e,n){var a=!0;return"onClose"===e&&(a=!1!==t.component.close(n)&&a),a}),Qt.c,Qt.b)),s["ɵdid"](1,114688,null,0,Xt.a,[Xt.b,s.ChangeDetectorRef],{type:[0,"type"],dismissible:[1,"dismissible"]},{onClose:"onClose"}),(t()(),s["ɵand"](16777216,null,0,1,null,re)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ie)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,s["ɵinlineInterpolate"](1,"",n.alertType,""),!0),t(e,3,0,0===n.expirationDays),t(e,5,0,n.expirationDays>0)}),null)}function oe(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,se)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.displayNotification)}),null)}var ue=n("pL04");let le=(()=>{class t{constructor(t){this.http=t,this.url="api/mgr/module"}list(){return this.http.get(""+this.url)}getConfig(t){return this.http.get(`${this.url}/${t}`)}updateConfig(t,e){return this.http.put(`${this.url}/${t}`,{config:e})}enable(t){return this.http.post(`${this.url}/${t}/enable`,null)}disable(t){return this.http.post(`${this.url}/${t}/disable`,null)}getOptions(t){return this.http.get(`${this.url}/${t}/options`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();var de=n("mtw6");let ce=(()=>{class t{constructor(){this.visible=!1,this.update=new s.EventEmitter}setVisibility(t){this.visible=t,this.update.emit(t)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();class fe{constructor(t,e,n,a,r){this.mgrModuleService=t,this.authStorageService=e,this.notificationService=n,this.telemetryNotificationService=a,this.i18n=r,this.displayNotification=!1}ngOnInit(){if(this.telemetryNotificationService.update.subscribe(t=>{this.displayNotification=t}),!this.isNotificationHidden()){const t=this.authStorageService.getPermissions().configOpt;tt.every(Object.values(t))&&this.mgrModuleService.getConfig("telemetry").subscribe(t=>{t.enabled||this.telemetryNotificationService.setVisibility(!0)})}}ngOnDestroy(){this.telemetryNotificationService.setVisibility(!1)}isNotificationHidden(){return"true"===localStorage.getItem("telemetry_notification_hidden")}close(){this.telemetryNotificationService.setVisibility(!1),localStorage.setItem("telemetry_notification_hidden","true"),this.notificationService.show(de.a.success,this.i18n("Telemetry activation reminder muted"),this.i18n("You can activate the module on the Telemetry configuration page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time."))}}var he=n("GiVz"),ge=s["ɵcrt"]({encapsulation:0,styles:[[".no-margin-bottom{margin-bottom:0}"]],data:{}});function pe(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"alert",[["class","no-margin-bottom"],["type","warning"]],null,[[null,"onClose"]],(function(t,e,n){var a=!0;return"onClose"===e&&(a=!1!==t.component.close(n)&&a),a}),Qt.c,Qt.b)),s["ɵdid"](1,114688,null,0,Xt.a,[Xt.b,s.ChangeDetectorRef],{type:[0,"type"],dismissible:[1,"dismissible"]},{onClose:"onClose"}),(t()(),s["ɵeld"](2,0,null,0,5,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The Telemetry module is not submitting telemetry data at the moment. Click "])),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","alert-link"],["routerLink","/telemetry"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to activate it now."]))],(function(t,e){t(e,1,0,"warning",!0),t(e,5,0,"/telemetry")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function be(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,pe)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.displayNotification)}),null)}var me=n("7qid"),ye=n("38Bd"),ve=n("wd/R");class xe{transform(t,e=!1){return e?ve(t).fromNow():this._forHumans(t)}_forHumans(t){const e=[[""+Math.floor(t/31536e3),"years"],[""+Math.floor(t%31536e3/86400),"days"],[""+Math.floor(t%86400/3600),"hours"],[""+Math.floor(t%3600/60),"minutes"],[""+Math.floor(t%60),"seconds"]];let n="";for(let a=0,r=e.length;a<r;a++)"0"!==e[a][0]&&(n+=" "+e[a][0]+" "+("1"===e[a][0]?e[a][1].substr(0,e[a][1].length-1):e[a][1]));return n.trim()||"1 second"}}var _e=n("a0VL"),Te=n("moLw"),Oe=n("WF9J"),we=s["ɵcrt"]({encapsulation:2,styles:["[data-simplebar]{position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;flex-wrap:wrap;-webkit-box-pack:start;justify-content:flex-start;align-content:flex-start;-webkit-box-align:start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;visibility:visible;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;-webkit-box-flex:inherit;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;-webkit-transition:opacity linear;transition:opacity linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}","ngx-simplebar{display:block}"],data:{}});function Se(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","simplebar-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"div",[["class","simplebar-height-auto-observer-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"div",[["class","simplebar-height-auto-observer"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,4,"div",[["class","simplebar-mask"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"div",[["class","simplebar-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"div",[["class","simplebar-content-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"div",[["class","simplebar-content"]],null,null,null,null,null)),s["ɵncd"](null,0),(t()(),s["ɵeld"](8,0,null,null,0,"div",[["class","simplebar-placeholder"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"div",[["class","simplebar-track simplebar-horizontal"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"div",[["class","simplebar-scrollbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"div",[["class","simplebar-track simplebar-vertical"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,0,"div",[["class","simplebar-scrollbar"]],null,null,null,null,null))],null,null)}var Ie=n("O9Tv"),Ne=n("G1I9"),Ce=n("lJxs");let Re=(()=>{class t{constructor(t,e){this.http=t,this.settingsService=e,this.baseURL="api/prometheus",this.settingsKey={alertmanager:"api/settings/alertmanager-api-host",prometheus:"api/settings/prometheus-api-host"}}ifAlertmanagerConfigured(t,e){this.settingsService.ifSettingConfigured(this.settingsKey.alertmanager,t,e)}disableAlertmanagerConfig(){this.settingsService.disableSetting(this.settingsKey.alertmanager)}ifPrometheusConfigured(t,e){this.settingsService.ifSettingConfigured(this.settingsKey.prometheus,t,e)}disablePrometheusConfig(){this.settingsService.disableSetting(this.settingsKey.prometheus)}getAlerts(t={}){return this.http.get(this.baseURL,{params:t})}getSilences(t={}){return this.http.get(this.baseURL+"/silences",{params:t})}getRules(t="all"){return this.http.get(this.baseURL+"/rules").pipe(Object(Ce.a)(e=>(["alerting","rewrites"].includes(t)&&e.groups.map(e=>{e.rules=e.rules.filter(e=>e.type===t)}),e)))}setSilence(t){return this.http.post(this.baseURL+"/silence",t,{observe:"response"})}expireSilence(t){return this.http.delete(`${this.baseURL}/silence/${t}`,{observe:"response"})}getNotifications(t){return this.http.get(`${this.baseURL}/notifications?from=${t&&t.id?t.id:"last"}`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](te.a))},token:t,providedIn:ue.a}),t})(),Ae=(()=>{class t{constructor(t){this.notificationService=t}sendNotifications(t){t.forEach(t=>this.notificationService.show(t))}convertToCustomAlerts(t){return tt.uniqWith(t.map(t=>({status:tt.isObject(t.status)?t.status.state:this.getPrometheusNotificationStatus(t),name:t.labels.alertname,url:t.generatorURL,summary:t.annotations.summary,fingerprint:tt.isObject(t.status)&&t.fingerprint})),tt.isEqual)}getPrometheusNotificationStatus(t){const e=t.status;return"firing"===e?"active":e}convertAlertToNotification(t){return new Ne.b(this.formatType(t.status),`${t.name} (${t.status})`,this.appendSourceLink(t,t.summary),void 0,"Prometheus")}formatType(t){return de.a[tt.findKey({error:["firing","active"],info:["suppressed","unprocessed"],success:["resolved"]},e=>e.includes(t))]}appendSourceLink(t,e){return`${e} <a href="${t.url}" target="_blank"><i class="${bt.a.lineChart}"></i></a>`}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](mt.a))},token:t,providedIn:"root"}),t})(),ke=(()=>{class t{constructor(t,e){this.alertFormatter=t,this.prometheusService=e,this.canAlertsBeNotified=!1,this.alerts=[],this.rules=[]}getAlerts(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getAlerts().subscribe(t=>this.handleAlerts(t),t=>{[404,504].includes(t.status)&&this.prometheusService.disableAlertmanagerConfig()})})}getRules(){this.prometheusService.ifPrometheusConfigured(()=>{this.prometheusService.getRules("alerting").subscribe(t=>{this.rules=t.groups.reduce((t,e)=>t.concat(e.rules.map(t=>(t.group=e.name,t))),[])})})}refresh(){this.getAlerts(),this.getRules()}handleAlerts(t){this.canAlertsBeNotified&&this.notifyOnAlertChanges(t,this.alerts),this.alerts=t,this.canAlertsBeNotified=!0}notifyOnAlertChanges(t,e){const n=this.getChangedAlerts(this.alertFormatter.convertToCustomAlerts(t),this.alertFormatter.convertToCustomAlerts(e)).map(t=>this.alertFormatter.convertAlertToNotification(t));this.alertFormatter.sendNotifications(n)}getChangedAlerts(t,e){return tt.differenceWith(t,e,tt.isEqual).concat(this.getVanishedAlerts(t,e))}getVanishedAlerts(t,e){return tt.differenceWith(e,t,(t,e)=>t.fingerprint===e.fingerprint).map(t=>(t.status="resolved",t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Ae),s["ɵɵinject"](Re))},token:t,providedIn:"root"}),t})(),Ee=(()=>{class t{constructor(t,e){this.alertFormatter=t,this.prometheusService=e,this.backendFailure=!1,this.notifications=[]}refresh(){this.backendFailure||this.prometheusService.getNotifications(tt.last(this.notifications)).subscribe(t=>this.handleNotifications(t),()=>this.backendFailure=!0)}handleNotifications(t){0!==t.length&&(this.notifications.length>0&&this.alertFormatter.sendNotifications(tt.flatten(t.map(t=>this.formatNotification(t)))),this.notifications=this.notifications.concat(t))}formatNotification(t){return this.alertFormatter.convertToCustomAlerts(t.alerts).map(t=>this.alertFormatter.convertAlertToNotification(t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Ae),s["ɵɵinject"](Re))},token:t,providedIn:"root"}),t})();var Le=n("ufoC");class De{constructor(t,e,n,a,r,i,s,o){this.notificationService=t,this.summaryService=e,this.taskMessageService=n,this.prometheusNotificationService=a,this.authStorageService=r,this.prometheusAlertService=i,this.ngZone=s,this.cdRef=o,this.isSidebarOpened=!1,this.executingTasks=[],this.subs=new pt.a,this.icons=bt.a,this.last_task="",this.mutex=new Ie.Mutex,this.simplebar={autoHide:!1},this.notifications=[]}ngOnDestroy(){window.clearInterval(this.interval),window.clearTimeout(this.timeout),this.subs.unsubscribe()}ngOnInit(){this.last_task=window.localStorage.getItem("last_task");const t=this.authStorageService.getPermissions();t.prometheus.read&&t.configOpt.read&&(this.triggerPrometheusAlerts(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.triggerPrometheusAlerts()})},5e3)})),this.subs.add(this.notificationService.data$.subscribe(t=>{this.notifications=tt.orderBy(t,["timestamp"],["desc"]),this.cdRef.detectChanges()})),this.subs.add(this.notificationService.sidebarSubject.subscribe(t=>{this.isSidebarOpened=!t&&!this.isSidebarOpened,window.clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.cdRef.detectChanges()},0)})),this.subs.add(this.summaryService.subscribe(t=>{this._handleTasks(t.executing_tasks),this.mutex.acquire().then(e=>{tt.filter(t.finished_tasks,t=>!this.last_task||ve(t.end_time).isAfter(this.last_task)).forEach(t=>{const e=this.notificationService.finishedTaskToNotification(t,t.success),n=new Ne.a(e);n.timestamp=t.end_time,n.duration=t.duration,this.last_task&&!ve(t.end_time).isAfter(this.last_task)||(this.last_task=t.end_time,window.localStorage.setItem("last_task",this.last_task)),this.notificationService.save(n)}),this.cdRef.detectChanges(),e()})}))}_handleTasks(t){for(const e of t)e.description=this.taskMessageService.getRunningTitle(e);this.executingTasks=t}triggerPrometheusAlerts(){this.prometheusAlertService.refresh(),this.prometheusNotificationService.refresh()}removeAll(){this.notificationService.removeAll()}remove(t){this.notificationService.remove(t)}closeSidebar(){this.isSidebarOpened=!1}trackByFn(t){return t}}var Pe=s["ɵcrt"]({encapsulation:0,styles:[["[_nghost-%COMP%]{position:fixed;top:53px;bottom:10px;right:-350px;width:350px;max-width:90vw;z-index:9;transition:all .6s}.active[_nghost-%COMP%]{right:20px}.card[_ngcontent-%COMP%]{height:100%}ngx-simplebar[_ngcontent-%COMP%]{height:calc(100% - 42.2px)}.separator[_ngcontent-%COMP%]{padding:5px 12px;color:#90949c;background-color:#eee;font-size:12px}.btn-link[_ngcontent-%COMP%]   .fa-trash-o[_ngcontent-%COMP%]{color:#000}table[_ngcontent-%COMP%]{width:100%}.row[_ngcontent-%COMP%]{margin-left:0;margin-right:0}"]],data:{}});function Me(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,27,"div",[["class","card tc_task border-0 mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,26,"div",[["class","row no-gutters"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,12,"div",[["class","col-md-3 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,11,"span",[["class","text-info"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](7,2),(t()(),s["ɵeld"](8,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](11,2),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,4),(t()(),s["ɵeld"](16,0,null,null,12,"div",[["class","col-md-9"]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,11,"div",[["class","card-body p-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,1,"h6",[["class","card-title bold"]],null,null,null,null,null)),(t()(),s["ɵted"](19,null,["",""])),(t()(),s["ɵeld"](20,0,null,null,2,"div",[["class","progress mb-1"]],null,null,null,null,null)),(t()(),s["ɵeld"](21,0,null,null,1,"progressbar",[["class","progress-striped active"],["max","100"]],[[1,"max",0],[2,"progress",null]],null,null,me.b,me.a)),s["ɵdid"](22,49152,null,0,ye.b,[ye.c],{animate:[0,"animate"],striped:[1,"striped"],value:[2,"value"],max:[3,"max"]},null),(t()(),s["ɵeld"](23,0,null,null,5,"p",[["class","card-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,2,"small",[["class","date float-left"]],null,null,null,null,null)),(t()(),s["ɵted"](25,null,[" "," "])),s["ɵppd"](26,1),(t()(),s["ɵeld"](27,0,null,null,1,"span",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵted"](28,null,[" "," % "])),(t()(),s["ɵeld"](29,0,null,null,0,"hr",[],null,null,null,null,null))],(function(t,e){var n=e.component,a=t(e,7,0,n.icons.stack,n.icons.large2x);t(e,6,0,"text-info",a);var r=t(e,11,0,n.icons.stack2x,n.icons.circle);t(e,10,0,r);var i=t(e,15,0,n.icons.stack1x,n.icons.spinner,n.icons.spin,n.icons.inverse);t(e,14,0,i),t(e,22,0,!0,!0,e.context.$implicit.progress,"100")}),(function(t,e){t(e,19,0,e.context.$implicit.description),t(e,21,0,s["ɵnov"](e,22).max,s["ɵnov"](e,22).addClass);var n=s["ɵunv"](e,25,0,t(e,26,0,s["ɵnov"](e.parent.parent,0),e.context.$implicit.begin_time));t(e,25,0,n),t(e,28,0,e.context.$implicit.progress||0)}))}function qe(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Me)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.executingTasks,n.trackByFn)}),null)}function je(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"small",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Duration:"])),(t()(),s["ɵted"](4,null,[" "," "])),s["ɵpid"](0,xe,[]),(t()(),s["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,4,0,s["ɵunv"](e,4,0,s["ɵnov"](e,5).transform(e.parent.context.$implicit.duration)))}))}function Fe(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,37,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,35,"div",[["class","card tc_notification border-0 mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,34,"div",[["class","row no-gutters"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,12,"div",[["class","col-md-3 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,11,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,3),(t()(),s["ɵeld"](8,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](11,2),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,3),(t()(),s["ɵeld"](16,0,null,null,20,"div",[["class","col-md-9"]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,19,"div",[["class","card-body p-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,4,"button",[["class","btn btn-link float-right mt-0 pt-0"],["title","Remove notification"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.remove(t.context.index),a=!1!==n.stopPropagation()&&a),a}),null,null)),(t()(),s["ɵeld"](19,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](21,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](22,1),(t()(),s["ɵeld"](23,0,null,null,1,"h6",[["class","card-title bold"]],null,null,null,null,null)),(t()(),s["ɵted"](24,null,["",""])),(t()(),s["ɵeld"](25,0,null,null,0,"p",[["class","card-text"]],[[8,"innerHTML",1]],null,null,null,null)),(t()(),s["ɵeld"](26,0,null,null,10,"p",[["class","card-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,je)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](29,0,null,null,3,"small",[["class","date"]],[[8,"title",0]],null,null,null,null)),s["ɵppd"](30,1),(t()(),s["ɵted"](31,null,["",""])),s["ɵpid"](0,xe,[]),(t()(),s["ɵeld"](33,0,null,null,3,"i",[["class","float-right custom-icon"]],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](35,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](36,1),(t()(),s["ɵeld"](37,0,null,null,0,"hr",[],null,null,null,null,null))],(function(t,e){var n=e.component,a=t(e,7,0,n.icons.stack,n.icons.large2x,e.context.$implicit.textClass);t(e,6,0,a);var r=t(e,11,0,n.icons.circle,n.icons.stack2x);t(e,10,0,r);var i=t(e,15,0,n.icons.stack1x,n.icons.inverse,e.context.$implicit.iconClass);t(e,14,0,i);var s=t(e,22,0,n.icons.trash);t(e,21,0,s),t(e,28,0,e.context.$implicit.duration);var o=t(e,36,0,e.context.$implicit.applicationClass);t(e,35,0,"float-right custom-icon",o)}),(function(t,e){t(e,24,0,e.context.$implicit.title),t(e,25,0,e.context.$implicit.message);var n=s["ɵunv"](e,29,0,t(e,30,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.timestamp));t(e,29,0,n),t(e,31,0,s["ɵunv"](e,31,0,s["ɵnov"](e,32).transform(e.context.$implicit.timestamp,!0))),t(e,33,0,e.context.$implicit.application)}))}function Ge(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"button",[["class","btn btn-light btn-block"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.removeAll(),a=!1!==n.stopPropagation()&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵted"](-1,null,["   "])),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clear notifications"])),(t()(),s["ɵeld"](9,0,null,null,0,"hr",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Fe)),s["ɵdid"](11,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,5,0,n.icons.trash);t(e,4,0,a),t(e,11,0,n.notifications)}),null)}function Ve(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ge)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.notifications.length>0)}),null)}function ze(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"div",[["class","message text-center"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["There are no notifications."]))],null,null)}function Be(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ze)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,0===n.notifications.length&&0===n.executingTasks.length)}),null)}function Ye(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function He(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Ue(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function We(t){return s["ɵvid"](2,[s["ɵpid"](0,_e.a,[i.DatePipe]),(t()(),s["ɵand"](0,[["tasksTpl",2]],null,0,null,qe)),(t()(),s["ɵand"](0,[["notificationsTpl",2]],null,0,null,Ve)),(t()(),s["ɵand"](0,[["emptyTpl",2]],null,0,null,Be)),(t()(),s["ɵeld"](4,0,null,null,16,"div",[["class","card"]],null,[[null,"clickOutside"]],(function(t,e,n){var a=!0;return"clickOutside"===e&&(a=!1!==t.component.closeSidebar()&&a),a}),null,null)),s["ɵdid"](5,737280,null,0,Te.ClickOutsideDirective,[s.ElementRef,s.NgZone,s.PLATFORM_ID],{clickOutsideEnabled:[0,"clickOutsideEnabled"]},{clickOutside:"clickOutside"}),(t()(),s["ɵeld"](6,0,null,null,5,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tasks and Notifications"])),(t()(),s["ɵeld"](9,0,null,null,2,"button",[["class","close float-right"],["tabindex","-1"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.closeSidebar()&&a),a}),null,null)),(t()(),s["ɵeld"](10,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](12,0,null,null,8,"ngx-simplebar",[["data-simplebar","init"]],null,null,null,Se,we)),s["ɵdid"](13,4440064,null,0,Oe.a,[s.ElementRef],{options:[0,"options"]},null),(t()(),s["ɵeld"](14,0,null,0,6,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ye)),s["ɵdid"](16,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,He)),s["ɵdid"](18,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ue)),s["ɵdid"](20,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,5,0,n.isSidebarOpened),t(e,13,0,n.simplebar),t(e,16,0,s["ɵnov"](e,1)),t(e,18,0,s["ɵnov"](e,2)),t(e,20,0,s["ɵnov"](e,3))}),null)}var Ke=n("ej+x");class $e{constructor(t,e,n,a,r){this.authStorageService=t,this.summaryService=e,this.featureToggles=n,this.telemetryNotificationService=a,this.prometheusAlertService=r,this.notifications=[],this.icons=bt.a,this.isCollapsed=!0,this.showMenuSidebar=!0,this.displayedSubMenu="",this.simplebar={autoHide:!1},this.subs=new pt.a,this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}get class(){return"top-notification-"+this.notifications.length}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.summaryData=t})),this.subs.add(this.authStorageService.isPwdDisplayed$.subscribe(t=>{this.showTopNotification("isPwdDisplayed",t)})),this.subs.add(this.telemetryNotificationService.update.subscribe(t=>{this.showTopNotification("telemetryNotificationEnabled",t)}))}ngOnDestroy(){this.subs.unsubscribe()}blockHealthColor(){if(this.summaryData&&this.summaryData.rbd_mirroring){if(this.summaryData.rbd_mirroring.errors>0)return{color:"#d9534f"};if(this.summaryData.rbd_mirroring.warnings>0)return{color:"#f0ad4e"}}}toggleSubMenu(t){this.displayedSubMenu=this.displayedSubMenu===t?"":t}showTopNotification(t,e){if(e)this.notifications.includes(t)||this.notifications.push(t);else{const e=this.notifications.indexOf(t);e>=0&&this.notifications.splice(e,1)}}}var Je=s["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";  .cd-navbar-top .cd-navbar-brand{background:#374249;border-top:4px solid #2b99a8}  .cd-navbar-top .cd-navbar-brand.isPwdDisplayed{top:37.6px}  .cd-navbar-top .cd-navbar-brand .navbar-brand,   .cd-navbar-top .cd-navbar-brand .navbar-brand:hover{color:#eee;height:auto;padding:0}  .cd-navbar-top .cd-navbar-brand .navbar-brand>img{height:25px}  .cd-navbar-top .cd-navbar-brand .navbar-toggler{border:0}  .cd-navbar-top .cd-navbar-brand .navbar-toggler:focus,   .cd-navbar-top .cd-navbar-brand .navbar-toggler:hover{outline:0}  .cd-navbar-top .cd-navbar-brand .navbar-toggler .fa-navicon{color:#eee}  .cd-navbar-top .cd-navbar-brand .navbar-collapse{padding:0}  .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>.active>a{color:#eee;background-color:#2b99a8}  .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a,   .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:focus,   .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:hover{color:#eee;border-color:transparent;background-color:transparent}  .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown]>a,   .cd-navbar-top .navbar-nav>li>.cd-navbar>a,   .cd-navbar-top .navbar-nav>li>a{color:#eee;line-height:1;padding:13.5px 18px!important;position:relative;display:block;text-decoration:none}  .cd-navbar-top .navbar-nav .nav-link,   .cd-navbar-top .navbar-nav .nav-link:hover{color:#eee}  .cd-navbar-top .navbar-nav>li:hover,   .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown].open>a,   .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown]>a:hover,   .cd-navbar-top .navbar-nav>li>.cd-navbar>a:hover,   .cd-navbar-top .navbar-nav>li>a:hover{background-color:#2b99a8}  .cd-navbar-top .navbar-nav>.open>.cd-navbar>[dropdown]>a,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>[dropdown]>a:hover,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:focus,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:hover,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>li>a:focus,   .cd-navbar-top .navbar-nav>.open>a,   .cd-navbar-top .navbar-nav>.open>a:focus,   .cd-navbar-top .navbar-nav>.open>a:hover{color:#eee;border-color:transparent;background-color:transparent}@media (min-width:768px){  .cd-navbar-top .cd-navbar-utility{border-bottom:0;position:absolute;right:0;top:0;font-size:1.1rem}}@media (max-width:calc(768px - 1px)){  .cd-navbar-top .navbar-nav{margin:0}  .cd-navbar-top .navbar-nav .fa{margin-right:.5em}  .cd-navbar-top .navbar-nav .open .dropdown-menu{border:0;padding-top:0;padding-bottom:0;background-color:#2b99a8}  .cd-navbar-top .navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 35px;color:#eee}  .cd-navbar-top .navbar-nav .open .dropdown-menu>.active>a{background-color:#2b99a8}  .cd-navbar-top .navbar-nav>li>a:hover{background-color:#2b99a8}}.cd-navbar-primary[_ngcontent-%COMP%]   .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:focus, .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover{color:#eee!important;background-color:#2b99a8!important;border:0!important}.wrapper[_ngcontent-%COMP%]{display:flex;width:100%}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]{width:200px;top:43px;background:#374249;overflow-y:auto;position:fixed;bottom:0;left:0;z-index:999;color:#fff;transition:all .3s}.wrapper[_ngcontent-%COMP%]   #sidebar.active[_ngcontent-%COMP%]{margin-left:-200px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul.component[_ngcontent-%COMP%]{padding:20px 0;margin:0}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{color:#fff;padding:10px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{padding:10px;font-size:1.1em;display:block;color:#fff;text-decoration:none}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:hover{color:#fff;background:#2b99a8}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%] > .badge[_ngcontent-%COMP%]{margin-left:5px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li.active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]   a[aria-expanded=true][_ngcontent-%COMP%]{color:#fff}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]{position:relative}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]::after{position:absolute;right:20px;content:"";font-family:ForkAwesome;border:0;font-size:1rem;transition:transform .3s ease-in-out}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[aria-expanded=true][_ngcontent-%COMP%]::after{transform:rotate(90deg)}.wrapper[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{font-size:.9em!important;padding-left:30px!important;background:#4d5c66}.wrapper[_ngcontent-%COMP%]   .cd-navbar-primary[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:focus{outline:0}.wrapper[_ngcontent-%COMP%]   ngx-simplebar[_ngcontent-%COMP%]{height:100%}#content[_ngcontent-%COMP%]{width:calc(100% - 200px);transition:all .3s;position:absolute;top:43px;bottom:0;right:0}#content.active[_ngcontent-%COMP%]{width:100vw}.top-notification-1[_nghost-%COMP%]   .cd-navbar-top[_ngcontent-%COMP%]   .cd-navbar-brand[_ngcontent-%COMP%]{top:37.6px}.top-notification-1[_nghost-%COMP%]   #sidebar[_ngcontent-%COMP%]{top:80.6px}.top-notification-1[_nghost-%COMP%]   #content[_ngcontent-%COMP%]{top:80.6px}.top-notification-1[_nghost-%COMP%]   cd-notifications-sidebar[_ngcontent-%COMP%]{top:90.6px}.top-notification-2[_nghost-%COMP%]   .cd-navbar-top[_ngcontent-%COMP%]   .cd-navbar-brand[_ngcontent-%COMP%]{top:75.2px}.top-notification-2[_nghost-%COMP%]   #sidebar[_ngcontent-%COMP%]{top:118.2px}.top-notification-2[_nghost-%COMP%]   #content[_ngcontent-%COMP%]{top:118.2px}.top-notification-2[_nghost-%COMP%]   cd-notifications-sidebar[_ngcontent-%COMP%]{top:128.2px}']],data:{}});function Ze(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Qe(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Xe(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"cd-language-selector",[["class","cd-navbar"]],null,null,null,gt,ut)),s["ɵdid"](2,114688,null,0,st,[ot.l,at],null,null),(t()(),s["ɵeld"](3,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"cd-notifications",[["class","cd-navbar"]],null,null,null,Tt,xt)),s["ɵdid"](5,245760,null,0,vt,[mt.a,yt.a],null,null),(t()(),s["ɵeld"](6,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"cd-dashboard-help",[["class","cd-navbar"]],null,null,null,Et,At)),s["ɵdid"](8,114688,null,0,Ct,[Rt.b,Q.a,Ot.a],null,null),(t()(),s["ɵeld"](9,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,1,"cd-administration",[["class","cd-navbar"]],null,null,null,Gt,Pt)),s["ɵdid"](11,114688,null,0,Dt,[Q.a],null,null),(t()(),s["ɵeld"](12,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"cd-identity",[["class","cd-navbar"]],null,null,null,Ut,Bt)),s["ɵdid"](14,114688,null,0,zt,[Q.a,Vt.a],null,null)],(function(t,e){t(e,2,0),t(e,5,0),t(e,8,0),t(e,11,0),t(e,14,0)}),null)}function tn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_hosts"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,5,{links:1}),s["ɵqud"](603979776,6,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/hosts"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[6,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Hosts"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/hosts")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function en(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_inventory"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,7,{links:1}),s["ɵqud"](603979776,8,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/inventory"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[8,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Inventory"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/inventory")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function nn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_monitor"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,9,{links:1}),s["ɵqud"](603979776,10,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/monitor/"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[10,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Monitors"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/monitor/")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function an(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_services"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,11,{links:1}),s["ɵqud"](603979776,12,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/services/"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[12,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Services"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/services/")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function rn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_osds"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,13,{links:1}),s["ɵqud"](603979776,14,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/osd"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[14,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["OSDs"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/osd")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function sn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_configuration"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,15,{links:1}),s["ɵqud"](603979776,16,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/configuration"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[16,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Configuration"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/configuration")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function on(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_crush"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,17,{links:1}),s["ɵqud"](603979776,18,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/crush-map"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[18,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["CRUSH map"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/crush-map")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function un(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_modules"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,19,{links:1}),s["ɵqud"](603979776,20,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/mgr-modules"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[20,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Manager Modules"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/mgr-modules")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function ln(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_log"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,21,{links:1}),s["ɵqud"](603979776,22,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/logs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[22,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Logs"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/logs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function dn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-danger"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.prometheusAlertService.alerts.length)}))}function cn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"li",[["class","tc_submenuitem tc_submenuitem_monitoring"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,23,{links:1}),s["ɵqud"](603979776,24,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,5,"a",[["routerLink","/monitoring"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[24,4],[4,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Monitoring"])),(t()(),s["ɵand"](16777216,null,null,1,null,dn)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,5,0,"/monitoring"),t(e,9,0,n.prometheusAlertService.alerts.length>0)}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function fn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,28,"li",[["class","nav-item tc_menuitem_cluster"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,3,{links:1}),s["ɵqud"](603979776,4,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("cluster")&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster"])),(t()(),s["ɵeld"](7,0,null,null,21,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](8,8404992,null,0,$t,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tn)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,en)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,nn)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,an)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rn)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sn)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,on)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,un)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ln)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cn)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,8,0,!0,"cluster"!==n.displayedSubMenu),t(e,10,0,n.permissions.hosts.read),t(e,12,0,n.permissions.hosts.read),t(e,14,0,n.permissions.monitor.read),t(e,16,0,n.permissions.hosts.read),t(e,18,0,n.permissions.osd.read),t(e,20,0,n.permissions.configOpt.read),t(e,22,0,n.permissions.osd.read),t(e,24,0,n.permissions.configOpt.read),t(e,26,0,n.permissions.log.read),t(e,28,0,n.permissions.prometheus.read)}),(function(t,e){t(e,4,0,"cluster"==e.component.displayedSubMenu),t(e,7,0,s["ɵnov"](e,8).isCollapse,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isCollapsed,s["ɵnov"](e,8).isCollapsing)}))}function hn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_pool"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,25,{links:1}),s["ɵqud"](603979776,26,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/pool"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[26,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Pools"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/pool")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function gn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_block_images"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,29,{links:1}),s["ɵqud"](603979776,30,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/block/rbd"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[30,4],[28,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Images"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/block/rbd")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function pn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-warning"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)}))}function bn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-danger"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors)}))}function mn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"li",[["class","tc_submenuitem tc_submenuitem_block_mirroring"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,31,{links:1}),s["ɵqud"](603979776,32,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,7,"a",[["routerLink","/block/mirroring"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[32,4],[28,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Mirroring"])),(t()(),s["ɵand"](16777216,null,null,1,null,pn)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,bn)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,5,0,"/block/mirroring"),t(e,9,0,0!==(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)),t(e,11,0,0!==(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors))}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function yn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_block_iscsi"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,33,{links:1}),s["ɵqud"](603979776,34,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/block/iscsi"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[34,4],[28,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["iSCSI"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/block/iscsi")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function vn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,16,"li",[["class","nav-item tc_menuitem_block"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,27,{links:1}),s["ɵqud"](603979776,28,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,4,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("block")&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Block"])),(t()(),s["ɵeld"](9,0,null,null,7,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](10,8404992,null,0,$t,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gn)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,mn)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yn)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,6,0,n.blockHealthColor()),t(e,10,0,!0,"block"!==n.displayedSubMenu),t(e,12,0,n.permissions.rbdImage.read&&e.parent.context.ngIf.rbd),t(e,14,0,n.permissions.rbdMirroring.read&&e.parent.context.ngIf.mirroring),t(e,16,0,n.permissions.iscsi.read&&e.parent.context.ngIf.iscsi)}),(function(t,e){t(e,4,0,"block"==e.component.displayedSubMenu),t(e,9,0,s["ɵnov"](e,10).isCollapse,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isCollapsed,s["ɵnov"](e,10).isCollapsing)}))}function xn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_nfs"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,35,{links:1}),s["ɵqud"](603979776,36,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/nfs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[36,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["NFS"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/nfs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function _n(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_cephfs"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,37,{links:1}),s["ɵqud"](603979776,38,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/cephfs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[38,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Filesystems"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/cephfs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function Tn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"li",[["class","nav-item tc_menuitem_rgw"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,39,{links:1}),s["ɵqud"](603979776,40,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("rgw")&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway"])),(t()(),s["ɵeld"](7,0,null,null,22,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](8,8404992,null,0,$t,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵeld"](9,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_daemons"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](10,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,41,{links:1}),s["ɵqud"](603979776,42,{linksWithHrefs:1}),(t()(),s["ɵeld"](13,0,null,null,2,"a",[["routerLink","/rgw/daemon"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,14).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](14,671744,[[42,4],[40,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Daemons"])),(t()(),s["ɵeld"](16,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_users"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](17,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,43,{links:1}),s["ɵqud"](603979776,44,{linksWithHrefs:1}),(t()(),s["ɵeld"](20,0,null,null,2,"a",[["routerLink","/rgw/user"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,21).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](21,671744,[[44,4],[40,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Users"])),(t()(),s["ɵeld"](23,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_buckets"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](24,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,45,{links:1}),s["ɵqud"](603979776,46,{linksWithHrefs:1}),(t()(),s["ɵeld"](27,0,null,null,2,"a",[["routerLink","/rgw/bucket"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,28).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](28,671744,[[46,4],[40,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Buckets"]))],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,8,0,!0,"rgw"!==n.displayedSubMenu),t(e,10,0,"active"),t(e,14,0,"/rgw/daemon"),t(e,17,0,"active"),t(e,21,0,"/rgw/user"),t(e,24,0,"active"),t(e,28,0,"/rgw/bucket")}),(function(t,e){t(e,4,0,"rgw"==e.component.displayedSubMenu),t(e,7,0,s["ɵnov"](e,8).isCollapse,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isCollapsed,s["ɵnov"](e,8).isCollapsing),t(e,13,0,s["ɵnov"](e,14).target,s["ɵnov"](e,14).href),t(e,20,0,s["ɵnov"](e,21).target,s["ɵnov"](e,21).href),t(e,27,0,s["ɵnov"](e,28).target,s["ɵnov"](e,28).href)}))}function On(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,28,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,15,"li",[["class","nav-item tc_menuitem_dashboard"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](2,1720320,null,2,Lt.o,[Lt.m,s.ElementRef,s.Renderer2,[2,Lt.n],[2,Lt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,1,{links:1}),s["ɵqud"](603979776,2,{linksWithHrefs:1}),(t()(),s["ɵeld"](5,0,null,null,11,"a",[["class","nav-link"],["routerLink","/dashboard"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,[[2,4]],0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](7,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Dashboard"])),(t()(),s["ɵted"](-1,null,["  "])),(t()(),s["ɵeld"](10,0,null,null,6,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](12,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](13,1),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](15,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](16,1),(t()(),s["ɵand"](16777216,null,null,1,null,fn)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hn)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vn)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xn)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_n)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tn)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,"active"),t(e,6,0,"/dashboard");var a=t(e,13,0,n.icons.health);t(e,12,0,a);var r=s["ɵunv"](e,15,0,t(e,16,0,s["ɵnov"](e.parent.parent,0),null==n.summaryData?null:n.summaryData.health_status));t(e,15,0,r),t(e,18,0,n.permissions.hosts.read||n.permissions.monitor.read||n.permissions.osd.read||n.permissions.configOpt.read||n.permissions.log.read||n.permissions.prometheus.read),t(e,20,0,n.permissions.pool.read),t(e,22,0,(n.permissions.rbdImage.read||n.permissions.rbdMirroring.read||n.permissions.iscsi.read)&&(e.context.ngIf.rbd||e.context.ngIf.mirroring||e.context.ngIf.iscsi)),t(e,24,0,n.permissions.nfs.read&&e.context.ngIf.nfs),t(e,26,0,n.permissions.cephfs.read&&e.context.ngIf.cephfs),t(e,28,0,n.permissions.rgw.read&&e.context.ngIf.rgw)}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function wn(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,2,null,On)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpid"](131072,i.AsyncPipe,[s.ChangeDetectorRef]),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,s["ɵunv"](e,1,0,s["ɵnov"](e,2).transform(n.enabledFeature$)))}),null)}function Sn(t){return s["ɵvid"](0,[s["ɵpid"](0,Zt,[]),(t()(),s["ɵeld"](1,0,null,null,1,"cd-pwd-expiration-notification",[],null,null,null,oe,ae)),s["ɵdid"](2,245760,null,0,ne,[te.a,Q.a],null,null),(t()(),s["ɵeld"](3,0,null,null,1,"cd-telemetry-notification",[],null,null,null,be,ge)),s["ɵdid"](4,245760,null,0,fe,[le,Q.a,mt.a,ce,he.a],null,null),(t()(),s["ɵeld"](5,0,null,null,1,"cd-notifications-sidebar",[],[[2,"active",null]],null,null,We,Pe)),s["ɵdid"](6,245760,null,0,De,[mt.a,yt.a,Le.a,Ee,Q.a,ke,s.NgZone,s.ChangeDetectorRef],null,null),(t()(),s["ɵeld"](7,0,null,null,15,"div",[["class","cd-navbar-top"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,14,"nav",[["class","navbar fixed-top navbar-expand-md navbar-dark cd-navbar-brand"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"button",[["class","btn btn-link py-0"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=0!=(r.showMenuSidebar=!r.showMenuSidebar)&&a),a}),null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"i",[["aria-hidden","true"],["class","fa fa-bars fa-2x"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","navbar-brand ml-2"],["href","#"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,0,"img",[["alt","Ceph"],["src","assets/Ceph_Logo_Standard_RGB_White_120411_fa.png"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,4,"button",[["class","navbar-toggler"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=0!=(r.isCollapsed=!r.isCollapsed)&&a),a}),null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"span",[["class","sr-only"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Toggle navigation"])),(t()(),s["ɵeld"](16,0,null,null,1,"span",[["class",""]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,0,"i",[["class","fa fa-navicon fa-lg"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,4,"div",[["class","collapse navbar-collapse"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](19,8404992,null,0,$t,[s.ElementRef,s.Renderer2,K.b],{collapse:[0,"collapse"]},null),(t()(),s["ɵeld"](20,0,null,null,2,"ul",[["class","nav navbar-nav cd-navbar-utility my-2 my-md-0"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ze)),s["ɵdid"](22,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](23,0,null,null,14,"div",[["class","wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,8,"nav",[["id","sidebar"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](26,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](27,{active:0}),(t()(),s["ɵeld"](28,0,null,null,4,"ngx-simplebar",[["data-simplebar","init"]],null,null,null,Se,we)),s["ɵdid"](29,4440064,null,0,Oe.a,[s.ElementRef],{options:[0,"options"]},null),(t()(),s["ɵeld"](30,0,null,0,2,"ul",[["class","list-unstyled components cd-navbar-primary"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Qe)),s["ɵdid"](32,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](33,0,null,null,4,"div",[["id","content"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](35,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](36,{active:0}),s["ɵncd"](null,0),(t()(),s["ɵand"](0,[["cd_utilities",2]],null,0,null,Xe)),(t()(),s["ɵand"](0,[["cd_menu",2]],null,0,null,wn))],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0),t(e,6,0),t(e,19,0,n.isCollapsed),t(e,22,0,s["ɵnov"](e,38));var a=t(e,27,0,!n.showMenuSidebar);t(e,26,0,a),t(e,29,0,n.simplebar),t(e,32,0,s["ɵnov"](e,39));var r=t(e,36,0,!n.showMenuSidebar);t(e,35,0,r)}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).isSidebarOpened),t(e,18,0,s["ɵnov"](e,19).isCollapse,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isCollapsed,s["ɵnov"](e,19).isCollapsing)}))}var In=n("LRne"),Nn=n("HDdC"),Cn=n("Cfvw"),Rn=n("pLZG"),An=n("5+tZ"),kn=n("l7GE"),En=n("ZUHj");class Ln{constructor(t,e){this.keySelector=t,this.flushes=e}call(t,e){return e.subscribe(new Dn(t,this.keySelector,this.flushes))}}class Dn extends kn.a{constructor(t,e,n){super(t),this.keySelector=e,this.values=new Set,n&&this.add(Object(En.a)(this,n))}notifyNext(t,e,n,a,r){this.values.clear()}notifyError(t,e){this._error(t)}_next(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)}_useKeySelector(t){let e;const{destination:n}=this;try{e=this.keySelector(t)}catch(a){return void n.error(a)}this._finalizeNext(e,t)}_finalizeNext(t,e){const{values:n}=this;n.has(t)||(n.add(t),this.destination.next(e))}}var Pn=n("128B");function Mn(t,e,n){return 0===n?[e]:(t.push(e),t)}function qn(){return Object(Pn.a)(Mn,[])}var jn=n("SxV6"),Fn=n("GyhO");class Gn{resolve(t){const e=t.routeConfig.data,n=null===e.path?null:this.getFullPath(t),a=[{text:"string"==typeof e.breadcrumbs?e.breadcrumbs:e.breadcrumbs.text||e.text||n,path:n}];return Object(In.a)(a)}getFullPath(t){return t.pathFromRoot.reduce((t,e)=>t+e.url.reduce((t,e)=>t+"/"+e.path,""),"")}}class Vn{constructor(t,e){this.router=t,this.injector=e,this.crumbs=[],this.finished=!1,this.defaultResolver=new Gn,this.subscription=this.router.events.pipe(Object(Rn.a)(t=>t instanceof Lt.e)).subscribe(()=>{this.finished=!1}),this.subscription=this.router.events.pipe(Object(Rn.a)(t=>t instanceof Lt.d)).subscribe(()=>{var e;this._resolveCrumbs(t.routerState.snapshot.root).pipe(Object(An.a)(t=>t),(e=t=>t.text,t=>t.lift(new Ln(e,void 0))),qn(),Object(An.a)(t=>{const e=this.postProcess(t);return this.wrapIntoObservable(e).pipe(Object(jn.a)())})).subscribe(t=>{this.finished=!0,this.crumbs=t})})}ngOnDestroy(){this.subscription.unsubscribe()}_resolveCrumbs(t){let e;const n=t.routeConfig&&t.routeConfig.data;if(n&&n.breadcrumbs){let a;a=n.breadcrumbs.prototype instanceof Gn?this.injector.get(n.breadcrumbs):this.defaultResolver;const r=a.resolve(t);e=this.wrapIntoObservable(r).pipe(Object(jn.a)())}else e=Object(In.a)([]);return t.firstChild&&(e=e.pipe(function(...t){return e=>e.lift.call(Object(Fn.a)(e,...t))}(this._resolveCrumbs(t.firstChild)))),e}postProcess(t){const e=[];return t.forEach(t=>{const n=t.text.split("/");if(n.length>1){t.text=n[n.length-1];for(let t=0;t<n.length-1;t++)e.push({text:n[t],path:null})}e.push(t)}),e}isPromise(t){return t&&"function"==typeof t.then}wrapIntoObservable(t){return t instanceof Nn.a?t:this.isPromise(t)?Object(Cn.a)(Promise.resolve(t)):Object(In.a)(t)}}var zn=s["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";.breadcrumb[_ngcontent-%COMP%]{padding:8px 0;background-color:transparent;border-radius:0;margin-top:8px}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]:before{padding:0 5px 0 7px;color:#474544;font-family:ForkAwesome;content:""}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:#474544}']],data:{}});function Bn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"a",[["preserveFragment",""]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),s["ɵted"](2,null,["",""]))],(function(t,e){t(e,1,0,"",e.parent.context.$implicit.path)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,2,0,e.parent.context.$implicit.text)}))}function Yn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.text)}))}function Hn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"li",[["class","breadcrumb-item"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](3,{active:0}),(t()(),s["ɵand"](16777216,null,null,1,null,Bn)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yn)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=t(e,3,0,e.context.last&&e.component.finished);t(e,2,0,"breadcrumb-item",n),t(e,5,0,!e.context.last&&null!==e.context.$implicit.path),t(e,7,0,e.context.last||null===e.context.$implicit.path)}),null)}function Un(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"ol",[["class","breadcrumb"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Hn)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.crumbs)}),null)}function Wn(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Un)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.crumbs.length)}),null)}var Kn=n("978R"),$n=n("VXsX");const Jn=()=>Object.assign(new Kn.a,{container:"body"});class Zn{constructor(t,e,n){this.router=t,this.summaryService=e,this.taskManagerService=n,this.subs=new pt.a}ngOnInit(){this.subs.add(this.summaryService.startPolling()),this.subs.add(this.taskManagerService.init(this.summaryService))}ngOnDestroy(){this.subs.unsubscribe()}isDashboardPage(){return"/dashboard"===this.router.url}}var Qn=s["ɵcrt"]({encapsulation:0,styles:[[".dashboard[_ngcontent-%COMP%]{background-color:#f5f5f5;margin:0;padding:0}.container-fluid[_ngcontent-%COMP%]{overflow:auto}  #toast-container{margin-top:2vw}@media (max-width:1600px){  #toast-container{margin-top:2.5vw}}@media (max-width:calc(992px - 1px)){  #toast-container{margin-top:9vw}}@media (max-width:900px){  #toast-container{margin-top:10vw}}@media (max-width:319px){  #toast-container{margin-top:11vw}}@media (max-width:260px){  #toast-container{margin-top:14vw}}"]],data:{}});function Xn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"block-ui",[],null,null,null,P,D)),s["ɵdid"](1,114688,null,0,I,[S],null,null),(t()(),s["ɵeld"](2,0,null,0,9,"cd-navigation",[],[[8,"className",0]],null,null,Sn,Je)),s["ɵdid"](3,245760,null,0,$e,[Q.a,yt.a,Ke.a,ce,ke],null,null),(t()(),s["ɵeld"](4,0,null,0,7,"div",[["class","container-fluid h-100"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{dashboard:0}),(t()(),s["ɵeld"](8,0,null,null,1,"cd-breadcrumbs",[],null,null,null,Wn,zn)),s["ɵdid"](9,180224,null,0,Vn,[Lt.m,s.Injector],null,null),(t()(),s["ɵeld"](10,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](11,212992,null,0,Lt.r,[Lt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){var n=e.component;t(e,1,0),t(e,3,0);var a=t(e,7,0,n.isDashboardPage());t(e,6,0,"container-fluid h-100",a),t(e,11,0)}),(function(t,e){t(e,2,0,s["ɵnov"](e,3).class)}))}function ta(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-workbench-layout",[],null,null,null,Xn,Qn)),s["ɵprd"](5120,null,Kn.a,Jn,[]),s["ɵdid"](2,245760,null,0,Zn,[Lt.m,yt.a,$n.a],null,null)],(function(t,e){t(e,2,0)}),null)}var ea=s["ɵccf"]("cd-workbench-layout",Zn,ta,{},{},[]),na=n("pKUh"),aa=n("2ZVE"),ra=n("KOzp"),ia=n("2uy1");class sa{constructor(){this.cardClass=""}}var oa=s["ɵcrt"]({encapsulation:0,styles:[[".card[_ngcontent-%COMP%]{height:100%;border:.5px solid #ddd;border-radius:3px;box-shadow:0 1px 1px rgba(3,3,3,.175);font-size:12px}@media screen and (min-width:320px){.card[_ngcontent-%COMP%]{font-size:calc(12px + 9 * ((100vw - 320px)/ 1728))}}@media screen and (min-width:2048px){.card[_ngcontent-%COMP%]{font-size:21px}}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]{padding-top:40px!important}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%]{left:-.6rem;position:absolute;top:-.3rem}.no-center[_ngcontent-%COMP%]{position:unset;top:unset;left:unset;transform:unset}.content-highlight[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function ua(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](2,null,["",""]))],(function(t,e){t(e,1,0,e.component.link)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,2,0,n.cardTitle)}))}function la(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" "," "]))],null,(function(t,e){t(e,0,0,e.component.cardTitle)}))}function da(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"div",[["class","card"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),s["ɵeld"](3,0,null,null,8,"div",[["class","card-body d-flex align-items-center justify-content-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"h4",[["class","card-title m-4"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ua)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noLinkTitle",2]],null,0,null,la)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-text text-center"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"card",n.cardClass),t(e,6,0,n.link,s["ɵnov"](e,7)),t(e,10,0,"card-text text-center",n.contentClass)}),null)}class ca{}var fa=s["ɵcrt"]({encapsulation:0,styles:[[".info-group-title[_ngcontent-%COMP%]{margin:0 0 .5vw .5vw;font-size:21px}"]],data:{}});function ha(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","info-group-title"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),(t()(),s["ɵeld"](3,0,null,null,1,"div",[["class","row"]],null,null,null,null,null)),s["ɵncd"](null,0)],null,(function(t,e){t(e,2,0,e.component.groupTitle)}))}var ga=n("hrfs"),pa=n("MO+k"),ba=n("NEZu"),ma=n("Fgil"),ya=n("o4+5");class va{constructor(t,e){this.dimlessBinary=t,this.dimless=e,this.config={},this.isBytesData=!1,this.showLabelAsTooltip=!1,this.prepareFn=new s.EventEmitter,this.chartConfig={chartType:"doughnut",dataset:[{label:null,borderWidth:0}],colors:[{backgroundColor:["--color-green","--color-yellow","--color-orange","--color-red","--color-blue"]}],options:{cutoutPercentage:90,events:["click","mouseout","touchstart"],legend:{display:!0,position:"right",labels:{boxWidth:10,usePointStyle:!1}},plugins:{center_text:!0},tooltips:{enabled:!0,displayColors:!1,backgroundColor:"rgba(0,0,0,0.8)",cornerRadius:0,bodyFontSize:14,bodyFontStyle:"600",position:"nearest",xPadding:12,yPadding:12,callbacks:{label:(t,e)=>{let n=e.labels[t.index];return n.includes("%")||(n=`${n} (${e.datasets[t.datasetIndex].data[t.index]}%)`),n}}},title:{display:!1}}},this.doughnutChartPlugins=[{id:"center_text",beforeDraw(t){const e="Helvetica Neue, Helvetica, Arial, sans-serif";pa.defaults.global.defaultFontFamily=e;const n=t.ctx;if(!t.options.plugins.center_text||!t.data.datasets[0].label)return;n.save();const a=t.data.datasets[0].label.split("\n"),r=(t.chartArea.left+t.chartArea.right)/2,i=(t.chartArea.top+t.chartArea.bottom)/2;n.textAlign="center",n.textBaseline="middle",n.font="24px "+e,n.fillStyle="#151515",n.fillText(a[0],r,i-10),a.length>1&&(n.font="14px "+e,n.fillStyle="#72767B",n.fillText(a[1],r,i+10)),n.restore()}}]}ngOnInit(){new ba.a(this.chartCanvasRef,this.chartTooltipRef,(t,e)=>e+t.caretX+"px",(t,e)=>e+t.caretY-t.height-10+"px").getBody=t=>this.getChartTooltipBody(t),tt.merge(this.chartConfig,this.config),this.setColorsFromCssVars(),this.prepareFn.emit([this.chartConfig,this.data])}ngOnChanges(){this.prepareFn.emit([this.chartConfig,this.data]),this.setChartSliceBorderWidth()}setColorsFromCssVars(){this.chartConfig.colors.forEach((t,e)=>{t.backgroundColor.forEach((t,n)=>{t.startsWith("--")&&(this.chartConfig.colors[e].backgroundColor[n]=this.getCssVar(t))})})}getCssVar(t){return getComputedStyle(document.querySelector(".chart-container")).getPropertyValue(t)}getChartTooltipBody(t){const e=t[0].split(": ");return this.showLabelAsTooltip?e[0]:(e[1]=this.isBytesData?this.dimlessBinary.transform(e[1]):this.dimless.transform(e[1]),e.join(": "))}setChartSliceBorderWidth(){let t=0;tt.forEach(this.chartConfig.dataset[0].data,(function(e){e>0&&(t+=1)})),this.chartConfig.dataset[0].borderWidth=t>1?1:0}}var xa=s["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto;cursor:pointer;overflow:visible;--color-red:#c9190b;--color-blue:#06c;--color-orange:#ef9234;--color-yellow:#f6d173;--color-magenta:#009596;--color-green:#7cc674;--color-gray:#ededed;--color-light-blue:#519de9;--color-light-yellow:#f9e0a2;--color-cyan:#73c5c5;--color-purple:#3c3d99;position:unset;width:100%;height:100%}.chart-canvas[_ngcontent-%COMP%]{position:unset;width:100%;height:100%;margin-left:auto;margin-right:auto;max-width:100%;max-height:100%}']],data:{}});function _a(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{chartCanvasRef:0}),s["ɵqud"](402653184,2,{chartTooltipRef:0}),(t()(),s["ɵeld"](2,0,null,null,4,"div",[["class","chart-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,[[1,0],["chartCanvas",1]],null,1,"canvas",[["baseChart",""],["class","chart-canvas"]],null,null,null,null,null)),s["ɵdid"](4,999424,null,0,ga.a,[s.ElementRef,ga.c],{datasets:[0,"datasets"],labels:[1,"labels"],options:[2,"options"],chartType:[3,"chartType"],colors:[4,"colors"],plugins:[5,"plugins"]},null),(t()(),s["ɵeld"](5,0,[[2,0],["chartTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.chartConfig.dataset,n.chartConfig.labels,n.chartConfig.options,n.chartConfig.chartType,n.chartConfig.colors,n.doughnutChartPlugins)}),null)}class Ta{constructor(t){this.i18n=t}transform(t){return t?`${t.monmap.mons.length.toString()} (${this.i18n("quorum")} ${t.quorum.join(", ")})`:""}}class Oa{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e=0,n=0;tt.each(t.osds,t=>{t.in&&e++,t.up&&n++});const a=[{content:`${t.osds.length} ${this.i18n("total")}`,class:""}];a.push({content:"",class:"card-text-line-break"}),a.push({content:`${n} ${this.i18n("up")}, ${e} ${this.i18n("in")}`,class:""});const r=t.osds.length-n,i=n-e;if(r>0||i>0){a.push({content:"",class:"card-text-line-break"});const t=r>0?`${r} ${this.i18n("down")}`:"",e=r>0&&i>0?", ":"",n=i>0?`${i} ${this.i18n("out")}`:"";a.push({content:`${t}${e}${n}`,class:"card-text-error"})}return a}}class wa{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e=this.i18n("n/a");const n=tt.isUndefined(t.active_name)?"":`${this.i18n("active daemon")}: ${t.active_name}`;n.length>0&&(e="1");const a=t.standbys.map(t=>t.name).join(", "),r=a?`${this.i18n("standby daemons")}: ${a}`:"",i=t.standbys.length,s=[{content:`${e} ${this.i18n("active")}`,class:"popover-info",titleText:n}];return s.push({content:"",class:"card-text-line-break",titleText:""}),s.push({content:`${i} ${this.i18n("standby")}`,class:"popover-info",titleText:r}),s}}class Sa{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e="",n="",a=0,r=0,i=0;tt.each(t.standbys,()=>{a+=1}),t.standbys&&!t.filesystems?(e=`${a} ${this.i18n("up")}`,n=this.i18n("no filesystems")):0===t.filesystems.length?e=this.i18n("no filesystems"):(tt.each(t.filesystems,t=>{tt.each(t.mdsmap.info,t=>{"up:standby-replay"===t.state?i+=1:r+=1})}),e=`${r} ${this.i18n("active")}`,n=`${a+i} ${this.i18n("standby")}`);const s=t.standbys.map(t=>t.name).join(", "),o=s?`${this.i18n("standby daemons")}: ${s}`:"",u=t.filesystems?t.filesystems.length:0,l=Object.values(u>0?t.filesystems[0].mdsmap.info:{}).map(t=>t.name).join(", ");let d=l?`${this.i18n("active daemon")}: ${l}`:"";!r&&u>0&&(d=`${i} ${this.i18n("standbyReplay")}`);const c=[{content:e,class:"popover-info",titleText:d}];return n&&(c.push({content:"",class:"card-text-line-break",titleText:""}),c.push({content:n,class:"popover-info",titleText:o})),c}}var Ia=n("aXbf");let Na=(()=>{class t{constructor(t){this.http=t}getFullHealth(){return this.http.get("api/health/full")}getMinimalHealth(){return this.http.get("api/health/minimal")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();var Ca=n("2Vo4"),Ra=n("D0XW"),Aa=n("Y7HM");function ka(t){const{subscriber:e,counter:n,period:a}=t;e.next(n),this.schedule({subscriber:e,counter:n+1,period:a},a)}let Ea=(()=>{class t{constructor(t){this.ngZone=t,this.intervalDataSource=new Ca.a(null),this.intervalData$=this.intervalDataSource.asObservable();const e=parseInt(sessionStorage.getItem("dashboard_interval"),10)||5e3;this.setRefreshInterval(e)}setRefreshInterval(t){this.intervalTime=t,sessionStorage.setItem("dashboard_interval",t.toString()),this.intervalSubscription&&this.intervalSubscription.unsubscribe(),this.ngZone.runOutsideAngular(()=>{this.intervalSubscription=function(t=0,e=Ra.a){return(!Object(Aa.a)(t)||t<0)&&(t=0),e&&"function"==typeof e.schedule||(e=Ra.a),new Nn.a(n=>(n.add(e.schedule(ka,t,{subscriber:n,counter:0,period:t})),n))}(this.intervalTime).subscribe(()=>this.ngZone.run(()=>{this.intervalDataSource.next(this.intervalTime)}))})}getRefreshInterval(){return this.intervalTime}ngOnDestroy(){this.intervalSubscription&&this.intervalSubscription.unsubscribe()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](s.NgZone))},token:t,providedIn:"root"}),t})();var La=n("d+Og");class Da{constructor(t,e,n,a,r,i,s,o){this.healthService=t,this.i18n=e,this.authStorageService=n,this.pgCategoryService=a,this.featureToggles=r,this.refreshIntervalService=i,this.dimlessBinary=s,this.dimless=o,this.interval=new pt.a,this.icons=bt.a,this.clientStatsConfig={colors:[{backgroundColor:["--color-cyan","--color-purple"]}]},this.rawCapacityChartConfig={colors:[{backgroundColor:["--color-blue","--color-gray"]}]},this.pgStatusChartConfig={options:{events:[""]}},this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){this.getHealth(),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth()})}ngOnDestroy(){this.interval.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(t=>{this.healthData=t})}prepareReadWriteRatio(t){const e=[],n=[],a=this.healthData.client_perf.write_op_per_sec+this.healthData.client_perf.read_op_per_sec;e.push(`${this.i18n("Reads")}: ${this.dimless.transform(this.healthData.client_perf.read_op_per_sec)} ${this.i18n("/s")}`),n.push(this.healthData.client_perf.read_op_per_sec),e.push(`${this.i18n("Writes")}: ${this.dimless.transform(this.healthData.client_perf.write_op_per_sec)} ${this.i18n("/s")}`),n.push(this.calcPercentage(this.healthData.client_perf.write_op_per_sec,a)),t.labels=e,t.dataset[0].data=n,t.dataset[0].label=`${this.dimless.transform(a)}\n${this.i18n("IOPS")}`}prepareClientThroughput(t){const e=[],n=[],a=this.healthData.client_perf.read_bytes_sec+this.healthData.client_perf.write_bytes_sec;e.push(`${this.i18n("Reads")}: ${this.dimlessBinary.transform(this.healthData.client_perf.read_bytes_sec)}${this.i18n("/s")}`),n.push(this.calcPercentage(this.healthData.client_perf.read_bytes_sec,a)),e.push(`${this.i18n("Writes")}: ${this.dimlessBinary.transform(this.healthData.client_perf.write_bytes_sec)}${this.i18n("/s")}`),n.push(this.calcPercentage(this.healthData.client_perf.write_bytes_sec,a)),t.labels=e,t.dataset[0].data=n,t.dataset[0].label=`${this.dimlessBinary.transform(a).replace(" ","\n")}${this.i18n("/s")}`}prepareRawUsage(t,e){const n=this.calcPercentage(e.df.stats.total_bytes-e.df.stats.total_used_raw_bytes,e.df.stats.total_bytes),a=this.calcPercentage(e.df.stats.total_used_raw_bytes,e.df.stats.total_bytes);t.dataset[0].data=[a,n],t.labels=[`${this.i18n("Used")}: ${this.dimlessBinary.transform(e.df.stats.total_used_raw_bytes)}`,`${this.i18n("Avail.")}: ${this.dimlessBinary.transform(e.df.stats.total_bytes-e.df.stats.total_used_raw_bytes)}`],t.dataset[0].label=`${a}%\nof ${this.dimlessBinary.transform(e.df.stats.total_bytes)}`}preparePgStatus(t,e){const n={};let a=0;tt.forEach(e.pg_info.statuses,(t,e)=>{const r=this.pgCategoryService.getTypeByStates(e);tt.isUndefined(n[r])&&(n[r]=0),n[r]+=t,a+=t});for(const r of this.pgCategoryService.getAllTypes())tt.isUndefined(n[r])&&(n[r]=0);t.dataset[0].data=this.pgCategoryService.getAllTypes().map(t=>this.calcPercentage(n[t],a)),t.labels=[`${this.i18n("Clean")}: ${this.dimless.transform(n.clean)}`,`${this.i18n("Working")}: ${this.dimless.transform(n.working)}`,`${this.i18n("Warning")}: ${this.dimless.transform(n.warning)}`,`${this.i18n("Unknown")}: ${this.dimless.transform(n.unknown)}`],t.dataset[0].label=`${a}\n${this.i18n("PGs")}`}prepareObjects(t,e){const n=e.pg_info.object_stats.num_object_copies,a=this.calcPercentage(n-e.pg_info.object_stats.num_objects_misplaced-e.pg_info.object_stats.num_objects_degraded-e.pg_info.object_stats.num_objects_unfound,n),r=this.calcPercentage(e.pg_info.object_stats.num_objects_misplaced,n),i=this.calcPercentage(e.pg_info.object_stats.num_objects_degraded,n),s=this.calcPercentage(e.pg_info.object_stats.num_objects_unfound,n);t.labels=[`${this.i18n("Healthy")}: ${a}%`,`${this.i18n("Misplaced")}: ${r}%`,`${this.i18n("Degraded")}: ${i}%`,`${this.i18n("Unfound")}: ${s}%`],t.dataset[0].data=[a,r,i,s],t.dataset[0].label=`${this.dimless.transform(e.pg_info.object_stats.num_objects)}\n${this.i18n("objects")}`}isClientReadWriteChartShowable(){return(this.healthData.client_perf.read_op_per_sec||0)+(this.healthData.client_perf.write_op_per_sec||0)>0}calcPercentage(t,e){return tt.isNumber(t)&&tt.isNumber(e)&&0!==e?Math.round(t/e*100):0}}var Pa=s["ɵcrt"]({encapsulation:0,styles:[['cd-info-card[_ngcontent-%COMP%]{padding:0 .5vw}  .pg-status-popover-wrapper{position:relative}  .pg-status-popover-wrapper .popover{position:absolute;width:116%;max-height:20vh;min-width:unset!important;max-width:unset!important}  .pg-status-popover-wrapper .popover .popover-body{max-width:100%;max-height:19vh;font-size:12px}.logs-link[_ngcontent-%COMP%]{text-align:center}.card-text-error[_ngcontent-%COMP%]{display:inline;color:red}.card-text-line-break[_ngcontent-%COMP%]:after{content:"\\a";white-space:pre}.popover-info[_ngcontent-%COMP%]:hover{cursor:pointer}']],data:{}});function Ma(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function qa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](4,1),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵted"](6,null,[": "," "]))],(function(t,e){var n=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent.parent.parent.parent,0),e.context.$implicit.severity));t(e,3,0,n)}),(function(t,e){t(e,5,0,e.context.$implicit.type),t(e,6,0,e.context.$implicit.summary.message)}))}function ja(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ma)),s["ɵdid"](1,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](2,0,null,null,2,"ul",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,qa)),s["ɵdid"](4,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e.parent.parent.parent.parent,7)),t(e,4,0,n.healthData.health.checks)}),null)}function Fa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"i",[["class","fa fa-exclamation-triangle"]],null,null,null,null,null))],null,null)}function Ga(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(t()(),s["ɵand"](0,[["healthChecks",2]],null,0,null,ja)),(t()(),s["ɵeld"](2,16777216,null,null,7,"div",[["class","info-card-content-clickable"],["container","body"],["containerClass","info-card-popover-cluster-status"],["placement","bottom"],["triggers",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).toggle()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](5,1),s["ɵdid"](6,212992,[["healthChecksTarget",4]],0,ra.c,[ra.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,ia.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"],container:[3,"container"],containerClass:[4,"containerClass"]},null),(t()(),s["ɵted"](7,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Fa)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent.parent,0),n.healthData.health.status));t(e,4,0,a),t(e,6,0,s["ɵnov"](e,1),"bottom","","body","info-card-popover-cluster-status"),t(e,9,0,"HEALTH_OK"!=(null==n.healthData.health?null:n.healthData.health.status))}),(function(t,e){t(e,7,0,e.component.healthData.health.status)}))}function Va(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](4,1),(t()(),s["ɵted"](5,null,[" "," "]))],(function(t,e){var n=e.component,a=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent.parent,0),n.healthData.health.status));t(e,3,0,a)}),(function(t,e){t(e,5,0,e.component.healthData.health.status)}))}function za(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-info-card",[["cardTitle","Cluster Status"],["class","cd-status-card"],["contentClass","content-highlight"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ga)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Va)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Cluster Status","content-highlight"),t(e,3,0,(null==n.healthData.health||null==n.healthData.health.checks?null:n.healthData.health.checks.length)>0),t(e,5,0,!(null!=n.healthData.health&&null!=n.healthData.health.checks&&n.healthData.health.checks.length))}),null)}function Ba(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Hosts"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/hosts"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "]))],(function(t,e){t(e,1,0,"Hosts","/hosts","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.hosts)}))}function Ya(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Monitors"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/monitor"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"Monitors","/monitor","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,1),n.healthData.mon_status));t(e,2,0,a)}))}function Ha(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,3,0,e.context.$implicit.content)}))}function Ua(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","OSDs"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/osd"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ha)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,"OSDs","/osd","content-highlight"),t(e,3,0,e.context.ngIf)}),null)}function Wa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,0,0,null!=e.context.$implicit.titleText?e.context.$implicit.titleText:""),t(e,3,0,e.context.$implicit.content)}))}function Ka(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"cd-info-card",[["cardTitle","Managers"],["class","cd-status-card"],["contentClass","content-highlight"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Wa)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵppd"](4,1)],(function(t,e){var n=e.component;t(e,1,0,"Managers","content-highlight");var a=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent,3),n.healthData.mgr_map));t(e,3,0,a)}),null)}function $a(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Object Gateways"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/rgw/daemon"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "]))],(function(t,e){t(e,1,0,"Object Gateways","/rgw/daemon","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.rgw)}))}function Ja(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,0,0,null!=e.context.$implicit.titleText?e.context.$implicit.titleText:""),t(e,3,0,e.context.$implicit.content)}))}function Za(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Metadata Servers"],["class","cd-status-card"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ja)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,"Metadata Servers",(e.context.ngIf.length>1?"text-area-size-2":"")+" content-highlight"),t(e,3,0,e.context.ngIf)}),null)}function Qa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"cd-info-card",[["cardTitle","iSCSI Gateways"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/block/iscsi"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "])),(t()(),s["ɵeld"](3,0,null,0,0,"span",[["class","card-text-line-break"]],null,null,null,null,null)),(t()(),s["ɵted"](4,0,[" "," up, "])),(t()(),s["ɵeld"](5,0,null,0,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](8,{"card-text-error":0}),(t()(),s["ɵted"](9,null,[""," down"]))],(function(t,e){var n=e.component;t(e,1,0,"iSCSI Gateways","/block/iscsi","content-highlight");var a=t(e,8,0,n.healthData.iscsi_daemons.down>0);t(e,7,0,a)}),(function(t,e){var n=e.component;t(e,2,0,n.healthData.iscsi_daemons.up+n.healthData.iscsi_daemons.down),t(e,4,0,n.healthData.iscsi_daemons.up),t(e,9,0,n.healthData.iscsi_daemons.down)}))}function Xa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,19,"cd-info-group",[["groupTitle","Status"]],null,null,null,ha,fa)),s["ɵdid"](1,49152,null,0,ca,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,za)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ba)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ya)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Ua)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](10,1),(t()(),s["ɵand"](16777216,null,0,1,null,Ka)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,$a)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Za)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](17,1),(t()(),s["ɵand"](16777216,null,0,1,null,Qa)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Status"),t(e,3,0,null==n.healthData.health?null:n.healthData.health.status),t(e,5,0,null!=n.healthData.hosts),t(e,7,0,n.healthData.mon_status);var a=s["ɵunv"](e,9,0,t(e,10,0,s["ɵnov"](e.parent.parent,2),n.healthData.osd_map));t(e,9,0,a),t(e,12,0,n.healthData.mgr_map),t(e,14,0,e.parent.context.ngIf.rgw&&null!=n.healthData.rgw);var r=s["ɵunv"](e,16,0,t(e,17,0,s["ɵnov"](e.parent.parent,4),e.parent.context.ngIf.cephfs&&n.healthData.fs_map));t(e,16,0,r),t(e,19,0,e.parent.context.ngIf.iscsi&&null!=n.healthData.iscsi_daemons)}),null)}function tr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Raw Capacity"],["class","cd-capacity-card cd-chart-card"],["contentClass","content-chart"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareRawUsage(n[0],n[1])&&a),a}),_a,xa)),s["ɵdid"](3,638976,null,0,va,[ma.a,ya.a],{data:[0,"data"],config:[1,"config"],isBytesData:[2,"isBytesData"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Raw Capacity","content-chart"),t(e,3,0,n.healthData,n.rawCapacityChartConfig,!0)}),null)}function er(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Objects"],["class","cd-capacity-card cd-chart-card"],["contentClass","content-chart"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareObjects(n[0],n[1])&&a),a}),_a,xa)),s["ɵdid"](3,638976,null,0,va,[ma.a,ya.a],{data:[0,"data"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Objects","content-chart"),t(e,3,0,n.healthData)}),null)}function nr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function ar(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": "," "]))],null,(function(t,e){t(e,1,0,e.context.$implicit.key,e.context.$implicit.value)}))}function rr(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,nr)),s["ɵdid"](1,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](2,0,null,null,3,"ul",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,ar)),s["ɵdid"](4,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e.parent.parent.parent,7)),t(e,4,0,s["ɵunv"](e,4,0,s["ɵnov"](e,5).transform(n.healthData.pg_info.statuses)))}),null)}function ir(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"cd-info-card",[["cardTitle","PG Status"],["class","cd-capacity-card cd-chart-card"],["contentClass","content-chart"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).toggle()&&a),a}),da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](0,[["pgStatus",2]],0,0,null,rr)),(t()(),s["ɵeld"](3,0,null,0,4,"div",[["class","pg-status-popover-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,16777216,null,null,3,"div",[["placement","bottom"],["triggers",""]],null,null,null,null,null)),s["ɵdid"](5,212992,[["pgStatusTarget",4]],0,ra.c,[ra.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,ia.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"]},null),(t()(),s["ɵeld"](6,0,null,null,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.preparePgStatus(n[0],n[1])&&a),a}),_a,xa)),s["ɵdid"](7,638976,null,0,va,[ma.a,ya.a],{data:[0,"data"],config:[1,"config"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"PG Status","content-chart"),t(e,5,0,s["ɵnov"](e,2),"bottom",""),t(e,7,0,n.healthData,n.pgStatusChartConfig)}),null)}function sr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Pools"],["class","cd-capacity-card"],["contentClass","content-highlight"],["link","/pool"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "]))],(function(t,e){t(e,1,0,"Pools","/pool","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.pools.length)}))}function or(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","PGs per OSD"],["class","cd-capacity-card"],["contentClass","content-highlight"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"PGs per OSD","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,5),n.healthData.pg_info.pgs_per_osd));t(e,2,0,a)}))}function ur(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"cd-info-group",[["groupTitle","Capacity"]],null,null,null,ha,fa)),s["ɵdid"](1,49152,null,0,ca,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,tr)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,er)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ir)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,sr)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,or)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Capacity"),t(e,3,0,n.healthData.df),t(e,5,0,null!=(null==n.healthData.pg_info||null==n.healthData.pg_info.object_stats?null:n.healthData.pg_info.object_stats.num_objects)),t(e,7,0,n.healthData.pg_info),t(e,9,0,n.healthData.pools),t(e,11,0,n.healthData.pg_info)}),null)}function lr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Client Read/Write"],["class","cd-performance-card cd-chart-card"],["contentClass","content-chart"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareReadWriteRatio(n[0],n[1])&&a),a}),_a,xa)),s["ɵdid"](3,638976,null,0,va,[ma.a,ya.a],{data:[0,"data"],config:[1,"config"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Client Read/Write","content-chart"),t(e,3,0,n.healthData,n.clientStatsConfig)}),null)}function dr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Client Throughput"],["class","cd-performance-card cd-chart-card"],["contentClass","content-chart"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareClientThroughput(n[0],n[1])&&a),a}),_a,xa)),s["ɵdid"](3,638976,null,0,va,[ma.a,ya.a],{data:[0,"data"],config:[1,"config"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Client Throughput","content-chart"),t(e,3,0,n.healthData,n.clientStatsConfig)}),null)}function cr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Recovery Throughput"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"Recovery Throughput","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,6),n.healthData.client_perf.recovering_bytes_per_sec))+"/s";t(e,2,0,a)}))}function fr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Scrubbing"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,da,oa)),s["ɵdid"](1,49152,null,0,sa,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "]))],(function(t,e){t(e,1,0,"Scrubbing","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.scrub_status)}))}function hr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"cd-info-group",[["groupTitle","Performance"]],null,null,null,ha,fa)),s["ɵdid"](1,49152,null,0,ca,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,lr)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,dr)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,cr)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,fr)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance"),t(e,3,0,n.healthData.client_perf),t(e,5,0,n.healthData.client_perf),t(e,7,0,n.healthData.client_perf),t(e,9,0,n.healthData.scrub_status)}),null)}function gr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"p",[["class","logs-link"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵted"](-1,null,[" See "])),(t()(),s["ɵeld"](7,0,null,null,2,"a",[["routerLink","/logs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,8).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](8,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Logs"])),(t()(),s["ɵted"](-1,null,[" for more details."]))],(function(t,e){var n=t(e,5,0,e.component.icons.infoCircle);t(e,4,0,n),t(e,8,0,"/logs")}),(function(t,e){t(e,7,0,s["ɵnov"](e,8).target,s["ɵnov"](e,8).href)}))}function pr(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,gr)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.permissions.log.read)}),null)}function br(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"div",[["class","container-fluid"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Xa)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ur)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hr)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["logsLink",2]],null,0,null,pr))],(function(t,e){var n=e.component;t(e,2,0,(null==n.healthData.health?null:n.healthData.health.status)||n.healthData.mon_status||n.healthData.osd_map||n.healthData.mgr_map||null!=n.healthData.hosts||null!=n.healthData.rgw||n.healthData.fs_map||null!=n.healthData.iscsi_daemons),t(e,4,0,n.healthData.pools||n.healthData.df||n.healthData.pg_info),t(e,6,0,n.healthData.client_perf||n.healthData.scrub_status)}),null)}function mr(t){return s["ɵvid"](0,[s["ɵpid"](0,Zt,[]),s["ɵpid"](0,Ta,[he.a]),s["ɵpid"](0,Oa,[he.a]),s["ɵpid"](0,wa,[he.a]),s["ɵpid"](0,Sa,[he.a]),s["ɵpid"](0,ya.a,[Ia.a]),s["ɵpid"](0,ma.a,[Ia.a]),(t()(),s["ɵand"](16777216,null,null,2,null,br)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpid"](131072,i.AsyncPipe,[s.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,8,0,s["ɵunv"](e,8,0,s["ɵnov"](e,9).transform(n.healthData&&n.enabledFeature$)))}),null)}class yr{constructor(t){this.refreshIntervalService=t,this.intervalList={"5 s":5e3,"10 s":1e4,"15 s":15e3,"30 s":3e4,"1 min":6e4,"3 min":18e4,"5 min":3e5},this.intervalKeys=Object.keys(this.intervalList)}ngOnInit(){this.selectedInterval=this.refreshIntervalService.getRefreshInterval()||5e3}changeRefreshInterval(t){this.refreshIntervalService.setRefreshInterval(t)}}var vr=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function xr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){var n=e.component;t(e,1,0,n.intervalList[e.context.$implicit]),t(e,2,0,n.intervalList[e.context.$implicit])}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function _r(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,13,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,12,"div",[["class","float-right d-inline-flex"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"label",[["class","col-form-label my-0 mx-2"],["for","refreshInterval"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Refresh"])),(t()(),s["ɵeld"](5,0,null,null,9,"select",[["class","form-control custom-select"],["id","refreshInterval"],["name","refreshInterval"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,6).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,6).onTouched()&&a),"change"===e&&(a=!1!==r.changeRefreshInterval(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.selectedInterval=n)&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](8,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](10,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](11,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](12,16384,null,0,X.h,[[8,null],X.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,xr)),s["ɵdid"](14,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,8,0,"refreshInterval",n.selectedInterval),t(e,14,0,n.intervalKeys)}),(function(t,e){t(e,5,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending,s["ɵnov"](e,12).validClass,s["ɵnov"](e,12).invalidClass)}))}class Tr{constructor(){this.hasGrafana=!1}ngOnInit(){}}var Or=s["ɵcrt"]({encapsulation:0,styles:[["div[_ngcontent-%COMP%]{padding-top:20px}"]],data:{}});function wr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-health",[],null,null,null,mr,Pa)),s["ɵdid"](5,245760,null,0,Da,[Na,he.a,Q.a,La.a,Ke.a,Ea,ma.a,ya.a],null,null),(t()(),s["ɵeld"](6,0,null,0,1,"tab",[["heading","Statistics"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null)],(function(t,e){t(e,3,0,"Health"),t(e,5,0),t(e,7,0,"Statistics")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby)}))}function Sr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-health",[],null,null,null,mr,Pa)),s["ɵdid"](1,245760,null,0,Da,[Na,he.a,Q.a,La.a,Ke.a,Ea,ma.a,ya.a],null,null)],(function(t,e){t(e,1,0)}),null)}function Ir(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"cd-refresh-selector",[],null,null,null,_r,vr)),s["ɵdid"](2,114688,null,0,yr,[Ea],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,wr)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sr)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0,n.hasGrafana),t(e,6,0,!n.hasGrafana)}),null)}function Nr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-dashboard",[],null,null,null,Ir,Or)),s["ɵdid"](1,114688,null,0,Tr,[],null,null)],(function(t,e){t(e,1,0)}),null)}var Cr=s["ɵccf"]("cd-dashboard",Tr,Nr,{},{},[]),Rr=n("a278"),Ar=n("insk"),kr=n("cUpR"),Er=n("25BL"),Lr=n("uIqm"),Dr=n("NUGo"),Pr=n("S7zO"),Mr=n("DqMs"),qr=n("/NlG"),jr=n("i4WA"),Fr=n("6qls");class Gr{}var Vr=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function zr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Orchestrator is not available. Please consult the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","orch"]],null,null,null,jr.b,jr.a)),s["ɵdid"](4,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,[" on how to configure and enable the functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"orch")}),null)}let Br=(()=>{class t{constructor(t){this.http=t,this.url="api/orchestrator"}status(){return this.http.get(this.url+"/status")}identifyDevice(t,e,n){return this.http.post(this.url+"/identify_device",{hostname:t,device:e,duration:n})}inventoryList(t){const e=t?{params:(new nt.h).set("hostname",t)}:{};return this.http.get(this.url+"/inventory",e)}inventoryDeviceList(t){return this.inventoryList(t).pipe(Object(An.a)(t=>{const e=tt.flatMap(t,t=>t.devices.map(e=>(e.hostname=t.name,e.uid=e.device_id?e.device_id:`${e.hostname}-${e.path}`,e)));return Object(In.a)(e)}))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();var Yr=n("Rf2I"),Hr=n("x38r"),Ur=n("vCyI");class Wr{constructor(t,e,n,a,r,i){this.authStorageService=t,this.dimlessBinary=e,this.i18n=n,this.modalService=a,this.notificationService=r,this.orchService=i,this.devices=[],this.hiddenColumns=[],this.filterColumns=["hostname","human_readable_type","available","sys_api.vendor","sys_api.model","sys_api.size"],this.selectionType=void 0,this.filterChange=new s.EventEmitter,this.fetchInventory=new s.EventEmitter,this.icons=bt.a,this.columns=[],this.selection=new Ur.a}ngOnInit(){this.permission=this.authStorageService.getPermissions().osd,this.tableActions=[{permission:"update",icon:bt.a.show,click:()=>this.identifyDevice(),name:this.i18n("Identify"),disable:()=>!this.selection.hasSingleSelection,canBePrimary:t=>!t.hasSingleSelection,visible:()=>tt.isString(this.selectionType)}];const t=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1},{name:this.i18n("Device path"),prop:"path",flexGrow:1},{name:this.i18n("Type"),prop:"human_readable_type",flexGrow:1,cellTransformation:Hr.a.badge,customTemplateConfig:{map:{hdd:{value:"HDD",class:"badge-hdd"},ssd:{value:"SSD",class:"badge-ssd"}}}},{name:this.i18n("Available"),prop:"available",flexGrow:1,cellClass:"text-center",cellTransformation:Hr.a.checkIcon},{name:this.i18n("Vendor"),prop:"sys_api.vendor",flexGrow:1},{name:this.i18n("Model"),prop:"sys_api.model",flexGrow:1},{name:this.i18n("Size"),prop:"sys_api.size",flexGrow:1,pipe:this.dimlessBinary},{name:this.i18n("OSDs"),prop:"osd_ids",flexGrow:1,cellTransformation:Hr.a.badge,customTemplateConfig:{class:"badge-dark",prefix:"osd."}}];this.columns=t.filter(t=>!this.hiddenColumns.includes(t.prop)),tt.forEach(this.filterColumns,t=>{const e=tt.find(this.columns,{prop:t});e&&(e.filterable=!0)}),this.fetchInventory.observers.length>0&&(this.fetchInventorySub=this.table.fetchData.subscribe(()=>{this.fetchInventory.emit()}))}ngOnDestroy(){this.fetchInventorySub&&this.fetchInventorySub.unsubscribe()}onColumnFiltersChanged(t){this.filterChange.emit(t)}updateSelection(t){this.selection=t}identifyDevice(){const t=this.selection.first(),e=t.hostname,n=t.path||t.device_id;this.modalService.show(Yr.a,{initialState:{titleText:this.i18n("Identify device {{device}}",{device:n}),message:this.i18n("Please enter the duration how long to blink the LED."),fields:[{type:"select",name:"duration",value:300,required:!0,typeConfig:{options:[{text:this.i18n("1 minute"),value:60},{text:this.i18n("2 minutes"),value:120},{text:this.i18n("5 minutes"),value:300},{text:this.i18n("10 minutes"),value:600},{text:this.i18n("15 minutes"),value:900}]}}],submitButtonText:this.i18n("Execute"),onSubmit:t=>{this.orchService.identifyDevice(e,n,t.duration).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n("Identifying '{{device}}' started on host '{{hostname}}'",{hostname:e,device:n}))})}}})}}var Kr=s["ɵcrt"]({encapsulation:0,styles:[[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}"]],data:{}});function $r(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),(t()(),s["ɵeld"](1,0,null,null,3,"cd-table",[["columnMode","flex"],["identifier","uid"]],null,[[null,"updateSelection"],[null,"columnFiltersChanged"]],(function(t,e,n){var a=!0,r=t.component;return"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),"columnFiltersChanged"===e&&(a=!1!==r.onColumnFiltersChanged(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](2,2867200,[[1,4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],searchField:[3,"searchField"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],forceIdentifier:[6,"forceIdentifier"],selectionType:[7,"selectionType"]},{updateSelection:"updateSelection",columnFiltersChanged:"columnFiltersChanged"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](4,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.devices,n.columns,"flex",!1,!1,"uid",!0,n.selectionType),t(e,4,0,n.permission,n.selection,n.tableActions)}),null)}class Jr{constructor(t){this.orchService=t,this.icons=bt.a,this.hasOrchestrator=!1,this.devices=[]}ngOnInit(){this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,t.available&&this.getInventory()})}ngOnChanges(){this.hasOrchestrator&&(this.devices=[],this.getInventory())}getInventory(){""!==this.hostname&&this.orchService.inventoryDeviceList(this.hostname).subscribe(t=>{this.devices=t},()=>{this.devices=[]})}refresh(){this.getInventory()}}var Zr=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Qr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,zr,Vr)),s["ɵdid"](1,49152,null,0,Gr,[],null,null)],null,null)}function Xr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Devices"])),(t()(),s["ɵeld"](3,0,null,null,4,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"cd-inventory-devices",[["selectionType","single"]],null,[[null,"fetchInventory"]],(function(t,e,n){var a=!0;return"fetchInventory"===e&&(a=!1!==t.component.refresh()&&a),a}),$r,Kr)),s["ɵdid"](6,245760,null,0,Wr,[Q.a,ma.a,he.a,Rt.b,mt.a,Br],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],selectionType:[2,"selectionType"]},{fetchInventory:"fetchInventory"}),s["ɵpad"](7,1)],(function(t,e){var n=e.component,a=n.devices,r=void 0===n.hostname?s["ɵEMPTY_ARRAY"]:t(e,7,0,"hostname");t(e,6,0,a,r,"single")}),null)}function ti(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Qr)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xr)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,!n.hasOrchestrator),t(e,3,0,n.hasOrchestrator)}),null)}function ei(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-inventory",[],null,null,null,ti,Zr)),s["ɵdid"](1,638976,null,0,Jr,[Br],null,null)],(function(t,e){t(e,1,0)}),null)}var ni=s["ɵccf"]("cd-inventory",Jr,ei,{hostname:"hostname"},{},[]);let ai=(()=>{class t{constructor(t){this.http=t,this.url="api/service"}list(t){const e=t?{params:(new nt.h).set("service_name",t)}:{};return this.http.get(this.url,e)}getDaemons(t){return this.http.get(`${this.url}/${t}/daemons`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})(),ri=(()=>{class t{constructor(){}calculateAdditionalData(t){if(!t.life_expectancy_min||!t.life_expectancy_max)return t.state="unknown",t;const e=t=>!!Number.parseFloat(t),n=(t,n)=>t&&n&&e(t)&&e(n)?ve.duration(ve(t).diff(ve(n))).asWeeks():null,a=ve.duration(ve(ve.now()).diff(ve(t.life_expectancy_stamp))).asWeeks(),r=n(t.life_expectancy_max,t.life_expectancy_stamp),i=n(t.life_expectancy_min,t.life_expectancy_stamp);return t.state=a>1?"stale":null!==r&&r<=2?"bad":null!==i&&i<=4?"warning":"good",t.life_expectancy_weeks={max:null!==r?Math.round(r):null,min:null!==i?Math.round(i):null},t}readable(t){return t.readableDaemons=t.daemons.join(" "),t}prepareDevice(t){return this.readable(this.calculateAdditionalData(t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})(),ii=(()=>{class t{constructor(t,e){this.http=t,this.deviceService=e,this.baseURL="api/host"}list(){return this.http.get(this.baseURL)}create(t){return this.http.post(this.baseURL,{hostname:t},{observe:"response"})}delete(t){return this.http.delete(`${this.baseURL}/${t}`,{observe:"response"})}getDevices(t){return this.http.get(`${this.baseURL}/${t}/devices`).pipe(Object(Ce.a)(t=>t.map(t=>this.deviceService.prepareDevice(t))))}getSmartData(t){return this.http.get(`${this.baseURL}/${t}/smart`)}getDaemons(t){return this.http.get(`${this.baseURL}/${t}/daemons`)}getLabels(){return this.http.get("ui-api/host/labels")}update(t,e){return this.http.put(`${this.baseURL}/${t}`,{labels:e})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](ri))},token:t,providedIn:ue.a}),t})();class si{constructor(t,e,n,a){this.i18n=t,this.hostService=e,this.cephServiceService=n,this.orchService=a,this.daemons=[],this.columns=[],this.hasOrchestrator=!1}ngOnInit(){this.columns=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1,filterable:!0},{name:this.i18n("Daemon type"),prop:"daemon_type",flexGrow:1,filterable:!0},{name:this.i18n("Daemon ID"),prop:"daemon_id",flexGrow:1,filterable:!0},{name:this.i18n("Container ID"),prop:"container_id",flexGrow:3,filterable:!0,cellTransformation:Hr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Container Image name"),prop:"container_image_name",flexGrow:3,filterable:!0},{name:this.i18n("Container Image ID"),prop:"container_image_id",flexGrow:3,filterable:!0,cellTransformation:Hr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Version"),prop:"version",flexGrow:1,filterable:!0},{name:this.i18n("Status"),prop:"status_desc",flexGrow:1,filterable:!0,cellTemplate:this.statusTpl},{name:this.i18n("Last Refreshed"),prop:"last_refresh",flexGrow:2}],this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available})}ngOnChanges(){tt.isUndefined(this.daemonsTable)||this.daemonsTable.reloadData()}ngAfterViewInit(){this.daemonsTableTplsSub=this.daemonsTableTpls.changes.subscribe(t=>{this.daemonsTable=t.first})}ngOnDestroy(){this.daemonsTableTplsSub&&this.daemonsTableTplsSub.unsubscribe()}getStatusClass(t){return tt.get({"-1":"badge-danger",0:"badge-warning",1:"badge-success"},t,"badge-dark")}getDaemons(t){let e;if(this.hostname)e=this.hostService.getDaemons(this.hostname);else{if(!this.serviceName)return void(this.daemons=[]);e=this.cephServiceService.getDaemons(this.serviceName)}e.subscribe(t=>{this.daemons=t},()=>{this.daemons=[],t.error()})}}var oi=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ui(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,zr,Vr)),s["ɵdid"](1,49152,null,0,Gr,[],null,null)],null,null)}function li(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.getDaemons(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](1,2867200,[[2,4],["daemonsTable",4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,1,0,n.daemons,n.columns,"flex",6e4)}),null)}function di(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[["class","badge"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,"badge",e.component.getStatusClass(e.context.row.status))}),(function(t,e){t(e,3,0,e.context.row.status_desc)}))}function ci(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{statusTpl:0}),s["ɵqud"](671088640,2,{daemonsTableTpls:1}),(t()(),s["ɵand"](16777216,null,null,1,null,ui)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,li)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["statusTpl",2]],null,0,null,di))],(function(t,e){var n=e.component;t(e,3,0,!n.hasOrchestrator),t(e,5,0,n.hasOrchestrator)}),null)}var fi=n("sLuX"),hi=n("FSuO"),gi=n("QC43"),pi=n("XFyV"),bi=n("zWsK");let mi=(()=>{class t{constructor(t,e,n){this.http=t,this.i18n=e,this.deviceService=n,this.path="api/osd",this.osdRecvSpeedModalPriorities={KNOWN_PRIORITIES:[{name:null,text:this.i18n("-- Select the priority --"),values:{osd_max_backfills:null,osd_recovery_max_active:null,osd_recovery_max_single_start:null,osd_recovery_sleep:null}},{name:"low",text:this.i18n("Low"),values:{osd_max_backfills:1,osd_recovery_max_active:1,osd_recovery_max_single_start:1,osd_recovery_sleep:.5}},{name:"default",text:this.i18n("Default"),values:{osd_max_backfills:1,osd_recovery_max_active:3,osd_recovery_max_single_start:1,osd_recovery_sleep:0}},{name:"high",text:this.i18n("High"),values:{osd_max_backfills:4,osd_recovery_max_active:4,osd_recovery_max_single_start:4,osd_recovery_sleep:0}}]}}create(t){const e={method:"drive_groups",data:t,tracking_id:tt.join(tt.map(t,"service_id"),", ")};return this.http.post(this.path,e,{observe:"response"})}getList(){return this.http.get(""+this.path)}getDetails(t){return this.http.get(`${this.path}/${t}`)}getSmartData(t){return this.http.get(`${this.path}/${t}/smart`)}scrub(t,e){return this.http.post(`${this.path}/${t}/scrub?deep=${e}`,null)}getFlags(){return this.http.get(this.path+"/flags")}updateFlags(t){return this.http.put(this.path+"/flags",{flags:t})}markOut(t){return this.http.post(`${this.path}/${t}/mark_out`,null)}markIn(t){return this.http.post(`${this.path}/${t}/mark_in`,null)}markDown(t){return this.http.post(`${this.path}/${t}/mark_down`,null)}reweight(t,e){return this.http.post(`${this.path}/${t}/reweight`,{weight:e})}update(t,e){return this.http.put(`${this.path}/${t}`,{device_class:e})}markLost(t){return this.http.post(`${this.path}/${t}/mark_lost`,null)}purge(t){return this.http.post(`${this.path}/${t}/purge`,null)}destroy(t){return this.http.post(`${this.path}/${t}/destroy`,null)}delete(t,e,n){return this.http.delete(`${this.path}/${t}`,{observe:"response",params:{preserve_id:e?"true":"false",force:n?"true":"false"}})}safeToDestroy(t){return this.http.get(`${this.path}/safe_to_destroy?ids=${t}`)}safeToDelete(t){return this.http.get(`${this.path}/safe_to_delete?svc_ids=${t}`)}getDevices(t){return this.http.get(`${this.path}/${t}/devices`).pipe(Object(Ce.a)(t=>t.map(t=>this.deviceService.prepareDevice(t))))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](he.a),s["ɵɵinject"](ri))},token:t,providedIn:ue.a}),t})();class yi{constructor(t,e,n){this.i18n=t,this.osdService=e,this.hostService=n,this.osdId=null,this.hostname=null,this.loading=!1,this.incompatible=!1,this.error=!1,this.data={},this.isEmpty=tt.isEmpty}isSmartError(t){return void 0!==tt.get(t,"error")}isNvmeSmartData(t){return"nvme"===tt.get(t,"device.protocol","").toLowerCase()}isHddSmartData(t){return"ata"===tt.get(t,"device.protocol","").toLowerCase()}fetchData(t){const e={};tt.each(t,(t,n)=>{if(this.isSmartError(t)){let a="";a=this.i18n(-22===t.smartctl_error_code?"Smartctl has received an unknown argument (error code {{code}}). You may be using an incompatible version of smartmontools. Version >= 7.0 of smartmontools is required to successfully retrieve data.":"An error with error code {{code}} occurred.",{code:t.smartctl_error_code}),e[n]={error:t.error,smartctl_error_code:t.smartctl_error_code,smartctl_output:t.smartctl_output,userMessage:a,device:t.dev,identifier:t.nvme_vendor}}else 1!==t.json_format_version[0]?this.incompatible=!0:this.isHddSmartData(t)?e[n]=this.extractHddData(t):this.isNvmeSmartData(t)&&(e[n]=this.extractNvmeData(t))}),this.data=e,this.loading=!1}extractNvmeData(t){return{info:tt.omitBy(t,(t,e)=>["nvme_smart_health_information_log"].includes(e)),smart:{nvmeData:t.nvme_smart_health_information_log},device:t.device.name,identifier:t.serial_number}}extractHddData(t){const e=tt.omitBy(t,(t,e)=>["ata_smart_attributes","ata_smart_selective_self_test_log","ata_smart_data"].includes(e));return{info:e,smart:{attributes:t.ata_smart_attributes,data:t.ata_smart_data},device:e.device.name,identifier:e.serial_number}}updateData(){this.loading=!0,null!==this.osdId?this.osdService.getSmartData(this.osdId).subscribe(this.fetchData.bind(this),t=>{t.preventDefault(),this.error=t,this.loading=!1}):null!==this.hostname&&this.hostService.getSmartData(this.hostname).subscribe(this.fetchData.bind(this),t=>{t.preventDefault(),this.error=t,this.loading=!1})}ngOnInit(){this.smartDataColumns=[{prop:"id",name:this.i18n("ID")},{prop:"name",name:this.i18n("Name")},{prop:"raw.value",name:this.i18n("Raw")},{prop:"thresh",name:this.i18n("Threshold")},{prop:"value",name:this.i18n("Value")},{prop:"when_failed",name:this.i18n("When Failed")},{prop:"worst",name:this.i18n("Worst")}]}ngOnChanges(t){this.data={},t.osdId?this.osdId=t.osdId.currentValue:t.hostname&&(this.hostname=t.hostname.currentValue),this.updateData()}}var vi=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function xi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Failed to retrieve SMART data."]))],(function(t,e){t(e,1,0,"error")}),null)}function _i(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The data received has the JSON format version 2.x and is currently incompatible with the dashboard."]))],(function(t,e){t(e,1,0,"warning")}),null)}function Ti(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No SMART data available."]))],(function(t,e){t(e,1,0,"info")}),null)}function Oi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"cd-alert-panel",[["id","alert-error"],["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](2,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](3,0,["",""]))],(function(t,e){t(e,2,0,"warning")}),(function(t,e){t(e,3,0,e.parent.context.$implicit.value.userMessage)}))}function wi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["id","alert-self-test-unknown"],["size","slim"],["title","SMART overall-health self-assessment test result"],["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{title:[0,"title"],type:[1,"type"],size:[2,"size"]},null),(t()(),s["ɵted"](-1,0,["unknown"]))],(function(t,e){t(e,1,0,"SMART overall-health self-assessment test result","warning","slim")}),null)}function Si(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"cd-alert-panel",[["id","alert-self-test-passed"],["size","slim"],["title","SMART overall-health self-assessment test result"],["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](2,114688,null,0,qr.a,[he.a],{title:[0,"title"],type:[1,"type"],size:[2,"size"]},null),(t()(),s["ɵted"](-1,0,["passed"]))],(function(t,e){t(e,2,0,"SMART overall-health self-assessment test result","info","slim")}),null)}function Ii(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["id","alert-self-test-failed"],["size","slim"],["title","SMART overall-health self-assessment test result"],["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{title:[0,"title"],type:[1,"type"],size:[2,"size"]},null),(t()(),s["ɵted"](-1,0,["failed"]))],(function(t,e){t(e,1,0,"SMART overall-health self-assessment test result","warning","slim")}),null)}function Ni(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Si)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["selfTestFailed",2]],null,0,null,Ii))],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.info.smart_status.passed,s["ɵnov"](e,2))}),null)}function Ci(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,2,null,wi)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),s["ɵppd"](2,2),(t()(),s["ɵand"](0,[["hasSmartStatus",2]],null,0,null,Ni))],(function(t,e){var n=e.component,a=s["ɵunv"](e,1,0,t(e,2,0,s["ɵnov"](e.parent.parent.parent.parent.parent,0),null==e.parent.context.$implicit.value.info?null:e.parent.context.$implicit.value.info.smart_status,n.isEmpty));t(e,1,0,a,s["ɵnov"](e,3))}),null)}function Ri(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"],renderObjects:[1,"renderObjects"]},null)],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.info,!0)}),null)}function Ai(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["id","alert-device-info-unavailable"],["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No device information available for this device."]))],(function(t,e){t(e,1,0,"info")}),null)}function ki(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[["updateSelectionOnRefresh","never"]],null,null,null,Er.b,Er.a)),s["ɵdid"](1,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],updateSelectionOnRefresh:[2,"updateSelectionOnRefresh"]},null)],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.smart.attributes.table,e.component.smartDataColumns,"never")}),null)}function Ei(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["updateSelectionOnRefresh","never"]],null,null,null,fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"],renderObjects:[1,"renderObjects"]},null)],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.smart.nvmeData,!0)}),null)}function Li(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["id","alert-device-smart-data-unavailable"],["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No SMART data available for this device."]))],(function(t,e){t(e,1,0,"info")}),null)}function Di(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,[[1,4],["innerTabset",4]],0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,7,"tab",[["heading","Device Information"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,2,null,Ri)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](6,2),(t()(),s["ɵand"](16777216,null,null,2,null,Ai)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](9,2),(t()(),s["ɵeld"](10,0,null,0,7,"tab",[["heading","SMART"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](11,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ki)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ei)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Li)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Device Information");var a=!s["ɵunv"](e,5,0,t(e,6,0,s["ɵnov"](e.parent.parent.parent.parent.parent,0),e.parent.context.$implicit.value.info,n.isEmpty));t(e,5,0,a);var r=s["ɵunv"](e,8,0,t(e,9,0,s["ɵnov"](e.parent.parent.parent.parent.parent,0),e.parent.context.$implicit.value.info,n.isEmpty));t(e,8,0,r),t(e,11,0,"SMART"),t(e,13,0,null==e.parent.context.$implicit.value.smart?null:e.parent.context.$implicit.value.smart.attributes),t(e,15,0,null==e.parent.context.$implicit.value.smart?null:e.parent.context.$implicit.value.smart.nvmeData),t(e,17,0,!(null!=e.parent.context.$implicit.value.smart&&e.parent.context.$implicit.value.smart.attributes||null!=e.parent.context.$implicit.value.smart&&e.parent.context.$implicit.value.smart.nvmeData))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,10,0,s["ɵnov"](e,11).id,s["ɵnov"](e,11).active,s["ɵnov"](e,11).addClass,s["ɵnov"](e,11).role,s["ɵnov"](e,11).ariaLabelledby)}))}function Pi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Oi)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noError",2]],null,0,null,Ci)),(t()(),s["ɵand"](16777216,null,null,3,null,Di)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](7,2),s["ɵppd"](8,2)],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit.value.device+" ("+e.context.$implicit.value.identifier+")"),t(e,3,0,e.context.$implicit.value.error,s["ɵnov"](e,4));var a=!s["ɵunv"](e,6,0,t(e,7,0,s["ɵnov"](e.parent.parent.parent.parent,0),e.context.$implicit.value.info,n.isEmpty))||!s["ɵunv"](e,6,0,t(e,8,0,s["ɵnov"](e.parent.parent.parent.parent,0),e.context.$implicit.value.smart,n.isEmpty));t(e,6,0,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Mi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](2,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵand"](16777216,null,0,2,null,Pi)),s["ɵdid"](4,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,4,0,s["ɵunv"](e,4,0,s["ɵnov"](e,5).transform(n.data)))}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).clazz)}))}function qi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Ti)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](3,2),(t()(),s["ɵand"](16777216,null,null,2,null,Mi)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](6,2),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent,0),n.data,n.isEmpty));t(e,2,0,a);var r=!s["ɵunv"](e,5,0,t(e,6,0,s["ɵnov"](e.parent.parent,0),n.data,n.isEmpty));t(e,5,0,r)}),null)}function ji(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,xi)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_i)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qi)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.error),t(e,4,0,n.incompatible),t(e,6,0,!n.error&&!n.incompatible)}),null)}function Fi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,gi.b,gi.a)),s["ɵdid"](1,49152,null,0,pi.a,[],null,null),(t()(),s["ɵted"](-1,0,["SMART data is loading."]))],null,null)}function Gi(t){return s["ɵvid"](0,[s["ɵpid"](0,bi.b,[]),s["ɵqud"](671088640,1,{innerTabset:0}),(t()(),s["ɵand"](16777216,null,null,1,null,ji)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["isLoading",2]],null,0,null,Fi))],(function(t,e){t(e,3,0,!e.component.loading,s["ɵnov"](e,4))}),null)}class Vi{constructor(t,e,n,a){this.hostService=t,this.i18n=e,this.datePipe=n,this.osdService=a,this.hostname="",this.osdId=null,this.devices=null,this.columns=[],this.translationMapping={"=1":"# week",other:"# weeks"}}ngOnInit(){this.columns=[{prop:"devid",name:this.i18n("Device ID"),minWidth:200},{prop:"state",name:this.i18n("State of Health"),flexGrow:1,cellTransformation:Hr.a.badge,customTemplateConfig:{map:{good:{value:this.i18n("Good"),class:"badge-success"},warning:{value:this.i18n("Warning"),class:"badge-warning"},bad:{value:this.i18n("Bad"),class:"badge-danger"},stale:{value:this.i18n("Stale"),class:"badge-info"},unknown:{value:this.i18n("Unknown"),class:"badge-dark"}}}},{prop:"life_expectancy_weeks",name:this.i18n("Life Expectancy"),cellTemplate:this.lifeExpectancyTemplate},{prop:"life_expectancy_stamp",name:this.i18n("Prediction Creation Date"),cellTemplate:this.lifeExpectancyTimestampTemplate,pipe:this.datePipe,isHidden:!0},{prop:"location",name:this.i18n("Device Name"),cellTemplate:this.locationTemplate},{prop:"readableDaemons",name:this.i18n("Daemons")}]}ngOnChanges(){const t=t=>this.devices=t;this.hostname?this.hostService.getDevices(this.hostname).subscribe(t):null!==this.osdId&&this.osdService.getDevices(this.osdId).subscribe(t)}}var zi=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Bi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[],null,null,null,Er.b,Er.a)),s["ɵdid"](1,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.devices,n.columns)}),null)}function Yi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Neither hostname nor OSD ID given"]))],(function(t,e){t(e,1,0,"warning")}),null)}function Hi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.$implicit.dev)}))}function Ui(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Hi)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Wi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["> ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,1,0,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.min,n.translationMapping));t(e,1,0,a)}))}function Ki(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["< ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,1,0,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.max,n.translationMapping));t(e,1,0,a)}))}function $i(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[""," to ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=e.parent.context.value.min,r=s["ɵunv"](e,1,1,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.max,n.translationMapping));t(e,1,0,a,r)}))}function Ji(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Wi)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ki)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$i)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value.min&&!e.context.value.max),t(e,3,0,e.context.value.max&&!e.context.value.min),t(e,5,0,e.context.value.max&&e.context.value.min)}),null)}function Zi(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" ","\n"]))],null,(function(t,e){t(e,0,0,e.context.value)}))}function Qi(t){return s["ɵvid"](0,[s["ɵpid"](0,i.I18nPluralPipe,[i.NgLocalization]),s["ɵqud"](402653184,1,{locationTemplate:0}),s["ɵqud"](402653184,2,{lifeExpectancyTemplate:0}),s["ɵqud"](402653184,3,{lifeExpectancyTimestampTemplate:0}),(t()(),s["ɵand"](16777216,null,null,1,null,Bi)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yi)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["deviceLocation",2]],null,0,null,Ui)),(t()(),s["ɵand"](0,[[2,2],["lifeExpectancy",2]],null,0,null,Ji)),(t()(),s["ɵand"](0,[[3,2],["lifeExpectancyTimestamp",2]],null,0,null,Zi))],(function(t,e){var n=e.component;t(e,5,0,n.hostname||null!==n.osdId),t(e,7,0,""===n.hostname&&null===n.osdId)}),null)}n("jKX/");class Xi{get selectedHostname(){return void 0!==this.selection?this.selection.hostname:null}constructor(){}}var ts=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function es(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Inventory"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-inventory",[],null,null,null,ti,Zr)),s["ɵdid"](3,638976,null,0,Jr,[Br],{hostname:[0,"hostname"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Inventory"),t(e,3,0,n.selectedHostname)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function ns(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Daemons"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-service-daemon-list",[],null,null,null,ci,oi)),s["ɵdid"](3,4964352,null,0,si,[he.a,ii,ai,Br],{hostname:[0,"hostname"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Daemons"),t(e,3,0,n.selectedHostname)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function as(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","four"],["uid","rtOg0AiWz"]],null,null,null,Rr.b,Rr.a)),s["ɵdid"](3,638976,null,0,Ar.a,[kr.b,te.a,he.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"host-details?var-ceph_hosts="+n.selectedHostname,"four","rtOg0AiWz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function rs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-smart-list",[],null,null,null,Gi,vi)),s["ɵdid"](1,638976,null,0,yi,[he.a,mi,ii],{hostname:[0,"hostname"]},null)],(function(t,e){t(e,1,0,e.component.selectedHostname)}),null)}function is(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,[[1,4]],0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Devices"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-device-list",[],null,null,null,Qi,zi)),s["ɵdid"](5,638976,null,0,Vi,[ii,he.a,i.DatePipe,mi],{hostname:[0,"hostname"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,es)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ns)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,as)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,3,"tab",[["heading","Device health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](13,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rs)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Devices"),t(e,5,0,n.selection.hostname),t(e,7,0,n.permissions.hosts.read),t(e,9,0,n.permissions.hosts.read),t(e,11,0,n.permissions.grafana.read),t(e,13,0,"Device health"),t(e,15,0,n.selectedHostname,s["ɵnov"](e.parent,3))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,12,0,s["ɵnov"](e,13).id,s["ɵnov"](e,13).active,s["ɵnov"](e,13).addClass,s["ɵnov"](e,13).role,s["ɵnov"](e,13).ariaLabelledby)}))}function ss(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No hostname found."]))],(function(t,e){t(e,1,0,"error")}),null)}function os(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tabsetChild:0}),(t()(),s["ɵand"](16777216,null,null,1,null,is)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["noHostname",2]],null,0,null,ss))],(function(t,e){t(e,2,0,e.component.selection)}),null)}var us=n("EgGo"),ls=n("+fVR"),ds=n("0+/T"),cs=n("DNAf"),fs=n("kvvV"),hs=n("85J/"),gs=n("FFMq");class ps{constructor(t){this.bsModalRef=t}ngOnInit(){}onSubmit(){this.bsModalRef.hide()}}let bs=(()=>{class t{constructor(t,e){this.orchService=t,this.modalService=e}checkOrchestratorOrModal(t,e,n){this.orchService.status().subscribe(a=>{a.available?n():this.modalService.show(ps,{initialState:{actionDescription:t,itemDescription:e}})})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Br),s["ɵɵinject"](Rt.b))},token:t,providedIn:"root"}),t})();var ms=n("kn/O");const ys=new us.a("hosts");class vs extends ls.a{constructor(t,e,n,a,r,i,s,o,u,l,d,c){super(),this.authStorageService=t,this.hostService=e,this.cephShortVersionPipe=n,this.joinPipe=a,this.i18n=r,this.urlBuilder=i,this.actionLabels=s,this.modalService=o,this.taskWrapper=u,this.router=l,this.depCheckerService=d,this.notificationService=c,this.columns=[],this.hosts=[],this.isLoadingHosts=!1,this.cdParams={fromLink:"/hosts"},this.selection=new Ur.a,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:bt.a.add,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.CREATE,this.i18n("Host"),()=>{this.router.navigate([this.urlBuilder.getCreate()])})}},{name:this.actionLabels.EDIT,permission:"update",icon:bt.a.edit,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.EDIT,this.i18n("Host"),()=>this.editAction())},disable:this.getEditDisableDesc.bind(this)},{name:this.actionLabels.DELETE,permission:"delete",icon:bt.a.destroy,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.DELETE,this.i18n("Host"),()=>this.deleteAction())},disable:this.getDeleteDisableDesc.bind(this)}]}ngOnInit(){this.columns=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1},{name:this.i18n("Services"),prop:"services",flexGrow:3,cellTemplate:this.servicesTpl},{name:this.i18n("Labels"),prop:"labels",flexGrow:1,pipe:this.joinPipe},{name:this.i18n("Version"),prop:"ceph_version",flexGrow:1,pipe:this.cephShortVersionPipe}]}updateSelection(t){this.selection=t}editAction(){this.hostService.getLabels().subscribe(t=>{const e=this.selection.first(),n=t.map(t=>({enabled:!0,name:t}));this.modalService.show(Yr.a,{initialState:{titleText:this.i18n("Edit Host: {{hostname}}",e),fields:[{type:"select-badges",name:"labels",value:e.labels,label:this.i18n("Labels"),typeConfig:{customBadges:!0,options:n,messages:new cs.a({empty:this.i18n("There are no labels."),filter:this.i18n("Filter or add labels"),add:this.i18n("Add label")},this.i18n)}}],submitButtonText:this.i18n("Edit Host"),onSubmit:t=>{this.hostService.update(e.hostname,t.labels).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n('Updated Host "{{hostname}}"',e)),this.table.refreshBtn()})}}})})}getEditDisableDesc(t){return!t||!t.hasSingleSelection||!t.first().sources.orchestrator&&this.i18n("Host editing is disabled because the selected host is not managed by Orchestrator.")}deleteAction(){const t=this.selection.first().hostname;this.modalRef=this.modalService.show(ds.a,{initialState:{itemDescription:"Host",itemNames:[t],actionDescription:"delete",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new fs.a("host/delete",{hostname:t}),call:this.hostService.delete(t)})}})}getDeleteDisableDesc(t){return!t||!t.hasSelection||!t.selected.every(t=>t.sources.orchestrator)&&this.i18n("Host deletion is disabled because a selected host is not managed by Orchestrator.")}getHosts(t){if(this.isLoadingHosts)return;const e={mds:"cephfs",mon:"monitor",osd:"osd",rgw:"rgw","rbd-mirror":"rbdMirroring",mgr:"manager","tcmu-runner":"iscsi"};this.isLoadingHosts=!0,this.hostService.list().subscribe(t=>{t.map(t=>(t.services.map(t=>{t.cdLink=`/perf_counters/${t.type}/${encodeURIComponent(t.id)}`;const n=this.permissions[e[t.type]];return t.canRead=!!n&&n.read,t}),t)),this.hosts=t,this.isLoadingHosts=!1},()=>{this.isLoadingHosts=!1,t.error()})}}var xs=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _s(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"a",[["class","service-link"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,Lt.p,[Lt.m,Lt.a,i.LocationStrategy],{queryParams:[0,"queryParams"],routerLink:[1,"routerLink"]},null),s["ɵpad"](2,1),(t()(),s["ɵted"](3,null,["",".",""]))],(function(t,e){var n=e.component.cdParams,a=t(e,2,0,e.parent.context.$implicit.cdLink);t(e,1,0,n,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,3,0,e.parent.context.$implicit.type,e.parent.context.$implicit.id)}))}function Ts(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ","."," "]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.type,e.parent.context.$implicit.id)}))}function Os(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[", "]))],null,null)}function ws(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,_s)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ts)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Os)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit.canRead),t(e,4,0,!e.context.$implicit.canRead),t(e,6,0,!e.context.last)}),null)}function Ss(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ws)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Is(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","y0KGL0iZz"]],null,null,null,Rr.b,Rr.a)),s["ɵdid"](3,638976,null,0,Ar.a,[kr.b,te.a,he.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){t(e,1,0,"Overall Performance"),t(e,3,0,"host-overview?","two","y0KGL0iZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Ns(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),s["ɵqud"](402653184,2,{servicesTpl:0}),(t()(),s["ɵeld"](2,0,null,null,13,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](3,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](4,0,null,0,9,"tab",[["heading","Hosts List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](5,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](6,0,null,null,7,"cd-table",[["columnMode","flex"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getHosts(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](7,2867200,[[1,4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],selectionType:[4,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](8,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"cd-table-actions",[["class","btn-group"],["id","host-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](10,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](0,[[2,2],["servicesTpl",2]],null,0,null,Ss)),(t()(),s["ɵeld"](12,0,null,3,1,"cd-host-details",[["cdTableDetail",""]],null,null,null,os,ts)),s["ɵdid"](13,49152,null,0,Xi,[],{permissions:[0,"permissions"],selection:[1,"selection"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Is)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,"Hosts List"),t(e,7,0,n.hosts,n.columns,"flex",!0,"single"),t(e,10,0,n.permissions.hosts,n.selection,n.tableActions),t(e,13,0,n.permissions,n.expandedRow),t(e,15,0,n.permissions.grafana.read)}),(function(t,e){t(e,2,0,s["ɵnov"](e,3).clazz),t(e,4,0,s["ɵnov"](e,5).id,s["ɵnov"](e,5).active,s["ɵnov"](e,5).addClass,s["ɵnov"](e,5).role,s["ɵnov"](e,5).ariaLabelledby)}))}function Cs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-hosts",[],null,null,null,Ns,xs)),s["ɵprd"](256,null,us.a,ys,[]),s["ɵdid"](2,114688,null,0,vs,[Q.a,ii,hs.a,gs.a,he.a,us.a,It.b,Rt.b,ms.a,Lt.m,bs,mt.a],null,null)],(function(t,e){t(e,2,0)}),null)}var Rs=s["ɵccf"]("cd-hosts",vs,Cs,{},{},[]),As=n("mXUL"),ks=n("IZUe"),Es=n("gp3X"),Ls=n("sb0X"),Ds=n("KVJa"),Ps=n("Z21x"),Ms=n("8xTl"),qs=n("QFaf"),js=n("1Ni5");class Fs{constructor(t,e,n,a,r){this.router=t,this.i18n=e,this.actionLabels=n,this.hostService=a,this.taskWrapper=r,this.loading=!0,this.resource=this.i18n("host"),this.action=this.actionLabels.CREATE,this.createForm()}ngOnInit(){this.hostService.list().subscribe(t=>{this.hostnames=t.map(t=>t.hostname),this.loading=!1})}createForm(){this.hostForm=new qs.a({hostname:new $.i("",{validators:[$.B.required,js.a.custom("uniqueName",t=>this.hostnames&&-1!==this.hostnames.indexOf(t))]})})}submit(){const t=this.hostForm.get("hostname").value;this.taskWrapper.wrapTaskAroundCall({task:new fs.a("host/"+It.e.CREATE,{hostname:t}),call:this.hostService.create(t)}).subscribe(void 0,()=>{this.hostForm.setErrors({cdSubmitButton:!0})},()=>{this.router.navigate(["/hosts"])})}}var Gs=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Vs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,gi.b,gi.a)),s["ɵdid"](1,49152,null,0,pi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading..."]))],null,null)}function zs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Bs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The chosen hostname is already in use."]))],null,null)}function Ys(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,40,"form",[["name","hostForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,2).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,2).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,5).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.G,[],null,null),s["ɵdid"](2,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](4,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](5,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](6,0,null,null,34,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,[""," ",""])),s["ɵppd"](9,1),s["ɵppd"](10,1),(t()(),s["ɵeld"](11,0,null,null,20,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](13,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","hostname"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Hostname"])),(t()(),s["ɵeld"](18,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,8,"input",[["autofocus",""],["class","form-control"],["formControlName","hostname"],["id","hostname"],["name","hostname"],["placeholder","mon-123"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,22)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,22).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,22)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,22)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](20,4210688,null,0,ks.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](21,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](22,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](24,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](26,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](27,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,zs)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Bs)),s["ɵdid"](31,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](32,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](33,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](34,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Es.b,Es.a)),s["ɵdid"](35,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](36,0,[""," ",""])),s["ɵppd"](37,1),s["ɵppd"](38,1),(t()(),s["ɵeld"](39,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](40,49152,null,0,Ps.a,[i.Location,It.b],null,null)],(function(t,e){var n=e.component;t(e,2,0,n.hostForm),t(e,5,0,n.hostForm),t(e,13,0),t(e,20,0,""),t(e,24,0,"hostname"),t(e,27,0,"hostname"),t(e,29,0,n.hostForm.showError("hostname",s["ɵnov"](e,2),"required")),t(e,31,0,n.hostForm.showError("hostname",s["ɵnov"](e,2),"uniqueName")),t(e,35,0,s["ɵnov"](e,2))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,4).ngClassUntouched,s["ɵnov"](e,4).ngClassTouched,s["ɵnov"](e,4).ngClassPristine,s["ɵnov"](e,4).ngClassDirty,s["ɵnov"](e,4).ngClassValid,s["ɵnov"](e,4).ngClassInvalid,s["ɵnov"](e,4).ngClassPending);var a=s["ɵunv"](e,8,0,t(e,9,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,8,1,t(e,10,0,s["ɵnov"](e.parent,1),n.resource));t(e,8,0,a,r),t(e,12,0,s["ɵnov"](e,13).hasErrors,s["ɵnov"](e,13).hasSuccess),t(e,19,0,s["ɵnov"](e,26).ngClassUntouched,s["ɵnov"](e,26).ngClassTouched,s["ɵnov"](e,26).ngClassPristine,s["ɵnov"](e,26).ngClassDirty,s["ɵnov"](e,26).ngClassValid,s["ɵnov"](e,26).ngClassInvalid,s["ɵnov"](e,26).ngClassPending,s["ɵnov"](e,27).validClass,s["ɵnov"](e,27).invalidClass);var i=s["ɵunv"](e,36,0,t(e,37,0,s["ɵnov"](e.parent,0),n.action)),o=s["ɵunv"](e,36,1,t(e,38,0,s["ɵnov"](e.parent,1),n.resource));t(e,36,0,i,o)}))}function Hs(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,Vs)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](4,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ys)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.loading),t(e,6,0,!n.loading)}),null)}function Us(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-host-form",[],null,null,null,Hs,Gs)),s["ɵdid"](1,114688,null,0,Fs,[Lt.m,he.a,It.b,ii,ms.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ws=s["ɵccf"]("cd-host-form",Fs,Us,{},{},[]);let Ks=(()=>{class t{constructor(t){this.http=t}getMonitor(){return this.http.get("api/monitor")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();class $s{constructor(t,e){this.monitorService=t,this.i18n=e,this.inQuorum={columns:[{prop:"name",name:this.i18n("Name"),cellTransformation:Hr.a.routerLink},{prop:"rank",name:this.i18n("Rank")},{prop:"public_addr",name:this.i18n("Public Address")},{prop:"cdOpenSessions",name:this.i18n("Open Sessions"),cellTransformation:Hr.a.sparkline,comparator:(t,e)=>{const n=tt.last(t),a=tt.last(e);return n&&a&&n!==a?n>a?1:-1:0}}]},this.notInQuorum={columns:[{prop:"name",name:this.i18n("Name"),cellTransformation:Hr.a.routerLink},{prop:"rank",name:this.i18n("Rank")},{prop:"public_addr",name:this.i18n("Public Address")}]}}refresh(){this.monitorService.getMonitor().subscribe(t=>{t.in_quorum.map(t=>(t.cdOpenSessions=t.stats.num_sessions.map(t=>t[1]),t.cdLink="/perf_counters/mon/"+t.name,t.cdParams={fromLink:"/monitor"},t)),t.out_quorum.map(t=>(t.cdLink="/perf_counters/mon/"+t.name,t.cdParams={fromLink:"/monitor"},t)),this.inQuorum.data=[...t.in_quorum],this.notInQuorum.data=[...t.out_quorum],this.mon_status=t.mon_status})}}var Js=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Zs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,35,"table",[["class","table table-striped"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster ID"])),(t()(),s["ɵeld"](4,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["monmap modified"])),(t()(),s["ɵeld"](9,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](10,null,["",""])),(t()(),s["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["monmap epoch"])),(t()(),s["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](15,null,["",""])),(t()(),s["ɵeld"](16,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["quorum con"])),(t()(),s["ɵeld"](19,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](20,null,["",""])),(t()(),s["ɵeld"](21,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["quorum mon"])),(t()(),s["ɵeld"](24,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](25,null,["",""])),(t()(),s["ɵeld"](26,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](27,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["required con"])),(t()(),s["ɵeld"](29,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](30,null,["",""])),(t()(),s["ɵeld"](31,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](32,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["required mon"])),(t()(),s["ɵeld"](34,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](35,null,["",""]))],null,(function(t,e){var n=e.component;t(e,5,0,n.mon_status.monmap.fsid),t(e,10,0,n.mon_status.monmap.modified),t(e,15,0,n.mon_status.monmap.epoch),t(e,20,0,n.mon_status.features.quorum_con),t(e,25,0,n.mon_status.features.quorum_mon),t(e,30,0,n.mon_status.features.required_con),t(e,35,0,n.mon_status.features.required_mon)}))}function Qs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"div",[["class","col-lg-4"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Status"])),(t()(),s["ɵand"](16777216,null,null,1,null,Zs)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](7,0,null,null,8,"div",[["class","col-lg-8"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"legend",[["class","in-quorum cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["In Quorum"])),(t()(),s["ɵeld"](10,0,null,null,1,"cd-table",[],null,null,null,Er.b,Er.a)),s["ɵdid"](11,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null),(t()(),s["ɵeld"](12,0,null,null,1,"legend",[["class","in-quorum cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Not In Quorum"])),(t()(),s["ɵeld"](14,0,null,null,1,"cd-table",[],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.refresh()&&a),a}),Er.b,Er.a)),s["ɵdid"](15,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,6,0,n.mon_status),t(e,11,0,n.inQuorum.data,n.inQuorum.columns),t(e,15,0,n.notInQuorum.data,n.notInQuorum.columns)}),null)}function Xs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-monitor",[],null,null,null,Qs,Js)),s["ɵdid"](1,49152,null,0,$s,[Ks,he.a],null,null)],null,null)}var to=s["ɵccf"]("cd-monitor",$s,Xs,{},{},[]);class eo{constructor(){}ngOnInit(){}}var no=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ao(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,[[1,4]],0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Daemons"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-service-daemon-list",[],null,null,null,ci,oi)),s["ɵdid"](5,4964352,null,0,si,[he.a,ii,ai,Br],{serviceName:[0,"serviceName"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Daemons"),t(e,5,0,n.selection.service_name)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function ro(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tabsetChild:0}),(t()(),s["ɵand"](16777216,null,null,1,null,ao)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.component.selection)}),null)}class io extends ls.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.i18n=e,this.orchService=n,this.cephServiceService=a,this.hiddenColumns=[],this.checkingOrchestrator=!0,this.hasOrchestrator=!1,this.columns=[],this.services=[],this.isLoadingServices=!1,this.selection=new Ur.a,this.permissions=this.authStorageService.getPermissions()}ngOnInit(){const t=[{name:this.i18n("Service"),prop:"service_name",flexGrow:1},{name:this.i18n("Container image name"),prop:"status.container_image_name",flexGrow:3},{name:this.i18n("Container image ID"),prop:"status.container_image_id",flexGrow:3,cellTransformation:Hr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Running"),prop:"status.running",flexGrow:1,cellClass:"text-center",cellTransformation:Hr.a.checkIcon},{name:this.i18n("Size"),prop:"status.size",flexGrow:1},{name:this.i18n("Last Refreshed"),prop:"status.last_refresh",flexGrow:1}];this.columns=t.filter(t=>!this.hiddenColumns.includes(t.prop)),this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available})}ngOnChanges(){this.hasOrchestrator&&(this.services=[],this.table.reloadData())}getServices(t){this.isLoadingServices||(this.isLoadingServices=!0,this.cephServiceService.list().subscribe(t=>{this.services=t,this.isLoadingServices=!1},()=>{this.isLoadingServices=!1,this.services=[],t.error()}))}}var so=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function oo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,zr,Vr)),s["ɵdid"](1,49152,null,0,Gr,[],null,null)],null,null)}function uo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","service_name"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getServices(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](2,2867200,[[1,4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],forceIdentifier:[6,"forceIdentifier"],selectionType:[7,"selectionType"]},{fetchData:"fetchData",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,3,1,"cd-service-details",[["cdTableDetail",""]],null,null,null,ro,no)),s["ɵdid"](4,114688,null,0,eo,[],{permissions:[0,"permissions"],selection:[1,"selection"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.services,n.columns,"flex",!0,6e4,"service_name","true","single"),t(e,4,0,n.permissions,n.expandedRow)}),null)}function lo(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{table:0}),(t()(),s["ɵand"](16777216,null,null,1,null,oo)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,uo)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,!n.hasOrchestrator),t(e,4,0,n.hasOrchestrator)}),null)}function co(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-services",[],null,null,null,lo,so)),s["ɵdid"](1,638976,null,0,io,[Q.a,he.a,Br,ai],null,null)],(function(t,e){t(e,1,0)}),null)}var fo=s["ɵccf"]("cd-services",io,co,{hostname:"hostname",hiddenColumns:"hiddenColumns"},{},[]),ho=n("xSw7"),go=n("GgAd"),po=n("j8L6"),bo=n("b5OY"),mo=n("pxLl");class yo{constructor(){this.last={}}ngOnChanges(){this.render()}hexdigits(t){const e=Math.floor(255*t).toString(16);return 1===e.length?"0"+e:e}hexcolor(t,e,n){return"#"+this.hexdigits(t)+this.hexdigits(e)+this.hexdigits(n)}render(){if(!this.histogram)return;let t=0;tt.each(this.histogram.values,(e,n)=>{tt.each(e,(e,a)=>{let r;r=this.last&&this.last[n]&&this.last[n][a]?e-this.last[n][a]:e,t=Math.max(t,r)})}),this.valuesStyle=this.histogram.values.map((e,n)=>e.map((e,a)=>{const r=t?(this.last&&this.last[n]&&this.last[n][a]?e-this.last[n][a]:e)/t:0;return{backgroundColor:this.hexcolor(1-r,r,0)}})),this.last=this.histogram.values}}var vo=s["ɵcrt"]({encapsulation:0,styles:[["table[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]{height:10px}table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{width:10px;height:10px}"]],data:{}});function xo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function _o(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,xo)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function To(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"table",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,_o)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.valuesStyle)}),null)}class Oo{constructor(t,e){this.osdService=t,this.authStorageService=e,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){tt.get(this,"osd.id")!==tt.get(this,"selection.id")&&(this.osd=this.selection),tt.isNumber(tt.get(this,"osd.id"))&&this.refresh()}refresh(){this.osdService.getDetails(this.osd.id).subscribe(t=>{this.osd.details=t,this.osd.histogram_failed="",tt.isObject(t.histogram)||(this.osd.histogram_failed=t.histogram,this.osd.details.histogram=void 0)})}}var wo=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function So(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.refresh()&&a),a}),fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,1,0,null==n.osd||null==n.osd.details?null:n.osd.details.osd_metadata)}),null)}function Io(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Metadata not available"]))],(function(t,e){t(e,1,0,"warning")}),null)}function No(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-performance-counter",[["serviceType","osd"]],null,null,null,po.b,po.a)),s["ɵdid"](1,114688,null,0,bo.a,[mo.a,he.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null)],(function(t,e){var n=e.component;t(e,1,0,"osd",null==n.osd?null:n.osd.id)}),null)}function Co(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](2,0,["Histogram not available: ",""]))],(function(t,e){t(e,1,0,"warning")}),(function(t,e){t(e,2,0,e.component.osd.histogram_failed)}))}function Ro(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Writes"])),(t()(),s["ɵeld"](4,0,null,null,1,"cd-osd-performance-histogram",[],null,null,null,To,vo)),s["ɵdid"](5,573440,null,0,yo,[],{histogram:[0,"histogram"]},null),(t()(),s["ɵeld"](6,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Reads"])),(t()(),s["ɵeld"](9,0,null,null,1,"cd-osd-performance-histogram",[],null,null,null,To,vo)),s["ɵdid"](10,573440,null,0,yo,[],{histogram:[0,"histogram"]},null)],(function(t,e){var n=e.component;t(e,5,0,null==n.osd||null==n.osd.details||null==n.osd.details.histogram||null==n.osd.details.histogram.osd?null:n.osd.details.histogram.osd.op_w_latency_in_bytes_histogram),t(e,10,0,null==n.osd||null==n.osd.details||null==n.osd.details.histogram||null==n.osd.details.histogram.osd?null:n.osd.details.histogram.osd.op_r_latency_out_bytes_histogram)}),null)}function Ao(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","three"],["uid","CrAHE0iZz"]],null,null,null,Rr.b,Rr.a)),s["ɵdid"](3,638976,null,0,Ar.a,[kr.b,te.a,he.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"osd-device-details?var-osd=osd."+n.osd.id,"three","CrAHE0iZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function ko(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,30,"tabset",[["id","tabset-osd-details"]],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Devices"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-device-list",[],null,null,null,Qi,zi)),s["ɵdid"](5,638976,null,0,Vi,[ii,he.a,i.DatePipe,mi],{osdId:[0,"osdId"]},null),(t()(),s["ɵeld"](6,0,null,0,3,"tab",[["heading","Attributes (OSD map)"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](8,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](9,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](10,0,null,0,4,"tab",[["heading","Metadata"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](11,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,So)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noMetaData",2]],null,0,null,Io)),(t()(),s["ɵeld"](15,0,null,0,3,"tab",[["heading","Device health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](16,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](17,0,null,null,1,"cd-smart-list",[],null,null,null,Gi,vi)),s["ɵdid"](18,638976,null,0,yi,[he.a,mi,ii],{osdId:[0,"osdId"]},null),(t()(),s["ɵeld"](19,0,null,0,3,"tab",[["heading","Performance counter"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](20,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,No)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](23,0,null,0,5,"tab",[["heading","Histogram"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](24,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Co)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ro)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ao)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Devices"),t(e,5,0,null==n.osd?null:n.osd.id),t(e,7,0,"Attributes (OSD map)"),t(e,9,0,null==n.osd||null==n.osd.details?null:n.osd.details.osd_map),t(e,11,0,"Metadata"),t(e,13,0,null==n.osd||null==n.osd.details?null:n.osd.details.osd_metadata,s["ɵnov"](e,14)),t(e,16,0,"Device health"),t(e,18,0,null==n.osd?null:n.osd.id),t(e,20,0,"Performance counter"),t(e,22,0,null==n.osd?null:n.osd.details),t(e,24,0,"Histogram"),t(e,26,0,null==n.osd?null:n.osd.histogram_failed),t(e,28,0,null==n.osd||null==n.osd.details?null:n.osd.details.histogram),t(e,30,0,n.grafanaPermission.read)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby),t(e,10,0,s["ɵnov"](e,11).id,s["ɵnov"](e,11).active,s["ɵnov"](e,11).addClass,s["ɵnov"](e,11).role,s["ɵnov"](e,11).ariaLabelledby),t(e,15,0,s["ɵnov"](e,16).id,s["ɵnov"](e,16).active,s["ɵnov"](e,16).addClass,s["ɵnov"](e,16).role,s["ɵnov"](e,16).ariaLabelledby),t(e,19,0,s["ɵnov"](e,20).id,s["ɵnov"](e,20).active,s["ɵnov"](e,20).addClass,s["ɵnov"](e,20).role,s["ɵnov"](e,20).ariaLabelledby),t(e,23,0,s["ɵnov"](e,24).id,s["ɵnov"](e,24).active,s["ɵnov"](e,24).addClass,s["ɵnov"](e,24).role,s["ɵnov"](e,24).ariaLabelledby)}))}function Eo(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ko)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}function Lo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-details",[],null,null,null,Eo,wo)),s["ɵdid"](1,573440,null,0,Oo,[mi,Q.a],null,null)],null,null)}var Do=s["ɵccf"]("cd-osd-details",Oo,Lo,{selection:"selection"},{},[]),Po=n("cp0P"),Mo=n("OLbh");class qo{constructor(t,e,n,a,r){this.bsModalRef=t,this.authStorageService=e,this.osdService=n,this.notificationService=a,this.i18n=r,this.osdFlagsForm=new $.k({}),this.allFlags={noin:{code:"noin",name:this.i18n("No In"),value:!1,description:this.i18n("OSDs that were previously marked out will not be marked back in when they start")},noout:{code:"noout",name:this.i18n("No Out"),value:!1,description:this.i18n("OSDs will not automatically be marked out after the configured interval")},noup:{code:"noup",name:this.i18n("No Up"),value:!1,description:this.i18n("OSDs are not allowed to start")},nodown:{code:"nodown",name:this.i18n("No Down"),value:!1,description:this.i18n("OSD failure reports are being ignored, such that the monitors will not mark OSDs down")},pause:{code:"pause",name:this.i18n("Pause"),value:!1,description:this.i18n("Pauses reads and writes")},noscrub:{code:"noscrub",name:this.i18n("No Scrub"),value:!1,description:this.i18n("Scrubbing is disabled")},"nodeep-scrub":{code:"nodeep-scrub",name:this.i18n("No Deep Scrub"),value:!1,description:this.i18n("Deep Scrubbing is disabled")},nobackfill:{code:"nobackfill",name:this.i18n("No Backfill"),value:!1,description:this.i18n("Backfilling of PGs is suspended")},norebalance:{code:"norebalance",name:this.i18n("No Rebalance"),value:!1,description:this.i18n("OSD will choose not to backfill unless PG is also degraded")},norecover:{code:"norecover",name:this.i18n("No Recover"),value:!1,description:this.i18n("Recovery of PGs is suspended")},sortbitwise:{code:"sortbitwise",name:this.i18n("Bitwise Sort"),value:!1,description:this.i18n("Use bitwise sort"),disabled:!0},purged_snapdirs:{code:"purged_snapdirs",name:this.i18n("Purged Snapdirs"),value:!1,description:this.i18n("OSDs have converted snapsets"),disabled:!0},recovery_deletes:{code:"recovery_deletes",name:this.i18n("Recovery Deletes"),value:!1,description:this.i18n("Deletes performed during recovery instead of peering"),disabled:!0},pglog_hardlimit:{code:"pglog_hardlimit",name:this.i18n("PG Log Hard Limit"),value:!1,description:this.i18n("Puts a hard limit on pg log length"),disabled:!0}},this.unknownFlags=[],this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.osdService.getFlags().subscribe(t=>{t.forEach(t=>{this.allFlags[t]?this.allFlags[t].value=!0:this.unknownFlags.push(t)}),this.flags=tt.toArray(this.allFlags)})}submitAction(){const t=this.flags.filter(t=>t.value).map(t=>t.code).concat(this.unknownFlags);this.osdService.updateFlags(t).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n("Updated OSD Flags")),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}var jo=n("MuvH");let Fo=(()=>{class t{static getType(t){const e=tt.find(this.knownTypes,e=>e.name===t);if(void 0!==e)return e;throw new Error('Found unknown type "'+t+'" for config option.')}static getTypeValidators(e){const n=t.getType(e.type);if("bool"===n.name||"str"===n.name)return;const a={validators:[],patternHelpText:n.patternHelpText};return n.isNumberType?(e.max&&""!==e.max&&(a.max=e.max,a.validators.push($.B.max(e.max))),e.min&&""!==e.min?(a.min=e.min,a.validators.push($.B.min(e.min))):"defaultMin"in n&&(a.min=n.defaultMin,a.validators.push($.B.min(n.defaultMin))),a.validators.push("float"===e.type?js.a.decimalNumber():js.a.number(n.allowsNegative))):"addr"===e.type?a.validators=[js.a.ip()]:"uuid"===e.type&&(a.validators=[js.a.uuid()]),a}static getTypeStep(t,e){if(["uint","int","size","secs"].includes(t))return 1;if("float"===t){if(null!==e&&-1!==e.toString().indexOf(".")){const t=e.toString().split(".");return Math.pow(10,-t[1].length)}return.1}}}return t.knownTypes=[{name:"uint",inputType:"number",humanReadable:"Unsigned integer value",defaultMin:0,patternHelpText:"The entered value needs to be an unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"int",inputType:"number",humanReadable:"Integer value",patternHelpText:"The entered value needs to be a number.",isNumberType:!0,allowsNegative:!0},{name:"size",inputType:"number",humanReadable:"Unsigned integer value (>=16bit)",defaultMin:0,patternHelpText:"The entered value needs to be a unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"secs",inputType:"number",humanReadable:"Number of seconds",defaultMin:1,patternHelpText:"The entered value needs to be a number >= 1.",isNumberType:!0,allowsNegative:!1},{name:"float",inputType:"number",humanReadable:"Double value",patternHelpText:"The entered value needs to be a number or decimal.",isNumberType:!0,allowsNegative:!0},{name:"str",inputType:"text",humanReadable:"Text",isNumberType:!1},{name:"addr",inputType:"text",humanReadable:"IPv4 or IPv6 address",patternHelpText:"The entered value needs to be a valid IP address.",isNumberType:!1},{name:"uuid",inputType:"text",humanReadable:"UUID",patternHelpText:"The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",isNumberType:!1},{name:"bool",inputType:"checkbox",humanReadable:"Boolean value",isNumberType:!1}],t})();class Go{constructor(t){this.configService=t,this.optionNames=[],this.optionsForm=new qs.a({}),this.optionsFormDir=new $.t([],[]),this.optionsFormGroupName="",this.optionsFormShowReset=!0,this.icons=bt.a,this.options=[],this.optionsFormGroup=new qs.a({})}static optionNameToText(t){const e=["mon","mgr","osd","mds","client"];return t.split("_").filter((t,n)=>0!==n||!e.includes(t)).map(t=>t.charAt(0).toUpperCase()+t.substring(1)).join(" ")}ngOnInit(){this.createForm(),this.loadStoredData()}createForm(){this.optionsForm.addControl(this.optionsFormGroupName,this.optionsFormGroup),this.optionNames.forEach(t=>{this.optionsFormGroup.addControl(t,new $.i(null))})}getStep(t,e){return Fo.getTypeStep(t,e)}loadStoredData(){this.configService.filter(this.optionNames).subscribe(t=>{this.options=t.map(t=>{const e=this.optionsForm.get(t.name),n=Fo.getTypeValidators(t);return t.additionalTypeInfo=Fo.getType(t.type),t.text=Go.optionNameToText(t.name),t.value=tt.find(t.value,t=>"osd"===t.section),t.value&&e.setValue("bool"===t.additionalTypeInfo.name?"true"===t.value.value:t.value.value),n&&(t.patternHelpText=n.patternHelpText,"max"in n&&""!==n.max&&(t.maxValue=n.max),"min"in n&&""!==n.min&&(t.minValue=n.min),e.setValidators(n.validators)),t})})}saveValues(){const t={};return this.optionNames.forEach(e=>{const n=this.optionsForm.getValue(e);null!==n&&""!==n&&(t[e]={section:"osd",value:n})}),this.configService.bulkCreate({options:t})}resetValue(t){this.configService.delete(t,"osd").subscribe(()=>{this.optionsForm.get(t).reset()})}}let Vo=(()=>{class t{}return t.basicOptions=["osd_scrub_during_recovery","osd_scrub_begin_hour","osd_scrub_end_hour","osd_scrub_begin_week_day","osd_scrub_end_week_day","osd_scrub_min_interval","osd_scrub_max_interval","osd_deep_scrub_interval","osd_scrub_auto_repair","osd_max_scrubs","osd_scrub_priority","osd_scrub_sleep"],t.advancedOptions=["osd_scrub_auto_repair_num_errors","osd_debug_deep_scrub_sleep","osd_deep_scrub_keys","osd_deep_scrub_large_omap_object_key_threshold","osd_deep_scrub_large_omap_object_value_sum_threshold","osd_deep_scrub_randomize_ratio","osd_deep_scrub_stride","osd_deep_scrub_update_digest_min_age","osd_requested_scrub_priority","osd_scrub_backoff_ratio","osd_scrub_chunk_max","osd_scrub_chunk_min","osd_scrub_cost","osd_scrub_interval_randomize_ratio","osd_scrub_invalid_stats","osd_scrub_load_threshold","osd_scrub_max_preemptions"],t})();class zo{constructor(t,e,n,a,r){this.bsModalRef=t,this.authStorageService=e,this.notificationService=n,this.i18n=a,this.actionLabels=r,this.basicOptions=Vo.basicOptions,this.advancedOptions=Vo.advancedOptions,this.advancedEnabled=!1,this.osdPgScrubForm=new qs.a({}),this.resource=this.i18n("PG scrub options"),this.action=this.actionLabels.EDIT,this.permissions=this.authStorageService.getPermissions()}submitAction(){const t=[this.basicOptionsValues.saveValues()];this.advancedOptionsValues&&t.push(this.advancedOptionsValues.saveValues()),Object(Po.a)(t).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n("Updated PG scrub options")),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}class Bo{constructor(t,e,n,a,r,i){this.bsModalRef=t,this.authStorageService=e,this.configService=n,this.notificationService=a,this.i18n=r,this.osdService=i,this.priorities=[],this.priorityAttrs={},this.permissions=this.authStorageService.getPermissions(),this.priorities=this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES,this.osdRecvSpeedForm=new qs.a({priority:new $.i(null,{validators:[$.B.required]}),customizePriority:new $.i(!1)}),this.priorityAttrs={osd_max_backfills:{text:this.i18n("Max Backfills"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_active:{text:this.i18n("Recovery Max Active"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_single_start:{text:this.i18n("Recovery Max Single Start"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_sleep:{text:this.i18n("Recovery Sleep"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0}},Object.keys(this.priorityAttrs).forEach(t=>{this.osdRecvSpeedForm.addControl(t,new $.i(null,{validators:[$.B.required]}))})}ngOnInit(){this.configService.filter(Object.keys(this.priorityAttrs)).subscribe(t=>{const e=this.getCurrentValues(t);this.detectPriority(e.values,t=>{this.setPriority(t)}),this.setDescription(e.configOptions),this.setValidators(e.configOptions)})}detectPriority(t,e){const n=tt.find(this.priorities,e=>tt.isEqual(e.values,t));return this.osdRecvSpeedForm.controls.customizePriority.setValue(!1),n?e(n):4===Object.entries(t).length?(this.osdRecvSpeedForm.controls.customizePriority.setValue(!0),e(Object({name:"custom",text:this.i18n("Custom"),values:t}))):e(this.priorities[0])}getCurrentValues(t){const e={values:{},configOptions:[]};return t.forEach(t=>{e.configOptions.push(t),"value"in t?t.value.forEach(n=>{"osd"===n.section&&(e.values[t.name]=Number(n.value))}):"default"in t&&null!==t.default&&(e.values[t.name]=Number(t.default))}),e}setDescription(t){t.forEach(t=>{""!==t.desc&&(this.priorityAttrs[t.name].desc=t.desc)})}setPriority(t){const e=tt.find(this.priorities,t=>"custom"===t.name);"custom"===t.name?e||this.priorities.push(t):e&&this.priorities.splice(this.priorities.indexOf(e),1),this.osdRecvSpeedForm.controls.priority.setValue(t.name),Object.entries(t.values).forEach(([t,e])=>{this.osdRecvSpeedForm.controls[t].setValue(e)})}setValidators(t){t.forEach(t=>{const e=Fo.getTypeValidators(t);e?(e.validators.push($.B.required),"max"in e&&""!==e.max&&(this.priorityAttrs[t.name].maxValue=e.max),"min"in e&&""!==e.min&&(this.priorityAttrs[t.name].minValue=e.min),this.priorityAttrs[t.name].patternHelpText=e.patternHelpText,this.osdRecvSpeedForm.controls[t.name].setValidators(e.validators)):this.osdRecvSpeedForm.controls[t.name].setValidators($.B.required)})}onCustomizePriorityChange(){const t={};if(Object.keys(this.priorityAttrs).forEach(e=>{t[e]=this.osdRecvSpeedForm.getValue(e)}),this.osdRecvSpeedForm.getValue("customizePriority")){const e={name:"custom",text:this.i18n("Custom"),values:t};this.setPriority(e)}else this.detectPriority(t,t=>{this.setPriority(t)})}onPriorityChange(t){const e=tt.find(this.priorities,e=>e.name===t)||this.priorities[0];this.osdRecvSpeedForm.get("customizePriority").setValue(!1),this.setPriority(e)}submitAction(){const t={};Object.keys(this.priorityAttrs).forEach(e=>{t[e]={section:"osd",value:this.osdRecvSpeedForm.getValue(e)}}),this.configService.bulkCreate({options:t}).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n('Updated OSD recovery speed priority "{{value}}"',{value:this.osdRecvSpeedForm.getValue("priority")})),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}var Yo=n("2EZI");class Ho{constructor(t,e,n){this.bsModalRef=t,this.osdService=e,this.fb=n,this.currentWeight=1}get weight(){return this.reweightForm.get("weight")}ngOnInit(){this.reweightForm=this.fb.group({weight:this.fb.control(this.currentWeight,[$.B.required,$.B.max(1),$.B.min(0)])})}reweight(){this.osdService.reweight(this.osdId,this.reweightForm.value.weight).subscribe(()=>this.bsModalRef.hide())}}class Uo{constructor(t,e,n,a,r){this.bsModalRef=t,this.osdService=e,this.notificationService=n,this.i18n=a,this.joinPipe=r,this.selected=[]}ngOnInit(){this.scrubForm=new $.k({})}scrub(){Object(Po.a)(this.selected.map(t=>this.osdService.scrub(t,this.deep))).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n("{{operation}} was initialized in the following OSD(s): {{id}}",{operation:this.deep?"Deep scrub":"Scrub",id:this.joinPipe.transform(this.selected)})),this.bsModalRef.hide()},()=>this.bsModalRef.hide())}}const Wo=new us.a("osd");class Ko extends ls.a{constructor(t,e,n,a,r,i,s,o,u,l,d){super(),this.authStorageService=t,this.osdService=e,this.dimlessBinaryPipe=n,this.modalService=a,this.i18n=r,this.urlBuilder=i,this.router=s,this.depCheckerService=o,this.taskWrapper=u,this.actionLabels=l,this.notificationService=d,this.icons=bt.a,this.selection=new Ur.a,this.osds=[],this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:bt.a.add,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.CREATE,this.i18n("OSD"),()=>{this.router.navigate([this.urlBuilder.getCreate()])})},canBePrimary:t=>!t.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:bt.a.edit,click:()=>this.editAction()},{name:this.actionLabels.SCRUB,permission:"update",icon:bt.a.analyse,click:()=>this.scrubAction(!1),disable:()=>!this.hasOsdSelected,canBePrimary:t=>t.hasSelection},{name:this.actionLabels.DEEP_SCRUB,permission:"update",icon:bt.a.deepCheck,click:()=>this.scrubAction(!0),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.REWEIGHT,permission:"update",click:()=>this.reweight(),disable:()=>!this.hasOsdSelected||!this.selection.hasSingleSelection,icon:bt.a.reweight},{name:this.actionLabels.MARK_OUT,permission:"update",click:()=>this.showConfirmationModal(this.i18n("out"),this.osdService.markOut),disable:()=>this.isNotSelectedOrInState("out"),icon:bt.a.left},{name:this.actionLabels.MARK_IN,permission:"update",click:()=>this.showConfirmationModal(this.i18n("in"),this.osdService.markIn),disable:()=>this.isNotSelectedOrInState("in"),icon:bt.a.right},{name:this.actionLabels.MARK_DOWN,permission:"update",click:()=>this.showConfirmationModal(this.i18n("down"),this.osdService.markDown),disable:()=>this.isNotSelectedOrInState("down"),icon:bt.a.down},{name:this.actionLabels.MARK_LOST,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("Mark"),this.i18n("OSD lost"),this.i18n("marked lost"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",this.osdService.markLost),disable:()=>this.isNotSelectedOrInState("up"),icon:bt.a.flatten},{name:this.actionLabels.PURGE,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("Purge"),this.i18n("OSD"),this.i18n("purged"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",t=>(this.selection=new Ur.a,this.osdService.purge(t))),disable:()=>this.isNotSelectedOrInState("up"),icon:bt.a.erase},{name:this.actionLabels.DESTROY,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("destroy"),this.i18n("OSD"),this.i18n("destroyed"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",t=>(this.selection=new Ur.a,this.osdService.destroy(t))),disable:()=>this.isNotSelectedOrInState("up"),icon:bt.a.destroyCircle},{name:this.actionLabels.DELETE,permission:"delete",click:()=>this.delete(),disable:()=>!this.hasOsdSelected,icon:bt.a.destroy}]}static collectStates(t){const e=[t.in?"in":"out"];return t.up?e.push("up"):t.state.includes("destroyed")?e.push("destroyed"):e.push("down"),e}ngOnInit(){this.clusterWideActions=[{name:this.i18n("Flags"),icon:bt.a.flag,click:()=>this.configureFlagsAction(),permission:"read",visible:()=>this.permissions.osd.read},{name:this.i18n("Recovery Priority"),icon:bt.a.deepCheck,click:()=>this.configureQosParamsAction(),permission:"read",visible:()=>this.permissions.configOpt.read},{name:this.i18n("PG scrub"),icon:bt.a.analyse,click:()=>this.configurePgScrubAction(),permission:"read",visible:()=>this.permissions.configOpt.read}],this.columns=[{prop:"host.name",name:this.i18n("Host")},{prop:"id",name:this.i18n("ID"),flexGrow:1,cellTransformation:Hr.a.bold},{prop:"collectedStates",name:this.i18n("Status"),flexGrow:1,cellTransformation:Hr.a.badge,customTemplateConfig:{map:{in:{class:"badge-success"},up:{class:"badge-success"},down:{class:"badge-danger"},out:{class:"badge-danger"},destroyed:{class:"badge-danger"}}}},{prop:"tree.device_class",name:this.i18n("Device class"),flexGrow:1,cellTransformation:Hr.a.badge,customTemplateConfig:{map:{hdd:{class:"badge-hdd"},ssd:{class:"badge-ssd"}}}},{prop:"stats.numpg",name:this.i18n("PGs"),flexGrow:1},{prop:"stats.stat_bytes",name:this.i18n("Size"),flexGrow:1,pipe:this.dimlessBinaryPipe},{prop:"stats.usage",name:this.i18n("Usage"),cellTemplate:this.osdUsageTpl},{prop:"stats_history.out_bytes",name:this.i18n("Read bytes"),cellTransformation:Hr.a.sparkline},{prop:"stats_history.in_bytes",name:this.i18n("Write bytes"),cellTransformation:Hr.a.sparkline},{prop:"stats.op_r",name:this.i18n("Read ops"),cellTransformation:Hr.a.perSecond},{prop:"stats.op_w",name:this.i18n("Write ops"),cellTransformation:Hr.a.perSecond}]}getSelectedOsdIds(){const t=this.osds.map(t=>t.id);return this.selection.selected.map(t=>t.id).filter(e=>t.includes(e))}getSelectedOsds(){return this.osds.filter(t=>!tt.isUndefined(t)&&this.getSelectedOsdIds().includes(t.id))}get hasOsdSelected(){return this.getSelectedOsdIds().length>0}updateSelection(t){this.selection=t}isNotSelectedOrInState(t){const e=this.getSelectedOsds();if(0===e.length)return!0;switch(t){case"in":return e.some(t=>1===t.in);case"out":return e.some(t=>1!==t.in);case"down":return e.some(t=>1!==t.up);case"up":return e.some(t=>1===t.up)}}getOsdList(){this.osdService.getList().subscribe(t=>{this.osds=t.map(t=>(t.collectedStates=Ko.collectStates(t),t.stats_history.out_bytes=t.stats_history.op_out_bytes.map(t=>t[1]),t.stats_history.in_bytes=t.stats_history.op_in_bytes.map(t=>t[1]),t.stats.usage=t.stats.stat_bytes_used/t.stats.stat_bytes,t.cdIsBinary=!0,t))})}editAction(){const t=tt.filter(this.osds,["id",this.selection.first().id]).pop();this.modalService.show(Yr.a,{initialState:{titleText:this.i18n("Edit OSD: {{id}}",{id:t.id}),fields:[{type:"text",name:"deviceClass",value:t.tree.device_class,label:this.i18n("Device class"),required:!0}],submitButtonText:this.i18n("Edit OSD"),onSubmit:e=>{this.osdService.update(t.id,e.deviceClass).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n('Updated OSD "{{id}}"',{id:t.id})),this.getOsdList()})}}})}scrubAction(t){if(!this.hasOsdSelected)return;const e={selected:this.getSelectedOsdIds(),deep:t};this.bsModalRef=this.modalService.show(Uo,{initialState:e})}configureFlagsAction(){this.bsModalRef=this.modalService.show(qo,{})}showConfirmationModal(t,e){this.bsModalRef=this.modalService.show(Mo.a,{initialState:{titleText:this.i18n("Mark OSD {{markAction}}",{markAction:t}),buttonText:this.i18n("Mark {{markAction}}",{markAction:t}),bodyTpl:this.markOsdConfirmationTpl,bodyContext:{markActionDescription:t},onSubmit:()=>{Object(Po.a)(this.getSelectedOsdIds().map(t=>e.call(this.osdService,t))).subscribe(()=>this.bsModalRef.hide())}}})}reweight(){const t=this.osds.filter(t=>t.id===this.selection.first().id).pop();this.modalService.show(Ho,{initialState:{currentWeight:t.weight,osdId:t.id}})}delete(){const t=new qs.a({preserve:new $.i(!1)});this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.DELETE,this.i18n("OSD"),()=>{this.showCriticalConfirmationModal(this.i18n("delete"),this.i18n("OSD"),this.i18n("deleted"),t=>this.osdService.safeToDelete(JSON.stringify(t)),"is_safe_to_delete",e=>(this.selection=new Ur.a,this.taskWrapper.wrapTaskAroundCall({task:new fs.a("osd/"+It.e.DELETE,{svc_id:e}),call:this.osdService.delete(e,t.value.preserve,!0)})),!0,t,this.deleteOsdExtraTpl)})}showCriticalConfirmationModal(t,e,n,a,r,i,s=!1,o,u){a(this.getSelectedOsdIds()).subscribe(a=>{const l=this.modalService.show(ds.a,{initialState:{actionDescription:t,itemDescription:e,bodyTemplate:this.criticalConfirmationTpl,bodyContext:{safeToPerform:a[r],message:a.message,actionDescription:n,osdIds:this.getSelectedOsdIds()},childFormGroup:o,childFormGroupTemplate:u,submitAction:()=>{const t=Object(Po.a)(this.getSelectedOsdIds().map(t=>i.call(this.osdService,t)));s?t.subscribe(void 0,()=>{this.getOsdList(),l.hide()},()=>l.hide()):t.subscribe(()=>{this.getOsdList(),l.hide()},()=>l.hide())}}})})}configureQosParamsAction(){this.bsModalRef=this.modalService.show(Bo,{})}configurePgScrubAction(){this.bsModalRef=this.modalService.show(zo,{class:"modal-lg"})}}var $o=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Jo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,ho.b,ho.a)),s["ɵdid"](1,573440,null,0,go.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(t,e){t(e,1,0,e.context.row.stats.stat_bytes,e.context.row.stats.stat_bytes_used)}),null)}function Zo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","four"],["uid","lo02I1Aiz"]],null,null,null,Rr.b,Rr.a)),s["ɵdid"](3,638976,null,0,Ar.a,[kr.b,te.a,he.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){t(e,1,0,"Overall Performance"),t(e,3,0,"osd-overview?","four","lo02I1Aiz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Qo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["OSD(s) ",""])),s["ɵppd"](3,1),(t()(),s["ɵted"](-1,null,[" will be marked\n"])),(t()(),s["ɵeld"](5,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵted"](-1,null,[" if you proceed."]))],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent,0),n.getSelectedOsdIds()));t(e,2,0,a),t(e,6,0,e.context.markActionDescription)}))}function Xo(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["OSD is"]))],null,null)}function tu(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["OSDs are"]))],null,null)}function eu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","danger"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"cd-alert-panel",[["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](2,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The "])),(t()(),s["ɵeld"](4,0,null,0,5,null,null,null,null,null,null,null)),s["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xo)),s["ɵdid"](7,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tu)),s["ɵdid"](9,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](10,0,[" not safe to be ","! ",""]))],(function(t,e){var n=e.component;t(e,2,0,"warning"),t(e,5,0,n.selection.hasSingleSelection),t(e,7,0,"true"),t(e,9,0,"false")}),(function(t,e){t(e,10,0,e.parent.context.actionDescription,e.parent.context.message)}))}function nu(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,eu)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](2,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](4,null,["OSD ",""])),s["ɵppd"](5,1),(t()(),s["ɵted"](-1,null,[" will be "])),(t()(),s["ɵeld"](7,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""])),(t()(),s["ɵted"](-1,null,[" if you proceed."]))],(function(t,e){t(e,1,0,!e.context.safeToPerform)}),(function(t,e){var n=s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent,0),e.context.osdIds));t(e,4,0,n),t(e,8,0,e.context.actionDescription)}))}function au(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,23,null,null,null,null,(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,1).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,1).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,4).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](3,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](4,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](5,0,null,null,18,null,null,null,null,null,null,null)),s["ɵdid"](6,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](9,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](10,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,8,{FormControlNames:1}),s["ɵqud"](603979776,9,{messagesBlock:0}),(t()(),s["ɵeld"](13,0,null,0,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","preserve"],["id","preserve"],["name","preserve"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,16).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,16).onTouched()&&a),a}),null,null)),s["ɵdid"](15,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](16,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](18,671744,[[8,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](20,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](21,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](22,0,null,null,1,"label",[["class","custom-control-label"],["for","preserve"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Preserve OSD ID(s) for replacement."]))],(function(t,e){t(e,1,0,e.context.form),t(e,4,0,e.context.form),t(e,6,0,"child"),t(e,10,0),t(e,18,0,"preserve"),t(e,21,0,"preserve")}),(function(t,e){t(e,9,0,s["ɵnov"](e,10).hasErrors,s["ɵnov"](e,10).hasSuccess),t(e,14,0,s["ɵnov"](e,20).ngClassUntouched,s["ɵnov"](e,20).ngClassTouched,s["ɵnov"](e,20).ngClassPristine,s["ɵnov"](e,20).ngClassDirty,s["ɵnov"](e,20).ngClassValid,s["ɵnov"](e,20).ngClassInvalid,s["ɵnov"](e,20).ngClassPending,s["ɵnov"](e,21).validClass,s["ɵnov"](e,21).invalidClass)}))}function ru(t){return s["ɵvid"](0,[s["ɵpid"](0,gs.a,[]),s["ɵqud"](402653184,1,{osdUsageTpl:0}),s["ɵqud"](402653184,2,{markOsdConfirmationTpl:0}),s["ɵqud"](402653184,3,{criticalConfirmationTpl:0}),s["ɵqud"](402653184,4,{tableComponent:0}),s["ɵqud"](671088640,5,{reweightBodyTpl:0}),s["ɵqud"](671088640,6,{safeToDestroyBodyTpl:0}),s["ɵqud"](671088640,7,{deleteOsdExtraTpl:0}),(t()(),s["ɵeld"](8,0,null,null,16,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](9,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](10,0,null,0,12,"tab",[["heading","OSDs List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](11,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](12,0,null,null,9,"cd-table",[["selectionType","multiClick"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getOsdList()&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](13,2867200,[[4,4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"],updateSelectionOnRefresh:[4,"updateSelectionOnRefresh"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](14,0,null,1,5,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,1,"cd-table-actions",[["class","btn-group"],["id","osd-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](16,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](17,0,null,null,2,"cd-table-actions",[["btnColor","light"],["class","btn-group"],["dropDownOnly","Cluster-wide configuration"],["id","cluster-wide-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](18,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"],btnColor:[3,"btnColor"],dropDownOnly:[4,"dropDownOnly"]},null),s["ɵpod"](19,{read:0}),(t()(),s["ɵeld"](20,0,null,3,1,"cd-osd-details",[["cdTableDetail",""]],null,null,null,Eo,wo)),s["ɵdid"](21,573440,null,0,Oo,[mi,Q.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[1,2],["osdUsageTpl",2]],null,0,null,Jo)),(t()(),s["ɵand"](16777216,null,0,1,null,Zo)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[2,2],["markOsdConfirmationTpl",2]],null,0,null,Qo)),(t()(),s["ɵand"](0,[[3,2],["criticalConfirmationTpl",2]],null,0,null,nu)),(t()(),s["ɵand"](0,[[7,2],["deleteOsdExtraTpl",2]],null,0,null,au))],(function(t,e){var n=e.component;t(e,11,0,"OSDs List"),t(e,13,0,n.osds,n.columns,!0,"multiClick","never"),t(e,16,0,n.permissions.osd,n.selection,n.tableActions);var a=t(e,19,0,!0);t(e,18,0,a,n.selection,n.clusterWideActions,"light","Cluster-wide configuration"),t(e,21,0,n.expandedRow),t(e,24,0,n.permissions.grafana.read)}),(function(t,e){t(e,8,0,s["ɵnov"](e,9).clazz),t(e,10,0,s["ɵnov"](e,11).id,s["ɵnov"](e,11).active,s["ɵnov"](e,11).addClass,s["ɵnov"](e,11).role,s["ɵnov"](e,11).ariaLabelledby)}))}function iu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-osd-list",[],null,null,null,ru,$o)),s["ɵprd"](256,null,us.a,Wo,[]),s["ɵdid"](2,114688,null,0,Ko,[Q.a,mi,ma.a,Rt.b,he.a,us.a,Lt.m,bs,ms.a,It.b,mt.a],null,null)],(function(t,e){t(e,2,0)}),null)}var su=s["ɵccf"]("cd-osd-list",Ko,iu,{},{},[]),ou=n("4HWh"),uu=n("p4Cf");class lu{constructor(t,e,n){this.formBuilder=t,this.bsModalRef=e,this.actionLabels=n,this.submitAction=new s.EventEmitter,this.icons=bt.a,this.filterColumns=[],this.devices=[],this.filteredDevices=[],this.capacity=0,this.canSubmit=!1,this.requiredFilters=[],this.action=n.ADD,this.createForm()}ngAfterViewInit(){const t=tt.filter(this.inventoryDevices.columns,t=>this.filterColumns.includes(t.prop)&&"hostname"!==t.prop);this.requiredFilters=tt.map(t,"name")}createForm(){this.formGroup=this.formBuilder.group({})}onFilterChange(t){if(this.capacity=0,this.canSubmit=!1,tt.isEmpty(t.filters))this.filteredDevices=[],this.event=void 0;else{const e=t.filters.filter(t=>"hostname"!==t.prop);this.canSubmit=!tt.isEmpty(e),this.filteredDevices=t.data,this.capacity=tt.sumBy(this.filteredDevices,"sys_api.size"),this.event=t}}onSubmit(){this.submitAction.emit(this.event),this.bsModalRef.hide()}}class du{constructor(t,e){this.bsModalService=t,this.i18n=e,this.selected=new s.EventEmitter,this.cleared=new s.EventEmitter,this.icons=bt.a,this.devices=[],this.capacity=0,this.appliedFilters=[],this.tooltips={noAvailDevices:this.i18n("No available devices"),addPrimaryFirst:this.i18n("Please add primary devices first"),addByFilters:this.i18n("Add devices by using filters")}}ngOnInit(){this.updateAddButtonTooltip()}ngOnChanges(){this.updateAddButtonTooltip()}showSelectionModal(){let t=["human_readable_type","sys_api.vendor","sys_api.model","sys_api.size"];"data"===this.type&&(t=["hostname",...t]),this.bsModalService.show(lu,{class:"modal-xl",initialState:{hostname:this.hostname,deviceType:this.name,devices:this.availDevices,filterColumns:t}}).content.submitAction.subscribe(t=>{this.devices=t.data,this.capacity=tt.sumBy(this.devices,"sys_api.size"),this.appliedFilters=t.filters;const e=tt.assign({type:this.type},t);this.selected.emit(e)})}updateAddButtonTooltip(){this.addButtonTooltip="data"===this.type&&0===this.availDevices.length?this.tooltips.noAvailDevices:this.canSelect?0===this.availDevices.length?this.tooltips.noAvailDevices:this.tooltips.addByFilters:this.tooltips.addPrimaryFirst}clearDevices(){const t={type:this.type,clearedDevices:[...this.devices]};this.devices=[],this.cleared.emit(t)}}var cu=s["ɵcrt"]({encapsulation:0,styles:[[".tc_clearSelections[_ngcontent-%COMP%]{text-decoration:none}"]],data:{}});function fu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The primary storage devices. These devices contain all OSD data."]))],null,null)}function hu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device."]))],null,null)}function gu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DB devices can be used for storing BlueStore’s internal metadata. It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD)."]))],null,null)}function pu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,6,"button",[["class","btn btn-light"],["data-toggle","tooltip"],["type","button"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showSelectionModal()&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add"]))],(function(t,e){var n=t(e,5,0,e.component.icons.add);t(e,4,0,n)}),(function(t,e){var n=e.component;t(e,1,0,n.addButtonTooltip,0===n.availDevices.length||!n.canSelect)}))}function bu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",": ",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.name,e.context.$implicit.value.formatted)}))}function mu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["Raw capacity: ",""])),s["ɵppd"](3,1)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent,0),n.capacity));t(e,2,0,a)}))}function yu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[["class","pb-2 my-2 border-bottom"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,bu)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](3,0,null,null,6,"a",[["class","tc_clearSelections"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.clearDevices(),a=!1),a}),null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵeld"](8,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clear"])),(t()(),s["ɵeld"](10,0,null,null,3,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,2,"cd-inventory-devices",[],null,null,null,$r,Kr)),s["ɵdid"](12,245760,null,0,Wr,[Q.a,ma.a,he.a,Rt.b,mt.a,Br],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],filterColumns:[2,"filterColumns"]},null),s["ɵpad"](13,2),(t()(),s["ɵand"](16777216,null,null,1,null,mu)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.appliedFilters);var a=t(e,7,0,n.icons.clearFilters);t(e,6,0,a);var r=n.devices,i=t(e,13,0,"available","osd_ids");t(e,12,0,r,i,s["ɵEMPTY_ARRAY"]),t(e,15,0,"data"===n.type)}),null)}function vu(t){return s["ɵvid"](0,[s["ɵpid"](0,ma.a,[Ia.a]),(t()(),s["ɵeld"](1,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](2,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,10,"label",[["class","cd-col-form-label"],["for","createDeleteButton"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](7,null,[""," devices"])),(t()(),s["ɵeld"](8,0,null,null,7,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](9,49152,null,0,uu.a,[],null,null),(t()(),s["ɵand"](16777216,null,0,1,null,fu)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,hu)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,gu)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](16,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,pu)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["blockClearDevices",2]],null,0,null,yu))],(function(t,e){var n=e.component;t(e,2,0),t(e,11,0,"data"===n.type),t(e,13,0,"wal"===n.type),t(e,15,0,"db"===n.type),t(e,18,0,0===n.devices.length,s["ɵnov"](e,19))}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,n.name)}))}class xu{constructor(t,e,n,a,r){this.bsModalRef=t,this.actionLabels=e,this.formBuilder=n,this.osdService=a,this.taskWrapper=r,this.driveGroups=[],this.submitAction=new s.EventEmitter,this.action=e.CREATE,this.createForm()}ngOnInit(){}createForm(){this.formGroup=this.formBuilder.group({})}onSubmit(){this.taskWrapper.wrapTaskAroundCall({task:new fs.a("osd/"+It.e.CREATE,{tracking_id:tt.join(tt.map(this.driveGroups,"service_id"),", ")}),call:this.osdService.create(this.driveGroups)}).subscribe(void 0,()=>{this.formGroup.setErrors({cdSubmitButton:!0})},()=>{this.submitAction.emit(),this.bsModalRef.hide()})}}class _u{constructor(){this.reset(),this.formatterService=new Ia.a,this.deviceSelectionAttrs={"sys_api.vendor":{name:"vendor"},"sys_api.model":{name:"model"},device_id:{name:"device_id"},human_readable_type:{name:"rotational",formatter:t=>"hdd"===t.toLowerCase()},"sys_api.size":{name:"size",formatter:t=>this.formatterService.format_number(t,1024,["B","KB","MB","GB","TB","PB"]).replace(" ","")}}}reset(){this.spec={service_type:"osd",service_id:"dashboard-"+tt.now()}}setName(t){this.spec.service_id=t}setHostPattern(t){this.spec.host_pattern=t}setDeviceSelection(t,e){const n=t+"_devices";this.spec[n]={},e.forEach(t=>{const e=this.deviceSelectionAttrs[t.prop];e&&(this.spec[n][e.name]=e.formatter?e.formatter(t.value.raw):t.value.raw)})}clearDeviceSelection(t){delete this.spec[t+"_devices"]}setSlots(t,e){const n=t+"_slots";0===e?delete this.spec[n]:this.spec[n]=e}setFeature(t,e){e?this.spec[t]=!0:delete this.spec[t]}}class Tu{constructor(t,e,n,a,r,i){this.actionLabels=t,this.authStorageService=e,this.i18n=n,this.orchService=a,this.router=r,this.bsModalService=i,this.icons=bt.a,this.columns=[],this.loading=!1,this.allDevices=[],this.availDevices=[],this.dataDeviceFilters=[],this.dbDeviceFilters=[],this.walDeviceFilters=[],this.hostname="",this.driveGroup=new _u,this.featureList=[],this.hasOrchestrator=!1,this.resource=this.i18n("OSDs"),this.action=this.actionLabels.CREATE,this.features={encrypted:{key:"encrypted",desc:this.i18n("Encryption")}},this.featureList=tt.map(this.features,(t,e)=>Object.assign(t,{key:e})),this.createForm()}ngOnInit(){this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,this.hasOrchestrator&&this.getDataDevices()}),this.form.get("walSlots").valueChanges.subscribe(t=>this.setSlots("wal",t)),this.form.get("dbSlots").valueChanges.subscribe(t=>this.setSlots("db",t)),tt.each(this.features,t=>{this.form.get("features").get(t.key).valueChanges.subscribe(e=>this.featureFormUpdate(t.key,e))})}createForm(){this.form=new qs.a({walSlots:new $.i(0,{validators:[$.B.min(0)]}),dbSlots:new $.i(0,{validators:[$.B.min(0)]}),features:new qs.a(this.featureList.reduce((t,e)=>(t[e.key]=new $.i({value:!1,disabled:!0}),t),{}))})}getDataDevices(){this.loading||(this.loading=!0,this.orchService.inventoryDeviceList().subscribe(t=>{this.allDevices=tt.filter(t,"available"),this.availDevices=[...this.allDevices],this.loading=!1},()=>{this.allDevices=[],this.availDevices=[],this.loading=!1}))}setSlots(t,e){"number"==typeof e&&e>=0&&this.driveGroup.setSlots(t,e)}featureFormUpdate(t,e){this.driveGroup.setFeature(t,e)}enableFeatures(){this.featureList.forEach(t=>{this.form.get(t.key).enable({emitEvent:!1})})}disableFeatures(){this.featureList.forEach(t=>{const e=this.form.get(t.key);e.disable({emitEvent:!1}),e.setValue(!1,{emitEvent:!1})})}onDevicesSelected(t){if(this.availDevices=t.dataOut,"data"===t.type){const e=tt.find(t.filters,{prop:"hostname"});e?(this.hostname=e.value.raw,this.availDevices=t.dataOut.filter(t=>t.hostname===this.hostname),this.driveGroup.setHostPattern(this.hostname)):this.driveGroup.setHostPattern("*"),this.enableFeatures()}this.driveGroup.setDeviceSelection(t.type,t.filters)}onDevicesCleared(t){"data"===t.type?(this.availDevices=[...this.allDevices],this.walDeviceSelectionGroups.devices=[],this.dbDeviceSelectionGroups.devices=[],this.disableFeatures(),this.driveGroup.reset(),this.form.get("walSlots").setValue(0,{emitEvent:!1}),this.form.get("dbSlots").setValue(0,{emitEvent:!1})):(this.availDevices=[...this.availDevices,...t.clearedDevices],this.driveGroup.clearDeviceSelection(t.type),this.form.get(t.type+"Slots").setValue(0,{emitEvent:!1}))}submit(){const t=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${t}-${tt.now()}`),this.bsModalService.show(xu,{initialState:{driveGroups:[this.driveGroup.spec]}}).content.submitAction.subscribe(()=>{this.router.navigate(["/osd"])}),this.previewButton.loading=!1}}var Ou=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,zr,Vr)),s["ɵdid"](1,49152,null,0,Gr,[],null,null)],null,null)}function Su(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value should be greater than or equal to 0"]))],null,null)}function Iu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,9,"label",[["class","cd-col-form-label"],["for","walSlots"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["WAL slots"])),(t()(),s["ɵeld"](7,0,null,null,6,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](8,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["How many OSDs per WAL device."])),(t()(),s["ɵeld"](11,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Specify 0 to let Orchestrator backend decide it."])),(t()(),s["ɵeld"](14,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,8,"input",[["class","form-control"],["formControlName","walSlots"],["id","walSlots"],["min","0"],["name","walSlots"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,17)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,17).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,17)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,17)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,18).onTouched()&&a),a}),null,null)),s["ɵdid"](16,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](17,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](18,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](20,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](22,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](23,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Su)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,20,0,"walSlots"),t(e,23,0,"walSlots"),t(e,25,0,n.form.showError("walSlots",s["ɵnov"](e.parent,3),"min"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,15,0,s["ɵnov"](e,22).ngClassUntouched,s["ɵnov"](e,22).ngClassTouched,s["ɵnov"](e,22).ngClassPristine,s["ɵnov"](e,22).ngClassDirty,s["ɵnov"](e,22).ngClassValid,s["ɵnov"](e,22).ngClassInvalid,s["ɵnov"](e,22).ngClassPending,s["ɵnov"](e,23).validClass,s["ɵnov"](e,23).invalidClass)}))}function Nu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value should be greater than or equal to 0"]))],null,null)}function Cu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,9,"label",[["class","cd-col-form-label"],["for","dbSlots"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DB slots"])),(t()(),s["ɵeld"](7,0,null,null,6,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](8,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["How many OSDs per DB device."])),(t()(),s["ɵeld"](11,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Specify 0 to let Orchestrator backend decide it."])),(t()(),s["ɵeld"](14,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,8,"input",[["class","form-control"],["formControlName","dbSlots"],["id","dbSlots"],["min","0"],["name","dbSlots"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,17)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,17).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,17)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,17)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,18).onTouched()&&a),a}),null,null)),s["ɵdid"](16,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](17,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](18,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](20,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](22,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](23,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nu)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,20,0,"dbSlots"),t(e,23,0,"dbSlots"),t(e,25,0,n.form.showError("dbSlots",s["ɵnov"](e.parent,3),"min"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,15,0,s["ɵnov"](e,22).ngClassUntouched,s["ɵnov"](e,22).ngClassTouched,s["ɵnov"](e,22).ngClassPristine,s["ɵnov"](e,22).ngClassDirty,s["ɵnov"](e,22).ngClassValid,s["ɵnov"](e,22).ngClassInvalid,s["ɵnov"](e,22).ngClassPending,s["ɵnov"](e,23).validClass,s["ɵnov"](e,23).invalidClass)}))}function Ru(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](2,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](3,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](5,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](9,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](10,null,["",""]))],(function(t,e){t(e,5,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,"")),t(e,8,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""))}),(function(t,e){t(e,1,1,[s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""),s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,8).validClass,s["ɵnov"](e,8).invalidClass]),t(e,9,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,"")),t(e,10,0,e.context.$implicit.desc)}))}function Au(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,48,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,47,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,41,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,[""," ",""])),s["ɵppd"](10,1),s["ɵppd"](11,1),(t()(),s["ɵeld"](12,0,null,null,29,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,2,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"cd-osd-devices-selection-groups",[["name","Primary"],["type","data"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),vu,cu)),s["ɵdid"](15,638976,[[1,4],["dataDeviceSelectionGroups",4]],0,du,[Rt.b,he.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵeld"](16,0,null,null,10,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Shared devices"])),(t()(),s["ɵeld"](19,0,null,null,1,"cd-osd-devices-selection-groups",[["name","WAL"],["type","wal"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),vu,cu)),s["ɵdid"](20,638976,[[2,4],["walDeviceSelectionGroups",4]],0,du,[Rt.b,he.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵand"](16777216,null,null,1,null,Iu)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](23,0,null,null,1,"cd-osd-devices-selection-groups",[["name","DB"],["type","db"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),vu,cu)),s["ɵdid"](24,638976,[[3,4],["dbDeviceSelectionGroups",4]],0,du,[Rt.b,he.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵand"](16777216,null,null,1,null,Cu)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](27,0,null,null,14,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Configuration"])),(t()(),s["ɵeld"](30,0,null,null,11,"div",[["class","form-group row"],["formGroupName","features"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](31,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](33,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](34,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](37,0,null,0,1,"label",[["class","cd-col-form-label"],["for","features"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Features"])),(t()(),s["ɵeld"](39,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ru)),s["ɵdid"](41,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](42,0,null,null,6,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Es.b,Es.a)),s["ɵdid"](45,114688,[[4,4],["previewButton",4]],0,Ls.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Preview"])),(t()(),s["ɵeld"](47,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](48,49152,null,0,Ps.a,[i.Location,It.b],null,null)],(function(t,e){var n=e.component;t(e,3,0,n.form),t(e,6,0,n.form),t(e,15,0,"data","Primary",n.availDevices,0!==n.availDevices.length),t(e,20,0,"wal","WAL",n.availDevices,0!==s["ɵnov"](e,15).devices.length),t(e,22,0,0!==s["ɵnov"](e,20).devices.length),t(e,24,0,"db","DB",n.availDevices,0!==s["ɵnov"](e,15).devices.length),t(e,26,0,0!==s["ɵnov"](e,24).devices.length),t(e,31,0,"features"),t(e,34,0),t(e,41,0,n.featureList),t(e,45,0,s["ɵnov"](e,3),0===s["ɵnov"](e,15).devices.length)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending);var a=s["ɵunv"](e,9,0,t(e,10,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,9,1,t(e,11,0,s["ɵnov"](e.parent,1),n.resource));t(e,9,0,a,r),t(e,30,0,s["ɵnov"](e,33).ngClassUntouched,s["ɵnov"](e,33).ngClassTouched,s["ɵnov"](e,33).ngClassPristine,s["ɵnov"](e,33).ngClassDirty,s["ɵnov"](e,33).ngClassValid,s["ɵnov"](e,33).ngClassInvalid,s["ɵnov"](e,33).ngClassPending,s["ɵnov"](e,34).hasErrors,s["ɵnov"](e,34).hasSuccess)}))}function ku(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),s["ɵqud"](671088640,1,{dataDeviceSelectionGroups:0}),s["ɵqud"](671088640,2,{walDeviceSelectionGroups:0}),s["ɵqud"](671088640,3,{dbDeviceSelectionGroups:0}),s["ɵqud"](671088640,4,{previewButton:0}),(t()(),s["ɵand"](16777216,null,null,1,null,wu)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Au)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,7,0,!n.hasOrchestrator),t(e,9,0,!n.loading&&n.hasOrchestrator)}),null)}function Eu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-form",[],null,null,null,ku,Ou)),s["ɵdid"](1,114688,null,0,Tu,[It.b,Q.a,he.a,Br,Lt.m,Rt.b],null,null)],(function(t,e){t(e,1,0)}),null)}var Lu=s["ɵccf"]("cd-osd-form",Tu,Eu,{},{},[]),Du=n("iExv");class Pu{constructor(t){this.i18n=t,this.flags={runtime:this.i18n("The value can be updated at runtime."),no_mon_update:this.i18n("Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via 'ceph config\n      set ...'. This option should be configured via ceph.conf or via the\n      command line."),startup:this.i18n("Option takes effect only during daemon startup."),cluster_create:this.i18n("Option only affects cluster creation."),create:this.i18n("Option only affects daemon creation.")}}ngOnChanges(){this.selection&&(this.selection.services=tt.split(this.selection.services,","))}}var Mu=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function qu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": ","",""])),(t()(),s["ɵeld"](2,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,1,0,e.context.$implicit.section,e.context.$implicit.value,e.context.last?"":",")}))}function ju(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""])),s["ɵppd"](4,1)],null,(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](1,"",e.component.flags[e.context.$implicit],""));var n=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent,0),e.context.$implicit));t(e,3,0,n)}))}function Fu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function Gu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,94,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,92,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,90,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,89,"tbody",[],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](9,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(t()(),s["ɵted"](10,null,["",""])),(t()(),s["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](15,null,["",""])),(t()(),s["ɵeld"](16,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Long description"])),(t()(),s["ɵeld"](19,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](20,null,["",""])),(t()(),s["ɵeld"](21,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Current values"])),(t()(),s["ɵeld"](24,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,qu)),s["ɵdid"](26,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](27,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Default"])),(t()(),s["ɵeld"](30,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](31,null,["",""])),(t()(),s["ɵeld"](32,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](33,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemon default"])),(t()(),s["ɵeld"](35,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](36,null,["",""])),(t()(),s["ɵeld"](37,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](38,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Type"])),(t()(),s["ɵeld"](40,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](41,null,["",""])),(t()(),s["ɵeld"](42,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Min"])),(t()(),s["ɵeld"](45,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](46,null,["",""])),(t()(),s["ɵeld"](47,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](48,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Max"])),(t()(),s["ɵeld"](50,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](51,null,["",""])),(t()(),s["ɵeld"](52,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](53,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Flags"])),(t()(),s["ɵeld"](55,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ju)),s["ɵdid"](57,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](58,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Services"])),(t()(),s["ɵeld"](61,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Fu)),s["ɵdid"](63,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](64,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](65,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Source"])),(t()(),s["ɵeld"](67,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](68,null,["",""])),(t()(),s["ɵeld"](69,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](70,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Level"])),(t()(),s["ɵeld"](72,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](73,null,["",""])),(t()(),s["ɵeld"](74,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](75,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Can be updated at runtime (editable)"])),(t()(),s["ɵeld"](77,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](78,null,["",""])),s["ɵppd"](79,1),(t()(),s["ɵeld"](80,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](81,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tags"])),(t()(),s["ɵeld"](83,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](84,null,["",""])),(t()(),s["ɵeld"](85,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](86,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Enum values"])),(t()(),s["ɵeld"](88,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](89,null,["",""])),(t()(),s["ɵeld"](90,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](91,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["See also"])),(t()(),s["ɵeld"](93,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](94,null,["",""]))],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,26,0,n.selection.value),t(e,57,0,n.selection.flags),t(e,63,0,n.selection.services)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,10,0,n.selection.name),t(e,15,0,n.selection.desc),t(e,20,0,n.selection.long_desc),t(e,31,0,n.selection.default),t(e,36,0,n.selection.daemon_default),t(e,41,0,n.selection.type),t(e,46,0,n.selection.min),t(e,51,0,n.selection.max),t(e,68,0,n.selection.source),t(e,73,0,n.selection.level);var a=s["ɵunv"](e,78,0,t(e,79,0,s["ɵnov"](e.parent,1),n.selection.can_update_at_runtime));t(e,78,0,a),t(e,84,0,n.selection.tags),t(e,89,0,n.selection.enum_values),t(e,94,0,n.selection.see_also)}))}function Vu(t){return s["ɵvid"](0,[s["ɵpid"](0,i.UpperCasePipe,[]),s["ɵpid"](0,Du.a,[he.a]),(t()(),s["ɵand"](16777216,null,null,1,null,Gu)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,3,0,e.component.selection)}),null)}class zu extends ls.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.configurationService=e,this.i18n=n,this.actionLabels=a,this.data=[],this.icons=bt.a,this.selection=new Ur.a,this.filters=[{name:this.i18n("Level"),prop:"level",filterOptions:["basic","advanced","dev"],filterInitValue:"basic",filterPredicate:(t,e)=>{let n;return function(t){t[t.basic=0]="basic",t[t.advanced=1]="advanced",t[t.dev=2]="dev"}(n||(n={})),n[t.level]<=n[e]}},{name:this.i18n("Service"),prop:"services",filterOptions:["mon","mgr","osd","mds","common","mds_client","rgw"],filterPredicate:(t,e)=>t.services.includes(e)},{name:this.i18n("Source"),prop:"source",filterOptions:["mon"],filterPredicate:(t,e)=>!!t.hasOwnProperty("source")&&t.source.includes(e)},{name:this.i18n("Modified"),prop:"modified",filterOptions:["yes","no"],filterPredicate:(t,e)=>!("yes"!==e||!t.hasOwnProperty("value"))||"no"===e&&!t.hasOwnProperty("value")}],this.permission=this.authStorageService.getPermissions().configOpt;const r=()=>this.selection.first()&&""+encodeURIComponent(this.selection.first().name);this.tableActions=[{permission:"update",icon:bt.a.edit,routerLink:()=>"/configuration/edit/"+r(),name:this.actionLabels.EDIT,disable:()=>!this.isEditable(this.selection)}]}ngOnInit(){this.columns=[{canAutoResize:!0,prop:"name",name:this.i18n("Name")},{prop:"desc",name:this.i18n("Description"),cellClass:"wrap"},{prop:"value",name:this.i18n("Current value"),cellClass:"wrap",cellTemplate:this.confValTpl},{prop:"default",name:this.i18n("Default"),cellClass:"wrap"},{prop:"can_update_at_runtime",name:this.i18n("Editable"),cellTransformation:Hr.a.checkIcon,flexGrow:.4,cellClass:"text-center"}]}updateSelection(t){this.selection=t}getConfigurationList(t){this.configurationService.getConfigData().subscribe(t=>{this.data=t},()=>{t.error()})}isEditable(t){return 1===t.selected.length&&t.selected[0].can_update_at_runtime}}var Bu=s["ɵcrt"]({encapsulation:0,styles:[[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}  datatable-body-cell.wrap{word-break:break-all}"]],data:{}});function Yu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": ","",""])),(t()(),s["ɵeld"](2,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,1,0,e.context.$implicit.section,e.context.$implicit.value,e.context.last?"":",")}))}function Hu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Yu)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.parent.context.value)}),null)}function Uu(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Hu)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Wu(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{confValTpl:0}),s["ɵqud"](671088640,2,{confFlagTpl:0}),(t()(),s["ɵeld"](2,0,null,null,5,"cd-table",[["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getConfigurationList(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](3,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"],extraFilterableColumns:[4,"extraFilterableColumns"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](5,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](6,0,null,3,1,"cd-configuration-details",[["cdTableDetail",""]],null,null,null,Vu,Mu)),s["ɵdid"](7,573440,null,0,Pu,[he.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[1,2],["confValTpl",2]],null,0,null,Uu))],(function(t,e){var n=e.component;t(e,3,0,n.data,n.columns,!0,"single",n.filters),t(e,5,0,n.permission,n.selection,n.tableActions),t(e,7,0,n.expandedRow)}),null)}function Ku(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-configuration",[],null,null,null,Wu,Bu)),s["ɵdid"](1,114688,null,0,zu,[Q.a,jo.a,he.a,It.b],null,null)],(function(t,e){t(e,1,0)}),null)}var $u=s["ɵccf"]("cd-configuration",zu,Ku,{},{},[]);class Ju{constructor(){this.value=[]}}class Zu{constructor(t,e,n,a,r){this.route=t,this.router=e,this.configService=n,this.notificationService=a,this.i18n=r,this.availSections=["global","mon","mgr","osd","mds","client"],this.createForm()}createForm(){const t={name:new $.i({value:null}),desc:new $.i({value:null}),long_desc:new $.i({value:null}),values:new $.k({}),default:new $.i({value:null}),daemon_default:new $.i({value:null}),services:new $.i([])};this.availSections.forEach(e=>{t.values.addControl(e,new $.i(null))}),this.configForm=new qs.a(t)}ngOnInit(){this.route.params.subscribe(t=>{this.configService.get(t.name).subscribe(t=>{this.setResponse(t)})})}getValidators(t){const e=Fo.getTypeValidators(t);if(e)return this.patternHelpText=e.patternHelpText,"max"in e&&""!==e.max&&(this.maxValue=e.max),"min"in e&&""!==e.min&&(this.minValue=e.min),e.validators}getStep(t,e){return Fo.getTypeStep(t,e)}setResponse(t){this.response=t;const e=this.getValidators(t);this.configForm.get("name").setValue(t.name),this.configForm.get("desc").setValue(t.desc),this.configForm.get("long_desc").setValue(t.long_desc),this.configForm.get("default").setValue(t.default),this.configForm.get("daemon_default").setValue(t.daemon_default),this.configForm.get("services").setValue(t.services),this.response.value&&this.response.value.forEach(t=>{let e=null;e="true"===t.value||"false"!==t.value&&t.value,this.configForm.get("values").get(t.section).setValue(e)}),this.availSections.forEach(t=>{this.configForm.get("values").get(t).setValidators(e)});const n=Fo.getType(t.type);this.type=n.name,this.inputType=n.inputType,this.humanReadableType=n.humanReadable}createRequest(){const t=[];if(this.availSections.forEach(e=>{const n=this.configForm.getValue(e);null!==n&&""!==n&&t.push({section:e,value:n})}),!tt.isEqual(this.response.value,t)){const e=new Ju;return e.name=this.configForm.getValue("name"),e.value=t,e}return null}submit(){const t=this.createRequest();t&&this.configService.create(t).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n("Updated config option {{name}}",{name:t.name})),this.router.navigate(["/configuration"])},()=>{this.configForm.setErrors({cdSubmitButton:!0})}),this.router.navigate(["/configuration"])}}var Qu=s["ɵcrt"]({encapsulation:0,styles:[[".form-component-badge[_ngcontent-%COMP%]{height:34px;display:block}.form-component-badge[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{margin-top:7px}.resize-vertical[_ngcontent-%COMP%]{resize:vertical}"]],data:{}});function Xu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"textarea",[["class","form-control resize-vertical"],["formControlName","desc"],["id","desc"],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "]))],(function(t,e){t(e,1,0),t(e,10,0,"desc"),t(e,13,0,"desc")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function tl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Long description"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"textarea",[["class","form-control resize-vertical"],["formControlName","long_desc"],["id","long_desc"],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "]))],(function(t,e){t(e,1,0),t(e,10,0,"long_desc"),t(e,13,0,"long_desc")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function el(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Default"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","default"],["id","default"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,9)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,9).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,9)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,9)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](11,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](13,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,11,0,"default"),t(e,14,0,"default")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,13).ngClassUntouched,s["ɵnov"](e,13).ngClassTouched,s["ɵnov"](e,13).ngClassPristine,s["ɵnov"](e,13).ngClassDirty,s["ɵnov"](e,13).ngClassValid,s["ɵnov"](e,13).ngClassInvalid,s["ɵnov"](e,13).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function nl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemon default"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"input",[["class","form-control"],["formControlName","daemon_default"],["id","daemon_default"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,9)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,9).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,9)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,9)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](11,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](13,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,11,0,"daemon_default"),t(e,14,0,"daemon_default")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,13).ngClassUntouched,s["ɵnov"](e,13).ngClassTouched,s["ɵnov"](e,13).ngClassPristine,s["ɵnov"](e,13).ngClassDirty,s["ɵnov"](e,13).ngClassValid,s["ɵnov"](e,13).ngClassInvalid,s["ɵnov"](e,13).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function al(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[["class","form-component-badge"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function rl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,11,{FormControlNames:1}),s["ɵqud"](603979776,12,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Services"])),(t()(),s["ɵeld"](6,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,al)),s["ɵdid"](8,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,8,0,n.configForm.getValue("services"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess)}))}function il(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,13,{FormControlNames:1}),s["ɵqud"](603979776,14,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,0,20,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,19,"select",[["class","form-control custom-select"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,9).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,9).onTouched()&&a),a}),null,null)),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](11,671744,[[13,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](13,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](15,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](16,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](17,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["-- Default --"])),(t()(),s["ɵeld"](19,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](20,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](21,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["true"])),(t()(),s["ɵeld"](23,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](24,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](25,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["false"]))],(function(t,e){t(e,1,0),t(e,11,0,e.parent.context.$implicit),t(e,14,0,e.parent.context.$implicit),t(e,16,0,null),t(e,17,0,null),t(e,20,0,!0),t(e,21,0,!0),t(e,24,0,!1),t(e,25,0,!1)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit),t(e,5,0,e.parent.context.$implicit),t(e,7,0,s["ɵnov"](e,13).ngClassUntouched,s["ɵnov"](e,13).ngClassTouched,s["ɵnov"](e,13).ngClassPristine,s["ɵnov"](e,13).ngClassDirty,s["ɵnov"](e,13).ngClassValid,s["ɵnov"](e,13).ngClassInvalid,s["ɵnov"](e,13).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function sl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.patternHelpText)}))}function ol(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.patternHelpText)}))}function ul(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.component.maxValue)}))}function ll(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.component.minValue)}))}function dl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,15,{FormControlNames:1}),s["ɵqud"](603979776,16,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"placeholder",0],[8,"step",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,9)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,9).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,9)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,9)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](11,671744,[[15,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](13,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sl)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ol)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ul)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ll)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,11,0,e.parent.context.$implicit),t(e,14,0,e.parent.context.$implicit),t(e,16,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"pattern")),t(e,18,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"invalidUuid")),t(e,20,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"max")),t(e,22,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit),t(e,5,0,e.parent.context.$implicit),t(e,7,1,[n.inputType,e.parent.context.$implicit,n.humanReadableType,n.getStep(n.type,n.configForm.getValue(e.parent.context.$implicit)),s["ɵnov"](e,13).ngClassUntouched,s["ɵnov"](e,13).ngClassTouched,s["ɵnov"](e,13).ngClassPristine,s["ɵnov"](e,13).ngClassDirty,s["ɵnov"](e,13).ngClassValid,s["ɵnov"](e,13).ngClassInvalid,s["ɵnov"](e,13).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass])}))}function cl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,il)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dl)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,"bool"===n.type),t(e,4,0,"bool"!==n.type)}),null)}function fl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,53,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,52,"form",[["name","configForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,46,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Edit"])),(t()(),s["ɵted"](11,null,[" "," "])),(t()(),s["ɵeld"](12,0,null,null,33,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](14,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](17,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](19,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,7,"input",[["class","form-control"],["formControlName","name"],["id","name"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,22)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,22).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,22)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,22)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](22,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](24,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](26,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](27,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xu)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tl)),s["ɵdid"](31,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,el)),s["ɵdid"](33,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,nl)),s["ɵdid"](35,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rl)),s["ɵdid"](37,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](38,0,null,null,7,"div",[["formGroupName","values"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](39,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](41,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](42,0,null,null,1,"h3",[["class","cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Values"])),(t()(),s["ɵand"](16777216,null,null,1,null,cl)),s["ɵdid"](45,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](46,0,null,null,7,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](47,0,null,null,6,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](48,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Es.b,Es.a)),s["ɵdid"](49,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](50,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Save"])),(t()(),s["ɵeld"](52,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](53,49152,null,0,Ps.a,[i.Location,It.b],null,null)],(function(t,e){var n=e.component;t(e,3,0,n.configForm),t(e,6,0,n.configForm),t(e,14,0),t(e,24,0,"name"),t(e,27,0,"name"),t(e,29,0,n.configForm.getValue("desc")),t(e,31,0,n.configForm.getValue("long_desc")),t(e,33,0,""!==n.configForm.getValue("default")),t(e,35,0,""!==n.configForm.getValue("daemon_default")),t(e,37,0,n.configForm.getValue("services").length>0),t(e,39,0,"values"),t(e,45,0,n.availSections),t(e,49,0,s["ɵnov"](e,3))}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,11,0,n.configForm.getValue("name")),t(e,13,0,s["ɵnov"](e,14).hasErrors,s["ɵnov"](e,14).hasSuccess),t(e,20,0,s["ɵnov"](e,26).ngClassUntouched,s["ɵnov"](e,26).ngClassTouched,s["ɵnov"](e,26).ngClassPristine,s["ɵnov"](e,26).ngClassDirty,s["ɵnov"](e,26).ngClassValid,s["ɵnov"](e,26).ngClassInvalid,s["ɵnov"](e,26).ngClassPending,s["ɵnov"](e,27).validClass,s["ɵnov"](e,27).invalidClass),t(e,38,0,s["ɵnov"](e,41).ngClassUntouched,s["ɵnov"](e,41).ngClassTouched,s["ɵnov"](e,41).ngClassPristine,s["ɵnov"](e,41).ngClassDirty,s["ɵnov"](e,41).ngClassValid,s["ɵnov"](e,41).ngClassInvalid,s["ɵnov"](e,41).ngClassPending)}))}function hl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-configuration-form",[],null,null,null,fl,Qu)),s["ɵdid"](1,114688,null,0,Zu,[Lt.a,Lt.m,jo.a,mt.a,he.a],null,null)],(function(t,e){t(e,1,0)}),null)}var gl=s["ɵccf"]("cd-configuration-form",Zu,hl,{},{},[]),pl=n("LOMR"),bl=n("MP8s"),ml=n("fxL3"),yl=n("gk6K"),vl=n("mrSG"),xl=n("yYhs");class _l{constructor(t){this.healthService=t,this.icons=bt.a,this.loadingIndicator=!0,this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}},this.metadataKeyMap={}}ngOnInit(){this.healthService.getFullHealth().subscribe(t=>{this.loadingIndicator=!1,this.nodes=this.abstractTreeData(t)})}abstractTreeData(t){const e=t.osd_map.tree.nodes||[],n={};if(0===e.length)return[{name:"No nodes!"}];const a=[];return e.reverse().forEach(t=>{"root"===t.type&&a.push(t.id),n[t.id]=this.generateTreeLeaf(t,n)}),a.map(t=>n[t])}generateTreeLeaf(t,e){const n=t.id;this.metadataKeyMap[n]=t;const a=[],r={name:t.name+" ("+t.type+")",status:t.status,cdId:n,type:t.type};return t.children&&(t.children.sort().forEach(t=>{a.push(e[t])}),r.children=a),r}onNodeSelected(t,e){if(xl.a.ACTIVATE(t,e,!0),void 0!==e.data.cdId){const t=this.metadataKeyMap[e.data.cdId],{name:n,type:a}=t,r=vl.__rest(t,["name","type","status"]);this.metadata=r,this.metadataTitle=n+" ("+a+")"}else delete this.metadata,delete this.metadataTitle}onUpdateData(){this.tree.treeModel.expandAll()}}var Tl=s["ɵcrt"]({encapsulation:0,styles:[["tree-root tree-viewport div:first-child{height:unset!important}"]],data:{}});function Ol(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](3,3)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.large,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function wl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[["class","badge"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](3,2),s["ɵpad"](4,3),s["ɵpod"](5,{"badge-success":0,"badge-danger":1}),(t()(),s["ɵted"](6,null,[" "," "]))],(function(t,e){var n=t(e,5,0,t(e,3,0,"in","up").includes(e.parent.context.$implicit.data.status),t(e,4,0,"down","out","destroyed").includes(e.parent.context.$implicit.data.status));t(e,2,0,"badge",n)}),(function(t,e){t(e,6,0,e.parent.context.$implicit.data.status)}))}function Sl(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,wl)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "])),(t()(),s["ɵeld"](4,0,null,null,3,"span",[["class","node-name"]],[[8,"innerHTML",1]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{"type-osd":0})],(function(t,e){t(e,1,0,e.context.$implicit.data.status);var n=t(e,7,0,"osd"===e.context.$implicit.data.type);t(e,6,0,"node-name",n)}),(function(t,e){t(e,4,0,e.context.$implicit.data.name)}))}function Il(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[["class","col-sm-6 col-lg-6 metadata"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),(t()(),s["ɵeld"](3,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](4,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},null)],(function(t,e){t(e,4,0,e.component.metadata)}),(function(t,e){t(e,2,0,e.component.metadataTitle)}))}function Nl(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tree:0}),(t()(),s["ɵeld"](1,0,null,null,19,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,18,"div",[["class","col-sm-12 col-lg-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,17,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CRUSH map viewer"])),(t()(),s["ɵeld"](6,0,null,null,14,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,10,"div",[["class","col-sm-6 col-lg-6"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ol)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](11,0,null,null,7,"tree-root",[],null,[[null,"updateData"],["body","keydown"],["body","mousedown"]],(function(t,e,n){var a=!0,r=t.component;return"body:keydown"===e&&(a=!1!==s["ɵnov"](t,13).onKeydown(n)&&a),"body:mousedown"===e&&(a=!1!==s["ɵnov"](t,13).onMousedown(n)&&a),"updateData"===e&&(a=!1!==r.onUpdateData()&&a),a}),pl.b,pl.a)),s["ɵprd"](131584,null,bl.a,bl.a,[]),s["ɵdid"](13,573440,[[1,4],["tree",4]],4,ml.a,[bl.a,yl.a],{nodes:[0,"nodes"],options:[1,"options"]},{updateData:"updateData"}),s["ɵqud"](603979776,2,{loadingTemplate:0}),s["ɵqud"](603979776,3,{treeNodeTemplate:0}),s["ɵqud"](603979776,4,{treeNodeWrapperTemplate:0}),s["ɵqud"](603979776,5,{treeNodeFullTemplate:0}),(t()(),s["ɵand"](0,[[3,2],["treeNodeTemplate",2]],null,0,null,Sl)),(t()(),s["ɵand"](16777216,null,null,1,null,Il)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,10,0,n.loadingIndicator),t(e,13,0,n.nodes,n.treeOptions),t(e,20,0,n.metadata)}),null)}function Cl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-crushmap",[],null,null,null,Nl,Tl)),s["ɵdid"](1,114688,null,0,_l,[Na],null,null)],(function(t,e){t(e,1,0)}),null)}var Rl=s["ɵccf"]("cd-crushmap",_l,Cl,{},{},[]),Al=n("AfCQ");let kl=(()=>{class t{writeValue(e){return{type:t.WRITE_VALUE,payload:e}}changeHours(e){return{type:t.CHANGE_HOURS,payload:e}}changeMinutes(e){return{type:t.CHANGE_MINUTES,payload:e}}changeSeconds(e){return{type:t.CHANGE_SECONDS,payload:e}}setTime(e){return{type:t.SET_TIME_UNIT,payload:e}}updateControls(e){return{type:t.UPDATE_CONTROLS,payload:e}}}return t.WRITE_VALUE="[timepicker] write value from ng model",t.CHANGE_HOURS="[timepicker] change hours",t.CHANGE_MINUTES="[timepicker] change minutes",t.CHANGE_SECONDS="[timepicker] change seconds",t.SET_TIME_UNIT="[timepicker] set time unit",t.UPDATE_CONTROLS="[timepicker] update controls",t})();function El(t){return!!t&&!(t instanceof Date&&isNaN(t.getHours()))&&("string"!=typeof t||El(new Date(t)))}function Ll(t,e){return!(t.min&&e<t.min||t.max&&e>t.max)}function Dl(t){return"number"==typeof t?t:parseInt(t,10)}function Pl(t,e=!1){const n=Dl(t);return isNaN(n)||n<0||n>(e?12:24)?NaN:n}function Ml(t){const e=Dl(t);return isNaN(e)||e<0||e>60?NaN:e}function ql(t){const e=Dl(t);return isNaN(e)||e<0||e>60?NaN:e}function jl(t){return"string"==typeof t?new Date(t):t}function Fl(t,e){if(!t)return Fl(Vl(new Date,0,0,0),e);let n=t.getHours(),a=t.getMinutes(),r=t.getSeconds();return e.hour&&(n+=Dl(e.hour)),e.minute&&(a+=Dl(e.minute)),e.seconds&&(r+=Dl(e.seconds)),Vl(t,n,a,r)}function Gl(t,e){let n=Pl(e.hour);const a=Ml(e.minute),r=ql(e.seconds)||0;return e.isPM&&12!==n&&(n+=12),t?isNaN(n)||isNaN(a)?t:Vl(t,n,a,r):isNaN(n)||isNaN(a)?t:Vl(new Date,n,a,r)}function Vl(t,e,n,a){const r=new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,n,a,t.getMilliseconds());return r.setFullYear(t.getFullYear()),r.setMonth(t.getMonth()),r.setDate(t.getDate()),r}function zl(t){const e=t.toString();return e.length>1?e:"0"+e}function Bl(t,e){return!isNaN(Pl(t,e))}function Yl(t){return!isNaN(Ml(t))}function Hl(t){return!isNaN(ql(t))}function Ul(t,e="0",n="0",a){return Bl(t,a)&&Yl(e)&&Hl(n)}function Wl(t,e){if(t.readonlyInput||t.disabled)return!1;if(e){if("wheel"===e.source&&!t.mousewheel)return!1;if("key"===e.source&&!t.arrowkeys)return!1}return!0}function Kl(t){const{hourStep:e,minuteStep:n,secondsStep:a,readonlyInput:r,disabled:i,mousewheel:s,arrowkeys:o,showSpinners:u,showMeridian:l,showSeconds:d,meridians:c,min:f,max:h}=t;return{hourStep:e,minuteStep:n,secondsStep:a,readonlyInput:r,disabled:i,mousewheel:s,arrowkeys:o,showSpinners:u,showMeridian:l,showSeconds:d,meridians:c,min:f,max:h}}class $l{constructor(){this.hourStep=1,this.minuteStep=5,this.secondsStep=10,this.showMeridian=!0,this.meridians=["AM","PM"],this.readonlyInput=!1,this.disabled=!1,this.mousewheel=!0,this.arrowkeys=!0,this.showSpinners=!0,this.showSeconds=!1,this.showMinutes=!0,this.hoursPlaceholder="HH",this.minutesPlaceholder="MM",this.secondsPlaceholder="SS",this.ariaLabelHours="hours",this.ariaLabelMinutes="minutes",this.ariaLabelSeconds="seconds"}}const Jl={value:null,config:new $l,controls:{canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0}};function Zl(t=Jl,e){switch(e.type){case kl.WRITE_VALUE:return Object.assign({},t,{value:e.payload});case kl.CHANGE_HOURS:{if(!Wl(t.config,e.payload)||(a=t.controls,!(n=e.payload).step||n.step>0&&!a.canIncrementHours||n.step<0&&!a.canDecrementHours))return t;const r=Fl(t.value,{hour:e.payload.step});return!t.config.max&&!t.config.min||Ll(t.config,r)?Object.assign({},t,{value:r}):t}case kl.CHANGE_MINUTES:{if(!Wl(t.config,e.payload)||!function(t,e){return!(!t.step||t.step>0&&!e.canIncrementMinutes||t.step<0&&!e.canDecrementMinutes)}(e.payload,t.controls))return t;const n=Fl(t.value,{minute:e.payload.step});return!t.config.max&&!t.config.min||Ll(t.config,n)?Object.assign({},t,{value:n}):t}case kl.CHANGE_SECONDS:{if(!Wl(t.config,e.payload)||!function(t,e){return!(!t.step||t.step>0&&!e.canIncrementSeconds||t.step<0&&!e.canDecrementSeconds)}(e.payload,t.controls))return t;const n=Fl(t.value,{seconds:e.payload.step});return!t.config.max&&!t.config.min||Ll(t.config,n)?Object.assign({},t,{value:n}):t}case kl.SET_TIME_UNIT:{if(!Wl(t.config))return t;const n=Gl(t.value,e.payload);return Object.assign({},t,{value:n})}case kl.UPDATE_CONTROLS:{const n=function(t,e){const{min:n,max:a,hourStep:r,minuteStep:i,secondsStep:s,showSeconds:o}=e,u={canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0};if(!t)return u;if(a){const e=Fl(t,{hour:r});if(u.canIncrementHours=a>e,!u.canIncrementHours){const e=Fl(t,{minute:i});u.canIncrementMinutes=o?a>e:a>=e}if(!u.canIncrementMinutes){const e=Fl(t,{seconds:s});u.canIncrementSeconds=a>=e}t.getHours()<12&&(u.canToggleMeridian=Fl(t,{hour:12})<a)}if(n){const e=Fl(t,{hour:-r});if(u.canDecrementHours=n<e,!u.canDecrementHours){const e=Fl(t,{minute:-i});u.canDecrementMinutes=o?n<e:n<=e}if(!u.canDecrementMinutes){const e=Fl(t,{seconds:-s});u.canDecrementSeconds=n<=e}t.getHours()>=12&&(u.canToggleMeridian=Fl(t,{hour:-12})>n)}return u}(t.value,e.payload),a={value:t.value,config:e.payload,controls:n};return t.config.showMeridian!==a.config.showMeridian&&t.value&&(a.value=new Date(t.value)),Object.assign({},t,a)}default:return t}var n,a}class Ql extends Al.b{constructor(){const t=new Ca.a({type:"[mini-ngrx] dispatcher init"});super(t,Zl,new Al.a(Jl,t,Zl))}}class Xl{constructor(t,e,n,a){this._cd=e,this._store=n,this._timepickerActions=a,this.isValid=new s.EventEmitter,this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1,this.onChange=Function.prototype,this.onTouched=Function.prototype,Object.assign(this,t),this.timepickerSub=n.select(t=>t.value).subscribe(t=>{this._renderTime(t),this.onChange(t),this._store.dispatch(this._timepickerActions.updateControls(Kl(this)))}),n.select(t=>t.controls).subscribe(t=>{this.isValid.emit(Ul(this.hours,this.minutes,this.seconds,this.isPM())),Object.assign(this,t),e.markForCheck()})}get isSpinnersVisible(){return this.showSpinners&&!this.readonlyInput}get isEditable(){return!(this.readonlyInput||this.disabled)}resetValidation(){this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1}isPM(){return this.showMeridian&&this.meridian===this.meridians[1]}prevDef(t){t.preventDefault()}wheelSign(t){return-1*Math.sign(t.deltaY)}ngOnChanges(t){this._store.dispatch(this._timepickerActions.updateControls(Kl(this)))}changeHours(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeHours({step:t,source:e}))}changeMinutes(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeMinutes({step:t,source:e}))}changeSeconds(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeSeconds({step:t,source:e}))}updateHours(t){if(this.resetValidation(),this.hours=t,!Bl(this.hours,this.isPM())||!this.isValidLimit())return this.invalidHours=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}updateMinutes(t){if(this.resetValidation(),this.minutes=t,!Yl(this.minutes)||!this.isValidLimit())return this.invalidMinutes=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}updateSeconds(t){if(this.resetValidation(),this.seconds=t,!Hl(this.seconds)||!this.isValidLimit())return this.invalidSeconds=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}isValidLimit(){return function(t,e,n){const a=Gl(new Date,t);return!(e&&a>e||n&&a<n)}({hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()},this.max,this.min)}_updateTime(){if(!Ul(this.hours,this.showMinutes?this.minutes:void 0,this.showSeconds?this.seconds:void 0,this.isPM()))return this.isValid.emit(!1),void this.onChange(null);this._store.dispatch(this._timepickerActions.setTime({hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()}))}toggleMeridian(){this.showMeridian&&this.isEditable&&this._store.dispatch(this._timepickerActions.changeHours({step:12,source:""}))}writeValue(t){El(t)?this._store.dispatch(this._timepickerActions.writeValue(jl(t))):null==t&&this._store.dispatch(this._timepickerActions.writeValue(null))}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this.disabled=t,this._cd.markForCheck()}ngOnDestroy(){this.timepickerSub.unsubscribe()}_renderTime(t){if(!El(t))return this.hours="",this.minutes="",this.seconds="",void(this.meridian=this.meridians[0]);const e=jl(t);let n=e.getHours();this.showMeridian&&(this.meridian=this.meridians[n>=12?1:0],n%=12,0===n&&(n=12)),this.hours=zl(n),this.minutes=zl(e.getMinutes()),this.seconds=zl(e.getUTCSeconds())}}class td{static forRoot(){return{ngModule:td,providers:[$l,kl,Ql]}}}var ed=s["ɵcrt"]({encapsulation:2,styles:["\n    .bs-chevron {\n      border-style: solid;\n      display: block;\n      width: 9px;\n      height: 9px;\n      position: relative;\n      border-width: 3px 0px 0 3px;\n    }\n\n    .bs-chevron-up {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg);\n      top: 2px;\n    }\n\n    .bs-chevron-down {\n      -webkit-transform: rotate(-135deg);\n      transform: rotate(-135deg);\n      top: -2px;\n    }\n\n    .bs-timepicker-field {\n      width: 50px;\n      padding: .375rem .55rem;\n    }\n  "],data:{}});function nd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function ad(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeMinutes(r.minuteStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canIncrementMinutes||!n.isEditable)}))}function rd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "]))],null,null)}function id(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeSeconds(r.secondsStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canIncrementSeconds||!n.isEditable)}))}function sd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function od(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"td",[],null,null,null,null,null))],null,null)}function ud(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" : "]))],null,null)}function ld(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeMinutes(r.minuteStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeMinutes(r.minuteStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeMinutes(0-r.minuteStep,"key")&&a),"change"===e&&(a=!1!==r.updateMinutes(n.target.value)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.invalidMinutes),t(e,1,0,n.invalidMinutes,n.minutesPlaceholder,n.readonlyInput,n.disabled,n.minutes,n.labelMinutes)}))}function dd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" : "]))],null,null)}function cd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeSeconds(r.secondsStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeSeconds(r.secondsStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeSeconds(0-r.secondsStep,"key")&&a),"change"===e&&(a=!1!==r.updateSeconds(n.target.value)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.invalidSeconds),t(e,1,0,n.invalidSeconds,n.secondsPlaceholder,n.readonlyInput,n.disabled,n.seconds,n.labelSeconds)}))}function fd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function hd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-default text-center"],["type","button"]],[[8,"disabled",0],[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleMeridian()&&a),a}),null,null)),(t()(),s["ɵted"](2,null,[""," "]))],null,(function(t,e){var n=e.component;t(e,1,0,!n.isEditable||!n.canToggleMeridian,!n.isEditable||!n.canToggleMeridian),t(e,2,0,n.meridian)}))}function gd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function pd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeMinutes(0-r.minuteStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canDecrementMinutes||!n.isEditable)}))}function bd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "]))],null,null)}function md(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeSeconds(0-r.secondsStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canDecrementSeconds||!n.isEditable)}))}function yd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function vd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"td",[],null,null,null,null,null))],null,null)}function xd(t){return s["ɵvid"](2,[(t()(),s["ɵeld"](0,0,null,null,48,"table",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,47,"tbody",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,15,"tr",[["class","text-center"]],[[8,"hidden",0]],null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeHours(r.hourStep)&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,nd)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ad)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rd)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,id)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sd)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,od)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,14,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeHours(r.hourStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeHours(r.hourStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeHours(0-r.hourStep,"key")&&a),"change"===e&&(a=!1!==r.updateHours(n.target.value)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ud)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ld)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dd)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cd)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fd)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hd)),s["ɵdid"](32,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](33,0,null,null,15,"tr",[["class","text-center"]],[[8,"hidden",0]],null,null,null,null)),(t()(),s["ɵeld"](34,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](35,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeHours(0-r.hourStep)&&a),a}),null,null)),(t()(),s["ɵeld"](36,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,gd)),s["ɵdid"](38,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,pd)),s["ɵdid"](40,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,bd)),s["ɵdid"](42,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,md)),s["ɵdid"](44,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yd)),s["ɵdid"](46,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vd)),s["ɵdid"](48,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,7,0,n.showMinutes),t(e,9,0,n.showMinutes),t(e,11,0,n.showSeconds),t(e,13,0,n.showSeconds),t(e,15,0,n.showMeridian),t(e,17,0,n.showMeridian),t(e,22,0,n.showMinutes),t(e,24,0,n.showMinutes),t(e,26,0,n.showSeconds),t(e,28,0,n.showSeconds),t(e,30,0,n.showMeridian),t(e,32,0,n.showMeridian),t(e,38,0,n.showMinutes),t(e,40,0,n.showMinutes),t(e,42,0,n.showSeconds),t(e,44,0,n.showSeconds),t(e,46,0,n.showMeridian),t(e,48,0,n.showMeridian)}),(function(t,e){var n=e.component;t(e,2,0,!n.showSpinners),t(e,4,0,!n.canIncrementHours||!n.isEditable),t(e,19,0,n.invalidHours),t(e,20,0,n.invalidHours,n.hoursPlaceholder,n.readonlyInput,n.disabled,n.hours,n.labelHours),t(e,33,0,!n.showSpinners),t(e,35,0,!n.canDecrementHours||!n.isEditable)}))}var _d=n("E2fk");let Td=(()=>{class t{constructor(t){this.http=t}getLogs(){return this.http.get("api/logs/all")}validateDashboardUrl(t){return this.http.get("api/grafana/validation/"+t)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();class Od{constructor(t,e,n){this.logsService=t,this.datePipe=e,this.ngZone=n,this.icons=bt.a,this.bsConfig={dateInputFormat:"YYYY-MM-DD",containerClass:"theme-default"},this.prioritys=[{name:"Info",value:"[INF]"},{name:"Warning",value:"[WRN]"},{name:"Error",value:"[ERR]"},{name:"All",value:"All"}],this.priority="All",this.search="",this.startTime=new Date,this.endTime=new Date,this.startTime.setHours(0,0),this.endTime.setHours(23,59)}ngOnInit(){this.getInfo(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.getInfo()})},5e3)})}ngOnDestroy(){clearInterval(this.interval)}getInfo(){this.logsService.getLogs().subscribe(t=>{this.contentData=t,this.filterLogs()})}abstractfilters(){const t=this.priority,e=this.search.toLowerCase().replace(/,/g,"");let n;if(this.selectedDate){const t=this.selectedDate.getMonth()+1,e=this.selectedDate.getDate();n=`${this.selectedDate.getFullYear().toString()}-${t<=9?"0"+t:""+t}-${e<=9?"0"+e:""+e}`}else n="";return{priority:t,key:e,yearMonthDay:n,sTime:60*(this.startTime?this.startTime.getHours():0)+(this.startTime?this.startTime.getMinutes():0),eTime:60*(this.endTime?this.endTime.getHours():23)+(this.endTime?this.endTime.getMinutes():59)}}filterExecutor(t,e){return t.filter(t=>{const n=this.datePipe.transform(t.stamp,"mediumTime"),a=parseInt(n.split(":")[0],10),r=parseInt(n.split(":")[1],10);let i,s,o;return i="All"===e.priority?t.priority:e.priority,s=e.yearMonthDay?e.yearMonthDay:t.stamp,o=60*a+r,t.priority===i&&-1!==t.message.toLowerCase().indexOf(e.key)&&-1!==t.stamp.indexOf(s)&&o>=e.sTime&&o<=e.eTime})}filterLogs(){const t=this.abstractfilters();this.clog=this.filterExecutor(this.contentData.clog,t),this.audit_log=this.filterExecutor(this.contentData.audit_log,t)}clearSearchKey(){this.search="",this.filterLogs()}clearDate(){this.selectedDate=null,this.filterLogs()}}var wd=s["ɵcrt"]({encapsulation:0,styles:[["p[_ngcontent-%COMP%]{font-family:monospace}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{display:flex}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.card[_ngcontent-%COMP%]   .timestamp[_ngcontent-%COMP%]{font-weight:700;flex-shrink:0}.card[_ngcontent-%COMP%]   .priority[_ngcontent-%COMP%]{margin-left:.5rem}.card[_ngcontent-%COMP%]   .message[_ngcontent-%COMP%]{margin-left:1rem}.card[_ngcontent-%COMP%]   .err[_ngcontent-%COMP%]{color:#a94442}.card[_ngcontent-%COMP%]   .warn[_ngcontent-%COMP%]{color:#ffc200}.card[_ngcontent-%COMP%]   .info[_ngcontent-%COMP%]{color:#2b99a8}  timepicker table tbody tr td input.bs-timepicker-field{width:3.5rem!important;font-size:1rem;padding:4px 6px}.middle[_ngcontent-%COMP%]{padding-top:7px}"]],data:{}});function Sd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Id(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[["class","timestamp"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),s["ɵppd"](3,1),(t()(),s["ɵeld"](4,0,null,null,2,"span",[],[[8,"className",0]],null,null,null,null)),s["ɵppd"](5,1),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,1,"span",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""]))],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.stamp));t(e,2,0,n);var a=s["ɵinlineInterpolate"](1,"priority ",s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent,1),e.context.$implicit.priority)),"");t(e,4,0,a),t(e,6,0,e.context.$implicit.priority),t(e,8,0,e.context.$implicit.message)}))}function Nd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["No entries found"]))],null,null)}function Cd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","card bg-light mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Id)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nd)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.clog),t(e,5,0,0===n.contentData.clog.length)}),null)}function Rd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[["class","timestamp"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),s["ɵppd"](3,1),(t()(),s["ɵeld"](4,0,null,null,2,"span",[],[[8,"className",0]],null,null,null,null)),s["ɵppd"](5,1),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,1,"span",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""]))],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.stamp));t(e,2,0,n);var a=s["ɵinlineInterpolate"](1,"priority ",s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent,1),e.context.$implicit.priority)),"");t(e,4,0,a),t(e,6,0,e.context.$implicit.priority),t(e,8,0,e.context.$implicit.message)}))}function Ad(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["No entries found"]))],null,null)}function kd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","card bg-light mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Rd)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ad)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.audit_log),t(e,5,0,0===n.contentData.audit_log.length)}),null)}function Ed(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"div",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Sd)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](3,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](4,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](5,0,null,0,3,"tab",[["heading","Cluster Logs"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](6,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cd)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,0,3,"tab",[["heading","Audit Logs"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](10,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,kd)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,s["ɵnov"](e.parent,4)),t(e,6,0,"Cluster Logs"),t(e,8,0,n.clog),t(e,10,0,"Audit Logs"),t(e,12,0,n.audit_log)}),(function(t,e){t(e,3,0,s["ɵnov"](e,4).clazz),t(e,5,0,s["ɵnov"](e,6).id,s["ɵnov"](e,6).active,s["ɵnov"](e,6).addClass,s["ɵnov"](e,6).role,s["ɵnov"](e,6).ariaLabelledby),t(e,9,0,s["ɵnov"](e,10).id,s["ɵnov"](e,10).active,s["ɵnov"](e,10).addClass,s["ɵnov"](e,10).role,s["ɵnov"](e,10).ariaLabelledby)}))}function Ld(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function Dd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,84,"div",[["class","form-inline"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,15,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](2,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Priority:"])),(t()(),s["ɵeld"](7,0,null,0,9,"select",[["class","form-control custom-select"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,9).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,9).onTouched()&&a),"ngModelChange"===e&&(a=!1!==(r.priority=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](11,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](13,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](14,16384,null,0,X.h,[[8,null],X.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Ld)),s["ɵdid"](16,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](17,0,null,null,23,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](18,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](21,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Keyword:"])),(t()(),s["ɵeld"](23,0,null,0,17,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,5,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),s["ɵeld"](25,0,null,null,4,"span",[["class","input-group-text"]],null,null,null,null,null)),(t()(),s["ɵeld"](26,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](28,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](29,1),(t()(),s["ɵeld"](30,0,null,null,7,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,32)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,32).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,32)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,32)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.search=n)&&a),"keyup"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](31,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](32,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](34,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](36,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](37,16384,null,0,X.h,[[8,null],X.a],null,null),(t()(),s["ɵeld"](38,0,null,null,2,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](39,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.clearSearchKey()&&a),a}),null,null)),(t()(),s["ɵeld"](40,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](41,0,null,null,20,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](42,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](45,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Date:"])),(t()(),s["ɵeld"](47,0,null,0,14,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](48,16777216,null,null,10,"input",[["bsDatepicker",""],["class","form-control"],["placeholder","Datepicker"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,50)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,50).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,50)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,50)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,52).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,52).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,52).onBlur()&&a),"ngModelChange"===e&&(a=!1!==(r.selectedDate=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](49,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](50,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](51,737280,null,0,ot.c,[ot.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](52,16384,null,0,ot.f,[ot.c,ot.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[ot.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,ot.f]),s["ɵdid"](55,671744,null,0,$.u,[[8,null],[6,$.o],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](57,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](58,16384,null,0,X.h,[[8,null],X.a],null,null),(t()(),s["ɵeld"](59,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](60,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.clearDate()&&a),a}),null,null)),(t()(),s["ɵeld"](61,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](62,0,null,null,22,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](63,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](66,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Time range:"])),(t()(),s["ɵeld"](68,0,null,0,16,"div",[["class","d-inline-flex"]],null,null,null,null,null)),(t()(),s["ɵeld"](69,0,null,null,6,"timepicker",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],(function(t,e,n){var a=!0,r=t.component;return"ngModelChange"===e&&(a=!1!==(r.startTime=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),xd,ed)),s["ɵprd"](512,null,Ql,Ql,[]),s["ɵdid"](71,704512,null,0,Xl,[$l,s.ChangeDetectorRef,Ql,kl],{minuteStep:[0,"minuteStep"],showSpinners:[1,"showSpinners"],showMeridian:[2,"showMeridian"]},null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[Xl]),s["ɵdid"](73,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](75,16384,null,0,$.r,[[4,$.q]],null,null),(t()(),s["ɵeld"](76,0,null,null,1,"span",[["class","middle"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" — "])),(t()(),s["ɵeld"](78,0,null,null,6,"timepicker",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],(function(t,e,n){var a=!0,r=t.component;return"ngModelChange"===e&&(a=!1!==(r.endTime=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),xd,ed)),s["ɵprd"](512,null,Ql,Ql,[]),s["ɵdid"](80,704512,null,0,Xl,[$l,s.ChangeDetectorRef,Ql,kl],{minuteStep:[0,"minuteStep"],showSpinners:[1,"showSpinners"],showMeridian:[2,"showMeridian"]},null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[Xl]),s["ɵdid"](82,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](84,16384,null,0,$.r,[[4,$.q]],null,null)],(function(t,e){var n=e.component;t(e,2,0),t(e,11,0,n.priority),t(e,16,0,n.prioritys),t(e,18,0);var a=t(e,29,0,n.icons.search);t(e,28,0,a),t(e,34,0,n.search),t(e,42,0),t(e,51,0,n.bsConfig),t(e,55,0,n.selectedDate),t(e,63,0),t(e,71,0,1,!1,!1),t(e,73,0,n.startTime),t(e,80,0,1,!1,!1),t(e,82,0,n.endTime)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,s["ɵnov"](e,13).ngClassUntouched,s["ɵnov"](e,13).ngClassTouched,s["ɵnov"](e,13).ngClassPristine,s["ɵnov"](e,13).ngClassDirty,s["ɵnov"](e,13).ngClassValid,s["ɵnov"](e,13).ngClassInvalid,s["ɵnov"](e,13).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass),t(e,17,0,s["ɵnov"](e,18).hasErrors,s["ɵnov"](e,18).hasSuccess),t(e,30,0,s["ɵnov"](e,36).ngClassUntouched,s["ɵnov"](e,36).ngClassTouched,s["ɵnov"](e,36).ngClassPristine,s["ɵnov"](e,36).ngClassDirty,s["ɵnov"](e,36).ngClassValid,s["ɵnov"](e,36).ngClassInvalid,s["ɵnov"](e,36).ngClassPending,s["ɵnov"](e,37).validClass,s["ɵnov"](e,37).invalidClass),t(e,40,0,s["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,"")),t(e,41,0,s["ɵnov"](e,42).hasErrors,s["ɵnov"](e,42).hasSuccess),t(e,48,0,s["ɵnov"](e,57).ngClassUntouched,s["ɵnov"](e,57).ngClassTouched,s["ɵnov"](e,57).ngClassPristine,s["ɵnov"](e,57).ngClassDirty,s["ɵnov"](e,57).ngClassValid,s["ɵnov"](e,57).ngClassInvalid,s["ɵnov"](e,57).ngClassPending,s["ɵnov"](e,58).validClass,s["ɵnov"](e,58).invalidClass),t(e,61,0,s["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,"")),t(e,62,0,s["ɵnov"](e,63).hasErrors,s["ɵnov"](e,63).hasSuccess),t(e,69,0,s["ɵnov"](e,75).ngClassUntouched,s["ɵnov"](e,75).ngClassTouched,s["ɵnov"](e,75).ngClassPristine,s["ɵnov"](e,75).ngClassDirty,s["ɵnov"](e,75).ngClassValid,s["ɵnov"](e,75).ngClassInvalid,s["ɵnov"](e,75).ngClassPending),t(e,78,0,s["ɵnov"](e,84).ngClassUntouched,s["ɵnov"](e,84).ngClassTouched,s["ɵnov"](e,84).ngClassPristine,s["ɵnov"](e,84).ngClassDirty,s["ɵnov"](e,84).ngClassValid,s["ɵnov"](e,84).ngClassInvalid,s["ɵnov"](e,84).ngClassPending)}))}function Pd(t){return s["ɵvid"](0,[s["ɵpid"](0,_e.a,[i.DatePipe]),s["ɵpid"](0,_d.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,Ed)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["logFiltersTpl",2]],null,0,null,Dd))],(function(t,e){t(e,3,0,e.component.contentData)}),null)}function Md(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-logs",[],null,null,null,Pd,wd)),s["ɵdid"](1,245760,null,0,Od,[Td,i.DatePipe,s.NgZone],null,null)],(function(t,e){t(e,1,0)}),null)}var qd=s["ɵccf"]("cd-logs",Od,Md,{},{},[]),jd=n("OcYo");let Fd=(()=>{class t{constructor(t,e,n,a,r,i,s,o){this.formBuilder=t,this.mgrModuleService=e,this.notificationService=n,this.router=a,this.telemetryService=r,this.i18n=i,this.textToDownloadService=s,this.telemetryNotificationService=o,this.error=!1,this.licenseAgrmt=!1,this.loading=!1,this.options={},this.requiredFields=["channel_basic","channel_crash","channel_device","channel_ident","interval","proxy","contact","description"],this.report=void 0,this.reportId=void 0,this.sendToUrl="",this.sendToDeviceUrl="",this.step=1}ngOnInit(){this.loading=!0;const t=[this.mgrModuleService.getOptions("telemetry"),this.mgrModuleService.getConfig("telemetry")];Object(Po.a)(t).subscribe(t=>{const e=t[1];this.moduleEnabled=e.enabled,this.sendToUrl=e.url,this.sendToDeviceUrl=e.device_url,this.options=tt.pick(t[0],this.requiredFields);const n=tt.pick(e,this.requiredFields);this.createConfigForm(),this.configForm.setValue(n),this.loading=!1},t=>{this.error=!0})}createConfigForm(){const t={};tt.forEach(Object.values(this.options),e=>{t[e.name]=[e.default_value,this.getValidators(e)]}),this.configForm=this.formBuilder.group(t)}createPreviewForm(){const t={report:JSON.stringify(this.report,null,2),reportId:this.reportId,licenseAgrmt:[this.licenseAgrmt,$.B.requiredTrue]};this.previewForm=this.formBuilder.group(t)}getValidators(t){const e=[];switch(t.type){case"int":e.push(js.a.number()),e.push($.B.required),tt.isNumber(t.min)&&e.push($.B.min(t.min)),tt.isNumber(t.max)&&e.push($.B.max(t.max));break;case"str":tt.isNumber(t.min)&&e.push($.B.minLength(t.min)),tt.isNumber(t.max)&&e.push($.B.maxLength(t.max))}return e}getReport(){this.loading=!0,this.telemetryService.getReport().subscribe(t=>{this.report=t,this.reportId=t.report.report_id,this.createPreviewForm(),this.loading=!1,this.step++},t=>{this.error=!0})}updateConfig(){const t={};tt.forEach(Object.values(this.options),e=>{const n=this.configForm.get(e.name);n.dirty&&n.valid&&(t[e.name]=n.value)}),this.mgrModuleService.updateConfig("telemetry",t).subscribe(()=>{this.disableModule(this.i18n("Your settings have been applied successfully. Due to privacy/legal reasons the Telemetry module is now disabled until you complete the next step and accept the license."),()=>{this.getReport()})},()=>{this.configForm.setErrors({cdSubmitButton:!0})})}download(t,e){this.textToDownloadService.download(JSON.stringify(t,null,2),e)}disableModule(t=null,e=null){this.telemetryService.enable(!1).subscribe(()=>{this.telemetryNotificationService.setVisibility(!0),t&&this.notificationService.show(de.a.success,t),e?e():this.router.navigate([""])})}next(){this.configForm.pristine?this.getReport():this.updateConfig()}back(){this.step--}onSubmit(){this.telemetryService.enable().subscribe(()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(de.a.success,this.i18n("The Telemetry module has been configured and activated successfully.")),this.router.navigate([""])})}}return vl.__decorate([L(),vl.__metadata("design:type",Object)],t.prototype,"blockUI",void 0),t})(),Gd=(()=>{class t{constructor(t){this.http=t,this.url="api/telemetry"}getReport(){return this.http.get(this.url+"/report")}enable(t=!0){const e={enable:t};return t&&(e.license_name="sharing-1-0"),this.http.put(""+this.url,e)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();var Vd=n("Iab2");let zd=(()=>{class t{constructor(){}download(t,e){Object(Vd.saveAs)(new Blob([t]),e)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();var Bd=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Yd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,gi.b,gi.a)),s["ɵdid"](1,49152,null,0,pi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading configuration..."]))],null,null)}function Hd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The configuration could not be loaded."]))],(function(t,e){t(e,1,0,"error")}),null)}function Ud(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" The plugin is already "])),(t()(),s["ɵeld"](2,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["enabled"])),(t()(),s["ɵted"](-1,null,[". Click "])),(t()(),s["ɵeld"](5,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Deactivate"])),(t()(),s["ɵted"](-1,null,[" to disable it.  "])),(t()(),s["ɵeld"](8,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.disableModule("The Telemetry module has been disabled successfully.")&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Deactivate"]))],null,null)}function Wd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value is too low! It must be greater or equal to 8."]))],null,null)}function Kd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,232,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,231,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,225,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["Step "," of 2: Telemetry report configuration"])),(t()(),s["ɵeld"](10,0,null,null,217,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,12,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The telemetry module sends anonymous data about this Ceph cluster back to the Ceph developers to help understand how Ceph is used and what problems users may be experiencing."])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" This data is visualized on "])),(t()(),s["ɵeld"](15,0,null,null,1,"a",[["href","https://telemetry-public.ceph.com/"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["public dashboards"])),(t()(),s["ɵted"](-1,null,[" that allow the community to quickly see summary statistics on how many clusters are reporting, their total capacity and OSD count, and version distribution trends."])),(t()(),s["ɵeld"](18,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" The data being reported does "])),(t()(),s["ɵeld"](21,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["not"])),(t()(),s["ɵted"](23,null,[" contain any sensitive data like pool names, object names, object contents, hostnames, or device serial numbers. It contains counters and statistics on how the cluster has been deployed, the version of Ceph, the distribution of the hosts and other parameters which help the project to gain a better understanding of the way Ceph is used. The data is sent secured to "," and "," (device report)."])),(t()(),s["ɵand"](16777216,null,null,1,null,Ud)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](26,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Channels"])),(t()(),s["ɵeld"](28,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,['The telemetry report is broken down into several "channels", each with a different type of information that can be configured below.'])),(t()(),s["ɵeld"](30,0,null,null,32,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](31,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](34,0,null,0,17,"label",[["class","cd-col-form-label"],["for","channel_basic"]],null,null,null,null,null)),(t()(),s["ɵeld"](35,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Basic"])),(t()(),s["ɵeld"](37,0,null,null,14,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](38,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](39,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes basic information about the cluster:"])),(t()(),s["ɵeld"](41,0,null,0,10,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](42,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Capacity of the cluster"])),(t()(),s["ɵeld"](44,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Number of monitors, managers, OSDs, MDSs, object gateways, or other daemons"])),(t()(),s["ɵeld"](46,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Software version currently being used"])),(t()(),s["ɵeld"](48,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Number and types of RADOS pools and CephFS file systems"])),(t()(),s["ɵeld"](50,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Names of configuration options that have been changed from their default (but not their values)"])),(t()(),s["ɵeld"](52,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](53,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](54,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","channel_basic"],["id","channel_basic"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,56).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,56).onTouched()&&a),a}),null,null)),s["ɵdid"](55,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](56,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](58,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](60,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](61,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](62,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_basic"]],null,null,null,null,null)),(t()(),s["ɵeld"](63,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](64,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](67,0,null,0,15,"label",[["class","cd-col-form-label"],["for","channel_crash"]],null,null,null,null,null)),(t()(),s["ɵeld"](68,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Crash"])),(t()(),s["ɵeld"](70,0,null,null,12,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](71,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](72,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes information about daemon crashes:"])),(t()(),s["ɵeld"](74,0,null,0,8,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](75,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Type of daemon"])),(t()(),s["ɵeld"](77,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Version of the daemon"])),(t()(),s["ɵeld"](79,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Operating system (OS distribution, kernel version)"])),(t()(),s["ɵeld"](81,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Stack trace identifying where in the Ceph code the crash occurred"])),(t()(),s["ɵeld"](83,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](84,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](85,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","channel_crash"],["id","channel_crash"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,87).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,87).onTouched()&&a),a}),null,null)),s["ɵdid"](86,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](87,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](89,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](91,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](92,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](93,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_crash"]],null,null,null,null,null)),(t()(),s["ɵeld"](94,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](95,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](98,0,null,0,4,"label",[["class","cd-col-form-label"],["for","channel_device"]],null,null,null,null,null)),(t()(),s["ɵeld"](99,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Device"])),(t()(),s["ɵeld"](101,0,null,null,1,"cd-helper",[["html","Includes information about device metrics like anonymized SMART metrics."]],null,null,null,ou.b,ou.a)),s["ɵdid"](102,49152,null,0,uu.a,[],{html:[0,"html"]},null),(t()(),s["ɵeld"](103,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](104,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](105,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","channel_device"],["id","channel_device"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,107).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,107).onTouched()&&a),a}),null,null)),s["ɵdid"](106,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](107,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](109,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](111,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](112,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](113,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_device"]],null,null,null,null,null)),(t()(),s["ɵeld"](114,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](115,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](118,0,null,0,11,"label",[["class","cd-col-form-label"],["for","channel_ident"]],null,null,null,null,null)),(t()(),s["ɵeld"](119,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ident"])),(t()(),s["ɵeld"](121,0,null,null,8,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](122,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](123,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes user-provided identifying information about the cluster:"])),(t()(),s["ɵeld"](125,0,null,0,4,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](126,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster description"])),(t()(),s["ɵeld"](128,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact email address"])),(t()(),s["ɵeld"](130,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](131,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](132,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","channel_ident"],["id","channel_ident"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,134).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,134).onTouched()&&a),a}),null,null)),s["ɵdid"](133,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](134,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](136,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](138,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](139,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](140,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_ident"]],null,null,null,null,null)),(t()(),s["ɵeld"](141,0,null,null,5,"legend",[],null,null,null,null,null)),(t()(),s["ɵeld"](142,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact Information"])),(t()(),s["ɵeld"](144,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](145,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](-1,0,["Submitting any contact information is completely optional and disabled by default."])),(t()(),s["ɵeld"](147,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](148,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](151,0,null,0,1,"label",[["class","cd-col-form-label"],["for","contact"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact"])),(t()(),s["ɵeld"](153,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](154,0,null,null,7,"input",[["class","form-control"],["formControlName","contact"],["id","contact"],["placeholder","Example User <user@example.com>"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,156)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,156).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,156)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,156)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](155,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](156,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](158,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](160,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](161,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](162,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](163,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,11,{FormControlNames:1}),s["ɵqud"](603979776,12,{messagesBlock:0}),(t()(),s["ɵeld"](166,0,null,0,1,"label",[["class","cd-col-form-label"],["for","description"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](168,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](169,0,null,null,7,"input",[["class","form-control"],["formControlName","description"],["id","description"],["placeholder","My first Ceph cluster"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,171)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,171).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,171)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,171)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](170,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](171,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](173,671744,[[11,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](175,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](176,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](177,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Advanced Settings"])),(t()(),s["ɵeld"](179,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](180,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,13,{FormControlNames:1}),s["ɵqud"](603979776,14,{messagesBlock:0}),(t()(),s["ɵeld"](183,0,null,0,5,"label",[["class","cd-col-form-label"],["for","interval"]],null,null,null,null,null)),(t()(),s["ɵeld"](184,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Interval"])),(t()(),s["ɵeld"](186,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](187,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](-1,0,["The module compiles and sends a new report every 24 hours by default. You can adjust this interval by setting a different number of hours."])),(t()(),s["ɵeld"](189,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](190,0,null,null,8,"input",[["class","form-control"],["formControlName","interval"],["id","interval"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,192)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,192).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,192)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,192)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,193).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,193).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,193).onTouched()&&a),a}),null,null)),s["ɵdid"](191,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](192,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](193,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](195,671744,[[13,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](197,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](198,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Wd)),s["ɵdid"](200,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](201,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](202,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,15,{FormControlNames:1}),s["ɵqud"](603979776,16,{messagesBlock:0}),(t()(),s["ɵeld"](205,0,null,0,8,"label",[["class","cd-col-form-label"],["for","proxy"]],null,null,null,null,null)),(t()(),s["ɵeld"](206,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Proxy"])),(t()(),s["ɵeld"](208,0,null,null,5,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](209,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](210,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["If the cluster cannot directly connect to the configured telemetry endpoint (default telemetry.ceph.com), you can configure a HTTP/HTTPS proxy server by e.g. adding https://10.0.0.1:8080"])),(t()(),s["ɵeld"](212,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You can also include a user:pass if needed e.g. https://ceph:telemetry@10.0.0.1:8080"])),(t()(),s["ɵeld"](214,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](215,0,null,null,7,"input",[["class","form-control"],["formControlName","proxy"],["id","proxy"],["placeholder","https://10.0.0.1:8080"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,217)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,217).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,217)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,217)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](216,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](217,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](219,671744,[[15,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](221,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](222,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](223,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](224,0,null,null,3,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](225,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Note:"])),(t()(),s["ɵted"](-1,null,[" By clicking 'Next' you will first see a preview of the report content before you can activate the automatic submission of your data."])),(t()(),s["ɵeld"](228,0,null,null,4,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](229,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](230,0,null,null,2,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.next()&&a),a}),null,null)),(t()(),s["ɵeld"](231,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Next"]))],(function(t,e){var n=e.component;t(e,3,0,n.configForm),t(e,6,0,n.configForm),t(e,25,0,n.moduleEnabled),t(e,31,0),t(e,58,0,"channel_basic"),t(e,61,0,"channel_basic"),t(e,64,0),t(e,89,0,"channel_crash"),t(e,92,0,"channel_crash"),t(e,95,0),t(e,102,0,"Includes information about device metrics like anonymized SMART metrics."),t(e,109,0,"channel_device"),t(e,112,0,"channel_device"),t(e,115,0),t(e,136,0,"channel_ident"),t(e,139,0,"channel_ident"),t(e,148,0),t(e,158,0,"contact"),t(e,161,0,"contact"),t(e,163,0),t(e,173,0,"description"),t(e,176,0,"description"),t(e,180,0),t(e,195,0,"interval"),t(e,198,0,"interval"),t(e,200,0,n.configForm.showError("interval",s["ɵnov"](e,3),"min")),t(e,202,0),t(e,219,0,"proxy"),t(e,222,0,"proxy")}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,9,0,n.step),t(e,23,0,n.sendToUrl,n.sendToDeviceUrl),t(e,30,0,s["ɵnov"](e,31).hasErrors,s["ɵnov"](e,31).hasSuccess),t(e,54,0,s["ɵnov"](e,60).ngClassUntouched,s["ɵnov"](e,60).ngClassTouched,s["ɵnov"](e,60).ngClassPristine,s["ɵnov"](e,60).ngClassDirty,s["ɵnov"](e,60).ngClassValid,s["ɵnov"](e,60).ngClassInvalid,s["ɵnov"](e,60).ngClassPending,s["ɵnov"](e,61).validClass,s["ɵnov"](e,61).invalidClass),t(e,63,0,s["ɵnov"](e,64).hasErrors,s["ɵnov"](e,64).hasSuccess),t(e,85,0,s["ɵnov"](e,91).ngClassUntouched,s["ɵnov"](e,91).ngClassTouched,s["ɵnov"](e,91).ngClassPristine,s["ɵnov"](e,91).ngClassDirty,s["ɵnov"](e,91).ngClassValid,s["ɵnov"](e,91).ngClassInvalid,s["ɵnov"](e,91).ngClassPending,s["ɵnov"](e,92).validClass,s["ɵnov"](e,92).invalidClass),t(e,94,0,s["ɵnov"](e,95).hasErrors,s["ɵnov"](e,95).hasSuccess),t(e,105,0,s["ɵnov"](e,111).ngClassUntouched,s["ɵnov"](e,111).ngClassTouched,s["ɵnov"](e,111).ngClassPristine,s["ɵnov"](e,111).ngClassDirty,s["ɵnov"](e,111).ngClassValid,s["ɵnov"](e,111).ngClassInvalid,s["ɵnov"](e,111).ngClassPending,s["ɵnov"](e,112).validClass,s["ɵnov"](e,112).invalidClass),t(e,114,0,s["ɵnov"](e,115).hasErrors,s["ɵnov"](e,115).hasSuccess),t(e,132,0,s["ɵnov"](e,138).ngClassUntouched,s["ɵnov"](e,138).ngClassTouched,s["ɵnov"](e,138).ngClassPristine,s["ɵnov"](e,138).ngClassDirty,s["ɵnov"](e,138).ngClassValid,s["ɵnov"](e,138).ngClassInvalid,s["ɵnov"](e,138).ngClassPending,s["ɵnov"](e,139).validClass,s["ɵnov"](e,139).invalidClass),t(e,147,0,s["ɵnov"](e,148).hasErrors,s["ɵnov"](e,148).hasSuccess),t(e,154,0,s["ɵnov"](e,160).ngClassUntouched,s["ɵnov"](e,160).ngClassTouched,s["ɵnov"](e,160).ngClassPristine,s["ɵnov"](e,160).ngClassDirty,s["ɵnov"](e,160).ngClassValid,s["ɵnov"](e,160).ngClassInvalid,s["ɵnov"](e,160).ngClassPending,s["ɵnov"](e,161).validClass,s["ɵnov"](e,161).invalidClass),t(e,162,0,s["ɵnov"](e,163).hasErrors,s["ɵnov"](e,163).hasSuccess),t(e,169,0,s["ɵnov"](e,175).ngClassUntouched,s["ɵnov"](e,175).ngClassTouched,s["ɵnov"](e,175).ngClassPristine,s["ɵnov"](e,175).ngClassDirty,s["ɵnov"](e,175).ngClassValid,s["ɵnov"](e,175).ngClassInvalid,s["ɵnov"](e,175).ngClassPending,s["ɵnov"](e,176).validClass,s["ɵnov"](e,176).invalidClass),t(e,179,0,s["ɵnov"](e,180).hasErrors,s["ɵnov"](e,180).hasSuccess),t(e,190,0,s["ɵnov"](e,197).ngClassUntouched,s["ɵnov"](e,197).ngClassTouched,s["ɵnov"](e,197).ngClassPristine,s["ɵnov"](e,197).ngClassDirty,s["ɵnov"](e,197).ngClassValid,s["ɵnov"](e,197).ngClassInvalid,s["ɵnov"](e,197).ngClassPending,s["ɵnov"](e,198).validClass,s["ɵnov"](e,198).invalidClass),t(e,201,0,s["ɵnov"](e,202).hasErrors,s["ɵnov"](e,202).hasSuccess),t(e,215,0,s["ɵnov"](e,221).ngClassUntouched,s["ɵnov"](e,221).ngClassTouched,s["ɵnov"](e,221).ngClassPristine,s["ɵnov"](e,221).ngClassDirty,s["ɵnov"](e,221).ngClassValid,s["ɵnov"](e,221).ngClassInvalid,s["ɵnov"](e,221).ngClassPending,s["ɵnov"](e,222).validClass,s["ɵnov"](e,222).invalidClass)}))}function $d(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,79,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,78,"form",[["name","previewForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,72,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["Step "," of 2: Telemetry report preview"])),(t()(),s["ɵeld"](10,0,null,null,61,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](12,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,17,{FormControlNames:1}),s["ɵqud"](603979776,18,{messagesBlock:0}),(t()(),s["ɵeld"](15,0,null,0,3,"label",[["class","cd-col-form-label"],["for","reportId"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Report ID "])),(t()(),s["ɵeld"](17,0,null,null,1,"cd-helper",[["html","A randomized UUID to identify a particular cluster over the course of several telemetry reports."]],null,null,null,ou.b,ou.a)),s["ɵdid"](18,49152,null,0,uu.a,[],{html:[0,"html"]},null),(t()(),s["ɵeld"](19,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,7,"input",[["class","form-control"],["formControlName","reportId"],["id","reportId"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,22)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,22).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,22)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,22)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](22,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](24,671744,[[17,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](26,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](27,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](28,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](29,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,19,{FormControlNames:1}),s["ɵqud"](603979776,20,{messagesBlock:0}),(t()(),s["ɵeld"](32,0,null,0,3,"label",[["class","cd-col-form-label"],["for","report"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Report preview "])),(t()(),s["ɵeld"](34,0,null,null,1,"cd-helper",[["html","The actual telemetry data that will be submitted."]],null,null,null,ou.b,ou.a)),s["ɵdid"](35,49152,null,0,uu.a,[],{html:[0,"html"]},null),(t()(),s["ɵeld"](36,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](37,0,null,null,6,"textarea",[["class","form-control"],["formControlName","report"],["id","report"],["readonly",""],["rows","15"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,38)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,38).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,38)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,38)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](38,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](40,671744,[[19,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](42,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](43,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](44,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](45,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,21,{FormControlNames:1}),s["ɵqud"](603979776,22,{messagesBlock:0}),(t()(),s["ɵeld"](48,0,null,0,4,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,1,"button",[["class","btn btn-light mr-2"],["title","Download"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.download(r.report,"telemetry_report.json")&&a),a}),null,null)),(t()(),s["ɵeld"](50,0,null,null,0,"i",[["class","fa fa-download"]],null,null,null,null,null)),(t()(),s["ɵeld"](51,0,null,null,1,"button",[["cdCopy2ClipboardButton","report"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,52).onClick()&&a),a}),null,null)),s["ɵdid"](52,81920,null,0,jd.a,[s.ElementRef,s.Renderer2,c.j,he.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(t()(),s["ɵeld"](53,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](54,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,23,{FormControlNames:1}),s["ɵqud"](603979776,24,{messagesBlock:0}),(t()(),s["ɵeld"](57,0,null,0,14,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](58,0,null,null,13,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","licenseAgrmt"],["id","licenseAgrmt"],["name","licenseAgrmt"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,61).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,61).onTouched()&&a),a}),null,null)),s["ɵdid"](60,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](61,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](63,671744,[[23,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](65,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](66,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](67,0,null,null,4,"label",[["class","custom-control-label"],["for","licenseAgrmt"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["I agree to my telemetry data being submitted under the Community Data License Agreement - Sharing - Version 1.0 ("])),(t()(),s["ɵeld"](69,0,null,null,1,"a",[["href","https://cdla.io/sharing-1-0/"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["https://cdla.io/sharing-1-0/"])),(t()(),s["ɵted"](-1,null,[")"])),(t()(),s["ɵeld"](72,0,null,null,7,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](73,0,null,null,6,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](74,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](75,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](76,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Save"])),(t()(),s["ɵeld"](78,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.back()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){var n=e.component;t(e,3,0,n.previewForm),t(e,6,0,n.previewForm),t(e,12,0),t(e,18,0,"A randomized UUID to identify a particular cluster over the course of several telemetry reports."),t(e,24,0,"reportId"),t(e,27,0,"reportId"),t(e,29,0),t(e,35,0,"The actual telemetry data that will be submitted."),t(e,40,0,"report"),t(e,43,0,"report"),t(e,45,0),t(e,52,0,"report"),t(e,54,0),t(e,63,0,"licenseAgrmt"),t(e,66,0,"licenseAgrmt"),t(e,75,0,n.previewForm)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,9,0,n.step),t(e,11,0,s["ɵnov"](e,12).hasErrors,s["ɵnov"](e,12).hasSuccess),t(e,20,0,s["ɵnov"](e,26).ngClassUntouched,s["ɵnov"](e,26).ngClassTouched,s["ɵnov"](e,26).ngClassPristine,s["ɵnov"](e,26).ngClassDirty,s["ɵnov"](e,26).ngClassValid,s["ɵnov"](e,26).ngClassInvalid,s["ɵnov"](e,26).ngClassPending,s["ɵnov"](e,27).validClass,s["ɵnov"](e,27).invalidClass),t(e,28,0,s["ɵnov"](e,29).hasErrors,s["ɵnov"](e,29).hasSuccess),t(e,37,0,s["ɵnov"](e,42).ngClassUntouched,s["ɵnov"](e,42).ngClassTouched,s["ɵnov"](e,42).ngClassPristine,s["ɵnov"](e,42).ngClassDirty,s["ɵnov"](e,42).ngClassValid,s["ɵnov"](e,42).ngClassInvalid,s["ɵnov"](e,42).ngClassPending,s["ɵnov"](e,43).validClass,s["ɵnov"](e,43).invalidClass),t(e,44,0,s["ɵnov"](e,45).hasErrors,s["ɵnov"](e,45).hasSuccess),t(e,53,0,s["ɵnov"](e,54).hasErrors,s["ɵnov"](e,54).hasSuccess),t(e,59,0,s["ɵnov"](e,65).ngClassUntouched,s["ɵnov"](e,65).ngClassTouched,s["ɵnov"](e,65).ngClassPristine,s["ɵnov"](e,65).ngClassDirty,s["ɵnov"](e,65).ngClassValid,s["ɵnov"](e,65).ngClassInvalid,s["ɵnov"](e,65).ngClassPending,s["ɵnov"](e,66).validClass,s["ɵnov"](e,66).invalidClass)}))}function Jd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](2,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kd)),s["ɵdid"](4,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$d)),s["ɵdid"](6,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],(function(t,e){t(e,2,0,e.component.step),t(e,4,0,1),t(e,6,0,2)}),null)}function Zd(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Yd)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Hd)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jd)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.loading&&!n.error),t(e,3,0,n.loading&&n.error),t(e,5,0,!n.loading&&!n.error)}),null)}function Qd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-telemetry",[],null,null,null,Zd,Bd)),s["ɵdid"](1,114688,null,0,Fd,[Yo.a,le,mt.a,Lt.m,Gd,he.a,zd,ce],null,null)],(function(t,e){t(e,1,0)}),null)}var Xd=s["ɵccf"]("cd-telemetry",Fd,Qd,{},{},[]);const tc=new us.a("silence");class ec extends ls.a{constructor(t,e,n,a,r){super(),this.authStorageService=t,this.prometheusAlertService=e,this.urlBuilder=n,this.i18n=a,this.cdDatePipe=r,this.selection=new Ur.a,this.icons=bt.a,this.customCss={"badge badge-danger":"active","badge badge-warning":"unprocessed","badge badge-info":"suppressed"},this.permission=this.authStorageService.getPermissions().prometheus,this.tableActions=[{permission:"create",canBePrimary:t=>t.hasSingleSelection,disable:t=>!t.hasSingleSelection||t.first().cdExecuting,icon:bt.a.add,routerLink:()=>"/monitoring"+this.urlBuilder.getCreateFrom(this.selection.first().fingerprint),name:this.i18n("Create Silence")}]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"labels.alertname",flexGrow:2},{name:this.i18n("Job"),prop:"labels.job",flexGrow:2},{name:this.i18n("Severity"),prop:"labels.severity"},{name:this.i18n("State"),prop:"status.state",cellTransformation:Hr.a.classAdding},{name:this.i18n("Started"),prop:"startsAt",pipe:this.cdDatePipe},{name:this.i18n("URL"),prop:"generatorURL",sortable:!1,cellTemplate:this.externalLinkTpl}]}updateSelection(t){this.selection=t}}var nc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ac(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["cdTableDetail",""]],null,null,null,fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],appendParentKey:[3,"appendParentKey"],hideEmpty:[4,"hideEmpty"],customCss:[5,"customCss"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.expandedRow,!1,!0,!1,!0,n.customCss)}),null)}function rc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"a",[["target","_blank"]],[[8,"href",4]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](4,1),(t()(),s["ɵted"](-1,null,[" Source"]))],(function(t,e){var n=t(e,4,0,e.component.icons.lineChart);t(e,3,0,n)}),(function(t,e){t(e,0,0,e.context.value)}))}function ic(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{externalLinkTpl:0}),(t()(),s["ɵeld"](1,0,null,null,5,"cd-table",[["identifier","fingerprint"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](2,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"],customCss:[6,"customCss"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](4,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](16777216,null,3,1,null,ac)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["externalLinkTpl",2]],null,0,null,rc))],(function(t,e){var n=e.component;t(e,2,0,n.prometheusAlertService.alerts,n.columns,!0,"fingerprint",!0,"single",n.customCss),t(e,4,0,n.permission,n.selection,n.tableActions),t(e,6,0,n.expandedRow)}),null)}class sc extends ls.a{constructor(t){super(),this.i18n=t,this.hideKeys=["alerts","type"]}ngOnInit(){this.columns=[{prop:"name",name:this.i18n("Name")},{prop:"labels.severity",name:this.i18n("Severity")},{prop:"group",name:this.i18n("Group")},{prop:"duration",name:this.i18n("Duration"),pipe:new xe},{prop:"query",name:this.i18n("Query"),isHidden:!0},{prop:"annotations.description",name:this.i18n("Description")}]}}var oc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function uc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["cdTableDetail",""]],null,null,null,fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"],renderObjects:[1,"renderObjects"],hideKeys:[2,"hideKeys"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.expandedRow,!0,n.hideKeys)}),null)}function lc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-table",[],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.setExpandedRow(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](1,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵand"](16777216,null,3,1,null,uc)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.data,n.columns,!0,"single"),t(e,3,0,n.expandedRow)}),null)}var dc=n("w9WL");const cc=new us.a("monitoring/silence");class fc extends ls.a{constructor(t,e,n,a,r,i,s,o,u){super(),this.authStorageService=t,this.i18n=e,this.cdDatePipe=n,this.prometheusService=a,this.modalService=r,this.notificationService=i,this.urlBuilder=s,this.actionLabels=o,this.succeededLabels=u,this.silences=[],this.selection=new Ur.a,this.customCss={"badge badge-danger":"active","badge badge-warning":"pending","badge badge-default":"expired"},this.sorts=[{prop:"endsAt",dir:dc.A.desc}],this.permission=this.authStorageService.getPermissions().prometheus;const l=t=>t.first()&&t.first().status&&"expired"===t.first().status.state;this.tableActions=[{permission:"create",icon:bt.a.add,routerLink:()=>this.urlBuilder.getCreate(),preserveFragment:!0,canBePrimary:t=>!t.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"create",canBePrimary:t=>t.hasSingleSelection&&l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||t.first().cdExecuting&&l(t)||!l(t),icon:bt.a.copy,routerLink:()=>this.urlBuilder.getRecreate(this.selection.first().id),preserveFragment:!0,name:this.actionLabels.RECREATE},{permission:"update",icon:bt.a.edit,canBePrimary:t=>t.hasSingleSelection&&!l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||t.first().cdExecuting&&!l(t)||l(t),routerLink:()=>this.urlBuilder.getEdit(this.selection.first().id),preserveFragment:!0,name:this.actionLabels.EDIT},{permission:"delete",icon:bt.a.trash,canBePrimary:t=>t.hasSingleSelection&&!l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||l(t),click:()=>this.expireSilence(),name:this.actionLabels.EXPIRE}],this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:3},{name:this.i18n("Created by"),prop:"createdBy",flexGrow:2},{name:this.i18n("Started"),prop:"startsAt",pipe:this.cdDatePipe},{name:this.i18n("Updated"),prop:"updatedAt",pipe:this.cdDatePipe},{name:this.i18n("Ends"),prop:"endsAt",pipe:this.cdDatePipe},{name:this.i18n("Status"),prop:"status.state",cellTransformation:Hr.a.classAdding}]}refresh(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getSilences().subscribe(t=>{this.silences=t},()=>{this.prometheusService.disableAlertmanagerConfig()})})}updateSelection(t){this.selection=t}expireSilence(){const t=this.selection.first().id,e=this.i18n("Silence");this.modalRef=this.modalService.show(ds.a,{initialState:{itemDescription:e,itemNames:[t],actionDescription:this.actionLabels.EXPIRE,submitActionObservable:()=>new Nn.a(n=>{this.prometheusService.expireSilence(t).subscribe(()=>{this.notificationService.show(de.a.success,`${this.succeededLabels.EXPIRED} ${e} ${t}`,void 0,void 0,"Prometheus")},t=>{t.application="Prometheus",n.error(t)},()=>{n.complete(),this.refresh()})})}})}}var hc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function gc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["cdTableDetail",""]],null,null,null,fi.b,fi.a)),s["ɵdid"](1,638976,null,0,hi.a,[_e.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],appendParentKey:[3,"appendParentKey"],hideEmpty:[4,"hideEmpty"],customCss:[5,"customCss"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.expandedRow,!1,!0,!1,!0,n.customCss)}),null)}function pc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-table",[["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"fetchData"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"fetchData"===e&&(a=!1!==r.refresh()&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](1,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],sorts:[2,"sorts"],hasDetails:[3,"hasDetails"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"],customCss:[6,"customCss"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](2,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](3,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](16777216,null,3,1,null,gc)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.silences,n.columns,n.sorts,!0,!0,"single",n.customCss),t(e,3,0,n.permission,n.selection,n.tableActions),t(e,5,0,n.expandedRow)}),null)}class bc{constructor(t,e,n,a){this.prometheusAlertService=t,this.prometheusService=e,this.route=n,this.router=a,this.isPrometheusConfigured=!1,this.isAlertmanagerConfigured=!1}ngOnInit(){if(this.prometheusService.ifAlertmanagerConfigured(()=>{this.isAlertmanagerConfigured=!0}),this.prometheusService.ifPrometheusConfigured(()=>{this.isPrometheusConfigured=!0}),this.route.snapshot.fragment){const t=this.tabs.tabs.find(t=>t.elementRef.nativeElement.id===this.route.snapshot.fragment);t&&(t.active=!0),this.router.navigate([],{fragment:this.route.snapshot.fragment})}}setFragment(t){this.router.navigate([],{fragment:t.id})}}var mc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function yc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-active-alert-list",[],null,null,null,ic,nc)),s["ɵprd"](256,null,us.a,tc,[]),s["ɵdid"](2,114688,null,0,ec,[Q.a,ke,us.a,he.a,_e.a],null,null)],(function(t,e){t(e,2,0)}),null)}function vc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To see all active Prometheus alerts, please provide the URL to the API of Prometheus' Alertmanager as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,jr.b,jr.a)),s["ɵdid"](4,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function xc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-rules-list",[],null,null,null,lc,oc)),s["ɵdid"](1,114688,null,0,sc,[he.a],{data:[0,"data"]},null)],(function(t,e){t(e,1,0,e.component.prometheusAlertService.rules)}),null)}function _c(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To see all configured Prometheus alerts, please provide the URL to the API of Prometheus as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,jr.b,jr.a)),s["ɵdid"](4,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function Tc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-silences-list",[],null,null,null,pc,hc)),s["ɵprd"](256,null,us.a,cc,[]),s["ɵdid"](2,49152,null,0,fc,[Q.a,he.a,_e.a,Re,Rt.b,mt.a,us.a,It.b,It.d],null,null)],null,null)}function Oc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To enable Silences, please provide the URL to the API of the Prometheus' Alertmanager as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,jr.b,jr.a)),s["ɵdid"](4,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function wc(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{tabs:0}),(t()(),s["ɵeld"](1,0,null,null,19,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](2,180224,[[1,4],["tabs",4]],0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](3,0,null,0,5,"tab",[["heading","Active Alerts"],["id","active-alerts"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](4,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,yc)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vc)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,0,5,"tab",[["heading","All Alerts"],["id","all-alerts"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](10,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,xc)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_c)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](15,0,null,0,5,"tab",[["heading","Silences"],["id","silences"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](16,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,Tc)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Oc)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,4,0,"Active Alerts","active-alerts"),t(e,6,0,n.isAlertmanagerConfigured),t(e,8,0,!n.isAlertmanagerConfigured),t(e,10,0,"All Alerts","all-alerts"),t(e,12,0,n.isPrometheusConfigured),t(e,14,0,!n.isPrometheusConfigured),t(e,16,0,"Silences","silences"),t(e,18,0,n.isAlertmanagerConfigured),t(e,20,0,!n.isAlertmanagerConfigured)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).clazz),t(e,3,0,s["ɵnov"](e,4).id,s["ɵnov"](e,4).active,s["ɵnov"](e,4).addClass,s["ɵnov"](e,4).role,s["ɵnov"](e,4).ariaLabelledby),t(e,9,0,s["ɵnov"](e,10).id,s["ɵnov"](e,10).active,s["ɵnov"](e,10).addClass,s["ɵnov"](e,10).role,s["ɵnov"](e,10).ariaLabelledby),t(e,15,0,s["ɵnov"](e,16).id,s["ɵnov"](e,16).active,s["ɵnov"](e,16).addClass,s["ɵnov"](e,16).role,s["ɵnov"](e,16).ariaLabelledby)}))}function Sc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-monitoring-list",[],null,null,null,wc,mc)),s["ɵdid"](1,114688,null,0,bc,[ke,Re,Lt.a,Lt.m],null,null)],(function(t,e){t(e,1,0)}),null)}var Ic=s["ɵccf"]("cd-monitoring-list",bc,Sc,{},{},[]);let Nc=(()=>{class t{constructor(t){this.i18n=t,this.valueAttributePath={alertname:"name",instance:"alerts.0.labels.instance",job:"alerts.0.labels.job",severity:"labels.severity"}}singleMatch(t,e){return this.multiMatch([t],e)}multiMatch(t,e){if(!t.some(t=>t.isRegex))return t.forEach(t=>{e=this.getMatchedRules(t,e)}),this.describeMatch(e)}getMatchedRules(t,e){const n=this.getAttributePath(t.name);return e.filter(e=>tt.get(e,n)===t.value)}describeMatch(t){let e=0;return t.forEach(t=>e+=t.alerts.length),{status:this.getMatchText(t.length,e),cssClass:e?"has-success":"has-warning"}}getAttributePath(t){return this.valueAttributePath[t]}getMatchText(t,e){const n={noRule:this.i18n("Your matcher seems to match no currently defined rule or active alert."),noAlerts:this.i18n("no active alerts"),alert:this.i18n("1 active alert"),alerts:this.i18n("{{n}} active alerts",{n:e}),rule:this.i18n("Matches 1 rule"),rules:this.i18n("Matches {{n}} rules",{n:t})};return t?this.i18n("{{rules}} with {{alerts}}.",{rules:t>1?n.rules:n.rule,alerts:e?e>1?n.alerts:n.alert:n.noAlerts}):n.noRule}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](he.a))},token:t,providedIn:"root"}),t})(),Cc=(()=>{class t{constructor(){}calculateDuration(t,e){const n=+t,a=+e,r=this.getDuration(Math.abs(n-a));return n>a?"-"+r:r}getDuration(t){const e=new Date(t),n=e.getUTCHours(),a=e.getUTCMinutes(),r=(t,e)=>t?t+e:t;return[r(Math.floor(t/864e5),"d"),r(n,"h"),r(a,"m")].filter(t=>t).join(" ")}calculateDate(t,e,n){const a=+t;if(tt.isNaN(a))return;const r=this.getDurationMs(e)*(n?-1:1);return new Date(a+r)}getDurationMs(t){return 6e4*(60*(24*this.getNumbersFromString(t,"d")+this.getNumbersFromString(t,"h"))+this.getNumbersFromString(t,"m"))}getNumbersFromString(t,e){const n=t.match(new RegExp("[0-9 ]+"+e,"i"));return n?parseInt(n[0],10):0}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();class Rc{constructor(t,e,n){this.formBuilder=t,this.silenceMatcher=e,this.bsModalRef=n,this.submitAction=new s.EventEmitter,this.editMode=!1,this.nameAttributes=["alertname","instance","job","severity"],this.possibleValues=[],this.matcherMatch=void 0,this.createForm(),this.subscribeToChanges()}createForm(){this.form=this.formBuilder.group({name:[null,[$.B.required]],value:[{value:null,disabled:!0},[$.B.required]],isRegex:new $.i(!1)})}subscribeToChanges(){this.form.get("name").valueChanges.subscribe(t=>{null!==t?(this.setPossibleValues(t),this.form.get("value").enable()):this.form.get("value").disable()}),this.form.get("value").valueChanges.subscribe(t=>{const e=this.form.value;e.value=t,this.matcherMatch=this.silenceMatcher.singleMatch(e,this.rules)})}setPossibleValues(t){this.possibleValues=tt.sortedUniq(this.rules.map(e=>tt.get(e,this.silenceMatcher.getAttributePath(t))).filter(t=>t))}preFillControls(t){this.form.setValue(t)}onSubmit(){this.submitAction.emit(this.form.value),this.bsModalRef.hide()}}class Ac{constructor(t,e,n,a,r,i,s,o,u,l,d,c){this.i18n=t,this.router=e,this.authStorageService=n,this.formBuilder=a,this.prometheusService=r,this.notificationService=i,this.route=s,this.timeDiff=o,this.bsModalService=u,this.silenceMatcher=l,this.actionLabels=d,this.succeededLabels=c,this.icons=bt.a,this.bsConfig={dateInputFormat:"YYYY-MM-DDT HH:mm"},this.recreate=!1,this.edit=!1,this.resource=this.i18n("silence"),this.matchers=[],this.matcherMatch=void 0,this.matcherConfig=[{tooltip:this.i18n("Attribute name"),icon:this.icons.paragraph,attribute:"name"},{tooltip:this.i18n("Value"),icon:this.icons.terminal,attribute:"value"},{tooltip:this.i18n("Regular expression"),icon:this.icons.magic,attribute:"isRegex"}],this.init()}init(){this.chooseMode(),this.authenticate(),this.createForm(),this.setupDates(),this.getData()}chooseMode(){this.edit=this.router.url.startsWith("/monitoring/silence/edit"),this.recreate=this.router.url.startsWith("/monitoring/silence/recreate"),this.action=this.edit?this.actionLabels.EDIT:this.recreate?this.actionLabels.RECREATE:this.actionLabels.CREATE}authenticate(){this.permission=this.authStorageService.getPermissions().prometheus,this.permission.read&&(this.edit?this.permission.update:this.permission.create)||this.router.navigate(["/404"])}createForm(){this.form=this.formBuilder.group({startsAt:[null,[$.B.required]],duration:["2h",[$.B.min(1)]],endsAt:[null,[$.B.required]],createdBy:[this.authStorageService.getUsername(),[$.B.required]],comment:[null,[$.B.required]]},{validators:js.a.custom("matcherRequired",()=>0===this.matchers.length)})}setupDates(){const t=new Date;t.setSeconds(0,0),this.form.silentSet("startsAt",t),this.updateDate(),this.subscribeDateChanges()}updateDate(t){const e=this.timeDiff.calculateDate(this.form.getValue(t?"endsAt":"startsAt"),this.form.getValue("duration"),t);e&&this.form.silentSet(t?"startsAt":"endsAt",e)}subscribeDateChanges(){this.form.get("startsAt").valueChanges.subscribe(()=>{this.onDateChange()}),this.form.get("duration").valueChanges.subscribe(()=>{this.updateDate()}),this.form.get("endsAt").valueChanges.subscribe(()=>{this.onDateChange(!0)})}onDateChange(t){this.form.getValue("startsAt")<this.form.getValue("endsAt")?this.updateDuration():this.updateDate(t)}updateDuration(){this.form.silentSet("duration",this.timeDiff.calculateDuration(this.form.getValue("startsAt"),this.form.getValue("endsAt")))}getData(){this.getRules(),this.getModeSpecificData()}getRules(){this.prometheusService.ifPrometheusConfigured(()=>this.prometheusService.getRules().subscribe(t=>{this.rules=t.groups.reduce((t,e)=>tt.concat(t,e.rules),[])},()=>{this.prometheusService.disablePrometheusConfig(),this.rules=[]}),()=>{this.rules=[],this.notificationService.show(de.a.info,this.i18n("Please add your Prometheus host to the dashboard configuration and refresh the page"),void 0,void 0,"Prometheus")})}getModeSpecificData(){this.route.params.subscribe(t=>{t.id&&(this.edit||this.recreate?this.prometheusService.getSilences(t).subscribe(t=>{this.fillFormWithSilence(t[0])}):this.prometheusService.getAlerts(t).subscribe(t=>{this.fillFormByAlert(t[0])}))})}fillFormWithSilence(t){this.id=t.id,this.edit&&(["startsAt","endsAt"].forEach(e=>this.form.silentSet(e,new Date(t[e]))),this.updateDuration()),["createdBy","comment"].forEach(e=>this.form.silentSet(e,t[e])),this.matchers=t.matchers,this.validateMatchers()}validateMatchers(){this.rules?(this.matcherMatch=this.silenceMatcher.multiMatch(this.matchers,this.rules),this.form.markAsDirty(),this.form.updateValueAndValidity()):window.setTimeout(()=>this.validateMatchers(),100)}fillFormByAlert(t){const e=t.labels;Object.keys(e).forEach(t=>this.setMatcher({name:t,value:e[t],isRegex:!1}))}setMatcher(t,e){tt.isNumber(e)?this.matchers[e]=t:this.matchers.push(t),this.validateMatchers()}showMatcherModal(t){const e=this.bsModalService.show(Rc),n=e.content;n.rules=this.rules,tt.isNumber(t)&&(n.editMode=!0,n.preFillControls(this.matchers[t])),e.content.submitAction.subscribe(e=>{this.setMatcher(e,t)})}deleteMatcher(t){this.matchers.splice(t,1),this.validateMatchers()}submit(){this.form.invalid||this.prometheusService.setSilence(this.getSubmitData()).subscribe(t=>{this.router.navigate(["/monitoring"],{fragment:"silences"}),this.notificationService.show(de.a.success,this.getNotificationTile(t.body.silenceId),void 0,void 0,"Prometheus")},()=>this.form.setErrors({cdSubmitButton:!0}))}getSubmitData(){const t=this.form.value;return delete t.duration,t.startsAt=t.startsAt.toISOString(),t.endsAt=t.endsAt.toISOString(),t.matchers=this.matchers,this.edit&&(t.id=this.id),t}getNotificationTile(t){let e;return e=this.edit?this.succeededLabels.EDITED:this.recreate?this.succeededLabels.RECREATED:this.succeededLabels.CREATED,`${e} ${this.resource} ${t}`}}var kc=s["ɵcrt"]({encapsulation:0,styles:[["textarea[_ngcontent-%COMP%]{resize:vertical}"]],data:{}});function Ec(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"input",[["class","form-control"],["disabled",""],["readonly",""],["type","text"]],[[8,"id",0],[8,"value",0],[2,"is-valid",null],[2,"is-invalid",null]],null,null,null,null)),s["ɵdid"](2,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](3,16384,null,0,X.h,[[8,null],X.a],null,null)],null,(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](2,"matcher-",e.parent.context.$implicit.attribute,"-",e.parent.parent.context.index,""),e.parent.parent.context.matcher[e.parent.context.$implicit.attribute],s["ɵnov"](e,3).validClass,s["ɵnov"](e,3).invalidClass)}))}function Lc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"div",[["class","input-group-text"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"input",[["disabled",""],["readonly",""],["type","checkbox"]],[[8,"id",0],[8,"checked",0]],null,null,null,null)),s["ɵdid"](4,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null)],null,(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](2,"matcher-",e.parent.context.$implicit.attribute,"-",e.parent.parent.context.index,""),e.parent.parent.context.matcher[e.parent.context.$implicit.attribute])}))}function Dc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,6,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,16777216,null,null,5,"span",[["class","input-group-text"]],null,null,null,null,null)),s["ɵdid"](3,212992,null,0,Kn.c,[s.ViewContainerRef,W.a,Kn.a,s.ElementRef,s.Renderer2,ia.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵand"](16777216,null,null,1,null,Ec)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lc)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,3,0,e.context.$implicit.tooltip);var n=t(e,7,0,e.context.$implicit.icon);t(e,6,0,n),t(e,9,0,"isRegex"!==e.context.$implicit.attribute),t(e,11,0,"isRegex"===e.context.$implicit.attribute)}),null)}function Pc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"div",[["class","input-group my-2"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Dc)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](3,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","Edit"],["type","button"]],[[8,"id",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showMatcherModal(t.context.index)&&a),a}),null,null)),s["ɵdid"](5,212992,null,0,Kn.c,[s.ViewContainerRef,W.a,Kn.a,s.ElementRef,s.Renderer2,ia.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](8,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](9,1),(t()(),s["ɵeld"](10,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","Delete"],["type","button"]],[[8,"id",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.deleteMatcher(t.context.index)&&a),a}),null,null)),s["ɵdid"](11,212992,null,0,Kn.c,[s.ViewContainerRef,W.a,Kn.a,s.ElementRef,s.Renderer2,ia.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,1),(t()(),s["ɵeld"](16,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,2,0,n.matcherConfig),t(e,5,0,"Edit");var a=t(e,9,0,n.icons.edit);t(e,8,0,a),t(e,11,0,"Delete");var r=t(e,15,0,n.icons.trash);t(e,14,0,r)}),(function(t,e){t(e,4,0,s["ɵinlineInterpolate"](1,"matcher-edit-",e.context.index,"")),t(e,10,0,s["ɵinlineInterpolate"](1,"matcher-delete-",e.context.index,""))}))}function Mc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](-1,0,["Editing a silence will expire the old silence and recreate it as a new silence"]))],null,null)}function qc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function jc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Fc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Gc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Vc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function zc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"h5",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](3,{"text-warning":0,"text-danger":1}),(t()(),s["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["A silence requires at least one matcher"]))],(function(t,e){var n=t(e,3,0,!s["ɵnov"](e.parent,6).submitted,s["ɵnov"](e.parent,6).submitted);t(e,2,0,n)}),null)}function Bc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Yc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Bc)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](3,{index:0,matcher:1})],(function(t,e){var n=t(e,3,0,e.context.index,e.context.$implicit);t(e,2,0,n,s["ɵnov"](e.parent,2))}),null)}function Hc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["id","match-state"]],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵted"](2,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,s["ɵinlineInterpolate"](1,"cd-col-form-offset ",n.matcherMatch.cssClass,"")),t(e,1,0,s["ɵinlineInterpolate"](1,"text-muted ",n.matcherMatch.cssClass,"")),t(e,2,0,n.matcherMatch.status)}))}function Uc(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),(t()(),s["ɵand"](0,[["matcherTpl",2]],null,0,null,Pc)),(t()(),s["ɵeld"](3,0,null,null,141,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,140,"form",[["class","form"],["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,6).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit()&&a),a}),null,null)),s["ɵdid"](5,16384,null,0,$.G,[],null,null),s["ɵdid"](6,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](9,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](10,0,null,null,134,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,6,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](13,null,[" "," "," "])),s["ɵppd"](14,1),s["ɵppd"](15,1),(t()(),s["ɵand"](16777216,null,null,1,null,Mc)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,117,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](20,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](23,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","created-by"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Creator"])),(t()(),s["ɵeld"](25,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](26,0,null,null,7,"input",[["class","form-control"],["formControlName","createdBy"],["id","created-by"],["name","created-by"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,28)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,28).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,28)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,28)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](27,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](28,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](30,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](32,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](33,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qc)),s["ɵdid"](35,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](36,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](37,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](40,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","comment"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Comment"])),(t()(),s["ɵeld"](42,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,7,"textarea",[["class","form-control"],["formControlName","comment"],["id","comment"],["name","comment"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,44)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,44).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,44)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,44)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](44,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](46,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](48,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](49,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "])),(t()(),s["ɵand"](16777216,null,null,1,null,jc)),s["ɵdid"](52,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](53,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](54,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](57,0,null,0,5,"label",[["class","cd-col-form-label"],["for","starts-at"]],null,null,null,null,null)),(t()(),s["ɵeld"](58,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Start time"])),(t()(),s["ɵeld"](60,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](61,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](-1,0,["If the start time lies in the past the creation time will be used"])),(t()(),s["ɵeld"](63,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](64,16777216,null,null,10,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","startsAt"],["id","starts-at"],["name","starts-at"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,66)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,66).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,66)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,66)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,68).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,68).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,68).onBlur()&&a),a}),null,null)),s["ɵdid"](65,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](66,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](67,737280,null,0,ot.c,[ot.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](68,16384,null,0,ot.f,[ot.c,ot.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[ot.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,ot.f]),s["ɵdid"](71,671744,[[5,4]],0,$.j,[[3,$.d],[6,$.o],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](73,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](74,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Fc)),s["ɵdid"](76,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](77,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](78,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](81,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","duration"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Duration"])),(t()(),s["ɵeld"](83,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](84,0,null,null,7,"input",[["class","form-control"],["formControlName","duration"],["id","duration"],["name","duration"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,86)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,86).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,86)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,86)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](85,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](86,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](88,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](90,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](91,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Gc)),s["ɵdid"](93,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](94,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](95,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](98,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","ends-at"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["End time"])),(t()(),s["ɵeld"](100,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](101,16777216,null,null,10,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","endsAt"],["id","ends-at"],["name","ends-at"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,103)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,103).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,103)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,103)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,105).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,105).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,105).onBlur()&&a),a}),null,null)),s["ɵdid"](102,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](103,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](104,737280,null,0,ot.c,[ot.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](105,16384,null,0,ot.f,[ot.c,ot.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[ot.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,ot.f]),s["ɵdid"](108,671744,[[9,4]],0,$.j,[[3,$.d],[6,$.o],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](110,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](111,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Vc)),s["ɵdid"](113,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](114,0,null,null,21,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](115,0,null,null,1,"legend",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Matchers"])),(t()(),s["ɵeld"](117,0,null,null,16,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,zc)),s["ɵdid"](119,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yc)),s["ɵdid"](121,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](122,0,null,null,11,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](123,0,null,null,10,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](124,0,null,null,9,"button",[["class","btn btn-light float-right my-3"],["id","add-matcher"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showMatcherModal()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](126,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](127,{"btn-warning":0}),(t()(),s["ɵeld"](128,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](130,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](131,1),(t()(),s["ɵeld"](132,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add matcher"])),(t()(),s["ɵand"](16777216,null,null,1,null,Hc)),s["ɵdid"](135,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](136,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](137,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](138,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Es.b,Es.a)),s["ɵdid"](139,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](140,0,[" "," "," "])),s["ɵppd"](141,1),s["ɵppd"](142,1),(t()(),s["ɵeld"](143,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](144,49152,null,0,Ps.a,[i.Location,It.b],null,null)],(function(t,e){var n=e.component;t(e,6,0,n.form),t(e,9,0,n.form),t(e,17,0,n.edit),t(e,20,0),t(e,30,0,"createdBy"),t(e,33,0,"createdBy"),t(e,35,0,n.form.showError("createdBy",s["ɵnov"](e,6),"required")),t(e,37,0),t(e,46,0,"comment"),t(e,49,0,"comment"),t(e,52,0,n.form.showError("comment",s["ɵnov"](e,6),"required")),t(e,54,0),t(e,67,0,n.bsConfig),t(e,71,0,"startsAt"),t(e,74,0,"startsAt"),t(e,76,0,n.form.showError("startsAt",s["ɵnov"](e,6),"required")),t(e,78,0),t(e,88,0,"duration"),t(e,91,0,"duration"),t(e,93,0,n.form.showError("duration",s["ɵnov"](e,6),"required")),t(e,95,0),t(e,104,0,n.bsConfig),t(e,108,0,"endsAt"),t(e,111,0,"endsAt"),t(e,113,0,n.form.showError("endsAt",s["ɵnov"](e,6),"required")),t(e,119,0,0===n.matchers.length),t(e,121,0,n.matchers);var a=t(e,127,0,s["ɵnov"](e,6).submitted&&0===n.matchers.length);t(e,126,0,"btn btn-light float-right my-3",a);var r=t(e,131,0,n.icons.add);t(e,130,0,r),t(e,135,0,n.matchers.length&&n.matcherMatch),t(e,139,0,s["ɵnov"](e,6))}),(function(t,e){var n=e.component;t(e,4,0,s["ɵnov"](e,8).ngClassUntouched,s["ɵnov"](e,8).ngClassTouched,s["ɵnov"](e,8).ngClassPristine,s["ɵnov"](e,8).ngClassDirty,s["ɵnov"](e,8).ngClassValid,s["ɵnov"](e,8).ngClassInvalid,s["ɵnov"](e,8).ngClassPending);var a=s["ɵunv"](e,13,0,t(e,14,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,13,1,t(e,15,0,s["ɵnov"](e,1),n.resource));t(e,13,0,a,r),t(e,19,0,s["ɵnov"](e,20).hasErrors,s["ɵnov"](e,20).hasSuccess),t(e,26,0,s["ɵnov"](e,32).ngClassUntouched,s["ɵnov"](e,32).ngClassTouched,s["ɵnov"](e,32).ngClassPristine,s["ɵnov"](e,32).ngClassDirty,s["ɵnov"](e,32).ngClassValid,s["ɵnov"](e,32).ngClassInvalid,s["ɵnov"](e,32).ngClassPending,s["ɵnov"](e,33).validClass,s["ɵnov"](e,33).invalidClass),t(e,36,0,s["ɵnov"](e,37).hasErrors,s["ɵnov"](e,37).hasSuccess),t(e,43,0,s["ɵnov"](e,48).ngClassUntouched,s["ɵnov"](e,48).ngClassTouched,s["ɵnov"](e,48).ngClassPristine,s["ɵnov"](e,48).ngClassDirty,s["ɵnov"](e,48).ngClassValid,s["ɵnov"](e,48).ngClassInvalid,s["ɵnov"](e,48).ngClassPending,s["ɵnov"](e,49).validClass,s["ɵnov"](e,49).invalidClass),t(e,53,0,s["ɵnov"](e,54).hasErrors,s["ɵnov"](e,54).hasSuccess),t(e,64,0,s["ɵnov"](e,73).ngClassUntouched,s["ɵnov"](e,73).ngClassTouched,s["ɵnov"](e,73).ngClassPristine,s["ɵnov"](e,73).ngClassDirty,s["ɵnov"](e,73).ngClassValid,s["ɵnov"](e,73).ngClassInvalid,s["ɵnov"](e,73).ngClassPending,s["ɵnov"](e,74).validClass,s["ɵnov"](e,74).invalidClass),t(e,77,0,s["ɵnov"](e,78).hasErrors,s["ɵnov"](e,78).hasSuccess),t(e,84,0,s["ɵnov"](e,90).ngClassUntouched,s["ɵnov"](e,90).ngClassTouched,s["ɵnov"](e,90).ngClassPristine,s["ɵnov"](e,90).ngClassDirty,s["ɵnov"](e,90).ngClassValid,s["ɵnov"](e,90).ngClassInvalid,s["ɵnov"](e,90).ngClassPending,s["ɵnov"](e,91).validClass,s["ɵnov"](e,91).invalidClass),t(e,94,0,s["ɵnov"](e,95).hasErrors,s["ɵnov"](e,95).hasSuccess),t(e,101,0,s["ɵnov"](e,110).ngClassUntouched,s["ɵnov"](e,110).ngClassTouched,s["ɵnov"](e,110).ngClassPristine,s["ɵnov"](e,110).ngClassDirty,s["ɵnov"](e,110).ngClassValid,s["ɵnov"](e,110).ngClassInvalid,s["ɵnov"](e,110).ngClassPending,s["ɵnov"](e,111).validClass,s["ɵnov"](e,111).invalidClass);var i=s["ɵunv"](e,140,0,t(e,141,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,140,1,t(e,142,0,s["ɵnov"](e,1),n.resource));t(e,140,0,i,o)}))}function Wc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-prometheus-form",[],null,null,null,Uc,kc)),s["ɵdid"](1,49152,null,0,Ac,[he.a,Lt.m,Q.a,Yo.a,Re,mt.a,Lt.a,Cc,Rt.b,Nc,It.b,It.d],null,null)],null,null)}var Kc=s["ɵccf"]("cd-prometheus-form",Ac,Wc,{},{},[]);let $c=(()=>{class t{constructor(e){this.route=e,this.route.queryParams.subscribe(e=>{this.fromLink=e.fromLink||t.defaultFromLink}),this.route.params.subscribe(t=>{this.serviceId=decodeURIComponent(t.id),this.serviceType=t.type})}}return t.defaultFromLink="/hosts",t})();var Jc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Zc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",".",""])),(t()(),s["ɵeld"](2,0,null,null,1,"cd-table-performance-counter",[],null,null,null,po.b,po.a)),s["ɵdid"](3,114688,null,0,bo.a,[mo.a,he.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.serviceType,n.serviceId)}),(function(t,e){var n=e.component;t(e,1,0,n.serviceType,n.serviceId)}))}function Qc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-performance-counter",[],null,null,null,Zc,Jc)),s["ɵdid"](1,49152,null,0,$c,[Lt.a],null,null)],null,null)}var Xc=s["ɵccf"]("cd-performance-counter",$c,Qc,{},{},[]);class tf{constructor(t){this.mgrModuleService=t}ngOnChanges(){this.selection&&this.mgrModuleService.getConfig(this.selection.name).subscribe(t=>{this.module_config=t})}}var ef=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function nf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](5,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.module_config)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function af(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,nf)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}var rf=n("PqYM");let sf=(()=>{class t extends ls.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.mgrModuleService=e,this.notificationService=n,this.i18n=a,this.columns=[],this.modules=[],this.selection=new Ur.a,this.permission=this.authStorageService.getPermissions().configOpt,this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Enabled"),prop:"enabled",flexGrow:1,cellClass:"text-center",cellTransformation:Hr.a.checkIcon},{name:this.i18n("Always-On"),prop:"always_on",flexGrow:1,cellClass:"text-center",cellTransformation:Hr.a.checkIcon}];const r=()=>this.selection.first()&&encodeURIComponent(this.selection.first().name);this.tableActions=[{name:this.i18n("Edit"),permission:"update",disable:()=>!this.selection.hasSelection||0===Object.values(this.selection.first().options).length,routerLink:()=>"/mgr-modules/edit/"+r(),icon:bt.a.edit},{name:this.i18n("Enable"),permission:"update",click:()=>this.updateModuleState(),disable:()=>this.isTableActionDisabled("enabled"),icon:bt.a.start},{name:this.i18n("Disable"),permission:"update",click:()=>this.updateModuleState(),disable:()=>this.getTableActionDisabledDesc(),icon:bt.a.stop}]}getModuleList(t){this.mgrModuleService.list().subscribe(t=>{this.modules=t},()=>{t.error()})}updateSelection(t){this.selection=t}isTableActionDisabled(t){if(!this.selection.hasSelection)return!0;const e=this.selection.first();if("dashboard"===e.name)return!0;if(e.always_on)return!0;switch(t){case"enabled":return e.enabled;case"disabled":return!e.enabled}}getTableActionDisabledDesc(){return this.selection&&this.selection.first().always_on?this.i18n("This Manager module is always on."):this.isTableActionDisabled("disabled")}updateModuleState(){if(!this.selection.hasSelection)return;let t;const e=()=>{Object(rf.a)(2e3).subscribe(()=>{this.mgrModuleService.list().subscribe(()=>{this.notificationService.suspendToasties(!1),this.blockUI.stop(),this.table.refreshBtn()},()=>{e()})})},n=this.selection.first();t=n.enabled?this.mgrModuleService.disable(n.name):this.mgrModuleService.enable(n.name),t.subscribe(()=>{},()=>{this.notificationService.suspendToasties(!0),this.blockUI.start(this.i18n("Reconnecting, please wait ...")),e()})}}return vl.__decorate([L(),vl.__metadata("design:type",Object)],t.prototype,"blockUI",void 0),t})();var of=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function uf(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),(t()(),s["ɵeld"](1,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","module"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),"fetchData"===e&&(a=!1!==r.getModuleList(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](2,2867200,[[1,4],["table",4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](4,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](5,0,null,3,1,"cd-mgr-module-details",[["cdTableDetail",""]],null,null,null,af,ef)),s["ɵdid"](6,573440,null,0,tf,[le],{selection:[0,"selection"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.modules,n.columns,"flex",!0,!1,"module","single"),t(e,4,0,n.permission,n.selection,n.tableActions),t(e,6,0,n.expandedRow)}),null)}function lf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-mgr-module-list",[],null,null,null,uf,of)),s["ɵdid"](1,49152,null,0,sf,[Q.a,le,mt.a,he.a],null,null)],null,null)}var df=s["ɵccf"]("cd-mgr-module-list",sf,lf,{},{},[]);class cf{constructor(t,e,n,a,r,i){this.route=t,this.router=e,this.formBuilder=n,this.mgrModuleService=a,this.notificationService=r,this.i18n=i,this.error=!1,this.loading=!1,this.moduleName="",this.moduleOptions=[]}ngOnInit(){this.route.params.subscribe(t=>{this.moduleName=decodeURIComponent(t.name),this.loading=!0;const e=[this.mgrModuleService.getOptions(this.moduleName),this.mgrModuleService.getConfig(this.moduleName)];Object(Po.a)(e).subscribe(t=>{this.loading=!1,this.moduleOptions=t[0],this.createForm(),this.mgrModuleForm.setValue(t[1])},t=>{this.error=!0})})}getValidators(t){const e=[];switch(t.type){case"addr":e.push(js.a.ip());break;case"uint":case"int":case"size":case"secs":e.push(js.a.number()),e.push($.B.required),tt.isNumber(t.min)&&e.push($.B.min(t.min)),tt.isNumber(t.max)&&e.push($.B.max(t.max));break;case"str":tt.isNumber(t.min)&&e.push($.B.minLength(t.min)),tt.isNumber(t.max)&&e.push($.B.maxLength(t.max));break;case"float":e.push($.B.required),e.push(js.a.decimalNumber());break;case"uuid":e.push(js.a.uuid())}return e}createForm(){const t={};tt.forEach(this.moduleOptions,e=>{t[e.name]=[e.default_value,this.getValidators(e)]}),this.mgrModuleForm=this.formBuilder.group(t)}goToListView(){this.router.navigate(["/mgr-modules"])}onSubmit(){if(this.mgrModuleForm.pristine)return void this.goToListView();const t={};tt.forEach(this.moduleOptions,e=>{const n=this.mgrModuleForm.get(e.name);n.dirty&&n.valid&&(t[e.name]=n.value)}),this.mgrModuleService.updateConfig(this.moduleName,t).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n('Updated options for module "{{name}}".',{name:this.moduleName})),this.goToListView()},()=>{this.mgrModuleForm.setErrors({cdSubmitButton:!0})})}}var ff=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function hf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,gi.b,gi.a)),s["ɵdid"](1,49152,null,0,pi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading configuration..."]))],null,null)}function gf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The configuration could not be loaded."]))],(function(t,e){t(e,1,0,"error")}),null)}function pf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.parent.context.$implicit.value.long_desc||e.parent.context.$implicit.value.desc));t(e,2,0,n)}))}function bf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](3,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](10,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],(function(t,e){t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,9,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""))}),(function(t,e){t(e,2,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,9).validClass,s["ɵnov"](e,9).invalidClass),t(e,10,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""))}))}function mf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,1)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,1)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,1)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](3,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](7,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,7,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""))}),(function(t,e){t(e,0,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""),s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,7).validClass,s["ɵnov"](e,7).invalidClass)}))}function yf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function vf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"select",[["class","form-control custom-select"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,1).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](3,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](7,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yf)),s["ɵdid"](9,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,7,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,9,0,e.parent.parent.context.$implicit.value.enum_allowed)}),(function(t,e){t(e,0,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""),s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,7).validClass,s["ɵnov"](e,7).invalidClass)}))}function xf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8"]))],null,null)}function _f(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a valid IP address."]))],null,null)}function Tf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,mf)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vf)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xf)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_f)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,0===e.parent.context.$implicit.value.enum_allowed.length),t(e,4,0,e.parent.context.$implicit.value.enum_allowed.length>0),t(e,6,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"invalidUuid")),t(e,8,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),null)}function Of(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function wf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must be lower or equal to ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.max)}))}function Sf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must be greater or equal to ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.min)}))}function If(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a number."]))],null,null)}function Nf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,8,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[8,"min",0],[8,"max",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,2)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,2).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,2)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,2)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](3,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Of)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wf)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sf)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,If)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,9,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,11,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"required")),t(e,13,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"max")),t(e,15,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"min")),t(e,17,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),(function(t,e){t(e,1,1,[s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.min,""),s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.max,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,9).validClass,s["ɵnov"](e,9).invalidClass])}))}function Cf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Rf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a number or decimal."]))],null,null)}function Af(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,8,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,2)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,2).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,2)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,2)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](3,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](9,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cf)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rf)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,9,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,11,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"required")),t(e,13,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,9).validClass,s["ɵnov"](e,9).invalidClass)}))}function kf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,3,"label",[["class","col-form-label col-sm-5"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,pf)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,bf)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Tf)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpad"](12,3),(t()(),s["ɵand"](16777216,null,0,2,null,Nf)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpad"](15,4),(t()(),s["ɵand"](16777216,null,0,1,null,Af)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0),t(e,7,0,e.context.$implicit.value.long_desc||e.context.$implicit.value.desc),t(e,9,0,"bool"===e.context.$implicit.value.type);var n=t(e,12,0,"addr","str","uuid").includes(e.context.$implicit.value.type);t(e,11,0,n);var a=t(e,15,0,"uint","int","size","secs").includes(e.context.$implicit.value.type);t(e,14,0,a),t(e,17,0,"float"===e.context.$implicit.value.type)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.value.name,"")),t(e,5,0,e.context.$implicit.value.name)}))}function Ef(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,22,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,21,"form",[["name","mgrModuleForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,15,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Edit Manager module"])),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,kf)),s["ɵdid"](12,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵeld"](14,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](16,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](17,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](18,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Update"])),(t()(),s["ɵeld"](20,0,null,null,2,"button",[["class","btn btn-light"],["routerLink","/mgr-modules"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,21).onClick()&&a),a}),null,null)),s["ɵdid"](21,16384,null,0,Lt.n,[Lt.m,Lt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){var n=e.component;t(e,3,0,n.mgrModuleForm),t(e,6,0,n.mgrModuleForm),t(e,12,0,s["ɵunv"](e,12,0,s["ɵnov"](e,13).transform(n.moduleOptions))),t(e,17,0,n.mgrModuleForm),t(e,21,0,"/mgr-modules")}),(function(t,e){t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending)}))}function Lf(t){return s["ɵvid"](0,[s["ɵpid"](0,Ms.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,hf)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gf)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ef)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.loading&&!n.error),t(e,4,0,n.loading&&n.error),t(e,6,0,!n.loading&&!n.error)}),null)}function Df(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-mgr-module-form",[],null,null,null,Lf,ff)),s["ɵdid"](1,114688,null,0,cf,[Lt.a,Lt.m,Yo.a,le,mt.a,he.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Pf=s["ɵccf"]("cd-mgr-module-form",cf,Df,{},{},[]),Mf=n("xTzq");let qf=(()=>{let t=class{constructor(t){this.http=t,this.baseURL="api/cephfs",this.baseUiURL="ui-api/cephfs"}list(){return this.http.get(""+this.baseURL)}lsDir(t,e){let n=`${this.baseUiURL}/${t}/ls_dir?depth=2`;return e&&(n+="&path="+encodeURIComponent(e)),this.http.get(n)}getCephfs(t){return this.http.get(`${this.baseURL}/${t}`)}getTabs(t){return this.http.get(`ui-api/cephfs/${t}/tabs`)}getClients(t){return this.http.get(`${this.baseURL}/${t}/clients`)}evictClient(t,e){return this.http.delete(`${this.baseURL}/${t}/client/${e}`)}getMdsCounters(t){return this.http.get(`${this.baseURL}/${t}/mds_counters`)}mkSnapshot(t,e,n){let a=new nt.h;return a=a.append("path",e),tt.isUndefined(n)||(a=a.append("name",n)),this.http.post(`${this.baseURL}/${t}/mk_snapshot`,null,{params:a})}rmSnapshot(t,e,n){let a=new nt.h;return a=a.append("path",e),a=a.append("name",n),this.http.post(`${this.baseURL}/${t}/rm_snapshot`,null,{params:a})}updateQuota(t,e,n){let a=new nt.h;return a=a.append("path",e),this.http.post(`${this.baseURL}/${t}/set_quotas`,n,{observe:"response",params:a})}};return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t=vl.__decorate([Mf.a,vl.__metadata("design:paramtypes",[nt.c])],t),t})();class jf{constructor(t,e,n,a,r,i,s,o){this.authStorageService=t,this.modalService=e,this.cephfsService=n,this.cdDatePipe=a,this.i18n=r,this.actionLabels=i,this.notificationService=s,this.dimlessBinaryPipe=o,this.icons=bt.a,this.loadingIndicator=!1,this.loading={},this.treeOptions={useVirtualScroll:!0,getChildren:t=>this.updateDirectory(t.id),actionMapping:{mouse:{click:this.selectAndShowNode.bind(this),expanderClick:this.selectAndShowNode.bind(this)}}}}selectAndShowNode(t,e,n){xl.a.TOGGLE_EXPANDED(t,e,n),this.selectNode(e)}selectNode(t){xl.a.TOGGLE_ACTIVE(void 0,t,void 0),this.selectedDir=this.getDirectory(t),"/"!==t.id&&this.setSettings(t)}ngOnInit(){this.permission=this.authStorageService.getPermissions().cephfs,this.setUpQuotaTable(),this.setUpSnapshotTable()}setUpQuotaTable(){this.quota={columns:[{prop:"row.name",name:this.i18n("Name"),flexGrow:1},{prop:"row.value",name:this.i18n("Value"),sortable:!1,flexGrow:1},{prop:"row.originPath",name:this.i18n("Origin"),sortable:!1,cellTemplate:this.originTmpl,flexGrow:1}],selection:new Ur.a,updateSelection:t=>{this.quota.selection=t},tableActions:[{name:this.actionLabels.SET,icon:bt.a.edit,permission:"update",visible:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UPDATE,icon:bt.a.edit,permission:"update",visible:t=>t.first()&&t.first().dirValue>0,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UNSET,icon:bt.a.destroy,permission:"update",disable:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.unsetQuotaModal()}]}}setUpSnapshotTable(){this.snapshot={columns:[{prop:"name",name:this.i18n("Name"),flexGrow:1},{prop:"path",name:this.i18n("Path"),isHidden:!0,flexGrow:2},{prop:"created",name:this.i18n("Created"),flexGrow:1,pipe:this.cdDatePipe}],selection:new Ur.a,updateSelection:t=>{this.snapshot.selection=t},tableActions:[{name:this.actionLabels.CREATE,icon:bt.a.add,permission:"create",canBePrimary:t=>!t.hasSelection,click:()=>this.createSnapshot()},{name:this.actionLabels.DELETE,icon:bt.a.destroy,permission:"delete",click:()=>this.deleteSnapshotModal(),canBePrimary:t=>t.hasSelection,disable:t=>!t.hasSelection}]}}ngOnChanges(){this.selectedDir=void 0,this.dirs=[],this.requestedPaths=[],this.nodeIds={},this.id&&(this.setRootNode(),this.firstCall())}setRootNode(){this.nodes=[{name:"/",id:"/",isExpanded:!0}]}firstCall(){setTimeout(()=>{this.getNode("/").loadNodeChildren()},10)}updateDirectory(t){if(this.unsetLoadingIndicator(),this.requestedPaths.includes(t)){if(!0===this.loading[t])return}else this.requestedPaths.push(t);return new Promise(e=>{this.setLoadingIndicator(t,!0),this.cephfsService.lsDir(this.id,t).subscribe(n=>{this.updateTreeStructure(n),this.updateQuotaTable(),this.updateTree(),e(this.getChildren(t)),this.setLoadingIndicator(t,!1)})})}setLoadingIndicator(t,e){this.loading[t]=e,this.unsetLoadingIndicator()}getSubDirectories(t,e=this.dirs){return e.filter(e=>e.parent===t)}getChildren(t){const e=this.getSubTree(t);return tt.sortBy(this.getSubDirectories(t),"path").map(t=>this.createNode(t,e))}createNode(t,e){return this.nodeIds[t.path]=t,e||this.getSubTree(t.parent),{name:t.name,id:t.path,hasChildren:this.getSubDirectories(t.path,e).length>0}}getSubTree(t){return this.dirs.filter(e=>e.parent&&e.parent.startsWith(t))}setSettings(t){const e=(t,e)=>t?e?e(t):t:"";this.settings=[this.getQuota(t,"max_files",e),this.getQuota(t,"max_bytes",t=>e(t,t=>this.dimlessBinaryPipe.transform(t)))]}getQuota(t,e,n){const a=t.id;t=this.getOrigin(t,e);const r=this.getDirectory(t),i=r.quotas[e];let s=i,o=r.path;if(t.id===a)if("/"===t.parent.id)s=0;else{const n=this.getDirectory(this.getOrigin(t.parent,e));s=n.quotas[e],o=n.path}return{row:{name:this.i18n("max_bytes"===e?"Max size":"Max files"),value:n(i),originPath:i?r.path:""},quotaKey:e,dirValue:this.nodeIds[a].quotas[e],nextTreeMaximum:{value:s,path:s?o:""}}}getOrigin(t,e){if(t.parent&&"/"!==t.parent.id){const n=this.getQuotaFromTree(t,e),a=this.getOrigin(t.parent,e),r=this.getQuotaFromTree(a,e);return 0===n||0!==r&&r<n?a:t}return t}getQuotaFromTree(t,e){return this.getDirectory(t).quotas[e]}getDirectory(t){return this.nodeIds[t.id]}selectOrigin(t){this.selectNode(this.getNode(t))}getNode(t){return this.treeComponent.treeModel.getNodeById(t)}updateQuotaModal(){const t=this.selectedDir.path,e=this.quota.selection.first(),n=e.nextTreeMaximum,a=e.quotaKey,r=e.dirValue;this.modalService.show(Yr.a,{initialState:{titleText:this.getModalQuotaTitle(0===r?this.actionLabels.SET:this.actionLabels.UPDATE,t),message:n.value?this.i18n("The inherited {{quotaValue}} is the maximum value to be used.",{quotaValue:this.getQuotaValueFromPathMsg(n.value,n.path)}):void 0,fields:[this.getQuotaFormField(e.row.name,a,r,n.value)],submitButtonText:this.i18n("Save"),onSubmit:t=>this.updateQuota(t)}})}getModalQuotaTitle(t,e){return this.i18n("{{action}} CephFS {{quotaName}} quota for '{{path}}'",{action:t,quotaName:this.getQuotaName(),path:e})}getQuotaName(){return this.isBytesQuotaSelected()?this.i18n("size"):this.i18n("files")}isBytesQuotaSelected(){return"max_bytes"===this.quota.selection.first().quotaKey}getQuotaValueFromPathMsg(t,e){return this.i18n("{{quotaName}} quota {{value}} from '{{path}}'",{value:this.isBytesQuotaSelected()?this.dimlessBinaryPipe.transform(t):t,quotaName:this.getQuotaName(),path:e})}getQuotaFormField(t,e,n,a){const r="max_bytes"===e,i=[r?js.a.binaryMin(0):$.B.min(0)];a&&i.push(r?js.a.binaryMax(a):$.B.max(a));const s={type:r?"binary":"number",label:t,name:e,value:n,validators:i,required:!0};return r||(s.errors={min:this.i18n("Value has to be at least {{value}} or more",{value:0}),max:this.i18n("Value has to be at most {{value}} or less",{value:a})}),s}updateQuota(t,e){const n=this.selectedDir.path,a=this.quota.selection.first().quotaKey,r=0===this.selectedDir.quotas[a]?this.actionLabels.SET:0===t[a]?this.actionLabels.UNSET:this.i18n("Updated");this.cephfsService.updateQuota(this.id,n,t).subscribe(()=>{e&&e(),this.notificationService.show(de.a.success,this.getModalQuotaTitle(r,n)),this.forceDirRefresh()})}unsetQuotaModal(){const t=this.selectedDir.path,e=this.quota.selection.first(),n=e.quotaKey,a=e.nextTreeMaximum,r=e.dirValue;this.modalRef=this.modalService.show(Mo.a,{initialState:{titleText:this.getModalQuotaTitle(this.actionLabels.UNSET,t),buttonText:this.actionLabels.UNSET,description:this.i18n("{{action}} {{quotaValue}} {{conclusion}}.",{action:this.actionLabels.UNSET,quotaValue:this.getQuotaValueFromPathMsg(r,t),conclusion:a.value>0?this.i18n(a.value>r?"in order to inherit {{quotaValue}}":"which isn't used because of the inheritance of {{quotaValue}}",{quotaValue:this.getQuotaValueFromPathMsg(a.value,a.path)}):this.i18n("in order to have no quota on the directory")}),onSubmit:()=>this.updateQuota({[n]:0},()=>this.modalRef.hide())}})}createSnapshot(){const t=this.selectedDir.path;this.modalService.show(Yr.a,{initialState:{titleText:this.i18n("Create Snapshot"),message:this.i18n("Please enter the name of the snapshot."),fields:[{type:"text",name:"name",value:""+ve().toISOString(!0),required:!0}],submitButtonText:this.i18n("Create Snapshot"),onSubmit:e=>{this.cephfsService.mkSnapshot(this.id,t,e.name).subscribe(e=>{this.notificationService.show(de.a.success,this.i18n('Created snapshot "{{name}}" for "{{path}}"',{name:e,path:t})),this.forceDirRefresh()})}}})}forceDirRefresh(t){if(!t){const e=this.selectedDir;if(!e)throw new Error("This function can only be called without path if an selection was made");t=e.parent?e.parent:e.path}this.getNode(t).loadNodeChildren()}updateTreeStructure(t){const e=(t,e)=>{const n=t.filter(t=>t.parent===e),a=n.map(t=>t.path);return{children:n,paths:a}};tt.uniq(t.map(t=>t.parent).sort()).forEach(n=>{const a=e(t,n),r=e(this.dirs,n);r.children.forEach(t=>{a.paths.includes(t.path)||this.removeOldDirectory(t)}),a.children.forEach(t=>{r.paths.includes(t.path)?this.updateExistingDirectory(r.children,t):this.addNewDirectory(t)})})}removeOldDirectory(t){const e=t.path;tt.remove(this.dirs,t=>t.path===e),delete this.nodeIds[e],this.updateDirectoriesParentNode(t)}updateDirectoriesParentNode(t){const e=t.parent;if(!e)return;const n=this.getNode(e);if(!n)return;const a=this.getChildren(e);n.data.children=a,n.data.hasChildren=a.length>0,this.treeComponent.treeModel.update()}addNewDirectory(t){this.dirs.push(t),this.nodeIds[t.path]=t,this.updateDirectoriesParentNode(t)}updateExistingDirectory(t,e){const n=t.find(t=>t.path===e.path);Object.assign(n,e)}updateQuotaTable(){const t=this.selectedDir?this.getNode(this.selectedDir.path):void 0;t&&"/"!==t.id&&this.setSettings(t)}updateTree(t=!1){this.loadingIndicator&&!t||(this.treeComponent.treeModel.update(),this.nodes=[...this.nodes],this.treeComponent.sizeChanged())}deleteSnapshotModal(){this.modalRef=this.modalService.show(ds.a,{initialState:{itemDescription:this.i18n("CephFs Snapshot"),itemNames:this.snapshot.selection.selected.map(t=>t.name),submitAction:()=>this.deleteSnapshot()}})}deleteSnapshot(){const t=this.selectedDir.path;this.snapshot.selection.selected.forEach(e=>{const n=e.name;this.cephfsService.rmSnapshot(this.id,t,n).subscribe(()=>{this.notificationService.show(de.a.success,this.i18n('Deleted snapshot "{{name}}" for "{{path}}"',{name:n,path:t}))})}),this.modalRef.hide(),this.forceDirRefresh()}refreshAllDirectories(){this.loadingIndicator=!0,this.requestedPaths.map(t=>this.forceDirRefresh(t));const t=setInterval(()=>{this.updateTree(!0),this.loadingIndicator||clearInterval(t)},3e3)}unsetLoadingIndicator(){this.loadingIndicator&&(clearTimeout(this.loadingTimeout),this.loadingTimeout=setTimeout(()=>{if(Object.values(this.loading).some(t=>t))return this.unsetLoadingIndicator();this.loadingIndicator=!1,this.updateTree()},3e3))}}var Ff=s["ɵcrt"]({encapsulation:0,styles:[["tree-root .tree-children{overflow:inherit}.quota-origin[_ngcontent-%COMP%]{cursor:pointer;color:#2b99a8}.quota-origin[_ngcontent-%COMP%]:hover{color:#212121}"]],data:{}});function Gf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](3,2)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function Vf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"tree-root",[],null,[["body","keydown"],["body","mousedown"]],(function(t,e,n){var a=!0;return"body:keydown"===e&&(a=!1!==s["ɵnov"](t,2).onKeydown(n)&&a),"body:mousedown"===e&&(a=!1!==s["ɵnov"](t,2).onMousedown(n)&&a),a}),pl.b,pl.a)),s["ɵprd"](131584,null,bl.a,bl.a,[]),s["ɵdid"](2,573440,[[1,4]],4,ml.a,[bl.a,yl.a],{nodes:[0,"nodes"],options:[1,"options"]},null),s["ɵqud"](603979776,3,{loadingTemplate:0}),s["ɵqud"](603979776,4,{treeNodeTemplate:0}),s["ɵqud"](603979776,5,{treeNodeWrapperTemplate:0}),s["ɵqud"](603979776,6,{treeNodeFullTemplate:0}),(t()(),s["ɵand"](0,[[3,2],["loadingTemplate",2]],null,0,null,Gf))],(function(t,e){var n=e.component;t(e,2,0,n.nodes,n.treeOptions)}),null)}function zf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Quotas"])),(t()(),s["ɵeld"](3,0,null,null,3,"cd-table",[["identifier","quotaKey"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.quota.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](4,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],onlyActionHeader:[2,"onlyActionHeader"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],identifier:[6,"identifier"],forceIdentifier:[7,"forceIdentifier"],selectionType:[8,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](5,0,null,0,1,"cd-table-actions",[["class","only-table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](6,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.settings,n.quota.columns,!0,!1,!1,0,"quotaKey",!0,"single"),t(e,6,0,n.permission,n.quota.selection,n.quota.tableActions)}),null)}function Bf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"div",[["class","col-sm-8 metadata"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,11,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,[" "," "])),(t()(),s["ɵeld"](4,0,null,null,8,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,zf)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](7,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Snapshots"])),(t()(),s["ɵeld"](9,0,null,null,3,"cd-table",[["forceIdentifier","true"],["identifier","name"],["selectionType","multiClick"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.snapshot.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](10,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],identifier:[2,"identifier"],forceIdentifier:[3,"forceIdentifier"],selectionType:[4,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](11,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](12,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,6,0,"/"!==n.selectedDir.path),t(e,10,0,n.selectedDir.snapshots,n.snapshot.columns,"name","true","multiClick"),t(e,12,0,n.permission,n.snapshot.selection,n.snapshot.tableActions)}),(function(t,e){t(e,3,0,e.component.selectedDir.path)}))}function Yf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","quota-origin"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectOrigin(t.context.value)&&a),a}),null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.value)}))}function Hf(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{treeComponent:0}),s["ɵqud"](402653184,2,{originTmpl:0}),(t()(),s["ɵeld"](2,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,10,"div",[["class","col-sm-4 pr-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,9,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,5,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,4,"button",[["class","btn btn-light pull-right"],["type","button"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.refreshAllDirectories()&&a),a}),null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"i",[],[[2,"fa-spin",null]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](9,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](10,2),(t()(),s["ɵeld"](11,0,null,null,2,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Vf)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Bf)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[2,2],["origin",2]],null,0,null,Yf))],(function(t,e){var n=e.component,a=t(e,10,0,n.icons.large,n.icons.refresh);t(e,9,0,a),t(e,13,0,n.nodes),t(e,15,0,n.selectedDir)}),(function(t,e){var n=e.component;t(e,6,0,n.loadingIndicator),t(e,7,0,n.loadingIndicator)}))}class Uf{constructor(){this.lhsCounter="mds_mem.ino",this.rhsCounter="mds_server.handle_client_request",this.chart={datasets:[{label:this.lhsCounter,yAxisID:"LHS",data:[],lineTension:.1},{label:this.rhsCounter,yAxisID:"RHS",data:[],lineTension:.1}],options:{title:{text:"",display:!0},responsive:!0,maintainAspectRatio:!1,legend:{position:"top"},scales:{xAxes:[{position:"top",type:"time",time:{displayFormats:{quarter:"MMM YYYY"}},ticks:{maxRotation:0}}],yAxes:[{id:"LHS",type:"linear",position:"left"},{id:"RHS",type:"linear",position:"right"}]},tooltips:{enabled:!1,mode:"index",intersect:!1,position:"nearest",callbacks:{title:(t,e)=>{let n=0;if(t.length>0){const a=t[0];n=e.datasets[a.datasetIndex].data[a.index].x}return n.toString()}}}},chartType:"line"}}ngOnInit(){tt.isUndefined(this.mdsCounter)||(this.setChartTooltip(),this.updateChart())}ngOnChanges(){tt.isUndefined(this.mdsCounter)||this.updateChart()}setChartTooltip(){const t=new ba.a(this.chartCanvas,this.chartTooltip,t=>t.caretX+"px",t=>t.caretY-t.height-23+"px");t.getTitle=t=>ve(t,"x").format("LTS"),t.checkOffset=!0,tt.merge(this.chart,{options:{title:{text:this.mdsCounter.name},tooltips:{custom:e=>t.customTooltips(e)}}})}updateChart(){const t=[{data:this.convertTimeSeries(this.mdsCounter[this.lhsCounter])},{data:this.deltaTimeSeries(this.mdsCounter[this.rhsCounter])}];tt.merge(this.chart,{datasets:t}),this.chart.datasets=[...this.chart.datasets]}convertTimeSeries(t){const e=[];return tt.each(t,t=>{e.push({x:1e3*t[0],y:t[1]})}),e.shift(),e}deltaTimeSeries(t){let e,n=t[0];const a=[];for(e=1;e<t.length;e++){const r=t[e];a.push({x:1e3*r[0],y:r[1]-n[1]}),n=r}return a}}var Wf=s["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto auto 20px;cursor:pointer;overflow:visible;position:relative;height:500px;width:100%}']],data:{}});function Kf(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{chartCanvas:0}),s["ɵqud"](402653184,2,{chartTooltip:0}),(t()(),s["ɵeld"](2,0,null,null,4,"div",[["class","chart-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,[[1,0],["chartCanvas",1]],null,1,"canvas",[["baseChart",""]],null,null,null,null,null)),s["ɵdid"](4,999424,null,0,ga.a,[s.ElementRef,ga.c],{datasets:[0,"datasets"],options:[1,"options"],chartType:[2,"chartType"]},null),(t()(),s["ɵeld"](5,0,[[2,0],["chartTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.chart.datasets,n.chart.options,n.chart.chartType)}),null)}class $f{constructor(t,e,n){this.dimlessBinary=t,this.dimless=e,this.i18n=n,this.standbys=[],this.objectValues=Object.values}ngOnChanges(){this.setStandbys()}setStandbys(){this.standbys=[{key:this.i18n("Standby daemons"),value:this.data.standbys}]}ngOnInit(){this.columns={ranks:[{prop:"rank",name:this.i18n("Rank")},{prop:"state",name:this.i18n("State")},{prop:"mds",name:this.i18n("Daemon")},{prop:"activity",name:this.i18n("Activity"),cellTemplate:this.activityTmpl},{prop:"dns",name:this.i18n("Dentries"),pipe:this.dimless},{prop:"inos",name:this.i18n("Inodes"),pipe:this.dimless}],pools:[{prop:"pool",name:this.i18n("Pool")},{prop:"type",name:this.i18n("Type")},{prop:"size",name:this.i18n("Size"),pipe:this.dimlessBinary},{name:this.i18n("Usage"),cellTemplate:this.poolUsageTpl,comparator:(t,e,n,a)=>{const r=n.used/n.avail,i=a.used/a.avail;return r===i?0:r>i?1:-1}}]}}trackByFn(t,e){return e.name}}var Jf=s["ɵcrt"]({encapsulation:0,styles:[[".progress[_ngcontent-%COMP%]{margin-bottom:0}"]],data:{}});function Zf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"cd-cephfs-chart",[],null,null,null,Kf,Wf)),s["ɵdid"](3,638976,null,0,Uf,[],{mdsCounter:[0,"mdsCounter"]},null)],(function(t,e){t(e,3,0,e.context.$implicit)}),null)}function Qf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,ho.b,ho.a)),s["ɵdid"](1,573440,null,0,go.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(t,e){t(e,1,0,e.context.row.size,e.context.row.used)}),null)}function Xf(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" ",": "," /s\n"])),s["ɵppd"](1,1)],null,(function(t,e){var n="standby-replay"===e.context.row.state?"Evts":"Reqs",a=s["ɵunv"](e,0,1,t(e,1,0,s["ɵnov"](e.parent,0),e.context.value));t(e,0,0,n,a)}))}function th(t){return s["ɵvid"](0,[s["ɵpid"](0,ya.a,[Ia.a]),s["ɵqud"](402653184,1,{poolUsageTpl:0}),s["ɵqud"](402653184,2,{activityTmpl:0}),(t()(),s["ɵeld"](3,0,null,null,14,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,8,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ranks"])),(t()(),s["ɵeld"](7,0,null,null,1,"cd-table",[],null,null,null,Er.b,Er.a)),s["ɵdid"](8,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],toolHeader:[2,"toolHeader"]},null),(t()(),s["ɵeld"](9,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Standbys"])),(t()(),s["ɵeld"](11,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](12,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](13,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pools"])),(t()(),s["ɵeld"](16,0,null,null,1,"cd-table",[],null,null,null,Er.b,Er.a)),s["ɵdid"](17,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],toolHeader:[2,"toolHeader"]},null),(t()(),s["ɵeld"](18,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["MDS performance counters"])),(t()(),s["ɵand"](16777216,null,null,1,null,Zf)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵand"](0,[[1,2],["poolUsageTpl",2]],null,0,null,Qf)),(t()(),s["ɵand"](0,[[2,2],["activityTmpl",2]],null,0,null,Xf))],(function(t,e){var n=e.component;t(e,8,0,n.data.ranks,n.columns.ranks,!1),t(e,12,0,n.standbys),t(e,17,0,n.data.pools,n.columns.pools,!1),t(e,21,0,n.objectValues(n.data.mdsCounters),n.trackByFn)}),null)}var eh=n("C6Ij"),nh=n("AWcq");class ah{constructor(t,e,n,a,r,i){this.cephfsService=t,this.modalService=e,this.notificationService=n,this.authStorageService=a,this.i18n=r,this.actionLabels=i,this.triggerApiUpdate=new s.EventEmitter,this.selection=new Ur.a,this.permission=this.authStorageService.getPermissions().cephfs,this.tableActions=[{permission:"update",icon:bt.a.signOut,click:()=>this.evictClientModal(),name:this.actionLabels.EVICT}]}ngOnInit(){this.columns=[{prop:"id",name:this.i18n("id")},{prop:"type",name:this.i18n("type")},{prop:"state",name:this.i18n("state")},{prop:"version",name:this.i18n("version")},{prop:"hostname",name:this.i18n("Host")},{prop:"root",name:this.i18n("root")}]}updateSelection(t){this.selection=t}evictClient(t){this.cephfsService.evictClient(this.id,t).subscribe(()=>{this.triggerApiUpdate.emit(),this.modalRef.hide(),this.notificationService.show(de.a.success,this.i18n('Evicted client "{{clientId}}"',{clientId:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}evictClientModal(){const t=this.selection.first().id;this.modalRef=this.modalService.show(ds.a,{initialState:{itemDescription:"client",itemNames:[t],actionDescription:"evict",submitAction:()=>this.evictClient(t)}})}}var rh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ih(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,eh.b,eh.a)),s["ɵdid"](1,114688,null,0,nh.a,[],{status:[0,"status"]},null),(t()(),s["ɵeld"](2,0,null,null,3,"cd-table",[["selectionType","single"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](3,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],selectionType:[2,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](5,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.clients.status),t(e,3,0,n.clients.data,n.columns,"single"),t(e,5,0,n.permission,n.selection,n.tableActions)}),null)}var sh=n("yJti");class oh{constructor(t,e,n){this.ngZone=t,this.authStorageService=e,this.cephfsService=n,this.clients={data:[],status:sh.a.ValueNone},this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.directoriesSelected=!1,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection?this.selection.id!==this.id&&this.setupSelected(this.selection.id,this.selection.mdsmap.info):this.unsubscribeInterval()}setupSelected(t,e){this.id=t;const n=tt.first(Object.values(e));this.grafanaId=n&&n.name,this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.clients={data:[],status:sh.a.ValueNone},this.updateInterval()}updateInterval(){this.unsubscribeInterval(),this.subscribeInterval()}unsubscribeInterval(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe()}subscribeInterval(){this.ngZone.runOutsideAngular(()=>this.reloadSubscriber=Object(rf.a)(0,5e3).subscribe(()=>this.ngZone.run(()=>this.refresh())))}refresh(){this.cephfsService.getTabs(this.id).subscribe(t=>{this.data=t,this.softRefresh()},()=>{this.clients.status=sh.a.ValueException})}softRefresh(){const t=tt.cloneDeep(this.data);this.clients=t.clients,this.details={standbys:t.standbys,pools:t.pools,ranks:t.ranks,mdsCounters:t.mds_counters,name:t.name}}ngOnDestroy(){this.unsubscribeInterval()}}var uh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function lh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients"])),(t()(),s["ɵeld"](2,0,null,null,1,"span",[["class","badge badge-pill badge-tab ml-1"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""]))],null,(function(t,e){t(e,3,0,e.component.clients.data.length)}))}function dh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-cephfs-directories",[],null,null,null,Hf,Ff)),s["ɵdid"](1,638976,null,0,jf,[Q.a,Rt.b,qf,_e.a,he.a,It.b,mt.a,ma.a],{id:[0,"id"]},null)],(function(t,e){t(e,1,0,e.component.id)}),null)}function ch(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","tbO9LAiZz"]],null,null,null,Rr.b,Rr.a)),s["ɵdid"](3,638976,null,0,Ar.a,[kr.b,te.a,he.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"mds-performance?var-mds_servers=mds."+n.grafanaId,"one","tbO9LAiZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function fh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.softRefresh()&&a),a}),null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},{selectTab:"selectTab"}),(t()(),s["ɵeld"](4,0,null,null,1,"cd-cephfs-detail",[],null,null,null,th,Jf)),s["ɵdid"](5,638976,null,0,$f,[ma.a,ya.a,he.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](6,0,null,0,5,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.softRefresh()&&a),a}),null,null)),s["ɵdid"](7,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],null,{selectTab:"selectTab"}),(t()(),s["ɵand"](0,null,null,1,null,lh)),s["ɵdid"](9,16384,null,0,aa.c,[s.TemplateRef,aa.b],null,null),(t()(),s["ɵeld"](10,0,null,null,1,"cd-cephfs-clients",[],null,[[null,"triggerApiUpdate"]],(function(t,e,n){var a=!0;return"triggerApiUpdate"===e&&(a=!1!==t.component.refresh()&&a),a}),ih,rh)),s["ɵdid"](11,114688,null,0,ah,[qf,Rt.b,mt.a,Q.a,he.a,It.b],{id:[0,"id"],clients:[1,"clients"]},{triggerApiUpdate:"triggerApiUpdate"}),(t()(),s["ɵeld"](12,0,null,0,3,"tab",[["heading","Directories"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=0!=(t.component.directoriesSelected=!0)&&a),a}),null,null)),s["ɵdid"](13,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,dh)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ch)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.details),t(e,7,0),t(e,11,0,n.id,n.clients),t(e,13,0,"Directories"),t(e,15,0,n.directoriesSelected),t(e,17,0,n.grafanaPermission.read&&n.grafanaId)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby),t(e,12,0,s["ɵnov"](e,13).id,s["ɵnov"](e,13).active,s["ɵnov"](e,13).addClass,s["ɵnov"](e,13).role,s["ɵnov"](e,13).ariaLabelledby)}))}function hh(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,fh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}class gh extends ls.a{constructor(t,e,n){super(),this.cephfsService=t,this.cdDatePipe=e,this.i18n=n,this.filesystems=[],this.selection=new Ur.a}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"mdsmap.fs_name",flexGrow:2},{name:this.i18n("Created"),prop:"mdsmap.created",flexGrow:2,pipe:this.cdDatePipe},{name:this.i18n("Enabled"),prop:"mdsmap.enabled",flexGrow:1,cellTransformation:Hr.a.checkIcon}]}loadFilesystems(t){this.cephfsService.list().subscribe(t=>{this.filesystems=t},()=>{t.error()})}updateSelection(t){this.selection=t}}var ph=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function bh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.loadFilesystems(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](1,2867200,null,0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](2,0,null,3,1,"cd-cephfs-tabs",[["cdTableDetail",""]],null,null,null,hh,uh)),s["ɵdid"](3,704512,null,0,oh,[s.NgZone,Q.a,qf],{selection:[0,"selection"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.filesystems,n.columns,"flex",!0,"id","true","single"),t(e,3,0,n.expandedRow)}),null)}function mh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-cephfs-list",[],null,null,null,bh,ph)),s["ɵdid"](1,114688,null,0,gh,[qf,_e.a,he.a],null,null)],(function(t,e){t(e,1,0)}),null)}var yh=s["ɵccf"]("cd-cephfs-list",gh,mh,{},{},[]),vh=n("D4zM"),xh=n("1nQr");class _h{constructor(t,e,n,a,r,i,s,o){this.i18n=t,this.actionLabels=e,this.notificationService=n,this.userService=a,this.authStorageService=r,this.formBuilder=i,this.router=s,this.passwordPolicyService=o,this.passwordPolicyHelpText="",this.icons=bt.a,this.action=this.actionLabels.CHANGE,this.resource=this.i18n("password"),this.createForm()}createForm(){this.passwordPolicyService.getHelpText().subscribe(t=>{this.passwordPolicyHelpText=t}),this.userForm=this.formBuilder.group({oldpassword:[null,[$.B.required,js.a.custom("notmatch",()=>this.userForm&&this.userForm.getValue("newpassword")===this.userForm.getValue("oldpassword"))]],newpassword:[null,[$.B.required,js.a.custom("notmatch",()=>this.userForm&&this.userForm.getValue("oldpassword")===this.userForm.getValue("newpassword"))],[js.a.passwordPolicy(this.userService,()=>this.authStorageService.getUsername(),(t,e,n)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(e),this.passwordValuation=tt.defaultTo(n,"")})]],confirmnewpassword:[null,[$.B.required]]},{validators:[js.a.match("newpassword","confirmnewpassword")]})}onSubmit(){if(this.userForm.pristine)return;const t=this.authStorageService.getUsername(),e=this.userForm.getValue("oldpassword"),n=this.userForm.getValue("newpassword");this.userService.changePassword(t,e,n).subscribe(()=>this.onPasswordChange(),()=>{this.userForm.setErrors({cdSubmitButton:!0})})}onPasswordChange(){this.notificationService.show(de.a.success,this.i18n('Updated user password"')),this.router.navigate(["/login"])}}var Th=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Oh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function wh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function Sh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-helper",[["class","text-pre"]],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],{class:[0,"class"],html:[1,"html"]},null)],(function(t,e){t(e,1,0,"text-pre",s["ɵinlineInterpolate"](1,"",e.component.passwordPolicyHelpText,""))}),null)}function Ih(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Nh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function Ch(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.passwordValuation)}))}function Rh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Ah(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password confirmation doesn't match the new password."]))],null,null)}function kh(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),(t()(),s["ɵeld"](2,0,null,null,96,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,95,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,5).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,5).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit()&&a),a}),null,null)),s["ɵdid"](4,16384,null,0,$.G,[],null,null),s["ɵdid"](5,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](7,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](8,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](9,0,null,null,89,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](11,null,[""," ",""])),s["ɵppd"](12,1),s["ɵppd"](13,1),(t()(),s["ɵeld"](14,0,null,null,77,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](16,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](19,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","oldpassword"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Old password"])),(t()(),s["ɵeld"](21,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,8,"input",[["autocomplete","new-password"],["autofocus",""],["class","form-control"],["formControlName","oldpassword"],["id","oldpassword"],["placeholder","Old password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,24)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,24).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,24)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,24)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](24,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](26,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](28,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](29,4210688,null,0,ks.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](30,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](31,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](32,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](33,0,null,null,1,"button",[["cdPasswordButton","oldpassword"],["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,34).onClick()&&a),a}),null,null)),s["ɵdid"](34,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Oh)),s["ɵdid"](36,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wh)),s["ɵdid"](38,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](39,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](40,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](43,0,null,0,4,"label",[["class","cd-col-form-label"],["for","newpassword"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New password"])),(t()(),s["ɵand"](16777216,null,null,1,null,Sh)),s["ɵdid"](47,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](48,0,null,0,20,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](50,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","newpassword"],["id","newpassword"],["placeholder","Password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,51)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,51).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,51)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,51)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](51,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](53,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](55,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](56,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](57,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](58,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,1,"button",[["cdPasswordButton","newpassword"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,60).onClick()&&a),a}),null,null)),s["ɵdid"](60,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](61,0,null,null,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(t()(),s["ɵeld"](62,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ih)),s["ɵdid"](64,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nh)),s["ɵdid"](66,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ch)),s["ɵdid"](68,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](69,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](70,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](73,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","confirmnewpassword"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Confirm new password"])),(t()(),s["ɵeld"](75,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](76,0,null,null,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](77,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","confirmnewpassword"],["id","confirmnewpassword"],["placeholder","Confirm new password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,78)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,78).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,78)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,78)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](78,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](80,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](82,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](83,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](84,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](85,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](86,0,null,null,1,"button",[["cdPasswordButton","confirmnewpassword"],["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,87).onClick()&&a),a}),null,null)),s["ɵdid"](87,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rh)),s["ɵdid"](89,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ah)),s["ɵdid"](91,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](92,0,null,null,6,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](93,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](94,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](95,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](96,0,[" "," "," "])),s["ɵppd"](97,1),s["ɵppd"](98,1)],(function(t,e){var n=e.component;t(e,5,0,n.userForm),t(e,8,0,n.userForm),t(e,16,0),t(e,26,0,"oldpassword"),t(e,29,0,""),t(e,31,0,"oldpassword"),t(e,34,0,"oldpassword"),t(e,36,0,n.userForm.showError("oldpassword",s["ɵnov"](e,5),"required")),t(e,38,0,n.userForm.showError("oldpassword",s["ɵnov"](e,5),"notmatch")),t(e,40,0),t(e,47,0,n.passwordPolicyHelpText.length>0),t(e,53,0,"newpassword"),t(e,57,0,"newpassword"),t(e,60,0,"newpassword"),t(e,64,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"required")),t(e,66,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"notmatch")),t(e,68,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"passwordPolicy")),t(e,70,0),t(e,80,0,"confirmnewpassword"),t(e,84,0,"confirmnewpassword"),t(e,87,0,"confirmnewpassword"),t(e,89,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,5),"required")),t(e,91,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,5),"match")),t(e,95,0,n.userForm)}),(function(t,e){var n=e.component;t(e,3,0,s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending);var a=s["ɵunv"](e,11,0,t(e,12,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,11,1,t(e,13,0,s["ɵnov"](e,1),n.resource));t(e,11,0,a,r),t(e,15,0,s["ɵnov"](e,16).hasErrors,s["ɵnov"](e,16).hasSuccess),t(e,23,0,s["ɵnov"](e,28).ngClassUntouched,s["ɵnov"](e,28).ngClassTouched,s["ɵnov"](e,28).ngClassPristine,s["ɵnov"](e,28).ngClassDirty,s["ɵnov"](e,28).ngClassValid,s["ɵnov"](e,28).ngClassInvalid,s["ɵnov"](e,28).ngClassPending,s["ɵnov"](e,31).validClass,s["ɵnov"](e,31).invalidClass),t(e,39,0,s["ɵnov"](e,40).hasErrors,s["ɵnov"](e,40).hasSuccess),t(e,50,0,s["ɵnov"](e,55).ngClassUntouched,s["ɵnov"](e,55).ngClassTouched,s["ɵnov"](e,55).ngClassPristine,s["ɵnov"](e,55).ngClassDirty,s["ɵnov"](e,55).ngClassValid,s["ɵnov"](e,55).ngClassInvalid,s["ɵnov"](e,55).ngClassPending,s["ɵnov"](e,57).validClass,s["ɵnov"](e,57).invalidClass),t(e,62,0,s["ɵinlineInterpolate"](1,"",n.passwordStrengthLevelClass,""),s["ɵinlineInterpolate"](1,"",n.passwordValuation,"")),t(e,69,0,s["ɵnov"](e,70).hasErrors,s["ɵnov"](e,70).hasSuccess),t(e,77,0,s["ɵnov"](e,82).ngClassUntouched,s["ɵnov"](e,82).ngClassTouched,s["ɵnov"](e,82).ngClassPristine,s["ɵnov"](e,82).ngClassDirty,s["ɵnov"](e,82).ngClassValid,s["ɵnov"](e,82).ngClassInvalid,s["ɵnov"](e,82).ngClassPending,s["ɵnov"](e,84).validClass,s["ɵnov"](e,84).invalidClass);var i=s["ɵunv"](e,96,0,t(e,97,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,96,1,t(e,98,0,s["ɵnov"](e,1),n.resource));t(e,96,0,i,o)}))}function Eh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-user-password-form",[],null,null,null,kh,Th)),s["ɵdid"](1,49152,null,0,_h,[he.a,It.b,mt.a,St.a,Q.a,Yo.a,Lt.m,xh.a],null,null)],null,null)}var Lh=s["ɵccf"]("cd-user-password-form",_h,Eh,{},{},[]);class Dh{constructor(t,e){this.route=t,this.i18n=e,this.message=this.i18n("The NFS Ganesha service is not configured.")}ngOnInit(){this.routeParamsSubscribe=this.route.params.subscribe(t=>{this.message=t.message})}ngOnDestroy(){this.routeParamsSubscribe.unsubscribe()}}var Ph=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Mh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["type","info"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"]},null),(t()(),s["ɵted"](2,0,[" ",""])),(t()(),s["ɵeld"](3,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,0,4,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Please consult the "])),(t()(),s["ɵeld"](6,0,null,null,1,"cd-doc",[["section","nfs-ganesha"]],null,null,null,jr.b,jr.a)),s["ɵdid"](7,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,null,[" on how to configure and enable the NFS Ganesha management functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,7,0,"nfs-ganesha")}),(function(t,e){t(e,2,0,e.component.message)}))}function qh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-nfs-501",[],null,null,null,Mh,Ph)),s["ɵdid"](1,245760,null,0,Dh,[Lt.a,he.a],null,null)],(function(t,e){t(e,1,0)}),null)}var jh=s["ɵccf"]("cd-nfs-501",Dh,qh,{},{},[]);class Fh{constructor(t){this.i18n=t,this.clients=[],this.clientsColumns=[{name:this.i18n("Addresses"),prop:"addresses",flexGrow:2},{name:this.i18n("Access Type"),prop:"access_type",flexGrow:1},{name:this.i18n("Squash"),prop:"squash",flexGrow:1}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.clients=this.selectedItem.clients,this.data={},this.data[this.i18n("Cluster")]=this.selectedItem.cluster_id,this.data[this.i18n("Daemons")]=this.selectedItem.daemons,this.data[this.i18n("NFS Protocol")]=this.selectedItem.protocols.map(t=>"NFSv"+t),this.data[this.i18n("Pseudo")]=this.selectedItem.pseudo,this.data[this.i18n("Access Type")]=this.selectedItem.access_type,this.data[this.i18n("Squash")]=this.selectedItem.squash,this.data[this.i18n("Transport")]=this.selectedItem.transports,this.data[this.i18n("Path")]=this.selectedItem.path,"CEPH"===this.selectedItem.fsal.name?(this.data[this.i18n("Storage Backend")]=this.i18n("CephFS"),this.data[this.i18n("CephFS User")]=this.selectedItem.fsal.user_id,this.data[this.i18n("CephFS Filesystem")]=this.selectedItem.fsal.fs_name,this.data[this.i18n("Security Label")]=this.selectedItem.fsal.sec_label_xattr):(this.data[this.i18n("Storage Backend")]=this.i18n("Object Gateway"),this.data[this.i18n("Object Gateway User")]=this.selectedItem.fsal.rgw_user_id))}}var Gh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Vh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,na.b,na.a)),s["ɵdid"](1,180224,null,0,aa.e,[aa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,fi.b,fi.a)),s["ɵdid"](5,638976,null,0,hi.a,[_e.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](6,0,null,0,3,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,aa.b,[aa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](8,0,null,null,1,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","addresses"],["selectionType",""]],null,null,null,Er.b,Er.a)),s["ɵdid"](9,2867200,[["table",4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.data),t(e,7,0,s["ɵinlineInterpolate"](1,"Clients (",n.clients.length,")")),t(e,9,0,n.clients,n.clientsColumns,"flex","addresses","true","")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby)}))}function zh(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Vh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}var Bh=n("VTlA");let Yh=(()=>{class t{constructor(t,e){this.http=t,this.i18n=e,this.apiPath="api/nfs-ganesha",this.uiApiPath="ui-api/nfs-ganesha",this.nfsAccessType=[{value:"RW",help:this.i18n("Allows all operations")},{value:"RO",help:this.i18n("Allows only operations that do not modify the server")},{value:"MDONLY",help:this.i18n("Does not allow read or write operations, but allows any other operation")},{value:"MDONLY_RO",help:this.i18n("Does not allow read, write, or any operation that modifies file        attributes or directory content")},{value:"NONE",help:this.i18n("Allows no access at all")}],this.nfsFsal=[{value:"CEPH",descr:this.i18n("CephFS")},{value:"RGW",descr:this.i18n("Object Gateway")}],this.nfsSquash=["no_root_squash","root_id_squash","root_squash","all_squash"]}list(){return this.http.get(this.apiPath+"/export")}get(t,e){return this.http.get(`${this.apiPath}/export/${t}/${e}`)}create(t){return this.http.post(this.apiPath+"/export",t,{observe:"response"})}update(t,e,n){return this.http.put(`${this.apiPath}/export/${t}/${e}`,n,{observe:"response"})}delete(t,e){return this.http.delete(`${this.apiPath}/export/${t}/${e}`,{observe:"response"})}lsDir(t,e){return this.http.get(`${this.uiApiPath}/lsdir/${t}?root_dir=${e}`)}buckets(t){return this.http.get(`${this.uiApiPath}/rgw/buckets?user_id=${t}`)}clients(){return this.http.get(this.uiApiPath+"/cephx/clients")}fsals(){return this.http.get(this.uiApiPath+"/fsals")}filesystems(){return this.http.get(this.uiApiPath+"/cephfs/filesystems")}daemon(){return this.http.get(this.apiPath+"/daemon")}start(t){return this.http.put(`${this.apiPath}/service/${t}/start`,null,{observe:"response"})}stop(t){return this.http.put(`${this.apiPath}/service/${t}/stop`,null,{observe:"response"})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](he.a))},token:t,providedIn:ue.a}),t})();class Hh extends ls.a{constructor(t,e,n,a,r,i,s){super(),this.authStorageService=t,this.i18n=e,this.modalService=n,this.nfsService=a,this.taskListService=r,this.taskWrapper=i,this.actionLabels=s,this.selection=new Ur.a,this.isDefaultCluster=!1,this.builders={"nfs/create":t=>({path:t.path,cluster_id:t.cluster_id,fsal:t.fsal})},this.permission=this.authStorageService.getPermissions().nfs;const o=()=>this.selection.first()&&`${encodeURI(this.selection.first().cluster_id)}/${encodeURI(this.selection.first().export_id)}`;this.tableActions=[{permission:"create",icon:bt.a.add,routerLink:()=>"/nfs/create",canBePrimary:t=>!t.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:bt.a.edit,routerLink:()=>"/nfs/edit/"+o(),name:this.actionLabels.EDIT},{permission:"delete",icon:bt.a.destroy,click:()=>this.deleteNfsModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Path"),prop:"path",flexGrow:2,cellTransformation:Hr.a.executing},{name:this.i18n("Pseudo"),prop:"pseudo",flexGrow:2},{name:this.i18n("Cluster"),prop:"cluster_id",flexGrow:2},{name:this.i18n("Daemons"),prop:"daemons",flexGrow:2},{name:this.i18n("Storage Backend"),prop:"fsal",flexGrow:2,cellTemplate:this.nfsFsal},{name:this.i18n("Access Type"),prop:"access_type",flexGrow:2}],this.nfsService.daemon().subscribe(t=>{const e=tt(t).map(t=>t.cluster_id).uniq().value();this.isDefaultCluster=1===e.length&&"_default_"===e[0],this.columns[2].isHidden=this.isDefaultCluster,this.table&&this.table.updateColumns(),this.taskListService.init(()=>this.nfsService.list(),t=>this.prepareResponse(t),t=>this.exports=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)},()=>{this.onFetchError()})}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}prepareResponse(t){let e=[];return t.forEach(t=>{t.id=`${t.cluster_id}:${t.export_id}`,t.state="LOADING",e=e.concat(t)}),e}onFetchError(){this.table.reset(),this.viewCacheStatus={status:sh.a.ValueException}}itemFilter(t,e){return t.cluster_id===e.metadata.cluster_id&&t.export_id===e.metadata.export_id}taskFilter(t){return["nfs/create","nfs/delete","nfs/edit"].includes(t.name)}updateSelection(t){this.selection=t}deleteNfsModal(){const t=this.selection.first().cluster_id,e=this.selection.first().export_id;this.modalRef=this.modalService.show(ds.a,{initialState:{itemDescription:this.i18n("NFS export"),itemNames:[`${t}:${e}`],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new fs.a("nfs/delete",{cluster_id:t,export_id:e}),call:this.nfsService.delete(t,e)})}})}}var Uh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Wh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS"]))],null,null)}function Kh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway"]))],null,null)}function $h(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Wh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kh)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,"CEPH"===e.context.value.name),t(e,3,0,"RGW"===e.context.value.name)}),null)}function Jh(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{nfsState:0}),s["ɵqud"](402653184,2,{nfsFsal:0}),s["ɵqud"](402653184,3,{table:0}),(t()(),s["ɵeld"](3,0,null,null,6,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Er.b,Er.a)),s["ɵdid"](4,2867200,[[3,4],["table",4]],0,Lr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](5,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,Dr.b,Dr.a)),s["ɵdid"](7,114688,null,0,Pr.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](8,0,null,3,1,"cd-nfs-details",[["cdTableDetail",""]],null,null,null,zh,Gh)),s["ɵdid"](9,573440,null,0,Fh,[he.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[2,2],["nfsFsal",2]],null,0,null,$h))],(function(t,e){var n=e.component;t(e,4,0,n.exports,n.columns,"flex",!0,"id","true","single"),t(e,7,0,n.permission,n.selection,n.tableActions),t(e,9,0,n.expandedRow)}),null)}function Zh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-nfs-list",[],null,null,null,Jh,Uh)),s["ɵprd"](131584,null,Bh.a,Bh.a,[Le.a,yt.a]),s["ɵdid"](2,245760,null,0,Hh,[Q.a,he.a,Rt.b,Yh,Bh.a,ms.a,It.b],null,null)],(function(t,e){t(e,2,0)}),null)}var Qh=s["ɵccf"]("cd-nfs-list",Hh,Zh,{},{},[]),Xh=n("hpHm");function tg(t){return!!t&&(t instanceof Nn.a||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var eg=n("7o/Q");function ng(t,e=Ra.a){return n=>n.lift(new ag(t,e))}class ag{constructor(t,e){this.dueTime=t,this.scheduler=e}call(t,e){return e.subscribe(new rg(t,this.dueTime,this.scheduler))}}class rg extends eg.a{constructor(t,e,n){super(t),this.dueTime=e,this.scheduler=n,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(ig,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:t}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(t)}}clearDebounce(){const t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)}}function ig(t){t.debouncedNext()}var sg=n("eIep");const og={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x"};class ug{constructor(t,e=t,n=!1){this.item=t,this.value=e,this.header=n}isHeader(){return this.header}toString(){return this.value}}function lg(t){return t?t.replace(/[^A-Za-z0-9\[\] ]/g,(function(t){return og[t]||t})):""}function dg(t,e=" ",n=""){const a=t.split(new RegExp(`(?:[${n}])([^${n}]+)(?:[${n}])|([^${e}]+)`,"g")),r=[],i=a.length;let s;const o=new RegExp(`[${n}]+`,"g");for(let u=0;u<i;u+=1)s=a[u],s&&s.length&&s!==e&&r.push(s.replace(o,""));return r}function cg(t,e){if(!e||"object"!=typeof t)return t.toString();if(e.endsWith("()"))return t[e.slice(0,e.length-2)]().toString();const n=e.replace(/\[(\w+)\]/g,".$1").replace(/^\./,"").split(".");for(const a of n)a in t&&(t=t[a]);return t?t.toString():""}class fg{constructor(t,e,n,a){this.positionService=t,this.renderer=e,this.element=n,this.changeDetectorRef=a,this.isFocused=!1,this.height=0,this._matches=[],this.isScrolledIntoView=function(t){const e=this.ulElement.nativeElement.scrollTop,n=e+Number(this.ulElement.nativeElement.offsetHeight),a=t.offsetTop;return a+t.offsetHeight<=n&&a>=e},this.positionServiceSubscription=this.positionService.event$.subscribe(()=>{if(this.isAnimated)return this.animationState=this.isTopPosition?"animated-up":"animated-down",void this.changeDetectorRef.detectChanges();this.animationState="unanimated",this.changeDetectorRef.detectChanges()})}get isBs4(){return!Object(Xh.d)()}get active(){return this._active}get matches(){return this._matches}set matches(t){if(this.positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition}},allowedPositions:["top","bottom"]}),this._matches=t,this.needScrollbar=this.typeaheadScrollable&&this.typeaheadOptionsInScrollableView<this.matches.length,this.typeaheadScrollable&&setTimeout(()=>{this.setScrollableMode()}),this.typeaheadIsFirstItemActive&&this._matches.length>0&&(this._active=this._matches[0],this._active.isHeader()&&this.nextActiveMatch()),this._active&&!this.typeaheadIsFirstItemActive){const t=this._matches.find(t=>t.value===this._active.value);if(t)return void this.selectActive(t);this._active=null}}get isTopPosition(){return this.element.nativeElement.classList.contains("top")}get optionsListTemplate(){return this.parent?this.parent.optionsListTemplate:void 0}get isAnimated(){return!!this.parent&&this.parent.isAnimated}get adaptivePosition(){return!!this.parent&&this.parent.adaptivePosition}get typeaheadScrollable(){return!!this.parent&&this.parent.typeaheadScrollable}get typeaheadOptionsInScrollableView(){return this.parent?this.parent.typeaheadOptionsInScrollableView:5}get typeaheadIsFirstItemActive(){return!this.parent||this.parent.typeaheadIsFirstItemActive}get itemTemplate(){return this.parent?this.parent.typeaheadItemTemplate:void 0}selectActiveMatch(t){this._active&&this.parent.typeaheadSelectFirstItem&&this.selectMatch(this._active),!this.parent.typeaheadSelectFirstItem&&t&&this.selectMatch(this._active)}prevActiveMatch(){const t=this.matches.indexOf(this._active);this._active=this.matches[t-1<0?this.matches.length-1:t-1],this._active.isHeader()&&this.prevActiveMatch(),this.typeaheadScrollable&&this.scrollPrevious(t)}nextActiveMatch(){const t=this.matches.indexOf(this._active);this._active=this.matches[t+1>this.matches.length-1?0:t+1],this._active.isHeader()&&this.nextActiveMatch(),this.typeaheadScrollable&&this.scrollNext(t)}selectActive(t){this.isFocused=!0,this._active=t}highlight(t,e){let n,a,r=t.value,i=(this.parent&&this.parent.typeaheadLatinize?lg(r):r).toLowerCase();if("object"==typeof e){const t=e.length;for(let s=0;s<t;s+=1)n=i.indexOf(e[s]),a=e[s].length,n>=0&&a>0&&(r=`${r.substring(0,n)}<strong>${r.substring(n,n+a)}</strong>`+r.substring(n+a),i=`${i.substring(0,n)}        ${" ".repeat(a)}         `+i.substring(n+a))}else e&&(n=i.indexOf(e),a=e.length,n>=0&&a>0&&(r=`${r.substring(0,n)}<strong>${r.substring(n,n+a)}</strong>`+r.substring(n+a)));return r}focusLost(){this.isFocused=!1}isActive(t){return this._active===t}selectMatch(t,e){return e&&(e.stopPropagation(),e.preventDefault()),this.parent.changeModel(t),setTimeout(()=>this.parent.typeaheadOnSelect.emit(t),0),!1}setScrollableMode(){if(this.ulElement||(this.ulElement=this.element),this.liElements.first){const t=Xh.b.getStyles(this.ulElement.nativeElement),e=Xh.b.getStyles(this.liElements.first.nativeElement),n=parseFloat((t["padding-bottom"]?t["padding-bottom"]:"").replace("px","")),a=parseFloat((t["padding-top"]?t["padding-top"]:"0").replace("px","")),r=parseFloat((e.height?e.height:"0").replace("px",""));this.guiHeight=this.typeaheadOptionsInScrollableView*r+a+n+"px"}this.renderer.setStyle(this.element.nativeElement,"visibility","visible")}scrollPrevious(t){if(0!==t){if(this.liElements){const e=this.liElements.toArray()[t-1];e&&!this.isScrolledIntoView(e.nativeElement)&&(this.ulElement.nativeElement.scrollTop=e.nativeElement.offsetTop)}}else this.scrollToBottom()}scrollNext(t){if(t+1>this.matches.length-1)this.scrollToTop();else if(this.liElements){const e=this.liElements.toArray()[t+1];e&&!this.isScrolledIntoView(e.nativeElement)&&(this.ulElement.nativeElement.scrollTop=e.nativeElement.offsetTop-Number(this.ulElement.nativeElement.offsetHeight)+Number(e.nativeElement.offsetHeight))}}ngOnDestroy(){this.positionServiceSubscription.unsubscribe()}scrollToBottom(){this.ulElement.nativeElement.scrollTop=this.ulElement.nativeElement.scrollHeight}scrollToTop(){this.ulElement.nativeElement.scrollTop=0}}class hg{constructor(){this.adaptivePosition=!1,this.isAnimated=!1,this.hideResultsOnBlur=!0,this.selectFirstItem=!0,this.isFirstItemActive=!0,this.minLength=1}}class gg{constructor(t,e,n,a,r,i,o){this.changeDetection=n,this.element=a,this.ngControl=r,this.renderer=i,this.typeaheadMinLength=void 0,this.isAnimated=!1,this.typeaheadAsync=void 0,this.typeaheadLatinize=!0,this.typeaheadSingleWords=!0,this.typeaheadWordDelimiters=" ",this.typeaheadPhraseDelimiters="'\"",this.typeaheadScrollable=!1,this.typeaheadOptionsInScrollableView=5,this.typeaheadSelectFirstItem=!0,this.typeaheadIsFirstItemActive=!0,this.typeaheadLoading=new s.EventEmitter,this.typeaheadNoResults=new s.EventEmitter,this.typeaheadOnSelect=new s.EventEmitter,this.typeaheadOnBlur=new s.EventEmitter,this.dropup=!1,this.isActiveItemChanged=!1,this.isTypeaheadOptionsListActive=!1,this.keyUpEventEmitter=new s.EventEmitter,this.placement="bottom-left",this._subscriptions=[],this._typeahead=t.createLoader(a,o,i).provide({provide:hg,useValue:e}),Object.assign(this,{typeaheadHideResultsOnBlur:e.hideResultsOnBlur,typeaheadSelectFirstItem:e.selectFirstItem,typeaheadIsFirstItemActive:e.isFirstItemActive,typeaheadMinLength:e.minLength,adaptivePosition:e.adaptivePosition,isAnimated:e.isAnimated})}ngOnInit(){this.typeaheadOptionsLimit=this.typeaheadOptionsLimit||20,this.typeaheadMinLength=void 0===this.typeaheadMinLength?1:this.typeaheadMinLength,this.typeaheadWaitMs=this.typeaheadWaitMs||0,void 0!==this.typeaheadAsync||tg(this.typeahead)||(this.typeaheadAsync=!1),tg(this.typeahead)&&(this.typeaheadAsync=!0),this.typeaheadAsync?this.asyncActions():this.syncActions()}onInput(t){const e=void 0!==t.target.value?t.target.value:void 0!==t.target.textContent?t.target.textContent:t.target.innerText;null!=e&&e.trim().length>=this.typeaheadMinLength?(this.typeaheadLoading.emit(!0),this.keyUpEventEmitter.emit(t.target.value)):(this.typeaheadLoading.emit(!1),this.typeaheadNoResults.emit(!1),this.hide())}onChange(t){if(this._container){if(27===t.keyCode||"Escape"===t.key)return void this.hide();if(38===t.keyCode||"ArrowUp"===t.key)return this.isActiveItemChanged=!0,void this._container.prevActiveMatch();if(40===t.keyCode||"ArrowDown"===t.key)return this.isActiveItemChanged=!0,void this._container.nextActiveMatch();if(13===t.keyCode||"Enter"===t.key)return void this._container.selectActiveMatch()}}onFocus(){0===this.typeaheadMinLength&&(this.typeaheadLoading.emit(!0),this.keyUpEventEmitter.emit(this.element.nativeElement.value||""))}onBlur(){this._container&&!this._container.isFocused&&this.typeaheadOnBlur.emit(this._container.active)}onKeydown(t){if(this._container&&(9===t.keyCode||"Tab"===t.key||13===t.keyCode||"Enter"===t.key)){if(t.preventDefault(),this.typeaheadSelectFirstItem)return void this._container.selectActiveMatch();this.typeaheadSelectFirstItem||(this._container.selectActiveMatch(this.isActiveItemChanged),this.isActiveItemChanged=!1,this.hide())}}changeModel(t){const e=t.value;this.ngControl.viewToModelUpdate(e),this.ngControl.control.setValue(e),this.changeDetection.markForCheck(),this.hide()}get matches(){return this._matches}show(){this._typeahead.attach(fg).to(this.container).position({attachment:(this.dropup?"top":"bottom")+" start"}).show({typeaheadRef:this,placement:this.placement,animation:!1,dropup:this.dropup}),this._outsideClickListener=this.renderer.listen("document","click",t=>{0===this.typeaheadMinLength&&this.element.nativeElement.contains(t.target)||this.typeaheadHideResultsOnBlur&&!this.element.nativeElement.contains(t.target)&&this.onOutsideClick()}),this._container=this._typeahead.instance,this._container.parent=this;const t=(this.typeaheadLatinize?lg(this.ngControl.control.value):this.ngControl.control.value).toString().toLowerCase();this._container.query=this.typeaheadSingleWords?dg(t,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):t,this._container.matches=this._matches,this.element.nativeElement.focus()}hide(){this._typeahead.isShown&&(this._typeahead.hide(),this._outsideClickListener(),this._container=null)}onOutsideClick(){this._container&&!this._container.isFocused&&this.hide()}ngOnDestroy(){for(const t of this._subscriptions)t.unsubscribe();this._typeahead.dispose()}asyncActions(){this._subscriptions.push(this.keyUpEventEmitter.pipe(ng(this.typeaheadWaitMs),Object(sg.a)(t=>this.typeahead.pipe(Object(Ce.a)(e=>{const n=this.normalizeQuery(t);return e.filter(t=>t&&this.testMatch(this.normalizeOption(t),n))})))).subscribe(t=>{this.finalizeAsyncCall(t)}))}syncActions(){this._subscriptions.push(this.keyUpEventEmitter.pipe(ng(this.typeaheadWaitMs),Object(An.a)(t=>{const e=this.normalizeQuery(t);return Object(Cn.a)(this.typeahead).pipe(Object(Rn.a)(t=>t&&this.testMatch(this.normalizeOption(t),e)),qn())})).subscribe(t=>{this.finalizeAsyncCall(t)}))}normalizeOption(t){const e=cg(t,this.typeaheadOptionField);return(this.typeaheadLatinize?lg(e):e).toLowerCase()}normalizeQuery(t){let e=(this.typeaheadLatinize?lg(t):t).toString().toLowerCase();return e=this.typeaheadSingleWords?dg(e,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):e,e}testMatch(t,e){let n;if("object"==typeof e){n=e.length;for(let a=0;a<n;a+=1)if(e[a].length>0&&t.indexOf(e[a])<0)return!1;return!0}return t.indexOf(e)>=0}finalizeAsyncCall(t){if(this.prepareMatches(t||[]),this.typeaheadLoading.emit(!1),this.typeaheadNoResults.emit(!this.hasMatches()),this.hasMatches())if(this._container){const t=((this.typeaheadLatinize?lg(this.ngControl.control.value):this.ngControl.control.value)||"").toString().toLowerCase();this._container.query=this.typeaheadSingleWords?dg(t,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):t,this._container.matches=this._matches}else this.show();else this.hide()}prepareMatches(t){const e=t.slice(0,this.typeaheadOptionsLimit);if(this.typeaheadGroupField){let t=[];e.map(t=>cg(t,this.typeaheadGroupField)).filter((t,e,n)=>n.indexOf(t)===e).forEach(n=>{t.push(new ug(n,n,!0)),t=t.concat(e.filter(t=>cg(t,this.typeaheadGroupField)===n).map(t=>new ug(t,cg(t,this.typeaheadOptionField))))}),this._matches=t}else this._matches=e.map(t=>new ug(t,cg(t,this.typeaheadOptionField)))}hasMatches(){return this._matches.length>0}}class pg{static forRoot(){return{ngModule:pg,providers:[W.a,ia.a,hg]}}}var bg=n("WiuZ"),mg=n("wnGv"),yg=n("TYzs");class vg{constructor(t,e){this.nfsService=t,this.i18n=e,this.nfsSquash=this.nfsService.nfsSquash,this.nfsAccessType=this.nfsService.nfsAccessType,this.icons=bt.a}getNoAccessTypeDescr(){return this.form.getValue("access_type")?`${this.form.getValue("access_type")} ${this.i18n("(inherited from global config)")}`:this.i18n("-- Select the access type --")}getAccessTypeHelp(t){const e=this.nfsAccessType.find(e=>this.getValue(t,"access_type")===e.value);return tt.isObjectLike(e)?e.help:""}getNoSquashDescr(){return this.form.getValue("squash")?`${this.form.getValue("squash")} (${this.i18n("inherited from global config")})`:this.i18n("-- Select what kind of user id squashing is performed --")}addClient(){const t=this.form.get("clients"),e="(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}).([0-9]{1,3})([/](\\d|[1-2]\\d|3[0-2]))?)",n=new qs.a({addresses:new $.i("",{validators:[$.B.required,$.B.pattern(`${e}([ ,]{1,2}${e})*`)]}),access_type:new $.i(""),squash:new $.i("")});return t.push(n),n}removeClient(t){this.form.get("clients").removeAt(t)}showError(t,e,n,a){return this.form.controls.clients.controls[t].showError(e,n,a)}getValue(t,e){return this.form.get("clients").at(t).getValue(e)}resolveModel(t){tt.forEach(t,t=>{this.addClient().patchValue(t)})}trackByFn(t){return t}}var xg=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function _g(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[["class","no-border text-muted"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Any client can access"]))],null,null)}function Tg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Og(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Must contain one or more comma-separated values"])),(t()(),s["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["For example:"])),(t()(),s["ɵted"](-1,null,[" 192.168.0.10, 192.168.1.0/8 "]))],null,null)}function wg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function Sg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.getAccessTypeHelp(e.parent.context.index))}))}function Ig(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function Ng(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,74,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,73,"div",[["class","card"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](2,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](4,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](5,0,null,null,4,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](6,null,[" "," "])),s["ɵppd"](7,1),(t()(),s["ɵeld"](8,0,null,null,1,"span",[["class","float-right clickable"],["tooltip","Remove"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.removeClient(t.context.index)&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](10,0,null,null,64,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](12,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](15,0,null,0,1,"label",[["class","cd-col-form-label"],["for","addresses"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Addresses"])),(t()(),s["ɵeld"](17,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,7,"input",[["class","form-control"],["formControlName","addresses"],["id","addresses"],["name","addresses"],["placeholder","192.168.0.10, 192.168.1.0/8"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,19)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,19)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,19)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](19,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](21,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](25,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](26,0,null,null,4,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Tg)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Og)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](31,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](32,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](35,0,null,0,1,"label",[["class","cd-col-form-label"],["for","access_type"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Access Type"])),(t()(),s["ɵeld"](37,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](38,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","access_type"],["id","access_type"],["name","access_type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,39).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,39).onTouched()&&a),a}),null,null)),s["ɵdid"](39,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](41,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](43,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](44,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](45,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](46,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](47,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](48,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](49,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,wg)),s["ɵdid"](51,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sg)),s["ɵdid"](53,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](54,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](55,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](58,0,null,0,1,"label",[["class","cd-col-form-label"],["for","squash"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Squash"])),(t()(),s["ɵeld"](60,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](61,0,null,null,13,"select",[["class","form-control custom-select"],["formControlName","squash"],["id","squash"],["name","squash"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,62).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,62).onTouched()&&a),a}),null,null)),s["ɵdid"](62,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](64,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](66,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](67,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](68,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](69,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](70,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](71,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](72,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,Ig)),s["ɵdid"](74,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,2,0,e.context.index),t(e,12,0),t(e,21,0,"addresses"),t(e,25,0,"addresses"),t(e,28,0,n.showError(e.context.index,"addresses",s["ɵnov"](e.parent,8),"required")),t(e,30,0,n.showError(e.context.index,"addresses",s["ɵnov"](e.parent,8),"pattern")),t(e,32,0),t(e,41,0,"access_type"),t(e,45,0,"access_type"),t(e,47,0,""),t(e,48,0,""),t(e,51,0,n.nfsAccessType),t(e,53,0,n.getValue(e.context.index,"access_type")),t(e,55,0),t(e,64,0,"squash"),t(e,68,0,"squash"),t(e,70,0,""),t(e,71,0,""),t(e,74,0,n.nfsSquash)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,4).ngClassUntouched,s["ɵnov"](e,4).ngClassTouched,s["ɵnov"](e,4).ngClassPristine,s["ɵnov"](e,4).ngClassDirty,s["ɵnov"](e,4).ngClassValid,s["ɵnov"](e,4).ngClassInvalid,s["ɵnov"](e,4).ngClassPending);var a=s["ɵunv"](e,6,0,t(e,7,0,s["ɵnov"](e.parent,0),e.context.index+1));t(e,6,0,a),t(e,11,0,s["ɵnov"](e,12).hasErrors,s["ɵnov"](e,12).hasSuccess),t(e,18,0,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,25).validClass,s["ɵnov"](e,25).invalidClass),t(e,31,0,s["ɵnov"](e,32).hasErrors,s["ɵnov"](e,32).hasSuccess),t(e,38,0,s["ɵnov"](e,43).ngClassUntouched,s["ɵnov"](e,43).ngClassTouched,s["ɵnov"](e,43).ngClassPristine,s["ɵnov"](e,43).ngClassDirty,s["ɵnov"](e,43).ngClassValid,s["ɵnov"](e,43).ngClassInvalid,s["ɵnov"](e,43).ngClassPending,s["ɵnov"](e,45).validClass,s["ɵnov"](e,45).invalidClass),t(e,49,0,n.getNoAccessTypeDescr()),t(e,54,0,s["ɵnov"](e,55).hasErrors,s["ɵnov"](e,55).hasSuccess),t(e,61,0,s["ɵnov"](e,66).ngClassUntouched,s["ɵnov"](e,66).ngClassTouched,s["ɵnov"](e,66).ngClassPristine,s["ɵnov"](e,66).ngClassDirty,s["ɵnov"](e,66).ngClassValid,s["ɵnov"](e,66).ngClassInvalid,s["ɵnov"](e,66).ngClassPending,s["ɵnov"](e,68).validClass,s["ɵnov"](e,68).invalidClass),t(e,72,0,n.getNoSquashDescr())}))}function Cg(t){return s["ɵvid"](0,[s["ɵpid"](0,yg.a,[]),(t()(),s["ɵeld"](1,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](2,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients"])),(t()(),s["ɵeld"](7,0,null,0,22,"div",[["class","cd-col-form-input"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](8,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_g)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](14,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](15,212992,null,0,$.g,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.g]),s["ɵdid"](17,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Ng)),s["ɵdid"](19,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵeld"](20,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](21,0,null,null,8,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,7,"div",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,6,"button",[["class","btn btn-light "]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.addClient()&&a),a}),null,null)),(t()(),s["ɵeld"](24,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](26,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](27,1),(t()(),s["ɵeld"](28,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add clients"]))],(function(t,e){var n=e.component;t(e,2,0),t(e,8,0,n.form),t(e,11,0,n.form),t(e,13,0,0===n.form.get("clients").value.length),t(e,15,0,"clients"),t(e,19,0,n.form.get("clients").value,n.trackByFn);var a=t(e,27,0,n.icons.add);t(e,26,0,a)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending)}))}var Rg=n("P8lu"),Ag=n("a96k");class kg{constructor(t,e,n,a,r,i,s,o,u,l){this.authStorageService=t,this.nfsService=e,this.route=n,this.router=a,this.rgwUserService=r,this.formBuilder=i,this.taskWrapper=s,this.cdRef=o,this.i18n=u,this.actionLabels=l,this.isEdit=!1,this.cluster_id=null,this.export_id=null,this.isNewDirectory=!1,this.isNewBucket=!1,this.isDefaultCluster=!1,this.allClusters=null,this.allDaemons={},this.icons=bt.a,this.allFsals=[],this.allRgwUsers=[],this.allCephxClients=null,this.allFsNames=null,this.defaultAccessType={RGW:"RO"},this.nfsAccessType=this.nfsService.nfsAccessType,this.nfsSquash=this.nfsService.nfsSquash,this.daemonsSelections=[],this.daemonsMessages=new cs.a({noOptions:this.i18n("There are no daemons available.")},this.i18n),this.pathDataSource=Nn.a.create(t=>{t.next(this.nfsForm.getValue("path"))}).pipe(Object(An.a)(t=>this.getPathTypeahead(t)),Object(Ce.a)(t=>t.paths)),this.bucketDataSource=Nn.a.create(t=>{t.next(this.nfsForm.getValue("path"))}).pipe(Object(An.a)(t=>this.getBucketTypeahead(t))),this.permission=this.authStorageService.getPermissions().pool,this.resource=this.i18n("NFS export"),this.createForm()}ngOnInit(){const t=[this.nfsService.daemon(),this.nfsService.fsals(),this.nfsService.clients(),this.nfsService.filesystems()];this.router.url.startsWith("/nfs/edit")&&(this.isEdit=!0),this.isEdit?(this.action=this.actionLabels.EDIT,this.route.params.subscribe(e=>{this.cluster_id=decodeURIComponent(e.cluster_id),this.export_id=decodeURIComponent(e.export_id),t.push(this.nfsService.get(this.cluster_id,this.export_id)),this.getData(t)})):(this.action=this.actionLabels.CREATE,this.getData(t))}getData(t){Object(Po.a)(t).subscribe(t=>{this.resolveDaemons(t[0]),this.resolvefsals(t[1]),this.resolveClients(t[2]),this.resolveFilesystems(t[3]),t[4]&&this.resolveModel(t[4])})}createForm(){this.nfsForm=new qs.a({cluster_id:new $.i("",{validators:[$.B.required]}),daemons:new $.i([]),fsal:new qs.a({name:new $.i("",{validators:[$.B.required]}),user_id:new $.i("",{validators:[js.a.requiredIf({name:"CEPH"})]}),fs_name:new $.i("",{validators:[js.a.requiredIf({name:"CEPH"})]}),rgw_user_id:new $.i("",{validators:[js.a.requiredIf({name:"RGW"})]})}),path:new $.i(""),protocolNfsv3:new $.i(!0,{validators:[js.a.requiredIf({protocolNfsv4:!1},t=>!t)]}),protocolNfsv4:new $.i(!0,{validators:[js.a.requiredIf({protocolNfsv3:!1},t=>!t)]}),tag:new $.i(""),pseudo:new $.i("",{validators:[js.a.requiredIf({protocolNfsv4:!0}),$.B.pattern("^/[^><|&()]*$")]}),access_type:new $.i("RW",{validators:[$.B.required]}),squash:new $.i("",{validators:[$.B.required]}),transportUDP:new $.i(!0,{validators:[js.a.requiredIf({transportTCP:!1},t=>!t)]}),transportTCP:new $.i(!0,{validators:[js.a.requiredIf({transportUDP:!1},t=>!t)]}),clients:this.formBuilder.array([]),security_label:new $.i(!1),sec_label_xattr:new $.i("security.selinux",js.a.requiredIf({security_label:!0,"fsal.name":"CEPH"}))})}resolveModel(t){"CEPH"===t.fsal.name&&(t.sec_label_xattr=t.fsal.sec_label_xattr),this.daemonsSelections=tt.map(this.allDaemons[t.cluster_id],e=>new Ag.a(-1!==t.daemons.indexOf(e),e,"")),this.daemonsSelections=[...this.daemonsSelections],t.protocolNfsv3=-1!==t.protocols.indexOf(3),t.protocolNfsv4=-1!==t.protocols.indexOf(4),delete t.protocols,t.transportTCP=-1!==t.transports.indexOf("TCP"),t.transportUDP=-1!==t.transports.indexOf("UDP"),delete t.transports,t.clients.forEach(t=>{let e="";t.addresses.forEach(t=>{e+=t+", "}),e.length>=2&&(e=e.substring(0,e.length-2)),t.addresses=e}),this.nfsForm.patchValue(t),this.setPathValidation(),this.nfsClients.resolveModel(t.clients)}resolveDaemons(t){t=tt.sortBy(t,["daemon_id"]),this.allClusters=tt(t).map(t=>t.cluster_id).sortedUniq().value(),tt.forEach(this.allClusters,t=>{this.allDaemons[t]=[]}),tt.forEach(t,t=>{this.allDaemons[t.cluster_id].push(t.daemon_id)});const e=tt.isArray(this.allClusters)&&1===this.allClusters.length;this.isDefaultCluster=e&&"_default_"===this.allClusters[0],e&&(this.nfsForm.patchValue({cluster_id:this.allClusters[0]}),this.onClusterChange())}resolvefsals(t){t.forEach(t=>{const e=this.nfsService.nfsFsal.find(e=>t===e.value);tt.isObjectLike(e)&&(this.allFsals.push(e),"RGW"===e.value&&this.rgwUserService.list().subscribe(t=>{t.forEach(t=>{0===t.suspended&&t.keys.length>0&&this.allRgwUsers.push(t.user_id)})}))}),1===this.allFsals.length&&tt.isUndefined(this.nfsForm.getValue("fsal"))&&this.nfsForm.patchValue({fsal:this.allFsals[0]})}resolveClients(t){this.allCephxClients=t}resolveFilesystems(t){this.allFsNames=t,1===t.length&&this.nfsForm.patchValue({fsal:{fs_name:t[0].name}})}fsalChangeHandler(){this.nfsForm.patchValue({tag:this._generateTag(),pseudo:this._generatePseudo(),access_type:this._updateAccessType()}),this.setPathValidation(),this.cdRef.detectChanges()}accessTypeChangeHandler(){const t=this.nfsForm.getValue("name"),e=this.nfsForm.getValue("access_type");this.defaultAccessType[t]=e}setPathValidation(){"RGW"===this.nfsForm.getValue("name")?this.nfsForm.get("path").setValidators([$.B.required,$.B.pattern("^(/|[^/><|&()#?]+)$")]):this.nfsForm.get("path").setValidators([$.B.required,$.B.pattern("^/[^><|&()?]*$")])}rgwUserIdChangeHandler(){this.nfsForm.patchValue({pseudo:this._generatePseudo()})}getAccessTypeHelp(t){const e=this.nfsAccessType.find(e=>{if(t===e.value)return e});return tt.isObjectLike(e)?e.help:""}getId(){return tt.isString(this.nfsForm.getValue("cluster_id"))&&tt.isString(this.nfsForm.getValue("path"))?this.nfsForm.getValue("cluster_id")+":"+this.nfsForm.getValue("path"):""}getPathTypeahead(t){if(!tt.isString(t)||"/"===t)return Object(In.a)([]);const e=this.nfsForm.getValue("fsal").fs_name;return this.nfsService.lsDir(e,t)}pathChangeHandler(){this.nfsForm.patchValue({pseudo:this._generatePseudo()});const t=this.nfsForm.getValue("path");this.getPathTypeahead(t).subscribe(e=>{this.isNewDirectory="/"!==t&&-1===e.paths.indexOf(t)})}bucketChangeHandler(){this.nfsForm.patchValue({tag:this._generateTag(),pseudo:this._generatePseudo()});const t=this.nfsForm.getValue("path");this.getBucketTypeahead(t).subscribe(e=>{this.isNewBucket=""!==t&&-1===e.indexOf(t)})}getBucketTypeahead(t){const e=this.nfsForm.getValue("rgw_user_id");return tt.isString(e)&&tt.isString(t)&&"/"!==t&&""!==t?this.nfsService.buckets(e):Object(In.a)([])}_generateTag(){let t=this.nfsForm.getValue("tag");return this.nfsForm.get("tag").dirty||(t=void 0,"RGW"===this.nfsForm.getValue("fsal")&&(t=this.nfsForm.getValue("path"))),t}_generatePseudo(){let t=this.nfsForm.getValue("pseudo");return this.nfsForm.get("pseudo")&&!this.nfsForm.get("pseudo").dirty&&(t=void 0,"CEPH"===this.nfsForm.getValue("fsal")?(t="/cephfs",tt.isString(this.nfsForm.getValue("path"))&&(t+=this.nfsForm.getValue("path"))):"RGW"===this.nfsForm.getValue("fsal")&&tt.isString(this.nfsForm.getValue("rgw_user_id"))&&(t="/"+this.nfsForm.getValue("rgw_user_id"),tt.isString(this.nfsForm.getValue("path"))&&(t+="/"+this.nfsForm.getValue("path")))),t}_updateAccessType(){const t=this.nfsForm.getValue("name");let e=this.defaultAccessType[t];return e||(e="RW"),e}onClusterChange(){const t=this.nfsForm.getValue("cluster_id");this.daemonsSelections=tt.map(this.allDaemons[t],t=>new Ag.a(!1,t,"")),this.daemonsSelections=[...this.daemonsSelections],this.nfsForm.patchValue({daemons:[]})}removeDaemon(t,e){this.daemonsSelections.forEach(t=>{t.name===e&&(t.selected=!1)});const n=this.nfsForm.get("daemons");return n.value.splice(t,1),n.setValue(n.value),!1}onDaemonSelection(){this.nfsForm.get("daemons").setValue(this.nfsForm.getValue("daemons"))}submitAction(){let t;const e=this._buildRequest();t=this.taskWrapper.wrapTaskAroundCall(this.isEdit?{task:new fs.a("nfs/edit",{cluster_id:this.cluster_id,export_id:this.export_id}),call:this.nfsService.update(this.cluster_id,this.export_id,e)}:{task:new fs.a("nfs/create",{path:e.path,fsal:e.fsal,cluster_id:e.cluster_id}),call:this.nfsService.create(e)}),t.subscribe(void 0,()=>this.nfsForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/nfs"]))}_buildRequest(){const t=tt.cloneDeep(this.nfsForm.value);return(tt.isUndefined(t.tag)||""===t.tag)&&(t.tag=null),this.isEdit&&(t.export_id=this.export_id),"CEPH"===t.fsal.name?delete t.fsal.rgw_user_id:(delete t.fsal.fs_name,delete t.fsal.user_id),t.protocols=[],t.protocolNfsv3?t.protocols.push(3):t.tag=null,delete t.protocolNfsv3,t.protocolNfsv4?t.protocols.push(4):t.pseudo=null,delete t.protocolNfsv4,t.transports=[],t.transportTCP&&t.transports.push("TCP"),delete t.transportTCP,t.transportUDP&&t.transports.push("UDP"),delete t.transportUDP,t.clients.forEach(e=>{e.addresses=tt.isString(e.addresses)?tt(e.addresses).split(/[ ,]+/).uniq().filter(t=>""!==t).value():[],e.squash||(e.squash=t.squash),e.access_type||(e.access_type=t.access_type)}),t.fsal.sec_label_xattr=!1===t.security_label||"RGW"===t.fsal.name?null:t.sec_label_xattr,delete t.sec_label_xattr,t}}var Eg=s["ɵcrt"]({encapsulation:0,styles:[[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]],data:{}});function Lg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Dg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No cluster available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Pg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the cluster --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Mg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function qg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function jg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,2,{FormControlNames:1}),s["ɵqud"](603979776,3,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","cluster_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster"])),(t()(),s["ɵeld"](6,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","cluster_id"],["id","cluster_id"],["name","cluster_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.onClusterChange()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[2,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lg)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Dg)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Pg)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Mg)),s["ɵdid"](22,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qg)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"cluster_id"),t(e,14,0,"cluster_id"),t(e,16,0,null===n.allClusters),t(e,18,0,null!==n.allClusters&&0===n.allClusters.length),t(e,20,0,null!==n.allClusters&&n.allClusters.length>0),t(e,22,0,n.allClusters),t(e,24,0,n.nfsForm.showError("cluster_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function Fg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,8,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),s["ɵdid"](3,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),(t()(),s["ɵeld"](4,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.removeDaemon(t.context.index,t.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵeld"](6,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](8,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](9,1)],(function(t,e){var n=t(e,9,0,e.component.icons.destroy);t(e,8,0,n)}),(function(t,e){t(e,2,0,e.context.$implicit)}))}function Gg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Vg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No data pools available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function zg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the storage backend --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Bg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.descr)}))}function Yg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Hg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Ug(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No users available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Wg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the object gateway user --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Kg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function $g(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Jg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,8,{FormControlNames:1}),s["ɵqud"](603979776,9,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","rgw_user_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway User"])),(t()(),s["ɵeld"](6,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","rgw_user_id"],["id","rgw_user_id"],["name","rgw_user_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.rgwUserIdChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[8,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Hg)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ug)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Wg)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kg)),s["ɵdid"](22,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$g)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"rgw_user_id"),t(e,14,0,"rgw_user_id"),t(e,16,0,null===n.allRgwUsers),t(e,18,0,null!==n.allRgwUsers&&0===n.allRgwUsers.length),t(e,20,0,null!==n.allRgwUsers&&n.allRgwUsers.length>0),t(e,22,0,n.allRgwUsers),t(e,24,0,n.nfsForm.showError("rgw_user_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function Zg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Qg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No clients available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Xg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the cephx client --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function tp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function ep(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function np(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,10,{FormControlNames:1}),s["ɵqud"](603979776,11,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS User ID"])),(t()(),s["ɵeld"](6,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","user_id"],["id","user_id"],["name","user_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[10,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zg)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Qg)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xg)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tp)),s["ɵdid"](22,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ep)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"user_id"),t(e,14,0,"user_id"),t(e,16,0,null===n.allCephxClients),t(e,18,0,null!==n.allCephxClients&&0===n.allCephxClients.length),t(e,20,0,null!==n.allCephxClients&&n.allCephxClients.length>0),t(e,22,0,n.allCephxClients),t(e,24,0,n.nfsForm.showError("user_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function ap(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function rp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No CephFS filesystem available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function ip(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the CephFS filesystem --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function sp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.name),t(e,2,0,e.context.$implicit.name)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function op(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function up(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,12,{FormControlNames:1}),s["ɵqud"](603979776,13,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","fs_name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS Name"])),(t()(),s["ɵeld"](6,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","fs_name"],["id","fs_name"],["name","fs_name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.rgwUserIdChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[12,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ap)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rp)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ip)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sp)),s["ɵdid"](22,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,op)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"fs_name"),t(e,14,0,"fs_name"),t(e,16,0,null===n.allFsNames),t(e,18,0,null!==n.allFsNames&&0===n.allFsNames.length),t(e,20,0,null!==n.allFsNames&&n.allFsNames.length>0),t(e,22,0,n.allFsNames),t(e,24,0,n.nfsForm.showError("fs_name",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function lp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"input",[["class","form-control"],["formControlName","sec_label_xattr"],["id","sec_label_xattr"],["name","sec_label_xattr"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,1)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,1)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,1)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](3,671744,[[14,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](7,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,"sec_label_xattr"),t(e,7,0,"sec_label_xattr")}),(function(t,e){t(e,0,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,7).validClass,s["ɵnov"](e,7).invalidClass)}))}function dp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function cp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,14,{FormControlNames:1}),s["ɵqud"](603979776,15,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","security_label"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{required:0}),(t()(),s["ɵted"](-1,null,["Security Label"])),(t()(),s["ɵeld"](9,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","security_label"],["id","security_label"],["name","security_label"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,12).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,12).onTouched()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](14,671744,[[14,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](16,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](17,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](18,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](19,0,null,null,1,"label",[["class","custom-control-label"],["for","security_label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Enable security label"])),(t()(),s["ɵeld"](21,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,lp)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dp)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0);var a=t(e,7,0,n.nfsForm.getValue("security_label"));t(e,6,0,"cd-col-form-label",a),t(e,14,0,"security_label"),t(e,18,0,"security_label"),t(e,23,0,n.nfsForm.getValue("security_label")),t(e,25,0,n.nfsForm.showError("sec_label_xattr",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,11,0,s["ɵnov"](e,16).ngClassUntouched,s["ɵnov"](e,16).ngClassTouched,s["ɵnov"](e,16).ngClassPristine,s["ɵnov"](e,16).ngClassDirty,s["ɵnov"](e,16).ngClassValid,s["ɵnov"](e,16).ngClassInvalid,s["ɵnov"](e,16).ngClassPending,s["ɵnov"](e,18).validClass,s["ɵnov"](e,18).invalidClass)}))}function fp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function hp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path need to start with a '/' and can be followed by a word"]))],null,null)}function gp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New directory will be created"]))],null,null)}function pp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,16,{FormControlNames:1}),s["ɵqud"](603979776,17,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","path"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS Path"])),(t()(),s["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,16777216,null,null,8,"input",[["class","form-control"],["formControlName","path"],["id","path"],["name","path"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"typeaheadOnSelect"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,14).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,14).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,14).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,14).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,14).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,14).onKeydown(n)&&a),"typeaheadOnSelect"===e&&(a=!1!==r.pathChangeHandler()&&a),"blur"===e&&(a=!1!==r.pathChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[16,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,212992,null,0,gg,[W.a,hg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"]},{typeaheadOnSelect:"typeaheadOnSelect"}),s["ɵdid"](15,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fp)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hp)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gp)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"path"),t(e,14,0,n.pathDataSource),t(e,15,0,"path"),t(e,17,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"required")),t(e,19,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"pattern")),t(e,21,0,n.isNewDirectory&&!n.nfsForm.showError("path",s["ɵnov"](e.parent,6)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,15).validClass,s["ɵnov"](e,15).invalidClass)}))}function bp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function mp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path can only be a single '/' or a word"]))],null,null)}function yp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New bucket will be created"]))],null,null)}function vp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,18,{FormControlNames:1}),s["ɵqud"](603979776,19,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","path"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path"])),(t()(),s["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,16777216,null,null,8,"input",[["class","form-control"],["formControlName","path"],["id","path"],["name","path"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"typeaheadOnSelect"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,14).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,14).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,14).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,14).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,14).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,14).onKeydown(n)&&a),"typeaheadOnSelect"===e&&(a=!1!==r.bucketChangeHandler()&&a),"blur"===e&&(a=!1!==r.bucketChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[18,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](14,212992,null,0,gg,[W.a,hg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"]},{typeaheadOnSelect:"typeaheadOnSelect"}),s["ɵdid"](15,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,bp)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,mp)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yp)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"path"),t(e,14,0,n.bucketDataSource),t(e,15,0,"path"),t(e,17,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"required")),t(e,19,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"pattern")),t(e,21,0,n.isNewBucket&&!n.nfsForm.showError("path",s["ɵnov"](e.parent,6)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,15).validClass,s["ɵnov"](e,15).invalidClass)}))}function xp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function _p(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,26,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,22,{FormControlNames:1}),s["ɵqud"](603979776,23,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,13,"label",[["class","cd-col-form-label"],["for","tag"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS Tag"])),(t()(),s["ɵeld"](7,0,null,null,10,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](8,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Alternative access for "])),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS v3"])),(t()(),s["ɵted"](-1,null,[" mounts (it must not have a leading /)."])),(t()(),s["ɵeld"](14,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz)."])),(t()(),s["ɵeld"](16,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["By using different Tag options, the same Path may be exported multiple times."])),(t()(),s["ɵeld"](18,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,7,"input",[["class","form-control"],["formControlName","tag"],["id","tag"],["name","tag"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,20)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,20).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,20)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,20)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](20,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](22,671744,[[22,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](24,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](25,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](26,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,22,0,"tag"),t(e,26,0,"tag")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,19,0,s["ɵnov"](e,24).ngClassUntouched,s["ɵnov"](e,24).ngClassTouched,s["ɵnov"](e,24).ngClassPristine,s["ɵnov"](e,24).ngClassDirty,s["ɵnov"](e,24).ngClassValid,s["ɵnov"](e,24).ngClassInvalid,s["ɵnov"](e,24).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass)}))}function Tp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Op(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo needs to start with a '/' and can't contain any of the following: >, <, |, &, ( or )."]))],null,null)}function wp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,24,{FormControlNames:1}),s["ɵqud"](603979776,25,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,14,"label",[["class","cd-col-form-label"],["for","pseudo"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo"])),(t()(),s["ɵeld"](7,0,null,null,11,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](8,49152,null,0,uu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The position that this "])),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS v4"])),(t()(),s["ɵted"](-1,null,[" export occupies in the "])),(t()(),s["ɵeld"](14,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo FS"])),(t()(),s["ɵted"](-1,null,[" (it must be unique)."])),(t()(),s["ɵeld"](17,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["By using different Pseudo options, the same Path may be exported multiple times."])),(t()(),s["ɵeld"](19,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,7,"input",[["class","form-control"],["formControlName","pseudo"],["id","pseudo"],["name","pseudo"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,21)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,21).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,21)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,21)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](23,671744,[[24,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](25,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](26,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](27,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tp)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Op)),s["ɵdid"](31,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,23,0,"pseudo"),t(e,27,0,"pseudo"),t(e,29,0,n.nfsForm.showError("pseudo",s["ɵnov"](e.parent,6),"required")),t(e,31,0,n.nfsForm.showError("pseudo",s["ɵnov"](e.parent,6),"pattern"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,20,0,s["ɵnov"](e,25).ngClassUntouched,s["ɵnov"](e,25).ngClassTouched,s["ɵnov"](e,25).ngClassPristine,s["ɵnov"](e,25).ngClassDirty,s["ɵnov"](e,25).ngClassValid,s["ɵnov"](e,25).ngClassInvalid,s["ɵnov"](e,25).ngClassPending,s["ɵnov"](e,27).validClass,s["ɵnov"](e,27).invalidClass)}))}function Sp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Ip(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No access type available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Np(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the access type --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Cp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function Rp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,1,0,n.getAccessTypeHelp(n.nfsForm.getValue("access_type")))}))}function Ap(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[["class","form-text text-warning"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The Object Gateway NFS backend has a number of limitations which will seriously affect applications writing to the share. Please consult the "])),(t()(),s["ɵeld"](2,0,null,null,1,"cd-doc",[["section","rgw-nfs"]],null,null,null,jr.b,jr.a)),s["ɵdid"](3,114688,null,0,Fr.a,[Ot.a,he.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,null,[" for details before enabling write access."]))],(function(t,e){t(e,3,0,"rgw-nfs")}),null)}function kp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Ep(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Lp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No squash available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Dp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["--Select what kind of user id squashing is performed --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Pp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function Mp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function qp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function jp(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),s["ɵqud"](402653184,1,{nfsClients:0}),(t()(),s["ɵeld"](3,0,null,null,207,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,206,"form",[["name","nfsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,6).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit()&&a),a}),null,null)),s["ɵdid"](5,16384,null,0,$.G,[],null,null),s["ɵdid"](6,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](9,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](10,0,null,null,200,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](12,null,[""," ",""])),s["ɵppd"](13,1),s["ɵppd"](14,1),(t()(),s["ɵeld"](15,0,null,null,186,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,jg)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](19,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,4,{FormControlNames:1}),s["ɵqud"](603979776,5,{messagesBlock:0}),(t()(),s["ɵeld"](22,0,null,0,2,"label",[["class","cd-col-form-label"],["for","daemons"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemons"])),(t()(),s["ɵeld"](25,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Fg)),s["ɵdid"](27,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](28,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](29,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(t,e,n){var a=!0;return"selection"===e&&(a=!1!==t.component.onDaemonSelection()&&a),a}),bg.b,bg.a)),s["ɵdid"](31,638976,null,0,mg.a,[he.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(t()(),s["ɵeld"](32,0,null,0,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](34,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](35,1),(t()(),s["ɵeld"](36,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add daemon"])),(t()(),s["ɵeld"](38,0,null,null,34,"div",[["formGroupName","fsal"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](39,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](41,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](42,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](43,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,6,{FormControlNames:1}),s["ɵqud"](603979776,7,{messagesBlock:0}),(t()(),s["ɵeld"](46,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Storage Backend"])),(t()(),s["ɵeld"](48,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","name"],["id","name"],["name","name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,50).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,50).onTouched()&&a),"change"===e&&(a=!1!==r.fsalChangeHandler()&&a),a}),null,null)),s["ɵdid"](50,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](52,671744,[[6,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](54,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](55,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](56,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Gg)),s["ɵdid"](58,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Vg)),s["ɵdid"](60,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,zg)),s["ɵdid"](62,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Bg)),s["ɵdid"](64,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yg)),s["ɵdid"](66,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jg)),s["ɵdid"](68,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,np)),s["ɵdid"](70,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,up)),s["ɵdid"](72,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cp)),s["ɵdid"](74,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,pp)),s["ɵdid"](76,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vp)),s["ɵdid"](78,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](79,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](80,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,20,{FormControlNames:1}),s["ɵqud"](603979776,21,{messagesBlock:0}),(t()(),s["ɵeld"](83,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","protocols"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS Protocol"])),(t()(),s["ɵeld"](85,0,null,0,24,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](86,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](87,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","protocolNfsv3"],["id","protocolNfsv3"],["name","protocolNfsv3"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,88).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,88).onTouched()&&a),a}),null,null)),s["ɵdid"](88,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](90,671744,[[20,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](92,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](93,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](94,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](95,0,null,null,1,"label",[["class","custom-control-label"],["for","protocolNfsv3"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFSv3"])),(t()(),s["ɵeld"](97,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](98,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","protocolNfsv4"],["id","protocolNfsv4"],["name","protocolNfsv4"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,99).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,99).onTouched()&&a),a}),null,null)),s["ɵdid"](99,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](101,671744,[[20,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](103,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](104,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](105,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](106,0,null,null,1,"label",[["class","custom-control-label"],["for","protocolNfsv4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFSv4"])),(t()(),s["ɵand"](16777216,null,null,1,null,xp)),s["ɵdid"](109,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_p)),s["ɵdid"](111,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wp)),s["ɵdid"](113,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](114,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](115,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,26,{FormControlNames:1}),s["ɵqud"](603979776,27,{messagesBlock:0}),(t()(),s["ɵeld"](118,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","access_type"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Access Type"])),(t()(),s["ɵeld"](120,0,null,0,22,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](121,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","access_type"],["id","access_type"],["name","access_type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,122).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,122).onTouched()&&a),"change"===e&&(a=!1!==r.accessTypeChangeHandler()&&a),a}),null,null)),s["ɵdid"](122,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](124,671744,[[26,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](126,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](127,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](128,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sp)),s["ɵdid"](130,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ip)),s["ɵdid"](132,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Np)),s["ɵdid"](134,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cp)),s["ɵdid"](136,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rp)),s["ɵdid"](138,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ap)),s["ɵdid"](140,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,kp)),s["ɵdid"](142,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](143,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](144,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,28,{FormControlNames:1}),s["ɵqud"](603979776,29,{messagesBlock:0}),(t()(),s["ɵeld"](147,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","squash"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Squash"])),(t()(),s["ɵeld"](149,0,null,0,18,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](150,0,null,null,15,"select",[["class","form-control custom-select"],["formControlName","squash"],["id","squash"],["name","squash"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,151).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,151).onTouched()&&a),a}),null,null)),s["ɵdid"](151,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](153,671744,[[28,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](155,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](156,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](157,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ep)),s["ɵdid"](159,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lp)),s["ɵdid"](161,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Dp)),s["ɵdid"](163,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Pp)),s["ɵdid"](165,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Mp)),s["ɵdid"](167,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](168,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](169,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,30,{FormControlNames:1}),s["ɵqud"](603979776,31,{messagesBlock:0}),(t()(),s["ɵeld"](172,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","transports"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Transport Protocol"])),(t()(),s["ɵeld"](174,0,null,0,25,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](175,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](176,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","transportUDP"],["id","transportUDP"],["name","transportUDP"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,177).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,177).onTouched()&&a),a}),null,null)),s["ɵdid"](177,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](179,671744,[[30,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](181,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](182,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](183,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](184,0,null,null,1,"label",[["class","custom-control-label"],["for","transportUDP"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["UDP"])),(t()(),s["ɵeld"](186,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](187,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","transportTCP"],["id","transportTCP"],["name","transportTCP"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,188).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,188).onTouched()&&a),a}),null,null)),s["ɵdid"](188,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](190,671744,[[30,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](192,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](193,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](194,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](195,0,null,null,1,"label",[["class","custom-control-label"],["for","transportTCP"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["TCP"])),(t()(),s["ɵand"](16777216,null,null,1,null,qp)),s["ɵdid"](198,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](199,0,null,null,0,"hr",[],null,null,null,null,null)),(t()(),s["ɵeld"](200,0,null,null,1,"cd-nfs-form-client",[],null,null,null,Cg,xg)),s["ɵdid"](201,49152,[[1,4],["nfsClients",4]],0,vg,[Yh,he.a],{form:[0,"form"]},null),(t()(),s["ɵeld"](202,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](203,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](204,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Es.b,Es.a)),s["ɵdid"](205,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](206,0,[""," ",""])),s["ɵppd"](207,1),s["ɵppd"](208,1),(t()(),s["ɵeld"](209,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](210,49152,null,0,Ps.a,[i.Location,It.b],null,null)],(function(t,e){var n=e.component;t(e,6,0,n.nfsForm),t(e,9,0,n.nfsForm),t(e,17,0,!n.isDefaultCluster),t(e,19,0),t(e,27,0,n.nfsForm.getValue("daemons")),t(e,31,0,"btn btn-light float-right",n.nfsForm.get("daemons").value,n.daemonsSelections,n.daemonsMessages);var a=t(e,35,0,n.icons.add);t(e,34,0,a),t(e,39,0,"fsal"),t(e,43,0),t(e,52,0,"name"),t(e,56,0,"name"),t(e,58,0,null===n.allFsals),t(e,60,0,null!==n.allFsals&&0===n.allFsals.length),t(e,62,0,null!==n.allFsals&&n.allFsals.length>0),t(e,64,0,n.allFsals),t(e,66,0,n.nfsForm.showError("name",s["ɵnov"](e,6),"required")),t(e,68,0,"RGW"===n.nfsForm.getValue("name")),t(e,70,0,"CEPH"===n.nfsForm.getValue("name")),t(e,72,0,"CEPH"===n.nfsForm.getValue("name")),t(e,74,0,"CEPH"===n.nfsForm.getValue("name")),t(e,76,0,"CEPH"===n.nfsForm.getValue("name")),t(e,78,0,"RGW"===n.nfsForm.getValue("name")),t(e,80,0),t(e,90,0,"protocolNfsv3"),t(e,94,0,"protocolNfsv3"),t(e,101,0,"protocolNfsv4"),t(e,105,0,"protocolNfsv4"),t(e,109,0,n.nfsForm.showError("protocolNfsv3",s["ɵnov"](e,6),"required")||n.nfsForm.showError("protocolNfsv4",s["ɵnov"](e,6),"required")),t(e,111,0,n.nfsForm.getValue("protocolNfsv3")),t(e,113,0,n.nfsForm.getValue("protocolNfsv4")),t(e,115,0),t(e,124,0,"access_type"),t(e,128,0,"access_type"),t(e,130,0,null===n.nfsAccessType),t(e,132,0,null!==n.nfsAccessType&&0===n.nfsAccessType.length),t(e,134,0,null!==n.nfsAccessType&&n.nfsAccessType.length>0),t(e,136,0,n.nfsAccessType),t(e,138,0,n.nfsForm.getValue("access_type")),t(e,140,0,"RW"===n.nfsForm.getValue("access_type")&&"RGW"===n.nfsForm.getValue("name")),t(e,142,0,n.nfsForm.showError("access_type",s["ɵnov"](e,6),"required")),t(e,144,0),t(e,153,0,"squash"),t(e,157,0,"squash"),t(e,159,0,null===n.nfsSquash),t(e,161,0,null!==n.nfsSquash&&0===n.nfsSquash.length),t(e,163,0,null!==n.nfsSquash&&n.nfsSquash.length>0),t(e,165,0,n.nfsSquash),t(e,167,0,n.nfsForm.showError("squash",s["ɵnov"](e,6),"required")),t(e,169,0),t(e,179,0,"transportUDP"),t(e,183,0,"transportUDP"),t(e,190,0,"transportTCP"),t(e,194,0,"transportTCP"),t(e,198,0,n.nfsForm.showError("transportUDP",s["ɵnov"](e,6),"required")||n.nfsForm.showError("transportTCP",s["ɵnov"](e,6),"required")),t(e,201,0,n.nfsForm),t(e,205,0,s["ɵnov"](e,6))}),(function(t,e){var n=e.component;t(e,4,0,s["ɵnov"](e,8).ngClassUntouched,s["ɵnov"](e,8).ngClassTouched,s["ɵnov"](e,8).ngClassPristine,s["ɵnov"](e,8).ngClassDirty,s["ɵnov"](e,8).ngClassValid,s["ɵnov"](e,8).ngClassInvalid,s["ɵnov"](e,8).ngClassPending);var a=s["ɵunv"](e,12,0,t(e,13,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,12,1,t(e,14,0,s["ɵnov"](e,1),n.resource));t(e,12,0,a,r),t(e,18,0,s["ɵnov"](e,19).hasErrors,s["ɵnov"](e,19).hasSuccess),t(e,38,0,s["ɵnov"](e,41).ngClassUntouched,s["ɵnov"](e,41).ngClassTouched,s["ɵnov"](e,41).ngClassPristine,s["ɵnov"](e,41).ngClassDirty,s["ɵnov"](e,41).ngClassValid,s["ɵnov"](e,41).ngClassInvalid,s["ɵnov"](e,41).ngClassPending),t(e,42,0,s["ɵnov"](e,43).hasErrors,s["ɵnov"](e,43).hasSuccess),t(e,49,0,s["ɵnov"](e,54).ngClassUntouched,s["ɵnov"](e,54).ngClassTouched,s["ɵnov"](e,54).ngClassPristine,s["ɵnov"](e,54).ngClassDirty,s["ɵnov"](e,54).ngClassValid,s["ɵnov"](e,54).ngClassInvalid,s["ɵnov"](e,54).ngClassPending,s["ɵnov"](e,56).validClass,s["ɵnov"](e,56).invalidClass),t(e,79,0,s["ɵnov"](e,80).hasErrors,s["ɵnov"](e,80).hasSuccess),t(e,87,0,s["ɵnov"](e,92).ngClassUntouched,s["ɵnov"](e,92).ngClassTouched,s["ɵnov"](e,92).ngClassPristine,s["ɵnov"](e,92).ngClassDirty,s["ɵnov"](e,92).ngClassValid,s["ɵnov"](e,92).ngClassInvalid,s["ɵnov"](e,92).ngClassPending,s["ɵnov"](e,94).validClass,s["ɵnov"](e,94).invalidClass),t(e,98,0,s["ɵnov"](e,103).ngClassUntouched,s["ɵnov"](e,103).ngClassTouched,s["ɵnov"](e,103).ngClassPristine,s["ɵnov"](e,103).ngClassDirty,s["ɵnov"](e,103).ngClassValid,s["ɵnov"](e,103).ngClassInvalid,s["ɵnov"](e,103).ngClassPending,s["ɵnov"](e,105).validClass,s["ɵnov"](e,105).invalidClass),t(e,114,0,s["ɵnov"](e,115).hasErrors,s["ɵnov"](e,115).hasSuccess),t(e,121,0,s["ɵnov"](e,126).ngClassUntouched,s["ɵnov"](e,126).ngClassTouched,s["ɵnov"](e,126).ngClassPristine,s["ɵnov"](e,126).ngClassDirty,s["ɵnov"](e,126).ngClassValid,s["ɵnov"](e,126).ngClassInvalid,s["ɵnov"](e,126).ngClassPending,s["ɵnov"](e,128).validClass,s["ɵnov"](e,128).invalidClass),t(e,143,0,s["ɵnov"](e,144).hasErrors,s["ɵnov"](e,144).hasSuccess),t(e,150,0,s["ɵnov"](e,155).ngClassUntouched,s["ɵnov"](e,155).ngClassTouched,s["ɵnov"](e,155).ngClassPristine,s["ɵnov"](e,155).ngClassDirty,s["ɵnov"](e,155).ngClassValid,s["ɵnov"](e,155).ngClassInvalid,s["ɵnov"](e,155).ngClassPending,s["ɵnov"](e,157).validClass,s["ɵnov"](e,157).invalidClass),t(e,168,0,s["ɵnov"](e,169).hasErrors,s["ɵnov"](e,169).hasSuccess),t(e,176,0,s["ɵnov"](e,181).ngClassUntouched,s["ɵnov"](e,181).ngClassTouched,s["ɵnov"](e,181).ngClassPristine,s["ɵnov"](e,181).ngClassDirty,s["ɵnov"](e,181).ngClassValid,s["ɵnov"](e,181).ngClassInvalid,s["ɵnov"](e,181).ngClassPending,s["ɵnov"](e,183).validClass,s["ɵnov"](e,183).invalidClass),t(e,187,0,s["ɵnov"](e,192).ngClassUntouched,s["ɵnov"](e,192).ngClassTouched,s["ɵnov"](e,192).ngClassPristine,s["ɵnov"](e,192).ngClassDirty,s["ɵnov"](e,192).ngClassValid,s["ɵnov"](e,192).ngClassInvalid,s["ɵnov"](e,192).ngClassPending,s["ɵnov"](e,194).validClass,s["ɵnov"](e,194).invalidClass);var i=s["ɵunv"](e,206,0,t(e,207,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,206,1,t(e,208,0,s["ɵnov"](e,1),n.resource));t(e,206,0,i,o)}))}function Fp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-nfs-form",[],null,null,null,jp,Eg)),s["ɵdid"](1,114688,null,0,kg,[Q.a,Yh,Lt.a,Lt.m,Rg.a,Yo.a,ms.a,s.ChangeDetectorRef,he.a,It.b],null,null)],(function(t,e){t(e,1,0)}),null)}var Gp=s["ɵccf"]("cd-nfs-form",kg,Fp,{},{},[]);class Vp{}var zp=s["ɵcrt"]({encapsulation:0,styles:[[".login{color:#fff;background-color:#374249;background-image:url(ceph_background.7c127240f022e7baf57d.gif);background-position:right bottom;background-repeat:no-repeat}  .login header{position:absolute;width:100vw}  .login header .navbar{padding:1rem 2rem}  .login header .navbar .dropdown-menu{margin-top:.2rem}  .login header .navbar .dropdown-menu li a:hover{background-color:#2b99a8}  .login section{display:inline-flex;width:100vw;min-height:100vh}"]],data:{}});function Bp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"main",[["class","login full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"header",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"nav",[["class","navbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,0,"a",[["class","navbar-brand"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,2,"div",[["class","form-inline"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"cd-language-selector",[],null,null,null,gt,ut)),s["ɵdid"](6,114688,null,0,st,[ot.l,at],null,null),(t()(),s["ɵeld"](7,0,null,null,6,"section",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,5,"div",[["class","container"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,4,"div",[["class","row full-height vertical-align"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","col-sm-12 col-md-6 d-sm-block"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,0,"img",[["alt","Ceph"],["class","img-fluid mb-5"],["src","assets/Ceph_Logo_Standard_RGB_White_120411_fa.png"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](13,212992,null,0,Lt.r,[Lt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,6,0),t(e,13,0)}),null)}function Yp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login-layout",[],null,null,null,Bp,zp)),s["ɵdid"](1,49152,null,0,Vp,[],null,null)],null,null)}var Hp=s["ɵccf"]("cd-login-layout",Vp,Yp,{},{},[]);class Up{}class Wp{constructor(t,e,n,a,r){this.authService=t,this.authStorageService=e,this.bsModalService=n,this.route=a,this.router=r,this.model=new Up,this.isLoginActive=!1}ngOnInit(){if(this.authStorageService.isLoggedIn())this.router.navigate([""]);else{const t=this.bsModalService.getModalsCount();for(let n=1;n<=t;n++)this.bsModalService.hide(n);let e=null;if(-1!==window.location.hash.indexOf("access_token=")){e=window.location.hash.split("access_token=")[1];const t=window.location.toString();window.history.replaceState({},document.title,t.split("?")[0])}this.authService.check(e).subscribe(t=>{t.login_url?"#/login"===t.login_url?this.isLoginActive=!0:window.location.replace(t.login_url):(this.authStorageService.set(t.username,e,t.permissions,t.sso,t.pwdExpirationDate),this.router.navigate([""]))})}}login(){this.authService.login(this.model).subscribe(()=>{const t=tt.get(this.route.snapshot.queryParams,"returnUrl","/");this.router.navigate([t])})}}var Kp=s["ɵcrt"]({encapsulation:0,styles:[["cd-login .form-group{border-left:4px solid #fff;background-color:#333e46;height:auto;margin-bottom:2rem}  cd-login .form-group:focus-within{border-left:4px solid #ef5c55}  cd-login .form-group .invalid-feedback{display:inline}  cd-login .btn-password,   cd-login .btn-password:focus,   cd-login .form-control,   cd-login .form-control:focus{border:none;outline:0;box-shadow:none;color:#fff;background-color:#333e46;filter:none}  cd-login .placeholder{color:#90949c}  cd-login .btn-password:focus{outline-color:#2b99a8}@keyframes autofill{to{color:#fff;background-color:#333e46}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-name:autofill;animation-fill-mode:both;box-shadow:0 0 0 1000px #333e46 inset;-webkit-text-fill-color:#fff;transition-property:none;border-radius:0}"]],data:{}});function $p(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","invalid-feedback pl-4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Username is required"]))],null,null)}function Jp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","invalid-feedback pl-4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password is required"]))],null,null)}function Zp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,49,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,48,"form",[["name","loginForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngSubmit"],[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0,r=t.component;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"ngSubmit"===e&&(a=!1!==r.login()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,4210688,[["loginForm",4]],0,$.t,[[8,null],[8,null]],null,{ngSubmit:"ngSubmit"}),s["ɵprd"](2048,null,$.d,null,[$.t]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](6,0,null,null,18,"div",[["class","form-group has-feedback d-flex flex-column py-3"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](7,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](10,0,null,0,1,"label",[["class","placeholder pl-4"],["for","username"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Username"])),(t()(),s["ɵeld"](12,0,null,0,10,"input",[["aria-labelledby","username"],["autofocus",""],["class","form-control pl-4"],["id","username"],["name","username"],["required",""],["type","text"]],[[1,"aria-invalid",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,13)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,13).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,13)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,13)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.model.username=n)&&a),a}),null,null)),s["ɵdid"](13,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](14,16384,null,0,$.z,[],{required:[0,"required"]},null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[$.z]),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](17,671744,[["username",4]],0,$.u,[[2,$.d],[6,$.o],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,4210688,null,0,ks.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](21,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](22,16384,null,0,X.h,[[3,$.d],X.a],null,null),(t()(),s["ɵand"](16777216,null,0,1,null,$p)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](25,0,null,null,22,"div",[["class","form-group has-feedback"],["id","password-div"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](26,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](29,0,null,0,18,"div",[["class","input-group d-flex flex-nowrap"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,14,"div",[["class","d-flex flex-column flex-grow-1 py-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](31,0,null,null,1,"label",[["class","placeholder pl-4"],["for","password"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password"])),(t()(),s["ɵeld"](33,0,null,null,9,"input",[["aria-labelledby","password"],["class","form-control pl-4"],["id","password"],["name","password"],["required",""],["type","password"]],[[1,"aria-invalid",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,34)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,34).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,34)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,34)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.model.password=n)&&a),a}),null,null)),s["ɵdid"](34,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](35,16384,null,0,$.z,[],{required:[0,"required"]},null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[$.z]),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](38,671744,[["password",4]],0,$.u,[[2,$.d],[6,$.o],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](40,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](41,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](42,16384,null,0,X.h,[[3,$.d],X.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Jp)),s["ɵdid"](44,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](45,0,null,null,2,"span",[["class","form-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](46,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-outline-light btn-password h-100 px-4"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,47).onClick()&&a),a}),null,null)),s["ɵdid"](47,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](48,0,null,null,1,"input",[["class","btn btn-secondary px-5 py-2"],["type","submit"],["value","Login"]],[[8,"disabled",0]],null,null,null,null)),s["ɵdid"](49,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null)],(function(t,e){var n=e.component;t(e,7,0),t(e,14,0,""),t(e,17,0,"username",n.model.username),t(e,20,0,""),t(e,24,0,(s["ɵnov"](e,3).submitted||s["ɵnov"](e,17).dirty)&&s["ɵnov"](e,17).invalid),t(e,26,0),t(e,35,0,""),t(e,38,0,"password",n.model.password),t(e,44,0,(s["ɵnov"](e,3).submitted||s["ɵnov"](e,38).dirty)&&s["ɵnov"](e,38).invalid),t(e,47,0,"password")}),(function(t,e){t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,6,0,s["ɵnov"](e,7).hasErrors,s["ɵnov"](e,7).hasSuccess),t(e,12,1,[s["ɵnov"](e,17).invalid,s["ɵnov"](e,14).required?"":null,s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,22).validClass,s["ɵnov"](e,22).invalidClass]),t(e,25,0,s["ɵnov"](e,26).hasErrors,s["ɵnov"](e,26).hasSuccess),t(e,33,1,[s["ɵnov"](e,38).invalid,s["ɵnov"](e,35).required?"":null,s["ɵnov"](e,40).ngClassUntouched,s["ɵnov"](e,40).ngClassTouched,s["ɵnov"](e,40).ngClassPristine,s["ɵnov"](e,40).ngClassDirty,s["ɵnov"](e,40).ngClassValid,s["ɵnov"](e,40).ngClassInvalid,s["ɵnov"](e,40).ngClassPending,s["ɵnov"](e,42).validClass,s["ɵnov"](e,42).invalidClass]),t(e,48,0,s["ɵnov"](e,3).invalid)}))}function Qp(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Zp)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.isLoginActive)}),null)}function Xp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login",[],null,null,null,Qp,Kp)),s["ɵdid"](1,114688,null,0,Wp,[Vt.a,Q.a,Rt.b,Lt.a,Lt.m],null,null)],(function(t,e){t(e,1,0)}),null)}var tb=s["ɵccf"]("cd-login",Wp,Xp,{},{},[]);class eb extends _h{constructor(t,e,n,a,r,i,s,o,u){super(t,e,n,a,r,i,s,o),this.i18n=t,this.actionLabels=e,this.notificationService=n,this.userService=a,this.authStorageService=r,this.formBuilder=i,this.router=s,this.passwordPolicyService=o,this.authService=u}onPasswordChange(){this.authService.logout()}onCancel(){this.authService.logout()}}var nb=s["ɵcrt"]({encapsulation:0,styles:[["cd-login-password-form h4{margin:0 0 30px}  cd-login-password-form .btn-password,   cd-login-password-form .btn-password:focus,   cd-login-password-form .form-control,   cd-login-password-form .form-control:focus{color:#fff;background-color:#333e46}  cd-login-password-form .form-control::placeholder{color:#90949c}  cd-login-password-form .btn-password:focus{outline-color:#2b99a8}  cd-login-password-form button.btn:not(:first-child){margin-left:5px}"]],data:{}});function ab(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function rb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function ib(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function sb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function ob(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.passwordValuation)}))}function ub(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function lb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password confirmation doesn't match the new password."]))],null,null)}function db(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),(t()(),s["ɵeld"](2,0,null,null,84,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"h2",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Please set a new password."])),(t()(),s["ɵeld"](5,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You will be redirected to the login page afterwards."])),(t()(),s["ɵeld"](7,0,null,null,70,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,9).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,12).onSubmit()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.G,[],null,null),s["ɵdid"](9,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](11,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](12,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](13,0,null,null,20,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](14,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](17,0,null,0,12,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,8,"input",[["autocomplete","new-password"],["autofocus",""],["class","form-control"],["formControlName","oldpassword"],["id","oldpassword"],["placeholder","Old password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,19)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,19)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,19)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](19,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](21,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,4210688,null,0,ks.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](25,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](26,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](27,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,1,"button",[["cdPasswordButton","oldpassword"],["class","btn btn-outline-light btn-password"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,29).onClick()&&a),a}),null,null)),s["ɵdid"](29,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ab)),s["ɵdid"](31,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,rb)),s["ɵdid"](33,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](34,0,null,null,23,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](35,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](38,0,null,0,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](39,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","newpassword"],["id","newpassword"],["placeholder","New password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,40)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,40).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,40)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,40)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](40,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](42,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](44,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](45,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](46,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](47,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](48,0,null,null,1,"button",[["cdPasswordButton","newpassword"],["class","btn btn-outline-light btn-password"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,49).onClick()&&a),a}),null,null)),s["ɵdid"](49,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](50,0,null,0,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(t()(),s["ɵeld"](51,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,0,1,null,ib)),s["ɵdid"](53,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,sb)),s["ɵdid"](55,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ob)),s["ɵdid"](57,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](58,0,null,null,19,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](59,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](62,0,null,0,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](63,0,null,null,7,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","confirmnewpassword"],["id","confirmnewpassword"],["placeholder","Confirm new password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,64)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,64).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,64)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,64)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](64,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](66,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](68,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](69,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](70,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](71,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](72,0,null,null,1,"button",[["cdPasswordButton","confirmnewpassword"],["class","btn btn-outline-light btn-password"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,73).onClick()&&a),a}),null,null)),s["ɵdid"](73,81920,null,0,vh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ub)),s["ɵdid"](75,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,lb)),s["ɵdid"](77,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](78,0,null,null,8,"div",[["class","form-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](79,0,null,null,4,"cd-submit-button",[["btnClass","btn-block"],["class","full-width"]],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](80,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"],btnClass:[1,"btnClass"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](81,0,[" "," "," "])),s["ɵppd"](82,1),s["ɵppd"](83,1),(t()(),s["ɵeld"](84,0,null,null,2,"button",[["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onCancel()&&a),a}),null,null)),(t()(),s["ɵeld"](85,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cancel"]))],(function(t,e){var n=e.component;t(e,9,0,n.userForm),t(e,12,0,n.userForm),t(e,14,0),t(e,21,0,"oldpassword"),t(e,24,0,""),t(e,26,0,"oldpassword"),t(e,29,0,"oldpassword"),t(e,31,0,n.userForm.showError("oldpassword",s["ɵnov"](e,9),"required")),t(e,33,0,n.userForm.showError("oldpassword",s["ɵnov"](e,9),"notmatch")),t(e,35,0),t(e,42,0,"newpassword"),t(e,46,0,"newpassword"),t(e,49,0,"newpassword"),t(e,53,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"required")),t(e,55,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"notmatch")),t(e,57,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"passwordPolicy")),t(e,59,0),t(e,66,0,"confirmnewpassword"),t(e,70,0,"confirmnewpassword"),t(e,73,0,"confirmnewpassword"),t(e,75,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,9),"required")),t(e,77,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,9),"match")),t(e,80,0,n.userForm,"btn-block")}),(function(t,e){var n=e.component;t(e,7,0,s["ɵnov"](e,11).ngClassUntouched,s["ɵnov"](e,11).ngClassTouched,s["ɵnov"](e,11).ngClassPristine,s["ɵnov"](e,11).ngClassDirty,s["ɵnov"](e,11).ngClassValid,s["ɵnov"](e,11).ngClassInvalid,s["ɵnov"](e,11).ngClassPending),t(e,13,0,s["ɵnov"](e,14).hasErrors,s["ɵnov"](e,14).hasSuccess),t(e,18,0,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass),t(e,34,0,s["ɵnov"](e,35).hasErrors,s["ɵnov"](e,35).hasSuccess),t(e,39,0,s["ɵnov"](e,44).ngClassUntouched,s["ɵnov"](e,44).ngClassTouched,s["ɵnov"](e,44).ngClassPristine,s["ɵnov"](e,44).ngClassDirty,s["ɵnov"](e,44).ngClassValid,s["ɵnov"](e,44).ngClassInvalid,s["ɵnov"](e,44).ngClassPending,s["ɵnov"](e,46).validClass,s["ɵnov"](e,46).invalidClass),t(e,51,0,s["ɵinlineInterpolate"](1,"",n.passwordStrengthLevelClass,""),s["ɵinlineInterpolate"](1,"",n.passwordValuation,"")),t(e,58,0,s["ɵnov"](e,59).hasErrors,s["ɵnov"](e,59).hasSuccess),t(e,63,0,s["ɵnov"](e,68).ngClassUntouched,s["ɵnov"](e,68).ngClassTouched,s["ɵnov"](e,68).ngClassPristine,s["ɵnov"](e,68).ngClassDirty,s["ɵnov"](e,68).ngClassValid,s["ɵnov"](e,68).ngClassInvalid,s["ɵnov"](e,68).ngClassPending,s["ɵnov"](e,70).validClass,s["ɵnov"](e,70).invalidClass);var a=s["ɵunv"](e,81,0,t(e,82,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,81,1,t(e,83,0,s["ɵnov"](e,1),n.resource));t(e,81,0,a,r)}))}function cb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login-password-form",[],null,null,null,db,nb)),s["ɵdid"](1,49152,null,0,eb,[he.a,It.b,mt.a,St.a,Q.a,Yo.a,Lt.m,xh.a,Vt.a],null,null)],null,null)}var fb=s["ɵccf"]("cd-login-password-form",eb,cb,{},{},[]);class hb{constructor(){}}var gb=s["ɵcrt"]({encapsulation:0,styles:[["#toast-container{margin-top:2vw}@media (max-width:1600px){  #toast-container{margin-top:2.5vw}}@media (max-width:calc(992px - 1px)){  #toast-container{margin-top:9vw}}@media (max-width:900px){  #toast-container{margin-top:10vw}}@media (max-width:319px){  #toast-container{margin-top:11vw}}@media (max-width:260px){  #toast-container{margin-top:14vw}}"]],data:{}});function pb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](1,212992,null,0,Lt.r,[Lt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function bb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-blank-layout",[],null,null,null,pb,gb)),s["ɵdid"](1,49152,null,0,hb,[],null,null)],null,null)}var mb=s["ɵccf"]("cd-blank-layout",hb,bb,{},{},[]);class yb{constructor(){this.logoutUrl=window.location.origin+"/auth/saml2/slo"}}var vb=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large}*[_ngcontent-%COMP%]{font-family:monospace}img[_ngcontent-%COMP%]{width:50vw}"]],data:{}});function xb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,16,"div",[["class","col-md-12 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, the user does not exist in Ceph."])),(t()(),s["ɵeld"](4,0,null,null,4,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Return to "])),(t()(),s["ɵeld"](6,0,null,null,1,"a",[["class","sso-logout"]],[[8,"href",4]],null,null,null,null)),(t()(),s["ɵted"](-1,null,["Login Page"])),(t()(),s["ɵted"](-1,null,[". You'll be logged out from the Identity Provider when you retry logging in."])),(t()(),s["ɵeld"](9,0,null,null,0,"img",[["class","img-fluid mx-auto rounded"],["src","assets/1280px-Nautilus_Octopus.jpg"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[' "'])),(t()(),s["ɵeld"](13,0,null,null,1,"a",[["href","https://www.flickr.com/photos/146401137@N06/40335060661"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Nautilus Octopus"])),(t()(),s["ɵted"](-1,null,['" by Jin Kemoole is licensed under '])),(t()(),s["ɵeld"](16,0,null,null,1,"a",[["class","external text"],["href","https://creativecommons.org/licenses/by/2.0/"],["rel","nofollow"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CC BY 2.0"]))],null,(function(t,e){t(e,6,0,e.component.logoutUrl)}))}function _b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-sso-not-found",[],null,null,null,xb,vb)),s["ɵdid"](1,49152,null,0,yb,[],null,null)],null,null)}var Tb=s["ɵccf"]("cd-sso-not-found",yb,_b,{},{},[]);class Ob{constructor(){this.icons=bt.a}}var wb=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large;font-family:monospace}h2[_ngcontent-%COMP%]{font-size:xx-large;font-family:monospace}i[_ngcontent-%COMP%]{font-size:200px}"]],data:{}});function Sb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","horizontal-align vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"div",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Forbidden"])),(t()(),s["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"h2",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, you are not allowed to see what you were looking for."])),(t()(),s["ɵeld"](7,0,null,null,3,"button",[["class","btn btn-primary"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,8).onClick()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,Lt.n,[Lt.m,Lt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,8,0,"/login")}),(function(t,e){t(e,4,0,s["ɵinlineInterpolate"](1,"",e.component.icons.lock," text-danger"))}))}function Ib(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-forbidden",[],null,null,null,Sb,wb)),s["ɵdid"](1,49152,null,0,Ob,[],null,null)],null,null)}var Nb=s["ɵccf"]("cd-forbidden",Ob,Ib,{},{},[]);class Cb{constructor(){}}var Rb=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large;font-family:monospace}*[_ngcontent-%COMP%]{font-family:monospace}img[_ngcontent-%COMP%]{width:50vw}"]],data:{}});function Ab(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","horizontal-align vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,16,"div",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, we could not find what you were looking for."])),(t()(),s["ɵeld"](4,0,null,null,0,"img",[["class","img-fluid mx-auto rounded"],["src","assets/1500px-Southern_Keeled_Octopus.jpg"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[' "'])),(t()(),s["ɵeld"](8,0,null,null,1,"a",[["href","https://collections.museumvictoria.com.au/species/8696"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Southern Keeled Octopus, Octopus berrima"])),(t()(),s["ɵted"](-1,null,['" by Museums Victoria (Photographer: Julian Finn) is licensed under '])),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","external text"],["href","https://creativecommons.org/licenses/by/4.0"],["rel","nofollow"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CC BY 4.0"])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,3,"button",[["class","btn btn-primary"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,15).onClick()&&a),a}),null,null)),s["ɵdid"](15,16384,null,0,Lt.n,[Lt.m,Lt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](16,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,15,0,"/login")}),null)}function kb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-not-found",[],null,null,null,Ab,Rb)),s["ɵdid"](1,49152,null,0,Cb,[],null,null)],null,null)}var Eb=s["ɵccf"]("cd-not-found",Cb,kb,{},{},[]),Lb=n("ES0t"),Db=n("Xg1U"),Pb=n("z5nN"),Mb=n("iutN"),qb=n("EEJc"),jb=n("PEr+"),Fb=n("a40w"),Gb=n("hfeG"),Vb=n("atuK"),zb=s["ɵcrt"]({encapsulation:0,styles:[[".about-container[_ngcontent-%COMP%]{background-color:#374249;background-image:url(ceph_background.7c127240f022e7baf57d.gif);background-position:right bottom;background-repeat:no-repeat;color:#fff;text-shadow:1px 1px #374249}.product-versions[_ngcontent-%COMP%]{margin-top:30px}.product-versions[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{margin-right:10px}.modal-header[_ngcontent-%COMP%]{border-bottom:none}.modal-header[_ngcontent-%COMP%]   .close[_ngcontent-%COMP%]{color:#fff;font-size:2em}.modal-body[_ngcontent-%COMP%]{padding-left:80px;padding-right:80px}.ceph-logo[_ngcontent-%COMP%]{width:25%;margin-bottom:30px;object-position:-20px 0}.modal-footer[_ngcontent-%COMP%]{display:block;border-top:none;padding:15px 80px 35px}"]],data:{}});function Bb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,45,"div",[["class","about-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"div",[["class","modal-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"button",[["aria-label","Close"],["class","close float-right"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.modalRef.hide()&&a),a}),null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](5,0,null,null,37,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"img",[["class","ceph-logo"],["src","assets/Ceph_Logo_Standard_RGB_Reversed_120411_fa.png"]],[[8,"alt",0]],null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,2,"h3",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["",""])),(t()(),s["ɵeld"](10,0,null,null,6,"div",[["class","product-versions"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Version"])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](14,null,[" "," "," "])),(t()(),s["ɵeld"](15,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](16,null,[" "," "])),(t()(),s["ɵeld"](17,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,24,"dl",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ceph Manager"])),(t()(),s["ɵeld"](21,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](22,null,["",""])),(t()(),s["ɵeld"](23,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["User"])),(t()(),s["ɵeld"](25,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](26,null,["",""])),(t()(),s["ɵeld"](27,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["User Role"])),(t()(),s["ɵeld"](29,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](30,null,["",""])),(t()(),s["ɵeld"](31,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser"])),(t()(),s["ɵeld"](33,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](34,null,["",""])),(t()(),s["ɵeld"](35,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser Version"])),(t()(),s["ɵeld"](37,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](38,null,["",""])),(t()(),s["ɵeld"](39,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser OS"])),(t()(),s["ɵeld"](41,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](42,null,["",""])),(t()(),s["ɵeld"](43,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,1,"div",[["class","text-left"]],null,null,null,null,null)),(t()(),s["ɵted"](45,null,[" "," "," "]))],null,(function(t,e){var n=e.component;t(e,6,0,s["ɵinlineInterpolate"](1,"",n.projectConstants.organization,"")),t(e,9,0,n.projectConstants.projectName),t(e,14,0,n.versionNumber,n.versionHash),t(e,16,0,n.versionName),t(e,22,0,n.hostAddr),t(e,26,0,n.modalVariables.user),t(e,30,0,n.modalVariables.role),t(e,34,0,n.modalVariables.browserName),t(e,38,0,n.modalVariables.browserVersion),t(e,42,0,n.modalVariables.browserOS),t(e,45,0,n.copyright,n.projectConstants.license)}))}function Yb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-about",[],null,null,null,Bb,zb)),s["ɵdid"](1,245760,null,0,Nt,[Rt.a,yt.a,St.a,Q.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Hb=s["ɵccf"]("cd-about",Nt,Yb,{},{},[]),Ub=s["ɵcrt"]({encapsulation:0,styles:[".dropdown[_nghost-%COMP%] {\n      z-index: 1000;\n    }\n\n    .dropdown-menu[_nghost-%COMP%], .dropdown-menu[_ngcontent-%COMP%] {\n      overflow-y: auto;\n      height: 100px;\n    }"],data:{animation:[{type:7,name:"typeaheadAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function Wb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function Kb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,0,0,e.component.highlight(e.context.match,e.context.query))}))}function $b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,1,"li",[["class","dropdown-header"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit)}))}function Jb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function Zb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,4,"li",[],[[24,"@typeaheadAnimation",0],[2,"active",null]],[[null,"mouseenter"]],(function(t,e,n){var a=!0;return"mouseenter"===e&&(a=!1!==t.component.selectActive(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"a",[["href","#"],["tabindex","-1"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectMatch(t.parent.context.$implicit,n)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Jb)),s["ɵdid"](3,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](4,{item:0,index:1,match:2,query:3})],(function(t,e){var n=e.component,a=t(e,4,0,e.parent.context.$implicit.item,e.parent.context.index,e.parent.context.$implicit,n.query);t(e,3,0,a,n.itemTemplate||s["ɵnov"](e.parent.parent.parent,5))}),(function(t,e){var n=e.component;t(e,0,0,n.animationState,n.isActive(e.parent.context.$implicit))}))}function Qb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,$b)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zb)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.context.$implicit.isHeader();t(e,1,0,n);var a=!e.context.$implicit.isHeader();t(e,3,0,a)}),null)}function Xb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[1,0],["ulElement",1]],null,2,"ul",[["class","dropdown-menu"]],[[4,"overflow-y",null],[4,"height",null]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Qb)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.matches)}),(function(t,e){var n=e.component;t(e,0,0,n.needScrollbar?"scroll":"auto",n.needScrollbar?n.guiHeight:"auto")}))}function tm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"h6",[["class","dropdown-header"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit)}))}function em(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function nm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,3,"button",[["class","dropdown-item"]],[[24,"@typeaheadAnimation",0],[2,"active",null]],[[null,"click"],[null,"mouseenter"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectMatch(t.parent.context.$implicit,n)&&a),"mouseenter"===e&&(a=!1!==r.selectActive(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,em)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](3,{item:0,index:1,match:2,query:3})],(function(t,e){var n=e.component,a=t(e,3,0,e.parent.context.$implicit.item,e.parent.context.index,e.parent.context.$implicit,n.query);t(e,2,0,a,n.itemTemplate||s["ɵnov"](e.parent.parent.parent,5))}),(function(t,e){var n=e.component;t(e,0,0,n.animationState,n.isActive(e.parent.context.$implicit))}))}function am(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,tm)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,nm)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.context.$implicit.isHeader();t(e,1,0,n);var a=!e.context.$implicit.isHeader();t(e,3,0,a)}),null)}function rm(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,am)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.matches)}),null)}function im(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{ulElement:0}),s["ɵqud"](671088640,2,{liElements:1}),(t()(),s["ɵand"](16777216,null,null,2,null,Wb)),s["ɵdid"](3,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](4,{matches:0,itemTemplate:1,query:2}),(t()(),s["ɵand"](0,[["bsItemTemplate",2]],null,0,null,Kb)),(t()(),s["ɵand"](0,[["bs3Template",2]],null,0,null,Xb)),(t()(),s["ɵand"](0,[["bs4Template",2]],null,0,null,rm))],(function(t,e){var n=e.component,a=t(e,4,0,n.matches,n.itemTemplate,n.query);t(e,3,0,a,n.optionsListTemplate||s["ɵnov"](e,n.isBs4?7:6))}),null)}function sm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"typeahead-container",[["class","dropdown open bottom"],["style","position: absolute;display: block;"]],[[2,"dropdown-menu",null],[4,"height",null],[4,"visibility",null],[2,"dropup",null]],[[null,"mouseleave"],[null,"blur"]],(function(t,e,n){var a=!0;return"mouseleave"===e&&(a=!1!==s["ɵnov"](t,1).focusLost()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).focusLost()&&a),a}),im,Ub)),s["ɵdid"](1,180224,null,0,fg,[ia.a,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null)],null,(function(t,e){t(e,0,0,s["ɵnov"](e,1).isBs4,s["ɵnov"](e,1).isBs4&&s["ɵnov"](e,1).needScrollbar?s["ɵnov"](e,1).guiHeight:"auto","inherit",s["ɵnov"](e,1).dropup)}))}var om=s["ɵccf"]("typeahead-container",fg,sm,{},{},[]),um=n("ajRT"),lm=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function dm(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Deep "]))],null,null)}function cm(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["deep "]))],null,null)}function fm(t){return s["ɵvid"](0,[s["ɵpid"](0,gs.a,[]),(t()(),s["ɵeld"](1,0,null,null,33,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](2,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](3,0,null,0,6,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSDs "])),(t()(),s["ɵeld"](5,0,null,null,3,null,null,null,null,null,null,null)),s["ɵdid"](6,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dm)),s["ɵdid"](8,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](-1,null,["Scrub"])),(t()(),s["ɵeld"](10,0,null,1,24,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,23,"form",[["name","scrubForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,13).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,13).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,16).onSubmit()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,$.G,[],null,null),s["ɵdid"](13,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](15,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](16,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](17,0,null,null,11,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,10,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You are about to apply a "])),(t()(),s["ɵeld"](20,0,null,null,3,null,null,null,null,null,null,null)),s["ɵdid"](21,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cm)),s["ɵdid"](23,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](-1,null,["scrub to the OSD(s): "])),(t()(),s["ɵeld"](25,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](26,null,["",""])),s["ɵppd"](27,1),(t()(),s["ɵted"](-1,null,["."])),(t()(),s["ɵeld"](29,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.scrub()&&a),a}),Es.b,Es.a)),s["ɵdid"](31,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"])),(t()(),s["ɵeld"](33,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](34,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.bsModalRef),t(e,6,0,n.deep),t(e,8,0,"1"),t(e,13,0,n.scrubForm),t(e,16,0,n.scrubForm),t(e,21,0,n.deep),t(e,23,0,"1"),t(e,31,0,n.scrubForm),t(e,34,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,11,0,s["ɵnov"](e,15).ngClassUntouched,s["ɵnov"](e,15).ngClassTouched,s["ɵnov"](e,15).ngClassPristine,s["ɵnov"](e,15).ngClassDirty,s["ɵnov"](e,15).ngClassValid,s["ɵnov"](e,15).ngClassInvalid,s["ɵnov"](e,15).ngClassPending);var a=s["ɵunv"](e,26,0,t(e,27,0,s["ɵnov"](e,0),n.selected));t(e,26,0,a)}))}function hm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-scrub-modal",[],null,null,null,fm,lm)),s["ɵdid"](1,114688,null,0,Uo,[Rt.a,mi,mt.a,he.a,gs.a],null,null)],(function(t,e){t(e,1,0)}),null)}var gm=s["ɵccf"]("cd-osd-scrub-modal",Uo,hm,{},{},[]),pm=s["ɵcrt"]({encapsulation:0,styles:[[".osd-modal[_ngcontent-%COMP%]   .oa-hr-small[_ngcontent-%COMP%]{margin:5px}"]],data:{}});function bm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"hr",[["class","oa-hr-small"]],null,null,null,null,null))],null,null)}function mm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"checked",0],[8,"name",0],[8,"id",0],[8,"disabled",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=0!=(t.context.$implicit.value=!t.context.$implicit.value)&&a),a}),null,null)),s["ɵdid"](2,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](3,16384,null,0,X.h,[[3,$.d],X.a],null,null),(t()(),s["ɵeld"](4,0,null,null,5,"label",[["class","custom-control-label"],["ng-class","['tc_' + key]"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,bm)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,11,0,!e.context.last)}),(function(t,e){t(e,1,0,e.context.$implicit.value,e.context.$implicit.code,e.context.$implicit.code,e.context.$implicit.disabled,s["ɵnov"](e,3).validClass,s["ɵnov"](e,3).invalidClass),t(e,4,0,e.context.$implicit.code),t(e,6,0,e.context.$implicit.name),t(e,9,0,e.context.$implicit.description)}))}function ym(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Es.b,Es.a)),s["ɵdid"](1,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"]))],(function(t,e){t(e,1,0,e.component.osdFlagsForm)}),null)}function vm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,20,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](1,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster-wide OSD Flags"])),(t()(),s["ɵeld"](4,0,null,1,16,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,15,"form",[["cdFormScope","osd"],["name","osdFlagsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,Z.a,[],{cdFormScope:[0,"cdFormScope"]},null),s["ɵdid"](7,16384,null,0,$.G,[],null,null),s["ɵdid"](8,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](12,0,null,null,2,"div",[["class","modal-body osd-modal"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,mm)),s["ɵdid"](14,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](15,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](16,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ym)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](19,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](20,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,6,0,"osd"),t(e,8,0,n.osdFlagsForm),t(e,11,0,n.osdFlagsForm),t(e,14,0,n.flags),t(e,18,0,n.permissions.osd.update),t(e,20,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending)}))}function xm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-flags-modal",[],null,null,null,vm,pm)),s["ɵdid"](1,114688,null,0,qo,[Rt.a,Q.a,mi,mt.a,he.a],null,null)],(function(t,e){t(e,1,0)}),null)}var _m=s["ɵccf"]("cd-osd-flags-modal",qo,xm,{},{},[]),Tm=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Om(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit.name),t(e,2,0,e.context.$implicit.name)}),(function(t,e){t(e,3,0,e.context.$implicit.text)}))}function wm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Sm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](2,0,["",""]))],null,(function(t,e){t(e,2,0,e.parent.context.$implicit.value.desc)}))}function Im(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Nm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.patternHelpText)}))}function Cm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.maxValue)}))}function Rm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.minValue)}))}function Am(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,7,"label",[["class","col-form-label col-sm-6"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](8,{required:0}),(t()(),s["ɵted"](9,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Sm)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,17,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,8,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,15)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,15).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,15)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,15)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,16).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,16).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,16).onTouched()&&a),a}),null,null)),s["ɵdid"](14,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](15,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](16,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](18,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](20,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](21,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Im)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nm)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cm)),s["ɵdid"](27,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rm)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0);var a=t(e,8,0,n.osdRecvSpeedForm.getValue("customizePriority"));t(e,7,0,a),t(e,11,0,e.context.$implicit.value.desc),t(e,18,0,e.context.$implicit.key),t(e,21,0,e.context.$implicit.key),t(e,23,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,8),"required")),t(e,25,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,8),"pattern")),t(e,27,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,8),"max")),t(e,29,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,8),"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.context.$implicit.key),t(e,9,0,e.context.$implicit.value.text),t(e,13,1,[e.context.$implicit.key,!n.osdRecvSpeedForm.getValue("customizePriority"),s["ɵnov"](e,20).ngClassUntouched,s["ɵnov"](e,20).ngClassTouched,s["ɵnov"](e,20).ngClassPristine,s["ɵnov"](e,20).ngClassDirty,s["ɵnov"](e,20).ngClassValid,s["ɵnov"](e,20).ngClassInvalid,s["ɵnov"](e,20).ngClassPending,s["ɵnov"](e,21).validClass,s["ɵnov"](e,21).invalidClass])}))}function km(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Es.b,Es.a)),s["ɵdid"](1,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"]))],(function(t,e){t(e,1,0,e.component.osdRecvSpeedForm)}),null)}function Em(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,56,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](1,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSD Recovery Priority"])),(t()(),s["ɵeld"](4,0,null,1,52,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,51,"form",[["cdFormScope","osd"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,Z.a,[],{cdFormScope:[0,"cdFormScope"]},null),s["ɵdid"](7,16384,null,0,$.G,[],null,null),s["ɵdid"](8,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](12,0,null,null,38,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](14,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](17,0,null,0,1,"label",[["class","col-form-label col-sm-6 required"],["for","priority"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Priority"])),(t()(),s["ɵeld"](19,0,null,0,12,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,9,"select",[["class","form-control custom-select"],["formControlName","priority"],["id","priority"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,22).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,22).onTouched()&&a),"change"===e&&(a=!1!==r.onPriorityChange(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](22,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](24,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](26,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](27,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Om)),s["ɵdid"](29,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wm)),s["ɵdid"](31,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](32,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](33,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](36,0,null,0,11,"div",[["class","offset-sm-6 col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](37,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](38,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","customizePriority"],["id","customizePriority"],["name","customizePriority"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,40).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,40).onTouched()&&a),"change"===e&&(a=!1!==r.onCustomizePriorityChange()&&a),a}),null,null)),s["ɵdid"](39,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](40,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](42,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](44,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](45,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](46,0,null,null,1,"label",[["class","custom-control-label"],["for","customizePriority"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Customize priority values"])),(t()(),s["ɵand"](16777216,null,null,2,null,Am)),s["ɵdid"](49,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵeld"](51,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](52,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,km)),s["ɵdid"](54,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](55,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](56,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,6,0,"osd"),t(e,8,0,n.osdRecvSpeedForm),t(e,11,0,n.osdRecvSpeedForm),t(e,14,0),t(e,24,0,"priority"),t(e,27,0,"priority"),t(e,29,0,n.priorities),t(e,31,0,n.osdRecvSpeedForm.showError("priority",s["ɵnov"](e,8),"required")),t(e,33,0),t(e,42,0,"customizePriority"),t(e,45,0,"customizePriority"),t(e,49,0,s["ɵunv"](e,49,0,s["ɵnov"](e,50).transform(n.priorityAttrs))),t(e,54,0,n.permissions.configOpt.update),t(e,56,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending),t(e,13,0,s["ɵnov"](e,14).hasErrors,s["ɵnov"](e,14).hasSuccess),t(e,20,0,s["ɵnov"](e,26).ngClassUntouched,s["ɵnov"](e,26).ngClassTouched,s["ɵnov"](e,26).ngClassPristine,s["ɵnov"](e,26).ngClassDirty,s["ɵnov"](e,26).ngClassValid,s["ɵnov"](e,26).ngClassInvalid,s["ɵnov"](e,26).ngClassPending,s["ɵnov"](e,27).validClass,s["ɵnov"](e,27).invalidClass),t(e,32,0,s["ɵnov"](e,33).hasErrors,s["ɵnov"](e,33).hasSuccess),t(e,38,0,s["ɵnov"](e,44).ngClassUntouched,s["ɵnov"](e,44).ngClassTouched,s["ɵnov"](e,44).ngClassPristine,s["ɵnov"](e,44).ngClassDirty,s["ɵnov"](e,44).ngClassValid,s["ɵnov"](e,44).ngClassInvalid,s["ɵnov"](e,44).ngClassPending,s["ɵnov"](e,45).validClass,s["ɵnov"](e,45).invalidClass)}))}function Lm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-recv-speed-modal",[],null,null,null,Em,Tm)),s["ɵdid"](1,114688,null,0,Bo,[Rt.a,Q.a,jo.a,mt.a,he.a,mi],null,null)],(function(t,e){t(e,1,0)}),null)}var Dm=s["ɵccf"]("cd-osd-recv-speed-modal",Bo,Lm,{},{},[]),Pm=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Mm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function qm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The value needs to be between 0 and 1."]))],null,null)}function jm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Mm)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qm)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,null==n.weight.errors?null:n.weight.errors.required),t(e,4,0,(null==n.weight.errors?null:n.weight.errors.max)||(null==n.weight.errors?null:n.weight.errors.min))}),null)}function Fm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,32,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](1,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](3,null,["Reweight OSD: ",""])),(t()(),s["ɵeld"](4,0,null,1,28,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,27,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,15,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,14,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"label",[["class","col-sm-2 col-form-label"],["for","weight"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Weight"])),(t()(),s["ɵeld"](15,0,null,null,11,"div",[["class","col-sm-10"]],null,null,null,null,null)),(t()(),s["ɵeld"](16,0,null,null,8,"input",[["class","form-control"],["formControlName","weight"],["id","weight"],["max","1"],["min","0"],["step","0.1"],["type","number"]],[[8,"value",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,18)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,18).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,18)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,18)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,19).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,19).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),a}),null,null)),s["ɵdid"](17,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](18,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](19,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](21,671744,null,0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,jm)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](27,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.reweight()&&a),a}),Es.b,Es.a)),s["ɵdid"](29,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Reweight"])),(t()(),s["ɵeld"](31,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](32,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.reweightForm),t(e,10,0,n.reweightForm),t(e,21,0,"weight"),t(e,24,0,"weight"),t(e,26,0,n.weight.errors),t(e,29,0,n.reweightForm,n.reweightForm.invalid),t(e,32,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,3,0,n.osdId),t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending),t(e,16,0,n.currentWeight,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,24).validClass,s["ɵnov"](e,24).invalidClass)}))}function Gm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-reweight-modal",[],null,null,null,Fm,Pm)),s["ɵdid"](1,114688,null,0,Ho,[Rt.a,mi,Yo.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Vm=s["ɵccf"]("cd-osd-reweight-modal",Ho,Gm,{},{},[]),zm=s["ɵcrt"]({encapsulation:0,styles:[[".custom-checkbox[_ngcontent-%COMP%]   input[_ngcontent-%COMP%], .custom-checkbox[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{cursor:pointer}.col-form-label[_ngcontent-%COMP%]{text-align:left}"]],data:{}});function Bm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](2,0,[" ",""]))],null,(function(t,e){t(e,2,0,e.parent.parent.context.$implicit.long_desc)}))}function Ym(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,22,"div",[["class","form-group row pt-2"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,7,"label",[["class","col-form-label col-6"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"span",[["class","text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Bm)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,10,"div",[["class","col-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,7,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,15).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,15).onTouched()&&a),a}),null,null)),s["ɵdid"](15,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](17,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](21,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](22,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],(function(t,e){t(e,1,0),t(e,11,0,e.parent.context.$implicit.long_desc),t(e,17,0,e.parent.context.$implicit.name),t(e,21,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit.name),t(e,6,0,e.parent.context.$implicit.text),t(e,9,0,e.parent.context.$implicit.desc),t(e,14,0,e.parent.context.$implicit.name,s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,21).validClass,s["ɵnov"](e,21).invalidClass),t(e,22,0,e.parent.context.$implicit.name)}))}function Hm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,ou.b,ou.a)),s["ɵdid"](1,49152,null,0,uu.a,[],null,null),(t()(),s["ɵted"](2,0,[" ",""]))],null,(function(t,e){t(e,2,0,e.parent.parent.context.$implicit.long_desc)}))}function Um(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"button",[["class","btn btn-light"],["data-toggle","button"],["title","Remove the custom configuration value. The default configuration will be inherited and used instead."],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.resetValue(t.parent.parent.context.$implicit.name)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1)],(function(t,e){var n=t(e,5,0,e.component.icons.erase);t(e,4,0,n)}),null)}function Wm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",""]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.additionalTypeInfo.patternHelpText)}))}function Km(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",""]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.additionalTypeInfo.patternHelpText)}))}function $m(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.maxValue)}))}function Jm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.minValue)}))}function Zm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,30,"div",[["class","form-group row pt-2"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](1,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,6,"label",[["class","col-6 col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"span",[["class","text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Hm)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](11,0,null,0,19,"div",[["class","col-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,10,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,7,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"placeholder",0],[8,"step",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,14)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,14).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,14)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,14)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](14,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](16,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](18,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](19,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](20,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Um)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Wm)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Km)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$m)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jm)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,e.parent.context.$implicit.long_desc),t(e,16,0,e.parent.context.$implicit.name),t(e,20,0,e.parent.context.$implicit.name),t(e,22,0,n.optionsFormShowReset),t(e,24,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"pattern")),t(e,26,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"invalidUuid")),t(e,28,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"max")),t(e,30,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit.name),t(e,5,0,e.parent.context.$implicit.text),t(e,8,0,e.parent.context.$implicit.desc),t(e,13,1,[e.parent.context.$implicit.additionalTypeInfo.inputType,e.parent.context.$implicit.name,e.parent.context.$implicit.additionalTypeInfo.humanReadable,n.getStep(e.parent.context.$implicit.type,n.optionsForm.getValue(e.parent.context.$implicit.name)),s["ɵnov"](e,18).ngClassUntouched,s["ɵnov"](e,18).ngClassTouched,s["ɵnov"](e,18).ngClassPristine,s["ɵnov"](e,18).ngClassDirty,s["ɵnov"](e,18).ngClassValid,s["ɵnov"](e,18).ngClassInvalid,s["ɵnov"](e,18).ngClassPending,s["ɵnov"](e,20).validClass,s["ɵnov"](e,20).invalidClass])}))}function Qm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"hr",[["class","my-2"]],null,null,null,null,null))],null,null)}function Xm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ym)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zm)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Qm)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,"bool"===e.context.$implicit.type),t(e,4,0,"bool"!==e.context.$implicit.type),t(e,6,0,!e.context.last)}),null)}function ty(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,1).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,1).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,4).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](3,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](4,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xm)),s["ɵdid"](6,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.optionsFormGroup),t(e,4,0,n.optionsFormGroup),t(e,6,0,n.options)}),(function(t,e){t(e,0,0,s["ɵnov"](e,3).ngClassUntouched,s["ɵnov"](e,3).ngClassTouched,s["ɵnov"](e,3).ngClassPristine,s["ɵnov"](e,3).ngClassDirty,s["ɵnov"](e,3).ngClassValid,s["ɵnov"](e,3).ngClassInvalid,s["ɵnov"](e,3).ngClassPending)}))}var ey=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ny(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"a",[["class","pull-right margin-right-md"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=0!=(t.component.advancedEnabled=!0)&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Advanced..."]))],null,null)}function ay(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"h3",[["class","page-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Advanced configuration options"])),(t()(),s["ɵeld"](3,0,null,null,1,"cd-config-option",[],null,null,null,ty,zm)),s["ɵdid"](4,114688,[[2,4],["advancedOptionsValues",4]],0,Go,[jo.a],{optionNames:[0,"optionNames"],optionsForm:[1,"optionsForm"],optionsFormDir:[2,"optionsFormDir"],optionsFormGroupName:[3,"optionsFormGroupName"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.advancedOptions,n.osdPgScrubForm,s["ɵnov"](e.parent,14),"advancedFormGroup")}),null)}function ry(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Es.b,Es.a)),s["ɵdid"](1,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](2,0,[""," ",""])),s["ɵppd"](3,1),s["ɵppd"](4,1)],(function(t,e){t(e,1,0,e.component.osdPgScrubForm)}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,2,1,t(e,4,0,s["ɵnov"](e.parent,1),n.resource));t(e,2,0,a,r)}))}function iy(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,Ms.a,[]),s["ɵqud"](402653184,1,{basicOptionsValues:0}),s["ɵqud"](671088640,2,{advancedOptionsValues:0}),(t()(),s["ɵeld"](4,0,null,null,28,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](5,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](6,0,null,0,3,null,null,null,null,null,null,null)),(t()(),s["ɵted"](7,null,[""," ",""])),s["ɵppd"](8,1),s["ɵppd"](9,1),(t()(),s["ɵeld"](10,0,null,1,22,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,21,"form",[["cdFormScope","osd"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,14).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,14).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,17).onSubmit()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,Z.a,[],{cdFormScope:[0,"cdFormScope"]},null),s["ɵdid"](13,16384,null,0,$.G,[],null,null),s["ɵdid"](14,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](16,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](17,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](18,0,null,null,8,"div",[["class","modal-body osd-modal"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,1,"cd-config-option",[],null,null,null,ty,zm)),s["ɵdid"](20,114688,[[1,4],["basicOptionsValues",4]],0,Go,[jo.a],{optionNames:[0,"optionNames"],optionsForm:[1,"optionsForm"],optionsFormDir:[2,"optionsFormDir"],optionsFormGroupName:[3,"optionsFormGroupName"]},null),(t()(),s["ɵeld"](21,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ny)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ay)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](27,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ry)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](31,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](32,49152,null,0,Ps.a,[i.Location,It.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,5,0,n.bsModalRef),t(e,12,0,"osd"),t(e,14,0,n.osdPgScrubForm),t(e,17,0,n.osdPgScrubForm),t(e,20,0,n.basicOptions,n.osdPgScrubForm,s["ɵnov"](e,14),"basicFormGroup"),t(e,24,0,!n.advancedEnabled),t(e,26,0,n.advancedEnabled),t(e,30,0,n.permissions.configOpt.update),t(e,32,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component,a=s["ɵunv"](e,7,0,t(e,8,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,7,1,t(e,9,0,s["ɵnov"](e,1),n.resource));t(e,7,0,a,r),t(e,11,0,s["ɵnov"](e,16).ngClassUntouched,s["ɵnov"](e,16).ngClassTouched,s["ɵnov"](e,16).ngClassPristine,s["ɵnov"](e,16).ngClassDirty,s["ɵnov"](e,16).ngClassValid,s["ɵnov"](e,16).ngClassInvalid,s["ɵnov"](e,16).ngClassPending)}))}function sy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-pg-scrub-modal",[],null,null,null,iy,ey)),s["ɵdid"](1,49152,null,0,zo,[Rt.a,Q.a,mt.a,he.a,It.b],null,null)],null,null)}var oy=s["ɵccf"]("cd-osd-pg-scrub-modal",zo,sy,{},{},[]),uy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ly(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function dy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","help-block"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function cy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","help-block"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function fy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["id","match-state"]],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵted"](2,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,s["ɵinlineInterpolate"](1,"cd-col-form-offset ",n.matcherMatch.cssClass,"")),t(e,1,0,s["ɵinlineInterpolate"](1,"text-muted ",n.matcherMatch.cssClass,"")),t(e,2,0,n.matcherMatch.status)}))}function hy(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Update"]))],null,null)}function gy(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Add"]))],null,null)}function py(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,82,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](1,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Matcher"])),(t()(),s["ɵeld"](4,0,null,1,78,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,77,"form",[["class","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,59,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](13,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](18,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,13,"select",[["class","form-control"],["formControlName","name"],["id","name"],["name","name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,21).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,21).onTouched()&&a),a}),null,null)),s["ɵdid"](20,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](21,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](23,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](25,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](26,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](27,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](28,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](29,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["-- Select an attribute to match against --"])),(t()(),s["ɵand"](16777216,null,null,1,null,ly)),s["ɵdid"](32,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dy)),s["ɵdid"](34,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](35,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](36,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](39,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","value"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value"])),(t()(),s["ɵeld"](41,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](42,16777216,null,null,8,"input",[["class","form-control"],["formControlName","value"],["id","value"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,44)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,44).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,44)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,44)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,49).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,49).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,49).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,49).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,49).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,49).onKeydown(n)&&a),a}),null,null)),s["ɵdid"](43,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](44,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](46,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](48,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](49,212992,null,0,gg,[W.a,hg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"],typeaheadMinLength:[1,"typeaheadMinLength"]},null),s["ɵdid"](50,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cy)),s["ɵdid"](52,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,fy)),s["ɵdid"](54,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](55,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,As.b,As.a)),s["ɵdid"](56,1163264,null,2,X.c,[s.ElementRef,X.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](59,0,null,0,11,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](60,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](61,0,null,null,7,"input",[["class","custom-control-input"],["formControlName","isRegex"],["id","is-regex"],["name","is-regex"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,63).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,63).onTouched()&&a),a}),null,null)),s["ɵdid"](62,4210688,null,0,J.a,[[2,Z.a],Q.a,s.ElementRef],null,null),s["ɵdid"](63,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](65,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](67,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](68,16384,null,0,X.h,[[3,$.d],X.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](69,0,null,null,1,"label",[["class","custom-control-label"],["for","is-regex"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Use regular expression"])),(t()(),s["ɵeld"](71,0,null,null,11,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](72,0,null,null,8,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](73,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](74,0,null,0,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](75,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](76,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hy)),s["ɵdid"](78,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gy)),s["ɵdid"](80,16384,null,0,i.NgSwitchDefault,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],null,null),(t()(),s["ɵeld"](81,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](82,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.form),t(e,10,0,n.form),t(e,13,0),t(e,23,0,"name"),t(e,26,0,"name"),t(e,28,0,null),t(e,29,0,null),t(e,32,0,n.nameAttributes),t(e,34,0,n.form.showError("name",s["ɵnov"](e,7),"required")),t(e,36,0),t(e,46,0,"value"),t(e,49,0,n.possibleValues,0),t(e,50,0,"value"),t(e,52,0,n.form.showError("value",s["ɵnov"](e,7),"required")),t(e,54,0,n.form.getValue("value")&&!n.form.getValue("isRegex")&&n.matcherMatch),t(e,56,0),t(e,65,0,"isRegex"),t(e,68,0,"isRegex"),t(e,73,0,n.form),t(e,76,0,n.editMode),t(e,78,0,"1"),t(e,82,0,"Close",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending),t(e,12,0,s["ɵnov"](e,13).hasErrors,s["ɵnov"](e,13).hasSuccess),t(e,19,0,s["ɵnov"](e,25).ngClassUntouched,s["ɵnov"](e,25).ngClassTouched,s["ɵnov"](e,25).ngClassPristine,s["ɵnov"](e,25).ngClassDirty,s["ɵnov"](e,25).ngClassValid,s["ɵnov"](e,25).ngClassInvalid,s["ɵnov"](e,25).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass),t(e,35,0,s["ɵnov"](e,36).hasErrors,s["ɵnov"](e,36).hasSuccess),t(e,42,0,s["ɵnov"](e,48).ngClassUntouched,s["ɵnov"](e,48).ngClassTouched,s["ɵnov"](e,48).ngClassPristine,s["ɵnov"](e,48).ngClassDirty,s["ɵnov"](e,48).ngClassValid,s["ɵnov"](e,48).ngClassInvalid,s["ɵnov"](e,48).ngClassPending,s["ɵnov"](e,50).validClass,s["ɵnov"](e,50).invalidClass),t(e,55,0,s["ɵnov"](e,56).hasErrors,s["ɵnov"](e,56).hasSuccess),t(e,61,0,s["ɵnov"](e,67).ngClassUntouched,s["ɵnov"](e,67).ngClassTouched,s["ɵnov"](e,67).ngClassPristine,s["ɵnov"](e,67).ngClassDirty,s["ɵnov"](e,67).ngClassValid,s["ɵnov"](e,67).ngClassInvalid,s["ɵnov"](e,67).ngClassPending,s["ɵnov"](e,68).validClass,s["ɵnov"](e,68).invalidClass)}))}function by(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-silence-matcher-modal",[],null,null,null,py,uy)),s["ɵdid"](1,49152,null,0,Rc,[Yo.a,Nc,Rt.a],null,null)],null,null)}var my=s["ɵccf"]("cd-silence-matcher-modal",Rc,by,{},{submitAction:"submitAction"},[]),yy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function vy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","badge badge-dark ml-2"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.context.$implicit)}))}function xy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,Mr.b,Mr.a)),s["ɵdid"](1,114688,null,0,qr.a,[he.a],{type:[0,"type"],size:[1,"size"],showTitle:[2,"showTitle"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["At least one of these filters must be applied in order to proceed:"])),(t()(),s["ɵand"](16777216,null,0,1,null,vy)),s["ɵdid"](5,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"warning","slim",!1),t(e,5,0,n.requiredFilters)}),null)}function _y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"p",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["Number of devices: ",". Raw capacity: ","."])),s["ɵppd"](4,1)],null,(function(t,e){var n=e.component,a=n.filteredDevices.length,r=s["ɵunv"](e,3,1,t(e,4,0,s["ɵnov"](e.parent,0),n.capacity));t(e,3,0,a,r)}))}function Ty(t){return s["ɵvid"](0,[s["ɵpid"](0,ma.a,[Ia.a]),s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵqud"](671088640,1,{inventoryDevices:0}),(t()(),s["ɵeld"](3,0,null,null,25,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](4,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](5,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](6,null,[""," devices"])),(t()(),s["ɵeld"](7,0,null,1,21,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,20,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,10).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,13).onSubmit()&&a),a}),null,null)),s["ɵdid"](9,16384,null,0,$.G,[],null,null),s["ɵdid"](10,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](12,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](13,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](14,0,null,null,7,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,xy)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](17,0,null,null,2,"cd-inventory-devices",[],null,[[null,"filterChange"]],(function(t,e,n){var a=!0;return"filterChange"===e&&(a=!1!==t.component.onFilterChange(n)&&a),a}),$r,Kr)),s["ɵdid"](18,245760,[[1,4],["inventoryDevices",4]],0,Wr,[Q.a,ma.a,he.a,Rt.b,mt.a,Br],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],filterColumns:[2,"filterColumns"]},{filterChange:"filterChange"}),s["ɵpad"](19,2),(t()(),s["ɵand"](16777216,null,null,1,null,_y)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](22,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](24,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](25,0,["",""])),s["ɵppd"](26,1),(t()(),s["ɵeld"](27,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](28,49152,null,0,Ps.a,[i.Location,It.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.bsModalRef),t(e,10,0,n.formGroup),t(e,13,0,n.formGroup),t(e,16,0,!n.canSubmit);var a=n.devices,r=t(e,19,0,"available","osd_ids");t(e,18,0,a,r,n.filterColumns),t(e,21,0,n.canSubmit),t(e,24,0,n.formGroup,!n.canSubmit||0===n.filteredDevices.length),t(e,28,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,6,0,n.deviceType),t(e,8,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending);var a=s["ɵunv"](e,25,0,t(e,26,0,s["ɵnov"](e,1),n.action));t(e,25,0,a)}))}function Oy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-devices-selection-modal",[],null,null,null,Ty,yy)),s["ɵdid"](1,4243456,null,0,lu,[Yo.a,Rt.a,It.b],null,null)],null,null)}var wy=s["ɵccf"]("cd-osd-devices-selection-modal",lu,Oy,{},{submitAction:"submitAction"},[]),Sy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Iy(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),(t()(),s["ɵeld"](1,0,null,null,23,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](2,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](3,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSD creation preview"])),(t()(),s["ɵeld"](5,0,null,1,19,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,18,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](7,16384,null,0,$.G,[],null,null),s["ɵdid"](8,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,X.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](12,0,null,null,5,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DriveGroups"])),(t()(),s["ɵeld"](15,0,null,null,2,"pre",[],null,null,null,null,null)),(t()(),s["ɵted"](16,null,["",""])),s["ɵpid"](0,i.JsonPipe,[]),(t()(),s["ɵeld"](18,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Es.b,Es.a)),s["ɵdid"](20,114688,null,0,Ls.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](21,0,["",""])),s["ɵppd"](22,1),(t()(),s["ɵeld"](23,0,null,null,1,"cd-back-button",[],null,null,null,Ds.b,Ds.a)),s["ɵdid"](24,49152,null,0,Ps.a,[i.Location,It.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.bsModalRef),t(e,8,0,n.formGroup),t(e,11,0,n.formGroup),t(e,20,0,n.formGroup),t(e,24,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,6,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending),t(e,16,0,s["ɵunv"](e,16,0,s["ɵnov"](e,17).transform(n.driveGroups)));var a=s["ɵunv"](e,21,0,t(e,22,0,s["ɵnov"](e,0),n.action));t(e,21,0,a)}))}function Ny(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-creation-preview-modal",[],null,null,null,Iy,Sy)),s["ɵdid"](1,114688,null,0,xu,[Rt.a,It.b,Yo.a,mi,ms.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Cy=s["ɵccf"]("cd-osd-creation-preview-modal",xu,Ny,{driveGroups:"driveGroups"},{submitAction:"submitAction"},[]),Ry=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ay(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"cd-modal",[],null,null,null,qb.c,qb.b)),s["ɵdid"](1,49152,null,0,um.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](3,null,[""," ",""])),(t()(),s["ɵeld"](4,0,null,1,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,zr,Vr)),s["ɵdid"](7,49152,null,0,Gr,[],null,null),(t()(),s["ɵeld"](8,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,Ds.b,Ds.a)),s["ɵdid"](10,49152,null,0,Ps.a,[i.Location,It.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,10,0,"Close",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,3,0,n.actionDescription,n.itemDescription)}))}function ky(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-modal",[],null,null,null,Ay,Ry)),s["ɵdid"](1,114688,null,0,ps,[Rt.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ey=s["ɵccf"]("cd-orchestrator-doc-modal",ps,ky,{},{},[]),Ly=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Dy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](1,212992,null,0,Lt.r,[Lt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function Py(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-root",[],null,null,null,Dy,Ly)),s["ɵdid"](1,49152,null,0,d,[],null,null)],null,null)}var My=s["ɵccf"]("cd-root",d,Py,{},{},[]),qy=new s.InjectionToken("JWT_OPTIONS"),jy=function(){function t(t){void 0===t&&(t=null),this.tokenGetter=t&&t.tokenGetter||function(){}}return t.prototype.urlBase64Decode=function(t){var e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw"Illegal base64url string!"}return this.b64DecodeUnicode(e)},t.prototype.b64decode=function(t){var e="";if((t=String(t).replace(/=+$/,"")).length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var n=0,a=void 0,r=void 0,i=0;r=t.charAt(i++);~r&&(a=n%4?64*a+r:r,n++%4)?e+=String.fromCharCode(255&a>>(-2*n&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return e},t.prototype.b64DecodeUnicode=function(t){return decodeURIComponent(Array.prototype.map.call(this.b64decode(t),(function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)})).join(""))},t.prototype.decodeToken=function(t){if(void 0===t&&(t=this.tokenGetter()),null===t)return null;var e=t.split(".");if(3!==e.length)throw new Error("The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.");var n=this.urlBase64Decode(e[1]);if(!n)throw new Error("Cannot decode the token.");return JSON.parse(n)},t.prototype.getTokenExpirationDate=function(t){var e;if(void 0===t&&(t=this.tokenGetter()),!(e=this.decodeToken(t)).hasOwnProperty("exp"))return null;var n=new Date(0);return n.setUTCSeconds(e.exp),n},t.prototype.isTokenExpired=function(t,e){if(void 0===t&&(t=this.tokenGetter()),null===t||""===t)return!0;var n=this.getTokenExpirationDate(t);return e=e||0,null===n||!(n.valueOf()>(new Date).valueOf()+1e3*e)},t}(),Fy=n("CxY0"),Gy=function(){function t(t,e){this.jwtHelper=e,this.tokenGetter=t.tokenGetter,this.headerName=t.headerName||"Authorization",this.authScheme=t.authScheme||""===t.authScheme?t.authScheme:"Bearer ",this.whitelistedDomains=t.whitelistedDomains||[],this.blacklistedRoutes=t.blacklistedRoutes||[],this.throwNoTokenError=t.throwNoTokenError||!1,this.skipWhenExpired=t.skipWhenExpired}return t.prototype.isWhitelistedDomain=function(t){var e=Object(Fy.parse)(t.url,!1,!0);return null===e.host||this.whitelistedDomains.findIndex((function(t){return"string"==typeof t?t===e.host:t instanceof RegExp&&t.test(e.host)}))>-1},t.prototype.isBlacklistedRoute=function(t){var e=t.url;return this.blacklistedRoutes.findIndex((function(t){return"string"==typeof t?t===e:t instanceof RegExp&&t.test(e)}))>-1},t.prototype.handleInterception=function(t,e,n){var a,r=!1;if(!t&&this.throwNoTokenError)throw new Error("Could not get token from tokenGetter function.");return this.skipWhenExpired&&(r=!t||this.jwtHelper.isTokenExpired(t)),t&&r&&this.skipWhenExpired?e=e.clone():t&&(e=e.clone({setHeaders:(a={},a[this.headerName]=""+this.authScheme+t,a)})),n.handle(e)},t.prototype.intercept=function(t,e){var n=this;if(!this.isWhitelistedDomain(t)||this.isBlacklistedRoute(t))return e.handle(t);var a=this.tokenGetter();return a instanceof Promise?Object(Cn.a)(a).pipe(Object(An.a)((function(a){return n.handleInterception(a,t,e)}))):this.handleInterception(a,t,e)},t}(),Vy=n("z6cu"),zy=n("JIr8");let By=(()=>{class t{constructor(t,e,n){this.router=t,this.authStorageService=e,this.notificationService=n}intercept(t,e){return e.handle(t).pipe(Object(zy.a)(t=>{if(t instanceof nt.f){let e;switch(t.status){case 400:const n=new fs.a,a=t.error.task;tt.isPlainObject(a)?(a.metadata.component=a.metadata.component||t.error.component,n.name=a.name,n.metadata=a.metadata):n.metadata=t.error,n.success=!1,n.exception=t.error,e=this.notificationService.notifyTask(n);break;case 401:this.authStorageService.remove(),this.router.navigate(["/login"]);break;case 403:this.router.navigate(["/403"]);break;default:e=this.prepareNotification(t)}t.preventDefault=()=>{this.notificationService.cancel(e)},t.ignoreStatusCode=function(t){this.status===t&&this.preventDefault()}}return Object(Vy.a)(t)}))}prepareNotification(t){return this.notificationService.show(()=>{let e="";return tt.isPlainObject(t.error)&&tt.isString(t.error.detail)?e=t.error.detail:tt.isString(t.error)?e=t.error:tt.isString(t.message)&&(e=t.message),new Ne.b(de.a.error,`${t.status} - ${t.statusText}`,e,void 0,t.application)})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Lt.m),s["ɵɵinject"](Q.a),s["ɵɵinject"](mt.a))},token:t,providedIn:"root"}),t})();function Yy(){return"undefined"!=typeof process}function Hy(t){switch(t.length){case 0:return new K.d;case 1:return t[0];default:return new K.k(t)}}function Uy(t,e,n,a,r={},i={}){const s=[],o=[];let u=-1,l=null;if(a.forEach(t=>{const n=t.offset,a=n==u,d=a&&l||{};Object.keys(t).forEach(n=>{let a=n,o=t[n];if("offset"!==n)switch(a=e.normalizePropertyName(a,s),o){case K.l:o=r[n];break;case K.a:o=i[n];break;default:o=e.normalizeStyleValue(n,a,o,s)}d[a]=o}),a||o.push(d),l=d,u=n}),s.length){const t="\n - ";throw new Error(`Unable to animate due to the following errors:${t}${s.join(t)}`)}return o}function Wy(t,e,n,a){switch(e){case"start":t.onStart(()=>a(n&&Ky(n,"start",t)));break;case"done":t.onDone(()=>a(n&&Ky(n,"done",t)));break;case"destroy":t.onDestroy(()=>a(n&&Ky(n,"destroy",t)))}}function Ky(t,e,n){const a=n.totalTime,r=$y(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,null==a?t.totalTime:a,!!n.disabled),i=t._data;return null!=i&&(r._data=i),r}function $y(t,e,n,a,r="",i=0,s){return{element:t,triggerName:e,fromState:n,toState:a,phaseName:r,totalTime:i,disabled:!!s}}function Jy(t,e,n){let a;return t instanceof Map?(a=t.get(e),a||t.set(e,a=n)):(a=t[e],a||(a=t[e]=n)),a}function Zy(t){const e=t.indexOf(":");return[t.substring(1,e),t.substr(e+1)]}let Qy=(t,e)=>!1,Xy=(t,e)=>!1,tv=(t,e,n)=>[];const ev=Yy();(ev||"undefined"!=typeof Element)&&(Qy=(t,e)=>t.contains(e),Xy=(()=>{if(ev||Element.prototype.matches)return(t,e)=>t.matches(e);{const t=Element.prototype,e=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector;return e?(t,n)=>e.apply(t,[n]):Xy}})(),tv=(t,e,n)=>{let a=[];if(n)a.push(...t.querySelectorAll(e));else{const n=t.querySelector(e);n&&a.push(n)}return a});let nv=null,av=!1;function rv(t){nv||(nv=("undefined"!=typeof document?document.body:null)||{},av=!!nv.style&&"WebkitAppearance"in nv.style);let e=!0;return nv.style&&!function(t){return"ebkit"==t.substring(1,6)}(t)&&(e=t in nv.style,!e&&av)&&(e="Webkit"+t.charAt(0).toUpperCase()+t.substr(1)in nv.style),e}const iv=Xy,sv=Qy,ov=tv;function uv(t){const e={};return Object.keys(t).forEach(n=>{const a=n.replace(/([a-z])([A-Z])/g,"$1-$2");e[a]=t[n]}),e}class lv{validateStyleProperty(t){return rv(t)}matchesElement(t,e){return iv(t,e)}containsElement(t,e){return sv(t,e)}query(t,e,n){return ov(t,e,n)}computeStyle(t,e,n){return n||""}animate(t,e,n,a,r,i=[],s){return new K.d(n,a)}}let dv=(()=>{class t{}return t.NOOP=new lv,t})();function cv(t){if("number"==typeof t)return t;const e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:fv(parseFloat(e[1]),e[2])}function fv(t,e){switch(e){case"s":return 1e3*t;default:return t}}function hv(t,e,n){return t.hasOwnProperty("duration")?t:function(t,e,n){let a,r=0,i="";if("string"==typeof t){const n=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===n)return e.push(`The provided timing value "${t}" is invalid.`),{duration:0,delay:0,easing:""};a=fv(parseFloat(n[1]),n[2]);const s=n[3];null!=s&&(r=fv(parseFloat(s),n[4]));const o=n[5];o&&(i=o)}else a=t;if(!n){let n=!1,i=e.length;a<0&&(e.push("Duration values below 0 are not allowed for this animation step."),n=!0),r<0&&(e.push("Delay values below 0 are not allowed for this animation step."),n=!0),n&&e.splice(i,0,`The provided timing value "${t}" is invalid.`)}return{duration:a,delay:r,easing:i}}(t,e,n)}function gv(t,e={}){return Object.keys(t).forEach(n=>{e[n]=t[n]}),e}function pv(t,e,n={}){if(e)for(let a in t)n[a]=t[a];else gv(t,n);return n}function bv(t,e,n){return n?e+":"+n+";":""}function mv(t){let e="";for(let n=0;n<t.style.length;n++){const a=t.style.item(n);e+=bv(0,a,t.style.getPropertyValue(a))}for(const n in t.style)t.style.hasOwnProperty(n)&&!n.startsWith("_")&&(e+=bv(0,n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),t.style[n]));t.setAttribute("style",e)}function yv(t,e,n){t.style&&(Object.keys(e).forEach(a=>{const r=Iv(a);n&&!n.hasOwnProperty(a)&&(n[a]=t.style[r]),t.style[r]=e[a]}),Yy()&&mv(t))}function vv(t,e){t.style&&(Object.keys(e).forEach(e=>{const n=Iv(e);t.style[n]=""}),Yy()&&mv(t))}function xv(t){return Array.isArray(t)?1==t.length?t[0]:Object(K.f)(t):t}const _v=new RegExp("{{\\s*(.+?)\\s*}}","g");function Tv(t){let e=[];if("string"==typeof t){const n=t.toString();let a;for(;a=_v.exec(n);)e.push(a[1]);_v.lastIndex=0}return e}function Ov(t,e,n){const a=t.toString(),r=a.replace(_v,(t,a)=>{let r=e[a];return e.hasOwnProperty(a)||(n.push("Please provide a value for the animation param "+a),r=""),r.toString()});return r==a?t:r}function wv(t){const e=[];let n=t.next();for(;!n.done;)e.push(n.value),n=t.next();return e}const Sv=/-+([a-z0-9])/g;function Iv(t){return t.replace(Sv,(...t)=>t[1].toUpperCase())}function Nv(t,e){return 0===t||0===e}function Cv(t,e,n){const a=Object.keys(n);if(a.length&&e.length){let i=e[0],s=[];if(a.forEach(t=>{i.hasOwnProperty(t)||s.push(t),i[t]=n[t]}),s.length)for(var r=1;r<e.length;r++){let n=e[r];s.forEach((function(e){n[e]=Av(t,e)}))}}return e}function Rv(t,e,n){switch(e.type){case 7:return t.visitTrigger(e,n);case 0:return t.visitState(e,n);case 1:return t.visitTransition(e,n);case 2:return t.visitSequence(e,n);case 3:return t.visitGroup(e,n);case 4:return t.visitAnimate(e,n);case 5:return t.visitKeyframes(e,n);case 6:return t.visitStyle(e,n);case 8:return t.visitReference(e,n);case 9:return t.visitAnimateChild(e,n);case 10:return t.visitAnimateRef(e,n);case 11:return t.visitQuery(e,n);case 12:return t.visitStagger(e,n);default:throw new Error("Unable to resolve animation metadata node #"+e.type)}}function Av(t,e){return window.getComputedStyle(t)[e]}function kv(t,e){const n=[];return"string"==typeof t?t.split(/\s*,\s*/).forEach(t=>function(t,e,n){if(":"==t[0]){const a=function(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,e)=>parseFloat(e)>parseFloat(t);case":decrement":return(t,e)=>parseFloat(e)<parseFloat(t);default:return e.push(`The transition alias value "${t}" is not supported`),"* => *"}}(t,n);if("function"==typeof a)return void e.push(a);t=a}const a=t.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==a||a.length<4)return n.push(`The provided transition expression "${t}" is not supported`),e;const r=a[1],i=a[2],s=a[3];e.push(Dv(r,s)),"<"!=i[0]||"*"==r&&"*"==s||e.push(Dv(s,r))}(t,n,e)):n.push(t),n}const Ev=new Set(["true","1"]),Lv=new Set(["false","0"]);function Dv(t,e){const n=Ev.has(t)||Lv.has(t),a=Ev.has(e)||Lv.has(e);return(r,i)=>{let s="*"==t||t==r,o="*"==e||e==i;return!s&&n&&"boolean"==typeof r&&(s=r?Ev.has(t):Lv.has(t)),!o&&a&&"boolean"==typeof i&&(o=i?Ev.has(e):Lv.has(e)),s&&o}}const Pv=new RegExp("s*:selfs*,?","g");function Mv(t,e,n){return new qv(t).build(e,n)}class qv{constructor(t){this._driver=t}build(t,e){const n=new jv(e);return this._resetContextStyleTimingState(n),Rv(this,xv(t),n)}_resetContextStyleTimingState(t){t.currentQuerySelector="",t.collectedStyles={},t.collectedStyles[""]={},t.currentTime=0}visitTrigger(t,e){let n=e.queryCount=0,a=e.depCount=0;const r=[],i=[];return"@"==t.name.charAt(0)&&e.errors.push("animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))"),t.definitions.forEach(t=>{if(this._resetContextStyleTimingState(e),0==t.type){const n=t,a=n.name;a.toString().split(/\s*,\s*/).forEach(t=>{n.name=t,r.push(this.visitState(n,e))}),n.name=a}else if(1==t.type){const r=this.visitTransition(t,e);n+=r.queryCount,a+=r.depCount,i.push(r)}else e.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:t.name,states:r,transitions:i,queryCount:n,depCount:a,options:null}}visitState(t,e){const n=this.visitStyle(t.styles,e),a=t.options&&t.options.params||null;if(n.containsDynamicStyles){const r=new Set,i=a||{};if(n.styles.forEach(t=>{if(Fv(t)){const e=t;Object.keys(e).forEach(t=>{Tv(e[t]).forEach(t=>{i.hasOwnProperty(t)||r.add(t)})})}}),r.size){const n=wv(r.values());e.errors.push(`state("${t.name}", ...) must define default values for all the following style substitutions: ${n.join(", ")}`)}}return{type:0,name:t.name,style:n,options:a?{params:a}:null}}visitTransition(t,e){e.queryCount=0,e.depCount=0;const n=Rv(this,xv(t.animation),e);return{type:1,matchers:kv(t.expr,e.errors),animation:n,queryCount:e.queryCount,depCount:e.depCount,options:Gv(t.options)}}visitSequence(t,e){return{type:2,steps:t.steps.map(t=>Rv(this,t,e)),options:Gv(t.options)}}visitGroup(t,e){const n=e.currentTime;let a=0;const r=t.steps.map(t=>{e.currentTime=n;const r=Rv(this,t,e);return a=Math.max(a,e.currentTime),r});return e.currentTime=a,{type:3,steps:r,options:Gv(t.options)}}visitAnimate(t,e){const n=function(t,e){let n=null;if(t.hasOwnProperty("duration"))n=t;else if("number"==typeof t)return Vv(hv(t,e).duration,0,"");const a=t;if(a.split(/\s+/).some(t=>"{"==t.charAt(0)&&"{"==t.charAt(1))){const t=Vv(0,0,"");return t.dynamic=!0,t.strValue=a,t}return n=n||hv(a,e),Vv(n.duration,n.delay,n.easing)}(t.timings,e.errors);let a;e.currentAnimateTimings=n;let r=t.styles?t.styles:Object(K.h)({});if(5==r.type)a=this.visitKeyframes(r,e);else{let r=t.styles,i=!1;if(!r){i=!0;const t={};n.easing&&(t.easing=n.easing),r=Object(K.h)(t)}e.currentTime+=n.duration+n.delay;const s=this.visitStyle(r,e);s.isEmptyStep=i,a=s}return e.currentAnimateTimings=null,{type:4,timings:n,style:a,options:null}}visitStyle(t,e){const n=this._makeStyleAst(t,e);return this._validateStyleAst(n,e),n}_makeStyleAst(t,e){const n=[];Array.isArray(t.styles)?t.styles.forEach(t=>{"string"==typeof t?t==K.a?n.push(t):e.errors.push(`The provided style string value ${t} is not allowed.`):n.push(t)}):n.push(t.styles);let a=!1,r=null;return n.forEach(t=>{if(Fv(t)){const e=t,n=e.easing;if(n&&(r=n,delete e.easing),!a)for(let t in e)if(e[t].toString().indexOf("{{")>=0){a=!0;break}}}),{type:6,styles:n,easing:r,offset:t.offset,containsDynamicStyles:a,options:null}}_validateStyleAst(t,e){const n=e.currentAnimateTimings;let a=e.currentTime,r=e.currentTime;n&&r>0&&(r-=n.duration+n.delay),t.styles.forEach(t=>{"string"!=typeof t&&Object.keys(t).forEach(n=>{if(!this._driver.validateStyleProperty(n))return void e.errors.push(`The provided animation property "${n}" is not a supported CSS property for animations`);const i=e.collectedStyles[e.currentQuerySelector],s=i[n];let o=!0;s&&(r!=a&&r>=s.startTime&&a<=s.endTime&&(e.errors.push(`The CSS property "${n}" that exists between the times of "${s.startTime}ms" and "${s.endTime}ms" is also being animated in a parallel animation between the times of "${r}ms" and "${a}ms"`),o=!1),r=s.startTime),o&&(i[n]={startTime:r,endTime:a}),e.options&&function(t,e,n){const a=e.params||{},r=Tv(t);r.length&&r.forEach(t=>{a.hasOwnProperty(t)||n.push(`Unable to resolve the local animation param ${t} in the given list of values`)})}(t[n],e.options,e.errors)})})}visitKeyframes(t,e){const n={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push("keyframes() must be placed inside of a call to animate()"),n;let a=0;const r=[];let i=!1,s=!1,o=0;const u=t.steps.map(t=>{const n=this._makeStyleAst(t,e);let u=null!=n.offset?n.offset:function(t){if("string"==typeof t)return null;let e=null;if(Array.isArray(t))t.forEach(t=>{if(Fv(t)&&t.hasOwnProperty("offset")){const n=t;e=parseFloat(n.offset),delete n.offset}});else if(Fv(t)&&t.hasOwnProperty("offset")){const n=t;e=parseFloat(n.offset),delete n.offset}return e}(n.styles),l=0;return null!=u&&(a++,l=n.offset=u),s=s||l<0||l>1,i=i||l<o,o=l,r.push(l),n});s&&e.errors.push("Please ensure that all keyframe offsets are between 0 and 1"),i&&e.errors.push("Please ensure that all keyframe offsets are in order");const l=t.steps.length;let d=0;a>0&&a<l?e.errors.push("Not all style() steps within the declared keyframes() contain offsets"):0==a&&(d=1/(l-1));const c=l-1,f=e.currentTime,h=e.currentAnimateTimings,g=h.duration;return u.forEach((t,a)=>{const i=d>0?a==c?1:d*a:r[a],s=i*g;e.currentTime=f+h.delay+s,h.duration=s,this._validateStyleAst(t,e),t.offset=i,n.styles.push(t)}),n}visitReference(t,e){return{type:8,animation:Rv(this,xv(t.animation),e),options:Gv(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:Gv(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:Gv(t.options)}}visitQuery(t,e){const n=e.currentQuerySelector,a=t.options||{};e.queryCount++,e.currentQuery=t;const[r,i]=function(t){const e=!!t.split(/\s*,\s*/).find(t=>":self"==t);return e&&(t=t.replace(Pv,"")),[t=t.replace(/@\*/g,".ng-trigger").replace(/@\w+/g,t=>".ng-trigger-"+t.substr(1)).replace(/:animating/g,".ng-animating"),e]}(t.selector);e.currentQuerySelector=n.length?n+" "+r:r,Jy(e.collectedStyles,e.currentQuerySelector,{});const s=Rv(this,xv(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=n,{type:11,selector:r,limit:a.limit||0,optional:!!a.optional,includeSelf:i,animation:s,originalSelector:t.selector,options:Gv(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push("stagger() can only be used inside of query()");const n="full"===t.timings?{duration:0,delay:0,easing:"full"}:hv(t.timings,e.errors,!0);return{type:12,animation:Rv(this,xv(t.animation),e),timings:n,options:null}}}class jv{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}}function Fv(t){return!Array.isArray(t)&&"object"==typeof t}function Gv(t){var e;return t?(t=gv(t)).params&&(t.params=(e=t.params)?gv(e):null):t={},t}function Vv(t,e,n){return{duration:t,delay:e,easing:n}}function zv(t,e,n,a,r,i,s=null,o=!1){return{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:a,duration:r,delay:i,totalTime:r+i,easing:s,subTimeline:o}}class Bv{constructor(){this._map=new Map}consume(t){let e=this._map.get(t);return e?this._map.delete(t):e=[],e}append(t,e){let n=this._map.get(t);n||this._map.set(t,n=[]),n.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}const Yv=new RegExp(":enter","g"),Hv=new RegExp(":leave","g");function Uv(t,e,n,a,r,i={},s={},o,u,l=[]){return(new Wv).buildKeyframes(t,e,n,a,r,i,s,o,u,l)}class Wv{buildKeyframes(t,e,n,a,r,i,s,o,u,l=[]){u=u||new Bv;const d=new $v(t,e,u,a,r,l,[]);d.options=o,d.currentTimeline.setStyles([i],null,d.errors,o),Rv(this,n,d);const c=d.timelines.filter(t=>t.containsAnimation());if(c.length&&Object.keys(s).length){const t=c[c.length-1];t.allowOnlyTimelineStyles()||t.setStyles([s],null,d.errors,o)}return c.length?c.map(t=>t.buildKeyframes()):[zv(e,[],[],[],0,0,"",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const n=e.subInstructions.consume(e.element);if(n){const a=e.createSubContext(t.options),r=e.currentTimeline.currentTime,i=this._visitSubInstructions(n,a,a.options);r!=i&&e.transformIntoNewTimeline(i)}e.previousNode=t}visitAnimateRef(t,e){const n=e.createSubContext(t.options);n.transformIntoNewTimeline(),this.visitReference(t.animation,n),e.transformIntoNewTimeline(n.currentTimeline.currentTime),e.previousNode=t}_visitSubInstructions(t,e,n){let a=e.currentTimeline.currentTime;const r=null!=n.duration?cv(n.duration):null,i=null!=n.delay?cv(n.delay):null;return 0!==r&&t.forEach(t=>{const n=e.appendInstructionToTimeline(t,r,i);a=Math.max(a,n.duration+n.delay)}),a}visitReference(t,e){e.updateOptions(t.options,!0),Rv(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const n=e.subContextCount;let a=e;const r=t.options;if(r&&(r.params||r.delay)&&(a=e.createSubContext(r),a.transformIntoNewTimeline(),null!=r.delay)){6==a.previousNode.type&&(a.currentTimeline.snapshotCurrentStyles(),a.previousNode=Kv);const t=cv(r.delay);a.delayNextStep(t)}t.steps.length&&(t.steps.forEach(t=>Rv(this,t,a)),a.currentTimeline.applyStylesToKeyframe(),a.subContextCount>n&&a.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const n=[];let a=e.currentTimeline.currentTime;const r=t.options&&t.options.delay?cv(t.options.delay):0;t.steps.forEach(i=>{const s=e.createSubContext(t.options);r&&s.delayNextStep(r),Rv(this,i,s),a=Math.max(a,s.currentTimeline.currentTime),n.push(s.currentTimeline)}),n.forEach(t=>e.currentTimeline.mergeTimelineCollectedStyles(t)),e.transformIntoNewTimeline(a),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const n=t.strValue;return hv(e.params?Ov(n,e.params,e.errors):n,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const n=e.currentAnimateTimings=this._visitTiming(t.timings,e),a=e.currentTimeline;n.delay&&(e.incrementTime(n.delay),a.snapshotCurrentStyles());const r=t.style;5==r.type?this.visitKeyframes(r,e):(e.incrementTime(n.duration),this.visitStyle(r,e),a.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const n=e.currentTimeline,a=e.currentAnimateTimings;!a&&n.getCurrentStyleProperties().length&&n.forwardFrame();const r=a&&a.easing||t.easing;t.isEmptyStep?n.applyEmptyStep(r):n.setStyles(t.styles,r,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const n=e.currentAnimateTimings,a=e.currentTimeline.duration,r=n.duration,i=e.createSubContext().currentTimeline;i.easing=n.easing,t.styles.forEach(t=>{i.forwardTime((t.offset||0)*r),i.setStyles(t.styles,t.easing,e.errors,e.options),i.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(i),e.transformIntoNewTimeline(a+r),e.previousNode=t}visitQuery(t,e){const n=e.currentTimeline.currentTime,a=t.options||{},r=a.delay?cv(a.delay):0;r&&(6===e.previousNode.type||0==n&&e.currentTimeline.getCurrentStyleProperties().length)&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=Kv);let i=n;const s=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!a.optional,e.errors);e.currentQueryTotal=s.length;let o=null;s.forEach((n,a)=>{e.currentQueryIndex=a;const s=e.createSubContext(t.options,n);r&&s.delayNextStep(r),n===e.element&&(o=s.currentTimeline),Rv(this,t.animation,s),s.currentTimeline.applyStylesToKeyframe(),i=Math.max(i,s.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(i),o&&(e.currentTimeline.mergeTimelineCollectedStyles(o),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const n=e.parentContext,a=e.currentTimeline,r=t.timings,i=Math.abs(r.duration),s=i*(e.currentQueryTotal-1);let o=i*e.currentQueryIndex;switch(r.duration<0?"reverse":r.easing){case"reverse":o=s-o;break;case"full":o=n.currentStaggerTime}const u=e.currentTimeline;o&&u.delayNextStep(o);const l=u.currentTime;Rv(this,t.animation,e),e.previousNode=t,n.currentStaggerTime=a.currentTime-l+(a.startTime-n.currentTimeline.startTime)}}const Kv={};class $v{constructor(t,e,n,a,r,i,s,o){this._driver=t,this.element=e,this.subInstructions=n,this._enterClassName=a,this._leaveClassName=r,this.errors=i,this.timelines=s,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=Kv,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=o||new Jv(this._driver,e,0),s.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const n=t;let a=this.options;null!=n.duration&&(a.duration=cv(n.duration)),null!=n.delay&&(a.delay=cv(n.delay));const r=n.params;if(r){let t=a.params;t||(t=this.options.params={}),Object.keys(r).forEach(n=>{e&&t.hasOwnProperty(n)||(t[n]=Ov(r[n],t,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const n=t.params={};Object.keys(e).forEach(t=>{n[t]=e[t]})}}return t}createSubContext(t=null,e,n){const a=e||this.element,r=new $v(this._driver,a,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(a,n||0));return r.previousNode=this.previousNode,r.currentAnimateTimings=this.currentAnimateTimings,r.options=this._copyOptions(),r.updateOptions(t),r.currentQueryIndex=this.currentQueryIndex,r.currentQueryTotal=this.currentQueryTotal,r.parentContext=this,this.subContextCount++,r}transformIntoNewTimeline(t){return this.previousNode=Kv,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,n){const a={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+t.delay,easing:""},r=new Zv(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,a,t.stretchStartingKeyframe);return this.timelines.push(r),a}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,n,a,r,i){let s=[];if(a&&s.push(this.element),t.length>0){t=(t=t.replace(Yv,"."+this._enterClassName)).replace(Hv,"."+this._leaveClassName);let e=this._driver.query(this.element,t,1!=n);0!==n&&(e=n<0?e.slice(e.length+n,e.length):e.slice(0,n)),s.push(...e)}return r||0!=s.length||i.push(`\`query("${e}")\` returned zero elements. (Use \`query("${e}", { optional: true })\` if you wish to allow this.)`),s}}class Jv{constructor(t,e,n,a){this._driver=t,this.element=e,this.startTime=n,this._elementTimelineStylesLookup=a,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}}getCurrentStyleProperties(){return Object.keys(this._currentKeyframe)}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new Jv(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles[t]=e,this._globalTimelineStyles[t]=e,this._styleSummary[t]={time:this.currentTime,value:e}}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&(this._previousKeyframe.easing=t),Object.keys(this._globalTimelineStyles).forEach(t=>{this._backFill[t]=this._globalTimelineStyles[t]||K.a,this._currentKeyframe[t]=K.a}),this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,n,a){e&&(this._previousKeyframe.easing=e);const r=a&&a.params||{},i=function(t,e){const n={};let a;return t.forEach(t=>{"*"===t?(a=a||Object.keys(e),a.forEach(t=>{n[t]=K.a})):pv(t,!1,n)}),n}(t,this._globalTimelineStyles);Object.keys(i).forEach(t=>{const e=Ov(i[t],r,n);this._pendingStyles[t]=e,this._localTimelineStyles.hasOwnProperty(t)||(this._backFill[t]=this._globalTimelineStyles.hasOwnProperty(t)?this._globalTimelineStyles[t]:K.a),this._updateStyle(t,e)})}applyStylesToKeyframe(){const t=this._pendingStyles,e=Object.keys(t);0!=e.length&&(this._pendingStyles={},e.forEach(e=>{this._currentKeyframe[e]=t[e]}),Object.keys(this._localTimelineStyles).forEach(t=>{this._currentKeyframe.hasOwnProperty(t)||(this._currentKeyframe[t]=this._localTimelineStyles[t])}))}snapshotCurrentStyles(){Object.keys(this._localTimelineStyles).forEach(t=>{const e=this._localTimelineStyles[t];this._pendingStyles[t]=e,this._updateStyle(t,e)})}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){Object.keys(t._styleSummary).forEach(e=>{const n=this._styleSummary[e],a=t._styleSummary[e];(!n||a.time>n.time)&&this._updateStyle(e,a.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,n=1===this._keyframes.size&&0===this.duration;let a=[];this._keyframes.forEach((r,i)=>{const s=pv(r,!0);Object.keys(s).forEach(n=>{const a=s[n];a==K.l?t.add(n):a==K.a&&e.add(n)}),n||(s.offset=i/this.duration),a.push(s)});const r=t.size?wv(t.values()):[],i=e.size?wv(e.values()):[];if(n){const t=a[0],e=gv(t);t.offset=0,e.offset=1,a=[t,e]}return zv(this.element,a,r,i,this.duration,this.startTime,this.easing,!1)}}class Zv extends Jv{constructor(t,e,n,a,r,i,s=!1){super(t,e,i.delay),this.element=e,this.keyframes=n,this.preStyleProps=a,this.postStyleProps=r,this._stretchStartingKeyframe=s,this.timings={duration:i.duration,delay:i.delay,easing:i.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:n,easing:a}=this.timings;if(this._stretchStartingKeyframe&&e){const r=[],i=n+e,s=e/i,o=pv(t[0],!1);o.offset=0,r.push(o);const u=pv(t[0],!1);u.offset=Qv(s),r.push(u);const l=t.length-1;for(let a=1;a<=l;a++){let s=pv(t[a],!1);s.offset=Qv((e+s.offset*n)/i),r.push(s)}n=i,e=0,a="",t=r}return zv(this.element,t,this.preStyleProps,this.postStyleProps,n,e,a,!0)}}function Qv(t,e=3){const n=Math.pow(10,e-1);return Math.round(t*n)/n}class Xv{}class tx extends Xv{normalizePropertyName(t,e){return Iv(t)}normalizeStyleValue(t,e,n,a){let r="";const i=n.toString().trim();if(ex[e]&&0!==n&&"0"!==n)if("number"==typeof n)r="px";else{const e=n.match(/^[+-]?[\d\.]+([a-z]*)$/);e&&0==e[1].length&&a.push(`Please provide a CSS unit value for ${t}:${n}`)}return i+r}}const ex=(()=>function(t){const e={};return t.forEach(t=>e[t]=!0),e}("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",")))();function nx(t,e,n,a,r,i,s,o,u,l,d,c,f){return{type:0,element:t,triggerName:e,isRemovalTransition:r,fromState:n,fromStyles:i,toState:a,toStyles:s,timelines:o,queriedElements:u,preStyleProps:l,postStyleProps:d,totalTime:c,errors:f}}const ax={};class rx{constructor(t,e,n){this._triggerName=t,this.ast=e,this._stateStyles=n}match(t,e,n,a){return function(t,e,n,a,r){return t.some(t=>t(e,n,a,r))}(this.ast.matchers,t,e,n,a)}buildStyles(t,e,n){const a=this._stateStyles["*"],r=this._stateStyles[t],i=a?a.buildStyles(e,n):{};return r?r.buildStyles(e,n):i}build(t,e,n,a,r,i,s,o,u,l){const d=[],c=this.ast.options&&this.ast.options.params||ax,f=this.buildStyles(n,s&&s.params||ax,d),h=o&&o.params||ax,g=this.buildStyles(a,h,d),p=new Set,b=new Map,m=new Map,y="void"===a,v={params:Object.assign({},c,h)},x=l?[]:Uv(t,e,this.ast.animation,r,i,f,g,v,u,d);let _=0;if(x.forEach(t=>{_=Math.max(t.duration+t.delay,_)}),d.length)return nx(e,this._triggerName,n,a,y,f,g,[],[],b,m,_,d);x.forEach(t=>{const n=t.element,a=Jy(b,n,{});t.preStyleProps.forEach(t=>a[t]=!0);const r=Jy(m,n,{});t.postStyleProps.forEach(t=>r[t]=!0),n!==e&&p.add(n)});const T=wv(p.values());return nx(e,this._triggerName,n,a,y,f,g,x,T,b,m,_)}}class ix{constructor(t,e){this.styles=t,this.defaultParams=e}buildStyles(t,e){const n={},a=gv(this.defaultParams);return Object.keys(t).forEach(e=>{const n=t[e];null!=n&&(a[e]=n)}),this.styles.styles.forEach(t=>{if("string"!=typeof t){const r=t;Object.keys(r).forEach(t=>{let i=r[t];i.length>1&&(i=Ov(i,a,e)),n[t]=i})}}),n}}class sx{constructor(t,e){this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(t=>{this.states[t.name]=new ix(t.style,t.options&&t.options.params||{})}),ox(this.states,"true","1"),ox(this.states,"false","0"),e.transitions.forEach(e=>{this.transitionFactories.push(new rx(t,e,this.states))}),this.fallbackTransition=new rx(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[(t,e)=>!0],options:null,queryCount:0,depCount:0},this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,n,a){return this.transitionFactories.find(r=>r.match(t,e,n,a))||null}matchStyles(t,e,n){return this.fallbackTransition.buildStyles(t,e,n)}}function ox(t,e,n){t.hasOwnProperty(e)?t.hasOwnProperty(n)||(t[n]=t[e]):t.hasOwnProperty(n)&&(t[e]=t[n])}const ux=new Bv;class lx{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._normalizer=n,this._animations={},this._playersById={},this.players=[]}register(t,e){const n=[],a=Mv(this._driver,e,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[t]=a}_buildPlayer(t,e,n){const a=t.element,r=Uy(0,this._normalizer,0,t.keyframes,e,n);return this._driver.animate(a,r,t.duration,t.delay,t.easing,[],!0)}create(t,e,n={}){const a=[],r=this._animations[t];let i;const s=new Map;if(r?(i=Uv(this._driver,e,r,"ng-enter","ng-leave",{},{},n,ux,a),i.forEach(t=>{const e=Jy(s,t.element,{});t.postStyleProps.forEach(t=>e[t]=null)})):(a.push("The requested animation doesn't exist or has already been destroyed"),i=[]),a.length)throw new Error("Unable to create the animation due to the following errors: "+a.join("\n"));s.forEach((t,e)=>{Object.keys(t).forEach(n=>{t[n]=this._driver.computeStyle(e,n,K.a)})});const o=Hy(i.map(t=>{const e=s.get(t.element);return this._buildPlayer(t,{},e)}));return this._playersById[t]=o,o.onDestroy(()=>this.destroy(t)),this.players.push(o),o}destroy(t){const e=this._getPlayer(t);e.destroy(),delete this._playersById[t];const n=this.players.indexOf(e);n>=0&&this.players.splice(n,1)}_getPlayer(t){const e=this._playersById[t];if(!e)throw new Error("Unable to find the timeline player referenced by "+t);return e}listen(t,e,n,a){const r=$y(e,"","","");return Wy(this._getPlayer(t),n,r,a),()=>{}}command(t,e,n,a){if("register"==n)return void this.register(t,a[0]);if("create"==n)return void this.create(t,e,a[0]||{});const r=this._getPlayer(t);switch(n){case"play":r.play();break;case"pause":r.pause();break;case"reset":r.reset();break;case"restart":r.restart();break;case"finish":r.finish();break;case"init":r.init();break;case"setPosition":r.setPosition(parseFloat(a[0]));break;case"destroy":this.destroy(t)}}}const dx=[],cx={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},fx={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0};class hx{constructor(t,e=""){this.namespaceId=e;const n=t&&t.hasOwnProperty("value");if(this.value=null!=(a=n?t.value:t)?a:null,n){const e=gv(t);delete e.value,this.options=e}else this.options={};var a;this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(t){const e=t.params;if(e){const t=this.options.params;Object.keys(e).forEach(n=>{null==t[n]&&(t[n]=e[n])})}}}const gx=new hx("void");class px{constructor(t,e,n){this.id=t,this.hostElement=e,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,Tx(e,this._hostClassName)}listen(t,e,n,a){if(!this._triggers.hasOwnProperty(e))throw new Error(`Unable to listen on the animation trigger event "${n}" because the animation trigger "${e}" doesn't exist!`);if(null==n||0==n.length)throw new Error(`Unable to listen on the animation trigger "${e}" because the provided event is undefined!`);if("start"!=(r=n)&&"done"!=r)throw new Error(`The provided animation trigger event "${n}" for the animation trigger "${e}" is not supported!`);var r;const i=Jy(this._elementListeners,t,[]),s={name:e,phase:n,callback:a};i.push(s);const o=Jy(this._engine.statesByElement,t,{});return o.hasOwnProperty(e)||(Tx(t,"ng-trigger"),Tx(t,"ng-trigger-"+e),o[e]=gx),()=>{this._engine.afterFlush(()=>{const t=i.indexOf(s);t>=0&&i.splice(t,1),this._triggers[e]||delete o[e]})}}register(t,e){return!this._triggers[t]&&(this._triggers[t]=e,!0)}_getTrigger(t){const e=this._triggers[t];if(!e)throw new Error(`The provided animation trigger "${t}" has not been registered!`);return e}trigger(t,e,n,a=!0){const r=this._getTrigger(e),i=new mx(this.id,e,t);let s=this._engine.statesByElement.get(t);s||(Tx(t,"ng-trigger"),Tx(t,"ng-trigger-"+e),this._engine.statesByElement.set(t,s={}));let o=s[e];const u=new hx(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&o&&u.absorbOptions(o.options),s[e]=u,o||(o=gx),"void"!==u.value&&o.value===u.value){if(!function(t,e){const n=Object.keys(t),a=Object.keys(e);if(n.length!=a.length)return!1;for(let r=0;r<n.length;r++){const a=n[r];if(!e.hasOwnProperty(a)||t[a]!==e[a])return!1}return!0}(o.params,u.params)){const e=[],n=r.matchStyles(o.value,o.params,e),a=r.matchStyles(u.value,u.params,e);e.length?this._engine.reportError(e):this._engine.afterFlush(()=>{vv(t,n),yv(t,a)})}return}const l=Jy(this._engine.playersByElement,t,[]);l.forEach(t=>{t.namespaceId==this.id&&t.triggerName==e&&t.queued&&t.destroy()});let d=r.matchTransition(o.value,u.value,t,u.params),c=!1;if(!d){if(!a)return;d=r.fallbackTransition,c=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:d,fromState:o,toState:u,player:i,isFallbackTransition:c}),c||(Tx(t,"ng-animate-queued"),i.onStart(()=>{Ox(t,"ng-animate-queued")})),i.onDone(()=>{let e=this.players.indexOf(i);e>=0&&this.players.splice(e,1);const n=this._engine.playersByElement.get(t);if(n){let t=n.indexOf(i);t>=0&&n.splice(t,1)}}),this.players.push(i),l.push(i),i}deregister(t){delete this._triggers[t],this._engine.statesByElement.forEach((e,n)=>{delete e[t]}),this._elementListeners.forEach((e,n)=>{this._elementListeners.set(n,e.filter(e=>e.name!=t))})}clearElementCache(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);const e=this._engine.playersByElement.get(t);e&&(e.forEach(t=>t.destroy()),this._engine.playersByElement.delete(t))}_signalRemovalForInnerTriggers(t,e,n=!1){this._engine.driver.query(t,".ng-trigger",!0).forEach(t=>{if(t.__ng_removed)return;const n=this._engine.fetchNamespacesByElement(t);n.size?n.forEach(n=>n.triggerLeaveAnimation(t,e,!1,!0)):this.clearElementCache(t)})}triggerLeaveAnimation(t,e,n,a){const r=this._engine.statesByElement.get(t);if(r){const i=[];if(Object.keys(r).forEach(e=>{if(this._triggers[e]){const n=this.trigger(t,e,"void",a);n&&i.push(n)}}),i.length)return this._engine.markElementAsRemoved(this.id,t,!0,e),n&&Hy(i).onDone(()=>this._engine.processLeaveNode(t)),!0}return!1}prepareLeaveAnimationListeners(t){const e=this._elementListeners.get(t);if(e){const n=new Set;e.forEach(e=>{const a=e.name;if(n.has(a))return;n.add(a);const r=this._triggers[a].fallbackTransition,i=this._engine.statesByElement.get(t)[a]||gx,s=new hx("void"),o=new mx(this.id,a,t);this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:a,transition:r,fromState:i,toState:s,player:o,isFallbackTransition:!0})})}}removeNode(t,e){const n=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e,!0),this.triggerLeaveAnimation(t,e,!0))return;let a=!1;if(n.totalAnimations){const e=n.players.length?n.playersByQueriedElement.get(t):[];if(e&&e.length)a=!0;else{let e=t;for(;e=e.parentNode;)if(n.statesByElement.get(e)){a=!0;break}}}this.prepareLeaveAnimationListeners(t),a?n.markElementAsRemoved(this.id,t,!1,e):(n.afterFlush(()=>this.clearElementCache(t)),n.destroyInnerAnimations(t),n._onRemovalComplete(t,e))}insertNode(t,e){Tx(t,this._hostClassName)}drainQueuedTransitions(t){const e=[];return this._queue.forEach(n=>{const a=n.player;if(a.destroyed)return;const r=n.element,i=this._elementListeners.get(r);i&&i.forEach(e=>{if(e.name==n.triggerName){const a=$y(r,n.triggerName,n.fromState.value,n.toState.value);a._data=t,Wy(n.player,e.phase,a,e.callback)}}),a.markedForDestroy?this._engine.afterFlush(()=>{a.destroy()}):e.push(n)}),this._queue=[],e.sort((t,e)=>{const n=t.transition.ast.depCount,a=e.transition.ast.depCount;return 0==n||0==a?n-a:this._engine.driver.containsElement(t.element,e.element)?1:-1})}destroy(t){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,t)}elementContainsData(t){let e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(e=>e.element===t)||e,e}}class bx{constructor(t,e,n){this.bodyNode=t,this.driver=e,this._normalizer=n,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(t,e)=>{}}_onRemovalComplete(t,e){this.onRemovalComplete(t,e)}get queuedPlayers(){const t=[];return this._namespaceList.forEach(e=>{e.players.forEach(e=>{e.queued&&t.push(e)})}),t}createNamespace(t,e){const n=new px(t,e,this);return e.parentNode?this._balanceNamespaceList(n,e):(this.newHostElements.set(e,n),this.collectEnterElement(e)),this._namespaceLookup[t]=n}_balanceNamespaceList(t,e){const n=this._namespaceList.length-1;if(n>=0){let a=!1;for(let r=n;r>=0;r--)if(this.driver.containsElement(this._namespaceList[r].hostElement,e)){this._namespaceList.splice(r+1,0,t),a=!0;break}a||this._namespaceList.splice(0,0,t)}else this._namespaceList.push(t);return this.namespacesByHostElement.set(e,t),t}register(t,e){let n=this._namespaceLookup[t];return n||(n=this.createNamespace(t,e)),n}registerTrigger(t,e,n){let a=this._namespaceLookup[t];a&&a.register(e,n)&&this.totalAnimations++}destroy(t,e){if(!t)return;const n=this._fetchNamespace(t);this.afterFlush(()=>{this.namespacesByHostElement.delete(n.hostElement),delete this._namespaceLookup[t];const e=this._namespaceList.indexOf(n);e>=0&&this._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(()=>n.destroy(e))}_fetchNamespace(t){return this._namespaceLookup[t]}fetchNamespacesByElement(t){const e=new Set,n=this.statesByElement.get(t);if(n){const t=Object.keys(n);for(let a=0;a<t.length;a++){const r=n[t[a]].namespaceId;if(r){const t=this._fetchNamespace(r);t&&e.add(t)}}}return e}trigger(t,e,n,a){if(yx(e)){const r=this._fetchNamespace(t);if(r)return r.trigger(e,n,a),!0}return!1}insertNode(t,e,n,a){if(!yx(e))return;const r=e.__ng_removed;if(r&&r.setForRemoval){r.setForRemoval=!1,r.setForMove=!0;const t=this.collectedLeaveElements.indexOf(e);t>=0&&this.collectedLeaveElements.splice(t,1)}if(t){const a=this._fetchNamespace(t);a&&a.insertNode(e,n)}a&&this.collectEnterElement(e)}collectEnterElement(t){this.collectedEnterElements.push(t)}markElementAsDisabled(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),Tx(t,"ng-animate-disabled")):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),Ox(t,"ng-animate-disabled"))}removeNode(t,e,n,a){if(yx(e)){const r=t?this._fetchNamespace(t):null;if(r?r.removeNode(e,a):this.markElementAsRemoved(t,e,!1,a),n){const n=this.namespacesByHostElement.get(e);n&&n.id!==t&&n.removeNode(e,a)}}else this._onRemovalComplete(e,a)}markElementAsRemoved(t,e,n,a){this.collectedLeaveElements.push(e),e.__ng_removed={namespaceId:t,setForRemoval:a,hasAnimation:n,removedBeforeQueried:!1}}listen(t,e,n,a,r){return yx(e)?this._fetchNamespace(t).listen(e,n,a,r):()=>{}}_buildInstruction(t,e,n,a,r){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,n,a,t.fromState.options,t.toState.options,e,r)}destroyInnerAnimations(t){let e=this.driver.query(t,".ng-trigger",!0);e.forEach(t=>this.destroyActiveAnimationsForElement(t)),0!=this.playersByQueriedElement.size&&(e=this.driver.query(t,".ng-animating",!0),e.forEach(t=>this.finishActiveQueriedAnimationOnElement(t)))}destroyActiveAnimationsForElement(t){const e=this.playersByElement.get(t);e&&e.forEach(t=>{t.queued?t.markedForDestroy=!0:t.destroy()})}finishActiveQueriedAnimationOnElement(t){const e=this.playersByQueriedElement.get(t);e&&e.forEach(t=>t.finish())}whenRenderingDone(){return new Promise(t=>{if(this.players.length)return Hy(this.players).onDone(()=>t());t()})}processLeaveNode(t){const e=t.__ng_removed;if(e&&e.setForRemoval){if(t.__ng_removed=cx,e.namespaceId){this.destroyInnerAnimations(t);const n=this._fetchNamespace(e.namespaceId);n&&n.clearElementCache(t)}this._onRemovalComplete(t,e.setForRemoval)}this.driver.matchesElement(t,".ng-animate-disabled")&&this.markElementAsDisabled(t,!1),this.driver.query(t,".ng-animate-disabled",!0).forEach(t=>{this.markElementAsDisabled(t,!1)})}flush(t=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((t,e)=>this._balanceNamespaceList(t,e)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let n=0;n<this.collectedEnterElements.length;n++)Tx(this.collectedEnterElements[n],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const n=[];try{e=this._flushAnimations(n,t)}finally{for(let t=0;t<n.length;t++)n[t]()}}else for(let n=0;n<this.collectedLeaveElements.length;n++)this.processLeaveNode(this.collectedLeaveElements[n]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(t=>t()),this._flushFns=[],this._whenQuietFns.length){const t=this._whenQuietFns;this._whenQuietFns=[],e.length?Hy(e).onDone(()=>{t.forEach(t=>t())}):t.forEach(t=>t())}}reportError(t){throw new Error("Unable to process animations due to the following failed trigger transitions\n "+t.join("\n"))}_flushAnimations(t,e){const n=new Bv,a=[],r=new Map,i=[],s=new Map,o=new Map,u=new Map,l=new Set;this.disabledNodes.forEach(t=>{l.add(t);const e=this.driver.query(t,".ng-animate-queued",!0);for(let n=0;n<e.length;n++)l.add(e[n])});const d=this.bodyNode,c=Array.from(this.statesByElement.keys()),f=_x(c,this.collectedEnterElements),h=new Map;let g=0;f.forEach((t,e)=>{const n="ng-enter"+g++;h.set(e,n),t.forEach(t=>Tx(t,n))});const p=[],b=new Set,m=new Set;for(let A=0;A<this.collectedLeaveElements.length;A++){const t=this.collectedLeaveElements[A],e=t.__ng_removed;e&&e.setForRemoval&&(p.push(t),b.add(t),e.hasAnimation?this.driver.query(t,".ng-star-inserted",!0).forEach(t=>b.add(t)):m.add(t))}const y=new Map,v=_x(c,Array.from(b));v.forEach((t,e)=>{const n="ng-leave"+g++;y.set(e,n),t.forEach(t=>Tx(t,n))}),t.push(()=>{f.forEach((t,e)=>{const n=h.get(e);t.forEach(t=>Ox(t,n))}),v.forEach((t,e)=>{const n=y.get(e);t.forEach(t=>Ox(t,n))}),p.forEach(t=>{this.processLeaveNode(t)})});const x=[],_=[];for(let A=this._namespaceList.length-1;A>=0;A--)this._namespaceList[A].drainQueuedTransitions(e).forEach(t=>{const e=t.player,r=t.element;if(x.push(e),this.collectedEnterElements.length){const t=r.__ng_removed;if(t&&t.setForMove)return void e.destroy()}const l=!d||!this.driver.containsElement(d,r),c=y.get(r),f=h.get(r),g=this._buildInstruction(t,n,f,c,l);if(g.errors&&g.errors.length)_.push(g);else{if(l)return e.onStart(()=>vv(r,g.fromStyles)),e.onDestroy(()=>yv(r,g.toStyles)),void a.push(e);if(t.isFallbackTransition)return e.onStart(()=>vv(r,g.fromStyles)),e.onDestroy(()=>yv(r,g.toStyles)),void a.push(e);g.timelines.forEach(t=>t.stretchStartingKeyframe=!0),n.append(r,g.timelines),i.push({instruction:g,player:e,element:r}),g.queriedElements.forEach(t=>Jy(s,t,[]).push(e)),g.preStyleProps.forEach((t,e)=>{const n=Object.keys(t);if(n.length){let t=o.get(e);t||o.set(e,t=new Set),n.forEach(e=>t.add(e))}}),g.postStyleProps.forEach((t,e)=>{const n=Object.keys(t);let a=u.get(e);a||u.set(e,a=new Set),n.forEach(t=>a.add(t))})}});if(_.length){const t=[];_.forEach(e=>{t.push(`@${e.triggerName} has failed due to:\n`),e.errors.forEach(e=>t.push(`- ${e}\n`))}),x.forEach(t=>t.destroy()),this.reportError(t)}const T=new Map,O=new Map;i.forEach(t=>{const e=t.element;n.has(e)&&(O.set(e,e),this._beforeAnimationBuild(t.player.namespaceId,t.instruction,T))}),a.forEach(t=>{const e=t.element;this._getPreviousPlayers(e,!1,t.namespaceId,t.triggerName,null).forEach(t=>{Jy(T,e,[]).push(t),t.destroy()})});const w=p.filter(t=>Sx(t,o,u)),S=new Map;xx(S,this.driver,m,u,K.a).forEach(t=>{Sx(t,o,u)&&w.push(t)});const I=new Map;f.forEach((t,e)=>{xx(I,this.driver,new Set(t),o,K.l)}),w.forEach(t=>{const e=S.get(t),n=I.get(t);S.set(t,Object.assign({},e,n))});const N=[],C=[],R={};i.forEach(t=>{const{element:e,player:i,instruction:s}=t;if(n.has(e)){if(l.has(e))return i.onDestroy(()=>yv(e,s.toStyles)),i.disabled=!0,i.overrideTotalTime(s.totalTime),void a.push(i);let t=R;if(O.size>1){let n=e;const a=[];for(;n=n.parentNode;){const e=O.get(n);if(e){t=e;break}a.push(n)}a.forEach(e=>O.set(e,t))}const n=this._buildAnimation(i.namespaceId,s,T,r,I,S);if(i.setRealPlayer(n),t===R)N.push(i);else{const e=this.playersByElement.get(t);e&&e.length&&(i.parentPlayer=Hy(e)),a.push(i)}}else vv(e,s.fromStyles),i.onDestroy(()=>yv(e,s.toStyles)),C.push(i),l.has(e)&&a.push(i)}),C.forEach(t=>{const e=r.get(t.element);if(e&&e.length){const n=Hy(e);t.setRealPlayer(n)}}),a.forEach(t=>{t.parentPlayer?t.syncPlayerEvents(t.parentPlayer):t.destroy()});for(let A=0;A<p.length;A++){const t=p[A],e=t.__ng_removed;if(Ox(t,"ng-leave"),e&&e.hasAnimation)continue;let n=[];if(s.size){let e=s.get(t);e&&e.length&&n.push(...e);let a=this.driver.query(t,".ng-animating",!0);for(let t=0;t<a.length;t++){let e=s.get(a[t]);e&&e.length&&n.push(...e)}}const a=n.filter(t=>!t.destroyed);a.length?wx(this,t,a):this.processLeaveNode(t)}return p.length=0,N.forEach(t=>{this.players.push(t),t.onDone(()=>{t.destroy();const e=this.players.indexOf(t);this.players.splice(e,1)}),t.play()}),N}elementContainsData(t,e){let n=!1;const a=e.__ng_removed;return a&&a.setForRemoval&&(n=!0),this.playersByElement.has(e)&&(n=!0),this.playersByQueriedElement.has(e)&&(n=!0),this.statesByElement.has(e)&&(n=!0),this._fetchNamespace(t).elementContainsData(e)||n}afterFlush(t){this._flushFns.push(t)}afterFlushAnimationsDone(t){this._whenQuietFns.push(t)}_getPreviousPlayers(t,e,n,a,r){let i=[];if(e){const e=this.playersByQueriedElement.get(t);e&&(i=e)}else{const e=this.playersByElement.get(t);if(e){const t=!r||"void"==r;e.forEach(e=>{e.queued||(t||e.triggerName==a)&&i.push(e)})}}return(n||a)&&(i=i.filter(t=>!(n&&n!=t.namespaceId||a&&a!=t.triggerName))),i}_beforeAnimationBuild(t,e,n){const a=e.element,r=e.isRemovalTransition?void 0:t,i=e.isRemovalTransition?void 0:e.triggerName;for(const s of e.timelines){const t=s.element,o=t!==a,u=Jy(n,t,[]);this._getPreviousPlayers(t,o,r,i,e.toState).forEach(t=>{const e=t.getRealPlayer();e.beforeDestroy&&e.beforeDestroy(),t.destroy(),u.push(t)})}vv(a,e.fromStyles)}_buildAnimation(t,e,n,a,r,i){const s=e.triggerName,o=e.element,u=[],l=new Set,d=new Set,c=e.timelines.map(e=>{const c=e.element;l.add(c);const f=c.__ng_removed;if(f&&f.removedBeforeQueried)return new K.d(e.duration,e.delay);const h=c!==o,g=function(t){const e=[];return function t(e,n){for(let a=0;a<e.length;a++){const r=e[a];r instanceof K.k?t(r.players,n):n.push(r)}}(t,e),e}((n.get(c)||dx).map(t=>t.getRealPlayer())).filter(t=>!!t.element&&t.element===c),p=r.get(c),b=i.get(c),m=Uy(0,this._normalizer,0,e.keyframes,p,b),y=this._buildPlayer(e,m,g);if(e.subTimeline&&a&&d.add(c),h){const e=new mx(t,s,c);e.setRealPlayer(y),u.push(e)}return y});u.forEach(t=>{Jy(this.playersByQueriedElement,t.element,[]).push(t),t.onDone(()=>function(t,e,n){let a;if(t instanceof Map){if(a=t.get(e),a){if(a.length){const t=a.indexOf(n);a.splice(t,1)}0==a.length&&t.delete(e)}}else if(a=t[e],a){if(a.length){const t=a.indexOf(n);a.splice(t,1)}0==a.length&&delete t[e]}return a}(this.playersByQueriedElement,t.element,t))}),l.forEach(t=>Tx(t,"ng-animating"));const f=Hy(c);return f.onDestroy(()=>{l.forEach(t=>Ox(t,"ng-animating")),yv(o,e.toStyles)}),d.forEach(t=>{Jy(a,t,[]).push(f)}),f}_buildPlayer(t,e,n){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,n):new K.d(t.duration,t.delay)}}class mx{constructor(t,e,n){this.namespaceId=t,this.triggerName=e,this.element=n,this._player=new K.d,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(t){this._containsRealPlayer||(this._player=t,Object.keys(this._queuedCallbacks).forEach(e=>{this._queuedCallbacks[e].forEach(n=>Wy(t,e,void 0,n))}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(t){this.totalTime=t}syncPlayerEvents(t){const e=this._player;e.triggerCallback&&t.onStart(()=>e.triggerCallback("start")),t.onDone(()=>this.finish()),t.onDestroy(()=>this.destroy())}_queueEvent(t,e){Jy(this._queuedCallbacks,t,[]).push(e)}onDone(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)}onStart(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)}onDestroy(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(t){this.queued||this._player.setPosition(t)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(t){const e=this._player;e.triggerCallback&&e.triggerCallback(t)}}function yx(t){return t&&1===t.nodeType}function vx(t,e){const n=t.style.display;return t.style.display=null!=e?e:"none",n}function xx(t,e,n,a,r){const i=[];n.forEach(t=>i.push(vx(t)));const s=[];a.forEach((n,a)=>{const i={};n.forEach(t=>{const n=i[t]=e.computeStyle(a,t,r);n&&0!=n.length||(a.__ng_removed=fx,s.push(a))}),t.set(a,i)});let o=0;return n.forEach(t=>vx(t,i[o++])),s}function _x(t,e){const n=new Map;if(t.forEach(t=>n.set(t,[])),0==e.length)return n;const a=new Set(e),r=new Map;return e.forEach(t=>{const e=function t(e){if(!e)return 1;let i=r.get(e);if(i)return i;const s=e.parentNode;return i=n.has(s)?s:a.has(s)?1:t(s),r.set(e,i),i}(t);1!==e&&n.get(e).push(t)}),n}function Tx(t,e){if(t.classList)t.classList.add(e);else{let n=t.$$classes;n||(n=t.$$classes={}),n[e]=!0}}function Ox(t,e){if(t.classList)t.classList.remove(e);else{let n=t.$$classes;n&&delete n[e]}}function wx(t,e,n){Hy(n).onDone(()=>t.processLeaveNode(e))}function Sx(t,e,n){const a=n.get(t);if(!a)return!1;let r=e.get(t);return r?a.forEach(t=>r.add(t)):e.set(t,a),n.delete(t),!0}class Ix{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._triggerCache={},this.onRemovalComplete=(t,e)=>{},this._transitionEngine=new bx(t,e,n),this._timelineEngine=new lx(t,e,n),this._transitionEngine.onRemovalComplete=(t,e)=>this.onRemovalComplete(t,e)}registerTrigger(t,e,n,a,r){const i=t+"-"+a;let s=this._triggerCache[i];if(!s){const t=[],e=Mv(this._driver,r,t);if(t.length)throw new Error(`The animation trigger "${a}" has failed to build due to the following errors:\n - ${t.join("\n - ")}`);s=function(t,e){return new sx(t,e)}(a,e),this._triggerCache[i]=s}this._transitionEngine.registerTrigger(e,a,s)}register(t,e){this._transitionEngine.register(t,e)}destroy(t,e){this._transitionEngine.destroy(t,e)}onInsert(t,e,n,a){this._transitionEngine.insertNode(t,e,n,a)}onRemove(t,e,n,a){this._transitionEngine.removeNode(t,e,a||!1,n)}disableAnimations(t,e){this._transitionEngine.markElementAsDisabled(t,e)}process(t,e,n,a){if("@"==n.charAt(0)){const[t,r]=Zy(n);this._timelineEngine.command(t,e,r,a)}else this._transitionEngine.trigger(t,e,n,a)}listen(t,e,n,a,r){if("@"==n.charAt(0)){const[t,a]=Zy(n);return this._timelineEngine.listen(t,e,a,r)}return this._transitionEngine.listen(t,e,n,a,r)}flush(t=-1){this._transitionEngine.flush(t)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}function Nx(t,e){let n=null,a=null;return Array.isArray(e)&&e.length?(n=Rx(e[0]),e.length>1&&(a=Rx(e[e.length-1]))):e&&(n=Rx(e)),n||a?new Cx(t,n,a):null}let Cx=(()=>{class t{constructor(e,n,a){this._element=e,this._startStyles=n,this._endStyles=a,this._state=0;let r=t.initialStylesByElement.get(e);r||t.initialStylesByElement.set(e,r={}),this._initialStyles=r}start(){this._state<1&&(this._startStyles&&yv(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(yv(this._element,this._initialStyles),this._endStyles&&(yv(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(vv(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(vv(this._element,this._endStyles),this._endStyles=null),yv(this._element,this._initialStyles),this._state=3)}}return t.initialStylesByElement=new WeakMap,t})();function Rx(t){let e=null;const n=Object.keys(t);for(let a=0;a<n.length;a++){const r=n[a];Ax(r)&&(e=e||{},e[r]=t[r])}return e}function Ax(t){return"display"===t||"position"===t}class kx{constructor(t,e,n,a,r,i,s){this._element=t,this._name=e,this._duration=n,this._delay=a,this._easing=r,this._fillMode=i,this._onDoneFn=s,this._finished=!1,this._destroyed=!1,this._startTime=0,this._position=0,this._eventFn=t=>this._handleCallback(t)}apply(){!function(t,e){const n=qx(t,"").trim();n.length&&(function(t,e){let n=0;for(let a=0;a<t.length;a++)","===t.charAt(a)&&n++}(n),e=`${n}, ${e}`),Mx(t,"",e)}(this._element,`${this._duration}ms ${this._easing} ${this._delay}ms 1 normal ${this._fillMode} ${this._name}`),Px(this._element,this._eventFn,!1),this._startTime=Date.now()}pause(){Ex(this._element,this._name,"paused")}resume(){Ex(this._element,this._name,"running")}setPosition(t){const e=Lx(this._element,this._name);this._position=t*this._duration,Mx(this._element,"Delay",`-${this._position}ms`,e)}getPosition(){return this._position}_handleCallback(t){const e=t._ngTestManualTimestamp||Date.now(),n=1e3*parseFloat(t.elapsedTime.toFixed(3));t.animationName==this._name&&Math.max(e-this._startTime,0)>=this._delay&&n>=this._duration&&this.finish()}finish(){this._finished||(this._finished=!0,this._onDoneFn(),Px(this._element,this._eventFn,!0))}destroy(){this._destroyed||(this._destroyed=!0,this.finish(),function(t,e){const n=qx(t,"").split(","),a=Dx(n,e);a>=0&&(n.splice(a,1),Mx(t,"",n.join(",")))}(this._element,this._name))}}function Ex(t,e,n){Mx(t,"PlayState",n,Lx(t,e))}function Lx(t,e){const n=qx(t,"");return n.indexOf(",")>0?Dx(n.split(","),e):Dx([n],e)}function Dx(t,e){for(let n=0;n<t.length;n++)if(t[n].indexOf(e)>=0)return n;return-1}function Px(t,e,n){n?t.removeEventListener("animationend",e):t.addEventListener("animationend",e)}function Mx(t,e,n,a){const r="animation"+e;if(null!=a){const e=t.style[r];if(e.length){const t=e.split(",");t[a]=n,n=t.join(",")}}t.style[r]=n}function qx(t,e){return t.style["animation"+e]}class jx{constructor(t,e,n,a,r,i,s,o){this.element=t,this.keyframes=e,this.animationName=n,this._duration=a,this._delay=r,this._finalStyles=s,this._specialStyles=o,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this.currentSnapshot={},this._state=0,this.easing=i||"linear",this.totalTime=a+r,this._buildStyler()}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}destroy(){this.init(),this._state>=4||(this._state=4,this._styler.destroy(),this._flushStartFns(),this._flushDoneFns(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}_flushDoneFns(){this._onDoneFns.forEach(t=>t()),this._onDoneFns=[]}_flushStartFns(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}finish(){this.init(),this._state>=3||(this._state=3,this._styler.finish(),this._flushStartFns(),this._specialStyles&&this._specialStyles.finish(),this._flushDoneFns())}setPosition(t){this._styler.setPosition(t)}getPosition(){return this._styler.getPosition()}hasStarted(){return this._state>=2}init(){this._state>=1||(this._state=1,this._styler.apply(),this._delay&&this._styler.pause())}play(){this.init(),this.hasStarted()||(this._flushStartFns(),this._state=2,this._specialStyles&&this._specialStyles.start()),this._styler.resume()}pause(){this.init(),this._styler.pause()}restart(){this.reset(),this.play()}reset(){this._styler.destroy(),this._buildStyler(),this._styler.apply()}_buildStyler(){this._styler=new kx(this.element,this.animationName,this._duration,this._delay,this.easing,"forwards",()=>this.finish())}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}beforeDestroy(){this.init();const t={};if(this.hasStarted()){const e=this._state>=3;Object.keys(this._finalStyles).forEach(n=>{"offset"!=n&&(t[n]=e?this._finalStyles[n]:Av(this.element,n))})}this.currentSnapshot=t}}class Fx extends K.d{constructor(t,e){super(),this.element=t,this._startingStyles={},this.__initialized=!1,this._styles=uv(e)}init(){!this.__initialized&&this._startingStyles&&(this.__initialized=!0,Object.keys(this._styles).forEach(t=>{this._startingStyles[t]=this.element.style[t]}),super.init())}play(){this._startingStyles&&(this.init(),Object.keys(this._styles).forEach(t=>this.element.style.setProperty(t,this._styles[t])),super.play())}destroy(){this._startingStyles&&(Object.keys(this._startingStyles).forEach(t=>{const e=this._startingStyles[t];e?this.element.style.setProperty(t,e):this.element.style.removeProperty(t)}),this._startingStyles=null,super.destroy())}}class Gx{constructor(){this._count=0,this._head=document.querySelector("head"),this._warningIssued=!1}validateStyleProperty(t){return rv(t)}matchesElement(t,e){return iv(t,e)}containsElement(t,e){return sv(t,e)}query(t,e,n){return ov(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}buildKeyframeElement(t,e,n){n=n.map(t=>uv(t));let a=`@keyframes ${e} {\n`,r="";n.forEach(t=>{r=" ";const e=parseFloat(t.offset);a+=`${r}${100*e}% {\n`,r+=" ",Object.keys(t).forEach(e=>{const n=t[e];switch(e){case"offset":return;case"easing":return void(n&&(a+=`${r}animation-timing-function: ${n};\n`));default:return void(a+=`${r}${e}: ${n};\n`)}}),a+=r+"}\n"}),a+="}\n";const i=document.createElement("style");return i.innerHTML=a,i}animate(t,e,n,a,r,i=[],s){s&&this._notifyFaultyScrubber();const o=i.filter(t=>t instanceof jx),u={};Nv(n,a)&&o.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>u[t]=e[t])});const l=function(t){let e={};return t&&(Array.isArray(t)?t:[t]).forEach(t=>{Object.keys(t).forEach(n=>{"offset"!=n&&"easing"!=n&&(e[n]=t[n])})}),e}(e=Cv(t,e,u));if(0==n)return new Fx(t,l);const d="gen_css_kf_"+this._count++,c=this.buildKeyframeElement(t,d,e);document.querySelector("head").appendChild(c);const f=Nx(t,e),h=new jx(t,e,d,n,a,r,l,f);return h.onDestroy(()=>{var t;(t=c).parentNode.removeChild(t)}),h}_notifyFaultyScrubber(){this._warningIssued||(console.warn("@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\n","  visit http://bit.ly/IWukam to learn more about using the web-animation-js polyfill."),this._warningIssued=!0)}}class Vx{constructor(t,e,n,a){this.element=t,this.keyframes=e,this.options=n,this._specialStyles=a,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_triggerWebAnimation(t,e,n){return t.animate(e,n)}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}setPosition(t){this.domPlayer.currentTime=t*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const t={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(e=>{"offset"!=e&&(t[e]=this._finished?this._finalKeyframe[e]:Av(this.element,e))}),this.currentSnapshot=t}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class zx{constructor(){this._isNativeImpl=/\{\s*\[native\s+code\]\s*\}/.test(Bx().toString()),this._cssKeyframesDriver=new Gx}validateStyleProperty(t){return rv(t)}matchesElement(t,e){return iv(t,e)}containsElement(t,e){return sv(t,e)}query(t,e,n){return ov(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}overrideWebAnimationsSupport(t){this._isNativeImpl=t}animate(t,e,n,a,r,i=[],s){if(!s&&!this._isNativeImpl)return this._cssKeyframesDriver.animate(t,e,n,a,r,i);const o={duration:n,delay:a,fill:0==a?"both":"forwards"};r&&(o.easing=r);const u={},l=i.filter(t=>t instanceof Vx);Nv(n,a)&&l.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>u[t]=e[t])});const d=Nx(t,e=Cv(t,e=e.map(t=>pv(t,!1)),u));return new Vx(t,e,o,d)}}function Bx(){return"undefined"!=typeof window&&void 0!==window.document&&Element.prototype.animate||{}}class Yx extends K.b{constructor(t,e){super(),this._nextAnimationId=0,this._renderer=t.createRenderer(e.body,{id:"0",encapsulation:s.ViewEncapsulation.None,styles:[],data:{animation:[]}})}build(t){const e=this._nextAnimationId.toString();this._nextAnimationId++;const n=Array.isArray(t)?Object(K.f)(t):t;return Wx(this._renderer,null,e,"register",[n]),new Hx(e,this._renderer)}}class Hx extends K.c{constructor(t,e){super(),this._id=t,this._renderer=e}create(t,e){return new Ux(this._id,t,e||{},this._renderer)}}class Ux{constructor(t,e,n,a){this.id=t,this.element=e,this._renderer=a,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}_listen(t,e){return this._renderer.listen(this.element,`@@${this.id}:${t}`,e)}_command(t,...e){return Wx(this._renderer,this.element,this.id,t,e)}onDone(t){this._listen("done",t)}onStart(t){this._listen("start",t)}onDestroy(t){this._listen("destroy",t)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset")}setPosition(t){this._command("setPosition",t)}getPosition(){return 0}}function Wx(t,e,n,a,r){return t.setProperty(e,`@@${n}:${a}`,r)}class Kx{constructor(t,e,n){this.delegate=t,this.engine=e,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),e.onRemovalComplete=(t,e)=>{e&&e.parentNode(t)&&e.removeChild(t.parentNode,t)}}createRenderer(t,e){const n=this.delegate.createRenderer(t,e);if(!(t&&e&&e.data&&e.data.animation)){let t=this._rendererCache.get(n);return t||(t=new $x("",n,this.engine),this._rendererCache.set(n,t)),t}const a=e.id,r=e.id+"-"+this._currentId;return this._currentId++,this.engine.register(r,t),e.data.animation.forEach(e=>this.engine.registerTrigger(a,r,t,e.name,e)),new Jx(this,r,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(t,e,n){t>=0&&t<this._microtaskId?this._zone.run(()=>e(n)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(t=>{const[e,n]=t;e(n)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([e,n]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}class $x{constructor(t,e,n){this.namespaceId=t,this.delegate=e,this.engine=n,this.destroyNode=this.delegate.destroyNode?t=>e.destroyNode(t):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}appendChild(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)}insertBefore(t,e,n){this.delegate.insertBefore(t,e,n),this.engine.onInsert(this.namespaceId,e,t,!0)}removeChild(t,e,n){this.engine.onRemove(this.namespaceId,e,this.delegate,n)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,n,a){this.delegate.setAttribute(t,e,n,a)}removeAttribute(t,e,n){this.delegate.removeAttribute(t,e,n)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,n,a){this.delegate.setStyle(t,e,n,a)}removeStyle(t,e,n){this.delegate.removeStyle(t,e,n)}setProperty(t,e,n){"@"==e.charAt(0)&&"@.disabled"==e?this.disableAnimations(t,!!n):this.delegate.setProperty(t,e,n)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,n){return this.delegate.listen(t,e,n)}disableAnimations(t,e){this.engine.disableAnimations(t,e)}}class Jx extends $x{constructor(t,e,n,a){super(e,n,a),this.factory=t,this.namespaceId=e}setProperty(t,e,n){"@"==e.charAt(0)?"."==e.charAt(1)&&"@.disabled"==e?this.disableAnimations(t,n=void 0===n||!!n):this.engine.process(this.namespaceId,t,e.substr(1),n):this.delegate.setProperty(t,e,n)}listen(t,e,n){if("@"==e.charAt(0)){const a=function(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(t);let r=e.substr(1),i="";return"@"!=r.charAt(0)&&([r,i]=function(t){const e=t.indexOf(".");return[t.substring(0,e),t.substr(e+1)]}(r)),this.engine.listen(this.namespaceId,a,r,i,t=>{this.factory.scheduleListenerCallback(t._data||-1,n,t)})}return this.delegate.listen(t,e,n)}}class Zx extends Ix{constructor(t,e,n){super(t.body,e,n)}}function Qx(){return"function"==typeof Bx()?new zx:new Gx}function Xx(){return new tx}function t_(t,e,n){return new Kx(t,e,n)}const e_=new s.InjectionToken("AnimationModuleType");class n_{}var a_=n("Avrn");let r_=(()=>{class t{constructor(t,e){this.router=t,this.authStorageService=e}canActivate(){return!(this.authStorageService.isLoggedIn()&&!this.authStorageService.isSSO()&&this.authStorageService.getPwdUpdateRequired()&&(this.router.navigate(["/login-change-password"]),1))}canActivateChild(){return this.canActivate()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Lt.m),s["ɵɵinject"](Q.a))},token:t,providedIn:"root"}),t})();var i_=n("Vhfg");let s_=(()=>{class t{constructor(t,e){this.http=t,this.router=e}canActivate(t){return this.doCheck(t)}canActivateChild(t){return this.doCheck(t)}doCheck(e){if(e.url.length>0&&t.WHITELIST.includes(e.url[0].path))return Object(In.a)(!0);const n=e.data.moduleStatusGuardConfig;return this.http.get(`api/${n.apiPath}/status`).pipe(Object(Ce.a)(t=>(t.available||this.router.navigate([n.redirectTo,t.message||""]),t.available)),Object(zy.a)(()=>(this.router.navigate([n.redirectTo]),Object(In.a)(!1))))}}return t.WHITELIST=["501"],t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c),s["ɵɵinject"](Lt.m))},token:t,providedIn:"root"}),t})(),o_=(()=>{class t{constructor(t,e){this.authStorageService=t,this.router=e}canActivate(){return!this.authStorageService.isSSO()||(this.router.navigate(["404"]),!1)}canActivateChild(){return this.canActivate()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Q.a),s["ɵɵinject"](Lt.m))},token:t,providedIn:"root"}),t})();class u_ extends Gn{resolve(t){const e=[],n=t.queryParams.fromLink||null;let a="";switch(n){case"/monitor":a="Monitors";break;case"/hosts":a="Hosts"}return e.push({text:"Cluster",path:null}),e.push({text:a,path:n}),e.push({text:"Performance Counters",path:""}),e}}class l_ extends Gn{resolve(t){const e=t.params.name;return[{text:tt.startCase(e)+"/Edit",path:e}]}}const d_={breadcrumbs:"Cluster/Hosts"},c_={breadcrumbs:It.a.CREATE},f_={breadcrumbs:"Cluster/Monitors"},h_={breadcrumbs:"Cluster/Services"},g_={breadcrumbs:"Cluster/Inventory"},p_={breadcrumbs:"Cluster/OSDs"},b_={breadcrumbs:It.a.CREATE},m_={breadcrumbs:"Cluster/Configuration"},y_={breadcrumbs:It.a.EDIT},v_={breadcrumbs:"Cluster/CRUSH map"},x_={breadcrumbs:"Cluster/Logs"},__={breadcrumbs:"Telemetry configuration"},T_={breadcrumbs:"Cluster/Monitoring"},O_={breadcrumbs:It.a.CREATE+" Silence"},w_={breadcrumbs:It.a.CREATE},S_={breadcrumbs:It.a.EDIT},I_={breadcrumbs:It.a.RECREATE},N_={breadcrumbs:u_},C_={breadcrumbs:"Cluster/Manager Modules"},R_={breadcrumbs:l_},A_={breadcrumbs:"Pools"},k_=()=>Promise.all([n.e(1),n.e(6)]).then(n.bind(null,"nOaW")).then(t=>t.RoutedPoolModuleNgFactory),E_={breadcrumbs:!0,text:"Block",path:null},L_=()=>Promise.all([n.e(1),n.e(5)]).then(n.bind(null,"J6Oi")).then(t=>t.RoutedBlockModuleNgFactory),D_={breadcrumbs:"Filesystems"},P_={moduleStatusGuardConfig:{apiPath:"rgw",redirectTo:"rgw/501"},breadcrumbs:!0,text:"Object Gateway",path:null},M_=()=>n.e(7).then(n.bind(null,"Znkk")).then(t=>t.RoutedRgwModuleNgFactory),q_={breadcrumbs:"User management",path:null},j_=()=>n.e(8).then(n.bind(null,"DY6s")).then(t=>t.RoutedAuthModuleNgFactory),F_={breadcrumbs:"User profile",path:null},G_={breadcrumbs:It.a.EDIT},V_={breadcrumbs:"NFS"},z_={moduleStatusGuardConfig:{apiPath:"nfs-ganesha",redirectTo:"nfs/501"},breadcrumbs:"NFS"},B_={breadcrumbs:It.a.CREATE},Y_={breadcrumbs:It.a.EDIT};class H_{}var U_=n("yT6U"),W_=n("4DD9"),K_=n("+0ag"),$_=n("IzCI"),J_=n("Dwqy"),Z_=n("uYzU"),Q_=n("nSDx"),X_=n("SB+Q"),tT=n("BQkM"),eT=n("dEH0"),nT=n("G1/K"),aT=n("TJUb"),rT=n("efK2");class iT{constructor(){this.closeOthers=!1,this.isAnimated=!1}}class sT{static forRoot(){return{ngModule:sT,providers:[iT]}}}let oT=(()=>{class t{constructor(t){this.http=t}jsError(t,e,n){return this.http.post("ui-api/logging/js-error",{url:t,message:e,stack:n})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](nt.c))},token:t,providedIn:ue.a}),t})();class uT{constructor(t){this.injector=t}handleError(t){const e=this.injector.get(oT),n=window.location.href;throw e.jsError(n,t&&t.message,t&&t.stack).subscribe(),t}}var lT=n("aHM3"),dT=n("9Xeq"),cT=n("yGOH"),fT=n("bxSN"),hT=n("V/fk"),gT=n("ChqD"),pT=n("PCNd"),bT=n("LceX");class mT{}class yT{}var vT=n("G6Q+");class xT{}var _T=n("kJI8");class TT{}class OT{}class wT{}class ST{}class IT{}var NT=function(){function t(t){if(t)throw new Error("JwtModule is already loaded. It should only be imported in your application's main module.")}return t.forRoot=function(e){return{ngModule:t,providers:[{provide:nt.a,useClass:Gy,multi:!0},e.jwtOptionsProvider||{provide:qy,useValue:e.config},jy]}},t}(),CT=s["ɵcmf"](l,[d],(function(t){return s["ɵmod"]([s["ɵmpd"](512,s.ComponentFactoryResolver,s["ɵCodegenComponentFactoryResolver"],[[8,[_,T.a,ea,Cr,Rs,Ws,to,fo,ni,su,Lu,$u,gl,Rl,qd,Xd,Ic,Kc,Xc,df,Pf,yh,Lh,jh,Qh,Gp,Hp,tb,fb,mb,Tb,Nb,Eb,q,H,Lb.a,Qt.a,Db.a,Pb.a,Pb.b,Mb.a,qb.a,jb.a,Fb.a,Gb.a,Vb.a,Vb.c,Vb.b,Vb.d,Hb,om,Do,gm,_m,Dm,Vm,oy,my,wy,Cy,Ey,My]],[3,s.ComponentFactoryResolver],s.NgModuleRef]),s["ɵmpd"](4608,nt.j,nt.p,[i.DOCUMENT,s.PLATFORM_ID,nt.n]),s["ɵmpd"](4608,nt.q,nt.q,[nt.j,nt.o]),s["ɵmpd"](4608,jy,jy,[qy]),s["ɵmpd"](4608,Q.a,Q.a,[]),s["ɵmpd"](5120,nt.a,(function(t,e,n,a,r,i){return[t,new Gy(e,n),new By(a,r,i)]}),[nt.q,qy,jy,Lt.m,Q.a,mt.a]),s["ɵmpd"](4608,nt.m,nt.m,[]),s["ɵmpd"](6144,nt.k,null,[nt.m]),s["ɵmpd"](4608,nt.i,nt.i,[nt.k]),s["ɵmpd"](6144,nt.b,null,[nt.i]),s["ɵmpd"](4608,nt.g,nt.l,[nt.b,s.Injector]),s["ɵmpd"](4608,nt.c,nt.c,[nt.g]),s["ɵmpd"](4352,s.LOCALE_ID,"en-US",[]),s["ɵmpd"](4608,i.NgLocalization,i.NgLocaleLocalization,[s.LOCALE_ID,[2,i["ɵangular_packages_common_common_a"]]]),s["ɵmpd"](5120,s["ɵangular_packages_core_core_ba"],s["ɵangular_packages_core_core_r"],[s.NgZone]),s["ɵmpd"](5120,s.APP_ID,s["ɵangular_packages_core_core_f"],[]),s["ɵmpd"](5120,s.IterableDiffers,s["ɵangular_packages_core_core_n"],[]),s["ɵmpd"](5120,s.KeyValueDiffers,s["ɵangular_packages_core_core_o"],[]),s["ɵmpd"](4608,kr.b,kr.k,[i.DOCUMENT]),s["ɵmpd"](6144,s.Sanitizer,null,[kr.b]),s["ɵmpd"](4608,kr.e,kr.g,[]),s["ɵmpd"](5120,kr.c,(function(t,e,n,a,r,i,s,o){return[new kr.i(t,e,n),new kr.n(a),new kr.m(r,i,s,o)]}),[i.DOCUMENT,s.NgZone,s.PLATFORM_ID,i.DOCUMENT,i.DOCUMENT,kr.e,s["ɵConsole"],[2,kr.f]]),s["ɵmpd"](4608,kr.d,kr.d,[kr.c,s.NgZone]),s["ɵmpd"](135680,kr.l,kr.l,[i.DOCUMENT]),s["ɵmpd"](4608,kr.j,kr.j,[kr.d,kr.l,s.APP_ID]),s["ɵmpd"](5120,dv,Qx,[]),s["ɵmpd"](5120,Xv,Xx,[]),s["ɵmpd"](4608,Ix,Zx,[i.DOCUMENT,dv,Xv]),s["ɵmpd"](5120,s.RendererFactory2,t_,[kr.j,Ix,s.NgZone]),s["ɵmpd"](6144,kr.o,null,[kr.l]),s["ɵmpd"](4608,s.Testability,s.Testability,[s.NgZone]),s["ɵmpd"](4608,K.b,Yx,[s.RendererFactory2,i.DOCUMENT]),s["ɵmpd"](5120,Lt.a,Lt.B,[Lt.m]),s["ɵmpd"](4608,Lt.g,Lt.g,[]),s["ɵmpd"](6144,Lt.h,null,[Lt.g]),s["ɵmpd"](135680,Lt.s,Lt.s,[Lt.m,s.NgModuleFactoryLoader,s.Compiler,s.Injector,Lt.h]),s["ɵmpd"](4608,Lt.f,Lt.f,[]),s["ɵmpd"](5120,Lt.G,Lt.x,[Lt.m,i.ViewportScroller,Lt.i]),s["ɵmpd"](5120,Lt.j,Lt.E,[Lt.C]),s["ɵmpd"](5120,s.APP_BOOTSTRAP_LISTENER,(function(t){return[t]}),[Lt.j]),s["ɵmpd"](4608,l_,l_,[]),s["ɵmpd"](4608,u_,u_,[]),s["ɵmpd"](4608,$.D,$.D,[]),s["ɵmpd"](4608,$.h,$.h,[]),s["ɵmpd"](4608,U_.a,U_.a,[]),s["ɵmpd"](4608,W_.a,W_.a,[]),s["ɵmpd"](5120,s.TRANSLATIONS,u,[s.LOCALE_ID]),s["ɵmpd"](4608,he.a,he.a,[s.TRANSLATIONS_FORMAT,s.TRANSLATIONS,s.LOCALE_ID,[2,he.b]]),s["ɵmpd"](4608,Du.a,Du.a,[he.a]),s["ɵmpd"](4608,i.DatePipe,i.DatePipe,[s.LOCALE_ID]),s["ɵmpd"](4608,hs.a,hs.a,[]),s["ɵmpd"](4608,K_.a,K_.a,[]),s["ɵmpd"](4608,Ia.a,Ia.a,[]),s["ɵmpd"](4608,ma.a,ma.a,[Ia.a]),s["ɵmpd"](4608,$_.a,$_.a,[Ia.a]),s["ɵmpd"](4608,ya.a,ya.a,[Ia.a]),s["ɵmpd"](4608,J_.a,J_.a,[]),s["ɵmpd"](4608,Z_.a,Z_.a,[]),s["ɵmpd"](4608,gs.a,gs.a,[]),s["ɵmpd"](4608,_d.a,_d.a,[]),s["ɵmpd"](4608,_e.a,_e.a,[i.DatePipe]),s["ɵmpd"](4608,Q_.a,Q_.a,[]),s["ɵmpd"](4608,X_.a,X_.a,[]),s["ɵmpd"](4608,yg.a,yg.a,[]),s["ɵmpd"](4608,tT.a,tT.a,[]),s["ɵmpd"](4608,eT.a,eT.a,[]),s["ɵmpd"](4608,nT.a,nT.a,[he.a]),s["ɵmpd"](4608,Ms.a,Ms.a,[]),s["ɵmpd"](4608,aT.a,aT.a,[]),s["ɵmpd"](4608,rT.a,rT.a,[]),s["ɵmpd"](4608,Xt.b,Xt.b,[]),s["ɵmpd"](4608,ra.a,ra.a,[]),s["ɵmpd"](4608,ia.a,ia.a,[s.NgZone,s.RendererFactory2,s.PLATFORM_ID]),s["ɵmpd"](4608,W.a,W.a,[s.ComponentFactoryResolver,s.NgZone,s.Injector,ia.a,s.ApplicationRef]),s["ɵmpd"](4608,ye.c,ye.c,[]),s["ɵmpd"](4608,Kn.a,Kn.a,[]),s["ɵmpd"](4608,Rt.b,Rt.b,[s.RendererFactory2,W.a]),s["ɵmpd"](4608,dc.y,dc.y,[i.DOCUMENT]),s["ɵmpd"](4608,dc.r,dc.r,[]),s["ɵmpd"](4608,dc.a,dc.a,[]),s["ɵmpd"](4608,U.f,U.f,[]),s["ɵmpd"](4608,a_.a,a_.a,[Lt.m,Q.a]),s["ɵmpd"](4608,aa.f,aa.f,[]),s["ɵmpd"](4608,ot.t,ot.t,[]),s["ɵmpd"](4608,ot.v,ot.v,[]),s["ɵmpd"](4608,ot.a,ot.a,[]),s["ɵmpd"](4608,ot.h,ot.h,[]),s["ɵmpd"](4608,ot.d,ot.d,[]),s["ɵmpd"](4608,ot.j,ot.j,[]),s["ɵmpd"](4608,ot.l,ot.l,[]),s["ɵmpd"](4608,ot.u,ot.u,[ot.v,ot.l]),s["ɵmpd"](5120,S,k,[A]),s["ɵmpd"](4608,C,C,[S]),s["ɵmpd"](4608,hg,hg,[]),s["ɵmpd"](4608,$l,$l,[]),s["ɵmpd"](4608,kl,kl,[]),s["ɵmpd"](4608,Ql,Ql,[]),s["ɵmpd"](4608,yl.a,yl.a,[]),s["ɵmpd"](4608,iT,iT,[]),s["ɵmpd"](4608,X.g,X.g,[X.b]),s["ɵmpd"](1073742336,nt.e,nt.e,[]),s["ɵmpd"](1073742336,nt.d,nt.d,[]),s["ɵmpd"](1073742336,i.CommonModule,i.CommonModule,[]),s["ɵmpd"](512,s.ErrorHandler,uT,[s.Injector]),s["ɵmpd"](1024,s.NgProbeToken,(function(){return[Lt.w()]}),[]),s["ɵmpd"](512,Lt.C,Lt.C,[s.Injector]),s["ɵmpd"](1024,s.APP_INITIALIZER,(function(t,e){return[kr.p(t),Lt.D(e)]}),[[2,s.NgProbeToken],Lt.C]),s["ɵmpd"](512,s.ApplicationInitStatus,s.ApplicationInitStatus,[[2,s.APP_INITIALIZER]]),s["ɵmpd"](131584,s.ApplicationRef,s.ApplicationRef,[s.NgZone,s["ɵConsole"],s.Injector,s.ErrorHandler,s.ComponentFactoryResolver,s.ApplicationInitStatus]),s["ɵmpd"](1073742336,s.ApplicationModule,s.ApplicationModule,[s.ApplicationRef]),s["ɵmpd"](1073742336,kr.a,kr.a,[[3,kr.a]]),s["ɵmpd"](1073742336,n_,n_,[]),s["ɵmpd"](1073742336,c.i,c.i,[]),s["ɵmpd"](1024,Lt.v,Lt.z,[[3,Lt.m]]),s["ɵmpd"](512,Lt.u,Lt.c,[]),s["ɵmpd"](512,Lt.b,Lt.b,[]),s["ɵmpd"](256,Lt.i,{useHash:!0,preloadingStrategy:Lt.g},[]),s["ɵmpd"](1024,i.LocationStrategy,Lt.y,[i.PlatformLocation,[2,i.APP_BASE_HREF],Lt.i]),s["ɵmpd"](512,i.Location,i.Location,[i.LocationStrategy,i.PlatformLocation]),s["ɵmpd"](512,s.Compiler,s.Compiler,[]),s["ɵmpd"](512,s.NgModuleFactoryLoader,s.SystemJsNgModuleLoader,[s.Compiler,[2,s.SystemJsNgModuleLoaderConfig]]),s["ɵmpd"](1024,Lt.k,(function(){return[[{path:"",redirectTo:"dashboard",pathMatch:"full"},{path:"",component:Zn,canActivate:[a_.a,r_],canActivateChild:[a_.a,r_],children:[{path:"dashboard",component:Tr},{path:"hosts",data:d_,children:[{path:"",component:vs},{path:"create",component:Fs,data:c_}]},{path:"monitor",component:$s,data:f_},{path:"services",component:io,data:h_},{path:"inventory",component:Jr,data:g_},{path:"osd",data:p_,children:[{path:"",component:Ko},{path:"create",component:Tu,data:b_}]},{path:"configuration",data:m_,children:[{path:"",component:zu},{path:"edit/:name",component:Zu,data:y_}]},{path:"crush-map",component:_l,data:v_},{path:"logs",component:Od,data:x_},{path:"telemetry",component:Fd,data:__},{path:"monitoring",data:T_,children:[{path:"",component:bc},{path:"silence/create",component:Ac,data:O_},{path:"silence/create/:id",component:Ac,data:w_},{path:"silence/edit/:id",component:Ac,data:S_},{path:"silence/recreate/:id",component:Ac,data:I_}]},{path:"perf_counters/:type/:id",component:$c,data:N_},{path:"mgr-modules",data:C_,children:[{path:"",component:sf},{path:"edit/:name",component:cf,data:R_}]},{path:"pool",data:A_,loadChildren:k_},{path:"block",data:E_,loadChildren:L_},{path:"cephfs",component:gh,canActivate:[i_.a],data:D_},{path:"rgw",canActivateChild:[i_.a,s_],data:P_,loadChildren:M_},{path:"user-management",data:q_,loadChildren:j_},{path:"user-profile",data:F_,children:[{path:"edit",component:_h,canActivate:[o_],data:G_}]},{path:"nfs/501/:message",component:Dh,data:V_},{path:"nfs",canActivateChild:[i_.a,s_],data:z_,children:[{path:"",component:Hh},{path:"create",component:kg,data:B_},{path:"edit/:cluster_id/:export_id",component:kg,data:Y_}]}]},{path:"",component:Vp,children:[{path:"login",component:Wp},{path:"login-change-password",component:eb,canActivate:[o_]}]},{path:"",component:hb,children:[{path:"sso/404",component:yb},{path:"403",component:Ob},{path:"404",component:Cb},{path:"**",redirectTo:"/404"}]}]]}),[]),s["ɵmpd"](1024,Lt.m,Lt.A,[s.ApplicationRef,Lt.u,Lt.b,i.Location,s.Injector,s.NgModuleFactoryLoader,s.Compiler,Lt.k,Lt.i,[2,Lt.t],[2,Lt.l]]),s["ɵmpd"](1073742336,Lt.q,Lt.q,[[2,Lt.v],[2,Lt.m]]),s["ɵmpd"](1073742336,H_,H_,[]),s["ɵmpd"](1073742336,E,E,[]),s["ɵmpd"](1073742336,lT.a,lT.a,[]),s["ɵmpd"](1073742336,$.C,$.C,[]),s["ɵmpd"](1073742336,$.n,$.n,[]),s["ɵmpd"](1073742336,ra.d,ra.d,[]),s["ɵmpd"](1073742336,$.y,$.y,[]),s["ɵmpd"](1073742336,dT.a,dT.a,[]),s["ɵmpd"](1073742336,Xt.c,Xt.c,[]),s["ɵmpd"](1073742336,ye.d,ye.d,[]),s["ɵmpd"](1073742336,Kn.d,Kn.d,[]),s["ɵmpd"](1073742336,ga.b,ga.b,[]),s["ɵmpd"](1073742336,Rt.e,Rt.e,[]),s["ɵmpd"](1073742336,cT.a,cT.a,[]),s["ɵmpd"](1073742336,U.e,U.e,[]),s["ɵmpd"](1073742336,X.f,X.f,[]),s["ɵmpd"](1073742336,fT.ClickOutsideModule,fT.ClickOutsideModule,[]),s["ɵmpd"](1073742336,Oe.b,Oe.b,[]),s["ɵmpd"](1073742336,hT.a,hT.a,[]),s["ɵmpd"](1073742336,dc.u,dc.u,[]),s["ɵmpd"](1073742336,gT.a,gT.a,[]),s["ɵmpd"](1073742336,ue.a,ue.a,[]),s["ɵmpd"](1073742336,pT.a,pT.a,[]),s["ɵmpd"](1073742336,aa.d,aa.d,[]),s["ɵmpd"](1073742336,ot.g,ot.g,[]),s["ɵmpd"](1073742336,bT.a,bT.a,[]),s["ɵmpd"](1073742336,Jt,Jt,[]),s["ɵmpd"](1073742336,mT,mT,[]),s["ɵmpd"](1073742336,yT,yT,[]),s["ɵmpd"](1073742336,vT.a,vT.a,[]),s["ɵmpd"](1073742336,xT,xT,[]),s["ɵmpd"](1073742336,pg,pg,[]),s["ɵmpd"](1073742336,td,td,[]),s["ɵmpd"](1073742336,xl.b,xl.b,[]),s["ɵmpd"](1073742336,bi.a,bi.a,[]),s["ɵmpd"](1073742336,_T.a,_T.a,[]),s["ɵmpd"](1073742336,TT,TT,[]),s["ɵmpd"](1073742336,OT,OT,[]),s["ɵmpd"](1073742336,wT,wT,[]),s["ɵmpd"](1073742336,ST,ST,[]),s["ɵmpd"](1073742336,IT,IT,[]),s["ɵmpd"](1073742336,sT,sT,[]),s["ɵmpd"](1073742336,NT,NT,[[3,NT]]),s["ɵmpd"](1073742336,l,l,[]),s["ɵmpd"](256,nt.n,"XSRF-TOKEN",[]),s["ɵmpd"](256,nt.o,"X-XSRF-TOKEN",[]),s["ɵmpd"](256,qy,{tokenGetter:o},[]),s["ɵmpd"](256,s["ɵAPP_ROOT"],!0,[]),s["ɵmpd"](256,e_,"BrowserAnimations",[]),s["ɵmpd"](256,s.TRANSLATIONS_FORMAT,"xlf",[]),s["ɵmpd"](256,U.a,{autoClose:!0,insideClick:!1},[]),s["ɵmpd"](256,A,{},[]),s["ɵmpd"](256,c.b,{default:c.a,config:{positionClass:"toast-top-right",preventDuplicates:!0,enableHtml:!0}},[]),s["ɵmpd"](1024,X.b,(function(){return[[]]}),[]),s["ɵmpd"](256,X.a,1,[])])}));i.registerLocaleData(r.a),Object(s.enableProdMode)(),kr.h().bootstrapModuleFactory(CT).catch(t=>console.log(t))},zWsK:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return a}));class a{transform(t,e,n){return n?e.call(n,t):e(t)}}class r{}},zavE:function(t,e,n){!function(t){"use strict";t.defineLocale("en-SG",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},zk60:function(t,e,n){var a=n("2oRo"),r=n("kRJp");t.exports=function(t,e){try{r(a,t,e)}catch(n){a[t]=e}return e}},zx6S:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))}},[[0,0]]]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js.LICENSE.txt b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c43d13b597196a5f022f.js.LICENSE.txt
new file mode 100644 (file)
index 0000000..3a7085d
--- /dev/null
@@ -0,0 +1,115 @@
+/*!
+ * Chart.js v2.8.0
+ * https://www.chartjs.org
+ * (c) 2019 Chart.js Contributors
+ * Released under the MIT License
+ */
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+this file except in compliance with the License. You may obtain a copy of the
+License at http://www.apache.org/licenses/LICENSE-2.0
+
+THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+MERCHANTABLITY OR NON-INFRINGEMENT.
+
+See the Apache Version 2.0 License for specific language governing permissions
+and limitations under the License.
+***************************************************************************** */
+
+/*! https://mths.be/punycode v1.3.2 by @mathias */
+
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ * @param {?} cb
+ * @return {?}
+ */
+
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ * @type {?}
+ */
+
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+
+/**
+ * @license
+ * Lodash <https://lodash.com/>
+ * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/**
+ * @license Angular v8.2.14
+ * (c) 2010-2019 Google LLC. https://angular.io/
+ * License: MIT
+ */
+
+/**
+* @license
+* Copyright Google Inc. All Rights Reserved.
+*
+* Use of this source code is governed by an MIT-style license that can be
+* found in the LICENSE file at https://angular.io/license
+*/
+
+//! author : Abdel Said: https://github.com/abdelsaid
+
+//! author : Ahmed Elkhatib
+
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+
+//! author : Julio Napurí : https://github.com/julionc
+
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+//! author : Rafal Hirsz : https://github.com/evoL
+
+//! author : bustta : https://github.com/bustta
+
+//! author : forabi https://github.com/forabi
+
+//! author : lluchs : https://github.com/lluchs
+
+//! author : petrbela : https://github.com/petrbela
+
+//! author: Menelion Elensúle: https://github.com/Oire
+
+//! locale : Arabic [ar]
+
+//! locale : Czech [cs]
+
+//! locale : English (United Kingdom) [en-gb]
+
+//! locale : German [de]
+
+//! locale : Polish [pl]
+
+//! locale : Portuguese (Brazil) [pt-br]
+
+//! locale : Spanish (United States) [es-us]
+
+//! locale : Spanish [es]
+
+//! moment.js locale configuration
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.cb10cd7f4a550e7a33c5.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.cb10cd7f4a550e7a33c5.js
deleted file mode 100644 (file)
index 841919c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"+0ag":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=/ceph version\s+[^ ]+\s+\(.+\)\s+(.+)\s+\((.+)\)/.exec(t);return e?"dev"===e[2]?"master":e[1]:t}}},"+6XX":function(t,e,n){var a=n("y1pI");t.exports=function(t){return a(this.__data__,t)>-1}},"+K+b":function(t,e,n){var a=n("JHRd");t.exports=function(t){var e=new t.constructor(t.byteLength);return new a(e).set(new a(t)),e}},"+Qka":function(t,e,n){var a=n("fmRc"),r=n("t2Dn"),i=n("cq/+"),s=n("T1AV"),o=n("GoyQ"),u=n("mTTR"),l=n("itsj");t.exports=function t(e,n,d,c,f){e!==n&&i(n,(function(i,u){if(f||(f=new a),o(i))s(e,n,u,d,t,c,f);else{var h=c?c(l(e,u),i,u+"",e,n,f):void 0;void 0===h&&(h=i),r(e,u,h)}}),u)}},"+Wg/":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="pt-BR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Alternar navegação</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Painel de controle</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitores</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Serviços</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuração</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mapa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Módulos do gerenciador</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Registros</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pools</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloco</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Imagens</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Espelhamento</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemas de arquivos</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Gateway de Objetos</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Usuários</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartimentos</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Selecionar Idioma</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Carregando dados do painel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Seletor de Horário do Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Redefinir Configurações</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Voltar</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Falha ao carregar dados.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>selecionado(s)</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>encontrado(s)</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nome</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descrição</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descrição extensa</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Padrão</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Padrão do daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valores</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Salvar</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visualizador de mapa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Carregando...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nome de host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Este campo é obrigatório.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sim, desejo.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Cancelar</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Fechar</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista de Hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Desempenho Geral</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nenhuma entrada encontrada</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Registros do Cluster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Registros de Auditoria</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Carregando configuração...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Não foi possível carregar a configuração.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Editar módulo do gerenciador</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>O valor inserido não é um UUID válido. Ex.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>O valor inserido precisa ser um endereço IP válido.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>O valor inserido precisa ser um número.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>O valor inserido precisa ser um número ou decimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Atualizar</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID do Cluster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap modificado</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>época de monmap</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con obrigatório</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon obrigatório</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>No Quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Não está no Quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Adicionar</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Recursos</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flags OSD de todo o Cluster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Enviar</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avançado...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioridade de Recuperação de OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioridade</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizar valores de prioridade</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Este campo é obrigatório!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>O valor precisa ser entre 0 e 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Reponderar</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profundo } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profundo} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista de OSDs</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valor</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Editar</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Excluir</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Saúde</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Estatísticas</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clientes</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Qualquer cliente pode acessar</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Endereços</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo obrigatório</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Deve conter um ou mais valores separados por vírgula</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Por exemplo:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo de Acesso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Executar Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Adicionar clientes</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Não há clusters disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Selecionar cluster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Adicionar daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend de Armazenamento</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Não há pools de dados disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Selecionar backend de armazenamento --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Usuário do Gateway de Objetos</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Não há usuários disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Selecionar usuário do gateway de objetos --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID de Usuário do CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Não há clientes disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Selecionar cliente do cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nome do CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Rótulo de Segurança</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Habilitar rótulo de segurança</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Caminho do CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>O caminho precisa começar com \'/\' e pode ser seguido de uma palavra</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Novo diretório será criado</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Caminho</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>O caminho pode ser apenas uma \'/\' ou uma palavra</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Novo compartimento será criado</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocolo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Clientes não podem montar subdiretórios (ou seja, se Tag = foo, o cliente não poderá montar foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Ao usar opções diferentes de Tag, o mesmo Caminho pode ser exportado várias vezes.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Ao usar opções diferentes de Pseudo, o mesmo Caminho pode ser exportado várias vezes.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Não há tipos de acesso disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Selecionar tipo de acesso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Não há squashes disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>--Selecionar que tipo de squash de ID de usuário será executado --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocolo de Transporte</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Bem-vindo ao Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nome de usuário é obrigatório</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Senha é obrigatória</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Login</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>O usuário não existe no Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Proibido</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Você não tem permissão para ver o que está procurando.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuração de RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Remova o valor de configuração local. No lugar dele, o valor de configuração pai será herdado e usado.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>O valor mínimo é 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista de Pools</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>O nome pode conter apenas caracteres alfanuméricos, traços e sublinhados.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>O nome do perfil de código de eliminação escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plug-in</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Pacotes de dados (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Deve ser igual ou maior do que 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Pacotes de codificação (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Deve ser igual ou maior do que 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimador de durabilidade (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localidade (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domínio de falha do Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localidade do Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nenhum</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Técnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Tamanho do pacote</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Raiz do Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe do dispositivo do Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>qualquer</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Diretório</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nome...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>O nome do pool do Ceph escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo de pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Selecionar tipo de pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupos de posicionamento</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Pelo menos um grupo de posicionamento é necessário!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Seu cluster não pode processar tantos PGs. Recalcule a quantidade de PG necessária.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Ajuda no cálculo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Tamanho replicado</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flags</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sobregravações de EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplicativos</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Perfil do código de eliminação</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Não há perfis de código de eliminação disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Selecionar perfil do código de eliminação --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Conjunto de regras do Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Selecionar regra de crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regra de Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Etapas do Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compactação</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modo</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Não há algoritmos de compactação de eliminação disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Tamanho mínimo do blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>ex. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>O valor deve ser maior do que 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Tamanho máximo do blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>ex. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>O valor deve ser maior do que o tamanho mínimo do blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Taxa</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Taxa de compactação</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>O valor deve ser entre 0.0 e 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ex. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detalhes</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detalhes de Desempenho</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detalhes das Camadas do Cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Mover imagem para o lixo</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Vencimento da proteção em</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NÃO PROTEGIDO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato de data incorreto. Use "AAAA-MM-DD HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>A proteção já venceu. Escolha uma data no futuro ou deixe-a vazia.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Mover Imagem</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Visão geral</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinos</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticação de Descoberta</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Usuário</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Os nomes de usuário devem ter entre 8 e 64 caracteres e\n              apenas podem conter letras, \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Senha</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Usuário Mútuo</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Senha Mútua</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informações disponíveis:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinos iSCSI não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool de Dados</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Criado</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Tamanho</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objetos</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Tamanho do objeto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unidade de distribuição</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Total de distribuições</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Pai</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefixo do nome do bloco</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Ordem</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantâneos</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Imagem</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Esta configuração substitui o valor global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Este é o valor global. Nenhum valor para esta opção foi definido para esta imagem.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' e \'@\' não são permitidos.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Não há pools de RBD disponíveis --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Selecionar pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Usar pool de dados dedicado</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool de dados</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool dedicado que armazena os dados de objetos do RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Você precisa aumentar o tamanho.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avançado</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Distribuição</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unidade de distribuição</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Selecionar unidade de distribuição --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Este campo é obrigatório porque o total de distribuições foi definido!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>A unidade de distribuição é maior do que o tamanho do objeto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Total de distribuições</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Este campo é obrigatório porque a unidade de distribuição foi definida!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>O total de distribuições deve ser maior do que 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Você está prestes a fazer rollback</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Purgar Lixo</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tudo</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nome do pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurar Imagem</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Para restaurar</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>digite o novo nome da imagem e clique em</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Novo Nome</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Venceu em</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protegido até</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Não costuma ser necessário mudar o valor padrão destes parâmetros.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Configurações</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmar</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Configurações Avançadas</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN de Destino</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN tem padrão incorreto.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Por exemplo: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Mais informações</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Este destino tem configurações avançadas modificadas.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portais</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Adicionar portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Esta imagem tem configurações modificadas.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Adicionar imagem</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticação ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciadores</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciador</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN do Cliente</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>O IQN do Iniciador precisa ser exclusivo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Os nomes de usuário devem ter entre 8 e 64 caracteres e\n                        apenas podem conter letras, \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>O iniciador pertence a um grupo. As imagens serão configuradas no grupo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nenhum item adicionado.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Adicionar iniciador</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupos</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Adicionar grupo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Lixo</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemas</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizando</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Pronto</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Editar modo de espelho do pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Clusters de peer devem ser removidos antes de desabilitar o espelho.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Editar} other {Adicionar} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nome do Cluster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>O nome do cluster não é válido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID do CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID do CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>O ID do CephX não é válido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Endereços do Monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Endereços delimitados por vírgula...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>O endereço de monitoria não é válido.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Chave do CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Chave codificada com base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>A chave do CephX deve ser codificada com base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Contadores de desempenho não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista de Daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contadores de Desempenho</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Carregando dados do compartimento...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>O valor não é válido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>O nome escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Proprietário</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Selecionar usuário --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Habilitado</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo de índice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regra de posicionamento</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marcador</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marcador máximo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versão</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versão master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Horário da modificação</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Grupo de zonas</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Cota do compartimento</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Tamanho máximo</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Ilimitado</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Máximo de objetos</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nome de usuário</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Selecionar nome de usuário --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Gerar chave automaticamente</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Chave de acesso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Chave secreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nome completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Endereço de e-mail</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspenso</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Máximo de compartimentos</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subusuários</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Recursos</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Cota do usuário</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostrar</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Chaves</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Selecionar tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Permissão</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Selecionar permissão --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subusuário</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>O ID de subusuário escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>leitura, gravação</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>completo</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Chave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Gerar segredo automaticamente</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Carregando dados do usuário...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Não foi possível carregar os dados do usuário.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>O ID de usuário escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Este não é um endereço de e-mail válido.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>O endereço de e-mail escolhido já está em uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Máx. de compartimentos</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Desabilitado</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizado</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Chave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Não há subusuários.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Não há chaves.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Não há recursos.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Tamanho ilimitado</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Tamanho máx.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objetos ilimitados</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Máx. de objetos</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>O valor inserido deve ser &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descrição...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Permissões</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Funções</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmar senha</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>A confirmação de senha não corresponde à senha.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>E-mail inválido.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Você está prestes a remover as permissões de "leitura/atualização de usuário" do seu próprio usuário.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Se você continuar, não poderá mais adicionar ou remover funções de nenhum usuário.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Deseja realmente continuar?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Ajuda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentação</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Sobre</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Configurações do Painel de Controle</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gerenciamento de usuários</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Usuário que efetuou login</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Efetuar logout</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributos (mapa OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadados não disponíveis</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadados</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contador de desempenho</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Gravações</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Leituras</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histograma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valores atuais</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Mín.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Máx.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origem</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Nível</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Pode ser atualizado em tempo de execução (editável)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tags</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valores de enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Consulte também</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status do Cluster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons do Gerenciador</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Gateways de Objetos</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Servidores de Metadados</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Gateways iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS do Cliente</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Throughput do Cliente</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Leitura/Gravação do Cliente</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Throughput de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Remoção</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Desempenho</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacidade Bruta</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PGs por OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status do PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacidade</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Posições</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Atual</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticação de descoberta atualizada</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Não há portais disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Não há imagens disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Não há imagens disponíveis. Adicione uma imagem ao destino.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Não há iniciadores disponíveis. Adicione um iniciador ao destino.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destino</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes de Leitura</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes de Gravação</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Op. de Leitura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Op. de Gravação</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Desde</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instância</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Andamento</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Modo de Edição</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Adicionar Peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Editar Peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Excluir Peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>Nº Local</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>Nº Remoto</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>espelhar peer</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Chave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Nivelamento profundo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Disposição em camadas</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Bloqueio exclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa de objetos (requer bloqueio exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Registro em diário (requer bloqueio exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NÃO PROTEGIDO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback de instantâneo do RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Fazer Rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Instantâneo do RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Excluído à(s)</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>estado</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versão</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>raiz</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons de standby</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Posição</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Atividade</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Uso</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Atualizado</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>É possível atualizar o valor em temo de execução.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemons/clientes não extraem este valor do\n      banco de dados de configuração do monitor. A configuração desta opção não é permitida por meio de \'ceph config\n      set ...\'. Essa opção deve ser configurada por meio do ceph.conf ou da\n      linha de comando.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>A opção entra em vigor apenas durante a inicialização do daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>A opção afeta apenas a criação do cluster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>A opção afeta apenas a criação do daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Serviço</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valor atual</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Editável</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Habilitar</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Desabilitar</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Reconectando, aguarde...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Endereço Público</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessões Abertas</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Não Entrada</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Os OSDs que já foram marcados como saída não serão remarcados como entrada ao serem iniciados</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Não Saída</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Os OSDs não serão automaticamente marcados como saída após o intervalo configurado</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Não Ativo</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Os OSDs não podem ser iniciados</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Não Inativo</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Os relatórios de falha de OSD estão sendo ignorados, portanto, os monitores não marcarão os OSDs como inativos</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pausar</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pausa leituras e gravações</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Sem Remoção</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Remoção desabilitada</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Sem Remoção Profunda</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Remoção Profunda desabilitada</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Sem Provisionamento</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Provisionamento de PGs suspenso</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Sem Recuperação</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Recuperação de PGs suspensa</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Classificação Bit a Bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usar classificação bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdirs Purgados</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDs converteram snapsets</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Exclusões de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Exclusões realizadas durante a recuperação, e não o emparelhamento</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite Físico do Registro de PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Atribui um limite físico ao tamanho do registro de PG</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flags OSD Atualizadas</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>saída</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>entrada</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>inativo</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marcar</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdido</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marcado como perdido</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Purgar</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>purgado</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>destruir</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>destruído</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>excluir</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PGs</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes de leitura</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes de gravação</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Op. de leitura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Op. de gravação</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Máx. de Provisionamentos</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Máx. Recuperação Ativo</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Máx. Recuperação Inicialização Única</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Suspensão de Recuperação</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Tarefa</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravidade</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Iniciado</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Usado</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Disp.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Limpar</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Em funcionamento</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Aviso</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Desconhecido</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>ativo</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>sem sistemas de arquivos</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>ativo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon ativo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>O serviço NFS Ganesha não está configurado.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transporte</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Usuário do CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Sistema de Arquivos do CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(herdado da configuração global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>herdado da configuração global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Selecionar que tipo de squash de ID de usuário será executado --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Não há daemons disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modo de Cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Tempo Mín. Expulsão</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Tempo Mín. Descarregamento</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Máx. de Bytes de Destino</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Máx. de Objetos de Destino</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nenhum aplicativo adicionado</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Limite de aplicativos atingido</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Um pool apenas pode ter até quatro definições de aplicativos.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caracteres permitidos: \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Tamanho máximo de 128 caracteres</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrar ou adicionar aplicativos</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Adicionar aplicativo</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>perfil de código de eliminação</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Tamanho da Réplica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Última Alteração</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Perfil Codificado para Eliminação</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Conjunto de Regras do Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartimento</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartimentos</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>usuário</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>usuários</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Escopo</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Leitura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Criar</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Função do Sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Atualizar usuário</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuar</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Você foi automaticamente desconectado porque suas funções foram alteradas.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Cada objeto é dividido em partes de pacotes de dados, cada uma armazenada em um OSD diferente.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcule os pacotes de codificação de cada objeto e armazene-os em diferentes OSDs.\n      O número de pacotes de codificação é também o número de OSDs que podem ficar inativos sem perda de dados.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>O plug-in jerasure é o mais genérico e flexível,\n          além de ser o padrão para pools codificados para eliminação do Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>A técnica mais flexível é reed_sol_van: ela é suficiente para definir k\n          e m. A técnica cauchy_good pode ser mais rápida, mas você precisa escolher o tamanho do pacote\n          com cuidado. Todos os reed_sol_r6_op, liberation, blaum_roth e liber8tion são equivalentes ao RAID6\n          no sentido de que só podem ser configurados com m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>A codificação será feita em pacotes de tamanho de bytes um de cada vez.\n          A escolha do tamanho do pacote certo é difícil.\n          A documentação do jerasure contém informações completas sobre este tópico.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Com o plug-in jerasure, quando um objeto codificado para eliminação é armazenado em\n          vários OSDs, a recuperação após a perda de um OSD requer a leitura de todos os outros.\n          Por exemplo, se o jerasure for configurado com k=8 e m=4, a perda de um OSD exigirá a leitura\n          dos outros onze para fazer o reparo.\n\n          O plug-in de código de eliminação lrc cria pacotes locais de paridade para conseguir recuperar usando\n          menos OSDs. Por exemplo, se o lrc for configurado com k=8, m=4 e l=4, ele criará\n          um pacote de paridade adicional para cada quatro OSDs. Quando um único OSD é perdido, ele pode ser\n          recuperado apenas com quatro OSDs, em vez de onze.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Agrupe os pacotes de codificação e dados em conjuntos de localidades com tamanho. Por exemplo,\n          no caso de k=4 e m=2, quando locality=3, dois grupos de três são criados. Cada conjunto pode\n          ser recuperado sem a leitura dos pacotes do outro conjunto.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>O tipo do compartimento de crush em que cada conjunto de pacotes definido\n          por l será armazenado. Por exemplo, se isso for definido como rack, cada grupo de pacotes l será\n          colocado em um rack diferente. Isso é usado para criar uma etapa da regra CRUSH, como a etapa de escolha do\n          rack. Se isso não for definido, esse tipo de agrupamento não será feito.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>O plug-in isa encapsula a biblioteca ISA. Ele apenas é executado em processadores Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>O plug-in ISA vem em dois formatos de Reed Solomon.\n          Se reed_sol_van for definido, ele será Vandermonde, se cauchy for definido, ele será Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>O plug-in shec encapsula a biblioteca múltipla SHEC.\n          Ele permite ao ceph recuperar dados com mais eficiência do que os códigos de Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>O número de pacotes de paridade, em que cada um inclui cada pacote de dados em sua\n          faixa de cálculo. O número é usado como estimador de durabilidade. Por exemplo, se c=2,\n          2 OSDs podem ficar inativos sem perda de dados.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>O nome do compartimento de crush usado para a primeira etapa da regra CRUSH.\n      Por exemplo, a etapa assumir o padrão.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Verifique se não há dois pacotes em um compartimento com o mesmo domínio de\n      falha. Por exemplo, se o domínio de falha for um host, não armazene dois pacotes no mesmo\n      host. Isso é usado para criar uma etapa da regra CRUSH, como a etapa de escolha do host folha.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restrinja o posicionamento a dispositivos de uma classe específica\n      (ex. ssd ou hdd), usando nomes de classe de dispositivo crush no mapa CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Defina o nome do diretório do qual o plug-in de código de eliminação é carregado.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Permite todas as operações</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Permite apenas as operações que não modificam o servidor</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Não permite operações de leitura ou gravação, mas permite qualquer outra operação</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Não permite leitura, gravação ou qualquer operação que modifica os atributos do arquivo ou o conteúdo do diretório</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Não permite nenhum tipo de acesso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Selecionar prioridade --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Baixa</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informações</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Últimos 5 minutos</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Últimos 15 minutos</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Últimos 30 minutos</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Última 1 hora (Padrão)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Últimas 3 horas</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Últimas 6 horas</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Últimas 12 horas</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Últimas 24 horas</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ontem</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hoje</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Até agora hoje</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Antes de ontem</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Últimos 2 dias</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Este dia na semana passada</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Semana anterior</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Esta semana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Até agora nesta semana</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Últimos 7 dias</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Mês anterior</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Este mês</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Até agora neste mês</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Últimos 30 dias</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Últimos 90 dias</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Últimos 6 meses</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Último ano</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Ano anterior</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Este ano</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Até agora neste ano</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Últimos 2 anos</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Últimos 5 anos</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nenhum item selecionado.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Desmarcar item para selecionar novamente</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Limite de seleção atingido</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tags de filtro</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Adicionar selo</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Não há itens disponíveis.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clonar</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copiar</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Remoção Profunda</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Destruir</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Nivelar</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marcar como Inativo</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marcar como Entrada</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marcar como Perdido</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marcar como Saída</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renomear</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurar</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Mover para Lixo</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Cancelar proteção</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Excluído</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonado</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiado</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Nivelado</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Purgado</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restaurado</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback feito</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sim</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Não</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualidade do Serviço</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite de BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>O limite de bytes por segundo de E/S desejado.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite de IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>O limite de operações por segundo de E/S desejado.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite de BPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>O limite de bytes por segundo de leitura desejado.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite de IOPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>O limite de operações por segundo de leitura desejado.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite de BPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>O limite de bytes por segundo de gravação desejado.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite de IOPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>O limite de operações por segundo de gravação desejado.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Intermitência de BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>O limite de bytes de E/S de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Intermitência de IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>O limite de operações de E/S de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Intermitência de BPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>O limite de bytes de leitura de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Intermitência de IOPS de Leitura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>O limite de operações de leitura de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Intermitência de BPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>O limite de bytes de gravação de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Intermitência de IOPS de Gravação</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>O limite de operações de gravação de intermitência desejado.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Executando</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>executar</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Executado</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tarefa desconhecida</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Criando</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>criar</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Atualizando</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>atualizar</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Excluindo</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonando</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clonar</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copiando</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copiar</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Nivelando</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>nivelar</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Fazendo rollback</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Movendo</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>mover</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Movido</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Imagem não encontrada.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Restaurando</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurar</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Purgando</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>purgar</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>todos os pools</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossível desabilitar espelhamento porque ele contém um peer.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"+c4W":function(t,e,n){var a=n("711d"),r=n("4/ic"),i=n("9ggG"),s=n("9Nap");t.exports=function(t){return i(t)?a(s(t)):r(t)}},"+fVR":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{setExpandedRow(t){this.expandedRow=t}}},"+gVj":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return f})),n.d(e,"d",(function(){return i})),n.d(e,"e",(function(){return l})),n.d(e,"f",(function(){return g})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return h}));var a=n("8Y7J"),r=n("s7LF");class i{constructor(){this.validSubmit=new a.EventEmitter}onSubmit(){this.markAsTouchedAndDirty(this.formGroup),this.formGroup.valid&&this.validSubmit.emit(this.formGroup.value)}markAsTouchedAndDirty(t){t instanceof r.k?Object.keys(t.controls).forEach(e=>this.markAsTouchedAndDirty(t.controls[e])):t instanceof r.f?t.controls.forEach(t=>this.markAsTouchedAndDirty(t)):t instanceof r.i&&t.enabled&&(t.markAsDirty(),t.markAsTouched(),t.updateValueAndValidity())}}const s=function(){var t={Three:0,Four:1};return t[t.Three]="Three",t[t.Four]="Four",t}(),o=new a.InjectionToken("ng-bootstrap-form-validation custom error messages"),u=new a.InjectionToken("ng-bootstrap-form-validation module options");class l{constructor(t){this.bootstrapVersion=t,this.messages=()=>[]}get className(){switch(this.bootstrapVersion){case s.Three:return"help-block";case s.Four:return"invalid-feedback"}}}const d=[{error:"required",format:t=>`${t} is required`},{error:"pattern",format:t=>`${t} is invalid`},{error:"minlength",format:(t,e)=>`${t} must be at least ${e.requiredLength} characters`},{error:"maxlength",format:(t,e)=>`${t} must be no longer than ${e.requiredLength} characters`},{error:"requiredTrue",format:(t,e)=>`${t} is required`},{error:"email",format:(t,e)=>"Invalid email address"},{error:"max",format:(t,e)=>`${t} must be no greater than ${e.max}`},{error:"min",format:(t,e)=>`${t} must be no less than ${e.min}`}];let c=(()=>{class t{constructor(t){this.customErrorMessages=t,this.defaultErrors=d,this.errorMessages=t.reduce((t,e)=>t.concat(e),this.defaultErrors)}}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(o))},token:t,providedIn:"root"}),t})();class f{constructor(t,e){this.elRef=t,this.errorMessageService=e,this.customErrorMessages=[],this.validationDisabled=!1,this.messages=()=>this.getMessages()}get hasErrors(){return this.FormControlNames.some(t=>!t.valid&&t.dirty&&t.touched)&&!this.validationDisabled}get hasSuccess(){return!this.FormControlNames.some(t=>!t.valid)&&this.FormControlNames.some(t=>t.dirty&&t.touched)&&!this.validationDisabled}ngAfterContentInit(){this.messagesBlock&&(this.messagesBlock.messages=this.messages)}ngOnInit(){this.errorMessages=this.errorMessageService.errorMessages.concat(this.customErrorMessages).reverse()}get label(){const t=this.elRef.nativeElement.querySelector("label");return t&&t.textContent?t.textContent.trim():"This field"}get isDirtyAndTouched(){return this.FormControlNames.some(t=>t.dirty&&t.touched)}getMessages(){const t=[];if(!this.isDirtyAndTouched||this.validationDisabled)return t;const e=this.FormControlNames.map(t=>t.name);return this.FormControlNames.filter((t,n)=>!t.valid&&!!t.errors&&e.indexOf(t.name)===n).forEach(e=>{Object.keys(e.errors).forEach(n=>{const a=this.errorMessages.find(t=>t.error===n);a&&t.push(a.format(this.label,e.errors[n]))})}),t}}class h{constructor(t,e){this.parent=t,this.bootstrapVersion=e}get validClass(){return!!this.control&&this.bootstrapFour&&this.control.valid&&(this.control.touched||this.control.dirty)}get invalidClass(){return!!this.control&&this.bootstrapFour&&this.control.invalid&&this.control.touched&&this.control.dirty}get path(){return[...this.parent.path,this.formControlName]}get control(){return this.formDirective&&this.formDirective.getControl(this)}get formDirective(){return this.parent?this.parent.formDirective:null}get bootstrapFour(){return this.bootstrapVersion===s.Four}}class g{static forRoot(t={bootstrapVersion:s.Four}){return{ngModule:g,providers:[{provide:o,useValue:t.customErrorMessages||[],multi:!0},{provide:u,useValue:t.bootstrapVersion},c]}}}},"+iFO":function(t,e,n){var a=n("dTAl"),r=n("LcsW"),i=n("6sVZ");t.exports=function(t){return"function"!=typeof t.constructor||i(t)?{}:a(r(t))}},"+s0g":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),a=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"//9w":function(t,e,n){!function(t){"use strict";t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"/9aa":function(t,e,n){var a=n("NykK"),r=n("ExA7");t.exports=function(t){return"symbol"==typeof t||r(t)&&"[object Symbol]"==a(t)}},"/GqU":function(t,e,n){var a=n("RK3t"),r=n("HYAF");t.exports=function(t){return a(r(t))}},"/NlG":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("8Y7J"),r=n("oxzT");class i{constructor(t){this.i18n=t,this.title="",this.bootstrapClass="",this.backAction=new a.EventEmitter,this.size="normal",this.showIcon=!0,this.showTitle=!0,this.icons=r.a}ngOnInit(){switch(this.type){case"warning":this.title=this.title||this.i18n("Warning"),this.typeIcon=this.typeIcon||r.a.warning,this.bootstrapClass=this.bootstrapClass||"warning";break;case"error":this.title=this.title||this.i18n("Error"),this.typeIcon=this.typeIcon||r.a.destroyCircle,this.bootstrapClass=this.bootstrapClass||"danger";break;case"info":this.title=this.title||this.i18n("Information"),this.typeIcon=this.typeIcon||r.a.infoCircle,this.bootstrapClass=this.bootstrapClass||"info";break;case"success":this.title=this.title||this.i18n("Success"),this.typeIcon=this.typeIcon||r.a.check,this.bootstrapClass=this.bootstrapClass||"success"}}}},"/X5v":function(t,e,n){!function(t){"use strict";t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},"/b8u":function(t,e,n){var a=n("STAE");t.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},"/byt":function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},0:function(t,e,n){t.exports=n("zUnb")},"0+/T":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("s7LF"),r=n("QFaf");n("sb0X");class i{constructor(t){this.modalRef=t,this.actionDescription="delete"}ngOnInit(){const t={confirmation:new a.i(!1,[a.B.requiredTrue])};if(this.childFormGroup&&(t.child=this.childFormGroup),this.deletionForm=new r.a(t),!this.submitAction&&!this.submitActionObservable)throw new Error("No submit action defined")}callSubmitAction(){this.submitActionObservable?this.submitActionObservable().subscribe(null,this.stopLoadingSpinner.bind(this),this.hideModal.bind(this)):this.submitAction()}hideModal(){this.modalRef.hide()}stopLoadingSpinner(){this.deletionForm.setErrors({cdSubmitButton:!0})}}},"03A+":function(t,e,n){var a=n("JTzB"),r=n("ExA7"),i=Object.prototype,s=i.hasOwnProperty,o=i.propertyIsEnumerable,u=a(function(){return arguments}())?a:function(t){return r(t)&&s.call(t,"callee")&&!o.call(t,"callee")};t.exports=u},"07d7":function(t,e,n){var a=n("AO7/"),r=n("busE"),i=n("sEFX");a||r(Object.prototype,"toString",i,{unsafe:!0})},"0BK2":function(t,e){t.exports={}},"0Cz8":function(t,e,n){var a=n("Xi7e"),r=n("ebwN"),i=n("e4Nc");t.exports=function(t,e){var n=this.__data__;if(n instanceof a){var s=n.__data__;if(!r||s.length<199)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(t,e),this.size=n.size,this}},"0Dky":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"0EUg":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("bHdf");function r(){return Object(a.a)(1)}},"0GbY":function(t,e,n){var a=n("Qo9l"),r=n("2oRo"),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?i(a[t])||i(r[t]):a[t]&&a[t][e]||r[t]&&r[t][e]}},"0eef":function(t,e,n){"use strict";var a={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!a.call({1:2},1);e.f=i?function(t){var e=r(this,t);return!!e&&e.enumerable}:a},"0mo+":function(t,e,n){!function(t){"use strict";var e={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};t.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(t){return t.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(t,e){return 12===t&&(t=0),"མཚན་མོ"===e&&t>=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n("wd/R"))},"0rvr":function(t,e,n){var a=n("glrk"),r=n("O741");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(i){}return function(n,i){return a(n),r(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},"0tRk":function(t,e,n){!function(t){"use strict";t.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n("wd/R"))},"0ycA":function(t,e){t.exports=function(){return[]}},"1+5i":function(t,e,n){var a=n("w/wX"),r=n("sEf8"),i=n("mdPL"),s=i&&i.isSet,o=s?r(s):a;t.exports=o},"128B":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("Kqap"),r=n("BFxc"),i=n("xbPD"),s=n("mCNh");function o(t,e){return arguments.length>=2?function(n){return Object(s.a)(Object(a.a)(t,e),Object(r.a)(1),Object(i.a)(e))(n)}:function(e){return Object(s.a)(Object(a.a)((e,n,a)=>t(e,n,a+1)),Object(r.a)(1))(e)}}},"14R3":function(t,e){"undefined"!=typeof Element&&("function"!=typeof Element.prototype.matches&&(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.webkitMatchesSelector||function(t){for(var e=(this.document||this.ownerDocument).querySelectorAll(t),n=0;e[n]&&e[n]!==this;)++n;return Boolean(e[n])}),"function"!=typeof Element.prototype.closest&&(Element.prototype.closest=function(t){for(var e=this;e&&1===e.nodeType;){if(e.matches(t))return e;e=e.parentNode}return null}))},"14Sl":function(t,e,n){"use strict";n("rB9j");var a=n("busE"),r=n("0Dky"),i=n("tiKp"),s=n("kmMV"),o=n("kRJp"),u=i("species"),l=!r((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),d="$0"==="a".replace(/./,"$0"),c=i("replace"),f=!!/./[c]&&""===/./[c]("a","$0"),h=!r((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));t.exports=function(t,e,n,c){var g=i(t),p=!r((function(){var e={};return e[g]=function(){return 7},7!=""[t](e)})),b=p&&!r((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[u]=function(){return n},n.flags="",n[g]=/./[g]),n.exec=function(){return e=!0,null},n[g](""),!e}));if(!p||!b||"replace"===t&&(!l||!d||f)||"split"===t&&!h){var m=/./[g],y=n(g,""[t],(function(t,e,n,a,r){return e.exec===s?p&&!r?{done:!0,value:m.call(e,n,a)}:{done:!0,value:t.call(n,e,a)}:{done:!1}}),{REPLACE_KEEPS_$0:d,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:f}),v=y[1];a(String.prototype,t,y[0]),a(RegExp.prototype,g,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}c&&o(RegExp.prototype[g],"sham",!0)}},"1E5z":function(t,e,n){var a=n("m/L8").f,r=n("UTVS"),i=n("tiKp")("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},"1Ni5":function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("LRne"),s=n("PqYM"),o=n("eIep");function u(t,e){return e?Object(o.a)(()=>t,e):Object(o.a)(()=>t)}var l=n("lJxs"),d=n("IzEk"),c=n("Fgil"),f=n("aXbf");function h(t){return null==t||0===t.length}n.d(e,"b",(function(){return h})),n.d(e,"a",(function(){return g}));class g{static email(t){return h(t.value)?null:a.B.email(t)}static ip(t=0){const e=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,n=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;return a.B.pattern(4===t?e:6===t?n:new RegExp(e.source+"|"+n.source))}static number(t=!0){return a.B.pattern(t?/^-?[0-9]+$/i:/^[0-9]+$/i)}static decimalNumber(t=!0){return a.B.pattern(t?/^-?[0-9]+(.[0-9]+)?$/i:/^[0-9]+(.[0-9]+)?$/i)}static requiredIf(t,e){let n=!1;return a=>(!n&&a.parent&&(Object.keys(t).forEach(t=>{a.parent.get(t).valueChanges.subscribe(()=>{a.updateValueAndValidity({emitEvent:!1})})}),n=!0),Object.keys(t).every(e=>a.parent&&a.parent.get(e).value===t[e])&&(r.isFunction(e)?e.call(e,a.value):h(a.value))?{required:!0}:null)}static composeIf(t,e){let n=!1;return r=>(!n&&r.parent&&(Object.keys(t).forEach(t=>{r.parent.get(t).valueChanges.subscribe(()=>{r.updateValueAndValidity({emitEvent:!1})})}),n=!0),Object.keys(t).every(e=>r.parent&&r.parent.get(e).value===t[e])?a.B.compose(e)(r):null)}static custom(t,e){return n=>{const a=e.call(this,n.value);return a?{[t]:a}:null}}static validateIf(t,e,n,r=[],i=[]){n=n.concat(r),t.setValidators(t=>e.call(this)?a.B.compose(n)(t):r.length>0?a.B.compose(r)(t):null),i.forEach(e=>{e.valueChanges.subscribe(()=>{t.updateValueAndValidity({emitEvent:!1})})})}static match(t,e){return n=>{const a=n.get(t),i=n.get(e);if(!a||!i)return null;if(a.value!==i.value)i.setErrors({match:!0});else if(i.hasError("match")){const t=i.errors;r.unset(t,"match"),i.setErrors(r.isEmpty(r.keys(t))?null:t)}return null}}static unique(t,e=null,n=500){return a=>a.pristine||h(a.value)?Object(i.a)(null):Object(s.a)(n).pipe(u(t.call(e,a.value)),Object(l.a)(t=>t?{notUnique:!0}:null),Object(d.a)(1))}static uuid(t=!1){const e=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return n=>n.pristine&&n.untouched?null:t||n.value?e.test(n.value)?null:{invalidUuid:"This is not a valid UUID"}:null}static binaryMin(t){return e=>{const n=new f.a,a=(new f.a).toBytes(e.value);if(t<=a)return null;const r=new c.a(n).transform(t);return{binaryMin:t=>t("Size has to be at least {{value}} or more",{value:r})}}}static binaryMax(t){return e=>{const n=new f.a,a=n.toBytes(e.value);if(t>=a)return null;const r=new c.a(n).transform(t);return{binaryMax:t=>t("Size has to be at most {{value}} or less",{value:r})}}}static passwordPolicy(t,e,n){return a=>{if(a.pristine||""===a.value)return r.isFunction(n)&&n(!0,0),Object(i.a)(null);let o;return r.isFunction(e)&&(o=e()),Object(s.a)(500).pipe(u(r.invoke(t,"validatePassword",a.value,o)),Object(l.a)(t=>(r.isFunction(n)&&n(t.valid,t.credits,t.valuation),t.valid?null:{passwordPolicy:!0})),Object(d.a)(1))}}}},"1Y/n":function(t,e,n){var a=n("HAuM"),r=n("ewvW"),i=n("RK3t"),s=n("UMSQ"),o=function(t){return function(e,n,o,u){a(n);var l=r(e),d=i(l),c=s(l.length),f=t?c-1:0,h=t?-1:1;if(o<2)for(;;){if(f in d){u=d[f],f+=h;break}if(f+=h,t?f<0:c<=f)throw TypeError("Reduce of empty array with no initial value")}for(;t?f>=0:c>f;f+=h)f in d&&(u=n(u,d[f],f,l));return u}};t.exports={left:o(!1),right:o(!0)}},"1hJj":function(t,e,n){var a=n("e4Nc"),r=n("ftKO"),i=n("3A9y");function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new a;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=r,s.prototype.has=i,t.exports=s},"1nQr":function(t,e,n){"use strict";var a=n("LvDl"),r=n("lJxs"),i=n("20UP");class s{constructor(t){this.pwdPolicyEnabled=t.pwd_policy_enabled,this.pwdPolicyMinLength=t.pwd_policy_min_length,this.pwdPolicyCheckLengthEnabled=t.pwd_policy_check_length_enabled,this.pwdPolicyCheckOldpwdEnabled=t.pwd_policy_check_oldpwd_enabled,this.pwdPolicyCheckUsernameEnabled=t.pwd_policy_check_username_enabled,this.pwdPolicyCheckExclusionListEnabled=t.pwd_policy_check_exclusion_list_enabled,this.pwdPolicyCheckRepetitiveCharsEnabled=t.pwd_policy_check_repetitive_chars_enabled,this.pwdPolicyCheckSequentialCharsEnabled=t.pwd_policy_check_sequential_chars_enabled,this.pwdPolicyCheckComplexityEnabled=t.pwd_policy_check_complexity_enabled}}var o=n("8Y7J"),u=n("GiVz");n.d(e,"a",(function(){return l}));let l=(()=>{class t{constructor(t,e){this.i18n=t,this.settingsService=e}getHelpText(){return this.settingsService.getStandardSettings().pipe(Object(r.a)(t=>{const e=new s(t);let n=[];if(e.pwdPolicyEnabled){n.push(this.i18n("Required rules for passwords:"));const t={pwdPolicyCheckLengthEnabled:this.i18n("Must contain at least {{length}} characters",{length:e.pwdPolicyMinLength}),pwdPolicyCheckOldpwdEnabled:this.i18n("Must not be the same as the previous one"),pwdPolicyCheckUsernameEnabled:this.i18n("Cannot contain the username"),pwdPolicyCheckExclusionListEnabled:this.i18n("Cannot contain any configured keyword"),pwdPolicyCheckRepetitiveCharsEnabled:this.i18n('Cannot contain any repetitive characters e.g. "aaa"'),pwdPolicyCheckSequentialCharsEnabled:this.i18n('Cannot contain any sequential characters e.g. "abc"'),pwdPolicyCheckComplexityEnabled:this.i18n("Must consist of characters from the following groups:\n  * Alphabetic a-z, A-Z\n  * Numbers 0-9\n  * Special chars: !\"#$%& '()*+,-./:;<=>?@[\\]^_`{{|}}~\n  * Any other characters (signs)")};n=n.concat(a.keys(t).filter(t=>a.get(e,t)).map(e=>"- "+a.get(t,e)))}return n.join("\n")}))}mapCreditsToCssClass(t){let e="very-strong";return t<10?e="too-weak":t<15?e="weak":t<20?e="ok":t<25&&(e="strong"),e}}return t.ngInjectableDef=o["ɵɵdefineInjectable"]({factory:function(){return new t(o["ɵɵinject"](u.a),o["ɵɵinject"](i.a))},token:t,providedIn:"root"}),t})()},"1rYy":function(t,e,n){!function(t){"use strict";t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},"1xZ4":function(t,e,n){!function(t){"use strict";t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n("wd/R"))},"20UP":function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("LvDl"),r=n("lJxs"),i=n("8Y7J"),s=n("IheW"),o=n("pL04");let u=(()=>{class t{constructor(t){this.http=t,this.settings={}}getValues(t){return a.isArray(t)&&(t=t.join(",")),this.http.get(`api/settings?names=${t}`).pipe(Object(r.a)(t=>{const e={};return a.forEach(t,t=>{a.set(e,t.name,t.value)}),e}))}ifSettingConfigured(t,e,n){const a=this.settings[t];void 0===a?this.http.get(t).subscribe(a=>{this.settings[t]=this.getSettingsValue(a),this.ifSettingConfigured(t,e,n)},e=>{401!==e.status&&(this.settings[t]="")}):""!==a?e(a):n&&n()}disableSetting(t){this.settings[t]=""}getSettingsValue(t){return t.value||t.instance||""}validateGrafanaDashboardUrl(t){return this.http.get(`api/grafana/validation/${t}`)}getStandardSettings(){return this.http.get("ui-api/standard_settings")}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.c))},token:t,providedIn:o.a}),t})()},"25BL":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("DqMs"),i=n("/NlG"),s=n("GiVz"),o=n("SVse"),u=n("FE24"),l=n("z/SZ"),d=n("GS7A"),c=n("s7LF"),f=n("w9WL"),h=a["ɵcrt"]({encapsulation:2,styles:[".ngx-datatable{display:block;overflow:hidden;justify-content:center;position:relative;-webkit-transform:translate3d(0,0,0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{overflow-x:auto;-webkit-overflow-scrolling:touch}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{display:flex;flex-direction:row;-o-flex-flow:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{overflow-x:hidden;vertical-align:top;display:inline-block;line-height:1.625}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:0}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{align-items:stretch;-webkit-align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{position:relative;display:inline-block}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{line-height:100%;vertical-align:middle;display:inline-block;cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{display:inline-block;position:absolute;right:0;top:0;bottom:0;width:5px;padding:0 4px;visibility:hidden}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{position:absolute;top:0;bottom:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{position:relative;z-index:10;display:block}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:0}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;width:100%;overflow:auto}.ngx-datatable .datatable-footer .datatable-footer-inner{display:flex;align-items:center;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{padding:0;margin:0;display:inline-block;list-style:none}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:0}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],data:{}});function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"datatable-header",[["class","datatable-header"]],[[4,"height",null],[4,"width",null]],[[null,"sort"],[null,"resize"],[null,"reorder"],[null,"select"],[null,"columnContextmenu"]],(function(t,e,n){var a=!0,r=t.component;return"sort"===e&&(a=!1!==r.onColumnSort(n)&&a),"resize"===e&&(a=!1!==r.onColumnResize(n)&&a),"reorder"===e&&(a=!1!==r.onColumnReorder(n)&&a),"select"===e&&(a=!1!==r.onHeaderSelect(n)&&a),"columnContextmenu"===e&&(a=!1!==r.onColumnContextmenu(n)&&a),a}),x,m)),a["ɵdid"](1,180224,[[2,4]],0,f.i,[a.ChangeDetectorRef],{sortAscendingIcon:[0,"sortAscendingIcon"],sortDescendingIcon:[1,"sortDescendingIcon"],scrollbarH:[2,"scrollbarH"],dealsWithGroup:[3,"dealsWithGroup"],targetMarkerTemplate:[4,"targetMarkerTemplate"],innerWidth:[5,"innerWidth"],sorts:[6,"sorts"],sortType:[7,"sortType"],allRowsSelected:[8,"allRowsSelected"],selectionType:[9,"selectionType"],reorderable:[10,"reorderable"],headerHeight:[11,"headerHeight"],columns:[12,"columns"],offsetX:[13,"offsetX"]},{sort:"sort",reorder:"reorder",resize:"resize",select:"select",columnContextmenu:"columnContextmenu"}),a["ɵpid"](131072,o.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,1,[n.cssClasses.sortAscending,n.cssClasses.sortDescending,n.scrollbarH,void 0!==n.groupedRows,n.targetMarkerTemplate,n._innerWidth,n.sorts,n.sortType,n.allRowsSelected,n.selectionType,n.reorderable,n.headerHeight,n._internalColumns,a["ɵunv"](e,1,13,a["ɵnov"](e,2).transform(n._offsetX))])}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).headerHeight,a["ɵnov"](e,1).headerWidth)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-footer",[["class","datatable-footer"]],null,[[null,"page"]],(function(t,e,n){var a=!0;return"page"===e&&(a=!1!==t.component.onFooterPage(n)&&a),a}),Nt,_t)),a["ɵdid"](1,49152,null,0,f.f,[],{footerHeight:[0,"footerHeight"],rowCount:[1,"rowCount"],pageSize:[2,"pageSize"],offset:[3,"offset"],pagerLeftArrowIcon:[4,"pagerLeftArrowIcon"],pagerRightArrowIcon:[5,"pagerRightArrowIcon"],pagerPreviousIcon:[6,"pagerPreviousIcon"],pagerNextIcon:[7,"pagerNextIcon"],totalMessage:[8,"totalMessage"],footerTemplate:[9,"footerTemplate"],selectedCount:[10,"selectedCount"],selectedMessage:[11,"selectedMessage"]},{page:"page"})],(function(t,e){var n=e.component;t(e,1,1,[n.footerHeight,n.rowCount,n.pageSize,n.offset,n.cssClasses.pagerLeftArrow,n.cssClasses.pagerRightArrow,n.cssClasses.pagerPrevious,n.cssClasses.pagerNext,n.messages.totalMessage,n.footer,n.selected.length,!!n.selectionType&&n.messages.selectedMessage])}),null)}function b(t){return a["ɵvid"](2,[a["ɵqud"](671088640,1,{bodyComponent:0}),a["ɵqud"](671088640,2,{headerComponent:0}),(t()(),a["ɵeld"](2,0,null,null,8,"div",[["visibilityObserver",""]],[[2,"visible",null]],[[null,"visible"]],(function(t,e,n){var a=!0;return"visible"===e&&(a=!1!==t.component.recalculate()&&a),a}),null,null)),a["ɵdid"](3,212992,null,0,f.B,[a.ElementRef,a.NgZone],null,{visible:"visible"}),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](6,0,null,null,2,"datatable-body",[["class","datatable-body"]],[[4,"width",null],[4,"height",null]],[[null,"page"],[null,"activate"],[null,"rowContextmenu"],[null,"select"],[null,"scroll"],[null,"treeAction"]],(function(t,e,n){var a=!0,r=t.component;return"page"===e&&(a=!1!==r.onBodyPage(n)&&a),"activate"===e&&(a=!1!==r.activate.emit(n)&&a),"rowContextmenu"===e&&(a=!1!==r.onRowContextmenu(n)&&a),"select"===e&&(a=!1!==r.onBodySelect(n)&&a),"scroll"===e&&(a=!1!==r.onBodyScroll(n)&&a),"treeAction"===e&&(a=!1!==r.onTreeAction(n)&&a),a}),F,R)),a["ɵdid"](7,245760,[[1,4]],0,f.c,[a.ChangeDetectorRef],{scrollbarV:[0,"scrollbarV"],scrollbarH:[1,"scrollbarH"],loadingIndicator:[2,"loadingIndicator"],externalPaging:[3,"externalPaging"],rowHeight:[4,"rowHeight"],offsetX:[5,"offsetX"],emptyMessage:[6,"emptyMessage"],selectionType:[7,"selectionType"],selected:[8,"selected"],rowIdentity:[9,"rowIdentity"],rowDetail:[10,"rowDetail"],groupHeader:[11,"groupHeader"],selectCheck:[12,"selectCheck"],displayCheck:[13,"displayCheck"],trackByProp:[14,"trackByProp"],rowClass:[15,"rowClass"],groupedRows:[16,"groupedRows"],groupExpansionDefault:[17,"groupExpansionDefault"],innerWidth:[18,"innerWidth"],groupRowsBy:[19,"groupRowsBy"],virtualization:[20,"virtualization"],summaryRow:[21,"summaryRow"],summaryPosition:[22,"summaryPosition"],summaryHeight:[23,"summaryHeight"],pageSize:[24,"pageSize"],rows:[25,"rows"],columns:[26,"columns"],offset:[27,"offset"],rowCount:[28,"rowCount"],bodyHeight:[29,"bodyHeight"]},{scroll:"scroll",page:"page",activate:"activate",select:"select",rowContextmenu:"rowContextmenu",treeAction:"treeAction"}),a["ɵpid"](131072,o.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](10,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0),t(e,5,0,n.headerHeight),t(e,7,1,[n.scrollbarV,n.scrollbarH,n.loadingIndicator,n.externalPaging,n.rowHeight,a["ɵunv"](e,7,5,a["ɵnov"](e,8).transform(n._offsetX)),n.messages.emptyMessage,n.selectionType,n.selected,n.rowIdentity,n.rowDetail,n.groupHeader,n.selectCheck,n.displayCheck,n.trackByProp,n.rowClass,n.groupedRows,n.groupExpansionDefault,n._innerWidth,n.groupRowsBy,n.virtualization,n.summaryRow,n.summaryPosition,n.summaryHeight,n.pageSize,n._internalRows,n._internalColumns,n.offset,n.rowCount,n.bodyHeight]),t(e,10,0,n.footerHeight)}),(function(t,e){t(e,2,0,a["ɵnov"](e,3).isVisible),t(e,6,0,a["ɵnov"](e,7).bodyWidth,a["ɵnov"](e,7).bodyHeight)}))}var m=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"datatable-header-cell",[["class","datatable-header-cell"],["draggable",""],["long-press",""],["resizeable",""]],[[2,"resizeable",null],[2,"press",null],[2,"longpress",null],[4,"height","px"],[8,"className",0],[1,"title",0],[4,"minWidth","px"],[4,"maxWidth","px"],[4,"width","px"]],[[null,"resize"],[null,"longPressStart"],[null,"longPressEnd"],[null,"sort"],[null,"select"],[null,"columnContextmenu"],[null,"mousedown"],[null,"contextmenu"]],(function(t,e,n){var r=!0,i=t.component;return"mousedown"===e&&(r=!1!==a["ɵnov"](t,2).onMousedown(n)&&r),"mousedown"===e&&(r=!1!==a["ɵnov"](t,3).onMouseDown(n)&&r),"contextmenu"===e&&(r=!1!==a["ɵnov"](t,4).onContextmenu(n)&&r),"resize"===e&&(r=!1!==i.onColumnResized(n,t.context.$implicit)&&r),"longPressStart"===e&&(r=!1!==i.onLongPressStart(n)&&r),"longPressEnd"===e&&(r=!1!==i.onLongPressEnd(n)&&r),"sort"===e&&(r=!1!==i.onSort(n)&&r),"select"===e&&(r=!1!==i.select.emit(n)&&r),"columnContextmenu"===e&&(r=!1!==i.columnContextmenu.emit(n)&&r),r}),C,_)),a["ɵdid"](1,671744,[[1,4]],0,f.s,[a.ElementRef],{dragEventTarget:[0,"dragEventTarget"],dragModel:[1,"dragModel"],dragX:[2,"dragX"],dragY:[3,"dragY"]},null),a["ɵdid"](2,4341760,null,0,f.x,[a.ElementRef,a.Renderer2],{resizeEnabled:[0,"resizeEnabled"]},{resize:"resize"}),a["ɵdid"](3,147456,null,0,f.t,[],{pressEnabled:[0,"pressEnabled"],pressModel:[1,"pressModel"]},{longPressStart:"longPressStart",longPressEnd:"longPressEnd"}),a["ɵdid"](4,49152,null,0,f.h,[a.ChangeDetectorRef],{sortType:[0,"sortType"],sortAscendingIcon:[1,"sortAscendingIcon"],sortDescendingIcon:[2,"sortDescendingIcon"],isTarget:[3,"isTarget"],targetMarkerTemplate:[4,"targetMarkerTemplate"],targetMarkerContext:[5,"targetMarkerContext"],allRowsSelected:[6,"allRowsSelected"],selectionType:[7,"selectionType"],column:[8,"column"],headerHeight:[9,"headerHeight"],sorts:[10,"sorts"]},{sort:"sort",select:"select",columnContextmenu:"columnContextmenu"})],(function(t,e){var n=e.component;t(e,1,0,n.dragEventTarget,e.context.$implicit,n.reorderable&&e.context.$implicit.draggable&&e.context.$implicit.dragging,!1),t(e,2,0,e.context.$implicit.resizeable),t(e,3,0,n.reorderable&&e.context.$implicit.draggable,e.context.$implicit),t(e,4,1,[n.sortType,n.sortAscendingIcon,n.sortDescendingIcon,e.context.$implicit.isTarget,n.targetMarkerTemplate,e.context.$implicit.targetMarkerContext,n.allRowsSelected,n.selectionType,e.context.$implicit,n.headerHeight,n.sorts])}),(function(t,e){t(e,0,0,a["ɵnov"](e,2).resizeEnabled,a["ɵnov"](e,3).press,a["ɵnov"](e,3).isLongPress,a["ɵnov"](e,4).headerHeight,a["ɵnov"](e,4).columnCssClasses,a["ɵnov"](e,4).name,a["ɵnov"](e,4).minWidth,a["ɵnov"](e,4).maxWidth,a["ɵnov"](e,4).width)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[8,"className",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,2,0,n._styleByGroup[e.context.$implicit.type]),t(e,4,0,e.context.$implicit.columns,n.columnTrackingFn)}),(function(t,e){t(e,0,0,"datatable-row-"+e.context.$implicit.type)}))}function x(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","datatable-header-inner"],["orderable",""]],[[4,"width","px"]],[[null,"reorder"],[null,"targetChanged"]],(function(t,e,n){var a=!0,r=t.component;return"reorder"===e&&(a=!1!==r.onColumnReordered(n)&&a),"targetChanged"===e&&(a=!1!==r.onTargetChanged(n)&&a),a}),null,null)),a["ɵdid"](1,1196032,null,1,f.v,[a.KeyValueDiffers,o.DOCUMENT],null,{reorder:"reorder",targetChanged:"targetChanged"}),a["ɵqud"](603979776,1,{draggables:1}),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,4,0,n._columnsByPin,n.trackByGroups)}),(function(t,e){t(e,0,0,e.component._columnGroupWidths.total)}))}var _=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function T(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.targetMarkerContext,n.targetMarkerTemplate)}),null)}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"label",[["class","datatable-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],[[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==r.select.emit(!r.allRowsSelected)&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.allRowsSelected)}))}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","datatable-header-cell-wrapper"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"span",[["class","datatable-header-cell-label draggable"]],[[8,"innerHTML",1]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onSort()&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.name)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function N(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.cellContext,n.column.headerTemplate)}),null)}function C(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","datatable-header-cell-template-wrap"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,O)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,S)),a["ɵdid"](6,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,N)),a["ɵdid"](8,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](9,0,null,null,0,"span",[],[[8,"className",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onSort()&&a),a}),null,null))],(function(t,e){var n=e.component;t(e,2,0,n.isTarget),t(e,4,0,n.isCheckboxable),t(e,6,0,!n.column.headerTemplate),t(e,8,0,n.column.headerTemplate)}),(function(t,e){t(e,9,0,e.component.sortClass)}))}var R=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-progress",[],null,null,null,rt,at)),a["ɵdid"](1,49152,null,0,f.w,[],null,null)],null,null)}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-summary-row",[["class","datatable-summary-row"]],null,null,null,xt,yt)),a["ɵdid"](1,573440,null,0,f.m,[],{rows:[0,"rows"],columns:[1,"columns"],rowHeight:[2,"rowHeight"],offsetX:[3,"offsetX"],innerWidth:[4,"innerWidth"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.rows,n.columns,n.summaryHeight,n.offsetX,n.innerWidth)}),null)}function E(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"treeAction"],[null,"activate"],[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0,i=t.component;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),"treeAction"===e&&(r=!1!==i.onTreeAction(t.parent.context.$implicit)&&r),"activate"===e&&(r=!1!==a["ɵnov"](t.parent.parent.parent,2).onActivate(n,i.indexes.first+t.parent.context.index)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],expanded:[2,"expanded"],rowClass:[3,"rowClass"],row:[4,"row"],isSelected:[5,"isSelected"],rowIndex:[6,"rowIndex"],displayCheck:[7,"displayCheck"],treeStatus:[8,"treeStatus"],offsetX:[9,"offsetX"],rowHeight:[10,"rowHeight"]},{activate:"activate",treeAction:"treeAction"})],(function(t,e){var n=e.component;t(e,1,1,[n.columns,n.innerWidth,n.getRowExpanded(e.parent.context.$implicit),n.rowClass,e.parent.context.$implicit,a["ɵnov"](e.parent.parent.parent,2).getRowSelected(e.parent.context.$implicit),n.getRowIndex(e.parent.context.$implicit),n.displayCheck,e.parent.context.$implicit.treeStatus,n.offsetX,n.getRowHeight(e.parent.context.$implicit)])}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function L(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"activate"],[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),"activate"===e&&(r=!1!==a["ɵnov"](t.parent.parent.parent.parent,2).onActivate(n,t.context.index)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],expanded:[2,"expanded"],rowClass:[3,"rowClass"],row:[4,"row"],group:[5,"group"],isSelected:[6,"isSelected"],rowIndex:[7,"rowIndex"],offsetX:[8,"offsetX"],rowHeight:[9,"rowHeight"]},{activate:"activate"})],(function(t,e){var n=e.component;t(e,1,0,n.columns,n.innerWidth,n.getRowExpanded(e.context.$implicit),n.rowClass,e.context.$implicit,e.parent.parent.context.$implicit.value,a["ɵnov"](e.parent.parent.parent.parent,2).getRowSelected(e.context.$implicit),n.getRowIndex(e.context.$implicit),n.offsetX,n.getRowHeight(e.context.$implicit))}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function D(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,L)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.parent.context.$implicit.value,e.component.rowTrackingFn)}),null)}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"datatable-row-wrapper",[["class","datatable-row-wrapper"]],null,[[null,"rowContextmenu"],[null,"contextmenu"]],(function(t,e,n){var r=!0,i=t.component;return"contextmenu"===e&&(r=!1!==a["ɵnov"](t,3).onContextmenu(n)&&r),"rowContextmenu"===e&&(r=!1!==i.rowContextmenu.emit(n)&&r),r}),pt,ot)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),a["ɵdid"](3,311296,null,0,f.k,[a.ChangeDetectorRef,a.KeyValueDiffers],{innerWidth:[0,"innerWidth"],rowDetail:[1,"rowDetail"],groupHeader:[2,"groupHeader"],offsetX:[3,"offsetX"],detailRowHeight:[4,"detailRowHeight"],row:[5,"row"],groupedRows:[6,"groupedRows"],rowIndex:[7,"rowIndex"],expanded:[8,"expanded"]},{rowContextmenu:"rowContextmenu"}),(t()(),a["ɵand"](16777216,null,0,1,null,E)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["groupedRowsTemplate",2]],0,0,null,D))],(function(t,e){var n=e.component;t(e,2,0,n.getRowsStyles(e.context.$implicit)),t(e,3,0,n.innerWidth,n.rowDetail,n.groupHeader,n.offsetX,n.getDetailRowHeight(e.context.$implicit[e.context.index],e.context.index),e.context.$implicit,n.groupedRows,n.getRowIndex(e.context.$implicit[e.context.index]),n.getRowExpanded(e.context.$implicit)),t(e,5,0,!n.groupedRows,a["ɵnov"](e,6))}),null)}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"datatable-summary-row",[["class","datatable-summary-row"]],null,null,null,xt,yt)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),a["ɵdid"](3,573440,null,0,f.m,[],{rows:[0,"rows"],columns:[1,"columns"],rowHeight:[2,"rowHeight"],offsetX:[3,"offsetX"],innerWidth:[4,"innerWidth"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.getBottomSummaryRowStyles()),t(e,3,0,n.rows,n.columns,n.summaryHeight,n.offsetX,n.innerWidth)}),null)}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"datatable-scroller",[["class","datatable-scroll"]],[[4,"height","px"],[4,"width","px"]],[[null,"scroll"]],(function(t,e,n){var a=!0;return"scroll"===e&&(a=!1!==t.component.onBodyScroll(n)&&a),a}),st,it)),a["ɵdid"](1,245760,[[1,4]],0,f.z,[a.NgZone,a.ElementRef,a.Renderer2],{scrollbarV:[0,"scrollbarV"],scrollbarH:[1,"scrollbarH"],scrollHeight:[2,"scrollHeight"],scrollWidth:[3,"scrollWidth"]},{scroll:"scroll"}),(t()(),a["ɵand"](16777216,null,0,1,null,k)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,P)),a["ɵdid"](5,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,M)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.scrollbarV,n.scrollbarH,n.scrollHeight,null==n.columnGroupWidths?null:n.columnGroupWidths.total),t(e,3,0,n.summaryRow&&"top"===n.summaryPosition),t(e,5,0,n.temp,n.rowTrackingFn),t(e,7,0,n.summaryRow&&"bottom"===n.summaryPosition)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).scrollHeight,a["ɵnov"](e,1).scrollWidth)}))}function j(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","empty-row"]],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,0,0,e.component.emptyMessage)}))}function F(t){return a["ɵvid"](2,[a["ɵqud"](671088640,1,{scroller:0}),(t()(),a["ɵeld"](1,0,null,null,7,"datatable-selection",[],null,[[null,"select"],[null,"activate"]],(function(t,e,n){var a=!0,r=t.component;return"select"===e&&(a=!1!==r.select.emit(n)&&a),"activate"===e&&(a=!1!==r.activate.emit(n)&&a),a}),mt,bt)),a["ɵdid"](2,49152,[["selector",4]],0,f.l,[],{rows:[0,"rows"],selected:[1,"selected"],selectEnabled:[2,"selectEnabled"],selectionType:[3,"selectionType"],rowIdentity:[4,"rowIdentity"],selectCheck:[5,"selectCheck"]},{activate:"activate",select:"select"}),(t()(),a["ɵand"](16777216,null,0,1,null,A)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,q)),a["ɵdid"](6,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,j)),a["ɵdid"](8,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.rows,n.selected,n.selectEnabled,n.selectionType,n.rowIdentity,n.selectCheck),t(e,4,0,n.loadingIndicator),t(e,6,0,null==n.rows?null:n.rows.length),t(e,8,0,!(null!=n.rows&&n.rows.length||n.loadingIndicator))}),null)}var G=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"label",[["class","datatable-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["type","checkbox"]],[[8,"checked",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onCheckboxChange(n)&&a),a}),null,null))],null,(function(t,e){t(e,1,0,e.component.isSelected)}))}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-collapse"]],null,null,null,null,null))],null,null)}function B(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-up"]],null,null,null,null,null))],null,null)}function Y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"i",[["class","icon datatable-icon-down"]],null,null,null,null,null))],null,null)}function H(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"button",[["class","datatable-tree-button"]],[[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onTreeAction()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,z)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,B)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Y)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"loading"===n.treeStatus),t(e,5,0,"collapsed"===n.treeStatus),t(e,7,0,"expanded"===n.treeStatus||"disabled"===n.treeStatus)}),(function(t,e){t(e,0,0,"disabled"===e.component.treeStatus)}))}function U(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function W(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,U)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](2,{cellContext:0}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,2,0,n.cellContext);t(e,1,0,a,n.column.treeToggleTemplate)}),null)}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,H)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,W)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,!n.column.treeToggleTemplate),t(e,4,0,n.column.treeToggleTemplate)}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[],[[8,"title",0],[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.sanitizedValue,n.value)}))}function Z(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function J(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,[[1,3],["cellTemplate",2]],null,1,null,Z)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.cellContext,n.column.cellTemplate)}),null)}function Q(t){return a["ɵvid"](2,[a["ɵqud"](402653184,1,{cellTemplate:0}),(t()(),a["ɵeld"](1,0,null,null,8,"div",[["class","datatable-body-cell-label"]],[[4,"margin-left","px"]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,K)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,$)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,J)),a["ɵdid"](9,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.column.checkboxable&&(!n.displayCheck||n.displayCheck(n.row,n.column,n.value))),t(e,5,0,n.column.isTreeColumn),t(e,7,0,!n.column.cellTemplate),t(e,9,0,n.column.cellTemplate)}),(function(t,e){var n=e.component;t(e,1,0,n.calcLeftMargin(n.column,n.row))}))}var X=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-cell",[["tabindex","-1"]],[[8,"className",0],[4,"width","px"],[4,"minWidth","px"],[4,"maxWidth","px"],[4,"height",null]],[[null,"activate"],[null,"treeAction"],[null,"focus"],[null,"blur"],[null,"click"],[null,"dblclick"],[null,"keydown"]],(function(t,e,n){var r=!0,i=t.component;return"focus"===e&&(r=!1!==a["ɵnov"](t,1).onFocus()&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onBlur()&&r),"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick(n)&&r),"dblclick"===e&&(r=!1!==a["ɵnov"](t,1).onDblClick(n)&&r),"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"activate"===e&&(r=!1!==i.onActivate(n,t.context.index)&&r),"treeAction"===e&&(r=!1!==i.onTreeAction()&&r),r}),Q,G)),a["ɵdid"](1,442368,null,0,f.b,[a.ElementRef,a.ChangeDetectorRef],{displayCheck:[0,"displayCheck"],group:[1,"group"],rowHeight:[2,"rowHeight"],isSelected:[3,"isSelected"],expanded:[4,"expanded"],rowIndex:[5,"rowIndex"],column:[6,"column"],row:[7,"row"],treeStatus:[8,"treeStatus"]},{activate:"activate",treeAction:"treeAction"})],(function(t,e){var n=e.component;t(e,1,0,n.displayCheck,n.group,n.rowHeight,n.isSelected,n.expanded,n.rowIndex,e.context.$implicit,n.row,n.treeStatus)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).columnCssClasses,a["ɵnov"](e,1).width,a["ɵnov"](e,1).minWidth,a["ɵnov"](e,1).maxWidth,a["ɵnov"](e,1).height)}))}function et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[8,"className",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,tt)),a["ɵdid"](4,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,2,0,n._groupStyles[e.context.$implicit.type]),t(e,4,0,e.context.$implicit.columns,n.columnTrackingFn)}),(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"datatable-row-",e.context.$implicit.type," datatable-row-group"))}))}function nt(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,et)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,1,0,n._columnsByPin,n.trackByGroups)}),null)}var at=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function rt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","progress-linear"],["role","progressbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","container"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,0,"div",[["class","bar"]],null,null,null,null,null))],null,null)}var it=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function st(t){return a["ɵvid"](2,[a["ɵncd"](null,0)],null,null)}var ot=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ut(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function lt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,ut)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.groupContext,n.groupHeader.template)}),null)}function dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","datatable-group-header"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgStyleImpl"],o["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgStyle,[o["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,lt)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.getGroupHeaderStyle()),t(e,4,0,n.groupHeader&&n.groupHeader.template)}),null)}function ct(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,null)}function ft(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function ht(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,ft)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.rowContext,n.rowDetail.template)}),null)}function gt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","datatable-row-detail"]],[[4,"height","px"]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ht)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.rowDetail&&n.rowDetail.template)}),(function(t,e){t(e,0,0,e.component.detailRowHeight)}))}function pt(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,dt)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ct)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,gt)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.groupHeader&&n.groupHeader.template),t(e,3,0,n.groupHeader&&n.groupHeader.template&&n.expanded||!n.groupHeader||!n.groupHeader.template),t(e,5,0,n.rowDetail&&n.rowDetail.template&&n.expanded)}),null)}var bt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function mt(t){return a["ɵvid"](2,[a["ɵncd"](null,0)],null,null)}var yt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function vt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-body-row",[["tabindex","-1"]],[[8,"className",0],[4,"height","px"],[4,"width","px"]],[[null,"keydown"],[null,"mouseenter"]],(function(t,e,n){var r=!0;return"keydown"===e&&(r=!1!==a["ɵnov"](t,1).onKeyDown(n)&&r),"mouseenter"===e&&(r=!1!==a["ɵnov"](t,1).onMouseenter(n)&&r),r}),nt,X)),a["ɵdid"](1,311296,null,0,f.d,[a.KeyValueDiffers,[1,f.y],a.ChangeDetectorRef,a.ElementRef],{columns:[0,"columns"],innerWidth:[1,"innerWidth"],row:[2,"row"],rowIndex:[3,"rowIndex"],offsetX:[4,"offsetX"],rowHeight:[5,"rowHeight"]},null)],(function(t,e){var n=e.component;t(e,1,0,n._internalColumns,n.innerWidth,n.summaryRow,-1,n.offsetX,n.rowHeight)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).cssClass,a["ɵnov"](e,1).rowHeight,a["ɵnov"](e,1).columnsTotalWidths)}))}function xt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,vt)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.summaryRow&&n._internalColumns)}),null)}var _t=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Tt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,null,null,0))],null,null)}function Ot(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,Tt)),a["ɵdid"](1,540672,null,0,o.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](2,{rowCount:0,pageSize:1,selectedCount:2,curPage:3,offset:4}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,2,0,n.rowCount,n.pageSize,n.selectedCount,n.curPage,n.offset);t(e,1,0,a,n.footerTemplate.template)}),null)}function wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "," / "]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.selectedCount?null:n.selectedCount.toLocaleString(),n.selectedMessage)}))}function St(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","page-count"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,wt)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](3,null,[" "," "," "]))],(function(t,e){t(e,2,0,e.component.selectedMessage)}),(function(t,e){var n=e.component;t(e,3,0,null==n.rowCount?null:n.rowCount.toLocaleString(),n.totalMessage)}))}function It(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"datatable-pager",[["class","datatable-pager"]],[[8,"hidden",0]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==t.component.page.emit(n)&&a),a}),At,Ct)),a["ɵdid"](1,49152,null,0,f.j,[],{pagerLeftArrowIcon:[0,"pagerLeftArrowIcon"],pagerRightArrowIcon:[1,"pagerRightArrowIcon"],pagerPreviousIcon:[2,"pagerPreviousIcon"],pagerNextIcon:[3,"pagerNextIcon"],size:[4,"size"],count:[5,"count"],page:[6,"page"]},{change:"change"})],(function(t,e){var n=e.component;t(e,1,0,n.pagerLeftArrowIcon,n.pagerRightArrowIcon,n.pagerPreviousIcon,n.pagerNextIcon,n.pageSize,n.rowCount,n.curPage)}),(function(t,e){t(e,0,0,!e.component.isVisible)}))}function Nt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","datatable-footer-inner"]],[[4,"height","px"]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{"selected-count":0}),(t()(),a["ɵand"](16777216,null,null,1,null,Ot)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,St)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,It)),a["ɵdid"](9,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=t(e,3,0,n.selectedMessage);t(e,2,0,"datatable-footer-inner",a),t(e,5,0,n.footerTemplate),t(e,7,0,!n.footerTemplate),t(e,9,0,!n.footerTemplate)}),(function(t,e){t(e,0,0,e.component.footerHeight)}))}var Ct=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[["class","pages"],["role","button"]],[[1,"aria-label",0],[2,"active",null]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"a",[["href","javascript:void(0)"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectPage(t.context.$implicit.number)&&a),a}),null,null)),(t()(),a["ɵted"](2,null,[" "," "]))],null,(function(t,e){t(e,0,0,"page "+e.context.$implicit.number,e.context.$implicit.number===e.component.page),t(e,2,0,e.context.$implicit.text)}))}function At(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,14,"ul",[["class","pager"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"a",[["aria-label","go to first page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectPage(1)&&a),a}),null,null)),(t()(),a["ɵeld"](3,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](4,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,1,"a",[["aria-label","go to previous page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.prevPage()&&a),a}),null,null)),(t()(),a["ɵeld"](6,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Rt)),a["ɵdid"](8,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](9,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](10,0,null,null,1,"a",[["aria-label","go to next page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.nextPage()&&a),a}),null,null)),(t()(),a["ɵeld"](11,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](12,0,null,null,2,"li",[],[[2,"disabled",null]],null,null,null,null)),(t()(),a["ɵeld"](13,0,null,null,1,"a",[["aria-label","go to last page"],["href","javascript:void(0)"],["role","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectPage(r.totalPages)&&a),a}),null,null)),(t()(),a["ɵeld"](14,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null))],(function(t,e){t(e,8,0,e.component.pages)}),(function(t,e){var n=e.component;t(e,1,0,!n.canPrevious()),t(e,3,0,a["ɵinlineInterpolate"](1,"",n.pagerPreviousIcon,"")),t(e,4,0,!n.canPrevious()),t(e,6,0,a["ɵinlineInterpolate"](1,"",n.pagerLeftArrowIcon,"")),t(e,9,0,!n.canNext()),t(e,11,0,a["ɵinlineInterpolate"](1,"",n.pagerRightArrowIcon,"")),t(e,12,0,!n.canNext()),t(e,14,0,a["ɵinlineInterpolate"](1,"",n.pagerNextIcon,""))}))}var kt=n("JxMD"),Et=n("dgut"),Lt=n("Fgil"),Dt=n("iInd"),Pt=n("4DD9"),Mt=n("yT6U"),qt=n("TJUb"),jt=n("efK2");n("uIqm"),n.d(e,"a",(function(){return Ft})),n.d(e,"b",(function(){return Oe}));var Ft=a["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";.dataTables_wrapper[_ngcontent-%COMP%]{margin-bottom:25px}.dataTables_wrapper[_ngcontent-%COMP%]   .separator[_ngcontent-%COMP%]{height:30px;border-left:1px solid rgba(0,0,0,.09);padding-left:5px;margin-left:5px;display:inline-block;vertical-align:middle}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]{float:right;border-left:1px solid rgba(0,0,0,.09);padding:0 8px}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-left:0}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]{white-space:nowrap}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]{cursor:default}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{width:100%;margin-bottom:0;padding-left:0;padding-right:0;cursor:pointer}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.dataTables_wrapper[_ngcontent-%COMP%]   .dropdown-menu[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]   input[_ngcontent-%COMP%]{cursor:pointer}.dataTables_wrapper[_ngcontent-%COMP%]   .dataTables_length[_ngcontent-%COMP%] > input[_ngcontent-%COMP%]{line-height:25px;text-align:right}.dataTables_header[_ngcontent-%COMP%]{background-color:#f5f5f5;border:1px solid #d1d1d1;border-bottom:none;padding:5px;position:relative}.dataTables_header[_ngcontent-%COMP%]   .cd-datatable-actions[_ngcontent-%COMP%]{float:left}.dataTables_header[_ngcontent-%COMP%]     .table-filters{float:right;border-left:1px solid rgba(0,0,0,.09);padding-left:8px}.dataTables_header[_ngcontent-%COMP%]     .table-filters label{margin-right:4px}.dataTables_header[_ngcontent-%COMP%]   .form-group[_ngcontent-%COMP%]{padding-left:8px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]{float:right;border-left:1px solid rgba(0,0,0,.09);padding-left:8px;padding-right:8px;width:40%;max-width:250px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]   .form-control[_ngcontent-%COMP%]{height:30px}.dataTables_header[_ngcontent-%COMP%]   .input-group.dataTables_paginate[_ngcontent-%COMP%]{width:8%;min-width:85px;padding-right:8px}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]{float:right;padding:0 8px}  .cd-datatable{border:1px solid #d1d1d1;margin-bottom:0;max-width:none!important}  .cd-datatable .progress-linear{display:block;position:relative;width:100%;height:5px;padding:0;margin:0}  .cd-datatable .progress-linear .container{background-color:#afd9ee}  .cd-datatable .progress-linear .container .bar{left:0;height:100%;width:100%;position:absolute;overflow:hidden;background-color:#afd9ee}  .cd-datatable .progress-linear .container .bar:before{display:block;position:absolute;content:"";left:-200px;width:200px;height:100%;background-color:#2b99a8;animation:3s linear infinite progress-loading}  .cd-datatable .datatable-header{background-clip:padding-box;background-color:#f5f5f5;background-image:linear-gradient(to bottom,#f5f5f5 0,#ededed 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffafafa", endColorstr="#ffededed", GradientType=0)}  .cd-datatable .datatable-header .sort-asc,   .cd-datatable .datatable-header .sort-desc{color:#2b99a8}  .cd-datatable .datatable-header .datatable-header-cell{padding:5px;border:none;border-left:1px solid #d1d1d1;border-bottom:1px solid #d1d1d1;text-align:left;font-weight:700}  .cd-datatable .datatable-header .datatable-header-cell .datatable-header-cell-label:after{font-family:ForkAwesome;font-weight:400;height:9px;left:10px;line-height:12px;position:relative;vertical-align:baseline;width:12px}  .cd-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-asc .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-desc .datatable-header-cell-label:after{content:" "}  .cd-datatable .datatable-header .datatable-header-cell:first-child{border-left:none}  .cd-datatable .datatable-body{margin-bottom:-6px}  .cd-datatable .datatable-body .empty-row{background-color:#fff3cd;text-align:center;font-weight:700;font-style:italic;padding-top:5px;padding-bottom:5px}  .cd-datatable .datatable-body .datatable-body-row.clickable:hover .datatable-row-group{background-color:#eee;transition-property:background;transition-duration:.3s;transition-timing-function:linear}  .cd-datatable .datatable-body .datatable-body-row.datatable-row-even{background-color:#fff}  .cd-datatable .datatable-body .datatable-body-row.datatable-row-odd{background-color:#f5f5f5}  .cd-datatable .datatable-body .datatable-body-row.active,   .cd-datatable .datatable-body .datatable-body-row.active:hover{background-color:#d1ecf1}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell{padding:5px;border:none;border-left:1px solid #d1d1d1;border-bottom:1px solid #d1d1d1}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell:first-child{border-left:none}  .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell .datatable-body-cell-label{display:block;height:100%}  .cd-datatable .datatable-body .datatable-row-detail{padding:20px;border-bottom:2px solid #d1d1d1;overflow-y:visible!important}  .cd-datatable .datatable-body .expand-collapse-icon{display:block;height:100%;text-align:center}  .cd-datatable .datatable-body .expand-collapse-icon:hover{text-decoration:none}  .cd-datatable .datatable-body .expand-collapse-icon-right:before{font-family:ForkAwesome,sans-serif;font-size:1rem;color:#212529;line-height:1;content:""}  .cd-datatable .datatable-body .expand-collapse-icon-down:before{font-family:ForkAwesome,sans-serif;font-size:1rem;color:#212529;line-height:1;content:""}  .cd-datatable .datatable-footer{display:unset!important}  .cd-datatable .datatable-footer .page-count,   .cd-datatable .datatable-footer .selected-count{font-style:italic;padding-left:5px}  .cd-datatable .cd-datatable-checkbox{text-align:center}@keyframes progress-loading{from{left:-200px;width:15%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}']],data:{}});function Gt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Failed to load data."]))],(function(t,e){t(e,1,0,"error")}),null)}function Vt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","cd-datatable-actions"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,null)}function zt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"a",[["class","dropdown-item"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onSelectFilter(t.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.column.name)}))}function Bt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu dropdown-menu-right px-1"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,zt)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.columnFilters)}),null)}function Yt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),null)}function Ht(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"a",[["class","dropdown-item"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(r.onChangeFilter(r.selectedFilter,t.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵted"](2,null,[""," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Yt)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,4,0,void 0!==n.selectedFilter.value&&n.selectedFilter.value.raw===e.context.$implicit.raw)}),(function(t,e){t(e,2,0,e.context.$implicit.formatted)}))}function Ut(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu dropdown-menu-right px-1"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ht)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.selectedFilter.options)}),null)}function Wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,20,"div",[["class","btn-group widget-toolbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,16777216,null,null,11,"div",[["class","btn-group tc_filter_name"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](3,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],null,null),(t()(),a["ɵeld"](4,0,null,null,6,"a",[["class","btn btn-light dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,5).onClick()&&r),r}),null,null)),a["ɵdid"](5,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](8,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](9,2),(t()(),a["ɵted"](10,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Bt)),a["ɵdid"](12,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null),(t()(),a["ɵeld"](13,16777216,null,null,7,"div",[["class","btn-group tc_filter_option"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](15,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],null,null),(t()(),a["ɵeld"](16,0,null,null,2,"a",[["class","btn btn-light dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""]],[[2,"disabled",null],[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,17).onClick()&&r),r}),null,null)),a["ɵdid"](17,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵted"](18,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,Ut)),a["ɵdid"](20,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,3,0);var a=t(e,9,0,n.icons.large,n.icons.filter);t(e,8,0,a),t(e,15,0)}),(function(t,e){var n=e.component;t(e,1,0,a["ɵnov"](e,3).dropup,a["ɵnov"](e,3).isOpen,a["ɵnov"](e,3).isOpen&&a["ɵnov"](e,3).isBs4),t(e,4,0,!0,a["ɵnov"](e,5).isDisabled,a["ɵnov"](e,5).isOpen),t(e,10,0,n.selectedFilter.column.name),t(e,13,0,a["ɵnov"](e,15).dropup,a["ɵnov"](e,15).isOpen,a["ɵnov"](e,15).isOpen&&a["ɵnov"](e,15).isBs4),t(e,16,0,0===n.selectedFilter.options.length,!0,a["ɵnov"](e,17).isDisabled,a["ɵnov"](e,17).isOpen),t(e,18,0,n.selectedFilter.value?n.selectedFilter.value.formatted:"Any")}))}function Kt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,15,"div",[["class","input-group search"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"span",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,4,"span",[["class","input-group-text"]],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,1),(t()(),a["ɵeld"](7,0,null,null,5,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0,i=t.component;return"input"===e&&(r=!1!==a["ɵnov"](t,8)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,8).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,8)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,8)._compositionEnd(n.target.value)&&r),"ngModelChange"===e&&(r=!1!==(i.search=n)&&r),"keyup"===e&&(r=!1!==i.updateFilter()&&r),r}),null,null)),a["ɵdid"](8,16384,null,0,c.e,[a.Renderer2,a.ElementRef,[2,c.b]],null,null),a["ɵprd"](1024,null,c.p,(function(t){return[t]}),[c.e]),a["ɵdid"](10,671744,null,0,c.u,[[8,null],[8,null],[8,null],[6,c.p]],{model:[0,"model"]},{update:"ngModelChange"}),a["ɵprd"](2048,null,c.q,null,[c.u]),a["ɵdid"](12,16384,null,0,c.r,[[4,c.q]],null,null),(t()(),a["ɵeld"](13,0,null,null,2,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),a["ɵeld"](14,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onClearSearch()&&a),a}),null,null)),(t()(),a["ɵeld"](15,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null))],(function(t,e){var n=e.component,a=t(e,6,0,n.icons.search);t(e,5,0,a),t(e,10,0,n.search)}),(function(t,e){var n=e.component;t(e,7,0,a["ɵnov"](e,12).ngClassUntouched,a["ɵnov"](e,12).ngClassTouched,a["ɵnov"](e,12).ngClassPristine,a["ɵnov"](e,12).ngClassDirty,a["ɵnov"](e,12).ngClassValid,a["ɵnov"](e,12).ngClassInvalid,a["ɵnov"](e,12).ngClassPending),t(e,15,0,a["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,""))}))}function $t(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"li",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,0,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"name",0],[8,"id",0],[8,"checked",0]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==t.component.toggleColumn(n)&&a),a}),null,null)),(t()(),a["ɵeld"](3,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),a["ɵted"](4,null,["",""]))],null,(function(t,e){t(e,2,0,e.parent.context.$implicit.prop,e.parent.context.$implicit.prop,!e.parent.context.$implicit.isHidden),t(e,3,0,e.parent.context.$implicit.prop),t(e,4,0,e.parent.context.$implicit.name)}))}function Zt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,$t)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0,""!==e.context.$implicit.name)}),null)}function Jt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu px-3"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Zt)),a["ɵdid"](2,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.columns)}),null)}function Qt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["class","widget-toolbar tc_refreshBtn"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.refreshBtn()&&a),a}),null,null)),(t()(),a["ɵeld"](2,0,null,null,3,"i",[],[[2,"fa-spin",null]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](5,2)],(function(t,e){var n=e.component,a=t(e,5,0,n.icons.large,n.icons.refresh);t(e,4,0,a)}),(function(t,e){var n=e.component;t(e,2,0,n.updating||n.loadingIndicator)}))}function Xt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,23,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","cd-datatable-actions"]],null,null,null,null,null)),a["ɵncd"](null,1),a["ɵncd"](null,2),(t()(),a["ɵand"](16777216,null,null,1,null,Wt)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Kt)),a["ɵdid"](7,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](8,0,null,null,1,"div",[["class","input-group dataTables_paginate"]],null,null,null,null,null)),(t()(),a["ɵeld"](9,0,null,null,0,"input",[["class","form-control"],["max","9999"],["min","1"],["type","number"]],[[8,"value",0]],[[null,"click"],[null,"keyup"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.setLimit(n)&&a),"keyup"===e&&(a=!1!==r.setLimit(n)&&a),"blur"===e&&(a=!1!==r.setLimit(n)&&a),a}),null,null)),(t()(),a["ɵeld"](10,0,null,null,11,"div",[["class","widget-toolbar"]],null,null,null,null,null)),(t()(),a["ɵeld"](11,16777216,null,null,10,"div",[["class","dropdown tc_menuitem tc_menuitem_cluster"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,u.f,u.f,[]),a["ɵdid"](13,212992,null,0,u.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,l.a,u.f,u.a,d.b],{autoClose:[0,"autoClose"]},null),(t()(),a["ɵeld"](14,0,null,null,5,"a",[["class","btn btn-light dropdown-toggle tc_columnBtn"],["data-toggle","dropdown"],["dropdownToggle",""]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,15).onClick()&&r),r}),null,null)),a["ɵdid"](15,147456,null,0,u.g,[a.ChangeDetectorRef,u.c,a.ElementRef,a.Renderer2,u.f],null,null),(t()(),a["ɵeld"](16,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](18,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](19,2),(t()(),a["ɵand"](16777216,null,null,1,null,Jt)),a["ɵdid"](21,16384,null,0,u.d,[u.f,a.ViewContainerRef,a.TemplateRef],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,Qt)),a["ɵdid"](23,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,0!==n.columnFilters.length),t(e,7,0,n.searchField),t(e,13,0,!1);var a=t(e,19,0,n.icons.large,n.icons.table);t(e,18,0,a),t(e,23,0,n.fetchData.observers.length>0)}),(function(t,e){t(e,9,0,e.component.userConfig.limit),t(e,11,0,a["ɵnov"](e,13).dropup,a["ɵnov"](e,13).isOpen,a["ɵnov"](e,13).isOpen&&a["ɵnov"](e,13).isBs4),t(e,14,0,!0,a["ɵnov"](e,15).isDisabled,a["ɵnov"](e,15).isOpen)}))}function te(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"span",[["class","badge badge-info mr-2"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[["class","mr-2"]],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",": ",""])),(t()(),a["ɵeld"](3,0,null,null,4,"a",[["class","badge-remove"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onChangeFilter(t.parent.context.$implicit),a=!1),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](6,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](7,1)],(function(t,e){var n=t(e,7,0,e.component.icons.destroy);t(e,6,0,n)}),(function(t,e){t(e,2,0,e.parent.context.$implicit.column.name,e.parent.context.$implicit.value.formatted)}))}function ee(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,te)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit.value)}),null)}function ne(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"div",[["class","dataTables_header clearfix"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","filter-chips"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ee)),a["ɵdid"](3,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](4,0,null,null,2,"a",[["class","tc_clearSelections"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.onClearFilters(),a=!1),a}),null,null)),(t()(),a["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Clear filters"]))],(function(t,e){t(e,3,0,e.component.columnFilters)}),null)}function ae(t){return a["ɵvid"](0,[a["ɵncd"](null,3),(t()(),a["ɵand"](0,null,null,0))],null,null)}function re(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "])),(t()(),a["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["selected"])),(t()(),a["ɵted"](-1,null,[" / "]))],null,(function(t,e){t(e,1,0,e.parent.context.selectedCount)}))}function ie(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "])),(t()(),a["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["found"])),(t()(),a["ɵted"](-1,null,[" / "]))],null,(function(t,e){t(e,1,0,e.parent.context.rowCount)}))}function se(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[["class","page-count"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,re)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ie)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](5,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](6,null,[" "," "])),(t()(),a["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["total"])),(t()(),a["ɵeld"](9,0,null,null,1,"datatable-pager",[["class","datatable-pager"]],[[8,"hidden",0]],[[null,"change"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t.parent,26).onFooterPage(n)&&r),r}),At,Ct)),a["ɵdid"](10,49152,null,0,f.j,[],{pagerLeftArrowIcon:[0,"pagerLeftArrowIcon"],pagerRightArrowIcon:[1,"pagerRightArrowIcon"],pagerPreviousIcon:[2,"pagerPreviousIcon"],pagerNextIcon:[3,"pagerNextIcon"],size:[4,"size"],count:[5,"count"],page:[6,"page"]},{change:"change"})],(function(t,e){var n=e.component;t(e,2,0,n.selectionType),t(e,4,0,e.context.rowCount!=(null==n.data?null:n.data.length)),t(e,10,0,n.paginationClasses.pagerLeftArrow,n.paginationClasses.pagerRightArrow,n.paginationClasses.pagerPrevious,n.paginationClasses.pagerNext,e.context.pageSize,e.context.rowCount,e.context.curPage)}),(function(t,e){var n=e.component;t(e,6,0,(null==n.data?null:n.data.length)||0),t(e,9,0,!(e.context.rowCount/e.context.pageSize>1))}))}function oe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.value)}))}function ue(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-sparkline",[],null,null,null,kt.b,kt.a)),a["ɵdid"](1,638976,null,0,Et.a,[Lt.a],{data:[0,"data"],isBinary:[1,"isBinary"]},null)],(function(t,e){t(e,1,0,e.context.value,e.context.row.cdIsBinary)}),null)}function le(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&r),r}),null,null)),a["ɵdid"](1,671744,null,0,Dt.p,[Dt.m,Dt.a,o.LocationStrategy],{queryParams:[0,"queryParams"],routerLink:[1,"routerLink"]},null),a["ɵpad"](2,1),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){var n=e.context.row.cdParams,a=t(e,2,0,e.context.row.cdLink);t(e,1,0,n,a)}),(function(t,e){t(e,0,0,a["ɵnov"](e,1).target,a["ɵnov"](e,1).href),t(e,3,0,e.context.value)}))}function de(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"i",[],[[8,"hidden",0]],null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1),a["ɵppd"](4,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),(function(t,e){var n=!a["ɵunv"](e,0,0,t(e,4,0,a["ɵnov"](e.parent,0),e.context.value));t(e,0,0,n)}))}function ce(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," /s\n"]))],null,(function(t,e){t(e,0,0,e.context.value)}))}function fe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,2)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function he(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","text-muted italic"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["(",")"]))],null,(function(t,e){t(e,1,0,e.parent.context.row.cdExecuting)}))}function ge(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,fe)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](2,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,he)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.row.cdExecuting),t(e,4,0,e.context.row.cdExecuting)}),(function(t,e){t(e,2,0,e.context.value)}))}function pe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"",e.component.useCustomClass(e.context.value),"")),t(e,1,0,e.context.value)}))}function be(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[["class","badge"]],null,null,null,null,null)),a["ɵprd"](512,null,o["ɵNgClassImpl"],o["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,o.NgClass,[o["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,"badge",null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.map&&null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&null!=e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit]&&e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].class?e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].class:null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.class?e.parent.parent.context.column.customTemplateConfig.class:"badge-primary")}),(function(t,e){t(e,3,0,null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.map&&null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&null!=e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit]&&e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].value?e.parent.parent.context.column.customTemplateConfig.map[e.parent.context.$implicit].value:null!=e.parent.parent.context.column&&null!=e.parent.parent.context.column.customTemplateConfig&&e.parent.parent.context.column.customTemplateConfig.prefix?e.parent.parent.context.column.customTemplateConfig.prefix+e.parent.context.$implicit:e.parent.context.$implicit)}))}function me(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" "]))],null,null)}function ye(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,be)),a["ɵdid"](2,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,me)),a["ɵdid"](4,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&e.parent.context.column.customTemplateConfig.map&&null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&null!=e.parent.context.column.customTemplateConfig.map[e.context.$implicit]&&e.parent.context.column.customTemplateConfig.map[e.context.$implicit].value?e.parent.context.column.customTemplateConfig.map[e.context.$implicit].value:null!=e.parent.context.column&&null!=e.parent.context.column.customTemplateConfig&&e.parent.context.column.customTemplateConfig.prefix?e.parent.context.column.customTemplateConfig.prefix+e.context.$implicit:e.context.$implicit),t(e,4,0,!e.context.last)}),null)}function ve(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,ye)),a["ɵdid"](1,278528,null,0,o.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵppd"](2,1),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,1),e.context.value));t(e,1,0,n)}),null)}function xe(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""])),a["ɵppd"](2,2)],null,(function(t,e){var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,2),e.context.value,null==e.context.column?null:e.context.column.customTemplateConfig));t(e,1,0,n)}))}function _e(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[["data-toggle","tooltip"]],[[8,"title",0]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""])),a["ɵppd"](2,3)],null,(function(t,e){t(e,0,0,e.context.value);var n=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,3),e.context.value,null==e.context.column?null:null==e.context.column.customTemplateConfig?null:e.context.column.customTemplateConfig.length,null==e.context.column?null:null==e.context.column.customTemplateConfig?null:e.context.column.customTemplateConfig.omission));t(e,1,0,n)}))}function Te(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"a",[["class","expand-collapse-icon tc_expand-collapse"],["href","javascript:void(0)"],["title","Expand/Collapse Row"]],[[2,"expand-collapse-icon-right",null],[2,"expand-collapse-icon-down",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleExpandRow(t.context.row,t.context.expanded)&&a),a}),null,null))],null,(function(t,e){t(e,0,0,!e.context.expanded,e.context.expanded)}))}function Oe(t){return a["ɵvid"](2,[a["ɵpid"](0,Pt.a,[]),a["ɵpid"](0,Mt.a,[]),a["ɵpid"](0,qt.a,[]),a["ɵpid"](0,jt.a,[]),a["ɵqud"](402653184,1,{table:0}),a["ɵqud"](402653184,2,{tableCellBoldTpl:0}),a["ɵqud"](402653184,3,{sparklineTpl:0}),a["ɵqud"](402653184,4,{routerLinkTpl:0}),a["ɵqud"](402653184,5,{checkIconTpl:0}),a["ɵqud"](402653184,6,{perSecondTpl:0}),a["ɵqud"](402653184,7,{executingTpl:0}),a["ɵqud"](402653184,8,{classAddingTpl:0}),a["ɵqud"](402653184,9,{badgeTpl:0}),a["ɵqud"](402653184,10,{mapTpl:0}),a["ɵqud"](402653184,11,{truncateTpl:0}),a["ɵqud"](402653184,12,{rowDetailsTpl:0}),(t()(),a["ɵand"](16777216,null,null,1,null,Gt)),a["ɵdid"](17,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](18,0,null,null,22,"div",[["class","dataTables_wrapper"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Vt)),a["ɵdid"](20,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Xt)),a["ɵdid"](22,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ne)),a["ɵdid"](24,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](25,0,null,null,15,"ngx-datatable",[["class","bootstrap cd-datatable ngx-datatable"]],[[2,"fixed-header",null],[2,"fixed-row",null],[2,"scroll-vertical",null],[2,"virtualized",null],[2,"scroll-horz",null],[2,"selectable",null],[2,"checkbox-selection",null],[2,"cell-selection",null],[2,"single-selection",null],[2,"multi-selection",null],[2,"multi-click-selection",null]],[[null,"select"],[null,"sort"],["window","resize"]],(function(t,e,n){var r=!0,i=t.component;return"window:resize"===e&&(r=!1!==a["ɵnov"](t,26).onWindowResize()&&r),"select"===e&&(r=!1!==i.onSelect(n)&&r),"sort"===e&&(r=!1!==i.changeSorting(n)&&r),r}),b,h)),a["ɵdid"](26,5750784,[[1,4],["table",4]],4,f.n,[[1,f.y],[1,f.r],a.ChangeDetectorRef,a.ElementRef,a.KeyValueDiffers,f.a,[2,"configuration"]],{rows:[0,"rows"],columns:[1,"columns"],selected:[2,"selected"],rowHeight:[3,"rowHeight"],columnMode:[4,"columnMode"],headerHeight:[5,"headerHeight"],footerHeight:[6,"footerHeight"],limit:[7,"limit"],loadingIndicator:[8,"loadingIndicator"],selectionType:[9,"selectionType"],sorts:[10,"sorts"],cssClasses:[11,"cssClasses"],rowClass:[12,"rowClass"],rowIdentity:[13,"rowIdentity"]},{select:"select",sort:"sort"}),a["ɵqud"](603979776,13,{columnTemplates:1}),a["ɵqud"](603979776,14,{rowDetail:0}),a["ɵqud"](603979776,15,{groupHeader:0}),a["ɵqud"](603979776,16,{footer:0}),(t()(),a["ɵeld"](31,0,[["detailRow",1]],null,4,"ngx-datatable-row-detail",[["rowHeight","auto"]],null,null,null,null,null)),a["ɵdid"](32,16384,[[14,4]],1,f.p,[],{rowHeight:[0,"rowHeight"]},null),a["ɵqud"](335544320,17,{_templateQuery:0}),(t()(),a["ɵand"](0,[[17,2]],null,1,null,ae)),a["ɵdid"](35,16384,null,0,f.q,[a.TemplateRef],null,null),(t()(),a["ɵeld"](36,0,null,null,4,"ngx-datatable-footer",[],null,null,null,null,null)),a["ɵdid"](37,16384,[[16,4]],1,f.o,[],null,null),a["ɵqud"](603979776,18,{_templateQuery:0}),(t()(),a["ɵand"](0,[[18,2]],null,1,null,se)),a["ɵdid"](40,16384,null,0,f.g,[a.TemplateRef],null,null),(t()(),a["ɵand"](0,[[2,2],["tableCellBoldTpl",2]],null,0,null,oe)),(t()(),a["ɵand"](0,[[3,2],["sparklineTpl",2]],null,0,null,ue)),(t()(),a["ɵand"](0,[[4,2],["routerLinkTpl",2]],null,0,null,le)),(t()(),a["ɵand"](0,[[5,2],["checkIconTpl",2]],null,0,null,de)),(t()(),a["ɵand"](0,[[6,2],["perSecondTpl",2]],null,0,null,ce)),(t()(),a["ɵand"](0,[[7,2],["executingTpl",2]],null,0,null,ge)),(t()(),a["ɵand"](0,[[8,2],["classAddingTpl",2]],null,0,null,pe)),(t()(),a["ɵand"](0,[[9,2],["badgeTpl",2]],null,0,null,ve)),(t()(),a["ɵand"](0,[[10,2],["mapTpl",2]],null,0,null,xe)),(t()(),a["ɵand"](0,[[11,2],["truncateTpl",2]],null,0,null,_e)),(t()(),a["ɵand"](0,[[12,2],["rowDetailsTpl",2]],null,1,null,Te)),a["ɵdid"](52,16384,null,0,f.e,[a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,17,0,n.loadingError),t(e,20,0,n.onlyActionHeader),t(e,22,0,n.toolHeader),t(e,24,0,n.toolHeader&&n.columnFiltered),t(e,26,1,[n.rows,n.tableColumns,n.selection.selected,"auto",n.columnMode,n.header?"auto":0,n.footer?"auto":0,n.userConfig.limit>0?n.userConfig.limit:void 0,n.loadingIndicator,n.selectionType,n.userConfig.sorts,n.paginationClasses,n.getRowClass(),n.rowIdentity()]),t(e,32,0,"auto")}),(function(t,e){t(e,25,1,[a["ɵnov"](e,26).isFixedHeader,a["ɵnov"](e,26).isFixedRow,a["ɵnov"](e,26).isVertScroll,a["ɵnov"](e,26).isVirtualized,a["ɵnov"](e,26).isHorScroll,a["ɵnov"](e,26).isSelectable,a["ɵnov"](e,26).isCheckboxSelection,a["ɵnov"](e,26).isCellSelection,a["ɵnov"](e,26).isSingleSelection,a["ɵnov"](e,26).isMultiSelection,a["ɵnov"](e,26).isMultiClickSelection])}))}},"2EZI":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("s7LF"),r=n("QFaf"),i=n("8Y7J");let s=(()=>{class t extends a.h{group(t,e=null){const n=super.group(t,e);return new r.a(n.controls,n.validator,n.asyncValidator)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},"2QA8":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>"function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random())()},"2Vo4":function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("XNiG"),r=n("9ppp");class i extends a.a{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){const e=super._subscribe(t);return e&&!e.closed&&t.next(this._value),e}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new r.a;return this._value}next(t){super.next(this._value=t)}}},"2ZVE":function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return u})),n.d(e,"d",(function(){return l})),n.d(e,"e",(function(){return s})),n.d(e,"f",(function(){return i}));var a=n("8Y7J");class r{constructor(t){this.viewRef=t}set ngTransclude(t){this._ngTransclude=t,t&&this.viewRef.createEmbeddedView(t)}get ngTransclude(){return this._ngTransclude}}class i{constructor(){this.type="tabs",this.ariaLabel="Tabs"}}class s{constructor(t,e,n){this.renderer=e,this.elementRef=n,this.clazz=!0,this.tabs=[],this.classMap={},Object.assign(this,t)}get vertical(){return this._vertical}set vertical(t){this._vertical=t,this.setClassMap()}get justified(){return this._justified}set justified(t){this._justified=t,this.setClassMap()}get type(){return this._type}set type(t){this._type=t,this.setClassMap()}ngOnDestroy(){this.isDestroyed=!0}addTab(t){this.tabs.push(t),t.active=1===this.tabs.length&&void 0===t.active}removeTab(t,e={reselect:!0,emit:!0}){const n=this.tabs.indexOf(t);if(-1!==n&&!this.isDestroyed){if(e.reselect&&t.active&&this.hasAvailableTabs(n)){const t=this.getClosestTabIndex(n);this.tabs[t].active=!0}e.emit&&t.removed.emit(t),this.tabs.splice(n,1),t.elementRef.nativeElement.parentNode&&this.renderer.removeChild(t.elementRef.nativeElement.parentNode,t.elementRef.nativeElement)}}keyNavActions(t,e){const n=Array.from(this.elementRef.nativeElement.querySelectorAll(".nav-link"));if(13===t.keyCode||"Enter"===t.key||32===t.keyCode||"Space"===t.key)return t.preventDefault(),void n[e%n.length].click();if(39!==t.keyCode&&"RightArrow"!==t.key)if(37!==t.keyCode&&"LeftArrow"!==t.key)if(36!==t.keyCode&&"Home"!==t.key)if(35!==t.keyCode&&"End"!==t.key){if((46===t.keyCode||"Delete"===t.key)&&this.tabs[e].removable){if(this.removeTab(this.tabs[e]),n[e+1])return void n[(e+1)%n.length].focus();n[n.length-1]&&n[0].focus()}}else{let a;t.preventDefault();let r=1,i=e;do{i-r<0?(i=n.length-1,a=n[i],r=0):a=n[i-r],r++}while(a.classList.contains("disabled"));a.focus()}else{let e;t.preventDefault();let a=0;do{e=n[a%n.length],a++}while(e.classList.contains("disabled"));e.focus()}else{let t,a=1,r=e;do{r-a<0?(r=n.length-1,t=n[r],a=0):t=n[r-a],a++}while(t.classList.contains("disabled"));t.focus()}else{let t,a=1;do{t=n[(e+a)%n.length],a++}while(t.classList.contains("disabled"));t.focus()}}getClosestTabIndex(t){const e=this.tabs.length;if(!e)return-1;for(let n=1;n<=e;n+=1){const e=t-n,a=t+n;if(this.tabs[e]&&!this.tabs[e].disabled)return e;if(this.tabs[a]&&!this.tabs[a].disabled)return a}return-1}hasAvailableTabs(t){const e=this.tabs.length;if(!e)return!1;for(let n=0;n<e;n+=1)if(!this.tabs[n].disabled&&n!==t)return!0;return!1}setClassMap(){this.classMap={"nav-stacked":this.vertical,"flex-column":this.vertical,"nav-justified":this.justified,[`nav-${this.type}`]:!0}}}class o{constructor(t,e,n){this.elementRef=e,this.renderer=n,this.selectTab=new a.EventEmitter,this.deselect=new a.EventEmitter,this.removed=new a.EventEmitter,this.addClass=!0,this.role="tabpanel",this.tabset=t,this.tabset.addTab(this)}get customClass(){return this._customClass}set customClass(t){this.customClass&&this.customClass.split(" ").forEach(t=>{this.renderer.removeClass(this.elementRef.nativeElement,t)}),this._customClass=t?t.trim():null,this.customClass&&this.customClass.split(" ").forEach(t=>{this.renderer.addClass(this.elementRef.nativeElement,t)})}get active(){return this._active}set active(t){this._active!==t&&(this.disabled&&t||!t?this._active&&!t&&(this.deselect.emit(this),this._active=t):(this._active=t,this.selectTab.emit(this),this.tabset.tabs.forEach(t=>{t!==this&&(t.active=!1)})))}get ariaLabelledby(){return this.id?`${this.id}-link`:""}ngOnInit(){this.removable=this.removable}ngOnDestroy(){this.tabset.removeTab(this,{reselect:!1,emit:!1})}}class u{constructor(t,e){e.headingRef=t}}class l{static forRoot(){return{ngModule:l,providers:[i]}}}},"2ajD":function(t,e){t.exports=function(t){return t!=t}},"2fFW":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));let a=!1;const r={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){if(t){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else a&&console.log("RxJS: Back to a better error behavior. Thank you. <3");a=t},get useDeprecatedSynchronousErrorHandling(){return a}}},"2fjn":function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})}(n("wd/R"))},"2gN3":function(t,e,n){var a=n("Kz5y");t.exports=a["__core-js_shared__"]},"2oRo":function(t,e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||Function("return this")()},"2uy1":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("XNiG"),s=n("VRyK"),o=n("xgIS"),u=n("LRne"),l=n("3N8a");class d extends l.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}requestAsyncId(t,e,n=0){return null!==n&&n>0?super.requestAsyncId(t,e,n):(t.actions.push(this),t.scheduled||(t.scheduled=requestAnimationFrame(()=>t.flush(null))))}recycleAsyncId(t,e,n=0){if(null!==n&&n>0||null===n&&this.delay>0)return super.recycleAsyncId(t,e,n);0===t.actions.length&&(cancelAnimationFrame(e),t.scheduled=void 0)}}var c=n("IjjT");class f extends c.a{flush(t){this.active=!0,this.scheduled=void 0;const{actions:e}=this;let n,a=-1,r=e.length;t=t||e.shift();do{if(n=t.execute(t.state,t.delay))break}while(++a<r&&(t=e.shift()));if(this.active=!1,n){for(;++a<r&&(t=e.shift());)t.unsubscribe();throw n}}}const h=new f(d);function g(t,e){if(1!==t.nodeType)return[];const n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function p(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function b(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}const{overflow:e,overflowX:n,overflowY:a}=g(t);return/(auto|scroll|overlay)/.test(String(e)+String(a)+String(n))?t:b(p(t))}n.d(e,"a",(function(){return U}));const m="undefined"!=typeof window&&"undefined"!=typeof document,y=m&&!(!window.MSInputMethodContext||!document.documentMode),v=m&&!(!window.MSInputMethodContext||!/MSIE 10/.test(navigator.userAgent));function x(t){return 11===t?y:10===t?v:y||v}function _(t){if(!t)return document.documentElement;const e=x(10)?document.body:null;let n,a=t.offsetParent||null;for(;a===e&&t.nextElementSibling&&n!==t.nextElementSibling;)n=t.nextElementSibling,a=n.offsetParent;const r=a&&a.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(a.nodeName)&&"static"===g(a,"position")?_(a):a:n?n.ownerDocument.documentElement:document.documentElement}function T(t){return null!==t.parentNode?T(t.parentNode):t}function O(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;const n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,a=n?t:e,r=n?e:t,i=document.createRange();i.setStart(a,0),i.setEnd(r,0);const{commonAncestorContainer:s}=i;if(t!==s&&e!==s||a.contains(r))return function(t){const{nodeName:e}=t;return"BODY"!==e&&("HTML"===e||_(t.firstElementChild)===t)}(s)?s:_(s);const o=T(t);return o.host?O(o.host,e):O(t,T(e).host)}function w(t,e){const n="x"===e?"Left":"Top",a="Left"===n?"Right":"Bottom";return parseFloat(t[`border${n}Width`])+parseFloat(t[`border${a}Width`])}function S(t,e,n,a){return Math.max(e[`offset${t}`],e[`scroll${t}`],n[`client${t}`],n[`offset${t}`],n[`scroll${t}`],x(10)?parseInt(n[`offset${t}`],10)+parseInt(a[`margin${"Height"===t?"Top":"Left"}`],10)+parseInt(a[`margin${"Height"===t?"Bottom":"Right"}`],10):0)}function I(t){const e=t.body,n=t.documentElement,a=x(10)&&getComputedStyle(n);return{height:S("Height",e,n,a),width:S("Width",e,n,a)}}function N(t,e="top"){const n="top"===e?"scrollTop":"scrollLeft",a=t.nodeName;if("BODY"===a||"HTML"===a){const e=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||e)[n]}return t[n]}function C(t){return Object.assign({},t,{right:t.left+t.width,bottom:t.top+t.height})}function R(t){let e={};try{if(x(10)){e=t.getBoundingClientRect();const n=N(t,"top"),a=N(t,"left");e.top+=n,e.left+=a,e.bottom+=n,e.right+=a}else e=t.getBoundingClientRect()}catch(s){return}const n={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},a="HTML"===t.nodeName?I(t.ownerDocument):{};let r=t.offsetWidth-(a.width||t.clientWidth||n.right-n.left),i=t.offsetHeight-(a.height||t.clientHeight||n.bottom-n.top);if(r||i){const e=g(t);r-=w(e,"x"),i-=w(e,"y"),n.width-=r,n.height-=i}return C(n)}function A(t,e,n=!1){const a=x(10),r="HTML"===e.nodeName,i=R(t),s=R(e),o=b(t),u=g(e),l=parseFloat(u.borderTopWidth),d=parseFloat(u.borderLeftWidth);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));let c=C({top:i.top-s.top-l,left:i.left-s.left-d,width:i.width,height:i.height});if(c.marginTop=0,c.marginLeft=0,!a&&r){const t=parseFloat(u.marginTop),e=parseFloat(u.marginLeft);c.top-=l-t,c.bottom-=l-t,c.left-=d-e,c.right-=d-e,c.marginTop=t,c.marginLeft=e}return(a&&!n?e.contains(o):e===o&&"BODY"!==o.nodeName)&&(c=function(t,e,n=!1){const a=N(e,"top"),r=N(e,"left"),i=n?-1:1;return t.top+=a*i,t.bottom+=a*i,t.left+=r*i,t.right+=r*i,t}(c,e)),c}function k(t){if(!t||!t.parentElement||x())return document.documentElement;let e=t.parentElement;for(;e&&"none"===g(e,"transform");)e=e.parentElement;return e||document.documentElement}function E(t,e,n=0,a,r=!1){let i={top:0,left:0};const s=r?k(t):O(t,e);if("viewport"===a)i=function(t,e=!1){const n=t.ownerDocument.documentElement,a=A(t,n),r=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:N(n),o=e?0:N(n,"left");return C({top:s-Number(a.top)+Number(a.marginTop),left:o-Number(a.left)+Number(a.marginLeft),width:r,height:i})}(s,r);else{let n;"scrollParent"===a?(n=b(p(e)),"BODY"===n.nodeName&&(n=t.ownerDocument.documentElement)):n="window"===a?t.ownerDocument.documentElement:a;const o=A(n,s,r);if("HTML"!==n.nodeName||function t(e){const n=e.nodeName;return"BODY"!==n&&"HTML"!==n&&("fixed"===g(e,"position")||t(p(e)))}(s))i=o;else{const{height:e,width:n}=I(t.ownerDocument);i.top+=o.top-o.marginTop,i.bottom=Number(e)+Number(o.top),i.left+=o.left-o.marginLeft,i.right=Number(n)+Number(o.left)}}return i.left+=n,i.top+=n,i.right-=n,i.bottom-=n,i}function L({width:t,height:e}){return t*e}function D(t,e,n,a,r=["top","bottom","right","left"],i="viewport",s=0){if(-1===t.indexOf("auto"))return t;const o=E(n,a,s,i),u={top:{width:o.width,height:e.top-o.top},right:{width:o.right-e.right,height:o.height},bottom:{width:o.width,height:o.bottom-e.bottom},left:{width:e.left-o.left,height:o.height}},l=Object.keys(u).map(t=>Object.assign({key:t},u[t],{area:L(u[t])})).sort((t,e)=>e.area-t.area);let d=l.filter(({width:t,height:e})=>t>=n.clientWidth&&e>=n.clientHeight);d=d.filter(t=>r.some(e=>e===t.key));const c=d.length>0?d[0].key:l[0].key,f=t.split(" ")[1];return n.className=n.className.replace(/bs-tooltip-auto/g,`bs-tooltip-${c}`),c+(f?`-${f}`:"")}function P(t){const e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),a=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:Number(t.offsetWidth)+a,height:Number(t.offsetHeight)+n}}function M(t,e,n=null){return A(e,n?k(t):O(t,e),n)}function q(t,e,n){const a=n.split(" ")[0],r=P(t),i={width:r.width,height:r.height},s=-1!==["right","left"].indexOf(a),o=s?"top":"left",u=s?"left":"top",l=s?"height":"width",d=s?"width":"height";return i[o]=e[o]+e[l]/2-r[l]/2,i[u]=a===u?e[u]-r[d]:e[function(t){const e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,t=>e[t])}(u)],i}function j(t,e){return t&&t.modifiers&&t.modifiers[e]&&t.modifiers[e].enabled}function F(t,e,n){Object.keys(e).forEach(a=>{let r="";var i;-1!==["width","height","top","right","bottom","left"].indexOf(a)&&""!==(i=e[a])&&!isNaN(parseFloat(i))&&isFinite(i)&&(r="px"),n?n.setStyle(t,a,`${String(e[a])}${r}`):t.style[a]=String(e[a])+r})}function G(t){let e=t.offsets.target;const n=t.instance.target.querySelector(".arrow");if(!n)return t;const a=-1!==["left","right"].indexOf(t.placement),r=a?"height":"width",i=a?"Top":"Left",s=i.toLowerCase(),o=a?"left":"top",u=a?"bottom":"right",l=P(n)[r];t.offsets.host[u]-l<e[s]&&(e[s]-=e[s]-(t.offsets.host[u]-l)),Number(t.offsets.host[s])+Number(l)>e[u]&&(e[s]+=Number(t.offsets.host[s])+Number(l)-Number(e[u])),e=C(e);const d=Number(t.offsets.host[s])+Number(t.offsets.host[r]/2-l/2),c=g(t.instance.target),f=parseFloat(c[`margin${i}`]),h=parseFloat(c[`border${i}Width`]);let p=d-e[s]-f-h;return p=Math.max(Math.min(e[r]-l,p),0),t.offsets.arrow={[s]:Math.round(p),[o]:""},t.instance.arrow=n,t}function V(t){if(t.offsets.target=C(t.offsets.target),!j(t.options,"flip"))return t.offsets.target=Object.assign({},t.offsets.target,q(t.instance.target,t.offsets.host,t.placement)),t;const e=E(t.instance.target,t.instance.host,0,"viewport",!1);let n=t.placement.split(" ")[0],a=t.placement.split(" ")[1]||"";const r=D("auto",t.offsets.host,t.instance.target,t.instance.host,t.options.allowedPositions),i=[n,r];return i.forEach((r,s)=>{if(n!==r||i.length===s+1)return t;n=t.placement.split(" ")[0];const o="left"===n&&Math.floor(t.offsets.target.right)>Math.floor(t.offsets.host.left)||"right"===n&&Math.floor(t.offsets.target.left)<Math.floor(t.offsets.host.right)||"top"===n&&Math.floor(t.offsets.target.bottom)>Math.floor(t.offsets.host.top)||"bottom"===n&&Math.floor(t.offsets.target.top)<Math.floor(t.offsets.host.bottom),u=Math.floor(t.offsets.target.left)<Math.floor(e.left),l=Math.floor(t.offsets.target.right)>Math.floor(e.right),d=Math.floor(t.offsets.target.top)<Math.floor(e.top),c=Math.floor(t.offsets.target.bottom)>Math.floor(e.bottom),f="left"===n&&u||"right"===n&&l||"top"===n&&d||"bottom"===n&&c,h=-1!==["top","bottom"].indexOf(n),g=h&&"left"===a&&u||h&&"right"===a&&l||!h&&"left"===a&&d||!h&&"right"===a&&c;(o||f||g)&&((o||f)&&(n=i[s+1]),g&&(a=function(t){return"right"===t?"left":"left"===t?"right":t}(a)),t.placement=n+(a?` ${a}`:""),t.offsets.target=Object.assign({},t.offsets.target,q(t.instance.target,t.offsets.host,t.placement)))}),t}function z(t){if(!j(t.options,"preventOverflow"))return t;const e="transform",n=t.instance.target.style,{top:a,left:r,[e]:i}=n;n.top="",n.left="",n[e]="";const s=E(t.instance.target,t.instance.host,0,"scrollParent",!1);n.top=a,n.left=r,n[e]=i;const o={primary(e){let n=t.offsets.target[e];return t.offsets.target[e]<s[e]&&(n=Math.max(t.offsets.target[e],s[e])),{[e]:n}},secondary(e){const n="right"===e?"left":"top";let a=t.offsets.target[n];return t.offsets.target[e]>s[e]&&(a=Math.min(t.offsets.target[n],s[e]-("right"===e?t.offsets.target.width:t.offsets.target.height))),{[n]:a}}};let u;return["left","right","top","bottom"].forEach(e=>{u=-1!==["left","top"].indexOf(e)?"primary":"secondary",t.offsets.target=Object.assign({},t.offsets.target,o[u](e))}),t}function B(t){const e=t.placement,n=e.split(" ")[0],a=e.split(" ")[1];if(a){const{host:e,target:r}=t.offsets,i=-1!==["bottom","top"].indexOf(n),s=i?"left":"top",o=i?"width":"height";t.offsets.target=Object.assign({},r,{start:{[s]:e[s]},end:{[s]:e[s]+e[o]-r[o]}}[a])}return t}class Y{position(t,e,n=!0){return this.offset(t,e,!1)}offset(t,e,n=!0){return M(e,t)}positionElements(t,e,n,a,r){return[V,B,z,G].reduce((t,e)=>e(t),function(t,e,n,a){const r=M(t,e);n.match(/^(auto)*\s*(left|right|top|bottom)*$/)||n.match(/^(left|right|top|bottom)*\s*(start|end)*$/)||(n="auto");const i=!!n.match(/auto/g);let s=n.match(/auto\s(left|right|top|bottom)/)?n.split(" ")[1]||"auto":n;const o=q(t,r,s);return s=D(s,r,t,e,a?a.allowedPositions:void 0),{options:a,instance:{target:t,host:e,arrow:null},offsets:{target:o,host:r,arrow:null},positionFixed:!1,placement:s,placementAuto:i}}(e,t,n,r))}}const H=new Y;class U{constructor(t,e,n){this.update$$=new i.a,this.positionElements=new Map,this.isDisabled=!1,Object(r.isPlatformBrowser)(n)&&t.runOutsideAngular(()=>{this.triggerEvent$=Object(s.a)(Object(o.a)(window,"scroll",{passive:!0}),Object(o.a)(window,"resize",{passive:!0}),Object(u.a)(0,h),this.update$$),this.triggerEvent$.subscribe(()=>{this.isDisabled||this.positionElements.forEach(t=>{!function(t,e,n,a,r,i){const s=H.positionElements(t,e,n,a,r),o=function(t){return{width:t.offsets.target.width,height:t.offsets.target.height,left:Math.floor(t.offsets.target.left),top:Math.round(t.offsets.target.top),bottom:Math.round(t.offsets.target.bottom),right:Math.floor(t.offsets.target.right)}}(s);F(e,{"will-change":"transform",top:"0px",left:"0px",transform:`translate3d(${o.left}px, ${o.top}px, 0px)`},i),s.instance.arrow&&F(s.instance.arrow,s.offsets.arrow,i),function(t,e){const n=t.instance.target;let a=n.className;t.placementAuto&&(a=a.replace(/bs-popover-auto/g,`bs-popover-${t.placement}`),a=a.replace(/bs-tooltip-auto/g,`bs-tooltip-${t.placement}`),a=a.replace(/\sauto/g,` ${t.placement}`),-1!==a.indexOf("popover")&&-1===a.indexOf("popover-auto")&&(a+=" popover-auto"),-1!==a.indexOf("tooltip")&&-1===a.indexOf("tooltip-auto")&&(a+=" tooltip-auto")),a=a.replace(/left|right|top|bottom/g,`${t.placement.split(" ")[0]}`),e?e.setAttribute(n,"class",a):n.className=a}(s,i)}(W(t.target),W(t.element),t.attachment,t.appendToBody,this.options,e.createRenderer(null,null))})})})}position(t){this.addPositionElement(t)}get event$(){return this.triggerEvent$}disable(){this.isDisabled=!0}enable(){this.isDisabled=!1}addPositionElement(t){this.positionElements.set(W(t.element),t)}calcPosition(){this.update$$.next()}deletePositionElement(t){this.positionElements.delete(W(t))}setOptions(t){this.options=t}}function W(t){return"string"==typeof t?document.querySelector(t):t instanceof a.ElementRef?t.nativeElement:t}},"2vnA":function(t,e,n){"use strict";n.d(e,"a",(function(){return Kt})),n.d(e,"b",(function(){return Zt})),n.d(e,"c",(function(){return at})),n.d(e,"d",(function(){return X})),n.d(e,"e",(function(){return Xt}));var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function r(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function s(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var a,r,i=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(a=i.next()).done;)s.push(a.value)}catch(o){r={error:o}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return s}function o(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t}var u=[];Object.freeze(u);var l={};Object.freeze(l);var d={};function c(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:d}function f(){return++Rt.mobxGuid}function h(t){throw g(!1,t),"X"}function g(t,e){if(!t)throw new Error("[mobx] "+(e||"An invariant failed, however the error is obfuscated because this is an production build."))}function p(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var b=function(){};function m(t){return null!==t&&"object"==typeof t}function y(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function v(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!0,configurable:!0,value:n})}function x(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!1,configurable:!0,value:n})}function _(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return m(t)&&!0===t[n]}}function T(t){return void 0!==c().Map&&t instanceof c().Map}function O(t){return t instanceof Set}function w(t){for(var e=[];;){var n=t.next();if(n.done)break;e.push(n.value)}return e}function S(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function I(t){return null===t?null:"object"==typeof t?""+t:t}function N(){return"function"==typeof Symbol&&Symbol.iterator||"@@iterator"}function C(t,e){x(t,N(),e)}function R(t){return t[N()]=k,t}function A(){return"function"==typeof Symbol&&Symbol.toStringTag||"@@toStringTag"}function k(){return this}var E=function(){function t(t){void 0===t&&(t="Atom@"+f()),this.name=t,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=rt.NOT_TRACKING}return t.prototype.onBecomeUnobserved=function(){},t.prototype.onBecomeObserved=function(){},t.prototype.reportObserved=function(){return Pt(this)},t.prototype.reportChanged=function(){Lt(),function(t){if(t.lowestObserverState!==rt.STALE){t.lowestObserverState=rt.STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===rt.UP_TO_DATE&&(a.isTracing!==it.NONE&&Mt(a,t),a.onBecomeStale()),a.dependenciesState=rt.STALE}}}(this),Dt()},t.prototype.toString=function(){return this.name},t}(),L=_("Atom",E);function D(t,e){return t===e}var P={identity:D,structural:function(t,e){return He(t,e)},default:function(t,e){return function(t,e){return"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(t,e)||D(t,e)},shallow:function(t,e){return He(t,e,1)}},M={},q={};function j(t,e){var n=e?M:q;return n[t]||(n[t]={configurable:!0,enumerable:e,get:function(){return F(this),this[t]},set:function(e){F(this),this[t]=e}})}function F(t){if(!0!==t.__mobxDidRunLazyInitializers){var e=t.__mobxDecorators;if(e)for(var n in v(t,"__mobxDidRunLazyInitializers",!0),e){var a=e[n];a.propertyCreator(t,a.prop,a.descriptor,a.decoratorTarget,a.decoratorArguments)}}}function G(t,e){return function(){var n,a=function(a,r,s,o){return!0===o?(e(a,r,s,a,n),null):(Object.prototype.hasOwnProperty.call(a,"__mobxDecorators")||v(a,"__mobxDecorators",i({},a.__mobxDecorators)),a.__mobxDecorators[r]={prop:r,propertyCreator:e,descriptor:s,decoratorTarget:a,decoratorArguments:n},j(r,t))};return V(arguments)?(n=u,a.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),a)}}function V(t){return(2===t.length||3===t.length)&&"string"==typeof t[1]||4===t.length&&!0===t[3]}function z(t,e,n){return ie(t)?t:Array.isArray(t)?X.array(t,{name:n}):y(t)?X.object(t,void 0,{name:n}):T(t)?X.map(t,{name:n}):O(t)?X.set(t,{name:n}):t}function B(t){return t}function Y(t){g(t);var e=G(!0,(function(e,n,a,r,s){!function(t,e,n,a){var r=qe(t);if(ue(r)){var s=de(r,{object:t,name:e,type:"add",newValue:n});if(!s)return;n=s.newValue}n=(r.values[e]=new wt(n,a,r.name+"."+e,!1)).value,Object.defineProperty(t,e,function(t){return je[t]||(je[t]={configurable:!0,enumerable:!0,get:function(){return this.$mobx.read(this,t)},set:function(e){this.$mobx.write(this,t,e)}})}(e)),r.keys&&r.keys.push(e),function(t,e,n,a){var r=ce(t),s=Gt(),o=r||s?{type:"add",object:e,name:n,newValue:a}:null;s&&zt(i(i({},o),{name:t.name,key:n})),r&&he(t,o),s&&Yt()}(r,t,e,n)}(e,n,a?a.initializer?a.initializer.call(e):a.value:void 0,t)})),n=("undefined"!=typeof process&&process,e);return n.enhancer=t,n}var H={deep:!0,name:void 0,defaultDecorator:void 0};function U(t){return null==t?H:"string"==typeof t?{name:t,deep:!0}:t}function W(t){return t.defaultDecorator?t.defaultDecorator.enhancer:!1===t.deep?B:z}Object.freeze(H),Object.freeze({deep:!1,name:void 0,defaultDecorator:void 0});var K=Y(z),$=Y((function(t,e,n){return null==t?t:ze(t)||Ce(t)||Ee(t)||Pe(t)?t:Array.isArray(t)?X.array(t,{name:n,deep:!1}):y(t)?X.object(t,void 0,{name:n,deep:!1}):T(t)?X.map(t,{name:n,deep:!1}):O(t)?X.set(t,{name:n,deep:!1}):h(!1)})),Z=Y(B),J=Y((function(t,e,n){return He(t,e)?e:t})),Q={box:function(t,e){arguments.length>2&&tt("box");var n=U(e);return new wt(t,W(n),n.name,!0,n.equals)},shallowBox:function(t,e){return arguments.length>2&&tt("shallowBox"),X.box(t,{name:e,deep:!1})},array:function(t,e){arguments.length>2&&tt("array");var n=U(e);return new Te(t,W(n),n.name)},shallowArray:function(t,e){return arguments.length>2&&tt("shallowArray"),X.array(t,{name:e,deep:!1})},map:function(t,e){arguments.length>2&&tt("map");var n=U(e);return new Ae(t,W(n),n.name)},shallowMap:function(t,e){return arguments.length>2&&tt("shallowMap"),X.map(t,{name:e,deep:!1})},set:function(t,e){arguments.length>2&&tt("set");var n=U(e);return new De(t,W(n),n.name)},object:function(t,e,n){"string"==typeof arguments[1]&&tt("object");var a=U(n);return ne({},t,e,a)},shallowObject:function(t,e){return"string"==typeof arguments[1]&&tt("shallowObject"),X.object(t,{},{name:e,deep:!1})},ref:Z,shallow:$,deep:K,struct:J},X=function(t,e,n){if("string"==typeof arguments[1])return K.apply(null,arguments);if(ie(t))return t;var a=y(t)?X.object(t,e,n):Array.isArray(t)?X.array(t,e):T(t)?X.map(t,e):O(t)?X.set(t,e):t;if(a!==t)return a;h(!1)};function tt(t){h("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}Object.keys(Q).forEach((function(t){return X[t]=Q[t]}));var et=G(!1,(function(t,e,n,a,r){var s,o,u,l;s=t,o=e,u=i({get:n.get,set:n.set},r[0]||{}),l=qe(s),u.name=l.name+"."+o,u.context=s,l.values[o]=new St(u),Object.defineProperty(s,o,function(t){return Fe[t]||(Fe[t]={configurable:Rt.computedConfigurable,enumerable:!1,get:function(){return Ge(this).read(this,t)},set:function(e){Ge(this).write(this,t,e)}})}(o))})),nt=et({equals:P.structural}),at=function(t,e,n){if("string"==typeof e)return et.apply(null,arguments);if(null!==t&&"object"==typeof t&&1===arguments.length)return et.apply(null,arguments);var a="object"==typeof e?e:{};return a.get=t,a.set="function"==typeof e?e:a.set,a.name=a.name||t.name||"",new St(a)};at.struct=nt;var rt=function(t){return t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE",t}({}),it=function(t){return t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK",t}({}),st=function(){return function(t){this.cause=t}}();function ot(t){return t instanceof st}function ut(t){switch(t.dependenciesState){case rt.UP_TO_DATE:return!1;case rt.NOT_TRACKING:case rt.STALE:return!0;case rt.POSSIBLY_STALE:for(var e=pt(!0),n=ht(),a=t.observing,r=a.length,i=0;i<r;i++){var s=a[i];if(It(s)){if(Rt.disableErrorBoundaries)s.get();else try{s.get()}catch(o){return gt(n),bt(e),!0}if(t.dependenciesState===rt.STALE)return gt(n),bt(e),!0}}return mt(t),gt(n),bt(e),!1}}function lt(t){var e=t.observers.length>0;Rt.computationDepth>0&&e&&h(!1),Rt.allowStateChanges||!e&&"strict"!==Rt.enforceActions||h(!1)}function dt(t,e,n){var a=pt(!0);mt(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++Rt.runId;var r,i=Rt.trackingDerivation;if(Rt.trackingDerivation=t,!0===Rt.disableErrorBoundaries)r=e.call(n);else try{r=e.call(n)}catch(s){r=new st(s)}return Rt.trackingDerivation=i,function(t){for(var e=t.observing,n=t.observing=t.newObserving,a=rt.UP_TO_DATE,r=0,i=t.unboundDepsCount,s=0;s<i;s++)0===(o=n[s]).diffValue&&(o.diffValue=1,r!==s&&(n[r]=o),r++),o.dependenciesState>a&&(a=o.dependenciesState);for(n.length=r,t.newObserving=null,i=e.length;i--;)0===(o=e[i]).diffValue&&kt(o,t),o.diffValue=0;for(;r--;){var o;1===(o=n[r]).diffValue&&(o.diffValue=0,At(o,t))}a!==rt.UP_TO_DATE&&(t.dependenciesState=a,t.onBecomeStale())}(t),bt(a),r}function ct(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)kt(e[n],t);t.dependenciesState=rt.NOT_TRACKING}function ft(t){var e=ht(),n=t();return gt(e),n}function ht(){var t=Rt.trackingDerivation;return Rt.trackingDerivation=null,t}function gt(t){Rt.trackingDerivation=t}function pt(t){var e=Rt.allowStateReads;return Rt.allowStateReads=t,e}function bt(t){Rt.allowStateReads=t}function mt(t){if(t.dependenciesState!==rt.UP_TO_DATE){t.dependenciesState=rt.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=rt.UP_TO_DATE}}var yt=0,vt=1;function xt(t,e){var n=function(){return _t(t,e,this,arguments)};return n.isMobxAction=!0,n}function _t(t,e,n,a){var r=function(t,e,n){var a=Gt()&&!!t,r=0;if(a){r=Date.now();var i=n&&n.length||0,s=new Array(i);if(i>0)for(var o=0;o<i;o++)s[o]=n[o];zt({type:"action",name:t,object:e,arguments:s})}var u=ht();Lt();var l={prevDerivation:u,prevAllowStateChanges:Tt(!0),prevAllowStateReads:pt(!0),notifySpy:a,startTime:r,actionId:vt++,parentActionId:yt};return yt=l.actionId,l}(t,n,a);try{return e.apply(n,a)}catch(i){throw r.error=i,i}finally{!function(t){yt!==t.actionId&&h("invalid action stack. did you forget to finish an action?"),yt=t.parentActionId,void 0!==t.error&&(Rt.suppressReactionErrors=!0),Ot(t.prevAllowStateChanges),bt(t.prevAllowStateReads),Dt(),gt(t.prevDerivation),t.notifySpy&&Yt({time:Date.now()-t.startTime}),Rt.suppressReactionErrors=!1}(r)}}function Tt(t){var e=Rt.allowStateChanges;return Rt.allowStateChanges=t,e}function Ot(t){Rt.allowStateChanges=t}Object.getOwnPropertyDescriptor((function(){}),"name");var wt=function(t){function e(e,n,a,r,i){void 0===a&&(a="ObservableValue@"+f()),void 0===r&&(r=!0),void 0===i&&(i=P.default);var s=t.call(this,a)||this;return s.enhancer=n,s.name=a,s.equals=i,s.hasUnreportedChange=!1,s.value=n(e,void 0,a),r&&Gt()&&Vt({type:"create",name:s.name,newValue:""+s.value}),s}return r(e,t),e.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},e.prototype.set=function(t){var e=this.value;if((t=this.prepareNewValue(t))!==Rt.UNCHANGED){var n=Gt();n&&zt({type:"update",name:this.name,newValue:t,oldValue:e}),this.setNewValue(t),n&&Yt()}},e.prototype.prepareNewValue=function(t){if(lt(this),ue(this)){var e=de(this,{object:this,type:"update",newValue:t});if(!e)return Rt.UNCHANGED;t=e.newValue}return t=this.enhancer(t,this.value,this.name),this.equals(this.value,t)?Rt.UNCHANGED:t},e.prototype.setNewValue=function(t){var e=this.value;this.value=t,this.reportChanged(),ce(this)&&he(this,{type:"update",object:this,newValue:t,oldValue:e})},e.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},e.prototype.intercept=function(t){return le(this,t)},e.prototype.observe=function(t,e){return e&&t({object:this,type:"update",newValue:this.value,oldValue:void 0}),fe(this,t)},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.value+"]"},e.prototype.valueOf=function(){return I(this.get())},e}(E);wt.prototype[S()]=wt.prototype.valueOf,_("ObservableValue",wt);var St=function(){function t(t){this.dependenciesState=rt.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=rt.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+f(),this.value=new st(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=it.NONE,g(t.get,"missing option for computed: get"),this.derivation=t.get,this.name=t.name||"ComputedValue@"+f(),t.set&&(this.setter=xt(this.name+"-setter",t.set)),this.equals=t.equals||(t.compareStructural||t.struct?P.structural:P.default),this.scope=t.context,this.requiresReaction=!!t.requiresReaction,this.keepAlive=!!t.keepAlive}return t.prototype.onBecomeStale=function(){!function(t){if(t.lowestObserverState===rt.UP_TO_DATE){t.lowestObserverState=rt.POSSIBLY_STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===rt.UP_TO_DATE&&(a.dependenciesState=rt.POSSIBLY_STALE,a.isTracing!==it.NONE&&Mt(a,t),a.onBecomeStale())}}}(this)},t.prototype.onBecomeUnobserved=function(){},t.prototype.onBecomeObserved=function(){},t.prototype.get=function(){this.isComputing&&h("Cycle detected in computation "+this.name+": "+this.derivation),0!==Rt.inBatch||0!==this.observers.length||this.keepAlive?(Pt(this),ut(this)&&this.trackAndCompute()&&function(t){if(t.lowestObserverState!==rt.STALE){t.lowestObserverState=rt.STALE;for(var e=t.observers,n=e.length;n--;){var a=e[n];a.dependenciesState===rt.POSSIBLY_STALE?a.dependenciesState=rt.STALE:a.dependenciesState===rt.UP_TO_DATE&&(t.lowestObserverState=rt.UP_TO_DATE)}}}(this)):ut(this)&&(this.warnAboutUntrackedRead(),Lt(),this.value=this.computeValue(!1),Dt());var t=this.value;if(ot(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(ot(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){g(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else g(!1,!1)},t.prototype.trackAndCompute=function(){Gt()&&Vt({object:this.scope,type:"compute",name:this.name});var t=this.value,e=this.dependenciesState===rt.NOT_TRACKING,n=this.computeValue(!0),a=e||ot(t)||ot(n)||!this.equals(t,n);return a&&(this.value=n),a},t.prototype.computeValue=function(t){var e;if(this.isComputing=!0,Rt.computationDepth++,t)e=dt(this,this.derivation,this.scope);else if(!0===Rt.disableErrorBoundaries)e=this.derivation.call(this.scope);else try{e=this.derivation.call(this.scope)}catch(n){e=new st(n)}return Rt.computationDepth--,this.isComputing=!1,e},t.prototype.suspend=function(){this.keepAlive||(ct(this),this.value=void 0)},t.prototype.observe=function(t,e){var n=this,a=!0,r=void 0;return Zt((function(){var i=n.get();if(!a||e){var s=ht();t({type:"update",object:n,newValue:i,oldValue:r}),gt(s)}a=!1,r=i}))},t.prototype.warnAboutUntrackedRead=function(){},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return I(this.get())},t}();St.prototype[S()]=St.prototype.valueOf;var It=_("ComputedValue",St),Nt=function(){return function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1}}(),Ct=!0,Rt=function(){var t=c();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(Ct=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==(new Nt).version&&(Ct=!1),Ct?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new Nt):(setTimeout((function(){h("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Nt)}();function At(t,e){var n=t.observers.length;n&&(t.observersIndexes[e.__mapid]=n),t.observers[n]=e,t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function kt(t,e){if(1===t.observers.length)t.observers.length=0,Et(t);else{var n=t.observers,a=t.observersIndexes,r=n.pop();if(r!==e){var i=a[e.__mapid]||0;i?a[r.__mapid]=i:delete a[r.__mapid],n[i]=r}delete a[e.__mapid]}}function Et(t){!1===t.isPendingUnobservation&&(t.isPendingUnobservation=!0,Rt.pendingUnobservations.push(t))}function Lt(){Rt.inBatch++}function Dt(){if(0==--Rt.inBatch){jt();for(var t=Rt.pendingUnobservations,e=0;e<t.length;e++){var n=t[e];n.isPendingUnobservation=!1,0===n.observers.length&&(n.isBeingObserved&&(n.isBeingObserved=!1,n.onBecomeUnobserved()),n instanceof St&&n.suspend())}Rt.pendingUnobservations=[]}}function Pt(t){var e=Rt.trackingDerivation;return null!==e?(e.runId!==t.lastAccessedBy&&(t.lastAccessedBy=e.runId,e.newObserving[e.unboundDepsCount++]=t,t.isBeingObserved||(t.isBeingObserved=!0,t.onBecomeObserved())),!0):(0===t.observers.length&&Rt.inBatch>0&&Et(t),!1)}function Mt(t,e){if(console.log("[mobx.trace] '"+t.name+"' is invalidated due to a change in: '"+e.name+"'"),t.isTracing===it.BREAK){var n=[];!function t(e,n,a){n.length>=1e3?n.push("(and many more)"):(n.push(""+new Array(a).join("\t")+e.name),e.dependencies&&e.dependencies.forEach((function(e){return t(e,n,a+1)})))}((a=t,ae(Be(a,void 0))),n,1),new Function("debugger;\n/*\nTracing '"+t.name+"'\n\nYou are entering this break point because derivation '"+t.name+"' is being traced and '"+e.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(t instanceof St?t.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n    ")()}var a}var qt=function(){function t(t,e,n,a){void 0===t&&(t="Reaction@"+f()),void 0===a&&(a=!1),this.name=t,this.onInvalidate=e,this.errorHandler=n,this.requiresObservable=a,this.observing=[],this.newObserving=[],this.dependenciesState=rt.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+f(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=it.NONE}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Rt.pendingReactions.push(this),jt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){if(!this.isDisposed){if(Lt(),this._isScheduled=!1,ut(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending&&Gt()&&Vt({name:this.name,type:"scheduled-reaction"})}catch(t){this.reportExceptionInDerivation(t)}}Dt()}},t.prototype.track=function(t){Lt();var e,n=Gt();n&&(e=Date.now(),zt({name:this.name,type:"reaction"})),this._isRunning=!0;var a=dt(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ct(this),ot(a)&&this.reportExceptionInDerivation(a.cause),n&&Yt({time:Date.now()-e}),Dt()},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)this.errorHandler(t,this);else{if(Rt.disableErrorBoundaries)throw t;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Rt.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,t),Gt()&&Vt({type:"error",name:this.name,message:n,error:""+t}),Rt.globalReactionErrorHandlers.forEach((function(n){return n(t,e)}))}},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Lt(),ct(this),Dt()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t.$mobx=this,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.trace=function(t){void 0===t&&(t=!1),function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=!1;"boolean"==typeof t[t.length-1]&&(n=t.pop());var a=se(t);if(!a)return h(!1);a.isTracing===it.NONE&&console.log("[mobx.trace] '"+a.name+"' tracing enabled"),a.isTracing=n?it.BREAK:it.LOG}(this,t)},t}();function jt(){Rt.inBatch>0||Rt.isRunningReactions||function(){Rt.isRunningReactions=!0;for(var t=Rt.pendingReactions,e=0;t.length>0;){100==++e&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),a=0,r=n.length;a<r;a++)n[a].runReaction()}Rt.isRunningReactions=!1}()}var Ft=_("Reaction",qt);function Gt(){return!!Rt.spyListeners.length}function Vt(t){if(Rt.spyListeners.length)for(var e=Rt.spyListeners,n=0,a=e.length;n<a;n++)e[n](t)}function zt(t){Vt(i(i({},t),{spyReportStart:!0}))}var Bt={spyReportEnd:!0};function Yt(t){Vt(t?i(i({},t),{spyReportEnd:!0}):Bt)}function Ht(){h(!1)}function Ut(t){return function(e,n,a){if(a){if(a.value)return{value:xt(t,a.value),enumerable:!1,configurable:!0,writable:!0};var r=a.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return xt(t,r.call(this))}}}return Wt(t).apply(this,arguments)}}function Wt(t){return function(e,n,a){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get:function(){},set:function(e){v(this,n,Kt(t,e))}})}}var Kt=function(t,e,n,a){return 1===arguments.length&&"function"==typeof t?xt(t.name||"<unnamed action>",t):2===arguments.length&&"function"==typeof e?xt(t,e):1===arguments.length&&"string"==typeof t?Ut(t):!0!==a?Ut(e).apply(null,arguments):void(t[e]=xt(t.name||e,n.value))};function $t(t,e,n){v(t,e,xt(e,n.bind(t)))}function Zt(t,e){void 0===e&&(e=l);var n,a=e&&e.name||t.name||"Autorun@"+f();if(e.scheduler||e.delay){var r=Qt(e),i=!1;n=new qt(a,(function(){i||(i=!0,r((function(){i=!1,n.isDisposed||n.track(s)})))}),e.onError,e.requiresObservable)}else n=new qt(a,(function(){this.track(s)}),e.onError,e.requiresObservable);function s(){t(n)}return n.schedule(),n.getDisposer()}Kt.bound=function(t,e,n,a){return!0===a?($t(t,e,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return $t(this,e,n.value||n.initializer.call(this)),this[e]},set:Ht}:{enumerable:!1,configurable:!0,set:function(t){$t(this,e,t)},get:function(){}}};var Jt=function(t){return t()};function Qt(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:Jt}function Xt(t,e,n){void 0===n&&(n=l),"boolean"==typeof n&&(n={fireImmediately:n});var a,r,i,s=n.name||"Reaction@"+f(),o=Kt(s,n.onError?(a=n.onError,r=e,function(){try{return r.apply(this,arguments)}catch(t){a.call(this,t)}}):e),u=!n.scheduler&&!n.delay,d=Qt(n),c=!0,h=!1,g=n.compareStructural?P.structural:n.equals||P.default,p=new qt(s,(function(){c||u?b():h||(h=!0,d(b))}),n.onError,n.requiresObservable);function b(){if(h=!1,!p.isDisposed){var e=!1;p.track((function(){var n=t(p);e=c||!g(i,n),i=n})),c&&n.fireImmediately&&o(i,p),c||!0!==e||o(i,p),c&&(c=!1)}}return p.schedule(),p.getDisposer()}function te(t,e,n){return ee("onBecomeUnobserved",t,e,n)}function ee(t,e,n,a){var r="function"==typeof a?Be(e,n):Be(e),i="function"==typeof a?a:n,s=r[t];return"function"!=typeof s?h(!1):(r[t]=function(){s.call(this),i.call(this)},function(){r[t]=s})}function ne(t,e,n,a){var r=(a=U(a)).defaultDecorator||(!1===a.deep?Z:K);F(t),qe(t,a.name,r.enhancer),Lt();try{for(var i in e){var s=Object.getOwnPropertyDescriptor(e,i),o=(n&&i in n?n[i]:s.get?et:r)(t,i,s,!0);o&&Object.defineProperty(t,i,o)}}finally{Dt()}return t}function ae(t){var e,n,a={name:t.name};return t.observing&&t.observing.length>0&&(a.dependencies=(e=t.observing,n=[],e.forEach((function(t){-1===n.indexOf(t)&&n.push(t)})),n).map(ae)),a}function re(t,e){if(null==t)return!1;if(void 0!==e){if(ze(t)){var n=t.$mobx;return n.values&&!!n.values[e]}return!1}return ze(t)||!!t.$mobx||L(t)||Ft(t)||It(t)}function ie(t){return 1!==arguments.length&&h(!1),re(t)}function se(t){switch(t.length){case 0:return Rt.trackingDerivation;case 1:return Be(t[0]);case 2:return Be(t[0],t[1])}}function oe(t,e){void 0===e&&(e=void 0),Lt();try{return t.apply(e)}finally{Dt()}}function ue(t){return void 0!==t.interceptors&&t.interceptors.length>0}function le(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),p((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function de(t,e){var n=ht();try{var a=t.interceptors;if(a)for(var r=0,i=a.length;r<i&&(g(!(e=a[r](e))||e.type,"Intercept handlers should return nothing or a change object"),e);r++);return e}finally{gt(n)}}function ce(t){return void 0!==t.changeListeners&&t.changeListeners.length>0}function fe(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),p((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function he(t,e){var n=ht(),a=t.changeListeners;if(a){for(var r=0,i=(a=a.slice()).length;r<i;r++)a[r](e);gt(n)}}Object.create(Error.prototype);var ge,pe,be,me,ye=(ge=!1,pe={},Object.defineProperty(pe,"0",{set:function(){ge=!0}}),Object.create(pe)[0]=1,!1===ge),ve=0,xe=function(){return function(){}}();be=xe,me=Array.prototype,void 0!==Object.setPrototypeOf?Object.setPrototypeOf(be.prototype,me):void 0!==be.prototype.__proto__?be.prototype.__proto__=me:be.prototype=me,Object.isFrozen(Array)&&["constructor","push","shift","concat","pop","unshift","replace","find","findIndex","splice","reverse","sort"].forEach((function(t){Object.defineProperty(xe.prototype,t,{configurable:!0,writable:!0,value:Array.prototype[t]})}));var _e=function(){function t(t,e,n,a){this.array=n,this.owned=a,this.values=[],this.lastKnownLength=0,this.atom=new E(t||"ObservableArray@"+f()),this.enhancer=function(n,a){return e(n,a,t+"[..]")}}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.dehanceValues=function(t){return void 0!==this.dehancer&&t.length>0?t.map(this.dehancer):t},t.prototype.intercept=function(t){return le(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),fe(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),a=0;a<t-e;a++)n[a]=void 0;this.spliceWithArray(e,0,n)}else this.spliceWithArray(t,e-t)},t.prototype.updateArrayLength=function(t,e){if(t!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed. Did you use peek() to change it?");this.lastKnownLength+=e,e>0&&t+e+1>ve&&Ie(t+e+1)},t.prototype.spliceWithArray=function(t,e,n){var a=this;lt(this.atom);var r=this.values.length;if(void 0===t?t=0:t>r?t=r:t<0&&(t=Math.max(0,r+t)),e=1===arguments.length?r-t:null==e?0:Math.max(0,Math.min(e,r-t)),void 0===n&&(n=u),ue(this)){var i=de(this,{object:this.array,type:"splice",index:t,removedCount:e,added:n});if(!i)return u;e=i.removedCount,n=i.added}var s=(n=0===n.length?n:n.map((function(t){return a.enhancer(t,void 0)}))).length-e;this.updateArrayLength(r,s);var o=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,o),this.dehanceValues(o)},t.prototype.spliceItemsIntoValues=function(t,e,n){var a;if(n.length<1e4)return(a=this.values).splice.apply(a,o([t,e],n));var r=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),r},t.prototype.notifyArrayChildUpdate=function(t,e,n){var a=!this.owned&&Gt(),r=ce(this),s=r||a?{object:this.array,type:"update",index:t,newValue:e,oldValue:n}:null;a&&zt(i(i({},s),{name:this.atom.name})),this.atom.reportChanged(),r&&he(this,s),a&&Yt()},t.prototype.notifyArraySplice=function(t,e,n){var a=!this.owned&&Gt(),r=ce(this),s=r||a?{object:this.array,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;a&&zt(i(i({},s),{name:this.atom.name})),this.atom.reportChanged(),r&&he(this,s),a&&Yt()},t}(),Te=function(t){function e(e,n,a,r){void 0===a&&(a="ObservableArray@"+f()),void 0===r&&(r=!1);var i=t.call(this)||this,s=new _e(a,n,i,r);if(x(i,"$mobx",s),e&&e.length){var o=Tt(!0);i.spliceWithArray(0,0,e),Ot(o)}return ye&&Object.defineProperty(s.array,"0",Oe),i}return r(e,t),e.prototype.intercept=function(t){return this.$mobx.intercept(t)},e.prototype.observe=function(t,e){return void 0===e&&(e=!1),this.$mobx.observe(t,e)},e.prototype.clear=function(){return this.splice(0)},e.prototype.concat=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this.$mobx.atom.reportObserved(),Array.prototype.concat.apply(this.peek(),t.map((function(t){return Ce(t)?t.peek():t})))},e.prototype.replace=function(t){return this.$mobx.spliceWithArray(0,this.$mobx.values.length,t)},e.prototype.toJS=function(){return this.slice()},e.prototype.toJSON=function(){return this.toJS()},e.prototype.peek=function(){return this.$mobx.atom.reportObserved(),this.$mobx.dehanceValues(this.$mobx.values)},e.prototype.find=function(t,e,n){void 0===n&&(n=0);var a=this.findIndex.apply(this,arguments);return-1===a?void 0:this.get(a)},e.prototype.findIndex=function(t,e,n){void 0===n&&(n=0);for(var a=this.peek(),r=a.length,i=n;i<r;i++)if(t.call(e,a[i],i,this))return i;return-1},e.prototype.splice=function(t,e){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];switch(arguments.length){case 0:return[];case 1:return this.$mobx.spliceWithArray(t);case 2:return this.$mobx.spliceWithArray(t,e)}return this.$mobx.spliceWithArray(t,e,n)},e.prototype.spliceWithArray=function(t,e,n){return this.$mobx.spliceWithArray(t,e,n)},e.prototype.push=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.$mobx;return n.spliceWithArray(n.values.length,0,t),n.values.length},e.prototype.pop=function(){return this.splice(Math.max(this.$mobx.values.length-1,0),1)[0]},e.prototype.shift=function(){return this.splice(0,1)[0]},e.prototype.unshift=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.$mobx;return n.spliceWithArray(0,0,t),n.values.length},e.prototype.reverse=function(){var t=this.slice();return t.reverse.apply(t,arguments)},e.prototype.sort=function(t){var e=this.slice();return e.sort.apply(e,arguments)},e.prototype.remove=function(t){var e=this.$mobx.dehanceValues(this.$mobx.values).indexOf(t);return e>-1&&(this.splice(e,1),!0)},e.prototype.move=function(t,e){function n(t){if(t<0)throw new Error("[mobx.array] Index out of bounds: "+t+" is negative");var e=this.$mobx.values.length;if(t>=e)throw new Error("[mobx.array] Index out of bounds: "+t+" is not smaller than "+e)}if(n.call(this,t),n.call(this,e),t!==e){var a,r=this.$mobx.values;a=t<e?o(r.slice(0,t),r.slice(t+1,e+1),[r[t]],r.slice(e+1)):o(r.slice(0,e),[r[t]],r.slice(e,t),r.slice(t+1)),this.replace(a)}},e.prototype.get=function(t){var e=this.$mobx;if(e){if(t<e.values.length)return e.atom.reportObserved(),e.dehanceValue(e.values[t]);console.warn("[mobx.array] Attempt to read an array index ("+t+") that is out of bounds ("+e.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},e.prototype.set=function(t,e){var n=this.$mobx,a=n.values;if(t<a.length){lt(n.atom);var r=a[t];if(ue(n)){var i=de(n,{type:"update",object:this,index:t,newValue:e});if(!i)return;e=i.newValue}(e=n.enhancer(e,r))!==r&&(a[t]=e,n.notifyArrayChildUpdate(t,e,r))}else{if(t!==a.length)throw new Error("[mobx.array] Index out of bounds, "+t+" is larger than "+a.length);n.spliceWithArray(t,0,[e])}},e}(xe);C(Te.prototype,(function(){this.$mobx.atom.reportObserved();var t=this,e=0;return R({next:function(){return e<t.length?{value:t[e++],done:!1}:{done:!0,value:void 0}}})})),Object.defineProperty(Te.prototype,"length",{enumerable:!1,configurable:!0,get:function(){return this.$mobx.getArrayLength()},set:function(t){this.$mobx.setArrayLength(t)}}),v(Te.prototype,A(),"Array"),["every","filter","forEach","indexOf","join","lastIndexOf","map","reduce","reduceRight","slice","some","toString","toLocaleString"].forEach((function(t){var e=Array.prototype[t];g("function"==typeof e,"Base function not defined on Array prototype: '"+t+"'"),v(Te.prototype,t,(function(){return e.apply(this.peek(),arguments)}))})),function(t,e){for(var n=0;n<e.length;n++)v(t,e[n],t[e[n]])}(Te.prototype,["constructor","intercept","observe","clear","concat","get","replace","toJS","toJSON","peek","find","findIndex","splice","spliceWithArray","push","pop","set","shift","unshift","reverse","sort","remove","move","toString","toLocaleString"]);var Oe=we(0);function we(t){return{enumerable:!1,configurable:!1,get:function(){return this.get(t)},set:function(e){this.set(t,e)}}}function Se(t){Object.defineProperty(Te.prototype,""+t,we(t))}function Ie(t){for(var e=ve;e<t;e++)Se(e);ve=t}Ie(1e3);var Ne=_("ObservableArrayAdministration",_e);function Ce(t){return m(t)&&Ne(t.$mobx)}var Re={},Ae=function(){function t(t,e,n){if(void 0===e&&(e=z),void 0===n&&(n="ObservableMap@"+f()),this.enhancer=e,this.name=n,this.$mobx=Re,this._keys=new Te(void 0,B,this.name+".keys()",!0),"function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(t)}return t.prototype._has=function(t){return this._data.has(t)},t.prototype.has=function(t){var e=this;if(!Rt.trackingDerivation)return this._has(t);var n=this._hasMap.get(t);if(!n){var a=n=new wt(this._has(t),B,this.name+"."+ke(t)+"?",!1);this._hasMap.set(t,a),te(a,(function(){return e._hasMap.delete(t)}))}return n.get()},t.prototype.set=function(t,e){var n=this._has(t);if(ue(this)){var a=de(this,{type:n?"update":"add",object:this,newValue:e,name:t});if(!a)return this;e=a.newValue}return n?this._updateValue(t,e):this._addValue(t,e),this},t.prototype.delete=function(t){var e=this;if(ue(this)&&!(r=de(this,{type:"delete",object:this,name:t})))return!1;if(this._has(t)){var n=Gt(),a=ce(this),r=a||n?{type:"delete",object:this,oldValue:this._data.get(t).value,name:t}:null;return n&&zt(i(i({},r),{name:this.name,key:t})),oe((function(){e._keys.remove(t),e._updateHasMapEntry(t,!1),e._data.get(t).setNewValue(void 0),e._data.delete(t)})),a&&he(this,r),n&&Yt(),!0}return!1},t.prototype._updateHasMapEntry=function(t,e){var n=this._hasMap.get(t);n&&n.setNewValue(e)},t.prototype._updateValue=function(t,e){var n=this._data.get(t);if((e=n.prepareNewValue(e))!==Rt.UNCHANGED){var a=Gt(),r=ce(this),s=r||a?{type:"update",object:this,oldValue:n.value,name:t,newValue:e}:null;a&&zt(i(i({},s),{name:this.name,key:t})),n.setNewValue(e),r&&he(this,s),a&&Yt()}},t.prototype._addValue=function(t,e){var n=this;oe((function(){var a=new wt(e,n.enhancer,n.name+"."+ke(t),!1);n._data.set(t,a),e=a.value,n._updateHasMapEntry(t,!0),n._keys.push(t)}));var a=Gt(),r=ce(this),s=r||a?{type:"add",object:this,name:t,newValue:e}:null;a&&zt(i(i({},s),{name:this.name,key:t})),r&&he(this,s),a&&Yt()},t.prototype.get=function(t){return this.has(t)?this.dehanceValue(this._data.get(t).get()):this.dehanceValue(void 0)},t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.keys=function(){return this._keys[N()]()},t.prototype.values=function(){var t=this,e=0;return R({next:function(){return e<t._keys.length?{value:t.get(t._keys[e++]),done:!1}:{value:void 0,done:!0}}})},t.prototype.entries=function(){var t=this,e=0;return R({next:function(){if(e<t._keys.length){var n=t._keys[e++];return{value:[n,t.get(n)],done:!1}}return{done:!0}}})},t.prototype.forEach=function(t,e){var n=this;this._keys.forEach((function(a){return t.call(e,n.get(a),a,n)}))},t.prototype.merge=function(t){var e=this;return Ee(t)&&(t=t.toJS()),oe((function(){y(t)?Object.keys(t).forEach((function(n){return e.set(n,t[n])})):Array.isArray(t)?t.forEach((function(t){var n=s(t,2);return e.set(n[0],n[1])})):T(t)?t.constructor!==Map?h("Cannot initialize from classes that inherit from Map: "+t.constructor.name):t.forEach((function(t,n){return e.set(n,t)})):null!=t&&h("Cannot initialize map from "+t)})),this},t.prototype.clear=function(){var t=this;oe((function(){ft((function(){t._keys.slice().forEach((function(e){return t.delete(e)}))}))}))},t.prototype.replace=function(t){var e=this;return oe((function(){for(var n,a=T(n=t)||Ee(n)?n:Array.isArray(n)?new Map(n):y(n)?new Map(Object.entries(n)):h("Cannot convert to map from '"+n+"'"),r=e._keys,i=Array.from(a.keys()),s=!1,o=0;o<r.length;o++){var u=r[o];r.length===i.length&&u!==i[o]&&(s=!0),a.has(u)||(s=!0,e.delete(u))}a.forEach((function(t,n){e._data.has(n)||(s=!0),e.set(n,t)})),s&&e._keys.replace(i)})),this},Object.defineProperty(t.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),t.prototype.toPOJO=function(){var t=this,e={};return this._keys.forEach((function(n){return e["symbol"==typeof n?n:ke(n)]=t.get(n)})),e},t.prototype.toJS=function(){var t=this,e=new Map;return this._keys.forEach((function(n){return e.set(n,t.get(n))})),e},t.prototype.toJSON=function(){return this.toPOJO()},t.prototype.toString=function(){var t=this;return this.name+"[{ "+this._keys.map((function(e){return ke(e)+": "+t.get(e)})).join(", ")+" }]"},t.prototype.observe=function(t,e){return fe(this,t)},t.prototype.intercept=function(t){return le(this,t)},t}();function ke(t){return t&&t.toString?t.toString():new String(t).toString()}C(Ae.prototype,(function(){return this.entries()})),x(Ae.prototype,A(),"Map");var Ee=_("ObservableMap",Ae),Le={},De=function(){function t(t,e,n){if(void 0===e&&(e=z),void 0===n&&(n="ObservableSet@"+f()),this.name=n,this.$mobx=Le,this._data=new Set,this._atom=function(t,e,n){void 0===e&&(e=b),void 0===n&&(n=b);var a=new E(t);return ee("onBecomeObserved",a,e,void 0),te(a,n),a}(this.name),"function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(t,a){return e(t,a,n)},t&&this.replace(t)}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.clear=function(){var t=this;oe((function(){ft((function(){t._data.forEach((function(e){t.delete(e)}))}))}))},t.prototype.forEach=function(t,e){var n=this;this._data.forEach((function(a){t.call(e,a,a,n)}))},Object.defineProperty(t.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.add=function(t){var e=this;if(lt(this._atom),ue(this)&&!(r=de(this,{type:"add",object:this,newValue:t})))return this;if(!this.has(t)){oe((function(){e._data.add(e.enhancer(t,void 0)),e._atom.reportChanged()}));var n=Gt(),a=ce(this),r=a||n?{type:"add",object:this,newValue:t}:null;a&&he(this,r)}return this},t.prototype.delete=function(t){var e=this;if(ue(this)&&!(r=de(this,{type:"delete",object:this,oldValue:t})))return!1;if(this.has(t)){var n=Gt(),a=ce(this),r=a||n?{type:"delete",object:this,oldValue:t}:null;return oe((function(){e._atom.reportChanged(),e._data.delete(t)})),a&&he(this,r),!0}return!1},t.prototype.has=function(t){return this._atom.reportObserved(),this._data.has(this.dehanceValue(t))},t.prototype.entries=function(){var t=0,e=w(this.keys()),n=w(this.values());return R({next:function(){var a=t;return t+=1,a<n.length?{value:[e[a],n[a]],done:!1}:{done:!0}}})},t.prototype.keys=function(){return this.values()},t.prototype.values=function(){this._atom.reportObserved();var t,e=this,n=0;return void 0!==this._data.values?t=w(this._data.values()):(t=[],this._data.forEach((function(e){return t.push(e)}))),R({next:function(){return n<t.length?{value:e.dehanceValue(t[n++]),done:!1}:{done:!0}}})},t.prototype.replace=function(t){var e=this;return Pe(t)&&(t=t.toJS()),oe((function(){Array.isArray(t)?(e.clear(),t.forEach((function(t){return e.add(t)}))):O(t)?(e.clear(),t.forEach((function(t){return e.add(t)}))):null!=t&&h("Cannot initialize set from "+t)})),this},t.prototype.observe=function(t,e){return fe(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.toJS=function(){return new Set(this)},t.prototype.toString=function(){return this.name+"[ "+w(this.keys()).join(", ")+" ]"},t}();C(De.prototype,(function(){return this.values()})),x(De.prototype,A(),"Set");var Pe=_("ObservableSet",De),Me=function(){function t(t,e,n){this.target=t,this.name=e,this.defaultEnhancer=n,this.values={}}return t.prototype.read=function(t,e){if(this.target===t||(this.illegalAccess(t,e),this.values[e]))return this.values[e].get()},t.prototype.write=function(t,e,n){var a=this.target;a!==t&&this.illegalAccess(t,e);var r=this.values[e];if(r instanceof St)r.set(n);else{if(ue(this)){if(!(u=de(this,{type:"update",object:a,name:e,newValue:n})))return;n=u.newValue}if((n=r.prepareNewValue(n))!==Rt.UNCHANGED){var s=ce(this),o=Gt(),u=s||o?{type:"update",object:a,oldValue:r.value,name:e,newValue:n}:null;o&&zt(i(i({},u),{name:this.name,key:e})),r.setNewValue(n),s&&he(this,u),o&&Yt()}}},t.prototype.remove=function(t){if(this.values[t]){var e=this.target;if(ue(this)&&!(s=de(this,{object:e,name:t,type:"remove"})))return;try{Lt();var n=ce(this),a=Gt(),r=this.values[t].get();this.keys&&this.keys.remove(t),delete this.values[t],delete this.target[t];var s=n||a?{type:"remove",object:e,oldValue:r,name:t}:null;a&&zt(i(i({},s),{name:this.name,key:t})),n&&he(this,s),a&&Yt()}finally{Dt()}}},t.prototype.illegalAccess=function(t,e){console.warn("Property '"+e+"' of '"+t+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},t.prototype.observe=function(t,e){return fe(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.getKeys=function(){var t=this;return void 0===this.keys&&(this.keys=new Te(Object.keys(this.values).filter((function(e){return t.values[e]instanceof wt})),B,"keys("+this.name+")",!0)),this.keys.slice()},t}();function qe(t,e,n){void 0===e&&(e=""),void 0===n&&(n=z);var a=t.$mobx;return a||(y(t)||(e=(t.constructor.name||"ObservableObject")+"@"+f()),e||(e="ObservableObject@"+f()),x(t,"$mobx",a=new Me(t,e,n)),a)}var je=Object.create(null),Fe=Object.create(null);function Ge(t){return t.$mobx||(F(t),t.$mobx)}var Ve=_("ObservableObjectAdministration",Me);function ze(t){return!!m(t)&&(F(t),Ve(t.$mobx))}function Be(t,e){if("object"==typeof t&&null!==t){if(Ce(t))return void 0!==e&&h(!1),t.$mobx.atom;if(Pe(t))return t.$mobx;if(Ee(t)){var n=t;return void 0===e?Be(n._keys):((a=n._data.get(e)||n._hasMap.get(e))||h(!1),a)}var a;if(F(t),ze(t))return e?((a=t.$mobx.values[e])||h(!1),a):h(!1);if(L(t)||It(t)||Ft(t))return t}else if("function"==typeof t&&Ft(t.$mobx))return t.$mobx;return h(!1)}var Ye=Object.prototype.toString;function He(t,e,n){return void 0===n&&(n=-1),function t(e,n,a,r,i){if(e===n)return 0!==e||1/e==1/n;if(null==e||null==n)return!1;if(e!=e)return n!=n;var s=typeof e;if("function"!==s&&"object"!==s&&"object"!=typeof n)return!1;e=Ue(e),n=Ue(n);var o=Ye.call(e);if(o!==Ye.call(n))return!1;switch(o){case"[object RegExp]":case"[object String]":return""+e==""+n;case"[object Number]":return+e!=+e?+n!=+n:0==+e?1/+e==1/n:+e==+n;case"[object Date]":case"[object Boolean]":return+e==+n;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(e)===Symbol.valueOf.call(n)}var u="[object Array]"===o;if(!u){if("object"!=typeof e||"object"!=typeof n)return!1;var l=e.constructor,d=n.constructor;if(l!==d&&!("function"==typeof l&&l instanceof l&&"function"==typeof d&&d instanceof d)&&"constructor"in e&&"constructor"in n)return!1}if(0===a)return!1;a<0&&(a=-1),i=i||[];for(var c=(r=r||[]).length;c--;)if(r[c]===e)return i[c]===n;if(r.push(e),i.push(n),u){if((c=e.length)!==n.length)return!1;for(;c--;)if(!t(e[c],n[c],a-1,r,i))return!1}else{var f=Object.keys(e),h=void 0;if(c=f.length,Object.keys(n).length!==c)return!1;for(;c--;)if(!We(n,h=f[c])||!t(e[h],n[h],a-1,r,i))return!1}return r.pop(),i.pop(),!0}(t,e,n)}function Ue(t){return Ce(t)?t.peek():T(t)||Ee(t)?w(t.entries()):O(t)||Pe(t)?w(t.entries()):t}function We(t,e){return Object.prototype.hasOwnProperty.call(t,e)}"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function(t){return Rt.spyListeners.push(t),p((function(){Rt.spyListeners=Rt.spyListeners.filter((function(e){return e!==t}))}))},extras:{getDebugName:function(t,e){return(void 0!==e?Be(t,e):ze(t)||Ee(t)||Pe(t)?function t(e,n){return e||h("Expecting some object"),void 0!==n?t(Be(e,n)):L(e)||It(e)||Ft(e)?e:Ee(e)||Pe(e)?e:(F(e),e.$mobx?e.$mobx:void h(!1))}(t):Be(t)).name}},$mobx:"$mobx"})},"2ykv":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),a=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"3+CB":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="ko-KR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>네비게이션 전환</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>현황판</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>클러스터</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>호스트들</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>모니터들</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>서비스들</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD들</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>설정</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>크러쉬맵</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>메니저 모듈들</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>로그들</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>풀들</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>블럭</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>이미지들</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>미러링</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>파일시스템들</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>오브젝트게이트웨이</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>데몬들</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>버킷들</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>언어선택</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>패널 데이타 로딩 중...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>그라파나 타임 픽커</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>설정 초기화</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>뒤로</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>데이타 로딩 실폐</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>선택된</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>발견된</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>전체</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>이름</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>설명</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>자세한 설명</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>기본값</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>데모 기본값</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>값들</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>저장하기</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>크러쉬맵 보기</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>로딩중...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>호스트이름</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>이 필드는 필수적입니다.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>예, 확실합니다.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>취소</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>닫기</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>호스트 목록들</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>통합 성능치</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>항목들을 찾을 수 없음</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>클러스터 로그들</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>감사 로그들</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>설정 로딩 중</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>설정을 로드할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>관리모듈 편집하기</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>입력된 값이 유효한 UUID가 아닙니다, 예.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>입력된 값은 유효한 IP주소 여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>입력된 값은 적어도 하나의 숫자를 필요로 합니다.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>입력 된 값은 숫자 또는 십진수여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>갱신</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>클러스터 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>몬맵 변경시간</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>몬맵 변경번호</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>정족수 일치번호</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>정족수 모니터상태</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>요구되는 일치번호</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>요구되는 모니터상태</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>정족수에 포함</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>정족수 미포함</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>추가</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>특징들</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>클러스터-수준의 OSD 플레그들</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>제출</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>자세한 옵션...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 복구 우선순위</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>우선순위</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>우선 순위 값 맞춤 설정</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>이 필드는 요구됩니다!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>값은 0과 1사이어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>재-조정</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, 선택, 1 {깊이 } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, 선택, 1 {깊이 } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 목록들</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>값</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>편집</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>삭제</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>건강상태</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>통계들</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>클라이언트들</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>모든 클라이언트 접근가능</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>주소들</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>필수 입력란</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>반드시 하나 이상의 쉼표로 구분 된 값을 포함해야 함</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>예를들면:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>접근형태</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>클라이언트들 추가</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 사용가능 클러스터 없음 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 클러스터 선택 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>데몬 추가하기</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>스토리지 백엔드</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 이용가능한 데이타풀 없음 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 스토리지 백엔드 선택 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>객체 게이트웨이 사용자</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 사용가능한 사용자들 없음 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 객체 게이트웨이 사용자 선택 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 사용자 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 사용가능한 클라이언트 없음 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephx 클라이언트 선택 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 이름</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>보안 레이블</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>보안 레이블 사용</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 경로</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>경로는 \'/\'로 시작해야하며 그 뒤에 단어가 올 수 있습니다</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>새로운 디렉토리가 만들어 질 것입니다</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>경로</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>경로는 하나의 \'/\' 또는 하나의 단어 일 수 있습니다</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>새로운 버킷이 만들어 질 것입니다</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 프로토콜</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 태크</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>클라이언트는 하위 디렉토리를 마운트 할 수 없습니다 (즉, Tag = foo 인 경우 클라이언트가 foo / baz를 마운트하지 못할 수 있습니다).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>다른 태그 옵션을 사용하면 같은 경로를 여러 번 내보낼 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>다른 Pseudo 옵션을 사용하면 동일한 경로를 여러 번 내보낼 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 사용가능한 접근형태 없음 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 접근형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 사용가능한 squash 없음 --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 어떤 종류의 사용자 ID 스쿼시가 수행되는지 선택하세요 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>전송프로토콜</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Ceph 사용을 환영합니다.</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>사용자이름이 필요합니다</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>암호가 필요합니다</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>로그인</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>미안합니다. 사용자가 Ceph내에 존재하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>금지됨</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>미안합니다. 당신이 요청할 것을 열람하는 것이 허락되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 설정들</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>로컬 구성 값을 제거하십시오. 상위 구성 값은 계승되고 대신 사용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>최소값은 0입니다.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>풀 목록들</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>이름은 영숫자, 대시 및 밑줄로만 구성 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>선택한 Erasure Code 프로파일 이름이 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>플러그인</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>데이터 덩어리들 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>반드시 2보다 크거나 같아야합니다.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>코딩 덩어리들 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>반드시 1보다 크거나 같아야합니다.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>내구성 평가(c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>지역 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>크러쉬 실패 도메인</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>크러쉬 지역</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>없음</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>기술</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>패킷크기</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>크러쉬루트</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>크러쉬 장치 클래스</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>모든</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>디렉토리</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>이름...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>선택한 Ceph 풀이름이 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>풀 형태</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 풀 형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>게재위치 그룹</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>적어도 하나의 게재위치 그룹이 필요함!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>클러스터는 이 많은 PG들를 처리 할 수 없습니다. 필요한 PG 양을 다시 계산하십시오.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>계산 도움말</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>복제되는 크기</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>플레그들</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 덮어쓰기</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>응용프로그램들</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Erasure Code 프로파일</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 사용가능한 Erasure Code 프로파일 없음 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 한개의 Erasure Code 프로파일 선택 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>크러쉬 룰셋</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 크러쉬 룰 선택 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>크러쉬 룰</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>크러쉬 단계들</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>압축</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>양식</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>알고리즘</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 이용가능한 Erasure 압축알고리즘 없음 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>최소 blob 크기</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>예) 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>값은 0보다 커야합니다</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>최대 blob 크기</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>예) 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>값은 최소 blob 크기보다 커야 합니다</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>비율</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>압축율</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>값은 0.0과 1.0 사이 여야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>예., 100 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>세부설명</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>성능 세부정보들</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>케쉬 계층들 상세설명들</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>이미지를 휴지통에 이동</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>보호가 만료되는 </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>보호되지 않음</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>날짜 형식 오류. "YYYY-MM-DD HH:mm:ss" 형식으로 지정하세요.</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>보호기간이 이미 만료되었습니다. 더 미래의 날짜를 선택하거나 공란으로 남겨두세요.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>이미지 옮기기</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>개관</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>타겟들</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>인증 탐색</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>사용자이름은 8~64자까지 길이의 문자들을 가져야 하며 그리고, 오직 , \'.\', \'@\', \'-\', \'_\', \':\' 등의 특수 문자들만을 포함가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>암호</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>공동 사용자</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>공통 암호</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>이용가능한 정보:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI 타겟이 이용 불가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>풀</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>데이타 풀</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>생성된</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>크기</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>오브젝트들</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>객체크기</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>준비된</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>이용불가</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>준비된 총계</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>스트라이핑 단위</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>스트라이핑 횟수</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>상위</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>블록 이름 접두사</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>순서</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>스냅삿</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>이미지</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>이 설정은 전역 값을 덮어씁니다.</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>글로벌</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>이것은 전역 값입니다. 이 이미지에 대해 이 옵션의 값이 설정되지 않았습니다.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' 와 \'@\' 문자는 사용불가입니다.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 이용가능한 rbd풀 없음 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 풀 선택 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>전용 데이타 풀들을 사용하세요</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>데이타 풀</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>RBD의 객체-데이타를 저장하고 있는 전용 풀</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>사이즈를 증가시켜야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>자세한</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>분산저장</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>분산저장단위</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 분산저장단위 선택 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>분산저장 개수가 정의되어 있으므로 이 필드는 필수입니다!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>분산저장단위는 객체크기보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>분산저장 갯수</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>분산저장 단위가 정의되어 있으므로 이 필드는 필수입니다!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>분산저장 갯수는 반드시 0보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>롤백하려고 합니다.</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>휴지통 비우기</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>모든</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>풀:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>풀 이름:</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>이미지 복구하기</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>복구를 위해</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>이미지들의 새로운 이름을 입력하고 클릭하세요</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>새로운 이름</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>폐기될</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>까지 보호됨</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 토폴로지</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>기본설정 값들로 부터 인자를 변경하는 것은 일반적으로 필요하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>설정들</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>백스토어</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>확인</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>고급설정들</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>타겟 IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN이 잘못된 패턴을 가지고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Key\n예를들면: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>추가 정보</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>이 타겟은 고급설정들을 수정했습니다.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>포털</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>포털 추가</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>이 이미지는 설정들을 수정했습니다. </target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>이미지 추가</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 인증</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>개시자들</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>개시자들</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>클라이언트 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>개시자 IQN은 유일해야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>사용자이름은 8~64자까지 길이의 문자들을 가져야 하며 그리고, 오직 , \'.\', \'@\', \'-\', \'_\', \':\' 등의 특수 문자들만 포함이 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>개시자는 하나의 그룹에 속해야 하고, 이미지는 그룹안에서 설정합니다.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>추가된 아이템들이 없음</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>게시자 추가</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>그룹들</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>그룹</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>그룹추가</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>휴지통</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>이슈들</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>동기화중</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>준비됨</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>풀 미러모드를 편집하기</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>상대방 클러스터들은 미러를 단절하기 전에 반드시 제거되어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>클러스터 이름</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>클러스터 이름이 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX 아이디</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX 아이디...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX 아이디가 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>모니터 주소들</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>콤마로 분리된 주소들...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>모니터 주소가 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 키</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64로 인코딩 된 키 ...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 키는 반드시 base64로 인코드 되어야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>성능 카운터들을 사용 할 수 없음</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>데몬 목록들</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>성능 카운터</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>버킷데이타 적재 중</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>값이 유효하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>선택한 이름이 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>소유자</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 사용자 선택 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>이용가능</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>색인형식</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>위치규칙</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>표시</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>최대 마커</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>버젼</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>마스터 버젼</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>수정된 시간</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>제로그룹</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>버킷 할당량</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>최대 크기</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>무제한</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>최대 객체들</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>사용자명</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 사용자명 선택 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>자동생성된 키</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>접근 키</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>비밀 키</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>전체 이름</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>전자우편 주소</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>유예되다.</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>시스템</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>최대 버킷들</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>보조사용자들</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>능력치들</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>사용자 할당량</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>보기</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>키들</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>형태</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 형태 선택 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>권한</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 권한 선택 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>보조사용자</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>선택한 보조사용자 아이디가 이미 사용중입니다.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>읽기, 쓰기</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>가득찬</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>스위프트 키</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>자동생선된 비밀</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>사용자 데이타 적재 중...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>사용자 데이타를 적재할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>선택된 사용자 아이디가 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>이것은 유효한 전자우편 주소가 아닙니다.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>선택한 전자우편 주소가 이미 사용 중입니다.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>최대 버킷들</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>설정해제됨</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>커스텀</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 키</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>보조사용자가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>키가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>스위프트</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>능력치가 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>무제한 크기</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>최대 크기</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>무제한 객체들</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>최대 객체들</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>입력된 값은 반드시 0보다 커야 합니다.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>세부설명...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>권한들</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>역할들</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>암호 확인</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>암호 확인이 암호와 일치하지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>전자우편</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>유효하지않는 전자우편.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>당신의 사용자로부터 "사용자 읽기 / 업데이트"권한을 제거하려고합니다.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>계속하면 모든 사용자에게 역할을 추가하거나 제거 할 수 없게됩니다.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>계속 진행하기를 원하십니까?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>도움말</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>문서</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>대하여</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>대쉬보드 설정</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>사용자 관리</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>로그인된 사용자</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>로그아웃</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>속성들 (OSD 맵)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>메타데이타 사용할 수 없음</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>메타데이타</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>성능 카운터</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>쓰기</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>읽기</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>히스토그램</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>현재 값들</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>최소</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>최대</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>소스</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>수준</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>수행시간에 갱신가능함(편집가능)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>테크들</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>열거형 값들</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>추가로 더보기</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>클러스터 상태</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>관리자 데몬들</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>오브젝트 게이트웨이들</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>메타데이타 서버들</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 게이트웨이들</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>클라이언트 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>클라이언트 처리량</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>클라이언트 읽기/쓰기</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>복구 처리량</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>세정작업</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>성능</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>원시용량</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>OSD당 PG들</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 상태들</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>용량</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>순위</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>현재</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>업데이트된 검색 인증</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>사용가능한 포탈들이 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>사용가능한 이미지들이 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>사용할 수있는 이미지가 없습니다. 대상에 이미지를 추가했는지 확인하십시오.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>사용할 수있는 개시자가 없습니다. 대상에 개시자를 추가했는지 확인하십시오.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>타겟</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>읽은 바이트들</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>쓰기 바이트들</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>읽기 Ops</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>쓰기 Ops</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O 이래로</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>인스탄스</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>이슈</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>진행중</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>편집모드</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>상대방 추가</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>상대방 편집</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>상대방 삭제</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>리더</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># 로컬</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># 원격</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>상대방 미러</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>키</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>딥 패턴</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>계층화</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>배타적인 락</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>오프젝트-맵(배타적인-락을 요구한다)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>저널링(배탁적인-락을 요구합니다.)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>보호안됨</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 스냅샷 롤백</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>롤백</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 스냅샷</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>삭제될 </target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>아이디</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>형태</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>상태</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>버젼</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>호스트</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>루트</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>대기 데몬들</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>순위</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>데몬</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>활동</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>덴트리들</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>아이노드들</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>사용량</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>갱신된</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>이 값은 런타임에 업데이트 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>데몬들 / 클라이언트들은 모니터 구성 데이터베이스에서이 값을 가져 오지 않습니다. \'ceph config set ...\'을 통해이 옵션을 설정하는 것은 허락되지 않습니다. 이 옵션은 ceph.conf 또는 명령 줄을 통해 구성해야합니다.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>옵션은 데몬 시작 중에 만 적용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>옵션은 클러스터 생성할 때 만 영향을 줍니다.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>옵션은 데몬 생성할 때만 영향을줍니다.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>서비스</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>현재값</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>편집가능</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>사용가능</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>사용불가</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>재-접속 중, 기다려 주세요...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>공개 주소</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>열린 세션들</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>들어올 수 없는</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>이전에 마크 아웃 된 OSD는 시작시 다시 표시되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>나갈 수 없는</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD들은 구성된 간격 후에는 자동으로 표시되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>살아나지 않는</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD는 시작할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>죽일 수 없는</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>모니터가 OSD들의 다운을 표시하지 않도록 OSD 장애 보고서가 무시되고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>멈출</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>읽기와 쓰기를 멈춤</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>스크러빙 않됨</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>스크러빙이 비활성화되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>딥 스크럽 안됨</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>딥 스크러빙이 비활성되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>백필 없음</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG들의 백필이 일시중지 되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>복구 않됨</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG들의 복구가 일시중지 되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>비트단위 정렬</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>비트단위 정렬을 사용하세요</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>완전삭제된 스냅디렉토리들</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD들이 변화된 스냅셋을 가지고 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>삭제된 복구들</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>피어링 대신 복구 중에 수행된 삭제물들</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 로그 하드 한계</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>pg 로그 길이에 하드 한계를 넣으세요</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>갱신된 OSD 플래그들</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>아웃</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>인</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>다운</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>표시</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 손실</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>손실 표시</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>완전제거</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>완전제거된</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>파괴된</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>삭제</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>읽은 바이트들</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>쓰여진 바이트들</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>읽기 ops</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>쓰기 ops</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>최대 백필들</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>최대 활성화를 복구하기</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>최대 단일 시작을 복구하기</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>잠자기를 복구하기</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>일</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>심각도</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>시작된</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>사용된</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>이용가능:</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>깨끗한</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>정상동작중</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>경고</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>알려지지 않은</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>정상</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>파일시스템들 없음</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>활성화된</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>대기중인</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>이용불가</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>활성화된 데몬들</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>정족수</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganesha 서비스가 설정되지 않음</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>전송</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 사용자</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 파일시스템</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(전역 구성에서 상속)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>전역 구성에서 상속</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>- 어떤 종류의 사용자 ID 스쿼시가 수행되는지 선택 -</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>사용가능한 데몬이 없읍니다.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>캐쉬모드</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>최소 퇴거 연령</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>최소 플러시 연령</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>목표 최대 바이트들</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>목표 최대 오브젝트들</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>추가된 응용프로그램 없음</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>응용프로그램 한계에 도달함</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>하나의 풀은 오직 네개의 응용프로그램 정의들을 가질 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target> \'_a-zA-Z0-9\' 문자들만 허락됨</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>최대 길이는 128글자이다.</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>필터 또는 추가된 응용프로그램들</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>응용프로그램 추가</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>Erasure 코드 프로파일</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>복제 크기</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>마지막 변경</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Erasure 코드화된 프로파일</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>크러쉬 룰셋</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>버킷</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>버킷들</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>사용자</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>사용자들</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>범위</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>읽기</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>만들기</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>시스템 롤</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>갱신된 사용자</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>계속</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>당신의 롤들이 변경되어 당신은 자동적으로 로그아웃되었습니다.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>각각의 오브젝트들은 데이타-청크 부분들로 분리되어, 각기 다른 OSD에 보관됩니다.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>각 오브젝트들에 대한 코딩 청크를 계산하고 서로 다른 OSD에 저장합니다. \n코딩된 청크의 수는 데이터 손실없이 작동중지 되어 질 수있는 OSD의 숫자이기도합니다.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Jerasure 플러그인은 가장 일반적이고 유연한 플러그인으로,\n또한 Ceph erasure 코드 풀의 기본값이기도합니다.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>보다 유연한 기술은 reed_sol_van입니다 : k와 m을 설정하면 충분합니다. \ncauchy_good 기술은 빠를 수 있지만 패킷크기를 주의깊게 선택해야합니다. \nreed_sol_r6_op, liberation, blaum_roth, liber8tion은 모두 m = 2로만 구성 할 수 있다는 점에서 RAID-6에 해당합니다.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>인코딩은 한번에 바이트들 크기의 패킷에 대해 수행됩니다. 올바른 패킷 크기를 선택하는 것은 어렵습니다. jerasure 문서에는이 주제에 대한 광범위한 정보가 들어 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>jerasure 플러그인을 사용하면 삭제 된 코딩 된 객체가 여러 OSD에 저장 될 때 하나의 OSD가 손실되는 것을 복구하려면 다른 모든 OSD를 읽어야합니다. 예를 들어 jerasure가 k = 8 및 m = 4로 구성되어있는 경우 하나의 OSD를 잃어 버리면 11 명의 다른 사람들이 수리해야합니다.\nlrc erasure code plugin은 적은 양의 OSD를 사용하여 복구 할 수 있도록 로컬 패리티 청크를 만듭니다. 예를 들어, lrc가 k = 8, m = 4 및 l = 4로 구성된 경우 4 개의 OSD마다 추가 패리티 덩어리가 생성됩니다. 단일 OSD가 손실되면 11 개 대신 4 개의 OSD만으로 복구 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>코딩 및 데이터 청크를 크기 지역 집합으로 그룹화합니다. 예를 들어, k = 4 및 m = 2에 대해, 지역성 = 3 일 때 두 개의 세 그룹이 생성됩니다. 각 세트는 다른 세트의 청크를 읽지 않고도 복구 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>l로 정의 된 각 청크 집합이 저장되는 크러시 버킷의 유형입니다. 예를 들어 랙으로 설정하면 l 개의 청크 그룹이 각각 다른 랙에 배치됩니다. \n랙 선택 단계와 같은 CRUSH 규칙 단계를 만드는 데 사용됩니다. 설정되어 있지 않으면, 그러한 그룹화가 수행되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 플러그인은 ISA 라이브러리를 캡슐화합니다. 인텔 프로세서에서만 실행됩니다.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 플러그인은 두 개의 리드 솔로몬 형식으로 제공됩니다.\nreed_sol_van이 설정되면 Vandermonde, cauchy가 설정되면 Cauchy입니다.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec plugin은 다중 SHEC 라이브러리를 캡슐화합니다.\n           ceph가 리드 솔로몬 코드보다 더 효율적으로 데이터를 복구 할 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>각 데이터 청크가 계산 범위에 포함되는 패리티 청크의 수입니다. 이 수치는 내구성 측정기로 사용됩니다. 예를 들어, c = 2 인 경우 2 개의 OSD가 데이터 손실없이 중단 될 수 있습니다.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSH 규칙의 첫 번째 단계에 사용 된 크러시 버킷의 이름입니다. 예를 들어 step은 기본값을 취합니다.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>동일한 실패 도메인을 가진 양동이에 두 개의 청크가 없는지 확인하십시오. 예를 들어 실패 도메인이 호스트 인 경우 두 개의 청크가 동일한 호스트에 저장되지 않습니다. 이 단계는 리프 호스트를 선택하는 단계와 같은 CRUSH 규칙 단계를 만드는 데 사용됩니다.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>CRUSH지도에서 크래시 장치 클래스 이름을 사용하여 특정 클래스 (예 : ssd 또는 hdd)의 장치로 배치를 제한합니다.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>삭제 코드 플러그인이로드되는 디렉토리 이름을 설정하십시오.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>모든 작업들 허용</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>오직 서버를 수정하지 않는 작업들만 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>읽기와 쓰기 작업은 허용되지 않지만, 그외 모든 작업이 가능합니다.</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>파일의 속성과 디렉토리 내용을 변경하는 읽기, 쓰기 또는 어떠한 작업은 허용되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>전혀 어떠한 접근도 허용되지 않습니다.</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 우선순위 선택 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>낮음</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>높음</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>정보</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>마지막 5분</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>지난 15분</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>지난 30분</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>지난 1시간(기본)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>지난 3시간</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>지난 6시간</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>지난 12시간</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>지난 24시간</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>어제</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>오늘</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>오늘 지금까지</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>그저께</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>지난 2일</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>이번 주 마지막날</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>전주</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>이번주</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>이번주 지금까지</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>지난 7일</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>지난 달</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>이번 달</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>이번 달 지금까지</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>지난 30일</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>지난 90일</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>지난 6개월</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>지난 1년</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>전년도</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>금년도</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>금년 지금까지</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>지난 2년</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>지난 5년</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>선택된 아이템 없음</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>다시 선택하기 위해 아이템 선택을 취소</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>선택 한계에 도달함</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>필터 테그들</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>베찌 추가</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>사용가능한 아이템 없음</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>복제</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>복사</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>딥 스크럽</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>파괴됨</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>단조로움</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>다운 표시</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>인 표시</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>손실 표시</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>아웃 표시</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>보호</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>이름변경</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>복구</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>휴지통으로 옮기기</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>보호않됨</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>삭제돔</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>복제된</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>복사된</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>평평하게 됨</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>완전삭제됨</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>복구됨</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>롤백됨</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>예</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>아니오</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>서비스 량</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 한계</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>원하는 초당 IO 바이트 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 제한</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>원하는 초당 IO 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>읽기 BPS 제한</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>원하는 초당 읽기 바이스 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>읽기 IOPS 한도</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>원하는 초당 읽기 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>쓰기 BPS 한도</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>원하는 초당 쓰기 바이트 수 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>쓰기 IOPS 제한</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>원하는 초당 쓰기 작업 제한입니다.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>원하는 버스트 IO 바이트 한도 입니다.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>원하는 IO 작업의 버스트 한계입니다.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>읽기 BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>원하는 읽기 버스트 한계입니다.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>읽기 IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>원하는 읽기 작업의 버스트 한도입니다.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>쓰기 BPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>쓰기 바이트의 원하는 버스트 한도.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>쓰기 IOPS 버스트</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>쓰기 바이트의 원하는 버스트 한도.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>수행중</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>수행</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>수행된</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>알려지지 않는 작업</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>생성하는 중</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>생성</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>갱신 중</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>갱신</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>삭제 중</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>복제중</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>복제</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>복사중</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>복사</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>평평하게 하는 중</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>평평함</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>롤백 중</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>롤백</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>옮기는 중</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>옮기기</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>옮겨짐</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>이미지를 찾을 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>복구중</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>복구</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>완전삭제 중</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>완전삭제</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>모든 풀들</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>피어가 포함되어 있기 때문에 미러링을 비활성화 할 수 없습니다.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"33Wh":function(t,e,n){var a=n("yoRg"),r=n("eDl+");t.exports=Object.keys||function(t){return a(t,r)}},"38Bd":function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return r})),n.d(e,"d",(function(){return o}));var a=n("hpHm");class r{constructor(){this.animate=!1,this.max=100}}class i{constructor(t){this.isStacked=!1,this.addClass=!0,this.bars=[],this._max=100,Object.assign(this,t)}set animate(t){this._animate=t,this.bars.forEach(e=>{e.animate=t})}set striped(t){this._striped=t,this.bars.forEach(e=>{e.striped=t})}set value(t){this.isStacked=Array.isArray(t),this._value=t}get isBs3(){return Object(a.d)()}get max(){return this._max}set max(t){this._max=t,this.bars.forEach(t=>{t.recalculatePercentage()})}addBar(t){t.animate=this._animate,t.striped=this._striped,this.bars.push(t)}removeBar(t){this.bars.splice(this.bars.indexOf(t),1)}}class s{constructor(t,e,n){this.el=t,this.renderer=n,this.addClass=!0,this.percent=0,this.progress=e}get type(){return this._type}set type(t){this._type=t,this.applyTypeClasses()}get value(){return this._value}set value(t){(t||0===t)&&(this._value=t,this.recalculatePercentage())}get setBarWidth(){return this.recalculatePercentage(),this.percent}get isBs3(){return Object(a.d)()}ngOnInit(){this.progress.addBar(this)}ngOnDestroy(){this.progress.removeBar(this)}recalculatePercentage(){this.percent=+(this.value/this.progress.max*100).toFixed(2);const t=this.progress.bars.reduce((function(t,e){return t+e.percent}),0);t>100&&(this.percent-=t-100)}applyTypeClasses(){if(this._prevType){const t=`bg-${this._prevType}`;this.renderer.removeClass(this.el.nativeElement,`progress-bar-${this._prevType}`),this.renderer.removeClass(this.el.nativeElement,t),this._prevType=null}if(this._type){const t=`bg-${this._type}`;this.renderer.addClass(this.el.nativeElement,`progress-bar-${this._type}`),this.renderer.addClass(this.el.nativeElement,t),this._prevType=this._type}}}class o{static forRoot(){return{ngModule:o,providers:[r]}}}},"3A9y":function(t,e){t.exports=function(t){return this.__data__.has(t)}},"3E1r":function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात"===e?t<4?t:t+12:"सुबह"===e?t:"दोपहर"===e?t>=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n("wd/R"))},"3Fdi":function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},"3L66":function(t,e,n){var a=n("MMmD"),r=n("ExA7");t.exports=function(t){return r(t)&&a(t)}},"3N8a":function(t,e,n){"use strict";var a=n("quSY");class r extends a.a{constructor(t,e){super()}schedule(t,e=0){return this}}n.d(e,"a",(function(){return i}));class i extends r{constructor(t,e){super(t,e),this.scheduler=t,this.work=e,this.pending=!1}schedule(t,e=0){if(this.closed)return this;this.state=t;const n=this.id,a=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(a,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(a,this.id,e),this}requestAsyncId(t,e,n=0){return setInterval(t.flush.bind(t,this),n)}recycleAsyncId(t,e,n=0){if(null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)}execute(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(t,e){let n=!1,a=void 0;try{this.work(t)}catch(r){n=!0,a=!!r&&r||new Error(r)}if(n)return this.unsubscribe(),a}_unsubscribe(){const t=this.id,e=this.scheduler,n=e.actions,a=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==a&&n.splice(a,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null}}},"3bBZ":function(t,e,n){var a=n("2oRo"),r=n("/byt"),i=n("4mDm"),s=n("kRJp"),o=n("tiKp"),u=o("iterator"),l=o("toStringTag"),d=i.values;for(var c in r){var f=a[c],h=f&&f.prototype;if(h){if(h[u]!==d)try{s(h,u,d)}catch(p){h[u]=d}if(h[l]||s(h,l,c),r[c])for(var g in i)if(h[g]!==i[g])try{s(h,g,i[g])}catch(p){h[g]=i[g]}}}},"4/ic":function(t,e,n){var a=n("ZWtO");t.exports=function(t){return function(e){return a(e,t)}}},"44Ds":function(t,e,n){var a=n("e4Nc");function r(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s)||i,s};return n.cache=new(r.Cache||a),n}r.Cache=a,t.exports=r},"4DD9":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){let e=!1;switch(t){case!0:case 1:case"y":case"yes":case"t":case"true":case"on":case"1":e=!0}return e}}},"4DFU":function(t,e,n){var a=n("+Qka"),r=n("GoyQ");t.exports=function t(e,n,i,s,o,u){return r(e)&&r(n)&&(u.set(n,e),a(e,n,void 0,t,u),u.delete(n)),e}},"4Dmd":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},i=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},s=function(){function t(t,e,n){this.renderer=t,this.templateRef=e,this.viewContainerRef=n}return Object.defineProperty(t.prototype,"isOpen",{set:function(t){t?(this._show(),this.isEnabled&&!1===this._isOpen&&this._animateOpen()):this.isEnabled?this._animateClose():this._hide(),this._isOpen=!!t},enumerable:!0,configurable:!0}),t.prototype._show=function(){this.innerElement||(this.innerElement=this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0])},t.prototype._hide=function(){this.viewContainerRef.clear(),this.innerElement=null},t.prototype._animateOpen=function(){var t=this,e=this.animateSpeed,n=this.animateAcceleration,a=0;this.renderer.setStyle(this.innerElement,"max-height","0"),setTimeout((function(){var r=setInterval((function(){if(!t._isOpen||!t.innerElement)return clearInterval(r);var i=Math.round(a+=e);t.renderer.setStyle(t.innerElement,"max-height",i+"px");var s=t.innerElement.getBoundingClientRect?t.innerElement.getBoundingClientRect().height:0;e*=n,n*=1.005,s<i&&(t.renderer.setStyle(t.innerElement,"max-height",null),clearInterval(r))}),17)}))},t.prototype._animateClose=function(){var t=this;if(this.innerElement)var e=this.animateSpeed,n=this.animateAcceleration,a=this.innerElement.getBoundingClientRect().height,r=setInterval((function(){if(t._isOpen||!t.innerElement)return clearInterval(r);t.renderer.setStyle(t.innerElement,"max-height",(a-=e)+"px"),e*=n,n*=1.005,a<=0&&(t.viewContainerRef.clear(),t.innerElement=null,clearInterval(r))}),17)},r([Object(a.Input)("treeAnimateOpenSpeed"),i("design:type",Number)],t.prototype,"animateSpeed",void 0),r([Object(a.Input)("treeAnimateOpenAcceleration"),i("design:type",Number)],t.prototype,"animateAcceleration",void 0),r([Object(a.Input)("treeAnimateOpenEnabled"),i("design:type",Boolean)],t.prototype,"isEnabled",void 0),r([Object(a.Input)("treeAnimateOpen"),i("design:type",Boolean),i("design:paramtypes",[Boolean])],t.prototype,"isOpen",null),r([Object(a.Directive)({selector:"[treeAnimateOpen]"}),i("design:paramtypes",[a.Renderer2,a.TemplateRef,a.ViewContainerRef])],t)}()},"4HWh":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("KOzp"),s=n("z/SZ"),o=n("2uy1");n("p4Cf"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return d}));var u=a["ɵcrt"]({encapsulation:0,styles:[["i[_ngcontent-%COMP%]{color:#2b99a8;cursor:pointer;padding-left:4px}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[],[[8,"className",0],[8,"innerHTML",1]],null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,(function(t,e){var n=e.component;t(e,0,0,n.class,n.html)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,[["popoverTpl",2]],null,0,null,l)),(t()(),a["ɵeld"](1,16777216,null,null,4,"i",[["aria-hidden","true"],["container","body"],["placement","bottom"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==n.preventDefault()&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](4,1),a["ɵdid"](5,212992,null,0,i.c,[i.a,a.ElementRef,a.Renderer2,a.ViewContainerRef,s.a,o.a],{popover:[0,"popover"],placement:[1,"placement"],outsideClick:[2,"outsideClick"],container:[3,"container"]},null)],(function(t,e){var n=t(e,4,0,e.component.icons.questionCircle);t(e,3,0,n),t(e,5,0,a["ɵnov"](e,0),"bottom",!0,"body")}),null)}},"4I5i":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t})()},"4MV3":function(t,e,n){!function(t){"use strict";var e={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};t.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(t){return t.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(t,e){return 12===t&&(t=0),"રાત"===e?t<4?t:t+12:"સવાર"===e?t:"બપોર"===e?t>=10?t:t+12:"સાંજ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"રાત":t<10?"સવાર":t<17?"બપોર":t<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n("wd/R"))},"4Oe1":function(t,e,n){var a=n("YO3V");t.exports=function(t){return a(t)?void 0:t}},"4WOD":function(t,e,n){var a=n("UTVS"),r=n("ewvW"),i=n("93I0"),s=n("4Xet"),o=i("IE_PROTO"),u=Object.prototype;t.exports=s?Object.getPrototypeOf:function(t){return t=r(t),a(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},"4Xet":function(t,e,n){var a=n("0Dky");t.exports=!a((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},"4dOw":function(t,e,n){!function(t){"use strict";t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},"4kuk":function(t,e,n){var a=n("SfRM"),r=n("Hvzi"),i=n("u8Dt"),s=n("ekgI"),o=n("JSQU");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},"4l63":function(t,e,n){var a=n("I+eb"),r=n("wg0c");a({global:!0,forced:parseInt!=r},{parseInt:r})},"4mDm":function(t,e,n){"use strict";var a=n("/GqU"),r=n("RNIs"),i=n("P4y1"),s=n("afO8"),o=n("fdAy"),u=s.set,l=s.getterFor("Array Iterator");t.exports=o(Array,"Array",(function(t,e){u(this,{type:"Array Iterator",target:a(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,n=t.kind,a=t.index++;return!e||a>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:a,done:!1}:"values"==n?{value:e[a],done:!1}:{value:[a,e[a]],done:!1}}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},"4qC0":function(t,e,n){var a=n("NykK"),r=n("Z0cm"),i=n("ExA7");t.exports=function(t){return"string"==typeof t||!r(t)&&i(t)&&"[object String]"==a(t)}},"4sDh":function(t,e,n){var a=n("4uTw"),r=n("03A+"),i=n("Z0cm"),s=n("wJg7"),o=n("shjB"),u=n("9Nap");t.exports=function(t,e,n){for(var l=-1,d=(e=a(e,t)).length,c=!1;++l<d;){var f=u(e[l]);if(!(c=null!=t&&n(t,f)))break;t=t[f]}return c||++l!=d?c:!!(d=null==t?0:t.length)&&o(d)&&s(f,d)&&(i(t)||r(t))}},"4syw":function(t,e,n){var a=n("busE");t.exports=function(t,e,n){for(var r in e)a(t,r,e[r],n);return t}},"4uTw":function(t,e,n){var a=n("Z0cm"),r=n("9ggG"),i=n("GNiM"),s=n("dt0z");t.exports=function(t,e){return a(t)?t:r(t,e)?[t]:i(s(t))}},"5+tZ":function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("ZUHj"),r=n("l7GE"),i=n("51Dv"),s=n("lJxs"),o=n("Cfvw");function u(t,e,n=Number.POSITIVE_INFINITY){return"function"==typeof e?a=>a.pipe(u((n,a)=>Object(o.a)(t(n,a)).pipe(Object(s.a)((t,r)=>e(n,t,a,r))),n)):("number"==typeof e&&(n=e),e=>e.lift(new l(t,n)))}class l{constructor(t,e=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=e}call(t,e){return e.subscribe(new d(t,this.project,this.concurrent))}}class d extends r.a{constructor(t,e,n=Number.POSITIVE_INFINITY){super(t),this.project=e,this.concurrent=n,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)}_tryNext(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(a){return void this.destination.error(a)}this.active++,this._innerSub(e,t,n)}_innerSub(t,e,n){const r=new i.a(this,e,n),s=this.destination;s.add(r);const o=Object(a.a)(this,t,void 0,void 0,r);o!==r&&s.add(o)}_complete(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()}notifyNext(t,e,n,a,r){this.destination.next(e)}notifyComplete(t){const e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}},"51Dv":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");class r extends a.a{constructor(t,e,n){super(),this.parent=t,this.outerValue=e,this.outerIndex=n,this.index=0}_next(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)}_error(t){this.parent.notifyError(t,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}},"5Tg0":function(t,e,n){(function(t){var a=n("Kz5y"),r=e&&!e.nodeType&&e,i=r&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===r?a.Buffer:void 0,o=s?s.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,a=o?o(n):new t.constructor(n);return t.copy(a),a}}).call(this,n("YuTi")(t))},"6+QB":function(t,e,n){!function(t){"use strict";t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},"6B0Y":function(t,e,n){!function(t){"use strict";var e={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(t){return"ល្ងាច"===t},meridiem:function(t,e,n){return t<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(t){return t.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n("wd/R"))},"6JNq":function(t,e,n){var a=n("UTVS"),r=n("Vu81"),i=n("Bs8V"),s=n("m/L8");t.exports=function(t,e){for(var n=r(e),o=s.f,u=i.f,l=0;l<n.length;l++){var d=n[l];a(t,d)||o(t,d,u(e,d))}}},"6LWA":function(t,e,n){var a=n("xrYK");t.exports=Array.isArray||function(t){return"Array"==a(t)}},"6MUB":function(t,e,n){"use strict";var a=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,r){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?Object.keys(t).map((function(r){var i=encodeURIComponent(a(r))+n;return Array.isArray(t[r])?t[r].map((function(t){return i+encodeURIComponent(a(t))})).join(e):i+encodeURIComponent(a(t[r]))})).join(e):r?encodeURIComponent(a(r))+n+encodeURIComponent(a(t)):""}},"6VoE":function(t,e,n){var a=n("tiKp"),r=n("P4y1"),i=a("iterator"),s=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||s[i]===t)}},"6qls":function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("tz6c");class a{constructor(t,e){this.docService=t,this.i18n=e,this.docText=this.i18n("documentation")}ngOnInit(){this.docService.subscribeOnce(this.section,t=>{this.docUrl=t})}}},"6sVZ":function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},"711d":function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},"77Zs":function(t,e,n){var a=n("Xi7e");t.exports=function(){this.__data__=new a,this.size=0}},"7BjC":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[t+"sekundi",t+"sekundit"],m:["ühe minuti","üks minut"],mm:[t+" minuti",t+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[t+" tunni",t+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[t+" kuu",t+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[t+" aasta",t+" aastat"]};return e?r[n][2]?r[n][2]:r[n][1]:a?r[n][0]:r[n][1]}t.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d päeva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"7GkX":function(t,e,n){var a=n("b80T"),r=n("A90E"),i=n("MMmD");t.exports=function(t){return i(t)?a(t):r(t)}},"7Ix3":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},"7aV9":function(t,e,n){!function(t){"use strict";t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n("wd/R"))},"7fqy":function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,a){n[++e]=[a,t]})),n}},"7o/Q":function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("n6bG"),r=n("gRHU"),i=n("quSY"),s=n("2QA8"),o=n("2fFW"),u=n("NJ4a");class l extends i.a{constructor(t,e,n){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=r.a;break;case 1:if(!t){this.destination=r.a;break}if("object"==typeof t){t instanceof l?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new d(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new d(this,t,e,n)}}[s.a](){return this}static create(t,e,n){const a=new l(t,e,n);return a.syncErrorThrowable=!1,a}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class d extends l{constructor(t,e,n,i){let s;super(),this._parentSubscriber=t;let o=this;Object(a.a)(e)?s=e:e&&(s=e.next,n=e.error,i=e.complete,e!==r.a&&(o=Object.create(e),Object(a.a)(o.unsubscribe)&&this.add(o.unsubscribe.bind(o)),o.unsubscribe=this.unsubscribe.bind(this))),this._context=o,this._next=s,this._error=n,this._complete=i}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:e}=this;o.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:e}=this,{useDeprecatedSynchronousErrorHandling:n}=o.a;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):Object(u.a)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;Object(u.a)(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const e=()=>this._complete.call(this._context);o.a.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,e){try{t.call(this._context,e)}catch(n){if(this.unsubscribe(),o.a.useDeprecatedSynchronousErrorHandling)throw n;Object(u.a)(n)}}__tryOrSetError(t,e,n){if(!o.a.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(a){return o.a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=a,t.syncErrorThrown=!0,!0):(Object(u.a)(a),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}},"7qid":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return f}));var a=n("8Y7J"),r=n("38Bd"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](0,[a["ɵncd"](null,0)],null,null)}var u=a["ɵcrt"]({encapsulation:0,styles:["[_nghost-%COMP%] {\n      width: 100%;\n      display: flex;\n    }"],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bar",[["aria-valuemin","0"],["role","progressbar"]],[[2,"progress-bar-animated",null],[2,"progress-bar-striped",null],[2,"active",null],[1,"aria-valuenow",0],[1,"aria-valuetext",0],[1,"aria-valuemax",0],[4,"height","%"],[4,"width","%"],[2,"progress-bar",null]],null,null,o,s)),a["ɵdid"](1,245760,null,0,r.a,[a.ElementRef,r.b,a.Renderer2],{type:[0,"type"],value:[1,"value"]},null),a["ɵncd"](0,0)],(function(t,e){var n=e.component;t(e,1,0,n.type,n._value)}),(function(t,e){t(e,0,0,!a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).striped,a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).value,a["ɵnov"](e,1).percent?a["ɵnov"](e,1).percent.toFixed(0)+"%":"",a["ɵnov"](e,1).max,"100",a["ɵnov"](e,1).setBarWidth,a["ɵnov"](e,1).addClass)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bar",[["aria-valuemin","0"],["role","progressbar"]],[[2,"progress-bar-animated",null],[2,"progress-bar-striped",null],[2,"active",null],[1,"aria-valuenow",0],[1,"aria-valuetext",0],[1,"aria-valuemax",0],[4,"height","%"],[4,"width","%"],[2,"progress-bar",null]],null,null,o,s)),a["ɵdid"](1,245760,null,0,r.a,[a.ElementRef,r.b,a.Renderer2],{type:[0,"type"],value:[1,"value"]},null),(t()(),a["ɵted"](2,0,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.type,e.context.$implicit.value)}),(function(t,e){t(e,0,0,!a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).striped,a["ɵnov"](e,1).isBs3&&a["ɵnov"](e,1).animate,a["ɵnov"](e,1).value,a["ɵnov"](e,1).percent?a["ɵnov"](e,1).percent.toFixed(0)+"%":"",a["ɵnov"](e,1).max,"100",a["ɵnov"](e,1).setBarWidth,a["ɵnov"](e,1).addClass),t(e,2,0,e.context.$implicit.label)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](1,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component._value)}),null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](3,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,!n.isStacked),t(e,3,0,n.isStacked)}),null)}},"8/+R":function(t,e,n){!function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n("wd/R"))},"85J/":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=/ceph version\s+([^ ]+)\s+\(.+\)/.exec(t);return e?e[1]:t}}},"88Gu":function(t,e){var n=Date.now;t.exports=function(t){var e=0,a=0;return function(){var r=n(),i=16-(r-a);if(a=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},"8Y7J":function(t,e,n){"use strict";n.r(e);var a=n("XNiG"),r=n("quSY"),i=n("HDdC"),s=n("VRyK"),o=n("7o/Q");function u(){return function(t){return t.lift(new l(t))}}class l{constructor(t){this.connectable=t}call(t,e){const{connectable:n}=this;n._refCount++;const a=new d(t,n),r=e.subscribe(a);return a.closed||(a.connection=n.connect()),r}}class d extends o.a{constructor(t,e){super(t),this.connectable=e}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);const{connection:n}=this,a=t._connection;this.connection=null,!a||n&&a!==n||a.unsubscribe()}}class c extends i.a{constructor(t,e){super(),this.source=t,this.subjectFactory=e,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new r.a,t.add(this.source.subscribe(new h(this.getSubject(),this))),t.closed&&(this._connection=null,t=r.a.EMPTY)),t}refCount(){return u()(this)}}const f=(()=>{const t=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}})();class h extends a.b{constructor(t,e){super(t),this.connectable=e}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}}}function g(){return new a.a}n.d(e,"ɵangular_packages_core_core_q",(function(){return fv})),n.d(e,"ɵangular_packages_core_core_n",(function(){return lv})),n.d(e,"ɵangular_packages_core_core_o",(function(){return dv})),n.d(e,"ɵangular_packages_core_core_p",(function(){return cv})),n.d(e,"ɵangular_packages_core_core_r",(function(){return hv})),n.d(e,"ɵangular_packages_core_core_f",(function(){return xm})),n.d(e,"ɵangular_packages_core_core_l",(function(){return lf})),n.d(e,"ɵangular_packages_core_core_m",(function(){return bf})),n.d(e,"ɵangular_packages_core_core_k",(function(){return Wy})),n.d(e,"ɵangular_packages_core_core_j",(function(){return Uy})),n.d(e,"ɵangular_packages_core_core_b",(function(){return ut})),n.d(e,"ɵangular_packages_core_core_a",(function(){return at})),n.d(e,"ɵangular_packages_core_core_c",(function(){return yu})),n.d(e,"ɵangular_packages_core_core_d",(function(){return su})),n.d(e,"ɵangular_packages_core_core_e",(function(){return fu})),n.d(e,"ɵangular_packages_core_core_i",(function(){return Py})),n.d(e,"ɵangular_packages_core_core_s",(function(){return ty})),n.d(e,"ɵangular_packages_core_core_u",(function(){return Zm})),n.d(e,"ɵangular_packages_core_core_t",(function(){return $m})),n.d(e,"ɵangular_packages_core_core_x",(function(){return Xm})),n.d(e,"ɵangular_packages_core_core_v",(function(){return Jm})),n.d(e,"ɵangular_packages_core_core_w",(function(){return Qm})),n.d(e,"ɵangular_packages_core_core_ba",(function(){return Sg})),n.d(e,"ɵangular_packages_core_core_bb",(function(){return xa})),n.d(e,"ɵangular_packages_core_core_bc",(function(){return Ae})),n.d(e,"ɵangular_packages_core_core_bd",(function(){return Ve})),n.d(e,"ɵangular_packages_core_core_be",(function(){return rn})),n.d(e,"ɵangular_packages_core_core_bm",(function(){return ca})),n.d(e,"ɵangular_packages_core_core_bl",(function(){return ve})),n.d(e,"ɵangular_packages_core_core_g",(function(){return $s})),n.d(e,"ɵangular_packages_core_core_h",(function(){return Zs})),n.d(e,"ɵangular_packages_core_core_bg",(function(){return Cr})),n.d(e,"ɵangular_packages_core_core_bk",(function(){return wt})),n.d(e,"ɵangular_packages_core_core_bh",(function(){return x})),n.d(e,"ɵangular_packages_core_core_bi",(function(){return _})),n.d(e,"ɵangular_packages_core_core_bn",(function(){return R})),n.d(e,"ɵangular_packages_core_core_y",(function(){return dg})),n.d(e,"ɵangular_packages_core_core_z",(function(){return Gf})),n.d(e,"createPlatform",(function(){return Sy})),n.d(e,"assertPlatform",(function(){return Ny})),n.d(e,"destroyPlatform",(function(){return Cy})),n.d(e,"getPlatform",(function(){return Ry})),n.d(e,"PlatformRef",(function(){return Ay})),n.d(e,"ApplicationRef",(function(){return Ey})),n.d(e,"createPlatformFactory",(function(){return Iy})),n.d(e,"NgProbeToken",(function(){return wy})),n.d(e,"enableProdMode",(function(){return Ka})),n.d(e,"isDevMode",(function(){return Wa})),n.d(e,"APP_ID",(function(){return vm})),n.d(e,"PACKAGE_ROOT_URL",(function(){return Im})),n.d(e,"PLATFORM_INITIALIZER",(function(){return Om})),n.d(e,"PLATFORM_ID",(function(){return wm})),n.d(e,"APP_BOOTSTRAP_LISTENER",(function(){return Sm})),n.d(e,"APP_INITIALIZER",(function(){return mm})),n.d(e,"ApplicationInitStatus",(function(){return ym})),n.d(e,"DebugElement",(function(){return ov})),n.d(e,"DebugEventListener",(function(){return Hy})),n.d(e,"DebugNode",(function(){return sv})),n.d(e,"asNativeElements",(function(){return Ky})),n.d(e,"getDebugNode",(function(){return rv})),n.d(e,"Testability",(function(){return py})),n.d(e,"TestabilityRegistry",(function(){return by})),n.d(e,"setTestabilityGetter",(function(){return yy})),n.d(e,"TRANSLATIONS",(function(){return Rm})),n.d(e,"TRANSLATIONS_FORMAT",(function(){return Am})),n.d(e,"LOCALE_ID",(function(){return Cm})),n.d(e,"MissingTranslationStrategy",(function(){return km})),n.d(e,"ApplicationModule",(function(){return gv})),n.d(e,"wtfCreateScope",(function(){return ny})),n.d(e,"wtfLeave",(function(){return ay})),n.d(e,"wtfStartTimeRange",(function(){return ry})),n.d(e,"wtfEndTimeRange",(function(){return iy})),n.d(e,"Type",(function(){return no})),n.d(e,"EventEmitter",(function(){return tb})),n.d(e,"ErrorHandler",(function(){return Da})),n.d(e,"Sanitizer",(function(){return vr})),n.d(e,"SecurityContext",(function(){return yr})),n.d(e,"Attribute",(function(){return N})),n.d(e,"ANALYZE_FOR_ENTRY_COMPONENTS",(function(){return vu})),n.d(e,"ContentChild",(function(){return Tu})),n.d(e,"ContentChildren",(function(){return _u})),n.d(e,"Query",(function(){return xu})),n.d(e,"ViewChild",(function(){return wu})),n.d(e,"ViewChildren",(function(){return Ou})),n.d(e,"Component",(function(){return nm})),n.d(e,"Directive",(function(){return em})),n.d(e,"HostBinding",(function(){return sm})),n.d(e,"HostListener",(function(){return om})),n.d(e,"Input",(function(){return rm})),n.d(e,"Output",(function(){return im})),n.d(e,"Pipe",(function(){return am})),n.d(e,"NgModule",(function(){return gm})),n.d(e,"CUSTOM_ELEMENTS_SCHEMA",(function(){return Pa})),n.d(e,"NO_ERRORS_SCHEMA",(function(){return Ma})),n.d(e,"ViewEncapsulation",(function(){return Ot})),n.d(e,"Version",(function(){return of})),n.d(e,"VERSION",(function(){return uf})),n.d(e,"InjectFlags",(function(){return C})),n.d(e,"ɵɵdefineInjectable",(function(){return k})),n.d(e,"defineInjectable",(function(){return E})),n.d(e,"ɵɵdefineInjector",(function(){return L})),n.d(e,"forwardRef",(function(){return G})),n.d(e,"resolveForwardRef",(function(){return V})),n.d(e,"Injectable",(function(){return So})),n.d(e,"Injector",(function(){return Bo})),n.d(e,"ɵɵinject",(function(){return rt})),n.d(e,"inject",(function(){return it})),n.d(e,"INJECTOR",(function(){return $})),n.d(e,"ReflectiveInjector",(function(){return mu})),n.d(e,"ResolvedReflectiveFactory",(function(){return lu})),n.d(e,"ReflectiveKey",(function(){return eu})),n.d(e,"InjectionToken",(function(){return K})),n.d(e,"Inject",(function(){return T})),n.d(e,"Optional",(function(){return O})),n.d(e,"Self",(function(){return w})),n.d(e,"SkipSelf",(function(){return S})),n.d(e,"Host",(function(){return I})),n.d(e,"NgZone",(function(){return uy})),n.d(e,"ɵNoopNgZone",(function(){return gy})),n.d(e,"RenderComponentType",(function(){return Jc})),n.d(e,"Renderer",(function(){return Xc})),n.d(e,"Renderer2",(function(){return af})),n.d(e,"RendererFactory2",(function(){return ef})),n.d(e,"RendererStyleFlags2",(function(){return nf})),n.d(e,"RootRenderer",(function(){return tf})),n.d(e,"COMPILER_OPTIONS",(function(){return Hm})),n.d(e,"Compiler",(function(){return Ym})),n.d(e,"CompilerFactory",(function(){return Um})),n.d(e,"ModuleWithComponentFactories",(function(){return Dm})),n.d(e,"ComponentFactory",(function(){return Gc})),n.d(e,"ɵComponentFactory",(function(){return Gc})),n.d(e,"ComponentRef",(function(){return Fc})),n.d(e,"ComponentFactoryResolver",(function(){return Yc})),n.d(e,"ElementRef",(function(){return Kc})),n.d(e,"NgModuleFactory",(function(){return ht})),n.d(e,"NgModuleRef",(function(){return ft})),n.d(e,"NgModuleFactoryLoader",(function(){return Dy})),n.d(e,"getModuleFactory",(function(){return qy})),n.d(e,"QueryList",(function(){return nb})),n.d(e,"SystemJsNgModuleLoader",(function(){return Vy})),n.d(e,"SystemJsNgModuleLoaderConfig",(function(){return Fy})),n.d(e,"TemplateRef",(function(){return wf})),n.d(e,"ViewContainerRef",(function(){return Nf})),n.d(e,"EmbeddedViewRef",(function(){return Yy})),n.d(e,"ViewRef",(function(){return By})),n.d(e,"ChangeDetectionStrategy",(function(){return xt})),n.d(e,"ChangeDetectorRef",(function(){return Xs})),n.d(e,"DefaultIterableDiffer",(function(){return cf})),n.d(e,"IterableDiffers",(function(){return vf})),n.d(e,"KeyValueDiffers",(function(){return xf})),n.d(e,"SimpleChange",(function(){return Tc})),n.d(e,"WrappedValue",(function(){return Mu})),n.d(e,"platformCore",(function(){return uv})),n.d(e,"ɵALLOW_MULTIPLE_PLATFORMS",(function(){return Oy})),n.d(e,"ɵAPP_ID_RANDOM_PROVIDER",(function(){return _m})),n.d(e,"ɵdefaultIterableDiffers",(function(){return Tf})),n.d(e,"ɵdefaultKeyValueDiffers",(function(){return Of})),n.d(e,"ɵdevModeEqual",(function(){return Pu})),n.d(e,"ɵisListLikeIterable",(function(){return qu})),n.d(e,"ɵChangeDetectorStatus",(function(){return _t})),n.d(e,"ɵisDefaultChangeDetectionStrategy",(function(){return Tt})),n.d(e,"ɵConsole",(function(){return Nm})),n.d(e,"ɵsetCurrentInjector",(function(){return et})),n.d(e,"ɵgetInjectableDef",(function(){return D})),n.d(e,"ɵAPP_ROOT",(function(){return Co})),n.d(e,"ɵDEFAULT_LOCALE_ID",(function(){return Dg})),n.d(e,"ɵivyEnabled",(function(){return Lm})),n.d(e,"ɵCodegenComponentFactoryResolver",(function(){return Hc})),n.d(e,"ɵclearResolutionOfComponentResourcesQueue",(function(){return Ru})),n.d(e,"ɵresolveComponentResources",(function(){return Su})),n.d(e,"ɵReflectionCapabilities",(function(){return uo})),n.d(e,"ɵRenderDebugInfo",(function(){return Qc})),n.d(e,"ɵ_sanitizeHtml",(function(){return br})),n.d(e,"ɵ_sanitizeStyle",(function(){return Tr})),n.d(e,"ɵ_sanitizeUrl",(function(){return Qa})),n.d(e,"ɵglobal",(function(){return U})),n.d(e,"ɵlooseIdentical",(function(){return Du})),n.d(e,"ɵstringify",(function(){return j})),n.d(e,"ɵmakeDecorator",(function(){return y})),n.d(e,"ɵisObservable",(function(){return ed})),n.d(e,"ɵisPromise",(function(){return td})),n.d(e,"ɵclearOverrides",(function(){return Bx})),n.d(e,"ɵinitServicesIfNeeded",(function(){return rx})),n.d(e,"ɵoverrideComponentView",(function(){return zx})),n.d(e,"ɵoverrideProvider",(function(){return Vx})),n.d(e,"ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR",(function(){return mg})),n.d(e,"ɵgetLocalePluralCase",(function(){return Eg})),n.d(e,"ɵfindLocaleData",(function(){return Lg})),n.d(e,"ɵLOCALE_DATA",(function(){return Cg})),n.d(e,"ɵLocaleDataIndex",(function(){return Rg})),n.d(e,"ɵɵattribute",(function(){return Wu})),n.d(e,"ɵɵattributeInterpolate1",(function(){return al})),n.d(e,"ɵɵattributeInterpolate2",(function(){return rl})),n.d(e,"ɵɵattributeInterpolate3",(function(){return il})),n.d(e,"ɵɵattributeInterpolate4",(function(){return sl})),n.d(e,"ɵɵattributeInterpolate5",(function(){return ol})),n.d(e,"ɵɵattributeInterpolate6",(function(){return ul})),n.d(e,"ɵɵattributeInterpolate7",(function(){return ll})),n.d(e,"ɵɵattributeInterpolate8",(function(){return dl})),n.d(e,"ɵɵattributeInterpolateV",(function(){return cl})),n.d(e,"ɵɵdefineBase",(function(){return zt})),n.d(e,"ɵɵdefineComponent",(function(){return Pt})),n.d(e,"ɵɵdefineDirective",(function(){return Bt})),n.d(e,"ɵɵdefinePipe",(function(){return Yt})),n.d(e,"ɵɵdefineNgModule",(function(){return Ft})),n.d(e,"ɵdetectChanges",(function(){return fl})),n.d(e,"ɵrenderComponent",(function(){return bc})),n.d(e,"ɵRender3ComponentFactory",(function(){return Ig})),n.d(e,"ɵRender3ComponentRef",(function(){return Ng})),n.d(e,"ɵɵdirectiveInject",(function(){return Tl})),n.d(e,"ɵɵinjectAttribute",(function(){return Ol})),n.d(e,"ɵɵinjectPipeChangeDetectorRef",(function(){return Sb})),n.d(e,"ɵɵgetFactoryOf",(function(){return Ra})),n.d(e,"ɵɵgetInheritedFactory",(function(){return Aa})),n.d(e,"ɵɵsetComponentScope",(function(){return Mt})),n.d(e,"ɵɵsetNgModuleScope",(function(){return Gt})),n.d(e,"ɵɵtemplateRefExtractor",(function(){return wb})),n.d(e,"ɵɵProvidersFeature",(function(){return jc})),n.d(e,"ɵɵInheritDefinitionFeature",(function(){return Nc})),n.d(e,"ɵɵNgOnChangesFeature",(function(){return Oc})),n.d(e,"ɵLifecycleHooksFeature",(function(){return xc})),n.d(e,"ɵRender3NgModuleRef",(function(){return Lp})),n.d(e,"ɵmarkDirty",(function(){return hl})),n.d(e,"ɵNgModuleFactory",(function(){return Dp})),n.d(e,"ɵNO_CHANGE",(function(){return ci})),n.d(e,"ɵɵcontainer",(function(){return gl})),n.d(e,"ɵɵnextContext",(function(){return od})),n.d(e,"ɵɵelementStart",(function(){return Bl})),n.d(e,"ɵɵnamespaceHTML",(function(){return gn})),n.d(e,"ɵɵnamespaceMathML",(function(){return hn})),n.d(e,"ɵɵnamespaceSVG",(function(){return fn})),n.d(e,"ɵɵelement",(function(){return Hl})),n.d(e,"ɵɵlistener",(function(){return nd})),n.d(e,"ɵɵtext",(function(){return Od})),n.d(e,"ɵɵtextInterpolate",(function(){return Sd})),n.d(e,"ɵɵtextInterpolate1",(function(){return Id})),n.d(e,"ɵɵtextInterpolate2",(function(){return Nd})),n.d(e,"ɵɵtextInterpolate3",(function(){return Cd})),n.d(e,"ɵɵtextInterpolate4",(function(){return Rd})),n.d(e,"ɵɵtextInterpolate5",(function(){return Ad})),n.d(e,"ɵɵtextInterpolate6",(function(){return kd})),n.d(e,"ɵɵtextInterpolate7",(function(){return Ed})),n.d(e,"ɵɵtextInterpolate8",(function(){return Ld})),n.d(e,"ɵɵtextInterpolateV",(function(){return Dd})),n.d(e,"ɵɵembeddedViewStart",(function(){return Jl})),n.d(e,"ɵɵprojection",(function(){return fd})),n.d(e,"ɵɵpipeBind1",(function(){return Wp})),n.d(e,"ɵɵpipeBind2",(function(){return Kp})),n.d(e,"ɵɵpipeBind3",(function(){return $p})),n.d(e,"ɵɵpipeBind4",(function(){return Zp})),n.d(e,"ɵɵpipeBindV",(function(){return Jp})),n.d(e,"ɵɵpureFunction0",(function(){return Mp})),n.d(e,"ɵɵpureFunction1",(function(){return qp})),n.d(e,"ɵɵpureFunction2",(function(){return jp})),n.d(e,"ɵɵpureFunction3",(function(){return Fp})),n.d(e,"ɵɵpureFunction4",(function(){return Gp})),n.d(e,"ɵɵpureFunction5",(function(){return Vp})),n.d(e,"ɵɵpureFunction6",(function(){return zp})),n.d(e,"ɵɵpureFunction7",(function(){return Bp})),n.d(e,"ɵɵpureFunction8",(function(){return Yp})),n.d(e,"ɵɵpureFunctionV",(function(){return Hp})),n.d(e,"ɵɵgetCurrentView",(function(){return Xl})),n.d(e,"ɵgetDirectives",(function(){return sc})),n.d(e,"ɵgetHostElement",(function(){return uc})),n.d(e,"ɵɵrestoreView",(function(){return Ge})),n.d(e,"ɵɵcontainerRefreshStart",(function(){return bl})),n.d(e,"ɵɵcontainerRefreshEnd",(function(){return ml})),n.d(e,"ɵɵqueryRefresh",(function(){return cb})),n.d(e,"ɵɵviewQuery",(function(){return hb})),n.d(e,"ɵɵstaticViewQuery",(function(){return fb})),n.d(e,"ɵɵstaticContentQuery",(function(){return mb})),n.d(e,"ɵɵloadViewQuery",(function(){return pb})),n.d(e,"ɵɵcontentQuery",(function(){return bb})),n.d(e,"ɵɵloadContentQuery",(function(){return vb})),n.d(e,"ɵɵelementEnd",(function(){return Yl})),n.d(e,"ɵɵhostProperty",(function(){return Xd})),n.d(e,"ɵɵproperty",(function(){return Hu})),n.d(e,"ɵɵpropertyInterpolate",(function(){return hd})),n.d(e,"ɵɵpropertyInterpolate1",(function(){return gd})),n.d(e,"ɵɵpropertyInterpolate2",(function(){return pd})),n.d(e,"ɵɵpropertyInterpolate3",(function(){return bd})),n.d(e,"ɵɵpropertyInterpolate4",(function(){return md})),n.d(e,"ɵɵpropertyInterpolate5",(function(){return yd})),n.d(e,"ɵɵpropertyInterpolate6",(function(){return vd})),n.d(e,"ɵɵpropertyInterpolate7",(function(){return xd})),n.d(e,"ɵɵpropertyInterpolate8",(function(){return _d})),n.d(e,"ɵɵpropertyInterpolateV",(function(){return Td})),n.d(e,"ɵɵupdateSyntheticHostBinding",(function(){return tc})),n.d(e,"ɵɵcomponentHostSyntheticListener",(function(){return ad})),n.d(e,"ɵɵprojectionDef",(function(){return ld})),n.d(e,"ɵɵreference",(function(){return xl})),n.d(e,"ɵɵenableBindings",(function(){return Ce})),n.d(e,"ɵɵdisableBindings",(function(){return Re})),n.d(e,"ɵɵallocHostVars",(function(){return ku})),n.d(e,"ɵɵelementContainerStart",(function(){return Kl})),n.d(e,"ɵɵelementContainerEnd",(function(){return $l})),n.d(e,"ɵɵelementContainer",(function(){return Zl})),n.d(e,"ɵɵstyling",(function(){return wl})),n.d(e,"ɵɵstyleMap",(function(){return Al})),n.d(e,"ɵɵstyleSanitizer",(function(){return Sl})),n.d(e,"ɵɵclassMap",(function(){return kl})),n.d(e,"ɵɵclassMapInterpolate1",(function(){return Pd})),n.d(e,"ɵɵclassMapInterpolate2",(function(){return Md})),n.d(e,"ɵɵclassMapInterpolate3",(function(){return qd})),n.d(e,"ɵɵclassMapInterpolate4",(function(){return jd})),n.d(e,"ɵɵclassMapInterpolate5",(function(){return Fd})),n.d(e,"ɵɵclassMapInterpolate6",(function(){return Gd})),n.d(e,"ɵɵclassMapInterpolate7",(function(){return Vd})),n.d(e,"ɵɵclassMapInterpolate8",(function(){return zd})),n.d(e,"ɵɵclassMapInterpolateV",(function(){return Bd})),n.d(e,"ɵɵstyleProp",(function(){return Il})),n.d(e,"ɵɵstylePropInterpolate1",(function(){return Yd})),n.d(e,"ɵɵstylePropInterpolate2",(function(){return Hd})),n.d(e,"ɵɵstylePropInterpolate3",(function(){return Ud})),n.d(e,"ɵɵstylePropInterpolate4",(function(){return Wd})),n.d(e,"ɵɵstylePropInterpolate5",(function(){return Kd})),n.d(e,"ɵɵstylePropInterpolate6",(function(){return $d})),n.d(e,"ɵɵstylePropInterpolate7",(function(){return Zd})),n.d(e,"ɵɵstylePropInterpolate8",(function(){return Jd})),n.d(e,"ɵɵstylePropInterpolateV",(function(){return Qd})),n.d(e,"ɵɵstylingApply",(function(){return Pl})),n.d(e,"ɵɵclassProp",(function(){return Cl})),n.d(e,"ɵɵelementHostAttrs",(function(){return Ul})),n.d(e,"ɵɵselect",(function(){return Oi})),n.d(e,"ɵɵtextBinding",(function(){return wd})),n.d(e,"ɵɵtemplate",(function(){return pl})),n.d(e,"ɵɵembeddedViewEnd",(function(){return Ql})),n.d(e,"ɵstore",(function(){return vl})),n.d(e,"ɵɵload",(function(){return _l})),n.d(e,"ɵɵpipe",(function(){return Up})),n.d(e,"ɵwhenRendered",(function(){return _c})),n.d(e,"ɵɵi18n",(function(){return dp})),n.d(e,"ɵɵi18nAttributes",(function(){return cp})),n.d(e,"ɵɵi18nExp",(function(){return gp})),n.d(e,"ɵɵi18nStart",(function(){return np})),n.d(e,"ɵɵi18nEnd",(function(){return sp})),n.d(e,"ɵɵi18nApply",(function(){return pp})),n.d(e,"ɵɵi18nPostprocess",(function(){return ip})),n.d(e,"ɵi18nConfigureLocalize",(function(){return Tp})),n.d(e,"ɵɵi18nLocalize",(function(){return wp})),n.d(e,"ɵsetLocaleId",(function(){return Ip})),n.d(e,"ɵsetClassMetadata",(function(){return Pp})),n.d(e,"ɵɵresolveWindow",(function(){return Tn})),n.d(e,"ɵɵresolveDocument",(function(){return On})),n.d(e,"ɵɵresolveBody",(function(){return wn})),n.d(e,"ɵcompileComponent",(function(){return zb})),n.d(e,"ɵcompileDirective",(function(){return Bb})),n.d(e,"ɵcompileNgModule",(function(){return Eb})),n.d(e,"ɵcompileNgModuleDefs",(function(){return Lb})),n.d(e,"ɵpatchComponentDefWithScope",(function(){return jb})),n.d(e,"ɵresetCompiledComponents",(function(){return Mb})),n.d(e,"ɵflushModuleScopingQueueAsMuchAsPossible",(function(){return Ab})),n.d(e,"ɵtransitiveScopesFor",(function(){return Fb})),n.d(e,"ɵcompilePipe",(function(){return tm})),n.d(e,"ɵɵsanitizeHtml",(function(){return Or})),n.d(e,"ɵɵsanitizeStyle",(function(){return wr})),n.d(e,"ɵɵdefaultStyleSanitizer",(function(){return Ar})),n.d(e,"ɵɵsanitizeScript",(function(){return Nr})),n.d(e,"ɵɵsanitizeUrl",(function(){return Sr})),n.d(e,"ɵɵsanitizeResourceUrl",(function(){return Ir})),n.d(e,"ɵɵsanitizeUrlOrResourceUrl",(function(){return Rr})),n.d(e,"ɵbypassSanitizationTrustHtml",(function(){return Fa})),n.d(e,"ɵbypassSanitizationTrustStyle",(function(){return Ga})),n.d(e,"ɵbypassSanitizationTrustScript",(function(){return Va})),n.d(e,"ɵbypassSanitizationTrustUrl",(function(){return za})),n.d(e,"ɵbypassSanitizationTrustResourceUrl",(function(){return Ba})),n.d(e,"ɵgetLContext",(function(){return Dr})),n.d(e,"ɵNG_ELEMENT_ID",(function(){return Lt})),n.d(e,"ɵNG_COMPONENT_DEF",(function(){return Nt})),n.d(e,"ɵNG_DIRECTIVE_DEF",(function(){return Ct})),n.d(e,"ɵNG_PIPE_DEF",(function(){return Rt})),n.d(e,"ɵNG_MODULE_DEF",(function(){return At})),n.d(e,"ɵNG_BASE_DEF",(function(){return Et})),n.d(e,"ɵNG_INJECTABLE_DEF",(function(){return M})),n.d(e,"ɵNG_INJECTOR_DEF",(function(){return q})),n.d(e,"ɵcompileNgModuleFactory__POST_R3__",(function(){return _y})),n.d(e,"ɵisBoundToModule__POST_R3__",(function(){return Ty})),n.d(e,"ɵSWITCH_COMPILE_COMPONENT__POST_R3__",(function(){return um})),n.d(e,"ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__",(function(){return lm})),n.d(e,"ɵSWITCH_COMPILE_PIPE__POST_R3__",(function(){return dm})),n.d(e,"ɵSWITCH_COMPILE_NGMODULE__POST_R3__",(function(){return pm})),n.d(e,"ɵgetDebugNode__POST_R3__",(function(){return av})),n.d(e,"ɵSWITCH_COMPILE_INJECTABLE__POST_R3__",(function(){return Io})),n.d(e,"ɵSWITCH_IVY_ENABLED__POST_R3__",(function(){return Em})),n.d(e,"ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__",(function(){return to})),n.d(e,"ɵCompiler_compileModuleSync__POST_R3__",(function(){return Mm})),n.d(e,"ɵCompiler_compileModuleAsync__POST_R3__",(function(){return jm})),n.d(e,"ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__",(function(){return Gm})),n.d(e,"ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__",(function(){return zm})),n.d(e,"ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__",(function(){return $c})),n.d(e,"ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__",(function(){return Sf})),n.d(e,"ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__",(function(){return Cf})),n.d(e,"ɵSWITCH_RENDERER2_FACTORY__POST_R3__",(function(){return rf})),n.d(e,"ɵgetModuleFactory__POST_R3__",(function(){return My})),n.d(e,"ɵregisterNgModuleType",(function(){return Ap})),n.d(e,"ɵpublishGlobalUtil",(function(){return pc})),n.d(e,"ɵpublishDefaultGlobalUtils",(function(){return gc})),n.d(e,"ɵcreateInjector",(function(){return Do})),n.d(e,"ɵINJECTOR_IMPL__POST_R3__",(function(){return Vo})),n.d(e,"ɵregisterModuleFactory",(function(){return Cp})),n.d(e,"ɵEMPTY_ARRAY",(function(){return Th})),n.d(e,"ɵEMPTY_MAP",(function(){return Oh})),n.d(e,"ɵand",(function(){return pv})),n.d(e,"ɵccf",(function(){return Mh})),n.d(e,"ɵcmf",(function(){return Yx})),n.d(e,"ɵcrt",(function(){return Uf})),n.d(e,"ɵdid",(function(){return og})),n.d(e,"ɵeld",(function(){return bv})),n.d(e,"ɵgetComponentViewDefinitionFactory",(function(){return qh})),n.d(e,"ɵinlineInterpolate",(function(){return xh})),n.d(e,"ɵinterpolate",(function(){return vh})),n.d(e,"ɵmod",(function(){return Rh})),n.d(e,"ɵmpd",(function(){return Ch})),n.d(e,"ɵncd",(function(){return Iv})),n.d(e,"ɵnov",(function(){return Kh})),n.d(e,"ɵpid",(function(){return ug})),n.d(e,"ɵprd",(function(){return lg})),n.d(e,"ɵpad",(function(){return Rv})),n.d(e,"ɵpod",(function(){return Av})),n.d(e,"ɵppd",(function(){return Cv})),n.d(e,"ɵqud",(function(){return _v})),n.d(e,"ɵted",(function(){return Ev})),n.d(e,"ɵunv",(function(){return Hf})),n.d(e,"ɵvid",(function(){return Pv}));const p="__annotations__",b="__parameters__",m="__prop__metadata__";function y(t,e,n,a,r){const i=v(e);function s(...t){if(this instanceof s)return i.call(this,...t),this;const e=new s(...t);return function(n){return r&&r(n,...t),(n.hasOwnProperty(p)?n[p]:Object.defineProperty(n,p,{value:[]})[p]).push(e),a&&a(n),n}}return n&&(s.prototype=Object.create(n.prototype)),s.prototype.ngMetadataName=t,s.annotationCls=s,s}function v(t){return function(...e){if(t){const n=t(...e);for(const t in n)this[t]=n[t]}}}function x(t,e,n){const a=v(e);function r(...t){if(this instanceof r)return a.apply(this,t),this;const e=new r(...t);return n.annotation=e,n;function n(t,n,a){const r=t.hasOwnProperty(b)?t[b]:Object.defineProperty(t,b,{value:[]})[b];for(;r.length<=a;)r.push(null);return(r[a]=r[a]||[]).push(e),t}}return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=t,r.annotationCls=r,r}function _(t,e,n,a){const r=v(e);function i(...t){if(this instanceof i)return r.apply(this,t),this;const e=new i(...t);return function(n,r){const i=n.constructor,s=i.hasOwnProperty(m)?i[m]:Object.defineProperty(i,m,{value:{}})[m];s[r]=s.hasOwnProperty(r)&&s[r]||[],s[r].unshift(e),a&&a(n,r,...t)}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=t,i.annotationCls=i,i}const T=x("Inject",t=>({token:t})),O=x("Optional"),w=x("Self"),S=x("SkipSelf"),I=x("Host"),N=x("Attribute",t=>({attributeName:t}));var C=function(t){return t[t.Default=0]="Default",t[t.Host=1]="Host",t[t.Self=2]="Self",t[t.SkipSelf=4]="SkipSelf",t[t.Optional=8]="Optional",t}({});function R(t){for(let e in t)if(t[e]===R)return e;throw Error("Could not find renamed property on target object.")}function A(t,e){for(const n in e)e.hasOwnProperty(n)&&!t.hasOwnProperty(n)&&(t[n]=e[n])}function k(t){return{token:t.token,providedIn:t.providedIn||null,factory:t.factory,value:void 0}}const E=k;function L(t){return{factory:t.factory,providers:t.providers||[],imports:t.imports||[]}}function D(t){const e=t[M];return e&&e.token===t?e:null}function P(t){return t&&t.hasOwnProperty(q)?t[q]:null}const M=R({ngInjectableDef:R}),q=R({ngInjectorDef:R});function j(t){if("string"==typeof t)return t;if(t instanceof Array)return"["+t.map(j).join(", ")+"]";if(null==t)return""+t;if(t.overriddenName)return`${t.overriddenName}`;if(t.name)return`${t.name}`;const e=t.toString();if(null==e)return""+e;const n=e.indexOf("\n");return-1===n?e:e.substring(0,n)}const F=R({__forward_ref__:R});function G(t){return t.__forward_ref__=G,t.toString=function(){return j(this())},t}function V(t){const e=t;return"function"==typeof e&&e.hasOwnProperty(F)&&e.__forward_ref__===G?e():t}const z="undefined"!=typeof globalThis&&globalThis,B="undefined"!=typeof window&&window,Y="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,H="undefined"!=typeof global&&global,U=z||H||B||Y;function W(){const t=U.ng;if(!t||!t.ɵcompilerFacade)throw new Error("Angular JIT compilation failed: '@angular/compiler' not loaded!\n  - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\n  - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\n  - Alternatively provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.");return t.ɵcompilerFacade}class K{constructor(t,e){this._desc=t,this.ngMetadataName="InjectionToken",this.ngInjectableDef=void 0,"number"==typeof e?this.__NG_ELEMENT_ID__=e:void 0!==e&&(this.ngInjectableDef=k({token:this,providedIn:e.providedIn||"root",factory:e.factory}))}toString(){return`InjectionToken ${this._desc}`}}const $=new K("INJECTOR",-1),Z=new Object,J=/\n/gm,Q=R({provide:String,useValue:R});let X,tt=void 0;function et(t){const e=tt;return tt=t,e}function nt(t){const e=X;return X=t,e}function at(t,e=C.Default){if(void 0===tt)throw new Error("inject() must be called from an injection context");return null===tt?st(t,void 0,e):tt.get(t,e&C.Optional?null:void 0,e)}function rt(t,e=C.Default){return(X||at)(t,e)}const it=rt;function st(t,e,n){const a=D(t);if(a&&"root"==a.providedIn)return void 0===a.value?a.value=a.factory():a.value;if(n&C.Optional)return null;if(void 0!==e)return e;throw new Error(`Injector: NOT_FOUND [${j(t)}]`)}function ot(t){const e=[];for(let n=0;n<t.length;n++){const a=V(t[n]);if(Array.isArray(a)){if(0===a.length)throw new Error("Arguments array must have arguments.");let t=void 0,n=C.Default;for(let e=0;e<a.length;e++){const r=a[e];r instanceof O||"Optional"===r.ngMetadataName||r===O?n|=C.Optional:r instanceof S||"SkipSelf"===r.ngMetadataName||r===S?n|=C.SkipSelf:r instanceof w||"Self"===r.ngMetadataName||r===w?n|=C.Self:t=r instanceof T||r===T?r.token:r}e.push(rt(t,n))}else e.push(rt(a))}return e}class ut{get(t,e=Z){if(e===Z){const e=new Error(`NullInjectorError: No provider for ${j(t)}!`);throw e.name="NullInjectorError",e}return e}}function lt(t,e,n,a){const r=t.ngTempTokenPath;throw e.__source&&r.unshift(e.__source),t.message=dt("\n"+t.message,r,n,a),t.ngTokenPath=r,t.ngTempTokenPath=null,t}function dt(t,e,n,a=null){t=t&&"\n"===t.charAt(0)&&"ɵ"==t.charAt(1)?t.substr(2):t;let r=j(e);if(e instanceof Array)r=e.map(j).join(" -> ");else if("object"==typeof e){let t=[];for(let n in e)if(e.hasOwnProperty(n)){let a=e[n];t.push(n+":"+("string"==typeof a?JSON.stringify(a):j(a)))}r=`{${t.join(", ")}}`}return`${n}${a?"("+a+")":""}[${r}]: ${t.replace(J,"\n  ")}`}const ct={"ɵɵdefineInjectable":k,"ɵɵdefineInjector":L,"ɵɵinject":rt,"ɵɵgetFactoryOf":function(t){const e=t,n=D(e)||P(e);return n&&void 0!==n.factory?n.factory:null}};class ft{}class ht{}function gt(t,e){for(let n=0;n<t.length;n++)e.push(t[n])}function pt(t,e){void 0===e&&(e=t);for(let n=0;n<t.length;n++){let a=t[n];Array.isArray(a)?(e===t&&(e=t.slice(0,n)),pt(a,e)):e!==t&&e.push(a)}return e}function bt(t,e){t.forEach(t=>Array.isArray(t)?bt(t,e):e(t))}function mt(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function yt(t,e){return e>=t.length-1?t.pop():t.splice(e,1)[0]}function vt(t){throw new Error(`ASSERTION ERROR: ${t}`)}const xt=function(){var t={OnPush:0,Default:1};return t[t.OnPush]="OnPush",t[t.Default]="Default",t}(),_t=function(){var t={CheckOnce:0,Checked:1,CheckAlways:2,Detached:3,Errored:4,Destroyed:5};return t[t.CheckOnce]="CheckOnce",t[t.Checked]="Checked",t[t.CheckAlways]="CheckAlways",t[t.Detached]="Detached",t[t.Errored]="Errored",t[t.Destroyed]="Destroyed",t}();function Tt(t){return null==t||t===xt.Default}const Ot=function(){var t={Emulated:0,Native:1,None:2,ShadowDom:3};return t[t.Emulated]="Emulated",t[t.Native]="Native",t[t.None]="None",t[t.ShadowDom]="ShadowDom",t}();function wt(t){return""+{toString:t}}const St={},It=[],Nt=R({ngComponentDef:R}),Ct=R({ngDirectiveDef:R}),Rt=R({ngPipeDef:R}),At=R({ngModuleDef:R}),kt=R({ngLocaleIdDef:R}),Et=R({ngBaseDef:R}),Lt=R({__NG_ELEMENT_ID__:R});let Dt=0;function Pt(t){const e=t.type,n=e.prototype,a={},r={type:e,providersResolver:null,consts:t.consts,vars:t.vars,factory:t.factory,template:t.template||null,ngContentSelectors:t.ngContentSelectors,hostBindings:t.hostBindings||null,contentQueries:t.contentQueries||null,declaredInputs:a,inputs:null,outputs:null,exportAs:t.exportAs||null,onChanges:null,onInit:n.ngOnInit||null,doCheck:n.ngDoCheck||null,afterContentInit:n.ngAfterContentInit||null,afterContentChecked:n.ngAfterContentChecked||null,afterViewInit:n.ngAfterViewInit||null,afterViewChecked:n.ngAfterViewChecked||null,onDestroy:n.ngOnDestroy||null,onPush:t.changeDetection===xt.OnPush,directiveDefs:null,pipeDefs:null,selectors:t.selectors,viewQuery:t.viewQuery||null,features:t.features||null,data:t.data||{},encapsulation:t.encapsulation||Ot.Emulated,id:"c",styles:t.styles||It,_:null,setInput:null,schemas:t.schemas||null,tView:null};return r._=wt(()=>{const n=t.directives,i=t.features,s=t.pipes;r.id+=Dt++,r.inputs=Vt(t.inputs,a),r.outputs=Vt(t.outputs),i&&i.forEach(t=>t(r)),r.directiveDefs=n?()=>("function"==typeof n?n():n).map(qt):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(jt):null,e.hasOwnProperty(M)||(e[M]=k({token:e,factory:t.factory}))}),r}function Mt(t,e,n){const a=t.ngComponentDef;a.directiveDefs=()=>e.map(qt),a.pipeDefs=()=>n.map(jt)}function qt(t){return Ht(t)||Ut(t)}function jt(t){return Wt(t)}function Ft(t){return{type:t.type,bootstrap:t.bootstrap||It,declarations:t.declarations||It,imports:t.imports||It,exports:t.exports||It,transitiveCompileScopes:null,schemas:t.schemas||null,id:t.id||null}}function Gt(t,e){return wt(()=>{const n=$t(t,!0);n.declarations=e.declarations||It,n.imports=e.imports||It,n.exports=e.exports||It})}function Vt(t,e){if(null==t)return St;const n={};for(const a in t)if(t.hasOwnProperty(a)){let r=t[a],i=r;Array.isArray(r)&&(i=r[1],r=r[0]),n[r]=a,e&&(e[r]=i)}return n}function zt(t){const e={};return{inputs:Vt(t.inputs,e),declaredInputs:e,outputs:Vt(t.outputs),viewQuery:t.viewQuery||null,contentQueries:t.contentQueries||null,hostBindings:t.hostBindings||null}}const Bt=Pt;function Yt(t){return{name:t.name,factory:t.factory,pure:!1!==t.pure,onDestroy:t.type.prototype.ngOnDestroy||null}}function Ht(t){return t[Nt]||null}function Ut(t){return t[Ct]||null}function Wt(t){return t[Rt]||null}function Kt(t){return t[Et]||null}function $t(t,e){const n=t[At]||null;if(!n&&!0===e)throw new Error(`Type ${j(t)} does not have 'ngModuleDef' property.`);return n}function Zt(t){return Array.isArray(t)&&"object"==typeof t[1]}function Jt(t){return Array.isArray(t)&&!0===t[1]}function Qt(t){return 0!=(4&t.flags)}function Xt(t){return 1==(1&t.flags)}function te(t){return null!==t.template}function ee(t){return 0!=(512&t[2])}class ne{constructor(t,e,n){this.factory=t,this.resolving=!1,this.canSeeViewProviders=e,this.injectImpl=n}}function ae(t,e,n,a,r,i){const{onChanges:s,onInit:o,doCheck:u}=e;r>=0&&(!n.preOrderHooks||r===n.preOrderHooks.length)&&(s||o||u)&&(n.preOrderHooks||(n.preOrderHooks=[])).push(a),i>=0&&(!n.preOrderCheckHooks||i===n.preOrderCheckHooks.length)&&(s||u)&&(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(a),s&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,s)),o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(-t,o),u&&((n.preOrderHooks||(n.preOrderHooks=[])).push(t,u),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(t,u))}function re(t,e){if(t.firstTemplatePass)for(let n=e.directiveStart,a=e.directiveEnd;n<a;n++){const e=t.data[n];e.afterContentInit&&(t.contentHooks||(t.contentHooks=[])).push(-n,e.afterContentInit),e.afterContentChecked&&((t.contentHooks||(t.contentHooks=[])).push(n,e.afterContentChecked),(t.contentCheckHooks||(t.contentCheckHooks=[])).push(n,e.afterContentChecked)),e.afterViewInit&&(t.viewHooks||(t.viewHooks=[])).push(-n,e.afterViewInit),e.afterViewChecked&&((t.viewHooks||(t.viewHooks=[])).push(n,e.afterViewChecked),(t.viewCheckHooks||(t.viewCheckHooks=[])).push(n,e.afterViewChecked)),null!=e.onDestroy&&(t.destroyHooks||(t.destroyHooks=[])).push(n,e.onDestroy)}}function ie(t,e,n,a){n||se(t,e.preOrderHooks,e.preOrderCheckHooks,n,0,void 0!==a?a:null)}function se(t,e,n,a,r,i){if(a)return;const s=(3&t[2])===r?e:n;s&&function(t,e,n,a){const r=null!=a?a:-1;let i=0;for(let s=void 0!==a?65535&t[18]:0;s<e.length;s++)if("number"==typeof e[s+1]){if(i=e[s],null!=a&&i>=a)break}else e[s]<0&&(t[18]+=65536),(i<r||-1==r)&&(oe(t,n,e,s),t[18]=(4294901760&t[18])+s+2),s++}(t,s,r,i),null==i&&(3&t[2])===r&&3!==r&&(t[2]&=1023,t[2]+=1)}function oe(t,e,n,a){const r=n[a]<0,i=n[a+1],s=t[r?-n[a]:n[a]];r?t[2]>>10<t[18]>>16&&(3&t[2])===e&&(t[2]+=1024,i.call(s)):i.call(s)}let ue=null;const le=new Map;let de,ce=null;function fe(t,e){return ce&&t===ce||(ce=t,e&&(ue=le.get(t)||null),ue=ue||{classesBitMask:0,classesIndex:1,stylesBitMask:0,stylesIndex:1}),ue}function he(){ue=null,ce=null}function ge(t){for(;Array.isArray(t);)t=t[0];return t}function pe(t,e){return ge(e[t+19])}function be(t,e){return ge(e[t.index])}function me(t,e){const n=t.index;return-1==n?null:ge(e[n])}function ye(t,e){return e[1].data[t+19]}function ve(t,e){return t[e+19]}function xe(t,e){const n=e[t];return Zt(n)?n:n[0]}function _e(t){return t.__ngContext__}function Te(t){const e=_e(t);return e?Array.isArray(e)?e:e.lView:null}function Oe(t){t[18]=0}let we,Se=null;function Ie(t){Se=t}function Ne(){return we}function Ce(){we=!0}function Re(){we=!1}function Ae(){return Le}let ke,Ee,Le,De=1,Pe=0,Me=0;function qe(t=null){on!==t&&(ln(null==t?-1:t),De=null==t?0:1,Pe=0,Me=0)}function je(){De+=1+Me,Pe=0,Me=0}function Fe(t){Pe+=t,Me=Math.max(Me,Pe)}function Ge(t){We=t}function Ve(){return ke}function ze(t,e){ke=t,Ee=e}function Be(t,e){ke=t,Le=e}function Ye(){return Ee}function He(){Ee=!1}function Ue(t=Le){return 4==(4&t[2])}let We=null,Ke=!1;function $e(){return Ke}function Ze(t){Ke=t}let Je=-1;function Qe(){return Je}function Xe(t){Je=t}let tn=0;function en(){return tn}function nn(t){tn=t}function an(t,e){const n=Le;return t&&(Je=t[1].bindingStartIndex),ke=e,Ee=!0,Le=We=t,n}function rn(t=1){return We=function(t,e){for(;t>0;)e=e[16],t--;return e}(t,We),We[9]}function sn(t,e){const n=Le[1];if(Ue(Le))Le[2]&=-5;else try{Oe(Le),e&&se(Le,n.viewHooks,n.viewCheckHooks,Ke,2,void 0)}finally{Le[2]&=-73,Le[7]=n.bindingStartIndex}an(t,null)}let on=-1;function un(){return on}function ln(t){on=t,he()}let dn,cn=null;function fn(){cn="http://www.w3.org/2000/svg"}function hn(){cn="http://www.w3.org/1998/MathML/"}function gn(){pn()}function pn(){cn=null}function bn(t){dn=t}function mn(){return dn}function yn(t,e){return!(t!=t&&e!=e)&&t!==e}function vn(t){return"string"==typeof t?t:null==t?"":""+t}function xn(t){return"function"==typeof t?t.name||t.toString():"object"==typeof t&&null!=t&&"function"==typeof t.type?t.type.name||t.type.toString():vn(t)}const _n=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(U))();function Tn(t){return{name:"window",target:t.ownerDocument.defaultView}}function On(t){return{name:"document",target:t.ownerDocument}}function wn(t){return{name:"body",target:t.ownerDocument.body}}function Sn(t){return t.indexOf("�")>=0}function In(t){return t instanceof Function?t():t}function Nn(t,e){0===e?t[2]>0&&function(t){Rn(t,2|Cn(t))}(t):t[2]=e}function Cn(t){return t[1]}function Rn(t,e){t[1]=e}function An(t,e){return t[e+2]}function kn(t,e){return 1&t[e+0]}function En(t,e){return(1&kn(t,e))>0}function Ln(t,e){return t[e+0]>>1}function Dn(t,e,n){const a=kn(t,e);t[e+0]=a|n<<1}function Pn(t,e){return t[e+1]}function Mn(t,e,n){return t[e+3+n]}function qn(t,e){return!(!t||e!==t[2])}function jn(t){return(1&Cn(t))>0}function Fn(t){return(2&Cn(t))>0}function Gn(t){return 6+t[4]}function Vn(t,e){let n=Array.isArray(t)?t[0]:t,a=Array.isArray(e)?e[0]:e;return n instanceof String&&(n=n.toString()),a instanceof String&&(a=a.toString()),yn(n,a)}function zn(t){return null!=t&&""!==t}function Bn(t,e,n=" "){return t+(e.length&&t.length?n:"")+e}function Yn(t){return t.replace(/[a-z][A-Z]/g,t=>t.charAt(0)+"-"+t.charAt(1)).toLowerCase()}function Hn(t){return Un(t)?t[0]:t}function Un(t){return Array.isArray(t)&&t.length>=6&&"string"!=typeof t[1]}function Wn(t){const e=Hn(t);return e&&e[0]||""}function Kn(t){return 0!=(8&t.flags)}function $n(t){return 0!=(16&t.flags)}function Zn(t,e){return t[e+0]}function Jn(t,e,n){t[e+1]=n}function Qn(t,e){return t[e+1]}const Xn=function(){var t={Important:1,DashCase:2};return t[t.Important]="Important",t[t.DashCase]="DashCase",t}();function ta(t){return!!t.listen}const ea={createRenderer:(t,e)=>document};function na(t,e){const n=Ae()[12],a=ta(n);let r=0;for(;r<e.length;){const i=e[r];if("number"==typeof i){if(0!==i)break;r++;const s=e[r++],o=e[r++],u=e[r++];a?n.setAttribute(t,o,u,s):t.setAttributeNS(s,o,u)}else{const s=i,o=e[++r];ra(s)?a&&n.setProperty(t,s,o):a?n.setAttribute(t,s,o):t.setAttribute(s,o),r++}}return r}function aa(t){return 3===t||4===t||6===t}function ra(t){return"@"===t[0]}function ia(t){return-1!==t}function sa(t){return 32767&t}function oa(t){return t>>16}function ua(t,e){let n=oa(t),a=e;for(;n>0;)a=a[16],n--;return a}function la(t){const e=t[3];return Jt(e)?e[3]:e}function da(t){let e=t[6];for(;null!==e&&2===e.type;)e=(t=t[16])[6];return t}function ca(t){return function(t){let e=Zt(t)?t:Te(t);for(;e&&!(512&e[2]);)e=la(e);return e}(t)[9]}let fa=!0;function ha(t){const e=fa;return fa=t,e}let ga=0;function pa(t,e){const n=ma(t,e);if(-1!==n)return n;const a=e[1];a.firstTemplatePass&&(t.injectorIndex=e.length,ba(a.data,t),ba(e,null),ba(a.blueprint,null));const r=ya(t,e),i=sa(r),s=ua(r,e),o=t.injectorIndex;if(ia(r)){const t=s[1].data;for(let n=0;n<8;n++)e[o+n]=s[i+n]|t[i+n]}return e[o+8]=r,o}function ba(t,e){t.push(0,0,0,0,0,0,0,0,e)}function ma(t,e){return-1===t.injectorIndex||t.parent&&t.parent.injectorIndex===t.injectorIndex||null==e[t.injectorIndex+8]?-1:t.injectorIndex}function ya(t,e){if(t.parent&&-1!==t.parent.injectorIndex)return t.parent.injectorIndex;let n=e[6],a=1;for(;n&&-1===n.injectorIndex;)n=(e=e[16])?e[6]:null,a++;return n?n.injectorIndex|a<<16:-1}function va(t,e,n){!function(t,e,n){let a="string"!=typeof n?n[Lt]:n.charCodeAt(0)||0;null==a&&(a=n[Lt]=ga++);const r=255&a,i=1<<r,s=64&r,o=32&r,u=e.data;128&r?s?o?u[t+7]|=i:u[t+6]|=i:o?u[t+5]|=i:u[t+4]|=i:s?o?u[t+3]|=i:u[t+2]|=i:o?u[t+1]|=i:u[t]|=i}(t,e,n)}function xa(t,e){if("class"===e)return Wn(t.classes);if("style"===e)return Wn(t.styles);const n=t.attrs;if(n){const t=n.length;let a=0;for(;a<t;){const r=n[a];if(aa(r))break;if(0===r)a+=2;else if("number"==typeof r)for(a++;a<t&&"string"==typeof n[a];)a++;else{if(r===e)return n[a+1];a+=2}}}return null}function _a(t,e,n,a=C.Default,r){if(t){const r=function(t){if("string"==typeof t)return t.charCodeAt(0)||0;const e=t[Lt];return"number"==typeof e&&e>0?255&e:e}(n);if("function"==typeof r){const i=Ve(),s=Ae();Be(t,e);try{const t=r();if(null!=t||a&C.Optional)return t;throw new Error(`No provider for ${xn(n)}!`)}finally{Be(i,s)}}else if("number"==typeof r){if(-1===r)return new Ca(t,e);let i=null,s=ma(t,e),o=-1,u=a&C.Host?da(e)[6]:null;for((-1===s||a&C.SkipSelf)&&(o=-1===s?ya(t,e):e[s+8],Na(a,!1)?(i=e[1],s=sa(o),e=ua(o,e)):s=-1);-1!==s;){o=e[s+8];const t=e[1];if(Ia(r,s,t.data)){const t=Oa(s,e,n,i,a,u);if(t!==Ta)return t}Na(a,e[1].data[s+8]===u)&&Ia(r,s,e)?(i=t,s=sa(o),e=ua(o,e)):s=-1}}}if(a&C.Optional&&void 0===r&&(r=null),0==(a&(C.Self|C.Host))){const t=e[10],i=nt(void 0);try{return t?t.get(n,r,a&C.Optional):st(n,r,a&C.Optional)}finally{nt(i)}}if(a&C.Optional)return r;throw new Error(`NodeInjector: NOT_FOUND [${xn(n)}]`)}const Ta={};function Oa(t,e,n,a,r,i){const s=e[1],o=s.data[t+8],u=wa(o,s,n,null==a?Xt(o)&&fa:a!=s&&3===o.type,r&C.Host&&i===o);return null!==u?Sa(s.data,e,u,o):Ta}function wa(t,e,n,a,r){const i=t.providerIndexes,s=e.data,o=65535&i,u=t.directiveStart,l=i>>16,d=r?o+l:t.directiveEnd;for(let c=a?o:o+l;c<d;c++){const t=s[c];if(c<u&&n===t||c>=u&&t.type===n)return c}if(r){const t=s[u];if(t&&te(t)&&t.type===n)return u}return null}function Sa(t,e,n,a){let r=e[n];if(null!==(i=r)&&"object"==typeof i&&Object.getPrototypeOf(i)==ne.prototype){const i=r;if(i.resolving)throw new Error(`Circular dep for ${xn(t[n])}`);const s=ha(i.canSeeViewProviders);let o;i.resolving=!0,i.injectImpl&&(o=nt(i.injectImpl));const u=Ve(),l=Ae();Be(a,e);try{r=e[n]=i.factory(void 0,t,e,a)}finally{i.injectImpl&&nt(o),ha(s),i.resolving=!1,Be(u,l)}}var i;return r}function Ia(t,e,n){const a=64&t,r=32&t;let i;return i=128&t?a?r?n[e+7]:n[e+6]:r?n[e+5]:n[e+4]:a?r?n[e+3]:n[e+2]:r?n[e+1]:n[e],!!(i&1<<t)}function Na(t,e){return!(t&C.Self||t&C.Host&&e)}class Ca{constructor(t,e){this._tNode=t,this._lView=e}get(t,e){return _a(this._tNode,this._lView,t,void 0,e)}}function Ra(t){const e=t,n=Ht(e)||Ut(e)||Wt(e)||D(e)||P(e);return n&&void 0!==n.factory?n.factory:null}function Aa(t){const e=Ra(Object.getPrototypeOf(t.prototype).constructor);return null!==e?e:t=>new t}function ka(t){return t.ngDebugContext}function Ea(t){return t.ngOriginalError}function La(t,...e){t.error(...e)}class Da{constructor(){this._console=console}handleError(t){const e=this._findOriginalError(t),n=this._findContext(t),a=function(t){return t.ngErrorLogger||La}(t);a(this._console,"ERROR",t),e&&a(this._console,"ORIGINAL ERROR",e),n&&a(this._console,"ERROR CONTEXT",n)}_findContext(t){return t?ka(t)?ka(t):this._findContext(Ea(t)):null}_findOriginalError(t){let e=Ea(t);for(;e&&Ea(e);)e=Ea(e);return e}}const Pa={name:"custom-elements"},Ma={name:"no-errors-schema"},qa="__SANITIZER_TRUSTED_BRAND__";function ja(t,e){return t instanceof String&&t[qa]===e}function Fa(t){return Ya(t,"Html")}function Ga(t){return Ya(t,"Style")}function Va(t){return Ya(t,"Script")}function za(t){return Ya(t,"Url")}function Ba(t){return Ya(t,"ResourceUrl")}function Ya(t,e){const n=new String(t);return n[qa]=e,n}let Ha=!0,Ua=!1;function Wa(){return Ua=!0,Ha}function Ka(){if(Ua)throw new Error("Cannot enable prod mode after platform setup.");Ha=!1}class $a{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),this.inertBodyElement=this.inertDocument.body,null==this.inertBodyElement){const t=this.inertDocument.createElement("html");this.inertDocument.appendChild(t),this.inertBodyElement=this.inertDocument.createElement("body"),t.appendChild(this.inertBodyElement)}this.inertBodyElement.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',!this.inertBodyElement.querySelector||this.inertBodyElement.querySelector("svg")?(this.inertBodyElement.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',this.getInertBodyElement=this.inertBodyElement.querySelector&&this.inertBodyElement.querySelector("svg img")&&function(){try{return!!window.DOMParser}catch(t){return!1}}()?this.getInertBodyElement_DOMParser:this.getInertBodyElement_InertDocument):this.getInertBodyElement=this.getInertBodyElement_XHR}getInertBodyElement_XHR(t){t="<body><remove></remove>"+t+"</body>";try{t=encodeURI(t)}catch(a){return null}const e=new XMLHttpRequest;e.responseType="document",e.open("GET","data:text/html;charset=utf-8,"+t,!1),e.send(void 0);const n=e.response.body;return n.removeChild(n.firstChild),n}getInertBodyElement_DOMParser(t){t="<body><remove></remove>"+t+"</body>";try{const e=(new window.DOMParser).parseFromString(t,"text/html").body;return e.removeChild(e.firstChild),e}catch(e){return null}}getInertBodyElement_InertDocument(t){const e=this.inertDocument.createElement("template");return"content"in e?(e.innerHTML=t,e):(this.inertBodyElement.innerHTML=t,this.defaultDoc.documentMode&&this.stripCustomNsAttrs(this.inertBodyElement),this.inertBodyElement)}stripCustomNsAttrs(t){const e=t.attributes;for(let a=e.length-1;0<a;a--){const n=e.item(a).name;"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||t.removeAttribute(n)}let n=t.firstChild;for(;n;)n.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(n),n=n.nextSibling}}const Za=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Ja=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;function Qa(t){return(t=String(t)).match(Za)||t.match(Ja)?t:(Wa()&&console.warn(`WARNING: sanitizing unsafe URL value ${t} (see http://g.co/ng/security#xss)`),"unsafe:"+t)}function Xa(t){return(t=String(t)).split(",").map(t=>Qa(t.trim())).join(", ")}function tr(t){const e={};for(const n of t.split(","))e[n]=!0;return e}function er(...t){const e={};for(const n of t)for(const t in n)n.hasOwnProperty(t)&&(e[t]=!0);return e}const nr=tr("area,br,col,hr,img,wbr"),ar=tr("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),rr=tr("rp,rt"),ir=er(rr,ar),sr=er(nr,er(ar,tr("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),er(rr,tr("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),ir),or=tr("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),ur=tr("srcset"),lr=er(or,ur,tr("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),tr("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),dr=tr("script,style,template");class cr{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(t){let e=t.firstChild,n=!0;for(;e;)if(e.nodeType===Node.ELEMENT_NODE?n=this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,n&&e.firstChild)e=e.firstChild;else for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);let t=this.checkClobberedElement(e,e.nextSibling);if(t){e=t;break}e=this.checkClobberedElement(e,e.parentNode)}return this.buf.join("")}startElement(t){const e=t.nodeName.toLowerCase();if(!sr.hasOwnProperty(e))return this.sanitizedSomething=!0,!dr.hasOwnProperty(e);this.buf.push("<"),this.buf.push(e);const n=t.attributes;for(let a=0;a<n.length;a++){const t=n.item(a),e=t.name,r=e.toLowerCase();if(!lr.hasOwnProperty(r)){this.sanitizedSomething=!0;continue}let i=t.value;or[r]&&(i=Qa(i)),ur[r]&&(i=Xa(i)),this.buf.push(" ",e,'="',gr(i),'"')}return this.buf.push(">"),!0}endElement(t){const e=t.nodeName.toLowerCase();sr.hasOwnProperty(e)&&!nr.hasOwnProperty(e)&&(this.buf.push("</"),this.buf.push(e),this.buf.push(">"))}chars(t){this.buf.push(gr(t))}checkClobberedElement(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return e}}const fr=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,hr=/([^\#-~ |!])/g;function gr(t){return t.replace(/&/g,"&amp;").replace(fr,(function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"})).replace(hr,(function(t){return"&#"+t.charCodeAt(0)+";"})).replace(/</g,"&lt;").replace(/>/g,"&gt;")}let pr;function br(t,e){let n=null;try{pr=pr||new $a(t);let a=e?String(e):"";n=pr.getInertBodyElement(a);let r=5,i=a;do{if(0===r)throw new Error("Failed to sanitize html because the input is unstable");r--,a=i,i=n.innerHTML,n=pr.getInertBodyElement(a)}while(a!==i);const s=new cr,o=s.sanitizeChildren(mr(n)||n);return Wa()&&s.sanitizedSomething&&console.warn("WARNING: sanitizing HTML stripped some content, see http://g.co/ng/security#xss"),o}finally{if(n){const t=mr(n)||n;for(;t.firstChild;)t.removeChild(t.firstChild)}}}function mr(t){return"content"in t&&function(t){return t.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===t.nodeName}(t)?t.content:null}const yr=function(){var t={NONE:0,HTML:1,STYLE:2,SCRIPT:3,URL:4,RESOURCE_URL:5};return t[t.NONE]="NONE",t[t.HTML]="HTML",t[t.STYLE]="STYLE",t[t.SCRIPT]="SCRIPT",t[t.URL]="URL",t[t.RESOURCE_URL]="RESOURCE_URL",t}();class vr{}const xr=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|Z|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),_r=/^url\(([^)]+)\)$/;function Tr(t){if(!(t=String(t).trim()))return"";const e=t.match(_r);return e&&Qa(e[1])===e[1]||t.match(xr)&&function(t){let e=!0,n=!0;for(let a=0;a<t.length;a++){const r=t.charAt(a);"'"===r&&n?e=!e:'"'===r&&e&&(n=!n)}return e&&n}(t)?t:(Wa()&&console.warn(`WARNING: sanitizing unsafe style value ${t} (see http://g.co/ng/security#xss).`),"unsafe")}function Or(t){const e=kr();return e?e.sanitize(yr.HTML,t)||"":ja(t,"Html")?t.toString():br(document,vn(t))}function wr(t){const e=kr();return e?e.sanitize(yr.STYLE,t)||"":ja(t,"Style")?t.toString():Tr(vn(t))}function Sr(t){const e=kr();return e?e.sanitize(yr.URL,t)||"":ja(t,"Url")?t.toString():Qa(vn(t))}function Ir(t){const e=kr();if(e)return e.sanitize(yr.RESOURCE_URL,t)||"";if(ja(t,"ResourceUrl"))return t.toString();throw new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)")}function Nr(t){const e=kr();if(e)return e.sanitize(yr.SCRIPT,t)||"";if(ja(t,"Script"))return t.toString();throw new Error("unsafe value used in a script context")}function Cr(t,e){return"src"===e&&("embed"===t||"frame"===t||"iframe"===t||"media"===t||"script"===t)||"href"===e&&("base"===t||"link"===t)?Ir:Sr}function Rr(t,e,n){return Cr(e,n)(t)}const Ar=function(t,e,n){let a=!0;return 1&(n=n||3)&&(a="background-image"===t||"background"===t||"border-image"===t||"filter"===t||"list-style"===t||"list-style-image"===t||"clip-path"===t),2&n?a?wr(e):e:a};function kr(){const t=Ae();return t&&t[13]}const Er=/([A-Z])/g;function Lr(t){try{return null!=t?t.toString().slice(0,30):t}catch(e){return"[ERROR] Exception while trying to serialize the value"}}function Dr(t){let e=_e(t);if(e){if(Array.isArray(e)){const a=e;let r,i=void 0,s=void 0;if((n=t)&&n.constructor&&n.constructor.ngComponentDef){if(r=Gr(a,t),-1==r)throw new Error("The provided component was not found in the application");i=t}else if(function(t){return t&&t.constructor&&t.constructor.ngDirectiveDef}(t)){if(r=function(t,e){let n=t[1].firstChild;for(;n;){const a=n.directiveEnd;for(let r=n.directiveStart;r<a;r++)if(t[r]===e)return n.index;n=Fr(n)}return-1}(a,t),-1==r)throw new Error("The provided directive was not found in the application");s=Vr(r,a,!1)}else if(r=jr(a,t),-1==r)return null;const o=ge(a[r]),u=_e(o),l=u&&!Array.isArray(u)?u:Pr(a,r,o);if(i&&void 0===l.component&&(l.component=i,qr(l.component,l)),s&&void 0===l.directives){l.directives=s;for(let t=0;t<s.length;t++)qr(s[t],l)}qr(l.native,l),e=l}}else{const n=t;let a=n;for(;a=a.parentNode;){const t=_e(a);if(t){let a;if(a=Array.isArray(t)?t:t.lView,!a)return null;const r=jr(a,n);if(r>=0){const t=ge(a[r]),n=Pr(a,r,t);qr(t,n),e=n;break}}}}var n;return e||null}function Pr(t,e,n){return{lView:t,nodeIndex:e,native:n,component:void 0,directives:void 0,localRefs:void 0}}function Mr(t){let e,n=_e(t);if(Array.isArray(n)){const a=Gr(n,t);e=xe(a,n);const r=Pr(n,a,e[0]);r.component=t,qr(t,r),qr(r.native,r)}else e=xe(n.nodeIndex,n.lView);return e}function qr(t,e){t.__ngContext__=e}function jr(t,e){let n=t[1].firstChild;for(;n;){if(me(n,t)===e)return n.index;n=Fr(n)}return-1}function Fr(t){if(t.child)return t.child;if(t.next)return t.next;for(;t.parent&&!t.parent.next;)t=t.parent;return t.parent&&t.parent.next}function Gr(t,e){const n=t[1].components;if(n)for(let a=0;a<n.length;a++){const r=n[a];if(xe(r,t)[9]===e)return r}else if(xe(19,t)[9]===e)return 19;return-1}function Vr(t,e,n){const a=e[1].data[t];let r=a.directiveStart;return 0==r?It:(!n&&1&a.flags&&r++,e.slice(r,a.directiveEnd))}function zr(t){throw new Error(`Multiple components match node with tagname ${t.tagName}`)}function Br(){throw new Error("Cannot mix multi providers and regular providers")}function Yr(t,e){const n=t.length,a=t.indexOf(e),r=a+e.length;return!(-1===a||a>0&&" "!==t[a-1]||r<n&&" "!==t[r])}function Hr(t,e,n){return e===(0!==t.type||n?t.tagName:"ng-template")}function Ur(t,e,n){let a=4;const r=t.attrs||[],i=function(t){for(let e=0;e<t.length;e++)if(aa(t[e]))return e;return t.length}(r);let s=!1;for(let o=0;o<e.length;o++){const u=e[o];if("number"!=typeof u){if(!s)if(4&a){if(a=2|1&a,""!==u&&!Hr(t,u,n)||""===u&&1===e.length){if(Wr(a))return!1;s=!0}}else{const l=8&a?u:e[++o];if(8&a&&t.classes){if(!Yr(Wn(t.classes),l)){if(Wr(a))return!1;s=!0}continue}const d=Kr(8&a?"class":u,r,0==t.type&&"ng-template"!==t.tagName,n);if(-1===d){if(Wr(a))return!1;s=!0;continue}if(""!==l){let t;t=d>i?"":r[d+1];const e=8&a?t:null;if(e&&!Yr(e,l)||2&a&&l!==t){if(Wr(a))return!1;s=!0}}}}else{if(!s&&!Wr(a)&&!Wr(u))return!1;if(s&&Wr(u))continue;s=!1,a=u|1&a}}return Wr(a)||s}function Wr(t){return 0==(1&t)}function Kr(t,e,n,a){if(null===e)return-1;let r=0;if(a||!n){let n=!1;for(;r<e.length;){const a=e[r];if(a===t)return r;if(3===a||6===a)n=!0;else{if(1===a){let t=e[++r];for(;"string"==typeof t;)t=e[++r];continue}if(4===a)break;if(0===a){r+=4;continue}}r+=n?1:2}return-1}return function(t,e){let n=t.indexOf(4);if(n>-1)for(n++;n<t.length;){if(t[n]===e)return n;n++}return-1}(e,t)}function $r(t,e,n=!1){for(let a=0;a<e.length;a++)if(Ur(t,e[a],n))return!0;return!1}function Zr(t,e){t:for(let n=0;n<e.length;n++){const a=e[n];if(t.length===a.length){for(let e=0;e<t.length;e++)if(t[e]!==a[e])continue t;return!0}}return!1}let Jr=[];function Qr(t,e,n,a,r,i,s,o){const u=!a,l=fe(n,Fn(t)),d=u?0:l.classesIndex++;return!(!ti(t,e,d,a,r,i,s,o,!1)&&!o||(l.classesBitMask|=1<<d,0))}function Xr(t,e,n,a,r,i,s,o,u){const l=!a,d=fe(n,Fn(t)),c=l?0:d.stylesIndex++;return!(!ti(t,e,c,a,r,i,o,u,!!l||!!s&&s(a,null,1))&&!u||(d.stylesBitMask|=1<<c,0))}function ti(t,e,n,a,r,i,s,o,u){jn(t)||(s?function(t,e,n,a,r){Jr.unshift(t,e,n,a,r)}(t,n,a,r,u):(Jr.length&&ei(),ni(t,n,a,r,u)));const l=o||Vn(e[r],i);return l&&(e[r]=i),l}function ei(){let t=0;for(;t<Jr.length;)ni(Jr[t++],Jr[t++],Jr[t++],Jr[t++],Jr[t++]);Jr.length=0}function ni(t,e,n,a,r){let i=!1;if(n){let s=!1,o=Gn(t);for(;o<t.length;){const i=Pn(t,o),u=An(t,o);if(s=n<=u,s){n<u&&ai(t,o,n,r),ri(t,!1,o,a,e);break}o+=3+i}s||(ai(t,t.length,n,r),ri(t,!1,o,a,e),i=!0)}else ri(t,!0,3,a,e),i=!0;return i}function ai(t,e,n,a){t.splice(e,0,a?1:0,1,n,null),Dn(t,e,1)}function ri(t,e,n,a,r){const i=n+3;let s=i+Pn(t,n);if(e||s--,"number"==typeof a){for(let e=i;e<=s;e++)if(t[e]===a)return;t.splice(s,0,a),t[n+1]++,Dn(t,n,Ln(t,n)|1<<r)}else null!==a&&null==t[s]&&(t[s]=a)}function ii(t,e,n,a,r,i,s,o){return r&&a&&(function(t){if(!jn(t)){const e=Hn(t);e&&function(t,e){for(let n=1;n<e.length;n+=2){const a=Qn(e,n);a&&ni(t,-1,Zn(e,n),a,!1)}}(t,e),function(t){Rn(t,1|Cn(t))}(t)}}(a),function(t,e){return t&&e>0}(a,i))?(si(a,t,e,n,i,s,o),!0):r}function si(t,e,n,a,r,i,s){const o=!0===(u=r)?-1:!1===u?0:u;var u;const l=oi,d=(o&Ln(t,3))>0?1:0;let c=Gn(t);for(;c<t.length;){const r=Pn(t,c);if(o&Ln(t,c)){let o=!1;const u=An(t,c),f=r-1,h=Mn(t,c,f);for(let r=0;r<f;r++){const l=Mn(t,c,r),d=a[l];if(zn(d)){i(e,n,u,s&&En(t,c)?s(u,d,2):d,l),o=!0;break}}if(l){const r=l(t,e,n,a,i,s,d|(o?4:2),u,h);o=o||r}o||i(e,n,u,h)}c+=3+r}l&&l(t,e,n,a,i,s,d)}let oi=null;const ui=(t,e,n,a)=>{const r=e.style;a?(a=a.toString(),t&&ta(t)?t.setStyle(e,n,a,Xn.DashCase):r&&r.setProperty(n,a)):t&&ta(t)?t.removeStyle(e,n,Xn.DashCase):r&&r.removeProperty(n)},li=(t,e,n,a)=>{if(""!==n){const r=e.classList;a?t&&ta(t)?t.addClass(e,n):r&&r.add(n):t&&ta(t)?t.removeClass(e,n):r&&r.remove(n)}};function di(t,e,n,a){const r=Hn(n);if(r)for(let i=1;i<r.length;i+=2){const n=Zn(r,i),s=Qn(r,i);a?li(t,e,n,s):ui(t,e,n,s)}}const ci={},fi={marker:"element"},hi={marker:"comment"},gi=(t,e,n,a,r,i,s,o,u)=>{let l=!1;if(Pn(t,3)){let d=!0;const c=!o;c&&-2&s&&(d=!1,l=!0),d&&(l=function t(e,n,a,r,i,s,o,u,l,d){let c=!1;if(l<Pn(e,3)){const f=Mn(e,3,l),h=r[f];let g=function(t){return t>=yi.length&&yi.push(1),yi[t]}(l);for(;g<h.length;){const p=Zn(h,g),b=u&&p>u,m=!b&&p===u,y=Qn(h,g),v=zn(y);let x=t(e,n,a,r,i,s,b?o:bi(o,v,m),b?u:p,l+1,d);if(b){c||(c=x);break}if(!x&&mi(o,m)){const t=m&&!v,e=t?d:y,r=t?f:null;i(n,a,p,s?s(p,e,3):e,r),x=!0}c=x&&m,g+=2}if(yi[l]=g,1===h.length||!u)return t(e,n,a,r,i,s,o,u,l+1,d)}return c}(t,e,n,a,r,i,s,o||null,0,u||null)),c&&function(){for(let t=0;t<yi.length;t++)yi[t]=1}()}return l};function pi(){oi=gi}function bi(t,e,n){let a=t;return e||4&t||!(n||1&t)?(a|=4,a&=-3):(a|=2,a&=-5),a}function mi(t,e){let n=(1&t)>0;return n?4&t&&e&&(n=!1):2&t&&(n=e),n}const yi=[];function vi(t,e,n,a){for(let r=1;r<t.length;r+=2){const i=Zn(t,r);if(e<=i){let s=!1;if(i===e){const e=t[r];!a&&zn(e)||(s=!0,Jn(t,r,n))}else s=!0,t.splice(r,0,e,n);return s}}return t.push(e,n),!0}function xi(t,e){let n="";for(let a=1;a<t.length;a+=2){const r=Zn(t,a),i=Qn(t,a),s=Bn(r,e?"":i,":");n=Bn(n,s,e?" ":"; ")}return n}function _i(t){let e={};if(t)for(let n=1;n<t.length;n+=2){const a=Zn(t,n),r=Qn(t,n);e[a]=r}return e}class Ti{constructor(t,e,n){this.context=t,this._data=e,this._isClassBased=n,this._sanitizer=null}overrideSanitizer(t){this._sanitizer=t}get summary(){const t={};return this._mapValues((e,n,a)=>{t[e]={prop:e,value:n,bindingIndex:a}}),t}get values(){const t={};return this._mapValues((e,n)=>{t[e]=n}),t}_mapValues(t){Pn(this.context,3)>0&&pi();const e=this._isClassBased?null:this._sanitizer||mn();si(this.context,null,{},this._data,!0,(e,n,a,r,i)=>{t(a,r,i||null)},e)}}function Oi(t){wi(Ae(),t)}function wi(t,e){ie(t,t[1],$e(),e),ln(e)}const Si=(()=>Promise.resolve(null))();function Ii(t){const e=t[1],n=Ue(t);if(e.firstTemplatePass=!1,t[7]=e.bindingStartIndex,!n){const n=$e();ie(t,e,n,void 0),function(t){for(let e=t[14];null!==e;e=e[4])if(-1===e[2]&&Jt(e))for(let t=9;t<e.length;t++){const n=e[t];Ei(n,n[1],n[9])}}(t),Ni(e,t),Oe(t),se(t,e.contentHooks,e.contentCheckHooks,n,1,void 0),function(t,e){const n=un();try{if(t.expandoInstructions){let n=e[7]=t.expandoStartIndex;Xe(n);let a=-1,r=-1;for(let i=0;i<t.expandoInstructions.length;i++){const s=t.expandoInstructions[i];"number"==typeof s?(s<=0?(r=-s,qe(r),n+=9+t.expandoInstructions[++i],a=n):n+=s,Xe(n)):(null!==s&&(e[7]=n,s(2,ge(e[a]),r),je()),a++)}}}finally{qe(n)}}(e,t)}n&&e.staticContentQueries&&Ni(e,t),n&&!e.staticViewQueries||ds(2,e,t[9]),function(t,e){if(null!=e)for(let n=0;n<e.length;n++)as(t,e[n])}(t,e.components)}function Ni(t,e){const n=t.contentQueries;if(null!==n)for(let a=0;a<n.length;a+=2){const r=n[a],i=n[a+1];if(-1!==i){const n=t.data[i];nn(r),n.contentQueries(2,e[i],i)}}}function Ci(t,e){let n;const a=e||Ae()[12],r=cn;return n=ta(a)?a.createElement(t,r):null===r?a.createElement(t):a.createElementNS(r,t),n}function Ri(t,e,n,a,r,i,s,o,u,l){const d=e.blueprint.slice();return d[0]=r,d[2]=140|a,Oe(d),d[3]=d[16]=t,d[9]=n,d[11]=s||t&&t[11],d[12]=o||t&&t[12],d[13]=u||t&&t[13]||null,d[10]=l||t&&t[10]||null,d[6]=i,d}function Ai(t,e,n,a,r,i){const s=n+19,o=t.data[s]||function(t,e,n,a,r,i,s){const o=Ve(),u=Ye(),l=u?o:o&&o.parent,d=t.data[n]=Vi(0,l&&l!==e?l:null,a,n,r,i);return 0!==s&&t.firstChild||(t.firstChild=d),o&&(!u||null!=o.child||null===d.parent&&2!==o.type?u||(o.next=d):o.child=d),d}(t,e,s,a,r,i,n);return ze(o,!0),o}function ki(t,e,n,a){let r=t.node;return null==r&&(t.node=r=Vi(0,e,2,n,null,null)),a[6]=r}function Ei(t,e,n){const a=Ye(),r=Ve();let i;if(512&t[2])ss(ca(t));else{let s=!1;try{ze(null,!0),i=an(t,t[6]),Oe(t),Di(t,e.template,Pi(t),n),e.firstTemplatePass=!1,Ii(t),s=!0}finally{sn(i,s),ze(r,a)}}}function Li(t,e,n){const a=t[11],r=an(t,t[6]),i=!$e(),s=Ue(t);let o=!1;try{i&&!s&&a.begin&&a.begin(),s&&(n&&Di(t,n,1,e),Ii(t),t[2]&=-5),Oe(t),n&&Di(t,n,2,e),Ii(t),o=!0}finally{i&&!s&&a.end&&a.end(),sn(r,o)}}function Di(t,e,n,a){pn();const r=un();try{qe(null),2&n&&wi(t,0),e(n,a)}finally{ln(r)}}function Pi(t){return Ue(t)?1:2}function Mi(t,e,n){if(Qt(e)){const a=e.directiveEnd;for(let r=e.directiveStart;r<a;r++){const e=t.data[r];e.contentQueries&&e.contentQueries(1,n[r],r)}}}function qi(t,e,n,a=be){Ne()&&(function(t,e,n){const a=n.directiveStart,r=n.directiveEnd;!t.firstTemplatePass&&a<r&&pa(n,e);for(let i=a;i<r;i++){const a=t.data[i];te(a)&&ts(e,n,a),Ki(e,Sa(t.data,e,i,n),a,i)}}(t,e,n),function(t,e,n){const a=n.directiveStart,r=n.directiveEnd,i=t.expandoInstructions,s=t.firstTemplatePass,o=n.index-19,u=un();try{qe(o);for(let o=a;o<r;o++){const a=t.data[o],r=e[o];a.hostBindings?(Ui(a,i,r,n,s),je()):s&&i.push(null)}}finally{qe(u)}}(t,e,n),function(t,e,n){const a=e.localNames;if(a){let r=e.index+1;for(let i=0;i<a.length;i+=2){const s=a[i+1],o=-1===s?n(e,t):t[s];t[r++]=o}}}(e,n,a),qe(null))}function ji(t){return t.tView||(t.tView=Fi(-1,t.template,t.consts,t.vars,t.directiveDefs,t.pipeDefs,t.viewQuery,t.schemas))}function Fi(t,e,n,a,r,i,s,o){const u=19+n,l=u+a,d=function(t,e){const n=new Array(e).fill(null,0,t).fill(ci,t);return n[7]=t,n}(u,l);return d[1]={id:t,blueprint:d,template:e,queries:null,viewQuery:s,node:null,data:d.slice().fill(null,u),bindingStartIndex:u,expandoStartIndex:l,expandoInstructions:null,firstTemplatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof r?r():r,pipeRegistry:"function"==typeof i?i():i,firstChild:null,schemas:o}}function Gi(t,e){const n=t.createRenderer(null,null);return"string"==typeof e?ta(n)?n.selectRootElement(e):n.querySelector(e):e}function Vi(t,e,n,a,r,i){return{type:n,index:a,injectorIndex:e?e.injectorIndex:-1,directiveStart:-1,directiveEnd:-1,propertyMetadataStartIndex:-1,propertyMetadataEndIndex:-1,flags:0,providerIndexes:0,tagName:r,attrs:i,localNames:null,initialInputs:void 0,inputs:void 0,outputs:void 0,tViews:null,next:null,projectionNext:null,child:null,parent:e,projection:null,styles:null,classes:null}}function zi(t,e){const n=Ae()[1];let a=null;const r=t.directiveStart,i=t.directiveEnd;if(i>r){const t=0===e,s=n.data;for(let e=r;e<i;e++){const n=s[e],r=t?n.inputs:n.outputs;for(let t in r)if(r.hasOwnProperty(t)){a=a||{};const n=r[t];a.hasOwnProperty(t)?a[t].push(e,t,n):a[t]=[e,t,n]}}}return a}const Bi={class:"className",for:"htmlFor",formaction:"formAction",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"};function Yi(t,e,n,a,r,i){const s=Ae(),o=pe(t,s),u=ye(t,s);let l,d;if(!r&&(l=hs(u))&&(d=l[e]))ys(s,d,n),Xt(u)&&function(t,e){const n=xe(e,t);16&n[2]||(n[2]|=64)}(s,t+19);else if(3===u.type){!function(t,e,n,a,r){const i=e[7]-1,s=a[i];"�"==s[0]&&(a[i]=n+s,r||(-1==t.propertyMetadataStartIndex&&(t.propertyMetadataStartIndex=i),t.propertyMetadataEndIndex=i+1))}(u,s,e=Bi[e]||e,s[1].data,r);const t=i?i(u,s):s[12];n=null!=a?a(n,u.tagName||"",e):n,ta(t)?t.setProperty(o,e,n):ra(e)||(o.setProperty?o.setProperty(e,n):o[e]=n)}}function Hi(t,e,n,a){if(!Ne())return;const r=function(t,e,n){const a=t.directiveRegistry;let r=null;if(a)for(let i=0;i<a.length;i++){const s=a[i];$r(n,s.selectors,!1)&&(r||(r=[]),va(pa(n,e),t,s.type),te(s)?(1&n.flags&&zr(n),n.flags=1,r.unshift(s)):r.push(s))}return r}(t,e,n),i=a?{"":-1}:null;if(r){Qi(n,t.data.length,r.length);for(let t=0;t<r.length;t++){const e=r[t];e.providersResolver&&e.providersResolver(e)}Wi(t,n,r.length);const a=t.preOrderHooks&&t.preOrderHooks.length||0,s=t.preOrderCheckHooks&&t.preOrderCheckHooks.length||0,o=n.index-19;for(let n=0;n<r.length;n++){const u=r[n],l=t.data.length;Xi(t,e,u,u.factory),Ji(t.data.length-1,u,i),ae(l,u,t,o,a,s)}}i&&function(t,e,n){if(e){const a=t.localNames=[];for(let t=0;t<e.length;t+=2){const r=n[e[t+1]];if(null==r)throw new Error(`Export of name '${e[t+1]}' not found!`);a.push(e[t],r)}}}(n,a,i)}function Ui(t,e,n,a,r){const i=e.length;Ie(t),t.hostBindings(1,n,a.index-19),Ie(null),i===e.length&&r&&e.push(t.hostBindings)}function Wi(t,e,n){const a=-(e.index-19),r=t.data.length-(65535&e.providerIndexes);(t.expandoInstructions||(t.expandoInstructions=[])).push(a,r,n)}function Ki(t,e,n,a){const r=Ve();$i(t,r,e),r&&r.attrs&&function(t,e,n,a){let r=a.initialInputs;(void 0===r||t>=r.length)&&(r=function(t,e,n){const a=n.initialInputs||(n.initialInputs=[]);for(let s=a.length;s<=t;s++)a.push(null);const r=n.attrs;let i=0;for(;i<r.length;){const n=r[i];if(0===n){i+=4;continue}if(5===n){i+=2;continue}if("number"==typeof n)break;const s=e[n],o=r[i+1];void 0!==s&&(a[t]||(a[t]=[])).push(n,s,o),i+=2}return a}(t,n.inputs,a));const i=r[t];if(i){const t=n.setInput;for(let a=0;a<i.length;){const r=i[a++],s=i[a++],o=i[a++];t?n.setInput(e,o,r,s):e[s]=o}}}(a,e,n,r),t[1].firstTemplatePass&&n.contentQueries&&(r.flags|=4),te(n)&&(xe(r.index,t)[9]=e)}function $i(t,e,n){const a=be(e,t);qr(n,t),a&&qr(a,t)}function Zi(t){const e=Ae()[1];(e.components||(e.components=[])).push(t.index)}function Ji(t,e,n){if(n){if(e.exportAs)for(let a=0;a<e.exportAs.length;a++)n[e.exportAs[a]]=t;e.template&&(n[""]=t)}}function Qi(t,e,n){t.flags=1&t.flags,t.directiveStart=e,t.directiveEnd=e+n,t.providerIndexes=e}function Xi(t,e,n,a){t.data.push(n);const r=new ne(a,te(n),null);t.blueprint.push(r),e.push(r)}function ts(t,e,n){const a=be(e,t),r=ji(n),i=t[11],s=rs(t,Ri(t,r,null,n.onPush?64:16,t[e.index],e,i,i.createRenderer(a,n)));s[6]=e,t[e.index]=s,t[1].firstTemplatePass&&Zi(e)}function es(t,e,n,a,r,i){const s=pe(t,a),o=a[12];if(null==n)ta(o)?o.removeAttribute(s,e,i):s.removeAttribute(e);else{const u=ye(t,a),l=null==r?vn(n):r(n,u.tagName||"",e);ta(o)?o.setAttribute(s,e,l,i):i?s.setAttributeNS(i,e,l):s.setAttribute(e,l)}}function ns(t,e,n,a,r){return new Array(t,!0,r?-1:0,e,null,null,a,n,null)}function as(t,e){const n=xe(e,t);(128==(128&n[2])||Ue(t))&&80&n[2]&&(function(t){const e=t[1];for(let n=t.length;n<e.blueprint.length;n++)t[n]=e.blueprint[n]}(n),ls(n,n[9]))}function rs(t,e){return t[14]?t[15][4]=e:t[14]=e,t[15]=e,e}function is(t){for(;t;){t[2]|=64;const e=la(t);if(ee(t)&&!e)return t;t=e}return null}function ss(t){for(let e=0;e<t.components.length;e++){const n=t.components[e];Li(Te(n),n)}}function os(t,e){const n=t[11];n.begin&&n.begin();try{Ue(t)&&ls(t,e),ls(t,e)}catch(a){throw ms(t,a),a}finally{n.end&&n.end()}}function us(t){ss(t[9])}function ls(t,e){const n=t[1],a=an(t,t[6]),r=n.template,i=Ue(t);let s=!1;try{Oe(t),i&&ds(1,n,e),Di(t,r,Pi(t),e),Ii(t),s=!0}finally{sn(a,s)}}function ds(t,e,n){const a=e.viewQuery;null!==a&&(nn(0),a(t,n))}function cs(t,e="",n=""){const a=t[1].data,r=t[7]-1;return null==a[r]?a[r]="�"+e+"�"+n:null}const fs=Si;function hs(t){return void 0===t.inputs&&(t.inputs=zi(t,0)),t.inputs}function gs(t){return t[8]||(t[8]=[])}function ps(t){return t[1].cleanup||(t[1].cleanup=[])}function bs(t,e){return e[t.index][12]}function ms(t,e){const n=t[10],a=n?n.get(Da,null):null;a&&a.handleError(e)}function ys(t,e,n){const a=t[1];for(let r=0;r<e.length;){const i=e[r++],s=e[r++],o=e[r++],u=t[i],l=a.data[i];l.setInput?l.setInput(u,n,s,o):u[o]=n}}function vs(t,e,n){const a=pe(e,t),r=t[12];ta(r)?r.setValue(a,n):a.textContent=n}function xs(t,e,n){di(t,e,n.classes,!0),di(t,e,n.styles,!1)}function _s(t,e){const n=e[3];return-1===t.index?Jt(n)?n:null:n}function Ts(t,e){const n=_s(t,e);return n?Ps(e[12],n[7]):null}function Os(t,e,n,a,r){if(null!=a){let i,s=!1;Jt(a)?i=a:Zt(a)&&(s=!0,a=a[0]);const o=ge(a);0===t?Ls(e,n,o,r||null):1===t?js(e,o,s):2===t&&e.destroyNode(o),null!=i&&function(t,e,n,a,r){const i=n[7];i!==ge(n)&&Os(e,t,a,i,r);for(let s=9;s<n.length;s++)zs(t,e,n[s],a,i)}(e,t,i,n,r)}}function ws(t,e){return ta(e)?e.createText(vn(t)):e.createTextNode(vn(t))}function Ss(t,e,n){const a=Ts(t[1].node,t);a&&zs(t[12],e?0:1,t,a,n)}function Is(t,e,n){const a=9+n,r=e.length;n>0&&(e[a-1][4]=t),n<r-9?(t[4]=e[a],mt(e,9+n,t)):(e.push(t),t[4]=null),t[3]=e;const i=t[17];null!==i&&e!==i&&function(t,e){const n=t[5];null===n?t[5]=[e]:n.push(e)}(i,t);const s=t[5];null!==s&&s.insertView(t[1]),t[2]|=128}function Ns(t,e){const n=t[5],a=n.indexOf(e);n.splice(a,1)}function Cs(t,e){if(t.length<=9)return;const n=9+e,a=t[n];if(a){const r=a[17];null!==r&&r!==t&&Ns(r,a),e>0&&(t[n-1][4]=a[4]);const i=yt(t,9+e);Ss(a,!1);const s=i[5];null!==s&&s.detachView(i[1]),a[3]=null,a[4]=null,a[2]&=-129}return a}function Rs(t,e){const n=Cs(t,e);n&&As(n)}function As(t){if(!(256&t[2])){const e=t[12];ta(e)&&e.destroyNode&&zs(e,2,t,null,null),function(t){let e=t[14];if(!e)return Es(t);for(;e;){let n=null;if(Zt(e))n=e[14];else{const t=e[9];t&&(n=t)}if(!n){for(;e&&!e[4]&&e!==t;)Es(e),e=ks(e,t);Es(e||t),n=e&&e[4]}e=n}}(t)}}function ks(t,e){let n;return Zt(t)&&(n=t[6])&&2===n.type?_s(n,t):t[3]===e?null:t[3]}function Es(t){if(Zt(t)&&!(256&t[2])){t[2]&=-129,t[2]|=256,function(t){const e=t[1];let n;if(null!=e&&null!=(n=e.destroyHooks))for(let a=0;a<n.length;a+=2){const e=t[n[a]];e instanceof ne||n[a+1].call(e)}}(t),function(t){const e=t[1].cleanup;if(null!==e){const n=t[8];for(let a=0;a<e.length-1;a+=2)if("string"==typeof e[a]){const r=e[a+1],i="function"==typeof r?r(t):ge(t[r]),s=n[e[a+2]],o=e[a+3];"boolean"==typeof o?i.removeEventListener(e[a],s,o):o>=0?n[o]():n[-o].unsubscribe(),a+=2}else e[a].call(n[e[a+1]]);t[8]=null}}(t);const e=t[6];e&&3===e.type&&ta(t[12])&&t[12].destroy();const n=t[17];if(null!==n&&Jt(t[3])){n!==t[3]&&Ns(n,t);const e=t[5];null!==e&&e.detachView(t[1])}}}function Ls(t,e,n,a){ta(t)?t.insertBefore(e,n,a):e.insertBefore(n,a,!0)}function Ds(t,e,n,a){null!==a?Ls(t,e,n,a):function(t,e,n){ta(t)?t.appendChild(e,n):e.appendChild(n)}(t,e,n)}function Ps(t,e){return ta(t)?t.parentNode(e):e.parentNode}function Ms(t,e,n){const a=function(t,e){if(ee(e))return Ps(e[12],be(t,e));const n=function(t){for(;null!=t.parent&&(4===t.parent.type||5===t.parent.type);)t=t.parent;return t}(t),a=n.parent;if(null==a){const t=e[6];return 2===t.type?Ts(t,e):function(t){const e=t[6];return e&&3===e.type?be(e,la(t)):null}(e)}{const t=n&&5===n.type;if(t&&2&n.flags)return be(n,e).parentNode;if(1&a.flags&&!t){const t=e[1].data,n=t[t[a.index].directiveStart].encapsulation;if(n!==Ot.ShadowDom&&n!==Ot.Native)return null}return be(a,e)}}(e,n);if(null!=a){const r=n[12],i=function(t,e){if(2===t.type){const n=_s(t,e);return qs(n.indexOf(e,9)-9,n)}return 4===t.type||5===t.type?be(t,e):null}(e.parent||n[6],n);if(Array.isArray(t))for(let e of t)Ds(r,a,e,i);else Ds(r,a,t,i)}}function qs(t,e){const n=9+t+1;if(n<e.length){const t=e[n],a=t[6].child;return null!==a?me(a,t):e[7]}return e[7]}function js(t,e,n){const a=Ps(t,e);a&&function(t,e,n,a){ta(t)?t.removeChild(e,n,a):e.removeChild(n)}(t,a,e,n)}function Fs(t,e,n,a){const r=a[3];let i=a[6].projection[n];if(Array.isArray(i))Ms(i,e,t);else for(;i;)32&i.flags||(1===i.type?Fs(t,e,i.projection,da(r)):(i.flags|=2,Vs(i,e,t,r))),i=i.projectionNext}function Gs(t,e,n,a){for(;t;)Vs(t,e,n,a),t=t.next}function Vs(t,e,n,a){const r=be(t,a);Ms(r,e,n),qr(r,a);const i=a[t.index];if(0===t.type)for(let s=9;s<i.length;s++)Ss(i[s],!0,i[7]);else if(5===t.type){let e=t.child;Gs(e,e,a,a)}else 4===t.type&&Gs(t.child,e,n,a),Jt(i)&&Ms(i[7],e,n)}function zs(t,e,n,a,r){let i=n[1].node.child;for(;null!==i;)Bs(t,e,n,i,a,r),i=i.next}function Bs(t,e,n,a,r,i){const s=a.type;32&a.flags||(4===s||5===s?function(t,e,n,a,r,i){Os(e,t,r,n[a.index],i);let s=a.child;for(;s;)Bs(t,e,n,s,r,i),s=s.next}(t,e,n,a,r,i):1===s?function(t,e,n,a,r,i){const s=da(n),o=s[6].projection[a.projection];if(void 0!==o)if(Array.isArray(o))for(let u=0;u<o.length;u++)Os(e,t,r,o[u],i);else{let n=o;const a=s[3];for(;null!==n;)Bs(t,e,a,n,r,i),n=n.projectionNext}}(t,e,n,a,r,i):Os(e,t,r,n[a.index],i))}class Ys{constructor(t,e,n){this._context=e,this._componentIndex=n,this._appRef=null,this._viewContainerRef=null,this._tViewNode=null,this._lView=t}get rootNodes(){return null==this._lView[0]?function t(e,n,a){let r=n.child;for(;r;){const n=me(r,e);if(n&&a.push(n),4===r.type)t(e,r,a);else if(1===r.type){const t=da(e),n=t[6],i=la(t);let s=n.projection[r.projection];for(;s&&i;)a.push(be(s,i)),s=s.next}r=r.next}return a}(this._lView,this._lView[6],[]):[]}get context(){return this._context?this._context:this._lookUpContext()}get destroyed(){return 256==(256&this._lView[2])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._viewContainerRef){const t=this._viewContainerRef.indexOf(this);t>-1&&this._viewContainerRef.detach(t),this._viewContainerRef=null}As(this._lView)}onDestroy(t){var e,n;n=t,gs(e=this._lView).push(n),e[1].firstTemplatePass&&ps(e).push(e[8].length-1,null)}markForCheck(){is(this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){os(this._lView,this.context)}checkNoChanges(){!function(t,e){Ze(!0);try{os(t,e)}finally{Ze(!1)}}(this._lView,this.context)}attachToViewContainerRef(t){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=t}detachFromAppRef(){this._appRef=null,function(t){zs(t[12],1,t,null,null)}(this._lView)}attachToAppRef(t){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}_lookUpContext(){return this._context=la(this._lView)[this._componentIndex]}}class Hs extends Ys{constructor(t){super(t,null,-1),this._view=t}detectChanges(){us(this._view)}checkNoChanges(){!function(t){Ze(!0);try{us(t)}finally{Ze(!1)}}(this._view)}get context(){return null}}let Us,Ws,Ks;function $s(t,e,n){return Us||(Us=class extends t{}),new Us(be(e,n))}function Zs(t,e,n,a){return Ws||(Ws=class extends t{constructor(t,e,n){super(),this._declarationView=t,this._declarationTContainer=e,this.elementRef=n}createEmbeddedView(t){const e=this._declarationTContainer.tViews,n=function(t,e,n,a){const r=Ye(),i=Ve();ze(null,!0);const s=Ri(n,t,e,16,null,null);return s[16]=n,ki(t,null,-1,s),t.firstTemplatePass&&(t.node.injectorIndex=a),ze(i,r),s}(e,t,this._declarationView,this._declarationTContainer.injectorIndex);n[17]=this._declarationView[this._declarationTContainer.index];const a=this._declarationView[5];null!==a&&(n[5]=a.createEmbeddedView(e)),Ei(n,e,t);const r=new Ys(n,t,-1);return r._tViewNode=n[6],r}}),0===n.type?new Ws(a,n,$s(e,n,a)):null}function Js(t,e,n,a){let r;Ks||(Ks=class extends t{constructor(t,e,n){super(),this._lContainer=t,this._hostTNode=e,this._hostView=n}get element(){return $s(e,this._hostTNode,this._hostView)}get injector(){return new Ca(this._hostTNode,this._hostView)}get parentInjector(){const t=ya(this._hostTNode,this._hostView),e=ua(t,this._hostView),n=function(t,e,n){if(n.parent&&-1!==n.parent.injectorIndex){const t=n.parent.injectorIndex;let e=n.parent;for(;null!=e.parent&&t==e.injectorIndex;)e=e.parent;return e}let a=oa(t),r=e,i=e[6];for(;a>1;)r=r[16],i=r[6],a--;return i}(t,this._hostView,this._hostTNode);return ia(t)&&null!=n?new Ca(n,e):new Ca(null,this._hostView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){return null!==this._lContainer[8]&&this._lContainer[8][t]||null}get length(){return this._lContainer.length-9}createEmbeddedView(t,e,n){const a=t.createEmbeddedView(e||{});return this.insert(a,n),a}createComponent(t,e,n,a,r){const i=n||this.parentInjector;!r&&null==t.ngModule&&i&&(r=i.get(ft,null));const s=t.create(i,a,void 0,r);return this.insert(s.hostView,e),s}insert(t,e){if(t.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");this.allocateContainerIfNeeded();const n=t._lView,a=this._adjustIndex(e);return Jt(n[3])?this.move(t,a):(Is(n,this._lContainer,a),Ss(n,!0,qs(a,this._lContainer)),t.attachToViewContainerRef(this),mt(this._lContainer[8],a,t),t)}move(t,e){if(t.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");const n=this.indexOf(t);return-1!==n&&this.detach(n),this.insert(t,e),t}indexOf(t){return null!==this._lContainer[8]?this._lContainer[8].indexOf(t):0}remove(t){this.allocateContainerIfNeeded();const e=this._adjustIndex(t,-1);Rs(this._lContainer,e),yt(this._lContainer[8],e)}detach(t){this.allocateContainerIfNeeded();const e=this._adjustIndex(t,-1),n=Cs(this._lContainer,e);return n&&null!=yt(this._lContainer[8],e)?new Ys(n,n[9],-1):null}_adjustIndex(t,e=0){return null==t?this.length+e:t}allocateContainerIfNeeded(){null===this._lContainer[8]&&(this._lContainer[8]=[])}});const i=a[n.index];if(Jt(i))r=i,r[2]=-1;else{let t;if(t=4===n.type?ge(i):a[12].createComment(""),ee(a)){const e=a[12],r=be(n,a);Ls(e,Ps(e,r),t,function(t,e){return ta(t)?t.nextSibling(e):e.nextSibling}(e,r))}else Ms(t,n,a);a[n.index]=r=ns(i,a,t,n,!0),rs(a,r)}return new Ks(r,n,a)}function Qs(t=!1){return function(t,e,n){if(Xt(t)&&!n){const n=t.directiveStart,a=xe(t.index,e);return new Ys(a,null,n)}if(3===t.type||0===t.type||4===t.type){const t=da(e);return new Ys(t,t[9],-1)}return null}(Ve(),Ae(),t)}let Xs=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>eo(),t})();const to=Qs,eo=(...t)=>{},no=Function;function ao(t){return"function"==typeof t}const ro=/^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/,io=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/,so=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/,oo=/^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{\s+super\(\.\.\.arguments\)/;class uo{constructor(t){this._reflect=t||U.Reflect}isReflectionEnabled(){return!0}factory(t){return(...e)=>new t(...e)}_zipTypesAndAnnotations(t,e){let n;n=new Array(void 0===t?e.length:t.length);for(let a=0;a<n.length;a++)n[a]=void 0===t?[]:t[a]&&t[a]!=Object?[t[a]]:[],e&&null!=e[a]&&(n[a]=n[a].concat(e[a]));return n}_ownParameters(t,e){if(n=t.toString(),ro.test(n)||oo.test(n)||io.test(n)&&!so.test(n))return null;var n;if(t.parameters&&t.parameters!==e.parameters)return t.parameters;const a=t.ctorParameters;if(a&&a!==e.ctorParameters){const t="function"==typeof a?a():a,e=t.map(t=>t&&t.type),n=t.map(t=>t&&lo(t.decorators));return this._zipTypesAndAnnotations(e,n)}const r=t.hasOwnProperty(b)&&t[b],i=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata("design:paramtypes",t);return i||r?this._zipTypesAndAnnotations(i,r):new Array(t.length).fill(void 0)}parameters(t){if(!ao(t))return[];const e=co(t);let n=this._ownParameters(t,e);return n||e===Object||(n=this.parameters(e)),n||[]}_ownAnnotations(t,e){if(t.annotations&&t.annotations!==e.annotations){let e=t.annotations;return"function"==typeof e&&e.annotations&&(e=e.annotations),e}return t.decorators&&t.decorators!==e.decorators?lo(t.decorators):t.hasOwnProperty(p)?t[p]:null}annotations(t){if(!ao(t))return[];const e=co(t),n=this._ownAnnotations(t,e)||[];return(e!==Object?this.annotations(e):[]).concat(n)}_ownPropMetadata(t,e){if(t.propMetadata&&t.propMetadata!==e.propMetadata){let e=t.propMetadata;return"function"==typeof e&&e.propMetadata&&(e=e.propMetadata),e}if(t.propDecorators&&t.propDecorators!==e.propDecorators){const e=t.propDecorators,n={};return Object.keys(e).forEach(t=>{n[t]=lo(e[t])}),n}return t.hasOwnProperty(m)?t[m]:null}propMetadata(t){if(!ao(t))return{};const e=co(t),n={};if(e!==Object){const t=this.propMetadata(e);Object.keys(t).forEach(e=>{n[e]=t[e]})}const a=this._ownPropMetadata(t,e);return a&&Object.keys(a).forEach(t=>{const e=[];n.hasOwnProperty(t)&&e.push(...n[t]),e.push(...a[t]),n[t]=e}),n}ownPropMetadata(t){return ao(t)&&this._ownPropMetadata(t,co(t))||{}}hasLifecycleHook(t,e){return t instanceof no&&e in t.prototype}guards(t){return{}}getter(t){return new Function("o","return o."+t+";")}setter(t){return new Function("o","v","return o."+t+" = v;")}method(t){return new Function("o","args",`if (!o.${t}) throw new Error('"${t}" is undefined');\n        return o.${t}.apply(o, args);`)}importUri(t){return"object"==typeof t&&t.filePath?t.filePath:`./${j(t)}`}resourceUri(t){return`./${j(t)}`}resolveIdentifier(t,e,n,a){return a}resolveEnum(t,e){return t[e]}}function lo(t){return t?t.map(t=>new(0,t.type.annotationCls)(...t.args?t.args:[])):[]}function co(t){const e=t.prototype?Object.getPrototypeOf(t.prototype):null;return(e?e.constructor:null)||Object}let fo=null;function ho(){return fo=fo||new uo}function go(t){return po(ho().parameters(t))}function po(t){const e=W();return t.map(t=>function(t,e){const n={token:null,host:!1,optional:!1,resolved:t.R3ResolvedDependencyType.Token,self:!1,skipSelf:!1};function a(e){n.resolved=t.R3ResolvedDependencyType.Token,n.token=e}if(Array.isArray(e)){if(0===e.length)throw new Error("Dependency array must have arguments.");for(let r=0;r<e.length;r++){const i=e[r];if(void 0!==i)if(i instanceof O||"Optional"===i.__proto__.ngMetadataName)n.optional=!0;else if(i instanceof S||"SkipSelf"===i.__proto__.ngMetadataName)n.skipSelf=!0;else if(i instanceof w||"Self"===i.__proto__.ngMetadataName)n.self=!0;else if(i instanceof I||"Host"===i.__proto__.ngMetadataName)n.host=!0;else if(i instanceof T)n.token=i.token;else if(i instanceof N){if(void 0===i.attributeName)throw new Error("Attribute name must be defined.");n.token=i.attributeName,n.resolved=t.R3ResolvedDependencyType.Attribute}else i===Xs?(n.token=i,n.resolved=t.R3ResolvedDependencyType.ChangeDetectorRef):a(i)}}else a(e);return n}(e,t))}function bo(t,e){let n=null;t.hasOwnProperty(M)||Object.defineProperty(t,M,{get:()=>{if(null===n){const a=e||{providedIn:null},r=yo(a)||xo(a)||vo(a)||_o(a),i={name:t.name,type:t,typeArgumentCount:0,providedIn:a.providedIn,ctorDeps:go(t),userDeps:void 0};if((yo(a)||xo(a))&&void 0!==a.deps&&(i.userDeps=po(a.deps)),r)if(yo(a))i.useClass=a.useClass;else if(vo(a))i.useValue=a.useValue;else if(xo(a))i.useFactory=a.useFactory;else{if(!_o(a))throw new Error("Unreachable state.");i.useExisting=a.useExisting}else i.useClass=t;n=W().compileInjectable(ct,`ng:///${t.name}/ngInjectableDef.js`,i)}return n}})}const mo=R({provide:String,useValue:R});function yo(t){return void 0!==t.useClass}function vo(t){return mo in t}function xo(t){return void 0!==t.useFactory}function _o(t){return void 0!==t.useExisting}const To=R({provide:String,useValue:R}),Oo=[];function wo(t,e){if(!e){const e=(new uo).parameters(t);return()=>new t(...ot(e))}if(To in e){const t=e;return()=>t.useValue}if(e.useExisting){const t=e;return()=>rt(t.useExisting)}if(e.useFactory){const t=e;return()=>t.useFactory(...ot(t.deps||Oo))}if(e.useClass){const n=e;let a=e.deps;if(!a){const e=new uo;a=e.parameters(t)}return()=>new n.useClass(...ot(a))}{let n=e.deps;if(!n){const e=new uo;n=e.parameters(t)}return()=>new t(...ot(n))}}const So=y("Injectable",void 0,void 0,void 0,(t,e)=>No(t,e)),Io=bo,No=function(t,e){e&&void 0!==e.providedIn&&!D(t)&&(t.ngInjectableDef=k({token:t,providedIn:e.providedIn,factory:wo(t,e)}))},Co=new K("The presence of this token marks an injector as being the root injector."),Ro={},Ao={},ko=[];let Eo=void 0;function Lo(){return void 0===Eo&&(Eo=new ut),Eo}function Do(t,e=null,n=null,a){return e=e||Lo(),new Po(t,n,e,a)}class Po{constructor(t,e,n,a=null){this.parent=n,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this._destroyed=!1;const r=[];bt([t],t=>this.processInjectorType(t,[],r)),e&&bt(e,n=>this.processProvider(n,t,e)),this.records.set($,jo(void 0,this)),this.isRootInjector=this.records.has(Co),this.injectorDefTypes.forEach(t=>this.get(t)),this.source=a||("object"==typeof t?null:j(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,e=Z,n=C.Default){this.assertNotDestroyed();const a=et(this);try{if(!(n&C.SkipSelf)){let e=this.records.get(t);if(void 0===e){const n=("function"==typeof(r=t)||"object"==typeof r&&r instanceof K)&&D(t);n&&this.injectableDefInScope(n)&&(e=jo(Mo(t),Ro),this.records.set(t,e))}if(void 0!==e)return this.hydrate(t,e)}return(n&C.Self?Lo():this.parent).get(t,n&C.Optional?null:e)}catch(i){if("NullInjectorError"===i.name){if((i.ngTempTokenPath=i.ngTempTokenPath||[]).unshift(j(t)),a)throw i;return lt(i,t,"R3InjectorError",this.source)}throw i}finally{et(a)}var r}toString(){const t=[];return this.records.forEach((e,n)=>t.push(j(n))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(t,e,n){if(!(t=V(t)))return!1;let a=P(t);const r=null==a&&t.ngModule||void 0,i=void 0===r?t:r,s=-1!==n.indexOf(i);if(void 0!==r&&(a=P(r)),null==a)return!1;if(this.injectorDefTypes.add(i),this.records.set(i,jo(a.factory,Ro)),null!=a.imports&&!s){let t;n.push(i);try{bt(a.imports,a=>{this.processInjectorType(a,e,n)&&(void 0===t&&(t=[]),t.push(a))})}finally{}if(void 0!==t)for(let e=0;e<t.length;e++){const{ngModule:n,providers:a}=t[e];bt(a,t=>this.processProvider(t,n,a||ko))}}const o=a.providers;if(null!=o&&!s){const e=t;bt(o,t=>this.processProvider(t,e,o))}return void 0!==r&&void 0!==t.providers}processProvider(t,e,n){let a=Go(t=V(t))?t:V(t&&t.provide);const r=function(t,e,n){let a=qo(t,e,n);return Fo(t)?jo(void 0,t.useValue):jo(a,Ro)}(t,e,n);if(Go(t)||!0!==t.multi){const t=this.records.get(a);t&&void 0!==t.multi&&Br()}else{let e=this.records.get(a);e?void 0===e.multi&&Br():(e=jo(void 0,Ro,!0),e.factory=()=>ot(e.multi),this.records.set(a,e)),a=t,e.multi.push(t)}this.records.set(a,r)}hydrate(t,e){var n;return e.value===Ao?function(t){throw new Error(`Cannot instantiate cyclic dependency! ${t}`)}(j(t)):e.value===Ro&&(e.value=Ao,e.value=e.factory()),"object"==typeof e.value&&e.value&&null!==(n=e.value)&&"object"==typeof n&&"function"==typeof n.ngOnDestroy&&this.onDestroy.add(e.value),e.value}injectableDefInScope(t){return!!t.providedIn&&("string"==typeof t.providedIn?"any"===t.providedIn||"root"===t.providedIn&&this.isRootInjector:this.injectorDefTypes.has(t.providedIn))}}function Mo(t){const e=D(t);if(null!==e)return e.factory;const n=P(t);if(null!==n)return n.factory;if(t instanceof K)throw new Error(`Token ${j(t)} is missing an ngInjectableDef definition.`);if(t instanceof Function)return function(t){const e=t.length;if(e>0){const n=new Array(e).fill("?");throw new Error(`Can't resolve all parameters for ${j(t)}: (${n.join(", ")}).`)}const n=(a=t)&&a[M]?(console.warn(`DEPRECATED: DI is instantiating a token "${a.name}" that inherits its @Injectable decorator but does not provide one itself.\n`+`This will become an error in v10. Please add @Injectable() to the "${a.name}" class.`),a[M]):null;var a;return null!==n?()=>n.factory(t):()=>new t}(t);throw new Error("unreachable")}function qo(t,e,n){let a=void 0;if(Go(t))return Mo(V(t));if(Fo(t))a=()=>V(t.useValue);else if((r=t)&&r.useExisting)a=()=>rt(V(t.useExisting));else if(function(t){return!(!t||!t.useFactory)}(t))a=()=>t.useFactory(...ot(t.deps||[]));else{const r=V(t&&(t.useClass||t.provide));if(r||function(t,e,n){let a="";throw t&&e&&(a=` - only instances of Provider and Type are allowed, got: [${e.map(t=>t==n?"?"+n+"?":"...").join(", ")}]`),new Error(`Invalid provider for the NgModule '${j(t)}'`+a)}(e,n,t),!function(t){return!!t.deps}(t))return Mo(r);a=()=>new r(...ot(t.deps))}var r;return a}function jo(t,e,n=!1){return{factory:t,value:e,multi:n?[]:void 0}}function Fo(t){return null!==t&&"object"==typeof t&&Q in t}function Go(t){return"function"==typeof t}function Vo(t,e,n){return Do({name:n},e,t,n)}const zo=function(t,e,n){return new Ko(t,e,n)};let Bo=(()=>{class t{static create(t,e){return Array.isArray(t)?zo(t,e,""):zo(t.providers,t.parent,t.name||"")}}return t.THROW_IF_NOT_FOUND=Z,t.NULL=new ut,t.ngInjectableDef=k({token:t,providedIn:"any",factory:()=>rt($)}),t.__NG_ELEMENT_ID__=-1,t})();const Yo=function(t){return t},Ho=[],Uo=Yo,Wo=function(){return Array.prototype.slice.call(arguments)};class Ko{constructor(t,e=Bo.NULL,n=null){this.parent=e,this.source=n;const a=this._records=new Map;a.set(Bo,{token:Bo,fn:Yo,deps:Ho,value:this,useNew:!1}),a.set($,{token:$,fn:Yo,deps:Ho,value:this,useNew:!1}),function t(e,n){if(n)if((n=V(n))instanceof Array)for(let a=0;a<n.length;a++)t(e,n[a]);else{if("function"==typeof n)throw Zo("Function/Class not supported",n);if(!n||"object"!=typeof n||!n.provide)throw Zo("Unexpected provider",n);{let t=V(n.provide);const a=function(t){const e=function(t){let e=Ho;const n=t.deps;if(n&&n.length){e=[];for(let t=0;t<n.length;t++){let a=6,r=V(n[t]);if(r instanceof Array)for(let t=0,e=r;t<e.length;t++){const n=e[t];n instanceof O||n==O?a|=1:n instanceof S||n==S?a&=-3:n instanceof w||n==w?a&=-5:r=n instanceof T?n.token:V(n)}e.push({token:r,options:a})}}else if(t.useExisting)e=[{token:V(t.useExisting),options:6}];else if(!(n||Q in t))throw Zo("'deps' required",t);return e}(t);let n=Yo,a=Ho,r=!1,i=V(t.provide);if(Q in t)a=t.useValue;else if(t.useFactory)n=t.useFactory;else if(t.useExisting);else if(t.useClass)r=!0,n=V(t.useClass);else{if("function"!=typeof i)throw Zo("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",t);r=!0,n=i}return{deps:e,fn:n,useNew:r,value:a}}(n);if(!0===n.multi){let a=e.get(t);if(a){if(a.fn!==Wo)throw $o(t)}else e.set(t,a={token:n.provide,deps:[],useNew:!1,fn:Wo,value:Ho});t=n,a.deps.push({token:t,options:6})}const r=e.get(t);if(r&&r.fn==Wo)throw $o(t);e.set(t,a)}}}(a,t)}get(t,e,n=C.Default){const a=this._records.get(t);try{return function t(e,n,a,r,i,s){try{return function(e,n,a,r,i,s){let o;if(!n||s&C.SkipSelf)s&C.Self||(o=r.get(e,i,C.Default));else{if(o=n.value,o==Uo)throw Error("ɵCircular dependency");if(o===Ho){n.value=Uo;let e=void 0,i=n.useNew,s=n.fn,u=n.deps,l=Ho;if(u.length){l=[];for(let e=0;e<u.length;e++){const n=u[e],i=n.options,s=2&i?a.get(n.token):void 0;l.push(t(n.token,s,a,s||4&i?r:Bo.NULL,1&i?null:Bo.THROW_IF_NOT_FOUND,C.Default))}}n.value=o=i?new s(...l):s.apply(e,l)}}return o}(e,n,a,r,i,s)}catch(o){throw o instanceof Error||(o=new Error(o)),(o.ngTempTokenPath=o.ngTempTokenPath||[]).unshift(e),n&&n.value==Uo&&(n.value=Ho),o}}(t,a,this._records,this.parent,e,n)}catch(r){return lt(r,t,"StaticInjectorError",this.source)}}toString(){const t=[];return this._records.forEach((e,n)=>t.push(j(n))),`StaticInjector[${t.join(", ")}]`}}function $o(t){return Zo("Cannot mix multi providers and regular providers",t)}function Zo(t,e){return new Error(dt(t,e,"StaticInjectorError"))}function Jo(t){return t.length>1?" ("+function(t){const e=[];for(let n=0;n<t.length;++n){if(e.indexOf(t[n])>-1)return e.push(t[n]),e;e.push(t[n])}return e}(t.slice().reverse()).map(t=>j(t.token)).join(" -> ")+")":""}function Qo(t,e,n,a){const r=[e],i=n(r),s=a?function(t,e){const n=`${t} caused by: ${e instanceof Error?e.message:e}`,a=Error(n);return a.ngOriginalError=e,a}(i,a):Error(i);return s.addKey=Xo,s.keys=r,s.injectors=[t],s.constructResolvingMessage=n,s.ngOriginalError=a,s}function Xo(t,e){this.injectors.push(t),this.keys.push(e),this.message=this.constructResolvingMessage(this.keys)}function tu(t,e){const n=[];for(let a=0,r=e.length;a<r;a++){const t=e[a];n.push(t&&0!=t.length?t.map(j).join(" "):"?")}return Error("Cannot resolve all parameters for '"+j(t)+"'("+n.join(", ")+"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '"+j(t)+"' is decorated with Injectable.")}class eu{constructor(t,e){if(this.token=t,this.id=e,!t)throw new Error("Token must be defined!");this.displayName=j(this.token)}static get(t){return au.get(V(t))}static get numberOfKeys(){return au.numberOfKeys}}class nu{constructor(){this._allKeys=new Map}get(t){if(t instanceof eu)return t;if(this._allKeys.has(t))return this._allKeys.get(t);const e=new eu(t,eu.numberOfKeys);return this._allKeys.set(t,e),e}get numberOfKeys(){return this._allKeys.size}}const au=new nu;class ru{constructor(t){this.reflectionCapabilities=t}updateCapabilities(t){this.reflectionCapabilities=t}factory(t){return this.reflectionCapabilities.factory(t)}parameters(t){return this.reflectionCapabilities.parameters(t)}annotations(t){return this.reflectionCapabilities.annotations(t)}propMetadata(t){return this.reflectionCapabilities.propMetadata(t)}hasLifecycleHook(t,e){return this.reflectionCapabilities.hasLifecycleHook(t,e)}getter(t){return this.reflectionCapabilities.getter(t)}setter(t){return this.reflectionCapabilities.setter(t)}method(t){return this.reflectionCapabilities.method(t)}importUri(t){return this.reflectionCapabilities.importUri(t)}resourceUri(t){return this.reflectionCapabilities.resourceUri(t)}resolveIdentifier(t,e,n,a){return this.reflectionCapabilities.resolveIdentifier(t,e,n,a)}resolveEnum(t,e){return this.reflectionCapabilities.resolveEnum(t,e)}}const iu=new ru(new uo);class su{constructor(t,e,n){this.key=t,this.optional=e,this.visibility=n}static fromKey(t){return new su(t,!1,null)}}const ou=[];class uu{constructor(t,e,n){this.key=t,this.resolvedFactories=e,this.multiProvider=n,this.resolvedFactory=this.resolvedFactories[0]}}class lu{constructor(t,e){this.factory=t,this.dependencies=e}}function du(t){let e,n;if(t.useClass){const a=V(t.useClass);e=iu.factory(a),n=hu(a)}else t.useExisting?(e=t=>t,n=[su.fromKey(eu.get(t.useExisting))]):t.useFactory?(e=t.useFactory,n=function(t,e){if(e){const n=e.map(t=>[t]);return e.map(e=>gu(t,e,n))}return hu(t)}(t.useFactory,t.deps)):(e=()=>t.useValue,n=ou);return new lu(e,n)}function cu(t){return new uu(eu.get(t.provide),[du(t)],t.multi||!1)}function fu(t){const e=function(t,e){for(let n=0;n<t.length;n++){const a=t[n],r=e.get(a.key.id);if(r){if(a.multiProvider!==r.multiProvider)throw Error(`Cannot mix multi providers and regular providers, got: ${r} ${a}`);if(a.multiProvider)for(let t=0;t<a.resolvedFactories.length;t++)r.resolvedFactories.push(a.resolvedFactories[t]);else e.set(a.key.id,a)}else{let t;t=a.multiProvider?new uu(a.key,a.resolvedFactories.slice(),a.multiProvider):a,e.set(a.key.id,t)}}return e}(function t(e,n){return e.forEach(e=>{if(e instanceof no)n.push({provide:e,useClass:e});else if(e&&"object"==typeof e&&void 0!==e.provide)n.push(e);else{if(!(e instanceof Array))throw Error(`Invalid provider - only instances of Provider and Type are allowed, got: ${e}`);t(e,n)}}),n}(t,[]).map(cu),new Map);return Array.from(e.values())}function hu(t){const e=iu.parameters(t);if(!e)return[];if(e.some(t=>null==t))throw tu(t,e);return e.map(n=>gu(t,n,e))}function gu(t,e,n){let a=null,r=!1;if(!Array.isArray(e))return pu(e instanceof T?e.token:e,r,null);let i=null;for(let s=0;s<e.length;++s){const t=e[s];t instanceof no?a=t:t instanceof T?a=t.token:t instanceof O?r=!0:t instanceof w||t instanceof S?i=t:t instanceof K&&(a=t)}if(a=V(a),null!=a)return pu(a,r,i);throw tu(t,n)}function pu(t,e,n){return new su(eu.get(t),e,n)}const bu=new Object;class mu{static resolve(t){return fu(t)}static resolveAndCreate(t,e){const n=mu.resolve(t);return mu.fromResolvedProviders(n,e)}static fromResolvedProviders(t,e){return new yu(t,e)}}let yu=(()=>{class t{constructor(t,e){this._constructionCounter=0,this._providers=t,this.parent=e||null;const n=t.length;this.keyIds=new Array(n),this.objs=new Array(n);for(let a=0;a<n;a++)this.keyIds[a]=t[a].key.id,this.objs[a]=bu}get(t,e=Z){return this._getByKey(eu.get(t),null,e)}resolveAndCreateChild(t){const e=mu.resolve(t);return this.createChildFromResolved(e)}createChildFromResolved(e){const n=new t(e);return n.parent=this,n}resolveAndInstantiate(t){return this.instantiateResolved(mu.resolve([t])[0])}instantiateResolved(t){return this._instantiateProvider(t)}getProviderAtIndex(t){if(t<0||t>=this._providers.length)throw function(t){return Error(`Index ${t} is out-of-bounds.`)}(t);return this._providers[t]}_new(t){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw Qo(this,t.key,(function(t){return`Cannot instantiate cyclic dependency!${Jo(t)}`}));return this._instantiateProvider(t)}_getMaxNumberOfObjects(){return this.objs.length}_instantiateProvider(t){if(t.multiProvider){const e=new Array(t.resolvedFactories.length);for(let n=0;n<t.resolvedFactories.length;++n)e[n]=this._instantiate(t,t.resolvedFactories[n]);return e}return this._instantiate(t,t.resolvedFactories[0])}_instantiate(t,e){const n=e.factory;let a,r;try{a=e.dependencies.map(t=>this._getByReflectiveDependency(t))}catch(s){throw s.addKey&&s.addKey(this,t.key),s}try{r=n(...a)}catch(s){throw Qo(this,t.key,(function(t){const e=j(t[0].token);return`${i.message}: Error during instantiation of ${e}!${Jo(t)}.`}),i=s)}var i;return r}_getByReflectiveDependency(t){return this._getByKey(t.key,t.visibility,t.optional?null:Z)}_getByKey(e,n,a){return e===t.INJECTOR_KEY?this:n instanceof w?this._getByKeySelf(e,a):this._getByKeyDefault(e,a,n)}_getObjByKeyId(t){for(let e=0;e<this.keyIds.length;e++)if(this.keyIds[e]===t)return this.objs[e]===bu&&(this.objs[e]=this._new(this._providers[e])),this.objs[e];return bu}_throwOrNull(t,e){if(e!==Z)return e;throw function(t,e){return Qo(t,e,(function(t){return`No provider for ${j(t[0].token)}!${Jo(t)}`}))}(this,t)}_getByKeySelf(t,e){const n=this._getObjByKeyId(t.id);return n!==bu?n:this._throwOrNull(t,e)}_getByKeyDefault(e,n,a){let r;for(r=a instanceof S?this.parent:this;r instanceof t;){const t=r,n=t._getObjByKeyId(e.id);if(n!==bu)return n;r=t.parent}return null!==r?r.get(e.token,n):this._throwOrNull(e,n)}get displayName(){return`ReflectiveInjector(providers: [${function(t,e){const n=new Array(t._providers.length);for(let a=0;a<t._providers.length;++a)n[a]=e(t.getProviderAtIndex(a));return n}(this,t=>' "'+t.key.displayName+'" ').join(", ")}])`}toString(){return this.displayName}}return t.INJECTOR_KEY=eu.get(Bo),t})();const vu=new K("AnalyzeForEntryComponents");class xu{}const _u=_("ContentChildren",(t,e={})=>Object.assign({selector:t,first:!1,isViewQuery:!1,descendants:!1},e),xu),Tu=_("ContentChild",(t,e={})=>Object.assign({selector:t,first:!0,isViewQuery:!1,descendants:!0},e),xu),Ou=_("ViewChildren",(t,e={})=>Object.assign({selector:t,first:!1,isViewQuery:!0,descendants:!0},e),xu),wu=_("ViewChild",(t,e)=>Object.assign({selector:t,first:!0,isViewQuery:!0,descendants:!0},e),xu);function Su(t){const e=[],n=new Map;function a(e){let a=n.get(e);if(!a){const r=t(e);n.set(e,a=r.then(Au))}return a}return Iu.forEach((t,n)=>{const r=[];t.templateUrl&&r.push(a(t.templateUrl).then(e=>{t.template=e}));const i=t.styleUrls,s=t.styles||(t.styles=[]),o=t.styles.length;i&&i.forEach((e,n)=>{s.push(""),r.push(a(e).then(a=>{s[o+n]=a,i.splice(i.indexOf(e),1),0==i.length&&(t.styleUrls=void 0)}))});const u=Promise.all(r).then(()=>function(t){Nu.delete(t)}(n));e.push(u)}),Ru(),Promise.all(e).then(()=>{})}let Iu=new Map;const Nu=new Set;function Cu(t){return!!(t.templateUrl&&!t.hasOwnProperty("template")||t.styleUrls&&t.styleUrls.length)}function Ru(){const t=Iu;return Iu=new Map,t}function Au(t){return"string"==typeof t?t:t.text()}function ku(t){const e=Ae(),n=e[1];n.firstTemplatePass&&(function(t,e,n){const a=t.expandoInstructions,r=a.length;r>=2&&a[r-2]===e.hostBindings?a[r-1]=a[r-1]+n:a.push(e.hostBindings,n)}(n,Se,t),function(t,e,n){for(let a=0;a<n;a++)e.push(ci),t.blueprint.push(ci),t.data.push(null)}(n,e,t))}let Eu=null;function Lu(){if(!Eu){const t=U.Symbol;if(t&&t.iterator)Eu=t.iterator;else{const t=Object.getOwnPropertyNames(Map.prototype);for(let e=0;e<t.length;++e){const n=t[e];"entries"!==n&&"size"!==n&&Map.prototype[n]===Map.prototype.entries&&(Eu=n)}}}return Eu}function Du(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}function Pu(t,e){const n=qu(t),a=qu(e);if(n&&a)return function(t,e,n){const a=t[Lu()](),r=e[Lu()]();for(;;){const t=a.next(),e=r.next();if(t.done&&e.done)return!0;if(t.done||e.done)return!1;if(!n(t.value,e.value))return!1}}(t,e,Pu);{const r=t&&("object"==typeof t||"function"==typeof t),i=e&&("object"==typeof e||"function"==typeof e);return!(n||!r||a||!i)||Du(t,e)}}class Mu{constructor(t){this.wrapped=t}static wrap(t){return new Mu(t)}static unwrap(t){return Mu.isWrapped(t)?t.wrapped:t}static isWrapped(t){return t instanceof Mu}}function qu(t){return!!ju(t)&&(Array.isArray(t)||!(t instanceof Map)&&Lu()in t)}function ju(t){return null!==t&&("function"==typeof t||"object"==typeof t)}function Fu(t,e,n){return t[e]=n}function Gu(t,e){return t[e]}function Vu(t,e,n){return!!yn(t[e],n)&&(t[e]=n,!0)}function zu(t,e,n,a){const r=Vu(t,e,n);return Vu(t,e+1,a)||r}function Bu(t,e,n,a,r){const i=zu(t,e,n,a);return Vu(t,e+2,r)||i}function Yu(t,e,n,a,r,i){const s=zu(t,e,n,a);return zu(t,e+2,r,i)||s}function Hu(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n),Hu}function Uu(t,e){const n=t[7]++;return cs(t),Vu(t,n,e)?e:ci}function Wu(t,e,n,a){const r=un(),i=Ae(),s=Uu(i,e);return s!==ci&&es(r,t,s,i,n,a),Wu}function Ku(t,e){let n=!1;const a=t[1].data;let r=t[7];if(null==a[r]){for(let t=2;t<e.length;t+=2)a[r++]=e[t];r=t[7]}for(let s=1;s<e.length;s+=2)n=Vu(t,r++,e[s])||n;if(t[7]=r,cs(t,e[0],e[e.length-1]),!n)return ci;let i=e[0];for(let s=1;s<e.length;s+=2)i+=vn(e[s])+e[s+1];return i}function $u(t,e,n,a){const r=Vu(t,t[7]++,n);return cs(t,e,a),r?e+vn(n)+a:ci}function Zu(t,e,n,a,r,i){const s=t[7],o=zu(t,s,n,r);return t[7]+=2,cs(t,e,i)&&(t[1].data[s]=a),o?e+vn(n)+a+vn(r)+i:ci}function Ju(t,e,n,a,r,i,s,o){const u=t[7],l=Bu(t,u,n,r,s);if(t[7]+=3,cs(t,e,o)){const e=t[1].data;e[u]=a,e[u+1]=i}return l?e+vn(n)+a+vn(r)+i+vn(s)+o:ci}function Qu(t,e,n,a,r,i,s,o,u,l){const d=t[7],c=Yu(t,d,n,r,s,u);if(t[7]+=4,cs(t,e,l)){const e=t[1].data;e[d]=a,e[d+1]=i,e[d+2]=o}return c?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l:ci}function Xu(t,e,n,a,r,i,s,o,u,l,d,c){const f=t[7];let h=Yu(t,f,n,r,s,u);if(h=Vu(t,f+4,d)||h,t[7]+=5,cs(t,e,c)){const e=t[1].data;e[f]=a,e[f+1]=i,e[f+2]=o,e[f+3]=l}return h?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c:ci}function tl(t,e,n,a,r,i,s,o,u,l,d,c,f,h){const g=t[7];let p=Yu(t,g,n,r,s,u);if(p=zu(t,g+4,d,f)||p,t[7]+=6,cs(t,e,h)){const e=t[1].data;e[g]=a,e[g+1]=i,e[g+2]=o,e[g+3]=l,e[g+4]=c}return p?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h:ci}function el(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p){const b=t[7];let m=Yu(t,b,n,r,s,u);if(m=Bu(t,b+4,d,f,g)||m,t[7]+=7,cs(t,e,p)){const e=t[1].data;e[b]=a,e[b+1]=i,e[b+2]=o,e[b+3]=l,e[b+4]=c,e[b+5]=h}return m?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h+vn(g)+p:ci}function nl(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m){const y=t[7];let v=Yu(t,y,n,r,s,u);if(v=Yu(t,y+4,d,f,g,b)||v,t[7]+=8,cs(t,e,m)){const e=t[1].data;e[y]=a,e[y+1]=i,e[y+2]=o,e[y+3]=l,e[y+4]=c,e[y+5]=h,e[y+6]=p}return v?e+vn(n)+a+vn(r)+i+vn(s)+o+vn(u)+l+vn(d)+c+vn(f)+h+vn(g)+p+vn(b)+m:ci}function al(t,e,n,a,r,i){const s=un(),o=Ae(),u=$u(o,e,n,a);return u!==ci&&es(s,t,u,o,r,i),al}function rl(t,e,n,a,r,i,s,o){const u=un(),l=Ae(),d=Zu(l,e,n,a,r,i);return d!==ci&&es(u,t,d,l,s,o),rl}function il(t,e,n,a,r,i,s,o,u,l){const d=un(),c=Ae(),f=Ju(c,e,n,a,r,i,s,o);return f!==ci&&es(d,t,f,c,u,l),il}function sl(t,e,n,a,r,i,s,o,u,l,d,c){const f=un(),h=Ae(),g=Qu(h,e,n,a,r,i,s,o,u,l);return g!==ci&&es(f,t,g,h,d,c),sl}function ol(t,e,n,a,r,i,s,o,u,l,d,c,f,h){const g=un(),p=Ae(),b=Xu(p,e,n,a,r,i,s,o,u,l,d,c);return b!==ci&&es(g,t,b,p,f,h),ol}function ul(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p){const b=un(),m=Ae(),y=tl(m,e,n,a,r,i,s,o,u,l,d,c,f,h);return y!==ci&&es(b,t,y,m,g,p),ul}function ll(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m){const y=un(),v=Ae(),x=el(v,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return x!==ci&&es(y,t,x,v,b,m),ll}function dl(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y,v){const x=un(),_=Ae(),T=nl(_,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return T!==ci&&es(x,t,T,_,y,v),dl}function cl(t,e,n,a){const r=un(),i=Ae(),s=Ku(i,e);return s!==ci&&es(r,t,s,i,n,a),cl}function fl(t){os(Mr(t),t)}function hl(t){!function(t,e){const n=0===t.flags;if(t.flags|=1,n&&t.clean==Si){let e;t.clean=new Promise(t=>e=t),t.scheduler(()=>{if(1&t.flags&&(t.flags&=-2,ss(t)),2&t.flags){t.flags&=-3;const e=t.playerHandler;e&&e.flushPlayers()}t.clean=Si,e(null)})}}(is(Mr(t))[9])}function gl(t){const e=Ae(),n=yl(e,t,null,null);e[1].firstTemplatePass&&(n.tViews=[]),He()}function pl(t,e,n,a,r,i,s,o){const u=Ae(),l=u[1],d=yl(u,t,r||null,i||null);if(l.firstTemplatePass){Hi(l,u,d,s||null);const t=d.tViews=Fi(-1,e,n,a,l.directiveRegistry,l.pipeRegistry,null,null);null!==l.queries&&(l.queries.template(l,d),t.queries=l.queries.embeddedTView(d))}qi(l,u,d,o),qr(be(d,u),u),re(l,d),He()}function bl(t){const e=Ae(),n=e[1];ze(ve(n.data,t),!0),e[t+19][2]=0,ie(e,n,$e(),void 0)}function ml(){let t=Ve();Ye()?He():(t=t.parent,ze(t,!1));const e=Ae()[t.index],n=e[2];for(;n<e.length-9;)Rs(e,n)}function yl(t,e,n,a){const r=e+19,i=t[r]=t[12].createComment(""),s=Ai(t[1],t[6],e,0,n,a),o=t[r]=ns(i,t,i,s);return Ms(i,s,t),rs(t,o),s}function vl(t,e){const n=Ae(),a=n[1],r=t+19;r>=a.data.length&&(a.data[r]=null,a.blueprint[r]=null),n[r]=e}function xl(t){return ve(We,t)}function _l(t){return ve(Ae(),t)}function Tl(t,e=C.Default){t=V(t);const n=Ae();return null==n?rt(t,e):_a(Ve(),n,t,e)}function Ol(t){return xa(Ve(),t)}function wl(){var t,e;Ae()[1].firstTemplatePass&&(t=Ve(),e=jl(),Nn(Gl(t),e),Nn(Fl(t),e))}function Sl(t){bn(t)}function Il(t,e,n){Nl(un(),t,e,n)}function Nl(t,e,n,a){Rl(t,Ae()[7]++,e,function(t,e){if(t===ci)return t;let n=null;return null!==t&&(n=e?vn(t)+e:t),n}(n,a),!1,zl())}function Cl(t,e){const n=Ae()[7]++;Rl(un(),n,t,e,!0,zl())}function Rl(t,e,n,a,r,i){const s=Ae(),o=ye(t,s),u=be(o,s);let l=!1;if(a!==ci)if(r)l=Qr(Gl(o),s,u,n,e,a,i,!1);else{const t=mn();l=Xr(Fl(o),s,u,n,e,a,t,i,!1)}return l}function Al(t){const e=un(),n=Ae(),a=ye(e,n),r=Fl(a),i=jl(),s=n[7]++;!i&&$n(a)&&t!==ci&&(Dl(r,n,a,s,t,!1),t=ci),Ll(e,r,s,t,!1,zl())}function kl(t){El(un(),t)}function El(t,e){const n=Ae(),a=ye(t,n),r=Gl(a),i=jl(),s=n[7]++;!i&&Kn(a)&&e!==ci&&(Dl(r,n,a,s,e,!0),e=ci),Ll(t,r,s,e,!0,zl())}function Ll(t,e,n,a,r,i){pi();const s=Ae();let o=!1;if(a!==ci){const u=be(ye(t,s),s),l=s[n];o=Vn(l,a);const d=function(t,e,n){const a=Array.isArray(t)?t:[null];a[0]=e||null;for(let o=1;o<a.length;o+=2)Jn(a,o,null);let r,i=null,s=!1;if("string"==typeof e?e.length&&(i=e.split(/\s+/),s=!0):(i=e?Object.keys(e):null,r=e),i)for(let o=0;o<i.length;o++){const t=i[o];vi(a,n?Yn(t):t,!!s||r[t],!0)}return a}(l,a,!r);r?Qr(e,s,u,null,n,d,i,o):Xr(e,s,u,null,n,d,mn(),i,o)}return o}function Dl(t,e,n,a,r,i){e[a]!==r&&((r||jn(t))&&ys(e,n.inputs[i?"class":"style"],function(t,e,n){let a=e;var r;return t.length>0&&(a=n?Bn(t,((r=e)&&"string"!=typeof r&&(r=Object.keys(r).join(" ")),r||"")):Bn(t,function(t){let e="";if(t){const n=Object.keys(t);for(let a=0;a<n.length;a++){const r=n[a];e=Bn(e,`${r}:${t[r]}`,";")}}return e}(e),";")),a}(Wn(t),r,i)),e[a]=r)}function Pl(){const t=un(),e=Ae(),n=ye(t,e),a=function(t,e){return 3===t.type?e[12]:null}(n,e),r=be(n,e),i=jl(),s=mn();(function(t,e,n,a,r,i,s){const o=n?Fn(n):!!a&&Fn(a),u=qn(n,i),l=qn(a,i);Jr.length&&(u||l)&&ei();const d=fe(r,o),c=ii(t,r,e,n,u,d.classesBitMask,li,null),f=ii(t,r,e,a,l,d.stylesBitMask,ui,s);c&&f?(he(),o&&function(t){le.delete(t)}(r)):o&&function(t,e){le.set(t,e)}(r,d)})(a,e,Gl(n),Fl(n),r,i,s),bn(null)}function Ml(t,e,n){let a=!1,r=Hn(t.styles),i=Hn(t.classes),s=-1;for(let o=n;o<e.length;o++){const t=e[o];"number"==typeof t?s=t:1==s?(i=i||[""],vi(i,t,!0),a=!0):2==s&&(r=r||[""],vi(r,t,e[++o]),a=!0)}return i&&i.length>1&&(t.classes||(t.classes=i),ql(t.classes,xi(i,!0))),r&&r.length>1&&(t.styles||(t.styles=r),ql(t.styles,xi(r,!1))),a}function ql(t,e){Hn(t)[0]=e}function jl(){return De+Pe}function Fl(t){return Vl(t,!1)}function Gl(t){return Vl(t,!0)}function Vl(t,e){let n=e?t.classes:t.styles;return Un(n)||(n=[n||[""],0,0,1,0,"--MAP--"],e?t.classes=n:t.styles=n),n}function zl(){return Me>0}function Bl(t,e,n,a){const r=Ae(),i=r[1],s=r[t+19]=Ci(e),o=r[12],u=Ai(i,r[6],t,3,e,n||null);if(null!=n){const t=na(s,n);i.firstTemplatePass&&Ml(u,n,t)}if(xs(o,s,u),Ms(s,u,r),0===de&&qr(s,r),de++,i.firstTemplatePass){Hi(i,r,u,a||null);const t=hs(u);t&&t.hasOwnProperty("class")&&(u.flags|=8),t&&t.hasOwnProperty("style")&&(u.flags|=16),null!==i.queries&&i.queries.elementStart(i,u)}qi(i,r,u),Mi(i,u,r)}function Yl(){let t=Ve();Ye()?He():(t=t.parent,ze(t,!1));const e=t,n=Ae(),a=n[1];re(a,t),de--,a.firstTemplatePass&&null!==a.queries&&Qt(t)&&a.queries.elementEnd(t),Kn(e)&&e.classes&&Wl(e.classes,n,e.inputs.class),$n(e)&&e.styles&&Wl(e.styles,n,e.inputs.style)}function Hl(t,e,n,a){Bl(t,e,n,a),Yl()}function Ul(t){const e=un(),n=Ae(),a=n[1],r=ye(e,n);if(3===r.type){const e=be(r,n),i=na(e,t);a.firstTemplatePass&&Ml(r,t,i)&&xs(n[12],e,r)}}function Wl(t,e,n){ys(e,n,Wn(t)||null)}function Kl(t,e,n){const a=Ae(),r=a[1],i=a[t+19]=a[12].createComment(""),s=Ai(r,a[6],t,4,"ng-container",e||null);e&&r.firstTemplatePass&&Ml(s,e,0),Ms(i,s,a),r.firstTemplatePass&&(Hi(r,a,s,n||null),r.queries&&r.queries.elementStart(r,s)),qi(r,a,s),qr(i,a),Mi(r,s,a)}function $l(){let t=Ve();const e=Ae()[1];Ye()?He():(t=t.parent,ze(t,!1)),re(e,t),e.firstTemplatePass&&null!==e.queries&&Qt(t)&&e.queries.elementEnd(t)}function Zl(t,e,n){Kl(t,e,n),$l()}function Jl(t,e,n){const a=Ae(),r=Ve(),i=2===r.type?r.parent:r,s=a[i.index];let o=function(t,e,n){for(let a=e+9;a<t.length;a++){const e=t[a][1].id;if(e===n)return t[a];if(!(e<n))break;Rs(t,a-9)}return null}(s,s[2],t);if(o)Ee=!0,an(o,o[1].node);else{o=Ri(a,function(t,e,n,a){const r=Ae()[1],i=a.tViews;return(t>=i.length||null==i[t])&&(i[t]=Fi(t,null,e,n,r.directiveRegistry,r.pipeRegistry,null,null)),i[t]}(t,e,n,i),null,16,null,null);const s=Ye()?r:r&&r.parent;ki(o[1],s,t,o),an(o,o[1].node)}return s&&(Ue(o)&&Is(o,s,s[2]),s[2]++),Ue(o)?3:2}function Ql(){const t=Ae(),e=t[6];Ue(t)&&(Ii(t),t[2]&=-5),Oe(t),Ii(t),sn(t[3][3],!0),ze(e,!1)}function Xl(){return Ae()}function td(t){return!!t&&"function"==typeof t.then}function ed(t){return!!t&&"function"==typeof t.subscribe}function nd(t,e,n=!1,a){rd(t,e,n,a)}function ad(t,e,n=!1,a){rd(t,e,n,a,bs)}function rd(t,e,n=!1,a,r){const i=Ae(),s=Ve(),o=i[1],u=o.firstTemplatePass&&(o.cleanup||(o.cleanup=[]));let l=!0;if(3===s.type){const o=be(s,i),d=a?a(o):St,c=d.target||o,f=r?r(s,i):i[12],h=gs(i),g=h.length,p=a?t=>a(ge(t[s.index])).target:s.index;if(ta(f)){let n=null;if(!a&&function(t){return t.directiveEnd>t.directiveStart}(s)&&(n=function(t,e,n){const a=t[1].cleanup;if(null!=a)for(let r=0;r<a.length-1;r+=2){const i=a[r];if(i===e&&a[r+1]===n){const e=t[8],n=a[r+2];return e.length>n?e[n]:null}"string"==typeof i&&(r+=2)}return null}(i,t,s.index)),null!==n)e.__ngNextListenerFn__=n.__ngNextListenerFn__,n.__ngNextListenerFn__=e,l=!1;else{e=sd(s,i,e,!1);const n=f.listen(d.name||c,t,e);h.push(e,n),u&&u.push(t,p,g,g+1)}}else e=sd(s,i,e,!0),c.addEventListener(t,e,n),h.push(e),u&&u.push(t,p,g,n)}void 0===s.outputs&&(s.outputs=zi(s,1));const d=s.outputs;let c;if(l&&d&&(c=d[t])){const n=c.length;if(n){const a=gs(i);for(let r=0;r<n;r+=3){const n=i[c[r]][c[r+2]].subscribe(e),o=a.length;a.push(e,n),u&&u.push(t,s.index,o,-(o+1))}}}}function id(t,e,n){try{return!1!==e(n)}catch(a){return ms(t,a),!1}}function sd(t,e,n,a){return function r(i){const s=1&t.flags?xe(t.index,e):e;0==(32&e[2])&&is(s);let o=id(e,n,i),u=r.__ngNextListenerFn__;for(;u;)o=id(e,u,i)&&o,u=u.__ngNextListenerFn__;return a&&!1===o&&(i.preventDefault(),i.returnValue=!1),o}}function od(t=1){return rn(t)}function ud(t,e){let n=null;const a=function(t){const e=t.attrs;if(null!=e){const t=e.indexOf(5);if(0==(1&t))return e[t+1]}return null}(t);for(let r=0;r<e.length;r++){const i=e[r];if("*"!==i){if(null===a?$r(t,i,!0):Zr(a,i))return r}else n=r}return n}function ld(t){const e=da(Ae())[6];if(!e.projection){const n=e.projection=new Array(t?t.length:1).fill(null),a=n.slice();let r=e.child;for(;null!==r;){const e=t?ud(r,t):0;null!==e&&(a[e]?a[e].projectionNext=r:n[e]=r,a[e]=r),r=r.next}}}let dd=!1;function cd(t){dd=t}function fd(t,e=0,n){const a=Ae(),r=Ai(a[1],a[6],t,1,null,n||null);null===r.projection&&(r.projection=e),He(),dd||Fs(a,r,e,da(a))}function hd(t,e,n){return gd(t,"",e,"",n),hd}function gd(t,e,n,a,r){const i=un(),s=$u(Ae(),e,n,a);return s!==ci&&Yi(i,t,s,r),gd}function pd(t,e,n,a,r,i,s){const o=un(),u=Zu(Ae(),e,n,a,r,i);return u!==ci&&Yi(o,t,u,s),pd}function bd(t,e,n,a,r,i,s,o,u){const l=un(),d=Ju(Ae(),e,n,a,r,i,s,o);return d!==ci&&Yi(l,t,d,u),bd}function md(t,e,n,a,r,i,s,o,u,l,d){const c=un(),f=Qu(Ae(),e,n,a,r,i,s,o,u,l);return f!==ci&&Yi(c,t,f,d),md}function yd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=un(),g=Xu(Ae(),e,n,a,r,i,s,o,u,l,d,c);return g!==ci&&Yi(h,t,g,f),yd}function vd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=un(),b=tl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h);return b!==ci&&Yi(p,t,b,g),vd}function xd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=un(),y=el(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return y!==ci&&Yi(m,t,y,b),xd}function _d(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y){const v=un(),x=nl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return x!==ci&&Yi(v,t,x,y),_d}function Td(t,e,n){const a=un(),r=Ku(Ae(),e);return r!==ci&&Yi(a,t,r,n),Td}function Od(t,e){const n=Ae(),a=n[t+19]=ws(e,n[12]),r=Ai(n[1],n[6],t,3,null,null);He(),Ms(a,r,n)}function wd(t){const e=Ae(),n=un(),a=Uu(e,t);a!==ci&&vs(e,n,vn(a))}function Sd(t){return Id("",t,""),Sd}function Id(t,e,n){const a=un(),r=Ae(),i=$u(r,t,e,n);return i!==ci&&vs(r,a,i),Id}function Nd(t,e,n,a,r){const i=un(),s=Ae(),o=Zu(s,t,e,n,a,r);return o!==ci&&vs(s,i,o),Nd}function Cd(t,e,n,a,r,i,s){const o=un(),u=Ae(),l=Ju(u,t,e,n,a,r,i,s);return l!==ci&&vs(u,o,l),Cd}function Rd(t,e,n,a,r,i,s,o,u){const l=un(),d=Ae(),c=Qu(d,t,e,n,a,r,i,s,o,u);return c!==ci&&vs(d,l,c),Rd}function Ad(t,e,n,a,r,i,s,o,u,l,d){const c=un(),f=Ae(),h=Xu(f,t,e,n,a,r,i,s,o,u,l,d);return h!==ci&&vs(f,c,h),Ad}function kd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=un(),g=Ae(),p=tl(g,t,e,n,a,r,i,s,o,u,l,d,c,f);return p!==ci&&vs(g,h,p),kd}function Ed(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=un(),b=Ae(),m=el(b,t,e,n,a,r,i,s,o,u,l,d,c,f,h,g);return m!==ci&&vs(b,p,m),Ed}function Ld(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=un(),y=Ae(),v=nl(y,t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b);return v!==ci&&vs(y,m,v),Ld}function Dd(t){const e=un(),n=Ae(),a=Ku(n,t);return a!==ci&&vs(n,e,a),Dd}function Pd(t,e,n){const a=$u(Ae(),t,e,n);El(un(),a)}function Md(t,e,n,a,r){const i=Zu(Ae(),t,e,n,a,r);El(un(),i)}function qd(t,e,n,a,r,i,s){const o=Ju(Ae(),t,e,n,a,r,i,s);El(un(),o)}function jd(t,e,n,a,r,i,s,o,u){const l=Qu(Ae(),t,e,n,a,r,i,s,o,u);El(un(),l)}function Fd(t,e,n,a,r,i,s,o,u,l,d){const c=Xu(Ae(),t,e,n,a,r,i,s,o,u,l,d);El(un(),c)}function Gd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=tl(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f);El(un(),h)}function Vd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=el(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f,h,g);El(un(),p)}function zd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=nl(Ae(),t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b);El(un(),m)}function Bd(t){const e=Ku(Ae(),t);El(un(),e)}function Yd(t,e,n,a,r){const i=$u(Ae(),e,n,a);return Nl(un(),t,i,r),Yd}function Hd(t,e,n,a,r,i,s){const o=Zu(Ae(),e,n,a,r,i);return Nl(un(),t,o,s),Hd}function Ud(t,e,n,a,r,i,s,o,u){const l=Ju(Ae(),e,n,a,r,i,s,o);return Nl(un(),t,l,u),Ud}function Wd(t,e,n,a,r,i,s,o,u,l,d){const c=Qu(Ae(),e,n,a,r,i,s,o,u,l);return Nl(un(),t,c,d),Wd}function Kd(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=Xu(Ae(),e,n,a,r,i,s,o,u,l,d,c);return Nl(un(),t,h,f),Kd}function $d(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g){const p=tl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h);return Nl(un(),t,p,g),$d}function Zd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b){const m=el(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p);return Nl(un(),t,m,b),Zd}function Jd(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y){const v=nl(Ae(),e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m);return Nl(un(),t,v,y),Jd}function Qd(t,e,n){const a=Ku(Ae(),e);return Nl(un(),t,a,n),Qd}function Xd(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n,!0),Xd}function tc(t,e,n){const a=un(),r=Uu(Ae(),e);return r!==ci&&Yi(a,t,r,n,!0,bs),tc}function ec(t){const e=lc(t);return void 0===e.component&&(e.component=function(t,e){const n=e[1].data[t];return 1&n.flags?e[n.directiveStart]:null}(e.nodeIndex,e.lView)),e.component}function nc(t){return lc(t).lView[9]}function ac(t){let e,n=oc(t).lView;for(;null===n[0]&&(e=la(n));)n=e;return 512&n[2]?null:n[9]}function rc(t){return[...ca(t).components]}function ic(t){const e=oc(t);return new Ca(e.lView[1].data[e.nodeIndex],e.lView)}function sc(t){const e=oc(t);return void 0===e.directives&&(e.directives=Vr(e.nodeIndex,e.lView,!1)),e.directives||[]}function oc(t,e=!0){const n=Dr(t);if(!n&&e)throw new Error("Invalid ng target");return n}function uc(t){return Dr(t).native}function lc(t){if(!(t instanceof Node))throw new Error("Expecting instance of DOM Node");return oc(t)}function dc(t){return"boolean"==typeof t.useCapture}function cc(t){const e=lc(t).lView,n=e[8],a=e[1].cleanup,r=[];if(a&&n)for(let i=0;i<a.length;){const s=a[i++],o=a[i++];if("string"==typeof s){const u=s,l=ge(e[o]),d=n[a[i++]],c=a[i++],f="boolean"==typeof c?c:!(c>=0)&&null;t==l&&r.push({element:t,name:u,callback:d,useCapture:f})}}return r.sort(fc),r}function fc(t,e){return t.name==e.name?0:t.name<e.name?-1:1}let hc=!1;function gc(){hc||(hc=!0,pc("getComponent",ec),pc("getContext",nc),pc("getListeners",cc),pc("getViewComponent",ac),pc("getHostElement",uc),pc("getInjector",ic),pc("getRootComponents",rc),pc("getDirectives",sc),pc("markDirty",hl))}function pc(t,e){if(U){let n=U.ng;n||(n=U.ng={}),n[t]=e}}function bc(t,e={}){qe(null);const n=e.rendererFactory||ea,a=e.sanitizer||null,r=Ht(t);r.type!=t&&(r.type=t);const i=Gi(n,e.host||r.selectors[0][0]),s=r.onPush?576:528,o=vc(e.scheduler,e.playerHandler),u=n.createRenderer(i,r),l=Ri(null,Fi(-1,null,1,0,null,null,null,null),o,s,null,null,n,u,void 0,e.injector||null),d=an(l,null);let c,f=!1;try{n.begin&&n.begin();const t=mc(i,r,l,n,u,a);c=yc(t,r,l,o,e.hostFeatures||null),rs(l,t),Ii(l),l[2]&=-5,Oe(l),Ii(l),f=!0}finally{sn(d,f),n.end&&n.end()}return c}function mc(t,e,n,a,r,i){Ee=!1,ke=null,de=0,we=!0,bn(null),he(),le.clear();const s=n[1];n[19]=t;const o=Ai(s,null,0,3,null,null),u=Ri(n,ji(e),null,e.onPush?64:16,n[19],o,a,r,i);return s.firstTemplatePass&&(va(pa(o,n),s,e.type),o.flags=1,Qi(o,n.length,1),Zi(o)),n[19]=u}function yc(t,e,n,a,r){const i=n[1],s=function(t,e,n){const a=Ve();t.firstTemplatePass&&(n.providersResolver&&n.providersResolver(n),Wi(t,a,1),Xi(t,e,n,n.factory));const r=Sa(t.data,e,e.length-1,a);return $i(e,a,r),r}(i,n,e);a.components.push(s),t[9]=s,r&&r.forEach(t=>t(s,e)),e.contentQueries&&e.contentQueries(1,s,n.length-1);const o=Ve();return i.firstTemplatePass&&e.hostBindings&&(qe(o.index-19),Ui(e,i.expandoInstructions,s,o,i.firstTemplatePass),qe(null)),s}function vc(t,e){return{components:[],scheduler:t||_n,clean:fs,playerHandler:e||null,flags:0}}function xc(t,e){const n=Te(t)[1],a=n.data.length-1;ae(a,e,n,-1,-1,-1),re(n,{directiveStart:a,directiveEnd:a+1})}function _c(t){return ca(t).clean}class Tc{constructor(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}isFirstChange(){return this.firstChange}}function Oc(){return wc.ngInherit=!0,wc}function wc(t){t.type.prototype.ngOnChanges&&(t.setInput=Sc,t.onChanges=function(){const t=Ic(this),e=t&&t.current;if(e){const n=t.previous;if(n===St)t.previous=e;else for(let t in e)n[t]=e[t];t.current=null,this.ngOnChanges(e)}})}function Sc(t,e,n,a){const r=Ic(t)||function(t,e){return t.__ngSimpleChanges__=e}(t,{previous:St,current:null}),i=r.current||(r.current={}),s=r.previous,o=this.declaredInputs[n],u=s[o];i[o]=new Tc(u&&u.currentValue,e,s===St),t[a]=e}function Ic(t){return t.__ngSimpleChanges__||null}function Nc(t){let e=Object.getPrototypeOf(t.type.prototype).constructor;for(;e;){let n=void 0;if(te(t))n=e.ngComponentDef||e.ngDirectiveDef;else{if(e.ngComponentDef)throw new Error("Directives cannot inherit Components");n=e.ngDirectiveDef}const a=e.ngBaseDef;if(a||n){const e=t;e.inputs=Cc(t.inputs),e.declaredInputs=Cc(t.declaredInputs),e.outputs=Cc(t.outputs)}if(a){const e=a.viewQuery,n=a.contentQueries,r=a.hostBindings;r&&kc(t,r),e&&Rc(t,e),n&&Ac(t,n),A(t.inputs,a.inputs),A(t.declaredInputs,a.declaredInputs),A(t.outputs,a.outputs)}if(n){const e=n.hostBindings;e&&kc(t,e);const a=n.viewQuery,r=n.contentQueries;a&&Rc(t,a),r&&Ac(t,r),A(t.inputs,n.inputs),A(t.declaredInputs,n.declaredInputs),A(t.outputs,n.outputs),t.afterContentChecked=t.afterContentChecked||n.afterContentChecked,t.afterContentInit=t.afterContentInit||n.afterContentInit,t.afterViewChecked=t.afterViewChecked||n.afterViewChecked,t.afterViewInit=t.afterViewInit||n.afterViewInit,t.doCheck=t.doCheck||n.doCheck,t.onDestroy=t.onDestroy||n.onDestroy,t.onInit=t.onInit||n.onInit;const i=n.features;if(i)for(const n of i)n&&n.ngInherit&&n(t)}else{const n=e.prototype;n&&(t.afterContentChecked=t.afterContentChecked||n.ngAfterContentChecked,t.afterContentInit=t.afterContentInit||n.ngAfterContentInit,t.afterViewChecked=t.afterViewChecked||n.ngAfterViewChecked,t.afterViewInit=t.afterViewInit||n.ngAfterViewInit,t.doCheck=t.doCheck||n.ngDoCheck,t.onDestroy=t.onDestroy||n.ngOnDestroy,t.onInit=t.onInit||n.ngOnInit,n.ngOnChanges&&Oc()(t))}e=Object.getPrototypeOf(e)}}function Cc(t){return t===St?{}:t===It?[]:t}function Rc(t,e){const n=t.viewQuery;t.viewQuery=n?(t,a)=>{e(t,a),n(t,a)}:e}function Ac(t,e){const n=t.contentQueries;t.contentQueries=n?(t,a,r)=>{e(t,a,r),n(t,a,r)}:e}function kc(t,e){const n=t.hostBindings;e!==n&&(t.hostBindings=n?(t,a,r)=>{Fe(1);try{e(t,a,r)}finally{Fe(-1)}n(t,a,r)}:e)}function Ec(t,e,n,a,r){if(t=V(t),Array.isArray(t))for(let i=0;i<t.length;i++)Ec(t[i],e,n,a,r);else{const i=Ae(),s=i[1];let o=Go(t)?t:V(t.provide),u=qo(t);const l=Ve(),d=65535&l.providerIndexes,c=l.directiveStart,f=l.providerIndexes>>16;if(t.useClass||Go(t)){const n=(t.useClass||t).prototype.ngOnDestroy;n&&(s.destroyHooks||(s.destroyHooks=[])).push(e.length,n)}if(Go(t)||!t.multi){const t=new ne(u,r,Tl),a=Dc(o,e,r?d:d+f,c);-1==a?(va(pa(l,i),s,o),e.push(o),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=65536),n.push(t),i.push(t)):(n[a]=t,i[a]=t)}else{const t=Dc(o,e,d+f,c),h=Dc(o,e,d,d+f),g=t>=0&&n[t],p=h>=0&&n[h];if(r&&!p||!r&&!g){va(pa(l,i),s,o);const t=function(t,e,n,a,r){const i=new ne(t,n,Tl);return i.multi=[],i.index=e,i.componentProviders=0,Lc(i,r,a&&!n),i}(r?Mc:Pc,n.length,r,a,u);!r&&p&&(n[h].providerFactory=t),e.push(o),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=65536),n.push(t),i.push(t)}else Lc(n[r?h:t],u,!r&&a);!r&&a&&p&&n[h].componentProviders++}}}function Lc(t,e,n){t.multi.push(e),n&&t.componentProviders++}function Dc(t,e,n,a){for(let r=n;r<a;r++)if(e[r]===t)return r;return-1}function Pc(t,e,n,a){return qc(this.multi,[])}function Mc(t,e,n,a){const r=this.multi;let i;if(this.providerFactory){const t=this.providerFactory.componentProviders,s=Sa(e,n,this.providerFactory.index,a);i=s.slice(0,t),qc(r,i);for(let e=t;e<s.length;e++)i.push(s[e])}else i=[],qc(r,i);return i}function qc(t,e){for(let n=0;n<t.length;n++)e.push((0,t[n])());return e}function jc(t,e=[]){return n=>{n.providersResolver=(n,a)=>function(t,e,n){const a=Ae()[1];if(a.firstTemplatePass){const r=te(t);Ec(n,a.data,a.blueprint,r,!0),Ec(e,a.data,a.blueprint,r,!1)}}(n,a?a(t):t,e)}}class Fc{}class Gc{}function Vc(t){const e=Error(`No component factory found for ${j(t)}. Did you add it to @NgModule.entryComponents?`);return e[zc]=t,e}const zc="ngComponent";class Bc{resolveComponentFactory(t){throw Vc(t)}}let Yc=(()=>{class t{}return t.NULL=new Bc,t})();class Hc{constructor(t,e,n){this._parent=e,this._ngModule=n,this._factories=new Map;for(let a=0;a<t.length;a++){const e=t[a];this._factories.set(e.componentType,e)}}resolveComponentFactory(t){let e=this._factories.get(t);if(!e&&this._parent&&(e=this._parent.resolveComponentFactory(t)),!e)throw Vc(t);return new Uc(e,this._ngModule)}}class Uc extends Gc{constructor(t,e){super(),this.factory=t,this.ngModule=e,this.selector=t.selector,this.componentType=t.componentType,this.ngContentSelectors=t.ngContentSelectors,this.inputs=t.inputs,this.outputs=t.outputs}create(t,e,n,a){return this.factory.create(t,e,n,a||this.ngModule)}}function Wc(...t){}let Kc=(()=>{class t{constructor(t){this.nativeElement=t}}return t.__NG_ELEMENT_ID__=()=>Zc(t),t})();const $c=function(t){return $s(t,Ve(),Ae())},Zc=Wc;class Jc{constructor(t,e,n,a,r,i){this.id=t,this.templateUrl=e,this.slotCount=n,this.encapsulation=a,this.styles=r,this.animations=i}}class Qc{}class Xc{}class tf{}class ef{}const nf=function(){var t={Important:1,DashCase:2};return t[t.Important]="Important",t[t.DashCase]="DashCase",t}();let af=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>sf(),t})();const rf=function(){const t=Ae(),e=xe(Ve().index,t);return function(t){const e=t[12];if(ta(e))return e;throw new Error("Cannot inject Renderer2 when the application uses Renderer3!")}(Zt(e)?e:t)},sf=Wc;class of{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const uf=new of("8.2.14");class lf{constructor(){}supports(t){return qu(t)}create(t){return new cf(t)}}const df=(t,e)=>e;class cf{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||df}forEachItem(t){let e;for(e=this._itHead;null!==e;e=e._next)t(e)}forEachOperation(t){let e=this._itHead,n=this._removalsHead,a=0,r=null;for(;e||n;){const i=!n||e&&e.currentIndex<pf(n,a,r)?e:n,s=pf(i,a,r),o=i.currentIndex;if(i===n)a--,n=n._nextRemoved;else if(e=e._next,null==i.previousIndex)a++;else{r||(r=[]);const t=s-a,e=o-a;if(t!=e){for(let n=0;n<t;n++){const a=n<r.length?r[n]:r[n]=0,i=a+n;e<=i&&i<t&&(r[n]=a+1)}r[i.previousIndex]=e-t}}s!==o&&t(i,s,o)}}forEachPreviousItem(t){let e;for(e=this._previousItHead;null!==e;e=e._nextPrevious)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachMovedItem(t){let e;for(e=this._movesHead;null!==e;e=e._nextMoved)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}forEachIdentityChange(t){let e;for(e=this._identityChangesHead;null!==e;e=e._nextIdentityChange)t(e)}diff(t){if(null==t&&(t=[]),!qu(t))throw new Error(`Error trying to diff '${j(t)}'. Only arrays and iterables are allowed`);return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e,n,a,r=this._itHead,i=!1;if(Array.isArray(t)){this.length=t.length;for(let e=0;e<this.length;e++)n=t[e],a=this._trackByFn(e,n),null!==r&&Du(r.trackById,a)?(i&&(r=this._verifyReinsertion(r,n,a,e)),Du(r.item,n)||this._addIdentityChange(r,n)):(r=this._mismatch(r,n,a,e),i=!0),r=r._next}else e=0,function(t,e){if(Array.isArray(t))for(let n=0;n<t.length;n++)e(t[n]);else{const n=t[Lu()]();let a;for(;!(a=n.next()).done;)e(a.value)}}(t,t=>{a=this._trackByFn(e,t),null!==r&&Du(r.trackById,a)?(i&&(r=this._verifyReinsertion(r,t,a,e)),Du(r.item,t)||this._addIdentityChange(r,t)):(r=this._mismatch(r,t,a,e),i=!0),r=r._next,e++}),this.length=e;return this._truncate(r),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t,e;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=e)t.previousIndex=t.currentIndex,e=t._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,e,n,a){let r;return null===t?r=this._itTail:(r=t._prev,this._remove(t)),null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(n,a))?(Du(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,r,a)):null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(Du(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,r,a)):t=this._addAfter(new ff(e,n),r,a),t}_verifyReinsertion(t,e,n,a){let r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==r?t=this._reinsertAfter(r,t._prev,a):t.currentIndex!=a&&(t.currentIndex=a,this._addToMoves(t,a)),t}_truncate(t){for(;null!==t;){const e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,e,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const a=t._prevRemoved,r=t._nextRemoved;return null===a?this._removalsHead=r:a._nextRemoved=r,null===r?this._removalsTail=a:r._prevRemoved=a,this._insertAfter(t,e,n),this._addToMoves(t,n),t}_moveAfter(t,e,n){return this._unlink(t),this._insertAfter(t,e,n),this._addToMoves(t,n),t}_addAfter(t,e,n){return this._insertAfter(t,e,n),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,e,n){const a=null===e?this._itHead:e._next;return t._next=a,t._prev=e,null===a?this._itTail=t:a._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new gf),this._linkedRecords.put(t),t.currentIndex=n,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const e=t._prev,n=t._next;return null===e?this._itHead=n:e._next=n,null===n?this._itTail=e:n._prev=e,t}_addToMoves(t,e){return t.previousIndex===e?t:(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t,t)}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new gf),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class ff{constructor(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class hf{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,e){let n;for(n=this._head;null!==n;n=n._nextDup)if((null===e||e<=n.currentIndex)&&Du(n.trackById,t))return n;return null}remove(t){const e=t._prevDup,n=t._nextDup;return null===e?this._head=n:e._nextDup=n,null===n?this._tail=e:n._prevDup=e,null===this._head}}class gf{constructor(){this.map=new Map}put(t){const e=t.trackById;let n=this.map.get(e);n||(n=new hf,this.map.set(e,n)),n.add(t)}get(t,e){const n=this.map.get(t);return n?n.get(t,e):null}remove(t){const e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function pf(t,e,n){const a=t.previousIndex;if(null===a)return a;let r=0;return n&&a<n.length&&(r=n[a]),a+e+r}class bf{constructor(){}supports(t){return t instanceof Map||ju(t)}create(){return new mf}}class mf{constructor(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}get isDirty(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead}forEachItem(t){let e;for(e=this._mapHead;null!==e;e=e._next)t(e)}forEachPreviousItem(t){let e;for(e=this._previousMapHead;null!==e;e=e._nextPrevious)t(e)}forEachChangedItem(t){let e;for(e=this._changesHead;null!==e;e=e._nextChanged)t(e)}forEachAddedItem(t){let e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)}forEachRemovedItem(t){let e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)}diff(t){if(t){if(!(t instanceof Map||ju(t)))throw new Error(`Error trying to diff '${j(t)}'. Only maps and objects are allowed`)}else t=new Map;return this.check(t)?this:null}onDestroy(){}check(t){this._reset();let e=this._mapHead;if(this._appendAfter=null,this._forEach(t,(t,n)=>{if(e&&e.key===n)this._maybeAddToChanges(e,t),this._appendAfter=e,e=e._next;else{const a=this._getOrCreateRecordForKey(n,t);e=this._insertBeforeOrAppend(e,a)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let t=e;null!==t;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,e){if(t){const n=t._prev;return e._next=t,e._prev=n,t._prev=e,n&&(n._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(t,e){if(this._records.has(t)){const n=this._records.get(t);this._maybeAddToChanges(n,e);const a=n._prev,r=n._next;return a&&(a._next=r),r&&(r._prev=a),n._next=null,n._prev=null,n}const n=new yf(t);return this._records.set(t,n),n.currentValue=e,this._addToAdditions(n),n}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,e){Du(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(n=>e(t[n],n))}}class yf{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}let vf=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(null!=n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return t.create(e,n)},deps:[[t,new S,new O]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(null!=e)return e;throw new Error(`Cannot find a differ supporting object '${t}' of type '${n=t,n.name||typeof n}'`);var n}}return t.ngInjectableDef=k({token:t,providedIn:"root",factory:()=>new t([new lf])}),t})(),xf=(()=>{class t{constructor(t){this.factories=t}static create(e,n){if(n){const t=n.factories.slice();e=e.concat(t)}return new t(e)}static extend(e){return{provide:t,useFactory:n=>{if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return t.create(e,n)},deps:[[t,new S,new O]]}}find(t){const e=this.factories.find(e=>e.supports(t));if(e)return e;throw new Error(`Cannot find a differ supporting object '${t}'`)}}return t.ngInjectableDef=k({token:t,providedIn:"root",factory:()=>new t([new bf])}),t})();const _f=[new bf],Tf=new vf([new lf]),Of=new xf(_f);let wf=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>If(t,Kc),t})();const Sf=function(t,e){return Zs(t,e,Ve(),Ae())},If=Wc;let Nf=(()=>{class t{}return t.__NG_ELEMENT_ID__=()=>Rf(t,Kc),t})();const Cf=function(t,e){return Js(t,e,Ve(),Ae())},Rf=Wc;function Af(t,e,n,a){let r=`ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '${e}'. Current value: '${n}'.`;return a&&(r+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(t,e){const n=new Error(t);return kf(n,e),n}(r,t)}function kf(t,e){t.ngDebugContext=e,t.ngErrorLogger=e.logError.bind(e)}function Ef(t){return new Error(`ViewDestroyedError: Attempt to use a destroyed view: ${t}`)}function Lf(t,e,n){const a=t.state,r=1792&a;return r===e?(t.state=-1793&a|n,t.initIndex=-1,!0):r===n}function Df(t,e,n){return(1792&t.state)===e&&t.initIndex<=n&&(t.initIndex=n+1,!0)}function Pf(t,e){return t.nodes[e]}function Mf(t,e){return t.nodes[e]}function qf(t,e){return t.nodes[e]}function jf(t,e){return t.nodes[e]}function Ff(t,e){return t.nodes[e]}class Gf{}const Vf={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},zf=()=>{},Bf=new Map;function Yf(t){let e=Bf.get(t);return e||(e=j(t)+"_"+Bf.size,Bf.set(t,e)),e}function Hf(t,e,n,a){if(Mu.isWrapped(a)){a=Mu.unwrap(a);const r=t.def.nodes[e].bindingIndex+n,i=Mu.unwrap(t.oldValues[r]);t.oldValues[r]=new Mu(i)}return a}function Uf(t){return{id:"$$undefined",styles:t.styles,encapsulation:t.encapsulation,data:t.data}}let Wf=0;function Kf(t,e,n,a){return!(!(2&t.state)&&Du(t.oldValues[e.bindingIndex+n],a))}function $f(t,e,n,a){return!!Kf(t,e,n,a)&&(t.oldValues[e.bindingIndex+n]=a,!0)}function Zf(t,e,n,a){const r=t.oldValues[e.bindingIndex+n];if(1&t.state||!Pu(r,a)){const i=e.bindings[n].name;throw Af(Vf.createDebugContext(t,e.nodeIndex),`${i}: ${r}`,`${i}: ${a}`,0!=(1&t.state))}}function Jf(t){let e=t;for(;e;)2&e.def.flags&&(e.state|=8),e=e.viewContainerParent||e.parent}function Qf(t,e){let n=t;for(;n&&n!==e;)n.state|=64,n=n.viewContainerParent||n.parent}function Xf(t,e,n,a){try{return Jf(33554432&t.def.nodes[e].flags?Mf(t,e).componentView:t),Vf.handleEvent(t,e,n,a)}catch(r){t.root.errorHandler.handleError(r)}}function th(t){return t.parent?Mf(t.parent,t.parentNodeDef.nodeIndex):null}function eh(t){return t.parent?t.parentNodeDef.parent:null}function nh(t,e){switch(201347067&e.flags){case 1:return Mf(t,e.nodeIndex).renderElement;case 2:return Pf(t,e.nodeIndex).renderText}}function ah(t){return!!t.parent&&!!(32768&t.parentNodeDef.flags)}function rh(t){return!(!t.parent||32768&t.parentNodeDef.flags)}function ih(t){return 1<<t%32}function sh(t){const e={};let n=0;const a={};return t&&t.forEach(([t,r])=>{"number"==typeof t?(e[t]=r,n|=ih(t)):a[t]=r}),{matchedQueries:e,references:a,matchedQueryIds:n}}function oh(t,e){return t.map(t=>{let n,a;return Array.isArray(t)?[a,n]=t:(a=0,n=t),n&&("function"==typeof n||"object"==typeof n)&&e&&Object.defineProperty(n,"__source",{value:e,configurable:!0}),{flags:a,token:n,tokenKey:Yf(n)}})}function uh(t,e,n){let a=n.renderParent;return a?0==(1&a.flags)||0==(33554432&a.flags)||a.element.componentRendererType&&a.element.componentRendererType.encapsulation===Ot.Native?Mf(t,n.renderParent.nodeIndex).renderElement:void 0:e}const lh=new WeakMap;function dh(t){let e=lh.get(t);return e||(e=t(()=>zf),e.factory=t,lh.set(t,e)),e}function ch(t,e,n,a,r){3===e&&(n=t.renderer.parentNode(nh(t,t.def.lastRenderRootNode))),fh(t,e,0,t.def.nodes.length-1,n,a,r)}function fh(t,e,n,a,r,i,s){for(let o=n;o<=a;o++){const n=t.def.nodes[o];11&n.flags&&gh(t,n,e,r,i,s),o+=n.childCount}}function hh(t,e,n,a,r,i){let s=t;for(;s&&!ah(s);)s=s.parent;const o=s.parent,u=eh(s),l=u.nodeIndex+u.childCount;for(let d=u.nodeIndex+1;d<=l;d++){const t=o.def.nodes[d];t.ngContentIndex===e&&gh(o,t,n,a,r,i),d+=t.childCount}if(!o.parent){const s=t.root.projectableNodes[e];if(s)for(let e=0;e<s.length;e++)ph(t,s[e],n,a,r,i)}}function gh(t,e,n,a,r,i){if(8&e.flags)hh(t,e.ngContent.index,n,a,r,i);else{const s=nh(t,e);if(3===n&&33554432&e.flags&&48&e.bindingFlags?(16&e.bindingFlags&&ph(t,s,n,a,r,i),32&e.bindingFlags&&ph(Mf(t,e.nodeIndex).componentView,s,n,a,r,i)):ph(t,s,n,a,r,i),16777216&e.flags){const s=Mf(t,e.nodeIndex).viewContainer._embeddedViews;for(let t=0;t<s.length;t++)ch(s[t],n,a,r,i)}1&e.flags&&!e.element.name&&fh(t,n,e.nodeIndex+1,e.nodeIndex+e.childCount,a,r,i)}}function ph(t,e,n,a,r,i){const s=t.renderer;switch(n){case 1:s.appendChild(a,e);break;case 2:s.insertBefore(a,e,r);break;case 3:s.removeChild(a,e);break;case 0:i.push(e)}}const bh=/^:([^:]+):(.+)$/;function mh(t){if(":"===t[0]){const e=t.match(bh);return[e[1],e[2]]}return["",t]}function yh(t){let e=0;for(let n=0;n<t.length;n++)e|=t[n].flags;return e}function vh(t,e){let n="";for(let a=0;a<2*t;a+=2)n=n+e[a]+_h(e[a+1]);return n+e[2*t]}function xh(t,e,n,a,r,i,s,o,u,l,d,c,f,h,g,p,b,m,y,v){switch(t){case 1:return e+_h(n)+a;case 2:return e+_h(n)+a+_h(r)+i;case 3:return e+_h(n)+a+_h(r)+i+_h(s)+o;case 4:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l;case 5:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c;case 6:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h;case 7:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p;case 8:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p+_h(b)+m;case 9:return e+_h(n)+a+_h(r)+i+_h(s)+o+_h(u)+l+_h(d)+c+_h(f)+h+_h(g)+p+_h(b)+m+_h(y)+v;default:throw new Error("Does not support more than 9 expressions")}}function _h(t){return null!=t?t.toString():""}const Th=[],Oh={},wh=new Object,Sh=Yf(Bo),Ih=Yf($),Nh=Yf(ft);function Ch(t,e,n,a){return n=V(n),{index:-1,deps:oh(a,j(e)),flags:t,token:e,value:n}}function Rh(t){const e={},n=[];let a=!1;for(let r=0;r<t.length;r++){const i=t[r];i.token===Co&&!0===i.value&&(a=!0),1073741824&i.flags&&n.push(i.token),i.index=r,e[Yf(i.token)]=i}return{factory:null,providersByKey:e,providers:t,modules:n,isRoot:a}}function Ah(t,e,n=Bo.THROW_IF_NOT_FOUND){const a=et(t);try{if(8&e.flags)return e.token;if(2&e.flags&&(n=null),1&e.flags)return t._parent.get(e.token,n);const s=e.tokenKey;switch(s){case Sh:case Ih:case Nh:return t}const o=t._def.providersByKey[s];let u;if(o){let e=t._providers[o.index];return void 0===e&&(e=t._providers[o.index]=kh(t,o)),e===wh?void 0:e}if((u=D(e.token))&&(r=t,null!=(i=u).providedIn&&(function(t,e){return t._def.modules.indexOf(e)>-1}(r,i.providedIn)||"root"===i.providedIn&&r._def.isRoot))){const n=t._providers.length;return t._def.providers[n]=t._def.providersByKey[e.tokenKey]={flags:5120,value:u.factory,deps:[],index:n,token:e.token},t._providers[n]=wh,t._providers[n]=kh(t,t._def.providersByKey[e.tokenKey])}return 4&e.flags?n:t._parent.get(e.token,n)}finally{et(a)}var r,i}function kh(t,e){let n;switch(201347067&e.flags){case 512:n=function(t,e,n){const a=n.length;switch(a){case 0:return new e;case 1:return new e(Ah(t,n[0]));case 2:return new e(Ah(t,n[0]),Ah(t,n[1]));case 3:return new e(Ah(t,n[0]),Ah(t,n[1]),Ah(t,n[2]));default:const r=new Array(a);for(let e=0;e<a;e++)r[e]=Ah(t,n[e]);return new e(...r)}}(t,e.value,e.deps);break;case 1024:n=function(t,e,n){const a=n.length;switch(a){case 0:return e();case 1:return e(Ah(t,n[0]));case 2:return e(Ah(t,n[0]),Ah(t,n[1]));case 3:return e(Ah(t,n[0]),Ah(t,n[1]),Ah(t,n[2]));default:const r=Array(a);for(let e=0;e<a;e++)r[e]=Ah(t,n[e]);return e(...r)}}(t,e.value,e.deps);break;case 2048:n=Ah(t,e.deps[0]);break;case 256:n=e.value}return n===wh||null===n||"object"!=typeof n||131072&e.flags||"function"!=typeof n.ngOnDestroy||(e.flags|=131072),void 0===n?wh:n}function Eh(t,e){const n=t.viewContainer._embeddedViews;if((null==e||e>=n.length)&&(e=n.length-1),e<0)return null;const a=n[e];return a.viewContainerParent=null,yt(n,e),Vf.dirtyParentQueries(a),Dh(a),a}function Lh(t,e,n){const a=e?nh(e,e.def.lastRenderRootNode):t.renderElement,r=n.renderer.parentNode(a),i=n.renderer.nextSibling(a);ch(n,2,r,i,void 0)}function Dh(t){ch(t,3,null,null,void 0)}const Ph=new Object;function Mh(t,e,n,a,r,i){return new jh(t,e,n,a,r,i)}function qh(t){return t.viewDefFactory}class jh extends Gc{constructor(t,e,n,a,r,i){super(),this.selector=t,this.componentType=e,this._inputs=a,this._outputs=r,this.ngContentSelectors=i,this.viewDefFactory=n}get inputs(){const t=[],e=this._inputs;for(let n in e)t.push({propName:n,templateName:e[n]});return t}get outputs(){const t=[];for(let e in this._outputs)t.push({propName:e,templateName:this._outputs[e]});return t}create(t,e,n,a){if(!a)throw new Error("ngModule should be provided");const r=dh(this.viewDefFactory),i=r.nodes[0].element.componentProvider.nodeIndex,s=Vf.createRootView(t,e||[],n,r,a,Ph),o=qf(s,i).instance;return n&&s.renderer.setAttribute(Mf(s,0).renderElement,"ng-version",uf.full),new Fh(s,new Bh(s),o)}}class Fh extends Fc{constructor(t,e,n){super(),this._view=t,this._viewRef=e,this._component=n,this._elDef=this._view.def.nodes[0],this.hostView=e,this.changeDetectorRef=e,this.instance=n}get location(){return new Kc(Mf(this._view,this._elDef.nodeIndex).renderElement)}get injector(){return new Wh(this._view,this._elDef)}get componentType(){return this._component.constructor}destroy(){this._viewRef.destroy()}onDestroy(t){this._viewRef.onDestroy(t)}}function Gh(t,e,n){return new Vh(t,e,n)}class Vh{constructor(t,e,n){this._view=t,this._elDef=e,this._data=n,this._embeddedViews=[]}get element(){return new Kc(this._data.renderElement)}get injector(){return new Wh(this._view,this._elDef)}get parentInjector(){let t=this._view,e=this._elDef.parent;for(;!e&&t;)e=eh(t),t=t.parent;return t?new Wh(t,e):new Wh(this._view,null)}clear(){for(let t=this._embeddedViews.length-1;t>=0;t--){const e=Eh(this._data,t);Vf.destroyView(e)}}get(t){const e=this._embeddedViews[t];if(e){const t=new Bh(e);return t.attachToViewContainerRef(this),t}return null}get length(){return this._embeddedViews.length}createEmbeddedView(t,e,n){const a=t.createEmbeddedView(e||{});return this.insert(a,n),a}createComponent(t,e,n,a,r){const i=n||this.parentInjector;r||t instanceof Uc||(r=i.get(ft));const s=t.create(i,a,void 0,r);return this.insert(s.hostView,e),s}insert(t,e){if(t.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");const n=t;return function(t,e,n,a){let r=e.viewContainer._embeddedViews;null==n&&(n=r.length),a.viewContainerParent=t,mt(r,n,a),function(t,e){const n=th(e);if(!n||n===t||16&e.state)return;e.state|=16;let a=n.template._projectedViews;a||(a=n.template._projectedViews=[]),a.push(e),function(t,e){if(4&e.flags)return;t.nodeFlags|=4,e.flags|=4;let n=e.parent;for(;n;)n.childFlags|=4,n=n.parent}(e.parent.def,e.parentNodeDef)}(e,a),Vf.dirtyParentQueries(a),Lh(e,n>0?r[n-1]:null,a)}(this._view,this._data,e,n._view),n.attachToViewContainerRef(this),t}move(t,e){if(t.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");const n=this._embeddedViews.indexOf(t._view);return function(t,e,n){const a=t.viewContainer._embeddedViews,r=a[e];yt(a,e),null==n&&(n=a.length),mt(a,n,r),Vf.dirtyParentQueries(r),Dh(r),Lh(t,n>0?a[n-1]:null,r)}(this._data,n,e),t}indexOf(t){return this._embeddedViews.indexOf(t._view)}remove(t){const e=Eh(this._data,t);e&&Vf.destroyView(e)}detach(t){const e=Eh(this._data,t);return e?new Bh(e):null}}function zh(t){return new Bh(t)}class Bh{constructor(t){this._view=t,this._viewContainerRef=null,this._appRef=null}get rootNodes(){return function(t){const e=[];return ch(t,0,void 0,void 0,e),e}(this._view)}get context(){return this._view.context}get destroyed(){return 0!=(128&this._view.state)}markForCheck(){Jf(this._view)}detach(){this._view.state&=-5}detectChanges(){const t=this._view.root.rendererFactory;t.begin&&t.begin();try{Vf.checkAndUpdateView(this._view)}finally{t.end&&t.end()}}checkNoChanges(){Vf.checkNoChangesView(this._view)}reattach(){this._view.state|=4}onDestroy(t){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(t)}destroy(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),Vf.destroyView(this._view)}detachFromAppRef(){this._appRef=null,Dh(this._view),Vf.dirtyParentQueries(this._view)}attachToAppRef(t){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t}attachToViewContainerRef(t){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=t}}function Yh(t,e){return new Hh(t,e)}class Hh extends wf{constructor(t,e){super(),this._parentView=t,this._def=e}createEmbeddedView(t){return new Bh(Vf.createEmbeddedView(this._parentView,this._def,this._def.element.template,t))}get elementRef(){return new Kc(Mf(this._parentView,this._def.nodeIndex).renderElement)}}function Uh(t,e){return new Wh(t,e)}class Wh{constructor(t,e){this.view=t,this.elDef=e}get(t,e=Bo.THROW_IF_NOT_FOUND){return Vf.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:t,tokenKey:Yf(t)},e)}}function Kh(t,e){const n=t.def.nodes[e];if(1&n.flags){const e=Mf(t,n.nodeIndex);return n.element.template?e.template:e.renderElement}if(2&n.flags)return Pf(t,n.nodeIndex).renderText;if(20240&n.flags)return qf(t,n.nodeIndex).instance;throw new Error(`Illegal state: read nodeValue for node index ${e}`)}function $h(t){return new Zh(t.renderer)}class Zh{constructor(t){this.delegate=t}selectRootElement(t){return this.delegate.selectRootElement(t)}createElement(t,e){const[n,a]=mh(e),r=this.delegate.createElement(a,n);return t&&this.delegate.appendChild(t,r),r}createViewRoot(t){return t}createTemplateAnchor(t){const e=this.delegate.createComment("");return t&&this.delegate.appendChild(t,e),e}createText(t,e){const n=this.delegate.createText(e);return t&&this.delegate.appendChild(t,n),n}projectNodes(t,e){for(let n=0;n<e.length;n++)this.delegate.appendChild(t,e[n])}attachViewAfter(t,e){const n=this.delegate.parentNode(t),a=this.delegate.nextSibling(t);for(let r=0;r<e.length;r++)this.delegate.insertBefore(n,e[r],a)}detachView(t){for(let e=0;e<t.length;e++){const n=t[e],a=this.delegate.parentNode(n);this.delegate.removeChild(a,n)}}destroyView(t,e){for(let n=0;n<e.length;n++)this.delegate.destroyNode(e[n])}listen(t,e,n){return this.delegate.listen(t,e,n)}listenGlobal(t,e,n){return this.delegate.listen(t,e,n)}setElementProperty(t,e,n){this.delegate.setProperty(t,e,n)}setElementAttribute(t,e,n){const[a,r]=mh(e);null!=n?this.delegate.setAttribute(t,r,n,a):this.delegate.removeAttribute(t,r,a)}setBindingDebugInfo(t,e,n){}setElementClass(t,e,n){n?this.delegate.addClass(t,e):this.delegate.removeClass(t,e)}setElementStyle(t,e,n){null!=n?this.delegate.setStyle(t,e,n):this.delegate.removeStyle(t,e)}invokeElementMethod(t,e,n){t[e].apply(t,n)}setText(t,e){this.delegate.setValue(t,e)}animate(){throw new Error("Renderer.animate is no longer supported!")}}function Jh(t,e,n,a){return new Qh(t,e,n,a)}class Qh{constructor(t,e,n,a){this._moduleType=t,this._parent=e,this._bootstrapComponents=n,this._def=a,this._destroyListeners=[],this._destroyed=!1,this.injector=this,function(t){const e=t._def,n=t._providers=new Array(e.providers.length);for(let a=0;a<e.providers.length;a++){const r=e.providers[a];4096&r.flags||void 0===n[a]&&(n[a]=kh(t,r))}}(this)}get(t,e=Bo.THROW_IF_NOT_FOUND,n=C.Default){let a=0;return n&C.SkipSelf?a|=1:n&C.Self&&(a|=4),Ah(this,{token:t,tokenKey:Yf(t),flags:a},e)}get instance(){return this.get(this._moduleType)}get componentFactoryResolver(){return this.get(Yc)}destroy(){if(this._destroyed)throw new Error(`The ng module ${j(this.instance.constructor)} has already been destroyed.`);this._destroyed=!0,function(t,e){const n=t._def,a=new Set;for(let r=0;r<n.providers.length;r++)if(131072&n.providers[r].flags){const e=t._providers[r];if(e&&e!==wh){const t=e.ngOnDestroy;"function"!=typeof t||a.has(e)||(t.apply(e),a.add(e))}}}(this),this._destroyListeners.forEach(t=>t())}onDestroy(t){this._destroyListeners.push(t)}}const Xh=Yf(Xc),tg=Yf(af),eg=Yf(Kc),ng=Yf(Nf),ag=Yf(wf),rg=Yf(Xs),ig=Yf(Bo),sg=Yf($);function og(t,e,n,a,r,i,s,o){const u=[];if(s)for(let d in s){const[t,e]=s[d];u[t]={flags:8,name:d,nonMinifiedName:e,ns:null,securityContext:null,suffix:null}}const l=[];if(o)for(let d in o)l.push({type:1,propName:d,target:null,eventName:o[d]});return dg(t,e|=16384,n,a,r,r,i,u,l)}function ug(t,e,n){return dg(-1,t|=16,null,0,e,e,n)}function lg(t,e,n,a,r){return dg(-1,t,e,0,n,a,r)}function dg(t,e,n,a,r,i,s,o,u){const{matchedQueries:l,references:d,matchedQueryIds:c}=sh(n);u||(u=[]),o||(o=[]),i=V(i);const f=oh(s,j(r));return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l,matchedQueryIds:c,references:d,ngContentIndex:-1,childCount:a,bindings:o,bindingFlags:yh(o),outputs:u,element:null,provider:{token:r,value:i,deps:f},text:null,query:null,ngContent:null}}function cg(t,e){return pg(t,e)}function fg(t,e){let n=t;for(;n.parent&&!ah(n);)n=n.parent;return bg(n.parent,eh(n),!0,e.provider.value,e.provider.deps)}function hg(t,e){const n=bg(t,e.parent,(32768&e.flags)>0,e.provider.value,e.provider.deps);if(e.outputs.length)for(let a=0;a<e.outputs.length;a++){const r=e.outputs[a],i=n[r.propName];if(!ed(i))throw new Error(`@Output ${r.propName} not initialized in '${n.constructor.name}'.`);{const n=i.subscribe(gg(t,e.parent.nodeIndex,r.eventName));t.disposables[e.outputIndex+a]=n.unsubscribe.bind(n)}}return n}function gg(t,e,n){return a=>Xf(t,e,n,a)}function pg(t,e){const n=(8192&e.flags)>0,a=e.provider;switch(201347067&e.flags){case 512:return bg(t,e.parent,n,a.value,a.deps);case 1024:return function(t,e,n,a,r){const i=r.length;switch(i){case 0:return a();case 1:return a(yg(t,e,n,r[0]));case 2:return a(yg(t,e,n,r[0]),yg(t,e,n,r[1]));case 3:return a(yg(t,e,n,r[0]),yg(t,e,n,r[1]),yg(t,e,n,r[2]));default:const s=Array(i);for(let a=0;a<i;a++)s[a]=yg(t,e,n,r[a]);return a(...s)}}(t,e.parent,n,a.value,a.deps);case 2048:return yg(t,e.parent,n,a.deps[0]);case 256:return a.value}}function bg(t,e,n,a,r){const i=r.length;switch(i){case 0:return new a;case 1:return new a(yg(t,e,n,r[0]));case 2:return new a(yg(t,e,n,r[0]),yg(t,e,n,r[1]));case 3:return new a(yg(t,e,n,r[0]),yg(t,e,n,r[1]),yg(t,e,n,r[2]));default:const s=new Array(i);for(let a=0;a<i;a++)s[a]=yg(t,e,n,r[a]);return new a(...s)}}const mg={};function yg(t,e,n,a,r=Bo.THROW_IF_NOT_FOUND){if(8&a.flags)return a.token;const i=t;2&a.flags&&(r=null);const s=a.tokenKey;s===rg&&(n=!(!e||!e.element.componentView)),e&&1&a.flags&&(n=!1,e=e.parent);let o=t;for(;o;){if(e)switch(s){case Xh:return $h(vg(o,e,n));case tg:return vg(o,e,n).renderer;case eg:return new Kc(Mf(o,e.nodeIndex).renderElement);case ng:return Mf(o,e.nodeIndex).viewContainer;case ag:if(e.element.template)return Mf(o,e.nodeIndex).template;break;case rg:return zh(vg(o,e,n));case ig:case sg:return Uh(o,e);default:const t=(n?e.element.allProviders:e.element.publicProviders)[s];if(t){let e=qf(o,t.nodeIndex);return e||(e={instance:pg(o,t)},o.nodes[t.nodeIndex]=e),e.instance}}n=ah(o),e=eh(o),o=o.parent,4&a.flags&&(o=null)}const u=i.root.injector.get(a.token,mg);return u!==mg||r===mg?u:i.root.ngModule.injector.get(a.token,r)}function vg(t,e,n){let a;if(n)a=Mf(t,e.nodeIndex).componentView;else for(a=t;a.parent&&!ah(a);)a=a.parent;return a}function xg(t,e,n,a,r,i){if(32768&n.flags){const e=Mf(t,n.parent.nodeIndex).componentView;2&e.def.flags&&(e.state|=8)}if(e.instance[n.bindings[a].name]=r,524288&n.flags){i=i||{};const e=Mu.unwrap(t.oldValues[n.bindingIndex+a]);i[n.bindings[a].nonMinifiedName]=new Tc(e,r,0!=(2&t.state))}return t.oldValues[n.bindingIndex+a]=r,i}function _g(t,e){if(!(t.def.nodeFlags&e))return;const n=t.def.nodes;let a=0;for(let r=0;r<n.length;r++){const i=n[r];let s=i.parent;for(!s&&i.flags&e&&Og(t,r,i.flags&e,a++),0==(i.childFlags&e)&&(r+=i.childCount);s&&1&s.flags&&r===s.nodeIndex+s.childCount;)s.directChildFlags&e&&(a=Tg(t,s,e,a)),s=s.parent}}function Tg(t,e,n,a){for(let r=e.nodeIndex+1;r<=e.nodeIndex+e.childCount;r++){const e=t.def.nodes[r];e.flags&n&&Og(t,r,e.flags&n,a++),r+=e.childCount}return a}function Og(t,e,n,a){const r=qf(t,e);if(!r)return;const i=r.instance;i&&(Vf.setCurrentNode(t,e),1048576&n&&Df(t,512,a)&&i.ngAfterContentInit(),2097152&n&&i.ngAfterContentChecked(),4194304&n&&Df(t,768,a)&&i.ngAfterViewInit(),8388608&n&&i.ngAfterViewChecked(),131072&n&&i.ngOnDestroy())}function wg(t){const e=[];for(let n in t)t.hasOwnProperty(n)&&e.push({propName:t[n],templateName:n});return e}const Sg=new K("SCHEDULER_TOKEN",{providedIn:"root",factory:()=>_n});class Ig extends Gc{constructor(t,e){super(),this.componentDef=t,this.ngModule=e,this.componentType=t.type,this.selector=t.selectors[0][0]||"div",this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!e}get inputs(){return wg(this.componentDef.inputs)}get outputs(){return wg(this.componentDef.outputs)}create(t,e,n,a){const r=(a=a||this.ngModule)?function(t,e){return{get:(n,a,r)=>{const i=t.get(n,mg,r);return i!==mg||a===mg?i:e.get(n,a,r)}}}(t,a.injector):t,i=r.get(ef,ea),s=r.get(vr,null);pn();const o=n?Gi(i,n):Ci(this.selector,i.createRenderer(null,this.componentDef)),u=this.componentDef.onPush?576:528,l="string"==typeof n&&/^#root-ng-internal-isolated-\d+/.test(n),d=vc(),c=i.createRenderer(o,this.componentDef);n&&o&&(ta(c)?c.setAttribute(o,"ng-version",uf.full):o.setAttribute("ng-version",uf.full));const f=Ri(null,Fi(-1,null,1,0,null,null,null,null),d,u,null,null,i,c,s,r),h=an(f,null);let g,p,b=!1;try{const t=mc(o,this.componentDef,f,i,c);p=ye(0,f),e&&(p.projection=e.map(t=>Array.from(t))),g=yc(t,this.componentDef,f,d,[xc]),rs(f,t),Ii(f),b=!0}finally{sn(h,b)}const m=new Ng(this.componentType,g,$s(Kc,p,f),f,p);return n&&!l||(m.hostView._tViewNode.child=p),m}}class Ng extends Fc{constructor(t,e,n,a,r){super(),this.location=n,this._rootLView=a,this._tNode=r,this.destroyCbs=[],this.instance=e,this.hostView=this.changeDetectorRef=new Hs(a),this.hostView._tViewNode=ki(a[1],null,-1,a),this.componentType=t}get injector(){return new Ca(this._tNode,this._rootLView)}destroy(){this.destroyCbs&&(this.destroyCbs.forEach(t=>t()),this.destroyCbs=null,!this.hostView.destroyed&&this.hostView.destroy())}onDestroy(t){this.destroyCbs&&this.destroyCbs.push(t)}}const Cg={},Rg=function(){var t={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencySymbol:15,CurrencyName:16,Currencies:17,PluralCase:18,ExtraData:19};return t[t.LocaleId]="LocaleId",t[t.DayPeriodsFormat]="DayPeriodsFormat",t[t.DayPeriodsStandalone]="DayPeriodsStandalone",t[t.DaysFormat]="DaysFormat",t[t.DaysStandalone]="DaysStandalone",t[t.MonthsFormat]="MonthsFormat",t[t.MonthsStandalone]="MonthsStandalone",t[t.Eras]="Eras",t[t.FirstDayOfWeek]="FirstDayOfWeek",t[t.WeekendRange]="WeekendRange",t[t.DateFormat]="DateFormat",t[t.TimeFormat]="TimeFormat",t[t.DateTimeFormat]="DateTimeFormat",t[t.NumberSymbols]="NumberSymbols",t[t.NumberFormats]="NumberFormats",t[t.CurrencySymbol]="CurrencySymbol",t[t.CurrencyName]="CurrencyName",t[t.Currencies]="Currencies",t[t.PluralCase]="PluralCase",t[t.ExtraData]="ExtraData",t}(),Ag=void 0;var kg=["en",[["a","p"],["AM","PM"],Ag],[["AM","PM"],Ag,Ag],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Ag,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Ag,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Ag,"{1} 'at' {0}",Ag],[".",",",";","%","+","-","E","×","‰","∞","NaN",":"],["#,##0.###","#,##0%","¤#,##0.00","#E0"],"$","US Dollar",{},function(t){let e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\.?/,"").length;return 1===e&&0===n?1:5}];function Eg(t){return Lg(t)[Rg.PluralCase]}function Lg(t){const e=t.toLowerCase().replace(/_/g,"-");let n=Cg[e];if(n)return n;const a=e.split("-")[0];if(n=Cg[a],n)return n;if("en"===a)return kg;throw new Error(`Missing locale data for the locale "${t}".`)}const Dg="en-US",Pg=/^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/,Mg=/�\/?\*(\d+:\d+)�/gi,qg=/�(\/?[#*!]\d+):?\d*�/gi,jg=/�(\d+):?\d*�/gi,Fg=/({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi,Gg=/\[(�.+?�?)\]/,Vg=/\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g,zg=/({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g,Bg=/{([A-Z0-9_]+)}/g,Yg=/�I18N_EXP_(ICU(_\d+)?)�/g,Hg=/\/\*/,Ug=/\d+\:(\d+)/;function Wg(t){if(!t)return[];let e=0;const n=[],a=[],r=/[{}]/g;let i;for(r.lastIndex=0;i=r.exec(t);){const r=i.index;if("}"==i[0]){if(n.pop(),0==n.length){const n=t.substring(e,r);Pg.test(n)?a.push(Kg(n)):a.push(n),e=r+1}}else{if(0==n.length){const n=t.substring(e,r);a.push(n),e=r+1}n.push("{")}}const s=t.substring(e);return a.push(s),a}function Kg(t){const e=[],n=[];let a=1,r=0;const i=Wg(t=t.replace(Pg,(function(t,e,n){return a="select"===n?0:1,r=parseInt(e.substr(1),10),""})));for(let s=0;s<i.length;){let t=i[s++].trim();1===a&&(t=t.replace(/\s*(?:=)?(\w+)\s*/,"$1")),t.length&&e.push(t);const r=Wg(i[s++]);e.length>n.length&&n.push(r)}return'Missing key "other" in ICU statement.',e.indexOf("other")<=-1&&vt('Missing key "other" in ICU statement.'),{type:a,mainBinding:r,cases:e,values:n}}function $g(t){let e,n,a="",r=0,i=!1;for(;null!==(e=Mg.exec(t));)i?e[0]===`�/*${n}�`&&(r=e.index,i=!1):(a+=t.substring(r,e.index+e[0].length),n=e[1],i=!0);return a+=t.substr(r),a}function Zg(t,e,n,a=null){const r=[null,null],i=t.split(jg);let s=0;for(let o=0;o<i.length;o++){const t=i[o];if(1&o){const e=parseInt(t,10);r.push(-1-e),s|=tp(e)}else""!==t&&r.push(t)}return r.push(e<<2|(n?1:0)),n&&r.push(n,a),r[0]=s,r[1]=r.length-2,r}function Jg(t,e=0){let n;e|=tp(t.mainBinding);for(let a=0;a<t.values.length;a++){const r=t.values[a];for(let t=0;t<r.length;t++){const a=r[t];if("string"==typeof a)for(;n=jg.exec(a);)e|=tp(parseInt(n[1],10));else e=Jg(a,e)}}return e}const Qg=[];let Xg=-1;function tp(t){return 1<<Math.min(t,31)}const ep=[];function np(t,e,n){const a=Ae()[1];Qg[++Xg]=t,cd(!0),a.firstTemplatePass&&null===a.data[t+19]&&function(t,e,n,a){const r=Ae(),i=t.blueprint.length-19;ap=0;const s=Ve(),o=Ye()?Ve():s&&s.parent;let u=o&&o!==r[6]?o.index-19:e,l=0;ep[l]=u;const d=[];e>0&&s!==o&&d.push(s.index<<3|0);const c=[],f=[],h=(g=function(t,e){if("number"!=typeof e)return $g(t);{const n=t.indexOf(`:${e}�`)+2+e.toString().length,a=t.search(new RegExp(`�\\/\\*\\d+:${e}�`));return $g(t.substring(n,a))}}(n,a),g.replace(xp," ")).split(qg);var g;for(let p=0;p<h.length;p++){let t=h[p];if(1&p)if("/"===t.charAt(0)){if("#"===t.charAt(1)){const e=parseInt(t.substr(2),10);u=ep[--l],d.push(e<<3|5)}}else{const e=parseInt(t.substr(1),10);d.push(e<<3|0,u<<17|1),"#"===t.charAt(0)&&(ep[++l]=u=e)}else{const e=Wg(t);for(let t=0;t<e.length;t++)if(1&t){const n=i+ap++;d.push(hi,"",n,u<<17|1);const a=e[t],r=Jg(a);mp(f,a,n,n);const s=f.length-1;c.push(tp(a.mainBinding),3,-1-a.mainBinding,n<<2|2,s,r,2,n<<2|3,s)}else if(""!==e[t]){const n=e[t],a=n.match(jg),r=i+ap++;d.push(a?"":n,r,u<<17|1),a&&gt(Zg(n,r),c)}}}ap>0&&function(t,e){if(e>0){const n=t[1];if(n.firstTemplatePass){for(let a=0;a<e;a++)n.blueprint.push(null),n.data.push(null),t.push(null);n.expandoInstructions?n.expandoInstructions.push(e):n.expandoStartIndex+=e}}}(r,ap),t.data[e+19]={vars:ap,create:d,update:c,icus:f.length?f:null}}(a,t,e,n)}let ap;function rp(t,e,n,a){const r=t.next;n||(n=e),n===e&&t!==e.child?(t.next=e.child,e.child=t):n!==e&&t!==n.next?(t.next=n.next,n.next=t):t.next=null,e!==a[6]&&(t.parent=e);let i=t.next;for(;i;)i.next===t&&(i.next=r),i=i.next;if(1===t.type)return Fs(a,t,t.projection,da(a)),t;Ms(be(t,a),t,a);const s=a[t.index];return 0!==t.type&&Jt(s)&&Ms(s[7],t,a),t}function ip(t,e={}){let n=t;if(Gg.test(t)){const t={},e=[0];n=n.replace(Vg,(n,a,r)=>{const i=a||r,s=t[i]||[];if(s.length||(i.split("|").forEach(t=>{const e=t.match(Ug),n=e?parseInt(e[1],10):0,a=Hg.test(t);s.push([n,a,t])}),t[i]=s),!s.length)throw new Error(`i18n postprocess: unmatched placeholder - ${i}`);const o=e[e.length-1];let u=0;for(let t=0;t<s.length;t++)if(s[t][0]===o){u=t;break}const[l,d,c]=s[u];return d?e.pop():o!==l&&e.push(l),s.splice(u,1),c})}return Object.keys(e).length?(n=n.replace(zg,(t,n,a,r,i,s)=>e.hasOwnProperty(a)?`${n}${e[a]}${s}`:t),n=n.replace(Bg,(t,n)=>e.hasOwnProperty(n)?e[n]:t),n=n.replace(Yg,(t,n)=>{if(e.hasOwnProperty(n)){const a=e[n];if(!a.length)throw new Error(`i18n postprocess: unmatched ICU - ${t} with key: ${n}`);return a.shift()}return t}),n):n}function sp(){!function(t){const e=Ae(),n=Qg[Xg--],a=t.data[n+19];let r=Ve();const i=up(n,a.create,0,e);for(let s=n+1;s<=r.index-19;s++)-1===i.indexOf(s)&&lp(s,e)}(Ae()[1]),cd(!1)}function op(t,e,n,a,r){const i=Ve();t[e+19]=a;const s=Ai(t[1],t[6],e,n,r,null);return i.next===s&&(i.next=null),s}function up(t,e,n,a){const r=Ae()[12];let i=null,s=null;const o=[];for(let u=0;u<e.length;u++){const n=e[u];if("string"==typeof n){const t=ws(n,r),l=e[++u];s=i,i=op(a,l,3,t,null),o.push(l),He()}else if("number"==typeof n)switch(7&n){case 1:const r=n>>>17;let l;l=r===t?a[6]:ye(r,a),s=rp(i,l,s,a);break;case 0:const d=n>>>3;o.push(d),s=i,i=ye(d,a),i&&ze(i,3===i.type);break;case 5:s=i=ye(n>>>3,a),ze(i,!1);break;case 4:es(n>>>3,e[++u],e[++u],a);break;default:throw new Error(`Unable to determine the type of mutate operation for "${n}"`)}else switch(n){case hi:const t=e[++u],l=e[++u],d=r.createComment(t);s=i,i=op(a,l,5,d,null),o.push(l),qr(d,a),i.activeCaseIndex=null,He();break;case fi:const c=e[++u],f=e[++u];s=i,i=op(a,f,3,r.createElement(c),c),o.push(f);break;default:throw new Error(`Unable to determine the type of mutate operation for "${n}"`)}}return He(),o}function lp(t,e){const n=ye(t,e),a=pe(t,e);a&&js(e[12],a);const r=_l(t);if(Jt(r)){const t=r;0!==n.type&&js(e[12],t[7])}n.flags|=32}function dp(t,e,n){np(t,e,n),sp()}function cp(t,e){!function(t,e,n){const a=Ve().index-19,r=[];for(let i=0;i<n.length;i+=2){const s=n[i],o=n[i+1].split(Fg);for(let n=0;n<o.length;n++){const i=o[n];if(1&n)throw new Error("ICU expressions are not yet supported in attributes");if(""!==i)if(i.match(jg))t.firstTemplatePass&&null===t.data[e+19]&&gt(Zg(i,a,s),r);else{const t=Ae();es(a,s,i,t);const e=ye(a,t),n=e.inputs&&e.inputs[s];n&&ys(t,n,i)}}}t.firstTemplatePass&&null===t.data[e+19]&&(t.data[e+19]=r)}(Ae()[1],t,e)}let fp=0,hp=0;function gp(t){return Uu(Ae(),t)!==ci&&(fp|=1<<hp),hp++,gp}function pp(t){if(hp){const e=Ae(),n=e[1].data[t+19];let a,r=null;Array.isArray(n)?a=n:(a=n.update,r=n.icus),function t(e,n,a,r,i,s=!1){let o=!1;for(let u=0;u<e.length;u++){const l=e[u],d=e[++u];if(s||l&r){let s="";for(let l=u+1;l<=u+d;l++){const u=e[l];if("string"==typeof u)s+=u;else if("number"==typeof u)if(u<0)s+=vn(i[a-u]);else{const d=u>>>2;let c,f,h;switch(3&u){case 1:Yi(d,e[++l],s,e[++l]);break;case 0:vs(i,d,s);break;case 2:if(c=e[++l],f=n[c],h=ye(d,i),null!==h.activeCaseIndex){const t=f.remove[h.activeCaseIndex];for(let e=0;e<t.length;e++){const a=t[e];switch(7&a){case 3:lp(a>>>3,i);break;case 6:const r=ye(t[e+1]>>>3,i).activeCaseIndex;null!==r&&gt(n[a>>>3].remove[r],t)}}}const u=bp(f,s);h.activeCaseIndex=-1!==u?u:null,up(-1,f.create[u],0,i),o=!0;break;case 3:c=e[++l],f=n[c],h=ye(d,i),t(f.update[h.activeCaseIndex],n,a,r,i,o)}}}}u+=d}}(a,r,e[7]-hp-1,fp,e),fp=0,hp=0}}function bp(t,e){let n=t.cases.indexOf(e);if(-1===n)switch(t.type){case 1:{const a=function(t,e){switch(Eg(e)(t)){case 0:return"zero";case 1:return"one";case 2:return"two";case 3:return"few";case 4:return"many";default:return"other"}}(e,Sp);n=t.cases.indexOf(a),-1===n&&"other"!==a&&(n=t.cases.indexOf("other"));break}case 0:n=t.cases.indexOf("other")}return n}function mp(t,e,n,a){const r=[],i=[],s=[],o=[],u=[];for(let l=0;l<e.values.length;l++){const d=e.values[l],c=[];for(let t=0;t<d.length;t++){const e=d[t];if("string"!=typeof e){const n=c.push(e)-1;d[t]=`\x3c!--�${n}�--\x3e`}}const f=yp(d.join(""),n,c,t,a);r.push(f.create),i.push(f.remove),s.push(f.update),o.push(f.vars),u.push(f.childIcus)}t.push({type:e.type,vars:o,childIcus:u,cases:e.cases,create:r,remove:i,update:s}),ap+=Math.max(...o)}function yp(t,e,n,a,r){const i=new $a(document).getInertBodyElement(t);if(!i)throw new Error("Unable to generate inert body element");const s={vars:0,childIcus:[],create:[],remove:[],update:[]};return function t(e,n,a,r,i,s){if(e){const o=[];for(;e;){const u=e.nextSibling,l=s+ ++n.vars;switch(e.nodeType){case Node.ELEMENT_NODE:const u=e,d=u.tagName.toLowerCase();if(sr.hasOwnProperty(d)){n.create.push(fi,d,l,a<<17|1);const o=u.attributes;for(let t=0;t<o.length;t++){const e=o.item(t),a=e.name.toLowerCase();e.value.match(jg)?lr.hasOwnProperty(a)&&gt(or[a]?Zg(e.value,l,e.name,Qa):ur[a]?Zg(e.value,l,e.name,Xa):Zg(e.value,l,e.name),n.update):n.create.push(l<<3|4,e.name,e.value)}t(e.firstChild,n,l,r,i,s),n.remove.push(l<<3|3)}else n.vars--;break;case Node.TEXT_NODE:const c=e.textContent||"",f=c.match(jg);n.create.push(f?"":c,l,a<<17|1),n.remove.push(l<<3|3),f&&gt(Zg(c,l),n.update);break;case Node.COMMENT_NODE:const h=vp.exec(e.textContent||"");if(h){const t=parseInt(h[1],10);n.create.push(hi,"",l,a<<17|1),o.push([r[t],l])}else n.vars--;break;default:n.vars--}e=u}for(let t=0;t<o.length;t++){const e=o[t][0],a=o[t][1];mp(i,e,a,s+n.vars);const r=i.length-1;n.vars+=Math.max(...i[r].vars),n.childIcus.push(r);const u=Jg(e);n.update.push(tp(e.mainBinding),3,-1-e.mainBinding,a<<2|2,r,u,2,a<<2|3,r),n.remove.push(r<<3|6,a<<3|3)}}}((mr(i)||i).firstChild,s,e,n,a,r),s}const vp=/�(\d+)�/,xp=/\uE500/g;let _p={};function Tp(t={translations:{}}){_p=t.translations}const Op=/\{\$(.*?)\}/g;function wp(t,e){return void 0!==_p[t]&&(t=_p[t]),void 0!==e&&Object.keys(e).length?t.replace(Op,(t,n)=>e[n]||""):t}let Sp=Dg;function Ip(t){null==t&&vt("Expected localeId to be defined"),"string"==typeof t&&(Sp=t.toLowerCase().replace(/_/g,"-"))}const Np=new Map;function Cp(t,e){const n=Np.get(t);Rp(t,n&&n.moduleType,e.moduleType),Np.set(t,e)}function Rp(t,e,n){if(e&&e!==n)throw new Error(`Duplicate module registered for ${t} - ${j(e)} vs ${j(e.name)}`)}function Ap(t){if(null!==t.ngModuleDef.id){const e=t.ngModuleDef.id;Rp(e,Np.get(e),t),Np.set(e,t)}let e=t.ngModuleDef.imports;e instanceof Function&&(e=e()),e&&e.forEach(t=>Ap(t))}function kp(t){return Np.get(t)}const Ep={provide:Yc,useClass:class extends Yc{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const e=Ht(t);return new Ig(e,this.ngModule)}},deps:[ft]};class Lp extends ft{constructor(t,e){super(),this._parent=e,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[];const n=$t(t),a=t[kt]||null;a&&Ip(a),this._bootstrapComponents=In(n.bootstrap),this._r3Injector=Do(t,e,[{provide:ft,useValue:this},Ep],j(t)),this.instance=this.get(t)}get(t,e=Bo.THROW_IF_NOT_FOUND,n=C.Default){return t===Bo||t===ft||t===$?this:this._r3Injector.get(t,e,n)}get componentFactoryResolver(){return this.get(Yc)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Dp extends ht{constructor(t){super(),this.moduleType=t,null!==$t(t)&&Ap(t)}create(t){return new Lp(this.moduleType,t)}}function Pp(t,e,n,a){return wt(()=>{const r=t,i=r.prototype?Object.getPrototypeOf(r.prototype):null,s=i&&i.constructor;null!==e&&(void 0===r.decorators||s&&s.decorators===r.decorators?r.decorators=e:r.decorators.push(...e)),null!==n&&(r.ctorParameters=n),null!==a&&(r.propDecorators=void 0===r.propDecorators||s&&s.propDecorators===r.propDecorators?a:Object.assign({},r.propDecorators,a))})}function Mp(t,e,n){const a=Qe()+t,r=Ae();return Ue()?Fu(r,a,n?e.call(n):e()):Gu(r,a)}function qp(t,e,n,a){const r=Ae(),i=Qe()+t;return Vu(r,i,n)?Fu(r,i+1,a?e.call(a,n):e(n)):Gu(r,i+1)}function jp(t,e,n,a,r){const i=Qe()+t,s=Ae();return zu(s,i,n,a)?Fu(s,i+2,r?e.call(r,n,a):e(n,a)):Gu(s,i+2)}function Fp(t,e,n,a,r,i){const s=Qe()+t,o=Ae();return Bu(o,s,n,a,r)?Fu(o,s+3,i?e.call(i,n,a,r):e(n,a,r)):Gu(o,s+3)}function Gp(t,e,n,a,r,i,s){const o=Qe()+t,u=Ae();return Yu(u,o,n,a,r,i)?Fu(u,o+4,s?e.call(s,n,a,r,i):e(n,a,r,i)):Gu(u,o+4)}function Vp(t,e,n,a,r,i,s,o){const u=Qe()+t,l=Ae(),d=Yu(l,u,n,a,r,i);return Vu(l,u+4,s)||d?Fu(l,u+5,o?e.call(o,n,a,r,i,s):e(n,a,r,i,s)):Gu(l,u+5)}function zp(t,e,n,a,r,i,s,o,u){const l=Qe()+t,d=Ae(),c=Yu(d,l,n,a,r,i);return zu(d,l+4,s,o)||c?Fu(d,l+6,u?e.call(u,n,a,r,i,s,o):e(n,a,r,i,s,o)):Gu(d,l+6)}function Bp(t,e,n,a,r,i,s,o,u,l){const d=Qe()+t,c=Ae();let f=Yu(c,d,n,a,r,i);return Bu(c,d+4,s,o,u)||f?Fu(c,d+7,l?e.call(l,n,a,r,i,s,o,u):e(n,a,r,i,s,o,u)):Gu(c,d+7)}function Yp(t,e,n,a,r,i,s,o,u,l,d){const c=Qe()+t,f=Ae(),h=Yu(f,c,n,a,r,i);return Yu(f,c+4,s,o,u,l)||h?Fu(f,c+8,d?e.call(d,n,a,r,i,s,o,u,l):e(n,a,r,i,s,o,u,l)):Gu(f,c+8)}function Hp(t,e,n,a){let r=Qe()+t,i=!1;const s=Ae();for(let o=0;o<n.length;o++)Vu(s,r++,n[o])&&(i=!0);return i?Fu(s,r,e.apply(a,n)):Gu(s,r)}function Up(t,e){const n=Ae()[1];let a;const r=t+19;n.firstTemplatePass?(a=function(t,e){if(e)for(let n=e.length-1;n>=0;n--){const a=e[n];if(t===a.name)return a}throw new Error(`The pipe '${t}' could not be found!`)}(e,n.pipeRegistry),n.data[r]=a,a.onDestroy&&(n.destroyHooks||(n.destroyHooks=[])).push(r,a.onDestroy)):a=n.data[r];const i=a.factory();return vl(t,i),i}function Wp(t,e,n){const a=_l(t);return Xp(Qp(t)?qp(e,a.transform,n,a):a.transform(n))}function Kp(t,e,n,a){const r=_l(t);return Xp(Qp(t)?jp(e,r.transform,n,a,r):r.transform(n,a))}function $p(t,e,n,a,r){const i=_l(t);return Xp(Qp(t)?Fp(e,i.transform,n,a,r,i):i.transform(n,a,r))}function Zp(t,e,n,a,r,i){const s=_l(t);return Xp(Qp(t)?Gp(e,s.transform,n,a,r,i,s):s.transform(n,a,r,i))}function Jp(t,e,n){const a=_l(t);return Xp(Qp(t)?Hp(e,a.transform,n,a):a.transform.apply(a,n))}function Qp(t){return Ae()[1].data[t+19].pure}function Xp(t){if(Mu.isWrapped(t)){t=Mu.unwrap(t);const e=Ae();e[e[7]]=ci}return t}class tb extends a.a{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,e,n){let a,i=t=>null,s=()=>null;t&&"object"==typeof t?(a=this.__isAsync?e=>{setTimeout(()=>t.next(e))}:e=>{t.next(e)},t.error&&(i=this.__isAsync?e=>{setTimeout(()=>t.error(e))}:e=>{t.error(e)}),t.complete&&(s=this.__isAsync?()=>{setTimeout(()=>t.complete())}:()=>{t.complete()})):(a=this.__isAsync?e=>{setTimeout(()=>t(e))}:e=>{t(e)},e&&(i=this.__isAsync?t=>{setTimeout(()=>e(t))}:t=>{e(t)}),n&&(s=this.__isAsync?()=>{setTimeout(()=>n())}:()=>{n()}));const o=super.subscribe(a,i,s);return t instanceof r.a&&t.add(o),o}}function eb(){return this._results[Lu()]()}class nb{constructor(){this.dirty=!0,this._results=[],this.changes=new tb,this.length=0;const t=Lu(),e=nb.prototype;e[t]||(e[t]=eb)}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,e){return this._results.reduce(t,e)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t){this._results=pt(t),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]}notifyOnChanges(){this.changes.emit(this)}setDirty(){this.dirty=!0}destroy(){this.changes.complete(),this.changes.unsubscribe()}}class ab{constructor(t){this.queryList=t,this.matches=null}clone(){return new ab(this.queryList)}setDirty(){this.queryList.setDirty()}}class rb{constructor(t=[]){this.queries=t}createEmbeddedView(t){const e=t.queries;if(null!==e){const n=null!==t.contentQueries?t.contentQueries[0]:e.length,a=new Array(n);for(let t=0;t<n;t++){const n=e.getByIndex(t);a[t]=this.queries[n.indexInDeclarationView].clone()}return new rb(a)}return null}insertView(t){this.dirtyQueriesWithMatches(t)}detachView(t){this.dirtyQueriesWithMatches(t)}dirtyQueriesWithMatches(t){for(let e=0;e<this.queries.length;e++)null!==Ob(t,e).matches&&this.queries[e].setDirty()}}class ib{constructor(t,e,n,a=null){this.predicate=t,this.descendants=e,this.isStatic=n,this.read=a}}class sb{constructor(t=[]){this.queries=t}elementStart(t,e){for(let n of this.queries)n.elementStart(t,e)}elementEnd(t){for(let e of this.queries)e.elementEnd(t)}embeddedTView(t){let e=null;for(let n=0;n<this.length;n++){const a=null!==e?e.length:0,r=this.getByIndex(n).embeddedTView(t,a);r&&(r.indexInDeclarationView=n,null!==e?e.push(r):e=[r])}return null!==e?new sb(e):null}template(t,e){for(let n of this.queries)n.template(t,e)}getByIndex(t){return this.queries[t]}get length(){return this.queries.length}track(t){this.queries.push(t)}}class ob{constructor(t,e=-1){this.metadata=t,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=e}elementStart(t,e){this.isApplyingToNode(e)&&this.matchTNode(t,e)}elementEnd(t){this._declarationNodeIndex===t.index&&(this._appliesToNextNode=!1)}template(t,e){this.elementStart(t,e)}embeddedTView(t,e){return this.isApplyingToNode(t)?(this.crossesNgTemplate=!0,this.addMatch(-t.index,e),new ob(this.metadata)):null}isApplyingToNode(t){return this._appliesToNextNode&&!1===this.metadata.descendants?this._declarationNodeIndex===(t.parent?t.parent.index:-1):this._appliesToNextNode}matchTNode(t,e){if(Array.isArray(this.metadata.predicate)){const n=this.metadata.predicate;for(let a=0;a<n.length;a++)this.matchTNodeWithReadOption(t,e,ub(e,n[a]))}else{const n=this.metadata.predicate;n===wf?0===e.type&&this.matchTNodeWithReadOption(t,e,-1):this.matchTNodeWithReadOption(t,e,wa(e,t,n,!1,!1))}}matchTNodeWithReadOption(t,e,n){if(null!==n){const a=this.metadata.read;if(null!==a)if(a===Kc||a===Nf||a===wf&&0===e.type)this.addMatch(e.index,-2);else{const n=wa(e,t,a,!1,!1);null!==n&&this.addMatch(e.index,n)}else this.addMatch(e.index,n)}}addMatch(t,e){null===this.matches?this.matches=[t,e]:this.matches.push(t,e)}}function ub(t,e){const n=t.localNames;if(null!==n)for(let a=0;a<n.length;a+=2)if(n[a]===e)return n[a+1];return null}function lb(t,e,n,a){return-1===n?function(t,e){return 3===t.type||4===t.type?$s(Kc,t,e):0===t.type?Zs(wf,Kc,t,e):null}(e,t):-2===n?function(t,e,n){return n===Kc?$s(Kc,e,t):n===wf?Zs(wf,Kc,e,t):n===Nf?Js(Nf,Kc,e,t):void 0}(t,e,a):Sa(t[1].data,t,n,e)}function db(t,e,n){const a=t[5].queries[n];if(null===a.matches){const n=t[1].data,r=e.matches,i=new Array(r.length/2);for(let a=0;a<r.length;a+=2){const s=r[a];i[a/2]=s<0?null:lb(t,n[s],r[a+1],e.metadata.read)}a.matches=i}return a.matches}function cb(t){const e=Ae(),n=en();nn(n+1);const a=Ob(e[1],n);if(t.dirty&&Ue()===a.metadata.isStatic){if(null===a.matches)t.reset([]);else{const r=a.crossesNgTemplate?function t(e,n,a){const r=e[1].queries.getByIndex(n),i=r.matches;if(null!==i){const s=db(e,r,n);for(let n=0;n<i.length;n+=2){const r=i[n];if(r>0)a.push(s[n/2]);else{const s=i[n+1],o=e[-r];for(let e=9;e<o.length;e++){const n=o[e];n[17]===n[3]&&t(n,s,a)}if(null!==o[5])for(let e of o[5])t(e,s,a)}}}return a}(e,n,[]):db(e,a,n);t.reset(r),t.notifyOnChanges()}return!0}return!1}function fb(t,e,n){gb(Ae(),t,e,n,!0)}function hb(t,e,n){gb(Ae(),t,e,n,!1)}function gb(t,e,n,a,r){const i=t[1];i.firstTemplatePass&&(Tb(i,new ib(e,n,r,a),-1),r&&(i.staticViewQueries=!0)),_b(t)}function pb(){return xb(Ae(),en())}function bb(t,e,n,a){yb(Ae(),e,n,a,!1,Ve(),t)}function mb(t,e,n,a){yb(Ae(),e,n,a,!0,Ve(),t)}function yb(t,e,n,a,r,i,s){const o=t[1];o.firstTemplatePass&&(Tb(o,new ib(e,n,r,a),i.index),function(t,e){const n=t.contentQueries||(t.contentQueries=[]);e!==(t.contentQueries.length?n[n.length-1]:-1)&&n.push(t.queries.length-1,e)}(o,s),r&&(o.staticContentQueries=!0)),_b(t)}function vb(){return xb(Ae(),en())}function xb(t,e){return t[5].queries[e].queryList}function _b(t){const e=new nb;!function(t,e,n){const a=gs(t);a.push(e),t[1].firstTemplatePass&&ps(t).push(n,a.length-1)}(t,e,e.destroy),null===t[5]&&(t[5]=new rb),t[5].queries.push(new ab(e))}function Tb(t,e,n){null===t.queries&&(t.queries=new sb),t.queries.track(new ob(e,n))}function Ob(t,e){return t.queries.getByIndex(e)}function wb(t,e){return Zs(wf,Kc,t,e)}function Sb(t=C.Default){const e=Qs(!0);if(null!=e||t&C.Optional)return e;throw new Error("No provider for ChangeDetectorRef!")}const Ib=(()=>({"ɵɵattribute":Wu,"ɵɵattributeInterpolate1":al,"ɵɵattributeInterpolate2":rl,"ɵɵattributeInterpolate3":il,"ɵɵattributeInterpolate4":sl,"ɵɵattributeInterpolate5":ol,"ɵɵattributeInterpolate6":ul,"ɵɵattributeInterpolate7":ll,"ɵɵattributeInterpolate8":dl,"ɵɵattributeInterpolateV":cl,"ɵɵdefineBase":zt,"ɵɵdefineComponent":Pt,"ɵɵdefineDirective":Bt,"ɵɵdefineInjectable":k,"ɵɵdefineInjector":L,"ɵɵdefineNgModule":Ft,"ɵɵdefinePipe":Yt,"ɵɵdirectiveInject":Tl,"ɵɵgetFactoryOf":Ra,"ɵɵgetInheritedFactory":Aa,"ɵɵinject":rt,"ɵɵinjectAttribute":Ol,"ɵɵinjectPipeChangeDetectorRef":Sb,"ɵɵtemplateRefExtractor":wb,"ɵɵNgOnChangesFeature":Oc,"ɵɵProvidersFeature":jc,"ɵɵInheritDefinitionFeature":Nc,"ɵɵcontainer":gl,"ɵɵnextContext":od,"ɵɵcontainerRefreshStart":bl,"ɵɵcontainerRefreshEnd":ml,"ɵɵnamespaceHTML":gn,"ɵɵnamespaceMathML":hn,"ɵɵnamespaceSVG":fn,"ɵɵenableBindings":Ce,"ɵɵdisableBindings":Re,"ɵɵallocHostVars":ku,"ɵɵelementStart":Bl,"ɵɵelementEnd":Yl,"ɵɵelement":Hl,"ɵɵelementContainerStart":Kl,"ɵɵelementContainerEnd":$l,"ɵɵelementContainer":Zl,"ɵɵpureFunction0":Mp,"ɵɵpureFunction1":qp,"ɵɵpureFunction2":jp,"ɵɵpureFunction3":Fp,"ɵɵpureFunction4":Gp,"ɵɵpureFunction5":Vp,"ɵɵpureFunction6":zp,"ɵɵpureFunction7":Bp,"ɵɵpureFunction8":Yp,"ɵɵpureFunctionV":Hp,"ɵɵgetCurrentView":Xl,"ɵɵrestoreView":Ge,"ɵɵlistener":nd,"ɵɵload":_l,"ɵɵprojection":fd,"ɵɵupdateSyntheticHostBinding":tc,"ɵɵcomponentHostSyntheticListener":ad,"ɵɵpipeBind1":Wp,"ɵɵpipeBind2":Kp,"ɵɵpipeBind3":$p,"ɵɵpipeBind4":Zp,"ɵɵpipeBindV":Jp,"ɵɵprojectionDef":ld,"ɵɵhostProperty":Xd,"ɵɵproperty":Hu,"ɵɵpropertyInterpolate":hd,"ɵɵpropertyInterpolate1":gd,"ɵɵpropertyInterpolate2":pd,"ɵɵpropertyInterpolate3":bd,"ɵɵpropertyInterpolate4":md,"ɵɵpropertyInterpolate5":yd,"ɵɵpropertyInterpolate6":vd,"ɵɵpropertyInterpolate7":xd,"ɵɵpropertyInterpolate8":_d,"ɵɵpropertyInterpolateV":Td,"ɵɵpipe":Up,"ɵɵqueryRefresh":cb,"ɵɵviewQuery":hb,"ɵɵstaticViewQuery":fb,"ɵɵstaticContentQuery":mb,"ɵɵloadViewQuery":pb,"ɵɵcontentQuery":bb,"ɵɵloadContentQuery":vb,"ɵɵreference":xl,"ɵɵelementHostAttrs":Ul,"ɵɵclassMap":kl,"ɵɵclassMapInterpolate1":Pd,"ɵɵclassMapInterpolate2":Md,"ɵɵclassMapInterpolate3":qd,"ɵɵclassMapInterpolate4":jd,"ɵɵclassMapInterpolate5":Fd,"ɵɵclassMapInterpolate6":Gd,"ɵɵclassMapInterpolate7":Vd,"ɵɵclassMapInterpolate8":zd,"ɵɵclassMapInterpolateV":Bd,"ɵɵstyling":wl,"ɵɵstyleMap":Al,"ɵɵstyleProp":Il,"ɵɵstylePropInterpolate1":Yd,"ɵɵstylePropInterpolate2":Hd,"ɵɵstylePropInterpolate3":Ud,"ɵɵstylePropInterpolate4":Wd,"ɵɵstylePropInterpolate5":Kd,"ɵɵstylePropInterpolate6":$d,"ɵɵstylePropInterpolate7":Zd,"ɵɵstylePropInterpolate8":Jd,"ɵɵstylePropInterpolateV":Qd,"ɵɵstyleSanitizer":Sl,"ɵɵstylingApply":Pl,"ɵɵclassProp":Cl,"ɵɵselect":Oi,"ɵɵtemplate":pl,"ɵɵtext":Od,"ɵɵtextBinding":wd,"ɵɵtextInterpolate":Sd,"ɵɵtextInterpolate1":Id,"ɵɵtextInterpolate2":Nd,"ɵɵtextInterpolate3":Cd,"ɵɵtextInterpolate4":Rd,"ɵɵtextInterpolate5":Ad,"ɵɵtextInterpolate6":kd,"ɵɵtextInterpolate7":Ed,"ɵɵtextInterpolate8":Ld,"ɵɵtextInterpolateV":Dd,"ɵɵembeddedViewStart":Jl,"ɵɵembeddedViewEnd":Ql,"ɵɵi18n":dp,"ɵɵi18nAttributes":cp,"ɵɵi18nExp":gp,"ɵɵi18nStart":np,"ɵɵi18nEnd":sp,"ɵɵi18nApply":pp,"ɵɵi18nPostprocess":ip,"ɵɵi18nLocalize":wp,"ɵɵresolveWindow":Tn,"ɵɵresolveDocument":On,"ɵɵresolveBody":wn,"ɵɵsetComponentScope":Mt,"ɵɵsetNgModuleScope":Gt,"ɵɵsanitizeHtml":Or,"ɵɵsanitizeStyle":wr,"ɵɵdefaultStyleSanitizer":Ar,"ɵɵsanitizeResourceUrl":Ir,"ɵɵsanitizeScript":Nr,"ɵɵsanitizeUrl":Sr,"ɵɵsanitizeUrlOrResourceUrl":Rr}))(),Nb=[],Cb=[];let Rb=!1;function Ab(){if(!Rb){Rb=!0;try{for(let t=Cb.length-1;t>=0;t--){const{moduleType:e,ngModule:n}=Cb[t];n.declarations&&n.declarations.every(kb)&&(Cb.splice(t,1),qb(e,n))}}finally{Rb=!1}}}function kb(t){return Array.isArray(t)?t.every(kb):!!V(t)}function Eb(t,e={}){Lb(t,e),function(t,e){Cb.push({moduleType:t,ngModule:e})}(t,e)}function Lb(t,e,n=!1){const a=pt(e.declarations||Nb);let r=null;Object.defineProperty(t,At,{configurable:!0,get:()=>(null===r&&(r=W().compileNgModule(Ib,`ng:///${t.name}/ngModuleDef.js`,{type:t,bootstrap:pt(e.bootstrap||Nb).map(V),declarations:a.map(V),imports:pt(e.imports||Nb).map(V).map(Gb),exports:pt(e.exports||Nb).map(V).map(Gb),emitInline:!0,schemas:e.schemas?pt(e.schemas):null,id:e.id||null})),r)});let i=null;Object.defineProperty(t,q,{get:()=>{if(null===i){const n={name:t.name,type:t,deps:go(t),providers:e.providers||Nb,imports:[(e.imports||Nb).map(V),(e.exports||Nb).map(V)]};i=W().compileInjector(Ib,`ng:///${t.name}/ngInjectorDef.js`,n)}return i},configurable:!1})}let Db=new Map,Pb=new Map;function Mb(){Db=new Map,Pb=new Map,Cb.length=0}function qb(t,e){const n=pt(e.declarations||Nb),a=Fb(t);n.forEach(e=>{e.hasOwnProperty(Nt)?jb(Ht(e),a):e.hasOwnProperty(Ct)||e.hasOwnProperty(Rt)||(e.ngSelectorScope=t)})}function jb(t,e){t.directiveDefs=()=>Array.from(e.compilation.directives).map(t=>t.hasOwnProperty(Nt)?Ht(t):Ut(t)).filter(t=>!!t),t.pipeDefs=()=>Array.from(e.compilation.pipes).map(t=>Wt(t)),t.schemas=e.schemas,t.tView=null}function Fb(t,e){if(!Vb(t))throw new Error(`${t.name} does not have an ngModuleDef`);const n=$t(t);if(null!==n.transitiveCompileScopes)return n.transitiveCompileScopes;const a={schemas:n.schemas||null,compilation:{directives:new Set,pipes:new Set},exported:{directives:new Set,pipes:new Set}};return In(n.declarations).forEach(t=>{Wt(t)?a.compilation.pipes.add(t):a.compilation.directives.add(t)}),In(n.imports).forEach(t=>{const n=t;if(!Vb(n))throw new Error(`Importing ${n.name} which does not have an ngModuleDef`);e&&e(n);const r=Fb(n,e);r.exported.directives.forEach(t=>a.compilation.directives.add(t)),r.exported.pipes.forEach(t=>a.compilation.pipes.add(t))}),In(n.exports).forEach(t=>{const n=t;if(Vb(n)){const t=Fb(n,e);t.exported.directives.forEach(t=>{a.compilation.directives.add(t),a.exported.directives.add(t)}),t.exported.pipes.forEach(t=>{a.compilation.pipes.add(t),a.exported.pipes.add(t)})}else Wt(n)?a.exported.pipes.add(n):a.exported.directives.add(n)}),n.transitiveCompileScopes=a,a}function Gb(t){return function(t){return void 0!==t.ngModule}(t)?t.ngModule:t}function Vb(t){return!!$t(t)}function zb(t,e){let n=null;!function(t,e){Cu(e)&&(Iu.set(t,e),Nu.add(t))}(t,e),Object.defineProperty(t,Nt,{get:()=>{const a=W();if(null===n){if(Cu(e)){const n=[`Component '${t.name}' is not resolved:`];throw e.templateUrl&&n.push(` - templateUrl: ${e.templateUrl}`),e.styleUrls&&e.styleUrls.length&&n.push(` - styleUrls: ${JSON.stringify(e.styleUrls)}`),n.push("Did you run and wait for 'resolveComponentResources()'?"),new Error(n.join("\n"))}const r=e.templateUrl||`ng:///${t.name}/template.html`,i=Object.assign({},Hb(t,e),{typeSourceSpan:a.createParseSourceSpan("Component",t.name,r),template:e.template||"",preserveWhitespaces:e.preserveWhitespaces||!1,styles:e.styles||It,animations:e.animations,directives:[],changeDetection:e.changeDetection,pipes:new Map,encapsulation:e.encapsulation||Ot.Emulated,interpolation:e.interpolation,viewProviders:e.viewProviders||null});if(i.usesInheritance&&Ub(t),n=a.compileComponent(Ib,r,i),Ab(),void 0!==t.ngSelectorScope){const e=Fb(t.ngSelectorScope);jb(n,e)}}return n},configurable:!1}),bo(t)}function Bb(t,e){let n=null;Object.defineProperty(t,Ct,{get:()=>{if(null===n){const a=t&&t.name,r=`ng:///${a}/ngDirectiveDef.js`,i=W(),s=Hb(t,e);s.typeSourceSpan=i.createParseSourceSpan("Directive",a,r),s.usesInheritance&&Ub(t),n=i.compileDirective(Ib,r,s)}return n},configurable:!1}),bo(t)}function Yb(t){return Object.getPrototypeOf(t.prototype)===Object.prototype}function Hb(t,e){const n=ho().ownPropMetadata(t);return{name:t.name,type:t,typeArgumentCount:0,selector:e.selector,deps:go(t),host:e.host||St,propMetadata:n,inputs:e.inputs||It,outputs:e.outputs||It,queries:Zb(t,n,Jb),lifecycle:{usesOnChanges:t.prototype.hasOwnProperty("ngOnChanges")},typeSourceSpan:null,usesInheritance:!Yb(t),exportAs:(a=e.exportAs,void 0===a?null:a.split(",").map(t=>t.trim())),providers:e.providers||null,viewQueries:Zb(t,n,Qb)};var a}function Ub(t){const e=Object.prototype;let n=Object.getPrototypeOf(t);for(;n&&n!==e;){if(!Ut(n)&&!Ht(n)&&!Kt(n)){const t=Kb(n);t&&Wb(n,t)}n=Object.getPrototypeOf(n)}}function Wb(t,e){let n=null;Object.defineProperty(t,Et,{get:()=>{if(null===n){const a=`ng://${t&&t.name}/ngBaseDef.js`,r=W();n=r.compileBase(Ib,a,e)}return n},configurable:!1})}function Kb(t){const e=ho().ownPropMetadata(t),n=Zb(t,e,Qb),a=Zb(t,e,Jb);let r,i,s=!1;for(const o in e)e[o].forEach(t=>{const e=t.ngMetadataName;"Input"===e?(r=r||{},r[o]=t.bindingPropertyName?[t.bindingPropertyName,o]:o):"Output"===e?(i=i||{},i[o]=t.bindingPropertyName||o):"HostBinding"!==e&&"HostListener"!==e||(s=!0)});return r||i||n.length||a.length||s?{name:t.name,type:t,inputs:r,outputs:i,viewQueries:n,queries:a,propMetadata:e}:null}function $b(t,e){return{propertyName:t,predicate:(n=e.selector,"string"==typeof n?n.split(",").map(t=>t.trim()):V(n)),descendants:e.descendants,first:e.first,read:e.read?e.read:null,static:!!e.static};var n}function Zb(t,e,n){const a=[];for(const r in e)if(e.hasOwnProperty(r)){const i=e[r];i.forEach(e=>{if(n(e)){if(!e.selector)throw new Error(`Can't construct a query for the property "${r}" of `+`"${xn(t)}" since the query selector wasn't defined.`);if(i.some(Xb))throw new Error("Cannot combine @Input decorators with query decorators");a.push($b(r,e))}})}return a}function Jb(t){const e=t.ngMetadataName;return"ContentChild"===e||"ContentChildren"===e}function Qb(t){const e=t.ngMetadataName;return"ViewChild"===e||"ViewChildren"===e}function Xb(t){return"Input"===t.ngMetadataName}function tm(t,e){let n=null;Object.defineProperty(t,Rt,{get:()=>{if(null===n){const a=t.name;n=W().compilePipe(Ib,`ng:///${a}/ngPipeDef.js`,{type:t,typeArgumentCount:0,name:a,deps:go(t),pipeName:e.name,pure:void 0===e.pure||e.pure})}return n},configurable:!1})}const em=y("Directive",(t={})=>t,void 0,void 0,(t,e)=>fm(t,e)),nm=y("Component",(t={})=>Object.assign({changeDetection:xt.Default},t),em,void 0,(t,e)=>cm(t,e)),am=y("Pipe",t=>Object.assign({pure:!0},t),void 0,void 0,(t,e)=>hm(t,e)),rm=_("Input",t=>({bindingPropertyName:t})),im=_("Output",t=>({bindingPropertyName:t})),sm=_("HostBinding",t=>({hostPropertyName:t})),om=_("HostListener",(t,e)=>({eventName:t,args:e})),um=zb,lm=Bb,dm=tm,cm=Wc,fm=Wc,hm=Wc,gm=y("NgModule",t=>t,void 0,void 0,(t,e)=>bm(t,e)),pm=Eb,bm=function(t,e){let n=e&&e.imports||[];e&&e.exports&&(n=[...n,e.exports]),t.ngInjectorDef=L({factory:wo(t,{useClass:t}),providers:e&&e.providers,imports:n})},mm=new K("Application Initializer");class ym{constructor(t){this.appInits=t,this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}runInitializers(){if(this.initialized)return;const t=[],e=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let n=0;n<this.appInits.length;n++){const e=this.appInits[n]();td(e)&&t.push(e)}Promise.all(t).then(()=>{e()}).catch(t=>{this.reject(t)}),0===t.length&&e(),this.initialized=!0}}const vm=new K("AppId");function xm(){return`${Tm()}${Tm()}${Tm()}`}const _m={provide:vm,useFactory:xm,deps:[]};function Tm(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Om=new K("Platform Initializer"),wm=new K("Platform ID"),Sm=new K("appBootstrapListener"),Im=new K("Application Packages Root URL");class Nm{log(t){console.log(t)}warn(t){console.warn(t)}}const Cm=new K("LocaleId"),Rm=new K("Translations"),Am=new K("TranslationsFormat"),km=function(){var t={Error:0,Warning:1,Ignore:2};return t[t.Error]="Error",t[t.Warning]="Warning",t[t.Ignore]="Ignore",t}(),Em=!0,Lm=!1;class Dm{constructor(t,e){this.ngModuleFactory=t,this.componentFactories=e}}function Pm(){throw new Error("Runtime compiler is not loaded")}const Mm=function(t){return new Dp(t)},qm=Pm,jm=function(t){return Promise.resolve(Mm(t))},Fm=Pm,Gm=function(t){const e=Mm(t),n=In($t(t).declarations).reduce((t,e)=>{const n=Ht(e);return n&&t.push(new Ig(n)),t},[]);return new Dm(e,n)},Vm=Pm,zm=function(t){return Promise.resolve(Gm(t))},Bm=Pm;class Ym{constructor(){this.compileModuleSync=qm,this.compileModuleAsync=Fm,this.compileModuleAndAllComponentsSync=Vm,this.compileModuleAndAllComponentsAsync=Bm}clearCache(){}clearCacheFor(t){}getModuleId(t){}}const Hm=new K("compilerOptions");class Um{}let Wm,Km;function $m(){const t=U.wtf;return!(!t||(Wm=t.trace,!Wm)||(Km=Wm.events,0))}function Zm(t,e=null){return Km.createScope(t,e)}function Jm(t,e){return Wm.leaveScope(t,e),e}function Qm(t,e){return Wm.beginTimeRange(t,e)}function Xm(t){Wm.endTimeRange(t)}const ty=$m();function ey(t,e){return null}const ny=ty?Zm:(t,e)=>ey,ay=ty?Jm:(t,e)=>e,ry=ty?Qm:(t,e)=>null,iy=ty?Xm:t=>null,sy=(()=>Promise.resolve(0))();function oy(t){"undefined"==typeof Zone?sy.then(()=>{t&&t.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",t)}class uy{constructor({enableLongStackTrace:t=!1}){if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new tb(!1),this.onMicrotaskEmpty=new tb(!1),this.onStable=new tb(!1),this.onError=new tb(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");var e;Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),Zone.TaskTrackingZoneSpec&&(this._inner=this._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),(e=this)._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,n,a,r,i,s)=>{try{return fy(e),t.invokeTask(a,r,i,s)}finally{hy(e)}},onInvoke:(t,n,a,r,i,s,o)=>{try{return fy(e),t.invoke(a,r,i,s,o)}finally{hy(e)}},onHasTask:(t,n,a,r)=>{t.hasTask(a,r),n===a&&("microTask"==r.change?(e.hasPendingMicrotasks=r.microTask,cy(e)):"macroTask"==r.change&&(e.hasPendingMacrotasks=r.macroTask))},onHandleError:(t,n,a,r)=>(t.handleError(a,r),e.runOutsideAngular(()=>e.onError.emit(r)),!1)})}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!uy.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(uy.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,e,n){return this._inner.run(t,e,n)}runTask(t,e,n,a){const r=this._inner,i=r.scheduleEventTask("NgZoneEvent: "+a,t,dy,ly,ly);try{return r.runTask(i,e,n)}finally{r.cancelTask(i)}}runGuarded(t,e,n){return this._inner.runGuarded(t,e,n)}runOutsideAngular(t){return this._outer.run(t)}}function ly(){}const dy={};function cy(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(()=>t.onStable.emit(null))}finally{t.isStable=!0}}}function fy(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function hy(t){t._nesting--,cy(t)}class gy{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new tb,this.onMicrotaskEmpty=new tb,this.onStable=new tb,this.onError=new tb}run(t){return t()}runGuarded(t){return t()}runOutsideAngular(t){return t()}runTask(t){return t()}}class py{constructor(t){this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{uy.assertNotInAngularZone(),oy(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())oy(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(e=>!e.updateCb||!e.updateCb(t)||(clearTimeout(e.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,e,n){let a=-1;e&&e>0&&(a=setTimeout(()=>{this._callbacks=this._callbacks.filter(t=>t.timeoutId!==a),t(this._didWork,this.getPendingTasks())},e)),this._callbacks.push({doneCb:t,timeoutId:a,updateCb:n})}whenStable(t,e,n){if(n&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');this.addCallback(t,e,n),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(t,e,n){return[]}}class by{constructor(){this._applications=new Map,xy.addToWindow(this)}registerApplication(t,e){this._applications.set(t,e)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,e=!0){return xy.findTestabilityInTree(this,t,e)}}class my{addToWindow(t){}findTestabilityInTree(t,e,n){return null}}function yy(t){xy=t}let vy,xy=new my;function _y(t,e,n){const a=new Dp(n);if(0===Iu.size)return Promise.resolve(a);const r=function(t){const e=[];return t.forEach(t=>t&&e.push(...t)),e}(t.get(Hm,[]).concat(e).map(t=>t.providers));if(0===r.length)return Promise.resolve(a);const i=W(),s=Bo.create({providers:r}).get(i.ResourceLoader);return Su(t=>Promise.resolve(s.get(t))).then(()=>a)}function Ty(t){return t.isBoundToModule}const Oy=new K("AllowMultipleToken");class wy{constructor(t,e){this.name=t,this.token=e}}function Sy(t){if(vy&&!vy.destroyed&&!vy.injector.get(Oy,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");vy=t.get(Ay);const e=t.get(Om,null);return e&&e.forEach(t=>t()),vy}function Iy(t,e,n=[]){const a=`Platform: ${e}`,r=new K(a);return(e=[])=>{let i=Ry();if(!i||i.injector.get(Oy,!1))if(t)t(n.concat(e).concat({provide:r,useValue:!0}));else{const t=n.concat(e).concat({provide:r,useValue:!0});Sy(Bo.create({providers:t,name:a}))}return Ny(r)}}function Ny(t){const e=Ry();if(!e)throw new Error("No platform exists!");if(!e.injector.get(t,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return e}function Cy(){vy&&!vy.destroyed&&vy.destroy()}function Ry(){return vy&&!vy.destroyed?vy:null}class Ay{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,e){const n=function(t){let e;return e="noop"===t?new gy:("zone.js"===t?void 0:t)||new uy({enableLongStackTrace:Wa()}),e}(e?e.ngZone:void 0),a=[{provide:uy,useValue:n}];return n.run(()=>{const e=Bo.create({providers:a,parent:this.injector,name:t.moduleType.name}),r=t.create(e),i=r.injector.get(Da,null);if(!i)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return Lm&&Ip(r.injector.get(Cm,Dg)||Dg),r.onDestroy(()=>Ly(this._modules,r)),n.runOutsideAngular(()=>n.onError.subscribe({next:t=>{i.handleError(t)}})),function(t,e,n){try{const a=n();return td(a)?a.catch(n=>{throw e.runOutsideAngular(()=>t.handleError(n)),n}):a}catch(a){throw e.runOutsideAngular(()=>t.handleError(a)),a}}(i,n,()=>{const t=r.injector.get(ym);return t.runInitializers(),t.donePromise.then(()=>(this._moduleDoBootstrap(r),r))})})}bootstrapModule(t,e=[]){const n=ky({},e);return function(t,e,n){return t.get(Um).createCompiler([e]).compileModuleAsync(n)}(this.injector,n,t).then(t=>this.bootstrapModuleFactory(t,n))}_moduleDoBootstrap(t){const e=t.injector.get(Ey);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(t=>e.bootstrap(t));else{if(!t.instance.ngDoBootstrap)throw new Error(`The module ${j(t.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. `+"Please define one of these.");t.instance.ngDoBootstrap(e)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(t=>t.destroy()),this._destroyListeners.forEach(t=>t()),this._destroyed=!0}get destroyed(){return this._destroyed}}function ky(t,e){return Array.isArray(e)?e.reduce(ky,t):Object.assign({},t,e)}let Ey=(()=>{class t{constructor(t,e,n,a,r,o){this._zone=t,this._console=e,this._injector=n,this._exceptionHandler=a,this._componentFactoryResolver=r,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=Wa(),this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const l=new i.a(t=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{t.next(this._stable),t.complete()})}),d=new i.a(t=>{let e;this._zone.runOutsideAngular(()=>{e=this._zone.onStable.subscribe(()=>{uy.assertNotInAngularZone(),oy(()=>{this._stable||this._zone.hasPendingMacrotasks||this._zone.hasPendingMicrotasks||(this._stable=!0,t.next(!0))})})});const n=this._zone.onUnstable.subscribe(()=>{uy.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{t.next(!1)}))});return()=>{e.unsubscribe(),n.unsubscribe()}});this.isStable=Object(s.a)(l,d.pipe(t=>{return u()((e=g,function(t){let n;n="function"==typeof e?e:function(){return e};const a=Object.create(t,f);return a.source=t,a.subjectFactory=n,a})(t));var e}))}bootstrap(t,e){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let n;n=t instanceof Gc?t:this._componentFactoryResolver.resolveComponentFactory(t),this.componentTypes.push(n.componentType);const a=n instanceof Uc?null:this._injector.get(ft),r=n.create(Bo.NULL,[],e||n.selector,a);r.onDestroy(()=>{this._unloadComponent(r)});const i=r.injector.get(py,null);return i&&r.injector.get(by).registerApplication(r.location.nativeElement,i),this._loadComponent(r),Wa()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),r}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");const e=t._tickScope();try{this._runningTick=!0;for(let t of this._views)t.detectChanges();if(this._enforceNoNewChanges)for(let t of this._views)t.checkNoChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1,ay(e)}}attachView(t){const e=t;this._views.push(e),e.attachToAppRef(this)}detachView(t){const e=t;Ly(this._views,e),e.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(Sm,[]).concat(this._bootstrapListeners).forEach(e=>e(t))}_unloadComponent(t){this.detachView(t.hostView),Ly(this.components,t)}ngOnDestroy(){this._views.slice().forEach(t=>t.destroy())}get viewCount(){return this._views.length}}return t._tickScope=ny("ApplicationRef#tick()"),t})();function Ly(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}class Dy{}function Py(t){const e=kp(t);if(!e)throw jy(t);return e}function My(t){const e=kp(t);if(!e)throw jy(t);return new Dp(e)}const qy=Py;function jy(t){return new Error(`No module with ID ${t} loaded`)}class Fy{}const Gy={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"};class Vy{constructor(t,e){this._compiler=t,this._config=e||Gy}load(t){return!Lm&&this._compiler instanceof Ym?this.loadFactory(t):this.loadAndCompile(t)}loadAndCompile(t){let[e,a]=t.split("#");return void 0===a&&(a="default"),n("crnd")(e).then(t=>t[a]).then(t=>zy(t,e,a)).then(t=>this._compiler.compileModuleAsync(t))}loadFactory(t){let[e,a]=t.split("#"),r="NgFactory";return void 0===a&&(a="default",r=""),n("crnd")(this._config.factoryPathPrefix+e+this._config.factoryPathSuffix).then(t=>t[a+r]).then(t=>zy(t,e,a))}}function zy(t,e,n){if(!t)throw new Error(`Cannot find '${n}' in '${e}'`);return t}class By extends Xs{}class Yy extends By{}class Hy{constructor(t,e){this.name=t,this.callback=e}}class Uy{constructor(t,e,n){this.listeners=[],this.parent=null,this._debugContext=n,this.nativeNode=t,e&&e instanceof Wy&&e.addChild(this)}get injector(){return this._debugContext.injector}get componentInstance(){return this._debugContext.component}get context(){return this._debugContext.context}get references(){return this._debugContext.references}get providerTokens(){return this._debugContext.providerTokens}}class Wy extends Uy{constructor(t,e,n){super(t,e,n),this.properties={},this.attributes={},this.classes={},this.styles={},this.childNodes=[],this.nativeElement=t}addChild(t){t&&(this.childNodes.push(t),t.parent=this)}removeChild(t){const e=this.childNodes.indexOf(t);-1!==e&&(t.parent=null,this.childNodes.splice(e,1))}insertChildrenAfter(t,e){const n=this.childNodes.indexOf(t);-1!==n&&(this.childNodes.splice(n+1,0,...e),e.forEach(e=>{e.parent&&e.parent.removeChild(e),t.parent=this}))}insertBefore(t,e){const n=this.childNodes.indexOf(t);-1===n?this.addChild(e):(e.parent&&e.parent.removeChild(e),e.parent=this,this.childNodes.splice(n,0,e))}query(t){return this.queryAll(t)[0]||null}queryAll(t){const e=[];return function t(e,n,a){e.childNodes.forEach(e=>{e instanceof Wy&&(n(e)&&a.push(e),t(e,n,a))})}(this,t,e),e}queryAllNodes(t){const e=[];return function t(e,n,a){e instanceof Wy&&e.childNodes.forEach(e=>{n(e)&&a.push(e),e instanceof Wy&&t(e,n,a)})}(this,t,e),e}get children(){return this.childNodes.filter(t=>t instanceof Wy)}triggerEventHandler(t,e){this.listeners.forEach(n=>{n.name==t&&n.callback(e)})}}function Ky(t){return t.map(t=>t.nativeElement)}class $y{constructor(t){this.nativeNode=t}get parent(){const t=this.nativeNode.parentNode;return t?new Zy(t):null}get injector(){return ic(this.nativeNode)}get componentInstance(){const t=this.nativeNode;return t&&(ec(t)||ac(t))}get context(){return ec(this.nativeNode)||nc(this.nativeNode)}get listeners(){return cc(this.nativeNode).filter(dc)}get references(){return function(t){const e=oc(t);return void 0===e.localRefs&&(e.localRefs=function(t,e){const n=t[1].data[e];if(n&&n.localNames){const e={};let a=n.index+1;for(let r=0;r<n.localNames.length;r+=2)e[n.localNames[r]]=t[a],a++;return e}return null}(e.lView,e.nodeIndex)),e.localRefs||{}}(this.nativeNode)}get providerTokens(){return function(t){const e=oc(t,!1);if(!e)return[];const n=e.lView[1],a=n.data[e.nodeIndex],r=[],i=a.directiveEnd;for(let o=65535&a.providerIndexes;o<i;o++){let t=n.data[o];void 0!==(s=t).type&&void 0!==s.template&&void 0!==s.declaredInputs&&(t=t.type),r.push(t)}var s;return r}(this.nativeNode)}}class Zy extends $y{constructor(t){super(t)}get nativeElement(){return this.nativeNode.nodeType==Node.ELEMENT_NODE?this.nativeNode:null}get name(){return this.nativeElement.nodeName}get properties(){const t=oc(this.nativeNode),e=t.lView,n=e[1].data,a=n[t.nodeIndex],r=function(t,e,n){const a={};let r=function(t,e){let n=t-1,a=e[n];for(;"string"==typeof a&&!Sn(a);)a=e[--n];return n+1}(t.propertyMetadataStartIndex,n);for(;r<t.propertyMetadataEndIndex;){let t,i=n[r];for(;!Sn(i);)t=(t||"")+vn(e[r])+n[r],i=n[++r];t=void 0===t?e[r]:t+=e[r];const s=i.split("�"),o=s[0];o&&(a[o]=s[1]&&s[2]?s[1]+t+s[2]:t),r++}return a}(a,e,n),i=function(t,e,n){const a={};let r=t.directiveEnd,i=n[r];for(;"string"==typeof i;)a[i.split("�")[0]]=e[r],i=n[++r];return a}(a,e,n),s=function(t){const e=t.classes;let n="";for(const a of Object.keys(e))e[a]&&(n=n?n+` ${a}`:a);return n}(this),o=Object.assign({},r,i);return s&&(o.className=o.className?o.className+` ${s}`:s),o}get attributes(){const t={},e=this.nativeElement;if(!e)return t;const n=oc(e),a=n.lView[1].data[n.nodeIndex].attrs,r=[];if(a){let e=0;for(;e<a.length;){const n=a[e];if("string"!=typeof n)break;t[n]=a[e+1],r.push(n.toLowerCase()),e+=2}}const i=e.attributes;for(let s=0;s<i.length;s++){const e=i[s];-1===r.indexOf(e.name)&&(t[e.name]=e.value)}return t}get styles(){return Jy(this.nativeElement,!1)}get classes(){return Jy(this.nativeElement,!0)}get childNodes(){const t=this.nativeNode.childNodes,e=[];for(let n=0;n<t.length;n++)e.push(av(t[n]));return e}get children(){const t=this.nativeElement;if(!t)return[];const e=t.children,n=[];for(let a=0;a<e.length;a++)n.push(av(e[a]));return n}query(t){return this.queryAll(t)[0]||null}queryAll(t){const e=[];return Qy(this,t,e,!0),e}queryAllNodes(t){const e=[];return Qy(this,t,e,!1),e}triggerEventHandler(t,e){this.listeners.forEach(n=>{n.name===t&&n.callback(e)})}}function Jy(t,e){if(t){const n=lc(t),a=n.lView,r=a[1].data[n.nodeIndex];return e?Un(r.classes)?new Ti(r.classes,a,!0).values:_i(r.classes):Un(r.styles)?new Ti(r.styles,a,!1).values:_i(r.styles)}return{}}function Qy(t,e,n,a){const r=oc(t.nativeNode);Xy(r.lView[1].data[r.nodeIndex],r.lView,e,n,a,t.nativeNode)}function Xy(t,e,n,a,r,i){const s=me(t,e);if(3===t.type||4===t.type){if(ev(s,n,a,r,i),Xt(t)){const s=xe(t.index,e);s&&s[1].firstChild&&Xy(s[1].firstChild,s,n,a,r,i)}else t.child&&Xy(t.child,e,n,a,r,i),s&&function t(e,n,a,r){const i=e.childNodes,s=i.length;for(let o=0;o<s;o++){const e=i[o],s=rv(e);s&&(r&&s instanceof Zy&&n(s)&&-1===a.indexOf(s)?a.push(s):!r&&n(s)&&-1===a.indexOf(s)&&a.push(s),t(e,n,a,r))}}(s,n,a,r);const o=e[t.index];Jt(o)&&tv(o,n,a,r,i)}else if(0===t.type){const s=e[t.index];ev(s[7],n,a,r,i),tv(s,n,a,r,i)}else if(1===t.type){const s=da(e),o=s[6].projection[t.projection];if(Array.isArray(o))for(let t of o)ev(t,n,a,r,i);else if(o){const t=s[3];Xy(t[1].data[o.index],t,n,a,r,i)}}else t.child&&Xy(t.child,e,n,a,r,i);if(i!==s){const s=2&t.flags?t.projectionNext:t.next;s&&Xy(s,e,n,a,r,i)}}function tv(t,e,n,a,r){for(let i=9;i<t.length;i++){const s=t[i];Xy(s[1].node,s,e,n,a,r)}}function ev(t,e,n,a,r){if(r!==t){const r=rv(t);if(!r)return;a&&r instanceof Zy&&e(r)&&-1===n.indexOf(r)?n.push(r):!a&&e(r)&&-1===n.indexOf(r)&&n.push(r)}}const nv=new Map;function av(t){return t instanceof Node?(t.hasOwnProperty("__ng_debug__")||(t.__ng_debug__=t.nodeType==Node.ELEMENT_NODE?new Zy(t):new $y(t)),t.__ng_debug__):null}const rv=function(t){return nv.get(t)||null};function iv(t){nv.set(t.nativeNode,t)}const sv=Uy,ov=Wy,uv=Iy(null,"core",[{provide:wm,useValue:"unknown"},{provide:Ay,deps:[Bo]},{provide:by,deps:[]},{provide:Nm,deps:[]}]);function lv(){return Tf}function dv(){return Of}function cv(t){return t?(Lm&&Ip(t),t):Dg}const fv=[{provide:Ey,useClass:Ey,deps:[uy,Nm,Bo,Da,Yc,ym]},{provide:Sg,deps:[uy],useFactory:hv},{provide:ym,useClass:ym,deps:[[new O,mm]]},{provide:Ym,useClass:Ym,deps:[]},_m,{provide:vf,useFactory:lv,deps:[]},{provide:xf,useFactory:dv,deps:[]},{provide:Cm,useFactory:cv,deps:[[new T(Cm),new O,new S]]}];function hv(t){let e=[];return t.onStable.subscribe(()=>{for(;e.length;)e.pop()()}),function(t){e.push(t)}}class gv{constructor(t){}}function pv(t,e,n,a,r,i){t|=1;const{matchedQueries:s,references:o,matchedQueryIds:u}=sh(e);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:t,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:s,matchedQueryIds:u,references:o,ngContentIndex:n,childCount:a,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:i?dh(i):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:r||zf},provider:null,text:null,query:null,ngContent:null}}function bv(t,e,n,a,r,i,s=[],o,u,l,d,c){l||(l=zf);const{matchedQueries:f,references:h,matchedQueryIds:g}=sh(n);let p=null,b=null;i&&([p,b]=mh(i)),o=o||[];const m=new Array(o.length);for(let x=0;x<o.length;x++){const[t,e,n]=o[x],[a,r]=mh(e);let i=void 0,s=void 0;switch(15&t){case 4:s=n;break;case 1:case 8:i=n}m[x]={flags:t,ns:a,name:r,nonMinifiedName:r,securityContext:i,suffix:s}}u=u||[];const y=new Array(u.length);for(let x=0;x<u.length;x++){const[t,e]=u[x];y[x]={type:0,target:t,eventName:e,propName:null}}const v=(s=s||[]).map(([t,e])=>{const[n,a]=mh(t);return[n,a,e]});return c=function(t){if(t&&"$$undefined"===t.id){const e=null!=t.encapsulation&&t.encapsulation!==Ot.None||t.styles.length||Object.keys(t.data).length;t.id=e?`c${Wf++}`:"$$empty"}return t&&"$$empty"===t.id&&(t=null),t||null}(c),d&&(e|=33554432),{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e|=1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:g,references:h,ngContentIndex:a,childCount:r,bindings:m,bindingFlags:yh(m),outputs:y,element:{ns:p,name:b,attrs:v,template:null,componentProvider:null,componentView:d||null,componentRendererType:c,publicProviders:null,allProviders:null,handleEvent:l||zf},provider:null,text:null,query:null,ngContent:null}}function mv(t,e,n){const a=n.element,r=t.root.selectorOrNode,i=t.renderer;let s;if(t.parent||!r){s=a.name?i.createElement(a.name,a.ns):i.createComment("");const r=uh(t,e,n);r&&i.appendChild(r,s)}else s=i.selectRootElement(r,!!a.componentRendererType&&a.componentRendererType.encapsulation===Ot.ShadowDom);if(a.attrs)for(let o=0;o<a.attrs.length;o++){const[t,e,n]=a.attrs[o];i.setAttribute(s,e,n,t)}return s}function yv(t,e,n,a){for(let s=0;s<n.outputs.length;s++){const o=n.outputs[s],u=vv(t,n.nodeIndex,(i=o.eventName,(r=o.target)?`${r}:${i}`:i));let l=o.target,d=t;"component"===o.target&&(l=null,d=e);const c=d.renderer.listen(l||a,o.eventName,u);t.disposables[n.outputIndex+s]=c}var r,i}function vv(t,e,n){return a=>Xf(t,e,n,a)}function xv(t,e,n,a){if(!$f(t,e,n,a))return!1;const r=e.bindings[n],i=Mf(t,e.nodeIndex),s=i.renderElement,o=r.name;switch(15&r.flags){case 1:!function(t,e,n,a,r,i){const s=e.securityContext;let o=s?t.root.sanitizer.sanitize(s,i):i;o=null!=o?o.toString():null;const u=t.renderer;null!=i?u.setAttribute(n,r,o,a):u.removeAttribute(n,r,a)}(t,r,s,r.ns,o,a);break;case 2:!function(t,e,n,a){const r=t.renderer;a?r.addClass(e,n):r.removeClass(e,n)}(t,s,o,a);break;case 4:!function(t,e,n,a,r){let i=t.root.sanitizer.sanitize(yr.STYLE,r);if(null!=i){i=i.toString();const t=e.suffix;null!=t&&(i+=t)}else i=null;const s=t.renderer;null!=i?s.setStyle(n,a,i):s.removeStyle(n,a)}(t,r,s,o,a);break;case 8:!function(t,e,n,a,r){const i=e.securityContext;let s=i?t.root.sanitizer.sanitize(i,r):r;t.renderer.setProperty(n,a,s)}(33554432&e.flags&&32&r.flags?i.componentView:t,r,s,o,a)}return!0}function _v(t,e,n){let a=[];for(let r in n)a.push({propName:r,bindingType:n[r]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:e,filterId:ih(e),bindings:a},ngContent:null}}function Tv(t){const e=t.def.nodeMatchedQueries;for(;t.parent&&rh(t);){let n=t.parentNodeDef;t=t.parent;const a=n.nodeIndex+n.childCount;for(let r=0;r<=a;r++){const a=t.def.nodes[r];67108864&a.flags&&536870912&a.flags&&(a.query.filterId&e)===a.query.filterId&&Ff(t,r).setDirty(),!(1&a.flags&&r+a.childCount<n.nodeIndex)&&67108864&a.childFlags&&536870912&a.childFlags||(r+=a.childCount)}}if(134217728&t.def.nodeFlags)for(let n=0;n<t.def.nodes.length;n++){const e=t.def.nodes[n];134217728&e.flags&&536870912&e.flags&&Ff(t,n).setDirty(),n+=e.childCount}}function Ov(t,e){const n=Ff(t,e.nodeIndex);if(!n.dirty)return;let a,r=void 0;if(67108864&e.flags){const n=e.parent.parent;r=wv(t,n.nodeIndex,n.nodeIndex+n.childCount,e.query,[]),a=qf(t,e.parent.nodeIndex).instance}else 134217728&e.flags&&(r=wv(t,0,t.def.nodes.length-1,e.query,[]),a=t.component);n.reset(r);const i=e.query.bindings;let s=!1;for(let o=0;o<i.length;o++){const t=i[o];let e;switch(t.bindingType){case 0:e=n.first;break;case 1:e=n,s=!0}a[t.propName]=e}s&&n.notifyOnChanges()}function wv(t,e,n,a,r){for(let i=e;i<=n;i++){const e=t.def.nodes[i],n=e.matchedQueries[a.id];if(null!=n&&r.push(Sv(t,e,n)),1&e.flags&&e.element.template&&(e.element.template.nodeMatchedQueries&a.filterId)===a.filterId){const n=Mf(t,i);if((e.childMatchedQueries&a.filterId)===a.filterId&&(wv(t,i+1,i+e.childCount,a,r),i+=e.childCount),16777216&e.flags){const t=n.viewContainer._embeddedViews;for(let e=0;e<t.length;e++){const i=t[e],s=th(i);s&&s===n&&wv(i,0,i.def.nodes.length-1,a,r)}}const s=n.template._projectedViews;if(s)for(let t=0;t<s.length;t++){const e=s[t];wv(e,0,e.def.nodes.length-1,a,r)}}(e.childMatchedQueries&a.filterId)!==a.filterId&&(i+=e.childCount)}return r}function Sv(t,e,n){if(null!=n)switch(n){case 1:return Mf(t,e.nodeIndex).renderElement;case 0:return new Kc(Mf(t,e.nodeIndex).renderElement);case 2:return Mf(t,e.nodeIndex).template;case 3:return Mf(t,e.nodeIndex).viewContainer;case 4:return qf(t,e.nodeIndex).instance}}function Iv(t,e){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:e}}}function Nv(t,e,n){const a=uh(t,e,n);a&&hh(t,n.ngContent.index,1,a,null,void 0)}function Cv(t,e){return kv(128,t,new Array(e+1))}function Rv(t,e){return kv(32,t,new Array(e))}function Av(t,e){const n=Object.keys(e),a=n.length,r=new Array(a);for(let i=0;i<a;i++){const t=n[i];r[e[t]]=t}return kv(64,t,r)}function kv(t,e,n){const a=new Array(n.length);for(let r=0;r<n.length;r++){const t=n[r];a[r]={flags:8,name:t,ns:null,nonMinifiedName:t,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:a,bindingFlags:yh(a),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Ev(t,e,n){const a=new Array(n.length-1);for(let r=1;r<n.length;r++)a[r-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[r]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:a,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function Lv(t,e,n){let a;const r=t.renderer;a=r.createText(n.text.prefix);const i=uh(t,e,n);return i&&r.appendChild(i,a),{renderText:a}}function Dv(t,e){return(null!=t?t.toString():"")+e.suffix}function Pv(t,e,n,a){let r=0,i=0,s=0,o=0,u=0,l=null,d=null,c=!1,f=!1,h=null;for(let g=0;g<e.length;g++){const t=e[g];if(t.nodeIndex=g,t.parent=l,t.bindingIndex=r,t.outputIndex=i,t.renderParent=d,s|=t.flags,u|=t.matchedQueryIds,t.element){const e=t.element;e.publicProviders=l?l.element.publicProviders:Object.create(null),e.allProviders=e.publicProviders,c=!1,f=!1,t.element.template&&(u|=t.element.template.nodeMatchedQueries)}if(qv(l,t,e.length),r+=t.bindings.length,i+=t.outputs.length,!d&&3&t.flags&&(h=t),20224&t.flags){c||(c=!0,l.element.publicProviders=Object.create(l.element.publicProviders),l.element.allProviders=l.element.publicProviders);const e=0!=(32768&t.flags);0==(8192&t.flags)||e?l.element.publicProviders[Yf(t.provider.token)]=t:(f||(f=!0,l.element.allProviders=Object.create(l.element.publicProviders)),l.element.allProviders[Yf(t.provider.token)]=t),e&&(l.element.componentProvider=t)}if(l?(l.childFlags|=t.flags,l.directChildFlags|=t.flags,l.childMatchedQueries|=t.matchedQueryIds,t.element&&t.element.template&&(l.childMatchedQueries|=t.element.template.nodeMatchedQueries)):o|=t.flags,t.childCount>0)l=t,Mv(t)||(d=t);else for(;l&&g===l.nodeIndex+l.childCount;){const t=l.parent;t&&(t.childFlags|=l.childFlags,t.childMatchedQueries|=l.childMatchedQueries),l=t,d=l&&Mv(l)?l.renderParent:l}}return{factory:null,nodeFlags:s,rootNodeFlags:o,nodeMatchedQueries:u,flags:t,nodes:e,updateDirectives:n||zf,updateRenderer:a||zf,handleEvent:(t,n,a,r)=>e[n].element.handleEvent(t,a,r),bindingCount:r,outputCount:i,lastRenderRootNode:h}}function Mv(t){return 0!=(1&t.flags)&&null===t.element.name}function qv(t,e,n){const a=e.element&&e.element.template;if(a){if(!a.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(a.lastRenderRootNode&&16777216&a.lastRenderRootNode.flags)throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${e.nodeIndex}!`)}if(20224&e.flags&&0==(1&(t?t.flags:0)))throw new Error(`Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ${e.nodeIndex}!`);if(e.query){if(67108864&e.flags&&(!t||0==(16384&t.flags)))throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${e.nodeIndex}!`);if(134217728&e.flags&&t)throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${e.nodeIndex}!`)}if(e.childCount){const a=t?t.nodeIndex+t.childCount:n-1;if(e.nodeIndex<=a&&e.nodeIndex+e.childCount>a)throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${e.nodeIndex}!`)}}function jv(t,e,n,a){const r=Vv(t.root,t.renderer,t,e,n);return zv(r,t.component,a),Bv(r),r}function Fv(t,e,n){const a=Vv(t,t.renderer,null,null,e);return zv(a,n,n),Bv(a),a}function Gv(t,e,n,a){const r=e.element.componentRendererType;let i;return i=r?t.root.rendererFactory.createRenderer(a,r):t.root.renderer,Vv(t.root,i,t,e.element.componentProvider,n)}function Vv(t,e,n,a,r){const i=new Array(r.nodes.length),s=r.outputCount?new Array(r.outputCount):null;return{def:r,parent:n,viewContainerParent:null,parentNodeDef:a,context:null,component:null,nodes:i,state:13,root:t,renderer:e,oldValues:new Array(r.bindingCount),disposables:s,initIndex:-1}}function zv(t,e,n){t.component=e,t.context=n}function Bv(t){let e;ah(t)&&(e=Mf(t.parent,t.parentNodeDef.parent.nodeIndex).renderElement);const n=t.def,a=t.nodes;for(let r=0;r<n.nodes.length;r++){const i=n.nodes[r];let s;switch(Vf.setCurrentNode(t,r),201347067&i.flags){case 1:const n=mv(t,e,i);let o=void 0;if(33554432&i.flags){const e=dh(i.element.componentView);o=Vf.createComponentView(t,i,e,n)}yv(t,o,i,n),s={renderElement:n,componentView:o,viewContainer:null,template:i.element.template?Yh(t,i):void 0},16777216&i.flags&&(s.viewContainer=Gh(t,i,s));break;case 2:s=Lv(t,e,i);break;case 512:case 1024:case 2048:case 256:s=a[r],s||4096&i.flags||(s={instance:cg(t,i)});break;case 16:s={instance:fg(t,i)};break;case 16384:s=a[r],s||(s={instance:hg(t,i)}),32768&i.flags&&zv(Mf(t,i.parent.nodeIndex).componentView,s.instance,s.instance);break;case 32:case 64:case 128:s={value:void 0};break;case 67108864:case 134217728:s=new nb;break;case 8:Nv(t,e,i),s=void 0}a[r]=s}Qv(t,Jv.CreateViewNodes),nx(t,201326592,268435456,0)}function Yv(t){Wv(t),Vf.updateDirectives(t,1),Xv(t,Jv.CheckNoChanges),Vf.updateRenderer(t,1),Qv(t,Jv.CheckNoChanges),t.state&=-97}function Hv(t){1&t.state?(t.state&=-2,t.state|=2):t.state&=-3,Lf(t,0,256),Wv(t),Vf.updateDirectives(t,0),Xv(t,Jv.CheckAndUpdate),nx(t,67108864,536870912,0);let e=Lf(t,256,512);_g(t,2097152|(e?1048576:0)),Vf.updateRenderer(t,0),Qv(t,Jv.CheckAndUpdate),nx(t,134217728,536870912,0),e=Lf(t,512,768),_g(t,8388608|(e?4194304:0)),2&t.def.flags&&(t.state&=-9),t.state&=-97,Lf(t,768,1024)}function Uv(t,e,n,a,r,i,s,o,u,l,d,c,f){return 0===n?function(t,e,n,a,r,i,s,o,u,l,d,c){switch(201347067&e.flags){case 1:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings.length;let h=!1;return f>0&&xv(t,e,0,n)&&(h=!0),f>1&&xv(t,e,1,a)&&(h=!0),f>2&&xv(t,e,2,r)&&(h=!0),f>3&&xv(t,e,3,i)&&(h=!0),f>4&&xv(t,e,4,s)&&(h=!0),f>5&&xv(t,e,5,o)&&(h=!0),f>6&&xv(t,e,6,u)&&(h=!0),f>7&&xv(t,e,7,l)&&(h=!0),f>8&&xv(t,e,8,d)&&(h=!0),f>9&&xv(t,e,9,c)&&(h=!0),h}(t,e,n,a,r,i,s,o,u,l,d,c);case 2:return function(t,e,n,a,r,i,s,o,u,l,d,c){let f=!1;const h=e.bindings,g=h.length;if(g>0&&$f(t,e,0,n)&&(f=!0),g>1&&$f(t,e,1,a)&&(f=!0),g>2&&$f(t,e,2,r)&&(f=!0),g>3&&$f(t,e,3,i)&&(f=!0),g>4&&$f(t,e,4,s)&&(f=!0),g>5&&$f(t,e,5,o)&&(f=!0),g>6&&$f(t,e,6,u)&&(f=!0),g>7&&$f(t,e,7,l)&&(f=!0),g>8&&$f(t,e,8,d)&&(f=!0),g>9&&$f(t,e,9,c)&&(f=!0),f){let f=e.text.prefix;g>0&&(f+=Dv(n,h[0])),g>1&&(f+=Dv(a,h[1])),g>2&&(f+=Dv(r,h[2])),g>3&&(f+=Dv(i,h[3])),g>4&&(f+=Dv(s,h[4])),g>5&&(f+=Dv(o,h[5])),g>6&&(f+=Dv(u,h[6])),g>7&&(f+=Dv(l,h[7])),g>8&&(f+=Dv(d,h[8])),g>9&&(f+=Dv(c,h[9]));const p=Pf(t,e.nodeIndex).renderText;t.renderer.setValue(p,f)}return f}(t,e,n,a,r,i,s,o,u,l,d,c);case 16384:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=qf(t,e.nodeIndex),h=f.instance;let g=!1,p=void 0;const b=e.bindings.length;return b>0&&Kf(t,e,0,n)&&(g=!0,p=xg(t,f,e,0,n,p)),b>1&&Kf(t,e,1,a)&&(g=!0,p=xg(t,f,e,1,a,p)),b>2&&Kf(t,e,2,r)&&(g=!0,p=xg(t,f,e,2,r,p)),b>3&&Kf(t,e,3,i)&&(g=!0,p=xg(t,f,e,3,i,p)),b>4&&Kf(t,e,4,s)&&(g=!0,p=xg(t,f,e,4,s,p)),b>5&&Kf(t,e,5,o)&&(g=!0,p=xg(t,f,e,5,o,p)),b>6&&Kf(t,e,6,u)&&(g=!0,p=xg(t,f,e,6,u,p)),b>7&&Kf(t,e,7,l)&&(g=!0,p=xg(t,f,e,7,l,p)),b>8&&Kf(t,e,8,d)&&(g=!0,p=xg(t,f,e,8,d,p)),b>9&&Kf(t,e,9,c)&&(g=!0,p=xg(t,f,e,9,c,p)),p&&h.ngOnChanges(p),65536&e.flags&&Df(t,256,e.nodeIndex)&&h.ngOnInit(),262144&e.flags&&h.ngDoCheck(),g}(t,e,n,a,r,i,s,o,u,l,d,c);case 32:case 64:case 128:return function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings;let h=!1;const g=f.length;if(g>0&&$f(t,e,0,n)&&(h=!0),g>1&&$f(t,e,1,a)&&(h=!0),g>2&&$f(t,e,2,r)&&(h=!0),g>3&&$f(t,e,3,i)&&(h=!0),g>4&&$f(t,e,4,s)&&(h=!0),g>5&&$f(t,e,5,o)&&(h=!0),g>6&&$f(t,e,6,u)&&(h=!0),g>7&&$f(t,e,7,l)&&(h=!0),g>8&&$f(t,e,8,d)&&(h=!0),g>9&&$f(t,e,9,c)&&(h=!0),h){const h=jf(t,e.nodeIndex);let p;switch(201347067&e.flags){case 32:p=new Array(f.length),g>0&&(p[0]=n),g>1&&(p[1]=a),g>2&&(p[2]=r),g>3&&(p[3]=i),g>4&&(p[4]=s),g>5&&(p[5]=o),g>6&&(p[6]=u),g>7&&(p[7]=l),g>8&&(p[8]=d),g>9&&(p[9]=c);break;case 64:p={},g>0&&(p[f[0].name]=n),g>1&&(p[f[1].name]=a),g>2&&(p[f[2].name]=r),g>3&&(p[f[3].name]=i),g>4&&(p[f[4].name]=s),g>5&&(p[f[5].name]=o),g>6&&(p[f[6].name]=u),g>7&&(p[f[7].name]=l),g>8&&(p[f[8].name]=d),g>9&&(p[f[9].name]=c);break;case 128:const t=n;switch(g){case 1:p=t.transform(n);break;case 2:p=t.transform(a);break;case 3:p=t.transform(a,r);break;case 4:p=t.transform(a,r,i);break;case 5:p=t.transform(a,r,i,s);break;case 6:p=t.transform(a,r,i,s,o);break;case 7:p=t.transform(a,r,i,s,o,u);break;case 8:p=t.transform(a,r,i,s,o,u,l);break;case 9:p=t.transform(a,r,i,s,o,u,l,d);break;case 10:p=t.transform(a,r,i,s,o,u,l,d,c)}}h.value=p}return h}(t,e,n,a,r,i,s,o,u,l,d,c);default:throw"unreachable"}}(t,e,a,r,i,s,o,u,l,d,c,f):function(t,e,n){switch(201347067&e.flags){case 1:return function(t,e,n){let a=!1;for(let r=0;r<n.length;r++)xv(t,e,r,n[r])&&(a=!0);return a}(t,e,n);case 2:return function(t,e,n){const a=e.bindings;let r=!1;for(let i=0;i<n.length;i++)$f(t,e,i,n[i])&&(r=!0);if(r){let r="";for(let t=0;t<n.length;t++)r+=Dv(n[t],a[t]);r=e.text.prefix+r;const i=Pf(t,e.nodeIndex).renderText;t.renderer.setValue(i,r)}return r}(t,e,n);case 16384:return function(t,e,n){const a=qf(t,e.nodeIndex),r=a.instance;let i=!1,s=void 0;for(let o=0;o<n.length;o++)Kf(t,e,o,n[o])&&(i=!0,s=xg(t,a,e,o,n[o],s));return s&&r.ngOnChanges(s),65536&e.flags&&Df(t,256,e.nodeIndex)&&r.ngOnInit(),262144&e.flags&&r.ngDoCheck(),i}(t,e,n);case 32:case 64:case 128:return function(t,e,n){const a=e.bindings;let r=!1;for(let i=0;i<n.length;i++)$f(t,e,i,n[i])&&(r=!0);if(r){const r=jf(t,e.nodeIndex);let i;switch(201347067&e.flags){case 32:i=n;break;case 64:i={};for(let r=0;r<n.length;r++)i[a[r].name]=n[r];break;case 128:const t=n[0],e=n.slice(1);i=t.transform(...e)}r.value=i}return r}(t,e,n);default:throw"unreachable"}}(t,e,a)}function Wv(t){const e=t.def;if(4&e.nodeFlags)for(let n=0;n<e.nodes.length;n++){const a=e.nodes[n];if(4&a.flags){const e=Mf(t,n).template._projectedViews;if(e)for(let n=0;n<e.length;n++){const a=e[n];a.state|=32,Qf(a,t)}}else 0==(4&a.childFlags)&&(n+=a.childCount)}}function Kv(t,e,n,a,r,i,s,o,u,l,d,c,f){return 0===n?function(t,e,n,a,r,i,s,o,u,l,d,c){const f=e.bindings.length;f>0&&Zf(t,e,0,n),f>1&&Zf(t,e,1,a),f>2&&Zf(t,e,2,r),f>3&&Zf(t,e,3,i),f>4&&Zf(t,e,4,s),f>5&&Zf(t,e,5,o),f>6&&Zf(t,e,6,u),f>7&&Zf(t,e,7,l),f>8&&Zf(t,e,8,d),f>9&&Zf(t,e,9,c)}(t,e,a,r,i,s,o,u,l,d,c,f):function(t,e,n){for(let a=0;a<n.length;a++)Zf(t,e,a,n[a])}(t,e,a),!1}function $v(t,e){if(Ff(t,e.nodeIndex).dirty)throw Af(Vf.createDebugContext(t,e.nodeIndex),`Query ${e.query.id} not dirty`,`Query ${e.query.id} dirty`,0!=(1&t.state))}function Zv(t){if(!(128&t.state)){if(Xv(t,Jv.Destroy),Qv(t,Jv.Destroy),_g(t,131072),t.disposables)for(let e=0;e<t.disposables.length;e++)t.disposables[e]();!function(t){if(!(16&t.state))return;const e=th(t);if(e){const n=e.template._projectedViews;n&&(yt(n,n.indexOf(t)),Vf.dirtyParentQueries(t))}}(t),t.renderer.destroyNode&&function(t){const e=t.def.nodes.length;for(let n=0;n<e;n++){const e=t.def.nodes[n];1&e.flags?t.renderer.destroyNode(Mf(t,n).renderElement):2&e.flags?t.renderer.destroyNode(Pf(t,n).renderText):(67108864&e.flags||134217728&e.flags)&&Ff(t,n).destroy()}}(t),ah(t)&&t.renderer.destroy(),t.state|=128}}const Jv=function(){var t={CreateViewNodes:0,CheckNoChanges:1,CheckNoChangesProjectedViews:2,CheckAndUpdate:3,CheckAndUpdateProjectedViews:4,Destroy:5};return t[t.CreateViewNodes]="CreateViewNodes",t[t.CheckNoChanges]="CheckNoChanges",t[t.CheckNoChangesProjectedViews]="CheckNoChangesProjectedViews",t[t.CheckAndUpdate]="CheckAndUpdate",t[t.CheckAndUpdateProjectedViews]="CheckAndUpdateProjectedViews",t[t.Destroy]="Destroy",t}();function Qv(t,e){const n=t.def;if(33554432&n.nodeFlags)for(let a=0;a<n.nodes.length;a++){const r=n.nodes[a];33554432&r.flags?tx(Mf(t,a).componentView,e):0==(33554432&r.childFlags)&&(a+=r.childCount)}}function Xv(t,e){const n=t.def;if(16777216&n.nodeFlags)for(let a=0;a<n.nodes.length;a++){const r=n.nodes[a];if(16777216&r.flags){const n=Mf(t,a).viewContainer._embeddedViews;for(let t=0;t<n.length;t++)tx(n[t],e)}else 0==(16777216&r.childFlags)&&(a+=r.childCount)}}function tx(t,e){const n=t.state;switch(e){case Jv.CheckNoChanges:0==(128&n)&&(12==(12&n)?Yv(t):64&n&&ex(t,Jv.CheckNoChangesProjectedViews));break;case Jv.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?Yv(t):64&n&&ex(t,e));break;case Jv.CheckAndUpdate:0==(128&n)&&(12==(12&n)?Hv(t):64&n&&ex(t,Jv.CheckAndUpdateProjectedViews));break;case Jv.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?Hv(t):64&n&&ex(t,e));break;case Jv.Destroy:Zv(t);break;case Jv.CreateViewNodes:Bv(t)}}function ex(t,e){Xv(t,e),Qv(t,e)}function nx(t,e,n,a){if(!(t.def.nodeFlags&e&&t.def.nodeFlags&n))return;const r=t.def.nodes.length;for(let i=0;i<r;i++){const r=t.def.nodes[i];if(r.flags&e&&r.flags&n)switch(Vf.setCurrentNode(t,r.nodeIndex),a){case 0:Ov(t,r);break;case 1:$v(t,r)}r.childFlags&e&&r.childFlags&n||(i+=r.childCount)}}let ax=!1;function rx(){if(ax)return;ax=!0;const t=Wa()?{setCurrentNode:Nx,createRootView:sx,createEmbeddedView:ux,createComponentView:lx,createNgModuleRef:dx,overrideProvider:gx,overrideComponentView:px,clearOverrides:bx,checkAndUpdateView:xx,checkNoChangesView:_x,destroyView:Tx,createDebugContext:(t,e)=>new Px(t,e),handleEvent:Cx,updateDirectives:Rx,updateRenderer:Ax}:{setCurrentNode:()=>{},createRootView:ix,createEmbeddedView:jv,createComponentView:Gv,createNgModuleRef:Jh,overrideProvider:zf,overrideComponentView:zf,clearOverrides:zf,checkAndUpdateView:Hv,checkNoChangesView:Yv,destroyView:Zv,createDebugContext:(t,e)=>new Px(t,e),handleEvent:(t,e,n,a)=>t.def.handleEvent(t,e,n,a),updateDirectives:(t,e)=>t.def.updateDirectives(0===e?yx:vx,t),updateRenderer:(t,e)=>t.def.updateRenderer(0===e?yx:vx,t)};Vf.setCurrentNode=t.setCurrentNode,Vf.createRootView=t.createRootView,Vf.createEmbeddedView=t.createEmbeddedView,Vf.createComponentView=t.createComponentView,Vf.createNgModuleRef=t.createNgModuleRef,Vf.overrideProvider=t.overrideProvider,Vf.overrideComponentView=t.overrideComponentView,Vf.clearOverrides=t.clearOverrides,Vf.checkAndUpdateView=t.checkAndUpdateView,Vf.checkNoChangesView=t.checkNoChangesView,Vf.destroyView=t.destroyView,Vf.resolveDep=yg,Vf.createDebugContext=t.createDebugContext,Vf.handleEvent=t.handleEvent,Vf.updateDirectives=t.updateDirectives,Vf.updateRenderer=t.updateRenderer,Vf.dirtyParentQueries=Tv}function ix(t,e,n,a,r,i){const s=r.injector.get(ef);return Fv(ox(t,r,s,e,n),a,i)}function sx(t,e,n,a,r,i){const s=r.injector.get(ef),o=ox(t,r,new Fx(s),e,n),u=mx(a);return qx(Ox.create,Fv,null,[o,u,i])}function ox(t,e,n,a,r){const i=e.injector.get(vr),s=e.injector.get(Da),o=n.createRenderer(null,null);return{ngModule:e,injector:t,projectableNodes:a,selectorOrNode:r,sanitizer:i,rendererFactory:n,renderer:o,errorHandler:s}}function ux(t,e,n,a){const r=mx(n);return qx(Ox.create,jv,null,[t,e,r,a])}function lx(t,e,n,a){return n=hx.get(e.element.componentProvider.provider.token)||mx(n),qx(Ox.create,Gv,null,[t,e,n,a])}function dx(t,e,n,a){return Jh(t,e,n,function(t){const{hasOverrides:e,hasDeprecatedOverrides:n}=function(t){let e=!1,n=!1;return 0===cx.size?{hasOverrides:e,hasDeprecatedOverrides:n}:(t.providers.forEach(t=>{const a=cx.get(t.token);3840&t.flags&&a&&(e=!0,n=n||a.deprecatedBehavior)}),t.modules.forEach(t=>{fx.forEach((a,r)=>{D(r).providedIn===t&&(e=!0,n=n||a.deprecatedBehavior)})}),{hasOverrides:e,hasDeprecatedOverrides:n})}(t);return e?(function(t){for(let e=0;e<t.providers.length;e++){const a=t.providers[e];n&&(a.flags|=4096);const r=cx.get(a.token);r&&(a.flags=-3841&a.flags|r.flags,a.deps=oh(r.deps),a.value=r.value)}if(fx.size>0){let e=new Set(t.modules);fx.forEach((a,r)=>{if(e.has(D(r).providedIn)){let e={token:r,flags:a.flags|(n?4096:0),deps:oh(a.deps),value:a.value,index:t.providers.length};t.providers.push(e),t.providersByKey[Yf(r)]=e}})}}(t=t.factory(()=>zf)),t):t}(a))}const cx=new Map,fx=new Map,hx=new Map;function gx(t){let e;cx.set(t.token,t),"function"==typeof t.token&&(e=D(t.token))&&"function"==typeof e.providedIn&&fx.set(t.token,t)}function px(t,e){const n=dh(qh(e)),a=dh(n.nodes[0].element.componentView);hx.set(t,a)}function bx(){cx.clear(),fx.clear(),hx.clear()}function mx(t){if(0===cx.size)return t;const e=function(t){const e=[];let n=null;for(let a=0;a<t.nodes.length;a++){const r=t.nodes[a];1&r.flags&&(n=r),n&&3840&r.flags&&cx.has(r.provider.token)&&(e.push(n.nodeIndex),n=null)}return e}(t);if(0===e.length)return t;t=t.factory(()=>zf);for(let a=0;a<e.length;a++)n(t,e[a]);return t;function n(t,e){for(let n=e+1;n<t.nodes.length;n++){const e=t.nodes[n];if(1&e.flags)return;if(3840&e.flags){const t=e.provider,n=cx.get(t.token);n&&(e.flags=-3841&e.flags|n.flags,t.deps=oh(n.deps),t.value=n.value)}}}}function yx(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=t.def.nodes[e];return Uv(t,h,n,a,r,i,s,o,u,l,d,c,f),224&h.flags?jf(t,e).value:void 0}function vx(t,e,n,a,r,i,s,o,u,l,d,c,f){const h=t.def.nodes[e];return Kv(t,h,n,a,r,i,s,o,u,l,d,c,f),224&h.flags?jf(t,e).value:void 0}function xx(t){return qx(Ox.detectChanges,Hv,null,[t])}function _x(t){return qx(Ox.checkNoChanges,Yv,null,[t])}function Tx(t){return qx(Ox.destroy,Zv,null,[t])}const Ox=function(){var t={create:0,detectChanges:1,checkNoChanges:2,destroy:3,handleEvent:4};return t[t.create]="create",t[t.detectChanges]="detectChanges",t[t.checkNoChanges]="checkNoChanges",t[t.destroy]="destroy",t[t.handleEvent]="handleEvent",t}();let wx,Sx,Ix;function Nx(t,e){Sx=t,Ix=e}function Cx(t,e,n,a){return Nx(t,e),qx(Ox.handleEvent,t.def.handleEvent,null,[t,e,n,a])}function Rx(t,e){if(128&t.state)throw Ef(Ox[wx]);return Nx(t,Lx(t,0)),t.def.updateDirectives((function(t,n,a,...r){const i=t.def.nodes[n];return 0===e?kx(t,i,a,r):Ex(t,i,a,r),16384&i.flags&&Nx(t,Lx(t,n)),224&i.flags?jf(t,i.nodeIndex).value:void 0}),t)}function Ax(t,e){if(128&t.state)throw Ef(Ox[wx]);return Nx(t,Dx(t,0)),t.def.updateRenderer((function(t,n,a,...r){const i=t.def.nodes[n];return 0===e?kx(t,i,a,r):Ex(t,i,a,r),3&i.flags&&Nx(t,Dx(t,n)),224&i.flags?jf(t,i.nodeIndex).value:void 0}),t)}function kx(t,e,n,a){if(Uv(t,e,n,...a)){const s=1===n?a[0]:a;if(16384&e.flags){const n={};for(let t=0;t<e.bindings.length;t++){const a=e.bindings[t],o=s[t];8&a.flags&&(n[(r=a.nonMinifiedName,i=void 0,i=r.replace(/[$@]/g,"_"),`ng-reflect-${r=i.replace(Er,(...t)=>"-"+t[1].toLowerCase())}`)]=Lr(o))}const a=e.parent,o=Mf(t,a.nodeIndex).renderElement;if(a.element.name)for(let e in n){const a=n[e];null!=a?t.renderer.setAttribute(o,e,a):t.renderer.removeAttribute(o,e)}else t.renderer.setValue(o,`bindings=${JSON.stringify(n,null,2)}`)}}var r,i}function Ex(t,e,n,a){Kv(t,e,n,...a)}function Lx(t,e){for(let n=e;n<t.def.nodes.length;n++){const e=t.def.nodes[n];if(16384&e.flags&&e.bindings&&e.bindings.length)return n}return null}function Dx(t,e){for(let n=e;n<t.def.nodes.length;n++){const e=t.def.nodes[n];if(3&e.flags&&e.bindings&&e.bindings.length)return n}return null}class Px{constructor(t,e){this.view=t,this.nodeIndex=e,null==e&&(this.nodeIndex=e=0),this.nodeDef=t.def.nodes[e];let n=this.nodeDef,a=t;for(;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&a;)n=eh(a),a=a.parent;this.elDef=n,this.elView=a}get elOrCompView(){return Mf(this.elView,this.elDef.nodeIndex).componentView||this.view}get injector(){return Uh(this.elView,this.elDef)}get component(){return this.elOrCompView.component}get context(){return this.elOrCompView.context}get providerTokens(){const t=[];if(this.elDef)for(let e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){const n=this.elView.def.nodes[e];20224&n.flags&&t.push(n.provider.token),e+=n.childCount}return t}get references(){const t={};if(this.elDef){Mx(this.elView,this.elDef,t);for(let e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){const n=this.elView.def.nodes[e];20224&n.flags&&Mx(this.elView,n,t),e+=n.childCount}}return t}get componentRenderElement(){const t=function(t){for(;t&&!ah(t);)t=t.parent;return t.parent?Mf(t.parent,eh(t).nodeIndex):null}(this.elOrCompView);return t?t.renderElement:void 0}get renderNode(){return 2&this.nodeDef.flags?nh(this.view,this.nodeDef):nh(this.elView,this.elDef)}logError(t,...e){let n,a;2&this.nodeDef.flags?(n=this.view.def,a=this.nodeDef.nodeIndex):(n=this.elView.def,a=this.elDef.nodeIndex);const r=function(t,e){let n=-1;for(let a=0;a<=e;a++)3&t.nodes[a].flags&&n++;return n}(n,a);let i=-1;n.factory(()=>(i++,i===r?t.error.bind(t,...e):zf)),i<r&&(t.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),t.error(...e))}}function Mx(t,e,n){for(let a in e.references)n[a]=Sv(t,e,e.references[a])}function qx(t,e,n,a){const r=wx,i=Sx,s=Ix;try{wx=t;const o=e.apply(n,a);return Sx=i,Ix=s,wx=r,o}catch(o){if(ka(o)||!Sx)throw o;throw function(t,e){return t instanceof Error||(t=new Error(t.toString())),kf(t,e),t}(o,jx())}}function jx(){return Sx?new Px(Sx,Ix):null}class Fx{constructor(t){this.delegate=t}createRenderer(t,e){return new Gx(this.delegate.createRenderer(t,e))}begin(){this.delegate.begin&&this.delegate.begin()}end(){this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)}}class Gx{constructor(t){this.delegate=t,this.debugContextFactory=jx,this.data=this.delegate.data}createDebugContext(t){return this.debugContextFactory(t)}destroyNode(t){const e=rv(t);!function(t){nv.delete(t.nativeNode)}(e),e instanceof Uy&&(e.listeners.length=0),this.delegate.destroyNode&&this.delegate.destroyNode(t)}destroy(){this.delegate.destroy()}createElement(t,e){const n=this.delegate.createElement(t,e),a=this.createDebugContext(n);if(a){const e=new Wy(n,null,a);e.name=t,iv(e)}return n}createComment(t){const e=this.delegate.createComment(t),n=this.createDebugContext(e);return n&&iv(new Uy(e,null,n)),e}createText(t){const e=this.delegate.createText(t),n=this.createDebugContext(e);return n&&iv(new Uy(e,null,n)),e}appendChild(t,e){const n=rv(t),a=rv(e);n&&a&&n instanceof Wy&&n.addChild(a),this.delegate.appendChild(t,e)}insertBefore(t,e,n){const a=rv(t),r=rv(e),i=rv(n);a&&r&&a instanceof Wy&&a.insertBefore(i,r),this.delegate.insertBefore(t,e,n)}removeChild(t,e){const n=rv(t),a=rv(e);n&&a&&n instanceof Wy&&n.removeChild(a),this.delegate.removeChild(t,e)}selectRootElement(t,e){const n=this.delegate.selectRootElement(t,e),a=jx();return a&&iv(new Wy(n,null,a)),n}setAttribute(t,e,n,a){const r=rv(t);r&&r instanceof Wy&&(r.attributes[a?a+":"+e:e]=n),this.delegate.setAttribute(t,e,n,a)}removeAttribute(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.attributes[n?n+":"+e:e]=null),this.delegate.removeAttribute(t,e,n)}addClass(t,e){const n=rv(t);n&&n instanceof Wy&&(n.classes[e]=!0),this.delegate.addClass(t,e)}removeClass(t,e){const n=rv(t);n&&n instanceof Wy&&(n.classes[e]=!1),this.delegate.removeClass(t,e)}setStyle(t,e,n,a){const r=rv(t);r&&r instanceof Wy&&(r.styles[e]=n),this.delegate.setStyle(t,e,n,a)}removeStyle(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.styles[e]=null),this.delegate.removeStyle(t,e,n)}setProperty(t,e,n){const a=rv(t);a&&a instanceof Wy&&(a.properties[e]=n),this.delegate.setProperty(t,e,n)}listen(t,e,n){if("string"!=typeof t){const a=rv(t);a&&a.listeners.push(new Hy(e,n))}return this.delegate.listen(t,e,n)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setValue(t,e){return this.delegate.setValue(t,e)}}function Vx(t){return rx(),Vf.overrideProvider(t)}function zx(t,e){return rx(),Vf.overrideComponentView(t,e)}function Bx(){return rx(),Vf.clearOverrides()}function Yx(t,e,n){return new Hx(t,e,n)}class Hx extends ht{constructor(t,e,n){super(),this.moduleType=t,this._bootstrapComponents=e,this._ngModuleDefFactory=n}create(t){rx();const e=function(t){const e=Array.from(t.providers),n=Array.from(t.modules),a={};for(const r in t.providersByKey)a[r]=t.providersByKey[r];return{factory:t.factory,isRoot:t.isRoot,providers:e,modules:n,providersByKey:a}}(dh(this._ngModuleDefFactory));return Vf.createNgModuleRef(this.moduleType,t||Bo.NULL,this._bootstrapComponents,e)}}},"8YOa":function(t,e,n){var a=n("0BK2"),r=n("hh1v"),i=n("UTVS"),s=n("m/L8").f,o=n("kOOl"),u=n("uy83"),l=o("meta"),d=0,c=Object.isExtensible||function(){return!0},f=function(t){s(t,l,{value:{objectID:"O"+ ++d,weakData:{}}})},h=t.exports={REQUIRED:!1,fastKey:function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,l)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[l].objectID},getWeakData:function(t,e){if(!i(t,l)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[l].weakData},onFreeze:function(t){return u&&h.REQUIRED&&c(t)&&!i(t,l)&&f(t),t}};a[l]=!0},"8j5A":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="it-IT">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Attiva/Disattiva barra di navigazione</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dashboard</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Servizi</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configurazione</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mappa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Moduli Manager</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Log</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blocco</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Immagini</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Esecuzione della copia speculare</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI </target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>File system</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Utenti</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartimenti</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Selezionare una lingua</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Caricamento pannello dati in corso...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Selezione ora di Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Impostazioni di ripristino</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Indietro</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Non è stato possibile caricare i dati.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>selezionato</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>trovato</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>totale</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nome</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descrizione</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descrizione lunga</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Default</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Default del daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valori</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Salva</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visualizzatore mappa CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Caricamento in corso...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nome host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Questo campo è obbligatorio.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sì.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Annulla</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Chiudi</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Elenco degli host</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Prestazioni complessive</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nessuna voce trovata</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Log dei cluster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Log delle revisioni</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Caricamento della configurazione in corso...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Impossibile caricare la configurazione.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Modifica modulo Manager</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Il valore immesso non è un UUID valido, ad es.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Il valore immesso deve essere un indirizzo IP valido.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Il valore immesso deve essere un numero.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Il valore immesso deve essere un numero o un decimale.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aggiorna</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID cluster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>mappa mon modificata</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>epoca mappa mon</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con richiesta</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon richiesto</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Nel quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Non nel quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Aggiungi</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funzioni</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flag OSD in tutto il cluster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Invia</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avanzate...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorità di recupero OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorità</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizza valori di priorità</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Questo campo è obbligatorio.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Il valore deve essere compreso tra 0 e 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ripesa</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Elenco degli OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valore</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Modifica</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Elimina</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiche</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Client</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Può accedere qualsiasi client</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Indirizzi</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo obbligatorio</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Deve contenere uno o più valori delimitati da virgole</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Ad esempio:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo di accesso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Esegui squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Aggiungi client</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Nessun cluster disponibile --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Selezionare il cluster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Aggiungi daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend di storage</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Nessun pool di dati disponibile --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Selezionare il backend di storage --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Utente Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Nessun utente disponibile --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Selezionare l\'utente Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID utente CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Nessun client disponibile --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Selezionare il client Cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nome CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etichetta di sicurezza</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Abilita etichetta di sicurezza</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Percorso CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Il percorso deve iniziare con una barra \'/\' e può essere seguito da una parola</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Viene creata la nuova directory</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Percorso</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Il percorso può essere solo una singola barra \'/\' o parola</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Viene creato il nuovo compartimento</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocollo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>I client non possono montare le sottodirectory (ad es. se Tag = foo, il client non può montare foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Utilizzando diverse opzioni Tag, è possibile esportare più volte lo stesso percorso.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Utilizzando diverse opzioni Pseudo, è possibile esportare più volte lo stesso percorso.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Nessun tipo di accesso disponibile --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Selezionare il tipo di accesso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Nessuno squash disponibile --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>--Selezionare il tipo di squash dell\'ID utente da eseguire --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocollo di trasporto</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Benvenuto in Ceph.</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nome utente necessario</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Password richiesta</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Login</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Spiacenti, l\'utente non esiste in Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Non consentito</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Spiacenti, non è consentito visualizzare ciò che si stava cercando.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configurazione RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Rimuovere il valore della configurazione locale. Al suo posto verrà ereditato e utilizzato il valore della configurazione superiore.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Il valore minimo è 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Elenco dei pool</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Il nome può contenere solo caratteri alfanumerici, trattini e caratteri di sottolineatura.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Il nome del profilo del codice di cancellazione selezionato è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Porzioni di dati (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Deve essere uguale o maggiore di 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Porzioni di codice (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Deve essere uguale o maggiore di 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Stima durata (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Località (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Dominio di errore Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Località Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nessuno</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Tecnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Dimensione del pacchetto</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Radice Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe dispositivo Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>qualsiasi</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Directory</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nome...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Il nome del pool Ceph scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo di pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Selezionare un tipo di pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Gruppi di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>È necessario almeno un gruppo di posizionamento.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Il cluster non può gestire questo numero eccessivo di gruppi di posizionamento. Ricalcolare il numero di gruppi di posizionamento necessari.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Guida per il calcolo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Dimensioni replicate</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flag</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sovrascritture EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Applicazioni</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profilo del codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Nessun profilo del codice di cancellazione disponibile --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Selezionare un profilo del codice di cancellazione --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Set di regole Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Selezionare una regola Crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regola Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Passaggi Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compressione</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modalità</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Nessun algoritmo di compressione della cancellazione disponibile --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Dimensioni minime del blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>ad es. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Il valore deve essere maggiore di 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Dimensioni massime del blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>ad es. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Il valore deve essere maggiore delle dimensioni minime del blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rapporto</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rapporto di compressione</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Il valore deve essere compreso tra 0,0 e 1,0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ad es. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Dettagli</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Dettagli sulle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Dettagli livelli cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Sposta un\'immagine nel cestino</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protezione scade alle</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NON PROTETTO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato data errato. Utilizzare "AAAA-MM-GG HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protezione è già scaduta. Selezionare una data futura o lasciarla vuota.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Sposta immagine</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Panoramica</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinazioni</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticazione rilevazione</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Utente</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>I nomi utente devono avere una lunghezza compresa tra 8 e 64 caratteri e\n              possono contenere solo lettere, \'.\', \'@\', \'-\', \'_\' o \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Password</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Utente reciproco</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Password reciproca</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informazioni disponibili:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinazioni iSCSI non disponibili</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool di dati</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Creato</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Dimensioni</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Oggetti</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Dimensioni oggetto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Soggetto al provisioning</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/D</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Totale soggetto al provisioning</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unità di striping</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Conteggio di striping</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Superiore</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefisso nome blocco</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Ordine</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshot</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Immagine</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Questa impostazione sostituisce il valore globale</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globale</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Questo è il valore globale. Nessun valore di opzione è stato impostato per questa immagine.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' e \'@\' non sono consentiti.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Nessun pool rbd disponibile --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Selezionare un pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Utilizza un pool di dati dedicato</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool di dati</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool dedicato che archivia i dati oggetto dell\'RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>È necessario aumentare le dimensioni.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avanzate</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Striping</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unità di striping</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Selezionare l\'unità di striping --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Questo campo è obbligatorio perché è specificato il numero di striping.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>L\'unità di striping è maggiore delle dimensioni dell\'oggetto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Numero di striping</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Questo campo è obbligatorio perché è specificata l\'unità di striping.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Il numero di striping deve essere maggiore di 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Si sta per eseguire il rollback</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Elimina definitivamente contenuto del cestino</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tutto</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nome pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Ripristina immagine</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Per ripristinare,</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>digitare il nuovo nome dell\'immagine e fare clic su</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nuovo nome</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Scaduto alle</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protetto fino alle</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Di solito non è necessario modificare questi parametri rispetto ai valori di default.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Impostazioni</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Conferma</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Impostazioni avanzate</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN di destinazione</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN contiene un modello errato.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Ad esempio: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Ulteriori informazioni</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Questa destinazione contiene impostazioni avanzate modificate.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portali</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Aggiungi portale</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Questa immagine contiene impostazioni modificate.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Aggiungi immagine</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticazione ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniziatori</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniziatore</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN client</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>L\'IQN dell\'iniziatore deve essere univoco.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>I nomi utente devono avere una lunghezza compresa tra 8 e 64 caratteri e\n                        possono contenere solo lettere, \'.\', \'@\', \'-\', \'_\' o \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>L\'iniziatore appartiene a un gruppo. Le immagini verranno configurate nel gruppo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nessun elemento aggiunto.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Aggiungi iniziatore</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Gruppi</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Gruppo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Aggiungi gruppo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Cestino</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemi</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizzazione in corso</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Pronto</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Modifica modalità speculare per il pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>È necessario rimuovere i cluster peer prima di disabilitare la copia speculare.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nome cluster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Il nome del cluster non è valido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>L\'ID CephX non è valido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Indirizzi dei monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Indirizzi con valori delimitati da virgole...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>L\'indirizzo del monitor non è valido.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Chiave CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Chiave con codifica Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La chiave CephX deve essere con codifica Base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Contatori delle prestazioni non disponibili</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Elenco dei daemon</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contatori delle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Caricamento dati compartimento in corso...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Il valore non è valido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Il nome scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Proprietario</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Selezionare un utente --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Abilitato</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo di indice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regola di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Contrassegno</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Contrassegno massimo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versione</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versione master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Ora di modifica</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Gruppo di zone</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Quota compartimenti</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Dimensioni massime</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Illimitato</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Numero massimo di oggetti</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nome utente</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Selezionare un nome utente --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Generazione automatica chiave</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Chiave di accesso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Chiave segreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nome completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Indirizzo e-mail</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Sospeso</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Numero massimo di compartimenti</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Sottoutenti</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Capacità</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Quota utenti</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostra</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Chiavi</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Selezionare un tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Autorizzazione</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Selezionare un\'autorizzazione --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Sottoutente</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>L\'ID del sottoutente scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lettura, scrittura</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>pieno</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Chiave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Generazione automatica segreto</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Caricamento dati utente in corso...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Impossibile caricare i dati utente.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>L\'ID utente scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Non è un indirizzo e-mail valido.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>L\'indirizzo e-mail scelto è già in uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Numero max. di compartimenti</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Disabilitato</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizzato</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Chiave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Non esistono sottoutenti.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Non esistono chiavi.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Non esistono capacità.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Dimensioni illimitate</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Dimensione max.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Oggetti illimitati</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Numero max. di oggetti</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Il valore immesso deve essere &gt;= a 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descrizione...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Autorizzazioni</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Ruoli</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Conferma password</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>La password di conferma non corrisponde alla password.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>E-mail non valida.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Si stanno per rimuovere le autorizzazioni di "lettura/aggiornamento utente" dal proprio utente.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Se si continua, non è più possibile aggiungere o rimuovere ruoli da qualsiasi utente.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Continuare?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Guida</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentazione</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Informazioni su</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Impostazioni del dashboard</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestione utenti</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Utente connesso</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Disconnetti</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attributi (mappa OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadati non disponibili</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadati</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contatore delle prestazioni</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Scritture</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Letture</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Istogramma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valori attuali</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origine</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Livello</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Può essere aggiornato al runtime (modificabile)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tag</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valori di enumerazione</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Vedere anche</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Stato del cluster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manager Daemon</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Server di metadati</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI Gateway</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS client</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Velocità effettiva client</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lettura/scrittura client</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Velocità effettiva di recupero</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Pulitura</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Prestazioni</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacità di base</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Gruppi di posizionamento per OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Stato gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacità</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Classificazioni</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Attuale</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticazione rilevazione aggiornata</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Non sono disponibili pool.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Non sono disponibili immagini.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Non sono disponibili immagini. Assicurarsi di aggiungere un\'immagine alla destinazione.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Non sono disponibili iniziatori. Assicurarsi di aggiungere un iniziatore alla destinazione.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destinazione</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stato</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Byte letti</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Byte scritti</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operazioni di lettura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operazioni di scrittura</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O da</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Istanza</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Avanzamento</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Modalità di modifica</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Aggiungi peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Modifica peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Elimina peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Sequenza iniziale</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Locale</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Remoto</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>peer copia speculare</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Chiave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Appiattimento profondo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Su strati</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Blocco esclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mappa oggetti (richiede il blocco escluso)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journaling (richiede il blocco esclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NON PROTETTO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Esegui rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Eliminato alle</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stato</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versione</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>root</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemon in standby</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Classificazione</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Task</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentry</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Utilizzo</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aggiornato</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>È possibile aggiornare il valore al runtime.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>I daemon/client non estraggono questo valore dal\n      database della configurazione di monitoraggio. Non è consentito impostare questa opzione tramite \'ceph config\n      set ...\'. È necessario configurare questa opzione tramite ceph.conf o dalla\n      riga di comando.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>L\'opzione diventa attiva solo all\'avvio del daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>L\'opzione interessa solo la creazione del cluster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>L\'opzione interessa solo la creazione del daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Servizio</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valore attuale</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Modificabile</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Abilita</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Disabilita</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Riconnessione in corso. Attendere.</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Indirizzo pubblico</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessioni aperte</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Nessuno in entrata</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Gli OSD che sono stati contrassegnati come disattivi in precedenza non verranno contrassegnati nuovamente come attivi all\'avvio</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Nessuno in uscita</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Gli OSD non verranno disattivati automaticamente dopo l\'intervallo configurato</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Nessuno attivo</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Non è consentito l\'avvio degli OSD</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Nessuno disattivo</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>I rapporti di errore degli OSD vengono ignorati in modo che i monitor non disattivino gli OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Sospendi</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Sospende le operazioni di lettura e scrittura</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nessuna pulitura</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Pulitura disabilitata</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nessun pulitura approfondita</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Pulitura approfondita disabilitata</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Nessuna operazione di recupero</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Recupero dei gruppi di posizionamento sospeso</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Nessun recupero</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Recupero dei gruppi di posizionamento sospeso</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Ordinamento bitwise</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usa ordinamento bitwise</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdir eliminate definitivamente</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Gli OSD contengono set di snap convertiti</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Eliminazioni recuperi</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Eliminazioni eseguite durante il recupero invece del peering</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite rigido log gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Inserisce un limite rigido alla lunghezza del log del gruppo di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flag OSD aggiornati</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>esterno</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>interno</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>in basso</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Contrassegna</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perso</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>contrassegnato come perso</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>elimina</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Gruppi di posizionamento</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Byte letti</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Byte scritti</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operazioni di lettura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operazioni di scrittura</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Numero max di recuperi informazioni</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Numero max di recuperi attivi</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Avvio singolo numero max di recuperi</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Sospensione recupero</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Lavoro</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravità</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Avviato</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Utilizzato</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispon.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Pulisci</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>In funzione</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Avviso</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Sconosciuto</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>su</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>nessun file system</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>attivo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/d</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon attivo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target> quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Il servizio NFS Ganesha non è configurato.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Trasporto</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Utente CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>File system CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(ereditato dalla configurazione globale)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>importato dalla configurazione globale</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Selezionare il tipo di squash dell\'ID utente che viene eseguito --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Non vi sono daemon disponibili.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modalità cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Numero minimo di giorni per la rimozione</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Numero minimo di giorni per la cancellazione</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Numero max di byte di destinazione</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Numero max di oggetti di destinazione</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Non sono state aggiunte applicazioni.</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Raggiunto il limite di applicazioni</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Un pool può contenere solo fino a quattro definizioni delle applicazioni.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caratteri consentiti \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La lunghezza massima è di 128 caratteri</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtra o aggiungi applicazioni</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Aggiungi applicazione</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profilo del codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Dimensioni della replica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Ultima modifica</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profilo con codice di cancellazione</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Set di regole Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartimento</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartimenti</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>utente</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>utenti</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Ambito</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lettura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Crea</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Ruolo di sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Aggiorna utente</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continua</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Si è stati automaticamente disconnessi perché i ruoli sono stati modificati.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Ogni oggetto è suddiviso in porzioni di dati, ciascuna delle quali è memorizzata su un diverso OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcola le porzioni di codice relative a ciascun oggetto e le memorizza su diversi OSD.\n      Il numero di porzioni di codice è anche il numero degli OSD che è possibile disattivare senza perdere i dati.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Il plugin jerasure è il plugin più generico e flessibile,\n          ed è anche il plugin di default dei pool con codice di cancellazione di Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La tecnica più flessibile è reed_sol_van: è sufficiente impostare k\n          ed m. La tecnica cauchy_good può essere più rapida ma occorre selezionare attentamente la dimensione del\n          pacchetto. reed_sol_r6_op, liberation, blaum_roth, liber8tion sono tutti equivalenti a RAID6,\n          nel senso che è possibile configurarli solo con m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>La codifica viene eseguita su pacchetti di dimensioni in byte, uno alla volta.\n          È difficile scegliere la dimensione del pacchetto corretta.\n          La documentazione su jerasure fornisce informazioni esaustive su questo argomento.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Con il plugin di jerasure, quando un oggetto con codice di cancellazione viene memorizzato su\n          più OSD, il recupero della perdita di un OSD richiede la lettura di tutti gli altri.\n          Ad esempio, se jerasure è configurato con k=8 e m=4, la perdita di un OSD richiede la lettura\n          degli altri undici per il ripristino.\n\n          Il plugin del codice di cancellazione lrc crea porzioni di parità locali che è possibile recuperare utilizzando un\n          minor numero di OSD. Ad esempio, se lrc è configurato con k=8, m=4 e l=4, crea\n          una porzione di parità aggiuntiva ogni quattro OSD. Quando si perde un singolo OSD, è possibile\n          recuperarlo solo con quattro OSD invece che con undici.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Raggruppa le porzioni di codice e dati in set di località dimensione. Ad esempio,\n          per k=4 e m=2, se località=3 vengono creati due gruppi su tre. È possibile recuperare ciascun set\n          senza leggere le porzioni di un altro set.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Il tipo di compartimento Crush in cui viene memorizzato ciascun set di porzioni definito\n          dall\'utente. Ad esempio, se è impostato su rack, ciascun gruppo di porzioni viene\n          posizionato in un diverso rack. Viene utilizzato per creare un passaggio della regola CRUSH come il passaggio choose\n          rack. Se non è impostato, il raggruppamento non viene eseguito.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Il plugin ISA incapsula la libreria ISA. Viene eseguito solo su processori Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Il plugin ISA è disponibile in due formati Reed Solomon.\n          Se è impostato reed_sol_van, il formato è Vandermonde, se è impostato cauchy, il formato è Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Il plugin shec incapsula la libreria SHEC multipla.\n          Consente a Ceph di recuperare i dati in modo più efficiente rispetto ai codici Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Il numero di compartimenti di parità, ciascuno dei quali include i singoli compartimenti di dati\n          nell\'intervallo di calcolo. Il numero viene utilizzato come strumento di stima della durabilità. Ad esempio, se c=2,\n          è possibile disattivare 2 OSD senza perdere i dati.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Il nome del compartimento Crush utilizzato per il primo passaggio della regola CRUSH.\n      Ad esempio il passaggio take default.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Assicurarsi che non esistano due porzioni in un compartimento con lo stesso dominio\n      di errore. Ad esempio, se il dominio di errore è l\'host, non verranno memorizzate due porzioni sullo stesso\n      host. Viene utilizzato per creare un passaggio della regola CRUSH come passaggio chooseleaf host.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Limitare il posizionamento ai dispositivi di una classe specifica\n      (ad es. ssd o hdd) usando i nomi delle classi di dispositivi Crush nella mappa CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Impostare il nome della directory da cui viene caricato il plugin del codice di cancellazione.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Consente tutte le operazioni</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Consente solo le operazioni che non modificano il server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Non consente operazioni di lettura o scrittura, ma consente qualsiasi altra operazione</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Non consente operazioni di lettura o scrittura o qualsiasi operazione che modifichi gli attributi dei file o il contenuto della directory</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Non consente alcun accesso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Selezionare la priorità --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Bassa</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informazioni</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Ultimi 5 minuti</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Ultimi 15 minuti</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Ultimi 30 minuti</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Ultima ora (Default)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Ultime 3 ore</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Ultime 6 ore</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Ultime 12 ore</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Ultime 24 ore</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ieri</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Oggi</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Fino a oggi</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Giorno prima di ieri</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Ultimi 2 giorni</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Questo giorno della scorsa settimana</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Settimana precedente</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Questa settimana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Fino a questa settimana</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Ultimi 7 giorni</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Mese precedente</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Questo mese</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Fino a questo mese</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Ultimi 30 giorni</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Ultimi 90 giorni</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Ultimi 6 mesi</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Ultimo anno</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Anno precedente</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Quest\'anno</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Fino a quest\'anno</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Ultimi 2 anni</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Ultimi 5 anni</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nessun elemento selezionato.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Deselezionare l\'elemento per selezionare di nuovo</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target> Raggiunto il limite per la selezione</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtra tag</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Aggiungi badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Non vi sono elementi disponibili.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clona</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copia</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Pulitura approfondita</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Eliminazione definitiva</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Appiattisci</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Declassa</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Attiva</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Contrassegna come perso</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Disattiva</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteggi</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Rinomina</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Ripristina</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Sposta nel cestino</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Rimuovi protezione</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Eliminato</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonato</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiato</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Appiattito</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Eliminato definitivamente</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Ripristinato</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback eseguito</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sì</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>No</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualità di servizio</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite di BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Il limite desiderato di byte I/O al secondo.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite di IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Il limite desiderato di operazioni I/O al secondo.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite BPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Il limite desiderato dei byte letti al secondo.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite di IOPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Il limite desiderato di operazioni di lettura al secondo.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite di BPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Il limite desiderato di byte scritti al secondo.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite di IOPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Il limite desiderato di operazioni di scrittura al secondo.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Burst BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Il limite di burst desiderato dei byte di I/O.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Burst IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di I/O.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Burst BPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Il limite di burst desiderato dei byte letti.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Burst IOPS in lettura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di lettura.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Burst BPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Il limite di burst desiderato dei byte scritti.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Burst di IOPS in scrittura</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Il limite di burst desiderato delle operazioni di scrittura.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>In esecuzione</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>esegui</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Eseguito</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>task sconosciuto</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Creazione in corso</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>crea</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aggiornamento in corso</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aggiorna</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Eliminazione in corso</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonazione in corso</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clona</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copia in corso</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copia</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Appiattimento</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>appiattisci</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Rollback in corso</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Spostamento in corso</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>sposta</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Spostato</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Impossibile trovare l\'immagine.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Ripristino in corso</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>ripristina</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Eliminazione in corso</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>elimina definitivamente</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>tutti i pool</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossibile disabilitare l\'esecuzione della copia speculare perché contiene un peer.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"8mBD":function(t,e,n){!function(t){"use strict";t.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},"8xTl":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t){return a.upperFirst(t)}}},"9/5/":function(t,e){var n=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,i=/^0o[0-7]+$/i,s=parseInt,o="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,l=o||u||Function("return this")(),d=Object.prototype.toString,c=Math.max,f=Math.min,h=function(){return l.Date.now()};function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function p(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==d.call(t)}(t))return NaN;if(g(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=g(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var o=r.test(t);return o||i.test(t)?s(t.slice(2),o?2:8):a.test(t)?NaN:+t}t.exports=function(t,e,n){var a,r,i,s,o,u,l=0,d=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=a,i=r;return a=r=void 0,l=e,s=t.apply(i,n)}function v(t){return l=t,o=setTimeout(_,e),d?y(t):s}function x(t){var n=t-u;return void 0===u||n>=e||n<0||b&&t-l>=i}function _(){var t=h();if(x(t))return T(t);o=setTimeout(_,function(t){var n=e-(t-u);return b?f(n,i-(t-l)):n}(t))}function T(t){return o=void 0,m&&a?y(t):(a=r=void 0,s)}function O(){var t=h(),n=x(t);if(a=arguments,r=this,u=t,n){if(void 0===o)return v(u);if(b)return o=setTimeout(_,e),y(u)}return void 0===o&&(o=setTimeout(_,e)),s}return e=p(e)||0,g(n)&&(d=!!n.leading,i=(b="maxWait"in n)?c(p(n.maxWait)||0,e):i,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==o&&clearTimeout(o),l=0,a=u=r=o=void 0},O.flush=function(){return void 0===o?s:T(h())},O}},"93I0":function(t,e,n){var a=n("VpIT"),r=n("kOOl"),i=a("keys");t.exports=function(t){return i[t]||(i[t]=r(t))}},"978R":function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"c",(function(){return f})),n.d(e,"d",(function(){return h}));var a=n("8Y7J"),r=n("hpHm"),i=n("mrSG"),s=n("z/SZ"),o=n("2uy1"),u=n("PqYM");class l{constructor(){this.adaptivePosition=!0,this.placement="top",this.triggers="hover focus",this.delay=0}}class d{constructor(t){Object.assign(this,t)}get isBs3(){return Object(r.d)()}ngAfterViewInit(){this.classMap={in:!1,fade:!1},this.classMap[this.placement]=!0,this.classMap[`tooltip-${this.placement}`]=!0,this.classMap.in=!0,this.animation&&(this.classMap.fade=!0),this.containerClass&&(this.classMap[this.containerClass]=!0)}}let c=0,f=(()=>{class t{constructor(t,e,n,r,i,s){this._elementRef=r,this._renderer=i,this._positionService=s,this.tooltipId=c++,this.tooltipChange=new a.EventEmitter,this.containerClass="",this.tooltipAnimation=!0,this.tooltipFadeDuration=150,this.tooltipStateChanged=new a.EventEmitter,this._tooltip=e.createLoader(this._elementRef,t,this._renderer).provide({provide:l,useValue:n}),Object.assign(this,n),this.onShown=this._tooltip.onShown,this.onHidden=this._tooltip.onHidden}get isOpen(){return this._tooltip.isShown}set isOpen(t){t?this.show():this.hide()}set htmlContent(t){Object(r.i)("tooltipHtml was deprecated, please use `tooltip` instead"),this.tooltip=t}set _placement(t){Object(r.i)("tooltipPlacement was deprecated, please use `placement` instead"),this.placement=t}set _isOpen(t){Object(r.i)("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen=t}get _isOpen(){return Object(r.i)("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen}set _enable(t){Object(r.i)("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled=!t}get _enable(){return Object(r.i)("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled}set _appendToBody(t){Object(r.i)('tooltipAppendToBody was deprecated, please use `container="body"` instead'),this.container=t?"body":this.container}get _appendToBody(){return Object(r.i)('tooltipAppendToBody was deprecated, please use `container="body"` instead'),"body"===this.container}set _popupClass(t){Object(r.i)("tooltipClass deprecated")}set _tooltipContext(t){Object(r.i)("tooltipContext deprecated")}set _tooltipPopupDelay(t){Object(r.i)("tooltipPopupDelay is deprecated, use `delay` instead"),this.delay=t}get _tooltipTrigger(){return Object(r.i)("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers}set _tooltipTrigger(t){Object(r.i)("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers=(t||"").toString()}ngOnInit(){this._tooltip.listen({triggers:this.triggers,show:()=>this.show()}),this.tooltipChange.subscribe(t=>{t||this._tooltip.hide()}),this.onShown.subscribe(()=>{this.setAriaDescribedBy()}),this.onHidden.subscribe(()=>{this.setAriaDescribedBy()})}setAriaDescribedBy(){this._ariaDescribedby=this.isOpen?`tooltip-${this.tooltipId}`:null,this._ariaDescribedby?this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ariaDescribedby):this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby")}toggle(){if(this.isOpen)return this.hide();this.show()}show(){if(this._positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition},preventOverflow:{enabled:this.adaptivePosition}}}),this.isOpen||this.isDisabled||this._delayTimeoutId||!this.tooltip)return;const t=()=>{this._delayTimeoutId&&(this._delayTimeoutId=void 0),this._tooltip.attach(d).to(this.container).position({attachment:this.placement}).show({content:this.tooltip,placement:this.placement,containerClass:this.containerClass,id:`tooltip-${this.tooltipId}`})},e=()=>{this._tooltipCancelShowFn&&this._tooltipCancelShowFn()};if(this.delay){const n=Object(u.a)(this.delay).subscribe(()=>{t(),e()});this.triggers&&Object(r.f)(this.triggers).forEach(t=>{this._tooltipCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,t.close,()=>{n.unsubscribe(),e()})})}else t()}hide(){this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this._tooltip.isShown&&(this._tooltip.instance.classMap.in=!1,setTimeout(()=>{this._tooltip.hide()},this.tooltipFadeDuration))}ngOnDestroy(){this._tooltip.dispose(),this.tooltipChange.unsubscribe(),this.onShown.unsubscribe(),this.onHidden.unsubscribe()}}return Object(i.__decorate)([Object(r.a)(),Object(i.__metadata)("design:type",Object)],t.prototype,"tooltip",void 0),t})();class h{static forRoot(){return{ngModule:h,providers:[l,s.a,o.a]}}}},"9Nap":function(t,e,n){var a=n("/9aa");t.exports=function(t){if("string"==typeof t||a(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},"9Xeq":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},"9d/t":function(t,e,n){var a=n("AO7/"),r=n("xrYK"),i=n("tiKp")("toStringTag"),s="Arguments"==r(function(){return arguments}());t.exports=a?r:function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(n){}}(e=Object(t),i))?n:s?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},"9ggG":function(t,e,n){var a=n("Z0cm"),r=n("/9aa"),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(a(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!r(t))||s.test(t)||!i.test(t)||null!=e&&t in Object(e)}},"9nlD":function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("LvDl"),r=n("2Vo4"),i=n("XNiG"),s=n("mtw6"),o=n("G1I9"),u=n("a0VL"),l=n("ufoC"),d=n("8Y7J"),c=n("EApP");let f=(()=>{class t{constructor(t,e,n){this.toastr=t,this.taskMessageService=e,this.cdDatePipe=n,this.hideToasties=!1,this.dataSource=new r.a([]),this.data$=this.dataSource.asObservable(),this.sidebarSubject=new i.a,this.queued=[],this.KEY="cdNotifications";const s=localStorage.getItem(this.KEY);let u=[];a.isString(s)&&(u=JSON.parse(s,(t,e)=>a.isPlainObject(e)?a.assign(new o.a,e):e)),this.dataSource.next(u)}removeAll(){localStorage.removeItem(this.KEY),this.dataSource.next([])}remove(t){const e=this.dataSource.getValue();e.splice(t,1),this.dataSource.next(e),localStorage.setItem(this.KEY,JSON.stringify(e))}save(t){const e=this.dataSource.getValue();for(e.push(t),e.sort((t,e)=>t.timestamp>e.timestamp?-1:1);e.length>10;)e.pop();this.dataSource.next(e),localStorage.setItem(this.KEY,JSON.stringify(e))}show(t,e,n,r,i){return window.setTimeout(()=>{let s;s=a.isFunction(t)?t():a.isObject(t)?t:new o.b(t,e,n,r,i),this.queueToShow(s)},10)}queueToShow(t){this.cancel(this.queuedTimeoutId),this.queued.find(e=>a.isEqual(e,t))||this.queued.push(t),this.queuedTimeoutId=window.setTimeout(()=>{this.showQueued()},500)}showQueued(){this.getUnifiedTitleQueue().forEach(t=>{const e=new o.a(t);e.isFinishedTask||this.save(e),this.showToasty(e)})}getUnifiedTitleQueue(){return Object.values(this.queueShiftByTitle()).map(t=>{const e=t[0];return t.length>1&&(e.message="<ul>"+t.map(t=>`<li>${t.message}</li>`).join("")+"</ul>"),e})}queueShiftByTitle(){const t={};let e;for(;e=this.queued.shift();)t[e.title]||(t[e.title]=[]),t[e.title].push(e);return t}showToasty(t){this.hideToasties||this.toastr[["error","info","success"][t.type]]((t.message?t.message+"<br>":"")+this.renderTimeAndApplicationHtml(t),t.title,t.options)}renderTimeAndApplicationHtml(t){return`<small class="date">${this.cdDatePipe.transform(t.timestamp)}</small><i class="float-right custom-icon ${t.applicationClass}" title="${t.application}"></i>`}notifyTask(t,e=!0){const n=this.finishedTaskToNotification(t,e);return n.isFinishedTask=!0,this.show(n)}finishedTaskToNotification(t,e=!0){let n;return n=t.success&&e?new o.b(s.a.success,this.taskMessageService.getSuccessTitle(t)):new o.b(s.a.error,this.taskMessageService.getErrorTitle(t),this.taskMessageService.getErrorMessage(t)),n.isFinishedTask=!0,n}cancel(t){window.clearTimeout(t)}suspendToasties(t){this.hideToasties=t}toggleSidebar(t=!1){this.sidebarSubject.next(t)}}return t.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new t(d["ɵɵinject"](c.j),d["ɵɵinject"](l.a),d["ɵɵinject"](u.a))},token:t,providedIn:"root"}),t})()},"9ppp":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return t.prototype=Object.create(Error.prototype),t})()},"9rRi":function(t,e,n){!function(t){"use strict";t.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n("wd/R"))},"A+xa":function(t,e,n){!function(t){"use strict";t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){return t+(/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n("wd/R"))},A2ZE:function(t,e,n){var a=n("HAuM");t.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},A90E:function(t,e,n){var a=n("6sVZ"),r=n("V6Ve"),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!a(t))return r(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},"AO7/":function(t,e,n){var a={};a[n("tiKp")("toStringTag")]="z",t.exports="[object z]"===String(a)},AP2z:function(t,e,n){var a=n("nmnc"),r=Object.prototype,i=r.hasOwnProperty,s=r.toString,o=a?a.toStringTag:void 0;t.exports=function(t){var e=i.call(t,o),n=t[o];try{t[o]=void 0;var a=!0}catch(u){}var r=s.call(t);return a&&(e?t[o]=n:delete t[o]),r}},AQ68:function(t,e,n){!function(t){"use strict";t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n("wd/R"))},AWcq:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("yJti");class r{constructor(){this.vcs=a.a}ngOnInit(){}}},AfCQ:function(t,e,n){"use strict";var a=n("2Vo4"),r=n("qgXg"),i=n("HDdC"),s=n("pxpQ"),o=n("Kqap"),u=n("lJxs"),l=n("7o/Q");class d{constructor(t,e){this.compare=t,this.keySelector=e}call(t,e){return e.subscribe(new c(t,this.compare,this.keySelector))}}class c extends l.a{constructor(t,e,n){super(t),this.keySelector=n,this.hasKey=!1,"function"==typeof e&&(this.compare=e)}compare(t,e){return t===e}_next(t){let e;try{const{keySelector:n}=this;e=n?n(t):t}catch(a){return this.destination.error(a)}let n=!1;if(this.hasKey)try{const{compare:t}=this;n=t(this.key,e)}catch(a){return this.destination.error(a)}else this.hasKey=!0;n||(this.key=e,this.destination.next(t))}}n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return h}));class f extends a.a{constructor(t,e,n){super(t),e.pipe(Object(s.b)(r.a)).pipe(Object(o.a)((t,e)=>e?n(t,e):t,t)).subscribe(t=>this.next(t))}}class h extends i.a{constructor(t,e,n){super(),this._dispatcher=t,this._reducer=e,this.source=n}select(t){return this.source.pipe(Object(u.a)(t)).pipe(t=>t.lift(new d(void 0,void 0)))}lift(t){const e=new h(this._dispatcher,this._reducer,this);return e.operator=t,e}dispatch(t){this._dispatcher.next(t)}next(t){this._dispatcher.next(t)}error(t){this._dispatcher.error(t)}complete(){}}},AiMb:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="zh-CN">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>切换导航</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>仪表盘</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>集群</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>主机</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>对应的服务</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>配置项</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH 索引</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Manager 扩展模块</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>日志</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>存储池</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>块设备</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>映像</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>镜像</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>文件系统</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>对象网关</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>守护进程</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>请选择语言</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>正在加载面板的相关数据…</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana 时间选择工具</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>重新设置</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>返回</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>无法加载数据。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>选中个数</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>命中个数</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>总数</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名称</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>解释</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>更详尽的解释</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>缺省值</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>守护进程的缺省值</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>可选值</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>保存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>检查 CRUSH 索引图</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>正在加载…</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>主机名</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>请填写此栏目!</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>是的,我确定。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>取消</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>关闭</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>主机列表</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>总体性能</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>无法找到相关条目</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>集群日志</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>审计日志</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>正在加载相关配置信息...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>配置信息无法加载。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>编辑 Manager 扩展模块</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>输入值不是有效的 UUID,如:67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>输入的应该是个有效的 IP 地址。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>输入须为数字。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>输入的应该是一个浮点数或者十进制整数。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>集群 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap 修改时间</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con </target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>仲裁成员</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非仲裁成员</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>添加</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>特性</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>集群范围的 OSD 标志</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>提交</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>高级设置…</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 恢复优先级</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>优先级</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>自定义优先级</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>这个字段是必填的!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>权重值必须在 0 和 1 之间</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>重设权重</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深度}}</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深度} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 列表</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>编辑</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>删除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>健康状况</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>统计数据</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>客户端</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任何客户端均可访问</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>地址</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必填项</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>必须包含一个或多个逗号分隔值</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例如:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>访问类型</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>添加客户端</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 无可用集群 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 请选择一个集群 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>添加守护进程</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>存储后端</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 没有可用的数据存储池 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 请选择存储后端 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>对象网关用户</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 无可选用户 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 请选择对象网关用户 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 用户 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 无可用客户端 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- 请选择 cephx 客户端 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 名称</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>安全标签</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>启用安全标签</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 路径</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>路径需以“/”开头,后面可跟单词</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>将创建新文件夹</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>路径</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>路径只能是单个“/”或单词</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>将创建新的桶</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 协议</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 标签</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>客户端不能装入子目录(即如果标记为 foo,则客户端无法装入 foo/baz)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>通过使用不同标记选项,可将同一路径导出多次。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>伪</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>通过使用不同伪选项,可将同一路径导出多次。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 没有可用的访问类型 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 选择访问类型 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 没有可用的 squash --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 选择执行哪种类型的用户 ID 匿名访问 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>传输协议</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>欢迎使用 Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>请输入用户名</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>请输入密码</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>登录</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>抱歉,此用户不存在。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>禁止访问</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>抱歉,您无权访问这个页面。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 配置</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>删除本地的配置项,改用更高作用域的配置值。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小值为 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>存储池列表</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名称只能由字母、数字、短划线和下划线组成。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>此纠删码配置名称已被使用。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>纠删码算法</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>数据块 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>必须大于等于 2</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>校验块 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>必须大于等于 1</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>持久因子 (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>局部性因子 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>CRUSH 故障域</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>CRUSH 局部性</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>无</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>算法</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>packetsize</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>CRUSH 根</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>CRUSH 设备类型</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任意</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>目录</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名称…</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>此 Ceph 存储池名称已被使用。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>存储池类型</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 请选择存储池的类型 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>归置组 (PG)</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>至少需要一个归置组!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>您的集群没法支持这么多的 PG。请重新计算需要的 PG 个数。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>在线 PG 计算器</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>副本个数</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>标志</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 重写 (overwrite)</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>应用类型</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 无纠删码配置可选 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 请选择一个纠删码配置 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>CRUSH 算法规则组</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 选择 CRUSH 规则 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>CRUSH 规则</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>CRUSH 步骤</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>压缩</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>模式</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>算法</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 无可用的纠删码压缩算法 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>blob 大小下限</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>比如 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>取值必须大于 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>blob 大小上限</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>如 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>取值必须大于 blob 大小下限</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>比例</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>压缩率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>取值必须在 0.0 和 1.0 之间</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>如 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>详情</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>性能详情</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>缓存层详细信息</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>将映像移至回收站</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保护期一直到</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>无保护</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日期格式有问题。请使用“YYYY-MM-DD HH:mm:ss”。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保护期限已经过了。请设置一个将来的日期,或者清空不填。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>移动映像</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>概览</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>目标</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>发现身份验证</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>用户名长度必须在 8 到 64 个字符之间,且只能包含\n以下字符:英文字母、“.”、“@”、“-”、“_”或“:”。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>密码</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>互认证用户</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>互认证密码</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>可用信息:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>无可用 iSCSI 目标</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>存储池</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>数据存储池</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>创建</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>对象数</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>对象大小</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>供给容量</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>总供给容量</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>条带单元</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>条带个数</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>父节点</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>块存储名字前缀</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>order</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>快照</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>映像</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>此设置会覆盖全局值</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>全局</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>该值为全局值。没有为此映像设置此选项的值。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>不允许使用“/”和“@”。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 没有可用的 RBD 存储池 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 请选择存储池 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>使用一个专用的数据池</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>数据池</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>为保存 RBD 的对象数据单独分配的存储池。</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>您需要设置大一些的容量。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>高级设置</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>条带</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>条带单元大小</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 选择条带单元大小 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>因为设置了条带个数,所以这个字段是必选的!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>条带单元大小超过了对象大小。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>条带个数</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>因为设置了条带单元大小,所以这个字段是必选的!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>条带的个数必须大于 0。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>您即将进行回滚操作</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>清空回收站</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>全选</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>存储池:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>存储池名称…</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>恢复映像</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>要恢复</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>输入映像的新名称,并点击</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新名称</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>过期时间</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保护期限</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 结构图</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常无须改变这些默认参数值。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>设置</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>后备存储</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>确认</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>高级设置</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>目标限定名</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN 格式错误。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例如:iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>更多信息</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>此目标的高级设置项存在修改。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>端口</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>添加端口</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>此映像的设置项存在修改。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>添加映像</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 身份验证</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>授权人</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>授权人</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>客户端 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>授权人 IQN 必须唯一。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>用户名长度必须在 8 到 64 个字符之间,且只能包含\n以下字符:英文字母、“.”、“@”、“-”、“_”或“:”。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>授权人属于群组。映像须在群组中进行设置。</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>无项目添加。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>添加授权人</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>群组</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>群组</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>添加群组</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>回收站</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>问题</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>正在同步</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>已就绪</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>编辑存储池镜像模式</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>在禁用镜像功能前必须先移除同伴集群。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {编辑} other {添加} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>集群名称</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>集群名称无效。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID 无效。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Monitor 地址</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>逗号分割的地址...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Monitor 地址无效。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 密钥</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64 编码的密钥...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 密钥必须是 base64 编码的。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>无法读取性能计数器</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>守护进程列表</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>性能计数器</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>正在加载存储桶数据…</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>输入值无效。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>所选名称已经被使用。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>所有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 请选择一个用户 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>开启</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>索引类型</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>归置规则</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>标识</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>max marker</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>主版本</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>修改时间</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>zonegroup</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>存储桶配额</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大数目</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>无限制</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大对象数目</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>用户名</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 请选择用户名 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>自动生成密钥</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>访问密钥</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>秘密密钥</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>全名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>邮箱</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>冻结</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>系统</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大存储桶数目</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>子用户</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>用户权限</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>用户配额</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>显示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>密钥</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>类型</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 请选择一个类型 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>权限</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 请选择权限类型 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>子用户</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>所选的子用户 ID 已被使用。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>读、写</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>全部</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift 密钥</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>自动生成密钥</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>正在加载用户数据…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>用户数据无法加载。 </target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>所选的用户 ID 已被使用。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>无效的邮箱地址。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>此邮箱地址已被使用。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>存储桶个数的上限</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>禁用</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>自定义</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 密钥</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>没有子用户。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>没有任何密钥。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>权限为空。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>空间无限制</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>空间上限</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>对象个数无限制</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>对象个数上限</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>设置的值必须 &gt;= 0。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>描述…</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>权限</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>角色</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>确认密码</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>密码和之前的输入不匹配。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>邮箱</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>邮箱地址无效。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>您即将取消您自己用户的 "user read / update" 权限。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>如果您继续的话,您以后就没办法为其他用户添加或者删除角色了。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>您确实要继续吗?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>帮助</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>文档</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>关于</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>仪表盘设置</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>用户管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>登录的用户</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>登出</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>OSD map</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>元数据不可用</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>相关元数据</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>性能计数器</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>写入请求</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>读取请求</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>直方图</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>当前值</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>下限</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>上限</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>来源</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>级别</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>可在运行时更新(可编辑)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>标记</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>可选项</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>参见</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>集群状态</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>manager 守护进程</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>对象网关</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>metadata 服务器</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 网关</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>客户端 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>客户端吞吐量</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>客户端读/写</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>恢复吞吐量</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>洗刷</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>性能</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>基本容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>每个 OSD 的 PG 数</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 状态</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>排位</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>当前</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>已更新发现身份验证</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>无可用端口。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>无可用映像。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>无可用映像。请确保为目标添加一个映像。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>无可用授权人。请确保为目标添加一个授权人。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>目标</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>读字节数</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>写字节数</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>读请求数</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>写请求数</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>活动/优化自</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>实例</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>问题</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>进度</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>编辑模式</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>添加 peer</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>编辑 peer</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>删除 peer</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># 本地</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># 远程</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>镜像 peer</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>密钥</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>完全展开</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>分层</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>互斥锁</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>object map(要求互斥锁支持)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>日志(要求互斥锁支持)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>无保护的</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 快照回滚</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>回滚</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 快照</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>定点删除</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>类型</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>状态</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>主机</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>根</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>备用服务</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>排位</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>守护进程</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>活跃度</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用率</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>更新完成</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>该值可在运行时更新。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>服务器或客户端不会主动从 monitor 的配置数据库读取这个配置。\n 所以不能用“ceph config set ...”设置它。但是可以通过\n ceph.conf 或者用命令行进行配置。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>该配置只有在服务启动的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>该配置只在创建集群的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>该配置只在服务创建的时候才会生效。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>服务</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>当前值</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>可编辑</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>启用</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>禁用</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>正在重新连接,请稍候…</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>外部地址</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>活动会话</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>禁止加入</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>之前被除名的 OSD 在启动之后,不会被加入集群</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>禁止除名</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>在发现 OSD 没有响应之后一段时间,该 OSD 会被踢出集群。该标志会禁止这个功能。</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>禁止启用</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>不允许 OSD 启动</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>禁止停用</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>当前不受理对 OSD 的失效报告,因而 monitor 不会停用 OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>暂停</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>暂停读写</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>禁止洗刷</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>洗刷已禁止</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>禁止深层洗刷</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>深层洗刷已禁止</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>禁止回填</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG 回填已推迟</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>禁止恢复</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG 恢复已推迟</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>逐位排序</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>使用逐位排序</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>老版本的快照已全部升级</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD 上的快照已全部转换完毕</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>在恢复时进行删除操作</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>在恢复时,而非对齐阶段进行删除</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 日志硬限制</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>为 pg 日志长度添加硬限制</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>已更新 OSD 标志</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>除名</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>加入</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>停用</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>标记</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 丢失</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>已标记丢失</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>销毁</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>已销毁</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>删除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>读字节数</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>写字节数</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>读请求数</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>写请求数</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大回填量</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>最大活跃恢复请求数</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>最大单次恢复操作数</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>恢复/回填操作间隔睡眠时间</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>任务</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>严重程度</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>已启动</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>已使用</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>空闲</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>正常</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>运行中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警报</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>未知</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>启用中</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>无文件系统</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>工作</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>待机</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>工作的守护进程</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganesha 服务的配置还没有完成。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>传输</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 用户</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 文件系统</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(继承自全局配置)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>继承自全局配置</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 选择执行哪种类型的用户 ID 匿名访问 --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>没有可用的守护进程。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>缓存模式</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>最少延迟赶出时间</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>最少延迟刷回时间</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>目标器最大字节数</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>目标器最大对象数</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>还没有任何应用标记</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>应用标记到了上限</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>一个存储池最多能有四个应用标记。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>可用的字符为“_a-zA-Z0-9”</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>长度限制为 128 个字符</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>添加应用标记或根据其进行筛选</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>添加应用标记</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>副本个数</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>最后修改时间</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>纠删码配置</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>CRUSH 规则集</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>存储桶</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>用户</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>作用范围</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>读权限</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>新建</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>系统角色</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>更新用户</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>继续</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>您被自动登出,因为您的角色有了变动。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target> 各对象都被分割为数据块,分别存储于不同 OSD 。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>计算各对象的编码块、并存储于不同 OSD 。\n编码块的数量等同于在不丢数据的前提下允许同时失效的 OSD 数量。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>jerasure 插件是最通用、最灵活的插件,\n也是 Ceph 纠删码存储池的默认插件。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>reed_sol_van 技术更灵活:它足以设置 k 和 m 值。 \ncauchy_good 技术更快,但你得谨慎地选择 packetsize 值。\nreed_sol_r6_op 、 liberation 、 blaum_roth 、 liber8tion 都是与 RAID6 等价的技术,\n它们只能配置为 m=2 。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target> 以 bytes 大小的包为单位进行编码。\n确定合适的包尺寸很难, \njerasure 文档对此有很详细的描述。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>用 jerasure 插件时,纠删码编码的对象存储在多个 OSD 上,\n丢失一个 OSD 的恢复过程需读取所有其他的 OSD 。\n比如 jerasure 的配置为 k=8 且 m=4 ,丢失一个 OSD 后需读取其他 11 个 OSD 才能恢复。\n\nlrc 纠删码插件创建的是局部校验块,这样只需较少的 OSD 即可恢复。\n比如 lrc 的配置为 k=8 、 m=4 且 l=4 ,它将为每四个 OSD 创建额外的校验块,\n当一个 OSD 丢失时,它只需四个 OSD 即可恢复,而不需要十一个。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>把编码块和数据块分组为大小为 locality 的集合。\n比如, k=4 且 m=2 时,若设置 locality=3 ,将会分组为大小为三的两组,\n这样各组都能自行恢复,无需从另一组读数据块。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>由 l 定义的块集合将按哪种 crush 桶类型存储。\n比如,若设置为 rack ,大小为 l 块的各组将被存入不同的机架,\n此值会被用于创建类似 step choose rack 的规则集。\n如果没设置,就不会这样分组。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 插件封装了 ISA 库。它只能运行在 Intel 处理器上。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 插件包含两种 Reed Solomon 编码形式。\n设置为 reed_sol_van 表示用 Vandermonde 算法,设置为 cauchy 表示用 Cauchy 算法。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec 插件封装了 multiple SHEC 库。\n与 Reed Solomon 编码相比,它能使 Ceph 更高效地恢复数据。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target> 奇偶校验块数量,它们在各自的计算范围内包含了各数据块。\n此数值被用作持久性估值。\n例如,假设 c=2 ,就是说不丟数据的情况下可损失 2 个 OSD 。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>规则集第一步所指向的 CRUSH 桶之名,\n如 step take default 。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>确保两个编码块不会存在于同一故障域的桶里面。\n比如,假设故障域是 host ,就不会有两个编码块存储到同一主机;\n此值用于在规则集中创建类似 step chooseleaf host 的步骤。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>使用 CRUSH 索引中的 crush 设备类名,\n将归置限制于特定类的设备(例如,ssd 或 hdd)。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>设置纠删码插件所在目录。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>允许所有操作</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>只允许不修改服务器端数据的操作</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>禁止读写,但是允许其他的操作</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>禁止读、写以及任何可能修改文件内容的操作</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>完全禁止访问</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 选择优先级 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>信息</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>过去 5 分钟</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>过去 15 分钟</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>过去 30 分钟</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>过去 1 小时(默认)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>过去 3 小时</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>过去 6 小时</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>过去 12 小时</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>过去 24 小时</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨天</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>今天</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>今天到现在为止</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>前天</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>过去 2 天</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>上周的今天</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>上个星期</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>本周</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>本周以来</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>过去 7 天</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>上个月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>当月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>本月以来</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>过去 30 天</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>过去 90 天</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>过去 6 个月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>过去 1 年</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>去年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年以来</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>过去 2 年</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>过去 5 年</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>无选中项目。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>取消选择</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>达到选择项数上限。</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>过滤标签</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>添加 badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>无可选项目。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>复制</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>深层洗刷</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>销毁</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>展开</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>标记为停用</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>标记为加入</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>标记为丢失</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>标记为已除名</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保护</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>重命名</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>恢复</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>移至回收站</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>解除保护</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>删除完成</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>克隆完成</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>复制完成</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>展开完成</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>已经把</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>回滚完成</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>是</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>否</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>服务质量 (QoS)</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>指定的每秒 IO 字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>指定的每秒 IO 操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>读 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>指定的每秒内读取的字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>读 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>指定的每秒读操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>写 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>指定的每秒内写入的字节数上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>写 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>指定的每秒写操作次数上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>指定的 IO 字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>指定的 IO 操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>读 BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>指定的读取的字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>读 IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>指定的读操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>写 BPS 突发</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>指定的写入的字节数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>写 IOPS 突发</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>指定的写操作次数突发上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>正在执行</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>执行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>执行完毕</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>未知任务</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>正在创建</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>创建</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>正在更新</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>正在删除</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>正在克隆</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>正在复制</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>复制</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>正在展开</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>展开</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>正在回滚</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>回滚</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>正在把</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>把</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>已经把</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>无法找到映像。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>正在把</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>把</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>正在清除</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>所有存储池</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>因为包含同伴集群,无法禁用镜像功能</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},Avrn:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("aexS"),r=n("8Y7J"),i=n("iInd");let s=(()=>{class t{constructor(t,e){this.router=t,this.authStorageService=e}canActivate(t,e){return!!this.authStorageService.isLoggedIn()||(this.router.navigate(["/login"],{queryParams:{returnUrl:e.url}}),!1)}canActivateChild(t,e){return this.canActivate(t,e)}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t(r["ɵɵinject"](i.m),r["ɵɵinject"](a.a))},token:t,providedIn:"root"}),t})()},AvvY:function(t,e,n){!function(t){"use strict";t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})}(n("wd/R"))},AxL3:function(t,e){var n=!("undefined"==typeof window||!window.document||!window.document.createElement);t.exports=n},B55N:function(t,e,n){!function(t){"use strict";t.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(t){return t.week()<this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(t){return this.week()<t.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n("wd/R"))},B8du:function(t,e){t.exports=function(){return!1}},BFxc:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("4I5i"),i=n("EY2u");function s(t){return function(e){return 0===t?Object(i.b)():e.lift(new o(t))}}class o{constructor(t){if(this.total=t,this.total<0)throw new r.a}call(t,e){return e.subscribe(new u(t,this.total))}}class u extends a.a{constructor(t,e){super(t),this.total=e,this.ring=new Array,this.count=0}_next(t){const e=this.ring,n=this.total,a=this.count++;e.length<n?e.push(t):e[a%n]=t}_complete(){const t=this.destination;let e=this.count;if(e>0){const n=this.count>=this.total?this.total:this.count,a=this.ring;for(let r=0;r<n;r++){const r=e++%n;t.next(a[r])}}t.complete()}}},BQkM:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return`${t} IOPS`}}},BVg3:function(t,e,n){!function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,a,r){var i=t+" ";switch(a){case"s":return n||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return e(t)?i+(n||r?"sekúndur":"sekúndum"):i+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?i+(n||r?"mínútur":"mínútum"):n?i+"mínúta":i+"mínútu";case"hh":return e(t)?i+(n||r?"klukkustundir":"klukkustundum"):i+"klukkustund";case"d":return n?"dagur":r?"dag":"degi";case"dd":return e(t)?n?i+"dagar":i+(r?"daga":"dögum"):n?i+"dagur":i+(r?"dag":"degi");case"M":return n?"mánuður":r?"mánuð":"mánuði";case"MM":return e(t)?n?i+"mánuðir":i+(r?"mánuði":"mánuðum"):n?i+"mánuður":i+(r?"mánuð":"mánuði");case"y":return n||r?"ár":"ári";case"yy":return e(t)?i+(n||r?"ár":"árum"):i+(n||r?"ár":"ári")}}t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},BiGR:function(t,e,n){var a=n("nmnc"),r=n("03A+"),i=n("Z0cm"),s=a?a.isConcatSpreadable:void 0;t.exports=function(t){return i(t)||r(t)||!!(s&&t&&t[s])}},Bs8V:function(t,e,n){var a=n("g6v/"),r=n("0eef"),i=n("XGwC"),s=n("/GqU"),o=n("wE6v"),u=n("UTVS"),l=n("DPsx"),d=Object.getOwnPropertyDescriptor;e.f=a?d:function(t,e){if(t=s(t),e=o(e,!0),l)try{return d(t,e)}catch(n){}if(u(t,e))return i(!r.f.call(t,e),t[e])}},ByF4:function(t,e,n){!function(t){"use strict";t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},C523:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("gk6K"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e,n,a){this.el=t,this.renderer=e,this.treeDraggedElement=n,this.ngZone=a,this.dragEventHandler=this.onDrag.bind(this)}return t.prototype.ngAfterViewInit=function(){var t=this,e=this.el.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("drag",t.dragEventHandler)}))},t.prototype.ngDoCheck=function(){this.renderer.setAttribute(this.el.nativeElement,"draggable",this.treeDragEnabled?"true":"false")},t.prototype.ngOnDestroy=function(){this.el.nativeElement.removeEventListener("drag",this.dragEventHandler)},t.prototype.onDragStart=function(t){t.dataTransfer.setData("text",t.target.id),this.treeDraggedElement.set(this.draggedElement),this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragStart",t)},t.prototype.onDrag=function(t){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("drag",t)},t.prototype.onDragEnd=function(){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragEnd"),this.treeDraggedElement.set(null)},i([Object(a.Input)("treeDrag"),s("design:type",Object)],t.prototype,"draggedElement",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"treeDragEnabled",void 0),i([Object(a.HostListener)("dragstart",["$event"]),s("design:type",Function),s("design:paramtypes",[Object]),s("design:returntype",void 0)],t.prototype,"onDragStart",null),i([Object(a.HostListener)("dragend"),s("design:type",Function),s("design:paramtypes",[]),s("design:returntype",void 0)],t.prototype,"onDragEnd",null),i([Object(a.Directive)({selector:"[treeDrag]"}),s("design:paramtypes",[a.ElementRef,a.Renderer2,r.a,a.NgZone])],t)}()},C6Ij:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("DqMs"),i=n("/NlG"),s=n("GiVz"),o=n("SVse");n("AWcq"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return p}));var u=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","info"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Retrieving data"])),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[". Please wait..."]))],(function(t,e){var n=e.component;t(e,1,0,"info"),t(e,5,0,n.statusFor)}),null)}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","warning"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Displaying previously cached data"])),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,["."]))],(function(t,e){var n=e.component;t(e,1,0,"warning"),t(e,5,0,n.statusFor)}),null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,[" for "])),(t()(),a["ɵeld"](2,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,2,0,e.component.statusFor)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"cd-alert-panel",[["type","error"]],null,null,null,r.b,r.a)),a["ɵdid"](1,114688,null,0,i.a,[s.a],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,null,null,null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Could not load data"])),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[". Please check the cluster health."]))],(function(t,e){var n=e.component;t(e,1,0,"error"),t(e,5,0,n.statusFor)}),null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](1,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](3,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](5,16384,null,0,o.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.status===n.vcs.ValueNone),t(e,3,0,n.status===n.vcs.ValueStale),t(e,5,0,n.status===n.vcs.ValueException)}),null)}},CFvb:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a={LEFT:37,UP:38,RIGHT:39,DOWN:40,ENTER:13,SPACE:32,CONTEXT_MENU:32}},CH3K:function(t,e){t.exports=function(t,e){for(var n=-1,a=e.length,r=t.length;++n<a;)t[r+n]=e[n];return t}},CMye:function(t,e,n){var a=n("GoyQ");t.exports=function(t){return t==t&&!a(t)}},CNMR:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return s})),n.d(e,"c",(function(){return u}));var a=n("mrSG"),r=n("8Y7J"),i=n("hpHm");class s{constructor(){this.type="warning",this.dismissible=!1,this.dismissOnTimeout=void 0}}let o=(()=>{class t{constructor(t,e){this.changeDetection=e,this.type="warning",this.dismissible=!1,this.isOpen=!0,this.onClose=new r.EventEmitter,this.onClosed=new r.EventEmitter,this.classes="",this.dismissibleChange=new r.EventEmitter,Object.assign(this,t),this.dismissibleChange.subscribe(t=>{this.classes=this.dismissible?"alert-dismissible":"",this.changeDetection.markForCheck()})}ngOnInit(){this.dismissOnTimeout&&setTimeout(()=>this.close(),parseInt(this.dismissOnTimeout,10))}close(){this.isOpen&&(this.onClose.emit(this),this.isOpen=!1,this.changeDetection.markForCheck(),this.onClosed.emit(this))}}return Object(a.__decorate)([Object(i.a)(),Object(a.__metadata)("design:type",Object)],t.prototype,"dismissible",void 0),t})();class u{static forRoot(){return{ngModule:u,providers:[s]}}}},CZoQ:function(t,e){t.exports=function(t,e,n){for(var a=n-1,r=t.length;++a<r;)if(t[a]===e)return a;return-1}},Cfvw:function(t,e,n){"use strict";var a=n("HDdC"),r=n("SeVD"),i=n("quSY"),s=n("kJWO"),o=n("jZKg"),u=n("Lhse"),l=n("c2HN"),d=n("I55L");function c(t,e){return e?function(t,e){if(null!=t){if(function(t){return t&&"function"==typeof t[s.a]}(t))return function(t,e){return new a.a(n=>{const a=new i.a;return a.add(e.schedule(()=>{const r=t[s.a]();a.add(r.subscribe({next(t){a.add(e.schedule(()=>n.next(t)))},error(t){a.add(e.schedule(()=>n.error(t)))},complete(){a.add(e.schedule(()=>n.complete()))}}))})),a})}(t,e);if(Object(l.a)(t))return function(t,e){return new a.a(n=>{const a=new i.a;return a.add(e.schedule(()=>t.then(t=>{a.add(e.schedule(()=>{n.next(t),a.add(e.schedule(()=>n.complete()))}))},t=>{a.add(e.schedule(()=>n.error(t)))}))),a})}(t,e);if(Object(d.a)(t))return Object(o.a)(t,e);if(function(t){return t&&"function"==typeof t[u.a]}(t)||"string"==typeof t)return function(t,e){if(!t)throw new Error("Iterable cannot be null");return new a.a(n=>{const a=new i.a;let r;return a.add(()=>{r&&"function"==typeof r.return&&r.return()}),a.add(e.schedule(()=>{r=t[u.a](),a.add(e.schedule((function(){if(n.closed)return;let t,e;try{const n=r.next();t=n.value,e=n.done}catch(a){return void n.error(a)}e?n.complete():(n.next(t),this.schedule())})))})),a})}(t,e)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")}(t,e):t instanceof a.a?t:new a.a(Object(r.a)(t))}n.d(e,"a",(function(){return c}))},ChqD:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},CjzT:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},CoRJ:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n("wd/R"))},CoVI:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("2vnA"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e){this.templateRef=t,this.viewContainer=e,this.templateBindings={}}return t.prototype.ngOnInit=function(){this.view=this.viewContainer.createEmbeddedView(this.templateRef),this.dispose&&this.dispose(),this.shouldDetach()&&this.view.detach(),this.autoDetect(this.view)},t.prototype.shouldDetach=function(){return this.treeMobxAutorun&&this.treeMobxAutorun.detach},t.prototype.autoDetect=function(t){this.dispose=Object(r.b)((function(){return t.detectChanges()}))},t.prototype.ngOnDestroy=function(){this.dispose&&this.dispose()},i([Object(a.Input)(),s("design:type",Object)],t.prototype,"treeMobxAutorun",void 0),i([Object(a.Directive)({selector:"[treeMobxAutorun]"}),s("design:paramtypes",[a.TemplateRef,a.ViewContainerRef])],t)}()},Cwc5:function(t,e,n){var a=n("NKxu"),r=n("Npjl");t.exports=function(t,e){var n=r(t,e);return a(n)?n:void 0}},CxY0:function(t,e,n){"use strict";var a=n("nYho"),r=n("Nehr");function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}e.parse=v,e.resolve=function(t,e){return v(t,!1,!0).resolve(e)},e.resolveObject=function(t,e){return t?v(t,!1,!0).resolveObject(e):e},e.format=function(t){return r.isString(t)&&(t=v(t)),t instanceof i?t.format():i.prototype.format.call(t)},e.Url=i;var s=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,u=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),d=["'"].concat(l),c=["%","/","?",";","#"].concat(d),f=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,g=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,p={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n("r8II");function v(t,e,n){if(t&&r.isObject(t)&&t instanceof i)return t;var a=new i;return a.parse(t,e,n),a}i.prototype.parse=function(t,e,n){if(!r.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),o=-1!==i&&i<t.indexOf("#")?"?":"#",l=t.split(o);l[0]=l[0].replace(/\\/g,"/");var v=t=l.join(o);if(v=v.trim(),!n&&1===t.split("#").length){var x=u.exec(v);if(x)return this.path=v,this.href=v,this.pathname=x[1],x[2]?(this.search=x[2],this.query=e?y.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var _=s.exec(v);if(_){var T=(_=_[0]).toLowerCase();this.protocol=T,v=v.substr(_.length)}if(n||_||v.match(/^\/\/[^@\/]+@[^@\/]+/)){var O="//"===v.substr(0,2);!O||_&&b[_]||(v=v.substr(2),this.slashes=!0)}if(!b[_]&&(O||_&&!m[_])){for(var w,S,I=-1,N=0;N<f.length;N++)-1!==(C=v.indexOf(f[N]))&&(-1===I||C<I)&&(I=C);for(-1!==(S=-1===I?v.lastIndexOf("@"):v.lastIndexOf("@",I))&&(w=v.slice(0,S),v=v.slice(S+1),this.auth=decodeURIComponent(w)),I=-1,N=0;N<c.length;N++){var C;-1!==(C=v.indexOf(c[N]))&&(-1===I||C<I)&&(I=C)}-1===I&&(I=v.length),this.host=v.slice(0,I),v=v.slice(I),this.parseHost(),this.hostname=this.hostname||"";var R="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!R)for(var A=this.hostname.split(/\./),k=(N=0,A.length);N<k;N++){var E=A[N];if(E&&!E.match(h)){for(var L="",D=0,P=E.length;D<P;D++)E.charCodeAt(D)>127?L+="x":L+=E[D];if(!L.match(h)){var M=A.slice(0,N),q=A.slice(N+1),j=E.match(g);j&&(M.push(j[1]),q.unshift(j[2])),q.length&&(v="/"+q.join(".")+v),this.hostname=M.join(".");break}}}this.hostname=this.hostname.length>255?"":this.hostname.toLowerCase(),R||(this.hostname=a.toASCII(this.hostname)),this.host=(this.hostname||"")+(this.port?":"+this.port:""),this.href+=this.host,R&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==v[0]&&(v="/"+v))}if(!p[T])for(N=0,k=d.length;N<k;N++){var F=d[N];if(-1!==v.indexOf(F)){var G=encodeURIComponent(F);G===F&&(G=escape(F)),v=v.split(F).join(G)}}var V=v.indexOf("#");-1!==V&&(this.hash=v.substr(V),v=v.slice(0,V));var z=v.indexOf("?");return-1!==z?(this.search=v.substr(z),this.query=v.substr(z+1),e&&(this.query=y.parse(this.query)),v=v.slice(0,z)):e&&(this.search="",this.query={}),v&&(this.pathname=v),m[T]&&this.hostname&&!this.pathname&&(this.pathname="/"),(this.pathname||this.search)&&(this.path=(this.pathname||"")+(this.search||"")),this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=(t=encodeURIComponent(t)).replace(/%3A/i,":"),t+="@");var e=this.protocol||"",n=this.pathname||"",a=this.hash||"",i=!1,s="";this.host?i=t+this.host:this.hostname&&(i=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&r.isObject(this.query)&&Object.keys(this.query).length&&(s=y.stringify(this.query));var o=this.search||s&&"?"+s||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||m[e])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),a&&"#"!==a.charAt(0)&&(a="#"+a),o&&"?"!==o.charAt(0)&&(o="?"+o),e+i+(n=n.replace(/[?#]/g,(function(t){return encodeURIComponent(t)})))+(o=o.replace("#","%23"))+a},i.prototype.resolve=function(t){return this.resolveObject(v(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(r.isString(t)){var e=new i;e.parse(t,!1,!0),t=e}for(var n=new i,a=Object.keys(this),s=0;s<a.length;s++){var o=a[s];n[o]=this[o]}if(n.hash=t.hash,""===t.href)return n.href=n.format(),n;if(t.slashes&&!t.protocol){for(var u=Object.keys(t),l=0;l<u.length;l++){var d=u[l];"protocol"!==d&&(n[d]=t[d])}return m[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(t.protocol&&t.protocol!==n.protocol){if(!m[t.protocol]){for(var c=Object.keys(t),f=0;f<c.length;f++){var h=c[f];n[h]=t[h]}return n.href=n.format(),n}if(n.protocol=t.protocol,t.host||b[t.protocol])n.pathname=t.pathname;else{for(var g=(t.pathname||"").split("/");g.length&&!(t.host=g.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==g[0]&&g.unshift(""),g.length<2&&g.unshift(""),n.pathname=g.join("/")}return n.search=t.search,n.query=t.query,n.host=t.host||"",n.auth=t.auth,n.hostname=t.hostname||t.host,n.port=t.port,(n.pathname||n.search)&&(n.path=(n.pathname||"")+(n.search||"")),n.slashes=n.slashes||t.slashes,n.href=n.format(),n}var p=n.pathname&&"/"===n.pathname.charAt(0),y=t.host||t.pathname&&"/"===t.pathname.charAt(0),v=y||p||n.host&&t.pathname,x=v,_=n.pathname&&n.pathname.split("/")||[],T=(g=t.pathname&&t.pathname.split("/")||[],n.protocol&&!m[n.protocol]);if(T&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===g[0]?g[0]=t.host:g.unshift(t.host)),t.host=null),v=v&&(""===g[0]||""===_[0])),y)n.host=t.host||""===t.host?t.host:n.host,n.hostname=t.hostname||""===t.hostname?t.hostname:n.hostname,n.search=t.search,n.query=t.query,_=g;else if(g.length)_||(_=[]),_.pop(),_=_.concat(g),n.search=t.search,n.query=t.query;else if(!r.isNullOrUndefined(t.search))return T&&(n.hostname=n.host=_.shift(),(N=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=N.shift(),n.host=n.hostname=N.shift())),n.search=t.search,n.query=t.query,r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n;if(!_.length)return n.pathname=null,n.path=n.search?"/"+n.search:null,n.href=n.format(),n;for(var O=_.slice(-1)[0],w=(n.host||t.host||_.length>1)&&("."===O||".."===O)||""===O,S=0,I=_.length;I>=0;I--)"."===(O=_[I])?_.splice(I,1):".."===O?(_.splice(I,1),S++):S&&(_.splice(I,1),S--);if(!v&&!x)for(;S--;S)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),w&&"/"!==_.join("/").substr(-1)&&_.push("");var N,C=""===_[0]||_[0]&&"/"===_[0].charAt(0);return T&&(n.hostname=n.host=C?"":_.length?_.shift():"",(N=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=N.shift(),n.host=n.hostname=N.shift())),(v=v||n.host&&_.length)&&!C&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=t.auth||n.auth,n.slashes=n.slashes||t.slashes,n.href=n.format(),n},i.prototype.parseHost=function(){var t=this.host,e=o.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},"D/JM":function(t,e,n){!function(t){"use strict";t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},D0XW:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("3N8a");const r=new(n("IjjT").a)(a.a)},D4zM:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e){this.elementRef=t,this.renderer=e}ngOnInit(){this.renderer.setAttribute(this.elementRef.nativeElement,"tabindex","-1"),this.iElement=this.renderer.createElement("i"),this.renderer.addClass(this.iElement,"fa"),this.renderer.appendChild(this.elementRef.nativeElement,this.iElement),this.update()}getInputElement(){return document.getElementById(this.cdPasswordButton)}update(){const t=this.getInputElement();t&&"text"===t.type?(this.renderer.removeClass(this.iElement,"fa-eye"),this.renderer.addClass(this.iElement,"fa-eye-slash")):(this.renderer.removeClass(this.iElement,"fa-eye-slash"),this.renderer.addClass(this.iElement,"fa-eye"))}onClick(){const t=this.getInputElement();t.type="password"===t.type?"text":"password",this.update()}}},DH7j:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>Array.isArray||(t=>t&&"number"==typeof t.length))()},"DKr+":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["thodde secondanim","thodde second"],ss:[t+" secondanim",t+" second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka voran","ek vor"],hh:[t+" voranim",t+" voram"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?r[n][0]:r[n][1]}t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})}(n("wd/R"))},DNAf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{constructor(t,e){this.customValidations={},this.i18n=e,this.empty=this.i18n("No items selected."),this.selectionLimit={tooltip:this.i18n("Deselect item to select again"),text:this.i18n("Selection limit reached")},this.filter=this.i18n("Filter tags"),this.add=this.i18n("Add badge"),this.noOptions=this.i18n("There are no items available."),a.merge(this,t)}}},DPsx:function(t,e,n){var a=n("g6v/"),r=n("0Dky"),i=n("zBJ4");t.exports=!a&&!r((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},DSRE:function(t,e,n){(function(t){var a=n("Kz5y"),r=n("B8du"),i=e&&!e.nodeType&&e,s=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=s&&s.exports===i?a.Buffer:void 0;t.exports=(o?o.isBuffer:void 0)||r}).call(this,n("YuTi")(t))},DSvg:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("vkgz"),r=n("aexS"),i=n("8Y7J"),s=n("IheW"),o=n("iInd"),u=n("pL04");let l=(()=>{class t{constructor(t,e,n){this.authStorageService=t,this.http=e,this.router=n}check(t){return this.http.post("api/auth/check",{token:t})}login(t){return this.http.post("api/auth",t).pipe(Object(a.a)(t=>{this.authStorageService.set(t.username,t.token,t.permissions,t.sso,t.pwdExpirationDate,t.pwdUpdateRequired)}))}logout(t=null){return this.http.post("api/auth/logout",null).subscribe(e=>{this.router.navigate(["/login"],{skipLocationChange:!0}),this.authStorageService.remove(),t&&t(),window.location.replace(e.redirect_url)})}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](r.a),i["ɵɵinject"](s.c),i["ɵɵinject"](o.m))},token:t,providedIn:u.a}),t})()},Dkky:function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n("wd/R"))},Dmvi:function(t,e,n){!function(t){"use strict";t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},DoHr:function(t,e,n){!function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(t,n){switch(n){case"d":case"D":case"Do":case"DD":return t;default:if(0===t)return t+"'ıncı";var a=t%10;return t+(e[a]||e[t%100-a]||e[t>=100?100:null])}},week:{dow:1,doy:7}})}(n("wd/R"))},DqMs:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("IZUe"),s=n("MdoF"),o=n("CNMR");n("/NlG"),n("GiVz"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return v}));var u=a["ɵcrt"]({encapsulation:0,styles:[[".alert-panel-icon[_ngcontent-%COMP%]{vertical-align:top;padding-right:.5em}.alert-panel-title[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"td",[["class","alert-panel-icon"],["rowspan","2"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpad"](4,1)],(function(t,e){var n=e.component,r=a["ɵinlineInterpolate"](2,"alert-",n.bootstrapClass," ",n.typeIcon,""),i=t(e,4,0,n.icons.large3x);t(e,3,0,r,i)}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-title"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,2,"td",[["class","alert-panel-text"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](9,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.showIcon),t(e,5,0,n.showTitle),t(e,9,0,a["ɵnov"](e.parent,6))}),null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-icon"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"i",[["aria-hidden","true"]],[[8,"className",0]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](2,"alert-",n.bootstrapClass," ",n.typeIcon,""))}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"td",[["class","alert-panel-title"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](5,0,null,null,2,"td",[["class","alert-panel-text"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](7,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.showIcon),t(e,4,0,n.showTitle),t(e,7,0,a["ɵnov"](e.parent,6))}),null)}function m(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],null,null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"button",[["autofocus",""],["class","btn btn-light tc_backButton"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.backAction.emit()&&a),a}),null,null)),a["ɵdid"](2,4210688,null,0,i.a,[a.ElementRef],{autofocus:[0,"autofocus"]},null),(t()(),a["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,2,0,"")}),null)}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"alert",[],null,null,null,s.c,s.b)),a["ɵdid"](1,114688,null,0,o.a,[o.b,a.ChangeDetectorRef],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,3,"table",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["slim",2]],null,0,null,b)),(t()(),a["ɵand"](0,[["content",2]],null,0,null,m)),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](8,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](1,"",n.bootstrapClass,"")),t(e,4,0,"normal"===n.size,a["ɵnov"](e,5)),t(e,8,0,n.backAction.observers.length>0)}),null)}},"Dw+G":function(t,e,n){var a=n("juv8"),r=n("mTTR");t.exports=function(t,e){return t&&a(e,r(e),t)}},Dwqy:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("wd/R");class r{constructor(){}transform(t){return t?a(1e3*t).fromNow():"unknown"}}},DxQv:function(t,e,n){!function(t){"use strict";t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},DzJC:function(t,e,n){var a=n("sEfC"),r=n("GoyQ");t.exports=function(t,e,n){var i=!0,s=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return r(n)&&(i="leading"in n?!!n.leading:i,s="trailing"in n?!!n.trailing:s),a(t,e,{leading:i,maxWait:e,trailing:s})}},Dzi0:function(t,e,n){!function(t){"use strict";t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n("wd/R"))},"E+lV":function(t,e,n){!function(t){"use strict";var e={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},E2fk:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return"[INF]"===t?"info":"[WRN]"===t?"warn":"[ERR]"===t?"err":""}}},E2jh:function(t,e,n){var a,r=n("2gN3"),i=(a=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";t.exports=function(t){return!!i&&i in t}},E9XD:function(t,e,n){"use strict";var a=n("I+eb"),r=n("1Y/n").left,i=n("pkCn"),s=n("rkAj"),o=i("reduce"),u=s("reduce",{1:0});a({target:"Array",proto:!0,forced:!o||!u},{reduce:function(t){return r(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},EA7m:function(t,e,n){var a=n("zZ0H"),r=n("Ioao"),i=n("wclG");t.exports=function(t,e){return i(r(t,e,a),t+"")}},EApP:function(t,e,n){"use strict";n.d(e,"a",(function(){return _})),n.d(e,"b",(function(){return d})),n.d(e,"c",(function(){return v})),n.d(e,"d",(function(){return o})),n.d(e,"e",(function(){return S})),n.d(e,"f",(function(){return N})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return O})),n.d(e,"i",(function(){return T})),n.d(e,"j",(function(){return y}));var a=n("8Y7J"),r=n("XNiG"),i=n("cUpR"),s=n("SVse");let o=class{};class u{constructor(t,e,n,a,i,s){this.toastId=t,this.config=e,this.message=n,this.title=a,this.toastType=i,this.toastRef=s,this._onTap=new r.a,this._onAction=new r.a,this.toastRef.afterClosed().subscribe(()=>{this._onAction.complete(),this._onTap.complete()})}triggerTap(){this._onTap.next(),this.config.tapToDismiss&&this._onTap.complete()}onTap(){return this._onTap.asObservable()}triggerAction(t){this._onAction.next(t)}onAction(){return this._onAction.asObservable()}}const l={maxOpened:0,autoDismiss:!1,newestOnTop:!0,preventDuplicates:!1,countDuplicates:!1,resetTimeoutOnDuplicate:!1,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},closeButton:!1,disableTimeOut:!1,timeOut:5e3,extendedTimeOut:1e3,enableHtml:!1,progressBar:!1,toastClass:"ngx-toastr",positionClass:"toast-top-right",titleClass:"toast-title",messageClass:"toast-message",easing:"ease-in",easeTime:300,tapToDismiss:!0,onActivateTick:!1,progressAnimation:"decreasing"},d=new a.InjectionToken("ToastConfig");class c{constructor(t,e){this.component=t,this.injector=e}attach(t,e){return this._attachedHost=t,t.attach(this,e)}detach(){const t=this._attachedHost;if(t)return this._attachedHost=void 0,t.detach()}get isAttached(){return null!=this._attachedHost}setAttachedHost(t){this._attachedHost=t}}class f extends class{attach(t,e){return this._attachedPortal=t,this.attachComponentPortal(t,e)}detach(){this._attachedPortal&&this._attachedPortal.setAttachedHost(),this._attachedPortal=void 0,this._disposeFn&&(this._disposeFn(),this._disposeFn=void 0)}setDisposeFn(t){this._disposeFn=t}}{constructor(t,e,n){super(),this._hostDomElement=t,this._componentFactoryResolver=e,this._appRef=n}attachComponentPortal(t,e){const n=this._componentFactoryResolver.resolveComponentFactory(t.component);let a;return a=n.create(t.injector),this._appRef.attachView(a.hostView),this.setDisposeFn(()=>{this._appRef.detachView(a.hostView),a.destroy()}),e?this._hostDomElement.insertBefore(this._getComponentRootNode(a),this._hostDomElement.firstChild):this._hostDomElement.appendChild(this._getComponentRootNode(a)),a}_getComponentRootNode(t){return t.hostView.rootNodes[0]}}let h=(()=>{let t=class{constructor(t){this._document=t}ngOnDestroy(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const t=this._document.createElement("div");t.classList.add("overlay-container"),this._document.body.appendChild(t),this._containerElement=t}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(s.DOCUMENT))},token:t,providedIn:"root"}),t})();class g{constructor(t){this._portalHost=t}attach(t,e=!0){return this._portalHost.attach(t,e)}detach(){return this._portalHost.detach()}}let p=(()=>{let t=class{constructor(t,e,n,a){this._overlayContainer=t,this._componentFactoryResolver=e,this._appRef=n,this._document=a,this._paneElements=new Map}create(t,e){return this._createOverlayRef(this.getPaneElement(t,e))}getPaneElement(t="",e){return this._paneElements.get(e)||this._paneElements.set(e,{}),this._paneElements.get(e)[t]||(this._paneElements.get(e)[t]=this._createPaneElement(t,e)),this._paneElements.get(e)[t]}_createPaneElement(t,e){const n=this._document.createElement("div");return n.id="toast-container",n.classList.add(t),n.classList.add("toast-container"),e?e.getContainerElement().appendChild(n):this._overlayContainer.getContainerElement().appendChild(n),n}_createPortalHost(t){return new f(t,this._componentFactoryResolver,this._appRef)}_createOverlayRef(t){return new g(this._createPortalHost(t))}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(h),Object(a["ɵɵinject"])(a.ComponentFactoryResolver),Object(a["ɵɵinject"])(a.ApplicationRef),Object(a["ɵɵinject"])(s.DOCUMENT))},token:t,providedIn:"root"}),t})();class b{constructor(t){this._overlayRef=t,this.duplicatesCount=0,this._afterClosed=new r.a,this._activate=new r.a,this._manualClose=new r.a,this._resetTimeout=new r.a,this._countDuplicate=new r.a}manualClose(){this._manualClose.next(),this._manualClose.complete()}manualClosed(){return this._manualClose.asObservable()}timeoutReset(){return this._resetTimeout.asObservable()}countDuplicate(){return this._countDuplicate.asObservable()}close(){this._overlayRef.detach(),this._afterClosed.next(),this._manualClose.next(),this._afterClosed.complete(),this._manualClose.complete(),this._activate.complete(),this._resetTimeout.complete(),this._countDuplicate.complete()}afterClosed(){return this._afterClosed.asObservable()}isInactive(){return this._activate.isStopped}activate(){this._activate.next(),this._activate.complete()}afterActivate(){return this._activate.asObservable()}onDuplicate(t,e){t&&this._resetTimeout.next(),e&&this._countDuplicate.next(++this.duplicatesCount)}}class m{constructor(t,e){this._toastPackage=t,this._parentInjector=e}get(t,e,n){return t===u?this._toastPackage:this._parentInjector.get(t,e,n)}}let y=(()=>{let t=class{constructor(t,e,n,a,r){this.overlay=e,this._injector=n,this.sanitizer=a,this.ngZone=r,this.currentlyActive=0,this.toasts=[],this.index=0,this.toastrConfig=Object.assign({},t.default,t.config),t.config.iconClasses&&(this.toastrConfig.iconClasses=Object.assign({},t.default.iconClasses,t.config.iconClasses))}show(t,e,n={},a=""){return this._preBuildNotification(a,t,e,this.applyConfig(n))}success(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.success||"",t,e,this.applyConfig(n))}error(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.error||"",t,e,this.applyConfig(n))}info(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.info||"",t,e,this.applyConfig(n))}warning(t,e,n={}){return this._preBuildNotification(this.toastrConfig.iconClasses.warning||"",t,e,this.applyConfig(n))}clear(t){for(const e of this.toasts)if(void 0!==t){if(e.toastId===t)return void e.toastRef.manualClose()}else e.toastRef.manualClose()}remove(t){const e=this._findToast(t);if(!e)return!1;if(e.activeToast.toastRef.close(),this.toasts.splice(e.index,1),this.currentlyActive=this.currentlyActive-1,!this.toastrConfig.maxOpened||!this.toasts.length)return!1;if(this.currentlyActive<this.toastrConfig.maxOpened&&this.toasts[this.currentlyActive]){const t=this.toasts[this.currentlyActive].toastRef;t.isInactive()||(this.currentlyActive=this.currentlyActive+1,t.activate())}return!0}findDuplicate(t,e,n){for(const a of this.toasts)if(a.message===t)return a.toastRef.onDuplicate(e,n),a;return null}applyConfig(t={}){return Object.assign({},this.toastrConfig,t)}_findToast(t){for(let e=0;e<this.toasts.length;e++)if(this.toasts[e].toastId===t)return{index:e,activeToast:this.toasts[e]};return null}_preBuildNotification(t,e,n,a){return a.onActivateTick?this.ngZone.run(()=>this._buildNotification(t,e,n,a)):this._buildNotification(t,e,n,a)}_buildNotification(t,e,n,r){if(!r.toastComponent)throw new Error("toastComponent required");const i=this.findDuplicate(e,this.toastrConfig.resetTimeoutOnDuplicate&&r.timeOut>0,this.toastrConfig.countDuplicates);if(e&&this.toastrConfig.preventDuplicates&&null!==i)return i;this.previousToastMessage=e;let s=!1;this.toastrConfig.maxOpened&&this.currentlyActive>=this.toastrConfig.maxOpened&&(s=!0,this.toastrConfig.autoDismiss&&this.clear(this.toasts[0].toastId));const o=this.overlay.create(r.positionClass,this.overlayContainer);this.index=this.index+1;let l=e;e&&r.enableHtml&&(l=this.sanitizer.sanitize(a.SecurityContext.HTML,e));const d=new b(o),f=new u(this.index,r,l,n,t,d),h=new m(f,this._injector),g=new c(r.toastComponent,h),p=o.attach(g,this.toastrConfig.newestOnTop);d.componentInstance=p._component;const y={toastId:this.index,message:e||"",toastRef:d,onShown:d.afterActivate(),onHidden:d.afterClosed(),onTap:f.onTap(),onAction:f.onAction(),portal:p};return s||(this.currentlyActive=this.currentlyActive+1,setTimeout(()=>{y.toastRef.activate()})),this.toasts.push(y),y}};return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t(Object(a["ɵɵinject"])(d),Object(a["ɵɵinject"])(p),Object(a["ɵɵinject"])(a.INJECTOR),Object(a["ɵɵinject"])(i.b),Object(a["ɵɵinject"])(a.NgZone))},token:t,providedIn:"root"}),t})(),v=class{constructor(t,e,n){this.toastrService=t,this.toastPackage=e,this.ngZone=n,this.width=-1,this.toastClasses="",this.state={value:"inactive",params:{easeTime:this.toastPackage.config.easeTime,easing:"ease-in"}},this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(t=>{this.duplicatesCount=t})}get displayStyle(){if("inactive"===this.state.value)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state=Object.assign({},this.state,{value:"active"}),!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.outsideTimeout(()=>this.remove(),this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const t=(new Date).getTime();this.width=(this.hideTime-t)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state=Object.assign({},this.state,{value:"active"}),this.outsideTimeout(()=>this.remove(),this.originalTimeout),this.options.timeOut=this.originalTimeout,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10)}remove(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.state=Object.assign({},this.state,{value:"removed"}),this.outsideTimeout(()=>this.toastrService.remove(this.toastPackage.toastId),+this.toastPackage.config.easeTime))}tapToast(){"removed"!==this.state.value&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0!==this.options.disableTimeOut&&"extendedTimeOut"!==this.options.disableTimeOut&&0!==this.options.extendedTimeOut&&"removed"!==this.state.value&&(this.outsideTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}outsideTimeout(t,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.timeout=setTimeout(()=>this.runInsideAngular(t),e)):this.timeout=setTimeout(()=>t(),e)}outsideInterval(t,e){this.ngZone?this.ngZone.runOutsideAngular(()=>this.intervalId=setInterval(()=>this.runInsideAngular(t),e)):this.intervalId=setInterval(()=>t(),e)}runInsideAngular(t){this.ngZone?this.ngZone.run(()=>t()):t()}};var x;const _=Object.assign({},l,{toastComponent:v});let T=x=class{static forRoot(t={}){return{ngModule:x,providers:[{provide:d,useValue:{default:_,config:t}}]}}},O=class{static forRoot(t={}){return{ngModule:T,providers:[{provide:d,useValue:{default:l,config:t}}]}}};var w;let S=class{constructor(t,e,n){this.toastrService=t,this.toastPackage=e,this.appRef=n,this.width=-1,this.toastClasses="",this.state="inactive",this.message=e.message,this.title=e.title,this.options=e.config,this.originalTimeout=e.config.timeOut,this.toastClasses=`${e.toastType} ${e.config.toastClass}`,this.sub=e.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=e.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=e.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=e.toastRef.countDuplicate().subscribe(t=>{this.duplicatesCount=t})}get displayStyle(){if("inactive"===this.state)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state="active",!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.timeout=setTimeout(()=>{this.remove()},this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))),this.options.onActivateTick&&this.appRef.tick()}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const t=(new Date).getTime();this.width=(this.hideTime-t)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state="active",this.options.timeOut=this.originalTimeout,this.timeout=setTimeout(()=>this.remove(),this.originalTimeout),this.hideTime=(new Date).getTime()+(this.originalTimeout||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))}remove(){"removed"!==this.state&&(clearTimeout(this.timeout),this.state="removed",this.timeout=setTimeout(()=>this.toastrService.remove(this.toastPackage.toastId)))}tapToast(){"removed"!==this.state&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0!==this.options.disableTimeOut&&"extendedTimeOut"!==this.options.disableTimeOut&&0!==this.options.extendedTimeOut&&"removed"!==this.state&&(this.timeout=setTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10)))}};const I=Object.assign({},l,{toastComponent:S});let N=w=class{static forRoot(t={}){return{ngModule:w,providers:[{provide:d,useValue:{default:I,config:t}}]}}}},EEGq:function(t,e,n){var a=n("juv8"),r=n("oCl/");t.exports=function(t,e){return a(t,r(t),e)}},EEJc:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("ajRT");n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return s})),n.d(e,"a",(function(){return u}));var i=a["ɵcrt"]({encapsulation:0,styles:[[".modal-header[_ngcontent-%COMP%]{border-bottom:1px solid #d1d1d1;background-color:#f5f5f5;border-radius:5px 5px 0 0}  .modal-footer{border-bottom:1px solid #d1d1d1;background-color:#f5f5f5;border-radius:0 0 5px 5px}  .modal-body{max-height:70vh;overflow-y:auto;overflow-x:hidden}"]],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["class","modal-header"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"h4",[["class","modal-title float-left"]],null,null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵeld"](3,0,null,null,2,"button",[["aria-label","Close"],["class","close float-right"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.close()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["×"])),a["ɵncd"](null,1)],null,null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-modal",[],null,null,null,s,i)),a["ɵdid"](1,49152,null,0,r.a,[],null,null)],null,null)}var u=a["ɵccf"]("cd-modal",r.a,o,{modalRef:"modalRef"},{hide:"hide"},[".modal-title",".modal-content"])},ENF9:function(t,e,n){"use strict";var a,r=n("2oRo"),i=n("4syw"),s=n("8YOa"),o=n("bWFh"),u=n("rKzb"),l=n("hh1v"),d=n("afO8").enforce,c=n("f5p1"),f=!r.ActiveXObject&&"ActiveXObject"in r,h=Object.isExtensible,g=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},p=t.exports=o("WeakMap",g,u);if(c&&f){a=u.getConstructor(g,"WeakMap",!0),s.REQUIRED=!0;var b=p.prototype,m=b.delete,y=b.has,v=b.get,x=b.set;i(b,{delete:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),m.call(this,t)||e.frozen.delete(t)}return m.call(this,t)},has:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),y.call(this,t)||e.frozen.has(t)}return y.call(this,t)},get:function(t){if(l(t)&&!h(t)){var e=d(this);return e.frozen||(e.frozen=new a),y.call(this,t)?v.call(this,t):e.frozen.get(t)}return v.call(this,t)},set:function(t,e){if(l(t)&&!h(t)){var n=d(this);n.frozen||(n.frozen=new a),y.call(this,t)?x.call(this,t,e):n.frozen.set(t,e)}else x.call(this,t,e);return this}})}},EOgW:function(t,e,n){!function(t){"use strict";t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n("wd/R"))},ES0t:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("8Y7J"),r=n("KOzp"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:[".bs3.popover-top[_nghost-%COMP%] {\n      margin-bottom: 10px;\n    }\n    .bs3.popover.top[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -2px;\n    }\n    .bs3.popover.top[_nghost-%COMP%] {\n      margin-bottom: 10px;\n    }\n    .popover.bottom[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -4px;\n    }\n    .bs3.bs-popover-left[_nghost-%COMP%] {\n      margin-right: .5rem;\n    }\n    .bs3.bs-popover-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs3.bs-popover-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%]{\n      margin: .3rem 0;\n    }"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"h3",[["class","popover-title popover-header"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.title)}))}function u(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","popover-arrow arrow"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"div",[["class","popover-content popover-body"]],null,null,null,null,null)),a["ɵncd"](null,0)],(function(t,e){t(e,2,0,e.component.title)}),null)}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"popover-container",[["role","tooltip"],["style","display:block;"]],[[8,"className",0],[2,"show",null],[2,"bs3",null]],null,null,u,s)),a["ɵdid"](1,49152,null,0,r.b,[r.a],null,null)],null,(function(t,e){t(e,0,0,"popover in popover-"+a["ɵnov"](e,1).placement+" bs-popover-"+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).containerClass,!a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).isBs3)}))}var d=a["ɵccf"]("popover-container",r.b,l,{placement:"placement",title:"title"},{},["*"])},EY2u:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("HDdC");const r=new a.a(t=>t.complete());function i(t){return t?function(t){return new a.a(e=>t.schedule(()=>e.complete()))}(t):r}},EgGo:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("SVse"),r=n("sne2");class i{constructor(t){this.base=t}static concatURLSegments(t){return t.reduce(a.Location.joinWithSlash)}static buildURL(t,...e){return i.concatURLSegments([...t?["/"]:[],...e])}getURL(t,e=!0,...n){return i.buildURL(e,this.base,t,...n)}getCreate(t=!0){return this.getURL(r.e.CREATE,t)}getCreateFrom(t,e=!0){return this.getURL(r.e.CREATE,e,t)}getDelete(t=!0){return this.getURL(r.e.DELETE,t)}getEdit(t,e=!0){return this.getURL(r.e.EDIT,e,t)}getUpdate(t,e=!0){return this.getURL(r.e.UPDATE,e,t)}getAdd(t=!0){return this.getURL(r.e.ADD,t)}getRemove(t=!0){return this.getURL(r.e.REMOVE,t)}getRecreate(t,e=!0){return this.getURL(r.e.RECREATE,e,t)}}},EiPl:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="de-DE">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Navigation umschalten</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dashboard</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Cluster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Verzeichnis</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitore</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Services</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfiguration</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH-Zuordnung</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Manager-Module</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Protokolle</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Überwachung</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pools</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Block</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Images</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Spiegelung</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Dateisysteme</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Objektgateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Buckets</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Daten \n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> für\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>werden abgerufen. Bitte warten...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Zuvor zwischengespeicherte Daten\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  für \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> werden angezeigt.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Daten\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> für\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> konnten nicht geladen werden.\n  Prüfen Sie die Clusterintegrität.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Benachrichtigungen löschen</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Benachrichtigungen entfernen</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Dauer:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>Es sind keine Benachrichtigungen verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Aufträge und Benachrichtigungen</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Sprache auswählen</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Bereichsdaten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Lesen Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Überwachungsfunktion.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Das Grafana-Dashboard ist nicht vorhanden. In der\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> wird beschrieben,\n  wie Grafana Dashboards hinzugefügt werden.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana-Zeitauswahl</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Einstellungen für Zurücksetzungen</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Entfernen Sie den aktuellen Konfigurationswert. Stattdessen wird der Standard-Konfigurationswert übernommen und verwendet.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Zurück</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Das Passwort läuft in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>weniger als 1 \n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>Tag ab. Klicken Sie \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> hier \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, um es jetzt zu ändern.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Das Passwort läuft in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>Tag(en) ab. Klicken Sie \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> hier \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, um es jetzt zu ändern.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Das Modul "Orchestrator" ist nicht verfügbar. Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>zum Konfigurieren und Aktivieren dieses Moduls.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Daten konnten nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Filter löschen</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>ausgewählt</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>gefunden</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>insgesamt</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Name</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Beschreibung</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Detaillierte Beschreibung</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Standard</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon-Standard</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Werte</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Standard --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>wahr</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>falsch</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Speichern</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSH-Betrachter</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Laden...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Hostname</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Dies ist ein Pflichtfeld.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>Der ausgewählte Hostname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Sind Sie sicher dass Sie die ausgewählten Einträge \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> möchten?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Sind Sie sicher dass Sie die ausgewählten \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> möchten?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ja, ich bin sicher.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Abbrechen</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Schließen</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Liste mit Hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Gesamtleistung</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Laufwerke</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Keine Einträge gefunden</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Clusterprotokolle</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Revisionsprotokoll</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priorität:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Schlüsselwort:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Datum:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datumsauswahl</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Zeitraum:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Konfiguration wird geladen...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Die Konfiguration konnte nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Manager-Modul bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Der eingegebene Wert ist kein gültiger UUID, z. B.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Der eingegebene Wert muss eine gültige IP-Adresse sein.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er muss kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/> sein oder diesem Wert entsprechen.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er muss größer als \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/> sein oder diesem Wert entsprechen.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Der eingegebene Wert muss eine Zahl sein.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Der eingegebene Wert muss eine Zahl oder Dezimalzahl sein.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aktualisiere</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Cluster-ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Monmap geändert</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>Monmap-Epoche</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>erforderliche Verbindung</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>erforderliche Überwachung</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>In Quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Nicht in Quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>Vorschau der OSD-Erstellung</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> Laufwerke\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Löschen</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Geteilte Laufwerke</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL Slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>Wie viele OSDs pro WAL-Laufwerk.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Geben Sie 0 an, um das Orchestrator-Backend entscheiden zu lassen.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Der Wert sollte größer als oder gleich 0 sein</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB Slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>Wie viele OSDs pro DB-Laufwerk.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funktionen</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Vorschau</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Clusterweite OSD-Flags</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Absenden</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Erweitert...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Erweiterte Konfigurationsoptionen</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD-Wiederherstellungspriorität</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorität</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Prioritätswerte anpassen</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Dies ist ein Pflichtfeld!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu hoch! Er darf nicht größer als \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>Der eingegebene Wert ist zu niedrig! Er darf nicht kleiner als \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Der Wert muss zwischen 0 und 1 liegen.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Neu gewichten</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Tief } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {tief } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD-Liste</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Aktive Warnungen</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>Alle Warnungen</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Wählen Sie das zu vergleichende Attribut --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Wert</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Regulären Ausdruck verwenden</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Löschen</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Das Bearbeiten einer Stummschaltung löscht die Vorherige und legt eine neue Stummschaltung an.</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Ersteller</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Kommentar</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Startzeit</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>Wenn die Startzeit in der Vergangenheit liegt, wird die Erstellungszeit verwendet</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Dauer</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>Ende</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Integrität</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiken</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für NFS Ganesha.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clients</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Jeder Client hat Zugriff</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adressen</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Pflichtfeld</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Muss mindestens einen kommagetrennten Wert enthalten</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Beispielsweise:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Zugriffstyp</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Clients hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Kein Cluster verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Cluster auswählen --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Daemon hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Speicher-Back-End</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Keine Datenpools verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Speicher-Back-End auswählen --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Objektgatewaybenutzer</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Keine Benutzer verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Objektgatewaybenutzer auswählen --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS-Benutzer-ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- keine Clients verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephx-Client auswählen --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS-Name</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- Kein CephFS Dateisystem verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- CephFS Dateisystem auswählen --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Sicherheitsbezeichnung</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Sicherheitsbezeichnung aktivieren</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS-Pfad</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Pfad muss mit einem \'/\' beginnen und kann von einem Wort gefolgt werden</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Neues Verzeichnis wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Pfad</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Pfad darf nur ein einzelner \'/\' oder ein Wort sein</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Neuer Bucket wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS-Protokoll</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS-Tag</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternativer Zugriff für \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>-Mountpunkte (dürfen keinen führenden / enthalten)\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Clients können Unterverzeichnisse möglicherweise nicht mounten (d. h. wenn der Pfad = foo ist, kann der Client foo/baz möglicherweise nicht mounten).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Wenn unterschiedliche Tag-Optionen verwendet werden, wird derselbe Pfad möglicherweise mehrfach exportiert.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>Die Position dieses \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>-Exports\n                auf dem \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo-Dateisystem\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (muss eindeutig sein).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Wenn unterschiedliche Pseudo-Optionen verwendet werden, wird derselbe Pfad möglicherweise mehrfach exportiert.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Kein Zugriffstyp verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Zugriffstyp auswählen --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>Das NFS-Backend für das Objektgateway besitzt eine Reihe von\n Einschränkungen, die Schreibvorgänge von Anwendungen auf diese\n Freigaben ernsthaft beeinträchtigen. Bitte konsultieren Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> Dokumentation \n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> für weitere Informationen, bevor Sie den Schreibzugriff aktivieren.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Kein Squash verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Durchzuführende Benutzer-ID-Squashing-Art auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Transportprotokoll</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Altes Passwort</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>Das alte und neue Passwort müssen unterschiedlich sein.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>Neues Passwort</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Neues Passwort bestätigen</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Passwortbestätigung stimmt nicht mit dem neuen Passwort überein.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Bitte legen Sie ein neues Passwort fest.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>Sie werden anschließend auf die Login-Seite weitergeleitet.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Willkommen bei Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Benutzername ist erforderlich</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Passwort ist erforderlich</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Anmeldung</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Der Benutzer ist in Ceph leider nicht enthalten.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Kehren Sie zur \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Anmeldeseite\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zurück. Sie werden vom Identitätsanbieter abgemeldet, wenn Sie versuchen, sich erneut anzumelden.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Verboten</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Leider sind Sie nicht berechtigt, den gewünschten Inhalt anzuzeigen.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Leider konnte der gewünschte Inhalt nicht gefunden werden.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Weder Hostname noch OSD ID angegeben</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>bestanden</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>fehlgeschlagen</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Laufwerksinformationen</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>Keine SMART-Daten für dieses Laufwerk verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART-Daten werden geladen.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD-Konfiguration</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Entfernen Sie den lokalen Konfigurationswert. Stattdessen wird der übergeordnete Konfigurationswert übernommen und verwendet.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Der Mindestwert lautet 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Pool-Liste</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Der Name darf nur alphanumerische Zeichen, Bindestriche und Unterstriche enthalten.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Der ausgewählte Erasure-Coding-Profilname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Laufwerksklasse</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Datenblöcke (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Muss größer oder gleich 2 sein.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Datenblöcke für die Codierung (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Muss größer oder gleich 1 sein.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Dauerhaftigkeitsschätzung (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Standort (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Crush-Ausfalldomäne</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Crush-Standort</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Keine</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technik</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Paketgröße</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crush-Stamm</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Crush-Geräteklasse</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>beliebig</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Verzeichnis</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Name...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Der ausgewählte Poolname wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Pooltyp</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Pooltyp auswählen --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoskalierung</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Platzierungsgruppen</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Es wird mindestens eine Platzierungsgruppe benötigt.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Ihr Cluster kann nicht so viele Platzierungsgruppen verarbeiten. Berechnen Sie die benötigte Anzahl an Platzierungsgruppen.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Hilfe zur Berechnung</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>Die aktuellen Einstellungen für die Platzierungsgruppen wurden für Sie berechnet.\n                    Stellen Sie vor dem Senden sicher, dass die Werte Ihren Anforderungen entsprechen.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Reproduzierte Größe</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>Die angegebene Größe liegt außerhalb des Bereichs. Gültige Werte liegen zwischen\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> und \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flags</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC-Überschreibungen</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Anwendungen</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Kein Erasure-Coding-Profil verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Erasure-Coding-Profil auswählen --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Crush-Regelsatz</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>Ein neuer CRUSH Regelsatz wird implizit erstellt.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>Keine Regeln vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Crush-Regel auswählen --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crush-Regel</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush-Schritte</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Komprimierung</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modus</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorithmus</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Kein Komprimierungsalgorithmus für Erasure-Coding verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimale Blobgröße</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>z. B. 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Wert sollte größer als 0 sein</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Wert sollte niedriger als die maximale Blobgröße sein</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Maximale Blobgröße</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>z. B. 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Wert sollte größer als die minimale Blobgröße sein</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Verhältnis</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Komprimierungsverhältnis</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Wert sollte zwischen 0,0 und 1,0 liegen</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Kontingente</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max. Bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Lassen Sie das Feld leer oder geben Sie 0 an, um dieses Quota zu deaktivieren.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>Ein gültiges Kontingent sollte größer als 0 sein.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>z. B. 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max. Objekte</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>Der Wert sollte größer als oder gleich 0 sein</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Details</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Leistungsdetails</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Details zu den Cache-Ebenen</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Bootstrap-Token erstellen</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site-Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>Mindestens ein Pool ist erforderlich.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Erzeugen</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Erzeugtes Token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Bootstrap-Token importieren</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Richtung</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>Der Token ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Site-Namen bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site-Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Image in Papierkorb verschieben</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Schutz läuft ab am</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NICHT GESCHÜTZT</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Falsches Datumsformat. Verwenden Sie "TT.MM.JJJJ HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Schutz ist bereits abgelaufen. Wählen Sie ein künftiges Datum aus oder lassen Sie es leer.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Image verschieben</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Muss grösser oder gleich \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Muss kleiner oder gleich \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/> sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Übersicht</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Ziele</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Ermittlungsauthentifizierung</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Benutzernamen müssen zwischen 8 und 64 Zeichen lang sein und\n              dürfen nur Buchstaben, \'.\', \'@\', \'-\', \'_\' oder \':\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Passwort</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Gemeinsamer Benutzer</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Gemeinsames Passwort</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Lesen Sie die\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für iSCSI-Ziele.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Verfügbare Informationen:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI-Ziele nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Ermittlungsauthentifizierung</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Nur für RBD-Images verfügbar, bei denen \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> aktiviert ist\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Datenpool</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Erstellt</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Größe</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objekte</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Objektgröße</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Bereitgestellt</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>n. v.</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Bereitgestellt gesamt</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Striping-Einheit</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Striping-Anzahl</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Übergeordnet</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Präfix für Blockname</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Reihenfolge</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshots</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Diese Einstellung überschreibt den globalen Wert</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Dies ist der globale Wert. Kein Wert für diese Option wurde für dieses Image festgelegt.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' und \'@\' sind nicht zulässig.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Keine rbd-Pools verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Pool auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- Keine Namensräume verfügbar --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Namensraum auswählen --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Dedizierten Datenpool verwenden</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Datenpool</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Dedizierter Pool zur Speicherung von RBD-Objektdaten.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Sie müssen die Größe erhöhen.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Erweitert</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Striping</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Stripe-Einheit</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Stripe-Einheit auswählen --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Dies ist ein Pflichtfeld, da eine Stripe-Anzahl definiert wurde!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Die Stripe-Einheit ist größer als die Objektgröße.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Stripe-Anzahl</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Dies ist ein Pflichtfeld, da eine Stripe-Einheit definiert wurde!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Die Stripe-Anzahl muss größer als 0 sein.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Namensraum anlegen</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namensraum existiert bereits.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Sie sind dabei, ein Rollback durchzuführen</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Papierkorb bereinigen</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Alle</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Poolname...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Image wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Zum Wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>Neuen Namen des Images eingeben und klicken</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Neuer Name</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Abgelaufen am</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Geschützt bis</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>Dieses Image ist geschützt bis \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI-Topologie</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Konfigurieren</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Eine Änderung dieser Parameter von ihren Standardwerten ist in der Regel nicht erforderlich.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Bezeichner</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Bestätigen</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Erweiterte Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Ziel-IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN hat ein fehlerhaftes Muster.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>Eine IQN hat die folgende Notation \n\'iqn.$jahr-$monat.$umkehradresse:$definierterName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Zum Beispiel: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Weitere Informationen</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Erweiterte Einstellungen bei diesem Ziel wurden geändert.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portale</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Portal hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>Es sind mindestens \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> Gateways erforderlich.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Einstellungen bei diesem Image wurden geändert.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Image hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL-Authentifizierung</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Initiatoren</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Initiator</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Client-IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Initiator-IQN muss eindeutig sein.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Benutzernamen müssen zwischen 8 und 64 Zeichen lang sein und\n                        dürfen nur Buchstaben, \'.\', \'@\', \'-\', \'_\' oder \':\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwörter müssen zwischen 12 und 16 Zeichen lang sein\n              und dürfen nur Buchstaben, \'@\', \'-\', \'_\' oder \'/\' enthalten.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Der Initiator gehört zu einer Gruppe. Images werden in der Gruppe konfiguriert.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Keine Elemente hinzugefügt.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Initiator hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Gruppen</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Gruppe</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Gruppe hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namensräume</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Papierkorb</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Probleme</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Wird synchronisiert</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Fertig</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Spiegelungsmodus für Pool bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Wählen Sie zum Bearbeiten des Spiegelungsmodus für den Pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> einen neuen Modus aus der Liste aus und klicken Sie auf \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Aktualisieren\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Vor dem Deaktivieren der Spiegelung müssen Peer-Cluster entfernt werden.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  Peer für Poolspiegelung\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Bearbeiten} other {Hinzufügen} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Clustername</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Der Clustername ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX-ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX-ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>Die CephX ID ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adressen der Monitore</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Kommagetrennte Adressen...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Die Anrede ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64-codierter Schlüssel...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX-Schlüssel muss base64-codiert sein.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Leistungsindikatoren nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Lesen Sie die \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Dokumentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> zum\n  Konfigurieren und Aktivieren der Verwaltungsfunktion für das Objektgateway.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Liste der Daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Leistungsindikatoren</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Bucket-Daten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Der Wert ist ungültig.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Der ausgewählte Name wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Inhaber</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Benutzer auswählen --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Aktiviert</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Indextyp</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Platzierungsregel</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marker</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Maximum für Marker</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Masterversion</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Änderungszeit</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Zonengruppe</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Bucket-Quote</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Maximale Größe</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Unbegrenzt</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Maximale Objekte</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Benutzername</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Benutzername auswählen --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Schlüssel automatisch generieren</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Zugriffsschlüssel</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Geheimer Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Vollständiger Name</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>E-Mail-Adresse</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Angehalten</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>System</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Maximale Buckets</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Befähigungen</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Benutzerquote</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Anzeigen</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Typ auswählen --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Berechtigung</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Berechtigung auswählen --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Die ausgewählte Unterbenutzer-ID wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lesen, schreiben</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>voll</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Geheimnis automatisch generieren</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Benutzerdaten werden geladen...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Die Benutzerdaten konnten nicht geladen werden.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Die ausgewählte Benutzer-ID wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Dies ist keine gültige E-Mail-Adresse.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Die ausgewählte E-Mail-Adresse wird bereits verwendet.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Max. Buckets</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Benutzerdefiniert</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Keine Unterbenutzer vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Keine Schlüssel vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Keine Befähigungen vorhanden.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Unbegrenzte Größe</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Max. Größe</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Unbegrenzte Objekte</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Max. Objekte</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Der eingegebene Wert muss &gt;=0 sein.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Beschreibung...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Berechtigungen</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Rollen</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Passwort bestätigen</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Passwortbestätigung stimmt nicht mit dem Passwort überein.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Ablaufdatum des Passworts</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Ablaufdatum des Passworts...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-Mail-Adresse</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Ungültige E-Mail-Adresse.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>Benutzer muss das Passwort bei der nächsten Anmeldung ändern</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Sie sind dabei, die Lese-/Aktualisierungsberechtigungen für Benutzer von Ihrem eigenen Benutzer zu entfernen.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Wenn Sie den Vorgang fortsetzen, können Sie Benutzerrollen nicht mehr hinzufügen oder entfernen.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Möchten Sie den Vorgang wirklich fortsetzen?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Hilfe</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentation</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Über</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Dashboard-Einstellungen</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Benutzerverwaltung</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Angemeldeter Benutzer</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Angemeldet als\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Passwort ändern</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Abmelden</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attribute (OSD-Zuordnung)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadaten nicht verfügbar</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadaten</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Laufwerkszustand</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Leistungsindikator</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogramm nicht verfügbar: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Schreiben</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lesen</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogramm</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>Hostname nicht gefunden.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Aktuelle Werte</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Quelle</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Ebene</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Kann zur Laufzeit aktualisiert werden (bearbeitbar)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tags</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Auflistungswerte</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Siehe auch</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Clusterstatus</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manager-Daemons</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Objektgateways</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Metadatenserver</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI-Gateways</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>Client-IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Clientdurchsatz</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Client-Lese-/Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Wiederherstellungsdurchsatz</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Scrub</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Leistung</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Rohkapazität</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Platzierungsgruppen pro OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Platzierungsgruppenstatus</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapazität</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> Weitere Details finden Sie in den \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Protokollen\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Ränge</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS Leistungsindikatoren</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Verzeichnisse</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Aktuell</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target> Ermittlungsauthentifizierung aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Keine Portale verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Keine Images verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Keine Images verfügbar. Fügen Sie dem Ziel ein Image hinzu.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Keine Initiatoren verfügen. Fügen Sie dem Ziel einen Initiator hinzu.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Ziel</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Zustand</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes für Lesevorgang</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes für Schreibvorgang</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O seit</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instanz</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problem</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Fortschritt</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Bearbeitungsmodus</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Peer hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Peer bearbeiten</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Peer löschen</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># lokal</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># remote</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>Peer spiegeln</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Umfassende Vereinfachung</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Schichtung</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Exklusive Sperre</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Objektzuordnung (erfordert exklusive Sperre)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journaling (erfordert exklusive Sperre)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namensraum</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Images insgesamt</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namensraum enthält Images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NICHT GESCHÜTZT</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Rollback für RBD-Snapshot</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Rollback</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD-Snapshot</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Gelöscht am</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>Zustand</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>Stamm</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Standby-Daemons</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Rang</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivität</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Nutzung</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Der Wert kann zur Laufzeit aktualisiert werden.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemons/Clients rufen diesen Wert nicht aus der\n      Datenbank \'monitor config\' ab. Es ist nicht zulässig, diese Option über \'ceph config\n      set ...\' festzulegen. Diese Option sollte über \'ceph.conf\' oder an der\n      Befehlszeile konfiguriert werden.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Die Option wird nur während des Daemon-Starts wirksam.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Die Option wirkt sich nur auf die Cluster-Erstellung aus.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Die Option wirkt sich nur auf die Daemon-Erstellung aus.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Aktualisierte Konfigurationsoption \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Service</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Aktueller Wert</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Bearbeitbar</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Laufwerkspfad</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identifiziere Laufwerk \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifikation von \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' auf Host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\' gestartet\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Aktivieren</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Deaktivieren</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Verbindung wird erneut hergestellt, bitte warten...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Öffentliche Adresse</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Offene Sitzungen</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Kein In-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSDs, die zuvor als \'out\' markiert wurden, werden beim Start nicht wieder markiert</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Kein Out-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSDs werden nach dem konfigurierten Intervall nicht automatisch als \'out\' markiert</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Kein Up-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSDs dürfen nicht gestartet werden</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Kein Down-Vorgang</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>OSD-Fehlerberichte werden ignoriert, sodass die Monitore die OSDs nicht als ausgefallen markieren</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pause</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Hält Lese- und Schreibvorgänge an</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Kein Scrub</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Scrubbing ist deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Kein umfassender Scrub</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Umfassendes Scrubbing ist deaktiviert</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Kein Abgleich</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Abgleich der Platzierungsgruppen ist ausgesetzt</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Keine Wiederherstellung</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Wiederherstellung der Platzierungsgruppen ist ausgesetzt</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Bitweise Sortierung</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Bitweise Sortierung verwenden</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Bereinigte Snapdirs</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDs besitzen konvertierte Snapsets</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Löschvorgänge bei Wiederherstellungen</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Bei der Wiederherstellung anstelle des Peerings durchgeführte Löschvorgänge</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Hardlimit für Platzierungsgruppen-Protokoll</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Legt ein Hardlimit für die Platzierungsgruppen-Protokolllänge fest</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Aktualisierte OSD-Flags</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>aus</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>ein</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>ausgefallen</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Markieren</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD verloren</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>markierter Verlust</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Bereinigen</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>bereinigt</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>vernichten</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>vernichtet</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>löschen</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Wiederherstellungspriorität</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG Scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Platzierungsgruppen</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes für Lesevorgang</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes für Schreibvorgang</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/> markieren\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/> markieren\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG Scrub-Optionen</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Aktualisierte PG Scrub-Optionen</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max. Abgleiche</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Wiederherstellung, max. aktiv</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Wiederherstellung, max. - einzelner Start</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Wiederherstellung - Inaktivität</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Auftrag</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Schweregrad</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Gestartet</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attributname</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regulärer Ausdruck</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Bitte fügen Sie Ihren Prometheus-Host zur Dashboard-Konfiguration hinzu und aktualisieren die Seite</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Erstellt von</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Endet</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Verwendet</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Verf.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Bereinigen</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>In Bearbeitung</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Warnung</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Unbekannt</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>aktiv</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>keine Dateisysteme</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktiv</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>Standby</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n. v.</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktiver Daemon</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>Quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Der NFS Ganesha-Dienst ist nicht konfiguriert.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS-Benutzer</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS-Dateisystem</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(aus globaler Konfiguration übernommen)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>aus globaler Konfiguration übernommen</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Durchzuführende Benutzer-ID-Squashing-Art auswählen --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Keine Daemons verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS-Export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC-Profil</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Cache-Modus</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min. Alter für Vertreibung</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min. Alter für Leerung</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Max. Bytes für Ziel</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Max. Objekte für Ziel</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Keine Anwendungen hinzugefügt</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Anwendungslimit erreicht</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Ein Pool kann nur bis zu vier Anwendungsdefinitionen aufweisen.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Zulässige Zeichen \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Maximale Länge beträgt 128 Zeichen</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Anwendungen filtern oder hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Anwendung hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Größe des Replikats</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Letzte Änderung</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Erasure-Coding-Profil</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Crush-Regelsatz</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Das Löschen des Pools ist durch die Konfigurationsoption mon_allow_pool_delete deaktiviert.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>Bucket</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>Buckets</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>Unterbenutzer</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>Benutzer</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift-Schlüssel</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Laufwerks-ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Laufwerksname</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Bereich</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lesen</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Erstelle</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>Rolle</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' erstellt\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' aktualisiert\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Systemrolle</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Rolle \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\' gelöscht\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Benutzer aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Fortfahren</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Sie wurden automatisch abgemeldet, da Ihre Rollen geändert wurden.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>Passwort</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Benutzerpasswort aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Jedes Objekt wird in Datenblöcke aufgeteilt und jeweils auf einem anderen OSD gespeichert.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Berechnen Sie Codierungsdatenblöcke für jedes Objekt und speichern Sie sie auf unterschiedlichen OSDs.\n      Die Anzahl der Codierungsdatenblöcke entspricht auch der Anzahl der OSDs, die ausfallen können, ohne dass Daten verloren gehen.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Das jerasure-Modul ist das allgemeinste und flexibelste Modul\n          und fungiert auch als der Standard für Ceph-Pools mit Löschcodierung.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Die flexiblere Technik ist \'reed_sol_van :\', wobei es ausreicht, k\n          und m festzulegen. Die Technik \'cauchy_good\' kann schneller sein. Sie müssen jedoch die Paketgröße sorgfältig\n          auswählen. Sämtliche \'reed_sol_r6_op\'-, \'liberation\'-, \'blaum_roth\'- und \'liber8tion\'-Vorgänge sind dahingehend RAID6-Entsprechungen,\n          dass sie nur mit \'m=2\' konfiguriert werden können.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Die Codierung wird jeweils für Pakete auf Bytes-Größe vorgenommen.\n          Die Auswahl der richtigen Paketgröße ist schwierig.\n          In der Jerasure-Dokumentation sind ausführliche Informationen zu diesem Thema enthalten.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Bei Verwendung des Jerasure-Moduls, wenn ein Objekt mit Löschcodierung auf mehreren OSDs gespeichert ist,\n          müssen alle anderen OSDs gelesen werden, um die verloren gegangenen Daten eines OSDs wiederherzustellen.\n          Wenn jerasure beispielsweise mit \'k=8\' und \'m=4\' konfiguriert ist,\n          müssen bei Verlust eines OSDs zum Reparieren die elf anderen gelesen werden.\n\n          Das lrc-Löschcode-Modul erstellt lokale Paritätsdatenblöcke, um die Wiederherstellung mit weniger OSDs auszuführen.\n          Wenn lrc beispielsweise mit \'k=8\', \'m=4\' und \'l=4\' konfiguriert ist, wird ein zusätzlicher Paritätsdatenblock für jeweils vier OSDs erstellt.\n          Geht ein einzelnes OSD verloren, kann es mit nur vier OSDs anstelle\n          von elf wiederhergestellt werden.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Gruppieren Sie die Codierungs- und Datenblöcke in Sätze entsprechend dem Speicherort.\n          Beispielsweise werden für \'k=4\' und \'m=2\', wenn der Speicherort \'3\' entspricht, zwei Dreiergruppen erstellt.\n          Jeder Satz kann wiederhergestellt werden, ohne dass Datenblöcke aus einem anderen Satz gelesen werden.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Der Typ des Crush-Buckets, in dem jeder durch l definierte Satz von Datenblöcken gespeichert wird.\n          Wenn er beispielsweise auf \'rack\' festgelegt ist, wird jede Gruppe an l-Datenblöcken in einem anderen Rack platziert.\n          Er wird zum Erstellen eines CRUSH-Regelschritts verwendet, beispielsweise für einen Schritt zum Auswählen des Racks.\n          Wenn er nicht festgelegt ist, wird keine solche Gruppierung vorgenommen.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Das isa-Modul kapselt die ISA-Bibliothek und wird nur auf Intel-Prozessoren ausgeführt.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Das ISA-Modul wird in zwei Reed Solomon-Formularen bereitgestellt.\n          Wenn \'reed_sol_van\' festgelegt ist, entspricht dies Vandermonde. Ist \'cauchy\' festgelegt, entspricht dies \'Cauchy\'.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Das shec-Modul kapselt die SHEC-Mehrfachbibliothek.\n          Dadurch kann ceph Daten effizienter wiederherstellen als Reed Solomon-Codes.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Die Anzahl der Paritätsdatenblöcke, von denen jeder jeden Datenblock in seinem Berechnungsbereich enthält.\n          Die Anzahl wird als eine Dauerhaftigkeitsschätzung verwendet. Wenn beispielsweise \'c=2\' vorliegt,\n          können 2 OSDs ausfallen, ohne dass Daten verloren gehen.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Der Name des für den ersten Schritt der CRUSH-Regel verwendeten Crush-Buckets.\n      Beispielsweise \'step take default\'.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Stellen Sie sicher, dass sich keine zwei Datenblöcke in einem Bucket mit derselben Ausfalldomäne befinden.\n      Wenn die Ausfalldomäne beispielsweise als Host fungiert, werden keine zwei Datenblöcke auf demselben Host gespeichert.\n      Er wird zum Erstellen eines CRUSH-Regelschritts verwendet, beispielsweise \'step chooseleaf host\'.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Schränken Sie mithilfe der Klassennamen für Crush-Geräte in der CRUSH-Zuordnung die Platzierung\n      auf Geräte einer bestimmten Klasse (z. B. SSD oder HDD) ein.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Legen Sie den Verzeichnisnamen fest, über den das Löschcode-Modul geladen wird.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Lässt alle Vorgänge zu</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Lässt nur Vorgänge zu, die den Server nicht ändern</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Lässt weder Lese- noch Schreibvorgänge zu, jedoch alle anderen Vorgänge</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Lässt Lese-/Schreibvorgänge und andere Vorgänge nicht zu, die Dateiattribute oder Verzeichnisinhalte ändern</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Lässt überhaupt keinen Zugriff zu</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Priorität auswählen --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Niedrig</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Hoch</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informationen</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Letzte 5 Minuten</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Letzte 15 Minuten</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Letzte 30 Minuten</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Letzte Stunde (Standard)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Letzte 3 Stunden</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Letzte 6 Stunden</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Letzte 12 Stunden</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Letzte 24 Stunden</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Gestern</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Heute</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Heute bisher</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Vorgestern</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Letzte 2 Tage</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Dieser Tag letzte Woche</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Vorwoche</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Diese Woche</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Diese Woche bisher</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Letzte 7 Tage</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Vormonat</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Dieser Monat</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Dieser Monat bisher</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Letzte 30 Tage</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Letzte 90 Tage</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Letzte 6 Monate</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Letztes Jahr</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Vorjahr</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Dieses Jahr</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Dieses Jahr bisher</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Letzte 2 Jahre</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Letzte 5 Jahre</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Keine Elemente ausgewählt.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Elementauswahl zum erneuten Auswählen aufheben</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Auswahllimit erreicht</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tags filtern</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Badge hinzufügen</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Keine Elemente verfügbar.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Entfernen</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klonen</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopieren</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Umfassender Scrub</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Vernichten</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Vereinfachen</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Als ausgefallen markieren</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Mit Befehl \'In\' markieren</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Als verloren markieren</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Mit Befehl \'Out\' markieren</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Schützen</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Umbenennen</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>In Papierkorb verschieben</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Schutz aufheben</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Ändern</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Gelöscht</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Hinzugefügt</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Entfernt</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Bearbeitet</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Abgebrochen</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Geklont</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Kopiert</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Vereinfacht</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Geschützt</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Bereinigt</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Umbenannt</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Wiederhergestellt</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rollback wurde ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>In den Papierkorb verschoben</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Schutz aufgehoben</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Abgelaufen</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ja</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Nein</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Erforderliche Regeln für Passwörter:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>keine aktiven Warnungen</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 aktive Warnung</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> aktive Warnungen\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> mit \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Quality of Service</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS-Limit</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Das gewünschte Limit der E/A-Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS-Limit</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Das gewünschte Limit der E/A-Vorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>BPS-Limit für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Das gewünschte Limit der gelesenen Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>IOPS-Limit für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Das gewünschte Limit für Lesevorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>BPS-Limit für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Das gewünschte Limit der geschriebenen Bytes pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>IOPS-Limit für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Das gewünschte Limit für Schreibvorgänge pro Sekunde.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS-Block</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Das gewünschte Blocklimit der E/A-Bytes.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS-Block</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Das gewünschte Blocklimit der E/A-Vorgänge.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>BPS-Block für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Das gewünschte Blocklimit der gelesenen Bytes.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>IOPS-Block für Lesevorgänge</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Das gewünschte Blocklimit der Lesevorgänge.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>BPS-Block für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Das gewünschte Blocklimit der geschriebenen Bytes.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>IOPS-Block für Schreibvorgänge</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Das gewünschte Blocklimit der Schreibvorgänge.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Wird ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>ausführen</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>Unbekannte Aufgabe</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Wird erstellt</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>erstellen</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Wird aktualisiert</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aktualisieren</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Wird gelöscht</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD-Snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>Spiegelungsmodus für Pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>Alle Dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> enthält Snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Wird geklont</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klonen</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot von \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> muss geschützt sein.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Wird kopiert</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>kopieren</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Wird vereinfacht</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>vereinfachen</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name wird bereits von \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Der Schutz von \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> kann aufgrund untergeordneter Images nicht aufgehoben werden.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> kann nicht gelöscht werden, da es geschützt ist.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Rollback wird ausgeführt</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>Rollback</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Wird verschoben</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>verschieben</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Verschoben</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' in Papierkorb verschieben\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Image konnte nicht gefunden werden.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Wird wiederhergestellt</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>wiederherstellen</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' in \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\' verschieben\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image-Name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' wird bereits verwendet.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>Image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Wird bereinigt</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>bereinigen</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>alle Pools</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>Images von \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Spiegelung kann nicht deaktiviert werden, da sie einen Peer enthält.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>Pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>Erasure-Coding-Profil \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>Ziel \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},EmSq:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("8Y7J"),r=n("LvDl");n("Fgil"),n("aXbf");class i{constructor(t,e,n,r){this.elementRef=t,this.control=e,this.dimlessBinaryPipe=n,this.formatter=r,this.ngModelChange=new a.EventEmitter,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value)}setValue(t){/^[\d.]+$/.test(t)&&(t+=this.defaultUnit||"m");const e=this.formatter.toBytes(t),n=this.round(e);this.el.value=this.dimlessBinaryPipe.transform(n),null!==e?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(t){if(null!==t&&0!==t){if(!r.isUndefined(this.minBytes)&&t<this.minBytes)return this.minBytes;if(!r.isUndefined(this.maxBytes)&&t>this.maxBytes)return this.maxBytes;if(!r.isUndefined(this.roundPower)){const e=Math.round(Math.log(t)/Math.log(this.roundPower));return Math.pow(this.roundPower,e)}}return t}onBlur(t){this.setValue(t)}}},EpBk:function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},ExA7:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},"F+uO":function(t,e,n){var a={"./messages.cs.xlf":"ViD7","./messages.de-DE.xlf":"EiPl","./messages.es-ES.xlf":"yt+r","./messages.fr-FR.xlf":"V5SL","./messages.id-ID.xlf":"jqst","./messages.it-IT.xlf":"8j5A","./messages.ja-JP.xlf":"bN42","./messages.ko-KR.xlf":"3+CB","./messages.pl-PL.xlf":"SPu7","./messages.pt-BR.xlf":"+Wg/","./messages.zh-CN.xlf":"AiMb","./messages.zh-TW.xlf":"HjS5"};function r(t){var e=i(t);return n(e)}function i(t){if(!n.o(a,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return a[t]}r.keys=function(){return Object.keys(a)},r.resolve=i,t.exports=r,r.id="F+uO"},F8JR:function(t,e,n){"use strict";var a=n("tycR").forEach,r=n("pkCn"),i=n("rkAj"),s=r("forEach"),o=i("forEach");t.exports=s&&o?[].forEach:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}},FE24:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return f})),n.d(e,"c",(function(){return h})),n.d(e,"d",(function(){return g})),n.d(e,"e",(function(){return b})),n.d(e,"f",(function(){return d})),n.d(e,"g",(function(){return p}));var a=n("8Y7J"),r=n("pLZG"),i=n("z/SZ"),s=n("hpHm"),o=n("GS7A"),u=n("2uy1");class l{constructor(){this.autoClose=!0,this.insideClick=!1,this.isAnimated=!1}}class d{constructor(){this.direction="down",this.isOpenChange=new a.EventEmitter,this.isDisabledChange=new a.EventEmitter,this.toggleClick=new a.EventEmitter,this.dropdownMenu=new Promise(t=>{this.resolveDropdownMenu=t})}}const c=[Object(o.h)({height:0,overflow:"hidden"}),Object(o.e)("220ms cubic-bezier(0, 0, 0.2, 1)",Object(o.h)({height:"*",overflow:"hidden"}))];class f{constructor(t,e,n,a,r){this._state=t,this.cd=e,this._renderer=n,this._element=a,this.isOpen=!1,this._factoryDropDownAnimation=r.build(c),this._subscription=t.isOpenChange.subscribe(t=>{this.isOpen=t;const e=this._element.nativeElement.querySelector(".dropdown-menu");this._renderer.addClass(this._element.nativeElement.querySelector("div"),"open"),e&&!Object(s.d)()&&(this._renderer.addClass(e,"show"),e.classList.contains("dropdown-menu-right")&&(this._renderer.setStyle(e,"left","auto"),this._renderer.setStyle(e,"right","0")),"up"===this.direction&&(this._renderer.setStyle(e,"top","auto"),this._renderer.setStyle(e,"transform","translateY(-101%)"))),e&&this._state.isAnimated&&this._factoryDropDownAnimation.create(e).play(),this.cd.markForCheck(),this.cd.detectChanges()})}get direction(){return this._state.direction}_contains(t){return this._element.nativeElement.contains(t)}ngOnDestroy(){this._subscription.unsubscribe()}}class h{constructor(t,e,n,a,r,i,s){this._elementRef=t,this._renderer=e,this._viewContainerRef=n,this._cis=a,this._state=r,this._config=i,this._isInlineOpen=!1,this._subscriptions=[],this._isInited=!1,this._state.autoClose=this._config.autoClose,this._state.insideClick=this._config.insideClick,this._state.isAnimated=this._config.isAnimated,this._factoryDropDownAnimation=s.build(c),this._dropdown=this._cis.createLoader(this._elementRef,this._viewContainerRef,this._renderer).provide({provide:d,useValue:this._state}),this.onShown=this._dropdown.onShown,this.onHidden=this._dropdown.onHidden,this.isOpenChange=this._state.isOpenChange}set autoClose(t){this._state.autoClose=t}get autoClose(){return this._state.autoClose}set isAnimated(t){this._state.isAnimated=t}get isAnimated(){return this._state.isAnimated}set insideClick(t){this._state.insideClick=t}get insideClick(){return this._state.insideClick}set isDisabled(t){this._isDisabled=t,this._state.isDisabledChange.emit(t),t&&this.hide()}get isDisabled(){return this._isDisabled}get isOpen(){return this._showInline?this._isInlineOpen:this._dropdown.isShown}set isOpen(t){t?this.show():this.hide()}get isBs4(){return!Object(s.d)()}get _showInline(){return!this.container}ngOnInit(){this._isInited||(this._isInited=!0,this._dropdown.listen({outsideClick:!1,triggers:this.triggers,show:()=>this.show()}),this._subscriptions.push(this._state.toggleClick.subscribe(t=>this.toggle(t))),this._subscriptions.push(this._state.isDisabledChange.pipe(Object(r.a)(t=>t)).subscribe(t=>this.hide())))}show(){if(!this.isOpen&&!this.isDisabled)return this._showInline?(this._inlinedMenu||this._state.dropdownMenu.then(t=>{this._dropdown.attachInline(t.viewContainer,t.templateRef),this._inlinedMenu=this._dropdown._inlineViewRef,this.addBs4Polyfills(),this._renderer.addClass(this._inlinedMenu.rootNodes[0].parentNode,"open"),this.playAnimation()}).catch(),this.addBs4Polyfills(),this._isInlineOpen=!0,this.onShown.emit(!0),this._state.isOpenChange.emit(!0),void this.playAnimation()):void this._state.dropdownMenu.then(t=>{const e=this.dropup||void 0!==this.dropup&&this.dropup;this._state.direction=e?"up":"down";const n=this.placement||(e?"top start":"bottom start");this._dropdown.attach(f).to(this.container).position({attachment:n}).show({content:t.templateRef,placement:n}),this._state.isOpenChange.emit(!0)}).catch()}hide(){this.isOpen&&(this._showInline?(this.removeShowClass(),this.removeDropupStyles(),this._isInlineOpen=!1,this.onHidden.emit(!0)):this._dropdown.hide(),this._state.isOpenChange.emit(!1))}toggle(t){return this.isOpen||!t?this.hide():this.show()}_contains(t){return this._elementRef.nativeElement.contains(t.target)||this._dropdown.instance&&this._dropdown.instance._contains(t.target)}ngOnDestroy(){for(const t of this._subscriptions)t.unsubscribe();this._dropdown.dispose()}addBs4Polyfills(){Object(s.d)()||(this.addShowClass(),this.checkRightAlignment(),this.addDropupStyles())}playAnimation(){this._state.isAnimated&&this._inlinedMenu&&this._factoryDropDownAnimation.create(this._inlinedMenu.rootNodes[0]).play()}addShowClass(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.addClass(this._inlinedMenu.rootNodes[0],"show")}removeShowClass(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.removeClass(this._inlinedMenu.rootNodes[0],"show")}checkRightAlignment(){if(this._inlinedMenu&&this._inlinedMenu.rootNodes[0]){const t=this._inlinedMenu.rootNodes[0].classList.contains("dropdown-menu-right");this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"left",t?"auto":"0"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"right",t?"0":"auto")}}addDropupStyles(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"top",this.dropup?"auto":"100%"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"transform",this.dropup?"translateY(-101%)":"translateY(0)"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"bottom","auto"))}removeDropupStyles(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"top"),this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"transform"),this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"bottom"))}}class g{constructor(t,e,n){t.resolveDropdownMenu({templateRef:n,viewContainer:e})}}class p{constructor(t,e,n,a,r){this._changeDetectorRef=t,this._dropdown=e,this._element=n,this._renderer=a,this._state=r,this.isDisabled=null,this._subscriptions=[],this._subscriptions.push(this._state.isOpenChange.subscribe(t=>{this.isOpen=t,t?(this._documentClickListener=this._renderer.listen("document","click",t=>{!this._state.autoClose||2===t.button||this._element.nativeElement.contains(t.target)||this._state.insideClick&&this._dropdown._contains(t)||(this._state.toggleClick.emit(!1),this._changeDetectorRef.detectChanges())}),this._escKeyUpListener=this._renderer.listen(this._element.nativeElement,"keyup.esc",()=>{this._state.autoClose&&(this._state.toggleClick.emit(!1),this._changeDetectorRef.detectChanges())})):(this._documentClickListener(),this._escKeyUpListener())})),this._subscriptions.push(this._state.isDisabledChange.subscribe(t=>this.isDisabled=t||null))}onClick(){this.isDisabled||this._state.toggleClick.emit(!0)}ngOnDestroy(){this._documentClickListener&&this._documentClickListener(),this._escKeyUpListener&&this._escKeyUpListener();for(const t of this._subscriptions)t.unsubscribe()}}class b{static forRoot(t){return{ngModule:b,providers:[i.a,u.a,d,{provide:l,useValue:t||{autoClose:!0,insideClick:!1}}]}}}},FFMq:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return t.join(", ")}}},FMNM:function(t,e,n){var a=n("xrYK"),r=n("kmMV");t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==a(t))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(t,e)}},FSuO:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("LvDl"),i=n("x38r");n("a0VL"),n("uIqm");class s{constructor(t){this.datePipe=t,this.autoReload=5e3,this.renderObjects=!1,this.appendParentKey=!0,this.hideEmpty=!1,this.hideKeys=[],this.columns=[],this.fetchData=new a.EventEmitter}ngOnInit(){this.columns=[{prop:"key",flexGrow:1,cellTransformation:i.a.bold},{prop:"value",flexGrow:3}],this.customCss&&(this.columns[1].cellTransformation=i.a.classAdding),this.fetchData.observers.length>0&&this.table.fetchData.subscribe(()=>{this.fetchData.emit()}),this.useData()}ngOnChanges(){this.useData()}useData(){if(!this.data)return;let t=this.makePairs(this.data);this.hideKeys&&(t=t.filter(t=>!this.hideKeys.includes(t.key))),this.tableData=t}makePairs(t){let e=[];if(t){if(r.isArray(t))e=this.makePairsFromArray(t);else{if(!r.isObject(t))throw new Error("Wrong data format");e=this.makePairsFromObject(t)}return e=e.map(t=>(t.value=this.convertValue(t.value),t)).filter(t=>null!==t.value),r.sortBy(this.renderObjects?this.insertFlattenObjects(e):e,"key")}}makePairsFromArray(t){let e=[];const n=t[0];if(r.isArray(n)){if(2!==n.length)throw new Error(`Array contains too many elements (${n.length}). `+"Needs to be of type [string, any][]");e=t.map(t=>({key:t[0],value:t[1]}))}else r.isObject(n)&&(e=r.has(n,"key")&&r.has(n,"value")?[...t]:t.reduce((t,e)=>t.concat(this.makePairsFromObject(e)),e));return e}makePairsFromObject(t){return Object.keys(t).map(e=>({key:e,value:t[e]}))}insertFlattenObjects(t){return r.flattenDeep(t.map(t=>{const e=t.value,n=r.isObject(e);return!n||r.isEmpty(e)?(n&&(t.value=""),t):this.splitItemIntoItems(t)}))}splitItemIntoItems(t){return this.makePairs(t.value).map(e=>(this.appendParentKey&&(e.key=t.key+" "+e.key),e))}convertValue(t){if(r.isArray(t)){if(r.isEmpty(t)&&this.hideEmpty)return null;t=t.map(t=>r.isObject(t)?JSON.stringify(t):t).join(", ")}else if(r.isObject(t)){if(this.hideEmpty&&r.isEmpty(t)||!this.renderObjects)return null}else if(r.isString(t)){if(""===t&&this.hideEmpty)return null;this.isDate(t)&&(t=this.datePipe.transform(t)||t)}return t}isDate(t){const e="\\d{2}[ -:.TZ]";return t.match(new RegExp("^\\d{4}[ -:.TZ]"+e+e+e+e+e+"\\d*Z?$"))}}},FZoo:function(t,e,n){var a=n("MrPd"),r=n("4uTw"),i=n("wJg7"),s=n("GoyQ"),o=n("9Nap");t.exports=function(t,e,n,u){if(!s(t))return t;for(var l=-1,d=(e=r(e,t)).length,c=d-1,f=t;null!=f&&++l<d;){var h=o(e[l]),g=n;if(l!=c){var p=f[h];void 0===(g=u?u(p,h,f):void 0)&&(g=s(p)?p:i(e[l+1])?[]:{})}a(f,h,g),f=f[h]}return t}},FZtP:function(t,e,n){var a=n("2oRo"),r=n("/byt"),i=n("F8JR"),s=n("kRJp");for(var o in r){var u=a[o],l=u&&u.prototype;if(l&&l.forEach!==i)try{s(l,"forEach",i)}catch(d){l.forEach=i}}},FfPP:function(t,e,n){var a=n("idmN"),r=n("hgQt");t.exports=function(t,e){return a(t,e,(function(e,n){return r(t,n)}))}},Fgil:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1024,["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"])}}},Fwy9:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("gk6K"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(t,e,n,r){this.el=t,this.renderer=e,this.treeDraggedElement=n,this.ngZone=r,this.allowDragoverStyling=!0,this.onDropCallback=new a.EventEmitter,this.onDragOverCallback=new a.EventEmitter,this.onDragLeaveCallback=new a.EventEmitter,this.onDragEnterCallback=new a.EventEmitter,this._allowDrop=function(t,e){return!0},this.dragOverEventHandler=this.onDragOver.bind(this),this.dragEnterEventHandler=this.onDragEnter.bind(this),this.dragLeaveEventHandler=this.onDragLeave.bind(this)}return Object.defineProperty(t.prototype,"treeAllowDrop",{set:function(t){this._allowDrop=t instanceof Function?t:function(e,n){return t}},enumerable:!0,configurable:!0}),t.prototype.allowDrop=function(t){return this._allowDrop(this.treeDraggedElement.get(),t)},t.prototype.ngAfterViewInit=function(){var t=this,e=this.el.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("dragover",t.dragOverEventHandler),e.addEventListener("dragenter",t.dragEnterEventHandler),e.addEventListener("dragleave",t.dragLeaveEventHandler)}))},t.prototype.ngOnDestroy=function(){var t=this.el.nativeElement;t.removeEventListener("dragover",this.dragOverEventHandler),t.removeEventListener("dragenter",this.dragEnterEventHandler),t.removeEventListener("dragleave",this.dragLeaveEventHandler)},t.prototype.onDragOver=function(t){if(!this.allowDrop(t))return this.allowDragoverStyling?this.addDisabledClass():void 0;this.onDragOverCallback.emit({event:t,element:this.treeDraggedElement.get()}),t.preventDefault(),this.allowDragoverStyling&&this.addClass()},t.prototype.onDragEnter=function(t){this.allowDrop(t)&&(t.preventDefault(),this.onDragEnterCallback.emit({event:t,element:this.treeDraggedElement.get()}))},t.prototype.onDragLeave=function(t){if(!this.allowDrop(t))return this.allowDragoverStyling?this.removeDisabledClass():void 0;this.onDragLeaveCallback.emit({event:t,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass()},t.prototype.onDrop=function(t){this.allowDrop(t)&&(t.preventDefault(),this.onDropCallback.emit({event:t,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass(),this.treeDraggedElement.set(null))},t.prototype.addClass=function(){this.renderer.addClass(this.el.nativeElement,"is-dragging-over")},t.prototype.removeClass=function(){this.renderer.removeClass(this.el.nativeElement,"is-dragging-over")},t.prototype.addDisabledClass=function(){this.renderer.addClass(this.el.nativeElement,"is-dragging-over-disabled")},t.prototype.removeDisabledClass=function(){this.renderer.removeClass(this.el.nativeElement,"is-dragging-over-disabled")},i([Object(a.Input)(),s("design:type",Object)],t.prototype,"allowDragoverStyling",void 0),i([Object(a.Output)("treeDrop"),s("design:type",Object)],t.prototype,"onDropCallback",void 0),i([Object(a.Output)("treeDropDragOver"),s("design:type",Object)],t.prototype,"onDragOverCallback",void 0),i([Object(a.Output)("treeDropDragLeave"),s("design:type",Object)],t.prototype,"onDragLeaveCallback",void 0),i([Object(a.Output)("treeDropDragEnter"),s("design:type",Object)],t.prototype,"onDragEnterCallback",void 0),i([Object(a.Input)(),s("design:type",Object),s("design:paramtypes",[Object])],t.prototype,"treeAllowDrop",null),i([Object(a.HostListener)("drop",["$event"]),s("design:type",Function),s("design:paramtypes",[Object]),s("design:returntype",void 0)],t.prototype,"onDrop",null),i([Object(a.Directive)({selector:"[treeDrop]"}),s("design:paramtypes",[a.ElementRef,a.Renderer2,r.a,a.NgZone])],t)}()},"G+Rx":function(t,e,n){var a=n("0GbY");t.exports=a("document","documentElement")},G0Uy:function(t,e,n){!function(t){"use strict";t.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},"G1/K":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.i18n=t}transform(t){return""===t?this.i18n("n/a"):t}}},G1I9:function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return s}));var a=n("oxzT"),r=n("mtw6");class i{constructor(t=r.a.info,e,n,a,i="Ceph"){this.type=t,this.title=e,this.message=n,this.options=a,this.application=i,this.isFinishedTask=!1,this.classes={Ceph:"ceph-icon",Prometheus:"prometheus-icon"},this.applicationClass=this.classes[this.application]}}class s extends i{constructor(t=new i){super(t.type,t.title,t.message,t.options,t.application),this.config=t,this.textClasses=["text-danger","text-info","text-success"],this.iconClasses=[a.a.warning,a.a.info,a.a.check],delete this.config,this.timestamp=(new Date).toJSON(),this.iconClass=this.iconClasses[this.type],this.textClass=this.textClasses[this.type],this.isFinishedTask=t.isFinishedTask}}},"G6Q+":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},G6z8:function(t,e,n){var a=n("fR/l"),r=n("oCl/"),i=n("mTTR");t.exports=function(t){return a(t,i,r)}},GDhZ:function(t,e,n){var a=n("wF/u"),r=n("mwIZ"),i=n("hgQt"),s=n("9ggG"),o=n("CMye"),u=n("IOzZ"),l=n("9Nap");t.exports=function(t,e){return s(t)&&o(e)?u(l(t),e):function(n){var s=r(n,t);return void 0===s&&s===e?i(n,t):a(e,s,3)}}},GNiM:function(t,e,n){var a=n("I01J"),r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,s=a((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(r,(function(t,n,a,r){e.push(a?r.replace(i,"$1"):n||t)})),e}));t.exports=s},GS7A:function(t,e,n){"use strict";n.d(e,"b",(function(){return a})),n.d(e,"c",(function(){return r})),n.d(e,"a",(function(){return i})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return c})),n.d(e,"j",(function(){return s})),n.d(e,"d",(function(){return h})),n.d(e,"k",(function(){return g})),n.d(e,"l",(function(){return p}));class a{}class r{}const i="*";function s(t,e){return{type:7,name:t,definitions:e,options:{}}}function o(t,e=null){return{type:4,styles:e,timings:t}}function u(t,e=null){return{type:2,steps:t,options:e}}function l(t){return{type:6,styles:t,offset:null}}function d(t,e,n){return{type:0,name:t,styles:e,options:n}}function c(t,e,n=null){return{type:1,expr:t,animation:e,options:n}}function f(t){Promise.resolve(null).then(t)}class h{constructor(t=0,e=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=t+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){f(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){}setPosition(t){}getPosition(){return 0}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class g{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let e=0,n=0,a=0;const r=this.players.length;0==r?f(()=>this._onFinish()):this.players.forEach(t=>{t.onDone(()=>{++e==r&&this._onFinish()}),t.onDestroy(()=>{++n==r&&this._onDestroy()}),t.onStart(()=>{++a==r&&this._onStart()})}),this.totalTime=this.players.reduce((t,e)=>Math.max(t,e.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){const e=t*this.totalTime;this.players.forEach(t=>{const n=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(n)})}getPosition(){let t=0;return this.players.forEach(e=>{const n=e.getPosition();t=Math.min(n,t)}),t}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}const p="!"},GarU:function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},GgAd:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(){this.isBinary=!0,this.decimals=0}ngOnChanges(){this.usedPercentage=this.total>0?this.used/this.total*100:0,this.freePercentage=100-this.usedPercentage}}},Gi0A:function(t,e,n){var a=n("QqLw"),r=n("ExA7");t.exports=function(t){return r(t)&&"[object Map]"==a(t)}},GiVz:function(t,e,n){"use strict";n.d(e,"a",(function(){return We})),n.d(e,"b",(function(){return Ue}));var a=n("SVse"),r=n("8Y7J");class i{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitText(this,e)}}class s{constructor(t,e,n,a,r){this.switchValue=t,this.type=e,this.cases=n,this.sourceSpan=a,this.switchValueSourceSpan=r}visit(t,e){return t.visitExpansion(this,e)}}class o{constructor(t,e,n,a,r){this.value=t,this.expression=e,this.sourceSpan=n,this.valueSourceSpan=a,this.expSourceSpan=r}visit(t,e){return t.visitExpansionCase(this,e)}}class u{constructor(t,e,n,a){this.name=t,this.value=e,this.sourceSpan=n,this.valueSpan=a}visit(t,e){return t.visitAttribute(this,e)}}class l{constructor(t,e,n,a,r=null,i=null){this.name=t,this.attrs=e,this.children=n,this.sourceSpan=a,this.startSourceSpan=r,this.endSourceSpan=i}visit(t,e){return t.visitElement(this,e)}}class d{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitComment(this,e)}}function c(t,e,n=null){const a=[],r=t.visit?e=>t.visit(e,n)||e.visit(t,n):e=>e.visit(t,n);return e.forEach(t=>{const e=r(t);e&&a.push(e)}),a}class f{constructor(t,e,n,a,r,i){this.nodes=t,this.placeholders=e,this.placeholderToMessage=n,this.meaning=a,this.description=r,this.id=i,this.sources=t.length?[{filePath:t[0].sourceSpan.start.file.url,startLine:t[0].sourceSpan.start.line+1,startCol:t[0].sourceSpan.start.col+1,endLine:t[t.length-1].sourceSpan.end.line+1,endCol:t[0].sourceSpan.start.col+1}]:[]}}class h{constructor(t,e){this.value=t,this.sourceSpan=e}visit(t,e){return t.visitText(this,e)}}class g{constructor(t,e){this.children=t,this.sourceSpan=e}visit(t,e){return t.visitContainer(this,e)}}class p{constructor(t,e,n,a){this.expression=t,this.type=e,this.cases=n,this.sourceSpan=a}visit(t,e){return t.visitIcu(this,e)}}class b{constructor(t,e,n,a,r,i,s){this.tag=t,this.attrs=e,this.startName=n,this.closeName=a,this.children=r,this.isVoid=i,this.sourceSpan=s}visit(t,e){return t.visitTagPlaceholder(this,e)}}class m{constructor(t,e,n){this.value=t,this.name=e,this.sourceSpan=n}visit(t,e){return t.visitPlaceholder(this,e)}}class y{constructor(t,e,n){this.value=t,this.name=e,this.sourceSpan=n}visit(t,e){return t.visitIcuPlaceholder(this,e)}}class v{constructor(t,e,n,a){this.file=t,this.offset=e,this.line=n,this.col=a}toString(){return null!=this.offset?`${this.line}:${this.col}`:""}getContext(t,e){const n=this.file.content;let a=this.offset;if(null!=a){a>n.length-1&&(a=n.length-1);let r=a,i=0,s=0;for(;i<t&&a>0&&(a--,i++,"\n"!==n[a]||++s!==e););for(i=0,s=0;i<t&&r<n.length-1&&(r++,i++,"\n"!==n[r]||++s!==e););return{before:n.substring(a,this.offset),after:n.substring(this.offset,r+1)}}return null}}class x{constructor(t,e=""){this.content=t,this.url=e}}class _{constructor(t,e,n=null){this.start=t,this.end=e,this.details=n}toString(){return this.start.file.content.substring(this.start.offset,this.end.offset)}}const T=function(){var t={WARNING:0,ERROR:1};return t[t.WARNING]="WARNING",t[t.ERROR]="ERROR",t}();class O{constructor(t,e,n=T.ERROR){this.span=t,this.msg=e,this.level=n}contextualMessage(){const t=this.span.start.getContext(100,3);return t?` ("${t.before}[${T[this.level]} ->]${t.after}")`:""}toString(){const t=this.span.details?`, ${this.span.details}`:"";return`${this.msg}${this.contextualMessage()}: ${this.span.start}${t}`}}class w extends O{constructor(t,e){super(t,e)}}function S(t){return t.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}class I{constructor(t,e){this.start=t,this.end=e}}const N=new I("{{","}}");function C(t){return t>=9&&t<=32||160===t}function R(t){return 48<=t&&t<=57}function A(t){return t>=97&&t<=122||t>=65&&t<=90}const k=function(){var t={RAW_TEXT:0,ESCAPABLE_RAW_TEXT:1,PARSABLE_DATA:2};return t[t.RAW_TEXT]="RAW_TEXT",t[t.ESCAPABLE_RAW_TEXT]="ESCAPABLE_RAW_TEXT",t[t.PARSABLE_DATA]="PARSABLE_DATA",t}();function E(t){if(":"!==t[0])return[null,t];const e=t.indexOf(":",1);if(-1===e)throw new Error(`Unsupported format "${t}" expecting ":namespace:name"`);return[t.slice(1,e),t.slice(e+1)]}function L(t){return null===t?null:E(t)[0]}function D(t,e){return t?`:${t}:${e}`:e}const P={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",alefsym:"ℵ",Alpha:"Α",alpha:"α",amp:"&",and:"∧",ang:"∠",apos:"'",Aring:"Å",aring:"å",asymp:"≈",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",bdquo:"„",Beta:"Β",beta:"β",brvbar:"¦",bull:"•",cap:"∩",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",Chi:"Χ",chi:"χ",circ:"ˆ",clubs:"♣",cong:"≅",copy:"©",crarr:"↵",cup:"∪",curren:"¤",dagger:"†",Dagger:"‡",darr:"↓",dArr:"⇓",deg:"°",Delta:"Δ",delta:"δ",diams:"♦",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",empty:"∅",emsp:" ",ensp:" ",Epsilon:"Ε",epsilon:"ε",equiv:"≡",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",exist:"∃",fnof:"ƒ",forall:"∀",frac12:"½",frac14:"¼",frac34:"¾",frasl:"⁄",Gamma:"Γ",gamma:"γ",ge:"≥",gt:">",harr:"↔",hArr:"⇔",hearts:"♥",hellip:"…",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",image:"ℑ",infin:"∞",int:"∫",Iota:"Ι",iota:"ι",iquest:"¿",isin:"∈",Iuml:"Ï",iuml:"ï",Kappa:"Κ",kappa:"κ",Lambda:"Λ",lambda:"λ",lang:"⟨",laquo:"«",larr:"←",lArr:"⇐",lceil:"⌈",ldquo:"“",le:"≤",lfloor:"⌊",lowast:"∗",loz:"◊",lrm:"‎",lsaquo:"‹",lsquo:"‘",lt:"<",macr:"¯",mdash:"—",micro:"µ",middot:"·",minus:"−",Mu:"Μ",mu:"μ",nabla:"∇",nbsp:" ",ndash:"–",ne:"≠",ni:"∋",not:"¬",notin:"∉",nsub:"⊄",Ntilde:"Ñ",ntilde:"ñ",Nu:"Ν",nu:"ν",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",OElig:"Œ",oelig:"œ",Ograve:"Ò",ograve:"ò",oline:"‾",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",oplus:"⊕",or:"∨",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",otimes:"⊗",Ouml:"Ö",ouml:"ö",para:"¶",permil:"‰",perp:"⊥",Phi:"Φ",phi:"φ",Pi:"Π",pi:"π",piv:"ϖ",plusmn:"±",pound:"£",prime:"′",Prime:"″",prod:"∏",prop:"∝",Psi:"Ψ",psi:"ψ",quot:'"',radic:"√",rang:"⟩",raquo:"»",rarr:"→",rArr:"⇒",rceil:"⌉",rdquo:"”",real:"ℜ",reg:"®",rfloor:"⌋",Rho:"Ρ",rho:"ρ",rlm:"‏",rsaquo:"›",rsquo:"’",sbquo:"‚",Scaron:"Š",scaron:"š",sdot:"⋅",sect:"§",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sim:"∼",spades:"♠",sub:"⊂",sube:"⊆",sum:"∑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supe:"⊇",szlig:"ß",Tau:"Τ",tau:"τ",there4:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thinsp:" ",THORN:"Þ",thorn:"þ",tilde:"˜",times:"×",trade:"™",Uacute:"Ú",uacute:"ú",uarr:"↑",uArr:"⇑",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",Uuml:"Ü",uuml:"ü",weierp:"℘",Xi:"Ξ",xi:"ξ",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ",Yuml:"Ÿ",Zeta:"Ζ",zeta:"ζ",zwj:"‍",zwnj:"‌",ngsp:""},M=function(){var t={TAG_OPEN_START:0,TAG_OPEN_END:1,TAG_OPEN_END_VOID:2,TAG_CLOSE:3,TEXT:4,ESCAPABLE_RAW_TEXT:5,RAW_TEXT:6,COMMENT_START:7,COMMENT_END:8,CDATA_START:9,CDATA_END:10,ATTR_NAME:11,ATTR_VALUE:12,DOC_TYPE:13,EXPANSION_FORM_START:14,EXPANSION_CASE_VALUE:15,EXPANSION_CASE_EXP_START:16,EXPANSION_CASE_EXP_END:17,EXPANSION_FORM_END:18,EOF:19};return t[t.TAG_OPEN_START]="TAG_OPEN_START",t[t.TAG_OPEN_END]="TAG_OPEN_END",t[t.TAG_OPEN_END_VOID]="TAG_OPEN_END_VOID",t[t.TAG_CLOSE]="TAG_CLOSE",t[t.TEXT]="TEXT",t[t.ESCAPABLE_RAW_TEXT]="ESCAPABLE_RAW_TEXT",t[t.RAW_TEXT]="RAW_TEXT",t[t.COMMENT_START]="COMMENT_START",t[t.COMMENT_END]="COMMENT_END",t[t.CDATA_START]="CDATA_START",t[t.CDATA_END]="CDATA_END",t[t.ATTR_NAME]="ATTR_NAME",t[t.ATTR_VALUE]="ATTR_VALUE",t[t.DOC_TYPE]="DOC_TYPE",t[t.EXPANSION_FORM_START]="EXPANSION_FORM_START",t[t.EXPANSION_CASE_VALUE]="EXPANSION_CASE_VALUE",t[t.EXPANSION_CASE_EXP_START]="EXPANSION_CASE_EXP_START",t[t.EXPANSION_CASE_EXP_END]="EXPANSION_CASE_EXP_END",t[t.EXPANSION_FORM_END]="EXPANSION_FORM_END",t[t.EOF]="EOF",t}();class q{constructor(t,e,n){this.type=t,this.parts=e,this.sourceSpan=n}}class j extends O{constructor(t,e,n){super(n,t),this.tokenType=e}}class F{constructor(t,e){this.tokens=t,this.errors=e}}const G=/\r\n?/g;function V(t){return`Unexpected character "${0===t?"EOF":String.fromCharCode(t)}"`}function z(t){return`Unknown entity "${t}" - use the "&#<decimal>;" or  "&#x<hex>;" syntax`}class B{constructor(t){this.error=t}}class Y{constructor(t,e,n,a=N){this._file=t,this._getTagDefinition=e,this._tokenizeIcu=n,this._interpolationConfig=a,this._peek=-1,this._nextPeek=-1,this._index=-1,this._line=0,this._column=-1,this._expansionCaseStack=[],this._inInterpolation=!1,this.tokens=[],this.errors=[],this._input=t.content,this._length=t.content.length,this._advance()}_processCarriageReturns(t){return t.replace(G,"\n")}tokenize(){for(;0!==this._peek;){const e=this._getLocation();try{this._attemptCharCode(60)?this._attemptCharCode(33)?this._attemptCharCode(91)?this._consumeCdata(e):this._attemptCharCode(45)?this._consumeComment(e):this._consumeDocType(e):this._attemptCharCode(47)?this._consumeTagClose(e):this._consumeTagOpen(e):this._tokenizeIcu&&this._tokenizeExpansionForm()||this._consumeText()}catch(t){if(!(t instanceof B))throw t;this.errors.push(t.error)}}return this._beginToken(M.EOF),this._endToken([]),new F(function(t){const e=[];let n=void 0;for(let a=0;a<t.length;a++){const r=t[a];n&&n.type===M.TEXT&&r.type===M.TEXT?(n.parts[0]+=r.parts[0],n.sourceSpan.end=r.sourceSpan.end):(n=r,e.push(n))}return e}(this.tokens),this.errors)}_tokenizeExpansionForm(){if($(this._input,this._index,this._interpolationConfig))return this._consumeExpansionFormStart(),!0;if((61===(t=this._peek)||A(t)||R(t))&&this._isInExpansionForm())return this._consumeExpansionCaseStart(),!0;var t;if(125===this._peek){if(this._isInExpansionCase())return this._consumeExpansionCaseEnd(),!0;if(this._isInExpansionForm())return this._consumeExpansionFormEnd(),!0}return!1}_getLocation(){return new v(this._file,this._index,this._line,this._column)}_getSpan(t=this._getLocation(),e=this._getLocation()){return new _(t,e)}_beginToken(t,e=this._getLocation()){this._currentTokenStart=e,this._currentTokenType=t}_endToken(t,e=this._getLocation()){const n=new q(this._currentTokenType,t,new _(this._currentTokenStart,e));return this.tokens.push(n),this._currentTokenStart=null,this._currentTokenType=null,n}_createError(t,e){this._isInExpansionForm()&&(t+=' (Do you have an unescaped "{" in your template? Use "{{ \'{\' }}") to escape it.)');const n=new j(t,this._currentTokenType,e);return this._currentTokenStart=null,this._currentTokenType=null,new B(n)}_advance(){if(this._index>=this._length)throw this._createError(V(0),this._getSpan());10===this._peek?(this._line++,this._column=0):10!==this._peek&&13!==this._peek&&this._column++,this._index++,this._peek=this._index>=this._length?0:this._input.charCodeAt(this._index),this._nextPeek=this._index+1>=this._length?0:this._input.charCodeAt(this._index+1)}_attemptCharCode(t){return this._peek===t&&(this._advance(),!0)}_attemptCharCodeCaseInsensitive(t){return e=t,Z(this._peek)===Z(e)&&(this._advance(),!0);var e}_requireCharCode(t){const e=this._getLocation();if(!this._attemptCharCode(t))throw this._createError(V(this._peek),this._getSpan(e,e))}_attemptStr(t){const e=t.length;if(this._index+e>this._length)return!1;const n=this._savePosition();for(let a=0;a<e;a++)if(!this._attemptCharCode(t.charCodeAt(a)))return this._restorePosition(n),!1;return!0}_attemptStrCaseInsensitive(t){for(let e=0;e<t.length;e++)if(!this._attemptCharCodeCaseInsensitive(t.charCodeAt(e)))return!1;return!0}_requireStr(t){const e=this._getLocation();if(!this._attemptStr(t))throw this._createError(V(this._peek),this._getSpan(e))}_attemptCharCodeUntilFn(t){for(;!t(this._peek);)this._advance()}_requireCharCodeUntilFn(t,e){const n=this._getLocation();if(this._attemptCharCodeUntilFn(t),this._index-n.offset<e)throw this._createError(V(this._peek),this._getSpan(n,n))}_attemptUntilChar(t){for(;this._peek!==t;)this._advance()}_readChar(t){if(t&&38===this._peek)return this._decodeEntity();{const t=this._index;return this._advance(),this._input[t]}}_decodeEntity(){const t=this._getLocation();if(this._advance(),!this._attemptCharCode(35)){const e=this._savePosition();if(this._attemptCharCodeUntilFn(K),59!==this._peek)return this._restorePosition(e),"&";this._advance();const n=this._input.substring(t.offset+1,this._index-1),a=P[n];if(!a)throw this._createError(z(n),this._getSpan(t));return a}{const n=this._attemptCharCode(120)||this._attemptCharCode(88),a=this._getLocation().offset;if(this._attemptCharCodeUntilFn(W),59!==this._peek)throw this._createError(V(this._peek),this._getSpan());this._advance();const r=this._input.substring(a,this._index-1);try{const t=parseInt(r,n?16:10);return String.fromCharCode(t)}catch(e){const n=this._input.substring(t.offset+1,this._index-1);throw this._createError(z(n),this._getSpan(t))}}}_consumeRawText(t,e,n){let a;const r=this._getLocation();this._beginToken(t?M.ESCAPABLE_RAW_TEXT:M.RAW_TEXT,r);const i=[];for(;a=this._getLocation(),!this._attemptCharCode(e)||!n();)for(this._index>a.offset&&i.push(this._input.substring(a.offset,this._index));this._peek!==e;)i.push(this._readChar(t));return this._endToken([this._processCarriageReturns(i.join(""))],a)}_consumeComment(t){this._beginToken(M.COMMENT_START,t),this._requireCharCode(45),this._endToken([]);const e=this._consumeRawText(!1,45,()=>this._attemptStr("->"));this._beginToken(M.COMMENT_END,e.sourceSpan.end),this._endToken([])}_consumeCdata(t){this._beginToken(M.CDATA_START,t),this._requireStr("CDATA["),this._endToken([]);const e=this._consumeRawText(!1,93,()=>this._attemptStr("]>"));this._beginToken(M.CDATA_END,e.sourceSpan.end),this._endToken([])}_consumeDocType(t){this._beginToken(M.DOC_TYPE,t),this._attemptUntilChar(62),this._advance(),this._endToken([this._input.substring(t.offset+2,this._index-1)])}_consumePrefixAndName(){const t=this._index;let e=null;for(;58!==this._peek&&!(((n=this._peek)<97||122<n)&&(n<65||90<n)&&(n<48||n>57));)this._advance();var n;let a;return 58===this._peek?(this._advance(),e=this._input.substring(t,this._index-1),a=this._index):a=t,this._requireCharCodeUntilFn(U,this._index===a?1:0),[e,this._input.substring(a,this._index)]}_consumeTagOpen(t){const e=this._savePosition();let n,a;try{if(!A(this._peek))throw this._createError(V(this._peek),this._getSpan());const e=this._index;for(this._consumeTagOpenStart(t),n=this._input.substring(e,this._index),a=n.toLowerCase(),this._attemptCharCodeUntilFn(H);47!==this._peek&&62!==this._peek;)this._consumeAttributeName(),this._attemptCharCodeUntilFn(H),this._attemptCharCode(61)&&(this._attemptCharCodeUntilFn(H),this._consumeAttributeValue()),this._attemptCharCodeUntilFn(H);this._consumeTagOpenEnd()}catch(i){if(i instanceof B)return this._restorePosition(e),this._beginToken(M.TEXT,t),void this._endToken(["<"]);throw i}const r=this._getTagDefinition(n).contentType;r===k.RAW_TEXT?this._consumeRawTextWithTagClose(a,!1):r===k.ESCAPABLE_RAW_TEXT&&this._consumeRawTextWithTagClose(a,!0)}_consumeRawTextWithTagClose(t,e){const n=this._consumeRawText(e,60,()=>!!this._attemptCharCode(47)&&(this._attemptCharCodeUntilFn(H),!!this._attemptStrCaseInsensitive(t)&&(this._attemptCharCodeUntilFn(H),this._attemptCharCode(62))));this._beginToken(M.TAG_CLOSE,n.sourceSpan.end),this._endToken([null,t])}_consumeTagOpenStart(t){this._beginToken(M.TAG_OPEN_START,t);const e=this._consumePrefixAndName();this._endToken(e)}_consumeAttributeName(){this._beginToken(M.ATTR_NAME);const t=this._consumePrefixAndName();this._endToken(t)}_consumeAttributeValue(){let t;if(this._beginToken(M.ATTR_VALUE),39===this._peek||34===this._peek){const e=this._peek;this._advance();const n=[];for(;this._peek!==e;)n.push(this._readChar(!0));t=n.join(""),this._advance()}else{const e=this._index;this._requireCharCodeUntilFn(U,1),t=this._input.substring(e,this._index)}this._endToken([this._processCarriageReturns(t)])}_consumeTagOpenEnd(){const t=this._attemptCharCode(47)?M.TAG_OPEN_END_VOID:M.TAG_OPEN_END;this._beginToken(t),this._requireCharCode(62),this._endToken([])}_consumeTagClose(t){this._beginToken(M.TAG_CLOSE,t),this._attemptCharCodeUntilFn(H);const e=this._consumePrefixAndName();this._attemptCharCodeUntilFn(H),this._requireCharCode(62),this._endToken(e)}_consumeExpansionFormStart(){this._beginToken(M.EXPANSION_FORM_START,this._getLocation()),this._requireCharCode(123),this._endToken([]),this._expansionCaseStack.push(M.EXPANSION_FORM_START),this._beginToken(M.RAW_TEXT,this._getLocation());const t=this._readUntil(44);this._endToken([t],this._getLocation()),this._requireCharCode(44),this._attemptCharCodeUntilFn(H),this._beginToken(M.RAW_TEXT,this._getLocation());const e=this._readUntil(44);this._endToken([e],this._getLocation()),this._requireCharCode(44),this._attemptCharCodeUntilFn(H)}_consumeExpansionCaseStart(){this._beginToken(M.EXPANSION_CASE_VALUE,this._getLocation());const t=this._readUntil(123).trim();this._endToken([t],this._getLocation()),this._attemptCharCodeUntilFn(H),this._beginToken(M.EXPANSION_CASE_EXP_START,this._getLocation()),this._requireCharCode(123),this._endToken([],this._getLocation()),this._attemptCharCodeUntilFn(H),this._expansionCaseStack.push(M.EXPANSION_CASE_EXP_START)}_consumeExpansionCaseEnd(){this._beginToken(M.EXPANSION_CASE_EXP_END,this._getLocation()),this._requireCharCode(125),this._endToken([],this._getLocation()),this._attemptCharCodeUntilFn(H),this._expansionCaseStack.pop()}_consumeExpansionFormEnd(){this._beginToken(M.EXPANSION_FORM_END,this._getLocation()),this._requireCharCode(125),this._endToken([]),this._expansionCaseStack.pop()}_consumeText(){const t=this._getLocation();this._beginToken(M.TEXT,t);const e=[];do{this._interpolationConfig&&this._attemptStr(this._interpolationConfig.start)?(e.push(this._interpolationConfig.start),this._inInterpolation=!0):this._interpolationConfig&&this._inInterpolation&&this._attemptStr(this._interpolationConfig.end)?(e.push(this._interpolationConfig.end),this._inInterpolation=!1):e.push(this._readChar(!0))}while(!this._isTextEnd());this._endToken([this._processCarriageReturns(e.join(""))])}_isTextEnd(){if(60===this._peek||0===this._peek)return!0;if(this._tokenizeIcu&&!this._inInterpolation){if($(this._input,this._index,this._interpolationConfig))return!0;if(125===this._peek&&this._isInExpansionCase())return!0}return!1}_savePosition(){return[this._peek,this._index,this._column,this._line,this.tokens.length]}_readUntil(t){const e=this._index;return this._attemptUntilChar(t),this._input.substring(e,this._index)}_restorePosition(t){this._peek=t[0],this._index=t[1],this._column=t[2],this._line=t[3];const e=t[4];e<this.tokens.length&&(this.tokens=this.tokens.slice(0,e))}_isInExpansionCase(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===M.EXPANSION_CASE_EXP_START}_isInExpansionForm(){return this._expansionCaseStack.length>0&&this._expansionCaseStack[this._expansionCaseStack.length-1]===M.EXPANSION_FORM_START}}function H(t){return!C(t)||0===t}function U(t){return C(t)||62===t||47===t||39===t||34===t||61===t}function W(t){return 59===t||0===t||!function(t){return t>=97&&t<=102||t>=65&&t<=70||R(t)}(t)}function K(t){return 59===t||0===t||!A(t)}function $(t,e,n){const a=!!n&&t.indexOf(n.start,e)===e;return 123===t.charCodeAt(e)&&!a}function Z(t){return t>=97&&t<=122?t-97+65:t}class J extends O{constructor(t,e,n){super(e,n),this.elementName=t}static create(t,e,n){return new J(t,e,n)}}class Q{constructor(t,e){this.rootNodes=t,this.errors=e}}class X{constructor(t){this.getTagDefinition=t}parse(t,e,n=!1,a=N){const r=function(t,e,n,a=!1,r=N){return new Y(new x(t,e),n,a,r).tokenize()}(t,e,this.getTagDefinition,n,a),i=new tt(r.tokens,this.getTagDefinition).build();return new Q(i.rootNodes,r.errors.concat(i.errors))}}class tt{constructor(t,e){this.tokens=t,this.getTagDefinition=e,this._index=-1,this._rootNodes=[],this._errors=[],this._elementStack=[],this._advance()}build(){for(;this._peek.type!==M.EOF;)this._peek.type===M.TAG_OPEN_START?this._consumeStartTag(this._advance()):this._peek.type===M.TAG_CLOSE?this._consumeEndTag(this._advance()):this._peek.type===M.CDATA_START?(this._closeVoidElement(),this._consumeCdata(this._advance())):this._peek.type===M.COMMENT_START?(this._closeVoidElement(),this._consumeComment(this._advance())):this._peek.type===M.TEXT||this._peek.type===M.RAW_TEXT||this._peek.type===M.ESCAPABLE_RAW_TEXT?(this._closeVoidElement(),this._consumeText(this._advance())):this._peek.type===M.EXPANSION_FORM_START?this._consumeExpansion(this._advance()):this._advance();return new Q(this._rootNodes,this._errors)}_advance(){const t=this._peek;return this._index<this.tokens.length-1&&this._index++,this._peek=this.tokens[this._index],t}_advanceIf(t){return this._peek.type===t?this._advance():null}_consumeCdata(t){this._consumeText(this._advance()),this._advanceIf(M.CDATA_END)}_consumeComment(t){const e=this._advanceIf(M.RAW_TEXT);this._advanceIf(M.COMMENT_END);const n=null!==e?e.parts[0].trim():null;this._addToParent(new d(n,t.sourceSpan))}_consumeExpansion(t){const e=this._advance(),n=this._advance(),a=[];for(;this._peek.type===M.EXPANSION_CASE_VALUE;){const t=this._parseExpansionCase();if(!t)return;a.push(t)}if(this._peek.type!==M.EXPANSION_FORM_END)return void this._errors.push(J.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '}'."));const r=new _(t.sourceSpan.start,this._peek.sourceSpan.end);this._addToParent(new s(e.parts[0],n.parts[0],a,r,e.sourceSpan)),this._advance()}_parseExpansionCase(){const t=this._advance();if(this._peek.type!==M.EXPANSION_CASE_EXP_START)return this._errors.push(J.create(null,this._peek.sourceSpan,"Invalid ICU message. Missing '{'.")),null;const e=this._advance(),n=this._collectExpansionExpTokens(e);if(!n)return null;const a=this._advance();n.push(new q(M.EOF,[],a.sourceSpan));const r=new tt(n,this.getTagDefinition).build();if(r.errors.length>0)return this._errors=this._errors.concat(r.errors),null;const i=new _(t.sourceSpan.start,a.sourceSpan.end),s=new _(e.sourceSpan.start,a.sourceSpan.end);return new o(t.parts[0],r.rootNodes,i,t.sourceSpan,s)}_collectExpansionExpTokens(t){const e=[],n=[M.EXPANSION_CASE_EXP_START];for(;;){if(this._peek.type!==M.EXPANSION_FORM_START&&this._peek.type!==M.EXPANSION_CASE_EXP_START||n.push(this._peek.type),this._peek.type===M.EXPANSION_CASE_EXP_END){if(!et(n,M.EXPANSION_CASE_EXP_START))return this._errors.push(J.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;if(n.pop(),0===n.length)return e}if(this._peek.type===M.EXPANSION_FORM_END){if(!et(n,M.EXPANSION_FORM_START))return this._errors.push(J.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;n.pop()}if(this._peek.type===M.EOF)return this._errors.push(J.create(null,t.sourceSpan,"Invalid ICU message. Missing '}'.")),null;e.push(this._advance())}}_consumeText(t){let e=t.parts[0];if(e.length>0&&"\n"===e[0]){const t=this._getParentElement();null!==t&&0===t.children.length&&this.getTagDefinition(t.name).ignoreFirstLf&&(e=e.substring(1))}e.length>0&&this._addToParent(new i(e,t.sourceSpan))}_closeVoidElement(){const t=this._getParentElement();t&&this.getTagDefinition(t.name).isVoid&&this._elementStack.pop()}_consumeStartTag(t){const e=t.parts[0],n=t.parts[1],a=[];for(;this._peek.type===M.ATTR_NAME;)a.push(this._consumeAttr(this._advance()));const r=this._getElementFullName(e,n,this._getParentElement());let i=!1;if(this._peek.type===M.TAG_OPEN_END_VOID){this._advance(),i=!0;const e=this.getTagDefinition(r);e.canSelfClose||null!==L(r)||e.isVoid||this._errors.push(J.create(r,t.sourceSpan,`Only void and foreign elements can be self closed "${t.parts[1]}"`))}else this._peek.type===M.TAG_OPEN_END&&(this._advance(),i=!1);const s=new _(t.sourceSpan.start,this._peek.sourceSpan.start),o=new l(r,a,[],s,s,void 0);this._pushElement(o),i&&(this._popElement(r),o.endSourceSpan=s)}_pushElement(t){const e=this._getParentElement();e&&this.getTagDefinition(e.name).isClosedByChild(t.name)&&this._elementStack.pop();const n=this.getTagDefinition(t.name),{parent:a,container:r}=this._getParentElementSkippingContainers();if(a&&n.requireExtraParent(a.name)){const e=new l(n.parentToAdd,[],[],t.sourceSpan,t.startSourceSpan,t.endSourceSpan);this._insertBeforeContainer(a,r,e)}this._addToParent(t),this._elementStack.push(t)}_consumeEndTag(t){const e=this._getElementFullName(t.parts[0],t.parts[1],this._getParentElement());this._getParentElement()&&(this._getParentElement().endSourceSpan=t.sourceSpan),this.getTagDefinition(e).isVoid?this._errors.push(J.create(e,t.sourceSpan,`Void elements do not have end tags "${t.parts[1]}"`)):this._popElement(e)||this._errors.push(J.create(e,t.sourceSpan,`Unexpected closing tag "${e}". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags`))}_popElement(t){for(let e=this._elementStack.length-1;e>=0;e--){const n=this._elementStack[e];if(n.name===t)return this._elementStack.splice(e,this._elementStack.length-e),!0;if(!this.getTagDefinition(n.name).closedByParent)return!1}return!1}_consumeAttr(t){const e=D(t.parts[0],t.parts[1]);let n=t.sourceSpan.end,a="",r=void 0;if(this._peek.type===M.ATTR_VALUE){const t=this._advance();a=t.parts[0],n=t.sourceSpan.end,r=t.sourceSpan}return new u(e,a,new _(t.sourceSpan.start,n),r)}_getParentElement(){return this._elementStack.length>0?this._elementStack[this._elementStack.length-1]:null}_getParentElementSkippingContainers(){let t=null;for(let e=this._elementStack.length-1;e>=0;e--){if("ng-container"!==E(this._elementStack[e].name)[1])return{parent:this._elementStack[e],container:t};t=this._elementStack[e]}return{parent:null,container:t}}_addToParent(t){const e=this._getParentElement();null!==e?e.children.push(t):this._rootNodes.push(t)}_insertBeforeContainer(t,e,n){if(e){if(t){const a=t.children.indexOf(e);t.children[a]=n}else this._rootNodes.push(n);n.children.push(e),this._elementStack.splice(this._elementStack.indexOf(e),0,n)}else this._addToParent(n),this._elementStack.push(n)}_getElementFullName(t,e,n){return null===t&&null===(t=this.getTagDefinition(e).implicitNamespacePrefix)&&null!==n&&(t=L(n.name)),D(t,e)}}function et(t,e){return t.length>0&&t[t.length-1]===e}class nt{constructor(){this.closedByParent=!1,this.contentType=k.PARSABLE_DATA,this.isVoid=!1,this.ignoreFirstLf=!1,this.canSelfClose=!0}requireExtraParent(t){return!1}isClosedByChild(t){return!1}}const at=new nt;function rt(t){return at}class it{constructor({closedByChildren:t,requiredParents:e,implicitNamespacePrefix:n,contentType:a=k.PARSABLE_DATA,closedByParent:r=!1,isVoid:i=!1,ignoreFirstLf:s=!1}={}){this.closedByChildren={},this.closedByParent=!1,this.canSelfClose=!1,t&&t.length>0&&t.forEach(t=>this.closedByChildren[t]=!0),this.isVoid=i,this.closedByParent=r||i,e&&e.length>0&&(this.requiredParents={},this.parentToAdd=e[0],e.forEach(t=>this.requiredParents[t]=!0)),this.implicitNamespacePrefix=n||null,this.contentType=a,this.ignoreFirstLf=s}requireExtraParent(t){if(!this.requiredParents)return!1;if(!t)return!0;const e=t.toLowerCase();return!("template"===e||"ng-template"===t)&&!0!==this.requiredParents[e]}isClosedByChild(t){return this.isVoid||t.toLowerCase()in this.closedByChildren}}const st={base:new it({isVoid:!0}),meta:new it({isVoid:!0}),area:new it({isVoid:!0}),embed:new it({isVoid:!0}),link:new it({isVoid:!0}),img:new it({isVoid:!0}),input:new it({isVoid:!0}),param:new it({isVoid:!0}),hr:new it({isVoid:!0}),br:new it({isVoid:!0}),source:new it({isVoid:!0}),track:new it({isVoid:!0}),wbr:new it({isVoid:!0}),p:new it({closedByChildren:["address","article","aside","blockquote","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","nav","ol","p","pre","section","table","ul"],closedByParent:!0}),thead:new it({closedByChildren:["tbody","tfoot"]}),tbody:new it({closedByChildren:["tbody","tfoot"],closedByParent:!0}),tfoot:new it({closedByChildren:["tbody"],closedByParent:!0}),tr:new it({closedByChildren:["tr"],requiredParents:["tbody","tfoot","thead"],closedByParent:!0}),td:new it({closedByChildren:["td","th"],closedByParent:!0}),th:new it({closedByChildren:["td","th"],closedByParent:!0}),col:new it({requiredParents:["colgroup"],isVoid:!0}),svg:new it({implicitNamespacePrefix:"svg"}),math:new it({implicitNamespacePrefix:"math"}),li:new it({closedByChildren:["li"],closedByParent:!0}),dt:new it({closedByChildren:["dt","dd"]}),dd:new it({closedByChildren:["dt","dd"],closedByParent:!0}),rb:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rt:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),rtc:new it({closedByChildren:["rb","rtc","rp"],closedByParent:!0}),rp:new it({closedByChildren:["rb","rt","rtc","rp"],closedByParent:!0}),optgroup:new it({closedByChildren:["optgroup"],closedByParent:!0}),option:new it({closedByChildren:["option","optgroup"],closedByParent:!0}),pre:new it({ignoreFirstLf:!0}),listing:new it({ignoreFirstLf:!0}),style:new it({contentType:k.RAW_TEXT}),script:new it({contentType:k.RAW_TEXT}),title:new it({contentType:k.ESCAPABLE_RAW_TEXT}),textarea:new it({contentType:k.ESCAPABLE_RAW_TEXT,ignoreFirstLf:!0})},ot=new it;function ut(t){return st[t.toLowerCase()]||ot}class lt extends class{visitText(t,e){}visitContainer(t,e){t.children.forEach(t=>t.visit(this))}visitIcu(t,e){Object.keys(t.cases).forEach(e=>{t.cases[e].visit(this)})}visitTagPlaceholder(t,e){t.children.forEach(t=>t.visit(this))}visitPlaceholder(t,e){}visitIcuPlaceholder(t,e){}}{constructor(t,e){super(),this.mapName=e,this.internalToPublic={},this.publicToNextId={},this.publicToInternal={},t.nodes.forEach(t=>t.visit(this))}toPublicName(t){return this.internalToPublic.hasOwnProperty(t)?this.internalToPublic[t]:null}toInternalName(t){return this.publicToInternal.hasOwnProperty(t)?this.publicToInternal[t]:null}visitText(t,e){return null}visitTagPlaceholder(t,e){this.visitPlaceholderName(t.startName),super.visitTagPlaceholder(t,e),this.visitPlaceholderName(t.closeName)}visitPlaceholder(t,e){this.visitPlaceholderName(t.name)}visitIcuPlaceholder(t,e){this.visitPlaceholderName(t.name)}visitPlaceholderName(t){if(!t||this.internalToPublic.hasOwnProperty(t))return;let e=this.mapName(t);if(this.publicToInternal.hasOwnProperty(e)){const t=this.publicToNextId[e];this.publicToNextId[e]=t+1,e=`${e}_${t}`}else this.publicToNextId[e]=1;this.internalToPublic[t]=e,this.publicToInternal[e]=t}}const dt=new a.I18nSelectPipe;class ct{constructor(t,e){this.params=e,this.i18nPluralPipe=new a.I18nPluralPipe(new a.NgLocaleLocalization(t))}visitElement(t,e){return ut(t.name).isVoid?`<${t.name}${this.serializeNodes(t.attrs," ")}/>`:`<${t.name}${this.serializeNodes(t.attrs," ")}>${this.serializeNodes(t.children)}</${t.name}>`}visitAttribute(t,e){return`${t.name}="${t.value}"`}visitText(t,e){return t.value}visitComment(t,e){return`\x3c!--${t.value}--\x3e`}visitExpansion(t,e){const n={};switch(t.cases.forEach(t=>n[t.value]=this.serializeNodes(t.expression)),t.type){case"select":return dt.transform(this.params[t.switchValue]||"",n);case"plural":return this.i18nPluralPipe.transform(this.params[t.switchValue],n)}throw new Error(`Unknown expansion type "${t.type}"`)}visitExpansionCase(t,e){return` ${t.value} {${this.serializeNodes(t.expression)}}`}serializeNodes(t,e=""){return 0===t.length?"":e+t.map(t=>t.visit(this,null)).join(e)}}function ft(t){return t.id||function(t){const e=At(t),n=function(t,e){const n=Array(t.length+3>>>2);for(let a=0;a<n.length;a++)n[a]=It(t,4*a,e);return n}(e,xt.Big),a=8*e.length,r=new Array(80);let[i,s,o,u,l]=[1732584193,4023233417,2562383102,271733878,3285377520];n[a>>5]|=128<<24-a%32,n[15+(a+64>>9<<4)]=a;for(let d=0;d<n.length;d+=16){const[t,e,a,c,f]=[i,s,o,u,l];for(let h=0;h<80;h++){r[h]=h<16?n[d+h]:wt(r[h-3]^r[h-8]^r[h-14]^r[h-16],1);const[t,e]=bt(h,s,o,u),a=[wt(i,5),t,l,e,r[h]].reduce(_t);[l,u,o,s,i]=[u,o,wt(s,30),i,a]}[i,s,o,u,l]=[_t(i,t),_t(s,e),_t(o,a),_t(u,c),_t(l,f)]}return function(t){let e="";for(let n=0;n<t.length;n++){const a=St(t,n);e+=(a>>>4).toString(16)+(15&a).toString(16)}return e.toLowerCase()}(Nt([i,s,o,u,l]))}((e=t.nodes,e.map(t=>t.visit(gt,null))).join("")+`[${t.meaning}]`);var e}class ht{visitText(t,e){return t.value}visitContainer(t,e){return`[${t.children.map(t=>t.visit(this)).join(", ")}]`}visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${t.expression}, ${t.type}, ${n.join(", ")}}`}visitTagPlaceholder(t,e){return t.isVoid?`<ph tag name="${t.startName}"/>`:`<ph tag name="${t.startName}">${t.children.map(t=>t.visit(this)).join(", ")}</ph name="${t.closeName}">`}visitPlaceholder(t,e){return t.value?`<ph name="${t.name}">${t.value}</ph>`:`<ph name="${t.name}"/>`}visitIcuPlaceholder(t,e){return`<ph icu name="${t.name}">${t.value.visit(this)}</ph>`}}const gt=new ht;class pt extends ht{visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${t.type}, ${n.join(", ")}}`}}function bt(t,e,n,a){return t<20?[e&n|~e&a,1518500249]:t<40?[e^n^a,1859775393]:t<60?[e&n|e&a|n&a,2400959708]:[e^n^a,3395469782]}function mt(t){const e=At(t);let[n,a]=[yt(e,0),yt(e,102072)];return 0!==n||0!==a&&1!==a||(n^=319790063,a^=-1801410264),[n,a]}function yt(t,e){let n,[a,r]=[2654435769,2654435769];const i=t.length;for(n=0;n+12<=i;n+=12)a=_t(a,It(t,n,xt.Little)),r=_t(r,It(t,n+4,xt.Little)),e=_t(e,It(t,n+8,xt.Little)),[a,r,e]=vt([a,r,e]);return a=_t(a,It(t,n,xt.Little)),r=_t(r,It(t,n+4,xt.Little)),e=_t(e,i),vt([a,r,e=_t(e,It(t,n+8,xt.Little)<<8)])[2]}function vt([t,e,n]){return t=Ot(t,e),t=Ot(t,n),t^=n>>>13,e=Ot(e,n),e=Ot(e,t),e^=t<<8,n=Ot(n,t),n=Ot(n,e),n^=e>>>13,t=Ot(t,e),t=Ot(t,n),t^=n>>>12,e=Ot(e,n),e=Ot(e,t),e^=t<<16,n=Ot(n,t),n=Ot(n,e),n^=e>>>5,t=Ot(t,e),t=Ot(t,n),t^=n>>>3,e=Ot(e,n),e=Ot(e,t),e^=t<<10,n=Ot(n,t),n=Ot(n,e),[t,e,n^=e>>>15]}const xt=function(){var t={Little:0,Big:1};return t[t.Little]="Little",t[t.Big]="Big",t}();function _t(t,e){return Tt(t,e)[1]}function Tt(t,e){const n=(65535&t)+(65535&e),a=(t>>>16)+(e>>>16)+(n>>>16);return[a>>>16,a<<16|65535&n]}function Ot(t,e){const n=(65535&t)-(65535&e);return(t>>16)-(e>>16)+(n>>16)<<16|65535&n}function wt(t,e){return t<<e|t>>>32-e}function St(t,e){return e>=t.length?0:255&t.charCodeAt(e)}function It(t,e,n){let a=0;if(n===xt.Big)for(let r=0;r<4;r++)a+=St(t,e+r)<<24-8*r;else for(let r=0;r<4;r++)a+=St(t,e+r)<<8*r;return a}function Nt(t){return t.reduce((t,e)=>t+function(t){let e="";for(let n=0;n<4;n++)e+=String.fromCharCode(t>>>8*(3-n)&255);return e}(e),"")}function Ct(t,e){let n="";const a=Math.max(t.length,e.length);for(let r=0,i=0;r<a||i;r++){const a=i+ +(t[r]||0)+ +(e[r]||0);a>=10?(i=1,n+=a-10):(i=0,n+=a)}return n}function Rt(t,e){let n="",a=e;for(;0!==t;t>>>=1)1&t&&(n=Ct(n,a)),a=Ct(a,a);return n}function At(t){let e="";for(let n=0;n<t.length;n++){let a=t.charCodeAt(n);if(a>=55296&&a<=56319&&t.length>n+1){const e=t.charCodeAt(n+1);e>=56320&&e<=57343&&(n++,a=(a-55296<<10)+e-56320+65536)}a<=127?e+=String.fromCharCode(a):a<=2047?e+=String.fromCharCode(a>>6&31|192,63&a|128):a<=65535?e+=String.fromCharCode(a>>12|224,a>>6&63|128,63&a|128):a<=2097151&&(e+=String.fromCharCode(a>>18&7|240,a>>12&63|128,a>>6&63|128,63&a|128))}return e}function kt(t){const e=new Lt,{msgIdToHtml:n,errors:a}=e.parse(t),r={},i=new Dt;if(Object.keys(n).forEach(t=>{const{i18nNodes:e,errors:s}=i.convert(n[t]);a.push(...s),r[t]=e}),a.length)throw new Error(`xliff parse errors:\n${a.join("\n")}`);return r}const Et=ft;class Lt{parse(t){this._unitMlString=null,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"trans-unit":this._unitMlString=null;const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;this._msgIdToHtml.hasOwnProperty(n)?this._addError(t,`Duplicated translations for msg ${n}`):(c(this,t.children,null),"string"==typeof this._unitMlString?this._msgIdToHtml[n]=this._unitMlString:this._addError(t,`Message ${n} misses a translation`))}else this._addError(t,'<trans-unit> misses the "id" attribute');break;case"source":break;case"target":const n=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._unitMlString=n;break;case"file":c(this,t.children,null);break;default:c(this,t.children,null)}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Dt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:c(this,e.rootNodes),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitElement(t,e){if("x"===t.name){const e=t.attrs.find(t=>"id"===t.name);if(e)return new m("",e.value,t.sourceSpan);this._addError(t,'<x> misses the "id" attribute')}else this._addError(t,"Unexpected tag");return null}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:c(this,t.expression)}}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}function Pt(t){const e=new qt,{msgIdToHtml:n,errors:a}=e.parse(t),r={},i=new jt;if(Object.keys(n).forEach(t=>{const{i18nNodes:e,errors:s}=i.convert(n[t]);a.push(...s),r[t]=e}),a.length)throw new Error(`xliff2 parse errors:\n${a.join("\n")}`);return r}const Mt=function(t){if(t.id)return t.id;const e=new pt;return function(t,e){let[n,a]=mt(t);if(e){const[t,r]=mt(e);[n,a]=function([t,e],[n,a]){const[r,i]=Tt(e,a);return[_t(_t(t,n),r),i]}(function([t,e],n){return[t<<n|e>>>32-n,e<<n|t>>>32-n]}([n,a],1),[t,r])}return function(t){let e="",n="1";for(let a=t.length-1;a>=0;a--)e=Ct(e,Rt(St(t,a),n)),n=Rt(256,n);return e.split("").reverse().join("")}(Nt([2147483647&n,a]))}(t.nodes.map(t=>t.visit(e,null)).join(""),t.meaning)};class qt{parse(t){this._unitMlString=null,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes,null),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"unit":this._unitMlString=null;const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;this._msgIdToHtml.hasOwnProperty(n)?this._addError(t,`Duplicated translations for msg ${n}`):(c(this,t.children,null),"string"==typeof this._unitMlString?this._msgIdToHtml[n]=this._unitMlString:this._addError(t,`Message ${n} misses a translation`))}else this._addError(t,'<unit> misses the "id" attribute');break;case"source":break;case"target":const n=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._unitMlString=n;break;case"xliff":const a=t.attrs.find(t=>"version"===t.name);if(a){const e=a.value;"2.0"!==e?this._addError(t,`The XLIFF file version ${e} is not compatible with XLIFF 2.0 serializer`):c(this,t.children,null)}break;default:c(this,t.children,null)}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class jt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:[].concat(...c(this,e.rootNodes)),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitElement(t,e){switch(t.name){case"ph":const e=t.attrs.find(t=>"equiv"===t.name);if(e)return[new m("",e.value,t.sourceSpan)];this._addError(t,'<ph> misses the "equiv" attribute');break;case"pc":const n=t.attrs.find(t=>"equivStart"===t.name),a=t.attrs.find(t=>"equivEnd"===t.name);if(n){if(a){const e=a.value;return[].concat(new m("",n.value,t.sourceSpan),...t.children.map(t=>t.visit(this,null)),new m("",e,t.sourceSpan))}this._addError(t,'<ph> misses the "equivEnd" attribute')}else this._addError(t,'<ph> misses the "equivStart" attribute');break;default:this._addError(t,"Unexpected tag")}return null}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:[].concat(...c(this,t.expression))}}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}function Ft(t){return t.toUpperCase().replace(/[^A-Z0-9_]/g,"_")}function Gt(t){const e=new Bt,{msgIdToHtml:n,errors:a}=e.parse(t);if(a.length)throw new Error(`xtb parse errors:\n${a.join("\n")}`);const r={},i=new Yt;return Object.keys(n).forEach(t=>{var e,a;e=r,a=t,Object.defineProperty(e,a,{configurable:!0,enumerable:!0,get:()=>{const r=(()=>{const{i18nNodes:e,errors:a}=i.convert(n[t]);if(a.length)throw new Error(`xtb parse errors:\n${a.join("\n")}`);return e})();return Object.defineProperty(e,a,{enumerable:!0,value:r}),r},set:t=>{throw new Error("Could not overwrite an XTB translation")}})}),r}const Vt=ft,zt=function(t){return new lt(t,Ft)};class Bt{parse(t){this._bundleDepth=0,this._msgIdToHtml={};const e=new X(rt).parse(t,"",!1);return this._errors=e.errors,c(this,e.rootNodes),{msgIdToHtml:this._msgIdToHtml,errors:this._errors}}visitElement(t,e){switch(t.name){case"translationbundle":this._bundleDepth++,this._bundleDepth>1&&this._addError(t,"<translationbundle> elements can not be nested"),c(this,t.children,null),this._bundleDepth--;break;case"translation":const e=t.attrs.find(t=>"id"===t.name);if(e){const n=e.value;if(this._msgIdToHtml.hasOwnProperty(n))this._addError(t,`Duplicated translations for msg ${n}`);else{const e=t.startSourceSpan.start.file.content.slice(t.startSourceSpan.end.offset,t.endSourceSpan.start.offset);this._msgIdToHtml[n]=e}}else this._addError(t,'<translation> misses the "id" attribute');break;default:this._addError(t,"Unexpected tag")}}visitAttribute(t,e){}visitText(t,e){}visitComment(t,e){}visitExpansion(t,e){}visitExpansionCase(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Yt{convert(t){const e=new X(rt).parse(t,"",!0);return this._errors=e.errors,{i18nNodes:this._errors.length>0||0===e.rootNodes.length?[]:c(this,e.rootNodes),errors:this._errors}}visitText(t,e){return new h(t.value,t.sourceSpan)}visitExpansion(t,e){const n={};return c(this,t.cases).forEach(e=>{n[e.value]=new g(e.nodes,t.sourceSpan)}),new p(t.switchValue,t.type,n,t.sourceSpan)}visitExpansionCase(t,e){return{value:t.value,nodes:c(this,t.expression)}}visitElement(t,e){if("ph"===t.name){const e=t.attrs.find(t=>"name"===t.name);if(e)return new m("",e.value,t.sourceSpan);this._addError(t,'<ph> misses the "name" attribute')}else this._addError(t,"Unexpected tag");return null}visitComment(t,e){}visitAttribute(t,e){}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}class Ht{constructor(t,e,n,a){this.input=e,this.errLocation=n,this.ctxLocation=a,this.message=`Parser Error: ${t} ${n} [${e}] in ${a}`}}class Ut{constructor(t,e){this.start=t,this.end=e}}class Wt{constructor(t){this.span=t}visit(t,e=null){return null}toString(){return"AST"}}class Kt extends Wt{constructor(t,e,n,a){super(t),this.prefix=e,this.uninterpretedExpression=n,this.location=a}visit(t,e=null){return t.visitQuote(this,e)}toString(){return"Quote"}}class $t extends Wt{visit(t,e=null){}}class Zt extends Wt{visit(t,e=null){return t.visitImplicitReceiver(this,e)}}class Jt extends Wt{constructor(t,e){super(t),this.expressions=e}visit(t,e=null){return t.visitChain(this,e)}}class Qt extends Wt{constructor(t,e,n,a){super(t),this.condition=e,this.trueExp=n,this.falseExp=a}visit(t,e=null){return t.visitConditional(this,e)}}class Xt extends Wt{constructor(t,e,n){super(t),this.receiver=e,this.name=n}visit(t,e=null){return t.visitPropertyRead(this,e)}}class te extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.value=a}visit(t,e=null){return t.visitPropertyWrite(this,e)}}class ee extends Wt{constructor(t,e,n){super(t),this.receiver=e,this.name=n}visit(t,e=null){return t.visitSafePropertyRead(this,e)}}class ne extends Wt{constructor(t,e,n){super(t),this.obj=e,this.key=n}visit(t,e=null){return t.visitKeyedRead(this,e)}}class ae extends Wt{constructor(t,e,n,a){super(t),this.obj=e,this.key=n,this.value=a}visit(t,e=null){return t.visitKeyedWrite(this,e)}}class re extends Wt{constructor(t,e,n,a){super(t),this.exp=e,this.name=n,this.args=a}visit(t,e=null){return t.visitPipe(this,e)}}class ie extends Wt{constructor(t,e){super(t),this.value=e}visit(t,e=null){return t.visitLiteralPrimitive(this,e)}}class se extends Wt{constructor(t,e){super(t),this.expressions=e}visit(t,e=null){return t.visitLiteralArray(this,e)}}class oe extends Wt{constructor(t,e,n){super(t),this.keys=e,this.values=n}visit(t,e=null){return t.visitLiteralMap(this,e)}}class ue extends Wt{constructor(t,e,n){super(t),this.strings=e,this.expressions=n}visit(t,e=null){return t.visitInterpolation(this,e)}}class le extends Wt{constructor(t,e,n,a){super(t),this.operation=e,this.left=n,this.right=a}visit(t,e=null){return t.visitBinary(this,e)}}class de extends Wt{constructor(t,e){super(t),this.expression=e}visit(t,e=null){return t.visitPrefixNot(this,e)}}class ce extends Wt{constructor(t,e){super(t),this.expression=e}visit(t,e=null){return t.visitNonNullAssert(this,e)}}class fe extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.args=a}visit(t,e=null){return t.visitMethodCall(this,e)}}class he extends Wt{constructor(t,e,n,a){super(t),this.receiver=e,this.name=n,this.args=a}visit(t,e=null){return t.visitSafeMethodCall(this,e)}}class ge extends Wt{constructor(t,e,n){super(t),this.target=e,this.args=n}visit(t,e=null){return t.visitFunctionCall(this,e)}}class pe extends Wt{constructor(t,e,n,a){super(new Ut(0,null==e?0:e.length)),this.ast=t,this.source=e,this.location=n,this.errors=a}visit(t,e=null){return this.ast.visit(t,e)}toString(){return`${this.source} in ${this.location}`}}class be{constructor(t,e,n,a,r){this.span=t,this.key=e,this.keyIsVar=n,this.name=a,this.expression=r}}const me=function(){var t={Character:0,Identifier:1,Keyword:2,String:3,Operator:4,Number:5,Error:6};return t[t.Character]="Character",t[t.Identifier]="Identifier",t[t.Keyword]="Keyword",t[t.String]="String",t[t.Operator]="Operator",t[t.Number]="Number",t[t.Error]="Error",t}(),ye=["var","let","as","null","undefined","true","false","if","else","this"];class ve{tokenize(t){const e=new we(t),n=[];let a=e.scanToken();for(;null!=a;)n.push(a),a=e.scanToken();return n}}class xe{constructor(t,e,n,a){this.index=t,this.type=e,this.numValue=n,this.strValue=a}isCharacter(t){return this.type===me.Character&&this.numValue===t}isNumber(){return this.type===me.Number}isString(){return this.type===me.String}isOperator(t){return this.type===me.Operator&&this.strValue===t}isIdentifier(){return this.type===me.Identifier}isKeyword(){return this.type===me.Keyword}isKeywordLet(){return this.type===me.Keyword&&"let"===this.strValue}isKeywordAs(){return this.type===me.Keyword&&"as"===this.strValue}isKeywordNull(){return this.type===me.Keyword&&"null"===this.strValue}isKeywordUndefined(){return this.type===me.Keyword&&"undefined"===this.strValue}isKeywordTrue(){return this.type===me.Keyword&&"true"===this.strValue}isKeywordFalse(){return this.type===me.Keyword&&"false"===this.strValue}isKeywordThis(){return this.type===me.Keyword&&"this"===this.strValue}isError(){return this.type===me.Error}toNumber(){return this.type===me.Number?this.numValue:-1}toString(){switch(this.type){case me.Character:case me.Identifier:case me.Keyword:case me.Operator:case me.String:case me.Error:return this.strValue;case me.Number:return this.numValue.toString();default:return null}}}function _e(t,e){return new xe(t,me.Character,e,String.fromCharCode(e))}function Te(t,e){return new xe(t,me.Operator,0,e)}const Oe=new xe(-1,me.Character,0,"");class we{constructor(t){this.input=t,this.peek=0,this.index=-1,this.length=t.length,this.advance()}advance(){this.peek=++this.index>=this.length?0:this.input.charCodeAt(this.index)}scanToken(){const t=this.input,e=this.length;let n=this.peek,a=this.index;for(;n<=32;){if(++a>=e){n=0;break}n=t.charCodeAt(a)}if(this.peek=n,this.index=a,a>=e)return null;if(Se(n))return this.scanIdentifier();if(R(n))return this.scanNumber(a);const r=a;switch(n){case 46:return this.advance(),R(this.peek)?this.scanNumber(r):_e(r,46);case 40:case 41:case 123:case 125:case 91:case 93:case 44:case 58:case 59:return this.scanCharacter(r,n);case 39:case 34:return this.scanString();case 35:case 43:case 45:case 42:case 47:case 37:case 94:return this.scanOperator(r,String.fromCharCode(n));case 63:return this.scanComplexOperator(r,"?",46,".");case 60:case 62:return this.scanComplexOperator(r,String.fromCharCode(n),61,"=");case 33:case 61:return this.scanComplexOperator(r,String.fromCharCode(n),61,"=",61,"=");case 38:return this.scanComplexOperator(r,"&",38,"&");case 124:return this.scanComplexOperator(r,"|",124,"|");case 160:for(;C(this.peek);)this.advance();return this.scanToken()}return this.advance(),this.error(`Unexpected character [${String.fromCharCode(n)}]`,0)}scanCharacter(t,e){return this.advance(),_e(t,e)}scanOperator(t,e){return this.advance(),Te(t,e)}scanComplexOperator(t,e,n,a,r,i){this.advance();let s=e;return this.peek===n&&(this.advance(),s+=a),null!=r&&this.peek===r&&(this.advance(),s+=i),Te(t,s)}scanIdentifier(){const t=this.index;for(this.advance();Ie(this.peek);)this.advance();const e=this.input.substring(t,this.index);return ye.indexOf(e)>-1?new xe(t,me.Keyword,0,e):function(t,e){return new xe(t,me.Identifier,0,e)}(t,e)}scanNumber(t){let e=this.index===t;for(this.advance();;){if(R(this.peek));else if(46===this.peek)e=!1;else{if(101!==(n=this.peek)&&69!==n)break;if(this.advance(),Ne(this.peek)&&this.advance(),!R(this.peek))return this.error("Invalid exponent",-1);e=!1}this.advance()}var n;const a=this.input.substring(t,this.index),r=e?function(t){const e=parseInt(t,10);if(isNaN(e))throw new Error("Invalid integer literal when parsing "+t);return e}(a):parseFloat(a);return new xe(t,me.Number,r,"")}scanString(){const t=this.index,e=this.peek;this.advance();let n="",a=this.index;const r=this.input;for(;this.peek!==e;)if(92===this.peek){let t;if(n+=r.substring(a,this.index),this.advance(),this.peek=this.peek,117===this.peek){const e=r.substring(this.index+1,this.index+5);if(!/^[0-9a-f]+$/i.test(e))return this.error(`Invalid unicode escape [\\u${e}]`,0);t=parseInt(e,16);for(let t=0;t<5;t++)this.advance()}else t=Ce(this.peek),this.advance();n+=String.fromCharCode(t),a=this.index}else{if(0===this.peek)return this.error("Unterminated quote",0);this.advance()}const i=r.substring(a,this.index);return this.advance(),new xe(t,me.String,0,n+i)}error(t,e){const n=this.index+e;return function(t,e){return new xe(t,me.Error,0,e)}(n,`Lexer Error: ${t} at column ${n} in expression [${this.input}]`)}}function Se(t){return 97<=t&&t<=122||65<=t&&t<=90||95===t||36===t}function Ie(t){return A(t)||R(t)||95===t||36===t}function Ne(t){return 45===t||43===t}function Ce(t){switch(t){case 110:return 10;case 102:return 12;case 114:return 13;case 116:return 9;case 118:return 11;default:return t}}class Re{constructor(t,e,n){this.strings=t,this.expressions=e,this.offsets=n}}class Ae{constructor(t,e,n){this.templateBindings=t,this.warnings=e,this.errors=n}}function ke(t){const e=S(t.start)+"([\\s\\S]*?)"+S(t.end);return new RegExp(e,"g")}class Ee{constructor(t){this._lexer=t,this.errors=[]}parseAction(t,e,n=N){this._checkNoInterpolation(t,e,n);const a=this._stripComments(t),r=this._lexer.tokenize(this._stripComments(t)),i=new Le(t,e,r,a.length,!0,this.errors,t.length-a.length).parseChain();return new pe(i,t,e,this.errors)}parseBinding(t,e,n=N){const a=this._parseBindingAst(t,e,n);return new pe(a,t,e,this.errors)}parseSimpleBinding(t,e,n=N){const a=this._parseBindingAst(t,e,n),r=De.check(a);return r.length>0&&this._reportError(`Host binding expression cannot contain ${r.join(" ")}`,t,e),new pe(a,t,e,this.errors)}_reportError(t,e,n,a){this.errors.push(new Ht(t,e,n,a))}_parseBindingAst(t,e,n){const a=this._parseQuote(t,e);if(null!=a)return a;this._checkNoInterpolation(t,e,n);const r=this._stripComments(t),i=this._lexer.tokenize(r);return new Le(t,e,i,r.length,!1,this.errors,t.length-r.length).parseChain()}_parseQuote(t,e){if(null===t)return null;const n=t.indexOf(":");if(-1===n)return null;const a=t.substring(0,n).trim();if(!function(t){if(0===t.length)return!1;const e=new we(t);if(!Se(e.peek))return!1;for(e.advance();0!==e.peek;){if(!Ie(e.peek))return!1;e.advance()}return!0}(a))return null;const r=t.substring(n+1);return new Kt(new Ut(0,t.length),a,r,e)}parseTemplateBindings(t,e,n){const a=this._lexer.tokenize(e);if(t){const e=this._lexer.tokenize(t).map(t=>(t.index=0,t));a.unshift(...e)}return new Le(e,n,a,e.length,!1,this.errors,0).parseTemplateBindings()}parseInterpolation(t,e,n=N){const a=this.splitInterpolation(t,e,n);if(null===a)return null;const r=[];for(let i=0;i<a.expressions.length;++i){const n=a.expressions[i],s=this._stripComments(n),o=this._lexer.tokenize(s),u=new Le(t,e,o,s.length,!1,this.errors,a.offsets[i]+(n.length-s.length)).parseChain();r.push(u)}return new pe(new ue(new Ut(0,null===t?0:t.length),a.strings,r),t,e,this.errors)}splitInterpolation(t,e,n=N){const a=ke(n),r=t.split(a);if(r.length<=1)return null;const i=[],s=[],o=[];let u=0;for(let l=0;l<r.length;l++){const a=r[l];l%2==0?(i.push(a),u+=a.length):a.trim().length>0?(u+=n.start.length,s.push(a),o.push(u),u+=a.length+n.end.length):(this._reportError("Blank expressions are not allowed in interpolated strings",t,`at column ${this._findInterpolationErrorColumn(r,l,n)} in`,e),s.push("$implict"),o.push(u))}return new Re(i,s,o)}wrapLiteralPrimitive(t,e){return new pe(new ie(new Ut(0,null===t?0:t.length),t),t,e,this.errors)}_stripComments(t){const e=this._commentStart(t);return null!=e?t.substring(0,e).trim():t}_commentStart(t){let e=null;for(let a=0;a<t.length-1;a++){const r=t.charCodeAt(a),i=t.charCodeAt(a+1);if(47===r&&47===i&&null===e)return a;e===r?e=null:null===e&&(39===(n=r)||34===n||96===n)&&(e=r)}var n;return null}_checkNoInterpolation(t,e,n){const a=ke(n),r=t.split(a);r.length>1&&this._reportError(`Got interpolation (${n.start}${n.end}) where expression was expected`,t,`at column ${this._findInterpolationErrorColumn(r,1,n)} in`,e)}_findInterpolationErrorColumn(t,e,n){let a="";for(let r=0;r<e;r++)a+=r%2==0?t[r]:`${n.start}${t[r]}${n.end}`;return a.length}}class Le{constructor(t,e,n,a,r,i,s){this.input=t,this.location=e,this.tokens=n,this.inputLength=a,this.parseAction=r,this.errors=i,this.offset=s,this.rparensExpected=0,this.rbracketsExpected=0,this.rbracesExpected=0,this.index=0}peek(t){const e=this.index+t;return e<this.tokens.length?this.tokens[e]:Oe}get next(){return this.peek(0)}get inputIndex(){return this.index<this.tokens.length?this.next.index+this.offset:this.inputLength+this.offset}span(t){return new Ut(t,this.inputIndex)}advance(){this.index++}optionalCharacter(t){return!!this.next.isCharacter(t)&&(this.advance(),!0)}peekKeywordLet(){return this.next.isKeywordLet()}peekKeywordAs(){return this.next.isKeywordAs()}expectCharacter(t){this.optionalCharacter(t)||this.error(`Missing expected ${String.fromCharCode(t)}`)}optionalOperator(t){return!!this.next.isOperator(t)&&(this.advance(),!0)}expectOperator(t){this.optionalOperator(t)||this.error(`Missing expected operator ${t}`)}expectIdentifierOrKeyword(){const t=this.next;return t.isIdentifier()||t.isKeyword()?(this.advance(),t.toString()):(this.error(`Unexpected token ${t}, expected identifier or keyword`),"")}expectIdentifierOrKeywordOrString(){const t=this.next;return t.isIdentifier()||t.isKeyword()||t.isString()?(this.advance(),t.toString()):(this.error(`Unexpected token ${t}, expected identifier, keyword, or string`),"")}parseChain(){const t=[],e=this.inputIndex;for(;this.index<this.tokens.length;){const e=this.parsePipe();if(t.push(e),this.optionalCharacter(59))for(this.parseAction||this.error("Binding expression cannot contain chained expression");this.optionalCharacter(59););else this.index<this.tokens.length&&this.error(`Unexpected token '${this.next}'`)}return 0===t.length?new $t(this.span(e)):1===t.length?t[0]:new Jt(this.span(e),t)}parsePipe(){let t=this.parseExpression();if(this.optionalOperator("|")){this.parseAction&&this.error("Cannot have a pipe in an action expression");do{const e=this.expectIdentifierOrKeyword(),n=[];for(;this.optionalCharacter(58);)n.push(this.parseExpression());t=new re(this.span(t.span.start),t,e,n)}while(this.optionalOperator("|"))}return t}parseExpression(){return this.parseConditional()}parseConditional(){const t=this.inputIndex,e=this.parseLogicalOr();if(this.optionalOperator("?")){const n=this.parsePipe();let a;if(this.optionalCharacter(58))a=this.parsePipe();else{const e=this.input.substring(t,this.inputIndex);this.error(`Conditional expression ${e} requires all 3 expressions`),a=new $t(this.span(t))}return new Qt(this.span(t),e,n,a)}return e}parseLogicalOr(){let t=this.parseLogicalAnd();for(;this.optionalOperator("||");){const e=this.parseLogicalAnd();t=new le(this.span(t.span.start),"||",t,e)}return t}parseLogicalAnd(){let t=this.parseEquality();for(;this.optionalOperator("&&");){const e=this.parseEquality();t=new le(this.span(t.span.start),"&&",t,e)}return t}parseEquality(){let t=this.parseRelational();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"==":case"===":case"!=":case"!==":this.advance();const n=this.parseRelational();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseRelational(){let t=this.parseAdditive();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"<":case">":case"<=":case">=":this.advance();const n=this.parseAdditive();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseAdditive(){let t=this.parseMultiplicative();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"+":case"-":this.advance();const n=this.parseMultiplicative();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parseMultiplicative(){let t=this.parsePrefix();for(;this.next.type===me.Operator;){const e=this.next.strValue;switch(e){case"*":case"%":case"/":this.advance();const n=this.parsePrefix();t=new le(this.span(t.span.start),e,t,n);continue}break}return t}parsePrefix(){if(this.next.type===me.Operator){const t=this.inputIndex,e=this.next.strValue;let n;switch(e){case"+":return this.advance(),this.parsePrefix();case"-":return this.advance(),n=this.parsePrefix(),new le(this.span(t),e,new ie(new Ut(t,t),0),n);case"!":return this.advance(),n=this.parsePrefix(),new de(this.span(t),n)}}return this.parseCallChain()}parseCallChain(){let t=this.parsePrimary();for(;;)if(this.optionalCharacter(46))t=this.parseAccessMemberOrMethodCall(t,!1);else if(this.optionalOperator("?."))t=this.parseAccessMemberOrMethodCall(t,!0);else if(this.optionalCharacter(91)){this.rbracketsExpected++;const e=this.parsePipe();if(this.rbracketsExpected--,this.expectCharacter(93),this.optionalOperator("=")){const n=this.parseConditional();t=new ae(this.span(t.span.start),t,e,n)}else t=new ne(this.span(t.span.start),t,e)}else if(this.optionalCharacter(40)){this.rparensExpected++;const e=this.parseCallArguments();this.rparensExpected--,this.expectCharacter(41),t=new ge(this.span(t.span.start),t,e)}else{if(!this.optionalOperator("!"))return t;t=new ce(this.span(t.span.start),t)}}parsePrimary(){const t=this.inputIndex;if(this.optionalCharacter(40)){this.rparensExpected++;const t=this.parsePipe();return this.rparensExpected--,this.expectCharacter(41),t}if(this.next.isKeywordNull())return this.advance(),new ie(this.span(t),null);if(this.next.isKeywordUndefined())return this.advance(),new ie(this.span(t),void 0);if(this.next.isKeywordTrue())return this.advance(),new ie(this.span(t),!0);if(this.next.isKeywordFalse())return this.advance(),new ie(this.span(t),!1);if(this.next.isKeywordThis())return this.advance(),new Zt(this.span(t));if(this.optionalCharacter(91)){this.rbracketsExpected++;const e=this.parseExpressionList(93);return this.rbracketsExpected--,this.expectCharacter(93),new se(this.span(t),e)}if(this.next.isCharacter(123))return this.parseLiteralMap();if(this.next.isIdentifier())return this.parseAccessMemberOrMethodCall(new Zt(this.span(t)),!1);if(this.next.isNumber()){const e=this.next.toNumber();return this.advance(),new ie(this.span(t),e)}if(this.next.isString()){const e=this.next.toString();return this.advance(),new ie(this.span(t),e)}return this.index>=this.tokens.length?(this.error(`Unexpected end of expression: ${this.input}`),new $t(this.span(t))):(this.error(`Unexpected token ${this.next}`),new $t(this.span(t)))}parseExpressionList(t){const e=[];if(!this.next.isCharacter(t))do{e.push(this.parsePipe())}while(this.optionalCharacter(44));return e}parseLiteralMap(){const t=[],e=[],n=this.inputIndex;if(this.expectCharacter(123),!this.optionalCharacter(125)){this.rbracesExpected++;do{const n=this.next.isString(),a=this.expectIdentifierOrKeywordOrString();t.push({key:a,quoted:n}),this.expectCharacter(58),e.push(this.parsePipe())}while(this.optionalCharacter(44));this.rbracesExpected--,this.expectCharacter(125)}return new oe(this.span(n),t,e)}parseAccessMemberOrMethodCall(t,e=!1){const n=t.span.start,a=this.expectIdentifierOrKeyword();if(this.optionalCharacter(40)){this.rparensExpected++;const r=this.parseCallArguments();this.expectCharacter(41),this.rparensExpected--;const i=this.span(n);return e?new he(i,t,a,r):new fe(i,t,a,r)}if(e)return this.optionalOperator("=")?(this.error("The '?.' operator cannot be used in the assignment"),new $t(this.span(n))):new ee(this.span(n),t,a);if(this.optionalOperator("=")){if(!this.parseAction)return this.error("Bindings cannot contain assignments"),new $t(this.span(n));const e=this.parseConditional();return new te(this.span(n),t,a,e)}return new Xt(this.span(n),t,a)}parseCallArguments(){if(this.next.isCharacter(41))return[];const t=[];do{t.push(this.parsePipe())}while(this.optionalCharacter(44));return t}expectTemplateBindingKey(){let t="",e=!1;do{t+=this.expectIdentifierOrKeywordOrString(),e=this.optionalOperator("-"),e&&(t+="-")}while(e);return t.toString()}parseTemplateBindings(){const t=[];let e=null;for(;this.index<this.tokens.length;){const n=this.inputIndex;let a=this.peekKeywordLet();a&&this.advance();const r=this.expectTemplateBindingKey();let i=r;a||(null===e?e=i:i=e+i[0].toUpperCase()+i.substring(1)),this.optionalCharacter(58);let s=null,o=null;if(a)s=this.optionalOperator("=")?this.expectTemplateBindingKey():"$implicit";else if(this.peekKeywordAs())this.advance(),s=r,i=this.expectTemplateBindingKey(),a=!0;else if(this.next!==Oe&&!this.peekKeywordLet()){const t=this.inputIndex,e=this.parsePipe(),n=this.input.substring(t-this.offset,this.inputIndex-this.offset);o=new pe(e,n,this.location,this.errors)}if(t.push(new be(this.span(n),i,a,s,o)),this.peekKeywordAs()&&!a){const e=this.inputIndex;this.advance();const n=this.expectTemplateBindingKey();t.push(new be(this.span(e),n,!0,i,null))}this.optionalCharacter(59)||this.optionalCharacter(44)}return new Ae(t,[],this.errors)}error(t,e=null){this.errors.push(new Ht(t,this.input,this.locationText(e),this.location)),this.skip()}locationText(t=null){return null===t&&(t=this.index),t<this.tokens.length?`at column ${this.tokens[t].index+1} in`:"at the end of the expression"}skip(){let t=this.next;for(;this.index<this.tokens.length&&!t.isCharacter(59)&&(this.rparensExpected<=0||!t.isCharacter(41))&&(this.rbracesExpected<=0||!t.isCharacter(125))&&(this.rbracketsExpected<=0||!t.isCharacter(93));)this.next.isError()&&this.errors.push(new Ht(this.next.toString(),this.input,this.locationText(),this.location)),this.advance(),t=this.next}}class De{constructor(){this.errors=[]}static check(t){const e=new De;return t.visit(e),e.errors}visitImplicitReceiver(t,e){}visitInterpolation(t,e){}visitLiteralPrimitive(t,e){}visitPropertyRead(t,e){}visitPropertyWrite(t,e){}visitSafePropertyRead(t,e){}visitMethodCall(t,e){}visitSafeMethodCall(t,e){}visitFunctionCall(t,e){}visitLiteralArray(t,e){this.visitAll(t.expressions)}visitLiteralMap(t,e){this.visitAll(t.values)}visitBinary(t,e){}visitPrefixNot(t,e){}visitNonNullAssert(t,e){}visitConditional(t,e){}visitPipe(t,e){this.errors.push("pipes")}visitKeyedRead(t,e){}visitKeyedWrite(t,e){}visitAll(t){return t.map(t=>t.visit(this))}visitChain(t,e){}visitQuote(t,e){}}const Pe={A:"LINK",B:"BOLD_TEXT",BR:"LINE_BREAK",EM:"EMPHASISED_TEXT",H1:"HEADING_LEVEL1",H2:"HEADING_LEVEL2",H3:"HEADING_LEVEL3",H4:"HEADING_LEVEL4",H5:"HEADING_LEVEL5",H6:"HEADING_LEVEL6",HR:"HORIZONTAL_RULE",I:"ITALIC_TEXT",LI:"LIST_ITEM",LINK:"MEDIA_LINK",OL:"ORDERED_LIST",P:"PARAGRAPH",Q:"QUOTATION",S:"STRIKETHROUGH_TEXT",SMALL:"SMALL_TEXT",SUB:"SUBSTRIPT",SUP:"SUPERSCRIPT",TBODY:"TABLE_BODY",TD:"TABLE_CELL",TFOOT:"TABLE_FOOTER",TH:"TABLE_HEADER_CELL",THEAD:"TABLE_HEADER",TR:"TABLE_ROW",TT:"MONOSPACED_TEXT",U:"UNDERLINED_TEXT",UL:"UNORDERED_LIST"};class Me{constructor(){this._placeHolderNameCounts={},this._signatureToName={}}getStartTagPlaceholderName(t,e,n){const a=this._hashTag(t,e,n);if(this._signatureToName[a])return this._signatureToName[a];const r=t.toUpperCase(),i=Pe[r]||`TAG_${r}`,s=this._generateUniqueName(n?i:`START_${i}`);return this._signatureToName[a]=s,s}getCloseTagPlaceholderName(t){const e=this._hashClosingTag(t);if(this._signatureToName[e])return this._signatureToName[e];const n=t.toUpperCase(),a=this._generateUniqueName(`CLOSE_${Pe[n]||`TAG_${n}`}`);return this._signatureToName[e]=a,a}getPlaceholderName(t,e){const n=t.toUpperCase(),a=`PH: ${n}=${e}`;if(this._signatureToName[a])return this._signatureToName[a];const r=this._generateUniqueName(n);return this._signatureToName[a]=r,r}getUniquePlaceholder(t){return this._generateUniqueName(t.toUpperCase())}_hashTag(t,e,n){return`<${t}`+Object.keys(e).sort().map(t=>` ${t}=${e[t]}`).join("")+(n?"/>":`></${t}>`)}_hashClosingTag(t){return this._hashTag(`/${t}`,{},!1)}_generateUniqueName(t){if(!this._placeHolderNameCounts.hasOwnProperty(t))return this._placeHolderNameCounts[t]=1,t;const e=this._placeHolderNameCounts[t];return this._placeHolderNameCounts[t]=e+1,`${t}_${e}`}}const qe=new Ee(new ve);class je{constructor(t,e){this._expressionParser=t,this._interpolationConfig=e}toI18nMessage(t,e,n,a){this._isIcu=1===t.length&&t[0]instanceof s,this._icuDepth=0,this._placeholderRegistry=new Me,this._placeholderToContent={},this._placeholderToMessage={};const r=c(this,t,{});return new f(r,this._placeholderToContent,this._placeholderToMessage,e,n,a)}visitElement(t,e){const n=c(this,t.children),a={};t.attrs.forEach(t=>{a[t.name]=t.value});const r=ut(t.name).isVoid,i=this._placeholderRegistry.getStartTagPlaceholderName(t.name,a,r);this._placeholderToContent[i]=t.sourceSpan?t.sourceSpan.toString():"";let s="";return r||(s=this._placeholderRegistry.getCloseTagPlaceholderName(t.name),this._placeholderToContent[s]=`</${t.name}>`),new b(t.name,a,i,s,n,r,t.sourceSpan)}visitAttribute(t,e){return this._visitTextWithInterpolation(t.value,t.sourceSpan)}visitText(t,e){return this._visitTextWithInterpolation(t.value,t.sourceSpan)}visitComment(t,e){return null}visitExpansion(t,e){this._icuDepth++;const n={},a=new p(t.switchValue,t.type,n,t.sourceSpan);if(t.cases.forEach(t=>{n[t.value]=new g(t.expression.map(t=>t.visit(this,{})),t.expSourceSpan)}),this._icuDepth--,this._isIcu||this._icuDepth>0){const e=this._placeholderRegistry.getUniquePlaceholder(`VAR_${t.type}`);return a.expressionPlaceholder=e,this._placeholderToContent[e]=t.switchValue,a}const r=this._placeholderRegistry.getPlaceholderName("ICU",t.sourceSpan.toString()),i=new je(this._expressionParser,this._interpolationConfig);return this._placeholderToMessage[r]=i.toI18nMessage([t],"","",""),new y(a,r,t.sourceSpan)}visitExpansionCase(t,e){throw new Error("Unreachable code")}_visitTextWithInterpolation(t,e){const n=this._expressionParser.splitInterpolation(t,e.start.toString(),this._interpolationConfig);if(!n)return new h(t,e);const a=[],r=new g(a,e),{start:i,end:s}=this._interpolationConfig;for(let u=0;u<n.strings.length-1;u++){const t=n.expressions[u],r=t.split(Fe)[2]||"INTERPOLATION",o=this._placeholderRegistry.getPlaceholderName(r,t);n.strings[u].length&&a.push(new h(n.strings[u],e)),a.push(new m(t,o,e)),this._placeholderToContent[o]=i+t+s}const o=n.strings.length-1;return n.strings[o].length&&a.push(new h(n.strings[o],e)),r}}const Fe=/\/\/[\s\S]*i18n[\s\S]*\([\s\S]*ph[\s\S]*=[\s\S]*("|')([\s\S]*?)\1[\s\S]*\)/g;class Ge extends X{constructor(t=N){super(ut),this.interpolationConfig=t}parse(t,e,n=!1){return super.parse(t,e,n,this.interpolationConfig)}extractMessages(t){const e=new He(["wrapper"]),n=new l("wrapper",[],t,void 0,void 0,void 0);return e.extract(n,this.interpolationConfig)}mergeTranslations(t,e,n,a,r=[]){const i=new He(r),s=new l("wrapper",[],t,void 0,void 0,void 0);return i.merge(s,e,this.interpolationConfig,n,a)}}class Ve{constructor(t,e){this.messages=t,this.errors=e}}class ze{constructor(t={},e,n,a,r,i){this.i18nNodesByMsgId=t,this.digest=e,this.mapperFactory=r,this.i18nToHtml=new Be(t,e,r,a,n,i)}static load(t,e,n,a,r,i,s=N){const o=r(t,e);return new ze(o,t=>n(t),s,i,t=>a(t),console)}get(t,e){const n=this.i18nToHtml.convert(t,e);if(n.errors.length)throw new Error(n.errors.join("\n"));return n.nodes}has(t){return this.digest(t)in this.i18nNodesByMsgId}}class Be{constructor(t={},e,n,a,r,i){this._i18nNodesByMsgId=t,this._digest=e,this._mapperFactory=n,this._missingTranslationStrategy=a,this._interpolationConfig=r,this._console=i,this._contextStack=[],this._errors=[]}convert(t,e){this._contextStack.length=0,this._errors.length=0,this._params=e,this._paramKeys=Object.keys(e);const n=this.convertToText(t),a=t.nodes[0].sourceSpan.start.file.url,r=(new Ge).parse(n,a,!0);return{nodes:r.rootNodes,errors:[...this._errors,...r.errors]}}visitText(t,e){return t.value}visitContainer(t,e){return t.children.map(t=>t.visit(this)).join("")}visitIcu(t,e){const n=Object.keys(t.cases).map(e=>`${e} {${t.cases[e].visit(this)}}`);return`{${this._srcMsg.placeholders.hasOwnProperty(t.expression)?this._srcMsg.placeholders[t.expression]:t.expression}, ${t.type}, ${n.join(" ")}}`}visitPlaceholder(t,e){const n=this._mapper(t.name);return this._srcMsg.placeholders.hasOwnProperty(n)?this.convertToValue(this._srcMsg.placeholders[n]):this._srcMsg.placeholderToMessage.hasOwnProperty(n)?this.convertToText(this._srcMsg.placeholderToMessage[n]):(this._addError(t,`Unknown placeholder "${t.name}"`),"")}visitTagPlaceholder(t,e){const n=`${t.tag}`,a=Object.keys(t.attrs).map(e=>`${e}="${t.attrs[e]}"`).join(" ");return t.isVoid?`<${n} ${a}/>`:`<${n} ${a}>${t.children.map(t=>t.visit(this)).join("")}</${n}>`}visitIcuPlaceholder(t,e){return this.convertToText(this._srcMsg.placeholderToMessage[t.name])}convertToText(t){const e=this._digest(t),n=this._mapperFactory?this._mapperFactory(t):null;let a;this._contextStack.push({msg:this._srcMsg,mapper:this._mapper}),this._srcMsg=t,this._i18nNodesByMsgId.hasOwnProperty(e)?(a=this._i18nNodesByMsgId[e],this._mapper=t=>n?n.toInternalName(t):t):(this._missingTranslationStrategy===r.MissingTranslationStrategy.Error?this._addError(t.nodes[0],`Missing translation for message "${e}"`):this._console&&this._missingTranslationStrategy===r.MissingTranslationStrategy.Warning&&this._console.warn(`Missing translation for message "${e}"`),a=t.nodes,this._mapper=t=>t);const i=a.map(t=>t.visit(this)).join(""),s=this._contextStack.pop();return this._srcMsg=s.msg,this._mapper=s.mapper,i}convertToValue(t){const e=t.replace(this._interpolationConfig.start,"").replace(this._interpolationConfig.end,"");return-1!==this._paramKeys.indexOf(e)?this._params[e]:t}_addError(t,e){this._errors.push(new w(t.sourceSpan,e))}}const Ye=function(){var t={Extract:0,Merge:1};return t[t.Extract]="Extract",t[t.Merge]="Merge",t}();class He{constructor(t=[]){this._implicitTags=t,this.blockChildren=[]}extract(t,e){return this.init(Ye.Extract,e),t.visit(this,null),this.inI18nBlock&&this._reportError(t,"Unclosed block"),new Ve(this.messages,this.errors)}merge(t,e,n,a,r={}){this.init(Ye.Merge,n,a),this.translations=e,this.metadata=r;const i=t.visit(this,null);return this.inI18nBlock&&this._reportError(t,"Unclosed block"),new Q(i.children,this.errors)}visitExpansionCase(t,e){const n=c(this,t.expression,e);if(this.mode===Ye.Merge)return new o(t.value,n,t.sourceSpan,t.valueSourceSpan,t.expSourceSpan)}visitExpansion(t,e){this.mayBeAddBlockChildren(t);const n=this.inIcu;this.inIcu||(this.isInTranslatableSection&&this.addMessage([t]),this.inIcu=!0);const a=c(this,t.cases,e);return this.mode===Ye.Merge&&(t=new s(t.switchValue,t.type,a,t.sourceSpan,t.switchValueSourceSpan)),this.inIcu=n,t}visitComment(t,e){}visitText(t,e){return this.isInTranslatableSection&&this.mayBeAddBlockChildren(t),t}visitElement(t,e){this.mayBeAddBlockChildren(t),this.depth++;const n=this.inI18nNode,a=this.inImplicitNode;let r=[],i=void 0;const s=t.attrs.find(t=>"i18n"===t.name)||null,o=this._implicitTags.some(e=>t.name===e)&&!this.inIcu&&!this.isInTranslatableSection,u=!a&&o;if(this.inImplicitNode=a||o,this.isInTranslatableSection||this.inIcu)(s||u)&&this._reportError(t,"Could not mark an element as translatable inside a translatable section"),this.mode===Ye.Extract&&c(this,t.children);else{if(s||u){this.inI18nNode=!0;const e=this.addMessage(t.children,this.metadata);i=this.translateMessage(t,e)}if(this.mode===Ye.Extract){const e=s||u;e&&this.openTranslatableSection(t),c(this,t.children),e&&this._closeTranslatableSection(t,t.children)}}return this.mode===Ye.Merge&&(i||t.children).forEach(t=>{const n=t.visit(this,e);n&&!this.isInTranslatableSection&&(r=r.concat(n))}),this.depth--,this.inI18nNode=n,this.inImplicitNode=a,this.mode===Ye.Merge?new l(t.name,[],r,t.sourceSpan,t.startSourceSpan,t.endSourceSpan):null}visitAttribute(t,e){throw new Error("unreachable code")}init(t,e,n={}){this.mode=t,this.inI18nBlock=!1,this.inI18nNode=!1,this.depth=0,this.inIcu=!1,this.msgCountAtSectionStart=void 0,this.errors=[],this.messages=[],this.inImplicitNode=!1,this.createI18nMessage=function(t){const e=new je(qe,t);return(t,n,a,r)=>e.toI18nMessage(t,n,a,r)}(e),this.params=n}addMessage(t,{meaning:e="",description:n="",id:a=""}={}){if(0===t.length||1===t.length&&t[0]instanceof u&&!t[0].value)return null;const r=this.createI18nMessage(t,e,n,a);return this.messages.push(r),r}translateMessage(t,e){if(e&&this.mode===Ye.Merge){const n=this.translations.get(e,this.params);if(n)return n;this._reportError(t,`Translation unavailable for message id="${this.translations.digest(e)}"`)}return[]}mayBeAddBlockChildren(t){this.inI18nBlock&&!this.inIcu&&this.depth===this.blockStartDepth&&this.blockChildren.push(t)}openTranslatableSection(t){this.isInTranslatableSection?this._reportError(t,"Unexpected section start"):this.msgCountAtSectionStart=this.messages.length}get isInTranslatableSection(){return void 0!==this.msgCountAtSectionStart}_closeTranslatableSection(t,e){if(!this.isInTranslatableSection)return void this._reportError(t,"Unexpected section end");const n=this.msgCountAtSectionStart;if(1===e.reduce((t,e)=>t+(e instanceof d?0:1),0))for(let a=this.messages.length-1;a>=n;a--){const t=this.messages[a].nodes;if(!(1===t.length&&t[0]instanceof h)){this.messages.splice(a,1);break}}this.msgCountAtSectionStart=void 0}_reportError(t,e){this.errors.push(new w(t.sourceSpan,e))}}const Ue=new r.InjectionToken("MissingTranslationStrategy");class We{constructor(t,e,n,a=r.MissingTranslationStrategy.Warning){let i,s,o=t=>null;switch(t=(t||"xlf").toLowerCase()){case"xtb":i=Gt,s=Vt,o=zt;break;case"xliff2":case"xlf2":i=Pt,s=Mt;break;case"xliff":case"xlf":i=kt,s=Et;break;default:throw new Error(`Unknown translations format ${t}`)}const u=new Ge,l=ze.load(e,"i18n",s,o,i,a);return(t,e={})=>{const a="string"==typeof t?t:t.value,r={};"object"==typeof t&&(r.id=t.id,r.meaning=t.meaning,r.description=t.description);const i=u.parse(a,"",!0);if(i.errors.length)throw i.errors;return function(t,e,n){return t.map(t=>t.visit(new ct(e,n),null))}(u.mergeTranslations(i.rootNodes,l,e,r,["wrapper"]).rootNodes,n,e).join("")}}}},GoyQ:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},GyhO:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LRne"),r=n("0EUg");function i(...t){return Object(r.a)()(Object(a.a)(...t))}},H0h1:function(t,e,n){var a=n("SKAX");t.exports=function(t,e){var n=!0;return a(t,(function(t,a,r){return n=!!e(t,a,r)})),n}},H8ED:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"хвіліна":"хвіліну":"h"===n?e?"гадзіна":"гадзіну":t+" "+(a=+t,r={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:e?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:e,mm:e,h:e,hh:e,d:"дзень",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},H8j4:function(t,e,n){var a=n("QkVE");t.exports=function(t,e){var n=a(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}},HAuM:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},HDdC:function(t,e,n){"use strict";var a=n("7o/Q"),r=n("2QA8"),i=n("gRHU"),s=n("kJWO"),o=n("mCNh"),u=n("2fFW");n.d(e,"a",(function(){return l}));let l=(()=>{class t{constructor(t){this._isScalar=!1,t&&(this._subscribe=t)}lift(e){const n=new t;return n.source=this,n.operator=e,n}subscribe(t,e,n){const{operator:s}=this,o=function(t,e,n){if(t){if(t instanceof a.a)return t;if(t[r.a])return t[r.a]()}return t||e||n?new a.a(t,e,n):new a.a(i.a)}(t,e,n);if(o.add(s?s.call(o,this.source):this.source||u.a.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),u.a.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o}_trySubscribe(t){try{return this._subscribe(t)}catch(e){u.a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){const{closed:e,destination:n,isStopped:r}=t;if(e||r)return!1;t=n&&n instanceof a.a?n:null}return!0}(t)?t.error(e):console.warn(e)}}forEach(t,e){return new(e=d(e))((e,n)=>{let a;a=this.subscribe(e=>{try{t(e)}catch(r){n(r),a&&a.unsubscribe()}},n,e)})}_subscribe(t){const{source:e}=this;return e&&e.subscribe(t)}[s.a](){return this}pipe(...t){return 0===t.length?this:Object(o.b)(t)(this)}toPromise(t){return new(t=d(t))((t,e)=>{let n;this.subscribe(t=>n=t,t=>e(t),()=>t(n))})}}return t.create=e=>new t(e),t})();function d(t){if(t||(t=u.a.Promise||Promise),!t)throw new Error("no Promise impl found");return t}},HDyB:function(t,e,n){var a=n("nmnc"),r=n("JHRd"),i=n("ljhN"),s=n("or5M"),o=n("7fqy"),u=n("rEGp"),l=a?a.prototype:void 0,d=l?l.valueOf:void 0;t.exports=function(t,e,n,a,l,c,f){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!c(new r(t),new r(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=o;case"[object Set]":if(h||(h=u),t.size!=e.size&&!(1&a))return!1;var g=f.get(t);if(g)return g==e;a|=2,f.set(t,e);var p=s(h(t),h(e),a,l,c,f);return f.delete(t),p;case"[object Symbol]":if(d)return d.call(t)==d.call(e)}return!1}},HH4o:function(t,e,n){var a=n("tiKp")("iterator"),r=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){r=!0}};s[a]=function(){return this},Array.from(s,(function(){throw 2}))}catch(o){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i={};i[a]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(o){}return n}},HIU9:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("dApe"),i=n("X+05"),s=n("DzJC"),o=n.n(s),u=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},l=function(){function t(t,e,n){var a=this;this.elementRef=t,this.ngZone=e,this.virtualScroll=n,this.setViewport=o()((function(){a.virtualScroll.setViewport(a.elementRef.nativeElement)}),17),this.scrollEventHandler=this.setViewport.bind(this)}return t.prototype.ngOnInit=function(){this.virtualScroll.init()},t.prototype.ngAfterViewInit=function(){var t=this;setTimeout((function(){t.setViewport(),t.virtualScroll.fireEvent({eventName:i.a.initialized})}));var e=this.elementRef.nativeElement;this.ngZone.runOutsideAngular((function(){e.addEventListener("scroll",t.scrollEventHandler)}))},t.prototype.ngOnDestroy=function(){this.virtualScroll.clear(),this.elementRef.nativeElement.removeEventListener("scroll",this.scrollEventHandler)},t.prototype.getTotalHeight=function(){return this.virtualScroll.isEnabled()&&this.virtualScroll.totalHeight+"px"||"auto"},function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.Component)({selector:"tree-viewport",styles:[],providers:[r.a],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div [style.height]="getTotalHeight()">\n        <ng-content></ng-content>\n      </div>\n    </ng-container>\n  '}),u("design:paramtypes",[a.ElementRef,a.NgZone,r.a])],t)}()},HOxn:function(t,e,n){var a=n("Cwc5")(n("Kz5y"),"Promise");t.exports=a},HP3h:function(t,e,n){!function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},a={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(t){return function(e,r,i,s){var o=n(e),u=a[t][n(e)];return 2===o&&(u=u[r?0:1]),u.replace(/%d/i,e)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar-ly",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},HYAF:function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},Hd5f:function(t,e,n){var a=n("0Dky"),r=n("tiKp"),i=n("LQDL"),s=r("species");t.exports=function(t){return i>=51||!a((function(){var e=[];return(e.constructor={})[s]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},HjS5:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="zh-TW">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>切換導覽</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>儀表板</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>叢集</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>主機</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>監控程式</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>服務</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>組態</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH 地圖</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>管理員模組</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>記錄</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>池</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>區塊</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>影像</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>鏡像</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>檔案系統</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>物件閘道</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>精靈</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>刪除通知</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>沒有通知。</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>任務與通知</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>選取語言</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>正在載入面板資料...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana 時間選擇器</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>重設設定</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>刷新</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>返回</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>無法載入資料。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>選取的數目</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>找到的數目</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>總計</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名稱</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>描述</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>詳細描述</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>預設值</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>精靈預設值</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>儲存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSH 地圖檢視器</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>正在載入...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>主機名稱</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>此欄位為必填欄位。</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>是的,我確定。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>取消</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>關閉</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>主機清單</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>整體效能</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>找不到項目</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>叢集記錄</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>稽核記錄</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>正在載入組態...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>無法載入組態。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>編輯管理員模組</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>輸入的值不是有效的 UUID,例如 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>輸入的值必須是有效的  IP 位址。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>輸入的值必須為數字。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>輸入的值必須為數字或小數。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>叢集 ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap 修改時間</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap 版本編號</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>仲裁成員</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非仲裁成員</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>新增</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>功能</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>叢集範圍的 OSD 旗標</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>提交</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>進階...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD 復原優先程度</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>優先程度</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>自訂優先程度值</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>此欄位為必填欄位!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>該值必須介於 0 至 1 之間。</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>重新設定權數</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深層} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {深層} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSD 清單</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>值</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>編輯</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>刪除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>統計資料</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>用戶端</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任何用戶端均可存取</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>位址</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必填欄位</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>必須包含一或多個逗號分隔值</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例如︰</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>存取類型</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>新增用戶端</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 沒有可用的叢集 --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- 選取叢集 --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>新增精靈</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>儲存後端</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 沒有可用的資料池 --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- 選取儲存後端 --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>物件閘道使用者</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 沒有可用的使用者 --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- 選取物件閘道使用者 --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS 使用者 ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 沒有可用的用戶端 --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- 選取 cephx 用戶端 --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS 名稱</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>安全標籤</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>啟用安全標籤</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS 路徑</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>路徑必須以「/」開頭,後面可接單詞</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>將建立新目錄</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>路徑</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>路徑只能以單一「/」或單詞開頭</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>將建立新桶</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS 通訊協定</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS 標記</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>用戶端不能掛接子目錄 (即如果標記為 foo,則用戶端無法掛接 foo/baz)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>透過使用不同標記選項,可將同一路徑輸出多次。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>虛擬</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>透過使用不同虛擬選項,可將同一路徑輸出多次。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 沒有可用的存取類型 --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- 選取存取類型 --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 沒有可用的 squash --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 選取執行哪種類型的使用者 ID 匿名存取 --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>傳輸通訊協定</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>歡迎使用 Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>需要指定使用者名稱</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>需要指定密碼</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>登入</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>抱歉,該使用者不存在於 Ceph 中。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>已禁止</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>抱歉,您無權查看您要尋找的內容。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD 組態</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>移除本地組態值。將繼承並使用父組態值。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小值為 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>池清單</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名稱只能由英數字元、破折號和底線組成。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>所選的糾刪碼設定檔名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>外掛程式</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>資料區塊 (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>必須大於或等於 2。</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>編碼區塊 (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>必須大於或等於 1。</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>持久性估值 (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>本地性 (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>CRUSH 故障網域</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>CRUSH 本地性</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>技術</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>封包大小</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>CRUSH 根</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>CRUSH 裝置類別</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任何</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>目錄</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名稱...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>所選的 Ceph 池名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>池類型</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- 選取池類型 --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>放置群組</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>至少需要一個放置群組!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>您的叢集無法處理這麼多的 PG。請重新計算所需的 PG 數量。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>計算說明</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>複製大小</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>旗標</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC 覆寫</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>應用程式</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 沒有可用的糾刪碼設定檔 --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- 選取糾刪碼設定檔 --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>CRUSH 規則集</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- 選取 CRUSH 規則 --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>CRUSH 規則</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>CRUSH 步驟</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>壓縮</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>模式</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>演算法</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 沒有可用的糾刪壓縮演算法 --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Blob 最小大小</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>例如 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>值應大於 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Blob 最大大小</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>例如 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>值應大於 blob 最小大小</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>比率</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>壓縮率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>值應介於 0.0 至 1.0 之間</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>例如 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>詳細資料</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>效能詳細資料</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>快取層詳細資料</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>將影像移至垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保護的過期日為</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>無保護</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日期格式錯誤。請使用「YYYY-MM-DD HH:mm:ss」。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保護已過期。請選取一個未來的日期或保留空白。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>移動影像</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>綜覽</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>目標</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>探查驗證</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>使用者名稱的長度必須介於 8 至 64 個字元之間,並且只能包含以下\n                        字元︰字母、「.」、「@」、「-」、「_」或「:」。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>密碼</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>雙向驗證使用者</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>雙向驗證密碼</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>可用資訊︰</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>無法使用 iSCSI 目標</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>池</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>資料池</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>已建立</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>大小</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>物件</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>物件大小</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>已佈建</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>總佈建數</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>分割單位</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>分割計數</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>父</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>區塊名稱字首</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>順序</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>快照</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>影像</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>此設定會覆寫全域值</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>全域</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>此值為全域值。未為此影像設定此選項的值。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>不允許使用「/」和「@」。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 沒有可用的 RBD 池 --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- 選取池 --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>使用專屬的資料池</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>資料池</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>專用於儲存 RBD 的物件資料的池</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>您必須增加大小。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>進階</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>分割</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>分割單位</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- 選取分割單位 --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>由於已定義分割計數,因此必須填寫此欄位!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>分割單位大於物件大小。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>分割計數</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>由於已定義分割單位,因此必須填寫此欄位!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>分割計數必須大於 0。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>您正要復原</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>清除垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>全部</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>池︰</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>池名稱...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>回存影像</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>若要回存</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>鍵入影像的新名稱并按一下</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新名稱</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>過期日為</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保護過期日為</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSI 拓撲</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常不需要變更這些參數的預設值。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>支援儲存</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>確認</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>進階設定</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>目標 IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN 模式錯誤。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例如:iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>更多資訊</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>此目標的進階設定存在修改。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>入口網站</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>新增入口網站</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>此影像的設定存在修改。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>新增影像</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL 驗證</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>啟動器</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>啟動器</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>用戶端 IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>啟動器 IQN 必須唯一。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>使用者名稱的長度必須介於 8 至 64 個字元之間,並且只能包含以下\n                        字元︰字母、「.」、「@」、「-」、「_」或「:」。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>啟動器屬於群組。影像須在群組中進行設定。 </target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>未新增項目。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>新增啟動器</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>群組</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>群組</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>新增群組</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>正在同步</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>準備就緒</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>編輯池鏡像模式</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>在停用鏡像之前,必須先移除對等叢集。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {編輯} other {新增} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>叢集名稱</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>叢集名稱無效。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID 無效。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>監控程式位址</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>逗號分隔的位址...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>監控程式位址無效。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX 金鑰</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64 編碼的金鑰...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephX 金鑰必須為 Base64 編碼的金鑰。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>沒有可用的效能計數器</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>精靈清單</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>效能計數器</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>正在載入桶資料...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>該值無效。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>所選的名稱已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>擁有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- 選取使用者 --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>已啟用</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>索引類型</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>放置規則</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>標記</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>最大標記數</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>主版本</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>修改時間</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>區域群組</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>桶定額</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大大小</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>無限制</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大物件數</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>使用者名稱</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- 選取使用者名稱 --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>自動產生金鑰</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>存取金鑰</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>機密金鑰</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>全名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>電子郵件地址</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>已暫停</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>系統</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大桶數</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>子使用者</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>功能</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>使用者定額</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>顯示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>金鑰</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>類型</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- 選取類型 --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>許可權</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 選取許可權 --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>子使用者</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>所選的子使用者 ID 已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>讀取、寫入</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>完整</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift 金鑰</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>自動產生機密金鑰</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>正在載入使用者資料...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>無法載入使用者資料。</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>所選的使用者 ID 已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>電子郵件地址無效。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>所選的電子郵件地址已在使用中。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>最大桶數</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>已停用</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>自訂</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 金鑰</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>沒有子使用者。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>沒有金鑰。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>沒有功能。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>大小不限</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>最大大小</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>物件數不限</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>最大物件數</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>輸入的值必須大於或等於 0。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>描述...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>許可權</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>角色</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>確認密碼</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>確認的密碼與之前輸入的密碼不符。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>電子郵件</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>電子郵件無效。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>您正要為您自己的使用者移除「使用者讀取/寫入」許可權。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>若繼續,您將再也無法為任何使用者新增或移除角色。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>確定要繼續嗎?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>說明</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>文件</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>關於</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>儀表板設定</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>使用者管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>登入的使用者</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>登出</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>屬性 (OSD 地圖)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>無法使用中繼資料</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>中繼資料</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>效能計數器</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>寫入</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>讀取</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>長條圖</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>目前的值</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>最小值</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>最大值</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>來源</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>層級</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>可在執行時期更新 (可編輯)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>標記</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>列舉值</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>另請參閱</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>叢集狀態</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>管理員精靈</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>物件閘道</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>中繼資料伺服器</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI 閘道</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>用戶端 IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>用戶端輸送量</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>用戶端讀取/寫入</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>復原輸送量</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>整理</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>效能</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>原始容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>每個 OSD 的 PG 數</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>PG 狀態</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>階層</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>目前</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>已更新探查驗證</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>沒有可用的入口網站。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>沒有可用的影像。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>沒有可用的影像。請確定為目標新增一個影像。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>沒有可用的啟動器。請確定為目標新增一個啟動器。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>目標</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>讀取位元組數</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>寫入位元組數</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>讀取操作數</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>寫入操作數</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>使用中/最佳化開始時間</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>例項</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>進度</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>編輯模式</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>新增對等</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>編輯對等</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>刪除對等</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>本地數量</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>遠端數量</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>鏡像對等</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>金鑰</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>深層壓平</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>分層</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>獨佔鎖定</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>物件對應 (需要獨佔鎖定)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>記錄 (需要獨佔鎖定)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>未受保護</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBD 快照復原</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>復原</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBD 快照</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>刪除位置</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>類型</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>狀態</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>版本</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>主機</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>根</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>待命精靈</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>階層</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>精靈</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>活動</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentry</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用率</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>已更新</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>該值可在執行時期更新。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>精靈/用戶端不會從監控程式組態資料庫\n      提取此值。我們不允許透過「ceph config set ...」\n      設定此選項。應透過 ceph.conf 或使用指令行\n      進行設定。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>該選項僅在精靈啟動期間生效。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>該選項僅影響叢集建立。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>該選項僅影響精靈建立。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>服務</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>目前的值</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>可編輯</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>啟用</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>停用</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>正在重新連接,請稍候...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>公用位址</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>開啟的工作階段</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>禁止標示為 In</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>之前標示為 out 的 OSD 在啟動時將不會重新標示為 in</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>禁止標示為 Out</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD 在設定的間隔過後將不會自動標示為 out</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>禁止標示為 Up</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>不允許 OSD 啟動</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>禁止標示為 Down</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>將會忽略 OSD 故障報告,如此監控程式便不會將 OSD 標示為 down</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>暫停</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>暫停讀取和寫入</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>禁止整理</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>整理已停用</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>禁止深層整理</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>深層整理已停用</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>禁止回填</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>PG 回填已暫停</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>禁止復原</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>PG 復原已暫停</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>按位元排序</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>使用按位元排序</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>已清除 Snapdir</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD 已轉換 snapset</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>復原刪除</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>在復原期間,而非在建立互聯時執行刪除</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>PG 記錄硬限制</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>為 pg 記錄長度設定硬限制</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>已更新 OSD 旗標</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>out</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>in</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>down</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>標示</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD 遺失</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>已標示為遺失</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>損毀</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>已損毀</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>刪除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>讀取位元組數</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>寫入位元組數</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>讀取操作數</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>寫入操作數</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大回填數</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>處於使用中狀態的最大復原操作數</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>單次啟動的最大復原操作數</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>復原操作間隔睡眠時間</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>工作</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>嚴重性</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>已啟動</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>已使用</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>可用</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>乾淨</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>工作中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警告</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>未知</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>啟用中</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>無檔案系統</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>使用中</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>待命</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>無</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>使用中的精靈</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>未設定 NFS Ganesha 服務。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>傳輸</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS 使用者</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFS 檔案系統</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(繼承自全域組態)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>繼承自全域組態</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 選取執行哪種類型的使用者 ID 匿名存取 --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>沒有可用的精靈。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>快取模式</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>逐出前至少可留存的時間</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>衝洗前至少可留存的時間</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>目標最大位元組數</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>目標最大物件數</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>未新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>已達到應用程式上限</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>一個池最多只能四個應用程式定義。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>允許的字元為「_a-zA-Z0-9」</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>最大長度為 128 個字元</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>過濾或新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>新增應用程式</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>複本大小</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>上次變更時間</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>糾刪碼設定檔</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>CRUSH 規則集</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>桶</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>使用者</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>範圍</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>讀取</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>建立</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>系統角色</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>更新使用者</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>繼續</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>您已被自動登出,因為您的角色發生了變更。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>各物件都被分割成資料區塊部分,分別儲存於不同的 OSD。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>運算各物件的編碼區塊并將它們儲存到不同的 OSD。\n      編碼區塊的數量等同於在不遺失資料的前提下,可停機的 OSD 數量。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Jerasure 外掛程式是最一般、最靈活的外掛程式,\n          也是 Ceph 糾刪碼池的預設外掛程式。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Reed_sol_van 方法更靈活︰它足以設定 k\n          和 m。Cauchy_good 方法更快,但您需要小心選取封包大小。\n          所有 reed_sol_r6_op、liberation、blaum_roth、liber8tion 都\n          等同於 RAID6,它們只能設定為 m=2。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>將以位元組大小的封包為單位進行編碼。\n          選取合適的封包大小很難。\n          Jerasure 文件包含有關此主題的詳細資訊。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>使用 jerasure 外掛程式時,若糾刪碼物件儲存於\n          多個 OSD 上,則復原一個遺失的 OSD 時需要讀取所有其他 OSD。\n          例如,若 jerasure 設定為 k=8 且 m=4,則遺失一個 OSD 後需讀取\n          其他十一個 OSD 才能修復。\n\n          lrc 糾刪碼外掛程式會建立本地同位區塊,因此只需較少的 OSD 即\n          可復原。例如,若 lrc 設定為 k=8、m=4 且 l=4,它將為每四個 OSD\n          建立額外的同位區塊。這樣,當一個 OSD 遺失時,它只需四個 OSD\n          即可復原,而不需要十一個。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>將編碼區塊和資料區塊分組為大小為 locality 的集合。例如,\n          k=4 且 m=2 時,若 locality=3,則會建立 2 個大小為 3 的組。這樣,各組都能\n          自行復原,而無需從另一組讀取區塊。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>由 l 定義的區塊集將按哪種 CRUSH 桶類型儲存。\n          例如,若設定為機架,則各組 l 區塊將會被放置到不同的\n          機架中。該值用於建立類似 step choose rack 的 CRUSH\n          規則步驟。若未設定,則不會進行此類分組。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isa 外掛程式封包了 ISA 程式庫。它只能在 Intel 處理器上執行。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISA 外掛程式包含兩種 Reed Solomon 格式。\n          若設定為 reed_sol_van,則為 Vandermonde。若設定為 cauchy,則為 Cauchy。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shec 外掛程式封包了多個 SHEC 程式庫。\n          與 Reed Solomon 代碼相比,它能更有效地復原資料。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>同位區塊的數量,它們在各自的計算範圍內包含了\n          各資料區塊。該數值被用做持久性估值。例如,若 c=2,\n          則在不遺失資料的前提下,可有 2 個 OSD 停機。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSH 規則的第一步所指向的 CRUSH 桶名稱。\n      例如 step take default。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>確定兩個區塊不會存在於同一故障網域的桶中。\n      例如,若故障網域為主機,則不會有兩個區塊儲存於同一主機中。\n      該值用於建立類似 step chooseleaf host 的 CRUSH 規則步驟。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>使用 CRUSH 地圖中的 crush 裝置類別名稱,\n      將放置限制於特定類別的裝置 (例如 ssd 或 hdd)。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>設定糾刪碼外掛程式所在目錄。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>允許所有操作</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>僅允許不修改伺服器的操作</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>不允許讀取或寫入操作,但是允許任何其他操作</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>不允許讀取、寫入或任何可能修改檔案屬性或目錄內容的操作</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>完全禁止存取</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 選取優先程度 --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>資訊</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>過去 5 分鐘</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>過去 15 分鐘</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>過去 30 分鐘</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>過去 1 小時 (預設值)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>過去 3 小時</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>過去 6 小時</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>過去 12 小時</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>過去 24 小時</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨天</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>今天</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>今天到目前為止</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>前天</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>過去 2 天</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>上週的今天</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>上週</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>本週</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>本週目前為止</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>過去 7 天</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>上個月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>本月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>本月目前為止</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>過去 30 天</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>過去 90 天</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>過去 6 個月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>過去 1 年</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>去年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年目前為止</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>過去 2 年</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>過去 5 年</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>未選取項目。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>取消選取項目以再次選取</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>已達到選取上限</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>過濾標記</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>新增徽章</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>沒有可用的項目。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>深層整理</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>損毀</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>壓平</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>標示為 Down</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>標示為 In</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>標示為遺失</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>標示為 Out</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保護</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>重新命名</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>還原</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>移至垃圾桶</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>取消保護</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>已刪除</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>已克隆</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>已複製</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>已壓平</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>已清除</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>已還原</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>已復原</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>是</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>否</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>服務品質</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>指定的每秒 IO 位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>指定的每秒 IO 操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>讀取 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>指定的每秒內讀取的位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>讀取 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>指定的每秒讀取操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>寫入 BPS 上限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>指定的每秒內寫入的位元組數上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>寫入 IOPS 上限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>指定的每秒寫入操作次數上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>指定的 IO 位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>指定的 IO 操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>讀取 BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>指定的讀取的位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>讀取 IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>指定的讀取操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>寫入 BPS 高載</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>指定的寫入的位元組數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>寫入 IOPS 高載</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>指定的寫入操作次數高載上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>正在執行</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>執行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>已執行</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>未知任務</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>正在建立</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>建立</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>正在更新</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>正在刪除</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>正在克隆</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>克隆</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>正在複製</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>正在壓平</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>壓平</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>正在復原</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>復原</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>正在移動</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>移動</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>已移動</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>找不到影像。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>正在還原</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>還原</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>正在清除</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>清除</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>所有池</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>無法停用鏡像,因為其包含對等。</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},Hvzi:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},"I+eb":function(t,e,n){var a=n("2oRo"),r=n("Bs8V").f,i=n("kRJp"),s=n("busE"),o=n("zk60"),u=n("6JNq"),l=n("lMq5");t.exports=function(t,e){var n,d,c,f,h,g=t.target,p=t.global,b=t.stat;if(n=p?a:b?a[g]||o(g,{}):(a[g]||{}).prototype)for(d in e){if(f=e[d],c=t.noTargetGet?(h=r(n,d))&&h.value:n[d],!l(p?d:g+(b?".":"#")+d,t.forced)&&void 0!==c){if(typeof f==typeof c)continue;u(f,c)}(t.sham||c&&c.sham)&&i(f,"sham",!0),s(n,d,f,t)}}},I01J:function(t,e,n){var a=n("44Ds");t.exports=function(t){var e=a(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},I55L:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=t=>t&&"number"==typeof t.length&&"function"!=typeof t},I8vh:function(t,e,n){var a=n("ppGB"),r=Math.max,i=Math.min;t.exports=function(t,e){var n=a(t);return n<0?r(n+e,0):i(n,e)}},IBtZ:function(t,e,n){!function(t){"use strict";t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(t)?t.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20==0||t%100==0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}})}(n("wd/R"))},IOzZ:function(t,e){t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},IZUe:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{constructor(t){this.elementRef=t,this.focus=!0}ngAfterViewInit(){const t=this.elementRef.nativeElement;this.focus&&a.isFunction(t.focus)&&t.focus()}set autofocus(t){a.isBoolean(t)?this.focus=t:a.isFunction(t)&&(this.focus=t())}}},Iab2:function(t,e,n){var a,r;void 0===(r="function"==typeof(a=function(){"use strict";function e(t,e,n){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){i(a.response,e,n)},a.onerror=function(){console.error("could not download file")},a.send()}function n(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch(t){}return 200<=e.status&&299>=e.status}function a(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(e){var n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(n)}}var r="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,i=r.saveAs||("object"!=typeof window||window!==r?function(){}:"download"in HTMLAnchorElement.prototype?function(t,i,s){var o=r.URL||r.webkitURL,u=document.createElement("a");u.download=i=i||t.name||"download",u.rel="noopener","string"==typeof t?(u.href=t,u.origin===location.origin?a(u):n(u.href)?e(t,i,s):a(u,u.target="_blank")):(u.href=o.createObjectURL(t),setTimeout((function(){o.revokeObjectURL(u.href)}),4e4),setTimeout((function(){a(u)}),0))}:"msSaveOrOpenBlob"in navigator?function(t,r,i){if(r=r||t.name||"download","string"!=typeof t)navigator.msSaveOrOpenBlob(function(t,e){return void 0===e?e={autoBom:!1}:"object"!=typeof e&&(console.warn("Deprecated: Expected third argument to be a object"),e={autoBom:!e}),e.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\ufeff",t],{type:t.type}):t}(t,i),r);else if(n(t))e(t,r,i);else{var s=document.createElement("a");s.href=t,s.target="_blank",setTimeout((function(){a(s)}))}}:function(t,n,a,i){if((i=i||open("","_blank"))&&(i.document.title=i.document.body.innerText="downloading..."),"string"==typeof t)return e(t,n,a);var s="application/octet-stream"===t.type,o=/constructor/i.test(r.HTMLElement)||r.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&o)&&"object"==typeof FileReader){var l=new FileReader;l.onloadend=function(){var t=l.result;t=u?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"),i?i.location.href=t:location=t,i=null},l.readAsDataURL(t)}else{var d=r.URL||r.webkitURL,c=d.createObjectURL(t);i?i.location=c:location.href=c,i=null,setTimeout((function(){d.revokeObjectURL(c)}),4e4)}});r.saveAs=i.saveAs=i,t.exports=i})?a.apply(e,[]):a)||(t.exports=r)},IheW:function(t,e,n){"use strict";n.d(e,"m",(function(){return E})),n.d(e,"p",(function(){return q})),n.d(e,"q",(function(){return j})),n.d(e,"n",(function(){return D})),n.d(e,"o",(function(){return P})),n.d(e,"b",(function(){return c})),n.d(e,"g",(function(){return d})),n.d(e,"c",(function(){return I})),n.d(e,"a",(function(){return C})),n.d(e,"d",(function(){return V})),n.d(e,"e",(function(){return G})),n.d(e,"l",(function(){return F})),n.d(e,"h",(function(){return p})),n.d(e,"f",(function(){return w})),n.d(e,"i",(function(){return L})),n.d(e,"k",(function(){return k})),n.d(e,"j",(function(){return M}));var a=n("8Y7J"),r=n("LRne"),i=n("HDdC"),s=n("bOdf"),o=n("pLZG"),u=n("lJxs"),l=n("SVse");class d{}class c{}class f{constructor(t){this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?()=>{this.headers=new Map,t.split("\n").forEach(t=>{const e=t.indexOf(":");if(e>0){const n=t.slice(0,e),a=n.toLowerCase(),r=t.slice(e+1).trim();this.maybeSetNormalizedName(n,a),this.headers.has(a)?this.headers.get(a).push(r):this.headers.set(a,[r])}})}:()=>{this.headers=new Map,Object.keys(t).forEach(e=>{let n=t[e];const a=e.toLowerCase();"string"==typeof n&&(n=[n]),n.length>0&&(this.headers.set(a,n),this.maybeSetNormalizedName(e,a))})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();const e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,e){return this.clone({name:t,value:e,op:"a"})}set(t,e){return this.clone({name:t,value:e,op:"s"})}delete(t,e){return this.clone({name:t,value:e,op:"d"})}maybeSetNormalizedName(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)}init(){this.lazyInit&&(this.lazyInit instanceof f?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(e=>{this.headers.set(e,t.headers.get(e)),this.normalizedNames.set(e,t.normalizedNames.get(e))})}clone(t){const e=new f;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof f?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e}applyUpdate(t){const e=t.name.toLowerCase();switch(t.op){case"a":case"s":let n=t.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(t.name,e);const a=("a"===t.op?this.headers.get(e):void 0)||[];a.push(...n),this.headers.set(e,a);break;case"d":const r=t.value;if(r){let t=this.headers.get(e);if(!t)return;t=t.filter(t=>-1===r.indexOf(t)),0===t.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,t)}else this.headers.delete(e),this.normalizedNames.delete(e)}}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(e=>t(this.normalizedNames.get(e),this.headers.get(e)))}}class h{encodeKey(t){return g(t)}encodeValue(t){return g(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}}function g(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}class p{constructor(t={}){if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new h,t.fromString){if(t.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function(t,e){const n=new Map;return t.length>0&&t.split("&").forEach(t=>{const a=t.indexOf("="),[r,i]=-1==a?[e.decodeKey(t),""]:[e.decodeKey(t.slice(0,a)),e.decodeValue(t.slice(a+1))],s=n.get(r)||[];s.push(i),n.set(r,s)}),n}(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(e=>{const n=t.fromObject[e];this.map.set(e,Array.isArray(n)?n:[n])})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();const e=this.map.get(t);return e?e[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,e){return this.clone({param:t,value:e,op:"a"})}set(t,e){return this.clone({param:t,value:e,op:"s"})}delete(t,e){return this.clone({param:t,value:e,op:"d"})}toString(){return this.init(),this.keys().map(t=>{const e=this.encoder.encodeKey(t);return this.map.get(t).map(t=>e+"="+this.encoder.encodeValue(t)).join("&")}).join("&")}clone(t){const e=new p({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat([t]),e}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":const e=("a"===t.op?this.map.get(t.param):void 0)||[];e.push(t.value),this.map.set(t.param,e);break;case"d":if(void 0===t.value){this.map.delete(t.param);break}{let e=this.map.get(t.param)||[];const n=e.indexOf(t.value);-1!==n&&e.splice(n,1),e.length>0?this.map.set(t.param,e):this.map.delete(t.param)}}}),this.cloneFrom=this.updates=null)}}function b(t){return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer}function m(t){return"undefined"!=typeof Blob&&t instanceof Blob}function y(t){return"undefined"!=typeof FormData&&t instanceof FormData}class v{constructor(t,e,n,a){let r;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase(),function(t){switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||a?(this.body=void 0!==n?n:null,r=a):r=n,r&&(this.reportProgress=!!r.reportProgress,this.withCredentials=!!r.withCredentials,r.responseType&&(this.responseType=r.responseType),r.headers&&(this.headers=r.headers),r.params&&(this.params=r.params)),this.headers||(this.headers=new f),this.params){const t=this.params.toString();if(0===t.length)this.urlWithParams=e;else{const n=e.indexOf("?");this.urlWithParams=e+(-1===n?"?":n<e.length-1?"&":"")+t}}else this.params=new p,this.urlWithParams=e}serializeBody(){return null===this.body?null:b(this.body)||m(this.body)||y(this.body)||"string"==typeof this.body?this.body:this.body instanceof p?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()}detectContentTypeHeader(){return null===this.body?null:y(this.body)?null:m(this.body)?this.body.type||null:b(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof p?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null}clone(t={}){const e=t.method||this.method,n=t.url||this.url,a=t.responseType||this.responseType,r=void 0!==t.body?t.body:this.body,i=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,s=void 0!==t.reportProgress?t.reportProgress:this.reportProgress;let o=t.headers||this.headers,u=t.params||this.params;return void 0!==t.setHeaders&&(o=Object.keys(t.setHeaders).reduce((e,n)=>e.set(n,t.setHeaders[n]),o)),t.setParams&&(u=Object.keys(t.setParams).reduce((e,n)=>e.set(n,t.setParams[n]),u)),new v(e,n,r,{params:u,headers:o,reportProgress:s,responseType:a,withCredentials:i})}}const x=function(){var t={Sent:0,UploadProgress:1,ResponseHeader:2,DownloadProgress:3,Response:4,User:5};return t[t.Sent]="Sent",t[t.UploadProgress]="UploadProgress",t[t.ResponseHeader]="ResponseHeader",t[t.DownloadProgress]="DownloadProgress",t[t.Response]="Response",t[t.User]="User",t}();class _{constructor(t,e=200,n="OK"){this.headers=t.headers||new f,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||n,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}class T extends _{constructor(t={}){super(t),this.type=x.ResponseHeader}clone(t={}){return new T({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class O extends _{constructor(t={}){super(t),this.type=x.Response,this.body=void 0!==t.body?t.body:null}clone(t={}){return new O({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class w extends _{constructor(t){super(t,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${t.url||"(unknown url)"}`:`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}}function S(t,e){return{body:e,headers:t.headers,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials}}class I{constructor(t){this.handler=t}request(t,e,n={}){let a;if(t instanceof v)a=t;else{let r=void 0;r=n.headers instanceof f?n.headers:new f(n.headers);let i=void 0;n.params&&(i=n.params instanceof p?n.params:new p({fromObject:n.params})),a=new v(t,e,void 0!==n.body?n.body:null,{headers:r,params:i,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}const i=Object(r.a)(a).pipe(Object(s.a)(t=>this.handler.handle(t)));if(t instanceof v||"events"===n.observe)return i;const l=i.pipe(Object(o.a)(t=>t instanceof O));switch(n.observe||"body"){case"body":switch(a.responseType){case"arraybuffer":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&!(t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return t.body}));case"blob":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&!(t.body instanceof Blob))throw new Error("Response is not a Blob.");return t.body}));case"text":return l.pipe(Object(u.a)(t=>{if(null!==t.body&&"string"!=typeof t.body)throw new Error("Response is not a string.");return t.body}));case"json":default:return l.pipe(Object(u.a)(t=>t.body))}case"response":return l;default:throw new Error(`Unreachable: unhandled observe type ${n.observe}}`)}}delete(t,e={}){return this.request("DELETE",t,e)}get(t,e={}){return this.request("GET",t,e)}head(t,e={}){return this.request("HEAD",t,e)}jsonp(t,e){return this.request("JSONP",t,{params:(new p).append(e,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(t,e={}){return this.request("OPTIONS",t,e)}patch(t,e,n={}){return this.request("PATCH",t,S(n,e))}post(t,e,n={}){return this.request("POST",t,S(n,e))}put(t,e,n={}){return this.request("PUT",t,S(n,e))}}class N{constructor(t,e){this.next=t,this.interceptor=e}handle(t){return this.interceptor.intercept(t,this.next)}}const C=new a.InjectionToken("HTTP_INTERCEPTORS");class R{intercept(t,e){return e.handle(t)}}const A=/^\)\]\}',?\n/;class k{}class E{constructor(){}build(){return new XMLHttpRequest}}class L{constructor(t){this.xhrFactory=t}handle(t){if("JSONP"===t.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new i.a(e=>{const n=this.xhrFactory.build();if(n.open(t.method,t.urlWithParams),t.withCredentials&&(n.withCredentials=!0),t.headers.forEach((t,e)=>n.setRequestHeader(t,e.join(","))),t.headers.has("Accept")||n.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){const e=t.detectContentTypeHeader();null!==e&&n.setRequestHeader("Content-Type",e)}if(t.responseType){const e=t.responseType.toLowerCase();n.responseType="json"!==e?e:"text"}const a=t.serializeBody();let r=null;const i=()=>{if(null!==r)return r;const e=1223===n.status?204:n.status,a=n.statusText||"OK",i=new f(n.getAllResponseHeaders()),s=function(t){return"responseURL"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader("X-Request-URL"):null}(n)||t.url;return r=new T({headers:i,status:e,statusText:a,url:s}),r},s=()=>{let{headers:a,status:r,statusText:s,url:o}=i(),u=null;204!==r&&(u=void 0===n.response?n.responseText:n.response),0===r&&(r=u?200:0);let l=r>=200&&r<300;if("json"===t.responseType&&"string"==typeof u){const t=u;u=u.replace(A,"");try{u=""!==u?JSON.parse(u):null}catch(d){u=t,l&&(l=!1,u={error:d,text:u})}}l?(e.next(new O({body:u,headers:a,status:r,statusText:s,url:o||void 0})),e.complete()):e.error(new w({error:u,headers:a,status:r,statusText:s,url:o||void 0}))},o=t=>{const{url:a}=i(),r=new w({error:t,status:n.status||0,statusText:n.statusText||"Unknown Error",url:a||void 0});e.error(r)};let u=!1;const l=a=>{u||(e.next(i()),u=!0);let r={type:x.DownloadProgress,loaded:a.loaded};a.lengthComputable&&(r.total=a.total),"text"===t.responseType&&n.responseText&&(r.partialText=n.responseText),e.next(r)},d=t=>{let n={type:x.UploadProgress,loaded:t.loaded};t.lengthComputable&&(n.total=t.total),e.next(n)};return n.addEventListener("load",s),n.addEventListener("error",o),t.reportProgress&&(n.addEventListener("progress",l),null!==a&&n.upload&&n.upload.addEventListener("progress",d)),n.send(a),e.next({type:x.Sent}),()=>{n.removeEventListener("error",o),n.removeEventListener("load",s),t.reportProgress&&(n.removeEventListener("progress",l),null!==a&&n.upload&&n.upload.removeEventListener("progress",d)),n.abort()}})}}const D=new a.InjectionToken("XSRF_COOKIE_NAME"),P=new a.InjectionToken("XSRF_HEADER_NAME");class M{}class q{constructor(t,e,n){this.doc=t,this.platform=e,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(l["ɵparseCookieValue"])(t,this.cookieName),this.lastCookieString=t),this.lastToken}}class j{constructor(t,e){this.tokenService=t,this.headerName=e}intercept(t,e){const n=t.url.toLowerCase();if("GET"===t.method||"HEAD"===t.method||n.startsWith("http://")||n.startsWith("https://"))return e.handle(t);const a=this.tokenService.getToken();return null===a||t.headers.has(this.headerName)||(t=t.clone({headers:t.headers.set(this.headerName,a)})),e.handle(t)}}class F{constructor(t,e){this.backend=t,this.injector=e,this.chain=null}handle(t){if(null===this.chain){const t=this.injector.get(C,[]);this.chain=t.reduceRight((t,e)=>new N(t,e),this.backend)}return this.chain.handle(t)}}class G{static disable(){return{ngModule:G,providers:[{provide:j,useClass:R}]}}static withOptions(t={}){return{ngModule:G,providers:[t.cookieName?{provide:D,useValue:t.cookieName}:[],t.headerName?{provide:P,useValue:t.headerName}:[]]}}}class V{}},IjjT:function(t,e,n){"use strict";let a=(()=>{class t{constructor(e,n=t.now){this.SchedulerAction=e,this.now=n}schedule(t,e=0,n){return new this.SchedulerAction(this,t).schedule(n,e)}}return t.now=()=>Date.now(),t})();n.d(e,"a",(function(){return r}));class r extends a{constructor(t,e=a.now){super(t,()=>r.delegate&&r.delegate!==this?r.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(t,e=0,n){return r.delegate&&r.delegate!==this?r.delegate.schedule(t,e,n):super.schedule(t,e,n)}flush(t){const{actions:e}=this;if(this.active)return void e.push(t);let n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}}},ImZN:function(t,e,n){var a=n("glrk"),r=n("6VoE"),i=n("UMSQ"),s=n("A2ZE"),o=n("NaFW"),u=n("m92n"),l=function(t,e){this.stopped=t,this.result=e};(t.exports=function(t,e,n,d,c){var f,h,g,p,b,m,y,v=s(e,n,d?2:1);if(c)f=t;else{if("function"!=typeof(h=o(t)))throw TypeError("Target is not iterable");if(r(h)){for(g=0,p=i(t.length);p>g;g++)if((b=d?v(a(y=t[g])[0],y[1]):v(t[g]))&&b instanceof l)return b;return new l(!1)}f=h.call(t)}for(m=f.next;!(y=m.call(f)).done;)if("object"==typeof(b=u(f,v,y.value,d))&&b&&b instanceof l)return b;return new l(!1)}).stop=function(t){return new l(!0,t)}},Ioao:function(t,e,n){var a=n("heNW"),r=Math.max;t.exports=function(t,e,n){return e=r(void 0===e?t.length-1:e,0),function(){for(var i=arguments,s=-1,o=r(i.length-e,0),u=Array(o);++s<o;)u[s]=i[e+s];s=-1;for(var l=Array(e+1);++s<e;)l[s]=i[s];return l[e]=n(u),a(t,this,l)}}},"Ivi+":function(t,e,n){!function(t){"use strict";t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})}(n("wd/R"))},IzCI:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1024,["B/s","kB/s","MB/s","GB/s","TB/s","PB/s","EB/s","ZB/s","YB/s"])}}},IzEk:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("4I5i"),i=n("EY2u");function s(t){return e=>0===t?Object(i.b)():e.lift(new o(t))}class o{constructor(t){if(this.total=t,this.total<0)throw new r.a}call(t,e){return e.subscribe(new u(t,this.total))}}class u extends a.a{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){const e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))}}},J2m7:function(t,e,n){var a=n("XKAG")(n("UfWW"));t.exports=a},JBE3:function(t,e,n){var a=n("+Qka"),r=n("LsHQ")((function(t,e,n,r){a(t,e,n,r)}));t.exports=r},JBy8:function(t,e,n){var a=n("yoRg"),r=n("eDl+").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return a(t,r)}},JC6p:function(t,e,n){var a=n("cq/+"),r=n("7GkX");t.exports=function(t,e){return t&&a(t,e,r)}},"JCF/":function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];t.defineLocale("ku",{months:a,monthsShort:a,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(t){return/ئێواره‌/.test(t)},meridiem:function(t,e,n){return t<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},JHRd:function(t,e,n){var a=n("Kz5y");t.exports=a.Uint8Array},JHgL:function(t,e,n){var a=n("QkVE");t.exports=function(t){return a(this,t).get(t)}},JIr8:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("l7GE"),r=n("51Dv"),i=n("ZUHj");function s(t){return function(e){const n=new o(t),a=e.lift(n);return n.caught=a}}class o{constructor(t){this.selector=t}call(t,e){return e.subscribe(new u(t,this.selector,this.caught))}}class u extends a.a{constructor(t,e,n){super(t),this.selector=e,this.caught=n}error(t){if(!this.isStopped){let n;try{n=this.selector(t,this.caught)}catch(e){return void super.error(e)}this._unsubscribeAndRecycle();const a=new r.a(this,void 0,void 0);this.add(a);const s=Object(i.a)(this,n,void 0,void 0,a);s!==a&&this.add(s)}}}},JSQU:function(t,e,n){var a=n("YESw");t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=a&&void 0===e?"__lodash_hash_undefined__":e,this}},JTzB:function(t,e,n){var a=n("NykK"),r=n("ExA7");t.exports=function(t){return r(t)&&"[object Arguments]"==a(t)}},JVSJ:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=t+" ";switch(n){case"ss":return a+(1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return a+(1===t?"minuta":2===t||3===t||4===t?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return a+(1===t?"sat":2===t||3===t||4===t?"sata":"sati");case"dd":return a+(1===t?"dan":"dana");case"MM":return a+(1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci");case"yy":return a+(1===t?"godina":2===t||3===t||4===t?"godine":"godina")}}t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},JZM8:function(t,e,n){var a=n("FfPP"),r=n("xs/l")((function(t,e){return null==t?{}:a(t,e)}));t.exports=r},Jlc5:function(t,e,n){var a=n("ZirO"),r=n("H0h1"),i=n("ut/Y"),s=n("Z0cm"),o=n("mv/X");t.exports=function(t,e,n){var u=s(t)?a:r;return n&&o(t,e,n)&&(e=void 0),u(t,i(e,3))}},JmpY:function(t,e,n){var a=n("eUgh");t.exports=function(t,e){return a(e,(function(e){return t[e]}))}},Juji:function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},JvlW:function(t,e,n){!function(t){"use strict";var e={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(t,e,n,a){return e?r(n)[0]:a?r(n)[1]:r(n)[2]}function a(t){return t%10==0||t>10&&t<20}function r(t){return e[t].split("_")}function i(t,e,i,s){var o=t+" ";return 1===t?o+n(0,e,i[0],s):e?o+(a(t)?r(i)[1]:r(i)[0]):s?o+r(i)[1]:o+(a(t)?r(i)[1]:r(i)[2])}t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(t,e,n,a){return e?"kelios sekundės":a?"kelių sekundžių":"kelias sekundes"},ss:i,m:n,mm:i,h:n,hh:i,d:n,dd:i,M:n,MM:i,y:n,yy:i},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})}(n("wd/R"))},JxMD:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("hrfs");n("dgut"),n("Fgil"),n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return o}));var s=a["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto;cursor:pointer;overflow:visible;position:static!important}']],data:{}});function o(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{chartCanvasRef:0}),a["ɵqud"](402653184,2,{chartTooltipRef:0}),(t()(),a["ɵeld"](2,0,null,null,6,"div",[["class","chart-container"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgStyleImpl"],r["ɵNgStyleR2Impl"],[a.ElementRef,a.KeyValueDiffers,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgStyle,[r["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),a["ɵeld"](5,0,[[1,0],["sparkCanvas",1]],null,1,"canvas",[["baseChart",""]],null,null,null,null,null)),a["ɵdid"](6,999424,null,0,i.a,[a.ElementRef,i.c],{datasets:[0,"datasets"],labels:[1,"labels"],options:[2,"options"],chartType:[3,"chartType"],colors:[4,"colors"]},null),(t()(),a["ɵeld"](7,0,[[2,0],["sparkTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),a["ɵeld"](8,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.style),t(e,6,0,n.datasets,n.labels,n.options,"line",n.colors)}),null)}},"K/tc":function(t,e,n){!function(t){"use strict";t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},KMkd:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},KOzp:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return d}));var a=n("z/SZ"),r=n("hpHm"),i=n("2uy1"),s=n("PqYM");class o{constructor(){this.adaptivePosition=!0,this.placement="top",this.triggers="click",this.outsideClick=!1,this.delay=0}}class u{constructor(t){Object.assign(this,t)}get isBs3(){return Object(r.d)()}}class l{constructor(t,e,n,a,r,i){this._elementRef=e,this._renderer=n,this._positionService=i,this.outsideClick=!1,this.containerClass="",this._isInited=!1,this._popover=r.createLoader(e,a,n).provide({provide:o,useValue:t}),Object.assign(this,t),this.onShown=this._popover.onShown,this.onHidden=this._popover.onHidden,"undefined"!=typeof window&&e.nativeElement.addEventListener("click",(function(){try{e.nativeElement.focus()}catch(t){return}}))}get isOpen(){return this._popover.isShown}set isOpen(t){t?this.show():this.hide()}show(){if(this._popover.isShown||!this.popover||this._delayTimeoutId)return;this._positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition},preventOverflow:{enabled:this.adaptivePosition}}});const t=()=>{this._delayTimeoutId&&(this._delayTimeoutId=void 0),this._popover.attach(u).to(this.container).position({attachment:this.placement}).show({content:this.popover,context:this.popoverContext,placement:this.placement,title:this.popoverTitle,containerClass:this.containerClass}),this.adaptivePosition||(this._positionService.calcPosition(),this._positionService.deletePositionElement(this._popover._componentRef.location)),this.isOpen=!0},e=()=>{this._popoverCancelShowFn&&this._popoverCancelShowFn()};if(this.delay){const n=Object(s.a)(this.delay).subscribe(()=>{t(),e()});this.triggers&&Object(r.f)(this.triggers).forEach(t=>{this._popoverCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,t.close,()=>{n.unsubscribe(),e()})})}else t()}hide(){this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this.isOpen&&(this._popover.hide(),this.isOpen=!1)}toggle(){if(this.isOpen)return this.hide();this.show()}ngOnInit(){this._isInited||(this._isInited=!0,this._popover.listen({triggers:this.triggers,outsideClick:this.outsideClick,show:()=>this.show()}))}ngOnDestroy(){this._popover.dispose()}}class d{static forRoot(){return{ngModule:d,providers:[o,a.a,i.a]}}}},KSF8:function(t,e,n){!function(t){"use strict";t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n("wd/R"))},KTz0:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},KVJa:function(t,e,n){"use strict";var a=n("8Y7J");n("Z21x"),n("SVse"),n("sne2"),n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var r=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function i(t){return a["ɵvid"](0,[(t()(),a["ɵted"](-1,null,[" \n"])),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-light tc_backButton"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.back()&&a),a}),null,null)),(t()(),a["ɵted"](2,null,[" ","\n"]))],null,(function(t,e){t(e,2,0,e.component.name)}))}},KfNM:function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},Kqap:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){let n=!1;return arguments.length>=2&&(n=!0),function(a){return a.lift(new i(t,e,n))}}class i{constructor(t,e,n=!1){this.accumulator=t,this.seed=e,this.hasSeed=n}call(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))}}class s extends a.a{constructor(t,e,n,a){super(t),this.accumulator=e,this._seed=n,this.hasSeed=a,this.index=0}get seed(){return this._seed}set seed(t){this.hasSeed=!0,this._seed=t}_next(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)}_tryNext(t){const e=this.index++;let n;try{n=this.accumulator(this.seed,t,e)}catch(a){this.destination.error(a)}this.seed=n,this.destination.next(n)}}},KqfI:function(t,e,n){"use strict";function a(){}n.d(e,"a",(function(){return a}))},KwMD:function(t,e){t.exports=function(t,e,n,a){for(var r=t.length,i=n+(a?1:-1);a?i--:++i<r;)if(e(t[i],i,t))return i;return-1}},KxBF:function(t,e){t.exports=function(t,e,n){var a=-1,r=t.length;e<0&&(e=-e>r?0:r+e),(n=n>r?r:n)<0&&(n+=r),r=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(r);++a<r;)i[a]=t[a+e];return i}},Kz5y:function(t,e,n){var a=n("WFqU"),r="object"==typeof self&&self&&self.Object===Object&&self,i=a||r||Function("return this")();t.exports=i},L8xA:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},LOMR:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("Fwy9"),i=n("gk6K"),s=n("woSy"),o=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"div",[["class","node-drop-slot"]],null,[[null,"treeDrop"],[null,"drop"]],(function(t,e,n){var r=!0,i=t.component;return"drop"===e&&(r=!1!==a["ɵnov"](t,1).onDrop(n)&&r),"treeDrop"===e&&(r=!1!==i.onDrop(n)&&r),r}),null,null)),a["ɵdid"](1,4341760,null,0,r.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{allowDragoverStyling:[0,"allowDragoverStyling"],treeAllowDrop:[1,"treeAllowDrop"]},{onDropCallback:"treeDrop"})],(function(t,e){var n=e.component;t(e,1,0,!0,n.allowDrop.bind(n))}),null)}var l=n("SVse"),d=n("CoVI"),c=n("uNpg"),f=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"input",[["class","tree-node-checkbox"],["type","checkbox"]],[[8,"checked",0],[8,"indeterminate",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.node.mouseAction("checkboxClick",n)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,1,0,n.node.isSelected,n.node.isPartiallySelected)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,h)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var p=n("jV1L"),b=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","toggle-children-wrapper"]],[[2,"toggle-children-wrapper-expanded",null],[2,"toggle-children-wrapper-collapsed",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.node.mouseAction("expanderClick",n)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"span",[["class","toggle-children"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.node.isExpanded,n.node.isCollapsed)}))}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[["class","toggle-children-placeholder"]],null,null,null,null,null))],null,null)}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](4,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.node.hasChildren),t(e,4,0,!n.node.hasChildren)}),null)}function x(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,v)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var _=n("C523"),T=n("rZud"),O=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.node.displayField)}))}function S(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0,node:1,index:2})],(function(t,e){var n=e.component;t(e,1,0,!n.template);var a=t(e,4,0,n.node,n.node,n.index);t(e,3,0,a,n.template)}),null)}var I=n("OIDT"),N=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-checkbox",[],null,null,null,g,f)),a["ɵdid"](1,49152,null,0,c.a,[],{node:[0,"node"]},null)],(function(t,e){t(e,1,0,e.component.node)}),null)}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,"div",[["class","node-wrapper"]],[[4,"padding-left",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,C)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"tree-node-expander",[],null,null,null,x,b)),a["ɵdid"](4,49152,null,0,p.a,[],{node:[0,"node"]},null),(t()(),a["ɵeld"](5,0,null,null,4,"div",[["class","node-content-wrapper"]],[[2,"node-content-wrapper-active",null],[2,"node-content-wrapper-focused",null]],[[null,"click"],[null,"dblclick"],[null,"mouseover"],[null,"mouseout"],[null,"contextmenu"],[null,"treeDrop"],[null,"treeDropDragOver"],[null,"treeDropDragLeave"],[null,"treeDropDragEnter"],[null,"drop"],[null,"dragstart"],[null,"dragend"]],(function(t,e,n){var r=!0,i=t.component;return"drop"===e&&(r=!1!==a["ɵnov"](t,6).onDrop(n)&&r),"dragstart"===e&&(r=!1!==a["ɵnov"](t,7).onDragStart(n)&&r),"dragend"===e&&(r=!1!==a["ɵnov"](t,7).onDragEnd()&&r),"click"===e&&(r=!1!==i.node.mouseAction("click",n)&&r),"dblclick"===e&&(r=!1!==i.node.mouseAction("dblClick",n)&&r),"mouseover"===e&&(r=!1!==i.node.mouseAction("mouseOver",n)&&r),"mouseout"===e&&(r=!1!==i.node.mouseAction("mouseOut",n)&&r),"contextmenu"===e&&(r=!1!==i.node.mouseAction("contextMenu",n)&&r),"treeDrop"===e&&(r=!1!==i.node.onDrop(n)&&r),"treeDropDragOver"===e&&(r=!1!==i.node.mouseAction("dragOver",n)&&r),"treeDropDragLeave"===e&&(r=!1!==i.node.mouseAction("dragLeave",n)&&r),"treeDropDragEnter"===e&&(r=!1!==i.node.mouseAction("dragEnter",n)&&r),r}),null,null)),a["ɵdid"](6,4341760,null,0,r.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{allowDragoverStyling:[0,"allowDragoverStyling"],treeAllowDrop:[1,"treeAllowDrop"]},{onDropCallback:"treeDrop",onDragOverCallback:"treeDropDragOver",onDragLeaveCallback:"treeDropDragLeave",onDragEnterCallback:"treeDropDragEnter"}),a["ɵdid"](7,4603904,null,0,_.a,[a.ElementRef,a.Renderer2,i.a,a.NgZone],{draggedElement:[0,"draggedElement"],treeDragEnabled:[1,"treeDragEnabled"]},null),(t()(),a["ɵeld"](8,0,null,null,1,"tree-node-content",[],null,null,null,S,O)),a["ɵdid"](9,49152,null,0,T.a,[],{node:[0,"node"],index:[1,"index"],template:[2,"template"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.node.options.useCheckbox),t(e,4,0,n.node),t(e,6,0,n.node.allowDragoverStyling(),n.node.allowDrop),t(e,7,0,n.node,n.node.allowDrag()),t(e,9,0,n.node,n.index,n.templates.treeNodeTemplate)}),(function(t,e){var n=e.component;t(e,0,0,n.node.getNodePadding()),t(e,5,0,n.node.isActive,n.node.isFocused)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,R)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0,node:1,index:2,templates:3})],(function(t,e){var n=e.component;t(e,1,0,!n.templates.treeNodeWrapperTemplate);var a=t(e,4,0,n.node,n.node,n.index,n.templates);t(e,3,0,a,n.templates.treeNodeWrapperTemplate)}),null)}var k=n("WaXT"),E=n("ZhuC"),L=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["loading..."]))],null,null)}function P(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,D)),a["ɵdid"](1,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](3,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](4,{$implicit:0})],(function(t,e){var n=e.component;t(e,1,0,!n.template);var a=t(e,4,0,n.node);t(e,3,0,a,n.template)}),null)}var M=n("4Dmd"),q=n("pcHL"),j=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function F(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-collection",[],null,null,null,X,Z)),a["ɵdid"](1,245760,null,0,k.a,[],{nodes:[0,"nodes"],treeModel:[1,"treeModel"],templates:[2,"templates"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.node.children,n.node.treeModel,n.templates)}),null)}function G(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-loading-component",[["class","tree-node-loading"]],[[4,"padding-left",null]],null,null,P,L)),a["ɵdid"](1,49152,null,0,E.a,[],{template:[0,"template"],node:[1,"node"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.templates.loadingTemplate,n.node)}),(function(t,e){t(e,0,0,e.component.node.getNodePadding())}))}function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[],[[2,"tree-children",null],[2,"tree-children-no-padding",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,F)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,G)),a["ɵdid"](4,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.node.children),t(e,4,0,!n.node.children)}),(function(t,e){t(e,0,0,!0,e.component.node.options.levelPadding)}))}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](2,16384,null,0,M.a,[a.Renderer2,a.TemplateRef,a.ViewContainerRef],{animateSpeed:[0,"animateSpeed"],animateAcceleration:[1,"animateAcceleration"],isEnabled:[2,"isEnabled"],isOpen:[3,"isOpen"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.node.options.animateSpeed,n.node.options.animateAcceleration,n.node.options.animateExpand,n.node.isExpanded)}),null)}function B(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,z)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var Y=n("TNUL"),H=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function U(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-drop-slot",[],null,null,null,u,o)),a["ɵdid"](1,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.node.parent,n.node.index)}),null)}function W(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[],[[8,"className",0],[2,"tree-node",null],[2,"tree-node-expanded",null],[2,"tree-node-collapsed",null],[2,"tree-node-leaf",null],[2,"tree-node-active",null],[2,"tree-node-focused",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,U)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,0,null,null,1,"tree-node-wrapper",[],null,null,null,A,N)),a["ɵdid"](4,49152,null,0,I.a,[],{node:[0,"node"],index:[1,"index"],templates:[2,"templates"]},null),(t()(),a["ɵeld"](5,0,null,null,1,"tree-node-children",[],null,null,null,B,j)),a["ɵdid"](6,49152,null,0,q.a,[],{node:[0,"node"],templates:[1,"templates"]},null),(t()(),a["ɵeld"](7,0,null,null,1,"tree-node-drop-slot",[],null,null,null,u,o)),a["ɵdid"](8,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){var n=e.component;t(e,2,0,0===n.index),t(e,4,0,n.node,n.index,n.templates),t(e,6,0,n.node,n.templates),t(e,8,0,n.node.parent,n.node.index+1)}),(function(t,e){var n=e.component;t(e,0,0,n.node.getClass(),!0,n.node.isExpanded&&n.node.hasChildren,n.node.isCollapsed&&n.node.hasChildren,n.node.isLeaf,n.node.isActive,n.node.isFocused)}))}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,W)),a["ɵdid"](2,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](3,16777216,null,null,2,null,null,null,null,null,null,null)),a["ɵdid"](4,540672,null,0,l.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](5,{$implicit:0,node:1,index:2,templates:3}),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,!n.templates.treeNodeFullTemplate);var a=t(e,5,0,n.node,n.node,n.index,n.templates);t(e,4,0,a,n.templates.treeNodeFullTemplate)}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,K)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var Z=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function J(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node",[],null,null,null,$,H)),a["ɵdid"](1,49152,null,0,Y.a,[],{node:[0,"node"],index:[1,"index"],templates:[2,"templates"]},null)],(function(t,e){t(e,1,0,e.context.$implicit,e.context.index,e.component.templates)}),null)}function Q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"div",[],[[4,"margin-top",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,J)),a["ɵdid"](3,278528,null,0,l.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.viewportNodes,n.trackNode)}),(function(t,e){t(e,1,0,e.component.marginTop)}))}function X(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,Q)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}var tt=n("dApe"),et=n("MP8s"),nt=n("HIU9"),at=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[],[[4,"height",null]],null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){t(e,1,0,e.component.getTotalHeight())}))}function it(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,rt)),a["ɵdid"](1,212992,null,0,d.a,[a.TemplateRef,a.ViewContainerRef],{treeMobxAutorun:[0,"treeMobxAutorun"]},null),a["ɵpod"](2,{dontDetach:0})],(function(t,e){var n=t(e,2,0,!0);t(e,1,0,n)}),null)}n("fxL3"),n.d(e,"a",(function(){return st})),n.d(e,"b",(function(){return lt}));var st=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tree-node-collection",[],null,null,null,X,Z)),a["ɵdid"](1,245760,null,0,k.a,[],{nodes:[0,"nodes"],treeModel:[1,"treeModel"],templates:[2,"templates"]},null),a["ɵpod"](2,{loadingTemplate:0,treeNodeTemplate:1,treeNodeWrapperTemplate:2,treeNodeFullTemplate:3})],(function(t,e){var n=e.component,a=n.treeModel.roots,r=n.treeModel,i=t(e,2,0,n.loadingTemplate,n.treeNodeTemplate,n.treeNodeWrapperTemplate,n.treeNodeFullTemplate);t(e,1,0,a,r,i)}),null)}function ut(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"tree-node-drop-slot",[["class","empty-tree-drop-slot"]],null,null,null,u,o)),a["ɵdid"](1,49152,null,0,s.a,[],{node:[0,"node"],dropIndex:[1,"dropIndex"]},null)],(function(t,e){t(e,1,0,e.component.treeModel.virtualRoot,0)}),null)}function lt(t){return a["ɵvid"](0,[a["ɵqud"](671088640,1,{viewportComponent:0}),(t()(),a["ɵeld"](1,0,null,null,7,"tree-viewport",[],null,null,null,it,at)),a["ɵprd"](512,null,tt.a,tt.a,[et.a]),a["ɵdid"](3,4440064,[[1,4],["viewport",4]],0,nt.a,[a.ElementRef,a.NgZone,tt.a],null,null),(t()(),a["ɵeld"](4,0,null,0,4,"div",[["class","angular-tree-component"]],[[2,"node-dragging",null],[2,"angular-tree-component-rtl",null]],null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ot)),a["ɵdid"](6,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ut)),a["ɵdid"](8,16384,null,0,l.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0),t(e,6,0,n.treeModel.roots),t(e,8,0,n.treeModel.isEmptyTree())}),(function(t,e){var n=e.component;t(e,4,0,n.treeDraggedElement.isDragging(),n.treeModel.options.rtl)}))}},LQDL:function(t,e,n){var a,r,i=n("2oRo"),s=n("NC/Y"),o=i.process,u=o&&o.versions,l=u&&u.v8;l?r=(a=l.split("."))[0]+a[1]:s&&(!(a=s.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=s.match(/Chrome\/(\d+)/))&&(r=a[1]),t.exports=r&&+r},LRne:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("z+Ro"),r=n("yCtX"),i=n("jZKg");function s(...t){let e=t[t.length-1];return Object(a.a)(e)?(t.pop(),Object(i.a)(t,e)):Object(r.a)(t)}},LXxW:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length,r=0,i=[];++n<a;){var s=t[n];e(s,n,t)&&(i[r++]=s)}return i}},LceX:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return c})),n.d(e,"c",(function(){return i})),n.d(e,"d",(function(){return s})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return u})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return d}));var a=n("sne2");n("eTJe"),n("n/D3"),n("V3my"),n("ZEkX");class r{}const i={breadcrumbs:"Users"},s={breadcrumbs:a.a.CREATE},o={breadcrumbs:a.a.EDIT},u={breadcrumbs:"Roles"},l={breadcrumbs:a.a.CREATE},d={breadcrumbs:a.a.EDIT};class c{}},LcsW:function(t,e,n){var a=n("kekF")(Object.getPrototypeOf,Object);t.exports=a},Lhse:function(t,e,n){"use strict";function a(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}n.d(e,"a",(function(){return r}));const r=a()},Loxo:function(t,e,n){!function(t){"use strict";t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n("wd/R"))},LqlI:function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return f})),n.d(e,"c",(function(){return c})),n.d(e,"d",(function(){return d})),n.d(e,"e",(function(){return h})),n.d(e,"f",(function(){return u}));var a=n("8Y7J"),r=n("hpHm"),i=n("z/SZ"),s=n("2uy1");class o{constructor(){this.hide=Function,this.setClass=Function}}class u{}const l={backdrop:!0,keyboard:!0,focus:!0,show:!1,ignoreBackdropClick:!1,class:"",animated:!0,initialState:{}};class d{constructor(t,e,n){this._element=e,this._renderer=n,this.isShown=!1,this.isModalHiding=!1,this.clickStartedInContent=!1,this.config=Object.assign({},t)}ngOnInit(){this.isAnimated&&this._renderer.addClass(this._element.nativeElement,"fade"),this._renderer.setStyle(this._element.nativeElement,"display","block"),setTimeout(()=>{this.isShown=!0,this._renderer.addClass(this._element.nativeElement,Object(r.d)()?"in":"show")},this.isAnimated?150:0),document&&document.body&&(1===this.bsModalService.getModalsCount()&&(this.bsModalService.checkScrollbar(),this.bsModalService.setScrollbar()),this._renderer.addClass(document.body,"modal-open")),this._element.nativeElement&&this._element.nativeElement.focus()}onClickStarted(t){this.clickStartedInContent=t.target!==this._element.nativeElement}onClickStop(t){this.config.ignoreBackdropClick||"static"===this.config.backdrop||t.target!==this._element.nativeElement||this.clickStartedInContent?this.clickStartedInContent=!1:(this.bsModalService.setDismissReason("backdrop-click"),this.hide())}onEsc(t){this.isShown&&(27!==t.keyCode&&"Escape"!==t.key||t.preventDefault(),this.config.keyboard&&this.level===this.bsModalService.getModalsCount()&&(this.bsModalService.setDismissReason("esc"),this.hide()))}ngOnDestroy(){this.isShown&&this.hide()}hide(){!this.isModalHiding&&this.isShown&&(this.isModalHiding=!0,this._renderer.removeClass(this._element.nativeElement,Object(r.d)()?"in":"show"),setTimeout(()=>{this.isShown=!1,document&&document.body&&1===this.bsModalService.getModalsCount()&&this._renderer.removeClass(document.body,"modal-open"),this.bsModalService.hide(this.level),this.isModalHiding=!1},this.isAnimated?300:0))}}class c{constructor(t,e){this._isShown=!1,this.element=t,this.renderer=e}get isAnimated(){return this._isAnimated}set isAnimated(t){this._isAnimated=t}get isShown(){return this._isShown}set isShown(t){this._isShown=t,t?this.renderer.addClass(this.element.nativeElement,"in"):this.renderer.removeClass(this.element.nativeElement,"in"),Object(r.d)()||(t?this.renderer.addClass(this.element.nativeElement,"show"):this.renderer.removeClass(this.element.nativeElement,"show"))}ngOnInit(){this.isAnimated&&(this.renderer.addClass(this.element.nativeElement,"fade"),r.b.reflow(this.element.nativeElement)),this.isShown=!0}}class f{constructor(t,e){this.clf=e,this.config=l,this.onShow=new a.EventEmitter,this.onShown=new a.EventEmitter,this.onHide=new a.EventEmitter,this.onHidden=new a.EventEmitter,this.isBodyOverflowing=!1,this.originalBodyPadding=0,this.scrollbarWidth=0,this.modalsCount=0,this.lastDismissReason="",this.loaders=[],this._backdropLoader=this.clf.createLoader(null,null,null),this._renderer=t.createRenderer(null,null)}show(t,e){return this.modalsCount++,this._createLoaders(),this.config=Object.assign({},l,e),this._showBackdrop(),this.lastDismissReason=null,this._showModal(t)}hide(t){1===this.modalsCount&&(this._hideBackdrop(),this.resetScrollbar()),this.modalsCount=this.modalsCount>=1?this.modalsCount-1:0,setTimeout(()=>{this._hideModal(t),this.removeLoaders(t)},this.config.animated?150:0)}_showBackdrop(){const t=this.config.backdrop||"static"===this.config.backdrop,e=!this.backdropRef||!this.backdropRef.instance.isShown;1===this.modalsCount&&(this.removeBackdrop(),t&&e&&(this._backdropLoader.attach(c).to("body").show({isAnimated:this.config.animated}),this.backdropRef=this._backdropLoader._componentRef))}_hideBackdrop(){this.backdropRef&&(this.backdropRef.instance.isShown=!1,setTimeout(()=>this.removeBackdrop(),this.config.animated?150:0))}_showModal(t){const e=this.loaders[this.loaders.length-1],n=new o,a=e.provide({provide:u,useValue:this.config}).provide({provide:o,useValue:n}).attach(d).to("body").show({content:t,isAnimated:this.config.animated,initialState:this.config.initialState,bsModalService:this});return a.instance.level=this.getModalsCount(),n.hide=()=>{setTimeout(()=>a.instance.hide(),this.config.animated?300:0)},n.content=e.getInnerComponent()||null,n.setClass=t=>{a.instance.config.class=t},n}_hideModal(t){const e=this.loaders[t-1];e&&e.hide()}getModalsCount(){return this.modalsCount}setDismissReason(t){this.lastDismissReason=t}removeBackdrop(){this._backdropLoader.hide(),this.backdropRef=null}checkScrollbar(){this.isBodyOverflowing=document.body.clientWidth<window.innerWidth,this.scrollbarWidth=this.getScrollbarWidth()}setScrollbar(){document&&(this.originalBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")||"0",10),this.isBodyOverflowing&&(document.body.style.paddingRight=`${this.originalBodyPadding+this.scrollbarWidth}px`))}resetScrollbar(){document.body.style.paddingRight=`${this.originalBodyPadding}px`}getScrollbarWidth(){const t=this._renderer.createElement("div");this._renderer.addClass(t,"modal-scrollbar-measure"),this._renderer.appendChild(document.body,t);const e=t.offsetWidth-t.clientWidth;return this._renderer.removeChild(document.body,t),e}_createLoaders(){const t=this.clf.createLoader(null,null,null);this.copyEvent(t.onBeforeShow,this.onShow),this.copyEvent(t.onShown,this.onShown),this.copyEvent(t.onBeforeHide,this.onHide),this.copyEvent(t.onHidden,this.onHidden),this.loaders.push(t)}removeLoaders(t){this.loaders.splice(t-1,1),this.loaders.forEach((t,e)=>{t.instance.level=e+1})}copyEvent(t,e){t.subscribe(()=>{e.emit(this.lastDismissReason)})}}class h{static forRoot(){return{ngModule:h,providers:[f,i.a,s.a]}}static forChild(){return{ngModule:h,providers:[f,i.a,s.a]}}}},LsHQ:function(t,e,n){var a=n("EA7m"),r=n("mv/X");t.exports=function(t){return a((function(e,n){var a=-1,i=n.length,s=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(s=t.length>3&&"function"==typeof s?(i--,s):void 0,o&&r(n[0],n[1],o)&&(s=i<3?void 0:s,i=1),e=Object(e);++a<i;){var u=n[a];u&&t(e,u,a,s)}return e}))}},LvDl:function(t,e,n){(function(t){var a;(function(){var r="Expected a function",i="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],o="[object Arguments]",u="[object Array]",l="[object Boolean]",d="[object Date]",c="[object Error]",f="[object Function]",h="[object GeneratorFunction]",g="[object Map]",p="[object Number]",b="[object Object]",m="[object RegExp]",y="[object Set]",v="[object String]",x="[object Symbol]",_="[object WeakMap]",T="[object ArrayBuffer]",O="[object DataView]",w="[object Float32Array]",S="[object Float64Array]",I="[object Int8Array]",N="[object Int16Array]",C="[object Int32Array]",R="[object Uint8Array]",A="[object Uint16Array]",k="[object Uint32Array]",E=/\b__p \+= '';/g,L=/\b(__p \+=) '' \+/g,D=/(__e\(.*?\)|\b__t\)) \+\n'';/g,P=/&(?:amp|lt|gt|quot|#39);/g,M=/[&<>"']/g,q=RegExp(P.source),j=RegExp(M.source),F=/<%-([\s\S]+?)%>/g,G=/<%([\s\S]+?)%>/g,V=/<%=([\s\S]+?)%>/g,z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,B=/^\w*$/,Y=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,U=RegExp(H.source),W=/^\s+|\s+$/g,K=/^\s+/,$=/\s+$/,Z=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,J=/\{\n\/\* \[wrapped with (.+)\] \*/,Q=/,? & /,X=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tt=/\\(\\)?/g,et=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,at=/^[-+]0x[0-9a-f]+$/i,rt=/^0b[01]+$/i,it=/^\[object .+?Constructor\]$/,st=/^0o[0-7]+$/i,ot=/^(?:0|[1-9]\d*)$/,ut=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,lt=/($^)/,dt=/['\n\r\u2028\u2029\\]/g,ct="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ft="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ht="["+ft+"]",gt="["+ct+"]",pt="\\d+",bt="[a-z\\xdf-\\xf6\\xf8-\\xff]",mt="[^\\ud800-\\udfff"+ft+pt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",yt="\\ud83c[\\udffb-\\udfff]",vt="[^\\ud800-\\udfff]",xt="(?:\\ud83c[\\udde6-\\uddff]){2}",_t="[\\ud800-\\udbff][\\udc00-\\udfff]",Tt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ot="(?:"+bt+"|"+mt+")",wt="(?:"+Tt+"|"+mt+")",St="(?:"+gt+"|"+yt+")?",It="[\\ufe0e\\ufe0f]?"+St+"(?:\\u200d(?:"+[vt,xt,_t].join("|")+")[\\ufe0e\\ufe0f]?"+St+")*",Nt="(?:"+["[\\u2700-\\u27bf]",xt,_t].join("|")+")"+It,Ct="(?:"+[vt+gt+"?",gt,xt,_t,"[\\ud800-\\udfff]"].join("|")+")",Rt=RegExp("['’]","g"),At=RegExp(gt,"g"),kt=RegExp(yt+"(?="+yt+")|"+Ct+It,"g"),Et=RegExp([Tt+"?"+bt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ht,Tt,"$"].join("|")+")",wt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ht,Tt+Ot,"$"].join("|")+")",Tt+"?"+Ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Tt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",pt,Nt].join("|"),"g"),Lt=RegExp("[\\u200d\\ud800-\\udfff"+ct+"\\ufe0e\\ufe0f]"),Dt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Pt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mt=-1,qt={};qt[w]=qt[S]=qt[I]=qt[N]=qt[C]=qt[R]=qt["[object Uint8ClampedArray]"]=qt[A]=qt[k]=!0,qt[o]=qt[u]=qt[T]=qt[l]=qt[O]=qt[d]=qt[c]=qt[f]=qt[g]=qt[p]=qt[b]=qt[m]=qt[y]=qt[v]=qt[_]=!1;var jt={};jt[o]=jt[u]=jt[T]=jt[O]=jt[l]=jt[d]=jt[w]=jt[S]=jt[I]=jt[N]=jt[C]=jt[g]=jt[p]=jt[b]=jt[m]=jt[y]=jt[v]=jt[x]=jt[R]=jt["[object Uint8ClampedArray]"]=jt[A]=jt[k]=!0,jt[c]=jt[f]=jt[_]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Gt=parseFloat,Vt=parseInt,zt="object"==typeof global&&global&&global.Object===Object&&global,Bt="object"==typeof self&&self&&self.Object===Object&&self,Yt=zt||Bt||Function("return this")(),Ht=e&&!e.nodeType&&e,Ut=Ht&&"object"==typeof t&&t&&!t.nodeType&&t,Wt=Ut&&Ut.exports===Ht,Kt=Wt&&zt.process,$t=function(){try{return Ut&&Ut.require&&Ut.require("util").types||Kt&&Kt.binding&&Kt.binding("util")}catch(t){}}(),Zt=$t&&$t.isArrayBuffer,Jt=$t&&$t.isDate,Qt=$t&&$t.isMap,Xt=$t&&$t.isRegExp,te=$t&&$t.isSet,ee=$t&&$t.isTypedArray;function ne(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function ae(t,e,n,a){for(var r=-1,i=null==t?0:t.length;++r<i;){var s=t[r];e(a,s,n(s),t)}return a}function re(t,e){for(var n=-1,a=null==t?0:t.length;++n<a&&!1!==e(t[n],n,t););return t}function ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function se(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(!e(t[n],n,t))return!1;return!0}function oe(t,e){for(var n=-1,a=null==t?0:t.length,r=0,i=[];++n<a;){var s=t[n];e(s,n,t)&&(i[r++]=s)}return i}function ue(t,e){return!(null==t||!t.length)&&ye(t,e,0)>-1}function le(t,e,n){for(var a=-1,r=null==t?0:t.length;++a<r;)if(n(e,t[a]))return!0;return!1}function de(t,e){for(var n=-1,a=null==t?0:t.length,r=Array(a);++n<a;)r[n]=e(t[n],n,t);return r}function ce(t,e){for(var n=-1,a=e.length,r=t.length;++n<a;)t[r+n]=e[n];return t}function fe(t,e,n,a){var r=-1,i=null==t?0:t.length;for(a&&i&&(n=t[++r]);++r<i;)n=e(n,t[r],r,t);return n}function he(t,e,n,a){var r=null==t?0:t.length;for(a&&r&&(n=t[--r]);r--;)n=e(n,t[r],r,t);return n}function ge(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(e(t[n],n,t))return!0;return!1}var pe=Te("length");function be(t,e,n){var a;return n(t,(function(t,n,r){if(e(t,n,r))return a=n,!1})),a}function me(t,e,n,a){for(var r=t.length,i=n+(a?1:-1);a?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function ye(t,e,n){return e==e?function(t,e,n){for(var a=n-1,r=t.length;++a<r;)if(t[a]===e)return a;return-1}(t,e,n):me(t,xe,n)}function ve(t,e,n,a){for(var r=n-1,i=t.length;++r<i;)if(a(t[r],e))return r;return-1}function xe(t){return t!=t}function _e(t,e){var n=null==t?0:t.length;return n?Se(t,e)/n:NaN}function Te(t){return function(e){return null==e?void 0:e[t]}}function Oe(t){return function(e){return null==t?void 0:t[e]}}function we(t,e,n,a,r){return r(t,(function(t,r,i){n=a?(a=!1,t):e(n,t,r,i)})),n}function Se(t,e){for(var n,a=-1,r=t.length;++a<r;){var i=e(t[a]);void 0!==i&&(n=void 0===n?i:n+i)}return n}function Ie(t,e){for(var n=-1,a=Array(t);++n<t;)a[n]=e(n);return a}function Ne(t){return function(e){return t(e)}}function Ce(t,e){return de(e,(function(e){return t[e]}))}function Re(t,e){return t.has(e)}function Ae(t,e){for(var n=-1,a=t.length;++n<a&&ye(e,t[n],0)>-1;);return n}function ke(t,e){for(var n=t.length;n--&&ye(e,t[n],0)>-1;);return n}function Ee(t,e){for(var n=t.length,a=0;n--;)t[n]===e&&++a;return a}var Le=Oe({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),De=Oe({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function Pe(t){return"\\"+Ft[t]}function Me(t){return Lt.test(t)}function qe(t){var e=-1,n=Array(t.size);return t.forEach((function(t,a){n[++e]=[a,t]})),n}function je(t,e){return function(n){return t(e(n))}}function Fe(t,e){for(var n=-1,a=t.length,r=0,s=[];++n<a;){var o=t[n];o!==e&&o!==i||(t[n]=i,s[r++]=n)}return s}function Ge(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}function Ve(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=[t,t]})),n}function ze(t){return Me(t)?function(t){for(var e=kt.lastIndex=0;kt.test(t);)++e;return e}(t):pe(t)}function Be(t){return Me(t)?function(t){return t.match(kt)||[]}(t):function(t){return t.split("")}(t)}var Ye=Oe({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),He=function t(e){var n,a=(e=null==e?Yt:He.defaults(Yt.Object(),e,He.pick(Yt,Pt))).Array,ct=e.Date,ft=e.Error,ht=e.Function,gt=e.Math,pt=e.Object,bt=e.RegExp,mt=e.String,yt=e.TypeError,vt=a.prototype,xt=pt.prototype,_t=e["__core-js_shared__"],Tt=ht.prototype.toString,Ot=xt.hasOwnProperty,wt=0,St=(n=/[^.]+$/.exec(_t&&_t.keys&&_t.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",It=xt.toString,Nt=Tt.call(pt),Ct=Yt._,kt=bt("^"+Tt.call(Ot).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Lt=Wt?e.Buffer:void 0,Ft=e.Symbol,zt=e.Uint8Array,Bt=Lt?Lt.allocUnsafe:void 0,Ht=je(pt.getPrototypeOf,pt),Ut=pt.create,Kt=xt.propertyIsEnumerable,$t=vt.splice,pe=Ft?Ft.isConcatSpreadable:void 0,Oe=Ft?Ft.iterator:void 0,Ue=Ft?Ft.toStringTag:void 0,We=function(){try{var t=Jr(pt,"defineProperty");return t({},"",{}),t}catch(e){}}(),Ke=e.clearTimeout!==Yt.clearTimeout&&e.clearTimeout,$e=ct&&ct.now!==Yt.Date.now&&ct.now,Ze=e.setTimeout!==Yt.setTimeout&&e.setTimeout,Je=gt.ceil,Qe=gt.floor,Xe=pt.getOwnPropertySymbols,tn=Lt?Lt.isBuffer:void 0,en=e.isFinite,nn=vt.join,an=je(pt.keys,pt),rn=gt.max,sn=gt.min,on=ct.now,un=e.parseInt,ln=gt.random,dn=vt.reverse,cn=Jr(e,"DataView"),fn=Jr(e,"Map"),hn=Jr(e,"Promise"),gn=Jr(e,"Set"),pn=Jr(e,"WeakMap"),bn=Jr(pt,"create"),mn=pn&&new pn,yn={},vn=Ii(cn),xn=Ii(fn),_n=Ii(hn),Tn=Ii(gn),On=Ii(pn),wn=Ft?Ft.prototype:void 0,Sn=wn?wn.valueOf:void 0,In=wn?wn.toString:void 0;function Nn(t){if(Bs(t)&&!Es(t)&&!(t instanceof kn)){if(t instanceof An)return t;if(Ot.call(t,"__wrapped__"))return Ni(t)}return new An(t)}var Cn=function(){function t(){}return function(e){if(!zs(e))return{};if(Ut)return Ut(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Rn(){}function An(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function kn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function En(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Ln(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Dn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function Pn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Dn;++e<n;)this.add(t[e])}function Mn(t){var e=this.__data__=new Ln(t);this.size=e.size}function qn(t,e){var n=Es(t),a=!n&&ks(t),r=!n&&!a&&Ms(t),i=!n&&!a&&!r&&Js(t),s=n||a||r||i,o=s?Ie(t.length,mt):[],u=o.length;for(var l in t)!e&&!Ot.call(t,l)||s&&("length"==l||r&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||ri(l,u))||o.push(l);return o}function jn(t){var e=t.length;return e?t[Da(0,e-1)]:void 0}function Fn(t,e){return _i(pr(t),Kn(e,0,t.length))}function Gn(t){return _i(pr(t))}function Vn(t,e,n){(void 0===n||Cs(t[e],n))&&(void 0!==n||e in t)||Un(t,e,n)}function zn(t,e,n){var a=t[e];Ot.call(t,e)&&Cs(a,n)&&(void 0!==n||e in t)||Un(t,e,n)}function Bn(t,e){for(var n=t.length;n--;)if(Cs(t[n][0],e))return n;return-1}function Yn(t,e,n,a){return Xn(t,(function(t,r,i){e(a,t,n(t),i)})),a}function Hn(t,e){return t&&br(e,xo(e),t)}function Un(t,e,n){"__proto__"==e&&We?We(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Wn(t,e){for(var n=-1,r=e.length,i=a(r),s=null==t;++n<r;)i[n]=s?void 0:po(t,e[n]);return i}function Kn(t,e,n){return t==t&&(void 0!==n&&(t=t<=n?t:n),void 0!==e&&(t=t>=e?t:e)),t}function $n(t,e,n,a,r,i){var s,u=1&e,c=2&e,_=4&e;if(n&&(s=r?n(t,a,r,i):n(t)),void 0!==s)return s;if(!zs(t))return t;var E=Es(t);if(E){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&Ot.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return pr(t,s)}else{var L=ti(t),D=L==f||L==h;if(Ms(t))return lr(t,u);if(L==b||L==o||D&&!r){if(s=c||D?{}:ni(t),!u)return c?function(t,e){return br(t,Xr(t),e)}(t,function(t,e){return t&&br(e,_o(e),t)}(s,t)):function(t,e){return br(t,Qr(t),e)}(t,Hn(s,t))}else{if(!jt[L])return r?t:{};s=function(t,e,n){var a=t.constructor;switch(e){case T:return dr(t);case l:case d:return new a(+t);case O:return function(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case w:case S:case I:case N:case C:case R:case"[object Uint8ClampedArray]":case A:case k:return cr(t,n);case g:return new a;case p:case v:return new a(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case y:return new a;case x:return Sn?pt(Sn.call(t)):{}}}(t,L,u)}}i||(i=new Mn);var P=i.get(t);if(P)return P;i.set(t,s),Ks(t)?t.forEach((function(a){s.add($n(a,e,n,a,t,i))})):Ys(t)&&t.forEach((function(a,r){s.set(r,$n(a,e,n,r,t,i))}));var M=E?void 0:(_?c?Yr:Br:c?_o:xo)(t);return re(M||t,(function(a,r){M&&(a=t[r=a]),zn(s,r,$n(a,e,n,r,t,i))})),s}function Zn(t,e,n){var a=n.length;if(null==t)return!a;for(t=pt(t);a--;){var r=n[a],i=t[r];if(void 0===i&&!(r in t)||!(0,e[r])(i))return!1}return!0}function Jn(t,e,n){if("function"!=typeof t)throw new yt(r);return mi((function(){t.apply(void 0,n)}),e)}function Qn(t,e,n,a){var r=-1,i=ue,s=!0,o=t.length,u=[],l=e.length;if(!o)return u;n&&(e=de(e,Ne(n))),a?(i=le,s=!1):e.length>=200&&(i=Re,s=!1,e=new Pn(e));t:for(;++r<o;){var d=t[r],c=null==n?d:n(d);if(d=a||0!==d?d:0,s&&c==c){for(var f=l;f--;)if(e[f]===c)continue t;u.push(d)}else i(e,c,a)||u.push(d)}return u}Nn.templateSettings={escape:F,evaluate:G,interpolate:V,variable:"",imports:{_:Nn}},(Nn.prototype=Rn.prototype).constructor=Nn,(An.prototype=Cn(Rn.prototype)).constructor=An,(kn.prototype=Cn(Rn.prototype)).constructor=kn,En.prototype.clear=function(){this.__data__=bn?bn(null):{},this.size=0},En.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},En.prototype.get=function(t){var e=this.__data__;if(bn){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return Ot.call(e,t)?e[t]:void 0},En.prototype.has=function(t){var e=this.__data__;return bn?void 0!==e[t]:Ot.call(e,t)},En.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=bn&&void 0===e?"__lodash_hash_undefined__":e,this},Ln.prototype.clear=function(){this.__data__=[],this.size=0},Ln.prototype.delete=function(t){var e=this.__data__,n=Bn(e,t);return!(n<0||(n==e.length-1?e.pop():$t.call(e,n,1),--this.size,0))},Ln.prototype.get=function(t){var e=this.__data__,n=Bn(e,t);return n<0?void 0:e[n][1]},Ln.prototype.has=function(t){return Bn(this.__data__,t)>-1},Ln.prototype.set=function(t,e){var n=this.__data__,a=Bn(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this},Dn.prototype.clear=function(){this.size=0,this.__data__={hash:new En,map:new(fn||Ln),string:new En}},Dn.prototype.delete=function(t){var e=$r(this,t).delete(t);return this.size-=e?1:0,e},Dn.prototype.get=function(t){return $r(this,t).get(t)},Dn.prototype.has=function(t){return $r(this,t).has(t)},Dn.prototype.set=function(t,e){var n=$r(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this},Pn.prototype.add=Pn.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Pn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.clear=function(){this.__data__=new Ln,this.size=0},Mn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Mn.prototype.get=function(t){return this.__data__.get(t)},Mn.prototype.has=function(t){return this.__data__.has(t)},Mn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Ln){var a=n.__data__;if(!fn||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new Dn(a)}return n.set(t,e),this.size=n.size,this};var Xn=vr(oa),ta=vr(ua,!0);function ea(t,e){var n=!0;return Xn(t,(function(t,a,r){return n=!!e(t,a,r)})),n}function na(t,e,n){for(var a=-1,r=t.length;++a<r;){var i=t[a],s=e(i);if(null!=s&&(void 0===o?s==s&&!Zs(s):n(s,o)))var o=s,u=i}return u}function aa(t,e){var n=[];return Xn(t,(function(t,a,r){e(t,a,r)&&n.push(t)})),n}function ra(t,e,n,a,r){var i=-1,s=t.length;for(n||(n=ai),r||(r=[]);++i<s;){var o=t[i];e>0&&n(o)?e>1?ra(o,e-1,n,a,r):ce(r,o):a||(r[r.length]=o)}return r}var ia=xr(),sa=xr(!0);function oa(t,e){return t&&ia(t,e,xo)}function ua(t,e){return t&&sa(t,e,xo)}function la(t,e){return oe(e,(function(e){return Fs(t[e])}))}function da(t,e){for(var n=0,a=(e=ir(e,t)).length;null!=t&&n<a;)t=t[Si(e[n++])];return n&&n==a?t:void 0}function ca(t,e,n){var a=e(t);return Es(t)?a:ce(a,n(t))}function fa(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Ue&&Ue in pt(t)?function(t){var e=Ot.call(t,Ue),n=t[Ue];try{t[Ue]=void 0;var a=!0}catch(i){}var r=It.call(t);return a&&(e?t[Ue]=n:delete t[Ue]),r}(t):function(t){return It.call(t)}(t)}function ha(t,e){return t>e}function ga(t,e){return null!=t&&Ot.call(t,e)}function pa(t,e){return null!=t&&e in pt(t)}function ba(t,e,n){for(var r=n?le:ue,i=t[0].length,s=t.length,o=s,u=a(s),l=1/0,d=[];o--;){var c=t[o];o&&e&&(c=de(c,Ne(e))),l=sn(c.length,l),u[o]=!n&&(e||i>=120&&c.length>=120)?new Pn(o&&c):void 0}c=t[0];var f=-1,h=u[0];t:for(;++f<i&&d.length<l;){var g=c[f],p=e?e(g):g;if(g=n||0!==g?g:0,!(h?Re(h,p):r(d,p,n))){for(o=s;--o;){var b=u[o];if(!(b?Re(b,p):r(t[o],p,n)))continue t}h&&h.push(p),d.push(g)}}return d}function ma(t,e,n){var a=null==(t=hi(t,e=ir(e,t)))?t:t[Si(ji(e))];return null==a?void 0:ne(a,t,n)}function ya(t){return Bs(t)&&fa(t)==o}function va(t,e,n,a,r){return t===e||(null==t||null==e||!Bs(t)&&!Bs(e)?t!=t&&e!=e:function(t,e,n,a,r,i){var s=Es(t),f=Es(e),h=s?u:ti(t),_=f?u:ti(e),w=(h=h==o?b:h)==b,S=(_=_==o?b:_)==b,I=h==_;if(I&&Ms(t)){if(!Ms(e))return!1;s=!0,w=!1}if(I&&!w)return i||(i=new Mn),s||Js(t)?Vr(t,e,n,a,r,i):function(t,e,n,a,r,i,s){switch(n){case O:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case T:return!(t.byteLength!=e.byteLength||!i(new zt(t),new zt(e)));case l:case d:case p:return Cs(+t,+e);case c:return t.name==e.name&&t.message==e.message;case m:case v:return t==e+"";case g:var o=qe;case y:if(o||(o=Ge),t.size!=e.size&&!(1&a))return!1;var u=s.get(t);if(u)return u==e;a|=2,s.set(t,e);var f=Vr(o(t),o(e),a,r,i,s);return s.delete(t),f;case x:if(Sn)return Sn.call(t)==Sn.call(e)}return!1}(t,e,h,n,a,r,i);if(!(1&n)){var N=w&&Ot.call(t,"__wrapped__"),C=S&&Ot.call(e,"__wrapped__");if(N||C){var R=N?t.value():t,A=C?e.value():e;return i||(i=new Mn),r(R,A,n,a,i)}}return!!I&&(i||(i=new Mn),function(t,e,n,a,r,i){var s=1&n,o=Br(t),u=o.length;if(u!=Br(e).length&&!s)return!1;for(var l=u;l--;){var d=o[l];if(!(s?d in e:Ot.call(e,d)))return!1}var c=i.get(t);if(c&&i.get(e))return c==e;var f=!0;i.set(t,e),i.set(e,t);for(var h=s;++l<u;){var g=t[d=o[l]],p=e[d];if(a)var b=s?a(p,g,d,e,t,i):a(g,p,d,t,e,i);if(!(void 0===b?g===p||r(g,p,n,a,i):b)){f=!1;break}h||(h="constructor"==d)}if(f&&!h){var m=t.constructor,y=e.constructor;m!=y&&"constructor"in t&&"constructor"in e&&!("function"==typeof m&&m instanceof m&&"function"==typeof y&&y instanceof y)&&(f=!1)}return i.delete(t),i.delete(e),f}(t,e,n,a,r,i))}(t,e,n,a,va,r))}function xa(t,e,n,a){var r=n.length,i=r,s=!a;if(null==t)return!i;for(t=pt(t);r--;){var o=n[r];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++r<i;){var u=(o=n[r])[0],l=t[u],d=o[1];if(s&&o[2]){if(void 0===l&&!(u in t))return!1}else{var c=new Mn;if(a)var f=a(l,d,u,t,e,c);if(!(void 0===f?va(d,l,3,a,c):f))return!1}}return!0}function _a(t){return!(!zs(t)||(e=t,St&&St in e))&&(Fs(t)?kt:it).test(Ii(t));var e}function Ta(t){return"function"==typeof t?t:null==t?Uo:"object"==typeof t?Es(t)?Na(t[0],t[1]):Ia(t):eu(t)}function Oa(t){if(!li(t))return an(t);var e=[];for(var n in pt(t))Ot.call(t,n)&&"constructor"!=n&&e.push(n);return e}function wa(t,e){return t<e}function Sa(t,e){var n=-1,r=Ds(t)?a(t.length):[];return Xn(t,(function(t,a,i){r[++n]=e(t,a,i)})),r}function Ia(t){var e=Zr(t);return 1==e.length&&e[0][2]?ci(e[0][0],e[0][1]):function(n){return n===t||xa(n,t,e)}}function Na(t,e){return si(t)&&di(e)?ci(Si(t),e):function(n){var a=po(n,t);return void 0===a&&a===e?bo(n,t):va(e,a,3)}}function Ca(t,e,n,a,r){t!==e&&ia(e,(function(i,s){if(r||(r=new Mn),zs(i))!function(t,e,n,a,r,i,s){var o=pi(t,n),u=pi(e,n),l=s.get(u);if(l)Vn(t,n,l);else{var d=i?i(o,u,n+"",t,e,s):void 0,c=void 0===d;if(c){var f=Es(u),h=!f&&Ms(u),g=!f&&!h&&Js(u);d=u,f||h||g?Es(o)?d=o:Ps(o)?d=pr(o):h?(c=!1,d=lr(u,!0)):g?(c=!1,d=cr(u,!0)):d=[]:Us(u)||ks(u)?(d=o,ks(o)?d=io(o):zs(o)&&!Fs(o)||(d=ni(u))):c=!1}c&&(s.set(u,d),r(d,u,a,i,s),s.delete(u)),Vn(t,n,d)}}(t,e,s,n,Ca,a,r);else{var o=a?a(pi(t,s),i,s+"",t,e,r):void 0;void 0===o&&(o=i),Vn(t,s,o)}}),_o)}function Ra(t,e){var n=t.length;if(n)return ri(e+=e<0?n:0,n)?t[e]:void 0}function Aa(t,e,n){var a=-1;return e=de(e.length?e:[Uo],Ne(Kr())),function(t,e){var a=t.length;for(t.sort((function(t,e){return function(t,e,n){for(var a=-1,r=t.criteria,i=e.criteria,s=r.length,o=n.length;++a<s;){var u=fr(r[a],i[a]);if(u)return a>=o?u:u*("desc"==n[a]?-1:1)}return t.index-e.index}(t,e,n)}));a--;)t[a]=t[a].value;return t}(Sa(t,(function(t,n,r){return{criteria:de(e,(function(e){return e(t)})),index:++a,value:t}})))}function ka(t,e,n){for(var a=-1,r=e.length,i={};++a<r;){var s=e[a],o=da(t,s);n(o,s)&&Fa(i,ir(s,t),o)}return i}function Ea(t,e,n,a){var r=a?ve:ye,i=-1,s=e.length,o=t;for(t===e&&(e=pr(e)),n&&(o=de(t,Ne(n)));++i<s;)for(var u=0,l=e[i],d=n?n(l):l;(u=r(o,d,u,a))>-1;)o!==t&&$t.call(o,u,1),$t.call(t,u,1);return t}function La(t,e){for(var n=t?e.length:0,a=n-1;n--;){var r=e[n];if(n==a||r!==i){var i=r;ri(r)?$t.call(t,r,1):Ja(t,r)}}return t}function Da(t,e){return t+Qe(ln()*(e-t+1))}function Pa(t,e){var n="";if(!t||e<1||e>9007199254740991)return n;do{e%2&&(n+=t),(e=Qe(e/2))&&(t+=t)}while(e);return n}function Ma(t,e){return yi(fi(t,e,Uo),t+"")}function qa(t){return jn(Ro(t))}function ja(t,e){var n=Ro(t);return _i(n,Kn(e,0,n.length))}function Fa(t,e,n,a){if(!zs(t))return t;for(var r=-1,i=(e=ir(e,t)).length,s=i-1,o=t;null!=o&&++r<i;){var u=Si(e[r]),l=n;if(r!=s){var d=o[u];void 0===(l=a?a(d,u,o):void 0)&&(l=zs(d)?d:ri(e[r+1])?[]:{})}zn(o,u,l),o=o[u]}return t}var Ga=mn?function(t,e){return mn.set(t,e),t}:Uo,Va=We?function(t,e){return We(t,"toString",{configurable:!0,enumerable:!1,value:Bo(e),writable:!0})}:Uo;function za(t){return _i(Ro(t))}function Ba(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var s=a(i);++r<i;)s[r]=t[r+e];return s}function Ya(t,e){var n;return Xn(t,(function(t,a,r){return!(n=e(t,a,r))})),!!n}function Ha(t,e,n){var a=0,r=null==t?a:t.length;if("number"==typeof e&&e==e&&r<=2147483647){for(;a<r;){var i=a+r>>>1,s=t[i];null!==s&&!Zs(s)&&(n?s<=e:s<e)?a=i+1:r=i}return r}return Ua(t,e,Uo,n)}function Ua(t,e,n,a){e=n(e);for(var r=0,i=null==t?0:t.length,s=e!=e,o=null===e,u=Zs(e),l=void 0===e;r<i;){var d=Qe((r+i)/2),c=n(t[d]),f=void 0!==c,h=null===c,g=c==c,p=Zs(c);if(s)var b=a||g;else b=l?g&&(a||f):o?g&&f&&(a||!h):u?g&&f&&!h&&(a||!p):!h&&!p&&(a?c<=e:c<e);b?r=d+1:i=d}return sn(i,4294967294)}function Wa(t,e){for(var n=-1,a=t.length,r=0,i=[];++n<a;){var s=t[n],o=e?e(s):s;if(!n||!Cs(o,u)){var u=o;i[r++]=0===s?0:s}}return i}function Ka(t){return"number"==typeof t?t:Zs(t)?NaN:+t}function $a(t){if("string"==typeof t)return t;if(Es(t))return de(t,$a)+"";if(Zs(t))return In?In.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Za(t,e,n){var a=-1,r=ue,i=t.length,s=!0,o=[],u=o;if(n)s=!1,r=le;else if(i>=200){var l=e?null:Pr(t);if(l)return Ge(l);s=!1,r=Re,u=new Pn}else u=e?[]:o;t:for(;++a<i;){var d=t[a],c=e?e(d):d;if(d=n||0!==d?d:0,s&&c==c){for(var f=u.length;f--;)if(u[f]===c)continue t;e&&u.push(c),o.push(d)}else r(u,c,n)||(u!==o&&u.push(c),o.push(d))}return o}function Ja(t,e){return null==(t=hi(t,e=ir(e,t)))||delete t[Si(ji(e))]}function Qa(t,e,n,a){return Fa(t,e,n(da(t,e)),a)}function Xa(t,e,n,a){for(var r=t.length,i=a?r:-1;(a?i--:++i<r)&&e(t[i],i,t););return n?Ba(t,a?0:i,a?i+1:r):Ba(t,a?i+1:0,a?r:i)}function tr(t,e){var n=t;return n instanceof kn&&(n=n.value()),fe(e,(function(t,e){return e.func.apply(e.thisArg,ce([t],e.args))}),n)}function er(t,e,n){var r=t.length;if(r<2)return r?Za(t[0]):[];for(var i=-1,s=a(r);++i<r;)for(var o=t[i],u=-1;++u<r;)u!=i&&(s[i]=Qn(s[i]||o,t[u],e,n));return Za(ra(s,1),e,n)}function nr(t,e,n){for(var a=-1,r=t.length,i=e.length,s={};++a<r;)n(s,t[a],a<i?e[a]:void 0);return s}function ar(t){return Ps(t)?t:[]}function rr(t){return"function"==typeof t?t:Uo}function ir(t,e){return Es(t)?t:si(t,e)?[t]:wi(so(t))}var sr=Ma;function or(t,e,n){var a=t.length;return n=void 0===n?a:n,!e&&n>=a?t:Ba(t,e,n)}var ur=Ke||function(t){return Yt.clearTimeout(t)};function lr(t,e){if(e)return t.slice();var n=t.length,a=Bt?Bt(n):new t.constructor(n);return t.copy(a),a}function dr(t){var e=new t.constructor(t.byteLength);return new zt(e).set(new zt(t)),e}function cr(t,e){var n=e?dr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function fr(t,e){if(t!==e){var n=void 0!==t,a=null===t,r=t==t,i=Zs(t),s=void 0!==e,o=null===e,u=e==e,l=Zs(e);if(!o&&!l&&!i&&t>e||i&&s&&u&&!o&&!l||a&&s&&u||!n&&u||!r)return 1;if(!a&&!i&&!l&&t<e||l&&n&&r&&!a&&!i||o&&n&&r||!s&&r||!u)return-1}return 0}function hr(t,e,n,r){for(var i=-1,s=t.length,o=n.length,u=-1,l=e.length,d=rn(s-o,0),c=a(l+d),f=!r;++u<l;)c[u]=e[u];for(;++i<o;)(f||i<s)&&(c[n[i]]=t[i]);for(;d--;)c[u++]=t[i++];return c}function gr(t,e,n,r){for(var i=-1,s=t.length,o=-1,u=n.length,l=-1,d=e.length,c=rn(s-u,0),f=a(c+d),h=!r;++i<c;)f[i]=t[i];for(var g=i;++l<d;)f[g+l]=e[l];for(;++o<u;)(h||i<s)&&(f[g+n[o]]=t[i++]);return f}function pr(t,e){var n=-1,r=t.length;for(e||(e=a(r));++n<r;)e[n]=t[n];return e}function br(t,e,n,a){var r=!n;n||(n={});for(var i=-1,s=e.length;++i<s;){var o=e[i],u=a?a(n[o],t[o],o,n,t):void 0;void 0===u&&(u=t[o]),r?Un(n,o,u):zn(n,o,u)}return n}function mr(t,e){return function(n,a){var r=Es(n)?ae:Yn,i=e?e():{};return r(n,t,Kr(a,2),i)}}function yr(t){return Ma((function(e,n){var a=-1,r=n.length,i=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(i=t.length>3&&"function"==typeof i?(r--,i):void 0,s&&ii(n[0],n[1],s)&&(i=r<3?void 0:i,r=1),e=pt(e);++a<r;){var o=n[a];o&&t(e,o,a,i)}return e}))}function vr(t,e){return function(n,a){if(null==n)return n;if(!Ds(n))return t(n,a);for(var r=n.length,i=e?r:-1,s=pt(n);(e?i--:++i<r)&&!1!==a(s[i],i,s););return n}}function xr(t){return function(e,n,a){for(var r=-1,i=pt(e),s=a(e),o=s.length;o--;){var u=s[t?o:++r];if(!1===n(i[u],u,i))break}return e}}function _r(t){return function(e){var n=Me(e=so(e))?Be(e):void 0,a=n?n[0]:e.charAt(0),r=n?or(n,1).join(""):e.slice(1);return a[t]()+r}}function Tr(t){return function(e){return fe(Go(Eo(e).replace(Rt,"")),t,"")}}function Or(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Cn(t.prototype),a=t.apply(n,e);return zs(a)?a:n}}function wr(t){return function(e,n,a){var r=pt(e);if(!Ds(e)){var i=Kr(n,3);e=xo(e),n=function(t){return i(r[t],t,r)}}var s=t(e,n,a);return s>-1?r[i?e[s]:s]:void 0}}function Sr(t){return zr((function(e){var n=e.length,a=n,i=An.prototype.thru;for(t&&e.reverse();a--;){var s=e[a];if("function"!=typeof s)throw new yt(r);if(i&&!o&&"wrapper"==Ur(s))var o=new An([],!0)}for(a=o?a:n;++a<n;){var u=Ur(s=e[a]),l="wrapper"==u?Hr(s):void 0;o=l&&oi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?o[Ur(l[0])].apply(o,l[3]):1==s.length&&oi(s)?o[u]():o.thru(s)}return function(){var t=arguments,a=t[0];if(o&&1==t.length&&Es(a))return o.plant(a).value();for(var r=0,i=n?e[r].apply(this,t):a;++r<n;)i=e[r].call(this,i);return i}}))}function Ir(t,e,n,r,i,s,o,u,l,d){var c=128&e,f=1&e,h=2&e,g=24&e,p=512&e,b=h?void 0:Or(t);return function m(){for(var y=arguments.length,v=a(y),x=y;x--;)v[x]=arguments[x];if(g)var _=Wr(m),T=Ee(v,_);if(r&&(v=hr(v,r,i,g)),s&&(v=gr(v,s,o,g)),y-=T,g&&y<d){var O=Fe(v,_);return Lr(t,e,Ir,m.placeholder,n,v,O,u,l,d-y)}var w=f?n:this,S=h?w[t]:t;return y=v.length,u?v=gi(v,u):p&&y>1&&v.reverse(),c&&l<y&&(v.length=l),this&&this!==Yt&&this instanceof m&&(S=b||Or(S)),S.apply(w,v)}}function Nr(t,e){return function(n,a){return function(t,e,n,a){return oa(t,(function(t,r,i){e(a,n(t),r,i)})),a}(n,t,e(a),{})}}function Cr(t,e){return function(n,a){var r;if(void 0===n&&void 0===a)return e;if(void 0!==n&&(r=n),void 0!==a){if(void 0===r)return a;"string"==typeof n||"string"==typeof a?(n=$a(n),a=$a(a)):(n=Ka(n),a=Ka(a)),r=t(n,a)}return r}}function Rr(t){return zr((function(e){return e=de(e,Ne(Kr())),Ma((function(n){var a=this;return t(e,(function(t){return ne(t,a,n)}))}))}))}function Ar(t,e){var n=(e=void 0===e?" ":$a(e)).length;if(n<2)return n?Pa(e,t):e;var a=Pa(e,Je(t/ze(e)));return Me(e)?or(Be(a),0,t).join(""):a.slice(0,t)}function kr(t){return function(e,n,r){return r&&"number"!=typeof r&&ii(e,n,r)&&(n=r=void 0),e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n,r){for(var i=-1,s=rn(Je((e-t)/(n||1)),0),o=a(s);s--;)o[r?s:++i]=t,t+=n;return o}(e,n,r=void 0===r?e<n?1:-1:eo(r),t)}}function Er(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=ro(e),n=ro(n)),t(e,n)}}function Lr(t,e,n,a,r,i,s,o,u,l){var d=8&e;e|=d?32:64,4&(e&=~(d?64:32))||(e&=-4);var c=[t,e,r,d?i:void 0,d?s:void 0,d?void 0:i,d?void 0:s,o,u,l],f=n.apply(void 0,c);return oi(t)&&bi(f,c),f.placeholder=a,vi(f,t,e)}function Dr(t){var e=gt[t];return function(t,n){if(t=ro(t),(n=null==n?0:sn(no(n),292))&&en(t)){var a=(so(t)+"e").split("e");return+((a=(so(e(a[0]+"e"+(+a[1]+n)))+"e").split("e"))[0]+"e"+(+a[1]-n))}return e(t)}}var Pr=gn&&1/Ge(new gn([,-0]))[1]==1/0?function(t){return new gn(t)}:Jo;function Mr(t){return function(e){var n=ti(e);return n==g?qe(e):n==y?Ve(e):function(t,e){return de(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function qr(t,e,n,s,o,u,l,d){var c=2&e;if(!c&&"function"!=typeof t)throw new yt(r);var f=s?s.length:0;if(f||(e&=-97,s=o=void 0),l=void 0===l?l:rn(no(l),0),d=void 0===d?d:no(d),f-=o?o.length:0,64&e){var h=s,g=o;s=o=void 0}var p=c?void 0:Hr(t),b=[t,e,n,s,o,h,g,u,l,d];if(p&&function(t,e){var n=t[1],a=e[1],r=n|a;if(!(r<131||128==a&&8==n||128==a&&256==n&&t[7].length<=e[8]||384==a&&e[7].length<=e[8]&&8==n))return t;1&a&&(t[2]=e[2],r|=1&n?0:4);var s=e[3];if(s){var o=t[3];t[3]=o?hr(o,s,e[4]):s,t[4]=o?Fe(t[3],i):e[4]}(s=e[5])&&(t[5]=(o=t[5])?gr(o,s,e[6]):s,t[6]=o?Fe(t[5],i):e[6]),(s=e[7])&&(t[7]=s),128&a&&(t[8]=null==t[8]?e[8]:sn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=r}(b,p),t=b[0],e=b[1],n=b[2],s=b[3],o=b[4],!(d=b[9]=void 0===b[9]?c?0:t.length:rn(b[9]-f,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var r=Or(t);return function i(){for(var s=arguments.length,o=a(s),u=s,l=Wr(i);u--;)o[u]=arguments[u];var d=s<3&&o[0]!==l&&o[s-1]!==l?[]:Fe(o,l);if((s-=d.length)<n)return Lr(t,e,Ir,i.placeholder,void 0,o,d,void 0,void 0,n-s);var c=this&&this!==Yt&&this instanceof i?r:t;return ne(c,this,o)}}(t,e,d):32!=e&&33!=e||o.length?Ir.apply(void 0,b):function(t,e,n,r){var i=1&e,s=Or(t);return function e(){for(var o=-1,u=arguments.length,l=-1,d=r.length,c=a(d+u),f=this&&this!==Yt&&this instanceof e?s:t;++l<d;)c[l]=r[l];for(;u--;)c[l++]=arguments[++o];return ne(f,i?n:this,c)}}(t,e,n,s);else var m=function(t,e,n){var a=1&e,r=Or(t);return function e(){var i=this&&this!==Yt&&this instanceof e?r:t;return i.apply(a?n:this,arguments)}}(t,e,n);return vi((p?Ga:bi)(m,b),t,e)}function jr(t,e,n,a){return void 0===t||Cs(t,xt[n])&&!Ot.call(a,n)?e:t}function Fr(t,e,n,a,r,i){return zs(t)&&zs(e)&&(i.set(e,t),Ca(t,e,void 0,Fr,i),i.delete(e)),t}function Gr(t){return Us(t)?void 0:t}function Vr(t,e,n,a,r,i){var s=1&n,o=t.length,u=e.length;if(o!=u&&!(s&&u>o))return!1;var l=i.get(t);if(l&&i.get(e))return l==e;var d=-1,c=!0,f=2&n?new Pn:void 0;for(i.set(t,e),i.set(e,t);++d<o;){var h=t[d],g=e[d];if(a)var p=s?a(g,h,d,e,t,i):a(h,g,d,t,e,i);if(void 0!==p){if(p)continue;c=!1;break}if(f){if(!ge(e,(function(t,e){if(!Re(f,e)&&(h===t||r(h,t,n,a,i)))return f.push(e)}))){c=!1;break}}else if(h!==g&&!r(h,g,n,a,i)){c=!1;break}}return i.delete(t),i.delete(e),c}function zr(t){return yi(fi(t,void 0,Li),t+"")}function Br(t){return ca(t,xo,Qr)}function Yr(t){return ca(t,_o,Xr)}var Hr=mn?function(t){return mn.get(t)}:Jo;function Ur(t){for(var e=t.name+"",n=yn[e],a=Ot.call(yn,e)?n.length:0;a--;){var r=n[a],i=r.func;if(null==i||i==t)return r.name}return e}function Wr(t){return(Ot.call(Nn,"placeholder")?Nn:t).placeholder}function Kr(){var t=Nn.iteratee||Wo;return t=t===Wo?Ta:t,arguments.length?t(arguments[0],arguments[1]):t}function $r(t,e){var n,a,r=t.__data__;return("string"==(a=typeof(n=e))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==n:null===n)?r["string"==typeof e?"string":"hash"]:r.map}function Zr(t){for(var e=xo(t),n=e.length;n--;){var a=e[n],r=t[a];e[n]=[a,r,di(r)]}return e}function Jr(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return _a(n)?n:void 0}var Qr=Xe?function(t){return null==t?[]:(t=pt(t),oe(Xe(t),(function(e){return Kt.call(t,e)})))}:ru,Xr=Xe?function(t){for(var e=[];t;)ce(e,Qr(t)),t=Ht(t);return e}:ru,ti=fa;function ei(t,e,n){for(var a=-1,r=(e=ir(e,t)).length,i=!1;++a<r;){var s=Si(e[a]);if(!(i=null!=t&&n(t,s)))break;t=t[s]}return i||++a!=r?i:!!(r=null==t?0:t.length)&&Vs(r)&&ri(s,r)&&(Es(t)||ks(t))}function ni(t){return"function"!=typeof t.constructor||li(t)?{}:Cn(Ht(t))}function ai(t){return Es(t)||ks(t)||!!(pe&&t&&t[pe])}function ri(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&ot.test(t))&&t>-1&&t%1==0&&t<e}function ii(t,e,n){if(!zs(n))return!1;var a=typeof e;return!!("number"==a?Ds(n)&&ri(e,n.length):"string"==a&&e in n)&&Cs(n[e],t)}function si(t,e){if(Es(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!Zs(t))||B.test(t)||!z.test(t)||null!=e&&t in pt(e)}function oi(t){var e=Ur(t),n=Nn[e];if("function"!=typeof n||!(e in kn.prototype))return!1;if(t===n)return!0;var a=Hr(n);return!!a&&t===a[0]}(cn&&ti(new cn(new ArrayBuffer(1)))!=O||fn&&ti(new fn)!=g||hn&&"[object Promise]"!=ti(hn.resolve())||gn&&ti(new gn)!=y||pn&&ti(new pn)!=_)&&(ti=function(t){var e=fa(t),n=e==b?t.constructor:void 0,a=n?Ii(n):"";if(a)switch(a){case vn:return O;case xn:return g;case _n:return"[object Promise]";case Tn:return y;case On:return _}return e});var ui=_t?Fs:iu;function li(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||xt)}function di(t){return t==t&&!zs(t)}function ci(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in pt(n))}}function fi(t,e,n){return e=rn(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,s=rn(r.length-e,0),o=a(s);++i<s;)o[i]=r[e+i];i=-1;for(var u=a(e+1);++i<e;)u[i]=r[i];return u[e]=n(o),ne(t,this,u)}}function hi(t,e){return e.length<2?t:da(t,Ba(e,0,-1))}function gi(t,e){for(var n=t.length,a=sn(e.length,n),r=pr(t);a--;){var i=e[a];t[a]=ri(i,n)?r[i]:void 0}return t}function pi(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var bi=xi(Ga),mi=Ze||function(t,e){return Yt.setTimeout(t,e)},yi=xi(Va);function vi(t,e,n){var a=e+"";return yi(t,function(t,e){var n=e.length;if(!n)return t;var a=n-1;return e[a]=(n>1?"& ":"")+e[a],e=e.join(n>2?", ":" "),t.replace(Z,"{\n/* [wrapped with "+e+"] */\n")}(a,function(t,e){return re(s,(function(n){var a="_."+n[0];e&n[1]&&!ue(t,a)&&t.push(a)})),t.sort()}(function(t){var e=t.match(J);return e?e[1].split(Q):[]}(a),n)))}function xi(t){var e=0,n=0;return function(){var a=on(),r=16-(a-n);if(n=a,r>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function _i(t,e){var n=-1,a=t.length,r=a-1;for(e=void 0===e?a:e;++n<e;){var i=Da(n,r),s=t[i];t[i]=t[n],t[n]=s}return t.length=e,t}var Ti,Oi,wi=(Ti=Ts((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Y,(function(t,n,a,r){e.push(a?r.replace(tt,"$1"):n||t)})),e}),(function(t){return 500===Oi.size&&Oi.clear(),t})),Oi=Ti.cache,Ti);function Si(t){if("string"==typeof t||Zs(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ii(t){if(null!=t){try{return Tt.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function Ni(t){if(t instanceof kn)return t.clone();var e=new An(t.__wrapped__,t.__chain__);return e.__actions__=pr(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Ci=Ma((function(t,e){return Ps(t)?Qn(t,ra(e,1,Ps,!0)):[]})),Ri=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),Kr(n,2)):[]})),Ai=Ma((function(t,e){var n=ji(e);return Ps(n)&&(n=void 0),Ps(t)?Qn(t,ra(e,1,Ps,!0),void 0,n):[]}));function ki(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),me(t,Kr(e,3),r)}function Ei(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a-1;return void 0!==n&&(r=no(n),r=n<0?rn(a+r,0):sn(r,a-1)),me(t,Kr(e,3),r,!0)}function Li(t){return null!=t&&t.length?ra(t,1):[]}function Di(t){return t&&t.length?t[0]:void 0}var Pi=Ma((function(t){var e=de(t,ar);return e.length&&e[0]===t[0]?ba(e):[]})),Mi=Ma((function(t){var e=ji(t),n=de(t,ar);return e===ji(n)?e=void 0:n.pop(),n.length&&n[0]===t[0]?ba(n,Kr(e,2)):[]})),qi=Ma((function(t){var e=ji(t),n=de(t,ar);return(e="function"==typeof e?e:void 0)&&n.pop(),n.length&&n[0]===t[0]?ba(n,void 0,e):[]}));function ji(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}var Fi=Ma(Gi);function Gi(t,e){return t&&t.length&&e&&e.length?Ea(t,e):t}var Vi=zr((function(t,e){var n=null==t?0:t.length,a=Wn(t,e);return La(t,de(e,(function(t){return ri(t,n)?+t:t})).sort(fr)),a}));function zi(t){return null==t?t:dn.call(t)}var Bi=Ma((function(t){return Za(ra(t,1,Ps,!0))})),Yi=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),Za(ra(t,1,Ps,!0),Kr(e,2))})),Hi=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,Za(ra(t,1,Ps,!0),void 0,e)}));function Ui(t){if(!t||!t.length)return[];var e=0;return t=oe(t,(function(t){if(Ps(t))return e=rn(t.length,e),!0})),Ie(e,(function(e){return de(t,Te(e))}))}function Wi(t,e){if(!t||!t.length)return[];var n=Ui(t);return null==e?n:de(n,(function(t){return ne(e,void 0,t)}))}var Ki=Ma((function(t,e){return Ps(t)?Qn(t,e):[]})),$i=Ma((function(t){return er(oe(t,Ps))})),Zi=Ma((function(t){var e=ji(t);return Ps(e)&&(e=void 0),er(oe(t,Ps),Kr(e,2))})),Ji=Ma((function(t){var e=ji(t);return e="function"==typeof e?e:void 0,er(oe(t,Ps),void 0,e)})),Qi=Ma(Ui),Xi=Ma((function(t){var e=t.length,n=e>1?t[e-1]:void 0;return n="function"==typeof n?(t.pop(),n):void 0,Wi(t,n)}));function ts(t){var e=Nn(t);return e.__chain__=!0,e}function es(t,e){return e(t)}var ns=zr((function(t){var e=t.length,n=e?t[0]:0,a=this.__wrapped__,r=function(e){return Wn(e,t)};return!(e>1||this.__actions__.length)&&a instanceof kn&&ri(n)?((a=a.slice(n,+n+(e?1:0))).__actions__.push({func:es,args:[r],thisArg:void 0}),new An(a,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(r)})),as=mr((function(t,e,n){Ot.call(t,n)?++t[n]:Un(t,n,1)})),rs=wr(ki),is=wr(Ei);function ss(t,e){return(Es(t)?re:Xn)(t,Kr(e,3))}function os(t,e){return(Es(t)?ie:ta)(t,Kr(e,3))}var us=mr((function(t,e,n){Ot.call(t,n)?t[n].push(e):Un(t,n,[e])})),ls=Ma((function(t,e,n){var r=-1,i="function"==typeof e,s=Ds(t)?a(t.length):[];return Xn(t,(function(t){s[++r]=i?ne(e,t,n):ma(t,e,n)})),s})),ds=mr((function(t,e,n){Un(t,n,e)}));function cs(t,e){return(Es(t)?de:Sa)(t,Kr(e,3))}var fs=mr((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]})),hs=Ma((function(t,e){if(null==t)return[];var n=e.length;return n>1&&ii(t,e[0],e[1])?e=[]:n>2&&ii(e[0],e[1],e[2])&&(e=[e[0]]),Aa(t,ra(e,1),[])})),gs=$e||function(){return Yt.Date.now()};function ps(t,e,n){return e=n?void 0:e,qr(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function bs(t,e){var n;if("function"!=typeof e)throw new yt(r);return t=no(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=void 0),n}}var ms=Ma((function(t,e,n){var a=1;if(n.length){var r=Fe(n,Wr(ms));a|=32}return qr(t,a,e,n,r)})),ys=Ma((function(t,e,n){var a=3;if(n.length){var r=Fe(n,Wr(ys));a|=32}return qr(e,a,t,n,r)}));function vs(t,e,n){var a,i,s,o,u,l,d=0,c=!1,f=!1,h=!0;if("function"!=typeof t)throw new yt(r);function g(e){var n=a,r=i;return a=i=void 0,d=e,o=t.apply(r,n)}function p(t){return d=t,u=mi(m,e),c?g(t):o}function b(t){var n=t-l;return void 0===l||n>=e||n<0||f&&t-d>=s}function m(){var t=gs();if(b(t))return y(t);u=mi(m,function(t){var n=e-(t-l);return f?sn(n,s-(t-d)):n}(t))}function y(t){return u=void 0,h&&a?g(t):(a=i=void 0,o)}function v(){var t=gs(),n=b(t);if(a=arguments,i=this,l=t,n){if(void 0===u)return p(l);if(f)return ur(u),u=mi(m,e),g(l)}return void 0===u&&(u=mi(m,e)),o}return e=ro(e)||0,zs(n)&&(c=!!n.leading,s=(f="maxWait"in n)?rn(ro(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h),v.cancel=function(){void 0!==u&&ur(u),d=0,a=l=i=u=void 0},v.flush=function(){return void 0===u?o:y(gs())},v}var xs=Ma((function(t,e){return Jn(t,1,e)})),_s=Ma((function(t,e,n){return Jn(t,ro(e)||0,n)}));function Ts(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new yt(r);var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s)||i,s};return n.cache=new(Ts.Cache||Dn),n}function Os(t){if("function"!=typeof t)throw new yt(r);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ts.Cache=Dn;var ws=sr((function(t,e){var n=(e=1==e.length&&Es(e[0])?de(e[0],Ne(Kr())):de(ra(e,1),Ne(Kr()))).length;return Ma((function(a){for(var r=-1,i=sn(a.length,n);++r<i;)a[r]=e[r].call(this,a[r]);return ne(t,this,a)}))})),Ss=Ma((function(t,e){return qr(t,32,void 0,e,Fe(e,Wr(Ss)))})),Is=Ma((function(t,e){return qr(t,64,void 0,e,Fe(e,Wr(Is)))})),Ns=zr((function(t,e){return qr(t,256,void 0,void 0,void 0,e)}));function Cs(t,e){return t===e||t!=t&&e!=e}var Rs=Er(ha),As=Er((function(t,e){return t>=e})),ks=ya(function(){return arguments}())?ya:function(t){return Bs(t)&&Ot.call(t,"callee")&&!Kt.call(t,"callee")},Es=a.isArray,Ls=Zt?Ne(Zt):function(t){return Bs(t)&&fa(t)==T};function Ds(t){return null!=t&&Vs(t.length)&&!Fs(t)}function Ps(t){return Bs(t)&&Ds(t)}var Ms=tn||iu,qs=Jt?Ne(Jt):function(t){return Bs(t)&&fa(t)==d};function js(t){if(!Bs(t))return!1;var e=fa(t);return e==c||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Us(t)}function Fs(t){if(!zs(t))return!1;var e=fa(t);return e==f||e==h||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Gs(t){return"number"==typeof t&&t==no(t)}function Vs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function zs(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Bs(t){return null!=t&&"object"==typeof t}var Ys=Qt?Ne(Qt):function(t){return Bs(t)&&ti(t)==g};function Hs(t){return"number"==typeof t||Bs(t)&&fa(t)==p}function Us(t){if(!Bs(t)||fa(t)!=b)return!1;var e=Ht(t);if(null===e)return!0;var n=Ot.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Tt.call(n)==Nt}var Ws=Xt?Ne(Xt):function(t){return Bs(t)&&fa(t)==m},Ks=te?Ne(te):function(t){return Bs(t)&&ti(t)==y};function $s(t){return"string"==typeof t||!Es(t)&&Bs(t)&&fa(t)==v}function Zs(t){return"symbol"==typeof t||Bs(t)&&fa(t)==x}var Js=ee?Ne(ee):function(t){return Bs(t)&&Vs(t.length)&&!!qt[fa(t)]},Qs=Er(wa),Xs=Er((function(t,e){return t<=e}));function to(t){if(!t)return[];if(Ds(t))return $s(t)?Be(t):pr(t);if(Oe&&t[Oe])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Oe]());var e=ti(t);return(e==g?qe:e==y?Ge:Ro)(t)}function eo(t){return t?(t=ro(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function no(t){var e=eo(t),n=e%1;return e==e?n?e-n:e:0}function ao(t){return t?Kn(no(t),0,4294967295):0}function ro(t){if("number"==typeof t)return t;if(Zs(t))return NaN;if(zs(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=zs(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(W,"");var n=rt.test(t);return n||st.test(t)?Vt(t.slice(2),n?2:8):at.test(t)?NaN:+t}function io(t){return br(t,_o(t))}function so(t){return null==t?"":$a(t)}var oo=yr((function(t,e){if(li(e)||Ds(e))br(e,xo(e),t);else for(var n in e)Ot.call(e,n)&&zn(t,n,e[n])})),uo=yr((function(t,e){br(e,_o(e),t)})),lo=yr((function(t,e,n,a){br(e,_o(e),t,a)})),co=yr((function(t,e,n,a){br(e,xo(e),t,a)})),fo=zr(Wn),ho=Ma((function(t,e){t=pt(t);var n=-1,a=e.length,r=a>2?e[2]:void 0;for(r&&ii(e[0],e[1],r)&&(a=1);++n<a;)for(var i=e[n],s=_o(i),o=-1,u=s.length;++o<u;){var l=s[o],d=t[l];(void 0===d||Cs(d,xt[l])&&!Ot.call(t,l))&&(t[l]=i[l])}return t})),go=Ma((function(t){return t.push(void 0,Fr),ne(Oo,void 0,t)}));function po(t,e,n){var a=null==t?void 0:da(t,e);return void 0===a?n:a}function bo(t,e){return null!=t&&ei(t,e,pa)}var mo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),t[e]=n}),Bo(Uo)),yo=Nr((function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=It.call(e)),Ot.call(t,e)?t[e].push(n):t[e]=[n]}),Kr),vo=Ma(ma);function xo(t){return Ds(t)?qn(t):Oa(t)}function _o(t){return Ds(t)?qn(t,!0):function(t){if(!zs(t))return function(t){var e=[];if(null!=t)for(var n in pt(t))e.push(n);return e}(t);var e=li(t),n=[];for(var a in t)("constructor"!=a||!e&&Ot.call(t,a))&&n.push(a);return n}(t)}var To=yr((function(t,e,n){Ca(t,e,n)})),Oo=yr((function(t,e,n,a){Ca(t,e,n,a)})),wo=zr((function(t,e){var n={};if(null==t)return n;var a=!1;e=de(e,(function(e){return e=ir(e,t),a||(a=e.length>1),e})),br(t,Yr(t),n),a&&(n=$n(n,7,Gr));for(var r=e.length;r--;)Ja(n,e[r]);return n})),So=zr((function(t,e){return null==t?{}:function(t,e){return ka(t,e,(function(e,n){return bo(t,n)}))}(t,e)}));function Io(t,e){if(null==t)return{};var n=de(Yr(t),(function(t){return[t]}));return e=Kr(e),ka(t,n,(function(t,n){return e(t,n[0])}))}var No=Mr(xo),Co=Mr(_o);function Ro(t){return null==t?[]:Ce(t,xo(t))}var Ao=Tr((function(t,e,n){return e=e.toLowerCase(),t+(n?ko(e):e)}));function ko(t){return Fo(so(t).toLowerCase())}function Eo(t){return(t=so(t))&&t.replace(ut,Le).replace(At,"")}var Lo=Tr((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Do=Tr((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Po=_r("toLowerCase"),Mo=Tr((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()})),qo=Tr((function(t,e,n){return t+(n?" ":"")+Fo(e)})),jo=Tr((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Fo=_r("toUpperCase");function Go(t,e,n){return t=so(t),void 0===(e=n?void 0:e)?function(t){return Dt.test(t)}(t)?function(t){return t.match(Et)||[]}(t):function(t){return t.match(X)||[]}(t):t.match(e)||[]}var Vo=Ma((function(t,e){try{return ne(t,void 0,e)}catch(n){return js(n)?n:new ft(n)}})),zo=zr((function(t,e){return re(e,(function(e){e=Si(e),Un(t,e,ms(t[e],t))})),t}));function Bo(t){return function(){return t}}var Yo=Sr(),Ho=Sr(!0);function Uo(t){return t}function Wo(t){return Ta("function"==typeof t?t:$n(t,1))}var Ko=Ma((function(t,e){return function(n){return ma(n,t,e)}})),$o=Ma((function(t,e){return function(n){return ma(t,n,e)}}));function Zo(t,e,n){var a=xo(e),r=la(e,a);null!=n||zs(e)&&(r.length||!a.length)||(n=e,e=t,t=this,r=la(e,xo(e)));var i=!(zs(n)&&"chain"in n&&!n.chain),s=Fs(t);return re(r,(function(n){var a=e[n];t[n]=a,s&&(t.prototype[n]=function(){var e=this.__chain__;if(i||e){var n=t(this.__wrapped__),r=n.__actions__=pr(this.__actions__);return r.push({func:a,args:arguments,thisArg:t}),n.__chain__=e,n}return a.apply(t,ce([this.value()],arguments))})})),t}function Jo(){}var Qo=Rr(de),Xo=Rr(se),tu=Rr(ge);function eu(t){return si(t)?Te(Si(t)):function(t){return function(e){return da(e,t)}}(t)}var nu=kr(),au=kr(!0);function ru(){return[]}function iu(){return!1}var su,ou=Cr((function(t,e){return t+e}),0),uu=Dr("ceil"),lu=Cr((function(t,e){return t/e}),1),du=Dr("floor"),cu=Cr((function(t,e){return t*e}),1),fu=Dr("round"),hu=Cr((function(t,e){return t-e}),0);return Nn.after=function(t,e){if("function"!=typeof e)throw new yt(r);return t=no(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=ps,Nn.assign=oo,Nn.assignIn=uo,Nn.assignInWith=lo,Nn.assignWith=co,Nn.at=fo,Nn.before=bs,Nn.bind=ms,Nn.bindAll=zo,Nn.bindKey=ys,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Es(t)?t:[t]},Nn.chain=ts,Nn.chunk=function(t,e,n){e=(n?ii(t,e,n):void 0===e)?1:rn(no(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,s=0,o=a(Je(r/e));i<r;)o[s++]=Ba(t,i,i+=e);return o},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,a=0,r=[];++e<n;){var i=t[e];i&&(r[a++]=i)}return r},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=a(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ce(Es(n)?pr(n):[n],ra(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=Kr();return t=e?de(t,(function(t){if("function"!=typeof t[1])throw new yt(r);return[n(t[0]),t[1]]})):[],Ma((function(n){for(var a=-1;++a<e;){var r=t[a];if(ne(r[0],this,n))return ne(r[1],this,n)}}))},Nn.conforms=function(t){return function(t){var e=xo(t);return function(n){return Zn(n,t,e)}}($n(t,1))},Nn.constant=Bo,Nn.countBy=as,Nn.create=function(t,e){var n=Cn(t);return null==e?n:Hn(n,e)},Nn.curry=function t(e,n,a){var r=qr(e,8,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.curryRight=function t(e,n,a){var r=qr(e,16,void 0,void 0,void 0,void 0,void 0,n=a?void 0:n);return r.placeholder=t.placeholder,r},Nn.debounce=vs,Nn.defaults=ho,Nn.defaultsDeep=go,Nn.defer=xs,Nn.delay=_s,Nn.difference=Ci,Nn.differenceBy=Ri,Nn.differenceWith=Ai,Nn.drop=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=n||void 0===e?1:no(e))<0?0:e,a):[]},Nn.dropRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,0,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!0):[]},Nn.fill=function(t,e,n,a){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&ii(t,e,n)&&(n=0,a=r),function(t,e,n,a){var r=t.length;for((n=no(n))<0&&(n=-n>r?0:r+n),(a=void 0===a||a>r?r:no(a))<0&&(a+=r),a=n>a?0:ao(a);n<a;)t[n++]=e;return t}(t,e,n,a)):[]},Nn.filter=function(t,e){return(Es(t)?oe:aa)(t,Kr(e,3))},Nn.flatMap=function(t,e){return ra(cs(t,e),1)},Nn.flatMapDeep=function(t,e){return ra(cs(t,e),1/0)},Nn.flatMapDepth=function(t,e,n){return n=void 0===n?1:no(n),ra(cs(t,e),n)},Nn.flatten=Li,Nn.flattenDeep=function(t){return null!=t&&t.length?ra(t,1/0):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?ra(t,e=void 0===e?1:no(e)):[]},Nn.flip=function(t){return qr(t,512)},Nn.flow=Yo,Nn.flowRight=Ho,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,a={};++e<n;){var r=t[e];a[r[0]]=r[1]}return a},Nn.functions=function(t){return null==t?[]:la(t,xo(t))},Nn.functionsIn=function(t){return null==t?[]:la(t,_o(t))},Nn.groupBy=us,Nn.initial=function(t){return null!=t&&t.length?Ba(t,0,-1):[]},Nn.intersection=Pi,Nn.intersectionBy=Mi,Nn.intersectionWith=qi,Nn.invert=mo,Nn.invertBy=yo,Nn.invokeMap=ls,Nn.iteratee=Wo,Nn.keyBy=ds,Nn.keys=xo,Nn.keysIn=_o,Nn.map=cs,Nn.mapKeys=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,e(t,a,r),t)})),n},Nn.mapValues=function(t,e){var n={};return e=Kr(e,3),oa(t,(function(t,a,r){Un(n,a,e(t,a,r))})),n},Nn.matches=function(t){return Ia($n(t,1))},Nn.matchesProperty=function(t,e){return Na(t,$n(e,1))},Nn.memoize=Ts,Nn.merge=To,Nn.mergeWith=Oo,Nn.method=Ko,Nn.methodOf=$o,Nn.mixin=Zo,Nn.negate=Os,Nn.nthArg=function(t){return t=no(t),Ma((function(e){return Ra(e,t)}))},Nn.omit=wo,Nn.omitBy=function(t,e){return Io(t,Os(Kr(e)))},Nn.once=function(t){return bs(2,t)},Nn.orderBy=function(t,e,n,a){return null==t?[]:(Es(e)||(e=null==e?[]:[e]),Es(n=a?void 0:n)||(n=null==n?[]:[n]),Aa(t,e,n))},Nn.over=Qo,Nn.overArgs=ws,Nn.overEvery=Xo,Nn.overSome=tu,Nn.partial=Ss,Nn.partialRight=Is,Nn.partition=fs,Nn.pick=So,Nn.pickBy=Io,Nn.property=eu,Nn.propertyOf=function(t){return function(e){return null==t?void 0:da(t,e)}},Nn.pull=Fi,Nn.pullAll=Gi,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,Kr(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Ea(t,e,void 0,n):t},Nn.pullAt=Vi,Nn.range=nu,Nn.rangeRight=au,Nn.rearg=Ns,Nn.reject=function(t,e){return(Es(t)?oe:aa)(t,Os(Kr(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var a=-1,r=[],i=t.length;for(e=Kr(e,3);++a<i;){var s=t[a];e(s,a,t)&&(n.push(s),r.push(a))}return La(t,r),n},Nn.rest=function(t,e){if("function"!=typeof t)throw new yt(r);return Ma(t,e=void 0===e?e:no(e))},Nn.reverse=zi,Nn.sampleSize=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),(Es(t)?Fn:ja)(t,e)},Nn.set=function(t,e,n){return null==t?t:Fa(t,e,n)},Nn.setWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Fa(t,e,n,a)},Nn.shuffle=function(t){return(Es(t)?Gn:za)(t)},Nn.slice=function(t,e,n){var a=null==t?0:t.length;return a?(n&&"number"!=typeof n&&ii(t,e,n)?(e=0,n=a):(e=null==e?0:no(e),n=void 0===n?a:no(n)),Ba(t,e,n)):[]},Nn.sortBy=hs,Nn.sortedUniq=function(t){return t&&t.length?Wa(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?Wa(t,Kr(e,2)):[]},Nn.split=function(t,e,n){return n&&"number"!=typeof n&&ii(t,e,n)&&(e=n=void 0),(n=void 0===n?4294967295:n>>>0)?(t=so(t))&&("string"==typeof e||null!=e&&!Ws(e))&&!(e=$a(e))&&Me(t)?or(Be(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if("function"!=typeof t)throw new yt(r);return e=null==e?0:rn(no(e),0),Ma((function(n){var a=n[e],r=or(n,0,e);return a&&ce(r,a),ne(t,this,r)}))},Nn.tail=function(t){var e=null==t?0:t.length;return e?Ba(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?Ba(t,0,(e=n||void 0===e?1:no(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var a=null==t?0:t.length;return a?Ba(t,(e=a-(e=n||void 0===e?1:no(e)))<0?0:e,a):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?Xa(t,Kr(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var a=!0,i=!0;if("function"!=typeof t)throw new yt(r);return zs(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),vs(t,e,{leading:a,maxWait:e,trailing:i})},Nn.thru=es,Nn.toArray=to,Nn.toPairs=No,Nn.toPairsIn=Co,Nn.toPath=function(t){return Es(t)?de(t,Si):Zs(t)?[t]:pr(wi(so(t)))},Nn.toPlainObject=io,Nn.transform=function(t,e,n){var a=Es(t),r=a||Ms(t)||Js(t);if(e=Kr(e,4),null==n){var i=t&&t.constructor;n=r?a?new i:[]:zs(t)&&Fs(i)?Cn(Ht(t)):{}}return(r?re:oa)(t,(function(t,a,r){return e(n,t,a,r)})),n},Nn.unary=function(t){return ps(t,1)},Nn.union=Bi,Nn.unionBy=Yi,Nn.unionWith=Hi,Nn.uniq=function(t){return t&&t.length?Za(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?Za(t,Kr(e,2)):[]},Nn.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Za(t,void 0,e):[]},Nn.unset=function(t,e){return null==t||Ja(t,e)},Nn.unzip=Ui,Nn.unzipWith=Wi,Nn.update=function(t,e,n){return null==t?t:Qa(t,e,rr(n))},Nn.updateWith=function(t,e,n,a){return a="function"==typeof a?a:void 0,null==t?t:Qa(t,e,rr(n),a)},Nn.values=Ro,Nn.valuesIn=function(t){return null==t?[]:Ce(t,_o(t))},Nn.without=Ki,Nn.words=Go,Nn.wrap=function(t,e){return Ss(rr(e),t)},Nn.xor=$i,Nn.xorBy=Zi,Nn.xorWith=Ji,Nn.zip=Qi,Nn.zipObject=function(t,e){return nr(t||[],e||[],zn)},Nn.zipObjectDeep=function(t,e){return nr(t||[],e||[],Fa)},Nn.zipWith=Xi,Nn.entries=No,Nn.entriesIn=Co,Nn.extend=uo,Nn.extendWith=lo,Zo(Nn,Nn),Nn.add=ou,Nn.attempt=Vo,Nn.camelCase=Ao,Nn.capitalize=ko,Nn.ceil=uu,Nn.clamp=function(t,e,n){return void 0===n&&(n=e,e=void 0),void 0!==n&&(n=(n=ro(n))==n?n:0),void 0!==e&&(e=(e=ro(e))==e?e:0),Kn(ro(t),e,n)},Nn.clone=function(t){return $n(t,4)},Nn.cloneDeep=function(t){return $n(t,5)},Nn.cloneDeepWith=function(t,e){return $n(t,5,e="function"==typeof e?e:void 0)},Nn.cloneWith=function(t,e){return $n(t,4,e="function"==typeof e?e:void 0)},Nn.conformsTo=function(t,e){return null==e||Zn(t,e,xo(e))},Nn.deburr=Eo,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=lu,Nn.endsWith=function(t,e,n){t=so(t),e=$a(e);var a=t.length,r=n=void 0===n?a:Kn(no(n),0,a);return(n-=e.length)>=0&&t.slice(n,r)==e},Nn.eq=Cs,Nn.escape=function(t){return(t=so(t))&&j.test(t)?t.replace(M,De):t},Nn.escapeRegExp=function(t){return(t=so(t))&&U.test(t)?t.replace(H,"\\$&"):t},Nn.every=function(t,e,n){var a=Es(t)?se:ea;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.find=rs,Nn.findIndex=ki,Nn.findKey=function(t,e){return be(t,Kr(e,3),oa)},Nn.findLast=is,Nn.findLastIndex=Ei,Nn.findLastKey=function(t,e){return be(t,Kr(e,3),ua)},Nn.floor=du,Nn.forEach=ss,Nn.forEachRight=os,Nn.forIn=function(t,e){return null==t?t:ia(t,Kr(e,3),_o)},Nn.forInRight=function(t,e){return null==t?t:sa(t,Kr(e,3),_o)},Nn.forOwn=function(t,e){return t&&oa(t,Kr(e,3))},Nn.forOwnRight=function(t,e){return t&&ua(t,Kr(e,3))},Nn.get=po,Nn.gt=Rs,Nn.gte=As,Nn.has=function(t,e){return null!=t&&ei(t,e,ga)},Nn.hasIn=bo,Nn.head=Di,Nn.identity=Uo,Nn.includes=function(t,e,n,a){t=Ds(t)?t:Ro(t),n=n&&!a?no(n):0;var r=t.length;return n<0&&(n=rn(r+n,0)),$s(t)?n<=r&&t.indexOf(e,n)>-1:!!r&&ye(t,e,n)>-1},Nn.indexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=null==n?0:no(n);return r<0&&(r=rn(a+r,0)),ye(t,e,r)},Nn.inRange=function(t,e,n){return e=eo(e),void 0===n?(n=e,e=0):n=eo(n),function(t,e,n){return t>=sn(e,n)&&t<rn(e,n)}(t=ro(t),e,n)},Nn.invoke=vo,Nn.isArguments=ks,Nn.isArray=Es,Nn.isArrayBuffer=Ls,Nn.isArrayLike=Ds,Nn.isArrayLikeObject=Ps,Nn.isBoolean=function(t){return!0===t||!1===t||Bs(t)&&fa(t)==l},Nn.isBuffer=Ms,Nn.isDate=qs,Nn.isElement=function(t){return Bs(t)&&1===t.nodeType&&!Us(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Ds(t)&&(Es(t)||"string"==typeof t||"function"==typeof t.splice||Ms(t)||Js(t)||ks(t)))return!t.length;var e=ti(t);if(e==g||e==y)return!t.size;if(li(t))return!Oa(t).length;for(var n in t)if(Ot.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return va(t,e)},Nn.isEqualWith=function(t,e,n){var a=(n="function"==typeof n?n:void 0)?n(t,e):void 0;return void 0===a?va(t,e,void 0,n):!!a},Nn.isError=js,Nn.isFinite=function(t){return"number"==typeof t&&en(t)},Nn.isFunction=Fs,Nn.isInteger=Gs,Nn.isLength=Vs,Nn.isMap=Ys,Nn.isMatch=function(t,e){return t===e||xa(t,e,Zr(e))},Nn.isMatchWith=function(t,e,n){return n="function"==typeof n?n:void 0,xa(t,e,Zr(e),n)},Nn.isNaN=function(t){return Hs(t)&&t!=+t},Nn.isNative=function(t){if(ui(t))throw new ft("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return _a(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=Hs,Nn.isObject=zs,Nn.isObjectLike=Bs,Nn.isPlainObject=Us,Nn.isRegExp=Ws,Nn.isSafeInteger=function(t){return Gs(t)&&t>=-9007199254740991&&t<=9007199254740991},Nn.isSet=Ks,Nn.isString=$s,Nn.isSymbol=Zs,Nn.isTypedArray=Js,Nn.isUndefined=function(t){return void 0===t},Nn.isWeakMap=function(t){return Bs(t)&&ti(t)==_},Nn.isWeakSet=function(t){return Bs(t)&&"[object WeakSet]"==fa(t)},Nn.join=function(t,e){return null==t?"":nn.call(t,e)},Nn.kebabCase=Lo,Nn.last=ji,Nn.lastIndexOf=function(t,e,n){var a=null==t?0:t.length;if(!a)return-1;var r=a;return void 0!==n&&(r=(r=no(n))<0?rn(a+r,0):sn(r,a-1)),e==e?function(t,e,n){for(var a=n+1;a--;)if(t[a]===e)return a;return a}(t,e,r):me(t,xe,r,!0)},Nn.lowerCase=Do,Nn.lowerFirst=Po,Nn.lt=Qs,Nn.lte=Xs,Nn.max=function(t){return t&&t.length?na(t,Uo,ha):void 0},Nn.maxBy=function(t,e){return t&&t.length?na(t,Kr(e,2),ha):void 0},Nn.mean=function(t){return _e(t,Uo)},Nn.meanBy=function(t,e){return _e(t,Kr(e,2))},Nn.min=function(t){return t&&t.length?na(t,Uo,wa):void 0},Nn.minBy=function(t,e){return t&&t.length?na(t,Kr(e,2),wa):void 0},Nn.stubArray=ru,Nn.stubFalse=iu,Nn.stubObject=function(){return{}},Nn.stubString=function(){return""},Nn.stubTrue=function(){return!0},Nn.multiply=cu,Nn.nth=function(t,e){return t&&t.length?Ra(t,no(e)):void 0},Nn.noConflict=function(){return Yt._===this&&(Yt._=Ct),this},Nn.noop=Jo,Nn.now=gs,Nn.pad=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;if(!e||a>=e)return t;var r=(e-a)/2;return Ar(Qe(r),n)+t+Ar(Je(r),n)},Nn.padEnd=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?t+Ar(e-a,n):t},Nn.padStart=function(t,e,n){t=so(t);var a=(e=no(e))?ze(t):0;return e&&a<e?Ar(e-a,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),un(so(t).replace(K,""),e||0)},Nn.random=function(t,e,n){if(n&&"boolean"!=typeof n&&ii(t,e,n)&&(e=n=void 0),void 0===n&&("boolean"==typeof e?(n=e,e=void 0):"boolean"==typeof t&&(n=t,t=void 0)),void 0===t&&void 0===e?(t=0,e=1):(t=eo(t),void 0===e?(e=t,t=0):e=eo(e)),t>e){var a=t;t=e,e=a}if(n||t%1||e%1){var r=ln();return sn(t+r*(e-t+Gt("1e-"+((r+"").length-1))),e)}return Da(t,e)},Nn.reduce=function(t,e,n){var a=Es(t)?fe:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,Xn)},Nn.reduceRight=function(t,e,n){var a=Es(t)?he:we,r=arguments.length<3;return a(t,Kr(e,4),n,r,ta)},Nn.repeat=function(t,e,n){return e=(n?ii(t,e,n):void 0===e)?1:no(e),Pa(so(t),e)},Nn.replace=function(){var t=arguments,e=so(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var a=-1,r=(e=ir(e,t)).length;for(r||(r=1,t=void 0);++a<r;){var i=null==t?void 0:t[Si(e[a])];void 0===i&&(a=r,i=n),t=Fs(i)?i.call(t):i}return t},Nn.round=fu,Nn.runInContext=t,Nn.sample=function(t){return(Es(t)?jn:qa)(t)},Nn.size=function(t){if(null==t)return 0;if(Ds(t))return $s(t)?ze(t):t.length;var e=ti(t);return e==g||e==y?t.size:Oa(t).length},Nn.snakeCase=Mo,Nn.some=function(t,e,n){var a=Es(t)?ge:Ya;return n&&ii(t,e,n)&&(e=void 0),a(t,Kr(e,3))},Nn.sortedIndex=function(t,e){return Ha(t,e)},Nn.sortedIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var a=Ha(t,e);if(a<n&&Cs(t[a],e))return a}return-1},Nn.sortedLastIndex=function(t,e){return Ha(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return Ua(t,e,Kr(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=Ha(t,e,!0)-1;if(Cs(t[n],e))return n}return-1},Nn.startCase=qo,Nn.startsWith=function(t,e,n){return t=so(t),n=null==n?0:Kn(no(n),0,t.length),e=$a(e),t.slice(n,n+e.length)==e},Nn.subtract=hu,Nn.sum=function(t){return t&&t.length?Se(t,Uo):0},Nn.sumBy=function(t,e){return t&&t.length?Se(t,Kr(e,2)):0},Nn.template=function(t,e,n){var a=Nn.templateSettings;n&&ii(t,e,n)&&(e=void 0),t=so(t),e=lo({},e,a,jr);var r,i,s=lo({},e.imports,a.imports,jr),o=xo(s),u=Ce(s,o),l=0,d=e.interpolate||lt,c="__p += '",f=bt((e.escape||lt).source+"|"+d.source+"|"+(d===V?et:lt).source+"|"+(e.evaluate||lt).source+"|$","g"),h="//# sourceURL="+(Ot.call(e,"sourceURL")?(e.sourceURL+"").replace(/[\r\n]/g," "):"lodash.templateSources["+ ++Mt+"]")+"\n";t.replace(f,(function(e,n,a,s,o,u){return a||(a=s),c+=t.slice(l,u).replace(dt,Pe),n&&(r=!0,c+="' +\n__e("+n+") +\n'"),o&&(i=!0,c+="';\n"+o+";\n__p += '"),a&&(c+="' +\n((__t = ("+a+")) == null ? '' : __t) +\n'"),l=u+e.length,e})),c+="';\n";var g=Ot.call(e,"variable")&&e.variable;g||(c="with (obj) {\n"+c+"\n}\n"),c=(i?c.replace(E,""):c).replace(L,"$1").replace(D,"$1;"),c="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(r?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+c+"return __p\n}";var p=Vo((function(){return ht(o,h+"return "+c).apply(void 0,u)}));if(p.source=c,js(p))throw p;return p},Nn.times=function(t,e){if((t=no(t))<1||t>9007199254740991)return[];var n=4294967295,a=sn(t,4294967295);t-=4294967295;for(var r=Ie(a,e=Kr(e));++n<t;)e(n);return r},Nn.toFinite=eo,Nn.toInteger=no,Nn.toLength=ao,Nn.toLower=function(t){return so(t).toLowerCase()},Nn.toNumber=ro,Nn.toSafeInteger=function(t){return t?Kn(no(t),-9007199254740991,9007199254740991):0===t?t:0},Nn.toString=so,Nn.toUpper=function(t){return so(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(W,"");if(!t||!(e=$a(e)))return t;var a=Be(t),r=Be(e);return or(a,Ae(a,r),ke(a,r)+1).join("")},Nn.trimEnd=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace($,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,0,ke(a,Be(e))+1).join("")},Nn.trimStart=function(t,e,n){if((t=so(t))&&(n||void 0===e))return t.replace(K,"");if(!t||!(e=$a(e)))return t;var a=Be(t);return or(a,Ae(a,Be(e))).join("")},Nn.truncate=function(t,e){var n=30,a="...";if(zs(e)){var r="separator"in e?e.separator:r;n="length"in e?no(e.length):n,a="omission"in e?$a(e.omission):a}var i=(t=so(t)).length;if(Me(t)){var s=Be(t);i=s.length}if(n>=i)return t;var o=n-ze(a);if(o<1)return a;var u=s?or(s,0,o).join(""):t.slice(0,o);if(void 0===r)return u+a;if(s&&(o+=u.length-o),Ws(r)){if(t.slice(o).search(r)){var l,d=u;for(r.global||(r=bt(r.source,so(nt.exec(r))+"g")),r.lastIndex=0;l=r.exec(d);)var c=l.index;u=u.slice(0,void 0===c?o:c)}}else if(t.indexOf($a(r),o)!=o){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+a},Nn.unescape=function(t){return(t=so(t))&&q.test(t)?t.replace(P,Ye):t},Nn.uniqueId=function(t){var e=++wt;return so(t)+e},Nn.upperCase=jo,Nn.upperFirst=Fo,Nn.each=ss,Nn.eachRight=os,Nn.first=Di,Zo(Nn,(su={},oa(Nn,(function(t,e){Ot.call(Nn.prototype,e)||(su[e]=t)})),su),{chain:!1}),Nn.VERSION="4.17.15",re(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Nn[t].placeholder=Nn})),re(["drop","take"],(function(t,e){kn.prototype[t]=function(n){n=void 0===n?1:rn(no(n),0);var a=this.__filtered__&&!e?new kn(this):this.clone();return a.__filtered__?a.__takeCount__=sn(n,a.__takeCount__):a.__views__.push({size:sn(n,4294967295),type:t+(a.__dir__<0?"Right":"")}),a},kn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),re(["filter","map","takeWhile"],(function(t,e){var n=e+1,a=1==n||3==n;kn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Kr(t,3),type:n}),e.__filtered__=e.__filtered__||a,e}})),re(["head","last"],(function(t,e){var n="take"+(e?"Right":"");kn.prototype[t]=function(){return this[n](1).value()[0]}})),re(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");kn.prototype[t]=function(){return this.__filtered__?new kn(this):this[n](1)}})),kn.prototype.compact=function(){return this.filter(Uo)},kn.prototype.find=function(t){return this.filter(t).head()},kn.prototype.findLast=function(t){return this.reverse().find(t)},kn.prototype.invokeMap=Ma((function(t,e){return"function"==typeof t?new kn(this):this.map((function(n){return ma(n,t,e)}))})),kn.prototype.reject=function(t){return this.filter(Os(Kr(t)))},kn.prototype.slice=function(t,e){t=no(t);var n=this;return n.__filtered__&&(t>0||e<0)?new kn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),void 0!==e&&(n=(e=no(e))<0?n.dropRight(-e):n.take(e-t)),n)},kn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},kn.prototype.toArray=function(){return this.take(4294967295)},oa(kn.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),a=/^(?:head|last)$/.test(e),r=Nn[a?"take"+("last"==e?"Right":""):e],i=a||/^find/.test(e);r&&(Nn.prototype[e]=function(){var e=this.__wrapped__,s=a?[1]:arguments,o=e instanceof kn,u=s[0],l=o||Es(e),d=function(t){var e=r.apply(Nn,ce([t],s));return a&&c?e[0]:e};l&&n&&"function"==typeof u&&1!=u.length&&(o=l=!1);var c=this.__chain__,f=!!this.__actions__.length,h=i&&!c,g=o&&!f;if(!i&&l){e=g?e:new kn(this);var p=t.apply(e,s);return p.__actions__.push({func:es,args:[d],thisArg:void 0}),new An(p,c)}return h&&g?t.apply(this,s):(p=this.thru(d),h?a?p.value()[0]:p.value():p)})})),re(["pop","push","shift","sort","splice","unshift"],(function(t){var e=vt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",a=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(a&&!this.__chain__){var r=this.value();return e.apply(Es(r)?r:[],t)}return this[n]((function(n){return e.apply(Es(n)?n:[],t)}))}})),oa(kn.prototype,(function(t,e){var n=Nn[e];if(n){var a=n.name+"";Ot.call(yn,a)||(yn[a]=[]),yn[a].push({name:e,func:n})}})),yn[Ir(void 0,2).name]=[{name:"wrapper",func:void 0}],kn.prototype.clone=function(){var t=new kn(this.__wrapped__);return t.__actions__=pr(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=pr(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=pr(this.__views__),t},kn.prototype.reverse=function(){if(this.__filtered__){var t=new kn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},kn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Es(t),a=e<0,r=n?t.length:0,i=function(t,e,n){for(var a=-1,r=n.length;++a<r;){var i=n[a],s=i.size;switch(i.type){case"drop":t+=s;break;case"dropRight":e-=s;break;case"take":e=sn(e,t+s);break;case"takeRight":t=rn(t,e-s)}}return{start:t,end:e}}(0,r,this.__views__),s=i.start,o=i.end,u=o-s,l=a?o:s-1,d=this.__iteratees__,c=d.length,f=0,h=sn(u,this.__takeCount__);if(!n||!a&&r==u&&h==u)return tr(t,this.__actions__);var g=[];t:for(;u--&&f<h;){for(var p=-1,b=t[l+=e];++p<c;){var m=d[p],y=m.type,v=(0,m.iteratee)(b);if(2==y)b=v;else if(!v){if(1==y)continue t;break t}}g[f++]=b}return g},Nn.prototype.at=ns,Nn.prototype.chain=function(){return ts(this)},Nn.prototype.commit=function(){return new An(this.value(),this.__chain__)},Nn.prototype.next=function(){void 0===this.__values__&&(this.__values__=to(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof Rn;){var a=Ni(n);a.__index__=0,a.__values__=void 0,e?r.__wrapped__=a:e=a;var r=a;n=n.__wrapped__}return r.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof kn){var e=t;return this.__actions__.length&&(e=new kn(this)),(e=e.reverse()).__actions__.push({func:es,args:[zi],thisArg:void 0}),new An(e,this.__chain__)}return this.thru(zi)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return tr(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Oe&&(Nn.prototype[Oe]=function(){return this}),Nn}();Yt._=He,void 0===(a=(function(){return He}).call(e,n,e,t))||(t.exports=a)}).call(this)}).call(this,n("YuTi")(t))},MJIl:function(t,e,n){var a=n("QoRX"),r=n("ut/Y"),i=n("Nh2a"),s=n("Z0cm"),o=n("mv/X");t.exports=function(t,e,n){var u=s(t)?a:i;return n&&o(t,e,n)&&(e=void 0),u(t,r(e,3))}},MMmD:function(t,e,n){var a=n("lSCD"),r=n("shjB");t.exports=function(t){return null!=t&&r(t.length)&&!a(t)}},"MO+k":function(t,e,n){t.exports=function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={rgb2hsl:n,rgb2hsv:a,rgb2hwb:i,rgb2cmyk:s,rgb2keyword:o,rgb2xyz:u,rgb2lab:l,rgb2lch:function(t){return v(l(t))},hsl2rgb:d,hsl2hsv:function(t){var e=t[1]/100,n=t[2]/100;return 0===n?[0,0,0]:[t[0],2*(e*=(n*=2)<=1?n:2-n)/(n+e)*100,(n+e)/2*100]},hsl2hwb:function(t){return i(d(t))},hsl2cmyk:function(t){return s(d(t))},hsl2keyword:function(t){return o(d(t))},hsv2rgb:c,hsv2hsl:function(t){var e,n,a=t[1]/100,r=t[2]/100;return e=a*r,[t[0],100*(e=(e/=(n=(2-a)*r)<=1?n:2-n)||0),100*(n/=2)]},hsv2hwb:function(t){return i(c(t))},hsv2cmyk:function(t){return s(c(t))},hsv2keyword:function(t){return o(c(t))},hwb2rgb:f,hwb2hsl:function(t){return n(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return s(f(t))},hwb2keyword:function(t){return o(f(t))},cmyk2rgb:h,cmyk2hsl:function(t){return n(h(t))},cmyk2hsv:function(t){return a(h(t))},cmyk2hwb:function(t){return i(h(t))},cmyk2keyword:function(t){return o(h(t))},keyword2rgb:T,keyword2hsl:function(t){return n(T(t))},keyword2hsv:function(t){return a(T(t))},keyword2hwb:function(t){return i(T(t))},keyword2cmyk:function(t){return s(T(t))},keyword2lab:function(t){return l(T(t))},keyword2xyz:function(t){return u(T(t))},xyz2rgb:p,xyz2lab:m,xyz2lch:function(t){return v(m(t))},lab2xyz:y,lab2rgb:x,lab2lch:v,lch2lab:_,lch2xyz:function(t){return y(_(t))},lch2rgb:function(t){return x(_(t))}};function n(t){var e,n,a=t[0]/255,r=t[1]/255,i=t[2]/255,s=Math.min(a,r,i),o=Math.max(a,r,i),u=o-s;return o==s?e=0:a==o?e=(r-i)/u:r==o?e=2+(i-a)/u:i==o&&(e=4+(a-r)/u),(e=Math.min(60*e,360))<0&&(e+=360),n=(s+o)/2,[e,100*(o==s?0:n<=.5?u/(o+s):u/(2-o-s)),100*n]}function a(t){var e,n,a=t[0],r=t[1],i=t[2],s=Math.min(a,r,i),o=Math.max(a,r,i),u=o-s;return n=0==o?0:u/o*1e3/10,o==s?e=0:a==o?e=(r-i)/u:r==o?e=2+(i-a)/u:i==o&&(e=4+(a-r)/u),(e=Math.min(60*e,360))<0&&(e+=360),[e,n,o/255*1e3/10]}function i(t){var e=t[0],a=t[1],r=t[2];return[n(t)[0],1/255*Math.min(e,Math.min(a,r))*100,100*(r=1-1/255*Math.max(e,Math.max(a,r)))]}function s(t){var e,n=t[0]/255,a=t[1]/255,r=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-a,1-r)))/(1-e)||0),100*((1-a-e)/(1-e)||0),100*((1-r-e)/(1-e)||0),100*e]}function o(t){return w[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(a=a>.04045?Math.pow((a+.055)/1.055,2.4):a/12.92)),100*(.2126*e+.7152*n+.0722*a),100*(.0193*e+.1192*n+.9505*a)]}function l(t){var e=u(t),n=e[0],a=e[1],r=e[2];return a/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(n-a),200*(a-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]}function d(t){var e,n,a,r,i,s=t[0]/360,o=t[1]/100,u=t[2]/100;if(0==o)return[i=255*u,i,i];e=2*u-(n=u<.5?u*(1+o):u+o-u*o),r=[0,0,0];for(var l=0;l<3;l++)(a=s+1/3*-(l-1))<0&&a++,a>1&&a--,r[l]=255*(i=6*a<1?e+6*(n-e)*a:2*a<1?n:3*a<2?e+(n-e)*(2/3-a)*6:e);return r}function c(t){var e=t[0]/60,n=t[1]/100,a=t[2]/100,r=Math.floor(e)%6,i=e-Math.floor(e),s=255*a*(1-n),o=255*a*(1-n*i),u=255*a*(1-n*(1-i));switch(a*=255,r){case 0:return[a,u,s];case 1:return[o,a,s];case 2:return[s,a,u];case 3:return[s,o,a];case 4:return[u,s,a];case 5:return[a,s,o]}}function f(t){var e,n,a,i,s=t[0]/360,o=t[1]/100,u=t[2]/100,l=o+u;switch(l>1&&(o/=l,u/=l),a=6*s-(e=Math.floor(6*s)),0!=(1&e)&&(a=1-a),i=o+a*((n=1-u)-o),e){default:case 6:case 0:r=n,g=i,b=o;break;case 1:r=i,g=n,b=o;break;case 2:r=o,g=n,b=i;break;case 3:r=o,g=i,b=n;break;case 4:r=i,g=o,b=n;break;case 5:r=n,g=o,b=i}return[255*r,255*g,255*b]}function h(t){var e=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,t[0]/100*(1-a)+a)),255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,n,a,r=t[0]/100,i=t[1]/100,s=t[2]/100;return n=-.9689*r+1.8758*i+.0415*s,a=.0557*r+-.204*i+1.057*s,e=(e=3.2406*r+-1.5372*i+-.4986*s)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,a=a>.0031308?1.055*Math.pow(a,1/2.4)-.055:a*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(a=Math.min(Math.max(0,a),1))]}function m(t){var e=t[0],n=t[1],a=t[2];return n/=100,a/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function y(t){var e,n,a,r,i=t[0],s=t[1],o=t[2];return i<=8?r=(n=100*i/903.3)/100*7.787+16/116:(n=100*Math.pow((i+16)/116,3),r=Math.pow(n/100,1/3)),[e=e/95.047<=.008856?e=95.047*(s/500+r-16/116)/7.787:95.047*Math.pow(s/500+r,3),n,a=a/108.883<=.008859?a=108.883*(r-o/200-16/116)/7.787:108.883*Math.pow(r-o/200,3)]}function v(t){var e,n=t[0],a=t[1],r=t[2];return(e=360*Math.atan2(r,a)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(a*a+r*r),e]}function x(t){return p(y(t))}function _(t){var e,n=t[1];return e=t[2]/360*2*Math.PI,[t[0],n*Math.cos(e),n*Math.sin(e)]}function T(t){return O[t]}var O={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},w={};for(var S in O)w[JSON.stringify(O[S])]=S;var I=function(){return new k};for(var N in e){I[N+"Raw"]=function(t){return function(n){return"number"==typeof n&&(n=Array.prototype.slice.call(arguments)),e[t](n)}}(N);var C=/(\w+)2(\w+)/.exec(N),R=C[1],A=C[2];(I[R]=I[R]||{})[A]=I[N]=function(t){return function(n){"number"==typeof n&&(n=Array.prototype.slice.call(arguments));var a=e[t](n);if("string"==typeof a||void 0===a)return a;for(var r=0;r<a.length;r++)a[r]=Math.round(a[r]);return a}}(N)}var k=function(){this.convs={}};k.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},k.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},k.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space;e=I[n][t](this.convs[n]),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach((function(t){k.prototype[t]=function(e){return this.routeSpace(t,arguments)}}));var E=I,L={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},D={getRgba:P,getHsla:M,getRgb:function(t){var e=P(t);return e&&e.slice(0,3)},getHsl:function(t){var e=M(t);return e&&e.slice(0,3)},getHwb:q,getAlpha:function(t){var e=P(t);return e?e[3]:(e=M(t))?e[3]:(e=q(t))?e[3]:void 0},hexString:function(t,e){return e=void 0!==e&&3===t.length?e:t[3],"#"+z(t[0])+z(t[1])+z(t[2])+(e>=0&&e<1?z(Math.round(255*e)):"")},rgbString:function(t,e){return e<1||t[3]&&t[3]<1?j(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:j,percentString:function(t,e){return e<1||t[3]&&t[3]<1?F(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"},percentaString:F,hslString:function(t,e){return e<1||t[3]&&t[3]<1?G(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:G,hwbString:function(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return B[t.slice(0,3)]}};function P(t){if(t){var e=[0,0,0],n=1,a=t.match(/^#([a-fA-F0-9]{3,4})$/i),r="";if(a){r=(a=a[1])[3];for(var i=0;i<e.length;i++)e[i]=parseInt(a[i]+a[i],16);r&&(n=Math.round(parseInt(r+r,16)/255*100)/100)}else if(a=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(r=a[2],a=a[1],i=0;i<e.length;i++)e[i]=parseInt(a.slice(2*i,2*i+2),16);r&&(n=Math.round(parseInt(r,16)/255*100)/100)}else if(a=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(i=0;i<e.length;i++)e[i]=parseInt(a[i+1]);n=parseFloat(a[4])}else if(a=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(i=0;i<e.length;i++)e[i]=Math.round(2.55*parseFloat(a[i+1]));n=parseFloat(a[4])}else if(a=t.match(/(\w+)/)){if("transparent"==a[1])return[0,0,0,0];if(!(e=L[a[1]]))return}for(i=0;i<e.length;i++)e[i]=V(e[i],0,255);return n=n||0==n?V(n,0,1):1,e[3]=n,e}}function M(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function q(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function j(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function F(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function G(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function V(t,e,n){return Math.min(Math.max(e,t),n)}function z(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var B={};for(var Y in L)B[L[Y]]=Y;var H=function(t){return t instanceof H?t:this instanceof H?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=D.getRgba(t))?this.setValues("rgb",e):(e=D.getHsla(t))?this.setValues("hsl",e):(e=D.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new H(t);var e};H.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return D.hexString(this.values.rgb)},rgbString:function(){return D.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return D.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return D.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return D.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return D.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return D.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return D.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var a=t[n]/255;e[n]=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,a=void 0===e?.5:e,r=2*a-1,i=this.alpha()-n.alpha(),s=((r*i==-1?r:(r+i)/(1+r*i))+1)/2,o=1-s;return this.rgb(s*this.red()+o*n.red(),s*this.green()+o*n.green(),s*this.blue()+o*n.blue()).alpha(this.alpha()*a+n.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new H,a=this.values,r=n.values;for(var i in a)a.hasOwnProperty(i)&&("[object Array]"===(e={}.toString.call(t=a[i]))?r[i]=t.slice(0):"[object Number]"===e?r[i]=t:console.error("unexpected color value:",t));return n}},H.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},H.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},H.prototype.getValues=function(t){for(var e=this.values,n={},a=0;a<t.length;a++)n[t.charAt(a)]=e[t][a];return 1!==e.alpha&&(n.a=e.alpha),n},H.prototype.setValues=function(t,e){var n,a,r=this.values,i=this.spaces,s=this.maxes,o=1;if(this.valid=!0,"alpha"===t)o=e;else if(e.length)r[t]=e.slice(0,t.length),o=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)r[t][n]=e[t.charAt(n)];o=e.a}else if(void 0!==e[i[t][0]]){var u=i[t];for(n=0;n<t.length;n++)r[t][n]=e[u[n]];o=e.alpha}if(r.alpha=Math.max(0,Math.min(1,void 0===o?r.alpha:o)),"alpha"===t)return!1;for(n=0;n<t.length;n++)a=Math.max(0,Math.min(s[t][n],r[t][n])),r[t][n]=Math.round(a);for(var l in i)l!==t&&(r[l]=E[t][l](r[t]));return!0},H.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},H.prototype.setChannel=function(t,e,n){var a=this.values[t];return void 0===n?a[e]:n===a[e]?this:(a[e]=n,this.setValues(t,a),this)},"undefined"!=typeof window&&(window.Color=H);var U,W=H,K={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return K.valueOrDefault(K.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,a){var r,i,s;if(K.isArray(t))if(i=t.length,a)for(r=i-1;r>=0;r--)e.call(n,t[r],r);else for(r=0;r<i;r++)e.call(n,t[r],r);else if(K.isObject(t))for(i=(s=Object.keys(t)).length,r=0;r<i;r++)e.call(n,t[s[r]],s[r])},arrayEquals:function(t,e){var n,a,r,i;if(!t||!e||t.length!==e.length)return!1;for(n=0,a=t.length;n<a;++n)if(i=e[n],(r=t[n])instanceof Array&&i instanceof Array){if(!K.arrayEquals(r,i))return!1}else if(r!==i)return!1;return!0},clone:function(t){if(K.isArray(t))return t.map(K.clone);if(K.isObject(t)){for(var e={},n=Object.keys(t),a=n.length,r=0;r<a;++r)e[n[r]]=K.clone(t[n[r]]);return e}return t},_merger:function(t,e,n,a){var r=e[t],i=n[t];K.isObject(r)&&K.isObject(i)?K.merge(r,i,a):e[t]=K.clone(i)},_mergerIf:function(t,e,n){var a=e[t],r=n[t];K.isObject(a)&&K.isObject(r)?K.mergeIf(a,r):e.hasOwnProperty(t)||(e[t]=K.clone(r))},merge:function(t,e,n){var a,r,i,s,o,u=K.isArray(e)?e:[e],l=u.length;if(!K.isObject(t))return t;for(a=(n=n||{}).merger||K._merger,r=0;r<l;++r)if(K.isObject(e=u[r]))for(o=0,s=(i=Object.keys(e)).length;o<s;++o)a(i[o],t,e,n);return t},mergeIf:function(t,e){return K.merge(t,e,{merger:K._mergerIf})},extend:function(t){for(var e=function(e,n){t[n]=e},n=1,a=arguments.length;n<a;++n)K.each(arguments[n],e);return t},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},a=function(){this.constructor=n};return a.prototype=e.prototype,n.prototype=new a,n.extend=K.inherits,t&&K.extend(n.prototype,t),n.__super__=e.prototype,n}},$=K;K.callCallback=K.callback,K.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},K.getValueOrDefault=K.valueOrDefault,K.getValueAtIndexOrDefault=K.valueAtIndexOrDefault;var Z={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:1===t?1:(n||(n=.3),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),-a*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:1===t?1:(n||(n=.3),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),a*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,a=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),a<1?(a=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/a),t<1?a*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:a*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-Z.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*Z.easeInBounce(2*t):.5*Z.easeOutBounce(2*t-1)+.5}},J={effects:Z};$.easingEffects=Z;var Q=Math.PI,X=Q/180,tt=2*Q,et=Q/2,nt=Q/4,at=2*Q/3,rt={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,a,r,i){if(i){var s=Math.min(i,r/2,a/2),o=e+s,u=n+s,l=e+a-s,d=n+r-s;t.moveTo(e,u),o<l&&u<d?(t.arc(o,u,s,-Q,-et),t.arc(l,u,s,-et,0),t.arc(l,d,s,0,et),t.arc(o,d,s,et,Q)):o<l?(t.moveTo(o,n),t.arc(l,u,s,-et,et),t.arc(o,u,s,et,Q+et)):u<d?(t.arc(o,u,s,-Q,0),t.arc(o,d,s,0,Q)):t.arc(o,u,s,-Q,Q),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,a,r)},drawPoint:function(t,e,n,a,r,i){var s,o,u,l,d,c=(i||0)*X;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(s=e.toString())&&"[object HTMLCanvasElement]"!==s){if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(a,r,n,0,tt),t.closePath();break;case"triangle":t.moveTo(a+Math.sin(c)*n,r-Math.cos(c)*n),c+=at,t.lineTo(a+Math.sin(c)*n,r-Math.cos(c)*n),c+=at,t.lineTo(a+Math.sin(c)*n,r-Math.cos(c)*n),t.closePath();break;case"rectRounded":l=n-(d=.516*n),o=Math.cos(c+nt)*l,u=Math.sin(c+nt)*l,t.arc(a-o,r-u,d,c-Q,c-et),t.arc(a+u,r-o,d,c-et,c),t.arc(a+o,r+u,d,c,c+et),t.arc(a-u,r+o,d,c+et,c+Q),t.closePath();break;case"rect":if(!i){l=Math.SQRT1_2*n,t.rect(a-l,r-l,2*l,2*l);break}c+=nt;case"rectRot":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+u,r-o),t.lineTo(a+o,r+u),t.lineTo(a-u,r+o),t.closePath();break;case"crossRot":c+=nt;case"cross":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o);break;case"star":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o),c+=nt,o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u),t.moveTo(a+u,r-o),t.lineTo(a-u,r+o);break;case"line":o=Math.cos(c)*n,u=Math.sin(c)*n,t.moveTo(a-o,r-u),t.lineTo(a+o,r+u);break;case"dash":t.moveTo(a,r),t.lineTo(a+Math.cos(c)*n,r+Math.sin(c)*n)}t.fill(),t.stroke()}}else t.drawImage(e,a-e.width/2,r-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,a){var r=n.steppedLine;if(r){if("middle"===r){var i=(e.x+n.x)/2;t.lineTo(i,a?n.y:e.y),t.lineTo(i,a?e.y:n.y)}else"after"===r&&!a||"after"!==r&&a?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(a?e.controlPointPreviousX:e.controlPointNextX,a?e.controlPointPreviousY:e.controlPointNextY,a?n.controlPointNextX:n.controlPointPreviousX,a?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},it=rt;$.clear=rt.clear,$.drawRoundedRectangle=function(t){t.beginPath(),rt.roundedRect.apply(rt,arguments)};var st={_set:function(t,e){return $.merge(this[t]||(this[t]={}),e)}};st._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var ot=st,ut=$.valueOrDefault,lt={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,a,r;return $.isObject(t)?(e=+t.top||0,n=+t.right||0,a=+t.bottom||0,r=+t.left||0):e=n=a=r=+t||0,{top:e,right:n,bottom:a,left:r,height:e+a,width:r+n}},_parseFont:function(t){var e=ot.global,n=ut(t.fontSize,e.defaultFontSize),a={family:ut(t.fontFamily,e.defaultFontFamily),lineHeight:$.options.toLineHeight(ut(t.lineHeight,e.defaultLineHeight),n),size:n,style:ut(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return a.string=function(t){return!t||$.isNullOrUndef(t.size)||$.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(a),a},resolve:function(t,e,n){var a,r,i;for(a=0,r=t.length;a<r;++a)if(void 0!==(i=t[a])&&(void 0!==e&&"function"==typeof i&&(i=i(e)),void 0!==n&&$.isArray(i)&&(i=i[n]),void 0!==i))return i}},dt=$,ct=it,ft=lt;dt.easing=J,dt.canvas=ct,dt.options=ft;var ht=function(t){dt.extend(this,t),this.initialize.apply(this,arguments)};dt.extend(ht.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=dt.clone(t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,a=e._start,r=e._view;return n&&1!==t?(r||(r=e._view={}),a||(a=e._start={}),function(t,e,n,a){var r,i,s,o,u,l,d,c,f,h=Object.keys(n);for(r=0,i=h.length;r<i;++r)if(l=n[s=h[r]],e.hasOwnProperty(s)||(e[s]=l),(o=e[s])!==l&&"_"!==s[0]){if(t.hasOwnProperty(s)||(t[s]=o),(d=typeof l)==typeof(u=t[s]))if("string"===d){if((c=W(u)).valid&&(f=W(l)).valid){e[s]=f.mix(c,a).rgbString();continue}}else if(dt.isFinite(u)&&dt.isFinite(l)){e[s]=u+(l-u)*a;continue}e[s]=l}}(a,r,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return dt.isNumber(this._model.x)&&dt.isNumber(this._model.y)}}),ht.extend=dt.inherits;var gt=ht,pt=gt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),bt=pt;Object.defineProperty(pt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(pt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),ot._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:dt.noop,onComplete:dt.noop}});var mt={animations:[],request:null,addAnimation:function(t,e,n,a){var r,i,s=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,a||(t.animating=!0),r=0,i=s.length;r<i;++r)if(s[r].chart===t)return void(s[r]=e);s.push(e),1===s.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=dt.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=dt.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,a,r=this.animations,i=0;i<r.length;)e=(t=r[i]).chart,n=t.numSteps,a=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(a,n),dt.callback(t.render,[e,t],e),dt.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(dt.callback(t.onAnimationComplete,[t],e),e.animating=!1,r.splice(i,1)):++i}},yt=dt.options.resolve,vt=["push","pop","shift","splice","unshift"];function xt(t,e){var n=t._chartjs;if(n){var a=n.listeners,r=a.indexOf(e);-1!==r&&a.splice(r,1),a.length>0||(vt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var _t=function(t,e){this.initialize(t,e)};dt.extend(_t.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&xt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),a=this.getDataset().data||[],r=n.data;for(t=0,e=a.length;t<e;++t)r[t]=r[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,a=n.getDataset(),r=a.data||(a.data=[]);n._data!==r&&(n._data&&xt(n._data,n),r&&Object.isExtensible(r)&&(e=n,(t=r)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),vt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),r=a.apply(this,e);return dt.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),r}})})))),n._data=r),n.resyncElements()},update:dt.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],a=n.length,r=0;r<a;++r)n[r].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,a=0;for(t.dataset&&t.dataset.draw();a<n;++a)e[a].draw()},removeHoverStyle:function(t){dt.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},r=t._model,i=dt.getHoverColor;t.$previousStyle={backgroundColor:r.backgroundColor,borderColor:r.borderColor,borderWidth:r.borderWidth},r.backgroundColor=yt([a.hoverBackgroundColor,e.hoverBackgroundColor,i(r.backgroundColor)],void 0,n),r.borderColor=yt([a.hoverBorderColor,e.hoverBorderColor,i(r.borderColor)],void 0,n),r.borderWidth=yt([a.hoverBorderWidth,e.hoverBorderWidth,r.borderWidth],void 0,n)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,a=e.length;a<n?t.data.splice(a,n-a):a>n&&this.insertElements(n,a-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),_t.extend=dt.inherits;var Tt=_t;ot._set("global",{elements:{arc:{backgroundColor:ot.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Ot=gt.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var a=dt.getAngleFromPoint(n,{x:t,y:e}),r=a.angle,i=a.distance,s=n.startAngle,o=n.endAngle;o<s;)o+=2*Math.PI;for(;r>o;)r-=2*Math.PI;for(;r<s;)r+=2*Math.PI;return r>=s&&r<=o&&i>=n.innerRadius&&i<=n.outerRadius}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,a=n.startAngle,r=n.endAngle,i="inner"===n.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(n.x,n.y,Math.max(n.outerRadius-i,0),a,r),e.arc(n.x,n.y,n.innerRadius,r,a,!0),e.closePath(),e.fillStyle=n.backgroundColor,e.fill(),n.borderWidth&&("inner"===n.borderAlign?(e.beginPath(),e.arc(n.x,n.y,n.outerRadius,a-(t=i/n.outerRadius),r+t),n.innerRadius>i?e.arc(n.x,n.y,n.innerRadius-i,r+(t=i/n.innerRadius),a-t,!0):e.arc(n.x,n.y,i,r+Math.PI/2,a-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(n.x,n.y,n.outerRadius,a,r),e.arc(n.x,n.y,n.innerRadius,r,a,!0),e.closePath(),e.lineWidth=2*n.borderWidth,e.lineJoin="round"):(e.lineWidth=n.borderWidth,e.lineJoin="bevel"),e.strokeStyle=n.borderColor,e.stroke()),e.restore()}}),wt=dt.valueOrDefault,St=ot.global.defaultColor;ot._set("global",{elements:{line:{tension:.4,backgroundColor:St,borderWidth:3,borderColor:St,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var It=gt.extend({draw:function(){var t,e,n,a,r=this._view,i=this._chart.ctx,s=r.spanGaps,o=this._children.slice(),u=ot.global,l=u.elements.line,d=-1;for(this._loop&&o.length&&o.push(o[0]),i.save(),i.lineCap=r.borderCapStyle||l.borderCapStyle,i.setLineDash&&i.setLineDash(r.borderDash||l.borderDash),i.lineDashOffset=wt(r.borderDashOffset,l.borderDashOffset),i.lineJoin=r.borderJoinStyle||l.borderJoinStyle,i.lineWidth=wt(r.borderWidth,l.borderWidth),i.strokeStyle=r.borderColor||u.defaultColor,i.beginPath(),d=-1,t=0;t<o.length;++t)e=o[t],n=dt.previousItem(o,t),a=e._view,0===t?a.skip||(i.moveTo(a.x,a.y),d=t):(n=-1===d?n:o[d],a.skip||(d!==t-1&&!s||-1===d?i.moveTo(a.x,a.y):dt.canvas.lineTo(i,n._view,e._view),d=t));i.stroke(),i.restore()}}),Nt=dt.valueOrDefault,Ct=ot.global.defaultColor;function Rt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}ot._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Ct,borderColor:Ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var At=gt.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:Rt,inXRange:Rt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,a=e.pointStyle,r=e.rotation,i=e.radius,s=e.x,o=e.y,u=ot.global,l=u.defaultColor;e.skip||(void 0===t||dt.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||l,n.lineWidth=Nt(e.borderWidth,u.elements.point.borderWidth),n.fillStyle=e.backgroundColor||l,dt.canvas.drawPoint(n,a,i,s,o,r))}}),kt=ot.global.defaultColor;function Et(t){return t&&void 0!==t.width}function Lt(t){var e,n,a,r,i;return Et(t)?(e=t.x-(i=t.width/2),n=t.x+i,a=Math.min(t.y,t.base),r=Math.max(t.y,t.base)):(i=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),a=t.y-i,r=t.y+i),{left:e,top:a,right:n,bottom:r}}function Dt(t,e,n){return t===e?n:t===n?e:t}function Pt(t,e,n){var a=null===e,r=null===n,i=!(!t||a&&r)&&Lt(t);return i&&(a||e>=i.left&&e<=i.right)&&(r||n>=i.top&&n<=i.bottom)}ot._set("global",{elements:{rectangle:{backgroundColor:kt,borderColor:kt,borderSkipped:"bottom",borderWidth:0}}});var Mt=gt.extend({draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=Lt(t),n=e.right-e.left,a=e.bottom-e.top,r=function(t,e,n){var a,r,i,s,o=t.borderWidth,u=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=Dt(e,"left","right")):t.base<t.y&&(e=Dt(e,"bottom","top")),n[e]=!0,n):n}(t);return dt.isObject(o)?(a=+o.top||0,r=+o.right||0,i=+o.bottom||0,s=+o.left||0):a=r=i=s=+o||0,{t:u.top||a<0?0:a>n?n:a,r:u.right||r<0?0:r>e?e:r,b:u.bottom||i<0?0:i>n?n:i,l:u.left||s<0?0:s>e?e:s}}(t,n/2,a/2);return{outer:{x:e.left,y:e.top,w:n,h:a},inner:{x:e.left+r.l,y:e.top+r.t,w:n-r.l-r.r,h:a-r.t-r.b}}}(e),a=n.outer,r=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(a.x,a.y,a.w,a.h),a.w===r.w&&a.h===r.h||(t.save(),t.beginPath(),t.rect(a.x,a.y,a.w,a.h),t.clip(),t.fillStyle=e.borderColor,t.rect(r.x,r.y,r.w,r.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Pt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return Et(n)?Pt(n,t,null):Pt(n,null,e)},inXRange:function(t){return Pt(this._view,t,null)},inYRange:function(t){return Pt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return Et(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return Et(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),qt={},jt=It,Ft=At,Gt=Mt;qt.Arc=Ot,qt.Line=jt,qt.Point=Ft,qt.Rectangle=Gt;var Vt=dt.options.resolve;ot._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var zt=Tt.extend({dataElementType:qt.Rectangle,initialize:function(){var t,e=this;Tt.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0},update:function(t){var e,n,a=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=a.length;e<n;++e)this.updateElement(a[e],e,t)},updateElement:function(t,e,n){var a=this,r=a.getMeta(),i=a.getDataset(),s=a._resolveElementOptions(t,e);t._xScale=a.getScaleForId(r.xAxisID),t._yScale=a.getScaleForId(r.yAxisID),t._datasetIndex=a.index,t._index=e,t._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderSkipped:s.borderSkipped,borderWidth:s.borderWidth,datasetLabel:i.label,label:a.chart.data.labels[e]},a._updateElementGeometry(t,e,n),t.pivot()},_updateElementGeometry:function(t,e,n){var a=this,r=t._model,i=a._getValueScale(),s=i.getBasePixel(),o=i.isHorizontal(),u=a._ruler||a.getRuler(),l=a.calculateBarValuePixels(a.index,e),d=a.calculateBarIndexPixels(a.index,e,u);r.horizontal=o,r.base=n?s:l.base,r.x=o?n?s:l.head:d.center,r.y=o?d.center:n?s:l.head,r.height=o?d.size:void 0,r.width=o?void 0:d.size},_getStacks:function(t){var e,n,a=this.chart,r=this._getIndexScale().options.stacked,i=void 0===t?a.data.datasets.length:t+1,s=[];for(e=0;e<i;++e)(n=a.getDatasetMeta(e)).bar&&a.isDatasetVisible(e)&&(!1===r||!0===r&&-1===s.indexOf(n.stack)||void 0===r&&(void 0===n.stack||-1===s.indexOf(n.stack)))&&s.push(n.stack);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),a=void 0!==e?n.indexOf(e):-1;return-1===a?n.length-1:a},getRuler:function(){var t,e,n=this._getIndexScale(),a=this.getStackCount(),r=this.index,i=n.isHorizontal(),s=i?n.left:n.top,o=s+(i?n.width:n.height),u=[];for(t=0,e=this.getMeta().data.length;t<e;++t)u.push(n.getPixelForValue(null,t,r));return{min:dt.isNullOrUndef(n.options.barThickness)?function(t,e){var n,a,r,i,s=t.isHorizontal()?t.width:t.height,o=t.getTicks();for(r=1,i=e.length;r<i;++r)s=Math.min(s,Math.abs(e[r]-e[r-1]));for(r=0,i=o.length;r<i;++r)a=t.getPixelForTick(r),s=r>0?Math.min(s,a-n):s,n=a;return s}(n,u):-1,pixels:u,start:s,end:o,stackCount:a,scale:n}},calculateBarValuePixels:function(t,e){var n,a,r,i,s,o,u=this.chart,l=this.getMeta(),d=this._getValueScale(),c=d.isHorizontal(),f=u.data.datasets,h=+d.getRightValue(f[t].data[e]),g=d.options.minBarLength,p=d.options.stacked,b=l.stack,m=0;if(p||void 0===p&&void 0!==b)for(n=0;n<t;++n)(a=u.getDatasetMeta(n)).bar&&a.stack===b&&a.controller._getValueScaleId()===d.id&&u.isDatasetVisible(n)&&(r=+d.getRightValue(f[n].data[e]),(h<0&&r<0||h>=0&&r>0)&&(m+=r));return i=d.getPixelForValue(m),o=(s=d.getPixelForValue(m+h))-i,void 0!==g&&Math.abs(o)<g&&(o=g,s=h>=0&&!c||h<0&&c?i-g:i+g),{size:o,base:i,head:s,center:s+o/2}},calculateBarIndexPixels:function(t,e,n){var a=n.scale.options,r="flex"===a.barThickness?function(t,e,n){var a,r=e.pixels,i=r[t],s=t>0?r[t-1]:null,o=t<r.length-1?r[t+1]:null,u=n.categoryPercentage;return null===s&&(s=i-(null===o?e.end-e.start:o-i)),null===o&&(o=i+i-s),a=i-(i-Math.min(s,o))/2*u,{chunk:Math.abs(o-s)/2*u/e.stackCount,ratio:n.barPercentage,start:a}}(e,n,a):function(t,e,n){var a,r,i=n.barThickness,s=e.stackCount,o=e.pixels[t];return dt.isNullOrUndef(i)?(a=e.min*n.categoryPercentage,r=n.barPercentage):(a=i*s,r=1),{chunk:a/s,ratio:r,start:o-a/2}}(e,n,a),i=this.getStackIndex(t,this.getMeta().stack),s=r.start+r.chunk*i+r.chunk/2,o=Math.min(dt.valueOrDefault(a.maxBarThickness,1/0),r.chunk*r.ratio);return{base:s-o/2,head:s+o/2,center:s,size:o}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,a=this.getDataset(),r=n.length,i=0;for(dt.canvas.clipArea(t.ctx,t.chartArea);i<r;++i)isNaN(e.getRightValue(a.data[i]))||n[i].draw();dt.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.rectangle,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=Vt([o[r],s[r],u[r]],d,e);return l}}),Bt=dt.valueOrDefault,Yt=dt.options.resolve;ot._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+": ("+t.xLabel+", "+t.yLabel+", "+e.datasets[t.datasetIndex].data[t.index].r+")"}}}});var Ht=Tt.extend({dataElementType:qt.Point,update:function(t){var e=this,n=e.getMeta();dt.each(n.data,(function(n,a){e.updateElement(n,a,t)}))},updateElement:function(t,e,n){var a=this,r=a.getMeta(),i=t.custom||{},s=a.getScaleForId(r.xAxisID),o=a.getScaleForId(r.yAxisID),u=a._resolveElementOptions(t,e),l=a.getDataset().data[e],d=a.index,c=n?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof l?l:NaN,e,d),f=n?o.getBasePixel():o.getPixelForValue(l,e,d);t._xScale=s,t._yScale=o,t._options=u,t._datasetIndex=d,t._index=e,t._model={backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,hitRadius:u.hitRadius,pointStyle:u.pointStyle,rotation:u.rotation,radius:n?0:u.radius,skip:i.skip||isNaN(c)||isNaN(f),x:c,y:f},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Bt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Bt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Bt(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l=s.data[e],d={},c={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},f=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(n=0,a=f.length;n<a;++n)d[r=f[n]]=Yt([o[r],s[r],u[r]],c,e);return d.radius=Yt([o.radius,l?l.r:void 0,s.radius,u.radius],c,e),d}}),Ut=dt.options.resolve,Wt=dt.valueOrDefault;ot._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,a=n.datasets,r=n.labels;if(a.length)for(var i=0;i<a[0].data.length;++i)e.push('<li><span style="background-color:'+a[0].backgroundColor[i]+'"></span>'),r[i]&&e.push(r[i]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,a){var r=t.getDatasetMeta(0),i=e.datasets[0],s=r.data[a],o=s&&s.custom||{},u=t.options.elements.arc;return{text:n,fillStyle:Ut([o.backgroundColor,i.backgroundColor,u.backgroundColor],void 0,a),strokeStyle:Ut([o.borderColor,i.borderColor,u.borderColor],void 0,a),lineWidth:Ut([o.borderWidth,i.borderWidth,u.borderWidth],void 0,a),hidden:isNaN(i.data[a])||r.data[a].hidden,index:a}})):[]}},onClick:function(t,e){var n,a,r,i=e.index,s=this.chart;for(n=0,a=(s.data.datasets||[]).length;n<a;++n)(r=s.getDatasetMeta(n)).data[i]&&(r.data[i].hidden=!r.data[i].hidden);s.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],a=": "+e.datasets[t.datasetIndex].data[t.index];return dt.isArray(n)?(n=n.slice())[0]+=a:n+=a,n}}}});var Kt=Tt.extend({dataElementType:qt.Arc,linkScales:dt.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,a=this,r=a.chart,i=r.chartArea,s=r.options,o=i.right-i.left,u=i.bottom-i.top,l=Math.min(o,u),d={x:0,y:0},c=a.getMeta(),f=c.data,h=s.cutoutPercentage,g=s.circumference,p=a._getRingWeight(a.index);if(g<2*Math.PI){var b=s.rotation%(2*Math.PI),m=(b+=2*Math.PI*(b>=Math.PI?-1:b<-Math.PI?1:0))+g,y={x:Math.cos(b),y:Math.sin(b)},v={x:Math.cos(m),y:Math.sin(m)},x=b<=0&&m>=0||b<=2*Math.PI&&2*Math.PI<=m,_=b<=.5*Math.PI&&.5*Math.PI<=m||b<=2.5*Math.PI&&2.5*Math.PI<=m,T=b<=-Math.PI&&-Math.PI<=m||b<=Math.PI&&Math.PI<=m,O=b<=.5*-Math.PI&&.5*-Math.PI<=m||b<=1.5*Math.PI&&1.5*Math.PI<=m,w=h/100,S={x:T?-1:Math.min(y.x*(y.x<0?1:w),v.x*(v.x<0?1:w)),y:O?-1:Math.min(y.y*(y.y<0?1:w),v.y*(v.y<0?1:w))},I={x:x?1:Math.max(y.x*(y.x>0?1:w),v.x*(v.x>0?1:w)),y:_?1:Math.max(y.y*(y.y>0?1:w),v.y*(v.y>0?1:w))},N={width:.5*(I.x-S.x),height:.5*(I.y-S.y)};l=Math.min(o/N.width,u/N.height),d={x:-.5*(I.x+S.x),y:-.5*(I.y+S.y)}}for(e=0,n=f.length;e<n;++e)f[e]._options=a._resolveElementOptions(f[e],e);for(r.borderWidth=a.getMaxBorderWidth(),r.outerRadius=Math.max((l-r.borderWidth)/2,0),r.innerRadius=Math.max(h?r.outerRadius/100*h:0,0),r.radiusLength=(r.outerRadius-r.innerRadius)/(a._getVisibleDatasetWeightTotal()||1),r.offsetX=d.x*r.outerRadius,r.offsetY=d.y*r.outerRadius,c.total=a.calculateTotal(),a.outerRadius=r.outerRadius-r.radiusLength*a._getRingWeightOffset(a.index),a.innerRadius=Math.max(a.outerRadius-r.radiusLength*p,0),e=0,n=f.length;e<n;++e)a.updateElement(f[e],e,t)},updateElement:function(t,e,n){var a=this,r=a.chart,i=r.chartArea,s=r.options,o=s.animation,u=(i.left+i.right)/2,l=(i.top+i.bottom)/2,d=s.rotation,c=s.rotation,f=a.getDataset(),h=n&&o.animateRotate?0:t.hidden?0:a.calculateCircumference(f.data[e])*(s.circumference/(2*Math.PI)),g=t._options||{};dt.extend(t,{_datasetIndex:a.index,_index:e,_model:{backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,borderAlign:g.borderAlign,x:u+r.offsetX,y:l+r.offsetY,startAngle:d,endAngle:c,circumference:h,outerRadius:n&&o.animateScale?0:a.outerRadius,innerRadius:n&&o.animateScale?0:a.innerRadius,label:dt.valueAtIndexOrDefault(f.label,e,r.data.labels[e])}});var p=t._model;n&&o.animateRotate||(p.startAngle=0===e?s.rotation:a.getMeta().data[e-1]._model.endAngle,p.endAngle=p.startAngle+p.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),a=0;return dt.each(n.data,(function(n,r){t=e.data[r],isNaN(t)||n.hidden||(a+=Math.abs(t))})),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,a,r,i,s,o,u,l=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(a=d.getDatasetMeta(e)).data,e!==this.index&&(i=a.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)r=t[e],"inner"!==(s=i?i._resolveElementOptions(r,e):r._options).borderAlign&&(l=(u=s.hoverBorderWidth)>(l=(o=s.borderWidth)>l?o:l)?u:l);return l},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Wt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=this.getDataset(),o=t.custom||{},u=i.options.elements.arc,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=Ut([o[r],s[r],u[r]],d,e);return l},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Wt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});ot._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var $t=zt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Zt=dt.valueOrDefault,Jt=dt.options.resolve,Qt=dt.canvas._isPointInArea;function Xt(t,e){return Zt(t.showLine,e.showLines)}ot._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var te=Tt.extend({datasetElementType:qt.Line,dataElementType:qt.Point,update:function(t){var e,n,a=this,r=a.getMeta(),i=r.dataset,s=r.data||[],o=a.getScaleForId(r.yAxisID),u=a.getDataset(),l=Xt(u,a.chart.options);for(l&&(void 0!==u.tension&&void 0===u.lineTension&&(u.lineTension=u.tension),i._scale=o,i._datasetIndex=a.index,i._children=s,i._model=a._resolveLineOptions(i),i.pivot()),e=0,n=s.length;e<n;++e)a.updateElement(s[e],e,t);for(l&&0!==i._model.tension&&a.updateBezierControlPoints(),e=0,n=s.length;e<n;++e)s[e].pivot()},updateElement:function(t,e,n){var a,r,i=this,s=i.getMeta(),o=t.custom||{},u=i.getDataset(),l=i.index,d=u.data[e],c=i.getScaleForId(s.yAxisID),f=i.getScaleForId(s.xAxisID),h=s.dataset._model,g=i._resolvePointOptions(t,e);a=f.getPixelForValue("object"==typeof d?d:NaN,e,l),r=n?c.getBasePixel():i.calculatePointY(d,e,l),t._xScale=f,t._yScale=c,t._options=g,t._datasetIndex=l,t._index=e,t._model={x:a,y:r,skip:o.skip||isNaN(a)||isNaN(r),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Zt(o.tension,h?h.tension:0),steppedLine:!!h&&h.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},f=Object.keys(c);for(n=0,a=f.length;n<a;++n)l[r=f[n]]=Jt([o[r],s[c[r]],s[r],u[r]],d,e);return l},_resolveLineOptions:function(t){var e,n,a,r=this.chart,i=r.data.datasets[this.index],s=t.custom||{},o=r.options,u=o.elements.line,l={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,n=d.length;e<n;++e)l[a=d[e]]=Jt([s[a],i[a],u[a]]);return l.spanGaps=Zt(i.spanGaps,o.spanGaps),l.tension=Zt(i.lineTension,u.tension),l.steppedLine=Jt([s.steppedLine,i.steppedLine,u.stepped]),l},calculatePointY:function(t,e,n){var a,r,i,s=this.chart,o=this.getMeta(),u=this.getScaleForId(o.yAxisID),l=0,d=0;if(u.options.stacked){for(a=0;a<n;a++)if(r=s.data.datasets[a],"line"===(i=s.getDatasetMeta(a)).type&&i.yAxisID===u.id&&s.isDatasetVisible(a)){var c=Number(u.getRightValue(r.data[e]));c<0?d+=c||0:l+=c||0}var f=Number(u.getRightValue(t));return u.getPixelForValue(f<0?d+f:l+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,a,r=this.chart,i=this.getMeta(),s=i.dataset._model,o=r.chartArea,u=i.data||[];function l(t,e,n){return Math.max(Math.min(t,n),e)}if(s.spanGaps&&(u=u.filter((function(t){return!t._model.skip}))),"monotone"===s.cubicInterpolationMode)dt.splineCurveMonotone(u);else for(t=0,e=u.length;t<e;++t)n=u[t]._model,a=dt.splineCurve(dt.previousItem(u,t)._model,n,dt.nextItem(u,t)._model,s.tension),n.controlPointPreviousX=a.previous.x,n.controlPointPreviousY=a.previous.y,n.controlPointNextX=a.next.x,n.controlPointNextY=a.next.y;if(r.options.elements.line.capBezierPoints)for(t=0,e=u.length;t<e;++t)Qt(n=u[t]._model,o)&&(t>0&&Qt(u[t-1]._model,o)&&(n.controlPointPreviousX=l(n.controlPointPreviousX,o.left,o.right),n.controlPointPreviousY=l(n.controlPointPreviousY,o.top,o.bottom)),t<u.length-1&&Qt(u[t+1]._model,o)&&(n.controlPointNextX=l(n.controlPointNextX,o.left,o.right),n.controlPointNextY=l(n.controlPointNextY,o.top,o.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),a=n.data||[],r=e.chartArea,i=a.length,s=0;for(Xt(this.getDataset(),e.options)&&(dt.canvas.clipArea(e.ctx,{left:r.left,right:r.right,top:r.top-(t=(n.dataset._model.borderWidth||0)/2),bottom:r.bottom+t}),n.dataset.draw(),dt.canvas.unclipArea(e.ctx));s<i;++s)a[s].draw(r)},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}}),ee=dt.options.resolve;ot._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,a=n.datasets,r=n.labels;if(a.length)for(var i=0;i<a[0].data.length;++i)e.push('<li><span style="background-color:'+a[0].backgroundColor[i]+'"></span>'),r[i]&&e.push(r[i]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,a){var r=t.getDatasetMeta(0),i=e.datasets[0],s=r.data[a].custom||{},o=t.options.elements.arc;return{text:n,fillStyle:ee([s.backgroundColor,i.backgroundColor,o.backgroundColor],void 0,a),strokeStyle:ee([s.borderColor,i.borderColor,o.borderColor],void 0,a),lineWidth:ee([s.borderWidth,i.borderWidth,o.borderWidth],void 0,a),hidden:isNaN(i.data[a])||r.data[a].hidden,index:a}})):[]}},onClick:function(t,e){var n,a,r,i=e.index,s=this.chart;for(n=0,a=(s.data.datasets||[]).length;n<a;++n)(r=s.getDatasetMeta(n)).data[i].hidden=!r.data[i].hidden;s.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var ne=Tt.extend({dataElementType:qt.Arc,linkScales:dt.noop,update:function(t){var e,n,a,r=this,i=r.getDataset(),s=r.getMeta(),o=r.chart.options.startAngle||0,u=r._starts=[],l=r._angles=[],d=s.data;for(r._updateRadius(),s.count=r.countVisibleElements(),e=0,n=i.data.length;e<n;e++)u[e]=o,a=r._computeAngle(e),l[e]=a,o+=a;for(e=0,n=d.length;e<n;++e)d[e]._options=r._resolveElementOptions(d[e],e),r.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,a=e.options,r=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(r/2,0),e.innerRadius=Math.max(a.cutoutPercentage?e.outerRadius/100*a.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var a=this,r=a.chart,i=a.getDataset(),s=r.options,o=s.animation,u=r.scale,l=r.data.labels,d=u.xCenter,c=u.yCenter,f=s.startAngle,h=t.hidden?0:u.getDistanceFromCenterForValue(i.data[e]),g=a._starts[e],p=g+(t.hidden?0:a._angles[e]),b=o.animateScale?0:u.getDistanceFromCenterForValue(i.data[e]),m=t._options||{};dt.extend(t,{_datasetIndex:a.index,_index:e,_scale:u,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:d,y:c,innerRadius:0,outerRadius:n?b:h,startAngle:n&&o.animateRotate?f:g,endAngle:n&&o.animateRotate?f:p,label:dt.valueAtIndexOrDefault(l,e,l[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return dt.each(e.data,(function(e,a){isNaN(t.data[a])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor,r=dt.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=r(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=r(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=r(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,a,r,i=this.chart,s=this.getDataset(),o=t.custom||{},u=i.options.elements.arc,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,a=c.length;n<a;++n)l[r=c[n]]=ee([o[r],s[r],u[r]],d,e);return l},_computeAngle:function(t){var e=this,n=this.getMeta().count,a=e.getDataset(),r=e.getMeta();return isNaN(a.data[t])||r.data[t].hidden?0:ee([e.chart.options.elements.arc.angle,2*Math.PI/n],{chart:e.chart,dataIndex:t,dataset:a,datasetIndex:e.index},t)}});ot._set("pie",dt.clone(ot.doughnut)),ot._set("pie",{cutoutPercentage:0});var ae=Kt,re=dt.valueOrDefault,ie=dt.options.resolve;ot._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var se=Tt.extend({datasetElementType:qt.Line,dataElementType:qt.Point,linkScales:dt.noop,update:function(t){var e,n,a=this,r=a.getMeta(),i=r.dataset,s=r.data||[],o=a.chart.scale,u=a.getDataset();for(void 0!==u.tension&&void 0===u.lineTension&&(u.lineTension=u.tension),i._scale=o,i._datasetIndex=a.index,i._children=s,i._loop=!0,i._model=a._resolveLineOptions(i),i.pivot(),e=0,n=s.length;e<n;++e)a.updateElement(s[e],e,t);for(a.updateBezierControlPoints(),e=0,n=s.length;e<n;++e)s[e].pivot()},updateElement:function(t,e,n){var a=this,r=t.custom||{},i=a.getDataset(),s=a.chart.scale,o=s.getPointPositionForValue(e,i.data[e]),u=a._resolvePointOptions(t,e),l=a.getMeta().dataset._model,d=n?s.xCenter:o.x,c=n?s.yCenter:o.y;t._scale=s,t._options=u,t._datasetIndex=a.index,t._index=e,t._model={x:d,y:c,skip:r.skip||isNaN(d)||isNaN(c),radius:u.radius,pointStyle:u.pointStyle,rotation:u.rotation,backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,tension:re(r.tension,l?l.tension:0),hitRadius:u.hitRadius}},_resolvePointOptions:function(t,e){var n,a,r,i=this.chart,s=i.data.datasets[this.index],o=t.custom||{},u=i.options.elements.point,l={},d={chart:i,dataIndex:e,dataset:s,datasetIndex:this.index},c={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},f=Object.keys(c);for(n=0,a=f.length;n<a;++n)l[r=f[n]]=ie([o[r],s[c[r]],s[r],u[r]],d,e);return l},_resolveLineOptions:function(t){var e,n,a,r=this.chart,i=r.data.datasets[this.index],s=t.custom||{},o=r.options.elements.line,u={},l=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,n=l.length;e<n;++e)u[a=l[e]]=ie([s[a],i[a],o[a]]);return u.tension=re(i.lineTension,o.tension),u},updateBezierControlPoints:function(){var t,e,n,a,r=this.getMeta(),i=this.chart.chartArea,s=r.data||[];function o(t,e,n){return Math.max(Math.min(t,n),e)}for(t=0,e=s.length;t<e;++t)n=s[t]._model,a=dt.splineCurve(dt.previousItem(s,t,!0)._model,n,dt.nextItem(s,t,!0)._model,n.tension),n.controlPointPreviousX=o(a.previous.x,i.left,i.right),n.controlPointPreviousY=o(a.previous.y,i.top,i.bottom),n.controlPointNextX=o(a.next.x,i.left,i.right),n.controlPointNextY=o(a.next.y,i.top,i.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,a=dt.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=re(n.hoverBackgroundColor,a(n.backgroundColor)),e.borderColor=re(n.hoverBorderColor,a(n.borderColor)),e.borderWidth=re(n.hoverBorderWidth,n.borderWidth),e.radius=re(n.hoverRadius,n.radius)}});ot._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var oe={bar:zt,bubble:Ht,doughnut:Kt,horizontalBar:$t,line:te,polarArea:ne,pie:ae,radar:se,scatter:te};function ue(t,e){return t.native?{x:t.x,y:t.y}:dt.getRelativePosition(t,e)}function le(t,e){var n,a,r,i,s;for(a=0,i=t.data.datasets.length;a<i;++a)if(t.isDatasetVisible(a))for(r=0,s=(n=t.getDatasetMeta(a)).data.length;r<s;++r){var o=n.data[r];o._view.skip||e(o)}}function de(t,e){var n=[];return le(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ce(t,e,n,a){var r=Number.POSITIVE_INFINITY,i=[];return le(t,(function(t){if(!n||t.inRange(e.x,e.y)){var s=t.getCenterPoint(),o=a(e,s);o<r?(i=[t],r=o):o===r&&i.push(t)}})),i}function fe(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,a){var r=e?Math.abs(t.x-a.x):0,i=n?Math.abs(t.y-a.y):0;return Math.sqrt(Math.pow(r,2)+Math.pow(i,2))}}function he(t,e,n){var a=ue(e,t);n.axis=n.axis||"x";var r=fe(n.axis),i=n.intersect?de(t,a):ce(t,a,!1,r),s=[];return i.length?(t.data.datasets.forEach((function(e,n){if(t.isDatasetVisible(n)){var a=t.getDatasetMeta(n).data[i[0]._index];a&&!a._view.skip&&s.push(a)}})),s):[]}var ge={modes:{single:function(t,e){var n=ue(e,t),a=[];return le(t,(function(t){if(t.inRange(n.x,n.y))return a.push(t),a})),a.slice(0,1)},label:he,index:he,dataset:function(t,e,n){var a=ue(e,t);n.axis=n.axis||"xy";var r=fe(n.axis),i=n.intersect?de(t,a):ce(t,a,!1,r);return i.length>0&&(i=t.getDatasetMeta(i[0]._datasetIndex).data),i},"x-axis":function(t,e){return he(t,e,{intersect:!1})},point:function(t,e){return de(t,ue(e,t))},nearest:function(t,e,n){var a=ue(e,t);n.axis=n.axis||"xy";var r=fe(n.axis);return ce(t,a,n.intersect,r)},x:function(t,e,n){var a=ue(e,t),r=[],i=!1;return le(t,(function(t){t.inXRange(a.x)&&r.push(t),t.inRange(a.x,a.y)&&(i=!0)})),n.intersect&&!i&&(r=[]),r},y:function(t,e,n){var a=ue(e,t),r=[],i=!1;return le(t,(function(t){t.inYRange(a.y)&&r.push(t),t.inRange(a.x,a.y)&&(i=!0)})),n.intersect&&!i&&(r=[]),r}}};function pe(t,e){return dt.where(t,(function(t){return t.position===e}))}function be(t,e){t.forEach((function(t,e){return t._tmpIndex_=e,t})),t.sort((function(t,n){var a=e?n:t,r=e?t:n;return a.weight===r.weight?a._tmpIndex_-r._tmpIndex_:a.weight-r.weight})),t.forEach((function(t){delete t._tmpIndex_}))}function me(t,e){dt.each(t,(function(t){e[t.position]+=t.isHorizontal()?t.height:t.width}))}ot._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ye,ve={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var a,r=["fullWidth","position","weight"],i=r.length,s=0;s<i;++s)n.hasOwnProperty(a=r[s])&&(e[a]=n[a])},update:function(t,e,n){if(t){var a=dt.options.toPadding((t.options.layout||{}).padding),r=a.left,i=a.right,s=a.top,o=a.bottom,u=pe(t.boxes,"left"),l=pe(t.boxes,"right"),d=pe(t.boxes,"top"),c=pe(t.boxes,"bottom"),f=pe(t.boxes,"chartArea");be(u,!0),be(l,!1),be(d,!0),be(c,!1);var h,g=u.concat(l),p=d.concat(c),b=g.concat(p),m=e-r-i,y=n-s-o,v=(e-m/2)/g.length,x=m,_=y,T={top:s,left:r,bottom:o,right:i},O=[];dt.each(b,(function(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?m:x,y/2),_-=e.height):(e=t.update(v,_),x-=e.width),O.push({horizontal:n,width:e.width,box:t})})),h=function(t){var e=0,n=0,a=0,r=0;return dt.each(t,(function(t){if(t.getPadding){var i=t.getPadding();e=Math.max(e,i.top),n=Math.max(n,i.left),a=Math.max(a,i.bottom),r=Math.max(r,i.right)}})),{top:e,left:n,bottom:a,right:r}}(b),dt.each(g,A),me(g,T),dt.each(p,A),me(p,T),dt.each(g,(function(t){var e=dt.findNextWhere(O,(function(e){return e.box===t}));e&&t.update(e.width,_,{left:0,right:0,top:T.top,bottom:T.bottom})})),me(b,T={top:s,left:r,bottom:o,right:i});var w=Math.max(h.left-T.left,0);T.left+=w,T.right+=Math.max(h.right-T.right,0);var S=Math.max(h.top-T.top,0);T.top+=S,T.bottom+=Math.max(h.bottom-T.bottom,0);var I=n-T.top-T.bottom,N=e-T.left-T.right;N===x&&I===_||(dt.each(g,(function(t){t.height=I})),dt.each(p,(function(t){t.fullWidth||(t.width=N)})),_=I,x=N);var C=r+w,R=s+S;dt.each(u.concat(d),k),C+=x,R+=_,dt.each(l,k),dt.each(c,k),t.chartArea={left:T.left,top:T.top,right:T.left+x,bottom:T.top+_},dt.each(f,(function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(x,_)}))}function A(t){var e=dt.findNextWhere(O,(function(e){return e.box===t}));if(e)if(e.horizontal){var n={left:Math.max(T.left,h.left),right:Math.max(T.right,h.right),top:0,bottom:0};t.update(t.fullWidth?m:x,y/2,n)}else t.update(e.width,_)}function k(t){t.isHorizontal()?(t.left=t.fullWidth?r:T.left,t.right=t.fullWidth?e-i:T.left+x,t.top=R,t.bottom=R+t.height,R=t.bottom):(t.left=C,t.right=C+t.width,t.top=T.top,t.bottom=T.top+_,C=t.right)}}},xe=(ye=Object.freeze({default:"/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"}))&&ye.default||ye,_e=["animationstart","webkitAnimationStart"],Te={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function Oe(t,e){var n=dt.getStyle(t,e),a=n&&n.match(/^(\d+)(\.\d+)?px$/);return a?Number(a[1]):void 0}var we=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(n){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,we)}function Ie(t,e,n){t.removeEventListener(e,n,we)}function Ne(t,e,n,a,r){return{type:t,chart:e,native:r||null,x:void 0!==n?n:null,y:void 0!==a?a:null}}function Ce(t){var e=document.createElement("div");return e.className=t||"",e}var Re={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){this._loaded||(this._loaded=!0,this.disableCSSInjection||function(t,e){var n=t._style||document.createElement("style");t._style||(t._style=n,e="/* Chart.js */\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}(this,xe))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),n&&n.canvas===t?(function(t,e){var n=t.style,a=t.getAttribute("height"),r=t.getAttribute("width");if(t.$chartjs={initial:{height:a,width:r,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===r||""===r){var i=Oe(t,"width");void 0!==i&&(t.width=i)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var s=Oe(t,"height");void 0!==i&&(t.height=s)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e.$chartjs){var n=e.$chartjs.initial;["height","width"].forEach((function(t){var a=n[t];dt.isNullOrUndef(a)?e.removeAttribute(t):e.setAttribute(t,a)})),dt.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e.$chartjs}},addEventListener:function(t,e,n){var a=t.canvas;if("resize"!==e){var r=n.$chartjs||(n.$chartjs={});Se(a,e,(r.proxies||(r.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=Te[t.type]||t.type,a=dt.getRelativePosition(t,e);return Ne(n,e,a.x,a.y,t)}(e,t))})}else!function(t,e,n){var a,r,i,s,o=t.$chartjs||(t.$chartjs={}),u=o.resizer=function(t){var e=Ce("chartjs-size-monitor"),n=Ce("chartjs-size-monitor-expand"),a=Ce("chartjs-size-monitor-shrink");n.appendChild(Ce()),a.appendChild(Ce()),e.appendChild(n),e.appendChild(a),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,a.scrollLeft=1e6,a.scrollTop=1e6};var r=function(){e._reset(),t()};return Se(n,"scroll",r.bind(n,"expand")),Se(a,"scroll",r.bind(a,"shrink")),e}((a=function(){if(o.resizer){var a=n.options.maintainAspectRatio&&t.parentNode,r=a?a.clientWidth:0;e(Ne("resize",n)),a&&a.clientWidth<r&&n.canvas&&e(Ne("resize",n))}},i=!1,s=[],function(){s=Array.prototype.slice.call(arguments),r=r||this,i||(i=!0,dt.requestAnimFrame.call(window,(function(){i=!1,a.apply(r,s)})))}));!function(t,e){var n=t.$chartjs||(t.$chartjs={}),a=n.renderProxy=function(t){"chartjs-render-animation"===t.animationName&&e()};dt.each(_e,(function(e){Se(t,e,a)})),n.reflow=!!t.offsetParent,t.classList.add("chartjs-render-monitor")}(t,(function(){if(o.resizer){var e=t.parentNode;e&&e!==u.parentNode&&e.insertBefore(u,e.firstChild),u._reset()}}))}(a,n,t)},removeEventListener:function(t,e,n){var a,r,i,s=t.canvas;if("resize"!==e){var o=((n.$chartjs||{}).proxies||{})[t.id+"_"+e];o&&Ie(s,e,o)}else i=(r=(a=s).$chartjs||{}).resizer,delete r.resizer,function(t){var e=t.$chartjs||{},n=e.renderProxy;n&&(dt.each(_e,(function(e){Ie(t,e,n)})),delete e.renderProxy),t.classList.remove("chartjs-render-monitor")}(a),i&&i.parentNode&&i.parentNode.removeChild(i)}};dt.addEvent=Se,dt.removeEvent=Ie;var Ae=dt.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Re._enabled?Re:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}});ot._set("global",{plugins:{}});var ke={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var a,r,i,s,o,u=this.descriptors(t),l=u.length;for(a=0;a<l;++a)if("function"==typeof(o=(i=(r=u[a]).plugin)[e])&&((s=[t].concat(n||[])).push(r.options),!1===o.apply(i,s)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],a=[],r=t&&t.config||{},i=r.options&&r.options.plugins||{};return this._plugins.concat(r.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,r=i[e];!1!==r&&(!0===r&&(r=dt.clone(ot.global.plugins[e])),n.push(t),a.push({plugin:t,options:r||{}}))}})),e.descriptors=a,e.id=this._cacheId,a},_invalidate:function(t){delete t.$plugins}},Ee={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=dt.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?dt.merge({},[ot.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=dt.extend(this.defaults[t],e))},addScalesToLayout:function(t){dt.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ve.addBox(t,e)}))}},Le=dt.valueOrDefault;ot._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:dt.noop,title:function(t,e){var n="",a=e.labels,r=a?a.length:0;if(t.length>0){var i=t[0];i.label?n=i.label:i.xLabel?n=i.xLabel:r>0&&i.index<r&&(n=a[i.index])}return n},afterTitle:dt.noop,beforeBody:dt.noop,beforeLabel:dt.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),dt.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:dt.noop,afterBody:dt.noop,beforeFooter:dt.noop,footer:dt.noop,afterFooter:dt.noop}}});var De={average:function(t){if(!t.length)return!1;var e,n,a=0,r=0,i=0;for(e=0,n=t.length;e<n;++e){var s=t[e];if(s&&s.hasValue()){var o=s.tooltipPosition();a+=o.x,r+=o.y,++i}}return{x:a/i,y:r/i}},nearest:function(t,e){var n,a,r,i=e.x,s=e.y,o=Number.POSITIVE_INFINITY;for(n=0,a=t.length;n<a;++n){var u=t[n];if(u&&u.hasValue()){var l=u.getCenterPoint(),d=dt.distanceBetweenPoints(e,l);d<o&&(o=d,r=u)}}if(r){var c=r.tooltipPosition();i=c.x,s=c.y}return{x:i,y:s}}};function Pe(t,e){return e&&(dt.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Me(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function qe(t){var e=ot.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Le(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Le(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Le(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Le(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Le(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Le(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Le(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Le(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Le(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function je(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Fe(t){return Pe([],Me(t))}var Ge=gt.extend({initialize:function(){this._model=qe(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,a=n.beforeTitle.apply(t,arguments),r=n.title.apply(t,arguments),i=n.afterTitle.apply(t,arguments),s=[];return s=Pe(s,Me(a)),s=Pe(s,Me(r)),Pe(s,Me(i))},getBeforeBody:function(){return Fe(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,a=n._options.callbacks,r=[];return dt.each(t,(function(t){var i={before:[],lines:[],after:[]};Pe(i.before,Me(a.beforeLabel.call(n,t,e))),Pe(i.lines,a.label.call(n,t,e)),Pe(i.after,Me(a.afterLabel.call(n,t,e))),r.push(i)})),r},getAfterBody:function(){return Fe(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),r=e.afterFooter.apply(t,arguments),i=[];return i=Pe(i,Me(n)),i=Pe(i,Me(a)),Pe(i,Me(r))},update:function(t){var e,n,a,r,i,s,o,u,l,d,c=this,f=c._options,h=c._model,g=c._model=qe(f),p=c._active,b=c._data,m={xAlign:h.xAlign,yAlign:h.yAlign},y={x:h.x,y:h.y},v={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(p.length){g.opacity=1;var _=[],T=[];x=De[f.position].call(c,p,c._eventPosition);var O=[];for(e=0,n=p.length;e<n;++e)O.push((r=void 0,i=void 0,u=void 0,l=void 0,d=void 0,r=(a=p[e])._xScale,i=a._yScale||a._scale,s=a._index,l=(u=a._chart.getDatasetMeta(o=a._datasetIndex).controller)._getIndexScale(),d=u._getValueScale(),{xLabel:r?r.getLabelForIndex(s,o):"",yLabel:i?i.getLabelForIndex(s,o):"",label:l?""+l.getLabelForIndex(s,o):"",value:d?""+d.getLabelForIndex(s,o):"",index:s,datasetIndex:o,x:a._model.x,y:a._model.y}));f.filter&&(O=O.filter((function(t){return f.filter(t,b)}))),f.itemSort&&(O=O.sort((function(t,e){return f.itemSort(t,e,b)}))),dt.each(O,(function(t){_.push(f.callbacks.labelColor.call(c,t,c._chart)),T.push(f.callbacks.labelTextColor.call(c,t,c._chart))})),g.title=c.getTitle(O,b),g.beforeBody=c.getBeforeBody(O,b),g.body=c.getBody(O,b),g.afterBody=c.getAfterBody(O,b),g.footer=c.getFooter(O,b),g.x=x.x,g.y=x.y,g.caretPadding=f.caretPadding,g.labelColors=_,g.labelTextColors=T,g.dataPoints=O,v=function(t,e){var n=t._chart.ctx,a=2*e.yPadding,r=0,i=e.body,s=i.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0),o=e.title.length,u=e.footer.length,l=e.titleFontSize,d=e.bodyFontSize,c=e.footerFontSize;a+=o*l,a+=o?(o-1)*e.titleSpacing:0,a+=o?e.titleMarginBottom:0,a+=(s+=e.beforeBody.length+e.afterBody.length)*d,a+=s?(s-1)*e.bodySpacing:0,a+=u?e.footerMarginTop:0,a+=u*c,a+=u?(u-1)*e.footerSpacing:0;var f=0,h=function(t){r=Math.max(r,n.measureText(t).width+f)};return n.font=dt.fontString(l,e._titleFontStyle,e._titleFontFamily),dt.each(e.title,h),n.font=dt.fontString(d,e._bodyFontStyle,e._bodyFontFamily),dt.each(e.beforeBody.concat(e.afterBody),h),f=e.displayColors?d+2:0,dt.each(i,(function(t){dt.each(t.before,h),dt.each(t.lines,h),dt.each(t.after,h)})),f=0,n.font=dt.fontString(c,e._footerFontStyle,e._footerFontFamily),dt.each(e.footer,h),{width:r+=2*e.xPadding,height:a}}(this,g),y=function(t,e,n,a){var r=t.x,i=t.y,s=t.caretPadding,o=n.xAlign,u=n.yAlign,l=t.caretSize+s,d=t.cornerRadius+s;return"right"===o?r-=e.width:"center"===o&&((r-=e.width/2)+e.width>a.width&&(r=a.width-e.width),r<0&&(r=0)),"top"===u?i+=l:i-="bottom"===u?e.height+l:e.height/2,"center"===u?"left"===o?r+=l:"right"===o&&(r-=l):"left"===o?r-=d:"right"===o&&(r+=d),{x:r,y:i}}(g,v,m=function(t,e){var n,a,r,i,s,o=t._model,u=t._chart,l=t._chart.chartArea,d="center",c="center";o.y<e.height?c="top":o.y>u.height-e.height&&(c="bottom");var f=(l.left+l.right)/2,h=(l.top+l.bottom)/2;"center"===c?(n=function(t){return t<=f},a=function(t){return t>f}):(n=function(t){return t<=e.width/2},a=function(t){return t>=u.width-e.width/2}),r=function(t){return t+e.width+o.caretSize+o.caretPadding>u.width},i=function(t){return t-e.width-o.caretSize-o.caretPadding<0},s=function(t){return t<=h?"top":"bottom"},n(o.x)?(d="left",r(o.x)&&(d="center",c=s(o.y))):a(o.x)&&(d="right",i(o.x)&&(d="center",c=s(o.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:c}}(this,v),c._chart)}else g.opacity=0;return g.xAlign=m.xAlign,g.yAlign=m.yAlign,g.x=y.x,g.y=y.y,g.width=v.width,g.height=v.height,g.caretX=x.x,g.caretY=x.y,c._model=g,t&&f.custom&&f.custom.call(c,g),c},drawCaret:function(t,e){var n=this._chart.ctx,a=this.getCaretPosition(t,e,this._view);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var a,r,i,s,o,u,l=n.caretSize,d=n.cornerRadius,c=n.xAlign,f=n.yAlign,h=t.x,g=t.y,p=e.width,b=e.height;if("center"===f)o=g+b/2,"left"===c?(r=(a=h)-l,i=a,s=o+l,u=o-l):(r=(a=h+p)+l,i=a,s=o-l,u=o+l);else if("left"===c?(a=(r=h+d+l)-l,i=r+l):"right"===c?(a=(r=h+p-d-l)-l,i=r+l):(a=(r=n.caretX)-l,i=r+l),"top"===f)o=(s=g)-l,u=s;else{o=(s=g+b)+l,u=s;var m=i;i=a,a=m}return{x1:a,x2:r,x3:i,y1:s,y2:o,y3:u}},drawTitle:function(t,e,n){var a=e.title;if(a.length){t.x=je(e,e._titleAlign),n.textAlign=e._titleAlign,n.textBaseline="top";var r,i,s=e.titleFontSize,o=e.titleSpacing;for(n.fillStyle=e.titleFontColor,n.font=dt.fontString(s,e._titleFontStyle,e._titleFontFamily),r=0,i=a.length;r<i;++r)n.fillText(a[r],t.x,t.y),t.y+=s+o,r+1===a.length&&(t.y+=e.titleMarginBottom-o)}},drawBody:function(t,e,n){var a,r=e.bodyFontSize,i=e.bodySpacing,s=e._bodyAlign,o=e.body,u=e.displayColors,l=e.labelColors,d=0,c=u?je(e,"left"):0;n.textAlign=s,n.textBaseline="top",n.font=dt.fontString(r,e._bodyFontStyle,e._bodyFontFamily),t.x=je(e,s);var f=function(e){n.fillText(e,t.x+d,t.y),t.y+=r+i};n.fillStyle=e.bodyFontColor,dt.each(e.beforeBody,f),d=u&&"right"!==s?"center"===s?r/2+1:r+2:0,dt.each(o,(function(i,s){n.fillStyle=a=e.labelTextColors[s],dt.each(i.before,f),dt.each(i.lines,(function(i){u&&(n.fillStyle=e.legendColorBackground,n.fillRect(c,t.y,r,r),n.lineWidth=1,n.strokeStyle=l[s].borderColor,n.strokeRect(c,t.y,r,r),n.fillStyle=l[s].backgroundColor,n.fillRect(c+1,t.y+1,r-2,r-2),n.fillStyle=a),f(i)})),dt.each(i.after,f)})),d=0,dt.each(e.afterBody,f),t.y-=i},drawFooter:function(t,e,n){var a=e.footer;a.length&&(t.x=je(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=e._footerAlign,n.textBaseline="top",n.fillStyle=e.footerFontColor,n.font=dt.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),dt.each(a,(function(a){n.fillText(a,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing})))},drawBackground:function(t,e,n,a){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var r=e.xAlign,i=e.yAlign,s=t.x,o=t.y,u=a.width,l=a.height,d=e.cornerRadius;n.beginPath(),n.moveTo(s+d,o),"top"===i&&this.drawCaret(t,a),n.lineTo(s+u-d,o),n.quadraticCurveTo(s+u,o,s+u,o+d),"center"===i&&"right"===r&&this.drawCaret(t,a),n.lineTo(s+u,o+l-d),n.quadraticCurveTo(s+u,o+l,s+u-d,o+l),"bottom"===i&&this.drawCaret(t,a),n.lineTo(s+d,o+l),n.quadraticCurveTo(s,o+l,s,o+l-d),"center"===i&&"left"===r&&this.drawCaret(t,a),n.lineTo(s,o+d),n.quadraticCurveTo(s,o,s+d,o),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},a={x:e.x,y:e.y},r=Math.abs(e.opacity<.001)?0:e.opacity;this._options.enabled&&(e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length)&&(t.save(),t.globalAlpha=r,this.drawBackground(a,e,t,n),a.y+=e.yPadding,this.drawTitle(a,e,t),this.drawBody(a,e,t),this.drawFooter(a,e,t),t.restore())}},handleEvent:function(t){var e,n=this,a=n._options;return n._lastActive=n._lastActive||[],n._active="mouseout"===t.type?[]:n._chart.getElementsAtEventForMode(t,a.mode,a),(e=!dt.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(a.enabled||a.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}});Ge.positioners=De;var Ve=dt.valueOrDefault;function ze(){return dt.merge({},[].slice.call(arguments),{merger:function(t,e,n,a){if("xAxes"===t||"yAxes"===t){var r,i,s,o=n[t].length;for(e[t]||(e[t]=[]),r=0;r<o;++r)i=Ve((s=n[t][r]).type,"xAxes"===t?"category":"linear"),r>=e[t].length&&e[t].push({}),dt.merge(e[t][r],!e[t][r].type||s.type&&s.type!==e[t][r].type?[Ee.getScaleDefaults(i),s]:s)}else dt._merger(t,e,n,a)}})}function Be(){return dt.merge({},[].slice.call(arguments),{merger:function(t,e,n,a){var r=e[t]||{},i=n[t];"scales"===t?e[t]=ze(r,i):"scale"===t?e[t]=dt.merge(r,[Ee.getScaleDefaults(i.type),i]):dt._merger(t,e,n,a)}})}function Ye(t){var e=t.options;dt.each(t.scales,(function(e){ve.removeBox(t,e)})),e=Be(ot.global,ot[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function He(t){return"top"===t||"bottom"===t}ot._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ue=function(t,e){return this.construct(t,e),this};dt.extend(Ue.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Be(ot.global,ot[t.type],t.options||{}),t}(e);var a=Ae.acquireContext(t,e),r=a&&a.canvas,i=r&&r.height,s=r&&r.width;n.id=dt.uid(),n.ctx=a,n.canvas=r,n.config=e,n.width=s,n.height=i,n.aspectRatio=i?s/i:null,n.options=e.options,n._bufferedRender=!1,n.chart=n,n.controller=n,Ue.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),a&&r?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return ke.notify(t,"beforeInit"),dt.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),ke.notify(t,"afterInit"),t},clear:function(){return dt.canvas.clear(this),this},stop:function(){return mt.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,a=e.canvas,r=n.maintainAspectRatio&&e.aspectRatio||null,i=Math.max(0,Math.floor(dt.getMaximumWidth(a))),s=Math.max(0,Math.floor(r?i/r:dt.getMaximumHeight(a)));if((e.width!==i||e.height!==s)&&(a.width=e.width=i,a.height=e.height=s,a.style.width=i+"px",a.style.height=s+"px",dt.retinaScale(e,n.devicePixelRatio),!t)){var o={width:i,height:s};ke.notify(e,"resize",[o]),n.onResize&&n.onResize(e,o),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;dt.each(e.xAxes,(function(t,e){t.id=t.id||"x-axis-"+e})),dt.each(e.yAxes,(function(t,e){t.id=t.id||"y-axis-"+e})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},a=[],r=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(a=a.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&a.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),dt.each(a,(function(e){var a=e.options,i=a.id,s=Ve(a.type,e.dtype);He(a.position)!==He(e.dposition)&&(a.position=e.dposition),r[i]=!0;var o=null;if(i in n&&n[i].type===s)(o=n[i]).options=a,o.ctx=t.ctx,o.chart=t;else{var u=Ee.getScaleConstructor(s);if(!u)return;o=new u({id:i,type:s,options:a,ctx:t.ctx,chart:t}),n[o.id]=o}o.mergeTicksOptions(),e.isDefault&&(t.scale=o)})),dt.each(r,(function(t,e){t||delete n[e]})),t.scales=n,Ee.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return dt.each(t.data.datasets,(function(n,a){var r=t.getDatasetMeta(a),i=n.type||t.config.type;if(r.type&&r.type!==i&&(t.destroyDatasetMeta(a),r=t.getDatasetMeta(a)),r.type=i,r.controller)r.controller.updateIndex(a),r.controller.linkScales();else{var s=oe[r.type];if(void 0===s)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new s(t,a),e.push(r.controller)}}),t),e},resetElements:function(){var t=this;dt.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ye(e),ke._invalidate(e),!1!==ke.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var n=e.buildOrUpdateControllers();dt.each(e.data.datasets,(function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()}),e),e.updateLayout(),e.options.animation&&e.options.animation.duration&&dt.each(n,(function(t){t.reset()})),e.updateDatasets(),e.tooltip.initialize(),e.lastActive=[],ke.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){!1!==ke.notify(this,"beforeLayout")&&(ve.update(this,this.width,this.height),ke.notify(this,"afterScaleUpdate"),ke.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==ke.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);ke.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==ke.notify(this,"beforeDatasetUpdate",[n])&&(e.controller.update(),ke.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,a=Ve(t.duration,n&&n.duration),r=t.lazy;if(!1!==ke.notify(e,"beforeRender")){var i=function(t){ke.notify(e,"afterRender"),dt.callback(n&&n.onComplete,[t],e)};if(n&&a){var s=new bt({numSteps:a/16.66,easing:t.easing||n.easing,render:function(t,e){var n=e.currentStep,a=n/e.numSteps;t.draw((0,dt.easing.effects[e.easing])(a),a,n)},onAnimationProgress:n.onProgress,onAnimationComplete:i});mt.addAnimation(e,s,a,r)}else e.draw(),i(new bt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),dt.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==ke.notify(e,"beforeDraw",[t])&&(dt.each(e.boxes,(function(t){t.draw(e.chartArea)}),e),e.drawDatasets(t),e._drawTooltip(t),ke.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==ke.notify(e,"beforeDatasetsDraw",[t])){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);ke.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this.getDatasetMeta(t),a={meta:n,index:t,easingValue:e};!1!==ke.notify(this,"beforeDatasetDraw",[a])&&(n.controller.draw(e),ke.notify(this,"afterDatasetDraw",[a]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==ke.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),ke.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return ge.modes.single(this,t)},getElementsAtEvent:function(t){return ge.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ge.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var a=ge.modes[e];return"function"==typeof a?a(this,t,n):[]},getDatasetAtEvent:function(t){return ge.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],a=n._meta&&n._meta[e];a&&(a.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,a=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);a&&(n.unbindEvents(),dt.canvas.clear(n),Ae.releaseContext(n.ctx),n.canvas=null,n.ctx=null),ke.notify(n,"destroy"),delete Ue.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ge({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};dt.each(t.options.events,(function(a){Ae.addEventListener(t,a,n),e[a]=n})),t.options.responsive&&(n=function(){t.resize()},Ae.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,dt.each(e,(function(e,n){Ae.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var a,r,i,s=n?"setHoverStyle":"removeHoverStyle";for(r=0,i=t.length;r<i;++r)(a=t[r])&&this.getDatasetMeta(a._datasetIndex).controller[s](a)},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==ke.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var a=e.handleEvent(t);n&&(a=n._start?n.handleEvent(t):a|n.handleEvent(t)),ke.notify(e,"afterEvent",[t]);var r=e._bufferedRequest;return r?e.render(r):a&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,a=n.options||{},r=a.hover;return n.lastActive=n.lastActive||[],n.active="mouseout"===t.type?[]:n.getElementsAtEventForMode(t,r.mode,r),dt.callback(a.onHover||a.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||a.onClick&&a.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,r.mode,!1),n.active.length&&r.mode&&n.updateHoverStyle(n.active,r.mode,!0),e=!dt.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),Ue.instances={};var We=Ue;function Ke(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function $e(t){this.options=t||{}}Ue.Controller=Ue,Ue.types={},dt.configMerge=Be,dt.scaleMerge=ze,dt.extend($e.prototype,{formats:Ke,parse:Ke,format:Ke,add:Ke,diff:Ke,startOf:Ke,endOf:Ke,_create:function(t){return t}}),$e.override=function(t){dt.extend($e.prototype,t)};var Ze={_date:$e},Je={formatters:{values:function(t){return dt.isArray(t)?t:""+t},linear:function(t,e,n){var a=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var r=dt.log10(Math.abs(a)),i="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var s=dt.log10(Math.abs(t));i=t.toExponential(Math.floor(s)-Math.floor(r))}else{var o=-1*Math.floor(r);o=Math.max(Math.min(o,20),0),i=t.toFixed(o)}else i="0";return i},logarithmic:function(t,e,n){var a=t/Math.pow(10,Math.floor(dt.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===e||e===n.length-1?t.toExponential():""}}},Qe=dt.valueOrDefault,Xe=dt.valueAtIndexOrDefault;function tn(t){var e,n,a=[];for(e=0,n=t.length;e<n;++e)a.push(t[e].label);return a}function en(t,e,n){return dt.isArray(e)?dt.longestText(t,n,e):t.measureText(e).width}ot._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Je.formatters.values,minor:{},major:{}}});var nn=gt.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){dt.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a,r,i,s,o,u,l=this;for(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=dt.extend({left:0,right:0,top:0,bottom:0},n),l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],o=l.afterBuildTicks(o)||o,l.beforeTickToLabelConversion(),i=l.convertTicksToLabels(o)||l.ticks,l.afterTickToLabelConversion(),l.ticks=i,a=0,r=i.length;a<r;++a)s=i[a],(u=o[a])?u.label=s:o.push(u={label:s,major:!1});return l._ticks=o,l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l.afterUpdate(),l.minSize},afterUpdate:function(){dt.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){dt.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){dt.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){dt.callback(this.options.beforeDataLimits,[this])},determineDataLimits:dt.noop,afterDataLimits:function(){dt.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){dt.callback(this.options.beforeBuildTicks,[this])},buildTicks:dt.noop,afterBuildTicks:function(t){var e=this;return dt.isArray(t)&&t.length?dt.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=dt.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){dt.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){dt.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){dt.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,n=t.options.ticks,a=tn(t._ticks),r=dt.options._parseFont(n);e.font=r.string;var i=n.minRotation||0;if(a.length&&t.options.display&&t.isHorizontal())for(var s,o=dt.longestText(e,r.string,a,t.longestTextCache),u=o,l=t.getPixelForTick(1)-t.getPixelForTick(0)-6;u>l&&i<n.maxRotation;){var d=dt.toRadians(i);if(s=Math.cos(d),Math.sin(d)*o>t.maxHeight){i--;break}i++,u=s*o}t.labelRotation=i},afterCalculateTickRotation:function(){dt.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){dt.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=tn(t._ticks),a=t.options,r=a.ticks,i=a.scaleLabel,s=a.gridLines,o=t._isVisible(),u=a.position,l=t.isHorizontal(),d=dt.options._parseFont,c=d(r),f=a.gridLines.tickMarkLength;if(e.width=l?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:o&&s.drawTicks?f:0,e.height=l?o&&s.drawTicks?f:0:t.maxHeight,i.display&&o){var h=d(i),g=dt.options.toPadding(i.padding),p=h.lineHeight+g.height;l?e.height+=p:e.width+=p}if(r.display&&o){var b=dt.longestText(t.ctx,c.string,n,t.longestTextCache),m=dt.numberOfLabelLines(n),y=.5*c.size,v=t.options.ticks.padding;if(t._maxLabelLines=m,t.longestLabelWidth=b,l){var x=dt.toRadians(t.labelRotation),_=Math.cos(x),T=Math.sin(x);e.height=Math.min(t.maxHeight,e.height+(T*b+c.lineHeight*m+y)+v),t.ctx.font=c.string;var O,w,S=en(t.ctx,n[0],c.string),I=en(t.ctx,n[n.length-1],c.string),N=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(n.length-1);0!==t.labelRotation?(O="bottom"===u?_*S:_*y,w="bottom"===u?_*y:_*I):(O=S/2,w=I/2),t.paddingLeft=Math.max(O-N,0)+3,t.paddingRight=Math.max(w-C,0)+3}else r.mirror?b=0:b+=v+y,e.width=Math.min(t.maxWidth,e.width+b),t.paddingTop=c.size/2,t.paddingBottom=c.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){dt.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(dt.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:dt.noop,getPixelForValue:dt.noop,getValueForPixel:dt.noop,getPixelForTick:function(t){var e=this,n=e.options.offset;if(e.isHorizontal()){var a=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),r=a*t+e.paddingLeft;return n&&(r+=a/2),e.left+r+(e.isFullWidth()?e.margins.left:0)}return e.top+t*((e.height-(e.paddingTop+e.paddingBottom))/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;return e.isHorizontal()?e.left+((e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft)+(e.isFullWidth()?e.margins.left:0):e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,a=this,r=a.isHorizontal(),i=t.length,s=!1,o=a.options.ticks.minor.maxTicksLimit,u=a._tickSize()*(i-1),l=r?a.width-(a.paddingLeft+a.paddingRight):a.height-(a.paddingTop+a.PaddingBottom),d=[];for(u>l&&(s=1+Math.floor(u/l)),i>o&&(s=Math.max(s,1+Math.floor(i/o))),e=0;e<i;e++)n=t[e],s>1&&e%s>0&&delete n.label,d.push(n);return d},_tickSize:function(){var t=this,e=t.isHorizontal(),n=t.options.ticks.minor,a=dt.toRadians(t.labelRotation),r=Math.abs(Math.cos(a)),i=Math.abs(Math.sin(a)),s=n.autoSkipPadding||0,o=t.longestLabelWidth+s||0,u=dt.options._parseFont(n),l=t._maxLabelLines*u.lineHeight+s||0;return e?l*r>o*i?o/r:l/i:l*i<o*r?l/r:o/i},_isVisible:function(){var t,e,n,a=this.chart,r=this.options.display;if("auto"!==r)return!!r;for(t=0,e=a.data.datasets.length;t<e;++t)if(a.isDatasetVisible(t)&&((n=a.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,n=e.options;if(e._isVisible()){var a,r,i,s=e.chart,o=e.ctx,u=ot.global.defaultFontColor,l=n.ticks.minor,d=n.ticks.major||l,c=n.gridLines,f=n.scaleLabel,h=n.position,g=0!==e.labelRotation,p=l.mirror,b=e.isHorizontal(),m=dt.options._parseFont,y=l.display&&l.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),v=Qe(l.fontColor,u),x=m(l),_=x.lineHeight,T=Qe(d.fontColor,u),O=m(d),w=l.padding,S=l.labelOffset,I=c.drawTicks?c.tickMarkLength:0,N=Qe(f.fontColor,u),C=m(f),R=dt.options.toPadding(f.padding),A=dt.toRadians(e.labelRotation),k=[],E=c.drawBorder?Xe(c.lineWidth,0,0):0,L=dt._alignPixel;if("top"===h?(a=L(s,e.bottom,E),r=e.bottom-I,i=a-E/2):"bottom"===h?(a=L(s,e.top,E),r=a+E/2,i=e.top+I):"left"===h?(a=L(s,e.right,E),r=e.right-I,i=a-E/2):(a=L(s,e.left,E),r=a+E/2,i=e.left+I),dt.each(y,(function(a,o){if(!dt.isNullOrUndef(a.label)){var u,l,d,f,m,y,v,x,T,O,N,C,R,D,P,M,q=a.label;o===e.zeroLineIndex&&n.offset===c.offsetGridLines?(u=c.zeroLineWidth,l=c.zeroLineColor,d=c.zeroLineBorderDash||[],f=c.zeroLineBorderDashOffset||0):(u=Xe(c.lineWidth,o),l=Xe(c.color,o),d=c.borderDash||[],f=c.borderDashOffset||0);var j=dt.isArray(q)?q.length:1,F=function(t,e,n){var a=t.getPixelForTick(e);return n&&(1===t.getTicks().length?a-=t.isHorizontal()?Math.max(a-t.left,t.right-a):Math.max(a-t.top,t.bottom-a):a-=0===e?(t.getPixelForTick(1)-a)/2:(a-t.getPixelForTick(e-1))/2),a}(e,o,c.offsetGridLines);if(b){var G=I+w;F<e.left-1e-7&&(l="rgba(0,0,0,0)"),m=v=T=N=L(s,F,u),y=r,x=i,R=e.getPixelForTick(o)+S,"top"===h?(O=L(s,t.top,E)+E/2,C=t.bottom,P=((g?1:.5)-j)*_,M=g?"left":"center",D=e.bottom-G):(O=t.top,C=L(s,t.bottom,E)-E/2,P=(g?0:.5)*_,M=g?"right":"center",D=e.top+G)}else{var V=(p?0:I)+w;F<e.top-1e-7&&(l="rgba(0,0,0,0)"),m=r,v=i,y=x=O=C=L(s,F,u),D=e.getPixelForTick(o)+S,P=(1-j)*_/2,"left"===h?(T=L(s,t.left,E)+E/2,N=t.right,M=p?"left":"right",R=e.right-V):(T=t.left,N=L(s,t.right,E)-E/2,M=p?"right":"left",R=e.left+V)}k.push({tx1:m,ty1:y,tx2:v,ty2:x,x1:T,y1:O,x2:N,y2:C,labelX:R,labelY:D,glWidth:u,glColor:l,glBorderDash:d,glBorderDashOffset:f,rotation:-1*A,label:q,major:a.major,textOffset:P,textAlign:M})}})),dt.each(k,(function(t){var e=t.glWidth,n=t.glColor;if(c.display&&e&&n&&(o.save(),o.lineWidth=e,o.strokeStyle=n,o.setLineDash&&(o.setLineDash(t.glBorderDash),o.lineDashOffset=t.glBorderDashOffset),o.beginPath(),c.drawTicks&&(o.moveTo(t.tx1,t.ty1),o.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&&(o.moveTo(t.x1,t.y1),o.lineTo(t.x2,t.y2)),o.stroke(),o.restore()),l.display){o.save(),o.translate(t.labelX,t.labelY),o.rotate(t.rotation),o.font=t.major?O.string:x.string,o.fillStyle=t.major?T:v,o.textBaseline="middle",o.textAlign=t.textAlign;var a=t.label,r=t.textOffset;if(dt.isArray(a))for(var i=0;i<a.length;++i)o.fillText(""+a[i],0,r),r+=_;else o.fillText(a,0,r);o.restore()}})),f.display){var D,P,M=0,q=C.lineHeight/2;if(b)D=e.left+(e.right-e.left)/2,P="bottom"===h?e.bottom-q-R.bottom:e.top+q+R.top;else{var j="left"===h;D=j?e.left+q+R.top:e.right-q-R.top,P=e.top+(e.bottom-e.top)/2,M=j?-.5*Math.PI:.5*Math.PI}o.save(),o.translate(D,P),o.rotate(M),o.textAlign="center",o.textBaseline="middle",o.fillStyle=N,o.font=C.string,o.fillText(f.labelString,0,0),o.restore()}if(E){var F,G,V,z,B=E,Y=Xe(c.lineWidth,y.length-1,0);b?(F=L(s,e.left,B)-B/2,G=L(s,e.right,Y)+Y/2,V=z=a):(V=L(s,e.top,B)-B/2,z=L(s,e.bottom,Y)+Y/2,F=G=a),o.lineWidth=E,o.strokeStyle=Xe(c.color,0),o.beginPath(),o.moveTo(F,V),o.lineTo(G,z),o.stroke()}}}}),an=nn.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,n=e.getLabels();e.minIndex=0,e.maxIndex=n.length-1,void 0!==e.options.ticks.min&&(t=n.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=n.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=n[e.minIndex],e.max=n[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,a=n.chart;return a.getDatasetMeta(e).controller._getValueScaleId()===n.id?n.getRightValue(a.data.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var n,a=this,r=a.options.offset,i=Math.max(a.maxIndex+1-a.minIndex-(r?0:1),1);if(null!=t&&(n=a.isHorizontal()?t.x:t.y),void 0!==n||void 0!==t&&isNaN(e)){var s=a.getLabels().indexOf(t=n||t);e=-1!==s?s:e}if(a.isHorizontal()){var o=a.width/i,u=o*(e-a.minIndex);return r&&(u+=o/2),a.left+u}var l=a.height/i,d=l*(e-a.minIndex);return r&&(d+=l/2),a.top+d},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,n=e.options.offset,a=Math.max(e._ticks.length-(n?0:1),1),r=e.isHorizontal(),i=(r?e.width:e.height)/a;return t-=r?e.left:e.top,n&&(t-=i/2),(t<=0?0:Math.round(t/i))+e.minIndex},getBasePixel:function(){return this.bottom}});an._defaults={position:"bottom"};var rn=dt.isNullOrUndef,sn=nn.extend({getRightValue:function(t){return"string"==typeof t?+t:nn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=dt.sign(t.min),a=dt.sign(t.max);n<0&&a<0?t.max=0:n>0&&a>0&&(t.min=0)}var r=void 0!==e.min||void 0!==e.suggestedMin,i=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(t.min=null===t.min?e.suggestedMin:Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(t.max=null===t.max?e.suggestedMax:Math.max(t.max,e.suggestedMax)),r!==i&&t.min>=t.max&&(r?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,a=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),a=a||11),a&&(t=Math.min(a,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:dt.noop,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),a={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:dt.valueOrDefault(e.fixedStepSize,e.stepSize)},r=t.ticks=function(t,e){var n,a,r,i,s=[],o=t.stepSize,u=o||1,l=t.maxTicks-1,d=t.min,c=t.max,f=t.precision,h=e.min,g=e.max,p=dt.niceNum((g-h)/l/u)*u;if(p<1e-14&&rn(d)&&rn(c))return[h,g];(i=Math.ceil(g/p)-Math.floor(h/p))>l&&(p=dt.niceNum(i*p/l/u)*u),o||rn(f)?n=Math.pow(10,dt._decimalPlaces(p)):(n=Math.pow(10,f),p=Math.ceil(p*n)/n),a=Math.floor(h/p)*p,r=Math.ceil(g/p)*p,o&&(!rn(d)&&dt.almostWhole(d/p,p/1e3)&&(a=d),!rn(c)&&dt.almostWhole(c/p,p/1e3)&&(r=c)),i=dt.almostEquals(i=(r-a)/p,Math.round(i),p/1e3)?Math.round(i):Math.ceil(i),a=Math.round(a*n)/n,r=Math.round(r*n)/n,s.push(rn(d)?a:d);for(var b=1;b<i;++b)s.push(Math.round((a+b*p)*n)/n);return s.push(rn(c)?r:c),s}(a,t);t.handleDirectionalChanges(),t.max=dt.max(r),t.min=dt.min(r),e.reverse?(r.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),nn.prototype.convertTicksToLabels.call(t)}}),on={position:"left",ticks:{callback:Je.formatters.linear}},un=sn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,a=n.data.datasets,r=t.isHorizontal();function i(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var s=e.stacked;if(void 0===s&&dt.each(a,(function(t,e){if(!s){var a=n.getDatasetMeta(e);n.isDatasetVisible(e)&&i(a)&&void 0!==a.stack&&(s=!0)}})),e.stacked||s){var o={};dt.each(a,(function(a,r){var s=n.getDatasetMeta(r),u=[s.type,void 0===e.stacked&&void 0===s.stack?r:"",s.stack].join(".");void 0===o[u]&&(o[u]={positiveValues:[],negativeValues:[]});var l=o[u].positiveValues,d=o[u].negativeValues;n.isDatasetVisible(r)&&i(s)&&dt.each(a.data,(function(n,a){var r=+t.getRightValue(n);isNaN(r)||s.data[a].hidden||(l[a]=l[a]||0,d[a]=d[a]||0,e.relativePoints?l[a]=100:r<0?d[a]+=r:l[a]+=r)}))})),dt.each(o,(function(e){var n=e.positiveValues.concat(e.negativeValues),a=dt.min(n),r=dt.max(n);t.min=null===t.min?a:Math.min(t.min,a),t.max=null===t.max?r:Math.max(t.max,r)}))}else dt.each(a,(function(e,a){var r=n.getDatasetMeta(a);n.isDatasetVisible(a)&&i(r)&&dt.each(e.data,(function(e,n){var a=+t.getRightValue(e);isNaN(a)||r.data[n].hidden||(null===t.min?t.min=a:a<t.min&&(t.min=a),null===t.max?t.max=a:a>t.max&&(t.max=a))}))}));t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=dt.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,n=e.start,a=+e.getRightValue(t),r=e.end-n;return e.isHorizontal()?e.left+e.width/r*(a-n):e.bottom-e.height/r*(a-n)},getValueForPixel:function(t){var e=this,n=e.isHorizontal();return e.start+(n?t-e.left:e.bottom-t)/(n?e.width:e.height)*(e.end-e.start)},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});un._defaults=on;var ln=dt.valueOrDefault,dn={position:"left",ticks:{callback:Je.formatters.logarithmic}};function cn(t,e){return dt.isFinite(t)&&t>=0?t:e}var fn=nn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,a=n.data.datasets,r=t.isHorizontal();function i(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var s=e.stacked;if(void 0===s&&dt.each(a,(function(t,e){if(!s){var a=n.getDatasetMeta(e);n.isDatasetVisible(e)&&i(a)&&void 0!==a.stack&&(s=!0)}})),e.stacked||s){var o={};dt.each(a,(function(a,r){var s=n.getDatasetMeta(r),u=[s.type,void 0===e.stacked&&void 0===s.stack?r:"",s.stack].join(".");n.isDatasetVisible(r)&&i(s)&&(void 0===o[u]&&(o[u]=[]),dt.each(a.data,(function(e,n){var a=o[u],r=+t.getRightValue(e);isNaN(r)||s.data[n].hidden||r<0||(a[n]=a[n]||0,a[n]+=r)})))})),dt.each(o,(function(e){if(e.length>0){var n=dt.min(e),a=dt.max(e);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?a:Math.max(t.max,a)}}))}else dt.each(a,(function(e,a){var r=n.getDatasetMeta(a);n.isDatasetVisible(a)&&i(r)&&dt.each(e.data,(function(e,n){var a=+t.getRightValue(e);isNaN(a)||r.data[n].hidden||a<0||(null===t.min?t.min=a:a<t.min&&(t.min=a),null===t.max?t.max=a:a>t.max&&(t.max=a),0!==a&&(null===t.minNotZero||a<t.minNotZero)&&(t.minNotZero=a))}))}));this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=cn(e.min,t.min),t.max=cn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(dt.log10(t.min))-1),t.max=Math.pow(10,Math.floor(dt.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(dt.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(dt.log10(t.min))+1):10),null===t.minNotZero&&(t.minNotZero=t.min>0?t.min:t.max<1?Math.pow(10,Math.floor(dt.log10(t.max))):1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),a={min:cn(e.min),max:cn(e.max)},r=t.ticks=function(t,e){var n,a,r=[],i=ln(t.min,Math.pow(10,Math.floor(dt.log10(e.min)))),s=Math.floor(dt.log10(e.max)),o=Math.ceil(e.max/Math.pow(10,s));0===i?(n=Math.floor(dt.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,n)),r.push(i),i=a*Math.pow(10,n)):(n=Math.floor(dt.log10(i)),a=Math.floor(i/Math.pow(10,n)));var u=n<0?Math.pow(10,Math.abs(n)):1;do{r.push(i),10==++a&&(a=1,u=++n>=0?1:u),i=Math.round(a*Math.pow(10,n)*u)/u}while(n<s||n===s&&a<o);var l=ln(t.max,i);return r.push(l),r}(a,t);t.max=dt.max(r),t.min=dt.min(r),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&r.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),nn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(dt.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,n,a,r,i,s=this,o=s.options.ticks,u=o.reverse,l=dt.log10,d=s._getFirstTickValue(s.minNotZero),c=0;return t=+s.getRightValue(t),u?(a=s.end,r=s.start,i=-1):(a=s.start,r=s.end,i=1),s.isHorizontal()?(e=s.width,n=u?s.right:s.left):(e=s.height,i*=-1,n=u?s.top:s.bottom),t!==a&&(0===a&&(e-=c=ln(o.fontSize,ot.global.defaultFontSize),a=d),0!==t&&(c+=e/(l(r)-l(a))*(l(t)-l(a))),n+=i*c),n},getValueForPixel:function(t){var e,n,a,r,i=this,s=i.options.ticks,o=s.reverse,u=dt.log10,l=i._getFirstTickValue(i.minNotZero);if(o?(n=i.end,a=i.start):(n=i.start,a=i.end),i.isHorizontal()?(e=i.width,r=o?i.right-t:t-i.left):(e=i.height,r=o?t-i.top:i.bottom-t),r!==n){if(0===n){var d=ln(s.fontSize,ot.global.defaultFontSize);r-=d,e-=d,n=l}r*=u(a)-u(n),r/=e,r=Math.pow(10,u(n)+r)}return r}});fn._defaults=dn;var hn=dt.valueOrDefault,gn=dt.valueAtIndexOrDefault,pn=dt.options.resolve,bn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Je.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function mn(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function yn(t){var e=t.ticks;return e.display&&t.display?hn(e.fontSize,ot.global.defaultFontSize)+2*e.backdropPaddingY:0}function vn(t,e,n,a,r){return t===a||t===r?{start:e-n/2,end:e+n/2}:t<a||t>r?{start:e-n,end:e}:{start:e,end:e+n}}function xn(t){return 0===t||180===t?"center":t<180?"left":"right"}function _n(t,e,n,a){var r,i,s=n.y+a/2;if(dt.isArray(e))for(r=0,i=e.length;r<i;++r)t.fillText(e[r],n.x,s),s+=a;else t.fillText(e,n.x,s)}function Tn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function On(t){return dt.isNumber(t)?t:0}var wn=sn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=yn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;dt.each(e.data.datasets,(function(r,i){if(e.isDatasetVisible(i)){var s=e.getDatasetMeta(i);dt.each(r.data,(function(e,r){var i=+t.getRightValue(e);isNaN(i)||s.data[r].hidden||(n=Math.min(i,n),a=Math.max(i,a))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=a===Number.NEGATIVE_INFINITY?0:a,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/yn(this.options))},convertTicksToLabels:function(){var t=this;sn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,a,r=dt.options._parseFont(t.options.pointLabels),i={l:0,r:t.width,t:0,b:t.height-t.paddingTop},s={};t.ctx.font=r.string,t._pointLabelSizes=[];var o,u,l,d=mn(t);for(e=0;e<d;e++){a=t.getPointPosition(e,t.drawingArea+5),o=t.ctx,u=r.lineHeight,n=dt.isArray(l=t.pointLabels[e]||"")?{w:dt.longestText(o,o.font,l),h:l.length*u}:{w:o.measureText(l).width,h:u},t._pointLabelSizes[e]=n;var c=t.getIndexAngle(e),f=dt.toDegrees(c)%360,h=vn(f,a.x,n.w,0,180),g=vn(f,a.y,n.h,90,270);h.start<i.l&&(i.l=h.start,s.l=c),h.end>i.r&&(i.r=h.end,s.r=c),g.start<i.t&&(i.t=g.start,s.t=c),g.end>i.b&&(i.b=g.end,s.b=c)}t.setReductions(t.drawingArea,i,s)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var a=this,r=e.l/Math.sin(n.l),i=Math.max(e.r-a.width,0)/Math.sin(n.r),s=-e.t/Math.cos(n.t),o=-Math.max(e.b-(a.height-a.paddingTop),0)/Math.cos(n.b);r=On(r),i=On(i),s=On(s),o=On(o),a.drawingArea=Math.min(Math.floor(t-(r+i)/2),Math.floor(t-(s+o)/2)),a.setCenterPoint(r,i,s,o)},setCenterPoint:function(t,e,n,a){var r=this,i=n+r.drawingArea,s=r.height-r.paddingTop-a-r.drawingArea;r.xCenter=Math.floor((t+r.drawingArea+(r.width-e-r.drawingArea))/2+r.left),r.yCenter=Math.floor((i+s)/2+r.top+r.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/mn(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,a=e.ticks;if(e.display){var r=t.ctx,i=this.getIndexAngle(0),s=dt.options._parseFont(a);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,n=t.options,a=n.angleLines,r=n.gridLines,i=n.pointLabels,s=hn(a.lineWidth,r.lineWidth),o=hn(a.color,r.color),u=yn(n);e.save(),e.lineWidth=s,e.strokeStyle=o,e.setLineDash&&(e.setLineDash(pn([a.borderDash,r.borderDash,[]])),e.lineDashOffset=pn([a.borderDashOffset,r.borderDashOffset,0]));var l=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),d=dt.options._parseFont(i);e.font=d.string,e.textBaseline="middle";for(var c=mn(t)-1;c>=0;c--){if(a.display&&s&&o){var f=t.getPointPosition(c,l);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(f.x,f.y),e.stroke()}if(i.display){var h=t.getPointPosition(c,l+(0===c?u/2:0)+5),g=gn(i.fontColor,c,ot.global.defaultFontColor);e.fillStyle=g;var p=t.getIndexAngle(c),b=dt.toDegrees(p);e.textAlign=xn(b),Tn(b,t._pointLabelSizes[c],h),_n(e,t.pointLabels[c]||"",h,d.lineHeight)}}e.restore()}(t),dt.each(t.ticks,(function(e,o){if(o>0||a.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[o]);if(n.display&&0!==o&&function(t,e,n,a){var r,i=t.ctx,s=e.circular,o=mn(t),u=gn(e.color,a-1),l=gn(e.lineWidth,a-1);if((s||o)&&u&&l){if(i.save(),i.strokeStyle=u,i.lineWidth=l,i.setLineDash&&(i.setLineDash(e.borderDash||[]),i.lineDashOffset=e.borderDashOffset||0),i.beginPath(),s)i.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{r=t.getPointPosition(0,n),i.moveTo(r.x,r.y);for(var d=1;d<o;d++)r=t.getPointPosition(d,n),i.lineTo(r.x,r.y)}i.closePath(),i.stroke(),i.restore()}}(t,n,u,o),a.display){var l=hn(a.fontColor,ot.global.defaultFontColor);if(r.font=s.string,r.save(),r.translate(t.xCenter,t.yCenter),r.rotate(i),a.showLabelBackdrop){var d=r.measureText(e).width;r.fillStyle=a.backdropColor,r.fillRect(-d/2-a.backdropPaddingX,-u-s.size/2-a.backdropPaddingY,d+2*a.backdropPaddingX,s.size+2*a.backdropPaddingY)}r.textAlign="center",r.textBaseline="middle",r.fillStyle=l,r.fillText(e,0,-u),r.restore()}}}))}}});wn._defaults=bn;var Sn=dt.valueOrDefault,In=Number.MIN_SAFE_INTEGER||-9007199254740991,Nn=Number.MAX_SAFE_INTEGER||9007199254740991,Cn={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},Rn=Object.keys(Cn);function An(t,e){return t-e}function kn(t){var e,n,a,r={},i=[];for(e=0,n=t.length;e<n;++e)r[a=t[e]]||(r[a]=!0,i.push(a));return i}function En(t,e,n,a){var r=function(t,e,n){for(var a,r,i,s=0,o=t.length-1;s>=0&&s<=o;){if(i=t[a=s+o>>1],!(r=t[a-1]||null))return{lo:null,hi:i};if(i[e]<n)s=a+1;else{if(!(r[e]>n))return{lo:r,hi:i};o=a-1}}return{lo:i,hi:null}}(t,e,n),i=r.lo?r.hi?r.lo:t[t.length-2]:t[0],s=r.lo?r.hi?r.hi:t[t.length-1]:t[1],o=s[e]-i[e];return i[a]+(s[a]-i[a])*(o?(n-i[e])/o:0)}function Ln(t,e){var n=t._adapter,a=t.options.time,r=a.parser,i=r||a.format,s=e;return"function"==typeof r&&(s=r(s)),dt.isFinite(s)||(s="string"==typeof i?n.parse(s,i):n.parse(s)),null!==s?+s:(r||"function"!=typeof i||(s=i(e),dt.isFinite(s)||(s=n.parse(s))),s)}function Dn(t,e){if(dt.isNullOrUndef(e))return null;var n=t.options.time,a=Ln(t,t.getRightValue(e));return null===a?a:(n.round&&(a=+t._adapter.startOf(a,n.round)),a)}function Pn(t){for(var e=Rn.indexOf(t)+1,n=Rn.length;e<n;++e)if(Cn[Rn[e]].common)return Rn[e]}var Mn=nn.extend({initialize:function(){this.mergeTicksOptions(),nn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),a=t._adapter=new Ze._date(e.adapters.date);return n.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),dt.mergeIf(n.displayFormats,a.formats()),nn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),nn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,a,r,i,s=this,o=s.chart,u=s._adapter,l=s.options.time,d=l.unit||"day",c=Nn,f=In,h=[],g=[],p=[],b=o.data.labels||[];for(t=0,n=b.length;t<n;++t)p.push(Dn(s,b[t]));for(t=0,n=(o.data.datasets||[]).length;t<n;++t)if(o.isDatasetVisible(t))if(dt.isObject((r=o.data.datasets[t].data)[0]))for(g[t]=[],e=0,a=r.length;e<a;++e)i=Dn(s,r[e]),h.push(i),g[t][e]=i;else{for(e=0,a=p.length;e<a;++e)h.push(p[e]);g[t]=p.slice(0)}else g[t]=[];p.length&&(p=kn(p).sort(An),c=Math.min(c,p[0]),f=Math.max(f,p[p.length-1])),h.length&&(h=kn(h).sort(An),c=Math.min(c,h[0]),f=Math.max(f,h[h.length-1])),c=Dn(s,l.min)||c,f=Dn(s,l.max)||f,c=c===Nn?+u.startOf(Date.now(),d):c,f=f===In?+u.endOf(Date.now(),d)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._horizontal=s.isHorizontal(),s._table=[],s._timestamps={data:h,datasets:g,labels:p}},buildTicks:function(){var t,e,n,a=this,r=a.min,i=a.max,s=a.options,o=s.time,u=[],l=[];switch(s.ticks.source){case"data":u=a._timestamps.data;break;case"labels":u=a._timestamps.labels;break;case"auto":default:u=function(t,e,n,a){var r,i=t._adapter,s=t.options,o=s.time,u=o.unit||function(t,e,n,a){var r,i,s=Rn.length;for(r=Rn.indexOf(t);r<s-1;++r)if((i=Cn[Rn[r]]).common&&Math.ceil((n-e)/((i.steps?i.steps[i.steps.length-1]:Nn)*i.size))<=a)return Rn[r];return Rn[s-1]}(o.minUnit,e,n,a),l=Pn(u),d=Sn(o.stepSize,o.unitStepSize),c="week"===u&&o.isoWeekday,f=s.ticks.major.enabled,h=Cn[u],g=e,p=n,b=[];for(d||(d=function(t,e,n,a){var r,i,s,o=e-t,u=Cn[n],l=u.size,d=u.steps;if(!d)return Math.ceil(o/(a*l));for(r=0,i=d.length;r<i&&(s=d[r],!(Math.ceil(o/(l*s))<=a));++r);return s}(e,n,u,a)),c&&(g=+i.startOf(g,"isoWeek",c),p=+i.startOf(p,"isoWeek",c)),g=+i.startOf(g,c?"day":u),(p=+i.startOf(p,c?"day":u))<n&&(p=+i.add(p,1,u)),r=g,f&&l&&!c&&!o.round&&(r=+i.startOf(r,l),r=+i.add(r,~~((g-r)/(h.size*d))*d,u));r<p;r=+i.add(r,d,u))b.push(+r);return b.push(+r),b}(a,r,i,a.getLabelCapacity(r))}for("ticks"===s.bounds&&u.length&&(r=u[0],i=u[u.length-1]),r=Dn(a,o.min)||r,i=Dn(a,o.max)||i,t=0,e=u.length;t<e;++t)(n=u[t])>=r&&n<=i&&l.push(n);return a.min=r,a.max=i,a._unit=o.unit||function(t,e,n,a,r){var i,s;for(i=Rn.length-1;i>=Rn.indexOf(n);i--)if(Cn[s=Rn[i]].common&&t._adapter.diff(r,a,s)>=e.length)return s;return Rn[n?Rn.indexOf(n):0]}(a,l,o.minUnit,a.min,a.max),a._majorUnit=Pn(a._unit),a._table=function(t,e,n,a){if("linear"===a||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var r,i,s,o,u,l=[],d=[e];for(r=0,i=t.length;r<i;++r)(o=t[r])>e&&o<n&&d.push(o);for(d.push(n),r=0,i=d.length;r<i;++r)u=d[r+1],o=d[r],void 0!==(s=d[r-1])&&void 0!==u&&Math.round((u+s)/2)===o||l.push({time:o,pos:r/(i-1)});return l}(a._timestamps.data,r,i,s.distribution),a._offsets=function(t,e,n,a,r){var i,s,o=0,u=0;return r.offset&&e.length&&(r.time.min||(i=En(t,"time",e[0],"pos"),o=1===e.length?1-i:(En(t,"time",e[1],"pos")-i)/2),r.time.max||(s=En(t,"time",e[e.length-1],"pos"),u=1===e.length?s:(s-En(t,"time",e[e.length-2],"pos"))/2)),{start:o,end:u}}(a._table,l,0,0,s),s.ticks.reverse&&l.reverse(),function(t,e,n){var a,r,i,s,o=[];for(a=0,r=e.length;a<r;++a)i=e[a],s=!!n&&i===+t._adapter.startOf(i,n),o.push({value:i,major:s});return o}(a,l,a._majorUnit)},getLabelForIndex:function(t,e){var n=this,a=n._adapter,r=n.chart.data,i=n.options.time,s=r.labels&&t<r.labels.length?r.labels[t]:"",o=r.datasets[e].data[t];return dt.isObject(o)&&(s=n.getRightValue(o)),i.tooltipFormat?a.format(Ln(n,s),i.tooltipFormat):"string"==typeof s?s:a.format(Ln(n,s),i.displayFormats.datetime)},tickFormatFunction:function(t,e,n,a){var r=this._adapter,i=this.options,s=i.time.displayFormats,o=s[this._unit],u=this._majorUnit,l=s[u],d=+r.startOf(t,u),c=i.ticks.major,f=c.enabled&&u&&l&&t===d,h=r.format(t,a||(f?l:o)),g=f?c:i.ticks.minor,p=Sn(g.callback,g.userCallback);return p?p(h,e,n):h},convertTicksToLabels:function(t){var e,n,a=[];for(e=0,n=t.length;e<n;++e)a.push(this.tickFormatFunction(t[e].value,e,t));return a},getPixelForOffset:function(t){var e=this,n=e.options.ticks.reverse,a=e._horizontal?e.width:e.height,r=e._horizontal?n?e.right:e.left:n?e.bottom:e.top,i=En(e._table,"time",t,"pos"),s=a*(e._offsets.start+i)/(e._offsets.start+1+e._offsets.end);return n?r-s:r+s},getPixelForValue:function(t,e,n){var a=null;if(void 0!==e&&void 0!==n&&(a=this._timestamps.datasets[n][e]),null===a&&(a=Dn(this,t)),null!==a)return this.getPixelForOffset(a)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,n=e._horizontal?e.width:e.height,a=En(e._table,"pos",(n?(t-(e._horizontal?e.left:e.top))/n:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,"time");return e._adapter._create(a)},getLabelWidth:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,a=dt.toRadians(e.maxRotation),r=Math.cos(a),i=Math.sin(a);return n*r+Sn(e.fontSize,ot.global.defaultFontSize)*i},getLabelCapacity:function(t){var e=this,n=e.tickFormatFunction(t,0,[],e.options.time.displayFormats.millisecond),a=e.getLabelWidth(n),r=e.isHorizontal()?e.width:e.height,i=Math.floor(r/a);return i>0?i:1}});Mn._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var qn={category:an,linear:un,logarithmic:fn,radialLinear:wn,time:Mn},jn={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Ze._date.override("function"==typeof t?{_id:"moment",formats:function(){return jn},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,a){return t(e).add(n,a).valueOf()},diff:function(e,n,a){return t.duration(t(e).diff(t(n))).as(a)},startOf:function(e,n,a){return e=t(e),"isoWeek"===n?e.isoWeekday(a).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),ot._set("global",{plugins:{filler:{propagate:!0}}});var Fn={dataset:function(t){var e=t.fill,n=t.chart,a=n.getDatasetMeta(e),r=a&&n.isDatasetVisible(e)&&a.dataset._children||[],i=r.length||0;return i?function(t,e){return e<i&&r[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,a=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===a?t.y:a}}}};function Gn(t,e,n){var a,r=t._model||{},i=r.fill;if(void 0===i&&(i=!!r.backgroundColor),!1===i||null===i)return!1;if(!0===i)return"origin";if(a=parseFloat(i,10),isFinite(a)&&Math.floor(a)===a)return"-"!==i[0]&&"+"!==i[0]||(a=e+a),!(a===e||a<0||a>=n)&&a;switch(i){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return i;default:return!1}}function Vn(t){var e,n=t.el._model||{},a=t.el._scale||{},r=t.fill,i=null;if(isFinite(r))return null;if("start"===r?i=void 0===n.scaleBottom?a.bottom:n.scaleBottom:"end"===r?i=void 0===n.scaleTop?a.top:n.scaleTop:void 0!==n.scaleZero?i=n.scaleZero:a.getBasePosition?i=a.getBasePosition():a.getBasePixel&&(i=a.getBasePixel()),null!=i){if(void 0!==i.x&&void 0!==i.y)return i;if(dt.isFinite(i))return{x:(e=a.isHorizontal())?i:null,y:e?null:i}}return null}function zn(t,e,n){var a,r=t[e].fill,i=[e];if(!n)return r;for(;!1!==r&&-1===i.indexOf(r);){if(!isFinite(r))return r;if(!(a=t[r]))return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function Bn(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),Fn[n](t))}function Yn(t){return t&&!t.skip}function Hn(t,e,n,a,r){var i;if(a&&r){for(t.moveTo(e[0].x,e[0].y),i=1;i<a;++i)dt.canvas.lineTo(t,e[i-1],e[i]);for(t.lineTo(n[r-1].x,n[r-1].y),i=r-1;i>0;--i)dt.canvas.lineTo(t,n[i],n[i-1],!0)}}var Un={id:"filler",afterDatasetsUpdate:function(t,e){var n,a,r,i,s=(t.data.datasets||[]).length,o=e.propagate,u=[];for(a=0;a<s;++a)i=null,(r=(n=t.getDatasetMeta(a)).dataset)&&r._model&&r instanceof qt.Line&&(i={visible:t.isDatasetVisible(a),fill:Gn(r,a,s),chart:t,el:r}),n.$filler=i,u.push(i);for(a=0;a<s;++a)(i=u[a])&&(i.fill=zn(u,a,o),i.boundary=Vn(i),i.mapper=Bn(i))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var a=t.ctx,r=n.el,i=r._view,s=r._children||[],o=n.mapper,u=i.backgroundColor||ot.global.defaultColor;o&&u&&s.length&&(dt.canvas.clipArea(a,t.chartArea),function(t,e,n,a,r,i){var s,o,u,l,d,c,f,h=e.length,g=a.spanGaps,p=[],b=[],m=0,y=0;for(t.beginPath(),s=0,o=h+!!i;s<o;++s)d=n(l=e[u=s%h]._view,u,a),c=Yn(l),f=Yn(d),c&&f?(m=p.push(l),y=b.push(d)):m&&y&&(g?(c&&p.push(l),f&&b.push(d)):(Hn(t,p,b,m,y),m=y=0,p=[],b=[]));Hn(t,p,b,m,y),t.closePath(),t.fillStyle=r,t.fill()}(a,s,o,i,u,r._loop),dt.canvas.unclipArea(a))}}},Wn=dt.noop,Kn=dt.valueOrDefault;function $n(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}ot._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,a=this.chart,r=a.getDatasetMeta(n);r.hidden=null===r.hidden?!a.data.datasets[n].hidden:null,a.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return dt.isArray(e.datasets)?e.datasets.map((function(e,n){return{text:e.label,fillStyle:dt.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}}),this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var Zn=gt.extend({initialize:function(t){dt.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Wn,update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=n,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Wn,beforeSetDimensions:Wn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Wn,beforeBuildLabels:Wn,buildLabels:function(){var t=this,e=t.options.labels||{},n=dt.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Wn,beforeFit:Wn,fit:function(){var t=this,e=t.options,n=e.labels,a=e.display,r=t.ctx,i=dt.options._parseFont(n),s=i.size,o=t.legendHitBoxes=[],u=t.minSize,l=t.isHorizontal();if(l?(u.width=t.maxWidth,u.height=a?10:0):(u.width=a?10:0,u.height=t.maxHeight),a)if(r.font=i.string,l){var d=t.lineWidths=[0],c=0;r.textAlign="left",r.textBaseline="top",dt.each(t.legendItems,(function(t,e){var a=$n(n,s)+s/2+r.measureText(t.text).width;(0===e||d[d.length-1]+a+n.padding>u.width)&&(c+=s+n.padding,d[d.length-(e>0?0:1)]=n.padding),o[e]={left:0,top:0,width:a,height:s},d[d.length-1]+=a+n.padding})),u.height+=c}else{var f=n.padding,h=t.columnWidths=[],g=n.padding,p=0,b=0,m=s+f;dt.each(t.legendItems,(function(t,e){var a=$n(n,s)+s/2+r.measureText(t.text).width;e>0&&b+m>u.height-f&&(g+=p+n.padding,h.push(p),p=0,b=0),p=Math.max(p,a),b+=m,o[e]={left:0,top:0,width:a,height:s}})),g+=p,h.push(p),u.width+=g}t.width=u.width,t.height=u.height},afterFit:Wn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,a=ot.global,r=a.defaultColor,i=a.elements.line,s=t.width,o=t.lineWidths;if(e.display){var u,l=t.ctx,d=Kn(n.fontColor,a.defaultFontColor),c=dt.options._parseFont(n),f=c.size;l.textAlign="left",l.textBaseline="middle",l.lineWidth=.5,l.strokeStyle=d,l.fillStyle=d,l.font=c.string;var h=$n(n,f),g=t.legendHitBoxes,p=t.isHorizontal();u=p?{x:t.left+(s-o[0])/2+n.padding,y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+n.padding,line:0};var b=f+n.padding;dt.each(t.legendItems,(function(a,d){var c=l.measureText(a.text).width,m=h+f/2+c,y=u.x,v=u.y;p?d>0&&y+m+n.padding>t.left+t.minSize.width&&(v=u.y+=b,u.line++,y=u.x=t.left+(s-o[u.line])/2+n.padding):d>0&&v+b>t.top+t.minSize.height&&(y=u.x=y+t.columnWidths[u.line]+n.padding,v=u.y=t.top+n.padding,u.line++),function(t,n,a){if(!(isNaN(h)||h<=0)){l.save();var s=Kn(a.lineWidth,i.borderWidth);if(l.fillStyle=Kn(a.fillStyle,r),l.lineCap=Kn(a.lineCap,i.borderCapStyle),l.lineDashOffset=Kn(a.lineDashOffset,i.borderDashOffset),l.lineJoin=Kn(a.lineJoin,i.borderJoinStyle),l.lineWidth=s,l.strokeStyle=Kn(a.strokeStyle,r),l.setLineDash&&l.setLineDash(Kn(a.lineDash,i.borderDash)),e.labels&&e.labels.usePointStyle){var o=h*Math.SQRT2/2;dt.canvas.drawPoint(l,a.pointStyle,o,t+h/2,n+f/2)}else 0!==s&&l.strokeRect(t,n,h,f),l.fillRect(t,n,h,f);l.restore()}}(y,v,a),g[d].left=y,g[d].top=v,function(t,e,n,a){var r=f/2,i=h+r+t,s=e+r;l.fillText(n.text,i,s),n.hidden&&(l.beginPath(),l.lineWidth=2,l.moveTo(i,s),l.lineTo(i+a,s),l.stroke())}(y,v,a,c),p?u.x+=m+n.padding:u.y+=b}))}},_getLegendItemAt:function(t,e){var n,a,r,i=this;if(t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom)for(r=i.legendHitBoxes,n=0;n<r.length;++n)if(t>=(a=r[n]).left&&t<=a.left+a.width&&e>=a.top&&e<=a.top+a.height)return i.legendItems[n];return null},handleEvent:function(t){var e,n=this,a=n.options,r="mouseup"===t.type?"click":t.type;if("mousemove"===r){if(!a.onHover&&!a.onLeave)return}else{if("click"!==r)return;if(!a.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===r?e&&a.onClick&&a.onClick.call(n,t.native,e):(a.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&a.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),a.onHover&&e&&a.onHover.call(n,t.native,e))}});function Jn(t,e){var n=new Zn({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.legend=n}var Qn={id:"legend",_element:Zn,beforeInit:function(t){var e=t.options.legend;e&&Jn(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(dt.mergeIf(e,ot.global.legend),n?(ve.configure(t,n,e),n.options=e):Jn(t,e)):n&&(ve.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Xn=dt.noop;ot._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ta=gt.extend({initialize:function(t){dt.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Xn,update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=n,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Xn,beforeSetDimensions:Xn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Xn,beforeBuildLabels:Xn,buildLabels:Xn,afterBuildLabels:Xn,beforeFit:Xn,fit:function(){var t=this,e=t.options,n=e.display,a=t.minSize,r=dt.isArray(e.text)?e.text.length:1,i=dt.options._parseFont(e),s=n?r*i.lineHeight+2*e.padding:0;t.isHorizontal()?(a.width=t.maxWidth,a.height=s):(a.width=s,a.height=t.maxHeight),t.width=a.width,t.height=a.height},afterFit:Xn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var a,r,i,s=dt.options._parseFont(n),o=s.lineHeight,u=o/2+n.padding,l=0,d=t.top,c=t.left,f=t.bottom,h=t.right;e.fillStyle=dt.valueOrDefault(n.fontColor,ot.global.defaultFontColor),e.font=s.string,t.isHorizontal()?(r=c+(h-c)/2,i=d+u,a=h-c):(r="left"===n.position?c+u:h-u,i=d+(f-d)/2,a=f-d,l=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(r,i),e.rotate(l),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(dt.isArray(g))for(var p=0,b=0;b<g.length;++b)e.fillText(g[b],0,p,a),p+=o;else e.fillText(g,0,0,a);e.restore()}}});function ea(t,e){var n=new ta({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.titleBlock=n}var na={},aa=Un,ra=Qn,ia={id:"title",_element:ta,beforeInit:function(t){var e=t.options.title;e&&ea(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(dt.mergeIf(e,ot.global.title),n?(ve.configure(t,n,e),n.options=e):ea(t,e)):n&&(ve.removeBox(t,n),delete t.titleBlock)}};for(var sa in na.filler=aa,na.legend=ra,na.title=ia,We.helpers=dt,function(){function t(t,e,n){var a;return"string"==typeof t?(a=parseInt(t,10),-1!==t.indexOf("%")&&(a=a/100*e.parentNode[n])):a=t,a}function e(t){return null!=t&&"none"!==t}function n(n,a,r){var i=document.defaultView,s=dt._getParentNode(n),o=i.getComputedStyle(n)[a],u=i.getComputedStyle(s)[a],l=e(o),d=e(u),c=Number.POSITIVE_INFINITY;return l||d?Math.min(l?t(o,n,r):c,d?t(u,s,r):c):"none"}dt.where=function(t,e){if(dt.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return dt.each(t,(function(t){e(t)&&n.push(t)})),n},dt.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var a=0,r=t.length;a<r;++a)if(e.call(n,t[a],a,t))return a;return-1},dt.findNextWhere=function(t,e,n){dt.isNullOrUndef(n)&&(n=-1);for(var a=n+1;a<t.length;a++){var r=t[a];if(e(r))return r}},dt.findPreviousWhere=function(t,e,n){dt.isNullOrUndef(n)&&(n=t.length);for(var a=n-1;a>=0;a--){var r=t[a];if(e(r))return r}},dt.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},dt.almostEquals=function(t,e,n){return Math.abs(t-e)<n},dt.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},dt.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},dt.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},dt.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},dt.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e},dt.toRadians=function(t){return t*(Math.PI/180)},dt.toDegrees=function(t){return t*(180/Math.PI)},dt._decimalPlaces=function(t){if(dt.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},dt.getAngleFromPoint=function(t,e){var n=e.x-t.x,a=e.y-t.y,r=Math.sqrt(n*n+a*a),i=Math.atan2(a,n);return i<-.5*Math.PI&&(i+=2*Math.PI),{angle:i,distance:r}},dt.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},dt.aliasPixel=function(t){return t%2==0?0:.5},dt._alignPixel=function(t,e,n){var a=t.currentDevicePixelRatio,r=n/2;return Math.round((e-r)*a)/a+r},dt.splineCurve=function(t,e,n,a){var r=t.skip?e:t,i=e,s=n.skip?e:n,o=Math.sqrt(Math.pow(i.x-r.x,2)+Math.pow(i.y-r.y,2)),u=Math.sqrt(Math.pow(s.x-i.x,2)+Math.pow(s.y-i.y,2)),l=o/(o+u),d=u/(o+u),c=a*(l=isNaN(l)?0:l),f=a*(d=isNaN(d)?0:d);return{previous:{x:i.x-c*(s.x-r.x),y:i.y-c*(s.y-r.y)},next:{x:i.x+f*(s.x-r.x),y:i.y+f*(s.y-r.y)}}},dt.EPSILON=Number.EPSILON||1e-14,dt.splineCurveMonotone=function(t){var e,n,a,r,i,s,o,u,l,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),c=d.length;for(e=0;e<c;++e)if(!(a=d[e]).model.skip){if(n=e>0?d[e-1]:null,(r=e<c-1?d[e+1]:null)&&!r.model.skip){var f=r.model.x-a.model.x;a.deltaK=0!==f?(r.model.y-a.model.y)/f:0}a.mK=!n||n.model.skip?a.deltaK:!r||r.model.skip?n.deltaK:this.sign(n.deltaK)!==this.sign(a.deltaK)?0:(n.deltaK+a.deltaK)/2}for(e=0;e<c-1;++e)r=d[e+1],(a=d[e]).model.skip||r.model.skip||(dt.almostEquals(a.deltaK,0,this.EPSILON)?a.mK=r.mK=0:(i=a.mK/a.deltaK,s=r.mK/a.deltaK,(u=Math.pow(i,2)+Math.pow(s,2))<=9||(o=3/Math.sqrt(u),a.mK=i*o*a.deltaK,r.mK=s*o*a.deltaK)));for(e=0;e<c;++e)(a=d[e]).model.skip||(r=e<c-1?d[e+1]:null,(n=e>0?d[e-1]:null)&&!n.model.skip&&(a.model.controlPointPreviousX=a.model.x-(l=(a.model.x-n.model.x)/3),a.model.controlPointPreviousY=a.model.y-l*a.mK),r&&!r.model.skip&&(a.model.controlPointNextX=a.model.x+(l=(r.model.x-a.model.x)/3),a.model.controlPointNextY=a.model.y+l*a.mK))},dt.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},dt.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},dt.niceNum=function(t,e){var n=Math.floor(dt.log10(t)),a=t/Math.pow(10,n);return(e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10)*Math.pow(10,n)},dt.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},dt.getRelativePosition=function(t,e){var n,a,r=t.originalEvent||t,i=t.target||t.srcElement,s=i.getBoundingClientRect(),o=r.touches;o&&o.length>0?(n=o[0].clientX,a=o[0].clientY):(n=r.clientX,a=r.clientY);var u=parseFloat(dt.getStyle(i,"padding-left")),l=parseFloat(dt.getStyle(i,"padding-top")),d=parseFloat(dt.getStyle(i,"padding-right")),c=parseFloat(dt.getStyle(i,"padding-bottom")),f=s.bottom-s.top-l-c;return{x:n=Math.round((n-s.left-u)/(s.right-s.left-u-d)*i.width/e.currentDevicePixelRatio),y:a=Math.round((a-s.top-l)/f*i.height/e.currentDevicePixelRatio)}},dt.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},dt.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},dt._calculatePadding=function(t,e,n){return(e=dt.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},dt._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},dt.getMaximumWidth=function(t){var e=dt._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,a=n-dt._calculatePadding(e,"padding-left",n)-dt._calculatePadding(e,"padding-right",n),r=dt.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},dt.getMaximumHeight=function(t){var e=dt._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,a=n-dt._calculatePadding(e,"padding-top",n)-dt._calculatePadding(e,"padding-bottom",n),r=dt.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},dt.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},dt.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var a=t.canvas,r=t.height,i=t.width;a.height=r*n,a.width=i*n,t.ctx.scale(n,n),a.style.height||a.style.width||(a.style.height=r+"px",a.style.width=i+"px")}},dt.fontString=function(t,e,n){return e+" "+t+"px "+n},dt.longestText=function(t,e,n,a){var r=(a=a||{}).data=a.data||{},i=a.garbageCollect=a.garbageCollect||[];a.font!==e&&(r=a.data={},i=a.garbageCollect=[],a.font=e),t.font=e;var s=0;dt.each(n,(function(e){null!=e&&!0!==dt.isArray(e)?s=dt.measureText(t,r,i,s,e):dt.isArray(e)&&dt.each(e,(function(e){null==e||dt.isArray(e)||(s=dt.measureText(t,r,i,s,e))}))}));var o=i.length/2;if(o>n.length){for(var u=0;u<o;u++)delete r[i[u]];i.splice(0,o)}return s},dt.measureText=function(t,e,n,a,r){var i=e[r];return i||(i=e[r]=t.measureText(r).width,n.push(r)),i>a&&(a=i),a},dt.numberOfLabelLines=function(t){var e=1;return dt.each(t,(function(t){dt.isArray(t)&&t.length>e&&(e=t.length)})),e},dt.color=W?function(t){return t instanceof CanvasGradient&&(t=ot.global.defaultColor),W(t)}:function(t){return console.error("Color.js not found!"),t},dt.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:dt.color(t).saturate(.5).darken(.1).rgbString()}}(),We._adapters=Ze,We.Animation=bt,We.animationService=mt,We.controllers=oe,We.DatasetController=Tt,We.defaults=ot,We.Element=gt,We.elements=qt,We.Interaction=ge,We.layouts=ve,We.platform=Ae,We.plugins=ke,We.Scale=nn,We.scaleService=Ee,We.Ticks=Je,We.Tooltip=Ge,We.helpers.each(qn,(function(t,e){We.scaleService.registerScaleType(e,t,t._defaults)})),na)na.hasOwnProperty(sa)&&We.plugins.register(na[sa]);We.platform.initialize();var oa=We;return"undefined"!=typeof window&&(window.Chart=We),We.Chart=We,We.Legend=na.legend._element,We.Title=na.title._element,We.pluginService=We.plugins,We.PluginBase=We.Element.extend({}),We.canvasHelpers=We.helpers.canvas,We.layoutService=We.layouts,We.LinearScaleBase=sn,We.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){We[t]=function(e,n){return new We(e,We.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),oa}(function(){try{return n("wd/R")}catch(t){}}())},MP8s:function(t,e,n){"use strict";n.d(e,"a",(function(){return T}));var a=n("8Y7J"),r=n("2vnA"),i=n("f95s"),s=n("mfoh"),o=n("X+05"),u=n("afOK"),l=n.n(u),d=n("RBan"),c=n.n(d),f=n("wig9"),h=n.n(f),g=n("J2m7"),p=n.n(g),b=n("4qC0"),m=n.n(b),y=n("lSCD"),v=n.n(y),x=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},_=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},T=function(){function t(){this.options=new s.b,this.eventNames=Object.keys(o.a),this.expandedNodeIds={},this.selectedLeafNodeIds={},this.activeNodeIds={},this.hiddenNodeIds={},this.focusedNodeId=null,this.firstUpdate=!0,this.subscriptions=[]}var e;return e=t,t.prototype.fireEvent=function(t){t.treeModel=this,this.events[t.eventName].emit(t),this.events.event.emit(t)},t.prototype.subscribe=function(t,e){var n=this.events[t].subscribe(e);this.subscriptions.push(n)},t.prototype.getFocusedNode=function(){return this.focusedNode},t.prototype.getActiveNode=function(){return this.activeNodes[0]},t.prototype.getActiveNodes=function(){return this.activeNodes},t.prototype.getVisibleRoots=function(){return this.virtualRoot.visibleChildren},t.prototype.getFirstRoot=function(t){return void 0===t&&(t=!1),l()(t?this.getVisibleRoots():this.roots)},t.prototype.getLastRoot=function(t){return void 0===t&&(t=!1),c()(t?this.getVisibleRoots():this.roots)},Object.defineProperty(t.prototype,"isFocused",{get:function(){return e.focusedTree===this},enumerable:!0,configurable:!0}),t.prototype.isNodeFocused=function(t){return this.focusedNode===t},t.prototype.isEmptyTree=function(){return this.roots&&0===this.roots.length},Object.defineProperty(t.prototype,"focusedNode",{get:function(){return this.focusedNodeId?this.getNodeById(this.focusedNodeId):null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"expandedNodes",{get:function(){var t=this,e=Object.keys(this.expandedNodeIds).filter((function(e){return t.expandedNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeNodes",{get:function(){var t=this,e=Object.keys(this.activeNodeIds).filter((function(e){return t.activeNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hiddenNodes",{get:function(){var t=this,e=Object.keys(this.hiddenNodeIds).filter((function(e){return t.hiddenNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectedLeafNodes",{get:function(){var t=this,e=Object.keys(this.selectedLeafNodeIds).filter((function(e){return t.selectedLeafNodeIds[e]})).map((function(e){return t.getNodeById(e)}));return h()(e)},enumerable:!0,configurable:!0}),t.prototype.getNodeByPath=function(t,e){if(void 0===e&&(e=null),!t)return null;if(e=e||this.virtualRoot,0===t.length)return e;if(!e.children)return null;var n=t.shift(),a=p()(e.children,{id:n});return a?this.getNodeByPath(t,a):null},t.prototype.getNodeById=function(t){var e=t.toString();return this.getNodeBy((function(t){return t.id.toString()===e}))},t.prototype.getNodeBy=function(t,e){if(void 0===e&&(e=null),!(e=e||this.virtualRoot).children)return null;var n=p()(e.children,t);if(n)return n;for(var a=0,r=e.children;a<r.length;a++){var i=this.getNodeBy(t,r[a]);if(i)return i}},t.prototype.isExpanded=function(t){return this.expandedNodeIds[t.id]},t.prototype.isHidden=function(t){return this.hiddenNodeIds[t.id]},t.prototype.isActive=function(t){return this.activeNodeIds[t.id]},t.prototype.isSelected=function(t){return this.selectedLeafNodeIds[t.id]},t.prototype.ngOnDestroy=function(){this.dispose(),this.unsubscribeAll()},t.prototype.dispose=function(){this.virtualRoot&&this.virtualRoot.dispose()},t.prototype.unsubscribeAll=function(){this.subscriptions.forEach((function(t){return t.unsubscribe()})),this.subscriptions=[]},t.prototype.setData=function(t){var e=t.nodes,n=t.options,a=void 0===n?null:n,r=t.events,i=void 0===r?null:r;a&&(this.options=new s.b(a)),i&&(this.events=i),e&&(this.nodes=e),this.update()},t.prototype.update=function(){var t,e=((t={id:this.options.rootId,virtual:!0})[this.options.childrenField]=this.nodes,t);this.dispose(),this.virtualRoot=new i.a(e,null,this,0),this.roots=this.virtualRoot.children,this.firstUpdate?this.roots&&(this.firstUpdate=!1,this._calculateExpandedNodes()):this.fireEvent({eventName:o.a.updateData})},t.prototype.setFocusedNode=function(t){this.focusedNodeId=t?t.id:null},t.prototype.setFocus=function(t){e.focusedTree=t?this:null},t.prototype.doForAll=function(t){this.roots.forEach((function(e){return e.doForAll(t)}))},t.prototype.focusNextNode=function(){var t=this.getFocusedNode(),e=t?t.findNextNode(!0,!0):this.getFirstRoot(!0);e&&e.focus()},t.prototype.focusPreviousNode=function(){var t=this.getFocusedNode(),e=t?t.findPreviousNode(!0):this.getLastRoot(!0);e&&e.focus()},t.prototype.focusDrillDown=function(){var t=this.getFocusedNode();if(t&&t.isCollapsed&&t.hasChildren)t.toggleExpanded();else{var e=t?t.getFirstChild(!0):this.getFirstRoot(!0);e&&e.focus()}},t.prototype.focusDrillUp=function(){var t=this.getFocusedNode();if(t)if(t.isExpanded)t.toggleExpanded();else{var e=t.realParent;e&&e.focus()}},t.prototype.setActiveNode=function(t,e,n){void 0===n&&(n=!1),n?this._setActiveNodeMulti(t,e):this._setActiveNodeSingle(t,e),e?(t.focus(this.options.scrollOnActivate),this.fireEvent({eventName:o.a.activate,node:t}),this.fireEvent({eventName:o.a.nodeActivate,node:t})):(this.fireEvent({eventName:o.a.deactivate,node:t}),this.fireEvent({eventName:o.a.nodeDeactivate,node:t}))},t.prototype.setSelectedNode=function(t,e){var n;this.selectedLeafNodeIds=Object.assign({},this.selectedLeafNodeIds,((n={})[t.id]=e,n)),e?(t.focus(),this.fireEvent({eventName:o.a.select,node:t})):this.fireEvent({eventName:o.a.deselect,node:t})},t.prototype.setExpandedNode=function(t,e){var n;this.expandedNodeIds=Object.assign({},this.expandedNodeIds,((n={})[t.id]=e,n)),this.fireEvent({eventName:o.a.toggleExpanded,node:t,isExpanded:e})},t.prototype.expandAll=function(){this.roots.forEach((function(t){return t.expandAll()}))},t.prototype.collapseAll=function(){this.roots.forEach((function(t){return t.collapseAll()}))},t.prototype.setIsHidden=function(t,e){var n;this.hiddenNodeIds=Object.assign({},this.hiddenNodeIds,((n={})[t.id]=e,n))},t.prototype.setHiddenNodeIds=function(t){this.hiddenNodeIds=t.reduce((function(t,e){var n;return Object.assign(t,((n={})[e]=!0,n))}),{})},t.prototype.performKeyAction=function(t,e){var n=this.options.actionMapping.keys[e.keyCode];return!!n&&(e.preventDefault(),n(this,t,e),!0)},t.prototype.filterNodes=function(t,e){var n,a=this;if(void 0===e&&(e=!0),!t)return this.clearFilter();if(m()(t))n=function(e){return-1!==e.displayField.toLowerCase().indexOf(t.toLowerCase())};else{if(!v()(t))return console.error("Don't know what to do with filter",t),void console.error("Should be either a string or function");n=t}var r={};this.roots.forEach((function(t){return a._filterNode(r,t,n,e)})),this.hiddenNodeIds=r,this.fireEvent({eventName:o.a.changeFilter})},t.prototype.clearFilter=function(){this.hiddenNodeIds={},this.fireEvent({eventName:o.a.changeFilter})},t.prototype.moveNode=function(t,e){var n=t.getIndexInParent(),a=t.parent;if(this.canMoveNode(t,e,n)){var r=a.getField("children");e.parent.getField("children")||e.parent.setField("children",[]);var i=e.parent.getField("children"),s=r.splice(n,1)[0],u=a===e.parent&&e.index>n?e.index-1:e.index;i.splice(u,0,s),a.treeModel.update(),e.parent.treeModel!==a.treeModel&&e.parent.treeModel.update(),this.fireEvent({eventName:o.a.moveNode,node:s,to:{parent:e.parent.data,index:u},from:{parent:a.data,index:n}})}},t.prototype.copyNode=function(t,e){var n=t.getIndexInParent();if(this.canMoveNode(t,e,n)){e.parent.getField("children")||e.parent.setField("children",[]);var a=e.parent.getField("children"),r=this.options.getNodeClone(t);a.splice(e.index,0,r),t.treeModel.update(),e.parent.treeModel!==t.treeModel&&e.parent.treeModel.update(),this.fireEvent({eventName:o.a.copyNode,node:r,to:{parent:e.parent.data,index:e.index}})}},t.prototype.getState=function(){return{expandedNodeIds:this.expandedNodeIds,selectedLeafNodeIds:this.selectedLeafNodeIds,activeNodeIds:this.activeNodeIds,hiddenNodeIds:this.hiddenNodeIds,focusedNodeId:this.focusedNodeId}},t.prototype.setState=function(t){t&&Object.assign(this,{expandedNodeIds:t.expandedNodeIds||{},selectedLeafNodeIds:t.selectedLeafNodeIds||{},activeNodeIds:t.activeNodeIds||{},hiddenNodeIds:t.hiddenNodeIds||{},focusedNodeId:t.focusedNodeId})},t.prototype.subscribeToState=function(t){var e=this;Object(r.b)((function(){return t(e.getState())}))},t.prototype.canMoveNode=function(t,e,n){return void 0===n&&(n=void 0),n||t.getIndexInParent(),(t.parent!==e.parent||n!==e.index)&&!e.parent.isDescendantOf(t)},t.prototype.calculateExpandedNodes=function(){this._calculateExpandedNodes()},t.prototype._filterNode=function(t,e,n,a){var r=this,i=n(e);return e.children&&e.children.forEach((function(e){r._filterNode(t,e,n,a)&&(i=!0)})),i||(t[e.id]=!0),a&&i&&e.ensureVisible(),i},t.prototype._calculateExpandedNodes=function(t){var e,n=this;void 0===t&&(t=null),(t=t||this.virtualRoot).data[this.options.isExpandedField]&&(this.expandedNodeIds=Object.assign({},this.expandedNodeIds,((e={})[t.id]=!0,e))),t.children&&t.children.forEach((function(t){return n._calculateExpandedNodes(t)}))},t.prototype._setActiveNodeSingle=function(t,e){var n,a=this;this.activeNodes.filter((function(e){return e!==t})).forEach((function(t){a.fireEvent({eventName:o.a.deactivate,node:t}),a.fireEvent({eventName:o.a.nodeDeactivate,node:t})})),this.activeNodeIds=e?((n={})[t.id]=!0,n):{}},t.prototype._setActiveNodeMulti=function(t,e){var n;this.activeNodeIds=Object.assign({},this.activeNodeIds,((n={})[t.id]=e,n))},t.focusedTree=null,x([r.d,_("design:type",Array)],t.prototype,"roots",void 0),x([r.d,_("design:type",Object)],t.prototype,"expandedNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"selectedLeafNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"activeNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"hiddenNodeIds",void 0),x([r.d,_("design:type",Object)],t.prototype,"focusedNodeId",void 0),x([r.d,_("design:type",i.a)],t.prototype,"virtualRoot",void 0),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"focusedNode",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"expandedNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"activeNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"hiddenNodes",null),x([r.c,_("design:type",Object),_("design:paramtypes",[])],t.prototype,"selectedLeafNodes",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setData",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"update",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setFocusedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setFocus",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"doForAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusNextNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusPreviousNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusDrillDown",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"focusDrillUp",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object,Object]),_("design:returntype",void 0)],t.prototype,"setActiveNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setSelectedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setExpandedNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"expandAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"collapseAll",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"setIsHidden",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setHiddenNodeIds",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"filterNodes",null),x([r.a,_("design:type",Function),_("design:paramtypes",[]),_("design:returntype",void 0)],t.prototype,"clearFilter",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"moveNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object,Object]),_("design:returntype",void 0)],t.prototype,"copyNode",null),x([r.a,_("design:type",Function),_("design:paramtypes",[Object]),_("design:returntype",void 0)],t.prototype,"setState",null),e=x([Object(a.Injectable)()],t)}()},MdoF:function(t,e,n){"use strict";n.d(e,"b",(function(){return s})),n.d(e,"c",(function(){return l})),n.d(e,"a",(function(){return c}));var a=n("8Y7J"),r=n("CNMR"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"button",[["aria-label","Close"],["class","close"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.close()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["×"])),(t()(),a["ɵeld"](3,0,null,null,1,"span",[["class","sr-only"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Close"]))],null,null)}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"div",[["role","alert"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](4,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"alert alert-"+n.type,n.classes),t(e,4,0,n.dismissible)}),null)}function l(t){return a["ɵvid"](2,[(t()(),a["ɵand"](16777216,null,null,1,null,u)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.isOpen)}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"alert",[],null,null,null,l,s)),a["ɵdid"](1,114688,null,0,r.a,[r.b,a.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}var c=a["ɵccf"]("alert,bs-alert",r.a,d,{type:"type",dismissible:"dismissible",dismissOnTimeout:"dismissOnTimeout",isOpen:"isOpen"},{onClose:"onClose",onClosed:"onClosed"},["*"])},MrPd:function(t,e,n){var a=n("hypo"),r=n("ljhN"),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var s=t[e];i.call(t,e)&&r(s,n)&&(void 0!==n||e in t)||a(t,e,n)}},MuvH:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("IheW"),i=n("pL04");let s=(()=>{class t{constructor(t){this.http=t}findValue(t,e){if(t.value)return t.value.find(t=>t.section===e)}getValue(t,e){let n=this.findValue(t,e);if(!n){const a=e.indexOf(".");-1!==a&&(n=this.findValue(t,e.substring(0,a)))}return n||(n=this.findValue(t,"global")),n?n.value:t.default}getConfigData(){return this.http.get("api/cluster_conf/")}get(t){return this.http.get(`api/cluster_conf/${t}`)}filter(t){return this.http.get(`api/cluster_conf/filter?names=${t.join(",")}`)}create(t){return this.http.post("api/cluster_conf/",t)}delete(t,e){return this.http.delete(`api/cluster_conf/${t}?section=${e}`)}bulkCreate(t){return this.http.put("api/cluster_conf/",t)}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.c))},token:t,providedIn:i.a}),t})()},MvSz:function(t,e,n){var a=n("LXxW"),r=n("0ycA"),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;t.exports=s?function(t){return null==t?[]:(t=Object(t),a(s(t),(function(e){return i.call(t,e)})))}:r},Mxhz:function(t,e,n){"use strict";var a=n("IheW"),r=n("LRne"),i=n("7o/Q");class s{constructor(t){this.value=t}call(t,e){return e.subscribe(new o(t,this.value))}}class o extends i.a{constructor(t,e){super(t),this.value=e}_next(t){this.destination.next(this.value)}}var u=n("JIr8"),l=n("8Y7J"),d=n("pL04");n.d(e,"a",(function(){return c}));let c=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("api/user")}delete(t){return this.http.delete(`api/user/${t}`)}get(t){return this.http.get(`api/user/${t}`)}create(t){return this.http.post("api/user",t)}update(t){return this.http.put(`api/user/${t.username}`,t)}changePassword(t,e,n){return this.http.post(`api/user/${t}/change_password`,{old_password:e,new_password:n})}validateUserName(t){return this.get(t).pipe(t=>t.lift(new s(!0)),Object(u.a)(t=>(t.preventDefault(),Object(r.a)(!1))))}validatePassword(t,e=null,n=null){let r=new a.h;return r=r.append("password",t),e&&(r=r.append("username",e)),n&&(r=r.append("old_password",n)),this.http.post("api/user/validate_password",null,{params:r})}}return t.ngInjectableDef=l["ɵɵdefineInjectable"]({factory:function(){return new t(l["ɵɵinject"](a.c))},token:t,providedIn:d.a}),t})()},"N+g0":function(t,e,n){var a=n("g6v/"),r=n("m/L8"),i=n("glrk"),s=n("33Wh");t.exports=a?Object.defineProperties:function(t,e){i(t);for(var n,a=s(e),o=a.length,u=0;o>u;)r.f(t,n=a[u++],e[n]);return t}},"NC/Y":function(t,e,n){var a=n("0GbY");t.exports=a("navigator","userAgent")||""},NEZu:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n,a){this.customColors={backgroundColor:void 0,borderColor:void 0},this.checkOffset=!1,this.chartEl=t.nativeElement,this.getStyleLeft=n,this.getStyleTop=a,this.tooltipEl=e.nativeElement}customTooltips(t){if(0===t.opacity)return void(this.tooltipEl.style.opacity=0);if(this.tooltipEl.classList.remove("above","below","no-transform"),this.tooltipEl.classList.add(t.yAlign?t.yAlign:"no-transform"),t.body){const e=t.title||[],n=t.body.map(t=>t.lines);let a="<thead>";e.forEach(t=>{a+="<tr><th>"+this.getTitle(t)+"</th></tr>"}),a+="</thead><tbody>",n.forEach((e,n)=>{const r=t.labelColors[n];let i="background:"+(this.customColors.backgroundColor||r.backgroundColor);i+="; border-color:"+(this.customColors.borderColor||r.borderColor),i+="; border-width: 2px",a+='<tr><td nowrap><span class="chartjs-tooltip-key" style="'+i+'"></span>'+this.getBody(e)+"</td></tr>"}),a+="</tbody>",this.tooltipEl.querySelector("table").innerHTML=a}const e=this.chartEl.offsetTop,n=this.chartEl.offsetLeft;if(this.checkOffset){const e=t.width/2;this.tooltipEl.classList.remove("transform-left"),this.tooltipEl.classList.remove("transform-right"),t.caretX-e<0?this.tooltipEl.classList.add("transform-left"):t.caretX+e>this.chartEl.width&&this.tooltipEl.classList.add("transform-right")}this.tooltipEl.style.left=this.getStyleLeft(t,n),this.tooltipEl.style.top=this.getStyleTop(t,e),this.tooltipEl.style.opacity=1,this.tooltipEl.style.fontFamily=t._fontFamily,this.tooltipEl.style.fontSize=t.fontSize,this.tooltipEl.style.fontStyle=t._fontStyle,this.tooltipEl.style.padding=t.yPadding+"px "+t.xPadding+"px"}getBody(t){return t}getTitle(t){return t}}},NJ4a:function(t,e,n){"use strict";function a(t){setTimeout(()=>{throw t},0)}n.d(e,"a",(function(){return a}))},NJ9Y:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("sVev"),r=n("pLZG"),i=n("BFxc"),s=n("XDbj"),o=n("xbPD"),u=n("SpAZ");function l(t,e){const n=arguments.length>=2;return l=>l.pipe(t?Object(r.a)((e,n)=>t(e,n,l)):u.a,Object(i.a)(1),n?Object(o.a)(e):Object(s.a)(()=>new a.a))}},NKxu:function(t,e,n){var a=n("lSCD"),r=n("E2jh"),i=n("GoyQ"),s=n("3Fdi"),o=/^\[object .+?Constructor\]$/,u=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||r(t))&&(a(t)?u:o).test(s(t))}},NUGo:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("iInd"),s=n("FE24"),o=n("z/SZ"),u=n("GS7A");n("S7zO"),n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return b}));var l=a["ɵcrt"]({encapsulation:0,styles:[[".dropdown-menu[_ngcontent-%COMP%] > .disabled[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{pointer-events:auto;cursor:default!important}"]],data:{}});function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,10,"button",[["type","button"]],null,[[null,"click"]],(function(t,e,n){var r=!0,i=t.component;return"click"===e&&(r=!1!==a["ɵnov"](t,5).onClick()&&r),"click"===e&&(r=!1!==i.useClickAction(t.context.ngIf)&&r),r}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](4,{disabled:0}),a["ɵdid"](5,16384,null,0,i.n,[i.m,i.a,[8,null],a.Renderer2,a.ElementRef],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](8,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](9,1),(t()(),a["ɵeld"](10,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](11,null,["",""]))],(function(t,e){var n=e.component,r=a["ɵinlineInterpolate"](1,"btn btn-",n.btnColor,""),i=t(e,4,0,n.disableSelectionAction(e.context.ngIf));t(e,3,0,r,i),t(e,5,0,e.context.ngIf.preserveFragment?"":null,n.useRouterLink(e.context.ngIf));var s=t(e,9,0,e.context.ngIf.icon);t(e,8,0,s)}),(function(t,e){t(e,11,0,e.context.ngIf.name)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](1,null,[""," "]))],null,(function(t,e){t(e,1,0,e.component.dropDownOnly)}))}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"span",[["class","sr-only"]],null,null,null,null,null))],null,null)}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"button",[["dropdownToggle",""],["type","button"]],[[8,"className",0],[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,1).onClick()&&r),r}),null,null)),a["ɵdid"](1,147456,null,0,s.g,[a.ChangeDetectorRef,s.c,a.ElementRef,a.Renderer2,s.f],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.dropDownOnly),t(e,5,0,!n.dropDownOnly)}),(function(t,e){t(e,0,0,a["ɵinlineInterpolate"](1,"btn btn-",e.component.btnColor," dropdown-toggle dropdown-toggle-split"),!0,a["ɵnov"](e,1).isDisabled,a["ɵnov"](e,1).isOpen)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,12,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,11,"li",[["data-toggle","tooltip"],["role","menuitem"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,10,"a",[["class","dropdown-item"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var r=!0,i=t.component;return"click"===e&&(r=!1!==a["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&r),"click"===e&&(r=!1!==i.useClickAction(t.context.$implicit)&&r),r}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](5,{disabled:0}),a["ɵdid"](6,671744,null,0,i.p,[i.m,i.a,r.LocationStrategy],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),a["ɵeld"](7,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](9,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](10,1),(t()(),a["ɵeld"](11,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](12,null,["",""]))],(function(t,e){var n=e.component,a=t(e,5,0,n.disableSelectionAction(e.context.$implicit));t(e,4,0,"dropdown-item",a),t(e,6,0,e.context.$implicit.preserveFragment?"":null,n.useRouterLink(e.context.$implicit));var r=t(e,10,0,e.context.$implicit.icon);t(e,9,0,r)}),(function(t,e){var n=e.component;t(e,1,0,a["ɵinlineInterpolate"](1,"",n.toClassName(e.context.$implicit.name),""),a["ɵinlineInterpolate"](1,"",n.useDisableDesc(e.context.$implicit),"")),t(e,2,0,a["ɵnov"](e,6).target,a["ɵnov"](e,6).href),t(e,12,0,e.context.$implicit.name)}))}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"ul",[["class","dropdown-menu"],["role","menu"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](2,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.dropDownActions)}),null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,8,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),a["ɵprd"](512,null,s.f,s.f,[]),a["ɵdid"](2,212992,null,0,s.c,[a.ElementRef,a.Renderer2,a.ViewContainerRef,o.a,s.f,s.a,u.b],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](8,16384,null,0,s.d,[s.f,a.ViewContainerRef,a.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0,n.getCurrentButton()),t(e,6,0,n.showDropDownActions())}),(function(t,e){t(e,0,0,a["ɵnov"](e,2).dropup,a["ɵnov"](e,2).isOpen,a["ɵnov"](e,2).isOpen&&a["ɵnov"](e,2).isBs4)}))}},NaFW:function(t,e,n){var a=n("9d/t"),r=n("P4y1"),i=n("tiKp")("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||r[a(t)]}},Nehr:function(t,e,n){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},Nh2a:function(t,e,n){var a=n("SKAX");t.exports=function(t,e){var n;return a(t,(function(t,a,r){return!(n=e(t,a,r))})),!!n}},Npjl:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},NykK:function(t,e,n){var a=n("nmnc"),r=n("AP2z"),i=n("KfNM"),s=a?a.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":s&&s in Object(t)?r(t):i(t)}},O0oS:function(t,e,n){var a=n("Cwc5"),r=function(){try{var t=a(Object,"defineProperty");return t({},"",{}),t}catch(e){}}();t.exports=r},O741:function(t,e,n){var a=n("hh1v");t.exports=function(t){if(!a(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},O7RO:function(t,e,n){var a=n("CMye"),r=n("7GkX");t.exports=function(t){for(var e=r(t),n=e.length;n--;){var i=e[n],s=t[i];e[n]=[i,s,a(s)]}return e}},O9Tv:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n("YzqF");e.Mutex=a.default},OBhP:function(t,e,n){var a=n("fmRc"),r=n("gFfm"),i=n("MrPd"),s=n("WwFo"),o=n("Dw+G"),u=n("5Tg0"),l=n("Q1l4"),d=n("VOtZ"),c=n("EEGq"),f=n("qZTm"),h=n("G6z8"),g=n("QqLw"),p=n("yHx3"),b=n("wrZu"),m=n("+iFO"),y=n("Z0cm"),v=n("DSRE"),x=n("zEVN"),_=n("GoyQ"),T=n("1+5i"),O=n("7GkX"),w={};w["[object Arguments]"]=w["[object Array]"]=w["[object ArrayBuffer]"]=w["[object DataView]"]=w["[object Boolean]"]=w["[object Date]"]=w["[object Float32Array]"]=w["[object Float64Array]"]=w["[object Int8Array]"]=w["[object Int16Array]"]=w["[object Int32Array]"]=w["[object Map]"]=w["[object Number]"]=w["[object Object]"]=w["[object RegExp]"]=w["[object Set]"]=w["[object String]"]=w["[object Symbol]"]=w["[object Uint8Array]"]=w["[object Uint8ClampedArray]"]=w["[object Uint16Array]"]=w["[object Uint32Array]"]=!0,w["[object Error]"]=w["[object Function]"]=w["[object WeakMap]"]=!1,t.exports=function t(e,n,S,I,N,C){var R,A=1&n,k=2&n,E=4&n;if(S&&(R=N?S(e,I,N,C):S(e)),void 0!==R)return R;if(!_(e))return e;var L=y(e);if(L){if(R=p(e),!A)return l(e,R)}else{var D=g(e),P="[object Function]"==D||"[object GeneratorFunction]"==D;if(v(e))return u(e,A);if("[object Object]"==D||"[object Arguments]"==D||P&&!N){if(R=k||P?{}:m(e),!A)return k?c(e,o(R,e)):d(e,s(R,e))}else{if(!w[D])return N?e:{};R=b(e,D,A)}}C||(C=new a);var M=C.get(e);if(M)return M;C.set(e,R),T(e)?e.forEach((function(a){R.add(t(a,n,S,a,e,C))})):x(e)&&e.forEach((function(a,r){R.set(r,t(a,n,S,r,e,C))}));var q=E?k?h:f:k?keysIn:O,j=L?void 0:q(e);return r(j||e,(function(a,r){j&&(a=e[r=a]),i(R,r,t(a,n,S,r,e,C))})),R}},OIDT:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"tree-node-wrapper",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n      <div *ngIf="!templates.treeNodeWrapperTemplate" class="node-wrapper" [style.padding-left]="node.getNodePadding()">\n          <tree-node-checkbox *ngIf="node.options.useCheckbox" [node]="node"></tree-node-checkbox>\n          <tree-node-expander [node]="node"></tree-node-expander>\n          <div class="node-content-wrapper"\n               [class.node-content-wrapper-active]="node.isActive"\n               [class.node-content-wrapper-focused]="node.isFocused"\n               (click)="node.mouseAction(\'click\', $event)"\n               (dblclick)="node.mouseAction(\'dblClick\', $event)"\n               (mouseover)="node.mouseAction(\'mouseOver\', $event)"\n               (mouseout)="node.mouseAction(\'mouseOut\', $event)"\n               (contextmenu)="node.mouseAction(\'contextMenu\', $event)"\n               (treeDrop)="node.onDrop($event)"\n               (treeDropDragOver)="node.mouseAction(\'dragOver\', $event)"\n               (treeDropDragLeave)="node.mouseAction(\'dragLeave\', $event)"\n               (treeDropDragEnter)="node.mouseAction(\'dragEnter\', $event)"\n               [treeAllowDrop]="node.allowDrop"\n               [allowDragoverStyling]="node.allowDragoverStyling()"\n               [treeDrag]="node"\n               [treeDragEnabled]="node.allowDrag()">\n\n              <tree-node-content [node]="node" [index]="index" [template]="templates.treeNodeTemplate">\n              </tree-node-content>\n          </div>\n      </div>\n      <ng-container\n              [ngTemplateOutlet]="templates.treeNodeWrapperTemplate"\n              [ngTemplateOutletContext]="{ $implicit: node, node: node, index: index, templates: templates }">\n      </ng-container>\n  '}),s("design:paramtypes",[])],t)}()},OIYi:function(t,e,n){!function(t){"use strict";t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n("wd/R"))},OLbh:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("s7LF");class r{constructor(t,e){this.modalRef=t,this.modalService=e,this.boundCancel=this.cancel.bind(this),this.canceled=!1,this.confirmationForm=new a.k({}),this.onHide=this.modalService.onHide.subscribe(t=>{this.onCancel&&(t||this.canceled)&&this.onCancel()})}ngOnInit(){if(this.bodyContext=this.bodyContext||{},this.bodyContext.$implicit=this.bodyData,!this.onSubmit)throw new Error("No submit action defined");if(!this.buttonText)throw new Error("No action name defined");if(!this.titleText)throw new Error("No title defined");if(!this.bodyTpl&&!this.description)throw new Error("No description defined")}ngOnDestroy(){this.onHide.unsubscribe()}cancel(){this.canceled=!0,this.modalRef.hide()}stopLoadingSpinner(){this.confirmationForm.setErrors({cdSubmitButton:!0})}}},Oaa7:function(t,e,n){!function(t){"use strict";t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},Ob0Z:function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function a(t,e,n,a){var r="";if(e)switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे"}else switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां"}return r.replace(/%d/i,t)}t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n("wd/R"))},OcYo:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n,a){this.elementRef=t,this.renderer=e,this.toastr=n,this.i18n=a}ngOnInit(){const t=this.renderer.createElement("i");this.renderer.addClass(t,"fa"),this.renderer.addClass(t,"fa-clipboard"),this.renderer.setAttribute(t,"title",this.i18n("Copy to clipboard")),this.renderer.appendChild(this.elementRef.nativeElement,t)}getInputElement(){return document.getElementById(this.cdCopy2ClipboardButton)}onClick(){try{navigator.permissions.query({name:"clipboard-write"}).then(t=>{"granted"!==t.state&&"prompt"!==t.state||navigator.clipboard.writeText(this.getInputElement().value)}),this.toastr.success("Copied text to the clipboard successfully.")}catch(t){this.toastr.error("Failed to copy text to the clipboard.")}}}},"Of+w":function(t,e,n){var a=n("Cwc5")(n("Kz5y"),"WeakMap");t.exports=a},OjkT:function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n("wd/R"))},Oxv6:function(t,e,n){!function(t){"use strict";var e={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};t.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(t,e){return 12===t&&(t=0),"шаб"===e?t<4?t:t+12:"субҳ"===e?t:"рӯз"===e?t>=11?t:t+12:"бегоҳ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"шаб":t<11?"субҳ":t<16?"рӯз":t<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},"P/G1":function(t,e,n){var a=n("JmpY"),r=n("7GkX");t.exports=function(t){return null==t?[]:a(t,r(t))}},P4Tr:function(t,e,n){var a=n("heNW"),r=n("EA7m"),i=n("4DFU"),s=n("JBE3"),o=r((function(t){return t.push(void 0,i),a(s,void 0,t)}));t.exports=o},P4y1:function(t,e){t.exports={}},P8lu:function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("mrSG"),r=n("IheW"),i=n("LvDl"),s=n("cp0P"),o=n("LRne"),u=n("5+tZ"),l=n("xTzq"),d=n("8Y7J"),c=n("pL04");let f=(()=>{let t=class{constructor(t){this.http=t,this.url="api/rgw/user"}list(){return this.enumerate().pipe(Object(u.a)(t=>t.length>0?Object(s.a)(t.map(t=>this.get(t))):Object(o.a)([])))}enumerate(){return this.http.get(this.url)}enumerateEmail(){return this.http.get(`${this.url}/get_emails`)}get(t){return this.http.get(`${this.url}/${t}`)}getQuota(t){return this.http.get(`${this.url}/${t}/quota`)}create(t){let e=new r.h;return i.keys(t).forEach(n=>{e=e.append(n,t[n])}),this.http.post(this.url,null,{params:e})}update(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.put(`${this.url}/${t}`,null,{params:n})}updateQuota(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.put(`${this.url}/${t}/quota`,null,{params:n})}delete(t){return this.http.delete(`${this.url}/${t}`)}createSubuser(t,e){let n=new r.h;return i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.post(`${this.url}/${t}/subuser`,null,{params:n})}deleteSubuser(t,e){return this.http.delete(`${this.url}/${t}/subuser/${e}`)}addCapability(t,e,n){let a=new r.h;return a=a.append("type",e),a=a.append("perm",n),this.http.post(`${this.url}/${t}/capability`,null,{params:a})}deleteCapability(t,e,n){let a=new r.h;return a=a.append("type",e),a=a.append("perm",n),this.http.delete(`${this.url}/${t}/capability`,{params:a})}addS3Key(t,e){let n=new r.h;return n=n.append("key_type","s3"),i.keys(e).forEach(t=>{n=n.append(t,e[t])}),this.http.post(`${this.url}/${t}/key`,null,{params:n})}deleteS3Key(t,e){let n=new r.h;return n=n.append("key_type","s3"),n=n.append("access_key",e),this.http.delete(`${this.url}/${t}/key`,{params:n})}exists(t){return this.enumerate().pipe(Object(u.a)(e=>{const n=i.indexOf(e,t);return Object(o.a)(-1!==n)}))}emailExists(t){return t=decodeURIComponent(t),this.enumerateEmail().pipe(Object(u.a)(e=>{const n=i.indexOf(e,t);return Object(o.a)(-1!==n)}))}};return t.ngInjectableDef=d["ɵɵdefineInjectable"]({factory:function(){return new t(d["ɵɵinject"](r.c))},token:t,providedIn:c.a}),t=a.__decorate([l.a,a.__metadata("design:paramtypes",[r.c])],t),t})()},PA2r:function(t,e,n){!function(t){"use strict";var e="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),a=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function i(t){return t>1&&t<5&&1!=~~(t/10)}function s(t,e,n,a){var r=t+" ";switch(n){case"s":return e||a?"pár sekund":"pár sekundami";case"ss":return e||a?r+(i(t)?"sekundy":"sekund"):r+"sekundami";case"m":return e?"minuta":a?"minutu":"minutou";case"mm":return e||a?r+(i(t)?"minuty":"minut"):r+"minutami";case"h":return e?"hodina":a?"hodinu":"hodinou";case"hh":return e||a?r+(i(t)?"hodiny":"hodin"):r+"hodinami";case"d":return e||a?"den":"dnem";case"dd":return e||a?r+(i(t)?"dny":"dní"):r+"dny";case"M":return e||a?"měsíc":"měsícem";case"MM":return e||a?r+(i(t)?"měsíce":"měsíců"):r+"měsíci";case"y":return e||a?"rok":"rokem";case"yy":return e||a?r+(i(t)?"roky":"let"):r+"lety"}}t.defineLocale("cs",{months:e,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},PCNd:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},"PEr+":function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("EEJc"),s=n("ajRT"),o=n("s7LF"),u=n("+gVj"),l=n("mXUL"),d=n("IZUe"),c=n("gp3X"),f=n("sb0X"),h=n("KVJa"),g=n("Z21x"),p=n("sne2"),b=n("0+/T"),m=n("LqlI");n.d(e,"a",(function(){return k}));var y=a["ɵcrt"]({encapsulation:0,styles:[[".modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]{margin-top:1em}.modal-body[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-top:7px}"]],data:{}});function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," "])),a["ɵppd"](2,1),(t()(),a["ɵeld"](3,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](4,null,["",""])),(t()(),a["ɵted"](-1,null,["?"]))],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent.parent,0),n.actionDescription));t(e,1,0,r),t(e,4,0,n.itemNames[0])}))}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," the selected items?"])),a["ɵppd"](2,1),(t()(),a["ɵeld"](3,0,null,null,2,"ul",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](5,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,5,0,e.component.itemNames)}),(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent.parent,0),n.actionDescription));t(e,1,0,r)}))}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,_)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["manyNames",2]],null,0,null,O))],(function(t,e){t(e,2,0,1===e.component.itemNames.length,a["ɵnov"](e,3))}),null)}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["Are you sure that you want to "," the selected ","?"])),a["ɵppd"](2,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,1,0,t(e,2,0,a["ɵnov"](e.parent,0),n.actionDescription));t(e,1,0,r,n.itemDescription)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function N(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function C(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," ","\n"])),a["ɵppd"](1,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,0,0,t(e,1,0,a["ɵnov"](e.parent,1),n.actionDescription));t(e,0,0,r,n.itemDescription)}))}function R(t){return a["ɵvid"](0,[a["ɵpid"](0,r.LowerCasePipe,[]),a["ɵpid"](0,r.TitleCasePipe,[]),a["ɵqud"](402653184,1,{submitButton:0}),(t()(),a["ɵeld"](3,0,null,null,43,"cd-modal",[],null,null,null,i.c,i.b)),a["ɵdid"](4,49152,[["modal",4]],0,s.a,[],{modalRef:[0,"modalRef"]},null),(t()(),a["ɵeld"](5,0,null,0,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](7,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](8,0,null,1,38,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](9,0,null,null,37,"form",[["name","deletionForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,11).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,11).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,14).onSubmit()&&r),r}),null,null)),a["ɵdid"](10,16384,null,0,o.G,[],null,null),a["ɵdid"](11,540672,[["formDir",4]],0,o.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,o.d,null,[o.l]),a["ɵdid"](13,16384,null,0,o.s,[[4,o.d]],null,null),a["ɵdid"](14,16384,null,0,u.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](15,0,null,null,24,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,x)),a["ɵdid"](17,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](18,0,null,null,21,"div",[["class","question"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](20,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["noNames",2]],null,0,null,S)),(t()(),a["ɵand"](16777216,null,null,2,null,I)),a["ɵdid"](23,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),a["ɵpod"](24,{form:0}),(t()(),a["ɵeld"](25,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,l.b,l.a)),a["ɵdid"](26,1163264,null,2,u.c,[a.ElementRef,u.g],null,null),a["ɵqud"](603979776,2,{FormControlNames:1}),a["ɵqud"](603979776,3,{messagesBlock:0}),(t()(),a["ɵeld"](29,0,null,0,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),a["ɵeld"](30,0,null,null,7,"input",[["autofocus",""],["class","custom-control-input"],["formControlName","confirmation"],["id","confirmation"],["name","confirmation"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t,31).onChange(n.target.checked)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,31).onTouched()&&r),r}),null,null)),a["ɵdid"](31,16384,null,0,o.c,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,o.p,(function(t){return[t]}),[o.c]),a["ɵdid"](33,671744,[[2,4]],0,o.j,[[3,o.d],[8,null],[8,null],[6,o.p],[2,o.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,o.q,null,[o.j]),a["ɵdid"](35,16384,null,0,o.r,[[4,o.q]],null,null),a["ɵdid"](36,4210688,null,0,d.a,[a.ElementRef],{autofocus:[0,"autofocus"]},null),a["ɵdid"](37,16384,null,0,u.h,[[3,o.d],u.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵeld"](38,0,null,null,1,"label",[["class","custom-control-label"],["for","confirmation"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Yes, I am sure."])),(t()(),a["ɵeld"](40,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](41,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.callSubmitAction()&&a),a}),c.b,c.a)),a["ɵdid"](42,114688,[[1,4],["submitButton",4]],0,f.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵand"](16777216,null,0,1,null,N)),a["ɵdid"](44,540672,null,0,r.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),a["ɵeld"](45,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,h.b,h.a)),a["ɵdid"](46,49152,null,0,g.a,[r.Location,p.b],{name:[0,"name"],back:[1,"back"]},null),(t()(),a["ɵand"](0,[["deletionHeading",2]],null,0,null,C))],(function(t,e){var n=e.component;t(e,4,0,n.modalRef),t(e,7,0,a["ɵnov"](e,47)),t(e,11,0,n.deletionForm),t(e,14,0,n.deletionForm),t(e,17,0,n.bodyContext,n.bodyTemplate),t(e,20,0,n.itemNames,a["ɵnov"](e,21));var r=t(e,24,0,n.deletionForm);t(e,23,0,r,n.childFormGroupTemplate),t(e,26,0),t(e,33,0,"confirmation"),t(e,36,0,""),t(e,37,0,"confirmation"),t(e,42,0,n.deletionForm),t(e,44,0,a["ɵnov"](e,47)),t(e,46,0,"Cancel",n.modalRef.hide)}),(function(t,e){t(e,9,0,a["ɵnov"](e,13).ngClassUntouched,a["ɵnov"](e,13).ngClassTouched,a["ɵnov"](e,13).ngClassPristine,a["ɵnov"](e,13).ngClassDirty,a["ɵnov"](e,13).ngClassValid,a["ɵnov"](e,13).ngClassInvalid,a["ɵnov"](e,13).ngClassPending),t(e,25,0,a["ɵnov"](e,26).hasErrors,a["ɵnov"](e,26).hasSuccess),t(e,30,0,a["ɵnov"](e,35).ngClassUntouched,a["ɵnov"](e,35).ngClassTouched,a["ɵnov"](e,35).ngClassPristine,a["ɵnov"](e,35).ngClassDirty,a["ɵnov"](e,35).ngClassValid,a["ɵnov"](e,35).ngClassInvalid,a["ɵnov"](e,35).ngClassPending,a["ɵnov"](e,37).validClass,a["ɵnov"](e,37).invalidClass)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-deletion-modal",[],null,null,null,R,y)),a["ɵdid"](1,114688,null,0,b.a,[m.a],null,null)],(function(t,e){t(e,1,0)}),null)}var k=a["ɵccf"]("cd-deletion-modal",b.a,A,{},{},[])},PKPk:function(t,e,n){"use strict";var a=n("ZUd8").charAt,r=n("afO8"),i=n("fdAy"),s=r.set,o=r.getterFor("String Iterator");i(String,"String",(function(t){s(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=o(this),n=e.string,r=e.index;return r>=n.length?{value:void 0,done:!0}:(t=a(n,r),e.index+=t.length,{value:t,done:!1})}))},PeUW:function(t,e,n){!function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e?t:"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})}(n("wd/R"))},PpIw:function(t,e,n){!function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})}(n("wd/R"))},PqYM:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("D0XW"),i=n("Y7HM"),s=n("z+Ro");function o(t=0,e,n){let o=-1;return Object(i.a)(e)?o=Number(e)<1?1:Number(e):Object(s.a)(e)&&(n=e),Object(s.a)(n)||(n=r.a),new a.a(e=>{const a=Object(i.a)(t)?t:+t-n.now();return n.schedule(u,a,{index:0,period:o,subscriber:e})})}function u(t){const{index:e,period:n,subscriber:a}=t;if(a.next(e),!a.closed){if(-1===n)return a.complete();t.index=e+1,this.schedule(t,n)}}},Puqe:function(t,e,n){var a=n("eUgh"),r=n("OBhP"),i=n("S7Xf"),s=n("4uTw"),o=n("juv8"),u=n("4Oe1"),l=n("xs/l"),d=n("G6z8"),c=l((function(t,e){var n={};if(null==t)return n;var l=!1;e=a(e,(function(e){return e=s(e,t),l||(l=e.length>1),e})),o(t,d(t),n),l&&(n=r(n,7,u));for(var c=e.length;c--;)i(n,e[c]);return n}));t.exports=c},Q1l4:function(t,e){t.exports=function(t,e){var n=-1,a=t.length;for(e||(e=Array(a));++n<a;)e[n]=t[n];return e}},QC43:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("MdoF"),i=n("CNMR"),s=n("SVse");n("XFyV"),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u}));var o=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"alert",[["type","info"]],null,null,null,r.c,r.b)),a["ɵdid"](1,114688,null,0,i.a,[i.b,a.ChangeDetectorRef],{type:[0,"type"]},null),(t()(),a["ɵeld"](2,0,null,0,4,"strong",[],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,s["ɵNgClassImpl"],s["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,s.NgClass,[s["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,2),a["ɵncd"](0,0)],(function(t,e){var n=e.component;t(e,1,0,"info");var a=t(e,6,0,n.icons.spinner,n.icons.spin);t(e,5,0,a)}),null)}},QFaf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("s7LF");class r extends a.k{constructor(t,e,n){super(t,e,n),this.controls=t}get(t){const e=this._get(t);if(!e)throw new Error(`Control '${t}' could not be found!`);return e}_get(t){return super.get(t)||Object.values(this.controls).filter(t=>t.get).map(e=>e instanceof r?e._get(t):e.get(t)).find(t=>Boolean(t))}getValue(t){return this.get(t).value}silentSet(t,e){this.get(t).setValue(e,{emitEvent:!1})}showError(t,e,n){const a=this.get(t);return(e.submitted||a.dirty)&&(n?a.hasError(n):a.invalid)}}},QIyF:function(t,e,n){var a=n("Kz5y");t.exports=function(){return a.Date.now()}},QTAa:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("t/zF");class r extends a.a{}},QWBl:function(t,e,n){"use strict";var a=n("I+eb"),r=n("F8JR");a({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},QcOe:function(t,e,n){var a=n("GoyQ"),r=n("6sVZ"),i=n("7Ix3"),s=Object.prototype.hasOwnProperty;t.exports=function(t){if(!a(t))return i(t);var e=r(t),n=[];for(var o in t)("constructor"!=o||!e&&s.call(t,o))&&n.push(o);return n}},Qj4J:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n("wd/R"))},QkVE:function(t,e,n){var a=n("EpBk");t.exports=function(t,e){var n=t.__data__;return a(e)?n["string"==typeof e?"string":"hash"]:n.map}},Qo9l:function(t,e,n){var a=n("2oRo");t.exports=a},QoRX:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(e(t[n],n,t))return!0;return!1}},QqLw:function(t,e,n){var a=n("tadb"),r=n("ebwN"),i=n("HOxn"),s=n("yGk4"),o=n("Of+w"),u=n("NykK"),l=n("3Fdi"),d=l(a),c=l(r),f=l(i),h=l(s),g=l(o),p=u;(a&&"[object DataView]"!=p(new a(new ArrayBuffer(1)))||r&&"[object Map]"!=p(new r)||i&&"[object Promise]"!=p(i.resolve())||s&&"[object Set]"!=p(new s)||o&&"[object WeakMap]"!=p(new o))&&(p=function(t){var e=u(t),n="[object Object]"==e?t.constructor:void 0,a=n?l(n):"";if(a)switch(a){case d:return"[object DataView]";case c:return"[object Map]";case f:return"[object Promise]";case h:return"[object Set]";case g:return"[object WeakMap]"}return e}),t.exports=p},"R/W3":function(t,e,n){var a=n("KwMD"),r=n("2ajD"),i=n("CZoQ");t.exports=function(t,e,n){return e==e?i(t,e,n):a(t,r,n)}},RAwQ:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?r[n][0]:r[n][1]}function n(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10;return n(0===e?t/10:e)}if(t<1e4){for(;t>=10;)t/=10;return n(t)}return n(t/=1e3)}t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(t){return n(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t},past:function(t){return n(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t},s:"e puer Sekonnen",ss:"%d Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},RBan:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},RK3t:function(t,e,n){var a=n("0Dky"),r=n("xrYK"),i="".split;t.exports=a((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==r(t)?i.call(t,""):Object(t)}:Object},RNIs:function(t,e,n){var a=n("tiKp"),r=n("fHMY"),i=n("m/L8"),s=a("unscopables"),o=Array.prototype;null==o[s]&&i.f(o,s,{configurable:!0,value:r(null)}),t.exports=function(t){o[s][t]=!0}},Rf2I:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("s7LF"),r=n("LvDl");n("2EZI"),n("Fgil"),n("aXbf");class i{constructor(t,e,n,a,r){this.bsModalRef=t,this.formBuilder=e,this.formatter=n,this.dimlessBinaryPipe=a,this.i18n=r}ngOnInit(){this.createForm()}createForm(){const t={};this.fields.forEach(e=>{t[e.name]=this.createFormControl(e)}),this.formGroup=this.formBuilder.group(t)}createFormControl(t){let e=[];return r.isBoolean(t.required)&&t.required&&e.push(a.B.required),t.validators&&(e=e.concat(t.validators)),new a.i(r.defaultTo("binary"===t.type?this.dimlessBinaryPipe.transform(t.value):t.value,null),{validators:e})}getError(t){const e=this.formGroup.get(t.name).errors;return Object.keys(e).map(n=>this.getErrorMessage(n,e[n],t.errors)).join("<br>")}getErrorMessage(t,e,n){if(n){const e=n[t];if(e)return e}return["binaryMin","binaryMax"].includes(t)?e(this.i18n):this.i18n("required"===t?"This field is required.":"An error occurred.")}onSubmitForm(t){this.fields.filter(t=>"binary"===t.type).map(t=>t.name).forEach(e=>{const n=t[e];n&&(t[e]=this.formatter.toBytes(n))}),this.bsModalRef.hide(),r.isFunction(this.onSubmit)&&this.onSubmit(t)}}},Rm1S:function(t,e,n){"use strict";var a=n("14Sl"),r=n("glrk"),i=n("UMSQ"),s=n("HYAF"),o=n("iqWW"),u=n("FMNM");a("match",1,(function(t,e,n){return[function(e){var n=s(this),a=null==e?void 0:e[t];return void 0!==a?a.call(e,n):new RegExp(e)[t](String(n))},function(t){var a=n(e,t,this);if(a.done)return a.value;var s=r(t),l=String(this);if(!s.global)return u(s,l);var d=s.unicode;s.lastIndex=0;for(var c,f=[],h=0;null!==(c=u(s,l));){var g=String(c[0]);f[h]=g,""===g&&(s.lastIndex=o(l,i(s.lastIndex),d)),h++}return 0===h?null:f}]}))},RnhZ:function(t,e,n){var a={"./af":"K/tc","./af.js":"K/tc","./ar":"jnO4","./ar-dz":"o1bE","./ar-dz.js":"o1bE","./ar-kw":"Qj4J","./ar-kw.js":"Qj4J","./ar-ly":"HP3h","./ar-ly.js":"HP3h","./ar-ma":"CoRJ","./ar-ma.js":"CoRJ","./ar-sa":"gjCT","./ar-sa.js":"gjCT","./ar-tn":"bYM6","./ar-tn.js":"bYM6","./ar.js":"jnO4","./az":"SFxW","./az.js":"SFxW","./be":"H8ED","./be.js":"H8ED","./bg":"hKrs","./bg.js":"hKrs","./bm":"p/rL","./bm.js":"p/rL","./bn":"kEOa","./bn.js":"kEOa","./bo":"0mo+","./bo.js":"0mo+","./br":"aIdf","./br.js":"aIdf","./bs":"JVSJ","./bs.js":"JVSJ","./ca":"1xZ4","./ca.js":"1xZ4","./cs":"PA2r","./cs.js":"PA2r","./cv":"A+xa","./cv.js":"A+xa","./cy":"l5ep","./cy.js":"l5ep","./da":"DxQv","./da.js":"DxQv","./de":"tGlX","./de-at":"s+uk","./de-at.js":"s+uk","./de-ch":"u3GI","./de-ch.js":"u3GI","./de.js":"tGlX","./dv":"WYrj","./dv.js":"WYrj","./el":"jUeY","./el.js":"jUeY","./en-SG":"zavE","./en-SG.js":"zavE","./en-au":"Dmvi","./en-au.js":"Dmvi","./en-ca":"OIYi","./en-ca.js":"OIYi","./en-gb":"Oaa7","./en-gb.js":"Oaa7","./en-ie":"4dOw","./en-ie.js":"4dOw","./en-il":"czMo","./en-il.js":"czMo","./en-nz":"b1Dy","./en-nz.js":"b1Dy","./eo":"Zduo","./eo.js":"Zduo","./es":"iYuL","./es-do":"CjzT","./es-do.js":"CjzT","./es-us":"Vclq","./es-us.js":"Vclq","./es.js":"iYuL","./et":"7BjC","./et.js":"7BjC","./eu":"D/JM","./eu.js":"D/JM","./fa":"jfSC","./fa.js":"jfSC","./fi":"gekB","./fi.js":"gekB","./fo":"ByF4","./fo.js":"ByF4","./fr":"nyYc","./fr-ca":"2fjn","./fr-ca.js":"2fjn","./fr-ch":"Dkky","./fr-ch.js":"Dkky","./fr.js":"nyYc","./fy":"cRix","./fy.js":"cRix","./ga":"USCx","./ga.js":"USCx","./gd":"9rRi","./gd.js":"9rRi","./gl":"iEDd","./gl.js":"iEDd","./gom-latn":"DKr+","./gom-latn.js":"DKr+","./gu":"4MV3","./gu.js":"4MV3","./he":"x6pH","./he.js":"x6pH","./hi":"3E1r","./hi.js":"3E1r","./hr":"S6ln","./hr.js":"S6ln","./hu":"WxRl","./hu.js":"WxRl","./hy-am":"1rYy","./hy-am.js":"1rYy","./id":"UDhR","./id.js":"UDhR","./is":"BVg3","./is.js":"BVg3","./it":"bpih","./it-ch":"bxKX","./it-ch.js":"bxKX","./it.js":"bpih","./ja":"B55N","./ja.js":"B55N","./jv":"tUCv","./jv.js":"tUCv","./ka":"IBtZ","./ka.js":"IBtZ","./kk":"bXm7","./kk.js":"bXm7","./km":"6B0Y","./km.js":"6B0Y","./kn":"PpIw","./kn.js":"PpIw","./ko":"Ivi+","./ko.js":"Ivi+","./ku":"JCF/","./ku.js":"JCF/","./ky":"lgnt","./ky.js":"lgnt","./lb":"RAwQ","./lb.js":"RAwQ","./lo":"sp3z","./lo.js":"sp3z","./lt":"JvlW","./lt.js":"JvlW","./lv":"uXwI","./lv.js":"uXwI","./me":"KTz0","./me.js":"KTz0","./mi":"aIsn","./mi.js":"aIsn","./mk":"aQkU","./mk.js":"aQkU","./ml":"AvvY","./ml.js":"AvvY","./mn":"lYtQ","./mn.js":"lYtQ","./mr":"Ob0Z","./mr.js":"Ob0Z","./ms":"6+QB","./ms-my":"ZAMP","./ms-my.js":"ZAMP","./ms.js":"6+QB","./mt":"G0Uy","./mt.js":"G0Uy","./my":"honF","./my.js":"honF","./nb":"bOMt","./nb.js":"bOMt","./ne":"OjkT","./ne.js":"OjkT","./nl":"+s0g","./nl-be":"2ykv","./nl-be.js":"2ykv","./nl.js":"+s0g","./nn":"uEye","./nn.js":"uEye","./pa-in":"8/+R","./pa-in.js":"8/+R","./pl":"jVdC","./pl.js":"jVdC","./pt":"8mBD","./pt-br":"0tRk","./pt-br.js":"0tRk","./pt.js":"8mBD","./ro":"lyxo","./ro.js":"lyxo","./ru":"lXzo","./ru.js":"lXzo","./sd":"Z4QM","./sd.js":"Z4QM","./se":"//9w","./se.js":"//9w","./si":"7aV9","./si.js":"7aV9","./sk":"e+ae","./sk.js":"e+ae","./sl":"gVVK","./sl.js":"gVVK","./sq":"yPMs","./sq.js":"yPMs","./sr":"zx6S","./sr-cyrl":"E+lV","./sr-cyrl.js":"E+lV","./sr.js":"zx6S","./ss":"Ur1D","./ss.js":"Ur1D","./sv":"X709","./sv.js":"X709","./sw":"dNwA","./sw.js":"dNwA","./ta":"PeUW","./ta.js":"PeUW","./te":"XLvN","./te.js":"XLvN","./tet":"V2x9","./tet.js":"V2x9","./tg":"Oxv6","./tg.js":"Oxv6","./th":"EOgW","./th.js":"EOgW","./tl-ph":"Dzi0","./tl-ph.js":"Dzi0","./tlh":"z3Vd","./tlh.js":"z3Vd","./tr":"DoHr","./tr.js":"DoHr","./tzl":"z1FC","./tzl.js":"z1FC","./tzm":"wQk9","./tzm-latn":"tT3J","./tzm-latn.js":"tT3J","./tzm.js":"wQk9","./ug-cn":"YRex","./ug-cn.js":"YRex","./uk":"raLr","./uk.js":"raLr","./ur":"UpQW","./ur.js":"UpQW","./uz":"Loxo","./uz-latn":"AQ68","./uz-latn.js":"AQ68","./uz.js":"Loxo","./vi":"KSF8","./vi.js":"KSF8","./x-pseudo":"/X5v","./x-pseudo.js":"/X5v","./yo":"fzPg","./yo.js":"fzPg","./zh-cn":"XDpg","./zh-cn.js":"XDpg","./zh-hk":"SatO","./zh-hk.js":"SatO","./zh-tw":"kOpN","./zh-tw.js":"kOpN"};function r(t){var e=i(t);return n(e)}function i(t){if(!n.o(a,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return a[t]}r.keys=function(){return Object.keys(a)},r.resolve=i,t.exports=r,r.id="RnhZ"},S6ln:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=t+" ";switch(n){case"ss":return a+(1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return a+(1===t?"minuta":2===t||3===t||4===t?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return a+(1===t?"sat":2===t||3===t||4===t?"sata":"sati");case"dd":return a+(1===t?"dan":"dana");case"MM":return a+(1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci");case"yy":return a+(1===t?"godina":2===t||3===t||4===t?"godine":"godina")}}t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},S7Xf:function(t,e,n){var a=n("4uTw"),r=n("RBan"),i=n("gpbi"),s=n("9Nap");t.exports=function(t,e){return e=a(e,t),null==(t=i(t,e))||delete t[s(r(e))]}},S7zO:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LvDl"),r=n("oxzT");n("vCyI"),n("jKX/");class i{constructor(){this.btnColor="secondary",this.dropDownActions=[],this.icons=r.a}ngOnInit(){this.removeActionsWithNoPermissions(),this.updateDropDownActions()}toClassName(t){return t.replace(/ /g,"-").replace(/[^a-z-]/gi,"").toLowerCase()}removeActionsWithNoPermissions(){if(!this.permission)return void(this.tableActions=[]);const t=Object.keys(this.permission).filter(t=>this.permission[t]);this.tableActions=this.tableActions.filter(e=>t.includes(e.permission))}updateDropDownActions(){this.dropDownActions=this.tableActions.filter(t=>t.visible?t.visible(this.selection):t)}getCurrentButton(){if(this.dropDownOnly)return;let t=this.dropDownActions.find(t=>this.showableAction(t));return!t&&this.dropDownActions.length>0&&(t=this.dropDownActions[0]),t}showableAction(t){const e=t.canBePrimary,n=this.selection.hasSingleSelection,a="create"===t.permission?!n:n;return e&&e(this.selection)||!e&&a}useRouterLink(t){if(t.routerLink&&!this.disableSelectionAction(t))return a.isString(t.routerLink)?t.routerLink:t.routerLink()}disableSelectionAction(t){const e=t.disable;if(e)return Boolean(e(this.selection));const n=t.permission,a=this.selection.hasSingleSelection&&this.selection.first();return Boolean(["update","delete"].includes(n)&&(!a||a.cdExecuting))}showDropDownActions(){return this.updateDropDownActions(),this.dropDownActions.length>1}useClickAction(t){return!this.disableSelectionAction(t)&&t.click&&t.click()}useDisableDesc(t){return t.disableDesc&&t.disableDesc(this.selection)}}},"SB+Q":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return encodeURIComponent(t)}}},SFxW:function(t,e,n){!function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10;return t+(e[n]||e[t%100-n]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},SKAX:function(t,e,n){var a=n("JC6p"),r=n("lQqw")(a);t.exports=r},SPu7:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="pl-PL">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Rozwiń</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Pulpit</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klaster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosty</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitory</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Usługi</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD-ki</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfiguracja</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH mapa</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Zarządca modułów</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Logi</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pule</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Dostęp blokowy</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Obrazy</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Kopia lustrzana</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>Sieciowy system plików NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Systemy plików</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Dostęp obiektowy</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Demony</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Wiadra</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Wybierz język</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Trwa ładowanie danych...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Wybór czasu Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Zresetuj ustawienia</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Wstecz</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Błąd wczytywania danych.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>Wybrane</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>Znaleziono</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>Razem</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nazwa</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Opis</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Długi opis</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Domyślna</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Domyślny demon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Wartości</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Zapisz</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>widok CRUSH mapy</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Ładowanie...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nazwa hosta</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Pole jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Tak, jestem pewny.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Anuluj</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Zamknij</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista hostów</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Całkowita wydajność</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nie znaleziono wejść</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Logi z klastra </target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Audyt logów</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Ładowanie konfiguracji.</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Nie można załadować konfiguracji</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Edytuj moduł zarządzania</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Wpisana wartość nie jest poprawnym UUID, np. 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Wpisana wartość musi być poprawnym adresem IP</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Podana wartość musi być liczbą</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Podana wartość musi być liczbą albo dziesiętną.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Zaktualizuj</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Klaster ID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Zmodyfikowana monmapa</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>epoka monmap</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kworum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kworum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>wymagany con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>Wymagane mon </target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>W kworum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Nie w kworum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Dodaj</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funkcje</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flagi OSD w całym klastrze</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Zatwierdź</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Zaawansowane...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorytet odzyskiwania OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorytet</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Dostosuj wartości priorytetowe</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>To pole jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Wartość powinna być pomiędzy 0 a 1. </target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ponowne ważenie</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, wybierz, 1 {Głębokość} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, wybierz, 1 {głębokość} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista OSD-ków </target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Wartość</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Edytuj</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Usuń</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Zdrowie</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statystyki</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klienci</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Każdy klient ma dostęp</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresy</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Obowiązkowe pole</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Musi zawierać jedną albo więcej ,rozdzielonych przecinkiem, wartości </target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Na przykład: </target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Typ dostępu</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Dodaj klientów </target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Brak dostępnego klastra -- </target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Wybierz klaster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Dodaj demona</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Pamięć Podręczna</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Brak danych puli -- </target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Wybierz pamięć podręczną -- </target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Użytkownik dostępu obiektowego</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Brak dostępnych użytkowników -- </target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Wybierz użytkownika dostępu obiektowego -- </target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFS Użytkownik ID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Brak dostępnych klientów -- </target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Wybierz klienta cephx -- </target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nazwa CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etykieta bezpieczeństwa</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Uruchom etykietę bezpieczeństwa</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Ścieżka CephFS </target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Ścieżka powinna zaczynać się z \'/\' i następne może być słowo</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Nowy katalog będzie stworzony. </target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Ścieżka</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Ścieżką może być tylko \'/\' albo słowo</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Nowe wiadro będzie stworzone </target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protokół NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klient może nie montować podkatalogów ( np. jeśli Tag = foo, klient może nie montować foo/baz) </target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Używając różnych opcji Tagu, ta sama Ścieżka może być wyeksportowana kilka razy.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Używając różnych opcji Pseudo, ta sama Ścieżka może być wyeksportowana kilka razy.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Brak dostępnych typów dostępu --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Wybierz typ dostępu --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>- Brak squasha -</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Wybierz, jakiego rodzaju identyfikacja użytkownika ma być przeprowadzana --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protokół Transportu </target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Witamy w Cephie! </target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nazwa użytkownika jest wymagana</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Hasło jest wymagane.</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Zaloguj</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Przepraszam, użytkownik nie istnieje w  Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Zakazany</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Przepraszam, nie masz dostępu do tego czego szukasz. </target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Konfiguracja RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Usuń wartość konfiguracji lokalnej. Wartość konfiguracji rodzica będzie odziedziczona i zostanie użyta zamiast tej.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Minimalna wartość wynosi 0.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista puli</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Nazwa może składać się z alfanumerycznych znaków, kresek i podkreśleń.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Wybrana nazwa profilu kodu kasowania jest już używana.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Wtyczka</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Ramka danych (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Musi być większa bądź równa 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Kodowanie kawałka (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Musi być większa bądź równa 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estymator trwałości (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Lokalność  (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domena niepowodzenia Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalność Crusha</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Nic</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technika</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Rozmiar pakietu</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>korzeń Crusha</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>urządzenie klasy Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>którykolwiek</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Katalog</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nazwa...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Wybrana nazwa Ceph pula jest już użyta.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Typ pula</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Wybierz typ pula --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupa umieszczenia</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Przynajmniej jedna grupa umieszczenia jest wymagana</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Twój klaster nie obsługuje tylu PG. Skalkuluj proszę potrzebną ilość PG.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Pomoc obliczeniowa</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Replikowany rozmiar</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flagi</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC Nadpisuje</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Zastosowania</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Skasuj profil kodu.</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Brak profilu kasowania --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Wybierz profil kodu wymazywania --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>zbiór zasad Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Wybierz zasadę Crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>zasada Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Kroki Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Kompresja</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Tryb</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorytm</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Brak algorytmu kompresji wymazywania --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>np. 128 KB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Wartość powinna być większa niż 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Maksymalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>np. 512 KB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Wartość powinna być większa niż minimalny rozmiar blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Stosunek</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Skompresowany stosunek</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Wartość powinna być pomiędzy 0.0, a 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>np. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Szczegóły</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Szczegóły wydajności</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Szczegóły poziomów pamięci podręcznej</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Przenieś obraz do kosza</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Zabezpieczenie wygasa w </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NIEZABEZPIECZONY </target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Zły format daty. Proszę używać "RRRR-MM-DD GG:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Ochrona już wygasła. Proszę wybrać przyszłą datę lub zostawić pustą.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Przenieś obraz</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Przegląd</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Obiekty docelowe</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Uwierzytelnianie wykrywania</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Użytkownik</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nazwy użytkowników muszą mieć długość od 8 do 64 znaków i \nmogą zawierać jedynie litery, \'.\', \'@\', \'-\', \'_\' lub \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Hasło</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Wspólny użytkownik </target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Wspólne hasło</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Dostępne informacje: </target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>obiekty docelowe iSCSI niedostępne </target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pul</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Dane pula</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Utworzony</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Rozmiar</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Obiekty</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Rozmiar obiektu</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Zaopatrzony</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>Niedostępny</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Całkowite rezerwy</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Jednostka maskowana</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Licznik maskowania</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Rodzic</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefiks nazwy bloku</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Zamówienie</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Migawki</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Obraz</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>To ustawienie zastępuję wartość globalną.</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globalne</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>To jest globalna wartość. Dla tego obrazu nie ustawiono żadnej wartości dla tej opcji.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' and \'@\' nie są dozwolone.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Brak dostępnych rbd puli --  </target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Wybierz pul --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Użyj dedykowanych danych pul </target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Dane pul</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Dedykowany pul, który przechowuje dane obiektowe z RBD</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Musisz zwiększyć rozmiar.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Zaawansowane</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Maskowanie</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Jednostka pasków</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Wybierz jednostkę pasków -- </target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Pole jest wymagane, ponieważ licznik pasków jest zdefiniowany. </target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Jednostka pasków jest większa niż rozmiar obiektu.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Licznik pasków </target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Pole jest wymagane, ponieważ jednostka pasków jest zdefiniowana! </target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Licznik pasków musi być większy od 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Zaraz się wycofasz. </target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Usuń Śmieci</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Wszystkie</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pul:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nazwa pula</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Przywróć obraz</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Przywróć</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>Wpisz nazwe nowego obrazu i kliknij. </target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nowa Nazwa</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Wygasły w</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Zabezpieczony do</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologia iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Zmiana tych parametrów z domyślnych wartości przeważnie nie jest potrzebna.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Ustawienia</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Tylny koniec przechowywania</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Potwierdź</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Ustawienia zaawansowane</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Nazwa IQN obiektu docelowego iSCSI</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Błędna składnia nazwy IQN.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Na przykład: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Więcej informacji</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Ten obiekt docelowy  zmodyfikował zaawansowane ustawienia.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portale</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Dodaj portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Ten obraz zmodyfikował ustawienia. </target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Dodaj obraz.</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Uwierzytelnianie ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Inicjatory iSCSI</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Inicjator iSCSI</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Klient IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Inicjator IQN powinien być unikalny.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nazwy użytkowników muszą mieć długość od 8 do 64 znaków i mogą zawierać jedynie litery,  \'.\', \'@\', \'-\', \'_\' lub  \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Inicjator iSCSI należą do grupy. Obrazy będą skonfigurowane w grupie. </target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Brak dodanych pozycji.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Dodaj inicjator iSCSI</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupy</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupa</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Dodaj grupę</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Kosz</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Zagadnienia</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronizacja</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Gotowy</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Tryb edycji lustrzanego pula</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Sparowany klaster musi być usunięty  przed wyłączeniem lustra. </target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, wybierz, edytuj{Edytuj} inaczej {Dodaj} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nazwa Klastra</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Nazwa klastra jest niepoprawna </target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>ID CephX nie jest poprawne.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adres monitora </target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Adresy rozdzielane przecinkami... </target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Adres monitora nie jest poprawny.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Klucz CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Klucz zakodowany w Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Klucz CephX musi być zakodowany w Base64/</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Liczniki wydajności nie są dostępne</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista demonów</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Liczniki wydajności</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Ładowanie wiadra danych</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Number ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Wartość nie jest poprawna.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Wybrana nazwa już jest użyta.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Właściciel</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Wybierz użytkownika -- </target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Uaktywniony</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Typ indeksu</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Zasada umieszczania</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Znacznik</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Maksymalny znacznik</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Wersja</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Główna wersja</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Czas modyfikacji</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Strefa </target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>kontyngent wiadra</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Maksymalny rozmiar</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Nielimitowany</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Maksimum obiektów</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nazwa użytkownika</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Wybierz nazwę użytkownika -- </target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Auto-generowany klucz</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Klucz dostępu</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Tajny klucz </target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Pełne imię </target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Adres email</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Zawieszony</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>System</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Maksimum wiader</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>pod-użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Zdolności</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Limit użytkownika</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Pokaż</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Klucze</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- wybierz typ --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Pozwolenie </target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Wybierz pozwolenie --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>pod-użytkownik</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Wybrane ID pod-użytkownika jest już użyte.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>odczyt, zapis</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>pełny</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Szybki klucz</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Auto-generowany sekret</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Ładowanie danych użytkownika...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Nie można załadować danych użytkownika.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Wybrane ID użytkownika jest już użyte.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ten adres email nie jest poprawny.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Wybrany adres email jest już użyty.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Max. wiader </target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Wyłączony</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Zwyczaj</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>klucz S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Nie ma pod-użytkowników.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3 (prosty serwis przechowywania) </target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Nie ma kluczy.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Szybki</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Nie ma zdolności. </target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Nielimitowany rozmiar</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Max. rozmiar</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Nielimitowane obiekty</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Max. obiektów</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Podana wartość musi być &gt;= 0</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Opis...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Pozwolenia</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Role</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Potwierdź hasło</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Potwierdzające hasło nie pokrywa się z hasłem.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Email</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Niepoprawny email.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Zamierzasz usunąć uprawnienia „odczytu / aktualizacji użytkownika” od własnego użytkownika.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Jeśli kontynuujesz, nie będziesz mógł dodawać albo usuwać role od użytkowników.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Jesteś pewny, że chcesz kontynuować? </target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Pomoc</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentacja</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>Interfejs API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>O</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Ustawienia Pulpitu</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Zarządzanie użytkownikami</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Zalogowany użytkownik</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Wyloguj</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atrybuty (mapa OSD-ków)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Niedostępne metadane</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadane</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Licznik wydajności</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Pisze</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Czyta</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Obecne wartości </target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Źródło </target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Poziom</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Może być aktualizowany w czasie wykonywania (edytowalny)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tagi</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Wartości enumerowane </target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Zobacz także </target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status klastra</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Zarządzanie demonami</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Obiekty bram </target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Serwery metadanych</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Bramy iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>Klient IOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Przepustowość klienta</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Odczyt/Zapis klienta</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Przepustowość odzyskiwania</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Szoruj</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Wydajność</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Pojemność rzędu</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PG-y na OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Pojemność</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Szeregi</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Obecny</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Zaktualizowane uwierzytelnianie wykrywania</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Brak dostępnych portali.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Nie ma dostępnych obrazów. </target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Nie ma dostępnych obrazów. Proszę się upewnić, że dodajesz obraz do obiektu docelowego. </target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Nie ma dostępnych inicjatorów iSCSI. Proszę upewnić się, że dodajesz inicjator iSCSI do obiektu docelowego.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>obiekt docelowy iSCSI</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stan</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Odczyt bajtów </target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Zapis bajtów</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Odczyt Ops</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Zapis Ops</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Od</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instancja</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Zagadnienie </target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Progres</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Tryb Edycji</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Dodaj parowanie </target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Edytuj parowanie</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Usuń parowanie</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Lider</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Lokalny</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Zdalny</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>lustrzane parowanie</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Klucz</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Głębokie spłaszczenie</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Warstwowanie </target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Wyłączna blokada</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa obiektów (wymaga wyłącznej blokady)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Kronikowanie  (wymaga wyłącznej blokady)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NIEZABEZPIECZONY </target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Wycofywanie migawek RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Wycofanie</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>migawka RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Usunięty o </target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stan</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>wersja</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>administrator</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Czuwanie demona </target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Ranga</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Demon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktywność</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>centrale</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>i-węzły</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Użycie</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Zaktualizowany</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Wartość może być zaktualizowana w czasie wykonywania . </target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Demony/klienci nie pobierają tej wartości z\nbazy danych skonfigurowanego monitora. Nie zezwalamy na ustawienie tej opcji przez \'konfiguracje ceph\nustaw.. \'. Ta opcja powinna być skonfigurowana przez ceph.conf albo przez\nterminal.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Opcja działa tylko podczas startu demona.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Opcja dotyczy tylko tworzenia klastra.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Opcja tylko wpływa na tworzenie demona.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Usługa</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Obecna wartość</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Edytowalny</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Włączyć</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Wyłączyć</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Ponowne łączenie, proszę czekać</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Adres publiczny</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Otwarte sesje</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Nie w </target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD-ki, które zostały oznaczone jako poza, nie będą oznaczone ponownie jako w gdy zostaną uruchomion</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Nie poza</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD-ki nie będą automatycznie oznaczone jako poza po konfiguracji interwału</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Nie powstały </target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD-ki nie mogą startować</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Nie upadły</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Raport z niepowodzenia OSD jest ignorowany, także monitory nie oznaczą OSD jako upadłego. </target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pauza </target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pauzuje czytanie i zapisywanie</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nie szoruj</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Szorowanie jest wyłączone</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nie ma głębokiego szorowania</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Głębokie szorowanie jest wyłączone</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Brak zasypywania</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Zasypywanie PG jest zawieszone</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Nie przywrócono</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Przywrócenie PGy jest zawieszone </target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Sortuj bitowo</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Użyj sortowania bitowego</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Usuń snap katalogi</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD-ki zmieniły snapsety</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Odzyskaj usunięte</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Podczas zdrowienia zastosowano usunięcie zamiast parowania</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Twardy limit logów PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Ustawia twardy limit na długość logów PG</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Zaktualizowane flagi OSD-ków</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD-ik</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>poza</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>w</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>upadły</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Zaznacz</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>Stracony OSD</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>Zaznaczony jako stracony</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Czyść</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>Oczyszczony</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>Zniszcz</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>Zniszczony</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>Usuń</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG-y</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Czytanie bajtów</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Zapis bajtów </target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Czytanie ops</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Zapis ops</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max zasypywanie</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Max aktywność wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Max pojedynczy start wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Uśpienie wyzdrowienia</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Praca</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>surowość</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Wystartowany</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Użyty</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dostępny</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Czyść</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Działający</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Ostrzeżenie </target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Nieznany</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>Podniesiony</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>brak systemów plików</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktywny</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>Rezerwa</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>niedostępny</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktywny demon</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kworum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Usługa NFS Ganesha nie jest skonfigurowana</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Użytkownik CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>system plików CephFS </target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(Odziedziczyło z globalnej konfiguracji)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>Odziedziczyło z globalnej konfiguracji</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Wybierz, jakiego rodzaju identyfikacja użytkownika ma być przeprowadzana -- </target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Brak dostępnym demonów</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Tryb pamięci podręcznej</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min wiek eksmisji</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min wiek wyrównania </target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Max bajtów obiektu docelowego </target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Max obiektów docelowych</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nie dodano żadnego zastosowania</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Osiągnięto limit zastosowań </target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Pul może mieć maksymalnie 4 definicje aplikacji. </target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Dozwolone znaki \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Maksymalna długość wynosi 128 znaków</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtruj lub dodaj zastosowanie</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Dodaj zastosowanie</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>skasuj profil kodu</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Rozmiar repliki</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Ostatnia zmiana</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Skasuj profil zakodowany</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Zbiór zasad Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>wiadro</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>Wiadra</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>użytkownik</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>użytkownicy</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Zakres</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Czytaj</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Stwórz</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>System roli </target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Zaktualizuj użytkownika</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Kontynuuj </target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Zostałeś automatycznie wylogowany, ponieważ zostały zmienione twoje role.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Każdy obiekt jest podzielony na części fragmentów danych, każdy jest przechowywany na innym OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Oblicz porcje kodu dla każdego obiektu i przechowuj je na różnych OSD.\n Liczba fragmentów kodujących to również liczba OSD, które mogą zostać wyłączone bez utraty danych.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Wtyczka jerasure jest najbardziej uniwersalną i elastyczną wtyczką,\n jest to również domyślne ustawienie dla pui kodowanych przez Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Bardziej elastyczną techniką jest reed_sol_van: wystarczy ustawić k\n oraz m. Technika cauchy_good może być szybsza, ale musisz wybrać rozmiar pakietu\n ostrożnie. Wszystkie reed_sol_r6_op, liberation, blaum_roth, liber8tion są odpowiednikami RAID6\n w tym sensie, że mogą być skonfigurowane tylko z m = 2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Kodowanie będzie wykonywane na pakietach o rozmiarze bajtów naraz.\n Wybór odpowiedniego rozmiaru pakietu jest trudny.\n Dokumentacja jerasure zawiera obszerne informacje na ten temat.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Z wtyczką jerasure, gdy obiekt zakodowany przy użyciu skasowania jest przechowywany na \n wielu OSD-kach, odzyskiwanie po utracie jednego OSD wymaga odczytu ze wszystkich pozostałych.\n Na przykład, jeśli konfiguracja skryptu ma wartość k = 8 ,m = 4 i l=4, utrata jednego OSD wymaga odczytu\n od jedenastu innych do naprawy.\n\n Wtyczka kodu wymazywania lrc tworzy fragmenty o parzystości lokalnej, aby móc je odzyskać\n mniej OSD. Na przykład, jeśli lrc jest skonfigurowane z k = 8, m = 4 i l = 4, zostanie utworzony\n dodatkowy fragment parzystości na każde cztery OSD. Gdy jeden OSD zostanie utracone, może to być\n odzyskane tylko z czterema OSD zamiast jedenastu.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Grupuj fragmenty kodu i danych w zestawy lokalizacji wielkości. Na przykład,\n dla k = 4 i m = 2, gdy lokalność = 3 tworzone są dwie grupy po trzy. Każdy zestaw może\n odzyskać bez czytania kawałków z innego zestawu.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Typ wiadra CRUSH, w którym zdefiniowano każdy zestaw porcji\n przez l zostaną zapisane. Na przykład, jeśli jest ustawiony na rack, każda grupa l porcji będzie\n umieszczona w innym raku. Służy do utworzenia kroku reguły CRUSH, takiego jak krok wyboru\n racka. Jeśli nie jest ustawiony, nie ma takiego grupowania.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Wtyczka isa zawiera bibliotekę ISA. Działa tylko na procesorach Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Wtyczka ISA jest dostępna w dwóch formach Reed Solomon.\n Jeśli ustawiono reed_sol_van, jest to Vandermonde, jeśli ustawiono cauchy, to jest to Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Wtyczka shec zawiera wiele bibliotek SHEC.\n Pozwala ceph odzyskać dane bardziej efektywnie niż kody Reeda Solomona.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Liczba kawałków parzystości, z których każdy zawiera każdą porcję danych w swoim zakresie obliczeń. Liczba jest używana jako estymator trwałości. Na przykład, jeśli c = 2,\n 2 OSD można wyłączyć bez utraty danych.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nazwa wiadra crush jest użyte do pierwszego kroku reguły CRUSH.\nNa przykład krok jest domyślny.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Upewnij się, że żadne dwie porcje nie znajdują się w wiadrze z tą samą awarią\n domeny. Na przykład, jeśli domena awarii jest hostem, nie zostaną na niej zapisane dwie porcje\n hosta. Służy do utworzenia kroku reguły CRUSH, takiego jak krok wyboru hosta.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Ogranicz umieszczanie do urządzeń określonej klasy\n (np. ssd lub hdd), używając nazw klas urządzeń zgniatających na mapie CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Ustaw nazwę katalogu, z którego ładowana jest wtyczka kodu kasowania.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Dozwolone są wszystkie operacje</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Dozwolone są operacje, które nie modyfikują serweru</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Operacje odczytu i zapisu są zakazane, wszystkie inne dozwolone</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Operacje odczytu i zapisu, oraz wszystkie operacje modyfikujące atrybuty albo katalogi są zakazane </target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Brak dostępu w ogóle</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- wybierz priorytet -- </target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Niski</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Wysoki</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informacja</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Ostatnie 5 minut</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Ostatnie 15 minut</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Ostatnie 30 minut</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Ostatnia 1 godzina (domyślnie)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Ostatnie 3 godziny</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Ostatnie 6 godzin</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Ostatnie 12 godzin</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Ostatnie 24 godziny</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Wczoraj</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Dzisiaj</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Do tej pory dzisiaj</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Przedwczoraj</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Ostatnie 2 dni</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Tego dnia tydzień temu</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Poprzedni tydzień</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Ten tydzień </target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Do tej pory w tym tygodniu</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Ostatnie 7 dni</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Poprzedniego miesiąca</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>ten miesiąc</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Do tej pory w tym miesiącu</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Ostatnie 30 dni</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Ostatnie 90 dni</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Ostatnie 6 miesięcy</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Ostatni 1 rok</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Poprzedniego roku</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Bieżącego roku</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Do tej pory bieżącego roku</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Ostatnie 2 lata</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Ostatnie 5 lat</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nie wybrano żadnej pozycji</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Odznacz pozycję, żeby wybrać ponownie</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Osiągnięto limit wyboru. </target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtr tagów.</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Dodaj odznakę</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Brak dostępnych pozycji.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Sklonuj</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopia</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Szoruj głęboko</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Zniszcz</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Spłaszcz</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>zaznacz jako upadły</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Zaznacz jako w </target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Zaznacz jako stracony</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Zaznacz jako poza</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Zabezpiecz</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Zmień nazwę</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Przywróć</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Przenieś do kosza</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Odbezpiecz </target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Usunięty</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Sklonowano</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Skopiowano </target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Spłaszczony</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Oczyszczony</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Przywrócony</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Wycofaj</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Tak</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Nie</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Jakość serwisu</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Pożądany limit IO bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Pożądany limit operacji IO na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>limit odczytu BPS</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Pożądany limit odczytu bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>limit  odczytu IOPS</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Pożądany limit operacji odczytu na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit zapisu BPS</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Pożądany limit zapisu bajtów na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit zapisu IOPS</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Pożądany limit operacji zapisu na sekundę.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Wiązka BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Żądana granica serii IO bajtów.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Wiązka IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Żądana granica serii operacji IO.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Odczyt wiązki BPS</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Żądana granica serii odczytanych bajtów.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Odczyt wiązki IOPS</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target> Żądana granica serii operacji odczytu.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Zapis wiązki BPS</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Żądana granica serii bajtów zapisu.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Zapis wiązki IOPS</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Żądana granica serii operacji zapisu.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Wykonywanie </target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>Wykonaj</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Wykonany</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>Nieznane zadanie</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Tworzenie</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>Utwórz</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aktualizowanie </target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>Zaktualizuj</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Usuwanie</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Klonowanie</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>Sklonuj </target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Kopiowanie </target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>Kopiuj</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Spłaszczanie</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>Spłaszcz</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Wycofywanie </target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>Wycofanie</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Przenoszenie</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>Przenieś</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Przeniesiono</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Nie znaleziono obrazu.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Przywracanie</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>Przywróć </target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>oczyszczać</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>oczyść</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>Wszystkie pule</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Nie można wyłączyć lustrzenia ponieważ zawiera parowanie.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},STAE:function(t,e,n){var a=n("0Dky");t.exports=!!Object.getOwnPropertySymbols&&!a((function(){return!String(Symbol())}))},SVse:function(t,e,n){"use strict";n.r(e),n.d(e,"ɵangular_packages_common_common_c",(function(){return ae})),n.d(e,"ɵangular_packages_common_common_h",(function(){return At})),n.d(e,"ɵangular_packages_common_common_g",(function(){return Ct})),n.d(e,"ɵangular_packages_common_common_f",(function(){return Nt})),n.d(e,"ɵangular_packages_common_common_k",(function(){return Qt})),n.d(e,"ɵangular_packages_common_common_j",(function(){return Zt})),n.d(e,"ɵangular_packages_common_common_i",(function(){return $t})),n.d(e,"ɵangular_packages_common_common_a",(function(){return ft})),n.d(e,"ɵangular_packages_common_common_b",(function(){return bt})),n.d(e,"ɵangular_packages_common_common_e",(function(){return Se})),n.d(e,"ɵangular_packages_common_common_d",(function(){return Ke})),n.d(e,"ɵregisterLocaleData",(function(){return mt})),n.d(e,"registerLocaleData",(function(){return mt})),n.d(e,"formatDate",(function(){return K})),n.d(e,"formatCurrency",(function(){return ot})),n.d(e,"formatNumber",(function(){return lt})),n.d(e,"formatPercent",(function(){return ut})),n.d(e,"NgLocaleLocalization",(function(){return pt})),n.d(e,"NgLocalization",(function(){return ht})),n.d(e,"Plural",(function(){return g})),n.d(e,"NumberFormatStyle",(function(){return h})),n.d(e,"FormStyle",(function(){return p})),n.d(e,"TranslationWidth",(function(){return b})),n.d(e,"FormatWidth",(function(){return m})),n.d(e,"NumberSymbol",(function(){return y})),n.d(e,"WeekDay",(function(){return v})),n.d(e,"getNumberOfCurrencyDigits",(function(){return V})),n.d(e,"getCurrencySymbol",(function(){return G})),n.d(e,"getLocaleDayPeriods",(function(){return _})),n.d(e,"getLocaleDayNames",(function(){return T})),n.d(e,"getLocaleMonthNames",(function(){return O})),n.d(e,"getLocaleId",(function(){return x})),n.d(e,"getLocaleEraNames",(function(){return w})),n.d(e,"getLocaleWeekEndRange",(function(){return I})),n.d(e,"getLocaleFirstDayOfWeek",(function(){return S})),n.d(e,"getLocaleDateFormat",(function(){return N})),n.d(e,"getLocaleDateTimeFormat",(function(){return R})),n.d(e,"getLocaleExtraDayPeriodRules",(function(){return M})),n.d(e,"getLocaleExtraDayPeriods",(function(){return q})),n.d(e,"getLocalePluralCase",(function(){return D})),n.d(e,"getLocaleTimeFormat",(function(){return C})),n.d(e,"getLocaleNumberSymbol",(function(){return A})),n.d(e,"getLocaleNumberFormat",(function(){return k})),n.d(e,"getLocaleCurrencyName",(function(){return L})),n.d(e,"getLocaleCurrencySymbol",(function(){return E})),n.d(e,"ɵparseCookieValue",(function(){return yt})),n.d(e,"CommonModule",(function(){return $e})),n.d(e,"DeprecatedI18NPipesModule",(function(){return Ze})),n.d(e,"NgClass",(function(){return Lt})),n.d(e,"NgClassBase",(function(){return Et})),n.d(e,"NgForOf",(function(){return Mt})),n.d(e,"NgForOfContext",(function(){return Pt})),n.d(e,"NgIf",(function(){return jt})),n.d(e,"NgIfContext",(function(){return Ft})),n.d(e,"NgPlural",(function(){return Ht})),n.d(e,"NgPluralCase",(function(){return Ut})),n.d(e,"NgStyle",(function(){return ee})),n.d(e,"NgStyleBase",(function(){return te})),n.d(e,"NgSwitch",(function(){return zt})),n.d(e,"NgSwitchCase",(function(){return Bt})),n.d(e,"NgSwitchDefault",(function(){return Yt})),n.d(e,"NgTemplateOutlet",(function(){return ne})),n.d(e,"NgComponentOutlet",(function(){return Dt})),n.d(e,"DOCUMENT",(function(){return Je})),n.d(e,"AsyncPipe",(function(){return Ae})),n.d(e,"DatePipe",(function(){return Pe})),n.d(e,"I18nPluralPipe",(function(){return qe})),n.d(e,"I18nSelectPipe",(function(){return je})),n.d(e,"JsonPipe",(function(){return Fe})),n.d(e,"LowerCasePipe",(function(){return ke})),n.d(e,"CurrencyPipe",(function(){return Ye})),n.d(e,"DecimalPipe",(function(){return ze})),n.d(e,"PercentPipe",(function(){return Be})),n.d(e,"SlicePipe",(function(){return We})),n.d(e,"UpperCasePipe",(function(){return De})),n.d(e,"TitleCasePipe",(function(){return Le})),n.d(e,"KeyValuePipe",(function(){return Ge})),n.d(e,"DeprecatedDatePipe",(function(){return ve})),n.d(e,"DeprecatedCurrencyPipe",(function(){return we})),n.d(e,"DeprecatedDecimalPipe",(function(){return Te})),n.d(e,"DeprecatedPercentPipe",(function(){return Oe})),n.d(e,"ɵPLATFORM_BROWSER_ID",(function(){return Qe})),n.d(e,"ɵPLATFORM_SERVER_ID",(function(){return Xe})),n.d(e,"ɵPLATFORM_WORKER_APP_ID",(function(){return tn})),n.d(e,"ɵPLATFORM_WORKER_UI_ID",(function(){return en})),n.d(e,"isPlatformBrowser",(function(){return nn})),n.d(e,"isPlatformServer",(function(){return an})),n.d(e,"isPlatformWorkerApp",(function(){return rn})),n.d(e,"isPlatformWorkerUi",(function(){return sn})),n.d(e,"VERSION",(function(){return on})),n.d(e,"ViewportScroller",(function(){return un})),n.d(e,"ɵNullViewportScroller",(function(){return dn})),n.d(e,"ɵNgClassImplProvider__POST_R3__",(function(){return Rt})),n.d(e,"ɵNgClassR2Impl",(function(){return It})),n.d(e,"ɵNgClassImpl",(function(){return St})),n.d(e,"ɵNgStyleImplProvider__POST_R3__",(function(){return Jt})),n.d(e,"ɵNgStyleR2Impl",(function(){return Kt})),n.d(e,"ɵNgStyleImpl",(function(){return Wt})),n.d(e,"ɵngStyleDirectiveDef__POST_R3__",(function(){return Xt})),n.d(e,"ɵngClassDirectiveDef__POST_R3__",(function(){return kt})),n.d(e,"PlatformLocation",(function(){return r})),n.d(e,"LOCATION_INITIALIZED",(function(){return i})),n.d(e,"LocationStrategy",(function(){return s})),n.d(e,"APP_BASE_HREF",(function(){return o})),n.d(e,"HashLocationStrategy",(function(){return d})),n.d(e,"PathLocationStrategy",(function(){return c})),n.d(e,"Location",(function(){return u}));var a=n("8Y7J");class r{}const i=new a.InjectionToken("Location Initialized");class s{}const o=new a.InjectionToken("appBaseHref");class u{constructor(t,e){this._subject=new a.EventEmitter,this._urlChangeListeners=[],this._platformStrategy=t;const n=this._platformStrategy.getBaseHref();this._platformLocation=e,this._baseHref=u.stripTrailingSlash(l(n)),this._platformStrategy.onPopState(t=>{this._subject.emit({url:this.path(!0),pop:!0,state:t.state,type:t.type})})}path(t=!1){return this.normalize(this._platformStrategy.path(t))}getState(){return this._platformLocation.getState()}isCurrentPathEqualTo(t,e=""){return this.path()==this.normalize(t+u.normalizeQueryParams(e))}normalize(t){return u.stripTrailingSlash(function(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,l(t)))}prepareExternalUrl(t){return t&&"/"!==t[0]&&(t="/"+t),this._platformStrategy.prepareExternalUrl(t)}go(t,e="",n=null){this._platformStrategy.pushState(n,"",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+u.normalizeQueryParams(e)),n)}replaceState(t,e="",n=null){this._platformStrategy.replaceState(n,"",t,e),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+u.normalizeQueryParams(e)),n)}forward(){this._platformStrategy.forward()}back(){this._platformStrategy.back()}onUrlChange(t){this._urlChangeListeners.push(t),this.subscribe(t=>{this._notifyUrlChangeListeners(t.url,t.state)})}_notifyUrlChangeListeners(t="",e){this._urlChangeListeners.forEach(n=>n(t,e))}subscribe(t,e,n){return this._subject.subscribe({next:t,error:e,complete:n})}static normalizeQueryParams(t){return t&&"?"!==t[0]?"?"+t:t}static joinWithSlash(t,e){if(0==t.length)return e;if(0==e.length)return t;let n=0;return t.endsWith("/")&&n++,e.startsWith("/")&&n++,2==n?t+e.substring(1):1==n?t+e:t+"/"+e}static stripTrailingSlash(t){const e=t.match(/#|\?|$/),n=e&&e.index||t.length;return t.slice(0,n-("/"===t[n-1]?1:0))+t.slice(n)}}function l(t){return t.replace(/\/index.html$/,"")}class d extends s{constructor(t,e){super(),this._platformLocation=t,this._baseHref="",null!=e&&(this._baseHref=e)}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}path(t=!1){let e=this._platformLocation.hash;return null==e&&(e="#"),e.length>0?e.substring(1):e}prepareExternalUrl(t){const e=u.joinWithSlash(this._baseHref,t);return e.length>0?"#"+e:e}pushState(t,e,n,a){let r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.pushState(t,e,r)}replaceState(t,e,n,a){let r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,r)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}class c extends s{constructor(t,e){if(super(),this._platformLocation=t,null==e&&(e=this._platformLocation.getBaseHrefFromDOM()),null==e)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");this._baseHref=e}onPopState(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return u.joinWithSlash(this._baseHref,t)}path(t=!1){const e=this._platformLocation.pathname+u.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?`${e}${n}`:e}pushState(t,e,n,a){const r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));this._platformLocation.pushState(t,e,r)}replaceState(t,e,n,a){const r=this.prepareExternalUrl(n+u.normalizeQueryParams(a));this._platformLocation.replaceState(t,e,r)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}}const f={ADP:[void 0,void 0,0],AFN:[void 0,void 0,0],ALL:[void 0,void 0,0],AMD:[void 0,void 0,0],AOA:[void 0,"Kz"],ARS:[void 0,"$"],AUD:["A$","$"],BAM:[void 0,"KM"],BBD:[void 0,"$"],BDT:[void 0,"৳"],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,"$"],BND:[void 0,"$"],BOB:[void 0,"Bs"],BRL:["R$"],BSD:[void 0,"$"],BWP:[void 0,"P"],BYN:[void 0,"р.",2],BYR:[void 0,void 0,0],BZD:[void 0,"$"],CAD:["CA$","$",2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,"$",0],CNY:["CN¥","¥"],COP:[void 0,"$",0],CRC:[void 0,"₡",2],CUC:[void 0,"$"],CUP:[void 0,"$"],CZK:[void 0,"Kč",2],DJF:[void 0,void 0,0],DKK:[void 0,"kr",2],DOP:[void 0,"$"],EGP:[void 0,"E£"],ESP:[void 0,"₧",0],EUR:["€"],FJD:[void 0,"$"],FKP:[void 0,"£"],GBP:["£"],GEL:[void 0,"₾"],GIP:[void 0,"£"],GNF:[void 0,"FG",0],GTQ:[void 0,"Q"],GYD:[void 0,"$",0],HKD:["HK$","$"],HNL:[void 0,"L"],HRK:[void 0,"kn"],HUF:[void 0,"Ft",2],IDR:[void 0,"Rp",0],ILS:["₪"],INR:["₹"],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,"kr",0],ITL:[void 0,void 0,0],JMD:[void 0,"$"],JOD:[void 0,void 0,3],JPY:["¥",void 0,0],KHR:[void 0,"៛"],KMF:[void 0,"CF",0],KPW:[void 0,"₩",0],KRW:["₩",void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,"$"],KZT:[void 0,"₸"],LAK:[void 0,"₭",0],LBP:[void 0,"L£",0],LKR:[void 0,"Rs"],LRD:[void 0,"$"],LTL:[void 0,"Lt"],LUF:[void 0,void 0,0],LVL:[void 0,"Ls"],LYD:[void 0,void 0,3],MGA:[void 0,"Ar",0],MGF:[void 0,void 0,0],MMK:[void 0,"K",0],MNT:[void 0,"₮",0],MRO:[void 0,void 0,0],MUR:[void 0,"Rs",0],MXN:["MX$","$"],MYR:[void 0,"RM"],NAD:[void 0,"$"],NGN:[void 0,"₦"],NIO:[void 0,"C$"],NOK:[void 0,"kr",2],NPR:[void 0,"Rs"],NZD:["NZ$","$"],OMR:[void 0,void 0,3],PHP:[void 0,"₱"],PKR:[void 0,"Rs",0],PLN:[void 0,"zł"],PYG:[void 0,"₲",0],RON:[void 0,"lei"],RSD:[void 0,void 0,0],RUB:[void 0,"₽"],RUR:[void 0,"р."],RWF:[void 0,"RF",0],SBD:[void 0,"$"],SEK:[void 0,"kr",2],SGD:[void 0,"$"],SHP:[void 0,"£"],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,"$"],SSP:[void 0,"£"],STD:[void 0,void 0,0],STN:[void 0,"Db"],SYP:[void 0,"£",0],THB:[void 0,"฿"],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,"T$"],TRL:[void 0,void 0,0],TRY:[void 0,"₺"],TTD:[void 0,"$"],TWD:["NT$","$",2],TZS:[void 0,void 0,0],UAH:[void 0,"₴"],UGX:[void 0,void 0,0],USD:["$"],UYI:[void 0,void 0,0],UYU:[void 0,"$"],UZS:[void 0,void 0,0],VEF:[void 0,"Bs"],VND:["₫",void 0,0],VUV:[void 0,void 0,0],XAF:["FCFA",void 0,0],XCD:["EC$","$"],XOF:["CFA",void 0,0],XPF:["CFPF",void 0,0],YER:[void 0,void 0,0],ZAR:[void 0,"R"],ZMK:[void 0,void 0,0],ZMW:[void 0,"ZK"],ZWD:[void 0,void 0,0]},h=function(){var t={Decimal:0,Percent:1,Currency:2,Scientific:3};return t[t.Decimal]="Decimal",t[t.Percent]="Percent",t[t.Currency]="Currency",t[t.Scientific]="Scientific",t}(),g=function(){var t={Zero:0,One:1,Two:2,Few:3,Many:4,Other:5};return t[t.Zero]="Zero",t[t.One]="One",t[t.Two]="Two",t[t.Few]="Few",t[t.Many]="Many",t[t.Other]="Other",t}(),p=function(){var t={Format:0,Standalone:1};return t[t.Format]="Format",t[t.Standalone]="Standalone",t}(),b=function(){var t={Narrow:0,Abbreviated:1,Wide:2,Short:3};return t[t.Narrow]="Narrow",t[t.Abbreviated]="Abbreviated",t[t.Wide]="Wide",t[t.Short]="Short",t}(),m=function(){var t={Short:0,Medium:1,Long:2,Full:3};return t[t.Short]="Short",t[t.Medium]="Medium",t[t.Long]="Long",t[t.Full]="Full",t}(),y=function(){var t={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};return t[t.Decimal]="Decimal",t[t.Group]="Group",t[t.List]="List",t[t.PercentSign]="PercentSign",t[t.PlusSign]="PlusSign",t[t.MinusSign]="MinusSign",t[t.Exponential]="Exponential",t[t.SuperscriptingExponent]="SuperscriptingExponent",t[t.PerMille]="PerMille",t[t.Infinity]="Infinity",t[t.NaN]="NaN",t[t.TimeSeparator]="TimeSeparator",t[t.CurrencyDecimal]="CurrencyDecimal",t[t.CurrencyGroup]="CurrencyGroup",t}(),v=function(){var t={Sunday:0,Monday:1,Tuesday:2,Wednesday:3,Thursday:4,Friday:5,Saturday:6};return t[t.Sunday]="Sunday",t[t.Monday]="Monday",t[t.Tuesday]="Tuesday",t[t.Wednesday]="Wednesday",t[t.Thursday]="Thursday",t[t.Friday]="Friday",t[t.Saturday]="Saturday",t}();function x(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].LocaleId]}function _(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].DayPeriodsFormat],r[a["ɵLocaleDataIndex"].DayPeriodsStandalone]],e);return j(i,n)}function T(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].DaysFormat],r[a["ɵLocaleDataIndex"].DaysStandalone]],e);return j(i,n)}function O(t,e,n){const r=Object(a["ɵfindLocaleData"])(t),i=j([r[a["ɵLocaleDataIndex"].MonthsFormat],r[a["ɵLocaleDataIndex"].MonthsStandalone]],e);return j(i,n)}function w(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].Eras],e)}function S(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].FirstDayOfWeek]}function I(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].WeekendRange]}function N(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].DateFormat],e)}function C(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].TimeFormat],e)}function R(t,e){return j(Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].DateTimeFormat],e)}function A(t,e){const n=Object(a["ɵfindLocaleData"])(t),r=n[a["ɵLocaleDataIndex"].NumberSymbols][e];if(void 0===r){if(e===y.CurrencyDecimal)return n[a["ɵLocaleDataIndex"].NumberSymbols][y.Decimal];if(e===y.CurrencyGroup)return n[a["ɵLocaleDataIndex"].NumberSymbols][y.Group]}return r}function k(t,e){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].NumberFormats][e]}function E(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].CurrencySymbol]||null}function L(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].CurrencyName]||null}const D=a["ɵgetLocalePluralCase"];function P(t){if(!t[a["ɵLocaleDataIndex"].ExtraData])throw new Error(`Missing extra locale data for the locale "${t[a["ɵLocaleDataIndex"].LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function M(t){const e=Object(a["ɵfindLocaleData"])(t);return P(e),(e[a["ɵLocaleDataIndex"].ExtraData][2]||[]).map(t=>"string"==typeof t?F(t):[F(t[0]),F(t[1])])}function q(t,e,n){const r=Object(a["ɵfindLocaleData"])(t);P(r);const i=j([r[a["ɵLocaleDataIndex"].ExtraData][0],r[a["ɵLocaleDataIndex"].ExtraData][1]],e)||[];return j(i,n)||[]}function j(t,e){for(let n=e;n>-1;n--)if(void 0!==t[n])return t[n];throw new Error("Locale data API: locale data undefined")}function F(t){const[e,n]=t.split(":");return{hours:+e,minutes:+n}}function G(t,e,n="en"){const r=function(t){return Object(a["ɵfindLocaleData"])(t)[a["ɵLocaleDataIndex"].Currencies]}(n)[t]||f[t]||[],i=r[1];return"narrow"===e&&"string"==typeof i?i:r[0]||t}function V(t){let e;const n=f[t];return n&&(e=n[2]),"number"==typeof e?e:2}const z=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,B={},Y=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,H=function(){var t={Short:0,ShortGMT:1,Long:2,Extended:3};return t[t.Short]="Short",t[t.ShortGMT]="ShortGMT",t[t.Long]="Long",t[t.Extended]="Extended",t}(),U=function(){var t={FullYear:0,Month:1,Date:2,Hours:3,Minutes:4,Seconds:5,FractionalSeconds:6,Day:7};return t[t.FullYear]="FullYear",t[t.Month]="Month",t[t.Date]="Date",t[t.Hours]="Hours",t[t.Minutes]="Minutes",t[t.Seconds]="Seconds",t[t.FractionalSeconds]="FractionalSeconds",t[t.Day]="Day",t}(),W=function(){var t={DayPeriods:0,Days:1,Months:2,Eras:3};return t[t.DayPeriods]="DayPeriods",t[t.Days]="Days",t[t.Months]="Months",t[t.Eras]="Eras",t}();function K(t,e,n,a){let r=function(t){if(rt(t))return t;if("number"==typeof t&&!isNaN(t))return new Date(t);if("string"==typeof t){t=t.trim();const e=parseFloat(t);if(!isNaN(t-e))return new Date(e);if(/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){const[e,n,a]=t.split("-").map(t=>+t);return new Date(e,n-1,a)}let n;if(n=t.match(z))return at(n)}const e=new Date(t);if(!rt(e))throw new Error(`Unable to convert "${t}" into a date`);return e}(t);e=function t(e,n){const a=x(e);if(B[a]=B[a]||{},B[a][n])return B[a][n];let r="";switch(n){case"shortDate":r=N(e,m.Short);break;case"mediumDate":r=N(e,m.Medium);break;case"longDate":r=N(e,m.Long);break;case"fullDate":r=N(e,m.Full);break;case"shortTime":r=C(e,m.Short);break;case"mediumTime":r=C(e,m.Medium);break;case"longTime":r=C(e,m.Long);break;case"fullTime":r=C(e,m.Full);break;case"short":const n=t(e,"shortTime"),a=t(e,"shortDate");r=$(R(e,m.Short),[n,a]);break;case"medium":const i=t(e,"mediumTime"),s=t(e,"mediumDate");r=$(R(e,m.Medium),[i,s]);break;case"long":const o=t(e,"longTime"),u=t(e,"longDate");r=$(R(e,m.Long),[o,u]);break;case"full":const l=t(e,"fullTime"),d=t(e,"fullDate");r=$(R(e,m.Full),[l,d])}return r&&(B[a][n]=r),r}(n,e)||e;let i,s=[];for(;e;){if(i=Y.exec(e),!i){s.push(e);break}{s=s.concat(i.slice(1));const t=s.pop();if(!t)break;e=t}}let o=r.getTimezoneOffset();a&&(o=nt(a,o),r=function(t,e,n){const a=t.getTimezoneOffset();return function(t,e){return(t=new Date(t.getTime())).setMinutes(t.getMinutes()+e),t}(t,-1*(nt(e,a)-a))}(r,a));let u="";return s.forEach(t=>{const e=function(t){if(et[t])return et[t];let e;switch(t){case"G":case"GG":case"GGG":e=Q(W.Eras,b.Abbreviated);break;case"GGGG":e=Q(W.Eras,b.Wide);break;case"GGGGG":e=Q(W.Eras,b.Narrow);break;case"y":e=J(U.FullYear,1,0,!1,!0);break;case"yy":e=J(U.FullYear,2,0,!0,!0);break;case"yyy":e=J(U.FullYear,3,0,!1,!0);break;case"yyyy":e=J(U.FullYear,4,0,!1,!0);break;case"M":case"L":e=J(U.Month,1,1);break;case"MM":case"LL":e=J(U.Month,2,1);break;case"MMM":e=Q(W.Months,b.Abbreviated);break;case"MMMM":e=Q(W.Months,b.Wide);break;case"MMMMM":e=Q(W.Months,b.Narrow);break;case"LLL":e=Q(W.Months,b.Abbreviated,p.Standalone);break;case"LLLL":e=Q(W.Months,b.Wide,p.Standalone);break;case"LLLLL":e=Q(W.Months,b.Narrow,p.Standalone);break;case"w":e=tt(1);break;case"ww":e=tt(2);break;case"W":e=tt(1,!0);break;case"d":e=J(U.Date,1);break;case"dd":e=J(U.Date,2);break;case"E":case"EE":case"EEE":e=Q(W.Days,b.Abbreviated);break;case"EEEE":e=Q(W.Days,b.Wide);break;case"EEEEE":e=Q(W.Days,b.Narrow);break;case"EEEEEE":e=Q(W.Days,b.Short);break;case"a":case"aa":case"aaa":e=Q(W.DayPeriods,b.Abbreviated);break;case"aaaa":e=Q(W.DayPeriods,b.Wide);break;case"aaaaa":e=Q(W.DayPeriods,b.Narrow);break;case"b":case"bb":case"bbb":e=Q(W.DayPeriods,b.Abbreviated,p.Standalone,!0);break;case"bbbb":e=Q(W.DayPeriods,b.Wide,p.Standalone,!0);break;case"bbbbb":e=Q(W.DayPeriods,b.Narrow,p.Standalone,!0);break;case"B":case"BB":case"BBB":e=Q(W.DayPeriods,b.Abbreviated,p.Format,!0);break;case"BBBB":e=Q(W.DayPeriods,b.Wide,p.Format,!0);break;case"BBBBB":e=Q(W.DayPeriods,b.Narrow,p.Format,!0);break;case"h":e=J(U.Hours,1,-12);break;case"hh":e=J(U.Hours,2,-12);break;case"H":e=J(U.Hours,1);break;case"HH":e=J(U.Hours,2);break;case"m":e=J(U.Minutes,1);break;case"mm":e=J(U.Minutes,2);break;case"s":e=J(U.Seconds,1);break;case"ss":e=J(U.Seconds,2);break;case"S":e=J(U.FractionalSeconds,1);break;case"SS":e=J(U.FractionalSeconds,2);break;case"SSS":e=J(U.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":e=X(H.Short);break;case"ZZZZZ":e=X(H.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":e=X(H.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":e=X(H.Long);break;default:return null}return et[t]=e,e}(t);u+=e?e(r,n,o):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),u}function $(t,e){return e&&(t=t.replace(/\{([^}]+)}/g,(function(t,n){return null!=e&&n in e?e[n]:t}))),t}function Z(t,e,n="-",a,r){let i="";(t<0||r&&t<=0)&&(r?t=1-t:(t=-t,i=n));let s=String(t);for(;s.length<e;)s="0"+s;return a&&(s=s.substr(s.length-e)),i+s}function J(t,e,n=0,a=!1,r=!1){return function(i,s){let o=function(t,e){switch(t){case U.FullYear:return e.getFullYear();case U.Month:return e.getMonth();case U.Date:return e.getDate();case U.Hours:return e.getHours();case U.Minutes:return e.getMinutes();case U.Seconds:return e.getSeconds();case U.FractionalSeconds:return e.getMilliseconds();case U.Day:return e.getDay();default:throw new Error(`Unknown DateType value "${t}".`)}}(t,i);if((n>0||o>-n)&&(o+=n),t===U.Hours)0===o&&-12===n&&(o=12);else if(t===U.FractionalSeconds)return u=e,Z(o,3).substr(0,u);var u;const l=A(s,y.MinusSign);return Z(o,e,l,a,r)}}function Q(t,e,n=p.Format,a=!1){return function(r,i){return function(t,e,n,a,r,i){switch(n){case W.Months:return O(e,r,a)[t.getMonth()];case W.Days:return T(e,r,a)[t.getDay()];case W.DayPeriods:const s=t.getHours(),o=t.getMinutes();if(i){const t=M(e),n=q(e,r,a);let i;if(t.forEach((t,e)=>{if(Array.isArray(t)){const{hours:a,minutes:r}=t[0],{hours:u,minutes:l}=t[1];s>=a&&o>=r&&(s<u||s===u&&o<l)&&(i=n[e])}else{const{hours:a,minutes:r}=t;a===s&&r===o&&(i=n[e])}}),i)return i}return _(e,r,a)[s<12?0:1];case W.Eras:return w(e,a)[t.getFullYear()<=0?0:1];default:throw new Error(`unexpected translation type ${n}`)}}(r,i,t,e,n,a)}}function X(t){return function(e,n,a){const r=-1*a,i=A(n,y.MinusSign),s=r>0?Math.floor(r/60):Math.ceil(r/60);switch(t){case H.Short:return(r>=0?"+":"")+Z(s,2,i)+Z(Math.abs(r%60),2,i);case H.ShortGMT:return"GMT"+(r>=0?"+":"")+Z(s,1,i);case H.Long:return"GMT"+(r>=0?"+":"")+Z(s,2,i)+":"+Z(Math.abs(r%60),2,i);case H.Extended:return 0===a?"Z":(r>=0?"+":"")+Z(s,2,i)+":"+Z(Math.abs(r%60),2,i);default:throw new Error(`Unknown zone width "${t}"`)}}}function tt(t,e=!1){return function(n,a){let r;if(e){const t=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,e=n.getDate();r=1+Math.floor((e+t)/7)}else{const t=function(t){const e=new Date(t,0,1).getDay();return new Date(t,0,1+(e<=4?4:11)-e)}(n.getFullYear()),e=(i=n,new Date(i.getFullYear(),i.getMonth(),i.getDate()+(4-i.getDay()))).getTime()-t.getTime();r=1+Math.round(e/6048e5)}var i;return Z(r,t,A(a,y.MinusSign))}}const et={};function nt(t,e){t=t.replace(/:/g,"");const n=Date.parse("Jan 01, 1970 00:00:00 "+t)/6e4;return isNaN(n)?e:n}function at(t){const e=new Date(0);let n=0,a=0;const r=t[8]?e.setUTCFullYear:e.setFullYear,i=t[8]?e.setUTCHours:e.setHours;t[9]&&(n=Number(t[9]+t[10]),a=Number(t[9]+t[11])),r.call(e,Number(t[1]),Number(t[2])-1,Number(t[3]));const s=Number(t[4]||0)-n,o=Number(t[5]||0)-a,u=Number(t[6]||0),l=Math.round(1e3*parseFloat("0."+(t[7]||0)));return i.call(e,s,o,u,l),e}function rt(t){return t instanceof Date&&!isNaN(t.valueOf())}const it=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function st(t,e,n,a,r,i,s=!1){let o="",u=!1;if(isFinite(t)){let l=function(t){let e,n,a,r,i,s=Math.abs(t)+"",o=0;for((n=s.indexOf("."))>-1&&(s=s.replace(".","")),(a=s.search(/e/i))>0?(n<0&&(n=a),n+=+s.slice(a+1),s=s.substring(0,a)):n<0&&(n=s.length),a=0;"0"===s.charAt(a);a++);if(a===(i=s.length))e=[0],n=1;else{for(i--;"0"===s.charAt(i);)i--;for(n-=a,e=[],r=0;a<=i;a++,r++)e[r]=Number(s.charAt(a))}return n>22&&(e=e.splice(0,21),o=n-1,n=1),{digits:e,exponent:o,integerLen:n}}(t);s&&(l=function(t){if(0===t.digits[0])return t;const e=t.digits.length-t.integerLen;return t.exponent?t.exponent+=2:(0===e?t.digits.push(0,0):1===e&&t.digits.push(0),t.integerLen+=2),t}(l));let d=e.minInt,c=e.minFrac,f=e.maxFrac;if(i){const t=i.match(it);if(null===t)throw new Error(`${i} is not a valid digit info`);const e=t[1],n=t[3],a=t[5];null!=e&&(d=ct(e)),null!=n&&(c=ct(n)),null!=a?f=ct(a):null!=n&&c>f&&(f=c)}!function(t,e,n){if(e>n)throw new Error(`The minimum number of digits after fraction (${e}) is higher than the maximum (${n}).`);let a=t.digits,r=a.length-t.integerLen;const i=Math.min(Math.max(e,r),n);let s=i+t.integerLen,o=a[s];if(s>0){a.splice(Math.max(t.integerLen,s));for(let t=s;t<a.length;t++)a[t]=0}else{r=Math.max(0,r),t.integerLen=1,a.length=Math.max(1,s=i+1),a[0]=0;for(let t=1;t<s;t++)a[t]=0}if(o>=5)if(s-1<0){for(let e=0;e>s;e--)a.unshift(0),t.integerLen++;a.unshift(1),t.integerLen++}else a[s-1]++;for(;r<Math.max(0,i);r++)a.push(0);let u=0!==i;const l=e+t.integerLen,d=a.reduceRight((function(t,e,n,a){return a[n]=(e+=t)<10?e:e-10,u&&(0===a[n]&&n>=l?a.pop():u=!1),e>=10?1:0}),0);d&&(a.unshift(d),t.integerLen++)}(l,c,f);let h=l.digits,g=l.integerLen;const p=l.exponent;let b=[];for(u=h.every(t=>!t);g<d;g++)h.unshift(0);for(;g<0;g++)h.unshift(0);g>0?b=h.splice(g,h.length):(b=h,h=[0]);const m=[];for(h.length>=e.lgSize&&m.unshift(h.splice(-e.lgSize,h.length).join(""));h.length>e.gSize;)m.unshift(h.splice(-e.gSize,h.length).join(""));h.length&&m.unshift(h.join("")),o=m.join(A(n,a)),b.length&&(o+=A(n,r)+b.join("")),p&&(o+=A(n,y.Exponential)+"+"+p)}else o=A(n,y.Infinity);return o=t<0&&!u?e.negPre+o+e.negSuf:e.posPre+o+e.posSuf,o}function ot(t,e,n,a,r){const i=dt(k(e,h.Currency),A(e,y.MinusSign));return i.minFrac=V(a),i.maxFrac=i.minFrac,st(t,i,e,y.CurrencyGroup,y.CurrencyDecimal,r).replace("¤",n).replace("¤","")}function ut(t,e,n){return st(t,dt(k(e,h.Percent),A(e,y.MinusSign)),e,y.Group,y.Decimal,n,!0).replace(new RegExp("%","g"),A(e,y.PercentSign))}function lt(t,e,n){return st(t,dt(k(e,h.Decimal),A(e,y.MinusSign)),e,y.Group,y.Decimal,n)}function dt(t,e="-"){const n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},a=t.split(";"),r=a[0],i=a[1],s=-1!==r.indexOf(".")?r.split("."):[r.substring(0,r.lastIndexOf("0")+1),r.substring(r.lastIndexOf("0")+1)],o=s[0],u=s[1]||"";n.posPre=o.substr(0,o.indexOf("#"));for(let d=0;d<u.length;d++){const t=u.charAt(d);"0"===t?n.minFrac=n.maxFrac=d+1:"#"===t?n.maxFrac=d+1:n.posSuf+=t}const l=o.split(",");if(n.gSize=l[1]?l[1].length:0,n.lgSize=l[2]||l[1]?(l[2]||l[1]).length:0,i){const t=r.length-n.posPre.length-n.posSuf.length,e=i.indexOf("#");n.negPre=i.substr(0,e).replace(/'/g,""),n.negSuf=i.substr(e+t).replace(/'/g,"")}else n.negPre=e+n.posPre,n.negSuf=n.posSuf;return n}function ct(t){const e=parseInt(t);if(isNaN(e))throw new Error("Invalid integer literal when parsing "+t);return e}const ft=new a.InjectionToken("UseV4Plurals");class ht{}function gt(t,e,n,a){let r=`=${t}`;if(e.indexOf(r)>-1)return r;if(r=n.getPluralCategory(t,a),e.indexOf(r)>-1)return r;if(e.indexOf("other")>-1)return"other";throw new Error(`No plural message found for value "${t}"`)}class pt extends ht{constructor(t,e){super(),this.locale=t,this.deprecatedPluralFn=e}getPluralCategory(t,e){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(e||this.locale,t):D(e||this.locale)(t)){case g.Zero:return"zero";case g.One:return"one";case g.Two:return"two";case g.Few:return"few";case g.Many:return"many";default:return"other"}}}function bt(t,e){"string"==typeof e&&(e=parseInt(e,10));const n=e,a=n.toString().replace(/^[^.]*\.?/,""),r=Math.floor(Math.abs(n)),i=a.length,s=parseInt(a,10),o=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0;switch(t.split("-")[0].toLowerCase()){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?g.One:g.Other;case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?g.One:g.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===r||1===n?g.One:g.Other;case"ar":return 0===n?g.Zero:1===n?g.One:2===n?g.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?g.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?g.Many:g.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===r&&0===i?g.One:g.Other;case"be":return n%10==1&&n%100!=11?g.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?g.Few:n%10==0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?g.Many:g.Other;case"br":return n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?g.One:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?g.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10==9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?g.Few:0!==n&&n%1e6==0?g.Many:g.Other;case"bs":case"hr":case"sr":return 0===i&&r%10==1&&r%100!=11||s%10==1&&s%100!=11?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)||s%10===Math.floor(s%10)&&s%10>=2&&s%10<=4&&!(s%100>=12&&s%100<=14)?g.Few:g.Other;case"cs":case"sk":return 1===r&&0===i?g.One:r===Math.floor(r)&&r>=2&&r<=4&&0===i?g.Few:0!==i?g.Many:g.Other;case"cy":return 0===n?g.Zero:1===n?g.One:2===n?g.Two:3===n?g.Few:6===n?g.Many:g.Other;case"da":return 1===n||0!==o&&(0===r||1===r)?g.One:g.Other;case"dsb":case"hsb":return 0===i&&r%100==1||s%100==1?g.One:0===i&&r%100==2||s%100==2?g.Two:0===i&&r%100===Math.floor(r%100)&&r%100>=3&&r%100<=4||s%100===Math.floor(s%100)&&s%100>=3&&s%100<=4?g.Few:g.Other;case"ff":case"fr":case"hy":case"kab":return 0===r||1===r?g.One:g.Other;case"fil":return 0===i&&(1===r||2===r||3===r)||0===i&&r%10!=4&&r%10!=6&&r%10!=9||0!==i&&s%10!=4&&s%10!=6&&s%10!=9?g.One:g.Other;case"ga":return 1===n?g.One:2===n?g.Two:n===Math.floor(n)&&n>=3&&n<=6?g.Few:n===Math.floor(n)&&n>=7&&n<=10?g.Many:g.Other;case"gd":return 1===n||11===n?g.One:2===n||12===n?g.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?g.Few:g.Other;case"gv":return 0===i&&r%10==1?g.One:0===i&&r%10==2?g.Two:0!==i||r%100!=0&&r%100!=20&&r%100!=40&&r%100!=60&&r%100!=80?0!==i?g.Many:g.Other:g.Few;case"he":return 1===r&&0===i?g.One:2===r&&0===i?g.Two:0!==i||n>=0&&n<=10||n%10!=0?g.Other:g.Many;case"is":return 0===o&&r%10==1&&r%100!=11||0!==o?g.One:g.Other;case"ksh":return 0===n?g.Zero:1===n?g.One:g.Other;case"kw":case"naq":case"se":case"smn":return 1===n?g.One:2===n?g.Two:g.Other;case"lag":return 0===n?g.Zero:0!==r&&1!==r||0===n?g.Other:g.One;case"lt":return n%10!=1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?g.Few:0!==s?g.Many:g.Other:g.One;case"lv":case"prg":return n%10==0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===i&&s%100===Math.floor(s%100)&&s%100>=11&&s%100<=19?g.Zero:n%10==1&&n%100!=11||2===i&&s%10==1&&s%100!=11||2!==i&&s%10==1?g.One:g.Other;case"mk":return 0===i&&r%10==1||s%10==1?g.One:g.Other;case"mt":return 1===n?g.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?g.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?g.Many:g.Other;case"pl":return 1===r&&0===i?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)?g.Few:0===i&&1!==r&&r%10===Math.floor(r%10)&&r%10>=0&&r%10<=1||0===i&&r%10===Math.floor(r%10)&&r%10>=5&&r%10<=9||0===i&&r%100===Math.floor(r%100)&&r%100>=12&&r%100<=14?g.Many:g.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?g.One:g.Other;case"ro":return 1===r&&0===i?g.One:0!==i||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?g.Few:g.Other;case"ru":case"uk":return 0===i&&r%10==1&&r%100!=11?g.One:0===i&&r%10===Math.floor(r%10)&&r%10>=2&&r%10<=4&&!(r%100>=12&&r%100<=14)?g.Few:0===i&&r%10==0||0===i&&r%10===Math.floor(r%10)&&r%10>=5&&r%10<=9||0===i&&r%100===Math.floor(r%100)&&r%100>=11&&r%100<=14?g.Many:g.Other;case"shi":return 0===r||1===n?g.One:n===Math.floor(n)&&n>=2&&n<=10?g.Few:g.Other;case"si":return 0===n||1===n||0===r&&1===s?g.One:g.Other;case"sl":return 0===i&&r%100==1?g.One:0===i&&r%100==2?g.Two:0===i&&r%100===Math.floor(r%100)&&r%100>=3&&r%100<=4||0!==i?g.Few:g.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?g.One:g.Other;default:return g.Other}}function mt(t,e,n){"string"!=typeof e&&(n=e,e=t[a["ɵLocaleDataIndex"].LocaleId]),e=e.toLowerCase().replace(/_/g,"-"),a["ɵLOCALE_DATA"][e]=t,n&&(a["ɵLOCALE_DATA"][e][a["ɵLocaleDataIndex"].ExtraData]=n)}function yt(t,e){e=encodeURIComponent(e);for(const n of t.split(";")){const t=n.indexOf("="),[a,r]=-1==t?[n,""]:[n.slice(0,t),n.slice(t+1)];if(a.trim()===e)return decodeURIComponent(r)}return null}class vt{constructor(t,e){this._name=t,this._options=e,this.value=null,this._lastSetValue=null,this._lastSetValueType=0,this._lastSetValueIdentityChange=!1}setValue(t){if(Array.isArray(t))this._lastSetValueType=4;else if(t instanceof Set)this._lastSetValueType=8;else if(t&&"string"==typeof t){if(!(4&this._options))throw new Error(this._name+" string values are not allowed");this._lastSetValueType=1}else this._lastSetValueType=t?2:0;this._lastSetValueIdentityChange=!0,this._lastSetValue=t||null}hasValueChanged(){let t=this._lastSetValueIdentityChange;if(!(t||14&this._lastSetValueType))return!1;let e=null;const n=!!(1&this._options),a=!!(8&this._options),r=!!(2&this._options);switch(this._lastSetValueType){case 1:const i=this._lastSetValue.split(/\s+/g);16&this._options?(e={},i.forEach((t,n)=>e[t]=!0)):e=i.reduce((t,e,n)=>t+(n?" ":"")+e);break;case 2:const s=this._lastSetValue,o=Object.keys(s);t||(t=!this.value||function(t,e,n){const a=t;if(!wt(Object.keys(e),a))return!0;for(let r=0;r<a.length;r++){const t=a[r];if(e[t]!==n[t])return!0}return!1}(o,this.value,s)),t&&(e=xt(this._name,n,a,r,s,o));break;case 4:case 8:const u=Array.from(this._lastSetValue);t||(t=!wt(Object.keys(this.value),u)),t&&(e=xt(this._name,n,a,r,u));break;default:e=null}return t&&(this.value=e),t}}function xt(t,e,n,a,r,i){const s={};if(i)for(let o=0;o<i.length;o++){let t=i[o];t=e?t.trim():t,Tt(s,t,r[t],n,a)}else for(let o=0;o<r.length;o++){let n=r[o];_t(t,n),n=e?n.trim():n,Tt(s,n,!0,!1,a)}return s}function _t(t,e){if("string"!=typeof e)throw new Error(`${t} can only toggle CSS classes expressed as strings, got ${e}`)}function Tt(t,e,n,a,r){if(r&&e.indexOf(" ")>0){const r=e.split(/\s+/g);for(let e=0;e<r.length;e++)Ot(t,r[e],n,a)}else Ot(t,e,n,a)}function Ot(t,e,n,a){if(a){const t=function(t,e){const n=t.indexOf(".");if(n>0){const a=t.substr(n+1);t=t.substring(0,n),null!=e&&(e+=a)}return{key:t,value:e}}(e,n);n=t.value,e=t.key}t[e]=n}function wt(t,e){if(t&&e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(-1===e.indexOf(t[n]))return!1;return!0}return!1}class St{}class It{constructor(t,e,n,a){this._iterableDiffers=t,this._keyValueDiffers=e,this._ngEl=n,this._renderer=a,this._initialClasses=[]}getValue(){return null}setClass(t){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof t?t.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}setNgClass(t){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof t?t.split(/\s+/):t,this._rawClass&&(Object(a["ɵisListLikeIterable"])(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}applyChanges(){if(this._iterableDiffer){const t=this._iterableDiffer.diff(this._rawClass);t&&this._applyIterableChanges(t)}else if(this._keyValueDiffer){const t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}}_applyKeyValueChanges(t){t.forEachAddedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachChangedItem(t=>this._toggleClass(t.key,t.currentValue)),t.forEachRemovedItem(t=>{t.previousValue&&this._toggleClass(t.key,!1)})}_applyIterableChanges(t){t.forEachAddedItem(t=>{if("string"!=typeof t.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${Object(a["ɵstringify"])(t.item)}`);this._toggleClass(t.item,!0)}),t.forEachRemovedItem(t=>this._toggleClass(t.item,!1))}_applyClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!0)):Object.keys(t).forEach(e=>this._toggleClass(e,!!t[e])))}_removeClasses(t){t&&(Array.isArray(t)||t instanceof Set?t.forEach(t=>this._toggleClass(t,!1)):Object.keys(t).forEach(t=>this._toggleClass(t,!1)))}_toggleClass(t,e){(t=t.trim())&&t.split(/\s+/g).forEach(t=>{e?this._renderer.addClass(this._ngEl.nativeElement,t):this._renderer.removeClass(this._ngEl.nativeElement,t)})}}class Nt{constructor(){this._value=null,this._ngClassDiffer=new vt("NgClass",23),this._classStringDiffer=null}getValue(){return this._value}setClass(t){(t||this._classStringDiffer)&&(this._classStringDiffer=this._classStringDiffer||new vt("class",20),this._classStringDiffer.setValue(t))}setNgClass(t){this._ngClassDiffer.setValue(t)}applyChanges(){const t=!!this._classStringDiffer&&this._classStringDiffer.hasValueChanged(),e=this._ngClassDiffer.hasValueChanged();if(t||e){let t=this._ngClassDiffer.value;if(this._classStringDiffer){let e=this._classStringDiffer.value;e&&(t=t?Object.assign({},e,t):e)}this._value=t}}}const Ct={provide:St,useClass:It},Rt={provide:St,useClass:Nt},At=Ct,kt=Object(a["ɵɵdefineDirective"])({type:function(){},selectors:null,factory:()=>{},hostBindings:function(t,e,n){1&t&&(Object(a["ɵɵallocHostVars"])(1),Object(a["ɵɵstyling"])()),2&t&&(Object(a["ɵɵclassMap"])(e.getValue()),Object(a["ɵɵstylingApply"])())}});let Et=(()=>{class t{constructor(t){this._delegate=t}getValue(){return this._delegate.getValue()}}return t.ngDirectiveDef=void 0,t})();class Lt extends Et{constructor(t){super(t)}set klass(t){this._delegate.setClass(t)}set ngClass(t){this._delegate.setNgClass(t)}ngDoCheck(){this._delegate.applyChanges()}}class Dt{constructor(t){this._viewContainerRef=t,this._componentRef=null,this._moduleRef=null}ngOnChanges(t){if(this._viewContainerRef.clear(),this._componentRef=null,this.ngComponentOutlet){const e=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;if(t.ngComponentOutletNgModuleFactory)if(this._moduleRef&&this._moduleRef.destroy(),this.ngComponentOutletNgModuleFactory){const t=e.get(a.NgModuleRef);this._moduleRef=this.ngComponentOutletNgModuleFactory.create(t.injector)}else this._moduleRef=null;const n=(this._moduleRef?this._moduleRef.componentFactoryResolver:e.get(a.ComponentFactoryResolver)).resolveComponentFactory(this.ngComponentOutlet);this._componentRef=this._viewContainerRef.createComponent(n,this._viewContainerRef.length,e,this.ngComponentOutletContent)}}ngOnDestroy(){this._moduleRef&&this._moduleRef.destroy()}}class Pt{constructor(t,e,n,a){this.$implicit=t,this.ngForOf=e,this.index=n,this.count=a}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}class Mt{constructor(t,e,n){this._viewContainer=t,this._template=e,this._differs=n,this._ngForOfDirty=!0,this._differ=null}set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){Object(a.isDevMode)()&&null!=t&&"function"!=typeof t&&console&&console.warn&&console.warn(`trackBy must be a function, but received ${JSON.stringify(t)}. `+"See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const n=this._ngForOf;if(!this._differ&&n)try{this._differ=this._differs.find(n).create(this.ngForTrackBy)}catch(e){throw new Error(`Cannot find a differ supporting object '${n}' of type '${t=n,t.name||typeof t}'. NgFor only supports binding to Iterables such as Arrays.`)}}var t;if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const e=[];t.forEachOperation((t,n,a)=>{if(null==t.previousIndex){const n=this._viewContainer.createEmbeddedView(this._template,new Pt(null,this._ngForOf,-1,-1),null===a?void 0:a),r=new qt(t,n);e.push(r)}else if(null==a)this._viewContainer.remove(null===n?void 0:n);else if(null!==n){const r=this._viewContainer.get(n);this._viewContainer.move(r,a);const i=new qt(t,r);e.push(i)}});for(let n=0;n<e.length;n++)this._perViewChange(e[n].view,e[n].record);for(let n=0,a=this._viewContainer.length;n<a;n++){const t=this._viewContainer.get(n);t.context.index=n,t.context.count=a,t.context.ngForOf=this._ngForOf}t.forEachIdentityChange(t=>{this._viewContainer.get(t.currentIndex).context.$implicit=t.item})}_perViewChange(t,e){t.context.$implicit=e.item}static ngTemplateContextGuard(t,e){return!0}}class qt{constructor(t,e){this.record=t,this.view=e}}class jt{constructor(t,e){this._viewContainer=t,this._context=new Ft,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=e}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){Gt("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){Gt("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}}class Ft{constructor(){this.$implicit=null,this.ngIf=null}}function Gt(t,e){if(e&&!e.createEmbeddedView)throw new Error(`${t} must be a TemplateRef, but received '${Object(a["ɵstringify"])(e)}'.`)}class Vt{constructor(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()}}class zt{constructor(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(t){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(t)}_matchCase(t){const e=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||e,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),e}_updateDefaultCases(t){if(this._defaultViews&&t!==this._defaultUsed){this._defaultUsed=t;for(let e=0;e<this._defaultViews.length;e++)this._defaultViews[e].enforceState(t)}}}class Bt{constructor(t,e,n){this.ngSwitch=n,n._addCase(),this._view=new Vt(t,e)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}class Yt{constructor(t,e,n){n._addDefault(new Vt(t,e))}}class Ht{constructor(t){this._localization=t,this._caseViews={}}set ngPlural(t){this._switchValue=t,this._updateView()}addCase(t,e){this._caseViews[t]=e}_updateView(){this._clearViews();const t=Object.keys(this._caseViews),e=gt(this._switchValue,t,this._localization);this._activateView(this._caseViews[e])}_clearViews(){this._activeView&&this._activeView.destroy()}_activateView(t){t&&(this._activeView=t,this._activeView.create())}}class Ut{constructor(t,e,n,a){this.value=t;const r=!isNaN(Number(t));a.addCase(r?`=${t}`:t,new Vt(n,e))}}class Wt{}class Kt{constructor(t,e,n){this._ngEl=t,this._differs=e,this._renderer=n}getValue(){return null}setNgStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}applyChanges(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_applyChanges(t){t.forEachRemovedItem(t=>this._setStyle(t.key,null)),t.forEachAddedItem(t=>this._setStyle(t.key,t.currentValue)),t.forEachChangedItem(t=>this._setStyle(t.key,t.currentValue))}_setStyle(t,e){const[n,a]=t.split(".");null!=(e=null!=e&&a?`${e}${a}`:e)?this._renderer.setStyle(this._ngEl.nativeElement,n,e):this._renderer.removeStyle(this._ngEl.nativeElement,n)}}class $t{constructor(){this._differ=new vt("NgStyle",8),this._value=null}getValue(){return this._value}setNgStyle(t){this._differ.setValue(t)}applyChanges(){this._differ.hasValueChanged()&&(this._value=this._differ.value)}}const Zt={provide:Wt,useClass:Kt},Jt={provide:Wt,useClass:$t},Qt=Zt,Xt=Object(a["ɵɵdefineDirective"])({type:function(){},selectors:null,factory:()=>{},hostBindings:function(t,e,n){1&t&&Object(a["ɵɵstyling"])(),2&t&&(Object(a["ɵɵstyleMap"])(e.getValue()),Object(a["ɵɵstylingApply"])())}});let te=(()=>{class t{constructor(t){this._delegate=t}getValue(){return this._delegate.getValue()}}return t.ngDirectiveDef=void 0,t})();class ee extends te{constructor(t){super(t)}set ngStyle(t){this._delegate.setNgStyle(t)}ngDoCheck(){this._delegate.applyChanges()}}class ne{constructor(t){this._viewContainerRef=t,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}ngOnChanges(t){this._shouldRecreateView(t)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)}_shouldRecreateView(t){const e=t.ngTemplateOutletContext;return!!t.ngTemplateOutlet||e&&this._hasContextShapeChanged(e)}_hasContextShapeChanged(t){const e=Object.keys(t.previousValue||{}),n=Object.keys(t.currentValue||{});if(e.length===n.length){for(let t of n)if(-1===e.indexOf(t))return!0;return!1}return!0}_updateExistingContext(t){for(let e of Object.keys(t))this._viewRef.context[e]=this.ngTemplateOutletContext[e]}}const ae=[Lt,Dt,Mt,jt,ne,ee,zt,Bt,Yt,Ht,Ut];function re(t,e){return Error(`InvalidPipeArgument: '${e}' for pipe '${Object(a["ɵstringify"])(t)}'`)}const ie=/((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/,se={yMMMdjms:me(be([ge("year",1),pe("month",3),ge("day",1),ge("hour",1),ge("minute",1),ge("second",1)])),yMdjm:me(be([ge("year",1),ge("month",1),ge("day",1),ge("hour",1),ge("minute",1)])),yMMMMEEEEd:me(be([ge("year",1),pe("month",4),pe("weekday",4),ge("day",1)])),yMMMMd:me(be([ge("year",1),pe("month",4),ge("day",1)])),yMMMd:me(be([ge("year",1),pe("month",3),ge("day",1)])),yMd:me(be([ge("year",1),ge("month",1),ge("day",1)])),jms:me(be([ge("hour",1),ge("second",1),ge("minute",1)])),jm:me(be([ge("hour",1),ge("minute",1)]))},oe={yyyy:me(ge("year",4)),yy:me(ge("year",2)),y:me(ge("year",1)),MMMM:me(pe("month",4)),MMM:me(pe("month",3)),MM:me(ge("month",2)),M:me(ge("month",1)),LLLL:me(pe("month",4)),L:me(pe("month",1)),dd:me(ge("day",2)),d:me(ge("day",1)),HH:ue(de(me(he(ge("hour",2),!1)))),H:de(me(he(ge("hour",1),!1))),hh:ue(de(me(he(ge("hour",2),!0)))),h:de(me(he(ge("hour",1),!0))),jj:me(ge("hour",2)),j:me(ge("hour",1)),mm:ue(me(ge("minute",2))),m:me(ge("minute",1)),ss:ue(me(ge("second",2))),s:me(ge("second",1)),sss:me(ge("second",3)),EEEE:me(pe("weekday",4)),EEE:me(pe("weekday",3)),EE:me(pe("weekday",2)),E:me(pe("weekday",1)),a:le(me(he(ge("hour",1),!0))),Z:fe("short"),z:fe("long"),ww:me({}),w:me({}),G:me(pe("era",1)),GG:me(pe("era",2)),GGG:me(pe("era",3)),GGGG:me(pe("era",4))};function ue(t){return function(e,n){const a=t(e,n);return 1==a.length?"0"+a:a}}function le(t){return function(e,n){return t(e,n).split(" ")[1]}}function de(t){return function(e,n){return t(e,n).split(" ")[0]}}function ce(t,e,n){return new Intl.DateTimeFormat(e,n).format(t).replace(/[\u200e\u200f]/g,"")}function fe(t){const e={hour:"2-digit",hour12:!1,timeZoneName:t};return function(t,n){const a=ce(t,n,e);return a?a.substring(3):""}}function he(t,e){return t.hour12=e,t}function ge(t,e){const n={};return n[t]=2===e?"2-digit":"numeric",n}function pe(t,e){const n={};return n[t]=e<4?e>1?"short":"narrow":"long",n}function be(t){return t.reduce((t,e)=>Object.assign({},t,e),{})}function me(t){return(e,n)=>ce(e,n,t)}const ye=new Map;let ve=(()=>{class t{constructor(t){this._locale=t}transform(e,n="mediumDate"){if(null==e||""===e||e!=e)return null;let a;if("string"==typeof e&&(e=e.trim()),xe(e))a=e;else if(isNaN(e-parseFloat(e)))if("string"==typeof e&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(e)){const[t,n,r]=e.split("-").map(t=>parseInt(t,10));a=new Date(t,n-1,r)}else a=new Date(e);else a=new Date(parseFloat(e));if(!xe(a)){let n;if("string"!=typeof e||!(n=e.match(z)))throw re(t,e);a=at(n)}return class{static format(t,e,n){return function(t,e,n){const a=se[t];if(a)return a(e,n);const r=t;let i=ye.get(r);if(!i){let e;i=[],ie.exec(t);let n=t;for(;n;)e=ie.exec(n),e?(i=i.concat(e.slice(1)),n=i.pop()):(i.push(n),n=null);ye.set(r,i)}return i.reduce((t,a)=>{const r=oe[a];return t+(r?r(e,n):function(t){return"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}(a))},"")}(n,t,e)}}.format(a,this._locale,t._ALIASES[n]||n)}}return t._ALIASES={medium:"yMMMdjms",short:"yMdjm",fullDate:"yMMMMEEEEd",longDate:"yMMMMd",mediumDate:"yMMMd",shortDate:"yMd",mediumTime:"jms",shortTime:"jm"},t})();function xe(t){return t instanceof Date&&!isNaN(t.valueOf())}function _e(t,e,n,a,r,i=null,s=!1){if(null==n)return null;if("number"!=typeof(n="string"!=typeof n||isNaN(+n-parseFloat(n))?n:+n))throw re(t,n);let o,u,l;if(a!==h.Currency&&(o=1,u=0,l=3),r){const t=r.match(it);if(null===t)throw new Error(`${r} is not a valid digit info for number pipes`);null!=t[1]&&(o=ct(t[1])),null!=t[3]&&(u=ct(t[3])),null!=t[5]&&(l=ct(t[5]))}return class{static format(t,e,n,a={}){const{minimumIntegerDigits:r,minimumFractionDigits:i,maximumFractionDigits:s,currency:o,currencyAsSymbol:u=!1}=a,l={minimumIntegerDigits:r,minimumFractionDigits:i,maximumFractionDigits:s,style:h[n].toLowerCase()};return n==h.Currency&&(l.currency="string"==typeof o?o:void 0,l.currencyDisplay=u?"symbol":"code"),new Intl.NumberFormat(e,l).format(t)}}.format(n,e,a,{minimumIntegerDigits:o,minimumFractionDigits:u,maximumFractionDigits:l,currency:i,currencyAsSymbol:s})}class Te{constructor(t){this._locale=t}transform(t,e){return _e(Te,this._locale,t,h.Decimal,e)}}class Oe{constructor(t){this._locale=t}transform(t,e){return _e(Oe,this._locale,t,h.Percent,e)}}class we{constructor(t){this._locale=t}transform(t,e="USD",n=!1,a){return _e(we,this._locale,t,h.Currency,a,e,n)}}const Se=[Te,Oe,we,ve];class Ie{createSubscription(t,e){return t.subscribe({next:e,error:t=>{throw t}})}dispose(t){t.unsubscribe()}onDestroy(t){t.unsubscribe()}}class Ne{createSubscription(t,e){return t.then(e,t=>{throw t})}dispose(t){}onDestroy(t){}}const Ce=new Ne,Re=new Ie;class Ae{constructor(t){this._ref=t,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}ngOnDestroy(){this._subscription&&this._dispose()}transform(t){return this._obj?t!==this._obj?(this._dispose(),this.transform(t)):Object(a["ɵlooseIdentical"])(this._latestValue,this._latestReturnedValue)?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,a.WrappedValue.wrap(this._latestValue)):(t&&this._subscribe(t),this._latestReturnedValue=this._latestValue,this._latestValue)}_subscribe(t){this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,e=>this._updateLatestValue(t,e))}_selectStrategy(t){if(Object(a["ɵisPromise"])(t))return Ce;if(Object(a["ɵisObservable"])(t))return Re;throw re(Ae,t)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null}_updateLatestValue(t,e){t===this._obj&&(this._latestValue=e,this._ref.markForCheck())}}class ke{transform(t){if(!t)return t;if("string"!=typeof t)throw re(ke,t);return t.toLowerCase()}}const Ee=/(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\S*/g;class Le{transform(t){if(!t)return t;if("string"!=typeof t)throw re(Le,t);return t.replace(Ee,t=>t[0].toUpperCase()+t.substr(1).toLowerCase())}}class De{transform(t){if(!t)return t;if("string"!=typeof t)throw re(De,t);return t.toUpperCase()}}class Pe{constructor(t){this.locale=t}transform(t,e="mediumDate",n,a){if(null==t||""===t||t!=t)return null;try{return K(t,e,a||this.locale,n)}catch(r){throw re(Pe,r.message)}}}const Me=/#/g;class qe{constructor(t){this._localization=t}transform(t,e,n){if(null==t)return"";if("object"!=typeof e||null===e)throw re(qe,e);return e[gt(t,Object.keys(e),this._localization,n)].replace(Me,t.toString())}}class je{transform(t,e){if(null==t)return"";if("object"!=typeof e||"string"!=typeof t)throw re(je,e);return e.hasOwnProperty(t)?e[t]:e.hasOwnProperty("other")?e.other:""}}class Fe{transform(t){return JSON.stringify(t,null,2)}}class Ge{constructor(t){this.differs=t,this.keyValues=[]}transform(t,e=Ve){if(!t||!(t instanceof Map)&&"object"!=typeof t)return null;this.differ||(this.differ=this.differs.find(t).create());const n=this.differ.diff(t);return n&&(this.keyValues=[],n.forEachItem(t=>{this.keyValues.push({key:t.key,value:t.currentValue})}),this.keyValues.sort(e)),this.keyValues}}function Ve(t,e){const n=t.key,a=e.key;if(n===a)return 0;if(void 0===n)return 1;if(void 0===a)return-1;if(null===n)return 1;if(null===a)return-1;if("string"==typeof n&&"string"==typeof a)return n<a?-1:1;if("number"==typeof n&&"number"==typeof a)return n-a;if("boolean"==typeof n&&"boolean"==typeof a)return n<a?-1:1;const r=String(n),i=String(a);return r==i?0:r<i?-1:1}class ze{constructor(t){this._locale=t}transform(t,e,n){if(He(t))return null;n=n||this._locale;try{return lt(Ue(t),n,e)}catch(a){throw re(ze,a.message)}}}class Be{constructor(t){this._locale=t}transform(t,e,n){if(He(t))return null;n=n||this._locale;try{return ut(Ue(t),n,e)}catch(a){throw re(Be,a.message)}}}class Ye{constructor(t){this._locale=t}transform(t,e,n="symbol",a,r){if(He(t))return null;r=r||this._locale,"boolean"==typeof n&&(console&&console.warn&&console.warn('Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".'),n=n?"symbol":"code");let i=e||"USD";"code"!==n&&(i="symbol"===n||"symbol-narrow"===n?G(i,"symbol"===n?"wide":"narrow",r):n);try{return ot(Ue(t),r,i,e,a)}catch(s){throw re(Ye,s.message)}}}function He(t){return null==t||""===t||t!=t}function Ue(t){if("string"==typeof t&&!isNaN(Number(t)-parseFloat(t)))return Number(t);if("number"!=typeof t)throw new Error(`${t} is not a number`);return t}class We{transform(t,e,n){if(null==t)return t;if(!this.supports(t))throw re(We,t);return t.slice(e,n)}supports(t){return"string"==typeof t||Array.isArray(t)}}const Ke=[Ae,De,ke,Fe,We,ze,Be,Le,Ye,Pe,qe,je,Ge];class $e{}class Ze{}const Je=new a.InjectionToken("DocumentToken"),Qe="browser",Xe="server",tn="browserWorkerApp",en="browserWorkerUi";function nn(t){return t===Qe}function an(t){return t===Xe}function rn(t){return t===tn}function sn(t){return t===en}const on=new a.Version("8.2.14");let un=(()=>{class t{}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({token:t,providedIn:"root",factory:()=>new ln(Object(a["ɵɵinject"])(Je),window,Object(a["ɵɵinject"])(a.ErrorHandler))}),t})();class ln{constructor(t,e,n){this.document=t,this.window=e,this.errorHandler=n,this.offset=()=>[0,0]}setOffset(t){this.offset=Array.isArray(t)?()=>t:t}getScrollPosition(){return this.supportScrollRestoration()?[this.window.scrollX,this.window.scrollY]:[0,0]}scrollToPosition(t){this.supportScrollRestoration()&&this.window.scrollTo(t[0],t[1])}scrollToAnchor(t){if(this.supportScrollRestoration()){t=this.window.CSS&&this.window.CSS.escape?this.window.CSS.escape(t):t.replace(/(\"|\'\ |:|\.|\[|\]|,|=)/g,"\\$1");try{const e=this.document.querySelector(`#${t}`);if(e)return void this.scrollToElement(e);const n=this.document.querySelector(`[name='${t}']`);if(n)return void this.scrollToElement(n)}catch(e){this.errorHandler.handleError(e)}}}setHistoryScrollRestoration(t){if(this.supportScrollRestoration()){const e=this.window.history;e&&e.scrollRestoration&&(e.scrollRestoration=t)}}scrollToElement(t){const e=t.getBoundingClientRect(),n=e.left+this.window.pageXOffset,a=e.top+this.window.pageYOffset,r=this.offset();this.window.scrollTo(n-r[0],a-r[1])}supportScrollRestoration(){try{return!!this.window&&!!this.window.scrollTo}catch(t){return!1}}}class dn{setOffset(t){}getScrollPosition(){return[0,0]}scrollToPosition(t){}scrollToAnchor(t){}setHistoryScrollRestoration(t){}}},SatO:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("wd/R"))},SeVD:function(t,e,n){"use strict";var a=n("ngJS"),r=n("NJ4a"),i=n("Lhse"),s=n("kJWO"),o=n("I55L"),u=n("c2HN"),l=n("XoHu");n.d(e,"a",(function(){return d}));const d=t=>{if(t&&"function"==typeof t[s.a])return d=t,t=>{const e=d[s.a]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)};if(Object(o.a)(t))return Object(a.a)(t);if(Object(u.a)(t))return n=t,t=>(n.then(e=>{t.closed||(t.next(e),t.complete())},e=>t.error(e)).then(null,r.a),t);if(t&&"function"==typeof t[i.a])return e=t,t=>{const n=e[i.a]();for(;;){const e=n.next();if(e.done){t.complete();break}if(t.next(e.value),t.closed)break}return"function"==typeof n.return&&t.add(()=>{n.return&&n.return()}),t};{const e=Object(l.a)(t)?"an invalid object":`'${t}'`;throw new TypeError(`You provided ${e} where a stream was expected.`+" You can provide an Observable, Promise, Array, or Iterable.")}var e,n,d}},SfRM:function(t,e,n){var a=n("YESw");t.exports=function(){this.__data__=a?a(null):{},this.size=0}},SgmB:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("IheW"),r=n("LRne"),i=n("5+tZ"),s=n("8Y7J"),o=n("pL04");let u=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("api/role")}delete(t){return this.http.delete(`api/role/${t}`)}get(t){return this.http.get(`api/role/${t}`)}create(t){return this.http.post("api/role",t)}clone(t,e){let n=new a.h;return n=n.append("new_name",e),this.http.post(`api/role/${t}/clone`,null,{params:n})}update(t){return this.http.put(`api/role/${t.name}`,t)}exists(t){return this.list().pipe(Object(i.a)(e=>{const n=e.some(e=>e.name===t);return Object(r.a)(n)}))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](a.c))},token:t,providedIn:o.a}),t})()},SpAZ:function(t,e,n){"use strict";function a(t){return t}n.d(e,"a",(function(){return a}))},SxV6:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("sVev"),r=n("pLZG"),i=n("IzEk"),s=n("xbPD"),o=n("XDbj"),u=n("SpAZ");function l(t,e){const n=arguments.length>=2;return l=>l.pipe(t?Object(r.a)((e,n)=>t(e,n,l)):u.a,Object(i.a)(1),n?Object(s.a)(e):Object(o.a)(()=>new a.a))}},Sxd8:function(t,e,n){var a=n("ZCgT");t.exports=function(t){var e=a(t),n=e%1;return e==e?n?e-n:e:0}},T1AV:function(t,e,n){var a=n("t2Dn"),r=n("5Tg0"),i=n("yP5f"),s=n("Q1l4"),o=n("+iFO"),u=n("03A+"),l=n("Z0cm"),d=n("3L66"),c=n("DSRE"),f=n("lSCD"),h=n("GoyQ"),g=n("YO3V"),p=n("c6wG"),b=n("itsj"),m=n("jeLo");t.exports=function(t,e,n,y,v,x,_){var T=b(t,n),O=b(e,n),w=_.get(O);if(w)a(t,n,w);else{var S=x?x(T,O,n+"",t,e,_):void 0,I=void 0===S;if(I){var N=l(O),C=!N&&c(O),R=!N&&!C&&p(O);S=O,N||C||R?l(T)?S=T:d(T)?S=s(T):C?(I=!1,S=r(O,!0)):R?(I=!1,S=i(O,!0)):S=[]:g(O)||u(O)?(S=T,u(T)?S=m(T):h(T)&&!f(T)||(S=o(O))):I=!1}I&&(_.set(O,S),v(S,O,y,x,_),_.delete(O)),a(t,n,S)}}},TJUb:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e){return a.isPlainObject(e)?a.get(e,t,t):t}}},TNUL:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"TreeNode, tree-node",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div\n        *ngIf="!templates.treeNodeFullTemplate"\n        [class]="node.getClass()"\n        [class.tree-node]="true"\n        [class.tree-node-expanded]="node.isExpanded && node.hasChildren"\n        [class.tree-node-collapsed]="node.isCollapsed && node.hasChildren"\n        [class.tree-node-leaf]="node.isLeaf"\n        [class.tree-node-active]="node.isActive"\n        [class.tree-node-focused]="node.isFocused"\n      >\n        <tree-node-drop-slot\n          *ngIf="index === 0"\n          [dropIndex]="node.index"\n          [node]="node.parent"\n        ></tree-node-drop-slot>\n\n        <tree-node-wrapper\n          [node]="node"\n          [index]="index"\n          [templates]="templates"\n        ></tree-node-wrapper>\n\n        <tree-node-children\n          [node]="node"\n          [templates]="templates"\n        ></tree-node-children>\n        <tree-node-drop-slot\n          [dropIndex]="node.index + 1"\n          [node]="node.parent"\n        ></tree-node-drop-slot>\n      </div>\n      <ng-container\n        [ngTemplateOutlet]="templates.treeNodeFullTemplate"\n        [ngTemplateOutletContext]="{\n          $implicit: node,\n          node: node,\n          index: index,\n          templates: templates\n        }"\n      >\n      </ng-container>\n    </ng-container>\n  '})],t)}()},TWQb:function(t,e,n){var a=n("/GqU"),r=n("UMSQ"),i=n("I8vh"),s=function(t){return function(e,n,s){var o,u=a(e),l=r(u.length),d=i(s,l);if(t&&n!=n){for(;l>d;)if((o=u[d++])!=o)return!0}else for(;l>d;d++)if((t||d in u)&&u[d]===n)return t||d||0;return!t&&-1}};t.exports={includes:s(!0),indexOf:s(!1)}},TYy9:function(t,e,n){var a=n("XGnz");t.exports=function(t){return null!=t&&t.length?a(t,1):[]}},TYzs:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){const e=parseInt(t,10);return isNaN(e)?t:t+(1===Math.floor(e/10)?"th":e%10==1?"st":e%10==2?"nd":e%10==3?"rd":"th")}}},TeQF:function(t,e,n){"use strict";var a=n("I+eb"),r=n("tycR").filter,i=n("Hd5f"),s=n("rkAj"),o=i("filter"),u=s("filter");a({target:"Array",proto:!0,forced:!o||!u},{filter:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}})},UB5X:function(t,e,n){var a=n("NykK"),r=n("ExA7");t.exports=function(t){return"number"==typeof t||r(t)&&"[object Number]"==a(t)}},UDhR:function(t,e,n){!function(t){"use strict";t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},UMSQ:function(t,e,n){var a=n("ppGB"),r=Math.min;t.exports=function(t){return t>0?r(a(t),9007199254740991):0}},"UNi/":function(t,e){t.exports=function(t,e){for(var n=-1,a=Array(t);++n<t;)a[n]=e(n);return a}},USCx:function(t,e,n){!function(t){"use strict";t.defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Méitheamh","Iúil","Lúnasa","Meán Fómhair","Deaireadh Fómhair","Samhain","Nollaig"],monthsShort:["Eaná","Feab","Márt","Aibr","Beal","Méit","Iúil","Lúna","Meán","Deai","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Satharn"],weekdaysShort:["Dom","Lua","Mái","Céa","Déa","hAo","Sat"],weekdaysMin:["Do","Lu","Má","Ce","Dé","hA","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné aig] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n("wd/R"))},UTVS:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},UfWW:function(t,e,n){var a=n("KwMD"),r=n("ut/Y"),i=n("Sxd8"),s=Math.max;t.exports=function(t,e,n){var o=null==t?0:t.length;if(!o)return-1;var u=null==n?0:i(n);return u<0&&(u=s(o+u,0)),a(t,r(e,3),u)}},UpQW:function(t,e,n){!function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n("wd/R"))},Ur1D:function(t,e,n){!function(t){"use strict";t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n("wd/R"))},UxlC:function(t,e,n){"use strict";var a=n("14Sl"),r=n("glrk"),i=n("ewvW"),s=n("UMSQ"),o=n("ppGB"),u=n("HYAF"),l=n("iqWW"),d=n("FMNM"),c=Math.max,f=Math.min,h=Math.floor,g=/\$([$&'`]|\d\d?|<[^>]*>)/g,p=/\$([$&'`]|\d\d?)/g;a("replace",2,(function(t,e,n,a){var b=a.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=a.REPLACE_KEEPS_$0,y=b?"$":"$0";return[function(n,a){var r=u(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,r,a):e.call(String(r),n,a)},function(t,a){if(!b&&m||"string"==typeof a&&-1===a.indexOf(y)){var i=n(e,t,this,a);if(i.done)return i.value}var u=r(t),h=String(this),g="function"==typeof a;g||(a=String(a));var p=u.global;if(p){var x=u.unicode;u.lastIndex=0}for(var _=[];;){var T=d(u,h);if(null===T)break;if(_.push(T),!p)break;""===String(T[0])&&(u.lastIndex=l(h,s(u.lastIndex),x))}for(var O,w="",S=0,I=0;I<_.length;I++){T=_[I];for(var N=String(T[0]),C=c(f(o(T.index),h.length),0),R=[],A=1;A<T.length;A++)R.push(void 0===(O=T[A])?O:String(O));var k=T.groups;if(g){var E=[N].concat(R,C,h);void 0!==k&&E.push(k);var L=String(a.apply(void 0,E))}else L=v(N,h,C,R,k,a);C>=S&&(w+=h.slice(S,C)+L,S=C+N.length)}return w+h.slice(S)}];function v(t,n,a,r,s,o){var u=a+t.length,l=r.length,d=p;return void 0!==s&&(s=i(s),d=g),e.call(o,d,(function(e,i){var o;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,a);case"'":return n.slice(u);case"<":o=s[i.slice(1,-1)];break;default:var d=+i;if(0===d)return e;if(d>l){var c=h(d/10);return 0===c?e:c<=l?void 0===r[c-1]?i.charAt(1):r[c-1]+i.charAt(1):e}o=r[d-1]}return void 0===o?"":o}))}}))},"V/fk":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},V2x9:function(t,e,n){!function(t){"use strict";t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},V3my:function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("cp0P"),s=(n("DSvg"),n("SgmB"),n("20UP"),n("Mxhz"),n("OLbh")),o=n("DNAf"),u=(n("sne2"),n("oxzT")),l=n("mtw6"),d=(n("2EZI"),n("1Ni5")),c=n("oMSZ"),f=(n("aexS"),n("9nlD"),n("1nQr"),function(t){return t.editing="editing",t}({}));class h{}n.d(e,"a",(function(){return g}));class g{constructor(t,e,n,a,r,i,s,l,d,c,h,g,p){this.authService=t,this.authStorageService=e,this.route=n,this.router=a,this.modalService=r,this.roleService=i,this.userService=s,this.notificationService=l,this.i18n=d,this.actionLabels=c,this.passwordPolicyService=h,this.formBuilder=g,this.settingsService=p,this.userFormMode=f,this.messages=new o.a({empty:this.i18n("There are no roles.")},this.i18n),this.passwordPolicyHelpText="",this.icons=u.a,this.bsConfig={dateInputFormat:"YYYY-MM-DD",containerClass:"theme-default"},this.resource=this.i18n("user"),this.createForm(),this.messages=new o.a({empty:this.i18n("There are no roles.")},this.i18n)}createForm(){this.passwordPolicyService.getHelpText().subscribe(t=>{this.passwordPolicyHelpText=t}),this.userForm=this.formBuilder.group({username:["",[a.B.required],[d.a.unique(this.userService.validateUserName,this.userService)]],name:[""],password:["",[],[d.a.passwordPolicy(this.userService,()=>this.userForm.getValue("username"),(t,e,n)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(e),this.passwordValuation=r.defaultTo(n,"")})]],confirmpassword:[""],pwdExpirationDate:[""],email:["",[d.a.email]],roles:[[]],enabled:[!0,[a.B.required]],pwdUpdateRequired:[!0]},{validators:[d.a.match("password","confirmpassword")]})}ngOnInit(){this.router.url.startsWith("/user-management/users/edit")?(this.mode=this.userFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.minDate=new Date;const t=[this.roleService.list(),this.settingsService.getStandardSettings()];Object(i.a)(t).subscribe(t=>{if(this.allRoles=r.map(t[0],t=>(t.enabled=!0,t)),this.pwdExpirationSettings=new c.a(t[1]),this.mode===this.userFormMode.editing)this.initEdit();else if(this.pwdExpirationSettings.pwdExpirationSpan>0){const t=this.userForm.get("pwdExpirationDate"),e=new Date;e.setDate(this.minDate.getDate()+this.pwdExpirationSettings.pwdExpirationSpan),t.setValue(e),t.setValidators([a.B.required])}})}initEdit(){this.disableForEdit(),this.route.params.subscribe(t=>{this.userService.get(t.username).subscribe(t=>{this.response=r.cloneDeep(t),this.setResponse(t)})})}disableForEdit(){this.userForm.get("username").disable()}setResponse(t){["username","name","email","roles","enabled","pwdUpdateRequired"].forEach(e=>this.userForm.get(e).setValue(t[e]));const e=t.pwdExpirationDate;e&&this.userForm.get("pwdExpirationDate").setValue(new Date(1e3*e))}getRequest(){const t=new h;["username","password","name","email","roles","enabled","pwdUpdateRequired"].forEach(e=>t[e]=this.userForm.get(e).value);const e=this.userForm.get("pwdExpirationDate").value;return e&&(this.mode===this.userFormMode.editing&&this.response.pwdExpirationDate===Number(e)/1e3||e.setHours(23,59,59),t.pwdExpirationDate=Number(e)/1e3),t}createAction(){const t=this.getRequest();this.userService.create(t).subscribe(()=>{this.notificationService.show(l.a.success,this.i18n('Created user "{{username}}"',{username:t.username})),this.router.navigate(["/user-management/users"])},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}editAction(){if(this.isUserRemovingNeededRolePermissions()){const t={titleText:this.i18n("Update user"),buttonText:this.i18n("Continue"),bodyTpl:this.removeSelfUserReadUpdatePermissionTpl,onSubmit:()=>{this.modalRef.hide(),this.doEditAction()},onCancel:()=>{this.userForm.setErrors({cdSubmitButton:!0}),this.userForm.get("roles").reset(this.userForm.get("roles").value)}};this.modalRef=this.modalService.show(s.a,{initialState:t})}else this.doEditAction()}isCurrentUser(){return this.authStorageService.getUsername()===this.userForm.getValue("username")}isUserChangingRoles(){return this.isCurrentUser()&&this.response&&!r.isEqual(this.response.roles,this.userForm.getValue("roles"))}isUserRemovingNeededRolePermissions(){return this.isCurrentUser()&&!this.hasUserReadUpdatePermissions(this.userForm.getValue("roles"))}hasUserReadUpdatePermissions(t=[]){for(const e of this.allRoles)if(-1!==t.indexOf(e.name)&&e.scopes_permissions.user){const t=e.scopes_permissions.user;return["read","update"].every(e=>-1!==t.indexOf(e))}return!1}doEditAction(){const t=this.getRequest();this.userService.update(t).subscribe(()=>{this.isUserChangingRoles()?this.authService.logout(()=>{this.notificationService.show(l.a.info,this.i18n("You were automatically logged out because your roles have been changed."))}):(this.notificationService.show(l.a.success,this.i18n('Updated user "{{username}}"',{username:t.username})),this.router.navigate(["/user-management/users"]))},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}clearExpirationDate(){this.userForm.get("pwdExpirationDate").setValue(void 0)}submit(){this.mode===this.userFormMode.editing?this.editAction():this.createAction()}}},V5SL:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="fr-FR">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Activer/Désactiver la navigation</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Tableau de bord</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Grappe</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Serveurs</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Moniteurs</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Services</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuration</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Carte CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Modules Manager</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Journaux</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Réserves</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloc</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Images</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Mise en miroir</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Systèmes de fichiers</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Compartiments</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Sélectionner une langue</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Chargement des données du panneau...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Sélecteur d\'heure Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Réinitialiser les paramètres</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Retour</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Échec du chargement des données.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>sélectionné(e)(s)</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>trouvé(e)(s)</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nom</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Description</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Description longue</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Valeur par défaut</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Valeur par défaut du daemon</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valeurs</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Sauvegarder</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visionneuse de carte CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Chargement...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nom d\'hôte</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Ce champs est requis.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Oui.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Annuler</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Fermer</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Liste d\'hôtes</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Performance globale</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Aucune entrée trouvée</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Journaux de grappes</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Journaux d\'audit</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Chargement de la configuration...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>La configuration n\'a pas pu être chargée.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Modifier le module Manager</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>La valeur entrée n\'est pas un UUID valide, par exemple : 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>La valeur entrée doit être une adresse IP valide.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>La valeur entrée doit être un nombre.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>La valeur entrée doit être un nombre ou une valeur décimale.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Mise à jour</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Statut</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID de grappe</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap modifié</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>required con</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>required mon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Dans le quorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Hors quorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Ajouter</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Fonctionnalités</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Drapeaux OSD à l\'échelle de la grappe</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Soumettre</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avancé...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorité de récupération des OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorité</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personnaliser les valeurs de priorité</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Ce champ est obligatoire !</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>La valeur doit être comprise entre 0 et 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Réévaluer</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profondeur } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profondeur } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Liste des OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valeur</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Modifier</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Supprimer</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Santé</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiques</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clients</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Accès possible par tous les clients</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresses</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Champ obligatoire</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Doit contenir une ou plusieurs valeurs séparées par une virgule</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Par exemple :</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Type d\'accès</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Ajouter des clients</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Aucune grappe disponible --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Sélectionner la grappe --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Ajouter un daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend de stockage</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Aucune réserve de données disponible --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Sélectionner le backend de stockage --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Utilisateur Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Aucun utilisateur disponible --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Sélectionner l\'utilisateur Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID utilisateur CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Aucun client disponible --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Sélectionner le client cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nom CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Libellé de sécurité</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Activer le libellé de sécurité</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Chemin CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Le chemin doit commencer par \'/\' et peut être suivi d\'un mot</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Un nouveau répertoire sera créé</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Chemin</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Le chemin peut être constitué d\'un seul \'/\' ou d\'un seul mot</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Un compartiment sera créé</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocole NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Balise NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Les clients ne peuvent pas monter de sous-répertoires (si la balise = foo, le client ne peut pas monter foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>En utilisant différentes options de balise, il est possible d\'exporter plusieurs fois le même chemin.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>En utilisant différentes options de pseudo, il est possible d\'exporter exporter plusieurs fois le même chemin.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Aucun type d\'accès disponible --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Sélectionner le type d\'accès --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Aucun squash disponible --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Sélectionnez le type de squash d\'ID utilisateur qui est effectué --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocole de transport</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Bienvenue dans Ceph !</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nom d\'utilisateur requis</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Mot de passe requis</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Connexion</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Désolé, l\'utilisateur n\'existe pas dans Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Interdit</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Désolé, vous n\'êtes pas autorisé à voir ce que vous cherchez.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuration RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Supprimez la valeur de configuration locale. La valeur de configuration parent sera héritée et utilisée à la place.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>La valeur minimale est 0.</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Liste des réserves</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Le nom doit être exclusivement composé de caractères alphanumériques, de tirets et de traits de soulignement.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Le nom de profil du code d\'effacement sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plug-in</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Blocs de données (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Doit être égal ou supérieur à 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Blocs de codage (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Doit être égal ou supérieur à 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimateur de durabilité (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localité (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domaine de défaillance Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localité Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Aucun</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technique</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Taille de paquet</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Racine Crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Classe de périphérique Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>tout</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Répertoire</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nom...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Le nom de réserve Ceph sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Type de réserve</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Sélectionner un type de réserve --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Au moins un groupe de placements est nécessaire.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Votre grappe ne peut pas gérer autant de groupes de placements. Veuillez recalculer le nombre de groupes de placements nécessaires.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Aide au calcul</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Taille de réplication</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Drapeaux</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Écrasements EC</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Applications</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Aucun profil de code d\'effacement n\'est disponible --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Sélectionner un profil de code d\'effacement --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Jeu de règles Crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Sélectionner une règle crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Règle Crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Étapes Crush</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compression</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Mode</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algorithme</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Aucun algorithme de compression d\'effacement n\'est disponible --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Taille de blob minimale</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>par ex. 128 Kio</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>La valeur doit être supérieure à 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Taille de blob maximale</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>par ex., 512 Kio</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>La valeur doit être supérieure à la taille de blob minimale.</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rapport</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rapport de compression</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>La valeur doit se situer entre 0.0 et 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>par exemple, 10 Gio</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Détails</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Détails des performances</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Détails des niveaux de mise en cache</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Déplacer une image vers la corbeille.</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protection expire le </target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NON PROTÉGÉ</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Format de date incorrect. Veuillez utiliser "AAAA-MM-JJ HH:mm:ss"</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protection a déjà expiré. Veuillez sélectionner une date ultérieure ou laisser le champ vide.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Déplacer une image</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Présentation</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Cibles</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Authentification de la découverte</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Utilisateur</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Les noms d\'utilisateur doivent comporter entre 8 et 64 caractères et\n                        ne peuvent contenir que des lettres et les caractères \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Mot de passe</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Utilisateur commun</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Mot de passe commun</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informations disponibles :</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Cibles iSCSI non disponibles</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Réserve</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Réserve de données</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Créé</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Taille</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objets</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Taille de l\'objet</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Provisionné</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Provisionnement total</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unité de segmentation</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Nombre de segmentations</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Parent</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Préfixe du nom de bloc</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Tri</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantanés</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Ce paramètre remplace la valeur globale</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Il s\'agit de la valeur globale. Aucune valeur de cette option n\'a été définie pour cette image.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>Les caractères \'/\' et \'@\' ne sont pas autorisés.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Aucune réserve RBD disponible --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Sélectionner une réserve --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Utiliser une réserve de données dédiée</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Réserve de données</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Réserve dédiée qui stocke les données objet du RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Vous devez augmenter la taille.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avancé</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Segmentation</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unité de segmentation</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Sélectionner une unité de segmentation --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Ce champ est obligatoire, car le nombre de segments est défini.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>L\'unité de segmentation est supérieure à la taille de l\'objet.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Nombre de segments</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Ce champ est obligatoire, car l\'unité de segmentation est définie.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Le nombre de segments doit être supérieur à 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Vous êtes sur le point de revenir à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vider la corbeille</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Tout</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Réserve :</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nom de la réserve...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurer l\'image</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Pour restaurer</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>saisissez le nouveau nom de l\'image, puis cliquez sur</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nouveau nom</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Expiration le </target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protection jusqu\'au</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologie iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Il n\'est généralement pas nécessaire de modifier ces paramètres par défaut.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Paramètres</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmer</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Paramètres avancés</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN cible</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Modèle IQN incorrect.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Par exemple : iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Plus d\'informations</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Des paramètres avancés de cette cible ont été modifiés.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portails</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Ajouter un portail</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Des paramètres avancés de cette image ont été modifiés.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Ajouter une image</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Authentification ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Initiateurs</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Initiateur</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN client</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>L\'IQN de l\'initiateur doit être unique.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Les noms d\'utilisateur doivent comporter entre 8 et 64 caractères et\n                        ne peuvent contenir que des lettres et les caractères \'.\', \'@\', \'-\', \'_\' ou \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>L\'initiateur appartient à un groupe dans lequel les images seront configurées.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Aucun élément ajouté.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Ajouter un initiateur</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Groupes</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Groupe</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Ajouter un groupe</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Corbeille</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problèmes</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronisation en cours</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Prêt</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Modifier le mode de mise en miroir de la réserve</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Les grappes d\'homologues doivent être supprimées avant de désactiver la mise en miroir.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Modifier} other {Ajouter} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nom de grappe</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Le nom de grappe n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID CephX</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>L\'ID CephX n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adresses du moniteur</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Adresses séparées par une virgule...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>L\'adresse du moniteur n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Clef CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Clef Base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La clef CephX doit être codée en base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Compteurs de performance non disponibles</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Liste de daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Compteurs de performance</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Chargement des données de compartiment...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>La valeur n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Le nom sélectionné est déjà en cours d\'utilisation.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Propriétaire</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Sélectionner un utilisateur --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Activé</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Type d\'index</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Règle de placement</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marqueur</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marqueur maximum</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Version</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Version principale</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Date de modification</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Groupe de zones</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Quota de compartiments</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Taille maximale</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Illimité</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Nombre maximal d\'objets</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nom d\'utilisateur</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Sélectionner un nom d\'utilisateur --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Générer automatiquement la clef</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Clef d\'accès</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Clef secrète</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nom complet</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Adresse électronique</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspendu</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Système</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Nombre maximal de compartiments</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Utilisateurs secondaires</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Fonctionnalités</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Quota utilisateur</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Afficher</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Clefs</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Type</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Sélectionner un type --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Autorisation</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Sélectionner une autorisation --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Utilisateur secondaire</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>L\'ID d\'utilisateur secondaire sélectionné est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lire, écrire</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>complet</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Clé Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Générer automatiquement le secret</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Chargement des donnés utilisateur…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Les donnés utilisateur n\'ont pas pu être chargées.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>L\'ID utilisateur spécifié est déjà utilisé.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ceci n\'est pas une adresse électronique valide.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>L\'adresse électronique spécifiée est déjà utilisée.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Nombre max. de compartiments</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Désactivé</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personnalisé</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Clef S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Il n\'y a aucun utilisateur secondaire.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Il n\'y a pas de clefs.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Il n\'y a aucune fonctionnalité.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Taille illimitée</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Taille max.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objets illimités</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Nombre max. d\'objets</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>La valeur saisie doit être &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Description...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Autorisations</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Rôles</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmer le mot de passe</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Le mot de passe de confirmation ne correspond pas au mot de passe.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Adresse électronique</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>L\'adresse électronique n\'est pas valide.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Vous êtes sur le point de supprimer les autorisations "lecture/mise à jour utilisateur" de votre propre utilisateur.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Si vous continuez, vous ne serez plus en mesure d\'ajouter ni de supprimer des rôles pour n\'importe quel utilisateur.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Voulez-vous vraiment continuer ?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Aide</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentation</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>À propos de</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Paramètres du tableau de bord</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestion des utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Utilisateur connecté</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Se déconnecter</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Attributs (carte OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Métadonnées non disponibles</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Métadonnées</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Compteur de performance</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Écritures</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lectures</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogramme</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valeurs actuelles</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Minimum</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Maximum</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Source</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Niveau</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Mise à jour possible lors de l\'exécution (modifiable)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Balises</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valeurs d\'énuménation</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Voir aussi</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Statut de la grappe</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons du gestionnaire</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Passerelles d\'objet</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Serveurs de métadonnées</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Passerelles iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS client</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Débit client</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lectures/Écritures client</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Débit de récupération</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Nettoyer</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Performance</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacité brute</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Groupes de placements par OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Statut du groupe de placements</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacité</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Rangs</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Actuel</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Authentification de la découverte mise à jour</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Il n\'y a aucun portail disponible.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Il n\'y a aucune image disponible.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Il n\'y a aucune image disponible. Veillez à ajouter une image à la cible.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Il n\'y a aucun initiateur disponible. Veillez à ajouter un initiateur à la cible.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Cible</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>État</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Octets de lecture</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Octets d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Opérations d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O depuis</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problème</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Avancement</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Mode d\'édition</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Ajouter un homologue</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Modifier un homologue</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Supprimer un homologue</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Leader</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>nb en local</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>nb à distance</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>mettre en miroir l\'homologue</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Clef</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Aplatissement en profondeur</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Superposition</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Verrou exclusif</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Assignation d\'objet (nécessite exclusive-lock)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Journalisation (nécessite exclusive-lock)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NON PROTÉGÉ</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Retour à l\'état initial de l\'instantané RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Revenir à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Intantané RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Supprimé le</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>type</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>état</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>version</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Hôte</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>racine</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons en veille</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Rang</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Activité</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodes</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Utilisation</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Mis à jour</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>La valeur peut être mise à jour au moment de l\'exécution.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Les daemons/clients ne tirent pas cette valeur de\n  la base de données de configuration de Monitor. Nous n\'autorisons pas le réglage de cette option via \'ceph config\n  set ...\'. Cette option doit être configurée via ceph.conf ou via\n  la ligne de commande.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>L\'option ne prend effet qu\'au démarrage du daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>L\'option n\'affecte que la création des grappes.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>L\'option n\'affecte que la création des daemons.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Service</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valeur actuelle</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Modifiable</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Activer</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Désactiver</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Reconnexion en cours… Veuillez patienter.</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Adresse publique</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sessions ouvertes</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Pas rentrés</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Les OSD qui ont été marqués comme sortis ne seront pas marqués comme rentrés à leur démarrage.</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Pas sortis</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Les OSD ne seront pas marqués automatiquement comme sortis après l\'intervalle configuré.</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Pas démarrés</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>Les OSD ne sont pas autorisés à démarrer.</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Pas arrêtés</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Les rapports de défaillance des OSD sont ignorés, de sorte que les moniteurs ne marquent pas les OSD comme étant arrêtés.</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pause</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Met en pause les lectures et écritures</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Pas de nettoyage</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Nettoyage désactivé</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Pas de nettoyage en profondeur</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Le nettoyage en profondeur est désactivé</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Pas de renvoi</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Le renvoi des groupes de placements est suspendu</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Pas de récupération</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>La récupération des groupes de placements est suspendue</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Tri au niveau du bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Utiliser le tri au niveau du bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Variables snapdir purgées</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Les OSD ont converti les variables snapset</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Suppressions des récupérations</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Suppressions effectuées pendant la restauration et non l\'homologation</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Limite stricte de journalisation des groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Impose une limite stricte à la longueur du journal des groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Drapeaux OSD mis à jour</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>sorti</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>rentré</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>arrêté</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marquer</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdu</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marqué comme perdu</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Purger</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>purgé</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>détruire</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>détruit</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>supprimer</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Groupes de placements</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Octets de lecture</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Octets d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Opérations d\'écriture</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Nbre max. de renvois</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Nombre maximum de récupérations actives</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Nombre maximum de démarrages uniques de récupérations</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Mise en veille de la récupération</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Travail</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravité</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Démarré</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Utilisé</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispo.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Nettoyé</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>En cours</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Avertissement</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Inconnu</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>opérationnel</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>aucun système de fichiers</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>actif</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>veille</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon actif</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Le service NFS Ganesha n\'est pas configuré.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Utilisateur CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Système de fichiers CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(hérité de la configuration globale)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>hérité de la configuration globale</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Sélectionner le type de squashing d\'ID utilisateur effectué --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Aucun daemon n\'est disponible.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Mode cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Âge évict min.</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Âge vidage min.</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Nombre max d\'octets cibles</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Nombre max. d\'objets cibles</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Aucune application ajoutée</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Limite d\'applications atteinte</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Une réserve peut avoir quatre définitions d\'application maximum.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caractère autorisés \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La longueur maximale est de 128 caractères.</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrer ou ajouter des applications</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Ajouter une application</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Taille de la réplique</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Dernier changement</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profil de code d\'effacement</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Jeu de règles Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>compartiment</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>compartiments</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>utilisateur</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>utilisateurs</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Périmètre</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lecture</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Créer</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Rôle système</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Mettre à jour l\'utilisateur</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuer</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Vous avez été automatiquement déconnecté, car vos rôles ont changé.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Chaque objet est divisé en parties de blocs de données, chacune étant stockée sur un OSD différent.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calculez des blocs de codage pour chaque objet et stockez-les sur différents OSD.\n Le nombre de blocs de codage correspond également au nombre d\'OSD qui peuvent être arrêtés sans perdre de données.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Le plugin jerasure est le plugin le plus générique et le plus flexible,\n  c\'est aussi la valeur par défaut des réserves codées à effacement Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La technique la plus flexible est reed_sol_van_van : il suffit de définir k\n et m. La technique cauchy_good peut être plus rapide, mais vous devez choisir la taille du paquet\n avec précaution. reed_sol_r6_op, liberation, blaum_roth et liber8tion sont des équivalents RAID6\n en ce sens qu\'ils ne peuvent être configurés qu\'avec m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>L\'encodage se fera sur des paquets de taille d\'octets.\n  Choisir la bonne taille de paquet est difficile.\n  La documentation de jerasure contient de nombreuses informations à ce sujet.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Avec le plugin jerasure, lorsqu\'un objet codé à effacement est stocké sur\n plusieurs OSD, la récupération à la suite de la perte d\'un OSD nécessite la lecture de tous les autres.\n Par exemple, si jerasure est configuré avec k=8 et m=4, la perte d\'un OSD nécessite de lire\n les onze autres pour pouvoir effectuer une réparation.\n\n Le plugin de code d\'effacement lrc crée des blocs de parité locale pour permettre la récupération avec\n moins d\'OSD. Par exemple, si lrc est configuré avec k=8, m=4 et l=4,\n un bloc de parité supplémentaire est créé pour chaque groupe de quatre OSD. Lorsqu\'un seul OSD est perdu, il peut être\n récupéré avec seulement quatre OSD au lieu de onze.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Regroupez les blocs de données et de codage en ensembles de localité de taille. Par exemple,\n pour k=4 et m=2, lorsque locality=3, deux groupes de trois sont créés. Chaque ensemble peut\n être récupéré sans lire les blocs d\'un autre jeu.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Type de compartiment Crush dans lequel chaque ensemble de blocs défini\n par I sera stocké. Par exemple, s\'il est réglé sur rack, chaque groupe de blocs I sera\n placé dans un rack différent. Il est utilisé pour créer une étape de la règle CRUSH telle que l\'étape de choix\n d\'un rack. S\'il n\'est pas défini, aucun regroupement de ce type n\'est effectué.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Le plug-in isa encapsule la bibliothèque ISA. Il ne fonctionne qu\'avec des processeurs Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Le plugin ISA se présente sous deux formes Reed Solomon.\n Si reed_sol_van est défini, il équivaut à Vandermonde. Si cauchy est configuré, il équivaut à Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Le plug-in shec encapsule la bibliothèque SHEC multiple.\n Il permet à Ceph de récupérer les données plus efficacement qu\'avec les codes Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Nombre de blocs de parité, chacun incluant chaque bloc de données dans sa\n plage de calcul. Ce nombre est utilisé comme estimateur de durabilité. Par exemple, si c=2,\n 2 OSD peuvent être arrêtés sans perte de données.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nom du compartiment crush utilisé pour la première étape de la règle CRUSH.\n Par exemple, l\'étape de définition des valeurs par défaut.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Vérifiez qu\'il n\'existe pas deux blocs dans un compartiment avec le même domaine de\n défaillance. Par exemple, si le domaine de défaillance est un hôte, deux blocs ne seront pas stockés sur le même\n hôte. Cette option est utilisée pour créer une étape de la règle CRUSH telle que chooseleaf host.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restreindre le placement aux périphériques d\'une classe spécifique\n (par exemple, ssd ou hdd), en utilisant les noms des classes de périphériques crush dans la carte CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Définissez le nom du répertoire à partir duquel le plug-in de code d\'effacement est chargé.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Autoriser toutes les opérations</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Autorise uniquement les opérations qui ne modifient pas le serveur</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>N\'autorise pas les opérations de lecture ou d\'écriture, mais toutes les autres.</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>N\'autorise pas la lecture, l\'écriture ni aucune autre opération modifiant les attributs d\'un fichier ou le contenu d\'un répertoire.</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>N\'autorise aucun accès</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Sélectionner la priorité --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Faible</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Élevée</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informations</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Les 5 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Les 15 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Les 30 dernières minutes</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>La dernière heure (par défaut)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Les 3 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Les 6 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Les 12 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Les 24 dernières heures</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Hier</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Aujourd\'hui</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Depuis le début de la journée</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Avant-hier</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Les 2 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Il y a huit jours</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>La semaine dernière</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Cette semaine</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Depuis le début de la semaine</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Les 7 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Le mois dernier</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Ce mois</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Depuis le début du mois</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Les 30 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Les 90 derniers jours</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Les 6 derniers mois</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>L\'année écoulée</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>L\'année dernière</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Cette année</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Depuis le début de l\'année</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Les 2 dernières années</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Les 5 dernières années</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Aucun élément sélectionné.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Désélectionnez l\'élément pour le sélectionner à nouveau.</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Limite de sélection atteinte</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Balises de filtre</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Ajouter un badge</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Aucun élément disponible.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Cloner</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copier</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Nettoyage en profondeur</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Détruire</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Aplatir</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marquer comme arrêté</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marquer comme rentré</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marquer comme perdu</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marquer comme sorti</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Protéger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renommer</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurer</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Déplacer vers la corbeille</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Annuler la protection</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Supprimé</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Cloné</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copié</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Applati</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Purgé</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restauré</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Rétabli à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Oui</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Non</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Qualité de service</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limite de bits/s</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Limite souhaitée d\'octets E/S par seconde.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limite E/S par seconde</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Limite souhaitée d\'opérations E/S par seconde.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limite de bits/s en lecture</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Limite souhaitée de lecture d\'octets par seconde.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limite E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Limite souhaitée d\'opérations de lecture par seconde.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limite de bits/s en écriture</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Limite souhaitée d\'écriture d\'octets par seconde.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limite E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Limite souhaitée d\'opérations d\'écriture par seconde.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Rafale de bits/s</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Limite de rafale d\'octets en E/S souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Rafale E/S par seconde</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Limite de rafale d\'opérations E/S souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Rafale E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Limite de rafale d\'octets lus par seconde.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Rafale E/S par seconde en lecture</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Limite de rafale d\'opérations de lecture</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Rafale E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Limite de rafale de lectures d\'octets souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Rafale d\'E/S par seconde en écriture</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Limite de rafale d\'opérations d\'écriture souhaitée.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>En cours d\'exécution</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>exécuter</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Exécuté</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tâche inconnue</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>En cours de création</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>créer</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>En cours de mise à jour</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>mettre à jour</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>En cours de suppression</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonage en cours</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>cloner</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>En cours de copie</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copie</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Aplatissement</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>aplatir</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Retour à l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>rétablir l\'état initial</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>En cours de déplacement</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>déplacer</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Déplacé</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Impossible de trouver l\'image.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>En cours de restauration.</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurer</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>En cours de purge</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>purger</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>toutes les réserves</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Impossible de désactiver la mise en miroir, car l\'élément contient un homologue.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},V6Ve:function(t,e,n){var a=n("kekF")(Object.keys,Object);t.exports=a},VOtZ:function(t,e,n){var a=n("juv8"),r=n("MvSz");t.exports=function(t,e){return a(t,r(t),e)}},VRyK:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("z+Ro"),i=n("bHdf"),s=n("yCtX");function o(...t){let e=Number.POSITIVE_INFINITY,n=null,o=t[t.length-1];return Object(r.a)(o)?(n=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(e=t.pop())):"number"==typeof o&&(e=t.pop()),null===n&&1===t.length&&t[0]instanceof a.a?t[0]:Object(i.a)(e)(Object(s.a)(t,n))}},VTlA:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("mSOc"),n("ufoC");class a{constructor(t,e){this.taskMessageService=t,this.summaryService=e}init(t,e,n,a,r,i,s){this.getUpdate=t,this.preProcessing=e,this.setList=n,this.onFetchError=a,this.taskFilter=r,this.itemFilter=i,this.builders=s||{},this.summaryDataSubscription=this.summaryService.subscribe(t=>{this.getUpdate().subscribe(e=>{this.updateData(e,t.executing_tasks.filter(this.taskFilter))},this.onFetchError)},this.onFetchError)}updateData(t,e){const n=this.preProcessing?this.preProcessing(t):t;this.addMissing(n,e),n.forEach(t=>{const n=e.filter(e=>this.itemFilter(t,e));t.cdExecuting=this.getTaskAction(n)}),this.setList(n)}addMissing(t,e){const n=this.builders.default;e.forEach(e=>{const a=t.find(t=>this.itemFilter(t,e)),r=this.builders[e.name];a||!r&&!n||t.push(r?r(e.metadata):n(e.metadata))})}getTaskAction(t){if(0!==t.length)return t.map(t=>{const e=t.progress?` ${t.progress}%`:"";return this.taskMessageService.getRunningText(t)+"..."+e}).join(", ")}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}}},VXsX:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("LvDl"),r=n("8Y7J");class i{constructor(t,e,n){this.name=t,this.metadata=e,this.onTaskFinished=n}}let s=(()=>{class t{constructor(){this.subscriptions=[]}init(t){return t.subscribe(t=>{const e=t.executing_tasks,n=t.finished_tasks,a=[];for(const r of this.subscriptions){const t=this._getTask(r,n),i=this._getTask(r,e);null!==t&&null===i&&r.onTaskFinished(t),null!==i&&a.push(r),this.subscriptions=a}})}subscribe(t,e,n){this.subscriptions.push(new i(t,e,n))}_getTask(t,e){for(const n of e)if(n.name===t.name&&a.isEqual(n.metadata,t.metadata))return n;return null}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},VaNO:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Vclq:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n("wd/R"))},Vhfg:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("lJxs"),r=n("ej+x"),i=n("8Y7J"),s=n("iInd");let o=(()=>{class t{constructor(t,e){this.router=t,this.featureToggles=e}canActivate(t){return this.featureToggles.get().pipe(Object(a.a)(e=>!1!==e[t.routeConfig.path]||(this.router.navigate(["404"]),!1)))}canActivateChild(t){return this.canActivate(t.parent)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.m),i["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})()},ViD7:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="cs">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Zobraz./skrýt navigaci</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Přehled</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klastr</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Stroje</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitory</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Služby</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Nastavení</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSH mapa</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Moduly správy</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Záznamy událostí</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Fondy</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blok</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Obrazy</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Zrcadlení</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Souborové systémy</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Objektová brána</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Procesy služeb</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Uživatelé</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Nádoby</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Získávají se data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> pro\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Čekejte…\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Zobrazují se data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>z mezipaměti\n  pro \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Nedaří se načíst dat \n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> pro\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Zkontrolujte zdraví klastru.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Vyčistit oznámení</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Odebrat oznámení</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Trvání:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>Nejsou zde žádná oznámení.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Úlohy a oznámení</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Vyberte jazyk</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Načítání údajů panelu…</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Nahlédněte do\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>, kde naleznete jak\n  nastavit a zapnout funkci monitorování.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana přehled neexistuje. Podívejte se do\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> jak\n  přidat přehledy do Grafany.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Volič čas Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Resetovat nastavení</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Načíst znovu</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Odebrat uživatelsky určenou hodnotu nastavení. Namísto toho bude převzato a použito výchozí nastavení.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Nemůže být vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Nemůže být nižší než 1.</target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Zpět</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Data se nepodařilo načíst</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>vybráno</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>nalezeno</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>celkem</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Název</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Popis</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Podrobnější popis</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Výchozí</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Výchozí pro proces služby</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Hodnoty</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Nemůže být vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Nemůže být nižší než \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Uložit</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>prohlížeč CRUSH mapy</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Načítání…</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Název stroje</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Tuto kolonku je třeba vyplnit.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>Zvolený název stroje už je používán.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Opravdu chcete \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Opravdu chcete označené položky \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> ?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Opravdu chcete \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> označené \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ano, opravdu to chci.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Storno</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Zavřít</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Seznam strojů</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Celková výkonnost</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Zařízení</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Nenalezeny žádné položky</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Záznamy událostí v klastra</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Auditní záznamy událostí</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priorita:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Klíčové slovo:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Datum:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Volba data</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Časový rozsah:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Načítání nastavení…</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Toto nastavení se nepodařilo načíst.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Upravit modul správy</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Zadaná hodnota není platné UUID, např.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Je třeba, aby zadaná hodnota byla platnou IP adresou.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká! Je třeba, aby byla nižší nebo rovná \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Je třeba, aby byla vyšší než nebo rovná \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Je třeba, aby zadaná hodnota byla číslo.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Je třeba, aby zadaná hodnota byla číslo nebo desítkové.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Aktualizovat</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Stav</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>Identif. kastru</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>mapa monitorů změněna</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epocha</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kvórum spojení</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kvórum monitor</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>vyžadováno spojení</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>vyžadováno monitorů</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>V kvóru</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Není v kvóru</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Přidat</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Funkce</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Příznaky OSD pro celý klastr</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Odeslat</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Pokročilé…</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Pokročilé volby nastavení</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Priorita obnovení OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Priorita</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Přizpůsobit hodnoty priority</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Tuto kolonku je třeba vyplnit!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš vysoká, je třeba, aby nebyla vyšší než \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>Zadaná hodnota je příliš nízká! Je třeba, aby byla nižší než \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Je třeba, aby hodnota byla mezi 0 a 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Znovu vyvážit</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSD \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>kontrola\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, vybrat, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, vybrat, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Seznam OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Ticha</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Vyberte atribut vůči kterému hledat shodu --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Hodnota</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Použít regulární výraz</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Upravit</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Smazat</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Úprava ticha skončí platnost původního ticha a znovu ho vytvoří jako nové ticho</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Tvůrce</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Komentář</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Čas začátku</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>Pokud čas začátku leží v minulosti, bude namísto něj použit okamžik vytvoření</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Trvání</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>Čas konce</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Zdraví</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistiky</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Ohledně nastavení a zapnutí funkce správy NFS Ganesha nahlédněte do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klienti</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Přistupovat může libovolný klient</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Adresy</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Vyžadovaná kolonka</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Je třeba, aby obsahovalo jednu nebo více čárkou oddělovaných hodnot</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Například:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Typ přístupu</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Přidat klienty</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Žádný klastr k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Vyberte klastr --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Přidat proces služby</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Podpůrná vrstva úložiště</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Žádné fondy k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Vyberte podpůrnou vrstvu úložiště --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Uživatel objektové brány</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Žádní uživatelé k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Vyberte uživatele brány objektů --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>Identif. uživatele CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Žádní klienti k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Vyberte cephx klienta --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Název CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- Žádný souborový systém CephFS k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Vyberte CephFS souborový systém --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Štítek zabezpečení</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Zapnout štítek zabezpečení</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Popis umístění CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Je třeba, aby popis umístění začínal na „/“, za kterým následuje slovo</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Bude vytvořena nová složka</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Popis umístění</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Popis umístění může být pouze jediné „/“ nebo slovo</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Bude vytvořena nová nádoba</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFS protokol</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFS štítek</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternativní přístup pro \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> připojení (nemůže začínat na /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klienti nemohou připojovat podsložky (tj. pokud Tag = neco, klient nemůže připojit neco/podslozka).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Použitím různých voleb Štítku, může to stejné umístění být exportováno vícekrát.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>Pozice kterou tento \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export zabírá\n                v \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (je třeba, aby se neopakovalo).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>By using different Pseudo options, the same Path may be exported multiple times.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Je třeba, aby Pseudo začínalo na „/“ a a nemůže obsahovat nic z následujícího: &gt;, &lt;, |, &amp;, ( nebo ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Žádný typ přístupu k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Vyberte typ přístupu --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Žádné squash k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Vyberte jaký druh squashování identifikátor uživatele je prováděn --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Transportní protokol</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Původní heslo</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>Je třeba, aby původní a nové heslo nebyly stejné</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>Nové heslo</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Zopakování zadání nového hesla</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Kontrolní zadání nového hesla se neshoduje.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Vítejte v Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Je třeba vyplnit uživatelské jméno</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Je třeba vyplnit heslo</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Přihlásit</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Je nám líto, uživatel v Ceph neexistuje.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Vrátit se na \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Přihlašovací stránku\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. Budete odhlášeni od poskytovatele identity když se pokusíte znovu přihlásit.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Odepřeno</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Omlouváme se, ale nemáte oprávnění zobrazit to, po čem se  poohlížíte.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>Data obdržena v JSON formátu verze 2.x, což je v tuto chvíli nekompatibilní s přehledem.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>výsledek SMART testu samoposouzení celkového stavu</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Informace o zařízení</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Nastavení RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Odebrat hodnotu místnímu nastavení. Namísto ní bude použita hodnota nadřazeného nastavení.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Minimální hodnota je 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Seznam fondů</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Název může být tvořen pouze písmeny a číslicemi, dále ještě spojovníky a podtržítky.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Zvolený název pro profil mazacího kódu je už používán.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Zásuvný modul</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Shluky dat (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Je třeba, aby bylo 2 a více.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Shluky kódování (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Je třeba, aby bylo 1 a více.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Odhadování odolnosti (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Umístění (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Doména selhání crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalita crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Žádné</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Technika</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Velikostpaketu</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Kořen crush</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Třída crush zařízení</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>libovolné</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Složka</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Název…</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Zvolený název pro Ceph fond je už používán.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>Není možné vytvořit RBD fond s názvem „/“ v názvu.\n              Změňte název nebo \'rbd\' odeberte ze seznamu aplikací.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Typ fondul</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Vybrat typ fondu --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Je třeba alespoň jedné skupiny umístění!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Váš klastr nemůže obsloužit tolik skupin umístění. Přepočítejte potřebné množství skupin umístění.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Nápověda k výpočtu</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Replikovaná velikost</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Nejméně: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Nejvíce: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>Zadaná velikost je mimo rozsah. Platná hodnota je\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> až \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> .\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Příznaky</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC přebití</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplikace</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil mazacího kódu</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Žádný profil mazacího kódu --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Vyberte profil mazacího kódu --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Sada pravidel crush</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Vybrat crush pravidlo --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crush pravidlo</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush kroky</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Komprese</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Režim</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmus</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Žádný algoritmus komprese mazání --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Minimální velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>např. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Hodnota by měla být vyšší než nula</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Hodnota by měla být nižší než maximální velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Nejvyšší velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>např. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Hodnota by měla být vyšší než nejnižší velikost blobu</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Poměr</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Kompresní poměr</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Hodnota by měla být z rozmezí 0.0 až 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Kvóty</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Nejvýše bajtů</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Pro vypnutí této kvóty nevyplňujte nebo zadejte 0 (nulu).</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>Platná kvóta by měla být vyšší než 0 (nula).</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>např. 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>Hodnota by měla být vyšší nebo rovna 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Podrobnosti</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Podrobnosti o výkonnosti</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Podrobnosti o stupních mezipaměti</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Přesunout obraz do koše</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Platnost ochrany skončí v</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>NECHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Chybný formát data. Použijte „RRRR-MM-DD HH:mm:ss“.</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Platnost ochrany už skončila. Zvolte budoucí datum nebo nevyplňujte.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Přesunout obraz</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Brány</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Je třeba, aby bylo vyšší nebo rovno \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Je třeba, aby bylo nižší nebo rovno \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Přehled</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Cíle</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Uživatele</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména byla 8 až 64 znaků dlouhá a\n              mohu obsahovat pouze písmena a znaky „.“, „@“, „-“, „_“ a „:“.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Heslo</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla byla 12 až 16 znaků dlouhá\n              a mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Uživatel pro vzájemné ověření</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Heslo pro vzájemné ověření</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby heslo byla 12 až 16 znaků dlouhá a\n              mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Podívejte se do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  jak nastavit a zapnout funkci správy iSCSI cílů.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informace k dispozici:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI cíl není k dispozici</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>K dispozici pouze pro RBD obrazy se zapnutým \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Fond</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Datový fond</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Vytvořeno</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Velikost</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objekty</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Velikost objektu</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Poskytováno</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>neaplikovatelné</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Celkem poskytováno</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Proužkovací jednotka</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Počet proužkování</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Nadřazené</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Předpona názvu bloku</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Pořadí</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Zachycené stavy</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Obraz</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Toto nastavení přebije globální hodnotu</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Globální</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Toto je globální hodnota. Pro tento obraz nebyla u této volby nastavena žádná hodnota.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> od\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>„/“ a „@“ nejsou dovoleny.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Žádné rbd fondy k dispozici --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Vybrat fond --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Použít vyhrazený datový fond</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Datový fond</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Vyhrazený fond který uchovává objektová data RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Je třeba zvětšit.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Pokročilé</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Proužkování</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Jednotka proužku</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Vybrat jednotku proužku --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Tuto kolonku je třeba vyplnit, protože je definován počet proužků!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Jednotka proužku je vyšší než velikost objektu.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Počet proužků</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Tuto kolonku je třeba vyplnit, protože je definována jednotka proužku!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Je třeba, aby počet proužků byl větší než nula.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Chystáte se vrátit zpět</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vysypat koš</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Vše</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Fond:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Název fondu…</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Obnovit obraz</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Pro obnovení</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>zadejte nový název pro obraz a klikněte na</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nový název</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Platnost skončila v</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Chráněno do</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>Tento obraz je chráněn do\n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologie iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Měnit tyto parametry z jejich výchozích hodnot obvykle není potřeba.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Nastavení</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Potvrdit</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Pokročilá nastavení</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN cíle</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQN nemá správný formát.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>IQN má následující formu zápisu\n                \'iqn.$rok-$mesic.$adresaObracene:$definovanyNazev\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Například: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Další informace</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Tento cíl má změněná pokročilá nastavení.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portály</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Přidat portál</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>Je třeba alespoň \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> bran.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Tento obraz má změněná nastavení.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Přidat obraz</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL ověřování</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména měla délku 8 až 64 znaků a\n                obsahovala pouze písmena a případně ještě znaky „.“, „@“, „-“, „_“ nebo „:“.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 až 16 znaků\n                a obsahovala písmena a znaky „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciátory</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciátor</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN klienta</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Je třeba, aby se IQN iniciátoru neopakovalo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Je třeba, aby uživatelská jména měla délku 8 až 64 znaků a\n                        mohou obsahovat pouze písmena a znaky „.“, „@“, „-“, „_“ nebo „:“.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 až 16 znaků\n                        a mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Je třeba, aby hesla měla délku 12 znaků 16 a\n                        mohou obsahovat pouze písmena, „@“, „-“, „_“ nebo „/“.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Iniciátor spadá do skupiny. Obrazy budou nastaveny ve skupině.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Nepřidány žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Přidat iniciátor</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Skupiny</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Skupina</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Přidat skupinu</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Koš</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>problémy</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Synchronizuje se</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Připraveno</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Upravit režim zrcadlení fondu</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Pro úpravu režimu zrcadlení pro fond \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, vyberte ze seznamu nový režim a klikněte na \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Aktualizovat\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Před vypnutím zrcadlení je třeba odebrat klastry-protějšky.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  protějšek zrcadlení fondu\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Název klastru</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Název klastru není platný</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX identif.</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX identif. …</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX identif. není platný.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Adresy monitorů</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Čárkou oddělované adresy…</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Adresa monitoru není platná.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX klíč</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Klíč v base64 kódování…</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Je třeba, aby CephX klíč byl v kódování base64.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Výkonnostní čítače nejsou k dispozici</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Podívejte se do \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>dokumentace\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  jak nastavit a zapnout funkci správy brány objektů.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Seznam procesů služeb</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Výkonnostní čítače</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Načítání dat nádoby…</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Identif.</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Hodnota není platná.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Zvolený název už je používán.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Vlastník</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Vybrat uživatele --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Cíl umístění</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Vybrat cíl umístění --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Verzování</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Zapnuto</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>Identif.</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Typ rejstříku</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Pravidlo umístění</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Označovač</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Nejvyšší označovač</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Verze</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Hlavní verze</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Okamžik úpravy</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Skupinazóny</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Kvóta nádoby</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Nejvyšší velikost</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Neomezeno</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Uživatelské jméno</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Vybrat uživatelské jméno --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Automaticky vytvořit klíč</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Přístupový klíč</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Tajný klíč</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Celé jméno</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>E-mailová adresa</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Systém</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Nejvýše nádob</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Dílčí uživatelé</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Schopnosti</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Kvóta uživatele</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Zobrazit</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Klíče</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Typ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Vybrat typ --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Oprávnění</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Vybrat oprávnění --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Dílčí uživatel</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>Zvolený identifikátor dílčího uživatele už je používán.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>číst, zapisovat</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>plné</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Swift klíč</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Automaticky vytvořit tajemství</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Načítání údajů uživatele…</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Údaje uživatele se nepodařilo načíst.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>Zvolený identif. uživatele už je používán.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Toto není platná e-mailová adresa.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Zvolená e-mailová adresa už je používána.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Nejvýše nádob</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Vypnuto</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Uživatelsky určené</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3 klíč</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Nejsou zde žádní dílčí uživatelé.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Nejsou zde žádné klíče.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Nejsou zde žádné schopnosti.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Neomezená velikost</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Nejvyšší velikost</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Neomezené objekty</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Nejvýše objektů</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Je třeba, aby zadaná hodnota byla 0 a vyšší.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Popis…</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Oprávnění</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Role</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Potvrzení zadání hesla</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Zadání hesla se neshodují.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>E-mail</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Neplatný e-mail.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Chystáte se odebrat oprávnění „uživatel číst/aktualizovat“ svému vlastnímu účtu.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Pokud budete pokračovat, nebudete nadále schopní přidávat nebo nebo odebírat role žádnému z uživatelů.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Opravdu chcete pokračovat?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Nápověda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentace</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>Aplikační program. rozhraní</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>O aplikaci</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Nastavení přehledu</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Správa uživatelů</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Přihlášený uživatel</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Přihlášeni jako\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Změnit heslo</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Odhlásit</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributy (OSD mapa)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadata nejsou k dispozici</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadata</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Stav zařízení</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Výkonnostní čítač</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram není k dispozici: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Zápisy</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Čtení</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Stávající hodnoty</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Max</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Zdroj</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Úroveň</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Je možné aktualizovat za provozu (upravitelné)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Štítky</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Vyčíslit hodnoty</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Viz také</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Stav klastru</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Procesy služby správy</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Objektové brány</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Metadata servery</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSI brány</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>vst/výst. klienta</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Propustnost klienta</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Čtení/zápis klienta</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Propustnost zotavení</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Kontrola</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Výkonnost</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Holá kapacita</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Skupin umístění na OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Stav skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapacita</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>Další podrobnosti \n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> naleznete v \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>záznamech událostí\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Hodnocení</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>čítače výkonnosti MDS</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Složky</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Klienti (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Stávající</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Aktualizováno ověřování pro objevování</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Nejsou k dispozici žádné portály.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Nejsou k dispozici žádné obrazy.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Nejsou k dispozici žádné obrazy. Ověřte, že jste cíli přidali obraz.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Nejsou k dispozici žádné iniciátory. Ověřte, že jste cíli přidali iniciátor.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>cíl</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Cíl</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target>Počet relací</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Cíl má aktivní relace</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI cíl</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Stav</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target>Počet cílů</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bajtů čtení</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bajtů zápis</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operací/s čtení</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operací/s zápis</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O od</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problém</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Ukazatel postupu</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Upravit režim</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Přidat protějšek</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Upravit protějšek</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Smazat protějšek</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Vedoucí</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>Počet místních</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>Počet vzdálených</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>zrcadlit protějšek</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Klíč</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Hluboké zploštění</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Vrstvení</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Výhradní zámek</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa objektů (vyžaduje výhradní zámek)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Žurnálování (vyžaduje výhradní zámek)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Je třeba, aby nadřazený obraz podporoval vrstvy</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>CHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>NECHRÁNĚNO</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Vrácení zachyceného stavu RBD zpět</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Vrácení zpět</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Zachycený stav RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Smazáno v</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>identif.</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>typ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>stav</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>verze</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Stroj</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>kořen</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Procesy služeb v pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Hodnocení</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Proces služby</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivita</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Struktury složek</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>I-uzlů</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Využití</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Původ</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Aktualizováno</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Hodnotu je možné aktualizovat za chodu.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Procesy služeb / klienti nezískávají tuto hodnotu\n      z databáze nastavení monitoru. Není umožněno nastavit tuto volbu\n      prostřednictvím „ceph config set …\'. Tato volba by měla být nastavena\n      z příkazového řádku.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Volba se uplatní pouze při spouštění procesu služby.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Volba ovlivní pouze vytváření klastru.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Volba ovlivní pouze vytvoření procesu služby.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Aktualizována volba nastavení \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Služba</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Stávající hodnota</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Upravitelné</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>stroj</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Popis umístění zařízení</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>K dispozici</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Aktualizována volba pro modul „\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Zapnout</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Vypnout</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>Modul Zpráva je vždy zapnutý.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Opětovné připojování, čekejte…</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Veřejná adresa</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Otevřené relace</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Počet do</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD které byly dříve odznačeny nebudou označeny nazpět když spustí</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Počet ven</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD nebudou automaticky odznačeny po nastaveném intervalu</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Počet aktivních</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD není dovoleno spuštění</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Počet neaktivních</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Hlášení o selhání OSD jsou ignorovány, jako například že monitory OSD neoznačí jako nedostupné</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pozastavit</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pozastavit čtení a zápisy</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Žádná kontrola</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Kontrola je vypnutá</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Žádná hloubková kontrola</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Hloubková kontrola je vypnutá</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Žádné zasypávání</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Zasypávání skupin umístění je pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Žádné obnovení</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Obnovování skupin umístění je pozastaveno</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Bitové třídění</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Třídit podle bitů</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Vyčištěné složky zachycených stavů</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD mají převedené sady zachycených stavů</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Smazáno při zotavování</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Mazání provedená při obnovování namísto peeringu</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Nepřekročitelný limit záznamu událostí PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Zapne nepřekročitelný limit na délku záznamu událostí v pg</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Aktualizovány OSD příznaky</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>ven</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>dovnitř</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>nedostupné</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Značka</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD ztraceno</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>označeno jako ztracené</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Vyčistit</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>vyčištěno</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>zlikvidovat</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>zlikvidováno</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>smazat</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Priorita zotavování</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>skupiny umístění</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Přečteno bajtů</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Zapsáno bajtů</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operací/s čtení</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operací/s zápis</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Označit OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Označit \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Max Backfills</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Recovery Max Active</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Recovery Max Single Start</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Uspání zotavení</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Aktualizována rychlost zotavení OSD „\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Úloha</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Závažnost</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Zahájeno</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL adresa</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>ticho</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Název atributu</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regulární výraz</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Přidejte hostitele s Prometheus do nastavení přehledu a znovu načtete stránku</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Vytvořil(a)</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Končí</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Ticho</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Popis stavu</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Použito</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>K dispozici</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Čisté</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Pracující</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Varování</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Neznámé</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Zdravé</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Chybně umístěno</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degradováno</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Odnalezeno</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>repliky</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>aktivní</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>žádné souborové systémy</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktivní</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>v pohotovosti</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>neaplikovatelné</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>aktivní proces služby</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kvórum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Služba NFS Ganesha není nastavena.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFS uživatel</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Souborový systém CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(převzato z globálního nastavení)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>převzato z globálního nastavení</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Vyberte jaký druh squashování identifikátor uživatele je prováděn --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Nejsou k dispozici žádné procesy služeb.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC profil</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Režim mezipaměti</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min Evict Age</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min Flush Age</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Nejvýše bajtů cíle</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Nejvýše objektů cíle</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Nebyla přidána žádná aplikace</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Dosažen limit aplikací</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Fond může mít nejvýše čtyři definice aplikací.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Použitelné znaky „_a-zA-Z0-9“</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Nejvyšší délka je 128 znaků</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrovat nebo přidat aplikace</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Přidat aplikaci</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>fond</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil mazacího kódu</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Velikost repliky</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Nejnovější změna</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Mazáním kódovaný profil</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Sada crush pravidel</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Smazání fondu je vypnuto nastavením mon_allow_pool_delete configuration.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>nádoba</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Vytvořena nádoba objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>nádoby</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>schopnost</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>uživatel</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>dílčí uživatel</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 klíč</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Aktualizován uživatel objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Vytvořen uživatel objektové brány „\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>uživatelé</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift klíč</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>Vyskytla se chyba s kódem \n          <x id="INTERPOLATION" equiv-text="{{code}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Nezpracované</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Práh</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>Když se nezdařilo</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Nejhorší</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Rozsah</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Čtení</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Vytvořit</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Vytvořena role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Aktualizována role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Systémová role</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Smazána role „\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>Nejsou zde žádné role.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Vytvořen uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Aktualizovat uživatele</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Pokračovat</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Byli jste automaticky odhlášeni protože vaše role byly změněny.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Aktualizován uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Smazán uživatel „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Nepodařilo se smazat uživatele „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>Nyní jste přihlášení jako „\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>“.\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>heslo</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Aktualizované heslo uživatele"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Každý objekt je rozdělen v částech shluků dat, každé uložené na jiném OSD.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Počítat kódovací shluky pro každý objekt a ukládat je na různých OSD.\n      Počet kódovacích shluků je také počet OSD, které mohou vypadnou, aniž dojde ke ztrátě dat.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Zásuvný modul jerasure je nejobecnější a nejpřizpůsobivější,\n je také výchozí pro Ceph fondy kódované mazáním.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Přizpůsobivější technikou je reed_sol_van: postačí nastvit k\n          a m. Technika cauchy_good technique může být rychlejší, ale je třeba pečlivě nastavit velikost\n          paketu. Všechny z reed_sol_r6_op, liberation, blaum_roth, liber8tion jsou ekvivalenty RAID6\n          v tom smyslu, že je možné je nastavit pouze s m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Zásuvný modul isa obaluje knihovnu ISA. Funguje pouze na procesorech Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Zásuvný modul ISA přichází ve dvou Reed Solomon podobách.\n          Pokud je nastaveno reed_sol_van, je to Vandermonde, pokud je nastaveno Cauchy, je Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Počet paritních shluků, ze kterých každý obsahuje každý shluk dat ve svém\n          výpočetním rozsahu. Číslo je použito pro odhad odolnosti. Například, pokud c=2,\n          2 OSD mohou vypadnou aniž by byla ztracena data.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Název crush nádoby sloužící jako první krok CRUSH pravidla.\n Například krok vzít výchozí.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Zajistit, aby žádné dva shluky nebyly v nádobě nacházejícící se ve stejné\n      doméně selhání. Například, pokud doména selhání je hostitel, žádné dva shluky nebudou uloženy na stejném hostiteli\n      Je použito pro vytvoření kroku CRUSH pravidla jako krok chooseleaf hostitele.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Omezit umístění na zařízení určité třídy\n      (např., ssd nebo hdd), pomocí názvu crush třídy zařízení v  CRUSH mapě.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Nastavit složku ze které načítat zásuvný modul mazacího kódu.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Umožnit všechny operace</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Umožnit pouze operace které neupraví server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Neumožňuje operace čtení či zápisu, ale umožňuje ostatní</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Neumožňuje čtení, zápis nebo jinou operaci která upravuje atributy        souboru nebo obsah složky</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Neumožnit vůbec žádný přístup</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Vyberte prioritu --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Nízká</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Vysoká</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Chyba</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informace</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Úspěch</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Uplynulých 5 minut</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Uplynulých 15 minut</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Uplynulých 30 minut</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Uplynulá 1 hodina (výchozí)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Uplynulé 3 hodiny</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Uplynulých 6 hodin</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Uplynulých 12 hodin</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Uplynulých 24 hodin</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Včera</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Dnes</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Dnes doposud</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Včerejšek</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Uplynulé 2 dny</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Tento den minulý týden</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Předchozí týden</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Tento týden</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Tento týden doposud</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Uplynulých 7 dnů</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Předchozí měsíc</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Tento měsíc</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Tento měsíc doposud</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Uplynulých 30 dnů</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Uplynulých 90 dnů</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Uplynulých 6 měsíců</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>Uplynulý 1 rok</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Předchozí rok</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Tento rok</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Tento rok doposud</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Uplynulé 2 roky</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Uplynulých 5 let</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Nevybrány žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Aby položku bylo možné znovu vybrat, je třeba nejprve zrušit její výběr</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Dosažen limit výběru</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtrovat štítky</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Přidat odznak</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Nejsou k dispozici žádné položky.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Odebrat</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klonovat</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Kopírovat</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Hloubková kontrola</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Zlikvidovat</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Zploštit</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Označit</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Označit</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Označit ztracené</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Odznačit</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Ochránit</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Přejmenovat</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Obnovit</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Přesunout do koše</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Zrušit ochranu</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Změnit</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Znovuvytvořit</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Ukončit platnost</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Smazáno</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Přidáno</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Odebráno</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Upraveno</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Zrušeno</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Naklonováno</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Zkopírováno</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Zlikvidováno</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Zploštěno</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Označeno jako ztracené</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Chráněno</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Vyčištěno</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Přejmenováno</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Obnoveno</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Vzato zpět</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Zobrazeno</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Přesunout do koše</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Ochrana zrušena</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Znovu vytvořeno</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Platnost skončila</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ano</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Ne</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>žádné aktivní výstrahy</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>Jedna aktivní výstraha</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> aktivních výstrah\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Odpovídá jednomu pravidlu</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Odpovídá \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> pravidlům\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> s \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Kvalita služby</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Požadovaný limit vst./výstup. bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit vst/výstup. operací / s</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Požadovaný limit vst./výstup. operací za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limit BPS čtení</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Požadovaný limit čtení bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limit IOPS čtení</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Požadovaný limit operací čtení za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit BPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Požadovaný limit zápisu bajtů za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit IOPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Požadovaný limit operací čtení za sekundu.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPS dávka</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Požadovaný limit dávky bajtů vstup/výstupu.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPS dávka</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Požadovaný limit dávky vst./výstup. operací.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Dávka BPS čtení</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Požadovaný limit dávky bajtů čtení.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Dávka IOPS čtení</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Požadovaný limit dávky čtení bajtů.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Dávka BPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Požadovaný limit bajtů dávky zápisu.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Dávka IOPS zápisu</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Požadovaný limit dávky operace zápisu.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Nepodařilo se \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Vykonává se</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>vykonat</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Vykonáno</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>neznámý úkol</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Vytváří se</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>vytvořit</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Aktualizuje se</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>aktualizovat</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Maže se</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Přidávání</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>přidat</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Odebírání</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>odebrat</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD zachycený stav „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>režim zrcadlení pro fond „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>protějšek zrcadlení pro fond „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>všechny přehledy</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Název už je používán \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> obsahuje zachycené stavy.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Klonuje se</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klonovat</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Je třeba, aby zachycený stav \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> byl chráněný.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Kopíruje se</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>zkopírovat</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Zploštění</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>zploštit</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Název už je používán pro \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Není možné zrušit ochranu \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>, protože obsahuje podřízené obrazy.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> není možné smazat, protože je chráněné.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Bere se zpět</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>vzít zpět</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Přesouvá se</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>přesunout</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Přesunuto</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ do koše\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Obraz se nedaří najít.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Obnovuje se</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>obnovit</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ do „\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Název „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“ už je používán pro jiný obraz.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>obraz „\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Čistí se</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>vyčistit</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>všechny fondy</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>obrazy z \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Zrcadlení nelze vypnout protože obsahuje protějšek.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>stroj „\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>fond „\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>profil mazacího kódu „\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>cíl „\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>“\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},VpIT:function(t,e,n){var a=n("xDBR"),r=n("xs3f");(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:a?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},Vu81:function(t,e,n){var a=n("0GbY"),r=n("JBy8"),i=n("dBg+"),s=n("glrk");t.exports=a("Reflect","ownKeys")||function(t){var e=r.f(s(t)),n=i.f;return n?e.concat(n(t)):e}},WF9J:function(t,e,n){"use strict";n("TeQF"),n("QWBl"),n("4mDm"),n("zKZe"),n("07d7"),n("4l63"),n("PKPk"),n("ENF9"),n("3bBZ");var a=n("hKI/"),r=n.n(a),i=n("9/5/"),s=n.n(i),o=n("uyHG"),u=n.n(o),l=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,a){return t[0]===e&&(n=a,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),a=this.__entries__[n];return a&&a[1]},e.prototype.set=function(e,n){var a=t(this.__entries__,e);~a?this.__entries__[a][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,a=t(n,e);~a&&n.splice(a,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,a=this.__entries__;n<a.length;n++){var r=a[n];t.call(e,r[1],r[0])}},e}()}(),d="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,c="undefined"!=typeof global&&global.Math===Math?global:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),f="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(c):function(t){return setTimeout((function(){return t(Date.now())}),1e3/60)},h=["top","right","bottom","left","width","height","size","weight"],g="undefined"!=typeof MutationObserver,p=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,a=!1,r=0;function i(){n&&(n=!1,t()),a&&o()}function s(){f(i)}function o(){var t=Date.now();if(n){if(t-r<2)return;a=!0}else n=!0,a=!1,setTimeout(s,20);r=t}return o}(this.refresh.bind(this))}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},t.prototype.connect_=function(){d&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),g?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){d&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;h.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),b=function(t,e){for(var n=0,a=Object.keys(e);n<a.length;n++){var r=a[n];Object.defineProperty(t,r,{value:e[r],enumerable:!1,writable:!1,configurable:!0})}return t},m=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||c},y=T(0,0,0,0);function v(t){return parseFloat(t)||0}function x(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce((function(e,n){return e+v(t["border-"+n+"-width"])}),0)}var _="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof m(t).SVGGraphicsElement}:function(t){return t instanceof m(t).SVGElement&&"function"==typeof t.getBBox};function T(t,e,n,a){return{x:t,y:e,width:n,height:a}}var O=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=T(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t,e=(t=this.target,d?_(t)?function(t){var e=t.getBBox();return T(0,0,e.width,e.height)}(t):function(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return y;var a=m(t).getComputedStyle(t),r=function(t){for(var e={},n=0,a=["top","right","bottom","left"];n<a.length;n++){var r=a[n];e[r]=v(t["padding-"+r])}return e}(a),i=r.left+r.right,s=r.top+r.bottom,o=v(a.width),u=v(a.height);if("border-box"===a.boxSizing&&(Math.round(o+i)!==e&&(o-=x(a,"left","right")+i),Math.round(u+s)!==n&&(u-=x(a,"top","bottom")+s)),!function(t){return t===m(t).document.documentElement}(t)){var l=Math.round(o+i)-e,d=Math.round(u+s)-n;1!==Math.abs(l)&&(o-=l),1!==Math.abs(d)&&(u-=d)}return T(r.left,r.top,o,u)}(t):y);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),w=function(t,e){var n,a,r,i,s,o,u,l=(a=(n=e).x,r=n.y,i=n.width,s=n.height,o="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,u=Object.create(o.prototype),b(u,{x:a,y:r,width:i,height:s,top:r,right:a+i,bottom:s+r,left:a}),u);b(this,{target:t,contentRect:l})},S=function(){function t(t,e,n){if(this.activeObservations_=[],this.observations_=new l,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=n}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof m(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new O(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof m(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new w(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),I="undefined"!=typeof WeakMap?new WeakMap:new l,N=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=p.getInstance(),a=new S(e,n,this);I.set(this,a)};["observe","unobserve","disconnect"].forEach((function(t){N.prototype[t]=function(){var e;return(e=I.get(this))[t].apply(e,arguments)}}));var C=void 0!==c.ResizeObserver?c.ResizeObserver:N,R=n("AxL3"),A=n.n(R),k=(n("E9XD"),n("sMBO"),n("rB9j"),n("Rm1S"),n("UxlC"),null),E=null;function L(){if(null===k){if("undefined"==typeof document)return k=0;var t=document.body,e=document.createElement("div");e.classList.add("simplebar-hide-scrollbar"),t.appendChild(e);var n=e.getBoundingClientRect().right;t.removeChild(e),k=n}return k}function D(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window}function P(t){return t&&t.ownerDocument?t.ownerDocument:document}A.a&&window.addEventListener("resize",(function(){E!==window.devicePixelRatio&&(E=window.devicePixelRatio,k=null)}));var M=function(){function t(e,n){var a=this;this.onScroll=function(){var t=D(a.el);a.scrollXTicking||(t.requestAnimationFrame(a.scrollX),a.scrollXTicking=!0),a.scrollYTicking||(t.requestAnimationFrame(a.scrollY),a.scrollYTicking=!0)},this.scrollX=function(){a.axis.x.isOverflowing&&(a.showScrollbar("x"),a.positionScrollbar("x")),a.scrollXTicking=!1},this.scrollY=function(){a.axis.y.isOverflowing&&(a.showScrollbar("y"),a.positionScrollbar("y")),a.scrollYTicking=!1},this.onMouseEnter=function(){a.showScrollbar("x"),a.showScrollbar("y")},this.onMouseMove=function(t){a.mouseX=t.clientX,a.mouseY=t.clientY,(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseMoveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseMoveForAxis("y")},this.onMouseLeave=function(){a.onMouseMove.cancel(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseLeaveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseLeaveForAxis("y"),a.mouseX=-1,a.mouseY=-1},this.onWindowResize=function(){a.scrollbarWidth=a.getScrollbarWidth(),a.hideNativeScrollbar()},this.hideScrollbars=function(){a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.track.rect)||(a.axis.y.scrollbar.el.classList.remove(a.classNames.visible),a.axis.y.isVisible=!1),a.isWithinBounds(a.axis.x.track.rect)||(a.axis.x.scrollbar.el.classList.remove(a.classNames.visible),a.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,n;a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&(e=a.isWithinBounds(a.axis.x.track.rect)),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&(n=a.isWithinBounds(a.axis.y.track.rect)),(e||n)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&(a.axis.x.scrollbar.rect=a.axis.x.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.x.scrollbar.rect)?a.onDragStart(t,"x"):a.onTrackClick(t,"x")),n&&(a.axis.y.scrollbar.rect=a.axis.y.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.scrollbar.rect)?a.onDragStart(t,"y"):a.onTrackClick(t,"y"))))},this.drag=function(e){var n=a.axis[a.draggedAxis].track,r=n.rect[a.axis[a.draggedAxis].sizeAttr],i=a.axis[a.draggedAxis].scrollbar,s=a.contentWrapperEl[a.axis[a.draggedAxis].scrollSizeAttr],o=parseInt(a.elStyles[a.axis[a.draggedAxis].sizeAttr],10);e.preventDefault(),e.stopPropagation();var u=(("y"===a.draggedAxis?e.pageY:e.pageX)-n.rect[a.axis[a.draggedAxis].offsetAttr]-a.axis[a.draggedAxis].dragOffset)/(r-i.size)*(s-o);"x"===a.draggedAxis&&(u=a.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?u-(r+i.size):u,u=a.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-u:u),a.contentWrapperEl[a.axis[a.draggedAxis].scrollOffsetAttr]=u},this.onEndDrag=function(t){var e=P(a.el),n=D(a.el);t.preventDefault(),t.stopPropagation(),a.el.classList.remove(a.classNames.dragging),e.removeEventListener("mousemove",a.drag,!0),e.removeEventListener("mouseup",a.onEndDrag,!0),a.removePreventClickId=n.setTimeout((function(){e.removeEventListener("click",a.preventClick,!0),e.removeEventListener("dblclick",a.preventClick,!0),a.removePreventClickId=null}))},this.preventClick=function(t){t.preventDefault(),t.stopPropagation()},this.el=e,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,{},n),this.classNames=Object.assign({},t.defaultOptions.classNames,{},this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,t.instances.has(this.el)||(this.recalculate=r()(this.recalculate.bind(this),64),this.onMouseMove=r()(this.onMouseMove.bind(this),64),this.hideScrollbars=s()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=s()(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=u()(t.getRtlHelpers),this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var n=e.firstElementChild;document.body.appendChild(n);var a=n.firstElementChild;n.scrollLeft=0;var r=t.getOffset(n),i=t.getOffset(a);n.scrollLeft=999;var s=t.getOffset(a);return{isRtlScrollingInverted:r.left!==i.left&&i.left-s.left!=0,isRtlScrollbarInverted:r.left!==i.left}},t.getOffset=function(t){var e=t.getBoundingClientRect(),n=P(t),a=D(t);return{top:e.top+(a.pageYOffset||n.documentElement.scrollTop),left:e.left+(a.pageXOffset||n.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){t.instances.set(this.el,this),A.a&&(this.initDOM(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,(function(e){return e.classList.contains(t.classNames.wrapper)})).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this,e=D(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),e.addEventListener("resize",this.onWindowResize);var n=!1;this.resizeObserver=new(e.ResizeObserver||C)((function(){n&&t.recalculate()})),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),e.requestAnimationFrame((function(){n=!0})),this.mutationObserver=new e.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},e.recalculate=function(){var t=D(this.el);this.elStyles=t.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var e=this.contentEl.offsetWidth,n=this.heightAutoObserverEl.offsetHeight<=1,a=this.heightAutoObserverEl.offsetWidth<=1||e>0,r=this.contentWrapperEl.offsetWidth,i=this.elStyles.overflowX,s=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var o=this.contentEl.scrollHeight,u=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=n?"auto":"100%",this.placeholderEl.style.width=a?(e||u)+"px":"auto",this.placeholderEl.style.height=o+"px";var l=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=0!==e&&u>e,this.axis.y.isOverflowing=o>l,this.axis.x.isOverflowing="hidden"!==i&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==s&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var d=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&u>r-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&o>l-d,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){if(void 0===t&&(t="y"),!this.axis[t].isOverflowing)return 0;var e,n=this.axis[t].track.el[this.axis[t].offsetSizeAttr];return e=Math.max(~~(n/this.contentEl[this.axis[t].scrollSizeAttr]*n),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e},e.positionScrollbar=function(e){if(void 0===e&&(e="y"),this.axis[e].isOverflowing){var n=this.contentWrapperEl[this.axis[e].scrollSizeAttr],a=this.axis[e].track.el[this.axis[e].offsetSizeAttr],r=parseInt(this.elStyles[this.axis[e].sizeAttr],10),i=this.axis[e].scrollbar,s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=~~((s="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-s:s)/(n-r)*(a-i.size));o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o+(a-i.size):o,i.el.style.transform="x"===e?"translate3d("+o+"px, 0, 0)":"translate3d(0, "+o+"px, 0)"}},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,n=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),n.style.display=this.axis[t].isOverflowing?"block":"none"},e.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y"),this.axis[t].isVisible||(this.axis[t].scrollbar.el.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var n=P(this.el),a=D(this.el);this.axis[e].dragOffset=("y"===e?t.pageY:t.pageX)-this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),n.addEventListener("mousemove",this.drag,!0),n.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(n.addEventListener("click",this.preventClick,!0),n.addEventListener("dblclick",this.preventClick,!0)):(a.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},e.onTrackClick=function(t,e){var n=this;if(void 0===e&&(e="y"),this.options.clickOnTrack){var a=D(this.el);this.axis[e].scrollbar.rect=this.axis[e].scrollbar.el.getBoundingClientRect();var r=this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],i=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=("y"===e?this.mouseY-r:this.mouseX-r)<0?-1:1,u=-1===o?s-i:s+i;!function t(){var r,i;-1===o?s>u&&(n.contentWrapperEl.scrollTo(((r={})[n.axis[e].offsetAttr]=s-=40,r)),a.requestAnimationFrame(t)):s<u&&(n.contentWrapperEl.scrollTo(((i={})[n.axis[e].offsetAttr]=s+=40,i)),a.requestAnimationFrame(t))}()}},e.getContentElement=function(){return this.contentEl},e.getScrollElement=function(){return this.contentWrapperEl},e.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:L()}catch(t){return L()}},e.removeListeners=function(){var t=this,e=D(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onWindowResize),this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),t.instances.delete(this.el)},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},e.findChild=function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;return Array.prototype.filter.call(t.children,(function(t){return n.call(t,e)}))[0]},t}();M.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},M.instances=new WeakMap;var q=M,j=(n("FZtP"),null),F=null;function G(){if(null===j){if("undefined"==typeof document)return j=0;var t=document.body,e=document.createElement("div");e.classList.add("simplebar-hide-scrollbar"),t.appendChild(e);var n=e.getBoundingClientRect().right;t.removeChild(e),j=n}return j}A.a&&window.addEventListener("resize",(function(){F!==window.devicePixelRatio&&(F=window.devicePixelRatio,j=null)}));var V=function(t){return Array.prototype.reduce.call(t,(function(t,e){var n=e.name.match(/data-simplebar-(.+)/);if(n){var a=n[1].replace(/\W+(.)/g,(function(t,e){return e.toUpperCase()}));switch(e.value){case"true":t[a]=!0;break;case"false":t[a]=!1;break;case void 0:t[a]=!0;break;default:t[a]=e.value}}return t}),{})};function z(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window}function B(t){return t&&t.ownerDocument?t.ownerDocument:document}var Y=function(){function t(e,n){var a=this;this.onScroll=function(){var t=z(a.el);a.scrollXTicking||(t.requestAnimationFrame(a.scrollX),a.scrollXTicking=!0),a.scrollYTicking||(t.requestAnimationFrame(a.scrollY),a.scrollYTicking=!0)},this.scrollX=function(){a.axis.x.isOverflowing&&(a.showScrollbar("x"),a.positionScrollbar("x")),a.scrollXTicking=!1},this.scrollY=function(){a.axis.y.isOverflowing&&(a.showScrollbar("y"),a.positionScrollbar("y")),a.scrollYTicking=!1},this.onMouseEnter=function(){a.showScrollbar("x"),a.showScrollbar("y")},this.onMouseMove=function(t){a.mouseX=t.clientX,a.mouseY=t.clientY,(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseMoveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseMoveForAxis("y")},this.onMouseLeave=function(){a.onMouseMove.cancel(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&a.onMouseLeaveForAxis("x"),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&a.onMouseLeaveForAxis("y"),a.mouseX=-1,a.mouseY=-1},this.onWindowResize=function(){a.scrollbarWidth=a.getScrollbarWidth(),a.hideNativeScrollbar()},this.hideScrollbars=function(){a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.track.rect)||(a.axis.y.scrollbar.el.classList.remove(a.classNames.visible),a.axis.y.isVisible=!1),a.isWithinBounds(a.axis.x.track.rect)||(a.axis.x.scrollbar.el.classList.remove(a.classNames.visible),a.axis.x.isVisible=!1)},this.onPointerEvent=function(t){var e,n;a.axis.x.track.rect=a.axis.x.track.el.getBoundingClientRect(),a.axis.y.track.rect=a.axis.y.track.el.getBoundingClientRect(),(a.axis.x.isOverflowing||a.axis.x.forceVisible)&&(e=a.isWithinBounds(a.axis.x.track.rect)),(a.axis.y.isOverflowing||a.axis.y.forceVisible)&&(n=a.isWithinBounds(a.axis.y.track.rect)),(e||n)&&(t.preventDefault(),t.stopPropagation(),"mousedown"===t.type&&(e&&(a.axis.x.scrollbar.rect=a.axis.x.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.x.scrollbar.rect)?a.onDragStart(t,"x"):a.onTrackClick(t,"x")),n&&(a.axis.y.scrollbar.rect=a.axis.y.scrollbar.el.getBoundingClientRect(),a.isWithinBounds(a.axis.y.scrollbar.rect)?a.onDragStart(t,"y"):a.onTrackClick(t,"y"))))},this.drag=function(e){var n=a.axis[a.draggedAxis].track,r=n.rect[a.axis[a.draggedAxis].sizeAttr],i=a.axis[a.draggedAxis].scrollbar,s=a.contentWrapperEl[a.axis[a.draggedAxis].scrollSizeAttr],o=parseInt(a.elStyles[a.axis[a.draggedAxis].sizeAttr],10);e.preventDefault(),e.stopPropagation();var u=(("y"===a.draggedAxis?e.pageY:e.pageX)-n.rect[a.axis[a.draggedAxis].offsetAttr]-a.axis[a.draggedAxis].dragOffset)/(r-i.size)*(s-o);"x"===a.draggedAxis&&(u=a.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?u-(r+i.size):u,u=a.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-u:u),a.contentWrapperEl[a.axis[a.draggedAxis].scrollOffsetAttr]=u},this.onEndDrag=function(t){var e=B(a.el),n=z(a.el);t.preventDefault(),t.stopPropagation(),a.el.classList.remove(a.classNames.dragging),e.removeEventListener("mousemove",a.drag,!0),e.removeEventListener("mouseup",a.onEndDrag,!0),a.removePreventClickId=n.setTimeout((function(){e.removeEventListener("click",a.preventClick,!0),e.removeEventListener("dblclick",a.preventClick,!0),a.removePreventClickId=null}))},this.preventClick=function(t){t.preventDefault(),t.stopPropagation()},this.el=e,this.minScrollbarWidth=20,this.options=Object.assign({},t.defaultOptions,{},n),this.classNames=Object.assign({},t.defaultOptions.classNames,{},this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,t.instances.has(this.el)||(this.recalculate=r()(this.recalculate.bind(this),64),this.onMouseMove=r()(this.onMouseMove.bind(this),64),this.hideScrollbars=s()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=s()(this.onWindowResize.bind(this),64,{leading:!0}),t.getRtlHelpers=u()(t.getRtlHelpers),this.init())}t.getRtlHelpers=function(){var e=document.createElement("div");e.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var n=e.firstElementChild;document.body.appendChild(n);var a=n.firstElementChild;n.scrollLeft=0;var r=t.getOffset(n),i=t.getOffset(a);n.scrollLeft=999;var s=t.getOffset(a);return{isRtlScrollingInverted:r.left!==i.left&&i.left-s.left!=0,isRtlScrollbarInverted:r.left!==i.left}},t.getOffset=function(t){var e=t.getBoundingClientRect(),n=B(t),a=z(t);return{top:e.top+(a.pageYOffset||n.documentElement.scrollTop),left:e.left+(a.pageXOffset||n.documentElement.scrollLeft)}};var e=t.prototype;return e.init=function(){t.instances.set(this.el,this),A.a&&(this.initDOM(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},e.initDOM=function(){var t=this;if(Array.prototype.filter.call(this.el.children,(function(e){return e.classList.contains(t.classNames.wrapper)})).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},e.initListeners=function(){var t=this,e=z(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.addEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),e.addEventListener("resize",this.onWindowResize);var n=!1;this.resizeObserver=new(e.ResizeObserver||C)((function(){n&&t.recalculate()})),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),e.requestAnimationFrame((function(){n=!0})),this.mutationObserver=new e.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},e.recalculate=function(){var t=z(this.el);this.elStyles=t.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var e=this.contentEl.offsetWidth,n=this.heightAutoObserverEl.offsetHeight<=1,a=this.heightAutoObserverEl.offsetWidth<=1||e>0,r=this.contentWrapperEl.offsetWidth,i=this.elStyles.overflowX,s=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var o=this.contentEl.scrollHeight,u=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=n?"auto":"100%",this.placeholderEl.style.width=a?(e||u)+"px":"auto",this.placeholderEl.style.height=o+"px";var l=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=0!==e&&u>e,this.axis.y.isOverflowing=o>l,this.axis.x.isOverflowing="hidden"!==i&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==s&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var d=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&u>r-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&o>l-d,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},e.getScrollbarSize=function(t){if(void 0===t&&(t="y"),!this.axis[t].isOverflowing)return 0;var e,n=this.axis[t].track.el[this.axis[t].offsetSizeAttr];return e=Math.max(~~(n/this.contentEl[this.axis[t].scrollSizeAttr]*n),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(e=Math.min(e,this.options.scrollbarMaxSize)),e},e.positionScrollbar=function(e){if(void 0===e&&(e="y"),this.axis[e].isOverflowing){var n=this.contentWrapperEl[this.axis[e].scrollSizeAttr],a=this.axis[e].track.el[this.axis[e].offsetSizeAttr],r=parseInt(this.elStyles[this.axis[e].sizeAttr],10),i=this.axis[e].scrollbar,s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=~~((s="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollingInverted?-s:s)/(n-r)*(a-i.size));o="x"===e&&this.isRtl&&t.getRtlHelpers().isRtlScrollbarInverted?o+(a-i.size):o,i.el.style.transform="x"===e?"translate3d("+o+"px, 0, 0)":"translate3d(0, "+o+"px, 0)"}},e.toggleTrackVisibility=function(t){void 0===t&&(t="y");var e=this.axis[t].track.el,n=this.axis[t].scrollbar.el;this.axis[t].isOverflowing||this.axis[t].forceVisible?(e.style.visibility="visible",this.contentWrapperEl.style[this.axis[t].overflowAttr]="scroll"):(e.style.visibility="hidden",this.contentWrapperEl.style[this.axis[t].overflowAttr]="hidden"),n.style.display=this.axis[t].isOverflowing?"block":"none"},e.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},e.onMouseMoveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.rect=this.axis[t].track.el.getBoundingClientRect(),this.axis[t].scrollbar.rect=this.axis[t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[t].scrollbar.rect)?this.axis[t].scrollbar.el.classList.add(this.classNames.hover):this.axis[t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[t].track.rect)?(this.showScrollbar(t),this.axis[t].track.el.classList.add(this.classNames.hover)):this.axis[t].track.el.classList.remove(this.classNames.hover)},e.onMouseLeaveForAxis=function(t){void 0===t&&(t="y"),this.axis[t].track.el.classList.remove(this.classNames.hover),this.axis[t].scrollbar.el.classList.remove(this.classNames.hover)},e.showScrollbar=function(t){void 0===t&&(t="y"),this.axis[t].isVisible||(this.axis[t].scrollbar.el.classList.add(this.classNames.visible),this.axis[t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},e.onDragStart=function(t,e){void 0===e&&(e="y");var n=B(this.el),a=z(this.el);this.axis[e].dragOffset=("y"===e?t.pageY:t.pageX)-this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],this.draggedAxis=e,this.el.classList.add(this.classNames.dragging),n.addEventListener("mousemove",this.drag,!0),n.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(n.addEventListener("click",this.preventClick,!0),n.addEventListener("dblclick",this.preventClick,!0)):(a.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},e.onTrackClick=function(t,e){var n=this;if(void 0===e&&(e="y"),this.options.clickOnTrack){var a=z(this.el);this.axis[e].scrollbar.rect=this.axis[e].scrollbar.el.getBoundingClientRect();var r=this.axis[e].scrollbar.rect[this.axis[e].offsetAttr],i=parseInt(this.elStyles[this.axis[e].sizeAttr],10),s=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],o=("y"===e?this.mouseY-r:this.mouseX-r)<0?-1:1,u=-1===o?s-i:s+i;!function t(){var r,i;-1===o?s>u&&(n.contentWrapperEl.scrollTo(((r={})[n.axis[e].offsetAttr]=s-=40,r)),a.requestAnimationFrame(t)):s<u&&(n.contentWrapperEl.scrollTo(((i={})[n.axis[e].offsetAttr]=s+=40,i)),a.requestAnimationFrame(t))}()}},e.getContentElement=function(){return this.contentEl},e.getScrollElement=function(){return this.contentWrapperEl},e.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:G()}catch(t){return G()}},e.removeListeners=function(){var t=this,e=z(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,!0)})),["touchstart","touchend","touchmove"].forEach((function(e){t.el.removeEventListener(e,t.onPointerEvent,{capture:!0,passive:!0})})),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onWindowResize),this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},e.unMount=function(){this.removeListeners(),t.instances.delete(this.el)},e.isWithinBounds=function(t){return this.mouseX>=t.left&&this.mouseX<=t.left+t.width&&this.mouseY>=t.top&&this.mouseY<=t.top+t.height},e.findChild=function(t,e){var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;return Array.prototype.filter.call(t.children,(function(t){return n.call(t,e)}))[0]},t}();Y.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},Y.instances=new WeakMap,Y.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll('[data-simplebar]:not([data-simplebar="init"])'),(function(t){Y.instances.has(t)||new Y(t,V(t.attributes))}))},Y.removeObserver=function(){this.globalObserver.disconnect()},Y.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(Y.handleMutations),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},Y.handleMutations=function(t){t.forEach((function(t){Array.prototype.forEach.call(t.addedNodes,(function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?!Y.instances.has(t)&&new Y(t,V(t.attributes)):Array.prototype.forEach.call(t.querySelectorAll('[data-simplebar]:not([data-simplebar="init"])'),(function(t){!Y.instances.has(t)&&new Y(t,V(t.attributes))})))})),Array.prototype.forEach.call(t.removedNodes,(function(t){1===t.nodeType&&(t.hasAttribute('[data-simplebar="init"]')?Y.instances.has(t)&&Y.instances.get(t).unMount():Array.prototype.forEach.call(t.querySelectorAll('[data-simplebar="init"]'),(function(t){Y.instances.has(t)&&Y.instances.get(t).unMount()})))}))}))},Y.getOptions=V,A.a&&Y.initHtmlApi(),n.d(e,"a",(function(){return H})),n.d(e,"b",(function(){return U}));class H{constructor(t){this.elRef=t}ngOnInit(){}ngAfterViewInit(){this.SimpleBar=new q(this.elRef.nativeElement,this.options||{})}ngOnDestroy(){this.SimpleBar.unMount(),this.SimpleBar=null}}class U{}},WFqU:function(t,e){var n="object"==typeof global&&global&&global.Object===Object&&global;t.exports=n},WJkJ:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},WKiH:function(t,e,n){var a=n("HYAF"),r="["+n("WJkJ")+"]",i=RegExp("^"+r+r+"*"),s=RegExp(r+r+"*$"),o=function(t){return function(e){var n=String(a(e));return 1&t&&(n=n.replace(i,"")),2&t&&(n=n.replace(s,"")),n}};t.exports={start:o(1),end:o(2),trim:o(3)}},WYrj:function(t,e,n){!function(t){"use strict";var e=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(t){return"މފ"===t},meridiem:function(t,e,n){return t<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n("wd/R"))},WaXT:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("2vnA"),i=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.a.apply(void 0,t)}),r.a),s=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.c.apply(void 0,t)}),r.c),o=Object.assign((function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r.d.apply(void 0,t)}),r.d),u=n("MP8s");n.d(e,"a",(function(){return c}));var l=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},d=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},c=function(){function t(){this._dispose=[]}return Object.defineProperty(t.prototype,"nodes",{get:function(){return this._nodes},set:function(t){this.setNodes(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"marginTop",{get:function(){var t=this.viewportNodes&&this.viewportNodes.length&&this.viewportNodes[0];return(t&&t.parent?t.position-t.parent.position-t.parent.getSelfHeight():0)+"px"},enumerable:!0,configurable:!0}),t.prototype.setNodes=function(t){this._nodes=t},t.prototype.ngOnInit=function(){var t=this;this.virtualScroll=this.treeModel.virtualScroll,this._dispose=[Object(r.e)((function(){return t.virtualScroll.getViewportNodes(t.nodes).map((function(t){return t.index}))}),(function(e){t.viewportNodes=e.map((function(e){return t.nodes[e]}))}),{compareStructural:!0,fireImmediately:!0}),Object(r.e)((function(){return t.nodes}),(function(e){t.viewportNodes=t.virtualScroll.getViewportNodes(e)}))]},t.prototype.ngOnDestroy=function(){this._dispose.forEach((function(t){return t()}))},t.prototype.trackNode=function(t,e){return e.id},l([Object(a.Input)(),d("design:type",Object),d("design:paramtypes",[Object])],t.prototype,"nodes",null),l([Object(a.Input)(),d("design:type",u.a)],t.prototype,"treeModel",void 0),l([o,d("design:type",Object)],t.prototype,"_nodes",void 0),l([Object(a.Input)(),d("design:type",Object)],t.prototype,"templates",void 0),l([o,d("design:type",Array)],t.prototype,"viewportNodes",void 0),l([s,d("design:type",String),d("design:paramtypes",[])],t.prototype,"marginTop",null),l([i,d("design:type",Function),d("design:paramtypes",[Object]),d("design:returntype",void 0)],t.prototype,"setNodes",null),l([Object(a.Component)({selector:"tree-node-collection",encapsulation:a.ViewEncapsulation.None,template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div [style.margin-top]="marginTop">\n        <tree-node\n          *ngFor="let node of viewportNodes; let i = index; trackBy: trackNode"\n          [node]="node"\n          [index]="i"\n          [templates]="templates"\n        >\n        </tree-node>\n      </div>\n    </ng-container>\n  '})],t)}()},WiuZ:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("978R"),s=n("z/SZ"),o=n("2uy1"),u=n("s7LF"),l=n("+gVj"),d=n("KOzp");n("wnGv"),n("GiVz"),n.d(e,"a",(function(){return c})),n.d(e,"b",(function(){return w}));var c=a["ɵcrt"]({encapsulation:0,styles:[[".select-menu-item[_ngcontent-%COMP%]{display:block;cursor:pointer;border-bottom:1px solid rgba(0,0,0,.09);font-size:12px}.select-menu-item[_ngcontent-%COMP%]:hover{background-color:#f5f5f5}.select-menu-item-icon[_ngcontent-%COMP%]{float:left;padding:.5em;width:3em}.select-menu-item-content[_ngcontent-%COMP%]{padding:.5em}"]],data:{}});function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback text-center"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.messages.customValidations[e.parent.context.$implicit])}))}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,f)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.form.showError("filter",a["ɵnov"](e.parent,2))&&n.filter.hasError(e.context.$implicit))}),null)}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,1)],(function(t,e){var n=t(e,3,0,e.component.icons.check);t(e,2,0,n)}),null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"small",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),a["ɵted"](3,null,[" ","  "]))],null,(function(t,e){t(e,3,0,e.parent.context.$implicit.description)}))}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,11,"div",[["class","select-menu-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.triggerSelection(t.context.$implicit)&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{"help-block disabled":0}),(t()(),a["ɵeld"](4,0,null,null,3,"div",[["class","select-menu-item-icon"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,["   "])),(t()(),a["ɵeld"](8,0,null,null,3,"div",[["class","select-menu-item-content"]],null,null,null,null,null)),(t()(),a["ɵted"](9,null,[" "," "])),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](11,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=t(e,3,0,!(n.data.length!==n.selectionLimit&&e.context.$implicit.enabled||e.context.$implicit.selected));t(e,2,0,"select-menu-item",a),t(e,6,0,e.context.$implicit.selected),t(e,11,0,e.context.$implicit.description)}),(function(t,e){t(e,9,0,e.context.$implicit.name)}))}function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"div",[["class","select-menu-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.addCustomOption()&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","select-menu-item-icon"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](4,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](5,1),(t()(),a["ɵted"](-1,null,["   "])),(t()(),a["ɵeld"](7,0,null,null,1,"div",[["class","select-menu-item-content"]],null,null,null,null,null)),(t()(),a["ɵted"](8,null,[" "," '","' "]))],(function(t,e){var n=t(e,5,0,e.component.icons.tag);t(e,4,0,n)}),(function(t,e){var n=e.component;t(e,8,0,n.messages.add,n.filter.value)}))}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,2,"span",[["class","form-text text-muted text-center text-warning"]],null,null,null,null,null)),a["ɵdid"](1,212992,null,0,i.c,[a.ViewContainerRef,s.a,i.a,a.ElementRef,a.Renderer2,o.a],{tooltip:[0,"tooltip"]},null),(t()(),a["ɵted"](2,null,[" "," "])),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.messages.selectionLimit.tooltip)}),(function(t,e){t(e,2,0,e.component.messages.selectionLimit.text)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","is-invalid"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.data.length===n.selectionLimit)}),null)}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,15,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,2).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,2).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,5).onSubmit()&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,u.G,[],null,null),a["ɵdid"](2,540672,[["formDir",4]],0,u.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,u.d,null,[u.l]),a["ɵdid"](4,16384,null,0,u.s,[[4,u.d]],null,null),a["ɵdid"](5,16384,null,0,l.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](6,0,null,null,9,"div",[],null,null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,6,"input",[["class","form-control text-center"],["formControlName","filter"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0,i=t.component;return"input"===e&&(r=!1!==a["ɵnov"](t,8)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,8).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,8)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,8)._compositionEnd(n.target.value)&&r),"keyup"===e&&(r=!1!==(13==n.keyCode?i.selectOption():i.updateFilter())&&r),r}),null,null)),a["ɵdid"](8,16384,null,0,u.e,[a.Renderer2,a.ElementRef,[2,u.b]],null,null),a["ɵprd"](1024,null,u.p,(function(t){return[t]}),[u.e]),a["ɵdid"](10,671744,null,0,u.j,[[3,u.d],[8,null],[8,null],[6,u.p],[2,u.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,u.q,null,[u.j]),a["ɵdid"](12,16384,null,0,u.r,[[4,u.q]],null,null),a["ɵdid"](13,16384,null,0,l.h,[[3,u.d],l.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](15,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,b)),a["ɵdid"](17,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](19,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](21,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.form),t(e,5,0,n.form),t(e,10,0,"filter"),t(e,13,0,"filter"),t(e,15,0,n.Object.keys(n.messages.customValidations)),t(e,17,0,n.filteredOptions),t(e,19,0,n.isCreatable()),t(e,21,0,n.data.length===n.selectionLimit)}),(function(t,e){var n=e.component;t(e,0,0,a["ɵnov"](e,4).ngClassUntouched,a["ɵnov"](e,4).ngClassTouched,a["ɵnov"](e,4).ngClassPristine,a["ɵnov"](e,4).ngClassDirty,a["ɵnov"](e,4).ngClassValid,a["ɵnov"](e,4).ngClassInvalid,a["ɵnov"](e,4).ngClassPending),t(e,7,0,n.messages.filter,a["ɵnov"](e,12).ngClassUntouched,a["ɵnov"](e,12).ngClassTouched,a["ɵnov"](e,12).ngClassPristine,a["ɵnov"](e,12).ngClassDirty,a["ɵnov"](e,12).ngClassValid,a["ɵnov"](e,12).ngClassInvalid,a["ɵnov"](e,12).ngClassPending,a["ɵnov"](e,13).validClass,a["ɵnov"](e,13).invalidClass)}))}function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,4,"a",[["class","select-menu-edit float-left"],["container","body"],["outsideClick","true"],["placement","bottom"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵdid"](3,212992,null,0,d.c,[d.a,a.ElementRef,a.Renderer2,a.ViewContainerRef,s.a,o.a],{popover:[0,"popover"],placement:[1,"placement"],outsideClick:[2,"outsideClick"],container:[3,"container"]},null),a["ɵncd"](null,0),(t()(),a["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0,"select-menu-edit float-left",e.component.elemClass),t(e,3,0,a["ɵnov"](e.parent,0),"bottom","true","body")}),null)}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted float-left"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" ","\n"]))],null,(function(t,e){t(e,1,0,e.component.messages.empty)}))}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted  float-left"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" ","\n"]))],null,(function(t,e){t(e,1,0,e.component.messages.noOptions)}))}function w(t){return a["ɵvid"](0,[(t()(),a["ɵand"](0,[["popTemplate",2]],null,0,null,x)),(t()(),a["ɵand"](16777216,null,null,1,null,_)),a["ɵdid"](2,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](4,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,O)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.customBadges||n.options.length>0),t(e,4,0,0===n.data.length&&!(!n.customBadges&&0===n.options.length)),t(e,6,0,!n.customBadges&&0===n.options.length)}),null)}},WwFo:function(t,e,n){var a=n("juv8"),r=n("7GkX");t.exports=function(t,e){return t&&a(e,r(e),t)}},WxRl:function(t,e,n){!function(t){"use strict";var e="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(t,e,n,a){var r=t;switch(n){case"s":return a||e?"néhány másodperc":"néhány másodperce";case"ss":return r+(a||e)?" másodperc":" másodperce";case"m":return"egy"+(a||e?" perc":" perce");case"mm":return r+(a||e?" perc":" perce");case"h":return"egy"+(a||e?" óra":" órája");case"hh":return r+(a||e?" óra":" órája");case"d":return"egy"+(a||e?" nap":" napja");case"dd":return r+(a||e?" nap":" napja");case"M":return"egy"+(a||e?" hónap":" hónapja");case"MM":return r+(a||e?" hónap":" hónapja");case"y":return"egy"+(a||e?" év":" éve");case"yy":return r+(a||e?" év":" éve")}return""}function a(t){return(t?"":"[múlt] ")+"["+e[this.day()]+"] LT[-kor]"}t.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return a.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return a.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"X+05":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a={toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",initialized:"initialized",updateData:"updateData",moveNode:"moveNode",copyNode:"copyNode",event:"event",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",stateChange:"stateChange"}},X709:function(t,e,n){!function(t){"use strict";t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"e":1===e?"a":2===e?"a":"e")},week:{dow:1,doy:4}})}(n("wd/R"))},XDbj:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("sVev"),r=n("7o/Q");function i(t=u){return e=>e.lift(new s(t))}class s{constructor(t){this.errorFactory=t}call(t,e){return e.subscribe(new o(t,this.errorFactory))}}class o extends r.a{constructor(t,e){super(t),this.errorFactory=e,this.hasValue=!1}_next(t){this.hasValue=!0,this.destination.next(t)}_complete(){if(this.hasValue)return this.destination.complete();{let e;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)}}}function u(){return new a.a}},XDpg:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n("wd/R"))},XFyV:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");class r{constructor(){this.icons=a.a}}},XGnz:function(t,e,n){var a=n("CH3K"),r=n("BiGR");t.exports=function t(e,n,i,s,o){var u=-1,l=e.length;for(i||(i=r),o||(o=[]);++u<l;){var d=e[u];n>0&&i(d)?n>1?t(d,n-1,i,s,o):a(o,d):s||(o[o.length]=d)}return o}},XGwC:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},XKAG:function(t,e,n){var a=n("ut/Y"),r=n("MMmD"),i=n("7GkX");t.exports=function(t){return function(e,n,s){var o=Object(e);if(!r(e)){var u=a(n,3);e=i(e),n=function(t){return u(o[t],t,o)}}var l=t(e,n,s);return l>-1?o[u?e[l]:l]:void 0}}},XLvN:function(t,e,n){!function(t){"use strict";t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n("wd/R"))},XNiG:function(t,e,n){"use strict";n.d(e,"b",(function(){return l})),n.d(e,"a",(function(){return d}));var a=n("HDdC"),r=n("7o/Q"),i=n("quSY"),s=n("9ppp"),o=n("Ylt2"),u=n("2QA8");class l extends r.a{constructor(t){super(t),this.destination=t}}let d=(()=>{class t extends a.a{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[u.a](){return new l(this)}lift(t){const e=new c(this,this);return e.operator=t,e}next(t){if(this.closed)throw new s.a;if(!this.isStopped){const{observers:e}=this,n=e.length,a=e.slice();for(let r=0;r<n;r++)a[r].next(t)}}error(t){if(this.closed)throw new s.a;this.hasError=!0,this.thrownError=t,this.isStopped=!0;const{observers:e}=this,n=e.length,a=e.slice();for(let r=0;r<n;r++)a[r].error(t);this.observers.length=0}complete(){if(this.closed)throw new s.a;this.isStopped=!0;const{observers:t}=this,e=t.length,n=t.slice();for(let a=0;a<e;a++)n[a].complete();this.observers.length=0}unsubscribe(){this.isStopped=!0,this.closed=!0,this.observers=null}_trySubscribe(t){if(this.closed)throw new s.a;return super._trySubscribe(t)}_subscribe(t){if(this.closed)throw new s.a;return this.hasError?(t.error(this.thrownError),i.a.EMPTY):this.isStopped?(t.complete(),i.a.EMPTY):(this.observers.push(t),new o.a(this,t))}asObservable(){const t=new a.a;return t.source=this,t}}return t.create=(t,e)=>new c(t,e),t})();class c extends d{constructor(t,e){super(),this.destination=t,this.source=e}next(t){const{destination:e}=this;e&&e.next&&e.next(t)}error(t){const{destination:e}=this;e&&e.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:e}=this;return e?this.source.subscribe(t):i.a.EMPTY}}},XYm9:function(t,e,n){var a=n("+K+b");t.exports=function(t,e){var n=e?a(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},Xg1U:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("8Y7J"),r=n("978R"),i=(n("SVse"),a["ɵcrt"]({encapsulation:0,styles:[".tooltip[_nghost-%COMP%] {\n      display: block;\n      pointer-events: none;\n    }\n    .bs3.tooltip.top[_nghost-%COMP%] > .arrow[_ngcontent-%COMP%] {\n      margin-left: -2px;\n    }\n    .bs3.tooltip.bottom[_nghost-%COMP%] {\n      margin-top: 0px;\n    }\n    .bs3.bs-tooltip-left[_nghost-%COMP%], .bs3.bs-tooltip-right[_nghost-%COMP%]{\n      margin: 0px;\n    }\n    .bs3.bs-tooltip-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs3.bs-tooltip-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      margin: .3rem 0;\n    }"],data:{}}));function s(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,0,"div",[["class","tooltip-arrow arrow"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","tooltip-inner"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-tooltip-container",[["role","tooltip"]],[[8,"className",0],[2,"show",null],[2,"bs3",null],[1,"id",0]],null,null,s,i)),a["ɵdid"](1,4243456,null,0,r.b,[r.a],null,null)],null,(function(t,e){t(e,0,0,"tooltip in tooltip-"+a["ɵnov"](e,1).placement+" bs-tooltip-"+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).placement+" "+a["ɵnov"](e,1).containerClass,!a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).isBs3,a["ɵnov"](e,1).id)}))}var u=a["ɵccf"]("bs-tooltip-container",r.b,o,{},{},["*"])},Xi7e:function(t,e,n){var a=n("KMkd"),r=n("adU4"),i=n("tMB7"),s=n("+6XX"),o=n("Z8oC");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},XoHu:function(t,e,n){"use strict";function a(t){return null!==t&&"object"==typeof t}n.d(e,"a",(function(){return a}))},Y7HM:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("DH7j");function r(t){return!Object(a.a)(t)&&t-parseFloat(t)+1>=0}},YESw:function(t,e,n){var a=n("Cwc5")(Object,"create");t.exports=a},YNrV:function(t,e,n){"use strict";var a=n("g6v/"),r=n("0Dky"),i=n("33Wh"),s=n("dBg+"),o=n("0eef"),u=n("ewvW"),l=n("RK3t"),d=Object.assign,c=Object.defineProperty;t.exports=!d||r((function(){if(a&&1!==d({b:1},d(c({},"a",{enumerable:!0,get:function(){c(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=d({},t)[n]||"abcdefghijklmnopqrst"!=i(d({},e)).join("")}))?function(t,e){for(var n=u(t),r=arguments.length,d=1,c=s.f,f=o.f;r>d;)for(var h,g=l(arguments[d++]),p=c?i(g).concat(c(g)):i(g),b=p.length,m=0;b>m;)h=p[m++],a&&!f.call(g,h)||(n[h]=g[h]);return n}:d},YO3V:function(t,e,n){var a=n("NykK"),r=n("LcsW"),i=n("ExA7"),s=Function.prototype.toString,o=Object.prototype.hasOwnProperty,u=s.call(Object);t.exports=function(t){if(!i(t)||"[object Object]"!=a(t))return!1;var e=r(t);if(null===e)return!0;var n=o.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==u}},YRex:function(t,e,n){!function(t){"use strict";t.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(t,e){return 12===t&&(t=0),"يېرىم كېچە"===e||"سەھەر"===e||"چۈشتىن بۇرۇن"===e?t:"چۈشتىن كېيىن"===e||"كەچ"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var a=100*t+e;return a<600?"يېرىم كېچە":a<900?"سەھەر":a<1130?"چۈشتىن بۇرۇن":a<1230?"چۈش":a<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"-كۈنى";case"w":case"W":return t+"-ھەپتە";default:return t}},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n("wd/R"))},YcCt:function(t,e,n){"use strict";function a(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,n,r){n=n||"=";var i={};if("string"!=typeof t||0===t.length)return i;var s=/\+/g;t=t.split(e=e||"&");var o=1e3;r&&"number"==typeof r.maxKeys&&(o=r.maxKeys);var u=t.length;o>0&&u>o&&(u=o);for(var l=0;l<u;++l){var d,c,f,h,g=t[l].replace(s,"%20"),p=g.indexOf(n);p>=0?(d=g.substr(0,p),c=g.substr(p+1)):(d=g,c=""),f=decodeURIComponent(d),h=decodeURIComponent(c),a(i,f)?Array.isArray(i[f])?i[f].push(h):i[f]=[i[f],h]:i[f]=h}return i}},Ylt2:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("quSY");class r extends a.a{constructor(t,e){super(),this.subject=t,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,e=t.observers;if(this.subject=null,!e||0===e.length||t.isStopped||t.closed)return;const n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},YuTi:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},YzqF:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(){this._queue=[],this._pending=!1}return t.prototype.isLocked=function(){return this._pending},t.prototype.acquire=function(){var t=this,e=new Promise((function(e){return t._queue.push(e)}));return this._pending||this._dispatchNext(),e},t.prototype.runExclusive=function(t){return this.acquire().then((function(e){var n;try{n=t()}catch(a){throw e(),a}return Promise.resolve(n).then((function(t){return e(),t}),(function(t){throw e(),t}))}))},t.prototype._dispatchNext=function(){this._queue.length>0?(this._pending=!0,this._queue.shift()(this._dispatchNext.bind(this))):this._pending=!1},t}();e.default=a},Z0cm:function(t,e){t.exports=Array.isArray},Z21x:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("sne2");class a{constructor(t,e){this.location=t,this.actionLabels=e,this.name=this.actionLabels.CANCEL,this.back=()=>this.location.back()}}},Z4QM:function(t,e,n){!function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n("wd/R"))},Z8oC:function(t,e,n){var a=n("y1pI");t.exports=function(t,e){var n=this.__data__,r=a(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}},ZAMP:function(t,e,n){!function(t){"use strict";t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},ZCgT:function(t,e,n){var a=n("tLB3");t.exports=function(t){return t?(t=a(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},ZCpW:function(t,e,n){var a=n("lm/5"),r=n("O7RO"),i=n("IOzZ");t.exports=function(t){var e=r(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||a(n,t,e)}}},ZDA6:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("IheW"),i=n("pL04");let s=(()=>{class t{constructor(t){this.http=t}list(){return this.http.get("ui-api/scope")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.c))},token:t,providedIn:i.a}),t})()},ZEkX:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return u})),n("Mxhz");var a=n("0+/T"),r=(n("sne2"),n("x38r")),i=n("oxzT"),s=n("mtw6"),o=n("vCyI");n("a0VL"),n("nSDx"),n("aexS"),n("9nlD");const u=new(n("EgGo").a)("user-management/users");class l{constructor(t,e,n,a,r,s,u,l,d){this.userService=t,this.emptyPipe=e,this.modalService=n,this.notificationService=a,this.authStorageService=r,this.i18n=s,this.urlBuilder=u,this.cdDatePipe=l,this.actionLabels=d,this.selection=new o.a,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:i.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:i.a.edit,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().username),name:this.actionLabels.EDIT},{permission:"delete",icon:i.a.destroy,click:()=>this.deleteUserModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Username"),prop:"username",flexGrow:1},{name:this.i18n("Name"),prop:"name",flexGrow:1,pipe:this.emptyPipe},{name:this.i18n("Email"),prop:"email",flexGrow:1,pipe:this.emptyPipe},{name:this.i18n("Roles"),prop:"roles",flexGrow:1,cellTemplate:this.userRolesTpl},{name:this.i18n("Enabled"),prop:"enabled",flexGrow:1,cellTransformation:r.a.checkIcon},{name:this.i18n("Password expiration date"),prop:"pwdExpirationDate",flexGrow:1,pipe:this.cdDatePipe}]}getUsers(){this.userService.list().subscribe(t=>{t.forEach(t=>{t.pwdExpirationDate&&t.pwdExpirationDate>0&&(t.pwdExpirationDate=1e3*t.pwdExpirationDate)}),this.users=t})}updateSelection(t){this.selection=t}deleteUser(t){this.userService.delete(t).subscribe(()=>{this.getUsers(),this.modalRef.hide(),this.notificationService.show(s.a.success,this.i18n('Deleted user "{{username}}"',{username:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}deleteUserModal(){const t=this.authStorageService.getUsername(),e=this.selection.first().username;t!==e?this.modalRef=this.modalService.show(a.a,{initialState:{itemDescription:"User",itemNames:[e],submitAction:()=>this.deleteUser(e)}}):this.notificationService.show(s.a.error,this.i18n('Failed to delete user "{{username}}"',{username:e}),this.i18n('You are currently logged in as "{{username}}".',{username:e}))}}},ZUHj:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("51Dv"),r=n("SeVD"),i=n("HDdC");function s(t,e,n,s,o=new a.a(t,n,s)){if(!o.closed)return e instanceof i.a?e.subscribe(o):Object(r.a)(e)(o)}},ZUd8:function(t,e,n){var a=n("ppGB"),r=n("HYAF"),i=function(t){return function(e,n){var i,s,o=String(r(e)),u=a(n),l=o.length;return u<0||u>=l?t?"":void 0:(i=o.charCodeAt(u))<55296||i>56319||u+1===l||(s=o.charCodeAt(u+1))<56320||s>57343?t?o.charAt(u):i:t?o.slice(u,u+2):s-56320+(i-55296<<10)+65536}};t.exports={codeAt:i(!1),charAt:i(!0)}},ZWtO:function(t,e,n){var a=n("4uTw"),r=n("9Nap");t.exports=function(t,e){for(var n=0,i=(e=a(e,t)).length;null!=t&&n<i;)t=t[r(e[n++])];return n&&n==i?t:void 0}},Zduo:function(t,e,n){!function(t){"use strict";t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n("wd/R"))},ZfDv:function(t,e,n){var a=n("hh1v"),r=n("6LWA"),i=n("tiKp")("species");t.exports=function(t,e){var n;return r(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!r(n.prototype)?a(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},ZhuC:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",a.TemplateRef)],t.prototype,"template",void 0),i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({encapsulation:a.ViewEncapsulation.None,selector:"tree-loading-component",template:'\n    <span *ngIf="!template">loading...</span>\n    <ng-container\n      [ngTemplateOutlet]="template"\n      [ngTemplateOutletContext]="{ $implicit: node }">\n    </ng-container>\n  '})],t)}()},ZirO:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a;)if(!e(t[n],n,t))return!1;return!0}},a0VL:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.datePipe=t}transform(t){return null===t||""===t?"":this.datePipe.transform(t,"shortDate")+" "+this.datePipe.transform(t,"mediumTime")}}},a278:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("QC43"),i=n("XFyV"),s=n("DqMs"),o=n("/NlG"),u=n("GiVz"),l=n("i4WA"),d=n("6qls"),c=n("tz6c"),f=n("s7LF"),h=n("SVse");n("insk"),n("cUpR"),n("20UP"),n.d(e,"a",(function(){return g})),n.d(e,"b",(function(){return x}));var g=a["ɵcrt"]({encapsulation:0,styles:[[".grafana[_ngcontent-%COMP%]{width:100%;height:600px;z-index:0}.grafana_one[_ngcontent-%COMP%]{height:400px}.grafana_two[_ngcontent-%COMP%]{height:750px}.grafana_three[_ngcontent-%COMP%]{height:900px}.timepicker[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.dropdown-menu[_ngcontent-%COMP%]{top:20px;right:20px;left:auto}"]],data:{}});function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,r.b,r.a)),a["ɵdid"](1,49152,null,0,i.a,[],null,null),(t()(),a["ɵted"](-1,0,["Loading panel data..."]))],null,null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Please consult the "])),(t()(),a["ɵeld"](3,0,null,0,1,"cd-doc",[["section","grafana"]],null,null,null,l.b,l.a)),a["ɵdid"](4,114688,null,0,d.a,[c.a,u.a],{section:[0,"section"]},null),(t()(),a["ɵted"](-1,0,[" on how to configure and enable the monitoring functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"grafana")}),null)}function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Grafana Dashboard doesn't exist. Please refer to "])),(t()(),a["ɵeld"](3,0,null,0,1,"cd-doc",[["section","grafana"]],null,null,null,l.b,l.a)),a["ɵdid"](4,114688,null,0,d.a,[c.a,u.a],{section:[0,"section"]},null),(t()(),a["ɵted"](-1,0,[" on how to add dashboards to Grafana."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"grafana")}),null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,f.v,[a.ElementRef,a.Renderer2,[2,f.A]],{ngValue:[0,"ngValue"]},null),a["ɵdid"](2,147456,null,0,f.F,[a.ElementRef,a.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),a["ɵted"](3,null,[""," "]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,24,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,17,"div",[["class","row"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,16,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),a["ɵeld"](3,0,null,null,15,"div",[["class","form-inline timepicker"]],null,null,null,null,null)),(t()(),a["ɵeld"](4,0,null,null,1,"label",[["class","ml-1 my-1 col-form-label"],["for","timepicker"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Grafana Time Picker"])),(t()(),a["ɵeld"](6,0,null,null,7,"select",[["class","custom-select my-1 mx-3"],["id","timepicker"],["name","timepicker"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0,i=t.component;return"change"===e&&(r=!1!==a["ɵnov"](t,7).onChange(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,7).onTouched()&&r),"ngModelChange"===e&&(r=!1!==(i.time=n)&&r),"ngModelChange"===e&&(r=!1!==i.onTimepickerChange(n)&&r),r}),null,null)),a["ɵdid"](7,16384,null,0,f.A,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,f.p,(function(t){return[t]}),[f.A]),a["ɵdid"](9,671744,null,0,f.u,[[8,null],[8,null],[8,null],[6,f.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),a["ɵprd"](2048,null,f.q,null,[f.u]),a["ɵdid"](11,16384,null,0,f.r,[[4,f.q]],null,null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](13,278528,null,0,h.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](14,0,null,null,4,"button",[["class","btn btn-light my-1"],["title","Reset Settings"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.reset()&&a),a}),null,null)),(t()(),a["ɵeld"](15,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,h["ɵNgClassImpl"],h["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](17,278528,null,0,h.NgClass,[h["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](18,1),(t()(),a["ɵeld"](19,0,null,null,5,"div",[["class","row"]],null,null,null,null,null)),(t()(),a["ɵeld"](20,0,null,null,4,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),a["ɵeld"](21,0,null,null,3,"div",[["class","grafana-container"]],null,null,null,null,null)),(t()(),a["ɵeld"](22,0,[["iframe",1]],null,2,"iframe",[["class","grafana"],["frameborder","0"],["id","iframe"],["scrolling","no"]],[[8,"src",5]],null,null,null,null)),a["ɵprd"](512,null,h["ɵNgClassImpl"],h["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](24,278528,null,0,h.NgClass,[h["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null)],(function(t,e){var n=e.component;t(e,9,0,"timepicker",n.time),t(e,13,0,n.grafanaTimes);var a=t(e,18,0,n.icons.undo);t(e,17,0,a),t(e,24,0,"grafana",n.panelStyle)}),(function(t,e){var n=e.component;t(e,6,0,a["ɵnov"](e,11).ngClassUntouched,a["ɵnov"](e,11).ngClassTouched,a["ɵnov"](e,11).ngClassPristine,a["ɵnov"](e,11).ngClassDirty,a["ɵnov"](e,11).ngClassValid,a["ɵnov"](e,11).ngClassInvalid,a["ɵnov"](e,11).ngClassPending),t(e,22,0,n.grafanaSrc)}))}function x(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](1,16384,null,0,h.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,b)),a["ɵdid"](3,16384,null,0,h.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](5,16384,null,0,h.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,v)),a["ɵdid"](7,16384,null,0,h.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.loading&&n.grafanaExist),t(e,3,0,!n.grafanaExist),t(e,5,0,!n.dashboardExist),t(e,7,0,n.grafanaExist&&n.dashboardExist)}),null)}},a40w:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("EEJc"),i=n("ajRT"),s=n("s7LF"),o=n("+gVj"),u=n("SVse"),l=n("gp3X"),d=n("sb0X"),c=n("KVJa"),f=n("Z21x"),h=n("sne2"),g=n("OLbh"),p=n("LqlI");n.d(e,"a",(function(){return _}));var b=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function m(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.description)}))}function v(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,22,"cd-modal",[],null,[[null,"hide"]],(function(t,e,n){var a=!0;return"hide"===e&&(a=!1!==t.component.cancel()&&a),a}),r.c,r.b)),a["ɵdid"](1,49152,null,0,i.a,[],null,{hide:"hide"}),(t()(),a["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](3,null,["",""])),(t()(),a["ɵeld"](4,0,null,1,18,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,17,"form",[["name","confirmationForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,7).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,7).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,10).onSubmit()&&r),r}),null,null)),a["ɵdid"](6,16384,null,0,s.G,[],null,null),a["ɵdid"](7,540672,[["formDir",4]],0,s.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,s.d,null,[s.l]),a["ɵdid"](9,16384,null,0,s.s,[[4,s.d]],null,null),a["ɵdid"](10,16384,null,0,o.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](11,0,null,null,4,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,m)),a["ɵdid"](13,540672,null,0,u.NgTemplateOutlet,[a.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,y)),a["ɵdid"](15,16384,null,0,u.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](16,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](17,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](18,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0,r=t.component;return"submitAction"===e&&(a=!1!==r.onSubmit(r.confirmationForm.value)&&a),a}),l.b,l.a)),a["ɵdid"](19,114688,null,0,d.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵted"](20,0,[" "," "])),(t()(),a["ɵeld"](21,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,c.b,c.a)),a["ɵdid"](22,49152,null,0,f.a,[u.Location,h.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,7,0,n.confirmationForm),t(e,10,0,n.confirmationForm),t(e,13,0,n.bodyContext,n.bodyTpl),t(e,15,0,n.description),t(e,19,0,n.confirmationForm),t(e,22,0,"Cancel",n.boundCancel)}),(function(t,e){var n=e.component;t(e,3,0,n.titleText),t(e,5,0,a["ɵnov"](e,9).ngClassUntouched,a["ɵnov"](e,9).ngClassTouched,a["ɵnov"](e,9).ngClassPristine,a["ɵnov"](e,9).ngClassDirty,a["ɵnov"](e,9).ngClassValid,a["ɵnov"](e,9).ngClassInvalid,a["ɵnov"](e,9).ngClassPending),t(e,20,0,n.buttonText)}))}function x(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-confirmation-modal",[],null,null,null,v,b)),a["ɵdid"](1,245760,null,0,g.a,[p.a,p.b],null,null)],(function(t,e){t(e,1,0)}),null)}var _=a["ɵccf"]("cd-confirmation-modal",g.a,x,{},{},[])},a96k:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n,a=!0){this.selected=t,this.name=e,this.description=n,this.enabled=a}}},aHM3:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("8Y7J"),n("s7LF");class a{static forRoot(){return{ngModule:a,providers:[]}}}},aIdf:function(t,e,n){!function(t){"use strict";function e(t,e,n){return t+" "+function(t,e){return 2===e?function(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}(t):t}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}t.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:function(t){switch(function t(e){return e>9?t(e%10):e}(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(t){return t+(1===t?"añ":"vet")},week:{dow:1,doy:4}})}(n("wd/R"))},aIsn:function(t,e,n){!function(t){"use strict";t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},aQkU:function(t,e,n){!function(t){"use strict";t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n("wd/R"))},aXbf:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("LvDl"),r=n("8Y7J");let i=(()=>{class t{constructor(){}format_number(t,e,n,r=1){if(a.isString(t)&&(t=Number(t)),!a.isNumber(t))return"-";let i=t<1?0:Math.floor(Math.log(t)/Math.log(e));i=i>=n.length?n.length-1:i;let s=a.round(t/Math.pow(e,i),r).toString();return""===s?"-":(""!==n[i]&&(s=`${s} ${n[i]}`),s)}toBytes(t,e=null){const n=["b","k","m","g","t","p","e","z","y"],r=RegExp("^(\\d+(.\\d+)?) ?(["+n.join("")+"]?(b|ib|B/s)?)?$","i").exec(t);if(null===r)return e;let i=parseFloat(r[1]);return a.isString(r[3])&&(i*=Math.pow(1024,n.indexOf(r[3].toLowerCase()[0]))),Math.round(i)}toMilliseconds(t){const e=/^\s*(\d+)\s*(ms)?\s*$/i.exec(t);return null!==e?+e[1]:0}toIops(t){const e=/^\s*(\d+)\s*(IOPS)?\s*$/i.exec(t);return null!==e?+e[1]:0}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},adU4:function(t,e,n){var a=n("y1pI"),r=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=a(e,t);return!(n<0||(n==e.length-1?e.pop():r.call(e,n,1),--this.size,0))}},aexS:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("2Vo4"),r=n("jKX/"),i=n("8Y7J");let s=(()=>{class t{constructor(){this.isPwdDisplayedSource=new a.a(!1),this.isPwdDisplayed$=this.isPwdDisplayedSource.asObservable()}set(t,e,n={},a=!1,i=null,s=!1){localStorage.setItem("dashboard_username",t),localStorage.setItem("access_token",e),localStorage.setItem("dashboard_permissions",JSON.stringify(new r.a(n))),localStorage.setItem("user_pwd_expiration_date",String(i)),localStorage.setItem("user_pwd_update_required",String(s)),localStorage.setItem("sso",String(a))}remove(){localStorage.removeItem("access_token"),localStorage.removeItem("dashboard_username"),localStorage.removeItem("user_pwd_expiration_data"),localStorage.removeItem("user_pwd_update_required")}getToken(){return localStorage.getItem("access_token")}isLoggedIn(){return null!==localStorage.getItem("dashboard_username")}getUsername(){return localStorage.getItem("dashboard_username")}getPermissions(){return JSON.parse(localStorage.getItem("dashboard_permissions")||JSON.stringify(new r.a({})))}getPwdExpirationDate(){return Number(localStorage.getItem("user_pwd_expiration_date"))}getPwdUpdateRequired(){return"true"===localStorage.getItem("user_pwd_update_required")}isSSO(){return"true"===localStorage.getItem("sso")}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})()},afO8:function(t,e,n){var a,r,i,s=n("f5p1"),o=n("2oRo"),u=n("hh1v"),l=n("kRJp"),d=n("UTVS"),c=n("93I0"),f=n("0BK2");if(s){var h=new(0,o.WeakMap),g=h.get,p=h.has,b=h.set;a=function(t,e){return b.call(h,t,e),e},r=function(t){return g.call(h,t)||{}},i=function(t){return p.call(h,t)}}else{var m=c("state");f[m]=!0,a=function(t,e){return l(t,m,e),e},r=function(t){return d(t,m)?t[m]:{}},i=function(t){return d(t,m)}}t.exports={set:a,get:r,has:i,enforce:function(t){return i(t)?r(t):a(t,{})},getterFor:function(t){return function(e){var n;if(!u(e)||(n=r(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},afOK:function(t,e,n){t.exports=n("pZt1")},ajRT:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("8Y7J");class r{constructor(){this.hide=new a.EventEmitter}close(){this.modalRef&&this.modalRef.hide(),this.hide.emit()}}},atuK:function(t,e,n){"use strict";n.d(e,"a",(function(){return v})),n.d(e,"b",(function(){return E})),n.d(e,"d",(function(){return H})),n.d(e,"c",(function(){return rt}));var a=n("8Y7J"),r=n("ienR"),i=n("SVse"),s=(n("s7LF"),n("2uy1")),o=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,u)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,d)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function h(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,f)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function b(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,c)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,h)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,p)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function m(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,b)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-datepicker-container",[["aria-label","calendar"],["class","bottom"],["role","dialog"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),m,o)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.b,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var v=a["ɵccf"]("bs-datepicker-container",r.b,y,{},{},[]),x=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function _(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function T(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,_)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function O(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function w(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,O)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,S)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function N(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,T)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,w)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,N)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,C)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,R)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-datepicker-inline-container",[],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),A,x)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.e,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var E=a["ɵccf"]("bs-datepicker-inline-container",r.e,k,{},{},[]),L=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,D)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,M)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function j(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function F(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,j)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function G(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function V(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,P)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,q)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,F)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,G)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,V)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function B(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,z)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function Y(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-daterangepicker-inline-container",[],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),B,L)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.k,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var H=a["ɵccf"]("bs-daterangepicker-inline-container",r.k,Y,{},{},[]),U=a["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"datepickerAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function W(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-days-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onHoverWeek"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.dayHoverHandler(n)&&a),"onHoverWeek"===e&&(a=!1!==r.weekHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.daySelectHandler(n)&&a),a}),It,xt)),a["ɵdid"](1,49152,null,0,r.B,[r.a],{calendar:[0,"calendar"],options:[1,"options"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover",onHoverWeek:"onHoverWeek"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,e.context.$implicit,a["ɵunv"](e,1,1,a["ɵnov"](e,2).transform(n.options)))}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,3).transform(r.daysCalendar)))?null:n.length)>1)}))}function K(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,W)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.daysCalendar)))}),null)}function $(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-month-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.monthHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.monthSelectHandler(n)&&a),a}),At,Nt)),a["ɵdid"](1,49152,null,0,r.C,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function Z(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,$)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.monthsCalendar)))}),null)}function J(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"bs-years-calendar-view",[],[[2,"bs-datepicker-multiple",null]],[[null,"onNavigate"],[null,"onViewMode"],[null,"onHover"],[null,"onSelect"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.setViewMode(n)&&a),"onHover"===e&&(a=!1!==r.yearHoverHandler(n)&&a),"onSelect"===e&&(a=!1!==r.yearSelectHandler(n)&&a),a}),Mt,Lt)),a["ɵdid"](1,49152,null,0,r.E,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode",onSelect:"onSelect",onHover:"onHover"}),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){t(e,1,0,e.context.$implicit)}),(function(t,e){var n,r=e.component;t(e,0,0,(null==(n=a["ɵunv"](e,0,0,a["ɵnov"](e,2).transform(r.daysCalendar)))?null:n.length)>1)}))}function Q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"div",[["class","bs-media-container"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,2,null,J)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,2,0,a["ɵunv"](e,2,0,a["ɵnov"](e,3).transform(n.yearsCalendar)))}),null)}function X(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-buttons"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-success"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Apply"])),(t()(),a["ɵeld"](3,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Cancel"]))],null,null)}function tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","bs-datepicker-custom-range"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"bs-custom-date-view",[],null,null,null,gt,ct)),a["ɵdid"](2,49152,null,0,r.y,[],{ranges:[0,"ranges"]},null)],(function(t,e){t(e,2,0,e.component._customRangesFish)}),null)}function et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"div",[["class","bs-datepicker"]],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵeld"](3,0,null,null,11,"div",[["class","bs-datepicker-container"]],[[24,"@datepickerAnimation",0]],[[null,"@datepickerAnimation.done"]],(function(t,e,n){var a=!0;return"@datepickerAnimation.done"===e&&(a=!1!==t.component.positionServiceEnable()&&a),a}),null,null)),(t()(),a["ɵeld"](4,0,null,null,8,"div",[["class","bs-calendar-container"],["role","application"]],null,null,null,null,null)),a["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef]),(t()(),a["ɵand"](16777216,null,null,1,null,K)),a["ɵdid"](8,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Z)),a["ɵdid"](10,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Q)),a["ɵdid"](12,278528,null,0,i.NgSwitchCase,[a.ViewContainerRef,a.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,X)),a["ɵdid"](14,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,tt)),a["ɵdid"](16,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"bs-datepicker",n.containerClass),t(e,5,0,a["ɵunv"](e,5,0,a["ɵnov"](e,6).transform(n.viewMode))),t(e,8,0,"day"),t(e,10,0,"month"),t(e,12,0,"year"),t(e,14,0,!1),t(e,16,0,!1)}),(function(t,e){t(e,3,0,e.component.animationState)}))}function nt(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,2,null,et)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpid"](131072,i.AsyncPipe,[a.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,1,0,a["ɵunv"](e,1,0,a["ɵnov"](e,2).transform(n.viewMode)))}),null)}function at(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"bs-daterangepicker-container",[["aria-label","calendar"],["class","bottom"],["role","dialog"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t,3)._stopPropagation(n)&&r),r}),nt,U)),a["ɵprd"](512,null,r.t,r.t,[]),a["ɵprd"](512,null,r.u,r.u,[r.v,r.l]),a["ɵdid"](3,245760,null,0,r.i,[a.Renderer2,r.a,r.t,a.ElementRef,r.v,r.u,s.a],null,null)],(function(t,e){t(e,3,0)}),null)}var rt=a["ɵccf"]("bs-daterangepicker-container",r.i,at,{},{},[]),it=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function st(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-current-date",[["title","hey there"]],null,null,null,dt,lt)),a["ɵdid"](1,49152,null,0,r.x,[],{title:[0,"title"]},null)],(function(t,e){t(e,1,0,"hey there")}),null)}function ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-timepicker",[],null,null,null,Et,kt)),a["ɵdid"](1,49152,null,0,r.D,[],null,null)],null,null)}function ut(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,st)),a["ɵdid"](1,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](2,0,null,null,1,"div",[["class","bs-datepicker-head"]],null,null,null,null,null)),a["ɵncd"](null,0),(t()(),a["ɵeld"](4,0,null,null,1,"div",[["class","bs-datepicker-body"]],null,null,null,null,null)),a["ɵncd"](null,1),(t()(),a["ɵand"](16777216,null,null,1,null,ot)),a["ɵdid"](7,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,!1),t(e,7,0,!1)}),null)}var lt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["class","current-timedate"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.component.title)}))}var ct=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function ft(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"button",[["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.$implicit.label)}))}function ht(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"button",[["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Custom Range"]))],null,null)}function gt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,4,"div",[["class","bs-datepicker-predefined-btns"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,ft)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,ht)),a["ɵdid"](4,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.ranges),t(e,4,0,n.isCustomRangeShown)}),null)}var pt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function bt(t){return a["ɵvid"](2,[(t()(),a["ɵted"](0,null,["",""]))],null,(function(t,e){t(e,0,0,e.component.day.label)}))}var mt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function yt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"button",[["class","current"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.view("month")&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.component.calendar.monthTitle)}))}function vt(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,2,"button",[["class","previous"],["type","button"]],[[8,"disabled",0],[4,"visibility",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.navTo(!0)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["‹"])),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵand"](16777216,null,null,1,null,yt)),a["ɵdid"](5,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵeld"](7,0,null,null,2,"button",[["class","current"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.view("year")&&a),a}),null,null)),(t()(),a["ɵeld"](8,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](9,null,["",""])),(t()(),a["ɵted"](-1,null,[" ​ "])),(t()(),a["ɵeld"](11,0,null,null,2,"button",[["class","next"],["type","button"]],[[8,"disabled",0],[4,"visibility",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.navTo(!1)&&a),a}),null,null)),(t()(),a["ɵeld"](12,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["›"]))],(function(t,e){t(e,5,0,e.component.calendar.monthTitle)}),(function(t,e){var n=e.component;t(e,0,0,n.calendar.disableLeftArrow,n.calendar.hideLeftArrow?"hidden":"visible"),t(e,9,0,n.calendar.yearTitle),t(e,11,0,n.calendar.disableRightArrow,n.calendar.hideRightArrow?"hidden":"visible")}))}var xt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function _t(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,0,"th",[],null,null,null,null,null))],null,null)}function Tt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"th",[["aria-label","weekday"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[""," "]))],null,(function(t,e){t(e,1,0,e.component.calendar.weekdays[e.context.index])}))}function Ot(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["class","week"]],[[2,"active-week",null]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],null,[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectWeek(t.parent.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.weekHoverHandler(t.parent.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.weekHoverHandler(t.parent.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){var n=e.component;t(e,0,0,n.isWeekHovered),t(e,2,0,n.calendar.weekNumbers[e.parent.context.index])}))}function wt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"td",[["role","gridcell"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,2,"span",[["bsDatepickerDayDecorator",""]],[[2,"disabled",null],[2,"is-highlighted",null],[2,"is-other-month",null],[2,"is-active-other-month",null],[2,"in-range",null],[2,"select-start",null],[2,"select-end",null],[2,"selected",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectDay(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverDay(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverDay(t.context.$implicit,!1)&&a),a}),bt,pt)),a["ɵdid"](2,114688,null,0,r.z,[r.a,a.ElementRef,a.Renderer2],{day:[0,"day"]},null),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,1,0,a["ɵnov"](e,2).day.isDisabled,a["ɵnov"](e,2).day.isHovered,a["ɵnov"](e,2).day.isOtherMonth,a["ɵnov"](e,2).day.isOtherMonthHovered,a["ɵnov"](e,2).day.isInRange,a["ɵnov"](e,2).day.isSelectionStart,a["ɵnov"](e,2).day.isSelectionEnd,a["ɵnov"](e,2).day.isSelected),t(e,3,0,e.context.$implicit.label)}))}function St(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ot)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,wt)),a["ɵdid"](4,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.options.showWeekNumbers),t(e,4,0,e.context.$implicit.days)}),null)}function It(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,13,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,9,"table",[["class","days weeks"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,5,"thead",[],null,null,null,null,null)),(t()(),a["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,_t)),a["ɵdid"](8,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,Tt)),a["ɵdid"](10,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](11,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,St)),a["ɵdid"](13,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,8,0,n.options.showWeekNumbers),t(e,10,0,n.calendar.weekdays),t(e,13,0,n.calendar.weeks)}),null)}var Nt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Ct(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["role","gridcell"]],[[2,"disabled",null],[2,"is-highlighted",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.viewMonth(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverMonth(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverMonth(t.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],[[2,"selected",null]],null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,0,0,e.context.$implicit.isDisabled,e.context.$implicit.isHovered),t(e,1,0,e.context.$implicit.isSelected),t(e,2,0,e.context.$implicit.label)}))}function Rt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Ct)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function At(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,3,"table",[["class","months"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Rt)),a["ɵdid"](7,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,7,0,n.calendar.months)}),null)}var kt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Et(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,15,"div",[["class","bs-timepicker-container"]],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,5,"div",[["class","bs-timepicker-controls"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"button",[["class","bs-decrease"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["-"])),(t()(),a["ɵeld"](4,0,null,null,0,"input",[["placeholder","00"],["type","text"]],[[8,"value",0]],null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,1,"button",[["class","bs-increase"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["+"])),(t()(),a["ɵeld"](7,0,null,null,5,"div",[["class","bs-timepicker-controls"]],null,null,null,null,null)),(t()(),a["ɵeld"](8,0,null,null,1,"button",[["class","bs-decrease"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["-"])),(t()(),a["ɵeld"](10,0,null,null,0,"input",[["placeholder","00"],["type","text"]],[[8,"value",0]],null,null,null,null)),(t()(),a["ɵeld"](11,0,null,null,1,"button",[["class","bs-increase"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["+"])),(t()(),a["ɵeld"](13,0,null,null,2,"button",[["class","switch-time-format"],["type","button"]],null,null,null,null,null)),(t()(),a["ɵted"](14,null,[""," "])),(t()(),a["ɵeld"](15,0,null,null,0,"img",[["alt",""],["src","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAYAAABi8KSDAAABSElEQVQYV3XQPUvDUBQG4HNuagtVqc6KgouCv6GIuIntYBLB9hcIQpLStCAIV7DYmpTcRWcXqZio3Vwc/UCc/QEqfgyKGbr0I7nS1EiHeqYzPO/h5SD0jaxUZjmSLCB+OFb+UFINFwASAEAdpu9gaGXVyAHHFQBkHpKHc6a9dzECvADyY9sqlAMsK9W0jzxDXqeytr3mhQckxSji27TJJ5/rPmIpwJJq3HrtduriYOurv1a4i1p5HnhkG9OFymi0ReoO05cGwb+ayv4dysVygjeFmsP05f8wpZQ8fsdvfmuY9zjWSNqUtgYFVnOVReILYoBFzdQI5/GGFzNHhGbeZnopDGU29sZbscgldmC99w35VOATTycIMMcBXIfpSVGzZhA6C8hh00conln6VQ9TGgV32OEAKQC4DrBq7CJwd0ggR7Vq/rPrfgB+C3sGypY5DAAAAABJRU5ErkJggg=="]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,4,0,n.hours),t(e,10,0,n.minutes),t(e,14,0,n.ampm)}))}var Lt=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function Dt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"td",[["role","gridcell"]],[[2,"disabled",null],[2,"is-highlighted",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.viewYear(t.context.$implicit)&&a),"mouseenter"===e&&(a=!1!==r.hoverYear(t.context.$implicit,!0)&&a),"mouseleave"===e&&(a=!1!==r.hoverYear(t.context.$implicit,!1)&&a),a}),null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"span",[],[[2,"selected",null]],null,null,null,null)),(t()(),a["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,0,0,e.context.$implicit.isDisabled,e.context.$implicit.isHovered),t(e,1,0,e.context.$implicit.isSelected),t(e,2,0,e.context.$implicit.label)}))}function Pt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Dt)),a["ɵdid"](2,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function Mt(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"bs-calendar-layout",[],null,null,null,ut,it)),a["ɵdid"](1,49152,null,0,r.w,[],null,null),(t()(),a["ɵeld"](2,0,null,0,1,"bs-datepicker-navigation-view",[],null,[[null,"onNavigate"],[null,"onViewMode"]],(function(t,e,n){var a=!0,r=t.component;return"onNavigate"===e&&(a=!1!==r.navigateTo(n)&&a),"onViewMode"===e&&(a=!1!==r.changeViewMode(n)&&a),a}),vt,mt)),a["ɵdid"](3,49152,null,0,r.A,[],{calendar:[0,"calendar"]},{onNavigate:"onNavigate",onViewMode:"onViewMode"}),(t()(),a["ɵeld"](4,0,null,1,3,"table",[["class","years"],["role","grid"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,2,"tbody",[],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,Pt)),a["ɵdid"](7,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.calendar),t(e,7,0,n.calendar.years)}),null)}},b1Dy:function(t,e,n){!function(t){"use strict";t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},b2z7:function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},b5OY:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("pxLl");class a{constructor(t,e){this.performanceCounterService=t,this.i18n=e,this.columns=[],this.counters=[]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Description"),prop:"description",flexGrow:1},{name:this.i18n("Value"),prop:"value",cellTemplate:this.valueTpl,flexGrow:1}]}getCounters(t){this.performanceCounterService.get(this.serviceType,this.serviceId).subscribe(t=>{this.counters=t},e=>{404===e.status?(e.preventDefault(),this.counters=null):t.error()})}}},b80T:function(t,e,n){var a=n("UNi/"),r=n("03A+"),i=n("Z0cm"),s=n("DSRE"),o=n("wJg7"),u=n("c6wG"),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),d=!n&&r(t),c=!n&&!d&&s(t),f=!n&&!d&&!c&&u(t),h=n||d||c||f,g=h?a(t.length,String):[],p=g.length;for(var b in t)!e&&!l.call(t,b)||h&&("length"==b||c&&("offset"==b||"parent"==b)||f&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||o(b,p))||g.push(b);return g}},bHdf:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("5+tZ"),r=n("SpAZ");function i(t=Number.POSITIVE_INFINITY){return Object(a.a)(r.a,t)}},bN42:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="ja-JP">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>ナビゲーションの切り替え</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>ダッシュボード</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>クラスタ</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>ホスト</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>モニター</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>サービス</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>CRUSHマップ</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>マネージャモジュール</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>ログ</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>プール</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>ブロック</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>イメージ</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>ミラーリング</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>ファイルシステム</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>オブジェクトゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>デーモン</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>バケット</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>言語の選択</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>パネルデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Grafana Time Picker</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>設定のリセット</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>戻る</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>データを読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>選択済み</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>検出済み</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>合計</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>名前</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>説明</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>長い説明</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>デフォルト</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>デーモンのデフォルト</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>値</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>保存</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>CRUSHマップビューア</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>ホスト名</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>はい。</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>キャンセル</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>閉じる</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>ホストリスト</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>全体的なパフォーマンス</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>エントリが見つかりません</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>クラスタログ</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>監査ログ</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>設定を読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>設定を読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>マネージャモジュールの編集</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>入力された値は有効なUUIDではありません(有効なUUIDの例: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8)。</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>有効なIPアドレスを入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>数字を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>数字または小数を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>ステータス</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>クラスタID</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmapが変更されました</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmapエポック</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>定数con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>定数mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>必須のcon</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>必須のmon</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>定数内</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>非定数内</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>追加</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>機能</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>クラスタ全体のOSDフラグ</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>送信</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>詳細...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>OSD回復優先度</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>優先度</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>優先度値のカスタマイズ</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>値は0と1の間である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>再重みづけ</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Deep } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {deep } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>OSDリスト</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>値</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>編集</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>削除</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>ヘルス</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>統計情報</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>クライアント</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>任意のクライアントからアクセスできます</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>アドレス</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>必須フィールド</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>1つ以上のカンマ区切り値を含んでいる必要があります</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>例:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>アクセスタイプ</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>スカッシュ</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>クライアントの追加</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- 使用可能なクラスタがありません --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- クラスタを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>デーモンの追加</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>ストレージバックエンド</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- 使用可能なデータプールがありません --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- ストレージバックエンドを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>オブジェクトゲートウェイユーザ</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- 使用可能なユーザがありません --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- オブジェクトゲートウェイユーザを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>CephFSユーザID</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- 使用可能なクライアントがありません --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- cephxクライアントを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>CephFS名</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>セキュリティラベル</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>セキュリティラベルの有効化</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFSパス</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>パスは「/」で始まる必要があり、その後ろに1つの単語を配置できます</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>新しいディレクトリが作成されます</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>パス</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>パスは単一の「/」または1つの単語である必要があります</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>新しいバケットが作成されます</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>NFSプロトコル</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>NFSタグ</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>クライアントはサブディレクトリをマウントできません(たとえば、[タグ] = fooの場合は、クライアントはfoo/bazをマウントできません)。</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>異なる[タグ]オプションを使用することで、同じパスを複数回エクスポートできます。</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>疑似</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>異なる[疑似]オプションを使用することで、同じパスを複数回エクスポートできます。</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- 使用可能なアクセスタイプがありません --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- アクセスタイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- 使用可能なスカッシュがありません --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- 実行されるユーザIDスカッシュ操作の種類を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>トランスポートプロトコル</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Cephにようこそ!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>ユーザ名は必須です</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>パスワードは必須です</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>ログイン</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>このユーザはCephに存在しません。</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>禁止</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>検索していた内容を表示することは許可されていません。</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>RBD設定</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>ローカル設定値を削除します。親設定値が継承されて代わりに使用されます。</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>最小値は0です</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>プールリスト</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>名前は英数字、ダッシュ、および下線のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>選択されたイレイジャコードプロファイル名はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>プラグイン</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>データチャンク(k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>2以上である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>コーディングチャンク(m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>1以上である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>耐久性推定子(c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>地域(l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Crush障害ドメイン</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Crush地域</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>技法</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>パケットサイズ</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crushルート</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Crushデバイスクラス</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>任意</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>ディレクトリ</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>名前...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>選択されたCephプール名はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>プールタイプ</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- プールタイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>配置グループ</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>少なくとも1つの配置グループが必要です。</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>ご使用のクラスタはこれだけ多数の配置グループを処理できません。必要な配置グループの数を再計算してください。</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>計算のヘルプ</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>複製されたサイズ</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>フラグ</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>ECの上書き</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>アプリケーション</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>イレイジャコードプロファイル</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- 使用可能なイレイジャコードプロファイルがありません --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- イレイジャコードプロファイルを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Crushルールセット</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Crushルールを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Crushルール</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crushステップ</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>圧縮</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>モード</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>アルゴリズム</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- 使用可能なイレイジャ圧縮アルゴリズムがありません --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>最小blobサイズ</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>例: 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>値は0より大きい必要があります</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>最大blobサイズ</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>例: 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>値は最小blobサイズより大きい必要があります</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>率</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>圧縮率</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>値は0.0~1.0の間である必要があります</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>例: 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>詳細</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>パフォーマンスの詳細</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>キャッシュ層の詳細</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>イメージをごみ箱に移動する</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>保護の失効日</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>保護されていません</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>日付の形式が正しくありません。「YYYY-MM-DD HH:mm:ss」という形式を使用してください。</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>保護はすでに失効しています。将来の日付を選択するか、日付を空白のままにしてください。</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>イメージの移動</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>概要</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>ターゲット</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>検出認証</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>ユーザ名は8~64文字の長さである必要があり、\n英字、「.」、「@」、「-」、「_」、または「:」のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>パスワード</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>相互ユーザ</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>相互パスワード</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>取得可能な情報:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>使用可能なiSCSIターゲットがありません</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>プール</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>データプール</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>作成済み</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>サイズ</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>オブジェクトサイズ</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>プロビジョニング済み</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>プロビジョニング済み合計</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>ストライピング単位</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>ストライピング数</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>親</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>ブロック名のプレフィックス</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>順番</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>スナップショット</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>イメージ</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>この設定はグローバル値よりも優先されます</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>グローバル</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>これはグローバル値です。このイメージについて、このオプションの値は設定されていません。</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>「/」と「@」は使用できません。</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- 使用可能なrbdプールがありません --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- プールを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>専用のデータプールを使用してください</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>データプール</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>RBDのオブジェクトデータを保管するための専用プール</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>サイズを大きくする必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>詳細</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>ストライピング</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>ストライプ単位</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- ストライプ単位を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>ストライプ数が定義されているため、このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>ストライプ単位がオブジェクトサイズより大きいです。</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>ストライプ数</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>ストライプ単位が定義されているため、このフィールドは必須です。</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>ストライプ数は0より大きい必要があります。</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>ロールバックしようとしています</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>ごみ箱を空にする</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>すべて</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>プール:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>プール名...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>イメージの復元</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>復元するには</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>イメージの新しい名前を入力してクリックします</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>新しい名前</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>失効日</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>保護の終了日</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>iSCSIトポロジ</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>通常はこれらのパラメータをデフォルト値から変更する必要はありません。</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>設定</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>バックストア</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>確認</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>詳細設定</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>ターゲットIQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>IQNのパターンが正しくありません。</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>例: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>詳細情報</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>このターゲットの詳細設定は変更されています。</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>ポータル</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>ポータルの追加</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>このイメージの設定は変更されています。</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>イメージの追加</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>ACL認証</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>イニシエータ</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>イニシエータ</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>クライアントIQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>イニシエータIQNは一意である必要があります。</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>ユーザ名は8~64文字の長さである必要があり、\n英字、「.」、「@」、「-」、「_」、または「:」のみで構成される必要があります。</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>イニシエータはいずれかのグループに属します。イメージはそのグループ内で設定されます。</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>アイテムが追加されていません。</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>イニシエータの追加</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>グループ</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>グループ</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>グループの追加</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>ごみ箱</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>同期中</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>準備完了</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>プールのミラーモードの編集</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>ミラーを無効にする前に、ピアクラスタを削除する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>クラスタ名</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>このクラスタ名は無効です。</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>このCephX IDは無効です。</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>モニターアドレス</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>カンマ区切りアドレス...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>この警告アドレスは無効です。</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephXキー</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64エンコード化済みキー...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>CephXキーはbase64でエンコードされている必要があります。</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>パフォーマンスカウンタを使用できません</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>デーモンリスト</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>パフォーマンスカウンタ</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>バケットデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Id</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>この値は無効です。</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>選択された名前はすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>所有者</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- ユーザを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>有効化済み</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>インデックスタイプ</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>配置ルール</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>マーカー</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>最大マーカー</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>バージョン</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>マスタバージョン</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>変更時間</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>ゾーングループ</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>バケットクォータ</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>最大サイズ</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>無制限</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>ユーザ名</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- ユーザ名を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>キーの自動生成</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>アクセスキー</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>秘密キー</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>氏名</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>電子メールアドレス</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>中断済み</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>システム</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>最大バケット数</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>サブユーザ</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>機能</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>ユーザクォータ</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>表示</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>キー</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>タイプ</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- タイプを選択してください --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>許可</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- 許可を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>サブユーザ</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>選択されたサブユーザIDはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>読み取り、書き込み</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>フル</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>スウィフトキー</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>秘密の自動生成</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>ユーザデータを読み込んでいます...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>ユーザデータを読み込めませんでした。</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>選択されたユーザIDはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>これは有効な電子メールアドレスではありません。</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>選択された電子メールアドレスはすでに使用されています。</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>最大バケット数</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>無効化済み</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>カスタム</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>S3キー</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>サブユーザがいません。</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>キーがありません。</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>スウィフト</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>機能がありません。</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>無制限のサイズ</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>最大サイズ</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>無制限のオブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>0以上の値を入力する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>説明...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>許可</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>役割</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>パスワードの確認入力</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>確認入力されたパスワードがパスワードと一致しません。</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>電子メール</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>無効な電子メールです。</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>自身のユーザから「user read / update」という許可を削除しようとしています。</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>続行した場合は、どのユーザの役割も追加および削除できなくなります。</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>続行してもよろしいですか?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>ヘルプ</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>ドキュメント</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>バージョン情報</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>ダッシュボード設定</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>ユーザ管理</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>ログイン済みユーザ</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>サインアウト</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>属性(OSDマップ)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>メタデータを使用できません</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>メタデータ</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>パフォーマンスカウンタ</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>書き込み回数</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>読み取り回数</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>ヒストグラム</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>現行値</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>最小</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>最大</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>ソース</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>レベル</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>実行時に更新できます(編集可能)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>タグ</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>列挙値</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>関連項目</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>クラスタのステータス</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>マネージャデーモン</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>オブジェクトゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>メタデータサーバ</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>iSCSIゲートウェイ</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>クライアントのIOPS</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>クライアントのスループット</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>クライアントの読み取り/書き込み</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>回復スループット</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>スクラブ</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>パフォーマンス</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>未フォーマット時の容量</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>OSDあたりの配置グループ数</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>配置グループのステータス</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>容量</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>ランク</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>現在</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>検出認証を更新しました</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>使用可能なポータルはありません。</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>使用可能なイメージはありません。</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>使用可能なイメージはありません。ターゲットにイメージを追加したことを確認してください。</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>使用可能なイニシエータはありません。ターゲットにイニシエータを追加したことを確認してください。</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>ターゲット</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>状態</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>読み取りバイト数</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>書き込みバイト数</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>読み取り操作数</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>書き込み操作数</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>次の日付以降のA/O</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>インスタンス</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>問題</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>進捗</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>モードの編集</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>ピアの追加</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>ピアの編集</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>ピアの削除</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>リーダー</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>#ローカル</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>#リモート</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>ミラーピア</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>キー</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>ディープフラット化</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>階層化</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>排他ロック</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>オブジェクトマップ(排他ロックが必要)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>ジャーナリング(排他ロックが必要)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>未保護</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>RBDスナップショットのロールバック</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>ロールバック</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>RBDスナップショット</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>削除日時</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>タイプ</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>状態</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>バージョン</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>ホスト</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>ルート</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>スタンバイデーモン</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>ランク</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>デーモン</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>アクティビティ</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>dエントリ</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>iノード</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>使用量</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>更新済み</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>この値は実行時に更新できます。</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>デーモン/クライアントはこの値をモニター設定データベースから取得しません。\nこのオプションを「ceph config set ...」を通じて設定することは禁止されています。\nこのオプションは、ceph.confまたはコマンドラインを通じて\n設定する必要があります。</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>オプションはデーモン始動時のみに有効になります。</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>オプションはクラスタの作成のみに適用されます。</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>オプションはデーモンの作成のみに適用されます。</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>サービス</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>現行値</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>編集可能</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>有効化</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>無効化</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>再接続していますので、しばらくお待ちください...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>パブリックアドレス</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>セッションの開始</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>インなし</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>以前にアウトとしてマークされたOSDは、それらの始動時にインとしてマークされることはありません</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>アウトなし</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSDは、設定済みの間隔が経過した後に自動的にアウトとしてマークされます</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>アップなし</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSDを始動することは許可されていません</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>ダウンなし</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>OSDの障害レポートは無視されているため、OSDはモニターによってダウンとしてマークされません</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>一時停止</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>読み取りと書き込みを一時停止します</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>スクラブなし</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>スクラブ処理は無効化されています</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>ディープスクラブなし</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>ディープスクラブ処理は無効化されています</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>バックフィルなし</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>配置グループのバックフィルは中断されています</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>回復なし</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>配置グループの回復は中断されています</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>ビット単位のソート</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>ビット単位のソートを使用する</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>消去されたスナップディレクトリ</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSDによってスナップセットが変換されました</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>回復の削除</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>ピアリングの代わりに回復時に削除が実行されました</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>配置グループログのハード制限</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>配置グループログ長のハード制限を適用します</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>OSDフラグを更新しました</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>アウト</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>イン</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>ダウン</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>マーク</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>喪失したOSD</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>喪失としてマーク済み</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>消去</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>消去済み</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>破棄</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>破棄済み</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>削除</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>配置グループ数</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>読み取りバイト数</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>書き込みバイト数</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>読み取り操作数</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>書き込み操作数</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>最大バックフィル数</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>回復最大アクティブ</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>回復最大単一始動</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>回復スリープ</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>ジョブ</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>重大度</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>始動済み</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>使用済み</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>使用可能</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>クリーン</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>動作中</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>警告</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>不明</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>アップ</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>ファイルシステムがありません</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>アクティブ</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>スタンバイ</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>なし</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>アクティブデーモン</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>定数</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>NFS Ganeshaサービスが設定されていません。</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>トランスポート</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>CephFSユーザ</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>CephFSファイルシステム</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(グローバル設定から継承)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>グローバル設定から継承されました</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- 実行されるユーザIDスカッシュ操作を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>使用可能なデーモンがありません。</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>キャッシュモード</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>退去までの最小経過時間</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>消去までの最小経過時間</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>ターゲットの最大バイト数</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>ターゲットの最大オブジェクト数</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>アプリケーションは追加されていません</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>アプリケーション数の上限に達しました</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>1つのプールは最大で4つのアプリケーション定義しか保有できません。</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>使用可能な文字「_a-zA-Z0-9」</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>最大長は128文字です</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>アプリケーションのフィルタリングまたは追加</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>アプリケーションの追加</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>イレイジャコードプロファイル</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>レプリカサイズ</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>最後の変更</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>イレイジャコード化済みプロファイル</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Crushルールセット</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>バケット</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>バケット数</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>ユーザ</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>ユーザ数</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>範囲</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>読み取り</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>作成</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>システム役割</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>ユーザの更新</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>続行</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>このユーザの役割が変更されたため、このユーザは自動的にログアウトされました。</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>各オブジェクトは複数のデータチャンクパートに分割されており、それぞれのパートは異なるOSDに保管されています。</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>各オブジェクトのコーディングチャンクを計算して、これらのチャンクを別々のOSDに保管します。\nコーディングチャンクの数は、データを失うことなくダウン状態になることができるOSDの数でもあります。</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>jerasureプラグインは最も汎用的で柔軟性の高いプラグインです。\nこのプラグインは、Cephイレイジャコード化済みプール用のデフォルトでもあります。</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>さらに柔軟性の高い技法はreed_sol_vanです。kとmを\n設定するだけで十分です。\ncauchy_good技法はより高速となり得ますが、パケットサイズを慎重に選択する必要があります。\nreed_sol_r6_op、liberation、blaum_roth、liber8tionはすべて、\nm=2を使用した設定のみが可能という意味でRAID6と同等です。</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>エンコードはバイトサイズのパケット群に対して同時に実行されます。\n適切なパケットサイズを選択することは困難です。\njerasureのドキュメントにはこのトピックに関する詳細な情報が記載されています。</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>jerasureプラグインを使用すると、イレイジャコード化済みオブジェクトが複数のOSDに保管されている場合は、\n1つのOSDの喪失から回復するには、他のすべてのOSDからの読み取りが必要になります。\nたとえば、k=8およびm=4を使用してjerasureが設定されている場合は、1つのOSDが失われた場合、\n修復のためには他の11個のOSDからの読み取りが必要になります。\n\nlrcイレイジャコードプラグインは、これより少ないOSDを使用した回復を可能にするために、\nローカルパリティチャンクを作成します。たとえば、lrcがk=8、m=4、およびl=4を使用して設定されている場合は、\nlrcは、4つのOSDごとに1つの追加パリティチャンクを作成します。1つのOSDが失われた場合は、\n11個の代わりに4つのOSDのみを使用してそのOSDを回復できます。</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>コーディングチャンクとデータチャンクをサイズ地域の複数セットにグループ分けします。\nたとえば、k=4およびm=2の場合に、[地域]=3の場合は、3つのチャンクからなるグループが2つ作成されます。\n各セットは、別のセットからチャンクを読み取ることなく回復できます。</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>1によって定義されたチャンクの各セットが保管されるCrushバケットのタイプ。\nたとえば、このバケットタイプがラックに設定されている場合は、1のチャンクの各グループは異なるラックに配置されます。\nこのバケットタイプを使用して、「ラックの選択」ステップなどのCRUSHルールステップが作成されます。\nこのバケットタイプが設定されていない場合は、このようなグループ分けは行われません。</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>isaプラグインはISAライブラリをカプセル化します。このプラグインはIntelプロセッサ上のみで動作します。</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>ISAプラグインは2つのリードソロモン形式で提供されています。reed_sol_vanが設定されている場合は、Vandermondeであり、cauchyが設定されている場合は、Cauchyです。</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>shecプラグインは複数のSHECライブラリをカプセル化します。\nこのプラグインを使用すると、cephはリードソロモンコードより効率的にデータを回復できます。</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>それぞれが各データチャンクを各自の計算範囲内に含んでいるパリティチャンクの数。\nこの数は、耐久性推定子として使用されます。\nたとえば、c=2の場合は、データを失うことなく2つのOSDがダウン状態になることができます。</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>CRUSHルールの最初のステップ(「デフォルトの使用」ステップなど)用に\n使用されるCrushバケットの名前。</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>同じ障害ドメインの単一バケット内に2つのチャンクが配置されることを防止します。\nたとえば、障害ドメインがホストである場合は、2つのチャンクが同じホストに保管されることはありません。\nこれを使用して、「リーフホストの選択」ステップなどのCRUSHルールステップが作成されます。</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>CRUSHマップ内でCrushデバイスクラス名を使用して、配置先を特定クラス(ssdやhddなど)のデバイスのみに制限します。</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>イレイジャコードプラグインの読み込み元となるディレクトリ名を設定します。</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>すべての操作を許可します</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>サーバに変更を加えない操作のみを許可します</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>読み取り/書き込み操作を許可しませんが、他のすべての操作を許可します</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>読み取り/書き込み操作、およびファイル属性やディレクトリ内容を変更するどの操作も許可しません</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>アクセスを一切許可しません</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- 優先度を選択してください --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>低</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>高</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>情報</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>直前の5分間</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>直前の15分間</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>直前の30分間</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>直前の1時間(デフォルト)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>直前の3時間</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>直前の6時間</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>直前の12時間</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>直前の24時間</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>昨日</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>本日</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>本日の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>一昨日</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>過去2日間</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>先週の同じ曜日</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>前週</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>今週</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>今週の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>過去7日間</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>前月</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>今月</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>今月の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>過去30日間</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>過去90日間</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>過去6カ月</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>過去1年間</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>前年</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>今年</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>今年の現時点まで</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>過去2年間</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>過去5年間</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>アイテムが選択されていません。</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>アイテムを選択解除して再選択してください</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>選択の上限に達しました</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>タグのフィルタリング</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>バッジの追加</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>使用可能なアイテムはありません。</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>コピー</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>ディープスクラブ</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>破棄</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>フラット化</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>ダウンとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>インとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>喪失としてマーク</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>アウトとしてマーク</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>保護</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>名前の変更</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>復元</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>ごみ箱に移動する</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>保護解除</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>削除済み</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>複製済み</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>コピー済み</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>フラット化済み</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>消去済み</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>復元済み</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>ロールバック済み</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>はい</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>いいえ</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>サービス品質</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>BPS制限</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>希望する秒あたり入出力バイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>IOPS制限</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>希望する秒あたり入出力操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>読み取りBPS制限</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>希望する秒あたり読み取りバイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>読み取りIOPS制限</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>希望する秒あたり読み取り操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>書き込みBPS制限</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>希望する秒あたり書き込みバイト数の上限。</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>書き込みIOPS制限</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>希望する秒あたり書き込み操作数の上限。</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>BPSバースト</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>希望する入出力バイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>IOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>希望する入出力操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>読み取りBPSバースト</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>希望する読み取りバイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>読み取りIOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>希望する読み取り操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>書き込みBPSバースト</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>希望する書き込みバイト数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>書き込みIOPSバースト</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>希望する書き込み操作数のバースト上限。</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>実行中</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>実行</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>実行済み</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>不明なタスク</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>作成中</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>作成</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>更新中</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>更新</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>削除中</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>複製中</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>複製</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>コピー中</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>コピー</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>フラット化中</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>フラット化</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>ロールバック中</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>ロールバック</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>移動中</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>移動</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>移動済み</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>イメージが見つかりませんでした。</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>復元中</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>復元</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>消去中</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>消去</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>すべてのプール</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>ピアを含んでいるためミラーリングを無効化できません。</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},bOMt:function(t,e,n){!function(t){"use strict";t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},bOdf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("5+tZ");function r(t,e){return Object(a.a)(t,e,1)}},bWFh:function(t,e,n){"use strict";var a=n("I+eb"),r=n("2oRo"),i=n("lMq5"),s=n("busE"),o=n("8YOa"),u=n("ImZN"),l=n("GarU"),d=n("hh1v"),c=n("0Dky"),f=n("HH4o"),h=n("1E5z"),g=n("cVYH");t.exports=function(t,e,n){var p=-1!==t.indexOf("Map"),b=-1!==t.indexOf("Weak"),m=p?"set":"add",y=r[t],v=y&&y.prototype,x=y,_={},T=function(t){var e=v[t];s(v,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(b&&!d(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return b&&!d(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(b&&!d(t))&&e.call(this,0===t?0:t)}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(i(t,"function"!=typeof y||!(b||v.forEach&&!c((function(){(new y).entries().next()})))))x=n.getConstructor(e,t,p,m),o.REQUIRED=!0;else if(i(t,!0)){var O=new x,w=O[m](b?{}:-0,1)!=O,S=c((function(){O.has(1)})),I=f((function(t){new y(t)})),N=!b&&c((function(){for(var t=new y,e=5;e--;)t[m](e,e);return!t.has(-0)}));I||((x=e((function(e,n){l(e,x,t);var a=g(new y,e,x);return null!=n&&u(n,a[m],a,p),a}))).prototype=v,v.constructor=x),(S||N)&&(T("delete"),T("has"),p&&T("get")),(N||w)&&T(m),b&&v.clear&&delete v.clear}return _[t]=x,a({global:!0,forced:x!=y},_),h(x,t),b||n.setStrong(x,t,p),x}},bXm7:function(t,e,n){!function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},bYM6:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n("wd/R"))},bpih:function(t,e,n){!function(t){"use strict";t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},busE:function(t,e,n){var a=n("2oRo"),r=n("kRJp"),i=n("UTVS"),s=n("zk60"),o=n("iSVu"),u=n("afO8"),l=u.get,d=u.enforce,c=String(String).split("String");(t.exports=function(t,e,n,o){var u=!!o&&!!o.unsafe,l=!!o&&!!o.enumerable,f=!!o&&!!o.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||r(n,"name",e),d(n).source=c.join("string"==typeof e?e:"")),t!==a?(u?!f&&t[e]&&(l=!0):delete t[e],l?t[e]=n:r(t,e,n)):l?t[e]=n:s(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||o(this)}))},bxKX:function(t,e,n){!function(t){"use strict";t.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},bxSN:function(t,e,n){var a=n("mrSG").__decorate;Object.defineProperty(e,"__esModule",{value:!0});var r=n("8Y7J"),i=n("moLw");e.ClickOutsideModule=function(){return a([r.NgModule({declarations:[i.ClickOutsideDirective],exports:[i.ClickOutsideDirective]})],(function(){}))}()},c2HN:function(t,e,n){"use strict";function a(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}n.d(e,"a",(function(){return a}))},c6wG:function(t,e,n){var a=n("dD9F"),r=n("sEf8"),i=n("mdPL"),s=i&&i.isTypedArray,o=s?r(s):a;t.exports=o},cRix:function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},cUpR:function(t,e,n){"use strict";n.d(e,"p",(function(){return _})),n.d(e,"a",(function(){return dt})),n.d(e,"h",(function(){return lt})),n.d(e,"c",(function(){return T})),n.d(e,"d",(function(){return O})),n.d(e,"e",(function(){return W})),n.d(e,"f",(function(){return K})),n.d(e,"g",(function(){return $})),n.d(e,"b",(function(){return tt})),n.d(e,"q",(function(){return s})),n.d(e,"j",(function(){return k})),n.d(e,"i",(function(){return H})),n.d(e,"m",(function(){return Z})),n.d(e,"n",(function(){return X})),n.d(e,"l",(function(){return I})),n.d(e,"o",(function(){return S})),n.d(e,"k",(function(){return et}));var a=n("SVse"),r=n("8Y7J");let i=null;function s(){return i}const o={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},u={"\b":"Backspace","\t":"Tab","\7f":"Delete","\e":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},l={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\90":"NumLock"},d=(()=>{if(r["ɵglobal"].Node)return r["ɵglobal"].Node.prototype.contains||function(t){return!!(16&this.compareDocumentPosition(t))}})();class c extends class extends class{constructor(){this.resourceLoaderType=null}get attrToPropMap(){return this._attrToPropMap}set attrToPropMap(t){this._attrToPropMap=t}}{constructor(){super(),this._animationPrefix=null,this._transitionEnd=null;try{const t=this.createElement("div",document);if(null!=this.getStyle(t,"animationName"))this._animationPrefix="";else{const e=["Webkit","Moz","O","ms"];for(let n=0;n<e.length;n++)if(null!=this.getStyle(t,e[n]+"AnimationName")){this._animationPrefix="-"+e[n].toLowerCase()+"-";break}}const e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(e).forEach(n=>{null!=this.getStyle(t,n)&&(this._transitionEnd=e[n])})}catch(t){this._animationPrefix=null,this._transitionEnd=null}}getDistributedNodes(t){return t.getDistributedNodes()}resolveAndSetHref(t,e,n){t.href=null==n?e:e+"/../"+n}supportsDOMEvents(){return!0}supportsNativeShadowDOM(){return"function"==typeof document.body.createShadowRoot}getAnimationPrefix(){return this._animationPrefix?this._animationPrefix:""}getTransitionEnd(){return this._transitionEnd?this._transitionEnd:""}supportsAnimation(){return null!=this._animationPrefix&&null!=this._transitionEnd}}{parse(t){throw new Error("parse not implemented")}static makeCurrent(){var t;t=new c,i||(i=t)}hasProperty(t,e){return e in t}setProperty(t,e,n){t[e]=n}getProperty(t,e){return t[e]}invoke(t,e,n){t[e](...n)}logError(t){window.console&&(console.error?console.error(t):console.log(t))}log(t){window.console&&window.console.log&&window.console.log(t)}logGroup(t){window.console&&window.console.group&&window.console.group(t)}logGroupEnd(){window.console&&window.console.groupEnd&&window.console.groupEnd()}get attrToPropMap(){return o}contains(t,e){return d.call(t,e)}querySelector(t,e){return t.querySelector(e)}querySelectorAll(t,e){return t.querySelectorAll(e)}on(t,e,n){t.addEventListener(e,n,!1)}onAndCancel(t,e,n){return t.addEventListener(e,n,!1),()=>{t.removeEventListener(e,n,!1)}}dispatchEvent(t,e){t.dispatchEvent(e)}createMouseEvent(t){const e=this.getDefaultDocument().createEvent("MouseEvent");return e.initEvent(t,!0,!0),e}createEvent(t){const e=this.getDefaultDocument().createEvent("Event");return e.initEvent(t,!0,!0),e}preventDefault(t){t.preventDefault(),t.returnValue=!1}isPrevented(t){return t.defaultPrevented||null!=t.returnValue&&!t.returnValue}getInnerHTML(t){return t.innerHTML}getTemplateContent(t){return"content"in t&&this.isTemplateElement(t)?t.content:null}getOuterHTML(t){return t.outerHTML}nodeName(t){return t.nodeName}nodeValue(t){return t.nodeValue}type(t){return t.type}content(t){return this.hasProperty(t,"content")?t.content:t}firstChild(t){return t.firstChild}nextSibling(t){return t.nextSibling}parentElement(t){return t.parentNode}childNodes(t){return t.childNodes}childNodesAsList(t){const e=t.childNodes,n=new Array(e.length);for(let a=0;a<e.length;a++)n[a]=e[a];return n}clearNodes(t){for(;t.firstChild;)t.removeChild(t.firstChild)}appendChild(t,e){t.appendChild(e)}removeChild(t,e){t.removeChild(e)}replaceChild(t,e,n){t.replaceChild(e,n)}remove(t){return t.parentNode&&t.parentNode.removeChild(t),t}insertBefore(t,e,n){t.insertBefore(n,e)}insertAllBefore(t,e,n){n.forEach(n=>t.insertBefore(n,e))}insertAfter(t,e,n){t.insertBefore(n,e.nextSibling)}setInnerHTML(t,e){t.innerHTML=e}getText(t){return t.textContent}setText(t,e){t.textContent=e}getValue(t){return t.value}setValue(t,e){t.value=e}getChecked(t){return t.checked}setChecked(t,e){t.checked=e}createComment(t){return this.getDefaultDocument().createComment(t)}createTemplate(t){const e=this.getDefaultDocument().createElement("template");return e.innerHTML=t,e}createElement(t,e){return(e=e||this.getDefaultDocument()).createElement(t)}createElementNS(t,e,n){return(n=n||this.getDefaultDocument()).createElementNS(t,e)}createTextNode(t,e){return(e=e||this.getDefaultDocument()).createTextNode(t)}createScriptTag(t,e,n){const a=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return a.setAttribute(t,e),a}createStyleElement(t,e){const n=(e=e||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(t,e)),n}createShadowRoot(t){return t.createShadowRoot()}getShadowRoot(t){return t.shadowRoot}getHost(t){return t.host}clone(t){return t.cloneNode(!0)}getElementsByClassName(t,e){return t.getElementsByClassName(e)}getElementsByTagName(t,e){return t.getElementsByTagName(e)}classList(t){return Array.prototype.slice.call(t.classList,0)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}hasClass(t,e){return t.classList.contains(e)}setStyle(t,e,n){t.style[e]=n}removeStyle(t,e){t.style[e]=""}getStyle(t,e){return t.style[e]}hasStyle(t,e,n){const a=this.getStyle(t,e)||"";return n?a==n:a.length>0}tagName(t){return t.tagName}attributeMap(t){const e=new Map,n=t.attributes;for(let a=0;a<n.length;a++){const t=n.item(a);e.set(t.name,t.value)}return e}hasAttribute(t,e){return t.hasAttribute(e)}hasAttributeNS(t,e,n){return t.hasAttributeNS(e,n)}getAttribute(t,e){return t.getAttribute(e)}getAttributeNS(t,e,n){return t.getAttributeNS(e,n)}setAttribute(t,e,n){t.setAttribute(e,n)}setAttributeNS(t,e,n,a){t.setAttributeNS(e,n,a)}removeAttribute(t,e){t.removeAttribute(e)}removeAttributeNS(t,e,n){t.removeAttributeNS(e,n)}templateAwareRoot(t){return this.isTemplateElement(t)?this.content(t):t}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}getBoundingClientRect(t){try{return t.getBoundingClientRect()}catch(e){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}}getTitle(t){return t.title}setTitle(t,e){t.title=e||""}elementMatches(t,e){return!!this.isElementNode(t)&&(t.matches&&t.matches(e)||t.msMatchesSelector&&t.msMatchesSelector(e)||t.webkitMatchesSelector&&t.webkitMatchesSelector(e))}isTemplateElement(t){return this.isElementNode(t)&&"TEMPLATE"===t.nodeName}isTextNode(t){return t.nodeType===Node.TEXT_NODE}isCommentNode(t){return t.nodeType===Node.COMMENT_NODE}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}hasShadowRoot(t){return null!=t.shadowRoot&&t instanceof HTMLElement}isShadowRoot(t){return t instanceof DocumentFragment}importIntoDoc(t){return document.importNode(this.templateAwareRoot(t),!0)}adoptNode(t){return document.adoptNode(t)}getHref(t){return t.getAttribute("href")}getEventKey(t){let e=t.key;if(null==e){if(e=t.keyIdentifier,null==e)return"Unidentified";e.startsWith("U+")&&(e=String.fromCharCode(parseInt(e.substring(2),16)),3===t.location&&l.hasOwnProperty(e)&&(e=l[e]))}return u[e]||e}getGlobalEventTarget(t,e){return"window"===e?window:"document"===e?t:"body"===e?t.body:null}getHistory(){return window.history}getLocation(){return window.location}getBaseHref(t){const e=h||(h=document.querySelector("base"),h)?h.getAttribute("href"):null;return null==e?null:(n=e,f||(f=document.createElement("a")),f.setAttribute("href",n),"/"===f.pathname.charAt(0)?f.pathname:"/"+f.pathname);var n}resetBaseElement(){h=null}getUserAgent(){return window.navigator.userAgent}setData(t,e,n){this.setAttribute(t,"data-"+e,n)}getData(t,e){return this.getAttribute(t,"data-"+e)}getComputedStyle(t){return getComputedStyle(t)}supportsWebAnimation(){return"function"==typeof Element.prototype.animate}performanceNow(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()}supportsCookies(){return!0}getCookie(t){return Object(a["ɵparseCookieValue"])(document.cookie,t)}setCookie(t,e){document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)}}let f,h=null;function g(){return!!window.history.pushState}const p=new r.InjectionToken("TRANSITION_ID"),b=[{provide:r.APP_INITIALIZER,useFactory:function(t,e,n){return()=>{n.get(r.ApplicationInitStatus).donePromise.then(()=>{const n=s();Array.prototype.slice.apply(n.querySelectorAll(e,"style[ng-transition]")).filter(e=>n.getAttribute(e,"ng-transition")===t).forEach(t=>n.remove(t))})}},deps:[p,a.DOCUMENT,r.Injector],multi:!0}];class m{static init(){Object(r.setTestabilityGetter)(new m)}addToWindow(t){r["ɵglobal"].getAngularTestability=(e,n=!0)=>{const a=t.findTestabilityInTree(e,n);if(null==a)throw new Error("Could not find testability for element.");return a},r["ɵglobal"].getAllAngularTestabilities=()=>t.getAllTestabilities(),r["ɵglobal"].getAllAngularRootElements=()=>t.getAllRootElements(),r["ɵglobal"].frameworkStabilizers||(r["ɵglobal"].frameworkStabilizers=[]),r["ɵglobal"].frameworkStabilizers.push(t=>{const e=r["ɵglobal"].getAllAngularTestabilities();let n=e.length,a=!1;const i=function(e){a=a||e,n--,0==n&&t(a)};e.forEach((function(t){t.whenStable(i)}))})}findTestabilityInTree(t,e,n){if(null==e)return null;const a=t.getTestability(e);return null!=a?a:n?s().isShadowRoot(e)?this.findTestabilityInTree(t,s().getHost(e),!0):this.findTestabilityInTree(t,s().parentElement(e),!0):null}}function y(t,e){"undefined"!=typeof COMPILED&&COMPILED||((r["ɵglobal"].ng=r["ɵglobal"].ng||{})[t]=e)}const v=(()=>({ApplicationRef:r.ApplicationRef,NgZone:r.NgZone}))();function x(t){return Object(r.getDebugNode)(t)}function _(t){return y("probe",x),y("coreTokens",Object.assign({},v,(t||[]).reduce((t,e)=>(t[e.name]=e.token,t),{}))),()=>x}const T=new r.InjectionToken("EventManagerPlugins");class O{constructor(t,e){this._zone=e,this._eventNameToPlugin=new Map,t.forEach(t=>t.manager=this),this._plugins=t.slice().reverse()}addEventListener(t,e,n){return this._findPluginFor(e).addEventListener(t,e,n)}addGlobalEventListener(t,e,n){return this._findPluginFor(e).addGlobalEventListener(t,e,n)}getZone(){return this._zone}_findPluginFor(t){const e=this._eventNameToPlugin.get(t);if(e)return e;const n=this._plugins;for(let a=0;a<n.length;a++){const e=n[a];if(e.supports(t))return this._eventNameToPlugin.set(t,e),e}throw new Error(`No event manager plugin found for event ${t}`)}}class w{constructor(t){this._doc=t}addGlobalEventListener(t,e,n){const a=s().getGlobalEventTarget(this._doc,t);if(!a)throw new Error(`Unsupported event target ${a} for event ${e}`);return this.addEventListener(a,e,n)}}class S{constructor(){this._stylesSet=new Set}addStyles(t){const e=new Set;t.forEach(t=>{this._stylesSet.has(t)||(this._stylesSet.add(t),e.add(t))}),this.onStylesAdded(e)}onStylesAdded(t){}getAllStyles(){return Array.from(this._stylesSet)}}class I extends S{constructor(t){super(),this._doc=t,this._hostNodes=new Set,this._styleNodes=new Set,this._hostNodes.add(t.head)}_addStylesToHost(t,e){t.forEach(t=>{const n=this._doc.createElement("style");n.textContent=t,this._styleNodes.add(e.appendChild(n))})}addHost(t){this._addStylesToHost(this._stylesSet,t),this._hostNodes.add(t)}removeHost(t){this._hostNodes.delete(t)}onStylesAdded(t){this._hostNodes.forEach(e=>this._addStylesToHost(t,e))}ngOnDestroy(){this._styleNodes.forEach(t=>s().remove(t))}}const N={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},C=/%COMP%/g;function R(t,e,n){for(let a=0;a<e.length;a++){let r=e[a];Array.isArray(r)?R(t,r,n):(r=r.replace(C,t),n.push(r))}return n}function A(t){return e=>{!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}class k{constructor(t,e,n){this.eventManager=t,this.sharedStylesHost=e,this.appId=n,this.rendererByCompId=new Map,this.defaultRenderer=new E(t)}createRenderer(t,e){if(!t||!e)return this.defaultRenderer;switch(e.encapsulation){case r.ViewEncapsulation.Emulated:{let n=this.rendererByCompId.get(e.id);return n||(n=new P(this.eventManager,this.sharedStylesHost,e,this.appId),this.rendererByCompId.set(e.id,n)),n.applyToHost(t),n}case r.ViewEncapsulation.Native:case r.ViewEncapsulation.ShadowDom:return new M(this.eventManager,this.sharedStylesHost,t,e);default:if(!this.rendererByCompId.has(e.id)){const t=R(e.id,e.styles,[]);this.sharedStylesHost.addStyles(t),this.rendererByCompId.set(e.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}class E{constructor(t){this.eventManager=t,this.data=Object.create(null)}destroy(){}createElement(t,e){return e?document.createElementNS(N[e]||e,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,e){t.appendChild(e)}insertBefore(t,e,n){t&&t.insertBefore(e,n)}removeChild(t,e){t&&t.removeChild(e)}selectRootElement(t,e){let n="string"==typeof t?document.querySelector(t):t;if(!n)throw new Error(`The selector "${t}" did not match any elements`);return e||(n.textContent=""),n}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,e,n,a){if(a){e=a+":"+e;const r=N[a];r?t.setAttributeNS(r,e,n):t.setAttribute(e,n)}else t.setAttribute(e,n)}removeAttribute(t,e,n){if(n){const a=N[n];a?t.removeAttributeNS(a,e):t.removeAttribute(`${n}:${e}`)}else t.removeAttribute(e)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}setStyle(t,e,n,a){a&r.RendererStyleFlags2.DashCase?t.style.setProperty(e,n,a&r.RendererStyleFlags2.Important?"important":""):t.style[e]=n}removeStyle(t,e,n){n&r.RendererStyleFlags2.DashCase?t.style.removeProperty(e):t.style[e]=""}setProperty(t,e,n){D(e,"property"),t[e]=n}setValue(t,e){t.nodeValue=e}listen(t,e,n){return D(e,"listener"),"string"==typeof t?this.eventManager.addGlobalEventListener(t,e,A(n)):this.eventManager.addEventListener(t,e,A(n))}}const L=(()=>"@".charCodeAt(0))();function D(t,e){if(t.charCodeAt(0)===L)throw new Error(`Found the synthetic ${e} ${t}. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.`)}class P extends E{constructor(t,e,n,a){super(t),this.component=n;const r=R(a+"-"+n.id,n.styles,[]);e.addStyles(r),this.contentAttr="_ngcontent-%COMP%".replace(C,a+"-"+n.id),this.hostAttr=function(t){return"_nghost-%COMP%".replace(C,t)}(a+"-"+n.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,e){const n=super.createElement(t,e);return super.setAttribute(n,this.contentAttr,""),n}}class M extends E{constructor(t,e,n,a){super(t),this.sharedStylesHost=e,this.hostEl=n,this.component=a,this.shadowRoot=a.encapsulation===r.ViewEncapsulation.ShadowDom?n.attachShadow({mode:"open"}):n.createShadowRoot(),this.sharedStylesHost.addHost(this.shadowRoot);const i=R(a.id,a.styles,[]);for(let r=0;r<i.length;r++){const t=document.createElement("style");t.textContent=i[r],this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}appendChild(t,e){return super.appendChild(this.nodeOrShadowRoot(t),e)}insertBefore(t,e,n){return super.insertBefore(this.nodeOrShadowRoot(t),e,n)}removeChild(t,e){return super.removeChild(this.nodeOrShadowRoot(t),e)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}}const q=(()=>"undefined"!=typeof Zone&&Zone.__symbol__||function(t){return"__zone_symbol__"+t})(),j=q("addEventListener"),F=q("removeEventListener"),G={},V="__zone_symbol__propagationStopped",z=(()=>{const t="undefined"!=typeof Zone&&Zone[q("BLACK_LISTED_EVENTS")];if(t){const e={};return t.forEach(t=>{e[t]=t}),e}})(),B=function(t){return!!z&&z.hasOwnProperty(t)},Y=function(t){const e=G[t.type];if(!e)return;const n=this[e];if(!n)return;const a=[t];if(1===n.length){const t=n[0];return t.zone!==Zone.current?t.zone.run(t.handler,this,a):t.handler.apply(this,a)}{const e=n.slice();for(let n=0;n<e.length&&!0!==t[V];n++){const t=e[n];t.zone!==Zone.current?t.zone.run(t.handler,this,a):t.handler.apply(this,a)}}};class H extends w{constructor(t,e,n){super(t),this.ngZone=e,n&&Object(a.isPlatformServer)(n)||this.patchEvent()}patchEvent(){if("undefined"==typeof Event||!Event||!Event.prototype)return;if(Event.prototype.__zone_symbol__stopImmediatePropagation)return;const t=Event.prototype.__zone_symbol__stopImmediatePropagation=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[V]=!0),t&&t.apply(this,arguments)}}supports(t){return!0}addEventListener(t,e,n){let a=n;if(!t[j]||r.NgZone.isInAngularZone()&&!B(e))t.addEventListener(e,a,!1);else{let n=G[e];n||(n=G[e]=q("ANGULAR"+e+"FALSE"));let r=t[n];const i=r&&r.length>0;r||(r=t[n]=[]);const s=B(e)?Zone.root:Zone.current;if(0===r.length)r.push({zone:s,handler:a});else{let t=!1;for(let e=0;e<r.length;e++)if(r[e].handler===a){t=!0;break}t||r.push({zone:s,handler:a})}i||t[j](e,Y,!1)}return()=>this.removeEventListener(t,e,a)}removeEventListener(t,e,n){let a=t[F];if(!a)return t.removeEventListener.apply(t,[e,n,!1]);let r=G[e],i=r&&t[r];if(!i)return t.removeEventListener.apply(t,[e,n,!1]);let s=!1;for(let o=0;o<i.length;o++)if(i[o].handler===n){s=!0,i.splice(o,1);break}s?0===i.length&&a.apply(t,[e,Y,!1]):t.removeEventListener.apply(t,[e,n,!1])}}const U={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},W=new r.InjectionToken("HammerGestureConfig"),K=new r.InjectionToken("HammerLoader");class ${constructor(){this.events=[],this.overrides={}}buildHammer(t){const e=new Hammer(t,this.options);e.get("pinch").set({enable:!0}),e.get("rotate").set({enable:!0});for(const n in this.overrides)e.get(n).set(this.overrides[n]);return e}}class Z extends w{constructor(t,e,n,a){super(t),this._config=e,this.console=n,this.loader=a}supports(t){return!(!U.hasOwnProperty(t.toLowerCase())&&!this.isCustomEvent(t)||!window.Hammer&&!this.loader&&(this.console.warn(`The "${t}" event cannot be bound because Hammer.JS is not `+"loaded and no custom loader has been specified."),1))}addEventListener(t,e,n){const a=this.manager.getZone();if(e=e.toLowerCase(),!window.Hammer&&this.loader){let a=!1,r=()=>{a=!0};return this.loader().then(()=>{if(!window.Hammer)return this.console.warn("The custom HAMMER_LOADER completed, but Hammer.JS is not present."),void(r=()=>{});a||(r=this.addEventListener(t,e,n))}).catch(()=>{this.console.warn(`The "${e}" event cannot be bound because the custom `+"Hammer.JS loader failed."),r=()=>{}}),()=>{r()}}return a.runOutsideAngular(()=>{const r=this._config.buildHammer(t),i=function(t){a.runGuarded((function(){n(t)}))};return r.on(e,i),()=>{r.off(e,i),"function"==typeof r.destroy&&r.destroy()}})}isCustomEvent(t){return this._config.events.indexOf(t)>-1}}const J=["alt","control","meta","shift"],Q={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey};class X extends w{constructor(t){super(t)}supports(t){return null!=X.parseEventName(t)}addEventListener(t,e,n){const a=X.parseEventName(e),r=X.eventCallback(a.fullKey,n,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>s().onAndCancel(t,a.domEventName,r))}static parseEventName(t){const e=t.toLowerCase().split("."),n=e.shift();if(0===e.length||"keydown"!==n&&"keyup"!==n)return null;const a=X._normalizeKey(e.pop());let r="";if(J.forEach(t=>{const n=e.indexOf(t);n>-1&&(e.splice(n,1),r+=t+".")}),r+=a,0!=e.length||0===a.length)return null;const i={};return i.domEventName=n,i.fullKey=r,i}static getEventFullKey(t){let e="",n=s().getEventKey(t);return n=n.toLowerCase()," "===n?n="space":"."===n&&(n="dot"),J.forEach(a=>{a!=n&&(0,Q[a])(t)&&(e+=a+".")}),e+=n,e}static eventCallback(t,e,n){return a=>{X.getEventFullKey(a)===t&&n.runGuarded(()=>e(a))}}static _normalizeKey(t){switch(t){case"esc":return"escape";default:return t}}}class tt{}class et extends tt{constructor(t){super(),this._doc=t}sanitize(t,e){if(null==e)return null;switch(t){case r.SecurityContext.NONE:return e;case r.SecurityContext.HTML:return e instanceof at?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"HTML"),Object(r["ɵ_sanitizeHtml"])(this._doc,String(e)));case r.SecurityContext.STYLE:return e instanceof rt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"Style"),Object(r["ɵ_sanitizeStyle"])(e));case r.SecurityContext.SCRIPT:if(e instanceof it)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"Script"),new Error("unsafe value used in a script context");case r.SecurityContext.URL:return e instanceof ot||e instanceof st?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"URL"),Object(r["ɵ_sanitizeUrl"])(String(e)));case r.SecurityContext.RESOURCE_URL:if(e instanceof ot)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error(`Unexpected SecurityContext ${t} (see http://g.co/ng/security#xss)`)}}checkNotSafeValue(t,e){if(t instanceof nt)throw new Error(`Required a safe ${e}, got a ${t.getTypeName()} `+"(see http://g.co/ng/security#xss)")}bypassSecurityTrustHtml(t){return new at(t)}bypassSecurityTrustStyle(t){return new rt(t)}bypassSecurityTrustScript(t){return new it(t)}bypassSecurityTrustUrl(t){return new st(t)}bypassSecurityTrustResourceUrl(t){return new ot(t)}}class nt{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}`+" (see http://g.co/ng/security#xss)"}}class at extends nt{getTypeName(){return"HTML"}}class rt extends nt{getTypeName(){return"Style"}}class it extends nt{getTypeName(){return"Script"}}class st extends nt{getTypeName(){return"URL"}}class ot extends nt{getTypeName(){return"ResourceURL"}}const ut=[{provide:r.PLATFORM_ID,useValue:a["ɵPLATFORM_BROWSER_ID"]},{provide:r.PLATFORM_INITIALIZER,useValue:function(){c.makeCurrent(),m.init()},multi:!0},{provide:a.PlatformLocation,useClass:class extends a.PlatformLocation{constructor(t){super(),this._doc=t,this._init()}_init(){this.location=s().getLocation(),this._history=s().getHistory()}getBaseHrefFromDOM(){return s().getBaseHref(this._doc)}onPopState(t){s().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",t,!1)}onHashChange(t){s().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",t,!1)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(t){this.location.pathname=t}pushState(t,e,n){g()?this._history.pushState(t,e,n):this.location.hash=n}replaceState(t,e,n){g()?this._history.replaceState(t,e,n):this.location.hash=n}forward(){this._history.forward()}back(){this._history.back()}getState(){return this._history.state}},deps:[a.DOCUMENT]},{provide:a.DOCUMENT,useFactory:function(){return document},deps:[]}],lt=Object(r.createPlatformFactory)(r.platformCore,"browser",ut);class dt{constructor(t){if(t)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(t){return{ngModule:dt,providers:[{provide:r.APP_ID,useValue:t.appId},{provide:p,useExisting:r.APP_ID},b]}}}"undefined"!=typeof window&&window},cVYH:function(t,e,n){var a=n("hh1v"),r=n("0rvr");t.exports=function(t,e,n){var i,s;return r&&"function"==typeof(i=e.constructor)&&i!==n&&a(s=i.prototype)&&s!==n.prototype&&r(t,s),t}},cp0P:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("HDdC"),r=n("DH7j"),i=n("lJxs"),s=n("XoHu"),o=n("Cfvw");function u(...t){if(1===t.length){const e=t[0];if(Object(r.a)(e))return l(e,null);if(Object(s.a)(e)&&Object.getPrototypeOf(e)===Object.prototype){const t=Object.keys(e);return l(t.map(t=>e[t]),t)}}if("function"==typeof t[t.length-1]){const e=t.pop();return l(t=1===t.length&&Object(r.a)(t[0])?t[0]:t,null).pipe(Object(i.a)(t=>e(...t)))}return l(t,null)}function l(t,e){return new a.a(n=>{const a=t.length;if(0===a)return void n.complete();const r=new Array(a);let i=0,s=0;for(let u=0;u<a;u++){const l=Object(o.a)(t[u]);let d=!1;n.add(l.subscribe({next:t=>{d||(d=!0,s++),r[u]=t},error:t=>n.error(t),complete:()=>{i++,i!==a&&d||(s===a&&n.next(e?e.reduce((t,e,n)=>(t[e]=r[n],t),{}):r),n.complete())}}))}})}},"cq/+":function(t,e,n){var a=n("mc0g")();t.exports=a},crnd:function(t,e){function n(t){return Promise.resolve().then((function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}))}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id="crnd"},cvCv:function(t,e){t.exports=function(t){return function(){return t}}},czMo:function(t,e,n){!function(t){"use strict";t.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})}(n("wd/R"))},"d+Og":function(t,e,n){"use strict";var a=n("LvDl");let r=(()=>{class t{constructor(t){if(this.type=t,!this.isValidType())throw new Error("Wrong placement group category type");this.setTypeStates()}isValidType(){return t.VALID_CATEGORIES.includes(this.type)}setTypeStates(){switch(this.type){case t.CATEGORY_CLEAN:this.states=["active","clean"];break;case t.CATEGORY_WORKING:this.states=["activating","backfill_wait","backfilling","creating","deep","degraded","forced_backfill","forced_recovery","peering","peered","recovering","recovery_wait","repair","scrubbing","snaptrim","snaptrim_wait"];break;case t.CATEGORY_WARNING:this.states=["backfill_toofull","backfill_unfound","down","incomplete","inconsistent","recovery_toofull","recovery_unfound","remapped","snaptrim_error","stale","undersized"];break;default:this.states=[]}}}return t.CATEGORY_CLEAN="clean",t.CATEGORY_WORKING="working",t.CATEGORY_WARNING="warning",t.CATEGORY_UNKNOWN="unknown",t.VALID_CATEGORIES=[t.CATEGORY_CLEAN,t.CATEGORY_WORKING,t.CATEGORY_WARNING,t.CATEGORY_UNKNOWN],t})();var i=n("8Y7J"),s=n("kJI8");n.d(e,"a",(function(){return o}));let o=(()=>{class t{constructor(){this.categories=this.createCategories()}getAllTypes(){return r.VALID_CATEGORIES}getTypeByStates(t){const e=this.getPgStatesFromText(t);if(0===e.length)return r.CATEGORY_UNKNOWN;const n=a.zipObject(r.VALID_CATEGORIES,r.VALID_CATEGORIES.map(t=>a.intersection(this.categories[t].states,e).length));if(n[r.CATEGORY_WARNING]>0)return r.CATEGORY_WARNING;const i=n[r.CATEGORY_WORKING];return e.length>n[r.CATEGORY_CLEAN]+i?r.CATEGORY_UNKNOWN:i?r.CATEGORY_WORKING:r.CATEGORY_CLEAN}createCategories(){return a.zipObject(r.VALID_CATEGORIES,r.VALID_CATEGORIES.map(t=>new r(t)))}getPgStatesFromText(t){const e=t.replace(/[^a-z]+/g," ").trim().split(" ");return a.uniq(e)}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:s.a}),t})()},dApe:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("2vnA"),i=n("MP8s"),s=n("X+05"),o=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},u=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},l=function(){function t(t){var e=this;this.treeModel=t,this.yBlocks=0,this.x=0,this.viewportHeight=null,this.viewport=null,t.virtualScroll=this,this._dispose=[Object(r.b)((function(){return e.fixScroll()}))]}return Object.defineProperty(t.prototype,"y",{get:function(){return 150*this.yBlocks},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"totalHeight",{get:function(){return this.treeModel.virtualRoot?this.treeModel.virtualRoot.height:0},enumerable:!0,configurable:!0}),t.prototype.fireEvent=function(t){this.treeModel.fireEvent(t)},t.prototype.init=function(){var t=this,e=this.recalcPositions.bind(this);e(),this._dispose=this._dispose.concat([Object(r.e)((function(){return t.treeModel.roots}),e),Object(r.e)((function(){return t.treeModel.expandedNodeIds}),e),Object(r.e)((function(){return t.treeModel.hiddenNodeIds}),e)]),this.treeModel.subscribe(s.a.loadNodeChildren,e)},t.prototype.isEnabled=function(){return this.treeModel.options.useVirtualScroll},t.prototype._setYBlocks=function(t){this.yBlocks=t},t.prototype.recalcPositions=function(){this.treeModel.virtualRoot.height=this._getPositionAfter(this.treeModel.getVisibleRoots(),0)},t.prototype._getPositionAfter=function(t,e){var n=this,a=e;return t.forEach((function(t){t.position=a,a=n._getPositionAfterNode(t,a)})),a},t.prototype._getPositionAfterNode=function(t,e){var n=t.getSelfHeight()+e;return t.children&&t.isExpanded&&(n=this._getPositionAfter(t.visibleChildren,n)),t.height=n-e,n},t.prototype.clear=function(){this._dispose.forEach((function(t){return t()}))},t.prototype.setViewport=function(t){Object.assign(this,{viewport:t,x:t.scrollLeft,yBlocks:Math.round(t.scrollTop/150),viewportHeight:t.getBoundingClientRect?t.getBoundingClientRect().height:0})},t.prototype.scrollIntoView=function(t,e,n){if(void 0===n&&(n=!0),t.options.scrollContainer){var a=t.options.scrollContainer,r=a.getBoundingClientRect().height,i=a.getBoundingClientRect().top,s=this.viewport.getBoundingClientRect().top+t.position-i;(e||s<a.scrollTop||s+t.getSelfHeight()>a.scrollTop+r)&&(a.scrollTop=n?s-r/2:s)}else(e||t.position<this.y||t.position+t.getSelfHeight()>this.y+this.viewportHeight)&&this.viewport&&(this.viewport.scrollTop=n?t.position-this.viewportHeight/2:t.position,this._setYBlocks(Math.floor(this.viewport.scrollTop/150)))},t.prototype.getViewportNodes=function(t){var e=this;if(!t)return[];var n=t.filter((function(t){return!t.isHidden}));if(!this.isEnabled())return n;if(!this.viewportHeight||!n.length)return[];var a=d(n,(function(t){return t.position+500>e.y||t.position+t.height>e.y})),r=d(n,(function(t){return t.position-500>e.y+e.viewportHeight}),a),i=[];if(r-a>(1e3+this.viewportHeight)/n[0].treeModel.options.options.nodeHeight)return[];for(var s=a;s<=r;s++)i.push(n[s]);return i},t.prototype.fixScroll=function(){var t=Math.max(0,this.totalHeight-this.viewportHeight);this.y<0&&this._setYBlocks(0),this.y>t&&this._setYBlocks(t/150)},o([r.d,u("design:type",Object)],t.prototype,"yBlocks",void 0),o([r.d,u("design:type",Object)],t.prototype,"x",void 0),o([r.d,u("design:type",Object)],t.prototype,"viewportHeight",void 0),o([r.c,u("design:type",Object),u("design:paramtypes",[])],t.prototype,"y",null),o([r.c,u("design:type",Object),u("design:paramtypes",[])],t.prototype,"totalHeight",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object]),u("design:returntype",void 0)],t.prototype,"_setYBlocks",null),o([r.a,u("design:type",Function),u("design:paramtypes",[]),u("design:returntype",void 0)],t.prototype,"recalcPositions",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object]),u("design:returntype",void 0)],t.prototype,"setViewport",null),o([r.a,u("design:type",Function),u("design:paramtypes",[Object,Object,Object]),u("design:returntype",void 0)],t.prototype,"scrollIntoView",null),o([Object(a.Injectable)(),u("design:paramtypes",[i.a])],t)}();function d(t,e,n){void 0===n&&(n=0);for(var a=n,r=t.length-1;a!==r;){var i=Math.floor((a+r)/2);e(t[i])?r=i:a=a===i?r:i}return a}},"dBg+":function(t,e){e.f=Object.getOwnPropertySymbols},dD9F:function(t,e,n){var a=n("NykK"),r=n("shjB"),i=n("ExA7"),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&r(t.length)&&!!s[a(t)]}},dEH0:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{transform(t){return`${t} ms`}}},dNwA:function(t,e,n){!function(t){"use strict";t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n("wd/R"))},dTAl:function(t,e,n){var a=n("GoyQ"),r=Object.create,i=function(){function t(){}return function(e){if(!a(e))return{};if(r)return r(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},dgut:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("NEZu");n("Fgil");class r{constructor(t){this.dimlessBinaryPipe=t,this.style={height:"30px",width:"100px"},this.colors=[{backgroundColor:"rgba(40,140,234,0.2)",borderColor:"rgba(40,140,234,1)",pointBackgroundColor:"rgba(40,140,234,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(40,140,234,0.8)"}],this.options={animation:{duration:0},responsive:!0,maintainAspectRatio:!1,legend:{display:!1},elements:{line:{borderWidth:1}},tooltips:{enabled:!1,mode:"index",intersect:!1,custom:void 0,callbacks:{label:t=>this.isBinary?this.dimlessBinaryPipe.transform(t.yLabel):t.yLabel,title:()=>""}},scales:{yAxes:[{display:!1}],xAxes:[{display:!1}]}},this.datasets=[{data:[]}],this.labels=[]}ngOnInit(){const t=new a.a(this.chartCanvasRef,this.chartTooltipRef,(t,e)=>e+t.caretX+"px",t=>t.caretY-t.height-t.yPadding-5+"px");t.customColors={backgroundColor:this.colors[0].pointBackgroundColor,borderColor:this.colors[0].pointBorderColor},this.options.tooltips.custom=e=>{t.customTooltips(e)}}ngOnChanges(t){this.datasets[0].data=t.data.currentValue,this.labels=[...Array(t.data.currentValue.length)]}}},dt0z:function(t,e,n){var a=n("zoYe");t.exports=function(t){return null==t?"":a(t)}},"e+ae":function(t,e,n){!function(t){"use strict";var e="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function a(t){return t>1&&t<5}function r(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"pár sekúnd":"pár sekundami";case"ss":return e||r?i+(a(t)?"sekundy":"sekúnd"):i+"sekundami";case"m":return e?"minúta":r?"minútu":"minútou";case"mm":return e||r?i+(a(t)?"minúty":"minút"):i+"minútami";case"h":return e?"hodina":r?"hodinu":"hodinou";case"hh":return e||r?i+(a(t)?"hodiny":"hodín"):i+"hodinami";case"d":return e||r?"deň":"dňom";case"dd":return e||r?i+(a(t)?"dni":"dní"):i+"dňami";case"M":return e||r?"mesiac":"mesiacom";case"MM":return e||r?i+(a(t)?"mesiace":"mesiacov"):i+"mesiacmi";case"y":return e||r?"rok":"rokom";case"yy":return e||r?i+(a(t)?"roky":"rokov"):i+"rokmi"}}t.defineLocale("sk",{months:e,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},e4Nc:function(t,e,n){var a=n("fGT3"),r=n("k+1r"),i=n("JHgL"),s=n("pSRY"),o=n("H8j4");function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}u.prototype.clear=a,u.prototype.delete=r,u.prototype.get=i,u.prototype.has=s,u.prototype.set=o,t.exports=u},e5cp:function(t,e,n){var a=n("fmRc"),r=n("or5M"),i=n("HDyB"),s=n("seXi"),o=n("QqLw"),u=n("Z0cm"),l=n("DSRE"),d=n("c6wG"),c="[object Object]",f=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,g,p){var b=u(t),m=u(e),y=b?"[object Array]":o(t),v=m?"[object Array]":o(e),x=(y="[object Arguments]"==y?c:y)==c,_=(v="[object Arguments]"==v?c:v)==c,T=y==v;if(T&&l(t)){if(!l(e))return!1;b=!0,x=!1}if(T&&!x)return p||(p=new a),b||d(t)?r(t,e,n,h,g,p):i(t,e,y,n,h,g,p);if(!(1&n)){var O=x&&f.call(t,"__wrapped__"),w=_&&f.call(e,"__wrapped__");if(O||w){var S=O?t.value():t,I=w?e.value():e;return p||(p=new a),g(S,I,n,h,p)}}return!!T&&(p||(p=new a),s(t,e,n,h,g,p))}},"eDl+":function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},eIep:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("l7GE"),r=n("51Dv"),i=n("ZUHj"),s=n("lJxs"),o=n("Cfvw");function u(t,e){return"function"==typeof e?n=>n.pipe(u((n,a)=>Object(o.a)(t(n,a)).pipe(Object(s.a)((t,r)=>e(n,t,a,r))))):e=>e.lift(new l(t))}class l{constructor(t){this.project=t}call(t,e){return e.subscribe(new d(t,this.project))}}class d extends a.a{constructor(t,e){super(t),this.project=e,this.index=0}_next(t){let e;const n=this.index++;try{e=this.project(t,n)}catch(a){return void this.destination.error(a)}this._innerSub(e,t,n)}_innerSub(t,e,n){const a=this.innerSubscription;a&&a.unsubscribe();const s=new r.a(this,e,n),o=this.destination;o.add(s),this.innerSubscription=Object(i.a)(this,t,void 0,void 0,s),this.innerSubscription!==s&&o.add(this.innerSubscription)}_complete(){const{innerSubscription:t}=this;t&&!t.closed||super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=null}notifyComplete(t){this.destination.remove(t),this.innerSubscription=null,this.isStopped&&super._complete()}notifyNext(t,e,n,a,r){this.destination.next(e)}}},eTJe:function(t,e,n){"use strict";var a=n("s7LF"),r=n("LvDl"),i=n("cp0P"),s=(n("SgmB"),n("ZDA6"),n("sne2"),n("mtw6")),o=n("QFaf"),u=n("1Ni5"),l=(n("9nlD"),function(t){return t.editing="editing",t}({}));class d{}n.d(e,"a",(function(){return c}));class c{constructor(t,e,n,a,r,i,s){this.route=t,this.router=e,this.roleService=n,this.scopeService=a,this.notificationService=r,this.i18n=i,this.actionLabels=s,this.scopes=[],this.scopes_permissions=[],this.roleFormMode=l,this.resource=this.i18n("role"),this.createForm(),this.listenToChanges()}createForm(){this.roleForm=new o.a({name:new a.i("",{validators:[a.B.required],asyncValidators:[u.a.unique(this.roleService.exists,this.roleService)]}),description:new a.i(""),scopes_permissions:new a.i({})})}ngOnInit(){this.columns=[{prop:"scope",name:this.i18n("All"),flexGrow:2,cellTemplate:this.cellScopeCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"read",name:this.i18n("Read"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"create",name:this.i18n("Create"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"update",name:this.i18n("Update"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"delete",name:this.i18n("Delete"),flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl}],this.router.url.startsWith("/user-management/roles/edit")?(this.mode=this.roleFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.mode===this.roleFormMode.editing?this.initEdit():this.initCreate()}initCreate(){this.scopeService.list().subscribe(t=>{this.scopes=t,this.roleForm.get("scopes_permissions").setValue({})})}initEdit(){this.roleForm.get("name").disable(),this.route.params.subscribe(t=>{const e=[];e.push(this.scopeService.list()),e.push(this.roleService.get(t.name)),Object(i.a)(e).subscribe(t=>{this.scopes=t[0],["name","description","scopes_permissions"].forEach(e=>this.roleForm.get(e).setValue(t[1][e]))})})}listenToChanges(){this.roleForm.get("scopes_permissions").valueChanges.subscribe(t=>{const e=[];r.each(this.scopes,n=>{const a={read:!1,create:!1,update:!1,delete:!1};a.scope=n,n in t&&r.each(t[n],t=>{a[t]=!0}),e.push(a)}),this.scopes_permissions=e})}isRowChecked(t){const e=r.find(this.scopes_permissions,e=>e.scope===t);return!r.isUndefined(e)&&e.read&&e.create&&e.update&&e.delete}isHeaderChecked(t){let e=[t];return"scope"===t&&(e=["read","create","update","delete"]),e.every(t=>this.scopes_permissions.every(e=>e[t]))}onClickCellCheckbox(t,e,n=null){const a=r.cloneDeep(this.roleForm.getValue("scopes_permissions"));let i=[e];"scope"===e&&(i=["read","create","update","delete"]),t in a||(a[t]=[]),n&&n.target.checked||!r.isEqual(i.sort(),r.intersection(a[t],i).sort())?a[t]=r.union(a[t],i):(a[t]=r.difference(a[t],i),r.isEmpty(a[t])&&r.unset(a,t)),this.roleForm.get("scopes_permissions").setValue(a)}onClickHeaderCheckbox(t,e){const n=r.cloneDeep(this.roleForm.getValue("scopes_permissions"));let a=[t];"scope"===t&&(a=["read","create","update","delete"]),r.each(a,t=>{r.each(this.scopes,a=>{e.target.checked?n[a]=r.union(n[a],[t]):(n[a]=r.difference(n[a],[t]),r.isEmpty(n[a])&&r.unset(n,a))})}),this.roleForm.get("scopes_permissions").setValue(n)}getRequest(){const t=new d;return["name","description","scopes_permissions"].forEach(e=>t[e]=this.roleForm.get(e).value),t}createAction(){const t=this.getRequest();this.roleService.create(t).subscribe(()=>{this.notificationService.show(s.a.success,this.i18n("Created role '{{role_name}}'",{role_name:t.name})),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}editAction(){const t=this.getRequest();this.roleService.update(t).subscribe(()=>{this.notificationService.show(s.a.success,this.i18n("Updated role '{{role_name}}'",{role_name:t.name})),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}submit(){this.mode===this.roleFormMode.editing?this.editAction():this.createAction()}}},eUgh:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length,r=Array(a);++n<a;)r[n]=e(t[n],n,t);return r}},ebwN:function(t,e,n){var a=n("Cwc5")(n("Kz5y"),"Map");t.exports=a},efK2:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e,n){return a.isString(t)?(n=a.defaultTo(n,""),a.truncate(t,{length:e,omission:n})):t}}},"ej+x":function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("lOp/"),r=n("8Y7J"),i=n("IheW");let s=(()=>{class t{constructor(t,e){this.http=t,this.timerService=e,this.API_URL="api/feature_toggles",this.REFRESH_INTERVAL=3e4,this.featureToggleMap$=this.timerService.get(()=>this.http.get(this.API_URL),this.REFRESH_INTERVAL)}get(){return this.featureToggleMap$}}return t.ngInjectableDef=r["ɵɵdefineInjectable"]({factory:function(){return new t(r["ɵɵinject"](i.c),r["ɵɵinject"](a.a))},token:t,providedIn:"root"}),t})()},ekgI:function(t,e,n){var a=n("YESw"),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return a?void 0!==e[t]:r.call(e,t)}},ewvW:function(t,e,n){var a=n("HYAF");t.exports=function(t){return Object(a(t))}},f5p1:function(t,e,n){var a=n("2oRo"),r=n("iSVu"),i=a.WeakMap;t.exports="function"==typeof i&&/native code/.test(r(i))},f95s:function(t,e,n){"use strict";n.d(e,"a",(function(){return p}));var a=n("2vnA"),r=n("X+05"),i=n("afOK"),s=n.n(i),o=n("RBan"),u=n.n(o),l=n("MJIl"),d=n.n(l),c=n("Jlc5"),f=n.n(c),h=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},g=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},p=function(){function t(t,e,n,a){var r=this;this.data=t,this.parent=e,this.treeModel=n,this.position=0,this.allowDrop=function(t,e){return r.options.allowDrop(t,{parent:r,index:0},e)},this.allowDragoverStyling=function(){return r.options.allowDragoverStyling},null==this.id&&(this.id=Math.floor(1e13*Math.random())),this.index=a,this.getField("children")&&this._initChildren(),this.autoLoadChildren()}return Object.defineProperty(t.prototype,"isHidden",{get:function(){return this.treeModel.isHidden(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.treeModel.isExpanded(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isActive",{get:function(){return this.treeModel.isActive(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isFocused",{get:function(){return this.treeModel.isNodeFocused(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isSelected",{get:function(){return this.isSelectable()?this.treeModel.isSelected(this):d()(this.children,(function(t){return t.isSelected}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isAllSelected",{get:function(){return this.isSelectable()?this.treeModel.isSelected(this):f()(this.children,(function(t){return t.isAllSelected}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isPartiallySelected",{get:function(){return this.isSelected&&!this.isAllSelected},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"level",{get:function(){return this.parent?this.parent.level+1:0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return this.parent?this.parent.path.concat([this.id]):[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"elementRef",{get:function(){throw"Element Ref is no longer supported since introducing virtual scroll\n\n      You may use a template to obtain a reference to the element"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalNode",{get:function(){return this._originalNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasChildren",{get:function(){return!!(this.getField("hasChildren")||this.children&&this.children.length>0)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isCollapsed",{get:function(){return!this.isExpanded},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLeaf",{get:function(){return!this.hasChildren},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isRoot",{get:function(){return this.parent.data.virtual},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"realParent",{get:function(){return this.isRoot?null:this.parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return this.treeModel.options},enumerable:!0,configurable:!0}),t.prototype.fireEvent=function(t){this.treeModel.fireEvent(t)},Object.defineProperty(t.prototype,"displayField",{get:function(){return this.getField("display")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.getField("id")},set:function(t){this.setField("id",t)},enumerable:!0,configurable:!0}),t.prototype.getField=function(t){return this.data[this.options[t+"Field"]]},t.prototype.setField=function(t,e){this.data[this.options[t+"Field"]]=e},t.prototype._findAdjacentSibling=function(t,e){void 0===e&&(e=!1);var n=this._getParentsChildren(e),a=n.indexOf(this);return n.length>a+t?n[a+t]:null},t.prototype.findNextSibling=function(t){return void 0===t&&(t=!1),this._findAdjacentSibling(1,t)},t.prototype.findPreviousSibling=function(t){return void 0===t&&(t=!1),this._findAdjacentSibling(-1,t)},t.prototype.getVisibleChildren=function(){return this.visibleChildren},Object.defineProperty(t.prototype,"visibleChildren",{get:function(){return(this.children||[]).filter((function(t){return!t.isHidden}))},enumerable:!0,configurable:!0}),t.prototype.getFirstChild=function(t){void 0===t&&(t=!1);var e=t?this.visibleChildren:this.children;return s()(e||[])},t.prototype.getLastChild=function(t){void 0===t&&(t=!1);var e=t?this.visibleChildren:this.children;return u()(e||[])},t.prototype.findNextNode=function(t,e){return void 0===t&&(t=!0),void 0===e&&(e=!1),t&&this.isExpanded&&this.getFirstChild(e)||this.findNextSibling(e)||this.parent&&this.parent.findNextNode(!1,e)},t.prototype.findPreviousNode=function(t){void 0===t&&(t=!1);var e=this.findPreviousSibling(t);return e?e._getLastOpenDescendant(t):this.realParent},t.prototype._getLastOpenDescendant=function(t){void 0===t&&(t=!1);var e=this.getLastChild(t);return this.isCollapsed||!e?this:e._getLastOpenDescendant(t)},t.prototype._getParentsChildren=function(t){return void 0===t&&(t=!1),this.parent&&(t?this.parent.getVisibleChildren():this.parent.children)||[]},t.prototype.getIndexInParent=function(t){return void 0===t&&(t=!1),this._getParentsChildren(t).indexOf(this)},t.prototype.isDescendantOf=function(t){return this===t||this.parent&&this.parent.isDescendantOf(t)},t.prototype.getNodePadding=function(){return this.options.levelPadding*(this.level-1)+"px"},t.prototype.getClass=function(){return[this.options.nodeClass(this),"tree-node-level-"+this.level].join(" ")},t.prototype.onDrop=function(t){this.mouseAction("drop",t.event,{from:t.element,to:{parent:this,index:0,dropOnNode:!0}})},t.prototype.allowDrag=function(){return this.options.allowDrag(this)},t.prototype.loadNodeChildren=function(){var t=this;return this.options.getChildren?Promise.resolve(this.options.getChildren(this)).then((function(e){e&&(t.setField("children",e),t._initChildren(),t.options.useTriState&&t.treeModel.isSelected(t)&&t.setIsSelected(!0),t.children.forEach((function(t){t.getField("isExpanded")&&t.hasChildren&&t.expand()})))})).then((function(){t.fireEvent({eventName:r.a.loadNodeChildren,node:t})})):Promise.resolve()},t.prototype.expand=function(){return this.isExpanded||this.toggleExpanded(),this},t.prototype.collapse=function(){return this.isExpanded&&this.toggleExpanded(),this},t.prototype.doForAll=function(t){var e=this;Promise.resolve(t(this)).then((function(){e.children&&e.children.forEach((function(e){return e.doForAll(t)}))}))},t.prototype.expandAll=function(){this.doForAll((function(t){return t.expand()}))},t.prototype.collapseAll=function(){this.doForAll((function(t){return t.collapse()}))},t.prototype.ensureVisible=function(){return this.realParent&&(this.realParent.expand(),this.realParent.ensureVisible()),this},t.prototype.toggleExpanded=function(){return this.setIsExpanded(!this.isExpanded),this},t.prototype.setIsExpanded=function(t){return this.hasChildren&&this.treeModel.setExpandedNode(this,t),this},t.prototype.autoLoadChildren=function(){var t=this;this.handler=Object(a.e)((function(){return t.isExpanded}),(function(e){!t.children&&t.hasChildren&&e&&t.loadNodeChildren()}),{fireImmediately:!0})},t.prototype.dispose=function(){this.children&&this.children.forEach((function(t){return t.dispose()})),this.handler&&this.handler(),this.parent=null,this.children=null},t.prototype.setIsActive=function(t,e){return void 0===e&&(e=!1),this.treeModel.setActiveNode(this,t,e),t&&this.focus(this.options.scrollOnActivate),this},t.prototype.isSelectable=function(){return this.isLeaf||!this.children||!this.options.useTriState},t.prototype.setIsSelected=function(t){return this.isSelectable()?this.treeModel.setSelectedNode(this,t):this.visibleChildren.forEach((function(e){return e.setIsSelected(t)})),this},t.prototype.toggleSelected=function(){return this.setIsSelected(!this.isSelected),this},t.prototype.toggleActivated=function(t){return void 0===t&&(t=!1),this.setIsActive(!this.isActive,t),this},t.prototype.setActiveAndVisible=function(t){return void 0===t&&(t=!1),this.setIsActive(!0,t).ensureVisible(),setTimeout(this.scrollIntoView.bind(this)),this},t.prototype.scrollIntoView=function(t){void 0===t&&(t=!1),this.treeModel.virtualScroll.scrollIntoView(this,t)},t.prototype.focus=function(t){void 0===t&&(t=!0);var e=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(this),t&&this.scrollIntoView(),e&&this.fireEvent({eventName:r.a.blur,node:e}),this.fireEvent({eventName:r.a.focus,node:this}),this},t.prototype.blur=function(){var t=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(null),t&&this.fireEvent({eventName:r.a.blur,node:this}),this},t.prototype.setIsHidden=function(t){this.treeModel.setIsHidden(this,t)},t.prototype.hide=function(){this.setIsHidden(!0)},t.prototype.show=function(){this.setIsHidden(!1)},t.prototype.mouseAction=function(t,e,n){void 0===n&&(n=null),this.treeModel.setFocus(!0);var a=this.options.actionMapping.mouse[t];a&&a(this.treeModel,this,e,n)},t.prototype.getSelfHeight=function(){return this.options.nodeHeight(this)},t.prototype._initChildren=function(){var e=this;this.children=this.getField("children").map((function(n,a){return new t(n,e,e.treeModel,a)}))},h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isHidden",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isExpanded",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isActive",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isFocused",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isSelected",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isAllSelected",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"isPartiallySelected",null),h([a.d,g("design:type",Array)],t.prototype,"children",void 0),h([a.d,g("design:type",Number)],t.prototype,"index",void 0),h([a.d,g("design:type",Object)],t.prototype,"position",void 0),h([a.d,g("design:type",Number)],t.prototype,"height",void 0),h([a.c,g("design:type",Number),g("design:paramtypes",[])],t.prototype,"level",null),h([a.c,g("design:type",Array),g("design:paramtypes",[])],t.prototype,"path",null),h([a.c,g("design:type",Object),g("design:paramtypes",[])],t.prototype,"visibleChildren",null),h([a.a,g("design:type",Function),g("design:paramtypes",[Object]),g("design:returntype",void 0)],t.prototype,"setIsSelected",null),h([a.a,g("design:type",Function),g("design:paramtypes",[]),g("design:returntype",void 0)],t.prototype,"_initChildren",null),t}()},fGT3:function(t,e,n){var a=n("4kuk"),r=n("Xi7e"),i=n("ebwN");t.exports=function(){this.size=0,this.__data__={hash:new a,map:new(i||r),string:new a}}},fHMY:function(t,e,n){var a,r=n("glrk"),i=n("N+g0"),s=n("eDl+"),o=n("0BK2"),u=n("G+Rx"),l=n("zBJ4"),d=n("93I0")("IE_PROTO"),c=function(){},f=function(t){return"<script>"+t+"<\/script>"},h=function(){try{a=document.domain&&new ActiveXObject("htmlfile")}catch(r){}var t,e;h=a?function(t){t.write(f("")),t.close();var e=t.parentWindow.Object;return t=null,e}(a):((e=l("iframe")).style.display="none",u.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(f("document.F=Object")),t.close(),t.F);for(var n=s.length;n--;)delete h.prototype[s[n]];return h()};o[d]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(c.prototype=r(t),n=new c,c.prototype=null,n[d]=t):n=h(),void 0===e?n:i(n,e)}},"fR/l":function(t,e,n){var a=n("CH3K"),r=n("Z0cm");t.exports=function(t,e,n){var i=e(t);return r(t)?i:a(i,n(t))}},fdAy:function(t,e,n){"use strict";var a=n("I+eb"),r=n("ntOU"),i=n("4WOD"),s=n("0rvr"),o=n("1E5z"),u=n("kRJp"),l=n("busE"),d=n("tiKp"),c=n("xDBR"),f=n("P4y1"),h=n("rpNk"),g=h.IteratorPrototype,p=h.BUGGY_SAFARI_ITERATORS,b=d("iterator"),m=function(){return this};t.exports=function(t,e,n,d,h,y,v){r(n,e,d);var x,_,T,O=function(t){if(t===h&&C)return C;if(!p&&t in I)return I[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},w=e+" Iterator",S=!1,I=t.prototype,N=I[b]||I["@@iterator"]||h&&I[h],C=!p&&N||O(h),R="Array"==e&&I.entries||N;if(R&&(x=i(R.call(new t)),g!==Object.prototype&&x.next&&(c||i(x)===g||(s?s(x,g):"function"!=typeof x[b]&&u(x,b,m)),o(x,w,!0,!0),c&&(f[w]=m))),"values"==h&&N&&"values"!==N.name&&(S=!0,C=function(){return N.call(this)}),c&&!v||I[b]===C||u(I,b,C),f[e]=C,h)if(_={values:O("values"),keys:y?C:O("keys"),entries:O("entries")},v)for(T in _)!p&&!S&&T in I||l(I,T,_[T]);else a({target:e,proto:!0,forced:p||S},_);return _}},fmRc:function(t,e,n){var a=n("Xi7e"),r=n("77Zs"),i=n("L8xA"),s=n("gCq4"),o=n("VaNO"),u=n("0Cz8");function l(t){var e=this.__data__=new a(t);this.size=e.size}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=s,l.prototype.has=o,l.prototype.set=u,t.exports=l},ftKO:function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},fxL3:function(t,e,n){"use strict";n.d(e,"a",(function(){return g}));var a=n("8Y7J"),r=n("MP8s"),i=n("gk6K"),s=n("mfoh"),o=n("HIU9"),u=n("ijCd"),l=n.n(u),d=n("JZM8"),c=n.n(d),f=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},h=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},g=function(){function t(t,e){var n=this;this.treeModel=t,this.treeDraggedElement=e,t.eventNames.forEach((function(t){return n[t]=new a.EventEmitter})),t.subscribeToState((function(t){return n.stateChange.emit(t)}))}return Object.defineProperty(t.prototype,"nodes",{set:function(t){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{set:function(t){},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focused",{set:function(t){this.treeModel.setFocus(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{set:function(t){this.treeModel.setState(t)},enumerable:!0,configurable:!0}),t.prototype.onKeydown=function(t){if(this.treeModel.isFocused&&!l()(["input","textarea"],document.activeElement.tagName.toLowerCase())){var e=this.treeModel.getFocusedNode();this.treeModel.performKeyAction(e,t)}},t.prototype.onMousedown=function(t){(function t(e,n){return!e||e.localName!==n&&t(e.parentElement,n)})(t.target,"tree-root")&&this.treeModel.setFocus(!1)},t.prototype.ngOnChanges=function(t){(t.options||t.nodes)&&this.treeModel.setData({options:t.options&&t.options.currentValue,nodes:t.nodes&&t.nodes.currentValue,events:c()(this,this.treeModel.eventNames)})},t.prototype.sizeChanged=function(){this.viewportComponent.setViewport()},f([Object(a.ContentChild)("loadingTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"loadingTemplate",void 0),f([Object(a.ContentChild)("treeNodeTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeTemplate",void 0),f([Object(a.ContentChild)("treeNodeWrapperTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeWrapperTemplate",void 0),f([Object(a.ContentChild)("treeNodeFullTemplate",{static:!1}),h("design:type",a.TemplateRef)],t.prototype,"treeNodeFullTemplate",void 0),f([Object(a.ViewChild)("viewport",{static:!1}),h("design:type",o.a)],t.prototype,"viewportComponent",void 0),f([Object(a.Input)(),h("design:type",Array),h("design:paramtypes",[Array])],t.prototype,"nodes",null),f([Object(a.Input)(),h("design:type",s.b),h("design:paramtypes",[s.b])],t.prototype,"options",null),f([Object(a.Input)(),h("design:type",Boolean),h("design:paramtypes",[Boolean])],t.prototype,"focused",null),f([Object(a.Input)(),h("design:type",Object),h("design:paramtypes",[Object])],t.prototype,"state",null),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"toggleExpanded",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"activate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"deactivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"nodeActivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"nodeDeactivate",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"select",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"deselect",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"focus",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"blur",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"updateData",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"initialized",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"moveNode",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"copyNode",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"loadNodeChildren",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"changeFilter",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"event",void 0),f([Object(a.Output)(),h("design:type",Object)],t.prototype,"stateChange",void 0),f([Object(a.HostListener)("body: keydown",["$event"]),h("design:type",Function),h("design:paramtypes",[Object]),h("design:returntype",void 0)],t.prototype,"onKeydown",null),f([Object(a.HostListener)("body: mousedown",["$event"]),h("design:type",Function),h("design:paramtypes",[Object]),h("design:returntype",void 0)],t.prototype,"onMousedown",null),f([Object(a.Component)({selector:"Tree, tree-root",providers:[r.a],styles:[],template:'\n      <tree-viewport #viewport>\n          <div\n                  class="angular-tree-component"\n                  [class.node-dragging]="treeDraggedElement.isDragging()"\n                  [class.angular-tree-component-rtl]="treeModel.options.rtl">\n              <tree-node-collection\n                      *ngIf="treeModel.roots"\n                      [nodes]="treeModel.roots"\n                      [treeModel]="treeModel"\n                      [templates]="{\n            loadingTemplate: loadingTemplate,\n            treeNodeTemplate: treeNodeTemplate,\n            treeNodeWrapperTemplate: treeNodeWrapperTemplate,\n            treeNodeFullTemplate: treeNodeFullTemplate\n          }">\n              </tree-node-collection>\n              <tree-node-drop-slot\n                      class="empty-tree-drop-slot"\n                      *ngIf="treeModel.isEmptyTree()"\n                      [dropIndex]="0"\n                      [node]="treeModel.virtualRoot">\n              </tree-node-drop-slot>\n          </div>\n      </tree-viewport>\n  '}),h("design:paramtypes",[r.a,i.a])],t)}()},fzPg:function(t,e,n){!function(t){"use strict";t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n("wd/R"))},"g6v/":function(t,e,n){var a=n("0Dky");t.exports=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},gCq4:function(t,e){t.exports=function(t){return this.__data__.get(t)}},gFfm:function(t,e){t.exports=function(t,e){for(var n=-1,a=null==t?0:t.length;++n<a&&!1!==e(t[n],n,t););return t}},gRHU:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("2fFW"),r=n("NJ4a");const i={closed:!0,next(t){},error(t){if(a.a.useDeprecatedSynchronousErrorHandling)throw t;Object(r.a)(t)},complete(){}}},gVVK:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r=t+" ";switch(n){case"s":return e||a?"nekaj sekund":"nekaj sekundami";case"ss":return r+(1===t?e?"sekundo":"sekundi":2===t?e||a?"sekundi":"sekundah":t<5?e||a?"sekunde":"sekundah":"sekund");case"m":return e?"ena minuta":"eno minuto";case"mm":return r+(1===t?e?"minuta":"minuto":2===t?e||a?"minuti":"minutama":t<5?e||a?"minute":"minutami":e||a?"minut":"minutami");case"h":return e?"ena ura":"eno uro";case"hh":return r+(1===t?e?"ura":"uro":2===t?e||a?"uri":"urama":t<5?e||a?"ure":"urami":e||a?"ur":"urami");case"d":return e||a?"en dan":"enim dnem";case"dd":return r+(1===t?e||a?"dan":"dnem":2===t?e||a?"dni":"dnevoma":e||a?"dni":"dnevi");case"M":return e||a?"en mesec":"enim mesecem";case"MM":return r+(1===t?e||a?"mesec":"mesecem":2===t?e||a?"meseca":"mesecema":t<5?e||a?"mesece":"meseci":e||a?"mesecev":"meseci");case"y":return e||a?"eno leto":"enim letom";case"yy":return r+(1===t?e||a?"leto":"letom":2===t?e||a?"leti":"letoma":t<5?e||a?"leta":"leti":e||a?"let":"leti")}}t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},gekB:function(t,e,n){!function(t){"use strict";var e="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",e[7],e[8],e[9]];function a(t,a,r,i){var s="";switch(r){case"s":return i?"muutaman sekunnin":"muutama sekunti";case"ss":return i?"sekunnin":"sekuntia";case"m":return i?"minuutin":"minuutti";case"mm":s=i?"minuutin":"minuuttia";break;case"h":return i?"tunnin":"tunti";case"hh":s=i?"tunnin":"tuntia";break;case"d":return i?"päivän":"päivä";case"dd":s=i?"päivän":"päivää";break;case"M":return i?"kuukauden":"kuukausi";case"MM":s=i?"kuukauden":"kuukautta";break;case"y":return i?"vuoden":"vuosi";case"yy":s=i?"vuoden":"vuotta"}return function(t,a){return t<10?a?n[t]:e[t]:t}(t,i)+" "+s}t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},gjCT:function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};t.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n("wd/R"))},gk6K:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("8Y7J"),r=function(){function t(){this._draggedElement=null}return t.prototype.set=function(t){this._draggedElement=t},t.prototype.get=function(){return this._draggedElement},t.prototype.isDragging=function(){return!!this.get()},function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.Injectable)()],t)}()},glrk:function(t,e,n){var a=n("hh1v");t.exports=function(t){if(!a(t))throw TypeError(String(t)+" is not an object");return t}},gp3X:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse");n("sb0X"),n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return o}));var i=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](3,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](4,2)],(function(t,e){var n=e.component,a=t(e,4,0,n.icons.spinner,n.icons.spin);t(e,3,0,a)}),null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,5,"button",[["class","btn btn-secondary tc_submitButton"]],[[8,"type",0],[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.submit(n)&&a),a}),null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵncd"](null,0),(t()(),a["ɵand"](16777216,null,null,1,null,s)),a["ɵdid"](5,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"btn btn-secondary tc_submitButton",n.btnClass),t(e,5,0,n.loading)}),(function(t,e){var n=e.component;t(e,0,0,n.type,n.loading||n.disabled)}))}},gpbi:function(t,e,n){var a=n("ZWtO"),r=n("KxBF");t.exports=function(t,e){return e.length<2?t:a(t,r(e,0,-1))}},"hKI/":function(t,e){var n=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,i=/^0o[0-7]+$/i,s=parseInt,o="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,l=o||u||Function("return this")(),d=Object.prototype.toString,c=Math.max,f=Math.min,h=function(){return l.Date.now()};function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function p(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==d.call(t)}(t))return NaN;if(g(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=g(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var o=r.test(t);return o||i.test(t)?s(t.slice(2),o?2:8):a.test(t)?NaN:+t}t.exports=function(t,e,n){var a=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return g(n)&&(a="leading"in n?!!n.leading:a,r="trailing"in n?!!n.trailing:r),function(t,e,n){var a,r,i,s,o,u,l=0,d=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=a,i=r;return a=r=void 0,l=e,s=t.apply(i,n)}function v(t){return l=t,o=setTimeout(_,e),d?y(t):s}function x(t){var n=t-u;return void 0===u||n>=e||n<0||b&&t-l>=i}function _(){var t=h();if(x(t))return T(t);o=setTimeout(_,function(t){var n=e-(t-u);return b?f(n,i-(t-l)):n}(t))}function T(t){return o=void 0,m&&a?y(t):(a=r=void 0,s)}function O(){var t=h(),n=x(t);if(a=arguments,r=this,u=t,n){if(void 0===o)return v(u);if(b)return o=setTimeout(_,e),y(u)}return void 0===o&&(o=setTimeout(_,e)),s}return e=p(e)||0,g(n)&&(d=!!n.leading,i=(b="maxWait"in n)?c(p(n.maxWait)||0,e):i,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==o&&clearTimeout(o),l=0,a=u=r=o=void 0},O.flush=function(){return void 0===o?s:T(h())},O}(t,e,{leading:a,maxWait:e,trailing:r})}},hKrs:function(t,e,n){!function(t){"use strict";t.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n("wd/R"))},heNW:function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},hfeG:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("s7LF"),s=n("+gVj"),o=n("EmSq"),u=n("Fgil"),l=n("aXbf"),d=n("pYKc"),c=n("ppaS"),f=n("GiVz"),h=n("mXUL"),g=n("EEJc"),p=n("ajRT"),b=n("gp3X"),m=n("sb0X"),y=n("KVJa"),v=n("Z21x"),x=n("sne2"),_=n("Rf2I"),T=n("LqlI"),O=n("2EZI");n.d(e,"a",(function(){return j}));var w=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function S(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.titleText)}))}function I(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.message)}))}function N(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),a["ɵpod"](3,{required:0}),(t()(),a["ɵted"](4,null,[" "," "]))],(function(t,e){var n=t(e,3,0,!0===(null==e.parent.context.$implicit?null:e.parent.context.$implicit.required));t(e,2,0,"cd-col-form-label",n)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name),t(e,4,0,e.parent.context.$implicit.label)}))}function C(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,6,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0;return"input"===e&&(r=!1!==a["ɵnov"](t,1)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,1)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,1)._compositionEnd(n.target.value)&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.e,[a.Renderer2,a.ElementRef,[2,i.b]],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.e]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,16384,null,0,s.h,[[3,i.d],s.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,6,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,1,[e.parent.context.$implicit.type,e.parent.context.$implicit.name,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,6).validClass,a["ɵnov"](e,6).invalidClass])}))}function R(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,7,"input",[["cdDimlessBinary",""],["class","form-control"],["type","text"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var r=!0;return"input"===e&&(r=!1!==a["ɵnov"](t,1)._handleInput(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),"compositionstart"===e&&(r=!1!==a["ɵnov"](t,1)._compositionStart()&&r),"compositionend"===e&&(r=!1!==a["ɵnov"](t,1)._compositionEnd(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,6).onBlur(n.target.value)&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.e,[a.Renderer2,a.ElementRef,[2,i.b]],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.e]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,81920,null,0,o.a,[a.ElementRef,i.q,u.a,l.a],null,null),a["ɵdid"](7,16384,null,0,s.h,[[3,i.d],s.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,6,0),t(e,7,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,1,[e.parent.context.$implicit.name,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,7).validClass,a["ɵnov"](e,7).invalidClass])}))}function A(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,i.v,[a.ElementRef,a.Renderer2,[2,i.A]],{ngValue:[0,"ngValue"]},null),a["ɵdid"](2,147456,null,0,i.F,[a.ElementRef,a.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,null),t(e,2,0,null)}),(function(t,e){t(e,3,0,null==e.parent.parent.context.$implicit?null:null==e.parent.parent.context.$implicit.typeConfig?null:e.parent.parent.context.$implicit.typeConfig.placeholder)}))}function k(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),a["ɵdid"](1,147456,null,0,i.v,[a.ElementRef,a.Renderer2,[2,i.A]],{value:[0,"value"]},null),a["ɵdid"](2,147456,null,0,i.F,[a.ElementRef,a.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),a["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.text)}))}function E(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,10,"select",[["class","form-control custom-select"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var r=!0;return"change"===e&&(r=!1!==a["ɵnov"](t,1).onChange(n.target.value)&&r),"blur"===e&&(r=!1!==a["ɵnov"](t,1).onTouched()&&r),r}),null,null)),a["ɵdid"](1,16384,null,0,i.A,[a.Renderer2,a.ElementRef],null,null),a["ɵprd"](1024,null,i.p,(function(t){return[t]}),[i.A]),a["ɵdid"](3,671744,null,0,i.j,[[3,i.d],[8,null],[8,null],[6,i.p],[2,i.E]],{name:[0,"name"]},null),a["ɵprd"](2048,null,i.q,null,[i.j]),a["ɵdid"](5,16384,null,0,i.r,[[4,i.q]],null,null),a["ɵdid"](6,16384,null,0,s.h,[[3,i.d],s.a],{formControlName:[0,"formControlName"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,A)),a["ɵdid"](8,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,k)),a["ɵdid"](10,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,3,0,e.parent.context.$implicit.name),t(e,6,0,e.parent.context.$implicit.name),t(e,8,0,null==e.parent.context.$implicit?null:null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.placeholder),t(e,10,0,null==e.parent.context.$implicit?null:null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.options)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name,a["ɵnov"](e,5).ngClassUntouched,a["ɵnov"](e,5).ngClassTouched,a["ɵnov"](e,5).ngClassPristine,a["ɵnov"](e,5).ngClassDirty,a["ɵnov"](e,5).ngClassValid,a["ɵnov"](e,5).ngClassInvalid,a["ɵnov"](e,5).ngClassPending,a["ɵnov"](e,6).validClass,a["ɵnov"](e,6).invalidClass)}))}function L(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-select-badges",[],[[8,"id",0]],null,null,d.b,d.a)),a["ɵdid"](1,49152,null,0,c.a,[f.a],{data:[0,"data"],options:[1,"options"],messages:[2,"messages"],customBadges:[3,"customBadges"]},null)],(function(t,e){t(e,1,0,e.parent.context.$implicit.value,null==e.parent.context.$implicit?null:null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.options,null==e.parent.context.$implicit?null:null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.messages,null==e.parent.context.$implicit?null:null==e.parent.context.$implicit.typeConfig?null:e.parent.context.$implicit.typeConfig.customBadges)}),(function(t,e){t(e,0,0,e.parent.context.$implicit.name)}))}function D(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),a["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.getError(e.parent.context.$implicit))}))}function P(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,21,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,20,"div",[],[[8,"className",0],[2,"has-error",null],[2,"has-success",null]],null,null,h.b,h.a)),a["ɵdid"](2,1163264,null,2,s.c,[a.ElementRef,s.g],null,null),a["ɵqud"](603979776,1,{FormControlNames:1}),a["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),a["ɵand"](16777216,null,0,1,null,N)),a["ɵdid"](6,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](7,0,null,0,14,"div",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](9,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpod"](10,{"cd-col-form-input":0,"col-sm-12":1}),(t()(),a["ɵand"](16777216,null,null,2,null,C)),a["ɵdid"](12,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),a["ɵpad"](13,2),(t()(),a["ɵand"](16777216,null,null,1,null,R)),a["ɵdid"](15,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,E)),a["ɵdid"](17,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,L)),a["ɵdid"](19,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,D)),a["ɵdid"](21,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0),t(e,6,0,e.context.$implicit.label);var r=t(e,10,0,e.context.$implicit.label,!e.context.$implicit.label);t(e,9,0,r);var i=t(e,13,0,"text","number").includes(e.context.$implicit.type);t(e,12,0,i),t(e,15,0,"binary"===e.context.$implicit.type),t(e,17,0,"select"===e.context.$implicit.type),t(e,19,0,"select-badges"===e.context.$implicit.type),t(e,21,0,n.formGroup.showError(e.context.$implicit.name,a["ɵnov"](e.parent,7)))}),(function(t,e){t(e,1,0,a["ɵinlineInterpolate"](1,"form-group row cd-",e.context.$implicit.name,"-form-group"),a["ɵnov"](e,2).hasErrors,a["ɵnov"](e,2).hasSuccess)}))}function M(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,22,"cd-modal",[],null,null,null,g.c,g.b)),a["ɵdid"](1,49152,null,0,p.a,[],{modalRef:[0,"modalRef"]},null),(t()(),a["ɵand"](16777216,null,0,1,null,S)),a["ɵdid"](3,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵeld"](4,0,null,1,18,null,null,null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,17,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var r=!0;return"submit"===e&&(r=!1!==a["ɵnov"](t,7).onSubmit(n)&&r),"reset"===e&&(r=!1!==a["ɵnov"](t,7).onReset()&&r),"submit"===e&&(r=!1!==a["ɵnov"](t,10).onSubmit()&&r),r}),null,null)),a["ɵdid"](6,16384,null,0,i.G,[],null,null),a["ɵdid"](7,540672,[["formDir",4]],0,i.l,[[8,null],[8,null]],{form:[0,"form"]},null),a["ɵprd"](2048,null,i.d,null,[i.l]),a["ɵdid"](9,16384,null,0,i.s,[[4,i.d]],null,null),a["ɵdid"](10,16384,null,0,s.d,[],{formGroup:[0,"formGroup"]},null),(t()(),a["ɵeld"](11,0,null,null,4,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),a["ɵand"](16777216,null,null,1,null,I)),a["ɵdid"](13,16384,null,0,r.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,P)),a["ɵdid"](15,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](16,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),a["ɵeld"](17,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](18,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0,r=t.component;return"submitAction"===e&&(a=!1!==r.onSubmitForm(r.formGroup.value)&&a),a}),b.b,b.a)),a["ɵdid"](19,114688,null,0,m.a,[a.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),a["ɵted"](20,0,[" "," "])),(t()(),a["ɵeld"](21,0,null,null,1,"cd-back-button",[],null,null,null,y.b,y.a)),a["ɵdid"](22,49152,null,0,v.a,[r.Location,x.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,3,0,n.titleText),t(e,7,0,n.formGroup),t(e,10,0,n.formGroup),t(e,13,0,n.message),t(e,15,0,n.fields),t(e,19,0,n.formGroup),t(e,22,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,5,0,a["ɵnov"](e,9).ngClassUntouched,a["ɵnov"](e,9).ngClassTouched,a["ɵnov"](e,9).ngClassPristine,a["ɵnov"](e,9).ngClassDirty,a["ɵnov"](e,9).ngClassValid,a["ɵnov"](e,9).ngClassInvalid,a["ɵnov"](e,9).ngClassPending),t(e,20,0,n.submitButtonText)}))}function q(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"cd-form-modal",[],null,null,null,M,w)),a["ɵdid"](1,114688,null,0,_.a,[T.a,O.a,l.a,u.a,f.a],null,null)],(function(t,e){t(e,1,0)}),null)}var j=a["ɵccf"]("cd-form-modal",_.a,q,{},{},[])},hgQt:function(t,e,n){var a=n("Juji"),r=n("4sDh");t.exports=function(t,e){return null!=t&&r(t,e,a)}},hh1v:function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},honF:function(t,e,n){!function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},week:{dow:1,doy:4}})}(n("wd/R"))},hpHm:function(t,e,n){"use strict";n.d(e,"a",(function(){return g})),n.d(e,"b",(function(){return p})),n.d(e,"c",(function(){return c})),n.d(e,"d",(function(){return h})),n.d(e,"e",(function(){return o})),n.d(e,"f",(function(){return s})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return u})),n.d(e,"i",(function(){return y})),n.d(e,"j",(function(){return d}));var a=n("8Y7J");class r{constructor(t,e){this.open=t,this.close=e||t}isManual(){return"manual"===this.open||"manual"===this.close}}const i={hover:["mouseover","mouseout"],focus:["focusin","focusout"]};function s(t,e=i){const n=(t||"").trim();if(0===n.length)return[];const a=n.split(/\s+/).map(t=>t.split(":")).map(t=>{const n=e[t[0]]||t;return new r(n[0],n[1])}),s=a.filter(t=>t.isManual());if(s.length>1)throw new Error("Triggers parse error: only one manual trigger is allowed");if(1===s.length&&a.length>1)throw new Error("Triggers parse error: manual trigger can't be mixed with other triggers");return a}function o(t,e){const n=s(e.triggers),a=e.target;if(1===n.length&&n[0].isManual())return Function.prototype;const r=[],i=[],o=()=>{i.forEach(t=>r.push(t())),i.length=0};return n.forEach(n=>{const s=n.open===n.close,u=s?e.toggle:e.show;s||i.push(()=>t.listen(a,n.close,e.hide)),r.push(t.listen(a,n.open,()=>u(o)))}),()=>{r.forEach(t=>t())}}function u(t,e){return e.outsideClick?t.listen("document","click",t=>{e.target&&e.target.contains(t.target)||e.targets&&e.targets.some(e=>e.contains(t.target))||e.hide()}):Function.prototype}function l(t,e){return e.outsideEsc?t.listen("document","keyup.esc",t=>{e.target&&e.target.contains(t.target)||e.targets&&e.targets.some(e=>e.contains(t.target))||e.hide()}):Function.prototype}const d="undefined"!=typeof window&&window||{},c=d.document;let f;function h(){return void 0===d||(void 0===d.__theme?f?"bs3"===f:(f=function(){if("undefined"==typeof document)return null;const t=document.createElement("span");t.innerText="test bs version",document.body.appendChild(t),t.classList.add("d-none");const e=t.getBoundingClientRect();return document.body.removeChild(t),e&&0===e.top?"bs4":"bs3"}(),"bs3"===f):"bs4"!==d.__theme)}function g(t){return function(t,e){const n=` __${e}Value`;Object.defineProperty(t,e,{get(){return this[n]},set(t){const a=this[n];this[n]=t,a!==t&&this[e+"Change"]&&this[e+"Change"].emit(t)}})}}class p{static reflow(t){}static getStyles(t){let e=t.ownerDocument.defaultView;return e&&e.opener||(e=d),e.getComputedStyle(t)}}const b={},m="undefined"==typeof console||!("warn"in console);function y(t){!Object(a.isDevMode)()||m||t in b||(b[t]=!0,console.warn(t))}},hrfs:function(t,e,n){"use strict";n.d(e,"a",(function(){return b})),n.d(e,"b",(function(){return m})),n.d(e,"c",(function(){return g}));var a=n("8Y7J"),r=n("MO+k"),i=n("2Vo4"),s=n("LvDl");const o=[[255,99,132],[54,162,235],[255,206,86],[231,233,237],[75,192,192],[151,187,205],[220,220,220],[247,70,74],[70,191,189],[253,180,92],[148,159,177],[77,83,96]];function u(t,e){return"rgba("+t.concat(e).join(",")+")"}function l(t,e){return Math.floor(Math.random()*(e-t+1))+t}function d(t){return{backgroundColor:t.map(t=>u(t,.6)),borderColor:t.map(()=>"#fff"),pointBackgroundColor:t.map(t=>u(t,1)),pointBorderColor:t.map(()=>"#fff"),pointHoverBackgroundColor:t.map(t=>u(t,1)),pointHoverBorderColor:t.map(t=>u(t,1))}}function c(){return[l(0,255),l(0,255),l(0,255)]}function f(t){return o[t]||c()}function h(t){const e=new Array(t);for(let n=0;n<t;n++)e[n]=o[n]||c();return e}let g=(()=>{class t{constructor(){this.pColorschemesOptions={},this.colorschemesOptions=new i.a({})}setColorschemesOptions(t){this.pColorschemesOptions=t,this.colorschemesOptions.next(t)}getColorschemesOptions(){return this.pColorschemesOptions}}return t.ngInjectableDef=Object(a["ɵɵdefineInjectable"])({factory:function(){return new t},token:t,providedIn:"root"}),t})();const p=function(){var t={Default:0,Update:1,Refresh:2};return t[t.Default]="Default",t[t.Update]="Update",t[t.Refresh]="Refresh",t}();class b{constructor(t,e){this.element=t,this.themeService=e,this.options={},this.chartClick=new a.EventEmitter,this.chartHover=new a.EventEmitter,this.old={dataExists:!1,dataLength:0,datasetsExists:!1,datasetsLength:0,datasetsDataObjects:[],datasetsDataLengths:[],colorsExists:!1,colors:[],labelsExist:!1,labels:[],legendExists:!1,legend:{}},this.subs=[]}static registerPlugin(t){r.Chart.plugins.register(t)}static unregisterPlugin(t){r.Chart.plugins.unregister(t)}ngOnInit(){this.ctx=this.element.nativeElement.getContext("2d"),this.refresh(),this.subs.push(this.themeService.colorschemesOptions.subscribe(t=>this.themeChanged(t)))}themeChanged(t){this.refresh()}ngDoCheck(){if(!this.chart)return;let t=p.Default;const e=e=>{t=e>t?e:t};switch(!!this.data!==this.old.dataExists&&(this.propagateDataToDatasets(this.data),this.old.dataExists=!!this.data,e(p.Update)),this.data&&this.data.length!==this.old.dataLength&&(this.old.dataLength=this.data&&this.data.length||0,e(p.Update)),!!this.datasets!==this.old.datasetsExists&&(this.old.datasetsExists=!!this.datasets,e(p.Update)),this.datasets&&this.datasets.length!==this.old.datasetsLength&&(this.old.datasetsLength=this.datasets&&this.datasets.length||0,e(p.Update)),this.datasets&&this.datasets.filter((t,e)=>t.data!==this.old.datasetsDataObjects[e]).length&&(this.old.datasetsDataObjects=this.datasets.map(t=>t.data),e(p.Update)),this.datasets&&this.datasets.filter((t,e)=>t.data.length!==this.old.datasetsDataLengths[e]).length&&(this.old.datasetsDataLengths=this.datasets.map(t=>t.data.length),e(p.Update)),!!this.colors!==this.old.colorsExists&&(this.old.colorsExists=!!this.colors,this.updateColors(),e(p.Update)),this.colors&&this.colors.filter((t,e)=>!this.colorsEqual(t,this.old.colors[e])).length&&(this.old.colors=this.colors.map(t=>this.copyColor(t)),this.updateColors(),e(p.Update)),!!this.labels!==this.old.labelsExist&&(this.old.labelsExist=!!this.labels,e(p.Update)),this.labels&&this.labels.filter((t,e)=>!this.labelsEqual(t,this.old.labels[e])).length&&(this.old.labels=this.labels.map(t=>this.copyLabel(t)),e(p.Update)),!!this.options.legend!==this.old.legendExists&&(this.old.legendExists=!!this.options.legend,e(p.Refresh)),this.options.legend&&this.options.legend.position!==this.old.legend.position&&(this.old.legend.position=this.options.legend.position,e(p.Refresh)),t){case p.Default:break;case p.Update:this.update();break;case p.Refresh:this.refresh()}}copyLabel(t){return Array.isArray(t)?[...t]:t}labelsEqual(t,e){return Array.isArray(t)===Array.isArray(e)&&(Array.isArray(t)||t===e)&&(!Array.isArray(t)||t.length===e.length)&&(!Array.isArray(t)||0===t.filter((t,n)=>t!==e[n]).length)}copyColor(t){return{backgroundColor:t.backgroundColor,borderWidth:t.borderWidth,borderColor:t.borderColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,pointBorderColor:t.pointBorderColor,pointBackgroundColor:t.pointBackgroundColor,pointBorderWidth:t.pointBorderWidth,pointRadius:t.pointRadius,pointHoverRadius:t.pointHoverRadius,pointHitRadius:t.pointHitRadius,pointHoverBackgroundColor:t.pointHoverBackgroundColor,pointHoverBorderColor:t.pointHoverBorderColor,pointHoverBorderWidth:t.pointHoverBorderWidth,pointStyle:t.pointStyle,hoverBackgroundColor:t.hoverBackgroundColor,hoverBorderColor:t.hoverBorderColor,hoverBorderWidth:t.hoverBorderWidth}}colorsEqual(t,e){return!t==!e&&(!t||t.backgroundColor===e.backgroundColor&&t.borderWidth===e.borderWidth&&t.borderColor===e.borderColor&&t.borderCapStyle===e.borderCapStyle&&t.borderDash===e.borderDash&&t.borderDashOffset===e.borderDashOffset&&t.borderJoinStyle===e.borderJoinStyle&&t.pointBorderColor===e.pointBorderColor&&t.pointBackgroundColor===e.pointBackgroundColor&&t.pointBorderWidth===e.pointBorderWidth&&t.pointRadius===e.pointRadius&&t.pointHoverRadius===e.pointHoverRadius&&t.pointHitRadius===e.pointHitRadius&&t.pointHoverBackgroundColor===e.pointHoverBackgroundColor&&t.pointHoverBorderColor===e.pointHoverBorderColor&&t.pointHoverBorderWidth===e.pointHoverBorderWidth&&t.pointStyle===e.pointStyle&&t.hoverBackgroundColor===e.hoverBackgroundColor&&t.hoverBorderColor===e.hoverBorderColor&&t.hoverBorderWidth===e.hoverBorderWidth)}updateColors(){this.datasets.forEach((t,e)=>{this.colors&&this.colors[e]?Object.assign(t,this.colors[e]):Object.assign(t,function(t,e,n){if("pie"===t||"doughnut"===t)return d(h(n));if("polarArea"===t)return{backgroundColor:(a=h(n)).map(t=>u(t,.6)),borderColor:a.map(t=>u(t,1)),hoverBackgroundColor:a.map(t=>u(t,.8)),hoverBorderColor:a.map(t=>u(t,1))};var a;if("line"===t||"radar"===t)return function(t){return{backgroundColor:u(t,.4),borderColor:u(t,1),pointBackgroundColor:u(t,1),pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:u(t,.8)}}(f(e));if("bar"===t||"horizontalBar"===t)return function(t){return{backgroundColor:u(t,.6),borderColor:u(t,1),hoverBackgroundColor:u(t,.8),hoverBorderColor:u(t,1)}}(f(e));if("bubble"===t)return d(h(n));if("scatter"===t)return d(h(n));throw new Error(`getColors - Unsupported chart type ${t}`)}(this.chartType,e,t.data.length),Object.assign({},t))})}ngOnChanges(t){let e=p.Default;const n=t=>{e=t>e?t:e};switch(t.hasOwnProperty("data")&&t.data.currentValue&&(this.propagateDataToDatasets(t.data.currentValue),n(p.Update)),t.hasOwnProperty("datasets")&&t.datasets.currentValue&&(this.propagateDatasetsToData(t.datasets.currentValue),n(p.Update)),t.hasOwnProperty("labels")&&(this.chart&&(this.chart.data.labels=t.labels.currentValue),n(p.Update)),t.hasOwnProperty("legend")&&(this.chart&&(this.chart.config.options.legend.display=t.legend.currentValue,this.chart.generateLegend()),n(p.Update)),t.hasOwnProperty("options")&&n(p.Refresh),e){case p.Update:this.update();break;case p.Refresh:case p.Default:this.refresh()}}ngOnDestroy(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.subs.forEach(t=>t.unsubscribe())}update(t,e){if(this.chart)return this.chart.update(t,e)}hideDataset(t,e){this.chart.getDatasetMeta(t).hidden=e,this.chart.update()}isDatasetHidden(t){return this.chart.getDatasetMeta(t).hidden}toBase64Image(){return this.chart.toBase64Image()}getChartConfiguration(){const t=this.getDatasets(),e=Object.assign({},this.options);!1===this.legend&&(e.legend={display:!1}),e.hover=e.hover||{},e.hover.onHover||(e.hover.onHover=(t,e)=>{e&&!e.length||this.chartHover.emit({event:t,active:e})}),e.onClick||(e.onClick=(t,e)=>{this.chartClick.emit({event:t,active:e})});const n=this.smartMerge(e,this.themeService.getColorschemesOptions());return{type:this.chartType,data:{labels:this.labels||[],datasets:t},plugins:this.plugins,options:n}}getChartBuilder(t){const e=this.getChartConfiguration();return new r.Chart(t,e)}smartMerge(t,e,n=0){if(0===n&&(t=Object(s.cloneDeep)(t)),Object.keys(e).forEach(a=>{if(Array.isArray(e[a])){const r=t[a];r&&r.forEach(t=>{this.smartMerge(t,e[a][0],n+1)})}else"object"==typeof e[a]?(a in t||(t[a]={}),this.smartMerge(t[a],e[a],n+1)):t[a]=e[a]}),0===n)return t}isMultiLineLabel(t){return Array.isArray(t)}joinLabel(t){return t?this.isMultiLineLabel(t)?t.join(" "):t:null}propagateDatasetsToData(t){this.data=this.datasets.map(t=>t.data),this.chart&&(this.chart.data.datasets=t),this.updateColors()}propagateDataToDatasets(t){this.isMultiDataSet(t)?this.datasets&&t.length===this.datasets.length?this.datasets.forEach((e,n)=>{e.data=t[n]}):(this.datasets=t.map((t,e)=>({data:t,label:this.joinLabel(this.labels[e])||`Label ${e}`})),this.chart&&(this.chart.data.datasets=this.datasets)):this.datasets?(this.datasets[0].data=t,this.datasets.splice(1)):(this.datasets=[{data:t}],this.chart&&(this.chart.data.datasets=this.datasets)),this.updateColors()}isMultiDataSet(t){return Array.isArray(t[0])}getDatasets(){if(!this.datasets&&!this.data)throw new Error(`ng-charts configuration error, data or datasets field are required to render chart ${this.chartType}`);return this.datasets?(this.propagateDatasetsToData(this.datasets),this.datasets):this.data?(this.propagateDataToDatasets(this.data),this.datasets):void 0}refresh(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.ctx&&(this.chart=this.getChartBuilder(this.ctx))}}class m{}},hypo:function(t,e,n){var a=n("O0oS");t.exports=function(t,e,n){"__proto__"==e&&a?a(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},i4WA:function(t,e,n){"use strict";var a=n("8Y7J");n("6qls"),n("tz6c"),n("GiVz"),n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var r=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function i(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"a",[["target","_blank"]],[[8,"href",4]],null,null,null,null)),(t()(),a["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,0,0,a["ɵinlineInterpolate"](1,"",n.docUrl,"")),t(e,1,0,n.docText)}))}},iEDd:function(t,e,n){!function(t){"use strict";t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},iExv:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.i18n=t}transform(t,e=this.i18n("Yes"),n=this.i18n("No")){return Boolean(t)?e:n}}},iInd:function(t,e,n){"use strict";var a=n("SVse"),r=n("8Y7J"),i=n("LRne"),s=n("Cfvw"),o=n("2Vo4"),u=n("HDdC"),l=n("sVev"),d=n("z+Ro"),c=n("DH7j"),f=n("l7GE"),h=n("ZUHj"),g=n("yCtX");const p={};class b{constructor(t){this.resultSelector=t}call(t,e){return e.subscribe(new m(t,this.resultSelector))}}class m extends f.a{constructor(t,e){super(t),this.resultSelector=e,this.active=0,this.values=[],this.observables=[]}_next(t){this.values.push(p),this.observables.push(t)}_complete(){const t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(let n=0;n<e;n++){const e=t[n];this.add(Object(h.a)(this,e,e,n))}}}notifyComplete(t){0==(this.active-=1)&&this.destination.complete()}notifyNext(t,e,n,a,r){const i=this.values,s=this.toRespond?i[n]===p?--this.toRespond:this.toRespond:0;i[n]=e,0===s&&(this.resultSelector?this._tryResultSelector(i):this.destination.next(i.slice()))}_tryResultSelector(t){let e;try{e=this.resultSelector.apply(this,t)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}var y=n("EY2u");function v(t){return new u.a(e=>{let n;try{n=t()}catch(a){return void e.error(a)}return(n?Object(s.a)(n):Object(y.b)()).subscribe(e)})}var x=n("XNiG"),_=n("lJxs"),T=n("0EUg"),O=n("NJ9Y"),w=n("JIr8"),S=n("SxV6"),I=n("5+tZ"),N=n("7o/Q");class C{constructor(t,e,n){this.predicate=t,this.thisArg=e,this.source=n}call(t,e){return e.subscribe(new R(t,this.predicate,this.thisArg,this.source))}}class R extends N.a{constructor(t,e,n,a){super(t),this.predicate=e,this.thisArg=n,this.source=a,this.index=0,this.thisArg=n||this}notifyComplete(t){this.destination.next(t),this.destination.complete()}_next(t){let e=!1;try{e=this.predicate.call(this.thisArg,t,this.index++,this.source)}catch(n){return void this.destination.error(n)}e||this.notifyComplete(!1)}_complete(){this.notifyComplete(!0)}}var A=n("eIep"),k=n("IzEk"),E=n("GyhO"),L=n("Kqap"),D=n("pLZG"),P=n("bOdf"),M=n("128B"),q=n("vkgz"),j=n("quSY");class F{constructor(t){this.callback=t}call(t,e){return e.subscribe(new G(t,this.callback))}}class G extends N.a{constructor(t,e){super(t),this.add(new j.a(e))}}var V=n("bHdf"),z=n("cUpR");n.d(e,"F",(function(){return st})),n.d(e,"v",(function(){return _n})),n.d(e,"C",(function(){return kn})),n.d(e,"x",(function(){return Sn})),n.d(e,"D",(function(){return En})),n.d(e,"E",(function(){return Ln})),n.d(e,"z",(function(){return Nn})),n.d(e,"y",(function(){return In})),n.d(e,"B",(function(){return An})),n.d(e,"w",(function(){return On})),n.d(e,"A",(function(){return Rn})),n.d(e,"G",(function(){return vn})),n.d(e,"n",(function(){return on})),n.d(e,"p",(function(){return un})),n.d(e,"o",(function(){return dn})),n.d(e,"r",(function(){return hn})),n.d(e,"d",(function(){return H})),n.d(e,"e",(function(){return Y})),n.d(e,"l",(function(){return Ze})),n.d(e,"m",(function(){return sn})),n.d(e,"k",(function(){return Qe})),n.d(e,"i",(function(){return xn})),n.d(e,"j",(function(){return Dn})),n.d(e,"q",(function(){return wn})),n.d(e,"b",(function(){return fn})),n.d(e,"f",(function(){return mn})),n.d(e,"g",(function(){return bn})),n.d(e,"h",(function(){return pn})),n.d(e,"s",(function(){return yn})),n.d(e,"a",(function(){return $t})),n.d(e,"t",(function(){return tn})),n.d(e,"c",(function(){return Ct})),n.d(e,"u",(function(){return Nt}));class B{constructor(t,e){this.id=t,this.url=e}}class Y extends B{constructor(t,e,n="imperative",a=null){super(t,e),this.navigationTrigger=n,this.restoredState=a}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class H extends B{constructor(t,e,n){super(t,e),this.urlAfterRedirects=n}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class U extends B{constructor(t,e,n){super(t,e),this.reason=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class W extends B{constructor(t,e,n){super(t,e),this.error=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class K extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class $ extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Z extends B{constructor(t,e,n,a,r){super(t,e),this.urlAfterRedirects=n,this.state=a,this.shouldActivate=r}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class J extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Q extends B{constructor(t,e,n,a){super(t,e),this.urlAfterRedirects=n,this.state=a}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class X{constructor(t){this.route=t}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class tt{constructor(t){this.route=t}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class et{constructor(t){this.snapshot=t}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class nt{constructor(t){this.snapshot=t}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class at{constructor(t){this.snapshot=t}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class rt{constructor(t){this.snapshot=t}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class it{constructor(t,e,n){this.routerEvent=t,this.position=e,this.anchor=n}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class st{}class ot{constructor(t){this.params=t||{}}has(t){return this.params.hasOwnProperty(t)}get(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e[0]:e}return null}getAll(t){if(this.has(t)){const e=this.params[t];return Array.isArray(e)?e:[e]}return[]}get keys(){return Object.keys(this.params)}}function ut(t){return new ot(t)}function lt(t){const e=Error("NavigationCancelingError: "+t);return e.ngNavigationCancelingError=!0,e}function dt(t,e,n){const a=n.path.split("/");if(a.length>t.length)return null;if("full"===n.pathMatch&&(e.hasChildren()||a.length<t.length))return null;const r={};for(let i=0;i<a.length;i++){const e=a[i],n=t[i];if(e.startsWith(":"))r[e.substring(1)]=n;else if(e!==n.path)return null}return{consumed:t.slice(0,a.length),posParams:r}}class ct{constructor(t,e){this.routes=t,this.module=e}}function ft(t,e=""){for(let n=0;n<t.length;n++){const a=t[n];ht(a,gt(e,a))}}function ht(t,e){if(!t)throw new Error(`\n      Invalid configuration of route '${e}': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    `);if(Array.isArray(t))throw new Error(`Invalid configuration of route '${e}': Array cannot be specified`);if(!t.component&&!t.children&&!t.loadChildren&&t.outlet&&"primary"!==t.outlet)throw new Error(`Invalid configuration of route '${e}': a componentless route without children or loadChildren cannot have a named outlet set`);if(t.redirectTo&&t.children)throw new Error(`Invalid configuration of route '${e}': redirectTo and children cannot be used together`);if(t.redirectTo&&t.loadChildren)throw new Error(`Invalid configuration of route '${e}': redirectTo and loadChildren cannot be used together`);if(t.children&&t.loadChildren)throw new Error(`Invalid configuration of route '${e}': children and loadChildren cannot be used together`);if(t.redirectTo&&t.component)throw new Error(`Invalid configuration of route '${e}': redirectTo and component cannot be used together`);if(t.path&&t.matcher)throw new Error(`Invalid configuration of route '${e}': path and matcher cannot be used together`);if(void 0===t.redirectTo&&!t.component&&!t.children&&!t.loadChildren)throw new Error(`Invalid configuration of route '${e}'. One of the following must be provided: component, redirectTo, children or loadChildren`);if(void 0===t.path&&void 0===t.matcher)throw new Error(`Invalid configuration of route '${e}': routes must have either a path or a matcher specified`);if("string"==typeof t.path&&"/"===t.path.charAt(0))throw new Error(`Invalid configuration of route '${e}': path cannot start with a slash`);if(""===t.path&&void 0!==t.redirectTo&&void 0===t.pathMatch)throw new Error(`Invalid configuration of route '{path: "${e}", redirectTo: "${t.redirectTo}"}': please provide 'pathMatch'. The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`);if(void 0!==t.pathMatch&&"full"!==t.pathMatch&&"prefix"!==t.pathMatch)throw new Error(`Invalid configuration of route '${e}': pathMatch can only be set to 'prefix' or 'full'`);t.children&&ft(t.children,e)}function gt(t,e){return e?t||e.path?t&&!e.path?`${t}/`:!t&&e.path?e.path:`${t}/${e.path}`:"":t}function pt(t){const e=t.children&&t.children.map(pt),n=e?Object.assign({},t,{children:e}):Object.assign({},t);return!n.component&&(e||n.loadChildren)&&n.outlet&&"primary"!==n.outlet&&(n.component=st),n}function bt(t,e){const n=Object.keys(t),a=Object.keys(e);if(!n||!a||n.length!=a.length)return!1;let r;for(let i=0;i<n.length;i++)if(r=n[i],t[r]!==e[r])return!1;return!0}function mt(t){return Array.prototype.concat.apply([],t)}function yt(t){return t.length>0?t[t.length-1]:null}function vt(t,e){for(const n in t)t.hasOwnProperty(n)&&e(t[n],n)}function xt(t){return Object(r["ɵisObservable"])(t)?t:Object(r["ɵisPromise"])(t)?Object(s.a)(Promise.resolve(t)):Object(i.a)(t)}function _t(t,e,n){return n?function(t,e){return bt(t,e)}(t.queryParams,e.queryParams)&&function t(e,n){if(!St(e.segments,n.segments))return!1;if(e.numberOfChildren!==n.numberOfChildren)return!1;for(const a in n.children){if(!e.children[a])return!1;if(!t(e.children[a],n.children[a]))return!1}return!0}(t.root,e.root):function(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(n=>e[n]===t[n])}(t.queryParams,e.queryParams)&&function t(e,n){return function e(n,a,r){if(n.segments.length>r.length)return!!St(n.segments.slice(0,r.length),r)&&!a.hasChildren();if(n.segments.length===r.length){if(!St(n.segments,r))return!1;for(const e in a.children){if(!n.children[e])return!1;if(!t(n.children[e],a.children[e]))return!1}return!0}{const t=r.slice(0,n.segments.length),i=r.slice(n.segments.length);return!!St(n.segments,t)&&!!n.children.primary&&e(n.children.primary,a,i)}}(e,n,n.segments)}(t.root,e.root)}class Tt{constructor(t,e,n){this.root=t,this.queryParams=e,this.fragment=n}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ut(this.queryParams)),this._queryParamMap}toString(){return Rt.serialize(this)}}class Ot{constructor(t,e){this.segments=t,this.children=e,this.parent=null,vt(e,(t,e)=>t.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return At(this)}}class wt{constructor(t,e){this.path=t,this.parameters=e}get parameterMap(){return this._parameterMap||(this._parameterMap=ut(this.parameters)),this._parameterMap}toString(){return Mt(this)}}function St(t,e){return t.length===e.length&&t.every((t,n)=>t.path===e[n].path)}function It(t,e){let n=[];return vt(t.children,(t,a)=>{"primary"===a&&(n=n.concat(e(t,a)))}),vt(t.children,(t,a)=>{"primary"!==a&&(n=n.concat(e(t,a)))}),n}class Nt{}class Ct{parse(t){const e=new Vt(t);return new Tt(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())}serialize(t){var e;return`${`/${function t(e,n){if(!e.hasChildren())return At(e);if(n){const n=e.children.primary?t(e.children.primary,!1):"",a=[];return vt(e.children,(e,n)=>{"primary"!==n&&a.push(`${n}:${t(e,!1)}`)}),a.length>0?`${n}(${a.join("//")})`:n}{const n=It(e,(n,a)=>"primary"===a?[t(e.children.primary,!1)]:[`${a}:${t(n,!1)}`]);return`${At(e)}/(${n.join("//")})`}}(t.root,!0)}`}${function(t){const e=Object.keys(t).map(e=>{const n=t[e];return Array.isArray(n)?n.map(t=>`${Et(e)}=${Et(t)}`).join("&"):`${Et(e)}=${Et(n)}`});return e.length?`?${e.join("&")}`:""}(t.queryParams)}${"string"==typeof t.fragment?`#${e=t.fragment,encodeURI(e)}`:""}`}}const Rt=new Ct;function At(t){return t.segments.map(t=>Mt(t)).join("/")}function kt(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Et(t){return kt(t).replace(/%3B/gi,";")}function Lt(t){return kt(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Dt(t){return decodeURIComponent(t)}function Pt(t){return Dt(t.replace(/\+/g,"%20"))}function Mt(t){return`${Lt(t.path)}${e=t.parameters,Object.keys(e).map(t=>`;${Lt(t)}=${Lt(e[t])}`).join("")}`;var e}const qt=/^[^\/()?;=#]+/;function jt(t){const e=t.match(qt);return e?e[0]:""}const Ft=/^[^=?&#]+/,Gt=/^[^?&#]+/;class Vt{constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Ot([],{}):new Ot([],this.parseChildren())}parseQueryParams(){const t={};if(this.consumeOptional("?"))do{this.parseQueryParam(t)}while(this.consumeOptional("&"));return t}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());let e={};this.peekStartsWith("/(")&&(this.capture("/"),e=this.parseParens(!0));let n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1)),(t.length>0||Object.keys(e).length>0)&&(n.primary=new Ot(t,e)),n}parseSegment(){const t=jt(this.remaining);if(""===t&&this.peekStartsWith(";"))throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);return this.capture(t),new wt(Dt(t),this.parseMatrixParams())}parseMatrixParams(){const t={};for(;this.consumeOptional(";");)this.parseParam(t);return t}parseParam(t){const e=jt(this.remaining);if(!e)return;this.capture(e);let n="";if(this.consumeOptional("=")){const t=jt(this.remaining);t&&(n=t,this.capture(n))}t[Dt(e)]=Dt(n)}parseQueryParam(t){const e=function(t){const e=t.match(Ft);return e?e[0]:""}(this.remaining);if(!e)return;this.capture(e);let n="";if(this.consumeOptional("=")){const t=function(t){const e=t.match(Gt);return e?e[0]:""}(this.remaining);t&&(n=t,this.capture(n))}const a=Pt(e),r=Pt(n);if(t.hasOwnProperty(a)){let e=t[a];Array.isArray(e)||(e=[e],t[a]=e),e.push(r)}else t[a]=r}parseParens(t){const e={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const n=jt(this.remaining),a=this.remaining[n.length];if("/"!==a&&")"!==a&&";"!==a)throw new Error(`Cannot parse url '${this.url}'`);let r=void 0;n.indexOf(":")>-1?(r=n.substr(0,n.indexOf(":")),this.capture(r),this.capture(":")):t&&(r="primary");const i=this.parseChildren();e[r]=1===Object.keys(i).length?i.primary:new Ot([],i),this.consumeOptional("//")}return e}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)}capture(t){if(!this.consumeOptional(t))throw new Error(`Expected "${t}".`)}}class zt{constructor(t){this._root=t}get root(){return this._root.value}parent(t){const e=this.pathFromRoot(t);return e.length>1?e[e.length-2]:null}children(t){const e=Bt(t,this._root);return e?e.children.map(t=>t.value):[]}firstChild(t){const e=Bt(t,this._root);return e&&e.children.length>0?e.children[0].value:null}siblings(t){const e=Yt(t,this._root);return e.length<2?[]:e[e.length-2].children.map(t=>t.value).filter(e=>e!==t)}pathFromRoot(t){return Yt(t,this._root).map(t=>t.value)}}function Bt(t,e){if(t===e.value)return e;for(const n of e.children){const e=Bt(t,n);if(e)return e}return null}function Yt(t,e){if(t===e.value)return[e];for(const n of e.children){const a=Yt(t,n);if(a.length)return a.unshift(e),a}return[]}class Ht{constructor(t,e){this.value=t,this.children=e}toString(){return`TreeNode(${this.value})`}}function Ut(t){const e={};return t&&t.children.forEach(t=>e[t.value.outlet]=t),e}class Wt extends zt{constructor(t,e){super(t),this.snapshot=e,Xt(this,t)}toString(){return this.snapshot.toString()}}function Kt(t,e){const n=function(t,e){const n=new Jt([],{},{},"",{},"primary",e,null,t.root,-1,{});return new Qt("",new Ht(n,[]))}(t,e),a=new o.a([new wt("",{})]),r=new o.a({}),i=new o.a({}),s=new o.a({}),u=new o.a(""),l=new $t(a,r,s,u,i,"primary",e,n.root);return l.snapshot=n.root,new Wt(new Ht(l,[]),n)}class $t{constructor(t,e,n,a,r,i,s,o){this.url=t,this.params=e,this.queryParams=n,this.fragment=a,this.data=r,this.outlet=i,this.component=s,this._futureSnapshot=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(Object(_.a)(t=>ut(t)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Object(_.a)(t=>ut(t)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Zt(t,e="emptyOnly"){const n=t.pathFromRoot;let a=0;if("always"!==e)for(a=n.length-1;a>=1;){const t=n[a],e=n[a-1];if(t.routeConfig&&""===t.routeConfig.path)a--;else{if(e.component)break;a--}}return function(t){return t.reduce((t,e)=>({params:Object.assign({},t.params,e.params),data:Object.assign({},t.data,e.data),resolve:Object.assign({},t.resolve,e._resolvedData)}),{params:{},data:{},resolve:{}})}(n.slice(a))}class Jt{constructor(t,e,n,a,r,i,s,o,u,l,d){this.url=t,this.params=e,this.queryParams=n,this.fragment=a,this.data=r,this.outlet=i,this.component=s,this.routeConfig=o,this._urlSegment=u,this._lastPathIndex=l,this._resolve=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=ut(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=ut(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(t=>t.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class Qt extends zt{constructor(t,e){super(e),this.url=t,Xt(this,e)}toString(){return te(this._root)}}function Xt(t,e){e.value._routerState=t,e.children.forEach(e=>Xt(t,e))}function te(t){const e=t.children.length>0?` { ${t.children.map(te).join(", ")} } `:"";return`${t.value}${e}`}function ee(t){if(t.snapshot){const e=t.snapshot,n=t._futureSnapshot;t.snapshot=n,bt(e.queryParams,n.queryParams)||t.queryParams.next(n.queryParams),e.fragment!==n.fragment&&t.fragment.next(n.fragment),bt(e.params,n.params)||t.params.next(n.params),function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!bt(t[n],e[n]))return!1;return!0}(e.url,n.url)||t.url.next(n.url),bt(e.data,n.data)||t.data.next(n.data)}else t.snapshot=t._futureSnapshot,t.data.next(t._futureSnapshot.data)}function ne(t,e){var n,a;return bt(t.params,e.params)&&St(n=t.url,a=e.url)&&n.every((t,e)=>bt(t.parameters,a[e].parameters))&&!(!t.parent!=!e.parent)&&(!t.parent||ne(t.parent,e.parent))}function ae(t){return"object"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function re(t,e,n,a,r){let i={};return a&&vt(a,(t,e)=>{i[e]=Array.isArray(t)?t.map(t=>`${t}`):`${t}`}),new Tt(n.root===t?e:function t(e,n,a){const r={};return vt(e.children,(e,i)=>{r[i]=e===n?a:t(e,n,a)}),new Ot(e.segments,r)}(n.root,t,e),i,r)}class ie{constructor(t,e,n){if(this.isAbsolute=t,this.numberOfDoubleDots=e,this.commands=n,t&&n.length>0&&ae(n[0]))throw new Error("Root segment cannot have matrix parameters");const a=n.find(t=>"object"==typeof t&&null!=t&&t.outlets);if(a&&a!==yt(n))throw new Error("{outlets:{}} has to be the last command")}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class se{constructor(t,e,n){this.segmentGroup=t,this.processChildren=e,this.index=n}}function oe(t){return"object"==typeof t&&null!=t&&t.outlets?t.outlets.primary:`${t}`}function ue(t,e,n){if(t||(t=new Ot([],{})),0===t.segments.length&&t.hasChildren())return le(t,e,n);const a=function(t,e,n){let a=0,r=e;const i={match:!1,pathIndex:0,commandIndex:0};for(;r<t.segments.length;){if(a>=n.length)return i;const e=t.segments[r],s=oe(n[a]),o=a<n.length-1?n[a+1]:null;if(r>0&&void 0===s)break;if(s&&o&&"object"==typeof o&&void 0===o.outlets){if(!he(s,o,e))return i;a+=2}else{if(!he(s,{},e))return i;a++}r++}return{match:!0,pathIndex:r,commandIndex:a}}(t,e,n),r=n.slice(a.commandIndex);if(a.match&&a.pathIndex<t.segments.length){const e=new Ot(t.segments.slice(0,a.pathIndex),{});return e.children.primary=new Ot(t.segments.slice(a.pathIndex),t.children),le(e,0,r)}return a.match&&0===r.length?new Ot(t.segments,{}):a.match&&!t.hasChildren()?de(t,e,n):a.match?le(t,0,r):de(t,e,n)}function le(t,e,n){if(0===n.length)return new Ot(t.segments,{});{const a=function(t){return"object"!=typeof t[0]?{primary:t}:void 0===t[0].outlets?{primary:t}:t[0].outlets}(n),r={};return vt(a,(n,a)=>{null!==n&&(r[a]=ue(t.children[a],e,n))}),vt(t.children,(t,e)=>{void 0===a[e]&&(r[e]=t)}),new Ot(t.segments,r)}}function de(t,e,n){const a=t.segments.slice(0,e);let r=0;for(;r<n.length;){if("object"==typeof n[r]&&void 0!==n[r].outlets){const t=ce(n[r].outlets);return new Ot(a,t)}if(0===r&&ae(n[0])){a.push(new wt(t.segments[e].path,n[0])),r++;continue}const i=oe(n[r]),s=r<n.length-1?n[r+1]:null;i&&s&&ae(s)?(a.push(new wt(i,fe(s))),r+=2):(a.push(new wt(i,{})),r++)}return new Ot(a,{})}function ce(t){const e={};return vt(t,(t,n)=>{null!==t&&(e[n]=de(new Ot([],{}),0,t))}),e}function fe(t){const e={};return vt(t,(t,n)=>e[n]=`${t}`),e}function he(t,e,n){return t==n.path&&bt(e,n.parameters)}class ge{constructor(t,e,n,a){this.routeReuseStrategy=t,this.futureState=e,this.currState=n,this.forwardEvent=a}activate(t){const e=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,n,t),ee(this.futureState.root),this.activateChildRoutes(e,n,t)}deactivateChildRoutes(t,e,n){const a=Ut(e);t.children.forEach(t=>{const e=t.value.outlet;this.deactivateRoutes(t,a[e],n),delete a[e]}),vt(a,(t,e)=>{this.deactivateRouteAndItsChildren(t,n)})}deactivateRoutes(t,e,n){const a=t.value,r=e?e.value:null;if(a===r)if(a.component){const r=n.getContext(a.outlet);r&&this.deactivateChildRoutes(t,e,r.children)}else this.deactivateChildRoutes(t,e,n);else r&&this.deactivateRouteAndItsChildren(e,n)}deactivateRouteAndItsChildren(t,e){this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,e):this.deactivateRouteAndOutlet(t,e)}detachAndStoreRouteSubtree(t,e){const n=e.getContext(t.value.outlet);if(n&&n.outlet){const e=n.outlet.detach(),a=n.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:e,route:t,contexts:a})}}deactivateRouteAndOutlet(t,e){const n=e.getContext(t.value.outlet);if(n){const a=Ut(t),r=t.value.component?n.children:e;vt(a,(t,e)=>this.deactivateRouteAndItsChildren(t,r)),n.outlet&&(n.outlet.deactivate(),n.children.onOutletDeactivated())}}activateChildRoutes(t,e,n){const a=Ut(e);t.children.forEach(t=>{this.activateRoutes(t,a[t.value.outlet],n),this.forwardEvent(new rt(t.value.snapshot))}),t.children.length&&this.forwardEvent(new nt(t.value.snapshot))}activateRoutes(t,e,n){const a=t.value,r=e?e.value:null;if(ee(a),a===r)if(a.component){const r=n.getOrCreateContext(a.outlet);this.activateChildRoutes(t,e,r.children)}else this.activateChildRoutes(t,e,n);else if(a.component){const e=n.getOrCreateContext(a.outlet);if(this.routeReuseStrategy.shouldAttach(a.snapshot)){const t=this.routeReuseStrategy.retrieve(a.snapshot);this.routeReuseStrategy.store(a.snapshot,null),e.children.onOutletReAttached(t.contexts),e.attachRef=t.componentRef,e.route=t.route.value,e.outlet&&e.outlet.attach(t.componentRef,t.route.value),pe(t.route)}else{const n=function(t){for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig;if(t&&t.component)return null}return null}(a.snapshot),r=n?n.module.componentFactoryResolver:null;e.attachRef=null,e.route=a,e.resolver=r,e.outlet&&e.outlet.activateWith(a,r),this.activateChildRoutes(t,null,e.children)}}else this.activateChildRoutes(t,null,n)}}function pe(t){ee(t.value),t.children.forEach(pe)}function be(t){return"function"==typeof t}function me(t){return t instanceof Tt}class ye{constructor(t){this.segmentGroup=t||null}}class ve{constructor(t){this.urlTree=t}}function xe(t){return new u.a(e=>e.error(new ye(t)))}function _e(t){return new u.a(e=>e.error(new ve(t)))}function Te(t){return new u.a(e=>e.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${t}'`)))}class Oe{constructor(t,e,n,a,i){this.configLoader=e,this.urlSerializer=n,this.urlTree=a,this.config=i,this.allowRedirects=!0,this.ngModule=t.get(r.NgModuleRef)}apply(){return this.expandSegmentGroup(this.ngModule,this.config,this.urlTree.root,"primary").pipe(Object(_.a)(t=>this.createUrlTree(t,this.urlTree.queryParams,this.urlTree.fragment))).pipe(Object(w.a)(t=>{if(t instanceof ve)return this.allowRedirects=!1,this.match(t.urlTree);if(t instanceof ye)throw this.noMatchError(t);throw t}))}match(t){return this.expandSegmentGroup(this.ngModule,this.config,t.root,"primary").pipe(Object(_.a)(e=>this.createUrlTree(e,t.queryParams,t.fragment))).pipe(Object(w.a)(t=>{if(t instanceof ye)throw this.noMatchError(t);throw t}))}noMatchError(t){return new Error(`Cannot match any routes. URL Segment: '${t.segmentGroup}'`)}createUrlTree(t,e,n){const a=t.segments.length>0?new Ot([],{primary:t}):t;return new Tt(a,e,n)}expandSegmentGroup(t,e,n,a){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(t,e,n).pipe(Object(_.a)(t=>new Ot([],t))):this.expandSegment(t,n,e,n.segments,a,!0)}expandChildren(t,e,n){return function(t,e){if(0===Object.keys(t).length)return Object(i.a)({});const n=[],a=[],r={};return vt(t,(t,i)=>{const s=e(i,t).pipe(Object(_.a)(t=>r[i]=t));"primary"===i?n.push(s):a.push(s)}),i.a.apply(null,n.concat(a)).pipe(Object(T.a)(),Object(O.a)(),Object(_.a)(()=>r))}(n.children,(n,a)=>this.expandSegmentGroup(t,e,a,n))}expandSegment(t,e,n,a,r,s){return Object(i.a)(...n).pipe(Object(_.a)(o=>this.expandSegmentAgainstRoute(t,e,n,o,a,r,s).pipe(Object(w.a)(t=>{if(t instanceof ye)return Object(i.a)(null);throw t}))),Object(T.a)(),Object(S.a)(t=>!!t),Object(w.a)((t,n)=>{if(t instanceof l.a||"EmptyError"===t.name){if(this.noLeftoversInUrl(e,a,r))return Object(i.a)(new Ot([],{}));throw new ye(e)}throw t}))}noLeftoversInUrl(t,e,n){return 0===e.length&&!t.children[n]}expandSegmentAgainstRoute(t,e,n,a,r,i,s){return Ne(a)!==i?xe(e):void 0===a.redirectTo?this.matchSegmentAgainstRoute(t,e,a,r):s&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i):xe(e)}expandSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i){return"**"===a.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,a,i):this.expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i)}expandWildCardWithParamsAgainstRouteUsingRedirect(t,e,n,a){const r=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith("/")?_e(r):this.lineralizeSegments(n,r).pipe(Object(I.a)(n=>{const r=new Ot(n,{});return this.expandSegment(t,r,e,n,a,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,a,r,i){const{matched:s,consumedSegments:o,lastChild:u,positionalParamSegments:l}=we(e,a,r);if(!s)return xe(e);const d=this.applyRedirectCommands(o,a.redirectTo,l);return a.redirectTo.startsWith("/")?_e(d):this.lineralizeSegments(a,d).pipe(Object(I.a)(a=>this.expandSegment(t,e,n,a.concat(r.slice(u)),i,!1)))}matchSegmentAgainstRoute(t,e,n,a){if("**"===n.path)return n.loadChildren?this.configLoader.load(t.injector,n).pipe(Object(_.a)(t=>(n._loadedConfig=t,new Ot(a,{})))):Object(i.a)(new Ot(a,{}));const{matched:r,consumedSegments:s,lastChild:o}=we(e,n,a);if(!r)return xe(e);const u=a.slice(o);return this.getChildConfig(t,n,a).pipe(Object(I.a)(t=>{const n=t.module,a=t.routes,{segmentGroup:r,slicedSegments:o}=function(t,e,n,a){return n.length>0&&function(t,e,n){return n.some(n=>Ie(t,e,n)&&"primary"!==Ne(n))}(t,n,a)?{segmentGroup:Se(new Ot(e,function(t,e){const n={};n.primary=e;for(const a of t)""===a.path&&"primary"!==Ne(a)&&(n[Ne(a)]=new Ot([],{}));return n}(a,new Ot(n,t.children)))),slicedSegments:[]}:0===n.length&&function(t,e,n){return n.some(n=>Ie(t,e,n))}(t,n,a)?{segmentGroup:Se(new Ot(t.segments,function(t,e,n,a){const r={};for(const i of n)Ie(t,e,i)&&!a[Ne(i)]&&(r[Ne(i)]=new Ot([],{}));return Object.assign({},a,r)}(t,n,a,t.children))),slicedSegments:n}:{segmentGroup:t,slicedSegments:n}}(e,s,u,a);return 0===o.length&&r.hasChildren()?this.expandChildren(n,a,r).pipe(Object(_.a)(t=>new Ot(s,t))):0===a.length&&0===o.length?Object(i.a)(new Ot(s,{})):this.expandSegment(n,r,a,o,"primary",!0).pipe(Object(_.a)(t=>new Ot(s.concat(t.segments),t.children)))}))}getChildConfig(t,e,n){return e.children?Object(i.a)(new ct(e.children,t)):e.loadChildren?void 0!==e._loadedConfig?Object(i.a)(e._loadedConfig):function(t,e,n){const a=e.canLoad;return a&&0!==a.length?Object(s.a)(a).pipe(Object(_.a)(a=>{const r=t.get(a);let i;if(function(t){return t&&be(t.canLoad)}(r))i=r.canLoad(e,n);else{if(!be(r))throw new Error("Invalid CanLoad guard");i=r(e,n)}return xt(i)})).pipe(Object(T.a)(),(r=t=>!0===t,t=>t.lift(new C(r,void 0,t)))):Object(i.a)(!0);var r}(t.injector,e,n).pipe(Object(I.a)(n=>n?this.configLoader.load(t.injector,e).pipe(Object(_.a)(t=>(e._loadedConfig=t,t))):function(t){return new u.a(e=>e.error(lt(`Cannot load children because the guard of the route "path: '${t.path}'" returned false`)))}(e))):Object(i.a)(new ct([],t))}lineralizeSegments(t,e){let n=[],a=e.root;for(;;){if(n=n.concat(a.segments),0===a.numberOfChildren)return Object(i.a)(n);if(a.numberOfChildren>1||!a.children.primary)return Te(t.redirectTo);a=a.children.primary}}applyRedirectCommands(t,e,n){return this.applyRedirectCreatreUrlTree(e,this.urlSerializer.parse(e),t,n)}applyRedirectCreatreUrlTree(t,e,n,a){const r=this.createSegmentGroup(t,e.root,n,a);return new Tt(r,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)}createQueryParams(t,e){const n={};return vt(t,(t,a)=>{if("string"==typeof t&&t.startsWith(":")){const r=t.substring(1);n[a]=e[r]}else n[a]=t}),n}createSegmentGroup(t,e,n,a){const r=this.createSegments(t,e.segments,n,a);let i={};return vt(e.children,(e,r)=>{i[r]=this.createSegmentGroup(t,e,n,a)}),new Ot(r,i)}createSegments(t,e,n,a){return e.map(e=>e.path.startsWith(":")?this.findPosParam(t,e,a):this.findOrReturn(e,n))}findPosParam(t,e,n){const a=n[e.path.substring(1)];if(!a)throw new Error(`Cannot redirect to '${t}'. Cannot find '${e.path}'.`);return a}findOrReturn(t,e){let n=0;for(const a of e){if(a.path===t.path)return e.splice(n),a;n++}return t}}function we(t,e,n){if(""===e.path)return"full"===e.pathMatch&&(t.hasChildren()||n.length>0)?{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}:{matched:!0,consumedSegments:[],lastChild:0,positionalParamSegments:{}};const a=(e.matcher||dt)(n,t,e);return a?{matched:!0,consumedSegments:a.consumed,lastChild:a.consumed.length,positionalParamSegments:a.posParams}:{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}}function Se(t){if(1===t.numberOfChildren&&t.children.primary){const e=t.children.primary;return new Ot(t.segments.concat(e.segments),e.children)}return t}function Ie(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0!==n.redirectTo}function Ne(t){return t.outlet||"primary"}class Ce{constructor(t){this.path=t,this.route=this.path[this.path.length-1]}}class Re{constructor(t,e){this.component=t,this.route=e}}function Ae(t,e,n){const a=t._root;return function t(e,n,a,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=Ut(n);return e.children.forEach(e=>{!function(e,n,a,r,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=e.value,o=n?n.value:null,u=a?a.getContext(e.value.outlet):null;if(o&&s.routeConfig===o.routeConfig){const l=function(t,e,n){if("function"==typeof n)return n(t,e);switch(n){case"pathParamsChange":return!St(t.url,e.url);case"pathParamsOrQueryParamsChange":return!St(t.url,e.url)||!bt(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!ne(t,e)||!bt(t.queryParams,e.queryParams);case"paramsChange":default:return!ne(t,e)}}(o,s,s.routeConfig.runGuardsAndResolvers);l?i.canActivateChecks.push(new Ce(r)):(s.data=o.data,s._resolvedData=o._resolvedData),t(e,n,s.component?u?u.children:null:a,r,i),l&&i.canDeactivateChecks.push(new Re(u&&u.outlet&&u.outlet.component||null,o))}else o&&Ee(n,u,i),i.canActivateChecks.push(new Ce(r)),t(e,null,s.component?u?u.children:null:a,r,i)}(e,s[e.value.outlet],a,r.concat([e.value]),i),delete s[e.value.outlet]}),vt(s,(t,e)=>Ee(t,a.getContext(e),i)),i}(a,e?e._root:null,n,[a.value])}function ke(t,e,n){const a=function(t){if(!t)return null;for(let e=t.parent;e;e=e.parent){const t=e.routeConfig;if(t&&t._loadedConfig)return t._loadedConfig}return null}(e);return(a?a.module.injector:n).get(t)}function Ee(t,e,n){const a=Ut(t),r=t.value;vt(a,(t,a)=>{Ee(t,r.component?e?e.children.getContext(a):null:e,n)}),n.canDeactivateChecks.push(new Re(r.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,r))}const Le=Symbol("INITIAL_VALUE");function De(){return Object(A.a)(t=>function(...t){let e=null,n=null;return Object(d.a)(t[t.length-1])&&(n=t.pop()),"function"==typeof t[t.length-1]&&(e=t.pop()),1===t.length&&Object(c.a)(t[0])&&(t=t[0]),Object(g.a)(t,n).lift(new b(e))}(...t.map(t=>t.pipe(Object(k.a)(1),function(...t){const e=t[t.length-1];return Object(d.a)(e)?(t.pop(),n=>Object(E.a)(t,n,e)):e=>Object(E.a)(t,e)}(Le)))).pipe(Object(L.a)((t,e)=>{let n=!1;return e.reduce((t,a,r)=>{if(t!==Le)return t;if(a===Le&&(n=!0),!n){if(!1===a)return a;if(r===e.length-1||me(a))return a}return t},t)},Le),Object(D.a)(t=>t!==Le),Object(_.a)(t=>me(t)?t:!0===t),Object(k.a)(1)))}function Pe(t,e){return null!==t&&e&&e(new at(t)),Object(i.a)(!0)}function Me(t,e){return null!==t&&e&&e(new et(t)),Object(i.a)(!0)}function qe(t,e,n){const a=e.routeConfig?e.routeConfig.canActivate:null;if(!a||0===a.length)return Object(i.a)(!0);const r=a.map(a=>v(()=>{const r=ke(a,e,n);let i;if(function(t){return t&&be(t.canActivate)}(r))i=xt(r.canActivate(e,t));else{if(!be(r))throw new Error("Invalid CanActivate guard");i=xt(r(e,t))}return i.pipe(Object(S.a)())}));return Object(i.a)(r).pipe(De())}function je(t,e,n){const a=e[e.length-1],r=e.slice(0,e.length-1).reverse().map(t=>function(t){const e=t.routeConfig?t.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:t,guards:e}:null}(t)).filter(t=>null!==t).map(e=>v(()=>{const r=e.guards.map(r=>{const i=ke(r,e.node,n);let s;if(function(t){return t&&be(t.canActivateChild)}(i))s=xt(i.canActivateChild(a,t));else{if(!be(i))throw new Error("Invalid CanActivateChild guard");s=xt(i(a,t))}return s.pipe(Object(S.a)())});return Object(i.a)(r).pipe(De())}));return Object(i.a)(r).pipe(De())}class Fe{}class Ge{constructor(t,e,n,a,r,i){this.rootComponentType=t,this.config=e,this.urlTree=n,this.url=a,this.paramsInheritanceStrategy=r,this.relativeLinkResolution=i}recognize(){try{const t=Be(this.urlTree.root,[],[],this.config,this.relativeLinkResolution).segmentGroup,e=this.processSegmentGroup(this.config,t,"primary"),n=new Jt([],Object.freeze({}),Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,{},"primary",this.rootComponentType,null,this.urlTree.root,-1,{}),a=new Ht(n,e),r=new Qt(this.url,a);return this.inheritParamsAndData(r._root),Object(i.a)(r)}catch(t){return new u.a(e=>e.error(t))}}inheritParamsAndData(t){const e=t.value,n=Zt(e,this.paramsInheritanceStrategy);e.params=Object.freeze(n.params),e.data=Object.freeze(n.data),t.children.forEach(t=>this.inheritParamsAndData(t))}processSegmentGroup(t,e,n){return 0===e.segments.length&&e.hasChildren()?this.processChildren(t,e):this.processSegment(t,e,e.segments,n)}processChildren(t,e){const n=It(e,(e,n)=>this.processSegmentGroup(t,e,n));return function(t){const e={};t.forEach(t=>{const n=e[t.value.outlet];if(n){const e=n.url.map(t=>t.toString()).join("/"),a=t.value.url.map(t=>t.toString()).join("/");throw new Error(`Two segments cannot have the same outlet name: '${e}' and '${a}'.`)}e[t.value.outlet]=t.value})}(n),n.sort((t,e)=>"primary"===t.value.outlet?-1:"primary"===e.value.outlet?1:t.value.outlet.localeCompare(e.value.outlet)),n}processSegment(t,e,n,a){for(const i of t)try{return this.processSegmentAgainstRoute(i,e,n,a)}catch(r){if(!(r instanceof Fe))throw r}if(this.noLeftoversInUrl(e,n,a))return[];throw new Fe}noLeftoversInUrl(t,e,n){return 0===e.length&&!t.children[n]}processSegmentAgainstRoute(t,e,n,a){if(t.redirectTo)throw new Fe;if((t.outlet||"primary")!==a)throw new Fe;let r,i=[],s=[];if("**"===t.path){const i=n.length>0?yt(n).parameters:{};r=new Jt(n,i,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,Ue(t),a,t.component,t,Ve(e),ze(e)+n.length,We(t))}else{const o=function(t,e,n){if(""===e.path){if("full"===e.pathMatch&&(t.hasChildren()||n.length>0))throw new Fe;return{consumedSegments:[],lastChild:0,parameters:{}}}const a=(e.matcher||dt)(n,t,e);if(!a)throw new Fe;const r={};vt(a.posParams,(t,e)=>{r[e]=t.path});const i=a.consumed.length>0?Object.assign({},r,a.consumed[a.consumed.length-1].parameters):r;return{consumedSegments:a.consumed,lastChild:a.consumed.length,parameters:i}}(e,t,n);i=o.consumedSegments,s=n.slice(o.lastChild),r=new Jt(i,o.parameters,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,Ue(t),a,t.component,t,Ve(e),ze(e)+i.length,We(t))}const o=function(t){return t.children?t.children:t.loadChildren?t._loadedConfig.routes:[]}(t),{segmentGroup:u,slicedSegments:l}=Be(e,i,s,o,this.relativeLinkResolution);if(0===l.length&&u.hasChildren()){const t=this.processChildren(o,u);return[new Ht(r,t)]}if(0===o.length&&0===l.length)return[new Ht(r,[])];const d=this.processSegment(o,u,l,"primary");return[new Ht(r,d)]}}function Ve(t){let e=t;for(;e._sourceSegment;)e=e._sourceSegment;return e}function ze(t){let e=t,n=e._segmentIndexShift?e._segmentIndexShift:0;for(;e._sourceSegment;)e=e._sourceSegment,n+=e._segmentIndexShift?e._segmentIndexShift:0;return n-1}function Be(t,e,n,a,r){if(n.length>0&&function(t,e,n){return n.some(n=>Ye(t,e,n)&&"primary"!==He(n))}(t,n,a)){const r=new Ot(e,function(t,e,n,a){const r={};r.primary=a,a._sourceSegment=t,a._segmentIndexShift=e.length;for(const i of n)if(""===i.path&&"primary"!==He(i)){const n=new Ot([],{});n._sourceSegment=t,n._segmentIndexShift=e.length,r[He(i)]=n}return r}(t,e,a,new Ot(n,t.children)));return r._sourceSegment=t,r._segmentIndexShift=e.length,{segmentGroup:r,slicedSegments:[]}}if(0===n.length&&function(t,e,n){return n.some(n=>Ye(t,e,n))}(t,n,a)){const i=new Ot(t.segments,function(t,e,n,a,r,i){const s={};for(const o of a)if(Ye(t,n,o)&&!r[He(o)]){const n=new Ot([],{});n._sourceSegment=t,n._segmentIndexShift="legacy"===i?t.segments.length:e.length,s[He(o)]=n}return Object.assign({},r,s)}(t,e,n,a,t.children,r));return i._sourceSegment=t,i._segmentIndexShift=e.length,{segmentGroup:i,slicedSegments:n}}const i=new Ot(t.segments,t.children);return i._sourceSegment=t,i._segmentIndexShift=e.length,{segmentGroup:i,slicedSegments:n}}function Ye(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0===n.redirectTo}function He(t){return t.outlet||"primary"}function Ue(t){return t.data||{}}function We(t){return t.resolve||{}}function Ke(t,e,n,a){const r=ke(t,e,a);return xt(r.resolve?r.resolve(e,n):r(e,n))}function $e(t){return function(e){return e.pipe(Object(A.a)(e=>{const n=t(e);return n?Object(s.a)(n).pipe(Object(_.a)(()=>e)):Object(s.a)([e])}))}}class Ze{}class Je{shouldDetach(t){return!1}store(t,e){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,e){return t.routeConfig===e.routeConfig}}const Qe=new r.InjectionToken("ROUTES");class Xe{constructor(t,e,n,a){this.loader=t,this.compiler=e,this.onLoadStartListener=n,this.onLoadEndListener=a}load(t,e){return this.onLoadStartListener&&this.onLoadStartListener(e),this.loadModuleFactory(e.loadChildren).pipe(Object(_.a)(n=>{this.onLoadEndListener&&this.onLoadEndListener(e);const a=n.create(t);return new ct(mt(a.injector.get(Qe)).map(pt),a)}))}loadModuleFactory(t){return"string"==typeof t?Object(s.a)(this.loader.load(t)):xt(t()).pipe(Object(I.a)(t=>t instanceof r.NgModuleFactory?Object(i.a)(t):Object(s.a)(this.compiler.compileModuleAsync(t))))}}class tn{}class en{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,e){return t}}function nn(t){throw t}function an(t,e,n){return e.parse("/")}function rn(t,e){return Object(i.a)(null)}class sn{constructor(t,e,n,a,i,s,u,l){this.rootComponentType=t,this.urlSerializer=e,this.rootContexts=n,this.location=a,this.config=l,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.navigationId=0,this.isNgZoneEnabled=!1,this.events=new x.a,this.errorHandler=nn,this.malformedUriErrorHandler=an,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:rn,afterPreactivation:rn},this.urlHandlingStrategy=new en,this.routeReuseStrategy=new Je,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="legacy",this.ngModule=i.get(r.NgModuleRef),this.console=i.get(r["ɵConsole"]);const d=i.get(r.NgZone);this.isNgZoneEnabled=d instanceof r.NgZone,this.resetConfig(l),this.currentUrlTree=new Tt(new Ot([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new Xe(s,u,t=>this.triggerEvent(new X(t)),t=>this.triggerEvent(new tt(t))),this.routerState=Kt(this.currentUrlTree,this.rootComponentType),this.transitions=new o.a({id:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}setupNavigations(t){const e=this.events;return t.pipe(Object(D.a)(t=>0!==t.id),Object(_.a)(t=>Object.assign({},t,{extractedUrl:this.urlHandlingStrategy.extract(t.rawUrl)})),Object(A.a)(t=>{let n=!1,a=!1;return Object(i.a)(t).pipe(Object(q.a)(t=>{this.currentNavigation={id:t.id,initialUrl:t.currentRawUrl,extractedUrl:t.extractedUrl,trigger:t.source,extras:t.extras,previousNavigation:this.lastSuccessfulNavigation?Object.assign({},this.lastSuccessfulNavigation,{previousNavigation:null}):null}}),Object(A.a)(t=>{const n=!this.navigated||t.extractedUrl.toString()!==this.browserUrlTree.toString();if(("reload"===this.onSameUrlNavigation||n)&&this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl))return Object(i.a)(t).pipe(Object(A.a)(t=>{const n=this.transitions.getValue();return e.next(new Y(t.id,this.serializeUrl(t.extractedUrl),t.source,t.restoredState)),n!==this.transitions.getValue()?y.a:[t]}),Object(A.a)(t=>Promise.resolve(t)),(a=this.ngModule.injector,r=this.configLoader,s=this.urlSerializer,o=this.config,function(t){return t.pipe(Object(A.a)(t=>function(t,e,n,a,r){return new Oe(t,e,n,a,r).apply()}(a,r,s,t.extractedUrl,o).pipe(Object(_.a)(e=>Object.assign({},t,{urlAfterRedirects:e})))))}),Object(q.a)(t=>{this.currentNavigation=Object.assign({},this.currentNavigation,{finalUrl:t.urlAfterRedirects})}),function(t,e,n,a,r){return function(i){return i.pipe(Object(I.a)(i=>function(t,e,n,a,r="emptyOnly",i="legacy"){return new Ge(t,e,n,a,r,i).recognize()}(t,e,i.urlAfterRedirects,n(i.urlAfterRedirects),a,r).pipe(Object(_.a)(t=>Object.assign({},i,{targetSnapshot:t})))))}}(this.rootComponentType,this.config,t=>this.serializeUrl(t),this.paramsInheritanceStrategy,this.relativeLinkResolution),Object(q.a)(t=>{"eager"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(t.urlAfterRedirects,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects)}),Object(q.a)(t=>{const n=new K(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);e.next(n)}));var a,r,s,o;if(n&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:n,extractedUrl:a,source:r,restoredState:s,extras:o}=t,u=new Y(n,this.serializeUrl(a),r,s);e.next(u);const l=Kt(a,this.rootComponentType).snapshot;return Object(i.a)(Object.assign({},t,{targetSnapshot:l,urlAfterRedirects:a,extras:Object.assign({},o,{skipLocationChange:!1,replaceUrl:!1})}))}return this.rawUrlTree=t.rawUrl,this.browserUrlTree=t.urlAfterRedirects,t.resolve(null),y.a}),$e(t=>{const{targetSnapshot:e,id:n,extractedUrl:a,rawUrl:r,extras:{skipLocationChange:i,replaceUrl:s}}=t;return this.hooks.beforePreactivation(e,{navigationId:n,appliedUrlTree:a,rawUrlTree:r,skipLocationChange:!!i,replaceUrl:!!s})}),Object(q.a)(t=>{const e=new $(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),Object(_.a)(t=>Object.assign({},t,{guards:Ae(t.targetSnapshot,t.currentSnapshot,this.rootContexts)})),function(t,e){return function(n){return n.pipe(Object(I.a)(n=>{const{targetSnapshot:a,currentSnapshot:r,guards:{canActivateChecks:o,canDeactivateChecks:u}}=n;return 0===u.length&&0===o.length?Object(i.a)(Object.assign({},n,{guardsResult:!0})):function(t,e,n,a){return Object(s.a)(t).pipe(Object(I.a)(t=>function(t,e,n,a,r){const s=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!s||0===s.length)return Object(i.a)(!0);const o=s.map(i=>{const s=ke(i,e,r);let o;if(function(t){return t&&be(t.canDeactivate)}(s))o=xt(s.canDeactivate(t,e,n,a));else{if(!be(s))throw new Error("Invalid CanDeactivate guard");o=xt(s(t,e,n,a))}return o.pipe(Object(S.a)())});return Object(i.a)(o).pipe(De())}(t.component,t.route,n,e,a)),Object(S.a)(t=>!0!==t,!0))}(u,a,r,t).pipe(Object(I.a)(n=>n&&"boolean"==typeof n?function(t,e,n,a){return Object(s.a)(e).pipe(Object(P.a)(e=>Object(s.a)([Me(e.route.parent,a),Pe(e.route,a),je(t,e.path,n),qe(t,e.route,n)]).pipe(Object(T.a)(),Object(S.a)(t=>!0!==t,!0))),Object(S.a)(t=>!0!==t,!0))}(a,o,t,e):Object(i.a)(n)),Object(_.a)(t=>Object.assign({},n,{guardsResult:t})))}))}}(this.ngModule.injector,t=>this.triggerEvent(t)),Object(q.a)(t=>{if(me(t.guardsResult)){const e=lt(`Redirecting to "${this.serializeUrl(t.guardsResult)}"`);throw e.url=t.guardsResult,e}}),Object(q.a)(t=>{const e=new Z(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot,!!t.guardsResult);this.triggerEvent(e)}),Object(D.a)(t=>{if(!t.guardsResult){this.resetUrlToCurrentUrlTree();const n=new U(t.id,this.serializeUrl(t.extractedUrl),"");return e.next(n),t.resolve(!1),!1}return!0}),$e(t=>{if(t.guards.canActivateChecks.length)return Object(i.a)(t).pipe(Object(q.a)(t=>{const e=new J(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}),(e=this.paramsInheritanceStrategy,n=this.ngModule.injector,function(t){return t.pipe(Object(I.a)(t=>{const{targetSnapshot:a,guards:{canActivateChecks:r}}=t;return r.length?Object(s.a)(r).pipe(Object(P.a)(t=>function(t,e,n,a){return function(t,e,n,a){const r=Object.keys(t);if(0===r.length)return Object(i.a)({});if(1===r.length){const i=r[0];return Ke(t[i],e,n,a).pipe(Object(_.a)(t=>({[i]:t})))}const o={};return Object(s.a)(r).pipe(Object(I.a)(r=>Ke(t[r],e,n,a).pipe(Object(_.a)(t=>(o[r]=t,t))))).pipe(Object(O.a)(),Object(_.a)(()=>o))}(t._resolve,t,e,a).pipe(Object(_.a)(e=>(t._resolvedData=e,t.data=Object.assign({},t.data,Zt(t,n).resolve),null)))}(t.route,a,e,n)),Object(M.a)((t,e)=>t),Object(_.a)(e=>t)):Object(i.a)(t)}))}),Object(q.a)(t=>{const e=new Q(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(t.urlAfterRedirects),t.targetSnapshot);this.triggerEvent(e)}));var e,n}),$e(t=>{const{targetSnapshot:e,id:n,extractedUrl:a,rawUrl:r,extras:{skipLocationChange:i,replaceUrl:s}}=t;return this.hooks.afterPreactivation(e,{navigationId:n,appliedUrlTree:a,rawUrlTree:r,skipLocationChange:!!i,replaceUrl:!!s})}),Object(_.a)(t=>{const e=function(t,e,n){const a=function t(e,n,a){if(a&&e.shouldReuseRoute(n.value,a.value.snapshot)){const r=a.value;r._futureSnapshot=n.value;const i=function(e,n,a){return n.children.map(n=>{for(const r of a.children)if(e.shouldReuseRoute(r.value.snapshot,n.value))return t(e,n,r);return t(e,n)})}(e,n,a);return new Ht(r,i)}{const a=e.retrieve(n.value);if(a){const t=a.route;return function t(e,n){if(e.value.routeConfig!==n.value.routeConfig)throw new Error("Cannot reattach ActivatedRouteSnapshot created from a different route");if(e.children.length!==n.children.length)throw new Error("Cannot reattach ActivatedRouteSnapshot with a different number of children");n.value._futureSnapshot=e.value;for(let a=0;a<e.children.length;++a)t(e.children[a],n.children[a])}(n,t),t}{const a=new $t(new o.a((r=n.value).url),new o.a(r.params),new o.a(r.queryParams),new o.a(r.fragment),new o.a(r.data),r.outlet,r.component,r),i=n.children.map(n=>t(e,n));return new Ht(a,i)}}var r}(t,e._root,n?n._root:void 0);return new Wt(a,e)}(this.routeReuseStrategy,t.targetSnapshot,t.currentRouterState);return Object.assign({},t,{targetRouterState:e})}),Object(q.a)(t=>{this.currentUrlTree=t.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl),this.routerState=t.targetRouterState,"deferred"===this.urlUpdateStrategy&&(t.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,!!t.extras.replaceUrl,t.id,t.extras.state),this.browserUrlTree=t.urlAfterRedirects)}),(u=this.rootContexts,l=this.routeReuseStrategy,d=t=>this.triggerEvent(t),Object(_.a)(t=>(new ge(l,t.targetRouterState,t.currentRouterState,d).activate(u),t))),Object(q.a)({next(){n=!0},complete(){n=!0}}),(r=()=>{if(!n&&!a){this.resetUrlToCurrentUrlTree();const n=new U(t.id,this.serializeUrl(t.extractedUrl),`Navigation ID ${t.id} is not equal to the current navigation id ${this.navigationId}`);e.next(n),t.resolve(!1)}this.currentNavigation=null},t=>t.lift(new F(r))),Object(w.a)(n=>{if(a=!0,(r=n)&&r.ngNavigationCancelingError){const a=me(n.url);a||(this.navigated=!0,this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl));const r=new U(t.id,this.serializeUrl(t.extractedUrl),n.message);e.next(r),t.resolve(!1),a&&this.navigateByUrl(n.url)}else{this.resetStateAndUrl(t.currentRouterState,t.currentUrlTree,t.rawUrl);const a=new W(t.id,this.serializeUrl(t.extractedUrl),n);e.next(a);try{t.resolve(this.errorHandler(n))}catch(i){t.reject(i)}}var r;return y.a}));var r,u,l,d}))}resetRootComponentType(t){this.rootComponentType=t,this.routerState.root.component=this.rootComponentType}getTransition(){const t=this.transitions.value;return t.urlAfterRedirects=this.browserUrlTree,t}setTransition(t){this.transitions.next(Object.assign({},this.getTransition(),t))}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{let e=this.parseUrl(t.url);const n="popstate"===t.type?"popstate":"hashchange",a=t.state&&t.state.navigationId?t.state:null;setTimeout(()=>{this.scheduleNavigation(e,n,a,{replaceUrl:!0})},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(t){this.events.next(t)}resetConfig(t){ft(t),this.config=t.map(pt),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=null)}createUrlTree(t,e={}){const{relativeTo:n,queryParams:a,fragment:i,preserveQueryParams:s,queryParamsHandling:o,preserveFragment:u}=e;Object(r.isDevMode)()&&s&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead.");const l=n||this.routerState.root,d=u?this.currentUrlTree.fragment:i;let c=null;if(o)switch(o){case"merge":c=Object.assign({},this.currentUrlTree.queryParams,a);break;case"preserve":c=this.currentUrlTree.queryParams;break;default:c=a||null}else c=s?this.currentUrlTree.queryParams:a||null;return null!==c&&(c=this.removeEmptyProps(c)),function(t,e,n,a,r){if(0===n.length)return re(e.root,e.root,e,a,r);const i=function(t){if("string"==typeof t[0]&&1===t.length&&"/"===t[0])return new ie(!0,0,t);let e=0,n=!1;const a=t.reduce((t,a,r)=>{if("object"==typeof a&&null!=a){if(a.outlets){const e={};return vt(a.outlets,(t,n)=>{e[n]="string"==typeof t?t.split("/"):t}),[...t,{outlets:e}]}if(a.segmentPath)return[...t,a.segmentPath]}return"string"!=typeof a?[...t,a]:0===r?(a.split("/").forEach((a,r)=>{0==r&&"."===a||(0==r&&""===a?n=!0:".."===a?e++:""!=a&&t.push(a))}),t):[...t,a]},[]);return new ie(n,e,a)}(n);if(i.toRoot())return re(e.root,new Ot([],{}),e,a,r);const s=function(t,e,n){if(t.isAbsolute)return new se(e.root,!0,0);if(-1===n.snapshot._lastPathIndex)return new se(n.snapshot._urlSegment,!0,0);const a=ae(t.commands[0])?0:1;return function(t,e,n){let a=t,r=e,i=n;for(;i>r;){if(i-=r,a=a.parent,!a)throw new Error("Invalid number of '../'");r=a.segments.length}return new se(a,!1,r-i)}(n.snapshot._urlSegment,n.snapshot._lastPathIndex+a,t.numberOfDoubleDots)}(i,e,t),o=s.processChildren?le(s.segmentGroup,s.index,i.commands):ue(s.segmentGroup,s.index,i.commands);return re(s.segmentGroup,o,e,a,r)}(l,this.currentUrlTree,t,c,d)}navigateByUrl(t,e={skipLocationChange:!1}){Object(r.isDevMode)()&&this.isNgZoneEnabled&&!r.NgZone.isInAngularZone()&&this.console.warn("Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?");const n=me(t)?t:this.parseUrl(t),a=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(a,"imperative",null,e)}navigate(t,e={skipLocationChange:!1}){return function(t){for(let e=0;e<t.length;e++){const n=t[e];if(null==n)throw new Error(`The requested path contains ${n} segment at index ${e}`)}}(t),this.navigateByUrl(this.createUrlTree(t,e),e)}serializeUrl(t){return this.urlSerializer.serialize(t)}parseUrl(t){let e;try{e=this.urlSerializer.parse(t)}catch(n){e=this.malformedUriErrorHandler(n,this.urlSerializer,t)}return e}isActive(t,e){if(me(t))return _t(this.currentUrlTree,t,e);const n=this.parseUrl(t);return _t(this.currentUrlTree,n,e)}removeEmptyProps(t){return Object.keys(t).reduce((e,n)=>{const a=t[n];return null!=a&&(e[n]=a),e},{})}processNavigations(){this.navigations.subscribe(t=>{this.navigated=!0,this.lastSuccessfulId=t.id,this.events.next(new H(t.id,this.serializeUrl(t.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,this.currentNavigation=null,t.resolve(!0)},t=>{this.console.warn("Unhandled Navigation Error: ")})}scheduleNavigation(t,e,n,a){const r=this.getTransition();if(r&&"imperative"!==e&&"imperative"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(r&&"hashchange"==e&&"popstate"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(r&&"popstate"==e&&"hashchange"===r.source&&r.rawUrl.toString()===t.toString())return Promise.resolve(!0);let i=null,s=null;const o=new Promise((t,e)=>{i=t,s=e}),u=++this.navigationId;return this.setTransition({id:u,source:e,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:t,extras:a,resolve:i,reject:s,promise:o,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),o.catch(t=>Promise.reject(t))}setBrowserUrl(t,e,n,a){const r=this.urlSerializer.serialize(t);a=a||{},this.location.isCurrentPathEqualTo(r)||e?this.location.replaceState(r,"",Object.assign({},a,{navigationId:n})):this.location.go(r,"",Object.assign({},a,{navigationId:n}))}resetStateAndUrl(t,e,n){this.routerState=t,this.currentUrlTree=e,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",{navigationId:this.lastSuccessfulId})}}class on{constructor(t,e,n,a,r){this.router=t,this.route=e,this.commands=[],null==n&&a.setAttribute(r.nativeElement,"tabindex","0")}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}set preserveQueryParams(t){Object(r.isDevMode)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated!, use queryParamsHandling instead."),this.preserve=t}onClick(){const t={skipLocationChange:ln(this.skipLocationChange),replaceUrl:ln(this.replaceUrl)};return this.router.navigateByUrl(this.urlTree,t),!0}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:ln(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:ln(this.preserveFragment)})}}class un{constructor(t,e,n){this.router=t,this.route=e,this.locationStrategy=n,this.commands=[],this.subscription=t.events.subscribe(t=>{t instanceof H&&this.updateTargetUrlAndHref()})}set routerLink(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]}set preserveQueryParams(t){Object(r.isDevMode)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead."),this.preserve=t}ngOnChanges(t){this.updateTargetUrlAndHref()}ngOnDestroy(){this.subscription.unsubscribe()}onClick(t,e,n,a){if(0!==t||e||n||a)return!0;if("string"==typeof this.target&&"_self"!=this.target)return!0;const r={skipLocationChange:ln(this.skipLocationChange),replaceUrl:ln(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,r),!1}updateTargetUrlAndHref(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:ln(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:ln(this.preserveFragment)})}}function ln(t){return""===t||!!t}class dn{constructor(t,e,n,a,r){this.router=t,this.element=e,this.renderer=n,this.link=a,this.linkWithHref=r,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.subscription=t.events.subscribe(t=>{t instanceof H&&this.update()})}ngAfterContentInit(){this.links.changes.subscribe(t=>this.update()),this.linksWithHrefs.changes.subscribe(t=>this.update()),this.update()}set routerLinkActive(t){const e=Array.isArray(t)?t:t.split(" ");this.classes=e.filter(t=>!!t)}ngOnChanges(t){this.update()}ngOnDestroy(){this.subscription.unsubscribe()}update(){this.links&&this.linksWithHrefs&&this.router.navigated&&Promise.resolve().then(()=>{const t=this.hasActiveLinks();this.isActive!==t&&(this.isActive=t,this.classes.forEach(e=>{t?this.renderer.addClass(this.element.nativeElement,e):this.renderer.removeClass(this.element.nativeElement,e)}))})}isLinkActive(t){return e=>t.isActive(e.urlTree,this.routerLinkActiveOptions.exact)}hasActiveLinks(){const t=this.isLinkActive(this.router);return this.link&&t(this.link)||this.linkWithHref&&t(this.linkWithHref)||this.links.some(t)||this.linksWithHrefs.some(t)}}class cn{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.children=new fn,this.attachRef=null}}class fn{constructor(){this.contexts=new Map}onChildOutletCreated(t,e){const n=this.getOrCreateContext(t);n.outlet=e,this.contexts.set(t,n)}onChildOutletDestroyed(t){const e=this.getContext(t);e&&(e.outlet=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let e=this.getContext(t);return e||(e=new cn,this.contexts.set(t,e)),e}getContext(t){return this.contexts.get(t)||null}}class hn{constructor(t,e,n,a,i){this.parentContexts=t,this.location=e,this.resolver=n,this.changeDetector=i,this.activated=null,this._activatedRoute=null,this.activateEvents=new r.EventEmitter,this.deactivateEvents=new r.EventEmitter,this.name=a||"primary",t.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const t=this.parentContexts.getContext(this.name);t&&t.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.resolver||null))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,t}attach(t,e){this.activated=t,this._activatedRoute=e,this.location.insert(t.hostView)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,e){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=t;const n=(e=e||this.resolver).resolveComponentFactory(t._futureSnapshot.routeConfig.component),a=this.parentContexts.getOrCreateContext(this.name).children,r=new gn(t,a,this.location.injector);this.activated=this.location.createComponent(n,this.location.length,r),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}class gn{constructor(t,e,n){this.route=t,this.childContexts=e,this.parent=n}get(t,e){return t===$t?this.route:t===fn?this.childContexts:this.parent.get(t,e)}}class pn{}class bn{preload(t,e){return e().pipe(Object(w.a)(()=>Object(i.a)(null)))}}class mn{preload(t,e){return Object(i.a)(null)}}class yn{constructor(t,e,n,a,r){this.router=t,this.injector=a,this.preloadingStrategy=r,this.loader=new Xe(e,n,e=>t.triggerEvent(new X(e)),e=>t.triggerEvent(new tt(e)))}setUpPreloading(){this.subscription=this.router.events.pipe(Object(D.a)(t=>t instanceof H),Object(P.a)(()=>this.preload())).subscribe(()=>{})}preload(){const t=this.injector.get(r.NgModuleRef);return this.processRoutes(t,this.router.config)}ngOnDestroy(){this.subscription.unsubscribe()}processRoutes(t,e){const n=[];for(const a of e)if(a.loadChildren&&!a.canLoad&&a._loadedConfig){const t=a._loadedConfig;n.push(this.processRoutes(t.module,t.routes))}else a.loadChildren&&!a.canLoad?n.push(this.preloadConfig(t,a)):a.children&&n.push(this.processRoutes(t,a.children));return Object(s.a)(n).pipe(Object(V.a)(),Object(_.a)(t=>{}))}preloadConfig(t,e){return this.preloadingStrategy.preload(e,()=>this.loader.load(t.injector,e).pipe(Object(I.a)(t=>(e._loadedConfig=t,this.processRoutes(t.module,t.routes)))))}}class vn{constructor(t,e,n={}){this.router=t,this.viewportScroller=e,this.options=n,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||"disabled",n.anchorScrolling=n.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(t=>{t instanceof Y?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof H&&(this.lastId=t.id,this.scheduleScrollEvent(t,this.router.parseUrl(t.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(t=>{t instanceof it&&(t.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,e){this.router.triggerEvent(new it(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,e))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}const xn=new r.InjectionToken("ROUTER_CONFIGURATION"),_n=new r.InjectionToken("ROUTER_FORROOT_GUARD"),Tn=[a.Location,{provide:Nt,useClass:Ct},{provide:sn,useFactory:Rn,deps:[r.ApplicationRef,Nt,fn,a.Location,r.Injector,r.NgModuleFactoryLoader,r.Compiler,Qe,xn,[tn,new r.Optional],[Ze,new r.Optional]]},fn,{provide:$t,useFactory:An,deps:[sn]},{provide:r.NgModuleFactoryLoader,useClass:r.SystemJsNgModuleLoader},yn,mn,bn,{provide:xn,useValue:{enableTracing:!1}}];function On(){return new r.NgProbeToken("Router",sn)}class wn{constructor(t,e){}static forRoot(t,e){return{ngModule:wn,providers:[Tn,Cn(t),{provide:_n,useFactory:Nn,deps:[[sn,new r.Optional,new r.SkipSelf]]},{provide:xn,useValue:e||{}},{provide:a.LocationStrategy,useFactory:In,deps:[a.PlatformLocation,[new r.Inject(a.APP_BASE_HREF),new r.Optional],xn]},{provide:vn,useFactory:Sn,deps:[sn,a.ViewportScroller,xn]},{provide:pn,useExisting:e&&e.preloadingStrategy?e.preloadingStrategy:mn},{provide:r.NgProbeToken,multi:!0,useFactory:On},[kn,{provide:r.APP_INITIALIZER,multi:!0,useFactory:En,deps:[kn]},{provide:Dn,useFactory:Ln,deps:[kn]},{provide:r.APP_BOOTSTRAP_LISTENER,multi:!0,useExisting:Dn}]]}}static forChild(t){return{ngModule:wn,providers:[Cn(t)]}}}function Sn(t,e,n){return n.scrollOffset&&e.setOffset(n.scrollOffset),new vn(t,e,n)}function In(t,e,n={}){return n.useHash?new a.HashLocationStrategy(t,e):new a.PathLocationStrategy(t,e)}function Nn(t){if(t)throw new Error("RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.");return"guarded"}function Cn(t){return[{provide:r.ANALYZE_FOR_ENTRY_COMPONENTS,multi:!0,useValue:t},{provide:Qe,multi:!0,useValue:t}]}function Rn(t,e,n,a,r,i,s,o,u={},l,d){const c=new sn(null,e,n,a,r,i,s,mt(o));if(l&&(c.urlHandlingStrategy=l),d&&(c.routeReuseStrategy=d),u.errorHandler&&(c.errorHandler=u.errorHandler),u.malformedUriErrorHandler&&(c.malformedUriErrorHandler=u.malformedUriErrorHandler),u.enableTracing){const t=Object(z.q)();c.events.subscribe(e=>{t.logGroup(`Router Event: ${e.constructor.name}`),t.log(e.toString()),t.log(e),t.logGroupEnd()})}return u.onSameUrlNavigation&&(c.onSameUrlNavigation=u.onSameUrlNavigation),u.paramsInheritanceStrategy&&(c.paramsInheritanceStrategy=u.paramsInheritanceStrategy),u.urlUpdateStrategy&&(c.urlUpdateStrategy=u.urlUpdateStrategy),u.relativeLinkResolution&&(c.relativeLinkResolution=u.relativeLinkResolution),c}function An(t){return t.routerState.root}class kn{constructor(t){this.injector=t,this.initNavigation=!1,this.resultOfPreactivationDone=new x.a}appInitializer(){return this.injector.get(a.LOCATION_INITIALIZED,Promise.resolve(null)).then(()=>{let t=null;const e=new Promise(e=>t=e),n=this.injector.get(sn),a=this.injector.get(xn);if(this.isLegacyDisabled(a)||this.isLegacyEnabled(a))t(!0);else if("disabled"===a.initialNavigation)n.setUpLocationChangeListener(),t(!0);else{if("enabled"!==a.initialNavigation)throw new Error(`Invalid initialNavigation options: '${a.initialNavigation}'`);n.hooks.afterPreactivation=()=>this.initNavigation?Object(i.a)(null):(this.initNavigation=!0,t(!0),this.resultOfPreactivationDone),n.initialNavigation()}return e})}bootstrapListener(t){const e=this.injector.get(xn),n=this.injector.get(yn),a=this.injector.get(vn),i=this.injector.get(sn),s=this.injector.get(r.ApplicationRef);t===s.components[0]&&(this.isLegacyEnabled(e)?i.initialNavigation():this.isLegacyDisabled(e)&&i.setUpLocationChangeListener(),n.setUpPreloading(),a.init(),i.resetRootComponentType(s.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())}isLegacyEnabled(t){return"legacy_enabled"===t.initialNavigation||!0===t.initialNavigation||void 0===t.initialNavigation}isLegacyDisabled(t){return"legacy_disabled"===t.initialNavigation||!1===t.initialNavigation}}function En(t){return t.appInitializer.bind(t)}function Ln(t){return t.bootstrapListener.bind(t)}const Dn=new r.InjectionToken("Router Initializer")},iSVu:function(t,e,n){var a=n("xs3f"),r=Function.toString;"function"!=typeof a.inspectSource&&(a.inspectSource=function(t){return r.call(t)}),t.exports=a.inspectSource},iYuL:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),a=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,a){return t?/-MMM-/.test(a)?n[t.month()]:e[t.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:a,longMonthsParse:a,shortMonthsParse:a,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},idmN:function(t,e,n){var a=n("ZWtO"),r=n("FZoo"),i=n("4uTw");t.exports=function(t,e,n){for(var s=-1,o=e.length,u={};++s<o;){var l=e[s],d=a(t,l);n(d,l)&&r(u,i(l,t),d)}return u}},ienR:function(t,e,n){"use strict";n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return q})),n.d(e,"c",(function(){return j})),n.d(e,"d",(function(){return F})),n.d(e,"e",(function(){return G})),n.d(e,"f",(function(){return Y})),n.d(e,"g",(function(){return nt})),n.d(e,"h",(function(){return H})),n.d(e,"i",(function(){return z})),n.d(e,"j",(function(){return V})),n.d(e,"k",(function(){return B})),n.d(e,"l",(function(){return b})),n.d(e,"m",(function(){return st})),n.d(e,"n",(function(){return rt})),n.d(e,"o",(function(){return it})),n.d(e,"p",(function(){return dt})),n.d(e,"q",(function(){return ot})),n.d(e,"r",(function(){return ut})),n.d(e,"s",(function(){return lt})),n.d(e,"t",(function(){return M})),n.d(e,"u",(function(){return m})),n.d(e,"v",(function(){return p})),n.d(e,"w",(function(){return U})),n.d(e,"x",(function(){return W})),n.d(e,"y",(function(){return K})),n.d(e,"z",(function(){return $})),n.d(e,"A",(function(){return J})),n.d(e,"B",(function(){return Q})),n.d(e,"C",(function(){return X})),n.d(e,"D",(function(){return tt})),n.d(e,"E",(function(){return et}));var a=n("8Y7J"),r=n("pLZG"),i=n("lJxs"),s=n("IzEk"),o=n("xj/R"),u=n("2Vo4"),l=n("AfCQ"),d=n("2uy1"),c=(n("GS7A"),n("z/SZ")),f=(n("s7LF"),n("hpHm"));class h{constructor(){this.adaptivePosition=!1,this.useUtc=!1,this.isAnimated=!1,this.containerClass="theme-green",this.displayMonths=1,this.showWeekNumbers=!0,this.dateInputFormat="L",this.rangeSeparator=" - ",this.rangeInputFormat="L",this.monthTitle="MMMM",this.yearTitle="YYYY",this.dayLabel="D",this.monthLabel="MMMM",this.yearLabel="YYYY",this.weekNumbers="w"}}class g{constructor(){this._customRangesFish=[]}set minDate(t){this._effects.setMinDate(t)}set maxDate(t){this._effects.setMaxDate(t)}set daysDisabled(t){this._effects.setDaysDisabled(t)}set datesDisabled(t){this._effects.setDatesDisabled(t)}set isDisabled(t){this._effects.setDisabled(t)}set dateCustomClasses(t){this._effects.setDateCustomClasses(t)}setViewMode(t){}navigateTo(t){}dayHoverHandler(t){}weekHoverHandler(t){}monthHoverHandler(t){}yearHoverHandler(t){}daySelectHandler(t){}monthSelectHandler(t){}yearSelectHandler(t){}_stopPropagation(t){t.stopPropagation()}}let p=(()=>{class t{calculate(){return{type:t.CALCULATE}}format(){return{type:t.FORMAT}}flag(){return{type:t.FLAG}}select(e){return{type:t.SELECT,payload:e}}changeViewMode(e){return{type:t.CHANGE_VIEWMODE,payload:e}}navigateTo(e){return{type:t.NAVIGATE_TO,payload:e}}navigateStep(e){return{type:t.NAVIGATE_OFFSET,payload:e}}setOptions(e){return{type:t.SET_OPTIONS,payload:e}}selectRange(e){return{type:t.SELECT_RANGE,payload:e}}hoverDay(e){return{type:t.HOVER,payload:e.isHovered?e.cell.date:null}}minDate(e){return{type:t.SET_MIN_DATE,payload:e}}maxDate(e){return{type:t.SET_MAX_DATE,payload:e}}daysDisabled(e){return{type:t.SET_DAYSDISABLED,payload:e}}datesDisabled(e){return{type:t.SET_DATESDISABLED,payload:e}}isDisabled(e){return{type:t.SET_IS_DISABLED,payload:e}}setDateCustomClasses(e){return{type:t.SET_DATE_CUSTOM_CLASSES,payload:e}}setLocale(e){return{type:t.SET_LOCALE,payload:e}}}return t.CALCULATE="[datepicker] calculate dates matrix",t.FORMAT="[datepicker] format datepicker values",t.FLAG="[datepicker] set flags",t.SELECT="[datepicker] select date",t.NAVIGATE_OFFSET="[datepicker] shift view date",t.NAVIGATE_TO="[datepicker] change view date",t.SET_OPTIONS="[datepicker] update render options",t.HOVER="[datepicker] hover date",t.CHANGE_VIEWMODE="[datepicker] switch view mode",t.SET_MIN_DATE="[datepicker] set min date",t.SET_MAX_DATE="[datepicker] set max date",t.SET_DAYSDISABLED="[datepicker] set days disabled",t.SET_DATESDISABLED="[datepicker] set dates disabled",t.SET_IS_DISABLED="[datepicker] set is disabled",t.SET_DATE_CUSTOM_CLASSES="[datepicker] set date custom classes",t.SET_LOCALE="[datepicker] set datepicker locale",t.SELECT_RANGE="[daterangepicker] select dates range",t})();class b{constructor(){this._defaultLocale="en",this._locale=new u.a(this._defaultLocale),this._localeChange=this._locale.asObservable()}get locale(){return this._locale}get localeChange(){return this._localeChange}get currentLocale(){return this._locale.getValue()}use(t){t!==this.currentLocale&&this._locale.next(t)}}class m{constructor(t,e){this._actions=t,this._localeService=e,this._subs=[]}init(t){return this._store=t,this}setValue(t){this._store.dispatch(this._actions.select(t))}setRangeValue(t){this._store.dispatch(this._actions.selectRange(t))}setMinDate(t){return this._store.dispatch(this._actions.minDate(t)),this}setMaxDate(t){return this._store.dispatch(this._actions.maxDate(t)),this}setDaysDisabled(t){return this._store.dispatch(this._actions.daysDisabled(t)),this}setDatesDisabled(t){return this._store.dispatch(this._actions.datesDisabled(t)),this}setDisabled(t){return this._store.dispatch(this._actions.isDisabled(t)),this}setDateCustomClasses(t){return this._store.dispatch(this._actions.setDateCustomClasses(t)),this}setOptions(t){const e=Object.assign({locale:this._localeService.currentLocale},t);return this._store.dispatch(this._actions.setOptions(e)),this}setBindings(t){return t.daysCalendar=this._store.select(t=>t.flaggedMonths).pipe(Object(r.a)(t=>!!t)),t.monthsCalendar=this._store.select(t=>t.flaggedMonthsCalendar).pipe(Object(r.a)(t=>!!t)),t.yearsCalendar=this._store.select(t=>t.yearsCalendarFlagged).pipe(Object(r.a)(t=>!!t)),t.viewMode=this._store.select(t=>t.view.mode),t.options=this._store.select(t=>t.showWeekNumbers).pipe(Object(i.a)(t=>({showWeekNumbers:t}))),this}setEventHandlers(t){return t.setViewMode=t=>{this._store.dispatch(this._actions.changeViewMode(t))},t.navigateTo=t=>{this._store.dispatch(this._actions.navigateStep(t.step))},t.dayHoverHandler=t=>{const e=t.cell;e.isOtherMonth||e.isDisabled||(this._store.dispatch(this._actions.hoverDay(t)),e.isHovered=t.isHovered)},t.monthHoverHandler=t=>{t.cell.isHovered=t.isHovered},t.yearHoverHandler=t=>{t.cell.isHovered=t.isHovered},t.monthSelectHandler=t=>{t.isDisabled||this._store.dispatch(this._actions.navigateTo({unit:{month:Object(o.l)(t.date),year:Object(o.j)(t.date)},viewMode:"day"}))},t.yearSelectHandler=t=>{t.isDisabled||this._store.dispatch(this._actions.navigateTo({unit:{year:Object(o.j)(t.date)},viewMode:"month"}))},this}registerDatepickerSideEffects(){return this._subs.push(this._store.select(t=>t.view).subscribe(t=>{this._store.dispatch(this._actions.calculate())})),this._subs.push(this._store.select(t=>t.monthsModel).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.format()))),this._subs.push(this._store.select(t=>t.formattedMonths).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.selectedDate).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.selectedRange).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.monthsCalendar).subscribe(()=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.yearsCalendarModel).pipe(Object(r.a)(t=>!!t)).subscribe(()=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.hoveredDate).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._store.select(t=>t.dateCustomClasses).pipe(Object(r.a)(t=>!!t)).subscribe(t=>this._store.dispatch(this._actions.flag()))),this._subs.push(this._localeService.localeChange.subscribe(t=>this._store.dispatch(this._actions.setLocale(t)))),this}destroy(){for(const t of this._subs)t.unsubscribe()}}const y={date:new Date,mode:"day"},v=Object.assign(new h,{locale:"en",view:y,selectedRange:[],monthViewOptions:{width:7,height:6}});function x(t,e,n){const a=e&&Object(o.p)(Object(o.d)(t,"month"),e,"day"),r=n&&Object(o.n)(Object(o.G)(t,"month"),n,"day");return a||r}function _(t,e,n){const a=e&&Object(o.p)(Object(o.d)(t,"year"),e,"day"),r=n&&Object(o.n)(Object(o.G)(t,"year"),n,"day");return a||r}function T(t,e=0){const n=t&&t.yearsCalendarModel&&t.yearsCalendarModel[e];return n&&n.years&&n.years[0]&&n.years[0][0]&&n.years[0][0].date}function O(t,e){let n=t.initialDate;const a=new Array(t.height);for(let r=0;r<t.height;r++){a[r]=new Array(t.width);for(let i=0;i<t.width;i++)a[r][i]=e(n),n=Object(o.F)(n,t.shift)}return a}function w(t,e){const n=Object(o.i)(t),a=function(t,e){if(Object(o.t)(t,e.firstDayOfWeek))return t;const n=function(t,e){if(0===e)return t;const n=t-e%7;return n<0?n+7:n}(Object(o.h)(t),e.firstDayOfWeek);return Object(o.F)(t,{day:-n})}(n,e);return{daysMatrix:O({width:e.width,height:e.height,initialDate:a,shift:{day:1}},t=>t),month:n}}function S(t){const e=Object(o.k)(t),n=e.weekdaysShort(),a=e.firstDayOfWeek();return[...n.slice(a),...n.slice(0,a)]}function I(t,e){return!e||t>=e}const N={month:1};function C(t,e){return{months:O({width:3,height:4,initialDate:Object(o.G)(t,"year"),shift:N},t=>({date:t,label:Object(o.f)(t,e.monthLabel,e.locale)})),monthTitle:"",yearTitle:Object(o.f)(t,e.yearTitle,e.locale)}}const R=-1*(Math.floor(8)-1),A={year:1};function k(t,e,n){const a=O({width:4,height:4,initialDate:function(t,e){return e&&t.getFullYear()>=e.getFullYear()&&t.getFullYear()<e.getFullYear()+16?e:Object(o.F)(t,{year:R})}(t,n),shift:A},t=>({date:t,label:Object(o.f)(t,e.yearLabel,e.locale)}));return{years:a,monthTitle:"",yearTitle:function(t,e){return`${Object(o.f)(t[0][0].date,e.yearTitle,e.locale)} - ${Object(o.f)(t[3][3].date,e.yearTitle,e.locale)}`}(a,e)}}function E(t=v,e){switch(e.type){case p.CALCULATE:return function(t){const e=t.displayMonths;let n=t.view.date;if("day"===t.view.mode){t.showPreviousMonth&&0===t.selectedRange.length&&(n=Object(o.F)(n,{month:-1})),t.monthViewOptions.firstDayOfWeek=Object(o.k)(t.locale).firstDayOfWeek();const a=new Array(e);for(let r=0;r<e;r++)a[r]=w(n,t.monthViewOptions),n=Object(o.F)(n,{month:1});return Object.assign({},t,{monthsModel:a})}if("month"===t.view.mode){const a=new Array(e);for(let r=0;r<e;r++)a[r]=C(n,D(t)),n=Object(o.F)(n,{year:1});return Object.assign({},t,{monthsCalendar:a})}if("year"===t.view.mode){const a=new Array(e);for(let r=0;r<e;r++)a[r]=k(n,D(t),"year"===t.minMode?T(t,r):void 0),n=Object(o.F)(n,{year:16});return Object.assign({},t,{yearsCalendarModel:a})}return t}(t);case p.FORMAT:return function(t,e){if("day"===t.view.mode){const e=t.monthsModel.map((e,n)=>function(t,e,n){return{month:t.month,monthTitle:Object(o.f)(t.month,e.monthTitle,e.locale),yearTitle:Object(o.f)(t.month,e.yearTitle,e.locale),weekNumbers:(a=t.daysMatrix,r=e.weekNumbers,i=e.locale,a.map(t=>t[0]?Object(o.f)(t[0],r,i):"")),weekdays:S(e.locale),weeks:t.daysMatrix.map((t,a)=>({days:t.map((t,r)=>({date:t,label:Object(o.f)(t,e.dayLabel,e.locale),monthIndex:n,weekIndex:a,dayIndex:r}))}))};var a,r,i}(e,D(t),n));return Object.assign({},t,{formattedMonths:e})}const n=t.displayMonths;let a=t.view.date;if("month"===t.view.mode){const e=new Array(n);for(let r=0;r<n;r++)e[r]=C(a,D(t)),a=Object(o.F)(a,{year:1});return Object.assign({},t,{monthsCalendar:e})}if("year"===t.view.mode){const e=new Array(n);for(let r=0;r<n;r++)e[r]=k(a,D(t)),a=Object(o.F)(a,{year:16});return Object.assign({},t,{yearsCalendarModel:e})}return t}(t);case p.FLAG:return function(t,e){if("day"===t.view.mode){const e=t.formattedMonths.map((e,n)=>function(t,e){return t.weeks.forEach(n=>{n.days.forEach((a,r)=>{const i=!Object(o.w)(a.date,t.month),s=!i&&Object(o.v)(a.date,e.hoveredDate),u=!i&&e.selectedRange&&Object(o.v)(a.date,e.selectedRange[0]),l=!i&&e.selectedRange&&Object(o.v)(a.date,e.selectedRange[1]),d=!i&&Object(o.v)(a.date,e.selectedDate)||u||l,c=!i&&e.selectedRange&&function(t,e,n){return!(!t||!e[0])&&(e[1]?t>e[0]&&t<=e[1]:!!n&&t>e[0]&&t<=n)}(a.date,e.selectedRange,e.hoveredDate),f=e.isDisabled||Object(o.p)(a.date,e.minDate,"day")||Object(o.n)(a.date,e.maxDate,"day")||Object(o.s)(a.date,e.daysDisabled)||(h=a.date,!(void 0===(g=e.datesDisabled)||!g||!g.length)&&g.some(t=>Object(o.u)(h,t,"date")));var h,g;const p=new Date,b=!i&&Object(o.v)(a.date,p),m=e.dateCustomClasses&&e.dateCustomClasses.map(t=>Object(o.v)(a.date,t.date)?t.classes:[]).reduce((t,e)=>t.concat(e),[]).join(" ")||"",y=Object.assign({},a,{isOtherMonth:i,isHovered:s,isSelected:d,isSelectionStart:u,isSelectionEnd:l,isInRange:c,isDisabled:f,isToday:b,customClasses:m});a.isOtherMonth===y.isOtherMonth&&a.isHovered===y.isHovered&&a.isSelected===y.isSelected&&a.isSelectionStart===y.isSelectionStart&&a.isSelectionEnd===y.isSelectionEnd&&a.isDisabled===y.isDisabled&&a.isInRange===y.isInRange&&a.customClasses===y.customClasses||(n.days[r]=y)})}),t.hideLeftArrow=e.isDisabled||e.monthIndex>0&&e.monthIndex!==e.displayMonths,t.hideRightArrow=e.isDisabled||e.monthIndex<e.displayMonths&&e.monthIndex+1!==e.displayMonths,t.disableLeftArrow=x(Object(o.F)(t.month,{month:-1}),e.minDate,e.maxDate),t.disableRightArrow=x(Object(o.F)(t.month,{month:1}),e.minDate,e.maxDate),t}(e,{isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,daysDisabled:t.daysDisabled,datesDisabled:t.datesDisabled,hoveredDate:t.hoveredDate,selectedDate:t.selectedDate,selectedRange:t.selectedRange,displayMonths:t.displayMonths,dateCustomClasses:t.dateCustomClasses,monthIndex:n}));return Object.assign({},t,{flaggedMonths:e})}if("month"===t.view.mode){const e=t.monthsCalendar.map((e,n)=>{return r={isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,hoveredMonth:t.hoveredMonth,selectedDate:t.selectedDate,displayMonths:t.displayMonths,monthIndex:n},(a=e).months.forEach((t,e)=>{t.forEach((t,n)=>{const i=Object(o.w)(t.date,r.hoveredMonth),s=r.isDisabled||x(t.date,r.minDate,r.maxDate),u=Object(o.w)(t.date,r.selectedDate),l=Object.assign(t,{isHovered:i,isDisabled:s,isSelected:u});t.isHovered===l.isHovered&&t.isDisabled===l.isDisabled&&t.isSelected===l.isSelected||(a.months[e][n]=l)})}),a.hideLeftArrow=r.monthIndex>0&&r.monthIndex!==r.displayMonths,a.hideRightArrow=r.monthIndex<r.displayMonths&&r.monthIndex+1!==r.displayMonths,a.disableLeftArrow=_(Object(o.F)(a.months[0][0].date,{year:-1}),r.minDate,r.maxDate),a.disableRightArrow=_(Object(o.F)(a.months[0][0].date,{year:1}),r.minDate,r.maxDate),a;var a,r});return Object.assign({},t,{flaggedMonthsCalendar:e})}if("year"===t.view.mode){const e=t.yearsCalendarModel.map((e,n)=>function(t,e){t.years.forEach((n,a)=>{n.forEach((n,r)=>{const i=Object(o.x)(n.date,e.hoveredYear),s=e.isDisabled||_(n.date,e.minDate,e.maxDate),u=Object(o.x)(n.date,e.selectedDate),l=Object.assign(n,{isHovered:i,isDisabled:s,isSelected:u});n.isHovered===l.isHovered&&n.isDisabled===l.isDisabled&&n.isSelected===l.isSelected||(t.years[a][r]=l)})}),t.hideLeftArrow=e.yearIndex>0&&e.yearIndex!==e.displayMonths,t.hideRightArrow=e.yearIndex<e.displayMonths&&e.yearIndex+1!==e.displayMonths,t.disableLeftArrow=_(Object(o.F)(t.years[0][0].date,{year:-1}),e.minDate,e.maxDate);const n=t.years.length-1,a=t.years[n].length-1;return t.disableRightArrow=_(Object(o.F)(t.years[n][a].date,{year:1}),e.minDate,e.maxDate),t}(e,{isDisabled:t.isDisabled,minDate:t.minDate,maxDate:t.maxDate,hoveredYear:t.hoveredYear,selectedDate:t.selectedDate,displayMonths:t.displayMonths,yearIndex:n}));return Object.assign({},t,{yearsCalendarFlagged:e})}return t}(t);case p.NAVIGATE_OFFSET:return function(t,e){const n={view:{mode:t.view.mode,date:L(t,e)}};return Object.assign({},t,n)}(t,e);case p.NAVIGATE_TO:{const n=e.payload,a=Object(o.E)(t.view.date,n.unit);let r,i;return I(n.viewMode,t.minMode)?(i=n.viewMode,r={view:{date:a,mode:i}}):(i=t.view.mode,r={selectedDate:a,view:{date:a,mode:i}}),Object.assign({},t,r)}case p.CHANGE_VIEWMODE:return I(e.payload,t.minMode)?Object.assign({},t,{view:{date:t.view.date,mode:e.payload}}):t;case p.HOVER:return Object.assign({},t,{hoveredDate:e.payload});case p.SELECT:{const n={selectedDate:e.payload,view:t.view},a=t.view.mode,r=P(e.payload||t.view.date,t.minDate,t.maxDate);return n.view={mode:a,date:r},Object.assign({},t,n)}case p.SET_OPTIONS:{const n=e.payload,a=n.minMode?n.minMode:t.view.mode,r=P(Object(o.r)(n.value)&&n.value||Object(o.o)(n.value)&&Object(o.r)(n.value[0])&&n.value[0]||t.view.date,n.minDate,n.maxDate);return n.view={mode:a,date:r},n.value&&(Object(o.o)(n.value)&&(n.selectedRange=n.value),n.value instanceof Date&&(n.selectedDate=n.value)),Object.assign({},t,n)}case p.SELECT_RANGE:{const n={selectedRange:e.payload,view:t.view},a=t.view.mode,r=P(e.payload&&e.payload[0]||t.view.date,t.minDate,t.maxDate);return n.view={mode:a,date:r},Object.assign({},t,n)}case p.SET_MIN_DATE:return Object.assign({},t,{minDate:e.payload});case p.SET_MAX_DATE:return Object.assign({},t,{maxDate:e.payload});case p.SET_IS_DISABLED:return Object.assign({},t,{isDisabled:e.payload});case p.SET_DATE_CUSTOM_CLASSES:return Object.assign({},t,{dateCustomClasses:e.payload});default:return t}}function L(t,e){if("year"===t.view.mode&&"year"===t.minMode){const n=T(t,0),a=Object(o.F)(n,{year:-R});return Object(o.F)(a,e.payload)}return Object(o.F)(Object(o.G)(t.view.date,"month"),e.payload)}function D(t){return{locale:t.locale,monthTitle:t.monthTitle,yearTitle:t.yearTitle,dayLabel:t.dayLabel,monthLabel:t.monthLabel,yearLabel:t.yearLabel,weekNumbers:t.weekNumbers}}function P(t,e,n){const a=Array.isArray(t)?t[0]:t;return e&&Object(o.n)(e,a,"day")?e:n&&Object(o.p)(n,a,"day")?n:a}class M extends l.b{constructor(){const t=new u.a({type:"[datepicker] dispatcher init"});super(t,E,new l.a(v,t,E))}}class q extends g{constructor(t,e,n,r,i,s,o){super(),this._config=e,this._store=n,this._element=r,this._actions=i,this._positionService=o,this.valueChange=new a.EventEmitter,this.animationState="void",this._subs=[],this._effects=s,t.setStyle(r.nativeElement,"display","block"),t.setStyle(r.nativeElement,"position","absolute")}set value(t){this._effects.setValue(t)}ngOnInit(){this._positionService.setOptions({modifiers:{flip:{enabled:this._config.adaptivePosition}},allowedPositions:["top","bottom"]}),this._positionService.event$.pipe(Object(s.a)(1)).subscribe(()=>{this._positionService.disable(),this.animationState=this._config.isAnimated?this.isTopPosition?"animated-up":"animated-down":"unanimated"}),this.isOtherMonthsActive=this._config.selectFromOtherMonth,this.containerClass=this._config.containerClass,this._effects.init(this._store).setOptions(this._config).setBindings(this).setEventHandlers(this).registerDatepickerSideEffects(),this._subs.push(this._store.select(t=>t.selectedDate).subscribe(t=>this.valueChange.emit(t)))}get isTopPosition(){return this._element.nativeElement.classList.contains("top")}positionServiceEnable(){this._positionService.enable()}daySelectHandler(t){(this.isOtherMonthsActive?t.isDisabled:t.isOtherMonth||t.isDisabled)||this._store.dispatch(this._actions.select(t.date))}ngOnDestroy(){for(const t of this._subs)t.unsubscribe();this._effects.destroy()}}class j{constructor(t,e,n,r,i){this._config=t,this.placement="bottom",this.triggers="click",this.outsideClick=!0,this.container="body",this.outsideEsc=!0,this.bsValueChange=new a.EventEmitter,this._subs=[],Object.assign(this,this._config),this._datepicker=i.createLoader(e,r,n),this.onShown=this._datepicker.onShown,this.onHidden=this._datepicker.onHidden}get isOpen(){return this._datepicker.isShown}set isOpen(t){t?this.show():this.hide()}set bsValue(t){this._bsValue&&t&&this._bsValue.getTime()===t.getTime()||(this._bsValue=t,this.bsValueChange.emit(t))}ngOnInit(){this._datepicker.listen({outsideClick:this.outsideClick,outsideEsc:this.outsideEsc,triggers:this.triggers,show:()=>this.show()}),this.setConfig()}ngOnChanges(t){this._datepickerRef&&this._datepickerRef.instance&&(t.minDate&&(this._datepickerRef.instance.minDate=this.minDate),t.maxDate&&(this._datepickerRef.instance.maxDate=this.maxDate),t.daysDisabled&&(this._datepickerRef.instance.daysDisabled=this.daysDisabled),t.datesDisabled&&(this._datepickerRef.instance.datesDisabled=this.datesDisabled),t.isDisabled&&(this._datepickerRef.instance.isDisabled=this.isDisabled),t.dateCustomClasses&&(this._datepickerRef.instance.dateCustomClasses=this.dateCustomClasses))}show(){this._datepicker.isShown||(this.setConfig(),this._datepickerRef=this._datepicker.provide({provide:h,useValue:this._config}).attach(q).to(this.container).position({attachment:this.placement}).show({placement:this.placement}),this._subs.push(this.bsValueChange.subscribe(t=>{this._datepickerRef.instance.value=t})),this._subs.push(this._datepickerRef.instance.valueChange.subscribe(t=>{this.bsValue=t,this.hide()})))}hide(){this.isOpen&&this._datepicker.hide();for(const t of this._subs)t.unsubscribe()}toggle(){if(this.isOpen)return this.hide();this.show()}setConfig(){this._config=Object.assign({},this._config,this.bsConfig,{value:this._bsValue,isDisabled:this.isDisabled,minDate:this.minDate||this.bsConfig&&this.bsConfig.minDate,maxDate:this.maxDate||this.bsConfig&&this.bsConfig.maxDate,daysDisabled:this.daysDisabled||this.bsConfig&&this.bsConfig.daysDisabled,dateCustomClasses:this.dateCustomClasses||this.bsConfig&&this.bsConfig.dateCustomClasses,datesDisabled:this.datesDisabled||this.bsConfig&&this.bsConfig.datesDisabled,minMode:this.minMode||this.bsConfig&&this.bsConfig.minMode})}ngOnDestroy(){this._datepicker.dispose()}}class F extends h{}class G extends q{constructor(t,e,n,a,r,i,s){super(t,e,n,a,r,i,s),t.setStyle(a.nativeElement,"display","inline-block"),t.setStyle(a.nativeElement,"position","static")}}class V extends h{constructor(){super(...arguments),this.displayMonths=2,this.isAnimated=!1}}class z extends g{constructor(t,e,n,r,i,s,o){super(),this._config=e,this._store=n,this._element=r,this._actions=i,this._positionService=o,this.valueChange=new a.EventEmitter,this.animationState="void",this._rangeStack=[],this._subs=[],this._effects=s,t.setStyle(r.nativeElement,"display","block"),t.setStyle(r.nativeElement,"position","absolute")}set value(t){this._effects.setRangeValue(t)}ngOnInit(){this._positionService.setOptions({modifiers:{flip:{enabled:this._config.adaptivePosition}},allowedPositions:["top","bottom"]}),this._positionService.event$.pipe(Object(s.a)(1)).subscribe(()=>{this._positionService.disable(),this.animationState=this._config.isAnimated?this.isTopPosition?"animated-up":"animated-down":"unanimated"}),this.containerClass=this._config.containerClass,this.isOtherMonthsActive=this._config.selectFromOtherMonth,this._effects.init(this._store).setOptions(this._config).setBindings(this).setEventHandlers(this).registerDatepickerSideEffects(),this._subs.push(this._store.select(t=>t.selectedRange).subscribe(t=>this.valueChange.emit(t)))}get isTopPosition(){return this._element.nativeElement.classList.contains("top")}positionServiceEnable(){this._positionService.enable()}daySelectHandler(t){(this.isOtherMonthsActive?t.isDisabled:t.isOtherMonth||t.isDisabled)||(1===this._rangeStack.length&&(this._rangeStack=t.date>=this._rangeStack[0]?[this._rangeStack[0],t.date]:[t.date]),0===this._rangeStack.length&&(this._rangeStack=[t.date]),this._store.dispatch(this._actions.selectRange(this._rangeStack)),2===this._rangeStack.length&&(this._rangeStack=[]))}ngOnDestroy(){for(const t of this._subs)t.unsubscribe();this._effects.destroy()}}class B extends z{constructor(t,e,n,a,r,i,s){super(t,e,n,a,r,i,s),t.setStyle(a.nativeElement,"display","inline-block"),t.setStyle(a.nativeElement,"position","static")}}class Y{constructor(t,e,n,a,r){this._picker=t,this._localeService=e,this._renderer=n,this._elRef=a,this.changeDetection=r,this._onChange=Function.prototype,this._onTouched=Function.prototype,this._validatorChange=Function.prototype,this._picker.bsValueChange.subscribe(t=>{let e=t;if(t){const n=this._localeService.currentLocale,a=Object(o.k)(n);if(!a)throw new Error(`Locale "${n}" is not defined, please add it with "defineLocale(...)"`);e=a.preinput(t)}this._setInputValue(e),this._value!==e&&(this._value=e,this._onChange(e),this._onTouched()),this.changeDetection.markForCheck()}),this._localeService.localeChange.subscribe(()=>{this._setInputValue(this._value)})}_setInputValue(t){const e=t?Object(o.f)(t,this._picker._config.dateInputFormat,this._localeService.currentLocale):"";this._renderer.setProperty(this._elRef.nativeElement,"value",e)}onChange(t){this.writeValue(t.target.value),this._onChange(this._value),this._onTouched()}validate(t){const e=t.value;if(null==e||""===e)return null;if(Object(o.q)(e)){if(!Object(o.r)(e))return{bsDate:{invalid:e}};if(this._picker&&this._picker.minDate&&Object(o.p)(e,this._picker.minDate,"date"))return this.writeValue(this._picker.minDate),{bsDate:{minDate:this._picker.minDate}};if(this._picker&&this._picker.maxDate&&Object(o.n)(e,this._picker.maxDate,"date"))return this.writeValue(this._picker.maxDate),{bsDate:{maxDate:this._picker.maxDate}}}}registerOnValidatorChange(t){this._validatorChange=t}writeValue(t){if(t){const e=this._localeService.currentLocale;if(!Object(o.k)(e))throw new Error(`Locale "${e}" is not defined, please add it with "defineLocale(...)"`);this._value=Object(o.B)(t,this._picker._config.dateInputFormat,this._localeService.currentLocale),this._picker._config.useUtc&&(this._value=Object(o.H)(this._value))}else this._value=null;this._picker.bsValue=this._value}setDisabledState(t){this._picker.isDisabled=t,t?this._renderer.setAttribute(this._elRef.nativeElement,"disabled","disabled"):this._renderer.removeAttribute(this._elRef.nativeElement,"disabled")}registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}onBlur(){this._onTouched()}hide(){this._picker.hide(),this._renderer.selectRootElement(this._elRef.nativeElement).blur()}}class H extends h{constructor(){super(...arguments),this.displayMonths=2}}class U{}class W{}class K{}class ${constructor(t,e,n){this._config=t,this._elRef=e,this._renderer=n}ngOnInit(){this.day.isToday&&this._config&&this._config.customTodayClass&&this._renderer.addClass(this._elRef.nativeElement,this._config.customTodayClass),"string"==typeof this.day.customClasses&&this.day.customClasses.split(" ").filter(t=>t).forEach(t=>{this._renderer.addClass(this._elRef.nativeElement,t)})}}const Z=function(){var t={UP:0,DOWN:1};return t[t.UP]="UP",t[t.DOWN]="DOWN",t}();class J{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter}navTo(t){this.onNavigate.emit(t?Z.DOWN:Z.UP)}view(t){this.onViewMode.emit(t)}}class Q{constructor(t){this._config=t,this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter,this.onHoverWeek=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{month:Z.DOWN===t?-1:1}})}changeViewMode(t){this.onViewMode.emit(t)}selectDay(t){this.onSelect.emit(t)}selectWeek(t){if(!this._config.selectWeek)return;if(t.days&&t.days[0]&&!t.days[0].isDisabled&&this._config.selectFromOtherMonth)return void this.onSelect.emit(t.days[0]);if(0===t.days.length)return;const e=t.days.find(t=>this._config.selectFromOtherMonth?!t.isDisabled:!t.isOtherMonth&&!t.isDisabled);this.onSelect.emit(e)}weekHoverHandler(t,e){this._config.selectWeek&&t.days.find(t=>this._config.selectFromOtherMonth?!t.isDisabled:!t.isOtherMonth&&!t.isDisabled)&&(t.isHovered=e,this.isWeekHovered=e,this.onHoverWeek.emit(t))}hoverDay(t,e){this._config.selectFromOtherMonth&&t.isOtherMonth&&(t.isOtherMonthHovered=e),this.onHover.emit({cell:t,isHovered:e})}}class X{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{year:Z.DOWN===t?-1:1}})}viewMonth(t){this.onSelect.emit(t)}hoverMonth(t,e){this.onHover.emit({cell:t,isHovered:e})}changeViewMode(t){this.onViewMode.emit(t)}}class tt{constructor(){this.ampm="ok",this.hours=0,this.minutes=0}}class et{constructor(){this.onNavigate=new a.EventEmitter,this.onViewMode=new a.EventEmitter,this.onSelect=new a.EventEmitter,this.onHover=new a.EventEmitter}navigateTo(t){this.onNavigate.emit({step:{year:16*(Z.DOWN===t?-1:1)}})}viewYear(t){this.onSelect.emit(t)}hoverYear(t,e){this.onHover.emit({cell:t,isHovered:e})}changeViewMode(t){this.onViewMode.emit(t)}}class nt{static forRoot(){return{ngModule:nt,providers:[c.a,d.a,M,p,h,H,F,V,m,b]}}}class at{format(t,e,n){return Object(o.f)(t,e,n)}}class rt{constructor(){this.selectionDone=new a.EventEmitter(void 0),this.update=new a.EventEmitter(!1),this.activeDateChange=new a.EventEmitter(void 0),this.stepDay={},this.stepMonth={},this.stepYear={},this.modes=["day","month","year"],this.dateFormatter=new at}get activeDate(){return this._activeDate}set activeDate(t){this._activeDate=t}ngOnInit(){this.uniqueId=`datepicker--${Math.floor(1e4*Math.random())}`,this.initDate?(this.activeDate=this.initDate,this.selectedDate=new Date(this.activeDate.valueOf()),this.update.emit(this.activeDate)):void 0===this.activeDate&&(this.activeDate=new Date)}ngOnChanges(t){this.refreshView(),this.checkIfActiveDateGotUpdated(t.activeDate)}checkIfActiveDateGotUpdated(t){if(t&&!t.firstChange){const e=t.previousValue;e&&e instanceof Date&&e.getTime()!==t.currentValue.getTime()&&this.activeDateChange.emit(this.activeDate)}}setCompareHandler(t,e){"day"===e&&(this.compareHandlerDay=t),"month"===e&&(this.compareHandlerMonth=t),"year"===e&&(this.compareHandlerYear=t)}compare(t,e){if(void 0!==t&&void 0!==e)return"day"===this.datepickerMode&&this.compareHandlerDay?this.compareHandlerDay(t,e):"month"===this.datepickerMode&&this.compareHandlerMonth?this.compareHandlerMonth(t,e):"year"===this.datepickerMode&&this.compareHandlerYear?this.compareHandlerYear(t,e):void 0}setRefreshViewHandler(t,e){"day"===e&&(this.refreshViewHandlerDay=t),"month"===e&&(this.refreshViewHandlerMonth=t),"year"===e&&(this.refreshViewHandlerYear=t)}refreshView(){"day"===this.datepickerMode&&this.refreshViewHandlerDay&&this.refreshViewHandlerDay(),"month"===this.datepickerMode&&this.refreshViewHandlerMonth&&this.refreshViewHandlerMonth(),"year"===this.datepickerMode&&this.refreshViewHandlerYear&&this.refreshViewHandlerYear()}dateFilter(t,e){return this.dateFormatter.format(t,e,this.locale)}isActive(t){return 0===this.compare(t.date,this.activeDate)&&(this.activeDateId=t.uid,!0)}createDateObject(t,e){const n={};return n.date=new Date(t.getFullYear(),t.getMonth(),t.getDate()),n.date=this.fixTimeZone(n.date),n.label=this.dateFilter(t,e),n.selected=0===this.compare(t,this.selectedDate),n.disabled=this.isDisabled(t),n.current=0===this.compare(t,new Date),n.customClass=this.getCustomClassForDate(n.date),n}split(t,e){const n=[];for(;t.length>0;)n.push(t.splice(0,e));return n}fixTimeZone(t){const e=t.getHours();return new Date(t.getFullYear(),t.getMonth(),t.getDate(),23===e?e+2:0)}select(t,e=!0){this.datepickerMode===this.minMode?(this.activeDate||(this.activeDate=new Date(0,0,0,0,0,0,0)),this.activeDate=new Date(t.getFullYear(),t.getMonth(),t.getDate()),this.activeDate=this.fixTimeZone(this.activeDate),e&&this.selectionDone.emit(this.activeDate)):(this.activeDate=new Date(t.getFullYear(),t.getMonth(),t.getDate()),this.activeDate=this.fixTimeZone(this.activeDate),e&&(this.datepickerMode=this.modes[this.modes.indexOf(this.datepickerMode)-1])),this.selectedDate=new Date(this.activeDate.valueOf()),this.update.emit(this.activeDate),this.refreshView()}move(t){let e;if("day"===this.datepickerMode&&(e=this.stepDay),"month"===this.datepickerMode&&(e=this.stepMonth),"year"===this.datepickerMode&&(e=this.stepYear),e){const n=this.activeDate.getFullYear()+t*(e.years||0),a=this.activeDate.getMonth()+t*(e.months||0);this.activeDate=new Date(n,a,1),this.refreshView(),this.activeDateChange.emit(this.activeDate)}}toggleMode(t){const e=t||1;this.datepickerMode===this.maxMode&&1===e||this.datepickerMode===this.minMode&&-1===e||(this.datepickerMode=this.modes[this.modes.indexOf(this.datepickerMode)+e],this.refreshView())}getCustomClassForDate(t){if(!this.customClass)return"";const e=this.customClass.find(e=>e.date.valueOf()===t.valueOf()&&e.mode===this.datepickerMode,this);return void 0===e?"":e.clazz}compareDateDisabled(t,e){if(void 0!==t&&void 0!==e)return"day"===t.mode&&this.compareHandlerDay?this.compareHandlerDay(t.date,e):"month"===t.mode&&this.compareHandlerMonth?this.compareHandlerMonth(t.date,e):"year"===t.mode&&this.compareHandlerYear?this.compareHandlerYear(t.date,e):void 0}isDisabled(t){let e=!1;return this.dateDisabled&&this.dateDisabled.forEach(n=>{0===this.compareDateDisabled(n,t)&&(e=!0)}),this.dayDisabled&&(e=e||this.dayDisabled.indexOf(t.getDay())>-1),e||this.minDate&&this.compare(t,this.minDate)<0||this.maxDate&&this.compare(t,this.maxDate)>0}}class it{constructor(){this.locale="en",this.datepickerMode="day",this.startingDay=0,this.yearRange=20,this.minMode="day",this.maxMode="year",this.showWeeks=!0,this.formatDay="DD",this.formatMonth="MMMM",this.formatYear="YYYY",this.formatDayHeader="dd",this.formatDayTitle="MMMM YYYY",this.formatMonthTitle="YYYY",this.onlyCurrentMonth=!1,this.monthColLimit=3,this.yearColLimit=5,this.shortcutPropagation=!1}}class st{constructor(t){this.datepickerMode="day",this.showWeeks=!0,this.selectionDone=new a.EventEmitter(void 0),this.activeDateChange=new a.EventEmitter(void 0),this.onChange=Function.prototype,this.onTouched=Function.prototype,this._now=new Date,this.config=t,this.configureOptions()}get activeDate(){return this._activeDate||this._now}set activeDate(t){this._activeDate=t}configureOptions(){Object.assign(this,this.config)}onUpdate(t){this.activeDate=t,this.onChange(t)}onSelectionDone(t){this.selectionDone.emit(t)}onActiveDateChange(t){this.activeDateChange.emit(t)}writeValue(t){if(0!==this._datePicker.compare(t,this._activeDate))return t&&t instanceof Date?(this.activeDate=t,void this._datePicker.select(t,!1)):void(this.activeDate=t?new Date(t):void 0)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}}class ot{constructor(t){this.labels=[],this.rows=[],this.weekNumbers=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepDay={months:1},this.datePicker.setRefreshViewHandler((function(){const e=this.activeDate.getFullYear(),n=this.activeDate.getMonth(),a=new Date(e,n,1),r=this.startingDay-a.getDay(),i=r>0?7-r:-r,s=new Date(a.getTime());i>0&&s.setDate(1-i);const o=t.getDates(s,42),u=[];for(let t=0;t<42;t++){const e=this.createDateObject(o[t],this.formatDay);e.secondary=o[t].getMonth()!==n,e.uid=this.uniqueId+"-"+t,u[t]=e}t.labels=[];for(let l=0;l<7;l++)t.labels[l]={},t.labels[l].abbr=this.dateFilter(u[l].date,this.formatDayHeader),t.labels[l].full=this.dateFilter(u[l].date,"EEEE");if(t.title=this.dateFilter(this.activeDate,this.formatDayTitle),t.rows=this.split(u,7),this.showWeeks){t.weekNumbers=[];const e=(11-this.startingDay)%7,n=t.rows.length;for(let a=0;a<n;a++)t.weekNumbers.push(t.getISO8601WeekNumber(t.rows[a][e].date))}}),"day"),this.datePicker.setCompareHandler((function(t,e){const n=new Date(t.getFullYear(),t.getMonth(),t.getDate()),a=new Date(e.getFullYear(),e.getMonth(),e.getDate());return n.getTime()-a.getTime()}),"day"),this.datePicker.refreshView()}getDates(t,e){const n=new Array(e);let a,r=new Date(t.getTime()),i=0;for(;i<e;)a=new Date(r.getTime()),a=this.datePicker.fixTimeZone(a),n[i++]=a,r=new Date(a.getFullYear(),a.getMonth(),a.getDate()+1);return n}getISO8601WeekNumber(t){const e=new Date(t.getTime());e.setDate(e.getDate()+4-(e.getDay()||7));const n=e.getTime();return e.setMonth(0),e.setDate(1),Math.floor(Math.round((n-e.getTime())/864e5)/7)+1}}class ut{constructor(t){this.rows=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepMonth={years:1},this.datePicker.setRefreshViewHandler((function(){const e=new Array(12),n=this.activeDate.getFullYear();let a;for(let t=0;t<12;t++)a=new Date(n,t,1),a=this.fixTimeZone(a),e[t]=this.createDateObject(a,this.formatMonth),e[t].uid=this.uniqueId+"-"+t;t.title=this.dateFilter(this.activeDate,this.formatMonthTitle),t.rows=this.split(e,t.datePicker.monthColLimit)}),"month"),this.datePicker.setCompareHandler((function(t,e){const n=new Date(t.getFullYear(),t.getMonth()),a=new Date(e.getFullYear(),e.getMonth());return n.getTime()-a.getTime()}),"month"),this.datePicker.refreshView()}}class lt{constructor(t){this.rows=[],this.datePicker=t}get isBs4(){return!Object(f.d)()}ngOnInit(){const t=this;this.datePicker.stepYear={years:this.datePicker.yearRange},this.datePicker.setRefreshViewHandler((function(){const e=new Array(this.yearRange);let n;const a=t.getStartingYear(this.activeDate.getFullYear());for(let t=0;t<this.yearRange;t++)n=new Date(a+t,0,1),n=this.fixTimeZone(n),e[t]=this.createDateObject(n,this.formatYear),e[t].uid=this.uniqueId+"-"+t;t.title=[e[0].label,e[this.yearRange-1].label].join(" - "),t.rows=this.split(e,t.datePicker.yearColLimit)}),"year"),this.datePicker.setCompareHandler((function(t,e){return t.getFullYear()-e.getFullYear()}),"year"),this.datePicker.refreshView()}getStartingYear(t){return(t-1)/this.datePicker.yearRange*this.datePicker.yearRange+1}}class dt{static forRoot(){return{ngModule:dt,providers:[it]}}}},ijCd:function(t,e,n){var a=n("R/W3"),r=n("MMmD"),i=n("4qC0"),s=n("Sxd8"),o=n("P/G1"),u=Math.max;t.exports=function(t,e,n,l){t=r(t)?t:o(t),n=n&&!l?s(n):0;var d=t.length;return n<0&&(n=u(d+n,0)),i(t)?n<=d&&t.indexOf(e,n)>-1:!!d&&a(t,e,n)>-1}},insk:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");n("20UP");class r{constructor(t,e,n){this.sanitizer=t,this.settingsService=e,this.i18n=n,this.grafanaExist=!1,this.mode="&kiosk",this.loading=!0,this.styles={},this.dashboardExist=!0,this.icons=a.a,this.DEFAULT_TIME="from=now-1h&to=now",this.grafanaTimes=[{name:this.i18n("Last 5 minutes"),value:"from=now-5m&to=now"},{name:this.i18n("Last 15 minutes"),value:"from=now-15m&to=now"},{name:this.i18n("Last 30 minutes"),value:"from=now-30m&to=now"},{name:this.i18n("Last 1 hour (Default)"),value:"from=now-1h&to=now"},{name:this.i18n("Last 3 hours"),value:"from=now-3h&to=now"},{name:this.i18n("Last 6 hours"),value:"from=now-6h&to=now"},{name:this.i18n("Last 12 hours"),value:"from=now-12h&to=now"},{name:this.i18n("Last 24 hours"),value:"from=now-24h&to=now"},{name:this.i18n("Yesterday"),value:"from=now-1d%2Fd&to=now-1d%2Fd"},{name:this.i18n("Today so far"),value:"from=now%2Fd&to=now"},{name:this.i18n("Day before yesterday"),value:"from=now-2d%2Fd&to=now-2d%2Fd"},{name:this.i18n("Last 2 days"),value:"from=now-2d&to=now"},{name:this.i18n("This day last week"),value:"from=now-7d%2Fd&to=now-7d%2Fd"},{name:this.i18n("Previous week"),value:"from=now-1w%2Fw&to=now-1w%2Fw"},{name:this.i18n("This week so far"),value:"from=now%2Fw&to=now"},{name:this.i18n("Last 7 days"),value:"from=now-7d&to=now"},{name:this.i18n("Previous month"),value:"from=now-1M%2FM&to=now-1M%2FM"},{name:this.i18n("This month so far"),value:"from=now%2FM&to=now"},{name:this.i18n("Last 30 days"),value:"from=now-30d&to=now"},{name:this.i18n("Last 90 days"),value:"from=now-90d&to=now"},{name:this.i18n("Last 6 months"),value:"from=now-6M&to=now"},{name:this.i18n("Last 1 year"),value:"from=now-1y&to=now"},{name:this.i18n("Previous year"),value:"from=now-1y%2Fy&to=now-1y%2Fy"},{name:this.i18n("This year so far"),value:"from=now%2Fy&to=now"},{name:this.i18n("Last 2 years"),value:"from=now-2y&to=now"},{name:this.i18n("Last 5 years"),value:"from=now-5y&to=now"}]}ngOnInit(){this.time=this.DEFAULT_TIME,this.styles={one:"grafana_one",two:"grafana_two",three:"grafana_three"},this.settingsService.ifSettingConfigured("api/grafana/url",t=>{this.grafanaExist=!0,this.loading=!1,this.baseUrl=t+"/d/",this.getFrame()}),this.panelStyle=this.styles[this.grafanaStyle]}getFrame(){this.settingsService.validateGrafanaDashboardUrl(this.uid).subscribe(t=>this.dashboardExist=200===t),this.url=this.baseUrl+this.uid+"/"+this.grafanaPath+"&refresh=2s"+this.mode+"&"+this.time,this.grafanaSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.url)}onTimepickerChange(){this.grafanaExist&&this.getFrame()}reset(){this.time=this.DEFAULT_TIME,this.grafanaExist&&this.getFrame()}ngOnChanges(){this.grafanaExist&&this.getFrame()}}},iqWW:function(t,e,n){"use strict";var a=n("ZUd8").charAt;t.exports=function(t,e,n){return e+(n?a(t,e).length:1)}},itsj:function(t,e){t.exports=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}},iutN:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("8Y7J"),r=n("FE24"),i=n("GS7A"),s=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function o(t){return a["ɵvid"](2,[(t()(),a["ɵeld"](0,0,null,null,1,"div",[],[[2,"dropup",null],[2,"dropdown",null],[2,"show",null],[2,"open",null]],null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){var n=e.component;t(e,0,0,"up"===n.direction,"down"===n.direction,n.isOpen,n.isOpen)}))}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-dropdown-container",[["style","display:block;position: absolute;"]],null,null,null,o,s)),a["ɵdid"](1,180224,null,0,r.b,[r.f,a.ChangeDetectorRef,a.Renderer2,a.ElementRef,i.b],null,null)],null,null)}var l=a["ɵccf"]("bs-dropdown-container",r.b,u,{},{},["*"])},j8L6:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("25BL"),i=n("uIqm"),s=n("DqMs"),o=n("/NlG"),u=n("GiVz"),l=n("o4+5"),d=n("aXbf"),c=n("SVse");n("b5OY"),n("pxLl"),n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return b}));var f=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function h(t){return a["ɵvid"](0,[(t()(),a["ɵted"](0,null,[" "," "," "])),a["ɵppd"](1,1)],null,(function(t,e){var n=a["ɵunv"](e,0,0,t(e,1,0,a["ɵnov"](e.parent.parent,0),e.context.row.value));t(e,0,0,n,e.context.row.unit)}))}function g(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.getCounters(n)&&a),a}),r.b,r.a)),a["ɵdid"](1,2867200,null,0,i.a,[a.NgZone,a.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoSave:[3,"autoSave"]},{fetchData:"fetchData"}),(t()(),a["ɵand"](0,[[1,2],["valueTpl",2]],null,0,null,h))],(function(t,e){var n=e.component;t(e,1,0,n.counters,n.columns,"flex",!1)}),null)}function p(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,s.b,s.a)),a["ɵdid"](1,114688,null,0,o.a,[u.a],{type:[0,"type"]},null),(t()(),a["ɵted"](-1,0,["Performance counters not available"]))],(function(t,e){t(e,1,0,"warning")}),null)}function b(t){return a["ɵvid"](0,[a["ɵpid"](0,l.a,[d.a]),a["ɵqud"](671088640,1,{valueTpl:0}),(t()(),a["ɵand"](16777216,null,null,1,null,g)),a["ɵdid"](3,16384,null,0,c.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),a["ɵand"](0,[["warning",2]],null,0,null,p))],(function(t,e){t(e,3,0,e.component.counters,a["ɵnov"](e,4))}),null)}},"jKX/":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));class a{constructor(t=[]){["read","create","update","delete"].forEach(e=>this[e]=t.includes(e))}}class r{constructor(t){this.hosts=new a(t.hosts),this.configOpt=new a(t["config-opt"]),this.pool=new a(t.pool),this.osd=new a(t.osd),this.monitor=new a(t.monitor),this.rbdImage=new a(t["rbd-image"]),this.iscsi=new a(t.iscsi),this.rbdMirroring=new a(t["rbd-mirroring"]),this.rgw=new a(t.rgw),this.cephfs=new a(t.cephfs),this.manager=new a(t.manager),this.log=new a(t.log),this.user=new a(t.user),this.grafana=new a(t.grafana),this.prometheus=new a(t.prometheus),this.nfs=new a(t["nfs-ganesha"])}}},jUeY:function(t,e,n){!function(t){"use strict";t.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(t,e){return t?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(t,e,n){return t>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(t){return"μ"===(t+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(t,e){var n,a=this._calendarEl[t],r=e&&e.hours();return((n=a)instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(a=a.apply(e)),a.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n("wd/R"))},jV1L:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({selector:"tree-node-expander",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <span\n        *ngIf="node.hasChildren"\n        [class.toggle-children-wrapper-expanded]="node.isExpanded"\n        [class.toggle-children-wrapper-collapsed]="node.isCollapsed"\n        class="toggle-children-wrapper"\n        (click)="node.mouseAction(\'expanderClick\', $event)"\n      >\n        <span class="toggle-children"></span>\n      </span>\n      <span *ngIf="!node.hasChildren" class="toggle-children-placeholder">\n      </span>\n    </ng-container>\n  '})],t)}()},jVDg:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e,n){this.poolName=t,this.namespace=e,this.imageName=n}static fromString(t){const e=t.split("/");return new this(e[0],e.length>=3?e[1]:null,e.length>=3?e[2]:e[1])}getNameSpace(){return this.namespace?`${this.namespace}/`:""}toString(){return`${this.poolName}/${this.getNameSpace()}${this.imageName}`}toStringEncoded(){return encodeURIComponent(`${this.poolName}/${this.getNameSpace()}${this.imageName}`)}}},jVdC:function(t,e,n){!function(t){"use strict";var e="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function a(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function r(t,e,n){var r=t+" ";switch(n){case"ss":return r+(a(t)?"sekundy":"sekund");case"m":return e?"minuta":"minutę";case"mm":return r+(a(t)?"minuty":"minut");case"h":return e?"godzina":"godzinę";case"hh":return r+(a(t)?"godziny":"godzin");case"MM":return r+(a(t)?"miesiące":"miesięcy");case"yy":return r+(a(t)?"lata":"lat")}}t.defineLocale("pl",{months:function(t,a){return t?""===a?"("+n[t.month()]+"|"+e[t.month()]+")":/D MMMM/.test(a)?n[t.month()]:e[t.month()]:e},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:r,m:r,mm:r,h:r,hh:r,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:r,y:"rok",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},jZKg:function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var a=n("HDdC"),r=n("quSY");function i(t,e){return new a.a(n=>{const a=new r.a;let i=0;return a.add(e.schedule((function(){i!==t.length?(n.next(t[i++]),n.closed||a.add(this.schedule())):n.complete()}))),a})}},jeLo:function(t,e,n){var a=n("juv8"),r=n("mTTR");t.exports=function(t){return a(t,r(t))}},jfSC:function(t,e,n){!function(t){"use strict";var e={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};t.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(t){return/بعد از ظهر/.test(t)},meridiem:function(t,e,n){return t<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(t){return t.replace(/[۰-۹]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n("wd/R"))},jnO4:function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},a=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,n,i,s){var o=a(e),u=r[t][a(e)];return 2===o&&(u=u[n?0:1]),u.replace(/%d/i,e)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(t){return n[t]})).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},jqst:function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="id-ID">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Pengalih navigasi</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Dasbor</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Klaster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hos</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitor</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Layanan</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Konfigurasi</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>peta CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Modul Ceph Manajer</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Log</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Blok</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Pencerminan</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemfile</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Pengguna</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Buket</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Pilih bahasa</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Memuat data panel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Pemilih Waktu Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Reset Pengaturan</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Kembali</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Gagal memuat data.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>dipilih</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>ditemukan</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nama</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Deskripsi</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Deskripsi lengkap</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Bawaan</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon bawaan</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Nilai</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Simpan</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Penampil peta CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Memuat...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nama hos</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Isian ini tidak boleh kosong.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Ya, saya yakin.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Batal</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Tutup</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Daftar Hos</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Performa Keseluruhan</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>Entri tidak ditemukan</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Log Klaster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Log Audit</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Memuat konfigurasi...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>Konfigurasi tidak dapat dimuat.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Edit modul Ceph Manajer</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>Nilai yang dimasukkan bukan UUID yang valid, cth: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>Nilai yang dimasukkan harus alamat IP yang valid.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>Nilai yang dimasukkan harus berupa angka.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>Nilai yang dimasukkan harus berupa angka atau desimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Perbarui</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Status</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID Klaster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>monmap diubah</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>monmap epoch</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>kuorum con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>kuorum mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con yang dibutuhkan</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon yang dibutuhkan</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Memenuhi Kuorum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Tidak dalam Kuorum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Tambah</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Fitur</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Flag OSD Klaster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Kirim</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Tingkat lanjut...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioritas pemulihan OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioritas</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Ubah nilai prioritas</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Isian ini harus diisi!</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>Nilai harus antara 0 dan 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Ubah bobot</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Dalam } }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {dalam } }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Daftar OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Nilai</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Edit</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Hapus</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Kesehatan</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Statistik </target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Klien</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Semua klien dapat mengakses</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Alamat</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Wajib diisi</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Harus mengandung satu atau lebih nilai yang dipisahkan koma</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Contoh:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipe Akses</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Squash</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Tambah klien</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- Klaster tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Pilih klaster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Tambah daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Backend Penyimpanan</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- Tidak ada pool data tersedia --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Pilih backend penyimpanan --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Pengguna Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- Pengguna tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Pilih pengguna gerbang objek --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID Pengguna CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- Klien tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Pilih klien cephx --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nama CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Label Keamanan</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Aktifkan label keamanan</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>CephFS Path</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>Lintasan atau path harus dimulai dengan \'/\' dan diikuti dengan kata</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Direktori baru akan dibuat</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Path</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>Path hanya boleh berupa \'/\' atau kata</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Buket baru akan dibuat</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protokol NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Tag NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Klien mungkin tidak dapat mount subdirektori (cth. jika Tag = foo, klien mungkin tidak bisa mount foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Dengan menggunakan opsi Tag yang berbeda, Path yang sama akan diekspor beberapa kali.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Dengan menggunakan opsi Pseudo yang berbeda, Path yang sama akan diekspor beberapa kali.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- Tipe akses tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Pilih tipe akses --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- Squash tidak tersedia --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Pilih jenis squashing id pengguna yang akan dilakukan --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protokol Transport</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>Selamat datang di Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>Nama pengguna harus diisi</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>Kata sandi harus diisi</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Masuk</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Maaf, pengguna tidak terdaftar di Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Terlarang</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Maaf, Anda tidak dizinkan melihat hal yang Anda inginkan.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Konfigurasi RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Menghapus nilai konfigurasi lokal. Nilai konfigurasi induk akan diturun dan digunakan.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>Nilai minimum adalah 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Daftar pool</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>Nama hanya boleh terdiri dari alfanumerik, tanda hubung, dan garis bawah.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>Nama profil erasure code sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Plugin</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Pecahan data (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Harus sama dengan atau lebih dari 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Pecahan Coding (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Harus sama dengan atau lebih dari 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Penduga daya tahan (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Lokalitas (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Domain kegagalan Crush</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Lokalitas Crush</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Tidak ada</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Teknik</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Ukuran paket</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Crush root</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Kelas perangkat Crush</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>apa saja</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Direktori</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nama...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>Nama pool Ceph yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Jenis pool</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Pilih jenis pool --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grup penempatan</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Dibutuhkan setidaknya satu grup penempatan!</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>Klaster Anda tidak dapat menangani PG sebanyak ini. Mohon hitung ulang jumlah PG yang dibutuhkan.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Bantuan penghitungan</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Jumlah replikasi</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Flag</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>EC Overwrites</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplikasi</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Profil erasure code</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- Tidak ada profil erasure code --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Pilih profil erasure code --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Aturan CRUSH</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Pilih aturan crush --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Aturan crush</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Crush steps</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Kompresi</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Mode</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritma</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- Tidak ada algoritma pengompresian erasure --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Ukuran blob minimum</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>cth. 128KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>Nilai harus lebih besar dari 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Ukuran maksimum blob</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>cth. 512KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>Nilai harus lebih besar dari ukuran minimum blob</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Rasio</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Rasio kompresi</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>Nilai harus antara 0.0 dan 1.0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>cth. 10GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detail</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detail Performa</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detil Cache Bertingkat</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Pindahkan image ke tempat sampah</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>Proteksi berakhir pada</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>TIDAK DIPROTEKSI</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Format tanggal salah. Mohon gunakan "TTTT-BB-HH JJ:mm:dd".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>Proteksi telah kedaluarsa. Mohon pilih tanggal masa mendatang atau kosongkan.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Pindahkan Image</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Ikhtisar</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Target</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Otentikasi Discovery</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Pengguna</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nama pengguna harus terdiri dari 8 hingga 64 karakter dan\nhanya boleh mengandung huruf, \'.\', \'@\', \'-\', \'_\' atau \':\'.</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Kata sandi</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Pengguna Bersama</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Kata sandi bersama</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Informasi tersedia:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>iSCSI Target tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Pool</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Pool Data</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Dibuat</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Ukuran</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objek</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Ukuran objek</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Disiapkan</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/A</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total disiapkan</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unit setrip</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Jumlah setrip</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Induk</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Awalan nama blok</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Urutan</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Snapshot</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Image</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Pengaturan ini akan membatalkan nilai global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Ini adalah nilai global. Tidak ada nilai yang diset untuk image ini.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>\'/\' dan \'@\' tidak diperbolehkan.</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- Tidak ada pool rbd tersedia --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Pilih pool --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Gunakan pool data terdedikasi</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Pool data</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Pool terdedikasi yang menyimpan data-objek dari RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Anda harus menaikkan ukuran.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Tingkat lanjut</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Setrip</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unit setrip</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Pilih ukuran setrip --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Isian ini harus diisi karena jumlah setrip telah ditentukan!</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>Unit setrip lebih besar dari ukuran objek.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Jumlah setrip</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Isian wajib diisi karena unit setrip didefinisikan!</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>Jumlah setrip harus lebih besar dari 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Anda akan mengembalikan semula</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Kosongkan Tempah Sampah</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Semua</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Pool:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nama Pool...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Pulihkan Image</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Untuk memulihkan</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>ketik nama baru image dan pilih</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nama Baru</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Kedaluwarsa pada</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Diproteksi hingga</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topologi iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Mengganti parameter ini dari nilai bawaan biasanya tidak diperlukan.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Pengaturan</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Backstore</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Konfirmasi</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Pengaturan Lanjut</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>Target IQN</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>Pola IQN salah.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Contoh: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Informasi lainnya</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Pengaturan lanjutan target ini telah dimodifikasi.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portal</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Tambahkan portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Pengaturan Image ini telah dimodifikasi.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Tambahkan image</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Otentikasi ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Inisiator</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Inisiator</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>Klien IQN</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>Inisiator IQN harus unik.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Nama pengguna harus terdiri atas 8 hingga 64 karakter dan\nhanya boleh mengandung huruf, \'.\', \'@\', \'-\', \'_\' atau \':\'.</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>Inisiator termasuk ke dalam grup. Image akan dikonfigurasi di dalam grup.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>Tidak ada yang ditambahkan.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Tambahkan inisiator</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grup</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grup</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Tambahkan grup</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Tempat sampah</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Masalah</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Menyinkronkan</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Siap</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Edit mode pencerminan pool</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Klaster mitra harus dihapus sebelum menonaktfikan pencerminan.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Edit} other {Tambah} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nama Klaster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>Nama klaster tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>CephX ID</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>CephX ID...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>CephX ID tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Alamat Monitor</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Alamat dengan pemisah-koma...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>Alamat monitor tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>CephX Key</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Base64-encoded key...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>Kunci CephX harus base64 encoded.</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Penghitung kinerja tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Daftar Daemon</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Penghitung Performa</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Memuat data buket...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>Id</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>Nilai tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>Nama yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Pemilik</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Pilih pengguna --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Diaktifkan</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Jenis indeks</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Aturan penempatan</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Penanda</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Penanda maksimum</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versi</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versi Master</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Modifikasi waktu</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Zona grup</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Kuota Buket</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Ukuran maksimum</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Objek maksimum</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nama pengguna</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Pilih nama pengguna --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Kunci otomatis-dibuat</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Kunci akses</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Kunci rahasia</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nama lengkap</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Alamat email</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Dihentikan</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistem</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Buket maksimum</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subpengguna</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Kemampuan</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Kuota pengguna</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Tampilkan</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Kunci</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipe</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Pilih tipe --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Izin</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Pilih izin --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subpengguna</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>ID subpengguna sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>baca, tulis</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>penuh</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Kunci Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Sandi otomatis-dibuat</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Memuat data pengguna...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>Data pengguna tidak dapat dimuat.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>ID pengguna yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Ini bukan alamat email yang valid.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>Alamat email yang dipilih sudah digunakan.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Maks. buket</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Dimatikan</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Ubahsuai</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Kunci S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>Tidak ada sub-pengguna.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>Kunci tidak ditemukan.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>Kemampuan tidak ada.</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Ukuran tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Ukuran maks.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objek tak terbatas</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Objek maks.</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>Nilai yang dimasukkan harus &gt;= 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Deskripsi...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Izin</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Peran</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Konfirmasi kata sandi</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Konfirmasi kata sandi tidak sesuai dengan kata sandi.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Email</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Email tidak valid.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Anda akan menghapus izin "pengguna baca / perbarui" dari diri Anda sendiri.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Jika melanjutkan, Anda tidak akan lagi dapat menambahkan atau menghapus peran dari pengguna manapun.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>Anda yakin ingin melanjutkan?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Bantuan</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Dokumentasi </target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Tentang</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Pengaturan Dasbor</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Manajemen Pengguna</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Pengguna masuk</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Keluar</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atribut (peta OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Metadata tidak tersedia</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadata</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Penghitung kinerja</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Tulis</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Baca</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histogram</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Nilai saat ini</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Min</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Maks</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Sumber</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Level</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Boleh diperbarui saat dijalankan (bisa diedit)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Tag</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Nilai Enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Lihat juga</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Status Klaster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Manajer Daemon</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Gerbang Objek</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Server Metadata</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Gateway iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS klien</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Throughput Pengguna</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Baca/Tulis Klien</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Throughput Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Scrub</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Kinerja</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Kapasitas mentah</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>PG per OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Status PG</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Kapasitas</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Peringkat</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Terkini</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Otentikasi penemuan telah diperbarui</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>Tidak ada portal yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>Tidak ada image yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>Tidak ada image yang tersedia. Mohon pastikan Anda telah menambahkan image ke target.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>Tidak ada inisiator tersedia. Mohon pastikan Anda telah menambahkan inisiator ke target.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Target</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Keadaan</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Baca Bytes</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Tulis Bytes</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Ops Baca</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Ops Tulis</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O Sejak</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instance</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Isu</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Kemajuan</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Mode Edit</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Tambahkan Mitra</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Edit Mitra</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Hapus Mitra</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Pemimpin</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target># Lokal</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target># Jauh</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>mitra pencerminan</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Kunci</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Perataan mendalam</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>Lapisan</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Kunci eksklusif</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Peta objek (butuh kunci-eksklusif)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>Penjurnalan (membutuhkan kunci-eksklusif)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>TIDAK DIPROTEKSI</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Kembalikan snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Kembalikan</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Snapshot RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Dihapus pada</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>id</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipe</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>keadaan</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versi</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Hos</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>induk</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemon siaga</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Peringkat</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Aktivitas</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inode</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Penggunaan</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Diperbarui</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>Nilai dapat diperbarui saat runtime.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Daemon/klien tidak dapat mengambil nilai dari\nbasis data konfigurasi monitor. Kami tidak mengizinkan mengubah ini dari \'ceph config\nset ...\'. Pilihan ini harus dikonfigurasi melalui ceph.conf atau CLI.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>Pilihan hanya dapat bekerja selama daemon dimulai.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>Pilihan hanya berpengaruh pada pembuatan klaster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>Pilihan hanya berpengaruh pada pembuatan daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Layanan</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Nilai saat ini</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Dapat diedit</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Aktifkan</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Nonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Menghubungkan kembali, mohon tunggu...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Alamat Publik</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Buka Sesi</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>Tidak boleh Masuk</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>OSD yang telah ditandai keluar tidak akan ditandai masuk saat mereka menyala</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>Tidak boleh Keluar</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>OSD tidak akan otomatis ditandai keluar setelah interval dikonfigurasi</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>Tidak Nyala</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>OSD tidak diizinkan menyala</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>Tidak Mati</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Laporan kegagalan OSD sedang diabaikan sehingga monitor tidak akan menandai OSD mati</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Jeda</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Jeda baca dan tulis</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>Nonaktifkan Scrub</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>Scrubbing dinonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>Nonaktifkan Deep Scrub</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>Deep Scrubing dinonaktifkan</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>Tidak ada Penambalan</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>Penambalan PG dihentikan</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>Tidak ada Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>Pemulihan PG dihentikan</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Urutan Bitwise</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Gunakan urutan bitwise</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Buang Snapdirs</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>OSD memiliki snapset yang dikonversi</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Pulihkan yang telah dihapus</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Penghapusan dilakukan saat pemulihan bukan saat bermitra</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Batas Maks Log PG</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Taruh batas maks pada panjang log pg</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Flag OSD diperbarui</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>keluar</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>masuk</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>gugur</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Tandai</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD hilang</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>ditandai hilang</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Buang</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>dibuang</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>hancurkan</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>dihancurkan</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>hapus</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>PG</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bita baca</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bita tulis</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Ops baca</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Ops tulis</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Maks Penambalan</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Maks Pemulihan Aktif</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Maks Menjalankan Pemulihan Tunggal</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Jeda Pemulihan</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Tugas</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Keparahan</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Dimulai</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Terpakai</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Tersedia</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Bersih</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>Bekerja</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Peringatan</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Tidak diketahui</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>nyala</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>tidak ada filesistem</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>aktif</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>siaga</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/a</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon aktif</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>kuorum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>Layanan NFS Ganesha belum dikonfigurasi.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transport</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Pengguna CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Filesistem CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(diturunkan dari konfig global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>diturunkan dari konfig global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Pilih jenis squashing id pengguna yang akan dilakukan --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>Tidak ada daemon tersedia.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Mode Cache</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Min Waktu Usir</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Min Waktu Buang</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Target Maks Bita</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Target Maks Objek</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>Tidak ada aplikasi ditambahkan</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Batas aplikasi tercapai</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Sebuah pool hanya dapat memiliki empat definisi aplikasi.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Karakter diperbolehkan \'_a-zA-Z0-9\'</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>Panjang maksimum 128 karakter</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Saring atau tambah aplikasi</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Tambah aplikasi</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>profil erasure code</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Ukuran Replikasi</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Perubahan Terakhir</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Profil Erasure Code</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Aturan Crush</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>buket</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>buket</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>pengguna</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>pengguna</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Cakupan</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Baca</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Buat</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Peran Sistem</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Perbarui pengguna</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Lanjutkan</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>Anda dikeluarkan otomatis karena peran Anda telah berubah.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Tiap objek dipecah dalam pecahan-data, masing-masing disimpan pada OSD yang berbeda.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Hitung pecahan coding untuk tiap objek dan simpan pada OSD yang berbeda.\nJumlah pecahan data juga menjadi jumlah OSD yang diperbolehkan mati tanpa kehilangan data.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>Plugin jerasure merupakan plugin paling umum dan fleksibel,\nserta merupakan plugin bawaan Ceph untuk pool erasure code.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>Teknik yang lebih fleksibel yaitu reed_sol_van : cukup mengeset k\ndan m. Teknik cauchy_good bisa lebih cepat, namun Anda harus memilih ukuran paket\ndengan seksama. Semua reed_sol_r6_op, liberation, blaum_roth, liber8tion setara dengan RAID6\ndalam hal mereka hanya bisa diatur dengan m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>Penyandian dilakukan setiap saat pada ukuran bita paket.\nSulit untuk menentukan ukuran paket yang tepat.\nSilakan cek dokumentasi jerasure untuk informasi lebih mendalam.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Pada plugin jerasure, saat objek dengan erasure code disimpan pada\nbanyak OSD, pemulihan dari OSD yang hilang membutuhkan akses dari OSD lainnya.\nContoh, saat jerasure dikonfigurasi dengan k=8 dan m=4, saat satu OSD mati, maka pemulihan akan membutuhkan pembacaan dari tujuh OSD lainnya.\n\nPlugin lrc erasure code membuat pecahan paritas lokal agar dapat memulihkan \ndengan OSD yang lebih sedikit. Contoh, jika lrc dikonfigurasi dengan k=8, m=4, dan l=4, maka lrc akan\nmembuat pecahan paritas tambahan tiap empat OSD. Saat satu OSD mati, maka pemulihan dapat dilakukan hanya dengan 4 OSD, alih-alih 7 OSD.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Kelompokkan pecahan data dan coding ke dalam ukuran lokalitas. Controh\nuntuk k=4 dan m=2, saat lokalitas=3 dua grup dari tiga akan dibuat. Setiap set akan\ndipulihkan tanpa membaca pecahan dari set lainnya.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>Tipe buket crush setiap set pecahan yang didefinisikan oleh l  \nakan disimpan. Contoh, jika diset pada rak, tiap grup pecahan l akan \nditempatkan pada rak berbeda. Ini akan digunakan pada aturan step CRUSH yaitu \nmemilih tiap rak. Jika tidak diset, tidak akan ada pengelompokkan.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>Plugin isa menghimpun perpustakaan ISA. Hanya dapat berjalan pada prosesor Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>Plugin ISA memiliki dua jenis Reed Solomon.\nJika reed_sol_van diset, maka menjadi Vandermonde, jika cauchy diset, maka menjadi Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>Plugin shec mengenkapsulasi banyak pustaka SHEC.\nHal ini agar ceph dapat dipulihkan dengan lebih efisien dari kode Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>Jumlah potongan paritas yang masing-masing mencakup setiap potongan data \ndalam rentang perhitungannya. Nilai ini digunakan untuk perkiraan daya tahan. Contoh, jika c=2, \n2 OSD dapat mati tanpa kehilangan data.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>Nama buket crush digunakan sebagai langkah pertama dari aturan CRUSH.\nContoh diambil langkah bawaan.</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Memastikan tidak ada pecahan data berada pada buket dengan domain kegagalan\nyang sama. Contoh, saat domain gagal adalah hos, maka tidak ada pecahan data yang akan disimpan \npada hos yang sama. Aturan CRUSH seperti step chooseleaf hos akan digunakan untuk hal tersebut.</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Batasi penempatan ke perangkat dengan kelas tertentu\n(cth. ssd atau hdd), menggunakan nama kelas perangkat crush pada peta CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Set nama direktori empat plugin erasure code akan dimuat.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Izinkan semua operasi</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Izinkan hanya untuk operasi yang tidak mengubah server</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>Tidak diizinkan untuk operasi baca dan tulis, namun izinkan operasi lainnya</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>Tidak diizinkan untuk baca, tulis, atau operasi lainnya yang mengubah atribut berkas atau konten direktori</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>Tidak diizinkan untuk semua hal</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Pilih prioritas --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Rendah</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Tinggi</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Informasi</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>5 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>15 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>30 menit terakhir</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>1 Jam Terakhir (Bawaan)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>3 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>6 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>12 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>24 jam terakhir</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Kemarin</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hari ini</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Sejauh hari ini</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Kemarin dulu</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>2 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Hari ini minggu lalu</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>Minggu lalu</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Minggu ini</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Sejauh minggu ini</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>7 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>Bulan lalu</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Bulan ini</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Sejauh bulan ini</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>30 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>90 hari terakhir</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>6 bulan terakhir</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>1 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>Tahun lalu</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Tahun ini</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Sejauh tahun ini</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>2 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>5 tahun terakhir</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>Tidak ada yang dipilih.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Batalkan memilih untuk memilih ulang</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Batas pemilihan tercapai</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Tanda penyaringan</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Tambahkan lencana</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>Tidak ada yang tersedia.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Klon</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Salin</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Deep Scrub</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Hancurkan</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Ratakan</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Tandai Gugur</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Tandai Masuk</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Tandai Hilang</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Tandai Keluar</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteksi</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Ubah nama</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Pulihkan</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Pindahkan ke Tempat Sampah</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Tidak diproteksi</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Dihapus</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Diklon</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Disalin</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Diratakan</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Dibuang</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Dipulihkan</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Dikembalikan</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Ya</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>Tidak</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Kualitas Layanan atau QoS</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Limit BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>Limit IO bytes per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Limit IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>Limit operasi IO per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Limit Baca BPS </target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>Limit byte baca per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Limit IOPS Baca</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>Limit operasi baca per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Limit Tulis BPS</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>Limit tulis byte per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Limit IOPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>Limit operasi tulis per detik yang diinginkan.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Letupan BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari IO byte.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Letupan IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst operasi IO.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Letupan Baca BPS</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari baca byte.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Letupan IOPS Baca</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst operasi baca.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Letupan BPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari tulis byte.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Letupan IOPS Tulis</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>Limit yang diinginkan untuk letupan atau burst dari operasi baca.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Mengeksekusi</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>eksekusi</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Dieksekusi</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tugas tak diketahui</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Membuat</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>buat</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Memperbarui</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>perbarui</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Menghapus</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Pengklonan</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>klon</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Menyalin</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>salin</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Meratakan</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>ratakan</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Mengembalikan</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>kembalikan</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Memindahkan</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>pindah</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>dipindahkan</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>Tidak dapat menemukan image.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Memulihkan</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>pulihkan</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Membuang</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>buang</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>semua pool</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>Gagal menonaktifkan pencerminan karena sedang bermitra.</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},jtHE:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var a=n("XNiG"),r=n("qgXg"),i=n("quSY"),s=n("pxpQ"),o=n("9ppp"),u=n("Ylt2");class l extends a.a{constructor(t=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,n){super(),this.scheduler=n,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=t<1?1:t,this._windowTime=e<1?1:e,e===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(t){const e=this._events;e.push(t),e.length>this._bufferSize&&e.shift(),super.next(t)}nextTimeWindow(t){this._events.push(new d(this._getNow(),t)),this._trimBufferThenGetEvents(),super.next(t)}_subscribe(t){const e=this._infiniteTimeWindow,n=e?this._events:this._trimBufferThenGetEvents(),a=this.scheduler,r=n.length;let l;if(this.closed)throw new o.a;if(this.isStopped||this.hasError?l=i.a.EMPTY:(this.observers.push(t),l=new u.a(this,t)),a&&t.add(t=new s.a(t,a)),e)for(let i=0;i<r&&!t.closed;i++)t.next(n[i]);else for(let i=0;i<r&&!t.closed;i++)t.next(n[i].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),l}_getNow(){return(this.scheduler||r.a).now()}_trimBufferThenGetEvents(){const t=this._getNow(),e=this._bufferSize,n=this._windowTime,a=this._events,r=a.length;let i=0;for(;i<r&&!(t-a[i].time<n);)i++;return r>e&&(i=Math.max(i,r-e)),i>0&&a.splice(0,i),a}}class d{constructor(t,e){this.time=t,this.value=e}}},juv8:function(t,e,n){var a=n("MrPd"),r=n("hypo");t.exports=function(t,e,n,i){var s=!n;n||(n={});for(var o=-1,u=e.length;++o<u;){var l=e[o],d=i?i(n[l],t[l],l,n,t):void 0;void 0===d&&(d=t[l]),s?r(n,l,d):a(n,l,d)}return n}},"k+1r":function(t,e,n){var a=n("QkVE");t.exports=function(t){var e=a(this,t).delete(t);return this.size-=e?1:0,e}},kEOa:function(t,e,n){!function(t){"use strict";var e={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};t.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(t){return t.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(t){return n[t]}))},postformat:function(t){return t.replace(/\d/g,(function(t){return e[t]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(t,e){return 12===t&&(t=0),"রাত"===e&&t>=4||"দুপুর"===e&&t<5||"বিকাল"===e?t+12:t},meridiem:function(t,e,n){return t<4?"রাত":t<10?"সকাল":t<17?"দুপুর":t<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n("wd/R"))},kJI8:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},kJWO:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>"function"==typeof Symbol&&Symbol.observable||"@@observable")()},kOOl:function(t,e){var n=0,a=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+a).toString(36)}},kOpN:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("wd/R"))},kRJp:function(t,e,n){var a=n("g6v/"),r=n("m/L8"),i=n("XGwC");t.exports=a?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},kekF:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},kmMV:function(t,e,n){"use strict";var a,r,i=n("rW0t"),s=n("n3/R"),o=RegExp.prototype.exec,u=String.prototype.replace,l=o,d=(r=/b*/g,o.call(a=/a/,"a"),o.call(r,"a"),0!==a.lastIndex||0!==r.lastIndex),c=s.UNSUPPORTED_Y||s.BROKEN_CARET,f=void 0!==/()??/.exec("")[1];(d||f||c)&&(l=function(t){var e,n,a,r,s=this,l=c&&s.sticky,h=i.call(s),g=s.source,p=0,b=t;return l&&(-1===(h=h.replace("y","")).indexOf("g")&&(h+="g"),b=String(t).slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==t[s.lastIndex-1])&&(g="(?: "+g+")",b=" "+b,p++),n=new RegExp("^(?:"+g+")",h)),f&&(n=new RegExp("^"+g+"$(?!\\s)",h)),d&&(e=s.lastIndex),a=o.call(l?n:s,b),l?a?(a.input=a.input.slice(p),a[0]=a[0].slice(p),a.index=s.lastIndex,s.lastIndex+=a[0].length):s.lastIndex=0:d&&a&&(s.lastIndex=s.global?a.index+a[0].length:e),f&&a&&a.length>1&&u.call(a[0],n,(function(){for(r=1;r<arguments.length-2;r++)void 0===arguments[r]&&(a[r]=void 0)})),a}),t.exports=l},"kn/O":function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var a=n("HDdC"),r=n("mtw6"),i=n("G1I9"),s=n("QTAa"),o=n("9nlD"),u=n("mSOc"),l=n("VXsX"),d=n("ufoC"),c=n("8Y7J");let f=(()=>{class t{constructor(t,e,n,a){this.notificationService=t,this.summaryService=e,this.taskMessageService=n,this.taskManagerService=a}wrapTaskAroundCall({task:t,call:e}){return new a.a(n=>{e.subscribe(e=>{202===e.status?this._handleExecutingTasks(t):(this.summaryService.refresh(),t.success=!0,this.notificationService.notifyTask(t))},e=>{t.success=!1,t.exception=e.error,n.error(e)},()=>{n.complete()})})}_handleExecutingTasks(t){const e=new i.b(r.a.info,this.taskMessageService.getRunningTitle(t));e.isFinishedTask=!0,this.notificationService.show(e);const n=new s.a(t.name,t.metadata);this.summaryService.addRunningTask(n),this.taskManagerService.subscribe(n.name,n.metadata,t=>{this.notificationService.notifyTask(t)})}}return t.ngInjectableDef=c["ɵɵdefineInjectable"]({factory:function(){return new t(c["ɵɵinject"](o.a),c["ɵɵinject"](u.a),c["ɵɵinject"](d.a),c["ɵɵinject"](l.a))},token:t,providedIn:"root"}),t})()},kvvV:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("t/zF");class r extends a.a{}},l5ep:function(t,e,n){!function(t){"use strict";t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e="";return t>20?e=40===t||50===t||60===t||80===t||100===t?"fed":"ain":t>0&&(e=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][t]),t+e},week:{dow:1,doy:4}})}(n("wd/R"))},l7GE:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");class r extends a.a{notifyNext(t,e,n,a,r){this.destination.next(e)}notifyError(t,e){this.destination.error(t)}notifyComplete(t){this.destination.complete()}}},lJxs:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){return function(n){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new i(t,e))}}class i{constructor(t,e){this.project=t,this.thisArg=e}call(t,e){return e.subscribe(new s(t,this.project,this.thisArg))}}class s extends a.a{constructor(t,e,n){super(t),this.project=e,this.count=0,this.thisArg=n||this}_next(t){let e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}this.destination.next(e)}}},lMq5:function(t,e,n){var a=n("0Dky"),r=/#|\.prototype\./,i=function(t,e){var n=o[s(t)];return n==l||n!=u&&("function"==typeof e?a(e):!!e)},s=i.normalize=function(t){return String(t).replace(r,".").toLowerCase()},o=i.data={},u=i.NATIVE="N",l=i.POLYFILL="P";t.exports=i},"lOp/":function(t,e,n){"use strict";var a=n("PqYM"),r=n("pxpQ"),i=n("eIep"),s=n("jtHE"),o=n("D0XW"),u=n("8Y7J");class l{constructor(t){this.zone=t,this.scheduler=o.a}now(){return this.scheduler.now()}}let d=(()=>{class t extends l{constructor(t){super(t)}schedule(...t){return this.zone.runOutsideAngular(()=>this.scheduler.schedule.apply(this.scheduler,t))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](u.NgZone))},token:t,providedIn:"root"}),t})(),c=(()=>{class t extends l{constructor(t){super(t)}schedule(...t){return this.zone.run(()=>this.scheduler.schedule.apply(this.scheduler,t))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](u.NgZone))},token:t,providedIn:"root"}),t})(),f=(()=>{class t{constructor(t,e){this.leave=t,this.enter=e}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](d),u["ɵɵinject"](c))},token:t,providedIn:"root"}),t})();n.d(e,"a",(function(){return h}));let h=(()=>{class t{constructor(t){this.ngZone=t,this.DEFAULT_REFRESH_INTERVAL=5e3,this.DEFAULT_DUE_TIME=0}get(t,e=this.DEFAULT_REFRESH_INTERVAL,n=this.DEFAULT_DUE_TIME){return Object(a.a)(n,e,this.ngZone.leave).pipe(Object(r.b)(this.ngZone.enter),Object(i.a)(t),function(t,e,n){let a;return a=t&&"object"==typeof t?t:{bufferSize:t,windowTime:void 0,refCount:!1,scheduler:void 0},t=>t.lift(function({bufferSize:t=Number.POSITIVE_INFINITY,windowTime:e=Number.POSITIVE_INFINITY,refCount:n,scheduler:a}){let r,i,o=0,u=!1,l=!1;return function(d){o++,r&&!u||(u=!1,r=new s.a(t,e,a),i=d.subscribe({next(t){r.next(t)},error(t){u=!0,r.error(t)},complete(){l=!0,i=void 0,r.complete()}}));const c=r.subscribe(this);this.add(()=>{o--,c.unsubscribe(),i&&!l&&n&&0===o&&(i.unsubscribe(),i=void 0,r=void 0)})}}(a))}({refCount:!0,bufferSize:1}))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](f))},token:t,providedIn:"root"}),t})()},lQqw:function(t,e,n){var a=n("MMmD");t.exports=function(t,e){return function(n,r){if(null==n)return n;if(!a(n))return t(n,r);for(var i=n.length,s=e?i:-1,o=Object(n);(e?s--:++s<i)&&!1!==r(o[s],s,o););return n}}},lSCD:function(t,e,n){var a=n("NykK"),r=n("GoyQ");t.exports=function(t){if(!r(t))return!1;var e=a(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},lXzo:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"минута":"минуту":t+" "+(a=+t,r={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:e,m:e,mm:e,h:"час",hh:e,d:"день",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:4}})}(n("wd/R"))},lYtQ:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){switch(n){case"s":return e?"хэдхэн секунд":"хэдхэн секундын";case"ss":return t+(e?" секунд":" секундын");case"m":case"mm":return t+(e?" минут":" минутын");case"h":case"hh":return t+(e?" цаг":" цагийн");case"d":case"dd":return t+(e?" өдөр":" өдрийн");case"M":case"MM":return t+(e?" сар":" сарын");case"y":case"yy":return t+(e?" жил":" жилийн");default:return t}}t.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(t){return"ҮХ"===t},meridiem:function(t,e,n){return t<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+" өдөр";default:return t}}})}(n("wd/R"))},lgnt:function(t,e,n){!function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){return t+(e[t]||e[t%10]||e[t>=100?100:null])},week:{dow:1,doy:7}})}(n("wd/R"))},ljhN:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},"lm/5":function(t,e,n){var a=n("fmRc"),r=n("wF/u");t.exports=function(t,e,n,i){var s=n.length,o=s,u=!i;if(null==t)return!o;for(t=Object(t);s--;){var l=n[s];if(u&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++s<o;){var d=(l=n[s])[0],c=t[d],f=l[1];if(u&&l[2]){if(void 0===c&&!(d in t))return!1}else{var h=new a;if(i)var g=i(c,f,d,t,e,h);if(!(void 0===g?r(f,c,3,i,h):g))return!1}}return!0}},lyxo:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a=" ";return(t%100>=20||t>=100&&t%100==0)&&(a=" de "),t+a+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[n]}t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:e,m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})}(n("wd/R"))},"m/L8":function(t,e,n){var a=n("g6v/"),r=n("DPsx"),i=n("glrk"),s=n("wE6v"),o=Object.defineProperty;e.f=a?o:function(t,e,n){if(i(t),e=s(e,!0),i(n),r)try{return o(t,e,n)}catch(a){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},m92n:function(t,e,n){var a=n("glrk");t.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(s){var i=t.return;throw void 0!==i&&a(i.call(t)),s}}},mCNh:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("KqfI");function r(...t){return i(t)}function i(t){return t?1===t.length?t[0]:function(e){return t.reduce((t,e)=>e(t),e)}:a.a}},mSOc:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("LvDl"),r=n("2Vo4"),i=n("pLZG"),s=n("SxV6"),o=n("lOp/"),u=n("8Y7J"),l=n("IheW");let d=(()=>{class t{constructor(t,e){this.http=t,this.timerService=e,this.REFRESH_INTERVAL=5e3,this.summaryDataSource=new r.a(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/summary")}retrieveSummaryObserver(){return t=>{this.summaryDataSource.next(t)}}subscribeOnce(t,e){return this.summaryData$.pipe(Object(i.a)(t=>!!t),Object(s.a)()).subscribe(t,e)}subscribe(t,e){return this.summaryData$.pipe(Object(i.a)(t=>!!t)).subscribe(t,e)}addRunningTask(t){const e=this.summaryDataSource.getValue();e&&(a.isArray(e.executing_tasks)?e.executing_tasks.find(e=>e.name===t.name&&a.isEqual(e.metadata,t.metadata))||e.executing_tasks.push(t):e.executing_tasks=[t],this.summaryDataSource.next(e))}}return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](l.c),u["ɵɵinject"](o.a))},token:t,providedIn:"root"}),t})()},mTTR:function(t,e,n){var a=n("b80T"),r=n("QcOe"),i=n("MMmD");t.exports=function(t){return i(t)?a(t,!0):r(t)}},mXUL:function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"b",(function(){return c}));var a=n("8Y7J"),r=n("+gVj"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:[".invalid-feedback[_ngcontent-%COMP%], .valid-feedback[_ngcontent-%COMP%] {\n        display: block;\n      }"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),a["ɵted"](3,null,["",""]))],(function(t,e){t(e,2,0,e.component.className)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function u(t){return a["ɵvid"](0,[(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](1,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,e.component.messages())}),null)}var l=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function d(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bfv-messages",[],null,null,null,u,s)),a["ɵdid"](1,49152,null,0,r.e,[r.a],{messages:[0,"messages"]},null)],(function(t,e){t(e,1,0,e.component.messages)}),null)}function c(t){return a["ɵvid"](0,[a["ɵncd"](null,0),(t()(),a["ɵand"](16777216,null,null,1,null,d)),a["ɵdid"](2,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,!e.component.messagesBlock)}),null)}},mc0g:function(t,e){t.exports=function(t){return function(e,n,a){for(var r=-1,i=Object(e),s=a(e),o=s.length;o--;){var u=s[t?o:++r];if(!1===n(i[u],u,i))break}return e}}},mdPL:function(t,e,n){(function(t){var a=n("WFqU"),r=e&&!e.nodeType&&e,i=r&&"object"==typeof t&&t&&!t.nodeType&&t,s=i&&i.exports===r&&a.process,o=function(){try{return i&&i.require&&i.require("util").types||s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=o}).call(this,n("YuTi")(t))},mfoh:function(t,e,n){"use strict";n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return p}));var a,r=n("CFvb"),i=n("P4Tr"),s=n.n(i),o=n("mwIZ"),u=n.n(o),l=n("Puqe"),d=n.n(l),c=n("UB5X"),f=n.n(c),h={TOGGLE_ACTIVE:function(t,e,n){return e&&e.toggleActivated()},TOGGLE_ACTIVE_MULTI:function(t,e,n){return e&&e.toggleActivated(!0)},TOGGLE_SELECTED:function(t,e,n){return e&&e.toggleSelected()},ACTIVATE:function(t,e,n){return e.setIsActive(!0)},DEACTIVATE:function(t,e,n){return e.setIsActive(!1)},SELECT:function(t,e,n){return e.setIsSelected(!0)},DESELECT:function(t,e,n){return e.setIsSelected(!1)},FOCUS:function(t,e,n){return e.focus()},TOGGLE_EXPANDED:function(t,e,n){return e.hasChildren&&e.toggleExpanded()},EXPAND:function(t,e,n){return e.expand()},COLLAPSE:function(t,e,n){return e.collapse()},DRILL_DOWN:function(t,e,n){return t.focusDrillDown()},DRILL_UP:function(t,e,n){return t.focusDrillUp()},NEXT_NODE:function(t,e,n){return t.focusNextNode()},PREVIOUS_NODE:function(t,e,n){return t.focusPreviousNode()},MOVE_NODE:function(t,e,n,a){var r=a.from,i=a.to;n.ctrlKey?t.copyNode(r,i):t.moveNode(r,i)}},g={mouse:{click:h.TOGGLE_ACTIVE,dblClick:null,contextMenu:null,expanderClick:h.TOGGLE_EXPANDED,checkboxClick:h.TOGGLE_SELECTED,drop:h.MOVE_NODE},keys:(a={},a[r.a.RIGHT]=h.DRILL_DOWN,a[r.a.LEFT]=h.DRILL_UP,a[r.a.DOWN]=h.NEXT_NODE,a[r.a.UP]=h.PREVIOUS_NODE,a[r.a.SPACE]=h.TOGGLE_ACTIVE,a[r.a.ENTER]=h.TOGGLE_ACTIVE,a)},p=function(){function t(t){void 0===t&&(t={}),this.options=t,this.actionMapping=s()({},this.options.actionMapping,g),t.rtl&&(this.actionMapping.keys[r.a.RIGHT]=u()(t,["actionMapping","keys",r.a.RIGHT])||h.DRILL_UP,this.actionMapping.keys[r.a.LEFT]=u()(t,["actionMapping","keys",r.a.LEFT])||h.DRILL_DOWN)}return Object.defineProperty(t.prototype,"hasChildrenField",{get:function(){return this.options.hasChildrenField||"hasChildren"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"childrenField",{get:function(){return this.options.childrenField||"children"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"displayField",{get:function(){return this.options.displayField||"name"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"idField",{get:function(){return this.options.idField||"id"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpandedField",{get:function(){return this.options.isExpandedField||"isExpanded"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"getChildren",{get:function(){return this.options.getChildren},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"levelPadding",{get:function(){return this.options.levelPadding||0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useVirtualScroll",{get:function(){return this.options.useVirtualScroll},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateExpand",{get:function(){return this.options.animateExpand},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateSpeed",{get:function(){return this.options.animateSpeed||1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"animateAcceleration",{get:function(){return this.options.animateAcceleration||1.2},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollOnActivate",{get:function(){return void 0===this.options.scrollOnActivate||this.options.scrollOnActivate},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rtl",{get:function(){return!!this.options.rtl},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rootId",{get:function(){return this.options.rootId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useCheckbox",{get:function(){return this.options.useCheckbox},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"useTriState",{get:function(){return void 0===this.options.useTriState||this.options.useTriState},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollContainer",{get:function(){return this.options.scrollContainer},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"allowDragoverStyling",{get:function(){return void 0===this.options.allowDragoverStyling||this.options.allowDragoverStyling},enumerable:!0,configurable:!0}),t.prototype.getNodeClone=function(t){return this.options.getNodeClone?this.options.getNodeClone(t):d()(Object.assign({},t.data),["id"])},t.prototype.allowDrop=function(t,e,n){return this.options.allowDrop instanceof Function?this.options.allowDrop(t,e,n):void 0===this.options.allowDrop||this.options.allowDrop},t.prototype.allowDrag=function(t){return this.options.allowDrag instanceof Function?this.options.allowDrag(t):this.options.allowDrag},t.prototype.nodeClass=function(t){return this.options.nodeClass?this.options.nodeClass(t):""},t.prototype.nodeHeight=function(t){if(t.data.virtual)return 0;var e=this.options.nodeHeight||22;return"function"==typeof e&&(e=e(t)),e+(0===t.index?2:1)*this.dropSlotHeight},Object.defineProperty(t.prototype,"dropSlotHeight",{get:function(){return f()(this.options.dropSlotHeight)?this.options.dropSlotHeight:2},enumerable:!0,configurable:!0}),t}()},moLw:function(t,e,n){var a=n("mrSG").__decorate,r=n("mrSG").__metadata;Object.defineProperty(e,"__esModule",{value:!0});var i=n("8Y7J"),s=n("SVse");e.ClickOutsideDirective=function(){function t(t,e,n){this._el=t,this._ngZone=e,this.platformId=n,this.clickOutsideEnabled=!0,this.attachOutsideOnClick=!1,this.delayClickOutsideInit=!1,this.emitOnBlur=!1,this.exclude="",this.excludeBeforeClick=!1,this.clickOutsideEvents="",this.clickOutside=new i.EventEmitter,this._nodesExcluded=[],this._events=["click"],this._initOnClickBody=this._initOnClickBody.bind(this),this._onClickBody=this._onClickBody.bind(this),this._onWindowBlur=this._onWindowBlur.bind(this)}return t.prototype.ngOnInit=function(){s.isPlatformBrowser(this.platformId)&&this._init()},t.prototype.ngOnDestroy=function(){s.isPlatformBrowser(this.platformId)&&(this._removeClickOutsideListener(),this._removeAttachOutsideOnClickListener(),this._removeWindowBlurListener())},t.prototype.ngOnChanges=function(t){s.isPlatformBrowser(this.platformId)&&(t.attachOutsideOnClick||t.exclude||t.emitOnBlur)&&this._init()},t.prototype._init=function(){""!==this.clickOutsideEvents&&(this._events=this.clickOutsideEvents.split(",").map((function(t){return t.trim()}))),this._excludeCheck(),this.attachOutsideOnClick?this._initAttachOutsideOnClickListener():this._initOnClickBody(),this.emitOnBlur&&this._initWindowBlurListener()},t.prototype._initOnClickBody=function(){this.delayClickOutsideInit?setTimeout(this._initClickOutsideListener.bind(this)):this._initClickOutsideListener()},t.prototype._excludeCheck=function(){if(this.exclude)try{var t=Array.from(document.querySelectorAll(this.exclude));t&&(this._nodesExcluded=t)}catch(e){console.error("[ng-click-outside] Check your exclude selector syntax.",e)}},t.prototype._onClickBody=function(t){this.clickOutsideEnabled&&(this.excludeBeforeClick&&this._excludeCheck(),this._el.nativeElement.contains(t.target)||this._shouldExclude(t.target)||(this._emit(t),this.attachOutsideOnClick&&this._removeClickOutsideListener()))},t.prototype._onWindowBlur=function(t){var e=this;setTimeout((function(){document.hidden||e._emit(t)}))},t.prototype._emit=function(t){var e=this;this.clickOutsideEnabled&&this._ngZone.run((function(){return e.clickOutside.emit(t)}))},t.prototype._shouldExclude=function(t){for(var e=0,n=this._nodesExcluded;e<n.length;e++)if(n[e].contains(t))return!0;return!1},t.prototype._initClickOutsideListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return document.addEventListener(e,t._onClickBody)}))}))},t.prototype._removeClickOutsideListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return document.removeEventListener(e,t._onClickBody)}))}))},t.prototype._initAttachOutsideOnClickListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return t._el.nativeElement.addEventListener(e,t._initOnClickBody)}))}))},t.prototype._removeAttachOutsideOnClickListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){t._events.forEach((function(e){return t._el.nativeElement.removeEventListener(e,t._initOnClickBody)}))}))},t.prototype._initWindowBlurListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){window.addEventListener("blur",t._onWindowBlur)}))},t.prototype._removeWindowBlurListener=function(){var t=this;this._ngZone.runOutsideAngular((function(){window.removeEventListener("blur",t._onWindowBlur)}))},a([i.Input(),r("design:type",Boolean)],t.prototype,"clickOutsideEnabled",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"attachOutsideOnClick",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"delayClickOutsideInit",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"emitOnBlur",void 0),a([i.Input(),r("design:type",String)],t.prototype,"exclude",void 0),a([i.Input(),r("design:type",Boolean)],t.prototype,"excludeBeforeClick",void 0),a([i.Input(),r("design:type",String)],t.prototype,"clickOutsideEvents",void 0),a([i.Output(),r("design:type",i.EventEmitter)],t.prototype,"clickOutside",void 0),a([i.Injectable(),i.Directive({selector:"[clickOutside]"})],t)}()},mrSG:function(t,e,n){"use strict";n.r(e),n.d(e,"__extends",(function(){return r})),n.d(e,"__assign",(function(){return i})),n.d(e,"__rest",(function(){return s})),n.d(e,"__decorate",(function(){return o})),n.d(e,"__param",(function(){return u})),n.d(e,"__metadata",(function(){return l})),n.d(e,"__awaiter",(function(){return d})),n.d(e,"__generator",(function(){return c})),n.d(e,"__exportStar",(function(){return f})),n.d(e,"__values",(function(){return h})),n.d(e,"__read",(function(){return g})),n.d(e,"__spread",(function(){return p})),n.d(e,"__spreadArrays",(function(){return b})),n.d(e,"__await",(function(){return m})),n.d(e,"__asyncGenerator",(function(){return y})),n.d(e,"__asyncDelegator",(function(){return v})),n.d(e,"__asyncValues",(function(){return x})),n.d(e,"__makeTemplateObject",(function(){return _})),n.d(e,"__importStar",(function(){return T})),n.d(e,"__importDefault",(function(){return O})),n.d(e,"__classPrivateFieldGet",(function(){return w})),n.d(e,"__classPrivateFieldSet",(function(){return S}));var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function r(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function s(t,e){var n={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(t);r<a.length;r++)e.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(t,a[r])&&(n[a[r]]=t[a[r]])}return n}function o(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}function u(t,e){return function(n,a){e(n,a,t)}}function l(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function d(t,e,n,a){return new(n||(n=Promise))((function(r,i){function s(t){try{u(a.next(t))}catch(e){i(e)}}function o(t){try{u(a.throw(t))}catch(e){i(e)}}function u(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,o)}u((a=a.apply(t,e||[])).next())}))}function c(t,e){var n,a,r,i,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(i){return function(o){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,a&&(r=2&i[0]?a.return:i[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,i[1])).done)return r;switch(a=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,a=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(r=(r=s.trys).length>0&&r[r.length-1])&&(6===i[0]||2===i[0])){s=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){s.label=i[1];break}if(6===i[0]&&s.label<r[1]){s.label=r[1],r=i;break}if(r&&s.label<r[2]){s.label=r[2],s.ops.push(i);break}r[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(o){i=[6,o],a=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,o])}}}function f(t,e){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}function h(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],a=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var a,r,i=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(a=i.next()).done;)s.push(a.value)}catch(o){r={error:o}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return s}function p(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(g(arguments[e]));return t}function b(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var a=Array(t),r=0;for(e=0;e<n;e++)for(var i=arguments[e],s=0,o=i.length;s<o;s++,r++)a[r]=i[s];return a}function m(t){return this instanceof m?(this.v=t,this):new m(t)}function y(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a,r=n.apply(t,e||[]),i=[];return a={},s("next"),s("throw"),s("return"),a[Symbol.asyncIterator]=function(){return this},a;function s(t){r[t]&&(a[t]=function(e){return new Promise((function(n,a){i.push([t,e,n,a])>1||o(t,e)}))})}function o(t,e){try{!function(t){t.value instanceof m?Promise.resolve(t.value.v).then(u,l):d(i[0][2],t)}(r[t](e))}catch(n){d(i[0][3],n)}}function u(t){o("next",t)}function l(t){o("throw",t)}function d(t,e){t(e),i.shift(),i.length&&o(i[0][0],i[0][1])}}function v(t){var e,n;return e={},a("next"),a("throw",(function(t){throw t})),a("return"),e[Symbol.iterator]=function(){return this},e;function a(a,r){e[a]=t[a]?function(e){return(n=!n)?{value:m(t[a](e)),done:"return"===a}:r?r(e):e}:r}}function x(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=h(t),e={},a("next"),a("throw"),a("return"),e[Symbol.asyncIterator]=function(){return this},e);function a(n){e[n]=t[n]&&function(e){return new Promise((function(a,r){!function(t,e,n,a){Promise.resolve(a).then((function(e){t({value:e,done:n})}),e)}(a,r,(e=t[n](e)).done,e.value)}))}}}function _(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function T(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function O(t){return t&&t.__esModule?t:{default:t}}function w(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function S(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}},mtw6:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t[t.error=0]="error",t[t.info=1]="info",t[t.success=2]="success",t}({})},"mv/X":function(t,e,n){var a=n("ljhN"),r=n("MMmD"),i=n("wJg7"),s=n("GoyQ");t.exports=function(t,e,n){if(!s(n))return!1;var o=typeof e;return!!("number"==o?r(n)&&i(e,n.length):"string"==o&&e in n)&&a(n[e],t)}},mwIZ:function(t,e,n){var a=n("ZWtO");t.exports=function(t,e,n){var r=null==t?void 0:a(t,e);return void 0===r?n:r}},"n/D3":function(t,e,n){"use strict";n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return c}));var a=n("cp0P"),r=(n("SgmB"),n("ZDA6"),n("+fVR")),i=n("0+/T"),s=n("Rf2I"),o=(n("sne2"),n("x38r")),u=n("oxzT"),l=n("mtw6"),d=n("vCyI");n("nSDx"),n("aexS"),n("9nlD");const c=new(n("EgGo").a)("user-management/roles");class f extends r.a{constructor(t,e,n,a,r,i,s,o,l){super(),this.roleService=t,this.scopeService=e,this.emptyPipe=n,this.authStorageService=a,this.modalService=r,this.notificationService=i,this.i18n=s,this.urlBuilder=o,this.actionLabels=l,this.selection=new d.a,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:u.a.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"create",icon:u.a.clone,name:this.actionLabels.CLONE,disable:()=>!this.selection.hasSingleSelection,click:()=>this.cloneRole()},{permission:"update",icon:u.a.edit,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().name),name:this.actionLabels.EDIT},{permission:"delete",icon:u.a.destroy,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,click:()=>this.deleteRoleModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:3},{name:this.i18n("Description"),prop:"description",flexGrow:5,pipe:this.emptyPipe},{name:this.i18n("System Role"),prop:"system",cellClass:"text-center",flexGrow:1,cellTransformation:o.a.checkIcon}]}getRoles(){Object(a.a)([this.roleService.list(),this.scopeService.list()]).subscribe(t=>{this.roles=t[0],this.scopes=t[1]})}updateSelection(t){this.selection=t}deleteRole(t){this.roleService.delete(t).subscribe(()=>{this.getRoles(),this.modalRef.hide(),this.notificationService.show(l.a.success,this.i18n("Deleted role '{{role_name}}'",{role_name:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}deleteRoleModal(){const t=this.selection.first().name;this.modalRef=this.modalService.show(i.a,{initialState:{itemDescription:"Role",itemNames:[t],submitAction:()=>this.deleteRole(t)}})}cloneRole(){const t=this.selection.first().name;this.modalRef=this.modalService.show(s.a,{initialState:{fields:[{type:"text",name:"newName",value:`${t}_clone`,label:this.i18n("New name"),required:!0}],titleText:this.i18n("Clone Role"),submitButtonText:this.i18n("Clone Role"),onSubmit:e=>{this.roleService.clone(t,e.newName).subscribe(()=>{this.getRoles(),this.notificationService.show(l.a.success,this.i18n("Cloned role '{{dst_name}}' from '{{src_name}}'",{src_name:t,dst_name:e.newName}))})}}})}}},"n3/R":function(t,e,n){"use strict";var a=n("0Dky");function r(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=a((function(){var t=r("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=a((function(){var t=r("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},n6bG:function(t,e,n){"use strict";function a(t){return"function"==typeof t}n.d(e,"a",(function(){return a}))},nSDx:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t){return a.isUndefined(t)||a.isNull(t)?"-":t}}},nYho:function(t,e,n){(function(t){var a;!function(r){"object"==typeof global&&global;var i,s=2147483647,o=/^xn--/,u=/[^\x20-\x7E]/,l=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=Math.floor,f=String.fromCharCode;function h(t){throw RangeError(d[t])}function g(t,e){for(var n=t.length,a=[];n--;)a[n]=e(t[n]);return a}function p(t,e){var n=t.split("@"),a="";return n.length>1&&(a=n[0]+"@",t=n[1]),a+g((t=t.replace(l,".")).split("."),e).join(".")}function b(t){for(var e,n,a=[],r=0,i=t.length;r<i;)(e=t.charCodeAt(r++))>=55296&&e<=56319&&r<i?56320==(64512&(n=t.charCodeAt(r++)))?a.push(((1023&e)<<10)+(1023&n)+65536):(a.push(e),r--):a.push(e);return a}function m(t){return g(t,(function(t){var e="";return t>65535&&(e+=f((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+f(t)})).join("")}function y(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function v(t,e,n){var a=0;for(t=n?c(t/700):t>>1,t+=c(t/e);t>455;a+=36)t=c(t/35);return c(a+36*t/(t+38))}function x(t){var e,n,a,r,i,o,u,l,d,f,g,p=[],b=t.length,y=0,x=128,_=72;for((n=t.lastIndexOf("-"))<0&&(n=0),a=0;a<n;++a)t.charCodeAt(a)>=128&&h("not-basic"),p.push(t.charCodeAt(a));for(r=n>0?n+1:0;r<b;){for(i=y,o=1,u=36;r>=b&&h("invalid-input"),((l=(g=t.charCodeAt(r++))-48<10?g-22:g-65<26?g-65:g-97<26?g-97:36)>=36||l>c((s-y)/o))&&h("overflow"),y+=l*o,!(l<(d=u<=_?1:u>=_+26?26:u-_));u+=36)o>c(s/(f=36-d))&&h("overflow"),o*=f;_=v(y-i,e=p.length+1,0==i),c(y/e)>s-x&&h("overflow"),x+=c(y/e),y%=e,p.splice(y++,0,x)}return m(p)}function _(t){var e,n,a,r,i,o,u,l,d,g,p,m,x,_,T,O=[];for(m=(t=b(t)).length,e=128,n=0,i=72,o=0;o<m;++o)(p=t[o])<128&&O.push(f(p));for(a=r=O.length,r&&O.push("-");a<m;){for(u=s,o=0;o<m;++o)(p=t[o])>=e&&p<u&&(u=p);for(u-e>c((s-n)/(x=a+1))&&h("overflow"),n+=(u-e)*x,e=u,o=0;o<m;++o)if((p=t[o])<e&&++n>s&&h("overflow"),p==e){for(l=n,d=36;!(l<(g=d<=i?1:d>=i+26?26:d-i));d+=36)O.push(f(y(g+(T=l-g)%(_=36-g),0))),l=c(T/_);O.push(f(y(l,0))),i=v(n,x,a==r),n=0,++a}++n,++e}return O.join("")}i={version:"1.3.2",ucs2:{decode:b,encode:m},decode:x,encode:_,toASCII:function(t){return p(t,(function(t){return u.test(t)?"xn--"+_(t):t}))},toUnicode:function(t){return p(t,(function(t){return o.test(t)?x(t.slice(4).toLowerCase()):t}))}},void 0===(a=(function(){return i}).call(e,n,e,t))||(t.exports=a)}()}).call(this,n("YuTi")(t))},ngJS:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=t=>e=>{for(let n=0,a=t.length;n<a&&!e.closed;n++)e.next(t[n]);e.complete()}},nmnc:function(t,e,n){var a=n("Kz5y");t.exports=a.Symbol},ntOU:function(t,e,n){"use strict";var a=n("rpNk").IteratorPrototype,r=n("fHMY"),i=n("XGwC"),s=n("1E5z"),o=n("P4y1"),u=function(){return this};t.exports=function(t,e,n){var l=e+" Iterator";return t.prototype=r(a,{next:i(1,n)}),s(t,l,!1,!0),o[l]=u,t}},nyYc:function(t,e,n){!function(t){"use strict";t.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n("wd/R"))},o1bE:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n("wd/R"))},"o4+5":function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n("aXbf");class a{constructor(t){this.formatter=t}transform(t){return this.formatter.format_number(t,1e3,["","k","M","G","T","P","E","Z","Y"])}}},"oCl/":function(t,e,n){var a=n("CH3K"),r=n("LcsW"),i=n("MvSz"),s=n("0ycA");t.exports=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)a(e,i(t)),t=r(t);return e}:s},oMSZ:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this.pwdExpirationSpan=0,this.pwdExpirationSpan=t.user_pwd_expiration_span,this.pwdExpirationWarning1=t.user_pwd_expiration_warning_1,this.pwdExpirationWarning2=t.user_pwd_expiration_warning_2}}},or5M:function(t,e,n){var a=n("1hJj"),r=n("QoRX"),i=n("xYSL");t.exports=function(t,e,n,s,o,u){var l=1&n,d=t.length,c=e.length;if(d!=c&&!(l&&c>d))return!1;var f=u.get(t);if(f&&u.get(e))return f==e;var h=-1,g=!0,p=2&n?new a:void 0;for(u.set(t,e),u.set(e,t);++h<d;){var b=t[h],m=e[h];if(s)var y=l?s(m,b,h,e,t,u):s(b,m,h,t,e,u);if(void 0!==y){if(y)continue;g=!1;break}if(p){if(!r(e,(function(t,e){if(!i(p,e)&&(b===t||o(b,t,n,s,u)))return p.push(e)}))){g=!1;break}}else if(b!==m&&!o(b,m,n,s,u)){g=!1;break}}return u.delete(t),u.delete(e),g}},"otv/":function(t,e,n){var a=n("nmnc"),r=a?a.prototype:void 0,i=r?r.valueOf:void 0;t.exports=function(t){return i?Object(i.call(t)):{}}},oxzT:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t.add="fa fa-plus",t.addCircle="fa fa-plus-circle",t.minusCircle="fa fa-minus-circle",t.edit="fa fa-pencil",t.destroy="fa fa-times",t.destroyCircle="fa fa-times-circle",t.exchange="fa fa-exchange",t.copy="fa fa-copy",t.clipboard="fa fa-clipboard",t.flatten="fa fa-chain-broken",t.trash="fa fa-trash-o",t.lock="fa fa-lock",t.unlock="fa fa-unlock",t.clone="fa fa-clone",t.undo="fa fa-undo",t.search="fa fa-search",t.start="fa fa-play",t.stop="fa fa-stop",t.analyse="fa fa-stethoscope",t.deepCheck="fa fa-cog",t.reweight="fa fa-balance-scale",t.left="fa fa-arrow-left",t.right="fa fa-arrow-right",t.down="fa fa-arrow-down",t.erase="fa fa-eraser",t.user="fa fa-user",t.users="fa fa-users",t.share="fa fa-share-alt",t.key="fa fa-key-modern",t.warning="fa fa-exclamation-triangle",t.info="fa fa-info",t.infoCircle="fa fa-info-circle",t.questionCircle="fa fa-question-circle-o",t.check="fa fa-check",t.show="fa fa-eye",t.paragraph="fa fa-paragraph",t.terminal="fa fa-terminal",t.magic="fa fa-magic",t.hourglass="fa fa-hourglass-o",t.filledHourglass="fa fa-hourglass",t.table="fa fa-table",t.spinner="fa fa-spinner",t.refresh="fa fa-refresh",t.bullseye="fa fa-bullseye",t.disk="fa fa-hdd-o",t.server="fa fa-server",t.filter="fa fa-filter",t.lineChart="fa fa-line-chart",t.signOut="fa fa-sign-out",t.health="fa fa-heartbeat",t.circle="fa fa-circle",t.bell="fa fa-bell",t.tag="fa fa-tag",t.leftArrow="fa fa-angle-left",t.rightArrow="fa fa-angle-right",t.leftArrowDouble="fa fa-angle-double-left",t.rightArrowDouble="fa fa-angle-double-right",t.flag="fa fa-flag",t.clearFilters="fa fa-window-close",t.download="fa fa-download",t.upload="fa fa-upload",t.large="fa fa-lg",t.large2x="fa fa-2x",t.large3x="fa fa-3x",t.stack="fa fa-stack",t.stack1x="fa fa-stack-1x",t.stack2x="fa fa-stack-2x",t.pulse="fa fa-pulse",t.spin="fa fa-spin",t.inverse="fa fa-inverse",t}({})},"p/rL":function(t,e,n){!function(t){"use strict";t.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n("wd/R"))},p4Cf:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("oxzT");class r{constructor(){this.icons=a.a}}},pFRH:function(t,e,n){var a=n("cvCv"),r=n("O0oS"),i=n("zZ0H");t.exports=r?function(t,e){return r(t,"toString",{configurable:!0,enumerable:!1,value:a(e),writable:!0})}:i},pKUh:function(t,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return l}));var a=n("8Y7J"),r=n("2ZVE"),i=n("SVse"),s=a["ɵcrt"]({encapsulation:0,styles:["[_nghost-%COMP%]   .nav-tabs[_ngcontent-%COMP%]   .nav-item.disabled[_ngcontent-%COMP%]   a.disabled[_ngcontent-%COMP%]{cursor:default}"],data:{}});function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"span",[["class","bs-remove-tab"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(n.preventDefault(),a=!1!==r.removeTab(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),a["ɵted"](-1,null,[" ❌"]))],null,null)}function u(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,9,"li",[],[[2,"active",null],[2,"disabled",null]],[[null,"keydown"]],(function(t,e,n){var a=!0;return"keydown"===e&&(a=!1!==t.component.keyNavActions(n,t.context.index)&&a),a}),null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](3,2),(t()(),a["ɵeld"](4,0,null,null,5,"a",[["class","nav-link"],["href","javascript:void(0);"],["role","tab"]],[[1,"aria-controls",0],[1,"aria-selected",0],[1,"id",0],[2,"active",null],[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=0!=(t.context.$implicit.active=!0)&&a),a}),null,null)),(t()(),a["ɵeld"](5,16777216,null,null,2,"span",[],null,null,null,null,null)),a["ɵdid"](6,16384,null,0,r.a,[a.ViewContainerRef],{ngTransclude:[0,"ngTransclude"]},null),(t()(),a["ɵted"](7,null,["",""])),(t()(),a["ɵand"](16777216,null,null,1,null,o)),a["ɵdid"](9,16384,null,0,i.NgIf,[a.ViewContainerRef,a.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=t(e,3,0,"nav-item",e.context.$implicit.customClass||"");t(e,2,0,n),t(e,6,0,e.context.$implicit.headingRef),t(e,9,0,e.context.$implicit.removable)}),(function(t,e){t(e,0,0,e.context.$implicit.active,e.context.$implicit.disabled),t(e,4,0,e.context.$implicit.id?e.context.$implicit.id:"",!!e.context.$implicit.active,e.context.$implicit.id?e.context.$implicit.id+"-link":"",e.context.$implicit.active,e.context.$implicit.disabled),t(e,7,0,e.context.$implicit.heading)}))}function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,4,"ul",[["class","nav"],["role","tablist"]],[[1,"aria-label",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==n.preventDefault()&&a),a}),null,null)),a["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),a["ɵand"](16777216,null,null,1,null,u)),a["ɵdid"](4,278528,null,0,i.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),a["ɵeld"](5,0,null,null,1,"div",[["class","tab-content"]],null,null,null,null,null)),a["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"nav",n.classMap),t(e,4,0,n.tabs)}),(function(t,e){t(e,0,0,e.component.ariaLabel)}))}},pL04:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},pLZG:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t,e){return function(n){return n.lift(new i(t,e))}}class i{constructor(t,e){this.predicate=t,this.thisArg=e}call(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))}}class s extends a.a{constructor(t,e,n){super(t),this.predicate=e,this.thisArg=n,this.count=0}_next(t){let e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(n){return void this.destination.error(n)}e&&this.destination.next(t)}}},pMnS:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var a=n("8Y7J"),r=n("iInd"),i=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),a["ɵdid"](1,212992,null,0,r.r,[r.b,a.ViewContainerRef,a.ComponentFactoryResolver,[8,null],a.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"ng-component",[],null,null,null,s,i)),a["ɵdid"](1,49152,null,0,r.F,[],null,null)],null,null)}var u=a["ɵccf"]("ng-component",r.F,o,{},{},[])},pSRY:function(t,e,n){var a=n("QkVE");t.exports=function(t){return a(this,t).has(t)}},pYKc:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("WiuZ"),s=n("wnGv"),o=n("GiVz");n("ppaS"),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return d}));var u=a["ɵcrt"]({encapsulation:0,styles:[[".badge-remove[_ngcontent-%COMP%]{color:#fff}i.fa-pencil[_ngcontent-%COMP%]{font-size:1.1rem}"]],data:{}});function l(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,8,"span",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,7,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"span",[["class","mr-2"]],null,null,null,null,null)),(t()(),a["ɵted"](3,null,["",""])),(t()(),a["ɵeld"](4,0,null,null,4,"a",[["class","badge-remove"]],null,[[null,"click"]],(function(t,e,n){var r=!0;return"click"===e&&(r=!1!==a["ɵnov"](t.parent,2).removeItem(t.context.$implicit)&&r),r}),null,null)),(t()(),a["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](7,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](8,1)],(function(t,e){var n=t(e,8,0,e.component.icons.destroy);t(e,7,0,n)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function d(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{cdSelect:0}),(t()(),a["ɵeld"](1,0,null,null,5,"cd-select",[["elemClass","mr-2 select-menu-edit"]],null,[[null,"selection"]],(function(t,e,n){var a=!0;return"selection"===e&&(a=!1!==t.component.selection.emit(n)&&a),a}),i.b,i.a)),a["ɵdid"](2,638976,[[1,4],["cdSelect",4]],0,s.a,[o.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"],selectionLimit:[4,"selectionLimit"],customBadges:[5,"customBadges"],customBadgeValidators:[6,"customBadgeValidators"]},{selection:"selection"}),(t()(),a["ɵeld"](3,0,null,0,3,"i",[],null,null,null,null,null)),a["ɵprd"](512,null,r["ɵNgClassImpl"],r["ɵNgClassR2Impl"],[a.IterableDiffers,a.KeyValueDiffers,a.ElementRef,a.Renderer2]),a["ɵdid"](5,278528,null,0,r.NgClass,[r["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),a["ɵpad"](6,1),(t()(),a["ɵand"](16777216,null,null,1,null,l)),a["ɵdid"](8,278528,null,0,r.NgForOf,[a.ViewContainerRef,a.TemplateRef,a.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,2,0,"mr-2 select-menu-edit",n.data,n.options,n.messages,n.selectionLimit,n.customBadges,n.customBadgeValidators);var a=t(e,6,0,n.icons.edit);t(e,5,0,a),t(e,8,0,n.data)}),null)}},pZt1:function(t,e){t.exports=function(t){return t&&t.length?t[0]:void 0}},pcHL:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Object)],t.prototype,"templates",void 0),i([Object(a.Component)({selector:"tree-node-children",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <div\n        [class.tree-children]="true"\n        [class.tree-children-no-padding]="node.options.levelPadding"\n        *treeAnimateOpen="\n          node.isExpanded;\n          speed: node.options.animateSpeed;\n          acceleration: node.options.animateAcceleration;\n          enabled: node.options.animateExpand\n        "\n      >\n        <tree-node-collection\n          *ngIf="node.children"\n          [nodes]="node.children"\n          [templates]="templates"\n          [treeModel]="node.treeModel"\n        >\n        </tree-node-collection>\n        <tree-loading-component\n          [style.padding-left]="node.getNodePadding()"\n          class="tree-node-loading"\n          *ngIf="!node.children"\n          [template]="templates.loadingTemplate"\n          [node]="node"\n        ></tree-loading-component>\n      </div>\n    </ng-container>\n  '})],t)}()},pkCn:function(t,e,n){"use strict";var a=n("0Dky");t.exports=function(t,e){var n=[][t];return!!n&&a((function(){n.call(null,e||function(){throw 1},1)}))}},ppGB:function(t,e){var n=Math.ceil,a=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?a:n)(t)}},ppaS:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("8Y7J"),r=n("oxzT"),i=n("DNAf");n("wnGv");class s{constructor(t){this.i18n=t,this.data=[],this.options=[],this.messages=new i.a({},this.i18n),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new a.EventEmitter,this.icons=r.a}}},pxLl:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("mrSG"),r=n("IheW"),i=n("LRne"),s=n("5+tZ"),o=n("xTzq"),u=n("8Y7J"),l=n("pL04");let d=(()=>{let t=class{constructor(t){this.http=t,this.url="api/perf_counters"}list(){return this.http.get(this.url)}get(t,e){return this.http.get(`${this.url}/${t}/${e}`).pipe(Object(s.a)(t=>Object(i.a)(t.counters)))}};return t.ngInjectableDef=u["ɵɵdefineInjectable"]({factory:function(){return new t(u["ɵɵinject"](r.c))},token:t,providedIn:l.a}),t=a.__decorate([o.a,a.__metadata("design:paramtypes",[r.c])],t),t})()},pxpQ:function(t,e,n){"use strict";var a=n("7o/Q"),r=n("EY2u"),i=n("LRne"),s=n("z6cu");let o=(()=>{class t{constructor(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue="N"===t}observe(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}}do(t,e,n){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return n&&n()}}accept(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)}toObservable(){switch(this.kind){case"N":return Object(i.a)(this.value);case"E":return Object(s.a)(this.error);case"C":return Object(r.b)()}throw new Error("unexpected notification kind value")}static createNext(e){return void 0!==e?new t("N",e):t.undefinedValueNotification}static createError(e){return new t("E",void 0,e)}static createComplete(){return t.completeNotification}}return t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t})();function u(t,e=0){return function(n){return n.lift(new l(t,e))}}n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return d}));class l{constructor(t,e=0){this.scheduler=t,this.delay=e}call(t,e){return e.subscribe(new d(t,this.scheduler,this.delay))}}class d extends a.a{constructor(t,e,n=0){super(t),this.scheduler=e,this.delay=n}static dispatch(t){const{notification:e,destination:n}=t;e.observe(n),this.unsubscribe()}scheduleMessage(t){this.destination.add(this.scheduler.schedule(d.dispatch,this.delay,new c(t,this.destination)))}_next(t){this.scheduleMessage(o.createNext(t))}_error(t){this.scheduleMessage(o.createError(t)),this.unsubscribe()}_complete(){this.scheduleMessage(o.createComplete()),this.unsubscribe()}}class c{constructor(t,e){this.notification=t,this.destination=e}}},qZTm:function(t,e,n){var a=n("fR/l"),r=n("MvSz"),i=n("7GkX");t.exports=function(t){return a(t,i,r)}},qgXg:function(t,e,n){"use strict";var a=n("3N8a");class r extends a.a{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}schedule(t,e=0){return e>0?super.schedule(t,e):(this.delay=e,this.state=t,this.scheduler.flush(this),this)}execute(t,e){return e>0||this.closed?super.execute(t,e):this._execute(t,e)}requestAsyncId(t,e,n=0){return null!==n&&n>0||null===n&&this.delay>0?super.requestAsyncId(t,e,n):t.flush(this)}}var i=n("IjjT");class s extends i.a{}n.d(e,"a",(function(){return o}));const o=new s(r)},quSY:function(t,e,n){"use strict";var a=n("DH7j"),r=n("XoHu"),i=n("n6bG");const s=(()=>{function t(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((t,e)=>`${e+1}) ${t.toString()}`).join("\n  ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t})();n.d(e,"a",(function(){return o}));let o=(()=>{class t{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}unsubscribe(){let e;if(this.closed)return;let{_parentOrParents:n,_unsubscribe:o,_subscriptions:l}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof t)n.remove(this);else if(null!==n)for(let t=0;t<n.length;++t)n[t].remove(this);if(Object(i.a)(o))try{o.call(this)}catch(d){e=d instanceof s?u(d.errors):[d]}if(Object(a.a)(l)){let t=-1,n=l.length;for(;++t<n;){const n=l[t];if(Object(r.a)(n))try{n.unsubscribe()}catch(d){e=e||[],d instanceof s?e=e.concat(u(d.errors)):e.push(d)}}}if(e)throw new s(e)}add(e){let n=e;if(!e)return t.EMPTY;switch(typeof e){case"function":n=new t(e);case"object":if(n===this||n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof t)){const e=n;n=new t,n._subscriptions=[e]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}let{_parentOrParents:a}=n;if(null===a)n._parentOrParents=this;else if(a instanceof t){if(a===this)return n;n._parentOrParents=[a,this]}else{if(-1!==a.indexOf(this))return n;a.push(this)}const r=this._subscriptions;return null===r?this._subscriptions=[n]:r.push(n),n}remove(t){const e=this._subscriptions;if(e){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}}}var e;return t.EMPTY=((e=new t).closed=!0,e),t})();function u(t){return t.reduce((t,e)=>t.concat(e instanceof s?e.errors:e),[])}},r8II:function(t,e,n){"use strict";e.decode=e.parse=n("YcCt"),e.encode=e.stringify=n("6MUB")},rB9j:function(t,e,n){"use strict";var a=n("I+eb"),r=n("kmMV");a({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},rEGp:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},rKzb:function(t,e,n){"use strict";var a=n("4syw"),r=n("8YOa").getWeakData,i=n("glrk"),s=n("hh1v"),o=n("GarU"),u=n("ImZN"),l=n("tycR"),d=n("UTVS"),c=n("afO8"),f=c.set,h=c.getterFor,g=l.find,p=l.findIndex,b=0,m=function(t){return t.frozen||(t.frozen=new y)},y=function(){this.entries=[]},v=function(t,e){return g(t.entries,(function(t){return t[0]===e}))};y.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=p(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,l){var c=t((function(t,a){o(t,c,e),f(t,{type:e,id:b++,frozen:void 0}),null!=a&&u(a,t[l],t,n)})),g=h(e),p=function(t,e,n){var a=g(t),s=r(i(e),!0);return!0===s?m(a).set(e,n):s[a.id]=n,t};return a(c.prototype,{delete:function(t){var e=g(this);if(!s(t))return!1;var n=r(t);return!0===n?m(e).delete(t):n&&d(n,e.id)&&delete n[e.id]},has:function(t){var e=g(this);if(!s(t))return!1;var n=r(t);return!0===n?m(e).has(t):n&&d(n,e.id)}}),a(c.prototype,n?{get:function(t){var e=g(this);if(s(t)){var n=r(t);return!0===n?m(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return p(this,t,e)}}:{add:function(t){return p(this,t,!0)}}),c}}},rW0t:function(t,e,n){"use strict";var a=n("glrk");t.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},rZud:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"index",void 0),i([Object(a.Input)(),s("design:type",a.TemplateRef)],t.prototype,"template",void 0),i([Object(a.Component)({selector:"tree-node-content",encapsulation:a.ViewEncapsulation.None,template:'\n  <span *ngIf="!template">{{ node.displayField }}</span>\n  <ng-container\n    [ngTemplateOutlet]="template"\n    [ngTemplateOutletContext]="{ $implicit: node, node: node, index: index }">\n  </ng-container>'})],t)}()},raLr:function(t,e,n){!function(t){"use strict";function e(t,e,n){var a,r;return"m"===n?e?"хвилина":"хвилину":"h"===n?e?"година":"годину":t+" "+(a=+t,r={ss:e?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:e?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:e?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[n].split("_"),a%10==1&&a%100!=11?r[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?r[1]:r[2])}function n(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===t?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):t?n[/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative"][t.day()]:n.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:e,m:e,mm:e,h:"годину",hh:e,d:"день",dd:e,M:"місяць",MM:e,y:"рік",yy:e},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},rkAj:function(t,e,n){var a=n("g6v/"),r=n("0Dky"),i=n("UTVS"),s=Object.defineProperty,o={},u=function(t){throw t};t.exports=function(t,e){if(i(o,t))return o[t];e||(e={});var n=[][t],l=!!i(e,"ACCESSORS")&&e.ACCESSORS,d=i(e,0)?e[0]:u,c=i(e,1)?e[1]:void 0;return o[t]=!!n&&!r((function(){if(l&&!a)return!0;var t={length:-1};l?s(t,1,{enumerable:!0,get:u}):t[1]=1,n.call(t,d,c)}))}},rpNk:function(t,e,n){"use strict";var a,r,i,s=n("4WOD"),o=n("kRJp"),u=n("UTVS"),l=n("tiKp"),d=n("xDBR"),c=l("iterator"),f=!1;[].keys&&("next"in(i=[].keys())?(r=s(s(i)))!==Object.prototype&&(a=r):f=!0),null==a&&(a={}),d||u(a,c)||o(a,c,(function(){return this})),t.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:f}},"s+uk":function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},s7LF:function(t,e,n){"use strict";n.d(e,"C",(function(){return Tt})),n.d(e,"G",(function(){return gt})),n.d(e,"D",(function(){return R})),n.d(e,"E",(function(){return pt})),n.d(e,"F",(function(){return F})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return h})),n.d(e,"p",(function(){return u})),n.d(e,"b",(function(){return d})),n.d(e,"e",(function(){return c})),n.d(e,"q",(function(){return p})),n.d(e,"r",(function(){return m})),n.d(e,"s",(function(){return y})),n.d(e,"t",(function(){return ot})),n.d(e,"u",(function(){return ht})),n.d(e,"w",(function(){return C})),n.d(e,"x",(function(){return A})),n.d(e,"j",(function(){return xt})),n.d(e,"l",(function(){return bt})),n.d(e,"g",(function(){return yt})),n.d(e,"m",(function(){return mt})),n.d(e,"v",(function(){return q})),n.d(e,"A",(function(){return M})),n.d(e,"z",(function(){return _t})),n.d(e,"h",(function(){return Ot})),n.d(e,"a",(function(){return nt})),n.d(e,"f",(function(){return it})),n.d(e,"i",(function(){return at})),n.d(e,"k",(function(){return rt})),n.d(e,"o",(function(){return x})),n.d(e,"B",(function(){return T})),n.d(e,"n",(function(){return wt})),n.d(e,"y",(function(){return St}));var a=n("8Y7J"),r=n("cUpR"),i=n("cp0P"),s=n("Cfvw"),o=n("lJxs");const u=new a.InjectionToken("NgValueAccessor");class l{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"checked",t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}}const d=new a.InjectionToken("CompositionEventMode");class c{constructor(t,e,n){this._renderer=t,this._elementRef=e,this._compositionMode=n,this.onChange=t=>{},this.onTouched=()=>{},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const t=Object(r.q)()?Object(r.q)().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}())}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==t?"":t)}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}}class f{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}reset(t){this.control&&this.control.reset(t)}hasError(t,e){return!!this.control&&this.control.hasError(t,e)}getError(t,e){return this.control?this.control.getError(t,e):null}}class h extends f{get formDirective(){return null}get path(){return null}}function g(){throw new Error("unimplemented")}class p extends f{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null,this._rawValidators=[],this._rawAsyncValidators=[]}get validator(){return g()}get asyncValidator(){return g()}}class b{constructor(t){this._cd=t}get ngClassUntouched(){return!!this._cd.control&&this._cd.control.untouched}get ngClassTouched(){return!!this._cd.control&&this._cd.control.touched}get ngClassPristine(){return!!this._cd.control&&this._cd.control.pristine}get ngClassDirty(){return!!this._cd.control&&this._cd.control.dirty}get ngClassValid(){return!!this._cd.control&&this._cd.control.valid}get ngClassInvalid(){return!!this._cd.control&&this._cd.control.invalid}get ngClassPending(){return!!this._cd.control&&this._cd.control.pending}}class m extends b{constructor(t){super(t)}}class y extends b{constructor(t){super(t)}}function v(t){return null==t||0===t.length}const x=new a.InjectionToken("NgValidators"),_=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class T{static min(t){return e=>{if(v(e.value)||v(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n<t?{min:{min:t,actual:e.value}}:null}}static max(t){return e=>{if(v(e.value)||v(t))return null;const n=parseFloat(e.value);return!isNaN(n)&&n>t?{max:{max:t,actual:e.value}}:null}}static required(t){return v(t.value)?{required:!0}:null}static requiredTrue(t){return!0===t.value?null:{required:!0}}static email(t){return v(t.value)?null:_.test(t.value)?null:{email:!0}}static minLength(t){return e=>{if(v(e.value))return null;const n=e.value?e.value.length:0;return n<t?{minlength:{requiredLength:t,actualLength:n}}:null}}static maxLength(t){return e=>{const n=e.value?e.value.length:0;return n>t?{maxlength:{requiredLength:t,actualLength:n}}:null}}static pattern(t){if(!t)return T.nullValidator;let e,n;return"string"==typeof t?(n="","^"!==t.charAt(0)&&(n+="^"),n+=t,"$"!==t.charAt(t.length-1)&&(n+="$"),e=new RegExp(n)):(n=t.toString(),e=t),t=>{if(v(t.value))return null;const a=t.value;return e.test(a)?null:{pattern:{requiredPattern:n,actualValue:a}}}}static nullValidator(t){return null}static compose(t){if(!t)return null;const e=t.filter(O);return 0==e.length?null:function(t){return S(function(t,e){return e.map(e=>e(t))}(t,e))}}static composeAsync(t){if(!t)return null;const e=t.filter(O);return 0==e.length?null:function(t){const n=function(t,e){return e.map(e=>e(t))}(t,e).map(w);return Object(i.a)(n).pipe(Object(o.a)(S))}}}function O(t){return null!=t}function w(t){const e=Object(a["ɵisPromise"])(t)?Object(s.a)(t):t;if(!Object(a["ɵisObservable"])(e))throw new Error("Expected validator to return Promise or Observable.");return e}function S(t){const e=t.reduce((t,e)=>null!=e?Object.assign({},t,e):t,{});return 0===Object.keys(e).length?null:e}function I(t){return t.validate?e=>t.validate(e):t}function N(t){return t.validate?e=>t.validate(e):t}class C{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==t?"":t)}registerOnChange(t){this.onChange=e=>{t(""==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}}class R{constructor(){this._accessors=[]}add(t,e){this._accessors.push([t,e])}remove(t){for(let e=this._accessors.length-1;e>=0;--e)if(this._accessors[e][1]===t)return void this._accessors.splice(e,1)}select(t){this._accessors.forEach(e=>{this._isSameGroup(e,t)&&e[1]!==t&&e[1].fireUncheck(t.value)})}_isSameGroup(t,e){return!!t[0].control&&t[0]._parent===e._control._parent&&t[1].name===e.name}}class A{constructor(t,e,n,a){this._renderer=t,this._elementRef=e,this._registry=n,this._injector=a,this.onChange=()=>{},this.onTouched=()=>{}}ngOnInit(){this._control=this._injector.get(p),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(t){this._state=t===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)}registerOnChange(t){this._fn=t,this.onChange=()=>{t(this.value),this._registry.select(this)}}fireUncheck(t){this.writeValue(t)}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_checkName(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)}_throwNameError(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')}}const k='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',E='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',L='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>';class D{static controlParentException(){throw new Error(`formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      ${k}`)}static ngModelGroupException(){throw new Error(`formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        ${E}\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        ${L}`)}static missingFormException(){throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       ${k}`)}static groupParentException(){throw new Error(`formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      ${E}`)}static arrayParentException(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });')}static disabledAttrWarning(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")}static ngModelWarning(t){console.warn(`\n    It looks like you're using ngModel on the same form field as ${t}. \n    Support for using the ngModel input property and ngModelChange event with \n    reactive form directives has been deprecated in Angular v6 and will be removed \n    in Angular v7.\n    \n    For more information on this, see our API docs here:\n    https://angular.io/api/forms/${"formControl"===t?"FormControlDirective":"FormControlName"}#use-with-ngmodel\n    `)}}function P(t,e){return null==t?`${e}`:(e&&"object"==typeof e&&(e="Object"),`${t}: ${e}`.slice(0,50))}class M{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=a["ɵlooseIdentical"]}set compareWith(t){if("function"!=typeof t)throw new Error(`compareWith must be a function, but received ${JSON.stringify(t)}`);this._compareWith=t}writeValue(t){this.value=t;const e=this._getOptionId(t);null==e&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);const n=P(e,t);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)}registerOnChange(t){this.onChange=e=>{this.value=this._getOptionValue(e),t(this.value)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e),t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(":")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e):t}}class q{constructor(t,e,n){this._element=t,this._renderer=e,this._select=n,this._select&&(this.id=this._select._registerOption())}set ngValue(t){null!=this._select&&(this._select._optionMap.set(this.id,t),this._setElementValue(P(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._setElementValue(t),this._select&&this._select.writeValue(this._select.value)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}function j(t,e){return null==t?`${e}`:("string"==typeof e&&(e=`'${e}'`),e&&"object"==typeof e&&(e="Object"),`${t}: ${e}`.slice(0,50))}class F{constructor(t,e,n){this._element=t,this._renderer=e,this._select=n,this._select&&(this.id=this._select._registerOption(this))}set ngValue(t){null!=this._select&&(this._value=t,this._setElementValue(j(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._select?(this._value=t,this._setElementValue(j(this.id,t)),this._select.writeValue(this._select.value)):this._setElementValue(t)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}_setSelected(t){this._renderer.setProperty(this._element.nativeElement,"selected",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}function G(t,e){return[...e.path,t]}function V(t,e){t||H(e,"Cannot find control with"),e.valueAccessor||H(e,"No value accessor for form control with"),t.validator=T.compose([t.validator,e.validator]),t.asyncValidator=T.composeAsync([t.asyncValidator,e.asyncValidator]),e.valueAccessor.writeValue(t.value),function(t,e){e.valueAccessor.registerOnChange(n=>{t._pendingValue=n,t._pendingChange=!0,t._pendingDirty=!0,"change"===t.updateOn&&z(t,e)})}(t,e),function(t,e){t.registerOnChange((t,n)=>{e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)})}(t,e),function(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,"blur"===t.updateOn&&t._pendingChange&&z(t,e),"submit"!==t.updateOn&&t.markAsTouched()})}(t,e),e.valueAccessor.setDisabledState&&t.registerOnDisabledChange(t=>{e.valueAccessor.setDisabledState(t)}),e._rawValidators.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(()=>t.updateValueAndValidity())}),e._rawAsyncValidators.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(()=>t.updateValueAndValidity())})}function z(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function B(t,e){null==t&&H(e,"Cannot find control with"),t.validator=T.compose([t.validator,e.validator]),t.asyncValidator=T.composeAsync([t.asyncValidator,e.asyncValidator])}function Y(t){return H(t,"There is no FormControl instance attached to form control element with")}function H(t,e){let n;throw n=t.path.length>1?`path: '${t.path.join(" -> ")}'`:t.path[0]?`name: '${t.path}'`:"unspecified name attribute",new Error(`${e} ${n}`)}function U(t){return null!=t?T.compose(t.map(I)):null}function W(t){return null!=t?T.composeAsync(t.map(N)):null}function K(t,e){if(!t.hasOwnProperty("model"))return!1;const n=t.model;return!!n.isFirstChange()||!Object(a["ɵlooseIdentical"])(e,n.currentValue)}const $=[l,class{constructor(t,e){this._renderer=t,this._elementRef=e,this.onChange=t=>{},this.onTouched=()=>{}}writeValue(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(t))}registerOnChange(t){this.onChange=e=>{t(""==e?null:parseFloat(e))}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}},C,M,class{constructor(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=t=>{},this.onTouched=()=>{},this._compareWith=a["ɵlooseIdentical"]}set compareWith(t){if("function"!=typeof t)throw new Error(`compareWith must be a function, but received ${JSON.stringify(t)}`);this._compareWith=t}writeValue(t){let e;if(this.value=t,Array.isArray(t)){const n=t.map(t=>this._getOptionId(t));e=(t,e)=>{t._setSelected(n.indexOf(e.toString())>-1)}}else e=(t,e)=>{t._setSelected(!1)};this._optionMap.forEach(e)}registerOnChange(t){this.onChange=e=>{const n=[];if(e.hasOwnProperty("selectedOptions")){const t=e.selectedOptions;for(let e=0;e<t.length;e++){const a=t.item(e),r=this._getOptionValue(a.value);n.push(r)}}else{const t=e.options;for(let e=0;e<t.length;e++){const a=t.item(e);if(a.selected){const t=this._getOptionValue(a.value);n.push(t)}}}this.value=n,t(n)}}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)}_registerOption(t){const e=(this._idCounter++).toString();return this._optionMap.set(e,t),e}_getOptionId(t){for(const e of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(e)._value,t))return e;return null}_getOptionValue(t){const e=function(t){return t.split(":")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e)._value:t}},A];function Z(t,e){t._syncPendingControls(),e.forEach(t=>{const e=t.control;"submit"===e.updateOn&&e._pendingChange&&(t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1)})}function J(t,e){if(!e)return null;Array.isArray(e)||H(t,"Value accessor was not provided as an array for form control with");let n=void 0,a=void 0,r=void 0;return e.forEach(e=>{var i;e.constructor===c?n=e:(i=e,$.some(t=>i.constructor===t)?(a&&H(t,"More than one built-in value accessor matches form control with"),a=e):(r&&H(t,"More than one custom value accessor matches form control with"),r=e))}),r||a||n||(H(t,"No valid value accessor for form control with"),null)}function Q(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}function X(t){const e=et(t)?t.validators:t;return Array.isArray(e)?U(e):e||null}function tt(t,e){const n=et(e)?e.asyncValidators:t;return Array.isArray(n)?W(n):n||null}function et(t){return null!=t&&!Array.isArray(t)&&"object"==typeof t}class nt{constructor(t,e){this.validator=t,this.asyncValidator=e,this._onCollectionChange=()=>{},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}get parent(){return this._parent}get valid(){return"VALID"===this.status}get invalid(){return"INVALID"===this.status}get pending(){return"PENDING"==this.status}get disabled(){return"DISABLED"===this.status}get enabled(){return"DISABLED"!==this.status}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this.validator=X(t)}setAsyncValidators(t){this.asyncValidator=tt(t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(t=>t.markAllAsTouched())}markAsUntouched(t={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}markAsDirty(t={}){this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)}markAsPristine(t={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}markAsPending(t={}){this.status="PENDING",!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)}disable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status="DISABLED",this.errors=null,this._forEachChild(e=>{e.disable(Object.assign({},t,{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign({},t,{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!0))}enable(t={}){const e=this._parentMarkedDirty(t.onlySelf);this.status="VALID",this._forEachChild(e=>{e.enable(Object.assign({},t,{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(Object.assign({},t,{skipPristineCheck:e})),this._onDisabledChange.forEach(t=>t(!1))}_updateAncestors(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(t){this._parent=t}updateValueAndValidity(t={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),"VALID"!==this.status&&"PENDING"!==this.status||this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?"DISABLED":"VALID"}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t){if(this.asyncValidator){this.status="PENDING";const e=w(this.asyncValidator(this));this._asyncValidationSubscription=e.subscribe(e=>this.setErrors(e,{emitEvent:t}))}}_cancelExistingSubscription(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()}setErrors(t,e={}){this.errors=t,this._updateControlsErrors(!1!==e.emitEvent)}get(t){return function(t,e,n){return null==e?null:(e instanceof Array||(e=e.split(".")),e instanceof Array&&0===e.length?null:e.reduce((t,e)=>t instanceof rt?t.controls.hasOwnProperty(e)?t.controls[e]:null:t instanceof it&&t.at(e)||null,t))}(this,t)}getError(t,e){const n=e?this.get(e):this;return n&&n.errors?n.errors[t]:null}hasError(t,e){return!!this.getError(t,e)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)}_initObservables(){this.valueChanges=new a.EventEmitter,this.statusChanges=new a.EventEmitter}_calculateStatus(){return this._allControlsDisabled()?"DISABLED":this.errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"}_anyControlsHaveStatus(t){return this._anyControls(e=>e.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t={}){this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)}_updateTouched(t={}){this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)}_isBoxedValue(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){et(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){return!t&&this._parent&&this._parent.dirty&&!this._parent._anyControlsDirty()}}class at extends nt{constructor(t=null,e,n){super(X(e),tt(n,e)),this._onChange=[],this._applyFormState(t),this._setUpdateStrategy(e),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),this._initObservables()}setValue(t,e={}){this.value=this._pendingValue=t,this._onChange.length&&!1!==e.emitModelToViewChange&&this._onChange.forEach(t=>t(this.value,!1!==e.emitViewToModelChange)),this.updateValueAndValidity(e)}patchValue(t,e={}){this.setValue(t,e)}reset(t=null,e={}){this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_clearChangeFns(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=()=>{}}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_forEachChild(t){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}}class rt extends nt{constructor(t,e,n){super(X(e),tt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1})}registerControl(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(t,e){this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}removeControl(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity(),this._onCollectionChange()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,e={}){this._checkAllValuesPresent(t),Object.keys(t).forEach(n=>{this._throwIfControlMissing(n),this.controls[n].setValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){Object.keys(t).forEach(n=>{this.controls[n]&&this.controls[n].patchValue(t[n],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t={},e={}){this._forEachChild((n,a)=>{n.reset(t[a],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this._reduceChildren({},(t,e,n)=>(t[n]=e instanceof at?e.value:e.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(t,e)=>!!e._syncPendingControls()||t);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[t])throw new Error(`Cannot find form control with name: ${t}.`)}_forEachChild(t){Object.keys(this.controls).forEach(e=>t(this.controls[e],e))}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){let e=!1;return this._forEachChild((n,a)=>{e=e||this.contains(a)&&t(n)}),e}_reduceValue(){return this._reduceChildren({},(t,e,n)=>((e.enabled||this.disabled)&&(t[n]=e.value),t))}_reduceChildren(t,e){let n=t;return this._forEachChild((t,a)=>{n=e(n,t,a)}),n}_allControlsDisabled(){for(const t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control with name: '${n}'.`)})}}class it extends nt{constructor(t,e,n){super(X(e),tt(n,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!1})}at(t){return this.controls[t]}push(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()}insert(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity()}removeAt(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),this.updateValueAndValidity()}setControl(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,e={}){this._checkAllValuesPresent(t),t.forEach((t,n)=>{this._throwIfControlMissing(n),this.at(n).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t.forEach((t,n)=>{this.at(n)&&this.at(n).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}reset(t=[],e={}){this._forEachChild((n,a)=>{n.reset(t[a],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e),this._updateTouched(e),this.updateValueAndValidity(e)}getRawValue(){return this.controls.map(t=>t instanceof at?t.value:t.getRawValue())}clear(){this.controls.length<1||(this._forEachChild(t=>t._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity())}_syncPendingControls(){let t=this.controls.reduce((t,e)=>!!e._syncPendingControls()||t,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_throwIfControlMissing(t){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(t))throw new Error(`Cannot find form control at index ${t}`)}_forEachChild(t){this.controls.forEach((e,n)=>{t(e,n)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(e=>e.enabled&&t(e))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_checkAllValuesPresent(t){this._forEachChild((e,n)=>{if(void 0===t[n])throw new Error(`Must supply a value for form control at index: ${n}.`)})}_allControlsDisabled(){for(const t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}}const st=(()=>Promise.resolve(null))();class ot extends h{constructor(t,e){super(),this.submitted=!1,this._directives=[],this.ngSubmit=new a.EventEmitter,this.form=new rt({},U(t),W(e))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(t){st.then(()=>{const e=this._findContainer(t.path);t.control=e.registerControl(t.name,t.control),V(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),this._directives.push(t)})}getControl(t){return this.form.get(t.path)}removeControl(t){st.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name),Q(this._directives,t)})}addFormGroup(t){st.then(()=>{const e=this._findContainer(t.path),n=new rt({});B(n,t),e.registerControl(t.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(t){st.then(()=>{const e=this._findContainer(t.path);e&&e.removeControl(t.name)})}getFormGroup(t){return this.form.get(t.path)}updateModel(t,e){st.then(()=>{this.form.get(t.path).setValue(e)})}setValue(t){this.control.setValue(t)}onSubmit(t){return this.submitted=!0,Z(this.form,this._directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(t){return t.pop(),t.length?this.form.get(t):this.form}}class ut{static modelParentException(){throw new Error(`\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup's partner directive "formControlName" instead.  Example:\n\n      ${k}\n\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formControlName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  `)}static formGroupNameException(){throw new Error(`\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      ${E}\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      ${L}`)}static missingNameException(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')}static modelGroupParentException(){throw new Error(`\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      ${E}\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      ${L}`)}static ngFormWarning(){console.warn("\n    It looks like you're using 'ngForm'.\n\n    Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed\n    in Angular v9.\n\n    Use 'ng-form' instead.\n\n    Before:\n    <ngForm #myForm=\"ngForm\">\n\n    After:\n    <ng-form #myForm=\"ngForm\">\n    ")}}const lt=new a.InjectionToken("NgFormSelectorWarning");class dt extends h{ngOnInit(){this._checkParentType(),this.formDirective.addFormGroup(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormGroup(this)}get control(){return this.formDirective.getFormGroup(this)}get path(){return G(this.name,this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._validators)}get asyncValidator(){return W(this._asyncValidators)}_checkParentType(){}}class ct extends dt{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}_checkParentType(){this._parent instanceof ct||this._parent instanceof ot||ut.modelGroupParentException()}}const ft=(()=>Promise.resolve(null))();class ht extends p{constructor(t,e,n,r){super(),this.control=new at,this._registered=!1,this.update=new a.EventEmitter,this._parent=t,this._rawValidators=e||[],this._rawAsyncValidators=n||[],this.valueAccessor=J(this,r)}ngOnChanges(t){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in t&&this._updateDisabled(t),K(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?G(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._rawValidators)}get asyncValidator(){return W(this._rawAsyncValidators)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){V(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){!(this._parent instanceof ct)&&this._parent instanceof dt?ut.formGroupNameException():this._parent instanceof ct||this._parent instanceof ot||ut.modelParentException()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||ut.missingNameException()}_updateValue(t){ft.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1})})}_updateDisabled(t){const e=t.isDisabled.currentValue,n=""===e||e&&"false"!==e;ft.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable()})}}class gt{}const pt=new a.InjectionToken("NgModelWithFormControlWarning");class bt extends h{constructor(t,e){super(),this._validators=t,this._asyncValidators=e,this.submitted=!1,this.directives=[],this.form=null,this.ngSubmit=new a.EventEmitter}ngOnChanges(t){this._checkFormPresent(),t.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(t){const e=this.form.get(t.path);return V(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e}getControl(t){return this.form.get(t.path)}removeControl(t){Q(this.directives,t)}addFormGroup(t){const e=this.form.get(t.path);B(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormGroup(t){}getFormGroup(t){return this.form.get(t.path)}addFormArray(t){const e=this.form.get(t.path);B(e,t),e.updateValueAndValidity({emitEvent:!1})}removeFormArray(t){}getFormArray(t){return this.form.get(t.path)}updateModel(t,e){this.form.get(t.path).setValue(e)}onSubmit(t){return this.submitted=!0,Z(this.form,this.directives),this.ngSubmit.emit(t),!1}onReset(){this.resetForm()}resetForm(t){this.form.reset(t),this.submitted=!1}_updateDomValue(){this.directives.forEach(t=>{const e=this.form.get(t.path);t.control!==e&&(function(t,e){e.valueAccessor.registerOnChange(()=>Y(e)),e.valueAccessor.registerOnTouched(()=>Y(e)),e._rawValidators.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),e._rawAsyncValidators.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),t&&t._clearChangeFns()}(t.control,t),e&&V(e,t),t.control=e)}),this.form._updateTreeValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(()=>this._updateDomValue()),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{}),this._oldForm=this.form}_updateValidators(){const t=U(this._validators);this.form.validator=T.compose([this.form.validator,t]);const e=W(this._asyncValidators);this.form.asyncValidator=T.composeAsync([this.form.asyncValidator,e])}_checkFormPresent(){this.form||D.missingFormException()}}class mt extends dt{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}_checkParentType(){vt(this._parent)&&D.groupParentException()}}class yt extends h{constructor(t,e,n){super(),this._parent=t,this._validators=e,this._asyncValidators=n}ngOnInit(){this._checkParentType(),this.formDirective.addFormArray(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormArray(this)}get control(){return this.formDirective.getFormArray(this)}get formDirective(){return this._parent?this._parent.formDirective:null}get path(){return G(this.name,this._parent)}get validator(){return U(this._validators)}get asyncValidator(){return W(this._asyncValidators)}_checkParentType(){vt(this._parent)&&D.arrayParentException()}}function vt(t){return!(t instanceof mt||t instanceof bt||t instanceof yt)}let xt=(()=>{class t extends p{constructor(t,e,n,r,i){super(),this._ngModelWarningConfig=i,this._added=!1,this.update=new a.EventEmitter,this._ngModelWarningSent=!1,this._parent=t,this._rawValidators=e||[],this._rawAsyncValidators=n||[],this.valueAccessor=J(this,r)}set isDisabled(t){D.disabledAttrWarning()}ngOnChanges(e){var n,r;this._added||this._setUpControl(),K(e,this.viewModel)&&("formControlName",n=t,this,r=this._ngModelWarningConfig,Object(a.isDevMode)()&&"never"!==r&&((null!==r&&"once"!==r||n._ngModelWarningSentOnce)&&("always"!==r||this._ngModelWarningSent)||(D.ngModelWarning("formControlName"),n._ngModelWarningSentOnce=!0,this._ngModelWarningSent=!0)),this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}get path(){return G(this.name,this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}get validator(){return U(this._rawValidators)}get asyncValidator(){return W(this._rawAsyncValidators)}_checkParentType(){!(this._parent instanceof mt)&&this._parent instanceof dt?D.ngModelGroupException():this._parent instanceof mt||this._parent instanceof bt||this._parent instanceof yt||D.controlParentException()}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0}}return t._ngModelWarningSentOnce=!1,t})();class _t{get required(){return this._required}set required(t){this._required=null!=t&&!1!==t&&"false"!==`${t}`,this._onChange&&this._onChange()}validate(t){return this.required?T.required(t):null}registerOnValidatorChange(t){this._onChange=t}}class Tt{}class Ot{group(t,e=null){const n=this._reduceControls(t);let a=null,r=null,i=void 0;return null!=e&&(function(t){return void 0!==t.asyncValidators||void 0!==t.validators||void 0!==t.updateOn}(e)?(a=null!=e.validators?e.validators:null,r=null!=e.asyncValidators?e.asyncValidators:null,i=null!=e.updateOn?e.updateOn:void 0):(a=null!=e.validator?e.validator:null,r=null!=e.asyncValidator?e.asyncValidator:null)),new rt(n,{asyncValidators:r,updateOn:i,validators:a})}control(t,e,n){return new at(t,e,n)}array(t,e,n){const a=t.map(t=>this._createControl(t));return new it(a,e,n)}_reduceControls(t){const e={};return Object.keys(t).forEach(n=>{e[n]=this._createControl(t[n])}),e}_createControl(t){return t instanceof at||t instanceof rt||t instanceof it?t:Array.isArray(t)?this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null):this.control(t)}}class wt{static withConfig(t){return{ngModule:wt,providers:[{provide:lt,useValue:t.warnOnDeprecatedNgFormSelector}]}}}class St{static withConfig(t){return{ngModule:St,providers:[{provide:pt,useValue:t.warnOnNgModelWithFormControl}]}}}},sEFX:function(t,e,n){"use strict";var a=n("AO7/"),r=n("9d/t");t.exports=a?{}.toString:function(){return"[object "+r(this)+"]"}},sEf8:function(t,e){t.exports=function(t){return function(e){return t(e)}}},sEfC:function(t,e,n){var a=n("GoyQ"),r=n("QIyF"),i=n("tLB3"),s=Math.max,o=Math.min;t.exports=function(t,e,n){var u,l,d,c,f,h,g=0,p=!1,b=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=u,a=l;return u=l=void 0,g=e,c=t.apply(a,n)}function v(t){return g=t,f=setTimeout(_,e),p?y(t):c}function x(t){var n=t-h;return void 0===h||n>=e||n<0||b&&t-g>=d}function _(){var t=r();if(x(t))return T(t);f=setTimeout(_,function(t){var n=e-(t-h);return b?o(n,d-(t-g)):n}(t))}function T(t){return f=void 0,m&&u?y(t):(u=l=void 0,c)}function O(){var t=r(),n=x(t);if(u=arguments,l=this,h=t,n){if(void 0===f)return v(h);if(b)return clearTimeout(f),f=setTimeout(_,e),y(h)}return void 0===f&&(f=setTimeout(_,e)),c}return e=i(e)||0,a(n)&&(p=!!n.leading,d=(b="maxWait"in n)?s(i(n.maxWait)||0,e):d,m="trailing"in n?!!n.trailing:m),O.cancel=function(){void 0!==f&&clearTimeout(f),g=0,u=h=l=f=void 0},O.flush=function(){return void 0===f?c:T(r())},O}},sLuX:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("25BL"),i=n("uIqm");n("FSuO"),n("a0VL"),n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return o}));var s=a["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function o(t){return a["ɵvid"](0,[a["ɵqud"](402653184,1,{table:0}),(t()(),a["ɵeld"](1,0,null,null,1,"cd-table",[["columnMode","flex"]],null,null,null,r.b,r.a)),a["ɵdid"](2,2867200,[[1,4],["table",4]],0,i.a,[a.NgZone,a.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],toolHeader:[3,"toolHeader"],header:[4,"header"],footer:[5,"footer"],limit:[6,"limit"],autoReload:[7,"autoReload"],autoSave:[8,"autoSave"],customCss:[9,"customCss"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.tableData,n.columns,"flex",!1,!1,!1,0,n.autoReload,!1,n.customCss)}),null)}},sMBO:function(t,e,n){var a=n("g6v/"),r=n("m/L8").f,i=Function.prototype,s=i.toString,o=/^\s*function ([^ (]*)/;!a||"name"in i||r(i,"name",{configurable:!0,get:function(){try{return s.call(this).match(o)[1]}catch(t){return""}}})},sVev:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));const a=(()=>{function t(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return t.prototype=Object.create(Error.prototype),t})()},sb0X:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("s7LF"),i=n("oxzT"),s=n("LvDl");class o{constructor(t){this.elRef=t,this.type="submit",this.disabled=!1,this.submitAction=new a.EventEmitter,this.loading=!1,this.icons=i.a}ngOnInit(){this.form.statusChanges.subscribe(()=>{s.has(this.form.errors,"cdSubmitButton")&&(this.loading=!1,s.unset(this.form.errors,"cdSubmitButton"),this.form instanceof r.a&&this.form.updateValueAndValidity())})}submit(t){this.focusButton(),this.form instanceof r.l&&this.form.onSubmit(t),this.form.invalid?this.focusInvalid():(this.loading=!0,this.submitAction.emit())}focusButton(){this.elRef.nativeElement.offsetParent.querySelector(`button[type="${this.type}"]`).focus()}focusInvalid(){const t=this.elRef.nativeElement.offsetParent.querySelector("input.ng-invalid, select.ng-invalid");t&&t.focus()}}},seXi:function(t,e,n){var a=n("qZTm"),r=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,s,o){var u=1&n,l=a(t),d=l.length;if(d!=a(e).length&&!u)return!1;for(var c=d;c--;){var f=l[c];if(!(u?f in e:r.call(e,f)))return!1}var h=o.get(t);if(h&&o.get(e))return h==e;var g=!0;o.set(t,e),o.set(e,t);for(var p=u;++c<d;){var b=t[f=l[c]],m=e[f];if(i)var y=u?i(m,b,f,e,t,o):i(b,m,f,t,e,o);if(!(void 0===y?b===m||s(b,m,n,i,o):y)){g=!1;break}p||(p="constructor"==f)}if(g&&!p){var v=t.constructor,x=e.constructor;v!=x&&"constructor"in t&&"constructor"in e&&!("function"==typeof v&&v instanceof v&&"function"==typeof x&&x instanceof x)&&(g=!1)}return o.delete(t),o.delete(e),g}},shjB:function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},sne2:function(t,e,n){"use strict";n.d(e,"c",(function(){return i})),n.d(e,"e",(function(){return s})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u})),n.d(e,"d",(function(){return l}));var a=n("8Y7J"),r=n("GiVz");let i=(()=>{class t{}return t.organization="ceph",t.projectName="Ceph Dashboard",t.license="Free software (LGPL 2.1).",t})();var s=function(t){return t.CREATE="create",t.EDIT="edit",t.UPDATE="update",t.REMOVE="remove",t.DELETE="delete",t.ADD="add",t.COPY="copy",t.CLONE="clone",t.RECREATE="recreate",t.EXPIRE="expire",t}({}),o=function(t){return t.CREATE="Create",t.DELETE="Delete",t.ADD="Add",t.REMOVE="Remove",t.EDIT="Edit",t.CANCEL="Cancel",t.COPY="Copy",t.CLONE="Clone",t.UPDATE="Update",t.EVICT="Evict",t.SHOW="Show",t.RECREATE="Recreate",t.EXPIRE="Expire",t}({});let u=(()=>{class t{constructor(t){this.i18n=t,this.CREATE=this.i18n("Create"),this.DELETE=this.i18n("Delete"),this.ADD=this.i18n("Add"),this.SET=this.i18n("Set"),this.REMOVE=this.i18n("Remove"),this.UNSET=this.i18n("Unset"),this.EDIT=this.i18n("Edit"),this.UPDATE=this.i18n("Update"),this.CANCEL=this.i18n("Cancel"),this.CLONE=this.i18n("Clone"),this.COPY=this.i18n("Copy"),this.DEEP_SCRUB=this.i18n("Deep Scrub"),this.DESTROY=this.i18n("Destroy"),this.EVICT=this.i18n("Evict"),this.FLATTEN=this.i18n("Flatten"),this.MARK_DOWN=this.i18n("Mark Down"),this.MARK_IN=this.i18n("Mark In"),this.MARK_LOST=this.i18n("Mark Lost"),this.MARK_OUT=this.i18n("Mark Out"),this.PROTECT=this.i18n("Protect"),this.PURGE=this.i18n("Purge"),this.RENAME=this.i18n("Rename"),this.RESTORE=this.i18n("Restore"),this.REWEIGHT=this.i18n("Reweight"),this.ROLLBACK=this.i18n("Rollback"),this.SCRUB=this.i18n("Scrub"),this.SHOW=this.i18n("Show"),this.TRASH=this.i18n("Move to Trash"),this.UNPROTECT=this.i18n("Unprotect"),this.CHANGE=this.i18n("Change"),this.RECREATE=this.i18n("Recreate"),this.EXPIRE=this.i18n("Expire")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})(),l=(()=>{class t{constructor(t){this.i18n=t,this.CREATED=this.i18n("Created"),this.DELETED=this.i18n("Deleted"),this.ADDED=this.i18n("Added"),this.REMOVED=this.i18n("Removed"),this.EDITED=this.i18n("Edited"),this.CANCELED=this.i18n("Canceled"),this.CLONED=this.i18n("Cloned"),this.COPIED=this.i18n("Copied"),this.DEEP_SCRUBBED=this.i18n("Deep Scrubbed"),this.DESTROYED=this.i18n("Destroyed"),this.FLATTENED=this.i18n("Flattened"),this.MARKED_DOWN=this.i18n("Marked Down"),this.MARKED_IN=this.i18n("Marked In"),this.MARKED_LOST=this.i18n("Marked Lost"),this.MARKED_OUT=this.i18n("Marked Out"),this.PROTECTED=this.i18n("Protected"),this.PURGED=this.i18n("Purged"),this.RENAMED=this.i18n("Renamed"),this.RESTORED=this.i18n("Restored"),this.REWEIGHTED=this.i18n("Reweighted"),this.ROLLED_BACK=this.i18n("Rolled back"),this.SCRUBBED=this.i18n("Scrubbed"),this.SHOWED=this.i18n("Showed"),this.TRASHED=this.i18n("Moved to Trash"),this.UNPROTECTED=this.i18n("Unprotected"),this.CHANGE=this.i18n("Change"),this.RECREATED=this.i18n("Recreated"),this.EXPIRED=this.i18n("Expired")}}return t.ngInjectableDef=a["ɵɵdefineInjectable"]({factory:function(){return new t(a["ɵɵinject"](r.a))},token:t,providedIn:"root"}),t})()},sp3z:function(t,e,n){!function(t){"use strict";t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}})}(n("wd/R"))},"t/zF":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t,e){this.name=t,this.metadata=e}}},t2Dn:function(t,e,n){var a=n("hypo"),r=n("ljhN");t.exports=function(t,e,n){(void 0===n||r(t[e],n))&&(void 0!==n||e in t)||a(t,e,n)}},tAZD:function(t,e,n){var a,r,i;!function(s){if("object"==typeof t.exports){var o=s(0,e);void 0!==o&&(t.exports=o)}else r=[n,e],void 0===(i="function"==typeof(a=s)?a.apply(e,r):a)||(t.exports=i)}((function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=void 0;e.default=["en",[["a","p"],["AM","PM"],n],[["AM","PM"],n,n],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],n,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],n,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",n,"{1} 'at' {0}",n],[".",",",";","%","+","-","E","×","‰","∞","NaN",":"],["#,##0.###","#,##0%","¤#,##0.00","#E0"],"$","US Dollar",{},function(t){var e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\.?/,"").length;return 1===e&&0===n?1:5}]}))},tGlX:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},tLB3:function(t,e,n){var a=n("GoyQ"),r=n("/9aa"),i=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(r(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var n=o.test(t);return n||u.test(t)?l(t.slice(2),n?2:8):s.test(t)?NaN:+t}},tMB7:function(t,e,n){var a=n("y1pI");t.exports=function(t){var e=this.__data__,n=a(e,t);return n<0?void 0:e[n][1]}},tT3J:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n("wd/R"))},tUCv:function(t,e,n){!function(t){"use strict";t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n("wd/R"))},tadb:function(t,e,n){var a=n("Cwc5")(n("Kz5y"),"DataView");t.exports=a},tiKp:function(t,e,n){var a=n("2oRo"),r=n("VpIT"),i=n("UTVS"),s=n("kOOl"),o=n("STAE"),u=n("/b8u"),l=r("wks"),d=a.Symbol,c=u?d:d&&d.withoutSetter||s;t.exports=function(t){return i(l,t)||(l[t]=o&&i(d,t)?d[t]:c("Symbol."+t)),l[t]}},tycR:function(t,e,n){var a=n("A2ZE"),r=n("RK3t"),i=n("ewvW"),s=n("UMSQ"),o=n("ZfDv"),u=[].push,l=function(t){var e=1==t,n=2==t,l=3==t,d=4==t,c=6==t,f=5==t||c;return function(h,g,p,b){for(var m,y,v=i(h),x=r(v),_=a(g,p,3),T=s(x.length),O=0,w=b||o,S=e?w(h,T):n?w(h,0):void 0;T>O;O++)if((f||O in x)&&(y=_(m=x[O],O,v),t))if(e)S[O]=y;else if(y)switch(t){case 3:return!0;case 5:return m;case 6:return O;case 2:u.call(S,m)}else if(d)return!1;return c?-1:l||d?d:S}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},tz6c:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("2Vo4"),r=n("pLZG"),i=n("lJxs"),s=n("SxV6"),o=n("+0ag"),u=n("mSOc"),l=n("8Y7J");let d=(()=>{class t{constructor(t,e){this.summaryservice=t,this.cephReleaseNamePipe=e,this.releaseDataSource=new a.a(null),this.releaseData$=this.releaseDataSource.asObservable(),this.summaryservice.subscribeOnce(t=>{const e=this.cephReleaseNamePipe.transform(t.version);this.releaseDataSource.next(e)})}urlGenerator(t,e){const n=`http://docs.ceph.com/docs/${t}/`;return{iscsi:`${n}mgr/dashboard/#enabling-iscsi-management`,prometheus:`${n}mgr/dashboard/#enabling-prometheus-alerting`,"nfs-ganesha":`${n}mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard`,"rgw-nfs":`${n}radosgw/nfs`,rgw:`${n}mgr/dashboard/#enabling-the-object-gateway-management-frontend`,dashboard:`${n}mgr/dashboard`,grafana:`${n}mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards`,orch:`${n}mgr/orchestrator`,pgs:"http://ceph.com/pgcalc"}[e]}subscribeOnce(t,e,n){return this.releaseData$.pipe(Object(r.a)(t=>!!t),Object(i.a)(e=>this.urlGenerator(e,t)),Object(s.a)()).subscribe(e,n)}}return t.ngInjectableDef=l["ɵɵdefineInjectable"]({factory:function(){return new t(l["ɵɵinject"](u.a),l["ɵɵinject"](o.a))},token:t,providedIn:"root"}),t})()},u3GI:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}t.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},u8Dt:function(t,e,n){var a=n("YESw"),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(a){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return r.call(e,t)?e[t]:void 0}},uEye:function(t,e,n){!function(t){"use strict";t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},uIqm:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("w9WL"),i=n("LvDl"),s=n("PqYM"),o=n("HDdC"),u=n("oxzT"),l=n("x38r");class d{constructor(t){this.errorConfig={resetData:!0,displayError:!0},this.error=t}}var c=n("vCyI");n.d(e,"a",(function(){return f}));class f{constructor(t,e){this.ngZone=t,this.cdRef=e,this.columnMode="flex",this.onlyActionHeader=!1,this.toolHeader=!0,this.searchField=!0,this.header=!0,this.footer=!0,this.limit=10,this.hasDetails=!1,this.autoReload=5e3,this.identifier="id",this.forceIdentifier=!1,this.selectionType=void 0,this.updateSelectionOnRefresh="onChange",this.updateExpandedOnRefresh="onChange",this.autoSave=!0,this.searchableObjects=!1,this.extraFilterableColumns=[],this.fetchData=new a.EventEmitter,this.updateSelection=new a.EventEmitter,this.setExpandedRow=new a.EventEmitter,this.columnFiltersChanged=new a.EventEmitter,this.selection=new c.a,this.expanded=void 0,this.icons=u.a,this.cellTemplates={},this.search="",this.rows=[],this.loadingIndicator=!0,this.loadingError=!1,this.paginationClasses={pagerLeftArrow:u.a.leftArrowDouble,pagerRightArrow:u.a.rightArrowDouble,pagerPrevious:u.a.leftArrow,pagerNext:u.a.rightArrow},this.userConfig={},this.localStorage=window.localStorage,this.updating=!1,this.columnFilters=[]}get columnFiltered(){return i.some(this.columnFilters,t=>void 0!==t.value)}static prepareSearch(t){return(t=t.toLowerCase().replace(/,/g,"")).match(/['"][^'"]+['"]/)&&(t=t.replace(/['"][^'"]+['"]/g,t=>t.replace(/(['"])([^'"]+)(['"])/g,"$2").replace(/ /g,"+"))),t.split(" ").filter(t=>t)}ngOnInit(){if(this.table.element.addEventListener("mouseenter",t=>t.stopPropagation(),!0),this._addTemplates(),!this.sorts){const t=-1!==i.findIndex(this.columns,["prop",this.identifier]);this.sorts=this.createSortingDefinition(t?this.identifier:this.columns[0].prop+""),t||this.forceIdentifier||(this.identifier=this.columns[0].prop+"")}this.initUserConfig(),this.columns.forEach(t=>{t.cellTransformation&&(t.cellTemplate=this.cellTemplates[t.cellTransformation]),t.flexGrow||(t.flexGrow=t.prop+""===this.identifier?1:2),t.resizeable||(t.resizeable=!1)}),this.initExpandCollapseColumn(),this.initCheckboxColumn(),this.filterHiddenColumns(),this.initColumnFilters(),this.updateColumnFilterOptions(),this.fetchData.observers.length>0&&(this.loadingIndicator=!0),i.isInteger(this.autoReload)&&this.autoReload>0?this.ngZone.runOutsideAngular(()=>{this.reloadSubscriber=Object(s.a)(0,this.autoReload).subscribe(()=>{this.ngZone.run(()=>this.reloadData())})}):this.autoReload?this.useData():this.reloadData()}initUserConfig(){this.autoSave&&(this.tableName=this._calculateUniqueTableName(this.columns),this._loadUserConfig(),this._initUserConfigAutoSave()),this.userConfig.limit||(this.userConfig.limit=this.limit),this.userConfig.sorts||(this.userConfig.sorts=this.sorts),this.userConfig.columns?this.columns.forEach((t,e)=>{t.isHidden=this.userConfig.columns[e].isHidden}):this.updateUserColumns()}_calculateUniqueTableName(t){const e=t=>{if(!i.isString(t))return 0;let e=0;for(let n=0;n<t.length;n++)e+=t.charCodeAt(n)*n;return e};return t.reduce((t,n,a)=>(e(n.prop)+e(n.name))*(a+1)+t,0).toString()}_loadUserConfig(){const t=this.localStorage.getItem(this.tableName);t&&(this.userConfig=JSON.parse(t))}_initUserConfigAutoSave(){const t=o.a.create(this._initUserConfigProxy.bind(this));this.saveSubscriber=t.subscribe(this._saveUserConfig.bind(this))}_initUserConfigProxy(t){this.userConfig=new Proxy(this.userConfig,{set:(e,n,a)=>(e[n]=a,t.next(e),!0)})}_saveUserConfig(t){this.localStorage.setItem(this.tableName,JSON.stringify(t))}updateUserColumns(){this.userConfig.columns=this.columns.map(t=>({prop:t.prop,name:t.name,isHidden:!!t.isHidden}))}initCheckboxColumn(){"multiClick"===this.selectionType&&this.columns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,checkboxable:!0,canAutoResize:!1,cellClass:"cd-datatable-checkbox",width:30})}initExpandCollapseColumn(){this.hasDetails&&this.columns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,isHidden:!1,canAutoResize:!1,cellClass:"cd-datatable-expand-collapse",width:40,cellTemplate:this.rowDetailsTpl})}filterHiddenColumns(){this.tableColumns=this.columns.filter(t=>!t.isHidden)}initColumnFilters(){let t=i.filter(this.columns,{filterable:!0});t=[...t,...this.extraFilterableColumns],this.columnFilters=t.map(t=>({column:t,options:[],value:t.filterInitValue?this.createColumnFilterOption(t.filterInitValue,t.pipe):void 0})),this.selectedFilter=i.first(this.columnFilters)}createColumnFilterOption(t,e){return{raw:i.toString(t),formatted:e?e.transform(t):i.toString(t)}}updateColumnFilterOptions(){this.columnFilters.forEach(t=>{let e=[];if(i.isUndefined(t.column.filterOptions)){const n=i.filter(i.map(this.data,t.column.prop),t=>i.isString(t)&&""!==t||i.isBoolean(t)||i.isFinite(t)||i.isDate(t));e=i.sortedUniq(n.sort())}else e=t.column.filterOptions;const n=e.map(e=>this.createColumnFilterOption(e,t.column.pipe));t.value&&i.isUndefined(i.find(n,{raw:t.value.raw}))&&(t.value=void 0),t.options=n})}onSelectFilter(t){this.selectedFilter=t}onChangeFilter(t,e){t.value=i.isEqual(t.value,e)?void 0:e,this.updateFilter()}doColumnFiltering(){const t=[];let e=[...this.data],n=[];return this.columnFilters.forEach(a=>{if(void 0===a.value)return;t.push({name:a.column.name,prop:a.column.prop,value:a.value});const s=i.partition(e,t=>{const e=Object(r.C)(a.column.prop)(t,a.column.prop);return i.isUndefined(a.column.filterPredicate)?`${e}`===a.value.raw:a.column.filterPredicate(t,a.value.raw)});e=s[0],n=[...n,...s[1]]}),this.columnFiltersChanged.emit({filters:t,data:e,dataOut:n}),i.forEach(this.selection.selected,t=>{void 0===i.find(e,{[this.identifier]:t[this.identifier]})&&(this.selection=new c.a,this.onSelect(this.selection))}),e}ngOnDestroy(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe(),this.saveSubscriber&&this.saveSubscriber.unsubscribe()}ngAfterContentChecked(){this.table&&this.table.element.clientWidth!==this.currentWidth&&(this.currentWidth=this.table.element.clientWidth,this.table.recalculate(),i.get(this.table,"cd").markForCheck())}_addTemplates(){this.cellTemplates.bold=this.tableCellBoldTpl,this.cellTemplates.checkIcon=this.checkIconTpl,this.cellTemplates.sparkline=this.sparklineTpl,this.cellTemplates.routerLink=this.routerLinkTpl,this.cellTemplates.perSecond=this.perSecondTpl,this.cellTemplates.executing=this.executingTpl,this.cellTemplates.classAdding=this.classAddingTpl,this.cellTemplates.badge=this.badgeTpl,this.cellTemplates.map=this.mapTpl,this.cellTemplates.truncate=this.truncateTpl}useCustomClass(t){if(!this.customCss)throw new Error("Custom classes are not set!");const e=Object.keys(this.customCss),n=Object.values(this.customCss).map((n,a)=>(i.isFunction(n)&&n(t)||n===t)&&e[a]).filter(t=>t).join(" ");return i.isEmpty(n)?void 0:n}ngOnChanges(){this.useData()}setLimit(t){const e=parseInt(t.target.value,10);e>0&&(this.userConfig.limit=e)}reloadData(){if(!this.updating){this.loadingError=!1;const t=new d(()=>{this.loadingError=t.errorConfig.displayError,t.errorConfig.resetData&&(this.data=[]),this.useData()});this.fetchData.emit(t),this.updating=!0}}refreshBtn(){this.loadingIndicator=!0,this.reloadData()}rowIdentity(){return t=>{const e=t[this.identifier];if(i.isUndefined(e))throw new Error(`Wrong identifier "${this.identifier}" -> "${e}"`);return e}}useData(){this.data&&(this.updateColumnFilterOptions(),this.updateFilter(),this.reset(),this.updateSelected(),this.updateExpanded())}reset(){this.loadingIndicator=!1,this.updating=!1}updateSelected(){if("never"===this.updateSelectionOnRefresh)return;const t=[];this.selection.selected.forEach(e=>{for(const n of this.data)e[this.identifier]===n[this.identifier]&&t.push(n)}),"onChange"===this.updateSelectionOnRefresh&&i.isEqual(this.selection.selected,t)||(this.selection.selected=t,this.onSelect(this.selection))}updateExpanded(){if(i.isUndefined(this.expanded)||"never"===this.updateExpandedOnRefresh)return;const t=this.expanded[this.identifier],e=i.find(this.data,e=>t===e[this.identifier]);"onChange"===this.updateExpandedOnRefresh&&i.isEqual(this.expanded,e)||(this.expanded=e,this.setExpandedRow.emit(e))}onSelect(t){this.selection.selected=t.selected,this.updateSelection.emit(i.clone(this.selection))}toggleColumn(t){const e=t.target.name,n=!t.target.checked;n&&1===this.tableColumns.length?t.target.checked=!0:(i.find(this.columns,t=>t.prop===e).isHidden=n,this.updateColumns())}updateColumns(){this.updateUserColumns(),this.filterHiddenColumns();const t=this.userConfig.sorts[0].prop;i.find(this.tableColumns,e=>e.prop===t)||(this.userConfig.sorts=this.createSortingDefinition(this.tableColumns[0].prop)),this.table.recalculate(),this.cdRef.detectChanges()}createSortingDefinition(t){return[{prop:t,dir:r.A.asc}]}changeSorting({sorts:t}){this.userConfig.sorts=t}onClearSearch(){this.search="",this.updateFilter()}onClearFilters(){this.columnFilters.forEach(t=>{t.value=void 0}),this.selectedFilter=i.first(this.columnFilters),this.updateFilter()}updateFilter(){let t=0!==this.columnFilters.length?this.doColumnFiltering():this.data;if(this.search.length>0&&t){const e=this.columns.filter(t=>t.cellTransformation!==l.a.sparkline);t=this.subSearch(t,f.prepareSearch(this.search),e),this.table.offset=0}this.rows=t}subSearch(t,e,n){if(0===e.length||0===t.length)return t;const a=e.pop().replace(/\+/g," ").split(":"),r=[...n];return 2===a.length&&(n=r.filter(t=>-1!==t.name.toLowerCase().indexOf(a[0]))),t=this.basicDataSearch(i.last(a),t,n),this.subSearch(t,e,r)}basicDataSearch(t,e,n){return 0===t.length?e:e.filter(e=>n.filter(n=>{let a=i.get(e,n.prop);if(i.isUndefined(n.pipe)||(a=n.pipe.transform(a)),i.isUndefined(a)||i.isNull(a))return!1;if(i.isArray(a)?a=a.join(" "):(i.isNumber(a)||i.isBoolean(a))&&(a=a.toString()),i.isObjectLike(a)){if(!this.searchableObjects)return!1;a=JSON.stringify(a)}return-1!==a.toLowerCase().indexOf(t)}).length>0)}getRowClass(){return()=>({clickable:!i.isUndefined(this.selectionType)})}toggleExpandRow(t,e){e?(this.expanded=void 0,this.setExpandedRow.emit(void 0)):(this.expanded=t,this.table.rowDetail.collapseAllRows(),this.setExpandedRow.emit(t)),this.table.rowDetail.toggleExpandRow(t)}}},uNpg:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Component)({selector:"tree-node-checkbox",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <ng-container *treeMobxAutorun="{ dontDetach: true }">\n      <input\n        class="tree-node-checkbox"\n        type="checkbox"\n        (click)="node.mouseAction(\'checkboxClick\', $event)"\n        [checked]="node.isSelected"\n        [indeterminate]="node.isPartiallySelected"\n      />\n    </ng-container>\n  '})],t)}()},uXwI:function(t,e,n){!function(t){"use strict";var e={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function a(t,a,r){return t+" "+n(e[r],t,a)}function r(t,a,r){return n(e[r],t,a)}t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(t,e){return e?"dažas sekundes":"dažām sekundēm"},ss:a,m:r,mm:a,h:r,hh:a,d:r,dd:a,M:r,MM:a,y:r,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},uYzU:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(){}transform(t){switch(t){case"user:rbd":return"user:rbd (tcmu-runner)";default:return t}}}},ufoC:function(t,e,n){"use strict";var a=function(t){return t.auth="Login",t.cephfs="CephFS",t.rbd="RBD",t.pool="Pool",t.osd="OSD",t.role="Role",t.user="User",t}({}),r=n("jVDg"),i=n("8Y7J"),s=n("GiVz");n.d(e,"a",(function(){return l}));class o{constructor(t,e,n){this.running=t,this.failure=e,this.success=n}}class u{failure(t){return this.i18n("Failed to {{failure}} {{metadata}}",{failure:this.operation.failure,metadata:this.involves(t)})}running(t){return`${this.operation.running} ${this.involves(t)}`}success(t){return`${this.operation.success} ${this.involves(t)}`}constructor(t,e,n,a){this.i18n=t,this.operation=e,this.involves=n,this.errors=a||(()=>({}))}}let l=(()=>{class t{constructor(t){this.i18n=t,this.defaultMessage=this.newTaskMessage(new o(this.i18n("Executing"),this.i18n("execute"),this.i18n("Executed")),t=>t&&(a[t.component]||t.component)||this.i18n("unknown task"),()=>({})),this.commonOperations={create:new o(this.i18n("Creating"),this.i18n("create"),this.i18n("Created")),update:new o(this.i18n("Updating"),this.i18n("update"),this.i18n("Updated")),delete:new o(this.i18n("Deleting"),this.i18n("delete"),this.i18n("Deleted")),add:new o(this.i18n("Adding"),this.i18n("add"),this.i18n("Added")),remove:new o(this.i18n("Removing"),this.i18n("remove"),this.i18n("Removed")),import:new o(this.i18n("Importing"),this.i18n("import"),this.i18n("Imported"))},this.rbd={default:t=>this.i18n("RBD '{{id}}'",{id:`${t.image_spec}`}),create:t=>{const e=new r.a(t.pool_name,t.namespace,t.image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},child:t=>{const e=new r.a(t.child_pool_name,t.child_namespace,t.child_image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},destination:t=>{const e=new r.a(t.dest_pool_name,t.dest_namespace,t.dest_image_name).toString();return this.i18n("RBD '{{id}}'",{id:e})},snapshot:t=>this.i18n("RBD snapshot '{{id}}'",{id:`${t.image_spec}@${t.snapshot_name}`})},this.rbd_mirroring={site_name:()=>this.i18n("mirroring site name"),bootstrap:()=>this.i18n("bootstrap token"),pool:t=>this.i18n("mirror mode for pool '{{id}}'",{id:`${t.pool_name}`}),pool_peer:t=>this.i18n("mirror peer for pool '{{id}}'",{id:`${t.pool_name}`})},this.grafana={update_dashboards:()=>this.i18n("all dashboards")},this.messages={"host/create":this.newTaskMessage(this.commonOperations.create,t=>this.host(t)),"host/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.host(t)),"osd/create":this.newTaskMessage(this.commonOperations.create,t=>this.i18n("OSDs (DriveGroups: {{tracking_id}})",{tracking_id:t.tracking_id})),"osd/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.osd(t)),"pool/create":this.newTaskMessage(this.commonOperations.create,t=>this.pool(t),t=>({17:this.i18n("Name is already used by {{pool_name}}.",{pool_name:this.pool(t)})})),"pool/edit":this.newTaskMessage(this.commonOperations.update,t=>this.pool(t),t=>({17:this.i18n("Name is already used by {{pool_name}}.",{pool_name:this.pool(t)})})),"pool/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.pool(t)),"ecp/create":this.newTaskMessage(this.commonOperations.create,t=>this.ecp(t),t=>({17:this.i18n("Name is already used by {{name}}.",{name:this.ecp(t)})})),"ecp/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.ecp(t)),"crushRule/create":this.newTaskMessage(this.commonOperations.create,t=>this.crushRule(t),t=>({17:this.i18n("Name is already used by {{name}}.",{name:this.crushRule(t)})})),"crushRule/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.crushRule(t)),"rbd/create":this.newTaskMessage(this.commonOperations.create,this.rbd.create,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.create(t)})})),"rbd/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.default,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.default(t)})})),"rbd/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.default,t=>({16:this.i18n("{{rbd_name}} is busy.",{rbd_name:this.rbd.default(t)}),39:this.i18n("{{rbd_name}} contains snapshots.",{rbd_name:this.rbd.default(t)})})),"rbd/clone":this.newTaskMessage(new o(this.i18n("Cloning"),this.i18n("clone"),this.i18n("Cloned")),this.rbd.child,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.child(t)}),22:this.i18n("Snapshot of {{rbd_name}} must be protected.",{rbd_name:this.rbd.child(t)})})),"rbd/copy":this.newTaskMessage(new o(this.i18n("Copying"),this.i18n("copy"),this.i18n("Copied")),this.rbd.destination,t=>({17:this.i18n("Name is already used by {{rbd_name}}.",{rbd_name:this.rbd.destination(t)})})),"rbd/flatten":this.newTaskMessage(new o(this.i18n("Flattening"),this.i18n("flatten"),this.i18n("Flattened")),this.rbd.default),"rbd/snap/create":this.newTaskMessage(this.commonOperations.create,this.rbd.snapshot,t=>({17:this.i18n("Name is already used by {{snap_name}}.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.snapshot,t=>({16:this.i18n("Cannot unprotect {{snap_name}} because it contains child images.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.snapshot,t=>({16:this.i18n("Cannot delete {{snap_name}} because it's protected.",{snap_name:this.rbd.snapshot(t)})})),"rbd/snap/rollback":this.newTaskMessage(new o(this.i18n("Rolling back"),this.i18n("rollback"),this.i18n("Rolled back")),this.rbd.snapshot),"rbd/trash/move":this.newTaskMessage(new o(this.i18n("Moving"),this.i18n("move"),this.i18n("Moved")),t=>this.i18n("image '{{id}}' to trash",{id:t.image_spec}),()=>({2:this.i18n("Could not find image.")})),"rbd/trash/restore":this.newTaskMessage(new o(this.i18n("Restoring"),this.i18n("restore"),this.i18n("Restored")),t=>this.i18n("image '{{id}}' into '{{new_id}}'",{id:t.image_id_spec,new_id:t.new_image_name}),t=>({17:this.i18n("Image name '{{id}}' is already in use.",{id:t.new_image_name})})),"rbd/trash/remove":this.newTaskMessage(new o(this.i18n("Deleting"),this.i18n("delete"),this.i18n("Deleted")),t=>this.i18n("image '{{id}}'",{id:`${t.image_id_spec}`})),"rbd/trash/purge":this.newTaskMessage(new o(this.i18n("Purging"),this.i18n("purge"),this.i18n("Purged")),t=>{let e=this.i18n("all pools");return t.pool_name&&(e=`'${t.pool_name}'`),this.i18n("images from {{message}}",{message:e})}),"rbd/mirroring/site_name/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.site_name,()=>({})),"rbd/mirroring/bootstrap/create":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/bootstrap/import":this.newTaskMessage(this.commonOperations.import,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/pool/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool,()=>({16:this.i18n("Cannot disable mirroring because it contains a peer.")})),"rbd/mirroring/peer/add":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd_mirroring.pool_peer,()=>({})),"iscsi/target/create":this.newTaskMessage(this.commonOperations.create,t=>this.iscsiTarget(t)),"iscsi/target/edit":this.newTaskMessage(this.commonOperations.update,t=>this.iscsiTarget(t)),"iscsi/target/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.iscsiTarget(t)),"nfs/create":this.newTaskMessage(this.commonOperations.create,t=>this.nfs(t)),"nfs/edit":this.newTaskMessage(this.commonOperations.update,t=>this.nfs(t)),"nfs/delete":this.newTaskMessage(this.commonOperations.delete,t=>this.nfs(t)),"grafana/dashboards/update":this.newTaskMessage(this.commonOperations.update,this.grafana.update_dashboards,()=>({})),"orchestrator/identify_device":this.newTaskMessage(new o(this.i18n("Identifying"),this.i18n("identify"),this.i18n("Identified")),t=>this.i18n("device '{{device}}' on host '{{hostname}}'",t))}}newTaskMessage(t,e,n){return new u(this.i18n,t,e,n)}host(t){return this.i18n("host '{{hostname}}'",{hostname:t.hostname})}osd(t){return this.i18n("OSD '{{svc_id}}'",{svc_id:t.svc_id})}pool(t){return this.i18n("pool '{{pool_name}}'",{pool_name:t.pool_name})}ecp(t){return this.i18n("erasure code profile '{{name}}'",{name:t.name})}crushRule(t){return this.i18n("crush rule '{{name}}'",{name:t.name})}iscsiTarget(t){return this.i18n("target '{{target_iqn}}'",{target_iqn:t.target_iqn})}nfs(t){return this.i18n("NFS {{nfs_id}}",{nfs_id:`'${t.cluster_id}:${t.export_id?t.export_id:t.path}'`})}_getTaskTitle(t){return t.name&&t.name.startsWith("progress/")?this.newTaskMessage(new o(t.name.replace("progress/",""),"",t.name.replace("progress/","")),t=>""):this.messages[t.name]||this.defaultMessage}getSuccessTitle(t){return this._getTaskTitle(t).success(t.metadata)}getErrorMessage(t){return this._getTaskTitle(t).errors(t.metadata)[t.exception.code]||t.exception.detail}getErrorTitle(t){return this._getTaskTitle(t).failure(t.metadata)}getRunningTitle(t){return this._getTaskTitle(t).running(t.metadata)}getRunningText(t){return this._getTaskTitle(t).operation.running}}return t.ngInjectableDef=i["ɵɵdefineInjectable"]({factory:function(){return new t(i["ɵɵinject"](s.a))},token:t,providedIn:"root"}),t})()},"ut/Y":function(t,e,n){var a=n("ZCpW"),r=n("GDhZ"),i=n("zZ0H"),s=n("Z0cm"),o=n("+c4W");t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?s(t)?r(t[0],t[1]):a(t):o(t)}},uy83:function(t,e,n){var a=n("0Dky");t.exports=!a((function(){return Object.isExtensible(Object.preventExtensions({}))}))},uyHG:function(t,e){var n,a=/^\[object .+?Constructor\]$/,r="object"==typeof global&&global&&global.Object===Object&&global,i="object"==typeof self&&self&&self.Object===Object&&self,s=r||i||Function("return this")(),o=Array.prototype,u=Function.prototype,l=Object.prototype,d=s["__core-js_shared__"],c=(n=/[^.]+$/.exec(d&&d.keys&&d.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",f=u.toString,h=l.hasOwnProperty,g=l.toString,p=RegExp("^"+f.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=o.splice,m=w(s,"Map"),y=w(Object,"create");function v(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function x(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function _(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var a=t[e];this.set(a[0],a[1])}}function T(t,e){for(var n,a,r=t.length;r--;)if((n=t[r][0])===(a=e)||n!=n&&a!=a)return r;return-1}function O(t,e){var n,a,r=t.__data__;return("string"==(a=typeof(n=e))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==n:null===n)?r["string"==typeof e?"string":"hash"]:r.map}function w(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!I(t)||(e=t,c&&c in e))&&(function(t){var e=I(t)?g.call(t):"";return"[object Function]"==e||"[object GeneratorFunction]"==e}(t)||function(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(n){}return e}(t)?p:a).test(function(t){if(null!=t){try{return f.call(t)}catch(e){}try{return t+""}catch(e){}}return""}(t));var e}(n)?n:void 0}function S(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var a=arguments,r=e?e.apply(this,a):a[0],i=n.cache;if(i.has(r))return i.get(r);var s=t.apply(this,a);return n.cache=i.set(r,s),s};return n.cache=new(S.Cache||_),n}function I(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}v.prototype.clear=function(){this.__data__=y?y(null):{}},v.prototype.delete=function(t){return this.has(t)&&delete this.__data__[t]},v.prototype.get=function(t){var e=this.__data__;if(y){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return h.call(e,t)?e[t]:void 0},v.prototype.has=function(t){var e=this.__data__;return y?void 0!==e[t]:h.call(e,t)},v.prototype.set=function(t,e){return this.__data__[t]=y&&void 0===e?"__lodash_hash_undefined__":e,this},x.prototype.clear=function(){this.__data__=[]},x.prototype.delete=function(t){var e=this.__data__,n=T(e,t);return!(n<0||(n==e.length-1?e.pop():b.call(e,n,1),0))},x.prototype.get=function(t){var e=this.__data__,n=T(e,t);return n<0?void 0:e[n][1]},x.prototype.has=function(t){return T(this.__data__,t)>-1},x.prototype.set=function(t,e){var n=this.__data__,a=T(n,t);return a<0?n.push([t,e]):n[a][1]=e,this},_.prototype.clear=function(){this.__data__={hash:new v,map:new(m||x),string:new v}},_.prototype.delete=function(t){return O(this,t).delete(t)},_.prototype.get=function(t){return O(this,t).get(t)},_.prototype.has=function(t){return O(this,t).has(t)},_.prototype.set=function(t,e){return O(this,t).set(t,e),this},S.Cache=_,t.exports=S},vCyI:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{constructor(t){this._selected=[],t&&(this._selected=t),this.update()}update(){this.hasSelection=this._selected.length>0,this.hasSingleSelection=1===this._selected.length,this.hasMultiSelection=this._selected.length>1}set selected(t){this._selected=t,this.update()}get selected(){return this._selected}add(t){this._selected.push(t),this.update()}first(){return this.hasSelection?this._selected[0]:null}}},vkgz:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("7o/Q"),r=n("KqfI"),i=n("n6bG");function s(t,e,n){return function(a){return a.lift(new o(t,e,n))}}class o{constructor(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}call(t,e){return e.subscribe(new u(t,this.nextOrObserver,this.error,this.complete))}}class u extends a.a{constructor(t,e,n,a){super(t),this._tapNext=r.a,this._tapError=r.a,this._tapComplete=r.a,this._tapError=n||r.a,this._tapComplete=a||r.a,Object(i.a)(e)?(this._context=this,this._tapNext=e):e&&(this._context=e,this._tapNext=e.next||r.a,this._tapError=e.error||r.a,this._tapComplete=e.complete||r.a)}_next(t){try{this._tapNext.call(this._context,t)}catch(e){return void this.destination.error(e)}this.destination.next(t)}_error(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)}_complete(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()}}},"w/wX":function(t,e,n){var a=n("QqLw"),r=n("ExA7");t.exports=function(t){return r(t)&&"[object Set]"==a(t)}},w9WL:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("XNiG"),i=n("xgIS"),s=n("2Vo4"),o=n("l7GE"),u=n("ZUHj");function l(t){return e=>e.lift(new d(t))}class d{constructor(t){this.notifier=t}call(t,e){const n=new c(t),a=Object(u.a)(n,this.notifier);return a&&!n.seenValue?(n.add(a),e.subscribe(n)):n}}class c extends o.a{constructor(t){super(t),this.seenValue=!1}notifyNext(t,e,n,a,r){this.seenValue=!0,this.complete()}notifyComplete(){}}var f=n("mrSG");n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return pt})),n.d(e,"c",(function(){return tt})),n.d(e,"d",(function(){return ht})),n.d(e,"e",(function(){return D})),n.d(e,"f",(function(){return lt})),n.d(e,"g",(function(){return b})),n.d(e,"h",(function(){return ut})),n.d(e,"i",(function(){return et})),n.d(e,"j",(function(){return dt})),n.d(e,"k",(function(){return gt})),n.d(e,"l",(function(){return mt})),n.d(e,"m",(function(){return xt})),n.d(e,"n",(function(){return ot})),n.d(e,"o",(function(){return q})),n.d(e,"p",(function(){return M})),n.d(e,"q",(function(){return P})),n.d(e,"r",(function(){return g})),n.d(e,"s",(function(){return y})),n.d(e,"t",(function(){return _})),n.d(e,"u",(function(){return _t})),n.d(e,"v",(function(){return x})),n.d(e,"w",(function(){return ct})),n.d(e,"x",(function(){return v})),n.d(e,"y",(function(){return h})),n.d(e,"z",(function(){return T})),n.d(e,"A",(function(){return it})),n.d(e,"B",(function(){return m})),n.d(e,"C",(function(){return w}));class h{constructor(t){this.document=t,this.width=this.getWidth()}getWidth(){const t=this.document.createElement("div");t.style.visibility="hidden",t.style.width="100px",t.style.msOverflowStyle="scrollbar",this.document.body.appendChild(t);const e=t.offsetWidth;t.style.overflow="scroll";const n=this.document.createElement("div");n.style.width="100%",t.appendChild(n);const a=n.offsetWidth;return t.parentNode.removeChild(t),e-a}}class g{getDimensions(t){return t.getBoundingClientRect()}}class p{constructor(){this.columnInputChanges=new r.a}get columnInputChanges$(){return this.columnInputChanges.asObservable()}onInputChange(){this.columnInputChanges.next()}}class b{constructor(t){this.template=t}}class m{constructor(t,e){this.element=t,this.zone=e,this.isVisible=!1,this.visible=new a.EventEmitter}ngOnInit(){this.runCheck()}ngOnDestroy(){clearTimeout(this.timeout)}onVisibilityChange(){this.zone.run(()=>{this.isVisible=!0,this.visible.emit(!0)})}runCheck(){const t=()=>{const{offsetHeight:e,offsetWidth:n}=this.element.nativeElement;e&&n?(clearTimeout(this.timeout),this.onVisibilityChange()):(clearTimeout(this.timeout),this.zone.runOutsideAngular(()=>{this.timeout=setTimeout(()=>t(),50)}))};this.timeout=setTimeout(()=>t())}}class y{constructor(t){this.dragX=!0,this.dragY=!0,this.dragStart=new a.EventEmitter,this.dragging=new a.EventEmitter,this.dragEnd=new a.EventEmitter,this.isDragging=!1,this.element=t.nativeElement}ngOnChanges(t){t.dragEventTarget&&t.dragEventTarget.currentValue&&this.dragModel.dragging&&this.onMousedown(t.dragEventTarget.currentValue)}ngOnDestroy(){this._destroySubscription()}onMouseup(t){this.isDragging&&(this.isDragging=!1,this.element.classList.remove("dragging"),this.subscription&&(this._destroySubscription(),this.dragEnd.emit({event:t,element:this.element,model:this.dragModel})))}onMousedown(t){if(t.target.classList.contains("draggable")&&(this.dragX||this.dragY)){t.preventDefault(),this.isDragging=!0;const e={x:t.clientX,y:t.clientY},n=Object(i.a)(document,"mouseup");this.subscription=n.subscribe(t=>this.onMouseup(t));const a=Object(i.a)(document,"mousemove").pipe(l(n)).subscribe(t=>this.move(t,e));this.subscription.add(a),this.dragStart.emit({event:t,element:this.element,model:this.dragModel})}}move(t,e){if(!this.isDragging)return;const n=t.clientY-e.y;this.dragX&&(this.element.style.left=`${t.clientX-e.x}px`),this.dragY&&(this.element.style.top=`${n}px`),this.element.classList.add("dragging"),this.dragging.emit({event:t,element:this.element,model:this.dragModel})}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}"undefined"!=typeof window&&window||global,"undefined"!=typeof window&&window||global,"undefined"!=typeof window&&window||global;class v{constructor(t,e){this.renderer=e,this.resizeEnabled=!0,this.resize=new a.EventEmitter,this.resizing=!1,this.element=t.nativeElement}ngAfterViewInit(){const t=this.renderer;this.resizeHandle=t.createElement("span"),t.addClass(this.resizeHandle,this.resizeEnabled?"resize-handle":"resize-handle--not-resizable"),t.appendChild(this.element,this.resizeHandle)}ngOnDestroy(){this._destroySubscription(),this.renderer.destroyNode?this.renderer.destroyNode(this.resizeHandle):this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle),this.resizeHandle)}onMouseup(){this.resizing=!1,this.subscription&&!this.subscription.closed&&(this._destroySubscription(),this.resize.emit(this.element.clientWidth))}onMousedown(t){const e=t.target.classList.contains("resize-handle"),n=this.element.clientWidth,a=t.screenX;if(e){t.stopPropagation(),this.resizing=!0;const e=Object(i.a)(document,"mouseup");this.subscription=e.subscribe(t=>this.onMouseup());const r=Object(i.a)(document,"mousemove").pipe(l(e)).subscribe(t=>this.move(t,n,a));this.subscription.add(r)}}move(t,e,n){const a=e+(t.screenX-n);(!this.minWidth||a>=this.minWidth)&&(!this.maxWidth||a<=this.maxWidth)&&(this.element.style.width=`${a}px`)}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}class x{constructor(t,e){this.document=e,this.reorder=new a.EventEmitter,this.targetChanged=new a.EventEmitter,this.differ=t.find({}).create()}ngAfterContentInit(){this.updateSubscriptions(),this.draggables.changes.subscribe(this.updateSubscriptions.bind(this))}ngOnDestroy(){this.draggables.forEach(t=>{t.dragStart.unsubscribe(),t.dragging.unsubscribe(),t.dragEnd.unsubscribe()})}updateSubscriptions(){const t=this.differ.diff(this.createMapDiffs());if(t){const e=({currentValue:t,previousValue:e})=>{n({previousValue:e}),t&&(t.dragStart.subscribe(this.onDragStart.bind(this)),t.dragging.subscribe(this.onDragging.bind(this)),t.dragEnd.subscribe(this.onDragEnd.bind(this)))},n=({previousValue:t})=>{t&&(t.dragStart.unsubscribe(),t.dragging.unsubscribe(),t.dragEnd.unsubscribe())};t.forEachAddedItem(e),t.forEachRemovedItem(n)}}onDragStart(){this.positions={};let t=0;for(const e of this.draggables.toArray()){const n=e.element,a=parseInt(n.offsetLeft.toString(),0);this.positions[e.dragModel.prop]={left:a,right:a+parseInt(n.offsetWidth.toString(),0),index:t++,element:n}}}onDragging({model:t,event:e}){const n=this.positions[t.prop],a=this.isTarget(t,e);a?this.lastDraggingIndex!==a.i&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,newIndex:a.i,initialIndex:n.index}),this.lastDraggingIndex=a.i):this.lastDraggingIndex!==n.index&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,initialIndex:n.index}),this.lastDraggingIndex=n.index)}onDragEnd({element:t,model:e,event:n}){const a=this.positions[e.prop],r=this.isTarget(e,n);r&&this.reorder.emit({prevIndex:a.index,newIndex:r.i,model:e}),this.lastDraggingIndex=void 0,t.style.left="auto"}isTarget(t,e){let n=0;const a=this.document.elementsFromPoint(e.x||e.clientX,e.y||e.clientY);for(const r in this.positions){const e=this.positions[r];if(t.prop!==r&&a.find(t=>t===e.element))return{pos:e,i:n};n++}}createMapDiffs(){return this.draggables.toArray().reduce((t,e)=>(t[e.dragModel.$$id]=e,t),{})}}class _{constructor(){this.pressEnabled=!0,this.duration=500,this.longPressStart=new a.EventEmitter,this.longPressing=new a.EventEmitter,this.longPressEnd=new a.EventEmitter,this.mouseX=0,this.mouseY=0}get press(){return this.pressing}get isLongPress(){return this.isLongPressing}onMouseDown(t){if(1!==t.which||!this.pressEnabled)return;if(t.target.classList.contains("resize-handle"))return;this.mouseX=t.clientX,this.mouseY=t.clientY,this.pressing=!0,this.isLongPressing=!1;const e=Object(i.a)(document,"mouseup");this.subscription=e.subscribe(t=>this.onMouseup()),this.timeout=setTimeout(()=>{this.isLongPressing=!0,this.longPressStart.emit({event:t,model:this.pressModel}),this.subscription.add(Object(i.a)(document,"mousemove").pipe(l(e)).subscribe(t=>this.onMouseMove(t))),this.loop(t)},this.duration),this.loop(t)}onMouseMove(t){if(this.pressing&&!this.isLongPressing){const e=Math.abs(t.clientX-this.mouseX)>10,n=Math.abs(t.clientY-this.mouseY)>10;(e||n)&&this.endPress()}}loop(t){this.isLongPressing&&(this.timeout=setTimeout(()=>{this.longPressing.emit({event:t,model:this.pressModel}),this.loop(t)},50))}endPress(){clearTimeout(this.timeout),this.isLongPressing=!1,this.pressing=!1,this._destroySubscription(),this.longPressEnd.emit({model:this.pressModel})}onMouseup(){this.endPress()}ngOnDestroy(){this._destroySubscription()}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}class T{constructor(t,e,n){this.ngZone=t,this.renderer=n,this.scrollbarV=!1,this.scrollbarH=!1,this.scroll=new a.EventEmitter,this.scrollYPos=0,this.scrollXPos=0,this.prevScrollYPos=0,this.prevScrollXPos=0,this._scrollEventListener=null,this.element=e.nativeElement}ngOnInit(){if(this.scrollbarV||this.scrollbarH){const t=this.renderer;this.parentElement=t.parentNode(t.parentNode(this.element)),this._scrollEventListener=this.onScrolled.bind(this),this.parentElement.addEventListener("scroll",this._scrollEventListener)}}ngOnDestroy(){this._scrollEventListener&&(this.parentElement.removeEventListener("scroll",this._scrollEventListener),this._scrollEventListener=null)}setOffset(t){this.parentElement&&(this.parentElement.scrollTop=t)}onScrolled(t){const e=t.currentTarget;requestAnimationFrame(()=>{this.scrollYPos=e.scrollTop,this.scrollXPos=e.scrollLeft,this.updateOffset()})}updateOffset(){let t;this.scrollYPos<this.prevScrollYPos?t="down":this.scrollYPos>this.prevScrollYPos&&(t="up"),this.scroll.emit({direction:t,scrollYPos:this.scrollYPos,scrollXPos:this.scrollXPos}),this.prevScrollYPos=this.scrollYPos,this.prevScrollXPos=this.scrollXPos}}function O(){return""}function w(t){return null==t?O:"number"==typeof t?S:-1!==t.indexOf(".")?N:I}function S(t,e){if(null==t)return"";if(!t||null==e)return t;const n=t[e];return null==n?"":n}function I(t,e){if(null==t)return"";if(!t||!e)return t;const n=t[e];return null==n?"":n}function N(t,e){if(null==t)return"";if(!t||!e)return t;let n=t[e];if(void 0!==n)return n;n=t;const a=e.split(".");if(a.length)for(let r=0;r<a.length;r++)if(n=n[a[r]],null==n)return"";return n}function C(t){return t&&(e=>w(t)(e,t))}function R(t,e,n){if(e&&n){const a={},r=t.length;let i=null;a[0]=new A;const s=t.reduce((t,e)=>{const a=n(e);return-1===t.indexOf(a)&&t.push(a),t},[]);for(let e=0;e<r;e++)a[n(t[e])]=new A(t[e]);for(let u=0;u<r;u++){i=a[n(t[u])];let r=0;const o=e(i.row);o&&s.indexOf(o)>-1&&(r=o),i.parent=a[r],i.row.level=i.parent.row.level+1,i.parent.children.push(i)}let o=[];return a[0].flatten((function(){o=[...o,this.row]}),!0),o}return t}class A{constructor(t=null){t||(t={level:-1,treeStatus:"expanded"}),this.row=t,this.parent=null,this.children=[]}flatten(t,e){if("expanded"===this.row.treeStatus)for(let n=0,a=this.children.length;n<a;n++){const a=this.children[n];t.apply(a,Array.prototype.slice.call(arguments,2)),e&&a.flatten.apply(a,arguments)}}}function k(t){return(t=(t=(t=t.replace(/[^a-zA-Z0-9 ]/g," ")).replace(/([a-z](?=[A-Z]))/g,"$1 ")).replace(/([^a-zA-Z0-9 ])|^[0-9]+/g,"").trim().toLowerCase()).replace(/([ 0-9]+)([a-zA-Z])/g,(function(t,e,n){return e.trim()+n.toUpperCase()}))}function E(t){if(!t)return;let e=!1;for(const n of t)n.$$id||(n.$$id=("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)),L(n.prop)&&n.name&&(n.prop=k(n.name)),n.$$valueGetter||(n.$$valueGetter=w(n.prop)),!L(n.prop)&&L(n.name)&&(n.name=String(n.prop).replace(/([A-Z])/g,t=>` ${t}`).replace(/^./,t=>t.toUpperCase())),L(n.prop)&&L(n.name)&&(n.name=""),n.hasOwnProperty("resizeable")||(n.resizeable=!0),n.hasOwnProperty("sortable")||(n.sortable=!0),n.hasOwnProperty("draggable")||(n.draggable=!0),n.hasOwnProperty("canAutoResize")||(n.canAutoResize=!0),n.hasOwnProperty("width")||(n.width=150),n.hasOwnProperty("isTreeColumn")&&n.isTreeColumn&&!e?e=!0:n.isTreeColumn=!1}function L(t){return null==t}class D{constructor(t){this.template=t}}class P{constructor(t){this.template=t}}class M{constructor(){this.rowHeight=0,this.toggle=new a.EventEmitter}get template(){return this._templateInput||this._templateQuery}toggleExpandRow(t){this.toggle.emit({type:"row",value:t})}expandAllRows(){this.toggle.emit({type:"all",value:!0})}collapseAllRows(){this.toggle.emit({type:"all",value:!1})}}class q{get template(){return this._templateInput||this._templateQuery}}function j(t){const e={left:[],center:[],right:[]};if(t)for(const n of t)n.frozenLeft?e.left.push(n):n.frozenRight?e.right.push(n):e.center.push(n);return e}function F(t,e){return{left:G(t.left),center:G(t.center),right:G(t.right),total:Math.floor(G(e))}}function G(t,e){let n=0;if(t)for(const a of t)n+=parseFloat(e&&a[e]?a[e]:a.width);return n}function V(t){const e=[],n=j(t);return e.push({type:"left",columns:n.left}),e.push({type:"center",columns:n.center}),e.push({type:"right",columns:n.right}),e}class z{constructor(){this.treeArray=[]}clearCache(){this.treeArray=[]}initCache(t){const{rows:e,rowHeight:n,detailRowHeight:a,externalVirtual:r,rowCount:i,rowIndexes:s,rowExpansions:o}=t,u="function"==typeof n,l="function"==typeof a;if(!u&&isNaN(n))throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n        valid number or function value: (${n}) when 'scrollbarV' is enabled.`);if(!l&&isNaN(a))throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n        valid number or function value: (${a}) when 'scrollbarV' is enabled.`);const d=r?i:e.length;this.treeArray=new Array(d);for(let c=0;c<d;++c)this.treeArray[c]=0;for(let c=0;c<d;++c){const t=e[c];let r=n;u&&(r=n(t));const i=o.has(t);t&&i&&(r+=l?a(t,s.get(t)):a),this.update(c,r)}}getRowIndex(t){return 0===t?0:this.calcRowIndex(t)}update(t,e){if(!this.treeArray.length)throw new Error(`Update at index ${t} with value ${e} failed:\n        Row Height cache not initialized.`);const n=this.treeArray.length;for(t|=0;t<n;)this.treeArray[t]+=e,t|=t+1}query(t){if(!this.treeArray.length)throw new Error(`query at index ${t} failed: Fenwick tree array not initialized.`);let e=0;for(t|=0;t>=0;)e+=this.treeArray[t],t=(t&t+1)-1;return e}queryBetween(t,e){return this.query(e)-this.query(t-1)}calcRowIndex(t){if(!this.treeArray.length)return 0;let e=-1;const n=this.treeArray.length;for(let a=Math.pow(2,n.toString(2).length-1);0!==a;a>>=1){const r=e+a;r<n&&t>=this.treeArray[r]&&(t-=this.treeArray[r],e=r)}return e+1}}const B={},Y="undefined"!=typeof document?document.createElement("div").style:void 0,H=function(){const t="undefined"!=typeof window?window.getComputedStyle(document.documentElement,""):void 0,e=void 0!==t?Array.prototype.slice.call(t).join("").match(/-(moz|webkit|ms)-/):null,n=null!==e?e[1]:void 0,a=void 0!==n?"WebKit|Moz|MS|O".match(new RegExp("("+n+")","i"))[1]:void 0;return a?{dom:a,lowercase:n,css:`-${n}-`,js:n[0].toUpperCase()+n.substr(1)}:void 0}();function U(t){const e=k(t);return B[e]||(void 0!==H&&void 0!==Y[H.css+t]?B[e]=H.css+t:void 0!==Y[t]&&(B[e]=t)),B[e]}const W="undefined"!=typeof window?U("transform"):void 0,K="undefined"!=typeof window?U("backfaceVisibility"):void 0,$="undefined"!=typeof window?!!U("transform"):void 0,Z="undefined"!=typeof window?!!U("perspective"):void 0,J="undefined"!=typeof window?window.navigator.userAgent:"Chrome",Q=/Safari\//.test(J)&&!/Chrome\//.test(J);function X(t,e,n){void 0!==W&&$?!Q&&Z?(t[W]=`translate3d(${e}px, ${n}px, 0)`,t[K]="hidden"):t[k(W)]=`translate(${e}px, ${n}px)`:(t.top=`${n}px`,t.left=`${e}px`)}class tt{constructor(t){this.cd=t,this.selected=[],this.scroll=new a.EventEmitter,this.page=new a.EventEmitter,this.activate=new a.EventEmitter,this.select=new a.EventEmitter,this.detailToggle=new a.EventEmitter,this.rowContextmenu=new a.EventEmitter(!1),this.treeAction=new a.EventEmitter,this.rowHeightsCache=new z,this.temp=[],this.offsetY=0,this.indexes={},this.rowIndexes=new Map,this.rowExpansions=[],this.getDetailRowHeight=(t,e)=>{if(!this.rowDetail)return 0;const n=this.rowDetail.rowHeight;return"function"==typeof n?n(t,e):n},this.rowTrackingFn=(t,e)=>{const n=this.getRowIndex(e);return this.trackByProp?e[this.trackByProp]:n}}set pageSize(t){this._pageSize=t,this.recalcLayout()}get pageSize(){return this._pageSize}set rows(t){this._rows=t,this.recalcLayout()}get rows(){return this._rows}set columns(t){this._columns=t;const e=j(t);this.columnGroupWidths=F(e,t)}get columns(){return this._columns}set offset(t){this._offset=t,(!this.scrollbarV||this.scrollbarV&&!this.virtualization)&&this.recalcLayout()}get offset(){return this._offset}set rowCount(t){this._rowCount=t,this.recalcLayout()}get rowCount(){return this._rowCount}get bodyWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}set bodyHeight(t){this._bodyHeight=this.scrollbarV?t+"px":"auto",this.recalcLayout()}get bodyHeight(){return this._bodyHeight}get selectEnabled(){return!!this.selectionType}get scrollHeight(){if(this.scrollbarV&&this.virtualization&&this.rowCount)return this.rowHeightsCache.query(this.rowCount-1)}ngOnInit(){this.rowDetail&&(this.listener=this.rowDetail.toggle.subscribe(({type:t,value:e})=>{"row"===t&&this.toggleRowExpansion(e),"all"===t&&this.toggleAllRows(e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()})),this.groupHeader&&(this.listener=this.groupHeader.toggle.subscribe(({type:t,value:e})=>{"group"===t&&this.toggleRowExpansion(e),"all"===t&&this.toggleAllRows(e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()}))}ngOnDestroy(){(this.rowDetail||this.groupHeader)&&this.listener.unsubscribe()}updateOffsetY(t){this.scroller&&(this.scrollbarV&&this.virtualization&&t?t=this.rowHeightsCache.query(this.pageSize*t-1):this.scrollbarV&&!this.virtualization&&(t=0),this.scroller.setOffset(t||0))}onBodyScroll(t){const e=t.scrollYPos,n=t.scrollXPos;this.offsetY===e&&this.offsetX===n||this.scroll.emit({offsetY:e,offsetX:n}),this.offsetY=e,this.offsetX=n,this.updateIndexes(),this.updatePage(t.direction),this.updateRows()}updatePage(t){let e=this.indexes.first/this.pageSize;"up"===t?e=Math.ceil(e):"down"===t&&(e=Math.floor(e)),void 0===t||isNaN(e)||this.page.emit({offset:e})}updateRows(){const{first:t,last:e}=this.indexes;let n=t,a=0;const r=[];if(this.rowIndexes.clear(),this.groupedRows){let t=3;for(1===this.groupedRows.length&&(t=this.groupedRows[0].value.length);n<e&&n<this.groupedRows.length;)r[a]=this.groupedRows[n],a++,n++}else for(;n<e&&n<this.rowCount;){const t=this.rows[n];t&&(this.rowIndexes.set(t,n),r[a]=t),a++,n++}this.temp=r}getRowHeight(t){return"function"==typeof this.rowHeight?this.rowHeight(t):this.rowHeight}getGroupHeight(t){let e=0;if(t.value)for(let n=0;n<t.value.length;n++)e+=this.getRowAndDetailHeight(t.value[n]);return e}getRowAndDetailHeight(t){let e=this.getRowHeight(t);return this.getRowExpanded(t)&&(e+=this.getDetailRowHeight(t)),e}getRowsStyles(t){const e={};if(this.groupedRows&&(e.width=this.columnGroupWidths.total),this.scrollbarV&&this.virtualization){let n=0;if(this.groupedRows){const e=t[t.length-1];n=e?this.getRowIndex(e):0}else n=this.getRowIndex(t);X(e,0,this.rowHeightsCache.query(n-1))}return e}getBottomSummaryRowStyles(){if(!this.scrollbarV||!this.rows||!this.rows.length)return null;const t={position:"absolute"};return X(t,0,this.rowHeightsCache.query(this.rows.length-1)),t}hideIndicator(){setTimeout(()=>this.loadingIndicator=!1,500)}updateIndexes(){let t=0,e=0;if(this.scrollbarV)if(this.virtualization){const n=parseInt(this.bodyHeight,0);t=this.rowHeightsCache.getRowIndex(this.offsetY),e=this.rowHeightsCache.getRowIndex(n+this.offsetY)+1}else t=0,e=this.rowCount;else this.externalPaging||(t=Math.max(this.offset*this.pageSize,0)),e=Math.min(t+this.pageSize,this.rowCount);this.indexes={first:t,last:e}}refreshRowHeightCache(){if(this.scrollbarV&&(!this.scrollbarV||this.virtualization)&&(this.rowHeightsCache.clearCache(),this.rows&&this.rows.length)){const t=new Set;for(const e of this.rows)this.getRowExpanded(e)&&t.add(e);this.rowHeightsCache.initCache({rows:this.rows,rowHeight:this.rowHeight,detailRowHeight:this.getDetailRowHeight,externalVirtual:this.scrollbarV&&this.externalPaging,rowCount:this.rowCount,rowIndexes:this.rowIndexes,rowExpansions:t})}}getAdjustedViewPortIndex(){const t=this.indexes.first;return this.scrollbarV&&this.virtualization&&this.rowHeightsCache.query(t-1)<=this.offsetY?t-1:t}toggleRowExpansion(t){const e=this.getAdjustedViewPortIndex(),n=this.getRowExpandedIdx(t,this.rowExpansions),a=n>-1;if(this.scrollbarV&&this.virtualization){const e=this.getDetailRowHeight(t)*(a?-1:1),n=this.getRowIndex(t);this.rowHeightsCache.update(n,e)}a?this.rowExpansions.splice(n,1):this.rowExpansions.push(t),this.detailToggle.emit({rows:[t],currentIndex:e})}toggleAllRows(t){this.rowExpansions=[];const e=this.getAdjustedViewPortIndex();if(t)for(const n of this.rows)this.rowExpansions.push(n);this.scrollbarV&&this.recalcLayout(),this.detailToggle.emit({rows:this.rows,currentIndex:e})}recalcLayout(){this.refreshRowHeightCache(),this.updateIndexes(),this.updateRows()}columnTrackingFn(t,e){return e.$$id}stylesByGroup(t){const e=this.columnGroupWidths,n=this.offsetX,a={width:`${e[t]}px`};if("left"===t)X(a,n,0);else if("right"===t){const t=parseInt(this.innerWidth+"",0);X(a,-1*(e.total-t-n),0)}return a}getRowExpanded(t){if(0===this.rowExpansions.length&&this.groupExpansionDefault)for(const e of this.groupedRows)this.rowExpansions.push(e);return this.getRowExpandedIdx(t,this.rowExpansions)>-1}getRowExpandedIdx(t,e){if(!e||!e.length)return-1;const n=this.rowIdentity(t);return e.findIndex(t=>this.rowIdentity(t)===n)}getRowIndex(t){return this.rowIndexes.get(t)||0}onTreeAction(t){this.treeAction.emit({row:t})}}class et{constructor(t){this.cd=t,this.sort=new a.EventEmitter,this.reorder=new a.EventEmitter,this.resize=new a.EventEmitter,this.select=new a.EventEmitter,this.columnContextmenu=new a.EventEmitter(!1),this._columnGroupWidths={total:100},this._styleByGroup={left:{},center:{},right:{}},this.destroyed=!1}set innerWidth(t){this._innerWidth=t,setTimeout(()=>{if(this._columns){const t=j(this._columns);this._columnGroupWidths=F(t,this._columns),this.setStylesByGroup()}})}get innerWidth(){return this._innerWidth}set headerHeight(t){this._headerHeight="auto"!==t?`${t}px`:t}get headerHeight(){return this._headerHeight}set columns(t){this._columns=t;const e=j(t);this._columnsByPin=V(t),setTimeout(()=>{this._columnGroupWidths=F(e,t),this.setStylesByGroup()})}get columns(){return this._columns}set offsetX(t){this._offsetX=t,this.setStylesByGroup()}get offsetX(){return this._offsetX}ngOnDestroy(){this.destroyed=!0}onLongPressStart({event:t,model:e}){e.dragging=!0,this.dragEventTarget=t}onLongPressEnd({event:t,model:e}){this.dragEventTarget=t,setTimeout(()=>{const t=this._columns.find(t=>t.$$id===e.$$id);t&&(t.dragging=!1)},5)}get headerWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}trackByGroups(t,e){return e.type}columnTrackingFn(t,e){return e.$$id}onColumnResized(t,e){t<=e.minWidth?t=e.minWidth:t>=e.maxWidth&&(t=e.maxWidth),this.resize.emit({column:e,prevValue:e.width,newValue:t})}onColumnReordered({prevIndex:t,newIndex:e,model:n}){const a=this.getColumn(e);a.isTarget=!1,a.targetMarkerContext=void 0,this.reorder.emit({column:n,prevValue:t,newValue:e})}onTargetChanged({prevIndex:t,newIndex:e,initialIndex:n}){if(t||0===t){const e=this.getColumn(t);e.isTarget=!1,e.targetMarkerContext=void 0}if(e||0===e){const t=this.getColumn(e);t.isTarget=!0,n!==e&&(t.targetMarkerContext={class:"targetMarker ".concat(n>e?"dragFromRight":"dragFromLeft")})}}getColumn(t){const e=this._columnsByPin[0].columns.length;if(t<e)return this._columnsByPin[0].columns[t];const n=this._columnsByPin[1].columns.length;return t<e+n?this._columnsByPin[1].columns[t-e]:this._columnsByPin[2].columns[t-e-n]}onSort({column:t,prevValue:e,newValue:n}){if(t.dragging)return;const a=this.calcNewSorts(t,e,n);this.sort.emit({sorts:a,column:t,prevValue:e,newValue:n})}calcNewSorts(t,e,n){let a=0;this.sorts||(this.sorts=[]);const r=this.sorts.map((e,n)=>((e=Object.assign({},e)).prop===t.prop&&(a=n),e));return void 0===n?r.splice(a,1):e?r[a].dir=n:("single"===this.sortType&&r.splice(0,this.sorts.length),r.push({dir:n,prop:t.prop})),r}setStylesByGroup(){this._styleByGroup.left=this.calcStylesByGroup("left"),this._styleByGroup.center=this.calcStylesByGroup("center"),this._styleByGroup.right=this.calcStylesByGroup("right"),this.destroyed||this.cd.detectChanges()}calcStylesByGroup(t){const e=this._columnGroupWidths,n={width:`${e[t]}px`};return"center"===t?X(n,-1*this.offsetX,0):"right"===t&&X(n,-1*(e.total-this.innerWidth),0),n}}function nt(t,e,n){let a,r,i;n=n||{};let s=null,o=0;function u(){o=!1===n.leading?0:+new Date,s=null,i=t.apply(a,r)}return function(){const l=+new Date;o||!1!==n.leading||(o=l);const d=e-(l-o);return a=this,r=arguments,d<=0?(clearTimeout(s),s=null,o=l,i=t.apply(a,r)):s||!1===n.trailing||(s=setTimeout(u,d)),i}}function at(t,e){for(const n of e){const e=t.indexOf(n);t.splice(e,1)}}function rt(t,e=300){let n=0;for(const a of t)n+=a.width||e;return n}const it={asc:"asc",desc:"desc"};function st(t,e){if(null==t&&(t=0),null==e&&(e=0),t instanceof Date&&e instanceof Date){if(t<e)return-1;if(t>e)return 1}else if(isNaN(parseFloat(t))||!isFinite(t)||isNaN(parseFloat(e))||!isFinite(e)){if(t=String(t),e=String(e),t.toLowerCase()<e.toLowerCase())return-1;if(t.toLowerCase()>e.toLowerCase())return 1}else{if(parseFloat(t)<parseFloat(e))return-1;if(parseFloat(t)>parseFloat(e))return 1}return 0}let ot=(()=>{class t{constructor(t,e,n,r,i,o,u){this.scrollbarHelper=t,this.dimensionsHelper=e,this.cd=n,this.columnChangesService=o,this.configuration=u,this.selected=[],this.scrollbarV=!1,this.scrollbarH=!1,this.rowHeight=30,this.columnMode="standard",this.headerHeight=30,this.footerHeight=0,this.externalPaging=!1,this.externalSorting=!1,this.loadingIndicator=!1,this.reorderable=!0,this.swapColumns=!0,this.sortType="single",this.sorts=[],this.cssClasses={sortAscending:"datatable-icon-up",sortDescending:"datatable-icon-down",pagerLeftArrow:"datatable-icon-left",pagerRightArrow:"datatable-icon-right",pagerPrevious:"datatable-icon-prev",pagerNext:"datatable-icon-skip"},this.messages={emptyMessage:"No data to display",totalMessage:"total",selectedMessage:"selected"},this.groupExpansionDefault=!1,this.selectAllRowsOnPage=!1,this.virtualization=!0,this.summaryRow=!1,this.summaryHeight=30,this.summaryPosition="top",this.scroll=new a.EventEmitter,this.activate=new a.EventEmitter,this.select=new a.EventEmitter,this.sort=new a.EventEmitter,this.page=new a.EventEmitter,this.reorder=new a.EventEmitter,this.resize=new a.EventEmitter,this.tableContextmenu=new a.EventEmitter(!1),this.treeAction=new a.EventEmitter,this.rowCount=0,this._offsetX=new s.a(0),this._count=0,this._offset=0,this._subscriptions=[],this.rowIdentity=t=>this._groupRowsBy?t.key:t,this.element=r.nativeElement,this.rowDiffer=i.find({}).create(),this.configuration&&this.configuration.messages&&(this.messages=Object.assign({},this.configuration.messages))}set rows(t){this._rows=t,t&&(this._internalRows=[...t]),this.externalSorting||this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.recalculate(),this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)),this.cd.markForCheck()}get rows(){return this._rows}set groupRowsBy(t){t&&(this._groupRowsBy=t,this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)))}get groupRowsBy(){return this._groupRowsBy}set columns(t){t&&(this._internalColumns=[...t],E(this._internalColumns),this.recalculateColumns()),this._columns=t}get columns(){return this._columns}set limit(t){this._limit=t,this.recalculate()}get limit(){return this._limit}set count(t){this._count=t,this.recalculate()}get count(){return this._count}set offset(t){this._offset=t}get offset(){return Math.max(Math.min(this._offset,Math.ceil(this.rowCount/this.pageSize)-1),0)}get isFixedHeader(){const t=this.headerHeight;return"string"!=typeof t||"auto"!==t}get isFixedRow(){return"auto"!==this.rowHeight}get isVertScroll(){return this.scrollbarV}get isVirtualized(){return this.virtualization}get isHorScroll(){return this.scrollbarH}get isSelectable(){return void 0!==this.selectionType}get isCheckboxSelection(){return"checkbox"===this.selectionType}get isCellSelection(){return"cell"===this.selectionType}get isSingleSelection(){return"single"===this.selectionType}get isMultiSelection(){return"multi"===this.selectionType}get isMultiClickSelection(){return"multiClick"===this.selectionType}set columnTemplates(t){this._columnTemplates=t,this.translateColumns(t)}get columnTemplates(){return this._columnTemplates}get allRowsSelected(){let t=this.rows&&this.selected&&this.selected.length===this.rows.length;if(this.selectAllRowsOnPage){const e=this.bodyComponent.indexes;t=this.selected.length===e.last-e.first}return this.selected&&this.rows&&0!==this.rows.length&&t}ngOnInit(){this.recalculate()}ngAfterViewInit(){this.externalSorting||this.sortInternalRows(),"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{this.recalculate(),this.externalPaging&&this.scrollbarV&&this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:0})})}ngAfterContentInit(){this.columnTemplates.changes.subscribe(t=>this.translateColumns(t)),this.listenForColumnInputChanges()}translateColumns(t){if(t){const e=t.toArray();e.length&&(this._internalColumns=function(t){const e=[];for(const n of t){const t={},a=Object.getOwnPropertyNames(n);for(const e of a)t[e]=n[e];n.headerTemplate&&(t.headerTemplate=n.headerTemplate),n.cellTemplate&&(t.cellTemplate=n.cellTemplate),n.summaryFunc&&(t.summaryFunc=n.summaryFunc),n.summaryTemplate&&(t.summaryTemplate=n.summaryTemplate),e.push(t)}return e}(e),E(this._internalColumns),this.recalculateColumns(),this.sortInternalRows(),this.cd.markForCheck())}}groupArrayBy(t,e){const n=new Map;return t.forEach(t=>{const a=t[e];n.has(a)?n.get(a).push(t):n.set(a,[t])}),Array.from(n,t=>({key:t[0],value:t[1]}))}ngDoCheck(){this.rowDiffer.diff(this.rows)&&(this.externalSorting?this._internalRows=[...this.rows]:this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.recalculatePages(),this.cd.markForCheck())}recalculate(){this.recalculateDims(),this.recalculateColumns()}onWindowResize(){this.recalculate()}recalculateColumns(t=this._internalColumns,e=-1,n=this.scrollbarH){if(!t)return;let a=this._innerWidth;return this.scrollbarV&&(a-=this.scrollbarHelper.width),"force"===this.columnMode?function(t,e,n,a,r=300){const i=t.slice(n+1,t.length).filter(t=>!1!==t.canAutoResize);for(const c of i)c.$$oldWidth||(c.$$oldWidth=c.width);let s=0,o=!1,u=rt(t,r),l=e-u;const d=[];do{s=l/i.length,o=u>=e;for(const t of i){if(o&&a)t.width=t.$$oldWidth||t.width||r;else{const e=(t.width||r)+s;t.minWidth&&e<t.minWidth?(t.width=t.minWidth,d.push(t)):t.maxWidth&&e>t.maxWidth?(t.width=t.maxWidth,d.push(t)):t.width=e}t.width=Math.max(0,t.width)}u=rt(t),l=e-u,at(i,d)}while(l>1&&0!==i.length)}(t,a,e,n):"flex"===this.columnMode&&function(t,e){const n=function(t,e){let n=0;for(const a of t)n+=a.width;return n}(t),a=function(t){let e=0;for(const n of t)e+=n.flexGrow||0;return e}(t),r=j(t);n!==e&&function(t,e,n){for(const i in t)for(const a of t[i])a.canAutoResize?a.width=0:(e-=a.width,n-=a.flexGrow?a.flexGrow:0);const a={};let r=e;do{const e=r/n;r=0;for(const n in t)for(const i of t[n])if(i.canAutoResize&&!a[i.prop]){const t=i.width+i.flexGrow*e;void 0!==i.minWidth&&t<i.minWidth?(r+=t-i.minWidth,i.width=i.minWidth,a[i.prop]=!0):i.width=t}}while(0!==r)}(r,e,a)}(t,a),t}recalculateDims(){const t=this.dimensionsHelper.getDimensions(this.element);if(this._innerWidth=Math.floor(t.width),this.scrollbarV){let e=t.height;this.headerHeight&&(e-=this.headerHeight),this.footerHeight&&(e-=this.footerHeight),this.bodyHeight=e}this.recalculatePages()}recalculatePages(){this.pageSize=this.calcPageSize(),this.rowCount=this.calcRowCount()}onBodyPage({offset:t}){this.externalPaging&&!this.virtualization||(this.offset=t,this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}))}onBodyScroll(t){this._offsetX.next(t.offsetX),this.scroll.emit(t),this.cd.detectChanges()}onFooterPage(t){this.offset=t.page-1,this.bodyComponent.updateOffsetY(this.offset),this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}),this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected}))}calcPageSize(t=this.rows){if(this.scrollbarV&&this.virtualization){const t=Math.ceil(this.bodyHeight/this.rowHeight);return Math.max(t,0)}return void 0!==this.limit?this.limit:t?t.length:0}calcRowCount(t=this.rows){return this.externalPaging?this.count:t?this.groupedRows?this.groupedRows.length:null!=this.treeFromRelation&&null!=this.treeToRelation?this._internalRows.length:t.length:0}onColumnContextmenu({event:t,column:e}){this.tableContextmenu.emit({event:t,type:"header",content:e})}onRowContextmenu({event:t,row:e}){this.tableContextmenu.emit({event:t,type:"body",content:e})}onColumnResize({column:t,newValue:e}){if(void 0===t)return;let n;const a=this._internalColumns.map((a,r)=>((a=Object.assign({},a)).$$id===t.$$id&&(n=r,a.width=e,a.$$oldWidth=e),a));this.recalculateColumns(a,n),this._internalColumns=a,this.resize.emit({column:t,newValue:e})}onColumnReorder({column:t,newValue:e,prevValue:n}){const a=this._internalColumns.map(t=>Object.assign({},t));if(this.swapColumns){const r=a[e];a[e]=t,a[n]=r}else if(e>n){const t=a[n];for(let r=n;r<e;r++)a[r]=a[r+1];a[e]=t}else{const t=a[n];for(let r=n;r>e;r--)a[r]=a[r-1];a[e]=t}this._internalColumns=a,this.reorder.emit({column:t,newValue:e,prevValue:n})}onColumnSort(t){this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected})),this.sorts=t.sorts,!1===this.externalSorting&&this.sortInternalRows(),this._internalRows=R(this._internalRows,C(this.treeFromRelation),C(this.treeToRelation)),this.offset=0,this.bodyComponent.updateOffsetY(this.offset),this.sort.emit(t)}onHeaderSelect(t){if(this.selectAllRowsOnPage){const t=this.bodyComponent.indexes.first,e=this.bodyComponent.indexes.last,n=this.selected.length===e-t;this.selected=[],n||this.selected.push(...this._internalRows.slice(t,e))}else{const t=this.selected.length===this.rows.length;this.selected=[],t||this.selected.push(...this.rows)}this.select.emit({selected:this.selected})}onBodySelect(t){this.select.emit(t)}onTreeAction(t){const e=t.row,n=this._rows.findIndex(e=>e[this.treeToRelation]===t.row[this.treeToRelation]);this.treeAction.emit({row:e,rowIndex:n})}ngOnDestroy(){this._subscriptions.forEach(t=>t.unsubscribe())}listenForColumnInputChanges(){this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(()=>{this.columnTemplates&&this.columnTemplates.notifyOnChanges()}))}sortInternalRows(){this._internalRows=function(t,e,n){if(!t)return[];if(!n||!n.length||!e)return[...t];const a=new Map;t.forEach((t,e)=>a.set(t,e));const r=[...t],i=e.reduce((t,e)=>(e.comparator&&"function"==typeof e.comparator&&(t[e.prop]=e.comparator),t),{}),s=n.map(t=>{const e=t.prop;return{prop:e,dir:t.dir,valueGetter:w(e),compareFn:i[e]||st}});return r.sort((function(t,e){for(const n of s){const{prop:a,valueGetter:r}=n,i=r(t,a),s=r(e,a),o=n.dir!==it.desc?n.compareFn(i,s,t,e,n.dir):-n.compareFn(i,s,t,e,n.dir);if(0!==o)return o}return a.has(t)&&a.has(e)?a.get(t)<a.get(e)?-1:1:0}))}(this._internalRows,this._internalColumns,this.sorts)}}return Object(f.__decorate)([function(t,e,n){return{configurable:!0,enumerable:n.enumerable,get:function(){return Object.defineProperty(this,e,{configurable:!0,enumerable:n.enumerable,value:nt(n.value,5,void 0)}),this[e]}}},Object(f.__metadata)("design:type",Function),Object(f.__metadata)("design:paramtypes",[]),Object(f.__metadata)("design:returntype",void 0)],t.prototype,"onWindowResize",null),t})();class ut{constructor(t){this.cd=t,this.sort=new a.EventEmitter,this.select=new a.EventEmitter,this.columnContextmenu=new a.EventEmitter(!1),this.sortFn=this.onSort.bind(this),this.selectFn=this.select.emit.bind(this.select),this.cellContext={column:this.column,sortDir:this.sortDir,sortFn:this.sortFn,allRowsSelected:this.allRowsSelected,selectFn:this.selectFn}}set allRowsSelected(t){this._allRowsSelected=t,this.cellContext.allRowsSelected=t}get allRowsSelected(){return this._allRowsSelected}set column(t){this._column=t,this.cellContext.column=t,this.cd.markForCheck()}get column(){return this._column}set sorts(t){this._sorts=t,this.sortDir=this.calcSortDir(t),this.cellContext.sortDir=this.sortDir,this.sortClass=this.calcSortClass(this.sortDir),this.cd.markForCheck()}get sorts(){return this._sorts}get columnCssClasses(){let t="datatable-header-cell";if(this.column.sortable&&(t+=" sortable"),this.column.resizeable&&(t+=" resizeable"),this.column.headerClass)if("string"==typeof this.column.headerClass)t+=" "+this.column.headerClass;else if("function"==typeof this.column.headerClass){const e=this.column.headerClass({column:this.column});if("string"==typeof e)t+=e;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=` ${a}`)}}const e=this.sortDir;return e&&(t+=` sort-active sort-${e}`),t}get name(){return void 0===this.column.headerTemplate?this.column.name:void 0}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get width(){return this.column.width}get isCheckboxable(){return this.column.checkboxable&&this.column.headerCheckboxable&&"checkbox"===this.selectionType}onContextmenu(t){this.columnContextmenu.emit({event:t,column:this.column})}calcSortDir(t){if(t&&this.column){const e=t.find(t=>t.prop===this.column.prop);if(e)return e.dir}}onSort(){if(!this.column.sortable)return;const t=(e=this.sortDir,"single"===this.sortType?e===it.asc?it.desc:it.asc:e?e===it.asc?it.desc:void 0:it.asc);var e;this.sort.emit({column:this.column,prevValue:this.sortDir,newValue:t})}calcSortClass(t){return t===it.asc?`sort-btn sort-asc ${this.sortAscendingIcon}`:t===it.desc?`sort-btn sort-desc ${this.sortDescendingIcon}`:"sort-btn"}}class lt{constructor(){this.selectedCount=0,this.page=new a.EventEmitter}get isVisible(){return this.rowCount/this.pageSize>1}get curPage(){return this.offset+1}}class dt{constructor(){this.change=new a.EventEmitter,this._count=0,this._page=1,this._size=0}set size(t){this._size=t,this.pages=this.calcPages()}get size(){return this._size}set count(t){this._count=t,this.pages=this.calcPages()}get count(){return this._count}set page(t){this._page=t,this.pages=this.calcPages()}get page(){return this._page}get totalPages(){const t=this.size<1?1:Math.ceil(this.count/this.size);return Math.max(t||0,1)}canPrevious(){return this.page>1}canNext(){return this.page<this.totalPages}prevPage(){this.selectPage(this.page-1)}nextPage(){this.selectPage(this.page+1)}selectPage(t){t>0&&t<=this.totalPages&&t!==this.page&&(this.page=t,this.change.emit({page:t}))}calcPages(t){const e=[];let n=1,a=this.totalPages;t=t||this.page,5<this.totalPages&&(n=t-Math.floor(2.5),a=t+Math.floor(2.5),n<1?(n=1,a=Math.min(n+5-1,this.totalPages)):a>this.totalPages&&(n=Math.max(this.totalPages-5+1,1),a=this.totalPages));for(let r=n;r<=a;r++)e.push({number:r,text:r});return e}}class ct{}const ft=function(){var t={up:38,down:40,return:13,escape:27,left:37,right:39};return t[t.up]="up",t[t.down]="down",t[t.return]="return",t[t.escape]="escape",t[t.left]="left",t[t.right]="right",t}();class ht{constructor(t,e,n,r){this.differs=t,this.scrollbarHelper=e,this.cd=n,this.treeStatus="collapsed",this.activate=new a.EventEmitter,this.treeAction=new a.EventEmitter,this._groupStyles={left:{},center:{},right:{}},this._element=r.nativeElement,this._rowDiffer=t.find({}).create()}set columns(t){this._columns=t,this.recalculateColumns(t),this.buildStylesByGroup()}get columns(){return this._columns}set innerWidth(t){if(this._columns){const t=j(this._columns);this._columnGroupWidths=F(t,this._columns)}this._innerWidth=t,this.recalculateColumns(),this.buildStylesByGroup()}get innerWidth(){return this._innerWidth}set offsetX(t){this._offsetX=t,this.buildStylesByGroup()}get offsetX(){return this._offsetX}get cssClass(){let t="datatable-body-row";if(this.isSelected&&(t+=" active"),this.rowIndex%2!=0&&(t+=" datatable-row-odd"),this.rowIndex%2==0&&(t+=" datatable-row-even"),this.rowClass){const e=this.rowClass(this.row);if("string"==typeof e)t+=` ${e}`;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=` ${a}`)}}return t}get columnsTotalWidths(){return this._columnGroupWidths.total}ngDoCheck(){this._rowDiffer.diff(this.row)&&this.cd.markForCheck()}trackByGroups(t,e){return e.type}columnTrackingFn(t,e){return e.$$id}buildStylesByGroup(){this._groupStyles.left=this.calcStylesByGroup("left"),this._groupStyles.center=this.calcStylesByGroup("center"),this._groupStyles.right=this.calcStylesByGroup("right"),this.cd.markForCheck()}calcStylesByGroup(t){const e=this._columnGroupWidths,n=this.offsetX,a={width:`${e[t]}px`};if("left"===t)X(a,n,0);else if("right"===t){const t=parseInt(this.innerWidth+"",0);X(a,-1*(e.total-t-n+this.scrollbarHelper.width),0)}return a}onActivate(t,e){t.cellIndex=e,t.rowElement=this._element,this.activate.emit(t)}onKeyDown(t){const e=t.keyCode;(e===ft.return||e===ft.down||e===ft.up||e===ft.left||e===ft.right)&&t.target===this._element&&(t.preventDefault(),t.stopPropagation(),this.activate.emit({type:"keydown",event:t,row:this.row,rowElement:this._element}))}onMouseenter(t){this.activate.emit({type:"mouseenter",event:t,row:this.row,rowElement:this._element})}recalculateColumns(t=this.columns){this._columns=t;const e=j(this._columns);this._columnsByPin=V(this._columns),this._columnGroupWidths=F(e,this._columns)}onTreeAction(){this.treeAction.emit()}}class gt{constructor(t,e){this.cd=t,this.differs=e,this.rowContextmenu=new a.EventEmitter(!1),this.groupContext={group:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this.rowContext={row:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this._expanded=!1,this.rowDiffer=e.find({}).create()}set rowIndex(t){this._rowIndex=t,this.rowContext.rowIndex=t,this.groupContext.rowIndex=t,this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set expanded(t){this._expanded=t,this.groupContext.expanded=t,this.rowContext.expanded=t,this.cd.markForCheck()}get expanded(){return this._expanded}ngDoCheck(){this.rowDiffer.diff(this.row)&&(this.rowContext.row=this.row,this.groupContext.group=this.row,this.cd.markForCheck())}onContextmenu(t){this.rowContextmenu.emit({event:t,row:this.row})}getGroupHeaderStyle(){const t={};return t.transform="translate3d("+this.offsetX+"px, 0px, 0px)",t["backface-visibility"]="hidden",t.width=this.innerWidth,t}}class pt{constructor(t,e){this.cd=e,this.activate=new a.EventEmitter,this.treeAction=new a.EventEmitter,this.isFocused=!1,this.onCheckboxChangeFn=this.onCheckboxChange.bind(this),this.activateFn=this.activate.emit.bind(this.activate),this.cellContext={onCheckboxChangeFn:this.onCheckboxChangeFn,activateFn:this.activateFn,row:this.row,group:this.group,value:this.value,column:this.column,rowHeight:this.rowHeight,isSelected:this.isSelected,rowIndex:this.rowIndex,treeStatus:this.treeStatus,onTreeAction:this.onTreeAction.bind(this)},this._element=t.nativeElement}set group(t){this._group=t,this.cellContext.group=t,this.checkValueUpdates(),this.cd.markForCheck()}get group(){return this._group}set rowHeight(t){this._rowHeight=t,this.cellContext.rowHeight=t,this.checkValueUpdates(),this.cd.markForCheck()}get rowHeight(){return this._rowHeight}set isSelected(t){this._isSelected=t,this.cellContext.isSelected=t,this.cd.markForCheck()}get isSelected(){return this._isSelected}set expanded(t){this._expanded=t,this.cellContext.expanded=t,this.cd.markForCheck()}get expanded(){return this._expanded}set rowIndex(t){this._rowIndex=t,this.cellContext.rowIndex=t,this.checkValueUpdates(),this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set column(t){this._column=t,this.cellContext.column=t,this.checkValueUpdates(),this.cd.markForCheck()}get column(){return this._column}set row(t){this._row=t,this.cellContext.row=t,this.checkValueUpdates(),this.cd.markForCheck()}get row(){return this._row}set sorts(t){this._sorts=t,this.calcSortDir=this.calcSortDir(t)}get sorts(){return this._sorts}set treeStatus(t){this._treeStatus="collapsed"!==t&&"expanded"!==t&&"loading"!==t&&"disabled"!==t?"collapsed":t,this.cellContext.treeStatus=this._treeStatus,this.checkValueUpdates(),this.cd.markForCheck()}get treeStatus(){return this._treeStatus}get columnCssClasses(){let t="datatable-body-cell";if(this.column.cellClass)if("string"==typeof this.column.cellClass)t+=" "+this.column.cellClass;else if("function"==typeof this.column.cellClass){const e=this.column.cellClass({row:this.row,group:this.group,column:this.column,value:this.value,rowHeight:this.rowHeight});if("string"==typeof e)t+=e;else if("object"==typeof e){const n=Object.keys(e);for(const a of n)!0===e[a]&&(t+=` ${a}`)}}return this.sortDir||(t+=" sort-active"),this.isFocused&&(t+=" active"),this.sortDir===it.asc&&(t+=" sort-asc"),this.sortDir===it.desc&&(t+=" sort-desc"),t}get width(){return this.column.width}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get height(){const t=this.rowHeight;return isNaN(t)?t:t+"px"}ngDoCheck(){this.checkValueUpdates()}ngOnDestroy(){this.cellTemplate&&this.cellTemplate.clear()}checkValueUpdates(){let t="";if(this.row&&this.column){const e=this.column.$$valueGetter(this.row,this.column.prop),n=this.column.pipe;n?t=n.transform(e):void 0!==t&&(t=e)}else t="";this.value!==t&&(this.value=t,this.cellContext.value=t,this.sanitizedValue=null!=t?this.stripHtml(t):t,this.cd.markForCheck())}onFocus(){this.isFocused=!0}onBlur(){this.isFocused=!1}onClick(t){this.activate.emit({type:"click",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onDblClick(t){this.activate.emit({type:"dblclick",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onKeyDown(t){const e=t.keyCode;(e===ft.return||e===ft.down||e===ft.up||e===ft.left||e===ft.right)&&t.target===this._element&&(t.preventDefault(),t.stopPropagation(),this.activate.emit({type:"keydown",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element}))}onCheckboxChange(t){this.activate.emit({type:"checkbox",event:t,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element,treeStatus:"collapsed"})}calcSortDir(t){if(!t)return;const e=t.find(t=>t.prop===this.column.prop);return e?e.dir:void 0}stripHtml(t){return t.replace?t.replace(/<\/?[^>]+(>|$)/g,""):t}onTreeAction(){this.treeAction.emit(this.row)}calcLeftMargin(t,e){return t.isTreeColumn?e.level*(null!=t.treeLevelIndent?t.treeLevelIndent:50):0}}function bt(t,e,n){const a=n(e,t);return a>-1?t.splice(a,1):t.push(e),t}class mt{constructor(){this.activate=new a.EventEmitter,this.select=new a.EventEmitter}selectRow(t,e,n){if(!this.selectEnabled)return;const a="checkbox"===this.selectionType,r="multiClick"===this.selectionType;let i=[];i="multi"===this.selectionType||a||r?t.shiftKey?function(t,e,n,a,r){const i=n<a;for(let s=0;s<e.length;s++){const r=e[s],o=s>=a&&s<=n,u=s<=a&&s>=n;let l={start:0,end:0};l=i?{start:n,end:a}:{start:a,end:n+1},(i&&u||!i&&o)&&s>=l.start&&s<=l.end&&t.push(r)}return t}([],this.rows,e,this.prevIndex,this.getRowSelectedIdx.bind(this)):bt(t.ctrlKey||t.metaKey||r||a?[...this.selected]:[],n,this.getRowSelectedIdx.bind(this)):bt([],n,this.getRowSelectedIdx.bind(this)),"function"==typeof this.selectCheck&&(i=i.filter(this.selectCheck.bind(this))),this.selected.splice(0,this.selected.length),this.selected.push(...i),this.prevIndex=e,this.select.emit({selected:i})}onActivate(t,e){const{type:n,event:a,row:r}=t,i="checkbox"===this.selectionType;!i&&("click"===n||"dblclick"===n)||i&&"checkbox"===n?this.selectRow(a,e,r):"keydown"===n&&(a.keyCode===ft.return?this.selectRow(a,e,r):this.onKeyboardFocus(t)),this.activate.emit(t)}onKeyboardFocus(t){const{keyCode:e}=t.event;if(e===ft.up||e===ft.down||e===ft.right||e===ft.left){const n="cell"===this.selectionType;t.cellElement&&n?n&&this.focusCell(t.cellElement,t.rowElement,e,t.cellIndex):this.focusRow(t.rowElement,e)}}focusRow(t,e){const n=this.getPrevNextRow(t,e);n&&n.focus()}getPrevNextRow(t,e){const n=t.parentElement;if(n){let t;if(e===ft.up?t=n.previousElementSibling:e===ft.down&&(t=n.nextElementSibling),t&&t.children.length)return t.children[0]}}focusCell(t,e,n,a){let r;if(n===ft.left)r=t.previousElementSibling;else if(n===ft.right)r=t.nextElementSibling;else if(n===ft.up||n===ft.down){const t=this.getPrevNextRow(e,n);if(t){const e=t.getElementsByClassName("datatable-body-cell");e.length&&(r=e[a])}}r&&r.focus()}getRowSelected(t){return this.getRowSelectedIdx(t,this.selected)>-1}getRowSelectedIdx(t,e){if(!e||!e.length)return-1;const n=this.rowIdentity(t);return e.findIndex(t=>this.rowIdentity(t)===n)}}function yt(t){const e=t.filter(t=>!!t);return e.length?e.some(t=>"number"!=typeof t)?null:e.reduce((t,e)=>t+e):null}function vt(t){return null}class xt{constructor(){this.summaryRow={}}ngOnChanges(){this.columns&&this.rows&&(this.updateInternalColumns(),this.updateValues())}updateInternalColumns(){this._internalColumns=this.columns.map(t=>Object.assign({},t,{cellTemplate:t.summaryTemplate}))}updateValues(){this.summaryRow={},this.columns.filter(t=>!t.summaryTemplate).forEach(t=>{const e=this.rows.map(e=>e[t.prop]),n=this.getSummaryFunction(t);this.summaryRow[t.prop]=t.pipe?t.pipe.transform(n(e)):n(e)})}getSummaryFunction(t){return void 0===t.summaryFunc?yt:null===t.summaryFunc?vt:t.summaryFunc}}class _t{static forRoot(t){return{ngModule:_t,providers:[{provide:"configuration",useValue:t}]}}}"undefined"==typeof document||document.elementsFromPoint||(document.elementsFromPoint=function(t,e){const n=[],a=[];let r,i,s;for(;(r=document.elementFromPoint(t,e))&&-1===n.indexOf(r)&&null!=r;)n.push(r),a.push({value:r.style.getPropertyValue("pointer-events"),priority:r.style.getPropertyPriority("pointer-events")}),r.style.setProperty("pointer-events","none","important");for(i=a.length;s=a[--i];)n[i].style.setProperty("pointer-events",s.value?s.value:"",s.priority);return n})},wE6v:function(t,e,n){var a=n("hh1v");t.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},"wF/u":function(t,e,n){var a=n("e5cp"),r=n("ExA7");t.exports=function t(e,n,i,s,o){return e===n||(null==e||null==n||!r(e)&&!r(n)?e!=e&&n!=n:a(e,n,i,s,t,o))}},wJg7:function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var a=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==a||"symbol"!=a&&n.test(t))&&t>-1&&t%1==0&&t<e}},wQk9:function(t,e,n){!function(t){"use strict";t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n("wd/R"))},wclG:function(t,e,n){var a=n("pFRH"),r=n("88Gu")(a);t.exports=r},"wd/R":function(t,e,n){(function(t){t.exports=function(){"use strict";var e,a;function r(){return e.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function s(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){return void 0===t}function u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function d(t,e){var n,a=[];for(n=0;n<t.length;++n)a.push(e(t[n],n));return a}function c(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function f(t,e){for(var n in e)c(e,n)&&(t[n]=e[n]);return c(e,"toString")&&(t.toString=e.toString),c(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,a){return Oe(t,e,n,a,!0).utc()}function g(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function p(t){if(null==t._isValid){var e=g(t),n=a.call(e.parsedDateParts,(function(t){return null!=t})),r=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(r=r&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return r;t._isValid=r}return t._isValid}function b(t){var e=h(NaN);return null!=t?f(g(e),t):g(e).userInvalidated=!0,e}a=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,a=0;a<n;a++)if(a in e&&t.call(this,e[a],a,e))return!0;return!1};var m=r.momentProperties=[];function y(t,e){var n,a,r;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=g(e)),o(e._locale)||(t._locale=e._locale),m.length>0)for(n=0;n<m.length;n++)o(r=e[a=m[n]])||(t[a]=r);return t}var v=!1;function x(t){y(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,r.updateOffset(this),v=!1)}function _(t){return t instanceof x||null!=t&&null!=t._isAMomentObject}function T(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function O(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=T(e)),n}function w(t,e,n){var a,r=Math.min(t.length,e.length),i=Math.abs(t.length-e.length),s=0;for(a=0;a<r;a++)(n&&t[a]!==e[a]||!n&&O(t[a])!==O(e[a]))&&s++;return s+i}function S(t){!1===r.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function I(t,e){var n=!0;return f((function(){if(null!=r.deprecationHandler&&r.deprecationHandler(null,t),n){for(var a,i=[],s=0;s<arguments.length;s++){if(a="","object"==typeof arguments[s]){for(var o in a+="\n["+s+"] ",arguments[0])a+=o+": "+arguments[0][o]+", ";a=a.slice(0,-2)}else a=arguments[s];i.push(a)}S(t+"\nArguments: "+Array.prototype.slice.call(i).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var N,C={};function R(t,e){null!=r.deprecationHandler&&r.deprecationHandler(t,e),C[t]||(S(e),C[t]=!0)}function A(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function k(t,e){var n,a=f({},t);for(n in e)c(e,n)&&(s(t[n])&&s(e[n])?(a[n]={},f(a[n],t[n]),f(a[n],e[n])):null!=e[n]?a[n]=e[n]:delete a[n]);for(n in t)c(t,n)&&!c(e,n)&&s(t[n])&&(a[n]=f({},a[n]));return a}function E(t){null!=t&&this.set(t)}r.suppressDeprecationWarnings=!1,r.deprecationHandler=null,N=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)c(t,e)&&n.push(e);return n};var L={};function D(t,e){var n=t.toLowerCase();L[n]=L[n+"s"]=L[e]=t}function P(t){return"string"==typeof t?L[t]||L[t.toLowerCase()]:void 0}function M(t){var e,n,a={};for(n in t)c(t,n)&&(e=P(n))&&(a[e]=t[n]);return a}var q={};function j(t,e){q[t]=e}function F(t,e,n){var a=""+Math.abs(t);return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-a.length)).toString().substr(1)+a}var G=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,z={},B={};function Y(t,e,n,a){var r=a;"string"==typeof a&&(r=function(){return this[a]()}),t&&(B[t]=r),e&&(B[e[0]]=function(){return F(r.apply(this,arguments),e[1],e[2])}),n&&(B[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function H(t,e){return t.isValid()?(e=U(e,t.localeData()),z[e]=z[e]||function(t){var e,n,a,r=t.match(G);for(e=0,n=r.length;e<n;e++)r[e]=B[r[e]]?B[r[e]]:(a=r[e]).match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"");return function(e){var a,i="";for(a=0;a<n;a++)i+=A(r[a])?r[a].call(e,t):r[a];return i}}(e),z[e](t)):t.localeData().invalidDate()}function U(t,e){var n=5;function a(t){return e.longDateFormat(t)||t}for(V.lastIndex=0;n>=0&&V.test(t);)t=t.replace(V,a),V.lastIndex=0,n-=1;return t}var W=/\d/,K=/\d\d/,$=/\d{3}/,Z=/\d{4}/,J=/[+-]?\d{6}/,Q=/\d\d?/,X=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,at=/[+-]?\d{1,6}/,rt=/\d+/,it=/[+-]?\d+/,st=/Z|[+-]\d\d:?\d\d/gi,ot=/Z|[+-]\d\d(?::?\d\d)?/gi,ut=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lt={};function dt(t,e,n){lt[t]=A(e)?e:function(t,a){return t&&n?n:e}}function ct(t,e){return c(lt,t)?lt[t](e._strict,e._locale):new RegExp(ft(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,a,r){return e||n||a||r}))))}function ft(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ht={};function gt(t,e){var n,a=e;for("string"==typeof t&&(t=[t]),u(e)&&(a=function(t,n){n[e]=O(t)}),n=0;n<t.length;n++)ht[t[n]]=a}function pt(t,e){gt(t,(function(t,n,a,r){a._w=a._w||{},e(t,a._w,a,r)}))}function bt(t,e,n){null!=e&&c(ht,t)&&ht[t](e,n._a,n,t)}function mt(t){return yt(t)?366:365}function yt(t){return t%4==0&&t%100!=0||t%400==0}Y("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),Y(0,["YY",2],0,(function(){return this.year()%100})),Y(0,["YYYY",4],0,"year"),Y(0,["YYYYY",5],0,"year"),Y(0,["YYYYYY",6,!0],0,"year"),D("year","y"),j("year",1),dt("Y",it),dt("YY",Q,K),dt("YYYY",nt,Z),dt("YYYYY",at,J),dt("YYYYYY",at,J),gt(["YYYYY","YYYYYY"],0),gt("YYYY",(function(t,e){e[0]=2===t.length?r.parseTwoDigitYear(t):O(t)})),gt("YY",(function(t,e){e[0]=r.parseTwoDigitYear(t)})),gt("Y",(function(t,e){e[0]=parseInt(t,10)})),r.parseTwoDigitYear=function(t){return O(t)+(O(t)>68?1900:2e3)};var vt,xt=_t("FullYear",!0);function _t(t,e){return function(n){return null!=n?(Ot(this,t,n),r.updateOffset(this,e),this):Tt(this,t)}}function Tt(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Ot(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&yt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=(e%12+12)%12;return t+=(e-n)/12,1===n?yt(t)?29:28:31-n%7%2}vt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},Y("M",["MM",2],"Mo",(function(){return this.month()+1})),Y("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),Y("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),D("month","M"),j("month",8),dt("M",Q),dt("MM",Q,K),dt("MMM",(function(t,e){return e.monthsShortRegex(t)})),dt("MMMM",(function(t,e){return e.monthsRegex(t)})),gt(["M","MM"],(function(t,e){e[1]=O(t)-1})),gt(["MMM","MMMM"],(function(t,e,n,a){var r=n._locale.monthsParse(t,a,n._strict);null!=r?e[1]=r:g(n).invalidMonth=t}));var St=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,It="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Nt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ct(t,e,n){var a,r,i,s=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],a=0;a<12;++a)i=h([2e3,a]),this._shortMonthsParse[a]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[a]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(r=vt.call(this._shortMonthsParse,s))?r:null:-1!==(r=vt.call(this._longMonthsParse,s))?r:null:"MMM"===e?-1!==(r=vt.call(this._shortMonthsParse,s))?r:-1!==(r=vt.call(this._longMonthsParse,s))?r:null:-1!==(r=vt.call(this._longMonthsParse,s))?r:-1!==(r=vt.call(this._shortMonthsParse,s))?r:null}function Rt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=O(e);else if(!u(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function At(t){return null!=t?(Rt(this,t),r.updateOffset(this,!0),this):Tt(this,"Month")}var kt=ut,Et=ut;function Lt(){function t(t,e){return e.length-t.length}var e,n,a=[],r=[],i=[];for(e=0;e<12;e++)n=h([2e3,e]),a.push(this.monthsShort(n,"")),r.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(a.sort(t),r.sort(t),i.sort(t),e=0;e<12;e++)a[e]=ft(a[e]),r[e]=ft(r[e]);for(e=0;e<24;e++)i[e]=ft(i[e]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Dt(t,e,n,a,r,i,s){var o;return t<100&&t>=0?(o=new Date(t+400,e,n,a,r,i,s),isFinite(o.getFullYear())&&o.setFullYear(t)):o=new Date(t,e,n,a,r,i,s),o}function Pt(t){var e;if(t<100&&t>=0){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Mt(t,e,n){var a=7+e-n;return-(7+Pt(t,0,a).getUTCDay()-e)%7+a-1}function qt(t,e,n,a,r){var i,s,o=1+7*(e-1)+(7+n-a)%7+Mt(t,a,r);return o<=0?s=mt(i=t-1)+o:o>mt(t)?(i=t+1,s=o-mt(t)):(i=t,s=o),{year:i,dayOfYear:s}}function jt(t,e,n){var a,r,i=Mt(t.year(),e,n),s=Math.floor((t.dayOfYear()-i-1)/7)+1;return s<1?a=s+Ft(r=t.year()-1,e,n):s>Ft(t.year(),e,n)?(a=s-Ft(t.year(),e,n),r=t.year()+1):(r=t.year(),a=s),{week:a,year:r}}function Ft(t,e,n){var a=Mt(t,e,n),r=Mt(t+1,e,n);return(mt(t)-a+r)/7}function Gt(t,e){return t.slice(e,7).concat(t.slice(0,e))}Y("w",["ww",2],"wo","week"),Y("W",["WW",2],"Wo","isoWeek"),D("week","w"),D("isoWeek","W"),j("week",5),j("isoWeek",5),dt("w",Q),dt("ww",Q,K),dt("W",Q),dt("WW",Q,K),pt(["w","ww","W","WW"],(function(t,e,n,a){e[a.substr(0,1)]=O(t)})),Y("d",0,"do","day"),Y("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),Y("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),Y("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),Y("e",0,0,"weekday"),Y("E",0,0,"isoWeekday"),D("day","d"),D("weekday","e"),D("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),dt("d",Q),dt("e",Q),dt("E",Q),dt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),dt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),dt("dddd",(function(t,e){return e.weekdaysRegex(t)})),pt(["dd","ddd","dddd"],(function(t,e,n,a){var r=n._locale.weekdaysParse(t,a,n._strict);null!=r?e.d=r:g(n).invalidWeekday=t})),pt(["d","e","E"],(function(t,e,n,a){e[a]=O(t)}));var Vt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),zt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Bt="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Yt(t,e,n){var a,r,i,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],a=0;a<7;++a)i=h([2e3,1]).day(a),this._minWeekdaysParse[a]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[a]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[a]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(r=vt.call(this._weekdaysParse,s))?r:null:"ddd"===e?-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:null:-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:"dddd"===e?-1!==(r=vt.call(this._weekdaysParse,s))?r:-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:"ddd"===e?-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:-1!==(r=vt.call(this._weekdaysParse,s))?r:-1!==(r=vt.call(this._minWeekdaysParse,s))?r:null:-1!==(r=vt.call(this._minWeekdaysParse,s))?r:-1!==(r=vt.call(this._weekdaysParse,s))?r:-1!==(r=vt.call(this._shortWeekdaysParse,s))?r:null}var Ht=ut,Ut=ut,Wt=ut;function Kt(){function t(t,e){return e.length-t.length}var e,n,a,r,i,s=[],o=[],u=[],l=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),a=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),i=this.weekdays(n,""),s.push(a),o.push(r),u.push(i),l.push(a),l.push(r),l.push(i);for(s.sort(t),o.sort(t),u.sort(t),l.sort(t),e=0;e<7;e++)o[e]=ft(o[e]),u[e]=ft(u[e]),l[e]=ft(l[e]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function $t(){return this.hours()%12||12}function Zt(t,e){Y(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Jt(t,e){return e._meridiemParse}Y("H",["HH",2],0,"hour"),Y("h",["hh",2],0,$t),Y("k",["kk",2],0,(function(){return this.hours()||24})),Y("hmm",0,0,(function(){return""+$t.apply(this)+F(this.minutes(),2)})),Y("hmmss",0,0,(function(){return""+$t.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)})),Y("Hmm",0,0,(function(){return""+this.hours()+F(this.minutes(),2)})),Y("Hmmss",0,0,(function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)})),Zt("a",!0),Zt("A",!1),D("hour","h"),j("hour",13),dt("a",Jt),dt("A",Jt),dt("H",Q),dt("h",Q),dt("k",Q),dt("HH",Q,K),dt("hh",Q,K),dt("kk",Q,K),dt("hmm",X),dt("hmmss",tt),dt("Hmm",X),dt("Hmmss",tt),gt(["H","HH"],3),gt(["k","kk"],(function(t,e,n){var a=O(t);e[3]=24===a?0:a})),gt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),gt(["h","hh"],(function(t,e,n){e[3]=O(t),g(n).bigHour=!0})),gt("hmm",(function(t,e,n){var a=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a)),g(n).bigHour=!0})),gt("hmmss",(function(t,e,n){var a=t.length-4,r=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a,2)),e[5]=O(t.substr(r)),g(n).bigHour=!0})),gt("Hmm",(function(t,e,n){var a=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a))})),gt("Hmmss",(function(t,e,n){var a=t.length-4,r=t.length-2;e[3]=O(t.substr(0,a)),e[4]=O(t.substr(a,2)),e[5]=O(t.substr(r))}));var Qt,Xt=_t("Hours",!0),te={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:It,monthsShort:Nt,week:{dow:0,doy:6},weekdays:Vt,weekdaysMin:Bt,weekdaysShort:zt,meridiemParse:/[ap]\.?m?\.?/i},ee={},ne={};function ae(t){return t?t.toLowerCase().replace("_","-"):t}function re(e){var a=null;if(!ee[e]&&void 0!==t&&t&&t.exports)try{a=Qt._abbr,n("RnhZ")("./"+e),ie(a)}catch(r){}return ee[e]}function ie(t,e){var n;return t&&((n=o(e)?oe(t):se(t,e))?Qt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Qt._abbr}function se(t,e){if(null!==e){var n,a=te;if(e.abbr=t,null!=ee[t])R("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),a=ee[t]._config;else if(null!=e.parentLocale)if(null!=ee[e.parentLocale])a=ee[e.parentLocale]._config;else{if(null==(n=re(e.parentLocale)))return ne[e.parentLocale]||(ne[e.parentLocale]=[]),ne[e.parentLocale].push({name:t,config:e}),null;a=n._config}return ee[t]=new E(k(a,e)),ne[t]&&ne[t].forEach((function(t){se(t.name,t.config)})),ie(t),ee[t]}return delete ee[t],null}function oe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Qt;if(!i(t)){if(e=re(t))return e;t=[t]}return function(t){for(var e,n,a,r,i=0;i<t.length;){for(e=(r=ae(t[i]).split("-")).length,n=(n=ae(t[i+1]))?n.split("-"):null;e>0;){if(a=re(r.slice(0,e).join("-")))return a;if(n&&n.length>=e&&w(r,n,!0)>=e-1)break;e--}i++}return Qt}(t)}function ue(t){var e,n=t._a;return n&&-2===g(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,g(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),g(t)._overflowWeeks&&-1===e&&(e=7),g(t)._overflowWeekday&&-1===e&&(e=8),g(t).overflow=e),t}function le(t,e,n){return null!=t?t:null!=e?e:n}function de(t){var e,n,a,i,s,o=[];if(!t._d){for(a=function(t){var e=new Date(r.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,a,r,i,s,o,u;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)i=1,s=4,n=le(e.GG,t._a[0],jt(we(),1,4).year),a=le(e.W,1),((r=le(e.E,1))<1||r>7)&&(u=!0);else{i=t._locale._week.dow,s=t._locale._week.doy;var l=jt(we(),i,s);n=le(e.gg,t._a[0],l.year),a=le(e.w,l.week),null!=e.d?((r=e.d)<0||r>6)&&(u=!0):null!=e.e?(r=e.e+i,(e.e<0||e.e>6)&&(u=!0)):r=i}a<1||a>Ft(n,i,s)?g(t)._overflowWeeks=!0:null!=u?g(t)._overflowWeekday=!0:(o=qt(n,a,r,i,s),t._a[0]=o.year,t._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(s=le(t._a[0],a[0]),(t._dayOfYear>mt(s)||0===t._dayOfYear)&&(g(t)._overflowDayOfYear=!0),n=Pt(s,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=o[e]=a[e];for(;e<7;e++)t._a[e]=o[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Pt:Dt).apply(null,o),i=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==i&&(g(t).weekdayMismatch=!0)}}var ce=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,fe=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,he=/Z|[+-]\d\d(?::?\d\d)?/,ge=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],pe=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],be=/^\/?Date\((\-?\d+)/i;function me(t){var e,n,a,r,i,s,o=t._i,u=ce.exec(o)||fe.exec(o);if(u){for(g(t).iso=!0,e=0,n=ge.length;e<n;e++)if(ge[e][1].exec(u[1])){r=ge[e][0],a=!1!==ge[e][2];break}if(null==r)return void(t._isValid=!1);if(u[3]){for(e=0,n=pe.length;e<n;e++)if(pe[e][1].exec(u[3])){i=(u[2]||" ")+pe[e][0];break}if(null==i)return void(t._isValid=!1)}if(!a&&null!=i)return void(t._isValid=!1);if(u[4]){if(!he.exec(u[4]))return void(t._isValid=!1);s="Z"}t._f=r+(i||"")+(s||""),_e(t)}else t._isValid=!1}var ye=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ve={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function xe(t){var e,n,a,r,i,s,o,u,l=ye.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(l){var d=(e=l[3],n=l[2],a=l[5],r=l[6],i=l[7],s=[(o=l[4],u=parseInt(o,10),u<=49?2e3+u:u<=999?1900+u:u),Nt.indexOf(e),parseInt(n,10),parseInt(a,10),parseInt(r,10)],i&&s.push(parseInt(i,10)),s);if(!function(t,e,n){return!t||zt.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(g(n).weekdayMismatch=!0,n._isValid=!1,!1)}(l[1],d,t))return;t._a=d,t._tzm=function(t,e,n){if(t)return ve[t];if(e)return 0;var a=parseInt(n,10),r=a%100;return(a-r)/100*60+r}(l[8],l[9],l[10]),t._d=Pt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),g(t).rfc2822=!0}else t._isValid=!1}function _e(t){if(t._f!==r.ISO_8601)if(t._f!==r.RFC_2822){t._a=[],g(t).empty=!0;var e,n,a,i,s,o=""+t._i,u=o.length,l=0;for(a=U(t._f,t._locale).match(G)||[],e=0;e<a.length;e++)(n=(o.match(ct(i=a[e],t))||[])[0])&&((s=o.substr(0,o.indexOf(n))).length>0&&g(t).unusedInput.push(s),o=o.slice(o.indexOf(n)+n.length),l+=n.length),B[i]?(n?g(t).empty=!1:g(t).unusedTokens.push(i),bt(i,n,t)):t._strict&&!n&&g(t).unusedTokens.push(i);g(t).charsLeftOver=u-l,o.length>0&&g(t).unusedInput.push(o),t._a[3]<=12&&!0===g(t).bigHour&&t._a[3]>0&&(g(t).bigHour=void 0),g(t).parsedDateParts=t._a.slice(0),g(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var a;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((a=t.isPM(n))&&e<12&&(e+=12),a||12!==e||(e=0),e):e}(t._locale,t._a[3],t._meridiem),de(t),ue(t)}else xe(t);else me(t)}function Te(t){var e=t._i,n=t._f;return t._locale=t._locale||oe(t._l),null===e||void 0===n&&""===e?b({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),_(e)?new x(ue(e)):(l(e)?t._d=e:i(n)?function(t){var e,n,a,r,i;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;r<t._f.length;r++)i=0,e=y({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[r],_e(e),p(e)&&(i+=g(e).charsLeftOver,i+=10*g(e).unusedTokens.length,g(e).score=i,(null==a||i<a)&&(a=i,n=e));f(t,n||e)}(t):n?_e(t):function(t){var e=t._i;o(e)?t._d=new Date(r.now()):l(e)?t._d=new Date(e.valueOf()):"string"==typeof e?function(t){var e=be.exec(t._i);null===e?(me(t),!1===t._isValid&&(delete t._isValid,xe(t),!1===t._isValid&&(delete t._isValid,r.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):i(e)?(t._a=d(e.slice(0),(function(t){return parseInt(t,10)})),de(t)):s(e)?function(t){if(!t._d){var e=M(t._i);t._a=d([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),de(t)}}(t):u(e)?t._d=new Date(e):r.createFromInputFallback(t)}(t),p(t)||(t._d=null),t))}function Oe(t,e,n,a,r){var o,u={};return!0!==n&&!1!==n||(a=n,n=void 0),(s(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||i(t)&&0===t.length)&&(t=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=r,u._l=n,u._i=t,u._f=e,u._strict=a,(o=new x(ue(Te(u))))._nextDay&&(o.add(1,"d"),o._nextDay=void 0),o}function we(t,e,n,a){return Oe(t,e,n,a,!1)}r.createFromInputFallback=I("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),r.ISO_8601=function(){},r.RFC_2822=function(){};var Se=I("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:b()})),Ie=I("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:b()}));function Ne(t,e){var n,a;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return we();for(n=e[0],a=1;a<e.length;++a)e[a].isValid()&&!e[a][t](n)||(n=e[a]);return n}var Ce=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Re(t){var e=M(t),n=e.year||0,a=e.quarter||0,r=e.month||0,i=e.week||e.isoWeek||0,s=e.day||0,o=e.hour||0,u=e.minute||0,l=e.second||0,d=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===vt.call(Ce,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,a=0;a<Ce.length;++a)if(t[Ce[a]]){if(n)return!1;parseFloat(t[Ce[a]])!==O(t[Ce[a]])&&(n=!0)}return!0}(e),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+s+7*i,this._months=+r+3*a+12*n,this._data={},this._locale=oe(),this._bubble()}function Ae(t){return t instanceof Re}function ke(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ee(t,e){Y(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+F(~~(t/60),2)+e+F(~~t%60,2)}))}Ee("Z",":"),Ee("ZZ",""),dt("Z",ot),dt("ZZ",ot),gt(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=De(ot,t)}));var Le=/([\+\-]|\d\d)/gi;function De(t,e){var n=(e||"").match(t);if(null===n)return null;var a=((n[n.length-1]||[])+"").match(Le)||["-",0,0],r=60*a[1]+O(a[2]);return 0===r?0:"+"===a[0]?r:-r}function Pe(t,e){var n,a;return e._isUTC?(n=e.clone(),a=(_(t)||l(t)?t.valueOf():we(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+a),r.updateOffset(n,!1),n):we(t).local()}function Me(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function qe(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var je=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Fe=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ge(t,e){var n,a,r,i,s,o,l=t,d=null;return Ae(t)?l={ms:t._milliseconds,d:t._days,M:t._months}:u(t)?(l={},e?l[e]=t:l.milliseconds=t):(d=je.exec(t))?(n="-"===d[1]?-1:1,l={y:0,d:O(d[2])*n,h:O(d[3])*n,m:O(d[4])*n,s:O(d[5])*n,ms:O(ke(1e3*d[6]))*n}):(d=Fe.exec(t))?l={y:Ve(d[2],n="-"===d[1]?-1:1),M:Ve(d[3],n),w:Ve(d[4],n),d:Ve(d[5],n),h:Ve(d[6],n),m:Ve(d[7],n),s:Ve(d[8],n)}:null==l?l={}:"object"==typeof l&&("from"in l||"to"in l)&&(i=we(l.from),s=we(l.to),r=i.isValid()&&s.isValid()?(s=Pe(s,i),i.isBefore(s)?o=ze(i,s):((o=ze(s,i)).milliseconds=-o.milliseconds,o.months=-o.months),o):{milliseconds:0,months:0},(l={}).ms=r.milliseconds,l.M=r.months),a=new Re(l),Ae(t)&&c(t,"_locale")&&(a._locale=t._locale),a}function Ve(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function ze(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Be(t,e){return function(n,a){var r;return null===a||isNaN(+a)||(R(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=a,a=r),Ye(this,Ge(n="string"==typeof n?+n:n,a),t),this}}function Ye(t,e,n,a){var i=e._milliseconds,s=ke(e._days),o=ke(e._months);t.isValid()&&(a=null==a||a,o&&Rt(t,Tt(t,"Month")+o*n),s&&Ot(t,"Date",Tt(t,"Date")+s*n),i&&t._d.setTime(t._d.valueOf()+i*n),a&&r.updateOffset(t,s||o))}Ge.fn=Re.prototype,Ge.invalid=function(){return Ge(NaN)};var He=Be(1,"add"),Ue=Be(-1,"subtract");function We(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),a=t.clone().add(n,"months");return-(n+(e-a<0?(e-a)/(a-t.clone().add(n-1,"months")):(e-a)/(t.clone().add(n+1,"months")-a)))||0}function Ke(t){var e;return void 0===t?this._locale._abbr:(null!=(e=oe(t))&&(this._locale=e),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var $e=I("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function Ze(){return this._locale}function Je(t,e){return(t%e+e)%e}function Qe(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-126227808e5:new Date(t,e,n).valueOf()}function Xe(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-126227808e5:Date.UTC(t,e,n)}function tn(t,e){Y(0,[t,t.length],0,e)}function en(t,e,n,a,r){var i;return null==t?jt(this,a,r).year:(e>(i=Ft(t,a,r))&&(e=i),nn.call(this,t,e,n,a,r))}function nn(t,e,n,a,r){var i=qt(t,e,n,a,r),s=Pt(i.year,0,i.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}Y(0,["gg",2],0,(function(){return this.weekYear()%100})),Y(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),tn("gggg","weekYear"),tn("ggggg","weekYear"),tn("GGGG","isoWeekYear"),tn("GGGGG","isoWeekYear"),D("weekYear","gg"),D("isoWeekYear","GG"),j("weekYear",1),j("isoWeekYear",1),dt("G",it),dt("g",it),dt("GG",Q,K),dt("gg",Q,K),dt("GGGG",nt,Z),dt("gggg",nt,Z),dt("GGGGG",at,J),dt("ggggg",at,J),pt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,a){e[a.substr(0,2)]=O(t)})),pt(["gg","GG"],(function(t,e,n,a){e[a]=r.parseTwoDigitYear(t)})),Y("Q",0,"Qo","quarter"),D("quarter","Q"),j("quarter",7),dt("Q",W),gt("Q",(function(t,e){e[1]=3*(O(t)-1)})),Y("D",["DD",2],"Do","date"),D("date","D"),j("date",9),dt("D",Q),dt("DD",Q,K),dt("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),gt(["D","DD"],2),gt("Do",(function(t,e){e[2]=O(t.match(Q)[0])}));var an=_t("Date",!0);Y("DDD",["DDDD",3],"DDDo","dayOfYear"),D("dayOfYear","DDD"),j("dayOfYear",4),dt("DDD",et),dt("DDDD",$),gt(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=O(t)})),Y("m",["mm",2],0,"minute"),D("minute","m"),j("minute",14),dt("m",Q),dt("mm",Q,K),gt(["m","mm"],4);var rn=_t("Minutes",!1);Y("s",["ss",2],0,"second"),D("second","s"),j("second",15),dt("s",Q),dt("ss",Q,K),gt(["s","ss"],5);var sn,on=_t("Seconds",!1);for(Y("S",0,0,(function(){return~~(this.millisecond()/100)})),Y(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),Y(0,["SSS",3],0,"millisecond"),Y(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),Y(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),Y(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),Y(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),Y(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),Y(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),D("millisecond","ms"),j("millisecond",16),dt("S",et,W),dt("SS",et,K),dt("SSS",et,$),sn="SSSS";sn.length<=9;sn+="S")dt(sn,rt);function un(t,e){e[6]=O(1e3*("0."+t))}for(sn="S";sn.length<=9;sn+="S")gt(sn,un);var ln=_t("Milliseconds",!1);Y("z",0,0,"zoneAbbr"),Y("zz",0,0,"zoneName");var dn=x.prototype;function cn(t){return t}dn.add=He,dn.calendar=function(t,e){var n=t||we(),a=Pe(n,this).startOf("day"),i=r.calendarFormat(this,a)||"sameElse",s=e&&(A(e[i])?e[i].call(this,n):e[i]);return this.format(s||this.localeData().calendar(i,this,we(n)))},dn.clone=function(){return new x(this)},dn.diff=function(t,e,n){var a,r,i;if(!this.isValid())return NaN;if(!(a=Pe(t,this)).isValid())return NaN;switch(r=6e4*(a.utcOffset()-this.utcOffset()),e=P(e)){case"year":i=We(this,a)/12;break;case"month":i=We(this,a);break;case"quarter":i=We(this,a)/3;break;case"second":i=(this-a)/1e3;break;case"minute":i=(this-a)/6e4;break;case"hour":i=(this-a)/36e5;break;case"day":i=(this-a-r)/864e5;break;case"week":i=(this-a-r)/6048e5;break;default:i=this-a}return n?i:T(i)},dn.endOf=function(t){var e;if(void 0===(t=P(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Xe:Qe;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Je(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Je(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Je(e,1e3)-1}return this._d.setTime(e),r.updateOffset(this,!0),this},dn.format=function(t){t||(t=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var e=H(this,t);return this.localeData().postformat(e)},dn.from=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ge({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},dn.fromNow=function(t){return this.from(we(),t)},dn.to=function(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ge({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},dn.toNow=function(t){return this.to(we(),t)},dn.get=function(t){return A(this[t=P(t)])?this[t]():this},dn.invalidAt=function(){return g(this).overflow},dn.isAfter=function(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},dn.isBefore=function(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},dn.isBetween=function(t,e,n,a){var r=_(t)?t:we(t),i=_(e)?e:we(e);return!!(this.isValid()&&r.isValid()&&i.isValid())&&("("===(a=a||"()")[0]?this.isAfter(r,n):!this.isBefore(r,n))&&(")"===a[1]?this.isBefore(i,n):!this.isAfter(i,n))},dn.isSame=function(t,e){var n,a=_(t)?t:we(t);return!(!this.isValid()||!a.isValid())&&("millisecond"===(e=P(e)||"millisecond")?this.valueOf()===a.valueOf():(n=a.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},dn.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},dn.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},dn.isValid=function(){return p(this)},dn.lang=$e,dn.locale=Ke,dn.localeData=Ze,dn.max=Ie,dn.min=Se,dn.parsingFlags=function(){return f({},g(this))},dn.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:q[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=M(t)),a=0;a<n.length;a++)this[n[a].unit](t[n[a].unit]);else if(A(this[t=P(t)]))return this[t](e);return this},dn.startOf=function(t){var e;if(void 0===(t=P(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Xe:Qe;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Je(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Je(e,6e4);break;case"second":e=this._d.valueOf(),e-=Je(e,1e3)}return this._d.setTime(e),r.updateOffset(this,!0),this},dn.subtract=Ue,dn.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},dn.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},dn.toDate=function(){return new Date(this.valueOf())},dn.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?H(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):A(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(n,"Z")):H(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},dn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(n+a+"-MM-DD[T]HH:mm:ss.SSS"+e+'[")]')},dn.toJSON=function(){return this.isValid()?this.toISOString():null},dn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},dn.unix=function(){return Math.floor(this.valueOf()/1e3)},dn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},dn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},dn.year=xt,dn.isLeapYear=function(){return yt(this.year())},dn.weekYear=function(t){return en.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},dn.isoWeekYear=function(t){return en.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},dn.quarter=dn.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},dn.month=At,dn.daysInMonth=function(){return wt(this.year(),this.month())},dn.week=dn.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},dn.isoWeek=dn.isoWeeks=function(t){var e=jt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},dn.weeksInYear=function(){var t=this.localeData()._week;return Ft(this.year(),t.dow,t.doy)},dn.isoWeeksInYear=function(){return Ft(this.year(),1,4)},dn.date=an,dn.day=dn.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},dn.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},dn.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},dn.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},dn.hour=dn.hours=Xt,dn.minute=dn.minutes=rn,dn.second=dn.seconds=on,dn.millisecond=dn.milliseconds=ln,dn.utcOffset=function(t,e,n){var a,i=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=De(ot,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(a=Me(this)),this._offset=t,this._isUTC=!0,null!=a&&this.add(a,"m"),i!==t&&(!e||this._changeInProgress?Ye(this,Ge(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Me(this)},dn.utc=function(t){return this.utcOffset(0,t)},dn.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Me(this),"m")),this},dn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=De(st,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},dn.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?we(t).utcOffset():0,(this.utcOffset()-t)%60==0)},dn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},dn.isLocal=function(){return!!this.isValid()&&!this._isUTC},dn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},dn.isUtc=qe,dn.isUTC=qe,dn.zoneAbbr=function(){return this._isUTC?"UTC":""},dn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},dn.dates=I("dates accessor is deprecated. Use date instead.",an),dn.months=I("months accessor is deprecated. Use month instead",At),dn.years=I("years accessor is deprecated. Use year instead",xt),dn.zone=I("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),dn.isDSTShifted=I("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),(t=Te(t))._a){var e=t._isUTC?h(t._a):we(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var fn=E.prototype;function hn(t,e,n,a){var r=oe(),i=h().set(a,e);return r[n](i,t)}function gn(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||"",null!=e)return hn(t,e,n,"month");var a,r=[];for(a=0;a<12;a++)r[a]=hn(t,a,n,"month");return r}function pn(t,e,n,a){"boolean"==typeof t?(u(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,u(e)&&(n=e,e=void 0),e=e||"");var r,i=oe(),s=t?i._week.dow:0;if(null!=n)return hn(e,(n+s)%7,a,"day");var o=[];for(r=0;r<7;r++)o[r]=hn(e,(r+s)%7,a,"day");return o}fn.calendar=function(t,e,n){var a=this._calendar[t]||this._calendar.sameElse;return A(a)?a.call(e,n):a},fn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},fn.invalidDate=function(){return this._invalidDate},fn.ordinal=function(t){return this._ordinal.replace("%d",t)},fn.preparse=cn,fn.postformat=cn,fn.relativeTime=function(t,e,n,a){var r=this._relativeTime[n];return A(r)?r(t,e,n,a):r.replace(/%d/i,t)},fn.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return A(n)?n(e):n.replace(/%s/i,e)},fn.set=function(t){var e,n;for(n in t)A(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},fn.months=function(t,e){return t?i(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||St).test(e)?"format":"standalone"][t.month()]:i(this._months)?this._months:this._months.standalone},fn.monthsShort=function(t,e){return t?i(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[St.test(e)?"format":"standalone"][t.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},fn.monthsParse=function(t,e,n){var a,r,i;if(this._monthsParseExact)return Ct.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),a=0;a<12;a++){if(r=h([2e3,a]),n&&!this._longMonthsParse[a]&&(this._longMonthsParse[a]=new RegExp("^"+this.months(r,"").replace(".","")+"$","i"),this._shortMonthsParse[a]=new RegExp("^"+this.monthsShort(r,"").replace(".","")+"$","i")),n||this._monthsParse[a]||(i="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[a]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[a].test(t))return a;if(n&&"MMM"===e&&this._shortMonthsParse[a].test(t))return a;if(!n&&this._monthsParse[a].test(t))return a}},fn.monthsRegex=function(t){return this._monthsParseExact?(c(this,"_monthsRegex")||Lt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=Et),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},fn.monthsShortRegex=function(t){return this._monthsParseExact?(c(this,"_monthsRegex")||Lt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=kt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},fn.week=function(t){return jt(t,this._week.dow,this._week.doy).week},fn.firstDayOfYear=function(){return this._week.doy},fn.firstDayOfWeek=function(){return this._week.dow},fn.weekdays=function(t,e){var n=i(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?Gt(n,this._week.dow):t?n[t.day()]:n},fn.weekdaysMin=function(t){return!0===t?Gt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},fn.weekdaysShort=function(t){return!0===t?Gt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},fn.weekdaysParse=function(t,e,n){var a,r,i;if(this._weekdaysParseExact)return Yt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),a=0;a<7;a++){if(r=h([2e3,1]).day(a),n&&!this._fullWeekdaysParse[a]&&(this._fullWeekdaysParse[a]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[a]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[a]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[a]||(i="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[a]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[a].test(t))return a;if(n&&"ddd"===e&&this._shortWeekdaysParse[a].test(t))return a;if(n&&"dd"===e&&this._minWeekdaysParse[a].test(t))return a;if(!n&&this._weekdaysParse[a].test(t))return a}},fn.weekdaysRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Ht),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},fn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},fn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Kt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Wt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},fn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},fn.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},ie("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===O(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),r.lang=I("moment.lang is deprecated. Use moment.locale instead.",ie),r.langData=I("moment.langData is deprecated. Use moment.localeData instead.",oe);var bn=Math.abs;function mn(t,e,n,a){var r=Ge(e,n);return t._milliseconds+=a*r._milliseconds,t._days+=a*r._days,t._months+=a*r._months,t._bubble()}function yn(t){return t<0?Math.floor(t):Math.ceil(t)}function vn(t){return 4800*t/146097}function xn(t){return 146097*t/4800}function _n(t){return function(){return this.as(t)}}var Tn=_n("ms"),On=_n("s"),wn=_n("m"),Sn=_n("h"),In=_n("d"),Nn=_n("w"),Cn=_n("M"),Rn=_n("Q"),An=_n("y");function kn(t){return function(){return this.isValid()?this._data[t]:NaN}}var En=kn("milliseconds"),Ln=kn("seconds"),Dn=kn("minutes"),Pn=kn("hours"),Mn=kn("days"),qn=kn("months"),jn=kn("years"),Fn=Math.round,Gn={ss:44,s:45,m:45,h:22,d:26,M:11};function Vn(t,e,n,a,r){return r.relativeTime(e||1,!!n,t,a)}var zn=Math.abs;function Bn(t){return(t>0)-(t<0)||+t}function Yn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=zn(this._milliseconds)/1e3,a=zn(this._days),r=zn(this._months);t=T(n/60),e=T(t/60),n%=60,t%=60;var i=T(r/12),s=r%=12,o=a,u=e,l=t,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var f=c<0?"-":"",h=Bn(this._months)!==Bn(c)?"-":"",g=Bn(this._days)!==Bn(c)?"-":"",p=Bn(this._milliseconds)!==Bn(c)?"-":"";return f+"P"+(i?h+i+"Y":"")+(s?h+s+"M":"")+(o?g+o+"D":"")+(u||l||d?"T":"")+(u?p+u+"H":"")+(l?p+l+"M":"")+(d?p+d+"S":"")}var Hn=Re.prototype;return Hn.isValid=function(){return this._isValid},Hn.abs=function(){var t=this._data;return this._milliseconds=bn(this._milliseconds),this._days=bn(this._days),this._months=bn(this._months),t.milliseconds=bn(t.milliseconds),t.seconds=bn(t.seconds),t.minutes=bn(t.minutes),t.hours=bn(t.hours),t.months=bn(t.months),t.years=bn(t.years),this},Hn.add=function(t,e){return mn(this,t,e,1)},Hn.subtract=function(t,e){return mn(this,t,e,-1)},Hn.as=function(t){if(!this.isValid())return NaN;var e,n,a=this._milliseconds;if("month"===(t=P(t))||"quarter"===t||"year"===t)switch(n=this._months+vn(e=this._days+a/864e5),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(xn(this._months)),t){case"week":return e/7+a/6048e5;case"day":return e+a/864e5;case"hour":return 24*e+a/36e5;case"minute":return 1440*e+a/6e4;case"second":return 86400*e+a/1e3;case"millisecond":return Math.floor(864e5*e)+a;default:throw new Error("Unknown unit "+t)}},Hn.asMilliseconds=Tn,Hn.asSeconds=On,Hn.asMinutes=wn,Hn.asHours=Sn,Hn.asDays=In,Hn.asWeeks=Nn,Hn.asMonths=Cn,Hn.asQuarters=Rn,Hn.asYears=An,Hn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*O(this._months/12):NaN},Hn._bubble=function(){var t,e,n,a,r,i=this._milliseconds,s=this._days,o=this._months,u=this._data;return i>=0&&s>=0&&o>=0||i<=0&&s<=0&&o<=0||(i+=864e5*yn(xn(o)+s),s=0,o=0),u.milliseconds=i%1e3,t=T(i/1e3),u.seconds=t%60,e=T(t/60),u.minutes=e%60,n=T(e/60),u.hours=n%24,s+=T(n/24),o+=r=T(vn(s)),s-=yn(xn(r)),a=T(o/12),o%=12,u.days=s,u.months=o,u.years=a,this},Hn.clone=function(){return Ge(this)},Hn.get=function(t){return t=P(t),this.isValid()?this[t+"s"]():NaN},Hn.milliseconds=En,Hn.seconds=Ln,Hn.minutes=Dn,Hn.hours=Pn,Hn.days=Mn,Hn.weeks=function(){return T(this.days()/7)},Hn.months=qn,Hn.years=jn,Hn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var a=Ge(t).abs(),r=Fn(a.as("s")),i=Fn(a.as("m")),s=Fn(a.as("h")),o=Fn(a.as("d")),u=Fn(a.as("M")),l=Fn(a.as("y")),d=r<=Gn.ss&&["s",r]||r<Gn.s&&["ss",r]||i<=1&&["m"]||i<Gn.m&&["mm",i]||s<=1&&["h"]||s<Gn.h&&["hh",s]||o<=1&&["d"]||o<Gn.d&&["dd",o]||u<=1&&["M"]||u<Gn.M&&["MM",u]||l<=1&&["y"]||["yy",l];return d[2]=e,d[3]=+t>0,d[4]=n,Vn.apply(null,d)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},Hn.toISOString=Yn,Hn.toString=Yn,Hn.toJSON=Yn,Hn.locale=Ke,Hn.localeData=Ze,Hn.toIsoString=I("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Yn),Hn.lang=$e,Y("X",0,0,"unix"),Y("x",0,0,"valueOf"),dt("x",it),dt("X",/[+-]?\d+(\.\d{1,3})?/),gt("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),gt("x",(function(t,e,n){n._d=new Date(O(t))})),r.version="2.24.0",e=we,r.fn=dn,r.min=function(){var t=[].slice.call(arguments,0);return Ne("isBefore",t)},r.max=function(){var t=[].slice.call(arguments,0);return Ne("isAfter",t)},r.now=function(){return Date.now?Date.now():+new Date},r.utc=h,r.unix=function(t){return we(1e3*t)},r.months=function(t,e){return gn(t,e,"months")},r.isDate=l,r.locale=ie,r.invalid=b,r.duration=Ge,r.isMoment=_,r.weekdays=function(t,e,n){return pn(t,e,n,"weekdays")},r.parseZone=function(){return we.apply(null,arguments).parseZone()},r.localeData=oe,r.isDuration=Ae,r.monthsShort=function(t,e){return gn(t,e,"monthsShort")},r.weekdaysMin=function(t,e,n){return pn(t,e,n,"weekdaysMin")},r.defineLocale=se,r.updateLocale=function(t,e){if(null!=e){var n,a,r=te;null!=(a=re(t))&&(r=a._config),(n=new E(e=k(r,e))).parentLocale=ee[t],ee[t]=n,ie(t)}else null!=ee[t]&&(null!=ee[t].parentLocale?ee[t]=ee[t].parentLocale:null!=ee[t]&&delete ee[t]);return ee[t]},r.locales=function(){return N(ee)},r.weekdaysShort=function(t,e,n){return pn(t,e,n,"weekdaysShort")},r.normalizeUnits=P,r.relativeTimeRounding=function(t){return void 0===t?Fn:"function"==typeof t&&(Fn=t,!0)},r.relativeTimeThreshold=function(t,e){return void 0!==Gn[t]&&(void 0===e?Gn[t]:(Gn[t]=e,"s"===t&&(Gn.ss=e-1),!0))},r.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},r.prototype=dn,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()}).call(this,n("YuTi")(t))},wg0c:function(t,e,n){var a=n("2oRo"),r=n("WKiH").trim,i=n("WJkJ"),s=a.parseInt,o=/^[+-]?0[Xx]/,u=8!==s(i+"08")||22!==s(i+"0x16");t.exports=u?function(t,e){var n=r(String(t));return s(n,e>>>0||(o.test(n)?16:10))}:s},wig9:function(t,e){t.exports=function(t){for(var e=-1,n=null==t?0:t.length,a=0,r=[];++e<n;){var i=t[e];i&&(r[a++]=i)}return r}},wnGv:function(t,e,n){"use strict";n.d(e,"a",(function(){return d}));var a=n("8Y7J"),r=n("s7LF"),i=n("LvDl"),s=n("oxzT"),o=n("QFaf"),u=n("DNAf"),l=n("a96k");class d{constructor(t){this.i18n=t,this.data=[],this.options=[],this.messages=new u.a({},this.i18n),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new a.EventEmitter,this.Object=Object,this.filteredOptions=[],this.icons=s.a}ngOnInit(){this.initFilter(),this.data.length>0&&this.initMissingOptions(),this.options=i.sortBy(this.options,["name"]),this.updateOptions()}initFilter(){this.filter=new r.i("",{validators:this.customBadgeValidators}),this.form=new o.a({filter:this.filter}),this.filteredOptions=[...this.options||[]]}initMissingOptions(){const t=this.options.map(t=>t.name);this.data.filter(e=>-1===t.indexOf(e)).forEach(t=>this.addOption(t)),this.forceOptionsToReflectData()}addOption(t){this.options.push(new l.a(!1,t,"")),this.options=i.sortBy(this.options,["name"]),this.triggerSelection(this.options.find(e=>e.name===t))}triggerSelection(t){!t||this.selectionLimit&&!t.selected&&this.data.length>=this.selectionLimit||(t.selected=!t.selected,this.updateOptions(),this.selection.emit({option:t}))}updateOptions(){this.data.splice(0,this.data.length),this.options.forEach(t=>{t.selected&&this.data.push(t.name)}),this.updateFilter()}updateFilter(){this.filteredOptions=this.options.filter(t=>t.name.includes(this.filter.value))}forceOptionsToReflectData(){this.options.forEach(t=>{-1!==this.data.indexOf(t.name)&&(t.selected=!0)})}ngOnChanges(){this.filter&&this.updateFilter(),this.options&&this.data&&0!==this.data.length&&this.forceOptionsToReflectData()}selectOption(){0===this.filteredOptions.length?this.addCustomOption():(this.triggerSelection(this.filteredOptions[0]),this.resetFilter())}addCustomOption(){this.isCreatable()&&(this.addOption(this.filter.value),this.resetFilter())}isCreatable(){return this.customBadges&&this.filter.valid&&this.filter.value.length>0&&this.filteredOptions.every(t=>t.name!==this.filter.value)}resetFilter(){this.filter.setValue(""),this.updateFilter()}removeItem(t){this.triggerSelection(this.options.find(e=>e.name===t&&e.selected))}}},woSy:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("f95s"),i=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s},s=function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)},o=function(){function t(){}return t.prototype.onDrop=function(t){this.node.mouseAction("drop",t.event,{from:t.element,to:{parent:this.node,index:this.dropIndex}})},t.prototype.allowDrop=function(t,e){return this.node.options.allowDrop(t,{parent:this.node,index:this.dropIndex},e)},i([Object(a.Input)(),s("design:type",r.a)],t.prototype,"node",void 0),i([Object(a.Input)(),s("design:type",Number)],t.prototype,"dropIndex",void 0),i([Object(a.Component)({selector:"TreeNodeDropSlot, tree-node-drop-slot",encapsulation:a.ViewEncapsulation.None,styles:[],template:'\n    <div\n      class="node-drop-slot"\n      (treeDrop)="onDrop($event)"\n      [treeAllowDrop]="allowDrop.bind(this)"\n      [allowDragoverStyling]="true">\n    </div>\n  '})],t)}()},wrZu:function(t,e,n){var a=n("+K+b"),r=n("XYm9"),i=n("b2z7"),s=n("otv/"),o=n("yP5f");t.exports=function(t,e,n){var u=t.constructor;switch(e){case"[object ArrayBuffer]":return a(t);case"[object Boolean]":case"[object Date]":return new u(+t);case"[object DataView]":return r(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return o(t,n);case"[object Map]":return new u;case"[object Number]":case"[object String]":return new u(t);case"[object RegExp]":return i(t);case"[object Set]":return new u;case"[object Symbol]":return s(t)}}},x38r:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t.bold="bold",t.sparkline="sparkline",t.perSecond="perSecond",t.checkIcon="checkIcon",t.routerLink="routerLink",t.executing="executing",t.classAdding="classAdding",t.badge="badge",t.map="map",t.truncate="truncate",t}({})},x6pH:function(t,e,n){!function(t){"use strict";t.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(t){return 2===t?"שעתיים":t+" שעות"},d:"יום",dd:function(t){return 2===t?"יומיים":t+" ימים"},M:"חודש",MM:function(t){return 2===t?"חודשיים":t+" חודשים"},y:"שנה",yy:function(t){return 2===t?"שנתיים":t%10==0&&10!==t?t+" שנה":t+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(t){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(t)},meridiem:function(t,e,n){return t<5?"לפנות בוקר":t<10?"בבוקר":t<12?n?'לפנה"צ':"לפני הצהריים":t<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n("wd/R"))},xDBR:function(t,e){t.exports=!1},xSw7:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("Fgil"),i=n("aXbf"),s=n("o4+5"),o=n("SVse"),u=n("978R"),l=n("z/SZ"),d=n("2uy1");n("GgAd"),n.d(e,"a",(function(){return c})),n.d(e,"b",(function(){return h}));var c=a["ɵcrt"]({encapsulation:0,styles:[[".bg-info[_ngcontent-%COMP%]{background-color:#2b99a8!important}.bg-freespace[_ngcontent-%COMP%]{background-color:#d1d1d1!important}.progress[_ngcontent-%COMP%]{height:20px;position:relative;margin-bottom:0}.progress[_ngcontent-%COMP%]   div.progress-bar[_ngcontent-%COMP%]{position:static}.progress[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{position:absolute;display:block;width:100%;color:#000;font-weight:400}"]],data:{}});function f(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,16,"table",[],null,null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](2,0,null,null,1,"td",[["class","text-left"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Used: "])),(t()(),a["ɵeld"](4,0,null,null,4,"td",[["class","text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](5,0,null,null,3,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](6,null,[" ",""])),a["ɵppd"](7,1),a["ɵppd"](8,1),(t()(),a["ɵeld"](9,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),a["ɵeld"](10,0,null,null,1,"td",[["class","text-left"]],null,null,null,null,null)),(t()(),a["ɵted"](-1,null,["Free: "])),(t()(),a["ɵeld"](12,0,null,null,4,"td",[["class","'text-right"]],null,null,null,null,null)),(t()(),a["ɵeld"](13,0,null,null,3,"strong",[],null,null,null,null,null)),(t()(),a["ɵted"](14,null,["",""])),a["ɵppd"](15,1),a["ɵppd"](16,1)],null,(function(t,e){var n=e.component,r=a["ɵunv"](e,6,0,n.isBinary?t(e,7,0,a["ɵnov"](e.parent,0),n.used):t(e,8,0,a["ɵnov"](e.parent,1),n.used));t(e,6,0,r);var i=a["ɵunv"](e,14,0,n.isBinary?t(e,15,0,a["ɵnov"](e.parent,0),n.total-n.used):t(e,16,0,a["ɵnov"](e.parent,1),n.total-n.used));t(e,14,0,i)}))}function h(t){return a["ɵvid"](0,[a["ɵpid"](0,r.a,[i.a]),a["ɵpid"](0,s.a,[i.a]),a["ɵpid"](0,o.DecimalPipe,[a.LOCALE_ID]),(t()(),a["ɵand"](0,[["usageTooltipTpl",2]],null,0,null,f)),(t()(),a["ɵeld"](4,16777216,null,null,6,"div",[["class","progress"],["data-placement","left"]],null,null,null,null,null)),a["ɵdid"](5,212992,null,0,u.c,[a.ViewContainerRef,l.a,u.a,a.ElementRef,a.Renderer2,d.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(t()(),a["ɵeld"](6,0,null,null,3,"div",[["class","progress-bar bg-info"],["role","progressbar"]],[[4,"width",null]],null,null,null,null)),(t()(),a["ɵeld"](7,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),a["ɵted"](8,null,["","%"])),a["ɵppd"](9,2),(t()(),a["ɵeld"](10,0,null,null,0,"div",[["class","progress-bar bg-freespace"],["role","progressbar"]],[[4,"width",null]],null,null,null,null))],(function(t,e){t(e,5,0,a["ɵnov"](e,3),"left")}),(function(t,e){var n=e.component;t(e,6,0,n.usedPercentage+"%");var r=a["ɵunv"](e,8,0,t(e,9,0,a["ɵnov"](e,2),n.usedPercentage,"1.0-"+n.decimals));t(e,8,0,r),t(e,10,0,n.freePercentage+"%")}))}},xTzq:function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return i}));var a=n("LvDl");function r(...t){switch(t.length){case 1:return s.apply(void 0,t);case 3:return o.apply(void 0,t);default:throw new Error}}function i(t,e,n){const a=`__ignore_${e}`;Array.isArray(t[a])?t[a].push(n):t[a]=[n]}function s(t){for(const e of Object.getOwnPropertyNames(t.prototype)){const n=Object.getOwnPropertyDescriptor(t.prototype,e),a="constructor"===e;n.value instanceof Function&&!a&&(o(t.prototype,e,n),Object.defineProperty(t.prototype,e,n))}}function o(t,e,n){void 0===n&&(n=Object.getOwnPropertyDescriptor(t,e));const r=n.value;n.value=function(){const n=`__ignore_${e}`,i=t[n]||[],s=[];for(let t=0;t<arguments.length;t++)s[t]=a.isString(arguments[t])&&-1===i.indexOf(t)?encodeURIComponent(arguments[t]):arguments[t];const o=r.apply(this,s);return o}}},xYSL:function(t,e){t.exports=function(t,e){return t.has(e)}},xbPD:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("7o/Q");function r(t=null){return e=>e.lift(new i(t))}class i{constructor(t){this.defaultValue=t}call(t,e){return e.subscribe(new s(t,this.defaultValue))}}class s extends a.a{constructor(t,e){super(t),this.defaultValue=e,this.isEmpty=!0}_next(t){this.isEmpty=!1,this.destination.next(t)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}},xgIS:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("HDdC"),r=n("DH7j"),i=n("n6bG"),s=n("lJxs");function o(t,e,n,u){return Object(i.a)(n)&&(u=n,n=void 0),u?o(t,e,n).pipe(Object(s.a)(t=>Object(r.a)(t)?u(...t):u(t))):new a.a(a=>{!function t(e,n,a,r,i){let s;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){const t=e;e.addEventListener(n,a,i),s=()=>t.removeEventListener(n,a,i)}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){const t=e;e.on(n,a),s=()=>t.off(n,a)}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){const t=e;e.addListener(n,a),s=()=>t.removeListener(n,a)}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(let s=0,o=e.length;s<o;s++)t(e[s],n,a,r,i)}r.add(s)}(t,e,(function(t){a.next(arguments.length>1?Array.prototype.slice.call(arguments):t)}),a,n)})}},"xj/R":function(t,e,n){"use strict";function a(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function r(t){return"string"==typeof t}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t){return t&&t.getTime&&!isNaN(t.getTime())}function o(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function f(t){return void 0===t}function h(t){const e=+t;let n=0;return 0!==e&&isFinite(e)&&(n=a(e)),n}n.d(e,"a",(function(){return $e})),n.d(e,"b",(function(){return Je})),n.d(e,"c",(function(){return Jt})),n.d(e,"d",(function(){return Tt})),n.d(e,"e",(function(){return nn})),n.d(e,"f",(function(){return xe})),n.d(e,"g",(function(){return an})),n.d(e,"h",(function(){return R})),n.d(e,"i",(function(){return L})),n.d(e,"j",(function(){return E})),n.d(e,"k",(function(){return Qt})),n.d(e,"l",(function(){return k})),n.d(e,"m",(function(){return rn})),n.d(e,"n",(function(){return Re})),n.d(e,"o",(function(){return l})),n.d(e,"p",(function(){return Ae})),n.d(e,"q",(function(){return i})),n.d(e,"r",(function(){return s})),n.d(e,"s",(function(){return ke})),n.d(e,"t",(function(){return D})),n.d(e,"u",(function(){return Ee})),n.d(e,"v",(function(){return q})),n.d(e,"w",(function(){return P})),n.d(e,"x",(function(){return M})),n.d(e,"y",(function(){return sn})),n.d(e,"z",(function(){return on})),n.d(e,"A",(function(){return un})),n.d(e,"B",(function(){return Ie})),n.d(e,"C",(function(){return hn})),n.d(e,"D",(function(){return gn})),n.d(e,"E",(function(){return bt})),n.d(e,"F",(function(){return pt})),n.d(e,"G",(function(){return _t})),n.d(e,"H",(function(){return Ne})),n.d(e,"I",(function(){return pn}));const g={},p={date:"day",hour:"hours",minute:"minutes",second:"seconds",millisecond:"milliseconds"};function b(t,e){const n=t.toLowerCase();let a=t;n in p&&(a=p[n]),g[n]=g[`${n}s`]=g[e]=a}function m(t){return r(t)?g[t]||g[t.toLowerCase()]:void 0}function y(t,e,n){const a=`${Math.abs(t)}`;return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-a.length)).toString().substr(1)+a}let v={},x={};const _=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;function T(t,e,n,a){t&&(x[t]=a),e&&(x[e[0]]=function(){return y(a.apply(null,arguments),e[1],e[2])}),n&&(x[n]=function(e,n){return n.locale.ordinal(a.apply(null,arguments),t)})}function O(t,e,n){const a=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(a.getUTCFullYear())&&a.setUTCFullYear(t),a}function w(t,e=0,n=1,a=0,r=0,i=0,s=0){const o=new Date(t,e,n,a,r,i,s);return t<100&&t>=0&&isFinite(o.getFullYear())&&o.setFullYear(t),o}function S(t,e=!1){return e?t.getUTCHours():t.getHours()}function I(t,e=!1){return e?t.getUTCMinutes():t.getMinutes()}function N(t,e=!1){return e?t.getUTCSeconds():t.getSeconds()}function C(t,e=!1){return e?t.getUTCMilliseconds():t.getMilliseconds()}function R(t,e=!1){return e?t.getUTCDay():t.getDay()}function A(t,e=!1){return e?t.getUTCDate():t.getDate()}function k(t,e=!1){return e?t.getUTCMonth():t.getMonth()}function E(t,e=!1){return e?t.getUTCFullYear():t.getFullYear()}function L(t){return w(t.getFullYear(),t.getMonth(),1,t.getHours(),t.getMinutes(),t.getSeconds())}function D(t,e){return t.getDay()===e}function P(t,e){return!(!t||!e)&&M(t,e)&&k(t)===k(e)}function M(t,e){return!(!t||!e)&&E(t)===E(e)}function q(t,e){return!(!t||!e)&&M(t,e)&&P(t,e)&&A(t)===A(e)}const j=/\d/,F=/\d\d/,G=/\d{3}/,V=/\d{4}/,z=/[+-]?\d{6}/,B=/\d\d?/,Y=/\d\d\d\d?/,H=/\d\d\d\d\d\d?/,U=/\d{1,3}/,W=/\d{1,4}/,K=/[+-]?\d{1,6}/,$=/\d+/,Z=/[+-]?\d+/,J=/Z|[+-]\d\d(?::?\d\d)?/gi,Q=/[+-]?\d+(\.\d{1,3})?/,X=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,tt={};function et(t,e,n){tt[t]=o(e)?e:function(t,a){return t&&n?n:e}}function nt(t,e){return d(tt,t)?tt[t](!1,e):new RegExp(at(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(t,e,n,a,r)=>e||n||a||r)))}function at(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}const rt={};function it(t,e){const n=r(t)?[t]:t;let a=e;if(u(e)&&(a=function(t,n,a){return n[e]=h(t),a}),l(n)&&o(a)){let t;for(t=0;t<n.length;t++)rt[n[t]]=a}}function st(t,e){it(t,(function(t,n,a,r){return a._w=a._w||{},e(t,a._w,a,r)}))}function ot(t,e,n){return null!=e&&d(rt,t)&&rt[t](e,n._a,n,t),n}function ut(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function lt(t,e){return E(t,e.isUTC).toString()}function dt(t){return h(t)+(h(t)>68?1900:2e3)}function ct(t){return ft(t)?366:365}function ft(t){return t%4==0&&t%100!=0||t%400==0}function ht(t,e){if(isNaN(t)||isNaN(e))return NaN;const n=(e%12+12)%12;return 1===n?ft(t+(e-n)/12)?29:28:31-n%7%2}const gt={year:0,month:0,day:0,hour:0,minute:0,seconds:0};function pt(t,e){const n=Object.assign({},gt,e),a=t.getFullYear()+(n.year||0),r=t.getMonth()+(n.month||0);let i=t.getDate()+(n.day||0);return n.month&&!n.day&&(i=Math.min(i,ht(a,r))),w(a,r,i,t.getHours()+(n.hour||0),t.getMinutes()+(n.minute||0),t.getSeconds()+(n.seconds||0))}function bt(t,e){return w(mt(t.getFullYear(),e.year),mt(t.getMonth(),e.month),1,mt(t.getHours(),e.hour),mt(t.getMinutes(),e.minute),mt(t.getSeconds(),e.seconds),mt(t.getMilliseconds(),e.milliseconds))}function mt(t,e){return u(e)?e:t}function yt(t,e,n){const a=Math.min(A(t),ht(E(t),e));return n?t.setUTCMonth(e,a):t.setMonth(e,a),t}function vt(t,e,n){return n?t.setUTCDate(e):t.setDate(e),t}function xt(t){return new Date(t.getTime())}function _t(t,e,n){const a=xt(t);switch(e){case"year":yt(a,0,n);case"quarter":case"month":vt(a,1,n);case"week":case"isoWeek":case"day":case"date":!function(t,e,n){n?t.setUTCHours(0):t.setHours(0)}(a,0,n);case"hours":!function(t,e,n){n?t.setUTCMinutes(0):t.setMinutes(0)}(a,0,n);case"minutes":!function(t,e,n){n?t.setUTCSeconds(0):t.setSeconds(0)}(a,0,n);case"seconds":!function(t,e,n){n?t.setUTCMilliseconds(0):t.setMilliseconds(0)}(a,0,n)}return"week"===e&&function(t,e,n={}){je(t,0-ze(t,n.locale,n.isUTC),"day")}(a,0,{isUTC:n}),"isoWeek"===e&&function(t,e,n={}){const a=function(t,e=Qt()){return r(t)?e.weekdaysParse(t)%7||7:u(t)&&isNaN(t)?null:t}(1,n.locale);Ge(t,Ve(t)%7?a:a-7)}(a),"quarter"===e&&yt(a,3*Math.floor(k(a,n)/3),n),a}function Tt(t,e,n){let a=e;return"date"===a&&(a="day"),function(t,e,n,a){return Fe(t,Pe(1,"milliseconds"),-1,a)}(je(_t(t,a,n),1,"isoWeek"===a?"week":a,n),0,0,n)}function Ot(t,e){const n=+_t(t,"day",e),a=+_t(t,"year",e);return Math.round((n-a)/864e5)+1}function wt(t,e,n){const a=e-n+7;return-(O(t,0,a).getUTCDay()-e+7)%7+a-1}function St(t,e,n,a){const r=wt(E(t,a),e,n),i=Math.floor((Ot(t,a)-r-1)/7)+1;let s,o;return i<1?(o=E(t,a)-1,s=i+It(o,e,n)):i>It(E(t,a),e,n)?(s=i-It(E(t,a),e,n),o=E(t,a)+1):(o=E(t,a),s=i),{week:s,year:o}}function It(t,e,n){const a=wt(t,e,n),r=wt(t+1,e,n);return(ct(t)-a+r)/7}const Nt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ct="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Rt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),At="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),kt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Et={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Lt=X,Dt=X;class Pt{constructor(t){t&&this.set(t)}set(t){let e;for(e in t){if(!t.hasOwnProperty(e))continue;const n=t[e];this[o(n)?e:`_${e}`]=n}this._config=t}calendar(t,e,n){const a=this._calendar[t]||this._calendar.sameElse;return o(a)?a.call(null,e,n):a}longDateFormat(t){const e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])}get invalidDate(){return this._invalidDate}set invalidDate(t){this._invalidDate=t}ordinal(t,e){return this._ordinal.replace("%d",t.toString(10))}preparse(t){return t}preinput(t){return t}postvalue(t){return t}postformat(t){return t}relativeTime(t,e,n,a){const r=this._relativeTime[n];return o(r)?r(t,e,n,a):r.replace(/%d/i,t.toString(10))}pastFuture(t,e){const n=this._relativeTime[t>0?"future":"past"];return o(n)?n(e):n.replace(/%s/i,e)}months(t,e,n=!1){if(!t)return l(this._months)?this._months:this._months.standalone;if(l(this._months))return this._months[k(t,n)];const a=(this._months.isFormat||Nt).test(e)?"format":"standalone";return this._months[a][k(t,n)]}monthsShort(t,e,n=!1){if(!t)return l(this._monthsShort)?this._monthsShort:this._monthsShort.standalone;if(l(this._monthsShort))return this._monthsShort[k(t,n)];const a=Nt.test(e)?"format":"standalone";return this._monthsShort[a][k(t,n)]}monthsParse(t,e,n){let a,r,i;if(this._monthsParseExact)return this.handleMonthStrictParse(t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=new Date(Date.UTC(2e3,i)),n&&!this._longMonthsParse[i]){const t=this.months(a,"",!0).replace(".",""),e=this.monthsShort(a,"",!0).replace(".","");this._longMonthsParse[i]=new RegExp(`^${t}$`,"i"),this._shortMonthsParse[i]=new RegExp(`^${e}$`,"i")}if(n||this._monthsParse[i]||(r=`^${this.months(a,"",!0)}|^${this.monthsShort(a,"",!0)}`,this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}monthsRegex(t){return this._monthsParseExact?(d(this,"_monthsRegex")||this.computeMonthsParse(),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Dt),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}monthsShortRegex(t){return this._monthsParseExact?(d(this,"_monthsRegex")||this.computeMonthsParse(),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Lt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}week(t,e){return St(t,this._week.dow,this._week.doy,e).week}firstDayOfWeek(){return this._week.dow}firstDayOfYear(){return this._week.doy}weekdays(t,e,n){if(!t)return l(this._weekdays)?this._weekdays:this._weekdays.standalone;if(l(this._weekdays))return this._weekdays[R(t,n)];const a=this._weekdays.isFormat.test(e)?"format":"standalone";return this._weekdays[a][R(t,n)]}weekdaysMin(t,e,n){return t?this._weekdaysMin[R(t,n)]:this._weekdaysMin}weekdaysShort(t,e,n){return t?this._weekdaysShort[R(t,n)]:this._weekdaysShort}weekdaysParse(t,e,n){let a,r;if(this._weekdaysParseExact)return this.handleWeekStrictParse(t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),a=0;a<7;a++){const i=Ge(new Date(Date.UTC(2e3,1)),a,null,!0);if(n&&!this._fullWeekdaysParse[a]&&(this._fullWeekdaysParse[a]=new RegExp(`^${this.weekdays(i,"",!0).replace(".",".?")}$`,"i"),this._shortWeekdaysParse[a]=new RegExp(`^${this.weekdaysShort(i,"",!0).replace(".",".?")}$`,"i"),this._minWeekdaysParse[a]=new RegExp(`^${this.weekdaysMin(i,"",!0).replace(".",".?")}$`,"i")),this._weekdaysParse[a]||(r=`^${this.weekdays(i,"",!0)}|^${this.weekdaysShort(i,"",!0)}|^${this.weekdaysMin(i,"",!0)}`,this._weekdaysParse[a]=new RegExp(r.replace(".",""),"i")),!(l(this._fullWeekdaysParse)&&l(this._shortWeekdaysParse)&&l(this._minWeekdaysParse)&&l(this._weekdaysParse)))return;if(n&&"dddd"===e&&this._fullWeekdaysParse[a].test(t))return a;if(n&&"ddd"===e&&this._shortWeekdaysParse[a].test(t))return a;if(n&&"dd"===e&&this._minWeekdaysParse[a].test(t))return a;if(!n&&this._weekdaysParse[a].test(t))return a}}weekdaysRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=X),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}weekdaysShortRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=X),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}weekdaysMinRegex(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||this.computeWeekdaysParse(),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=X),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}isPM(t){return"p"===t.toLowerCase().charAt(0)}meridiem(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}formatLongDate(t){this._longDateFormat=this._longDateFormat?this._longDateFormat:Et;const e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,t=>t.slice(1)),this._longDateFormat[t])}handleMonthStrictParse(t,e,n){const a=t.toLocaleLowerCase();let r,i,s;if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)s=new Date(2e3,r),this._shortMonthsParse[r]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(s,"").toLocaleLowerCase();return n?"MMM"===e?(i=this._shortMonthsParse.indexOf(a),-1!==i?i:null):(i=this._longMonthsParse.indexOf(a),-1!==i?i:null):"MMM"===e?(i=this._shortMonthsParse.indexOf(a),-1!==i?i:(i=this._longMonthsParse.indexOf(a),-1!==i?i:null)):(i=this._longMonthsParse.indexOf(a),-1!==i?i:(i=this._shortMonthsParse.indexOf(a),-1!==i?i:null))}handleWeekStrictParse(t,e,n){let a;const r=t.toLocaleLowerCase();if(!this._weekdaysParse){let t;for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],t=0;t<7;++t){const e=Ge(new Date(Date.UTC(2e3,1)),t,null,!0);this._minWeekdaysParse[t]=this.weekdaysMin(e).toLocaleLowerCase(),this._shortWeekdaysParse[t]=this.weekdaysShort(e).toLocaleLowerCase(),this._weekdaysParse[t]=this.weekdays(e,"").toLocaleLowerCase()}}if(l(this._weekdaysParse)&&l(this._shortWeekdaysParse)&&l(this._minWeekdaysParse))return n?"dddd"===e?(a=this._weekdaysParse.indexOf(r),-1!==a?a:null):"ddd"===e?(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:null):(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null):"dddd"===e?(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null))):"ddd"===e?(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:null))):(a=this._minWeekdaysParse.indexOf(r),-1!==a?a:(a=this._weekdaysParse.indexOf(r),-1!==a?a:(a=this._shortWeekdaysParse.indexOf(r),-1!==a?a:null)))}computeMonthsParse(){const t=[],e=[],n=[];let a,r;for(r=0;r<12;r++)a=new Date(2e3,r),t.push(this.monthsShort(a,"")),e.push(this.months(a,"")),n.push(this.months(a,"")),n.push(this.monthsShort(a,""));for(t.sort(Mt),e.sort(Mt),n.sort(Mt),r=0;r<12;r++)t[r]=at(t[r]),e[r]=at(e[r]);for(r=0;r<24;r++)n[r]=at(n[r]);this._monthsRegex=new RegExp(`^(${n.join("|")})`,"i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(`^(${e.join("|")})`,"i"),this._monthsShortStrictRegex=new RegExp(`^(${t.join("|")})`,"i")}computeWeekdaysParse(){const t=[],e=[],n=[],a=[];let r;for(r=0;r<7;r++){const i=Ge(new Date(Date.UTC(2e3,1)),r,null,!0),s=this.weekdaysMin(i),o=this.weekdaysShort(i),u=this.weekdays(i);t.push(s),e.push(o),n.push(u),a.push(s),a.push(o),a.push(u)}for(t.sort(Mt),e.sort(Mt),n.sort(Mt),a.sort(Mt),r=0;r<7;r++)e[r]=at(e[r]),n[r]=at(n[r]),a[r]=at(a[r]);this._weekdaysRegex=new RegExp(`^(${a.join("|")})`,"i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(`^(${n.join("|")})`,"i"),this._weekdaysShortStrictRegex=new RegExp(`^(${e.join("|")})`,"i"),this._weekdaysMinStrictRegex=new RegExp(`^(${t.join("|")})`,"i")}}function Mt(t,e){return e.length-t.length}const qt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:Et,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ct,monthsShort:Rt,week:{dow:0,doy:6},weekdays:At,weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysShort:kt,meridiemParse:/[ap]\.?m?\.?/i};function jt(t,e,n){const a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length);let i,s=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&h(t[i])!==h(e[i]))&&s++;return s+r}function Ft(t,e){T(null,[t,t.length,!1],null,e)}function Gt(t,e){return zt(t,e.locale).toString()}function Vt(t){return Bt(t).toString()}function zt(t,e=Qt(),n){return St(t,e.firstDayOfWeek(),e.firstDayOfYear(),n).year}function Bt(t,e){return St(t,1,4,e).year}function Yt(t,e){T(t,null,null,(function(t,n){let a=function(t,e={}){return e._isUTC?e._offset||0:function(t){return 15*-Math.round(t.getTimezoneOffset()/15)}(t)}(t,{_isUTC:n.isUTC,_offset:n.offset}),r="+";return a<0&&(a=-a,r="-"),r+y(~~(a/60),2)+e+y(~~a%60,2)}))}const Ht=/([\+\-]|\d\d)/gi,Ut={},Wt={};let Kt;function $t(t){return t?t.toLowerCase().replace("_","-"):t}function Zt(t,e){let n;return t&&(f(e)?n=Qt(t):r(t)&&(n=Jt(t,e)),n&&(Kt=n)),Kt&&Kt._abbr}function Jt(t,e){if(null===e)return delete Ut[t],Kt=Qt("en"),null;if(!e)return;let n=qt;if(e.abbr=t,null!=e.parentLocale){if(null==Ut[e.parentLocale])return Wt[e.parentLocale]||(Wt[e.parentLocale]=[]),Wt[e.parentLocale].push({name:t,config:e}),null;n=Ut[e.parentLocale]._config}return Ut[t]=new Pt(function(t,e){const n=Object.assign({},t);for(const a in e)d(e,a)&&(c(t[a])&&c(e[a])?(n[a]={},Object.assign(n[a],t[a]),Object.assign(n[a],e[a])):null!=e[a]?n[a]=e[a]:delete n[a]);for(const a in t)d(t,a)&&!d(e,a)&&c(t[a])&&(n[a]=Object.assign({},n[a]));return n}(n,e)),Wt[t]&&Wt[t].forEach((function(t){Jt(t.name,t.config)})),Zt(t),Ut[t]}function Qt(t){return Ut.en||(Zt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal(t){const e=t%10;return t+(1===h(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),T("w",["ww",2,!1],"wo",(function(t,e){return function(t,e=Qt(),n){return e.week(t,void 0)}(t,e.locale).toString(10)})),T("W",["WW",2,!1],"Wo",(function(t){return function(t,e){return St(t,1,4,void 0).week}(t).toString(10)})),b("week","w"),b("isoWeek","W"),et("w",B),et("ww",B,F),et("W",B),et("WW",B,F),st(["w","ww","W","WW"],(function(t,e,n,a){return e[a.substr(0,1)]=h(t),n})),T(null,["gg",2,!1],null,(function(t,e){return(zt(t,e.locale)%100).toString()})),T(null,["GG",2,!1],null,(function(t){return(Bt(t)%100).toString()})),Ft("gggg",Gt),Ft("ggggg",Gt),Ft("GGGG",Vt),Ft("GGGGG",Vt),b("weekYear","gg"),b("isoWeekYear","GG"),et("G",Z),et("g",Z),et("GG",B,F),et("gg",B,F),et("GGGG",W,V),et("gggg",W,V),et("GGGGG",K,z),et("ggggg",K,z),st(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,a){return e[a.substr(0,2)]=h(t),n})),st(["gg","GG"],(function(t,e,n,a){return e[a]=dt(t),n})),T("Y",null,null,(function(t,e){const n=E(t,e.isUTC);return n<=9999?n.toString(10):`+${n}`})),T(null,["YY",2,!1],null,(function(t,e){return(E(t,e.isUTC)%100).toString(10)})),T(null,["YYYY",4,!1],null,lt),T(null,["YYYYY",5,!1],null,lt),T(null,["YYYYYY",6,!0],null,lt),b("year","y"),et("Y",Z),et("YY",B,F),et("YYYY",W,V),et("YYYYY",K,z),et("YYYYYY",K,z),it(["YYYYY","YYYYYY"],0),it("YYYY",(function(t,e,n){return e[0]=2===t.length?dt(t):h(t),n})),it("YY",(function(t,e,n){return e[0]=dt(t),n})),it("Y",(function(t,e,n){return e[0]=parseInt(t,10),n})),T("z",null,null,(function(t,e){return e.isUTC?"UTC":""})),T("zz",null,null,(function(t,e){return e.isUTC?"Coordinated Universal Time":""})),T("X",null,null,(function(t){return function(t){return Math.floor(t.valueOf()/1e3)}(t).toString(10)})),T("x",null,null,(function(t){return t.valueOf().toString(10)})),et("x",Z),et("X",Q),it("X",(function(t,e,n){return n._d=new Date(1e3*parseFloat(t)),n})),it("x",(function(t,e,n){return n._d=new Date(h(t)),n})),T("s",["ss",2,!1],null,(function(t,e){return N(t,e.isUTC).toString(10)})),b("second","s"),et("s",B),et("ss",B,F),it(["s","ss"],5),T("Q",null,"Qo",(function(t,e){return function(t,e=!1){return Math.ceil((k(t,e)+1)/3)}(t,e.isUTC).toString(10)})),b("quarter","Q"),et("Q",j),it("Q",(function(t,e,n){return e[1]=3*(h(t)-1),n})),Yt("Z",":"),Yt("ZZ",""),et("Z",J),et("ZZ",J),it(["Z","ZZ"],(function(t,e,n){return n._useUTC=!0,n._tzm=function(t,e){const n=(e||"").match(t);if(null===n)return null;const a=n[n.length-1].match(Ht)||["-","0","0"],r=60*parseInt(a[1],10)+h(a[2]);return 0===r?0:"+"===a[0]?r:-r}(J,t),n})),T("M",["MM",2,!1],"Mo",(function(t,e){return(k(t,e.isUTC)+1).toString(10)})),T("MMM",null,null,(function(t,e){return e.locale.monthsShort(t,e.format,e.isUTC)})),T("MMMM",null,null,(function(t,e){return e.locale.months(t,e.format,e.isUTC)})),b("month","M"),et("M",B),et("MM",B,F),et("MMM",(function(t,e){return e.monthsShortRegex(t)})),et("MMMM",(function(t,e){return e.monthsRegex(t)})),it(["M","MM"],(function(t,e,n){return e[1]=h(t)-1,n})),it(["MMM","MMMM"],(function(t,e,n,a){const r=n._locale.monthsParse(t,a,n._strict);return null!=r?e[1]=r:ut(n).invalidMonth=!!t,n})),T("m",["mm",2,!1],null,(function(t,e){return I(t,e.isUTC).toString(10)})),b("minute","m"),et("m",B),et("mm",B,F),it(["m","mm"],4),function(){let t;for(T("S",null,null,(function(t,e){return(~~(C(t,e.isUTC)/100)).toString(10)})),T(null,["SS",2,!1],null,(function(t,e){return(~~(C(t,e.isUTC)/10)).toString(10)})),T(null,["SSS",3,!1],null,(function(t,e){return C(t,e.isUTC).toString(10)})),T(null,["SSSS",4,!1],null,(function(t,e){return(10*C(t,e.isUTC)).toString(10)})),T(null,["SSSSS",5,!1],null,(function(t,e){return(100*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSS",6,!1],null,(function(t,e){return(1e3*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSS",7,!1],null,(function(t,e){return(1e4*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSSS",8,!1],null,(function(t,e){return(1e5*C(t,e.isUTC)).toString(10)})),T(null,["SSSSSSSSS",9,!1],null,(function(t,e){return(1e6*C(t,e.isUTC)).toString(10)})),b("millisecond","ms"),et("S",U,j),et("SS",U,F),et("SSS",U,G),t="SSSS";t.length<=9;t+="S")et(t,$);function e(t,e,n){return e[6]=h(1e3*parseFloat(`0.${t}`)),n}for(t="S";t.length<=9;t+="S")it(t,e)}(),function(){function t(t,e){return S(t,e)%12||12}function e(t,e){T(t,null,null,(function(t,n){return n.locale.meridiem(S(t,n.isUTC),I(t,n.isUTC),e)}))}function n(t,e){return e._meridiemParse}T("H",["HH",2,!1],null,(function(t,e){return S(t,e.isUTC).toString(10)})),T("h",["hh",2,!1],null,(function(e,n){return t(e,n.isUTC).toString(10)})),T("k",["kk",2,!1],null,(function(t,e){return function(t,e){return S(t,e)||24}(t,e.isUTC).toString(10)})),T("hmm",null,null,(function(e,n){return`${t(e,n.isUTC)}${y(I(e,n.isUTC),2)}`})),T("hmmss",null,null,(function(e,n){return`${t(e,n.isUTC)}${y(I(e,n.isUTC),2)}${y(N(e,n.isUTC),2)}`})),T("Hmm",null,null,(function(t,e){return`${S(t,e.isUTC)}${y(I(t,e.isUTC),2)}`})),T("Hmmss",null,null,(function(t,e){return`${S(t,e.isUTC)}${y(I(t,e.isUTC),2)}${y(N(t,e.isUTC),2)}`})),e("a",!0),e("A",!1),b("hour","h"),et("a",n),et("A",n),et("H",B),et("h",B),et("k",B),et("HH",B,F),et("hh",B,F),et("kk",B,F),et("hmm",Y),et("hmmss",H),et("Hmm",Y),et("Hmmss",H),it(["H","HH"],3),it(["k","kk"],(function(t,e,n){const a=h(t);return e[3]=24===a?0:a,n})),it(["a","A"],(function(t,e,n){return n._isPm=n._locale.isPM(t),n._meridiem=t,n})),it(["h","hh"],(function(t,e,n){return e[3]=h(t),ut(n).bigHour=!0,n})),it("hmm",(function(t,e,n){const a=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a)),ut(n).bigHour=!0,n})),it("hmmss",(function(t,e,n){const a=t.length-4,r=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a,2)),e[5]=h(t.substr(r)),ut(n).bigHour=!0,n})),it("Hmm",(function(t,e,n){const a=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a)),n})),it("Hmmss",(function(t,e,n){const a=t.length-4,r=t.length-2;return e[3]=h(t.substr(0,a)),e[4]=h(t.substr(a,2)),e[5]=h(t.substr(r)),n}))}(),T("DDD",["DDDD",3,!1],"DDDo",(function(t){return Ot(t).toString(10)})),b("dayOfYear","DDD"),et("DDD",U),et("DDDD",G),it(["DDD","DDDD"],(function(t,e,n){return n._dayOfYear=h(t),n})),T("d",null,"do",(function(t,e){return R(t,e.isUTC).toString(10)})),T("dd",null,null,(function(t,e){return e.locale.weekdaysMin(t,e.format,e.isUTC)})),T("ddd",null,null,(function(t,e){return e.locale.weekdaysShort(t,e.format,e.isUTC)})),T("dddd",null,null,(function(t,e){return e.locale.weekdays(t,e.format,e.isUTC)})),T("e",null,null,(function(t,e){return ze(t,e.locale,e.isUTC).toString(10)})),T("E",null,null,(function(t,e){return function(t,e){return R(t,e)||7}(t,e.isUTC).toString(10)})),b("day","d"),b("weekday","e"),b("isoWeekday","E"),et("d",B),et("e",B),et("E",B),et("dd",(function(t,e){return e.weekdaysMinRegex(t)})),et("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),et("dddd",(function(t,e){return e.weekdaysRegex(t)})),st(["dd","ddd","dddd"],(function(t,e,n,a){const r=n._locale.weekdaysParse(t,a,n._strict);return null!=r?e.d=r:ut(n).invalidWeekday=!!t,n})),st(["d","e","E"],(function(t,e,n,a){return e[a]=h(t),n})),T("D",["DD",2,!1],"Do",(function(t,e){return A(t,e.isUTC).toString(10)})),b("date","D"),et("D",B),et("DD",B,F),et("Do",(function(t,e){return e._dayOfMonthOrdinalParse||e._ordinalParse})),it(["D","DD"],2),it("Do",(function(t,e,n){return e[2]=h(t.match(B)[0]),n}))),t?function(t){let e,n,a=0;for(;a<t.length;){const i=$t(t[a]).split("-");let s=i.length;for(e=$t(t[a+1]),e=e?e.split("-"):null;s>0;){if(r=i.slice(0,s).join("-"),Ut[r]||console.error(`Khronos locale error: please load locale "${r}" before using it`),n=Ut[r],n)return n;if(e&&e.length>=s&&jt(i,e,!0)>=s-1)break;s--}a++}var r;return null}(l(t)?t:[t]):Kt}const Xt=["year","quarter","month","week","day","hours","minutes","seconds","milliseconds"],te=Xt.reduce((t,e)=>(t[e]=!0,t),{});function ee(t){return t<0?Math.floor(t):Math.ceil(t)}function ne(t){return 4800*t/146097}function ae(t){return 146097*t/4800}let re=Math.round;function ie(t,e,n,a,r){return r.relativeTime(e||1,!!n,t,a)}class se{constructor(t,e={}){this._data={},this._locale=Qt(),this._locale=e&&e._locale||Qt();const n=t.year||0,r=t.quarter||0,i=t.month||0,s=t.week||0,o=t.day||0,u=t.hours||0,l=t.minutes||0,d=t.seconds||0,c=t.milliseconds||0;return this._isValid=function(t){if(Object.keys(t).some(e=>e in te&&null===t[e]||isNaN(t[e])))return!1;let e=!1;for(let n=0;n<Xt.length;++n)if(t[Xt[n]]){if(e)return!1;t[Xt[n]]!==h(t[Xt[n]])&&(e=!0)}return!0}(t),this._milliseconds=+c+1e3*d+60*l*1e3+1e3*u*60*60,this._days=+o+7*s,this._months=+i+3*r+12*n,function(t){let e=t._milliseconds,n=t._days,r=t._months;const i=t._data;e>=0&&n>=0&&r>=0||e<=0&&n<=0&&r<=0||(e+=864e5*ee(ae(r)+n),n=0,r=0),i.milliseconds=e%1e3;const s=a(e/1e3);i.seconds=s%60;const o=a(s/60);i.minutes=o%60;const u=a(o/60);i.hours=u%24,n+=a(u/24);const l=a(ne(n));r+=l,n-=ee(ae(l));const d=a(r/12);return r%=12,i.day=n,i.month=r,i.year=d,t}(this)}isValid(){return this._isValid}humanize(t){if(!this.isValid())return this.localeData().invalidDate;const e=this.localeData();let n=function(t,e,n){const a=Pe(t).abs(),r=re(a.as("s")),i=re(a.as("m")),s=re(a.as("h")),o=re(a.as("d")),u=re(a.as("M")),l=re(a.as("y")),d=r<=44&&["s",r]||r<45&&["ss",r]||i<=1&&["m"]||i<45&&["mm",i]||s<=1&&["h"]||s<22&&["hh",s]||o<=1&&["d"]||o<26&&["dd",o]||u<=1&&["M"]||u<11&&["MM",u]||l<=1&&["y"]||["yy",l];return ie.apply(null,[d[0],d[1],e,+t>0,n])}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}localeData(){return this._locale}locale(t){return t?(this._locale=Qt(t)||this._locale,this):this._locale._abbr}abs(){const t=Math.abs,e=this._data;return this._milliseconds=t(this._milliseconds),this._days=t(this._days),this._months=t(this._months),e.milliseconds=t(e.milliseconds),e.seconds=t(e.seconds),e.minutes=t(e.minutes),e.hours=t(e.hours),e.month=t(e.month),e.year=t(e.year),this}as(t){if(!this.isValid())return NaN;let e,n;const a=this._milliseconds,r=m(t);if("month"===r||"year"===r)return e=this._days+a/864e5,n=this._months+ne(e),"month"===r?n:n/12;switch(e=this._days+Math.round(ae(this._months)),r){case"week":return e/7+a/6048e5;case"day":return e+a/864e5;case"hours":return 24*e+a/36e5;case"minutes":return 1440*e+a/6e4;case"seconds":return 86400*e+a/1e3;case"milliseconds":return Math.floor(864e5*e)+a;default:throw new Error(`Unknown unit ${r}`)}}valueOf(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*h(this._months/12):NaN}}function oe(t){if(null==t._isValid){const e=ut(t),n=Array.prototype.some.call(e.parsedDateParts,(function(t){return null!=t}));let a=!isNaN(t._d&&t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return a;t._isValid=a}return t._isValid}function ue(t,e){return t._d=new Date(NaN),Object.assign(ut(t),e||{userInvalidated:!0}),t}const le=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,de=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/Z|[+-]\d\d(?::?\d\d)?/,fe=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/,!0],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/,!0],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/,!0],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/,!0],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/,!0],["YYYYMMDD",/\d{8}/,!0],["GGGG[W]WWE",/\d{4}W\d{3}/,!0],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/,!0]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ge=/^\/?Date\((\-?\d+)/i,pe={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480},be=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function me(t){if(!r(t._i))return t;const e=t._i,n=le.exec(e)||de.exec(e);let a,i,s,o,u,l;if(!n)return t._isValid=!1,t;for(u=0,l=fe.length;u<l;u++)if(fe[u][1].exec(n[1])){i=fe[u][0],a=!1!==fe[u][2];break}if(null==i)return t._isValid=!1,t;if(n[3]){for(u=0,l=he.length;u<l;u++)if(he[u][1].exec(n[3])){s=(n[2]||" ")+he[u][0];break}if(null==s)return t._isValid=!1,t}if(!a&&null!=s)return t._isValid=!1,t;if(n[4]){if(!ce.exec(n[4]))return t._isValid=!1,t;o="Z"}return t._f=i+(s||"")+(o||""),Se(t)}function ye(t){const e=parseInt(t,10);return e<=49?e+2e3:e}function ve(t){if(!r(t._i))return t;const e=be.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim());if(!e)return function(t){return t._isValid=!1,t}(t);const n=function(t,e,n,a,r,i){const s=[ye(t),Rt.indexOf(e),parseInt(n,10),parseInt(a,10),parseInt(r,10)];return i&&s.push(parseInt(i,10)),s}(e[4],e[3],e[2],e[5],e[6],e[7]);return function(t,e,n){return!t||kt.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(ut(n).weekdayMismatch=!0,n._isValid=!1,!1)}(e[1],n,t)?(t._a=n,t._tzm=function(t,e,n){if(t)return pe[t];if(e)return 0;{const t=parseInt(n,10),e=t%100;return(t-e)/100*60+e}}(e[8],e[9],e[10]),t._d=O.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),ut(t).rfc2822=!0,t):t}function xe(t,e,n,a,r=0){const i=Qt(n||"en");if(!i)throw new Error(`Locale "${n}" is not defined, please add it with "defineLocale(...)"`);const u=function(t,e,n,a,r=0){if(!s(t))return n.invalidDate;const i=_e(e,n);return v[i]=v[i]||function(t){const e=t.match(_),n=e.length,a=new Array(n);for(let i=0;i<n;i++)a[i]=x[e[i]]?x[e[i]]:(r=e[i]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");var r;return function(e,r,i,s=0){const u=r.postvalue(e);let l="";for(let d=0;d<n;d++)l+=o(a[d])?a[d].call(null,u,{format:t,locale:r,isUTC:i,offset:s}):a[d];return l}}(i),v[i](t,n,a,r)}(t,e||(a?"YYYY-MM-DDTHH:mm:ss[Z]":"YYYY-MM-DDTHH:mm:ssZ"),i,a,r);return u?i.postformat(u):u}function _e(t,e){let n=t,a=5;const r=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,i=t=>e.formatLongDate(t)||t;for(r.lastIndex=0;a>=0&&r.test(n);)n=n.replace(r,i),r.lastIndex=0,a-=1;return n}function Te(t,e,n){return null!=t?t:null!=e?e:n}function Oe(t){const e=[];let n,a,r,i,s;if(t._d)return t;for(r=function(t){const e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){let e,n,a,r,i,s,o,u;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)i=1,s=4,n=Te(e.GG,t._a[0],St(new Date,1,4).year),a=Te(e.W,1),r=Te(e.E,1),(r<1||r>7)&&(u=!0);else{i=t._locale._week.dow,s=t._locale._week.doy;const o=St(new Date,i,s);n=Te(e.gg,t._a[0],o.year),a=Te(e.w,o.week),null!=e.d?(r=e.d,(r<0||r>6)&&(u=!0)):null!=e.e?(r=e.e+i,(e.e<0||e.e>6)&&(u=!0)):r=i}a<1||a>It(n,i,s)?ut(t)._overflowWeeks=!0:null!=u?ut(t)._overflowWeekday=!0:(o=function(t,e,n,a,r){const i=1+7*(e-1)+(7+n-a)%7+wt(t,a,r);let s,o;return i<=0?(s=t-1,o=ct(s)+i):i>ct(t)?(s=t+1,o=i-ct(t)):(s=t,o=i),{year:s,dayOfYear:o}}(n,a,r,i,s),t._a[0]=o.year,t._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(s=Te(t._a[0],r[0]),(t._dayOfYear>ct(s)||0===t._dayOfYear)&&(ut(t)._overflowDayOfYear=!0),a=new Date(Date.UTC(s,0,t._dayOfYear)),t._a[1]=a.getUTCMonth(),t._a[2]=a.getUTCDate()),n=0;n<3&&null==t._a[n];++n)t._a[n]=e[n]=r[n];for(;n<7;n++)t._a[n]=e[n]=null==t._a[n]?2===n?1:0:t._a[n];return 24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?O:w).apply(null,e),i=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==i&&(ut(t).weekdayMismatch=!0),t}function we(t){let e;const n=t._a;return n&&-2===ut(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>ht(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,ut(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),ut(t)._overflowWeeks&&-1===e&&(e=7),ut(t)._overflowWeekday&&-1===e&&(e=8),ut(t).overflow=e),t}function Se(t){if("ISO_8601"===t._f)return me(t);if("RFC_2822"===t._f)return ve(t);if(t._a=[],ut(t).empty=!0,l(t._f)||!t._i&&0!==t._i)return t;let e=t._i.toString(),n=0;const a=e.length,r=_e(t._f,t._locale).match(_)||[];let i,s,o,u;for(i=0;i<r.length;i++)s=r[i],o=(e.match(nt(s,t._locale))||[])[0],o&&(u=e.substr(0,e.indexOf(o)),u.length>0&&ut(t).unusedInput.push(u),e=e.slice(e.indexOf(o)+o.length),n+=o.length),x[s]?(o?ut(t).empty=!1:ut(t).unusedTokens.push(s),ot(s,o,t)):t._strict&&!o&&ut(t).unusedTokens.push(s);return ut(t).charsLeftOver=a-n,e.length>0&&ut(t).unusedInput.push(e),t._a[3]<=12&&!0===ut(t).bigHour&&t._a[3]>0&&(ut(t).bigHour=void 0),ut(t).parsedDateParts=t._a.slice(0),ut(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){let a=e;if(null==n)return a;if(null!=t.meridiemHour)return t.meridiemHour(a,n);if(null==t.isPM)return a;const r=t.isPM(n);return r&&a<12&&(a+=12),r||12!==a||(a=0),a}(t._locale,t._a[3],t._meridiem),Oe(t),we(t)}function Ie(t,e,n,a,s){return i(t)?t:function(t,e,n,a,s){const o={};let h=t;return(c(h)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;let e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(h)||l(h)&&0===h.length)&&(h=void 0),o._useUTC=o._isUTC=s,o._l=n,o._i=h,o._f=e,o._strict=a,function(t){const e=we(function(t){let e=t._i;const n=t._f;return t._locale=t._locale||Qt(t._l),null===e||void 0===n&&""===e?ue(t,{nullInput:!0}):(r(e)&&(t._i=e=t._locale.preparse(e)),i(e)?(t._d=xt(e),t):(l(n)?function(t){let e,n,a,r,i;if(!t._f||0===t._f.length)return ut(t).invalidFormat=!0,ue(t);for(i=0;i<t._f.length;i++)r=0,e=Object.assign({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],Se(e),oe(e)&&(r+=ut(e).charsLeftOver,r+=10*ut(e).unusedTokens.length,ut(e).score=r,(null==a||r<a)&&(a=r,n=e));Object.assign(t,n||e)}(t):n?Se(t):function(t){const e=t._i;if(f(e))t._d=new Date;else if(i(e))t._d=xt(e);else if(r(e))!function(t){if(!r(t._i))return t;const e=ge.exec(t._i);null!==e?t._d=new Date(+e[1]):(me(t),!1!==t._isValid||(delete t._isValid,ve(t),!1!==t._isValid||(delete t._isValid,ue(t))))}(t);else if(l(e)&&e.length){const n=e.slice(0);t._a=n.map(t=>r(t)?parseInt(t,10):t),Oe(t)}else if(c(e))!function(t){if(t._d)return t;const e=t._i;if(c(e)){const n=function(t){const e={};let n,a;for(a in t)d(t,a)&&(n=m(a),n&&(e[n]=t[a]));return e}(e);t._a=[n.year,n.month,n.day,n.hours,n.minutes,n.seconds,n.milliseconds].map(t=>r(t)?parseInt(t,10):t)}Oe(t)}(t);else{if(!u(e))return ue(t);t._d=new Date(e)}}(t),oe(t)||(t._d=null),t))}(t));return e._d=new Date(null!=e._d?e._d.getTime():NaN),oe(Object.assign({},e,{_isValid:null}))||(e._d=new Date(NaN)),e}(o)}(t,e,n,a,s)._d}function Ne(t){return t instanceof Date?new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()):null}function Ce(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Re(t,e,n="milliseconds"){return!(!t||!e)&&("milliseconds"===n?t.valueOf()>e.valueOf():e.valueOf()<_t(t,n).valueOf())}function Ae(t,e,n="milliseconds"){return!(!t||!e)&&("milliseconds"===n?t.valueOf()<e.valueOf():Tt(t,n).valueOf()<e.valueOf())}function ke(t,e){return!(void 0===e||!e||!e.length)&&e.some(e=>e===t.getDay())}function Ee(t,e,n="milliseconds"){if(!t||!e)return!1;if("milliseconds"===n)return t.valueOf()===e.valueOf();const a=e.valueOf();return _t(t,n).valueOf()<=a&&a<=Tt(t,n).valueOf()}const Le=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,De=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Pe(t,e,n={}){const a=function(t,e){if(null==t)return{};if(t instanceof se)return{milliseconds:t._milliseconds,day:t._days,month:t._months};if(u(t))return e?{[e]:t}:{milliseconds:t};if(r(t)){let e=Le.exec(t);if(e){const t="-"===e[1]?-1:1;return{year:0,day:h(e[2])*t,hours:h(e[3])*t,minutes:h(e[4])*t,seconds:h(e[5])*t,milliseconds:h(Ce(1e3*h(e[6])))*t}}if(e=De.exec(t),e){const t="-"===e[1]?-1:1;return{year:Me(e[2],t),month:Me(e[3],t),week:Me(e[4],t),day:Me(e[5],t),hours:Me(e[6],t),minutes:Me(e[7],t),seconds:Me(e[8],t)}}}if(c(t)&&("from"in t||"to"in t)){const e=function(t,e){if(!s(t)||!s(e))return{milliseconds:0,months:0};let n;const a=function(t,e,n={}){if(!n._isUTC)return t;const a=xt(e),r=6e4*(n._offset||0),i=t.valueOf()-a.valueOf()+r;return a.setTime(a.valueOf()+i),a}(e,t,{_offset:t.getTimezoneOffset()});return Ae(t,a)?n=qe(t,a):(n=qe(a,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n}(Ie(t.from),Ie(t.to));return{milliseconds:e.milliseconds,month:e.months}}return t}(t,e);return new se(a,n)}function Me(t,e){const n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function qe(t,e){const n={milliseconds:0,months:0};return n.months=k(e)-k(t)+12*(E(e)-E(t)),Re(je(xt(t),n.months,"month"),e)&&--n.months,n.milliseconds=+e-+je(xt(t),n.months,"month"),n}function je(t,e,n,a){return Fe(t,Pe(e,n),1,a)}function Fe(t,e,n,a){const r=e._milliseconds,i=Ce(e._days),s=Ce(e._months);return s&&yt(t,k(t,a)+s*n,a),i&&vt(t,A(t,a)+i*n,a),r&&function(t,e){t.setTime(e)}(t,function(t){return t.getTime()}(t)+r*n),xt(t)}function Ge(t,e,n=Qt(),a){const i=R(t,a);return je(t,function(t,e){if(!r(t))return t;const n=parseInt(t,10);if(!isNaN(n))return n;const a=e.weekdaysParse(t);return u(a)?a:null}(e,n)-i,"day")}function Ve(t,e){return R(t,e)}function ze(t,e=Qt(),n){return(R(t,n)+7-e.firstDayOfWeek())%7}const Be="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),Ye="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");function He(t){return t>1&&t<5&&1!=~~(t/10)}function Ue(t,e,n,a){const r=t+" ";switch(n){case"s":return e||a?"pár sekund":"pár sekundami";case"ss":return e||a?r+(He(t)?"sekundy":"sekund"):r+"sekundami";case"m":return e?"minuta":a?"minutu":"minutou";case"mm":return e||a?r+(He(t)?"minuty":"minut"):r+"minutami";case"h":return e?"hodina":a?"hodinu":"hodinou";case"hh":return e||a?r+(He(t)?"hodiny":"hodin"):r+"hodinami";case"d":return e||a?"den":"dnem";case"dd":return e||a?r+(He(t)?"dny":"dní"):r+"dny";case"M":return e||a?"měsíc":"měsícem";case"MM":return e||a?r+(He(t)?"měsíce":"měsíců"):r+"měsíci";case"y":return e||a?"rok":"rokem";case"yy":return e||a?r+(He(t)?"roky":"let"):r+"lety"}}const We=function(t){let e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n},Ke=function(t){let e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n},$e={abbr:"cs",months:Be,monthsShort:Ye,monthsParse:function(t,e){let n,a=[];for(n=0;n<12;n++)a[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return a}(Be,Ye),shortMonthsParse:We(Ye),longMonthsParse:Ke(Be),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek(t){switch(Ve(t)){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek(t){switch(Ve(t)){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:Ue,ss:Ue,m:Ue,mm:Ue,h:Ue,hh:Ue,d:Ue,dd:Ue,M:Ue,MM:Ue,y:Ue,yy:Ue},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}};function Ze(t,e,n,a){const r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?r[n][0]:r[n][1]}const Je={abbr:"de",months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Ze,mm:"%d Minuten",h:Ze,hh:"%d Stunden",d:Ze,dd:Ze,M:Ze,MM:Ze,y:Ze,yy:Ze},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}};let Qe="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Xe="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),tn=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],en=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;const nn={abbr:"es",months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:(t,e,n)=>t?/-MMM-/.test(e)?Xe[k(t,n)]:Qe[k(t,n)]:Qe,monthsRegex:en,monthsShortRegex:en,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:tn,longMonthsParse:tn,shortMonthsParse:tn,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:t=>"[hoy a la"+(1!==S(t)?"s":"")+"] LT",nextDay:t=>"[mañana a la"+(1!==S(t)?"s":"")+"] LT",nextWeek:t=>"dddd [a la"+(1!==S(t)?"s":"")+"] LT",lastDay:t=>"[ayer a la"+(1!==S(t)?"s":"")+"] LT",lastWeek:t=>"[el] dddd [pasado a la"+(1!==S(t)?"s":"")+"] LT",sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}},an={abbr:"fr",months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal(t,e){const n=Number(t);switch(e){case"D":return n+(1===n?"er":"");default:case"M":case"Q":case"DDD":case"d":return n+(1===n?"er":"e");case"w":case"W":return n+(1===n?"re":"e")}},week:{dow:1,doy:4}},rn={abbr:"id",months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:(t,e)=>(12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0),meridiem:(t,e,n)=>t<11?"pagi":t<15?"siang":t<19?"sore":"malam",calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}},sn={abbr:"it",months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek(t){switch(Ve(t)){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:t=>(/^[0-9].+$/.test(t.toString(10))?"tra":"in")+" "+t,past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}},on={abbr:"ja",months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:t=>"午後"===t,meridiem:(t,e,n)=>t<12?"午前":"午後",calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t.toString(10)}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}},un={abbr:"ko",months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t.toString(10)}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}};let ln="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),dn="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function cn(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function fn(t,e,n){let a=t+" ";switch(n){case"ss":return a+(cn(t)?"sekundy":"sekund");case"m":return e?"minuta":"minutę";case"mm":return a+(cn(t)?"minuty":"minut");case"h":return e?"godzina":"godzinę";case"hh":return a+(cn(t)?"godziny":"godzin");case"MM":return a+(cn(t)?"miesiące":"miesięcy");case"yy":return a+(cn(t)?"lata":"lat")}}const hn={abbr:"pl",months:(t,e,n)=>t?""===e?"("+dn[k(t,n)]+"|"+ln[k(t,n)]+")":/D MMMM/.test(e)?dn[k(t,n)]:ln[k(t,n)]:ln,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek(t){switch(Ve(t)){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 5:return"[W piątek o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek(t){switch(Ve(t)){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 4:return"[W zeszłą czwartek o] LT";case 5:return"[W zeszłą piątek o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:fn,m:fn,mm:fn,h:fn,hh:fn,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:fn,y:"rok",yy:fn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}},gn={abbr:"pt-br",months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:t=>0===Ve(t)||6===Ve(t)?"[Último] dddd [às] LT":"[Última] dddd [às] LT",sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"},pn={abbr:"zh-cn",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:(t,e)=>(12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12),meridiem(t,e,n){let a=100*t+e;return a<600?"凌晨":a<900?"早上":a<1130?"上午":a<1230?"中午":a<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal(t,e){const n=Number(t);switch(e){case"d":case"D":case"DDD":return n+"日";case"M":return n+"月";case"w":case"W":return n+"周";default:return n.toString()}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}},xrYK:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"xs/l":function(t,e,n){var a=n("TYy9"),r=n("Ioao"),i=n("wclG");t.exports=function(t){return i(r(t,void 0,a),t+"")}},xs3f:function(t,e,n){var a=n("2oRo"),r=n("zk60"),i=a["__core-js_shared__"]||r("__core-js_shared__",{});t.exports=i},y1pI:function(t,e,n){var a=n("ljhN");t.exports=function(t,e){for(var n=t.length;n--;)if(a(t[n][0],e))return n;return-1}},yCtX:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var a=n("HDdC"),r=n("ngJS"),i=n("jZKg");function s(t,e){return e?Object(i.a)(t,e):new a.a(Object(r.a)(t))}},yGOH:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));class a{}},yGk4:function(t,e,n){var a=n("Cwc5")(n("Kz5y"),"Set");t.exports=a},yHx3:function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,a=new t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(a.index=t.index,a.input=t.input),a}},yJti:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var a=function(t){return t[t.ValueOk=0]="ValueOk",t[t.ValueStale=1]="ValueStale",t[t.ValueNone=2]="ValueNone",t[t.ValueException=3]="ValueException",t}({})},yP5f:function(t,e,n){var a=n("+K+b");t.exports=function(t,e){var n=e?a(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},yPMs:function(t,e,n){!function(t){"use strict";t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},yT6U:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("LvDl");class r{transform(t,e=!1){let n=t;return(!a.isArray(t)||a.isArray(t)&&e)&&(n=[t]),n}}},yYhs:function(t,e,n){"use strict";var a=n("8Y7J"),r=n("SVse"),i=n("CoVI"),s=n("mfoh"),o=(n("CFvb"),n("MP8s"),n("f95s"),n("gk6K")),u=(n("dApe"),n("ZhuC")),l=n("fxL3"),d=n("TNUL"),c=n("rZud"),f=n("woSy"),h=n("jV1L"),g=n("pcHL"),p=n("WaXT"),b=n("OIDT"),m=n("HIU9"),y=n("uNpg"),v=n("Fwy9"),x=n("C523"),_=n("4Dmd");n("14R3"),n.d(e,"b",(function(){return T})),n.d(e,"a",(function(){return s.a}));var T=function(){function t(){}var e;return e=t,t.forRoot=function(){return{ngModule:e,providers:[o.a]}},e=function(t,e,n,a){var r,i=arguments.length,s=i<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,n):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,a);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(s=(i<3?r(s):i>3?r(e,n,s):r(e,n))||s);return i>3&&s&&Object.defineProperty(e,n,s),s}([Object(a.NgModule)({declarations:[l.a,d.a,c.a,u.a,v.a,x.a,h.a,g.a,f.a,p.a,m.a,b.a,y.a,_.a,i.a],exports:[l.a,d.a,c.a,u.a,v.a,x.a,h.a,g.a,f.a,p.a,m.a,b.a,y.a,_.a,i.a],imports:[r.CommonModule],providers:[]})],t)}()},yoRg:function(t,e,n){var a=n("UTVS"),r=n("/GqU"),i=n("TWQb").indexOf,s=n("0BK2");t.exports=function(t,e){var n,o=r(t),u=0,l=[];for(n in o)!a(s,n)&&a(o,n)&&l.push(n);for(;e.length>u;)a(o,n=e[u++])&&(~i(l,n)||l.push(n));return l}},"yt+r":function(t,e,n){"use strict";n.r(e),e.default='<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">\n  <file original="ng2.template" datatype="plaintext" source-language="en-US" target-language="es-ES">\n    <body>\n      <trans-unit id="319e0745bcbc132451569294fa2fa21bf10f555a" datatype="html">\n        <source>Toggle navigation</source>\n        <target>Alternar navegación</target>\n      </trans-unit>\n      <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html">\n        <source>Dashboard</source>\n        <target>Consola</target>\n      </trans-unit>\n      <trans-unit id="f4d1dd59b039ad818d9da7e29a773e10e41d9821" datatype="html">\n        <source>Cluster</source>\n        <target>Clúster</target>\n      </trans-unit>\n      <trans-unit id="099b441d49333b3c6d30b36dc0a4763e64c78920" datatype="html">\n        <source>Hosts</source>\n        <target>Hosts</target>\n      </trans-unit>\n      <trans-unit id="2cc3ecb16e348fcf2f2fbfd2f997d4d22f37475b" datatype="html">\n        <source>Inventory</source>\n        <target>Inventory</target>\n      </trans-unit>\n      <trans-unit id="624f596cc3320f5e0a0d7c7346c364e5af9bdd8c" datatype="html">\n        <source>Monitors</source>\n        <target>Monitores</target>\n      </trans-unit>\n      <trans-unit id="419d940613972cc3fae9c8ea0a4306dbf80616e5" datatype="html">\n        <source>Services</source>\n        <target>Servicios</target>\n      </trans-unit>\n      <trans-unit id="1a9183778f2c6473d7ccb080f651caa01faaf70c" datatype="html">\n        <source>OSDs</source>\n        <target>OSDs</target>\n      </trans-unit>\n      <trans-unit id="4a41f824a35ba01d5bd7be61aa06b3e8145209d0" datatype="html">\n        <source>Configuration</source>\n        <target>Configuración</target>\n      </trans-unit>\n      <trans-unit id="8c95898abff46bfac3ed6eb2afef74597e60b15c" datatype="html">\n        <source>CRUSH map</source>\n        <target>Mapa de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="33da4dbeb076159510801ea764a218fd341269d2" datatype="html">\n        <source>Manager modules</source>\n        <target>Módulos de gestor</target>\n      </trans-unit>\n      <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html">\n        <source>Logs</source>\n        <target>Registros</target>\n      </trans-unit>\n      <trans-unit id="17fc3efe5f9fa4e0289c900cb6202265215a1a27" datatype="html">\n        <source>Monitoring</source>\n        <target>Monitoring</target>\n      </trans-unit>\n      <trans-unit id="92899fa68e8ca108912163ff58edc8540e453787" datatype="html">\n        <source>Pools</source>\n        <target>Repositorios</target>\n      </trans-unit>\n      <trans-unit id="7f5d0c10614e8a34f0e2dad33a0568277c50cf69" datatype="html">\n        <source>Block</source>\n        <target>Bloque</target>\n      </trans-unit>\n      <trans-unit id="b73f7f5060fb22a1e9ec462b1bb02493fa3ab866" datatype="html">\n        <source>Images</source>\n        <target>Imágenes</target>\n      </trans-unit>\n      <trans-unit id="3c2562ba992127203dcfd014010b03cb7b8113c6" datatype="html">\n        <source>Mirroring</source>\n        <target>Duplicación</target>\n      </trans-unit>\n      <trans-unit id="811c241d56601b91ef26735b770e64428089b950" datatype="html">\n        <source>iSCSI</source>\n        <target>iSCSI</target>\n      </trans-unit>\n      <trans-unit id="a24eabd99ea5af20f5f94c4484649cd30370042b" datatype="html">\n        <source>NFS</source>\n        <target>NFS</target>\n      </trans-unit>\n      <trans-unit id="a4eff72d97b7ced051398d581f10968218057ddc" datatype="html">\n        <source>Filesystems</source>\n        <target>Sistemas de archivos</target>\n      </trans-unit>\n      <trans-unit id="2190548d236ca5f7bc7ab2bca334b860c5ff2ad4" datatype="html">\n        <source>Object Gateway</source>\n        <target>Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="9e24f9e2d42104ffc01599db4d566d1cc518f9e6" datatype="html">\n        <source>Daemons</source>\n        <target>Daemons</target>\n      </trans-unit>\n      <trans-unit id="4d13a9cd5ed3dcee0eab22cb25198d43886942be" datatype="html">\n        <source>Users</source>\n        <target>Usuarios</target>\n      </trans-unit>\n      <trans-unit id="9515520496da83179d8b08132f00f575512a1f40" datatype="html">\n        <source>Buckets</source>\n        <target>Papeleras</target>\n      </trans-unit>\n      <trans-unit id="797f8214e8148f4bf0d244baaa7341706b419549" datatype="html">\n        <source>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </source>\n        <target>Retrieving data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>. Please wait...\n        </target>\n      </trans-unit>\n      <trans-unit id="5a870dc77b9f6f33ee671ea2d856021276933339" datatype="html">\n        <source>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </source>\n        <target>Displaying previously cached data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/>\n  for \n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ae580202919844531361ba2308287226ff74a584" datatype="html">\n        <source>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </source>\n        <target>Could not load data\n          <x id="START_TAG_SPAN_1" ctype="x-span" equiv-text="<span>"/> for\n          <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>\n          <x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>.\n  Please check the cluster health.\n        </target>\n      </trans-unit>\n      <trans-unit id="7e52e9143145e1db5146258de81eae018a407b31" datatype="html">\n        <source>Clear notifications</source>\n        <target>Clear notifications</target>\n      </trans-unit>\n      <trans-unit id="b0b07bb6b7ff21ede439dd04eaf8872d1ecb84d8" datatype="html">\n        <source>Remove notification</source>\n        <target>Remove notification</target>\n      </trans-unit>\n      <trans-unit id="e17a1d75189da843f541f7764f188f2b19a97df2" datatype="html">\n        <source>Duration:</source>\n        <target>Duration:</target>\n      </trans-unit>\n      <trans-unit id="0d4b37c6675c5b436a54c43d6716eec835e1aa7f" datatype="html">\n        <source>There are no notifications.</source>\n        <target>There are no notifications.</target>\n      </trans-unit>\n      <trans-unit id="0a23e992f6c6e169a38b2b7338b4e5e803b52e0d" datatype="html">\n        <source>Tasks and Notifications</source>\n        <target>Tasks and Notifications</target>\n      </trans-unit>\n      <trans-unit id="3fb5709e10166cbc85970cbff103db227dbeb813" datatype="html">\n        <source>Select a Language</source>\n        <target>Seleccione un idioma</target>\n      </trans-unit>\n      <trans-unit id="c5109325fb160b543f71a51e7511c00575057431" datatype="html">\n        <source>Loading panel data...</source>\n        <target>Cargando datos del panel...</target>\n      </trans-unit>\n      <trans-unit id="8ca12411f890ab8b0a9216418e2b8f5ea7d2441a" datatype="html">\n        <source>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </source>\n        <target>Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the monitoring functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="160a9e80dc089792df42e2400b1e81b9e7025aa7" datatype="html">\n        <source>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </source>\n        <target>Grafana Dashboard doesn\'t exist. Please refer to\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  add dashboards to Grafana.\n        </target>\n      </trans-unit>\n      <trans-unit id="4e11830040bd64804a0555de76f291d5832772d4" datatype="html">\n        <source>Grafana Time Picker</source>\n        <target>Selector de hora de Grafana</target>\n      </trans-unit>\n      <trans-unit id="238c1ba845dd7330e8088165275919a1debf1ca3" datatype="html">\n        <source>Reset Settings</source>\n        <target>Restablecer ajustes</target>\n      </trans-unit>\n      <trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">\n        <source>Refresh</source>\n        <target>Refresh</target>\n      </trans-unit>\n      <trans-unit id="6c947210e2d162b6225083d18820ab602f58cd2d" datatype="html">\n        <source>Remove the custom configuration value. The default configuration will be inherited and used instead.</source>\n        <target>Remove the custom configuration value. The default configuration will be inherited and used instead.</target>\n      </trans-unit>\n      <trans-unit id="454ee9cb60b00446a8fb147fd2cc5eb836320586" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ option.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="7fc8a22825131e028336f60ef909ccbd96059703" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ option.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">\n        <source>Back</source>\n        <target>Atrás</target>\n      </trans-unit>\n      <trans-unit id="9ce641535be1ffa106c87724ba0637facaef5f61" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>less than 1\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day. Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="c2f34088c155e40ffb23770a465a65868ce772b2" datatype="html">\n        <source>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </source>\n        <target>Your password will expire in \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ expirationDays }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> day(s). Click\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>here\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> to change it now.\n        </target>\n      </trans-unit>\n      <trans-unit id="9b516f972c744779257310b73f6e97438b726707" datatype="html">\n        <source>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </source>\n        <target>Orchestrator is not available. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> on how to\n  configure and enable the functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="012741ee52b3c050e4a977c37cc2334f7974f141" datatype="html">\n        <source>Failed to load data.</source>\n        <target>Error al cargar los datos.</target>\n      </trans-unit>\n      <trans-unit id="1e5e23363e949f7dcbaf034bdb141a561132a10e" datatype="html">\n        <source>Clear filters</source>\n        <target>Clear filters</target>\n      </trans-unit>\n      <trans-unit id="80cc9a12d4bf6fe454ed94b379eeaf915f920bb7" datatype="html">\n        <source>selected</source>\n        <target>seleccionados</target>\n        <note>X selected</note>\n      </trans-unit>\n      <trans-unit id="0cb77511a9a148e05b9adf36cc07269956fbb29d" datatype="html">\n        <source>found</source>\n        <target>encontrados</target>\n        <note>X found</note>\n      </trans-unit>\n      <trans-unit id="79347388740c50b7ac97e144c2494bb62912f312" datatype="html">\n        <source>total</source>\n        <target>total</target>\n        <note>X total</note>\n      </trans-unit>\n      <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">\n        <source>Name</source>\n        <target>Nombre</target>\n      </trans-unit>\n      <trans-unit id="eec715de352a6b114713b30b640d319fa78207a0" datatype="html">\n        <source>Description</source>\n        <target>Descripción</target>\n      </trans-unit>\n      <trans-unit id="4ad112ce9bcd55dfd137792a86afe1b5a5b13cf8" datatype="html">\n        <source>Long description</source>\n        <target>Descripción larga</target>\n      </trans-unit>\n      <trans-unit id="ff7cee38a2259526c519f878e71b964f41db4348" datatype="html">\n        <source>Default</source>\n        <target>Opción por defecto</target>\n      </trans-unit>\n      <trans-unit id="33e1c1d9fc05ca3f62fcc8a1170fc31ebae4229c" datatype="html">\n        <source>Daemon default</source>\n        <target>Daemon por defecto</target>\n      </trans-unit>\n      <trans-unit id="809b0c848932a41318f77a2aace904ef429c13f4" datatype="html">\n        <source>Values</source>\n        <target>Valores</target>\n      </trans-unit>\n      <trans-unit id="5894f7158499fdb89527af50c9f1cf7d4c95cad6" datatype="html">\n        <source>-- Default --</source>\n        <target>-- Default --</target>\n      </trans-unit>\n      <trans-unit id="514f6e12d035a6d9b00de6b3e55c18b73488da07" datatype="html">\n        <source>true</source>\n        <target>true</target>\n      </trans-unit>\n      <trans-unit id="774f5e6a183dea08393789b6f72e86afad729419" datatype="html">\n        <source>false</source>\n        <target>false</target>\n      </trans-unit>\n      <trans-unit id="82029b6db704c56a2aa3e82ac555b8655356b077" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8ed8b3967a7326b81b191c9f490006e6a6777a9a" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html">\n        <source>Save</source>\n        <target>Guardar</target>\n      </trans-unit>\n      <trans-unit id="738de688b22fba5d0dc7a5e549996838dddad0ee" datatype="html">\n        <source>CRUSH map viewer</source>\n        <target>Visor del mapa de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="94516fa213706c67ce5a5b5765681d7fb032033a" datatype="html">\n        <source>Loading...</source>\n        <target>Cargando...</target>\n      </trans-unit>\n      <trans-unit id="formTitle" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form title</note>\n      </trans-unit>\n      <trans-unit id="9a541ec1a4319fffc16ad3b3ab2c2b6d251a829d" datatype="html">\n        <source>Hostname</source>\n        <target>Nombre de host</target>\n      </trans-unit>\n      <trans-unit id="7cbdabcece469fab89cfa687ab152bca18b97498" datatype="html">\n        <source>This field is required.</source>\n        <target>Este campo es obligatorio.</target>\n      </trans-unit>\n      <trans-unit id="1b3f5e5291541678f7afa49d28fad5ca848a8061" datatype="html">\n        <source>The chosen hostname is already in use.</source>\n        <target>The chosen hostname is already in use.</target>\n      </trans-unit>\n      <trans-unit id="formActionButton" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ resource | upperFirst }}"/>\n        </target>\n        <note>form action button</note>\n      </trans-unit>\n      <trans-unit id="6110699a3562eeb15371063c0cf7f6bfd88a0209" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemNames[0] }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="549859e511ba5af0ea03fcaa620c472f08038969" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected items?\n        </target>\n      </trans-unit>\n      <trans-unit id="54839ebc827b73c9dc4e1df731c6d36a85036af7" datatype="html">\n        <source>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </source>\n        <target>Are you sure that you want to \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription | lowercase }}"/> the selected \n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>?\n        </target>\n      </trans-unit>\n      <trans-unit id="2be8b7f04f0104d3fad90d079d8202b74f758b9a" datatype="html">\n        <source>Yes, I am sure.</source>\n        <target>Sí, seguro.</target>\n      </trans-unit>\n      <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html">\n        <source>Cancel</source>\n        <target>Cancelar</target>\n      </trans-unit>\n      <trans-unit id="55a2f26b2e87886d9b8015a887e38e51ab2a866a" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ itemDescription }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html">\n        <source>Close</source>\n        <target>Cerrar</target>\n      </trans-unit>\n      <trans-unit id="40661476cb24c89d8b06614998e31d5fbe84eeb6" datatype="html">\n        <source>Hosts List</source>\n        <target>Lista de hosts</target>\n      </trans-unit>\n      <trans-unit id="5e7f4b1ca49e8d217bd0e12c6f7d6b6a2ade2c18" datatype="html">\n        <source>Overall Performance</source>\n        <target>Rendimiento general</target>\n      </trans-unit>\n      <trans-unit id="3e24569eca61d598c8b01defbbbb1fa8bd5222bc" datatype="html">\n        <source>Devices</source>\n        <target>Devices</target>\n      </trans-unit>\n      <trans-unit id="e6d57f36aa2bad303c8a8ee944b9bd7fae3c8c26" datatype="html">\n        <source>No entries found</source>\n        <target>No se encuentra ninguna entrada</target>\n      </trans-unit>\n      <trans-unit id="d556ab48a65722b400e497f61737f553ee0f89e2" datatype="html">\n        <source>Cluster Logs</source>\n        <target>Registros del clúster</target>\n      </trans-unit>\n      <trans-unit id="5f966baffd188be0e8adc2d7067b86e55fc9b9de" datatype="html">\n        <source>Audit Logs</source>\n        <target>Registros de auditoría</target>\n      </trans-unit>\n      <trans-unit id="4193c9eb868aeec119b78a14795241e0aa5e8b60" datatype="html">\n        <source>Priority:</source>\n        <target>Priority:</target>\n      </trans-unit>\n      <trans-unit id="1d78ca51eab260ce3fd917d39190d64df5229b6e" datatype="html">\n        <source>Keyword:</source>\n        <target>Keyword:</target>\n      </trans-unit>\n      <trans-unit id="05fa0bded36de6e73a1fa44838b627349dace044" datatype="html">\n        <source>Date:</source>\n        <target>Date:</target>\n      </trans-unit>\n      <trans-unit id="31dadb362bf7f7c2afa10e5f96474ccd3977f91f" datatype="html">\n        <source>Datepicker</source>\n        <target>Datepicker</target>\n      </trans-unit>\n      <trans-unit id="85a400388de1899b1917138cf7e5286376f72847" datatype="html">\n        <source>Time range:</source>\n        <target>Time range:</target>\n      </trans-unit>\n      <trans-unit id="2447796ddbda942f4e2c46619cb84d69f066e568" datatype="html">\n        <source>Loading configuration...</source>\n        <target>Cargando configuración...</target>\n      </trans-unit>\n      <trans-unit id="b42c0b347a841bed8859ee83de05080ee28c803b" datatype="html">\n        <source>The configuration could not be loaded.</source>\n        <target>No es posible cargar la configuración.</target>\n      </trans-unit>\n      <trans-unit id="31a9c2870a934b594d1390146c489f76440859ea" datatype="html">\n        <source>Edit Manager module</source>\n        <target>Módulo del gestor de edición</target>\n      </trans-unit>\n      <trans-unit id="46e09b8290d3d0afdb6baa2021395b0570606a31" datatype="html">\n        <source>The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</source>\n        <target>El valor introducido no es un UUID válido, por ejemplo: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8</target>\n      </trans-unit>\n      <trans-unit id="7aacd038b39cfd347107d01d1dc27f5cb3e0951c" datatype="html">\n        <source>The entered value needs to be a valid IP address.</source>\n        <target>El valor introducido debe ser una dirección IP válida.</target>\n      </trans-unit>\n      <trans-unit id="f19106149f4b07a0d721f9d317afed393cb7bd93" datatype="html">\n        <source>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </source>\n        <target>The entered value is too high! It must be lower or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.max }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="6d33c40ef9a6c3bf0888df831b25e41e65f9d15b" datatype="html">\n        <source>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </source>\n        <target>The entered value is too low! It must be greater or equal to \n          <x id="INTERPOLATION" equiv-text="{{ moduleOption.value.min }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="eae7086660cf1e38c7194a2c49ff52cc656f90f5" datatype="html">\n        <source>The entered value needs to be a number.</source>\n        <target>El valor introducido debe ser un número.</target>\n      </trans-unit>\n      <trans-unit id="a73376e04b4fb3a20734c8c39743fba32e6676ce" datatype="html">\n        <source>The entered value needs to be a number or decimal.</source>\n        <target>El valor introducido debe ser un número o un decimal.</target>\n      </trans-unit>\n      <trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">\n        <source>Update</source>\n        <target>Actualizar</target>\n      </trans-unit>\n      <trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">\n        <source>Status</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="57ec6032f5618d4a9f16eb950ad23d2ce7c24b54" datatype="html">\n        <source>Cluster ID</source>\n        <target>ID de clúster</target>\n      </trans-unit>\n      <trans-unit id="67d7facc3fec5f8a49ab9ba0a245872184264ce5" datatype="html">\n        <source>monmap modified</source>\n        <target>Mapa de supervisión modificado</target>\n      </trans-unit>\n      <trans-unit id="d4906731aaf2b94b4f547646c9bfe58bb77951b6" datatype="html">\n        <source>monmap epoch</source>\n        <target>Época de mapa de supervisión</target>\n      </trans-unit>\n      <trans-unit id="bd4ee06ffdc46d9dfbd0c0c4f81399021c680056" datatype="html">\n        <source>quorum con</source>\n        <target>quórum de con</target>\n      </trans-unit>\n      <trans-unit id="1176c7db8a8276ccb44cc3d42e2c28d9fa6c6596" datatype="html">\n        <source>quorum mon</source>\n        <target>quórum de mon</target>\n      </trans-unit>\n      <trans-unit id="530ef677a09d681b3ab68cb0760494b3ae72a77c" datatype="html">\n        <source>required con</source>\n        <target>con requerido</target>\n      </trans-unit>\n      <trans-unit id="a91558e0d506c32021c31843f8f168899fc65cbf" datatype="html">\n        <source>required mon</source>\n        <target>mon requerido</target>\n      </trans-unit>\n      <trans-unit id="b3abe9eac5bcd94a54c8da93b312e085ec512e74" datatype="html">\n        <source>In Quorum</source>\n        <target>Con quórum</target>\n      </trans-unit>\n      <trans-unit id="ba4b748a676e1f217ce1e736fb7ec1215e677bae" datatype="html">\n        <source>Not In Quorum</source>\n        <target>Sin quórum</target>\n      </trans-unit>\n      <trans-unit id="4383e9662ea19839c7499b2128d43a195e564317" datatype="html">\n        <source>OSD creation preview</source>\n        <target>OSD creation preview</target>\n      </trans-unit>\n      <trans-unit id="366225c51e0b00bcb1c55795a0dc5e81c455f84e" datatype="html">\n        <source>DriveGroups</source>\n        <target>DriveGroups</target>\n      </trans-unit>\n      <trans-unit id="8edc89137d0d8c5667a2f03230beafae45e58429" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ deviceType }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="eba28e1805b18f7c8ae2e4bc15dcf063b10b3822" datatype="html">\n        <source>At least one of these filters must be applied in order to proceed:</source>\n        <target>At least one of these filters must be applied in order to proceed:</target>\n      </trans-unit>\n      <trans-unit id="93389aa2fe2bea50bf89554ee51b28f87ee2fb50" datatype="html">\n        <source>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </source>\n        <target>Number of devices: \n          <x id="INTERPOLATION" equiv-text="{{ filteredDevices.length }}"/>. Raw capacity:\n          <x id="INTERPOLATION_1" equiv-text="{{ capacity | dimlessBinary }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="ccb4f84edc0b4e76415bb3f9b73d725b06683af3" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ name }}"/> devices\n        </target>\n      </trans-unit>\n      <trans-unit id="60cb3d01e5ddf266ecb4271007a1c3d0f3efdc22" datatype="html">\n        <source>The primary storage devices. These devices contain all OSD data.</source>\n        <target>The primary storage devices. These devices contain all OSD data.</target>\n      </trans-unit>\n      <trans-unit id="b432e04886d0d1fd84f740477383051f85addcf2" datatype="html">\n        <source>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</source>\n        <target>Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.</target>\n      </trans-unit>\n      <trans-unit id="b87e181ab9e8393aa5ed759dd3d53836e32c8ffe" datatype="html">\n        <source>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</source>\n        <target>DB devices can be used for storing BlueStore’s internal metadata.  It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).</target>\n      </trans-unit>\n      <trans-unit id="f6755cff4957d5c3c89bafce5651f1b6fa2b1fd9" datatype="html">\n        <source>Add</source>\n        <target>Añadir</target>\n      </trans-unit>\n      <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">\n        <source>Clear</source>\n        <target>Clear</target>\n      </trans-unit>\n      <trans-unit id="7e0fd3c7af0630f93befa6234a693a32a61084e0" datatype="html">\n        <source>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </source>\n        <target>Raw capacity: \n          <x id="INTERPOLATION" equiv-text="{{ capacity | dimlessBinary }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="43ecf6bee2aebc07b0aad6dc1fe13e38d14687fa" datatype="html">\n        <source>Shared devices</source>\n        <target>Shared devices</target>\n      </trans-unit>\n      <trans-unit id="7a1c376f6f1b37de4c318ff2106255ba6c0f5b0b" datatype="html">\n        <source>WAL slots</source>\n        <target>WAL slots</target>\n      </trans-unit>\n      <trans-unit id="73811a6f37b63e6b0e491e221bfa21e9dea8a87a" datatype="html">\n        <source>How many OSDs per WAL device.</source>\n        <target>How many OSDs per WAL device.</target>\n      </trans-unit>\n      <trans-unit id="0c67a7ac4762ef1cc855056c6b4daab93e53a0a5" datatype="html">\n        <source>Specify 0 to let Orchestrator backend decide it.</source>\n        <target>Specify 0 to let Orchestrator backend decide it.</target>\n      </trans-unit>\n      <trans-unit id="7bda9362e06e6c67341b4a8425b0d29d6b84464b" datatype="html">\n        <source>Value should be greater than or equal to 0</source>\n        <target>Value should be greater than or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="324c2b10152b9dd908222bb0b71f61beb60a30c5" datatype="html">\n        <source>DB slots</source>\n        <target>DB slots</target>\n      </trans-unit>\n      <trans-unit id="c23cf12ef9c76f37fc7a4b7ae3e00fb0f68b6e26" datatype="html">\n        <source>How many OSDs per DB device.</source>\n        <target>How many OSDs per DB device.</target>\n      </trans-unit>\n      <trans-unit id="6cdb1fea93d77c07950c0c76c6e0ad79ebbef084" datatype="html">\n        <source>Features</source>\n        <target>Características</target>\n      </trans-unit>\n      <trans-unit id="3e2a583f531f7dd9f089f68a6968e444c372c3e8" datatype="html">\n        <source>Preview</source>\n        <target>Preview</target>\n      </trans-unit>\n      <trans-unit id="5ef50ba2514414f799d4c8fc36067a251904ba81" datatype="html">\n        <source>Cluster-wide OSD Flags</source>\n        <target>Indicadores OSD de todo el clúster</target>\n      </trans-unit>\n      <trans-unit id="71c77bb8cecdf11ec3eead24dd1ba506573fa9cd" datatype="html">\n        <source>Submit</source>\n        <target>Enviar</target>\n      </trans-unit>\n      <trans-unit id="1cfe07dac5b4ee1c464eb24225ddeb4f1d24076a" datatype="html">\n        <source>Advanced...</source>\n        <target>Avanzado...</target>\n      </trans-unit>\n      <trans-unit id="b1ef1c12ddcee305353623919ef02778569f5454" datatype="html">\n        <source>Advanced configuration options</source>\n        <target>Advanced configuration options</target>\n      </trans-unit>\n      <trans-unit id="c35f9c5f268a514b970cc55e9a5dc4bed0988e7f" datatype="html">\n        <source>OSD Recovery Priority</source>\n        <target>Prioridad de recuperación de OSD</target>\n      </trans-unit>\n      <trans-unit id="b74af38005e8a8914e45af2ec412e11ceafef8b6" datatype="html">\n        <source>Priority</source>\n        <target>Prioridad</target>\n      </trans-unit>\n      <trans-unit id="c2f48f04b379bfba133825747adfd238d511412e" datatype="html">\n        <source>Customize priority values</source>\n        <target>Personalizar valores de prioridad</target>\n      </trans-unit>\n      <trans-unit id="4aa19de2a2b54cbda39e9c62917b23044c087776" datatype="html">\n        <source>This field is required!</source>\n        <target>Este campo es obligatorio.</target>\n      </trans-unit>\n      <trans-unit id="b699e94bf376491bd50b70a98531071c737eaf40" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="98fe13e7ad6c2b80375d204b47858ded83f80e15" datatype="html">\n        <source>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </source>\n        <target>The entered value is too high! It must not be greater than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.maxValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5423a3c111be47fc5a1bfe46ceb58c81c84db691" datatype="html">\n        <source>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </source>\n        <target>The entered value is too low! It must not be lower than \n          <x id="INTERPOLATION" equiv-text="{{ attr.value.minValue }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="5251a4355cece3075db43f15d69a24a0f8485707" datatype="html">\n        <source>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </source>\n        <target>Reweight OSD: \n          <x id="INTERPOLATION" equiv-text="{{ osdId }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67650b2998db48201b2c6176cbfef51e7211ccaa" datatype="html">\n        <source>The value needs to be between 0 and 1.</source>\n        <target>El valor debe estar entre 0 y 1.</target>\n      </trans-unit>\n      <trans-unit id="bc11f92113d678a90e334fdf3d7b3fddbe34c579" datatype="html">\n        <source>Reweight</source>\n        <target>Reequilibrar peso</target>\n      </trans-unit>\n      <trans-unit id="d5ca5daf742023fc4f0919fb3c1c6a51991cda4f" datatype="html">\n        <source>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </source>\n        <target>OSDs \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>Scrub\n        </target>\n      </trans-unit>\n      <trans-unit id="4c17d67c7c5799eb920030e9a399961e90f55dd8" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Deep } }</source>\n        <target>{VAR_SELECT, select, 1 {Profundo} }</target>\n      </trans-unit>\n      <trans-unit id="fd0a4b6eed32e3488eccdc9c13f9841f08cc275e" datatype="html">\n        <source>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </source>\n        <target>You are about to apply a \n          <x id="ICU" equiv-text="{deep, select, 1 {...}}"/>scrub to\n          the OSD(s): \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ selected | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="dc6705f342a036b332c3fd3443201c3613e5524d" datatype="html">\n        <source>{VAR_SELECT, select, 1 {deep } }</source>\n        <target>{VAR_SELECT, select, 1 {profundo} }</target>\n      </trans-unit>\n      <trans-unit id="b49d7877d24112d4bdfce9256edf61a007fae888" datatype="html">\n        <source>OSDs List</source>\n        <target>Lista de OSD</target>\n      </trans-unit>\n      <trans-unit id="d5707a32ba9c1138e6423498fb0b24e970ebd19f" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD(s) \n          <x id="INTERPOLATION" equiv-text="{{  getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be marked\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ markActionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="d08c1e4f17dffc0ed1ac2e2e2875cb8b569eeb35" datatype="html">\n        <source>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </source>\n        <target>The \n          <x id="ICU" equiv-text="{selection.hasSingleSelection, select, 0 {...} 1 {...}}"/> not safe to be \n          <x id="INTERPOLATION" equiv-text="{{ actionDescription }}"/>! \n          <x id="INTERPOLATION_1" equiv-text="{{ message }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="e776996dac651ef3819bfa767ccf2a0613759f47" datatype="html">\n        <source>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</source>\n        <target>{VAR_SELECT, select, 0 {OSDs are} 1 {OSD is} }</target>\n      </trans-unit>\n      <trans-unit id="5cd6a031937412c42e5efa1e6959cb72ac08c720" datatype="html">\n        <source>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </source>\n        <target>\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>OSD \n          <x id="INTERPOLATION" equiv-text="{{ getSelectedOsdIds() | join }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> will be\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ actionDescription }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> if you proceed.\n        </target>\n      </trans-unit>\n      <trans-unit id="3eda19b44809820fffd5d3753bafb7243116f4b0" datatype="html">\n        <source>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To see all active Prometheus alerts, please\n      provide the URL to the API of Prometheus\' Alertmanager as described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="880ad4df5a2051a437321443d69c9a866699e5ad" datatype="html">\n        <source>Active Alerts</source>\n        <target>Active Alerts</target>\n      </trans-unit>\n      <trans-unit id="8e5e0e09a11990d343926ed693574213d703c38d" datatype="html">\n        <source>All Alerts</source>\n        <target>All Alerts</target>\n      </trans-unit>\n      <trans-unit id="526938c2b7945cb0d68328c24bd77730230cd455" datatype="html">\n        <source>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </source>\n        <target>To enable Silences, please provide the URL to the API of the Prometheus\' Alertmanager as\n      described in the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="aa0c44aa1e5727061baa91e954f77e2f5f9a37c9" datatype="html">\n        <source>Silences</source>\n        <target>Silences</target>\n      </trans-unit>\n      <trans-unit id="8501055865d7031b5521a0c5467532648009a61d" datatype="html">\n        <source>Matcher</source>\n        <target>Matcher</target>\n      </trans-unit>\n      <trans-unit id="9c25e04f554875dc2625a78ba0fc56c6010cd0d3" datatype="html">\n        <source>-- Select an attribute to match against --</source>\n        <target>-- Select an attribute to match against --</target>\n      </trans-unit>\n      <trans-unit id="5049e204c14c648691ac775a64fb504467aeb549" datatype="html">\n        <source>Value</source>\n        <target>Valor</target>\n      </trans-unit>\n      <trans-unit id="77fc5c63497fc031ddc97645484e3d94ad27766c" datatype="html">\n        <source>Use regular expression</source>\n        <target>Use regular expression</target>\n      </trans-unit>\n      <trans-unit id="7bbec1a797283712c0adf9e71d77fb5a8cd720db" datatype="html">\n        <source>{VAR_SELECT, select, 1 {Update} other {Add} }</source>\n        <target>{VAR_SELECT, select, 1 {Update} other {Add} }</target>\n      </trans-unit>\n      <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html">\n        <source>Edit</source>\n        <target>Editar</target>\n      </trans-unit>\n      <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html">\n        <source>Delete</source>\n        <target>Suprimir</target>\n      </trans-unit>\n      <trans-unit id="a3ba06aba047605af8ea1718ec1ba153b7db12a2" datatype="html">\n        <source>Editing a silence will expire the old silence and recreate it as a new silence</source>\n        <target>Editing a silence will expire the old silence and recreate it as a new silence</target>\n      </trans-unit>\n      <trans-unit id="a20424156b8816671f61879f0574a4f27d7b16b9" datatype="html">\n        <source>Creator</source>\n        <target>Creator</target>\n      </trans-unit>\n      <trans-unit id="5a5d7ee2acbfa9c91ab7f41d26bda9ff0cafe42f" datatype="html">\n        <source>Comment</source>\n        <target>Comment</target>\n      </trans-unit>\n      <trans-unit id="4c11aad490b2d53fdae30b3807beabf79306752c" datatype="html">\n        <source>Start time</source>\n        <target>Start time</target>\n      </trans-unit>\n      <trans-unit id="32856b1e8e339b747b21e313e2fe65a51fd450bb" datatype="html">\n        <source>If the start time lies in the past the creation time will be used</source>\n        <target>If the start time lies in the past the creation time will be used</target>\n      </trans-unit>\n      <trans-unit id="a02ea1d4e7424ca989929da5e598f379940fdbf2" datatype="html">\n        <source>Duration</source>\n        <target>Duration</target>\n      </trans-unit>\n      <trans-unit id="2f4e35e36f4d3c62e2c17df41730b6dee4afc4b9" datatype="html">\n        <source>End time</source>\n        <target>End time</target>\n      </trans-unit>\n      <trans-unit id="992123459137d45c15df5548bc9682aad835c04b" datatype="html">\n        <source>Matchers</source>\n        <target>Matchers</target>\n      </trans-unit>\n      <trans-unit id="3e023166c55833d5a13f4143e3dbe372befe1b4e" datatype="html">\n        <source>A silence requires at least one matcher</source>\n        <target>A silence requires at least one matcher</target>\n      </trans-unit>\n      <trans-unit id="ef765bd80c4806c51c891908c07a24bc76f019eb" datatype="html">\n        <source>Add matcher</source>\n        <target>Add matcher</target>\n      </trans-unit>\n      <trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">\n        <source>Health</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html">\n        <source>Statistics</source>\n        <target>Estadísticas</target>\n      </trans-unit>\n      <trans-unit id="f8f74e5f683012b9c0702b1446011c6b9158bc67" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the NFS Ganesha management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="7ffe39df9d88c972792bd8688b215392deb8313d" datatype="html">\n        <source>Clients</source>\n        <target>Clientes</target>\n      </trans-unit>\n      <trans-unit id="f2dae0bda66f6a349444951c0379c28cda47d6d1" datatype="html">\n        <source>Any client can access</source>\n        <target>Cualquier cliente puede acceder</target>\n      </trans-unit>\n      <trans-unit id="7882f2edb1d4139800b276b6b0bbf5ae0b2234ef" datatype="html">\n        <source>Addresses</source>\n        <target>Destinatarios</target>\n      </trans-unit>\n      <trans-unit id="9bd96fcf50863e685c74d0490392f46689ffbdb6" datatype="html">\n        <source>Required field</source>\n        <target>Campo requerido</target>\n      </trans-unit>\n      <trans-unit id="a5f3f74c0f6925826cb2188576391c0da01a23f0" datatype="html">\n        <source>Must contain one or more comma-separated values</source>\n        <target>Debe contener uno o varios valores separados por comas</target>\n      </trans-unit>\n      <trans-unit id="8bb5b2073697f3f4378c44a49b7524934c9268f4" datatype="html">\n        <source>For example:</source>\n        <target>Por ejemplo:</target>\n      </trans-unit>\n      <trans-unit id="8f969c655b3fbe4fba7e277caf4cd2c459f9fca5" datatype="html">\n        <source>Access Type</source>\n        <target>Tipo de acceso</target>\n      </trans-unit>\n      <trans-unit id="28952831a284cfe2b4fc39ca610e80b52598905a" datatype="html">\n        <source>Squash</source>\n        <target>Reducir privilegios</target>\n      </trans-unit>\n      <trans-unit id="0660ae339068979854ade34a96546980723dede3" datatype="html">\n        <source>Add clients</source>\n        <target>Añadir clientes</target>\n      </trans-unit>\n      <trans-unit id="135b91a2d908d5814b782695470a6a786c99d9d2" datatype="html">\n        <source>-- No cluster available --</source>\n        <target>-- No hay ningún clúster disponible --</target>\n      </trans-unit>\n      <trans-unit id="c501dba379f566885919240ea277b5bc10c14d18" datatype="html">\n        <source>-- Select the cluster --</source>\n        <target>-- Seleccione el clúster --</target>\n      </trans-unit>\n      <trans-unit id="cf85b1ee58326aa9da63da41b2629c9db7c9a5b9" datatype="html">\n        <source>Add daemon</source>\n        <target>Añadir daemon</target>\n      </trans-unit>\n      <trans-unit id="b3f6ba7fe84d6508705cdfe234f0fcc8ff85c9cf" datatype="html">\n        <source>Storage Backend</source>\n        <target>Motor de almacenamiento</target>\n      </trans-unit>\n      <trans-unit id="151c80ea931037cd92e854442927f8a0f6ae7795" datatype="html">\n        <source>-- No data pools available --</source>\n        <target>-- No hay ningún repositorio de datos disponible --</target>\n      </trans-unit>\n      <trans-unit id="b6fee356d1db954255a56d8169405a89595246b9" datatype="html">\n        <source>-- Select the storage backend --</source>\n        <target>-- Seleccione el motor de almacenamiento --</target>\n      </trans-unit>\n      <trans-unit id="76d67035c3ab3d8e56f725859f820f03fda41cfc" datatype="html">\n        <source>Object Gateway User</source>\n        <target>Usuario de Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="fade7788bace74337f306ae209f10fc187ef4671" datatype="html">\n        <source>-- No users available --</source>\n        <target>-- No hay ningún usuario disponible --</target>\n      </trans-unit>\n      <trans-unit id="6d30b7b36cf8f6364167321bdb4ba35d4cefce7b" datatype="html">\n        <source>-- Select the object gateway user --</source>\n        <target>-- Seleccione el usuario de Object Gateway --</target>\n      </trans-unit>\n      <trans-unit id="589ce20d3ba3e3ac44f75decfaadc4ea8f0aec2d" datatype="html">\n        <source>CephFS User ID</source>\n        <target>ID de usuario de CephFS</target>\n      </trans-unit>\n      <trans-unit id="c4b88a53ac3b0ece46ba9b3ad72355a3c190cce7" datatype="html">\n        <source>-- No clients available --</source>\n        <target>-- No hay ningún cliente disponible --</target>\n      </trans-unit>\n      <trans-unit id="da52835b80497a0002d24414b057dc46ae44ce38" datatype="html">\n        <source>-- Select the cephx client --</source>\n        <target>-- Seleccione el cliente de CephX --</target>\n      </trans-unit>\n      <trans-unit id="fd3419e8957d928d7f7ba19c93356a0dbff02871" datatype="html">\n        <source>CephFS Name</source>\n        <target>Nombre de CephFS</target>\n      </trans-unit>\n      <trans-unit id="ee3ba0ab5f0ccd597b3e44021c71e9aaad14df0a" datatype="html">\n        <source>-- No CephFS filesystem available --</source>\n        <target>-- No CephFS filesystem available --</target>\n      </trans-unit>\n      <trans-unit id="764c57812558b1ae66c5eec95d7efd2b1bf761e3" datatype="html">\n        <source>-- Select the CephFS filesystem --</source>\n        <target>-- Select the CephFS filesystem --</target>\n      </trans-unit>\n      <trans-unit id="957512d0321f73e9f115bce1bd823fa635170c41" datatype="html">\n        <source>Security Label</source>\n        <target>Etiqueta de seguridad</target>\n      </trans-unit>\n      <trans-unit id="65ce0fa4da1ed55e658aeb31d1644a29f06bb342" datatype="html">\n        <source>Enable security label</source>\n        <target>Habilitar etiqueta de seguridad</target>\n      </trans-unit>\n      <trans-unit id="7e808f804130c7b6ff719509cbc06ebb27393a48" datatype="html">\n        <source>CephFS Path</source>\n        <target>Ruta de CephFS</target>\n      </trans-unit>\n      <trans-unit id="5ecc0107badb6625466aaa3f975b5c05276f432f" datatype="html">\n        <source>Path need to start with a \'/\' and can be followed by a word</source>\n        <target>La ruta debe empezar por "/" y puede ir seguida de una palabra</target>\n      </trans-unit>\n      <trans-unit id="2d02916f44fc63e13ab16d1cbe72aa6cb51feab3" datatype="html">\n        <source>New directory will be created</source>\n        <target>Se creará un directorio nuevo</target>\n      </trans-unit>\n      <trans-unit id="766c66ad5cc981c531aaf3fe3a2a7a346ddc8d83" datatype="html">\n        <source>Path</source>\n        <target>Ruta</target>\n      </trans-unit>\n      <trans-unit id="7ec35c722a50b976620f22612f7be619c12ceb90" datatype="html">\n        <source>Path can only be a single \'/\' or a word</source>\n        <target>La ruta solo puede ser una "/" o una palabra</target>\n      </trans-unit>\n      <trans-unit id="aebb6a5090c24511de4530195694bb3f3dcf0342" datatype="html">\n        <source>New bucket will be created</source>\n        <target>Se creará una papelera nueva</target>\n      </trans-unit>\n      <trans-unit id="bee6900143996c0e908a10564532eba3da0b30fb" datatype="html">\n        <source>NFS Protocol</source>\n        <target>Protocolo NFS</target>\n      </trans-unit>\n      <trans-unit id="2f534178c01ebf1307da2eaeef04bc6801ebc729" datatype="html">\n        <source>NFSv3</source>\n        <target>NFSv3</target>\n      </trans-unit>\n      <trans-unit id="f5043c0921e709935ab026bb3253ffe1f159fca1" datatype="html">\n        <source>NFSv4</source>\n        <target>NFSv4</target>\n      </trans-unit>\n      <trans-unit id="92488963d23095985a47c0d6e62304e11d333f19" datatype="html">\n        <source>NFS Tag</source>\n        <target>Etiqueta NFS</target>\n      </trans-unit>\n      <trans-unit id="aae93362720aea94623682996dd3fcd0f906f056" datatype="html">\n        <source>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </source>\n        <target>Alternative access for \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v3\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> mounts (it must not have a leading /).\n        </target>\n      </trans-unit>\n      <trans-unit id="45d6db77dcf1a3eeb921033abc7882e517a541cc" datatype="html">\n        <source>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</source>\n        <target>Puede que los clientes no monten subdirectorios (es decir, si Etiqueta = foo, el cliente puede que no monte foo/baz).</target>\n      </trans-unit>\n      <trans-unit id="a1c7a8676b55e882a97c6a6fb205204f9c761afa" datatype="html">\n        <source>By using different Tag options, the same Path may be exported multiple times.</source>\n        <target>Al usar distintas opciones de Etiqueta, la misma Ruta se puede exportar varias veces.</target>\n      </trans-unit>\n      <trans-unit id="6d2c39708a32910f89701dd7e1cfb9ec1c195768" datatype="html">\n        <source>Pseudo</source>\n        <target>Pseudo</target>\n      </trans-unit>\n      <trans-unit id="1f8be2ae25947bec0b84c2338201580ea053f34e" datatype="html">\n        <source>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </source>\n        <target>The position that this \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>NFS v4\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> export occupies\n                in the \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>Pseudo FS\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> (it must be unique).\n        </target>\n      </trans-unit>\n      <trans-unit id="f3af55f7fd5b1d9e5a53e030c80116dc635bfb9f" datatype="html">\n        <source>By using different Pseudo options, the same Path may be exported multiple times.</source>\n        <target>Al usar distintas opciones de Pseudo, la misma Ruta se puede exportar varias veces.</target>\n      </trans-unit>\n      <trans-unit id="ddf98fcdeeb17643db020d54f42b5e56b5f9a52a" datatype="html">\n        <source>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</source>\n        <target>Pseudo needs to start with a \'/\' and can\'t contain any of the following: &gt;, &lt;, |, &amp;, ( or ).</target>\n      </trans-unit>\n      <trans-unit id="27eb35c4b4ac08781a7253a2ab40f8f7d957ba51" datatype="html">\n        <source>-- No access type available --</source>\n        <target>-- No hay ningún tipo de acceso disponible --</target>\n      </trans-unit>\n      <trans-unit id="509ce016c9110a54028dafd741f15ceacbe74b5a" datatype="html">\n        <source>-- Select the access type --</source>\n        <target>-- Seleccione el tipo de acceso --</target>\n      </trans-unit>\n      <trans-unit id="49850390a653cd05dc5843d74ef073a9122b54c9" datatype="html">\n        <source>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </source>\n        <target>The Object Gateway NFS backend has a number of\n              limitations which will seriously affect applications writing to\n              the share. Please consult the\n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/> documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for details before enabling write access.\n        </target>\n      </trans-unit>\n      <trans-unit id="4deda03573eaaff77e63f6a238a1f0ca7816950a" datatype="html">\n        <source>-- No squash available --</source>\n        <target>-- No hay ninguna reducción de privilegios disponible --</target>\n      </trans-unit>\n      <trans-unit id="a0e82a4da88e7fdf270444f838d45849676e9d4b" datatype="html">\n        <source>--Select what kind of user id squashing is performed --</source>\n        <target>-- Seleccione el tipo de reducción de privilegios de ID de usuario que se va a realizar --</target>\n      </trans-unit>\n      <trans-unit id="d01b7c3f7f06712c53d054cfbe4f53d446b038e8" datatype="html">\n        <source>Transport Protocol</source>\n        <target>Protocolo de transporte</target>\n      </trans-unit>\n      <trans-unit id="d2a6ad6e8bc315f07911722c05767ac79c136d99" datatype="html">\n        <source>UDP</source>\n        <target>UDP</target>\n      </trans-unit>\n      <trans-unit id="9c030f11e0aae9b24d2c048c57f29f590be621df" datatype="html">\n        <source>TCP</source>\n        <target>TCP</target>\n      </trans-unit>\n      <trans-unit id="734c9905951a774870497c5aaae8e3ee833b6196" datatype="html">\n        <source>CephFS</source>\n        <target>CephFS</target>\n      </trans-unit>\n      <trans-unit id="0eb15f32b2b92d7f3103ef3ff032621888a8dc32" datatype="html">\n        <source>Old password</source>\n        <target>Old password</target>\n      </trans-unit>\n      <trans-unit id="1cf42e491adc166a337a960eb84d03c0c3f677c8" datatype="html">\n        <source>The old and new passwords must be different.</source>\n        <target>The old and new passwords must be different.</target>\n      </trans-unit>\n      <trans-unit id="e70e209561583f360b1e9cefd2cbb1fe434b6229" datatype="html">\n        <source>New password</source>\n        <target>New password</target>\n      </trans-unit>\n      <trans-unit id="ede41f01c781b168a783cfcefc6fb67d48780d9b" datatype="html">\n        <source>Confirm new password</source>\n        <target>Confirm new password</target>\n      </trans-unit>\n      <trans-unit id="90163a3d3746819aef42e829f4446331232f3b66" datatype="html">\n        <source>Password confirmation doesn\'t match the new password.</source>\n        <target>Password confirmation doesn\'t match the new password.</target>\n      </trans-unit>\n      <trans-unit id="d06ae77f9ec46a4cdd49e7e76c73a411aaf2ee38" datatype="html">\n        <source>Please set a new password.</source>\n        <target>Please set a new password.</target>\n      </trans-unit>\n      <trans-unit id="8b5b3566e88438f51bd5f6caf6c090ed565ba5ed" datatype="html">\n        <source>You will be redirected to the login page afterwards.</source>\n        <target>You will be redirected to the login page afterwards.</target>\n      </trans-unit>\n      <trans-unit id="449dca3d3a93ead418b0541ea81b0dda7e6483c2" datatype="html">\n        <source>Welcome to Ceph!</source>\n        <target>¡Bienvenidos a Ceph!</target>\n        <note>The welcome message on the login page</note>\n      </trans-unit>\n      <trans-unit id="0070e83d11da39d6f4bb95065c2675db1610b419" datatype="html">\n        <source>Username is required</source>\n        <target>El nombre de usuario es obligatorio</target>\n      </trans-unit>\n      <trans-unit id="1e20f8b8a4706526c9024cc2f39d568345d100dc" datatype="html">\n        <source>Password is required</source>\n        <target>La contraseña es obligatoria</target>\n      </trans-unit>\n      <trans-unit id="6765b4c916060f6bc42d9bb69e80377dbcb5e4e9" datatype="html">\n        <source>Login</source>\n        <target>Entrada</target>\n      </trans-unit>\n      <trans-unit id="58fc1b5c79a75370eb52644fd83fb2e7096b6649" datatype="html">\n        <source>Sorry, the user does not exist in Ceph.</source>\n        <target>Lo sentimos. El usuario no existe en Ceph.</target>\n      </trans-unit>\n      <trans-unit id="d9deb94f78e7c41b35c6622b874f06657d7604c1" datatype="html">\n        <source>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </source>\n        <target>Return to \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Login Page\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>. You\'ll be logged out from the Identity Provider when you retry logging in.\n        </target>\n      </trans-unit>\n      <trans-unit id="471e78026c258073ba687478dc54c35d9041ea42" datatype="html">\n        <source>Forbidden</source>\n        <target>Prohibido</target>\n      </trans-unit>\n      <trans-unit id="02ea8ad57677e3c63f3d7814ca5e6c7b74e360b4" datatype="html">\n        <source>Sorry, you are not allowed to see what you were looking for.</source>\n        <target>Lo sentimos. No tiene permiso para ver lo que busca.</target>\n      </trans-unit>\n      <trans-unit id="2240b985f17293d84cc8532fe86994aa5f63667c" datatype="html">\n        <source>Sorry, we could not find what you were looking for.</source>\n        <target>Sorry, we could not find what you were looking for.</target>\n      </trans-unit>\n      <trans-unit id="ac54c18c1b520e948095c83a3a1025f02ce6dcc6" datatype="html">\n        <source>Neither hostname nor OSD ID given</source>\n        <target>Neither hostname nor OSD ID given</target>\n      </trans-unit>\n      <trans-unit id="4f635b3cb0600409a2ad44a5bd1863c699e6a01c" datatype="html">\n        <source>Failed to retrieve SMART data.</source>\n        <target>Failed to retrieve SMART data.</target>\n      </trans-unit>\n      <trans-unit id="d82a9af5b05e7cd17640f196f163771685ff8df6" datatype="html">\n        <source>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</source>\n        <target>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</target>\n      </trans-unit>\n      <trans-unit id="04f8a3c7e8ac610e6581960162cc15f55a16696a" datatype="html">\n        <source>No SMART data available.</source>\n        <target>No SMART data available.</target>\n      </trans-unit>\n      <trans-unit id="3a03d3c2e459f8f8fa7202c0fce465d6165f9e2b" datatype="html">\n        <source>passed</source>\n        <target>passed</target>\n      </trans-unit>\n      <trans-unit id="a185c9b97513b3882604ea9bab60edbfac945c15" datatype="html">\n        <source>SMART overall-health self-assessment test result</source>\n        <target>SMART overall-health self-assessment test result</target>\n      </trans-unit>\n      <trans-unit id="41435d5a5692c8e412c74deaee95d99dbd3617e1" datatype="html">\n        <source>failed</source>\n        <target>failed</target>\n      </trans-unit>\n      <trans-unit id="ddd5dd6d930030096ea617f62c82b648a0dd9484" datatype="html">\n        <source>Device Information</source>\n        <target>Device Information</target>\n      </trans-unit>\n      <trans-unit id="380295f37caea93701d071485a38ef0bdba57133" datatype="html">\n        <source>No SMART data available for this device.</source>\n        <target>No SMART data available for this device.</target>\n      </trans-unit>\n      <trans-unit id="20cb12827cbe559a7b1da6fdae96041b3b5c3c55" datatype="html">\n        <source>SMART</source>\n        <target>SMART</target>\n      </trans-unit>\n      <trans-unit id="5758c3f16f8749f0f4e2a787f02e8b4da246102f" datatype="html">\n        <source>SMART data is loading.</source>\n        <target>SMART data is loading.</target>\n      </trans-unit>\n      <trans-unit id="a949d7e577902d0e5dc5d0971bb0170a21be7728" datatype="html">\n        <source>[object Object]</source>\n        <target>[object Object]</target>\n      </trans-unit>\n      <trans-unit id="ff92fbdec9fdd5054493eeda0d7ee8b450f83e72" datatype="html">\n        <source>RBD Configuration</source>\n        <target>Configuración de RBD</target>\n      </trans-unit>\n      <trans-unit id="b62d9efc8eb3b589904f6cb96a0406bbda55673a" datatype="html">\n        <source>Remove the local configuration value. The parent configuration value will be inherited and used instead.</source>\n        <target>Elimina el valor de configuración local. Se heredará y usará en su lugar el valor de configuración padre.</target>\n      </trans-unit>\n      <trans-unit id="963488a1010d46067b238c4ae917fab3907c0a3a" datatype="html">\n        <source>The mininum value is 0</source>\n        <target>El valor mínimo es 0</target>\n      </trans-unit>\n      <trans-unit id="1d8a7c8aea58294a3c57c23af0468ddf0ba0c9c7" datatype="html">\n        <source>Pools List</source>\n        <target>Lista de repositorios</target>\n      </trans-unit>\n      <trans-unit id="490e15ecc922965b6d8194754c87c5583aa071f3" datatype="html">\n        <source>The name can only consist of alphanumeric characters, dashes and underscores.</source>\n        <target>El nombre solo puede tener caracteres alfanuméricos, guiones y guiones bajos.</target>\n      </trans-unit>\n      <trans-unit id="9edc2b494e660618af3e5225f68d40b7ca67629c" datatype="html">\n        <source>The chosen erasure code profile name is already in use.</source>\n        <target>El nombre del perfil de código de borrado que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="35a4206db3105ed03e0dd799e1642b75b78123e8" datatype="html">\n        <source>Root</source>\n        <target>Root</target>\n      </trans-unit>\n      <trans-unit id="cf425784c7073c7e7f7c1bb90c2c19db7e751db2" datatype="html">\n        <source>Failure domain type</source>\n        <target>Failure domain type</target>\n      </trans-unit>\n      <trans-unit id="72396a9565cf644d1fe1b21b790c4243ee270986" datatype="html">\n        <source>Device class</source>\n        <target>Device class</target>\n      </trans-unit>\n      <trans-unit id="72d80e0c07bfea1b693a33ef2245007de92a6780" datatype="html">\n        <source>Let Ceph decide</source>\n        <target>Let Ceph decide</target>\n      </trans-unit>\n      <trans-unit id="ef9ff0e6227947b48dfab4ac39ade04af758913b" datatype="html">\n        <source>Plugin</source>\n        <target>Complemento</target>\n      </trans-unit>\n      <trans-unit id="dd69b31bce8f630eac1d4762b0bbcf72ce19d193" datatype="html">\n        <source>Data chunks (k)</source>\n        <target>Porciones de datos (k)</target>\n      </trans-unit>\n      <trans-unit id="b0d26a6172d32cb81218fe2103c54a818cbc1189" datatype="html">\n        <source>Must be equal to or greater than 2.</source>\n        <target>Debe ser igual o mayor que 2.</target>\n      </trans-unit>\n      <trans-unit id="dab3a299ead121169b8e08ed618c3b6a2f66691b" datatype="html">\n        <source>Coding chunks (m)</source>\n        <target>Porciones de código (m)</target>\n      </trans-unit>\n      <trans-unit id="1e2773e5bd4948193f18f2361d663ecc3988c656" datatype="html">\n        <source>Must be equal to or greater than 1.</source>\n        <target>Debe ser igual o mayor que 1.</target>\n      </trans-unit>\n      <trans-unit id="6cde4c945a49a260c0a47bcc7cd956846930a5f7" datatype="html">\n        <source>Durability estimator (c)</source>\n        <target>Estimador de durabilidad (c)</target>\n      </trans-unit>\n      <trans-unit id="af668c2a095a979ea2b4e43cd82c2120ab56c21c" datatype="html">\n        <source>Locality (l)</source>\n        <target>Localización (l)</target>\n      </trans-unit>\n      <trans-unit id="d455a110bf6d2235e314e295ce1dfeee93d3dff2" datatype="html">\n        <source>Crush failure domain</source>\n        <target>Dominio de error de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="b74a495f041f7dd102eee5c0bbc9e03083b538ae" datatype="html">\n        <source>Crush Locality</source>\n        <target>Localización de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="a2f14a73f7a6e94479f67423cc51102da8d6f524" datatype="html">\n        <source>None</source>\n        <target>Ninguna</target>\n      </trans-unit>\n      <trans-unit id="2981733b912b693a9dd9d915d6d34f4692cc874a" datatype="html">\n        <source>Technique</source>\n        <target>Técnica</target>\n      </trans-unit>\n      <trans-unit id="e0098b6e47b04ec817361f384ce81d454ba5c0bb" datatype="html">\n        <source>Packetsize</source>\n        <target>Tamaño del paquete</target>\n      </trans-unit>\n      <trans-unit id="c0252cd81ca54d0a2f69ec9ccf4248e73df5aa4a" datatype="html">\n        <source>Crush root</source>\n        <target>Raíz de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="1548d5c76f0406ddd1ba3c557e1e6db22e95b340" datatype="html">\n        <source>Crush device class</source>\n        <target>Clase de dispositivo de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="5e85feb6f9f0334366e46ee09ca6b8df52397432" datatype="html">\n        <source>any</source>\n        <target>cualquiera</target>\n      </trans-unit>\n      <trans-unit id="03d84645f6e019c5a43909bbf2ea1696ee88332c" datatype="html">\n        <source>Directory</source>\n        <target>Directorio</target>\n      </trans-unit>\n      <trans-unit id="2fecea01ce1d44114ee45144eff6d47a5016a74f" datatype="html">\n        <source>Name...</source>\n        <target>Nombre...</target>\n      </trans-unit>\n      <trans-unit id="16e113230b6b0d3165e076300880542bac7c8138" datatype="html">\n        <source>The chosen Ceph pool name is already in use.</source>\n        <target>El nombre del repositorio de Ceph que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="c75b132bef7b29fa5171768303c4b96e34ccaf68" datatype="html">\n        <source>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</source>\n        <target>It\'s not possible to create an RBD pool with \'/\' in the name.\n              Please change the name or remove \'rbd\' from the applications list.</target>\n      </trans-unit>\n      <trans-unit id="171dc6d5c6bc4615d99778b0088cae80fd00bd10" datatype="html">\n        <source>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</source>\n        <target>Pool name can only contain letters, numbers, \'.\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="b85c657469e5ec8231c3de99b22f437bc01ffde5" datatype="html">\n        <source>Pool type</source>\n        <target>Tipo de repositorio</target>\n      </trans-unit>\n      <trans-unit id="526c5443254c3b126eedb264840ffe827727bfd3" datatype="html">\n        <source>-- Select a pool type --</source>\n        <target>-- Seleccione un tipo de repositorio --</target>\n      </trans-unit>\n      <trans-unit id="6abfbe47b630929d93c7343dc154599c2e59330a" datatype="html">\n        <source>PG Autoscale</source>\n        <target>PG Autoscale</target>\n      </trans-unit>\n      <trans-unit id="0aa21053410a94aa61d16985a4e95fd65523430d" datatype="html">\n        <source>Placement groups</source>\n        <target>Grupos de colocación</target>\n      </trans-unit>\n      <trans-unit id="6301f1391d726f8f450bb358058534db19541ca9" datatype="html">\n        <source>At least one placement group is needed!</source>\n        <target>Se necesita al menos un grupo de colocación.</target>\n      </trans-unit>\n      <trans-unit id="ba9469a1ce6ed36e039c1f67247c8c81a5c71449" datatype="html">\n        <source>Your cluster can\'t handle this many PGs. Please recalculate the PG amount needed.</source>\n        <target>El clúster no puede gestionar tantos grupos de colocación. Vuelva a calcular la cantidad que necesita.</target>\n      </trans-unit>\n      <trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">\n        <source>Calculation help</source>\n        <target>Ayuda para el cálculo</target>\n      </trans-unit>\n      <trans-unit id="fccbd60493df26705d957ed6c02a3c447894678f" datatype="html">\n        <source>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</source>\n        <target>The current PGs settings were calculated for you, you\n                should make sure the values suit your needs before submit.</target>\n      </trans-unit>\n      <trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">\n        <source>Replicated size</source>\n        <target>Tamaño replicado</target>\n      </trans-unit>\n      <trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">\n        <source>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </source>\n        <target>Minimum: \n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">\n        <source>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </source>\n        <target>Maximum: \n          <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ab647b95bd2347ae6f4605576de5e0269fb893a" datatype="html">\n        <source>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </source>\n        <target>The size specified is out of range. A value from\n          <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to \n          <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.\n        </target>\n      </trans-unit>\n      <trans-unit id="920617c6a1a4805e53bcb5af6a9c76f8387e89c6" datatype="html">\n        <source>Flags</source>\n        <target>Indicadores</target>\n      </trans-unit>\n      <trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">\n        <source>EC Overwrites</source>\n        <target>Sustituciones de códigos de borrado</target>\n      </trans-unit>\n      <trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">\n        <source>Applications</source>\n        <target>Aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="fb9308b82fc183f710df60909f49cfc73aa5e076" datatype="html">\n        <source>CRUSH</source>\n        <target>CRUSH</target>\n      </trans-unit>\n      <trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">\n        <source>Erasure code profile</source>\n        <target>Perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">\n        <source>-- No erasure code profile available --</source>\n        <target>-- No hay ningún perfil de código de borrado disponible --</target>\n      </trans-unit>\n      <trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">\n        <source>-- Select an erasure code profile --</source>\n        <target>-- Seleccione un perfil de código de borrado --</target>\n      </trans-unit>\n      <trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">\n        <source>Crush ruleset</source>\n        <target>Conjunto de reglas de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="c69b0bcd4698aa845d32c4c4ad488492552cb469" datatype="html">\n        <source>A new crush ruleset will be implicitly created.</source>\n        <target>A new crush ruleset will be implicitly created.</target>\n      </trans-unit>\n      <trans-unit id="896e9987db5e9bb279e6deed5d2dff28c242ef66" datatype="html">\n        <source>There are no rules.</source>\n        <target>There are no rules.</target>\n      </trans-unit>\n      <trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">\n        <source>-- Select a crush rule --</source>\n        <target>-- Seleccione una regla de CRUSH --</target>\n      </trans-unit>\n      <trans-unit id="ea91d648f92002bc9f96d9b26b735c83ca0b53c6" datatype="html">\n        <source>This rule can\'t be deleted as it is in use.</source>\n        <target>This rule can\'t be deleted as it is in use.</target>\n      </trans-unit>\n      <trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">\n        <source>Crush rule</source>\n        <target>Regla de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">\n        <source>Crush steps</source>\n        <target>Pasos de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="fc5f5496a9e50fe69e1a09784f28d94944108294" datatype="html">\n        <source>Rule is not in use.</source>\n        <target>Rule is not in use.</target>\n      </trans-unit>\n      <trans-unit id="023d6f718770d2ea4ab8cabe26b0ec27ef967ec2" datatype="html">\n        <source>Used by pools</source>\n        <target>Used by pools</target>\n      </trans-unit>\n      <trans-unit id="104a0e6900d1d1b0c8cf9e5947e36edb352583fc" datatype="html">\n        <source>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</source>\n        <target>The rule can\'t be used in the current cluster as it has\n                  too few OSDs to meet the minimum required OSD by this rule.</target>\n      </trans-unit>\n      <trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">\n        <source>Compression</source>\n        <target>Compresión</target>\n      </trans-unit>\n      <trans-unit id="37e10df2d9c0c25ef04ac112c9c9a7723e8efae0" datatype="html">\n        <source>Mode</source>\n        <target>Modo</target>\n      </trans-unit>\n      <trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">\n        <source>Algorithm</source>\n        <target>Algoritmo</target>\n      </trans-unit>\n      <trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">\n        <source>-- No erasure compression algorithm available --</source>\n        <target>-- No hay ningún algoritmo de compresión de borrado disponible --</target>\n      </trans-unit>\n      <trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">\n        <source>Minimum blob size</source>\n        <target>Tamaño de Blob mínimo</target>\n      </trans-unit>\n      <trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">\n        <source>e.g., 128KiB</source>\n        <target>p. ej. 128 KiB</target>\n      </trans-unit>\n      <trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">\n        <source>Value should be greater than 0</source>\n        <target>El valor debe ser mayor que 0</target>\n      </trans-unit>\n      <trans-unit id="8db98ab14b4e207ec763dfdefbc2dae367aab1cc" datatype="html">\n        <source>Value should be less than the maximum blob size</source>\n        <target>Value should be less than the maximum blob size</target>\n      </trans-unit>\n      <trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">\n        <source>Maximum blob size</source>\n        <target>Tamaño de Blob máximo</target>\n      </trans-unit>\n      <trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">\n        <source>e.g., 512KiB</source>\n        <target>p. ej. 512 KiB</target>\n      </trans-unit>\n      <trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">\n        <source>Value should be greater than the minimum blob size</source>\n        <target>El valor debe ser mayor que el tamaño de Blob mínimo</target>\n      </trans-unit>\n      <trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">\n        <source>Ratio</source>\n        <target>Relación</target>\n      </trans-unit>\n      <trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">\n        <source>Compression ratio</source>\n        <target>Relación de compresión</target>\n      </trans-unit>\n      <trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">\n        <source>Value should be between 0.0 and 1.0</source>\n        <target>El valor debe estar entre 0,0 y 1,0</target>\n      </trans-unit>\n      <trans-unit id="8bb8293aa8161433778762ae025ffd5e7c85795e" datatype="html">\n        <source>Quotas</source>\n        <target>Quotas</target>\n      </trans-unit>\n      <trans-unit id="d99b34162c9c34f10d0ccd8dbae83d8569c2db77" datatype="html">\n        <source>Max bytes</source>\n        <target>Max bytes</target>\n      </trans-unit>\n      <trans-unit id="a1d14a18879c62f3f4ed705318b7164a1160e249" datatype="html">\n        <source>Leave it blank or specify 0 to disable this quota.</source>\n        <target>Leave it blank or specify 0 to disable this quota.</target>\n      </trans-unit>\n      <trans-unit id="7565b131562ff6c5f769fdbd239a772154abdd97" datatype="html">\n        <source>A valid quota should be greater than 0.</source>\n        <target>A valid quota should be greater than 0.</target>\n      </trans-unit>\n      <trans-unit id="f0016bd458baa88284a658ce9eeda42d8ad88d2c" datatype="html">\n        <source>e.g., 10GiB</source>\n        <target>ej.: 10 GiB</target>\n      </trans-unit>\n      <trans-unit id="b8bf35b66f09a301eef92ffc3cb2fd259df67ce9" datatype="html">\n        <source>Max objects</source>\n        <target>Max objects</target>\n      </trans-unit>\n      <trans-unit id="95f348167622d832c5ae532b6944635c8e2ae5cb" datatype="html">\n        <source>The value should be greater or equal to 0</source>\n        <target>The value should be greater or equal to 0</target>\n      </trans-unit>\n      <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html">\n        <source>Details</source>\n        <target>Detalles</target>\n      </trans-unit>\n      <trans-unit id="fbbaf5cb02ed419e79a27072478f716a4666a99d" datatype="html">\n        <source>Performance Details</source>\n        <target>Detalles de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">\n        <source>Cache Tiers Details</source>\n        <target>Detalles de niveles de caché</target>\n      </trans-unit>\n      <trans-unit id="ecbc084370a732fc3cde1966a60af78d71424ab4" datatype="html">\n        <source>Create Bootstrap Token</source>\n        <target>Create Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="603e9cc3ef2aab57f2b0a00e465b23b9cabefd9c" datatype="html">\n        <source>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To create a bootstrap token which can be imported\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Generate\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="660f97cd3188f8a04bd03b79e703fec72c6df04c" datatype="html">\n        <source>Site Name</source>\n        <target>Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c2a1dc72cffaf7ab3dc5599bf77b0a7fcad2b20" datatype="html">\n        <source>At least one pool is required.</source>\n        <target>At least one pool is required.</target>\n      </trans-unit>\n      <trans-unit id="1b258b258b4cc475ceb2871305b61756b0134f4a" datatype="html">\n        <source>Generate</source>\n        <target>Generate</target>\n      </trans-unit>\n      <trans-unit id="1edc1fc6cfbbb22353050ad6788508b3ed584f53" datatype="html">\n        <source>Token</source>\n        <target>Token</target>\n      </trans-unit>\n      <trans-unit id="ff785f5596aef34a93b9b4d1023e95c62eef5740" datatype="html">\n        <source>Generated token...</source>\n        <target>Generated token...</target>\n      </trans-unit>\n      <trans-unit id="5467a6bb0e7fade6def7499400d5e2a7d8d3da20" datatype="html">\n        <source>Import Bootstrap Token</source>\n        <target>Import Bootstrap Token</target>\n      </trans-unit>\n      <trans-unit id="9bb7aee0dec5164f45c0aa2f35f2fb2149d2c1d2" datatype="html">\n        <source>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To import a bootstrap token which was created\n          by a peer site cluster, provide the local site\'s name, select\n          which pools will have mirroring enabled, provide the generated\n          token, and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Import\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="9200e09686136a1d42adfb89c12fbfef2deea125" datatype="html">\n        <source>Direction</source>\n        <target>Direction</target>\n      </trans-unit>\n      <trans-unit id="9761484679958da8d12841a4efa5964d33fae575" datatype="html">\n        <source>The token is invalid.</source>\n        <target>The token is invalid.</target>\n      </trans-unit>\n      <trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">\n        <source>Import</source>\n        <target>Import</target>\n      </trans-unit>\n      <trans-unit id="b87bd96249f8afc23f5301cddb57b1464a98e71a" datatype="html">\n        <source>Edit site name</source>\n        <target>Edit site name</target>\n      </trans-unit>\n      <trans-unit id="cfff72c667274c12eb1ff71eadc25871c10c42dc" datatype="html">\n        <source>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>Edit the site name and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="40b7acea5b43f45e0bbd1efeba5200af4687981d" datatype="html">\n        <source>Site Name:</source>\n        <target>Site Name:</target>\n      </trans-unit>\n      <trans-unit id="f0b5d789d42c0e69348e5fe0037fcbf5b5fbbdcc" datatype="html">\n        <source>Move an image to trash</source>\n        <target>Mover una imagen a la papelera</target>\n      </trans-unit>\n      <trans-unit id="7ad22c1d4aab3b8946603cea62de266d5129ca10" datatype="html">\n        <source>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</source>\n        <target>This image contains snapshot(s), which will prevent it\n            from being removed after moved to trash.</target>\n      </trans-unit>\n      <trans-unit id="b4b3ced4f8aad4c446f348b14c3d94be2e2c350c" datatype="html">\n        <source>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </source>\n        <target>To move \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ imageSpecStr }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> to trash,\n          click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Move Image\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>. Optionally, you can pick an expiration date.\n        </target>\n      </trans-unit>\n      <trans-unit id="88f27d390844aad53b4240360e928156c5f0d326" datatype="html">\n        <source>Protection expires at</source>\n        <target>La protección caduca a las</target>\n      </trans-unit>\n      <trans-unit id="da166e9a0d27322f6ba8916d71ecc0f9905bb4b1" datatype="html">\n        <source>NOT PROTECTED</source>\n        <target>SIN PROTECCIÓN</target>\n      </trans-unit>\n      <trans-unit id="a1506e5f2ca22cad14502ec7a20fb6113ace145d" datatype="html">\n        <source>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</source>\n        <target>Formato de fecha erróneo. Use el formato "AAAA-MM-DD HH:mm:ss".</target>\n      </trans-unit>\n      <trans-unit id="aa7ea0bb7495281e0b3258467ac7d90a1e44a1a1" datatype="html">\n        <source>Protection has already expired. Please pick a future date or leave it empty.</source>\n        <target>La protección ya ha caducado. Seleccione una fecha del futuro o deje el campo vacío.</target>\n      </trans-unit>\n      <trans-unit id="536b3205c0c0d4d21685ec06feccfcf2fe14deb1" datatype="html">\n        <source>Move Image</source>\n        <target>Mover imagen</target>\n      </trans-unit>\n      <trans-unit id="c9f1026c1235f4d76ace47449e806efd181ab332" datatype="html">\n        <source>Deleting this image will also delete all its snapshots.</source>\n        <target>Deleting this image will also delete all its snapshots.</target>\n      </trans-unit>\n      <trans-unit id="55f864597e84d9bf88769e1fbfda1d64452430c9" datatype="html">\n        <source>The following snapshots are currently protected and will be removed:</source>\n        <target>The following snapshots are currently protected and will be removed:</target>\n      </trans-unit>\n      <trans-unit id="8a9910cd114c1deb9af74f6f99b4173403965bf2" datatype="html">\n        <source>Gateways</source>\n        <target>Gateways</target>\n      </trans-unit>\n      <trans-unit id="8835b9e49a3348b0a2f2162c21118af1f4bee45a" datatype="html">\n        <source>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </source>\n        <target>Must be greater than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'min\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="bbddac59563c8c126e3fe28691e4e247614fcbd1" datatype="html">\n        <source>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </source>\n        <target>Must be less than or equal to \n          <x id="INTERPOLATION" equiv-text="{{ limits[\'max\'] }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="e95ae009d0bdb45fcc656e8b65248cf7396080d5" datatype="html">\n        <source>Overview</source>\n        <target>Resumen</target>\n      </trans-unit>\n      <trans-unit id="bbd2045d5c37e4bb39a3c0fb62ea1ddf70a12838" datatype="html">\n        <source>Targets</source>\n        <target>Destinos</target>\n      </trans-unit>\n      <trans-unit id="6803e31b7395d94934e091a49a9524026b59b018" datatype="html">\n        <source>Discovery Authentication</source>\n        <target>Autenticación de descubrimiento</target>\n      </trans-unit>\n      <trans-unit id="e08a77594f3d89311cdf6da5090044270909c194" datatype="html">\n        <source>User</source>\n        <target>Usuario</target>\n      </trans-unit>\n      <trans-unit id="0214f773f8e394f50f953f39962e352d7863e959" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n              can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Los nombres de usuario deben tener entre 8 y 64 caracteres y\n                        solo pueden incluir letras y estos caracteres: ".", "@", "-", "_" o ":".</target>\n      </trans-unit>\n      <trans-unit id="c32ef07f8803a223a83ed17024b38e8d82292407" datatype="html">\n        <source>Password</source>\n        <target>Contraseña</target>\n      </trans-unit>\n      <trans-unit id="6682d1c00263bee204583a5d589b308b6be88b0f" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n              and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="ff40391de7a1944ea95091e4045cc34c4979b736" datatype="html">\n        <source>Mutual User</source>\n        <target>Usuario mutuo</target>\n      </trans-unit>\n      <trans-unit id="0cf73dbebe99b737c4d288788182fc356e3c93d3" datatype="html">\n        <source>Mutual Password</source>\n        <target>Contraseña mutua</target>\n      </trans-unit>\n      <trans-unit id="8800276925157c666b103c36ff7fe8ffe11980b4" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n              can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="53a583cd5f15059cc958b7d547f72cc78f68e123" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n    on how to configure and enable the iSCSI Targets management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="3b301d0044f62c92af0da53d7aaca52a436a547d" datatype="html">\n        <source>Available information:</source>\n        <target>Información disponible:</target>\n      </trans-unit>\n      <trans-unit id="332227f088a4877b3c11f5fb3ae8bc812c470fae" datatype="html">\n        <source>iSCSI Targets not available</source>\n        <target>Destinos iSCSI no disponibles</target>\n      </trans-unit>\n      <trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">\n        <source>Discovery authentication</source>\n        <target>Discovery authentication</target>\n      </trans-unit>\n      <trans-unit id="0f6e8f6094b180eaf1f11bc0ffe383f1cdcd059e" datatype="html">\n        <source>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </source>\n        <target>Only available for RBD images with \n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>fast-diff\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/> enabled\n        </target>\n      </trans-unit>\n      <trans-unit id="e70fcca5a99575cffef3ff8cbd5e69f06ffd0f1c" datatype="html">\n        <source>Pool</source>\n        <target>Repositorio</target>\n      </trans-unit>\n      <trans-unit id="03cc5b14b0a20d075e9009ff021f4f1660ba348a" datatype="html">\n        <source>Data Pool</source>\n        <target>Repositorio de datos</target>\n      </trans-unit>\n      <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html">\n        <source>Created</source>\n        <target>Creados</target>\n      </trans-unit>\n      <trans-unit id="7faaaa08f56427999f3be41df1093ce4089bbd75" datatype="html">\n        <source>Size</source>\n        <target>Tamaño</target>\n      </trans-unit>\n      <trans-unit id="afdb601c16162f2c798b16a2920955f1cc6a20aa" datatype="html">\n        <source>Objects</source>\n        <target>Objetos</target>\n      </trans-unit>\n      <trans-unit id="ceac8e132384322ec778ba760875a6c6897d3e42" datatype="html">\n        <source>Object size</source>\n        <target>Tamaño del objeto</target>\n      </trans-unit>\n      <trans-unit id="0a65771c9a73b9aa609d592fc96a64801a8f40bd" datatype="html">\n        <source>Provisioned</source>\n        <target>Aprovisionados</target>\n      </trans-unit>\n      <trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">\n        <source>N/A</source>\n        <target>N/D</target>\n      </trans-unit>\n      <trans-unit id="e5c009342a4e8381f64341d0bb61c2e4685f5a4b" datatype="html">\n        <source>Total provisioned</source>\n        <target>Total aprovisionado</target>\n      </trans-unit>\n      <trans-unit id="7f6bf8a43ae415f527ac961ea62471b983aaa97b" datatype="html">\n        <source>Striping unit</source>\n        <target>Unidad de repartición</target>\n      </trans-unit>\n      <trans-unit id="db710e8a8f011923f2d15d713fbae49c38b02b26" datatype="html">\n        <source>Striping count</source>\n        <target>Recuento de repartición</target>\n      </trans-unit>\n      <trans-unit id="3a4c2a9e76634ff14a60d52a718296f722d47c67" datatype="html">\n        <source>Parent</source>\n        <target>Padre</target>\n      </trans-unit>\n      <trans-unit id="6a209e68d78ffc2cc9c53d2e76158624efab71ad" datatype="html">\n        <source>Block name prefix</source>\n        <target>Prefijo de nombre de bloque</target>\n      </trans-unit>\n      <trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">\n        <source>Order</source>\n        <target>Orden</target>\n      </trans-unit>\n      <trans-unit id="f21b1d17b6c5042bb5805516eee37fde33739dd8" datatype="html">\n        <source>Snapshots</source>\n        <target>Instantáneas</target>\n      </trans-unit>\n      <trans-unit id="a5f9ba9bb9faa8284bcadb1cdbc6aaf969e9c4bb" datatype="html">\n        <source>Image</source>\n        <target>Imagen</target>\n      </trans-unit>\n      <trans-unit id="58e58f1a8786da9031a05e6770c5dafce82badf5" datatype="html">\n        <source>This setting overrides the global value</source>\n        <target>Este ajuste sustituye al valor global</target>\n      </trans-unit>\n      <trans-unit id="5decb3917d46a9ac6e5813699801becb7c3c1455" datatype="html">\n        <source>Global</source>\n        <target>Global</target>\n      </trans-unit>\n      <trans-unit id="36b46714164964c6258b08ed0a25f57d8a950f92" datatype="html">\n        <source>This is the global value. No value for this option has been set for this image.</source>\n        <target>Este es el valor global. No se ha definido ningún valor para esta opción para esta imagen.</target>\n      </trans-unit>\n      <trans-unit id="6547c9c4d5f62942ac4b1fe459cf9a03d4dbf5a0" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ action | titlecase }}"/> from\n        </target>\n      </trans-unit>\n      <trans-unit id="0e9ecf29a4fa5b057bd8052e0d801b3fde6a30bf" datatype="html">\n        <source>\'/\' and \'@\' are not allowed.</source>\n        <target>No se permiten los caracteres "/" ni "@".</target>\n      </trans-unit>\n      <trans-unit id="b99417c4dd46286ffd37c8d2e987c8b512ec7052" datatype="html">\n        <source>-- No rbd pools available --</source>\n        <target>-- No hay ningún repositorio RBD disponible --</target>\n      </trans-unit>\n      <trans-unit id="ef83ec9c304a89d45650e580dcdc2978c37b3a83" datatype="html">\n        <source>-- Select a pool --</source>\n        <target>-- Seleccione un repositorio --</target>\n      </trans-unit>\n      <trans-unit id="d649904466254d13df1fbf2d255f0bbc6553d213" datatype="html">\n        <source>-- No namespaces available --</source>\n        <target>-- No namespaces available --</target>\n      </trans-unit>\n      <trans-unit id="e22d7bb4d2d561e0832ee0b9a3da2468a080c4f0" datatype="html">\n        <source>-- Select a namespace --</source>\n        <target>-- Select a namespace --</target>\n      </trans-unit>\n      <trans-unit id="49449943d8cbf59d8c401c8bd2e76f92e207cc5f" datatype="html">\n        <source>Use a dedicated data pool</source>\n        <target>Usar un repositorio dedicado para datos</target>\n      </trans-unit>\n      <trans-unit id="870aee0dd31a9643bf62007beb8f1ae1deb34d42" datatype="html">\n        <source>Data pool</source>\n        <target>Repositorio de datos</target>\n      </trans-unit>\n      <trans-unit id="3792ca829d9b9f687e1f5d7733d30e9bb0bfec47" datatype="html">\n        <source>Dedicated pool that stores the object-data of the RBD.</source>\n        <target>Repositorio dedicado para almacenar los datos de objeto de RBD.</target>\n      </trans-unit>\n      <trans-unit id="0a88bbee20570aaf9615332fb27020627044874d" datatype="html">\n        <source>You have to increase the size.</source>\n        <target>Debe aumentar el tamaño.</target>\n      </trans-unit>\n      <trans-unit id="bc2e854e111ecf2bd7db170da5e3c2ed08181d88" datatype="html">\n        <source>Advanced</source>\n        <target>Avanzado</target>\n      </trans-unit>\n      <trans-unit id="3562a3778695a5f9c0445660e35301f0a39aaf73" datatype="html">\n        <source>Striping</source>\n        <target>Repartición</target>\n      </trans-unit>\n      <trans-unit id="ef3c3f3b5f562a5cdbe0ee2874287db1534b5958" datatype="html">\n        <source>Stripe unit</source>\n        <target>Unidad de repartición</target>\n      </trans-unit>\n      <trans-unit id="84471be1049006edecbcaef1a32ae0893c229c50" datatype="html">\n        <source>-- Select stripe unit --</source>\n        <target>-- Seleccione la unidad de repartición --</target>\n      </trans-unit>\n      <trans-unit id="8d32c5c54c8581c774a7f467fbd4e329b15a74fa" datatype="html">\n        <source>This field is required because stripe count is defined!</source>\n        <target>Este campo es obligatorio porque se ha definido el recuento de repartición.</target>\n      </trans-unit>\n      <trans-unit id="6bbf9040be7c5491d4a03f2185708f43a6582a3b" datatype="html">\n        <source>Stripe unit is greater than object size.</source>\n        <target>La unidad de repartición es mayor que el tamaño del objeto.</target>\n      </trans-unit>\n      <trans-unit id="a682f49f9b761591661276d7c6f550e641a130a4" datatype="html">\n        <source>Stripe count</source>\n        <target>Recuento de repartición</target>\n      </trans-unit>\n      <trans-unit id="baa74031990c5370008ba622d0a250f0929097f4" datatype="html">\n        <source>This field is required because stripe unit is defined!</source>\n        <target>Este campo es obligatorio porque se ha definido la unidad de repartición.</target>\n      </trans-unit>\n      <trans-unit id="cd2ada6d5ecbd5cbf89eae0a1f5326efedac0dbc" datatype="html">\n        <source>Stripe count must be greater than 0.</source>\n        <target>El recuento de repartición debe ser mayor que 0.</target>\n      </trans-unit>\n      <trans-unit id="2c07d24bb422aa8e5e568df1c5709083f0a9c8f1" datatype="html">\n        <source>Create Namespace</source>\n        <target>Create Namespace</target>\n      </trans-unit>\n      <trans-unit id="0cca6c0485f96d3a9610d0339cb1275a5f2c3f46" datatype="html">\n        <source>Namespace already exists.</source>\n        <target>Namespace already exists.</target>\n      </trans-unit>\n      <trans-unit id="5c5331983af566d4ac6a1024d15a3511786a4aa6" datatype="html">\n        <source>You are about to rollback</source>\n        <target>Se dispone a revertir</target>\n      </trans-unit>\n      <trans-unit id="49c0408946a6d67185947f455f15cc201d0d78e6" datatype="html">\n        <source>Purge Trash</source>\n        <target>Vaciar papelera</target>\n      </trans-unit>\n      <trans-unit id="681501eecd7f44d4b7a2f619605b36676e04c5b6" datatype="html">\n        <source>To purge, select one or</source>\n        <target>To purge, select one or</target>\n      </trans-unit>\n      <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html">\n        <source>All</source>\n        <target>Todas</target>\n      </trans-unit>\n      <trans-unit id="ea5d338dcef50ff5c24439fd784f6a67b594c33f" datatype="html">\n        <source>pools and click</source>\n        <target>pools and click</target>\n      </trans-unit>\n      <trans-unit id="55a4f598a4894b7fd5cb88f0ffd3c37ad009dd70" datatype="html">\n        <source>Pool:</source>\n        <target>Repositorio:</target>\n      </trans-unit>\n      <trans-unit id="d43dd2b9f7797e4cf3a604695bb33e4479108516" datatype="html">\n        <source>Pool name...</source>\n        <target>Nombre del repositorio...</target>\n      </trans-unit>\n      <trans-unit id="b0e7c7ed1d51a0c205c815048bc9f79e24ee6db2" datatype="html">\n        <source>Restore Image</source>\n        <target>Restaurar imágenes</target>\n      </trans-unit>\n      <trans-unit id="7369384817e0ad61ce871c9afdfbb538df2f97c1" datatype="html">\n        <source>To restore</source>\n        <target>Para restaurar</target>\n      </trans-unit>\n      <trans-unit id="e7f0abefc608f7fb452c2dc9b1cdc3dec432160e" datatype="html">\n        <source>type the image\'s new name and click</source>\n        <target>escriba el nombre nuevo de la imagen y haga clic en</target>\n      </trans-unit>\n      <trans-unit id="41307dd56fea669eed72e12a6c23af275f6bfd82" datatype="html">\n        <source>New Name</source>\n        <target>Nombre nuevo</target>\n      </trans-unit>\n      <trans-unit id="5c96a761dc55a21882c132c929583a424c9b8cf4" datatype="html">\n        <source>Expired at</source>\n        <target>Caducó a las</target>\n      </trans-unit>\n      <trans-unit id="661041e3fcff4d3e75c561e038ca2504cf2cc643" datatype="html">\n        <source>Protected until</source>\n        <target>Protección hasta</target>\n      </trans-unit>\n      <trans-unit id="0ee3b2322a1d3277f7e3fdb8a5141ac42bcf350b" datatype="html">\n        <source>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </source>\n        <target>This image is protected until \n          <x id="INTERPOLATION" equiv-text="{{ expiresAt | cdDate }}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a674ab267d1934bf395f87ca1503fd474296893f" datatype="html">\n        <source>iSCSI Topology</source>\n        <target>Topología iSCSI</target>\n      </trans-unit>\n      <trans-unit id="051dcc342cfa5c1eaf187a2001aaa162379a160c" datatype="html">\n        <source>Configure</source>\n        <target>Configure</target>\n      </trans-unit>\n      <trans-unit id="9e515f954730279c31d5301f02479666d6264e8b" datatype="html">\n        <source>Changing these parameters from their default values is usually not necessary.</source>\n        <target>Normalmente no es necesario cambiar los valores por defecto de estos parámetros.</target>\n      </trans-unit>\n      <trans-unit id="4e2591df099ddac796cda401c5f282da779d45f2" datatype="html">\n        <source>Identifier</source>\n        <target>Identifier</target>\n      </trans-unit>\n      <trans-unit id="62480a4859976427cf18fc8ef41d3a438eda0412" datatype="html">\n        <source>lun</source>\n        <target>lun</target>\n      </trans-unit>\n      <trans-unit id="8afc9eb4405e0aa554b2ba14140ef790cdecc040" datatype="html">\n        <source>wwn</source>\n        <target>wwn</target>\n      </trans-unit>\n      <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html">\n        <source>Settings</source>\n        <target>Ajustes</target>\n      </trans-unit>\n      <trans-unit id="69a47cbabcc51ca942606e1d8da0ec11f98a2690" datatype="html">\n        <source>Backstore</source>\n        <target>Almacén</target>\n      </trans-unit>\n      <trans-unit id="68e710782ccb5398b3acb8844caf0b199da2c3da" datatype="html">\n        <source>Confirm</source>\n        <target>Confirmar</target>\n      </trans-unit>\n      <trans-unit id="339878da255ab55447c43afef8d9b2f9753bf5f6" datatype="html">\n        <source>Advanced Settings</source>\n        <target>Ajustes avanzados</target>\n      </trans-unit>\n      <trans-unit id="1406c2fb12a20c1528b19bcc5e24a6a2386167f3" datatype="html">\n        <source>Target IQN</source>\n        <target>IQN de destino</target>\n      </trans-unit>\n      <trans-unit id="5fe42339be910372fa689f559155631862d218e8" datatype="html">\n        <source>IQN has wrong pattern.</source>\n        <target>El IQN tiene un patrón erróneo.</target>\n      </trans-unit>\n      <trans-unit id="050a7ff057d1e895357540406b6be5652b4d1c71" datatype="html">\n        <source>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</source>\n        <target>An IQN has the following notation\n                \'iqn.$year-$month.$reversedAddress:$definedName\'</target>\n      </trans-unit>\n      <trans-unit id="c8ada4b53396d8366db00a435acc61d53d857047" datatype="html">\n        <source>For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</source>\n        <target>Por ejemplo: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309</target>\n      </trans-unit>\n      <trans-unit id="e60c11e1b1dfbbeda577364b8de39ded2d796c5e" datatype="html">\n        <source>More information</source>\n        <target>Más información</target>\n      </trans-unit>\n      <trans-unit id="9b1aa85dfc6849196e64060db02c5410de69b7a1" datatype="html">\n        <source>This target has modified advanced settings.</source>\n        <target>Este destino tiene ajustes avanzados modificados.</target>\n      </trans-unit>\n      <trans-unit id="6990ad8d6182662e864495ac31c3758cda1c7a28" datatype="html">\n        <source>Portals</source>\n        <target>Portales</target>\n      </trans-unit>\n      <trans-unit id="6a3ac2b4137d723fd9878cd357c2012ff6c07973" datatype="html">\n        <source>Add portal</source>\n        <target>Añadir portal</target>\n      </trans-unit>\n      <trans-unit id="c3638c01b6c34066438909713ec96087c813fc7e" datatype="html">\n        <source>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </source>\n        <target>At least \n          <x id="INTERPOLATION" equiv-text="{{ minimum_gateways }}"/> gateways are required.\n        </target>\n      </trans-unit>\n      <trans-unit id="9aff25be088f0efe3eaaf62edf2bff41cc41a617" datatype="html">\n        <source>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </source>\n        <target>Backstore: \n          <x id="INTERPOLATION" equiv-text="{{ imagesSettings[image].backstore | iscsiBackstore }}"/>. \n        </target>\n      </trans-unit>\n      <trans-unit id="e3484cae8b118c576ca2815bf9c9406c2eb2cae3" datatype="html">\n        <source>This image has modified settings.</source>\n        <target>Esta imagen tiene ajustes modificados.</target>\n      </trans-unit>\n      <trans-unit id="1dff11e0820b6722ab240169f1232d70a54beaaa" datatype="html">\n        <source>Duplicated LUN numbers.</source>\n        <target>Duplicated LUN numbers.</target>\n      </trans-unit>\n      <trans-unit id="bf2dccf92ccff6e3b091792bf4205595406e1bfb" datatype="html">\n        <source>Duplicated WWN.</source>\n        <target>Duplicated WWN.</target>\n      </trans-unit>\n      <trans-unit id="808038f912fdc7f0e03f82d4afd3bf9178527fc8" datatype="html">\n        <source>Add image</source>\n        <target>Añadir imagen</target>\n      </trans-unit>\n      <trans-unit id="66c5fb27f52e75b70ca4b670b9b15a2a51cf9543" datatype="html">\n        <source>ACL authentication</source>\n        <target>Autenticación de ACL</target>\n      </trans-unit>\n      <trans-unit id="419c8b402609dcf49ae4932a5a4647dc8d79bbaf" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Usernames must have a length of 8 to 64 characters and\n                can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</target>\n      </trans-unit>\n      <trans-unit id="938050960d6653fddfcfd42425e18fb35a308262" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="f494bd31f095f6dcc656ce87ec2dcf07a2e9b30c" datatype="html">\n        <source>Initiators</source>\n        <target>Iniciadores</target>\n      </trans-unit>\n      <trans-unit id="e98239d8a6be1100119ff4b5630c822b82786740" datatype="html">\n        <source>Initiator</source>\n        <target>Iniciador</target>\n      </trans-unit>\n      <trans-unit id="f2c5059d8cda15d8d03e2cce30f2d139623d9a91" datatype="html">\n        <source>Client IQN</source>\n        <target>IQN del cliente</target>\n      </trans-unit>\n      <trans-unit id="107d5aabce23d900f0a80e6ddc1c10e29aa0bed8" datatype="html">\n        <source>Initiator IQN needs to be unique.</source>\n        <target>El IQN del iniciador debe ser exclusivo.</target>\n      </trans-unit>\n      <trans-unit id="bbf0b34a3fcc80800fcb44b9e1e86931a530dfe3" datatype="html">\n        <source>Usernames must have a length of 8 to 64 characters and\n                        can only contain letters, \'.\', \'@\', \'-\', \'_\' or \':\'.</source>\n        <target>Los nombres de usuario deben tener entre 8 y 64 caracteres y\n                        solo pueden incluir letras y estos caracteres: ".", "@", "-", "_" o ":".</target>\n      </trans-unit>\n      <trans-unit id="fdfee5d7a27e1bdd97a176097277bee078de6aaf" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters\n                        and can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="8406eb7415ee40e54d9ecb209abb056f06e3d666" datatype="html">\n        <source>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</source>\n        <target>Passwords must have a length of 12 to 16 characters and\n                        can only contain letters, \'@\', \'-\', \'_\' or \'/\'.</target>\n      </trans-unit>\n      <trans-unit id="5d1878d5fc761cbe9614bfd87047a740c82a6951" datatype="html">\n        <source>Initiator belongs to a group. Images will be configure in the group.</source>\n        <target>El iniciador pertenece a un grupo. Las imágenes se configurarán en el grupo.</target>\n      </trans-unit>\n      <trans-unit id="c0de67b9d97fafbf200f9451e8388ee8128a56ac" datatype="html">\n        <source>No items added.</source>\n        <target>No se ha añadido ningún elemento.</target>\n      </trans-unit>\n      <trans-unit id="d565e47726158e428ecdc952fc9233b9b7d7f049" datatype="html">\n        <source>Add initiator</source>\n        <target>Añadir iniciador</target>\n      </trans-unit>\n      <trans-unit id="c22ba03540aa3217da059f45e7eab138b51a96e2" datatype="html">\n        <source>Groups</source>\n        <target>Grupos</target>\n      </trans-unit>\n      <trans-unit id="4c90059afafb7e160384d9f512797c95bb95c6dc" datatype="html">\n        <source>Group</source>\n        <target>Grupo</target>\n      </trans-unit>\n      <trans-unit id="3084948274cff4f56d0f431af47240e9cf02fcc7" datatype="html">\n        <source>Add group</source>\n        <target>Añadir grupo</target>\n      </trans-unit>\n      <trans-unit id="c3a7e364a88ea4673199dfa98bc73e6dbe09dfac" datatype="html">\n        <source>Namespaces</source>\n        <target>Namespaces</target>\n      </trans-unit>\n      <trans-unit id="aba82bfd8e177d35b76cad7cd43941f8e5e5acac" datatype="html">\n        <source>Trash</source>\n        <target>Papelera</target>\n      </trans-unit>\n      <trans-unit id="66db799d67958d4b0765181d072df62e2d1c16f5" datatype="html">\n        <source>Issues</source>\n        <target>Problemas</target>\n      </trans-unit>\n      <trans-unit id="ef06d69259e587e28d52372455f44c7153cda7e7" datatype="html">\n        <source>Syncing</source>\n        <target>Sincronizando</target>\n      </trans-unit>\n      <trans-unit id="0b0901877d837d3fda16ba161eb74368d1c75b7a" datatype="html">\n        <source>Ready</source>\n        <target>Listo</target>\n      </trans-unit>\n      <trans-unit id="4057c56d63a7e9b140b1d01871a9229a5f30eb27" datatype="html">\n        <source>Edit pool mirror mode</source>\n        <target>Editar modo de duplicación de repositorio</target>\n      </trans-unit>\n      <trans-unit id="e1f367f5feaab38f6637dd1f967c848b447dea2d" datatype="html">\n        <source>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>To edit the mirror mode for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>, select a new mode from the list and click \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Update\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">\n        <source>Peer clusters must be removed prior to disabling mirror.</source>\n        <target>Los clústeres de par deben eliminarse antes de inhabilitar la duplicación.</target>\n      </trans-unit>\n      <trans-unit id="fa61522d482349707fd7dd03b90dc5781611b17f" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/>\n  pool mirror peer\n        </target>\n      </trans-unit>\n      <trans-unit id="4ddcb416c1c0aa1f54acf5beef1de81813e76fa6" datatype="html">\n        <source>{VAR_SELECT, select, edit {Edit} other {Add} }</source>\n        <target>{VAR_SELECT, select, edit {Editar} other {Añadir} }</target>\n      </trans-unit>\n      <trans-unit id="59ca65ece457429d90104ede4674965f62edbabe" datatype="html">\n        <source>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </source>\n        <target>\n          <x id="ICU" equiv-text="{mode, select, edit {...} other {...}}"/> the pool\n          mirror peer attributes for pool \n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>\n          <x id="INTERPOLATION" equiv-text="{{ poolName }}"/>\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/> and click\n          <x id="START_TAG_KBD" ctype="x-kbd" equiv-text="<kbd>"/>Submit\n          <x id="CLOSE_TAG_KBD" ctype="x-kbd" equiv-text="</kbd>"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="d3cc964811f852a168f4a2d5daa59068abc5cf53" datatype="html">\n        <source>Cluster Name</source>\n        <target>Nombre del clúster</target>\n      </trans-unit>\n      <trans-unit id="b631721fc56cb7fb1cbd07b802a487c5753f6a2d" datatype="html">\n        <source>The cluster name is not valid.</source>\n        <target>El nombre del clúster no es válido.</target>\n      </trans-unit>\n      <trans-unit id="ca6deafa31bf421f85094807982aee4bcb20a3ae" datatype="html">\n        <source>CephX ID</source>\n        <target>ID de CephX</target>\n      </trans-unit>\n      <trans-unit id="7539188a568c3d553cbde1bacaf32310c4264e24" datatype="html">\n        <source>CephX ID...</source>\n        <target>ID de CephX...</target>\n      </trans-unit>\n      <trans-unit id="a1c45b594b0fba22fc64e80c793a7ffe005fdb0e" datatype="html">\n        <source>The CephX ID is not valid.</source>\n        <target>El ID de CephX no es válido.</target>\n      </trans-unit>\n      <trans-unit id="20861576fcfce773c918c782cd4f5adf32382921" datatype="html">\n        <source>Monitor Addresses</source>\n        <target>Direcciones de monitores</target>\n      </trans-unit>\n      <trans-unit id="fa28eeed2b4bd4ccbe6e9349a1c2b3cb1c5de70a" datatype="html">\n        <source>Comma-delimited addresses...</source>\n        <target>Direcciones delimitadas por comas...</target>\n      </trans-unit>\n      <trans-unit id="dc016c82fd85848d5c1b2fd0e8469ee2027d9c16" datatype="html">\n        <source>The monitory address is not valid.</source>\n        <target>La dirección del monitor no es válida.</target>\n      </trans-unit>\n      <trans-unit id="e0ac55b83dc6739e62bc655cfe375b67c93e7f4a" datatype="html">\n        <source>CephX Key</source>\n        <target>Clave de CephX</target>\n      </trans-unit>\n      <trans-unit id="f53434bcb95bd86f1df9c8e22966f757614fc4ad" datatype="html">\n        <source>Base64-encoded key...</source>\n        <target>Clave con cifrado base64...</target>\n      </trans-unit>\n      <trans-unit id="4cd83164cd4f66b4abc2863f9ce6f599d789e4ca" datatype="html">\n        <source>CephX key must be base64 encoded.</source>\n        <target>La clave de CephX debe tener cifrado base64</target>\n      </trans-unit>\n      <trans-unit id="ca53d681a9892d6fdbb57ee9676582186515e961" datatype="html">\n        <source>Performance counters not available</source>\n        <target>Los contadores de rendimiento no están disponibles</target>\n      </trans-unit>\n      <trans-unit id="9424badb7e0c6ac792d020d7830645b529a80aad" datatype="html">\n        <source>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </source>\n        <target>Please consult the \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>documentation\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>\n  on how to configure and enable the Object Gateway management functionality.\n        </target>\n      </trans-unit>\n      <trans-unit id="479488ab6e91ecb375484edc78bee3d13467f33f" datatype="html">\n        <source>Daemons List</source>\n        <target>Lista de daemons</target>\n      </trans-unit>\n      <trans-unit id="eeba399c4dae8d4890c27b7a2cd2dc28fcf8b5f9" datatype="html">\n        <source>Performance Counters</source>\n        <target>Contadores de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="5f67f2247b9c6bbaf24a0f2d37f4ac0537c6fa53" datatype="html">\n        <source>Loading bucket data...</source>\n        <target>Cargando datos de la papelera...</target>\n      </trans-unit>\n      <trans-unit id="2798cc1e152b1ec07fd8daf94a2a073d1ba1ebcc" datatype="html">\n        <source>Id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="db4e1a734518691b128ef40b939cc673f01d03a6" datatype="html">\n        <source>The value is not valid.</source>\n        <target>El valor no es válido.</target>\n      </trans-unit>\n      <trans-unit id="eabb4db920d9f9b2480cf438468b86e1bea02a9b" datatype="html">\n        <source>The chosen name is already in use.</source>\n        <target>El nombre que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="0ee5132a8da30e0b7f9f5c70dbc91928d17dd909" datatype="html">\n        <source>Owner</source>\n        <target>Propietario</target>\n      </trans-unit>\n      <trans-unit id="8e4c918357c7445fbf19a203e5f0f0ece1960b3b" datatype="html">\n        <source>-- Select a user --</source>\n        <target>-- Seleccione un usuario --</target>\n      </trans-unit>\n      <trans-unit id="a4aab1f837bc8ec222e4f25922465d1c5929a1fc" datatype="html">\n        <source>Placement target</source>\n        <target>Placement target</target>\n      </trans-unit>\n      <trans-unit id="6bae0a7fc2c9c1fde7d937a8a1a3c7e6825cf7d1" datatype="html">\n        <source>-- Select a placement target --</source>\n        <target>-- Select a placement target --</target>\n      </trans-unit>\n      <trans-unit id="efeade5060b3add63863c24871f0830fb16b7e6d" datatype="html">\n        <source>Versioning</source>\n        <target>Versioning</target>\n      </trans-unit>\n      <trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">\n        <source>Enabled</source>\n        <target>Habilitado</target>\n      </trans-unit>\n      <trans-unit id="016d24e069e7d505a090fb8243e5cd43b35dc39b" datatype="html">\n        <source>Enables versioning for the objects in the bucket.</source>\n        <target>Enables versioning for the objects in the bucket.</target>\n      </trans-unit>\n      <trans-unit id="9e6775ffd06878aa145c07359f28557f01ede04f" datatype="html">\n        <source>Multi-Factor Authentication</source>\n        <target>Multi-Factor Authentication</target>\n      </trans-unit>\n      <trans-unit id="29e8a5d4fb767d4ad0c762c81c6264cec4c0ba97" datatype="html">\n        <source>Delete enabled</source>\n        <target>Delete enabled</target>\n      </trans-unit>\n      <trans-unit id="40fbc3ac8c1ea4ecfe62247e91f1f999ad5baf76" datatype="html">\n        <source>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</source>\n        <target>Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.</target>\n      </trans-unit>\n      <trans-unit id="d24c93a8c13db46defa06ed7b5e026a3edb52b91" datatype="html">\n        <source>Token Serial Number</source>\n        <target>Token Serial Number</target>\n      </trans-unit>\n      <trans-unit id="e6d9536c2af2e5e9a228c3e3e1809dc1fefe0149" datatype="html">\n        <source>Token PIN</source>\n        <target>Token PIN</target>\n      </trans-unit>\n      <trans-unit id="7b84370895ab9eb44672f57146fa05c5947f1c0c" datatype="html">\n        <source>Locking</source>\n        <target>Locking</target>\n      </trans-unit>\n      <trans-unit id="f038d51ab1645f15b0cd58f195c72a7eeebd4729" datatype="html">\n        <source>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</source>\n        <target>Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.</target>\n      </trans-unit>\n      <trans-unit id="9af1b4baa2dd8ed2bfc3cc756b12a2271c2dd793" datatype="html">\n        <source>Compliance</source>\n        <target>Compliance</target>\n      </trans-unit>\n      <trans-unit id="edd600fa489d1b4a4448dce694ed932e52ce8fda" datatype="html">\n        <source>Governance</source>\n        <target>Governance</target>\n      </trans-unit>\n      <trans-unit id="a5c3d9d2296f7886e8289b9f623323803deacfc6" datatype="html">\n        <source>Days</source>\n        <target>Days</target>\n      </trans-unit>\n      <trans-unit id="218c7d6d318c51e7105309aaeb0baec9d19e4efb" datatype="html">\n        <source>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="289b101ec12427b3ca819df9e43cc3b14fae2cc4" datatype="html">\n        <source>The entered value must be a positive integer.</source>\n        <target>The entered value must be a positive integer.</target>\n      </trans-unit>\n      <trans-unit id="def9fc628134d3a044b7c0ad2a83c846bdad56f1" datatype="html">\n        <source>Retention period requires either Days or Years.</source>\n        <target>Retention period requires either Days or Years.</target>\n      </trans-unit>\n      <trans-unit id="003c94fc143882ac8af6251a1595fe62978fe3e6" datatype="html">\n        <source>Years</source>\n        <target>Years</target>\n      </trans-unit>\n      <trans-unit id="14c6189ead0951f13049c7bf9af7642d0c41957a" datatype="html">\n        <source>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</source>\n        <target>The number of years that you want to specify for the default retention period that will be applied to new objects placed in this bucket.</target>\n      </trans-unit>\n      <trans-unit id="45cc8ca94b5a50842a9a8ef804a5ab089a38ae5c" datatype="html">\n        <source>ID</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="e5c51963a9c553b29427ef783bbb69fa6634fa8c" datatype="html">\n        <source>Index type</source>\n        <target>Tipo de índice</target>\n      </trans-unit>\n      <trans-unit id="8e6f950a32eaea32ec7e192f9ca3d3dfe469d4ba" datatype="html">\n        <source>Placement rule</source>\n        <target>Regla de colocación</target>\n      </trans-unit>\n      <trans-unit id="6972d213e31c4ea4f887e60db99d9881bc8fcd3e" datatype="html">\n        <source>Marker</source>\n        <target>Marcador</target>\n      </trans-unit>\n      <trans-unit id="47b02acd2d3254d1ace1926f840523f154ebef71" datatype="html">\n        <source>Maximum marker</source>\n        <target>Marcador máximo</target>\n      </trans-unit>\n      <trans-unit id="8fe73a4787b8068b2ba61f54ab7e0f9af2ea1fc9" datatype="html">\n        <source>Version</source>\n        <target>Versión</target>\n      </trans-unit>\n      <trans-unit id="092fa3a7df9168b14d3f83a77a4035e92b92ce15" datatype="html">\n        <source>Master version</source>\n        <target>Versión maestra</target>\n      </trans-unit>\n      <trans-unit id="97434cc5001d407f90c7447a12d9e8e6848a2aa3" datatype="html">\n        <source>Modification time</source>\n        <target>Hora de modificación</target>\n      </trans-unit>\n      <trans-unit id="90fe2e41e7fde38453ce4e619efeea9bc6adea9c" datatype="html">\n        <source>Zonegroup</source>\n        <target>Grupo de zona</target>\n      </trans-unit>\n      <trans-unit id="62a923f047ca49e7a4782629e91fea1ba32db68f" datatype="html">\n        <source>MFA Delete</source>\n        <target>MFA Delete</target>\n      </trans-unit>\n      <trans-unit id="649a410bd0ace333d067d8fa22f12bdbdb43533b" datatype="html">\n        <source>Bucket quota</source>\n        <target>Cuota de papelera</target>\n      </trans-unit>\n      <trans-unit id="cef1595d040e77cbb4466e60382028d4c2040cac" datatype="html">\n        <source>Maximum size</source>\n        <target>Tamaño máximo</target>\n      </trans-unit>\n      <trans-unit id="aa6fb95c355f172bda303de1ce2f38c251a149cf" datatype="html">\n        <source>Unlimited</source>\n        <target>Sin límite</target>\n      </trans-unit>\n      <trans-unit id="ee862a800364b4d11f9b8cb9955a28a60f840a45" datatype="html">\n        <source>Maximum objects</source>\n        <target>Número máximo de objetos</target>\n      </trans-unit>\n      <trans-unit id="08c74dc9762957593b91f6eb5d65efdfc975bf48" datatype="html">\n        <source>Username</source>\n        <target>Nombre de usuario</target>\n      </trans-unit>\n      <trans-unit id="49c614babd1950adb2be75df4e2c9747286d6adc" datatype="html">\n        <source>-- Select a username --</source>\n        <target>-- Seleccione un nombre de usuario --</target>\n      </trans-unit>\n      <trans-unit id="c217ee914725a37e9dd2336c721c8e63e9666bdc" datatype="html">\n        <source>Auto-generate key</source>\n        <target>Autogenerar clave</target>\n      </trans-unit>\n      <trans-unit id="2f1c1c0f2bce4c9f92d1a2061e8161cb0006c31a" datatype="html">\n        <source>Access key</source>\n        <target>Clave de acceso</target>\n      </trans-unit>\n      <trans-unit id="b864acb67296a9819c1db0069c4c47d8b5ce8f44" datatype="html">\n        <source>Secret key</source>\n        <target>Clave secreta</target>\n      </trans-unit>\n      <trans-unit id="b760f123248930122fc7e7b6b6bf94e376e959c8" datatype="html">\n        <source>Full name</source>\n        <target>Nombre completo</target>\n      </trans-unit>\n      <trans-unit id="69b6ac577a19acc39fc0c22342092f327fff2529" datatype="html">\n        <source>Email address</source>\n        <target>Dirección de correo electrónico</target>\n      </trans-unit>\n      <trans-unit id="92f3f203270a29b3001871153f02c063484a1574" datatype="html">\n        <source>Suspended</source>\n        <target>Suspendido</target>\n      </trans-unit>\n      <trans-unit id="8011e20c5bbe51602d459a860fbf29b599b55edd" datatype="html">\n        <source>System</source>\n        <target>Sistema</target>\n      </trans-unit>\n      <trans-unit id="db18a2772988415466a7f75dc42663ce78c9c1d3" datatype="html">\n        <source>Maximum buckets</source>\n        <target>Número máximo de papeleras</target>\n      </trans-unit>\n      <trans-unit id="2c4c62e8ba24601be5cfe7dc5d32c24bbbd4b53c" datatype="html">\n        <source>Subusers</source>\n        <target>Subusuarios</target>\n      </trans-unit>\n      <trans-unit id="17bb3082e6fe5003203ef992a3714172334631a1" datatype="html">\n        <source>Capabilities</source>\n        <target>Capacidades</target>\n      </trans-unit>\n      <trans-unit id="36ad38f9c1a1485e09b67778a28af84553290ffb" datatype="html">\n        <source>User quota</source>\n        <target>Cuota de usuario</target>\n      </trans-unit>\n      <trans-unit id="2aba1e87039819aca3b70faa9aa848c12bf139ca" datatype="html">\n        <source>Show</source>\n        <target>Mostrar</target>\n      </trans-unit>\n      <trans-unit id="0bcd5ef19af0f1b814141ca8c57df623d8270088" datatype="html">\n        <source>Keys</source>\n        <target>Claves</target>\n      </trans-unit>\n      <trans-unit id="f61c6867295f3b53d23557021f2f4e0aa1d0b8fc" datatype="html">\n        <source>Type</source>\n        <target>Tipo</target>\n      </trans-unit>\n      <trans-unit id="1221ca97d19eaa9a7bc0c5243d5fc5befe1d2314" datatype="html">\n        <source>-- Select a type --</source>\n        <target>-- Seleccione un tipo --</target>\n      </trans-unit>\n      <trans-unit id="d1b8990332af18f1c5159a6061ca889bcbb28432" datatype="html">\n        <source>Permission</source>\n        <target>Permiso</target>\n      </trans-unit>\n      <trans-unit id="a08c589f82f69d892307288da14190ae1dd583d5" datatype="html">\n        <source>-- Select a permission --</source>\n        <target>-- Seleccione un permiso --</target>\n      </trans-unit>\n      <trans-unit id="b2841767821d6b66238c34d07e413b0af67aee92" datatype="html">\n        <source>Subuser</source>\n        <target>Subusuario</target>\n      </trans-unit>\n      <trans-unit id="bd59fc25a7bd98cff3e75117c09697c8a007a514" datatype="html">\n        <source>The chosen subuser ID is already in use.</source>\n        <target>El ID de subusuario que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="3d386c357ebcbc04ed05c4babd5a03626f9b1674" datatype="html">\n        <source>read, write</source>\n        <target>lectura, escritura</target>\n      </trans-unit>\n      <trans-unit id="84e3e3f9a4f31a039b648c97debf95fcb20f4c4a" datatype="html">\n        <source>full</source>\n        <target>todos</target>\n      </trans-unit>\n      <trans-unit id="b6bf81d032a2316464f9df2f0d2f3d753f89f0d3" datatype="html">\n        <source>Swift key</source>\n        <target>Clave Swift</target>\n      </trans-unit>\n      <trans-unit id="1e0c12685d50d47448ceed9423977ef39775c037" datatype="html">\n        <source>Auto-generate secret</source>\n        <target>Autogenerar secreto</target>\n      </trans-unit>\n      <trans-unit id="3d1c7a6004bd5d86a7fa096ae24209e8aa7a53e3" datatype="html">\n        <source>Loading user data...</source>\n        <target>Cargando datos del usuario...</target>\n      </trans-unit>\n      <trans-unit id="faa5d834ab28571423d794d32b57998920efb65f" datatype="html">\n        <source>The user data could not be loaded.</source>\n        <target>No es posible cargar los datos del usuario.</target>\n      </trans-unit>\n      <trans-unit id="6aaf5d2a304167272ac73e3b1d1c162e16c77858" datatype="html">\n        <source>The chosen user ID is already in use.</source>\n        <target>El ID de usuario que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="df441e80db2157f9d272b75de724ba4a82b96b57" datatype="html">\n        <source>This is not a valid email address.</source>\n        <target>Esta dirección no es válida.</target>\n      </trans-unit>\n      <trans-unit id="ca271adf154956b8fcb28f4f50a37acb3057ff7c" datatype="html">\n        <source>The chosen email address is already in use.</source>\n        <target>La dirección de correo electrónico que ha elegido ya está en uso.</target>\n      </trans-unit>\n      <trans-unit id="030197cebe938edf35422e92fe14183d06eb670b" datatype="html">\n        <source>Max. buckets</source>\n        <target>Máx. papeleras</target>\n      </trans-unit>\n      <trans-unit id="f39256070bfc0714020dfee08895421fc1527014" datatype="html">\n        <source>Disabled</source>\n        <target>Inhabilitado</target>\n      </trans-unit>\n      <trans-unit id="a5c05002b0ac2040f1aede5e727e0ffd06eda819" datatype="html">\n        <source>Custom</source>\n        <target>Personalizar</target>\n      </trans-unit>\n      <trans-unit id="28872515cb81d197a3a1733fa546d3e0f0dd6c67" datatype="html">\n        <source>The entered value must be &gt;= 1.</source>\n        <target>The entered value must be &gt;= 1.</target>\n      </trans-unit>\n      <trans-unit id="583a219c524155c2314eb06ee29162bb315272a3" datatype="html">\n        <source>S3 key</source>\n        <target>Clave S3</target>\n      </trans-unit>\n      <trans-unit id="128d6efb51d9ddc7c0cc695a2deeca5b9523f6e4" datatype="html">\n        <source>There are no subusers.</source>\n        <target>No hay ningún subusuario.</target>\n      </trans-unit>\n      <trans-unit id="7fd6dfb8ecb982dbc3affb2c2d5414c4f5b6abd2" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ subuserLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="67c746c1ba9dab4351fedc4c7cba4e6d6b0dbc47" datatype="html">\n        <source>S3</source>\n        <target>S3</target>\n      </trans-unit>\n      <trans-unit id="d6819038d608623503918fb2553f53d68231ec3a" datatype="html">\n        <source>There are no keys.</source>\n        <target>No hay ninguna clave.</target>\n      </trans-unit>\n      <trans-unit id="fc1c1a7140ff6b815a95b65ee2780fdbe1b2b7a1" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.CREATE | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ s3keyLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="6ddb5e991a3ecd2659fb520bc5acc81b67e08ddd" datatype="html">\n        <source>Swift</source>\n        <target>Swift</target>\n      </trans-unit>\n      <trans-unit id="1d01eccdda47fc907c5be35bcb16d2dcd02b0270" datatype="html">\n        <source>There are no capabilities.</source>\n        <target>No hay ninguna capacidad</target>\n      </trans-unit>\n      <trans-unit id="043e2ec0036ceadd926fd5e3f93cd6f3565f3648" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{ actionLabels.ADD | titlecase }}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{ capabilityLabel | upperFirst }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f5a451c4ea65a4046f0b49d489a7013abf0b5861" datatype="html">\n        <source>All capabilities are already added.</source>\n        <target>All capabilities are already added.</target>\n      </trans-unit>\n      <trans-unit id="6146e13ceca5fa5cc17b771b282fe5955f3d19fa" datatype="html">\n        <source>Unlimited size</source>\n        <target>Tamaño ilimitado</target>\n      </trans-unit>\n      <trans-unit id="f6db8aa7c99fdce18edb33dde57729acede2b308" datatype="html">\n        <source>Max. size</source>\n        <target>Tamaño máx.</target>\n      </trans-unit>\n      <trans-unit id="fc630b2093e880fffa19df99d5cd8b87605037f8" datatype="html">\n        <source>Unlimited objects</source>\n        <target>Objetos ilimitados</target>\n      </trans-unit>\n      <trans-unit id="6cda5a993d06f0bb10048be9d3aba6555aa9f356" datatype="html">\n        <source>Max. objects</source>\n        <target>Objetos máx.</target>\n      </trans-unit>\n      <trans-unit id="623ac50f37a26caec6fd7cd519b653e3315cba25" datatype="html">\n        <source>The entered value must be &gt;= 0.</source>\n        <target>El valor introducido debe ser mayor o igual que 0.</target>\n      </trans-unit>\n      <trans-unit id="1ea5c4d8942c00752dcc72e72949c5d9832f6399" datatype="html">\n        <source>Description...</source>\n        <target>Descripción...</target>\n      </trans-unit>\n      <trans-unit id="70f45880fce6ac5d8e468e25e82aefbba8098cfe" datatype="html">\n        <source>Permissions</source>\n        <target>Permisos</target>\n      </trans-unit>\n      <trans-unit id="9610487cbeb5796d34d8601b5ac0c0a65f9e1d19" datatype="html">\n        <source>Roles</source>\n        <target>Funciones</target>\n      </trans-unit>\n      <trans-unit id="7f3bdcce4b2e8c37cd7f0f6c92ef8cff34b039b8" datatype="html">\n        <source>Confirm password</source>\n        <target>Confirmar contraseña</target>\n      </trans-unit>\n      <trans-unit id="cbb979e63ba50e0ca3adfa09cbdcaefd0853fca1" datatype="html">\n        <source>Password confirmation doesn\'t match the password.</source>\n        <target>Las contraseñas no coinciden.</target>\n      </trans-unit>\n      <trans-unit id="96621f9ed2e4ae5204564e583d2c816bedead571" datatype="html">\n        <source>Password expiration date</source>\n        <target>Password expiration date</target>\n      </trans-unit>\n      <trans-unit id="48932db3801fe9d5d72a60a3e656bffd17c1c5d9" datatype="html">\n        <source>Password expiration date...</source>\n        <target>Password expiration date...</target>\n      </trans-unit>\n      <trans-unit id="244aae9346da82b0922506c2d2581373a15641cc" datatype="html">\n        <source>Email</source>\n        <target>Correo electrónico</target>\n      </trans-unit>\n      <trans-unit id="d0ec081dd61eb4f43aea269077bbe38eae87b7f9" datatype="html">\n        <source>Invalid email.</source>\n        <target>Correo electrónico no válido.</target>\n      </trans-unit>\n      <trans-unit id="8913c216dd506e20e412e144381d8d2a65a84359" datatype="html">\n        <source>User must change password at next logon</source>\n        <target>User must change password at next logon</target>\n      </trans-unit>\n      <trans-unit id="0051a3479d3ba79135c16dc8cc017950a2cce821" datatype="html">\n        <source>You are about to remove "user read / update" permissions from your own user.</source>\n        <target>Se dispone a eliminar los permisos "lectura/actualización de usuario" de su propio usuario.</target>\n      </trans-unit>\n      <trans-unit id="af4bf9fcb256853f14cf947eb1deb8d7f176d3f9" datatype="html">\n        <source>If you continue, you will no longer be able to add or remove roles from any user.</source>\n        <target>Si continúa, no podrá añadir ni eliminar funciones en ningún usuario.</target>\n      </trans-unit>\n      <trans-unit id="7d1dcf2a9146caac0581329acf94806ec69a89a5" datatype="html">\n        <source>Are you sure you want to continue?</source>\n        <target>¿Seguro que desea continuar?</target>\n      </trans-unit>\n      <trans-unit id="85b79c9064aed1ead31ace985f31aa1363f6bdaf" datatype="html">\n        <source>Help</source>\n        <target>Ayuda</target>\n      </trans-unit>\n      <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">\n        <source>Documentation</source>\n        <target>Documentación</target>\n      </trans-unit>\n      <trans-unit id="e351b40b3869a5c7d19c3d4918cb1ac7aaab95c4" datatype="html">\n        <source>API</source>\n        <target>API</target>\n      </trans-unit>\n      <trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">\n        <source>About</source>\n        <target>Acerca de</target>\n      </trans-unit>\n      <trans-unit id="1481ecd21e760ac919a24e26cf790acd82e40199" datatype="html">\n        <source>Dashboard Settings</source>\n        <target>Ajustes de la consola</target>\n      </trans-unit>\n      <trans-unit id="a79aab4ef674bf3f6532292107c0054302236e0f" datatype="html">\n        <source>User management</source>\n        <target>Gestión del usuario</target>\n      </trans-unit>\n      <trans-unit id="049dfd9fe6c78914ad58cf89ac6a631fca28ec74" datatype="html">\n        <source>Logged in user</source>\n        <target>Usuario que ha entrado</target>\n      </trans-unit>\n      <trans-unit id="cd38a58e73f306d838e621959d47d5e7a2f06d1f" datatype="html">\n        <source>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </source>\n        <target>Signed in as\n          <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="<strong>"/>\n          <x id="INTERPOLATION" equiv-text="{{ username }}"/>\n          <x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="</strong>"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="739516c2ca75843d5aec9cf0e6b3e4335c4227b9" datatype="html">\n        <source>Change password</source>\n        <target>Change password</target>\n      </trans-unit>\n      <trans-unit id="5d22c795daf43877a5f708dca2bccd549eb0471d" datatype="html">\n        <source>Sign out</source>\n        <target>Salir</target>\n      </trans-unit>\n      <trans-unit id="91853167141c37b58868f3b0421383dd72fa8a01" datatype="html">\n        <source>Attributes (OSD map)</source>\n        <target>Atributos (mapa de OSD)</target>\n      </trans-unit>\n      <trans-unit id="97842f379e1d4157ac3ab0661b90c352e7cb72d5" datatype="html">\n        <source>Metadata not available</source>\n        <target>Los metadatos no están disponibles</target>\n      </trans-unit>\n      <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html">\n        <source>Metadata</source>\n        <target>Metadatos</target>\n      </trans-unit>\n      <trans-unit id="deba10b7279a589d01e919ea11f43c79ca1773e3" datatype="html">\n        <source>Device health</source>\n        <target>Device health</target>\n      </trans-unit>\n      <trans-unit id="d24e28e19c5703d7c6be44f4eb595a6a43b618ed" datatype="html">\n        <source>Performance counter</source>\n        <target>Contandor de rendimiento</target>\n      </trans-unit>\n      <trans-unit id="d1f7c81ed9c5034af4abcdf119b1c1e86cd019dd" datatype="html">\n        <source>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </source>\n        <target>Histogram not available: \n          <x id="INTERPOLATION" equiv-text="{{ osd.histogram_failed }}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="868abfff914873d1c65df798d8432ed04b8ae2a9" datatype="html">\n        <source>Writes</source>\n        <target>Escrituras</target>\n      </trans-unit>\n      <trans-unit id="996ebb9a653b5067f97bf3891ea9d2108e969492" datatype="html">\n        <source>Reads</source>\n        <target>Lecturas</target>\n      </trans-unit>\n      <trans-unit id="65ac79790aa477a97b1cc579e18a115a8df8918f" datatype="html">\n        <source>Histogram</source>\n        <target>Histograma</target>\n      </trans-unit>\n      <trans-unit id="3d87fc20ea8e5f0f0500ba5d5061b345be78ec5e" datatype="html">\n        <source>No hostname found.</source>\n        <target>No hostname found.</target>\n      </trans-unit>\n      <trans-unit id="26fb5f81b3581f06b9210defb0e71dc69a67e819" datatype="html">\n        <source>Current values</source>\n        <target>Valores actuales</target>\n      </trans-unit>\n      <trans-unit id="9abcd7c82643d60c22733470463f74e4a54bc069" datatype="html">\n        <source>Min</source>\n        <target>Mín.</target>\n      </trans-unit>\n      <trans-unit id="c3ced4d162a0a55ee233a187ce7208ba5e922418" datatype="html">\n        <source>Max</source>\n        <target>Máx.</target>\n      </trans-unit>\n      <trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">\n        <source>Source</source>\n        <target>Origen</target>\n      </trans-unit>\n      <trans-unit id="a446fb0eb11fbffcac805ece5a2d306d24e733d8" datatype="html">\n        <source>Level</source>\n        <target>Nivel</target>\n      </trans-unit>\n      <trans-unit id="39f2fb094e9b2eda13163fa3f3a31594cf9c1307" datatype="html">\n        <source>Can be updated at runtime (editable)</source>\n        <target>Se puede actualizar en el tiempo de ejecución (editable)</target>\n      </trans-unit>\n      <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html">\n        <source>Tags</source>\n        <target>Etiquetas</target>\n      </trans-unit>\n      <trans-unit id="ab0089ef47af61ca1d137bc908b96c290dfd9287" datatype="html">\n        <source>Enum values</source>\n        <target>Valores Enum</target>\n      </trans-unit>\n      <trans-unit id="819476f1264f1659f38e86f6abb542141b184832" datatype="html">\n        <source>See also</source>\n        <target>Véase también</target>\n      </trans-unit>\n      <trans-unit id="73caac4265ea7314ff061e5a1d78a6361a6dd3b8" datatype="html">\n        <source>Cluster Status</source>\n        <target>Estado del clúster</target>\n      </trans-unit>\n      <trans-unit id="1d4bc612bbf19aa9553853266b9e92c9d75f4464" datatype="html">\n        <source>Manager Daemons</source>\n        <target>Daemons de gestor</target>\n      </trans-unit>\n      <trans-unit id="946ac5dea9921dc09d7b0a63b89535371f283b19" datatype="html">\n        <source>Object Gateways</source>\n        <target>Instancias de Object Gateway</target>\n      </trans-unit>\n      <trans-unit id="ff03fa5bcf37c4da46ad736c1f7d03f959e8ba9a" datatype="html">\n        <source>Metadata Servers</source>\n        <target>Servidores de metadatos</target>\n      </trans-unit>\n      <trans-unit id="d817609ba4993eba859409ab71e566168f4d5f5a" datatype="html">\n        <source>iSCSI Gateways</source>\n        <target>Puertas de enlace iSCSI</target>\n      </trans-unit>\n      <trans-unit id="42c13e50391250ea9379bdf55d5d6c0228c0c8bc" datatype="html">\n        <source>Client IOPS</source>\n        <target>IOPS de cliente</target>\n      </trans-unit>\n      <trans-unit id="52213660b2454d139ada3079a42ec6caf3c3c01e" datatype="html">\n        <source>Client Throughput</source>\n        <target>Rendimiento del cliente</target>\n      </trans-unit>\n      <trans-unit id="32efd1c3f70e3c5244239de97a2cc95d98534a14" datatype="html">\n        <source>Client Read/Write</source>\n        <target>Lectura/escritura de cliente</target>\n      </trans-unit>\n      <trans-unit id="275485415092cbae3a9f3cbb786ebe283cacfdd5" datatype="html">\n        <source>Recovery Throughput</source>\n        <target>Rendimiento de recuperación</target>\n      </trans-unit>\n      <trans-unit id="6d9a9f55046891733ef71170e7652063765eb542" datatype="html">\n        <source>Scrub</source>\n        <target>Depuración</target>\n      </trans-unit>\n      <trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">\n        <source>Performance</source>\n        <target>Rendimiento</target>\n      </trans-unit>\n      <trans-unit id="88f383269db2d32cccee9e936fe549dccb9fdbf4" datatype="html">\n        <source>Raw Capacity</source>\n        <target>Capacidad en bruto</target>\n      </trans-unit>\n      <trans-unit id="c5f8a813f91a11af99132e4beafc136cfc13d73b" datatype="html">\n        <source>PGs per OSD</source>\n        <target>Grupos de colocación por OSD</target>\n      </trans-unit>\n      <trans-unit id="498a109c6e9e94f1966de01aa0326f7f0ac6fb52" datatype="html">\n        <source>PG Status</source>\n        <target>Estado del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="ce9dfdc6dccb28dc75a78c704e09dc18fb02dcfa" datatype="html">\n        <source>Capacity</source>\n        <target>Capacidad</target>\n      </trans-unit>\n      <trans-unit id="44ecac93d67c6a671198091c2270354f80322327" datatype="html">\n        <source>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </source>\n        <target>\n          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>\n          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/> See \n          <x id="START_LINK" ctype="x-a" equiv-text="<a>"/>Logs\n          <x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for more details.\n        </target>\n      </trans-unit>\n      <trans-unit id="0c1e17956453ad772dbe82d6946f62748c692f3e" datatype="html">\n        <source>Ranks</source>\n        <target>Clasificaciones</target>\n      </trans-unit>\n      <trans-unit id="2b24e0b0b1629d2e8a51b9da7c75d6e6379f4bc4" datatype="html">\n        <source>Standbys</source>\n        <target>Standbys</target>\n      </trans-unit>\n      <trans-unit id="50df62325726db950523a5be1c78b8905fcc25d4" datatype="html">\n        <source>MDS performance counters</source>\n        <target>MDS performance counters</target>\n      </trans-unit>\n      <trans-unit id="6e213942c6354b9cbe7a650f0f1499bfc1000fb6" datatype="html">\n        <source>Directories</source>\n        <target>Directories</target>\n      </trans-unit>\n      <trans-unit id="47116253e36f4e38a97ba41b2d3122c6c15ab904" datatype="html">\n        <source>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </source>\n        <target>Clients (\n          <x id="INTERPOLATION" equiv-text="{{ clients.length }}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="bd5a3b1c5a3c185c7bbb0e09a061d4cdc88ce5ad" datatype="html">\n        <source>Current</source>\n        <target>Actual</target>\n      </trans-unit>\n      <trans-unit id="e5e7d62e942083a59b0b31f54e17cd7958186052" datatype="html">\n        <source>Updated discovery authentication</source>\n        <target>Autenticación de descubrimiento actualizada</target>\n      </trans-unit>\n      <trans-unit id="dd4ab758afd5fd5a6c6a25b2b30ff99d0c00e9ad" datatype="html">\n        <source>There are no portals available.</source>\n        <target>No hay ningún portal disponible.</target>\n      </trans-unit>\n      <trans-unit id="83021e45778a4a230a14ca0c6d6ccdf05500ad93" datatype="html">\n        <source>There are no images available.</source>\n        <target>No hay ninguna imagen disponible.</target>\n      </trans-unit>\n      <trans-unit id="86684eb21f8a768e1dbc659e3d5da6861db544a0" datatype="html">\n        <source>There are no images available. Please make sure you add an image to the target.</source>\n        <target>No hay ninguna imagen disponible. Asegúrese de añadir una imagen al destino.</target>\n      </trans-unit>\n      <trans-unit id="fffda6e440078f57eba93944ce051c593cc6ed7f" datatype="html">\n        <source>There are no initiators available. Please make sure you add an initiator to the target.</source>\n        <target>No hay ningún iniciador disponible. Asegúrese de añadir un iniciador al destino.</target>\n      </trans-unit>\n      <trans-unit id="cea3c6fe490385eef1584cbc4983fda7ece24bb6" datatype="html">\n        <source>target</source>\n        <target>target</target>\n      </trans-unit>\n      <trans-unit id="38baeb215c17af9d9e295e371a57f4a48ab4c191" datatype="html">\n        <source>Target</source>\n        <target>Destino</target>\n      </trans-unit>\n      <trans-unit id="99e094878070eebc1b972bac02aaa33b2bf83b35" datatype="html">\n        <source># Sessions</source>\n        <target># Sessions</target>\n      </trans-unit>\n      <trans-unit id="2ea10b3668e04e057ba96ddcaf4c9b77089008ae" datatype="html">\n        <source>Unavailable gateway(s)</source>\n        <target>Unavailable gateway(s)</target>\n      </trans-unit>\n      <trans-unit id="c49e0dd71d551bd4928d967d78f0721dbf9f95e3" datatype="html">\n        <source>Target has active sessions</source>\n        <target>Target has active sessions</target>\n      </trans-unit>\n      <trans-unit id="a87acd72dfb68b45175270695209550a85adf50c" datatype="html">\n        <source>iSCSI target</source>\n        <target>iSCSI target</target>\n      </trans-unit>\n      <trans-unit id="873b72903b1858a9cd6c8967521030b4d7d1435b" datatype="html">\n        <source>State</source>\n        <target>Estado</target>\n      </trans-unit>\n      <trans-unit id="02b75464c0dc0cf49ea0208211b6fbcad3bf728a" datatype="html">\n        <source># Targets</source>\n        <target># Targets</target>\n      </trans-unit>\n      <trans-unit id="13415637c325ceefee29111b31cb48701490adf7" datatype="html">\n        <source>Read Bytes</source>\n        <target>Bytes de lectura</target>\n      </trans-unit>\n      <trans-unit id="e2ed82b7bbf4a006e60e6208c597b05d5b5556e9" datatype="html">\n        <source>Write Bytes</source>\n        <target>Bytes de escritura</target>\n      </trans-unit>\n      <trans-unit id="6a32a5f58845ca840185ea9564682094e77a1d80" datatype="html">\n        <source>Read Ops</source>\n        <target>Operaciones de lectura</target>\n      </trans-unit>\n      <trans-unit id="7c36cb8032af123d3550ffab2e1fa1e957c87fae" datatype="html">\n        <source>Write Ops</source>\n        <target>Operaciones de escritura</target>\n      </trans-unit>\n      <trans-unit id="458c33846a8c7e2feb9404bcf06723784e756cdc" datatype="html">\n        <source>A/O Since</source>\n        <target>A/O desde</target>\n      </trans-unit>\n      <trans-unit id="ff78f059449d44322f627d0f66df07abe476962b" datatype="html">\n        <source>Instance</source>\n        <target>Instancia</target>\n      </trans-unit>\n      <trans-unit id="36fad7995cadfb3a6f0d43ef2db280146b3ca022" datatype="html">\n        <source>Issue</source>\n        <target>Problema</target>\n      </trans-unit>\n      <trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">\n        <source>Progress</source>\n        <target>Progreso</target>\n      </trans-unit>\n      <trans-unit id="25b725dba712a7a020fd34a72297befae975a492" datatype="html">\n        <source>Edit Site Name</source>\n        <target>Edit Site Name</target>\n      </trans-unit>\n      <trans-unit id="8c375764db42f5d736fb56d01b8052c006ccc8e2" datatype="html">\n        <source>Edit Mode</source>\n        <target>Editar modo</target>\n      </trans-unit>\n      <trans-unit id="45932f2a0ea524b3425f4320ee46a6d1c68977bc" datatype="html">\n        <source>Add Peer</source>\n        <target>Añadir par</target>\n      </trans-unit>\n      <trans-unit id="d3dc34662e3cda0dad646221651cebd26f731485" datatype="html">\n        <source>Edit Peer</source>\n        <target>Editar par</target>\n      </trans-unit>\n      <trans-unit id="e8a0ec0b6ee72db0f27c186e09640d1ed41964bd" datatype="html">\n        <source>Delete Peer</source>\n        <target>Suprimir par</target>\n      </trans-unit>\n      <trans-unit id="314de06d6f64d39149e78e6d796585c0246fec0b" datatype="html">\n        <source>Leader</source>\n        <target>Líder</target>\n      </trans-unit>\n      <trans-unit id="7acaab450312114059ced9e3737798ee9aa738b1" datatype="html">\n        <source># Local</source>\n        <target>N.º locales</target>\n      </trans-unit>\n      <trans-unit id="7a3ffd88868135c44be3994263bb8e49d8358884" datatype="html">\n        <source># Remote</source>\n        <target>N.º remotos</target>\n      </trans-unit>\n      <trans-unit id="85ca0fd6a6ddd211023c70a25753122c5b978787" datatype="html">\n        <source>mirror peer</source>\n        <target>duplicar par</target>\n      </trans-unit>\n      <trans-unit id="a6493c6ca346cd052da40423eda9c132de2b2002" datatype="html">\n        <source>Key</source>\n        <target>Clave</target>\n      </trans-unit>\n      <trans-unit id="e9cac80fb5d9de66f0006d0bec530fd1fc69a674" datatype="html">\n        <source>RBD</source>\n        <target>RBD</target>\n      </trans-unit>\n      <trans-unit id="4130b1a836f2000cfe9a11fb62493dc42d444de7" datatype="html">\n        <source>Deep flatten</source>\n        <target>Aplanamiento profundo</target>\n      </trans-unit>\n      <trans-unit id="7b17694d7cb8ecb7c8440bc999dac21b44455b33" datatype="html">\n        <source>Layering</source>\n        <target>En capas</target>\n      </trans-unit>\n      <trans-unit id="6a072ce577c2079d0e0c31071a16824f6d22b84d" datatype="html">\n        <source>Exclusive lock</source>\n        <target>Bloqueo exclusivo</target>\n      </trans-unit>\n      <trans-unit id="7354f01320bf936a7f85577c9f71402635c3a362" datatype="html">\n        <source>Object map (requires exclusive-lock)</source>\n        <target>Mapa de objetos (requiere bloqueo exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="fb7e625c1152f1c102cd16460955d124edff1770" datatype="html">\n        <source>Journaling (requires exclusive-lock)</source>\n        <target>En diario (requiere bloqueo exclusivo)</target>\n      </trans-unit>\n      <trans-unit id="df4044632bfc211dd96544fc8f007dabbeeb506c" datatype="html">\n        <source>Fast diff (interlocked with object-map)</source>\n        <target>Fast diff (interlocked with object-map)</target>\n      </trans-unit>\n      <trans-unit id="130fd872c78271a8f86b1ab16a76e823969c47d9" datatype="html">\n        <source>Namespace</source>\n        <target>Namespace</target>\n      </trans-unit>\n      <trans-unit id="14abc99daed542774633046c53b6ce8251331141" datatype="html">\n        <source>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</source>\n        <target>This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.</target>\n      </trans-unit>\n      <trans-unit id="51699f716cf34e6622ff7bfd84641480c045271a" datatype="html">\n        <source>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Created namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bf44b7d6379ce0198ed3d95a27642a224181bf1d" datatype="html">\n        <source>Total images</source>\n        <target>Total images</target>\n      </trans-unit>\n      <trans-unit id="371ce3ffe62548d15e391a248bc554d903bb03fc" datatype="html">\n        <source>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </source>\n        <target>Deleted namespace \'\n          <x id="INTERPOLATION" equiv-text="{{pool}}"/>/\n          <x id="INTERPOLATION_1" equiv-text="{{namespace}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="9d704fd00ca929f90c3119cefc581821ae58a73e" datatype="html">\n        <source>Namespace contains images</source>\n        <target>Namespace contains images</target>\n      </trans-unit>\n      <trans-unit id="c2017dc94b4f57a347ccb126e546e88942f4d7a6" datatype="html">\n        <source>RBD Snapshot</source>\n        <target>RBD Snapshot</target>\n      </trans-unit>\n      <trans-unit id="631fc50ec7c9bd81dc797a3c7e09eda1178ad999" datatype="html">\n        <source>Parent image must support Layering</source>\n        <target>Parent image must support Layering</target>\n      </trans-unit>\n      <trans-unit id="cb60c1cd3655234756b5b92d4d597d92d520ee30" datatype="html">\n        <source>PROTECTED</source>\n        <target>PROTECTED</target>\n      </trans-unit>\n      <trans-unit id="deffb86b8fb0541254ad5a43862d82bff6b6a6c4" datatype="html">\n        <source>UNPROTECTED</source>\n        <target>SIN PROTECCIÓN</target>\n      </trans-unit>\n      <trans-unit id="7eb984588f4835f6d0187b33769b4b0f62821640" datatype="html">\n        <source>RBD snapshot rollback</source>\n        <target>Reversión de instantánea RBD</target>\n      </trans-unit>\n      <trans-unit id="4be22bf20ef82614ed53bcd3b912a85590aa71c9" datatype="html">\n        <source>Rollback</source>\n        <target>Revertir</target>\n      </trans-unit>\n      <trans-unit id="2a04c483708d261751d62082d6f03a50d4577b1e" datatype="html">\n        <source>RBD snapshot</source>\n        <target>Instantánea RBD</target>\n      </trans-unit>\n      <trans-unit id="fa96769d1ea86741297cb9b9769b0dcfde58c8b4" datatype="html">\n        <source>Deleted At</source>\n        <target>Suprimido a las</target>\n      </trans-unit>\n      <trans-unit id="e928864038ca70ee7d67bbf1fd71a01c3938a127" datatype="html">\n        <source>id</source>\n        <target>ID</target>\n      </trans-unit>\n      <trans-unit id="240c9c1e96dc38814922a83ad041dc815b084f32" datatype="html">\n        <source>type</source>\n        <target>tipo</target>\n      </trans-unit>\n      <trans-unit id="c9d7ec7ee5b4e282f2228fa996651ec4ef5195a9" datatype="html">\n        <source>state</source>\n        <target>estado</target>\n      </trans-unit>\n      <trans-unit id="5780e5c3b4fc2ae07836bb5221cec4f8d597630d" datatype="html">\n        <source>version</source>\n        <target>versión</target>\n      </trans-unit>\n      <trans-unit id="fe22ca53e651df951dac25b67c17894b0980f767" datatype="html">\n        <source>Host</source>\n        <target>Host</target>\n      </trans-unit>\n      <trans-unit id="fb69299354312c8954ecf324997ccafcd9f6b14b" datatype="html">\n        <source>root</source>\n        <target>raíz</target>\n      </trans-unit>\n      <trans-unit id="d34feb369d308075b423d5c5fc431f9766bf7a11" datatype="html">\n        <source>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </source>\n        <target>Evicted client "\n          <x id="INTERPOLATION" equiv-text="{{clientId}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7db875ff4cc626d394f37fba95c075b2e4bfeb00" datatype="html">\n        <source>Standby daemons</source>\n        <target>Daemons de reserva</target>\n      </trans-unit>\n      <trans-unit id="3c3a423d91e36ac6624e909fcd2669a25685f847" datatype="html">\n        <source>Rank</source>\n        <target>Clasificación</target>\n      </trans-unit>\n      <trans-unit id="9596ecae8956e96921acef47aec787f6bdc37454" datatype="html">\n        <source>Daemon</source>\n        <target>Daemon</target>\n      </trans-unit>\n      <trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">\n        <source>Activity</source>\n        <target>Actividad</target>\n      </trans-unit>\n      <trans-unit id="e3a986984ae0c3b43af648c3fa638649d1c00348" datatype="html">\n        <source>Dentries</source>\n        <target>Dentries</target>\n      </trans-unit>\n      <trans-unit id="7c692ab865066967d73c6d64ec0691cc6ce91b93" datatype="html">\n        <source>Inodes</source>\n        <target>Inodos</target>\n      </trans-unit>\n      <trans-unit id="45f210b96a2a6e91f52f153a4f8dc30662629f8e" datatype="html">\n        <source>Usage</source>\n        <target>Uso</target>\n      </trans-unit>\n      <trans-unit id="950b5f04a2efd3f11c0f76418d5a4212381e792e" datatype="html">\n        <source>Origin</source>\n        <target>Origin</target>\n      </trans-unit>\n      <trans-unit id="2ea2ec95d93fd55d0db6e9d2b95b25e153d4cec2" datatype="html">\n        <source>Max size</source>\n        <target>Max size</target>\n      </trans-unit>\n      <trans-unit id="665dced3a61bca44924a0bde4be47390225a4898" datatype="html">\n        <source>Max files</source>\n        <target>Max files</target>\n      </trans-unit>\n      <trans-unit id="0ccf776baac60794b142526986f3af85848c7059" datatype="html">\n        <source>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </source>\n        <target>The inherited \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/> is the maximum value to be used.\n        </target>\n      </trans-unit>\n      <trans-unit id="b0e2ef28384f2de6674cac300c779f900929a89b" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/> CephFS \n          <x id="INTERPOLATION_1" equiv-text="{{quotaName}}"/> quota for \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="542ef638499635dec7641bdc2e499258094187cc" datatype="html">\n        <source>size</source>\n        <target>size</target>\n      </trans-unit>\n      <trans-unit id="ce90ff00c341d8eef96b0e7956bb85b8faba3839" datatype="html">\n        <source>files</source>\n        <target>files</target>\n      </trans-unit>\n      <trans-unit id="fbe8b9340c08c24aef62ffe81c83e2b46a4f1495" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{quotaName}}"/> quota \n          <x id="INTERPOLATION_1" equiv-text="{{value}}"/> from \'\n          <x id="INTERPOLATION_2" equiv-text="{{path}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="37c2c0a4a356465eef2edfb09ffffc6db5259975" datatype="html">\n        <source>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </source>\n        <target>Value has to be at least \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or more\n        </target>\n      </trans-unit>\n      <trans-unit id="73f8e64703a707e2cf98b9a10653cd3bbdd8cab1" datatype="html">\n        <source>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </source>\n        <target>Value has to be at most \n          <x id="INTERPOLATION" equiv-text="{{value}}"/> or less\n        </target>\n      </trans-unit>\n      <trans-unit id="9da0107a35751e722c8b4bca7636fc7645dbdbdc" datatype="html">\n        <source>Updated</source>\n        <target>Actualizado</target>\n      </trans-unit>\n      <trans-unit id="b6a4cf4f302c7fcbec199ce0df42b8282d682b04" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{action}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{quotaValue}}"/>\n          <x id="INTERPOLATION_2" equiv-text="{{conclusion}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a40024afb071f68fec949094a71f832d5611bca5" datatype="html">\n        <source>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>in order to inherit \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c108ff588291e9c040adea2adf35e7236cf29925" datatype="html">\n        <source>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </source>\n        <target>which isn\'t used because of the inheritance of \n          <x id="INTERPOLATION" equiv-text="{{quotaValue}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d3785a64d1c72b03b2212855ce695b45ed0342d2" datatype="html">\n        <source>in order to have no quota on the directory</source>\n        <target>in order to have no quota on the directory</target>\n      </trans-unit>\n      <trans-unit id="c4d3a3446a7f36825291c5e76c4a6b7919f9bd2f" datatype="html">\n        <source>Create Snapshot</source>\n        <target>Create Snapshot</target>\n      </trans-unit>\n      <trans-unit id="e9af734e231b837d64df21008e2eb1fdff566a61" datatype="html">\n        <source>Please enter the name of the snapshot.</source>\n        <target>Please enter the name of the snapshot.</target>\n      </trans-unit>\n      <trans-unit id="8c4d3039e6a953b0d6f1b1313ffa60c5d2b35dc7" datatype="html">\n        <source>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Created snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="126ad894f74ee9a999825f3f4ac5a31fdfc093bf" datatype="html">\n        <source>CephFs Snapshot</source>\n        <target>CephFs Snapshot</target>\n      </trans-unit>\n      <trans-unit id="1e4d1c0865adc485260740c42ac5af68ce8feb13" datatype="html">\n        <source>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </source>\n        <target>Deleted snapshot "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>" for "\n          <x id="INTERPOLATION_1" equiv-text="{{path}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="22e4e574b7f8abf58254f328792445b42e2a924a" datatype="html">\n        <source>The value can be updated at runtime.</source>\n        <target>El valor se puede actualizar en el tiempo de ejecución.</target>\n      </trans-unit>\n      <trans-unit id="d7770de7b2343c9deeaa7ebf37ba3e35ca5c5988" datatype="html">\n        <source>Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via \'ceph config\n      set ...\'. This option should be configured via ceph.conf or via the\n      command line.</source>\n        <target>Los daemons/clientes no extraen este valor de la\n      base de datos de configuración del monitor. No se recomienda definir esta opción con "ceph config\n      set ...". Esta opción se debe configurar mediante ceph.conf o a través\n      de la línea de comandos.</target>\n      </trans-unit>\n      <trans-unit id="83f11fd1dc503c37931ea6c1c5c1e8c2b4b597b6" datatype="html">\n        <source>Option takes effect only during daemon startup.</source>\n        <target>La opción solo surte efecto durante el inicio del daemon.</target>\n      </trans-unit>\n      <trans-unit id="837a07cd6a971038b8b1aa190c43440c9fdb5d8b" datatype="html">\n        <source>Option only affects cluster creation.</source>\n        <target>La opción solo afecta a la creación del clúster.</target>\n      </trans-unit>\n      <trans-unit id="2566a88eb247c918b71cfe5b354c31de0d4b01e5" datatype="html">\n        <source>Option only affects daemon creation.</source>\n        <target>La opción solo afecta a la creación del daemon.</target>\n      </trans-unit>\n      <trans-unit id="1cdc60cfc09c257625768f3d2082816cdef27279" datatype="html">\n        <source>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </source>\n        <target>Updated config option \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="d473e0f684a60db45d6f31e993f693f74290e056" datatype="html">\n        <source>Service</source>\n        <target>Servicio</target>\n      </trans-unit>\n      <trans-unit id="6986e0df8092d822ac2c076520d83994c78834fc" datatype="html">\n        <source>Modified</source>\n        <target>Modified</target>\n      </trans-unit>\n      <trans-unit id="9951bb3983c7dba6fde013e05c922e4fe1a44367" datatype="html">\n        <source>Current value</source>\n        <target>Valor actual</target>\n      </trans-unit>\n      <trans-unit id="4a01c175f90dd92b432f4a4a199d2c7bb9d997ff" datatype="html">\n        <source>Editable</source>\n        <target>Editable</target>\n      </trans-unit>\n      <trans-unit id="261c0af854e8684abc15f89dce6efb3e72344b18" datatype="html">\n        <source>host</source>\n        <target>host</target>\n      </trans-unit>\n      <trans-unit id="b1b381321d4cef04605d3e6e8847ea2b72a03799" datatype="html">\n        <source>Identify</source>\n        <target>Identify</target>\n      </trans-unit>\n      <trans-unit id="a5d5e407f8c4e1b152509c966c90f37edf68472e" datatype="html">\n        <source>Device path</source>\n        <target>Device path</target>\n      </trans-unit>\n      <trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">\n        <source>Available</source>\n        <target>Available</target>\n      </trans-unit>\n      <trans-unit id="396974120fc614fc930a27c8d15a094d82a3a9e4" datatype="html">\n        <source>Vendor</source>\n        <target>Vendor</target>\n      </trans-unit>\n      <trans-unit id="6ec98fa3d6504ba1fd03465194b53706c8263c99" datatype="html">\n        <source>Model</source>\n        <target>Model</target>\n      </trans-unit>\n      <trans-unit id="f2d785f5658c96c6a2f505cdd625108bcece84c3" datatype="html">\n        <source>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </source>\n        <target>Identify device \n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="c97ab45ca09248f8f1ba60328175741657fe39ce" datatype="html">\n        <source>Please enter the duration how long to blink the LED.</source>\n        <target>Please enter the duration how long to blink the LED.</target>\n      </trans-unit>\n      <trans-unit id="87e56ee5057023d7e8b59420b838bad112b043bc" datatype="html">\n        <source>1 minute</source>\n        <target>1 minute</target>\n      </trans-unit>\n      <trans-unit id="affa3b3bf1f36531e5ae65291f8a7cd1b06860ee" datatype="html">\n        <source>2 minutes</source>\n        <target>2 minutes</target>\n      </trans-unit>\n      <trans-unit id="878c6645b7fc26d85c7aee17a9d8c282a938dcf3" datatype="html">\n        <source>5 minutes</source>\n        <target>5 minutes</target>\n      </trans-unit>\n      <trans-unit id="aa0a76140961594b7176ade241e5025a7dbb5dce" datatype="html">\n        <source>10 minutes</source>\n        <target>10 minutes</target>\n      </trans-unit>\n      <trans-unit id="0a7f83a1f27750ef634a1f1f97263fac36113b1f" datatype="html">\n        <source>15 minutes</source>\n        <target>15 minutes</target>\n      </trans-unit>\n      <trans-unit id="699b690d686dbb8e00a1e95b89ba2fffb548da6e" datatype="html">\n        <source>Execute</source>\n        <target>Execute</target>\n      </trans-unit>\n      <trans-unit id="aa975a86dd49979a3ae90b9f3fc5b2c97311d422" datatype="html">\n        <source>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>Identifying \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' started on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="1a6e6ad05508130b7a99ce5b15daf3227c2a930c" datatype="html">\n        <source>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </source>\n        <target>Updated options for module "\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="6bd47ff8707aa2e6a94a4a6e2566b86dc7956d5f" datatype="html">\n        <source>Always-On</source>\n        <target>Always-On</target>\n      </trans-unit>\n      <trans-unit id="ac6c9212896d39b23811ed2dadab7d07336ec559" datatype="html">\n        <source>Enable</source>\n        <target>Habilitar</target>\n      </trans-unit>\n      <trans-unit id="6766a926d80bb7763785621098dae459d6226429" datatype="html">\n        <source>Disable</source>\n        <target>Inhabilitar</target>\n      </trans-unit>\n      <trans-unit id="340f2f312c2eb353e5cd69aee6bee7f5a73c34ac" datatype="html">\n        <source>This Manager module is always on.</source>\n        <target>This Manager module is always on.</target>\n      </trans-unit>\n      <trans-unit id="6a0b3657745dd7a2f2162f1cc790bf9004d0845d" datatype="html">\n        <source>Reconnecting, please wait ...</source>\n        <target>Conectando de nuevo. Espere...</target>\n      </trans-unit>\n      <trans-unit id="7099a8878af7a0a26fe5663c4f46cfe87142b75d" datatype="html">\n        <source>Public Address</source>\n        <target>Dirección pública</target>\n      </trans-unit>\n      <trans-unit id="cbdd1cdc0c7a87f55dd177bc44212f0fc4b80852" datatype="html">\n        <source>Open Sessions</source>\n        <target>Sesiones abiertas</target>\n      </trans-unit>\n      <trans-unit id="34c6f45591d420b1101dcee53999d1de91c0e400" datatype="html">\n        <source>No available devices</source>\n        <target>No available devices</target>\n      </trans-unit>\n      <trans-unit id="dcfe8807a2a1d0d7074a02afe9b80645bd03b9ab" datatype="html">\n        <source>Please add primary devices first</source>\n        <target>Please add primary devices first</target>\n      </trans-unit>\n      <trans-unit id="05d024719e53f85f7f294b7e21dfd805709a0b06" datatype="html">\n        <source>Add devices by using filters</source>\n        <target>Add devices by using filters</target>\n      </trans-unit>\n      <trans-unit id="37e58d1cbdf8212b380efa51422e42821d4f08e6" datatype="html">\n        <source>No In</source>\n        <target>No incluir</target>\n      </trans-unit>\n      <trans-unit id="12706eb5af17ff5ad77b3de21af368d24678e00b" datatype="html">\n        <source>OSDs that were previously marked out will not be marked back in when they start</source>\n        <target>Los OSD que se excluyeron anteriormente no se volverán a incluir cuando se inicien</target>\n      </trans-unit>\n      <trans-unit id="96114d7624d11dc90ca46cfa96145fe22118df76" datatype="html">\n        <source>No Out</source>\n        <target>No excluir</target>\n      </trans-unit>\n      <trans-unit id="a2ef636fe1ddd56b63e4aaf3d292f33dbf735ef3" datatype="html">\n        <source>OSDs will not automatically be marked out after the configured interval</source>\n        <target>Los OSD no se excluirán automáticamente después del intervalo configurado</target>\n      </trans-unit>\n      <trans-unit id="ee50aefa9b8bde1e5429b48709a23abfe08358e0" datatype="html">\n        <source>No Up</source>\n        <target>No activar</target>\n      </trans-unit>\n      <trans-unit id="608929b939307e397586a98cea52ae38997c7273" datatype="html">\n        <source>OSDs are not allowed to start</source>\n        <target>No se permite que los OSD se inicien</target>\n      </trans-unit>\n      <trans-unit id="1751ab69c1e7f62927afedbf7116e0116316c551" datatype="html">\n        <source>No Down</source>\n        <target>No desactivar</target>\n      </trans-unit>\n      <trans-unit id="41fac86dfb65c1db690f3e87f6497cb73b281084" datatype="html">\n        <source>OSD failure reports are being ignored, such that the monitors will not mark OSDs down</source>\n        <target>Se ignoran los informes de error de OSD, de forma que los monitores no desactivarán los OSD</target>\n      </trans-unit>\n      <trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">\n        <source>Pause</source>\n        <target>Pausa</target>\n      </trans-unit>\n      <trans-unit id="191d71dadcc8790573d46706a0b48211de4b8334" datatype="html">\n        <source>Pauses reads and writes</source>\n        <target>Pone en pausa las lecturas y escrituras</target>\n      </trans-unit>\n      <trans-unit id="471d5ba75836f38c19992cf83d8822632d99e473" datatype="html">\n        <source>No Scrub</source>\n        <target>No depurar</target>\n      </trans-unit>\n      <trans-unit id="5b8caa61814121bc36dac0c34a9e9de3cae74990" datatype="html">\n        <source>Scrubbing is disabled</source>\n        <target>La depuración está inhabilitada</target>\n      </trans-unit>\n      <trans-unit id="7f29a0ac1c797bdc0347dd5d0734ba83e96e7ce6" datatype="html">\n        <source>No Deep Scrub</source>\n        <target>No depuración profunda</target>\n      </trans-unit>\n      <trans-unit id="01da61ab216541a8d31259cebd16b10c7e5fc124" datatype="html">\n        <source>Deep Scrubbing is disabled</source>\n        <target>La depuración profunda está inhabilitada</target>\n      </trans-unit>\n      <trans-unit id="0b86c7f18ac725de62c7e192dcfccd02c0dc40ab" datatype="html">\n        <source>No Backfill</source>\n        <target>No reponer</target>\n      </trans-unit>\n      <trans-unit id="bd33a2bdc8fbed3b7469f3717c16d9aaa2851fdd" datatype="html">\n        <source>Backfilling of PGs is suspended</source>\n        <target>La reposición de grupos de colocación se suspende</target>\n      </trans-unit>\n      <trans-unit id="df526de2b93c4099a30c200ef551608e39ee5256" datatype="html">\n        <source>No Rebalance</source>\n        <target>No Rebalance</target>\n      </trans-unit>\n      <trans-unit id="c5b70346245f8d52b58e5e7fe222ce82f12429ce" datatype="html">\n        <source>OSD will choose not to backfill unless PG is also degraded</source>\n        <target>OSD will choose not to backfill unless PG is also degraded</target>\n      </trans-unit>\n      <trans-unit id="7fbbd036394cfa623add40299757bc87df8eaa7e" datatype="html">\n        <source>No Recover</source>\n        <target>No recuperar</target>\n      </trans-unit>\n      <trans-unit id="f3ee9b451a64dca47299c9b4ae1091c2008068ad" datatype="html">\n        <source>Recovery of PGs is suspended</source>\n        <target>La recuperación de los grupos de colocación se suspende</target>\n      </trans-unit>\n      <trans-unit id="de904148fe7e8d812218f50333ffe247900617c5" datatype="html">\n        <source>Bitwise Sort</source>\n        <target>Orden bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2613c9fde29785bcd75f0abeccb653d14d7527b3" datatype="html">\n        <source>Use bitwise sort</source>\n        <target>Usar orden bit a bit</target>\n      </trans-unit>\n      <trans-unit id="2fe10d84250aeee365db244251d40934c70ff1e9" datatype="html">\n        <source>Purged Snapdirs</source>\n        <target>Snapdir limpiados</target>\n      </trans-unit>\n      <trans-unit id="6b22a5b780eda3c5d500cdac9c6d4f96978c38f1" datatype="html">\n        <source>OSDs have converted snapsets</source>\n        <target>Los OSD tienen snapset convertidos</target>\n      </trans-unit>\n      <trans-unit id="c42f0ba60564dc5b977a8c7f3fdcde9efbb39c60" datatype="html">\n        <source>Recovery Deletes</source>\n        <target>Supresiones de recuperación</target>\n      </trans-unit>\n      <trans-unit id="72fe39979198ea2ed6db6274b5029025cb316d90" datatype="html">\n        <source>Deletes performed during recovery instead of peering</source>\n        <target>Supresiones realizadas durante la recuperación, en lugar de emparejamientos</target>\n      </trans-unit>\n      <trans-unit id="1bb4a1f9127cefe624c173557a716d0ebb6d647c" datatype="html">\n        <source>PG Log Hard Limit</source>\n        <target>Límite estricto de registro del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="e03c0321397fdf7a9c22e8d6b5015424943c0a57" datatype="html">\n        <source>Puts a hard limit on pg log length</source>\n        <target>Establece un límite estricto para la longitud del registro del grupo de colocación</target>\n      </trans-unit>\n      <trans-unit id="3c384e2e80c6b5eb24861fbf4225b69486cff4a3" datatype="html">\n        <source>Updated OSD Flags</source>\n        <target>Indicadores de OSD actualizados</target>\n      </trans-unit>\n      <trans-unit id="948758e1412bb2ecdb98e3a4f1cbb6d7458456f2" datatype="html">\n        <source>Encryption</source>\n        <target>Encryption</target>\n      </trans-unit>\n      <trans-unit id="c8b1475105463088593de1022ff6dceb523eae0e" datatype="html">\n        <source>OSD</source>\n        <target>OSD</target>\n      </trans-unit>\n      <trans-unit id="688578fcc739d6f0c5fb6c366dbb19d21c6d9e36" datatype="html">\n        <source>out</source>\n        <target>excluir</target>\n      </trans-unit>\n      <trans-unit id="cb0f69bdd4dea41d7d45c74b6e07f98de8a2ab26" datatype="html">\n        <source>in</source>\n        <target>Incluir</target>\n      </trans-unit>\n      <trans-unit id="b5fbc7c7f007dd53b2318525bb7ff8b0376c9e37" datatype="html">\n        <source>down</source>\n        <target>desactivar</target>\n      </trans-unit>\n      <trans-unit id="b58719bcb9184e1a7884d00d22d10899d59bf295" datatype="html">\n        <source>Mark</source>\n        <target>Marcar</target>\n      </trans-unit>\n      <trans-unit id="31a1c1aa03f1e5084750bedb4e3fdc04ce2cb6ca" datatype="html">\n        <source>OSD lost</source>\n        <target>OSD perdido</target>\n      </trans-unit>\n      <trans-unit id="f3fc4c85c5b8f1dedea0496b72d0af9da7b9e0d9" datatype="html">\n        <source>marked lost</source>\n        <target>marcado como perdido</target>\n      </trans-unit>\n      <trans-unit id="40fedc157ad899a18ec40573f770d18b040959d2" datatype="html">\n        <source>Purge</source>\n        <target>Limpiar</target>\n      </trans-unit>\n      <trans-unit id="4f3cff08c7033b63bbccfe66006b1bcaea48ddd8" datatype="html">\n        <source>purged</source>\n        <target>limpiado</target>\n      </trans-unit>\n      <trans-unit id="8e5d1b01eca6dce26a4751f0b19bda7a6ab8db5b" datatype="html">\n        <source>destroy</source>\n        <target>destruir</target>\n      </trans-unit>\n      <trans-unit id="495a06b78bf165a7b545fa002137f0846b094a3d" datatype="html">\n        <source>destroyed</source>\n        <target>destruido</target>\n      </trans-unit>\n      <trans-unit id="70ef158c584bafe788e319a0bffa11b02ee9abf1" datatype="html">\n        <source>delete</source>\n        <target>suprimir</target>\n      </trans-unit>\n      <trans-unit id="a5b387f5a15b95e339df10fc23526c659a2b6c6f" datatype="html">\n        <source>deleted</source>\n        <target>deleted</target>\n      </trans-unit>\n      <trans-unit id="107614b994f2b01abdc1ca179bf780b0cd933ec4" datatype="html">\n        <source>Recovery Priority</source>\n        <target>Recovery Priority</target>\n      </trans-unit>\n      <trans-unit id="359dad5a3a912ef9dece3194035020856805aa96" datatype="html">\n        <source>PG scrub</source>\n        <target>PG scrub</target>\n      </trans-unit>\n      <trans-unit id="953144c420c2e5abd02e6a687433eac60fa852bd" datatype="html">\n        <source>PGs</source>\n        <target>Grupos de colocación</target>\n      </trans-unit>\n      <trans-unit id="7d3523ea9d35c274cef84043de8a2fdde540a9a1" datatype="html">\n        <source>Read bytes</source>\n        <target>Bytes de lectura</target>\n      </trans-unit>\n      <trans-unit id="f15bf7f588f09ca79795b17bc244e8d336f28171" datatype="html">\n        <source>Write bytes</source>\n        <target>Bytes de escritura</target>\n      </trans-unit>\n      <trans-unit id="f3c33322823c846b13f59ba2c8f234405bba99e1" datatype="html">\n        <source>Read ops</source>\n        <target>Operaciones de lectura</target>\n      </trans-unit>\n      <trans-unit id="7e0b24a17546cbfab48b03dc874461d1ca68bc9a" datatype="html">\n        <source>Write ops</source>\n        <target>Operaciones de escritura</target>\n      </trans-unit>\n      <trans-unit id="b27d1dd31789610130b7cdbf88c4da552cffe936" datatype="html">\n        <source>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </source>\n        <target>Edit OSD: \n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="986f1379580078e77666d10f8ddf4f839c6ca71d" datatype="html">\n        <source>Edit OSD</source>\n        <target>Edit OSD</target>\n      </trans-unit>\n      <trans-unit id="a4b09e2fa39c3e4f1a387f191fbae4eea3ce7bf5" datatype="html">\n        <source>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </source>\n        <target>Updated OSD "\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="d45455406092f58e6b089cb440b5b7934b801a01" datatype="html">\n        <source>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark OSD \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="de0b7806e451b3b3dbd564decba59981fe781c18" datatype="html">\n        <source>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </source>\n        <target>Mark \n          <x id="INTERPOLATION" equiv-text="{{markAction}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="bba1d3bb4f8a47aa2b3068e242562196eadb1e83" datatype="html">\n        <source>PG scrub options</source>\n        <target>PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="b0b7748ebc9b7a6942a8cac4a89d4b215b365878" datatype="html">\n        <source>Updated PG scrub options</source>\n        <target>Updated PG scrub options</target>\n      </trans-unit>\n      <trans-unit id="4edc2162af0bd6cd941eaf730d20a7e3b5a83ba7" datatype="html">\n        <source>Max Backfills</source>\n        <target>Número máximo de reposiciones</target>\n      </trans-unit>\n      <trans-unit id="eb5e6c24a48a1dfe23e0a772b762be5e949c0c8a" datatype="html">\n        <source>Recovery Max Active</source>\n        <target>Máximo de recuperaciones activas</target>\n      </trans-unit>\n      <trans-unit id="4a23c6d3859e03184118620d2baeb736ac765fbf" datatype="html">\n        <source>Recovery Max Single Start</source>\n        <target>Máximo de recuperaciones de inicio único</target>\n      </trans-unit>\n      <trans-unit id="97049169ef5228fd1724de2fcdad1fec2858eaf8" datatype="html">\n        <source>Recovery Sleep</source>\n        <target>Reposo de recuperación</target>\n      </trans-unit>\n      <trans-unit id="89553524f4e7db5c437b07dcfdc7b831d56ded1a" datatype="html">\n        <source>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </source>\n        <target>Updated OSD recovery speed priority "\n          <x id="INTERPOLATION" equiv-text="{{value}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ccf5f30798c03d2d8efd0e6eb508320c018b722d" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{operation}}"/> was initialized in the following OSD(s): \n          <x id="INTERPOLATION_1" equiv-text="{{id}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="3bc2d18913479965cb046ec75e2ac3f7b7a77ce5" datatype="html">\n        <source>Create Silence</source>\n        <target>Create Silence</target>\n      </trans-unit>\n      <trans-unit id="78917e8031aaf913ac3fa63295325ce8879703ce" datatype="html">\n        <source>Job</source>\n        <target>Trabajo</target>\n      </trans-unit>\n      <trans-unit id="94287619205068b591c18493c64781424864c259" datatype="html">\n        <source>Severity</source>\n        <target>Gravedad</target>\n      </trans-unit>\n      <trans-unit id="e6cfbe0c5e0302ba2cec22315f6a28f8ac46b651" datatype="html">\n        <source>Started</source>\n        <target>Iniciado</target>\n      </trans-unit>\n      <trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">\n        <source>URL</source>\n        <target>URL</target>\n      </trans-unit>\n      <trans-unit id="d9f726c70aeba7fa6d3d68bff718abe78b1e50ac" datatype="html">\n        <source>Query</source>\n        <target>Query</target>\n      </trans-unit>\n      <trans-unit id="a5cd682a8a33bdc72e093d059429e3cc3a50ec1d" datatype="html">\n        <source>silence</source>\n        <target>silence</target>\n      </trans-unit>\n      <trans-unit id="f557e117e059e7036c6eecacd325a6ae35d866e0" datatype="html">\n        <source>Attribute name</source>\n        <target>Attribute name</target>\n      </trans-unit>\n      <trans-unit id="50f7f517ad8158667f7d4e2bd6f3256e05156e75" datatype="html">\n        <source>Regular expression</source>\n        <target>Regular expression</target>\n      </trans-unit>\n      <trans-unit id="81b1eab399c47110d50f45e3ccb4c009de7cb581" datatype="html">\n        <source>Please add your Prometheus host to the dashboard configuration and refresh the page</source>\n        <target>Please add your Prometheus host to the dashboard configuration and refresh the page</target>\n      </trans-unit>\n      <trans-unit id="29b4ae3296e239446fa0dea88a5112de15cffa54" datatype="html">\n        <source>Created by</source>\n        <target>Created by</target>\n      </trans-unit>\n      <trans-unit id="8d833cceee0ba4c5161b130365e02bc1e129b57e" datatype="html">\n        <source>Ends</source>\n        <target>Ends</target>\n      </trans-unit>\n      <trans-unit id="46a11ff4289e8c88b1b7a935f8d8ee704055f11a" datatype="html">\n        <source>Silence</source>\n        <target>Silence</target>\n      </trans-unit>\n      <trans-unit id="f2ea47d702c7f5e3e5fa751bf9959e21030b72e6" datatype="html">\n        <source>Daemon type</source>\n        <target>Daemon type</target>\n      </trans-unit>\n      <trans-unit id="6c131968e6ab730d86443e6fc11c5cc2a76d7bac" datatype="html">\n        <source>Daemon ID</source>\n        <target>Daemon ID</target>\n      </trans-unit>\n      <trans-unit id="5738f0ca7ddd9594058ce051b1d5d576e2782825" datatype="html">\n        <source>Container ID</source>\n        <target>Container ID</target>\n      </trans-unit>\n      <trans-unit id="78ebcf850cd440c5efc15e6a3a522ae75aeff669" datatype="html">\n        <source>Container Image name</source>\n        <target>Container Image name</target>\n      </trans-unit>\n      <trans-unit id="ea0c7ab9a7bdf646d494abf8c85fbf67d934d079" datatype="html">\n        <source>Container Image ID</source>\n        <target>Container Image ID</target>\n      </trans-unit>\n      <trans-unit id="bf2468fd965b8a59c135ad549b3a612aa9873abc" datatype="html">\n        <source>Status Description</source>\n        <target>Status Description</target>\n      </trans-unit>\n      <trans-unit id="19867330bdc84096f5a93ab087a1766476c8a074" datatype="html">\n        <source>Last Refreshed</source>\n        <target>Last Refreshed</target>\n      </trans-unit>\n      <trans-unit id="2349ee2027ab6ceb3e4b8834928562075b7e1ac7" datatype="html">\n        <source>Container image name</source>\n        <target>Container image name</target>\n      </trans-unit>\n      <trans-unit id="3c475503fb93338811af6b3d9ccacca1d7334609" datatype="html">\n        <source>Container image ID</source>\n        <target>Container image ID</target>\n      </trans-unit>\n      <trans-unit id="8dd15f6c73c05a8b0bd7b6d416487ab6570b88c8" datatype="html">\n        <source>Running</source>\n        <target>Running</target>\n      </trans-unit>\n      <trans-unit id="fb2e1bed329dc5b84197808c778abb9edcbdb335" datatype="html">\n        <source>Used</source>\n        <target>Usado</target>\n      </trans-unit>\n      <trans-unit id="4f1ab04d9100fb0df0e62b921ec46ae052ae29fc" datatype="html">\n        <source>Avail.</source>\n        <target>Dispon.</target>\n      </trans-unit>\n      <trans-unit id="a1c9b3d4fa67450fe9afd1d726f8a1bd91d990ea" datatype="html">\n        <source>Clean</source>\n        <target>Limpio</target>\n      </trans-unit>\n      <trans-unit id="0054f5460090d6dde385e8f099d598df5d28cf54" datatype="html">\n        <source>Working</source>\n        <target>En curso</target>\n      </trans-unit>\n      <trans-unit id="a8059e31694578c1b0344a76a345357dd60e8f01" datatype="html">\n        <source>Warning</source>\n        <target>Advertencia</target>\n      </trans-unit>\n      <trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">\n        <source>Unknown</source>\n        <target>Desconocido</target>\n      </trans-unit>\n      <trans-unit id="88155be1b9b9c6140d6e8f93bac4a775cfdc6671" datatype="html">\n        <source>Healthy</source>\n        <target>Healthy</target>\n      </trans-unit>\n      <trans-unit id="8a3aec4dc1a6e2d4c612ae85e0537acbb20a0f85" datatype="html">\n        <source>Misplaced</source>\n        <target>Misplaced</target>\n      </trans-unit>\n      <trans-unit id="ee81f9bf7ceac69712e0b83e8adc268739f9673e" datatype="html">\n        <source>Degraded</source>\n        <target>Degraded</target>\n      </trans-unit>\n      <trans-unit id="14625bc4025daef1969777a67a3cca27e0cd9167" datatype="html">\n        <source>Unfound</source>\n        <target>Unfound</target>\n      </trans-unit>\n      <trans-unit id="8f23ea509d081c2f747d083d44608dbf125b2ea2" datatype="html">\n        <source>replicas</source>\n        <target>replicas</target>\n      </trans-unit>\n      <trans-unit id="129a2224e1f9d19eb5e11e2a07fe10a785556484" datatype="html">\n        <source>up</source>\n        <target>activo</target>\n      </trans-unit>\n      <trans-unit id="d5f29cf0af691726483262d647eb6622be002512" datatype="html">\n        <source>no filesystems</source>\n        <target>sin sistemas de archivos</target>\n      </trans-unit>\n      <trans-unit id="b1c4387ffab06f3fa9fdb4411aea955595538d44" datatype="html">\n        <source>active</source>\n        <target>activo</target>\n      </trans-unit>\n      <trans-unit id="1aaf7054d826f2cb05ec3e88a5a4b8116861e1f5" datatype="html">\n        <source>standby</source>\n        <target>reserva</target>\n      </trans-unit>\n      <trans-unit id="c9a1080024dca344a48acdb77fa2d54e059f7254" datatype="html">\n        <source>n/a</source>\n        <target>n/d</target>\n      </trans-unit>\n      <trans-unit id="84a1787b6df375847c70f782861d7e7f8f43bff4" datatype="html">\n        <source>active daemon</source>\n        <target>daemon activo</target>\n      </trans-unit>\n      <trans-unit id="24407dc2ebfafaf6b131ee978683b893c3f1d763" datatype="html">\n        <source>quorum</source>\n        <target>quórum</target>\n      </trans-unit>\n      <trans-unit id="2fa50bc07995c6ea660412294298ded39fcb08d9" datatype="html">\n        <source>The NFS Ganesha service is not configured.</source>\n        <target>El servicio NFS Ganesha no está configurado.</target>\n      </trans-unit>\n      <trans-unit id="af1396bdc49f45ea6c4a1e414769f5e2a382c834" datatype="html">\n        <source>Transport</source>\n        <target>Transportar</target>\n      </trans-unit>\n      <trans-unit id="b6a0e176d96c4feed2e975a039c044fcf822e152" datatype="html">\n        <source>CephFS User</source>\n        <target>Usuario de CephFS</target>\n      </trans-unit>\n      <trans-unit id="44dc610cf201a163e8c38da810acec9596930bb3" datatype="html">\n        <source>CephFS Filesystem</source>\n        <target>Sistemas de archivos CephFS</target>\n      </trans-unit>\n      <trans-unit id="db6dc7124be83c7055cb0f2719e31f2f9d46fd3d" datatype="html">\n        <source>(inherited from global config)</source>\n        <target>(se hereda de la configuración global)</target>\n      </trans-unit>\n      <trans-unit id="e1f97bb86f991553ec7b535cb39e7eaa99dfcfe2" datatype="html">\n        <source>inherited from global config</source>\n        <target>se hereda de la configuración global</target>\n      </trans-unit>\n      <trans-unit id="e751800766277e7c2edd652cec7a7a1a68a37852" datatype="html">\n        <source>-- Select what kind of user id squashing is performed --</source>\n        <target>-- Seleccione el tipo de reducción de privilegios de ID de usuario que se va a realizar --</target>\n      </trans-unit>\n      <trans-unit id="4b58387f911e8a7b135a0c4d76c70335c65bbb32" datatype="html">\n        <source>There are no daemons available.</source>\n        <target>No hay ningún daemon disponible.</target>\n      </trans-unit>\n      <trans-unit id="18ae8dc1264f06df7ea251175ada2ac1b8401018" datatype="html">\n        <source>NFS export</source>\n        <target>NFS export</target>\n      </trans-unit>\n      <trans-unit id="c56d51748965db5f3966cd1d06a1c9f4b5244931" datatype="html">\n        <source>Crush Rule</source>\n        <target>Crush Rule</target>\n      </trans-unit>\n      <trans-unit id="ae128527ec18892f812a62a1fd15dc50a38060c0" datatype="html">\n        <source>EC Profile</source>\n        <target>EC Profile</target>\n      </trans-unit>\n      <trans-unit id="60fb10c145f9c7ede2b9ddf9b2b0b0f6191d0ebd" datatype="html">\n        <source>Cache Mode</source>\n        <target>Modo de caché</target>\n      </trans-unit>\n      <trans-unit id="fa5bfad31d4139f6871443bb74324ffda5cad3e6" datatype="html">\n        <source>Min Evict Age</source>\n        <target>Antigüedad mínima de expulsión</target>\n      </trans-unit>\n      <trans-unit id="fd0eb851666df45c34c76fabcda79b0d77bc910b" datatype="html">\n        <source>Min Flush Age</source>\n        <target>Antigüedad mínima de vaciado</target>\n      </trans-unit>\n      <trans-unit id="cb54d2c420a534cee0c308ea5589f8c394ef8d67" datatype="html">\n        <source>Target Max Bytes</source>\n        <target>Número máximo de bytes de destino</target>\n      </trans-unit>\n      <trans-unit id="07f4ebe6615dca466818ffdae2a69ee217d265fb" datatype="html">\n        <source>Target Max Objects</source>\n        <target>Número máximo de objetos de destino</target>\n      </trans-unit>\n      <trans-unit id="eaa8f4df53cf7fa78d078e20a701d10f3dccd77d" datatype="html">\n        <source>No applications added</source>\n        <target>No se ha añadido ninguna aplicación</target>\n      </trans-unit>\n      <trans-unit id="321c2a7640f11177ea49b0857b94c4b70830c0e6" datatype="html">\n        <source>Applications limit reached</source>\n        <target>Se ha alcanzado el límite de aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="519d27742b74fadc8336777452f78891e98aa1dc" datatype="html">\n        <source>A pool can only have up to four applications definitions.</source>\n        <target>Un repositorio solo puede tener hasta cuatro definiciones de aplicaciones.</target>\n      </trans-unit>\n      <trans-unit id="b5bec3813f0d45daa7eb9471272969e1bc3e734e" datatype="html">\n        <source>Allowed characters \'_a-zA-Z0-9\'</source>\n        <target>Caracteres permitidos: _, a-z, A-Z y 0-9</target>\n      </trans-unit>\n      <trans-unit id="807472d29602a0085bce62e534bd66208982c2e2" datatype="html">\n        <source>Maximum length is 128 characters</source>\n        <target>La longitud máxima es 128 caracteres</target>\n      </trans-unit>\n      <trans-unit id="37785748b9ac9ad1d3e4b111ac502c3284afe84b" datatype="html">\n        <source>Filter or add applications</source>\n        <target>Filtrar o añadir aplicaciones</target>\n      </trans-unit>\n      <trans-unit id="38c7b8610ca87835e13eeee6a09ba1c414cd5cb9" datatype="html">\n        <source>Add application</source>\n        <target>Añadir aplicación</target>\n      </trans-unit>\n      <trans-unit id="db8c42f077700d8a94619fad9f4c94b7361d5f1d" datatype="html">\n        <source>pool</source>\n        <target>pool</target>\n      </trans-unit>\n      <trans-unit id="65bb2be83261bc4798853bbccdedc110c43feea7" datatype="html">\n        <source>erasure code profile</source>\n        <target>perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="ae48e19a9a2acaca4b5ea594451bc9b0b01ec8d2" datatype="html">\n        <source>crush rule</source>\n        <target>crush rule</target>\n      </trans-unit>\n      <trans-unit id="112d356ad6846959ca4aa5ec9a1f0d9d473b24ec" datatype="html">\n        <source>Replica Size</source>\n        <target>Tamaño de réplica</target>\n      </trans-unit>\n      <trans-unit id="ec50492db341fa752b023d8c924601286b6c9c0c" datatype="html">\n        <source>Last Change</source>\n        <target>Último cambio</target>\n      </trans-unit>\n      <trans-unit id="563a8c136a9d423bc7ae1269a404d6da5fd83dad" datatype="html">\n        <source>Erasure Coded Profile</source>\n        <target>Perfil de código de borrado</target>\n      </trans-unit>\n      <trans-unit id="0ad7f0662956cff61ac1208f92b1a0305b1b2e58" datatype="html">\n        <source>Crush Ruleset</source>\n        <target>Conjunto de reglas de CRUSH</target>\n      </trans-unit>\n      <trans-unit id="bcc365a084b6145b941b371bd4c2b6c3d2c79234" datatype="html">\n        <source>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</source>\n        <target>Pool deletion is disabled by the mon_allow_pool_delete configuration setting.</target>\n      </trans-unit>\n      <trans-unit id="44939fd05cedfd077db886528b755e77d5fa3885" datatype="html">\n        <source>bucket</source>\n        <target>papelera</target>\n      </trans-unit>\n      <trans-unit id="84fee774286ec4191311f1277075455c3ea5e2e2" datatype="html">\n        <source>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </source>\n        <target>Updated Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="2d7a43674f0bbc131c9e555ec16ac37fa0445d76" datatype="html">\n        <source>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </source>\n        <target>Created Object Gateway bucket "\n          <x id="INTERPOLATION" equiv-text="{{bid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="ec40d74ecfb1d6d60455af6805c9a714a3f5750a" datatype="html">\n        <source>buckets</source>\n        <target>papeleras</target>\n      </trans-unit>\n      <trans-unit id="764585d5595bac113582ee14a6fd07006770ceb1" datatype="html">\n        <source>capability</source>\n        <target>capability</target>\n      </trans-unit>\n      <trans-unit id="0914cbe18bae204217e1851be6d2d24d86e74605" datatype="html">\n        <source>user</source>\n        <target>usuario</target>\n      </trans-unit>\n      <trans-unit id="d8c86dc5e48a63590d9c94e19f90b5f8325cbd49" datatype="html">\n        <source>subuser</source>\n        <target>subuser</target>\n      </trans-unit>\n      <trans-unit id="f45a3de8a8b40d161cc36a55d77548a27107ca04" datatype="html">\n        <source>S3 Key</source>\n        <target>S3 Key</target>\n      </trans-unit>\n      <trans-unit id="854a763265e92f91ba3ccee1a0e8d823be584f7c" datatype="html">\n        <source>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Updated Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="84ab3fd641e65e39cffee0ec722a059ed284229e" datatype="html">\n        <source>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </source>\n        <target>Created Object Gateway user "\n          <x id="INTERPOLATION" equiv-text="{{uid}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="7c7f4be7b726e61c577e63842a58d9e435f7c597" datatype="html">\n        <source>users</source>\n        <target>usuarios</target>\n      </trans-unit>\n      <trans-unit id="9f7760223efd77806f1bbaf963e6993bb4bc6a0a" datatype="html">\n        <source>Swift Key</source>\n        <target>Swift Key</target>\n      </trans-unit>\n      <trans-unit id="6462d8f12b427c29363f00b12f20f566be24937c" datatype="html">\n        <source>Device ID</source>\n        <target>Device ID</target>\n      </trans-unit>\n      <trans-unit id="82f12bf23db4bb82db89877bebe93954bc1c8fb0" datatype="html">\n        <source>State of Health</source>\n        <target>State of Health</target>\n      </trans-unit>\n      <trans-unit id="7bd34bd120146afef0e0d8fa168d9bdabd594b6a" datatype="html">\n        <source>Good</source>\n        <target>Good</target>\n      </trans-unit>\n      <trans-unit id="31c59dce114ec0a9d02552ef7b81920b3de36793" datatype="html">\n        <source>Bad</source>\n        <target>Bad</target>\n      </trans-unit>\n      <trans-unit id="2862af5284f66d4b06bdcf77a5519141723b6989" datatype="html">\n        <source>Stale</source>\n        <target>Stale</target>\n      </trans-unit>\n      <trans-unit id="8d8e819b52984a4fbdec75a99eb28d1ae4323bbc" datatype="html">\n        <source>Life Expectancy</source>\n        <target>Life Expectancy</target>\n      </trans-unit>\n      <trans-unit id="72d9b15be18ea063e78c4e855b9e8c0af95593ef" datatype="html">\n        <source>Prediction Creation Date</source>\n        <target>Prediction Creation Date</target>\n      </trans-unit>\n      <trans-unit id="a6b4ef85e5ff8bd192751c7bbebc54c46118d6d4" datatype="html">\n        <source>Device Name</source>\n        <target>Device Name</target>\n      </trans-unit>\n      <trans-unit id="d5fd840374ca1a6f394bcd81f390a6dca27f8224" datatype="html">\n        <source>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </source>\n        <target>An error with error code \n          <x id="INTERPOLATION" equiv-text="{{code}}"/> occurred.\n        </target>\n      </trans-unit>\n      <trans-unit id="a0b59d7139692bb8d8ed786b6eb6e9e70ce743f3" datatype="html">\n        <source>Raw</source>\n        <target>Raw</target>\n      </trans-unit>\n      <trans-unit id="2f3beddc8234b30fb26a7f63ba2f1ea74f2ed6f7" datatype="html">\n        <source>Threshold</source>\n        <target>Threshold</target>\n      </trans-unit>\n      <trans-unit id="4654b5a68af3c8bad29aa14ca85ccea1f3143c6b" datatype="html">\n        <source>When Failed</source>\n        <target>When Failed</target>\n      </trans-unit>\n      <trans-unit id="5b7f56d5be49fb8e8d8f40209d6746f8f72e9177" datatype="html">\n        <source>Worst</source>\n        <target>Worst</target>\n      </trans-unit>\n      <trans-unit id="1481b8488e10dbc437accce89d2ae35a0106e8ba" datatype="html">\n        <source>Scope</source>\n        <target>Ámbito</target>\n      </trans-unit>\n      <trans-unit id="9b1d5e95f6bdcfb4b737413f5fa157e0dcb103d5" datatype="html">\n        <source>Read</source>\n        <target>Lectura</target>\n      </trans-unit>\n      <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html">\n        <source>Create</source>\n        <target>Crear</target>\n      </trans-unit>\n      <trans-unit id="dc4fba275819619ee78e8eae14d357ea69ba7477" datatype="html">\n        <source>role</source>\n        <target>role</target>\n      </trans-unit>\n      <trans-unit id="fe6ee93173884201ec62d62ba173c3de85ae177e" datatype="html">\n        <source>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Created role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="41c032df0732f4318f8213fabd0719ac347d4b6c" datatype="html">\n        <source>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Updated role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="50e22b5289f79f1417369403345c9fa9911a4557" datatype="html">\n        <source>System Role</source>\n        <target>Función del sistema</target>\n      </trans-unit>\n      <trans-unit id="7f132668e2dbfcf616381d2daf59d1a6f2698102" datatype="html">\n        <source>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </source>\n        <target>Deleted role \'\n          <x id="INTERPOLATION" equiv-text="{{role_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="bd15b8d5c0fa160161728eefbbb585710414d471" datatype="html">\n        <source>New name</source>\n        <target>New name</target>\n      </trans-unit>\n      <trans-unit id="6f126277f3dc22a3ab3609c4c198386c8744e11a" datatype="html">\n        <source>Clone Role</source>\n        <target>Clone Role</target>\n      </trans-unit>\n      <trans-unit id="d19d8320479854bc52877cdf0dc5ecfe34a36ec7" datatype="html">\n        <source>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </source>\n        <target>Cloned role \'\n          <x id="INTERPOLATION" equiv-text="{{dst_name}}"/>\' from \'\n          <x id="INTERPOLATION_1" equiv-text="{{src_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2e35d60a14ce0b470e8b54602864a867f7fcef40" datatype="html">\n        <source>There are no roles.</source>\n        <target>There are no roles.</target>\n      </trans-unit>\n      <trans-unit id="d2362a49d2434ce137bf19dab004251b7fd9c7b3" datatype="html">\n        <source>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Created user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="9910122dfedd2eaa544a990f1430e5b82a76d99f" datatype="html">\n        <source>Update user</source>\n        <target>Actualizar usuario</target>\n      </trans-unit>\n      <trans-unit id="ac10a3d9b59575640797c1a8e6aea642cf5d5e77" datatype="html">\n        <source>Continue</source>\n        <target>Continuar</target>\n      </trans-unit>\n      <trans-unit id="cf4bcf4ce3d551e6099ccdc3546ae418fe5f8038" datatype="html">\n        <source>You were automatically logged out because your roles have been changed.</source>\n        <target>La sesión se ha cerrado automáticamente porque sus funciones han cambiado.</target>\n      </trans-unit>\n      <trans-unit id="0f6003fb0c1cc73b89d225801cc1b870945cd259" datatype="html">\n        <source>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Updated user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="fe516c6d820018fdc971113935e22ec1e852965f" datatype="html">\n        <source>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Deleted user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="01a7e11502ff80421ef3615e533ea14ef57e1d5c" datatype="html">\n        <source>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </source>\n        <target>Failed to delete user "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>"\n        </target>\n      </trans-unit>\n      <trans-unit id="63316a3861dbcb035147efc1b9fb6bc708242e94" datatype="html">\n        <source>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </source>\n        <target>You are currently logged in as "\n          <x id="INTERPOLATION" equiv-text="{{username}}"/>".\n        </target>\n      </trans-unit>\n      <trans-unit id="d8b81951d25439864e92f750f7c99d7426d6517c" datatype="html">\n        <source>password</source>\n        <target>password</target>\n      </trans-unit>\n      <trans-unit id="d361a9b5e1f7985a12c0433388f31626525a02b8" datatype="html">\n        <source>Updated user password"</source>\n        <target>Updated user password"</target>\n      </trans-unit>\n      <trans-unit id="c4e596a44ffc4718c1602600d6e4f029190eb031" datatype="html">\n        <source>The name of the node under which data should be placed.</source>\n        <target>The name of the node under which data should be placed.</target>\n      </trans-unit>\n      <trans-unit id="f24772ba1091155f8d7025332ca8456a204d1e28" datatype="html">\n        <source>The type of CRUSH nodes across which we should separate replicas.</source>\n        <target>The type of CRUSH nodes across which we should separate replicas.</target>\n      </trans-unit>\n      <trans-unit id="a3896042af461a80091c3f7a5fe3fff5ac40a3a0" datatype="html">\n        <source>The device class data should be placed on.</source>\n        <target>The device class data should be placed on.</target>\n      </trans-unit>\n      <trans-unit id="1d7fbcc3d5efc946ffbcf86fed04c4e20dda20fb" datatype="html">\n        <source>Each object is split in data-chunks parts, each stored on a different OSD.</source>\n        <target>Cada objeto se divide en porciones de datos, cada una almacenada en un OSD distinto.</target>\n      </trans-unit>\n      <trans-unit id="b1f8ed4e216585f1f9134740002ef3c8501debd8" datatype="html">\n        <source>Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.</source>\n        <target>Calcula las porciones de código para cada objeto y las almacena en distintos OSD.\n      El número de porciones de código es también el número de OSD que pueden estar inactivos sin que se pierdan datos.</target>\n      </trans-unit>\n      <trans-unit id="c437ee74a9a8e781e1380153f742a685e3b8cc5e" datatype="html">\n        <source>The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.</source>\n        <target>El complemento jerasure es el más genérico y flexible,\n          y también el complemento por defecto para los repositorios de código de borrado de Ceph.</target>\n      </trans-unit>\n      <trans-unit id="8c7e19322851402afa67e41f4f1d4e531caf1bf5" datatype="html">\n        <source>The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.</source>\n        <target>La técnica más flexible es reed_sol_van: basta con definir k y m.\n          La técnica cauchy_good puede ser más rápida, pero hay que elegir con cuidado el tamaño\n          del paquete. reed_sol_r6_op, liberation, blaum_roth y liber8tion son todas equivalentes a RAID6\n          en el sentido de que solo se pueden configurar con m=2.</target>\n      </trans-unit>\n      <trans-unit id="b1b11f49281b4e79219b4eecfbcb033cb15bd880" datatype="html">\n        <source>The encoding will be done on packets of bytes size at a time.\n          Chosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic.</source>\n        <target>La codificación se realizará según el tamaño de los paquetes de bytes de uno en uno.\n          Elegir el tamaño correcto es difícil.\n          La documentación de jerasure incluye información completa sobre el tema.</target>\n      </trans-unit>\n      <trans-unit id="d9cb3bc07a25b26fbea457e0a7b543340bc13c49" datatype="html">\n        <source>With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.</source>\n        <target>Con el complemento jerasure, cuando un objeto de código de borrado se almacena\n          en varios OSD, para recuperarse de la pérdida de un OSD es necesario leer de todos los demás.\n          Por ejemplo, si jerasure está configurado con k=8 y m=4, cuando se pierde un OSD es necesario leer\n          de los otros once para repararlo.\n\n          El complemento de código de borrado lrc crea porciones de paridad local para poder realizar la recuperación con\n          menos OSDs. Por ejemplo, is lrc está configurado con k=8, m=4 y l=4, creará\n          una porción de paridad adicional para cada cuatro OSDs. Si se pierde un solo OSD, se puede recuperar\n          solo con cuatro OSD, en lugar de con once.</target>\n      </trans-unit>\n      <trans-unit id="813959d46e63a29bbd266b3af2ff9414c2ef553c" datatype="html">\n        <source>Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.</source>\n        <target>Agrupa las porciones de código y de datos en localizaciones de conjuntos de tamaño. Por ejemplo,\n          para k=4 y m=2, si locality=3, se crean dos grupos de tres. Cada conjunto\n          se puede recuperar sin leer porciones de otro conjunto.</target>\n      </trans-unit>\n      <trans-unit id="f0ff63d92e0a1b4d4b51e31b9133802d160a5f4c" datatype="html">\n        <source>The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done.</source>\n        <target>El tipo de papelera de CRUSH en el que se almacenará cada\n          conjunto de porciones definido por l. Por ejemplo, si se define como bastidor, cada grupo de l porciones\n          se colocará en un bastidor distinto. Se usa para crear un paso de regla de CRUSH, por ejemplo, "step choose\n          rack". Si no se define, no se realiza este tipo de agrupamiento.</target>\n      </trans-unit>\n      <trans-unit id="3ece48df9d1e9a98f98bf3c5cc66e8b637020a4d" datatype="html">\n        <source>The isa plugin encapsulates the ISA library. It only runs on Intel processors.</source>\n        <target>El complemento isa encapsula la biblioteca ISA. Solo funciona en procesadores Intel.</target>\n      </trans-unit>\n      <trans-unit id="4472c9e31bfc7d96a83dc4afce0a6e885c99e839" datatype="html">\n        <source>The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy.</source>\n        <target>El complemento ISA viene en dos formatos de Reed Solomon.\n          Si se define reed_sol_van, se trata de Vandermonde; si se define cauchy, se trata de Cauchy.</target>\n      </trans-unit>\n      <trans-unit id="fa385f5ecf63083ec848dca8dc5e52bdc72ac6f6" datatype="html">\n        <source>The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.</source>\n        <target>El complemento shec encapsula las distintas bibliotecas SHEC.\n          Permite a Ceph recuperar datos de forma más eficiente que los códigos de Reed Solomon.</target>\n      </trans-unit>\n      <trans-unit id="687b3cd94b3475c24ff4481d64d4739f902a377c" datatype="html">\n        <source>The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data.</source>\n        <target>El número de porciones de paridad. Cada uno de ellas incluye cada porción de datos\n           en su intervalo de cálculo. El número se usa como estimador de durabilidad. Por ejemplo, si c=2,\n          2 OSD pueden estar inactivos sin que se pierdan datos.</target>\n      </trans-unit>\n      <trans-unit id="f3c4af6df91bdaabdb715f8f0b61a24faf73a3bc" datatype="html">\n        <source>The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.</source>\n        <target>El nombre de la papelera de CRUSH usado para el primer paso de la regla de CRUSH.\n      Por ejemplo, "step take default".</target>\n      </trans-unit>\n      <trans-unit id="e1059955a5ce65cdabf0c0a8207377e1f9bae57e" datatype="html">\n        <source>Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.</source>\n        <target>Asegúrese de que no hay dos porciones en una papelera con el mismo\n      dominio de error. Por ejemplo, si el dominio de error es host, no debe haber dos porciones almacenadas en el mismo\n      host. Se usa para crear un paso de regla de CRUSH, por ejemplo, "step chooseleaf host".</target>\n      </trans-unit>\n      <trans-unit id="ac392ac9c6da5fde6da80fc57b9c09402fb6e73d" datatype="html">\n        <source>Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.</source>\n        <target>Restringe la colocación a dispositivos de una clase concreta\n      (p.ej., ssd o hdd) usando los nombre de clase de dispositivo CRUSH en el mapa de CRUSH.</target>\n      </trans-unit>\n      <trans-unit id="62bcb9ae5583a088649b1adf5787a86ca3334f89" datatype="html">\n        <source>Set the directory name from which the erasure code plugin is loaded.</source>\n        <target>Define el nombre de directorio del que se cargará el complemento de código de borrado.</target>\n      </trans-unit>\n      <trans-unit id="c8f10184a8433d132ede0a2c0c1aa96f291cacfa" datatype="html">\n        <source>Allows all operations</source>\n        <target>Permite todas las operaciones</target>\n      </trans-unit>\n      <trans-unit id="82077ee97c11ee76efc3adf253b7b26654544317" datatype="html">\n        <source>Allows only operations that do not modify the server</source>\n        <target>Permite solo las operaciones que no modifican el servidor</target>\n      </trans-unit>\n      <trans-unit id="22b5212ec10449dbf0a0af0ad34122eac51b5f2a" datatype="html">\n        <source>Does not allow read or write operations, but allows any other operation</source>\n        <target>No permite operaciones de lectura o escritura, pero sí cualquier otra</target>\n      </trans-unit>\n      <trans-unit id="9799d0f8c4b7727ae239fedfe3c0ce127feb7a50" datatype="html">\n        <source>Does not allow read, write, or any operation that modifies file        attributes or directory content</source>\n        <target>No permite operaciones de lectura o escritura, ni ninguna otra que modifique los atributos del archivo o el contenido del directorio</target>\n      </trans-unit>\n      <trans-unit id="aeddefe0af87025d8f00699aa94bed8216a99a58" datatype="html">\n        <source>Allows no access at all</source>\n        <target>No permite ningún tipo de acceso</target>\n      </trans-unit>\n      <trans-unit id="a436c6a4025a749198e93cac239de8deede72211" datatype="html">\n        <source>-- Select the priority --</source>\n        <target>-- Seleccione la prioridad --</target>\n      </trans-unit>\n      <trans-unit id="9556266f0a2b1762a44b686f2bb21dbfefb01c12" datatype="html">\n        <source>Low</source>\n        <target>Baja</target>\n      </trans-unit>\n      <trans-unit id="72279141a67cc042d9864102b703216cc8a428a3" datatype="html">\n        <source>High</source>\n        <target>Alta</target>\n      </trans-unit>\n      <trans-unit id="6080b77234e92ad41bb52653b239c4c4f851317d" datatype="html">\n        <source>Error</source>\n        <target>Error</target>\n      </trans-unit>\n      <trans-unit id="c43dc1967a603fefb886149ac35863a06d5b4ce5" datatype="html">\n        <source>Information</source>\n        <target>Información</target>\n      </trans-unit>\n      <trans-unit id="1e035e6ccfab771cad4226b2ad230cb0d4a88cba" datatype="html">\n        <source>Success</source>\n        <target>Success</target>\n      </trans-unit>\n      <trans-unit id="61fd1cffcb763cbfd5829071723cf9b647174bd9" datatype="html">\n        <source>An error occurred.</source>\n        <target>An error occurred.</target>\n      </trans-unit>\n      <trans-unit id="e6ca3c0efaf51e6d45a7f92f58bac37140c3fda4" datatype="html">\n        <source>Last 5 minutes</source>\n        <target>Últimos 5 minutos</target>\n      </trans-unit>\n      <trans-unit id="b0ecb2bbc548cc9bd95050fd8f0c84586d083fe2" datatype="html">\n        <source>Last 15 minutes</source>\n        <target>Últimos 15 minutos</target>\n      </trans-unit>\n      <trans-unit id="857ae67deb51353120b203b0f2a06b0c48ef49fa" datatype="html">\n        <source>Last 30 minutes</source>\n        <target>Últimos 30 minutos</target>\n      </trans-unit>\n      <trans-unit id="7b1738fad314e936dc14b94db8f43da736942308" datatype="html">\n        <source>Last 1 hour (Default)</source>\n        <target>Última hora (opción por defecto)</target>\n      </trans-unit>\n      <trans-unit id="a428288224389726cef9d9bd8d1d7808cccd7ffd" datatype="html">\n        <source>Last 3 hours</source>\n        <target>Últimas 3 horas</target>\n      </trans-unit>\n      <trans-unit id="7cbabecc8d80cf183ac199cfaeb7619d56e5d43f" datatype="html">\n        <source>Last 6 hours</source>\n        <target>Últimas 6 horas</target>\n      </trans-unit>\n      <trans-unit id="1a389cdf64187d34cf99eec30a290e3fa7d4744f" datatype="html">\n        <source>Last 12 hours</source>\n        <target>Últimas 12 horas</target>\n      </trans-unit>\n      <trans-unit id="9e0ba5f591380a94d594a76288f0c41aa97eb9c2" datatype="html">\n        <source>Last 24 hours</source>\n        <target>Últimas 24 horas</target>\n      </trans-unit>\n      <trans-unit id="e430eda9c785cd43465b7cbb400ee914f1057247" datatype="html">\n        <source>Yesterday</source>\n        <target>Ayer</target>\n      </trans-unit>\n      <trans-unit id="7fb1099e29660162f9154d5b2feee7743a423df6" datatype="html">\n        <source>Today</source>\n        <target>Hoy</target>\n      </trans-unit>\n      <trans-unit id="33904058a97a64bd189bed84038b1ffe719769c7" datatype="html">\n        <source>Today so far</source>\n        <target>Hoy hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="3b0b849be007510021d3d383df75bec95ef9c97b" datatype="html">\n        <source>Day before yesterday</source>\n        <target>Anteayer</target>\n      </trans-unit>\n      <trans-unit id="6b430c2c394c4d32ebd7d46c8c46ab60e1b29ccb" datatype="html">\n        <source>Last 2 days</source>\n        <target>Los últimos 2 días</target>\n      </trans-unit>\n      <trans-unit id="d5e812a87a5d57a94200a2013027cab76a7c4863" datatype="html">\n        <source>This day last week</source>\n        <target>Este día la semana pasada</target>\n      </trans-unit>\n      <trans-unit id="d00edc936eeab6b5577401f115ca86ca2c87dc9a" datatype="html">\n        <source>Previous week</source>\n        <target>La semana pasada</target>\n      </trans-unit>\n      <trans-unit id="b036e40577baa6b918b2267d319d4b3aeaa88a5a" datatype="html">\n        <source>This week</source>\n        <target>Esta semana</target>\n      </trans-unit>\n      <trans-unit id="99ad5a6096b3fcb3f021f3779bae710cdfeb8934" datatype="html">\n        <source>This week so far</source>\n        <target>Esta semana hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="02e0243b60007368f87dc01e083f232dd025096d" datatype="html">\n        <source>Last 7 days</source>\n        <target>Los últimos 7 días</target>\n      </trans-unit>\n      <trans-unit id="c3b08b07b5ab98e7cdcf18df39355690ab7d3884" datatype="html">\n        <source>Previous month</source>\n        <target>El mes pasado</target>\n      </trans-unit>\n      <trans-unit id="1b2562c6d5aa90644e7dc91feee82e2005fceb33" datatype="html">\n        <source>This month</source>\n        <target>Este mes</target>\n      </trans-unit>\n      <trans-unit id="26b4b18c5917934abb169ba9aa490e57f7bf10b8" datatype="html">\n        <source>This month so far</source>\n        <target>Este mes hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="7668986b9f753fcd72ad4a00b1a0c4861d1f7fb8" datatype="html">\n        <source>Last 30 days</source>\n        <target>Los últimos 30 días</target>\n      </trans-unit>\n      <trans-unit id="ba1e822408d90c6fbd2989100fa648bfd5e8ee84" datatype="html">\n        <source>Last 90 days</source>\n        <target>Los últimos 90 días</target>\n      </trans-unit>\n      <trans-unit id="c3df03f899a914c4181adcdc8a3f077424f7b6e8" datatype="html">\n        <source>Last 6 months</source>\n        <target>Los últimos 6 meses</target>\n      </trans-unit>\n      <trans-unit id="7f9a92757580c9f31c309c0a3812ea429274eadf" datatype="html">\n        <source>Last 1 year</source>\n        <target>El último año</target>\n      </trans-unit>\n      <trans-unit id="5a9fede30ff65cb4b4426f6b1ed31afb67ecd7b0" datatype="html">\n        <source>Previous year</source>\n        <target>El año pasado</target>\n      </trans-unit>\n      <trans-unit id="65cefcc53d1f6445df7568e8a40c49165f1090ee" datatype="html">\n        <source>This year</source>\n        <target>Este año</target>\n      </trans-unit>\n      <trans-unit id="1f68b766944dc3865bddab765fe952b0c1c43f92" datatype="html">\n        <source>This year so far</source>\n        <target>Este año hasta ahora</target>\n      </trans-unit>\n      <trans-unit id="4d4b77e614f8043fdadef5d6d235655bb48eb311" datatype="html">\n        <source>Last 2 years</source>\n        <target>Los últimos 2 años</target>\n      </trans-unit>\n      <trans-unit id="138afa339ea6e75d25a474affe1edbcb90e00ec0" datatype="html">\n        <source>Last 5 years</source>\n        <target>Los últimos 5 años</target>\n      </trans-unit>\n      <trans-unit id="37391297bb077a6f84484930261b01a3ce38327b" datatype="html">\n        <source>No items selected.</source>\n        <target>No se ha seleccionado ningún elemento.</target>\n      </trans-unit>\n      <trans-unit id="2c1e52ee832661b4a0f570877d24661736b16af1" datatype="html">\n        <source>Deselect item to select again</source>\n        <target>Deseleccione el elemento para volver a seleccionarlo</target>\n      </trans-unit>\n      <trans-unit id="c8c9c6e5918659336824bbdda3501c66eaa79a4c" datatype="html">\n        <source>Selection limit reached</source>\n        <target>Se ha alcanzado el límite de selección</target>\n      </trans-unit>\n      <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html">\n        <source>Filter tags</source>\n        <target>Filtrar etiquetas</target>\n      </trans-unit>\n      <trans-unit id="aa00748e49c269956837d6f3acdd8d218796a8d8" datatype="html">\n        <source>Add badge</source>\n        <target>Añadir insignia</target>\n      </trans-unit>\n      <trans-unit id="4078a92d8121abdce7d8f346a88914923ec835fc" datatype="html">\n        <source>There are no items available.</source>\n        <target>No hay ningún elemento disponible.</target>\n      </trans-unit>\n      <trans-unit id="55dd9f44e64851bca3b7bfc9283a5ff36f030228" datatype="html">\n        <source>Set</source>\n        <target>Set</target>\n      </trans-unit>\n      <trans-unit id="019d4bd6a5690f0cfa0ecf346a4e6bf7f0d8debb" datatype="html">\n        <source>Remove</source>\n        <target>Remove</target>\n      </trans-unit>\n      <trans-unit id="e168fe6c468b3ad632731395ef89860274242844" datatype="html">\n        <source>Unset</source>\n        <target>Unset</target>\n      </trans-unit>\n      <trans-unit id="54a4a3132b693575728a45a5f3154ad4c9af404b" datatype="html">\n        <source>Clone</source>\n        <target>Clonar</target>\n      </trans-unit>\n      <trans-unit id="1979da7460819153e11d2078244645d94291b69c" datatype="html">\n        <source>Copy</source>\n        <target>Copiar</target>\n      </trans-unit>\n      <trans-unit id="2e5e77dbaadd6588d8bbf737139fd9806294ae28" datatype="html">\n        <source>Deep Scrub</source>\n        <target>Depuración profunda</target>\n      </trans-unit>\n      <trans-unit id="bf463b189696c19769ea263227e6c22aefafb918" datatype="html">\n        <source>Destroy</source>\n        <target>Destruir</target>\n      </trans-unit>\n      <trans-unit id="b4e94d529ff10db4d86f3f48900fa67ede3411fd" datatype="html">\n        <source>Evict</source>\n        <target>Evict</target>\n      </trans-unit>\n      <trans-unit id="3747fff7faf52b436ecff5fb8555091736d92c70" datatype="html">\n        <source>Flatten</source>\n        <target>Aplanar</target>\n      </trans-unit>\n      <trans-unit id="66fdbf32e5449cc54a3d1e19c7b8f4ea238facfb" datatype="html">\n        <source>Mark Down</source>\n        <target>Marcar para desactivar</target>\n      </trans-unit>\n      <trans-unit id="0cda3e824fb2f9c731e5a60b859dedc1fe03127e" datatype="html">\n        <source>Mark In</source>\n        <target>Marcar para incluir</target>\n      </trans-unit>\n      <trans-unit id="f833354f43cb38c5716faa8759a9bbdd1ab8f199" datatype="html">\n        <source>Mark Lost</source>\n        <target>Marcar como perdido</target>\n      </trans-unit>\n      <trans-unit id="75fb9f970ba365398c45e57bbb1019c009f6b832" datatype="html">\n        <source>Mark Out</source>\n        <target>Marcar para excluir</target>\n      </trans-unit>\n      <trans-unit id="45480c03b0a3a37ff8f6a5600a6a034b40fbaea4" datatype="html">\n        <source>Protect</source>\n        <target>Proteger</target>\n      </trans-unit>\n      <trans-unit id="e26f9cf3666aace4e524b1505c9795d76d87738d" datatype="html">\n        <source>Rename</source>\n        <target>Renombrar</target>\n      </trans-unit>\n      <trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">\n        <source>Restore</source>\n        <target>Restaurar</target>\n      </trans-unit>\n      <trans-unit id="ba073985cfd2528c77a746ed596b2f2052b973c5" datatype="html">\n        <source>Move to Trash</source>\n        <target>Mover a la papelera</target>\n      </trans-unit>\n      <trans-unit id="3ea9b96a21a499d296a7f25407da0f3df6c2d5ed" datatype="html">\n        <source>Unprotect</source>\n        <target>Desproteger</target>\n      </trans-unit>\n      <trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">\n        <source>Change</source>\n        <target>Change</target>\n      </trans-unit>\n      <trans-unit id="011f3e2bfc1fd8407eb5f599352665bfeb145664" datatype="html">\n        <source>Recreate</source>\n        <target>Recreate</target>\n      </trans-unit>\n      <trans-unit id="6df2dfa48bef5510c82fb43f4e71a7f9557f3d71" datatype="html">\n        <source>Expire</source>\n        <target>Expire</target>\n      </trans-unit>\n      <trans-unit id="28df1b02fd88d2deb0212bc5d7ff34cf9492fa54" datatype="html">\n        <source>Deleted</source>\n        <target>Suprimido</target>\n      </trans-unit>\n      <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html">\n        <source>Added</source>\n        <target>Added</target>\n      </trans-unit>\n      <trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">\n        <source>Removed</source>\n        <target>Removed</target>\n      </trans-unit>\n      <trans-unit id="402f3ee47f98fbbc68530239b1ddcbb9e96a460c" datatype="html">\n        <source>Edited</source>\n        <target>Edited</target>\n      </trans-unit>\n      <trans-unit id="96d56ec71c6e78cb4d6204c4a9359a3d38fcdb59" datatype="html">\n        <source>Canceled</source>\n        <target>Canceled</target>\n      </trans-unit>\n      <trans-unit id="a3318a2ee2bd0064b6b9ff72a4018b679ec63125" datatype="html">\n        <source>Cloned</source>\n        <target>Clonado</target>\n      </trans-unit>\n      <trans-unit id="ef90545bc832876c0d7f9a10363c75137472bbb5" datatype="html">\n        <source>Copied</source>\n        <target>Copiado</target>\n      </trans-unit>\n      <trans-unit id="5a13d3834133e09544ec93885662f181372dcf46" datatype="html">\n        <source>Deep Scrubbed</source>\n        <target>Deep Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="7c9efb91434a5c15e9579c0b31c8e184b8c8240d" datatype="html">\n        <source>Destroyed</source>\n        <target>Destroyed</target>\n      </trans-unit>\n      <trans-unit id="647059bf3ea098fffedf92ddfad792bb3daa3c95" datatype="html">\n        <source>Flattened</source>\n        <target>Aplanado</target>\n      </trans-unit>\n      <trans-unit id="8df71e952319eafa71c8e6ef6144b780af8813ff" datatype="html">\n        <source>Marked Down</source>\n        <target>Marked Down</target>\n      </trans-unit>\n      <trans-unit id="25658f5a080a1cab3b91e17b756b1d1dc46bb9b3" datatype="html">\n        <source>Marked In</source>\n        <target>Marked In</target>\n      </trans-unit>\n      <trans-unit id="ebcf306036a6c5579df9448f77eca98d491db245" datatype="html">\n        <source>Marked Lost</source>\n        <target>Marked Lost</target>\n      </trans-unit>\n      <trans-unit id="3a8803369ac18be3ad762384b9fda095fe2a6dcc" datatype="html">\n        <source>Marked Out</source>\n        <target>Marked Out</target>\n      </trans-unit>\n      <trans-unit id="0fe2a62ea7c609fa8326ee6d38060bc5ba8bf34f" datatype="html">\n        <source>Protected</source>\n        <target>Protected</target>\n      </trans-unit>\n      <trans-unit id="69b0446c6c2411c4fe01e411b8ceec72d4044fb4" datatype="html">\n        <source>Purged</source>\n        <target>Limpiado</target>\n      </trans-unit>\n      <trans-unit id="d53de1a61bd51c815dc374c7f97e4ee69230e412" datatype="html">\n        <source>Renamed</source>\n        <target>Renamed</target>\n      </trans-unit>\n      <trans-unit id="86fc6cae82c095f14105eb8a61d7b3fa948304b7" datatype="html">\n        <source>Restored</source>\n        <target>Restaurado</target>\n      </trans-unit>\n      <trans-unit id="e87dd0fd35460cb743046db918dfce2137b5977a" datatype="html">\n        <source>Reweighted</source>\n        <target>Reweighted</target>\n      </trans-unit>\n      <trans-unit id="dc21fd6547f2325c67f6deff925f29eb07a2db3e" datatype="html">\n        <source>Rolled back</source>\n        <target>Revertido</target>\n      </trans-unit>\n      <trans-unit id="15dec4c2d73a516c10aef90aeeea3364fa794615" datatype="html">\n        <source>Scrubbed</source>\n        <target>Scrubbed</target>\n      </trans-unit>\n      <trans-unit id="8dc560ded67482f109a98e0638851ad1d37188b3" datatype="html">\n        <source>Showed</source>\n        <target>Showed</target>\n      </trans-unit>\n      <trans-unit id="197259b7ea76f15c6d0a64b075a673fd4112ada7" datatype="html">\n        <source>Moved to Trash</source>\n        <target>Moved to Trash</target>\n      </trans-unit>\n      <trans-unit id="8fb15cb102cd75b562680290b7e04c44d80018f2" datatype="html">\n        <source>Unprotected</source>\n        <target>Unprotected</target>\n      </trans-unit>\n      <trans-unit id="8588eafa498262a1cbb5043ad68cf0ff669c4f10" datatype="html">\n        <source>Recreated</source>\n        <target>Recreated</target>\n      </trans-unit>\n      <trans-unit id="ffde7468d7b5cad6990095ed68ddee3d67cd02f8" datatype="html">\n        <source>Expired</source>\n        <target>Expired</target>\n      </trans-unit>\n      <trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">\n        <source>Yes</source>\n        <target>Sí</target>\n      </trans-unit>\n      <trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">\n        <source>No</source>\n        <target>No</target>\n      </trans-unit>\n      <trans-unit id="baf918eed9d4050cdad2acebc0f27b6eaf8e3fcd" datatype="html">\n        <source>Required rules for passwords:</source>\n        <target>Required rules for passwords:</target>\n      </trans-unit>\n      <trans-unit id="40f61909e1f017c4652e64b055089beef19cf871" datatype="html">\n        <source>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </source>\n        <target>Must contain at least \n          <x id="INTERPOLATION" equiv-text="{{length}}"/> characters\n        </target>\n      </trans-unit>\n      <trans-unit id="f4f5dbb3a05b5f38dab47ef38dad88a4574a765a" datatype="html">\n        <source>Must not be the same as the previous one</source>\n        <target>Must not be the same as the previous one</target>\n      </trans-unit>\n      <trans-unit id="607370e07b50087c196a5fcea9184e3d693226b2" datatype="html">\n        <source>Cannot contain the username</source>\n        <target>Cannot contain the username</target>\n      </trans-unit>\n      <trans-unit id="e6e355eab2596251aaa42623b41e6026d5c03e3b" datatype="html">\n        <source>Cannot contain any configured keyword</source>\n        <target>Cannot contain any configured keyword</target>\n      </trans-unit>\n      <trans-unit id="394bcd6d5e4da75b720c4d28f94f2aef7bb38355" datatype="html">\n        <source>Cannot contain any repetitive characters e.g. "aaa"</source>\n        <target>Cannot contain any repetitive characters e.g. "aaa"</target>\n      </trans-unit>\n      <trans-unit id="030e61e0bcf2536fb047645db6182d43e9fca9e9" datatype="html">\n        <source>Cannot contain any sequential characters e.g. "abc"</source>\n        <target>Cannot contain any sequential characters e.g. "abc"</target>\n      </trans-unit>\n      <trans-unit id="99fa0b67376d40142bd4d3ace3344abf4f98b6a5" datatype="html">\n        <source>Your matcher seems to match no currently defined rule or active alert.</source>\n        <target>Your matcher seems to match no currently defined rule or active alert.</target>\n      </trans-unit>\n      <trans-unit id="7e284852732c303eb1f47de9aca2569e41aeffed" datatype="html">\n        <source>no active alerts</source>\n        <target>no active alerts</target>\n      </trans-unit>\n      <trans-unit id="b8042829e4fbe7b09fd9bac9fa0ecf5cc1802fee" datatype="html">\n        <source>1 active alert</source>\n        <target>1 active alert</target>\n      </trans-unit>\n      <trans-unit id="e24adce97669cb0fc74cc13fdc14179b6f78ea5e" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{n}}"/> active alerts\n        </target>\n      </trans-unit>\n      <trans-unit id="d8fb058ff5883731d38a132da4ca45cfe8d719a3" datatype="html">\n        <source>Matches 1 rule</source>\n        <target>Matches 1 rule</target>\n      </trans-unit>\n      <trans-unit id="90aaef24d192e67c3fbc2ec6f8bfaff211cea128" datatype="html">\n        <source>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </source>\n        <target>Matches \n          <x id="INTERPOLATION" equiv-text="{{n}}"/> rules\n        </target>\n      </trans-unit>\n      <trans-unit id="f4685dc581e18244cd410f1057a8c56a9dbfe8df" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rules}}"/> with \n          <x id="INTERPOLATION_1" equiv-text="{{alerts}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fd98fb2a0f24ba72cde0787dd3f02cfc17de469" datatype="html">\n        <source>Quality of Service</source>\n        <target>Calidad del servicio</target>\n      </trans-unit>\n      <trans-unit id="2c53f3ce2c6fff9025a7b41cc334521725da6e7b" datatype="html">\n        <source>BPS Limit</source>\n        <target>Límite de BPS</target>\n      </trans-unit>\n      <trans-unit id="e897624a392419386b035bcd8529337e262fc41d" datatype="html">\n        <source>The desired limit of IO bytes per second.</source>\n        <target>El límite deseado de bytes de E/S por segundo.</target>\n      </trans-unit>\n      <trans-unit id="dc56f77e4507da7e86a3accd0a2a7099a838d539" datatype="html">\n        <source>IOPS Limit</source>\n        <target>Límite de IOPS</target>\n      </trans-unit>\n      <trans-unit id="141c3f6eadbb35b0e17b2f847e4cac23240a6ea9" datatype="html">\n        <source>The desired limit of IO operations per second.</source>\n        <target>El límite deseado de operaciones de E/S por segundo.</target>\n      </trans-unit>\n      <trans-unit id="3b3b101f16c38806e984b157e0cf22cd21451122" datatype="html">\n        <source>Read BPS Limit</source>\n        <target>Límite de BPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="87835fabb6a645873f3829a450ca1d58f97754f2" datatype="html">\n        <source>The desired limit of read bytes per second.</source>\n        <target>El límite deseado de bytes de lectura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="28b485e700df46d70b96666099f714e3ae9e5c2e" datatype="html">\n        <source>Read IOPS Limit</source>\n        <target>Límite de IOPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="5907bd1a5cf3e20e740bca676cb1538372e1f9ff" datatype="html">\n        <source>The desired limit of read operations per second.</source>\n        <target>El límite deseado de operaciones de lectura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="07317121f0b194987d4dee8b322f521ac17bf124" datatype="html">\n        <source>Write BPS Limit</source>\n        <target>Límite de BPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="4022c78bd9132ca2ec67927f8484c437d1d9b6fd" datatype="html">\n        <source>The desired limit of write bytes per second.</source>\n        <target>El límite deseado de bytes de escritura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="52c22c19f98ff3a09bd811292954a889b93d28b7" datatype="html">\n        <source>Write IOPS Limit</source>\n        <target>Límite de IOPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="0ed62e3fd8654b3191fc7fa959ad3f10f1ea773a" datatype="html">\n        <source>The desired limit of write operations per second.</source>\n        <target>El límite deseado de operaciones de escritura por segundo.</target>\n      </trans-unit>\n      <trans-unit id="d90c99d77864f21f932ee1369019f400c4ad0e2d" datatype="html">\n        <source>BPS Burst</source>\n        <target>Ráfaga de BPS</target>\n      </trans-unit>\n      <trans-unit id="29c32192f4d185139aaaf6d3a766a3411dfeabbe" datatype="html">\n        <source>The desired burst limit of IO bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de E/S.</target>\n      </trans-unit>\n      <trans-unit id="b988b90489e899941e196c3dd0ecc22e37540224" datatype="html">\n        <source>IOPS Burst</source>\n        <target>Ráfaga de IOPS</target>\n      </trans-unit>\n      <trans-unit id="02c5de8ff11870f1b3896f2b45637ce0dba1ed4b" datatype="html">\n        <source>The desired burst limit of IO operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de E/S.</target>\n      </trans-unit>\n      <trans-unit id="7a160538129b37cf595f1651f28b5fac62fbc0f8" datatype="html">\n        <source>Read BPS Burst</source>\n        <target>Ráfaga de BPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="b573a5df16a53b9947288461bc24e6a0eb4341d6" datatype="html">\n        <source>The desired burst limit of read bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de lectura.</target>\n      </trans-unit>\n      <trans-unit id="1d5b8c2a0c653651cc4ca4b8fed9456f449220d1" datatype="html">\n        <source>Read IOPS Burst</source>\n        <target>Ráfaga de IOPS de lectura</target>\n      </trans-unit>\n      <trans-unit id="20b199f9d4a8d08ffefec66040e27639ec221512" datatype="html">\n        <source>The desired burst limit of read operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de lectura.</target>\n      </trans-unit>\n      <trans-unit id="824525ae57992aee629ddffcd500a8b77087ddec" datatype="html">\n        <source>Write BPS Burst</source>\n        <target>Ráfaga de BPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="a90aac4050a5d79765da5e1186909f6d4d7f981d" datatype="html">\n        <source>The desired burst limit of write bytes.</source>\n        <target>El límite deseado de ráfaga de bytes de escritura.</target>\n      </trans-unit>\n      <trans-unit id="35a8c6e6c249c7d16e26aa7c4ef97c06db405070" datatype="html">\n        <source>Write IOPS Burst</source>\n        <target>Ráfaga de IOPS de escritura</target>\n      </trans-unit>\n      <trans-unit id="b356abd41d7e9eea4d20c03d2e6892b6d435ecbd" datatype="html">\n        <source>The desired burst limit of write operations.</source>\n        <target>El límite deseado de ráfaga de operaciones de escritura.</target>\n      </trans-unit>\n      <trans-unit id="24c4d50fe8567de381a20a1745f1b6d37eacaa90" datatype="html">\n        <source>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </source>\n        <target>Failed to \n          <x id="INTERPOLATION" equiv-text="{{failure}}"/>\n          <x id="INTERPOLATION_1" equiv-text="{{metadata}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="f54b6f09b390d5ade0e354f6c7d4743c10a315cc" datatype="html">\n        <source>Executing</source>\n        <target>Ejecutando</target>\n      </trans-unit>\n      <trans-unit id="5cdfe3e3330ea42bfd29c540dbd268bee97d364d" datatype="html">\n        <source>execute</source>\n        <target>ejecutar</target>\n      </trans-unit>\n      <trans-unit id="6e98e243518daa88be30330fcdbd2d10f8eae4d7" datatype="html">\n        <source>Executed</source>\n        <target>Ejecutado</target>\n      </trans-unit>\n      <trans-unit id="24b09aa5bd909273a023d2d788a2673325c77e31" datatype="html">\n        <source>unknown task</source>\n        <target>tarea desconocida</target>\n      </trans-unit>\n      <trans-unit id="114b5f92b9192b229ffc9a450319a97ccca2aa5c" datatype="html">\n        <source>Creating</source>\n        <target>Creando</target>\n      </trans-unit>\n      <trans-unit id="56695b69d27437ada580a187958407e7c856d46e" datatype="html">\n        <source>create</source>\n        <target>crear</target>\n      </trans-unit>\n      <trans-unit id="9db60170ef3b3b41a863e7d5ee7cec10919b9141" datatype="html">\n        <source>Updating</source>\n        <target>Actualizando</target>\n      </trans-unit>\n      <trans-unit id="64412640835b7d25247cb254d4f911366c0e6862" datatype="html">\n        <source>update</source>\n        <target>actualizar</target>\n      </trans-unit>\n      <trans-unit id="416193bb373d59477458b00e5922d755e2e2cacd" datatype="html">\n        <source>Deleting</source>\n        <target>Suprimiendo</target>\n      </trans-unit>\n      <trans-unit id="d07a282afc7fbdb39cea6e1c9b544882a7260a86" datatype="html">\n        <source>Adding</source>\n        <target>Adding</target>\n      </trans-unit>\n      <trans-unit id="a11ec4e640f241329943237d2a3cceaa4823658e" datatype="html">\n        <source>add</source>\n        <target>add</target>\n      </trans-unit>\n      <trans-unit id="ea1c70b874904216cc5af24bd7cb3dab2d074d42" datatype="html">\n        <source>Removing</source>\n        <target>Removing</target>\n      </trans-unit>\n      <trans-unit id="4da487aec5a29ce4372e7b512227cd665b01fe6f" datatype="html">\n        <source>remove</source>\n        <target>remove</target>\n      </trans-unit>\n      <trans-unit id="0e21237afdc84ec360c374fa678d9b1cfaa334f9" datatype="html">\n        <source>Importing</source>\n        <target>Importing</target>\n      </trans-unit>\n      <trans-unit id="c6b4128c006f4cc0564137e1a1482b5c432aa347" datatype="html">\n        <source>import</source>\n        <target>import</target>\n      </trans-unit>\n      <trans-unit id="3b9f4138abbca0fd66db1f7332f4b54e2a6d916d" datatype="html">\n        <source>Imported</source>\n        <target>Imported</target>\n      </trans-unit>\n      <trans-unit id="3f757cfc3749ebb5d4462017cb60138ca082f15f" datatype="html">\n        <source>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="a6c681e6130fe440ae40de99a405fcf5c7eefee1" datatype="html">\n        <source>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>RBD snapshot \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="2bf18ddf3785f7afb4f01dcf63d3d8c40f4bfba5" datatype="html">\n        <source>mirroring site name</source>\n        <target>mirroring site name</target>\n      </trans-unit>\n      <trans-unit id="167b73bb24b4695614ce0fc567b7a45080457a44" datatype="html">\n        <source>bootstrap token</source>\n        <target>bootstrap token</target>\n      </trans-unit>\n      <trans-unit id="4fb54a0291f49583c317d4a3690239141b5a8f68" datatype="html">\n        <source>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror mode for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="6621ab6e122a149326a1e48e9051a41e7f203cf6" datatype="html">\n        <source>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>mirror peer for pool \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="db15adc778317d551232fe712eb03a2c1eac4a43" datatype="html">\n        <source>all dashboards</source>\n        <target>all dashboards</target>\n      </trans-unit>\n      <trans-unit id="6c19652df9249c60827044ed6274933cab180c63" datatype="html">\n        <source>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </source>\n        <target>OSDs (DriveGroups: \n          <x id="INTERPOLATION" equiv-text="{{tracking_id}}"/>)\n        </target>\n      </trans-unit>\n      <trans-unit id="1b559dbd9cc9664fd788c2da9a10d3abafe066cb" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="8fc28e1103d9f2ef47b9fff9a4f74e8365c7cf19" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="1cdc7ea44fcb85d0cfcf6e7379d625d8674a8fbe" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="460f07780389d24c6a540c007c7367a56afad585" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> is busy.\n        </target>\n      </trans-unit>\n      <trans-unit id="1ff7676ad1e991102224540a32dd44ad1ab88aa8" datatype="html">\n        <source>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </source>\n        <target>\n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> contains snapshots.\n        </target>\n      </trans-unit>\n      <trans-unit id="c3a1dcca2b2ba20fbe39e2441e7bb1cf9c20cdf3" datatype="html">\n        <source>Cloning</source>\n        <target>Clonando</target>\n      </trans-unit>\n      <trans-unit id="b5fa4e0a3a279dee5b6bf7b823e54387f7c79994" datatype="html">\n        <source>clone</source>\n        <target>clonar</target>\n      </trans-unit>\n      <trans-unit id="29b7452e8367af9aa8fa828f16ff94c3530e7a1a" datatype="html">\n        <source>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </source>\n        <target>Snapshot of \n          <x id="INTERPOLATION" equiv-text="{{rbd_name}}"/> must be protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="369f93b9a07a9465f7a261e9f0021b6cfa7180c5" datatype="html">\n        <source>Copying</source>\n        <target>Copiando</target>\n      </trans-unit>\n      <trans-unit id="37584f889855d153a106f5dffe23d21f9453c8ff" datatype="html">\n        <source>copy</source>\n        <target>copiar</target>\n      </trans-unit>\n      <trans-unit id="6ea9e313a04ef59222feaadfe84e97b4c69d7e9e" datatype="html">\n        <source>Flattening</source>\n        <target>Aplanando</target>\n      </trans-unit>\n      <trans-unit id="1f57593581b64d2d4c70eab1736bd9bccc66a7dc" datatype="html">\n        <source>flatten</source>\n        <target>aplanar</target>\n      </trans-unit>\n      <trans-unit id="d990ef9680cd23bbe652c37eb46bf038cfee80ad" datatype="html">\n        <source>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </source>\n        <target>Name is already used by \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/>.\n        </target>\n      </trans-unit>\n      <trans-unit id="a101745d080ef65c09bd5fafc796f94ddb9f9d60" datatype="html">\n        <source>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </source>\n        <target>Cannot unprotect \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it contains child images.\n        </target>\n      </trans-unit>\n      <trans-unit id="647968f4cde7786cd53ec8e6aa9802ac6824a262" datatype="html">\n        <source>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </source>\n        <target>Cannot delete \n          <x id="INTERPOLATION" equiv-text="{{snap_name}}"/> because it\'s protected.\n        </target>\n      </trans-unit>\n      <trans-unit id="57ddd3e15cf0ce974356b757451f50116a27272b" datatype="html">\n        <source>Rolling back</source>\n        <target>Revirtiendo</target>\n      </trans-unit>\n      <trans-unit id="a8913a3a5ee61f2598b5f0432cb9b20cdd60548e" datatype="html">\n        <source>rollback</source>\n        <target>revertir</target>\n      </trans-unit>\n      <trans-unit id="de8676f0017c9db6c49388cd7d63cd0a83a0c1dc" datatype="html">\n        <source>Moving</source>\n        <target>Moviendo</target>\n      </trans-unit>\n      <trans-unit id="2d810712308ae63cb795d809687a3254ef7a2f05" datatype="html">\n        <source>move</source>\n        <target>mover</target>\n      </trans-unit>\n      <trans-unit id="f3ba995236e5c1cc77686108980c099a90aec754" datatype="html">\n        <source>Moved</source>\n        <target>Movido</target>\n      </trans-unit>\n      <trans-unit id="d0422169252d132624a20f267b5c29f28cb53ebe" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' to trash\n        </target>\n      </trans-unit>\n      <trans-unit id="b603e2dfed9808222fbcb5a7c5f4da2cc6ae2aae" datatype="html">\n        <source>Could not find image.</source>\n        <target>No se encuentra la imagen.</target>\n      </trans-unit>\n      <trans-unit id="398debe73006b1fe5177ed81d2e7b0cc852f61ec" datatype="html">\n        <source>Restoring</source>\n        <target>Restaurando</target>\n      </trans-unit>\n      <trans-unit id="c252806fb400e79bac194696632c9362742b1538" datatype="html">\n        <source>restore</source>\n        <target>restaurar</target>\n      </trans-unit>\n      <trans-unit id="30b8bcf69b3f1754b7abba173fd806cfcea4cb04" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' into \'\n          <x id="INTERPOLATION_1" equiv-text="{{new_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="13b7b241cef989fe0932ddd180e757658e1817e7" datatype="html">\n        <source>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </source>\n        <target>Image name \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\' is already in use.\n        </target>\n      </trans-unit>\n      <trans-unit id="cc1cee12c833e8fbbef28a2a7c449dc530da912d" datatype="html">\n        <source>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </source>\n        <target>image \'\n          <x id="INTERPOLATION" equiv-text="{{id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="38e5f47f8bef505652f3e87f46efb00ead1350a3" datatype="html">\n        <source>Purging</source>\n        <target>Limpiando</target>\n      </trans-unit>\n      <trans-unit id="e4e57747f123f0fe6fe3a0ecf608f8bc287dec0c" datatype="html">\n        <source>purge</source>\n        <target>limpiar</target>\n      </trans-unit>\n      <trans-unit id="1560d58fdf39663929653250d45f5b1dfe078fea" datatype="html">\n        <source>all pools</source>\n        <target>todos los repositorios</target>\n      </trans-unit>\n      <trans-unit id="1ac3dc50c2c3d86e98bc0967ee1e696810a2d3aa" datatype="html">\n        <source>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </source>\n        <target>images from \n          <x id="INTERPOLATION" equiv-text="{{message}}"/>\n        </target>\n      </trans-unit>\n      <trans-unit id="02278abbb044ece04ab6bd80bd2060198d31d83b" datatype="html">\n        <source>Cannot disable mirroring because it contains a peer.</source>\n        <target>No es posible inhabilitar la duplicación porque contiene un par</target>\n      </trans-unit>\n      <trans-unit id="5c4525a1b76ca54d1aadeaecfdb83aedc2eec6e0" datatype="html">\n        <source>Identifying</source>\n        <target>Identifying</target>\n      </trans-unit>\n      <trans-unit id="ffd067e54a061d1f27cb35f0cf67ef7f29e19111" datatype="html">\n        <source>identify</source>\n        <target>identify</target>\n      </trans-unit>\n      <trans-unit id="7c921f339274688c22ba1acac7af6b097ad3599d" datatype="html">\n        <source>Identified</source>\n        <target>Identified</target>\n      </trans-unit>\n      <trans-unit id="3307492c27c2150cd26c514030444e11fd61089f" datatype="html">\n        <source>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>device \'\n          <x id="INTERPOLATION" equiv-text="{{device}}"/>\' on host \'\n          <x id="INTERPOLATION_1" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="f123ae1fc3b000e5d08e766dd78bff162afe709d" datatype="html">\n        <source>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </source>\n        <target>host \'\n          <x id="INTERPOLATION" equiv-text="{{hostname}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="c1af76189dcefd094da2bc1a4a63968f3bab5789" datatype="html">\n        <source>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </source>\n        <target>OSD \'\n          <x id="INTERPOLATION" equiv-text="{{svc_id}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="dfe70001dc590a9e12512cbb206aa29fb36fd00b" datatype="html">\n        <source>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </source>\n        <target>pool \'\n          <x id="INTERPOLATION" equiv-text="{{pool_name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="59630daf2f4786690fae0cdad55da8887236eabe" datatype="html">\n        <source>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>erasure code profile \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="79052d6c47258dc19ada12dbb2563761102b6f1d" datatype="html">\n        <source>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </source>\n        <target>crush rule \'\n          <x id="INTERPOLATION" equiv-text="{{name}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="369462e5e018360e0600bb570866201ad5c3c8a8" datatype="html">\n        <source>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </source>\n        <target>target \'\n          <x id="INTERPOLATION" equiv-text="{{target_iqn}}"/>\'\n        </target>\n      </trans-unit>\n      <trans-unit id="cf41310917cb19b335e5a950972bbff2346f7a47" datatype="html">\n        <source>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </source>\n        <target>NFS \n          <x id="INTERPOLATION" equiv-text="{{nfs_id}}"/>\n        </target>\n      </trans-unit>\n    </body>\n  </file>\n</xliff>'},"z+Ro":function(t,e,n){"use strict";function a(t){return t&&"function"==typeof t.schedule}n.d(e,"a",(function(){return a}))},"z/SZ":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var a=n("8Y7J"),r=n("hpHm");class i{constructor(t,e,n){this.nodes=t,this.viewRef=e,this.componentRef=n}}class s{constructor(t,e,n,r,i,s,o,u){this._viewContainerRef=t,this._renderer=e,this._elementRef=n,this._injector=r,this._componentFactoryResolver=i,this._ngZone=s,this._applicationRef=o,this._posService=u,this.onBeforeShow=new a.EventEmitter,this.onShown=new a.EventEmitter,this.onBeforeHide=new a.EventEmitter,this.onHidden=new a.EventEmitter,this._providers=[],this._isHiding=!1,this.containerDefaultSelector="body",this._listenOpts={},this._globalListener=Function.prototype}get isShown(){return!this._isHiding&&!!this._componentRef}attach(t){return this._componentFactory=this._componentFactoryResolver.resolveComponentFactory(t),this}to(t){return this.container=t||this.container,this}position(t){return this.attachment=t.attachment||this.attachment,this._elementRef=t.target||this._elementRef,this}provide(t){return this._providers.push(t),this}show(t={}){if(this._subscribePositioning(),this._innerComponent=null,!this._componentRef){this.onBeforeShow.emit(),this._contentRef=this._getContentRef(t.content,t.context,t.initialState);const e=a.Injector.create({providers:this._providers,parent:this._injector});this._componentRef=this._componentFactory.create(e,this._contentRef.nodes),this._applicationRef.attachView(this._componentRef.hostView),this.instance=this._componentRef.instance,Object.assign(this._componentRef.instance,t),this.container instanceof a.ElementRef&&this.container.nativeElement.appendChild(this._componentRef.location.nativeElement),"string"==typeof this.container&&"undefined"!=typeof document&&(document.querySelector(this.container)||document.querySelector(this.containerDefaultSelector)).appendChild(this._componentRef.location.nativeElement),!this.container&&this._elementRef&&this._elementRef.nativeElement.parentElement&&this._elementRef.nativeElement.parentElement.appendChild(this._componentRef.location.nativeElement),this._contentRef.componentRef&&(this._innerComponent=this._contentRef.componentRef.instance,this._contentRef.componentRef.changeDetectorRef.markForCheck(),this._contentRef.componentRef.changeDetectorRef.detectChanges()),this._componentRef.changeDetectorRef.markForCheck(),this._componentRef.changeDetectorRef.detectChanges(),this.onShown.emit(this._componentRef.instance)}return this._registerOutsideClick(),this._componentRef}hide(){if(!this._componentRef)return this;this._posService.deletePositionElement(this._componentRef.location),this.onBeforeHide.emit(this._componentRef.instance);const t=this._componentRef.location.nativeElement;return t.parentNode.removeChild(t),this._contentRef.componentRef&&this._contentRef.componentRef.destroy(),this._componentRef.destroy(),this._viewContainerRef&&this._contentRef.viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef)),this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._contentRef=null,this._componentRef=null,this._removeGlobalListener(),this.onHidden.emit(),this}toggle(){this.isShown?this.hide():this.show()}dispose(){this.isShown&&this.hide(),this._unsubscribePositioning(),this._unregisterListenersFn&&this._unregisterListenersFn()}listen(t){this.triggers=t.triggers||this.triggers,this._listenOpts.outsideClick=t.outsideClick,this._listenOpts.outsideEsc=t.outsideEsc,t.target=t.target||this._elementRef.nativeElement;const e=this._listenOpts.hide=()=>t.hide?t.hide():void this.hide(),n=this._listenOpts.show=e=>{t.show?t.show(e):this.show(e),e()};return this._unregisterListenersFn=Object(r.e)(this._renderer,{target:t.target,triggers:t.triggers,show:n,hide:e,toggle:t=>{this.isShown?e():n(t)}}),this}_removeGlobalListener(){this._globalListener&&(this._globalListener(),this._globalListener=null)}attachInline(t,e){return this._inlineViewRef=t.createEmbeddedView(e),this}_registerOutsideClick(){if(this._componentRef&&this._componentRef.location){if(this._listenOpts.outsideClick){const t=this._componentRef.location.nativeElement;setTimeout(()=>{this._globalListener=Object(r.h)(this._renderer,{targets:[t,this._elementRef.nativeElement],outsideClick:this._listenOpts.outsideClick,hide:()=>this._listenOpts.hide()})})}if(this._listenOpts.outsideEsc){const t=this._componentRef.location.nativeElement;this._globalListener=Object(r.g)(this._renderer,{targets:[t,this._elementRef.nativeElement],outsideEsc:this._listenOpts.outsideEsc,hide:()=>this._listenOpts.hide()})}}}getInnerComponent(){return this._innerComponent}_subscribePositioning(){!this._zoneSubscription&&this.attachment&&(this.onShown.subscribe(()=>{this._posService.position({element:this._componentRef.location,target:this._elementRef,attachment:this.attachment,appendToBody:"body"===this.container})}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>{this._componentRef&&this._posService.calcPosition()}))}_unsubscribePositioning(){this._zoneSubscription&&(this._zoneSubscription.unsubscribe(),this._zoneSubscription=null)}_getContentRef(t,e,n){if(!t)return new i([]);if(t instanceof a.TemplateRef){if(this._viewContainerRef){const n=this._viewContainerRef.createEmbeddedView(t,e);return n.markForCheck(),new i([n.rootNodes],n)}const n=t.createEmbeddedView({});return this._applicationRef.attachView(n),new i([n.rootNodes],n)}if("function"==typeof t){const e=this._componentFactoryResolver.resolveComponentFactory(t),r=a.Injector.create({providers:this._providers,parent:this._injector}),s=e.create(r);return Object.assign(s.instance,n),this._applicationRef.attachView(s.hostView),new i([[s.location.nativeElement]],s.hostView,s)}return new i([[this._renderer.createText(`${t}`)]])}}class o{constructor(t,e,n,a,r){this._componentFactoryResolver=t,this._ngZone=e,this._injector=n,this._posService=a,this._applicationRef=r}createLoader(t,e,n){return new s(e,n,t,this._injector,this._componentFactoryResolver,this._ngZone,this._applicationRef,this._posService)}}},z1FC:function(t,e,n){!function(t){"use strict";function e(t,e,n,a){var r={s:["viensas secunds","'iensas secunds"],ss:[t+" secunds",t+" secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return a?r[n][0]:e?r[n][0]:r[n][1]}t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},z3Vd:function(t,e,n){!function(t){"use strict";var e="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(t,n,a,r){var i=function(t){var n=Math.floor(t%1e3/100),a=Math.floor(t%100/10),r=t%10,i="";return n>0&&(i+=e[n]+"vatlh"),a>0&&(i+=(""!==i?" ":"")+e[a]+"maH"),r>0&&(i+=(""!==i?" ":"")+e[r]),""===i?"pagh":i}(t);switch(a){case"ss":return i+" lup";case"mm":return i+" tup";case"hh":return i+" rep";case"dd":return i+" jaj";case"MM":return i+" jar";case"yy":return i+" DIS"}}t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(t){var e=t;return-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"},past:function(t){var e=t;return-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu’":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},z5nN:function(t,e,n){"use strict";n.d(e,"b",(function(){return u})),n.d(e,"a",(function(){return f}));var a=n("8Y7J"),r=n("LqlI"),i=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function s(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,2,"div",[["role","document"]],[[8,"className",0]],null,null,null,null)),(t()(),a["ɵeld"](1,0,null,null,1,"div",[["class","modal-content"]],null,null,null,null,null)),a["ɵncd"](null,0)],null,(function(t,e){var n=e.component;t(e,0,0,"modal-dialog"+(n.config.class?" "+n.config.class:""))}))}function o(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"modal-container",[["class","modal"],["role","dialog"],["tabindex","-1"]],[[1,"aria-modal",0]],[[null,"mousedown"],[null,"mouseup"],["window","keydown.esc"]],(function(t,e,n){var r=!0;return"mousedown"===e&&(r=!1!==a["ɵnov"](t,1).onClickStarted(n)&&r),"mouseup"===e&&(r=!1!==a["ɵnov"](t,1).onClickStop(n)&&r),"window:keydown.esc"===e&&(r=!1!==a["ɵnov"](t,1).onEsc(n)&&r),r}),s,i)),a["ɵdid"](1,245760,null,0,r.d,[r.f,a.ElementRef,a.Renderer2],null,null)],(function(t,e){t(e,1,0)}),(function(t,e){t(e,0,0,!0)}))}var u=a["ɵccf"]("modal-container",r.d,o,{},{},["*"]),l=a["ɵcrt"]({encapsulation:2,styles:[],data:{}});function d(t){return a["ɵvid"](0,[],null,null)}function c(t){return a["ɵvid"](0,[(t()(),a["ɵeld"](0,0,null,null,1,"bs-modal-backdrop",[["class","modal-backdrop"]],null,null,null,d,l)),a["ɵdid"](1,114688,null,0,r.c,[a.ElementRef,a.Renderer2],null,null)],(function(t,e){t(e,1,0)}),null)}var f=a["ɵccf"]("bs-modal-backdrop",r.c,c,{},{},[])},z6cu:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var a=n("HDdC");function r(t,e){return new a.a(e?n=>e.schedule(i,0,{error:t,subscriber:n}):e=>e.error(t))}function i({error:t,subscriber:e}){e.error(t)}},zBJ4:function(t,e,n){var a=n("2oRo"),r=n("hh1v"),i=a.document,s=r(i)&&r(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},zEVN:function(t,e,n){var a=n("Gi0A"),r=n("sEf8"),i=n("mdPL"),s=i&&i.isMap,o=s?r(s):a;t.exports=o},zKZe:function(t,e,n){var a=n("I+eb"),r=n("YNrV");a({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},zUnb:function(t,e,n){"use strict";n.r(e);var a=n("tAZD"),r=n.n(a),i=n("SVse"),s=n("8Y7J");function o(){return localStorage.getItem("access_token")}const u=t=>{t=t||"en-US";try{return n("F+uO")(`./messages.${t}.xlf`).default}catch(e){return[]}};class l{}class d{constructor(){}}var c=n("EApP"),f=s["ɵcrt"]({encapsulation:2,styles:[],data:{animation:[{type:7,name:"flyInOut",definitions:[{type:0,name:"inactive",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:0,name:"active",styles:{type:6,styles:{opacity:1},offset:null},options:void 0},{type:0,name:"removed",styles:{type:6,styles:{opacity:0},offset:null},options:void 0},{type:1,expr:"inactive => active",animation:{type:4,styles:null,timings:"{{ easeTime }}ms {{ easing }}"},options:null},{type:1,expr:"active => removed",animation:{type:4,styles:null,timings:"{{ easeTime }}ms {{ easing }}"},options:null}],options:{}}]}});function h(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"button",[["aria-label","Close"],["class","toast-close-button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.remove()&&a),a}),null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"]))],null,null)}function g(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](1,null,["[","]"]))],null,(function(t,e){t(e,1,0,e.component.duplicatesCount+1)}))}function p(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[],[[8,"className",0],[1,"aria-label",0]],null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,g)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,3,0,e.component.duplicatesCount)}),(function(t,e){var n=e.component;t(e,0,0,n.options.titleClass,n.title),t(e,1,0,n.title)}))}function b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"div",[["aria-live","polite"],["role","alertdialog"]],[[8,"className",0],[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.options.messageClass,n.message)}))}function m(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["aria-live","polite"],["role","alertdialog"]],[[8,"className",0],[1,"aria-label",0]],null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,n.options.messageClass,n.message),t(e,1,0,n.message)}))}function y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"div",[["class","toast-progress"]],[[4,"width",null]],null,null,null,null))],null,(function(t,e){t(e,1,0,e.component.width+"%")}))}function v(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,h)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,p)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,b)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,m)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,y)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.options.closeButton),t(e,3,0,n.title),t(e,5,0,n.message&&n.options.enableHtml),t(e,7,0,n.message&&!n.options.enableHtml),t(e,9,0,n.options.progressBar)}),null)}function x(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["toast-component",""]],[[8,"className",0],[40,"@flyInOut",0],[4,"display",null]],[[null,"click"],[null,"mouseenter"],[null,"mouseleave"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).tapToast()&&a),"mouseenter"===e&&(a=!1!==s["ɵnov"](t,1).stickAround()&&a),"mouseleave"===e&&(a=!1!==s["ɵnov"](t,1).delayedHideToast()&&a),a}),v,f)),s["ɵdid"](1,180224,null,0,c.c,[c.j,c.g,s.NgZone],null,null)],null,(function(t,e){t(e,0,0,s["ɵnov"](e,1).toastClasses,s["ɵnov"](e,1).state,s["ɵnov"](e,1).displayStyle)}))}var _=s["ɵccf"]("[toast-component]",c.c,x,{},{},[]),T=n("pMnS"),O=n("jtHE");let w=(()=>{class t{}return t.START="start",t.STOP="stop",t.UPDATE="update",t.RESET="reset",t.UNSUBSCRIBE="unsubscribe",t})();class S{constructor(){this.blockUISettings={},this.blockUIInstances={},this.blockUISubject=new O.a,this.blockUIObservable=this.blockUISubject.asObservable(),this.blockUIObservable.subscribe(this.blockUIMiddleware.bind(this))}getSettings(){return this.blockUISettings}updateSettings(t={}){this.blockUISettings=Object.assign({},this.blockUISettings,t)}decorate(t="block-ui-main"){const e={name:t,isActive:!1,blockCount:0,start:this.dispatch(this.blockUISubject,w.START,t),update:this.dispatch(this.blockUISubject,w.UPDATE,t),stop:this.dispatch(this.blockUISubject,w.STOP,t),reset:this.dispatch(this.blockUISubject,w.RESET,t),unsubscribe:this.dispatch(this.blockUISubject,w.UNSUBSCRIBE,t)};return this.blockUIInstances[t]=this.blockUIInstances[t]||e,e}observe(){return this.blockUIObservable}blockUIMiddleware({action:t,name:e}){let n=null;switch(t){case w.START:n=!0;break;case w.STOP:case w.RESET:n=!1}null!==n&&(this.blockUIInstances[e].isActive=n)}dispatch(t,e,n="block-ui-main"){return a=>{t.next({name:n,action:e,message:a})}}}class I{constructor(t){this.blockUI=t}ngOnInit(){this.name=this.name||"block-ui-main",this.template=this.template||this.blockUI.blockUISettings.template}}class N{constructor(t,e,n){this.blockUI=t,this.resolver=e,this.changeDetectionRef=n,this.name="block-ui-main",this.delayStart=0,this.delayStop=0,this.state={startTimeout:null,stopTimeout:null,blockCount:0},this.active=!1}ngOnInit(){this.settings=this.blockUI.getSettings(),this.blockUISubscription=this.subscribeToBlockUI(this.blockUI.observe())}ngAfterViewInit(){try{if(!this.templateCmp)return!1;if(this.templateCmp instanceof s.TemplateRef)this.templateOutlet.createEmbeddedView(this.templateCmp);else{const t=this.resolver.resolveComponentFactory(this.templateCmp);this.templateCompRef=this.templateOutlet.createComponent(t),this.updateBlockTemplate(this.message)}}catch(t){console.error("ng-block-ui:",t)}}ngAfterViewChecked(){this.detectChanges()}subscribeToBlockUI(t){return t.subscribe(t=>this.onDispatchedEvent(t))}onDispatchedEvent(t){switch(t.action){case w.START:this.onStart(t);break;case w.STOP:this.onStop(t);break;case w.UPDATE:this.onUpdate(t);break;case w.RESET:this.onReset();break;case w.UNSUBSCRIBE:this.onStop(t),this.onUnsubscribe(t.name)}}onStart({name:t,message:e}){if(t===this.name){const t=this.delayStart||this.settings.delayStart||0;null===this.state.startTimeout&&(0===t?this.showBlock(e):this.state.startTimeout=setTimeout(()=>{this.showBlock(e)},t)),this.state.blockCount++,this.updateInstanceBlockCount()}}onStop({name:t}){if(t===this.name){const t=this.delayStop||this.settings.delayStop||0;this.state.blockCount>1?this.state.blockCount--:this.active?null===this.state.stopTimeout&&(0===t?this.hideBlock():this.state.stopTimeout=setTimeout(()=>{this.hideBlock()},t)):this.clearState(),this.updateInstanceBlockCount()}}onReset(){this.hideBlock()}onUpdate({name:t,message:e}){if(t===this.name){const t=this.delayStart||this.settings.delayStart||0;0===t?this.updateMessage(e):setTimeout(()=>{this.updateMessage(e)},t)}}updateMessage(t){this.message=t||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}showBlock(t){this.active=!0,this.message=t||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}hideBlock(){this.clearState(),this.active=!1,this.detectChanges()}clearState(){null!=this.state.startTimeout&&clearTimeout(this.state.startTimeout),null!=this.state.stopTimeout&&clearTimeout(this.state.stopTimeout),this.state.blockCount=0,this.state.startTimeout=null,this.state.stopTimeout=null,this.updateInstanceBlockCount()}updateBlockTemplate(t){this.templateCompRef&&this.templateCompRef instanceof s.ComponentRef&&(this.templateCompRef.instance.message=t)}onUnsubscribe(t){this.blockUISubscription&&t===this.name&&this.blockUISubscription.unsubscribe()}updateInstanceBlockCount(){this.blockUI.blockUIInstances[this.name]&&(this.blockUI.blockUIInstances[this.name].blockCount=this.state.blockCount)}detectChanges(){this.changeDetectionRef.destroyed||this.changeDetectionRef.detectChanges()}ngOnDestroy(){this.onUnsubscribe(this.name)}}class C{constructor(t){this.blockUIInstance=t}start(t,e){this.dispatch(t,w.START,e)}stop(t){this.dispatch(t,w.STOP)}reset(t){this.dispatch(t,w.RESET)}unsubscribe(t){this.dispatch(t,w.UNSUBSCRIBE)}isActive(t=null){const e=t?this.toArray(t):null,n=this.blockUIInstance.blockUIInstances;return Object.keys(n).some(t=>e?e.indexOf(n[t].name)>=0&&n[t].isActive:n[t].isActive)}dispatch(t=[],e,n){this.toArray(t).forEach(t=>this.blockUIInstance.decorate(t)[e](n))}toArray(t=[]){return"string"==typeof t?[t]:t}}const R=new S,A=new s.InjectionToken("BlockUIModuleSettings");function k(t){return R.updateSettings(t),R}class E{static forRoot(t={}){return{ngModule:E,providers:[{provide:A,useValue:t},{provide:S,useFactory:k,deps:[A]},C]}}}function L(t){return function(e,n,a){e[n]=R.decorate(t)}}var D=s["ɵcrt"]({encapsulation:2,styles:[],data:{}});function P(t){return s["ɵvid"](0,[s["ɵncd"](null,0),(t()(),s["ɵeld"](1,0,null,null,1,"block-ui-content",[],null,null,null,B,j)),s["ɵdid"](2,12828672,null,0,N,[S,s.ComponentFactoryResolver,s.ChangeDetectorRef],{name:[0,"name"],delayStart:[1,"delayStart"],delayStop:[2,"delayStop"],defaultMessage:[3,"defaultMessage"],templateCmp:[4,"templateCmp"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.name,n.delayStart,n.delayStop,n.message,n.template)}),null)}function M(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"block-ui",[],null,null,null,P,D)),s["ɵdid"](1,114688,null,0,I,[S],null,null)],(function(t,e){t(e,1,0)}),null)}var q=s["ɵccf"]("block-ui",I,M,{name:"name",message:"message",delayStart:"delayStart",delayStop:"delayStop",template:"template"},{},["*"]),j=s["ɵcrt"]({encapsulation:2,styles:["\n.block-ui-wrapper {\n  display: none;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  top: 0;\n  left: 0;\n  background: rgba(0, 0, 0, 0.70);\n  z-index: 30000;\n  cursor: wait;\n}\n\n.block-ui-wrapper.block-ui-wrapper--element {\n  position: absolute;\n}\n\n.block-ui-wrapper.active {\n  display: block;\n}\n\n.block-ui-wrapper.block-ui-main {\n  position: fixed;\n}\n\n.block-ui-spinner,\n.block-ui-template {\n  position: absolute;\n  top: 40%;\n  margin: 0 auto;\n  left: 0;\n  right: 0;\n  transform: translateY(-50%);\n}\n\n.block-ui-spinner > .message {\n  font-size: 1.3em;\n  text-align: center;\n  color: #fff;\n}\n\n.block-ui__element {\n  position: relative;\n}\n\n.loader,\n.loader:after {\n  border-radius: 50%;\n  width: 10em;\n  height: 10em;\n}\n.loader {\n  margin: 7px auto;\n  font-size: 5px;\n  position: relative;\n  text-indent: -9999em;\n  border-top: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-right: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-bottom: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-left: 1.1em solid #ffffff;\n  -webkit-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-animation: load8 1.1s infinite linear;\n  animation: load8 1.1s infinite linear;\n}\n\n@-webkit-keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n"],data:{}});function F(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,1,0,n.message||n.defaultMessage)}))}function G(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","block-ui-spinner"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"div",[["class","loader"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,F)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.message||n.defaultMessage)}),null)}function V(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function z(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,[[1,3],["templateOutlet",2]],null,0,null,V)),(t()(),s["ɵand"](0,null,null,0))],null,null)}function B(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{templateOutlet:0}),(t()(),s["ɵeld"](1,0,null,null,7,"div",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](4,{active:0}),(t()(),s["ɵand"](16777216,null,null,1,null,G)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,z)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component,a=s["ɵinlineInterpolate"](2,"block-ui-wrapper ",n.name," ",n.className,""),r=t(e,4,0,n.active);t(e,3,0,a,r),t(e,6,0,!n.templateCmp),t(e,8,0,n.templateCmp)}),null)}function Y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"block-ui-content",[],null,null,null,B,j)),s["ɵdid"](1,12828672,null,0,N,[S,s.ComponentFactoryResolver,s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}var H=s["ɵccf"]("block-ui-content",N,Y,{name:"name",delayStart:"delayStart",delayStop:"delayStop",defaultMessage:"message",templateCmp:"template"},{},[]),U=n("FE24"),W=n("z/SZ"),K=n("GS7A"),$=n("s7LF"),Z=n("+gVj"),J=n("LvDl"),Q=n("xj/R"),X=n("IheW");let tt=(()=>{class t{constructor(t,e){this.http=t,this.localeId=e}getLocale(){return this.localeId||"en-US"}setLocale(t){document.cookie=`cd-lang=${t}`}getLanguages(){return this.http.get("ui-api/langs")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](s.LOCALE_ID))},token:t,providedIn:"root"}),t})();var et=function(t){return t.cs="Čeština",t["de-DE"]="Deutsch",t["en-US"]="English",t["es-ES"]="Español",t["fr-FR"]="Français",t["id-ID"]="Bahasa Indonesia",t["it-IT"]="Italiano",t["ja-JP"]="日本語",t["ko-KR"]="한국어",t["pl-PL"]="Polski",t["pt-BR"]="Português (brasileiro)",t["zh-CN"]="中文 (简体)",t["zh-TW"]="中文 (繁體)",t}({});let nt={cs:Q.a,de:Q.b,es:Q.e,fr:Q.g,id:Q.m,it:Q.y,ja:Q.z,ko:Q.A,pl:Q.C,pt:Q.D,zh:Q.I};class at{constructor(t,e){this.localeService=t,this.languageService=e,this.isDropdown=!0,this.supportedLanguages=et}ngOnInit(){this.selectedLanguage=this.languageService.getLocale(),this.defineUsedLanguage(),this.languageService.getLanguages().subscribe(t=>{this.supportedLanguages=J.pick(this.supportedLanguages,t)})}defineUsedLanguage(){const t=this.selectedLanguage.slice(0,2);t in nt&&(Object(Q.c)(t,nt[t]),this.localeService.use(t))}reloadWindow(){window.location.reload()}changeLanguage(t){this.languageService.setLocale(t),this.reloadWindow()}}var rt=n("ienR"),it=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function st(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.changeLanguage(t.context.$implicit.key)&&a),a}),null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.value)}))}function ot(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"ul",[["class","dropdown-menu dropdown-menu-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,st)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,2,0,s["ɵunv"](e,2,0,s["ɵnov"](e,3).transform(n.supportedLanguages)))}),null)}function ut(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,7,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,2,"a",[["class","dropdown-toggle"],["data-toggle","dropdown"],["dropdownToggle",""],["title","Select a Language"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵted"](5,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,ot)),s["ɵdid"](7,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,2,0)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen),t(e,5,0,n.supportedLanguages[n.selectedLanguage])}))}function lt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.key),t(e,2,0,e.context.$implicit.key)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function dt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"select",[["class","form-control custom-select"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,1).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"change"===e&&(a=!1!==r.changeLanguage(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.selectedLanguage=n)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](3,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,16384,null,0,Z.h,[[8,null],Z.a],null,null),(t()(),s["ɵand"](16777216,null,null,2,null,lt)),s["ɵdid"](8,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,3,0,n.selectedLanguage),t(e,8,0,s["ɵunv"](e,8,0,s["ɵnov"](e,9).transform(n.supportedLanguages)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,6).validClass,s["ɵnov"](e,6).invalidClass)}))}function ct(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ut)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dt)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.isDropdown),t(e,3,0,!n.isDropdown)}),null)}var ft=n("quSY"),ht=n("oxzT"),gt=n("9nlD"),pt=n("mSOc");class bt{constructor(t,e){this.notificationService=t,this.summaryService=e,this.icons=ht.a,this.hasRunningTasks=!1,this.subs=new ft.a}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.hasRunningTasks=t.executing_tasks.length>0}))}ngOnDestroy(){this.subs.unsubscribe()}toggleSidebar(){this.notificationService.toggleSidebar()}}var mt=s["ɵcrt"]({encapsulation:0,styles:[[".running[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{color:#2b99a8}.running[_ngcontent-%COMP%]:hover   i[_ngcontent-%COMP%]{color:#fff}"]],data:{}});function yt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"a",[["title","Tasks and Notifications"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSidebar()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](3,{running:0}),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵeld"](8,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tasks and Notifications"]))],(function(t,e){var n=e.component,a=t(e,3,0,n.hasRunningTasks);t(e,2,0,a);var r=t(e,7,0,n.icons.bell);t(e,6,0,r)}),null)}var vt=n("aexS"),xt=n("tz6c"),_t=function(t,e,n){this.name=t,this.version=e,this.os=n,this.type="browser"},Tt=function(t){this.version=t,this.type="node",this.name="node",this.os=process.platform},Ot=function(t,e,n,a){this.name=t,this.version=e,this.os=n,this.bot=a,this.type="bot-device"},wt=function(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null},St=/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,It=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["vivaldi",/Vivaldi\/([0-9\.]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/Edg\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],Nt=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function Ct(t){var e=function(t){return""!==t&&It.reduce((function(e,n){var a=n[0];if(e)return e;var r=n[1].exec(t);return!!r&&[a,r]}),!1)}(t);if(!e)return null;var n=e[0],a=e[1];if("searchbot"===n)return new wt;var r=a[1]&&a[1].split(/[._]/).slice(0,3);r?r.length<3&&(r=function(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var a=Array(t),r=0;for(e=0;e<n;e++)for(var i=arguments[e],s=0,o=i.length;s<o;s++,r++)a[r]=i[s];return a}(r,function(t){for(var e=[],n=0;n<t;n++)e.push("0");return e}(3-r.length))):r=[];var i=r.join("."),s=function(t){for(var e=0,n=Nt.length;e<n;e++){var a=Nt[e],r=a[0];if(a[1].exec(t))return r}return null}(t),o=St.exec(t);return o&&o[1]?new Ot(n,i,s,o[1]):new _t(n,r.join("."),s)}var Rt=n("Mxhz"),At=n("sne2");class kt{constructor(t,e,n,a){this.modalRef=t,this.summaryService=e,this.userService=n,this.authStorageService=a,this.userPermission=this.authStorageService.getPermissions().user}ngOnInit(){this.copyright="Copyright(c) 2020 Ceph contributors.",this.projectConstants=At.c,this.hostAddr=window.location.hostname,this.modalVariables=this.setVariables(),this.subs=this.summaryService.subscribe(t=>{const e=t.version.replace("ceph version ","").split(" ");this.hostAddr=t.mgr_host.replace(/(^\w+:|^)\/\//,"").replace(/\/$/,""),this.versionNumber=e[0],this.versionHash=e[1],this.versionName=e.slice(2,e.length).join(" ")})}ngOnDestroy(){this.subs.unsubscribe()}setVariables(){const t={};t.user=localStorage.getItem("dashboard_username"),t.role="user",this.userPermission.read&&this.userService.get(t.user).subscribe(e=>{t.role=e.roles});const e="undefined"!=typeof navigator?Ct(navigator.userAgent):"undefined"!=typeof process&&process.version?new Tt(process.version.slice(1)):null;return t.browserName=e&&e.name?e.name:"Not detected",t.browserVersion=e&&e.version?e.version:"Not detected",t.browserOS=e&&e.os?e.os:"Not detected",t}}class Et{constructor(t,e,n){this.modalService=t,this.authStorageService=e,this.docService=n,this.icons=ht.a}ngOnInit(){this.docService.subscribeOnce("dashboard",t=>{this.docsUrl=t})}openAboutModal(){this.modalRef=this.modalService.show(kt),this.modalRef.setClass("modal-lg")}goToApiDocs(){this.docsFormElement.nativeElement.children[0].value=this.authStorageService.getToken(),this.docsFormElement.nativeElement.submit()}}var Lt=n("LqlI"),Dt=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Pt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"a",[["class","dropdown-item text-capitalize"],["target","_blank"]],[[8,"href",4]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](5,{disabled:0}),(t()(),s["ɵted"](-1,null,["documentation"])),(t()(),s["ɵeld"](7,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.goToApiDocs()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["API"])),(t()(),s["ɵeld"](10,0,null,null,2,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.openAboutModal()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["About"]))],(function(t,e){var n=t(e,5,0,!e.component.docsUrl);t(e,4,0,"dropdown-item text-capitalize",n)}),(function(t,e){t(e,2,0,s["ɵinlineInterpolate"](1,"",e.component.docsUrl,""))}))}function Mt(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{docsFormElement:0}),(t()(),s["ɵeld"](1,0,[[1,0],["docsForm",1]],null,1,"form",[["action","/docs"],["method","post"],["target","_blank"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"input",[["name","token"],["type","hidden"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](5,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](6,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Help"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,7).onClick()&&a),a}),null,null)),s["ɵdid"](7,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](8,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](11,1),(t()(),s["ɵeld"](12,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Help"])),(t()(),s["ɵand"](16777216,null,null,1,null,Pt)),s["ɵdid"](15,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,5,0);var a=t(e,11,0,n.icons.questionCircle);t(e,10,0,a)}),(function(t,e){t(e,3,0,s["ɵnov"](e,5).dropup,s["ɵnov"](e,5).isOpen,s["ɵnov"](e,5).isOpen&&s["ɵnov"](e,5).isBs4),t(e,6,0,!0,s["ɵnov"](e,7).isDisabled,s["ɵnov"](e,7).isOpen)}))}var qt=n("iInd");class jt{constructor(t){this.authStorageService=t,this.icons=ht.a;const e=this.authStorageService.getPermissions();this.userPermission=e.user,this.configOptPermission=e.configOpt}ngOnInit(){}}var Ft=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Gt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"a",[["class","dropdown-item"],["routerLink","/user-management"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["User management"]))],(function(t,e){t(e,2,0,"/user-management")}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function Vt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"a",[["class","dropdown-item"],["routerLink","/telemetry"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Telemetry configuration"]))],(function(t,e){t(e,2,0,"/telemetry")}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function zt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Gt)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Vt)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.userPermission.read),t(e,4,0,n.configOptPermission.read)}),null)}function Bt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Dashboard Settings"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](8,1),(t()(),s["ɵeld"](9,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Dashboard Settings"])),(t()(),s["ɵand"](16777216,null,null,1,null,zt)),s["ɵdid"](12,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0);var a=t(e,8,0,n.icons.deepCheck);t(e,7,0,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen)}))}function Yt(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Bt)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.userPermission.read)}),null)}var Ht=n("DSvg");class Ut{constructor(t,e){this.authStorageService=t,this.authService=e,this.icons=ht.a}ngOnInit(){this.username=this.authStorageService.getUsername(),this.sso=this.authStorageService.isSSO()}logout(){this.authService.logout()}}var Wt=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Kt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"a",[["class","dropdown-item"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](2,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](3,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](5,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](6,1),(t()(),s["ɵeld"](7,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Change password"]))],(function(t,e){var n=e.component;t(e,2,0,"/user-profile/edit");var a=t(e,6,0,n.icons.lock);t(e,5,0,a)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).target,s["ɵnov"](e,2).href)}))}function $t(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,16,"ul",[["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"li",[["class","disabled"],["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"a",[["class","dropdown-item disabled"],["href","#"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Signed in as "])),(t()(),s["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵeld"](6,0,null,null,0,"li",[["class","dropdown-divider"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Kt)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,null,7,"li",[["role","menuitem"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,6,"a",[["class","dropdown-item"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.logout()&&a),a}),null,null)),(t()(),s["ɵeld"](11,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](13,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](14,1),(t()(),s["ɵeld"](15,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sign out"]))],(function(t,e){var n=e.component;t(e,8,0,!n.sso);var a=t(e,14,0,n.icons.signOut);t(e,13,0,a)}),(function(t,e){t(e,5,0,e.component.username)}))}function Zt(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,12,"div",[["class","btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),s["ɵprd"](512,null,U.f,U.f,[]),s["ɵdid"](2,212992,null,0,U.c,[s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,U.f,U.a,K.b],null,null),(t()(),s["ɵeld"](3,0,null,null,7,"a",[["class","dropdown-toggle"],["dropdownToggle",""],["title","Logged in user"]],[[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,4).onClick()&&a),a}),null,null)),s["ɵdid"](4,147456,null,0,U.g,[s.ChangeDetectorRef,U.c,s.ElementRef,s.Renderer2,U.f],null,null),(t()(),s["ɵeld"](5,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](8,1),(t()(),s["ɵeld"](9,0,null,null,1,"span",[["class","d-md-none"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Logged in user"])),(t()(),s["ɵand"](16777216,null,null,1,null,$t)),s["ɵdid"](12,16384,null,0,U.d,[U.f,s.ViewContainerRef,s.TemplateRef],null,null)],(function(t,e){var n=e.component;t(e,2,0);var a=t(e,8,0,n.icons.user);t(e,7,0,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,2).dropup,s["ɵnov"](e,2).isOpen,s["ɵnov"](e,2).isOpen&&s["ɵnov"](e,2).isBs4),t(e,3,0,!0,s["ɵnov"](e,4).isDisabled,s["ɵnov"](e,4).isOpen)}))}const Jt=[Object(K.h)({height:0,visibility:"hidden"}),Object(K.e)("400ms cubic-bezier(0.4,0.0,0.2,1)",Object(K.h)({height:"*",visibility:"visible"}))],Qt=[Object(K.h)({height:"*",visibility:"visible"}),Object(K.e)("400ms cubic-bezier(0.4,0.0,0.2,1)",Object(K.h)({height:0,visibility:"hidden"}))];class Xt{constructor(t,e,n){this._el=t,this._renderer=e,this.collapsed=new s.EventEmitter,this.collapses=new s.EventEmitter,this.expanded=new s.EventEmitter,this.expands=new s.EventEmitter,this.isExpanded=!0,this.isCollapsed=!1,this.isCollapse=!0,this.isCollapsing=!1,this.isAnimated=!1,this._display="block",this._stylesLoaded=!1,this._COLLAPSE_ACTION_NAME="collapse",this._EXPAND_ACTION_NAME="expand",this._factoryCollapseAnimation=n.build(Qt),this._factoryExpandAnimation=n.build(Jt)}set display(t){this.isAnimated?(this._display=t,"none"!==t?this.show():this.hide()):this._renderer.setStyle(this._el.nativeElement,"display",t)}set collapse(t){this._player&&!this._isAnimationDone||(this.isExpanded=t,this.toggle())}get collapse(){return this.isExpanded}ngAfterViewChecked(){this._stylesLoaded=!0,this._player&&this._isAnimationDone&&(this._player.reset(),this._renderer.setStyle(this._el.nativeElement,"height","*"))}toggle(){this.isExpanded?this.hide():this.show()}hide(){this.isCollapsing=!0,this.isExpanded=!1,this.isCollapsed=!0,this.isCollapsing=!1,this.collapses.emit(this),this._isAnimationDone=!1,this.animationRun(this.isAnimated,this._COLLAPSE_ACTION_NAME)(()=>{this._isAnimationDone=!0,this.collapsed.emit(this),this._renderer.setStyle(this._el.nativeElement,"display","none")})}show(){this._renderer.setStyle(this._el.nativeElement,"display",this._display),this.isCollapsing=!0,this.isExpanded=!0,this.isCollapsed=!1,this.isCollapsing=!1,this.expands.emit(this),this._isAnimationDone=!1,this.animationRun(this.isAnimated,this._EXPAND_ACTION_NAME)(()=>{this._isAnimationDone=!0,this.expanded.emit(this)})}animationRun(t,e){if(!t||!this._stylesLoaded)return t=>t();this._renderer.setStyle(this._el.nativeElement,"overflow","hidden"),this._renderer.addClass(this._el.nativeElement,"collapse");const n=e===this._EXPAND_ACTION_NAME?this._factoryExpandAnimation:this._factoryCollapseAnimation;return this._player&&this._player.destroy(),this._player=n.create(this._el.nativeElement),this._player.play(),t=>this._player.onDone(t)}}class te{static forRoot(){return{ngModule:te,providers:[]}}}class ee{transform(t){return"HEALTH_OK"===t?{color:"#00bb00"}:"HEALTH_WARN"===t?{color:"#ffa500"}:"HEALTH_ERR"===t?{color:"#ff0000"}:null}}var ne=n("MdoF"),ae=n("CNMR"),re=n("20UP"),ie=n("oMSZ");class se{constructor(t,e){this.settingsService=t,this.authStorageService=e,this.displayNotification=!1}ngOnInit(){this.settingsService.getStandardSettings().subscribe(t=>{this.pwdExpirationSettings=new ie.a(t);const e=this.authStorageService.getPwdExpirationDate();e&&(this.expirationDays=this.getExpirationDays(e),this.alertType=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning2?"danger":"warning",this.displayNotification=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning1,this.authStorageService.isPwdDisplayedSource.next(this.displayNotification))})}ngOnDestroy(){this.authStorageService.isPwdDisplayedSource.next(!1)}getExpirationDays(t){const e=new Date,n=new Date(1e3*t);return Math.floor((n.valueOf()-e.valueOf())/864e5)}close(){this.authStorageService.isPwdDisplayedSource.next(!1),this.displayNotification=!1}}var oe=s["ɵcrt"]({encapsulation:0,styles:[[".no-margin-bottom .alert{margin-bottom:0}"]],data:{}});function ue(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Your password will expire in "])),(t()(),s["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["less than 1"])),(t()(),s["ɵted"](-1,null,[" day. Click "])),(t()(),s["ɵeld"](5,0,null,null,2,"a",[["class","alert-link"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to change it now."]))],(function(t,e){t(e,6,0,"/user-profile/edit")}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function le(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Your password will expire in "])),(t()(),s["ɵeld"](2,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""])),(t()(),s["ɵted"](-1,null,[" day(s). Click "])),(t()(),s["ɵeld"](5,0,null,null,2,"a",[["class","alert-link"],["routerLink","/user-profile/edit"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to change it now."]))],(function(t,e){t(e,6,0,"/user-profile/edit")}),(function(t,e){t(e,3,0,e.component.expirationDays),t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function de(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"alert",[["class","no-margin-bottom"]],null,[[null,"onClose"]],(function(t,e,n){var a=!0;return"onClose"===e&&(a=!1!==t.component.close(n)&&a),a}),ne.c,ne.b)),s["ɵdid"](1,114688,null,0,ae.a,[ae.b,s.ChangeDetectorRef],{type:[0,"type"],dismissible:[1,"dismissible"]},{onClose:"onClose"}),(t()(),s["ɵand"](16777216,null,0,1,null,ue)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,le)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,s["ɵinlineInterpolate"](1,"",n.alertType,""),!0),t(e,3,0,0===n.expirationDays),t(e,5,0,n.expirationDays>0)}),null)}function ce(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,de)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.displayNotification)}),null)}var fe=n("pL04");let he=(()=>{class t{constructor(t){this.http=t,this.url="api/mgr/module"}list(){return this.http.get(`${this.url}`)}getConfig(t){return this.http.get(`${this.url}/${t}`)}updateConfig(t,e){return this.http.put(`${this.url}/${t}`,{config:e})}enable(t){return this.http.post(`${this.url}/${t}/enable`,null)}disable(t){return this.http.post(`${this.url}/${t}/disable`,null)}getOptions(t){return this.http.get(`${this.url}/${t}/options`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();var ge=n("mtw6");let pe=(()=>{class t{constructor(){this.visible=!1,this.update=new s.EventEmitter}setVisibility(t){this.visible=t,this.update.emit(t)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();class be{constructor(t,e,n,a,r,i){this.mgrModuleService=t,this.authStorageService=e,this.userService=n,this.notificationService=a,this.telemetryNotificationService=r,this.i18n=i,this.displayNotification=!1}ngOnInit(){if(this.telemetryNotificationService.update.subscribe(t=>{this.displayNotification=t}),!this.isNotificationHidden()){const t=this.authStorageService.getUsername();this.userService.get(t).subscribe(t=>{t.roles.includes("administrator")&&this.mgrModuleService.getConfig("telemetry").subscribe(t=>{t.enabled||this.telemetryNotificationService.setVisibility(!0)})})}}ngOnDestroy(){this.telemetryNotificationService.setVisibility(!1)}isNotificationHidden(){return"true"===localStorage.getItem("telemetry_notification_hidden")}close(){this.telemetryNotificationService.setVisibility(!1),localStorage.setItem("telemetry_notification_hidden","true"),this.notificationService.show(ge.a.success,this.i18n("Telemetry activation reminder muted"),this.i18n("You can activate the module on the Telemetry configuration page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time."))}}var me=n("GiVz"),ye=s["ɵcrt"]({encapsulation:0,styles:[[".no-margin-bottom{margin-bottom:0}"]],data:{}});function ve(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"alert",[["class","no-margin-bottom"],["type","warning"]],null,[[null,"onClose"]],(function(t,e,n){var a=!0;return"onClose"===e&&(a=!1!==t.component.close(n)&&a),a}),ne.c,ne.b)),s["ɵdid"](1,114688,null,0,ae.a,[ae.b,s.ChangeDetectorRef],{type:[0,"type"],dismissible:[1,"dismissible"]},{onClose:"onClose"}),(t()(),s["ɵeld"](2,0,null,0,5,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The Telemetry module is not submitting telemetry data at the moment. Click "])),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","alert-link"],["routerLink","/telemetry"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["here"])),(t()(),s["ɵted"](-1,null,[" to activate it now."]))],(function(t,e){t(e,1,0,"warning",!0),t(e,5,0,"/telemetry")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function xe(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ve)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.displayNotification)}),null)}var _e=n("7qid"),Te=n("38Bd"),Oe=n("wd/R");class we{transform(t,e=!1){return e?Oe(t).fromNow():this._forHumans(t)}_forHumans(t){const e=[[`${Math.floor(t/31536e3)}`,"years"],[`${Math.floor(t%31536e3/86400)}`,"days"],[`${Math.floor(t%86400/3600)}`,"hours"],[`${Math.floor(t%3600/60)}`,"minutes"],[`${Math.floor(t%60)}`,"seconds"]];let n="";for(let a=0,r=e.length;a<r;a++)"0"!==e[a][0]&&(n+=" "+e[a][0]+" "+("1"===e[a][0]?e[a][1].substr(0,e[a][1].length-1):e[a][1]));return n.trim()||"1 second"}}var Se=n("a0VL"),Ie=n("moLw"),Ne=n("WF9J"),Ce=s["ɵcrt"]({encapsulation:2,styles:["[data-simplebar]{position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;flex-wrap:wrap;-webkit-box-pack:start;justify-content:flex-start;align-content:flex-start;-webkit-box-align:start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;visibility:visible;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;-webkit-box-flex:inherit;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;-webkit-transition:opacity linear;transition:opacity linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}","ngx-simplebar{display:block}"],data:{}});function Re(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","simplebar-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"div",[["class","simplebar-height-auto-observer-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"div",[["class","simplebar-height-auto-observer"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,4,"div",[["class","simplebar-mask"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"div",[["class","simplebar-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"div",[["class","simplebar-content-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"div",[["class","simplebar-content"]],null,null,null,null,null)),s["ɵncd"](null,0),(t()(),s["ɵeld"](8,0,null,null,0,"div",[["class","simplebar-placeholder"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"div",[["class","simplebar-track simplebar-horizontal"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"div",[["class","simplebar-scrollbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"div",[["class","simplebar-track simplebar-vertical"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,0,"div",[["class","simplebar-scrollbar"]],null,null,null,null,null))],null,null)}var Ae=n("O9Tv"),ke=n("G1I9"),Ee=n("lJxs");let Le=(()=>{class t{constructor(t,e){this.http=t,this.settingsService=e,this.baseURL="api/prometheus",this.settingsKey={alertmanager:"api/settings/alertmanager-api-host",prometheus:"api/settings/prometheus-api-host"}}ifAlertmanagerConfigured(t,e){this.settingsService.ifSettingConfigured(this.settingsKey.alertmanager,t,e)}disableAlertmanagerConfig(){this.settingsService.disableSetting(this.settingsKey.alertmanager)}ifPrometheusConfigured(t,e){this.settingsService.ifSettingConfigured(this.settingsKey.prometheus,t,e)}disablePrometheusConfig(){this.settingsService.disableSetting(this.settingsKey.prometheus)}getAlerts(t={}){return this.http.get(this.baseURL,{params:t})}getSilences(t={}){return this.http.get(`${this.baseURL}/silences`,{params:t})}getRules(t="all"){return this.http.get(`${this.baseURL}/rules`).pipe(Object(Ee.a)(e=>(["alerting","rewrites"].includes(t)&&e.groups.map(e=>{e.rules=e.rules.filter(e=>e.type===t)}),e)))}setSilence(t){return this.http.post(`${this.baseURL}/silence`,t,{observe:"response"})}expireSilence(t){return this.http.delete(`${this.baseURL}/silence/${t}`,{observe:"response"})}getNotifications(t){return this.http.get(`${this.baseURL}/notifications?from=${t&&t.id?t.id:"last"}`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](re.a))},token:t,providedIn:fe.a}),t})(),De=(()=>{class t{constructor(t){this.notificationService=t}sendNotifications(t){t.forEach(t=>this.notificationService.show(t))}convertToCustomAlerts(t){return J.uniqWith(t.map(t=>({status:J.isObject(t.status)?t.status.state:this.getPrometheusNotificationStatus(t),name:t.labels.alertname,url:t.generatorURL,summary:t.annotations.summary,fingerprint:J.isObject(t.status)&&t.fingerprint})),J.isEqual)}getPrometheusNotificationStatus(t){const e=t.status;return"firing"===e?"active":e}convertAlertToNotification(t){return new ke.b(this.formatType(t.status),`${t.name} (${t.status})`,this.appendSourceLink(t,t.summary),void 0,"Prometheus")}formatType(t){return ge.a[J.findKey({error:["firing","active"],info:["suppressed","unprocessed"],success:["resolved"]},e=>e.includes(t))]}appendSourceLink(t,e){return`${e} <a href="${t.url}" target="_blank"><i class="${ht.a.lineChart}"></i></a>`}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](gt.a))},token:t,providedIn:"root"}),t})(),Pe=(()=>{class t{constructor(t,e){this.alertFormatter=t,this.prometheusService=e,this.canAlertsBeNotified=!1,this.alerts=[],this.rules=[]}getAlerts(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getAlerts().subscribe(t=>this.handleAlerts(t),t=>{[404,504].includes(t.status)&&this.prometheusService.disableAlertmanagerConfig()})})}getRules(){this.prometheusService.ifPrometheusConfigured(()=>{this.prometheusService.getRules("alerting").subscribe(t=>{this.rules=t.groups.reduce((t,e)=>t.concat(e.rules.map(t=>(t.group=e.name,t))),[])})})}refresh(){this.getAlerts(),this.getRules()}handleAlerts(t){this.canAlertsBeNotified&&this.notifyOnAlertChanges(t,this.alerts),this.alerts=t,this.canAlertsBeNotified=!0}notifyOnAlertChanges(t,e){const n=this.getChangedAlerts(this.alertFormatter.convertToCustomAlerts(t),this.alertFormatter.convertToCustomAlerts(e)).map(t=>this.alertFormatter.convertAlertToNotification(t));this.alertFormatter.sendNotifications(n)}getChangedAlerts(t,e){return J.differenceWith(t,e,J.isEqual).concat(this.getVanishedAlerts(t,e))}getVanishedAlerts(t,e){return J.differenceWith(e,t,(t,e)=>t.fingerprint===e.fingerprint).map(t=>(t.status="resolved",t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](De),s["ɵɵinject"](Le))},token:t,providedIn:"root"}),t})(),Me=(()=>{class t{constructor(t,e){this.alertFormatter=t,this.prometheusService=e,this.backendFailure=!1,this.notifications=[]}refresh(){this.backendFailure||this.prometheusService.getNotifications(J.last(this.notifications)).subscribe(t=>this.handleNotifications(t),()=>this.backendFailure=!0)}handleNotifications(t){0!==t.length&&(this.notifications.length>0&&this.alertFormatter.sendNotifications(J.flatten(t.map(t=>this.formatNotification(t)))),this.notifications=this.notifications.concat(t))}formatNotification(t){return this.alertFormatter.convertToCustomAlerts(t.alerts).map(t=>this.alertFormatter.convertAlertToNotification(t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](De),s["ɵɵinject"](Le))},token:t,providedIn:"root"}),t})();var qe=n("ufoC");class je{constructor(t,e,n,a,r,i,s,o){this.notificationService=t,this.summaryService=e,this.taskMessageService=n,this.prometheusNotificationService=a,this.authStorageService=r,this.prometheusAlertService=i,this.ngZone=s,this.cdRef=o,this.isSidebarOpened=!1,this.executingTasks=[],this.subs=new ft.a,this.icons=ht.a,this.last_task="",this.mutex=new Ae.Mutex,this.simplebar={autoHide:!1},this.notifications=[]}ngOnDestroy(){window.clearInterval(this.interval),window.clearTimeout(this.timeout),this.subs.unsubscribe()}ngOnInit(){this.last_task=window.localStorage.getItem("last_task");const t=this.authStorageService.getPermissions();t.prometheus.read&&t.configOpt.read&&(this.triggerPrometheusAlerts(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.triggerPrometheusAlerts()})},5e3)})),this.subs.add(this.notificationService.data$.subscribe(t=>{this.notifications=J.orderBy(t,["timestamp"],["desc"]),this.cdRef.detectChanges()})),this.subs.add(this.notificationService.sidebarSubject.subscribe(t=>{this.isSidebarOpened=!t&&!this.isSidebarOpened,window.clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.cdRef.detectChanges()},0)})),this.subs.add(this.summaryService.subscribe(t=>{this._handleTasks(t.executing_tasks),this.mutex.acquire().then(e=>{J.filter(t.finished_tasks,t=>!this.last_task||Oe(t.end_time).isAfter(this.last_task)).forEach(t=>{const e=this.notificationService.finishedTaskToNotification(t,t.success),n=new ke.a(e);n.timestamp=t.end_time,n.duration=t.duration,this.last_task&&!Oe(t.end_time).isAfter(this.last_task)||(this.last_task=t.end_time,window.localStorage.setItem("last_task",this.last_task)),this.notificationService.save(n)}),this.cdRef.detectChanges(),e()})}))}_handleTasks(t){for(const e of t)e.description=this.taskMessageService.getRunningTitle(e);this.executingTasks=t}triggerPrometheusAlerts(){this.prometheusAlertService.refresh(),this.prometheusNotificationService.refresh()}removeAll(){this.notificationService.removeAll()}remove(t){this.notificationService.remove(t)}closeSidebar(){this.isSidebarOpened=!1}trackByFn(t){return t}}var Fe=s["ɵcrt"]({encapsulation:0,styles:[["[_nghost-%COMP%]{position:fixed;top:53px;bottom:10px;right:-350px;width:350px;max-width:90vw;z-index:9;transition:all .6s}.active[_nghost-%COMP%]{right:20px}.card[_ngcontent-%COMP%]{height:100%}ngx-simplebar[_ngcontent-%COMP%]{height:calc(100% - 42.2px)}.separator[_ngcontent-%COMP%]{padding:5px 12px;color:#90949c;background-color:#eee;font-size:12px}.btn-link[_ngcontent-%COMP%]   .fa-trash-o[_ngcontent-%COMP%]{color:#000}table[_ngcontent-%COMP%]{width:100%}.row[_ngcontent-%COMP%]{margin-left:0;margin-right:0}"]],data:{}});function Ge(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,27,"div",[["class","card tc_task border-0 mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,26,"div",[["class","row no-gutters"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,12,"div",[["class","col-md-3 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,11,"span",[["class","text-info"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](7,2),(t()(),s["ɵeld"](8,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](11,2),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,4),(t()(),s["ɵeld"](16,0,null,null,12,"div",[["class","col-md-9"]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,11,"div",[["class","card-body p-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,1,"h6",[["class","card-title bold"]],null,null,null,null,null)),(t()(),s["ɵted"](19,null,["",""])),(t()(),s["ɵeld"](20,0,null,null,2,"div",[["class","progress mb-1"]],null,null,null,null,null)),(t()(),s["ɵeld"](21,0,null,null,1,"progressbar",[["class","progress-striped active"],["max","100"]],[[1,"max",0],[2,"progress",null]],null,null,_e.b,_e.a)),s["ɵdid"](22,49152,null,0,Te.b,[Te.c],{animate:[0,"animate"],striped:[1,"striped"],value:[2,"value"],max:[3,"max"]},null),(t()(),s["ɵeld"](23,0,null,null,5,"p",[["class","card-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,2,"small",[["class","date float-left"]],null,null,null,null,null)),(t()(),s["ɵted"](25,null,[" "," "])),s["ɵppd"](26,1),(t()(),s["ɵeld"](27,0,null,null,1,"span",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵted"](28,null,[" "," % "])),(t()(),s["ɵeld"](29,0,null,null,0,"hr",[],null,null,null,null,null))],(function(t,e){var n=e.component,a=t(e,7,0,n.icons.stack,n.icons.large2x);t(e,6,0,"text-info",a);var r=t(e,11,0,n.icons.stack2x,n.icons.circle);t(e,10,0,r);var i=t(e,15,0,n.icons.stack1x,n.icons.spinner,n.icons.spin,n.icons.inverse);t(e,14,0,i),t(e,22,0,!0,!0,e.context.$implicit.progress,"100")}),(function(t,e){t(e,19,0,e.context.$implicit.description),t(e,21,0,s["ɵnov"](e,22).max,s["ɵnov"](e,22).addClass);var n=s["ɵunv"](e,25,0,t(e,26,0,s["ɵnov"](e.parent.parent,0),e.context.$implicit.begin_time));t(e,25,0,n),t(e,28,0,e.context.$implicit.progress||0)}))}function Ve(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ge)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,n.executingTasks,n.trackByFn)}),null)}function ze(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"small",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Duration:"])),(t()(),s["ɵted"](4,null,[" "," "])),s["ɵpid"](0,we,[]),(t()(),s["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,4,0,s["ɵunv"](e,4,0,s["ɵnov"](e,5).transform(e.parent.context.$implicit.duration)))}))}function Be(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,37,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,35,"div",[["class","card tc_notification border-0 mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,34,"div",[["class","row no-gutters"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,12,"div",[["class","col-md-3 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,11,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,3),(t()(),s["ɵeld"](8,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](11,2),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,3),(t()(),s["ɵeld"](16,0,null,null,20,"div",[["class","col-md-9"]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,19,"div",[["class","card-body p-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,4,"button",[["class","btn btn-link float-right mt-0 pt-0"],["title","Remove notification"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.remove(t.context.index),a=!1!==n.stopPropagation()&&a),a}),null,null)),(t()(),s["ɵeld"](19,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](21,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](22,1),(t()(),s["ɵeld"](23,0,null,null,1,"h6",[["class","card-title bold"]],null,null,null,null,null)),(t()(),s["ɵted"](24,null,["",""])),(t()(),s["ɵeld"](25,0,null,null,0,"p",[["class","card-text"]],[[8,"innerHTML",1]],null,null,null,null)),(t()(),s["ɵeld"](26,0,null,null,10,"p",[["class","card-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ze)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](29,0,null,null,3,"small",[["class","date"]],[[8,"title",0]],null,null,null,null)),s["ɵppd"](30,1),(t()(),s["ɵted"](31,null,["",""])),s["ɵpid"](0,we,[]),(t()(),s["ɵeld"](33,0,null,null,3,"i",[["class","float-right custom-icon"]],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](35,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](36,1),(t()(),s["ɵeld"](37,0,null,null,0,"hr",[],null,null,null,null,null))],(function(t,e){var n=e.component,a=t(e,7,0,n.icons.stack,n.icons.large2x,e.context.$implicit.textClass);t(e,6,0,a);var r=t(e,11,0,n.icons.circle,n.icons.stack2x);t(e,10,0,r);var i=t(e,15,0,n.icons.stack1x,n.icons.inverse,e.context.$implicit.iconClass);t(e,14,0,i);var s=t(e,22,0,n.icons.trash);t(e,21,0,s),t(e,28,0,e.context.$implicit.duration);var o=t(e,36,0,e.context.$implicit.applicationClass);t(e,35,0,"float-right custom-icon",o)}),(function(t,e){t(e,24,0,e.context.$implicit.title),t(e,25,0,e.context.$implicit.message);var n=s["ɵunv"](e,29,0,t(e,30,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.timestamp));t(e,29,0,n),t(e,31,0,s["ɵunv"](e,31,0,s["ɵnov"](e,32).transform(e.context.$implicit.timestamp,!0))),t(e,33,0,e.context.$implicit.application)}))}function Ye(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"button",[["class","btn btn-light btn-block"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.removeAll(),a=!1!==n.stopPropagation()&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵted"](-1,null,["   "])),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clear notifications"])),(t()(),s["ɵeld"](9,0,null,null,0,"hr",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Be)),s["ɵdid"](11,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=t(e,5,0,n.icons.trash);t(e,4,0,a),t(e,11,0,n.notifications)}),null)}function He(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ye)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.notifications.length>0)}),null)}function Ue(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"div",[["class","message text-center"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["There are no notifications."]))],null,null)}function We(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ue)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,0===n.notifications.length&&0===n.executingTasks.length)}),null)}function Ke(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function $e(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Ze(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Je(t){return s["ɵvid"](2,[s["ɵpid"](0,Se.a,[i.DatePipe]),(t()(),s["ɵand"](0,[["tasksTpl",2]],null,0,null,Ve)),(t()(),s["ɵand"](0,[["notificationsTpl",2]],null,0,null,He)),(t()(),s["ɵand"](0,[["emptyTpl",2]],null,0,null,We)),(t()(),s["ɵeld"](4,0,null,null,16,"div",[["class","card"]],null,[[null,"clickOutside"]],(function(t,e,n){var a=!0;return"clickOutside"===e&&(a=!1!==t.component.closeSidebar()&&a),a}),null,null)),s["ɵdid"](5,737280,null,0,Ie.ClickOutsideDirective,[s.ElementRef,s.NgZone,s.PLATFORM_ID],{clickOutsideEnabled:[0,"clickOutsideEnabled"]},{clickOutside:"clickOutside"}),(t()(),s["ɵeld"](6,0,null,null,5,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tasks and Notifications"])),(t()(),s["ɵeld"](9,0,null,null,2,"button",[["class","close float-right"],["tabindex","-1"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.closeSidebar()&&a),a}),null,null)),(t()(),s["ɵeld"](10,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](12,0,null,null,8,"ngx-simplebar",[["data-simplebar","init"]],null,null,null,Re,Ce)),s["ɵdid"](13,4440064,null,0,Ne.a,[s.ElementRef],{options:[0,"options"]},null),(t()(),s["ɵeld"](14,0,null,0,6,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ke)),s["ɵdid"](16,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$e)),s["ɵdid"](18,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ze)),s["ɵdid"](20,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],(function(t,e){var n=e.component;t(e,5,0,n.isSidebarOpened),t(e,13,0,n.simplebar),t(e,16,0,s["ɵnov"](e,1)),t(e,18,0,s["ɵnov"](e,2)),t(e,20,0,s["ɵnov"](e,3))}),null)}var Qe=n("ej+x");class Xe{constructor(t,e,n,a,r){this.authStorageService=t,this.summaryService=e,this.featureToggles=n,this.telemetryNotificationService=a,this.prometheusAlertService=r,this.notifications=[],this.icons=ht.a,this.isCollapsed=!0,this.showMenuSidebar=!0,this.displayedSubMenu="",this.simplebar={autoHide:!1},this.subs=new ft.a,this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}get class(){return"top-notification-"+this.notifications.length}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.summaryData=t})),this.subs.add(this.authStorageService.isPwdDisplayed$.subscribe(t=>{this.showTopNotification("isPwdDisplayed",t)})),this.subs.add(this.telemetryNotificationService.update.subscribe(t=>{this.showTopNotification("telemetryNotificationEnabled",t)}))}ngOnDestroy(){this.subs.unsubscribe()}blockHealthColor(){if(this.summaryData&&this.summaryData.rbd_mirroring){if(this.summaryData.rbd_mirroring.errors>0)return{color:"#d9534f"};if(this.summaryData.rbd_mirroring.warnings>0)return{color:"#f0ad4e"}}}toggleSubMenu(t){this.displayedSubMenu=this.displayedSubMenu===t?"":t}showTopNotification(t,e){if(e)this.notifications.includes(t)||this.notifications.push(t);else{const e=this.notifications.indexOf(t);e>=0&&this.notifications.splice(e,1)}}}var tn=s["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";  .cd-navbar-top .cd-navbar-brand{background:#374249;border-top:4px solid #2b99a8}  .cd-navbar-top .cd-navbar-brand.isPwdDisplayed{top:37.6px}  .cd-navbar-top .cd-navbar-brand .navbar-brand,   .cd-navbar-top .cd-navbar-brand .navbar-brand:hover{color:#eee;height:auto;padding:0}  .cd-navbar-top .cd-navbar-brand .navbar-brand>img{height:25px}  .cd-navbar-top .cd-navbar-brand .navbar-toggler{border:0}  .cd-navbar-top .cd-navbar-brand .navbar-toggler:focus,   .cd-navbar-top .cd-navbar-brand .navbar-toggler:hover{outline:0}  .cd-navbar-top .cd-navbar-brand .navbar-toggler .fa-navicon{color:#eee}  .cd-navbar-top .cd-navbar-brand .navbar-collapse{padding:0}  .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>.active>a{color:#eee;background-color:#2b99a8}  .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a,   .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:focus,   .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:hover{color:#eee;border-color:transparent;background-color:transparent}  .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown]>a,   .cd-navbar-top .navbar-nav>li>.cd-navbar>a,   .cd-navbar-top .navbar-nav>li>a{color:#eee;line-height:1;padding:13.5px 18px!important;position:relative;display:block;text-decoration:none}  .cd-navbar-top .navbar-nav .nav-link,   .cd-navbar-top .navbar-nav .nav-link:hover{color:#eee}  .cd-navbar-top .navbar-nav>li:hover,   .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown].open>a,   .cd-navbar-top .navbar-nav>li>.cd-navbar>[dropdown]>a:hover,   .cd-navbar-top .navbar-nav>li>.cd-navbar>a:hover,   .cd-navbar-top .navbar-nav>li>a:hover{background-color:#2b99a8}  .cd-navbar-top .navbar-nav>.open>.cd-navbar>[dropdown]>a,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>[dropdown]>a:hover,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:focus,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:hover,   .cd-navbar-top .navbar-nav>.open>.cd-navbar>li>a:focus,   .cd-navbar-top .navbar-nav>.open>a,   .cd-navbar-top .navbar-nav>.open>a:focus,   .cd-navbar-top .navbar-nav>.open>a:hover{color:#eee;border-color:transparent;background-color:transparent}@media (min-width:768px){  .cd-navbar-top .cd-navbar-utility{border-bottom:0;position:absolute;right:0;top:0;font-size:1.1rem}}@media (max-width:calc(768px - 1px)){  .cd-navbar-top .navbar-nav{margin:0}  .cd-navbar-top .navbar-nav .fa{margin-right:.5em}  .cd-navbar-top .navbar-nav .open .dropdown-menu{border:0;padding-top:0;padding-bottom:0;background-color:#2b99a8}  .cd-navbar-top .navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 35px;color:#eee}  .cd-navbar-top .navbar-nav .open .dropdown-menu>.active>a{background-color:#2b99a8}  .cd-navbar-top .navbar-nav>li>a:hover{background-color:#2b99a8}}.cd-navbar-primary[_ngcontent-%COMP%]   .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:focus, .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover{color:#eee!important;background-color:#2b99a8!important;border:0!important}.wrapper[_ngcontent-%COMP%]{display:flex;width:100%}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]{width:200px;top:43px;background:#374249;overflow-y:auto;position:fixed;bottom:0;left:0;z-index:999;color:#fff;transition:all .3s}.wrapper[_ngcontent-%COMP%]   #sidebar.active[_ngcontent-%COMP%]{margin-left:-200px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul.component[_ngcontent-%COMP%]{padding:20px 0;margin:0}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{color:#fff;padding:10px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{padding:10px;font-size:1.1em;display:block;color:#fff;text-decoration:none}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:hover{color:#fff;background:#2b99a8}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%] > .badge[_ngcontent-%COMP%]{margin-left:5px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li.active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]   a[aria-expanded=true][_ngcontent-%COMP%]{color:#fff}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]{position:relative}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]::after{position:absolute;right:20px;content:"";font-family:ForkAwesome;border:0;font-size:1rem;transition:transform .3s ease-in-out}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[aria-expanded=true][_ngcontent-%COMP%]::after{transform:rotate(90deg)}.wrapper[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{font-size:.9em!important;padding-left:30px!important;background:#4d5c66}.wrapper[_ngcontent-%COMP%]   .cd-navbar-primary[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:focus{outline:0}.wrapper[_ngcontent-%COMP%]   ngx-simplebar[_ngcontent-%COMP%]{height:100%}#content[_ngcontent-%COMP%]{width:calc(100% - 200px);transition:all .3s;position:absolute;top:43px;bottom:0;right:0}#content.active[_ngcontent-%COMP%]{width:100vw}.top-notification-1[_nghost-%COMP%]   .cd-navbar-top[_ngcontent-%COMP%]   .cd-navbar-brand[_ngcontent-%COMP%]{top:37.6px}.top-notification-1[_nghost-%COMP%]   #sidebar[_ngcontent-%COMP%]{top:80.6px}.top-notification-1[_nghost-%COMP%]   #content[_ngcontent-%COMP%]{top:80.6px}.top-notification-1[_nghost-%COMP%]   cd-notifications-sidebar[_ngcontent-%COMP%]{top:90.6px}.top-notification-2[_nghost-%COMP%]   .cd-navbar-top[_ngcontent-%COMP%]   .cd-navbar-brand[_ngcontent-%COMP%]{top:75.2px}.top-notification-2[_nghost-%COMP%]   #sidebar[_ngcontent-%COMP%]{top:118.2px}.top-notification-2[_nghost-%COMP%]   #content[_ngcontent-%COMP%]{top:118.2px}.top-notification-2[_nghost-%COMP%]   cd-notifications-sidebar[_ngcontent-%COMP%]{top:128.2px}']],data:{}});function en(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function nn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function an(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"cd-language-selector",[["class","cd-navbar"]],null,null,null,ct,it)),s["ɵdid"](2,114688,null,0,at,[rt.l,tt],null,null),(t()(),s["ɵeld"](3,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"cd-notifications",[["class","cd-navbar"]],null,null,null,yt,mt)),s["ɵdid"](5,245760,null,0,bt,[gt.a,pt.a],null,null),(t()(),s["ɵeld"](6,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"cd-dashboard-help",[["class","cd-navbar"]],null,null,null,Mt,Dt)),s["ɵdid"](8,114688,null,0,Et,[Lt.b,vt.a,xt.a],null,null),(t()(),s["ɵeld"](9,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,1,"cd-administration",[["class","cd-navbar"]],null,null,null,Yt,Ft)),s["ɵdid"](11,114688,null,0,jt,[vt.a],null,null),(t()(),s["ɵeld"](12,0,null,null,2,"li",[["class","nav-item "]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"cd-identity",[["class","cd-navbar"]],null,null,null,Zt,Wt)),s["ɵdid"](14,114688,null,0,Ut,[vt.a,Ht.a],null,null)],(function(t,e){t(e,2,0),t(e,5,0),t(e,8,0),t(e,11,0),t(e,14,0)}),null)}function rn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_hosts"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,5,{links:1}),s["ɵqud"](603979776,6,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/hosts"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[6,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Hosts"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/hosts")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function sn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_inventory"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,7,{links:1}),s["ɵqud"](603979776,8,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/inventory"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[8,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Inventory"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/inventory")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function on(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_monitor"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,9,{links:1}),s["ɵqud"](603979776,10,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/monitor/"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[10,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Monitors"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/monitor/")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function un(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_cluster_services"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,11,{links:1}),s["ɵqud"](603979776,12,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/services/"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[12,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Services"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/services/")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function ln(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_osds"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,13,{links:1}),s["ɵqud"](603979776,14,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/osd"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[14,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["OSDs"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/osd")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function dn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_configuration"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,15,{links:1}),s["ɵqud"](603979776,16,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/configuration"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[16,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Configuration"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/configuration")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function cn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_crush"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,17,{links:1}),s["ɵqud"](603979776,18,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/crush-map"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[18,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["CRUSH map"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/crush-map")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function fn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_modules"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,19,{links:1}),s["ɵqud"](603979776,20,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/mgr-modules"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[20,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Manager modules"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/mgr-modules")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function hn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_log"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,21,{links:1}),s["ɵqud"](603979776,22,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/logs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[22,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Logs"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/logs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function gn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-danger"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.component.prometheusAlertService.alerts.length)}))}function pn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"li",[["class","tc_submenuitem tc_submenuitem_monitoring"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,23,{links:1}),s["ɵqud"](603979776,24,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,5,"a",[["routerLink","/monitoring"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[24,4],[4,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Monitoring"])),(t()(),s["ɵand"](16777216,null,null,1,null,gn)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,5,0,"/monitoring"),t(e,9,0,n.prometheusAlertService.alerts.length>0)}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function bn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,28,"li",[["class","nav-item tc_menuitem_cluster"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,3,{links:1}),s["ɵqud"](603979776,4,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("cluster")&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster"])),(t()(),s["ɵeld"](7,0,null,null,21,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](8,8404992,null,0,Xt,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rn)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sn)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,on)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,un)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ln)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dn)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cn)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fn)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hn)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,pn)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,8,0,!0,"cluster"!==n.displayedSubMenu),t(e,10,0,n.permissions.hosts.read),t(e,12,0,n.permissions.hosts.read),t(e,14,0,n.permissions.monitor.read),t(e,16,0,n.permissions.hosts.read),t(e,18,0,n.permissions.osd.read),t(e,20,0,n.permissions.configOpt.read),t(e,22,0,n.permissions.osd.read),t(e,24,0,n.permissions.configOpt.read),t(e,26,0,n.permissions.log.read),t(e,28,0,n.permissions.prometheus.read)}),(function(t,e){t(e,4,0,"cluster"==e.component.displayedSubMenu),t(e,7,0,s["ɵnov"](e,8).isCollapse,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isCollapsed,s["ɵnov"](e,8).isCollapsing)}))}function mn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_pool"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,25,{links:1}),s["ɵqud"](603979776,26,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/pool"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[26,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Pools"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/pool")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function yn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_block_images"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,29,{links:1}),s["ɵqud"](603979776,30,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/block/rbd"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[30,4],[28,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Images"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/block/rbd")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function vn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-warning"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.summaryData?null:null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)}))}function xn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"small",[["class","badge badge-danger"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){var n=e.component;t(e,1,0,null==n.summaryData?null:null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors)}))}function _n(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"li",[["class","tc_submenuitem tc_submenuitem_block_mirroring"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,31,{links:1}),s["ɵqud"](603979776,32,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,7,"a",[["routerLink","/block/mirroring"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[32,4],[28,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Mirroring"])),(t()(),s["ɵand"](16777216,null,null,1,null,vn)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xn)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,5,0,"/block/mirroring"),t(e,9,0,0!==(null==n.summaryData?null:null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)),t(e,11,0,0!==(null==n.summaryData?null:null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors))}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function Tn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_block_iscsi"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,33,{links:1}),s["ɵqud"](603979776,34,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["routerLink","/block/iscsi"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[34,4],[28,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["iSCSI"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/block/iscsi")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function On(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,16,"li",[["class","nav-item tc_menuitem_block"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,27,{links:1}),s["ɵqud"](603979776,28,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,4,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("block")&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),(t()(),s["ɵeld"](7,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Block"])),(t()(),s["ɵeld"](9,0,null,null,7,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](10,8404992,null,0,Xt,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yn)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_n)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tn)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,6,0,n.blockHealthColor()),t(e,10,0,!0,"block"!==n.displayedSubMenu),t(e,12,0,n.permissions.rbdImage.read&&e.parent.context.ngIf.rbd),t(e,14,0,n.permissions.rbdMirroring.read&&e.parent.context.ngIf.mirroring),t(e,16,0,n.permissions.iscsi.read&&e.parent.context.ngIf.iscsi)}),(function(t,e){t(e,4,0,"block"==e.component.displayedSubMenu),t(e,9,0,s["ɵnov"](e,10).isCollapse,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isExpanded,s["ɵnov"](e,10).isCollapsed,s["ɵnov"](e,10).isCollapsing)}))}function wn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_nfs"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,35,{links:1}),s["ɵqud"](603979776,36,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/nfs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[36,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["NFS"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/nfs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function Sn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[["class","nav-item tc_menuitem_cephfs"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,37,{links:1}),s["ɵqud"](603979776,38,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["class","nav-link"],["routerLink","/cephfs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](5,671744,[[38,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Filesystems"]))],(function(t,e){t(e,1,0,"active"),t(e,5,0,"/cephfs")}),(function(t,e){t(e,4,0,s["ɵnov"](e,5).target,s["ɵnov"](e,5).href)}))}function In(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"li",[["class","nav-item tc_menuitem_rgw"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](1,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,39,{links:1}),s["ɵqud"](603979776,40,{linksWithHrefs:1}),(t()(),s["ɵeld"](4,0,null,null,2,"a",[["aria-controls","collapseBasic"],["class","nav-link dropdown-toggle"]],[[1,"aria-expanded",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleSubMenu("rgw")&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway"])),(t()(),s["ɵeld"](7,0,null,null,22,"ul",[["class","list-unstyled"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](8,8404992,null,0,Xt,[s.ElementRef,s.Renderer2,K.b],{isAnimated:[0,"isAnimated"],collapse:[1,"collapse"]},null),(t()(),s["ɵeld"](9,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_daemons"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](10,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,41,{links:1}),s["ɵqud"](603979776,42,{linksWithHrefs:1}),(t()(),s["ɵeld"](13,0,null,null,2,"a",[["routerLink","/rgw/daemon"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,14).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](14,671744,[[42,4],[40,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Daemons"])),(t()(),s["ɵeld"](16,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_users"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](17,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,43,{links:1}),s["ɵqud"](603979776,44,{linksWithHrefs:1}),(t()(),s["ɵeld"](20,0,null,null,2,"a",[["routerLink","/rgw/user"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,21).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](21,671744,[[44,4],[40,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Users"])),(t()(),s["ɵeld"](23,0,null,null,6,"li",[["class","tc_submenuitem tc_submenuitem_rgw_buckets"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](24,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,45,{links:1}),s["ɵqud"](603979776,46,{linksWithHrefs:1}),(t()(),s["ɵeld"](27,0,null,null,2,"a",[["routerLink","/rgw/bucket"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,28).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](28,671744,[[46,4],[40,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Buckets"]))],(function(t,e){var n=e.component;t(e,1,0,"active"),t(e,8,0,!0,"rgw"!==n.displayedSubMenu),t(e,10,0,"active"),t(e,14,0,"/rgw/daemon"),t(e,17,0,"active"),t(e,21,0,"/rgw/user"),t(e,24,0,"active"),t(e,28,0,"/rgw/bucket")}),(function(t,e){t(e,4,0,"rgw"==e.component.displayedSubMenu),t(e,7,0,s["ɵnov"](e,8).isCollapse,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isExpanded,s["ɵnov"](e,8).isCollapsed,s["ɵnov"](e,8).isCollapsing),t(e,13,0,s["ɵnov"](e,14).target,s["ɵnov"](e,14).href),t(e,20,0,s["ɵnov"](e,21).target,s["ɵnov"](e,21).href),t(e,27,0,s["ɵnov"](e,28).target,s["ɵnov"](e,28).href)}))}function Nn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,28,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,15,"li",[["class","nav-item tc_menuitem_dashboard"],["routerLinkActive","active"]],null,null,null,null,null)),s["ɵdid"](2,1720320,null,2,qt.o,[qt.m,s.ElementRef,s.Renderer2,[2,qt.n],[2,qt.p]],{routerLinkActive:[0,"routerLinkActive"]},null),s["ɵqud"](603979776,1,{links:1}),s["ɵqud"](603979776,2,{linksWithHrefs:1}),(t()(),s["ɵeld"](5,0,null,null,11,"a",[["class","nav-link"],["routerLink","/dashboard"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](6,671744,[[2,4]],0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](7,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Dashboard"])),(t()(),s["ɵted"](-1,null,["  "])),(t()(),s["ɵeld"](10,0,null,null,6,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](12,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](13,1),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](15,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](16,1),(t()(),s["ɵand"](16777216,null,null,1,null,bn)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,mn)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,On)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wn)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sn)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,In)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,"active"),t(e,6,0,"/dashboard");var a=t(e,13,0,n.icons.health);t(e,12,0,a);var r=s["ɵunv"](e,15,0,t(e,16,0,s["ɵnov"](e.parent.parent,0),null==n.summaryData?null:n.summaryData.health_status));t(e,15,0,r),t(e,18,0,n.permissions.hosts.read||n.permissions.monitor.read||n.permissions.osd.read||n.permissions.configOpt.read||n.permissions.log.read||n.permissions.prometheus.read),t(e,20,0,n.permissions.pool.read),t(e,22,0,(n.permissions.rbdImage.read||n.permissions.rbdMirroring.read||n.permissions.iscsi.read)&&(e.context.ngIf.rbd||e.context.ngIf.mirroring||e.context.ngIf.iscsi)),t(e,24,0,n.permissions.nfs.read&&e.context.ngIf.nfs),t(e,26,0,n.permissions.cephfs.read&&e.context.ngIf.cephfs),t(e,28,0,n.permissions.rgw.read&&e.context.ngIf.rgw)}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).target,s["ɵnov"](e,6).href)}))}function Cn(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,2,null,Nn)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpid"](131072,i.AsyncPipe,[s.ChangeDetectorRef]),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,1,0,s["ɵunv"](e,1,0,s["ɵnov"](e,2).transform(n.enabledFeature$)))}),null)}function Rn(t){return s["ɵvid"](0,[s["ɵpid"](0,ee,[]),(t()(),s["ɵeld"](1,0,null,null,1,"cd-pwd-expiration-notification",[],null,null,null,ce,oe)),s["ɵdid"](2,245760,null,0,se,[re.a,vt.a],null,null),(t()(),s["ɵeld"](3,0,null,null,1,"cd-telemetry-notification",[],null,null,null,xe,ye)),s["ɵdid"](4,245760,null,0,be,[he,vt.a,Rt.a,gt.a,pe,me.a],null,null),(t()(),s["ɵeld"](5,0,null,null,1,"cd-notifications-sidebar",[],[[2,"active",null]],null,null,Je,Fe)),s["ɵdid"](6,245760,null,0,je,[gt.a,pt.a,qe.a,Me,vt.a,Pe,s.NgZone,s.ChangeDetectorRef],null,null),(t()(),s["ɵeld"](7,0,null,null,15,"div",[["class","cd-navbar-top"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,14,"nav",[["class","navbar fixed-top navbar-expand-md navbar-dark cd-navbar-brand"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"button",[["class","btn btn-link py-0"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=0!=(r.showMenuSidebar=!r.showMenuSidebar)&&a),a}),null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"i",[["aria-hidden","true"],["class","fa fa-bars fa-2x"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","navbar-brand ml-2"],["href","#"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,0,"img",[["alt","Ceph"],["src","assets/Ceph_Logo_Standard_RGB_White_120411_fa.png"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,4,"button",[["class","navbar-toggler"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=0!=(r.isCollapsed=!r.isCollapsed)&&a),a}),null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"span",[["class","sr-only"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Toggle navigation"])),(t()(),s["ɵeld"](16,0,null,null,1,"span",[["class",""]],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,0,"i",[["class","fa fa-navicon fa-lg"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,4,"div",[["class","collapse navbar-collapse"]],[[2,"collapse",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),s["ɵdid"](19,8404992,null,0,Xt,[s.ElementRef,s.Renderer2,K.b],{collapse:[0,"collapse"]},null),(t()(),s["ɵeld"](20,0,null,null,2,"ul",[["class","nav navbar-nav cd-navbar-utility my-2 my-md-0"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,en)),s["ɵdid"](22,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](23,0,null,null,14,"div",[["class","wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,8,"nav",[["id","sidebar"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](26,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](27,{active:0}),(t()(),s["ɵeld"](28,0,null,null,4,"ngx-simplebar",[["data-simplebar","init"]],null,null,null,Re,Ce)),s["ɵdid"](29,4440064,null,0,Ne.a,[s.ElementRef],{options:[0,"options"]},null),(t()(),s["ɵeld"](30,0,null,0,2,"ul",[["class","list-unstyled components cd-navbar-primary"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,nn)),s["ɵdid"](32,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](33,0,null,null,4,"div",[["id","content"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](35,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](36,{active:0}),s["ɵncd"](null,0),(t()(),s["ɵand"](0,[["cd_utilities",2]],null,0,null,an)),(t()(),s["ɵand"](0,[["cd_menu",2]],null,0,null,Cn))],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0),t(e,6,0),t(e,19,0,n.isCollapsed),t(e,22,0,s["ɵnov"](e,38));var a=t(e,27,0,!n.showMenuSidebar);t(e,26,0,a),t(e,29,0,n.simplebar),t(e,32,0,s["ɵnov"](e,39));var r=t(e,36,0,!n.showMenuSidebar);t(e,35,0,r)}),(function(t,e){t(e,5,0,s["ɵnov"](e,6).isSidebarOpened),t(e,18,0,s["ɵnov"](e,19).isCollapse,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isExpanded,s["ɵnov"](e,19).isCollapsed,s["ɵnov"](e,19).isCollapsing)}))}var An=n("LRne"),kn=n("HDdC"),En=n("Cfvw"),Ln=n("pLZG"),Dn=n("5+tZ"),Pn=n("l7GE"),Mn=n("ZUHj");class qn{constructor(t,e){this.keySelector=t,this.flushes=e}call(t,e){return e.subscribe(new jn(t,this.keySelector,this.flushes))}}class jn extends Pn.a{constructor(t,e,n){super(t),this.keySelector=e,this.values=new Set,n&&this.add(Object(Mn.a)(this,n))}notifyNext(t,e,n,a,r){this.values.clear()}notifyError(t,e){this._error(t)}_next(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)}_useKeySelector(t){let e;const{destination:n}=this;try{e=this.keySelector(t)}catch(a){return void n.error(a)}this._finalizeNext(e,t)}_finalizeNext(t,e){const{values:n}=this;n.has(t)||(n.add(t),this.destination.next(e))}}var Fn=n("128B");function Gn(t,e,n){return 0===n?[e]:(t.push(e),t)}function Vn(){return Object(Fn.a)(Gn,[])}var zn=n("SxV6"),Bn=n("GyhO");class Yn{resolve(t){const e=t.routeConfig.data,n=null===e.path?null:this.getFullPath(t),a=[{text:"string"==typeof e.breadcrumbs?e.breadcrumbs:e.breadcrumbs.text||e.text||n,path:n}];return Object(An.a)(a)}getFullPath(t){return t.pathFromRoot.reduce((t,e)=>t+e.url.reduce((t,e)=>t+"/"+e.path,""),"")}}class Hn{constructor(t,e){this.router=t,this.injector=e,this.crumbs=[],this.finished=!1,this.defaultResolver=new Yn,this.subscription=this.router.events.pipe(Object(Ln.a)(t=>t instanceof qt.e)).subscribe(()=>{this.finished=!1}),this.subscription=this.router.events.pipe(Object(Ln.a)(t=>t instanceof qt.d)).subscribe(()=>{var e;this._resolveCrumbs(t.routerState.snapshot.root).pipe(Object(Dn.a)(t=>t),(e=t=>t.text,t=>t.lift(new qn(e,void 0))),Vn(),Object(Dn.a)(t=>{const e=this.postProcess(t);return this.wrapIntoObservable(e).pipe(Object(zn.a)())})).subscribe(t=>{this.finished=!0,this.crumbs=t})})}ngOnDestroy(){this.subscription.unsubscribe()}_resolveCrumbs(t){let e;const n=t.routeConfig&&t.routeConfig.data;if(n&&n.breadcrumbs){let a;a=n.breadcrumbs.prototype instanceof Yn?this.injector.get(n.breadcrumbs):this.defaultResolver;const r=a.resolve(t);e=this.wrapIntoObservable(r).pipe(Object(zn.a)())}else e=Object(An.a)([]);return t.firstChild&&(e=e.pipe(function(...t){return e=>e.lift.call(Object(Bn.a)(e,...t))}(this._resolveCrumbs(t.firstChild)))),e}postProcess(t){const e=[];return t.forEach(t=>{const n=t.text.split("/");if(n.length>1){t.text=n[n.length-1];for(let t=0;t<n.length-1;t++)e.push({text:n[t],path:null})}e.push(t)}),e}isPromise(t){return t&&"function"==typeof t.then}wrapIntoObservable(t){return t instanceof kn.a?t:this.isPromise(t)?Object(En.a)(Promise.resolve(t)):Object(An.a)(t)}}var Un=s["ɵcrt"]({encapsulation:0,styles:[['@charset "UTF-8";.breadcrumb[_ngcontent-%COMP%]{padding:8px 0;background-color:transparent;border-radius:0;margin-top:8px}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]:before{padding:0 5px 0 7px;color:#474544;font-family:ForkAwesome;content:""}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:#474544}']],data:{}});function Wn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"a",[["preserveFragment",""]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{preserveFragment:[0,"preserveFragment"],routerLink:[1,"routerLink"]},null),(t()(),s["ɵted"](2,null,["",""]))],(function(t,e){t(e,1,0,"",e.parent.context.$implicit.path)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,2,0,e.parent.context.$implicit.text)}))}function Kn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.text)}))}function $n(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"li",[["class","breadcrumb-item"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](3,{active:0}),(t()(),s["ɵand"](16777216,null,null,1,null,Wn)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kn)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=t(e,3,0,e.context.last&&e.component.finished);t(e,2,0,"breadcrumb-item",n),t(e,5,0,!e.context.last&&null!==e.context.$implicit.path),t(e,7,0,e.context.last||null===e.context.$implicit.path)}),null)}function Zn(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"ol",[["class","breadcrumb"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,$n)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.crumbs)}),null)}function Jn(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Zn)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.crumbs.length)}),null)}var Qn=n("978R"),Xn=n("VXsX");const ta=()=>Object.assign(new Qn.a,{container:"body"});class ea{constructor(t,e,n){this.router=t,this.summaryService=e,this.taskManagerService=n,this.subs=new ft.a}ngOnInit(){this.subs.add(this.summaryService.startPolling()),this.subs.add(this.taskManagerService.init(this.summaryService))}ngOnDestroy(){this.subs.unsubscribe()}isDashboardPage(){return"/dashboard"===this.router.url}}var na=s["ɵcrt"]({encapsulation:0,styles:[[".dashboard[_ngcontent-%COMP%]{background-color:#f5f5f5;margin:0;padding:0}.container-fluid[_ngcontent-%COMP%]{overflow:auto}  #toast-container{margin-top:2vw}@media (max-width:1600px){  #toast-container{margin-top:2.5vw}}@media (max-width:calc(992px - 1px)){  #toast-container{margin-top:9vw}}@media (max-width:900px){  #toast-container{margin-top:10vw}}@media (max-width:319px){  #toast-container{margin-top:11vw}}@media (max-width:260px){  #toast-container{margin-top:14vw}}"]],data:{}});function aa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"block-ui",[],null,null,null,P,D)),s["ɵdid"](1,114688,null,0,I,[S],null,null),(t()(),s["ɵeld"](2,0,null,0,9,"cd-navigation",[],[[8,"className",0]],null,null,Rn,tn)),s["ɵdid"](3,245760,null,0,Xe,[vt.a,pt.a,Qe.a,pe,Pe],null,null),(t()(),s["ɵeld"](4,0,null,0,7,"div",[["class","container-fluid h-100"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{dashboard:0}),(t()(),s["ɵeld"](8,0,null,null,1,"cd-breadcrumbs",[],null,null,null,Jn,Un)),s["ɵdid"](9,180224,null,0,Hn,[qt.m,s.Injector],null,null),(t()(),s["ɵeld"](10,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](11,212992,null,0,qt.r,[qt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){var n=e.component;t(e,1,0),t(e,3,0);var a=t(e,7,0,n.isDashboardPage());t(e,6,0,"container-fluid h-100",a),t(e,11,0)}),(function(t,e){t(e,2,0,s["ɵnov"](e,3).class)}))}function ra(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-workbench-layout",[],null,null,null,aa,na)),s["ɵprd"](5120,null,Qn.a,ta,[]),s["ɵdid"](2,245760,null,0,ea,[qt.m,pt.a,Xn.a],null,null)],(function(t,e){t(e,2,0)}),null)}var ia=s["ɵccf"]("cd-workbench-layout",ea,ra,{},{},[]),sa=n("pKUh"),oa=n("2ZVE"),ua=n("KOzp"),la=n("2uy1");class da{constructor(){this.cardClass=""}}var ca=s["ɵcrt"]({encapsulation:0,styles:[[".card[_ngcontent-%COMP%]{height:100%;border:.5px solid #ddd;border-radius:3px;box-shadow:0 1px 1px rgba(3,3,3,.175);font-size:12px}@media screen and (min-width:320px){.card[_ngcontent-%COMP%]{font-size:calc(12px + 9 * ((100vw - 320px)/ 1728))}}@media screen and (min-width:2048px){.card[_ngcontent-%COMP%]{font-size:21px}}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]{padding-top:40px!important}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%]{position:absolute;left:0;top:0}.no-center[_ngcontent-%COMP%]{position:unset;top:unset;left:unset;transform:unset}.content-highlight[_ngcontent-%COMP%]{font-weight:700}"]],data:{}});function fa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](2,null,["",""]))],(function(t,e){t(e,1,0,e.component.link)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,2,0,n.cardTitle)}))}function ha(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" "," "]))],null,(function(t,e){t(e,0,0,e.component.cardTitle)}))}function ga(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"div",[["class","card"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),s["ɵeld"](3,0,null,null,8,"div",[["class","card-body d-flex align-items-center justify-content-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"h5",[["class","card-title m-4"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,fa)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noLinkTitle",2]],null,0,null,ha)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-text text-center"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](10,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵncd"](null,0)],(function(t,e){var n=e.component;t(e,2,0,"card",n.cardClass),t(e,6,0,n.link,s["ɵnov"](e,7)),t(e,10,0,"card-text text-center",n.contentClass)}),null)}class pa{}var ba=s["ɵcrt"]({encapsulation:0,styles:[[".info-group-title[_ngcontent-%COMP%]{margin:0 0 .5vw .5vw;font-size:21px}"]],data:{}});function ma(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","info-group-title"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),(t()(),s["ɵeld"](3,0,null,null,1,"div",[["class","row"]],null,null,null,null,null)),s["ɵncd"](null,0)],null,(function(t,e){t(e,2,0,e.component.groupTitle)}))}var ya=n("hrfs"),va=n("MO+k"),xa=n("NEZu"),_a=n("Fgil"),Ta=n("o4+5"),Oa=function(t){return t.DEFAULT_RED="#ff7592",t.DEFAULT_BLUE="#1d699d",t.DEFAULT_ORANGE="#ffa500",t.DEFAULT_MAGENTA="#564d65",t.DEFAULT_GREEN="#00bb00",t}({});class wa{constructor(t,e){this.dimlessBinary=t,this.dimless=e,this.config={},this.isBytesData=!1,this.showLabelAsTooltip=!1,this.prepareFn=new s.EventEmitter,this.chartConfig={chartType:"pie",dataset:[{label:null,borderWidth:0}],options:{legend:{display:!0,position:"right",labels:{usePointStyle:!0},onClick:(t,e)=>{this.onLegendClick(t,e)}},animation:{duration:0},tooltips:{enabled:!1},title:{display:!1}}},this.hiddenSlices=[]}ngOnInit(){va.pluginService.register({beforeDraw:function(t){if(!t.options.center_text)return;const e=t.chart.width,n=t.chart.height,a=t.chart.ctx;a.restore();const r=(n/114).toFixed(2);a.font=r+"em sans-serif",a.textBaseline="middle";const i=t.options.center_text,s=Math.round((e-a.measureText(i).width)/2);a.fillText(i,s,n/2),a.save()}});const t=new xa.a(this.chartCanvasRef,this.chartTooltipRef,(t,e)=>e+t.caretX+"px",(t,e)=>e+t.caretY-t.height-10+"px");t.getBody=t=>this.getChartTooltipBody(t),this.chartConfig.options.tooltips.custom=e=>{t.customTooltips(e)},this.chartConfig.colors=[{backgroundColor:[Oa.DEFAULT_RED,Oa.DEFAULT_BLUE,Oa.DEFAULT_ORANGE,Oa.DEFAULT_GREEN,Oa.DEFAULT_MAGENTA]}],J.merge(this.chartConfig,this.config),this.prepareFn.emit([this.chartConfig,this.data])}ngOnChanges(){this.prepareFn.emit([this.chartConfig,this.data]),this.hideSlices(),this.setChartSliceBorderWidth()}getChartTooltipBody(t){const e=t[0].split(": ");return this.showLabelAsTooltip?e[0]:(e[1]=this.isBytesData?this.dimlessBinary.transform(e[1]):this.dimless.transform(e[1]),e.join(": "))}setChartSliceBorderWidth(){let t=0;J.forEach(this.chartConfig.dataset[0].data,(function(e){e>0&&(t+=1)})),this.chartConfig.dataset[0].borderWidth=t>1?1:0}onLegendClick(t,e){t.stopPropagation(),this.hiddenSlices[e.index]=!e.hidden,this.ngOnChanges()}hideSlices(){J.forEach(this.chartConfig.dataset[0].data,(t,e)=>{this.hiddenSlices[e]&&(this.chartConfig.dataset[0].data[e]=void 0)})}}var Sa=s["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto;cursor:pointer;overflow:visible;position:unset;width:100%;height:100%}.chart-canvas[_ngcontent-%COMP%]{position:unset;width:100%;height:100%;margin-left:auto;margin-right:auto;max-width:100%;max-height:100%}']],data:{}});function Ia(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{chartCanvasRef:0}),s["ɵqud"](402653184,2,{chartTooltipRef:0}),(t()(),s["ɵeld"](2,0,null,null,4,"div",[["class","chart-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,[[1,0],["chartCanvas",1]],null,1,"canvas",[["baseChart",""],["class","chart-canvas"]],null,null,null,null,null)),s["ɵdid"](4,999424,null,0,ya.a,[s.ElementRef,ya.c],{datasets:[0,"datasets"],labels:[1,"labels"],options:[2,"options"],chartType:[3,"chartType"],colors:[4,"colors"]},null),(t()(),s["ɵeld"](5,0,[[2,0],["chartTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.chartConfig.dataset,n.chartConfig.labels,n.chartConfig.options,n.chartConfig.chartType,n.chartConfig.colors)}),null)}class Na{constructor(t){this.i18n=t}transform(t){return t?`${t.monmap.mons.length.toString()} (${this.i18n("quorum")} ${t.quorum.join(", ")})`:""}}class Ca{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e=0,n=0;J.each(t.osds,t=>{t.in&&e++,t.up&&n++});const a=[{content:`${t.osds.length} ${this.i18n("total")}`,class:""}];a.push({content:"",class:"card-text-line-break"}),a.push({content:`${n} ${this.i18n("up")}, ${e} ${this.i18n("in")}`,class:""});const r=t.osds.length-n,i=n-e;if(r>0||i>0){a.push({content:"",class:"card-text-line-break"});const t=r>0?`${r} ${this.i18n("down")}`:"",e=r>0&&i>0?", ":"",n=i>0?`${i} ${this.i18n("out")}`:"";a.push({content:`${t}${e}${n}`,class:"card-text-error"})}return a}}class Ra{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e=this.i18n("n/a");const n=J.isUndefined(t.active_name)?"":`${this.i18n("active daemon")}: ${t.active_name}`;n.length>0&&(e="1");const a=t.standbys.map(t=>t.name).join(", "),r=a?`${this.i18n("standby daemons")}: ${a}`:"",i=t.standbys.length,s=[{content:`${e} ${this.i18n("active")}`,class:"popover-info",titleText:n}];return s.push({content:"",class:"card-text-line-break",titleText:""}),s.push({content:`${i} ${this.i18n("standby")}`,class:"popover-info",titleText:r}),s}}class Aa{constructor(t){this.i18n=t}transform(t){if(!t)return"";let e="",n="",a=0,r=0,i=0;J.each(t.standbys,()=>{a+=1}),t.standbys&&!t.filesystems?(e=`${a} ${this.i18n("up")}`,n=this.i18n("no filesystems")):0===t.filesystems.length?e=this.i18n("no filesystems"):(J.each(t.filesystems,t=>{J.each(t.mdsmap.info,t=>{"up:standby-replay"===t.state?i+=1:r+=1})}),e=`${r} ${this.i18n("active")}`,n=`${a+i} ${this.i18n("standby")}`);const s=t.standbys.map(t=>t.name).join(", "),o=s?`${this.i18n("standby daemons")}: ${s}`:"",u=t.filesystems?t.filesystems.length:0,l=Object.values(u>0?t.filesystems[0].mdsmap.info:{}).map(t=>t.name).join(", ");let d=l?`${this.i18n("active daemon")}: ${l}`:"";!r&&u>0&&(d=`${i} ${this.i18n("standbyReplay")}`);const c=[{content:e,class:"popover-info",titleText:d}];return n&&(c.push({content:"",class:"card-text-line-break",titleText:""}),c.push({content:n,class:"popover-info",titleText:o})),c}}class ka{transform(t,e){return J.round(t,e)}}var Ea=n("aXbf");let La=(()=>{class t{constructor(t){this.http=t}getFullHealth(){return this.http.get("api/health/full")}getMinimalHealth(){return this.http.get("api/health/minimal")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();var Da=n("2Vo4"),Pa=n("D0XW"),Ma=n("Y7HM");function qa(t){const{subscriber:e,counter:n,period:a}=t;e.next(n),this.schedule({subscriber:e,counter:n+1,period:a},a)}let ja=(()=>{class t{constructor(t){this.ngZone=t,this.intervalDataSource=new Da.a(null),this.intervalData$=this.intervalDataSource.asObservable();const e=parseInt(sessionStorage.getItem("dashboard_interval"),10)||5e3;this.setRefreshInterval(e)}setRefreshInterval(t){this.intervalTime=t,sessionStorage.setItem("dashboard_interval",t.toString()),this.intervalSubscription&&this.intervalSubscription.unsubscribe(),this.ngZone.runOutsideAngular(()=>{this.intervalSubscription=function(t=0,e=Pa.a){return(!Object(Ma.a)(t)||t<0)&&(t=0),e&&"function"==typeof e.schedule||(e=Pa.a),new kn.a(n=>(n.add(e.schedule(qa,t,{subscriber:n,counter:0,period:t})),n))}(this.intervalTime).subscribe(()=>this.ngZone.run(()=>{this.intervalDataSource.next(this.intervalTime)}))})}getRefreshInterval(){return this.intervalTime}ngOnDestroy(){this.intervalSubscription&&this.intervalSubscription.unsubscribe()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](s.NgZone))},token:t,providedIn:"root"}),t})();var Fa=n("d+Og");class Ga{constructor(t,e,n,a,r,i,s,o){this.healthService=t,this.i18n=e,this.authStorageService=n,this.pgCategoryService=a,this.featureToggles=r,this.refreshIntervalService=i,this.dimlessBinary=s,this.dimless=o,this.interval=new ft.a,this.icons=ht.a,this.rawCapacityChartConfig={options:{title:{display:!0,position:"bottom"}}},this.objectsChartConfig={options:{title:{display:!0,position:"bottom"}},colors:[{backgroundColor:[Oa.DEFAULT_GREEN,Oa.DEFAULT_MAGENTA,Oa.DEFAULT_ORANGE,Oa.DEFAULT_RED]}]},this.pgStatusChartConfig={colors:[{backgroundColor:[Oa.DEFAULT_GREEN,Oa.DEFAULT_BLUE,Oa.DEFAULT_ORANGE,Oa.DEFAULT_RED]}]},this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){this.getHealth(),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth()})}ngOnDestroy(){this.interval.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(t=>{this.healthData=t})}prepareReadWriteRatio(t){const e=[],n=[],a=this.healthData.client_perf.write_op_per_sec+this.healthData.client_perf.read_op_per_sec;e.push(`${this.i18n("Writes")} (${this.calcPercentage(this.healthData.client_perf.write_op_per_sec,a)}%)`),n.push(this.healthData.client_perf.write_op_per_sec),e.push(`${this.i18n("Reads")} (${this.calcPercentage(this.healthData.client_perf.read_op_per_sec,a)}%)`),n.push(this.healthData.client_perf.read_op_per_sec),t.dataset[0].data=n,t.labels=e}prepareRawUsage(t,e){const n=this.calcPercentage(e.df.stats.total_bytes-e.df.stats.total_used_raw_bytes,e.df.stats.total_bytes),a=this.calcPercentage(e.df.stats.total_used_raw_bytes,e.df.stats.total_bytes);t.dataset[0].data=[e.df.stats.total_used_raw_bytes,e.df.stats.total_avail_bytes],t.labels=[`${this.dimlessBinary.transform(e.df.stats.total_used_raw_bytes)} ${this.i18n("Used")} (${a}%)`,`${this.dimlessBinary.transform(e.df.stats.total_bytes-e.df.stats.total_used_raw_bytes)} ${this.i18n("Avail.")} (${n}%)`],t.options.title.text=`${this.dimlessBinary.transform(e.df.stats.total_bytes)} ${this.i18n("total")}`}preparePgStatus(t,e){const n={};let a=0;J.forEach(e.pg_info.statuses,(t,e)=>{const r=this.pgCategoryService.getTypeByStates(e);J.isUndefined(n[r])&&(n[r]=0),n[r]+=t,a+=t}),t.dataset[0].data=this.pgCategoryService.getAllTypes().map(t=>n[t]),t.labels=[`${this.i18n("Clean")} (${this.calcPercentage(n.clean,a)}%)`,`${this.i18n("Working")} (${this.calcPercentage(n.working,a)}%)`,`${this.i18n("Warning")} (${this.calcPercentage(n.warning,a)}%)`,`${this.i18n("Unknown")} (${this.calcPercentage(n.unknown,a)}%)`]}prepareObjects(t,e){const n=e.pg_info.object_stats.num_object_copies,a=n-e.pg_info.object_stats.num_objects_misplaced-e.pg_info.object_stats.num_objects_degraded-e.pg_info.object_stats.num_objects_unfound;t.labels=[`${this.i18n("Healthy")} (${this.calcPercentage(a,n)}%)`,`${this.i18n("Misplaced")} (${this.calcPercentage(e.pg_info.object_stats.num_objects_misplaced,n)}%)`,`${this.i18n("Degraded")} (${this.calcPercentage(e.pg_info.object_stats.num_objects_degraded,n)}%)`,`${this.i18n("Unfound")} (${this.calcPercentage(e.pg_info.object_stats.num_objects_unfound,n)}%)`],t.dataset[0].data=[a,e.pg_info.object_stats.num_objects_misplaced,e.pg_info.object_stats.num_objects_degraded,e.pg_info.object_stats.num_objects_unfound],t.options.title.text=`${this.dimless.transform(e.pg_info.object_stats.num_objects)} ${this.i18n("total")} (${this.dimless.transform(n)} ${this.i18n("replicas")})`,t.options.maintainAspectRatio=window.innerWidth>=375}isClientReadWriteChartShowable(){return(this.healthData.client_perf.read_op_per_sec||0)+(this.healthData.client_perf.write_op_per_sec||0)>0}calcPercentage(t,e){return J.isNumber(t)&&J.isNumber(e)&&0!==e?Math.round(t/e*100):0}}var Va=s["ɵcrt"]({encapsulation:0,styles:[['cd-info-card[_ngcontent-%COMP%]{padding:0 .5vw}  .pg-status-popover-wrapper{position:relative}  .pg-status-popover-wrapper .popover{position:absolute;width:116%;max-height:20vh;min-width:unset!important;max-width:unset!important}  .pg-status-popover-wrapper .popover .popover-body{max-width:100%;max-height:19vh;font-size:12px}.logs-link[_ngcontent-%COMP%]{text-align:center}.card-text-error[_ngcontent-%COMP%]{display:inline;color:red}.card-text-line-break[_ngcontent-%COMP%]:after{content:"\\a";white-space:pre}.popover-info[_ngcontent-%COMP%]:hover{cursor:pointer}']],data:{}});function za(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Ba(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"li",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](4,1),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵted"](6,null,[": "," "]))],(function(t,e){var n=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent.parent.parent.parent,0),e.context.$implicit.severity));t(e,3,0,n)}),(function(t,e){t(e,5,0,e.context.$implicit.type),t(e,6,0,e.context.$implicit.summary.message)}))}function Ya(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,za)),s["ɵdid"](1,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](2,0,null,null,2,"ul",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ba)),s["ɵdid"](4,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e.parent.parent.parent.parent,7)),t(e,4,0,n.healthData.health.checks)}),null)}function Ha(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵand"](0,[["healthChecks",2]],null,0,null,Ya)),(t()(),s["ɵeld"](2,16777216,null,null,5,"div",[["class","info-card-content-clickable"],["container","body"],["containerClass","info-card-popover-cluster-status"],["placement","bottom"],["triggers",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,6).toggle()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](5,1),s["ɵdid"](6,212992,[["healthChecksTarget",4]],0,ua.c,[ua.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,la.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"],container:[3,"container"],containerClass:[4,"containerClass"]},null),(t()(),s["ɵted"](7,null,[" "," "])),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component,a=s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent.parent,0),n.healthData.health.status));t(e,4,0,a),t(e,6,0,s["ɵnov"](e,1),"bottom","","body","info-card-popover-cluster-status")}),(function(t,e){t(e,7,0,e.component.healthData.health.status)}))}function Ua(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null),s["ɵppd"](4,1),(t()(),s["ɵted"](5,null,[" "," "]))],(function(t,e){var n=e.component,a=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent.parent,0),n.healthData.health.status));t(e,3,0,a)}),(function(t,e){t(e,5,0,e.component.healthData.health.status)}))}function Wa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-info-card",[["cardTitle","Cluster Status"],["class","cd-status-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ha)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ua)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Cluster Status","content-highlight"),t(e,3,0,(null==n.healthData.health?null:null==n.healthData.health.checks?null:n.healthData.health.checks.length)>0),t(e,5,0,!(null!=n.healthData.health&&null!=n.healthData.health.checks&&n.healthData.health.checks.length))}),null)}function Ka(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Monitors"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/monitor"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"Monitors","/monitor","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,1),n.healthData.mon_status));t(e,2,0,a)}))}function $a(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,3,0,e.context.$implicit.content)}))}function Za(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","OSDs"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/osd"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,$a)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,"OSDs","/osd","content-highlight"),t(e,3,0,e.context.ngIf)}),null)}function Ja(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,0,0,null!=e.context.$implicit.titleText?e.context.$implicit.titleText:""),t(e,3,0,e.context.$implicit.content)}))}function Qa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"cd-info-card",[["cardTitle","Manager Daemons"],["class","cd-status-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Ja)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵppd"](4,1)],(function(t,e){var n=e.component;t(e,1,0,"Manager Daemons","content-highlight");var a=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent.parent,3),n.healthData.mgr_map));t(e,3,0,a)}),null)}function Xa(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Hosts"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/hosts"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "]))],(function(t,e){t(e,1,0,"Hosts","/hosts","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.hosts)}))}function tr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Object Gateways"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/rgw/daemon"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "]))],(function(t,e){t(e,1,0,"Object Gateways","/rgw/daemon","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.rgw)}))}function er(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,e.context.$implicit.class)}),(function(t,e){t(e,0,0,null!=e.context.$implicit.titleText?e.context.$implicit.titleText:""),t(e,3,0,e.context.$implicit.content)}))}function nr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Metadata Servers"],["class","cd-status-card"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,er)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,1,0,"Metadata Servers",(e.context.ngIf.length>1?"text-area-size-2":"")+" content-highlight"),t(e,3,0,e.context.ngIf)}),null)}function ar(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"cd-info-card",[["cardTitle","iSCSI Gateways"],["class","cd-status-card"],["contentClass","content-highlight"],["link","/block/iscsi"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," total "])),(t()(),s["ɵeld"](3,0,null,0,0,"span",[["class","card-text-line-break"]],null,null,null,null,null)),(t()(),s["ɵted"](4,0,[" "," up, "])),(t()(),s["ɵeld"](5,0,null,0,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](8,{"card-text-error":0}),(t()(),s["ɵted"](9,null,[""," down"]))],(function(t,e){var n=e.component;t(e,1,0,"iSCSI Gateways","/block/iscsi","content-highlight");var a=t(e,8,0,n.healthData.iscsi_daemons.down>0);t(e,7,0,a)}),(function(t,e){var n=e.component;t(e,2,0,n.healthData.iscsi_daemons.up+n.healthData.iscsi_daemons.down),t(e,4,0,n.healthData.iscsi_daemons.up),t(e,9,0,n.healthData.iscsi_daemons.down)}))}function rr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,19,"cd-info-group",[["groupTitle","Status"]],null,null,null,ma,ba)),s["ɵdid"](1,49152,null,0,pa,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Wa)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ka)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Za)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](8,1),(t()(),s["ɵand"](16777216,null,0,1,null,Qa)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Xa)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,tr)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,nr)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵppd"](17,1),(t()(),s["ɵand"](16777216,null,0,1,null,ar)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Status"),t(e,3,0,null==n.healthData.health?null:n.healthData.health.status),t(e,5,0,n.healthData.mon_status);var a=s["ɵunv"](e,7,0,t(e,8,0,s["ɵnov"](e.parent.parent,2),n.healthData.osd_map));t(e,7,0,a),t(e,10,0,n.healthData.mgr_map),t(e,12,0,null!=n.healthData.hosts),t(e,14,0,e.parent.context.ngIf.rgw&&null!=n.healthData.rgw);var r=s["ɵunv"](e,16,0,t(e,17,0,s["ɵnov"](e.parent.parent,4),e.parent.context.ngIf.cephfs&&n.healthData.fs_map));t(e,16,0,r),t(e,19,0,e.parent.context.ngIf.iscsi&&null!=n.healthData.iscsi_daemons)}),null)}function ir(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Client IOPS"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,2)],(function(t,e){t(e,1,0,"Client IOPS","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,5),n.healthData.client_perf.read_op_per_sec+n.healthData.client_perf.write_op_per_sec,1));t(e,2,0,a)}))}function sr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Client Throughput"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"Client Throughput","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,6),n.healthData.client_perf.read_bytes_sec+n.healthData.client_perf.write_bytes_sec))+"/s";t(e,2,0,a)}))}function or(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareReadWriteRatio(n[0],n[1])&&a),a}),Ia,Sa)),s["ɵdid"](1,638976,null,0,wa,[_a.a,Ta.a],{data:[0,"data"]},{prepareFn:"prepareFn"})],(function(t,e){t(e,1,0,e.component.healthData)}),null)}function ur(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" N/A "]))],null,null)}function lr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-info-card",[["cardTitle","Client Read/Write"],["class","cd-performance-card"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,or)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ur)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Client Read/Write",n.isClientReadWriteChartShowable()?"content-chart":"content-highlight"),t(e,3,0,n.isClientReadWriteChartShowable()),t(e,5,0,!n.isClientReadWriteChartShowable())}),null)}function dr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Recovery Throughput"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"Recovery Throughput","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,6),n.healthData.client_perf.recovering_bytes_per_sec))+"/s";t(e,2,0,a)}))}function cr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Scrub"],["class","cd-performance-card"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "]))],(function(t,e){t(e,1,0,"Scrub","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.scrub_status)}))}function fr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"cd-info-group",[["groupTitle","Performance"]],null,null,null,ma,ba)),s["ɵdid"](1,49152,null,0,pa,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ir)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,sr)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,lr)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,dr)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,cr)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance"),t(e,3,0,n.healthData.client_perf),t(e,5,0,n.healthData.client_perf),t(e,7,0,n.healthData.client_perf),t(e,9,0,n.healthData.client_perf),t(e,11,0,n.healthData.scrub_status)}),null)}function hr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-info-card",[["cardTitle","Pools"],["class","cd-capacity-card order-md-1 order-lg-4 order-xl-1"],["contentClass","content-highlight"],["link","/pool"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],link:[1,"link"],contentClass:[2,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "]))],(function(t,e){t(e,1,0,"Pools","/pool","content-highlight")}),(function(t,e){t(e,2,0,e.component.healthData.pools.length)}))}function gr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Raw Capacity"],["class","cd-capacity-card order-md-3 order-lg-1 order-xl-2"],["contentClass","content-chart"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareRawUsage(n[0],n[1])&&a),a}),Ia,Sa)),s["ɵdid"](3,638976,null,0,wa,[_a.a,Ta.a],{data:[0,"data"],config:[1,"config"],isBytesData:[2,"isBytesData"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Raw Capacity","content-chart"),t(e,3,0,n.healthData,n.rawCapacityChartConfig,!0)}),null)}function pr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","Objects"],["class","cd-capacity-card order-md-4 order-lg-2 order-xl-3"],["contentClass","content-chart"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵeld"](2,0,null,0,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.prepareObjects(n[0],n[1])&&a),a}),Ia,Sa)),s["ɵdid"](3,638976,null,0,wa,[_a.a,Ta.a],{data:[0,"data"],config:[1,"config"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"Objects","content-chart"),t(e,3,0,n.healthData,n.objectsChartConfig)}),null)}function br(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-info-card",[["cardTitle","PGs per OSD"],["class","cd-capacity-card order-md-2 order-lg-5 order-xl-4"],["contentClass","content-highlight"]],null,null,null,ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],(function(t,e){t(e,1,0,"PGs per OSD","content-highlight")}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,7),n.healthData.pg_info.pgs_per_osd));t(e,2,0,a)}))}function mr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function yr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": "," "]))],null,(function(t,e){t(e,1,0,e.context.$implicit.key,e.context.$implicit.value)}))}function vr(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,mr)),s["ɵdid"](1,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](2,0,null,null,3,"ul",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,yr)),s["ɵdid"](4,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers])],(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e.parent.parent.parent,7)),t(e,4,0,s["ɵunv"](e,4,0,s["ɵnov"](e,5).transform(n.healthData.pg_info.statuses)))}),null)}function xr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"cd-info-card",[["cardTitle","PG Status"],["class","cd-capacity-card order-md-5 order-lg-3 order-xl-5"],["contentClass","content-chart"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,5).toggle()&&a),a}),ga,ca)),s["ɵdid"](1,49152,null,0,da,[],{cardTitle:[0,"cardTitle"],contentClass:[1,"contentClass"]},null),(t()(),s["ɵand"](0,[["pgStatus",2]],0,0,null,vr)),(t()(),s["ɵeld"](3,0,null,0,4,"div",[["class","pg-status-popover-wrapper"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,16777216,null,null,3,"div",[["placement","bottom"],["triggers",""]],null,null,null,null,null)),s["ɵdid"](5,212992,[["pgStatusTarget",4]],0,ua.c,[ua.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a,la.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"]},null),(t()(),s["ɵeld"](6,0,null,null,1,"cd-health-pie",[],null,[[null,"prepareFn"]],(function(t,e,n){var a=!0;return"prepareFn"===e&&(a=!1!==t.component.preparePgStatus(n[0],n[1])&&a),a}),Ia,Sa)),s["ɵdid"](7,638976,null,0,wa,[_a.a,Ta.a],{data:[0,"data"],config:[1,"config"]},{prepareFn:"prepareFn"})],(function(t,e){var n=e.component;t(e,1,0,"PG Status","content-chart"),t(e,5,0,s["ɵnov"](e,2),"bottom",""),t(e,7,0,n.healthData,n.pgStatusChartConfig)}),null)}function _r(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,"cd-info-group",[["groupTitle","Capacity"]],null,null,null,ma,ba)),s["ɵdid"](1,49152,null,0,pa,[],{groupTitle:[0,"groupTitle"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,hr)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,gr)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,pr)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,br)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,xr)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Capacity"),t(e,3,0,n.healthData.pools),t(e,5,0,n.healthData.df),t(e,7,0,null!=(null==n.healthData.pg_info?null:null==n.healthData.pg_info.object_stats?null:n.healthData.pg_info.object_stats.num_objects)),t(e,9,0,n.healthData.pg_info),t(e,11,0,n.healthData.pg_info)}),null)}function Tr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"p",[["class","logs-link"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵted"](-1,null,[" See "])),(t()(),s["ɵeld"](7,0,null,null,2,"a",[["routerLink","/logs"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,8).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](8,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Logs"])),(t()(),s["ɵted"](-1,null,[" for more details."]))],(function(t,e){var n=t(e,5,0,e.component.icons.infoCircle);t(e,4,0,n),t(e,8,0,"/logs")}),(function(t,e){t(e,7,0,s["ɵnov"](e,8).target,s["ɵnov"](e,8).href)}))}function Or(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Tr)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.permissions.log.read)}),null)}function wr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"div",[["class","container-fluid"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,rr)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fr)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_r)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["logsLink",2]],null,0,null,Or))],(function(t,e){var n=e.component;t(e,2,0,(null==n.healthData.health?null:n.healthData.health.status)||n.healthData.mon_status||n.healthData.osd_map||n.healthData.mgr_map||null!=n.healthData.hosts||null!=n.healthData.rgw||n.healthData.fs_map||null!=n.healthData.iscsi_daemons),t(e,4,0,n.healthData.client_perf||n.healthData.scrub_status),t(e,6,0,n.healthData.pools||n.healthData.df||n.healthData.pg_info)}),null)}function Sr(t){return s["ɵvid"](0,[s["ɵpid"](0,ee,[]),s["ɵpid"](0,Na,[me.a]),s["ɵpid"](0,Ca,[me.a]),s["ɵpid"](0,Ra,[me.a]),s["ɵpid"](0,Aa,[me.a]),s["ɵpid"](0,ka,[]),s["ɵpid"](0,_a.a,[Ea.a]),s["ɵpid"](0,Ta.a,[Ea.a]),(t()(),s["ɵand"](16777216,null,null,2,null,wr)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpid"](131072,i.AsyncPipe,[s.ChangeDetectorRef])],(function(t,e){var n=e.component;t(e,9,0,s["ɵunv"](e,9,0,s["ɵnov"](e,10).transform(n.healthData&&n.enabledFeature$)))}),null)}class Ir{constructor(t){this.refreshIntervalService=t,this.intervalList={"5 s":5e3,"10 s":1e4,"15 s":15e3,"30 s":3e4,"1 min":6e4,"3 min":18e4,"5 min":3e5},this.intervalKeys=Object.keys(this.intervalList)}ngOnInit(){this.selectedInterval=this.refreshIntervalService.getRefreshInterval()||5e3}changeRefreshInterval(t){this.refreshIntervalService.setRefreshInterval(t)}}var Nr=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Cr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){var n=e.component;t(e,1,0,n.intervalList[e.context.$implicit]),t(e,2,0,n.intervalList[e.context.$implicit])}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function Rr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,12,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,11,"div",[["class","float-right d-inline-flex"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"label",[["class","col-form-label my-0 mx-2"],["for","refreshInterval"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Refresh"])),(t()(),s["ɵeld"](5,0,null,null,8,"select",[["class","form-control custom-select"],["id","refreshInterval"],["name","refreshInterval"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,6).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,6).onTouched()&&a),"change"===e&&(a=!1!==r.changeRefreshInterval(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.selectedInterval=n)&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](8,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](10,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](11,16384,null,0,Z.h,[[8,null],Z.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Cr)),s["ɵdid"](13,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,8,0,"refreshInterval",n.selectedInterval),t(e,13,0,n.intervalKeys)}),(function(t,e){t(e,5,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending,s["ɵnov"](e,11).validClass,s["ɵnov"](e,11).invalidClass)}))}class Ar{constructor(){this.hasGrafana=!1}ngOnInit(){}}var kr=s["ɵcrt"]({encapsulation:0,styles:[["div[_ngcontent-%COMP%]{padding-top:20px}"]],data:{}});function Er(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-health",[],null,null,null,Sr,Va)),s["ɵdid"](5,245760,null,0,Ga,[La,me.a,vt.a,Fa.a,Qe.a,ja,_a.a,Ta.a],null,null),(t()(),s["ɵeld"](6,0,null,0,1,"tab",[["heading","Statistics"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null)],(function(t,e){t(e,3,0,"Health"),t(e,5,0),t(e,7,0,"Statistics")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby)}))}function Lr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-health",[],null,null,null,Sr,Va)),s["ɵdid"](1,245760,null,0,Ga,[La,me.a,vt.a,Fa.a,Qe.a,ja,_a.a,Ta.a],null,null)],(function(t,e){t(e,1,0)}),null)}function Dr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"cd-refresh-selector",[],null,null,null,Rr,Nr)),s["ɵdid"](2,114688,null,0,Ir,[ja],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Er)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lr)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0),t(e,4,0,n.hasGrafana),t(e,6,0,!n.hasGrafana)}),null)}function Pr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-dashboard",[],null,null,null,Dr,kr)),s["ɵdid"](1,114688,null,0,Ar,[],null,null)],(function(t,e){t(e,1,0)}),null)}var Mr=s["ɵccf"]("cd-dashboard",Ar,Pr,{},{},[]),qr=n("a278"),jr=n("insk"),Fr=n("cUpR"),Gr=n("25BL"),Vr=n("uIqm"),zr=n("NUGo"),Br=n("S7zO"),Yr=n("DqMs"),Hr=n("/NlG"),Ur=n("i4WA"),Wr=n("6qls");class Kr{}var $r=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Zr(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Orchestrator is not available. Please consult the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","orch"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](4,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,[" on how to configure and enable the functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"orch")}),null)}let Jr=(()=>{class t{constructor(t){this.http=t,this.url="api/orchestrator"}status(){return this.http.get(`${this.url}/status`)}identifyDevice(t,e,n){return this.http.post(`${this.url}/identify_device`,{hostname:t,device:e,duration:n})}inventoryList(t){const e=t?{params:(new X.h).set("hostname",t)}:{};return this.http.get(`${this.url}/inventory`,e)}inventoryDeviceList(t){return this.inventoryList(t).pipe(Object(Dn.a)(t=>{const e=J.flatMap(t,t=>t.devices.map(e=>(e.hostname=t.name,e.uid=e.device_id?e.device_id:`${e.hostname}-${e.path}`,e)));return Object(An.a)(e)}))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();var Qr=n("Rf2I"),Xr=n("x38r"),ti=n("vCyI");class ei{constructor(t,e,n,a,r,i){this.authStorageService=t,this.dimlessBinary=e,this.i18n=n,this.modalService=a,this.notificationService=r,this.orchService=i,this.devices=[],this.hiddenColumns=[],this.filterColumns=["hostname","human_readable_type","available","sys_api.vendor","sys_api.model","sys_api.size"],this.selectionType=void 0,this.filterChange=new s.EventEmitter,this.fetchInventory=new s.EventEmitter,this.icons=ht.a,this.columns=[],this.selection=new ti.a}ngOnInit(){this.permission=this.authStorageService.getPermissions().osd,this.tableActions=[{permission:"update",icon:ht.a.show,click:()=>this.identifyDevice(),name:this.i18n("Identify"),disable:()=>!this.selection.hasSingleSelection,canBePrimary:t=>!t.hasSingleSelection,visible:()=>J.isString(this.selectionType)}];const t=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1},{name:this.i18n("Device path"),prop:"path",flexGrow:1},{name:this.i18n("Type"),prop:"human_readable_type",flexGrow:1,cellTransformation:Xr.a.badge,customTemplateConfig:{map:{hdd:{value:"HDD",class:"badge-hdd"},ssd:{value:"SSD",class:"badge-ssd"}}}},{name:this.i18n("Available"),prop:"available",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.a.checkIcon},{name:this.i18n("Vendor"),prop:"sys_api.vendor",flexGrow:1},{name:this.i18n("Model"),prop:"sys_api.model",flexGrow:1},{name:this.i18n("Size"),prop:"sys_api.size",flexGrow:1,pipe:this.dimlessBinary},{name:this.i18n("OSDs"),prop:"osd_ids",flexGrow:1,cellTransformation:Xr.a.badge,customTemplateConfig:{class:"badge-dark",prefix:"osd."}}];this.columns=t.filter(t=>!this.hiddenColumns.includes(t.prop)),J.forEach(this.filterColumns,t=>{const e=J.find(this.columns,{prop:t});e&&(e.filterable=!0)}),this.fetchInventory.observers.length>0&&(this.fetchInventorySub=this.table.fetchData.subscribe(()=>{this.fetchInventory.emit()}))}ngOnDestroy(){this.fetchInventorySub&&this.fetchInventorySub.unsubscribe()}onColumnFiltersChanged(t){this.filterChange.emit(t)}updateSelection(t){this.selection=t}identifyDevice(){const t=this.selection.first(),e=t.hostname,n=t.path||t.device_id;this.modalService.show(Qr.a,{initialState:{titleText:this.i18n("Identify device {{device}}",{device:n}),message:this.i18n("Please enter the duration how long to blink the LED."),fields:[{type:"select",name:"duration",value:300,required:!0,typeConfig:{options:[{text:this.i18n("1 minute"),value:60},{text:this.i18n("2 minutes"),value:120},{text:this.i18n("5 minutes"),value:300},{text:this.i18n("10 minutes"),value:600},{text:this.i18n("15 minutes"),value:900}]}}],submitButtonText:this.i18n("Execute"),onSubmit:t=>{this.orchService.identifyDevice(e,n,t.duration).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n("Identifying '{{device}}' started on host '{{hostname}}'",{hostname:e,device:n}))})}}})}}var ni=s["ɵcrt"]({encapsulation:0,styles:[[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}"]],data:{}});function ai(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),(t()(),s["ɵeld"](1,0,null,null,3,"cd-table",[["columnMode","flex"],["identifier","uid"]],null,[[null,"updateSelection"],[null,"columnFiltersChanged"]],(function(t,e,n){var a=!0,r=t.component;return"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),"columnFiltersChanged"===e&&(a=!1!==r.onColumnFiltersChanged(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](2,2867200,[[1,4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],searchField:[3,"searchField"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],forceIdentifier:[6,"forceIdentifier"],selectionType:[7,"selectionType"]},{updateSelection:"updateSelection",columnFiltersChanged:"columnFiltersChanged"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](4,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.devices,n.columns,"flex",!1,!1,"uid",!0,n.selectionType),t(e,4,0,n.permission,n.selection,n.tableActions)}),null)}class ri{constructor(t){this.orchService=t,this.icons=ht.a,this.hasOrchestrator=!1,this.devices=[]}ngOnInit(){this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,t.available&&this.getInventory()})}ngOnChanges(){this.hasOrchestrator&&(this.devices=[],this.getInventory())}getInventory(){""!==this.hostname&&this.orchService.inventoryDeviceList(this.hostname).subscribe(t=>{this.devices=t},()=>{this.devices=[]})}refresh(){this.getInventory()}}var ii=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function si(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,Zr,$r)),s["ɵdid"](1,49152,null,0,Kr,[],null,null)],null,null)}function oi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Devices"])),(t()(),s["ɵeld"](3,0,null,null,4,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"cd-inventory-devices",[["selectionType","single"]],null,[[null,"fetchInventory"]],(function(t,e,n){var a=!0;return"fetchInventory"===e&&(a=!1!==t.component.refresh()&&a),a}),ai,ni)),s["ɵdid"](6,245760,null,0,ei,[vt.a,_a.a,me.a,Lt.b,gt.a,Jr],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],selectionType:[2,"selectionType"]},{fetchInventory:"fetchInventory"}),s["ɵpad"](7,1)],(function(t,e){var n=e.component,a=n.devices,r=void 0===n.hostname?s["ɵEMPTY_ARRAY"]:t(e,7,0,"hostname");t(e,6,0,a,r,"single")}),null)}function ui(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,si)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,oi)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,!n.hasOrchestrator),t(e,3,0,n.hasOrchestrator)}),null)}function li(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-inventory",[],null,null,null,ui,ii)),s["ɵdid"](1,638976,null,0,ri,[Jr],null,null)],(function(t,e){t(e,1,0)}),null)}var di=s["ɵccf"]("cd-inventory",ri,li,{hostname:"hostname"},{},[]);let ci=(()=>{class t{constructor(t){this.http=t,this.url="api/service"}list(t){const e=t?{params:(new X.h).set("service_name",t)}:{};return this.http.get(this.url,e)}getDaemons(t){return this.http.get(`${this.url}/${t}/daemons`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})(),fi=(()=>{class t{constructor(){}calculateAdditionalData(t){if(!t.life_expectancy_min||!t.life_expectancy_max)return t.state="unknown",t;const e=t=>!!Number.parseFloat(t),n=(t,n)=>t&&n&&e(t)&&e(n)?Oe.duration(Oe(t).diff(Oe(n))).asWeeks():null,a=Oe.duration(Oe(Oe.now()).diff(Oe(t.life_expectancy_stamp))).asWeeks(),r=n(t.life_expectancy_max,t.life_expectancy_stamp),i=n(t.life_expectancy_min,t.life_expectancy_stamp);return t.state=a>1?"stale":null!==r&&r<=2?"bad":null!==i&&i<=4?"warning":"good",t.life_expectancy_weeks={max:null!==r?Math.round(r):null,min:null!==i?Math.round(i):null},t}readable(t){return t.readableDaemons=t.daemons.join(" "),t}prepareDevice(t){return this.readable(this.calculateAdditionalData(t))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})(),hi=(()=>{class t{constructor(t,e){this.http=t,this.deviceService=e,this.baseURL="api/host"}list(){return this.http.get(this.baseURL)}create(t){return this.http.post(this.baseURL,{hostname:t},{observe:"response"})}delete(t){return this.http.delete(`${this.baseURL}/${t}`,{observe:"response"})}getDevices(t){return this.http.get(`${this.baseURL}/${t}/devices`).pipe(Object(Ee.a)(t=>t.map(t=>this.deviceService.prepareDevice(t))))}getSmartData(t){return this.http.get(`${this.baseURL}/${t}/smart`)}getDaemons(t){return this.http.get(`${this.baseURL}/${t}/daemons`)}getLabels(){return this.http.get("ui-api/host/labels")}update(t,e){return this.http.put(`${this.baseURL}/${t}`,{labels:e})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](fi))},token:t,providedIn:fe.a}),t})();class gi{constructor(t,e,n,a){this.i18n=t,this.hostService=e,this.cephServiceService=n,this.orchService=a,this.daemons=[],this.columns=[],this.hasOrchestrator=!1}ngOnInit(){this.columns=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1,filterable:!0},{name:this.i18n("Daemon type"),prop:"daemon_type",flexGrow:1,filterable:!0},{name:this.i18n("Daemon ID"),prop:"daemon_id",flexGrow:1,filterable:!0},{name:this.i18n("Container ID"),prop:"container_id",flexGrow:3,filterable:!0,cellTransformation:Xr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Container Image name"),prop:"container_image_name",flexGrow:3,filterable:!0},{name:this.i18n("Container Image ID"),prop:"container_image_id",flexGrow:3,filterable:!0,cellTransformation:Xr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Version"),prop:"version",flexGrow:1,filterable:!0},{name:this.i18n("Status"),prop:"status_desc",flexGrow:1,filterable:!0,cellTemplate:this.statusTpl},{name:this.i18n("Last Refreshed"),prop:"last_refresh",flexGrow:2}],this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available})}ngOnChanges(){J.isUndefined(this.daemonsTable)||this.daemonsTable.reloadData()}ngAfterViewInit(){this.daemonsTableTplsSub=this.daemonsTableTpls.changes.subscribe(t=>{this.daemonsTable=t.first})}ngOnDestroy(){this.daemonsTableTplsSub&&this.daemonsTableTplsSub.unsubscribe()}getStatusClass(t){return J.get({"-1":"badge-danger",0:"badge-warning",1:"badge-success"},t,"badge-dark")}getDaemons(t){let e;if(this.hostname)e=this.hostService.getDaemons(this.hostname);else{if(!this.serviceName)return void(this.daemons=[]);e=this.cephServiceService.getDaemons(this.serviceName)}e.subscribe(t=>{this.daemons=t},()=>{this.daemons=[],t.error()})}}var pi=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function bi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,Zr,$r)),s["ɵdid"](1,49152,null,0,Kr,[],null,null)],null,null)}function mi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[["columnMode","flex"]],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.getDaemons(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](1,2867200,[[2,4],["daemonsTable",4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],autoReload:[3,"autoReload"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,1,0,n.daemons,n.columns,"flex",6e4)}),null)}function yi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[["class","badge"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,2,0,"badge",e.component.getStatusClass(e.context.row.status))}),(function(t,e){t(e,3,0,e.context.row.status_desc)}))}function vi(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{statusTpl:0}),s["ɵqud"](671088640,2,{daemonsTableTpls:1}),(t()(),s["ɵand"](16777216,null,null,1,null,bi)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,mi)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["statusTpl",2]],null,0,null,yi))],(function(t,e){var n=e.component;t(e,3,0,!n.hasOrchestrator),t(e,5,0,n.hasOrchestrator)}),null)}var xi=n("sLuX"),_i=n("FSuO"),Ti=n("QC43"),Oi=n("XFyV");let wi=(()=>{class t{constructor(t,e,n){this.http=t,this.i18n=e,this.deviceService=n,this.path="api/osd",this.osdRecvSpeedModalPriorities={KNOWN_PRIORITIES:[{name:null,text:this.i18n("-- Select the priority --"),values:{osd_max_backfills:null,osd_recovery_max_active:null,osd_recovery_max_single_start:null,osd_recovery_sleep:null}},{name:"low",text:this.i18n("Low"),values:{osd_max_backfills:1,osd_recovery_max_active:1,osd_recovery_max_single_start:1,osd_recovery_sleep:.5}},{name:"default",text:this.i18n("Default"),values:{osd_max_backfills:1,osd_recovery_max_active:3,osd_recovery_max_single_start:1,osd_recovery_sleep:0}},{name:"high",text:this.i18n("High"),values:{osd_max_backfills:4,osd_recovery_max_active:4,osd_recovery_max_single_start:4,osd_recovery_sleep:0}}]}}create(t){const e={method:"drive_groups",data:t,tracking_id:J.join(J.map(t,"service_id"),", ")};return this.http.post(this.path,e,{observe:"response"})}getList(){return this.http.get(`${this.path}`)}getDetails(t){return this.http.get(`${this.path}/${t}`)}getSmartData(t){return this.http.get(`${this.path}/${t}/smart`)}scrub(t,e){return this.http.post(`${this.path}/${t}/scrub?deep=${e}`,null)}getFlags(){return this.http.get(`${this.path}/flags`)}updateFlags(t){return this.http.put(`${this.path}/flags`,{flags:t})}markOut(t){return this.http.post(`${this.path}/${t}/mark_out`,null)}markIn(t){return this.http.post(`${this.path}/${t}/mark_in`,null)}markDown(t){return this.http.post(`${this.path}/${t}/mark_down`,null)}reweight(t,e){return this.http.post(`${this.path}/${t}/reweight`,{weight:e})}update(t,e){return this.http.put(`${this.path}/${t}`,{device_class:e})}markLost(t){return this.http.post(`${this.path}/${t}/mark_lost`,null)}purge(t){return this.http.post(`${this.path}/${t}/purge`,null)}destroy(t){return this.http.post(`${this.path}/${t}/destroy`,null)}delete(t,e,n){return this.http.delete(`${this.path}/${t}`,{observe:"response",params:{preserve_id:e?"true":"false",force:n?"true":"false"}})}safeToDestroy(t){return this.http.get(`${this.path}/safe_to_destroy?ids=${t}`)}safeToDelete(t){return this.http.get(`${this.path}/safe_to_delete?svc_ids=${t}`)}getDevices(t){return this.http.get(`${this.path}/${t}/devices`).pipe(Object(Ee.a)(t=>t.map(t=>this.deviceService.prepareDevice(t))))}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](me.a),s["ɵɵinject"](fi))},token:t,providedIn:fe.a}),t})();class Si{constructor(t,e,n){this.i18n=t,this.osdService=e,this.hostService=n,this.osdId=null,this.hostname=null,this.loading=!1,this.incompatible=!1,this.error=!1,this.data={}}isSmartError(t){return void 0!==J.get(t,"error")}isNvmeSmartData(t){return"nvme"===J.get(t,"device.protocol","").toLowerCase()}isHddSmartData(t){return"ata"===J.get(t,"device.protocol","").toLowerCase()}fetchData(t){const e={};J.each(t,(t,n)=>{if(this.isSmartError(t)){let a="";return a=this.i18n(-22===t.smartctl_error_code?"Smartctl has received an unknown argument (error code {{code}}). You may be using an incompatible version of smartmontools. Version >= 7.0 of smartmontools is required to successfully retrieve data.":"An error with error code {{code}} occurred.",{code:t.smartctl_error_code}),void(e[n]={error:t.error,smartctl_error_code:t.smartctl_error_code,smartctl_output:t.smartctl_output,userMessage:a,device:t.dev,identifier:t.nvme_vendor})}1!==t.json_format_version[0]?this.incompatible=!0:this.isHddSmartData(t)?e[n]=this.extractHddData(t):this.isNvmeSmartData(t)&&(e[n]=this.extractNvmeData(t))}),this.data=e,this.loading=!1}extractNvmeData(t){return{info:J.omitBy(t,(t,e)=>["nvme_smart_health_information_log"].includes(e)),smart:{nvmeData:t.nvme_smart_health_information_log},device:t.device.name,identifier:t.serial_number}}extractHddData(t){const e=J.omitBy(t,(t,e)=>["ata_smart_attributes","ata_smart_selective_self_test_log","ata_smart_data"].includes(e));return{info:e,smart:{attributes:t.ata_smart_attributes,data:t.ata_smart_data},device:e.device.name,identifier:e.serial_number}}updateData(){this.loading=!0,null!==this.osdId?this.osdService.getSmartData(this.osdId).subscribe(this.fetchData.bind(this),t=>{t.preventDefault(),this.error=t,this.loading=!1}):null!==this.hostname&&this.hostService.getSmartData(this.hostname).subscribe(this.fetchData.bind(this),t=>{t.preventDefault(),this.error=t,this.loading=!1})}ngOnInit(){this.smartDataColumns=[{prop:"id",name:this.i18n("ID")},{prop:"name",name:this.i18n("Name")},{prop:"raw.value",name:this.i18n("Raw")},{prop:"thresh",name:this.i18n("Threshold")},{prop:"value",name:this.i18n("Value")},{prop:"when_failed",name:this.i18n("When Failed")},{prop:"worst",name:this.i18n("Worst")}]}ngOnChanges(t){this.data={},t.osdId?this.osdId=t.osdId.currentValue:t.hostname&&(this.hostname=t.hostname.currentValue),this.updateData()}}var Ii=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ni(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Failed to retrieve SMART data."]))],(function(t,e){t(e,1,0,"error")}),null)}function Ci(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The data received has the JSON format version 2.x and is currently incompatible with the dashboard."]))],(function(t,e){t(e,1,0,"warning")}),null)}function Ri(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No SMART data available."]))],(function(t,e){t(e,1,0,"info")}),null)}function Ai(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"cd-alert-panel",[["id","alert-error"],["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](2,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](3,0,["",""]))],(function(t,e){t(e,2,0,"warning")}),(function(t,e){t(e,3,0,e.parent.context.$implicit.value.userMessage)}))}function ki(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"cd-alert-panel",[["id","alert-self-test-passed"],["size","slim"],["title","SMART overall-health self-assessment test result"],["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](2,114688,null,0,Hr.a,[me.a],{title:[0,"title"],type:[1,"type"],size:[2,"size"]},null),(t()(),s["ɵted"](-1,0,["passed"]))],(function(t,e){t(e,2,0,"SMART overall-health self-assessment test result","info","slim")}),null)}function Ei(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["id","alert-self-test-failed"],["size","slim"],["title","SMART overall-health self-assessment test result"],["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{title:[0,"title"],type:[1,"type"],size:[2,"size"]},null),(t()(),s["ɵted"](-1,0,["failed"]))],(function(t,e){t(e,1,0,"SMART overall-health self-assessment test result","warning","slim")}),null)}function Li(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[["updateSelectionOnRefresh","never"]],null,null,null,Gr.b,Gr.a)),s["ɵdid"](1,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],updateSelectionOnRefresh:[2,"updateSelectionOnRefresh"]},null)],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.smart.attributes.table,e.component.smartDataColumns,"never")}),null)}function Di(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["updateSelectionOnRefresh","never"]],null,null,null,xi.b,xi.a)),s["ɵdid"](1,638976,null,0,_i.a,[Se.a],{data:[0,"data"],renderObjects:[1,"renderObjects"]},null)],(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.smart.nvmeData,!0)}),null)}function Pi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No SMART data available for this device."]))],(function(t,e){t(e,1,0,"info")}),null)}function Mi(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,ki)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["selfTestFailed",2]],null,0,null,Ei)),(t()(),s["ɵeld"](3,0,null,null,13,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](4,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](5,0,null,0,3,"tab",[["heading","Device Information"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](6,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](7,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](8,638976,null,0,_i.a,[Se.a],{data:[0,"data"],renderObjects:[1,"renderObjects"]},null),(t()(),s["ɵeld"](9,0,null,0,7,"tab",[["heading","SMART"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](10,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Li)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Di)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Pi)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.parent.context.$implicit.value.info.smart_status.passed,s["ɵnov"](e,2)),t(e,6,0,"Device Information"),t(e,8,0,e.parent.context.$implicit.value.info,!0),t(e,10,0,"SMART"),t(e,12,0,e.parent.context.$implicit.value.smart.attributes),t(e,14,0,e.parent.context.$implicit.value.smart.nvmeData),t(e,16,0,!e.parent.context.$implicit.value.smart.attributes&&!e.parent.context.$implicit.value.smart.nvmeData)}),(function(t,e){t(e,3,0,s["ɵnov"](e,4).clazz),t(e,5,0,s["ɵnov"](e,6).id,s["ɵnov"](e,6).active,s["ɵnov"](e,6).addClass,s["ɵnov"](e,6).role,s["ɵnov"](e,6).ariaLabelledby),t(e,9,0,s["ɵnov"](e,10).id,s["ɵnov"](e,10).active,s["ɵnov"](e,10).addClass,s["ɵnov"](e,10).role,s["ɵnov"](e,10).ariaLabelledby)}))}function qi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,4,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ai)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noError",2]],null,0,null,Mi))],(function(t,e){t(e,3,0,e.context.$implicit.value.device+" ("+e.context.$implicit.value.identifier+")"),t(e,5,0,e.context.$implicit.value.error,s["ɵnov"](e,6))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function ji(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Ri)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵand"](16777216,null,null,2,null,qi)),s["ɵdid"](5,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,!s["ɵunv"](e,2,0,s["ɵnov"](e,3).transform(n.data)).length),t(e,5,0,s["ɵunv"](e,5,0,s["ɵnov"](e,6).transform(n.data)))}),null)}function Fi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ni)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ci)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ji)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.error),t(e,4,0,n.incompatible),t(e,6,0,!n.error&&!n.incompatible)}),null)}function Gi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ti.b,Ti.a)),s["ɵdid"](1,49152,null,0,Oi.a,[],null,null),(t()(),s["ɵted"](-1,0,["SMART data is loading."]))],null,null)}function Vi(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Fi)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["isLoading",2]],null,0,null,Gi))],(function(t,e){t(e,1,0,!e.component.loading,s["ɵnov"](e,2))}),null)}class zi{constructor(t,e,n,a){this.hostService=t,this.i18n=e,this.datePipe=n,this.osdService=a,this.hostname="",this.osdId=null,this.devices=null,this.columns=[],this.translationMapping={"=1":"# week",other:"# weeks"}}ngOnInit(){this.columns=[{prop:"devid",name:this.i18n("Device ID"),minWidth:200},{prop:"state",name:this.i18n("State of Health"),flexGrow:1,cellTransformation:Xr.a.badge,customTemplateConfig:{map:{good:{value:this.i18n("Good"),class:"badge-success"},warning:{value:this.i18n("Warning"),class:"badge-warning"},bad:{value:this.i18n("Bad"),class:"badge-danger"},stale:{value:this.i18n("Stale"),class:"badge-info"},unknown:{value:this.i18n("Unknown"),class:"badge-dark"}}}},{prop:"life_expectancy_weeks",name:this.i18n("Life Expectancy"),cellTemplate:this.lifeExpectancyTemplate},{prop:"life_expectancy_stamp",name:this.i18n("Prediction Creation Date"),cellTemplate:this.lifeExpectancyTimestampTemplate,pipe:this.datePipe,isHidden:!0},{prop:"location",name:this.i18n("Device Name"),cellTemplate:this.locationTemplate},{prop:"readableDaemons",name:this.i18n("Daemons")}]}ngOnChanges(){const t=t=>this.devices=t;this.hostname?this.hostService.getDevices(this.hostname).subscribe(t):null!==this.osdId&&this.osdService.getDevices(this.osdId).subscribe(t)}}var Bi=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Yi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table",[],null,null,null,Gr.b,Gr.a)),s["ɵdid"](1,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.devices,n.columns)}),null)}function Hi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Neither hostname nor OSD ID given"]))],(function(t,e){t(e,1,0,"warning")}),null)}function Ui(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.$implicit.dev)}))}function Wi(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ui)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Ki(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["> ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,1,0,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.min,n.translationMapping));t(e,1,0,a)}))}function $i(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["< ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,1,0,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.max,n.translationMapping));t(e,1,0,a)}))}function Zi(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[""," to ",""])),s["ɵppd"](2,2)],null,(function(t,e){var n=e.component,a=e.parent.context.value.min,r=s["ɵunv"](e,1,1,t(e,2,0,s["ɵnov"](e.parent.parent,0),e.parent.context.value.max,n.translationMapping));t(e,1,0,a,r)}))}function Ji(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ki)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$i)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zi)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value.min&&!e.context.value.max),t(e,3,0,e.context.value.max&&!e.context.value.min),t(e,5,0,e.context.value.max&&e.context.value.min)}),null)}function Qi(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" ","\n"]))],null,(function(t,e){t(e,0,0,e.context.value)}))}function Xi(t){return s["ɵvid"](0,[s["ɵpid"](0,i.I18nPluralPipe,[i.NgLocalization]),s["ɵqud"](402653184,1,{locationTemplate:0}),s["ɵqud"](402653184,2,{lifeExpectancyTemplate:0}),s["ɵqud"](402653184,3,{lifeExpectancyTimestampTemplate:0}),(t()(),s["ɵand"](16777216,null,null,1,null,Yi)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Hi)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["deviceLocation",2]],null,0,null,Wi)),(t()(),s["ɵand"](0,[[2,2],["lifeExpectancy",2]],null,0,null,Ji)),(t()(),s["ɵand"](0,[[3,2],["lifeExpectancyTimestamp",2]],null,0,null,Qi))],(function(t,e){var n=e.component;t(e,5,0,n.hostname||null!==n.osdId),t(e,7,0,""===n.hostname&&null===n.osdId)}),null)}n("jKX/");class ts{get selectedHostname(){return void 0!==this.selection?this.selection.hostname:null}constructor(){}}var es=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ns(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Inventory"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-inventory",[],null,null,null,ui,ii)),s["ɵdid"](3,638976,null,0,ri,[Jr],{hostname:[0,"hostname"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Inventory"),t(e,3,0,n.selectedHostname)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function as(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Daemons"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-service-daemon-list",[],null,null,null,vi,pi)),s["ɵdid"](3,4964352,null,0,gi,[me.a,hi,ci,Jr],{hostname:[0,"hostname"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Daemons"),t(e,3,0,n.selectedHostname)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function rs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","three"],["uid","rtOg0AiWz"]],null,null,null,qr.b,qr.a)),s["ɵdid"](3,638976,null,0,jr.a,[Fr.b,re.a,me.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"host-details?var-ceph_hosts="+n.selectedHostname,"three","rtOg0AiWz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function is(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-smart-list",[],null,null,null,Vi,Ii)),s["ɵdid"](1,638976,null,0,Si,[me.a,wi,hi],{hostname:[0,"hostname"]},null)],(function(t,e){t(e,1,0,e.component.selectedHostname)}),null)}function ss(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,[[1,4]],0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Devices"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-device-list",[],null,null,null,Xi,Bi)),s["ɵdid"](5,638976,null,0,zi,[hi,me.a,i.DatePipe,wi],{hostname:[0,"hostname"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ns)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,as)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,rs)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,3,"tab",[["heading","Device health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](13,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,is)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Devices"),t(e,5,0,n.selection.hostname),t(e,7,0,n.permissions.hosts.read),t(e,9,0,n.permissions.hosts.read),t(e,11,0,n.permissions.grafana.read),t(e,13,0,"Device health"),t(e,15,0,n.selectedHostname,s["ɵnov"](e.parent,3))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,12,0,s["ɵnov"](e,13).id,s["ɵnov"](e,13).active,s["ɵnov"](e,13).addClass,s["ɵnov"](e,13).role,s["ɵnov"](e,13).ariaLabelledby)}))}function os(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["No hostname found."]))],(function(t,e){t(e,1,0,"error")}),null)}function us(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tabsetChild:0}),(t()(),s["ɵand"](16777216,null,null,1,null,ss)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["noHostname",2]],null,0,null,os))],(function(t,e){t(e,2,0,e.component.selection)}),null)}var ls=n("EgGo"),ds=n("+fVR"),cs=n("0+/T"),fs=n("DNAf"),hs=n("kvvV"),gs=n("85J/"),ps=n("FFMq");class bs{constructor(t){this.bsModalRef=t}ngOnInit(){}onSubmit(){this.bsModalRef.hide()}}let ms=(()=>{class t{constructor(t,e){this.orchService=t,this.modalService=e}checkOrchestratorOrModal(t,e,n){this.orchService.status().subscribe(a=>{a.available?n():this.modalService.show(bs,{initialState:{actionDescription:t,itemDescription:e}})})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](Jr),s["ɵɵinject"](Lt.b))},token:t,providedIn:"root"}),t})();var ys=n("kn/O");const vs=new ls.a("hosts");class xs extends ds.a{constructor(t,e,n,a,r,i,s,o,u,l,d,c){super(),this.authStorageService=t,this.hostService=e,this.cephShortVersionPipe=n,this.joinPipe=a,this.i18n=r,this.urlBuilder=i,this.actionLabels=s,this.modalService=o,this.taskWrapper=u,this.router=l,this.depCheckerService=d,this.notificationService=c,this.columns=[],this.hosts=[],this.isLoadingHosts=!1,this.cdParams={fromLink:"/hosts"},this.selection=new ti.a,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:ht.a.add,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.CREATE,this.i18n("Host"),()=>{this.router.navigate([this.urlBuilder.getCreate()])})}},{name:this.actionLabels.EDIT,permission:"update",icon:ht.a.edit,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.EDIT,this.i18n("Host"),()=>this.editAction())},disable:t=>!t.hasSingleSelection||!t.first().sources.orchestrator,disableDesc:this.getEditDisableDesc.bind(this)},{name:this.actionLabels.DELETE,permission:"delete",icon:ht.a.destroy,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.DELETE,this.i18n("Host"),()=>this.deleteAction())},disable:()=>!this.selection.hasSelection}]}ngOnInit(){this.columns=[{name:this.i18n("Hostname"),prop:"hostname",flexGrow:1},{name:this.i18n("Services"),prop:"services",flexGrow:3,cellTemplate:this.servicesTpl},{name:this.i18n("Labels"),prop:"labels",flexGrow:1,pipe:this.joinPipe},{name:this.i18n("Version"),prop:"ceph_version",flexGrow:1,pipe:this.cephShortVersionPipe}]}updateSelection(t){this.selection=t}editAction(){this.hostService.getLabels().subscribe(t=>{const e=this.selection.first(),n=t.map(t=>({enabled:!0,name:t}));this.modalService.show(Qr.a,{initialState:{titleText:this.i18n("Edit Host: {{hostname}}",e),fields:[{type:"select-badges",name:"labels",value:e.labels,label:this.i18n("Labels"),typeConfig:{customBadges:!0,options:n,messages:new fs.a({empty:this.i18n("There are no labels."),filter:this.i18n("Filter or add labels"),add:this.i18n("Add label")},this.i18n)}}],submitButtonText:this.i18n("Edit Host"),onSubmit:t=>{this.hostService.update(e.hostname,t.labels).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n('Updated Host "{{hostname}}"',e)),this.table.refreshBtn()})}}})})}getEditDisableDesc(t){if(t&&t.hasSingleSelection&&!t.first().sources.orchestrator)return this.i18n("Host editing is disabled because the host is not managed by Orchestrator.")}deleteAction(){const t=this.selection.first().hostname;this.modalRef=this.modalService.show(cs.a,{initialState:{itemDescription:"Host",itemNames:[t],actionDescription:"delete",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new hs.a("host/delete",{hostname:t}),call:this.hostService.delete(t)})}})}getHosts(t){if(this.isLoadingHosts)return;const e={mds:"cephfs",mon:"monitor",osd:"osd",rgw:"rgw","rbd-mirror":"rbdMirroring",mgr:"manager","tcmu-runner":"iscsi"};this.isLoadingHosts=!0,this.hostService.list().subscribe(t=>{t.map(t=>(t.services.map(t=>{t.cdLink=`/perf_counters/${t.type}/${encodeURIComponent(t.id)}`;const n=this.permissions[e[t.type]];return t.canRead=!!n&&n.read,t}),t)),this.hosts=t,this.isLoadingHosts=!1},()=>{this.isLoadingHosts=!1,t.error()})}}var _s=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ts(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"a",[["class","service-link"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&a),a}),null,null)),s["ɵdid"](1,671744,null,0,qt.p,[qt.m,qt.a,i.LocationStrategy],{queryParams:[0,"queryParams"],routerLink:[1,"routerLink"]},null),s["ɵpad"](2,1),(t()(),s["ɵted"](3,null,["",".",""]))],(function(t,e){var n=e.component.cdParams,a=t(e,2,0,e.parent.context.$implicit.cdLink);t(e,1,0,n,a)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).target,s["ɵnov"](e,1).href),t(e,3,0,e.parent.context.$implicit.type,e.parent.context.$implicit.id)}))}function Os(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ","."," "]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.type,e.parent.context.$implicit.id)}))}function ws(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[", "]))],null,null)}function Ss(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ts)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Os)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ws)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit.canRead),t(e,4,0,!e.context.$implicit.canRead),t(e,6,0,!e.context.last)}),null)}function Is(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Ss)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Ns(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","two"],["uid","y0KGL0iZz"]],null,null,null,qr.b,qr.a)),s["ɵdid"](3,638976,null,0,jr.a,[Fr.b,re.a,me.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){t(e,1,0,"Overall Performance"),t(e,3,0,"host-overview?","two","y0KGL0iZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Cs(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),s["ɵqud"](402653184,2,{servicesTpl:0}),(t()(),s["ɵeld"](2,0,null,null,13,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](3,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](4,0,null,0,9,"tab",[["heading","Hosts List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](5,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](6,0,null,null,7,"cd-table",[["columnMode","flex"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getHosts(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](7,2867200,[[1,4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],selectionType:[4,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](8,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"cd-table-actions",[["class","btn-group"],["id","host-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](10,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](0,[[2,2],["servicesTpl",2]],null,0,null,Is)),(t()(),s["ɵeld"](12,0,null,3,1,"cd-host-details",[["cdTableDetail",""]],null,null,null,us,es)),s["ɵdid"](13,49152,null,0,ts,[],{permissions:[0,"permissions"],selection:[1,"selection"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,Ns)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,"Hosts List"),t(e,7,0,n.hosts,n.columns,"flex",!0,"single"),t(e,10,0,n.permissions.hosts,n.selection,n.tableActions),t(e,13,0,n.permissions,n.expandedRow),t(e,15,0,n.permissions.grafana.read)}),(function(t,e){t(e,2,0,s["ɵnov"](e,3).clazz),t(e,4,0,s["ɵnov"](e,5).id,s["ɵnov"](e,5).active,s["ɵnov"](e,5).addClass,s["ɵnov"](e,5).role,s["ɵnov"](e,5).ariaLabelledby)}))}function Rs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-hosts",[],null,null,null,Cs,_s)),s["ɵprd"](256,null,ls.a,vs,[]),s["ɵdid"](2,114688,null,0,xs,[vt.a,hi,gs.a,ps.a,me.a,ls.a,At.b,Lt.b,ys.a,qt.m,ms,gt.a],null,null)],(function(t,e){t(e,2,0)}),null)}var As=s["ɵccf"]("cd-hosts",xs,Rs,{},{},[]),ks=n("mXUL"),Es=n("IZUe"),Ls=n("gp3X"),Ds=n("sb0X"),Ps=n("KVJa"),Ms=n("Z21x"),qs=n("8xTl"),js=n("QFaf"),Fs=n("1Ni5");class Gs{constructor(t,e,n,a,r){this.router=t,this.i18n=e,this.actionLabels=n,this.hostService=a,this.taskWrapper=r,this.loading=!0,this.resource=this.i18n("host"),this.action=this.actionLabels.CREATE,this.createForm()}ngOnInit(){this.hostService.list().subscribe(t=>{this.hostnames=t.map(t=>t.hostname),this.loading=!1})}createForm(){this.hostForm=new js.a({hostname:new $.i("",{validators:[$.B.required,Fs.a.custom("uniqueName",t=>this.hostnames&&-1!==this.hostnames.indexOf(t))]})})}submit(){const t=this.hostForm.get("hostname").value;this.taskWrapper.wrapTaskAroundCall({task:new hs.a("host/"+At.e.CREATE,{hostname:t}),call:this.hostService.create(t)}).subscribe(void 0,()=>{this.hostForm.setErrors({cdSubmitButton:!0})},()=>{this.router.navigate(["/hosts"])})}}var Vs=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function zs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ti.b,Ti.a)),s["ɵdid"](1,49152,null,0,Oi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading..."]))],null,null)}function Bs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Ys(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The chosen hostname is already in use."]))],null,null)}function Hs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,39,"form",[["name","hostForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,2).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,2).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,5).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.G,[],null,null),s["ɵdid"](2,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](4,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](5,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](6,0,null,null,33,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,[""," ",""])),s["ɵppd"](9,1),s["ɵppd"](10,1),(t()(),s["ɵeld"](11,0,null,null,19,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](13,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","hostname"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Hostname"])),(t()(),s["ɵeld"](18,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,7,"input",[["autofocus",""],["class","form-control"],["formControlName","hostname"],["id","hostname"],["name","hostname"],["placeholder","mon-123"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,21)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,21).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,21)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,21)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](20,4210688,null,0,Es.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](21,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](23,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](25,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](26,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Bs)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ys)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](31,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](32,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](33,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](34,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](35,0,[""," ",""])),s["ɵppd"](36,1),s["ɵppd"](37,1),(t()(),s["ɵeld"](38,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](39,49152,null,0,Ms.a,[i.Location,At.b],null,null)],(function(t,e){var n=e.component;t(e,2,0,n.hostForm),t(e,5,0,n.hostForm),t(e,13,0),t(e,20,0,""),t(e,23,0,"hostname"),t(e,26,0,"hostname"),t(e,28,0,n.hostForm.showError("hostname",s["ɵnov"](e,2),"required")),t(e,30,0,n.hostForm.showError("hostname",s["ɵnov"](e,2),"uniqueName")),t(e,34,0,s["ɵnov"](e,2))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,4).ngClassUntouched,s["ɵnov"](e,4).ngClassTouched,s["ɵnov"](e,4).ngClassPristine,s["ɵnov"](e,4).ngClassDirty,s["ɵnov"](e,4).ngClassValid,s["ɵnov"](e,4).ngClassInvalid,s["ɵnov"](e,4).ngClassPending);var a=s["ɵunv"](e,8,0,t(e,9,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,8,1,t(e,10,0,s["ɵnov"](e.parent,1),n.resource));t(e,8,0,a,r),t(e,12,0,s["ɵnov"](e,13).hasErrors,s["ɵnov"](e,13).hasSuccess),t(e,19,0,s["ɵnov"](e,25).ngClassUntouched,s["ɵnov"](e,25).ngClassTouched,s["ɵnov"](e,25).ngClassPristine,s["ɵnov"](e,25).ngClassDirty,s["ɵnov"](e,25).ngClassValid,s["ɵnov"](e,25).ngClassInvalid,s["ɵnov"](e,25).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass);var i=s["ɵunv"](e,35,0,t(e,36,0,s["ɵnov"](e.parent,0),n.action)),o=s["ɵunv"](e,35,1,t(e,37,0,s["ɵnov"](e.parent,1),n.resource));t(e,35,0,i,o)}))}function Us(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,zs)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](4,0,null,null,2,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Hs)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.loading),t(e,6,0,!n.loading)}),null)}function Ws(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-host-form",[],null,null,null,Us,Vs)),s["ɵdid"](1,114688,null,0,Gs,[qt.m,me.a,At.b,hi,ys.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ks=s["ɵccf"]("cd-host-form",Gs,Ws,{},{},[]);let $s=(()=>{class t{constructor(t){this.http=t}getMonitor(){return this.http.get("api/monitor")}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();class Zs{constructor(t,e){this.monitorService=t,this.i18n=e,this.inQuorum={columns:[{prop:"name",name:this.i18n("Name"),cellTransformation:Xr.a.routerLink},{prop:"rank",name:this.i18n("Rank")},{prop:"public_addr",name:this.i18n("Public Address")},{prop:"cdOpenSessions",name:this.i18n("Open Sessions"),cellTransformation:Xr.a.sparkline,comparator:(t,e)=>{const n=J.last(t),a=J.last(e);return n&&a&&n!==a?n>a?1:-1:0}}]},this.notInQuorum={columns:[{prop:"name",name:this.i18n("Name"),cellTransformation:Xr.a.routerLink},{prop:"rank",name:this.i18n("Rank")},{prop:"public_addr",name:this.i18n("Public Address")}]}}refresh(){this.monitorService.getMonitor().subscribe(t=>{t.in_quorum.map(t=>(t.cdOpenSessions=t.stats.num_sessions.map(t=>t[1]),t.cdLink="/perf_counters/mon/"+t.name,t.cdParams={fromLink:"/monitor"},t)),t.out_quorum.map(t=>(t.cdLink="/perf_counters/mon/"+t.name,t.cdParams={fromLink:"/monitor"},t)),this.inQuorum.data=[...t.in_quorum],this.notInQuorum.data=[...t.out_quorum],this.mon_status=t.mon_status})}}var Js=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Qs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,35,"table",[["class","table table-striped"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster ID"])),(t()(),s["ɵeld"](4,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["monmap modified"])),(t()(),s["ɵeld"](9,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](10,null,["",""])),(t()(),s["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["monmap epoch"])),(t()(),s["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](15,null,["",""])),(t()(),s["ɵeld"](16,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["quorum con"])),(t()(),s["ɵeld"](19,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](20,null,["",""])),(t()(),s["ɵeld"](21,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["quorum mon"])),(t()(),s["ɵeld"](24,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](25,null,["",""])),(t()(),s["ɵeld"](26,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](27,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["required con"])),(t()(),s["ɵeld"](29,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](30,null,["",""])),(t()(),s["ɵeld"](31,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](32,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["required mon"])),(t()(),s["ɵeld"](34,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](35,null,["",""]))],null,(function(t,e){var n=e.component;t(e,5,0,n.mon_status.monmap.fsid),t(e,10,0,n.mon_status.monmap.modified),t(e,15,0,n.mon_status.monmap.epoch),t(e,20,0,n.mon_status.features.quorum_con),t(e,25,0,n.mon_status.features.quorum_mon),t(e,30,0,n.mon_status.features.required_con),t(e,35,0,n.mon_status.features.required_mon)}))}function Xs(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"div",[["class","col-lg-4"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"legend",[["class","cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Status"])),(t()(),s["ɵand"](16777216,null,null,1,null,Qs)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](7,0,null,null,8,"div",[["class","col-lg-8"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"legend",[["class","in-quorum cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["In Quorum"])),(t()(),s["ɵeld"](10,0,null,null,1,"cd-table",[],null,null,null,Gr.b,Gr.a)),s["ɵdid"](11,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},null),(t()(),s["ɵeld"](12,0,null,null,1,"legend",[["class","in-quorum cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Not In Quorum"])),(t()(),s["ɵeld"](14,0,null,null,1,"cd-table",[],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.refresh()&&a),a}),Gr.b,Gr.a)),s["ɵdid"](15,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,6,0,n.mon_status),t(e,11,0,n.inQuorum.data,n.inQuorum.columns),t(e,15,0,n.notInQuorum.data,n.notInQuorum.columns)}),null)}function to(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-monitor",[],null,null,null,Xs,Js)),s["ɵdid"](1,49152,null,0,Zs,[$s,me.a],null,null)],null,null)}var eo=s["ɵccf"]("cd-monitor",Zs,to,{},{},[]);class no{constructor(){}ngOnInit(){}}var ao=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ro(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,[[1,4]],0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Daemons"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-service-daemon-list",[],null,null,null,vi,pi)),s["ɵdid"](5,4964352,null,0,gi,[me.a,hi,ci,Jr],{serviceName:[0,"serviceName"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Daemons"),t(e,5,0,n.selection.service_name)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function io(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tabsetChild:0}),(t()(),s["ɵand"](16777216,null,null,1,null,ro)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,e.component.selection)}),null)}class so extends ds.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.i18n=e,this.orchService=n,this.cephServiceService=a,this.hiddenColumns=[],this.checkingOrchestrator=!0,this.hasOrchestrator=!1,this.columns=[],this.services=[],this.isLoadingServices=!1,this.selection=new ti.a,this.permissions=this.authStorageService.getPermissions()}ngOnInit(){const t=[{name:this.i18n("Service"),prop:"service_name",flexGrow:1},{name:this.i18n("Container image name"),prop:"status.container_image_name",flexGrow:3},{name:this.i18n("Container image ID"),prop:"status.container_image_id",flexGrow:3,cellTransformation:Xr.a.truncate,customTemplateConfig:{length:12}},{name:this.i18n("Running"),prop:"status.running",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.a.checkIcon},{name:this.i18n("Size"),prop:"status.size",flexGrow:1},{name:this.i18n("Last Refreshed"),prop:"status.last_refresh",flexGrow:1}];this.columns=t.filter(t=>!this.hiddenColumns.includes(t.prop)),this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available})}ngOnChanges(){this.hasOrchestrator&&(this.services=[],this.table.reloadData())}getServices(t){this.isLoadingServices||(this.isLoadingServices=!0,this.cephServiceService.list().subscribe(t=>{this.services=t,this.isLoadingServices=!1},()=>{this.isLoadingServices=!1,this.services=[],t.error()}))}}var oo=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function uo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,Zr,$r)),s["ɵdid"](1,49152,null,0,Kr,[],null,null)],null,null)}function lo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","service_name"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getServices(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](2,2867200,[[1,4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],forceIdentifier:[6,"forceIdentifier"],selectionType:[7,"selectionType"]},{fetchData:"fetchData",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,3,1,"cd-service-details",[["cdTableDetail",""]],null,null,null,io,ao)),s["ɵdid"](4,114688,null,0,no,[],{permissions:[0,"permissions"],selection:[1,"selection"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.services,n.columns,"flex",!0,6e4,"service_name","true","single"),t(e,4,0,n.permissions,n.expandedRow)}),null)}function co(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{table:0}),(t()(),s["ɵand"](16777216,null,null,1,null,uo)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,lo)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,!n.hasOrchestrator),t(e,4,0,n.hasOrchestrator)}),null)}function fo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-services",[],null,null,null,co,oo)),s["ɵdid"](1,638976,null,0,so,[vt.a,me.a,Jr,ci],null,null)],(function(t,e){t(e,1,0)}),null)}var ho=s["ɵccf"]("cd-services",so,fo,{hostname:"hostname",hiddenColumns:"hiddenColumns"},{},[]),go=n("xSw7"),po=n("GgAd"),bo=n("j8L6"),mo=n("b5OY"),yo=n("pxLl");class vo{constructor(){this.last={}}ngOnChanges(){this.render()}hexdigits(t){const e=Math.floor(255*t).toString(16);return 1===e.length?"0"+e:e}hexcolor(t,e,n){return"#"+this.hexdigits(t)+this.hexdigits(e)+this.hexdigits(n)}render(){if(!this.histogram)return;let t=0;J.each(this.histogram.values,(e,n)=>{J.each(e,(e,a)=>{let r;r=this.last&&this.last[n]&&this.last[n][a]?e-this.last[n][a]:e,t=Math.max(t,r)})}),this.valuesStyle=this.histogram.values.map((e,n)=>e.map((e,a)=>{const r=t?(this.last&&this.last[n]&&this.last[n][a]?e-this.last[n][a]:e)/t:0;return{backgroundColor:this.hexcolor(1-r,r,0)}})),this.last=this.histogram.values}}var xo=s["ɵcrt"]({encapsulation:0,styles:[["table[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]{height:10px}table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{width:10px;height:10px}"]],data:{}});function _o(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgStyleImpl"],i["ɵNgStyleR2Impl"],[s.ElementRef,s.KeyValueDiffers,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgStyle,[i["ɵNgStyleImpl"]],{ngStyle:[0,"ngStyle"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function To(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,_o)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.context.$implicit)}),null)}function Oo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"table",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,To)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.valuesStyle)}),null)}class wo{constructor(t,e){this.osdService=t,this.authStorageService=e,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){J.get(this,"osd.id")!==J.get(this,"selection.id")&&(this.osd=this.selection),J.isNumber(J.get(this,"osd.id"))&&this.refresh()}refresh(){this.osdService.getDetails(this.osd.id).subscribe(t=>{this.osd.details=t,this.osd.histogram_failed="",J.isObject(t.histogram)||(this.osd.histogram_failed=t.histogram,this.osd.details.histogram=void 0)})}}var So=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Io(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[],null,[[null,"fetchData"]],(function(t,e,n){var a=!0;return"fetchData"===e&&(a=!1!==t.component.refresh()&&a),a}),xi.b,xi.a)),s["ɵdid"](1,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},{fetchData:"fetchData"})],(function(t,e){var n=e.component;t(e,1,0,null==n.osd?null:null==n.osd.details?null:n.osd.details.osd_metadata)}),null)}function No(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["Metadata not available"]))],(function(t,e){t(e,1,0,"warning")}),null)}function Co(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-performance-counter",[["serviceType","osd"]],null,null,null,bo.b,bo.a)),s["ɵdid"](1,114688,null,0,mo.a,[yo.a,me.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null)],(function(t,e){var n=e.component;t(e,1,0,"osd",null==n.osd?null:n.osd.id)}),null)}function Ro(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](2,0,["Histogram not available: ",""]))],(function(t,e){t(e,1,0,"warning")}),(function(t,e){t(e,2,0,e.component.osd.histogram_failed)}))}function Ao(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Writes"])),(t()(),s["ɵeld"](4,0,null,null,1,"cd-osd-performance-histogram",[],null,null,null,Oo,xo)),s["ɵdid"](5,573440,null,0,vo,[],{histogram:[0,"histogram"]},null),(t()(),s["ɵeld"](6,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Reads"])),(t()(),s["ɵeld"](9,0,null,null,1,"cd-osd-performance-histogram",[],null,null,null,Oo,xo)),s["ɵdid"](10,573440,null,0,vo,[],{histogram:[0,"histogram"]},null)],(function(t,e){var n=e.component;t(e,5,0,null==n.osd?null:null==n.osd.details?null:null==n.osd.details.histogram?null:null==n.osd.details.histogram.osd?null:n.osd.details.histogram.osd.op_w_latency_in_bytes_histogram),t(e,10,0,null==n.osd?null:null==n.osd.details?null:null==n.osd.details.histogram?null:null==n.osd.details.histogram.osd?null:n.osd.details.histogram.osd.op_r_latency_out_bytes_histogram)}),null)}function ko(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","GrafanaStyles.two"],["uid","CrAHE0iZz"]],null,null,null,qr.b,qr.a)),s["ɵdid"](3,638976,null,0,jr.a,[Fr.b,re.a,me.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"osd-device-details?var-osd=osd."+n.osd.id,"GrafanaStyles.two","CrAHE0iZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Eo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,30,"tabset",[["id","tabset-osd-details"]],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Devices"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-device-list",[],null,null,null,Xi,Bi)),s["ɵdid"](5,638976,null,0,zi,[hi,me.a,i.DatePipe,wi],{osdId:[0,"osdId"]},null),(t()(),s["ɵeld"](6,0,null,0,3,"tab",[["heading","Attributes (OSD map)"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](8,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](9,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](10,0,null,0,4,"tab",[["heading","Metadata"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](11,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Io)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["noMetaData",2]],null,0,null,No)),(t()(),s["ɵeld"](15,0,null,0,3,"tab",[["heading","Device health"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](16,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](17,0,null,null,1,"cd-smart-list",[],null,null,null,Vi,Ii)),s["ɵdid"](18,638976,null,0,Si,[me.a,wi,hi],{osdId:[0,"osdId"]},null),(t()(),s["ɵeld"](19,0,null,0,3,"tab",[["heading","Performance counter"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](20,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Co)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](23,0,null,0,5,"tab",[["heading","Histogram"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](24,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ro)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ao)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ko)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Devices"),t(e,5,0,null==n.osd?null:n.osd.id),t(e,7,0,"Attributes (OSD map)"),t(e,9,0,null==n.osd?null:null==n.osd.details?null:n.osd.details.osd_map),t(e,11,0,"Metadata"),t(e,13,0,null==n.osd?null:null==n.osd.details?null:n.osd.details.osd_metadata,s["ɵnov"](e,14)),t(e,16,0,"Device health"),t(e,18,0,null==n.osd?null:n.osd.id),t(e,20,0,"Performance counter"),t(e,22,0,null==n.osd?null:n.osd.details),t(e,24,0,"Histogram"),t(e,26,0,null==n.osd?null:n.osd.histogram_failed),t(e,28,0,null==n.osd?null:null==n.osd.details?null:n.osd.details.histogram),t(e,30,0,n.grafanaPermission.read)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby),t(e,10,0,s["ɵnov"](e,11).id,s["ɵnov"](e,11).active,s["ɵnov"](e,11).addClass,s["ɵnov"](e,11).role,s["ɵnov"](e,11).ariaLabelledby),t(e,15,0,s["ɵnov"](e,16).id,s["ɵnov"](e,16).active,s["ɵnov"](e,16).addClass,s["ɵnov"](e,16).role,s["ɵnov"](e,16).ariaLabelledby),t(e,19,0,s["ɵnov"](e,20).id,s["ɵnov"](e,20).active,s["ɵnov"](e,20).addClass,s["ɵnov"](e,20).role,s["ɵnov"](e,20).ariaLabelledby),t(e,23,0,s["ɵnov"](e,24).id,s["ɵnov"](e,24).active,s["ɵnov"](e,24).addClass,s["ɵnov"](e,24).role,s["ɵnov"](e,24).ariaLabelledby)}))}function Lo(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Eo)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}function Do(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-details",[],null,null,null,Lo,So)),s["ɵdid"](1,573440,null,0,wo,[wi,vt.a],null,null)],null,null)}var Po=s["ɵccf"]("cd-osd-details",wo,Do,{selection:"selection"},{},[]),Mo=n("cp0P"),qo=n("OLbh");class jo{constructor(t,e,n,a,r){this.bsModalRef=t,this.authStorageService=e,this.osdService=n,this.notificationService=a,this.i18n=r,this.osdFlagsForm=new $.k({}),this.allFlags={noin:{code:"noin",name:this.i18n("No In"),value:!1,description:this.i18n("OSDs that were previously marked out will not be marked back in when they start")},noout:{code:"noout",name:this.i18n("No Out"),value:!1,description:this.i18n("OSDs will not automatically be marked out after the configured interval")},noup:{code:"noup",name:this.i18n("No Up"),value:!1,description:this.i18n("OSDs are not allowed to start")},nodown:{code:"nodown",name:this.i18n("No Down"),value:!1,description:this.i18n("OSD failure reports are being ignored, such that the monitors will not mark OSDs down")},pause:{code:"pause",name:this.i18n("Pause"),value:!1,description:this.i18n("Pauses reads and writes")},noscrub:{code:"noscrub",name:this.i18n("No Scrub"),value:!1,description:this.i18n("Scrubbing is disabled")},"nodeep-scrub":{code:"nodeep-scrub",name:this.i18n("No Deep Scrub"),value:!1,description:this.i18n("Deep Scrubbing is disabled")},nobackfill:{code:"nobackfill",name:this.i18n("No Backfill"),value:!1,description:this.i18n("Backfilling of PGs is suspended")},norebalance:{code:"norebalance",name:this.i18n("No Rebalance"),value:!1,description:this.i18n("OSD will choose not to backfill unless PG is also degraded")},norecover:{code:"norecover",name:this.i18n("No Recover"),value:!1,description:this.i18n("Recovery of PGs is suspended")},sortbitwise:{code:"sortbitwise",name:this.i18n("Bitwise Sort"),value:!1,description:this.i18n("Use bitwise sort"),disabled:!0},purged_snapdirs:{code:"purged_snapdirs",name:this.i18n("Purged Snapdirs"),value:!1,description:this.i18n("OSDs have converted snapsets"),disabled:!0},recovery_deletes:{code:"recovery_deletes",name:this.i18n("Recovery Deletes"),value:!1,description:this.i18n("Deletes performed during recovery instead of peering"),disabled:!0},pglog_hardlimit:{code:"pglog_hardlimit",name:this.i18n("PG Log Hard Limit"),value:!1,description:this.i18n("Puts a hard limit on pg log length"),disabled:!0}},this.unknownFlags=[],this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.osdService.getFlags().subscribe(t=>{t.forEach(t=>{this.allFlags[t]?this.allFlags[t].value=!0:this.unknownFlags.push(t)}),this.flags=J.toArray(this.allFlags)})}submitAction(){const t=this.flags.filter(t=>t.value).map(t=>t.code).concat(this.unknownFlags);this.osdService.updateFlags(t).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n("Updated OSD Flags")),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}var Fo=n("MuvH");let Go=(()=>{class t{static getType(t){const e=J.find(this.knownTypes,e=>e.name===t);if(void 0!==e)return e;throw new Error('Found unknown type "'+t+'" for config option.')}static getTypeValidators(e){const n=t.getType(e.type);if("bool"===n.name||"str"===n.name)return;const a={validators:[],patternHelpText:n.patternHelpText};return n.isNumberType?(e.max&&""!==e.max&&(a.max=e.max,a.validators.push($.B.max(e.max))),e.min&&""!==e.min?(a.min=e.min,a.validators.push($.B.min(e.min))):"defaultMin"in n&&(a.min=n.defaultMin,a.validators.push($.B.min(n.defaultMin))),a.validators.push("float"===e.type?Fs.a.decimalNumber():Fs.a.number(n.allowsNegative))):"addr"===e.type?a.validators=[Fs.a.ip()]:"uuid"===e.type&&(a.validators=[Fs.a.uuid()]),a}static getTypeStep(t,e){if(["uint","int","size","secs"].includes(t))return 1;if("float"===t){if(null!==e&&-1!==e.toString().indexOf(".")){const t=e.toString().split(".");return Math.pow(10,-t[1].length)}return.1}}}return t.knownTypes=[{name:"uint",inputType:"number",humanReadable:"Unsigned integer value",defaultMin:0,patternHelpText:"The entered value needs to be an unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"int",inputType:"number",humanReadable:"Integer value",patternHelpText:"The entered value needs to be a number.",isNumberType:!0,allowsNegative:!0},{name:"size",inputType:"number",humanReadable:"Unsigned integer value (>=16bit)",defaultMin:0,patternHelpText:"The entered value needs to be a unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"secs",inputType:"number",humanReadable:"Number of seconds",defaultMin:1,patternHelpText:"The entered value needs to be a number >= 1.",isNumberType:!0,allowsNegative:!1},{name:"float",inputType:"number",humanReadable:"Double value",patternHelpText:"The entered value needs to be a number or decimal.",isNumberType:!0,allowsNegative:!0},{name:"str",inputType:"text",humanReadable:"Text",isNumberType:!1},{name:"addr",inputType:"text",humanReadable:"IPv4 or IPv6 address",patternHelpText:"The entered value needs to be a valid IP address.",isNumberType:!1},{name:"uuid",inputType:"text",humanReadable:"UUID",patternHelpText:"The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",isNumberType:!1},{name:"bool",inputType:"checkbox",humanReadable:"Boolean value",isNumberType:!1}],t})();class Vo{constructor(t){this.configService=t,this.optionNames=[],this.optionsForm=new js.a({}),this.optionsFormDir=new $.t([],[]),this.optionsFormGroupName="",this.optionsFormShowReset=!0,this.icons=ht.a,this.options=[],this.optionsFormGroup=new js.a({})}static optionNameToText(t){const e=["mon","mgr","osd","mds","client"];return t.split("_").filter((t,n)=>0!==n||!e.includes(t)).map(t=>t.charAt(0).toUpperCase()+t.substring(1)).join(" ")}ngOnInit(){this.createForm(),this.loadStoredData()}createForm(){this.optionsForm.addControl(this.optionsFormGroupName,this.optionsFormGroup),this.optionNames.forEach(t=>{this.optionsFormGroup.addControl(t,new $.i(null))})}getStep(t,e){return Go.getTypeStep(t,e)}loadStoredData(){this.configService.filter(this.optionNames).subscribe(t=>{this.options=t.map(t=>{const e=this.optionsForm.get(t.name),n=Go.getTypeValidators(t);return t.additionalTypeInfo=Go.getType(t.type),t.text=Vo.optionNameToText(t.name),t.value=J.find(t.value,t=>"osd"===t.section),t.value&&e.setValue("bool"===t.additionalTypeInfo.name?"true"===t.value.value:t.value.value),n&&(t.patternHelpText=n.patternHelpText,"max"in n&&""!==n.max&&(t.maxValue=n.max),"min"in n&&""!==n.min&&(t.minValue=n.min),e.setValidators(n.validators)),t})})}saveValues(){const t={};return this.optionNames.forEach(e=>{const n=this.optionsForm.getValue(e);null!==n&&""!==n&&(t[e]={section:"osd",value:n})}),this.configService.bulkCreate({options:t})}resetValue(t){this.configService.delete(t,"osd").subscribe(()=>{this.optionsForm.get(t).reset()})}}let zo=(()=>{class t{}return t.basicOptions=["osd_scrub_during_recovery","osd_scrub_begin_hour","osd_scrub_end_hour","osd_scrub_begin_week_day","osd_scrub_end_week_day","osd_scrub_min_interval","osd_scrub_max_interval","osd_deep_scrub_interval","osd_scrub_auto_repair","osd_max_scrubs","osd_scrub_priority","osd_scrub_sleep"],t.advancedOptions=["osd_scrub_auto_repair_num_errors","osd_debug_deep_scrub_sleep","osd_deep_scrub_keys","osd_deep_scrub_large_omap_object_key_threshold","osd_deep_scrub_large_omap_object_value_sum_threshold","osd_deep_scrub_randomize_ratio","osd_deep_scrub_stride","osd_deep_scrub_update_digest_min_age","osd_requested_scrub_priority","osd_scrub_backoff_ratio","osd_scrub_chunk_max","osd_scrub_chunk_min","osd_scrub_cost","osd_scrub_interval_randomize_ratio","osd_scrub_invalid_stats","osd_scrub_load_threshold","osd_scrub_max_preemptions"],t})();class Bo{constructor(t,e,n,a,r){this.bsModalRef=t,this.authStorageService=e,this.notificationService=n,this.i18n=a,this.actionLabels=r,this.basicOptions=zo.basicOptions,this.advancedOptions=zo.advancedOptions,this.advancedEnabled=!1,this.osdPgScrubForm=new js.a({}),this.resource=this.i18n("PG scrub options"),this.action=this.actionLabels.EDIT,this.permissions=this.authStorageService.getPermissions()}submitAction(){const t=[this.basicOptionsValues.saveValues()];this.advancedOptionsValues&&t.push(this.advancedOptionsValues.saveValues()),Object(Mo.a)(t).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n("Updated PG scrub options")),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}class Yo{constructor(t,e,n,a,r,i){this.bsModalRef=t,this.authStorageService=e,this.configService=n,this.notificationService=a,this.i18n=r,this.osdService=i,this.priorities=[],this.priorityAttrs={},this.permissions=this.authStorageService.getPermissions(),this.priorities=this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES,this.osdRecvSpeedForm=new js.a({priority:new $.i(null,{validators:[$.B.required]}),customizePriority:new $.i(!1)}),this.priorityAttrs={osd_max_backfills:{text:this.i18n("Max Backfills"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_active:{text:this.i18n("Recovery Max Active"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_single_start:{text:this.i18n("Recovery Max Single Start"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_sleep:{text:this.i18n("Recovery Sleep"),desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0}},Object.keys(this.priorityAttrs).forEach(t=>{this.osdRecvSpeedForm.addControl(t,new $.i(null,{validators:[$.B.required]}))})}ngOnInit(){this.configService.filter(Object.keys(this.priorityAttrs)).subscribe(t=>{const e=this.getCurrentValues(t);this.detectPriority(e.values,t=>{this.setPriority(t)}),this.setDescription(e.configOptions),this.setValidators(e.configOptions)})}detectPriority(t,e){const n=J.find(this.priorities,e=>J.isEqual(e.values,t));return this.osdRecvSpeedForm.controls.customizePriority.setValue(!1),n?e(n):4===Object.entries(t).length?(this.osdRecvSpeedForm.controls.customizePriority.setValue(!0),e(Object({name:"custom",text:this.i18n("Custom"),values:t}))):e(this.priorities[0])}getCurrentValues(t){const e={values:{},configOptions:[]};return t.forEach(t=>{e.configOptions.push(t),"value"in t?t.value.forEach(n=>{"osd"===n.section&&(e.values[t.name]=Number(n.value))}):"default"in t&&null!==t.default&&(e.values[t.name]=Number(t.default))}),e}setDescription(t){t.forEach(t=>{""!==t.desc&&(this.priorityAttrs[t.name].desc=t.desc)})}setPriority(t){const e=J.find(this.priorities,t=>"custom"===t.name);"custom"===t.name?e||this.priorities.push(t):e&&this.priorities.splice(this.priorities.indexOf(e),1),this.osdRecvSpeedForm.controls.priority.setValue(t.name),Object.entries(t.values).forEach(([t,e])=>{this.osdRecvSpeedForm.controls[t].setValue(e)})}setValidators(t){t.forEach(t=>{const e=Go.getTypeValidators(t);e?(e.validators.push($.B.required),"max"in e&&""!==e.max&&(this.priorityAttrs[t.name].maxValue=e.max),"min"in e&&""!==e.min&&(this.priorityAttrs[t.name].minValue=e.min),this.priorityAttrs[t.name].patternHelpText=e.patternHelpText,this.osdRecvSpeedForm.controls[t.name].setValidators(e.validators)):this.osdRecvSpeedForm.controls[t.name].setValidators($.B.required)})}onCustomizePriorityChange(){const t={};if(Object.keys(this.priorityAttrs).forEach(e=>{t[e]=this.osdRecvSpeedForm.getValue(e)}),this.osdRecvSpeedForm.getValue("customizePriority")){const e={name:"custom",text:this.i18n("Custom"),values:t};this.setPriority(e)}else this.detectPriority(t,t=>{this.setPriority(t)})}onPriorityChange(t){const e=J.find(this.priorities,e=>e.name===t)||this.priorities[0];this.osdRecvSpeedForm.get("customizePriority").setValue(!1),this.setPriority(e)}submitAction(){const t={};Object.keys(this.priorityAttrs).forEach(e=>{t[e]={section:"osd",value:this.osdRecvSpeedForm.getValue(e)}}),this.configService.bulkCreate({options:t}).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n('Updated OSD recovery speed priority "{{value}}"',{value:this.osdRecvSpeedForm.getValue("priority")})),this.bsModalRef.hide()},()=>{this.bsModalRef.hide()})}}var Ho=n("2EZI");class Uo{constructor(t,e,n){this.bsModalRef=t,this.osdService=e,this.fb=n,this.currentWeight=1}get weight(){return this.reweightForm.get("weight")}ngOnInit(){this.reweightForm=this.fb.group({weight:this.fb.control(this.currentWeight,[$.B.required,$.B.max(1),$.B.min(0)])})}reweight(){this.osdService.reweight(this.osdId,this.reweightForm.value.weight).subscribe(()=>this.bsModalRef.hide())}}class Wo{constructor(t,e,n,a,r){this.bsModalRef=t,this.osdService=e,this.notificationService=n,this.i18n=a,this.joinPipe=r,this.selected=[]}ngOnInit(){this.scrubForm=new $.k({})}scrub(){Object(Mo.a)(this.selected.map(t=>this.osdService.scrub(t,this.deep))).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n("{{operation}} was initialized in the following OSD(s): {{id}}",{operation:this.deep?"Deep scrub":"Scrub",id:this.joinPipe.transform(this.selected)})),this.bsModalRef.hide()},()=>this.bsModalRef.hide())}}const Ko=new ls.a("osd");class $o extends ds.a{constructor(t,e,n,a,r,i,s,o,u,l,d){super(),this.authStorageService=t,this.osdService=e,this.dimlessBinaryPipe=n,this.modalService=a,this.i18n=r,this.urlBuilder=i,this.router=s,this.depCheckerService=o,this.taskWrapper=u,this.actionLabels=l,this.notificationService=d,this.icons=ht.a,this.selection=new ti.a,this.osds=[],this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:ht.a.add,click:()=>{this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.CREATE,this.i18n("OSD"),()=>{this.router.navigate([this.urlBuilder.getCreate()])})},canBePrimary:t=>!t.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:ht.a.edit,click:()=>this.editAction()},{name:this.actionLabels.SCRUB,permission:"update",icon:ht.a.analyse,click:()=>this.scrubAction(!1),disable:()=>!this.hasOsdSelected,canBePrimary:t=>t.hasSelection},{name:this.actionLabels.DEEP_SCRUB,permission:"update",icon:ht.a.deepCheck,click:()=>this.scrubAction(!0),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.REWEIGHT,permission:"update",click:()=>this.reweight(),disable:()=>!this.hasOsdSelected||!this.selection.hasSingleSelection,icon:ht.a.reweight},{name:this.actionLabels.MARK_OUT,permission:"update",click:()=>this.showConfirmationModal(this.i18n("out"),this.osdService.markOut),disable:()=>this.isNotSelectedOrInState("out"),icon:ht.a.left},{name:this.actionLabels.MARK_IN,permission:"update",click:()=>this.showConfirmationModal(this.i18n("in"),this.osdService.markIn),disable:()=>this.isNotSelectedOrInState("in"),icon:ht.a.right},{name:this.actionLabels.MARK_DOWN,permission:"update",click:()=>this.showConfirmationModal(this.i18n("down"),this.osdService.markDown),disable:()=>this.isNotSelectedOrInState("down"),icon:ht.a.down},{name:this.actionLabels.MARK_LOST,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("Mark"),this.i18n("OSD lost"),this.i18n("marked lost"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",this.osdService.markLost),disable:()=>this.isNotSelectedOrInState("up"),icon:ht.a.flatten},{name:this.actionLabels.PURGE,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("Purge"),this.i18n("OSD"),this.i18n("purged"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",t=>(this.selection=new ti.a,this.osdService.purge(t))),disable:()=>this.isNotSelectedOrInState("up"),icon:ht.a.erase},{name:this.actionLabels.DESTROY,permission:"delete",click:()=>this.showCriticalConfirmationModal(this.i18n("destroy"),this.i18n("OSD"),this.i18n("destroyed"),t=>this.osdService.safeToDestroy(JSON.stringify(t)),"is_safe_to_destroy",t=>(this.selection=new ti.a,this.osdService.destroy(t))),disable:()=>this.isNotSelectedOrInState("up"),icon:ht.a.destroyCircle},{name:this.actionLabels.DELETE,permission:"delete",click:()=>this.delete(),disable:()=>!this.hasOsdSelected,icon:ht.a.destroy}]}static collectStates(t){const e=[t.in?"in":"out"];return t.up?e.push("up"):t.state.includes("destroyed")?e.push("destroyed"):e.push("down"),e}ngOnInit(){this.clusterWideActions=[{name:this.i18n("Flags"),icon:ht.a.flag,click:()=>this.configureFlagsAction(),permission:"read",visible:()=>this.permissions.osd.read},{name:this.i18n("Recovery Priority"),icon:ht.a.deepCheck,click:()=>this.configureQosParamsAction(),permission:"read",visible:()=>this.permissions.configOpt.read},{name:this.i18n("PG scrub"),icon:ht.a.analyse,click:()=>this.configurePgScrubAction(),permission:"read",visible:()=>this.permissions.configOpt.read}],this.columns=[{prop:"host.name",name:this.i18n("Host")},{prop:"id",name:this.i18n("ID"),flexGrow:1,cellTransformation:Xr.a.bold},{prop:"collectedStates",name:this.i18n("Status"),flexGrow:1,cellTransformation:Xr.a.badge,customTemplateConfig:{map:{in:{class:"badge-success"},up:{class:"badge-success"},down:{class:"badge-danger"},out:{class:"badge-danger"},destroyed:{class:"badge-danger"}}}},{prop:"tree.device_class",name:this.i18n("Device class"),flexGrow:1,cellTransformation:Xr.a.badge,customTemplateConfig:{map:{hdd:{class:"badge-hdd"},ssd:{class:"badge-ssd"}}}},{prop:"stats.numpg",name:this.i18n("PGs"),flexGrow:1},{prop:"stats.stat_bytes",name:this.i18n("Size"),flexGrow:1,pipe:this.dimlessBinaryPipe},{prop:"stats.usage",name:this.i18n("Usage"),cellTemplate:this.osdUsageTpl},{prop:"stats_history.out_bytes",name:this.i18n("Read bytes"),cellTransformation:Xr.a.sparkline},{prop:"stats_history.in_bytes",name:this.i18n("Write bytes"),cellTransformation:Xr.a.sparkline},{prop:"stats.op_r",name:this.i18n("Read ops"),cellTransformation:Xr.a.perSecond},{prop:"stats.op_w",name:this.i18n("Write ops"),cellTransformation:Xr.a.perSecond}]}getSelectedOsdIds(){const t=this.osds.map(t=>t.id);return this.selection.selected.map(t=>t.id).filter(e=>t.includes(e))}getSelectedOsds(){return this.osds.filter(t=>!J.isUndefined(t)&&this.getSelectedOsdIds().includes(t.id))}get hasOsdSelected(){return this.getSelectedOsdIds().length>0}updateSelection(t){this.selection=t}isNotSelectedOrInState(t){const e=this.getSelectedOsds();if(0===e.length)return!0;switch(t){case"in":return e.some(t=>1===t.in);case"out":return e.some(t=>1!==t.in);case"down":return e.some(t=>1!==t.up);case"up":return e.some(t=>1===t.up)}}getOsdList(){this.osdService.getList().subscribe(t=>{this.osds=t.map(t=>(t.collectedStates=$o.collectStates(t),t.stats_history.out_bytes=t.stats_history.op_out_bytes.map(t=>t[1]),t.stats_history.in_bytes=t.stats_history.op_in_bytes.map(t=>t[1]),t.stats.usage=t.stats.stat_bytes_used/t.stats.stat_bytes,t.cdIsBinary=!0,t))})}editAction(){const t=J.filter(this.osds,["id",this.selection.first().id]).pop();this.modalService.show(Qr.a,{initialState:{titleText:this.i18n("Edit OSD: {{id}}",{id:t.id}),fields:[{type:"text",name:"deviceClass",value:t.tree.device_class,label:this.i18n("Device class"),required:!0}],submitButtonText:this.i18n("Edit OSD"),onSubmit:e=>{this.osdService.update(t.id,e.deviceClass).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n('Updated OSD "{{id}}"',{id:t.id})),this.getOsdList()})}}})}scrubAction(t){if(!this.hasOsdSelected)return;const e={selected:this.getSelectedOsdIds(),deep:t};this.bsModalRef=this.modalService.show(Wo,{initialState:e})}configureFlagsAction(){this.bsModalRef=this.modalService.show(jo,{})}showConfirmationModal(t,e){this.bsModalRef=this.modalService.show(qo.a,{initialState:{titleText:this.i18n("Mark OSD {{markAction}}",{markAction:t}),buttonText:this.i18n("Mark {{markAction}}",{markAction:t}),bodyTpl:this.markOsdConfirmationTpl,bodyContext:{markActionDescription:t},onSubmit:()=>{Object(Mo.a)(this.getSelectedOsdIds().map(t=>e.call(this.osdService,t))).subscribe(()=>this.bsModalRef.hide())}}})}reweight(){const t=this.osds.filter(t=>t.id===this.selection.first().id).pop();this.modalService.show(Uo,{initialState:{currentWeight:t.weight,osdId:t.id}})}delete(){const t=new js.a({preserve:new $.i(!1)});this.depCheckerService.checkOrchestratorOrModal(this.actionLabels.DELETE,this.i18n("OSD"),()=>{this.showCriticalConfirmationModal(this.i18n("delete"),this.i18n("OSD"),this.i18n("deleted"),t=>this.osdService.safeToDelete(JSON.stringify(t)),"is_safe_to_delete",e=>(this.selection=new ti.a,this.taskWrapper.wrapTaskAroundCall({task:new hs.a("osd/"+At.e.DELETE,{svc_id:e}),call:this.osdService.delete(e,t.value.preserve,!0)})),!0,t,this.deleteOsdExtraTpl)})}showCriticalConfirmationModal(t,e,n,a,r,i,s=!1,o,u){a(this.getSelectedOsdIds()).subscribe(a=>{const l=this.modalService.show(cs.a,{initialState:{actionDescription:t,itemDescription:e,bodyTemplate:this.criticalConfirmationTpl,bodyContext:{safeToPerform:a[r],message:a.message,actionDescription:n,osdIds:this.getSelectedOsdIds()},childFormGroup:o,childFormGroupTemplate:u,submitAction:()=>{const t=Object(Mo.a)(this.getSelectedOsdIds().map(t=>i.call(this.osdService,t)));s?t.subscribe(void 0,()=>{this.getOsdList(),l.hide()},()=>l.hide()):t.subscribe(()=>{this.getOsdList(),l.hide()},()=>l.hide())}}})})}configureQosParamsAction(){this.bsModalRef=this.modalService.show(Yo,{})}configurePgScrubAction(){this.bsModalRef=this.modalService.show(Bo,{class:"modal-lg"})}}var Zo=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Jo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,go.b,go.a)),s["ɵdid"](1,573440,null,0,po.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(t,e){t(e,1,0,e.context.row.stats.stat_bytes,e.context.row.stats.stat_bytes_used)}),null)}function Qo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Overall Performance"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","three"],["uid","lo02I1Aiz"]],null,null,null,qr.b,qr.a)),s["ɵdid"](3,638976,null,0,jr.a,[Fr.b,re.a,me.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){t(e,1,0,"Overall Performance"),t(e,3,0,"osd-overview?","three","lo02I1Aiz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function Xo(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["OSD(s) ",""])),s["ɵppd"](3,1),(t()(),s["ɵted"](-1,null,[" will be marked\n"])),(t()(),s["ɵeld"](5,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵted"](-1,null,[" if you proceed."]))],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent,0),n.getSelectedOsdIds()));t(e,2,0,a),t(e,6,0,e.context.markActionDescription)}))}function tu(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["OSD is"]))],null,null)}function eu(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["OSDs are"]))],null,null)}function nu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","danger"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"cd-alert-panel",[["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](2,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The "])),(t()(),s["ɵeld"](4,0,null,0,5,null,null,null,null,null,null,null)),s["ɵdid"](5,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tu)),s["ɵdid"](7,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,eu)),s["ɵdid"](9,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](10,0,[" not safe to be ","! ",""]))],(function(t,e){var n=e.component;t(e,2,0,"warning"),t(e,5,0,n.selection.hasSingleSelection),t(e,7,0,"true"),t(e,9,0,"false")}),(function(t,e){t(e,10,0,e.parent.context.actionDescription,e.parent.context.message)}))}function au(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,nu)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](2,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](4,null,["OSD ",""])),s["ɵppd"](5,1),(t()(),s["ɵted"](-1,null,[" will be "])),(t()(),s["ɵeld"](7,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""])),(t()(),s["ɵted"](-1,null,[" if you proceed."]))],(function(t,e){t(e,1,0,!e.context.safeToPerform)}),(function(t,e){var n=s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent,0),e.context.osdIds));t(e,4,0,n),t(e,8,0,e.context.actionDescription)}))}function ru(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,22,null,null,null,null,(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,1).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,1).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,4).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](3,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](4,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](5,0,null,null,17,null,null,null,null,null,null,null)),s["ɵdid"](6,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](9,0,null,null,13,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](10,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,8,{FormControlNames:1}),s["ɵqud"](603979776,9,{messagesBlock:0}),(t()(),s["ɵeld"](13,0,null,0,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","preserve"],["id","preserve"],["name","preserve"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,15).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,15).onTouched()&&a),a}),null,null)),s["ɵdid"](15,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](17,671744,[[8,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](21,0,null,null,1,"label",[["class","custom-control-label"],["for","preserve"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Preserve OSD ID(s) for replacement."]))],(function(t,e){t(e,1,0,e.context.form),t(e,4,0,e.context.form),t(e,6,0,"child"),t(e,10,0),t(e,17,0,"preserve"),t(e,20,0,"preserve")}),(function(t,e){t(e,9,0,s["ɵnov"](e,10).hasErrors,s["ɵnov"](e,10).hasSuccess),t(e,14,0,s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,20).validClass,s["ɵnov"](e,20).invalidClass)}))}function iu(t){return s["ɵvid"](0,[s["ɵpid"](0,ps.a,[]),s["ɵqud"](402653184,1,{osdUsageTpl:0}),s["ɵqud"](402653184,2,{markOsdConfirmationTpl:0}),s["ɵqud"](402653184,3,{criticalConfirmationTpl:0}),s["ɵqud"](402653184,4,{tableComponent:0}),s["ɵqud"](671088640,5,{reweightBodyTpl:0}),s["ɵqud"](671088640,6,{safeToDestroyBodyTpl:0}),s["ɵqud"](671088640,7,{deleteOsdExtraTpl:0}),(t()(),s["ɵeld"](8,0,null,null,16,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](9,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](10,0,null,0,12,"tab",[["heading","OSDs List"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](11,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](12,0,null,null,9,"cd-table",[["selectionType","multiClick"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getOsdList()&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](13,2867200,[[4,4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"],updateSelectionOnRefresh:[4,"updateSelectionOnRefresh"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](14,0,null,1,5,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,1,"cd-table-actions",[["class","btn-group"],["id","osd-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](16,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](17,0,null,null,2,"cd-table-actions",[["btnColor","light"],["class","btn-group"],["dropDownOnly","Cluster-wide configuration"],["id","cluster-wide-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](18,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"],btnColor:[3,"btnColor"],dropDownOnly:[4,"dropDownOnly"]},null),s["ɵpod"](19,{read:0}),(t()(),s["ɵeld"](20,0,null,3,1,"cd-osd-details",[["cdTableDetail",""]],null,null,null,Lo,So)),s["ɵdid"](21,573440,null,0,wo,[wi,vt.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[1,2],["osdUsageTpl",2]],null,0,null,Jo)),(t()(),s["ɵand"](16777216,null,0,1,null,Qo)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[2,2],["markOsdConfirmationTpl",2]],null,0,null,Xo)),(t()(),s["ɵand"](0,[[3,2],["criticalConfirmationTpl",2]],null,0,null,au)),(t()(),s["ɵand"](0,[[7,2],["deleteOsdExtraTpl",2]],null,0,null,ru))],(function(t,e){var n=e.component;t(e,11,0,"OSDs List"),t(e,13,0,n.osds,n.columns,!0,"multiClick","never"),t(e,16,0,n.permissions.osd,n.selection,n.tableActions);var a=t(e,19,0,!0);t(e,18,0,a,n.selection,n.clusterWideActions,"light","Cluster-wide configuration"),t(e,21,0,n.expandedRow),t(e,24,0,n.permissions.grafana.read)}),(function(t,e){t(e,8,0,s["ɵnov"](e,9).clazz),t(e,10,0,s["ɵnov"](e,11).id,s["ɵnov"](e,11).active,s["ɵnov"](e,11).addClass,s["ɵnov"](e,11).role,s["ɵnov"](e,11).ariaLabelledby)}))}function su(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-osd-list",[],null,null,null,iu,Zo)),s["ɵprd"](256,null,ls.a,Ko,[]),s["ɵdid"](2,114688,null,0,$o,[vt.a,wi,_a.a,Lt.b,me.a,ls.a,qt.m,ms,ys.a,At.b,gt.a],null,null)],(function(t,e){t(e,2,0)}),null)}var ou=s["ɵccf"]("cd-osd-list",$o,su,{},{},[]),uu=n("4HWh"),lu=n("p4Cf");class du{constructor(t,e,n){this.formBuilder=t,this.bsModalRef=e,this.actionLabels=n,this.submitAction=new s.EventEmitter,this.icons=ht.a,this.filterColumns=[],this.devices=[],this.filteredDevices=[],this.capacity=0,this.canSubmit=!1,this.requiredFilters=[],this.action=n.ADD,this.createForm()}ngAfterViewInit(){const t=J.filter(this.inventoryDevices.columns,t=>this.filterColumns.includes(t.prop)&&"hostname"!==t.prop);this.requiredFilters=J.map(t,"name")}createForm(){this.formGroup=this.formBuilder.group({})}onFilterChange(t){if(this.capacity=0,this.canSubmit=!1,J.isEmpty(t.filters))this.filteredDevices=[],this.event=void 0;else{const e=t.filters.filter(t=>"hostname"!==t.prop);this.canSubmit=!J.isEmpty(e),this.filteredDevices=t.data,this.capacity=J.sumBy(this.filteredDevices,"sys_api.size"),this.event=t}}onSubmit(){this.submitAction.emit(this.event),this.bsModalRef.hide()}}class cu{constructor(t,e){this.bsModalService=t,this.i18n=e,this.selected=new s.EventEmitter,this.cleared=new s.EventEmitter,this.icons=ht.a,this.devices=[],this.capacity=0,this.appliedFilters=[],this.tooltips={noAvailDevices:this.i18n("No available devices"),addPrimaryFirst:this.i18n("Please add primary devices first"),addByFilters:this.i18n("Add devices by using filters")}}ngOnInit(){this.updateAddButtonTooltip()}ngOnChanges(){this.updateAddButtonTooltip()}showSelectionModal(){let t=["human_readable_type","sys_api.vendor","sys_api.model","sys_api.size"];"data"===this.type&&(t=["hostname",...t]),this.bsModalService.show(du,{class:"modal-xl",initialState:{hostname:this.hostname,deviceType:this.name,devices:this.availDevices,filterColumns:t}}).content.submitAction.subscribe(t=>{this.devices=t.data,this.capacity=J.sumBy(this.devices,"sys_api.size"),this.appliedFilters=t.filters;const e=J.assign({type:this.type},t);this.selected.emit(e)})}updateAddButtonTooltip(){this.addButtonTooltip="data"===this.type&&0===this.availDevices.length?this.tooltips.noAvailDevices:this.canSelect?0===this.availDevices.length?this.tooltips.noAvailDevices:this.tooltips.addByFilters:this.tooltips.addPrimaryFirst}clearDevices(){const t={type:this.type,clearedDevices:[...this.devices]};this.devices=[],this.cleared.emit(t)}}var fu=s["ɵcrt"]({encapsulation:0,styles:[[".tc_clearSelections[_ngcontent-%COMP%]{text-decoration:none}"]],data:{}});function hu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The primary storage devices. These devices contain all OSD data."]))],null,null)}function gu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Write-Ahead-Log devices. These devices are used for BlueStore’s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device."]))],null,null)}function pu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DB devices can be used for storing BlueStore’s internal metadata. It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD)."]))],null,null)}function bu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,6,"button",[["class","btn btn-light"],["data-toggle","tooltip"],["type","button"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showSelectionModal()&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add"]))],(function(t,e){var n=t(e,5,0,e.component.icons.add);t(e,4,0,n)}),(function(t,e){var n=e.component;t(e,1,0,n.addButtonTooltip,0===n.availDevices.length||!n.canSelect)}))}function mu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",": ",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit.name,e.context.$implicit.value.formatted)}))}function yu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["Raw capacity: ",""])),s["ɵppd"](3,1)],null,(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent,0),n.capacity));t(e,2,0,a)}))}function vu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[["class","pb-2 my-2 border-bottom"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,mu)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](3,0,null,null,6,"a",[["class","tc_clearSelections"],["href",""]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(t.component.clearDevices(),a=!1),a}),null,null)),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵeld"](8,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clear"])),(t()(),s["ɵeld"](10,0,null,null,3,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,2,"cd-inventory-devices",[],null,null,null,ai,ni)),s["ɵdid"](12,245760,null,0,ei,[vt.a,_a.a,me.a,Lt.b,gt.a,Jr],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],filterColumns:[2,"filterColumns"]},null),s["ɵpad"](13,2),(t()(),s["ɵand"](16777216,null,null,1,null,yu)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,n.appliedFilters);var a=t(e,7,0,n.icons.clearFilters);t(e,6,0,a);var r=n.devices,i=t(e,13,0,"available","osd_ids");t(e,12,0,r,i,s["ɵEMPTY_ARRAY"]),t(e,15,0,"data"===n.type)}),null)}function xu(t){return s["ɵvid"](0,[s["ɵpid"](0,_a.a,[Ea.a]),(t()(),s["ɵeld"](1,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](2,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,10,"label",[["class","cd-col-form-label"],["for","createDeleteButton"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](7,null,[""," devices"])),(t()(),s["ɵeld"](8,0,null,null,7,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](9,49152,null,0,lu.a,[],null,null),(t()(),s["ɵand"](16777216,null,0,1,null,hu)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,gu)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,pu)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](16,0,null,0,3,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,bu)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(t()(),s["ɵand"](0,[["blockClearDevices",2]],null,0,null,vu))],(function(t,e){var n=e.component;t(e,2,0),t(e,11,0,"data"===n.type),t(e,13,0,"wal"===n.type),t(e,15,0,"db"===n.type),t(e,18,0,0===n.devices.length,s["ɵnov"](e,19))}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,n.name)}))}class _u{constructor(t,e,n,a,r){this.bsModalRef=t,this.actionLabels=e,this.formBuilder=n,this.osdService=a,this.taskWrapper=r,this.driveGroups=[],this.submitAction=new s.EventEmitter,this.action=e.CREATE,this.createForm()}ngOnInit(){}createForm(){this.formGroup=this.formBuilder.group({})}onSubmit(){this.taskWrapper.wrapTaskAroundCall({task:new hs.a("osd/"+At.e.CREATE,{tracking_id:J.join(J.map(this.driveGroups,"service_id"),", ")}),call:this.osdService.create(this.driveGroups)}).subscribe(void 0,()=>{this.formGroup.setErrors({cdSubmitButton:!0})},()=>{this.submitAction.emit(),this.bsModalRef.hide()})}}class Tu{constructor(){this.reset(),this.formatterService=new Ea.a,this.deviceSelectionAttrs={"sys_api.vendor":{name:"vendor"},"sys_api.model":{name:"model"},device_id:{name:"device_id"},human_readable_type:{name:"rotational",formatter:t=>"hdd"===t.toLowerCase()},"sys_api.size":{name:"size",formatter:t=>this.formatterService.format_number(t,1024,["B","KB","MB","GB","TB","PB"]).replace(" ","")}}}reset(){this.spec={service_type:"osd",service_id:`dashboard-${J.now()}`}}setName(t){this.spec.service_id=t}setHostPattern(t){this.spec.host_pattern=t}setDeviceSelection(t,e){const n=`${t}_devices`;this.spec[n]={},e.forEach(t=>{const e=this.deviceSelectionAttrs[t.prop];e&&(this.spec[n][e.name]=e.formatter?e.formatter(t.value.raw):t.value.raw)})}clearDeviceSelection(t){delete this.spec[`${t}_devices`]}setSlots(t,e){const n=`${t}_slots`;0===e?delete this.spec[n]:this.spec[n]=e}setFeature(t,e){e?this.spec[t]=!0:delete this.spec[t]}}class Ou{constructor(t,e,n,a,r,i){this.actionLabels=t,this.authStorageService=e,this.i18n=n,this.orchService=a,this.router=r,this.bsModalService=i,this.icons=ht.a,this.columns=[],this.loading=!1,this.allDevices=[],this.availDevices=[],this.dataDeviceFilters=[],this.dbDeviceFilters=[],this.walDeviceFilters=[],this.hostname="",this.driveGroup=new Tu,this.featureList=[],this.hasOrchestrator=!1,this.resource=this.i18n("OSDs"),this.action=this.actionLabels.CREATE,this.features={encrypted:{key:"encrypted",desc:this.i18n("Encryption")}},this.featureList=J.map(this.features,(t,e)=>Object.assign(t,{key:e})),this.createForm()}ngOnInit(){this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,this.hasOrchestrator&&this.getDataDevices()}),this.form.get("walSlots").valueChanges.subscribe(t=>this.setSlots("wal",t)),this.form.get("dbSlots").valueChanges.subscribe(t=>this.setSlots("db",t)),J.each(this.features,t=>{this.form.get("features").get(t.key).valueChanges.subscribe(e=>this.featureFormUpdate(t.key,e))})}createForm(){this.form=new js.a({walSlots:new $.i(0,{validators:[$.B.min(0)]}),dbSlots:new $.i(0,{validators:[$.B.min(0)]}),features:new js.a(this.featureList.reduce((t,e)=>(t[e.key]=new $.i({value:!1,disabled:!0}),t),{}))})}getDataDevices(){this.loading||(this.loading=!0,this.orchService.inventoryDeviceList().subscribe(t=>{this.allDevices=J.filter(t,"available"),this.availDevices=[...this.allDevices],this.loading=!1},()=>{this.allDevices=[],this.availDevices=[],this.loading=!1}))}setSlots(t,e){"number"==typeof e&&e>=0&&this.driveGroup.setSlots(t,e)}featureFormUpdate(t,e){this.driveGroup.setFeature(t,e)}enableFeatures(){this.featureList.forEach(t=>{this.form.get(t.key).enable({emitEvent:!1})})}disableFeatures(){this.featureList.forEach(t=>{const e=this.form.get(t.key);e.disable({emitEvent:!1}),e.setValue(!1,{emitEvent:!1})})}onDevicesSelected(t){if(this.availDevices=t.dataOut,"data"===t.type){const e=J.find(t.filters,{prop:"hostname"});e?(this.hostname=e.value.raw,this.availDevices=t.dataOut.filter(t=>t.hostname===this.hostname),this.driveGroup.setHostPattern(this.hostname)):this.driveGroup.setHostPattern("*"),this.enableFeatures()}this.driveGroup.setDeviceSelection(t.type,t.filters)}onDevicesCleared(t){"data"===t.type?(this.availDevices=[...this.allDevices],this.walDeviceSelectionGroups.devices=[],this.dbDeviceSelectionGroups.devices=[],this.disableFeatures(),this.driveGroup.reset(),this.form.get("walSlots").setValue(0,{emitEvent:!1}),this.form.get("dbSlots").setValue(0,{emitEvent:!1})):(this.availDevices=[...this.availDevices,...t.clearedDevices],this.driveGroup.clearDeviceSelection(t.type),this.form.get(`${t.type}Slots`).setValue(0,{emitEvent:!1}))}submit(){const t=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${t}-${J.now()}`),this.bsModalService.show(_u,{initialState:{driveGroups:[this.driveGroup.spec]}}).content.submitAction.subscribe(()=>{this.router.navigate(["/osd"])}),this.previewButton.loading=!1}}var wu=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Su(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,Zr,$r)),s["ɵdid"](1,49152,null,0,Kr,[],null,null)],null,null)}function Iu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value should be greater than or equal to 0"]))],null,null)}function Nu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,9,"label",[["class","cd-col-form-label"],["for","walSlots"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["WAL slots"])),(t()(),s["ɵeld"](7,0,null,null,6,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](8,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["How many OSDs per WAL device."])),(t()(),s["ɵeld"](11,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Specify 0 to let Orchestrator backend decide it."])),(t()(),s["ɵeld"](14,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,7,"input",[["class","form-control"],["formControlName","walSlots"],["id","walSlots"],["min","0"],["name","walSlots"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,16)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,16).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,16)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,16)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,17).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,17).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,17).onTouched()&&a),a}),null,null)),s["ɵdid"](16,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](17,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](19,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](21,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](22,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Iu)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,19,0,"walSlots"),t(e,22,0,"walSlots"),t(e,24,0,n.form.showError("walSlots",s["ɵnov"](e.parent,3),"min"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,15,0,s["ɵnov"](e,21).ngClassUntouched,s["ɵnov"](e,21).ngClassTouched,s["ɵnov"](e,21).ngClassPristine,s["ɵnov"](e,21).ngClassDirty,s["ɵnov"](e,21).ngClassValid,s["ɵnov"](e,21).ngClassInvalid,s["ɵnov"](e,21).ngClassPending,s["ɵnov"](e,22).validClass,s["ɵnov"](e,22).invalidClass)}))}function Cu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value should be greater than or equal to 0"]))],null,null)}function Ru(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,9,"label",[["class","cd-col-form-label"],["for","dbSlots"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DB slots"])),(t()(),s["ɵeld"](7,0,null,null,6,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](8,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["How many OSDs per DB device."])),(t()(),s["ɵeld"](11,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Specify 0 to let Orchestrator backend decide it."])),(t()(),s["ɵeld"](14,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,7,"input",[["class","form-control"],["formControlName","dbSlots"],["id","dbSlots"],["min","0"],["name","dbSlots"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,16)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,16).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,16)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,16)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,17).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,17).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,17).onTouched()&&a),a}),null,null)),s["ɵdid"](16,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](17,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](19,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](21,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](22,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cu)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,19,0,"dbSlots"),t(e,22,0,"dbSlots"),t(e,24,0,n.form.showError("dbSlots",s["ɵnov"](e.parent,3),"min"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,15,0,s["ɵnov"](e,21).ngClassUntouched,s["ɵnov"](e,21).ngClassTouched,s["ɵnov"](e,21).ngClassPristine,s["ɵnov"](e,21).ngClassDirty,s["ɵnov"](e,21).ngClassValid,s["ɵnov"](e,21).ngClassInvalid,s["ɵnov"](e,21).ngClassPending,s["ɵnov"](e,22).validClass,s["ɵnov"](e,22).invalidClass)}))}function Au(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,2).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,2).onTouched()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](4,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](6,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](7,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](8,0,null,null,1,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](9,null,["",""]))],(function(t,e){t(e,4,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,"")),t(e,7,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""))}),(function(t,e){t(e,1,1,[s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""),s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,""),s["ɵnov"](e,6).ngClassUntouched,s["ɵnov"](e,6).ngClassTouched,s["ɵnov"](e,6).ngClassPristine,s["ɵnov"](e,6).ngClassDirty,s["ɵnov"](e,6).ngClassValid,s["ɵnov"](e,6).ngClassInvalid,s["ɵnov"](e,6).ngClassPending,s["ɵnov"](e,7).validClass,s["ɵnov"](e,7).invalidClass]),t(e,8,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.key,"")),t(e,9,0,e.context.$implicit.desc)}))}function ku(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,48,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,47,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,41,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,[""," ",""])),s["ɵppd"](10,1),s["ɵppd"](11,1),(t()(),s["ɵeld"](12,0,null,null,29,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,2,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"cd-osd-devices-selection-groups",[["name","Primary"],["type","data"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),xu,fu)),s["ɵdid"](15,638976,[[1,4],["dataDeviceSelectionGroups",4]],0,cu,[Lt.b,me.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵeld"](16,0,null,null,10,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Shared devices"])),(t()(),s["ɵeld"](19,0,null,null,1,"cd-osd-devices-selection-groups",[["name","WAL"],["type","wal"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),xu,fu)),s["ɵdid"](20,638976,[[2,4],["walDeviceSelectionGroups",4]],0,cu,[Lt.b,me.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵand"](16777216,null,null,1,null,Nu)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](23,0,null,null,1,"cd-osd-devices-selection-groups",[["name","DB"],["type","db"]],null,[[null,"selected"],[null,"cleared"]],(function(t,e,n){var a=!0,r=t.component;return"selected"===e&&(a=!1!==r.onDevicesSelected(n)&&a),"cleared"===e&&(a=!1!==r.onDevicesCleared(n)&&a),a}),xu,fu)),s["ɵdid"](24,638976,[[3,4],["dbDeviceSelectionGroups",4]],0,cu,[Lt.b,me.a],{type:[0,"type"],name:[1,"name"],availDevices:[2,"availDevices"],canSelect:[3,"canSelect"]},{selected:"selected",cleared:"cleared"}),(t()(),s["ɵand"](16777216,null,null,1,null,Ru)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](27,0,null,null,14,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Configuration"])),(t()(),s["ɵeld"](30,0,null,null,11,"div",[["class","form-group row"],["formGroupName","features"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](31,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](33,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](34,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](37,0,null,0,1,"label",[["class","cd-col-form-label"],["for","features"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Features"])),(t()(),s["ɵeld"](39,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Au)),s["ɵdid"](41,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](42,0,null,null,6,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](45,114688,[[4,4],["previewButton",4]],0,Ds.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Preview"])),(t()(),s["ɵeld"](47,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](48,49152,null,0,Ms.a,[i.Location,At.b],null,null)],(function(t,e){var n=e.component;t(e,3,0,n.form),t(e,6,0,n.form),t(e,15,0,"data","Primary",n.availDevices,0!==n.availDevices.length),t(e,20,0,"wal","WAL",n.availDevices,0!==s["ɵnov"](e,15).devices.length),t(e,22,0,0!==s["ɵnov"](e,20).devices.length),t(e,24,0,"db","DB",n.availDevices,0!==s["ɵnov"](e,15).devices.length),t(e,26,0,0!==s["ɵnov"](e,24).devices.length),t(e,31,0,"features"),t(e,34,0),t(e,41,0,n.featureList),t(e,45,0,s["ɵnov"](e,3),0===s["ɵnov"](e,15).devices.length)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending);var a=s["ɵunv"](e,9,0,t(e,10,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,9,1,t(e,11,0,s["ɵnov"](e.parent,1),n.resource));t(e,9,0,a,r),t(e,30,0,s["ɵnov"](e,33).ngClassUntouched,s["ɵnov"](e,33).ngClassTouched,s["ɵnov"](e,33).ngClassPristine,s["ɵnov"](e,33).ngClassDirty,s["ɵnov"](e,33).ngClassValid,s["ɵnov"](e,33).ngClassInvalid,s["ɵnov"](e,33).ngClassPending,s["ɵnov"](e,34).hasErrors,s["ɵnov"](e,34).hasSuccess)}))}function Eu(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),s["ɵqud"](671088640,1,{dataDeviceSelectionGroups:0}),s["ɵqud"](671088640,2,{walDeviceSelectionGroups:0}),s["ɵqud"](671088640,3,{dbDeviceSelectionGroups:0}),s["ɵqud"](671088640,4,{previewButton:0}),(t()(),s["ɵand"](16777216,null,null,1,null,Su)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ku)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,7,0,!n.hasOrchestrator),t(e,9,0,!n.loading&&n.hasOrchestrator)}),null)}function Lu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-form",[],null,null,null,Eu,wu)),s["ɵdid"](1,114688,null,0,Ou,[At.b,vt.a,me.a,Jr,qt.m,Lt.b],null,null)],(function(t,e){t(e,1,0)}),null)}var Du=s["ɵccf"]("cd-osd-form",Ou,Lu,{},{},[]),Pu=n("iExv");class Mu{constructor(t){this.i18n=t,this.flags={runtime:this.i18n("The value can be updated at runtime."),no_mon_update:this.i18n("Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via 'ceph config\n      set ...'. This option should be configured via ceph.conf or via the\n      command line."),startup:this.i18n("Option takes effect only during daemon startup."),cluster_create:this.i18n("Option only affects cluster creation."),create:this.i18n("Option only affects daemon creation.")}}ngOnChanges(){this.selection&&(this.selection.services=J.split(this.selection.services,","))}}var qu=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ju(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": ","",""])),(t()(),s["ɵeld"](2,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,1,0,e.context.$implicit.section,e.context.$implicit.value,e.context.last?"":",")}))}function Fu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"span",[],[[8,"title",0]],null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""])),s["ɵppd"](4,1)],null,(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](1,"",e.component.flags[e.context.$implicit],""));var n=s["ɵunv"](e,3,0,t(e,4,0,s["ɵnov"](e.parent.parent,0),e.context.$implicit));t(e,3,0,n)}))}function Gu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark mr-2"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function Vu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,94,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,92,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,90,"table",[["class","table table-striped table-bordered"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,89,"tbody",[],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"td",[["class","bold w-25"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](9,0,null,null,1,"td",[["class","w-75"]],null,null,null,null,null)),(t()(),s["ɵted"](10,null,["",""])),(t()(),s["ɵeld"](11,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](14,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](15,null,["",""])),(t()(),s["ɵeld"](16,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](17,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Long description"])),(t()(),s["ɵeld"](19,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](20,null,["",""])),(t()(),s["ɵeld"](21,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Current values"])),(t()(),s["ɵeld"](24,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ju)),s["ɵdid"](26,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](27,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](28,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Default"])),(t()(),s["ɵeld"](30,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](31,null,["",""])),(t()(),s["ɵeld"](32,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](33,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemon default"])),(t()(),s["ɵeld"](35,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](36,null,["",""])),(t()(),s["ɵeld"](37,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](38,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Type"])),(t()(),s["ɵeld"](40,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](41,null,["",""])),(t()(),s["ɵeld"](42,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Min"])),(t()(),s["ɵeld"](45,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](46,null,["",""])),(t()(),s["ɵeld"](47,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](48,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Max"])),(t()(),s["ɵeld"](50,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](51,null,["",""])),(t()(),s["ɵeld"](52,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](53,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Flags"])),(t()(),s["ɵeld"](55,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Fu)),s["ɵdid"](57,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](58,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Services"])),(t()(),s["ɵeld"](61,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Gu)),s["ɵdid"](63,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](64,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](65,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Source"])),(t()(),s["ɵeld"](67,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](68,null,["",""])),(t()(),s["ɵeld"](69,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](70,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Level"])),(t()(),s["ɵeld"](72,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](73,null,["",""])),(t()(),s["ɵeld"](74,0,null,null,5,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](75,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Can be updated at runtime (editable)"])),(t()(),s["ɵeld"](77,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](78,null,["",""])),s["ɵppd"](79,1),(t()(),s["ɵeld"](80,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](81,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Tags"])),(t()(),s["ɵeld"](83,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](84,null,["",""])),(t()(),s["ɵeld"](85,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](86,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Enum values"])),(t()(),s["ɵeld"](88,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](89,null,["",""])),(t()(),s["ɵeld"](90,0,null,null,4,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](91,0,null,null,1,"td",[["class","bold"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["See also"])),(t()(),s["ɵeld"](93,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](94,null,["",""]))],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,26,0,n.selection.value),t(e,57,0,n.selection.flags),t(e,63,0,n.selection.services)}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,10,0,n.selection.name),t(e,15,0,n.selection.desc),t(e,20,0,n.selection.long_desc),t(e,31,0,n.selection.default),t(e,36,0,n.selection.daemon_default),t(e,41,0,n.selection.type),t(e,46,0,n.selection.min),t(e,51,0,n.selection.max),t(e,68,0,n.selection.source),t(e,73,0,n.selection.level);var a=s["ɵunv"](e,78,0,t(e,79,0,s["ɵnov"](e.parent,1),n.selection.can_update_at_runtime));t(e,78,0,a),t(e,84,0,n.selection.tags),t(e,89,0,n.selection.enum_values),t(e,94,0,n.selection.see_also)}))}function zu(t){return s["ɵvid"](0,[s["ɵpid"](0,i.UpperCasePipe,[]),s["ɵpid"](0,Pu.a,[me.a]),(t()(),s["ɵand"](16777216,null,null,1,null,Vu)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,3,0,e.component.selection)}),null)}class Bu extends ds.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.configurationService=e,this.i18n=n,this.actionLabels=a,this.data=[],this.icons=ht.a,this.selection=new ti.a,this.filters=[{name:this.i18n("Level"),prop:"level",filterOptions:["basic","advanced","dev"],filterInitValue:"basic",filterPredicate:(t,e)=>{let n;return function(t){t[t.basic=0]="basic",t[t.advanced=1]="advanced",t[t.dev=2]="dev"}(n||(n={})),n[t.level]<=n[e]}},{name:this.i18n("Service"),prop:"services",filterOptions:["mon","mgr","osd","mds","common","mds_client","rgw"],filterPredicate:(t,e)=>t.services.includes(e)},{name:this.i18n("Source"),prop:"source",filterOptions:["mon"],filterPredicate:(t,e)=>!!t.hasOwnProperty("source")&&t.source.includes(e)},{name:this.i18n("Modified"),prop:"modified",filterOptions:["yes","no"],filterPredicate:(t,e)=>!("yes"!==e||!t.hasOwnProperty("value"))||"no"===e&&!t.hasOwnProperty("value")}],this.permission=this.authStorageService.getPermissions().configOpt;const r=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().name)}`;this.tableActions=[{permission:"update",icon:ht.a.edit,routerLink:()=>`/configuration/edit/${r()}`,name:this.actionLabels.EDIT,disable:()=>!this.isEditable(this.selection)}]}ngOnInit(){this.columns=[{canAutoResize:!0,prop:"name",name:this.i18n("Name")},{prop:"desc",name:this.i18n("Description"),cellClass:"wrap"},{prop:"value",name:this.i18n("Current value"),cellClass:"wrap",cellTemplate:this.confValTpl},{prop:"default",name:this.i18n("Default"),cellClass:"wrap"},{prop:"can_update_at_runtime",name:this.i18n("Editable"),cellTransformation:Xr.a.checkIcon,flexGrow:.4,cellClass:"text-center"}]}updateSelection(t){this.selection=t}getConfigurationList(t){this.configurationService.getConfigData().subscribe(t=>{this.data=t},()=>{t.error()})}isEditable(t){return 1===t.selected.length&&t.selected[0].can_update_at_runtime}}var Yu=s["ɵcrt"]({encapsulation:0,styles:[[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}  datatable-body-cell.wrap{word-break:break-all}"]],data:{}});function Hu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",": ","",""])),(t()(),s["ɵeld"](2,0,null,null,0,"br",[],null,null,null,null,null))],null,(function(t,e){t(e,1,0,e.context.$implicit.section,e.context.$implicit.value,e.context.last?"":",")}))}function Uu(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Hu)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.parent.context.value)}),null)}function Wu(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Uu)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.context.value)}),null)}function Ku(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{confValTpl:0}),s["ɵqud"](671088640,2,{confFlagTpl:0}),(t()(),s["ɵeld"](2,0,null,null,5,"cd-table",[["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.getConfigurationList(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](3,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"],extraFilterableColumns:[4,"extraFilterableColumns"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](5,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](6,0,null,3,1,"cd-configuration-details",[["cdTableDetail",""]],null,null,null,zu,qu)),s["ɵdid"](7,573440,null,0,Mu,[me.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[1,2],["confValTpl",2]],null,0,null,Wu))],(function(t,e){var n=e.component;t(e,3,0,n.data,n.columns,!0,"single",n.filters),t(e,5,0,n.permission,n.selection,n.tableActions),t(e,7,0,n.expandedRow)}),null)}function $u(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-configuration",[],null,null,null,Ku,Yu)),s["ɵdid"](1,114688,null,0,Bu,[vt.a,Fo.a,me.a,At.b],null,null)],(function(t,e){t(e,1,0)}),null)}var Zu=s["ɵccf"]("cd-configuration",Bu,$u,{},{},[]);class Ju{constructor(){this.value=[]}}class Qu{constructor(t,e,n,a,r){this.route=t,this.router=e,this.configService=n,this.notificationService=a,this.i18n=r,this.availSections=["global","mon","mgr","osd","mds","client"],this.createForm()}createForm(){const t={name:new $.i({value:null}),desc:new $.i({value:null}),long_desc:new $.i({value:null}),values:new $.k({}),default:new $.i({value:null}),daemon_default:new $.i({value:null}),services:new $.i([])};this.availSections.forEach(e=>{t.values.addControl(e,new $.i(null))}),this.configForm=new js.a(t)}ngOnInit(){this.route.params.subscribe(t=>{this.configService.get(t.name).subscribe(t=>{this.setResponse(t)})})}getValidators(t){const e=Go.getTypeValidators(t);if(e)return this.patternHelpText=e.patternHelpText,"max"in e&&""!==e.max&&(this.maxValue=e.max),"min"in e&&""!==e.min&&(this.minValue=e.min),e.validators}getStep(t,e){return Go.getTypeStep(t,e)}setResponse(t){this.response=t;const e=this.getValidators(t);this.configForm.get("name").setValue(t.name),this.configForm.get("desc").setValue(t.desc),this.configForm.get("long_desc").setValue(t.long_desc),this.configForm.get("default").setValue(t.default),this.configForm.get("daemon_default").setValue(t.daemon_default),this.configForm.get("services").setValue(t.services),this.response.value&&this.response.value.forEach(t=>{let e=null;e="true"===t.value||"false"!==t.value&&t.value,this.configForm.get("values").get(t.section).setValue(e)}),this.availSections.forEach(t=>{this.configForm.get("values").get(t).setValidators(e)});const n=Go.getType(t.type);this.type=n.name,this.inputType=n.inputType,this.humanReadableType=n.humanReadable}createRequest(){const t=[];if(this.availSections.forEach(e=>{const n=this.configForm.getValue(e);null!==n&&""!==n&&t.push({section:e,value:n})}),!J.isEqual(this.response.value,t)){const e=new Ju;return e.name=this.configForm.getValue("name"),e.value=t,e}return null}submit(){const t=this.createRequest();t&&this.configService.create(t).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n("Updated config option {{name}}",{name:t.name})),this.router.navigate(["/configuration"])},()=>{this.configForm.setErrors({cdSubmitButton:!0})}),this.router.navigate(["/configuration"])}}var Xu=s["ɵcrt"]({encapsulation:0,styles:[[".form-component-badge[_ngcontent-%COMP%]{height:34px;display:block}.form-component-badge[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{margin-top:7px}.resize-vertical[_ngcontent-%COMP%]{resize:vertical}"]],data:{}});function tl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"textarea",[["class","form-control resize-vertical"],["formControlName","desc"],["id","desc"],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "]))],(function(t,e){t(e,1,0),t(e,10,0,"desc"),t(e,13,0,"desc")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function el(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Long description"])),(t()(),s["ɵeld"](6,0,null,0,8,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,7,"textarea",[["class","form-control resize-vertical"],["formControlName","long_desc"],["id","long_desc"],["readonly",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "]))],(function(t,e){t(e,1,0),t(e,10,0,"long_desc"),t(e,13,0,"long_desc")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function nl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Default"])),(t()(),s["ɵeld"](6,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,6,"input",[["class","form-control"],["formControlName","default"],["id","default"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,10,0,"default"),t(e,13,0,"default")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function al(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemon default"])),(t()(),s["ɵeld"](6,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,6,"input",[["class","form-control"],["formControlName","daemon_default"],["id","daemon_default"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,10,0,"daemon_default"),t(e,13,0,"daemon_default")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function rl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[["class","form-component-badge"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","badge badge-dark"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""]))],null,(function(t,e){t(e,2,0,e.context.$implicit)}))}function il(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,11,{FormControlNames:1}),s["ɵqud"](603979776,12,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Services"])),(t()(),s["ɵeld"](6,0,null,0,2,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,rl)),s["ɵdid"](8,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,8,0,n.configForm.getValue("services"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess)}))}function sl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,13,{FormControlNames:1}),s["ɵqud"](603979776,14,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,0,19,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,18,"select",[["class","form-control custom-select"],["id","pool"],["name","pool"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[13,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](14,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](15,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](16,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["-- Default --"])),(t()(),s["ɵeld"](18,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](19,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](20,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["true"])),(t()(),s["ɵeld"](22,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](23,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](24,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["false"]))],(function(t,e){t(e,1,0),t(e,10,0,e.parent.context.$implicit),t(e,13,0,e.parent.context.$implicit),t(e,15,0,null),t(e,16,0,null),t(e,19,0,!0),t(e,20,0,!0),t(e,23,0,!1),t(e,24,0,!1)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit),t(e,5,0,e.parent.context.$implicit),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function ol(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.patternHelpText)}))}function ul(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.patternHelpText)}))}function ll(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.component.maxValue)}))}function dl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.component.minValue)}))}function cl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,15,{FormControlNames:1}),s["ɵqud"](603979776,16,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,6,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"placeholder",0],[8,"step",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[15,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ol)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ul)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ll)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dl)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,e.parent.context.$implicit),t(e,13,0,e.parent.context.$implicit),t(e,15,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"pattern")),t(e,17,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"invalidUuid")),t(e,19,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"max")),t(e,21,0,n.configForm.showError(e.parent.context.$implicit,s["ɵnov"](e.parent.parent,3),"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit),t(e,5,0,e.parent.context.$implicit),t(e,7,1,[n.inputType,e.parent.context.$implicit,n.humanReadableType,n.getStep(n.type,n.configForm.getValue(e.parent.context.$implicit)),s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass])}))}function fl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,null,null,null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,sl)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cl)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.component;t(e,2,0,"bool"===n.type),t(e,4,0,"bool"!==n.type)}),null)}function hl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,52,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,51,"form",[["name","configForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,45,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Edit"])),(t()(),s["ɵted"](11,null,[" "," "])),(t()(),s["ɵeld"](12,0,null,null,32,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](14,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](17,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](19,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,6,"input",[["class","form-control"],["formControlName","name"],["id","name"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,21)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,21).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,21)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,21)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](23,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](25,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](26,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tl)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,el)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,nl)),s["ɵdid"](32,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,al)),s["ɵdid"](34,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,il)),s["ɵdid"](36,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](37,0,null,null,7,"div",[["formGroupName","values"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](38,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](40,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](41,0,null,null,1,"h2",[["class","cd-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Values"])),(t()(),s["ɵand"](16777216,null,null,1,null,fl)),s["ɵdid"](44,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](45,0,null,null,7,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](46,0,null,null,6,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](47,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](48,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](49,0,null,0,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Save"])),(t()(),s["ɵeld"](51,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](52,49152,null,0,Ms.a,[i.Location,At.b],null,null)],(function(t,e){var n=e.component;t(e,3,0,n.configForm),t(e,6,0,n.configForm),t(e,14,0),t(e,23,0,"name"),t(e,26,0,"name"),t(e,28,0,n.configForm.getValue("desc")),t(e,30,0,n.configForm.getValue("long_desc")),t(e,32,0,""!==n.configForm.getValue("default")),t(e,34,0,""!==n.configForm.getValue("daemon_default")),t(e,36,0,n.configForm.getValue("services").length>0),t(e,38,0,"values"),t(e,44,0,n.availSections),t(e,48,0,s["ɵnov"](e,3))}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,11,0,n.configForm.getValue("name")),t(e,13,0,s["ɵnov"](e,14).hasErrors,s["ɵnov"](e,14).hasSuccess),t(e,20,0,s["ɵnov"](e,25).ngClassUntouched,s["ɵnov"](e,25).ngClassTouched,s["ɵnov"](e,25).ngClassPristine,s["ɵnov"](e,25).ngClassDirty,s["ɵnov"](e,25).ngClassValid,s["ɵnov"](e,25).ngClassInvalid,s["ɵnov"](e,25).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass),t(e,37,0,s["ɵnov"](e,40).ngClassUntouched,s["ɵnov"](e,40).ngClassTouched,s["ɵnov"](e,40).ngClassPristine,s["ɵnov"](e,40).ngClassDirty,s["ɵnov"](e,40).ngClassValid,s["ɵnov"](e,40).ngClassInvalid,s["ɵnov"](e,40).ngClassPending)}))}function gl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-configuration-form",[],null,null,null,hl,Xu)),s["ɵdid"](1,114688,null,0,Qu,[qt.a,qt.m,Fo.a,gt.a,me.a],null,null)],(function(t,e){t(e,1,0)}),null)}var pl=s["ɵccf"]("cd-configuration-form",Qu,gl,{},{},[]),bl=n("LOMR"),ml=n("MP8s"),yl=n("fxL3"),vl=n("gk6K"),xl=n("mrSG"),_l=n("yYhs");class Tl{constructor(t){this.healthService=t,this.icons=ht.a,this.loadingIndicator=!0,this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}},this.metadataKeyMap={}}ngOnInit(){this.healthService.getFullHealth().subscribe(t=>{this.loadingIndicator=!1,this.nodes=this.abstractTreeData(t)})}abstractTreeData(t){const e=t.osd_map.tree.nodes||[],n={};if(0===e.length)return[{name:"No nodes!"}];const a=[];return e.reverse().forEach(t=>{"root"===t.type&&a.push(t.id),n[t.id]=this.generateTreeLeaf(t,n)}),a.map(t=>n[t])}generateTreeLeaf(t,e){const n=t.id;this.metadataKeyMap[n]=t;const a=[],r={name:t.name+" ("+t.type+")",status:t.status,cdId:n,type:t.type};return t.children&&(t.children.sort().forEach(t=>{a.push(e[t])}),r.children=a),r}onNodeSelected(t,e){if(_l.a.ACTIVATE(t,e,!0),void 0!==e.data.cdId){const t=this.metadataKeyMap[e.data.cdId],{name:n,type:a}=t,r=xl.__rest(t,["name","type","status"]);this.metadata=r,this.metadataTitle=n+" ("+a+")"}else delete this.metadata,delete this.metadataTitle}onUpdateData(){this.tree.treeModel.expandAll()}}var Ol=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](3,3)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.large,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function Sl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[["class","badge"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpad"](3,2),s["ɵpad"](4,3),s["ɵpod"](5,{"badge-success":0,"badge-danger":1}),(t()(),s["ɵted"](6,null,[" "," "]))],(function(t,e){var n=t(e,5,0,t(e,3,0,"in","up").includes(e.parent.context.$implicit.data.status),t(e,4,0,"down","out","destroyed").includes(e.parent.context.$implicit.data.status));t(e,2,0,"badge",n)}),(function(t,e){t(e,6,0,e.parent.context.$implicit.data.status)}))}function Il(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Sl)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "])),(t()(),s["ɵeld"](4,0,null,null,3,"span",[["class","node-name"]],[[8,"innerHTML",1]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{"type-osd":0})],(function(t,e){t(e,1,0,e.context.$implicit.data.status);var n=t(e,7,0,"osd"===e.context.$implicit.data.type);t(e,6,0,"node-name",n)}),(function(t,e){t(e,4,0,e.context.$implicit.data.name)}))}function Nl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[["class","col-sm-6 col-lg-6 metadata"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),(t()(),s["ɵeld"](3,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](4,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},null)],(function(t,e){t(e,4,0,e.component.metadata)}),(function(t,e){t(e,2,0,e.component.metadataTitle)}))}function Cl(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{tree:0}),(t()(),s["ɵeld"](1,0,null,null,19,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,18,"div",[["class","col-sm-12 col-lg-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,17,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CRUSH map viewer"])),(t()(),s["ɵeld"](6,0,null,null,14,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,10,"div",[["class","col-sm-6 col-lg-6"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,wl)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](11,0,null,null,7,"tree-root",[],null,[[null,"updateData"],["body","keydown"],["body","mousedown"]],(function(t,e,n){var a=!0,r=t.component;return"body:keydown"===e&&(a=!1!==s["ɵnov"](t,13).onKeydown(n)&&a),"body:mousedown"===e&&(a=!1!==s["ɵnov"](t,13).onMousedown(n)&&a),"updateData"===e&&(a=!1!==r.onUpdateData()&&a),a}),bl.b,bl.a)),s["ɵprd"](131584,null,ml.a,ml.a,[]),s["ɵdid"](13,573440,[[1,4],["tree",4]],4,yl.a,[ml.a,vl.a],{nodes:[0,"nodes"],options:[1,"options"]},{updateData:"updateData"}),s["ɵqud"](603979776,2,{loadingTemplate:0}),s["ɵqud"](603979776,3,{treeNodeTemplate:0}),s["ɵqud"](603979776,4,{treeNodeWrapperTemplate:0}),s["ɵqud"](603979776,5,{treeNodeFullTemplate:0}),(t()(),s["ɵand"](0,[[3,2],["treeNodeTemplate",2]],null,0,null,Il)),(t()(),s["ɵand"](16777216,null,null,1,null,Nl)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,10,0,n.loadingIndicator),t(e,13,0,n.nodes,n.treeOptions),t(e,20,0,n.metadata)}),null)}function Rl(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-crushmap",[],null,null,null,Cl,Ol)),s["ɵdid"](1,114688,null,0,Tl,[La],null,null)],(function(t,e){t(e,1,0)}),null)}var Al=s["ɵccf"]("cd-crushmap",Tl,Rl,{},{},[]),kl=n("AfCQ");let El=(()=>{class t{writeValue(e){return{type:t.WRITE_VALUE,payload:e}}changeHours(e){return{type:t.CHANGE_HOURS,payload:e}}changeMinutes(e){return{type:t.CHANGE_MINUTES,payload:e}}changeSeconds(e){return{type:t.CHANGE_SECONDS,payload:e}}setTime(e){return{type:t.SET_TIME_UNIT,payload:e}}updateControls(e){return{type:t.UPDATE_CONTROLS,payload:e}}}return t.WRITE_VALUE="[timepicker] write value from ng model",t.CHANGE_HOURS="[timepicker] change hours",t.CHANGE_MINUTES="[timepicker] change minutes",t.CHANGE_SECONDS="[timepicker] change seconds",t.SET_TIME_UNIT="[timepicker] set time unit",t.UPDATE_CONTROLS="[timepicker] update controls",t})();function Ll(t){return!!t&&!(t instanceof Date&&isNaN(t.getHours()))&&("string"!=typeof t||Ll(new Date(t)))}function Dl(t,e){return!(t.min&&e<t.min||t.max&&e>t.max)}function Pl(t){return"number"==typeof t?t:parseInt(t,10)}function Ml(t,e=!1){const n=Pl(t);return isNaN(n)||n<0||n>(e?12:24)?NaN:n}function ql(t){const e=Pl(t);return isNaN(e)||e<0||e>60?NaN:e}function jl(t){const e=Pl(t);return isNaN(e)||e<0||e>60?NaN:e}function Fl(t){return"string"==typeof t?new Date(t):t}function Gl(t,e){if(!t)return Gl(zl(new Date,0,0,0),e);let n=t.getHours(),a=t.getMinutes(),r=t.getSeconds();return e.hour&&(n+=Pl(e.hour)),e.minute&&(a+=Pl(e.minute)),e.seconds&&(r+=Pl(e.seconds)),zl(t,n,a,r)}function Vl(t,e){let n=Ml(e.hour);const a=ql(e.minute),r=jl(e.seconds)||0;return e.isPM&&12!==n&&(n+=12),t?isNaN(n)||isNaN(a)?t:zl(t,n,a,r):isNaN(n)||isNaN(a)?t:zl(new Date,n,a,r)}function zl(t,e,n,a){const r=new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,n,a,t.getMilliseconds());return r.setFullYear(t.getFullYear()),r.setMonth(t.getMonth()),r.setDate(t.getDate()),r}function Bl(t){const e=t.toString();return e.length>1?e:`0${e}`}function Yl(t,e){return!isNaN(Ml(t,e))}function Hl(t){return!isNaN(ql(t))}function Ul(t){return!isNaN(jl(t))}function Wl(t,e="0",n="0",a){return Yl(t,a)&&Hl(e)&&Ul(n)}function Kl(t,e){if(t.readonlyInput||t.disabled)return!1;if(e){if("wheel"===e.source&&!t.mousewheel)return!1;if("key"===e.source&&!t.arrowkeys)return!1}return!0}function $l(t){const{hourStep:e,minuteStep:n,secondsStep:a,readonlyInput:r,disabled:i,mousewheel:s,arrowkeys:o,showSpinners:u,showMeridian:l,showSeconds:d,meridians:c,min:f,max:h}=t;return{hourStep:e,minuteStep:n,secondsStep:a,readonlyInput:r,disabled:i,mousewheel:s,arrowkeys:o,showSpinners:u,showMeridian:l,showSeconds:d,meridians:c,min:f,max:h}}class Zl{constructor(){this.hourStep=1,this.minuteStep=5,this.secondsStep=10,this.showMeridian=!0,this.meridians=["AM","PM"],this.readonlyInput=!1,this.disabled=!1,this.mousewheel=!0,this.arrowkeys=!0,this.showSpinners=!0,this.showSeconds=!1,this.showMinutes=!0,this.hoursPlaceholder="HH",this.minutesPlaceholder="MM",this.secondsPlaceholder="SS",this.ariaLabelHours="hours",this.ariaLabelMinutes="minutes",this.ariaLabelSeconds="seconds"}}const Jl={value:null,config:new Zl,controls:{canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0}};function Ql(t=Jl,e){switch(e.type){case El.WRITE_VALUE:return Object.assign({},t,{value:e.payload});case El.CHANGE_HOURS:{if(!Kl(t.config,e.payload)||(a=t.controls,!(n=e.payload).step||n.step>0&&!a.canIncrementHours||n.step<0&&!a.canDecrementHours))return t;const r=Gl(t.value,{hour:e.payload.step});return!t.config.max&&!t.config.min||Dl(t.config,r)?Object.assign({},t,{value:r}):t}case El.CHANGE_MINUTES:{if(!Kl(t.config,e.payload)||!function(t,e){return!(!t.step||t.step>0&&!e.canIncrementMinutes||t.step<0&&!e.canDecrementMinutes)}(e.payload,t.controls))return t;const n=Gl(t.value,{minute:e.payload.step});return!t.config.max&&!t.config.min||Dl(t.config,n)?Object.assign({},t,{value:n}):t}case El.CHANGE_SECONDS:{if(!Kl(t.config,e.payload)||!function(t,e){return!(!t.step||t.step>0&&!e.canIncrementSeconds||t.step<0&&!e.canDecrementSeconds)}(e.payload,t.controls))return t;const n=Gl(t.value,{seconds:e.payload.step});return!t.config.max&&!t.config.min||Dl(t.config,n)?Object.assign({},t,{value:n}):t}case El.SET_TIME_UNIT:{if(!Kl(t.config))return t;const n=Vl(t.value,e.payload);return Object.assign({},t,{value:n})}case El.UPDATE_CONTROLS:{const n=function(t,e){const{min:n,max:a,hourStep:r,minuteStep:i,secondsStep:s,showSeconds:o}=e,u={canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0};if(!t)return u;if(a){const e=Gl(t,{hour:r});if(u.canIncrementHours=a>e,!u.canIncrementHours){const e=Gl(t,{minute:i});u.canIncrementMinutes=o?a>e:a>=e}if(!u.canIncrementMinutes){const e=Gl(t,{seconds:s});u.canIncrementSeconds=a>=e}t.getHours()<12&&(u.canToggleMeridian=Gl(t,{hour:12})<a)}if(n){const e=Gl(t,{hour:-r});if(u.canDecrementHours=n<e,!u.canDecrementHours){const e=Gl(t,{minute:-i});u.canDecrementMinutes=o?n<e:n<=e}if(!u.canDecrementMinutes){const e=Gl(t,{seconds:-s});u.canDecrementSeconds=n<=e}t.getHours()>=12&&(u.canToggleMeridian=Gl(t,{hour:-12})>n)}return u}(t.value,e.payload),a={value:t.value,config:e.payload,controls:n};return t.config.showMeridian!==a.config.showMeridian&&t.value&&(a.value=new Date(t.value)),Object.assign({},t,a)}default:return t}var n,a}class Xl extends kl.b{constructor(){const t=new Da.a({type:"[mini-ngrx] dispatcher init"});super(t,Ql,new kl.a(Jl,t,Ql))}}class td{constructor(t,e,n,a){this._cd=e,this._store=n,this._timepickerActions=a,this.isValid=new s.EventEmitter,this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1,this.onChange=Function.prototype,this.onTouched=Function.prototype,Object.assign(this,t),this.timepickerSub=n.select(t=>t.value).subscribe(t=>{this._renderTime(t),this.onChange(t),this._store.dispatch(this._timepickerActions.updateControls($l(this)))}),n.select(t=>t.controls).subscribe(t=>{this.isValid.emit(Wl(this.hours,this.minutes,this.seconds,this.isPM())),Object.assign(this,t),e.markForCheck()})}get isSpinnersVisible(){return this.showSpinners&&!this.readonlyInput}get isEditable(){return!(this.readonlyInput||this.disabled)}resetValidation(){this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1}isPM(){return this.showMeridian&&this.meridian===this.meridians[1]}prevDef(t){t.preventDefault()}wheelSign(t){return-1*Math.sign(t.deltaY)}ngOnChanges(t){this._store.dispatch(this._timepickerActions.updateControls($l(this)))}changeHours(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeHours({step:t,source:e}))}changeMinutes(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeMinutes({step:t,source:e}))}changeSeconds(t,e=""){this.resetValidation(),this._store.dispatch(this._timepickerActions.changeSeconds({step:t,source:e}))}updateHours(t){if(this.resetValidation(),this.hours=t,!Yl(this.hours,this.isPM())||!this.isValidLimit())return this.invalidHours=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}updateMinutes(t){if(this.resetValidation(),this.minutes=t,!Hl(this.minutes)||!this.isValidLimit())return this.invalidMinutes=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}updateSeconds(t){if(this.resetValidation(),this.seconds=t,!Ul(this.seconds)||!this.isValidLimit())return this.invalidSeconds=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()}isValidLimit(){return function(t,e,n){const a=Vl(new Date,t);return!(e&&a>e||n&&a<n)}({hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()},this.max,this.min)}_updateTime(){if(!Wl(this.hours,this.showMinutes?this.minutes:void 0,this.showSeconds?this.seconds:void 0,this.isPM()))return this.isValid.emit(!1),void this.onChange(null);this._store.dispatch(this._timepickerActions.setTime({hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()}))}toggleMeridian(){this.showMeridian&&this.isEditable&&this._store.dispatch(this._timepickerActions.changeHours({step:12,source:""}))}writeValue(t){Ll(t)?this._store.dispatch(this._timepickerActions.writeValue(Fl(t))):null==t&&this._store.dispatch(this._timepickerActions.writeValue(null))}registerOnChange(t){this.onChange=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this.disabled=t,this._cd.markForCheck()}ngOnDestroy(){this.timepickerSub.unsubscribe()}_renderTime(t){if(!Ll(t))return this.hours="",this.minutes="",this.seconds="",void(this.meridian=this.meridians[0]);const e=Fl(t);let n=e.getHours();this.showMeridian&&(this.meridian=this.meridians[n>=12?1:0],n%=12,0===n&&(n=12)),this.hours=Bl(n),this.minutes=Bl(e.getMinutes()),this.seconds=Bl(e.getUTCSeconds())}}class ed{static forRoot(){return{ngModule:ed,providers:[Zl,El,Xl]}}}var nd=s["ɵcrt"]({encapsulation:2,styles:["\n    .bs-chevron {\n      border-style: solid;\n      display: block;\n      width: 9px;\n      height: 9px;\n      position: relative;\n      border-width: 3px 0px 0 3px;\n    }\n\n    .bs-chevron-up {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg);\n      top: 2px;\n    }\n\n    .bs-chevron-down {\n      -webkit-transform: rotate(-135deg);\n      transform: rotate(-135deg);\n      top: -2px;\n    }\n\n    .bs-timepicker-field {\n      width: 50px;\n      padding: .375rem .55rem;\n    }\n  "],data:{}});function ad(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function rd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeMinutes(r.minuteStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canIncrementMinutes||!n.isEditable)}))}function id(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "]))],null,null)}function sd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeSeconds(r.secondsStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canIncrementSeconds||!n.isEditable)}))}function od(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function ud(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"td",[],null,null,null,null,null))],null,null)}function ld(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" : "]))],null,null)}function dd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeMinutes(r.minuteStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeMinutes(r.minuteStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeMinutes(0-r.minuteStep,"key")&&a),"change"===e&&(a=!1!==r.updateMinutes(n.target.value)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.invalidMinutes),t(e,1,0,n.invalidMinutes,n.minutesPlaceholder,n.readonlyInput,n.disabled,n.minutes,n.labelMinutes)}))}function cd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" : "]))],null,null)}function fd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeSeconds(r.secondsStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeSeconds(r.secondsStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeSeconds(0-r.secondsStep,"key")&&a),"change"===e&&(a=!1!==r.updateSeconds(n.target.value)&&a),a}),null,null))],null,(function(t,e){var n=e.component;t(e,0,0,n.invalidSeconds),t(e,1,0,n.invalidSeconds,n.secondsPlaceholder,n.readonlyInput,n.disabled,n.seconds,n.labelSeconds)}))}function hd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function gd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"button",[["class","btn btn-default text-center"],["type","button"]],[[8,"disabled",0],[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.toggleMeridian()&&a),a}),null,null)),(t()(),s["ɵted"](2,null,[""," "]))],null,(function(t,e){var n=e.component;t(e,1,0,!n.isEditable||!n.canToggleMeridian,!n.isEditable||!n.canToggleMeridian),t(e,2,0,n.meridian)}))}function pd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function bd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeMinutes(0-r.minuteStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canDecrementMinutes||!n.isEditable)}))}function md(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" "]))],null,null)}function yd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeSeconds(0-r.secondsStep)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null))],null,(function(t,e){var n=e.component;t(e,1,0,!n.canDecrementSeconds||!n.isEditable)}))}function vd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["   "]))],null,null)}function xd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"td",[],null,null,null,null,null))],null,null)}function _d(t){return s["ɵvid"](2,[(t()(),s["ɵeld"](0,0,null,null,48,"table",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,47,"tbody",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,15,"tr",[["class","text-center"]],[[8,"hidden",0]],null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeHours(r.hourStep)&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,0,"span",[["class","bs-chevron bs-chevron-up"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ad)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rd)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,id)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sd)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,od)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ud)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,14,"tr",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,1,"td",[["class","form-group"]],[[2,"has-error",null]],null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,0,"input",[["class","form-control text-center bs-timepicker-field"],["maxlength","2"],["type","text"]],[[2,"is-invalid",null],[8,"placeholder",0],[8,"readOnly",0],[8,"disabled",0],[8,"value",0],[1,"aria-label",0]],[[null,"wheel"],[null,"keydown.ArrowUp"],[null,"keydown.ArrowDown"],[null,"change"]],(function(t,e,n){var a=!0,r=t.component;return"wheel"===e&&(r.prevDef(n),a=!1!==r.changeHours(r.hourStep*r.wheelSign(n),"wheel")&&a),"keydown.ArrowUp"===e&&(a=!1!==r.changeHours(r.hourStep,"key")&&a),"keydown.ArrowDown"===e&&(a=!1!==r.changeHours(0-r.hourStep,"key")&&a),"change"===e&&(a=!1!==r.updateHours(n.target.value)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ld)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,dd)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cd)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fd)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hd)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gd)),s["ɵdid"](32,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](33,0,null,null,15,"tr",[["class","text-center"]],[[8,"hidden",0]],null,null,null,null)),(t()(),s["ɵeld"](34,0,null,null,2,"td",[],null,null,null,null,null)),(t()(),s["ɵeld"](35,0,null,null,1,"a",[["class","btn btn-link"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.changeHours(0-r.hourStep)&&a),a}),null,null)),(t()(),s["ɵeld"](36,0,null,null,0,"span",[["class","bs-chevron bs-chevron-down"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,pd)),s["ɵdid"](38,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,bd)),s["ɵdid"](40,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,md)),s["ɵdid"](42,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yd)),s["ɵdid"](44,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vd)),s["ɵdid"](46,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xd)),s["ɵdid"](48,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,7,0,n.showMinutes),t(e,9,0,n.showMinutes),t(e,11,0,n.showSeconds),t(e,13,0,n.showSeconds),t(e,15,0,n.showMeridian),t(e,17,0,n.showMeridian),t(e,22,0,n.showMinutes),t(e,24,0,n.showMinutes),t(e,26,0,n.showSeconds),t(e,28,0,n.showSeconds),t(e,30,0,n.showMeridian),t(e,32,0,n.showMeridian),t(e,38,0,n.showMinutes),t(e,40,0,n.showMinutes),t(e,42,0,n.showSeconds),t(e,44,0,n.showSeconds),t(e,46,0,n.showMeridian),t(e,48,0,n.showMeridian)}),(function(t,e){var n=e.component;t(e,2,0,!n.showSpinners),t(e,4,0,!n.canIncrementHours||!n.isEditable),t(e,19,0,n.invalidHours),t(e,20,0,n.invalidHours,n.hoursPlaceholder,n.readonlyInput,n.disabled,n.hours,n.labelHours),t(e,33,0,!n.showSpinners),t(e,35,0,!n.canDecrementHours||!n.isEditable)}))}var Td=n("E2fk");let Od=(()=>{class t{constructor(t){this.http=t}getLogs(){return this.http.get("api/logs/all")}validateDashboardUrl(t){return this.http.get(`api/grafana/validation/${t}`)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();class wd{constructor(t,e,n){this.logsService=t,this.datePipe=e,this.ngZone=n,this.icons=ht.a,this.bsConfig={dateInputFormat:"YYYY-MM-DD",containerClass:"theme-default"},this.prioritys=[{name:"Info",value:"[INF]"},{name:"Warning",value:"[WRN]"},{name:"Error",value:"[ERR]"},{name:"All",value:"All"}],this.priority="All",this.search="",this.startTime=new Date,this.endTime=new Date,this.startTime.setHours(0,0),this.endTime.setHours(23,59)}ngOnInit(){this.getInfo(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.getInfo()})},5e3)})}ngOnDestroy(){clearInterval(this.interval)}getInfo(){this.logsService.getLogs().subscribe(t=>{this.contentData=t,this.filterLogs()})}abstractfilters(){const t=this.priority,e=this.search.toLowerCase().replace(/,/g,"");let n;if(this.selectedDate){const t=this.selectedDate.getMonth()+1,e=this.selectedDate.getDate();n=`${this.selectedDate.getFullYear().toString()}-${t<=9?`0${t}`:`${t}`}-${e<=9?`0${e}`:`${e}`}`}else n="";return{priority:t,key:e,yearMonthDay:n,sTime:60*(this.startTime?this.startTime.getHours():0)+(this.startTime?this.startTime.getMinutes():0),eTime:60*(this.endTime?this.endTime.getHours():23)+(this.endTime?this.endTime.getMinutes():59)}}filterExecutor(t,e){return t.filter(t=>{const n=this.datePipe.transform(t.stamp,"mediumTime"),a=parseInt(n.split(":")[0],10),r=parseInt(n.split(":")[1],10);let i,s,o;return i="All"===e.priority?t.priority:e.priority,s=e.yearMonthDay?e.yearMonthDay:t.stamp,o=60*a+r,t.priority===i&&-1!==t.message.toLowerCase().indexOf(e.key)&&-1!==t.stamp.indexOf(s)&&o>=e.sTime&&o<=e.eTime})}filterLogs(){const t=this.abstractfilters();this.clog=this.filterExecutor(this.contentData.clog,t),this.audit_log=this.filterExecutor(this.contentData.audit_log,t)}clearSearchKey(){this.search="",this.filterLogs()}clearDate(){this.selectedDate=null,this.filterLogs()}}var Sd=s["ɵcrt"]({encapsulation:0,styles:[["p[_ngcontent-%COMP%]{font-family:monospace}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{display:flex}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.card[_ngcontent-%COMP%]   .timestamp[_ngcontent-%COMP%]{font-weight:700;flex-shrink:0}.card[_ngcontent-%COMP%]   .priority[_ngcontent-%COMP%]{margin-left:.5rem}.card[_ngcontent-%COMP%]   .message[_ngcontent-%COMP%]{margin-left:1rem}.card[_ngcontent-%COMP%]   .err[_ngcontent-%COMP%]{color:#a94442}.card[_ngcontent-%COMP%]   .warn[_ngcontent-%COMP%]{color:#ffc200}.card[_ngcontent-%COMP%]   .info[_ngcontent-%COMP%]{color:#2b99a8}  timepicker table tbody tr td input.bs-timepicker-field{width:3.5rem!important;font-size:1rem;padding:4px 6px}.middle[_ngcontent-%COMP%]{padding-top:7px}"]],data:{}});function Id(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Nd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[["class","timestamp"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),s["ɵppd"](3,1),(t()(),s["ɵeld"](4,0,null,null,2,"span",[],[[8,"className",0]],null,null,null,null)),s["ɵppd"](5,1),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,1,"span",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""]))],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.stamp));t(e,2,0,n);var a=s["ɵinlineInterpolate"](1,"priority ",s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent,1),e.context.$implicit.priority)),"");t(e,4,0,a),t(e,6,0,e.context.$implicit.priority),t(e,8,0,e.context.$implicit.message)}))}function Cd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["No entries found"]))],null,null)}function Rd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","card bg-light mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Nd)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cd)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.clog),t(e,5,0,0===n.contentData.clog.length)}),null)}function Ad(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"span",[["class","timestamp"]],null,null,null,null,null)),(t()(),s["ɵted"](2,null,["",""])),s["ɵppd"](3,1),(t()(),s["ɵeld"](4,0,null,null,2,"span",[],[[8,"className",0]],null,null,null,null)),s["ɵppd"](5,1),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,1,"span",[["class","message"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""]))],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.context.$implicit.stamp));t(e,2,0,n);var a=s["ɵinlineInterpolate"](1,"priority ",s["ɵunv"](e,4,0,t(e,5,0,s["ɵnov"](e.parent.parent.parent,1),e.context.$implicit.priority)),"");t(e,4,0,a),t(e,6,0,e.context.$implicit.priority),t(e,8,0,e.context.$implicit.message)}))}function kd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["No entries found"]))],null,null)}function Ed(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","card bg-light mb-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Ad)),s["ɵdid"](3,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,kd)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.audit_log),t(e,5,0,0===n.contentData.audit_log.length)}),null)}function Ld(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"div",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Id)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(t()(),s["ɵeld"](3,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](4,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](5,0,null,0,3,"tab",[["heading","Cluster Logs"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](6,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rd)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,0,3,"tab",[["heading","Audit Logs"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](10,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ed)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,s["ɵnov"](e.parent,4)),t(e,6,0,"Cluster Logs"),t(e,8,0,n.clog),t(e,10,0,"Audit Logs"),t(e,12,0,n.audit_log)}),(function(t,e){t(e,3,0,s["ɵnov"](e,4).clazz),t(e,5,0,s["ɵnov"](e,6).id,s["ɵnov"](e,6).active,s["ɵnov"](e,6).addClass,s["ɵnov"](e,6).role,s["ɵnov"](e,6).ariaLabelledby),t(e,9,0,s["ɵnov"](e,10).id,s["ɵnov"](e,10).active,s["ɵnov"](e,10).addClass,s["ɵnov"](e,10).role,s["ɵnov"](e,10).ariaLabelledby)}))}function Dd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function Pd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,81,"div",[["class","form-inline"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,14,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](2,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Priority:"])),(t()(),s["ɵeld"](7,0,null,0,8,"select",[["class","form-control custom-select"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"ngModelChange"===e&&(a=!1!==(r.priority=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[8,null],Z.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Dd)),s["ɵdid"](15,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](16,0,null,null,22,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](17,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](20,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Keyword:"])),(t()(),s["ɵeld"](22,0,null,0,16,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,5,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),s["ɵeld"](24,0,null,null,4,"span",[["class","input-group-text"]],null,null,null,null,null)),(t()(),s["ɵeld"](25,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](27,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](28,1),(t()(),s["ɵeld"](29,0,null,null,6,"input",[["class","form-control"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,30)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,30).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,30)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,30)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.search=n)&&a),"keyup"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](30,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](32,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](34,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](35,16384,null,0,Z.h,[[8,null],Z.a],null,null),(t()(),s["ɵeld"](36,0,null,null,2,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](37,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.clearSearchKey()&&a),a}),null,null)),(t()(),s["ɵeld"](38,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](39,0,null,null,19,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](40,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](43,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Date:"])),(t()(),s["ɵeld"](45,0,null,0,13,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](46,16777216,null,null,9,"input",[["bsDatepicker",""],["class","form-control"],["placeholder","Datepicker"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,47)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,47).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,47)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,47)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,49).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,49).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,49).onBlur()&&a),"ngModelChange"===e&&(a=!1!==(r.selectedDate=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),null,null)),s["ɵdid"](47,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](48,737280,null,0,rt.c,[rt.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](49,16384,null,0,rt.f,[rt.c,rt.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[rt.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,rt.f]),s["ɵdid"](52,671744,null,0,$.u,[[8,null],[6,$.o],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](54,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](55,16384,null,0,Z.h,[[8,null],Z.a],null,null),(t()(),s["ɵeld"](56,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](57,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.clearDate()&&a),a}),null,null)),(t()(),s["ɵeld"](58,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,22,"div",[["class","form-group"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](60,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](63,0,null,0,1,"label",[["class","col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Time range:"])),(t()(),s["ɵeld"](65,0,null,0,16,"div",[["class","d-inline-flex"]],null,null,null,null,null)),(t()(),s["ɵeld"](66,0,null,null,6,"timepicker",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],(function(t,e,n){var a=!0,r=t.component;return"ngModelChange"===e&&(a=!1!==(r.startTime=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),_d,nd)),s["ɵprd"](512,null,Xl,Xl,[]),s["ɵdid"](68,704512,null,0,td,[Zl,s.ChangeDetectorRef,Xl,El],{minuteStep:[0,"minuteStep"],showSpinners:[1,"showSpinners"],showMeridian:[2,"showMeridian"]},null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[td]),s["ɵdid"](70,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](72,16384,null,0,$.r,[[4,$.q]],null,null),(t()(),s["ɵeld"](73,0,null,null,1,"span",[["class","middle"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" — "])),(t()(),s["ɵeld"](75,0,null,null,6,"timepicker",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"]],(function(t,e,n){var a=!0,r=t.component;return"ngModelChange"===e&&(a=!1!==(r.endTime=n)&&a),"ngModelChange"===e&&(a=!1!==r.filterLogs()&&a),a}),_d,nd)),s["ɵprd"](512,null,Xl,Xl,[]),s["ɵdid"](77,704512,null,0,td,[Zl,s.ChangeDetectorRef,Xl,El],{minuteStep:[0,"minuteStep"],showSpinners:[1,"showSpinners"],showMeridian:[2,"showMeridian"]},null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[td]),s["ɵdid"](79,671744,null,0,$.u,[[8,null],[8,null],[8,null],[6,$.p]],{model:[0,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](81,16384,null,0,$.r,[[4,$.q]],null,null)],(function(t,e){var n=e.component;t(e,2,0),t(e,10,0,n.priority),t(e,15,0,n.prioritys),t(e,17,0);var a=t(e,28,0,n.icons.search);t(e,27,0,a),t(e,32,0,n.search),t(e,40,0),t(e,48,0,n.bsConfig),t(e,52,0,n.selectedDate),t(e,60,0),t(e,68,0,1,!1,!1),t(e,70,0,n.startTime),t(e,77,0,1,!1,!1),t(e,79,0,n.endTime)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass),t(e,16,0,s["ɵnov"](e,17).hasErrors,s["ɵnov"](e,17).hasSuccess),t(e,29,0,s["ɵnov"](e,34).ngClassUntouched,s["ɵnov"](e,34).ngClassTouched,s["ɵnov"](e,34).ngClassPristine,s["ɵnov"](e,34).ngClassDirty,s["ɵnov"](e,34).ngClassValid,s["ɵnov"](e,34).ngClassInvalid,s["ɵnov"](e,34).ngClassPending,s["ɵnov"](e,35).validClass,s["ɵnov"](e,35).invalidClass),t(e,38,0,s["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,"")),t(e,39,0,s["ɵnov"](e,40).hasErrors,s["ɵnov"](e,40).hasSuccess),t(e,46,0,s["ɵnov"](e,54).ngClassUntouched,s["ɵnov"](e,54).ngClassTouched,s["ɵnov"](e,54).ngClassPristine,s["ɵnov"](e,54).ngClassDirty,s["ɵnov"](e,54).ngClassValid,s["ɵnov"](e,54).ngClassInvalid,s["ɵnov"](e,54).ngClassPending,s["ɵnov"](e,55).validClass,s["ɵnov"](e,55).invalidClass),t(e,58,0,s["ɵinlineInterpolate"](1,"icon-prepend ",n.icons.destroy,"")),t(e,59,0,s["ɵnov"](e,60).hasErrors,s["ɵnov"](e,60).hasSuccess),t(e,66,0,s["ɵnov"](e,72).ngClassUntouched,s["ɵnov"](e,72).ngClassTouched,s["ɵnov"](e,72).ngClassPristine,s["ɵnov"](e,72).ngClassDirty,s["ɵnov"](e,72).ngClassValid,s["ɵnov"](e,72).ngClassInvalid,s["ɵnov"](e,72).ngClassPending),t(e,75,0,s["ɵnov"](e,81).ngClassUntouched,s["ɵnov"](e,81).ngClassTouched,s["ɵnov"](e,81).ngClassPristine,s["ɵnov"](e,81).ngClassDirty,s["ɵnov"](e,81).ngClassValid,s["ɵnov"](e,81).ngClassInvalid,s["ɵnov"](e,81).ngClassPending)}))}function Md(t){return s["ɵvid"](0,[s["ɵpid"](0,Se.a,[i.DatePipe]),s["ɵpid"](0,Td.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,Ld)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[["logFiltersTpl",2]],null,0,null,Pd))],(function(t,e){t(e,3,0,e.component.contentData)}),null)}function qd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-logs",[],null,null,null,Md,Sd)),s["ɵdid"](1,245760,null,0,wd,[Od,i.DatePipe,s.NgZone],null,null)],(function(t,e){t(e,1,0)}),null)}var jd=s["ɵccf"]("cd-logs",wd,qd,{},{},[]),Fd=n("OcYo");let Gd=(()=>{class t{constructor(t,e,n,a,r,i,s,o){this.formBuilder=t,this.mgrModuleService=e,this.notificationService=n,this.router=a,this.telemetryService=r,this.i18n=i,this.textToDownloadService=s,this.telemetryNotificationService=o,this.error=!1,this.licenseAgrmt=!1,this.loading=!1,this.options={},this.requiredFields=["channel_basic","channel_crash","channel_device","channel_ident","interval","proxy","contact","description"],this.report=void 0,this.reportId=void 0,this.sendToUrl="",this.sendToDeviceUrl="",this.step=1}ngOnInit(){this.loading=!0;const t=[this.mgrModuleService.getOptions("telemetry"),this.mgrModuleService.getConfig("telemetry")];Object(Mo.a)(t).subscribe(t=>{const e=t[1];this.moduleEnabled=e.enabled,this.sendToUrl=e.url,this.sendToDeviceUrl=e.device_url,this.options=J.pick(t[0],this.requiredFields);const n=J.pick(e,this.requiredFields);this.createConfigForm(),this.configForm.setValue(n),this.loading=!1},t=>{this.error=!0})}createConfigForm(){const t={};J.forEach(Object.values(this.options),e=>{t[e.name]=[e.default_value,this.getValidators(e)]}),this.configForm=this.formBuilder.group(t)}createPreviewForm(){const t={report:JSON.stringify(this.report,null,2),reportId:this.reportId,licenseAgrmt:[this.licenseAgrmt,$.B.requiredTrue]};this.previewForm=this.formBuilder.group(t)}getValidators(t){const e=[];switch(t.type){case"int":e.push(Fs.a.number()),e.push($.B.required),J.isNumber(t.min)&&e.push($.B.min(t.min)),J.isNumber(t.max)&&e.push($.B.max(t.max));break;case"str":J.isNumber(t.min)&&e.push($.B.minLength(t.min)),J.isNumber(t.max)&&e.push($.B.maxLength(t.max))}return e}getReport(){this.loading=!0,this.telemetryService.getReport().subscribe(t=>{this.report=t,this.reportId=t.report.report_id,this.createPreviewForm(),this.loading=!1,this.step++},t=>{this.error=!0})}updateConfig(){const t={};J.forEach(Object.values(this.options),e=>{const n=this.configForm.get(e.name);n.dirty&&n.valid&&(t[e.name]=n.value)}),this.mgrModuleService.updateConfig("telemetry",t).subscribe(()=>{this.disableModule(this.i18n("Your settings have been applied successfully. Due to privacy/legal reasons the Telemetry module is now disabled until you complete the next step and accept the license."),()=>{this.getReport()})},()=>{this.configForm.setErrors({cdSubmitButton:!0})})}download(t,e){this.textToDownloadService.download(JSON.stringify(t,null,2),e)}disableModule(t=null,e=null){this.telemetryService.enable(!1).subscribe(()=>{this.telemetryNotificationService.setVisibility(!0),t&&this.notificationService.show(ge.a.success,t),e?e():this.router.navigate([""])})}next(){this.configForm.pristine?this.getReport():this.updateConfig()}back(){this.step--}onSubmit(){this.telemetryService.enable().subscribe(()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(ge.a.success,this.i18n("The Telemetry module has been configured and activated successfully.")),this.router.navigate([""])})}}return xl.__decorate([L(),xl.__metadata("design:type",Object)],t.prototype,"blockUI",void 0),t})(),Vd=(()=>{class t{constructor(t){this.http=t,this.url="api/telemetry"}getReport(){return this.http.get(`${this.url}/report`)}enable(t=!0){const e={enable:t};return t&&(e.license_name="sharing-1-0"),this.http.put(`${this.url}`,e)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();var zd=n("Iab2");let Bd=(()=>{class t{constructor(){}download(t,e){Object(zd.saveAs)(new Blob([t]),e)}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();var Yd=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Hd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ti.b,Ti.a)),s["ɵdid"](1,49152,null,0,Oi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading configuration..."]))],null,null)}function Ud(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The configuration could not be loaded."]))],(function(t,e){t(e,1,0,"error")}),null)}function Wd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" The plugin is already "])),(t()(),s["ɵeld"](2,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["enabled"])),(t()(),s["ɵted"](-1,null,[". Click "])),(t()(),s["ɵeld"](5,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Deactivate"])),(t()(),s["ɵted"](-1,null,[" to disable it.  "])),(t()(),s["ɵeld"](8,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.disableModule("The Telemetry module has been disabled successfully.")&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Deactivate"]))],null,null)}function Kd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value is too low! It must be greater or equal to 8."]))],null,null)}function $d(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,224,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,223,"form",[["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,217,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["Step "," of 2: Telemetry report configuration"])),(t()(),s["ɵeld"](10,0,null,null,209,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,12,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The telemetry module sends anonymous data about this Ceph cluster back to the Ceph developers to help understand how Ceph is used and what problems users may be experiencing."])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" This data is visualized on "])),(t()(),s["ɵeld"](15,0,null,null,1,"a",[["href","https://telemetry-public.ceph.com/"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["public dashboards"])),(t()(),s["ɵted"](-1,null,[" that allow the community to quickly see summary statistics on how many clusters are reporting, their total capacity and OSD count, and version distribution trends."])),(t()(),s["ɵeld"](18,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[" The data being reported does "])),(t()(),s["ɵeld"](21,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["not"])),(t()(),s["ɵted"](23,null,[" contain any sensitive data like pool names, object names, object contents, hostnames, or device serial numbers. It contains counters and statistics on how the cluster has been deployed, the version of Ceph, the distribution of the hosts and other parameters which help the project to gain a better understanding of the way Ceph is used. The data is sent secured to "," and "," (device report)."])),(t()(),s["ɵand"](16777216,null,null,1,null,Wd)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](26,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Channels"])),(t()(),s["ɵeld"](28,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,['The telemetry report is broken down into several "channels", each with a different type of information that can be configured below.'])),(t()(),s["ɵeld"](30,0,null,null,31,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](31,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](34,0,null,0,17,"label",[["class","cd-col-form-label"],["for","channel_basic"]],null,null,null,null,null)),(t()(),s["ɵeld"](35,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Basic"])),(t()(),s["ɵeld"](37,0,null,null,14,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](38,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](39,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes basic information about the cluster:"])),(t()(),s["ɵeld"](41,0,null,0,10,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](42,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Capacity of the cluster"])),(t()(),s["ɵeld"](44,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Number of monitors, managers, OSDs, MDSs, object gateways, or other daemons"])),(t()(),s["ɵeld"](46,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Software version currently being used"])),(t()(),s["ɵeld"](48,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Number and types of RADOS pools and CephFS file systems"])),(t()(),s["ɵeld"](50,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Names of configuration options that have been changed from their default (but not their values)"])),(t()(),s["ɵeld"](52,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](53,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](54,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","channel_basic"],["id","channel_basic"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,55).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,55).onTouched()&&a),a}),null,null)),s["ɵdid"](55,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](57,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](59,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](60,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](61,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_basic"]],null,null,null,null,null)),(t()(),s["ɵeld"](62,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](63,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](66,0,null,0,15,"label",[["class","cd-col-form-label"],["for","channel_crash"]],null,null,null,null,null)),(t()(),s["ɵeld"](67,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Crash"])),(t()(),s["ɵeld"](69,0,null,null,12,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](70,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](71,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes information about daemon crashes:"])),(t()(),s["ɵeld"](73,0,null,0,8,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](74,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Type of daemon"])),(t()(),s["ɵeld"](76,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Version of the daemon"])),(t()(),s["ɵeld"](78,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Operating system (OS distribution, kernel version)"])),(t()(),s["ɵeld"](80,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Stack trace identifying where in the Ceph code the crash occurred"])),(t()(),s["ɵeld"](82,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](83,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](84,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","channel_crash"],["id","channel_crash"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,85).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,85).onTouched()&&a),a}),null,null)),s["ɵdid"](85,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](87,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](89,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](90,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](91,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_crash"]],null,null,null,null,null)),(t()(),s["ɵeld"](92,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](93,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](96,0,null,0,4,"label",[["class","cd-col-form-label"],["for","channel_device"]],null,null,null,null,null)),(t()(),s["ɵeld"](97,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Device"])),(t()(),s["ɵeld"](99,0,null,null,1,"cd-helper",[["html","Includes information about device metrics like anonymized SMART metrics."]],null,null,null,uu.b,uu.a)),s["ɵdid"](100,49152,null,0,lu.a,[],{html:[0,"html"]},null),(t()(),s["ɵeld"](101,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](102,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](103,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","channel_device"],["id","channel_device"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,104).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,104).onTouched()&&a),a}),null,null)),s["ɵdid"](104,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](106,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](108,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](109,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](110,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_device"]],null,null,null,null,null)),(t()(),s["ɵeld"](111,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](112,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](115,0,null,0,11,"label",[["class","cd-col-form-label"],["for","channel_ident"]],null,null,null,null,null)),(t()(),s["ɵeld"](116,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ident"])),(t()(),s["ɵeld"](118,0,null,null,8,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](119,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](120,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Includes user-provided identifying information about the cluster:"])),(t()(),s["ɵeld"](122,0,null,0,4,"ul",[],null,null,null,null,null)),(t()(),s["ɵeld"](123,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster description"])),(t()(),s["ɵeld"](125,0,null,null,1,"li",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact email address"])),(t()(),s["ɵeld"](127,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](128,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](129,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","channel_ident"],["id","channel_ident"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,130).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,130).onTouched()&&a),a}),null,null)),s["ɵdid"](130,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](132,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](134,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](135,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](136,0,null,null,0,"label",[["class","custom-control-label"],["for","channel_ident"]],null,null,null,null,null)),(t()(),s["ɵeld"](137,0,null,null,5,"legend",[],null,null,null,null,null)),(t()(),s["ɵeld"](138,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact Information"])),(t()(),s["ɵeld"](140,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](141,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](-1,0,["Submitting any contact information is completely optional and disabled by default."])),(t()(),s["ɵeld"](143,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](144,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](147,0,null,0,1,"label",[["class","cd-col-form-label"],["for","contact"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Contact"])),(t()(),s["ɵeld"](149,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](150,0,null,null,6,"input",[["class","form-control"],["formControlName","contact"],["id","contact"],["placeholder","Example User <user@example.com>"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,151)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,151).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,151)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,151)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](151,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](153,671744,[[9,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](155,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](156,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](157,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](158,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,11,{FormControlNames:1}),s["ɵqud"](603979776,12,{messagesBlock:0}),(t()(),s["ɵeld"](161,0,null,0,1,"label",[["class","cd-col-form-label"],["for","description"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Description"])),(t()(),s["ɵeld"](163,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](164,0,null,null,6,"input",[["class","form-control"],["formControlName","description"],["id","description"],["placeholder","My first Ceph cluster"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,165)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,165).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,165)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,165)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](165,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](167,671744,[[11,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](169,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](170,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](171,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Advanced Settings"])),(t()(),s["ɵeld"](173,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](174,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,13,{FormControlNames:1}),s["ɵqud"](603979776,14,{messagesBlock:0}),(t()(),s["ɵeld"](177,0,null,0,5,"label",[["class","cd-col-form-label"],["for","interval"]],null,null,null,null,null)),(t()(),s["ɵeld"](178,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Interval"])),(t()(),s["ɵeld"](180,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](181,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](-1,0,["The module compiles and sends a new report every 24 hours by default. You can adjust this interval by setting a different number of hours."])),(t()(),s["ɵeld"](183,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](184,0,null,null,7,"input",[["class","form-control"],["formControlName","interval"],["id","interval"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,185)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,185).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,185)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,185)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,186).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,186).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,186).onTouched()&&a),a}),null,null)),s["ɵdid"](185,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](186,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](188,671744,[[13,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](190,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](191,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kd)),s["ɵdid"](193,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](194,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](195,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,15,{FormControlNames:1}),s["ɵqud"](603979776,16,{messagesBlock:0}),(t()(),s["ɵeld"](198,0,null,0,8,"label",[["class","cd-col-form-label"],["for","proxy"]],null,null,null,null,null)),(t()(),s["ɵeld"](199,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Proxy"])),(t()(),s["ɵeld"](201,0,null,null,5,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](202,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](203,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["If the cluster cannot directly connect to the configured telemetry endpoint (default telemetry.ceph.com), you can configure a HTTP/HTTPS proxy server by e.g. adding https://10.0.0.1:8080"])),(t()(),s["ɵeld"](205,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You can also include a user:pass if needed e.g. https://ceph:telemetry@10.0.0.1:8080"])),(t()(),s["ɵeld"](207,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](208,0,null,null,6,"input",[["class","form-control"],["formControlName","proxy"],["id","proxy"],["placeholder","https://10.0.0.1:8080"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,209)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,209).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,209)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,209)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](209,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](211,671744,[[15,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](213,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](214,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](215,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](216,0,null,null,3,"p",[],null,null,null,null,null)),(t()(),s["ɵeld"](217,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Note:"])),(t()(),s["ɵted"](-1,null,[" By clicking 'Next' you will first see a preview of the report content before you can activate the automatic submission of your data."])),(t()(),s["ɵeld"](220,0,null,null,4,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](221,0,null,null,3,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](222,0,null,null,2,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.next()&&a),a}),null,null)),(t()(),s["ɵeld"](223,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Next"]))],(function(t,e){var n=e.component;t(e,3,0,n.configForm),t(e,6,0,n.configForm),t(e,25,0,n.moduleEnabled),t(e,31,0),t(e,57,0,"channel_basic"),t(e,60,0,"channel_basic"),t(e,63,0),t(e,87,0,"channel_crash"),t(e,90,0,"channel_crash"),t(e,93,0),t(e,100,0,"Includes information about device metrics like anonymized SMART metrics."),t(e,106,0,"channel_device"),t(e,109,0,"channel_device"),t(e,112,0),t(e,132,0,"channel_ident"),t(e,135,0,"channel_ident"),t(e,144,0),t(e,153,0,"contact"),t(e,156,0,"contact"),t(e,158,0),t(e,167,0,"description"),t(e,170,0,"description"),t(e,174,0),t(e,188,0,"interval"),t(e,191,0,"interval"),t(e,193,0,n.configForm.showError("interval",s["ɵnov"](e,3),"min")),t(e,195,0),t(e,211,0,"proxy"),t(e,214,0,"proxy")}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,9,0,n.step),t(e,23,0,n.sendToUrl,n.sendToDeviceUrl),t(e,30,0,s["ɵnov"](e,31).hasErrors,s["ɵnov"](e,31).hasSuccess),t(e,54,0,s["ɵnov"](e,59).ngClassUntouched,s["ɵnov"](e,59).ngClassTouched,s["ɵnov"](e,59).ngClassPristine,s["ɵnov"](e,59).ngClassDirty,s["ɵnov"](e,59).ngClassValid,s["ɵnov"](e,59).ngClassInvalid,s["ɵnov"](e,59).ngClassPending,s["ɵnov"](e,60).validClass,s["ɵnov"](e,60).invalidClass),t(e,62,0,s["ɵnov"](e,63).hasErrors,s["ɵnov"](e,63).hasSuccess),t(e,84,0,s["ɵnov"](e,89).ngClassUntouched,s["ɵnov"](e,89).ngClassTouched,s["ɵnov"](e,89).ngClassPristine,s["ɵnov"](e,89).ngClassDirty,s["ɵnov"](e,89).ngClassValid,s["ɵnov"](e,89).ngClassInvalid,s["ɵnov"](e,89).ngClassPending,s["ɵnov"](e,90).validClass,s["ɵnov"](e,90).invalidClass),t(e,92,0,s["ɵnov"](e,93).hasErrors,s["ɵnov"](e,93).hasSuccess),t(e,103,0,s["ɵnov"](e,108).ngClassUntouched,s["ɵnov"](e,108).ngClassTouched,s["ɵnov"](e,108).ngClassPristine,s["ɵnov"](e,108).ngClassDirty,s["ɵnov"](e,108).ngClassValid,s["ɵnov"](e,108).ngClassInvalid,s["ɵnov"](e,108).ngClassPending,s["ɵnov"](e,109).validClass,s["ɵnov"](e,109).invalidClass),t(e,111,0,s["ɵnov"](e,112).hasErrors,s["ɵnov"](e,112).hasSuccess),t(e,129,0,s["ɵnov"](e,134).ngClassUntouched,s["ɵnov"](e,134).ngClassTouched,s["ɵnov"](e,134).ngClassPristine,s["ɵnov"](e,134).ngClassDirty,s["ɵnov"](e,134).ngClassValid,s["ɵnov"](e,134).ngClassInvalid,s["ɵnov"](e,134).ngClassPending,s["ɵnov"](e,135).validClass,s["ɵnov"](e,135).invalidClass),t(e,143,0,s["ɵnov"](e,144).hasErrors,s["ɵnov"](e,144).hasSuccess),t(e,150,0,s["ɵnov"](e,155).ngClassUntouched,s["ɵnov"](e,155).ngClassTouched,s["ɵnov"](e,155).ngClassPristine,s["ɵnov"](e,155).ngClassDirty,s["ɵnov"](e,155).ngClassValid,s["ɵnov"](e,155).ngClassInvalid,s["ɵnov"](e,155).ngClassPending,s["ɵnov"](e,156).validClass,s["ɵnov"](e,156).invalidClass),t(e,157,0,s["ɵnov"](e,158).hasErrors,s["ɵnov"](e,158).hasSuccess),t(e,164,0,s["ɵnov"](e,169).ngClassUntouched,s["ɵnov"](e,169).ngClassTouched,s["ɵnov"](e,169).ngClassPristine,s["ɵnov"](e,169).ngClassDirty,s["ɵnov"](e,169).ngClassValid,s["ɵnov"](e,169).ngClassInvalid,s["ɵnov"](e,169).ngClassPending,s["ɵnov"](e,170).validClass,s["ɵnov"](e,170).invalidClass),t(e,173,0,s["ɵnov"](e,174).hasErrors,s["ɵnov"](e,174).hasSuccess),t(e,184,0,s["ɵnov"](e,190).ngClassUntouched,s["ɵnov"](e,190).ngClassTouched,s["ɵnov"](e,190).ngClassPristine,s["ɵnov"](e,190).ngClassDirty,s["ɵnov"](e,190).ngClassValid,s["ɵnov"](e,190).ngClassInvalid,s["ɵnov"](e,190).ngClassPending,s["ɵnov"](e,191).validClass,s["ɵnov"](e,191).invalidClass),t(e,194,0,s["ɵnov"](e,195).hasErrors,s["ɵnov"](e,195).hasSuccess),t(e,208,0,s["ɵnov"](e,213).ngClassUntouched,s["ɵnov"](e,213).ngClassTouched,s["ɵnov"](e,213).ngClassPristine,s["ɵnov"](e,213).ngClassDirty,s["ɵnov"](e,213).ngClassValid,s["ɵnov"](e,213).ngClassInvalid,s["ɵnov"](e,213).ngClassPending,s["ɵnov"](e,214).validClass,s["ɵnov"](e,214).invalidClass)}))}function Zd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,73,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,72,"form",[["name","previewForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,66,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["Step "," of 2: Telemetry report preview"])),(t()(),s["ɵeld"](10,0,null,null,55,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](12,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,17,{FormControlNames:1}),s["ɵqud"](603979776,18,{messagesBlock:0}),(t()(),s["ɵeld"](15,0,null,0,1,"label",[["class","cd-col-form-label"],["for","reportId"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Report ID"])),(t()(),s["ɵeld"](17,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,6,"input",[["class","form-control"],["formControlName","reportId"],["id","reportId"],["readonly",""],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,19)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,19)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,19)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](19,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](21,671744,[[17,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](25,0,null,null,13,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](26,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,19,{FormControlNames:1}),s["ɵqud"](603979776,20,{messagesBlock:0}),(t()(),s["ɵeld"](29,0,null,0,1,"label",[["class","cd-col-form-label"],["for","report"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Report preview"])),(t()(),s["ɵeld"](31,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](32,0,null,null,6,"textarea",[["class","form-control"],["formControlName","report"],["id","report"],["readonly",""],["rows","15"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,33)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,33).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,33)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,33)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](33,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](35,671744,[[19,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](37,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](38,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](39,0,null,null,8,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](40,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,21,{FormControlNames:1}),s["ɵqud"](603979776,22,{messagesBlock:0}),(t()(),s["ɵeld"](43,0,null,0,4,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,1,"button",[["class","btn btn-light mr-2"],["title","Download"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.download(r.report,"telemetry_report.json")&&a),a}),null,null)),(t()(),s["ɵeld"](45,0,null,null,0,"i",[["class","fa fa-download"]],null,null,null,null,null)),(t()(),s["ɵeld"](46,0,null,null,1,"button",[["cdCopy2ClipboardButton","report"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,47).onClick()&&a),a}),null,null)),s["ɵdid"](47,81920,null,0,Fd.a,[s.ElementRef,s.Renderer2,c.j,me.a],{cdCopy2ClipboardButton:[0,"cdCopy2ClipboardButton"]},null),(t()(),s["ɵeld"](48,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](49,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,23,{FormControlNames:1}),s["ɵqud"](603979776,24,{messagesBlock:0}),(t()(),s["ɵeld"](52,0,null,0,13,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](53,0,null,null,12,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](54,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","licenseAgrmt"],["id","licenseAgrmt"],["name","licenseAgrmt"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,55).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,55).onTouched()&&a),a}),null,null)),s["ɵdid"](55,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](57,671744,[[23,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](59,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](60,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](61,0,null,null,4,"label",[["class","custom-control-label"],["for","licenseAgrmt"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["I agree to my telemetry data being submitted under the Community Data License Agreement - Sharing - Version 1.0 ("])),(t()(),s["ɵeld"](63,0,null,null,1,"a",[["href","https://cdla.io/sharing-1-0/"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["https://cdla.io/sharing-1-0/"])),(t()(),s["ɵted"](-1,null,[")"])),(t()(),s["ɵeld"](66,0,null,null,7,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](67,0,null,null,6,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](68,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](69,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](70,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Save"])),(t()(),s["ɵeld"](72,0,null,null,1,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.back()&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){var n=e.component;t(e,3,0,n.previewForm),t(e,6,0,n.previewForm),t(e,12,0),t(e,21,0,"reportId"),t(e,24,0,"reportId"),t(e,26,0),t(e,35,0,"report"),t(e,38,0,"report"),t(e,40,0),t(e,47,0,"report"),t(e,49,0),t(e,57,0,"licenseAgrmt"),t(e,60,0,"licenseAgrmt"),t(e,69,0,n.previewForm)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,9,0,n.step),t(e,11,0,s["ɵnov"](e,12).hasErrors,s["ɵnov"](e,12).hasSuccess),t(e,18,0,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,24).validClass,s["ɵnov"](e,24).invalidClass),t(e,25,0,s["ɵnov"](e,26).hasErrors,s["ɵnov"](e,26).hasSuccess),t(e,32,0,s["ɵnov"](e,37).ngClassUntouched,s["ɵnov"](e,37).ngClassTouched,s["ɵnov"](e,37).ngClassPristine,s["ɵnov"](e,37).ngClassDirty,s["ɵnov"](e,37).ngClassValid,s["ɵnov"](e,37).ngClassInvalid,s["ɵnov"](e,37).ngClassPending,s["ɵnov"](e,38).validClass,s["ɵnov"](e,38).invalidClass),t(e,39,0,s["ɵnov"](e,40).hasErrors,s["ɵnov"](e,40).hasSuccess),t(e,48,0,s["ɵnov"](e,49).hasErrors,s["ɵnov"](e,49).hasSuccess),t(e,54,0,s["ɵnov"](e,59).ngClassUntouched,s["ɵnov"](e,59).ngClassTouched,s["ɵnov"](e,59).ngClassPristine,s["ɵnov"](e,59).ngClassDirty,s["ɵnov"](e,59).ngClassValid,s["ɵnov"](e,59).ngClassInvalid,s["ɵnov"](e,59).ngClassPending,s["ɵnov"](e,60).validClass,s["ɵnov"](e,60).invalidClass)}))}function Jd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](2,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$d)),s["ɵdid"](4,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zd)),s["ɵdid"](6,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null)],(function(t,e){t(e,2,0,e.component.step),t(e,4,0,1),t(e,6,0,2)}),null)}function Qd(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Hd)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ud)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jd)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.loading&&!n.error),t(e,3,0,n.loading&&n.error),t(e,5,0,!n.loading&&!n.error)}),null)}function Xd(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-telemetry",[],null,null,null,Qd,Yd)),s["ɵdid"](1,114688,null,0,Gd,[Ho.a,he,gt.a,qt.m,Vd,me.a,Bd,pe],null,null)],(function(t,e){t(e,1,0)}),null)}var tc=s["ɵccf"]("cd-telemetry",Gd,Xd,{},{},[]);const ec=new ls.a("silence");class nc extends ds.a{constructor(t,e,n,a,r){super(),this.authStorageService=t,this.prometheusAlertService=e,this.urlBuilder=n,this.i18n=a,this.cdDatePipe=r,this.selection=new ti.a,this.icons=ht.a,this.customCss={"badge badge-danger":"active","badge badge-warning":"unprocessed","badge badge-info":"suppressed"},this.permission=this.authStorageService.getPermissions().prometheus,this.tableActions=[{permission:"create",canBePrimary:t=>t.hasSingleSelection,disable:t=>!t.hasSingleSelection||t.first().cdExecuting,icon:ht.a.add,routerLink:()=>"/monitoring"+this.urlBuilder.getCreateFrom(this.selection.first().fingerprint),name:this.i18n("Create Silence")}]}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"labels.alertname",flexGrow:2},{name:this.i18n("Job"),prop:"labels.job",flexGrow:2},{name:this.i18n("Severity"),prop:"labels.severity"},{name:this.i18n("State"),prop:"status.state",cellTransformation:Xr.a.classAdding},{name:this.i18n("Started"),prop:"startsAt",pipe:this.cdDatePipe},{name:this.i18n("URL"),prop:"generatorURL",sortable:!1,cellTemplate:this.externalLinkTpl}]}updateSelection(t){this.selection=t}}var ac=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function rc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["cdTableDetail",""]],null,null,null,xi.b,xi.a)),s["ɵdid"](1,638976,null,0,_i.a,[Se.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],appendParentKey:[3,"appendParentKey"],hideEmpty:[4,"hideEmpty"],customCss:[5,"customCss"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.expandedRow,!1,!0,!1,!0,n.customCss)}),null)}function ic(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"a",[["target","_blank"]],[[8,"href",4]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](3,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](4,1),(t()(),s["ɵted"](-1,null,[" Source"]))],(function(t,e){var n=t(e,4,0,e.component.icons.lineChart);t(e,3,0,n)}),(function(t,e){t(e,0,0,e.context.value)}))}function sc(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{externalLinkTpl:0}),(t()(),s["ɵeld"](1,0,null,null,5,"cd-table",[["identifier","fingerprint"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](2,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"],customCss:[6,"customCss"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](4,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](16777216,null,3,1,null,rc)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[1,2],["externalLinkTpl",2]],null,0,null,ic))],(function(t,e){var n=e.component;t(e,2,0,n.prometheusAlertService.alerts,n.columns,!0,"fingerprint",!0,"single",n.customCss),t(e,4,0,n.permission,n.selection,n.tableActions),t(e,6,0,n.expandedRow)}),null)}class oc extends ds.a{constructor(t){super(),this.i18n=t,this.hideKeys=["alerts","type"]}ngOnInit(){this.columns=[{prop:"name",name:this.i18n("Name")},{prop:"labels.severity",name:this.i18n("Severity")},{prop:"group",name:this.i18n("Group")},{prop:"duration",name:this.i18n("Duration"),pipe:new we},{prop:"query",name:this.i18n("Query"),isHidden:!0},{prop:"annotations.description",name:this.i18n("Description")}]}}var uc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function lc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"tabset",[["cdTableDetail",""]],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](5,638976,null,0,_i.a,[Se.a],{data:[0,"data"],renderObjects:[1,"renderObjects"],hideKeys:[2,"hideKeys"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.expandedRow,!0,n.hideKeys)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function dc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-table",[],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.setExpandedRow(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](1,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],hasDetails:[2,"hasDetails"],selectionType:[3,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵand"](16777216,null,3,1,null,lc)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.data,n.columns,!0,"single"),t(e,3,0,n.expandedRow)}),null)}var cc=n("w9WL");const fc=new ls.a("monitoring/silence");class hc extends ds.a{constructor(t,e,n,a,r,i,s,o,u){super(),this.authStorageService=t,this.i18n=e,this.cdDatePipe=n,this.prometheusService=a,this.modalService=r,this.notificationService=i,this.urlBuilder=s,this.actionLabels=o,this.succeededLabels=u,this.silences=[],this.selection=new ti.a,this.customCss={"badge badge-danger":"active","badge badge-warning":"pending","badge badge-default":"expired"},this.sorts=[{prop:"endsAt",dir:cc.A.desc}],this.permission=this.authStorageService.getPermissions().prometheus;const l=t=>t.first()&&t.first().status&&"expired"===t.first().status.state;this.tableActions=[{permission:"create",icon:ht.a.add,routerLink:()=>this.urlBuilder.getCreate(),preserveFragment:!0,canBePrimary:t=>!t.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"create",canBePrimary:t=>t.hasSingleSelection&&l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||t.first().cdExecuting&&l(t)||!l(t),icon:ht.a.copy,routerLink:()=>this.urlBuilder.getRecreate(this.selection.first().id),preserveFragment:!0,name:this.actionLabels.RECREATE},{permission:"update",icon:ht.a.edit,canBePrimary:t=>t.hasSingleSelection&&!l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||t.first().cdExecuting&&!l(t)||l(t),routerLink:()=>this.urlBuilder.getEdit(this.selection.first().id),preserveFragment:!0,name:this.actionLabels.EDIT},{permission:"delete",icon:ht.a.trash,canBePrimary:t=>t.hasSingleSelection&&!l(t),disable:t=>!t.hasSingleSelection||t.first().cdExecuting||l(t),click:()=>this.expireSilence(),name:this.actionLabels.EXPIRE}],this.columns=[{name:this.i18n("ID"),prop:"id",flexGrow:3},{name:this.i18n("Created by"),prop:"createdBy",flexGrow:2},{name:this.i18n("Started"),prop:"startsAt",pipe:this.cdDatePipe},{name:this.i18n("Updated"),prop:"updatedAt",pipe:this.cdDatePipe},{name:this.i18n("Ends"),prop:"endsAt",pipe:this.cdDatePipe},{name:this.i18n("Status"),prop:"status.state",cellTransformation:Xr.a.classAdding}]}refresh(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getSilences().subscribe(t=>{this.silences=t},()=>{this.prometheusService.disableAlertmanagerConfig()})})}updateSelection(t){this.selection=t}expireSilence(){const t=this.selection.first().id,e=this.i18n("Silence");this.modalRef=this.modalService.show(cs.a,{initialState:{itemDescription:e,itemNames:[t],actionDescription:this.actionLabels.EXPIRE,submitActionObservable:()=>new kn.a(n=>{this.prometheusService.expireSilence(t).subscribe(()=>{this.notificationService.show(ge.a.success,`${this.succeededLabels.EXPIRED} ${e} ${t}`,void 0,void 0,"Prometheus")},t=>{t.application="Prometheus",n.error(t)},()=>{n.complete(),this.refresh()})})}})}}var gc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function pc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-table-key-value",[["cdTableDetail",""]],null,null,null,xi.b,xi.a)),s["ɵdid"](1,638976,null,0,_i.a,[Se.a],{data:[0,"data"],autoReload:[1,"autoReload"],renderObjects:[2,"renderObjects"],appendParentKey:[3,"appendParentKey"],hideEmpty:[4,"hideEmpty"],customCss:[5,"customCss"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.expandedRow,!1,!0,!1,!0,n.customCss)}),null)}function bc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-table",[["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"fetchData"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"fetchData"===e&&(a=!1!==r.refresh()&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](1,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],sorts:[2,"sorts"],hasDetails:[3,"hasDetails"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"],customCss:[6,"customCss"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](2,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](3,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵand"](16777216,null,3,1,null,pc)),s["ɵdid"](5,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.silences,n.columns,n.sorts,!0,!0,"single",n.customCss),t(e,3,0,n.permission,n.selection,n.tableActions),t(e,5,0,n.expandedRow)}),null)}class mc{constructor(t,e,n,a){this.prometheusAlertService=t,this.prometheusService=e,this.route=n,this.router=a,this.isPrometheusConfigured=!1,this.isAlertmanagerConfigured=!1}ngOnInit(){if(this.prometheusService.ifAlertmanagerConfigured(()=>{this.isAlertmanagerConfigured=!0}),this.prometheusService.ifPrometheusConfigured(()=>{this.isPrometheusConfigured=!0}),this.route.snapshot.fragment){const t=this.tabs.tabs.find(t=>t.elementRef.nativeElement.id===this.route.snapshot.fragment);t&&(t.active=!0),this.router.navigate([],{fragment:this.route.snapshot.fragment})}}setFragment(t){this.router.navigate([],{fragment:t.id})}}var yc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function vc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-active-alert-list",[],null,null,null,sc,ac)),s["ɵprd"](256,null,ls.a,ec,[]),s["ɵdid"](2,114688,null,0,nc,[vt.a,Pe,ls.a,me.a,Se.a],null,null)],(function(t,e){t(e,2,0)}),null)}function xc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To see all active Prometheus alerts, please provide the URL to the API of Prometheus' Alertmanager as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](4,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function _c(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-rules-list",[],null,null,null,dc,uc)),s["ɵdid"](1,114688,null,0,oc,[me.a],{data:[0,"data"]},null)],(function(t,e){t(e,1,0,e.component.prometheusAlertService.rules)}),null)}function Tc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To see all configured Prometheus alerts, please provide the URL to the API of Prometheus as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](4,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function Oc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-silences-list",[],null,null,null,bc,gc)),s["ɵprd"](256,null,ls.a,fc,[]),s["ɵdid"](2,49152,null,0,hc,[vt.a,me.a,Se.a,Le,Lt.b,gt.a,ls.a,At.b,At.d],null,null)],null,null)}function wc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["To enable Silences, please provide the URL to the API of the Prometheus' Alertmanager as described in the "])),(t()(),s["ɵeld"](3,0,null,0,1,"cd-doc",[["section","prometheus"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](4,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,0,["."]))],(function(t,e){t(e,1,0,"info"),t(e,4,0,"prometheus")}),null)}function Sc(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{tabs:0}),(t()(),s["ɵeld"](1,0,null,null,19,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](2,180224,[[1,4],["tabs",4]],0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](3,0,null,0,5,"tab",[["heading","Active Alerts"],["id","active-alerts"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](4,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,vc)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xc)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](9,0,null,0,5,"tab",[["heading","All Alerts"],["id","all-alerts"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](10,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,_c)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tc)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](15,0,null,0,5,"tab",[["heading","Silences"],["id","silences"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.setFragment(n)&&a),a}),null,null)),s["ɵdid"](16,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"],id:[1,"id"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,Oc)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wc)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,4,0,"Active Alerts","active-alerts"),t(e,6,0,n.isAlertmanagerConfigured),t(e,8,0,!n.isAlertmanagerConfigured),t(e,10,0,"All Alerts","all-alerts"),t(e,12,0,n.isPrometheusConfigured),t(e,14,0,!n.isPrometheusConfigured),t(e,16,0,"Silences","silences"),t(e,18,0,n.isAlertmanagerConfigured),t(e,20,0,!n.isAlertmanagerConfigured)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).clazz),t(e,3,0,s["ɵnov"](e,4).id,s["ɵnov"](e,4).active,s["ɵnov"](e,4).addClass,s["ɵnov"](e,4).role,s["ɵnov"](e,4).ariaLabelledby),t(e,9,0,s["ɵnov"](e,10).id,s["ɵnov"](e,10).active,s["ɵnov"](e,10).addClass,s["ɵnov"](e,10).role,s["ɵnov"](e,10).ariaLabelledby),t(e,15,0,s["ɵnov"](e,16).id,s["ɵnov"](e,16).active,s["ɵnov"](e,16).addClass,s["ɵnov"](e,16).role,s["ɵnov"](e,16).ariaLabelledby)}))}function Ic(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-monitoring-list",[],null,null,null,Sc,yc)),s["ɵdid"](1,114688,null,0,mc,[Pe,Le,qt.a,qt.m],null,null)],(function(t,e){t(e,1,0)}),null)}var Nc=s["ɵccf"]("cd-monitoring-list",mc,Ic,{},{},[]);let Cc=(()=>{class t{constructor(t){this.i18n=t,this.valueAttributePath={alertname:"name",instance:"alerts.0.labels.instance",job:"alerts.0.labels.job",severity:"labels.severity"}}singleMatch(t,e){return this.multiMatch([t],e)}multiMatch(t,e){if(!t.some(t=>t.isRegex))return t.forEach(t=>{e=this.getMatchedRules(t,e)}),this.describeMatch(e)}getMatchedRules(t,e){const n=this.getAttributePath(t.name);return e.filter(e=>J.get(e,n)===t.value)}describeMatch(t){let e=0;return t.forEach(t=>e+=t.alerts.length),{status:this.getMatchText(t.length,e),cssClass:e?"has-success":"has-warning"}}getAttributePath(t){return this.valueAttributePath[t]}getMatchText(t,e){const n={noRule:this.i18n("Your matcher seems to match no currently defined rule or active alert."),noAlerts:this.i18n("no active alerts"),alert:this.i18n("1 active alert"),alerts:this.i18n("{{n}} active alerts",{n:e}),rule:this.i18n("Matches 1 rule"),rules:this.i18n("Matches {{n}} rules",{n:t})};return t?this.i18n("{{rules}} with {{alerts}}.",{rules:t>1?n.rules:n.rule,alerts:e?e>1?n.alerts:n.alert:n.noAlerts}):n.noRule}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](me.a))},token:t,providedIn:"root"}),t})(),Rc=(()=>{class t{constructor(){}calculateDuration(t,e){const n=+t,a=+e,r=this.getDuration(Math.abs(n-a));return n>a?"-"+r:r}getDuration(t){const e=new Date(t),n=e.getUTCHours(),a=e.getUTCMinutes(),r=(t,e)=>t?t+e:t;return[r(Math.floor(t/864e5),"d"),r(n,"h"),r(a,"m")].filter(t=>t).join(" ")}calculateDate(t,e,n){const a=+t;if(J.isNaN(a))return;const r=this.getDurationMs(e)*(n?-1:1);return new Date(a+r)}getDurationMs(t){return 6e4*(60*(24*this.getNumbersFromString(t,"d")+this.getNumbersFromString(t,"h"))+this.getNumbersFromString(t,"m"))}getNumbersFromString(t,e){const n=t.match(new RegExp(`[0-9 ]+${e}`,"i"));return n?parseInt(n[0],10):0}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t})();class Ac{constructor(t,e,n){this.formBuilder=t,this.silenceMatcher=e,this.bsModalRef=n,this.submitAction=new s.EventEmitter,this.editMode=!1,this.nameAttributes=["alertname","instance","job","severity"],this.possibleValues=[],this.matcherMatch=void 0,this.createForm(),this.subscribeToChanges()}createForm(){this.form=this.formBuilder.group({name:[null,[$.B.required]],value:[{value:null,disabled:!0},[$.B.required]],isRegex:new $.i(!1)})}subscribeToChanges(){this.form.get("name").valueChanges.subscribe(t=>{null!==t?(this.setPossibleValues(t),this.form.get("value").enable()):this.form.get("value").disable()}),this.form.get("value").valueChanges.subscribe(t=>{const e=this.form.value;e.value=t,this.matcherMatch=this.silenceMatcher.singleMatch(e,this.rules)})}setPossibleValues(t){this.possibleValues=J.sortedUniq(this.rules.map(e=>J.get(e,this.silenceMatcher.getAttributePath(t))).filter(t=>t))}preFillControls(t){this.form.setValue(t)}onSubmit(){this.submitAction.emit(this.form.value),this.bsModalRef.hide()}}class kc{constructor(t,e,n,a,r,i,s,o,u,l,d,c){this.i18n=t,this.router=e,this.authStorageService=n,this.formBuilder=a,this.prometheusService=r,this.notificationService=i,this.route=s,this.timeDiff=o,this.bsModalService=u,this.silenceMatcher=l,this.actionLabels=d,this.succeededLabels=c,this.icons=ht.a,this.bsConfig={dateInputFormat:"YYYY-MM-DDT HH:mm"},this.recreate=!1,this.edit=!1,this.resource=this.i18n("silence"),this.matchers=[],this.matcherMatch=void 0,this.matcherConfig=[{tooltip:this.i18n("Attribute name"),icon:this.icons.paragraph,attribute:"name"},{tooltip:this.i18n("Value"),icon:this.icons.terminal,attribute:"value"},{tooltip:this.i18n("Regular expression"),icon:this.icons.magic,attribute:"isRegex"}],this.init()}init(){this.chooseMode(),this.authenticate(),this.createForm(),this.setupDates(),this.getData()}chooseMode(){this.edit=this.router.url.startsWith("/monitoring/silence/edit"),this.recreate=this.router.url.startsWith("/monitoring/silence/recreate"),this.action=this.edit?this.actionLabels.EDIT:this.recreate?this.actionLabels.RECREATE:this.actionLabels.CREATE}authenticate(){this.permission=this.authStorageService.getPermissions().prometheus,this.permission.read&&(this.edit?this.permission.update:this.permission.create)||this.router.navigate(["/404"])}createForm(){this.form=this.formBuilder.group({startsAt:[null,[$.B.required]],duration:["2h",[$.B.min(1)]],endsAt:[null,[$.B.required]],createdBy:[this.authStorageService.getUsername(),[$.B.required]],comment:[null,[$.B.required]]},{validators:Fs.a.custom("matcherRequired",()=>0===this.matchers.length)})}setupDates(){const t=new Date;t.setSeconds(0,0),this.form.silentSet("startsAt",t),this.updateDate(),this.subscribeDateChanges()}updateDate(t){const e=this.timeDiff.calculateDate(this.form.getValue(t?"endsAt":"startsAt"),this.form.getValue("duration"),t);e&&this.form.silentSet(t?"startsAt":"endsAt",e)}subscribeDateChanges(){this.form.get("startsAt").valueChanges.subscribe(()=>{this.onDateChange()}),this.form.get("duration").valueChanges.subscribe(()=>{this.updateDate()}),this.form.get("endsAt").valueChanges.subscribe(()=>{this.onDateChange(!0)})}onDateChange(t){this.form.getValue("startsAt")<this.form.getValue("endsAt")?this.updateDuration():this.updateDate(t)}updateDuration(){this.form.silentSet("duration",this.timeDiff.calculateDuration(this.form.getValue("startsAt"),this.form.getValue("endsAt")))}getData(){this.getRules(),this.getModeSpecificData()}getRules(){this.prometheusService.ifPrometheusConfigured(()=>this.prometheusService.getRules().subscribe(t=>{this.rules=t.groups.reduce((t,e)=>J.concat(t,e.rules),[])},()=>{this.prometheusService.disablePrometheusConfig(),this.rules=[]}),()=>{this.rules=[],this.notificationService.show(ge.a.info,this.i18n("Please add your Prometheus host to the dashboard configuration and refresh the page"),void 0,void 0,"Prometheus")})}getModeSpecificData(){this.route.params.subscribe(t=>{t.id&&(this.edit||this.recreate?this.prometheusService.getSilences(t).subscribe(t=>{this.fillFormWithSilence(t[0])}):this.prometheusService.getAlerts(t).subscribe(t=>{this.fillFormByAlert(t[0])}))})}fillFormWithSilence(t){this.id=t.id,this.edit&&(["startsAt","endsAt"].forEach(e=>this.form.silentSet(e,new Date(t[e]))),this.updateDuration()),["createdBy","comment"].forEach(e=>this.form.silentSet(e,t[e])),this.matchers=t.matchers,this.validateMatchers()}validateMatchers(){this.rules?(this.matcherMatch=this.silenceMatcher.multiMatch(this.matchers,this.rules),this.form.markAsDirty(),this.form.updateValueAndValidity()):window.setTimeout(()=>this.validateMatchers(),100)}fillFormByAlert(t){const e=t.labels;Object.keys(e).forEach(t=>this.setMatcher({name:t,value:e[t],isRegex:!1}))}setMatcher(t,e){J.isNumber(e)?this.matchers[e]=t:this.matchers.push(t),this.validateMatchers()}showMatcherModal(t){const e=this.bsModalService.show(Ac),n=e.content;n.rules=this.rules,J.isNumber(t)&&(n.editMode=!0,n.preFillControls(this.matchers[t])),e.content.submitAction.subscribe(e=>{this.setMatcher(e,t)})}deleteMatcher(t){this.matchers.splice(t,1),this.validateMatchers()}submit(){this.form.invalid||this.prometheusService.setSilence(this.getSubmitData()).subscribe(t=>{this.router.navigate(["/monitoring"],{fragment:"silences"}),this.notificationService.show(ge.a.success,this.getNotificationTile(t.body.silenceId),void 0,void 0,"Prometheus")},()=>this.form.setErrors({cdSubmitButton:!0}))}getSubmitData(){const t=this.form.value;return delete t.duration,t.startsAt=t.startsAt.toISOString(),t.endsAt=t.endsAt.toISOString(),t.matchers=this.matchers,this.edit&&(t.id=this.id),t}getNotificationTile(t){let e;return e=this.edit?this.succeededLabels.EDITED:this.recreate?this.succeededLabels.RECREATED:this.succeededLabels.CREATED,`${e} ${this.resource} ${t}`}}var Ec=s["ɵcrt"]({encapsulation:0,styles:[["textarea[_ngcontent-%COMP%]{resize:vertical}"]],data:{}});function Lc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"input",[["class","form-control"],["disabled",""],["readonly",""],["type","text"]],[[8,"id",0],[8,"value",0],[2,"is-valid",null],[2,"is-invalid",null]],null,null,null,null)),s["ɵdid"](2,16384,null,0,Z.h,[[8,null],Z.a],null,null)],null,(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](2,"matcher-",e.parent.context.$implicit.attribute,"-",e.parent.parent.context.index,""),e.parent.parent.context.matcher[e.parent.context.$implicit.attribute],s["ɵnov"](e,2).validClass,s["ɵnov"](e,2).invalidClass)}))}function Dc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"div",[["class","input-group-text"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,0,"input",[["disabled",""],["readonly",""],["type","checkbox"]],[[8,"id",0],[8,"checked",0]],null,null,null,null))],null,(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](2,"matcher-",e.parent.context.$implicit.attribute,"-",e.parent.parent.context.index,""),e.parent.parent.context.matcher[e.parent.context.$implicit.attribute])}))}function Pc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,11,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,6,"div",[["class","input-group-prepend"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,16777216,null,null,5,"span",[["class","input-group-text"]],null,null,null,null,null)),s["ɵdid"](3,212992,null,0,Qn.c,[s.ViewContainerRef,W.a,Qn.a,s.ElementRef,s.Renderer2,la.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](4,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](7,1),(t()(),s["ɵand"](16777216,null,null,1,null,Lc)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Dc)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,3,0,e.context.$implicit.tooltip);var n=t(e,7,0,e.context.$implicit.icon);t(e,6,0,n),t(e,9,0,"isRegex"!==e.context.$implicit.attribute),t(e,11,0,"isRegex"===e.context.$implicit.attribute)}),null)}function Mc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,15,"div",[["class","input-group my-2"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Pc)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](3,0,null,null,12,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","Edit"],["type","button"]],[[8,"id",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showMatcherModal(t.context.index)&&a),a}),null,null)),s["ɵdid"](5,212992,null,0,Qn.c,[s.ViewContainerRef,W.a,Qn.a,s.ElementRef,s.Renderer2,la.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](6,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](8,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](9,1),(t()(),s["ɵeld"](10,16777216,null,null,5,"button",[["class","btn btn-light"],["tooltip","Delete"],["type","button"]],[[8,"id",0]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.deleteMatcher(t.context.index)&&a),a}),null,null)),s["ɵdid"](11,212992,null,0,Qn.c,[s.ViewContainerRef,W.a,Qn.a,s.ElementRef,s.Renderer2,la.a],{tooltip:[0,"tooltip"]},null),(t()(),s["ɵeld"](12,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](14,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](15,1),(t()(),s["ɵeld"](16,0,null,null,0,"span",[["class","help-block"]],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,2,0,n.matcherConfig),t(e,5,0,"Edit");var a=t(e,9,0,n.icons.edit);t(e,8,0,a),t(e,11,0,"Delete");var r=t(e,15,0,n.icons.trash);t(e,14,0,r)}),(function(t,e){t(e,4,0,s["ɵinlineInterpolate"](1,"matcher-edit-",e.context.index,"")),t(e,10,0,s["ɵinlineInterpolate"](1,"matcher-delete-",e.context.index,""))}))}function qc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](-1,0,["Editing a silence will expire the old silence and recreate it as a new silence"]))],null,null)}function jc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Fc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Gc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Vc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function zc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Bc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"h5",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](3,{"text-warning":0,"text-danger":1}),(t()(),s["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["A silence requires at least one matcher"]))],(function(t,e){var n=t(e,3,0,!s["ɵnov"](e.parent,6).submitted,s["ɵnov"](e.parent,6).submitted);t(e,2,0,n)}),null)}function Yc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Hc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Yc)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](3,{index:0,matcher:1})],(function(t,e){var n=t(e,3,0,e.context.index,e.context.$implicit);t(e,2,0,n,s["ɵnov"](e.parent,2))}),null)}function Uc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["id","match-state"]],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵted"](2,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,s["ɵinlineInterpolate"](1,"cd-col-form-offset ",n.matcherMatch.cssClass,"")),t(e,1,0,s["ɵinlineInterpolate"](1,"text-muted ",n.matcherMatch.cssClass,"")),t(e,2,0,n.matcherMatch.status)}))}function Wc(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),(t()(),s["ɵand"](0,[["matcherTpl",2]],null,0,null,Mc)),(t()(),s["ɵeld"](3,0,null,null,137,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,136,"form",[["class","form"],["name","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,6).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit()&&a),a}),null,null)),s["ɵdid"](5,16384,null,0,$.G,[],null,null),s["ɵdid"](6,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](9,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](10,0,null,null,130,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,6,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,3,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](13,null,[" "," "," "])),s["ɵppd"](14,1),s["ɵppd"](15,1),(t()(),s["ɵand"](16777216,null,null,1,null,qc)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,113,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](20,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](23,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","created-by"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Creator"])),(t()(),s["ɵeld"](25,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](26,0,null,null,6,"input",[["class","form-control"],["formControlName","createdBy"],["id","created-by"],["name","created-by"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,27)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,27).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,27)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,27)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](27,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](29,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](31,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](32,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,jc)),s["ɵdid"](34,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](35,0,null,null,16,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](36,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](39,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","comment"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Comment"])),(t()(),s["ɵeld"](41,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](42,0,null,null,7,"textarea",[["class","form-control"],["formControlName","comment"],["id","comment"],["name","comment"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,43)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,43).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,43)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,43)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](43,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](45,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](47,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](48,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵted"](-1,null,["            "])),(t()(),s["ɵand"](16777216,null,null,1,null,Fc)),s["ɵdid"](51,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](52,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](53,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](56,0,null,0,5,"label",[["class","cd-col-form-label"],["for","starts-at"]],null,null,null,null,null)),(t()(),s["ɵeld"](57,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Start time"])),(t()(),s["ɵeld"](59,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](60,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](-1,0,["If the start time lies in the past the creation time will be used"])),(t()(),s["ɵeld"](62,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](63,16777216,null,null,9,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","startsAt"],["id","starts-at"],["name","starts-at"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,64)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,64).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,64)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,64)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,66).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,66).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,66).onBlur()&&a),a}),null,null)),s["ɵdid"](64,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](65,737280,null,0,rt.c,[rt.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](66,16384,null,0,rt.f,[rt.c,rt.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[rt.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,rt.f]),s["ɵdid"](69,671744,[[5,4]],0,$.j,[[3,$.d],[6,$.o],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](71,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](72,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Gc)),s["ɵdid"](74,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](75,0,null,null,15,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](76,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](79,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","duration"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Duration"])),(t()(),s["ɵeld"](81,0,null,0,9,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](82,0,null,null,6,"input",[["class","form-control"],["formControlName","duration"],["id","duration"],["name","duration"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,83)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,83).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,83)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,83)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](83,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](85,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](87,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](88,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Vc)),s["ɵdid"](90,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](91,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](92,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,9,{FormControlNames:1}),s["ɵqud"](603979776,10,{messagesBlock:0}),(t()(),s["ɵeld"](95,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","ends-at"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["End time"])),(t()(),s["ɵeld"](97,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](98,16777216,null,null,9,"input",[["bsDatepicker",""],["class","form-control"],["formControlName","endsAt"],["id","ends-at"],["name","ends-at"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"],[null,"keyup.esc"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,99)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,99).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,99)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,99)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,101).onChange(n)&&a),"keyup.esc"===e&&(a=!1!==s["ɵnov"](t,101).hide()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,101).onBlur()&&a),a}),null,null)),s["ɵdid"](99,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](100,737280,null,0,rt.c,[rt.a,s.ElementRef,s.Renderer2,s.ViewContainerRef,W.a],{bsConfig:[0,"bsConfig"]},null),s["ɵdid"](101,16384,null,0,rt.f,[rt.c,rt.l,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[rt.f]),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,rt.f]),s["ɵdid"](104,671744,[[9,4]],0,$.j,[[3,$.d],[6,$.o],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](106,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](107,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,zc)),s["ɵdid"](109,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](110,0,null,null,21,"fieldset",[],null,null,null,null,null)),(t()(),s["ɵeld"](111,0,null,null,1,"legend",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Matchers"])),(t()(),s["ɵeld"](113,0,null,null,16,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Bc)),s["ɵdid"](115,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Hc)),s["ɵdid"](117,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](118,0,null,null,11,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](119,0,null,null,10,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](120,0,null,null,9,"button",[["class","btn btn-light float-right my-3"],["id","add-matcher"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.showMatcherModal()&&a),a}),null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](122,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](123,{"btn-warning":0}),(t()(),s["ɵeld"](124,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](126,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](127,1),(t()(),s["ɵeld"](128,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add matcher"])),(t()(),s["ɵand"](16777216,null,null,1,null,Uc)),s["ɵdid"](131,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](132,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](133,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](134,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](135,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](136,0,[" "," "," "])),s["ɵppd"](137,1),s["ɵppd"](138,1),(t()(),s["ɵeld"](139,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](140,49152,null,0,Ms.a,[i.Location,At.b],null,null)],(function(t,e){var n=e.component;t(e,6,0,n.form),t(e,9,0,n.form),t(e,17,0,n.edit),t(e,20,0),t(e,29,0,"createdBy"),t(e,32,0,"createdBy"),t(e,34,0,n.form.showError("createdBy",s["ɵnov"](e,6),"required")),t(e,36,0),t(e,45,0,"comment"),t(e,48,0,"comment"),t(e,51,0,n.form.showError("comment",s["ɵnov"](e,6),"required")),t(e,53,0),t(e,65,0,n.bsConfig),t(e,69,0,"startsAt"),t(e,72,0,"startsAt"),t(e,74,0,n.form.showError("startsAt",s["ɵnov"](e,6),"required")),t(e,76,0),t(e,85,0,"duration"),t(e,88,0,"duration"),t(e,90,0,n.form.showError("duration",s["ɵnov"](e,6),"required")),t(e,92,0),t(e,100,0,n.bsConfig),t(e,104,0,"endsAt"),t(e,107,0,"endsAt"),t(e,109,0,n.form.showError("endsAt",s["ɵnov"](e,6),"required")),t(e,115,0,0===n.matchers.length),t(e,117,0,n.matchers);var a=t(e,123,0,s["ɵnov"](e,6).submitted&&0===n.matchers.length);t(e,122,0,"btn btn-light float-right my-3",a);var r=t(e,127,0,n.icons.add);t(e,126,0,r),t(e,131,0,n.matchers.length&&n.matcherMatch),t(e,135,0,s["ɵnov"](e,6))}),(function(t,e){var n=e.component;t(e,4,0,s["ɵnov"](e,8).ngClassUntouched,s["ɵnov"](e,8).ngClassTouched,s["ɵnov"](e,8).ngClassPristine,s["ɵnov"](e,8).ngClassDirty,s["ɵnov"](e,8).ngClassValid,s["ɵnov"](e,8).ngClassInvalid,s["ɵnov"](e,8).ngClassPending);var a=s["ɵunv"](e,13,0,t(e,14,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,13,1,t(e,15,0,s["ɵnov"](e,1),n.resource));t(e,13,0,a,r),t(e,19,0,s["ɵnov"](e,20).hasErrors,s["ɵnov"](e,20).hasSuccess),t(e,26,0,s["ɵnov"](e,31).ngClassUntouched,s["ɵnov"](e,31).ngClassTouched,s["ɵnov"](e,31).ngClassPristine,s["ɵnov"](e,31).ngClassDirty,s["ɵnov"](e,31).ngClassValid,s["ɵnov"](e,31).ngClassInvalid,s["ɵnov"](e,31).ngClassPending,s["ɵnov"](e,32).validClass,s["ɵnov"](e,32).invalidClass),t(e,35,0,s["ɵnov"](e,36).hasErrors,s["ɵnov"](e,36).hasSuccess),t(e,42,0,s["ɵnov"](e,47).ngClassUntouched,s["ɵnov"](e,47).ngClassTouched,s["ɵnov"](e,47).ngClassPristine,s["ɵnov"](e,47).ngClassDirty,s["ɵnov"](e,47).ngClassValid,s["ɵnov"](e,47).ngClassInvalid,s["ɵnov"](e,47).ngClassPending,s["ɵnov"](e,48).validClass,s["ɵnov"](e,48).invalidClass),t(e,52,0,s["ɵnov"](e,53).hasErrors,s["ɵnov"](e,53).hasSuccess),t(e,63,0,s["ɵnov"](e,71).ngClassUntouched,s["ɵnov"](e,71).ngClassTouched,s["ɵnov"](e,71).ngClassPristine,s["ɵnov"](e,71).ngClassDirty,s["ɵnov"](e,71).ngClassValid,s["ɵnov"](e,71).ngClassInvalid,s["ɵnov"](e,71).ngClassPending,s["ɵnov"](e,72).validClass,s["ɵnov"](e,72).invalidClass),t(e,75,0,s["ɵnov"](e,76).hasErrors,s["ɵnov"](e,76).hasSuccess),t(e,82,0,s["ɵnov"](e,87).ngClassUntouched,s["ɵnov"](e,87).ngClassTouched,s["ɵnov"](e,87).ngClassPristine,s["ɵnov"](e,87).ngClassDirty,s["ɵnov"](e,87).ngClassValid,s["ɵnov"](e,87).ngClassInvalid,s["ɵnov"](e,87).ngClassPending,s["ɵnov"](e,88).validClass,s["ɵnov"](e,88).invalidClass),t(e,91,0,s["ɵnov"](e,92).hasErrors,s["ɵnov"](e,92).hasSuccess),t(e,98,0,s["ɵnov"](e,106).ngClassUntouched,s["ɵnov"](e,106).ngClassTouched,s["ɵnov"](e,106).ngClassPristine,s["ɵnov"](e,106).ngClassDirty,s["ɵnov"](e,106).ngClassValid,s["ɵnov"](e,106).ngClassInvalid,s["ɵnov"](e,106).ngClassPending,s["ɵnov"](e,107).validClass,s["ɵnov"](e,107).invalidClass);var i=s["ɵunv"](e,136,0,t(e,137,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,136,1,t(e,138,0,s["ɵnov"](e,1),n.resource));t(e,136,0,i,o)}))}function Kc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-prometheus-form",[],null,null,null,Wc,Ec)),s["ɵdid"](1,49152,null,0,kc,[me.a,qt.m,vt.a,Ho.a,Le,gt.a,qt.a,Rc,Lt.b,Cc,At.b,At.d],null,null)],null,null)}var $c=s["ɵccf"]("cd-prometheus-form",kc,Kc,{},{},[]);let Zc=(()=>{class t{constructor(e){this.route=e,this.route.queryParams.subscribe(e=>{this.fromLink=e.fromLink||t.defaultFromLink}),this.route.params.subscribe(t=>{this.serviceId=decodeURIComponent(t.id),this.serviceType=t.type})}}return t.defaultFromLink="/hosts",t})();var Jc=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Qc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",".",""])),(t()(),s["ɵeld"](2,0,null,null,1,"cd-table-performance-counter",[],null,null,null,bo.b,bo.a)),s["ɵdid"](3,114688,null,0,mo.a,[yo.a,me.a],{serviceType:[0,"serviceType"],serviceId:[1,"serviceId"]},null)],(function(t,e){var n=e.component;t(e,3,0,n.serviceType,n.serviceId)}),(function(t,e){var n=e.component;t(e,1,0,n.serviceType,n.serviceId)}))}function Xc(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-performance-counter",[],null,null,null,Qc,Jc)),s["ɵdid"](1,49152,null,0,Zc,[qt.a],null,null)],null,null)}var tf=s["ɵccf"]("cd-performance-counter",Zc,Xc,{},{},[]);class ef{constructor(t){this.mgrModuleService=t}ngOnChanges(){this.selection&&this.mgrModuleService.getConfig(this.selection.name).subscribe(t=>{this.module_config=t})}}var nf=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function af(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](5,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.module_config)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby)}))}function rf(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,af)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}var sf=n("PqYM");let of=(()=>{class t extends ds.a{constructor(t,e,n,a){super(),this.authStorageService=t,this.mgrModuleService=e,this.notificationService=n,this.i18n=a,this.columns=[],this.modules=[],this.selection=new ti.a,this.permission=this.authStorageService.getPermissions().configOpt,this.columns=[{name:this.i18n("Name"),prop:"name",flexGrow:1},{name:this.i18n("Enabled"),prop:"enabled",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.a.checkIcon},{name:this.i18n("Always-On"),prop:"always_on",isHidden:!0,flexGrow:1,cellClass:"text-center",cellTransformation:Xr.a.checkIcon}];const r=()=>this.selection.first()&&encodeURIComponent(this.selection.first().name);this.tableActions=[{name:this.i18n("Edit"),permission:"update",disable:()=>!this.selection.hasSelection||0===Object.values(this.selection.first().options).length,routerLink:()=>`/mgr-modules/edit/${r()}`,icon:ht.a.edit},{name:this.i18n("Enable"),permission:"update",click:()=>this.updateModuleState(),disable:()=>this.isTableActionDisabled("enabled"),icon:ht.a.start},{name:this.i18n("Disable"),permission:"update",click:()=>this.updateModuleState(),disable:()=>this.isTableActionDisabled("disabled"),disableDesc:()=>this.getTableActionDisabledDesc(),icon:ht.a.stop}]}getModuleList(t){this.mgrModuleService.list().subscribe(t=>{this.modules=t},()=>{t.error()})}updateSelection(t){this.selection=t}isTableActionDisabled(t){if(!this.selection.hasSelection)return!0;const e=this.selection.first();if("dashboard"===e.name)return!0;if(e.always_on)return!0;switch(t){case"enabled":return e.enabled;case"disabled":return!e.enabled}}getTableActionDisabledDesc(){if(this.selection.hasSelection&&this.selection.first().always_on)return this.i18n("This Manager module is always on.")}updateModuleState(){if(!this.selection.hasSelection)return;let t;const e=()=>{Object(sf.a)(2e3).subscribe(()=>{this.mgrModuleService.list().subscribe(()=>{this.notificationService.suspendToasties(!1),this.blockUI.stop(),this.table.refreshBtn()},()=>{e()})})},n=this.selection.first();t=n.enabled?this.mgrModuleService.disable(n.name):this.mgrModuleService.enable(n.name),t.subscribe(()=>{},()=>{this.notificationService.suspendToasties(!0),this.blockUI.start(this.i18n("Reconnecting, please wait ...")),e()})}}return xl.__decorate([L(),xl.__metadata("design:type",Object)],t.prototype,"blockUI",void 0),t})();var uf=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function lf(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{table:0}),(t()(),s["ɵeld"](1,0,null,null,5,"cd-table",[["columnMode","flex"],["identifier","module"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"],[null,"fetchData"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),"fetchData"===e&&(a=!1!==r.getModuleList(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](2,2867200,[[1,4],["table",4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],autoReload:[4,"autoReload"],identifier:[5,"identifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](3,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](4,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](5,0,null,3,1,"cd-mgr-module-details",[["cdTableDetail",""]],null,null,null,rf,nf)),s["ɵdid"](6,573440,null,0,ef,[he],{selection:[0,"selection"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.modules,n.columns,"flex",!0,!1,"module","single"),t(e,4,0,n.permission,n.selection,n.tableActions),t(e,6,0,n.expandedRow)}),null)}function df(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-mgr-module-list",[],null,null,null,lf,uf)),s["ɵdid"](1,49152,null,0,of,[vt.a,he,gt.a,me.a],null,null)],null,null)}var cf=s["ɵccf"]("cd-mgr-module-list",of,df,{},{},[]);class ff{constructor(t,e,n,a,r,i){this.route=t,this.router=e,this.formBuilder=n,this.mgrModuleService=a,this.notificationService=r,this.i18n=i,this.error=!1,this.loading=!1,this.moduleName="",this.moduleOptions=[]}ngOnInit(){this.route.params.subscribe(t=>{this.moduleName=decodeURIComponent(t.name),this.loading=!0;const e=[this.mgrModuleService.getOptions(this.moduleName),this.mgrModuleService.getConfig(this.moduleName)];Object(Mo.a)(e).subscribe(t=>{this.loading=!1,this.moduleOptions=t[0],this.createForm(),this.mgrModuleForm.setValue(t[1])},t=>{this.error=!0})})}getValidators(t){const e=[];switch(t.type){case"addr":e.push(Fs.a.ip());break;case"uint":case"int":case"size":case"secs":e.push(Fs.a.number()),e.push($.B.required),J.isNumber(t.min)&&e.push($.B.min(t.min)),J.isNumber(t.max)&&e.push($.B.max(t.max));break;case"str":J.isNumber(t.min)&&e.push($.B.minLength(t.min)),J.isNumber(t.max)&&e.push($.B.maxLength(t.max));break;case"float":e.push($.B.required),e.push(Fs.a.decimalNumber());break;case"uuid":e.push(Fs.a.uuid())}return e}createForm(){const t={};J.forEach(this.moduleOptions,e=>{t[e.name]=[e.default_value,this.getValidators(e)]}),this.mgrModuleForm=this.formBuilder.group(t)}goToListView(){this.router.navigate(["/mgr-modules"])}onSubmit(){if(this.mgrModuleForm.pristine)return void this.goToListView();const t={};J.forEach(this.moduleOptions,e=>{const n=this.mgrModuleForm.get(e.name);n.dirty&&n.valid&&(t[e.name]=n.value)}),this.mgrModuleService.updateConfig(this.moduleName,t).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n('Updated options for module "{{name}}".',{name:this.moduleName})),this.goToListView()},()=>{this.mgrModuleForm.setErrors({cdSubmitButton:!0})})}}var hf=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function gf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-loading-panel",[],null,null,null,Ti.b,Ti.a)),s["ɵdid"](1,49152,null,0,Oi.a,[],null,null),(t()(),s["ɵted"](-1,0,["Loading configuration..."]))],null,null)}function pf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-alert-panel",[["type","error"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](-1,0,["The configuration could not be loaded."]))],(function(t,e){t(e,1,0,"error")}),null)}function bf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](2,0,[" "," "])),s["ɵppd"](3,1)],null,(function(t,e){var n=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent.parent.parent,0),e.parent.context.$implicit.value.long_desc||e.parent.context.$implicit.value.desc));t(e,2,0,n)}))}function mf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](3,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](9,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],(function(t,e){t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,8,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""))}),(function(t,e){t(e,2,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,8).validClass,s["ɵnov"](e,8).invalidClass),t(e,9,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""))}))}function yf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,1)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,1)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,1)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](3,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,6,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""))}),(function(t,e){t(e,0,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""),s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,6).validClass,s["ɵnov"](e,6).invalidClass)}))}function vf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function xf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"select",[["class","form-control custom-select"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,1).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](3,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vf)),s["ɵdid"](8,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,3,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,6,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,"")),t(e,8,0,e.parent.parent.context.$implicit.value.enum_allowed)}),(function(t,e){t(e,0,0,s["ɵinlineInterpolate"](1,"",e.parent.parent.context.$implicit.value.name,""),s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,6).validClass,s["ɵnov"](e,6).invalidClass)}))}function _f(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8"]))],null,null)}function Tf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a valid IP address."]))],null,null)}function Of(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,yf)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xf)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,_f)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tf)),s["ɵdid"](8,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,0===e.parent.context.$implicit.value.enum_allowed.length),t(e,4,0,e.parent.context.$implicit.value.enum_allowed.length>0),t(e,6,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"invalidUuid")),t(e,8,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),null)}function wf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Sf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must be lower or equal to ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.max)}))}function If(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must be greater or equal to ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.value.min)}))}function Nf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a number."]))],null,null)}function Cf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,16,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[8,"min",0],[8,"max",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,2)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,2).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,2)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,2)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](3,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wf)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sf)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,If)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nf)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,8,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,10,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"required")),t(e,12,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"max")),t(e,14,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"min")),t(e,16,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),(function(t,e){t(e,1,1,[s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.min,""),s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.max,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,8).validClass,s["ɵnov"](e,8).invalidClass])}))}function Rf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Af(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The entered value needs to be a number or decimal."]))],null,null)}function kf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"div",[["class","col-sm-7"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,2)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,2).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,2)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,2)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,3).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,3).onTouched()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](3,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](5,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](7,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](8,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rf)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Af)),s["ɵdid"](12,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,5,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,8,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,"")),t(e,10,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"required")),t(e,12,0,n.mgrModuleForm.showError(e.parent.context.$implicit.value.name,s["ɵnov"](e.parent.parent,3),"pattern"))}),(function(t,e){t(e,1,0,s["ɵinlineInterpolate"](1,"",e.parent.context.$implicit.value.name,""),s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending,s["ɵnov"](e,8).validClass,s["ɵnov"](e,8).invalidClass)}))}function Ef(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,3,"label",[["class","col-form-label col-sm-5"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,bf)),s["ɵdid"](7,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,mf)),s["ɵdid"](9,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,2,null,Of)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpad"](12,3),(t()(),s["ɵand"](16777216,null,0,2,null,Cf)),s["ɵdid"](14,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),s["ɵpad"](15,4),(t()(),s["ɵand"](16777216,null,0,1,null,kf)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0),t(e,7,0,e.context.$implicit.value.long_desc||e.context.$implicit.value.desc),t(e,9,0,"bool"===e.context.$implicit.value.type);var n=t(e,12,0,"addr","str","uuid").includes(e.context.$implicit.value.type);t(e,11,0,n);var a=t(e,15,0,"uint","int","size","secs").includes(e.context.$implicit.value.type);t(e,14,0,a),t(e,17,0,"float"===e.context.$implicit.value.type)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,s["ɵinlineInterpolate"](1,"",e.context.$implicit.value.name,"")),t(e,5,0,e.context.$implicit.value.name)}))}function Lf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,22,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,21,"form",[["name","mgrModuleForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](6,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](7,0,null,null,15,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Edit Manager module"])),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Ef)),s["ɵdid"](12,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵeld"](14,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](16,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](17,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](18,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Update"])),(t()(),s["ɵeld"](20,0,null,null,2,"button",[["class","btn btn-light"],["routerLink","/mgr-modules"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,21).onClick()&&a),a}),null,null)),s["ɵdid"](21,16384,null,0,qt.n,[qt.m,qt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){var n=e.component;t(e,3,0,n.mgrModuleForm),t(e,6,0,n.mgrModuleForm),t(e,12,0,s["ɵunv"](e,12,0,s["ɵnov"](e,13).transform(n.moduleOptions))),t(e,17,0,n.mgrModuleForm),t(e,21,0,"/mgr-modules")}),(function(t,e){t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending)}))}function Df(t){return s["ɵvid"](0,[s["ɵpid"](0,qs.a,[]),(t()(),s["ɵand"](16777216,null,null,1,null,gf)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,pf)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lf)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.loading&&!n.error),t(e,4,0,n.loading&&n.error),t(e,6,0,!n.loading&&!n.error)}),null)}function Pf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-mgr-module-form",[],null,null,null,Df,hf)),s["ɵdid"](1,114688,null,0,ff,[qt.a,qt.m,Ho.a,he,gt.a,me.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Mf=s["ɵccf"]("cd-mgr-module-form",ff,Pf,{},{},[]),qf=n("xTzq");let jf=(()=>{let t=class{constructor(t){this.http=t,this.baseURL="api/cephfs",this.baseUiURL="ui-api/cephfs"}list(){return this.http.get(`${this.baseURL}`)}lsDir(t,e){let n=`${this.baseUiURL}/${t}/ls_dir?depth=2`;return e&&(n+=`&path=${encodeURIComponent(e)}`),this.http.get(n)}getCephfs(t){return this.http.get(`${this.baseURL}/${t}`)}getTabs(t){return this.http.get(`ui-api/cephfs/${t}/tabs`)}getClients(t){return this.http.get(`${this.baseURL}/${t}/clients`)}evictClient(t,e){return this.http.delete(`${this.baseURL}/${t}/client/${e}`)}getMdsCounters(t){return this.http.get(`${this.baseURL}/${t}/mds_counters`)}mkSnapshot(t,e,n){let a=new X.h;return a=a.append("path",e),J.isUndefined(n)||(a=a.append("name",n)),this.http.post(`${this.baseURL}/${t}/mk_snapshot`,null,{params:a})}rmSnapshot(t,e,n){let a=new X.h;return a=a.append("path",e),a=a.append("name",n),this.http.post(`${this.baseURL}/${t}/rm_snapshot`,null,{params:a})}updateQuota(t,e,n){let a=new X.h;return a=a.append("path",e),this.http.post(`${this.baseURL}/${t}/set_quotas`,n,{observe:"response",params:a})}};return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t=xl.__decorate([qf.a,xl.__metadata("design:paramtypes",[X.c])],t),t})();class Ff{constructor(t,e,n,a,r,i,s,o){this.authStorageService=t,this.modalService=e,this.cephfsService=n,this.cdDatePipe=a,this.i18n=r,this.actionLabels=i,this.notificationService=s,this.dimlessBinaryPipe=o,this.icons=ht.a,this.loadingIndicator=!1,this.loading={},this.treeOptions={useVirtualScroll:!0,getChildren:t=>this.updateDirectory(t.id),actionMapping:{mouse:{click:this.selectAndShowNode.bind(this),expanderClick:this.selectAndShowNode.bind(this)}}}}selectAndShowNode(t,e,n){_l.a.TOGGLE_EXPANDED(t,e,n),this.selectNode(e)}selectNode(t){_l.a.TOGGLE_ACTIVE(void 0,t,void 0),this.selectedDir=this.getDirectory(t),"/"!==t.id&&this.setSettings(t)}ngOnInit(){this.permission=this.authStorageService.getPermissions().cephfs,this.setUpQuotaTable(),this.setUpSnapshotTable()}setUpQuotaTable(){this.quota={columns:[{prop:"row.name",name:this.i18n("Name"),flexGrow:1},{prop:"row.value",name:this.i18n("Value"),sortable:!1,flexGrow:1},{prop:"row.originPath",name:this.i18n("Origin"),sortable:!1,cellTemplate:this.originTmpl,flexGrow:1}],selection:new ti.a,updateSelection:t=>{this.quota.selection=t},tableActions:[{name:this.actionLabels.SET,icon:ht.a.edit,permission:"update",visible:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UPDATE,icon:ht.a.edit,permission:"update",visible:t=>t.first()&&t.first().dirValue>0,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UNSET,icon:ht.a.destroy,permission:"update",disable:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.unsetQuotaModal()}]}}setUpSnapshotTable(){this.snapshot={columns:[{prop:"name",name:this.i18n("Name"),flexGrow:1},{prop:"path",name:this.i18n("Path"),isHidden:!0,flexGrow:2},{prop:"created",name:this.i18n("Created"),flexGrow:1,pipe:this.cdDatePipe}],selection:new ti.a,updateSelection:t=>{this.snapshot.selection=t},tableActions:[{name:this.actionLabels.CREATE,icon:ht.a.add,permission:"create",canBePrimary:t=>!t.hasSelection,click:()=>this.createSnapshot()},{name:this.actionLabels.DELETE,icon:ht.a.destroy,permission:"delete",click:()=>this.deleteSnapshotModal(),canBePrimary:t=>t.hasSelection,disable:t=>!t.hasSelection}]}}ngOnChanges(){this.selectedDir=void 0,this.dirs=[],this.requestedPaths=[],this.nodeIds={},this.id&&(this.setRootNode(),this.firstCall())}setRootNode(){this.nodes=[{name:"/",id:"/",isExpanded:!0}]}firstCall(){setTimeout(()=>{this.getNode("/").loadNodeChildren()},10)}updateDirectory(t){if(this.unsetLoadingIndicator(),this.requestedPaths.includes(t)){if(!0===this.loading[t])return}else this.requestedPaths.push(t);return new Promise(e=>{this.setLoadingIndicator(t,!0),this.cephfsService.lsDir(this.id,t).subscribe(n=>{this.updateTreeStructure(n),this.updateQuotaTable(),this.updateTree(),e(this.getChildren(t)),this.setLoadingIndicator(t,!1)})})}setLoadingIndicator(t,e){this.loading[t]=e,this.unsetLoadingIndicator()}getSubDirectories(t,e=this.dirs){return e.filter(e=>e.parent===t)}getChildren(t){const e=this.getSubTree(t);return J.sortBy(this.getSubDirectories(t),"path").map(t=>this.createNode(t,e))}createNode(t,e){return this.nodeIds[t.path]=t,e||this.getSubTree(t.parent),{name:t.name,id:t.path,hasChildren:this.getSubDirectories(t.path,e).length>0}}getSubTree(t){return this.dirs.filter(e=>e.parent&&e.parent.startsWith(t))}setSettings(t){const e=(t,e)=>t?e?e(t):t:"";this.settings=[this.getQuota(t,"max_files",e),this.getQuota(t,"max_bytes",t=>e(t,t=>this.dimlessBinaryPipe.transform(t)))]}getQuota(t,e,n){const a=t.id;t=this.getOrigin(t,e);const r=this.getDirectory(t),i=r.quotas[e];let s=i,o=r.path;if(t.id===a)if("/"===t.parent.id)s=0;else{const n=this.getDirectory(this.getOrigin(t.parent,e));s=n.quotas[e],o=n.path}return{row:{name:this.i18n("max_bytes"===e?"Max size":"Max files"),value:n(i),originPath:i?r.path:""},quotaKey:e,dirValue:this.nodeIds[a].quotas[e],nextTreeMaximum:{value:s,path:s?o:""}}}getOrigin(t,e){if(t.parent&&"/"!==t.parent.id){const n=this.getQuotaFromTree(t,e),a=this.getOrigin(t.parent,e),r=this.getQuotaFromTree(a,e);return 0===n||0!==r&&r<n?a:t}return t}getQuotaFromTree(t,e){return this.getDirectory(t).quotas[e]}getDirectory(t){return this.nodeIds[t.id]}selectOrigin(t){this.selectNode(this.getNode(t))}getNode(t){return this.treeComponent.treeModel.getNodeById(t)}updateQuotaModal(){const t=this.selectedDir.path,e=this.quota.selection.first(),n=e.nextTreeMaximum,a=e.quotaKey,r=e.dirValue;this.modalService.show(Qr.a,{initialState:{titleText:this.getModalQuotaTitle(0===r?this.actionLabels.SET:this.actionLabels.UPDATE,t),message:n.value?this.i18n("The inherited {{quotaValue}} is the maximum value to be used.",{quotaValue:this.getQuotaValueFromPathMsg(n.value,n.path)}):void 0,fields:[this.getQuotaFormField(e.row.name,a,r,n.value)],submitButtonText:this.i18n("Save"),onSubmit:t=>this.updateQuota(t)}})}getModalQuotaTitle(t,e){return this.i18n("{{action}} CephFS {{quotaName}} quota for '{{path}}'",{action:t,quotaName:this.getQuotaName(),path:e})}getQuotaName(){return this.isBytesQuotaSelected()?this.i18n("size"):this.i18n("files")}isBytesQuotaSelected(){return"max_bytes"===this.quota.selection.first().quotaKey}getQuotaValueFromPathMsg(t,e){return this.i18n("{{quotaName}} quota {{value}} from '{{path}}'",{value:this.isBytesQuotaSelected()?this.dimlessBinaryPipe.transform(t):t,quotaName:this.getQuotaName(),path:e})}getQuotaFormField(t,e,n,a){const r="max_bytes"===e,i=[r?Fs.a.binaryMin(0):$.B.min(0)];a&&i.push(r?Fs.a.binaryMax(a):$.B.max(a));const s={type:r?"binary":"number",label:t,name:e,value:n,validators:i,required:!0};return r||(s.errors={min:this.i18n("Value has to be at least {{value}} or more",{value:0}),max:this.i18n("Value has to be at most {{value}} or less",{value:a})}),s}updateQuota(t,e){const n=this.selectedDir.path,a=this.quota.selection.first().quotaKey,r=0===this.selectedDir.quotas[a]?this.actionLabels.SET:0===t[a]?this.actionLabels.UNSET:this.i18n("Updated");this.cephfsService.updateQuota(this.id,n,t).subscribe(()=>{e&&e(),this.notificationService.show(ge.a.success,this.getModalQuotaTitle(r,n)),this.forceDirRefresh()})}unsetQuotaModal(){const t=this.selectedDir.path,e=this.quota.selection.first(),n=e.quotaKey,a=e.nextTreeMaximum,r=e.dirValue;this.modalRef=this.modalService.show(qo.a,{initialState:{titleText:this.getModalQuotaTitle(this.actionLabels.UNSET,t),buttonText:this.actionLabels.UNSET,description:this.i18n("{{action}} {{quotaValue}} {{conclusion}}.",{action:this.actionLabels.UNSET,quotaValue:this.getQuotaValueFromPathMsg(r,t),conclusion:a.value>0?this.i18n(a.value>r?"in order to inherit {{quotaValue}}":"which isn't used because of the inheritance of {{quotaValue}}",{quotaValue:this.getQuotaValueFromPathMsg(a.value,a.path)}):this.i18n("in order to have no quota on the directory")}),onSubmit:()=>this.updateQuota({[n]:0},()=>this.modalRef.hide())}})}createSnapshot(){const t=this.selectedDir.path;this.modalService.show(Qr.a,{initialState:{titleText:this.i18n("Create Snapshot"),message:this.i18n("Please enter the name of the snapshot."),fields:[{type:"text",name:"name",value:`${Oe().toISOString(!0)}`,required:!0}],submitButtonText:this.i18n("Create Snapshot"),onSubmit:e=>{this.cephfsService.mkSnapshot(this.id,t,e.name).subscribe(e=>{this.notificationService.show(ge.a.success,this.i18n('Created snapshot "{{name}}" for "{{path}}"',{name:e,path:t})),this.forceDirRefresh()})}}})}forceDirRefresh(t){if(!t){const e=this.selectedDir;if(!e)throw new Error("This function can only be called without path if an selection was made");t=e.parent?e.parent:e.path}this.getNode(t).loadNodeChildren()}updateTreeStructure(t){const e=(t,e)=>{const n=t.filter(t=>t.parent===e),a=n.map(t=>t.path);return{children:n,paths:a}};J.uniq(t.map(t=>t.parent).sort()).forEach(n=>{const a=e(t,n),r=e(this.dirs,n);r.children.forEach(t=>{a.paths.includes(t.path)||this.removeOldDirectory(t)}),a.children.forEach(t=>{r.paths.includes(t.path)?this.updateExistingDirectory(r.children,t):this.addNewDirectory(t)})})}removeOldDirectory(t){const e=t.path;J.remove(this.dirs,t=>t.path===e),delete this.nodeIds[e],this.updateDirectoriesParentNode(t)}updateDirectoriesParentNode(t){const e=t.parent;if(!e)return;const n=this.getNode(e);if(!n)return;const a=this.getChildren(e);n.data.children=a,n.data.hasChildren=a.length>0,this.treeComponent.treeModel.update()}addNewDirectory(t){this.dirs.push(t),this.nodeIds[t.path]=t,this.updateDirectoriesParentNode(t)}updateExistingDirectory(t,e){const n=t.find(t=>t.path===e.path);Object.assign(n,e)}updateQuotaTable(){const t=this.selectedDir?this.getNode(this.selectedDir.path):void 0;t&&"/"!==t.id&&this.setSettings(t)}updateTree(t=!1){this.loadingIndicator&&!t||(this.treeComponent.treeModel.update(),this.nodes=[...this.nodes],this.treeComponent.sizeChanged())}deleteSnapshotModal(){this.modalRef=this.modalService.show(cs.a,{initialState:{itemDescription:this.i18n("CephFs Snapshot"),itemNames:this.snapshot.selection.selected.map(t=>t.name),submitAction:()=>this.deleteSnapshot()}})}deleteSnapshot(){const t=this.selectedDir.path;this.snapshot.selection.selected.forEach(e=>{const n=e.name;this.cephfsService.rmSnapshot(this.id,t,n).subscribe(()=>{this.notificationService.show(ge.a.success,this.i18n('Deleted snapshot "{{name}}" for "{{path}}"',{name:n,path:t}))})}),this.modalRef.hide(),this.forceDirRefresh()}refreshAllDirectories(){this.loadingIndicator=!0,this.requestedPaths.map(t=>this.forceDirRefresh(t));const t=setInterval(()=>{this.updateTree(!0),this.loadingIndicator||clearInterval(t)},3e3)}unsetLoadingIndicator(){this.loadingIndicator&&(clearTimeout(this.loadingTimeout),this.loadingTimeout=setTimeout(()=>{if(Object.values(this.loading).some(t=>t))return this.unsetLoadingIndicator();this.loadingIndicator=!1,this.updateTree()},3e3))}}var Gf=s["ɵcrt"]({encapsulation:0,styles:[["tree-root .tree-children{overflow:inherit}.quota-origin[_ngcontent-%COMP%]{cursor:pointer;color:#2b99a8}.quota-origin[_ngcontent-%COMP%]:hover{color:#212121}"]],data:{}});function Vf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](2,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](3,2)],(function(t,e){var n=e.component,a=t(e,3,0,n.icons.spinner,n.icons.spin);t(e,2,0,a)}),null)}function zf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,7,"tree-root",[],null,[["body","keydown"],["body","mousedown"]],(function(t,e,n){var a=!0;return"body:keydown"===e&&(a=!1!==s["ɵnov"](t,2).onKeydown(n)&&a),"body:mousedown"===e&&(a=!1!==s["ɵnov"](t,2).onMousedown(n)&&a),a}),bl.b,bl.a)),s["ɵprd"](131584,null,ml.a,ml.a,[]),s["ɵdid"](2,573440,[[1,4]],4,yl.a,[ml.a,vl.a],{nodes:[0,"nodes"],options:[1,"options"]},null),s["ɵqud"](603979776,3,{loadingTemplate:0}),s["ɵqud"](603979776,4,{treeNodeTemplate:0}),s["ɵqud"](603979776,5,{treeNodeWrapperTemplate:0}),s["ɵqud"](603979776,6,{treeNodeFullTemplate:0}),(t()(),s["ɵand"](0,[[3,2],["loadingTemplate",2]],null,0,null,Vf))],(function(t,e){var n=e.component;t(e,2,0,n.nodes,n.treeOptions)}),null)}function Bf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Quotas"])),(t()(),s["ɵeld"](3,0,null,null,3,"cd-table",[["identifier","quotaKey"],["selectionType","single"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.quota.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](4,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],onlyActionHeader:[2,"onlyActionHeader"],toolHeader:[3,"toolHeader"],footer:[4,"footer"],limit:[5,"limit"],identifier:[6,"identifier"],forceIdentifier:[7,"forceIdentifier"],selectionType:[8,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](5,0,null,0,1,"cd-table-actions",[["class","only-table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](6,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.settings,n.quota.columns,!0,!1,!1,0,"quotaKey",!0,"single"),t(e,6,0,n.permission,n.quota.selection,n.quota.tableActions)}),null)}function Yf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,12,"div",[["class","col-sm-8 metadata"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,11,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,[" "," "])),(t()(),s["ɵeld"](4,0,null,null,8,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Bf)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](7,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Snapshots"])),(t()(),s["ɵeld"](9,0,null,null,3,"cd-table",[["forceIdentifier","true"],["identifier","name"],["selectionType","multiClick"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.snapshot.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](10,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],identifier:[2,"identifier"],forceIdentifier:[3,"forceIdentifier"],selectionType:[4,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](11,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](12,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,6,0,"/"!==n.selectedDir.path),t(e,10,0,n.selectedDir.snapshots,n.snapshot.columns,"name","true","multiClick"),t(e,12,0,n.permission,n.snapshot.selection,n.snapshot.tableActions)}),(function(t,e){t(e,3,0,e.component.selectedDir.path)}))}function Hf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","quota-origin"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectOrigin(t.context.value)&&a),a}),null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.context.value)}))}function Uf(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{treeComponent:0}),s["ɵqud"](402653184,2,{originTmpl:0}),(t()(),s["ɵeld"](2,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,10,"div",[["class","col-sm-4 pr-0"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,9,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,5,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,4,"button",[["class","btn btn-light pull-right"],["type","button"]],[[2,"disabled",null]],[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.refreshAllDirectories()&&a),a}),null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"i",[],[[2,"fa-spin",null]],null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](9,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](10,2),(t()(),s["ɵeld"](11,0,null,null,2,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,zf)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yf)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,[[2,2],["origin",2]],null,0,null,Hf))],(function(t,e){var n=e.component,a=t(e,10,0,n.icons.large,n.icons.refresh);t(e,9,0,a),t(e,13,0,n.nodes),t(e,15,0,n.selectedDir)}),(function(t,e){var n=e.component;t(e,6,0,n.loadingIndicator),t(e,7,0,n.loadingIndicator)}))}class Wf{constructor(){this.lhsCounter="mds_mem.ino",this.rhsCounter="mds_server.handle_client_request",this.chart={datasets:[{label:this.lhsCounter,yAxisID:"LHS",data:[],lineTension:.1},{label:this.rhsCounter,yAxisID:"RHS",data:[],lineTension:.1}],options:{title:{text:"",display:!0},responsive:!0,maintainAspectRatio:!1,legend:{position:"top"},scales:{xAxes:[{position:"top",type:"time",time:{displayFormats:{quarter:"MMM YYYY"}},ticks:{maxRotation:0}}],yAxes:[{id:"LHS",type:"linear",position:"left"},{id:"RHS",type:"linear",position:"right"}]},tooltips:{enabled:!1,mode:"index",intersect:!1,position:"nearest",callbacks:{title:(t,e)=>{let n=0;if(t.length>0){const a=t[0];n=e.datasets[a.datasetIndex].data[a.index].x}return n.toString()}}}},chartType:"line"}}ngOnInit(){J.isUndefined(this.mdsCounter)||(this.setChartTooltip(),this.updateChart())}ngOnChanges(){J.isUndefined(this.mdsCounter)||this.updateChart()}setChartTooltip(){const t=new xa.a(this.chartCanvas,this.chartTooltip,t=>t.caretX+"px",t=>t.caretY-t.height-23+"px");t.getTitle=t=>Oe(t,"x").format("LTS"),t.checkOffset=!0,J.merge(this.chart,{options:{title:{text:this.mdsCounter.name},tooltips:{custom:e=>t.customTooltips(e)}}})}updateChart(){const t=[{data:this.convertTimeSeries(this.mdsCounter[this.lhsCounter])},{data:this.deltaTimeSeries(this.mdsCounter[this.rhsCounter])}];J.merge(this.chart,{datasets:t}),this.chart.datasets=[...this.chart.datasets]}convertTimeSeries(t){const e=[];return J.each(t,t=>{e.push({x:1e3*t[0],y:t[1]})}),e.shift(),e}deltaTimeSeries(t){let e,n=t[0];const a=[];for(e=1;e<t.length;e++){const r=t[e];a.push({x:1e3*r[0],y:r[1]-n[1]}),n=r}return a}}var Kf=s["ɵcrt"]({encapsulation:0,styles:[['canvas[_ngcontent-%COMP%]{-moz-user-select:none;user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{opacity:0;position:absolute;background:rgba(0,0,0,.7);color:#fff;border-radius:3px;transition:all .1s ease;pointer-events:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;transform:translate(-50%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%,0)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]::after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%,0)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]::after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]::after{content:" ";position:absolute;top:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:#000 transparent transparent}  .chartjs-tooltip-key{display:inline-block;width:10px;height:10px;margin-right:10px}.chart-container[_ngcontent-%COMP%]{margin:auto auto 20px;cursor:pointer;overflow:visible;position:relative;height:500px;width:100%}']],data:{}});function $f(t){return s["ɵvid"](0,[s["ɵqud"](402653184,1,{chartCanvas:0}),s["ɵqud"](402653184,2,{chartTooltip:0}),(t()(),s["ɵeld"](2,0,null,null,4,"div",[["class","chart-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,[[1,0],["chartCanvas",1]],null,1,"canvas",[["baseChart",""]],null,null,null,null,null)),s["ɵdid"](4,999424,null,0,ya.a,[s.ElementRef,ya.c],{datasets:[0,"datasets"],options:[1,"options"],chartType:[2,"chartType"]},null),(t()(),s["ɵeld"](5,0,[[2,0],["chartTooltip",1]],null,1,"div",[["class","chartjs-tooltip"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"table",[],null,null,null,null,null))],(function(t,e){var n=e.component;t(e,4,0,n.chart.datasets,n.chart.options,n.chart.chartType)}),null)}class Zf{constructor(t,e,n){this.dimlessBinary=t,this.dimless=e,this.i18n=n,this.standbys=[],this.objectValues=Object.values}ngOnChanges(){this.setStandbys()}setStandbys(){this.standbys=[{key:this.i18n("Standby daemons"),value:this.data.standbys}]}ngOnInit(){this.columns={ranks:[{prop:"rank",name:this.i18n("Rank")},{prop:"state",name:this.i18n("State")},{prop:"mds",name:this.i18n("Daemon")},{prop:"activity",name:this.i18n("Activity"),cellTemplate:this.activityTmpl},{prop:"dns",name:this.i18n("Dentries"),pipe:this.dimless},{prop:"inos",name:this.i18n("Inodes"),pipe:this.dimless}],pools:[{prop:"pool",name:this.i18n("Pool")},{prop:"type",name:this.i18n("Type")},{prop:"size",name:this.i18n("Size"),pipe:this.dimlessBinary},{name:this.i18n("Usage"),cellTemplate:this.poolUsageTpl,comparator:(t,e,n,a)=>{const r=n.used/n.avail,i=a.used/a.avail;return r===i?0:r>i?1:-1}}]}}trackByFn(t,e){return e.name}}var Jf=s["ɵcrt"]({encapsulation:0,styles:[[".progress[_ngcontent-%COMP%]{margin-bottom:0}"]],data:{}});function Qf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,2,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"cd-cephfs-chart",[],null,null,null,$f,Kf)),s["ɵdid"](3,638976,null,0,Wf,[],{mdsCounter:[0,"mdsCounter"]},null)],(function(t,e){t(e,3,0,e.context.$implicit)}),null)}function Xf(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-usage-bar",[],null,null,null,go.b,go.a)),s["ɵdid"](1,573440,null,0,po.a,[],{total:[0,"total"],used:[1,"used"]},null)],(function(t,e){t(e,1,0,e.context.row.size,e.context.row.used)}),null)}function th(t){return s["ɵvid"](0,[(t()(),s["ɵted"](0,null,[" ",": "," /s\n"])),s["ɵppd"](1,1)],null,(function(t,e){var n="standby-replay"===e.context.row.state?"Evts":"Reqs",a=s["ɵunv"](e,0,1,t(e,1,0,s["ɵnov"](e.parent,0),e.context.value));t(e,0,0,n,a)}))}function eh(t){return s["ɵvid"](0,[s["ɵpid"](0,Ta.a,[Ea.a]),s["ɵqud"](402653184,1,{poolUsageTpl:0}),s["ɵqud"](402653184,2,{activityTmpl:0}),(t()(),s["ɵeld"](3,0,null,null,14,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,8,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ranks"])),(t()(),s["ɵeld"](7,0,null,null,1,"cd-table",[],null,null,null,Gr.b,Gr.a)),s["ɵdid"](8,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],toolHeader:[2,"toolHeader"]},null),(t()(),s["ɵeld"](9,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Standbys"])),(t()(),s["ɵeld"](11,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](12,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](13,0,null,null,4,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pools"])),(t()(),s["ɵeld"](16,0,null,null,1,"cd-table",[],null,null,null,Gr.b,Gr.a)),s["ɵdid"](17,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],toolHeader:[2,"toolHeader"]},null),(t()(),s["ɵeld"](18,0,null,null,1,"legend",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["MDS performance counters"])),(t()(),s["ɵand"](16777216,null,null,1,null,Qf)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵand"](0,[[1,2],["poolUsageTpl",2]],null,0,null,Xf)),(t()(),s["ɵand"](0,[[2,2],["activityTmpl",2]],null,0,null,th))],(function(t,e){var n=e.component;t(e,8,0,n.data.ranks,n.columns.ranks,!1),t(e,12,0,n.standbys),t(e,17,0,n.data.pools,n.columns.pools,!1),t(e,21,0,n.objectValues(n.data.mdsCounters),n.trackByFn)}),null)}var nh=n("C6Ij"),ah=n("AWcq");class rh{constructor(t,e,n,a,r,i){this.cephfsService=t,this.modalService=e,this.notificationService=n,this.authStorageService=a,this.i18n=r,this.actionLabels=i,this.triggerApiUpdate=new s.EventEmitter,this.selection=new ti.a,this.permission=this.authStorageService.getPermissions().cephfs,this.tableActions=[{permission:"update",icon:ht.a.signOut,click:()=>this.evictClientModal(),name:this.actionLabels.EVICT}]}ngOnInit(){this.columns=[{prop:"id",name:this.i18n("id")},{prop:"type",name:this.i18n("type")},{prop:"state",name:this.i18n("state")},{prop:"version",name:this.i18n("version")},{prop:"hostname",name:this.i18n("Host")},{prop:"root",name:this.i18n("root")}]}updateSelection(t){this.selection=t}evictClient(t){this.cephfsService.evictClient(this.id,t).subscribe(()=>{this.triggerApiUpdate.emit(),this.modalRef.hide(),this.notificationService.show(ge.a.success,this.i18n('Evicted client "{{clientId}}"',{clientId:t}))},()=>{this.modalRef.content.stopLoadingSpinner()})}evictClientModal(){const t=this.selection.first().id;this.modalRef=this.modalService.show(cs.a,{initialState:{itemDescription:"client",itemNames:[t],actionDescription:"evict",submitAction:()=>this.evictClient(t)}})}}var ih=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function sh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-view-cache",[],null,null,null,nh.b,nh.a)),s["ɵdid"](1,114688,null,0,ah.a,[],{status:[0,"status"]},null),(t()(),s["ɵeld"](2,0,null,null,3,"cd-table",[["selectionType","single"]],null,[[null,"updateSelection"]],(function(t,e,n){var a=!0;return"updateSelection"===e&&(a=!1!==t.component.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](3,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],selectionType:[2,"selectionType"]},{updateSelection:"updateSelection"}),(t()(),s["ɵeld"](4,0,null,1,1,"cd-table-actions",[["class","table-actions"]],null,null,null,zr.b,zr.a)),s["ɵdid"](5,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.clients.status),t(e,3,0,n.clients.data,n.columns,"single"),t(e,5,0,n.permission,n.selection,n.tableActions)}),null)}var oh=n("yJti");class uh{constructor(t,e,n){this.ngZone=t,this.authStorageService=e,this.cephfsService=n,this.clients={data:[],status:oh.a.ValueNone},this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.directoriesSelected=!1,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection?this.selection.id!==this.id&&this.setupSelected(this.selection.id,this.selection.mdsmap.info):this.unsubscribeInterval()}setupSelected(t,e){this.id=t;const n=J.first(Object.values(e));this.grafanaId=n&&n.name,this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.clients={data:[],status:oh.a.ValueNone},this.updateInterval()}updateInterval(){this.unsubscribeInterval(),this.subscribeInterval()}unsubscribeInterval(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe()}subscribeInterval(){this.ngZone.runOutsideAngular(()=>this.reloadSubscriber=Object(sf.a)(0,5e3).subscribe(()=>this.ngZone.run(()=>this.refresh())))}refresh(){this.cephfsService.getTabs(this.id).subscribe(t=>{this.data=t,this.softRefresh()},()=>{this.clients.status=oh.a.ValueException})}softRefresh(){const t=J.cloneDeep(this.data);this.clients=t.clients,this.details={standbys:t.standbys,pools:t.pools,ranks:t.ranks,mdsCounters:t.mds_counters,name:t.name}}ngOnDestroy(){this.unsubscribeInterval()}}var lh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function dh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients"])),(t()(),s["ɵeld"](2,0,null,null,1,"span",[["class","badge badge-pill badge-tab ml-1"]],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["",""]))],null,(function(t,e){t(e,3,0,e.component.clients.data.length)}))}function ch(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-cephfs-directories",[],null,null,null,Uf,Gf)),s["ɵdid"](1,638976,null,0,Ff,[vt.a,Lt.b,jf,Se.a,me.a,At.b,gt.a,_a.a],{id:[0,"id"]},null)],(function(t,e){t(e,1,0,e.component.id)}),null)}function fh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"tab",[["heading","Performance Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](1,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](2,0,null,null,1,"cd-grafana",[["grafanaStyle","one"],["uid","tbO9LAiZz"]],null,null,null,qr.b,qr.a)),s["ɵdid"](3,638976,null,0,jr.a,[Fr.b,re.a,me.a],{grafanaPath:[0,"grafanaPath"],grafanaStyle:[1,"grafanaStyle"],uid:[2,"uid"]},null)],(function(t,e){var n=e.component;t(e,1,0,"Performance Details"),t(e,3,0,"mds-performance?var-mds_servers=mds."+n.grafanaId,"one","tbO9LAiZz")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).id,s["ɵnov"](e,1).active,s["ɵnov"](e,1).addClass,s["ɵnov"](e,1).role,s["ɵnov"](e,1).ariaLabelledby)}))}function hh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.softRefresh()&&a),a}),null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},{selectTab:"selectTab"}),(t()(),s["ɵeld"](4,0,null,null,1,"cd-cephfs-detail",[],null,null,null,eh,Jf)),s["ɵdid"](5,638976,null,0,Zf,[_a.a,Ta.a,me.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](6,0,null,0,5,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=!1!==t.component.softRefresh()&&a),a}),null,null)),s["ɵdid"](7,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],null,{selectTab:"selectTab"}),(t()(),s["ɵand"](0,null,null,1,null,dh)),s["ɵdid"](9,16384,null,0,oa.c,[s.TemplateRef,oa.b],null,null),(t()(),s["ɵeld"](10,0,null,null,1,"cd-cephfs-clients",[],null,[[null,"triggerApiUpdate"]],(function(t,e,n){var a=!0;return"triggerApiUpdate"===e&&(a=!1!==t.component.refresh()&&a),a}),sh,ih)),s["ɵdid"](11,114688,null,0,rh,[jf,Lt.b,gt.a,vt.a,me.a,At.b],{id:[0,"id"],clients:[1,"clients"]},{triggerApiUpdate:"triggerApiUpdate"}),(t()(),s["ɵeld"](12,0,null,0,3,"tab",[["heading","Directories"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],[[null,"selectTab"]],(function(t,e,n){var a=!0;return"selectTab"===e&&(a=0!=(t.component.directoriesSelected=!0)&&a),a}),null,null)),s["ɵdid"](13,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},{selectTab:"selectTab"}),(t()(),s["ɵand"](16777216,null,null,1,null,ch)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,fh)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.details),t(e,7,0),t(e,11,0,n.id,n.clients),t(e,13,0,"Directories"),t(e,15,0,n.directoriesSelected),t(e,17,0,n.grafanaPermission.read&&n.grafanaId)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby),t(e,12,0,s["ɵnov"](e,13).id,s["ɵnov"](e,13).active,s["ɵnov"](e,13).addClass,s["ɵnov"](e,13).role,s["ɵnov"](e,13).ariaLabelledby)}))}function gh(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,hh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}class ph extends ds.a{constructor(t,e,n){super(),this.cephfsService=t,this.cdDatePipe=e,this.i18n=n,this.filesystems=[],this.selection=new ti.a}ngOnInit(){this.columns=[{name:this.i18n("Name"),prop:"mdsmap.fs_name",flexGrow:2},{name:this.i18n("Created"),prop:"mdsmap.created",flexGrow:2,pipe:this.cdDatePipe},{name:this.i18n("Enabled"),prop:"mdsmap.enabled",flexGrow:1,cellTransformation:Xr.a.checkIcon}]}loadFilesystems(t){this.cephfsService.list().subscribe(t=>{this.filesystems=t},()=>{t.error()})}updateSelection(t){this.selection=t}}var bh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function mh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"fetchData"],[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"fetchData"===e&&(a=!1!==r.loadFilesystems(n)&&a),"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](1,2867200,null,0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](2,0,null,3,1,"cd-cephfs-tabs",[["cdTableDetail",""]],null,null,null,gh,lh)),s["ɵdid"](3,704512,null,0,uh,[s.NgZone,vt.a,jf],{selection:[0,"selection"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.filesystems,n.columns,"flex",!0,"id","true","single"),t(e,3,0,n.expandedRow)}),null)}function yh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-cephfs-list",[],null,null,null,mh,bh)),s["ɵdid"](1,114688,null,0,ph,[jf,Se.a,me.a],null,null)],(function(t,e){t(e,1,0)}),null)}var vh=s["ɵccf"]("cd-cephfs-list",ph,yh,{},{},[]),xh=n("D4zM"),_h=n("1nQr");class Th{constructor(t,e,n,a,r,i,s,o){this.i18n=t,this.actionLabels=e,this.notificationService=n,this.userService=a,this.authStorageService=r,this.formBuilder=i,this.router=s,this.passwordPolicyService=o,this.passwordPolicyHelpText="",this.icons=ht.a,this.action=this.actionLabels.CHANGE,this.resource=this.i18n("password"),this.createForm()}createForm(){this.passwordPolicyService.getHelpText().subscribe(t=>{this.passwordPolicyHelpText=t}),this.userForm=this.formBuilder.group({oldpassword:[null,[$.B.required,Fs.a.custom("notmatch",()=>this.userForm&&this.userForm.getValue("newpassword")===this.userForm.getValue("oldpassword"))]],newpassword:[null,[$.B.required,Fs.a.custom("notmatch",()=>this.userForm&&this.userForm.getValue("oldpassword")===this.userForm.getValue("newpassword"))],[Fs.a.passwordPolicy(this.userService,()=>this.authStorageService.getUsername(),(t,e,n)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(e),this.passwordValuation=J.defaultTo(n,"")})]],confirmnewpassword:[null,[$.B.required]]},{validators:[Fs.a.match("newpassword","confirmnewpassword")]})}onSubmit(){if(this.userForm.pristine)return;const t=this.authStorageService.getUsername(),e=this.userForm.getValue("oldpassword"),n=this.userForm.getValue("newpassword");this.userService.changePassword(t,e,n).subscribe(()=>this.onPasswordChange(),()=>{this.userForm.setErrors({cdSubmitButton:!0})})}onPasswordChange(){this.notificationService.show(ge.a.success,this.i18n('Updated user password"')),this.router.navigate(["/login"])}}var Oh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Sh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function Ih(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-helper",[["class","text-pre"]],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],{class:[0,"class"],html:[1,"html"]},null)],(function(t,e){t(e,1,0,"text-pre",s["ɵinlineInterpolate"](1,"",e.component.passwordPolicyHelpText,""))}),null)}function Nh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Ch(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function Rh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.passwordValuation)}))}function Ah(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function kh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password confirmation doesn't match the new password."]))],null,null)}function Eh(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),(t()(),s["ɵeld"](2,0,null,null,93,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,92,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,5).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,5).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit()&&a),a}),null,null)),s["ɵdid"](4,16384,null,0,$.G,[],null,null),s["ɵdid"](5,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](7,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](8,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](9,0,null,null,86,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](11,null,[""," ",""])),s["ɵppd"](12,1),s["ɵppd"](13,1),(t()(),s["ɵeld"](14,0,null,null,74,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,22,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](16,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](19,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","oldpassword"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Old password"])),(t()(),s["ɵeld"](21,0,null,0,16,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,7,"input",[["autocomplete","new-password"],["autofocus",""],["class","form-control"],["formControlName","oldpassword"],["id","oldpassword"],["placeholder","Old password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,24)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,24).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,24)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,24)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](24,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](26,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](28,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](29,4210688,null,0,Es.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](30,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](31,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](32,0,null,null,1,"button",[["cdPasswordButton","oldpassword"],["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,33).onClick()&&a),a}),null,null)),s["ɵdid"](33,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wh)),s["ɵdid"](35,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sh)),s["ɵdid"](37,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](38,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](39,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](42,0,null,0,4,"label",[["class","cd-col-form-label"],["for","newpassword"]],null,null,null,null,null)),(t()(),s["ɵeld"](43,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New password"])),(t()(),s["ɵand"](16777216,null,null,1,null,Ih)),s["ɵdid"](46,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](47,0,null,0,19,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](48,0,null,null,10,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","newpassword"],["id","newpassword"],["placeholder","Password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,50)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,50).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,50)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,50)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](50,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](52,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](54,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](55,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](56,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](57,0,null,null,1,"button",[["cdPasswordButton","newpassword"],["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,58).onClick()&&a),a}),null,null)),s["ɵdid"](58,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](59,0,null,null,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(t()(),s["ɵeld"](60,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Nh)),s["ɵdid"](62,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ch)),s["ɵdid"](64,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rh)),s["ɵdid"](66,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](67,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](68,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](71,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","confirmnewpassword"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Confirm new password"])),(t()(),s["ɵeld"](73,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](74,0,null,null,10,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](75,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","confirmnewpassword"],["id","confirmnewpassword"],["placeholder","Confirm new password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,76)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,76).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,76)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,76)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](76,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](78,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](80,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](81,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](82,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](83,0,null,null,1,"button",[["cdPasswordButton","confirmnewpassword"],["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,84).onClick()&&a),a}),null,null)),s["ɵdid"](84,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ah)),s["ɵdid"](86,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,kh)),s["ɵdid"](88,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](89,0,null,null,6,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](90,0,null,null,5,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](91,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](92,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](93,0,[" "," "," "])),s["ɵppd"](94,1),s["ɵppd"](95,1)],(function(t,e){var n=e.component;t(e,5,0,n.userForm),t(e,8,0,n.userForm),t(e,16,0),t(e,26,0,"oldpassword"),t(e,29,0,""),t(e,30,0,"oldpassword"),t(e,33,0,"oldpassword"),t(e,35,0,n.userForm.showError("oldpassword",s["ɵnov"](e,5),"required")),t(e,37,0,n.userForm.showError("oldpassword",s["ɵnov"](e,5),"notmatch")),t(e,39,0),t(e,46,0,n.passwordPolicyHelpText.length>0),t(e,52,0,"newpassword"),t(e,55,0,"newpassword"),t(e,58,0,"newpassword"),t(e,62,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"required")),t(e,64,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"notmatch")),t(e,66,0,n.userForm.showError("newpassword",s["ɵnov"](e,5),"passwordPolicy")),t(e,68,0),t(e,78,0,"confirmnewpassword"),t(e,81,0,"confirmnewpassword"),t(e,84,0,"confirmnewpassword"),t(e,86,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,5),"required")),t(e,88,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,5),"match")),t(e,92,0,n.userForm)}),(function(t,e){var n=e.component;t(e,3,0,s["ɵnov"](e,7).ngClassUntouched,s["ɵnov"](e,7).ngClassTouched,s["ɵnov"](e,7).ngClassPristine,s["ɵnov"](e,7).ngClassDirty,s["ɵnov"](e,7).ngClassValid,s["ɵnov"](e,7).ngClassInvalid,s["ɵnov"](e,7).ngClassPending);var a=s["ɵunv"](e,11,0,t(e,12,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,11,1,t(e,13,0,s["ɵnov"](e,1),n.resource));t(e,11,0,a,r),t(e,15,0,s["ɵnov"](e,16).hasErrors,s["ɵnov"](e,16).hasSuccess),t(e,23,0,s["ɵnov"](e,28).ngClassUntouched,s["ɵnov"](e,28).ngClassTouched,s["ɵnov"](e,28).ngClassPristine,s["ɵnov"](e,28).ngClassDirty,s["ɵnov"](e,28).ngClassValid,s["ɵnov"](e,28).ngClassInvalid,s["ɵnov"](e,28).ngClassPending,s["ɵnov"](e,30).validClass,s["ɵnov"](e,30).invalidClass),t(e,38,0,s["ɵnov"](e,39).hasErrors,s["ɵnov"](e,39).hasSuccess),t(e,49,0,s["ɵnov"](e,54).ngClassUntouched,s["ɵnov"](e,54).ngClassTouched,s["ɵnov"](e,54).ngClassPristine,s["ɵnov"](e,54).ngClassDirty,s["ɵnov"](e,54).ngClassValid,s["ɵnov"](e,54).ngClassInvalid,s["ɵnov"](e,54).ngClassPending,s["ɵnov"](e,55).validClass,s["ɵnov"](e,55).invalidClass),t(e,60,0,s["ɵinlineInterpolate"](1,"",n.passwordStrengthLevelClass,""),s["ɵinlineInterpolate"](1,"",n.passwordValuation,"")),t(e,67,0,s["ɵnov"](e,68).hasErrors,s["ɵnov"](e,68).hasSuccess),t(e,75,0,s["ɵnov"](e,80).ngClassUntouched,s["ɵnov"](e,80).ngClassTouched,s["ɵnov"](e,80).ngClassPristine,s["ɵnov"](e,80).ngClassDirty,s["ɵnov"](e,80).ngClassValid,s["ɵnov"](e,80).ngClassInvalid,s["ɵnov"](e,80).ngClassPending,s["ɵnov"](e,81).validClass,s["ɵnov"](e,81).invalidClass);var i=s["ɵunv"](e,93,0,t(e,94,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,93,1,t(e,95,0,s["ɵnov"](e,1),n.resource));t(e,93,0,i,o)}))}function Lh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-user-password-form",[],null,null,null,Eh,Oh)),s["ɵdid"](1,49152,null,0,Th,[me.a,At.b,gt.a,Rt.a,vt.a,Ho.a,qt.m,_h.a],null,null)],null,null)}var Dh=s["ɵccf"]("cd-user-password-form",Th,Lh,{},{},[]);class Ph{constructor(t,e){this.route=t,this.i18n=e,this.message=this.i18n("The NFS Ganesha service is not configured.")}ngOnInit(){this.routeParamsSubscribe=this.route.params.subscribe(t=>{this.message=t.message})}ngOnDestroy(){this.routeParamsSubscribe.unsubscribe()}}var Mh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function qh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,"cd-alert-panel",[["type","info"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"]},null),(t()(),s["ɵted"](2,0,[" ",""])),(t()(),s["ɵeld"](3,0,null,0,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,0,4,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Please consult the "])),(t()(),s["ɵeld"](6,0,null,null,1,"cd-doc",[["section","nfs-ganesha"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](7,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,null,[" on how to configure and enable the NFS Ganesha management functionality."]))],(function(t,e){t(e,1,0,"info"),t(e,7,0,"nfs-ganesha")}),(function(t,e){t(e,2,0,e.component.message)}))}function jh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-nfs-501",[],null,null,null,qh,Mh)),s["ɵdid"](1,245760,null,0,Ph,[qt.a,me.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Fh=s["ɵccf"]("cd-nfs-501",Ph,jh,{},{},[]);class Gh{constructor(t){this.i18n=t,this.clients=[],this.clientsColumns=[{name:this.i18n("Addresses"),prop:"addresses",flexGrow:2},{name:this.i18n("Access Type"),prop:"access_type",flexGrow:1},{name:this.i18n("Squash"),prop:"squash",flexGrow:1}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.clients=this.selectedItem.clients,this.data={},this.data[this.i18n("Cluster")]=this.selectedItem.cluster_id,this.data[this.i18n("Daemons")]=this.selectedItem.daemons,this.data[this.i18n("NFS Protocol")]=this.selectedItem.protocols.map(t=>"NFSv"+t),this.data[this.i18n("Pseudo")]=this.selectedItem.pseudo,this.data[this.i18n("Access Type")]=this.selectedItem.access_type,this.data[this.i18n("Squash")]=this.selectedItem.squash,this.data[this.i18n("Transport")]=this.selectedItem.transports,this.data[this.i18n("Path")]=this.selectedItem.path,"CEPH"===this.selectedItem.fsal.name?(this.data[this.i18n("Storage Backend")]=this.i18n("CephFS"),this.data[this.i18n("CephFS User")]=this.selectedItem.fsal.user_id,this.data[this.i18n("CephFS Filesystem")]=this.selectedItem.fsal.fs_name,this.data[this.i18n("Security Label")]=this.selectedItem.fsal.sec_label_xattr):(this.data[this.i18n("Storage Backend")]=this.i18n("Object Gateway"),this.data[this.i18n("Object Gateway User")]=this.selectedItem.fsal.rgw_user_id))}}var Vh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function zh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,9,"tabset",[],[[2,"tab-container",null]],null,null,sa.b,sa.a)),s["ɵdid"](1,180224,null,0,oa.e,[oa.f,s.Renderer2,s.ElementRef],null,null),(t()(),s["ɵeld"](2,0,null,0,3,"tab",[["heading","Details"]],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](3,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](4,0,null,null,1,"cd-table-key-value",[],null,null,null,xi.b,xi.a)),s["ɵdid"](5,638976,null,0,_i.a,[Se.a],{data:[0,"data"]},null),(t()(),s["ɵeld"](6,0,null,0,3,"tab",[],[[1,"id",0],[2,"active",null],[2,"tab-pane",null],[1,"role",0],[1,"aria-labelledby",0]],null,null,null,null)),s["ɵdid"](7,212992,null,0,oa.b,[oa.e,s.ElementRef,s.Renderer2],{heading:[0,"heading"]},null),(t()(),s["ɵeld"](8,0,null,null,1,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","addresses"],["selectionType",""]],null,null,null,Gr.b,Gr.a)),s["ɵdid"](9,2867200,[["table",4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],identifier:[3,"identifier"],forceIdentifier:[4,"forceIdentifier"],selectionType:[5,"selectionType"]},null)],(function(t,e){var n=e.component;t(e,3,0,"Details"),t(e,5,0,n.data),t(e,7,0,s["ɵinlineInterpolate"](1,"Clients (",n.clients.length,")")),t(e,9,0,n.clients,n.clientsColumns,"flex","addresses","true","")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).clazz),t(e,2,0,s["ɵnov"](e,3).id,s["ɵnov"](e,3).active,s["ɵnov"](e,3).addClass,s["ɵnov"](e,3).role,s["ɵnov"](e,3).ariaLabelledby),t(e,6,0,s["ɵnov"](e,7).id,s["ɵnov"](e,7).active,s["ɵnov"](e,7).addClass,s["ɵnov"](e,7).role,s["ɵnov"](e,7).ariaLabelledby)}))}function Bh(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,zh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.selection)}),null)}var Yh=n("VTlA");let Hh=(()=>{class t{constructor(t,e){this.http=t,this.i18n=e,this.apiPath="api/nfs-ganesha",this.uiApiPath="ui-api/nfs-ganesha",this.nfsAccessType=[{value:"RW",help:this.i18n("Allows all operations")},{value:"RO",help:this.i18n("Allows only operations that do not modify the server")},{value:"MDONLY",help:this.i18n("Does not allow read or write operations, but allows any other operation")},{value:"MDONLY_RO",help:this.i18n("Does not allow read, write, or any operation that modifies file        attributes or directory content")},{value:"NONE",help:this.i18n("Allows no access at all")}],this.nfsFsal=[{value:"CEPH",descr:this.i18n("CephFS")},{value:"RGW",descr:this.i18n("Object Gateway")}],this.nfsSquash=["no_root_squash","root_id_squash","root_squash","all_squash"]}list(){return this.http.get(`${this.apiPath}/export`)}get(t,e){return this.http.get(`${this.apiPath}/export/${t}/${e}`)}create(t){return this.http.post(`${this.apiPath}/export`,t,{observe:"response"})}update(t,e,n){return this.http.put(`${this.apiPath}/export/${t}/${e}`,n,{observe:"response"})}delete(t,e){return this.http.delete(`${this.apiPath}/export/${t}/${e}`,{observe:"response"})}lsDir(t){return this.http.get(`${this.uiApiPath}/lsdir?root_dir=${t}`)}buckets(t){return this.http.get(`${this.uiApiPath}/rgw/buckets?user_id=${t}`)}clients(){return this.http.get(`${this.uiApiPath}/cephx/clients`)}fsals(){return this.http.get(`${this.uiApiPath}/fsals`)}filesystems(){return this.http.get(`${this.uiApiPath}/cephfs/filesystems`)}daemon(){return this.http.get(`${this.apiPath}/daemon`)}start(t){return this.http.put(`${this.apiPath}/service/${t}/start`,null,{observe:"response"})}stop(t){return this.http.put(`${this.apiPath}/service/${t}/stop`,null,{observe:"response"})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](me.a))},token:t,providedIn:fe.a}),t})();class Uh extends ds.a{constructor(t,e,n,a,r,i,s){super(),this.authStorageService=t,this.i18n=e,this.modalService=n,this.nfsService=a,this.taskListService=r,this.taskWrapper=i,this.actionLabels=s,this.selection=new ti.a,this.isDefaultCluster=!1,this.builders={"nfs/create":t=>({path:t.path,cluster_id:t.cluster_id,fsal:t.fsal})},this.permission=this.authStorageService.getPermissions().nfs;const o=()=>this.selection.first()&&`${encodeURI(this.selection.first().cluster_id)}/${encodeURI(this.selection.first().export_id)}`;this.tableActions=[{permission:"create",icon:ht.a.add,routerLink:()=>"/nfs/create",canBePrimary:t=>!t.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:ht.a.edit,routerLink:()=>`/nfs/edit/${o()}`,name:this.actionLabels.EDIT},{permission:"delete",icon:ht.a.destroy,click:()=>this.deleteNfsModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:this.i18n("Path"),prop:"path",flexGrow:2,cellTransformation:Xr.a.executing},{name:this.i18n("Pseudo"),prop:"pseudo",flexGrow:2},{name:this.i18n("Cluster"),prop:"cluster_id",flexGrow:2},{name:this.i18n("Daemons"),prop:"daemons",flexGrow:2},{name:this.i18n("Storage Backend"),prop:"fsal",flexGrow:2,cellTemplate:this.nfsFsal},{name:this.i18n("Access Type"),prop:"access_type",flexGrow:2}],this.nfsService.daemon().subscribe(t=>{const e=J(t).map(t=>t.cluster_id).uniq().value();this.isDefaultCluster=1===e.length&&"_default_"===e[0],this.columns[2].isHidden=this.isDefaultCluster,this.table&&this.table.updateColumns(),this.taskListService.init(()=>this.nfsService.list(),t=>this.prepareResponse(t),t=>this.exports=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)},()=>{this.onFetchError()})}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}prepareResponse(t){let e=[];return t.forEach(t=>{t.id=`${t.cluster_id}:${t.export_id}`,t.state="LOADING",e=e.concat(t)}),e}onFetchError(){this.table.reset(),this.viewCacheStatus={status:oh.a.ValueException}}itemFilter(t,e){return t.cluster_id===e.metadata.cluster_id&&t.export_id===e.metadata.export_id}taskFilter(t){return["nfs/create","nfs/delete","nfs/edit"].includes(t.name)}updateSelection(t){this.selection=t}deleteNfsModal(){const t=this.selection.first().cluster_id,e=this.selection.first().export_id;this.modalRef=this.modalService.show(cs.a,{initialState:{itemDescription:this.i18n("NFS export"),itemNames:[`${t}:${e}`],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new hs.a("nfs/delete",{cluster_id:t,export_id:e}),call:this.nfsService.delete(t,e)})}})}}var Wh=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Kh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS"]))],null,null)}function $h(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway"]))],null,null)}function Zh(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Kh)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$h)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,"CEPH"===e.context.value.name),t(e,3,0,"RGW"===e.context.value.name)}),null)}function Jh(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{nfsState:0}),s["ɵqud"](402653184,2,{nfsFsal:0}),s["ɵqud"](402653184,3,{table:0}),(t()(),s["ɵeld"](3,0,null,null,6,"cd-table",[["columnMode","flex"],["forceIdentifier","true"],["identifier","id"],["selectionType","single"]],null,[[null,"setExpandedRow"],[null,"updateSelection"]],(function(t,e,n){var a=!0,r=t.component;return"setExpandedRow"===e&&(a=!1!==r.setExpandedRow(n)&&a),"updateSelection"===e&&(a=!1!==r.updateSelection(n)&&a),a}),Gr.b,Gr.a)),s["ɵdid"](4,2867200,[[3,4],["table",4]],0,Vr.a,[s.NgZone,s.ChangeDetectorRef],{data:[0,"data"],columns:[1,"columns"],columnMode:[2,"columnMode"],hasDetails:[3,"hasDetails"],identifier:[4,"identifier"],forceIdentifier:[5,"forceIdentifier"],selectionType:[6,"selectionType"]},{updateSelection:"updateSelection",setExpandedRow:"setExpandedRow"}),(t()(),s["ɵeld"](5,0,null,1,2,"div",[["class","table-actions btn-toolbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"cd-table-actions",[["class","btn-group"]],null,null,null,zr.b,zr.a)),s["ɵdid"](7,114688,null,0,Br.a,[],{permission:[0,"permission"],selection:[1,"selection"],tableActions:[2,"tableActions"]},null),(t()(),s["ɵeld"](8,0,null,3,1,"cd-nfs-details",[["cdTableDetail",""]],null,null,null,Bh,Vh)),s["ɵdid"](9,573440,null,0,Gh,[me.a],{selection:[0,"selection"]},null),(t()(),s["ɵand"](0,[[2,2],["nfsFsal",2]],null,0,null,Zh))],(function(t,e){var n=e.component;t(e,4,0,n.exports,n.columns,"flex",!0,"id","true","single"),t(e,7,0,n.permission,n.selection,n.tableActions),t(e,9,0,n.expandedRow)}),null)}function Qh(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-nfs-list",[],null,null,null,Jh,Wh)),s["ɵprd"](131584,null,Yh.a,Yh.a,[qe.a,pt.a]),s["ɵdid"](2,245760,null,0,Uh,[vt.a,me.a,Lt.b,Hh,Yh.a,ys.a,At.b],null,null)],(function(t,e){t(e,2,0)}),null)}var Xh=s["ɵccf"]("cd-nfs-list",Uh,Qh,{},{},[]),tg=n("hpHm");function eg(t){return!!t&&(t instanceof kn.a||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var ng=n("7o/Q");function ag(t,e=Pa.a){return n=>n.lift(new rg(t,e))}class rg{constructor(t,e){this.dueTime=t,this.scheduler=e}call(t,e){return e.subscribe(new ig(t,this.dueTime,this.scheduler))}}class ig extends ng.a{constructor(t,e,n){super(t),this.dueTime=e,this.scheduler=n,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(sg,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:t}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(t)}}clearDebounce(){const t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)}}function sg(t){t.debouncedNext()}var og=n("eIep");const ug={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x"};class lg{constructor(t,e=t,n=!1){this.item=t,this.value=e,this.header=n}isHeader(){return this.header}toString(){return this.value}}function dg(t){return t?t.replace(/[^A-Za-z0-9\[\] ]/g,(function(t){return ug[t]||t})):""}function cg(t,e=" ",n=""){const a=t.split(new RegExp(`(?:[${n}])([^${n}]+)`+`(?:[${n}])|([^${e}]+)`,"g")),r=[],i=a.length;let s;const o=new RegExp(`[${n}]+`,"g");for(let u=0;u<i;u+=1)s=a[u],s&&s.length&&s!==e&&r.push(s.replace(o,""));return r}function fg(t,e){if(!e||"object"!=typeof t)return t.toString();if(e.endsWith("()"))return t[e.slice(0,e.length-2)]().toString();const n=e.replace(/\[(\w+)\]/g,".$1").replace(/^\./,"").split(".");for(const a of n)a in t&&(t=t[a]);return t?t.toString():""}class hg{constructor(t,e,n,a){this.positionService=t,this.renderer=e,this.element=n,this.changeDetectorRef=a,this.isFocused=!1,this.height=0,this._matches=[],this.isScrolledIntoView=function(t){const e=this.ulElement.nativeElement.scrollTop,n=e+Number(this.ulElement.nativeElement.offsetHeight),a=t.offsetTop;return a+t.offsetHeight<=n&&a>=e},this.positionServiceSubscription=this.positionService.event$.subscribe(()=>{if(this.isAnimated)return this.animationState=this.isTopPosition?"animated-up":"animated-down",void this.changeDetectorRef.detectChanges();this.animationState="unanimated",this.changeDetectorRef.detectChanges()})}get isBs4(){return!Object(tg.d)()}get active(){return this._active}get matches(){return this._matches}set matches(t){if(this.positionService.setOptions({modifiers:{flip:{enabled:this.adaptivePosition}},allowedPositions:["top","bottom"]}),this._matches=t,this.needScrollbar=this.typeaheadScrollable&&this.typeaheadOptionsInScrollableView<this.matches.length,this.typeaheadScrollable&&setTimeout(()=>{this.setScrollableMode()}),this.typeaheadIsFirstItemActive&&this._matches.length>0&&(this._active=this._matches[0],this._active.isHeader()&&this.nextActiveMatch()),this._active&&!this.typeaheadIsFirstItemActive){const t=this._matches.find(t=>t.value===this._active.value);if(t)return void this.selectActive(t);this._active=null}}get isTopPosition(){return this.element.nativeElement.classList.contains("top")}get optionsListTemplate(){return this.parent?this.parent.optionsListTemplate:void 0}get isAnimated(){return!!this.parent&&this.parent.isAnimated}get adaptivePosition(){return!!this.parent&&this.parent.adaptivePosition}get typeaheadScrollable(){return!!this.parent&&this.parent.typeaheadScrollable}get typeaheadOptionsInScrollableView(){return this.parent?this.parent.typeaheadOptionsInScrollableView:5}get typeaheadIsFirstItemActive(){return!this.parent||this.parent.typeaheadIsFirstItemActive}get itemTemplate(){return this.parent?this.parent.typeaheadItemTemplate:void 0}selectActiveMatch(t){this._active&&this.parent.typeaheadSelectFirstItem&&this.selectMatch(this._active),!this.parent.typeaheadSelectFirstItem&&t&&this.selectMatch(this._active)}prevActiveMatch(){const t=this.matches.indexOf(this._active);this._active=this.matches[t-1<0?this.matches.length-1:t-1],this._active.isHeader()&&this.prevActiveMatch(),this.typeaheadScrollable&&this.scrollPrevious(t)}nextActiveMatch(){const t=this.matches.indexOf(this._active);this._active=this.matches[t+1>this.matches.length-1?0:t+1],this._active.isHeader()&&this.nextActiveMatch(),this.typeaheadScrollable&&this.scrollNext(t)}selectActive(t){this.isFocused=!0,this._active=t}highlight(t,e){let n,a,r=t.value,i=(this.parent&&this.parent.typeaheadLatinize?dg(r):r).toLowerCase();if("object"==typeof e){const t=e.length;for(let s=0;s<t;s+=1)n=i.indexOf(e[s]),a=e[s].length,n>=0&&a>0&&(r=`${r.substring(0,n)}<strong>${r.substring(n,n+a)}</strong>`+`${r.substring(n+a)}`,i=`${i.substring(0,n)}        ${" ".repeat(a)}         `+`${i.substring(n+a)}`)}else e&&(n=i.indexOf(e),a=e.length,n>=0&&a>0&&(r=`${r.substring(0,n)}<strong>${r.substring(n,n+a)}</strong>`+`${r.substring(n+a)}`));return r}focusLost(){this.isFocused=!1}isActive(t){return this._active===t}selectMatch(t,e){return e&&(e.stopPropagation(),e.preventDefault()),this.parent.changeModel(t),setTimeout(()=>this.parent.typeaheadOnSelect.emit(t),0),!1}setScrollableMode(){if(this.ulElement||(this.ulElement=this.element),this.liElements.first){const t=tg.b.getStyles(this.ulElement.nativeElement),e=tg.b.getStyles(this.liElements.first.nativeElement),n=parseFloat((t["padding-bottom"]?t["padding-bottom"]:"").replace("px","")),a=parseFloat((t["padding-top"]?t["padding-top"]:"0").replace("px","")),r=parseFloat((e.height?e.height:"0").replace("px",""));this.guiHeight=`${this.typeaheadOptionsInScrollableView*r+a+n}px`}this.renderer.setStyle(this.element.nativeElement,"visibility","visible")}scrollPrevious(t){if(0!==t){if(this.liElements){const e=this.liElements.toArray()[t-1];e&&!this.isScrolledIntoView(e.nativeElement)&&(this.ulElement.nativeElement.scrollTop=e.nativeElement.offsetTop)}}else this.scrollToBottom()}scrollNext(t){if(t+1>this.matches.length-1)this.scrollToTop();else if(this.liElements){const e=this.liElements.toArray()[t+1];e&&!this.isScrolledIntoView(e.nativeElement)&&(this.ulElement.nativeElement.scrollTop=e.nativeElement.offsetTop-Number(this.ulElement.nativeElement.offsetHeight)+Number(e.nativeElement.offsetHeight))}}ngOnDestroy(){this.positionServiceSubscription.unsubscribe()}scrollToBottom(){this.ulElement.nativeElement.scrollTop=this.ulElement.nativeElement.scrollHeight}scrollToTop(){this.ulElement.nativeElement.scrollTop=0}}class gg{constructor(){this.adaptivePosition=!1,this.isAnimated=!1,this.hideResultsOnBlur=!0,this.selectFirstItem=!0,this.isFirstItemActive=!0,this.minLength=1}}class pg{constructor(t,e,n,a,r,i,o){this.changeDetection=n,this.element=a,this.ngControl=r,this.renderer=i,this.typeaheadMinLength=void 0,this.isAnimated=!1,this.typeaheadAsync=void 0,this.typeaheadLatinize=!0,this.typeaheadSingleWords=!0,this.typeaheadWordDelimiters=" ",this.typeaheadPhraseDelimiters="'\"",this.typeaheadScrollable=!1,this.typeaheadOptionsInScrollableView=5,this.typeaheadSelectFirstItem=!0,this.typeaheadIsFirstItemActive=!0,this.typeaheadLoading=new s.EventEmitter,this.typeaheadNoResults=new s.EventEmitter,this.typeaheadOnSelect=new s.EventEmitter,this.typeaheadOnBlur=new s.EventEmitter,this.dropup=!1,this.isActiveItemChanged=!1,this.isTypeaheadOptionsListActive=!1,this.keyUpEventEmitter=new s.EventEmitter,this.placement="bottom-left",this._subscriptions=[],this._typeahead=t.createLoader(a,o,i).provide({provide:gg,useValue:e}),Object.assign(this,{typeaheadHideResultsOnBlur:e.hideResultsOnBlur,typeaheadSelectFirstItem:e.selectFirstItem,typeaheadIsFirstItemActive:e.isFirstItemActive,typeaheadMinLength:e.minLength,adaptivePosition:e.adaptivePosition,isAnimated:e.isAnimated})}ngOnInit(){this.typeaheadOptionsLimit=this.typeaheadOptionsLimit||20,this.typeaheadMinLength=void 0===this.typeaheadMinLength?1:this.typeaheadMinLength,this.typeaheadWaitMs=this.typeaheadWaitMs||0,void 0!==this.typeaheadAsync||eg(this.typeahead)||(this.typeaheadAsync=!1),eg(this.typeahead)&&(this.typeaheadAsync=!0),this.typeaheadAsync?this.asyncActions():this.syncActions()}onInput(t){const e=void 0!==t.target.value?t.target.value:void 0!==t.target.textContent?t.target.textContent:t.target.innerText;null!=e&&e.trim().length>=this.typeaheadMinLength?(this.typeaheadLoading.emit(!0),this.keyUpEventEmitter.emit(t.target.value)):(this.typeaheadLoading.emit(!1),this.typeaheadNoResults.emit(!1),this.hide())}onChange(t){if(this._container){if(27===t.keyCode||"Escape"===t.key)return void this.hide();if(38===t.keyCode||"ArrowUp"===t.key)return this.isActiveItemChanged=!0,void this._container.prevActiveMatch();if(40===t.keyCode||"ArrowDown"===t.key)return this.isActiveItemChanged=!0,void this._container.nextActiveMatch();if(13===t.keyCode||"Enter"===t.key)return void this._container.selectActiveMatch()}}onFocus(){0===this.typeaheadMinLength&&(this.typeaheadLoading.emit(!0),this.keyUpEventEmitter.emit(this.element.nativeElement.value||""))}onBlur(){this._container&&!this._container.isFocused&&this.typeaheadOnBlur.emit(this._container.active)}onKeydown(t){if(this._container&&(9===t.keyCode||"Tab"===t.key||13===t.keyCode||"Enter"===t.key)){if(t.preventDefault(),this.typeaheadSelectFirstItem)return void this._container.selectActiveMatch();this.typeaheadSelectFirstItem||(this._container.selectActiveMatch(this.isActiveItemChanged),this.isActiveItemChanged=!1,this.hide())}}changeModel(t){const e=t.value;this.ngControl.viewToModelUpdate(e),this.ngControl.control.setValue(e),this.changeDetection.markForCheck(),this.hide()}get matches(){return this._matches}show(){this._typeahead.attach(hg).to(this.container).position({attachment:`${this.dropup?"top":"bottom"} start`}).show({typeaheadRef:this,placement:this.placement,animation:!1,dropup:this.dropup}),this._outsideClickListener=this.renderer.listen("document","click",t=>{0===this.typeaheadMinLength&&this.element.nativeElement.contains(t.target)||this.typeaheadHideResultsOnBlur&&!this.element.nativeElement.contains(t.target)&&this.onOutsideClick()}),this._container=this._typeahead.instance,this._container.parent=this;const t=(this.typeaheadLatinize?dg(this.ngControl.control.value):this.ngControl.control.value).toString().toLowerCase();this._container.query=this.typeaheadSingleWords?cg(t,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):t,this._container.matches=this._matches,this.element.nativeElement.focus()}hide(){this._typeahead.isShown&&(this._typeahead.hide(),this._outsideClickListener(),this._container=null)}onOutsideClick(){this._container&&!this._container.isFocused&&this.hide()}ngOnDestroy(){for(const t of this._subscriptions)t.unsubscribe();this._typeahead.dispose()}asyncActions(){this._subscriptions.push(this.keyUpEventEmitter.pipe(ag(this.typeaheadWaitMs),Object(og.a)(t=>this.typeahead.pipe(Object(Ee.a)(e=>{const n=this.normalizeQuery(t);return e.filter(t=>t&&this.testMatch(this.normalizeOption(t),n))})))).subscribe(t=>{this.finalizeAsyncCall(t)}))}syncActions(){this._subscriptions.push(this.keyUpEventEmitter.pipe(ag(this.typeaheadWaitMs),Object(Dn.a)(t=>{const e=this.normalizeQuery(t);return Object(En.a)(this.typeahead).pipe(Object(Ln.a)(t=>t&&this.testMatch(this.normalizeOption(t),e)),Vn())})).subscribe(t=>{this.finalizeAsyncCall(t)}))}normalizeOption(t){const e=fg(t,this.typeaheadOptionField);return(this.typeaheadLatinize?dg(e):e).toLowerCase()}normalizeQuery(t){let e=(this.typeaheadLatinize?dg(t):t).toString().toLowerCase();return e=this.typeaheadSingleWords?cg(e,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):e,e}testMatch(t,e){let n;if("object"==typeof e){n=e.length;for(let a=0;a<n;a+=1)if(e[a].length>0&&t.indexOf(e[a])<0)return!1;return!0}return t.indexOf(e)>=0}finalizeAsyncCall(t){if(this.prepareMatches(t||[]),this.typeaheadLoading.emit(!1),this.typeaheadNoResults.emit(!this.hasMatches()),this.hasMatches())if(this._container){const t=((this.typeaheadLatinize?dg(this.ngControl.control.value):this.ngControl.control.value)||"").toString().toLowerCase();this._container.query=this.typeaheadSingleWords?cg(t,this.typeaheadWordDelimiters,this.typeaheadPhraseDelimiters):t,this._container.matches=this._matches}else this.show();else this.hide()}prepareMatches(t){const e=t.slice(0,this.typeaheadOptionsLimit);if(this.typeaheadGroupField){let t=[];e.map(t=>fg(t,this.typeaheadGroupField)).filter((t,e,n)=>n.indexOf(t)===e).forEach(n=>{t.push(new lg(n,n,!0)),t=t.concat(e.filter(t=>fg(t,this.typeaheadGroupField)===n).map(t=>new lg(t,fg(t,this.typeaheadOptionField))))}),this._matches=t}else this._matches=e.map(t=>new lg(t,fg(t,this.typeaheadOptionField)))}hasMatches(){return this._matches.length>0}}class bg{static forRoot(){return{ngModule:bg,providers:[W.a,la.a,gg]}}}var mg=n("WiuZ"),yg=n("wnGv"),vg=n("TYzs");class xg{constructor(t,e){this.nfsService=t,this.i18n=e,this.nfsSquash=this.nfsService.nfsSquash,this.nfsAccessType=this.nfsService.nfsAccessType,this.icons=ht.a}getNoAccessTypeDescr(){return this.form.getValue("access_type")?`${this.form.getValue("access_type")} ${this.i18n("(inherited from global config)")}`:this.i18n("-- Select the access type --")}getAccessTypeHelp(t){const e=this.nfsAccessType.find(e=>this.getValue(t,"access_type")===e.value);return J.isObjectLike(e)?e.help:""}getNoSquashDescr(){return this.form.getValue("squash")?`${this.form.getValue("squash")} (${this.i18n("inherited from global config")})`:this.i18n("-- Select what kind of user id squashing is performed --")}addClient(){const t=this.form.get("clients"),e="(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}).([0-9]{1,3})([/](\\d|[1-2]\\d|3[0-2]))?)",n=new js.a({addresses:new $.i("",{validators:[$.B.required,$.B.pattern(`${e}([ ,]{1,2}${e})*`)]}),access_type:new $.i(""),squash:new $.i("")});return t.push(n),n}removeClient(t){this.form.get("clients").removeAt(t)}showError(t,e,n,a){return this.form.controls.clients.controls[t].showError(e,n,a)}getValue(t,e){return this.form.get("clients").at(t).getValue(e)}resolveModel(t){J.forEach(t,t=>{this.addClient().patchValue(t)})}trackByFn(t){return t}}var _g=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Tg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"span",[["class","no-border text-muted"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Any client can access"]))],null,null)}function Og(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function wg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Must contain one or more comma-separated values"])),(t()(),s["ɵeld"](3,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["For example:"])),(t()(),s["ɵted"](-1,null,[" 192.168.0.10, 192.168.1.0/8 "]))],null,null)}function Sg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function Ig(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.getAccessTypeHelp(e.parent.context.index))}))}function Ng(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function Cg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,71,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,70,"div",[["class","card"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](2,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](4,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](5,0,null,null,4,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](6,null,[" "," "])),s["ɵppd"](7,1),(t()(),s["ɵeld"](8,0,null,null,1,"span",[["class","float-right clickable"],["tooltip","Remove"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.removeClient(t.context.index)&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](10,0,null,null,61,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](12,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](15,0,null,0,1,"label",[["class","cd-col-form-label"],["for","addresses"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Addresses"])),(t()(),s["ɵeld"](17,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,6,"input",[["class","form-control"],["formControlName","addresses"],["id","addresses"],["name","addresses"],["placeholder","192.168.0.10, 192.168.1.0/8"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,19)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,19)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,19)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](19,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](21,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](25,0,null,null,4,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Og)),s["ɵdid"](27,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wg)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](30,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](31,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](34,0,null,0,1,"label",[["class","cd-col-form-label"],["for","access_type"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Access Type"])),(t()(),s["ɵeld"](36,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](37,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","access_type"],["id","access_type"],["name","access_type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,38).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,38).onTouched()&&a),a}),null,null)),s["ɵdid"](38,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](40,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](42,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](43,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](44,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](45,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](46,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](47,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,Sg)),s["ɵdid"](49,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ig)),s["ɵdid"](51,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](52,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](53,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,7,{FormControlNames:1}),s["ɵqud"](603979776,8,{messagesBlock:0}),(t()(),s["ɵeld"](56,0,null,0,1,"label",[["class","cd-col-form-label"],["for","squash"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Squash"])),(t()(),s["ɵeld"](58,0,null,0,13,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,12,"select",[["class","form-control custom-select"],["formControlName","squash"],["id","squash"],["name","squash"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,60).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,60).onTouched()&&a),a}),null,null)),s["ɵdid"](60,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](62,671744,[[7,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](64,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](65,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](66,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](67,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](68,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](69,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,Ng)),s["ɵdid"](71,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,2,0,e.context.index),t(e,12,0),t(e,21,0,"addresses"),t(e,24,0,"addresses"),t(e,27,0,n.showError(e.context.index,"addresses",s["ɵnov"](e.parent,8),"required")),t(e,29,0,n.showError(e.context.index,"addresses",s["ɵnov"](e.parent,8),"pattern")),t(e,31,0),t(e,40,0,"access_type"),t(e,43,0,"access_type"),t(e,45,0,""),t(e,46,0,""),t(e,49,0,n.nfsAccessType),t(e,51,0,n.getValue(e.context.index,"access_type")),t(e,53,0),t(e,62,0,"squash"),t(e,65,0,"squash"),t(e,67,0,""),t(e,68,0,""),t(e,71,0,n.nfsSquash)}),(function(t,e){var n=e.component;t(e,1,0,s["ɵnov"](e,4).ngClassUntouched,s["ɵnov"](e,4).ngClassTouched,s["ɵnov"](e,4).ngClassPristine,s["ɵnov"](e,4).ngClassDirty,s["ɵnov"](e,4).ngClassValid,s["ɵnov"](e,4).ngClassInvalid,s["ɵnov"](e,4).ngClassPending);var a=s["ɵunv"](e,6,0,t(e,7,0,s["ɵnov"](e.parent,0),e.context.index+1));t(e,6,0,a),t(e,11,0,s["ɵnov"](e,12).hasErrors,s["ɵnov"](e,12).hasSuccess),t(e,18,0,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,24).validClass,s["ɵnov"](e,24).invalidClass),t(e,30,0,s["ɵnov"](e,31).hasErrors,s["ɵnov"](e,31).hasSuccess),t(e,37,0,s["ɵnov"](e,42).ngClassUntouched,s["ɵnov"](e,42).ngClassTouched,s["ɵnov"](e,42).ngClassPristine,s["ɵnov"](e,42).ngClassDirty,s["ɵnov"](e,42).ngClassValid,s["ɵnov"](e,42).ngClassInvalid,s["ɵnov"](e,42).ngClassPending,s["ɵnov"](e,43).validClass,s["ɵnov"](e,43).invalidClass),t(e,47,0,n.getNoAccessTypeDescr()),t(e,52,0,s["ɵnov"](e,53).hasErrors,s["ɵnov"](e,53).hasSuccess),t(e,59,0,s["ɵnov"](e,64).ngClassUntouched,s["ɵnov"](e,64).ngClassTouched,s["ɵnov"](e,64).ngClassPristine,s["ɵnov"](e,64).ngClassDirty,s["ɵnov"](e,64).ngClassValid,s["ɵnov"](e,64).ngClassInvalid,s["ɵnov"](e,64).ngClassPending,s["ɵnov"](e,65).validClass,s["ɵnov"](e,65).invalidClass),t(e,69,0,n.getNoSquashDescr())}))}function Rg(t){return s["ɵvid"](0,[s["ɵpid"](0,vg.a,[]),(t()(),s["ɵeld"](1,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](2,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](5,0,null,0,1,"label",[["class","cd-col-form-label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients"])),(t()(),s["ɵeld"](7,0,null,0,22,"div",[["class","cd-col-form-input"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](8,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tg)),s["ɵdid"](13,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](14,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](15,212992,null,0,$.g,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.g]),s["ɵdid"](17,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Cg)),s["ɵdid"](19,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(t()(),s["ɵeld"](20,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](21,0,null,null,8,"div",[["class","col-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](22,0,null,null,7,"div",[["class","float-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,6,"button",[["class","btn btn-light "]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.addClient()&&a),a}),null,null)),(t()(),s["ɵeld"](24,0,null,null,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](26,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](27,1),(t()(),s["ɵeld"](28,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add clients"]))],(function(t,e){var n=e.component;t(e,2,0),t(e,8,0,n.form),t(e,11,0,n.form),t(e,13,0,0===n.form.get("clients").value.length),t(e,15,0,"clients"),t(e,19,0,n.form.get("clients").value,n.trackByFn);var a=t(e,27,0,n.icons.add);t(e,26,0,a)}),(function(t,e){t(e,1,0,s["ɵnov"](e,2).hasErrors,s["ɵnov"](e,2).hasSuccess),t(e,7,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending)}))}var Ag=n("P8lu"),kg=n("a96k");class Eg{constructor(t,e,n,a,r,i,s,o,u,l){this.authStorageService=t,this.nfsService=e,this.route=n,this.router=a,this.rgwUserService=r,this.formBuilder=i,this.taskWrapper=s,this.cdRef=o,this.i18n=u,this.actionLabels=l,this.isEdit=!1,this.cluster_id=null,this.export_id=null,this.isNewDirectory=!1,this.isNewBucket=!1,this.isDefaultCluster=!1,this.allClusters=null,this.allDaemons={},this.icons=ht.a,this.allFsals=[],this.allRgwUsers=[],this.allCephxClients=null,this.allFsNames=null,this.defaultAccessType={RGW:"RO"},this.nfsAccessType=this.nfsService.nfsAccessType,this.nfsSquash=this.nfsService.nfsSquash,this.daemonsSelections=[],this.daemonsMessages=new fs.a({noOptions:this.i18n("There are no daemons available.")},this.i18n),this.pathDataSource=kn.a.create(t=>{t.next(this.nfsForm.getValue("path"))}).pipe(Object(Dn.a)(t=>this.getPathTypeahead(t)),Object(Ee.a)(t=>t.paths)),this.bucketDataSource=kn.a.create(t=>{t.next(this.nfsForm.getValue("path"))}).pipe(Object(Dn.a)(t=>this.getBucketTypeahead(t))),this.permission=this.authStorageService.getPermissions().pool,this.resource=this.i18n("NFS export"),this.createForm()}ngOnInit(){const t=[this.nfsService.daemon(),this.nfsService.fsals(),this.nfsService.clients(),this.nfsService.filesystems()];this.router.url.startsWith("/nfs/edit")&&(this.isEdit=!0),this.isEdit?(this.action=this.actionLabels.EDIT,this.route.params.subscribe(e=>{this.cluster_id=decodeURIComponent(e.cluster_id),this.export_id=decodeURIComponent(e.export_id),t.push(this.nfsService.get(this.cluster_id,this.export_id)),this.getData(t)})):(this.action=this.actionLabels.CREATE,this.getData(t))}getData(t){Object(Mo.a)(t).subscribe(t=>{this.resolveDaemons(t[0]),this.resolvefsals(t[1]),this.resolveClients(t[2]),this.resolveFilesystems(t[3]),t[4]&&this.resolveModel(t[4])})}createForm(){this.nfsForm=new js.a({cluster_id:new $.i("",{validators:[$.B.required]}),daemons:new $.i([]),fsal:new js.a({name:new $.i("",{validators:[$.B.required]}),user_id:new $.i("",{validators:[Fs.a.requiredIf({name:"CEPH"})]}),fs_name:new $.i("",{validators:[Fs.a.requiredIf({name:"CEPH"})]}),rgw_user_id:new $.i("",{validators:[Fs.a.requiredIf({name:"RGW"})]})}),path:new $.i(""),protocolNfsv3:new $.i(!0,{validators:[Fs.a.requiredIf({protocolNfsv4:!1},t=>!t)]}),protocolNfsv4:new $.i(!0,{validators:[Fs.a.requiredIf({protocolNfsv3:!1},t=>!t)]}),tag:new $.i(""),pseudo:new $.i("",{validators:[Fs.a.requiredIf({protocolNfsv4:!0}),$.B.pattern("^/[^><|&()]*$")]}),access_type:new $.i("RW",{validators:[$.B.required]}),squash:new $.i("",{validators:[$.B.required]}),transportUDP:new $.i(!0,{validators:[Fs.a.requiredIf({transportTCP:!1},t=>!t)]}),transportTCP:new $.i(!0,{validators:[Fs.a.requiredIf({transportUDP:!1},t=>!t)]}),clients:this.formBuilder.array([]),security_label:new $.i(!1),sec_label_xattr:new $.i("security.selinux",Fs.a.requiredIf({security_label:!0,"fsal.name":"CEPH"}))})}resolveModel(t){"CEPH"===t.fsal.name&&(t.sec_label_xattr=t.fsal.sec_label_xattr),this.daemonsSelections=J.map(this.allDaemons[t.cluster_id],e=>new kg.a(-1!==t.daemons.indexOf(e),e,"")),this.daemonsSelections=[...this.daemonsSelections],t.protocolNfsv3=-1!==t.protocols.indexOf(3),t.protocolNfsv4=-1!==t.protocols.indexOf(4),delete t.protocols,t.transportTCP=-1!==t.transports.indexOf("TCP"),t.transportUDP=-1!==t.transports.indexOf("UDP"),delete t.transports,t.clients.forEach(t=>{let e="";t.addresses.forEach(t=>{e+=t+", "}),e.length>=2&&(e=e.substring(0,e.length-2)),t.addresses=e}),this.nfsForm.patchValue(t),this.setPathValidation(),this.nfsClients.resolveModel(t.clients)}resolveDaemons(t){t=J.sortBy(t,["daemon_id"]),this.allClusters=J(t).map(t=>t.cluster_id).sortedUniq().value(),J.forEach(this.allClusters,t=>{this.allDaemons[t]=[]}),J.forEach(t,t=>{this.allDaemons[t.cluster_id].push(t.daemon_id)});const e=J.isArray(this.allClusters)&&1===this.allClusters.length;this.isDefaultCluster=e&&"_default_"===this.allClusters[0],e&&(this.nfsForm.patchValue({cluster_id:this.allClusters[0]}),this.onClusterChange())}resolvefsals(t){t.forEach(t=>{const e=this.nfsService.nfsFsal.find(e=>t===e.value);J.isObjectLike(e)&&(this.allFsals.push(e),"RGW"===e.value&&this.rgwUserService.list().subscribe(t=>{t.forEach(t=>{0===t.suspended&&t.keys.length>0&&this.allRgwUsers.push(t.user_id)})}))}),1===this.allFsals.length&&J.isUndefined(this.nfsForm.getValue("fsal"))&&this.nfsForm.patchValue({fsal:this.allFsals[0]})}resolveClients(t){this.allCephxClients=t}resolveFilesystems(t){this.allFsNames=t,1===t.length&&this.nfsForm.patchValue({fsal:{fs_name:t[0].name}})}fsalChangeHandler(){this.nfsForm.patchValue({tag:this._generateTag(),pseudo:this._generatePseudo(),access_type:this._updateAccessType()}),this.setPathValidation(),this.cdRef.detectChanges()}accessTypeChangeHandler(){const t=this.nfsForm.getValue("name"),e=this.nfsForm.getValue("access_type");this.defaultAccessType[t]=e}setPathValidation(){"RGW"===this.nfsForm.getValue("name")?this.nfsForm.get("path").setValidators([$.B.required,$.B.pattern("^(/|[^/><|&()#?]+)$")]):this.nfsForm.get("path").setValidators([$.B.required,$.B.pattern("^/[^><|&()?]*$")])}rgwUserIdChangeHandler(){this.nfsForm.patchValue({pseudo:this._generatePseudo()})}getAccessTypeHelp(t){const e=this.nfsAccessType.find(e=>{if(t===e.value)return e});return J.isObjectLike(e)?e.help:""}getId(){return J.isString(this.nfsForm.getValue("cluster_id"))&&J.isString(this.nfsForm.getValue("path"))?this.nfsForm.getValue("cluster_id")+":"+this.nfsForm.getValue("path"):""}getPathTypeahead(t){return J.isString(t)&&"/"!==t?this.nfsService.lsDir(t):Object(An.a)([])}pathChangeHandler(){this.nfsForm.patchValue({pseudo:this._generatePseudo()});const t=this.nfsForm.getValue("path");this.getPathTypeahead(t).subscribe(e=>{this.isNewDirectory="/"!==t&&-1===e.paths.indexOf(t)})}bucketChangeHandler(){this.nfsForm.patchValue({tag:this._generateTag(),pseudo:this._generatePseudo()});const t=this.nfsForm.getValue("path");this.getBucketTypeahead(t).subscribe(e=>{this.isNewBucket=""!==t&&-1===e.indexOf(t)})}getBucketTypeahead(t){const e=this.nfsForm.getValue("rgw_user_id");return J.isString(e)&&J.isString(t)&&"/"!==t&&""!==t?this.nfsService.buckets(e):Object(An.a)([])}_generateTag(){let t=this.nfsForm.getValue("tag");return this.nfsForm.get("tag").dirty||(t=void 0,"RGW"===this.nfsForm.getValue("fsal")&&(t=this.nfsForm.getValue("path"))),t}_generatePseudo(){let t=this.nfsForm.getValue("pseudo");return this.nfsForm.get("pseudo")&&!this.nfsForm.get("pseudo").dirty&&(t=void 0,"CEPH"===this.nfsForm.getValue("fsal")?(t="/cephfs",J.isString(this.nfsForm.getValue("path"))&&(t+=this.nfsForm.getValue("path"))):"RGW"===this.nfsForm.getValue("fsal")&&J.isString(this.nfsForm.getValue("rgw_user_id"))&&(t="/"+this.nfsForm.getValue("rgw_user_id"),J.isString(this.nfsForm.getValue("path"))&&(t+="/"+this.nfsForm.getValue("path")))),t}_updateAccessType(){const t=this.nfsForm.getValue("name");let e=this.defaultAccessType[t];return e||(e="RW"),e}onClusterChange(){const t=this.nfsForm.getValue("cluster_id");this.daemonsSelections=J.map(this.allDaemons[t],t=>new kg.a(!1,t,"")),this.daemonsSelections=[...this.daemonsSelections],this.nfsForm.patchValue({daemons:[]})}removeDaemon(t,e){this.daemonsSelections.forEach(t=>{t.name===e&&(t.selected=!1)});const n=this.nfsForm.get("daemons");return n.value.splice(t,1),n.setValue(n.value),!1}onDaemonSelection(){this.nfsForm.get("daemons").setValue(this.nfsForm.getValue("daemons"))}submitAction(){let t;const e=this._buildRequest();t=this.taskWrapper.wrapTaskAroundCall(this.isEdit?{task:new hs.a("nfs/edit",{cluster_id:this.cluster_id,export_id:this.export_id}),call:this.nfsService.update(this.cluster_id,this.export_id,e)}:{task:new hs.a("nfs/create",{path:e.path,fsal:e.fsal,cluster_id:e.cluster_id}),call:this.nfsService.create(e)}),t.subscribe(void 0,()=>this.nfsForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/nfs"]))}_buildRequest(){const t=J.cloneDeep(this.nfsForm.value);return(J.isUndefined(t.tag)||""===t.tag)&&(t.tag=null),this.isEdit&&(t.export_id=this.export_id),"CEPH"===t.fsal.name?delete t.fsal.rgw_user_id:(delete t.fsal.fs_name,delete t.fsal.user_id),t.protocols=[],t.protocolNfsv3?t.protocols.push(3):t.tag=null,delete t.protocolNfsv3,t.protocolNfsv4?t.protocols.push(4):t.pseudo=null,delete t.protocolNfsv4,t.transports=[],t.transportTCP&&t.transports.push("TCP"),delete t.transportTCP,t.transportUDP&&t.transports.push("UDP"),delete t.transportUDP,t.clients.forEach(e=>{e.addresses=J.isString(e.addresses)?J(e.addresses).split(/[ ,]+/).uniq().filter(t=>""!==t).value():[],e.squash||(e.squash=t.squash),e.access_type||(e.access_type=t.access_type)}),t.fsal.sec_label_xattr=!1===t.security_label||"RGW"===t.fsal.name?null:t.sec_label_xattr,delete t.sec_label_xattr,t}}var Lg=s["ɵcrt"]({encapsulation:0,styles:[[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]],data:{}});function Dg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Pg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No cluster available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Mg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the cluster --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function qg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function jg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Fg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,2,{FormControlNames:1}),s["ɵqud"](603979776,3,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","cluster_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster"])),(t()(),s["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","cluster_id"],["id","cluster_id"],["name","cluster_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.onClusterChange()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[2,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Dg)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Pg)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Mg)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qg)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,jg)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"cluster_id"),t(e,13,0,"cluster_id"),t(e,15,0,null===n.allClusters),t(e,17,0,null!==n.allClusters&&0===n.allClusters.length),t(e,19,0,null!==n.allClusters&&n.allClusters.length>0),t(e,21,0,n.allClusters),t(e,23,0,n.nfsForm.showError("cluster_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function Gg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,8,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,7,"div",[["class","input-group cd-mb"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,0,"input",[["class","cd-form-control"],["disabled",""],["type","text"]],[[8,"value",0]],null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,5,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,4,"button",[["class","btn btn-light"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.removeDaemon(t.context.index,t.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵeld"](5,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](8,1)],(function(t,e){var n=t(e,8,0,e.component.icons.destroy);t(e,7,0,n)}),(function(t,e){t(e,2,0,e.context.$implicit)}))}function Vg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function zg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No data pools available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Bg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the storage backend --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Yg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.descr)}))}function Hg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Ug(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Wg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No users available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Kg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the object gateway user --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function $g(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function Zg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Jg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,8,{FormControlNames:1}),s["ɵqud"](603979776,9,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","rgw_user_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Object Gateway User"])),(t()(),s["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","rgw_user_id"],["id","rgw_user_id"],["name","rgw_user_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.rgwUserIdChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[8,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ug)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Wg)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Kg)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$g)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zg)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"rgw_user_id"),t(e,13,0,"rgw_user_id"),t(e,15,0,null===n.allRgwUsers),t(e,17,0,null!==n.allRgwUsers&&0===n.allRgwUsers.length),t(e,19,0,null!==n.allRgwUsers&&n.allRgwUsers.length>0),t(e,21,0,n.allRgwUsers),t(e,23,0,n.nfsForm.showError("rgw_user_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function Qg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Xg(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No clients available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function tp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the cephx client --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function ep(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function np(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function ap(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,10,{FormControlNames:1}),s["ɵqud"](603979776,11,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","user_id"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS User ID"])),(t()(),s["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","user_id"],["id","user_id"],["name","user_id"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[10,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Qg)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xg)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,tp)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ep)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,np)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"user_id"),t(e,13,0,"user_id"),t(e,15,0,null===n.allCephxClients),t(e,17,0,null!==n.allCephxClients&&0===n.allCephxClients.length),t(e,19,0,null!==n.allCephxClients&&n.allCephxClients.length>0),t(e,21,0,n.allCephxClients),t(e,23,0,n.nfsForm.showError("user_id",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function rp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function ip(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No CephFS filesystem available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function sp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the CephFS filesystem --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function op(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.name),t(e,2,0,e.context.$implicit.name)}),(function(t,e){t(e,3,0,e.context.$implicit.name)}))}function up(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function lp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,12,{FormControlNames:1}),s["ɵqud"](603979776,13,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","fs_name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS Name"])),(t()(),s["ɵeld"](6,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","fs_name"],["id","fs_name"],["name","fs_name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,8).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"change"===e&&(a=!1!==r.rgwUserIdChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](10,671744,[[12,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,rp)),s["ɵdid"](15,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ip)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,sp)),s["ɵdid"](19,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,op)),s["ɵdid"](21,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,up)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"fs_name"),t(e,13,0,"fs_name"),t(e,15,0,null===n.allFsNames),t(e,17,0,null!==n.allFsNames&&0===n.allFsNames.length),t(e,19,0,null!==n.allFsNames&&n.allFsNames.length>0),t(e,21,0,n.allFsNames),t(e,23,0,n.nfsForm.showError("fs_name",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,13).validClass,s["ɵnov"](e,13).invalidClass)}))}function dp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"input",[["class","form-control"],["formControlName","sec_label_xattr"],["id","sec_label_xattr"],["name","sec_label_xattr"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,1)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,1)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,1)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](1,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](3,671744,[[14,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](5,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](6,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,3,0,"sec_label_xattr"),t(e,6,0,"sec_label_xattr")}),(function(t,e){t(e,0,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending,s["ɵnov"](e,6).validClass,s["ɵnov"](e,6).invalidClass)}))}function cp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function fp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,24,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,14,{FormControlNames:1}),s["ɵqud"](603979776,15,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,4,"label",[["class","cd-col-form-label"],["for","security_label"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](6,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),s["ɵpod"](7,{required:0}),(t()(),s["ɵted"](-1,null,["Security Label"])),(t()(),s["ɵeld"](9,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","security_label"],["id","security_label"],["name","security_label"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,12).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,12).onTouched()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](14,671744,[[14,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](16,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](17,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](18,0,null,null,1,"label",[["class","custom-control-label"],["for","security_label"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Enable security label"])),(t()(),s["ɵeld"](20,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,dp)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cp)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0);var a=t(e,7,0,n.nfsForm.getValue("security_label"));t(e,6,0,"cd-col-form-label",a),t(e,14,0,"security_label"),t(e,17,0,"security_label"),t(e,22,0,n.nfsForm.getValue("security_label")),t(e,24,0,n.nfsForm.showError("sec_label_xattr",s["ɵnov"](e.parent,6),"required"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,11,0,s["ɵnov"](e,16).ngClassUntouched,s["ɵnov"](e,16).ngClassTouched,s["ɵnov"](e,16).ngClassPristine,s["ɵnov"](e,16).ngClassDirty,s["ɵnov"](e,16).ngClassValid,s["ɵnov"](e,16).ngClassInvalid,s["ɵnov"](e,16).ngClassPending,s["ɵnov"](e,17).validClass,s["ɵnov"](e,17).invalidClass)}))}function hp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function gp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path need to start with a '/' and can be followed by a word"]))],null,null)}function pp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New directory will be created"]))],null,null)}function bp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,16,{FormControlNames:1}),s["ɵqud"](603979776,17,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","path"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CephFS Path"])),(t()(),s["ɵeld"](6,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,16777216,null,null,7,"input",[["class","form-control"],["formControlName","path"],["id","path"],["name","path"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"typeaheadOnSelect"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,13).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,13).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,13).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,13).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,13).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,13).onKeydown(n)&&a),"typeaheadOnSelect"===e&&(a=!1!==r.pathChangeHandler()&&a),"blur"===e&&(a=!1!==r.pathChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[16,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,212992,null,0,pg,[W.a,gg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"]},{typeaheadOnSelect:"typeaheadOnSelect"}),s["ɵdid"](14,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,hp)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gp)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,pp)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"path"),t(e,13,0,n.pathDataSource),t(e,14,0,"path"),t(e,16,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"required")),t(e,18,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"pattern")),t(e,20,0,n.isNewDirectory&&!n.nfsForm.showError("path",s["ɵnov"](e.parent,6)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function mp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function yp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path can only be a single '/' or a word"]))],null,null)}function vp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["New bucket will be created"]))],null,null)}function xp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,20,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,18,{FormControlNames:1}),s["ɵqud"](603979776,19,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","path"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Path"])),(t()(),s["ɵeld"](6,0,null,0,14,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](7,16777216,null,null,7,"input",[["class","form-control"],["formControlName","path"],["id","path"],["name","path"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"typeaheadOnSelect"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,8)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,8).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,8)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,8)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,13).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,13).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,13).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,13).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,13).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,13).onKeydown(n)&&a),"typeaheadOnSelect"===e&&(a=!1!==r.bucketChangeHandler()&&a),"blur"===e&&(a=!1!==r.bucketChangeHandler()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](10,671744,[[18,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](12,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](13,212992,null,0,pg,[W.a,gg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"]},{typeaheadOnSelect:"typeaheadOnSelect"}),s["ɵdid"](14,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,mp)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,yp)),s["ɵdid"](18,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,vp)),s["ɵdid"](20,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,"path"),t(e,13,0,n.bucketDataSource),t(e,14,0,"path"),t(e,16,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"required")),t(e,18,0,n.nfsForm.showError("path",s["ɵnov"](e.parent,6),"pattern")),t(e,20,0,n.isNewBucket&&!n.nfsForm.showError("path",s["ɵnov"](e.parent,6)))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,7,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending,s["ɵnov"](e,14).validClass,s["ɵnov"](e,14).invalidClass)}))}function _p(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Tp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,25,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,22,{FormControlNames:1}),s["ɵqud"](603979776,23,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,13,"label",[["class","cd-col-form-label"],["for","tag"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS Tag"])),(t()(),s["ɵeld"](7,0,null,null,10,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](8,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Alternative access for "])),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS v3"])),(t()(),s["ɵted"](-1,null,[" mounts (it must not have a leading /)."])),(t()(),s["ɵeld"](14,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz)."])),(t()(),s["ɵeld"](16,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["By using different Tag options, the same Path may be exported multiple times."])),(t()(),s["ɵeld"](18,0,null,0,7,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,6,"input",[["class","form-control"],["formControlName","tag"],["id","tag"],["name","tag"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,20)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,20).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,20)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,20)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](20,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](22,671744,[[22,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](24,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](25,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null)],(function(t,e){t(e,1,0),t(e,22,0,"tag"),t(e,25,0,"tag")}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,19,0,s["ɵnov"](e,24).ngClassUntouched,s["ɵnov"](e,24).ngClassTouched,s["ɵnov"](e,24).ngClassPristine,s["ɵnov"](e,24).ngClassDirty,s["ɵnov"](e,24).ngClassValid,s["ɵnov"](e,24).ngClassInvalid,s["ɵnov"](e,24).ngClassPending,s["ɵnov"](e,25).validClass,s["ɵnov"](e,25).invalidClass)}))}function Op(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function wp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo needs to start with a '/' and can't contain any of the following: >, <, |, &, ( or )."]))],null,null)}function Sp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,30,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,24,{FormControlNames:1}),s["ɵqud"](603979776,25,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,14,"label",[["class","cd-col-form-label"],["for","pseudo"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"span",[["class","required"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo"])),(t()(),s["ɵeld"](7,0,null,null,11,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](8,49152,null,0,lu.a,[],null,null),(t()(),s["ɵeld"](9,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The position that this "])),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS v4"])),(t()(),s["ɵted"](-1,null,[" export occupies in the "])),(t()(),s["ɵeld"](14,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Pseudo FS"])),(t()(),s["ɵted"](-1,null,[" (it must be unique)."])),(t()(),s["ɵeld"](17,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["By using different Pseudo options, the same Path may be exported multiple times."])),(t()(),s["ɵeld"](19,0,null,0,11,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](20,0,null,null,6,"input",[["class","form-control"],["formControlName","pseudo"],["id","pseudo"],["name","pseudo"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,21)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,21).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,21)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,21)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](21,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](23,671744,[[24,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](25,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](26,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Op)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wp)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,23,0,"pseudo"),t(e,26,0,"pseudo"),t(e,28,0,n.nfsForm.showError("pseudo",s["ɵnov"](e.parent,6),"required")),t(e,30,0,n.nfsForm.showError("pseudo",s["ɵnov"](e.parent,6),"pattern"))}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,20,0,s["ɵnov"](e,25).ngClassUntouched,s["ɵnov"](e,25).ngClassTouched,s["ɵnov"](e,25).ngClassPristine,s["ɵnov"](e,25).ngClassDirty,s["ɵnov"](e,25).ngClassValid,s["ɵnov"](e,25).ngClassInvalid,s["ɵnov"](e,25).ngClassPending,s["ɵnov"](e,26).validClass,s["ɵnov"](e,26).invalidClass)}))}function Ip(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Np(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No access type available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Cp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- Select the access type --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Rp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit.value),t(e,2,0,e.context.$implicit.value)}),(function(t,e){t(e,3,0,e.context.$implicit.value)}))}function Ap(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,1,0,n.getAccessTypeHelp(n.nfsForm.getValue("access_type")))}))}function kp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[["class","form-text text-warning"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The Object Gateway NFS backend has a number of limitations which will seriously affect applications writing to the share. Please consult the "])),(t()(),s["ɵeld"](2,0,null,null,1,"cd-doc",[["section","rgw-nfs"]],null,null,null,Ur.b,Ur.a)),s["ɵdid"](3,114688,null,0,Wr.a,[xt.a,me.a],{section:[0,"section"]},null),(t()(),s["ɵted"](-1,null,[" for details before enabling write access."]))],(function(t,e){t(e,3,0,"rgw-nfs")}),null)}function Ep(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Lp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["Loading..."]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Dp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["-- No squash available --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Pp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[["value",""]],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](-1,null,["--Select what kind of user id squashing is performed --"]))],(function(t,e){t(e,1,0,""),t(e,2,0,"")}),null)}function Mp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,["",""]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function qp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function jp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Fp(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),s["ɵqud"](402653184,1,{nfsClients:0}),(t()(),s["ɵeld"](3,0,null,null,200,"div",[["class","cd-col-form"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,199,"form",[["name","nfsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,6).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,6).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit()&&a),a}),null,null)),s["ɵdid"](5,16384,null,0,$.G,[],null,null),s["ɵdid"](6,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](8,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](9,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](10,0,null,null,193,"div",[["class","card"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,3,"div",[["class","card-header"]],null,null,null,null,null)),(t()(),s["ɵted"](12,null,[""," ",""])),s["ɵppd"](13,1),s["ɵppd"](14,1),(t()(),s["ɵeld"](15,0,null,null,179,"div",[["class","card-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Fg)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,19,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](19,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,4,{FormControlNames:1}),s["ɵqud"](603979776,5,{messagesBlock:0}),(t()(),s["ɵeld"](22,0,null,0,2,"label",[["class","cd-col-form-label"],["for","daemons"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Daemons"])),(t()(),s["ɵeld"](25,0,null,0,12,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Gg)),s["ɵdid"](27,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](28,0,null,null,9,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](29,0,null,null,8,"div",[["class","col-md-12"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,7,"cd-select",[["elemClass","btn btn-light float-right"]],null,[[null,"selection"]],(function(t,e,n){var a=!0;return"selection"===e&&(a=!1!==t.component.onDaemonSelection()&&a),a}),mg.b,mg.a)),s["ɵdid"](31,638976,null,0,yg.a,[me.a],{elemClass:[0,"elemClass"],data:[1,"data"],options:[2,"options"],messages:[3,"messages"]},{selection:"selection"}),(t()(),s["ɵeld"](32,0,null,0,3,"i",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](34,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](35,1),(t()(),s["ɵeld"](36,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Add daemon"])),(t()(),s["ɵeld"](38,0,null,null,33,"div",[["formGroupName","fsal"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],null,null,null,null)),s["ɵdid"](39,212992,null,0,$.m,[[3,$.d],[8,null],[8,null]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.d,null,[$.m]),s["ɵdid"](41,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](42,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](43,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,6,{FormControlNames:1}),s["ɵqud"](603979776,7,{messagesBlock:0}),(t()(),s["ɵeld"](46,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Storage Backend"])),(t()(),s["ɵeld"](48,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","name"],["id","name"],["name","name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,50).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,50).onTouched()&&a),"change"===e&&(a=!1!==r.fsalChangeHandler()&&a),a}),null,null)),s["ɵdid"](50,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](52,671744,[[6,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](54,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](55,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Vg)),s["ɵdid"](57,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,zg)),s["ɵdid"](59,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Bg)),s["ɵdid"](61,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Yg)),s["ɵdid"](63,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Hg)),s["ɵdid"](65,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jg)),s["ɵdid"](67,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ap)),s["ɵdid"](69,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,lp)),s["ɵdid"](71,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fp)),s["ɵdid"](73,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,bp)),s["ɵdid"](75,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,xp)),s["ɵdid"](77,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](78,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](79,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,20,{FormControlNames:1}),s["ɵqud"](603979776,21,{messagesBlock:0}),(t()(),s["ɵeld"](82,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","protocols"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFS Protocol"])),(t()(),s["ɵeld"](84,0,null,0,22,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](85,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](86,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","protocolNfsv3"],["id","protocolNfsv3"],["name","protocolNfsv3"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,87).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,87).onTouched()&&a),a}),null,null)),s["ɵdid"](87,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](89,671744,[[20,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](91,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](92,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](93,0,null,null,1,"label",[["class","custom-control-label"],["for","protocolNfsv3"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFSv3"])),(t()(),s["ɵeld"](95,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](96,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","protocolNfsv4"],["id","protocolNfsv4"],["name","protocolNfsv4"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,97).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,97).onTouched()&&a),a}),null,null)),s["ɵdid"](97,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](99,671744,[[20,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](101,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](102,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](103,0,null,null,1,"label",[["class","custom-control-label"],["for","protocolNfsv4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["NFSv4"])),(t()(),s["ɵand"](16777216,null,null,1,null,_p)),s["ɵdid"](106,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Tp)),s["ɵdid"](108,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sp)),s["ɵdid"](110,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](111,0,null,null,27,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](112,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,26,{FormControlNames:1}),s["ɵqud"](603979776,27,{messagesBlock:0}),(t()(),s["ɵeld"](115,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","access_type"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Access Type"])),(t()(),s["ɵeld"](117,0,null,0,21,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](118,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","access_type"],["id","access_type"],["name","access_type"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,119).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,119).onTouched()&&a),"change"===e&&(a=!1!==r.accessTypeChangeHandler()&&a),a}),null,null)),s["ɵdid"](119,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](121,671744,[[26,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](123,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](124,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ip)),s["ɵdid"](126,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Np)),s["ɵdid"](128,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cp)),s["ɵdid"](130,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rp)),s["ɵdid"](132,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ap)),s["ɵdid"](134,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,kp)),s["ɵdid"](136,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Ep)),s["ɵdid"](138,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](139,0,null,null,23,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](140,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,28,{FormControlNames:1}),s["ɵqud"](603979776,29,{messagesBlock:0}),(t()(),s["ɵeld"](143,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","squash"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Squash"])),(t()(),s["ɵeld"](145,0,null,0,17,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](146,0,null,null,14,"select",[["class","form-control custom-select"],["formControlName","squash"],["id","squash"],["name","squash"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,147).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,147).onTouched()&&a),a}),null,null)),s["ɵdid"](147,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](149,671744,[[28,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](151,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](152,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Lp)),s["ɵdid"](154,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Dp)),s["ɵdid"](156,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Pp)),s["ɵdid"](158,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Mp)),s["ɵdid"](160,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,qp)),s["ɵdid"](162,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](163,0,null,null,29,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](164,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,30,{FormControlNames:1}),s["ɵqud"](603979776,31,{messagesBlock:0}),(t()(),s["ɵeld"](167,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","transports"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Transport Protocol"])),(t()(),s["ɵeld"](169,0,null,0,23,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](170,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](171,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","transportUDP"],["id","transportUDP"],["name","transportUDP"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,172).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,172).onTouched()&&a),a}),null,null)),s["ɵdid"](172,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](174,671744,[[30,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](176,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](177,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](178,0,null,null,1,"label",[["class","custom-control-label"],["for","transportUDP"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["UDP"])),(t()(),s["ɵeld"](180,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](181,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","transportTCP"],["id","transportTCP"],["name","transportTCP"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,182).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,182).onTouched()&&a),a}),null,null)),s["ɵdid"](182,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](184,671744,[[30,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](186,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](187,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](188,0,null,null,1,"label",[["class","custom-control-label"],["for","transportTCP"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["TCP"])),(t()(),s["ɵand"](16777216,null,null,1,null,jp)),s["ɵdid"](191,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](192,0,null,null,0,"hr",[],null,null,null,null,null)),(t()(),s["ɵeld"](193,0,null,null,1,"cd-nfs-form-client",[],null,null,null,Rg,_g)),s["ɵdid"](194,49152,[[1,4],["nfsClients",4]],0,xg,[Hh,me.a],{form:[0,"form"]},null),(t()(),s["ɵeld"](195,0,null,null,8,"div",[["class","card-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](196,0,null,null,7,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵeld"](197,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](198,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](199,0,[""," ",""])),s["ɵppd"](200,1),s["ɵppd"](201,1),(t()(),s["ɵeld"](202,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](203,49152,null,0,Ms.a,[i.Location,At.b],null,null)],(function(t,e){var n=e.component;t(e,6,0,n.nfsForm),t(e,9,0,n.nfsForm),t(e,17,0,!n.isDefaultCluster),t(e,19,0),t(e,27,0,n.nfsForm.getValue("daemons")),t(e,31,0,"btn btn-light float-right",n.nfsForm.get("daemons").value,n.daemonsSelections,n.daemonsMessages);var a=t(e,35,0,n.icons.add);t(e,34,0,a),t(e,39,0,"fsal"),t(e,43,0),t(e,52,0,"name"),t(e,55,0,"name"),t(e,57,0,null===n.allFsals),t(e,59,0,null!==n.allFsals&&0===n.allFsals.length),t(e,61,0,null!==n.allFsals&&n.allFsals.length>0),t(e,63,0,n.allFsals),t(e,65,0,n.nfsForm.showError("name",s["ɵnov"](e,6),"required")),t(e,67,0,"RGW"===n.nfsForm.getValue("name")),t(e,69,0,"CEPH"===n.nfsForm.getValue("name")),t(e,71,0,"CEPH"===n.nfsForm.getValue("name")),t(e,73,0,"CEPH"===n.nfsForm.getValue("name")),t(e,75,0,"CEPH"===n.nfsForm.getValue("name")),t(e,77,0,"RGW"===n.nfsForm.getValue("name")),t(e,79,0),t(e,89,0,"protocolNfsv3"),t(e,92,0,"protocolNfsv3"),t(e,99,0,"protocolNfsv4"),t(e,102,0,"protocolNfsv4"),t(e,106,0,n.nfsForm.showError("protocolNfsv3",s["ɵnov"](e,6),"required")||n.nfsForm.showError("protocolNfsv4",s["ɵnov"](e,6),"required")),t(e,108,0,n.nfsForm.getValue("protocolNfsv3")),t(e,110,0,n.nfsForm.getValue("protocolNfsv4")),t(e,112,0),t(e,121,0,"access_type"),t(e,124,0,"access_type"),t(e,126,0,null===n.nfsAccessType),t(e,128,0,null!==n.nfsAccessType&&0===n.nfsAccessType.length),t(e,130,0,null!==n.nfsAccessType&&n.nfsAccessType.length>0),t(e,132,0,n.nfsAccessType),t(e,134,0,n.nfsForm.getValue("access_type")),t(e,136,0,"RW"===n.nfsForm.getValue("access_type")&&"RGW"===n.nfsForm.getValue("name")),t(e,138,0,n.nfsForm.showError("access_type",s["ɵnov"](e,6),"required")),t(e,140,0),t(e,149,0,"squash"),t(e,152,0,"squash"),t(e,154,0,null===n.nfsSquash),t(e,156,0,null!==n.nfsSquash&&0===n.nfsSquash.length),t(e,158,0,null!==n.nfsSquash&&n.nfsSquash.length>0),t(e,160,0,n.nfsSquash),t(e,162,0,n.nfsForm.showError("squash",s["ɵnov"](e,6),"required")),t(e,164,0),t(e,174,0,"transportUDP"),t(e,177,0,"transportUDP"),t(e,184,0,"transportTCP"),t(e,187,0,"transportTCP"),t(e,191,0,n.nfsForm.showError("transportUDP",s["ɵnov"](e,6),"required")||n.nfsForm.showError("transportTCP",s["ɵnov"](e,6),"required")),t(e,194,0,n.nfsForm),t(e,198,0,s["ɵnov"](e,6))}),(function(t,e){var n=e.component;t(e,4,0,s["ɵnov"](e,8).ngClassUntouched,s["ɵnov"](e,8).ngClassTouched,s["ɵnov"](e,8).ngClassPristine,s["ɵnov"](e,8).ngClassDirty,s["ɵnov"](e,8).ngClassValid,s["ɵnov"](e,8).ngClassInvalid,s["ɵnov"](e,8).ngClassPending);var a=s["ɵunv"](e,12,0,t(e,13,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,12,1,t(e,14,0,s["ɵnov"](e,1),n.resource));t(e,12,0,a,r),t(e,18,0,s["ɵnov"](e,19).hasErrors,s["ɵnov"](e,19).hasSuccess),t(e,38,0,s["ɵnov"](e,41).ngClassUntouched,s["ɵnov"](e,41).ngClassTouched,s["ɵnov"](e,41).ngClassPristine,s["ɵnov"](e,41).ngClassDirty,s["ɵnov"](e,41).ngClassValid,s["ɵnov"](e,41).ngClassInvalid,s["ɵnov"](e,41).ngClassPending),t(e,42,0,s["ɵnov"](e,43).hasErrors,s["ɵnov"](e,43).hasSuccess),t(e,49,0,s["ɵnov"](e,54).ngClassUntouched,s["ɵnov"](e,54).ngClassTouched,s["ɵnov"](e,54).ngClassPristine,s["ɵnov"](e,54).ngClassDirty,s["ɵnov"](e,54).ngClassValid,s["ɵnov"](e,54).ngClassInvalid,s["ɵnov"](e,54).ngClassPending,s["ɵnov"](e,55).validClass,s["ɵnov"](e,55).invalidClass),t(e,78,0,s["ɵnov"](e,79).hasErrors,s["ɵnov"](e,79).hasSuccess),t(e,86,0,s["ɵnov"](e,91).ngClassUntouched,s["ɵnov"](e,91).ngClassTouched,s["ɵnov"](e,91).ngClassPristine,s["ɵnov"](e,91).ngClassDirty,s["ɵnov"](e,91).ngClassValid,s["ɵnov"](e,91).ngClassInvalid,s["ɵnov"](e,91).ngClassPending,s["ɵnov"](e,92).validClass,s["ɵnov"](e,92).invalidClass),t(e,96,0,s["ɵnov"](e,101).ngClassUntouched,s["ɵnov"](e,101).ngClassTouched,s["ɵnov"](e,101).ngClassPristine,s["ɵnov"](e,101).ngClassDirty,s["ɵnov"](e,101).ngClassValid,s["ɵnov"](e,101).ngClassInvalid,s["ɵnov"](e,101).ngClassPending,s["ɵnov"](e,102).validClass,s["ɵnov"](e,102).invalidClass),t(e,111,0,s["ɵnov"](e,112).hasErrors,s["ɵnov"](e,112).hasSuccess),t(e,118,0,s["ɵnov"](e,123).ngClassUntouched,s["ɵnov"](e,123).ngClassTouched,s["ɵnov"](e,123).ngClassPristine,s["ɵnov"](e,123).ngClassDirty,s["ɵnov"](e,123).ngClassValid,s["ɵnov"](e,123).ngClassInvalid,s["ɵnov"](e,123).ngClassPending,s["ɵnov"](e,124).validClass,s["ɵnov"](e,124).invalidClass),t(e,139,0,s["ɵnov"](e,140).hasErrors,s["ɵnov"](e,140).hasSuccess),t(e,146,0,s["ɵnov"](e,151).ngClassUntouched,s["ɵnov"](e,151).ngClassTouched,s["ɵnov"](e,151).ngClassPristine,s["ɵnov"](e,151).ngClassDirty,s["ɵnov"](e,151).ngClassValid,s["ɵnov"](e,151).ngClassInvalid,s["ɵnov"](e,151).ngClassPending,s["ɵnov"](e,152).validClass,s["ɵnov"](e,152).invalidClass),t(e,163,0,s["ɵnov"](e,164).hasErrors,s["ɵnov"](e,164).hasSuccess),t(e,171,0,s["ɵnov"](e,176).ngClassUntouched,s["ɵnov"](e,176).ngClassTouched,s["ɵnov"](e,176).ngClassPristine,s["ɵnov"](e,176).ngClassDirty,s["ɵnov"](e,176).ngClassValid,s["ɵnov"](e,176).ngClassInvalid,s["ɵnov"](e,176).ngClassPending,s["ɵnov"](e,177).validClass,s["ɵnov"](e,177).invalidClass),t(e,181,0,s["ɵnov"](e,186).ngClassUntouched,s["ɵnov"](e,186).ngClassTouched,s["ɵnov"](e,186).ngClassPristine,s["ɵnov"](e,186).ngClassDirty,s["ɵnov"](e,186).ngClassValid,s["ɵnov"](e,186).ngClassInvalid,s["ɵnov"](e,186).ngClassPending,s["ɵnov"](e,187).validClass,s["ɵnov"](e,187).invalidClass);var i=s["ɵunv"](e,199,0,t(e,200,0,s["ɵnov"](e,0),n.action)),o=s["ɵunv"](e,199,1,t(e,201,0,s["ɵnov"](e,1),n.resource));t(e,199,0,i,o)}))}function Gp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-nfs-form",[],null,null,null,Fp,Lg)),s["ɵdid"](1,114688,null,0,Eg,[vt.a,Hh,qt.a,qt.m,Ag.a,Ho.a,ys.a,s.ChangeDetectorRef,me.a,At.b],null,null)],(function(t,e){t(e,1,0)}),null)}var Vp=s["ɵccf"]("cd-nfs-form",Eg,Gp,{},{},[]);class zp{}var Bp=s["ɵcrt"]({encapsulation:0,styles:[[".login{color:#fff;background-color:#374249;background-image:url(ceph_background.7c127240f022e7baf57d.gif);background-position:right bottom;background-repeat:no-repeat}  .login header{position:absolute;width:100vw}  .login header .navbar{padding:1rem 2rem}  .login header .navbar .dropdown-menu{margin-top:.2rem}  .login header .navbar .dropdown-menu li a:hover{background-color:#2b99a8}  .login section{display:inline-flex;width:100vw;min-height:100vh}"]],data:{}});function Yp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,13,"main",[["class","login full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,5,"header",[],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,4,"nav",[["class","navbar"]],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,0,"a",[["class","navbar-brand"]],null,null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,2,"div",[["class","form-inline"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"cd-language-selector",[],null,null,null,ct,it)),s["ɵdid"](6,114688,null,0,at,[rt.l,tt],null,null),(t()(),s["ɵeld"](7,0,null,null,6,"section",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,5,"div",[["class","container"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,4,"div",[["class","row full-height vertical-align"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,3,"div",[["class","col-sm-12 col-md-6 d-sm-block"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,0,"img",[["alt","Ceph"],["class","img-fluid mb-5"],["src","assets/Ceph_Logo_Standard_RGB_White_120411_fa.png"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](13,212992,null,0,qt.r,[qt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,6,0),t(e,13,0)}),null)}function Hp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login-layout",[],null,null,null,Yp,Bp)),s["ɵdid"](1,49152,null,0,zp,[],null,null)],null,null)}var Up=s["ɵccf"]("cd-login-layout",zp,Hp,{},{},[]);class Wp{}class Kp{constructor(t,e,n,a,r){this.authService=t,this.authStorageService=e,this.bsModalService=n,this.route=a,this.router=r,this.model=new Wp,this.isLoginActive=!1}ngOnInit(){if(this.authStorageService.isLoggedIn())this.router.navigate([""]);else{const t=this.bsModalService.getModalsCount();for(let n=1;n<=t;n++)this.bsModalService.hide(n);let e=null;if(-1!==window.location.hash.indexOf("access_token=")){e=window.location.hash.split("access_token=")[1];const t=window.location.toString();window.history.replaceState({},document.title,t.split("?")[0])}this.authService.check(e).subscribe(t=>{t.login_url?"#/login"===t.login_url?this.isLoginActive=!0:window.location.replace(t.login_url):(this.authStorageService.set(t.username,e,t.permissions,t.sso,t.pwdExpirationDate),this.router.navigate([""]))})}}login(){this.authService.login(this.model).subscribe(()=>{const t=J.get(this.route.snapshot.queryParams,"returnUrl","/");this.router.navigate([t])})}}var $p=s["ɵcrt"]({encapsulation:0,styles:[["cd-login h1{margin:0 0 30px}  cd-login .form-group{border-left:4px solid #fff;background-color:#333e46;height:auto;margin-bottom:2rem}  cd-login .form-group:focus-within{border-left:4px solid #ef5c55}  cd-login .form-group .invalid-feedback{display:inline}  cd-login .btn-password,   cd-login .btn-password:focus,   cd-login .form-control,   cd-login .form-control:focus{border:none;outline:0;box-shadow:none;color:#fff;background-color:#333e46;filter:none}  cd-login .placeholder{color:#90949c}  cd-login .btn-password:focus{outline-color:#2b99a8}@keyframes autofill{to{color:#fff;background-color:#333e46}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-name:autofill;animation-fill-mode:both;box-shadow:0 0 0 1000px #333e46 inset;-webkit-text-fill-color:#fff;transition-property:none;border-radius:0}"]],data:{}});function Zp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","invalid-feedback pl-4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Username is required"]))],null,null)}function Jp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"div",[["class","invalid-feedback pl-4"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password is required"]))],null,null)}function Qp(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,46,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,45,"form",[["name","loginForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngSubmit"],[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0,r=t.component;return"submit"===e&&(a=!1!==s["ɵnov"](t,3).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,3).onReset()&&a),"ngSubmit"===e&&(a=!1!==r.login()&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,$.G,[],null,null),s["ɵdid"](3,4210688,[["loginForm",4]],0,$.t,[[8,null],[8,null]],null,{ngSubmit:"ngSubmit"}),s["ɵprd"](2048,null,$.d,null,[$.t]),s["ɵdid"](5,16384,null,0,$.s,[[4,$.d]],null,null),(t()(),s["ɵeld"](6,0,null,null,17,"div",[["class","form-group has-feedback d-flex flex-column py-3"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](7,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](10,0,null,0,1,"label",[["class","placeholder pl-4"],["for","username"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Username"])),(t()(),s["ɵeld"](12,0,null,0,9,"input",[["aria-labelledby","username"],["autofocus",""],["class","form-control pl-4"],["id","username"],["name","username"],["required",""],["type","text"]],[[1,"aria-invalid",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,13)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,13).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,13)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,13)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.model.username=n)&&a),a}),null,null)),s["ɵdid"](13,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](14,16384,null,0,$.z,[],{required:[0,"required"]},null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[$.z]),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](17,671744,[["username",4]],0,$.u,[[2,$.d],[6,$.o],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,4210688,null,0,Es.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](21,16384,null,0,Z.h,[[3,$.d],Z.a],null,null),(t()(),s["ɵand"](16777216,null,0,1,null,Zp)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](24,0,null,null,21,"div",[["class","form-group has-feedback"],["id","password-div"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](25,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](28,0,null,0,17,"div",[["class","input-group d-flex flex-nowrap"]],null,null,null,null,null)),(t()(),s["ɵeld"](29,0,null,null,13,"div",[["class","d-flex flex-column flex-grow-1 py-3"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,1,"label",[["class","placeholder pl-4"],["for","password"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password"])),(t()(),s["ɵeld"](32,0,null,null,8,"input",[["aria-labelledby","password"],["class","form-control pl-4"],["id","password"],["name","password"],["required",""],["type","password"]],[[1,"aria-invalid",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0,r=t.component;return"input"===e&&(a=!1!==s["ɵnov"](t,33)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,33).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,33)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,33)._compositionEnd(n.target.value)&&a),"ngModelChange"===e&&(a=!1!==(r.model.password=n)&&a),a}),null,null)),s["ɵdid"](33,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](34,16384,null,0,$.z,[],{required:[0,"required"]},null),s["ɵprd"](1024,null,$.o,(function(t){return[t]}),[$.z]),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](37,671744,[["password",4]],0,$.u,[[2,$.d],[6,$.o],[8,null],[6,$.p]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),s["ɵprd"](2048,null,$.q,null,[$.u]),s["ɵdid"](39,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](40,16384,null,0,Z.h,[[3,$.d],Z.a],null,null),(t()(),s["ɵand"](16777216,null,null,1,null,Jp)),s["ɵdid"](42,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](43,0,null,null,2,"span",[["class","form-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,1,"button",[["cdPasswordButton","password"],["class","btn btn-outline-light btn-password h-100 px-4"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,45).onClick()&&a),a}),null,null)),s["ɵdid"](45,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](46,0,null,null,0,"input",[["class","btn btn-secondary px-5 py-2"],["type","submit"],["value","Login"]],[[8,"disabled",0]],null,null,null,null))],(function(t,e){var n=e.component;t(e,7,0),t(e,14,0,""),t(e,17,0,"username",n.model.username),t(e,20,0,""),t(e,23,0,(s["ɵnov"](e,3).submitted||s["ɵnov"](e,17).dirty)&&s["ɵnov"](e,17).invalid),t(e,25,0),t(e,34,0,""),t(e,37,0,"password",n.model.password),t(e,42,0,(s["ɵnov"](e,3).submitted||s["ɵnov"](e,37).dirty)&&s["ɵnov"](e,37).invalid),t(e,45,0,"password")}),(function(t,e){t(e,1,0,s["ɵnov"](e,5).ngClassUntouched,s["ɵnov"](e,5).ngClassTouched,s["ɵnov"](e,5).ngClassPristine,s["ɵnov"](e,5).ngClassDirty,s["ɵnov"](e,5).ngClassValid,s["ɵnov"](e,5).ngClassInvalid,s["ɵnov"](e,5).ngClassPending),t(e,6,0,s["ɵnov"](e,7).hasErrors,s["ɵnov"](e,7).hasSuccess),t(e,12,1,[s["ɵnov"](e,17).invalid,s["ɵnov"](e,14).required?"":null,s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,21).validClass,s["ɵnov"](e,21).invalidClass]),t(e,24,0,s["ɵnov"](e,25).hasErrors,s["ɵnov"](e,25).hasSuccess),t(e,32,1,[s["ɵnov"](e,37).invalid,s["ɵnov"](e,34).required?"":null,s["ɵnov"](e,39).ngClassUntouched,s["ɵnov"](e,39).ngClassTouched,s["ɵnov"](e,39).ngClassPristine,s["ɵnov"](e,39).ngClassDirty,s["ɵnov"](e,39).ngClassValid,s["ɵnov"](e,39).ngClassInvalid,s["ɵnov"](e,39).ngClassPending,s["ɵnov"](e,40).validClass,s["ɵnov"](e,40).invalidClass]),t(e,46,0,s["ɵnov"](e,3).invalid)}))}function Xp(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Qp)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,1,0,e.component.isLoginActive)}),null)}function tb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login",[],null,null,null,Xp,$p)),s["ɵdid"](1,114688,null,0,Kp,[Ht.a,vt.a,Lt.b,qt.a,qt.m],null,null)],(function(t,e){t(e,1,0)}),null)}var eb=s["ɵccf"]("cd-login",Kp,tb,{},{},[]);class nb extends Th{constructor(t,e,n,a,r,i,s,o,u){super(t,e,n,a,r,i,s,o),this.i18n=t,this.actionLabels=e,this.notificationService=n,this.userService=a,this.authStorageService=r,this.formBuilder=i,this.router=s,this.passwordPolicyService=o,this.authService=u}onPasswordChange(){this.authService.logout()}onCancel(){this.authService.logout()}}var ab=s["ɵcrt"]({encapsulation:0,styles:[["cd-login-password-form h4{margin:0 0 30px}  cd-login-password-form .btn-password,   cd-login-password-form .btn-password:focus,   cd-login-password-form .form-control,   cd-login-password-form .form-control:focus{color:#fff;background-color:#333e46}  cd-login-password-form .form-control::placeholder{color:#90949c}  cd-login-password-form .btn-password:focus{outline-color:#2b99a8}  cd-login-password-form button.btn:not(:first-child){margin-left:5px}"]],data:{}});function rb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function ib(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function sb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function ob(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The old and new passwords must be different."]))],null,null)}function ub(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.component.passwordValuation)}))}function lb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function db(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Password confirmation doesn't match the new password."]))],null,null)}function cb(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),(t()(),s["ɵeld"](2,0,null,null,81,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Please set a new password."])),(t()(),s["ɵeld"](5,0,null,null,1,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You will be redirected to the login page afterwards."])),(t()(),s["ɵeld"](7,0,null,null,67,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,9).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,9).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,12).onSubmit()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,$.G,[],null,null),s["ɵdid"](9,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](11,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](12,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](13,0,null,null,19,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](14,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](17,0,null,0,11,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,7,"input",[["autocomplete","new-password"],["autofocus",""],["class","form-control"],["formControlName","oldpassword"],["id","oldpassword"],["placeholder","Old password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,19)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,19).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,19)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,19)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](19,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](21,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](23,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](24,4210688,null,0,Es.a,[s.ElementRef],{autofocus:[0,"autofocus"]},null),s["ɵdid"](25,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](26,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](27,0,null,null,1,"button",[["cdPasswordButton","oldpassword"],["class","btn btn-outline-light btn-password"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,28).onClick()&&a),a}),null,null)),s["ɵdid"](28,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,rb)),s["ɵdid"](30,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ib)),s["ɵdid"](32,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](33,0,null,null,22,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](34,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](37,0,null,0,10,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](38,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","newpassword"],["id","newpassword"],["placeholder","New password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,39)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,39).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,39)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,39)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](39,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](41,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](43,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](44,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](45,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](46,0,null,null,1,"button",[["cdPasswordButton","newpassword"],["class","btn btn-outline-light btn-password"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,47).onClick()&&a),a}),null,null)),s["ɵdid"](47,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵeld"](48,0,null,0,1,"div",[["class","password-strength-level"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,0,"div",[["data-toggle","tooltip"]],[[8,"className",0],[8,"title",0]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,0,1,null,sb)),s["ɵdid"](51,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ob)),s["ɵdid"](53,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,ub)),s["ɵdid"](55,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](56,0,null,null,18,"div",[["class","form-group has-feedback"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](57,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](60,0,null,0,10,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](61,0,null,null,6,"input",[["autocomplete","new-password"],["class","form-control"],["formControlName","confirmnewpassword"],["id","confirmnewpassword"],["placeholder","Confirm new password..."],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,62)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,62).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,62)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,62)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](62,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](64,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](66,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](67,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](68,0,null,null,2,"span",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](69,0,null,null,1,"button",[["cdPasswordButton","confirmnewpassword"],["class","btn btn-outline-light btn-password"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,70).onClick()&&a),a}),null,null)),s["ɵdid"](70,81920,null,0,xh.a,[s.ElementRef,s.Renderer2],{cdPasswordButton:[0,"cdPasswordButton"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,lb)),s["ɵdid"](72,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,db)),s["ɵdid"](74,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](75,0,null,null,8,"div",[["class","form-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](76,0,null,null,4,"cd-submit-button",[["btnClass","btn-block"],["class","full-width"]],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](77,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"],btnClass:[1,"btnClass"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](78,0,[" "," "," "])),s["ɵppd"](79,1),s["ɵppd"](80,1),(t()(),s["ɵeld"](81,0,null,null,2,"button",[["class","btn btn-light"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.onCancel()&&a),a}),null,null)),(t()(),s["ɵeld"](82,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cancel"]))],(function(t,e){var n=e.component;t(e,9,0,n.userForm),t(e,12,0,n.userForm),t(e,14,0),t(e,21,0,"oldpassword"),t(e,24,0,""),t(e,25,0,"oldpassword"),t(e,28,0,"oldpassword"),t(e,30,0,n.userForm.showError("oldpassword",s["ɵnov"](e,9),"required")),t(e,32,0,n.userForm.showError("oldpassword",s["ɵnov"](e,9),"notmatch")),t(e,34,0),t(e,41,0,"newpassword"),t(e,44,0,"newpassword"),t(e,47,0,"newpassword"),t(e,51,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"required")),t(e,53,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"notmatch")),t(e,55,0,n.userForm.showError("newpassword",s["ɵnov"](e,9),"passwordPolicy")),t(e,57,0),t(e,64,0,"confirmnewpassword"),t(e,67,0,"confirmnewpassword"),t(e,70,0,"confirmnewpassword"),t(e,72,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,9),"required")),t(e,74,0,n.userForm.showError("confirmnewpassword",s["ɵnov"](e,9),"match")),t(e,77,0,n.userForm,"btn-block")}),(function(t,e){var n=e.component;t(e,7,0,s["ɵnov"](e,11).ngClassUntouched,s["ɵnov"](e,11).ngClassTouched,s["ɵnov"](e,11).ngClassPristine,s["ɵnov"](e,11).ngClassDirty,s["ɵnov"](e,11).ngClassValid,s["ɵnov"](e,11).ngClassInvalid,s["ɵnov"](e,11).ngClassPending),t(e,13,0,s["ɵnov"](e,14).hasErrors,s["ɵnov"](e,14).hasSuccess),t(e,18,0,s["ɵnov"](e,23).ngClassUntouched,s["ɵnov"](e,23).ngClassTouched,s["ɵnov"](e,23).ngClassPristine,s["ɵnov"](e,23).ngClassDirty,s["ɵnov"](e,23).ngClassValid,s["ɵnov"](e,23).ngClassInvalid,s["ɵnov"](e,23).ngClassPending,s["ɵnov"](e,25).validClass,s["ɵnov"](e,25).invalidClass),t(e,33,0,s["ɵnov"](e,34).hasErrors,s["ɵnov"](e,34).hasSuccess),t(e,38,0,s["ɵnov"](e,43).ngClassUntouched,s["ɵnov"](e,43).ngClassTouched,s["ɵnov"](e,43).ngClassPristine,s["ɵnov"](e,43).ngClassDirty,s["ɵnov"](e,43).ngClassValid,s["ɵnov"](e,43).ngClassInvalid,s["ɵnov"](e,43).ngClassPending,s["ɵnov"](e,44).validClass,s["ɵnov"](e,44).invalidClass),t(e,49,0,s["ɵinlineInterpolate"](1,"",n.passwordStrengthLevelClass,""),s["ɵinlineInterpolate"](1,"",n.passwordValuation,"")),t(e,56,0,s["ɵnov"](e,57).hasErrors,s["ɵnov"](e,57).hasSuccess),t(e,61,0,s["ɵnov"](e,66).ngClassUntouched,s["ɵnov"](e,66).ngClassTouched,s["ɵnov"](e,66).ngClassPristine,s["ɵnov"](e,66).ngClassDirty,s["ɵnov"](e,66).ngClassValid,s["ɵnov"](e,66).ngClassInvalid,s["ɵnov"](e,66).ngClassPending,s["ɵnov"](e,67).validClass,s["ɵnov"](e,67).invalidClass);var a=s["ɵunv"](e,78,0,t(e,79,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,78,1,t(e,80,0,s["ɵnov"](e,1),n.resource));t(e,78,0,a,r)}))}function fb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-login-password-form",[],null,null,null,cb,ab)),s["ɵdid"](1,49152,null,0,nb,[me.a,At.b,gt.a,Rt.a,vt.a,Ho.a,qt.m,_h.a,Ht.a],null,null)],null,null)}var hb=s["ɵccf"]("cd-login-password-form",nb,fb,{},{},[]);class gb{constructor(){}}var pb=s["ɵcrt"]({encapsulation:0,styles:[["#toast-container{margin-top:2vw}@media (max-width:1600px){  #toast-container{margin-top:2.5vw}}@media (max-width:calc(992px - 1px)){  #toast-container{margin-top:9vw}}@media (max-width:900px){  #toast-container{margin-top:10vw}}@media (max-width:319px){  #toast-container{margin-top:11vw}}@media (max-width:260px){  #toast-container{margin-top:14vw}}"]],data:{}});function bb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](1,212992,null,0,qt.r,[qt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function mb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-blank-layout",[],null,null,null,bb,pb)),s["ɵdid"](1,49152,null,0,gb,[],null,null)],null,null)}var yb=s["ɵccf"]("cd-blank-layout",gb,mb,{},{},[]);class vb{constructor(){this.logoutUrl=`${window.location.origin}/auth/saml2/slo`}}var xb=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large}*[_ngcontent-%COMP%]{font-family:monospace}img[_ngcontent-%COMP%]{width:50vw}"]],data:{}});function _b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,16,"div",[["class","col-md-12 text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, the user does not exist in Ceph."])),(t()(),s["ɵeld"](4,0,null,null,4,"h4",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Return to "])),(t()(),s["ɵeld"](6,0,null,null,1,"a",[["class","sso-logout"]],[[8,"href",4]],null,null,null,null)),(t()(),s["ɵted"](-1,null,["Login Page"])),(t()(),s["ɵted"](-1,null,[". You'll be logged out from the Identity Provider when you retry logging in."])),(t()(),s["ɵeld"](9,0,null,null,0,"img",[["class","img-fluid mx-auto rounded"],["src","assets/1280px-Nautilus_Octopus.jpg"]],null,null,null,null,null)),(t()(),s["ɵeld"](10,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[' "'])),(t()(),s["ɵeld"](13,0,null,null,1,"a",[["href","https://www.flickr.com/photos/146401137@N06/40335060661"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Nautilus Octopus"])),(t()(),s["ɵted"](-1,null,['" by Jin Kemoole is licensed under '])),(t()(),s["ɵeld"](16,0,null,null,1,"a",[["class","external text"],["href","https://creativecommons.org/licenses/by/2.0/"],["rel","nofollow"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CC BY 2.0"]))],null,(function(t,e){t(e,6,0,e.component.logoutUrl)}))}function Tb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-sso-not-found",[],null,null,null,_b,xb)),s["ɵdid"](1,49152,null,0,vb,[],null,null)],null,null)}var Ob=s["ɵccf"]("cd-sso-not-found",vb,Tb,{},{},[]);class wb{constructor(){this.icons=ht.a}}var Sb=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large;font-family:monospace}h2[_ngcontent-%COMP%]{font-size:xx-large;font-family:monospace}i[_ngcontent-%COMP%]{font-size:200px}"]],data:{}});function Ib(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","horizontal-align vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,9,"div",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Forbidden"])),(t()(),s["ɵeld"](4,0,null,null,0,"i",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"h2",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, you are not allowed to see what you were looking for."])),(t()(),s["ɵeld"](7,0,null,null,3,"button",[["class","btn btn-primary"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,8).onClick()&&a),a}),null,null)),s["ɵdid"](8,16384,null,0,qt.n,[qt.m,qt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](9,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,8,0,"/login")}),(function(t,e){t(e,4,0,s["ɵinlineInterpolate"](1,"",e.component.icons.lock," text-danger"))}))}function Nb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-forbidden",[],null,null,null,Ib,Sb)),s["ɵdid"](1,49152,null,0,wb,[],null,null)],null,null)}var Cb=s["ɵccf"]("cd-forbidden",wb,Nb,{},{},[]);class Rb{constructor(){}}var Ab=s["ɵcrt"]({encapsulation:0,styles:[["h1[_ngcontent-%COMP%]{font-size:-webkit-xxx-large;font-family:monospace}*[_ngcontent-%COMP%]{font-family:monospace}img[_ngcontent-%COMP%]{width:50vw}"]],data:{}});function kb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,17,"div",[["class","horizontal-align vertical-align full-height"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,16,"div",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Sorry, we could not find what you were looking for."])),(t()(),s["ɵeld"](4,0,null,null,0,"img",[["class","img-fluid mx-auto rounded"],["src","assets/1500px-Southern_Keeled_Octopus.jpg"]],null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,[' "'])),(t()(),s["ɵeld"](8,0,null,null,1,"a",[["href","https://collections.museumvictoria.com.au/species/8696"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Southern Keeled Octopus, Octopus berrima"])),(t()(),s["ɵted"](-1,null,['" by Museums Victoria (Photographer: Julian Finn) is licensed under '])),(t()(),s["ɵeld"](11,0,null,null,1,"a",[["class","external text"],["href","https://creativecommons.org/licenses/by/4.0"],["rel","nofollow"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["CC BY 4.0"])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,3,"button",[["class","btn btn-primary"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==s["ɵnov"](t,15).onClick()&&a),a}),null,null)),s["ɵdid"](15,16384,null,0,qt.n,[qt.m,qt.a,[8,null],s.Renderer2,s.ElementRef],{routerLink:[0,"routerLink"]},null),(t()(),s["ɵeld"](16,0,null,null,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Back"]))],(function(t,e){t(e,15,0,"/login")}),null)}function Eb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-not-found",[],null,null,null,kb,Ab)),s["ɵdid"](1,49152,null,0,Rb,[],null,null)],null,null)}var Lb=s["ɵccf"]("cd-not-found",Rb,Eb,{},{},[]),Db=n("ES0t"),Pb=n("Xg1U"),Mb=n("z5nN"),qb=n("iutN"),jb=n("EEJc"),Fb=n("PEr+"),Gb=n("a40w"),Vb=n("hfeG"),zb=n("atuK"),Bb=s["ɵcrt"]({encapsulation:0,styles:[[".about-container[_ngcontent-%COMP%]{background-color:#374249;background-image:url(ceph_background.7c127240f022e7baf57d.gif);background-position:right bottom;background-repeat:no-repeat;color:#fff;text-shadow:1px 1px #374249}.product-versions[_ngcontent-%COMP%]{margin-top:30px}.product-versions[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{margin-right:10px}.modal-header[_ngcontent-%COMP%]{border-bottom:none}.modal-header[_ngcontent-%COMP%]   .close[_ngcontent-%COMP%]{color:#fff;font-size:2em}.modal-body[_ngcontent-%COMP%]{padding-left:80px;padding-right:80px}.ceph-logo[_ngcontent-%COMP%]{width:25%;margin-bottom:30px;object-position:-20px 0}.modal-footer[_ngcontent-%COMP%]{display:block;border-top:none;padding:15px 80px 35px}"]],data:{}});function Yb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,45,"div",[["class","about-container"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"div",[["class","modal-header"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"button",[["aria-label","Close"],["class","close float-right"],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.modalRef.hide()&&a),a}),null,null)),(t()(),s["ɵeld"](3,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["×"])),(t()(),s["ɵeld"](5,0,null,null,37,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,0,"img",[["class","ceph-logo"],["src","assets/Ceph_Logo_Standard_RGB_Reversed_120411_fa.png"]],[[8,"alt",0]],null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,2,"h3",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](9,null,["",""])),(t()(),s["ɵeld"](10,0,null,null,6,"div",[["class","product-versions"]],null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Version"])),(t()(),s["ɵeld"](13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](14,null,[" "," "," "])),(t()(),s["ɵeld"](15,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵted"](16,null,[" "," "])),(t()(),s["ɵeld"](17,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,24,"dl",[],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Ceph Manager"])),(t()(),s["ɵeld"](21,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](22,null,["",""])),(t()(),s["ɵeld"](23,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["User"])),(t()(),s["ɵeld"](25,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](26,null,["",""])),(t()(),s["ɵeld"](27,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["User Role"])),(t()(),s["ɵeld"](29,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](30,null,["",""])),(t()(),s["ɵeld"](31,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser"])),(t()(),s["ɵeld"](33,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](34,null,["",""])),(t()(),s["ɵeld"](35,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser Version"])),(t()(),s["ɵeld"](37,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](38,null,["",""])),(t()(),s["ɵeld"](39,0,null,null,1,"dt",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Browser OS"])),(t()(),s["ɵeld"](41,0,null,null,1,"dd",[],null,null,null,null,null)),(t()(),s["ɵted"](42,null,["",""])),(t()(),s["ɵeld"](43,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](44,0,null,null,1,"div",[["class","text-left"]],null,null,null,null,null)),(t()(),s["ɵted"](45,null,[" "," "," "]))],null,(function(t,e){var n=e.component;t(e,6,0,s["ɵinlineInterpolate"](1,"",n.projectConstants.organization,"")),t(e,9,0,n.projectConstants.projectName),t(e,14,0,n.versionNumber,n.versionHash),t(e,16,0,n.versionName),t(e,22,0,n.hostAddr),t(e,26,0,n.modalVariables.user),t(e,30,0,n.modalVariables.role),t(e,34,0,n.modalVariables.browserName),t(e,38,0,n.modalVariables.browserVersion),t(e,42,0,n.modalVariables.browserOS),t(e,45,0,n.copyright,n.projectConstants.license)}))}function Hb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-about",[],null,null,null,Yb,Bb)),s["ɵdid"](1,245760,null,0,kt,[Lt.a,pt.a,Rt.a,vt.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ub=s["ɵccf"]("cd-about",kt,Hb,{},{},[]),Wb=s["ɵcrt"]({encapsulation:0,styles:[".dropdown[_nghost-%COMP%] {\n      z-index: 1000;\n    }\n\n    .dropdown-menu[_nghost-%COMP%], .dropdown-menu[_ngcontent-%COMP%] {\n      overflow-y: auto;\n      height: 100px;\n    }"],data:{animation:[{type:7,name:"typeaheadAnimation",definitions:[{type:0,name:"animated-down",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-down",animation:[{type:6,styles:{height:0,overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:0,name:"animated-up",styles:{type:6,styles:{height:"*",overflow:"hidden"},offset:null},options:void 0},{type:1,expr:"* => animated-up",animation:[{type:6,styles:{height:"*",overflow:"hidden"},offset:null},{type:4,styles:null,timings:"220ms cubic-bezier(0, 0, 0.2, 1)"}],options:null},{type:1,expr:"* => unanimated",animation:{type:4,styles:null,timings:"0s"},options:null}],options:{}}]}});function Kb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function $b(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null))],null,(function(t,e){t(e,0,0,e.component.highlight(e.context.match,e.context.query))}))}function Zb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,1,"li",[["class","dropdown-header"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit)}))}function Jb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function Qb(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,4,"li",[],[[24,"@typeaheadAnimation",0],[2,"active",null]],[[null,"mouseenter"]],(function(t,e,n){var a=!0;return"mouseenter"===e&&(a=!1!==t.component.selectActive(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"a",[["href","#"],["tabindex","-1"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.selectMatch(t.parent.context.$implicit,n)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,Jb)),s["ɵdid"](3,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](4,{item:0,index:1,match:2,query:3})],(function(t,e){var n=e.component,a=t(e,4,0,e.parent.context.$implicit.item,e.parent.context.index,e.parent.context.$implicit,n.query);t(e,3,0,a,n.itemTemplate||s["ɵnov"](e.parent.parent.parent,5))}),(function(t,e){var n=e.component;t(e,0,0,n.animationState,n.isActive(e.parent.context.$implicit))}))}function Xb(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,Zb)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Qb)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.context.$implicit.isHeader();t(e,1,0,n);var a=!e.context.$implicit.isHeader();t(e,3,0,a)}),null)}function tm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[1,0],["ulElement",1]],null,2,"ul",[["class","dropdown-menu"]],[[4,"overflow-y",null],[4,"height",null]],null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Xb)),s["ɵdid"](2,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){t(e,2,0,e.component.matches)}),(function(t,e){var n=e.component;t(e,0,0,n.needScrollbar?"scroll":"auto",n.needScrollbar?n.guiHeight:"auto")}))}function em(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"h6",[["class","dropdown-header"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit)}))}function nm(t){return s["ɵvid"](0,[(t()(),s["ɵand"](0,null,null,0))],null,null)}function am(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,[[2,0],["liElements",1]],null,3,"button",[["class","dropdown-item"]],[[24,"@typeaheadAnimation",0],[2,"active",null]],[[null,"click"],[null,"mouseenter"]],(function(t,e,n){var a=!0,r=t.component;return"click"===e&&(a=!1!==r.selectMatch(t.parent.context.$implicit,n)&&a),"mouseenter"===e&&(a=!1!==r.selectActive(t.parent.context.$implicit)&&a),a}),null,null)),(t()(),s["ɵand"](16777216,null,null,2,null,nm)),s["ɵdid"](2,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](3,{item:0,index:1,match:2,query:3})],(function(t,e){var n=e.component,a=t(e,3,0,e.parent.context.$implicit.item,e.parent.context.index,e.parent.context.$implicit,n.query);t(e,2,0,a,n.itemTemplate||s["ɵnov"](e.parent.parent.parent,5))}),(function(t,e){var n=e.component;t(e,0,0,n.animationState,n.isActive(e.parent.context.$implicit))}))}function rm(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,em)),s["ɵdid"](1,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,am)),s["ɵdid"](3,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){var n=e.context.$implicit.isHeader();t(e,1,0,n);var a=!e.context.$implicit.isHeader();t(e,3,0,a)}),null)}function im(t){return s["ɵvid"](0,[(t()(),s["ɵand"](16777216,null,null,1,null,rm)),s["ɵdid"](1,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](0,null,null,0))],(function(t,e){t(e,1,0,e.component.matches)}),null)}function sm(t){return s["ɵvid"](0,[s["ɵqud"](671088640,1,{ulElement:0}),s["ɵqud"](671088640,2,{liElements:1}),(t()(),s["ɵand"](16777216,null,null,2,null,Kb)),s["ɵdid"](3,540672,null,0,i.NgTemplateOutlet,[s.ViewContainerRef],{ngTemplateOutletContext:[0,"ngTemplateOutletContext"],ngTemplateOutlet:[1,"ngTemplateOutlet"]},null),s["ɵpod"](4,{matches:0,itemTemplate:1,query:2}),(t()(),s["ɵand"](0,[["bsItemTemplate",2]],null,0,null,$b)),(t()(),s["ɵand"](0,[["bs3Template",2]],null,0,null,tm)),(t()(),s["ɵand"](0,[["bs4Template",2]],null,0,null,im))],(function(t,e){var n=e.component,a=t(e,4,0,n.matches,n.itemTemplate,n.query);t(e,3,0,a,n.optionsListTemplate||s["ɵnov"](e,n.isBs4?7:6))}),null)}function om(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"typeahead-container",[["class","dropdown open bottom"],["style","position: absolute;display: block;"]],[[2,"dropdown-menu",null],[4,"height",null],[4,"visibility",null],[2,"dropup",null]],[[null,"mouseleave"],[null,"blur"]],(function(t,e,n){var a=!0;return"mouseleave"===e&&(a=!1!==s["ɵnov"](t,1).focusLost()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,1).focusLost()&&a),a}),sm,Wb)),s["ɵdid"](1,180224,null,0,hg,[la.a,s.Renderer2,s.ElementRef,s.ChangeDetectorRef],null,null)],null,(function(t,e){t(e,0,0,s["ɵnov"](e,1).isBs4,s["ɵnov"](e,1).isBs4&&s["ɵnov"](e,1).needScrollbar?s["ɵnov"](e,1).guiHeight:"auto","inherit",s["ɵnov"](e,1).dropup)}))}var um=s["ɵccf"]("typeahead-container",hg,om,{},{},[]),lm=n("ajRT"),dm=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function cm(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Deep "]))],null,null)}function fm(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["deep "]))],null,null)}function hm(t){return s["ɵvid"](0,[s["ɵpid"](0,ps.a,[]),(t()(),s["ɵeld"](1,0,null,null,33,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](2,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](3,0,null,0,6,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSDs "])),(t()(),s["ɵeld"](5,0,null,null,3,null,null,null,null,null,null,null)),s["ɵdid"](6,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cm)),s["ɵdid"](8,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](-1,null,["Scrub"])),(t()(),s["ɵeld"](10,0,null,1,24,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,23,"form",[["name","scrubForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,13).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,13).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,16).onSubmit()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,$.G,[],null,null),s["ɵdid"](13,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](15,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](16,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](17,0,null,null,11,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,10,"p",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["You are about to apply a "])),(t()(),s["ɵeld"](20,0,null,null,3,null,null,null,null,null,null,null)),s["ɵdid"](21,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fm)),s["ɵdid"](23,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵted"](-1,null,["scrub to the OSD(s): "])),(t()(),s["ɵeld"](25,0,null,null,2,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](26,null,["",""])),s["ɵppd"](27,1),(t()(),s["ɵted"](-1,null,["."])),(t()(),s["ɵeld"](29,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](30,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.scrub()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](31,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"])),(t()(),s["ɵeld"](33,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](34,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.bsModalRef),t(e,6,0,n.deep),t(e,8,0,"1"),t(e,13,0,n.scrubForm),t(e,16,0,n.scrubForm),t(e,21,0,n.deep),t(e,23,0,"1"),t(e,31,0,n.scrubForm),t(e,34,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,11,0,s["ɵnov"](e,15).ngClassUntouched,s["ɵnov"](e,15).ngClassTouched,s["ɵnov"](e,15).ngClassPristine,s["ɵnov"](e,15).ngClassDirty,s["ɵnov"](e,15).ngClassValid,s["ɵnov"](e,15).ngClassInvalid,s["ɵnov"](e,15).ngClassPending);var a=s["ɵunv"](e,26,0,t(e,27,0,s["ɵnov"](e,0),n.selected));t(e,26,0,a)}))}function gm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-scrub-modal",[],null,null,null,hm,dm)),s["ɵdid"](1,114688,null,0,Wo,[Lt.a,wi,gt.a,me.a,ps.a],null,null)],(function(t,e){t(e,1,0)}),null)}var pm=s["ɵccf"]("cd-osd-scrub-modal",Wo,gm,{},{},[]),bm=s["ɵcrt"]({encapsulation:0,styles:[[".osd-modal[_ngcontent-%COMP%]   .oa-hr-small[_ngcontent-%COMP%]{margin:5px}"]],data:{}});function mm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"hr",[["class","oa-hr-small"]],null,null,null,null,null))],null,null)}function ym(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"checked",0],[8,"name",0],[8,"id",0],[8,"disabled",0],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"]],(function(t,e,n){var a=!0;return"change"===e&&(a=0!=(t.context.$implicit.value=!t.context.$implicit.value)&&a),a}),null,null)),s["ɵdid"](2,16384,null,0,Z.h,[[3,$.d],Z.a],null,null),(t()(),s["ɵeld"](3,0,null,null,5,"label",[["class","custom-control-label"],["ng-class","['tc_' + key]"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](4,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),s["ɵted"](5,null,["",""])),(t()(),s["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,1,"span",[["class","form-text text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,["",""])),(t()(),s["ɵand"](16777216,null,null,1,null,mm)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,10,0,!e.context.last)}),(function(t,e){t(e,1,0,e.context.$implicit.value,e.context.$implicit.code,e.context.$implicit.code,e.context.$implicit.disabled,s["ɵnov"](e,2).validClass,s["ɵnov"](e,2).invalidClass),t(e,3,0,e.context.$implicit.code),t(e,5,0,e.context.$implicit.name),t(e,8,0,e.context.$implicit.description)}))}function vm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](1,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"]))],(function(t,e){t(e,1,0,e.component.osdFlagsForm)}),null)}function xm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,19,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](1,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Cluster-wide OSD Flags"])),(t()(),s["ɵeld"](4,0,null,1,15,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,14,"form",[["name","osdFlagsForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,2,"div",[["class","modal-body osd-modal"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ym)),s["ɵdid"](13,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵeld"](14,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](15,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,vm)),s["ɵdid"](17,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](18,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](19,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.osdFlagsForm),t(e,10,0,n.osdFlagsForm),t(e,13,0,n.flags),t(e,17,0,n.permissions.osd.update),t(e,19,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending)}))}function _m(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-flags-modal",[],null,null,null,xm,bm)),s["ɵdid"](1,114688,null,0,jo,[Lt.a,vt.a,wi,gt.a,me.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Tm=s["ɵccf"]("cd-osd-flags-modal",jo,_m,{},{},[]),Om=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function wm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit.name),t(e,2,0,e.context.$implicit.name)}),(function(t,e){t(e,3,0,e.context.$implicit.text)}))}function Sm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function Im(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](2,0,["",""]))],null,(function(t,e){t(e,2,0,e.parent.context.$implicit.value.desc)}))}function Nm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function Cm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["",""]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.patternHelpText)}))}function Rm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.maxValue)}))}function Am(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.parent.context.$implicit.value.minValue)}))}function km(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,28,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,7,"label",[["class","col-form-label col-sm-6"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,4,"span",[],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](7,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpod"](8,{required:0}),(t()(),s["ɵted"](9,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Im)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,16,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,7,"input",[["class","form-control"],["type","number"]],[[8,"id",0],[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,14)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,14).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,14)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,14)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,15).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,15).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,15).onTouched()&&a),a}),null,null)),s["ɵdid"](14,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](15,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](17,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Nm)),s["ɵdid"](22,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Cm)),s["ɵdid"](24,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Rm)),s["ɵdid"](26,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Am)),s["ɵdid"](28,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0);var a=t(e,8,0,n.osdRecvSpeedForm.getValue("customizePriority"));t(e,7,0,a),t(e,11,0,e.context.$implicit.value.desc),t(e,17,0,e.context.$implicit.key),t(e,20,0,e.context.$implicit.key),t(e,22,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,7),"required")),t(e,24,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,7),"pattern")),t(e,26,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,7),"max")),t(e,28,0,n.osdRecvSpeedForm.getValue("customizePriority")&&n.osdRecvSpeedForm.showError(e.context.$implicit.key,s["ɵnov"](e.parent,7),"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.context.$implicit.key),t(e,9,0,e.context.$implicit.value.text),t(e,13,1,[e.context.$implicit.key,!n.osdRecvSpeedForm.getValue("customizePriority"),s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,20).validClass,s["ɵnov"](e,20).invalidClass])}))}function Em(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](1,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Submit"]))],(function(t,e){t(e,1,0,e.component.osdRecvSpeedForm)}),null)}function Lm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,53,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](1,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSD Recovery Priority"])),(t()(),s["ɵeld"](4,0,null,1,49,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,48,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,36,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,17,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](13,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](16,0,null,0,1,"label",[["class","col-form-label col-sm-6 required"],["for","priority"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Priority"])),(t()(),s["ɵeld"](18,0,null,0,11,"div",[["class","col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,8,"select",[["class","form-control custom-select"],["formControlName","priority"],["id","priority"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,20).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,20).onTouched()&&a),"change"===e&&(a=!1!==r.onPriorityChange(n.target.value)&&a),a}),null,null)),s["ɵdid"](20,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](22,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](24,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](25,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,wm)),s["ɵdid"](27,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Sm)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](30,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](31,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](34,0,null,0,10,"div",[["class","offset-sm-6 col-sm-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](35,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](36,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","customizePriority"],["id","customizePriority"],["name","customizePriority"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0,r=t.component;return"change"===e&&(a=!1!==s["ɵnov"](t,37).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,37).onTouched()&&a),"change"===e&&(a=!1!==r.onCustomizePriorityChange()&&a),a}),null,null)),s["ɵdid"](37,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](39,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](41,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](42,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](43,0,null,null,1,"label",[["class","custom-control-label"],["for","customizePriority"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Customize priority values"])),(t()(),s["ɵand"](16777216,null,null,2,null,km)),s["ɵdid"](46,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),s["ɵpid"](0,i.KeyValuePipe,[s.KeyValueDiffers]),(t()(),s["ɵeld"](48,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](49,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Em)),s["ɵdid"](51,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](52,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](53,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.osdRecvSpeedForm),t(e,10,0,n.osdRecvSpeedForm),t(e,13,0),t(e,22,0,"priority"),t(e,25,0,"priority"),t(e,27,0,n.priorities),t(e,29,0,n.osdRecvSpeedForm.showError("priority",s["ɵnov"](e,7),"required")),t(e,31,0),t(e,39,0,"customizePriority"),t(e,42,0,"customizePriority"),t(e,46,0,s["ɵunv"](e,46,0,s["ɵnov"](e,47).transform(n.priorityAttrs))),t(e,51,0,n.permissions.configOpt.update),t(e,53,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending),t(e,12,0,s["ɵnov"](e,13).hasErrors,s["ɵnov"](e,13).hasSuccess),t(e,19,0,s["ɵnov"](e,24).ngClassUntouched,s["ɵnov"](e,24).ngClassTouched,s["ɵnov"](e,24).ngClassPristine,s["ɵnov"](e,24).ngClassDirty,s["ɵnov"](e,24).ngClassValid,s["ɵnov"](e,24).ngClassInvalid,s["ɵnov"](e,24).ngClassPending,s["ɵnov"](e,25).validClass,s["ɵnov"](e,25).invalidClass),t(e,30,0,s["ɵnov"](e,31).hasErrors,s["ɵnov"](e,31).hasSuccess),t(e,36,0,s["ɵnov"](e,41).ngClassUntouched,s["ɵnov"](e,41).ngClassTouched,s["ɵnov"](e,41).ngClassPristine,s["ɵnov"](e,41).ngClassDirty,s["ɵnov"](e,41).ngClassValid,s["ɵnov"](e,41).ngClassInvalid,s["ɵnov"](e,41).ngClassPending,s["ɵnov"](e,42).validClass,s["ɵnov"](e,42).invalidClass)}))}function Dm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-recv-speed-modal",[],null,null,null,Lm,Om)),s["ɵdid"](1,114688,null,0,Yo,[Lt.a,vt.a,Fo.a,gt.a,me.a,wi],null,null)],(function(t,e){t(e,1,0)}),null)}var Pm=s["ɵccf"]("cd-osd-recv-speed-modal",Yo,Dm,{},{},[]),Mm=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function qm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required."]))],null,null)}function jm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["The value needs to be between 0 and 1."]))],null,null)}function Fm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,qm)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,jm)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,2,0,null==n.weight.errors?null:n.weight.errors.required),t(e,4,0,(null==n.weight.errors?null:n.weight.errors.max)||(null==n.weight.errors?null:n.weight.errors.min))}),null)}function Gm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,31,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](1,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](3,null,["Reweight OSD: ",""])),(t()(),s["ɵeld"](4,0,null,1,27,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,26,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,14,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"label",[["class","col-sm-2 col-form-label"],["for","weight"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Weight"])),(t()(),s["ɵeld"](15,0,null,null,10,"div",[["class","col-sm-10"]],null,null,null,null,null)),(t()(),s["ɵeld"](16,0,null,null,7,"input",[["class","form-control"],["formControlName","weight"],["id","weight"],["max","1"],["min","0"],["step","0.1"],["type","number"]],[[8,"value",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,17)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,17).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,17)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,17)._compositionEnd(n.target.value)&&a),"change"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,18).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,18).onTouched()&&a),a}),null,null)),s["ɵdid"](17,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵdid"](18,16384,null,0,$.w,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t,e){return[t,e]}),[$.e,$.w]),s["ɵdid"](20,671744,null,0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](22,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](23,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Fm)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](26,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](27,0,null,null,2,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.reweight()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](28,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](-1,0,["Reweight"])),(t()(),s["ɵeld"](30,0,null,null,1,"cd-back-button",[["name","Cancel"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](31,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.reweightForm),t(e,10,0,n.reweightForm),t(e,20,0,"weight"),t(e,23,0,"weight"),t(e,25,0,n.weight.errors),t(e,28,0,n.reweightForm,n.reweightForm.invalid),t(e,31,0,"Cancel",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,3,0,n.osdId),t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending),t(e,16,0,n.currentWeight,s["ɵnov"](e,22).ngClassUntouched,s["ɵnov"](e,22).ngClassTouched,s["ɵnov"](e,22).ngClassPristine,s["ɵnov"](e,22).ngClassDirty,s["ɵnov"](e,22).ngClassValid,s["ɵnov"](e,22).ngClassInvalid,s["ɵnov"](e,22).ngClassPending,s["ɵnov"](e,23).validClass,s["ɵnov"](e,23).invalidClass)}))}function Vm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-reweight-modal",[],null,null,null,Gm,Mm)),s["ɵdid"](1,114688,null,0,Uo,[Lt.a,wi,Ho.a],null,null)],(function(t,e){t(e,1,0)}),null)}var zm=s["ɵccf"]("cd-osd-reweight-modal",Uo,Vm,{},{},[]),Bm=s["ɵcrt"]({encapsulation:0,styles:[[".custom-checkbox[_ngcontent-%COMP%]   input[_ngcontent-%COMP%], .custom-checkbox[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{cursor:pointer}.col-form-label[_ngcontent-%COMP%]{text-align:left}"]],data:{}});function Ym(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](2,0,[" ",""]))],null,(function(t,e){t(e,2,0,e.parent.parent.context.$implicit.long_desc)}))}function Hm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,21,"div",[["class","form-group row pt-2"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,7,"label",[["class","col-form-label col-6"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),s["ɵted"](6,null,["",""])),(t()(),s["ɵeld"](7,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,3,"span",[["class","text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](9,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Ym)),s["ɵdid"](11,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](12,0,null,0,9,"div",[["class","col-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,8,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](14,0,null,null,6,"input",[["class","custom-control-input"],["type","checkbox"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,15).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,15).onTouched()&&a),a}),null,null)),s["ɵdid"](15,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](17,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](19,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](20,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](21,0,null,null,0,"label",[["class","custom-control-label"]],[[8,"htmlFor",0]],null,null,null,null))],(function(t,e){t(e,1,0),t(e,11,0,e.parent.context.$implicit.long_desc),t(e,17,0,e.parent.context.$implicit.name),t(e,20,0,e.parent.context.$implicit.name)}),(function(t,e){t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit.name),t(e,6,0,e.parent.context.$implicit.text),t(e,9,0,e.parent.context.$implicit.desc),t(e,14,0,e.parent.context.$implicit.name,s["ɵnov"](e,19).ngClassUntouched,s["ɵnov"](e,19).ngClassTouched,s["ɵnov"](e,19).ngClassPristine,s["ɵnov"](e,19).ngClassDirty,s["ɵnov"](e,19).ngClassValid,s["ɵnov"](e,19).ngClassInvalid,s["ɵnov"](e,19).ngClassPending,s["ɵnov"](e,20).validClass,s["ɵnov"](e,20).invalidClass),t(e,21,0,e.parent.context.$implicit.name)}))}function Um(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"cd-helper",[],null,null,null,uu.b,uu.a)),s["ɵdid"](1,49152,null,0,lu.a,[],null,null),(t()(),s["ɵted"](2,0,[" ",""]))],null,(function(t,e){t(e,2,0,e.parent.parent.context.$implicit.long_desc)}))}function Wm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"div",[["class","input-group-append"]],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,4,"button",[["class","btn btn-light"],["data-toggle","button"],["title","Remove the custom configuration value. The default configuration will be inherited and used instead."],["type","button"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=!1!==t.component.resetValue(t.parent.parent.context.$implicit.name)&&a),a}),null,null)),(t()(),s["ɵeld"](2,0,null,null,3,"i",[["aria-hidden","true"]],null,null,null,null,null)),s["ɵprd"](512,null,i["ɵNgClassImpl"],i["ɵNgClassR2Impl"],[s.IterableDiffers,s.KeyValueDiffers,s.ElementRef,s.Renderer2]),s["ɵdid"](4,278528,null,0,i.NgClass,[i["ɵNgClassImpl"]],{ngClass:[0,"ngClass"]},null),s["ɵpad"](5,1)],(function(t,e){var n=t(e,5,0,e.component.icons.erase);t(e,4,0,n)}),null)}function Km(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",""]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.additionalTypeInfo.patternHelpText)}))}function $m(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" ",""]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.additionalTypeInfo.patternHelpText)}))}function Zm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too high! It must not be greater than ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.maxValue)}))}function Jm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","invalid-feedback"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,["The entered value is too low! It must not be lower than ","."]))],null,(function(t,e){t(e,1,0,e.parent.parent.context.$implicit.minValue)}))}function Qm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,29,"div",[["class","form-group row pt-2"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](1,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](4,0,null,0,6,"label",[["class","col-6 col-form-label"]],[[8,"htmlFor",0]],null,null,null,null)),(t()(),s["ɵted"](5,null,[""," "])),(t()(),s["ɵeld"](6,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),s["ɵeld"](7,0,null,null,3,"span",[["class","text-muted"]],null,null,null,null,null)),(t()(),s["ɵted"](8,null,[" "," "])),(t()(),s["ɵand"](16777216,null,null,1,null,Um)),s["ɵdid"](10,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](11,0,null,0,18,"div",[["class","col-6"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,9,"div",[["class","input-group"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,6,"input",[["class","form-control"]],[[8,"type",0],[8,"id",0],[8,"placeholder",0],[8,"step",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,14)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,14).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,14)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,14)._compositionEnd(n.target.value)&&a),a}),null,null)),s["ɵdid"](14,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](16,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](18,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](19,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Wm)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Km)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,$m)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Zm)),s["ɵdid"](27,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Jm)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){var n=e.component;t(e,1,0),t(e,10,0,e.parent.context.$implicit.long_desc),t(e,16,0,e.parent.context.$implicit.name),t(e,19,0,e.parent.context.$implicit.name),t(e,21,0,n.optionsFormShowReset),t(e,23,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"pattern")),t(e,25,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"invalidUuid")),t(e,27,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"max")),t(e,29,0,n.optionsForm.showError(e.parent.context.$implicit.name,n.optionsFormDir,"min"))}),(function(t,e){var n=e.component;t(e,0,0,s["ɵnov"](e,1).hasErrors,s["ɵnov"](e,1).hasSuccess),t(e,4,0,e.parent.context.$implicit.name),t(e,5,0,e.parent.context.$implicit.text),t(e,8,0,e.parent.context.$implicit.desc),t(e,13,1,[e.parent.context.$implicit.additionalTypeInfo.inputType,e.parent.context.$implicit.name,e.parent.context.$implicit.additionalTypeInfo.humanReadable,n.getStep(e.parent.context.$implicit.type,n.optionsForm.getValue(e.parent.context.$implicit.name)),s["ɵnov"](e,18).ngClassUntouched,s["ɵnov"](e,18).ngClassTouched,s["ɵnov"](e,18).ngClassPristine,s["ɵnov"](e,18).ngClassDirty,s["ɵnov"](e,18).ngClassValid,s["ɵnov"](e,18).ngClassInvalid,s["ɵnov"](e,18).ngClassPending,s["ɵnov"](e,19).validClass,s["ɵnov"](e,19).invalidClass])}))}function Xm(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,0,"hr",[["class","my-2"]],null,null,null,null,null))],null,null)}function ty(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,Hm)),s["ɵdid"](2,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Qm)),s["ɵdid"](4,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,Xm)),s["ɵdid"](6,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null)],(function(t,e){t(e,2,0,"bool"===e.context.$implicit.type),t(e,4,0,"bool"!==e.context.$implicit.type),t(e,6,0,!e.context.last)}),null)}function ey(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,6,"div",[],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,1).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,1).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,4).onSubmit()&&a),a}),null,null)),s["ɵdid"](1,540672,null,0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](3,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](4,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ty)),s["ɵdid"](6,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.optionsFormGroup),t(e,4,0,n.optionsFormGroup),t(e,6,0,n.options)}),(function(t,e){t(e,0,0,s["ɵnov"](e,3).ngClassUntouched,s["ɵnov"](e,3).ngClassTouched,s["ɵnov"](e,3).ngClassPristine,s["ɵnov"](e,3).ngClassDirty,s["ɵnov"](e,3).ngClassValid,s["ɵnov"](e,3).ngClassInvalid,s["ɵnov"](e,3).ngClassPending)}))}var ny=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ay(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"a",[["class","pull-right margin-right-md"]],null,[[null,"click"]],(function(t,e,n){var a=!0;return"click"===e&&(a=0!=(t.component.advancedEnabled=!0)&&a),a}),null,null)),(t()(),s["ɵted"](-1,null,["Advanced..."]))],null,null)}function ry(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"h2",[["class","page-header"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Advanced configuration options"])),(t()(),s["ɵeld"](3,0,null,null,1,"cd-config-option",[],null,null,null,ey,Bm)),s["ɵdid"](4,114688,[[2,4],["advancedOptionsValues",4]],0,Vo,[Fo.a],{optionNames:[0,"optionNames"],optionsForm:[1,"optionsForm"],optionsFormDir:[2,"optionsFormDir"],optionsFormGroupName:[3,"optionsFormGroupName"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.advancedOptions,n.osdPgScrubForm,s["ɵnov"](e.parent,13),"advancedFormGroup")}),null)}function iy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.submitAction()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](1,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](2,0,[""," ",""])),s["ɵppd"](3,1),s["ɵppd"](4,1)],(function(t,e){t(e,1,0,e.component.osdPgScrubForm)}),(function(t,e){var n=e.component,a=s["ɵunv"](e,2,0,t(e,3,0,s["ɵnov"](e.parent,0),n.action)),r=s["ɵunv"](e,2,1,t(e,4,0,s["ɵnov"](e.parent,1),n.resource));t(e,2,0,a,r)}))}function sy(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵpid"](0,qs.a,[]),s["ɵqud"](402653184,1,{basicOptionsValues:0}),s["ɵqud"](671088640,2,{advancedOptionsValues:0}),(t()(),s["ɵeld"](4,0,null,null,27,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](5,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](6,0,null,0,3,null,null,null,null,null,null,null)),(t()(),s["ɵted"](7,null,[""," ",""])),s["ɵppd"](8,1),s["ɵppd"](9,1),(t()(),s["ɵeld"](10,0,null,1,21,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](11,0,null,null,20,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,13).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,13).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,16).onSubmit()&&a),a}),null,null)),s["ɵdid"](12,16384,null,0,$.G,[],null,null),s["ɵdid"](13,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](15,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](16,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](17,0,null,null,8,"div",[["class","modal-body osd-modal"]],null,null,null,null,null)),(t()(),s["ɵeld"](18,0,null,null,1,"cd-config-option",[],null,null,null,ey,Bm)),s["ɵdid"](19,114688,[[1,4],["basicOptionsValues",4]],0,Vo,[Fo.a],{optionNames:[0,"optionNames"],optionsForm:[1,"optionsForm"],optionsFormDir:[2,"optionsFormDir"],optionsFormGroupName:[3,"optionsFormGroupName"]},null),(t()(),s["ɵeld"](20,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(t()(),s["ɵeld"](21,0,null,null,2,"div",[["class","col-sm-12"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,ay)),s["ɵdid"](23,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,ry)),s["ɵdid"](25,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](26,0,null,null,5,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](27,0,null,null,4,"div",[["class","button-group text-right"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,iy)),s["ɵdid"](29,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](30,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](31,49152,null,0,Ms.a,[i.Location,At.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,5,0,n.bsModalRef),t(e,13,0,n.osdPgScrubForm),t(e,16,0,n.osdPgScrubForm),t(e,19,0,n.basicOptions,n.osdPgScrubForm,s["ɵnov"](e,13),"basicFormGroup"),t(e,23,0,!n.advancedEnabled),t(e,25,0,n.advancedEnabled),t(e,29,0,n.permissions.configOpt.update),t(e,31,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component,a=s["ɵunv"](e,7,0,t(e,8,0,s["ɵnov"](e,0),n.action)),r=s["ɵunv"](e,7,1,t(e,9,0,s["ɵnov"](e,1),n.resource));t(e,7,0,a,r),t(e,11,0,s["ɵnov"](e,15).ngClassUntouched,s["ɵnov"](e,15).ngClassTouched,s["ɵnov"](e,15).ngClassPristine,s["ɵnov"](e,15).ngClassDirty,s["ɵnov"](e,15).ngClassValid,s["ɵnov"](e,15).ngClassInvalid,s["ɵnov"](e,15).ngClassPending)}))}function oy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-pg-scrub-modal",[],null,null,null,sy,ny)),s["ɵdid"](1,49152,null,0,Bo,[Lt.a,vt.a,gt.a,me.a,At.b],null,null)],null,null)}var uy=s["ɵccf"]("cd-osd-pg-scrub-modal",Bo,oy,{},{},[]),ly=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function dy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](1,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{value:[0,"value"]},null),s["ɵdid"](2,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{value:[0,"value"]},null),(t()(),s["ɵted"](3,null,[" "," "]))],(function(t,e){t(e,1,0,e.context.$implicit),t(e,2,0,e.context.$implicit)}),(function(t,e){t(e,3,0,e.context.$implicit)}))}function cy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","help-block"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function fy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","help-block"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["This field is required!"]))],null,null)}function hy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,2,"div",[["id","match-state"]],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,1,"span",[],[[8,"className",0]],null,null,null,null)),(t()(),s["ɵted"](2,null,[" "," "]))],null,(function(t,e){var n=e.component;t(e,0,0,s["ɵinlineInterpolate"](1,"cd-col-form-offset ",n.matcherMatch.cssClass,"")),t(e,1,0,s["ɵinlineInterpolate"](1,"text-muted ",n.matcherMatch.cssClass,"")),t(e,2,0,n.matcherMatch.status)}))}function gy(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Update"]))],null,null)}function py(t){return s["ɵvid"](0,[(t()(),s["ɵted"](-1,null,["Add"]))],null,null)}function by(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,79,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](1,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Matcher"])),(t()(),s["ɵeld"](4,0,null,1,75,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,74,"form",[["class","form"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,7).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,7).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit()&&a),a}),null,null)),s["ɵdid"](6,16384,null,0,$.G,[],null,null),s["ɵdid"](7,540672,[["formDir",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](9,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](10,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](11,0,null,null,56,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](12,0,null,null,21,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](13,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,1,{FormControlNames:1}),s["ɵqud"](603979776,2,{messagesBlock:0}),(t()(),s["ɵeld"](16,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","name"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Name"])),(t()(),s["ɵeld"](18,0,null,0,15,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,12,"select",[["class","form-control"],["formControlName","name"],["id","name"],["name","name"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,20).onChange(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,20).onTouched()&&a),a}),null,null)),s["ɵdid"](20,16384,null,0,$.A,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.A]),s["ɵdid"](22,671744,[[1,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](24,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](25,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](26,0,null,null,3,"option",[],null,null,null,null,null)),s["ɵdid"](27,147456,null,0,$.v,[s.ElementRef,s.Renderer2,[2,$.A]],{ngValue:[0,"ngValue"]},null),s["ɵdid"](28,147456,null,0,$.F,[s.ElementRef,s.Renderer2,[8,null]],{ngValue:[0,"ngValue"]},null),(t()(),s["ɵted"](-1,null,["-- Select an attribute to match against --"])),(t()(),s["ɵand"](16777216,null,null,1,null,dy)),s["ɵdid"](31,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,cy)),s["ɵdid"](33,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](34,0,null,null,18,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](35,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,3,{FormControlNames:1}),s["ɵqud"](603979776,4,{messagesBlock:0}),(t()(),s["ɵeld"](38,0,null,0,1,"label",[["class","cd-col-form-label required"],["for","value"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Value"])),(t()(),s["ɵeld"](40,0,null,0,10,"div",[["class","cd-col-form-input"]],null,null,null,null,null)),(t()(),s["ɵeld"](41,16777216,null,null,7,"input",[["class","form-control"],["formControlName","value"],["id","value"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"keyup"],[null,"click"],[null,"focus"],[null,"keydown"]],(function(t,e,n){var a=!0;return"input"===e&&(a=!1!==s["ɵnov"](t,42)._handleInput(n.target.value)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,42).onTouched()&&a),"compositionstart"===e&&(a=!1!==s["ɵnov"](t,42)._compositionStart()&&a),"compositionend"===e&&(a=!1!==s["ɵnov"](t,42)._compositionEnd(n.target.value)&&a),"input"===e&&(a=!1!==s["ɵnov"](t,47).onInput(n)&&a),"keyup"===e&&(a=!1!==s["ɵnov"](t,47).onChange(n)&&a),"click"===e&&(a=!1!==s["ɵnov"](t,47).onFocus()&&a),"focus"===e&&(a=!1!==s["ɵnov"](t,47).onFocus()&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,47).onBlur()&&a),"keydown"===e&&(a=!1!==s["ɵnov"](t,47).onKeydown(n)&&a),a}),null,null)),s["ɵdid"](42,16384,null,0,$.e,[s.Renderer2,s.ElementRef,[2,$.b]],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.e]),s["ɵdid"](44,671744,[[3,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](46,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](47,212992,null,0,pg,[W.a,gg,s.ChangeDetectorRef,s.ElementRef,$.q,s.Renderer2,s.ViewContainerRef],{typeahead:[0,"typeahead"],typeaheadMinLength:[1,"typeaheadMinLength"]},null),s["ɵdid"](48,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,fy)),s["ɵdid"](50,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵand"](16777216,null,0,1,null,hy)),s["ɵdid"](52,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](53,0,null,null,14,"div",[["class","form-group row"]],[[2,"has-error",null],[2,"has-success",null]],null,null,ks.b,ks.a)),s["ɵdid"](54,1163264,null,2,Z.c,[s.ElementRef,Z.g],null,null),s["ɵqud"](603979776,5,{FormControlNames:1}),s["ɵqud"](603979776,6,{messagesBlock:0}),(t()(),s["ɵeld"](57,0,null,0,10,"div",[["class","cd-col-form-offset"]],null,null,null,null,null)),(t()(),s["ɵeld"](58,0,null,null,9,"div",[["class","custom-control custom-checkbox"]],null,null,null,null,null)),(t()(),s["ɵeld"](59,0,null,null,6,"input",[["class","custom-control-input"],["formControlName","isRegex"],["id","is-regex"],["name","is-regex"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"is-valid",null],[2,"is-invalid",null]],[[null,"change"],[null,"blur"]],(function(t,e,n){var a=!0;return"change"===e&&(a=!1!==s["ɵnov"](t,60).onChange(n.target.checked)&&a),"blur"===e&&(a=!1!==s["ɵnov"](t,60).onTouched()&&a),a}),null,null)),s["ɵdid"](60,16384,null,0,$.c,[s.Renderer2,s.ElementRef],null,null),s["ɵprd"](1024,null,$.p,(function(t){return[t]}),[$.c]),s["ɵdid"](62,671744,[[5,4]],0,$.j,[[3,$.d],[8,null],[8,null],[6,$.p],[2,$.E]],{name:[0,"name"]},null),s["ɵprd"](2048,null,$.q,null,[$.j]),s["ɵdid"](64,16384,null,0,$.r,[[4,$.q]],null,null),s["ɵdid"](65,16384,null,0,Z.h,[[3,$.d],Z.a],{formControlName:[0,"formControlName"]},null),(t()(),s["ɵeld"](66,0,null,null,1,"label",[["class","custom-control-label"],["for","is-regex"]],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["Use regular expression"])),(t()(),s["ɵeld"](68,0,null,null,11,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](69,0,null,null,8,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](70,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵeld"](71,0,null,0,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](72,0,null,null,5,null,null,null,null,null,null,null)),s["ɵdid"](73,16384,null,0,i.NgSwitch,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,gy)),s["ɵdid"](75,278528,null,0,i.NgSwitchCase,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),s["ɵand"](16777216,null,null,1,null,py)),s["ɵdid"](77,16384,null,0,i.NgSwitchDefault,[s.ViewContainerRef,s.TemplateRef,i.NgSwitch],null,null),(t()(),s["ɵeld"](78,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](79,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,7,0,n.form),t(e,10,0,n.form),t(e,13,0),t(e,22,0,"name"),t(e,25,0,"name"),t(e,27,0,null),t(e,28,0,null),t(e,31,0,n.nameAttributes),t(e,33,0,n.form.showError("name",s["ɵnov"](e,7),"required")),t(e,35,0),t(e,44,0,"value"),t(e,47,0,n.possibleValues,0),t(e,48,0,"value"),t(e,50,0,n.form.showError("value",s["ɵnov"](e,7),"required")),t(e,52,0,n.form.getValue("value")&&!n.form.getValue("isRegex")&&n.matcherMatch),t(e,54,0),t(e,62,0,"isRegex"),t(e,65,0,"isRegex"),t(e,70,0,n.form),t(e,73,0,n.editMode),t(e,75,0,"1"),t(e,79,0,"Close",n.bsModalRef.hide)}),(function(t,e){t(e,5,0,s["ɵnov"](e,9).ngClassUntouched,s["ɵnov"](e,9).ngClassTouched,s["ɵnov"](e,9).ngClassPristine,s["ɵnov"](e,9).ngClassDirty,s["ɵnov"](e,9).ngClassValid,s["ɵnov"](e,9).ngClassInvalid,s["ɵnov"](e,9).ngClassPending),t(e,12,0,s["ɵnov"](e,13).hasErrors,s["ɵnov"](e,13).hasSuccess),t(e,19,0,s["ɵnov"](e,24).ngClassUntouched,s["ɵnov"](e,24).ngClassTouched,s["ɵnov"](e,24).ngClassPristine,s["ɵnov"](e,24).ngClassDirty,s["ɵnov"](e,24).ngClassValid,s["ɵnov"](e,24).ngClassInvalid,s["ɵnov"](e,24).ngClassPending,s["ɵnov"](e,25).validClass,s["ɵnov"](e,25).invalidClass),t(e,34,0,s["ɵnov"](e,35).hasErrors,s["ɵnov"](e,35).hasSuccess),t(e,41,0,s["ɵnov"](e,46).ngClassUntouched,s["ɵnov"](e,46).ngClassTouched,s["ɵnov"](e,46).ngClassPristine,s["ɵnov"](e,46).ngClassDirty,s["ɵnov"](e,46).ngClassValid,s["ɵnov"](e,46).ngClassInvalid,s["ɵnov"](e,46).ngClassPending,s["ɵnov"](e,48).validClass,s["ɵnov"](e,48).invalidClass),t(e,53,0,s["ɵnov"](e,54).hasErrors,s["ɵnov"](e,54).hasSuccess),t(e,59,0,s["ɵnov"](e,64).ngClassUntouched,s["ɵnov"](e,64).ngClassTouched,s["ɵnov"](e,64).ngClassPristine,s["ɵnov"](e,64).ngClassDirty,s["ɵnov"](e,64).ngClassValid,s["ɵnov"](e,64).ngClassInvalid,s["ɵnov"](e,64).ngClassPending,s["ɵnov"](e,65).validClass,s["ɵnov"](e,65).invalidClass)}))}function my(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-silence-matcher-modal",[],null,null,null,by,ly)),s["ɵdid"](1,49152,null,0,Ac,[Ho.a,Cc,Lt.a],null,null)],null,null)}var yy=s["ɵccf"]("cd-silence-matcher-modal",Ac,my,{},{submitAction:"submitAction"},[]),vy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function xy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"span",[["class","badge badge-dark ml-2"]],null,null,null,null,null)),(t()(),s["ɵted"](1,null,[" "," "]))],null,(function(t,e){t(e,1,0,e.context.$implicit)}))}function _y(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,5,"cd-alert-panel",[["size","slim"],["type","warning"]],null,null,null,Yr.b,Yr.a)),s["ɵdid"](1,114688,null,0,Hr.a,[me.a],{type:[0,"type"],size:[1,"size"],showTitle:[2,"showTitle"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["At least one of these filters must be applied in order to proceed:"])),(t()(),s["ɵand"](16777216,null,0,1,null,xy)),s["ɵdid"](5,278528,null,0,i.NgForOf,[s.ViewContainerRef,s.TemplateRef,s.IterableDiffers],{ngForOf:[0,"ngForOf"]},null)],(function(t,e){var n=e.component;t(e,1,0,"warning","slim",!1),t(e,5,0,n.requiredFilters)}),null)}function Ty(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,4,"div",[],null,null,null,null,null)),(t()(),s["ɵeld"](1,0,null,null,3,"p",[["class","text-center"]],null,null,null,null,null)),(t()(),s["ɵeld"](2,0,null,null,2,"span",[],null,null,null,null,null)),(t()(),s["ɵted"](3,null,["Number of devices: ",". Raw capacity: ","."])),s["ɵppd"](4,1)],null,(function(t,e){var n=e.component,a=n.filteredDevices.length,r=s["ɵunv"](e,3,1,t(e,4,0,s["ɵnov"](e.parent,0),n.capacity));t(e,3,0,a,r)}))}function Oy(t){return s["ɵvid"](0,[s["ɵpid"](0,_a.a,[Ea.a]),s["ɵpid"](0,i.TitleCasePipe,[]),s["ɵqud"](671088640,1,{inventoryDevices:0}),(t()(),s["ɵeld"](3,0,null,null,25,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](4,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](5,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](6,null,[""," devices"])),(t()(),s["ɵeld"](7,0,null,1,21,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](8,0,null,null,20,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,10).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,10).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,13).onSubmit()&&a),a}),null,null)),s["ɵdid"](9,16384,null,0,$.G,[],null,null),s["ɵdid"](10,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](12,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](13,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](14,0,null,null,7,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵand"](16777216,null,null,1,null,_y)),s["ɵdid"](16,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](17,0,null,null,2,"cd-inventory-devices",[],null,[[null,"filterChange"]],(function(t,e,n){var a=!0;return"filterChange"===e&&(a=!1!==t.component.onFilterChange(n)&&a),a}),ai,ni)),s["ɵdid"](18,245760,[[1,4],["inventoryDevices",4]],0,ei,[vt.a,_a.a,me.a,Lt.b,gt.a,Jr],{devices:[0,"devices"],hiddenColumns:[1,"hiddenColumns"],filterColumns:[2,"filterColumns"]},{filterChange:"filterChange"}),s["ɵpad"](19,2),(t()(),s["ɵand"](16777216,null,null,1,null,Ty)),s["ɵdid"](21,16384,null,0,i.NgIf,[s.ViewContainerRef,s.TemplateRef],{ngIf:[0,"ngIf"]},null),(t()(),s["ɵeld"](22,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](23,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](24,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"],disabled:[1,"disabled"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](25,0,["",""])),s["ɵppd"](26,1),(t()(),s["ɵeld"](27,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](28,49152,null,0,Ms.a,[i.Location,At.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,4,0,n.bsModalRef),t(e,10,0,n.formGroup),t(e,13,0,n.formGroup),t(e,16,0,!n.canSubmit);var a=n.devices,r=t(e,19,0,"available","osd_ids");t(e,18,0,a,r,n.filterColumns),t(e,21,0,n.canSubmit),t(e,24,0,n.formGroup,!n.canSubmit||0===n.filteredDevices.length),t(e,28,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,6,0,n.deviceType),t(e,8,0,s["ɵnov"](e,12).ngClassUntouched,s["ɵnov"](e,12).ngClassTouched,s["ɵnov"](e,12).ngClassPristine,s["ɵnov"](e,12).ngClassDirty,s["ɵnov"](e,12).ngClassValid,s["ɵnov"](e,12).ngClassInvalid,s["ɵnov"](e,12).ngClassPending);var a=s["ɵunv"](e,25,0,t(e,26,0,s["ɵnov"](e,1),n.action));t(e,25,0,a)}))}function wy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-devices-selection-modal",[],null,null,null,Oy,vy)),s["ɵdid"](1,4243456,null,0,du,[Ho.a,Lt.a,At.b],null,null)],null,null)}var Sy=s["ɵccf"]("cd-osd-devices-selection-modal",du,wy,{},{submitAction:"submitAction"},[]),Iy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Ny(t){return s["ɵvid"](0,[s["ɵpid"](0,i.TitleCasePipe,[]),(t()(),s["ɵeld"](1,0,null,null,23,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](2,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](3,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["OSD creation preview"])),(t()(),s["ɵeld"](5,0,null,1,19,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,18,"form",[["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],(function(t,e,n){var a=!0;return"submit"===e&&(a=!1!==s["ɵnov"](t,8).onSubmit(n)&&a),"reset"===e&&(a=!1!==s["ɵnov"](t,8).onReset()&&a),"submit"===e&&(a=!1!==s["ɵnov"](t,11).onSubmit()&&a),a}),null,null)),s["ɵdid"](7,16384,null,0,$.G,[],null,null),s["ɵdid"](8,540672,[["frm",4]],0,$.l,[[8,null],[8,null]],{form:[0,"form"]},null),s["ɵprd"](2048,null,$.d,null,[$.l]),s["ɵdid"](10,16384,null,0,$.s,[[4,$.d]],null,null),s["ɵdid"](11,16384,null,0,Z.d,[],{formGroup:[0,"formGroup"]},null),(t()(),s["ɵeld"](12,0,null,null,5,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](13,0,null,null,1,"h3",[],null,null,null,null,null)),(t()(),s["ɵted"](-1,null,["DriveGroups"])),(t()(),s["ɵeld"](15,0,null,null,2,"pre",[],null,null,null,null,null)),(t()(),s["ɵted"](16,null,["",""])),s["ɵpid"](0,i.JsonPipe,[]),(t()(),s["ɵeld"](18,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](19,0,null,null,3,"cd-submit-button",[],null,[[null,"submitAction"]],(function(t,e,n){var a=!0;return"submitAction"===e&&(a=!1!==t.component.onSubmit()&&a),a}),Ls.b,Ls.a)),s["ɵdid"](20,114688,null,0,Ds.a,[s.ElementRef],{form:[0,"form"]},{submitAction:"submitAction"}),(t()(),s["ɵted"](21,0,["",""])),s["ɵppd"](22,1),(t()(),s["ɵeld"](23,0,null,null,1,"cd-back-button",[],null,null,null,Ps.b,Ps.a)),s["ɵdid"](24,49152,null,0,Ms.a,[i.Location,At.b],{back:[0,"back"]},null)],(function(t,e){var n=e.component;t(e,2,0,n.bsModalRef),t(e,8,0,n.formGroup),t(e,11,0,n.formGroup),t(e,20,0,n.formGroup),t(e,24,0,n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,6,0,s["ɵnov"](e,10).ngClassUntouched,s["ɵnov"](e,10).ngClassTouched,s["ɵnov"](e,10).ngClassPristine,s["ɵnov"](e,10).ngClassDirty,s["ɵnov"](e,10).ngClassValid,s["ɵnov"](e,10).ngClassInvalid,s["ɵnov"](e,10).ngClassPending),t(e,16,0,s["ɵunv"](e,16,0,s["ɵnov"](e,17).transform(n.driveGroups)));var a=s["ɵunv"](e,21,0,t(e,22,0,s["ɵnov"](e,0),n.action));t(e,21,0,a)}))}function Cy(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-osd-creation-preview-modal",[],null,null,null,Ny,Iy)),s["ɵdid"](1,114688,null,0,_u,[Lt.a,At.b,Ho.a,wi,ys.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ry=s["ɵccf"]("cd-osd-creation-preview-modal",_u,Cy,{driveGroups:"driveGroups"},{submitAction:"submitAction"},[]),Ay=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function ky(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,10,"cd-modal",[],null,null,null,jb.c,jb.b)),s["ɵdid"](1,49152,null,0,lm.a,[],{modalRef:[0,"modalRef"]},null),(t()(),s["ɵeld"](2,0,null,0,1,null,null,null,null,null,null,null)),(t()(),s["ɵted"](3,null,[""," ",""])),(t()(),s["ɵeld"](4,0,null,1,6,null,null,null,null,null,null,null)),(t()(),s["ɵeld"](5,0,null,null,2,"div",[["class","modal-body"]],null,null,null,null,null)),(t()(),s["ɵeld"](6,0,null,null,1,"cd-orchestrator-doc-panel",[],null,null,null,Zr,$r)),s["ɵdid"](7,49152,null,0,Kr,[],null,null),(t()(),s["ɵeld"](8,0,null,null,2,"div",[["class","modal-footer"]],null,null,null,null,null)),(t()(),s["ɵeld"](9,0,null,null,1,"cd-back-button",[["name","Close"]],null,null,null,Ps.b,Ps.a)),s["ɵdid"](10,49152,null,0,Ms.a,[i.Location,At.b],{name:[0,"name"],back:[1,"back"]},null)],(function(t,e){var n=e.component;t(e,1,0,n.bsModalRef),t(e,10,0,"Close",n.bsModalRef.hide)}),(function(t,e){var n=e.component;t(e,3,0,n.actionDescription,n.itemDescription)}))}function Ey(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-orchestrator-doc-modal",[],null,null,null,ky,Ay)),s["ɵdid"](1,114688,null,0,bs,[Lt.a],null,null)],(function(t,e){t(e,1,0)}),null)}var Ly=s["ɵccf"]("cd-orchestrator-doc-modal",bs,Ey,{},{},[]),Dy=s["ɵcrt"]({encapsulation:0,styles:[[""]],data:{}});function Py(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),s["ɵdid"](1,212992,null,0,qt.r,[qt.b,s.ViewContainerRef,s.ComponentFactoryResolver,[8,null],s.ChangeDetectorRef],null,null)],(function(t,e){t(e,1,0)}),null)}function My(t){return s["ɵvid"](0,[(t()(),s["ɵeld"](0,0,null,null,1,"cd-root",[],null,null,null,Py,Dy)),s["ɵdid"](1,49152,null,0,d,[],null,null)],null,null)}var qy=s["ɵccf"]("cd-root",d,My,{},{},[]),jy=new s.InjectionToken("JWT_OPTIONS"),Fy=function(){function t(t){void 0===t&&(t=null),this.tokenGetter=t&&t.tokenGetter||function(){}}return t.prototype.urlBase64Decode=function(t){var e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw"Illegal base64url string!"}return this.b64DecodeUnicode(e)},t.prototype.b64decode=function(t){var e="";if((t=String(t).replace(/=+$/,"")).length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var n=0,a=void 0,r=void 0,i=0;r=t.charAt(i++);~r&&(a=n%4?64*a+r:r,n++%4)?e+=String.fromCharCode(255&a>>(-2*n&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return e},t.prototype.b64DecodeUnicode=function(t){return decodeURIComponent(Array.prototype.map.call(this.b64decode(t),(function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)})).join(""))},t.prototype.decodeToken=function(t){if(void 0===t&&(t=this.tokenGetter()),null===t)return null;var e=t.split(".");if(3!==e.length)throw new Error("The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.");var n=this.urlBase64Decode(e[1]);if(!n)throw new Error("Cannot decode the token.");return JSON.parse(n)},t.prototype.getTokenExpirationDate=function(t){var e;if(void 0===t&&(t=this.tokenGetter()),!(e=this.decodeToken(t)).hasOwnProperty("exp"))return null;var n=new Date(0);return n.setUTCSeconds(e.exp),n},t.prototype.isTokenExpired=function(t,e){if(void 0===t&&(t=this.tokenGetter()),null===t||""===t)return!0;var n=this.getTokenExpirationDate(t);return e=e||0,null===n||!(n.valueOf()>(new Date).valueOf()+1e3*e)},t}(),Gy=n("CxY0"),Vy=function(){function t(t,e){this.jwtHelper=e,this.tokenGetter=t.tokenGetter,this.headerName=t.headerName||"Authorization",this.authScheme=t.authScheme||""===t.authScheme?t.authScheme:"Bearer ",this.whitelistedDomains=t.whitelistedDomains||[],this.blacklistedRoutes=t.blacklistedRoutes||[],this.throwNoTokenError=t.throwNoTokenError||!1,this.skipWhenExpired=t.skipWhenExpired}return t.prototype.isWhitelistedDomain=function(t){var e=Object(Gy.parse)(t.url,!1,!0);return null===e.host||this.whitelistedDomains.findIndex((function(t){return"string"==typeof t?t===e.host:t instanceof RegExp&&t.test(e.host)}))>-1},t.prototype.isBlacklistedRoute=function(t){var e=t.url;return this.blacklistedRoutes.findIndex((function(t){return"string"==typeof t?t===e:t instanceof RegExp&&t.test(e)}))>-1},t.prototype.handleInterception=function(t,e,n){var a,r=!1;if(!t&&this.throwNoTokenError)throw new Error("Could not get token from tokenGetter function.");return this.skipWhenExpired&&(r=!t||this.jwtHelper.isTokenExpired(t)),t&&r&&this.skipWhenExpired?e=e.clone():t&&(e=e.clone({setHeaders:(a={},a[this.headerName]=""+this.authScheme+t,a)})),n.handle(e)},t.prototype.intercept=function(t,e){var n=this;if(!this.isWhitelistedDomain(t)||this.isBlacklistedRoute(t))return e.handle(t);var a=this.tokenGetter();return a instanceof Promise?Object(En.a)(a).pipe(Object(Dn.a)((function(a){return n.handleInterception(a,t,e)}))):this.handleInterception(a,t,e)},t}(),zy=n("z6cu"),By=n("JIr8");let Yy=(()=>{class t{constructor(t,e,n){this.router=t,this.authStorageService=e,this.notificationService=n}intercept(t,e){return e.handle(t).pipe(Object(By.a)(t=>{if(t instanceof X.f){let e;switch(t.status){case 400:const n=new hs.a,a=t.error.task;J.isPlainObject(a)?(a.metadata.component=a.metadata.component||t.error.component,n.name=a.name,n.metadata=a.metadata):n.metadata=t.error,n.success=!1,n.exception=t.error,e=this.notificationService.notifyTask(n);break;case 401:this.authStorageService.remove(),this.router.navigate(["/login"]);break;case 403:this.router.navigate(["/403"]);break;default:e=this.prepareNotification(t)}t.preventDefault=()=>{this.notificationService.cancel(e)},t.ignoreStatusCode=function(t){this.status===t&&this.preventDefault()}}return Object(zy.a)(t)}))}prepareNotification(t){return this.notificationService.show(()=>{let e="";return J.isPlainObject(t.error)&&J.isString(t.error.detail)?e=t.error.detail:J.isString(t.error)?e=t.error:J.isString(t.message)&&(e=t.message),new ke.b(ge.a.error,`${t.status} - ${t.statusText}`,e,void 0,t.application)})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](qt.m),s["ɵɵinject"](vt.a),s["ɵɵinject"](gt.a))},token:t,providedIn:"root"}),t})();function Hy(){return"undefined"!=typeof process}function Uy(t){switch(t.length){case 0:return new K.d;case 1:return t[0];default:return new K.k(t)}}function Wy(t,e,n,a,r={},i={}){const s=[],o=[];let u=-1,l=null;if(a.forEach(t=>{const n=t.offset,a=n==u,d=a&&l||{};Object.keys(t).forEach(n=>{let a=n,o=t[n];if("offset"!==n)switch(a=e.normalizePropertyName(a,s),o){case K.l:o=r[n];break;case K.a:o=i[n];break;default:o=e.normalizeStyleValue(n,a,o,s)}d[a]=o}),a||o.push(d),l=d,u=n}),s.length){const t="\n - ";throw new Error(`Unable to animate due to the following errors:${t}${s.join(t)}`)}return o}function Ky(t,e,n,a){switch(e){case"start":t.onStart(()=>a(n&&$y(n,"start",t)));break;case"done":t.onDone(()=>a(n&&$y(n,"done",t)));break;case"destroy":t.onDestroy(()=>a(n&&$y(n,"destroy",t)))}}function $y(t,e,n){const a=n.totalTime,r=Zy(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,null==a?t.totalTime:a,!!n.disabled),i=t._data;return null!=i&&(r._data=i),r}function Zy(t,e,n,a,r="",i=0,s){return{element:t,triggerName:e,fromState:n,toState:a,phaseName:r,totalTime:i,disabled:!!s}}function Jy(t,e,n){let a;return t instanceof Map?(a=t.get(e),a||t.set(e,a=n)):(a=t[e],a||(a=t[e]=n)),a}function Qy(t){const e=t.indexOf(":");return[t.substring(1,e),t.substr(e+1)]}let Xy=(t,e)=>!1,tv=(t,e)=>!1,ev=(t,e,n)=>[];const nv=Hy();(nv||"undefined"!=typeof Element)&&(Xy=(t,e)=>t.contains(e),tv=(()=>{if(nv||Element.prototype.matches)return(t,e)=>t.matches(e);{const t=Element.prototype,e=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector;return e?(t,n)=>e.apply(t,[n]):tv}})(),ev=(t,e,n)=>{let a=[];if(n)a.push(...t.querySelectorAll(e));else{const n=t.querySelector(e);n&&a.push(n)}return a});let av=null,rv=!1;function iv(t){av||(av=("undefined"!=typeof document?document.body:null)||{},rv=!!av.style&&"WebkitAppearance"in av.style);let e=!0;return av.style&&!function(t){return"ebkit"==t.substring(1,6)}(t)&&(e=t in av.style,!e&&rv)&&(e="Webkit"+t.charAt(0).toUpperCase()+t.substr(1)in av.style),e}const sv=tv,ov=Xy,uv=ev;function lv(t){const e={};return Object.keys(t).forEach(n=>{const a=n.replace(/([a-z])([A-Z])/g,"$1-$2");e[a]=t[n]}),e}class dv{validateStyleProperty(t){return iv(t)}matchesElement(t,e){return sv(t,e)}containsElement(t,e){return ov(t,e)}query(t,e,n){return uv(t,e,n)}computeStyle(t,e,n){return n||""}animate(t,e,n,a,r,i=[],s){return new K.d(n,a)}}let cv=(()=>{class t{}return t.NOOP=new dv,t})();function fv(t){if("number"==typeof t)return t;const e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:hv(parseFloat(e[1]),e[2])}function hv(t,e){switch(e){case"s":return 1e3*t;default:return t}}function gv(t,e,n){return t.hasOwnProperty("duration")?t:function(t,e,n){let a,r=0,i="";if("string"==typeof t){const n=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===n)return e.push(`The provided timing value "${t}" is invalid.`),{duration:0,delay:0,easing:""};a=hv(parseFloat(n[1]),n[2]);const s=n[3];null!=s&&(r=hv(parseFloat(s),n[4]));const o=n[5];o&&(i=o)}else a=t;if(!n){let n=!1,i=e.length;a<0&&(e.push("Duration values below 0 are not allowed for this animation step."),n=!0),r<0&&(e.push("Delay values below 0 are not allowed for this animation step."),n=!0),n&&e.splice(i,0,`The provided timing value "${t}" is invalid.`)}return{duration:a,delay:r,easing:i}}(t,e,n)}function pv(t,e={}){return Object.keys(t).forEach(n=>{e[n]=t[n]}),e}function bv(t,e,n={}){if(e)for(let a in t)n[a]=t[a];else pv(t,n);return n}function mv(t,e,n){return n?e+":"+n+";":""}function yv(t){let e="";for(let n=0;n<t.style.length;n++){const a=t.style.item(n);e+=mv(0,a,t.style.getPropertyValue(a))}for(const n in t.style)t.style.hasOwnProperty(n)&&!n.startsWith("_")&&(e+=mv(0,n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),t.style[n]));t.setAttribute("style",e)}function vv(t,e,n){t.style&&(Object.keys(e).forEach(a=>{const r=Nv(a);n&&!n.hasOwnProperty(a)&&(n[a]=t.style[r]),t.style[r]=e[a]}),Hy()&&yv(t))}function xv(t,e){t.style&&(Object.keys(e).forEach(e=>{const n=Nv(e);t.style[n]=""}),Hy()&&yv(t))}function _v(t){return Array.isArray(t)?1==t.length?t[0]:Object(K.f)(t):t}const Tv=new RegExp("{{\\s*(.+?)\\s*}}","g");function Ov(t){let e=[];if("string"==typeof t){const n=t.toString();let a;for(;a=Tv.exec(n);)e.push(a[1]);Tv.lastIndex=0}return e}function wv(t,e,n){const a=t.toString(),r=a.replace(Tv,(t,a)=>{let r=e[a];return e.hasOwnProperty(a)||(n.push(`Please provide a value for the animation param ${a}`),r=""),r.toString()});return r==a?t:r}function Sv(t){const e=[];let n=t.next();for(;!n.done;)e.push(n.value),n=t.next();return e}const Iv=/-+([a-z0-9])/g;function Nv(t){return t.replace(Iv,(...t)=>t[1].toUpperCase())}function Cv(t,e){return 0===t||0===e}function Rv(t,e,n){const a=Object.keys(n);if(a.length&&e.length){let i=e[0],s=[];if(a.forEach(t=>{i.hasOwnProperty(t)||s.push(t),i[t]=n[t]}),s.length)for(var r=1;r<e.length;r++){let n=e[r];s.forEach((function(e){n[e]=kv(t,e)}))}}return e}function Av(t,e,n){switch(e.type){case 7:return t.visitTrigger(e,n);case 0:return t.visitState(e,n);case 1:return t.visitTransition(e,n);case 2:return t.visitSequence(e,n);case 3:return t.visitGroup(e,n);case 4:return t.visitAnimate(e,n);case 5:return t.visitKeyframes(e,n);case 6:return t.visitStyle(e,n);case 8:return t.visitReference(e,n);case 9:return t.visitAnimateChild(e,n);case 10:return t.visitAnimateRef(e,n);case 11:return t.visitQuery(e,n);case 12:return t.visitStagger(e,n);default:throw new Error(`Unable to resolve animation metadata node #${e.type}`)}}function kv(t,e){return window.getComputedStyle(t)[e]}function Ev(t,e){const n=[];return"string"==typeof t?t.split(/\s*,\s*/).forEach(t=>function(t,e,n){if(":"==t[0]){const a=function(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,e)=>parseFloat(e)>parseFloat(t);case":decrement":return(t,e)=>parseFloat(e)<parseFloat(t);default:return e.push(`The transition alias value "${t}" is not supported`),"* => *"}}(t,n);if("function"==typeof a)return void e.push(a);t=a}const a=t.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==a||a.length<4)return n.push(`The provided transition expression "${t}" is not supported`),e;const r=a[1],i=a[2],s=a[3];e.push(Pv(r,s)),"<"!=i[0]||"*"==r&&"*"==s||e.push(Pv(s,r))}(t,n,e)):n.push(t),n}const Lv=new Set(["true","1"]),Dv=new Set(["false","0"]);function Pv(t,e){const n=Lv.has(t)||Dv.has(t),a=Lv.has(e)||Dv.has(e);return(r,i)=>{let s="*"==t||t==r,o="*"==e||e==i;return!s&&n&&"boolean"==typeof r&&(s=r?Lv.has(t):Dv.has(t)),!o&&a&&"boolean"==typeof i&&(o=i?Lv.has(e):Dv.has(e)),s&&o}}const Mv=new RegExp("s*:selfs*,?","g");function qv(t,e,n){return new jv(t).build(e,n)}class jv{constructor(t){this._driver=t}build(t,e){const n=new Fv(e);return this._resetContextStyleTimingState(n),Av(this,_v(t),n)}_resetContextStyleTimingState(t){t.currentQuerySelector="",t.collectedStyles={},t.collectedStyles[""]={},t.currentTime=0}visitTrigger(t,e){let n=e.queryCount=0,a=e.depCount=0;const r=[],i=[];return"@"==t.name.charAt(0)&&e.errors.push("animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))"),t.definitions.forEach(t=>{if(this._resetContextStyleTimingState(e),0==t.type){const n=t,a=n.name;a.toString().split(/\s*,\s*/).forEach(t=>{n.name=t,r.push(this.visitState(n,e))}),n.name=a}else if(1==t.type){const r=this.visitTransition(t,e);n+=r.queryCount,a+=r.depCount,i.push(r)}else e.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:t.name,states:r,transitions:i,queryCount:n,depCount:a,options:null}}visitState(t,e){const n=this.visitStyle(t.styles,e),a=t.options&&t.options.params||null;if(n.containsDynamicStyles){const r=new Set,i=a||{};if(n.styles.forEach(t=>{if(Gv(t)){const e=t;Object.keys(e).forEach(t=>{Ov(e[t]).forEach(t=>{i.hasOwnProperty(t)||r.add(t)})})}}),r.size){const n=Sv(r.values());e.errors.push(`state("${t.name}", ...) must define default values for all the following style substitutions: ${n.join(", ")}`)}}return{type:0,name:t.name,style:n,options:a?{params:a}:null}}visitTransition(t,e){e.queryCount=0,e.depCount=0;const n=Av(this,_v(t.animation),e);return{type:1,matchers:Ev(t.expr,e.errors),animation:n,queryCount:e.queryCount,depCount:e.depCount,options:Vv(t.options)}}visitSequence(t,e){return{type:2,steps:t.steps.map(t=>Av(this,t,e)),options:Vv(t.options)}}visitGroup(t,e){const n=e.currentTime;let a=0;const r=t.steps.map(t=>{e.currentTime=n;const r=Av(this,t,e);return a=Math.max(a,e.currentTime),r});return e.currentTime=a,{type:3,steps:r,options:Vv(t.options)}}visitAnimate(t,e){const n=function(t,e){let n=null;if(t.hasOwnProperty("duration"))n=t;else if("number"==typeof t)return zv(gv(t,e).duration,0,"");const a=t;if(a.split(/\s+/).some(t=>"{"==t.charAt(0)&&"{"==t.charAt(1))){const t=zv(0,0,"");return t.dynamic=!0,t.strValue=a,t}return n=n||gv(a,e),zv(n.duration,n.delay,n.easing)}(t.timings,e.errors);let a;e.currentAnimateTimings=n;let r=t.styles?t.styles:Object(K.h)({});if(5==r.type)a=this.visitKeyframes(r,e);else{let r=t.styles,i=!1;if(!r){i=!0;const t={};n.easing&&(t.easing=n.easing),r=Object(K.h)(t)}e.currentTime+=n.duration+n.delay;const s=this.visitStyle(r,e);s.isEmptyStep=i,a=s}return e.currentAnimateTimings=null,{type:4,timings:n,style:a,options:null}}visitStyle(t,e){const n=this._makeStyleAst(t,e);return this._validateStyleAst(n,e),n}_makeStyleAst(t,e){const n=[];Array.isArray(t.styles)?t.styles.forEach(t=>{"string"==typeof t?t==K.a?n.push(t):e.errors.push(`The provided style string value ${t} is not allowed.`):n.push(t)}):n.push(t.styles);let a=!1,r=null;return n.forEach(t=>{if(Gv(t)){const e=t,n=e.easing;if(n&&(r=n,delete e.easing),!a)for(let t in e)if(e[t].toString().indexOf("{{")>=0){a=!0;break}}}),{type:6,styles:n,easing:r,offset:t.offset,containsDynamicStyles:a,options:null}}_validateStyleAst(t,e){const n=e.currentAnimateTimings;let a=e.currentTime,r=e.currentTime;n&&r>0&&(r-=n.duration+n.delay),t.styles.forEach(t=>{"string"!=typeof t&&Object.keys(t).forEach(n=>{if(!this._driver.validateStyleProperty(n))return void e.errors.push(`The provided animation property "${n}" is not a supported CSS property for animations`);const i=e.collectedStyles[e.currentQuerySelector],s=i[n];let o=!0;s&&(r!=a&&r>=s.startTime&&a<=s.endTime&&(e.errors.push(`The CSS property "${n}" that exists between the times of "${s.startTime}ms" and "${s.endTime}ms" is also being animated in a parallel animation between the times of "${r}ms" and "${a}ms"`),o=!1),r=s.startTime),o&&(i[n]={startTime:r,endTime:a}),e.options&&function(t,e,n){const a=e.params||{},r=Ov(t);r.length&&r.forEach(t=>{a.hasOwnProperty(t)||n.push(`Unable to resolve the local animation param ${t} in the given list of values`)})}(t[n],e.options,e.errors)})})}visitKeyframes(t,e){const n={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push("keyframes() must be placed inside of a call to animate()"),n;let a=0;const r=[];let i=!1,s=!1,o=0;const u=t.steps.map(t=>{const n=this._makeStyleAst(t,e);let u=null!=n.offset?n.offset:function(t){if("string"==typeof t)return null;let e=null;if(Array.isArray(t))t.forEach(t=>{if(Gv(t)&&t.hasOwnProperty("offset")){const n=t;e=parseFloat(n.offset),delete n.offset}});else if(Gv(t)&&t.hasOwnProperty("offset")){const n=t;e=parseFloat(n.offset),delete n.offset}return e}(n.styles),l=0;return null!=u&&(a++,l=n.offset=u),s=s||l<0||l>1,i=i||l<o,o=l,r.push(l),n});s&&e.errors.push("Please ensure that all keyframe offsets are between 0 and 1"),i&&e.errors.push("Please ensure that all keyframe offsets are in order");const l=t.steps.length;let d=0;a>0&&a<l?e.errors.push("Not all style() steps within the declared keyframes() contain offsets"):0==a&&(d=1/(l-1));const c=l-1,f=e.currentTime,h=e.currentAnimateTimings,g=h.duration;return u.forEach((t,a)=>{const i=d>0?a==c?1:d*a:r[a],s=i*g;e.currentTime=f+h.delay+s,h.duration=s,this._validateStyleAst(t,e),t.offset=i,n.styles.push(t)}),n}visitReference(t,e){return{type:8,animation:Av(this,_v(t.animation),e),options:Vv(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:Vv(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:Vv(t.options)}}visitQuery(t,e){const n=e.currentQuerySelector,a=t.options||{};e.queryCount++,e.currentQuery=t;const[r,i]=function(t){const e=!!t.split(/\s*,\s*/).find(t=>":self"==t);return e&&(t=t.replace(Mv,"")),[t=t.replace(/@\*/g,".ng-trigger").replace(/@\w+/g,t=>".ng-trigger-"+t.substr(1)).replace(/:animating/g,".ng-animating"),e]}(t.selector);e.currentQuerySelector=n.length?n+" "+r:r,Jy(e.collectedStyles,e.currentQuerySelector,{});const s=Av(this,_v(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=n,{type:11,selector:r,limit:a.limit||0,optional:!!a.optional,includeSelf:i,animation:s,originalSelector:t.selector,options:Vv(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push("stagger() can only be used inside of query()");const n="full"===t.timings?{duration:0,delay:0,easing:"full"}:gv(t.timings,e.errors,!0);return{type:12,animation:Av(this,_v(t.animation),e),timings:n,options:null}}}class Fv{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null}}function Gv(t){return!Array.isArray(t)&&"object"==typeof t}function Vv(t){var e;return t?(t=pv(t)).params&&(t.params=(e=t.params)?pv(e):null):t={},t}function zv(t,e,n){return{duration:t,delay:e,easing:n}}function Bv(t,e,n,a,r,i,s=null,o=!1){return{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:a,duration:r,delay:i,totalTime:r+i,easing:s,subTimeline:o}}class Yv{constructor(){this._map=new Map}consume(t){let e=this._map.get(t);return e?this._map.delete(t):e=[],e}append(t,e){let n=this._map.get(t);n||this._map.set(t,n=[]),n.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}const Hv=new RegExp(":enter","g"),Uv=new RegExp(":leave","g");function Wv(t,e,n,a,r,i={},s={},o,u,l=[]){return(new Kv).buildKeyframes(t,e,n,a,r,i,s,o,u,l)}class Kv{buildKeyframes(t,e,n,a,r,i,s,o,u,l=[]){u=u||new Yv;const d=new Zv(t,e,u,a,r,l,[]);d.options=o,d.currentTimeline.setStyles([i],null,d.errors,o),Av(this,n,d);const c=d.timelines.filter(t=>t.containsAnimation());if(c.length&&Object.keys(s).length){const t=c[c.length-1];t.allowOnlyTimelineStyles()||t.setStyles([s],null,d.errors,o)}return c.length?c.map(t=>t.buildKeyframes()):[Bv(e,[],[],[],0,0,"",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const n=e.subInstructions.consume(e.element);if(n){const a=e.createSubContext(t.options),r=e.currentTimeline.currentTime,i=this._visitSubInstructions(n,a,a.options);r!=i&&e.transformIntoNewTimeline(i)}e.previousNode=t}visitAnimateRef(t,e){const n=e.createSubContext(t.options);n.transformIntoNewTimeline(),this.visitReference(t.animation,n),e.transformIntoNewTimeline(n.currentTimeline.currentTime),e.previousNode=t}_visitSubInstructions(t,e,n){let a=e.currentTimeline.currentTime;const r=null!=n.duration?fv(n.duration):null,i=null!=n.delay?fv(n.delay):null;return 0!==r&&t.forEach(t=>{const n=e.appendInstructionToTimeline(t,r,i);a=Math.max(a,n.duration+n.delay)}),a}visitReference(t,e){e.updateOptions(t.options,!0),Av(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const n=e.subContextCount;let a=e;const r=t.options;if(r&&(r.params||r.delay)&&(a=e.createSubContext(r),a.transformIntoNewTimeline(),null!=r.delay)){6==a.previousNode.type&&(a.currentTimeline.snapshotCurrentStyles(),a.previousNode=$v);const t=fv(r.delay);a.delayNextStep(t)}t.steps.length&&(t.steps.forEach(t=>Av(this,t,a)),a.currentTimeline.applyStylesToKeyframe(),a.subContextCount>n&&a.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const n=[];let a=e.currentTimeline.currentTime;const r=t.options&&t.options.delay?fv(t.options.delay):0;t.steps.forEach(i=>{const s=e.createSubContext(t.options);r&&s.delayNextStep(r),Av(this,i,s),a=Math.max(a,s.currentTimeline.currentTime),n.push(s.currentTimeline)}),n.forEach(t=>e.currentTimeline.mergeTimelineCollectedStyles(t)),e.transformIntoNewTimeline(a),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const n=t.strValue;return gv(e.params?wv(n,e.params,e.errors):n,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const n=e.currentAnimateTimings=this._visitTiming(t.timings,e),a=e.currentTimeline;n.delay&&(e.incrementTime(n.delay),a.snapshotCurrentStyles());const r=t.style;5==r.type?this.visitKeyframes(r,e):(e.incrementTime(n.duration),this.visitStyle(r,e),a.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const n=e.currentTimeline,a=e.currentAnimateTimings;!a&&n.getCurrentStyleProperties().length&&n.forwardFrame();const r=a&&a.easing||t.easing;t.isEmptyStep?n.applyEmptyStep(r):n.setStyles(t.styles,r,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const n=e.currentAnimateTimings,a=e.currentTimeline.duration,r=n.duration,i=e.createSubContext().currentTimeline;i.easing=n.easing,t.styles.forEach(t=>{i.forwardTime((t.offset||0)*r),i.setStyles(t.styles,t.easing,e.errors,e.options),i.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(i),e.transformIntoNewTimeline(a+r),e.previousNode=t}visitQuery(t,e){const n=e.currentTimeline.currentTime,a=t.options||{},r=a.delay?fv(a.delay):0;r&&(6===e.previousNode.type||0==n&&e.currentTimeline.getCurrentStyleProperties().length)&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=$v);let i=n;const s=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!a.optional,e.errors);e.currentQueryTotal=s.length;let o=null;s.forEach((n,a)=>{e.currentQueryIndex=a;const s=e.createSubContext(t.options,n);r&&s.delayNextStep(r),n===e.element&&(o=s.currentTimeline),Av(this,t.animation,s),s.currentTimeline.applyStylesToKeyframe(),i=Math.max(i,s.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(i),o&&(e.currentTimeline.mergeTimelineCollectedStyles(o),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const n=e.parentContext,a=e.currentTimeline,r=t.timings,i=Math.abs(r.duration),s=i*(e.currentQueryTotal-1);let o=i*e.currentQueryIndex;switch(r.duration<0?"reverse":r.easing){case"reverse":o=s-o;break;case"full":o=n.currentStaggerTime}const u=e.currentTimeline;o&&u.delayNextStep(o);const l=u.currentTime;Av(this,t.animation,e),e.previousNode=t,n.currentStaggerTime=a.currentTime-l+(a.startTime-n.currentTimeline.startTime)}}const $v={};class Zv{constructor(t,e,n,a,r,i,s,o){this._driver=t,this.element=e,this.subInstructions=n,this._enterClassName=a,this._leaveClassName=r,this.errors=i,this.timelines=s,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=$v,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=o||new Jv(this._driver,e,0),s.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const n=t;let a=this.options;null!=n.duration&&(a.duration=fv(n.duration)),null!=n.delay&&(a.delay=fv(n.delay));const r=n.params;if(r){let t=a.params;t||(t=this.options.params={}),Object.keys(r).forEach(n=>{e&&t.hasOwnProperty(n)||(t[n]=wv(r[n],t,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const n=t.params={};Object.keys(e).forEach(t=>{n[t]=e[t]})}}return t}createSubContext(t=null,e,n){const a=e||this.element,r=new Zv(this._driver,a,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(a,n||0));return r.previousNode=this.previousNode,r.currentAnimateTimings=this.currentAnimateTimings,r.options=this._copyOptions(),r.updateOptions(t),r.currentQueryIndex=this.currentQueryIndex,r.currentQueryTotal=this.currentQueryTotal,r.parentContext=this,this.subContextCount++,r}transformIntoNewTimeline(t){return this.previousNode=$v,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,n){const a={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+t.delay,easing:""},r=new Qv(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,a,t.stretchStartingKeyframe);return this.timelines.push(r),a}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,n,a,r,i){let s=[];if(a&&s.push(this.element),t.length>0){t=(t=t.replace(Hv,"."+this._enterClassName)).replace(Uv,"."+this._leaveClassName);let e=this._driver.query(this.element,t,1!=n);0!==n&&(e=n<0?e.slice(e.length+n,e.length):e.slice(0,n)),s.push(...e)}return r||0!=s.length||i.push(`\`query("${e}")\` returned zero elements. (Use \`query("${e}", { optional: true })\` if you wish to allow this.)`),s}}class Jv{constructor(t,e,n,a){this._driver=t,this.element=e,this.startTime=n,this._elementTimelineStylesLookup=a,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}}getCurrentStyleProperties(){return Object.keys(this._currentKeyframe)}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new Jv(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles[t]=e,this._globalTimelineStyles[t]=e,this._styleSummary[t]={time:this.currentTime,value:e}}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&(this._previousKeyframe.easing=t),Object.keys(this._globalTimelineStyles).forEach(t=>{this._backFill[t]=this._globalTimelineStyles[t]||K.a,this._currentKeyframe[t]=K.a}),this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,n,a){e&&(this._previousKeyframe.easing=e);const r=a&&a.params||{},i=function(t,e){const n={};let a;return t.forEach(t=>{"*"===t?(a=a||Object.keys(e),a.forEach(t=>{n[t]=K.a})):bv(t,!1,n)}),n}(t,this._globalTimelineStyles);Object.keys(i).forEach(t=>{const e=wv(i[t],r,n);this._pendingStyles[t]=e,this._localTimelineStyles.hasOwnProperty(t)||(this._backFill[t]=this._globalTimelineStyles.hasOwnProperty(t)?this._globalTimelineStyles[t]:K.a),this._updateStyle(t,e)})}applyStylesToKeyframe(){const t=this._pendingStyles,e=Object.keys(t);0!=e.length&&(this._pendingStyles={},e.forEach(e=>{this._currentKeyframe[e]=t[e]}),Object.keys(this._localTimelineStyles).forEach(t=>{this._currentKeyframe.hasOwnProperty(t)||(this._currentKeyframe[t]=this._localTimelineStyles[t])}))}snapshotCurrentStyles(){Object.keys(this._localTimelineStyles).forEach(t=>{const e=this._localTimelineStyles[t];this._pendingStyles[t]=e,this._updateStyle(t,e)})}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){Object.keys(t._styleSummary).forEach(e=>{const n=this._styleSummary[e],a=t._styleSummary[e];(!n||a.time>n.time)&&this._updateStyle(e,a.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,n=1===this._keyframes.size&&0===this.duration;let a=[];this._keyframes.forEach((r,i)=>{const s=bv(r,!0);Object.keys(s).forEach(n=>{const a=s[n];a==K.l?t.add(n):a==K.a&&e.add(n)}),n||(s.offset=i/this.duration),a.push(s)});const r=t.size?Sv(t.values()):[],i=e.size?Sv(e.values()):[];if(n){const t=a[0],e=pv(t);t.offset=0,e.offset=1,a=[t,e]}return Bv(this.element,a,r,i,this.duration,this.startTime,this.easing,!1)}}class Qv extends Jv{constructor(t,e,n,a,r,i,s=!1){super(t,e,i.delay),this.element=e,this.keyframes=n,this.preStyleProps=a,this.postStyleProps=r,this._stretchStartingKeyframe=s,this.timings={duration:i.duration,delay:i.delay,easing:i.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:n,easing:a}=this.timings;if(this._stretchStartingKeyframe&&e){const r=[],i=n+e,s=e/i,o=bv(t[0],!1);o.offset=0,r.push(o);const u=bv(t[0],!1);u.offset=Xv(s),r.push(u);const l=t.length-1;for(let a=1;a<=l;a++){let s=bv(t[a],!1);s.offset=Xv((e+s.offset*n)/i),r.push(s)}n=i,e=0,a="",t=r}return Bv(this.element,t,this.preStyleProps,this.postStyleProps,n,e,a,!0)}}function Xv(t,e=3){const n=Math.pow(10,e-1);return Math.round(t*n)/n}class tx{}class ex extends tx{normalizePropertyName(t,e){return Nv(t)}normalizeStyleValue(t,e,n,a){let r="";const i=n.toString().trim();if(nx[e]&&0!==n&&"0"!==n)if("number"==typeof n)r="px";else{const e=n.match(/^[+-]?[\d\.]+([a-z]*)$/);e&&0==e[1].length&&a.push(`Please provide a CSS unit value for ${t}:${n}`)}return i+r}}const nx=(()=>function(t){const e={};return t.forEach(t=>e[t]=!0),e}("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",")))();function ax(t,e,n,a,r,i,s,o,u,l,d,c,f){return{type:0,element:t,triggerName:e,isRemovalTransition:r,fromState:n,fromStyles:i,toState:a,toStyles:s,timelines:o,queriedElements:u,preStyleProps:l,postStyleProps:d,totalTime:c,errors:f}}const rx={};class ix{constructor(t,e,n){this._triggerName=t,this.ast=e,this._stateStyles=n}match(t,e,n,a){return function(t,e,n,a,r){return t.some(t=>t(e,n,a,r))}(this.ast.matchers,t,e,n,a)}buildStyles(t,e,n){const a=this._stateStyles["*"],r=this._stateStyles[t],i=a?a.buildStyles(e,n):{};return r?r.buildStyles(e,n):i}build(t,e,n,a,r,i,s,o,u,l){const d=[],c=this.ast.options&&this.ast.options.params||rx,f=this.buildStyles(n,s&&s.params||rx,d),h=o&&o.params||rx,g=this.buildStyles(a,h,d),p=new Set,b=new Map,m=new Map,y="void"===a,v={params:Object.assign({},c,h)},x=l?[]:Wv(t,e,this.ast.animation,r,i,f,g,v,u,d);let _=0;if(x.forEach(t=>{_=Math.max(t.duration+t.delay,_)}),d.length)return ax(e,this._triggerName,n,a,y,f,g,[],[],b,m,_,d);x.forEach(t=>{const n=t.element,a=Jy(b,n,{});t.preStyleProps.forEach(t=>a[t]=!0);const r=Jy(m,n,{});t.postStyleProps.forEach(t=>r[t]=!0),n!==e&&p.add(n)});const T=Sv(p.values());return ax(e,this._triggerName,n,a,y,f,g,x,T,b,m,_)}}class sx{constructor(t,e){this.styles=t,this.defaultParams=e}buildStyles(t,e){const n={},a=pv(this.defaultParams);return Object.keys(t).forEach(e=>{const n=t[e];null!=n&&(a[e]=n)}),this.styles.styles.forEach(t=>{if("string"!=typeof t){const r=t;Object.keys(r).forEach(t=>{let i=r[t];i.length>1&&(i=wv(i,a,e)),n[t]=i})}}),n}}class ox{constructor(t,e){this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(t=>{this.states[t.name]=new sx(t.style,t.options&&t.options.params||{})}),ux(this.states,"true","1"),ux(this.states,"false","0"),e.transitions.forEach(e=>{this.transitionFactories.push(new ix(t,e,this.states))}),this.fallbackTransition=new ix(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[(t,e)=>!0],options:null,queryCount:0,depCount:0},this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,n,a){return this.transitionFactories.find(r=>r.match(t,e,n,a))||null}matchStyles(t,e,n){return this.fallbackTransition.buildStyles(t,e,n)}}function ux(t,e,n){t.hasOwnProperty(e)?t.hasOwnProperty(n)||(t[n]=t[e]):t.hasOwnProperty(n)&&(t[e]=t[n])}const lx=new Yv;class dx{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._normalizer=n,this._animations={},this._playersById={},this.players=[]}register(t,e){const n=[],a=qv(this._driver,e,n);if(n.length)throw new Error(`Unable to build the animation due to the following errors: ${n.join("\n")}`);this._animations[t]=a}_buildPlayer(t,e,n){const a=t.element,r=Wy(0,this._normalizer,0,t.keyframes,e,n);return this._driver.animate(a,r,t.duration,t.delay,t.easing,[],!0)}create(t,e,n={}){const a=[],r=this._animations[t];let i;const s=new Map;if(r?(i=Wv(this._driver,e,r,"ng-enter","ng-leave",{},{},n,lx,a),i.forEach(t=>{const e=Jy(s,t.element,{});t.postStyleProps.forEach(t=>e[t]=null)})):(a.push("The requested animation doesn't exist or has already been destroyed"),i=[]),a.length)throw new Error(`Unable to create the animation due to the following errors: ${a.join("\n")}`);s.forEach((t,e)=>{Object.keys(t).forEach(n=>{t[n]=this._driver.computeStyle(e,n,K.a)})});const o=Uy(i.map(t=>{const e=s.get(t.element);return this._buildPlayer(t,{},e)}));return this._playersById[t]=o,o.onDestroy(()=>this.destroy(t)),this.players.push(o),o}destroy(t){const e=this._getPlayer(t);e.destroy(),delete this._playersById[t];const n=this.players.indexOf(e);n>=0&&this.players.splice(n,1)}_getPlayer(t){const e=this._playersById[t];if(!e)throw new Error(`Unable to find the timeline player referenced by ${t}`);return e}listen(t,e,n,a){const r=Zy(e,"","","");return Ky(this._getPlayer(t),n,r,a),()=>{}}command(t,e,n,a){if("register"==n)return void this.register(t,a[0]);if("create"==n)return void this.create(t,e,a[0]||{});const r=this._getPlayer(t);switch(n){case"play":r.play();break;case"pause":r.pause();break;case"reset":r.reset();break;case"restart":r.restart();break;case"finish":r.finish();break;case"init":r.init();break;case"setPosition":r.setPosition(parseFloat(a[0]));break;case"destroy":this.destroy(t)}}}const cx=[],fx={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},hx={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0};class gx{constructor(t,e=""){this.namespaceId=e;const n=t&&t.hasOwnProperty("value");if(this.value=null!=(a=n?t.value:t)?a:null,n){const e=pv(t);delete e.value,this.options=e}else this.options={};var a;this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(t){const e=t.params;if(e){const t=this.options.params;Object.keys(e).forEach(n=>{null==t[n]&&(t[n]=e[n])})}}}const px=new gx("void");class bx{constructor(t,e,n){this.id=t,this.hostElement=e,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,Ox(e,this._hostClassName)}listen(t,e,n,a){if(!this._triggers.hasOwnProperty(e))throw new Error(`Unable to listen on the animation trigger event "${n}" because the animation trigger "${e}" doesn't exist!`);if(null==n||0==n.length)throw new Error(`Unable to listen on the animation trigger "${e}" because the provided event is undefined!`);if("start"!=(r=n)&&"done"!=r)throw new Error(`The provided animation trigger event "${n}" for the animation trigger "${e}" is not supported!`);var r;const i=Jy(this._elementListeners,t,[]),s={name:e,phase:n,callback:a};i.push(s);const o=Jy(this._engine.statesByElement,t,{});return o.hasOwnProperty(e)||(Ox(t,"ng-trigger"),Ox(t,"ng-trigger-"+e),o[e]=px),()=>{this._engine.afterFlush(()=>{const t=i.indexOf(s);t>=0&&i.splice(t,1),this._triggers[e]||delete o[e]})}}register(t,e){return!this._triggers[t]&&(this._triggers[t]=e,!0)}_getTrigger(t){const e=this._triggers[t];if(!e)throw new Error(`The provided animation trigger "${t}" has not been registered!`);return e}trigger(t,e,n,a=!0){const r=this._getTrigger(e),i=new yx(this.id,e,t);let s=this._engine.statesByElement.get(t);s||(Ox(t,"ng-trigger"),Ox(t,"ng-trigger-"+e),this._engine.statesByElement.set(t,s={}));let o=s[e];const u=new gx(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&o&&u.absorbOptions(o.options),s[e]=u,o||(o=px),"void"!==u.value&&o.value===u.value){if(!function(t,e){const n=Object.keys(t),a=Object.keys(e);if(n.length!=a.length)return!1;for(let r=0;r<n.length;r++){const a=n[r];if(!e.hasOwnProperty(a)||t[a]!==e[a])return!1}return!0}(o.params,u.params)){const e=[],n=r.matchStyles(o.value,o.params,e),a=r.matchStyles(u.value,u.params,e);e.length?this._engine.reportError(e):this._engine.afterFlush(()=>{xv(t,n),vv(t,a)})}return}const l=Jy(this._engine.playersByElement,t,[]);l.forEach(t=>{t.namespaceId==this.id&&t.triggerName==e&&t.queued&&t.destroy()});let d=r.matchTransition(o.value,u.value,t,u.params),c=!1;if(!d){if(!a)return;d=r.fallbackTransition,c=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:d,fromState:o,toState:u,player:i,isFallbackTransition:c}),c||(Ox(t,"ng-animate-queued"),i.onStart(()=>{wx(t,"ng-animate-queued")})),i.onDone(()=>{let e=this.players.indexOf(i);e>=0&&this.players.splice(e,1);const n=this._engine.playersByElement.get(t);if(n){let t=n.indexOf(i);t>=0&&n.splice(t,1)}}),this.players.push(i),l.push(i),i}deregister(t){delete this._triggers[t],this._engine.statesByElement.forEach((e,n)=>{delete e[t]}),this._elementListeners.forEach((e,n)=>{this._elementListeners.set(n,e.filter(e=>e.name!=t))})}clearElementCache(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);const e=this._engine.playersByElement.get(t);e&&(e.forEach(t=>t.destroy()),this._engine.playersByElement.delete(t))}_signalRemovalForInnerTriggers(t,e,n=!1){this._engine.driver.query(t,".ng-trigger",!0).forEach(t=>{if(t.__ng_removed)return;const n=this._engine.fetchNamespacesByElement(t);n.size?n.forEach(n=>n.triggerLeaveAnimation(t,e,!1,!0)):this.clearElementCache(t)})}triggerLeaveAnimation(t,e,n,a){const r=this._engine.statesByElement.get(t);if(r){const i=[];if(Object.keys(r).forEach(e=>{if(this._triggers[e]){const n=this.trigger(t,e,"void",a);n&&i.push(n)}}),i.length)return this._engine.markElementAsRemoved(this.id,t,!0,e),n&&Uy(i).onDone(()=>this._engine.processLeaveNode(t)),!0}return!1}prepareLeaveAnimationListeners(t){const e=this._elementListeners.get(t);if(e){const n=new Set;e.forEach(e=>{const a=e.name;if(n.has(a))return;n.add(a);const r=this._triggers[a].fallbackTransition,i=this._engine.statesByElement.get(t)[a]||px,s=new gx("void"),o=new yx(this.id,a,t);this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:a,transition:r,fromState:i,toState:s,player:o,isFallbackTransition:!0})})}}removeNode(t,e){const n=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e,!0),this.triggerLeaveAnimation(t,e,!0))return;let a=!1;if(n.totalAnimations){const e=n.players.length?n.playersByQueriedElement.get(t):[];if(e&&e.length)a=!0;else{let e=t;for(;e=e.parentNode;)if(n.statesByElement.get(e)){a=!0;break}}}this.prepareLeaveAnimationListeners(t),a?n.markElementAsRemoved(this.id,t,!1,e):(n.afterFlush(()=>this.clearElementCache(t)),n.destroyInnerAnimations(t),n._onRemovalComplete(t,e))}insertNode(t,e){Ox(t,this._hostClassName)}drainQueuedTransitions(t){const e=[];return this._queue.forEach(n=>{const a=n.player;if(a.destroyed)return;const r=n.element,i=this._elementListeners.get(r);i&&i.forEach(e=>{if(e.name==n.triggerName){const a=Zy(r,n.triggerName,n.fromState.value,n.toState.value);a._data=t,Ky(n.player,e.phase,a,e.callback)}}),a.markedForDestroy?this._engine.afterFlush(()=>{a.destroy()}):e.push(n)}),this._queue=[],e.sort((t,e)=>{const n=t.transition.ast.depCount,a=e.transition.ast.depCount;return 0==n||0==a?n-a:this._engine.driver.containsElement(t.element,e.element)?1:-1})}destroy(t){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,t)}elementContainsData(t){let e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(e=>e.element===t)||e,e}}class mx{constructor(t,e,n){this.bodyNode=t,this.driver=e,this._normalizer=n,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(t,e)=>{}}_onRemovalComplete(t,e){this.onRemovalComplete(t,e)}get queuedPlayers(){const t=[];return this._namespaceList.forEach(e=>{e.players.forEach(e=>{e.queued&&t.push(e)})}),t}createNamespace(t,e){const n=new bx(t,e,this);return e.parentNode?this._balanceNamespaceList(n,e):(this.newHostElements.set(e,n),this.collectEnterElement(e)),this._namespaceLookup[t]=n}_balanceNamespaceList(t,e){const n=this._namespaceList.length-1;if(n>=0){let a=!1;for(let r=n;r>=0;r--)if(this.driver.containsElement(this._namespaceList[r].hostElement,e)){this._namespaceList.splice(r+1,0,t),a=!0;break}a||this._namespaceList.splice(0,0,t)}else this._namespaceList.push(t);return this.namespacesByHostElement.set(e,t),t}register(t,e){let n=this._namespaceLookup[t];return n||(n=this.createNamespace(t,e)),n}registerTrigger(t,e,n){let a=this._namespaceLookup[t];a&&a.register(e,n)&&this.totalAnimations++}destroy(t,e){if(!t)return;const n=this._fetchNamespace(t);this.afterFlush(()=>{this.namespacesByHostElement.delete(n.hostElement),delete this._namespaceLookup[t];const e=this._namespaceList.indexOf(n);e>=0&&this._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(()=>n.destroy(e))}_fetchNamespace(t){return this._namespaceLookup[t]}fetchNamespacesByElement(t){const e=new Set,n=this.statesByElement.get(t);if(n){const t=Object.keys(n);for(let a=0;a<t.length;a++){const r=n[t[a]].namespaceId;if(r){const t=this._fetchNamespace(r);t&&e.add(t)}}}return e}trigger(t,e,n,a){if(vx(e)){const r=this._fetchNamespace(t);if(r)return r.trigger(e,n,a),!0}return!1}insertNode(t,e,n,a){if(!vx(e))return;const r=e.__ng_removed;if(r&&r.setForRemoval){r.setForRemoval=!1,r.setForMove=!0;const t=this.collectedLeaveElements.indexOf(e);t>=0&&this.collectedLeaveElements.splice(t,1)}if(t){const a=this._fetchNamespace(t);a&&a.insertNode(e,n)}a&&this.collectEnterElement(e)}collectEnterElement(t){this.collectedEnterElements.push(t)}markElementAsDisabled(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),Ox(t,"ng-animate-disabled")):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),wx(t,"ng-animate-disabled"))}removeNode(t,e,n,a){if(vx(e)){const r=t?this._fetchNamespace(t):null;if(r?r.removeNode(e,a):this.markElementAsRemoved(t,e,!1,a),n){const n=this.namespacesByHostElement.get(e);n&&n.id!==t&&n.removeNode(e,a)}}else this._onRemovalComplete(e,a)}markElementAsRemoved(t,e,n,a){this.collectedLeaveElements.push(e),e.__ng_removed={namespaceId:t,setForRemoval:a,hasAnimation:n,removedBeforeQueried:!1}}listen(t,e,n,a,r){return vx(e)?this._fetchNamespace(t).listen(e,n,a,r):()=>{}}_buildInstruction(t,e,n,a,r){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,n,a,t.fromState.options,t.toState.options,e,r)}destroyInnerAnimations(t){let e=this.driver.query(t,".ng-trigger",!0);e.forEach(t=>this.destroyActiveAnimationsForElement(t)),0!=this.playersByQueriedElement.size&&(e=this.driver.query(t,".ng-animating",!0),e.forEach(t=>this.finishActiveQueriedAnimationOnElement(t)))}destroyActiveAnimationsForElement(t){const e=this.playersByElement.get(t);e&&e.forEach(t=>{t.queued?t.markedForDestroy=!0:t.destroy()})}finishActiveQueriedAnimationOnElement(t){const e=this.playersByQueriedElement.get(t);e&&e.forEach(t=>t.finish())}whenRenderingDone(){return new Promise(t=>{if(this.players.length)return Uy(this.players).onDone(()=>t());t()})}processLeaveNode(t){const e=t.__ng_removed;if(e&&e.setForRemoval){if(t.__ng_removed=fx,e.namespaceId){this.destroyInnerAnimations(t);const n=this._fetchNamespace(e.namespaceId);n&&n.clearElementCache(t)}this._onRemovalComplete(t,e.setForRemoval)}this.driver.matchesElement(t,".ng-animate-disabled")&&this.markElementAsDisabled(t,!1),this.driver.query(t,".ng-animate-disabled",!0).forEach(t=>{this.markElementAsDisabled(t,!1)})}flush(t=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((t,e)=>this._balanceNamespaceList(t,e)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let n=0;n<this.collectedEnterElements.length;n++)Ox(this.collectedEnterElements[n],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const n=[];try{e=this._flushAnimations(n,t)}finally{for(let t=0;t<n.length;t++)n[t]()}}else for(let n=0;n<this.collectedLeaveElements.length;n++)this.processLeaveNode(this.collectedLeaveElements[n]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(t=>t()),this._flushFns=[],this._whenQuietFns.length){const t=this._whenQuietFns;this._whenQuietFns=[],e.length?Uy(e).onDone(()=>{t.forEach(t=>t())}):t.forEach(t=>t())}}reportError(t){throw new Error(`Unable to process animations due to the following failed trigger transitions\n ${t.join("\n")}`)}_flushAnimations(t,e){const n=new Yv,a=[],r=new Map,i=[],s=new Map,o=new Map,u=new Map,l=new Set;this.disabledNodes.forEach(t=>{l.add(t);const e=this.driver.query(t,".ng-animate-queued",!0);for(let n=0;n<e.length;n++)l.add(e[n])});const d=this.bodyNode,c=Array.from(this.statesByElement.keys()),f=Tx(c,this.collectedEnterElements),h=new Map;let g=0;f.forEach((t,e)=>{const n="ng-enter"+g++;h.set(e,n),t.forEach(t=>Ox(t,n))});const p=[],b=new Set,m=new Set;for(let A=0;A<this.collectedLeaveElements.length;A++){const t=this.collectedLeaveElements[A],e=t.__ng_removed;e&&e.setForRemoval&&(p.push(t),b.add(t),e.hasAnimation?this.driver.query(t,".ng-star-inserted",!0).forEach(t=>b.add(t)):m.add(t))}const y=new Map,v=Tx(c,Array.from(b));v.forEach((t,e)=>{const n="ng-leave"+g++;y.set(e,n),t.forEach(t=>Ox(t,n))}),t.push(()=>{f.forEach((t,e)=>{const n=h.get(e);t.forEach(t=>wx(t,n))}),v.forEach((t,e)=>{const n=y.get(e);t.forEach(t=>wx(t,n))}),p.forEach(t=>{this.processLeaveNode(t)})});const x=[],_=[];for(let A=this._namespaceList.length-1;A>=0;A--)this._namespaceList[A].drainQueuedTransitions(e).forEach(t=>{const e=t.player,r=t.element;if(x.push(e),this.collectedEnterElements.length){const t=r.__ng_removed;if(t&&t.setForMove)return void e.destroy()}const l=!d||!this.driver.containsElement(d,r),c=y.get(r),f=h.get(r),g=this._buildInstruction(t,n,f,c,l);if(!g.errors||!g.errors.length)return l?(e.onStart(()=>xv(r,g.fromStyles)),e.onDestroy(()=>vv(r,g.toStyles)),void a.push(e)):t.isFallbackTransition?(e.onStart(()=>xv(r,g.fromStyles)),e.onDestroy(()=>vv(r,g.toStyles)),void a.push(e)):(g.timelines.forEach(t=>t.stretchStartingKeyframe=!0),n.append(r,g.timelines),i.push({instruction:g,player:e,element:r}),g.queriedElements.forEach(t=>Jy(s,t,[]).push(e)),g.preStyleProps.forEach((t,e)=>{const n=Object.keys(t);if(n.length){let t=o.get(e);t||o.set(e,t=new Set),n.forEach(e=>t.add(e))}}),void g.postStyleProps.forEach((t,e)=>{const n=Object.keys(t);let a=u.get(e);a||u.set(e,a=new Set),n.forEach(t=>a.add(t))}));_.push(g)});if(_.length){const t=[];_.forEach(e=>{t.push(`@${e.triggerName} has failed due to:\n`),e.errors.forEach(e=>t.push(`- ${e}\n`))}),x.forEach(t=>t.destroy()),this.reportError(t)}const T=new Map,O=new Map;i.forEach(t=>{const e=t.element;n.has(e)&&(O.set(e,e),this._beforeAnimationBuild(t.player.namespaceId,t.instruction,T))}),a.forEach(t=>{const e=t.element;this._getPreviousPlayers(e,!1,t.namespaceId,t.triggerName,null).forEach(t=>{Jy(T,e,[]).push(t),t.destroy()})});const w=p.filter(t=>Ix(t,o,u)),S=new Map;_x(S,this.driver,m,u,K.a).forEach(t=>{Ix(t,o,u)&&w.push(t)});const I=new Map;f.forEach((t,e)=>{_x(I,this.driver,new Set(t),o,K.l)}),w.forEach(t=>{const e=S.get(t),n=I.get(t);S.set(t,Object.assign({},e,n))});const N=[],C=[],R={};i.forEach(t=>{const{element:e,player:i,instruction:s}=t;if(n.has(e)){if(l.has(e))return i.onDestroy(()=>vv(e,s.toStyles)),i.disabled=!0,i.overrideTotalTime(s.totalTime),void a.push(i);let t=R;if(O.size>1){let n=e;const a=[];for(;n=n.parentNode;){const e=O.get(n);if(e){t=e;break}a.push(n)}a.forEach(e=>O.set(e,t))}const n=this._buildAnimation(i.namespaceId,s,T,r,I,S);if(i.setRealPlayer(n),t===R)N.push(i);else{const e=this.playersByElement.get(t);e&&e.length&&(i.parentPlayer=Uy(e)),a.push(i)}}else xv(e,s.fromStyles),i.onDestroy(()=>vv(e,s.toStyles)),C.push(i),l.has(e)&&a.push(i)}),C.forEach(t=>{const e=r.get(t.element);if(e&&e.length){const n=Uy(e);t.setRealPlayer(n)}}),a.forEach(t=>{t.parentPlayer?t.syncPlayerEvents(t.parentPlayer):t.destroy()});for(let A=0;A<p.length;A++){const t=p[A],e=t.__ng_removed;if(wx(t,"ng-leave"),e&&e.hasAnimation)continue;let n=[];if(s.size){let e=s.get(t);e&&e.length&&n.push(...e);let a=this.driver.query(t,".ng-animating",!0);for(let t=0;t<a.length;t++){let e=s.get(a[t]);e&&e.length&&n.push(...e)}}const a=n.filter(t=>!t.destroyed);a.length?Sx(this,t,a):this.processLeaveNode(t)}return p.length=0,N.forEach(t=>{this.players.push(t),t.onDone(()=>{t.destroy();const e=this.players.indexOf(t);this.players.splice(e,1)}),t.play()}),N}elementContainsData(t,e){let n=!1;const a=e.__ng_removed;return a&&a.setForRemoval&&(n=!0),this.playersByElement.has(e)&&(n=!0),this.playersByQueriedElement.has(e)&&(n=!0),this.statesByElement.has(e)&&(n=!0),this._fetchNamespace(t).elementContainsData(e)||n}afterFlush(t){this._flushFns.push(t)}afterFlushAnimationsDone(t){this._whenQuietFns.push(t)}_getPreviousPlayers(t,e,n,a,r){let i=[];if(e){const e=this.playersByQueriedElement.get(t);e&&(i=e)}else{const e=this.playersByElement.get(t);if(e){const t=!r||"void"==r;e.forEach(e=>{e.queued||(t||e.triggerName==a)&&i.push(e)})}}return(n||a)&&(i=i.filter(t=>!(n&&n!=t.namespaceId||a&&a!=t.triggerName))),i}_beforeAnimationBuild(t,e,n){const a=e.element,r=e.isRemovalTransition?void 0:t,i=e.isRemovalTransition?void 0:e.triggerName;for(const s of e.timelines){const t=s.element,o=t!==a,u=Jy(n,t,[]);this._getPreviousPlayers(t,o,r,i,e.toState).forEach(t=>{const e=t.getRealPlayer();e.beforeDestroy&&e.beforeDestroy(),t.destroy(),u.push(t)})}xv(a,e.fromStyles)}_buildAnimation(t,e,n,a,r,i){const s=e.triggerName,o=e.element,u=[],l=new Set,d=new Set,c=e.timelines.map(e=>{const c=e.element;l.add(c);const f=c.__ng_removed;if(f&&f.removedBeforeQueried)return new K.d(e.duration,e.delay);const h=c!==o,g=function(t){const e=[];return function t(e,n){for(let a=0;a<e.length;a++){const r=e[a];r instanceof K.k?t(r.players,n):n.push(r)}}(t,e),e}((n.get(c)||cx).map(t=>t.getRealPlayer())).filter(t=>!!t.element&&t.element===c),p=r.get(c),b=i.get(c),m=Wy(0,this._normalizer,0,e.keyframes,p,b),y=this._buildPlayer(e,m,g);if(e.subTimeline&&a&&d.add(c),h){const e=new yx(t,s,c);e.setRealPlayer(y),u.push(e)}return y});u.forEach(t=>{Jy(this.playersByQueriedElement,t.element,[]).push(t),t.onDone(()=>function(t,e,n){let a;if(t instanceof Map){if(a=t.get(e),a){if(a.length){const t=a.indexOf(n);a.splice(t,1)}0==a.length&&t.delete(e)}}else if(a=t[e],a){if(a.length){const t=a.indexOf(n);a.splice(t,1)}0==a.length&&delete t[e]}return a}(this.playersByQueriedElement,t.element,t))}),l.forEach(t=>Ox(t,"ng-animating"));const f=Uy(c);return f.onDestroy(()=>{l.forEach(t=>wx(t,"ng-animating")),vv(o,e.toStyles)}),d.forEach(t=>{Jy(a,t,[]).push(f)}),f}_buildPlayer(t,e,n){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,n):new K.d(t.duration,t.delay)}}class yx{constructor(t,e,n){this.namespaceId=t,this.triggerName=e,this.element=n,this._player=new K.d,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(t){this._containsRealPlayer||(this._player=t,Object.keys(this._queuedCallbacks).forEach(e=>{this._queuedCallbacks[e].forEach(n=>Ky(t,e,void 0,n))}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(t){this.totalTime=t}syncPlayerEvents(t){const e=this._player;e.triggerCallback&&t.onStart(()=>e.triggerCallback("start")),t.onDone(()=>this.finish()),t.onDestroy(()=>this.destroy())}_queueEvent(t,e){Jy(this._queuedCallbacks,t,[]).push(e)}onDone(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)}onStart(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)}onDestroy(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(t){this.queued||this._player.setPosition(t)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(t){const e=this._player;e.triggerCallback&&e.triggerCallback(t)}}function vx(t){return t&&1===t.nodeType}function xx(t,e){const n=t.style.display;return t.style.display=null!=e?e:"none",n}function _x(t,e,n,a,r){const i=[];n.forEach(t=>i.push(xx(t)));const s=[];a.forEach((n,a)=>{const i={};n.forEach(t=>{const n=i[t]=e.computeStyle(a,t,r);n&&0!=n.length||(a.__ng_removed=hx,s.push(a))}),t.set(a,i)});let o=0;return n.forEach(t=>xx(t,i[o++])),s}function Tx(t,e){const n=new Map;if(t.forEach(t=>n.set(t,[])),0==e.length)return n;const a=new Set(e),r=new Map;return e.forEach(t=>{const e=function t(e){if(!e)return 1;let i=r.get(e);if(i)return i;const s=e.parentNode;return i=n.has(s)?s:a.has(s)?1:t(s),r.set(e,i),i}(t);1!==e&&n.get(e).push(t)}),n}function Ox(t,e){if(t.classList)t.classList.add(e);else{let n=t.$$classes;n||(n=t.$$classes={}),n[e]=!0}}function wx(t,e){if(t.classList)t.classList.remove(e);else{let n=t.$$classes;n&&delete n[e]}}function Sx(t,e,n){Uy(n).onDone(()=>t.processLeaveNode(e))}function Ix(t,e,n){const a=n.get(t);if(!a)return!1;let r=e.get(t);return r?a.forEach(t=>r.add(t)):e.set(t,a),n.delete(t),!0}class Nx{constructor(t,e,n){this.bodyNode=t,this._driver=e,this._triggerCache={},this.onRemovalComplete=(t,e)=>{},this._transitionEngine=new mx(t,e,n),this._timelineEngine=new dx(t,e,n),this._transitionEngine.onRemovalComplete=(t,e)=>this.onRemovalComplete(t,e)}registerTrigger(t,e,n,a,r){const i=t+"-"+a;let s=this._triggerCache[i];if(!s){const t=[],e=qv(this._driver,r,t);if(t.length)throw new Error(`The animation trigger "${a}" has failed to build due to the following errors:\n - ${t.join("\n - ")}`);s=function(t,e){return new ox(t,e)}(a,e),this._triggerCache[i]=s}this._transitionEngine.registerTrigger(e,a,s)}register(t,e){this._transitionEngine.register(t,e)}destroy(t,e){this._transitionEngine.destroy(t,e)}onInsert(t,e,n,a){this._transitionEngine.insertNode(t,e,n,a)}onRemove(t,e,n,a){this._transitionEngine.removeNode(t,e,a||!1,n)}disableAnimations(t,e){this._transitionEngine.markElementAsDisabled(t,e)}process(t,e,n,a){if("@"==n.charAt(0)){const[t,r]=Qy(n);this._timelineEngine.command(t,e,r,a)}else this._transitionEngine.trigger(t,e,n,a)}listen(t,e,n,a,r){if("@"==n.charAt(0)){const[t,a]=Qy(n);return this._timelineEngine.listen(t,e,a,r)}return this._transitionEngine.listen(t,e,n,a,r)}flush(t=-1){this._transitionEngine.flush(t)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}function Cx(t,e){let n=null,a=null;return Array.isArray(e)&&e.length?(n=Ax(e[0]),e.length>1&&(a=Ax(e[e.length-1]))):e&&(n=Ax(e)),n||a?new Rx(t,n,a):null}let Rx=(()=>{class t{constructor(e,n,a){this._element=e,this._startStyles=n,this._endStyles=a,this._state=0;let r=t.initialStylesByElement.get(e);r||t.initialStylesByElement.set(e,r={}),this._initialStyles=r}start(){this._state<1&&(this._startStyles&&vv(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(vv(this._element,this._initialStyles),this._endStyles&&(vv(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(xv(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(xv(this._element,this._endStyles),this._endStyles=null),vv(this._element,this._initialStyles),this._state=3)}}return t.initialStylesByElement=new WeakMap,t})();function Ax(t){let e=null;const n=Object.keys(t);for(let a=0;a<n.length;a++){const r=n[a];kx(r)&&(e=e||{},e[r]=t[r])}return e}function kx(t){return"display"===t||"position"===t}class Ex{constructor(t,e,n,a,r,i,s){this._element=t,this._name=e,this._duration=n,this._delay=a,this._easing=r,this._fillMode=i,this._onDoneFn=s,this._finished=!1,this._destroyed=!1,this._startTime=0,this._position=0,this._eventFn=t=>this._handleCallback(t)}apply(){!function(t,e){const n=jx(t,"").trim();n.length&&(function(t,e){let n=0;for(let a=0;a<t.length;a++)","===t.charAt(a)&&n++}(n),e=`${n}, ${e}`),qx(t,"",e)}(this._element,`${this._duration}ms ${this._easing} ${this._delay}ms 1 normal ${this._fillMode} ${this._name}`),Mx(this._element,this._eventFn,!1),this._startTime=Date.now()}pause(){Lx(this._element,this._name,"paused")}resume(){Lx(this._element,this._name,"running")}setPosition(t){const e=Dx(this._element,this._name);this._position=t*this._duration,qx(this._element,"Delay",`-${this._position}ms`,e)}getPosition(){return this._position}_handleCallback(t){const e=t._ngTestManualTimestamp||Date.now(),n=1e3*parseFloat(t.elapsedTime.toFixed(3));t.animationName==this._name&&Math.max(e-this._startTime,0)>=this._delay&&n>=this._duration&&this.finish()}finish(){this._finished||(this._finished=!0,this._onDoneFn(),Mx(this._element,this._eventFn,!0))}destroy(){this._destroyed||(this._destroyed=!0,this.finish(),function(t,e){const n=jx(t,"").split(","),a=Px(n,e);a>=0&&(n.splice(a,1),qx(t,"",n.join(",")))}(this._element,this._name))}}function Lx(t,e,n){qx(t,"PlayState",n,Dx(t,e))}function Dx(t,e){const n=jx(t,"");return n.indexOf(",")>0?Px(n.split(","),e):Px([n],e)}function Px(t,e){for(let n=0;n<t.length;n++)if(t[n].indexOf(e)>=0)return n;return-1}function Mx(t,e,n){n?t.removeEventListener("animationend",e):t.addEventListener("animationend",e)}function qx(t,e,n,a){const r="animation"+e;if(null!=a){const e=t.style[r];if(e.length){const t=e.split(",");t[a]=n,n=t.join(",")}}t.style[r]=n}function jx(t,e){return t.style["animation"+e]}class Fx{constructor(t,e,n,a,r,i,s,o){this.element=t,this.keyframes=e,this.animationName=n,this._duration=a,this._delay=r,this._finalStyles=s,this._specialStyles=o,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this.currentSnapshot={},this._state=0,this.easing=i||"linear",this.totalTime=a+r,this._buildStyler()}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}destroy(){this.init(),this._state>=4||(this._state=4,this._styler.destroy(),this._flushStartFns(),this._flushDoneFns(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}_flushDoneFns(){this._onDoneFns.forEach(t=>t()),this._onDoneFns=[]}_flushStartFns(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}finish(){this.init(),this._state>=3||(this._state=3,this._styler.finish(),this._flushStartFns(),this._specialStyles&&this._specialStyles.finish(),this._flushDoneFns())}setPosition(t){this._styler.setPosition(t)}getPosition(){return this._styler.getPosition()}hasStarted(){return this._state>=2}init(){this._state>=1||(this._state=1,this._styler.apply(),this._delay&&this._styler.pause())}play(){this.init(),this.hasStarted()||(this._flushStartFns(),this._state=2,this._specialStyles&&this._specialStyles.start()),this._styler.resume()}pause(){this.init(),this._styler.pause()}restart(){this.reset(),this.play()}reset(){this._styler.destroy(),this._buildStyler(),this._styler.apply()}_buildStyler(){this._styler=new Ex(this.element,this.animationName,this._duration,this._delay,this.easing,"forwards",()=>this.finish())}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}beforeDestroy(){this.init();const t={};if(this.hasStarted()){const e=this._state>=3;Object.keys(this._finalStyles).forEach(n=>{"offset"!=n&&(t[n]=e?this._finalStyles[n]:kv(this.element,n))})}this.currentSnapshot=t}}class Gx extends K.d{constructor(t,e){super(),this.element=t,this._startingStyles={},this.__initialized=!1,this._styles=lv(e)}init(){!this.__initialized&&this._startingStyles&&(this.__initialized=!0,Object.keys(this._styles).forEach(t=>{this._startingStyles[t]=this.element.style[t]}),super.init())}play(){this._startingStyles&&(this.init(),Object.keys(this._styles).forEach(t=>this.element.style.setProperty(t,this._styles[t])),super.play())}destroy(){this._startingStyles&&(Object.keys(this._startingStyles).forEach(t=>{const e=this._startingStyles[t];e?this.element.style.setProperty(t,e):this.element.style.removeProperty(t)}),this._startingStyles=null,super.destroy())}}class Vx{constructor(){this._count=0,this._head=document.querySelector("head"),this._warningIssued=!1}validateStyleProperty(t){return iv(t)}matchesElement(t,e){return sv(t,e)}containsElement(t,e){return ov(t,e)}query(t,e,n){return uv(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}buildKeyframeElement(t,e,n){n=n.map(t=>lv(t));let a=`@keyframes ${e} {\n`,r="";n.forEach(t=>{r=" ";const e=parseFloat(t.offset);a+=`${r}${100*e}% {\n`,r+=" ",Object.keys(t).forEach(e=>{const n=t[e];switch(e){case"offset":return;case"easing":return void(n&&(a+=`${r}animation-timing-function: ${n};\n`));default:return void(a+=`${r}${e}: ${n};\n`)}}),a+=`${r}}\n`}),a+="}\n";const i=document.createElement("style");return i.innerHTML=a,i}animate(t,e,n,a,r,i=[],s){s&&this._notifyFaultyScrubber();const o=i.filter(t=>t instanceof Fx),u={};Cv(n,a)&&o.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>u[t]=e[t])});const l=function(t){let e={};return t&&(Array.isArray(t)?t:[t]).forEach(t=>{Object.keys(t).forEach(n=>{"offset"!=n&&"easing"!=n&&(e[n]=t[n])})}),e}(e=Rv(t,e,u));if(0==n)return new Gx(t,l);const d=`gen_css_kf_${this._count++}`,c=this.buildKeyframeElement(t,d,e);document.querySelector("head").appendChild(c);const f=Cx(t,e),h=new Fx(t,e,d,n,a,r,l,f);return h.onDestroy(()=>{var t;(t=c).parentNode.removeChild(t)}),h}_notifyFaultyScrubber(){this._warningIssued||(console.warn("@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\n","  visit http://bit.ly/IWukam to learn more about using the web-animation-js polyfill."),this._warningIssued=!0)}}class zx{constructor(t,e,n,a){this.element=t,this.keyframes=e,this.options=n,this._specialStyles=a,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:{},this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_triggerWebAnimation(t,e,n){return t.animate(e,n)}onStart(t){this._onStartFns.push(t)}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}setPosition(t){this.domPlayer.currentTime=t*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const t={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(e=>{"offset"!=e&&(t[e]=this._finished?this._finalKeyframe[e]:kv(this.element,e))}),this.currentSnapshot=t}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}}class Bx{constructor(){this._isNativeImpl=/\{\s*\[native\s+code\]\s*\}/.test(Yx().toString()),this._cssKeyframesDriver=new Vx}validateStyleProperty(t){return iv(t)}matchesElement(t,e){return sv(t,e)}containsElement(t,e){return ov(t,e)}query(t,e,n){return uv(t,e,n)}computeStyle(t,e,n){return window.getComputedStyle(t)[e]}overrideWebAnimationsSupport(t){this._isNativeImpl=t}animate(t,e,n,a,r,i=[],s){if(!s&&!this._isNativeImpl)return this._cssKeyframesDriver.animate(t,e,n,a,r,i);const o={duration:n,delay:a,fill:0==a?"both":"forwards"};r&&(o.easing=r);const u={},l=i.filter(t=>t instanceof zx);Cv(n,a)&&l.forEach(t=>{let e=t.currentSnapshot;Object.keys(e).forEach(t=>u[t]=e[t])});const d=Cx(t,e=Rv(t,e=e.map(t=>bv(t,!1)),u));return new zx(t,e,o,d)}}function Yx(){return"undefined"!=typeof window&&void 0!==window.document&&Element.prototype.animate||{}}class Hx extends K.b{constructor(t,e){super(),this._nextAnimationId=0,this._renderer=t.createRenderer(e.body,{id:"0",encapsulation:s.ViewEncapsulation.None,styles:[],data:{animation:[]}})}build(t){const e=this._nextAnimationId.toString();this._nextAnimationId++;const n=Array.isArray(t)?Object(K.f)(t):t;return Kx(this._renderer,null,e,"register",[n]),new Ux(e,this._renderer)}}class Ux extends K.c{constructor(t,e){super(),this._id=t,this._renderer=e}create(t,e){return new Wx(this._id,t,e||{},this._renderer)}}class Wx{constructor(t,e,n,a){this.id=t,this.element=e,this._renderer=a,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}_listen(t,e){return this._renderer.listen(this.element,`@@${this.id}:${t}`,e)}_command(t,...e){return Kx(this._renderer,this.element,this.id,t,e)}onDone(t){this._listen("done",t)}onStart(t){this._listen("start",t)}onDestroy(t){this._listen("destroy",t)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset")}setPosition(t){this._command("setPosition",t)}getPosition(){return 0}}function Kx(t,e,n,a,r){return t.setProperty(e,`@@${n}:${a}`,r)}class $x{constructor(t,e,n){this.delegate=t,this.engine=e,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),e.onRemovalComplete=(t,e)=>{e&&e.parentNode(t)&&e.removeChild(t.parentNode,t)}}createRenderer(t,e){const n=this.delegate.createRenderer(t,e);if(!(t&&e&&e.data&&e.data.animation)){let t=this._rendererCache.get(n);return t||(t=new Zx("",n,this.engine),this._rendererCache.set(n,t)),t}const a=e.id,r=e.id+"-"+this._currentId;return this._currentId++,this.engine.register(r,t),e.data.animation.forEach(e=>this.engine.registerTrigger(a,r,t,e.name,e)),new Jx(this,r,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(t,e,n){t>=0&&t<this._microtaskId?this._zone.run(()=>e(n)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(t=>{const[e,n]=t;e(n)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([e,n]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}class Zx{constructor(t,e,n){this.namespaceId=t,this.delegate=e,this.engine=n,this.destroyNode=this.delegate.destroyNode?t=>e.destroyNode(t):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}appendChild(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)}insertBefore(t,e,n){this.delegate.insertBefore(t,e,n),this.engine.onInsert(this.namespaceId,e,t,!0)}removeChild(t,e,n){this.engine.onRemove(this.namespaceId,e,this.delegate,n)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,n,a){this.delegate.setAttribute(t,e,n,a)}removeAttribute(t,e,n){this.delegate.removeAttribute(t,e,n)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,n,a){this.delegate.setStyle(t,e,n,a)}removeStyle(t,e,n){this.delegate.removeStyle(t,e,n)}setProperty(t,e,n){"@"==e.charAt(0)&&"@.disabled"==e?this.disableAnimations(t,!!n):this.delegate.setProperty(t,e,n)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,n){return this.delegate.listen(t,e,n)}disableAnimations(t,e){this.engine.disableAnimations(t,e)}}class Jx extends Zx{constructor(t,e,n,a){super(e,n,a),this.factory=t,this.namespaceId=e}setProperty(t,e,n){"@"==e.charAt(0)?"."==e.charAt(1)&&"@.disabled"==e?this.disableAnimations(t,n=void 0===n||!!n):this.engine.process(this.namespaceId,t,e.substr(1),n):this.delegate.setProperty(t,e,n)}listen(t,e,n){if("@"==e.charAt(0)){const a=function(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(t);let r=e.substr(1),i="";return"@"!=r.charAt(0)&&([r,i]=function(t){const e=t.indexOf(".");return[t.substring(0,e),t.substr(e+1)]}(r)),this.engine.listen(this.namespaceId,a,r,i,t=>{this.factory.scheduleListenerCallback(t._data||-1,n,t)})}return this.delegate.listen(t,e,n)}}class Qx extends Nx{constructor(t,e,n){super(t.body,e,n)}}function Xx(){return"function"==typeof Yx()?new Bx:new Vx}function t_(){return new ex}function e_(t,e,n){return new $x(t,e,n)}const n_=new s.InjectionToken("AnimationModuleType");class a_{}var r_=n("Avrn");let i_=(()=>{class t{constructor(t,e){this.router=t,this.authStorageService=e}canActivate(){return!(this.authStorageService.isLoggedIn()&&!this.authStorageService.isSSO()&&this.authStorageService.getPwdUpdateRequired()&&(this.router.navigate(["/login-change-password"]),1))}canActivateChild(){return this.canActivate()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](qt.m),s["ɵɵinject"](vt.a))},token:t,providedIn:"root"}),t})();var s_=n("Vhfg");let o_=(()=>{class t{constructor(t,e){this.http=t,this.router=e}canActivate(t){return this.doCheck(t)}canActivateChild(t){return this.doCheck(t)}doCheck(e){if(e.url.length>0&&t.WHITELIST.includes(e.url[0].path))return Object(An.a)(!0);const n=e.data.moduleStatusGuardConfig;return this.http.get(`api/${n.apiPath}/status`).pipe(Object(Ee.a)(t=>(t.available||this.router.navigate([n.redirectTo,t.message||""]),t.available)),Object(By.a)(()=>(this.router.navigate([n.redirectTo]),Object(An.a)(!1))))}}return t.WHITELIST=["501"],t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c),s["ɵɵinject"](qt.m))},token:t,providedIn:"root"}),t})(),u_=(()=>{class t{constructor(t,e){this.authStorageService=t,this.router=e}canActivate(){return!this.authStorageService.isSSO()||(this.router.navigate(["404"]),!1)}canActivateChild(){return this.canActivate()}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](vt.a),s["ɵɵinject"](qt.m))},token:t,providedIn:"root"}),t})();class l_ extends Yn{resolve(t){const e=[],n=t.queryParams.fromLink||null;let a="";switch(n){case"/monitor":a="Monitors";break;case"/hosts":a="Hosts"}return e.push({text:"Cluster",path:null}),e.push({text:a,path:n}),e.push({text:"Performance Counters",path:""}),e}}class d_ extends Yn{resolve(t){const e=t.params.name;return[{text:`${J.startCase(e)}/Edit`,path:e}]}}const c_={breadcrumbs:"Cluster/Hosts"},f_={breadcrumbs:At.a.CREATE},h_={breadcrumbs:"Cluster/Monitors"},g_={breadcrumbs:"Cluster/Services"},p_={breadcrumbs:"Cluster/Inventory"},b_={breadcrumbs:"Cluster/OSDs"},m_={breadcrumbs:At.a.CREATE},y_={breadcrumbs:"Cluster/Configuration"},v_={breadcrumbs:At.a.EDIT},x_={breadcrumbs:"Cluster/CRUSH map"},__={breadcrumbs:"Cluster/Logs"},T_={breadcrumbs:"Telemetry configuration"},O_={breadcrumbs:"Cluster/Monitoring"},w_={breadcrumbs:`${At.a.CREATE} Silence`},S_={breadcrumbs:At.a.CREATE},I_={breadcrumbs:At.a.EDIT},N_={breadcrumbs:At.a.RECREATE},C_={breadcrumbs:l_},R_={breadcrumbs:"Cluster/Manager modules"},A_={breadcrumbs:d_},k_={breadcrumbs:"Pools"},E_=()=>Promise.all([n.e(1),n.e(6)]).then(n.bind(null,"nOaW")).then(t=>t.RoutedPoolModuleNgFactory),L_={breadcrumbs:!0,text:"Block",path:null},D_=()=>Promise.all([n.e(1),n.e(5)]).then(n.bind(null,"J6Oi")).then(t=>t.RoutedBlockModuleNgFactory),P_={breadcrumbs:"Filesystems"},M_={moduleStatusGuardConfig:{apiPath:"rgw",redirectTo:"rgw/501"},breadcrumbs:!0,text:"Object Gateway",path:null},q_=()=>n.e(7).then(n.bind(null,"Znkk")).then(t=>t.RoutedRgwModuleNgFactory),j_={breadcrumbs:"User management",path:null},F_=()=>n.e(8).then(n.bind(null,"DY6s")).then(t=>t.RoutedAuthModuleNgFactory),G_={breadcrumbs:"User profile",path:null},V_={breadcrumbs:At.a.EDIT},z_={breadcrumbs:"NFS"},B_={moduleStatusGuardConfig:{apiPath:"nfs-ganesha",redirectTo:"nfs/501"},breadcrumbs:"NFS"},Y_={breadcrumbs:At.a.CREATE},H_={breadcrumbs:At.a.EDIT};class U_{}var W_=n("yT6U"),K_=n("4DD9"),$_=n("+0ag"),Z_=n("IzCI"),J_=n("Dwqy"),Q_=n("uYzU"),X_=n("nSDx"),tT=n("SB+Q"),eT=n("BQkM"),nT=n("dEH0"),aT=n("G1/K"),rT=n("TJUb"),iT=n("efK2");class sT{constructor(){this.closeOthers=!1,this.isAnimated=!1}}class oT{static forRoot(){return{ngModule:oT,providers:[sT]}}}let uT=(()=>{class t{constructor(t){this.http=t}jsError(t,e,n){return this.http.post("ui-api/logging/js-error",{url:t,message:e,stack:n})}}return t.ngInjectableDef=s["ɵɵdefineInjectable"]({factory:function(){return new t(s["ɵɵinject"](X.c))},token:t,providedIn:fe.a}),t})();class lT{constructor(t){this.injector=t}handleError(t){const e=this.injector.get(uT),n=window.location.href;throw e.jsError(n,t&&t.message,t&&t.stack).subscribe(),t}}var dT=n("aHM3"),cT=n("9Xeq"),fT=n("yGOH"),hT=n("bxSN"),gT=n("V/fk"),pT=n("ChqD"),bT=n("PCNd"),mT=n("LceX");class yT{}class vT{}var xT=n("G6Q+");class _T{}var TT=n("kJI8");class OT{}class wT{}class ST{}class IT{}class NT{}var CT=function(){function t(t){if(t)throw new Error("JwtModule is already loaded. It should only be imported in your application's main module.")}return t.forRoot=function(e){return{ngModule:t,providers:[{provide:X.a,useClass:Vy,multi:!0},e.jwtOptionsProvider||{provide:jy,useValue:e.config},Fy]}},t}(),RT=s["ɵcmf"](l,[d],(function(t){return s["ɵmod"]([s["ɵmpd"](512,s.ComponentFactoryResolver,s["ɵCodegenComponentFactoryResolver"],[[8,[_,T.a,ia,Mr,As,Ks,eo,ho,di,ou,Du,Zu,pl,Al,jd,tc,Nc,$c,tf,cf,Mf,vh,Dh,Fh,Xh,Vp,Up,eb,hb,yb,Ob,Cb,Lb,q,H,Db.a,ne.a,Pb.a,Mb.a,Mb.b,qb.a,jb.a,Fb.a,Gb.a,Vb.a,zb.a,zb.c,zb.b,zb.d,Ub,um,Po,pm,Tm,Pm,zm,uy,yy,Sy,Ry,Ly,qy]],[3,s.ComponentFactoryResolver],s.NgModuleRef]),s["ɵmpd"](4608,X.j,X.p,[i.DOCUMENT,s.PLATFORM_ID,X.n]),s["ɵmpd"](4608,X.q,X.q,[X.j,X.o]),s["ɵmpd"](4608,Fy,Fy,[jy]),s["ɵmpd"](4608,vt.a,vt.a,[]),s["ɵmpd"](5120,X.a,(function(t,e,n,a,r,i){return[t,new Vy(e,n),new Yy(a,r,i)]}),[X.q,jy,Fy,qt.m,vt.a,gt.a]),s["ɵmpd"](4608,X.m,X.m,[]),s["ɵmpd"](6144,X.k,null,[X.m]),s["ɵmpd"](4608,X.i,X.i,[X.k]),s["ɵmpd"](6144,X.b,null,[X.i]),s["ɵmpd"](4608,X.g,X.l,[X.b,s.Injector]),s["ɵmpd"](4608,X.c,X.c,[X.g]),s["ɵmpd"](4352,s.LOCALE_ID,"en-US",[]),s["ɵmpd"](4608,i.NgLocalization,i.NgLocaleLocalization,[s.LOCALE_ID,[2,i["ɵangular_packages_common_common_a"]]]),s["ɵmpd"](5120,s["ɵangular_packages_core_core_ba"],s["ɵangular_packages_core_core_r"],[s.NgZone]),s["ɵmpd"](5120,s.APP_ID,s["ɵangular_packages_core_core_f"],[]),s["ɵmpd"](5120,s.IterableDiffers,s["ɵangular_packages_core_core_n"],[]),s["ɵmpd"](5120,s.KeyValueDiffers,s["ɵangular_packages_core_core_o"],[]),s["ɵmpd"](4608,Fr.b,Fr.k,[i.DOCUMENT]),s["ɵmpd"](6144,s.Sanitizer,null,[Fr.b]),s["ɵmpd"](4608,Fr.e,Fr.g,[]),s["ɵmpd"](5120,Fr.c,(function(t,e,n,a,r,i,s,o){return[new Fr.i(t,e,n),new Fr.n(a),new Fr.m(r,i,s,o)]}),[i.DOCUMENT,s.NgZone,s.PLATFORM_ID,i.DOCUMENT,i.DOCUMENT,Fr.e,s["ɵConsole"],[2,Fr.f]]),s["ɵmpd"](4608,Fr.d,Fr.d,[Fr.c,s.NgZone]),s["ɵmpd"](135680,Fr.l,Fr.l,[i.DOCUMENT]),s["ɵmpd"](4608,Fr.j,Fr.j,[Fr.d,Fr.l,s.APP_ID]),s["ɵmpd"](5120,cv,Xx,[]),s["ɵmpd"](5120,tx,t_,[]),s["ɵmpd"](4608,Nx,Qx,[i.DOCUMENT,cv,tx]),s["ɵmpd"](5120,s.RendererFactory2,e_,[Fr.j,Nx,s.NgZone]),s["ɵmpd"](6144,Fr.o,null,[Fr.l]),s["ɵmpd"](4608,s.Testability,s.Testability,[s.NgZone]),s["ɵmpd"](4608,K.b,Hx,[s.RendererFactory2,i.DOCUMENT]),s["ɵmpd"](5120,qt.a,qt.B,[qt.m]),s["ɵmpd"](4608,qt.g,qt.g,[]),s["ɵmpd"](6144,qt.h,null,[qt.g]),s["ɵmpd"](135680,qt.s,qt.s,[qt.m,s.NgModuleFactoryLoader,s.Compiler,s.Injector,qt.h]),s["ɵmpd"](4608,qt.f,qt.f,[]),s["ɵmpd"](5120,qt.G,qt.x,[qt.m,i.ViewportScroller,qt.i]),s["ɵmpd"](5120,qt.j,qt.E,[qt.C]),s["ɵmpd"](5120,s.APP_BOOTSTRAP_LISTENER,(function(t){return[t]}),[qt.j]),s["ɵmpd"](4608,d_,d_,[]),s["ɵmpd"](4608,l_,l_,[]),s["ɵmpd"](4608,$.D,$.D,[]),s["ɵmpd"](4608,$.h,$.h,[]),s["ɵmpd"](4608,W_.a,W_.a,[]),s["ɵmpd"](4608,K_.a,K_.a,[]),s["ɵmpd"](5120,s.TRANSLATIONS,u,[s.LOCALE_ID]),s["ɵmpd"](4608,me.a,me.a,[s.TRANSLATIONS_FORMAT,s.TRANSLATIONS,s.LOCALE_ID,[2,me.b]]),s["ɵmpd"](4608,Pu.a,Pu.a,[me.a]),s["ɵmpd"](4608,i.DatePipe,i.DatePipe,[s.LOCALE_ID]),s["ɵmpd"](4608,gs.a,gs.a,[]),s["ɵmpd"](4608,$_.a,$_.a,[]),s["ɵmpd"](4608,Ea.a,Ea.a,[]),s["ɵmpd"](4608,_a.a,_a.a,[Ea.a]),s["ɵmpd"](4608,Z_.a,Z_.a,[Ea.a]),s["ɵmpd"](4608,Ta.a,Ta.a,[Ea.a]),s["ɵmpd"](4608,J_.a,J_.a,[]),s["ɵmpd"](4608,Q_.a,Q_.a,[]),s["ɵmpd"](4608,ps.a,ps.a,[]),s["ɵmpd"](4608,Td.a,Td.a,[]),s["ɵmpd"](4608,Se.a,Se.a,[i.DatePipe]),s["ɵmpd"](4608,X_.a,X_.a,[]),s["ɵmpd"](4608,tT.a,tT.a,[]),s["ɵmpd"](4608,vg.a,vg.a,[]),s["ɵmpd"](4608,eT.a,eT.a,[]),s["ɵmpd"](4608,nT.a,nT.a,[]),s["ɵmpd"](4608,aT.a,aT.a,[me.a]),s["ɵmpd"](4608,qs.a,qs.a,[]),s["ɵmpd"](4608,rT.a,rT.a,[]),s["ɵmpd"](4608,iT.a,iT.a,[]),s["ɵmpd"](4608,ae.b,ae.b,[]),s["ɵmpd"](4608,ua.a,ua.a,[]),s["ɵmpd"](4608,la.a,la.a,[s.NgZone,s.RendererFactory2,s.PLATFORM_ID]),s["ɵmpd"](4608,W.a,W.a,[s.ComponentFactoryResolver,s.NgZone,s.Injector,la.a,s.ApplicationRef]),s["ɵmpd"](4608,Te.c,Te.c,[]),s["ɵmpd"](4608,Qn.a,Qn.a,[]),s["ɵmpd"](4608,Lt.b,Lt.b,[s.RendererFactory2,W.a]),s["ɵmpd"](4608,cc.y,cc.y,[i.DOCUMENT]),s["ɵmpd"](4608,cc.r,cc.r,[]),s["ɵmpd"](4608,cc.a,cc.a,[]),s["ɵmpd"](4608,U.f,U.f,[]),s["ɵmpd"](4608,r_.a,r_.a,[qt.m,vt.a]),s["ɵmpd"](4608,oa.f,oa.f,[]),s["ɵmpd"](4608,rt.t,rt.t,[]),s["ɵmpd"](4608,rt.v,rt.v,[]),s["ɵmpd"](4608,rt.a,rt.a,[]),s["ɵmpd"](4608,rt.h,rt.h,[]),s["ɵmpd"](4608,rt.d,rt.d,[]),s["ɵmpd"](4608,rt.j,rt.j,[]),s["ɵmpd"](4608,rt.l,rt.l,[]),s["ɵmpd"](4608,rt.u,rt.u,[rt.v,rt.l]),s["ɵmpd"](5120,S,k,[A]),s["ɵmpd"](4608,C,C,[S]),s["ɵmpd"](4608,gg,gg,[]),s["ɵmpd"](4608,Zl,Zl,[]),s["ɵmpd"](4608,El,El,[]),s["ɵmpd"](4608,Xl,Xl,[]),s["ɵmpd"](4608,vl.a,vl.a,[]),s["ɵmpd"](4608,sT,sT,[]),s["ɵmpd"](4608,Z.g,Z.g,[Z.b]),s["ɵmpd"](1073742336,X.e,X.e,[]),s["ɵmpd"](1073742336,X.d,X.d,[]),s["ɵmpd"](1073742336,i.CommonModule,i.CommonModule,[]),s["ɵmpd"](512,s.ErrorHandler,lT,[s.Injector]),s["ɵmpd"](1024,s.NgProbeToken,(function(){return[qt.w()]}),[]),s["ɵmpd"](512,qt.C,qt.C,[s.Injector]),s["ɵmpd"](1024,s.APP_INITIALIZER,(function(t,e){return[Fr.p(t),qt.D(e)]}),[[2,s.NgProbeToken],qt.C]),s["ɵmpd"](512,s.ApplicationInitStatus,s.ApplicationInitStatus,[[2,s.APP_INITIALIZER]]),s["ɵmpd"](131584,s.ApplicationRef,s.ApplicationRef,[s.NgZone,s["ɵConsole"],s.Injector,s.ErrorHandler,s.ComponentFactoryResolver,s.ApplicationInitStatus]),s["ɵmpd"](1073742336,s.ApplicationModule,s.ApplicationModule,[s.ApplicationRef]),s["ɵmpd"](1073742336,Fr.a,Fr.a,[[3,Fr.a]]),s["ɵmpd"](1073742336,a_,a_,[]),s["ɵmpd"](1073742336,c.i,c.i,[]),s["ɵmpd"](1024,qt.v,qt.z,[[3,qt.m]]),s["ɵmpd"](512,qt.u,qt.c,[]),s["ɵmpd"](512,qt.b,qt.b,[]),s["ɵmpd"](256,qt.i,{useHash:!0,preloadingStrategy:qt.g},[]),s["ɵmpd"](1024,i.LocationStrategy,qt.y,[i.PlatformLocation,[2,i.APP_BASE_HREF],qt.i]),s["ɵmpd"](512,i.Location,i.Location,[i.LocationStrategy,i.PlatformLocation]),s["ɵmpd"](512,s.Compiler,s.Compiler,[]),s["ɵmpd"](512,s.NgModuleFactoryLoader,s.SystemJsNgModuleLoader,[s.Compiler,[2,s.SystemJsNgModuleLoaderConfig]]),s["ɵmpd"](1024,qt.k,(function(){return[[{path:"",redirectTo:"dashboard",pathMatch:"full"},{path:"",component:ea,canActivate:[r_.a,i_],canActivateChild:[r_.a,i_],children:[{path:"dashboard",component:Ar},{path:"hosts",data:c_,children:[{path:"",component:xs},{path:"create",component:Gs,data:f_}]},{path:"monitor",component:Zs,data:h_},{path:"services",component:so,data:g_},{path:"inventory",component:ri,data:p_},{path:"osd",data:b_,children:[{path:"",component:$o},{path:"create",component:Ou,data:m_}]},{path:"configuration",data:y_,children:[{path:"",component:Bu},{path:"edit/:name",component:Qu,data:v_}]},{path:"crush-map",component:Tl,data:x_},{path:"logs",component:wd,data:__},{path:"telemetry",component:Gd,data:T_},{path:"monitoring",data:O_,children:[{path:"",component:mc},{path:"silence/create",component:kc,data:w_},{path:"silence/create/:id",component:kc,data:S_},{path:"silence/edit/:id",component:kc,data:I_},{path:"silence/recreate/:id",component:kc,data:N_}]},{path:"perf_counters/:type/:id",component:Zc,data:C_},{path:"mgr-modules",data:R_,children:[{path:"",component:of},{path:"edit/:name",component:ff,data:A_}]},{path:"pool",data:k_,loadChildren:E_},{path:"block",data:L_,loadChildren:D_},{path:"cephfs",component:ph,canActivate:[s_.a],data:P_},{path:"rgw",canActivateChild:[s_.a,o_],data:M_,loadChildren:q_},{path:"user-management",data:j_,loadChildren:F_},{path:"user-profile",data:G_,children:[{path:"edit",component:Th,canActivate:[u_],data:V_}]},{path:"nfs/501/:message",component:Ph,data:z_},{path:"nfs",canActivateChild:[s_.a,o_],data:B_,children:[{path:"",component:Uh},{path:"create",component:Eg,data:Y_},{path:"edit/:cluster_id/:export_id",component:Eg,data:H_}]}]},{path:"",component:zp,children:[{path:"login",component:Kp},{path:"login-change-password",component:nb,canActivate:[u_]}]},{path:"",component:gb,children:[{path:"sso/404",component:vb},{path:"403",component:wb},{path:"404",component:Rb},{path:"**",redirectTo:"/404"}]}]]}),[]),s["ɵmpd"](1024,qt.m,qt.A,[s.ApplicationRef,qt.u,qt.b,i.Location,s.Injector,s.NgModuleFactoryLoader,s.Compiler,qt.k,qt.i,[2,qt.t],[2,qt.l]]),s["ɵmpd"](1073742336,qt.q,qt.q,[[2,qt.v],[2,qt.m]]),s["ɵmpd"](1073742336,U_,U_,[]),s["ɵmpd"](1073742336,E,E,[]),s["ɵmpd"](1073742336,dT.a,dT.a,[]),s["ɵmpd"](1073742336,$.C,$.C,[]),s["ɵmpd"](1073742336,$.n,$.n,[]),s["ɵmpd"](1073742336,ua.d,ua.d,[]),s["ɵmpd"](1073742336,$.y,$.y,[]),s["ɵmpd"](1073742336,cT.a,cT.a,[]),s["ɵmpd"](1073742336,ae.c,ae.c,[]),s["ɵmpd"](1073742336,Te.d,Te.d,[]),s["ɵmpd"](1073742336,Qn.d,Qn.d,[]),s["ɵmpd"](1073742336,ya.b,ya.b,[]),s["ɵmpd"](1073742336,Lt.e,Lt.e,[]),s["ɵmpd"](1073742336,fT.a,fT.a,[]),s["ɵmpd"](1073742336,U.e,U.e,[]),s["ɵmpd"](1073742336,Z.f,Z.f,[]),s["ɵmpd"](1073742336,hT.ClickOutsideModule,hT.ClickOutsideModule,[]),s["ɵmpd"](1073742336,Ne.b,Ne.b,[]),s["ɵmpd"](1073742336,gT.a,gT.a,[]),s["ɵmpd"](1073742336,cc.u,cc.u,[]),s["ɵmpd"](1073742336,pT.a,pT.a,[]),s["ɵmpd"](1073742336,fe.a,fe.a,[]),s["ɵmpd"](1073742336,bT.a,bT.a,[]),s["ɵmpd"](1073742336,oa.d,oa.d,[]),s["ɵmpd"](1073742336,rt.g,rt.g,[]),s["ɵmpd"](1073742336,mT.a,mT.a,[]),s["ɵmpd"](1073742336,te,te,[]),s["ɵmpd"](1073742336,yT,yT,[]),s["ɵmpd"](1073742336,vT,vT,[]),s["ɵmpd"](1073742336,xT.a,xT.a,[]),s["ɵmpd"](1073742336,_T,_T,[]),s["ɵmpd"](1073742336,bg,bg,[]),s["ɵmpd"](1073742336,ed,ed,[]),s["ɵmpd"](1073742336,_l.b,_l.b,[]),s["ɵmpd"](1073742336,TT.a,TT.a,[]),s["ɵmpd"](1073742336,OT,OT,[]),s["ɵmpd"](1073742336,wT,wT,[]),s["ɵmpd"](1073742336,ST,ST,[]),s["ɵmpd"](1073742336,IT,IT,[]),s["ɵmpd"](1073742336,NT,NT,[]),s["ɵmpd"](1073742336,oT,oT,[]),s["ɵmpd"](1073742336,CT,CT,[[3,CT]]),s["ɵmpd"](1073742336,l,l,[]),s["ɵmpd"](256,X.n,"XSRF-TOKEN",[]),s["ɵmpd"](256,X.o,"X-XSRF-TOKEN",[]),s["ɵmpd"](256,jy,{tokenGetter:o},[]),s["ɵmpd"](256,s["ɵAPP_ROOT"],!0,[]),s["ɵmpd"](256,n_,"BrowserAnimations",[]),s["ɵmpd"](256,s.TRANSLATIONS_FORMAT,"xlf",[]),s["ɵmpd"](256,U.a,{autoClose:!0,insideClick:!1},[]),s["ɵmpd"](256,A,{},[]),s["ɵmpd"](256,c.b,{default:c.a,config:{positionClass:"toast-top-right",preventDuplicates:!0,enableHtml:!0}},[]),s["ɵmpd"](1024,Z.b,(function(){return[[]]}),[]),s["ɵmpd"](256,Z.a,1,[])])}));i.registerLocaleData(r.a),Object(s.enableProdMode)(),Fr.h().bootstrapModuleFactory(RT).catch(t=>console.log(t))},zZ0H:function(t,e){t.exports=function(t){return t}},zavE:function(t,e,n){!function(t){"use strict";t.defineLocale("en-SG",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})}(n("wd/R"))},zk60:function(t,e,n){var a=n("2oRo"),r=n("kRJp");t.exports=function(t,e){try{r(a,t,e)}catch(n){a[t]=e}return e}},zoYe:function(t,e,n){var a=n("nmnc"),r=n("eUgh"),i=n("Z0cm"),s=n("/9aa"),o=a?a.prototype:void 0,u=o?o.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return r(e,t)+"";if(s(e))return u?u.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},zx6S:function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,a){var r=e.words[a];return 1===a.length?n?r[0]:r[1]:t+" "+e.correctGrammaticalCase(t,r)}};t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))}},[[0,0]]]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js
new file mode 100644 (file)
index 0000000..4a76c61
--- /dev/null
@@ -0,0 +1,2 @@
+/*! For license information please see polyfills.14628a6f4ca10d3018fd.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1:function(e,t,n){e.exports=n("hN/g")},"hN/g":function(e,t,n){"use strict";n.r(t),n("pDpN")},pDpN:function(e,t){!function(e){const t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function o(e,n){t&&t.measure&&t.measure(e,n)}n("Zone");const r=!0===e.__zone_symbol__forceDuplicateZoneCheck;if(e.Zone){if(r||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}class s{constructor(e,t){this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new a(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let e=s.current;for(;e.parent;)e=e.parent;return e}static get current(){return P.zone}static get currentTask(){return O}static __load_patch(t,i){if(D.hasOwnProperty(t)){if(r)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const r="Zone:"+t;n(r),D[t]=i(e,s,z),o(r,r)}}get parent(){return this._parent}get name(){return this._name}get(e){const t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null}fork(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)}wrap(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);const n=this._zoneDelegate.intercept(this,e,t),o=this;return function(){return o.runGuarded(n,this,arguments,t)}}run(e,t,n,o){P={parent:P,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,o)}finally{P=P.parent}}runGuarded(e,t=null,n,o){P={parent:P,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,o)}catch(r){if(this._zoneDelegate.handleError(this,r))throw r}}finally{P=P.parent}}runTask(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");if(e.state===k&&(e.type===S||e.type===Z))return;const o=e.state!=v;o&&e._transitionTo(v,b),e.runCount++;const r=O;O=e,P={parent:P,zone:this};try{e.type==Z&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(s){if(this._zoneDelegate.handleError(this,s))throw s}}finally{e.state!==k&&e.state!==w&&(e.type==S||e.data&&e.data.isPeriodic?o&&e._transitionTo(b,v):(e.runCount=0,this._updateTaskCount(e,-1),o&&e._transitionTo(k,v,k))),P=P.parent,O=r}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(y,k);const t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(n){throw e._transitionTo(w,y,k),this._zoneDelegate.handleError(this,n),n}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==y&&e._transitionTo(b,y),e}scheduleMicroTask(e,t,n,o){return this.scheduleTask(new c(E,e,t,n,o,void 0))}scheduleMacroTask(e,t,n,o,r){return this.scheduleTask(new c(Z,e,t,n,o,r))}scheduleEventTask(e,t,n,o,r){return this.scheduleTask(new c(S,e,t,n,o,r))}cancelTask(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");e._transitionTo(T,b,v);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(w,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(k,T),e.runCount=0,e}_updateTaskCount(e,t){const n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(let o=0;o<n.length;o++)n[o]._updateTaskCount(e.type,t)}}s.__symbol__=I;const i={name:"",onHasTask:(e,t,n,o)=>e.hasTask(n,o),onScheduleTask:(e,t,n,o)=>e.scheduleTask(n,o),onInvokeTask:(e,t,n,o,r,s)=>e.invokeTask(n,o,r,s),onCancelTask:(e,t,n,o)=>e.cancelTask(n,o)};class a{constructor(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const o=n&&n.onHasTask;(o||t&&t._hasTaskZS)&&(this._hasTaskZS=o?n:i,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=i,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=i,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=i,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new s(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,o,r){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,o,r):t.apply(n,o)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=E)throw new Error("Task is missing scheduleFn.");g(t)}return n}invokeTask(e,t,n,o){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,o):t.callback.apply(n,o)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(n){this.handleError(e,n)}}_updateTaskCount(e,t){const n=this._taskCounts,o=n[e],r=n[e]=o+t;if(r<0)throw new Error("More tasks executed then were scheduled.");0!=o&&0!=r||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})}}class c{constructor(t,n,o,r,s,i){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=t,this.source=n,this.data=r,this.scheduleFn=s,this.cancelFn=i,this.callback=o;const a=this;this.invoke=t===S&&r&&r.useG?c.invokeTask:function(){return c.invokeTask.call(e,a,this,arguments)}}static invokeTask(e,t,n){e||(e=this),j++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==j&&_(),j--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(k,y)}_transitionTo(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?" or '"+n+"'":""}, was '${this._state}'.`);this._state=e,e==k&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const l=I("setTimeout"),u=I("Promise"),h=I("then");let p,f=[],d=!1;function g(t){if(0===j&&0===f.length)if(p||e[u]&&(p=e[u].resolve(0)),p){let e=p[h];e||(e=p.then),e.call(p,_)}else e[l](_,0);t&&f.push(t)}function _(){if(!d){for(d=!0;f.length;){const t=f;f=[];for(let n=0;n<t.length;n++){const o=t[n];try{o.zone.runTask(o,null,null)}catch(e){z.onUnhandledError(e)}}}z.microtaskDrainDone(),d=!1}}const m={name:"NO ZONE"},k="notScheduled",y="scheduling",b="scheduled",v="running",T="canceling",w="unknown",E="microTask",Z="macroTask",S="eventTask",D={},z={symbol:I,currentZoneFrame:()=>P,onUnhandledError:C,microtaskDrainDone:C,scheduleMicroTask:g,showUncaughtError:()=>!s[I("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:C,patchMethod:()=>C,bindArguments:()=>[],patchThen:()=>C,patchMacroTask:()=>C,setNativePromise:e=>{e&&"function"==typeof e.resolve&&(p=e.resolve(0))},patchEventPrototype:()=>C,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>C,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>C,wrapWithCurrentZone:()=>C,filterProperties:()=>[],attachOriginToPatched:()=>C,_redefineProperty:()=>C,patchCallbacks:()=>C};let P={parent:null,zone:new s(null,null)},O=null,j=0;function C(){}function I(e){return"__zone_symbol__"+e}o("Zone","Zone"),e.Zone=s}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global),Zone.__load_patch("ZoneAwarePromise",(e,t,n)=>{const o=Object.getOwnPropertyDescriptor,r=Object.defineProperty,s=n.symbol,i=[],a=s("Promise"),c=s("then");n.onUnhandledError=e=>{if(n.showUncaughtError()){const t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;i.length;)for(;i.length;){const t=i.shift();try{t.zone.runGuarded(()=>{throw t})}catch(e){u(e)}}};const l=s("unhandledPromiseRejectionHandler");function u(e){n.onUnhandledError(e);try{const n=t[l];n&&"function"==typeof n&&n.call(this,e)}catch(o){}}function h(e){return e&&e.then}function p(e){return e}function f(e){return Z.reject(e)}const d=s("state"),g=s("value"),_=s("finally"),m=s("parentPromiseValue"),k=s("parentPromiseState");function y(e,t){return n=>{try{v(e,t,n)}catch(o){v(e,!1,o)}}}const b=s("currentTaskTrace");function v(e,o,s){const a=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}}();if(e===s)throw new TypeError("Promise resolved with itself");if(null===e[d]){let u=null;try{"object"!=typeof s&&"function"!=typeof s||(u=s&&s.then)}catch(l){return a(()=>{v(e,!1,l)})(),e}if(!1!==o&&s instanceof Z&&s.hasOwnProperty(d)&&s.hasOwnProperty(g)&&null!==s[d])w(s),v(e,s[d],s[g]);else if(!1!==o&&"function"==typeof u)try{u.call(s,a(y(e,o)),a(y(e,!1)))}catch(l){a(()=>{v(e,!1,l)})()}else{e[d]=o;const a=e[g];if(e[g]=s,e[_]===_&&!0===o&&(e[d]=e[k],e[g]=e[m]),!1===o&&s instanceof Error){const e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&r(s,b,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t<a.length;)E(e,a[t++],a[t++],a[t++],a[t++]);if(0==a.length&&0==o){e[d]=0;try{throw new Error("Uncaught (in promise): "+((c=s)&&c.toString===Object.prototype.toString?(c.constructor&&c.constructor.name||"")+": "+JSON.stringify(c):c?c.toString():Object.prototype.toString.call(c))+(s&&s.stack?"\n"+s.stack:""))}catch(l){const o=l;o.rejection=s,o.promise=e,o.zone=t.current,o.task=t.currentTask,i.push(o),n.scheduleMicroTask()}}}}var c;return e}const T=s("rejectionHandledHandler");function w(e){if(0===e[d]){try{const n=t[T];n&&"function"==typeof n&&n.call(this,{rejection:e[g],promise:e})}catch(n){}e[d]=!1;for(let t=0;t<i.length;t++)e===i[t].promise&&i.splice(t,1)}}function E(e,t,n,o,r){w(e);const s=e[d],i=s?"function"==typeof o?o:p:"function"==typeof r?r:f;t.scheduleMicroTask("Promise.then",()=>{try{const o=e[g],r=n&&_===n[_];r&&(n[m]=o,n[k]=s);const a=t.run(i,void 0,r&&i!==f&&i!==p?[]:[o]);v(n,!0,a)}catch(o){v(n,!1,o)}},n)}class Z{constructor(e){const t=this;if(!(t instanceof Z))throw new Error("Must be an instanceof Promise.");t[d]=null,t[g]=[];try{e&&e(y(t,!0),y(t,!1))}catch(n){v(t,!1,n)}}static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(e){return v(new this(null),!0,e)}static reject(e){return v(new this(null),!1,e)}static race(e){let t,n,o=new this((e,o)=>{t=e,n=o});function r(e){t(e)}function s(e){n(e)}for(let i of e)h(i)||(i=this.resolve(i)),i.then(r,s);return o}static all(e){let t,n,o=new this((e,o)=>{t=e,n=o}),r=2,s=0;const i=[];for(let a of e){h(a)||(a=this.resolve(a));const e=s;a.then(n=>{i[e]=n,r--,0===r&&t(i)},n),r++,s++}return r-=2,0===r&&t(i),o}get[Symbol.toStringTag](){return"Promise"}then(e,n){const o=new this.constructor(null),r=t.current;return null==this[d]?this[g].push(r,o,e,n):E(this,r,o,e,n),o}catch(e){return this.then(null,e)}finally(e){const n=new this.constructor(null);n[_]=_;const o=t.current;return null==this[d]?this[g].push(o,n,e,e):E(this,o,n,e,e),n}}Z.resolve=Z.resolve,Z.reject=Z.reject,Z.race=Z.race,Z.all=Z.all;const S=e[a]=e.Promise,D=t.__symbol__("ZoneAwarePromise");let z=o(e,"Promise");z&&!z.configurable||(z&&delete z.writable,z&&delete z.value,z||(z={configurable:!0,enumerable:!0}),z.get=function(){return e[D]?e[D]:e[a]},z.set=function(t){t===Z?e[D]=t:(e[a]=t,t.prototype[c]||O(t),n.setNativePromise(t))},r(e,"Promise",z)),e.Promise=Z;const P=s("thenPatched");function O(e){const t=e.prototype,n=o(t,"then");if(n&&(!1===n.writable||!n.configurable))return;const r=t.then;t[c]=r,e.prototype.then=function(e,t){return new Z((e,t)=>{r.call(this,e,t)}).then(e,t)},e[P]=!0}if(n.patchThen=O,S){O(S);const t=e.fetch;"function"==typeof t&&(e[n.symbol("fetch")]=t,e.fetch=(j=t,function(){let e=j.apply(this,arguments);if(e instanceof Z)return e;let t=e.constructor;return t[P]||O(t),e}))}var j;return Promise[t.__symbol__("uncaughtPromiseErrors")]=i,Z});const n=Object.getOwnPropertyDescriptor,o=Object.defineProperty,r=Object.getPrototypeOf,s=Object.create,i=Array.prototype.slice,a=Zone.__symbol__("addEventListener"),c=Zone.__symbol__("removeEventListener");function l(e,t){return Zone.current.wrap(e,t)}function u(e,t,n,o,r){return Zone.current.scheduleMacroTask(e,t,n,o,r)}const h=Zone.__symbol__,p="undefined"!=typeof window,f=p?window:void 0,d=p&&f||"object"==typeof self&&self||global,g=[null];function _(e,t){for(let n=e.length-1;n>=0;n--)"function"==typeof e[n]&&(e[n]=l(e[n],t+"_"+n));return e}function m(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}const k="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,y=!("nw"in d)&&void 0!==d.process&&"[object process]"==={}.toString.call(d.process),b=!y&&!k&&!(!p||!f.HTMLElement),v=void 0!==d.process&&"[object process]"==={}.toString.call(d.process)&&!k&&!(!p||!f.HTMLElement),T={},w=function(e){if(!(e=e||d.event))return;let t=T[e.type];t||(t=T[e.type]=h("ON_PROPERTY"+e.type));const n=this||e.target||d,o=n[t];let r;if(b&&n===f&&"error"===e.type){const t=e;r=o&&o.call(this,t.message,t.filename,t.lineno,t.colno,t.error),!0===r&&e.preventDefault()}else r=o&&o.apply(this,arguments),null==r||r||e.preventDefault();return r};function E(e,t,r){let s=n(e,t);if(!s&&r&&n(r,t)&&(s={enumerable:!0,configurable:!0}),!s||!s.configurable)return;const i=h("on"+t+"patched");if(e.hasOwnProperty(i)&&e[i])return;delete s.writable,delete s.value;const a=s.get,c=s.set,l=t.substr(2);let u=T[l];u||(u=T[l]=h("ON_PROPERTY"+l)),s.set=function(t){let n=this;n||e!==d||(n=d),n&&(n[u]&&n.removeEventListener(l,w),c&&c.apply(n,g),"function"==typeof t?(n[u]=t,n.addEventListener(l,w,!1)):n[u]=null)},s.get=function(){let n=this;if(n||e!==d||(n=d),!n)return null;const o=n[u];if(o)return o;if(a){let e=a&&a.call(this);if(e)return s.set.call(this,e),"function"==typeof n.removeAttribute&&n.removeAttribute(t),e}return null},o(e,t,s),e[i]=!0}function Z(e,t,n){if(t)for(let o=0;o<t.length;o++)E(e,"on"+t[o],n);else{const t=[];for(const n in e)"on"==n.substr(0,2)&&t.push(n);for(let o=0;o<t.length;o++)E(e,t[o],n)}}const S=h("originalInstance");function D(e){const t=d[e];if(!t)return;d[h(e)]=t,d[e]=function(){const n=_(arguments,e);switch(n.length){case 0:this[S]=new t;break;case 1:this[S]=new t(n[0]);break;case 2:this[S]=new t(n[0],n[1]);break;case 3:this[S]=new t(n[0],n[1],n[2]);break;case 4:this[S]=new t(n[0],n[1],n[2],n[3]);break;default:throw new Error("Arg list too long.")}},O(d[e],t);const n=new t((function(){}));let r;for(r in n)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof n[t]?d[e].prototype[t]=function(){return this[S][t].apply(this[S],arguments)}:o(d[e].prototype,t,{set:function(n){"function"==typeof n?(this[S][t]=l(n,e+"."+t),O(this[S][t],n)):this[S][t]=n},get:function(){return this[S][t]}})}(r);for(r in t)"prototype"!==r&&t.hasOwnProperty(r)&&(d[e][r]=t[r])}function z(e,t,o){let s=e;for(;s&&!s.hasOwnProperty(t);)s=r(s);!s&&e[t]&&(s=e);const i=h(t);let a=null;if(s&&!(a=s[i])&&(a=s[i]=s[t],m(s&&n(s,t)))){const e=o(a,i,t);s[t]=function(){return e(this,arguments)},O(s[t],a)}return a}function P(e,t,n){let o=null;function r(e){const t=e.data;return t.args[t.cbIdx]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}o=z(e,t,e=>function(t,o){const s=n(t,o);return s.cbIdx>=0&&"function"==typeof o[s.cbIdx]?u(s.name,o[s.cbIdx],s,r):e.apply(t,o)})}function O(e,t){e[h("OriginalDelegate")]=t}let j=!1,C=!1;function I(){try{const e=f.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(e){}return!1}function L(){if(j)return C;j=!0;try{const e=f.navigator.userAgent;-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(C=!0)}catch(e){}return C}Zone.__load_patch("toString",e=>{const t=Function.prototype.toString,n=h("OriginalDelegate"),o=h("Promise"),r=h("Error"),s=function(){if("function"==typeof this){const s=this[n];if(s)return"function"==typeof s?t.call(s):Object.prototype.toString.call(s);if(this===Promise){const n=e[o];if(n)return t.call(n)}if(this===Error){const n=e[r];if(n)return t.call(n)}}return t.call(this)};s[n]=t,Function.prototype.toString=s;const i=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":i.call(this)}});let R=!1;if("undefined"!=typeof window)try{const e=Object.defineProperty({},"passive",{get:function(){R=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(ge){R=!1}const x={useG:!0},M={},N={},A=/^__zone_symbol__(\w+)(true|false)$/;function F(e,t,n){const o=n&&n.add||"addEventListener",s=n&&n.rm||"removeEventListener",i=n&&n.listeners||"eventListeners",a=n&&n.rmAll||"removeAllListeners",c=h(o),l="."+o+":",u=function(e,t,n){if(e.isRemoved)return;const o=e.callback;"object"==typeof o&&o.handleEvent&&(e.callback=e=>o.handleEvent(e),e.originalDelegate=o),e.invoke(e,t,[n]);const r=e.options;r&&"object"==typeof r&&r.once&&t[s].call(t,n.type,e.originalDelegate?e.originalDelegate:e.callback,r)},p=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[M[t.type].false];if(o)if(1===o.length)u(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t.__zone_symbol__propagationStopped);o++)u(e[o],n,t)}},f=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[M[t.type].true];if(o)if(1===o.length)u(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t.__zone_symbol__propagationStopped);o++)u(e[o],n,t)}};function d(t,n){if(!t)return!1;let u=!0;n&&void 0!==n.useG&&(u=n.useG);const d=n&&n.vh;let g=!0;n&&void 0!==n.chkDup&&(g=n.chkDup);let _=!1;n&&void 0!==n.rt&&(_=n.rt);let m=t;for(;m&&!m.hasOwnProperty(o);)m=r(m);if(!m&&t[o]&&(m=t),!m)return!1;if(m[c])return!1;const k=n&&n.eventNameToString,b={},v=m[c]=m[o],T=m[h(s)]=m[s],w=m[h(i)]=m[i],E=m[h(a)]=m[a];let Z;function S(e){R||"boolean"==typeof b.options||null==b.options||(e.options=!!b.options.capture,b.options=e.options)}n&&n.prepend&&(Z=m[h(n.prepend)]=m[n.prepend]);const D=u?function(e){if(!b.isExisting)return S(e),v.call(b.target,b.eventName,b.capture?f:p,b.options)}:function(e){return S(e),v.call(b.target,b.eventName,e.invoke,b.options)},z=u?function(e){if(!e.isRemoved){const t=M[e.eventName];let n;t&&(n=t[e.capture?"true":"false"]);const o=n&&e.target[n];if(o)for(let r=0;r<o.length;r++)if(o[r]===e){o.splice(r,1),e.isRemoved=!0,0===o.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return T.call(e.target,e.eventName,e.capture?f:p,e.options)}:function(e){return T.call(e.target,e.eventName,e.invoke,e.options)},P=n&&n.diff?n.diff:function(e,t){const n=typeof t;return"function"===n&&e.callback===t||"object"===n&&e.originalDelegate===t},j=Zone[Zone.__symbol__("BLACK_LISTED_EVENTS")],C=function(t,n,o,r,s=!1,i=!1){return function(){const a=this||e,c=arguments[0];let l=arguments[1];if(!l)return t.apply(this,arguments);if(y&&"uncaughtException"===c)return t.apply(this,arguments);let h=!1;if("function"!=typeof l){if(!l.handleEvent)return t.apply(this,arguments);h=!0}if(d&&!d(t,l,a,arguments))return;const p=arguments[2];if(j)for(let e=0;e<j.length;e++)if(c===j[e])return t.apply(this,arguments);let f,_=!1;void 0===p?f=!1:!0===p?f=!0:!1===p?f=!1:(f=!!p&&!!p.capture,_=!!p&&!!p.once);const m=Zone.current,v=M[c];let T;if(v)T=v[f?"true":"false"];else{const e="__zone_symbol__"+(k?k(c):c)+"false",t="__zone_symbol__"+(k?k(c):c)+"true";M[c]={},M[c].false=e,M[c].true=t,T=f?t:e}let w,E=a[T],Z=!1;if(E){if(Z=!0,g)for(let e=0;e<E.length;e++)if(P(E[e],l))return}else E=a[T]=[];const S=a.constructor.name,D=N[S];D&&(w=D[c]),w||(w=S+n+(k?k(c):c)),b.options=p,_&&(b.options.once=!1),b.target=a,b.capture=f,b.eventName=c,b.isExisting=Z;const z=u?x:void 0;z&&(z.taskData=b);const O=m.scheduleEventTask(w,l,z,o,r);return b.target=null,z&&(z.taskData=null),_&&(p.once=!0),(R||"boolean"!=typeof O.options)&&(O.options=p),O.target=a,O.capture=f,O.eventName=c,h&&(O.originalDelegate=l),i?E.unshift(O):E.push(O),s?a:void 0}};return m[o]=C(v,l,D,z,_),Z&&(m.prependListener=C(Z,".prependListener:",(function(e){return Z.call(b.target,b.eventName,e.invoke,b.options)}),z,_,!0)),m[s]=function(){const t=this||e,n=arguments[0],o=arguments[2];let r;r=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);const s=arguments[1];if(!s)return T.apply(this,arguments);if(d&&!d(T,s,t,arguments))return;const i=M[n];let a;i&&(a=i[r?"true":"false"]);const c=a&&t[a];if(c)for(let e=0;e<c.length;e++){const n=c[e];if(P(n,s))return c.splice(e,1),n.isRemoved=!0,0===c.length&&(n.allRemoved=!0,t[a]=null),n.zone.cancelTask(n),_?t:void 0}return T.apply(this,arguments)},m[i]=function(){const t=this||e,n=arguments[0],o=[],r=H(t,k?k(n):n);for(let e=0;e<r.length;e++){const t=r[e];o.push(t.originalDelegate?t.originalDelegate:t.callback)}return o},m[a]=function(){const t=this||e,n=arguments[0];if(n){const e=M[n];if(e){const o=t[e.false],r=t[e.true];if(o){const e=o.slice();for(let t=0;t<e.length;t++){const o=e[t];this[s].call(this,n,o.originalDelegate?o.originalDelegate:o.callback,o.options)}}if(r){const e=r.slice();for(let t=0;t<e.length;t++){const o=e[t];this[s].call(this,n,o.originalDelegate?o.originalDelegate:o.callback,o.options)}}}}else{const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=A.exec(e[t]);let o=n&&n[1];o&&"removeListener"!==o&&this[a].call(this,o)}this[a].call(this,"removeListener")}if(_)return this},O(m[o],v),O(m[s],T),E&&O(m[a],E),w&&O(m[i],w),!0}let g=[];for(let r=0;r<t.length;r++)g[r]=d(t[r],n);return g}function H(e,t){const n=[];for(let o in e){const r=A.exec(o);let s=r&&r[1];if(s&&(!t||s===t)){const t=e[o];if(t)for(let e=0;e<t.length;e++)n.push(t[e])}}return n}function G(e,t){const n=e.Event;n&&n.prototype&&t.patchMethod(n.prototype,"stopImmediatePropagation",e=>function(t,n){t.__zone_symbol__propagationStopped=!0,e&&e.apply(t,n)})}function q(e,t,n,o,r){const s=Zone.__symbol__(o);if(t[s])return;const i=t[s]=t[o];t[o]=function(s,a,c){return a&&a.prototype&&r.forEach((function(t){const r=`${n}.${o}::`+t,s=a.prototype;if(s.hasOwnProperty(t)){const n=e.ObjectGetOwnPropertyDescriptor(s,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,r),e._redefineProperty(a.prototype,t,n)):s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))}else s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))})),i.call(t,s,a,c)},e.attachOriginToPatched(t[o],i)}const B=Zone.__symbol__,$=Object[B("defineProperty")]=Object.defineProperty,U=Object[B("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,W=Object.create,V=B("unconfigurables");function X(e,t,n){const o=n.configurable;return K(e,t,n=Y(e,t,n),o)}function J(e,t){return e&&e[V]&&e[V][t]}function Y(e,t,n){return Object.isFrozen(n)||(n.configurable=!0),n.configurable||(e[V]||Object.isFrozen(e)||$(e,V,{writable:!0,value:{}}),e[V]&&(e[V][t]=!0)),n}function K(e,t,n,o){try{return $(e,t,n)}catch(r){if(!n.configurable)throw r;void 0===o?delete n.configurable:n.configurable=o;try{return $(e,t,n)}catch(r){let o=null;try{o=JSON.stringify(n)}catch(r){o=n.toString()}console.log(`Attempting to configure '${t}' with descriptor '${o}' on object '${e}' and got error, giving up: ${r}`)}}}const Q=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],ee=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],te=["load"],ne=["blur","error","focus","load","resize","scroll","messageerror"],oe=["bounce","finish","start"],re=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],se=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ie=["close","error","open","message"],ae=["error","message"],ce=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Q,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function le(e,t,n){if(!n||0===n.length)return t;const o=n.filter(t=>t.target===e);if(!o||0===o.length)return t;const r=o[0].ignoreProperties;return t.filter(e=>-1===r.indexOf(e))}function ue(e,t,n,o){e&&Z(e,le(e,t,n),o)}function he(e,t){if(y&&!v)return;if(Zone[e.symbol("patchEvents")])return;const n="undefined"!=typeof WebSocket,o=t.__Zone_ignore_on_properties;if(b){const e=window,t=I?[{target:e,ignoreProperties:["error"]}]:[];ue(e,ce.concat(["messageerror"]),o?o.concat(t):o,r(e)),ue(Document.prototype,ce,o),void 0!==e.SVGElement&&ue(e.SVGElement.prototype,ce,o),ue(Element.prototype,ce,o),ue(HTMLElement.prototype,ce,o),ue(HTMLMediaElement.prototype,ee,o),ue(HTMLFrameSetElement.prototype,Q.concat(ne),o),ue(HTMLBodyElement.prototype,Q.concat(ne),o),ue(HTMLFrameElement.prototype,te,o),ue(HTMLIFrameElement.prototype,te,o);const n=e.HTMLMarqueeElement;n&&ue(n.prototype,oe,o);const s=e.Worker;s&&ue(s.prototype,ae,o)}const s=t.XMLHttpRequest;s&&ue(s.prototype,re,o);const i=t.XMLHttpRequestEventTarget;i&&ue(i&&i.prototype,re,o),"undefined"!=typeof IDBIndex&&(ue(IDBIndex.prototype,se,o),ue(IDBRequest.prototype,se,o),ue(IDBOpenDBRequest.prototype,se,o),ue(IDBDatabase.prototype,se,o),ue(IDBTransaction.prototype,se,o),ue(IDBCursor.prototype,se,o)),n&&ue(WebSocket.prototype,ie,o)}Zone.__load_patch("util",(e,t,r)=>{r.patchOnProperties=Z,r.patchMethod=z,r.bindArguments=_,r.patchMacroTask=P;const a=t.__symbol__("BLACK_LISTED_EVENTS"),c=t.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[a]=e[c]),e[a]&&(t[a]=t[c]=e[a]),r.patchEventPrototype=G,r.patchEventTarget=F,r.isIEOrEdge=L,r.ObjectDefineProperty=o,r.ObjectGetOwnPropertyDescriptor=n,r.ObjectCreate=s,r.ArraySlice=i,r.patchClass=D,r.wrapWithCurrentZone=l,r.filterProperties=le,r.attachOriginToPatched=O,r._redefineProperty=X,r.patchCallbacks=q,r.getGlobalObjects=()=>({globalSources:N,zoneSymbolEventNames:M,eventNames:ce,isBrowser:b,isMix:v,isNode:y,TRUE_STR:"true",FALSE_STR:"false",ZONE_SYMBOL_PREFIX:"__zone_symbol__",ADD_EVENT_LISTENER_STR:"addEventListener",REMOVE_EVENT_LISTENER_STR:"removeEventListener"})});const pe=h("zoneTask");function fe(e,t,n,o){let r=null,s=null;n+=o;const i={};function a(t){const n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{t.data&&t.data.isPeriodic||("number"==typeof n.handleId?delete i[n.handleId]:n.handleId&&(n.handleId[pe]=null))}},n.handleId=r.apply(e,n.args),t}function c(e){return s(e.data.handleId)}r=z(e,t+=o,n=>function(r,s){if("function"==typeof s[0]){const e=u(t,s[0],{isPeriodic:"Interval"===o,delay:"Timeout"===o||"Interval"===o?s[1]||0:void 0,args:s},a,c);if(!e)return e;const n=e.data.handleId;return"number"==typeof n?i[n]=e:n&&(n[pe]=e),n&&n.ref&&n.unref&&"function"==typeof n.ref&&"function"==typeof n.unref&&(e.ref=n.ref.bind(n),e.unref=n.unref.bind(n)),"number"==typeof n||n?n:e}return n.apply(e,s)}),s=z(e,n,t=>function(n,o){const r=o[0];let s;"number"==typeof r?s=i[r]:(s=r&&r[pe],s||(s=r)),s&&"string"==typeof s.type?"notScheduled"!==s.state&&(s.cancelFn&&s.data.isPeriodic||0===s.runCount)&&("number"==typeof r?delete i[r]:r&&(r[pe]=null),s.zone.cancelTask(s)):t.apply(e,o)})}function de(e,t){if(Zone[t.symbol("patchEventTarget")])return;const{eventNames:n,zoneSymbolEventNames:o,TRUE_STR:r,FALSE_STR:s,ZONE_SYMBOL_PREFIX:i}=t.getGlobalObjects();for(let c=0;c<n.length;c++){const e=n[c],t=i+(e+s),a=i+(e+r);o[e]={},o[e][s]=t,o[e][r]=a}const a=e.EventTarget;return a&&a.prototype?(t.patchEventTarget(e,[a&&a.prototype]),!0):void 0}Zone.__load_patch("legacy",e=>{const t=e[Zone.__symbol__("legacyPatch")];t&&t()}),Zone.__load_patch("timers",e=>{fe(e,"set","clear","Timeout"),fe(e,"set","clear","Interval"),fe(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{fe(e,"request","cancel","AnimationFrame"),fe(e,"mozRequest","mozCancel","AnimationFrame"),fe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,t)=>{const n=["alert","prompt","confirm"];for(let o=0;o<n.length;o++)z(e,n[o],(n,o,r)=>function(o,s){return t.current.run(n,e,s,r)})}),Zone.__load_patch("EventTarget",(e,t,n)=>{!function(e,t){t.patchEventPrototype(e,t)}(e,n),de(e,n);const o=e.XMLHttpRequestEventTarget;o&&o.prototype&&n.patchEventTarget(e,[o.prototype]),D("MutationObserver"),D("WebKitMutationObserver"),D("IntersectionObserver"),D("FileReader")}),Zone.__load_patch("on_property",(e,t,n)=>{he(n,e),Object.defineProperty=function(e,t,n){if(J(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);const o=n.configurable;return"prototype"!==t&&(n=Y(e,t,n)),K(e,t,n,o)},Object.defineProperties=function(e,t){return Object.keys(t).forEach((function(n){Object.defineProperty(e,n,t[n])})),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach((function(n){t[n]=Y(e,n,t[n])})),W(e,t)},Object.getOwnPropertyDescriptor=function(e,t){const n=U(e,t);return n&&J(e,t)&&(n.configurable=!1),n}}),Zone.__load_patch("customElements",(e,t,n)=>{!function(e,t){const{isBrowser:n,isMix:o}=t.getGlobalObjects();(n||o)&&e.customElements&&"customElements"in e&&t.patchCallbacks(t,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,n)}),Zone.__load_patch("XHR",(e,t)=>{!function(e){const p=e.XMLHttpRequest;if(!p)return;const f=p.prototype;let d=f[a],g=f[c];if(!d){const t=e.XMLHttpRequestEventTarget;if(t){const e=t.prototype;d=e[a],g=e[c]}}function _(e){const t=e.data,o=t.target;o[s]=!1,o[l]=!1;const i=o[r];d||(d=o[a],g=o[c]),i&&g.call(o,"readystatechange",i);const u=o[r]=()=>{if(o.readyState===o.DONE)if(!t.aborted&&o[s]&&"scheduled"===e.state){const n=o.__zone_symbol__loadfalse;if(n&&n.length>0){const r=e.invoke;e.invoke=function(){const n=o.__zone_symbol__loadfalse;for(let t=0;t<n.length;t++)n[t]===e&&n.splice(t,1);t.aborted||"scheduled"!==e.state||r.call(e)},n.push(e)}else e.invoke()}else t.aborted||!1!==o[s]||(o[l]=!0)};return d.call(o,"readystatechange",u),o[n]||(o[n]=e),T.apply(o,t.args),o[s]=!0,e}function m(){}function k(e){const t=e.data;return t.aborted=!0,w.apply(t.target,t.args)}const y=z(f,"open",()=>function(e,t){return e[o]=0==t[2],e[i]=t[1],y.apply(e,t)}),b=h("fetchTaskAborting"),v=h("fetchTaskScheduling"),T=z(f,"send",()=>function(e,n){if(!0===t.current[v])return T.apply(e,n);if(e[o])return T.apply(e,n);{const t={target:e,url:e[i],isPeriodic:!1,args:n,aborted:!1},o=u("XMLHttpRequest.send",m,t,_,k);e&&!0===e[l]&&!t.aborted&&"scheduled"===o.state&&o.invoke()}}),w=z(f,"abort",()=>function(e,o){const r=e[n];if(r&&"string"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(!0===t.current[b])return w.apply(e,o)})}(e);const n=h("xhrTask"),o=h("xhrSync"),r=h("xhrListener"),s=h("xhrScheduled"),i=h("xhrURL"),l=h("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function(e,t){const o=e.constructor.name;for(let r=0;r<t.length;r++){const s=t[r],i=e[s];if(i){if(!m(n(e,s)))continue;e[s]=(e=>{const t=function(){return e.apply(this,_(arguments,o+"."+s))};return O(t,e),t})(i)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,t)=>{function n(t){return function(n){H(e,t).forEach(o=>{const r=e.PromiseRejectionEvent;if(r){const e=new r(t,{promise:n.promise,reason:n.rejection});o.invoke(e)}})}}e.PromiseRejectionEvent&&(t[h("unhandledPromiseRejectionHandler")]=n("unhandledrejection"),t[h("rejectionHandledHandler")]=n("rejectionhandled"))})}},[[1,0]]]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js.LICENSE.txt b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.14628a6f4ca10d3018fd.js.LICENSE.txt
new file mode 100644 (file)
index 0000000..c91a05e
--- /dev/null
@@ -0,0 +1,7 @@
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.513b02b42d061373f212.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.513b02b42d061373f212.js
deleted file mode 100644 (file)
index 78d70bc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1:function(e,t,n){e.exports=n("hN/g")},"hN/g":function(e,t,n){"use strict";n.r(t),n("pDpN")},pDpN:function(e,t){!function(e){const t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function o(e,n){t&&t.measure&&t.measure(e,n)}n("Zone");const r=!0===e.__zone_symbol__forceDuplicateZoneCheck;if(e.Zone){if(r||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}class s{constructor(e,t){this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new a(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(e.Promise!==D.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let e=s.current;for(;e.parent;)e=e.parent;return e}static get current(){return P.zone}static get currentTask(){return O}static __load_patch(t,i){if(D.hasOwnProperty(t)){if(r)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const r="Zone:"+t;n(r),D[t]=i(e,s,z),o(r,r)}}get parent(){return this._parent}get name(){return this._name}get(e){const t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null}fork(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)}wrap(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);const n=this._zoneDelegate.intercept(this,e,t),o=this;return function(){return o.runGuarded(n,this,arguments,t)}}run(e,t,n,o){P={parent:P,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,o)}finally{P=P.parent}}runGuarded(e,t=null,n,o){P={parent:P,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,o)}catch(r){if(this._zoneDelegate.handleError(this,r))throw r}}finally{P=P.parent}}runTask(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");if(e.state===k&&(e.type===S||e.type===Z))return;const o=e.state!=v;o&&e._transitionTo(v,b),e.runCount++;const r=O;O=e,P={parent:P,zone:this};try{e.type==Z&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(s){if(this._zoneDelegate.handleError(this,s))throw s}}finally{e.state!==k&&e.state!==w&&(e.type==S||e.data&&e.data.isPeriodic?o&&e._transitionTo(b,v):(e.runCount=0,this._updateTaskCount(e,-1),o&&e._transitionTo(k,v,k))),P=P.parent,O=r}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(y,k);const t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(n){throw e._transitionTo(w,y,k),this._zoneDelegate.handleError(this,n),n}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==y&&e._transitionTo(b,y),e}scheduleMicroTask(e,t,n,o){return this.scheduleTask(new c(E,e,t,n,o,void 0))}scheduleMacroTask(e,t,n,o,r){return this.scheduleTask(new c(Z,e,t,n,o,r))}scheduleEventTask(e,t,n,o,r){return this.scheduleTask(new c(S,e,t,n,o,r))}cancelTask(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||m).name+"; Execution: "+this.name+")");e._transitionTo(T,b,v);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(w,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(k,T),e.runCount=0,e}_updateTaskCount(e,t){const n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(let o=0;o<n.length;o++)n[o]._updateTaskCount(e.type,t)}}s.__symbol__=I;const i={name:"",onHasTask:(e,t,n,o)=>e.hasTask(n,o),onScheduleTask:(e,t,n,o)=>e.scheduleTask(n,o),onInvokeTask:(e,t,n,o,r,s)=>e.invokeTask(n,o,r,s),onCancelTask:(e,t,n,o)=>e.cancelTask(n,o)};class a{constructor(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const o=n&&n.onHasTask;(o||t&&t._hasTaskZS)&&(this._hasTaskZS=o?n:i,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=i,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=i,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=i,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new s(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,o,r){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,o,r):t.apply(n,o)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=E)throw new Error("Task is missing scheduleFn.");g(t)}return n}invokeTask(e,t,n,o){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,o):t.callback.apply(n,o)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(n){this.handleError(e,n)}}_updateTaskCount(e,t){const n=this._taskCounts,o=n[e],r=n[e]=o+t;if(r<0)throw new Error("More tasks executed then were scheduled.");0!=o&&0!=r||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})}}class c{constructor(t,n,o,r,s,i){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=t,this.source=n,this.data=r,this.scheduleFn=s,this.cancelFn=i,this.callback=o;const a=this;this.invoke=t===S&&r&&r.useG?c.invokeTask:function(){return c.invokeTask.call(e,a,this,arguments)}}static invokeTask(e,t,n){e||(e=this),j++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==j&&_(),j--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(k,y)}_transitionTo(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?" or '"+n+"'":""}, was '${this._state}'.`);this._state=e,e==k&&(this._zoneDelegates=null)}toString(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const l=I("setTimeout"),u=I("Promise"),h=I("then");let p,f=[],d=!1;function g(t){if(0===j&&0===f.length)if(p||e[u]&&(p=e[u].resolve(0)),p){let e=p[h];e||(e=p.then),e.call(p,_)}else e[l](_,0);t&&f.push(t)}function _(){if(!d){for(d=!0;f.length;){const t=f;f=[];for(let n=0;n<t.length;n++){const o=t[n];try{o.zone.runTask(o,null,null)}catch(e){z.onUnhandledError(e)}}}z.microtaskDrainDone(),d=!1}}const m={name:"NO ZONE"},k="notScheduled",y="scheduling",b="scheduled",v="running",T="canceling",w="unknown",E="microTask",Z="macroTask",S="eventTask",D={},z={symbol:I,currentZoneFrame:()=>P,onUnhandledError:C,microtaskDrainDone:C,scheduleMicroTask:g,showUncaughtError:()=>!s[I("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:C,patchMethod:()=>C,bindArguments:()=>[],patchThen:()=>C,patchMacroTask:()=>C,setNativePromise:e=>{e&&"function"==typeof e.resolve&&(p=e.resolve(0))},patchEventPrototype:()=>C,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>C,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>C,wrapWithCurrentZone:()=>C,filterProperties:()=>[],attachOriginToPatched:()=>C,_redefineProperty:()=>C,patchCallbacks:()=>C};let P={parent:null,zone:new s(null,null)},O=null,j=0;function C(){}function I(e){return"__zone_symbol__"+e}o("Zone","Zone"),e.Zone=s}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global),Zone.__load_patch("ZoneAwarePromise",(e,t,n)=>{const o=Object.getOwnPropertyDescriptor,r=Object.defineProperty,s=n.symbol,i=[],a=s("Promise"),c=s("then");n.onUnhandledError=e=>{if(n.showUncaughtError()){const t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;i.length;)for(;i.length;){const t=i.shift();try{t.zone.runGuarded(()=>{throw t})}catch(e){u(e)}}};const l=s("unhandledPromiseRejectionHandler");function u(e){n.onUnhandledError(e);try{const n=t[l];n&&"function"==typeof n&&n.call(this,e)}catch(o){}}function h(e){return e&&e.then}function p(e){return e}function f(e){return Z.reject(e)}const d=s("state"),g=s("value"),_=s("finally"),m=s("parentPromiseValue"),k=s("parentPromiseState");function y(e,t){return n=>{try{v(e,t,n)}catch(o){v(e,!1,o)}}}const b=s("currentTaskTrace");function v(e,o,s){const a=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}}();if(e===s)throw new TypeError("Promise resolved with itself");if(null===e[d]){let u=null;try{"object"!=typeof s&&"function"!=typeof s||(u=s&&s.then)}catch(l){return a(()=>{v(e,!1,l)})(),e}if(!1!==o&&s instanceof Z&&s.hasOwnProperty(d)&&s.hasOwnProperty(g)&&null!==s[d])w(s),v(e,s[d],s[g]);else if(!1!==o&&"function"==typeof u)try{u.call(s,a(y(e,o)),a(y(e,!1)))}catch(l){a(()=>{v(e,!1,l)})()}else{e[d]=o;const a=e[g];if(e[g]=s,e[_]===_&&!0===o&&(e[d]=e[k],e[g]=e[m]),!1===o&&s instanceof Error){const e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&r(s,b,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t<a.length;)E(e,a[t++],a[t++],a[t++],a[t++]);if(0==a.length&&0==o){e[d]=0;try{throw new Error("Uncaught (in promise): "+((c=s)&&c.toString===Object.prototype.toString?(c.constructor&&c.constructor.name||"")+": "+JSON.stringify(c):c?c.toString():Object.prototype.toString.call(c))+(s&&s.stack?"\n"+s.stack:""))}catch(l){const o=l;o.rejection=s,o.promise=e,o.zone=t.current,o.task=t.currentTask,i.push(o),n.scheduleMicroTask()}}}}var c;return e}const T=s("rejectionHandledHandler");function w(e){if(0===e[d]){try{const n=t[T];n&&"function"==typeof n&&n.call(this,{rejection:e[g],promise:e})}catch(n){}e[d]=!1;for(let t=0;t<i.length;t++)e===i[t].promise&&i.splice(t,1)}}function E(e,t,n,o,r){w(e);const s=e[d],i=s?"function"==typeof o?o:p:"function"==typeof r?r:f;t.scheduleMicroTask("Promise.then",()=>{try{const o=e[g],r=n&&_===n[_];r&&(n[m]=o,n[k]=s);const a=t.run(i,void 0,r&&i!==f&&i!==p?[]:[o]);v(n,!0,a)}catch(o){v(n,!1,o)}},n)}class Z{constructor(e){const t=this;if(!(t instanceof Z))throw new Error("Must be an instanceof Promise.");t[d]=null,t[g]=[];try{e&&e(y(t,!0),y(t,!1))}catch(n){v(t,!1,n)}}static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(e){return v(new this(null),!0,e)}static reject(e){return v(new this(null),!1,e)}static race(e){let t,n,o=new this((e,o)=>{t=e,n=o});function r(e){t(e)}function s(e){n(e)}for(let i of e)h(i)||(i=this.resolve(i)),i.then(r,s);return o}static all(e){let t,n,o=new this((e,o)=>{t=e,n=o}),r=2,s=0;const i=[];for(let a of e){h(a)||(a=this.resolve(a));const e=s;a.then(n=>{i[e]=n,r--,0===r&&t(i)},n),r++,s++}return r-=2,0===r&&t(i),o}get[Symbol.toStringTag](){return"Promise"}then(e,n){const o=new this.constructor(null),r=t.current;return null==this[d]?this[g].push(r,o,e,n):E(this,r,o,e,n),o}catch(e){return this.then(null,e)}finally(e){const n=new this.constructor(null);n[_]=_;const o=t.current;return null==this[d]?this[g].push(o,n,e,e):E(this,o,n,e,e),n}}Z.resolve=Z.resolve,Z.reject=Z.reject,Z.race=Z.race,Z.all=Z.all;const S=e[a]=e.Promise,D=t.__symbol__("ZoneAwarePromise");let z=o(e,"Promise");z&&!z.configurable||(z&&delete z.writable,z&&delete z.value,z||(z={configurable:!0,enumerable:!0}),z.get=function(){return e[D]?e[D]:e[a]},z.set=function(t){t===Z?e[D]=t:(e[a]=t,t.prototype[c]||O(t),n.setNativePromise(t))},r(e,"Promise",z)),e.Promise=Z;const P=s("thenPatched");function O(e){const t=e.prototype,n=o(t,"then");if(n&&(!1===n.writable||!n.configurable))return;const r=t.then;t[c]=r,e.prototype.then=function(e,t){return new Z((e,t)=>{r.call(this,e,t)}).then(e,t)},e[P]=!0}if(n.patchThen=O,S){O(S);const t=e.fetch;"function"==typeof t&&(e[n.symbol("fetch")]=t,e.fetch=(j=t,function(){let e=j.apply(this,arguments);if(e instanceof Z)return e;let t=e.constructor;return t[P]||O(t),e}))}var j;return Promise[t.__symbol__("uncaughtPromiseErrors")]=i,Z});const n=Object.getOwnPropertyDescriptor,o=Object.defineProperty,r=Object.getPrototypeOf,s=Object.create,i=Array.prototype.slice,a=Zone.__symbol__("addEventListener"),c=Zone.__symbol__("removeEventListener");function l(e,t){return Zone.current.wrap(e,t)}function u(e,t,n,o,r){return Zone.current.scheduleMacroTask(e,t,n,o,r)}const h=Zone.__symbol__,p="undefined"!=typeof window,f=p?window:void 0,d=p&&f||"object"==typeof self&&self||global,g=[null];function _(e,t){for(let n=e.length-1;n>=0;n--)"function"==typeof e[n]&&(e[n]=l(e[n],t+"_"+n));return e}function m(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}const k="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,y=!("nw"in d)&&void 0!==d.process&&"[object process]"==={}.toString.call(d.process),b=!y&&!k&&!(!p||!f.HTMLElement),v=void 0!==d.process&&"[object process]"==={}.toString.call(d.process)&&!k&&!(!p||!f.HTMLElement),T={},w=function(e){if(!(e=e||d.event))return;let t=T[e.type];t||(t=T[e.type]=h("ON_PROPERTY"+e.type));const n=this||e.target||d,o=n[t];let r;if(b&&n===f&&"error"===e.type){const t=e;r=o&&o.call(this,t.message,t.filename,t.lineno,t.colno,t.error),!0===r&&e.preventDefault()}else r=o&&o.apply(this,arguments),null==r||r||e.preventDefault();return r};function E(e,t,r){let s=n(e,t);if(!s&&r&&n(r,t)&&(s={enumerable:!0,configurable:!0}),!s||!s.configurable)return;const i=h("on"+t+"patched");if(e.hasOwnProperty(i)&&e[i])return;delete s.writable,delete s.value;const a=s.get,c=s.set,l=t.substr(2);let u=T[l];u||(u=T[l]=h("ON_PROPERTY"+l)),s.set=function(t){let n=this;n||e!==d||(n=d),n&&(n[u]&&n.removeEventListener(l,w),c&&c.apply(n,g),"function"==typeof t?(n[u]=t,n.addEventListener(l,w,!1)):n[u]=null)},s.get=function(){let n=this;if(n||e!==d||(n=d),!n)return null;const o=n[u];if(o)return o;if(a){let e=a&&a.call(this);if(e)return s.set.call(this,e),"function"==typeof n.removeAttribute&&n.removeAttribute(t),e}return null},o(e,t,s),e[i]=!0}function Z(e,t,n){if(t)for(let o=0;o<t.length;o++)E(e,"on"+t[o],n);else{const t=[];for(const n in e)"on"==n.substr(0,2)&&t.push(n);for(let o=0;o<t.length;o++)E(e,t[o],n)}}const S=h("originalInstance");function D(e){const t=d[e];if(!t)return;d[h(e)]=t,d[e]=function(){const n=_(arguments,e);switch(n.length){case 0:this[S]=new t;break;case 1:this[S]=new t(n[0]);break;case 2:this[S]=new t(n[0],n[1]);break;case 3:this[S]=new t(n[0],n[1],n[2]);break;case 4:this[S]=new t(n[0],n[1],n[2],n[3]);break;default:throw new Error("Arg list too long.")}},O(d[e],t);const n=new t((function(){}));let r;for(r in n)"XMLHttpRequest"===e&&"responseBlob"===r||function(t){"function"==typeof n[t]?d[e].prototype[t]=function(){return this[S][t].apply(this[S],arguments)}:o(d[e].prototype,t,{set:function(n){"function"==typeof n?(this[S][t]=l(n,e+"."+t),O(this[S][t],n)):this[S][t]=n},get:function(){return this[S][t]}})}(r);for(r in t)"prototype"!==r&&t.hasOwnProperty(r)&&(d[e][r]=t[r])}function z(e,t,o){let s=e;for(;s&&!s.hasOwnProperty(t);)s=r(s);!s&&e[t]&&(s=e);const i=h(t);let a=null;if(s&&!(a=s[i])&&(a=s[i]=s[t],m(s&&n(s,t)))){const e=o(a,i,t);s[t]=function(){return e(this,arguments)},O(s[t],a)}return a}function P(e,t,n){let o=null;function r(e){const t=e.data;return t.args[t.cbIdx]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}o=z(e,t,e=>function(t,o){const s=n(t,o);return s.cbIdx>=0&&"function"==typeof o[s.cbIdx]?u(s.name,o[s.cbIdx],s,r):e.apply(t,o)})}function O(e,t){e[h("OriginalDelegate")]=t}let j=!1,C=!1;function I(){try{const e=f.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(e){}return!1}function L(){if(j)return C;j=!0;try{const e=f.navigator.userAgent;-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(C=!0)}catch(e){}return C}Zone.__load_patch("toString",e=>{const t=Function.prototype.toString,n=h("OriginalDelegate"),o=h("Promise"),r=h("Error"),s=function(){if("function"==typeof this){const s=this[n];if(s)return"function"==typeof s?t.call(s):Object.prototype.toString.call(s);if(this===Promise){const n=e[o];if(n)return t.call(n)}if(this===Error){const n=e[r];if(n)return t.call(n)}}return t.call(this)};s[n]=t,Function.prototype.toString=s;const i=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":i.call(this)}});let R=!1;if("undefined"!=typeof window)try{const e=Object.defineProperty({},"passive",{get:function(){R=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch(ge){R=!1}const x={useG:!0},M={},N={},A=/^__zone_symbol__(\w+)(true|false)$/;function F(e,t,n){const o=n&&n.add||"addEventListener",s=n&&n.rm||"removeEventListener",i=n&&n.listeners||"eventListeners",a=n&&n.rmAll||"removeAllListeners",c=h(o),l="."+o+":",u=function(e,t,n){if(e.isRemoved)return;const o=e.callback;"object"==typeof o&&o.handleEvent&&(e.callback=e=>o.handleEvent(e),e.originalDelegate=o),e.invoke(e,t,[n]);const r=e.options;r&&"object"==typeof r&&r.once&&t[s].call(t,n.type,e.originalDelegate?e.originalDelegate:e.callback,r)},p=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[M[t.type].false];if(o)if(1===o.length)u(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t.__zone_symbol__propagationStopped);o++)u(e[o],n,t)}},f=function(t){if(!(t=t||e.event))return;const n=this||t.target||e,o=n[M[t.type].true];if(o)if(1===o.length)u(o[0],n,t);else{const e=o.slice();for(let o=0;o<e.length&&(!t||!0!==t.__zone_symbol__propagationStopped);o++)u(e[o],n,t)}};function d(t,n){if(!t)return!1;let u=!0;n&&void 0!==n.useG&&(u=n.useG);const d=n&&n.vh;let g=!0;n&&void 0!==n.chkDup&&(g=n.chkDup);let _=!1;n&&void 0!==n.rt&&(_=n.rt);let m=t;for(;m&&!m.hasOwnProperty(o);)m=r(m);if(!m&&t[o]&&(m=t),!m)return!1;if(m[c])return!1;const k=n&&n.eventNameToString,b={},v=m[c]=m[o],T=m[h(s)]=m[s],w=m[h(i)]=m[i],E=m[h(a)]=m[a];let Z;function S(e){R||"boolean"==typeof b.options||null==b.options||(e.options=!!b.options.capture,b.options=e.options)}n&&n.prepend&&(Z=m[h(n.prepend)]=m[n.prepend]);const D=u?function(e){if(!b.isExisting)return S(e),v.call(b.target,b.eventName,b.capture?f:p,b.options)}:function(e){return S(e),v.call(b.target,b.eventName,e.invoke,b.options)},z=u?function(e){if(!e.isRemoved){const t=M[e.eventName];let n;t&&(n=t[e.capture?"true":"false"]);const o=n&&e.target[n];if(o)for(let r=0;r<o.length;r++)if(o[r]===e){o.splice(r,1),e.isRemoved=!0,0===o.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return T.call(e.target,e.eventName,e.capture?f:p,e.options)}:function(e){return T.call(e.target,e.eventName,e.invoke,e.options)},P=n&&n.diff?n.diff:function(e,t){const n=typeof t;return"function"===n&&e.callback===t||"object"===n&&e.originalDelegate===t},j=Zone[Zone.__symbol__("BLACK_LISTED_EVENTS")],C=function(t,n,o,r,s=!1,i=!1){return function(){const a=this||e,c=arguments[0];let l=arguments[1];if(!l)return t.apply(this,arguments);if(y&&"uncaughtException"===c)return t.apply(this,arguments);let h=!1;if("function"!=typeof l){if(!l.handleEvent)return t.apply(this,arguments);h=!0}if(d&&!d(t,l,a,arguments))return;const p=arguments[2];if(j)for(let e=0;e<j.length;e++)if(c===j[e])return t.apply(this,arguments);let f,_=!1;void 0===p?f=!1:!0===p?f=!0:!1===p?f=!1:(f=!!p&&!!p.capture,_=!!p&&!!p.once);const m=Zone.current,v=M[c];let T;if(v)T=v[f?"true":"false"];else{const e="__zone_symbol__"+(k?k(c):c)+"false",t="__zone_symbol__"+(k?k(c):c)+"true";M[c]={},M[c].false=e,M[c].true=t,T=f?t:e}let w,E=a[T],Z=!1;if(E){if(Z=!0,g)for(let e=0;e<E.length;e++)if(P(E[e],l))return}else E=a[T]=[];const S=a.constructor.name,D=N[S];D&&(w=D[c]),w||(w=S+n+(k?k(c):c)),b.options=p,_&&(b.options.once=!1),b.target=a,b.capture=f,b.eventName=c,b.isExisting=Z;const z=u?x:void 0;z&&(z.taskData=b);const O=m.scheduleEventTask(w,l,z,o,r);return b.target=null,z&&(z.taskData=null),_&&(p.once=!0),(R||"boolean"!=typeof O.options)&&(O.options=p),O.target=a,O.capture=f,O.eventName=c,h&&(O.originalDelegate=l),i?E.unshift(O):E.push(O),s?a:void 0}};return m[o]=C(v,l,D,z,_),Z&&(m.prependListener=C(Z,".prependListener:",(function(e){return Z.call(b.target,b.eventName,e.invoke,b.options)}),z,_,!0)),m[s]=function(){const t=this||e,n=arguments[0],o=arguments[2];let r;r=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);const s=arguments[1];if(!s)return T.apply(this,arguments);if(d&&!d(T,s,t,arguments))return;const i=M[n];let a;i&&(a=i[r?"true":"false"]);const c=a&&t[a];if(c)for(let e=0;e<c.length;e++){const n=c[e];if(P(n,s))return c.splice(e,1),n.isRemoved=!0,0===c.length&&(n.allRemoved=!0,t[a]=null),n.zone.cancelTask(n),_?t:void 0}return T.apply(this,arguments)},m[i]=function(){const t=this||e,n=arguments[0],o=[],r=H(t,k?k(n):n);for(let e=0;e<r.length;e++){const t=r[e];o.push(t.originalDelegate?t.originalDelegate:t.callback)}return o},m[a]=function(){const t=this||e,n=arguments[0];if(n){const e=M[n];if(e){const o=t[e.false],r=t[e.true];if(o){const e=o.slice();for(let t=0;t<e.length;t++){const o=e[t];this[s].call(this,n,o.originalDelegate?o.originalDelegate:o.callback,o.options)}}if(r){const e=r.slice();for(let t=0;t<e.length;t++){const o=e[t];this[s].call(this,n,o.originalDelegate?o.originalDelegate:o.callback,o.options)}}}}else{const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=A.exec(e[t]);let o=n&&n[1];o&&"removeListener"!==o&&this[a].call(this,o)}this[a].call(this,"removeListener")}if(_)return this},O(m[o],v),O(m[s],T),E&&O(m[a],E),w&&O(m[i],w),!0}let g=[];for(let r=0;r<t.length;r++)g[r]=d(t[r],n);return g}function H(e,t){const n=[];for(let o in e){const r=A.exec(o);let s=r&&r[1];if(s&&(!t||s===t)){const t=e[o];if(t)for(let e=0;e<t.length;e++)n.push(t[e])}}return n}function G(e,t){const n=e.Event;n&&n.prototype&&t.patchMethod(n.prototype,"stopImmediatePropagation",e=>function(t,n){t.__zone_symbol__propagationStopped=!0,e&&e.apply(t,n)})}function q(e,t,n,o,r){const s=Zone.__symbol__(o);if(t[s])return;const i=t[s]=t[o];t[o]=function(s,a,c){return a&&a.prototype&&r.forEach((function(t){const r=`${n}.${o}::`+t,s=a.prototype;if(s.hasOwnProperty(t)){const n=e.ObjectGetOwnPropertyDescriptor(s,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,r),e._redefineProperty(a.prototype,t,n)):s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))}else s[t]&&(s[t]=e.wrapWithCurrentZone(s[t],r))})),i.call(t,s,a,c)},e.attachOriginToPatched(t[o],i)}const B=Zone.__symbol__,$=Object[B("defineProperty")]=Object.defineProperty,U=Object[B("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,W=Object.create,V=B("unconfigurables");function X(e,t,n){const o=n.configurable;return K(e,t,n=Y(e,t,n),o)}function J(e,t){return e&&e[V]&&e[V][t]}function Y(e,t,n){return Object.isFrozen(n)||(n.configurable=!0),n.configurable||(e[V]||Object.isFrozen(e)||$(e,V,{writable:!0,value:{}}),e[V]&&(e[V][t]=!0)),n}function K(e,t,n,o){try{return $(e,t,n)}catch(r){if(!n.configurable)throw r;void 0===o?delete n.configurable:n.configurable=o;try{return $(e,t,n)}catch(r){let o=null;try{o=JSON.stringify(n)}catch(r){o=n.toString()}console.log(`Attempting to configure '${t}' with descriptor '${o}' on object '${e}' and got error, giving up: ${r}`)}}}const Q=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],ee=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],te=["load"],ne=["blur","error","focus","load","resize","scroll","messageerror"],oe=["bounce","finish","start"],re=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],se=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ie=["close","error","open","message"],ae=["error","message"],ce=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Q,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function le(e,t,n){if(!n||0===n.length)return t;const o=n.filter(t=>t.target===e);if(!o||0===o.length)return t;const r=o[0].ignoreProperties;return t.filter(e=>-1===r.indexOf(e))}function ue(e,t,n,o){e&&Z(e,le(e,t,n),o)}function he(e,t){if(y&&!v)return;if(Zone[e.symbol("patchEvents")])return;const n="undefined"!=typeof WebSocket,o=t.__Zone_ignore_on_properties;if(b){const e=window,t=I?[{target:e,ignoreProperties:["error"]}]:[];ue(e,ce.concat(["messageerror"]),o?o.concat(t):o,r(e)),ue(Document.prototype,ce,o),void 0!==e.SVGElement&&ue(e.SVGElement.prototype,ce,o),ue(Element.prototype,ce,o),ue(HTMLElement.prototype,ce,o),ue(HTMLMediaElement.prototype,ee,o),ue(HTMLFrameSetElement.prototype,Q.concat(ne),o),ue(HTMLBodyElement.prototype,Q.concat(ne),o),ue(HTMLFrameElement.prototype,te,o),ue(HTMLIFrameElement.prototype,te,o);const n=e.HTMLMarqueeElement;n&&ue(n.prototype,oe,o);const s=e.Worker;s&&ue(s.prototype,ae,o)}const s=t.XMLHttpRequest;s&&ue(s.prototype,re,o);const i=t.XMLHttpRequestEventTarget;i&&ue(i&&i.prototype,re,o),"undefined"!=typeof IDBIndex&&(ue(IDBIndex.prototype,se,o),ue(IDBRequest.prototype,se,o),ue(IDBOpenDBRequest.prototype,se,o),ue(IDBDatabase.prototype,se,o),ue(IDBTransaction.prototype,se,o),ue(IDBCursor.prototype,se,o)),n&&ue(WebSocket.prototype,ie,o)}Zone.__load_patch("util",(e,t,r)=>{r.patchOnProperties=Z,r.patchMethod=z,r.bindArguments=_,r.patchMacroTask=P;const a=t.__symbol__("BLACK_LISTED_EVENTS"),c=t.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[a]=e[c]),e[a]&&(t[a]=t[c]=e[a]),r.patchEventPrototype=G,r.patchEventTarget=F,r.isIEOrEdge=L,r.ObjectDefineProperty=o,r.ObjectGetOwnPropertyDescriptor=n,r.ObjectCreate=s,r.ArraySlice=i,r.patchClass=D,r.wrapWithCurrentZone=l,r.filterProperties=le,r.attachOriginToPatched=O,r._redefineProperty=X,r.patchCallbacks=q,r.getGlobalObjects=()=>({globalSources:N,zoneSymbolEventNames:M,eventNames:ce,isBrowser:b,isMix:v,isNode:y,TRUE_STR:"true",FALSE_STR:"false",ZONE_SYMBOL_PREFIX:"__zone_symbol__",ADD_EVENT_LISTENER_STR:"addEventListener",REMOVE_EVENT_LISTENER_STR:"removeEventListener"})});const pe=h("zoneTask");function fe(e,t,n,o){let r=null,s=null;n+=o;const i={};function a(t){const n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{t.data&&t.data.isPeriodic||("number"==typeof n.handleId?delete i[n.handleId]:n.handleId&&(n.handleId[pe]=null))}},n.handleId=r.apply(e,n.args),t}function c(e){return s(e.data.handleId)}r=z(e,t+=o,n=>function(r,s){if("function"==typeof s[0]){const e=u(t,s[0],{isPeriodic:"Interval"===o,delay:"Timeout"===o||"Interval"===o?s[1]||0:void 0,args:s},a,c);if(!e)return e;const n=e.data.handleId;return"number"==typeof n?i[n]=e:n&&(n[pe]=e),n&&n.ref&&n.unref&&"function"==typeof n.ref&&"function"==typeof n.unref&&(e.ref=n.ref.bind(n),e.unref=n.unref.bind(n)),"number"==typeof n||n?n:e}return n.apply(e,s)}),s=z(e,n,t=>function(n,o){const r=o[0];let s;"number"==typeof r?s=i[r]:(s=r&&r[pe],s||(s=r)),s&&"string"==typeof s.type?"notScheduled"!==s.state&&(s.cancelFn&&s.data.isPeriodic||0===s.runCount)&&("number"==typeof r?delete i[r]:r&&(r[pe]=null),s.zone.cancelTask(s)):t.apply(e,o)})}function de(e,t){if(Zone[t.symbol("patchEventTarget")])return;const{eventNames:n,zoneSymbolEventNames:o,TRUE_STR:r,FALSE_STR:s,ZONE_SYMBOL_PREFIX:i}=t.getGlobalObjects();for(let c=0;c<n.length;c++){const e=n[c],t=i+(e+s),a=i+(e+r);o[e]={},o[e][s]=t,o[e][r]=a}const a=e.EventTarget;return a&&a.prototype?(t.patchEventTarget(e,[a&&a.prototype]),!0):void 0}Zone.__load_patch("legacy",e=>{const t=e[Zone.__symbol__("legacyPatch")];t&&t()}),Zone.__load_patch("timers",e=>{fe(e,"set","clear","Timeout"),fe(e,"set","clear","Interval"),fe(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{fe(e,"request","cancel","AnimationFrame"),fe(e,"mozRequest","mozCancel","AnimationFrame"),fe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,t)=>{const n=["alert","prompt","confirm"];for(let o=0;o<n.length;o++)z(e,n[o],(n,o,r)=>function(o,s){return t.current.run(n,e,s,r)})}),Zone.__load_patch("EventTarget",(e,t,n)=>{!function(e,t){t.patchEventPrototype(e,t)}(e,n),de(e,n);const o=e.XMLHttpRequestEventTarget;o&&o.prototype&&n.patchEventTarget(e,[o.prototype]),D("MutationObserver"),D("WebKitMutationObserver"),D("IntersectionObserver"),D("FileReader")}),Zone.__load_patch("on_property",(e,t,n)=>{he(n,e),Object.defineProperty=function(e,t,n){if(J(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);const o=n.configurable;return"prototype"!==t&&(n=Y(e,t,n)),K(e,t,n,o)},Object.defineProperties=function(e,t){return Object.keys(t).forEach((function(n){Object.defineProperty(e,n,t[n])})),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach((function(n){t[n]=Y(e,n,t[n])})),W(e,t)},Object.getOwnPropertyDescriptor=function(e,t){const n=U(e,t);return n&&J(e,t)&&(n.configurable=!1),n}}),Zone.__load_patch("customElements",(e,t,n)=>{!function(e,t){const{isBrowser:n,isMix:o}=t.getGlobalObjects();(n||o)&&e.customElements&&"customElements"in e&&t.patchCallbacks(t,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,n)}),Zone.__load_patch("XHR",(e,t)=>{!function(e){const p=e.XMLHttpRequest;if(!p)return;const f=p.prototype;let d=f[a],g=f[c];if(!d){const t=e.XMLHttpRequestEventTarget;if(t){const e=t.prototype;d=e[a],g=e[c]}}function _(e){const t=e.data,o=t.target;o[s]=!1,o[l]=!1;const i=o[r];d||(d=o[a],g=o[c]),i&&g.call(o,"readystatechange",i);const u=o[r]=()=>{if(o.readyState===o.DONE)if(!t.aborted&&o[s]&&"scheduled"===e.state){const n=o.__zone_symbol__loadfalse;if(n&&n.length>0){const r=e.invoke;e.invoke=function(){const n=o.__zone_symbol__loadfalse;for(let t=0;t<n.length;t++)n[t]===e&&n.splice(t,1);t.aborted||"scheduled"!==e.state||r.call(e)},n.push(e)}else e.invoke()}else t.aborted||!1!==o[s]||(o[l]=!0)};return d.call(o,"readystatechange",u),o[n]||(o[n]=e),T.apply(o,t.args),o[s]=!0,e}function m(){}function k(e){const t=e.data;return t.aborted=!0,w.apply(t.target,t.args)}const y=z(f,"open",()=>function(e,t){return e[o]=0==t[2],e[i]=t[1],y.apply(e,t)}),b=h("fetchTaskAborting"),v=h("fetchTaskScheduling"),T=z(f,"send",()=>function(e,n){if(!0===t.current[v])return T.apply(e,n);if(e[o])return T.apply(e,n);{const t={target:e,url:e[i],isPeriodic:!1,args:n,aborted:!1},o=u("XMLHttpRequest.send",m,t,_,k);e&&!0===e[l]&&!t.aborted&&"scheduled"===o.state&&o.invoke()}}),w=z(f,"abort",()=>function(e,o){const r=e[n];if(r&&"string"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(!0===t.current[b])return w.apply(e,o)})}(e);const n=h("xhrTask"),o=h("xhrSync"),r=h("xhrListener"),s=h("xhrScheduled"),i=h("xhrURL"),l=h("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function(e,t){const o=e.constructor.name;for(let r=0;r<t.length;r++){const s=t[r],i=e[s];if(i){if(!m(n(e,s)))continue;e[s]=(e=>{const t=function(){return e.apply(this,_(arguments,o+"."+s))};return O(t,e),t})(i)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,t)=>{function n(t){return function(n){H(e,t).forEach(o=>{const r=e.PromiseRejectionEvent;if(r){const e=new r(t,{promise:n.promise,reason:n.rejection});o.invoke(e)}})}}e.PromiseRejectionEvent&&(t[h("unhandledPromiseRejectionHandler")]=n("unhandledrejection"),t[h("rejectionHandledHandler")]=n("rejectionhandled"))})}},[[1,0]]]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0907482258dfadeab004.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0907482258dfadeab004.js
deleted file mode 100644 (file)
index fb55203..0000000
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){function r(r){for(var n,u,c=r[0],i=r[1],f=r[2],p=0,s=[];p<c.length;p++)u=c[p],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&s.push(o[u][0]),o[u]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(l&&l(r);s.length;)s.shift()();return a.push.apply(a,f||[]),t()}function t(){for(var e,r=0;r<a.length;r++){for(var t=a[r],n=!0,c=1;c<t.length;c++)0!==o[t[c]]&&(n=!1);n&&(a.splice(r--,1),e=u(u.s=t[0]))}return e}var n={},o={0:0},a=[];function u(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var a,c=document.createElement("script");c.charset="utf-8",c.timeout=120,u.nc&&c.setAttribute("nonce",u.nc),c.src=function(e){return u.p+""+({}[e]||e)+"."+{1:"4a38b529302ffa3f0c24",5:"d6b08e1c042ba6fccdd6",6:"1818f80c2e905e85a90f",7:"8c5c2bbb556260a5cc3e",8:"94051a156c6d11b38ada"}[e]+".js"}(e);var i=new Error;a=function(r){c.onerror=c.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;i.message="Loading chunk "+e+" failed.\n("+n+": "+a+")",i.name="ChunkLoadError",i.type=n,i.request=a,t[1](i)}o[e]=void 0}};var f=setTimeout((function(){a({type:"timeout",target:c})}),12e4);c.onerror=c.onload=a,document.head.appendChild(c)}return Promise.all(r)},u.m=e,u.c=n,u.d=function(e,r,t){u.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,r){if(1&r&&(e=u(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)u.d(t,n,(function(r){return e[r]}).bind(null,n));return t},u.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(r,"a",r),r},u.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},u.p="",u.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],i=c.push.bind(c);c.push=r,c=c.slice();for(var f=0;f<c.length;f++)r(c[f]);var l=i;t()}([]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0e1c754813ff535e4bd5.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.0e1c754813ff535e4bd5.js
new file mode 100644 (file)
index 0000000..e1dd490
--- /dev/null
@@ -0,0 +1 @@
+!function(e){function r(r){for(var n,u,i=r[0],c=r[1],f=r[2],p=0,s=[];p<i.length;p++)u=i[p],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&s.push(o[u][0]),o[u]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return a.push.apply(a,f||[]),t()}function t(){for(var e,r=0;r<a.length;r++){for(var t=a[r],n=!0,i=1;i<t.length;i++)0!==o[t[i]]&&(n=!1);n&&(a.splice(r--,1),e=u(u.s=t[0]))}return e}var n={},o={0:0},a=[];function u(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var a,i=document.createElement("script");i.charset="utf-8",i.timeout=120,u.nc&&i.setAttribute("nonce",u.nc),i.src=function(e){return u.p+""+({}[e]||e)+"."+{1:"9e79c41bbaed982a50af",5:"3532f17ccbf4b268177b",6:"9a60f7741889f52ed7ae",7:"1891b10149a7c2d765ac",8:"88af57a0fd5b75779391"}[e]+".js"}(e);var c=new Error;a=function(r){i.onerror=i.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+a+")",c.name="ChunkLoadError",c.type=n,c.request=a,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){a({type:"timeout",target:i})}),12e4);i.onerror=i.onload=a,document.head.appendChild(i)}return Promise.all(r)},u.m=e,u.c=n,u.d=function(e,r,t){u.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,r){if(1&r&&(e=u(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)u.d(t,n,(function(r){return e[r]}).bind(null,n));return t},u.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(r,"a",r),r},u.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},u.p="",u.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var f=0;f<i.length;f++)r(i[f]);var l=c;t()}([]);
\ No newline at end of file
index 52f8fb9a6b091ac4f267c5bc0a22e1221be3ceb2..deda57abf38229840f2201aad22e40e0863297e6 100644 (file)
@@ -1 +1,2 @@
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Chart=e()}(this,(function(){"use strict";var t={rgb2hsl:e,rgb2hsv:n,rgb2hwb:i,rgb2cmyk:a,rgb2keyword:o,rgb2xyz:s,rgb2lab:l,rgb2lch:function(t){return v(l(t))},hsl2rgb:u,hsl2hsv:function(t){var e=t[1]/100,n=t[2]/100;return 0===n?[0,0,0]:[t[0],2*(e*=(n*=2)<=1?n:2-n)/(n+e)*100,(n+e)/2*100]},hsl2hwb:function(t){return i(u(t))},hsl2cmyk:function(t){return a(u(t))},hsl2keyword:function(t){return o(u(t))},hsv2rgb:d,hsv2hsl:function(t){var e,n,i=t[1]/100,a=t[2]/100;return e=i*a,[t[0],100*(e=(e/=(n=(2-i)*a)<=1?n:2-n)||0),100*(n/=2)]},hsv2hwb:function(t){return i(d(t))},hsv2cmyk:function(t){return a(d(t))},hsv2keyword:function(t){return o(d(t))},hwb2rgb:h,hwb2hsl:function(t){return e(h(t))},hwb2hsv:function(t){return n(h(t))},hwb2cmyk:function(t){return a(h(t))},hwb2keyword:function(t){return o(h(t))},cmyk2rgb:c,cmyk2hsl:function(t){return e(c(t))},cmyk2hsv:function(t){return n(c(t))},cmyk2hwb:function(t){return i(c(t))},cmyk2keyword:function(t){return o(c(t))},keyword2rgb:_,keyword2hsl:function(t){return e(_(t))},keyword2hsv:function(t){return n(_(t))},keyword2hwb:function(t){return i(_(t))},keyword2cmyk:function(t){return a(_(t))},keyword2lab:function(t){return l(_(t))},keyword2xyz:function(t){return s(_(t))},xyz2rgb:f,xyz2lab:m,xyz2lch:function(t){return v(m(t))},lab2xyz:p,lab2rgb:y,lab2lch:v,lch2lab:x,lch2xyz:function(t){return p(x(t))},lch2rgb:function(t){return y(x(t))}};function e(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s==o?e=0:i==s?e=(a-r)/l:a==s?e=2+(r-i)/l:r==s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s==o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]}function n(t){var e,n,i=t[0],a=t[1],r=t[2],o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return n=0==s?0:l/s*1e3/10,s==o?e=0:i==s?e=(a-r)/l:a==s?e=2+(r-i)/l:r==s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),[e,n,s/255*1e3/10]}function i(t){var n=t[0],i=t[1],a=t[2];return[e(t)[0],1/255*Math.min(n,Math.min(i,a))*100,100*(a=1-1/255*Math.max(n,Math.max(i,a)))]}function a(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function o(t){return w[JSON.stringify(t)]}function s(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]}function l(t){var e=s(t),n=e[0],i=e[1],a=e[2];return i/=100,a/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function u(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,a[u]=255*(r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e);return a}function d(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}}function h(t){var e,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u>1&&(s/=u,l/=u),i=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(i=1-i),a=s+i*((n=1-l)-s),e){default:case 6:case 0:r=n,g=a,b=s;break;case 1:r=a,g=n,b=s;break;case 2:r=s,g=n,b=a;break;case 3:r=s,g=a,b=n;break;case 4:r=a,g=s,b=n;break;case 5:r=n,g=s,b=a}return[255*r,255*g,255*b]}function c(t){var e=t[1]/100,n=t[2]/100,i=t[3]/100;return[255*(1-Math.min(1,t[0]/100*(1-i)+i)),255*(1-Math.min(1,e*(1-i)+i)),255*(1-Math.min(1,n*(1-i)+i))]}function f(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]}function m(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]}function p(t){var e,n,i,a,r=t[0],o=t[1],s=t[2];return r<=8?a=(n=100*r/903.3)/100*7.787+16/116:(n=100*Math.pow((r+16)/116,3),a=Math.pow(n/100,1/3)),[e=e/95.047<=.008856?e=95.047*(o/500+a-16/116)/7.787:95.047*Math.pow(o/500+a,3),n,i=i/108.883<=.008859?i=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function v(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]}function y(t){return f(p(t))}function x(t){var e,n=t[1];return e=t[2]/360*2*Math.PI,[t[0],n*Math.cos(e),n*Math.sin(e)]}function _(t){return k[t]}var k={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},w={};for(var M in k)w[JSON.stringify(k[M])]=M;var S=function(){return new O};for(var D in t){S[D+"Raw"]=function(e){return function(n){return"number"==typeof n&&(n=Array.prototype.slice.call(arguments)),t[e](n)}}(D);var C=/(\w+)2(\w+)/.exec(D),P=C[1],T=C[2];(S[P]=S[P]||{})[T]=S[D]=function(e){return function(n){"number"==typeof n&&(n=Array.prototype.slice.call(arguments));var i=t[e](n);if("string"==typeof i||void 0===i)return i;for(var a=0;a<i.length;a++)i[a]=Math.round(i[a]);return i}}(D)}var O=function(){this.convs={}};O.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},O.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},O.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space;e=S[n][t](this.convs[n]),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach((function(t){O.prototype[t]=function(e){return this.routeSpace(t,arguments)}}));var I=S,A={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},F={getRgba:R,getHsla:L,getRgb:function(t){var e=R(t);return e&&e.slice(0,3)},getHsl:function(t){var e=L(t);return e&&e.slice(0,3)},getHwb:W,getAlpha:function(t){var e=R(t);return e?e[3]:(e=L(t))?e[3]:(e=W(t))?e[3]:void 0},hexString:function(t,e){return e=void 0!==e&&3===t.length?e:t[3],"#"+H(t[0])+H(t[1])+H(t[2])+(e>=0&&e<1?H(Math.round(255*e)):"")},rgbString:function(t,e){return e<1||t[3]&&t[3]<1?Y(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:Y,percentString:function(t,e){return e<1||t[3]&&t[3]<1?N(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"},percentaString:N,hslString:function(t,e){return e<1||t[3]&&t[3]<1?z(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:z,hwbString:function(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return E[t.slice(0,3)]}};function R(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(a=i[2],i=i[1],r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=A[i[1]]))return}for(r=0;r<e.length;r++)e[r]=V(e[r],0,255);return n=n||0==n?V(n,0,1):1,e[3]=n,e}}function L(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function W(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function Y(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function N(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function z(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function V(t,e,n){return Math.min(Math.max(e,t),n)}function H(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var E={};for(var B in A)E[A[B]]=B;var j=function(t){return t instanceof j?t:this instanceof j?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=F.getRgba(t))?this.setValues("rgb",e):(e=F.getHsla(t))?this.setValues("hsl",e):(e=F.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new j(t);var e};j.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return F.hexString(this.values.rgb)},rgbString:function(){return F.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return F.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return F.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return F.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return F.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return F.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return F.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new j,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&("[object Array]"===(e={}.toString.call(t=i[r]))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},j.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},j.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},j.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},j.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,s=1;if(this.valid=!0,"alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];s=e.a}else if(void 0!==e[r[t][0]]){var l=r[t];for(n=0;n<t.length;n++)a[t][n]=e[l[n]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var u in r)u!==t&&(a[u]=I[t][u](a[t]));return!0},j.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},j.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=j);var U,G=j,q={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return q.valueOrDefault(q.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(q.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(q.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(r=e[n],(a=t[n])instanceof Array&&r instanceof Array){if(!q.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(q.isArray(t))return t.map(q.clone);if(q.isObject(t)){for(var e={},n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=q.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){var a=e[t],r=n[t];q.isObject(a)&&q.isObject(r)?q.merge(a,r,i):e[t]=q.clone(r)},_mergerIf:function(t,e,n){var i=e[t],a=n[t];q.isObject(i)&&q.isObject(a)?q.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=q.clone(a))},merge:function(t,e,n){var i,a,r,o,s,l=q.isArray(e)?e:[e],u=l.length;if(!q.isObject(t))return t;for(i=(n=n||{}).merger||q._merger,a=0;a<u;++a)if(q.isObject(e=l[a]))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return q.merge(t,e,{merger:q._mergerIf})},extend:function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;++n)q.each(arguments[n],e);return t},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=q.inherits,t&&q.extend(n.prototype,t),n.__super__=e.prototype,n}},Z=q;q.callCallback=q.callback,q.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},q.getValueOrDefault=q.valueOrDefault,q.getValueAtIndexOrDefault=q.valueAtIndexOrDefault;var $={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-$.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*$.easeInBounce(2*t):.5*$.easeOutBounce(2*t-1)+.5}},X={effects:$};Z.easingEffects=$;var J=Math.PI,K=J/180,Q=2*J,tt=J/2,et=J/4,nt=2*J/3,it={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-J,-tt),t.arc(u,l,o,-tt,0),t.arc(u,d,o,0,tt),t.arc(s,d,o,tt,J)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-tt,tt),t.arc(s,l,o,tt,J+tt)):l<d?(t.arc(s,l,o,-J,0),t.arc(s,d,o,0,J)):t.arc(s,l,o,-J,J),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*K;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(o=e.toString())&&"[object HTMLCanvasElement]"!==o){if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,Q),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=nt,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=nt,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+et)*u,l=Math.sin(h+et)*u,t.arc(i-s,a-l,d,h-J,h-tt),t.arc(i+l,a-s,d,h-tt,h),t.arc(i+s,a+l,d,h,h+tt),t.arc(i-l,a+s,d,h+tt,h+J),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=et;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=et;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=et,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}}else t.drawImage(e,i-e.width/2,a-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},at=it;Z.clear=it.clear,Z.drawRoundedRectangle=function(t){t.beginPath(),it.roundedRect.apply(it,arguments)};var rt={_set:function(t,e){return Z.merge(this[t]||(this[t]={}),e)}};rt._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var ot=rt,st=Z.valueOrDefault,lt={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return Z.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=ot.global,n=st(t.fontSize,e.defaultFontSize),i={family:st(t.fontFamily,e.defaultFontFamily),lineHeight:Z.options.toLineHeight(st(t.lineHeight,e.defaultLineHeight),n),size:n,style:st(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||Z.isNullOrUndef(t.size)||Z.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n){var i,a,r;for(i=0,a=t.length;i<a;++i)if(void 0!==(r=t[i])&&(void 0!==e&&"function"==typeof r&&(r=r(e)),void 0!==n&&Z.isArray(r)&&(r=r[n]),void 0!==r))return r}},ut=Z,dt=at,ht=lt;ut.easing=X,ut.canvas=dt,ut.options=ht;var ct=function(t){ut.extend(this,t),this.initialize.apply(this,arguments)};ut.extend(ct.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=ut.clone(t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)==typeof(l=t[o]))if("string"===d){if((h=G(l)).valid&&(c=G(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(ut.isFinite(l)&&ut.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ut.isNumber(this._model.x)&&ut.isNumber(this._model.y)}}),ct.extend=ut.inherits;var ft=ct,gt=ft.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),mt=gt;Object.defineProperty(gt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(gt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),ot._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ut.noop,onComplete:ut.noop}});var pt={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=ut.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=ut.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),ut.callback(t.render,[e,t],e),ut.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(ut.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},vt=ut.options.resolve,yt=["push","pop","shift","splice","unshift"];function bt(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(yt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var xt=function(t,e){this.initialize(t,e)};ut.extend(xt.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&bt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&bt(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),yt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return ut.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},update:ut.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t){ut.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=ut.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=vt([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=vt([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=vt([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),xt.extend=ut.inherits;var _t=xt;ot._set("global",{elements:{arc:{backgroundColor:ot.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var kt=ft.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=ut.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<o;)a+=2*Math.PI;return a>=o&&a<=s&&r>=n.innerRadius&&r<=n.outerRadius}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i=n.startAngle,a=n.endAngle,r="inner"===n.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(n.x,n.y,Math.max(n.outerRadius-r,0),i,a),e.arc(n.x,n.y,n.innerRadius,a,i,!0),e.closePath(),e.fillStyle=n.backgroundColor,e.fill(),n.borderWidth&&("inner"===n.borderAlign?(e.beginPath(),e.arc(n.x,n.y,n.outerRadius,i-(t=r/n.outerRadius),a+t),n.innerRadius>r?e.arc(n.x,n.y,n.innerRadius-r,a+(t=r/n.innerRadius),i-t,!0):e.arc(n.x,n.y,r,a+Math.PI/2,i-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(n.x,n.y,n.outerRadius,i,a),e.arc(n.x,n.y,n.innerRadius,a,i,!0),e.closePath(),e.lineWidth=2*n.borderWidth,e.lineJoin="round"):(e.lineWidth=n.borderWidth,e.lineJoin="bevel"),e.strokeStyle=n.borderColor,e.stroke()),e.restore()}}),wt=ut.valueOrDefault,Mt=ot.global.defaultColor;ot._set("global",{elements:{line:{tension:.4,backgroundColor:Mt,borderWidth:3,borderColor:Mt,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var St=ft.extend({draw:function(){var t,e,n,i,a=this._view,r=this._chart.ctx,o=a.spanGaps,s=this._children.slice(),l=ot.global,u=l.elements.line,d=-1;for(this._loop&&s.length&&s.push(s[0]),r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=wt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=wt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),d=-1,t=0;t<s.length;++t)e=s[t],n=ut.previousItem(s,t),i=e._view,0===t?i.skip||(r.moveTo(i.x,i.y),d=t):(n=-1===d?n:s[d],i.skip||(d!==t-1&&!o||-1===d?r.moveTo(i.x,i.y):ut.canvas.lineTo(r,n._view,e._view),d=t));r.stroke(),r.restore()}}),Dt=ut.valueOrDefault,Ct=ot.global.defaultColor;function Pt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}ot._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Ct,borderColor:Ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Tt=ft.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:Pt,inXRange:Pt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=ot.global,u=l.defaultColor;e.skip||(void 0===t||ut.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=Dt(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,ut.canvas.drawPoint(n,i,r,o,s,a))}}),Ot=ot.global.defaultColor;function It(t){return t&&void 0!==t.width}function At(t){var e,n,i,a,r;return It(t)?(e=t.x-(r=t.width/2),n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function Ft(t,e,n){return t===e?n:t===n?e:t}function Rt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&At(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}ot._set("global",{elements:{rectangle:{backgroundColor:Ot,borderColor:Ot,borderSkipped:"bottom",borderWidth:0}}});var Lt=ft.extend({draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=At(t),n=e.right-e.left,i=e.bottom-e.top,a=function(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=Ft(e,"left","right")):t.base<t.y&&(e=Ft(e,"bottom","top")),n[e]=!0,n):n}(t);return ut.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Rt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return It(n)?Rt(n,t,null):Rt(n,null,e)},inXRange:function(t){return Rt(this._view,t,null)},inYRange:function(t){return Rt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return It(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return It(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),Wt={},Yt=St,Nt=Tt,zt=Lt;Wt.Arc=kt,Wt.Line=Yt,Wt.Point=Nt,Wt.Rectangle=zt;var Vt=ut.options.resolve;ot._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var Ht=_t.extend({dataElementType:Wt.Rectangle,initialize:function(){var t,e=this;_t.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},i._updateElementGeometry(t,e,n),t.pivot()},_updateElementGeometry:function(t,e,n){var i=this,a=t._model,r=i._getValueScale(),o=r.getBasePixel(),s=r.isHorizontal(),l=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,l);a.horizontal=s,a.base=n?o:u.base,a.x=s?n?o:u.head:d.center,a.y=s?d.center:n?o:u.head,a.height=s?d.size:void 0,a.width=s?void 0:d.size},_getStacks:function(t){var e,n,i=this.chart,a=this._getIndexScale().options.stacked,r=void 0===t?i.data.datasets.length:t+1,o=[];for(e=0;e<r;++e)(n=i.getDatasetMeta(e)).bar&&i.isDatasetVisible(e)&&(!1===a||!0===a&&-1===o.indexOf(n.stack)||void 0===a&&(void 0===n.stack||-1===o.indexOf(n.stack)))&&o.push(n.stack);return o},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=this.getStackCount(),a=this.index,r=n.isHorizontal(),o=r?n.left:n.top,s=o+(r?n.width:n.height),l=[];for(t=0,e=this.getMeta().data.length;t<e;++t)l.push(n.getPixelForValue(null,t,a));return{min:ut.isNullOrUndef(n.options.barThickness)?function(t,e){var n,i,a,r,o=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=s.length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,i-n):o,n=i;return o}(n,l):-1,pixels:l,start:o,end:s,stackCount:i,scale:n}},calculateBarValuePixels:function(t,e){var n,i,a,r,o,s,l=this.chart,u=this.getMeta(),d=this._getValueScale(),h=d.isHorizontal(),c=l.data.datasets,f=+d.getRightValue(c[t].data[e]),g=d.options.minBarLength,m=d.options.stacked,p=u.stack,v=0;if(m||void 0===m&&void 0!==p)for(n=0;n<t;++n)(i=l.getDatasetMeta(n)).bar&&i.stack===p&&i.controller._getValueScaleId()===d.id&&l.isDatasetVisible(n)&&(a=+d.getRightValue(c[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return r=d.getPixelForValue(v),s=(o=d.getPixelForValue(v+f))-r,void 0!==g&&Math.abs(s)<g&&(s=g,o=f>=0&&!h||f<0&&h?r-g:r+g),{size:s,base:r,head:o,center:o+s/2}},calculateBarIndexPixels:function(t,e,n){var i=n.scale.options,a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):function(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t];return ut.isNullOrUndef(r)?(i=e.min*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(ut.valueOrDefault(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(ut.canvas.clipArea(t.ctx,t.chartArea);r<a;++r)isNaN(e.getRightValue(i.data[r]))||n[r].draw();ut.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.rectangle,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=Vt([s[a],o[a],l[a]],d,e);return u}}),Et=ut.valueOrDefault,Bt=ut.options.resolve;ot._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+": ("+t.xLabel+", "+t.yLabel+", "+e.datasets[t.datasetIndex].data[t.index].r+")"}}}});var jt=_t.extend({dataElementType:Wt.Point,update:function(t){var e=this,n=e.getMeta();ut.each(n.data,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Et(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Et(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Et(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u=o.data[e],d={},h={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(n=0,i=c.length;n<i;++n)d[a=c[n]]=Bt([s[a],o[a],l[a]],h,e);return d.radius=Bt([s.radius,u?u.r:void 0,o.radius,l.radius],h,e),d}}),Ut=ut.options.resolve,Gt=ut.valueOrDefault;ot._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],o=a.data[i],s=o&&o.custom||{},l=t.options.elements.arc;return{text:n,fillStyle:Ut([s.backgroundColor,r.backgroundColor,l.backgroundColor],void 0,i),strokeStyle:Ut([s.borderColor,r.borderColor,l.borderColor],void 0,i),lineWidth:Ut([s.borderWidth,r.borderWidth,l.borderWidth],void 0,i),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return ut.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var qt=_t.extend({dataElementType:Wt.Arc,linkScales:ut.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i=this,a=i.chart,r=a.chartArea,o=a.options,s=r.right-r.left,l=r.bottom-r.top,u=Math.min(s,l),d={x:0,y:0},h=i.getMeta(),c=h.data,f=o.cutoutPercentage,g=o.circumference,m=i._getRingWeight(i.index);if(g<2*Math.PI){var p=o.rotation%(2*Math.PI),v=(p+=2*Math.PI*(p>=Math.PI?-1:p<-Math.PI?1:0))+g,y={x:Math.cos(p),y:Math.sin(p)},b={x:Math.cos(v),y:Math.sin(v)},x=p<=0&&v>=0||p<=2*Math.PI&&2*Math.PI<=v,_=p<=.5*Math.PI&&.5*Math.PI<=v||p<=2.5*Math.PI&&2.5*Math.PI<=v,k=p<=-Math.PI&&-Math.PI<=v||p<=Math.PI&&Math.PI<=v,w=p<=.5*-Math.PI&&.5*-Math.PI<=v||p<=1.5*Math.PI&&1.5*Math.PI<=v,M=f/100,S={x:k?-1:Math.min(y.x*(y.x<0?1:M),b.x*(b.x<0?1:M)),y:w?-1:Math.min(y.y*(y.y<0?1:M),b.y*(b.y<0?1:M))},D={x:x?1:Math.max(y.x*(y.x>0?1:M),b.x*(b.x>0?1:M)),y:_?1:Math.max(y.y*(y.y>0?1:M),b.y*(b.y>0?1:M))},C={width:.5*(D.x-S.x),height:.5*(D.y-S.y)};u=Math.min(s/C.width,l/C.height),d={x:-.5*(D.x+S.x),y:-.5*(D.y+S.y)}}for(e=0,n=c.length;e<n;++e)c[e]._options=i._resolveElementOptions(c[e],e);for(a.borderWidth=i.getMaxBorderWidth(),a.outerRadius=Math.max((u-a.borderWidth)/2,0),a.innerRadius=Math.max(f?a.outerRadius/100*f:0,0),a.radiusLength=(a.outerRadius-a.innerRadius)/(i._getVisibleDatasetWeightTotal()||1),a.offsetX=d.x*a.outerRadius,a.offsetY=d.y*a.outerRadius,h.total=i.calculateTotal(),i.outerRadius=a.outerRadius-a.radiusLength*i._getRingWeightOffset(i.index),i.innerRadius=Math.max(i.outerRadius-a.radiusLength*m,0),e=0,n=c.length;e<n;++e)i.updateElement(c[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/(2*Math.PI)),g=t._options||{};ut.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,borderAlign:g.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:n&&s.animateScale?0:i.outerRadius,innerRadius:n&&s.animateScale?0:i.innerRadius,label:ut.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var m=t._model;n&&s.animateRotate||(m.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,m.endAngle=m.startAngle+m.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return ut.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],"inner"!==(o=r?r._resolveElementOptions(a,e):a._options).borderAlign&&(u=(l=o.hoverBorderWidth)>(u=(s=o.borderWidth)>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Gt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Gt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Gt(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=this.getDataset(),s=t.custom||{},l=r.options.elements.arc,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=Ut([s[a],o[a],l[a]],d,e);return u},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Gt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});ot._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var Zt=Ht.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),$t=ut.valueOrDefault,Xt=ut.options.resolve,Jt=ut.canvas._isPointInArea;function Kt(t,e){return $t(t.showLine,e.showLines)}ot._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Qt=_t.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.getScaleForId(a.yAxisID),l=i.getDataset(),u=Kt(l,i.chart.options);for(u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._model=i._resolveLineOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r.getScaleForId(o.yAxisID),c=r.getScaleForId(o.xAxisID),f=o.dataset._model,g=r._resolvePointOptions(t,e);i=c.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?h.getBasePixel():r.calculatePointY(d,e,u),t._xScale=c,t._yScale=h,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:$t(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(n=0,i=c.length;n<i;++n)u[a=c[n]]=Xt([s[a],o[h[a]],o[a],l[a]],d,e);return u},_resolveLineOptions:function(t){var e,n,i,a=this.chart,r=a.data.datasets[this.index],o=t.custom||{},s=a.options,l=s.elements.line,u={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,n=d.length;e<n;++e)u[i=d[e]]=Xt([o[i],r[i],l[i]]);return u.spanGaps=$t(r.spanGaps,s.spanGaps),u.tension=$t(r.lineTension,l.tension),u.steppedLine=Xt([o.steppedLine,r.steppedLine,l.stepped]),u},calculatePointY:function(t,e,n){var i,a,r,o=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),u=0,d=0;if(l.options.stacked){for(i=0;i<n;i++)if(a=o.data.datasets[i],"line"===(r=o.getDatasetMeta(i)).type&&r.yAxisID===l.id&&o.isDatasetVisible(i)){var h=Number(l.getRightValue(a.data[e]));h<0?d+=h||0:u+=h||0}var c=Number(l.getRightValue(t));return l.getPixelForValue(c<0?d+c:u+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)ut.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=ut.splineCurve(ut.previousItem(l,t)._model,n,ut.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)Jt(n=l[t]._model,s)&&(t>0&&Jt(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Jt(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=i.length,o=0;for(Kt(this.getDataset(),e.options)&&(ut.canvas.clipArea(e.ctx,{left:a.left,right:a.right,top:a.top-(t=(n.dataset._model.borderWidth||0)/2),bottom:a.bottom+t}),n.dataset.draw(),ut.canvas.unclipArea(e.ctx));o<r;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=$t(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=$t(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=$t(n.hoverBorderWidth,n.borderWidth),e.radius=$t(n.hoverRadius,n.radius)}}),te=ut.options.resolve;ot._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],o=a.data[i].custom||{},s=t.options.elements.arc;return{text:n,fillStyle:te([o.backgroundColor,r.backgroundColor,s.backgroundColor],void 0,i),strokeStyle:te([o.borderColor,r.borderColor,s.borderColor],void 0,i),lineWidth:te([o.borderWidth,r.borderWidth,s.borderWidth],void 0,i),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var ee=_t.extend({dataElementType:Wt.Arc,linkScales:ut.noop,update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],m=g+(t.hidden?0:i._angles[e]),p=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};ut.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?p:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:m,label:ut.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return ut.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor,a=ut.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=this.getDataset(),s=t.custom||{},l=r.options.elements.arc,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=te([s[a],o[a],l[a]],d,e);return u},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();return isNaN(i.data[t])||a.data[t].hidden?0:te([e.chart.options.elements.arc.angle,2*Math.PI/n],{chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index},t)}});ot._set("pie",ut.clone(ot.doughnut)),ot._set("pie",{cutoutPercentage:0});var ne=qt,ie=ut.valueOrDefault,ae=ut.options.resolve;ot._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var re=_t.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,linkScales:ut.noop,update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i.getDataset();for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveLineOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolvePointOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:ie(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolvePointOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(n=0,i=c.length;n<i;++n)u[a=c[n]]=ae([s[a],o[h[a]],o[a],l[a]],d,e);return u},_resolveLineOptions:function(t){var e,n,i,a=this.chart,r=a.data.datasets[this.index],o=t.custom||{},s=a.options.elements.line,l={},u=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,n=u.length;e<n;++e)l[i=u[e]]=ae([o[i],r[i],s[i]]);return l.tension=ie(r.lineTension,s.tension),l},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(t=0,e=o.length;t<e;++t)n=o[t]._model,i=ut.splineCurve(ut.previousItem(o,t,!0)._model,n,ut.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ie(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=ie(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=ie(n.hoverBorderWidth,n.borderWidth),e.radius=ie(n.hoverRadius,n.radius)}});ot._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var oe={bar:Ht,bubble:jt,doughnut:qt,horizontalBar:Zt,line:Qt,polarArea:ee,pie:ne,radar:re,scatter:Qt};function se(t,e){return t.native?{x:t.x,y:t.y}:ut.getRelativePosition(t,e)}function le(t,e){var n,i,a,r,o;for(i=0,r=t.data.datasets.length;i<r;++i)if(t.isDatasetVisible(i))for(a=0,o=(n=t.getDatasetMeta(i)).data.length;a<o;++a){var s=n.data[a];s._view.skip||e(s)}}function ue(t,e){var n=[];return le(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function de(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return le(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function he(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ce(t,e,n){var i=se(e,t);n.axis=n.axis||"x";var a=he(n.axis),r=n.intersect?ue(t,i):de(t,i,!1,a),o=[];return r.length?(t.data.datasets.forEach((function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n).data[r[0]._index];i&&!i._view.skip&&o.push(i)}})),o):[]}var fe={modes:{single:function(t,e){var n=se(e,t),i=[];return le(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ce,index:ce,dataset:function(t,e,n){var i=se(e,t);n.axis=n.axis||"xy";var a=he(n.axis),r=n.intersect?ue(t,i):de(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ce(t,e,{intersect:!1})},point:function(t,e){return ue(t,se(e,t))},nearest:function(t,e,n){var i=se(e,t);n.axis=n.axis||"xy";var a=he(n.axis);return de(t,i,n.intersect,a)},x:function(t,e,n){var i=se(e,t),a=[],r=!1;return le(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=se(e,t),a=[],r=!1;return le(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}};function ge(t,e){return ut.where(t,(function(t){return t.position===e}))}function me(t,e){t.forEach((function(t,e){return t._tmpIndex_=e,t})),t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight})),t.forEach((function(t){delete t._tmpIndex_}))}function pe(t,e){ut.each(t,(function(t){e[t.position]+=t.isHorizontal()?t.height:t.width}))}ot._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ve={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)n.hasOwnProperty(i=a[o])&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=ut.options.toPadding((t.options.layout||{}).padding),a=i.left,r=i.right,o=i.top,s=i.bottom,l=ge(t.boxes,"left"),u=ge(t.boxes,"right"),d=ge(t.boxes,"top"),h=ge(t.boxes,"bottom"),c=ge(t.boxes,"chartArea");me(l,!0),me(u,!1),me(d,!0),me(h,!1);var f,g=l.concat(u),m=d.concat(h),p=g.concat(m),v=e-a-r,y=n-o-s,b=(e-v/2)/g.length,x=v,_=y,k={top:o,left:a,bottom:s,right:r},w=[];ut.each(p,(function(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?v:x,y/2),_-=e.height):(e=t.update(b,_),x-=e.width),w.push({horizontal:n,width:e.width,box:t})})),f=function(t){var e=0,n=0,i=0,a=0;return ut.each(t,(function(t){if(t.getPadding){var r=t.getPadding();e=Math.max(e,r.top),n=Math.max(n,r.left),i=Math.max(i,r.bottom),a=Math.max(a,r.right)}})),{top:e,left:n,bottom:i,right:a}}(p),ut.each(g,O),pe(g,k),ut.each(m,O),pe(m,k),ut.each(g,(function(t){var e=ut.findNextWhere(w,(function(e){return e.box===t}));e&&t.update(e.width,_,{left:0,right:0,top:k.top,bottom:k.bottom})})),pe(p,k={top:o,left:a,bottom:s,right:r});var M=Math.max(f.left-k.left,0);k.left+=M,k.right+=Math.max(f.right-k.right,0);var S=Math.max(f.top-k.top,0);k.top+=S,k.bottom+=Math.max(f.bottom-k.bottom,0);var D=n-k.top-k.bottom,C=e-k.left-k.right;C===x&&D===_||(ut.each(g,(function(t){t.height=D})),ut.each(m,(function(t){t.fullWidth||(t.width=C)})),_=D,x=C);var P=a+M,T=o+S;ut.each(l.concat(d),I),P+=x,T+=_,ut.each(u,I),ut.each(h,I),t.chartArea={left:k.left,top:k.top,right:k.left+x,bottom:k.top+_},ut.each(c,(function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(x,_)}))}function O(t){var e=ut.findNextWhere(w,(function(e){return e.box===t}));if(e)if(e.horizontal){var n={left:Math.max(k.left,f.left),right:Math.max(k.right,f.right),top:0,bottom:0};t.update(t.fullWidth?v:x,y/2,n)}else t.update(e.width,_)}function I(t){t.isHorizontal()?(t.left=t.fullWidth?a:k.left,t.right=t.fullWidth?e-r:k.left+x,t.top=T,t.bottom=T+t.height,T=t.bottom):(t.left=P,t.right=P+t.width,t.top=k.top,t.bottom=k.top+_,P=t.right)}}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var ye,be=(ye=Object.freeze({default:"/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"}))&&ye.default||ye,xe=["animationstart","webkitAnimationStart"],_e={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function ke(t,e){var n=ut.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var we=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(n){}return t}()&&{passive:!0};function Me(t,e,n){t.addEventListener(e,n,we)}function Se(t,e,n){t.removeEventListener(e,n,we)}function De(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ce(t){var e=document.createElement("div");return e.className=t||"",e}var Pe={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){this._loaded||(this._loaded=!0,this.disableCSSInjection||function(t,e){var n=t._style||document.createElement("style");t._style||(t._style=n,e="/* Chart.js */\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}(this,be))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),n&&n.canvas===t?(function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t.$chartjs={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=ke(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=ke(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e.$chartjs){var n=e.$chartjs.initial;["height","width"].forEach((function(t){var i=n[t];ut.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),ut.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e.$chartjs}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n.$chartjs||(n.$chartjs={});Me(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=_e[t.type]||t.type,i=ut.getRelativePosition(t,e);return De(n,e,i.x,i.y,t)}(e,t))})}else!function(t,e,n){var i,a,r,o,s=t.$chartjs||(t.$chartjs={}),l=s.resizer=function(t){var e=Ce("chartjs-size-monitor"),n=Ce("chartjs-size-monitor-expand"),i=Ce("chartjs-size-monitor-shrink");n.appendChild(Ce()),i.appendChild(Ce()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Me(n,"scroll",a.bind(n,"expand")),Me(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(De("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(De("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,ut.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t.$chartjs||(t.$chartjs={}),i=n.renderProxy=function(t){"chartjs-render-animation"===t.animationName&&e()};ut.each(xe,(function(e){Me(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add("chartjs-render-monitor")}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}(i,n,t)},removeEventListener:function(t,e,n){var i,a,r,o=t.canvas;if("resize"!==e){var s=((n.$chartjs||{}).proxies||{})[t.id+"_"+e];s&&Se(o,e,s)}else r=(a=(i=o).$chartjs||{}).resizer,delete a.resizer,function(t){var e=t.$chartjs||{},n=e.renderProxy;n&&(ut.each(xe,(function(e){Se(t,e,n)})),delete e.renderProxy),t.classList.remove("chartjs-render-monitor")}(i),r&&r.parentNode&&r.parentNode.removeChild(r)}};ut.addEvent=Me,ut.removeEvent=Se;var Te=ut.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Pe._enabled?Pe:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}});ot._set("global",{plugins:{}});var Oe={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=ut.clone(ot.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Ie={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=ut.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?ut.merge({},[ot.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=ut.extend(this.defaults[t],e))},addScalesToLayout:function(t){ut.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ve.addBox(t,e)}))}},Ae=ut.valueOrDefault;ot._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ut.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:ut.noop,beforeBody:ut.noop,beforeLabel:ut.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),ut.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ut.noop,afterBody:ut.noop,beforeFooter:ut.noop,footer:ut.noop,afterFooter:ut.noop}}});var Fe={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=ut.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Re(t,e){return e&&(ut.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Le(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function We(t){var e=ot.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Ae(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Ae(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Ae(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Ae(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Ae(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Ae(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Ae(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Ae(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Ae(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ye(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Ne(t){return Re([],Le(t))}var ze=ft.extend({initialize:function(){this._model=We(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Re(o,Le(i)),o=Re(o,Le(a)),Re(o,Le(r))},getBeforeBody:function(){return Ne(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return ut.each(t,(function(t){var r={before:[],lines:[],after:[]};Re(r.before,Le(i.beforeLabel.call(n,t,e))),Re(r.lines,i.label.call(n,t,e)),Re(r.after,Le(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return Ne(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Re(r,Le(n)),r=Re(r,Le(i)),Re(r,Le(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=We(c),m=h._active,p=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},y={x:f.x,y:f.y},b={width:f.width,height:f.height},x={x:f.caretX,y:f.caretY};if(m.length){g.opacity=1;var _=[],k=[];x=Fe[c.position].call(h,m,h._eventPosition);var w=[];for(e=0,n=m.length;e<n;++e)w.push((a=void 0,r=void 0,l=void 0,u=void 0,d=void 0,a=(i=m[e])._xScale,r=i._yScale||i._scale,o=i._index,u=(l=i._chart.getDatasetMeta(s=i._datasetIndex).controller)._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,p)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,p)}))),ut.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,p),g.beforeBody=h.getBeforeBody(w,p),g.body=h.getBody(w,p),g.afterBody=h.getAfterBody(w,p),g.footer=h.getFooter(w,p),g.x=x.x,g.y=x.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,b=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0),s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=(o+=e.beforeBody.length+e.afterBody.length)*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=ut.fontString(u,e._titleFontStyle,e._titleFontFamily),ut.each(e.title,f),n.font=ut.fontString(d,e._bodyFontStyle,e._bodyFontFamily),ut.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,ut.each(r,(function(t){ut.each(t.before,f),ut.each(t.lines,f),ut.each(t.after,f)})),c=0,n.font=ut.fontString(h,e._footerFontStyle,e._footerFontFamily),ut.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),y=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretPadding,s=n.xAlign,l=n.yAlign,u=t.caretSize+o,d=t.cornerRadius+o;return"right"===s?a-=e.width:"center"===s&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===l?r+=u:r-="bottom"===l?e.height+u:e.height/2,"center"===l?"left"===s?a+=u:"right"===s&&(a-=u):"left"===s?a-=d:"right"===s&&(a+=d),{x:a,y:r}}(g,b,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,b),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=y.x,g.y=y.y,g.width=b.width,g.height=b.height,g.caretX=x.x,g.caretY=x.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this.getCaretPosition(t,e,this._view);n.lineTo(i.x1,i.y1),n.lineTo(i.x2,i.y2),n.lineTo(i.x3,i.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,m=e.width,p=e.height;if("center"===c)s=g+p/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+m)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+m-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+p)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i=e.title;if(i.length){t.x=Ye(e,e._titleAlign),n.textAlign=e._titleAlign,n.textBaseline="top";var a,r,o=e.titleFontSize,s=e.titleSpacing;for(n.fillStyle=e.titleFontColor,n.font=ut.fontString(o,e._titleFontStyle,e._titleFontFamily),a=0,r=i.length;a<r;++a)n.fillText(i[a],t.x,t.y),t.y+=o+s,a+1===i.length&&(t.y+=e.titleMarginBottom-s)}},drawBody:function(t,e,n){var i,a=e.bodyFontSize,r=e.bodySpacing,o=e._bodyAlign,s=e.body,l=e.displayColors,u=e.labelColors,d=0,h=l?Ye(e,"left"):0;n.textAlign=o,n.textBaseline="top",n.font=ut.fontString(a,e._bodyFontStyle,e._bodyFontFamily),t.x=Ye(e,o);var c=function(e){n.fillText(e,t.x+d,t.y),t.y+=a+r};n.fillStyle=e.bodyFontColor,ut.each(e.beforeBody,c),d=l&&"right"!==o?"center"===o?a/2+1:a+2:0,ut.each(s,(function(r,o){n.fillStyle=i=e.labelTextColors[o],ut.each(r.before,c),ut.each(r.lines,(function(r){l&&(n.fillStyle=e.legendColorBackground,n.fillRect(h,t.y,a,a),n.lineWidth=1,n.strokeStyle=u[o].borderColor,n.strokeRect(h,t.y,a,a),n.fillStyle=u[o].backgroundColor,n.fillRect(h+1,t.y+1,a-2,a-2),n.fillStyle=i),c(r)})),ut.each(r.after,c)})),d=0,ut.each(e.afterBody,c),t.y-=r},drawFooter:function(t,e,n){var i=e.footer;i.length&&(t.x=Ye(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=e._footerAlign,n.textBaseline="top",n.fillStyle=e.footerFontColor,n.font=ut.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),ut.each(i,(function(i){n.fillText(i,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing})))},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity;this._options.enabled&&(e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length)&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],n._active="mouseout"===t.type?[]:n._chart.getElementsAtEventForMode(t,i.mode,i),(e=!ut.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}});ze.positioners=Fe;var Ve=ut.valueOrDefault;function He(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)r=Ve((o=n[t][a]).type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),ut.merge(e[t][a],!e[t][a].type||o.type&&o.type!==e[t][a].type?[Ie.getScaleDefaults(r),o]:o)}else ut._merger(t,e,n,i)}})}function Ee(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||{},r=n[t];"scales"===t?e[t]=He(a,r):"scale"===t?e[t]=ut.merge(a,[Ie.getScaleDefaults(r.type),r]):ut._merger(t,e,n,i)}})}function Be(t){var e=t.options;ut.each(t.scales,(function(e){ve.removeBox(t,e)})),e=Ee(ot.global,ot[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function je(t){return"top"===t||"bottom"===t}ot._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ue=function(t,e){return this.construct(t,e),this};ut.extend(Ue.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ee(ot.global,ot[t.type],t.options||{}),t}(e);var i=Te.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=ut.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n.chart=n,n.controller=n,Ue.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Oe.notify(t,"beforeInit"),ut.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),Oe.notify(t,"afterInit"),t},clear:function(){return ut.canvas.clear(this),this},stop:function(){return pt.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(ut.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:ut.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",ut.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Oe.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;ut.each(e.xAxes,(function(t,e){t.id=t.id||"x-axis-"+e})),ut.each(e.yAxes,(function(t,e){t.id=t.id||"y-axis-"+e})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ut.each(i,(function(e){var i=e.options,r=i.id,o=Ve(i.type,e.dtype);je(i.position)!==je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Ie.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),ut.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Ie.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return ut.each(t.data.datasets,(function(n,i){var a=t.getDatasetMeta(i),r=n.type||t.config.type;if(a.type&&a.type!==r&&(t.destroyDatasetMeta(i),a=t.getDatasetMeta(i)),a.type=r,a.controller)a.controller.updateIndex(i),a.controller.linkScales();else{var o=oe[a.type];if(void 0===o)throw new Error('"'+a.type+'" is not a chart type.');a.controller=new o(t,i),e.push(a.controller)}}),t),e},resetElements:function(){var t=this;ut.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Be(e),Oe._invalidate(e),!1!==Oe.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var n=e.buildOrUpdateControllers();ut.each(e.data.datasets,(function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()}),e),e.updateLayout(),e.options.animation&&e.options.animation.duration&&ut.each(n,(function(t){t.reset()})),e.updateDatasets(),e.tooltip.initialize(),e.lastActive=[],Oe.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){!1!==Oe.notify(this,"beforeLayout")&&(ve.update(this,this.width,this.height),Oe.notify(this,"afterScaleUpdate"),Oe.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==Oe.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Oe.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Oe.notify(this,"beforeDatasetUpdate",[n])&&(e.controller.update(),Oe.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ve(t.duration,n&&n.duration),a=t.lazy;if(!1!==Oe.notify(e,"beforeRender")){var r=function(t){Oe.notify(e,"afterRender"),ut.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new mt({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=e.currentStep,i=n/e.numSteps;t.draw((0,ut.easing.effects[e.easing])(i),i,n)},onAnimationProgress:n.onProgress,onAnimationComplete:r});pt.addAnimation(e,o,i,a)}else e.draw(),r(new mt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),ut.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==Oe.notify(e,"beforeDraw",[t])&&(ut.each(e.boxes,(function(t){t.draw(e.chartArea)}),e),e.drawDatasets(t),e._drawTooltip(t),Oe.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==Oe.notify(e,"beforeDatasetsDraw",[t])){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);Oe.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this.getDatasetMeta(t),i={meta:n,index:t,easingValue:e};!1!==Oe.notify(this,"beforeDatasetDraw",[i])&&(n.controller.draw(e),Oe.notify(this,"afterDatasetDraw",[i]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Oe.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Oe.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return fe.modes.single(this,t)},getElementsAtEvent:function(t){return fe.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return fe.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=fe.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return fe.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),ut.canvas.clear(n),Te.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Oe.notify(n,"destroy"),delete Ue.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new ze({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};ut.each(t.options.events,(function(i){Te.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Te.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,ut.each(e,(function(e,n){Te.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"setHoverStyle":"removeHoverStyle";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Oe.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Oe.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],n.active="mouseout"===t.type?[]:n.getElementsAtEventForMode(t,a.mode,a),ut.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!ut.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),Ue.instances={};var Ge=Ue;function qe(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Ze(t){this.options=t||{}}Ue.Controller=Ue,Ue.types={},ut.configMerge=Ee,ut.scaleMerge=He,ut.extend(Ze.prototype,{formats:qe,parse:qe,format:qe,add:qe,diff:qe,startOf:qe,endOf:qe,_create:function(t){return t}}),Ze.override=function(t){ut.extend(Ze.prototype,t)};var $e={_date:Ze},Xe={formatters:{values:function(t){return ut.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=ut.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=ut.log10(Math.abs(t));r=t.toExponential(Math.floor(o)-Math.floor(a))}else{var s=-1*Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toFixed(s)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(ut.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},Je=ut.valueOrDefault,Ke=ut.valueAtIndexOrDefault;function Qe(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label);return i}function tn(t,e,n){return ut.isArray(e)?ut.longestText(t,n,e):t.measureText(e).width}ot._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Xe.formatters.values,minor:{},major:{}}});var en=ft.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){ut.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l,u=this;for(u.beforeUpdate(),u.maxWidth=t,u.maxHeight=e,u.margins=ut.extend({left:0,right:0,top:0,bottom:0},n),u._maxLabelLines=0,u.longestLabelWidth=0,u.longestTextCache=u.longestTextCache||{},u.beforeSetDimensions(),u.setDimensions(),u.afterSetDimensions(),u.beforeDataLimits(),u.determineDataLimits(),u.afterDataLimits(),u.beforeBuildTicks(),s=u.buildTicks()||[],s=u.afterBuildTicks(s)||s,u.beforeTickToLabelConversion(),r=u.convertTicksToLabels(s)||u.ticks,u.afterTickToLabelConversion(),u.ticks=r,i=0,a=r.length;i<a;++i)o=r[i],(l=s[i])?l.label=o:s.push(l={label:o,major:!1});return u._ticks=s,u.beforeCalculateTickRotation(),u.calculateTickRotation(),u.afterCalculateTickRotation(),u.beforeFit(),u.fit(),u.afterFit(),u.afterUpdate(),u.minSize},afterUpdate:function(){ut.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ut.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){ut.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ut.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ut.noop,afterDataLimits:function(){ut.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ut.callback(this.options.beforeBuildTicks,[this])},buildTicks:ut.noop,afterBuildTicks:function(t){var e=this;return ut.isArray(t)&&t.length?ut.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=ut.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){ut.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){ut.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ut.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,n=t.options.ticks,i=Qe(t._ticks),a=ut.options._parseFont(n);e.font=a.string;var r=n.minRotation||0;if(i.length&&t.options.display&&t.isHorizontal())for(var o,s=ut.longestText(e,a.string,i,t.longestTextCache),l=s,u=t.getPixelForTick(1)-t.getPixelForTick(0)-6;l>u&&r<n.maxRotation;){var d=ut.toRadians(r);if(o=Math.cos(d),Math.sin(d)*s>t.maxHeight){r--;break}r++,l=o*s}t.labelRotation=r},afterCalculateTickRotation:function(){ut.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ut.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=Qe(t._ticks),i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l=i.position,u=t.isHorizontal(),d=ut.options._parseFont,h=d(a),c=i.gridLines.tickMarkLength;if(e.width=u?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:s&&o.drawTicks?c:0,e.height=u?s&&o.drawTicks?c:0:t.maxHeight,r.display&&s){var f=d(r),g=ut.options.toPadding(r.padding),m=f.lineHeight+g.height;u?e.height+=m:e.width+=m}if(a.display&&s){var p=ut.longestText(t.ctx,h.string,n,t.longestTextCache),v=ut.numberOfLabelLines(n),y=.5*h.size,b=t.options.ticks.padding;if(t._maxLabelLines=v,t.longestLabelWidth=p,u){var x=ut.toRadians(t.labelRotation),_=Math.cos(x),k=Math.sin(x);e.height=Math.min(t.maxHeight,e.height+(k*p+h.lineHeight*v+y)+b),t.ctx.font=h.string;var w,M,S=tn(t.ctx,n[0],h.string),D=tn(t.ctx,n[n.length-1],h.string),C=t.getPixelForTick(0)-t.left,P=t.right-t.getPixelForTick(n.length-1);0!==t.labelRotation?(w="bottom"===l?_*S:_*y,M="bottom"===l?_*y:_*D):(w=S/2,M=D/2),t.paddingLeft=Math.max(w-C,0)+3,t.paddingRight=Math.max(M-P,0)+3}else a.mirror?p=0:p+=b+y,e.width=Math.min(t.maxWidth,e.width+p),t.paddingTop=h.size/2,t.paddingBottom=h.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){ut.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ut.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:ut.noop,getPixelForValue:ut.noop,getValueForPixel:ut.noop,getPixelForTick:function(t){var e=this,n=e.options.offset;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),a=i*t+e.paddingLeft;return n&&(a+=i/2),e.left+a+(e.isFullWidth()?e.margins.left:0)}return e.top+t*((e.height-(e.paddingTop+e.paddingBottom))/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;return e.isHorizontal()?e.left+((e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft)+(e.isFullWidth()?e.margins.left:0):e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i=this,a=i.isHorizontal(),r=t.length,o=!1,s=i.options.ticks.minor.maxTicksLimit,l=i._tickSize()*(r-1),u=a?i.width-(i.paddingLeft+i.paddingRight):i.height-(i.paddingTop+i.PaddingBottom),d=[];for(l>u&&(o=1+Math.floor(l/u)),r>s&&(o=Math.max(o,1+Math.floor(r/s))),e=0;e<r;e++)n=t[e],o>1&&e%o>0&&delete n.label,d.push(n);return d},_tickSize:function(){var t=this,e=t.isHorizontal(),n=t.options.ticks.minor,i=ut.toRadians(t.labelRotation),a=Math.abs(Math.cos(i)),r=Math.abs(Math.sin(i)),o=n.autoSkipPadding||0,s=t.longestLabelWidth+o||0,l=ut.options._parseFont(n),u=t._maxLabelLines*l.lineHeight+o||0;return e?u*a>s*r?s/a:u/r:u*r<s*a?u/a:s/r},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,n=e.options;if(e._isVisible()){var i,a,r,o=e.chart,s=e.ctx,l=ot.global.defaultFontColor,u=n.ticks.minor,d=n.ticks.major||u,h=n.gridLines,c=n.scaleLabel,f=n.position,g=0!==e.labelRotation,m=u.mirror,p=e.isHorizontal(),v=ut.options._parseFont,y=u.display&&u.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),b=Je(u.fontColor,l),x=v(u),_=x.lineHeight,k=Je(d.fontColor,l),w=v(d),M=u.padding,S=u.labelOffset,D=h.drawTicks?h.tickMarkLength:0,C=Je(c.fontColor,l),P=v(c),T=ut.options.toPadding(c.padding),O=ut.toRadians(e.labelRotation),I=[],A=h.drawBorder?Ke(h.lineWidth,0,0):0,F=ut._alignPixel;if("top"===f?(i=F(o,e.bottom,A),a=e.bottom-D,r=i-A/2):"bottom"===f?(i=F(o,e.top,A),a=i+A/2,r=e.top+D):"left"===f?(i=F(o,e.right,A),a=e.right-D,r=i-A/2):(i=F(o,e.left,A),a=i+A/2,r=e.left+D),ut.each(y,(function(i,s){if(!ut.isNullOrUndef(i.label)){var l,u,d,c,v,y,b,x,k,w,C,P,T,R,L,W,Y=i.label;s===e.zeroLineIndex&&n.offset===h.offsetGridLines?(l=h.zeroLineWidth,u=h.zeroLineColor,d=h.zeroLineBorderDash||[],c=h.zeroLineBorderDashOffset||0):(l=Ke(h.lineWidth,s),u=Ke(h.color,s),d=h.borderDash||[],c=h.borderDashOffset||0);var N=ut.isArray(Y)?Y.length:1,z=function(t,e,n){var i=t.getPixelForTick(e);return n&&(1===t.getTicks().length?i-=t.isHorizontal()?Math.max(i-t.left,t.right-i):Math.max(i-t.top,t.bottom-i):i-=0===e?(t.getPixelForTick(1)-i)/2:(i-t.getPixelForTick(e-1))/2),i}(e,s,h.offsetGridLines);if(p){var V=D+M;z<e.left-1e-7&&(u="rgba(0,0,0,0)"),v=b=k=C=F(o,z,l),y=a,x=r,T=e.getPixelForTick(s)+S,"top"===f?(w=F(o,t.top,A)+A/2,P=t.bottom,L=((g?1:.5)-N)*_,W=g?"left":"center",R=e.bottom-V):(w=t.top,P=F(o,t.bottom,A)-A/2,L=(g?0:.5)*_,W=g?"right":"center",R=e.top+V)}else{var H=(m?0:D)+M;z<e.top-1e-7&&(u="rgba(0,0,0,0)"),v=a,b=r,y=x=w=P=F(o,z,l),R=e.getPixelForTick(s)+S,L=(1-N)*_/2,"left"===f?(k=F(o,t.left,A)+A/2,C=t.right,W=m?"left":"right",T=e.right-H):(k=t.left,C=F(o,t.right,A)-A/2,W=m?"right":"left",T=e.left+H)}I.push({tx1:v,ty1:y,tx2:b,ty2:x,x1:k,y1:w,x2:C,y2:P,labelX:T,labelY:R,glWidth:l,glColor:u,glBorderDash:d,glBorderDashOffset:c,rotation:-1*O,label:Y,major:i.major,textOffset:L,textAlign:W})}})),ut.each(I,(function(t){var e=t.glWidth,n=t.glColor;if(h.display&&e&&n&&(s.save(),s.lineWidth=e,s.strokeStyle=n,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),h.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),u.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?w.string:x.string,s.fillStyle=t.major?k:b,s.textBaseline="middle",s.textAlign=t.textAlign;var i=t.label,a=t.textOffset;if(ut.isArray(i))for(var r=0;r<i.length;++r)s.fillText(""+i[r],0,a),a+=_;else s.fillText(i,0,a);s.restore()}})),c.display){var R,L,W=0,Y=P.lineHeight/2;if(p)R=e.left+(e.right-e.left)/2,L="bottom"===f?e.bottom-Y-T.bottom:e.top+Y+T.top;else{var N="left"===f;R=N?e.left+Y+T.top:e.right-Y-T.top,L=e.top+(e.bottom-e.top)/2,W=N?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(R,L),s.rotate(W),s.textAlign="center",s.textBaseline="middle",s.fillStyle=C,s.font=P.string,s.fillText(c.labelString,0,0),s.restore()}if(A){var z,V,H,E,B=A,j=Ke(h.lineWidth,y.length-1,0);p?(z=F(o,e.left,B)-B/2,V=F(o,e.right,j)+j/2,H=E=i):(H=F(o,e.top,B)-B/2,E=F(o,e.bottom,j)+j/2,z=V=i),s.lineWidth=A,s.strokeStyle=Ke(h.color,0),s.beginPath(),s.moveTo(z,H),s.lineTo(V,E),s.stroke()}}}}),nn=en.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,n=e.getLabels();e.minIndex=0,e.maxIndex=n.length-1,void 0!==e.options.ticks.min&&(t=n.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=n.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=n[e.minIndex],e.max=n[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart;return i.getDatasetMeta(e).controller._getValueScaleId()===n.id?n.getRightValue(i.data.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var n,i=this,a=i.options.offset,r=Math.max(i.maxIndex+1-i.minIndex-(a?0:1),1);if(null!=t&&(n=i.isHorizontal()?t.x:t.y),void 0!==n||void 0!==t&&isNaN(e)){var o=i.getLabels().indexOf(t=n||t);e=-1!==o?o:e}if(i.isHorizontal()){var s=i.width/r,l=s*(e-i.minIndex);return a&&(l+=s/2),i.left+l}var u=i.height/r,d=u*(e-i.minIndex);return a&&(d+=u/2),i.top+d},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,n=e.options.offset,i=Math.max(e._ticks.length-(n?0:1),1),a=e.isHorizontal(),r=(a?e.width:e.height)/i;return t-=a?e.left:e.top,n&&(t-=r/2),(t<=0?0:Math.round(t/r))+e.minIndex},getBasePixel:function(){return this.bottom}});nn._defaults={position:"bottom"};var an=ut.isNullOrUndef,rn=en.extend({getRightValue:function(t){return"string"==typeof t?+t:en.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=ut.sign(t.min),i=ut.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(t.min=null===t.min?e.suggestedMin:Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(t.max=null===t.max?e.suggestedMax:Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ut.noop,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:ut.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,m=ut.niceNum((g-f)/u/l)*l;if(m<1e-14&&an(d)&&an(h))return[f,g];(r=Math.ceil(g/m)-Math.floor(f/m))>u&&(m=ut.niceNum(r*m/u/l)*l),s||an(c)?n=Math.pow(10,ut._decimalPlaces(m)):(n=Math.pow(10,c),m=Math.ceil(m*n)/n),i=Math.floor(f/m)*m,a=Math.ceil(g/m)*m,s&&(!an(d)&&ut.almostWhole(d/m,m/1e3)&&(i=d),!an(h)&&ut.almostWhole(h/m,m/1e3)&&(a=h)),r=ut.almostEquals(r=(a-i)/m,Math.round(r),m/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(an(d)?i:d);for(var p=1;p<r;++p)o.push(Math.round((i+p*m)*n)/n);return o.push(an(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=ut.max(a),t.min=ut.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),en.prototype.convertTicksToLabels.call(t)}}),on={position:"left",ticks:{callback:Xe.formatters.linear}},sn=rn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,i=n.data.datasets,a=t.isHorizontal();function r(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var o=e.stacked;if(void 0===o&&ut.each(i,(function(t,e){if(!o){var i=n.getDatasetMeta(e);n.isDatasetVisible(e)&&r(i)&&void 0!==i.stack&&(o=!0)}})),e.stacked||o){var s={};ut.each(i,(function(i,a){var o=n.getDatasetMeta(a),l=[o.type,void 0===e.stacked&&void 0===o.stack?a:"",o.stack].join(".");void 0===s[l]&&(s[l]={positiveValues:[],negativeValues:[]});var u=s[l].positiveValues,d=s[l].negativeValues;n.isDatasetVisible(a)&&r(o)&&ut.each(i.data,(function(n,i){var a=+t.getRightValue(n);isNaN(a)||o.data[i].hidden||(u[i]=u[i]||0,d[i]=d[i]||0,e.relativePoints?u[i]=100:a<0?d[i]+=a:u[i]+=a)}))})),ut.each(s,(function(e){var n=e.positiveValues.concat(e.negativeValues),i=ut.min(n),a=ut.max(n);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?a:Math.max(t.max,a)}))}else ut.each(i,(function(e,i){var a=n.getDatasetMeta(i);n.isDatasetVisible(i)&&r(a)&&ut.each(e.data,(function(e,n){var i=+t.getRightValue(e);isNaN(i)||a.data[n].hidden||(null===t.min?t.min=i:i<t.min&&(t.min=i),null===t.max?t.max=i:i>t.max&&(t.max=i))}))}));t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=ut.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,n=e.start,i=+e.getRightValue(t),a=e.end-n;return e.isHorizontal()?e.left+e.width/a*(i-n):e.bottom-e.height/a*(i-n)},getValueForPixel:function(t){var e=this,n=e.isHorizontal();return e.start+(n?t-e.left:e.bottom-t)/(n?e.width:e.height)*(e.end-e.start)},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});sn._defaults=on;var ln=ut.valueOrDefault,un={position:"left",ticks:{callback:Xe.formatters.logarithmic}};function dn(t,e){return ut.isFinite(t)&&t>=0?t:e}var hn=en.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,i=n.data.datasets,a=t.isHorizontal();function r(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var o=e.stacked;if(void 0===o&&ut.each(i,(function(t,e){if(!o){var i=n.getDatasetMeta(e);n.isDatasetVisible(e)&&r(i)&&void 0!==i.stack&&(o=!0)}})),e.stacked||o){var s={};ut.each(i,(function(i,a){var o=n.getDatasetMeta(a),l=[o.type,void 0===e.stacked&&void 0===o.stack?a:"",o.stack].join(".");n.isDatasetVisible(a)&&r(o)&&(void 0===s[l]&&(s[l]=[]),ut.each(i.data,(function(e,n){var i=s[l],a=+t.getRightValue(e);isNaN(a)||o.data[n].hidden||a<0||(i[n]=i[n]||0,i[n]+=a)})))})),ut.each(s,(function(e){if(e.length>0){var n=ut.min(e),i=ut.max(e);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?i:Math.max(t.max,i)}}))}else ut.each(i,(function(e,i){var a=n.getDatasetMeta(i);n.isDatasetVisible(i)&&r(a)&&ut.each(e.data,(function(e,n){var i=+t.getRightValue(e);isNaN(i)||a.data[n].hidden||i<0||(null===t.min?t.min=i:i<t.min&&(t.min=i),null===t.max?t.max=i:i>t.max&&(t.max=i),0!==i&&(null===t.minNotZero||i<t.minNotZero)&&(t.minNotZero=i))}))}));this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=dn(e.min,t.min),t.max=dn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(ut.log10(t.min))-1),t.max=Math.pow(10,Math.floor(ut.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(ut.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(ut.log10(t.min))+1):10),null===t.minNotZero&&(t.minNotZero=t.min>0?t.min:t.max<1?Math.pow(10,Math.floor(ut.log10(t.max))):1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:dn(e.min),max:dn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=ln(t.min,Math.pow(10,Math.floor(ut.log10(e.min)))),o=Math.floor(ut.log10(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(ut.log10(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(ut.log10(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10==++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=ln(t.max,r);return a.push(u),a}(i,t);t.max=ut.max(a),t.min=ut.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),en.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(ut.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,n,i,a,r,o=this,s=o.options.ticks,l=s.reverse,u=ut.log10,d=o._getFirstTickValue(o.minNotZero),h=0;return t=+o.getRightValue(t),l?(i=o.end,a=o.start,r=-1):(i=o.start,a=o.end,r=1),o.isHorizontal()?(e=o.width,n=l?o.right:o.left):(e=o.height,r*=-1,n=l?o.top:o.bottom),t!==i&&(0===i&&(e-=h=ln(s.fontSize,ot.global.defaultFontSize),i=d),0!==t&&(h+=e/(u(a)-u(i))*(u(t)-u(i))),n+=r*h),n},getValueForPixel:function(t){var e,n,i,a,r=this,o=r.options.ticks,s=o.reverse,l=ut.log10,u=r._getFirstTickValue(r.minNotZero);if(s?(n=r.end,i=r.start):(n=r.start,i=r.end),r.isHorizontal()?(e=r.width,a=s?r.right-t:t-r.left):(e=r.height,a=s?t-r.top:r.bottom-t),a!==n){if(0===n){var d=ln(o.fontSize,ot.global.defaultFontSize);a-=d,e-=d,n=u}a*=l(i)-l(n),a/=e,a=Math.pow(10,l(n)+a)}return a}});hn._defaults=un;var cn=ut.valueOrDefault,fn=ut.valueAtIndexOrDefault,gn=ut.options.resolve,mn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Xe.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function pn(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function vn(t){var e=t.ticks;return e.display&&t.display?cn(e.fontSize,ot.global.defaultFontSize)+2*e.backdropPaddingY:0}function yn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function bn(t){return 0===t||180===t?"center":t<180?"left":"right"}function xn(t,e,n,i){var a,r,o=n.y+i/2;if(ut.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function _n(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function kn(t){return ut.isNumber(t)?t:0}var wn=rn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=vn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;ut.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);ut.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/vn(this.options))},convertTicksToLabels:function(){var t=this;rn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=ut.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=pn(t);for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,n=ut.isArray(u=t.pointLabels[e]||"")?{w:ut.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=ut.toDegrees(h)%360,f=yn(c,i.x,n.w,0,180),g=yn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=kn(a),r=kn(r),o=kn(o),s=kn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=n+a.drawingArea,o=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((t+a.drawingArea+(a.width-e-a.drawingArea))/2+a.left),a.yCenter=Math.floor((r+o)/2+a.top+a.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/pn(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks;if(e.display){var a=t.ctx,r=this.getIndexAngle(0),o=ut.options._parseFont(i);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,n=t.options,i=n.angleLines,a=n.gridLines,r=n.pointLabels,o=cn(i.lineWidth,a.lineWidth),s=cn(i.color,a.color),l=vn(n);e.save(),e.lineWidth=o,e.strokeStyle=s,e.setLineDash&&(e.setLineDash(gn([i.borderDash,a.borderDash,[]])),e.lineDashOffset=gn([i.borderDashOffset,a.borderDashOffset,0]));var u=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),d=ut.options._parseFont(r);e.font=d.string,e.textBaseline="middle";for(var h=pn(t)-1;h>=0;h--){if(i.display&&o&&s){var c=t.getPointPosition(h,u);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(c.x,c.y),e.stroke()}if(r.display){var f=t.getPointPosition(h,u+(0===h?l/2:0)+5),g=fn(r.fontColor,h,ot.global.defaultFontColor);e.fillStyle=g;var m=t.getIndexAngle(h),p=ut.toDegrees(m);e.textAlign=bn(p),_n(p,t._pointLabelSizes[h],f),xn(e,t.pointLabels[h]||"",f,d.lineHeight)}}e.restore()}(t),ut.each(t.ticks,(function(e,s){if(s>0||i.reverse){var l=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(n.display&&0!==s&&function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=pn(t),l=fn(e.color,i-1),u=fn(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(t,n,l,s),i.display){var u=cn(i.fontColor,ot.global.defaultFontColor);if(a.font=o.string,a.save(),a.translate(t.xCenter,t.yCenter),a.rotate(r),i.showLabelBackdrop){var d=a.measureText(e).width;a.fillStyle=i.backdropColor,a.fillRect(-d/2-i.backdropPaddingX,-l-o.size/2-i.backdropPaddingY,d+2*i.backdropPaddingX,o.size+2*i.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=u,a.fillText(e,0,-l),a.restore()}}}))}}});wn._defaults=mn;var Mn=ut.valueOrDefault,Sn=Number.MIN_SAFE_INTEGER||-9007199254740991,Dn=Number.MAX_SAFE_INTEGER||9007199254740991,Cn={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},Pn=Object.keys(Cn);function Tn(t,e){return t-e}function On(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}function In(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(r=t[i=o+s>>1],!(a=t[i-1]||null))return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e];return r[i]+(o[i]-r[i])*(s?(n-r[e])/s:0)}function An(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),ut.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),ut.isFinite(o)||(o=n.parse(o))),o)}function Fn(t,e){if(ut.isNullOrUndef(e))return null;var n=t.options.time,i=An(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function Rn(t){for(var e=Pn.indexOf(t)+1,n=Pn.length;e<n;++e)if(Cn[Pn[e]].common)return Pn[e]}var Ln=en.extend({initialize:function(){this.mergeTicksOptions(),en.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new $e._date(e.adapters.date);return n.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),ut.mergeIf(n.displayFormats,i.formats()),en.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),en.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.chart,l=o._adapter,u=o.options.time,d=u.unit||"day",h=Dn,c=Sn,f=[],g=[],m=[],p=s.data.labels||[];for(t=0,n=p.length;t<n;++t)m.push(Fn(o,p[t]));for(t=0,n=(s.data.datasets||[]).length;t<n;++t)if(s.isDatasetVisible(t))if(ut.isObject((a=s.data.datasets[t].data)[0]))for(g[t]=[],e=0,i=a.length;e<i;++e)r=Fn(o,a[e]),f.push(r),g[t][e]=r;else{for(e=0,i=m.length;e<i;++e)f.push(m[e]);g[t]=m.slice(0)}else g[t]=[];m.length&&(m=On(m).sort(Tn),h=Math.min(h,m[0]),c=Math.max(c,m[m.length-1])),f.length&&(f=On(f).sort(Tn),h=Math.min(h,f[0]),c=Math.max(c,f[f.length-1])),h=Fn(o,u.min)||h,c=Fn(o,u.max)||c,h=h===Dn?+l.startOf(Date.now(),d):h,c=c===Sn?+l.endOf(Date.now(),d)+1:c,o.min=Math.min(h,c),o.max=Math.max(h+1,c),o._horizontal=o.isHorizontal(),o._table=[],o._timestamps={data:f,datasets:g,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.time,l=[],u=[];switch(o.ticks.source){case"data":l=i._timestamps.data;break;case"labels":l=i._timestamps.labels;break;case"auto":default:l=function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||function(t,e,n,i){var a,r,o=Pn.length;for(a=Pn.indexOf(t);a<o-1;++a)if((r=Cn[Pn[a]]).common&&Math.ceil((n-e)/((r.steps?r.steps[r.steps.length-1]:Dn)*r.size))<=i)return Pn[a];return Pn[o-1]}(s.minUnit,e,n,i),u=Rn(l),d=Mn(s.stepSize,s.unitStepSize),h="week"===l&&s.isoWeekday,c=o.ticks.major.enabled,f=Cn[l],g=e,m=n,p=[];for(d||(d=function(t,e,n,i){var a,r,o,s=e-t,l=Cn[n],u=l.size,d=l.steps;if(!d)return Math.ceil(s/(i*u));for(a=0,r=d.length;a<r&&(o=d[a],!(Math.ceil(s/(u*o))<=i));++a);return o}(e,n,l,i)),h&&(g=+r.startOf(g,"isoWeek",h),m=+r.startOf(m,"isoWeek",h)),g=+r.startOf(g,h?"day":l),(m=+r.startOf(m,h?"day":l))<n&&(m=+r.add(m,1,l)),a=g,c&&u&&!h&&!s.round&&(a=+r.startOf(a,u),a=+r.add(a,~~((g-a)/(f.size*d))*d,l));a<m;a=+r.add(a,d,l))p.push(+a);return p.push(+a),p}(i,a,r,i.getLabelCapacity(a))}for("ticks"===o.bounds&&l.length&&(a=l[0],r=l[l.length-1]),a=Fn(i,s.min)||a,r=Fn(i,s.max)||r,t=0,e=l.length;t<e;++t)(n=l[t])>=a&&n<=r&&u.push(n);return i.min=a,i.max=r,i._unit=s.unit||function(t,e,n,i,a){var r,o;for(r=Pn.length-1;r>=Pn.indexOf(n);r--)if(Cn[o=Pn[r]].common&&t._adapter.diff(a,i,o)>=e.length)return o;return Pn[n?Pn.indexOf(n):0]}(i,u,s.minUnit,i.min,i.max),i._majorUnit=Rn(i._unit),i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],s=d[a],void 0!==(o=d[a-1])&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,o.distribution),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(a.time.min||(r=In(t,"time",e[0],"pos"),s=1===e.length?1-r:(In(t,"time",e[1],"pos")-r)/2),a.time.max||(o=In(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-In(t,"time",e[e.length-2],"pos"))/2)),{start:s,end:l}}(i._table,u,0,0,o),o.ticks.reverse&&u.reverse(),function(t,e,n){var i,a,r,o,s=[];for(i=0,a=e.length;i<a;++i)r=e[i],o=!!n&&r===+t._adapter.startOf(r,n),s.push({value:r,major:o});return s}(i,u,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return ut.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(An(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(An(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=+a.startOf(t,l),h=r.ticks.major,c=h.enabled&&l&&u&&t===d,f=a.format(t,i||(c?u:s)),g=c?h:r.ticks.minor,m=Mn(g.callback,g.userCallback);return m?m(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this,n=e.options.ticks.reverse,i=e._horizontal?e.width:e.height,a=e._horizontal?n?e.right:e.left:n?e.bottom:e.top,r=In(e._table,"time",t,"pos"),o=i*(e._offsets.start+r)/(e._offsets.start+1+e._offsets.end);return n?a-o:a+o},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=Fn(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,n=e._horizontal?e.width:e.height,i=In(e._table,"pos",(n?(t-(e._horizontal?e.left:e.top))/n:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,"time");return e._adapter._create(i)},getLabelWidth:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=ut.toRadians(e.maxRotation),a=Math.cos(i),r=Math.sin(i);return n*a+Mn(e.fontSize,ot.global.defaultFontSize)*r},getLabelCapacity:function(t){var e=this,n=e.tickFormatFunction(t,0,[],e.options.time.displayFormats.millisecond),i=e.getLabelWidth(n),a=e.isHorizontal()?e.width:e.height,r=Math.floor(a/i);return r>0?r:1}});Ln._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var Wn={category:nn,linear:sn,logarithmic:hn,radialLinear:wn,time:Ln},Yn=function(t,e){return function(t,e){t.exports=function(){var e,n;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){return void 0===t}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));return i}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function h(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function c(t,e,n,i){return ke(t,e,n,i,!0).utc()}function f(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function g(t){if(null==t._isValid){var e=f(t),i=n.call(e.parsedDateParts,(function(t){return null!=t})),a=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return a;t._isValid=a}return t._isValid}function m(t){var e=c(NaN);return null!=t?h(f(e),t):f(e).userInvalidated=!0,e}n=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i<n;i++)if(i in e&&t.call(this,e[i],i,e))return!0;return!1};var p=i.momentProperties=[];function v(t,e){var n,i,a;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=f(e)),o(e._locale)||(t._locale=e._locale),p.length>0)for(n=0;n<p.length;n++)o(a=e[i=p[n]])||(t[i]=a);return t}var y=!1;function b(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===y&&(y=!0,i.updateOffset(this),y=!1)}function x(t){return t instanceof b||null!=t&&null!=t._isAMomentObject}function _(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function k(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=_(e)),n}function w(t,e,n){var i,a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),o=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&k(t[i])!==k(e[i]))&&o++;return o+r}function M(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function S(t,e){var n=!0;return h((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){for(var a,r=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){for(var s in a+="\n["+o+"] ",arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];r.push(a)}M(t+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var D,C={};function P(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),C[t]||(M(e),C[t]=!0)}function T(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function O(t,e){var n,i=h({},t);for(n in e)d(e,n)&&(r(t[n])&&r(e[n])?(i[n]={},h(i[n],t[n]),h(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);for(n in t)d(t,n)&&!d(e,n)&&r(t[n])&&(i[n]=h({},i[n]));return i}function I(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,D=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)d(t,e)&&n.push(e);return n};var A={};function F(t,e){var n=t.toLowerCase();A[n]=A[n+"s"]=A[e]=t}function R(t){return"string"==typeof t?A[t]||A[t.toLowerCase()]:void 0}function L(t){var e,n,i={};for(n in t)d(t,n)&&(e=R(n))&&(i[e]=t[n]);return i}var W={};function Y(t,e){W[t]=e}function N(t,e,n){var i=""+Math.abs(t);return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-i.length)).toString().substr(1)+i}var z=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,H={},E={};function B(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return this[i]()}),t&&(E[t]=a),e&&(E[e[0]]=function(){return N(a.apply(this,arguments),e[1],e[2])}),n&&(E[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),H[e]=H[e]||function(t){var e,n,i,a=t.match(z);for(e=0,n=a.length;e<n;e++)a[e]=E[a[e]]?E[a[e]]:(i=a[e]).match(/\[[\s\S]/)?i.replace(/^\[|\]$/g,""):i.replace(/\\/g,"");return function(e){var i,r="";for(i=0;i<n;i++)r+=T(a[i])?a[i].call(e,t):a[i];return r}}(e),H[e](t)):t.localeData().invalidDate()}function U(t,e){var n=5;function i(t){return e.longDateFormat(t)||t}for(V.lastIndex=0;n>=0&&V.test(t);)t=t.replace(V,i),V.lastIndex=0,n-=1;return t}var G=/\d/,q=/\d\d/,Z=/\d{3}/,$=/\d{4}/,X=/[+-]?\d{6}/,J=/\d\d?/,K=/\d\d\d\d?/,Q=/\d\d\d\d\d\d?/,tt=/\d{1,3}/,et=/\d{1,4}/,nt=/[+-]?\d{1,6}/,it=/\d+/,at=/[+-]?\d+/,rt=/Z|[+-]\d\d:?\d\d/gi,ot=/Z|[+-]\d\d(?::?\d\d)?/gi,st=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lt={};function ut(t,e,n){lt[t]=T(e)?e:function(t,i){return t&&n?n:e}}function dt(t,e){return d(lt,t)?lt[t](e._strict,e._locale):new RegExp(ht(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,i,a){return e||n||i||a}))))}function ht(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ct={};function ft(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=function(t,n){n[e]=k(t)}),n=0;n<t.length;n++)ct[t[n]]=i}function gt(t,e){ft(t,(function(t,n,i,a){i._w=i._w||{},e(t,i._w,i,a)}))}function mt(t,e,n){null!=e&&d(ct,t)&&ct[t](e,n._a,n,t)}function pt(t){return vt(t)?366:365}function vt(t){return t%4==0&&t%100!=0||t%400==0}B("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),B(0,["YY",2],0,(function(){return this.year()%100})),B(0,["YYYY",4],0,"year"),B(0,["YYYYY",5],0,"year"),B(0,["YYYYYY",6,!0],0,"year"),F("year","y"),Y("year",1),ut("Y",at),ut("YY",J,q),ut("YYYY",et,$),ut("YYYYY",nt,X),ut("YYYYYY",nt,X),ft(["YYYYY","YYYYYY"],0),ft("YYYY",(function(t,e){e[0]=2===t.length?i.parseTwoDigitYear(t):k(t)})),ft("YY",(function(t,e){e[0]=i.parseTwoDigitYear(t)})),ft("Y",(function(t,e){e[0]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)};var yt,bt=xt("FullYear",!0);function xt(t,e){return function(n){return null!=n?(kt(this,t,n),i.updateOffset(this,e),this):_t(this,t)}}function _t(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function kt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&vt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=function(t,e){return(t%12+12)%12}(e);return t+=(e-n)/12,1===n?vt(t)?29:28:31-n%7%2}yt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},B("M",["MM",2],"Mo",(function(){return this.month()+1})),B("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),B("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),F("month","M"),Y("month",8),ut("M",J),ut("MM",J,q),ut("MMM",(function(t,e){return e.monthsShortRegex(t)})),ut("MMMM",(function(t,e){return e.monthsRegex(t)})),ft(["M","MM"],(function(t,e){e[1]=k(t)-1})),ft(["MMM","MMMM"],(function(t,e,n,i){var a=n._locale.monthsParse(t,i,n._strict);null!=a?e[1]=a:f(n).invalidMonth=t}));var Mt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,St="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Dt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ct(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)r=c([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(a=yt.call(this._shortMonthsParse,o))?a:null:-1!==(a=yt.call(this._longMonthsParse,o))?a:null:"MMM"===e?-1!==(a=yt.call(this._shortMonthsParse,o))?a:-1!==(a=yt.call(this._longMonthsParse,o))?a:null:-1!==(a=yt.call(this._longMonthsParse,o))?a:-1!==(a=yt.call(this._shortMonthsParse,o))?a:null}function Pt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=k(e);else if(!s(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function Tt(t){return null!=t?(Pt(this,t),i.updateOffset(this,!0),this):_t(this,"Month")}var Ot=st,It=st;function At(){function t(t,e){return e.length-t.length}var e,n,i=[],a=[],r=[];for(e=0;e<12;e++)n=c([2e3,e]),i.push(this.monthsShort(n,"")),a.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),a.sort(t),r.sort(t),e=0;e<12;e++)i[e]=ht(i[e]),a[e]=ht(a[e]);for(e=0;e<24;e++)r[e]=ht(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Ft(t,e,n,i,a,r,o){var s;return t<100&&t>=0?(s=new Date(t+400,e,n,i,a,r,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,i,a,r,o),s}function Rt(t){var e;if(t<100&&t>=0){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Lt(t,e,n){var i=7+e-n;return-(7+Rt(t,0,i).getUTCDay()-e)%7+i-1}function Wt(t,e,n,i,a){var r,o,s=1+7*(e-1)+(7+n-i)%7+Lt(t,i,a);return s<=0?o=pt(r=t-1)+s:s>pt(t)?(r=t+1,o=s-pt(t)):(r=t,o=s),{year:r,dayOfYear:o}}function Yt(t,e,n){var i,a,r=Lt(t.year(),e,n),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o<1?i=o+Nt(a=t.year()-1,e,n):o>Nt(t.year(),e,n)?(i=o-Nt(t.year(),e,n),a=t.year()+1):(a=t.year(),i=o),{week:i,year:a}}function Nt(t,e,n){var i=Lt(t,e,n),a=Lt(t+1,e,n);return(pt(t)-i+a)/7}function zt(t,e){return t.slice(e,7).concat(t.slice(0,e))}B("w",["ww",2],"wo","week"),B("W",["WW",2],"Wo","isoWeek"),F("week","w"),F("isoWeek","W"),Y("week",5),Y("isoWeek",5),ut("w",J),ut("ww",J,q),ut("W",J),ut("WW",J,q),gt(["w","ww","W","WW"],(function(t,e,n,i){e[i.substr(0,1)]=k(t)})),B("d",0,"do","day"),B("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),B("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),B("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),B("e",0,0,"weekday"),B("E",0,0,"isoWeekday"),F("day","d"),F("weekday","e"),F("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),ut("d",J),ut("e",J),ut("E",J),ut("dd",(function(t,e){return e.weekdaysMinRegex(t)})),ut("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),ut("dddd",(function(t,e){return e.weekdaysRegex(t)})),gt(["dd","ddd","dddd"],(function(t,e,n,i){var a=n._locale.weekdaysParse(t,i,n._strict);null!=a?e.d=a:f(n).invalidWeekday=t})),gt(["d","e","E"],(function(t,e,n,i){e[i]=k(t)}));var Vt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ht="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Et="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Bt(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)r=c([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(a=yt.call(this._weekdaysParse,o))?a:null:"ddd"===e?-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:"dddd"===e?-1!==(a=yt.call(this._weekdaysParse,o))?a:-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:"ddd"===e?-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:-1!==(a=yt.call(this._weekdaysParse,o))?a:-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:-1!==(a=yt.call(this._minWeekdaysParse,o))?a:-1!==(a=yt.call(this._weekdaysParse,o))?a:-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:null}var jt=st,Ut=st,Gt=st;function qt(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[],s=[],l=[],u=[];for(e=0;e<7;e++)n=c([2e3,1]).day(e),i=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),r=this.weekdays(n,""),o.push(i),s.push(a),l.push(r),u.push(i),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ht(s[e]),l[e]=ht(l[e]),u[e]=ht(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Zt(){return this.hours()%12||12}function $t(t,e){B(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Xt(t,e){return e._meridiemParse}B("H",["HH",2],0,"hour"),B("h",["hh",2],0,Zt),B("k",["kk",2],0,(function(){return this.hours()||24})),B("hmm",0,0,(function(){return""+Zt.apply(this)+N(this.minutes(),2)})),B("hmmss",0,0,(function(){return""+Zt.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)})),B("Hmm",0,0,(function(){return""+this.hours()+N(this.minutes(),2)})),B("Hmmss",0,0,(function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)})),$t("a",!0),$t("A",!1),F("hour","h"),Y("hour",13),ut("a",Xt),ut("A",Xt),ut("H",J),ut("h",J),ut("k",J),ut("HH",J,q),ut("hh",J,q),ut("kk",J,q),ut("hmm",K),ut("hmmss",Q),ut("Hmm",K),ut("Hmmss",Q),ft(["H","HH"],3),ft(["k","kk"],(function(t,e,n){var i=k(t);e[3]=24===i?0:i})),ft(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),ft(["h","hh"],(function(t,e,n){e[3]=k(t),f(n).bigHour=!0})),ft("hmm",(function(t,e,n){var i=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i)),f(n).bigHour=!0})),ft("hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i,2)),e[5]=k(t.substr(a)),f(n).bigHour=!0})),ft("Hmm",(function(t,e,n){var i=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i))})),ft("Hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i,2)),e[5]=k(t.substr(a))}));var Jt,Kt=xt("Hours",!0),Qt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:St,monthsShort:Dt,week:{dow:0,doy:6},weekdays:Vt,weekdaysMin:Et,weekdaysShort:Ht,meridiemParse:/[ap]\.?m?\.?/i},te={},ee={};function ne(t){return t?t.toLowerCase().replace("_","-"):t}function ie(e){var n=null;if(!te[e]&&t&&t.exports)try{n=Jt._abbr,function(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}(),ae(n)}catch(i){}return te[e]}function ae(t,e){var n;return t&&((n=o(e)?oe(t):re(t,e))?Jt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Jt._abbr}function re(t,e){if(null!==e){var n,i=Qt;if(e.abbr=t,null!=te[t])P("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=te[t]._config;else if(null!=e.parentLocale)if(null!=te[e.parentLocale])i=te[e.parentLocale]._config;else{if(null==(n=ie(e.parentLocale)))return ee[e.parentLocale]||(ee[e.parentLocale]=[]),ee[e.parentLocale].push({name:t,config:e}),null;i=n._config}return te[t]=new I(O(i,e)),ee[t]&&ee[t].forEach((function(t){re(t.name,t.config)})),ae(t),te[t]}return delete te[t],null}function oe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Jt;if(!a(t)){if(e=ie(t))return e;t=[t]}return function(t){for(var e,n,i,a,r=0;r<t.length;){for(e=(a=ne(t[r]).split("-")).length,n=(n=ne(t[r+1]))?n.split("-"):null;e>0;){if(i=ie(a.slice(0,e).join("-")))return i;if(n&&n.length>=e&&w(a,n,!0)>=e-1)break;e--}r++}return Jt}(t)}function se(t){var e,n=t._a;return n&&-2===f(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,f(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),f(t)._overflowWeeks&&-1===e&&(e=7),f(t)._overflowWeekday&&-1===e&&(e=8),f(t).overflow=e),t}function le(t,e,n){return null!=t?t:null!=e?e:n}function ue(t){var e,n,a,r,o,s=[];if(!t._d){for(a=function(t){var e=new Date(i.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,i,a,r,o,s,l;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)r=1,o=4,n=le(e.GG,t._a[0],Yt(we(),1,4).year),i=le(e.W,1),((a=le(e.E,1))<1||a>7)&&(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=Yt(we(),r,o);n=le(e.gg,t._a[0],u.year),i=le(e.w,u.week),null!=e.d?((a=e.d)<0||a>6)&&(l=!0):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(l=!0)):a=r}i<1||i>Nt(n,r,o)?f(t)._overflowWeeks=!0:null!=l?f(t)._overflowWeekday=!0:(s=Wt(n,i,a,r,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=le(t._a[0],a[0]),(t._dayOfYear>pt(o)||0===t._dayOfYear)&&(f(t)._overflowDayOfYear=!0),n=Rt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=a[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Rt:Ft).apply(null,s),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(f(t).weekdayMismatch=!0)}}var de=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,he=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/Z|[+-]\d\d(?::?\d\d)?/,fe=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],ge=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],me=/^\/?Date\((\-?\d+)/i;function pe(t){var e,n,i,a,r,o,s=t._i,l=de.exec(s)||he.exec(s);if(l){for(f(t).iso=!0,e=0,n=fe.length;e<n;e++)if(fe[e][1].exec(l[1])){a=fe[e][0],i=!1!==fe[e][2];break}if(null==a)return void(t._isValid=!1);if(l[3]){for(e=0,n=ge.length;e<n;e++)if(ge[e][1].exec(l[3])){r=(l[2]||" ")+ge[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(l[4]){if(!ce.exec(l[4]))return void(t._isValid=!1);o="Z"}t._f=a+(r||"")+(o||""),xe(t)}else t._isValid=!1}var ve=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ye={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function be(t){var e,n,i,a,r,o,s,l,u=ve.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(u){var d=(e=u[3],n=u[2],i=u[5],a=u[6],r=u[7],o=[(s=u[4],l=parseInt(s,10),l<=49?2e3+l:l<=999?1900+l:l),Dt.indexOf(e),parseInt(n,10),parseInt(i,10),parseInt(a,10)],r&&o.push(parseInt(r,10)),o);if(!function(t,e,n){return!t||Ht.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}(u[1],d,t))return;t._a=d,t._tzm=function(t,e,n){if(t)return ye[t];if(e)return 0;var i=parseInt(n,10),a=i%100;return(i-a)/100*60+a}(u[8],u[9],u[10]),t._d=Rt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),f(t).rfc2822=!0}else t._isValid=!1}function xe(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],f(t).empty=!0;var e,n,a,r,o,s=""+t._i,l=s.length,u=0;for(a=U(t._f,t._locale).match(z)||[],e=0;e<a.length;e++)(n=(s.match(dt(r=a[e],t))||[])[0])&&((o=s.substr(0,s.indexOf(n))).length>0&&f(t).unusedInput.push(o),s=s.slice(s.indexOf(n)+n.length),u+=n.length),E[r]?(n?f(t).empty=!1:f(t).unusedTokens.push(r),mt(r,n,t)):t._strict&&!n&&f(t).unusedTokens.push(r);f(t).charsLeftOver=l-u,s.length>0&&f(t).unusedInput.push(s),t._a[3]<=12&&!0===f(t).bigHour&&t._a[3]>0&&(f(t).bigHour=void 0),f(t).parsedDateParts=t._a.slice(0),f(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((i=t.isPM(n))&&e<12&&(e+=12),i||12!==e||(e=0),e):e}(t._locale,t._a[3],t._meridiem),ue(t),se(t)}else be(t);else pe(t)}function _e(t){var e=t._i,n=t._f;return t._locale=t._locale||oe(t._l),null===e||void 0===n&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),x(e)?new b(se(e)):(l(e)?t._d=e:a(n)?function(t){var e,n,i,a,r;if(0===t._f.length)return f(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;a<t._f.length;a++)r=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[a],xe(e),g(e)&&(r+=f(e).charsLeftOver,r+=10*f(e).unusedTokens.length,f(e).score=r,(null==i||r<i)&&(i=r,n=e));h(t,n||e)}(t):n?xe(t):function(t){var e=t._i;o(e)?t._d=new Date(i.now()):l(e)?t._d=new Date(e.valueOf()):"string"==typeof e?function(t){var e=me.exec(t._i);null===e?(pe(t),!1===t._isValid&&(delete t._isValid,be(t),!1===t._isValid&&(delete t._isValid,i.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):a(e)?(t._a=u(e.slice(0),(function(t){return parseInt(t,10)})),ue(t)):r(e)?function(t){if(!t._d){var e=L(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),ue(t)}}(t):s(e)?t._d=new Date(e):i.createFromInputFallback(t)}(t),g(t)||(t._d=null),t))}function ke(t,e,n,i,o){var s,l={};return!0!==n&&!1!==n||(i=n,n=void 0),(r(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||a(t)&&0===t.length)&&(t=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=o,l._l=n,l._i=t,l._f=e,l._strict=i,(s=new b(se(_e(l))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function we(t,e,n,i){return ke(t,e,n,i,!1)}i.createFromInputFallback=S("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var Me=S("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()})),Se=S("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}));function De(t,e){var n,i;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return we();for(n=e[0],i=1;i<e.length;++i)e[i].isValid()&&!e[i][t](n)||(n=e[i]);return n}var Ce=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Pe(t){var e=L(t),n=e.year||0,i=e.quarter||0,a=e.month||0,r=e.week||e.isoWeek||0,o=e.day||0,s=e.hour||0,l=e.minute||0,u=e.second||0,d=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===yt.call(Ce,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,i=0;i<Ce.length;++i)if(t[Ce[i]]){if(n)return!1;parseFloat(t[Ce[i]])!==k(t[Ce[i]])&&(n=!0)}return!0}(e),this._milliseconds=+d+1e3*u+6e4*l+1e3*s*60*60,this._days=+o+7*r,this._months=+a+3*i+12*n,this._data={},this._locale=oe(),this._bubble()}function Te(t){return t instanceof Pe}function Oe(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ie(t,e){B(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+N(~~(t/60),2)+e+N(~~t%60,2)}))}Ie("Z",":"),Ie("ZZ",""),ut("Z",ot),ut("ZZ",ot),ft(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=Fe(ot,t)}));var Ae=/([\+\-]|\d\d)/gi;function Fe(t,e){var n=(e||"").match(t);if(null===n)return null;var i=((n[n.length-1]||[])+"").match(Ae)||["-",0,0],a=60*i[1]+k(i[2]);return 0===a?0:"+"===i[0]?a:-a}function Re(t,e){var n,a;return e._isUTC?(n=e.clone(),a=(x(t)||l(t)?t.valueOf():we(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+a),i.updateOffset(n,!1),n):we(t).local()}function Le(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function We(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Ye=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ne=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function ze(t,e){var n,i,a,r,o,l,u=t,h=null;return Te(t)?u={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(u={},e?u[e]=t:u.milliseconds=t):(h=Ye.exec(t))?(n="-"===h[1]?-1:1,u={y:0,d:k(h[2])*n,h:k(h[3])*n,m:k(h[4])*n,s:k(h[5])*n,ms:k(Oe(1e3*h[6]))*n}):(h=Ne.exec(t))?u={y:Ve(h[2],n="-"===h[1]?-1:1),M:Ve(h[3],n),w:Ve(h[4],n),d:Ve(h[5],n),h:Ve(h[6],n),m:Ve(h[7],n),s:Ve(h[8],n)}:null==u?u={}:"object"==typeof u&&("from"in u||"to"in u)&&(r=we(u.from),o=we(u.to),a=r.isValid()&&o.isValid()?(o=Re(o,r),r.isBefore(o)?l=He(r,o):((l=He(o,r)).milliseconds=-l.milliseconds,l.months=-l.months),l):{milliseconds:0,months:0},(u={}).ms=a.milliseconds,u.M=a.months),i=new Pe(u),Te(t)&&d(t,"_locale")&&(i._locale=t._locale),i}function Ve(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function He(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ee(t,e){return function(n,i){var a;return null===i||isNaN(+i)||(P(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=n,n=i,i=a),Be(this,ze(n="string"==typeof n?+n:n,i),t),this}}function Be(t,e,n,a){var r=e._milliseconds,o=Oe(e._days),s=Oe(e._months);t.isValid()&&(a=null==a||a,s&&Pt(t,_t(t,"Month")+s*n),o&&kt(t,"Date",_t(t,"Date")+o*n),r&&t._d.setTime(t._d.valueOf()+r*n),a&&i.updateOffset(t,o||s))}ze.fn=Pe.prototype,ze.invalid=function(){return ze(NaN)};var je=Ee(1,"add"),Ue=Ee(-1,"subtract");function Ge(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),i=t.clone().add(n,"months");return-(n+(e-i<0?(e-i)/(i-t.clone().add(n-1,"months")):(e-i)/(t.clone().add(n+1,"months")-i)))||0}function qe(t){var e;return void 0===t?this._locale._abbr:(null!=(e=oe(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ze=S("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function $e(){return this._locale}function Xe(t,e){return(t%e+e)%e}function Je(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-126227808e5:new Date(t,e,n).valueOf()}function Ke(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-126227808e5:Date.UTC(t,e,n)}function Qe(t,e){B(0,[t,t.length],0,e)}function tn(t,e,n,i,a){var r;return null==t?Yt(this,i,a).year:(e>(r=Nt(t,i,a))&&(e=r),en.call(this,t,e,n,i,a))}function en(t,e,n,i,a){var r=Wt(t,e,n,i,a),o=Rt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}B(0,["gg",2],0,(function(){return this.weekYear()%100})),B(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Qe("gggg","weekYear"),Qe("ggggg","weekYear"),Qe("GGGG","isoWeekYear"),Qe("GGGGG","isoWeekYear"),F("weekYear","gg"),F("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),ut("G",at),ut("g",at),ut("GG",J,q),ut("gg",J,q),ut("GGGG",et,$),ut("gggg",et,$),ut("GGGGG",nt,X),ut("ggggg",nt,X),gt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,i){e[i.substr(0,2)]=k(t)})),gt(["gg","GG"],(function(t,e,n,a){e[a]=i.parseTwoDigitYear(t)})),B("Q",0,"Qo","quarter"),F("quarter","Q"),Y("quarter",7),ut("Q",G),ft("Q",(function(t,e){e[1]=3*(k(t)-1)})),B("D",["DD",2],"Do","date"),F("date","D"),Y("date",9),ut("D",J),ut("DD",J,q),ut("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),ft(["D","DD"],2),ft("Do",(function(t,e){e[2]=k(t.match(J)[0])}));var nn=xt("Date",!0);B("DDD",["DDDD",3],"DDDo","dayOfYear"),F("dayOfYear","DDD"),Y("dayOfYear",4),ut("DDD",tt),ut("DDDD",Z),ft(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=k(t)})),B("m",["mm",2],0,"minute"),F("minute","m"),Y("minute",14),ut("m",J),ut("mm",J,q),ft(["m","mm"],4);var an=xt("Minutes",!1);B("s",["ss",2],0,"second"),F("second","s"),Y("second",15),ut("s",J),ut("ss",J,q),ft(["s","ss"],5);var rn,on=xt("Seconds",!1);for(B("S",0,0,(function(){return~~(this.millisecond()/100)})),B(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),B(0,["SSS",3],0,"millisecond"),B(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),B(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),B(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),B(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),B(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),B(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),F("millisecond","ms"),Y("millisecond",16),ut("S",tt,G),ut("SS",tt,q),ut("SSS",tt,Z),rn="SSSS";rn.length<=9;rn+="S")ut(rn,it);function sn(t,e){e[6]=k(1e3*("0."+t))}for(rn="S";rn.length<=9;rn+="S")ft(rn,sn);var ln=xt("Milliseconds",!1);B("z",0,0,"zoneAbbr"),B("zz",0,0,"zoneName");var un=b.prototype;function dn(t){return t}un.add=je,un.calendar=function(t,e){var n=t||we(),a=Re(n,this).startOf("day"),r=i.calendarFormat(this,a)||"sameElse",o=e&&(T(e[r])?e[r].call(this,n):e[r]);return this.format(o||this.localeData().calendar(r,this,we(n)))},un.clone=function(){return new b(this)},un.diff=function(t,e,n){var i,a,r;if(!this.isValid())return NaN;if(!(i=Re(t,this)).isValid())return NaN;switch(a=6e4*(i.utcOffset()-this.utcOffset()),e=R(e)){case"year":r=Ge(this,i)/12;break;case"month":r=Ge(this,i);break;case"quarter":r=Ge(this,i)/3;break;case"second":r=(this-i)/1e3;break;case"minute":r=(this-i)/6e4;break;case"hour":r=(this-i)/36e5;break;case"day":r=(this-i-a)/864e5;break;case"week":r=(this-i-a)/6048e5;break;default:r=this-i}return n?r:_(r)},un.endOf=function(t){var e;if(void 0===(t=R(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ke:Je;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Xe(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Xe(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Xe(e,1e3)-1}return this._d.setTime(e),i.updateOffset(this,!0),this},un.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=j(this,t);return this.localeData().postformat(e)},un.from=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||we(t).isValid())?ze({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},un.fromNow=function(t){return this.from(we(),t)},un.to=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||we(t).isValid())?ze({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},un.toNow=function(t){return this.to(we(),t)},un.get=function(t){return T(this[t=R(t)])?this[t]():this},un.invalidAt=function(){return f(this).overflow},un.isAfter=function(t,e){var n=x(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},un.isBefore=function(t,e){var n=x(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},un.isBetween=function(t,e,n,i){var a=x(t)?t:we(t),r=x(e)?e:we(e);return!!(this.isValid()&&a.isValid()&&r.isValid())&&("("===(i=i||"()")[0]?this.isAfter(a,n):!this.isBefore(a,n))&&(")"===i[1]?this.isBefore(r,n):!this.isAfter(r,n))},un.isSame=function(t,e){var n,i=x(t)?t:we(t);return!(!this.isValid()||!i.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()===i.valueOf():(n=i.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},un.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},un.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},un.isValid=function(){return g(this)},un.lang=Ze,un.locale=qe,un.localeData=$e,un.max=Se,un.min=Me,un.parsingFlags=function(){return h({},f(this))},un.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:W[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=L(t)),i=0;i<n.length;i++)this[n[i].unit](t[n[i].unit]);else if(T(this[t=R(t)]))return this[t](e);return this},un.startOf=function(t){var e;if(void 0===(t=R(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ke:Je;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Xe(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Xe(e,6e4);break;case"second":e=this._d.valueOf(),e-=Xe(e,1e3)}return this._d.setTime(e),i.updateOffset(this,!0),this},un.subtract=Ue,un.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},un.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},un.toDate=function(){return new Date(this.valueOf())},un.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?j(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",j(n,"Z")):j(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},un.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(n+i+"-MM-DD[T]HH:mm:ss.SSS"+e+'[")]')},un.toJSON=function(){return this.isValid()?this.toISOString():null},un.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},un.unix=function(){return Math.floor(this.valueOf()/1e3)},un.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},un.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},un.year=bt,un.isLeapYear=function(){return vt(this.year())},un.weekYear=function(t){return tn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},un.isoWeekYear=function(t){return tn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},un.quarter=un.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},un.month=Tt,un.daysInMonth=function(){return wt(this.year(),this.month())},un.week=un.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},un.isoWeek=un.isoWeeks=function(t){var e=Yt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},un.weeksInYear=function(){var t=this.localeData()._week;return Nt(this.year(),t.dow,t.doy)},un.isoWeeksInYear=function(){return Nt(this.year(),1,4)},un.date=nn,un.day=un.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},un.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},un.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},un.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},un.hour=un.hours=Kt,un.minute=un.minutes=an,un.second=un.seconds=on,un.millisecond=un.milliseconds=ln,un.utcOffset=function(t,e,n){var a,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Fe(ot,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(a=Le(this)),this._offset=t,this._isUTC=!0,null!=a&&this.add(a,"m"),r!==t&&(!e||this._changeInProgress?Be(this,ze(t-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Le(this)},un.utc=function(t){return this.utcOffset(0,t)},un.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Le(this),"m")),this},un.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Fe(rt,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},un.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?we(t).utcOffset():0,(this.utcOffset()-t)%60==0)},un.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},un.isLocal=function(){return!!this.isValid()&&!this._isUTC},un.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},un.isUtc=We,un.isUTC=We,un.zoneAbbr=function(){return this._isUTC?"UTC":""},un.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},un.dates=S("dates accessor is deprecated. Use date instead.",nn),un.months=S("months accessor is deprecated. Use month instead",Tt),un.years=S("years accessor is deprecated. Use year instead",bt),un.zone=S("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),un.isDSTShifted=S("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),(t=_e(t))._a){var e=t._isUTC?c(t._a):we(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var hn=I.prototype;function cn(t,e,n,i){var a=oe(),r=c().set(i,e);return a[n](r,t)}function fn(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return cn(t,e,n,"month");var i,a=[];for(i=0;i<12;i++)a[i]=cn(t,i,n,"month");return a}function gn(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var a,r=oe(),o=t?r._week.dow:0;if(null!=n)return cn(e,(n+o)%7,i,"day");var l=[];for(a=0;a<7;a++)l[a]=cn(e,(a+o)%7,i,"day");return l}hn.calendar=function(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return T(i)?i.call(e,n):i},hn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(t){return this._ordinal.replace("%d",t)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(t,e,n,i){var a=this._relativeTime[n];return T(a)?a(t,e,n,i):a.replace(/%d/i,t)},hn.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return T(n)?n(e):n.replace(/%s/i,e)},hn.set=function(t){var e,n;for(n in t)T(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Mt).test(e)?"format":"standalone"][t.month()]:a(this._months)?this._months:this._months.standalone},hn.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Mt.test(e)?"format":"standalone"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(t,e,n){var i,a,r;if(this._monthsParseExact)return Ct.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=c([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}},hn.monthsRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||At.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=It),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||At.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Ot),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(t){return Yt(t,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(t,e){var n=a(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?zt(n,this._week.dow):t?n[t.day()]:n},hn.weekdaysMin=function(t){return!0===t?zt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},hn.weekdaysShort=function(t){return!0===t?zt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},hn.weekdaysParse=function(t,e,n){var i,a,r;if(this._weekdaysParseExact)return Bt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(a=c([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}},hn.weekdaysRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=jt),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Gt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},hn.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},ae("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),i.lang=S("moment.lang is deprecated. Use moment.locale instead.",ae),i.langData=S("moment.langData is deprecated. Use moment.localeData instead.",oe);var mn=Math.abs;function pn(t,e,n,i){var a=ze(e,n);return t._milliseconds+=i*a._milliseconds,t._days+=i*a._days,t._months+=i*a._months,t._bubble()}function vn(t){return t<0?Math.floor(t):Math.ceil(t)}function yn(t){return 4800*t/146097}function bn(t){return 146097*t/4800}function xn(t){return function(){return this.as(t)}}var _n=xn("ms"),kn=xn("s"),wn=xn("m"),Mn=xn("h"),Sn=xn("d"),Dn=xn("w"),Cn=xn("M"),Pn=xn("Q"),Tn=xn("y");function On(t){return function(){return this.isValid()?this._data[t]:NaN}}var In=On("milliseconds"),An=On("seconds"),Fn=On("minutes"),Rn=On("hours"),Ln=On("days"),Wn=On("months"),Yn=On("years"),Nn=Math.round,zn={ss:44,s:45,m:45,h:22,d:26,M:11};function Vn(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}var Hn=Math.abs;function En(t){return(t>0)-(t<0)||+t}function Bn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=Hn(this._milliseconds)/1e3,i=Hn(this._days),a=Hn(this._months);t=_(n/60),e=_(t/60),n%=60,t%=60;var r=_(a/12),o=a%=12,s=i,l=e,u=t,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=En(this._months)!==En(h)?"-":"",g=En(this._days)!==En(h)?"-":"",m=En(this._milliseconds)!==En(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(o?f+o+"M":"")+(s?g+s+"D":"")+(l||u||d?"T":"")+(l?m+l+"H":"")+(u?m+u+"M":"")+(d?m+d+"S":"")}var jn=Pe.prototype;return jn.isValid=function(){return this._isValid},jn.abs=function(){var t=this._data;return this._milliseconds=mn(this._milliseconds),this._days=mn(this._days),this._months=mn(this._months),t.milliseconds=mn(t.milliseconds),t.seconds=mn(t.seconds),t.minutes=mn(t.minutes),t.hours=mn(t.hours),t.months=mn(t.months),t.years=mn(t.years),this},jn.add=function(t,e){return pn(this,t,e,1)},jn.subtract=function(t,e){return pn(this,t,e,-1)},jn.as=function(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if("month"===(t=R(t))||"quarter"===t||"year"===t)switch(n=this._months+yn(e=this._days+i/864e5),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(bn(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}},jn.asMilliseconds=_n,jn.asSeconds=kn,jn.asMinutes=wn,jn.asHours=Mn,jn.asDays=Sn,jn.asWeeks=Dn,jn.asMonths=Cn,jn.asQuarters=Pn,jn.asYears=Tn,jn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},jn._bubble=function(){var t,e,n,i,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r>=0&&o>=0&&s>=0||r<=0&&o<=0&&s<=0||(r+=864e5*vn(bn(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=_(r/1e3),l.seconds=t%60,e=_(t/60),l.minutes=e%60,n=_(e/60),l.hours=n%24,o+=_(n/24),s+=a=_(yn(o)),o-=vn(bn(a)),i=_(s/12),s%=12,l.days=o,l.months=s,l.years=i,this},jn.clone=function(){return ze(this)},jn.get=function(t){return t=R(t),this.isValid()?this[t+"s"]():NaN},jn.milliseconds=In,jn.seconds=An,jn.minutes=Fn,jn.hours=Rn,jn.days=Ln,jn.weeks=function(){return _(this.days()/7)},jn.months=Wn,jn.years=Yn,jn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var i=ze(t).abs(),a=Nn(i.as("s")),r=Nn(i.as("m")),o=Nn(i.as("h")),s=Nn(i.as("d")),l=Nn(i.as("M")),u=Nn(i.as("y")),d=a<=zn.ss&&["s",a]||a<zn.s&&["ss",a]||r<=1&&["m"]||r<zn.m&&["mm",r]||o<=1&&["h"]||o<zn.h&&["hh",o]||s<=1&&["d"]||s<zn.d&&["dd",s]||l<=1&&["M"]||l<zn.M&&["MM",l]||u<=1&&["y"]||["yy",u];return d[2]=e,d[3]=+t>0,d[4]=n,Vn.apply(null,d)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},jn.toISOString=Bn,jn.toString=Bn,jn.toJSON=Bn,jn.locale=qe,jn.localeData=$e,jn.toIsoString=S("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),jn.lang=Ze,B("X",0,0,"unix"),B("x",0,0,"valueOf"),ut("x",at),ut("X",/[+-]?\d+(\.\d{1,3})?/),ft("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),ft("x",(function(t,e,n){n._d=new Date(k(t))})),i.version="2.24.0",e=we,i.fn=un,i.min=function(){var t=[].slice.call(arguments,0);return De("isBefore",t)},i.max=function(){var t=[].slice.call(arguments,0);return De("isAfter",t)},i.now=function(){return Date.now?Date.now():+new Date},i.utc=c,i.unix=function(t){return we(1e3*t)},i.months=function(t,e){return fn(t,e,"months")},i.isDate=l,i.locale=ae,i.invalid=m,i.duration=ze,i.isMoment=x,i.weekdays=function(t,e,n){return gn(t,e,n,"weekdays")},i.parseZone=function(){return we.apply(null,arguments).parseZone()},i.localeData=oe,i.isDuration=Te,i.monthsShort=function(t,e){return fn(t,e,"monthsShort")},i.weekdaysMin=function(t,e,n){return gn(t,e,n,"weekdaysMin")},i.defineLocale=re,i.updateLocale=function(t,e){if(null!=e){var n,i,a=Qt;null!=(i=ie(t))&&(a=i._config),(n=new I(e=O(a,e))).parentLocale=te[t],te[t]=n,ae(t)}else null!=te[t]&&(null!=te[t].parentLocale?te[t]=te[t].parentLocale:null!=te[t]&&delete te[t]);return te[t]},i.locales=function(){return D(te)},i.weekdaysShort=function(t,e,n){return gn(t,e,n,"weekdaysShort")},i.normalizeUnits=R,i.relativeTimeRounding=function(t){return void 0===t?Nn:"function"==typeof t&&(Nn=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==zn[t]&&(void 0===e?zn[t]:(zn[t]=e,"s"===t&&(zn.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=un,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()}(e={exports:{}}),e.exports}(),Nn={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};$e._date.override("function"==typeof Yn?{_id:"moment",formats:function(){return Nn},parse:function(t,e){return"string"==typeof t&&"string"==typeof e?t=Yn(t,e):t instanceof Yn||(t=Yn(t)),t.isValid()?t.valueOf():null},format:function(t,e){return Yn(t).format(e)},add:function(t,e,n){return Yn(t).add(e,n).valueOf()},diff:function(t,e,n){return Yn.duration(Yn(t).diff(Yn(e))).as(n)},startOf:function(t,e,n){return t=Yn(t),"isoWeek"===e?t.isoWeekday(n).valueOf():t.startOf(e).valueOf()},endOf:function(t,e){return Yn(t).endOf(e).valueOf()},_create:function(t){return Yn(t)}}:{}),ot._set("global",{plugins:{filler:{propagate:!0}}});var zn={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function Vn(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function Hn(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePosition?r=i.getBasePosition():i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(ut.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}function En(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function Bn(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),zn[n](t))}function jn(t){return t&&!t.skip}function Un(t,e,n,i,a){var r;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)ut.canvas.lineTo(t,e[r-1],e[r]);for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)ut.canvas.lineTo(t,n[r],n[r-1],!0)}}var Gn={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof Wt.Line&&(r={visible:t.isDatasetVisible(i),fill:Vn(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=En(l,i,s),r.boundary=Hn(r),r.mapper=Bn(r))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var i=t.ctx,a=n.el,r=a._view,o=a._children||[],s=n.mapper,l=r.backgroundColor||ot.global.defaultColor;s&&l&&o.length&&(ut.canvas.clipArea(i,t.chartArea),function(t,e,n,i,a,r){var o,s,l,u,d,h,c,f=e.length,g=i.spanGaps,m=[],p=[],v=0,y=0;for(t.beginPath(),o=0,s=f+!!r;o<s;++o)d=n(u=e[l=o%f]._view,l,i),h=jn(u),c=jn(d),h&&c?(v=m.push(u),y=p.push(d)):v&&y&&(g?(h&&m.push(u),c&&p.push(d)):(Un(t,m,p,v,y),v=y=0,m=[],p=[]));Un(t,m,p,v,y),t.closePath(),t.fillStyle=a,t.fill()}(i,o,s,r,l,a._loop),ut.canvas.unclipArea(i))}}},qn=ut.noop,Zn=ut.valueOrDefault;function $n(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}ot._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return ut.isArray(e.datasets)?e.datasets.map((function(e,n){return{text:e.label,fillStyle:ut.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}}),this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var Xn=ft.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:qn,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:qn,beforeSetDimensions:qn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:qn,beforeBuildLabels:qn,buildLabels:function(){var t=this,e=t.options.labels||{},n=ut.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:qn,beforeFit:qn,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=ut.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i)if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="top",ut.each(t.legendItems,(function(t,e){var i=$n(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=n.padding),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=n.padding,m=0,p=0,v=o+c;ut.each(t.legendItems,(function(t,e){var i=$n(n,o)+o/2+a.measureText(t.text).width;e>0&&p+v>l.height-c&&(g+=m+n.padding,f.push(m),m=0,p=0),m=Math.max(m,i),p+=v,s[e]={left:0,top:0,width:i,height:o}})),g+=m,f.push(m),l.width+=g}t.width=l.width,t.height=l.height},afterFit:qn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=ot.global,a=i.defaultColor,r=i.elements.line,o=t.width,s=t.lineWidths;if(e.display){var l,u=t.ctx,d=Zn(n.fontColor,i.defaultFontColor),h=ut.options._parseFont(n),c=h.size;u.textAlign="left",u.textBaseline="middle",u.lineWidth=.5,u.strokeStyle=d,u.fillStyle=d,u.font=h.string;var f=$n(n,c),g=t.legendHitBoxes,m=t.isHorizontal();l=m?{x:t.left+(o-s[0])/2+n.padding,y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+n.padding,line:0};var p=c+n.padding;ut.each(t.legendItems,(function(i,d){var h=u.measureText(i.text).width,v=f+c/2+h,y=l.x,b=l.y;m?d>0&&y+v+n.padding>t.left+t.minSize.width&&(b=l.y+=p,l.line++,y=l.x=t.left+(o-s[l.line])/2+n.padding):d>0&&b+p>t.top+t.minSize.height&&(y=l.x=y+t.columnWidths[l.line]+n.padding,b=l.y=t.top+n.padding,l.line++),function(t,n,i){if(!(isNaN(f)||f<=0)){u.save();var o=Zn(i.lineWidth,r.borderWidth);if(u.fillStyle=Zn(i.fillStyle,a),u.lineCap=Zn(i.lineCap,r.borderCapStyle),u.lineDashOffset=Zn(i.lineDashOffset,r.borderDashOffset),u.lineJoin=Zn(i.lineJoin,r.borderJoinStyle),u.lineWidth=o,u.strokeStyle=Zn(i.strokeStyle,a),u.setLineDash&&u.setLineDash(Zn(i.lineDash,r.borderDash)),e.labels&&e.labels.usePointStyle){var s=f*Math.SQRT2/2;ut.canvas.drawPoint(u,i.pointStyle,s,t+f/2,n+c/2)}else 0!==o&&u.strokeRect(t,n,f,c),u.fillRect(t,n,f,c);u.restore()}}(y,b,i),g[d].left=y,g[d].top=b,function(t,e,n,i){var a=c/2,r=f+a+t,o=e+a;u.fillText(n.text,r,o),n.hidden&&(u.beginPath(),u.lineWidth=2,u.moveTo(r,o),u.lineTo(r+i,o),u.stroke())}(y,b,i,h),m?l.x+=v+n.padding:l.y+=p}))}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Jn(t,e){var n=new Xn({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.legend=n}var Kn={id:"legend",_element:Xn,beforeInit:function(t){var e=t.options.legend;e&&Jn(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(ut.mergeIf(e,ot.global.legend),n?(ve.configure(t,n,e),n.options=e):Jn(t,e)):n&&(ve.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Qn=ut.noop;ot._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ti=ft.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Qn,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Qn,beforeSetDimensions:Qn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Qn,beforeBuildLabels:Qn,buildLabels:Qn,afterBuildLabels:Qn,beforeFit:Qn,fit:function(){var t=this,e=t.options,n=e.display,i=t.minSize,a=ut.isArray(e.text)?e.text.length:1,r=ut.options._parseFont(e),o=n?a*r.lineHeight+2*e.padding:0;t.isHorizontal()?(i.width=t.maxWidth,i.height=o):(i.width=o,i.height=t.maxHeight),t.width=i.width,t.height=i.height},afterFit:Qn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=ut.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=ut.valueOrDefault(n.fontColor,ot.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(ut.isArray(g))for(var m=0,p=0;p<g.length;++p)e.fillText(g[p],0,m,i),m+=s;else e.fillText(g,0,0,i);e.restore()}}});function ei(t,e){var n=new ti({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.titleBlock=n}var ni={},ii=Gn,ai=Kn,ri={id:"title",_element:ti,beforeInit:function(t){var e=t.options.title;e&&ei(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(ut.mergeIf(e,ot.global.title),n?(ve.configure(t,n,e),n.options=e):ei(t,e)):n&&(ve.removeBox(t,n),delete t.titleBlock)}};for(var oi in ni.filler=ii,ni.legend=ai,ni.title=ri,Ge.helpers=ut,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=ut._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}ut.where=function(t,e){if(ut.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return ut.each(t,(function(t){e(t)&&n.push(t)})),n},ut.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},ut.findNextWhere=function(t,e,n){ut.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},ut.findPreviousWhere=function(t,e,n){ut.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},ut.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},ut.almostEquals=function(t,e,n){return Math.abs(t-e)<n},ut.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},ut.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},ut.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},ut.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},ut.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e},ut.toRadians=function(t){return t*(Math.PI/180)},ut.toDegrees=function(t){return t*(180/Math.PI)},ut._decimalPlaces=function(t){if(ut.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},ut.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},ut.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},ut.aliasPixel=function(t){return t%2==0?0:.5},ut._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},ut.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},ut.EPSILON=Number.EPSILON||1e-14,ut.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}i.mK=!n||n.model.skip?i.deltaK:!a||a.model.skip?n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?0:(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)a=d[e+1],(i=d[e]).model.skip||a.model.skip||(ut.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(a=e<h-1?d[e+1]:null,(n=e>0?d[e-1]:null)&&!n.model.skip&&(i.model.controlPointPreviousX=i.model.x-(u=(i.model.x-n.model.x)/3),i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(i.model.controlPointNextX=i.model.x+(u=(a.model.x-i.model.x)/3),i.model.controlPointNextY=i.model.y+u*i.mK))},ut.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},ut.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},ut.niceNum=function(t,e){var n=Math.floor(ut.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},ut.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},ut.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(ut.getStyle(r,"padding-left")),u=parseFloat(ut.getStyle(r,"padding-top")),d=parseFloat(ut.getStyle(r,"padding-right")),h=parseFloat(ut.getStyle(r,"padding-bottom")),c=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/(o.right-o.left-l-d)*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/c*r.height/e.currentDevicePixelRatio)}},ut.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},ut.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},ut._calculatePadding=function(t,e,n){return(e=ut.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},ut._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ut.getMaximumWidth=function(t){var e=ut._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-ut._calculatePadding(e,"padding-left",n)-ut._calculatePadding(e,"padding-right",n),a=ut.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},ut.getMaximumHeight=function(t){var e=ut._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-ut._calculatePadding(e,"padding-top",n)-ut._calculatePadding(e,"padding-bottom",n),a=ut.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},ut.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},ut.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},ut.fontString=function(t,e,n){return e+" "+t+"px "+n},ut.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o=0;ut.each(n,(function(e){null!=e&&!0!==ut.isArray(e)?o=ut.measureText(t,a,r,o,e):ut.isArray(e)&&ut.each(e,(function(e){null==e||ut.isArray(e)||(o=ut.measureText(t,a,r,o,e))}))}));var s=r.length/2;if(s>n.length){for(var l=0;l<s;l++)delete a[r[l]];r.splice(0,s)}return o},ut.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},ut.numberOfLabelLines=function(t){var e=1;return ut.each(t,(function(t){ut.isArray(t)&&t.length>e&&(e=t.length)})),e},ut.color=G?function(t){return t instanceof CanvasGradient&&(t=ot.global.defaultColor),G(t)}:function(t){return console.error("Color.js not found!"),t},ut.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:ut.color(t).saturate(.5).darken(.1).rgbString()}}(),Ge._adapters=$e,Ge.Animation=mt,Ge.animationService=pt,Ge.controllers=oe,Ge.DatasetController=_t,Ge.defaults=ot,Ge.Element=ft,Ge.elements=Wt,Ge.Interaction=fe,Ge.layouts=ve,Ge.platform=Te,Ge.plugins=Oe,Ge.Scale=en,Ge.scaleService=Ie,Ge.Ticks=Xe,Ge.Tooltip=ze,Ge.helpers.each(Wn,(function(t,e){Ge.scaleService.registerScaleType(e,t,t._defaults)})),ni)ni.hasOwnProperty(oi)&&Ge.plugins.register(ni[oi]);Ge.platform.initialize();var si=Ge;return"undefined"!=typeof window&&(window.Chart=Ge),Ge.Chart=Ge,Ge.Legend=ni.legend._element,Ge.Title=ni.title._element,Ge.pluginService=Ge.plugins,Ge.PluginBase=Ge.Element.extend({}),Ge.canvasHelpers=Ge.helpers.canvas,Ge.layoutService=Ge.layouts,Ge.LinearScaleBase=rn,Ge.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){Ge[t]=function(e,n){return new Ge(e,Ge.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),si}));
\ No newline at end of file
+/*! For license information please see scripts.76632aba1e576c7cc54a.js.LICENSE.txt */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Chart=e()}(this,(function(){"use strict";var t={rgb2hsl:e,rgb2hsv:n,rgb2hwb:i,rgb2cmyk:a,rgb2keyword:o,rgb2xyz:s,rgb2lab:l,rgb2lch:function(t){return v(l(t))},hsl2rgb:u,hsl2hsv:function(t){var e=t[1]/100,n=t[2]/100;return 0===n?[0,0,0]:[t[0],2*(e*=(n*=2)<=1?n:2-n)/(n+e)*100,(n+e)/2*100]},hsl2hwb:function(t){return i(u(t))},hsl2cmyk:function(t){return a(u(t))},hsl2keyword:function(t){return o(u(t))},hsv2rgb:d,hsv2hsl:function(t){var e,n,i=t[1]/100,a=t[2]/100;return e=i*a,[t[0],100*(e=(e/=(n=(2-i)*a)<=1?n:2-n)||0),100*(n/=2)]},hsv2hwb:function(t){return i(d(t))},hsv2cmyk:function(t){return a(d(t))},hsv2keyword:function(t){return o(d(t))},hwb2rgb:h,hwb2hsl:function(t){return e(h(t))},hwb2hsv:function(t){return n(h(t))},hwb2cmyk:function(t){return a(h(t))},hwb2keyword:function(t){return o(h(t))},cmyk2rgb:c,cmyk2hsl:function(t){return e(c(t))},cmyk2hsv:function(t){return n(c(t))},cmyk2hwb:function(t){return i(c(t))},cmyk2keyword:function(t){return o(c(t))},keyword2rgb:_,keyword2hsl:function(t){return e(_(t))},keyword2hsv:function(t){return n(_(t))},keyword2hwb:function(t){return i(_(t))},keyword2cmyk:function(t){return a(_(t))},keyword2lab:function(t){return l(_(t))},keyword2xyz:function(t){return s(_(t))},xyz2rgb:f,xyz2lab:m,xyz2lch:function(t){return v(m(t))},lab2xyz:p,lab2rgb:y,lab2lch:v,lch2lab:x,lch2xyz:function(t){return p(x(t))},lch2rgb:function(t){return y(x(t))}};function e(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s==o?e=0:i==s?e=(a-r)/l:a==s?e=2+(r-i)/l:r==s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s==o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]}function n(t){var e,n,i=t[0],a=t[1],r=t[2],o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return n=0==s?0:l/s*1e3/10,s==o?e=0:i==s?e=(a-r)/l:a==s?e=2+(r-i)/l:r==s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),[e,n,s/255*1e3/10]}function i(t){var n=t[0],i=t[1],a=t[2];return[e(t)[0],1/255*Math.min(n,Math.min(i,a))*100,100*(a=1-1/255*Math.max(n,Math.max(i,a)))]}function a(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function o(t){return w[JSON.stringify(t)]}function s(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]}function l(t){var e=s(t),n=e[0],i=e[1],a=e[2];return i/=100,a/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function u(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,a[u]=255*(r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e);return a}function d(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}}function h(t){var e,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u>1&&(s/=u,l/=u),i=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(i=1-i),a=s+i*((n=1-l)-s),e){default:case 6:case 0:r=n,g=a,b=s;break;case 1:r=a,g=n,b=s;break;case 2:r=s,g=n,b=a;break;case 3:r=s,g=a,b=n;break;case 4:r=a,g=s,b=n;break;case 5:r=n,g=s,b=a}return[255*r,255*g,255*b]}function c(t){var e=t[1]/100,n=t[2]/100,i=t[3]/100;return[255*(1-Math.min(1,t[0]/100*(1-i)+i)),255*(1-Math.min(1,e*(1-i)+i)),255*(1-Math.min(1,n*(1-i)+i))]}function f(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]}function m(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]}function p(t){var e,n,i,a,r=t[0],o=t[1],s=t[2];return r<=8?a=(n=100*r/903.3)/100*7.787+16/116:(n=100*Math.pow((r+16)/116,3),a=Math.pow(n/100,1/3)),[e=e/95.047<=.008856?e=95.047*(o/500+a-16/116)/7.787:95.047*Math.pow(o/500+a,3),n,i=i/108.883<=.008859?i=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function v(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]}function y(t){return f(p(t))}function x(t){var e,n=t[1];return e=t[2]/360*2*Math.PI,[t[0],n*Math.cos(e),n*Math.sin(e)]}function _(t){return k[t]}var k={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},w={};for(var M in k)w[JSON.stringify(k[M])]=M;var S=function(){return new O};for(var D in t){S[D+"Raw"]=function(e){return function(n){return"number"==typeof n&&(n=Array.prototype.slice.call(arguments)),t[e](n)}}(D);var C=/(\w+)2(\w+)/.exec(D),P=C[1],T=C[2];(S[P]=S[P]||{})[T]=S[D]=function(e){return function(n){"number"==typeof n&&(n=Array.prototype.slice.call(arguments));var i=t[e](n);if("string"==typeof i||void 0===i)return i;for(var a=0;a<i.length;a++)i[a]=Math.round(i[a]);return i}}(D)}var O=function(){this.convs={}};O.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},O.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},O.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space;e=S[n][t](this.convs[n]),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach((function(t){O.prototype[t]=function(e){return this.routeSpace(t,arguments)}}));var I=S,A={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},F={getRgba:R,getHsla:L,getRgb:function(t){var e=R(t);return e&&e.slice(0,3)},getHsl:function(t){var e=L(t);return e&&e.slice(0,3)},getHwb:W,getAlpha:function(t){var e=R(t);return e||(e=L(t))||(e=W(t))?e[3]:void 0},hexString:function(t,e){return e=void 0!==e&&3===t.length?e:t[3],"#"+H(t[0])+H(t[1])+H(t[2])+(e>=0&&e<1?H(Math.round(255*e)):"")},rgbString:function(t,e){return e<1||t[3]&&t[3]<1?Y(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:Y,percentString:function(t,e){return e<1||t[3]&&t[3]<1?N(t,e):"rgb("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%)"},percentaString:N,hslString:function(t,e){return e<1||t[3]&&t[3]<1?z(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:z,hwbString:function(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return E[t.slice(0,3)]}};function R(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(a=i[2],i=i[1],r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=A[i[1]]))return}for(r=0;r<e.length;r++)e[r]=V(e[r],0,255);return n=n||0==n?V(n,0,1):1,e[3]=n,e}}function L(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function W(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[V(parseInt(e[1]),0,360),V(parseFloat(e[2]),0,100),V(parseFloat(e[3]),0,100),V(isNaN(n)?1:n,0,1)]}}}function Y(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function N(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function z(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function V(t,e,n){return Math.min(Math.max(e,t),n)}function H(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var E={};for(var B in A)E[A[B]]=B;var j=function(t){return t instanceof j?t:this instanceof j?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=F.getRgba(t))?this.setValues("rgb",e):(e=F.getHsla(t))?this.setValues("hsl",e):(e=F.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new j(t);var e};j.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return F.hexString(this.values.rgb)},rgbString:function(){return F.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return F.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return F.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return F.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return F.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return F.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return F.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new j,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&("[object Array]"===(e={}.toString.call(t=i[r]))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},j.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},j.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},j.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},j.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,s=1;if(this.valid=!0,"alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];s=e.a}else if(void 0!==e[r[t][0]]){var l=r[t];for(n=0;n<t.length;n++)a[t][n]=e[l[n]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var u in r)u!==t&&(a[u]=I[t][u](a[t]));return!0},j.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},j.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:(n===i[e]||(i[e]=n,this.setValues(t,i)),this)},"undefined"!=typeof window&&(window.Color=j);var U,G=j,q={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return q.valueOrDefault(q.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(q.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(q.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(r=e[n],(a=t[n])instanceof Array&&r instanceof Array){if(!q.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(q.isArray(t))return t.map(q.clone);if(q.isObject(t)){for(var e={},n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=q.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){var a=e[t],r=n[t];q.isObject(a)&&q.isObject(r)?q.merge(a,r,i):e[t]=q.clone(r)},_mergerIf:function(t,e,n){var i=e[t],a=n[t];q.isObject(i)&&q.isObject(a)?q.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=q.clone(a))},merge:function(t,e,n){var i,a,r,o,s,l=q.isArray(e)?e:[e],u=l.length;if(!q.isObject(t))return t;for(i=(n=n||{}).merger||q._merger,a=0;a<u;++a)if(q.isObject(e=l[a]))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return q.merge(t,e,{merger:q._mergerIf})},extend:function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;++n)q.each(arguments[n],e);return t},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=q.inherits,t&&q.extend(n.prototype,t),n.__super__=e.prototype,n}},Z=q;q.callCallback=q.callback,q.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},q.getValueOrDefault=q.valueOrDefault,q.getValueAtIndexOrDefault=q.valueAtIndexOrDefault;var $={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-$.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*$.easeInBounce(2*t):.5*$.easeOutBounce(2*t-1)+.5}},X={effects:$};Z.easingEffects=$;var J=Math.PI,K=J/180,Q=2*J,tt=J/2,et=J/4,nt=2*J/3,it={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-J,-tt),t.arc(u,l,o,-tt,0),t.arc(u,d,o,0,tt),t.arc(s,d,o,tt,J)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-tt,tt),t.arc(s,l,o,tt,J+tt)):l<d?(t.arc(s,l,o,-J,0),t.arc(s,d,o,0,J)):t.arc(s,l,o,-J,J),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*K;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(o=e.toString())&&"[object HTMLCanvasElement]"!==o){if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,Q),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=nt,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=nt,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+et)*u,l=Math.sin(h+et)*u,t.arc(i-s,a-l,d,h-J,h-tt),t.arc(i+l,a-s,d,h-tt,h),t.arc(i+s,a+l,d,h,h+tt),t.arc(i-l,a+s,d,h+tt,h+J),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=et;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=et;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=et,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}}else t.drawImage(e,i-e.width/2,a-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},at=it;Z.clear=it.clear,Z.drawRoundedRectangle=function(t){t.beginPath(),it.roundedRect.apply(it,arguments)};var rt={_set:function(t,e){return Z.merge(this[t]||(this[t]={}),e)}};rt._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var ot=rt,st=Z.valueOrDefault,lt={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return Z.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=ot.global,n=st(t.fontSize,e.defaultFontSize),i={family:st(t.fontFamily,e.defaultFontFamily),lineHeight:Z.options.toLineHeight(st(t.lineHeight,e.defaultLineHeight),n),size:n,style:st(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||Z.isNullOrUndef(t.size)||Z.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n){var i,a,r;for(i=0,a=t.length;i<a;++i)if(void 0!==(r=t[i])&&(void 0!==e&&"function"==typeof r&&(r=r(e)),void 0!==n&&Z.isArray(r)&&(r=r[n]),void 0!==r))return r}},ut=Z,dt=at,ht=lt;ut.easing=X,ut.canvas=dt,ut.options=ht;var ct=function(t){ut.extend(this,t),this.initialize.apply(this,arguments)};ut.extend(ct.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=ut.clone(t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)==typeof(l=t[o]))if("string"===d){if((h=G(l)).valid&&(c=G(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(ut.isFinite(l)&&ut.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ut.isNumber(this._model.x)&&ut.isNumber(this._model.y)}}),ct.extend=ut.inherits;var ft=ct,gt=ft.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),mt=gt;Object.defineProperty(gt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(gt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),ot._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ut.noop,onComplete:ut.noop}});var pt={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=ut.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=ut.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),ut.callback(t.render,[e,t],e),ut.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(ut.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},vt=ut.options.resolve,yt=["push","pop","shift","splice","unshift"];function bt(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(yt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var xt=function(t,e){this.initialize(t,e)};ut.extend(xt.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&bt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&bt(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),yt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return ut.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},update:ut.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t){ut.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=ut.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=vt([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=vt([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=vt([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),xt.extend=ut.inherits;var _t=xt;ot._set("global",{elements:{arc:{backgroundColor:ot.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var kt=ft.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=ut.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<o;)a+=2*Math.PI;return a>=o&&a<=s&&r>=n.innerRadius&&r<=n.outerRadius}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i=n.startAngle,a=n.endAngle,r="inner"===n.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(n.x,n.y,Math.max(n.outerRadius-r,0),i,a),e.arc(n.x,n.y,n.innerRadius,a,i,!0),e.closePath(),e.fillStyle=n.backgroundColor,e.fill(),n.borderWidth&&("inner"===n.borderAlign?(e.beginPath(),e.arc(n.x,n.y,n.outerRadius,i-(t=r/n.outerRadius),a+t),n.innerRadius>r?e.arc(n.x,n.y,n.innerRadius-r,a+(t=r/n.innerRadius),i-t,!0):e.arc(n.x,n.y,r,a+Math.PI/2,i-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(n.x,n.y,n.outerRadius,i,a),e.arc(n.x,n.y,n.innerRadius,a,i,!0),e.closePath(),e.lineWidth=2*n.borderWidth,e.lineJoin="round"):(e.lineWidth=n.borderWidth,e.lineJoin="bevel"),e.strokeStyle=n.borderColor,e.stroke()),e.restore()}}),wt=ut.valueOrDefault,Mt=ot.global.defaultColor;ot._set("global",{elements:{line:{tension:.4,backgroundColor:Mt,borderWidth:3,borderColor:Mt,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var St=ft.extend({draw:function(){var t,e,n,i,a=this._view,r=this._chart.ctx,o=a.spanGaps,s=this._children.slice(),l=ot.global,u=l.elements.line,d=-1;for(this._loop&&s.length&&s.push(s[0]),r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=wt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=wt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),d=-1,t=0;t<s.length;++t)e=s[t],n=ut.previousItem(s,t),i=e._view,0===t?i.skip||(r.moveTo(i.x,i.y),d=t):(n=-1===d?n:s[d],i.skip||(d!==t-1&&!o||-1===d?r.moveTo(i.x,i.y):ut.canvas.lineTo(r,n._view,e._view),d=t));r.stroke(),r.restore()}}),Dt=ut.valueOrDefault,Ct=ot.global.defaultColor;function Pt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}ot._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Ct,borderColor:Ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Tt=ft.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:Pt,inXRange:Pt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=ot.global,u=l.defaultColor;e.skip||(void 0===t||ut.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=Dt(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,ut.canvas.drawPoint(n,i,r,o,s,a))}}),Ot=ot.global.defaultColor;function It(t){return t&&void 0!==t.width}function At(t){var e,n,i,a,r;return It(t)?(e=t.x-(r=t.width/2),n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function Ft(t,e,n){return t===e?n:t===n?e:t}function Rt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&At(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}ot._set("global",{elements:{rectangle:{backgroundColor:Ot,borderColor:Ot,borderSkipped:"bottom",borderWidth:0}}});var Lt=ft.extend({draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=At(t),n=e.right-e.left,i=e.bottom-e.top,a=function(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=Ft(e,"left","right")):t.base<t.y&&(e=Ft(e,"bottom","top")),n[e]=!0,n):n}(t);return ut.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Rt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return It(n)?Rt(n,t,null):Rt(n,null,e)},inXRange:function(t){return Rt(this._view,t,null)},inYRange:function(t){return Rt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return It(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return It(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),Wt={},Yt=St,Nt=Tt,zt=Lt;Wt.Arc=kt,Wt.Line=Yt,Wt.Point=Nt,Wt.Rectangle=zt;var Vt=ut.options.resolve;ot._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var Ht=_t.extend({dataElementType:Wt.Rectangle,initialize:function(){var t,e=this;_t.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},i._updateElementGeometry(t,e,n),t.pivot()},_updateElementGeometry:function(t,e,n){var i=this,a=t._model,r=i._getValueScale(),o=r.getBasePixel(),s=r.isHorizontal(),l=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,l);a.horizontal=s,a.base=n?o:u.base,a.x=s?n?o:u.head:d.center,a.y=s?d.center:n?o:u.head,a.height=s?d.size:void 0,a.width=s?void 0:d.size},_getStacks:function(t){var e,n,i=this.chart,a=this._getIndexScale().options.stacked,r=void 0===t?i.data.datasets.length:t+1,o=[];for(e=0;e<r;++e)(n=i.getDatasetMeta(e)).bar&&i.isDatasetVisible(e)&&(!1===a||!0===a&&-1===o.indexOf(n.stack)||void 0===a&&(void 0===n.stack||-1===o.indexOf(n.stack)))&&o.push(n.stack);return o},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=this.getStackCount(),a=this.index,r=n.isHorizontal(),o=r?n.left:n.top,s=o+(r?n.width:n.height),l=[];for(t=0,e=this.getMeta().data.length;t<e;++t)l.push(n.getPixelForValue(null,t,a));return{min:ut.isNullOrUndef(n.options.barThickness)?function(t,e){var n,i,a,r,o=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=s.length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,i-n):o,n=i;return o}(n,l):-1,pixels:l,start:o,end:s,stackCount:i,scale:n}},calculateBarValuePixels:function(t,e){var n,i,a,r,o,s,l=this.chart,u=this.getMeta(),d=this._getValueScale(),h=d.isHorizontal(),c=l.data.datasets,f=+d.getRightValue(c[t].data[e]),g=d.options.minBarLength,m=d.options.stacked,p=u.stack,v=0;if(m||void 0===m&&void 0!==p)for(n=0;n<t;++n)(i=l.getDatasetMeta(n)).bar&&i.stack===p&&i.controller._getValueScaleId()===d.id&&l.isDatasetVisible(n)&&(a=+d.getRightValue(c[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return r=d.getPixelForValue(v),s=(o=d.getPixelForValue(v+f))-r,void 0!==g&&Math.abs(s)<g&&(s=g,o=f>=0&&!h||f<0&&h?r-g:r+g),{size:s,base:r,head:o,center:o+s/2}},calculateBarIndexPixels:function(t,e,n){var i=n.scale.options,a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):function(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t];return ut.isNullOrUndef(r)?(i=e.min*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(ut.valueOrDefault(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(ut.canvas.clipArea(t.ctx,t.chartArea);r<a;++r)isNaN(e.getRightValue(i.data[r]))||n[r].draw();ut.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.rectangle,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=Vt([s[a],o[a],l[a]],d,e);return u}}),Et=ut.valueOrDefault,Bt=ut.options.resolve;ot._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+": ("+t.xLabel+", "+t.yLabel+", "+e.datasets[t.datasetIndex].data[t.index].r+")"}}}});var jt=_t.extend({dataElementType:Wt.Point,update:function(t){var e=this,n=e.getMeta();ut.each(n.data,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Et(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Et(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Et(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u=o.data[e],d={},h={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(n=0,i=c.length;n<i;++n)d[a=c[n]]=Bt([s[a],o[a],l[a]],h,e);return d.radius=Bt([s.radius,u?u.r:void 0,o.radius,l.radius],h,e),d}}),Ut=ut.options.resolve,Gt=ut.valueOrDefault;ot._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],o=a.data[i],s=o&&o.custom||{},l=t.options.elements.arc;return{text:n,fillStyle:Ut([s.backgroundColor,r.backgroundColor,l.backgroundColor],void 0,i),strokeStyle:Ut([s.borderColor,r.borderColor,l.borderColor],void 0,i),lineWidth:Ut([s.borderWidth,r.borderWidth,l.borderWidth],void 0,i),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return ut.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var qt=_t.extend({dataElementType:Wt.Arc,linkScales:ut.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i=this,a=i.chart,r=a.chartArea,o=a.options,s=r.right-r.left,l=r.bottom-r.top,u=Math.min(s,l),d={x:0,y:0},h=i.getMeta(),c=h.data,f=o.cutoutPercentage,g=o.circumference,m=i._getRingWeight(i.index);if(g<2*Math.PI){var p=o.rotation%(2*Math.PI),v=(p+=2*Math.PI*(p>=Math.PI?-1:p<-Math.PI?1:0))+g,y={x:Math.cos(p),y:Math.sin(p)},b={x:Math.cos(v),y:Math.sin(v)},x=p<=0&&v>=0||p<=2*Math.PI&&2*Math.PI<=v,_=p<=.5*Math.PI&&.5*Math.PI<=v||p<=2.5*Math.PI&&2.5*Math.PI<=v,k=p<=-Math.PI&&-Math.PI<=v||p<=Math.PI&&Math.PI<=v,w=p<=.5*-Math.PI&&.5*-Math.PI<=v||p<=1.5*Math.PI&&1.5*Math.PI<=v,M=f/100,S={x:k?-1:Math.min(y.x*(y.x<0?1:M),b.x*(b.x<0?1:M)),y:w?-1:Math.min(y.y*(y.y<0?1:M),b.y*(b.y<0?1:M))},D={x:x?1:Math.max(y.x*(y.x>0?1:M),b.x*(b.x>0?1:M)),y:_?1:Math.max(y.y*(y.y>0?1:M),b.y*(b.y>0?1:M))},C={width:.5*(D.x-S.x),height:.5*(D.y-S.y)};u=Math.min(s/C.width,l/C.height),d={x:-.5*(D.x+S.x),y:-.5*(D.y+S.y)}}for(e=0,n=c.length;e<n;++e)c[e]._options=i._resolveElementOptions(c[e],e);for(a.borderWidth=i.getMaxBorderWidth(),a.outerRadius=Math.max((u-a.borderWidth)/2,0),a.innerRadius=Math.max(f?a.outerRadius/100*f:0,0),a.radiusLength=(a.outerRadius-a.innerRadius)/(i._getVisibleDatasetWeightTotal()||1),a.offsetX=d.x*a.outerRadius,a.offsetY=d.y*a.outerRadius,h.total=i.calculateTotal(),i.outerRadius=a.outerRadius-a.radiusLength*i._getRingWeightOffset(i.index),i.innerRadius=Math.max(i.outerRadius-a.radiusLength*m,0),e=0,n=c.length;e<n;++e)i.updateElement(c[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate||t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/(2*Math.PI)),g=t._options||{};ut.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,borderAlign:g.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:n&&s.animateScale?0:i.outerRadius,innerRadius:n&&s.animateScale?0:i.innerRadius,label:ut.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var m=t._model;n&&s.animateRotate||(m.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,m.endAngle=m.startAngle+m.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return ut.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],"inner"!==(o=r?r._resolveElementOptions(a,e):a._options).borderAlign&&(u=(l=o.hoverBorderWidth)>(u=(s=o.borderWidth)>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Gt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Gt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Gt(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=this.getDataset(),s=t.custom||{},l=r.options.elements.arc,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=Ut([s[a],o[a],l[a]],d,e);return u},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Gt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});ot._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var Zt=Ht.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),$t=ut.valueOrDefault,Xt=ut.options.resolve,Jt=ut.canvas._isPointInArea;function Kt(t,e){return $t(t.showLine,e.showLines)}ot._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Qt=_t.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.getScaleForId(a.yAxisID),l=i.getDataset(),u=Kt(l,i.chart.options);for(u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._model=i._resolveLineOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r.getScaleForId(o.yAxisID),c=r.getScaleForId(o.xAxisID),f=o.dataset._model,g=r._resolvePointOptions(t,e);i=c.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?h.getBasePixel():r.calculatePointY(d,e,u),t._xScale=c,t._yScale=h,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:$t(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(n=0,i=c.length;n<i;++n)u[a=c[n]]=Xt([s[a],o[h[a]],o[a],l[a]],d,e);return u},_resolveLineOptions:function(t){var e,n,i,a=this.chart,r=a.data.datasets[this.index],o=t.custom||{},s=a.options,l=s.elements.line,u={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,n=d.length;e<n;++e)u[i=d[e]]=Xt([o[i],r[i],l[i]]);return u.spanGaps=$t(r.spanGaps,s.spanGaps),u.tension=$t(r.lineTension,l.tension),u.steppedLine=Xt([o.steppedLine,r.steppedLine,l.stepped]),u},calculatePointY:function(t,e,n){var i,a,r,o=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),u=0,d=0;if(l.options.stacked){for(i=0;i<n;i++)if(a=o.data.datasets[i],"line"===(r=o.getDatasetMeta(i)).type&&r.yAxisID===l.id&&o.isDatasetVisible(i)){var h=Number(l.getRightValue(a.data[e]));h<0?d+=h||0:u+=h||0}var c=Number(l.getRightValue(t));return l.getPixelForValue(c<0?d+c:u+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)ut.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=ut.splineCurve(ut.previousItem(l,t)._model,n,ut.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)Jt(n=l[t]._model,s)&&(t>0&&Jt(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Jt(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=i.length,o=0;for(Kt(this.getDataset(),e.options)&&(ut.canvas.clipArea(e.ctx,{left:a.left,right:a.right,top:a.top-(t=(n.dataset._model.borderWidth||0)/2),bottom:a.bottom+t}),n.dataset.draw(),ut.canvas.unclipArea(e.ctx));o<r;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=$t(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=$t(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=$t(n.hoverBorderWidth,n.borderWidth),e.radius=$t(n.hoverRadius,n.radius)}}),te=ut.options.resolve;ot._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=e.datasets[0],o=a.data[i].custom||{},s=t.options.elements.arc;return{text:n,fillStyle:te([o.backgroundColor,r.backgroundColor,s.backgroundColor],void 0,i),strokeStyle:te([o.borderColor,r.borderColor,s.borderColor],void 0,i),lineWidth:te([o.borderWidth,r.borderWidth,s.borderWidth],void 0,i),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var ee=_t.extend({dataElementType:Wt.Arc,linkScales:ut.noop,update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],m=g+(t.hidden?0:i._angles[e]),p=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};ut.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?p:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:m,label:ut.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return ut.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor,a=ut.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_resolveElementOptions:function(t,e){var n,i,a,r=this.chart,o=this.getDataset(),s=t.custom||{},l=r.options.elements.arc,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(n=0,i=h.length;n<i;++n)u[a=h[n]]=te([s[a],o[a],l[a]],d,e);return u},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();return isNaN(i.data[t])||a.data[t].hidden?0:te([e.chart.options.elements.arc.angle,2*Math.PI/n],{chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index},t)}});ot._set("pie",ut.clone(ot.doughnut)),ot._set("pie",{cutoutPercentage:0});var ne=qt,ie=ut.valueOrDefault,ae=ut.options.resolve;ot._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var re=_t.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,linkScales:ut.noop,update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i.getDataset();for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveLineOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolvePointOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:ie(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolvePointOptions:function(t,e){var n,i,a,r=this.chart,o=r.data.datasets[this.index],s=t.custom||{},l=r.options.elements.point,u={},d={chart:r,dataIndex:e,dataset:o,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(n=0,i=c.length;n<i;++n)u[a=c[n]]=ae([s[a],o[h[a]],o[a],l[a]],d,e);return u},_resolveLineOptions:function(t){var e,n,i,a=this.chart,r=a.data.datasets[this.index],o=t.custom||{},s=a.options.elements.line,l={},u=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,n=u.length;e<n;++e)l[i=u[e]]=ae([o[i],r[i],s[i]]);return l.tension=ie(r.lineTension,s.tension),l},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(t=0,e=o.length;t<e;++t)n=o[t]._model,i=ut.splineCurve(ut.previousItem(o,t,!0)._model,n,ut.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ie(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=ie(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=ie(n.hoverBorderWidth,n.borderWidth),e.radius=ie(n.hoverRadius,n.radius)}});ot._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var oe={bar:Ht,bubble:jt,doughnut:qt,horizontalBar:Zt,line:Qt,polarArea:ee,pie:ne,radar:re,scatter:Qt};function se(t,e){return t.native?{x:t.x,y:t.y}:ut.getRelativePosition(t,e)}function le(t,e){var n,i,a,r,o;for(i=0,r=t.data.datasets.length;i<r;++i)if(t.isDatasetVisible(i))for(a=0,o=(n=t.getDatasetMeta(i)).data.length;a<o;++a){var s=n.data[a];s._view.skip||e(s)}}function ue(t,e){var n=[];return le(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function de(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return le(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function he(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ce(t,e,n){var i=se(e,t);n.axis=n.axis||"x";var a=he(n.axis),r=n.intersect?ue(t,i):de(t,i,!1,a),o=[];return r.length?(t.data.datasets.forEach((function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n).data[r[0]._index];i&&!i._view.skip&&o.push(i)}})),o):[]}var fe={modes:{single:function(t,e){var n=se(e,t),i=[];return le(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ce,index:ce,dataset:function(t,e,n){var i=se(e,t);n.axis=n.axis||"xy";var a=he(n.axis),r=n.intersect?ue(t,i):de(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ce(t,e,{intersect:!1})},point:function(t,e){return ue(t,se(e,t))},nearest:function(t,e,n){var i=se(e,t);n.axis=n.axis||"xy";var a=he(n.axis);return de(t,i,n.intersect,a)},x:function(t,e,n){var i=se(e,t),a=[],r=!1;return le(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=se(e,t),a=[],r=!1;return le(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}};function ge(t,e){return ut.where(t,(function(t){return t.position===e}))}function me(t,e){t.forEach((function(t,e){return t._tmpIndex_=e,t})),t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight})),t.forEach((function(t){delete t._tmpIndex_}))}function pe(t,e){ut.each(t,(function(t){e[t.position]+=t.isHorizontal()?t.height:t.width}))}ot._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ve={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)n.hasOwnProperty(i=a[o])&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=ut.options.toPadding((t.options.layout||{}).padding),a=i.left,r=i.right,o=i.top,s=i.bottom,l=ge(t.boxes,"left"),u=ge(t.boxes,"right"),d=ge(t.boxes,"top"),h=ge(t.boxes,"bottom"),c=ge(t.boxes,"chartArea");me(l,!0),me(u,!1),me(d,!0),me(h,!1);var f,g=l.concat(u),m=d.concat(h),p=g.concat(m),v=e-a-r,y=n-o-s,b=(e-v/2)/g.length,x=v,_=y,k={top:o,left:a,bottom:s,right:r},w=[];ut.each(p,(function(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?v:x,y/2),_-=e.height):(e=t.update(b,_),x-=e.width),w.push({horizontal:n,width:e.width,box:t})})),f=function(t){var e=0,n=0,i=0,a=0;return ut.each(t,(function(t){if(t.getPadding){var r=t.getPadding();e=Math.max(e,r.top),n=Math.max(n,r.left),i=Math.max(i,r.bottom),a=Math.max(a,r.right)}})),{top:e,left:n,bottom:i,right:a}}(p),ut.each(g,O),pe(g,k),ut.each(m,O),pe(m,k),ut.each(g,(function(t){var e=ut.findNextWhere(w,(function(e){return e.box===t}));e&&t.update(e.width,_,{left:0,right:0,top:k.top,bottom:k.bottom})})),pe(p,k={top:o,left:a,bottom:s,right:r});var M=Math.max(f.left-k.left,0);k.left+=M,k.right+=Math.max(f.right-k.right,0);var S=Math.max(f.top-k.top,0);k.top+=S,k.bottom+=Math.max(f.bottom-k.bottom,0);var D=n-k.top-k.bottom,C=e-k.left-k.right;C===x&&D===_||(ut.each(g,(function(t){t.height=D})),ut.each(m,(function(t){t.fullWidth||(t.width=C)})),_=D,x=C);var P=a+M,T=o+S;ut.each(l.concat(d),I),P+=x,T+=_,ut.each(u,I),ut.each(h,I),t.chartArea={left:k.left,top:k.top,right:k.left+x,bottom:k.top+_},ut.each(c,(function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(x,_)}))}function O(t){var e=ut.findNextWhere(w,(function(e){return e.box===t}));if(e)if(e.horizontal){var n={left:Math.max(k.left,f.left),right:Math.max(k.right,f.right),top:0,bottom:0};t.update(t.fullWidth?v:x,y/2,n)}else t.update(e.width,_)}function I(t){t.isHorizontal()?(t.left=t.fullWidth?a:k.left,t.right=t.fullWidth?e-r:k.left+x,t.top=T,t.bottom=T+t.height,T=t.bottom):(t.left=P,t.right=P+t.width,t.top=k.top,t.bottom=k.top+_,P=t.right)}}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var ye,be=(ye=Object.freeze({default:"/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"}))&&ye.default||ye,xe=["animationstart","webkitAnimationStart"],_e={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function ke(t,e){var n=ut.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var we=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(n){}return t}()&&{passive:!0};function Me(t,e,n){t.addEventListener(e,n,we)}function Se(t,e,n){t.removeEventListener(e,n,we)}function De(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ce(t){var e=document.createElement("div");return e.className=t||"",e}var Pe={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){this._loaded||(this._loaded=!0,this.disableCSSInjection||function(t,e){var n=t._style||document.createElement("style");t._style||(t._style=n,e="/* Chart.js */\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}(this,be))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),n&&n.canvas===t?(function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t.$chartjs={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=ke(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=ke(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e.$chartjs){var n=e.$chartjs.initial;["height","width"].forEach((function(t){var i=n[t];ut.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),ut.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e.$chartjs}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n.$chartjs||(n.$chartjs={});Me(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=_e[t.type]||t.type,i=ut.getRelativePosition(t,e);return De(n,e,i.x,i.y,t)}(e,t))})}else!function(t,e,n){var i,a,r,o,s=t.$chartjs||(t.$chartjs={}),l=s.resizer=function(t){var e=Ce("chartjs-size-monitor"),n=Ce("chartjs-size-monitor-expand"),i=Ce("chartjs-size-monitor-shrink");n.appendChild(Ce()),i.appendChild(Ce()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Me(n,"scroll",a.bind(n,"expand")),Me(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(De("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(De("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,ut.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t.$chartjs||(t.$chartjs={}),i=n.renderProxy=function(t){"chartjs-render-animation"===t.animationName&&e()};ut.each(xe,(function(e){Me(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add("chartjs-render-monitor")}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}(i,n,t)},removeEventListener:function(t,e,n){var i,a,r,o=t.canvas;if("resize"!==e){var s=((n.$chartjs||{}).proxies||{})[t.id+"_"+e];s&&Se(o,e,s)}else r=(a=(i=o).$chartjs||{}).resizer,delete a.resizer,function(t){var e=t.$chartjs||{},n=e.renderProxy;n&&(ut.each(xe,(function(e){Se(t,e,n)})),delete e.renderProxy),t.classList.remove("chartjs-render-monitor")}(i),r&&r.parentNode&&r.parentNode.removeChild(r)}};ut.addEvent=Me,ut.removeEvent=Se;var Te=ut.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Pe._enabled?Pe:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}});ot._set("global",{plugins:{}});var Oe={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=ut.clone(ot.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Ie={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=ut.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?ut.merge({},[ot.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=ut.extend(this.defaults[t],e))},addScalesToLayout:function(t){ut.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ve.addBox(t,e)}))}},Ae=ut.valueOrDefault;ot._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ut.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:ut.noop,beforeBody:ut.noop,beforeLabel:ut.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),ut.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ut.noop,afterBody:ut.noop,beforeFooter:ut.noop,footer:ut.noop,afterFooter:ut.noop}}});var Fe={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=ut.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Re(t,e){return e&&(ut.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Le(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function We(t){var e=ot.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Ae(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Ae(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Ae(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Ae(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Ae(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Ae(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Ae(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Ae(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Ae(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ye(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Ne(t){return Re([],Le(t))}var ze=ft.extend({initialize:function(){this._model=We(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Re(o,Le(i)),o=Re(o,Le(a)),Re(o,Le(r))},getBeforeBody:function(){return Ne(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return ut.each(t,(function(t){var r={before:[],lines:[],after:[]};Re(r.before,Le(i.beforeLabel.call(n,t,e))),Re(r.lines,i.label.call(n,t,e)),Re(r.after,Le(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return Ne(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Re(r,Le(n)),r=Re(r,Le(i)),Re(r,Le(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=We(c),m=h._active,p=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},y={x:f.x,y:f.y},b={width:f.width,height:f.height},x={x:f.caretX,y:f.caretY};if(m.length){g.opacity=1;var _=[],k=[];x=Fe[c.position].call(h,m,h._eventPosition);var w=[];for(e=0,n=m.length;e<n;++e)w.push((a=void 0,r=void 0,l=void 0,u=void 0,d=void 0,a=(i=m[e])._xScale,r=i._yScale||i._scale,o=i._index,u=(l=i._chart.getDatasetMeta(s=i._datasetIndex).controller)._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,p)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,p)}))),ut.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,p),g.beforeBody=h.getBeforeBody(w,p),g.body=h.getBody(w,p),g.afterBody=h.getAfterBody(w,p),g.footer=h.getFooter(w,p),g.x=x.x,g.y=x.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,b=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0),s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=(o+=e.beforeBody.length+e.afterBody.length)*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=ut.fontString(u,e._titleFontStyle,e._titleFontFamily),ut.each(e.title,f),n.font=ut.fontString(d,e._bodyFontStyle,e._bodyFontFamily),ut.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,ut.each(r,(function(t){ut.each(t.before,f),ut.each(t.lines,f),ut.each(t.after,f)})),c=0,n.font=ut.fontString(h,e._footerFontStyle,e._footerFontFamily),ut.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),y=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretPadding,s=n.xAlign,l=n.yAlign,u=t.caretSize+o,d=t.cornerRadius+o;return"right"===s?a-=e.width:"center"===s&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===l?r+=u:r-="bottom"===l?e.height+u:e.height/2,"center"===l?"left"===s?a+=u:"right"===s&&(a-=u):"left"===s?a-=d:"right"===s&&(a+=d),{x:a,y:r}}(g,b,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,b),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=y.x,g.y=y.y,g.width=b.width,g.height=b.height,g.caretX=x.x,g.caretY=x.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this.getCaretPosition(t,e,this._view);n.lineTo(i.x1,i.y1),n.lineTo(i.x2,i.y2),n.lineTo(i.x3,i.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,m=e.width,p=e.height;if("center"===c)s=g+p/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+m)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+m-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+p)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i=e.title;if(i.length){t.x=Ye(e,e._titleAlign),n.textAlign=e._titleAlign,n.textBaseline="top";var a,r,o=e.titleFontSize,s=e.titleSpacing;for(n.fillStyle=e.titleFontColor,n.font=ut.fontString(o,e._titleFontStyle,e._titleFontFamily),a=0,r=i.length;a<r;++a)n.fillText(i[a],t.x,t.y),t.y+=o+s,a+1===i.length&&(t.y+=e.titleMarginBottom-s)}},drawBody:function(t,e,n){var i,a=e.bodyFontSize,r=e.bodySpacing,o=e._bodyAlign,s=e.body,l=e.displayColors,u=e.labelColors,d=0,h=l?Ye(e,"left"):0;n.textAlign=o,n.textBaseline="top",n.font=ut.fontString(a,e._bodyFontStyle,e._bodyFontFamily),t.x=Ye(e,o);var c=function(e){n.fillText(e,t.x+d,t.y),t.y+=a+r};n.fillStyle=e.bodyFontColor,ut.each(e.beforeBody,c),d=l&&"right"!==o?"center"===o?a/2+1:a+2:0,ut.each(s,(function(r,o){n.fillStyle=i=e.labelTextColors[o],ut.each(r.before,c),ut.each(r.lines,(function(r){l&&(n.fillStyle=e.legendColorBackground,n.fillRect(h,t.y,a,a),n.lineWidth=1,n.strokeStyle=u[o].borderColor,n.strokeRect(h,t.y,a,a),n.fillStyle=u[o].backgroundColor,n.fillRect(h+1,t.y+1,a-2,a-2),n.fillStyle=i),c(r)})),ut.each(r.after,c)})),d=0,ut.each(e.afterBody,c),t.y-=r},drawFooter:function(t,e,n){var i=e.footer;i.length&&(t.x=Ye(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=e._footerAlign,n.textBaseline="top",n.fillStyle=e.footerFontColor,n.font=ut.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),ut.each(i,(function(i){n.fillText(i,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing})))},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity;this._options.enabled&&(e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length)&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],n._active="mouseout"===t.type?[]:n._chart.getElementsAtEventForMode(t,i.mode,i),(e=!ut.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}});ze.positioners=Fe;var Ve=ut.valueOrDefault;function He(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)r=Ve((o=n[t][a]).type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),ut.merge(e[t][a],!e[t][a].type||o.type&&o.type!==e[t][a].type?[Ie.getScaleDefaults(r),o]:o)}else ut._merger(t,e,n,i)}})}function Ee(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||{},r=n[t];"scales"===t?e[t]=He(a,r):"scale"===t?e[t]=ut.merge(a,[Ie.getScaleDefaults(r.type),r]):ut._merger(t,e,n,i)}})}function Be(t){var e=t.options;ut.each(t.scales,(function(e){ve.removeBox(t,e)})),e=Ee(ot.global,ot[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function je(t){return"top"===t||"bottom"===t}ot._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ue=function(t,e){return this.construct(t,e),this};ut.extend(Ue.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ee(ot.global,ot[t.type],t.options||{}),t}(e);var i=Te.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=ut.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n.chart=n,n.controller=n,Ue.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Oe.notify(t,"beforeInit"),ut.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),Oe.notify(t,"afterInit"),t},clear:function(){return ut.canvas.clear(this),this},stop:function(){return pt.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(ut.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:ut.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",ut.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Oe.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;ut.each(e.xAxes,(function(t,e){t.id=t.id||"x-axis-"+e})),ut.each(e.yAxes,(function(t,e){t.id=t.id||"y-axis-"+e})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ut.each(i,(function(e){var i=e.options,r=i.id,o=Ve(i.type,e.dtype);je(i.position)!==je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Ie.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),ut.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Ie.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return ut.each(t.data.datasets,(function(n,i){var a=t.getDatasetMeta(i),r=n.type||t.config.type;if(a.type&&a.type!==r&&(t.destroyDatasetMeta(i),a=t.getDatasetMeta(i)),a.type=r,a.controller)a.controller.updateIndex(i),a.controller.linkScales();else{var o=oe[a.type];if(void 0===o)throw new Error('"'+a.type+'" is not a chart type.');a.controller=new o(t,i),e.push(a.controller)}}),t),e},resetElements:function(){var t=this;ut.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Be(e),Oe._invalidate(e),!1!==Oe.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var n=e.buildOrUpdateControllers();ut.each(e.data.datasets,(function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()}),e),e.updateLayout(),e.options.animation&&e.options.animation.duration&&ut.each(n,(function(t){t.reset()})),e.updateDatasets(),e.tooltip.initialize(),e.lastActive=[],Oe.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){!1!==Oe.notify(this,"beforeLayout")&&(ve.update(this,this.width,this.height),Oe.notify(this,"afterScaleUpdate"),Oe.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==Oe.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Oe.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Oe.notify(this,"beforeDatasetUpdate",[n])&&(e.controller.update(),Oe.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ve(t.duration,n&&n.duration),a=t.lazy;if(!1!==Oe.notify(e,"beforeRender")){var r=function(t){Oe.notify(e,"afterRender"),ut.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new mt({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=e.currentStep,i=n/e.numSteps;t.draw((0,ut.easing.effects[e.easing])(i),i,n)},onAnimationProgress:n.onProgress,onAnimationComplete:r});pt.addAnimation(e,o,i,a)}else e.draw(),r(new mt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),ut.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==Oe.notify(e,"beforeDraw",[t])&&(ut.each(e.boxes,(function(t){t.draw(e.chartArea)}),e),e.drawDatasets(t),e._drawTooltip(t),Oe.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==Oe.notify(e,"beforeDatasetsDraw",[t])){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);Oe.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this.getDatasetMeta(t),i={meta:n,index:t,easingValue:e};!1!==Oe.notify(this,"beforeDatasetDraw",[i])&&(n.controller.draw(e),Oe.notify(this,"afterDatasetDraw",[i]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Oe.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Oe.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return fe.modes.single(this,t)},getElementsAtEvent:function(t){return fe.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return fe.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=fe.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return fe.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),ut.canvas.clear(n),Te.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Oe.notify(n,"destroy"),delete Ue.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new ze({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};ut.each(t.options.events,(function(i){Te.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Te.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,ut.each(e,(function(e,n){Te.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"setHoverStyle":"removeHoverStyle";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Oe.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Oe.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],n.active="mouseout"===t.type?[]:n.getElementsAtEventForMode(t,a.mode,a),ut.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!ut.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),Ue.instances={};var Ge=Ue;function qe(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Ze(t){this.options=t||{}}Ue.Controller=Ue,Ue.types={},ut.configMerge=Ee,ut.scaleMerge=He,ut.extend(Ze.prototype,{formats:qe,parse:qe,format:qe,add:qe,diff:qe,startOf:qe,endOf:qe,_create:function(t){return t}}),Ze.override=function(t){ut.extend(Ze.prototype,t)};var $e={_date:Ze},Xe={formatters:{values:function(t){return ut.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=ut.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=ut.log10(Math.abs(t));r=t.toExponential(Math.floor(o)-Math.floor(a))}else{var s=-1*Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toFixed(s)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(ut.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},Je=ut.valueOrDefault,Ke=ut.valueAtIndexOrDefault;function Qe(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label);return i}function tn(t,e,n){return ut.isArray(e)?ut.longestText(t,n,e):t.measureText(e).width}ot._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Xe.formatters.values,minor:{},major:{}}});var en=ft.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){ut.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l,u=this;for(u.beforeUpdate(),u.maxWidth=t,u.maxHeight=e,u.margins=ut.extend({left:0,right:0,top:0,bottom:0},n),u._maxLabelLines=0,u.longestLabelWidth=0,u.longestTextCache=u.longestTextCache||{},u.beforeSetDimensions(),u.setDimensions(),u.afterSetDimensions(),u.beforeDataLimits(),u.determineDataLimits(),u.afterDataLimits(),u.beforeBuildTicks(),s=u.buildTicks()||[],s=u.afterBuildTicks(s)||s,u.beforeTickToLabelConversion(),r=u.convertTicksToLabels(s)||u.ticks,u.afterTickToLabelConversion(),u.ticks=r,i=0,a=r.length;i<a;++i)o=r[i],(l=s[i])?l.label=o:s.push(l={label:o,major:!1});return u._ticks=s,u.beforeCalculateTickRotation(),u.calculateTickRotation(),u.afterCalculateTickRotation(),u.beforeFit(),u.fit(),u.afterFit(),u.afterUpdate(),u.minSize},afterUpdate:function(){ut.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ut.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){ut.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ut.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ut.noop,afterDataLimits:function(){ut.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ut.callback(this.options.beforeBuildTicks,[this])},buildTicks:ut.noop,afterBuildTicks:function(t){var e=this;return ut.isArray(t)&&t.length?ut.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=ut.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){ut.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){ut.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ut.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,n=t.options.ticks,i=Qe(t._ticks),a=ut.options._parseFont(n);e.font=a.string;var r=n.minRotation||0;if(i.length&&t.options.display&&t.isHorizontal())for(var o,s=ut.longestText(e,a.string,i,t.longestTextCache),l=s,u=t.getPixelForTick(1)-t.getPixelForTick(0)-6;l>u&&r<n.maxRotation;){var d=ut.toRadians(r);if(o=Math.cos(d),Math.sin(d)*s>t.maxHeight){r--;break}r++,l=o*s}t.labelRotation=r},afterCalculateTickRotation:function(){ut.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ut.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=Qe(t._ticks),i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l=i.position,u=t.isHorizontal(),d=ut.options._parseFont,h=d(a),c=i.gridLines.tickMarkLength;if(e.width=u?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:s&&o.drawTicks?c:0,e.height=u?s&&o.drawTicks?c:0:t.maxHeight,r.display&&s){var f=d(r),g=ut.options.toPadding(r.padding),m=f.lineHeight+g.height;u?e.height+=m:e.width+=m}if(a.display&&s){var p=ut.longestText(t.ctx,h.string,n,t.longestTextCache),v=ut.numberOfLabelLines(n),y=.5*h.size,b=t.options.ticks.padding;if(t._maxLabelLines=v,t.longestLabelWidth=p,u){var x=ut.toRadians(t.labelRotation),_=Math.cos(x),k=Math.sin(x);e.height=Math.min(t.maxHeight,e.height+(k*p+h.lineHeight*v+y)+b),t.ctx.font=h.string;var w,M,S=tn(t.ctx,n[0],h.string),D=tn(t.ctx,n[n.length-1],h.string),C=t.getPixelForTick(0)-t.left,P=t.right-t.getPixelForTick(n.length-1);0!==t.labelRotation?(w="bottom"===l?_*S:_*y,M="bottom"===l?_*y:_*D):(w=S/2,M=D/2),t.paddingLeft=Math.max(w-C,0)+3,t.paddingRight=Math.max(M-P,0)+3}else a.mirror?p=0:p+=b+y,e.width=Math.min(t.maxWidth,e.width+p),t.paddingTop=h.size/2,t.paddingBottom=h.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){ut.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ut.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:ut.noop,getPixelForValue:ut.noop,getValueForPixel:ut.noop,getPixelForTick:function(t){var e=this,n=e.options.offset;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),a=i*t+e.paddingLeft;return n&&(a+=i/2),e.left+a+(e.isFullWidth()?e.margins.left:0)}return e.top+t*((e.height-(e.paddingTop+e.paddingBottom))/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;return e.isHorizontal()?e.left+((e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft)+(e.isFullWidth()?e.margins.left:0):e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i=this,a=i.isHorizontal(),r=t.length,o=!1,s=i.options.ticks.minor.maxTicksLimit,l=i._tickSize()*(r-1),u=a?i.width-(i.paddingLeft+i.paddingRight):i.height-(i.paddingTop+i.PaddingBottom),d=[];for(l>u&&(o=1+Math.floor(l/u)),r>s&&(o=Math.max(o,1+Math.floor(r/s))),e=0;e<r;e++)n=t[e],o>1&&e%o>0&&delete n.label,d.push(n);return d},_tickSize:function(){var t=this,e=t.isHorizontal(),n=t.options.ticks.minor,i=ut.toRadians(t.labelRotation),a=Math.abs(Math.cos(i)),r=Math.abs(Math.sin(i)),o=n.autoSkipPadding||0,s=t.longestLabelWidth+o||0,l=ut.options._parseFont(n),u=t._maxLabelLines*l.lineHeight+o||0;return e?u*a>s*r?s/a:u/r:u*r<s*a?u/a:s/r},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,n=e.options;if(e._isVisible()){var i,a,r,o=e.chart,s=e.ctx,l=ot.global.defaultFontColor,u=n.ticks.minor,d=n.ticks.major||u,h=n.gridLines,c=n.scaleLabel,f=n.position,g=0!==e.labelRotation,m=u.mirror,p=e.isHorizontal(),v=ut.options._parseFont,y=u.display&&u.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),b=Je(u.fontColor,l),x=v(u),_=x.lineHeight,k=Je(d.fontColor,l),w=v(d),M=u.padding,S=u.labelOffset,D=h.drawTicks?h.tickMarkLength:0,C=Je(c.fontColor,l),P=v(c),T=ut.options.toPadding(c.padding),O=ut.toRadians(e.labelRotation),I=[],A=h.drawBorder?Ke(h.lineWidth,0,0):0,F=ut._alignPixel;if("top"===f?(i=F(o,e.bottom,A),a=e.bottom-D,r=i-A/2):"bottom"===f?(i=F(o,e.top,A),a=i+A/2,r=e.top+D):"left"===f?(i=F(o,e.right,A),a=e.right-D,r=i-A/2):(i=F(o,e.left,A),a=i+A/2,r=e.left+D),ut.each(y,(function(i,s){if(!ut.isNullOrUndef(i.label)){var l,u,d,c,v,y,b,x,k,w,C,P,T,R,L,W,Y=i.label;s===e.zeroLineIndex&&n.offset===h.offsetGridLines?(l=h.zeroLineWidth,u=h.zeroLineColor,d=h.zeroLineBorderDash||[],c=h.zeroLineBorderDashOffset||0):(l=Ke(h.lineWidth,s),u=Ke(h.color,s),d=h.borderDash||[],c=h.borderDashOffset||0);var N=ut.isArray(Y)?Y.length:1,z=function(t,e,n){var i=t.getPixelForTick(e);return n&&(1===t.getTicks().length?i-=t.isHorizontal()?Math.max(i-t.left,t.right-i):Math.max(i-t.top,t.bottom-i):i-=0===e?(t.getPixelForTick(1)-i)/2:(i-t.getPixelForTick(e-1))/2),i}(e,s,h.offsetGridLines);if(p){var V=D+M;z<e.left-1e-7&&(u="rgba(0,0,0,0)"),v=b=k=C=F(o,z,l),y=a,x=r,T=e.getPixelForTick(s)+S,"top"===f?(w=F(o,t.top,A)+A/2,P=t.bottom,L=((g?1:.5)-N)*_,W=g?"left":"center",R=e.bottom-V):(w=t.top,P=F(o,t.bottom,A)-A/2,L=(g?0:.5)*_,W=g?"right":"center",R=e.top+V)}else{var H=(m?0:D)+M;z<e.top-1e-7&&(u="rgba(0,0,0,0)"),v=a,b=r,y=x=w=P=F(o,z,l),R=e.getPixelForTick(s)+S,L=(1-N)*_/2,"left"===f?(k=F(o,t.left,A)+A/2,C=t.right,W=m?"left":"right",T=e.right-H):(k=t.left,C=F(o,t.right,A)-A/2,W=m?"right":"left",T=e.left+H)}I.push({tx1:v,ty1:y,tx2:b,ty2:x,x1:k,y1:w,x2:C,y2:P,labelX:T,labelY:R,glWidth:l,glColor:u,glBorderDash:d,glBorderDashOffset:c,rotation:-1*O,label:Y,major:i.major,textOffset:L,textAlign:W})}})),ut.each(I,(function(t){var e=t.glWidth,n=t.glColor;if(h.display&&e&&n&&(s.save(),s.lineWidth=e,s.strokeStyle=n,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),h.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),u.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?w.string:x.string,s.fillStyle=t.major?k:b,s.textBaseline="middle",s.textAlign=t.textAlign;var i=t.label,a=t.textOffset;if(ut.isArray(i))for(var r=0;r<i.length;++r)s.fillText(""+i[r],0,a),a+=_;else s.fillText(i,0,a);s.restore()}})),c.display){var R,L,W=0,Y=P.lineHeight/2;if(p)R=e.left+(e.right-e.left)/2,L="bottom"===f?e.bottom-Y-T.bottom:e.top+Y+T.top;else{var N="left"===f;R=N?e.left+Y+T.top:e.right-Y-T.top,L=e.top+(e.bottom-e.top)/2,W=N?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(R,L),s.rotate(W),s.textAlign="center",s.textBaseline="middle",s.fillStyle=C,s.font=P.string,s.fillText(c.labelString,0,0),s.restore()}if(A){var z,V,H,E,B=A,j=Ke(h.lineWidth,y.length-1,0);p?(z=F(o,e.left,B)-B/2,V=F(o,e.right,j)+j/2,H=E=i):(H=F(o,e.top,B)-B/2,E=F(o,e.bottom,j)+j/2,z=V=i),s.lineWidth=A,s.strokeStyle=Ke(h.color,0),s.beginPath(),s.moveTo(z,H),s.lineTo(V,E),s.stroke()}}}}),nn=en.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,n=e.getLabels();e.minIndex=0,e.maxIndex=n.length-1,void 0!==e.options.ticks.min&&(t=n.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=n.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=n[e.minIndex],e.max=n[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart;return i.getDatasetMeta(e).controller._getValueScaleId()===n.id?n.getRightValue(i.data.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var n,i=this,a=i.options.offset,r=Math.max(i.maxIndex+1-i.minIndex-(a?0:1),1);if(null!=t&&(n=i.isHorizontal()?t.x:t.y),void 0!==n||void 0!==t&&isNaN(e)){var o=i.getLabels().indexOf(t=n||t);e=-1!==o?o:e}if(i.isHorizontal()){var s=i.width/r,l=s*(e-i.minIndex);return a&&(l+=s/2),i.left+l}var u=i.height/r,d=u*(e-i.minIndex);return a&&(d+=u/2),i.top+d},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,n=e.options.offset,i=Math.max(e._ticks.length-(n?0:1),1),a=e.isHorizontal(),r=(a?e.width:e.height)/i;return t-=a?e.left:e.top,n&&(t-=r/2),(t<=0?0:Math.round(t/r))+e.minIndex},getBasePixel:function(){return this.bottom}});nn._defaults={position:"bottom"};var an=ut.isNullOrUndef,rn=en.extend({getRightValue:function(t){return"string"==typeof t?+t:en.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=ut.sign(t.min),i=ut.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(t.min=null===t.min?e.suggestedMin:Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(t.max=null===t.max?e.suggestedMax:Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ut.noop,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:ut.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,m=ut.niceNum((g-f)/u/l)*l;if(m<1e-14&&an(d)&&an(h))return[f,g];(r=Math.ceil(g/m)-Math.floor(f/m))>u&&(m=ut.niceNum(r*m/u/l)*l),s||an(c)?n=Math.pow(10,ut._decimalPlaces(m)):(n=Math.pow(10,c),m=Math.ceil(m*n)/n),i=Math.floor(f/m)*m,a=Math.ceil(g/m)*m,s&&(!an(d)&&ut.almostWhole(d/m,m/1e3)&&(i=d),!an(h)&&ut.almostWhole(h/m,m/1e3)&&(a=h)),r=ut.almostEquals(r=(a-i)/m,Math.round(r),m/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(an(d)?i:d);for(var p=1;p<r;++p)o.push(Math.round((i+p*m)*n)/n);return o.push(an(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=ut.max(a),t.min=ut.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),en.prototype.convertTicksToLabels.call(t)}}),on={position:"left",ticks:{callback:Xe.formatters.linear}},sn=rn.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,i=n.data.datasets,a=t.isHorizontal();function r(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var o=e.stacked;if(void 0===o&&ut.each(i,(function(t,e){if(!o){var i=n.getDatasetMeta(e);n.isDatasetVisible(e)&&r(i)&&void 0!==i.stack&&(o=!0)}})),e.stacked||o){var s={};ut.each(i,(function(i,a){var o=n.getDatasetMeta(a),l=[o.type,void 0===e.stacked&&void 0===o.stack?a:"",o.stack].join(".");void 0===s[l]&&(s[l]={positiveValues:[],negativeValues:[]});var u=s[l].positiveValues,d=s[l].negativeValues;n.isDatasetVisible(a)&&r(o)&&ut.each(i.data,(function(n,i){var a=+t.getRightValue(n);isNaN(a)||o.data[i].hidden||(u[i]=u[i]||0,d[i]=d[i]||0,e.relativePoints?u[i]=100:a<0?d[i]+=a:u[i]+=a)}))})),ut.each(s,(function(e){var n=e.positiveValues.concat(e.negativeValues),i=ut.min(n),a=ut.max(n);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?a:Math.max(t.max,a)}))}else ut.each(i,(function(e,i){var a=n.getDatasetMeta(i);n.isDatasetVisible(i)&&r(a)&&ut.each(e.data,(function(e,n){var i=+t.getRightValue(e);isNaN(i)||a.data[n].hidden||((null===t.min||i<t.min)&&(t.min=i),(null===t.max||i>t.max)&&(t.max=i))}))}));t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=ut.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,n=e.start,i=+e.getRightValue(t),a=e.end-n;return e.isHorizontal()?e.left+e.width/a*(i-n):e.bottom-e.height/a*(i-n)},getValueForPixel:function(t){var e=this,n=e.isHorizontal();return e.start+(n?t-e.left:e.bottom-t)/(n?e.width:e.height)*(e.end-e.start)},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});sn._defaults=on;var ln=ut.valueOrDefault,un={position:"left",ticks:{callback:Xe.formatters.logarithmic}};function dn(t,e){return ut.isFinite(t)&&t>=0?t:e}var hn=en.extend({determineDataLimits:function(){var t=this,e=t.options,n=t.chart,i=n.data.datasets,a=t.isHorizontal();function r(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var o=e.stacked;if(void 0===o&&ut.each(i,(function(t,e){if(!o){var i=n.getDatasetMeta(e);n.isDatasetVisible(e)&&r(i)&&void 0!==i.stack&&(o=!0)}})),e.stacked||o){var s={};ut.each(i,(function(i,a){var o=n.getDatasetMeta(a),l=[o.type,void 0===e.stacked&&void 0===o.stack?a:"",o.stack].join(".");n.isDatasetVisible(a)&&r(o)&&(void 0===s[l]&&(s[l]=[]),ut.each(i.data,(function(e,n){var i=s[l],a=+t.getRightValue(e);isNaN(a)||o.data[n].hidden||a<0||(i[n]=i[n]||0,i[n]+=a)})))})),ut.each(s,(function(e){if(e.length>0){var n=ut.min(e),i=ut.max(e);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?i:Math.max(t.max,i)}}))}else ut.each(i,(function(e,i){var a=n.getDatasetMeta(i);n.isDatasetVisible(i)&&r(a)&&ut.each(e.data,(function(e,n){var i=+t.getRightValue(e);isNaN(i)||a.data[n].hidden||i<0||((null===t.min||i<t.min)&&(t.min=i),(null===t.max||i>t.max)&&(t.max=i),0!==i&&(null===t.minNotZero||i<t.minNotZero)&&(t.minNotZero=i))}))}));this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=dn(e.min,t.min),t.max=dn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(ut.log10(t.min))-1),t.max=Math.pow(10,Math.floor(ut.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(ut.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(ut.log10(t.min))+1):10),null===t.minNotZero&&(t.minNotZero=t.min>0?t.min:t.max<1?Math.pow(10,Math.floor(ut.log10(t.max))):1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:dn(e.min),max:dn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=ln(t.min,Math.pow(10,Math.floor(ut.log10(e.min)))),o=Math.floor(ut.log10(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(ut.log10(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(ut.log10(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10==++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=ln(t.max,r);return a.push(u),a}(i,t);t.max=ut.max(a),t.min=ut.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),en.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(ut.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,n,i,a,r,o=this,s=o.options.ticks,l=s.reverse,u=ut.log10,d=o._getFirstTickValue(o.minNotZero),h=0;return t=+o.getRightValue(t),l?(i=o.end,a=o.start,r=-1):(i=o.start,a=o.end,r=1),o.isHorizontal()?(e=o.width,n=l?o.right:o.left):(e=o.height,r*=-1,n=l?o.top:o.bottom),t!==i&&(0===i&&(e-=h=ln(s.fontSize,ot.global.defaultFontSize),i=d),0!==t&&(h+=e/(u(a)-u(i))*(u(t)-u(i))),n+=r*h),n},getValueForPixel:function(t){var e,n,i,a,r=this,o=r.options.ticks,s=o.reverse,l=ut.log10,u=r._getFirstTickValue(r.minNotZero);if(s?(n=r.end,i=r.start):(n=r.start,i=r.end),r.isHorizontal()?(e=r.width,a=s?r.right-t:t-r.left):(e=r.height,a=s?t-r.top:r.bottom-t),a!==n){if(0===n){var d=ln(o.fontSize,ot.global.defaultFontSize);a-=d,e-=d,n=u}a*=l(i)-l(n),a/=e,a=Math.pow(10,l(n)+a)}return a}});hn._defaults=un;var cn=ut.valueOrDefault,fn=ut.valueAtIndexOrDefault,gn=ut.options.resolve,mn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Xe.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function pn(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function vn(t){var e=t.ticks;return e.display&&t.display?cn(e.fontSize,ot.global.defaultFontSize)+2*e.backdropPaddingY:0}function yn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function bn(t){return 0===t||180===t?"center":t<180?"left":"right"}function xn(t,e,n,i){var a,r,o=n.y+i/2;if(ut.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function _n(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function kn(t){return ut.isNumber(t)?t:0}var wn=rn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=vn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;ut.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);ut.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/vn(this.options))},convertTicksToLabels:function(){var t=this;rn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=ut.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=pn(t);for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,n=ut.isArray(u=t.pointLabels[e]||"")?{w:ut.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=ut.toDegrees(h)%360,f=yn(c,i.x,n.w,0,180),g=yn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=kn(a),r=kn(r),o=kn(o),s=kn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=n+a.drawingArea,o=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((t+a.drawingArea+(a.width-e-a.drawingArea))/2+a.left),a.yCenter=Math.floor((r+o)/2+a.top+a.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/pn(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks;if(e.display){var a=t.ctx,r=this.getIndexAngle(0),o=ut.options._parseFont(i);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,n=t.options,i=n.angleLines,a=n.gridLines,r=n.pointLabels,o=cn(i.lineWidth,a.lineWidth),s=cn(i.color,a.color),l=vn(n);e.save(),e.lineWidth=o,e.strokeStyle=s,e.setLineDash&&(e.setLineDash(gn([i.borderDash,a.borderDash,[]])),e.lineDashOffset=gn([i.borderDashOffset,a.borderDashOffset,0]));var u=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),d=ut.options._parseFont(r);e.font=d.string,e.textBaseline="middle";for(var h=pn(t)-1;h>=0;h--){if(i.display&&o&&s){var c=t.getPointPosition(h,u);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(c.x,c.y),e.stroke()}if(r.display){var f=t.getPointPosition(h,u+(0===h?l/2:0)+5),g=fn(r.fontColor,h,ot.global.defaultFontColor);e.fillStyle=g;var m=t.getIndexAngle(h),p=ut.toDegrees(m);e.textAlign=bn(p),_n(p,t._pointLabelSizes[h],f),xn(e,t.pointLabels[h]||"",f,d.lineHeight)}}e.restore()}(t),ut.each(t.ticks,(function(e,s){if(s>0||i.reverse){var l=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(n.display&&0!==s&&function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=pn(t),l=fn(e.color,i-1),u=fn(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(t,n,l,s),i.display){var u=cn(i.fontColor,ot.global.defaultFontColor);if(a.font=o.string,a.save(),a.translate(t.xCenter,t.yCenter),a.rotate(r),i.showLabelBackdrop){var d=a.measureText(e).width;a.fillStyle=i.backdropColor,a.fillRect(-d/2-i.backdropPaddingX,-l-o.size/2-i.backdropPaddingY,d+2*i.backdropPaddingX,o.size+2*i.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=u,a.fillText(e,0,-l),a.restore()}}}))}}});wn._defaults=mn;var Mn=ut.valueOrDefault,Sn=Number.MIN_SAFE_INTEGER||-9007199254740991,Dn=Number.MAX_SAFE_INTEGER||9007199254740991,Cn={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},Pn=Object.keys(Cn);function Tn(t,e){return t-e}function On(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}function In(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(r=t[i=o+s>>1],!(a=t[i-1]||null))return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e];return r[i]+(o[i]-r[i])*(s?(n-r[e])/s:0)}function An(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),ut.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),ut.isFinite(o)||(o=n.parse(o))),o)}function Fn(t,e){if(ut.isNullOrUndef(e))return null;var n=t.options.time,i=An(t,t.getRightValue(e));return null===i||n.round&&(i=+t._adapter.startOf(i,n.round)),i}function Rn(t){for(var e=Pn.indexOf(t)+1,n=Pn.length;e<n;++e)if(Cn[Pn[e]].common)return Pn[e]}var Ln=en.extend({initialize:function(){this.mergeTicksOptions(),en.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new $e._date(e.adapters.date);return n.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),ut.mergeIf(n.displayFormats,i.formats()),en.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),en.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.chart,l=o._adapter,u=o.options.time,d=u.unit||"day",h=Dn,c=Sn,f=[],g=[],m=[],p=s.data.labels||[];for(t=0,n=p.length;t<n;++t)m.push(Fn(o,p[t]));for(t=0,n=(s.data.datasets||[]).length;t<n;++t)if(s.isDatasetVisible(t))if(ut.isObject((a=s.data.datasets[t].data)[0]))for(g[t]=[],e=0,i=a.length;e<i;++e)r=Fn(o,a[e]),f.push(r),g[t][e]=r;else{for(e=0,i=m.length;e<i;++e)f.push(m[e]);g[t]=m.slice(0)}else g[t]=[];m.length&&(m=On(m).sort(Tn),h=Math.min(h,m[0]),c=Math.max(c,m[m.length-1])),f.length&&(f=On(f).sort(Tn),h=Math.min(h,f[0]),c=Math.max(c,f[f.length-1])),h=Fn(o,u.min)||h,c=Fn(o,u.max)||c,h=h===Dn?+l.startOf(Date.now(),d):h,c=c===Sn?+l.endOf(Date.now(),d)+1:c,o.min=Math.min(h,c),o.max=Math.max(h+1,c),o._horizontal=o.isHorizontal(),o._table=[],o._timestamps={data:f,datasets:g,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.time,l=[],u=[];switch(o.ticks.source){case"data":l=i._timestamps.data;break;case"labels":l=i._timestamps.labels;break;case"auto":default:l=function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||function(t,e,n,i){var a,r,o=Pn.length;for(a=Pn.indexOf(t);a<o-1;++a)if((r=Cn[Pn[a]]).common&&Math.ceil((n-e)/((r.steps?r.steps[r.steps.length-1]:Dn)*r.size))<=i)return Pn[a];return Pn[o-1]}(s.minUnit,e,n,i),u=Rn(l),d=Mn(s.stepSize,s.unitStepSize),h="week"===l&&s.isoWeekday,c=o.ticks.major.enabled,f=Cn[l],g=e,m=n,p=[];for(d||(d=function(t,e,n,i){var a,r,o,s=e-t,l=Cn[n],u=l.size,d=l.steps;if(!d)return Math.ceil(s/(i*u));for(a=0,r=d.length;a<r&&(o=d[a],!(Math.ceil(s/(u*o))<=i));++a);return o}(e,n,l,i)),h&&(g=+r.startOf(g,"isoWeek",h),m=+r.startOf(m,"isoWeek",h)),g=+r.startOf(g,h?"day":l),(m=+r.startOf(m,h?"day":l))<n&&(m=+r.add(m,1,l)),a=g,c&&u&&!h&&!s.round&&(a=+r.startOf(a,u),a=+r.add(a,~~((g-a)/(f.size*d))*d,l));a<m;a=+r.add(a,d,l))p.push(+a);return p.push(+a),p}(i,a,r,i.getLabelCapacity(a))}for("ticks"===o.bounds&&l.length&&(a=l[0],r=l[l.length-1]),a=Fn(i,s.min)||a,r=Fn(i,s.max)||r,t=0,e=l.length;t<e;++t)(n=l[t])>=a&&n<=r&&u.push(n);return i.min=a,i.max=r,i._unit=s.unit||function(t,e,n,i,a){var r,o;for(r=Pn.length-1;r>=Pn.indexOf(n);r--)if(Cn[o=Pn[r]].common&&t._adapter.diff(a,i,o)>=e.length)return o;return Pn[n?Pn.indexOf(n):0]}(i,u,s.minUnit,i.min,i.max),i._majorUnit=Rn(i._unit),i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],s=d[a],void 0!==(o=d[a-1])&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,o.distribution),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(a.time.min||(r=In(t,"time",e[0],"pos"),s=1===e.length?1-r:(In(t,"time",e[1],"pos")-r)/2),a.time.max||(o=In(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-In(t,"time",e[e.length-2],"pos"))/2)),{start:s,end:l}}(i._table,u,0,0,o),o.ticks.reverse&&u.reverse(),function(t,e,n){var i,a,r,o,s=[];for(i=0,a=e.length;i<a;++i)r=e[i],o=!!n&&r===+t._adapter.startOf(r,n),s.push({value:r,major:o});return s}(i,u,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return ut.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(An(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(An(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=+a.startOf(t,l),h=r.ticks.major,c=h.enabled&&l&&u&&t===d,f=a.format(t,i||(c?u:s)),g=c?h:r.ticks.minor,m=Mn(g.callback,g.userCallback);return m?m(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this,n=e.options.ticks.reverse,i=e._horizontal?e.width:e.height,a=e._horizontal?n?e.right:e.left:n?e.bottom:e.top,r=In(e._table,"time",t,"pos"),o=i*(e._offsets.start+r)/(e._offsets.start+1+e._offsets.end);return n?a-o:a+o},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=Fn(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,n=e._horizontal?e.width:e.height,i=In(e._table,"pos",(n?(t-(e._horizontal?e.left:e.top))/n:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,"time");return e._adapter._create(i)},getLabelWidth:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=ut.toRadians(e.maxRotation),a=Math.cos(i),r=Math.sin(i);return n*a+Mn(e.fontSize,ot.global.defaultFontSize)*r},getLabelCapacity:function(t){var e=this,n=e.tickFormatFunction(t,0,[],e.options.time.displayFormats.millisecond),i=e.getLabelWidth(n),a=e.isHorizontal()?e.width:e.height,r=Math.floor(a/i);return r>0?r:1}});Ln._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var Wn={category:nn,linear:sn,logarithmic:hn,radialLinear:wn,time:Ln},Yn=function(t,e){return function(t,e){t.exports=function(){var e,n;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){return void 0===t}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));return i}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function h(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function c(t,e,n,i){return ke(t,e,n,i,!0).utc()}function f(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function g(t){if(null==t._isValid){var e=f(t),i=n.call(e.parsedDateParts,(function(t){return null!=t})),a=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return a;t._isValid=a}return t._isValid}function m(t){var e=c(NaN);return null!=t?h(f(e),t):f(e).userInvalidated=!0,e}n=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i<n;i++)if(i in e&&t.call(this,e[i],i,e))return!0;return!1};var p=i.momentProperties=[];function v(t,e){var n,i,a;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=f(e)),o(e._locale)||(t._locale=e._locale),p.length>0)for(n=0;n<p.length;n++)o(a=e[i=p[n]])||(t[i]=a);return t}var y=!1;function b(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===y&&(y=!0,i.updateOffset(this),y=!1)}function x(t){return t instanceof b||null!=t&&null!=t._isAMomentObject}function _(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function k(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=_(e)),n}function w(t,e,n){var i,a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),o=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&k(t[i])!==k(e[i]))&&o++;return o+r}function M(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function S(t,e){var n=!0;return h((function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){for(var a,r=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){for(var s in a+="\n["+o+"] ",arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];r.push(a)}M(t+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)}),e)}var D,C={};function P(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),C[t]||(M(e),C[t]=!0)}function T(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function O(t,e){var n,i=h({},t);for(n in e)d(e,n)&&(r(t[n])&&r(e[n])?(i[n]={},h(i[n],t[n]),h(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);for(n in t)d(t,n)&&!d(e,n)&&r(t[n])&&(i[n]=h({},i[n]));return i}function I(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,D=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)d(t,e)&&n.push(e);return n};var A={};function F(t,e){var n=t.toLowerCase();A[n]=A[n+"s"]=A[e]=t}function R(t){return"string"==typeof t?A[t]||A[t.toLowerCase()]:void 0}function L(t){var e,n,i={};for(n in t)d(t,n)&&(e=R(n))&&(i[e]=t[n]);return i}var W={};function Y(t,e){W[t]=e}function N(t,e,n){var i=""+Math.abs(t);return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,e-i.length)).toString().substr(1)+i}var z=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,H={},E={};function B(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return this[i]()}),t&&(E[t]=a),e&&(E[e[0]]=function(){return N(a.apply(this,arguments),e[1],e[2])}),n&&(E[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),H[e]=H[e]||function(t){var e,n,i,a=t.match(z);for(e=0,n=a.length;e<n;e++)a[e]=E[a[e]]?E[a[e]]:(i=a[e]).match(/\[[\s\S]/)?i.replace(/^\[|\]$/g,""):i.replace(/\\/g,"");return function(e){var i,r="";for(i=0;i<n;i++)r+=T(a[i])?a[i].call(e,t):a[i];return r}}(e),H[e](t)):t.localeData().invalidDate()}function U(t,e){var n=5;function i(t){return e.longDateFormat(t)||t}for(V.lastIndex=0;n>=0&&V.test(t);)t=t.replace(V,i),V.lastIndex=0,n-=1;return t}var G=/\d/,q=/\d\d/,Z=/\d{3}/,$=/\d{4}/,X=/[+-]?\d{6}/,J=/\d\d?/,K=/\d\d\d\d?/,Q=/\d\d\d\d\d\d?/,tt=/\d{1,3}/,et=/\d{1,4}/,nt=/[+-]?\d{1,6}/,it=/\d+/,at=/[+-]?\d+/,rt=/Z|[+-]\d\d:?\d\d/gi,ot=/Z|[+-]\d\d(?::?\d\d)?/gi,st=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,lt={};function ut(t,e,n){lt[t]=T(e)?e:function(t,i){return t&&n?n:e}}function dt(t,e){return d(lt,t)?lt[t](e._strict,e._locale):new RegExp(ht(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(t,e,n,i,a){return e||n||i||a}))))}function ht(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ct={};function ft(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=function(t,n){n[e]=k(t)}),n=0;n<t.length;n++)ct[t[n]]=i}function gt(t,e){ft(t,(function(t,n,i,a){i._w=i._w||{},e(t,i._w,i,a)}))}function mt(t,e,n){null!=e&&d(ct,t)&&ct[t](e,n._a,n,t)}function pt(t){return vt(t)?366:365}function vt(t){return t%4==0&&t%100!=0||t%400==0}B("Y",0,0,(function(){var t=this.year();return t<=9999?""+t:"+"+t})),B(0,["YY",2],0,(function(){return this.year()%100})),B(0,["YYYY",4],0,"year"),B(0,["YYYYY",5],0,"year"),B(0,["YYYYYY",6,!0],0,"year"),F("year","y"),Y("year",1),ut("Y",at),ut("YY",J,q),ut("YYYY",et,$),ut("YYYYY",nt,X),ut("YYYYYY",nt,X),ft(["YYYYY","YYYYYY"],0),ft("YYYY",(function(t,e){e[0]=2===t.length?i.parseTwoDigitYear(t):k(t)})),ft("YY",(function(t,e){e[0]=i.parseTwoDigitYear(t)})),ft("Y",(function(t,e){e[0]=parseInt(t,10)})),i.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)};var yt,bt=xt("FullYear",!0);function xt(t,e){return function(n){return null!=n?(kt(this,t,n),i.updateOffset(this,e),this):_t(this,t)}}function _t(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function kt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&vt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),wt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function wt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=function(t,e){return(t%12+12)%12}(e);return t+=(e-n)/12,1===n?vt(t)?29:28:31-n%7%2}yt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},B("M",["MM",2],"Mo",(function(){return this.month()+1})),B("MMM",0,0,(function(t){return this.localeData().monthsShort(this,t)})),B("MMMM",0,0,(function(t){return this.localeData().months(this,t)})),F("month","M"),Y("month",8),ut("M",J),ut("MM",J,q),ut("MMM",(function(t,e){return e.monthsShortRegex(t)})),ut("MMMM",(function(t,e){return e.monthsRegex(t)})),ft(["M","MM"],(function(t,e){e[1]=k(t)-1})),ft(["MMM","MMMM"],(function(t,e,n,i){var a=n._locale.monthsParse(t,i,n._strict);null!=a?e[1]=a:f(n).invalidMonth=t}));var Mt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,St="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Dt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ct(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)r=c([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(a=yt.call(this._shortMonthsParse,o))?a:null:-1!==(a=yt.call(this._longMonthsParse,o))?a:null:"MMM"===e?-1!==(a=yt.call(this._shortMonthsParse,o))||-1!==(a=yt.call(this._longMonthsParse,o))?a:null:-1!==(a=yt.call(this._longMonthsParse,o))||-1!==(a=yt.call(this._shortMonthsParse,o))?a:null}function Pt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=k(e);else if(!s(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),wt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function Tt(t){return null!=t?(Pt(this,t),i.updateOffset(this,!0),this):_t(this,"Month")}var Ot=st,It=st;function At(){function t(t,e){return e.length-t.length}var e,n,i=[],a=[],r=[];for(e=0;e<12;e++)n=c([2e3,e]),i.push(this.monthsShort(n,"")),a.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),a.sort(t),r.sort(t),e=0;e<12;e++)i[e]=ht(i[e]),a[e]=ht(a[e]);for(e=0;e<24;e++)r[e]=ht(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Ft(t,e,n,i,a,r,o){var s;return t<100&&t>=0?(s=new Date(t+400,e,n,i,a,r,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,i,a,r,o),s}function Rt(t){var e;if(t<100&&t>=0){var n=Array.prototype.slice.call(arguments);n[0]=t+400,e=new Date(Date.UTC.apply(null,n)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t)}else e=new Date(Date.UTC.apply(null,arguments));return e}function Lt(t,e,n){var i=7+e-n;return-(7+Rt(t,0,i).getUTCDay()-e)%7+i-1}function Wt(t,e,n,i,a){var r,o,s=1+7*(e-1)+(7+n-i)%7+Lt(t,i,a);return s<=0?o=pt(r=t-1)+s:s>pt(t)?(r=t+1,o=s-pt(t)):(r=t,o=s),{year:r,dayOfYear:o}}function Yt(t,e,n){var i,a,r=Lt(t.year(),e,n),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o<1?i=o+Nt(a=t.year()-1,e,n):o>Nt(t.year(),e,n)?(i=o-Nt(t.year(),e,n),a=t.year()+1):(a=t.year(),i=o),{week:i,year:a}}function Nt(t,e,n){var i=Lt(t,e,n),a=Lt(t+1,e,n);return(pt(t)-i+a)/7}function zt(t,e){return t.slice(e,7).concat(t.slice(0,e))}B("w",["ww",2],"wo","week"),B("W",["WW",2],"Wo","isoWeek"),F("week","w"),F("isoWeek","W"),Y("week",5),Y("isoWeek",5),ut("w",J),ut("ww",J,q),ut("W",J),ut("WW",J,q),gt(["w","ww","W","WW"],(function(t,e,n,i){e[i.substr(0,1)]=k(t)})),B("d",0,"do","day"),B("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),B("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),B("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),B("e",0,0,"weekday"),B("E",0,0,"isoWeekday"),F("day","d"),F("weekday","e"),F("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),ut("d",J),ut("e",J),ut("E",J),ut("dd",(function(t,e){return e.weekdaysMinRegex(t)})),ut("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),ut("dddd",(function(t,e){return e.weekdaysRegex(t)})),gt(["dd","ddd","dddd"],(function(t,e,n,i){var a=n._locale.weekdaysParse(t,i,n._strict);null!=a?e.d=a:f(n).invalidWeekday=t})),gt(["d","e","E"],(function(t,e,n,i){e[i]=k(t)}));var Vt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ht="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Et="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Bt(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)r=c([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(a=yt.call(this._weekdaysParse,o))?a:null:"ddd"===e?-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:"dddd"===e?-1!==(a=yt.call(this._weekdaysParse,o))||-1!==(a=yt.call(this._shortWeekdaysParse,o))||-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:"ddd"===e?-1!==(a=yt.call(this._shortWeekdaysParse,o))||-1!==(a=yt.call(this._weekdaysParse,o))||-1!==(a=yt.call(this._minWeekdaysParse,o))?a:null:-1!==(a=yt.call(this._minWeekdaysParse,o))||-1!==(a=yt.call(this._weekdaysParse,o))||-1!==(a=yt.call(this._shortWeekdaysParse,o))?a:null}var jt=st,Ut=st,Gt=st;function qt(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[],s=[],l=[],u=[];for(e=0;e<7;e++)n=c([2e3,1]).day(e),i=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),r=this.weekdays(n,""),o.push(i),s.push(a),l.push(r),u.push(i),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ht(s[e]),l[e]=ht(l[e]),u[e]=ht(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Zt(){return this.hours()%12||12}function $t(t,e){B(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Xt(t,e){return e._meridiemParse}B("H",["HH",2],0,"hour"),B("h",["hh",2],0,Zt),B("k",["kk",2],0,(function(){return this.hours()||24})),B("hmm",0,0,(function(){return""+Zt.apply(this)+N(this.minutes(),2)})),B("hmmss",0,0,(function(){return""+Zt.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)})),B("Hmm",0,0,(function(){return""+this.hours()+N(this.minutes(),2)})),B("Hmmss",0,0,(function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)})),$t("a",!0),$t("A",!1),F("hour","h"),Y("hour",13),ut("a",Xt),ut("A",Xt),ut("H",J),ut("h",J),ut("k",J),ut("HH",J,q),ut("hh",J,q),ut("kk",J,q),ut("hmm",K),ut("hmmss",Q),ut("Hmm",K),ut("Hmmss",Q),ft(["H","HH"],3),ft(["k","kk"],(function(t,e,n){var i=k(t);e[3]=24===i?0:i})),ft(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),ft(["h","hh"],(function(t,e,n){e[3]=k(t),f(n).bigHour=!0})),ft("hmm",(function(t,e,n){var i=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i)),f(n).bigHour=!0})),ft("hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i,2)),e[5]=k(t.substr(a)),f(n).bigHour=!0})),ft("Hmm",(function(t,e,n){var i=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i))})),ft("Hmmss",(function(t,e,n){var i=t.length-4,a=t.length-2;e[3]=k(t.substr(0,i)),e[4]=k(t.substr(i,2)),e[5]=k(t.substr(a))}));var Jt,Kt=xt("Hours",!0),Qt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:St,monthsShort:Dt,week:{dow:0,doy:6},weekdays:Vt,weekdaysMin:Et,weekdaysShort:Ht,meridiemParse:/[ap]\.?m?\.?/i},te={},ee={};function ne(t){return t?t.toLowerCase().replace("_","-"):t}function ie(e){var n=null;if(!te[e]&&t&&t.exports)try{n=Jt._abbr,function(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}(),ae(n)}catch(i){}return te[e]}function ae(t,e){var n;return t&&((n=o(e)?oe(t):re(t,e))?Jt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Jt._abbr}function re(t,e){if(null!==e){var n,i=Qt;if(e.abbr=t,null!=te[t])P("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=te[t]._config;else if(null!=e.parentLocale)if(null!=te[e.parentLocale])i=te[e.parentLocale]._config;else{if(null==(n=ie(e.parentLocale)))return ee[e.parentLocale]||(ee[e.parentLocale]=[]),ee[e.parentLocale].push({name:t,config:e}),null;i=n._config}return te[t]=new I(O(i,e)),ee[t]&&ee[t].forEach((function(t){re(t.name,t.config)})),ae(t),te[t]}return delete te[t],null}function oe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Jt;if(!a(t)){if(e=ie(t))return e;t=[t]}return function(t){for(var e,n,i,a,r=0;r<t.length;){for(e=(a=ne(t[r]).split("-")).length,n=(n=ne(t[r+1]))?n.split("-"):null;e>0;){if(i=ie(a.slice(0,e).join("-")))return i;if(n&&n.length>=e&&w(a,n,!0)>=e-1)break;e--}r++}return Jt}(t)}function se(t){var e,n=t._a;return n&&-2===f(t).overflow&&(e=n[1]<0||n[1]>11?1:n[2]<1||n[2]>wt(n[0],n[1])?2:n[3]<0||n[3]>24||24===n[3]&&(0!==n[4]||0!==n[5]||0!==n[6])?3:n[4]<0||n[4]>59?4:n[5]<0||n[5]>59?5:n[6]<0||n[6]>999?6:-1,f(t)._overflowDayOfYear&&(e<0||e>2)&&(e=2),f(t)._overflowWeeks&&-1===e&&(e=7),f(t)._overflowWeekday&&-1===e&&(e=8),f(t).overflow=e),t}function le(t,e,n){return null!=t?t:null!=e?e:n}function ue(t){var e,n,a,r,o,s=[];if(!t._d){for(a=function(t){var e=new Date(i.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[2]&&null==t._a[1]&&function(t){var e,n,i,a,r,o,s,l;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)r=1,o=4,n=le(e.GG,t._a[0],Yt(we(),1,4).year),i=le(e.W,1),((a=le(e.E,1))<1||a>7)&&(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=Yt(we(),r,o);n=le(e.gg,t._a[0],u.year),i=le(e.w,u.week),null!=e.d?((a=e.d)<0||a>6)&&(l=!0):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(l=!0)):a=r}i<1||i>Nt(n,r,o)?f(t)._overflowWeeks=!0:null!=l?f(t)._overflowWeekday=!0:(s=Wt(n,i,a,r,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=le(t._a[0],a[0]),(t._dayOfYear>pt(o)||0===t._dayOfYear)&&(f(t)._overflowDayOfYear=!0),n=Rt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=a[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Rt:Ft).apply(null,s),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(f(t).weekdayMismatch=!0)}}var de=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,he=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/Z|[+-]\d\d(?::?\d\d)?/,fe=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],ge=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],me=/^\/?Date\((\-?\d+)/i;function pe(t){var e,n,i,a,r,o,s=t._i,l=de.exec(s)||he.exec(s);if(l){for(f(t).iso=!0,e=0,n=fe.length;e<n;e++)if(fe[e][1].exec(l[1])){a=fe[e][0],i=!1!==fe[e][2];break}if(null==a)return void(t._isValid=!1);if(l[3]){for(e=0,n=ge.length;e<n;e++)if(ge[e][1].exec(l[3])){r=(l[2]||" ")+ge[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(l[4]){if(!ce.exec(l[4]))return void(t._isValid=!1);o="Z"}t._f=a+(r||"")+(o||""),xe(t)}else t._isValid=!1}var ve=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ye={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function be(t){var e,n,i,a,r,o,s,l,u=ve.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(u){var d=(e=u[3],n=u[2],i=u[5],a=u[6],r=u[7],o=[(s=u[4],l=parseInt(s,10),l<=49?2e3+l:l<=999?1900+l:l),Dt.indexOf(e),parseInt(n,10),parseInt(i,10),parseInt(a,10)],r&&o.push(parseInt(r,10)),o);if(!function(t,e,n){return!t||Ht.indexOf(t)===new Date(e[0],e[1],e[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}(u[1],d,t))return;t._a=d,t._tzm=function(t,e,n){if(t)return ye[t];if(e)return 0;var i=parseInt(n,10),a=i%100;return(i-a)/100*60+a}(u[8],u[9],u[10]),t._d=Rt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),f(t).rfc2822=!0}else t._isValid=!1}function xe(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],f(t).empty=!0;var e,n,a,r,o,s=""+t._i,l=s.length,u=0;for(a=U(t._f,t._locale).match(z)||[],e=0;e<a.length;e++)(n=(s.match(dt(r=a[e],t))||[])[0])&&((o=s.substr(0,s.indexOf(n))).length>0&&f(t).unusedInput.push(o),s=s.slice(s.indexOf(n)+n.length),u+=n.length),E[r]?(n?f(t).empty=!1:f(t).unusedTokens.push(r),mt(r,n,t)):t._strict&&!n&&f(t).unusedTokens.push(r);f(t).charsLeftOver=l-u,s.length>0&&f(t).unusedInput.push(s),t._a[3]<=12&&!0===f(t).bigHour&&t._a[3]>0&&(f(t).bigHour=void 0),f(t).parsedDateParts=t._a.slice(0),f(t).meridiem=t._meridiem,t._a[3]=function(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?((i=t.isPM(n))&&e<12&&(e+=12),i||12!==e||(e=0),e):e}(t._locale,t._a[3],t._meridiem),ue(t),se(t)}else be(t);else pe(t)}function _e(t){var e=t._i,n=t._f;return t._locale=t._locale||oe(t._l),null===e||void 0===n&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),x(e)?new b(se(e)):(l(e)?t._d=e:a(n)?function(t){var e,n,i,a,r;if(0===t._f.length)return f(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;a<t._f.length;a++)r=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[a],xe(e),g(e)&&(r+=f(e).charsLeftOver,r+=10*f(e).unusedTokens.length,f(e).score=r,(null==i||r<i)&&(i=r,n=e));h(t,n||e)}(t):n?xe(t):function(t){var e=t._i;o(e)?t._d=new Date(i.now()):l(e)?t._d=new Date(e.valueOf()):"string"==typeof e?function(t){var e=me.exec(t._i);null===e?(pe(t),!1===t._isValid&&(delete t._isValid,be(t),!1===t._isValid&&(delete t._isValid,i.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):a(e)?(t._a=u(e.slice(0),(function(t){return parseInt(t,10)})),ue(t)):r(e)?function(t){if(!t._d){var e=L(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],(function(t){return t&&parseInt(t,10)})),ue(t)}}(t):s(e)?t._d=new Date(e):i.createFromInputFallback(t)}(t),g(t)||(t._d=null),t))}function ke(t,e,n,i,o){var s,l={};return!0!==n&&!1!==n||(i=n,n=void 0),(r(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||a(t)&&0===t.length)&&(t=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=o,l._l=n,l._i=t,l._f=e,l._strict=i,(s=new b(se(_e(l))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function we(t,e,n,i){return ke(t,e,n,i,!1)}i.createFromInputFallback=S("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))})),i.ISO_8601=function(){},i.RFC_2822=function(){};var Me=S("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()})),Se=S("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}));function De(t,e){var n,i;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return we();for(n=e[0],i=1;i<e.length;++i)e[i].isValid()&&!e[i][t](n)||(n=e[i]);return n}var Ce=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Pe(t){var e=L(t),n=e.year||0,i=e.quarter||0,a=e.month||0,r=e.week||e.isoWeek||0,o=e.day||0,s=e.hour||0,l=e.minute||0,u=e.second||0,d=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===yt.call(Ce,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,i=0;i<Ce.length;++i)if(t[Ce[i]]){if(n)return!1;parseFloat(t[Ce[i]])!==k(t[Ce[i]])&&(n=!0)}return!0}(e),this._milliseconds=+d+1e3*u+6e4*l+1e3*s*60*60,this._days=+o+7*r,this._months=+a+3*i+12*n,this._data={},this._locale=oe(),this._bubble()}function Te(t){return t instanceof Pe}function Oe(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ie(t,e){B(t,0,0,(function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+N(~~(t/60),2)+e+N(~~t%60,2)}))}Ie("Z",":"),Ie("ZZ",""),ut("Z",ot),ut("ZZ",ot),ft(["Z","ZZ"],(function(t,e,n){n._useUTC=!0,n._tzm=Fe(ot,t)}));var Ae=/([\+\-]|\d\d)/gi;function Fe(t,e){var n=(e||"").match(t);if(null===n)return null;var i=((n[n.length-1]||[])+"").match(Ae)||["-",0,0],a=60*i[1]+k(i[2]);return 0===a?0:"+"===i[0]?a:-a}function Re(t,e){var n,a;return e._isUTC?(n=e.clone(),a=(x(t)||l(t)?t.valueOf():we(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+a),i.updateOffset(n,!1),n):we(t).local()}function Le(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function We(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var Ye=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ne=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function ze(t,e){var n,i,a,r,o,l,u=t,h=null;return Te(t)?u={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(u={},e?u[e]=t:u.milliseconds=t):(h=Ye.exec(t))?(n="-"===h[1]?-1:1,u={y:0,d:k(h[2])*n,h:k(h[3])*n,m:k(h[4])*n,s:k(h[5])*n,ms:k(Oe(1e3*h[6]))*n}):(h=Ne.exec(t))?u={y:Ve(h[2],n="-"===h[1]?-1:1),M:Ve(h[3],n),w:Ve(h[4],n),d:Ve(h[5],n),h:Ve(h[6],n),m:Ve(h[7],n),s:Ve(h[8],n)}:null==u?u={}:"object"==typeof u&&("from"in u||"to"in u)&&(r=we(u.from),o=we(u.to),a=r.isValid()&&o.isValid()?(o=Re(o,r),r.isBefore(o)?l=He(r,o):((l=He(o,r)).milliseconds=-l.milliseconds,l.months=-l.months),l):{milliseconds:0,months:0},(u={}).ms=a.milliseconds,u.M=a.months),i=new Pe(u),Te(t)&&d(t,"_locale")&&(i._locale=t._locale),i}function Ve(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function He(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ee(t,e){return function(n,i){var a;return null===i||isNaN(+i)||(P(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=n,n=i,i=a),Be(this,ze(n="string"==typeof n?+n:n,i),t),this}}function Be(t,e,n,a){var r=e._milliseconds,o=Oe(e._days),s=Oe(e._months);t.isValid()&&(a=null==a||a,s&&Pt(t,_t(t,"Month")+s*n),o&&kt(t,"Date",_t(t,"Date")+o*n),r&&t._d.setTime(t._d.valueOf()+r*n),a&&i.updateOffset(t,o||s))}ze.fn=Pe.prototype,ze.invalid=function(){return ze(NaN)};var je=Ee(1,"add"),Ue=Ee(-1,"subtract");function Ge(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),i=t.clone().add(n,"months");return-(n+(e-i<0?(e-i)/(i-t.clone().add(n-1,"months")):(e-i)/(t.clone().add(n+1,"months")-i)))||0}function qe(t){var e;return void 0===t?this._locale._abbr:(null!=(e=oe(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ze=S("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(t){return void 0===t?this.localeData():this.locale(t)}));function $e(){return this._locale}function Xe(t,e){return(t%e+e)%e}function Je(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-126227808e5:new Date(t,e,n).valueOf()}function Ke(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-126227808e5:Date.UTC(t,e,n)}function Qe(t,e){B(0,[t,t.length],0,e)}function tn(t,e,n,i,a){var r;return null==t?Yt(this,i,a).year:(e>(r=Nt(t,i,a))&&(e=r),en.call(this,t,e,n,i,a))}function en(t,e,n,i,a){var r=Wt(t,e,n,i,a),o=Rt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}B(0,["gg",2],0,(function(){return this.weekYear()%100})),B(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Qe("gggg","weekYear"),Qe("ggggg","weekYear"),Qe("GGGG","isoWeekYear"),Qe("GGGGG","isoWeekYear"),F("weekYear","gg"),F("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),ut("G",at),ut("g",at),ut("GG",J,q),ut("gg",J,q),ut("GGGG",et,$),ut("gggg",et,$),ut("GGGGG",nt,X),ut("ggggg",nt,X),gt(["gggg","ggggg","GGGG","GGGGG"],(function(t,e,n,i){e[i.substr(0,2)]=k(t)})),gt(["gg","GG"],(function(t,e,n,a){e[a]=i.parseTwoDigitYear(t)})),B("Q",0,"Qo","quarter"),F("quarter","Q"),Y("quarter",7),ut("Q",G),ft("Q",(function(t,e){e[1]=3*(k(t)-1)})),B("D",["DD",2],"Do","date"),F("date","D"),Y("date",9),ut("D",J),ut("DD",J,q),ut("Do",(function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),ft(["D","DD"],2),ft("Do",(function(t,e){e[2]=k(t.match(J)[0])}));var nn=xt("Date",!0);B("DDD",["DDDD",3],"DDDo","dayOfYear"),F("dayOfYear","DDD"),Y("dayOfYear",4),ut("DDD",tt),ut("DDDD",Z),ft(["DDD","DDDD"],(function(t,e,n){n._dayOfYear=k(t)})),B("m",["mm",2],0,"minute"),F("minute","m"),Y("minute",14),ut("m",J),ut("mm",J,q),ft(["m","mm"],4);var an=xt("Minutes",!1);B("s",["ss",2],0,"second"),F("second","s"),Y("second",15),ut("s",J),ut("ss",J,q),ft(["s","ss"],5);var rn,on=xt("Seconds",!1);for(B("S",0,0,(function(){return~~(this.millisecond()/100)})),B(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),B(0,["SSS",3],0,"millisecond"),B(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),B(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),B(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),B(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),B(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),B(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),F("millisecond","ms"),Y("millisecond",16),ut("S",tt,G),ut("SS",tt,q),ut("SSS",tt,Z),rn="SSSS";rn.length<=9;rn+="S")ut(rn,it);function sn(t,e){e[6]=k(1e3*("0."+t))}for(rn="S";rn.length<=9;rn+="S")ft(rn,sn);var ln=xt("Milliseconds",!1);B("z",0,0,"zoneAbbr"),B("zz",0,0,"zoneName");var un=b.prototype;function dn(t){return t}un.add=je,un.calendar=function(t,e){var n=t||we(),a=Re(n,this).startOf("day"),r=i.calendarFormat(this,a)||"sameElse",o=e&&(T(e[r])?e[r].call(this,n):e[r]);return this.format(o||this.localeData().calendar(r,this,we(n)))},un.clone=function(){return new b(this)},un.diff=function(t,e,n){var i,a,r;if(!this.isValid())return NaN;if(!(i=Re(t,this)).isValid())return NaN;switch(a=6e4*(i.utcOffset()-this.utcOffset()),e=R(e)){case"year":r=Ge(this,i)/12;break;case"month":r=Ge(this,i);break;case"quarter":r=Ge(this,i)/3;break;case"second":r=(this-i)/1e3;break;case"minute":r=(this-i)/6e4;break;case"hour":r=(this-i)/36e5;break;case"day":r=(this-i-a)/864e5;break;case"week":r=(this-i-a)/6048e5;break;default:r=this-i}return n?r:_(r)},un.endOf=function(t){var e;if(void 0===(t=R(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ke:Je;switch(t){case"year":e=n(this.year()+1,0,1)-1;break;case"quarter":e=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=n(this.year(),this.month()+1,1)-1;break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=36e5-Xe(e+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":e=this._d.valueOf(),e+=6e4-Xe(e,6e4)-1;break;case"second":e=this._d.valueOf(),e+=1e3-Xe(e,1e3)-1}return this._d.setTime(e),i.updateOffset(this,!0),this},un.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=j(this,t);return this.localeData().postformat(e)},un.from=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||we(t).isValid())?ze({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},un.fromNow=function(t){return this.from(we(),t)},un.to=function(t,e){return this.isValid()&&(x(t)&&t.isValid()||we(t).isValid())?ze({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},un.toNow=function(t){return this.to(we(),t)},un.get=function(t){return T(this[t=R(t)])?this[t]():this},un.invalidAt=function(){return f(this).overflow},un.isAfter=function(t,e){var n=x(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},un.isBefore=function(t,e){var n=x(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},un.isBetween=function(t,e,n,i){var a=x(t)?t:we(t),r=x(e)?e:we(e);return!!(this.isValid()&&a.isValid()&&r.isValid())&&("("===(i=i||"()")[0]?this.isAfter(a,n):!this.isBefore(a,n))&&(")"===i[1]?this.isBefore(r,n):!this.isAfter(r,n))},un.isSame=function(t,e){var n,i=x(t)?t:we(t);return!(!this.isValid()||!i.isValid())&&("millisecond"===(e=R(e)||"millisecond")?this.valueOf()===i.valueOf():(n=i.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},un.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},un.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},un.isValid=function(){return g(this)},un.lang=Ze,un.locale=qe,un.localeData=$e,un.max=Se,un.min=Me,un.parsingFlags=function(){return h({},f(this))},un.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:W[n]});return e.sort((function(t,e){return t.priority-e.priority})),e}(t=L(t)),i=0;i<n.length;i++)this[n[i].unit](t[n[i].unit]);else if(T(this[t=R(t)]))return this[t](e);return this},un.startOf=function(t){var e;if(void 0===(t=R(t))||"millisecond"===t||!this.isValid())return this;var n=this._isUTC?Ke:Je;switch(t){case"year":e=n(this.year(),0,1);break;case"quarter":e=n(this.year(),this.month()-this.month()%3,1);break;case"month":e=n(this.year(),this.month(),1);break;case"week":e=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=n(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=Xe(e+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":e=this._d.valueOf(),e-=Xe(e,6e4);break;case"second":e=this._d.valueOf(),e-=Xe(e,1e3)}return this._d.setTime(e),i.updateOffset(this,!0),this},un.subtract=Ue,un.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},un.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},un.toDate=function(){return new Date(this.valueOf())},un.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?j(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",j(n,"Z")):j(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},un.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(n+i+"-MM-DD[T]HH:mm:ss.SSS"+e+'[")]')},un.toJSON=function(){return this.isValid()?this.toISOString():null},un.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},un.unix=function(){return Math.floor(this.valueOf()/1e3)},un.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},un.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},un.year=bt,un.isLeapYear=function(){return vt(this.year())},un.weekYear=function(t){return tn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},un.isoWeekYear=function(t){return tn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},un.quarter=un.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},un.month=Tt,un.daysInMonth=function(){return wt(this.year(),this.month())},un.week=un.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},un.isoWeek=un.isoWeeks=function(t){var e=Yt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},un.weeksInYear=function(){var t=this.localeData()._week;return Nt(this.year(),t.dow,t.doy)},un.isoWeeksInYear=function(){return Nt(this.year(),1,4)},un.date=nn,un.day=un.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},un.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},un.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},un.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},un.hour=un.hours=Kt,un.minute=un.minutes=an,un.second=un.seconds=on,un.millisecond=un.milliseconds=ln,un.utcOffset=function(t,e,n){var a,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Fe(ot,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(a=Le(this)),this._offset=t,this._isUTC=!0,null!=a&&this.add(a,"m"),r!==t&&(!e||this._changeInProgress?Be(this,ze(t-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Le(this)},un.utc=function(t){return this.utcOffset(0,t)},un.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Le(this),"m")),this},un.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Fe(rt,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},un.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?we(t).utcOffset():0,(this.utcOffset()-t)%60==0)},un.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},un.isLocal=function(){return!!this.isValid()&&!this._isUTC},un.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},un.isUtc=We,un.isUTC=We,un.zoneAbbr=function(){return this._isUTC?"UTC":""},un.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},un.dates=S("dates accessor is deprecated. Use date instead.",nn),un.months=S("months accessor is deprecated. Use month instead",Tt),un.years=S("years accessor is deprecated. Use year instead",bt),un.zone=S("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),un.isDSTShifted=S("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),(t=_e(t))._a){var e=t._isUTC?c(t._a):we(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var hn=I.prototype;function cn(t,e,n,i){var a=oe(),r=c().set(i,e);return a[n](r,t)}function fn(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return cn(t,e,n,"month");var i,a=[];for(i=0;i<12;i++)a[i]=cn(t,i,n,"month");return a}function gn(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var a,r=oe(),o=t?r._week.dow:0;if(null!=n)return cn(e,(n+o)%7,i,"day");var l=[];for(a=0;a<7;a++)l[a]=cn(e,(a+o)%7,i,"day");return l}hn.calendar=function(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return T(i)?i.call(e,n):i},hn.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,(function(t){return t.slice(1)})),this._longDateFormat[t])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(t){return this._ordinal.replace("%d",t)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(t,e,n,i){var a=this._relativeTime[n];return T(a)?a(t,e,n,i):a.replace(/%d/i,t)},hn.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return T(n)?n(e):n.replace(/%s/i,e)},hn.set=function(t){var e,n;for(n in t)T(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Mt).test(e)?"format":"standalone"][t.month()]:a(this._months)?this._months:this._months.standalone},hn.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Mt.test(e)?"format":"standalone"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(t,e,n){var i,a,r;if(this._monthsParseExact)return Ct.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=c([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}},hn.monthsRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||At.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=It),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||At.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Ot),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(t){return Yt(t,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(t,e){var n=a(this._weekdays)?this._weekdays:this._weekdays[t&&!0!==t&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===t?zt(n,this._week.dow):t?n[t.day()]:n},hn.weekdaysMin=function(t){return!0===t?zt(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin},hn.weekdaysShort=function(t){return!0===t?zt(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort},hn.weekdaysParse=function(t,e,n){var i,a,r;if(this._weekdaysParseExact)return Bt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(a=c([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}},hn.weekdaysRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=jt),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ut),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||qt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Gt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},hn.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},ae("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),i.lang=S("moment.lang is deprecated. Use moment.locale instead.",ae),i.langData=S("moment.langData is deprecated. Use moment.localeData instead.",oe);var mn=Math.abs;function pn(t,e,n,i){var a=ze(e,n);return t._milliseconds+=i*a._milliseconds,t._days+=i*a._days,t._months+=i*a._months,t._bubble()}function vn(t){return t<0?Math.floor(t):Math.ceil(t)}function yn(t){return 4800*t/146097}function bn(t){return 146097*t/4800}function xn(t){return function(){return this.as(t)}}var _n=xn("ms"),kn=xn("s"),wn=xn("m"),Mn=xn("h"),Sn=xn("d"),Dn=xn("w"),Cn=xn("M"),Pn=xn("Q"),Tn=xn("y");function On(t){return function(){return this.isValid()?this._data[t]:NaN}}var In=On("milliseconds"),An=On("seconds"),Fn=On("minutes"),Rn=On("hours"),Ln=On("days"),Wn=On("months"),Yn=On("years"),Nn=Math.round,zn={ss:44,s:45,m:45,h:22,d:26,M:11};function Vn(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}var Hn=Math.abs;function En(t){return(t>0)-(t<0)||+t}function Bn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=Hn(this._milliseconds)/1e3,i=Hn(this._days),a=Hn(this._months);t=_(n/60),e=_(t/60),n%=60,t%=60;var r=_(a/12),o=a%=12,s=i,l=e,u=t,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=En(this._months)!==En(h)?"-":"",g=En(this._days)!==En(h)?"-":"",m=En(this._milliseconds)!==En(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(o?f+o+"M":"")+(s?g+s+"D":"")+(l||u||d?"T":"")+(l?m+l+"H":"")+(u?m+u+"M":"")+(d?m+d+"S":"")}var jn=Pe.prototype;return jn.isValid=function(){return this._isValid},jn.abs=function(){var t=this._data;return this._milliseconds=mn(this._milliseconds),this._days=mn(this._days),this._months=mn(this._months),t.milliseconds=mn(t.milliseconds),t.seconds=mn(t.seconds),t.minutes=mn(t.minutes),t.hours=mn(t.hours),t.months=mn(t.months),t.years=mn(t.years),this},jn.add=function(t,e){return pn(this,t,e,1)},jn.subtract=function(t,e){return pn(this,t,e,-1)},jn.as=function(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if("month"===(t=R(t))||"quarter"===t||"year"===t)switch(n=this._months+yn(e=this._days+i/864e5),t){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(e=this._days+Math.round(bn(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}},jn.asMilliseconds=_n,jn.asSeconds=kn,jn.asMinutes=wn,jn.asHours=Mn,jn.asDays=Sn,jn.asWeeks=Dn,jn.asMonths=Cn,jn.asQuarters=Pn,jn.asYears=Tn,jn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},jn._bubble=function(){var t,e,n,i,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r>=0&&o>=0&&s>=0||r<=0&&o<=0&&s<=0||(r+=864e5*vn(bn(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=_(r/1e3),l.seconds=t%60,e=_(t/60),l.minutes=e%60,n=_(e/60),l.hours=n%24,o+=_(n/24),s+=a=_(yn(o)),o-=vn(bn(a)),i=_(s/12),s%=12,l.days=o,l.months=s,l.years=i,this},jn.clone=function(){return ze(this)},jn.get=function(t){return t=R(t),this.isValid()?this[t+"s"]():NaN},jn.milliseconds=In,jn.seconds=An,jn.minutes=Fn,jn.hours=Rn,jn.days=Ln,jn.weeks=function(){return _(this.days()/7)},jn.months=Wn,jn.years=Yn,jn.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var i=ze(t).abs(),a=Nn(i.as("s")),r=Nn(i.as("m")),o=Nn(i.as("h")),s=Nn(i.as("d")),l=Nn(i.as("M")),u=Nn(i.as("y")),d=a<=zn.ss&&["s",a]||a<zn.s&&["ss",a]||r<=1&&["m"]||r<zn.m&&["mm",r]||o<=1&&["h"]||o<zn.h&&["hh",o]||s<=1&&["d"]||s<zn.d&&["dd",s]||l<=1&&["M"]||l<zn.M&&["MM",l]||u<=1&&["y"]||["yy",u];return d[2]=e,d[3]=+t>0,d[4]=n,Vn.apply(null,d)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},jn.toISOString=Bn,jn.toString=Bn,jn.toJSON=Bn,jn.locale=qe,jn.localeData=$e,jn.toIsoString=S("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),jn.lang=Ze,B("X",0,0,"unix"),B("x",0,0,"valueOf"),ut("x",at),ut("X",/[+-]?\d+(\.\d{1,3})?/),ft("X",(function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))})),ft("x",(function(t,e,n){n._d=new Date(k(t))})),i.version="2.24.0",e=we,i.fn=un,i.min=function(){var t=[].slice.call(arguments,0);return De("isBefore",t)},i.max=function(){var t=[].slice.call(arguments,0);return De("isAfter",t)},i.now=function(){return Date.now?Date.now():+new Date},i.utc=c,i.unix=function(t){return we(1e3*t)},i.months=function(t,e){return fn(t,e,"months")},i.isDate=l,i.locale=ae,i.invalid=m,i.duration=ze,i.isMoment=x,i.weekdays=function(t,e,n){return gn(t,e,n,"weekdays")},i.parseZone=function(){return we.apply(null,arguments).parseZone()},i.localeData=oe,i.isDuration=Te,i.monthsShort=function(t,e){return fn(t,e,"monthsShort")},i.weekdaysMin=function(t,e,n){return gn(t,e,n,"weekdaysMin")},i.defineLocale=re,i.updateLocale=function(t,e){if(null!=e){var n,i,a=Qt;null!=(i=ie(t))&&(a=i._config),(n=new I(e=O(a,e))).parentLocale=te[t],te[t]=n,ae(t)}else null!=te[t]&&(null!=te[t].parentLocale?te[t]=te[t].parentLocale:null!=te[t]&&delete te[t]);return te[t]},i.locales=function(){return D(te)},i.weekdaysShort=function(t,e,n){return gn(t,e,n,"weekdaysShort")},i.normalizeUnits=R,i.relativeTimeRounding=function(t){return void 0===t?Nn:"function"==typeof t&&(Nn=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==zn[t]&&(void 0===e?zn[t]:(zn[t]=e,"s"===t&&(zn.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=un,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()}(e={exports:{}}),e.exports}(),Nn={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};$e._date.override("function"==typeof Yn?{_id:"moment",formats:function(){return Nn},parse:function(t,e){return"string"==typeof t&&"string"==typeof e?t=Yn(t,e):t instanceof Yn||(t=Yn(t)),t.isValid()?t.valueOf():null},format:function(t,e){return Yn(t).format(e)},add:function(t,e,n){return Yn(t).add(e,n).valueOf()},diff:function(t,e,n){return Yn.duration(Yn(t).diff(Yn(e))).as(n)},startOf:function(t,e,n){return t=Yn(t),"isoWeek"===e?t.isoWeekday(n).valueOf():t.startOf(e).valueOf()},endOf:function(t,e){return Yn(t).endOf(e).valueOf()},_create:function(t){return Yn(t)}}:{}),ot._set("global",{plugins:{filler:{propagate:!0}}});var zn={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function Vn(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function Hn(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePosition?r=i.getBasePosition():i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(ut.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}function En(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function Bn(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),zn[n](t))}function jn(t){return t&&!t.skip}function Un(t,e,n,i,a){var r;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)ut.canvas.lineTo(t,e[r-1],e[r]);for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)ut.canvas.lineTo(t,n[r],n[r-1],!0)}}var Gn={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof Wt.Line&&(r={visible:t.isDatasetVisible(i),fill:Vn(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=En(l,i,s),r.boundary=Hn(r),r.mapper=Bn(r))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var i=t.ctx,a=n.el,r=a._view,o=a._children||[],s=n.mapper,l=r.backgroundColor||ot.global.defaultColor;s&&l&&o.length&&(ut.canvas.clipArea(i,t.chartArea),function(t,e,n,i,a,r){var o,s,l,u,d,h,c,f=e.length,g=i.spanGaps,m=[],p=[],v=0,y=0;for(t.beginPath(),o=0,s=f+!!r;o<s;++o)d=n(u=e[l=o%f]._view,l,i),h=jn(u),c=jn(d),h&&c?(v=m.push(u),y=p.push(d)):v&&y&&(g?(h&&m.push(u),c&&p.push(d)):(Un(t,m,p,v,y),v=y=0,m=[],p=[]));Un(t,m,p,v,y),t.closePath(),t.fillStyle=a,t.fill()}(i,o,s,r,l,a._loop),ut.canvas.unclipArea(i))}}},qn=ut.noop,Zn=ut.valueOrDefault;function $n(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}ot._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return ut.isArray(e.datasets)?e.datasets.map((function(e,n){return{text:e.label,fillStyle:ut.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}}),this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var Xn=ft.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:qn,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:qn,beforeSetDimensions:qn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:qn,beforeBuildLabels:qn,buildLabels:function(){var t=this,e=t.options.labels||{},n=ut.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:qn,beforeFit:qn,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=ut.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i)if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="top",ut.each(t.legendItems,(function(t,e){var i=$n(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=n.padding),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=n.padding,m=0,p=0,v=o+c;ut.each(t.legendItems,(function(t,e){var i=$n(n,o)+o/2+a.measureText(t.text).width;e>0&&p+v>l.height-c&&(g+=m+n.padding,f.push(m),m=0,p=0),m=Math.max(m,i),p+=v,s[e]={left:0,top:0,width:i,height:o}})),g+=m,f.push(m),l.width+=g}t.width=l.width,t.height=l.height},afterFit:qn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=ot.global,a=i.defaultColor,r=i.elements.line,o=t.width,s=t.lineWidths;if(e.display){var l,u=t.ctx,d=Zn(n.fontColor,i.defaultFontColor),h=ut.options._parseFont(n),c=h.size;u.textAlign="left",u.textBaseline="middle",u.lineWidth=.5,u.strokeStyle=d,u.fillStyle=d,u.font=h.string;var f=$n(n,c),g=t.legendHitBoxes,m=t.isHorizontal();l=m?{x:t.left+(o-s[0])/2+n.padding,y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+n.padding,line:0};var p=c+n.padding;ut.each(t.legendItems,(function(i,d){var h=u.measureText(i.text).width,v=f+c/2+h,y=l.x,b=l.y;m?d>0&&y+v+n.padding>t.left+t.minSize.width&&(b=l.y+=p,l.line++,y=l.x=t.left+(o-s[l.line])/2+n.padding):d>0&&b+p>t.top+t.minSize.height&&(y=l.x=y+t.columnWidths[l.line]+n.padding,b=l.y=t.top+n.padding,l.line++),function(t,n,i){if(!(isNaN(f)||f<=0)){u.save();var o=Zn(i.lineWidth,r.borderWidth);if(u.fillStyle=Zn(i.fillStyle,a),u.lineCap=Zn(i.lineCap,r.borderCapStyle),u.lineDashOffset=Zn(i.lineDashOffset,r.borderDashOffset),u.lineJoin=Zn(i.lineJoin,r.borderJoinStyle),u.lineWidth=o,u.strokeStyle=Zn(i.strokeStyle,a),u.setLineDash&&u.setLineDash(Zn(i.lineDash,r.borderDash)),e.labels&&e.labels.usePointStyle){var s=f*Math.SQRT2/2;ut.canvas.drawPoint(u,i.pointStyle,s,t+f/2,n+c/2)}else 0!==o&&u.strokeRect(t,n,f,c),u.fillRect(t,n,f,c);u.restore()}}(y,b,i),g[d].left=y,g[d].top=b,function(t,e,n,i){var a=c/2,r=f+a+t,o=e+a;u.fillText(n.text,r,o),n.hidden&&(u.beginPath(),u.lineWidth=2,u.moveTo(r,o),u.lineTo(r+i,o),u.stroke())}(y,b,i,h),m?l.x+=v+n.padding:l.y+=p}))}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Jn(t,e){var n=new Xn({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.legend=n}var Kn={id:"legend",_element:Xn,beforeInit:function(t){var e=t.options.legend;e&&Jn(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(ut.mergeIf(e,ot.global.legend),n?(ve.configure(t,n,e),n.options=e):Jn(t,e)):n&&(ve.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Qn=ut.noop;ot._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ti=ft.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Qn,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Qn,beforeSetDimensions:Qn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Qn,beforeBuildLabels:Qn,buildLabels:Qn,afterBuildLabels:Qn,beforeFit:Qn,fit:function(){var t=this,e=t.options,n=e.display,i=t.minSize,a=ut.isArray(e.text)?e.text.length:1,r=ut.options._parseFont(e),o=n?a*r.lineHeight+2*e.padding:0;t.isHorizontal()?(i.width=t.maxWidth,i.height=o):(i.width=o,i.height=t.maxHeight),t.width=i.width,t.height=i.height},afterFit:Qn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=ut.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=ut.valueOrDefault(n.fontColor,ot.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(ut.isArray(g))for(var m=0,p=0;p<g.length;++p)e.fillText(g[p],0,m,i),m+=s;else e.fillText(g,0,0,i);e.restore()}}});function ei(t,e){var n=new ti({ctx:t.ctx,options:e,chart:t});ve.configure(t,n,e),ve.addBox(t,n),t.titleBlock=n}var ni={},ii=Gn,ai=Kn,ri={id:"title",_element:ti,beforeInit:function(t){var e=t.options.title;e&&ei(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(ut.mergeIf(e,ot.global.title),n?(ve.configure(t,n,e),n.options=e):ei(t,e)):n&&(ve.removeBox(t,n),delete t.titleBlock)}};for(var oi in ni.filler=ii,ni.legend=ai,ni.title=ri,Ge.helpers=ut,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=ut._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}ut.where=function(t,e){if(ut.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return ut.each(t,(function(t){e(t)&&n.push(t)})),n},ut.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},ut.findNextWhere=function(t,e,n){ut.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},ut.findPreviousWhere=function(t,e,n){ut.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},ut.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},ut.almostEquals=function(t,e,n){return Math.abs(t-e)<n},ut.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},ut.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},ut.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},ut.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},ut.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e},ut.toRadians=function(t){return t*(Math.PI/180)},ut.toDegrees=function(t){return t*(180/Math.PI)},ut._decimalPlaces=function(t){if(ut.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},ut.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},ut.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},ut.aliasPixel=function(t){return t%2==0?0:.5},ut._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},ut.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},ut.EPSILON=Number.EPSILON||1e-14,ut.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}i.mK=!n||n.model.skip?i.deltaK:!a||a.model.skip?n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?0:(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)a=d[e+1],(i=d[e]).model.skip||a.model.skip||(ut.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(a=e<h-1?d[e+1]:null,(n=e>0?d[e-1]:null)&&!n.model.skip&&(i.model.controlPointPreviousX=i.model.x-(u=(i.model.x-n.model.x)/3),i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(i.model.controlPointNextX=i.model.x+(u=(a.model.x-i.model.x)/3),i.model.controlPointNextY=i.model.y+u*i.mK))},ut.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},ut.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},ut.niceNum=function(t,e){var n=Math.floor(ut.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},ut.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},ut.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(ut.getStyle(r,"padding-left")),u=parseFloat(ut.getStyle(r,"padding-top")),d=parseFloat(ut.getStyle(r,"padding-right")),h=parseFloat(ut.getStyle(r,"padding-bottom")),c=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/(o.right-o.left-l-d)*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/c*r.height/e.currentDevicePixelRatio)}},ut.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},ut.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},ut._calculatePadding=function(t,e,n){return(e=ut.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},ut._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ut.getMaximumWidth=function(t){var e=ut._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-ut._calculatePadding(e,"padding-left",n)-ut._calculatePadding(e,"padding-right",n),a=ut.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},ut.getMaximumHeight=function(t){var e=ut._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-ut._calculatePadding(e,"padding-top",n)-ut._calculatePadding(e,"padding-bottom",n),a=ut.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},ut.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},ut.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},ut.fontString=function(t,e,n){return e+" "+t+"px "+n},ut.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o=0;ut.each(n,(function(e){null!=e&&!0!==ut.isArray(e)?o=ut.measureText(t,a,r,o,e):ut.isArray(e)&&ut.each(e,(function(e){null==e||ut.isArray(e)||(o=ut.measureText(t,a,r,o,e))}))}));var s=r.length/2;if(s>n.length){for(var l=0;l<s;l++)delete a[r[l]];r.splice(0,s)}return o},ut.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},ut.numberOfLabelLines=function(t){var e=1;return ut.each(t,(function(t){ut.isArray(t)&&t.length>e&&(e=t.length)})),e},ut.color=G?function(t){return t instanceof CanvasGradient&&(t=ot.global.defaultColor),G(t)}:function(t){return console.error("Color.js not found!"),t},ut.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:ut.color(t).saturate(.5).darken(.1).rgbString()}}(),Ge._adapters=$e,Ge.Animation=mt,Ge.animationService=pt,Ge.controllers=oe,Ge.DatasetController=_t,Ge.defaults=ot,Ge.Element=ft,Ge.elements=Wt,Ge.Interaction=fe,Ge.layouts=ve,Ge.platform=Te,Ge.plugins=Oe,Ge.Scale=en,Ge.scaleService=Ie,Ge.Ticks=Xe,Ge.Tooltip=ze,Ge.helpers.each(Wn,(function(t,e){Ge.scaleService.registerScaleType(e,t,t._defaults)})),ni)ni.hasOwnProperty(oi)&&Ge.plugins.register(ni[oi]);Ge.platform.initialize();var si=Ge;return"undefined"!=typeof window&&(window.Chart=Ge),Ge.Chart=Ge,Ge.Legend=ni.legend._element,Ge.Title=ni.title._element,Ge.pluginService=Ge.plugins,Ge.PluginBase=Ge.Element.extend({}),Ge.canvasHelpers=Ge.helpers.canvas,Ge.layoutService=Ge.layouts,Ge.LinearScaleBase=rn,Ge.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){Ge[t]=function(e,n){return new Ge(e,Ge.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),si}));
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.76632aba1e576c7cc54a.js.LICENSE.txt b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.76632aba1e576c7cc54a.js.LICENSE.txt
new file mode 100644 (file)
index 0000000..19e54e4
--- /dev/null
@@ -0,0 +1,6 @@
+/*!
+ * Chart.js v2.8.0
+ * https://www.chartjs.org
+ * (c) 2019 Chart.js Contributors
+ * Released under the MIT License
+ */
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.0d3cd206c82d5fe7076a.css b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.0d3cd206c82d5fe7076a.css
new file mode 100644 (file)
index 0000000..5dd57ee
--- /dev/null
@@ -0,0 +1,17 @@
+@charset "UTF-8";.toast-center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;text-shadow:0 1px 0 #fff}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0}.toast-container{pointer-events:none;position:fixed;z-index:999999}.toast-container *{box-sizing:border-box}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-container .ngx-toastr:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-info{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z'/%3E%3C/svg%3E")}.toast-error{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z'/%3E%3C/svg%3E")}.toast-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E")}.toast-container.toast-bottom-center .ngx-toastr,.toast-container.toast-top-center .ngx-toastr{width:300px;margin-left:auto;margin-right:auto}.toast-container.toast-bottom-full-width .ngx-toastr,.toast-container.toast-top-full-width .ngx-toastr{width:96%;margin-left:auto;margin-right:auto}.ngx-toastr{background-color:#030303;pointer-events:auto}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512' width='576' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'/%3E%3C/svg%3E");background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width:240px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:11em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:18em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){.toast-container .ngx-toastr.div{padding:15px 15px 15px 50px;width:25em}}.bs-datepicker{display:flex;align-items:stretch;flex-flow:row wrap;background:#fff;box-shadow:0 0 10px 0 #aaa;position:relative;z-index:1}.bs-datepicker:after{clear:both;content:'';display:block}.bs-datepicker bs-day-picker{float:left}.bs-datepicker button:active,.bs-datepicker button:focus,.bs-datepicker button:hover,.bs-datepicker input:active,.bs-datepicker input:focus,.bs-datepicker input:hover,.bs-datepicker-btns button:active,.bs-datepicker-btns button:focus,.bs-datepicker-btns button:hover,.bs-datepicker-predefined-btns button:active,.bs-datepicker-predefined-btns button:focus{outline:0}.bs-datepicker-head{min-width:270px;height:50px;padding:10px;border-radius:3px 3px 0 0;text-align:justify}.bs-datepicker-head:after{content:"";display:inline-block;vertical-align:top;width:100%}.bs-datepicker-head button{display:inline-block;vertical-align:top;padding:0;height:30px;line-height:30px;border:0;background:0 0;text-align:center;cursor:pointer;color:#fff;transition:.3s}.bs-datepicker-head button[disabled],.bs-datepicker-head button[disabled]:active,.bs-datepicker-head button[disabled]:hover{background:rgba(221,221,221,.3);color:#f5f5f5;cursor:not-allowed}.bs-datepicker-head button.next,.bs-datepicker-head button.previous{border-radius:50%;width:30px;height:30px}.bs-datepicker-head button.next span,.bs-datepicker-head button.previous span{font-size:28px;line-height:1;display:inline-block;position:relative;height:100%;width:100%;border-radius:50%}.bs-datepicker-head button.current{border-radius:15px;max-width:155px;padding:0 13px}.bs-datepicker-head button:hover{background-color:rgba(0,0,0,.1)}.bs-datepicker-head button:active{background-color:rgba(0,0,0,.2)}.bs-datepicker-body{padding:10px;border-radius:0 0 3px 3px;min-height:232px;min-width:278px;border:1px solid #e9edf0}.bs-datepicker-body .days.weeks{position:relative;z-index:1}.bs-datepicker-body table{width:100%;border-collapse:separate;border-spacing:0}.bs-datepicker-body table th{font-size:13px;color:#9aaec1;font-weight:400;text-align:center}.bs-datepicker-body table td{color:#54708b;text-align:center;position:relative;padding:0}.bs-datepicker-body table td span{display:block;margin:0 auto;font-size:13px;border-radius:50%;position:relative;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.bs-datepicker-body table td:not(.disabled):not(.week) span:not(.disabled):not(.is-other-month){cursor:pointer}.bs-datepicker-body table td span.is-highlighted:not(.disabled):not(.selected),.bs-datepicker-body table td.is-highlighted:not(.disabled):not(.selected) span{background-color:#e9edf0;transition:0s}.bs-datepicker-body table td span.is-active-other-month:not(.disabled):not(.selected),.bs-datepicker-body table td.is-active-other-month:not(.disabled):not(.selected) span{background-color:#e9edf0;transition:0s;cursor:pointer}.bs-datepicker-body table td span.disabled,.bs-datepicker-body table td.disabled span{color:#9aaec1}.bs-datepicker-body table td span.selected,.bs-datepicker-body table td.selected span{color:#fff}.bs-datepicker-body table td span.is-other-month,.bs-datepicker-body table td.is-other-month span{color:rgba(0,0,0,.25)}.bs-datepicker-body table td.active{position:relative}.bs-datepicker-body table td.active.select-start:before{left:35%}.bs-datepicker-body table td.active.select-end:before{left:-85%}.bs-datepicker-body table td span.active.select-end:after,.bs-datepicker-body table td span.active.select-start:after,.bs-datepicker-body table td.active.select-end span:after,.bs-datepicker-body table td.active.select-start span:after{content:"";display:block;position:absolute;z-index:-1;width:100%;height:100%;transition:.3s;top:0;border-radius:50%}.bs-datepicker-body table td span:before,.bs-datepicker-body table td:before{content:"";display:block;position:absolute;z-index:-1;top:6px;bottom:6px;left:-2px;right:-2px;box-sizing:content-box;background:0 0}.bs-datepicker-body table td.active.select-start+td.active:before{left:-20%}.bs-datepicker-body table td:last-child.active:before{border-radius:0 3px 3px 0;width:125%;left:-25%}.bs-datepicker-body table td span[class*=select-],.bs-datepicker-body table td[class*=select-] span{border-radius:50%;color:#fff}.bs-datepicker-body table.days span.active:not(.select-start):before,.bs-datepicker-body table.days span.in-range:not(.select-start):before,.bs-datepicker-body table.days td.active:not(.select-start):before,.bs-datepicker-body table.days td.in-range:not(.select-start):before{background:#e9edf0}.bs-datepicker-body table.days span{width:32px;height:32px;line-height:32px}.bs-datepicker-body table.days span.select-start{z-index:2}.bs-datepicker-body table.days span.in-range.select-end:before,.bs-datepicker-body table.days span.is-highlighted.in-range:before{background:0 0;right:0;left:0}.bs-datepicker-body table.days td.active+td.is-highlighted:before,.bs-datepicker-body table.days td.active+td.select-end:before,.bs-datepicker-body table.days td.in-range+td.is-highlighted:before,.bs-datepicker-body table.days td.in-range+td.select-end:before,.bs-datepicker-body table.days td.select-start+td.is-highlighted:before,.bs-datepicker-body table.days td.select-start+td.select-end:before{background:#e9edf0;width:100%}.bs-datepicker-body table.weeks tr td:nth-child(2).active:before{border-radius:3px 0 0 3px;left:0;width:100%}.bs-datepicker-body table:not(.weeks) tr td:first-child:before{border-radius:3px 0 0 3px}.bs-datepicker-body table.years td span{width:46px;height:46px;line-height:45px;margin:0 auto}.bs-datepicker-body table.years tr:not(:last-child) td span{margin-bottom:8px}.bs-datepicker-body table.months td{height:52px}.bs-datepicker-body table.months td span{padding:6px;border-radius:15px}.bs-datepicker .current-timedate{color:#54708b;font-size:15px;text-align:center;height:30px;line-height:30px;border-radius:20px;border:1px solid #e9edf0;margin-bottom:10px;cursor:pointer;text-transform:uppercase;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.bs-datepicker .current-timedate span:not(:empty):before{content:"";width:15px;height:16px;display:inline-block;margin-right:4px;vertical-align:text-bottom;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAABMklEQVQoU9VTwW3CQBCcOUgBtEBKSAukAnBKME+wFCAlYIhk8sQlxFABtJAScAsuAPBEewYcxCP8ouxrPDsza61uiVN1o6RNHD4htSCmq49RfO71BvMJqBBkITRf1kmUW49nQRC9h1I5AZlBClaL8aP1fKgOOxCx8aSLs+Q19eZuNO8QmPqJRtDFguy7OAcDbJPs+/BKVPDIPrvD2ZJgWAmVe7O0rI0Vqs1seyWUXpuJoppYCa5L+U++NpNPkr5OE2oMdARsb3gykJT5ydZcL8Z9Ww60nxg2LhjON9li9OwXZzo+xLbp3nC2s9CL2RrueGyVrgwNm8HpsCzZ9EEW6kqXlo1GQe03FzP/7W8Hl0dBtu7Bf7zt6mIwvX1RvzDCm7+q3mAW0Dl/GPdUCeXrZLT9BrDrGkm4qlPvAAAAAElFTkSuQmCC)}.bs-datepicker-multiple{border-radius:4px 0 0 4px}.bs-datepicker-multiple+.bs-datepicker-multiple{margin-left:10px}.bs-datepicker-multiple .bs-datepicker{box-shadow:none;position:relative}.bs-datepicker-multiple .bs-datepicker:not(:last-child){padding-right:10px}.bs-datepicker-multiple .bs-datepicker+.bs-datepicker:after{content:"";display:block;width:14px;height:10px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAA1ElEQVQoU42RsQrCUAxF77VuDu7O4oMWW//BURBBpZvgKk4uIrjoqKOTf+DopIO4uYggtFTfw3+pkQqCW1/G5J7kJiFy4m5MxUlxAzgIPHX+lzMPzupRYlYgxiR7vqsOP8YKzsTx0yxFMCUZ+q7aZzlr+OvgoWcAFyAHgat2jLWu48252DdqAihDJGSSJNUUxYmQjs3+hPQBlAh2rG2LCOPnaw3IiGDX99TRCs7ASJsNhUOA7d/LcuHvRG22FIZvsNXw1MX6VZExCilOQKEfeLXr/10+aC9Ho7arh7oAAAAASUVORK5CYII=);position:absolute;top:25px;left:-8px}.bs-datepicker-multiple .bs-datepicker .left{float:left}.bs-datepicker-multiple .bs-datepicker .right{float:right}.bs-datepicker-container{padding:15px}.bs-datepicker .bs-media-container{display:flex}@media (max-width:768px){.bs-datepicker .bs-media-container{flex-direction:column}}.bs-datepicker-custom-range{padding:15px;background:#eee}.bs-datepicker-predefined-btns button{width:100%;display:block;height:30px;background-color:#9aaec1;border-radius:4px;color:#fff;border:0;margin-bottom:10px;padding:0 18px;text-align:left;transition:.3s}.bs-datepicker-predefined-btns button:active,.bs-datepicker-predefined-btns button:hover{background-color:#54708b}.bs-datepicker-buttons{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-top:10px;border-top:1px solid #e9edf0}.bs-datepicker-buttons .btn-default{margin-left:10px}.bs-timepicker-container{padding:10px 0}.bs-timepicker-label{color:#54708b;margin-bottom:10px}.bs-timepicker-controls{display:inline-block;vertical-align:top;margin-right:10px}.bs-timepicker-controls button{width:20px;height:20px;border-radius:50%;border:0;background-color:#e9edf0;color:#54708b;font-size:16px;font-weight:700;vertical-align:middle;line-height:0;padding:0;transition:.3s}.bs-timepicker-controls button:hover{background-color:#d5dadd}.bs-timepicker-controls input{width:35px;height:25px;border-radius:13px;text-align:center;border:1px solid #e9edf0}.bs-timepicker .switch-time-format{text-transform:uppercase;min-width:54px;height:25px;border-radius:20px;border:1px solid #e9edf0;background:#fff;color:#54708b;font-size:13px}.bs-timepicker .switch-time-format img{vertical-align:initial;margin-left:4px}bs-datepicker-container,bs-daterangepicker-container{z-index:1080}@media (max-width:768px){.bs-datepicker-multiple{display:flex}.bs-datepicker-multiple+.bs-datepicker-multiple{margin-top:10px;margin-left:0}}.theme-default .bs-datepicker-body table td span.selected,.theme-default .bs-datepicker-body table td span[class*=select-]:after,.theme-default .bs-datepicker-body table td.selected span,.theme-default .bs-datepicker-body table td[class*=select-] span:after,.theme-default .bs-datepicker-head{background-color:#777}.theme-default .bs-datepicker-body table td.week span{color:#777}.theme-default .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#777;color:#fff;opacity:.5;transition:0s}.theme-green .bs-datepicker-body table td span.selected,.theme-green .bs-datepicker-body table td span[class*=select-]:after,.theme-green .bs-datepicker-body table td.selected span,.theme-green .bs-datepicker-body table td[class*=select-] span:after,.theme-green .bs-datepicker-head{background-color:#5cb85c}.theme-green .bs-datepicker-body table td.week span{color:#5cb85c}.theme-green .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#5cb85c;color:#fff;opacity:.5;transition:0s}.theme-blue .bs-datepicker-body table td span.selected,.theme-blue .bs-datepicker-body table td span[class*=select-]:after,.theme-blue .bs-datepicker-body table td.selected span,.theme-blue .bs-datepicker-body table td[class*=select-] span:after,.theme-blue .bs-datepicker-head{background-color:#5bc0de}.theme-blue .bs-datepicker-body table td.week span{color:#5bc0de}.theme-blue .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#5bc0de;color:#fff;opacity:.5;transition:0s}.theme-dark-blue .bs-datepicker-body table td span.selected,.theme-dark-blue .bs-datepicker-body table td span[class*=select-]:after,.theme-dark-blue .bs-datepicker-body table td.selected span,.theme-dark-blue .bs-datepicker-body table td[class*=select-] span:after,.theme-dark-blue .bs-datepicker-head{background-color:#337ab7}.theme-dark-blue .bs-datepicker-body table td.week span{color:#337ab7}.theme-dark-blue .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#337ab7;color:#fff;opacity:.5;transition:0s}.theme-red .bs-datepicker-body table td span.selected,.theme-red .bs-datepicker-body table td span[class*=select-]:after,.theme-red .bs-datepicker-body table td.selected span,.theme-red .bs-datepicker-body table td[class*=select-] span:after,.theme-red .bs-datepicker-head{background-color:#d9534f}.theme-red .bs-datepicker-body table td.week span{color:#d9534f}.theme-red .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#d9534f;color:#fff;opacity:.5;transition:0s}.theme-orange .bs-datepicker-body table td span.selected,.theme-orange .bs-datepicker-body table td span[class*=select-]:after,.theme-orange .bs-datepicker-body table td.selected span,.theme-orange .bs-datepicker-body table td[class*=select-] span:after,.theme-orange .bs-datepicker-head{background-color:#f0ad4e}.theme-orange .bs-datepicker-body table td.week span{color:#f0ad4e}.theme-orange .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#f0ad4e;color:#fff;opacity:.5;transition:0s}.tree-children.tree-children-no-padding{padding-left:0}.node-drop-slot{display:block;height:2px}.node-drop-slot.is-dragging-over{background:#dfe;height:20px;border:2px dotted #888}.toggle-children-wrapper-expanded .toggle-children{transform:rotate(90deg)}.toggle-children-wrapper-collapsed .toggle-children{transform:rotate(0)}.toggle-children-wrapper{padding:2px 3px 5px 1px}.toggle-children{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYzRkRFQjcxODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYzRkRFQjcwODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTk5NzA1OGEtZDI3OC00NDZkLWE4ODgtNGM4MGQ4YWI1NzNmIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzRkZmQxMGMtY2NlNS0xMTc4LWE5OGQtY2NkZmM5ODk5YWYwIi8+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+Z2x5cGhpY29uczwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+5iogFwAAAGhJREFUeNpiYGBgKABigf///zOQg0EARH4A4gZyDIIZ8B/JoAJKDIDhB0CcQIkBRBtEyABkgxwoMQCGD6AbRKoBGAYxQgXIBRuZGKgAKPIC3QLxArnRSHZCIjspk52ZKMrOFBUoAAEGAKnq593MQAZtAAAAAElFTkSuQmCC);height:8px;width:9px;background-size:contain;display:inline-block;position:relative;top:1px;background-repeat:no-repeat;background-position:center}.toggle-children-placeholder{display:inline-block;height:10px;width:10px;position:relative;top:1px;padding-right:3px}.node-content-wrapper{display:inline-block;padding:2px 5px;border-radius:2px;transition:background-color .15s,box-shadow .15s}.node-wrapper{display:flex;align-items:flex-start}.node-content-wrapper-active,.node-content-wrapper-active.node-content-wrapper-focused,.node-content-wrapper.node-content-wrapper-active:hover{background:#beebff}.node-content-wrapper-focused{background:#e7f4f9}.node-content-wrapper:hover{background:#f7fbff}.node-content-wrapper-active,.node-content-wrapper-focused,.node-content-wrapper:hover{box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over{background:#dfe;box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over-disabled{opacity:.5}tree-viewport{-webkit-tap-highlight-color:transparent;height:100%;overflow:auto;display:block}.tree-children{overflow:hidden;padding-left:20px}.empty-tree-drop-slot .node-drop-slot{height:20px;min-width:100px}.angular-tree-component{width:100%;position:relative;display:inline-block;cursor:pointer;-webkit-touch-callout:none;-moz-user-select:none;user-select:none}tree-root .angular-tree-component-rtl{direction:rtl}tree-root .angular-tree-component-rtl .toggle-children-wrapper-collapsed .toggle-children{transform:rotate(180deg)!important}tree-root .angular-tree-component-rtl .tree-children{padding-right:20px;padding-left:0}tree-node-checkbox{padding:1px}/*!
+ * Bootstrap v4.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 The Bootstrap Authors
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#2b99a8;--secondary:#ef5c55;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#777777;--warning-dark:#fd7e14;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--breakpoint-2xl:1450px;--font-family-sans-serif:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#2b99a8;text-decoration:none;background-color:transparent}a:hover{color:#1b626b;text-decoration:underline}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row,cd-about dl{display:flex;flex-wrap:wrap}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.cd-col-form,.cd-col-form-input,.cd-col-form-label,.cd-col-form-offset,.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-2xl,.col-2xl-1,.col-2xl-10,.col-2xl-11,.col-2xl-12,.col-2xl-2,.col-2xl-3,.col-2xl-4,.col-2xl-5,.col-2xl-6,.col-2xl-7,.col-2xl-8,.col-2xl-9,.col-2xl-auto,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto,cd-about dd,cd-about dt,cd-health cd-info-card,cd-health cd-info-card.cd-capacity-card,cd-health cd-info-card.cd-chart-card,cd-health cd-info-card.cd-performance-card,cd-health cd-info-card.cd-status-card,cd-modal .cd-col-form-input,cd-modal .cd-col-form-label,cd-modal .cd-col-form-offset{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4,cd-about dt{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8,cd-about dd{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.cd-col-form,.col-12,cd-health cd-info-card{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.cd-col-form-label,.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form-input,.cd-col-form-offset,.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12,cd-health cd-info-card{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.cd-col-form-offset,.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.cd-col-form-label,.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6,cd-health cd-info-card{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form-input,.cd-col-form-offset,.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12,cd-health cd-info-card.cd-chart-card{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.cd-col-form-label,.col-lg-3,cd-health cd-info-card.cd-capacity-card{flex:0 0 25%;max-width:25%}.col-lg-4,cd-health cd-info-card,cd-modal .cd-col-form-label{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6,cd-health cd-info-card.cd-chart-card,cd-health cd-info-card.cd-performance-card{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form,.col-lg-8,cd-modal .cd-col-form-input,cd-modal .cd-col-form-offset{flex:0 0 66.6666666667%;max-width:66.6666666667%}.cd-col-form-input,.cd-col-form-offset,.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.cd-col-form-offset,.offset-lg-3{margin-left:25%}.offset-lg-4,cd-modal .cd-col-form-offset{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl,cd-health cd-info-card.cd-capacity-card,cd-health cd-info-card.cd-performance-card{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3,cd-health cd-info-card.cd-status-card{flex:0 0 25%;max-width:25%}.col-xl-4,cd-health cd-info-card.cd-chart-card{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.cd-col-form,.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}@media (min-width:1450px){.col-2xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-2xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-2xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-2xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-2xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-2xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-2xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-2xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2xl-3,cd-health cd-info-card.cd-chart-card{flex:0 0 25%;max-width:25%}.col-2xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-2xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-2xl-6{flex:0 0 50%;max-width:50%}.col-2xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-2xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-2xl-9{flex:0 0 75%;max-width:75%}.col-2xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-2xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-2xl-12{flex:0 0 100%;max-width:100%}.order-2xl-first{order:-1}.order-2xl-last{order:13}.order-2xl-0{order:0}.order-2xl-1{order:1}.order-2xl-2{order:2}.order-2xl-3{order:3}.order-2xl-4{order:4}.order-2xl-5{order:5}.order-2xl-6{order:6}.order-2xl-7{order:7}.order-2xl-8{order:8}.order-2xl-9{order:9}.order-2xl-10{order:10}.order-2xl-11{order:11}.order-2xl-12{order:12}.offset-2xl-0{margin-left:0}.offset-2xl-1{margin-left:8.3333333333%}.offset-2xl-2{margin-left:16.6666666667%}.offset-2xl-3{margin-left:25%}.offset-2xl-4{margin-left:33.3333333333%}.offset-2xl-5{margin-left:41.6666666667%}.offset-2xl-6{margin-left:50%}.offset-2xl-7{margin-left:58.3333333333%}.offset-2xl-8{margin-left:66.6666666667%}.offset-2xl-9{margin-left:75%}.offset-2xl-10{margin-left:83.3333333333%}.offset-2xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c4e2e7}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#91cad2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b2d9e0}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#fbd1cf}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#f7aaa7}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#f9bab7}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#d9d9d9}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#b8b8b8}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#ccc}.table-warning-dark,.table-warning-dark>td,.table-warning-dark>th{background-color:#fedbbd}.table-warning-dark tbody+tbody,.table-warning-dark td,.table-warning-dark th,.table-warning-dark thead th{border-color:#febc85}.table-hover .table-warning-dark:hover,.table-hover .table-warning-dark:hover>td,.table-hover .table-warning-dark:hover>th{background-color:#fecda4}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}@media (max-width:1449.98px){.table-responsive-2xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-2xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.cd-form-control,.form-control{width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.cd-form-control,.form-control{transition:none}}.cd-form-control::-ms-expand,.form-control::-ms-expand{background-color:transparent;border:0}.cd-form-control:-moz-focusring,.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.cd-form-control:focus,.form-control:focus{color:#495057;background-color:#fff;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.cd-form-control::placeholder,.form-control::placeholder{color:#6c757d;opacity:1}.cd-form-control:disabled,.form-control:disabled,.form-control[readonly],[readonly].cd-form-control{background-color:#e9ecef;opacity:1}select.cd-form-control:focus::-ms-value,select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.cd-col-form-label,.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],select[multiple].cd-form-control,select[size].cd-form-control,textarea.cd-form-control,textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.is-valid.cd-form-control,.was-validated .cd-form-control:valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.is-valid.cd-form-control:focus,.was-validated .cd-form-control:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.cd-form-control:valid,.was-validated textarea.form-control:valid,textarea.form-control.is-valid,textarea.is-valid.cd-form-control{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat #fff}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.is-invalid.cd-form-control,.was-validated .cd-form-control:invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.is-invalid.cd-form-control:focus,.was-validated .cd-form-control:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.cd-form-control:invalid,.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid,textarea.is-invalid.cd-form-control{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat #fff}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .cd-form-control,.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-primary:hover{color:#fff;background-color:#237d8a;border-color:#21747f}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#237d8a;border-color:#21747f;box-shadow:0 0 0 .2rem rgba(75,168,181,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#21747f;border-color:#1e6b75}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(75,168,181,.5)}.btn-secondary{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-secondary:hover{color:#fff;background-color:#ec3a32;border-color:#eb2f26}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#ec3a32;border-color:#eb2f26;box-shadow:0 0 0 .2rem rgba(241,116,111,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#eb2f26;border-color:#ea241b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(241,116,111,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529}.btn-light:hover{color:#212529}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#777;border-color:#777}.btn-dark:hover{color:#fff;background-color:#646464;border-color:#5e5e5e}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#646464;border-color:#5e5e5e;box-shadow:0 0 0 .2rem rgba(139,139,139,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#777;border-color:#777}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#5e5e5e;border-color:#575757}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(139,139,139,.5)}.btn-warning-dark{color:#212529;background-color:#fd7e14;border-color:#fd7e14}.btn-warning-dark:hover{color:#fff;background-color:#e96b02;border-color:#dc6502}.btn-warning-dark.focus,.btn-warning-dark:focus{color:#fff;background-color:#e96b02;border-color:#dc6502;box-shadow:0 0 0 .2rem rgba(220,113,23,.5)}.btn-warning-dark.disabled,.btn-warning-dark:disabled{color:#212529;background-color:#fd7e14;border-color:#fd7e14}.btn-warning-dark:not(:disabled):not(.disabled).active,.btn-warning-dark:not(:disabled):not(.disabled):active,.show>.btn-warning-dark.dropdown-toggle{color:#fff;background-color:#dc6502;border-color:#cf5f02}.btn-warning-dark:not(:disabled):not(.disabled).active:focus,.btn-warning-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-warning-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,113,23,.5)}.btn-outline-primary{color:#2b99a8;border-color:#2b99a8}.btn-outline-primary:hover{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#2b99a8;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.btn-outline-secondary{color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary:hover{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ef5c55;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#777;border-color:#777}.btn-outline-dark:hover{color:#fff;background-color:#777;border-color:#777}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#777;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#777;border-color:#777}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.btn-outline-warning-dark{color:#fd7e14;border-color:#fd7e14}.btn-outline-warning-dark:hover{color:#212529;background-color:#fd7e14;border-color:#fd7e14}.btn-outline-warning-dark.focus,.btn-outline-warning-dark:focus{box-shadow:0 0 0 .2rem rgba(253,126,20,.5)}.btn-outline-warning-dark.disabled,.btn-outline-warning-dark:disabled{color:#fd7e14;background-color:transparent}.btn-outline-warning-dark:not(:disabled):not(.disabled).active,.btn-outline-warning-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-warning-dark.dropdown-toggle{color:#212529;background-color:#fd7e14;border-color:#fd7e14}.btn-outline-warning-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-warning-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(253,126,20,.5)}.btn-link{font-weight:400;color:#2b99a8;text-decoration:none}.btn-link:hover{color:#1b626b;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}@media (min-width:1450px){.dropdown-menu-2xl-left{right:auto;left:0}.dropdown-menu-2xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;vertical-align:0}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent;vertical-align:0}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#2b99a8}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.cd-form-control,.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.cd-form-control+.cd-form-control,.input-group>.cd-form-control+.custom-file,.input-group>.cd-form-control+.custom-select,.input-group>.cd-form-control+.form-control,.input-group>.custom-file+.cd-form-control,.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.cd-form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.cd-form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.cd-form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.cd-form-control:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.cd-form-control:not(:last-child),.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.cd-form-control:not(:first-child),.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.cd-form-control:not(textarea),.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.cd-form-control,.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.cd-form-control:not(textarea),.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.cd-form-control,.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#2b99a8;background-color:#2b99a8}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#76d0dc}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#9fdee6;border-color:#9fdee6}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:1px solid #adb5bd}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#2b99a8;background-color:#2b99a8}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat #fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76d0dc;outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76d0dc;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.collapsing,.custom-switch .custom-control-label::after{transition:none}.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#9fdee6}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#9fdee6}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#9fdee6}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#2b99a8}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:center center/100% 100% no-repeat}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (max-width:1449.98px){.navbar-expand-2xl>.container,.navbar-expand-2xl>.container-fluid,.navbar-expand-2xl>.container-lg,.navbar-expand-2xl>.container-md,.navbar-expand-2xl>.container-sm,.navbar-expand-2xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1450px){.navbar-expand-2xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-2xl .navbar-nav{flex-direction:row}.navbar-expand-2xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-2xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-2xl>.container,.navbar-expand-2xl>.container-fluid,.navbar-expand-2xl>.container-lg,.navbar-expand-2xl>.container-md,.navbar-expand-2xl>.container-sm,.navbar-expand-2xl>.container-xl{flex-wrap:nowrap}.navbar-expand-2xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-2xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card,pre{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr,pre>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child,pre>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child,pre>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card,.card-deck pre{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card,.card-deck pre{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card,.card-group>pre{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card,.card-group>pre{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.card-group>.card+pre,.card-group>pre+.card,.card-group>pre+pre{margin-left:0;border-left:0}.card-group>.card:not(:last-child),.card-group>pre:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top,.card-group>pre:not(:last-child) .card-header,.card-group>pre:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom,.card-group>pre:not(:last-child) .card-footer,.card-group>pre:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child),.card-group>pre:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top,.card-group>pre:not(:first-child) .card-header,.card-group>pre:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom,.card-group>pre:not(:first-child) .card-footer,.card-group>pre:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns pre{display:inline-block;width:100%}}.card-columns .card,.card-columns pre{margin-bottom:.75rem}.accordion>.card,.accordion>pre{overflow:hidden}.accordion>.card:not(:last-of-type),.accordion>pre:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type),.accordion>pre:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header,.accordion>pre>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination,cd-table .cd-datatable .datatable-footer .datatable-pager ul{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#2b99a8;background-color:#fff;border:1px solid #dee2e6}.page-link:hover,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:hover{z-index:2;color:#1b626b;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.page-item:first-child .page-link,.page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link,.page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link,.page-item.active cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.active a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active a{z-index:3;color:#fff;background-color:#2b99a8;border-color:#2b99a8}.page-item.disabled .page-link,.page-item.disabled cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.disabled a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled a{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg a{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link,.pagination-lg .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:first-child a{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link,.pagination-lg .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:last-child a{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm a{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link,.pagination-sm .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:first-child a{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link,.pagination-sm .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:last-child a{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:1rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#2b99a8}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#21747f}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.badge-secondary{color:#fff;background-color:#ef5c55}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#eb2f26}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#777}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#5e5e5e}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.badge-warning-dark{color:#212529;background-color:#fd7e14}a.badge-warning-dark:focus,a.badge-warning-dark:hover{color:#212529;background-color:#dc6502}a.badge-warning-dark.focus,a.badge-warning-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(253,126,20,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#165057;background-color:#d5ebee;border-color:#c4e2e7}.alert-primary hr{border-top-color:#b2d9e0}.alert-primary .alert-link{color:#0c2b2e}.alert-secondary{color:#7c302c;background-color:#fcdedd;border-color:#fbd1cf}.alert-secondary hr{border-top-color:#f9bab7}.alert-secondary .alert-link{color:#56211f}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#3e3e3e;background-color:#e4e4e4;border-color:#d9d9d9}.alert-dark hr{border-top-color:#ccc}.alert-dark .alert-link{color:#252525}.alert-warning-dark{color:#84420a;background-color:#ffe5d0;border-color:#fedbbd}.alert-warning-dark hr{border-top-color:#fecda4}.alert-warning-dark .alert-link{color:#552a06}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#2b99a8;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#2b99a8;border-color:#2b99a8}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1450px){.list-group-horizontal-2xl{flex-direction:row}.list-group-horizontal-2xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-2xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-2xl .list-group-item.active{margin-top:0}.list-group-horizontal-2xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-2xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#165057;background-color:#c4e2e7}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#165057;background-color:#b2d9e0}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#165057;border-color:#165057}.list-group-item-secondary{color:#7c302c;background-color:#fbd1cf}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#7c302c;background-color:#f9bab7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#7c302c;border-color:#7c302c}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#3e3e3e;background-color:#d9d9d9}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#3e3e3e;background-color:#ccc}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#3e3e3e;border-color:#3e3e3e}.list-group-item-warning-dark{color:#84420a;background-color:#fedbbd}.list-group-item-warning-dark.list-group-item-action:focus,.list-group-item-warning-dark.list-group-item-action:hover{color:#84420a;background-color:#fecda4}.list-group-item-warning-dark.list-group-item-action.active{color:#fff;background-color:#84420a;border-color:#84420a}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}.progress-bar-animated{animation:none}.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;text-align:center;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:350px;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right,.carousel-item{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev,.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#2b99a8!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#21747f!important}.bg-secondary{background-color:#ef5c55!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#eb2f26!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light,pre{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#777!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#5e5e5e!important}.bg-warning-dark{background-color:#fd7e14!important}a.bg-warning-dark:focus,a.bg-warning-dark:hover,button.bg-warning-dark:focus,button.bg-warning-dark:hover{background-color:#dc6502!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom,.cd-header,legend{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#2b99a8!important}.border-secondary{border-color:#ef5c55!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#777!important}.border-warning-dark{border-color:#fd7e14!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex,cd-health cd-info-card{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media (min-width:1450px){.d-2xl-none{display:none!important}.d-2xl-inline{display:inline!important}.d-2xl-inline-block{display:inline-block!important}.d-2xl-block{display:block!important}.d-2xl-table{display:table!important}.d-2xl-table-row{display:table-row!important}.d-2xl-table-cell{display:table-cell!important}.d-2xl-flex{display:flex!important}.d-2xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column,cd-health cd-info-card{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);white-space:nowrap}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.btn-toolbar cd-table-actions.btn-group,.mr-2,.mx-2,cd-logs label{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3,cd-logs .form-inline>.form-group{margin-right:1rem!important}.mb-3,.my-3,cd-logs .form-inline>.form-group{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.cd-header,.mt-4,.my-4,legend{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.cd-header,.mb-4,.my-4,cd-health cd-info-card,legend{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.cd-header,.pb-1,.py-1,legend{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2,cd-table .cd-datatable .datatable-footer,pre{padding:.5rem!important}.pt-2,.py-2,cd-info-card .card .card-body .card-text,cd-info-card pre .card-body .card-text{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2,cd-info-card .card,cd-info-card pre{padding-bottom:.5rem!important}.pl-2,.px-2,cd-info-card .card .card-body .card-title,cd-info-card pre .card-body .card-title{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1450px){.flex-2xl-row{flex-direction:row!important}.flex-2xl-column{flex-direction:column!important}.flex-2xl-row-reverse{flex-direction:row-reverse!important}.flex-2xl-column-reverse{flex-direction:column-reverse!important}.flex-2xl-wrap{flex-wrap:wrap!important}.flex-2xl-nowrap{flex-wrap:nowrap!important}.flex-2xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-2xl-fill{flex:1 1 auto!important}.flex-2xl-grow-0{flex-grow:0!important}.flex-2xl-grow-1{flex-grow:1!important}.flex-2xl-shrink-0{flex-shrink:0!important}.flex-2xl-shrink-1{flex-shrink:1!important}.justify-content-2xl-start{justify-content:flex-start!important}.justify-content-2xl-end{justify-content:flex-end!important}.justify-content-2xl-center{justify-content:center!important}.justify-content-2xl-between{justify-content:space-between!important}.justify-content-2xl-around{justify-content:space-around!important}.align-items-2xl-start{align-items:flex-start!important}.align-items-2xl-end{align-items:flex-end!important}.align-items-2xl-center{align-items:center!important}.align-items-2xl-baseline{align-items:baseline!important}.align-items-2xl-stretch{align-items:stretch!important}.align-content-2xl-start{align-content:flex-start!important}.align-content-2xl-end{align-content:flex-end!important}.align-content-2xl-center{align-content:center!important}.align-content-2xl-between{align-content:space-between!important}.align-content-2xl-around{align-content:space-around!important}.align-content-2xl-stretch{align-content:stretch!important}.align-self-2xl-auto{align-self:auto!important}.align-self-2xl-start{align-self:flex-start!important}.align-self-2xl-end{align-self:flex-end!important}.align-self-2xl-center{align-self:center!important}.align-self-2xl-baseline{align-self:baseline!important}.align-self-2xl-stretch{align-self:stretch!important}.float-2xl-left{float:left!important}.float-2xl-right{float:right!important}.float-2xl-none{float:none!important}.m-2xl-0{margin:0!important}.mt-2xl-0,.my-2xl-0{margin-top:0!important}.mr-2xl-0,.mx-2xl-0{margin-right:0!important}.mb-2xl-0,.my-2xl-0{margin-bottom:0!important}.ml-2xl-0,.mx-2xl-0{margin-left:0!important}.m-2xl-1{margin:.25rem!important}.mt-2xl-1,.my-2xl-1{margin-top:.25rem!important}.mr-2xl-1,.mx-2xl-1{margin-right:.25rem!important}.mb-2xl-1,.my-2xl-1{margin-bottom:.25rem!important}.ml-2xl-1,.mx-2xl-1{margin-left:.25rem!important}.m-2xl-2{margin:.5rem!important}.mt-2xl-2,.my-2xl-2{margin-top:.5rem!important}.mr-2xl-2,.mx-2xl-2{margin-right:.5rem!important}.mb-2xl-2,.my-2xl-2{margin-bottom:.5rem!important}.ml-2xl-2,.mx-2xl-2{margin-left:.5rem!important}.m-2xl-3{margin:1rem!important}.mt-2xl-3,.my-2xl-3{margin-top:1rem!important}.mr-2xl-3,.mx-2xl-3{margin-right:1rem!important}.mb-2xl-3,.my-2xl-3{margin-bottom:1rem!important}.ml-2xl-3,.mx-2xl-3{margin-left:1rem!important}.m-2xl-4{margin:1.5rem!important}.mt-2xl-4,.my-2xl-4{margin-top:1.5rem!important}.mr-2xl-4,.mx-2xl-4{margin-right:1.5rem!important}.mb-2xl-4,.my-2xl-4{margin-bottom:1.5rem!important}.ml-2xl-4,.mx-2xl-4{margin-left:1.5rem!important}.m-2xl-5{margin:3rem!important}.mt-2xl-5,.my-2xl-5{margin-top:3rem!important}.mr-2xl-5,.mx-2xl-5{margin-right:3rem!important}.mb-2xl-5,.my-2xl-5{margin-bottom:3rem!important}.ml-2xl-5,.mx-2xl-5{margin-left:3rem!important}.p-2xl-0{padding:0!important}.pt-2xl-0,.py-2xl-0{padding-top:0!important}.pr-2xl-0,.px-2xl-0{padding-right:0!important}.pb-2xl-0,.py-2xl-0{padding-bottom:0!important}.pl-2xl-0,.px-2xl-0{padding-left:0!important}.p-2xl-1{padding:.25rem!important}.pt-2xl-1,.py-2xl-1{padding-top:.25rem!important}.pr-2xl-1,.px-2xl-1{padding-right:.25rem!important}.pb-2xl-1,.py-2xl-1{padding-bottom:.25rem!important}.pl-2xl-1,.px-2xl-1{padding-left:.25rem!important}.p-2xl-2{padding:.5rem!important}.pt-2xl-2,.py-2xl-2{padding-top:.5rem!important}.pr-2xl-2,.px-2xl-2{padding-right:.5rem!important}.pb-2xl-2,.py-2xl-2{padding-bottom:.5rem!important}.pl-2xl-2,.px-2xl-2{padding-left:.5rem!important}.p-2xl-3{padding:1rem!important}.pt-2xl-3,.py-2xl-3{padding-top:1rem!important}.pr-2xl-3,.px-2xl-3{padding-right:1rem!important}.pb-2xl-3,.py-2xl-3{padding-bottom:1rem!important}.pl-2xl-3,.px-2xl-3{padding-left:1rem!important}.p-2xl-4{padding:1.5rem!important}.pt-2xl-4,.py-2xl-4{padding-top:1.5rem!important}.pr-2xl-4,.px-2xl-4{padding-right:1.5rem!important}.pb-2xl-4,.py-2xl-4{padding-bottom:1.5rem!important}.pl-2xl-4,.px-2xl-4{padding-left:1.5rem!important}.p-2xl-5{padding:3rem!important}.pt-2xl-5,.py-2xl-5{padding-top:3rem!important}.pr-2xl-5,.px-2xl-5{padding-right:3rem!important}.pb-2xl-5,.py-2xl-5{padding-bottom:3rem!important}.pl-2xl-5,.px-2xl-5{padding-left:3rem!important}.m-2xl-n1{margin:-.25rem!important}.mt-2xl-n1,.my-2xl-n1{margin-top:-.25rem!important}.mr-2xl-n1,.mx-2xl-n1{margin-right:-.25rem!important}.mb-2xl-n1,.my-2xl-n1{margin-bottom:-.25rem!important}.ml-2xl-n1,.mx-2xl-n1{margin-left:-.25rem!important}.m-2xl-n2{margin:-.5rem!important}.mt-2xl-n2,.my-2xl-n2{margin-top:-.5rem!important}.mr-2xl-n2,.mx-2xl-n2{margin-right:-.5rem!important}.mb-2xl-n2,.my-2xl-n2{margin-bottom:-.5rem!important}.ml-2xl-n2,.mx-2xl-n2{margin-left:-.5rem!important}.m-2xl-n3{margin:-1rem!important}.mt-2xl-n3,.my-2xl-n3{margin-top:-1rem!important}.mr-2xl-n3,.mx-2xl-n3{margin-right:-1rem!important}.mb-2xl-n3,.my-2xl-n3{margin-bottom:-1rem!important}.ml-2xl-n3,.mx-2xl-n3{margin-left:-1rem!important}.m-2xl-n4{margin:-1.5rem!important}.mt-2xl-n4,.my-2xl-n4{margin-top:-1.5rem!important}.mr-2xl-n4,.mx-2xl-n4{margin-right:-1.5rem!important}.mb-2xl-n4,.my-2xl-n4{margin-bottom:-1.5rem!important}.ml-2xl-n4,.mx-2xl-n4{margin-left:-1.5rem!important}.m-2xl-n5{margin:-3rem!important}.mt-2xl-n5,.my-2xl-n5{margin-top:-3rem!important}.mr-2xl-n5,.mx-2xl-n5{margin-right:-3rem!important}.mb-2xl-n5,.my-2xl-n5{margin-bottom:-3rem!important}.ml-2xl-n5,.mx-2xl-n5{margin-left:-3rem!important}.m-2xl-auto{margin:auto!important}.mt-2xl-auto,.my-2xl-auto{margin-top:auto!important}.mr-2xl-auto,.mx-2xl-auto{margin-right:auto!important}.mb-2xl-auto,.my-2xl-auto{margin-bottom:auto!important}.ml-2xl-auto,.mx-2xl-auto{margin-left:auto!important}.text-2xl-left{text-align:left!important}.text-2xl-right{text-align:right!important}.text-2xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold,cd-about dt{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#2b99a8!important}a.text-primary:focus,a.text-primary:hover{color:#1b626b!important}.text-secondary{color:#ef5c55!important}a.text-secondary:focus,a.text-secondary:hover{color:#e21f15!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#777!important}a.text-dark:focus,a.text-dark:hover{color:#515151!important}.text-warning-dark{color:#fd7e14!important}a.text-warning-dark:focus,a.text-warning-dark:hover{color:#c35a02!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!
+Fork Awesome 1.1.7
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */@font-face{font-family:ForkAwesome;src:url(forkawesome-webfont.35e77a38ca9d85c4e897.eot?v=1.1.7);src:url(forkawesome-webfont.35e77a38ca9d85c4e897.eot?#iefix&v=1.1.7) format("embedded-opentype"),url(forkawesome-webfont.3a9e014c2469ffa65a0e.woff2?v=1.1.7) format("woff2"),url(forkawesome-webfont.44bbdbbfb5a10ba2d1ce.woff?v=1.1.7) format("woff"),url(forkawesome-webfont.fc46f3dae03b2b2e1cee.ttf?v=1.1.7) format("truetype"),url(forkawesome-webfont.78dcc9c4999659b8026a.svg?v=1.1.7#forkawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa,.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:2s linear infinite fa-spin}.fa-pulse{animation:1s steps(8) infinite fa-spin}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before,.fa-sync:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before,.fa-video:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell-o:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-globe-e:before{content:""}.fa-globe-w:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-community:before,.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus-g:before,.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before,.fa-utensils:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before,.fa-pound:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:""}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:""}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:""}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before,.fa-utensil-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before,.fa-heading:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before,.fa-closed-captioning:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before,.fa-gem:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-medium-square:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo-v:before,.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-phone-volume:before,.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.fa-mastodon:before{content:""}.fa-mastodon-alt:before{content:""}.fa-fork-awesome:before,.fa-fork-circle:before{content:""}.fa-peertube:before{content:""}.fa-diaspora:before{content:""}.fa-friendica:before{content:""}.fa-gnu-social:before{content:""}.fa-liberapay-square:before{content:""}.fa-liberapay:before{content:""}.fa-scuttlebutt:before,.fa-ssb:before{content:""}.fa-hubzilla:before{content:""}.fa-social-home:before{content:""}.fa-artstation:before{content:""}.fa-discord:before{content:""}.fa-discord-alt:before{content:""}.fa-patreon:before{content:""}.fa-snowdrift:before{content:""}.fa-activitypub:before{content:""}.fa-ethereum:before{content:""}.fa-keybase:before{content:""}.fa-shaarli:before{content:""}.fa-shaarli-o:before{content:""}.fa-cut-key:before,.fa-key-modern:before{content:""}.fa-xmpp:before{content:""}.fa-archive-org:before{content:""}.fa-freedombox:before{content:""}.fa-facebook-messenger:before{content:""}.fa-debian:before{content:""}.fa-mastodon-square:before{content:""}.fa-tipeee:before{content:""}.fa-react:before{content:""}.fa-dogmazic:before{content:""}.fa-zotero:before{content:""}.fa-nodejs:before{content:""}.fa-nextcloud:before{content:""}.fa-nextcloud-square:before{content:""}.fa-hackaday:before{content:""}.fa-laravel:before{content:""}.fa-signalapp:before{content:""}.fa-gnupg:before{content:""}.fa-php:before{content:""}.fa-ffmpeg:before{content:""}.fa-joplin:before{content:""}.fa-syncthing:before{content:""}.fa-inkscape:before{content:""}.fa-matrix-org:before{content:""}.fa-pixelfed:before{content:""}.fa-bootstrap:before{content:""}.fa-dev-to:before{content:""}.fa-hashnode:before{content:""}.fa-jirafeau:before{content:""}.fa-emby:before{content:""}.fa-wikidata:before{content:""}.fa-gimp:before{content:""}.fa-c:before{content:""}.fa-digitalocean:before{content:""}.fa-att:before{content:""}.fa-gitea:before{content:""}.fa-file-epub:before{content:""}.fa-python:before{content:""}.fa-archlinux:before{content:""}.fa-pleroma:before{content:""}.fa-unsplash:before{content:""}.fa-hackster:before{content:""}.fa-spell-check:before{content:""}.fa-moon:before{content:""}.fa-sun:before{content:""}.fa-f-droid:before{content:""}.fa-biometric:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;white-space:normal;position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.info-card-popover-cluster-status{max-width:23vw;max-height:20vh}.info-card-popover-cluster-status .popover-body{max-width:100%;max-height:19vh;font-size:12px;overflow:auto}@media (max-width:calc(1200px - 1px)){.info-card-popover-cluster-status{max-width:31vw}}@media (max-width:calc(992px - 1px)){.info-card-popover-cluster-status{max-width:46vw}}@media (max-width:calc(768px - 1px)){.info-card-popover-cluster-status{max-width:83vw}}.info-card-content-clickable{cursor:pointer;padding:7px;border:1px solid #efefef;border-radius:3px}.info-card-content-clickable:hover{border-color:#d1d1d1;background-color:#f3f3f3}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:initial}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#2b99a8;background-color:#2b99a8}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#adb5bd}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#76d0dc}html{background-color:#fff}body,html{width:100%;height:100%;font-size:12px}option{font-weight:400;font-style:normal}.full-height{height:100vh}.full-width{width:100vw}.vertical-align{display:flex;align-items:center}.horizontal-align{display:flex;justify-content:center}.loading{position:absolute;top:50%;left:50%}.margin-right-md{margin-right:15px}.no-border{border:0;box-shadow:0 0 0!important}.italic{font-style:italic}.bold{font-weight:700}.text-pre{white-space:pre-wrap}.btn-light{background-color:#fff!important;border-color:#ced4da!important}.btn-light:hover{background-color:#ddd!important;border-color:#adadad!important}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:0}.btn-primary .badge{color:#2b99a8;background-color:#eee}.btn-group>.btn>i.fa,.cd-datatable-actions button.btn i.fa{margin-right:5px}.dropdown-menu{min-width:50px;z-index:999999}.dropdown-menu>li>a{color:#474544;cursor:pointer}.dropdown-menu>li>a>i.fa{margin-right:5px}.dropdown-menu>.active>a{color:#eee}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#21747f}.dataTables_wrapper .dropdown-menu>li.dropdown-divider{cursor:auto}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{padding-left:30px!important;padding-right:30px!important}.row,cd-about dl{margin-left:-30px;margin-right:-30px}.cd-col-form,.cd-col-form-input,.cd-col-form-label,.cd-col-form-offset,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,cd-about dd,cd-about dt,cd-health cd-info-card,cd-health cd-info-card.cd-capacity-card,cd-health cd-info-card.cd-chart-card,cd-health cd-info-card.cd-performance-card,cd-modal .cd-col-form-input,cd-modal .cd-col-form-label,cd-modal .cd-col-form-offset{padding-left:30px;padding-right:30px}tags-input .tags{border-radius:4px;border:1px solid #d1d1d1;box-shadow:inset 0 1px 1px rgba(0,0,0,.09)}.card .accordion-title,pre .accordion-title,uib-accordion .card-title{font-size:14px!important}.card-header{font-size:1.3em}.disabled{pointer-events:none}.clickable,a{cursor:pointer}:invalid .has-error-btn,:invalid .has-error-btn:disabled:hover{background-color:#f2dede;border-color:#a94442}.noscript{padding-top:5em}.noscript p{color:#777}.required::after{color:#a94442;content:"*";font-size:14px;padding-left:4px}.form-footer{width:100%;display:flex}.cd-form-control,.form-control{display:table-cell}.cd-form-control:focus,.form-control:focus{border-color:rgba(43,153,168,.8);outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px 2px rgba(43,153,168,.5)}.custom-checkbox{padding-top:7px}.card-footer button.btn:not(:first-child),.modal-footer button.btn:not(:first-child){margin-left:5px}.nav-tabs{margin-bottom:15px}.ceph-icon{background:url(Ceph_Logo_Stacked_RGB_120411_fa_228x228.1ed169ccc35367a2dab2.png)}.prometheus-icon{background:url(prometheus_logo.074db273ef932a67d91b.svg)}.custom-icon{padding:10px;margin-right:8px;background-clip:padding-box;background-size:contain;background-repeat:no-repeat}.toast-message .custom-icon{filter:brightness(0) invert(1);-webkit-filter:brightness(0) invert(1);-moz-filter:brightness(0) invert(1);-o-filter:brightness(0) invert(1);-ms-filter:brightness(0) invert(1)}.block-ui-wrapper{background:rgba(0,0,0,.7)!important}.tooltip-wide .tooltip-inner{width:400px}.tooltip-inner{background-color:#fff;border:1px solid grey;color:#333;font-size:1.1em}.toast-message>ul{padding-left:1em;margin:0}@media (min-width:576px){.cd-col-form-label,.col-form-label{text-align:right}}.cd-col-form-label,.col-form-label{font-weight:700}cd-submit-button{background-color:transparent!important}bfv-messages{display:none}.form-group.has-error .invalid-feedback{display:block}.password-strength-level{flex:100%;margin-top:2px}.password-strength-level .ok,.password-strength-level .strong,.password-strength-level .very-strong,.password-strength-level .weak{border-radius:.25rem;height:13px}.password-strength-level .weak{width:25%;background:red}.password-strength-level .ok{width:50%;background:#ffc200}.password-strength-level .strong{width:75%;background:#0b0}.password-strength-level .very-strong{width:100%;background:#245e03}.badge-hdd{color:#fff;background-color:#90949c}.badge-ssd{color:#fff;background-color:#288cea}.badge-tab{color:#555;background-color:#f3f3f3}tree-root tree-viewport{min-height:1em}
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.58a2c96c3b87bd02e7a7.css b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.58a2c96c3b87bd02e7a7.css
deleted file mode 100644 (file)
index 78ea15c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-@charset "UTF-8";.toast-center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;text-shadow:0 1px 0 #fff}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0}.toast-container{pointer-events:none;position:fixed;z-index:999999}.toast-container *{box-sizing:border-box}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-container .ngx-toastr:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-info{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z'/%3E%3C/svg%3E")}.toast-error{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z'/%3E%3C/svg%3E")}.toast-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='512' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E")}.toast-container.toast-bottom-center .ngx-toastr,.toast-container.toast-top-center .ngx-toastr{width:300px;margin-left:auto;margin-right:auto}.toast-container.toast-bottom-full-width .ngx-toastr,.toast-container.toast-top-full-width .ngx-toastr{width:96%;margin-left:auto;margin-right:auto}.ngx-toastr{background-color:#030303;pointer-events:auto}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512' width='576' height='512'%3E%3Cpath fill='rgb(255,255,255)' d='M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'/%3E%3C/svg%3E");background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width:240px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:11em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:18em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){.toast-container .ngx-toastr.div{padding:15px 15px 15px 50px;width:25em}}.bs-datepicker{display:flex;align-items:stretch;flex-flow:row wrap;background:#fff;box-shadow:0 0 10px 0 #aaa;position:relative;z-index:1}.bs-datepicker:after{clear:both;content:'';display:block}.bs-datepicker bs-day-picker{float:left}.bs-datepicker button:active,.bs-datepicker button:focus,.bs-datepicker button:hover,.bs-datepicker input:active,.bs-datepicker input:focus,.bs-datepicker input:hover,.bs-datepicker-btns button:active,.bs-datepicker-btns button:focus,.bs-datepicker-btns button:hover,.bs-datepicker-predefined-btns button:active,.bs-datepicker-predefined-btns button:focus{outline:0}.bs-datepicker-head{min-width:270px;height:50px;padding:10px;border-radius:3px 3px 0 0;text-align:justify}.bs-datepicker-head:after{content:"";display:inline-block;vertical-align:top;width:100%}.bs-datepicker-head button{display:inline-block;vertical-align:top;padding:0;height:30px;line-height:30px;border:0;background:0 0;text-align:center;cursor:pointer;color:#fff;transition:.3s}.bs-datepicker-head button[disabled],.bs-datepicker-head button[disabled]:active,.bs-datepicker-head button[disabled]:hover{background:rgba(221,221,221,.3);color:#f5f5f5;cursor:not-allowed}.bs-datepicker-head button.next,.bs-datepicker-head button.previous{border-radius:50%;width:30px;height:30px}.bs-datepicker-head button.next span,.bs-datepicker-head button.previous span{font-size:28px;line-height:1;display:inline-block;position:relative;height:100%;width:100%;border-radius:50%}.bs-datepicker-head button.current{border-radius:15px;max-width:155px;padding:0 13px}.bs-datepicker-head button:hover{background-color:rgba(0,0,0,.1)}.bs-datepicker-head button:active{background-color:rgba(0,0,0,.2)}.bs-datepicker-body{padding:10px;border-radius:0 0 3px 3px;min-height:232px;min-width:278px;border:1px solid #e9edf0}.bs-datepicker-body .days.weeks{position:relative;z-index:1}.bs-datepicker-body table{width:100%;border-collapse:separate;border-spacing:0}.bs-datepicker-body table th{font-size:13px;color:#9aaec1;font-weight:400;text-align:center}.bs-datepicker-body table td{color:#54708b;text-align:center;position:relative;padding:0}.bs-datepicker-body table td span{display:block;margin:0 auto;font-size:13px;border-radius:50%;position:relative;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.bs-datepicker-body table td:not(.disabled):not(.week) span:not(.disabled):not(.is-other-month){cursor:pointer}.bs-datepicker-body table td span.is-highlighted:not(.disabled):not(.selected),.bs-datepicker-body table td.is-highlighted:not(.disabled):not(.selected) span{background-color:#e9edf0;transition:0s}.bs-datepicker-body table td span.is-active-other-month:not(.disabled):not(.selected),.bs-datepicker-body table td.is-active-other-month:not(.disabled):not(.selected) span{background-color:#e9edf0;transition:0s;cursor:pointer}.bs-datepicker-body table td span.disabled,.bs-datepicker-body table td.disabled span{color:#9aaec1}.bs-datepicker-body table td span.selected,.bs-datepicker-body table td.selected span{color:#fff}.bs-datepicker-body table td span.is-other-month,.bs-datepicker-body table td.is-other-month span{color:rgba(0,0,0,.25)}.bs-datepicker-body table td.active{position:relative}.bs-datepicker-body table td.active.select-start:before{left:35%}.bs-datepicker-body table td.active.select-end:before{left:-85%}.bs-datepicker-body table td span.active.select-end:after,.bs-datepicker-body table td span.active.select-start:after,.bs-datepicker-body table td.active.select-end span:after,.bs-datepicker-body table td.active.select-start span:after{content:"";display:block;position:absolute;z-index:-1;width:100%;height:100%;transition:.3s;top:0;border-radius:50%}.bs-datepicker-body table td span:before,.bs-datepicker-body table td:before{content:"";display:block;position:absolute;z-index:-1;top:6px;bottom:6px;left:-2px;right:-2px;box-sizing:content-box;background:0 0}.bs-datepicker-body table td.active.select-start+td.active:before{left:-20%}.bs-datepicker-body table td:last-child.active:before{border-radius:0 3px 3px 0;width:125%;left:-25%}.bs-datepicker-body table td span[class*=select-],.bs-datepicker-body table td[class*=select-] span{border-radius:50%;color:#fff}.bs-datepicker-body table.days span.active:not(.select-start):before,.bs-datepicker-body table.days span.in-range:not(.select-start):before,.bs-datepicker-body table.days td.active:not(.select-start):before,.bs-datepicker-body table.days td.in-range:not(.select-start):before{background:#e9edf0}.bs-datepicker-body table.days span{width:32px;height:32px;line-height:32px}.bs-datepicker-body table.days span.select-start{z-index:2}.bs-datepicker-body table.days span.in-range.select-end:before,.bs-datepicker-body table.days span.is-highlighted.in-range:before{background:0 0;right:0;left:0}.bs-datepicker-body table.days td.active+td.is-highlighted:before,.bs-datepicker-body table.days td.active+td.select-end:before,.bs-datepicker-body table.days td.in-range+td.is-highlighted:before,.bs-datepicker-body table.days td.in-range+td.select-end:before,.bs-datepicker-body table.days td.select-start+td.is-highlighted:before,.bs-datepicker-body table.days td.select-start+td.select-end:before{background:#e9edf0;width:100%}.bs-datepicker-body table.weeks tr td:nth-child(2).active:before{border-radius:3px 0 0 3px;left:0;width:100%}.bs-datepicker-body table:not(.weeks) tr td:first-child:before{border-radius:3px 0 0 3px}.bs-datepicker-body table.years td span{width:46px;height:46px;line-height:45px;margin:0 auto}.bs-datepicker-body table.years tr:not(:last-child) td span{margin-bottom:8px}.bs-datepicker-body table.months td{height:52px}.bs-datepicker-body table.months td span{padding:6px;border-radius:15px}.bs-datepicker .current-timedate{color:#54708b;font-size:15px;text-align:center;height:30px;line-height:30px;border-radius:20px;border:1px solid #e9edf0;margin-bottom:10px;cursor:pointer;text-transform:uppercase;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.bs-datepicker .current-timedate span:not(:empty):before{content:"";width:15px;height:16px;display:inline-block;margin-right:4px;vertical-align:text-bottom;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAABMklEQVQoU9VTwW3CQBCcOUgBtEBKSAukAnBKME+wFCAlYIhk8sQlxFABtJAScAsuAPBEewYcxCP8ouxrPDsza61uiVN1o6RNHD4htSCmq49RfO71BvMJqBBkITRf1kmUW49nQRC9h1I5AZlBClaL8aP1fKgOOxCx8aSLs+Q19eZuNO8QmPqJRtDFguy7OAcDbJPs+/BKVPDIPrvD2ZJgWAmVe7O0rI0Vqs1seyWUXpuJoppYCa5L+U++NpNPkr5OE2oMdARsb3gykJT5ydZcL8Z9Ww60nxg2LhjON9li9OwXZzo+xLbp3nC2s9CL2RrueGyVrgwNm8HpsCzZ9EEW6kqXlo1GQe03FzP/7W8Hl0dBtu7Bf7zt6mIwvX1RvzDCm7+q3mAW0Dl/GPdUCeXrZLT9BrDrGkm4qlPvAAAAAElFTkSuQmCC)}.bs-datepicker-multiple{border-radius:4px 0 0 4px}.bs-datepicker-multiple+.bs-datepicker-multiple{margin-left:10px}.bs-datepicker-multiple .bs-datepicker{box-shadow:none;position:relative}.bs-datepicker-multiple .bs-datepicker:not(:last-child){padding-right:10px}.bs-datepicker-multiple .bs-datepicker+.bs-datepicker:after{content:"";display:block;width:14px;height:10px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAA1ElEQVQoU42RsQrCUAxF77VuDu7O4oMWW//BURBBpZvgKk4uIrjoqKOTf+DopIO4uYggtFTfw3+pkQqCW1/G5J7kJiFy4m5MxUlxAzgIPHX+lzMPzupRYlYgxiR7vqsOP8YKzsTx0yxFMCUZ+q7aZzlr+OvgoWcAFyAHgat2jLWu48252DdqAihDJGSSJNUUxYmQjs3+hPQBlAh2rG2LCOPnaw3IiGDX99TRCs7ASJsNhUOA7d/LcuHvRG22FIZvsNXw1MX6VZExCilOQKEfeLXr/10+aC9Ho7arh7oAAAAASUVORK5CYII=);position:absolute;top:25px;left:-8px}.bs-datepicker-multiple .bs-datepicker .left{float:left}.bs-datepicker-multiple .bs-datepicker .right{float:right}.bs-datepicker-container{padding:15px}.bs-datepicker .bs-media-container{display:flex}@media (max-width:768px){.bs-datepicker .bs-media-container{flex-direction:column}}.bs-datepicker-custom-range{padding:15px;background:#eee}.bs-datepicker-predefined-btns button{width:100%;display:block;height:30px;background-color:#9aaec1;border-radius:4px;color:#fff;border:0;margin-bottom:10px;padding:0 18px;text-align:left;transition:.3s}.bs-datepicker-predefined-btns button:active,.bs-datepicker-predefined-btns button:hover{background-color:#54708b}.bs-datepicker-buttons{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-top:10px;border-top:1px solid #e9edf0}.bs-datepicker-buttons .btn-default{margin-left:10px}.bs-timepicker-container{padding:10px 0}.bs-timepicker-label{color:#54708b;margin-bottom:10px}.bs-timepicker-controls{display:inline-block;vertical-align:top;margin-right:10px}.bs-timepicker-controls button{width:20px;height:20px;border-radius:50%;border:0;background-color:#e9edf0;color:#54708b;font-size:16px;font-weight:700;vertical-align:middle;line-height:0;padding:0;transition:.3s}.bs-timepicker-controls button:hover{background-color:#d5dadd}.bs-timepicker-controls input{width:35px;height:25px;border-radius:13px;text-align:center;border:1px solid #e9edf0}.bs-timepicker .switch-time-format{text-transform:uppercase;min-width:54px;height:25px;border-radius:20px;border:1px solid #e9edf0;background:#fff;color:#54708b;font-size:13px}.bs-timepicker .switch-time-format img{vertical-align:initial;margin-left:4px}bs-datepicker-container,bs-daterangepicker-container{z-index:1080}@media (max-width:768px){.bs-datepicker-multiple{display:flex}.bs-datepicker-multiple+.bs-datepicker-multiple{margin-top:10px;margin-left:0}}.theme-default .bs-datepicker-body table td span.selected,.theme-default .bs-datepicker-body table td span[class*=select-]:after,.theme-default .bs-datepicker-body table td.selected span,.theme-default .bs-datepicker-body table td[class*=select-] span:after,.theme-default .bs-datepicker-head{background-color:#777}.theme-default .bs-datepicker-body table td.week span{color:#777}.theme-default .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#777;color:#fff;opacity:.5;transition:0s}.theme-green .bs-datepicker-body table td span.selected,.theme-green .bs-datepicker-body table td span[class*=select-]:after,.theme-green .bs-datepicker-body table td.selected span,.theme-green .bs-datepicker-body table td[class*=select-] span:after,.theme-green .bs-datepicker-head{background-color:#5cb85c}.theme-green .bs-datepicker-body table td.week span{color:#5cb85c}.theme-green .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#5cb85c;color:#fff;opacity:.5;transition:0s}.theme-blue .bs-datepicker-body table td span.selected,.theme-blue .bs-datepicker-body table td span[class*=select-]:after,.theme-blue .bs-datepicker-body table td.selected span,.theme-blue .bs-datepicker-body table td[class*=select-] span:after,.theme-blue .bs-datepicker-head{background-color:#5bc0de}.theme-blue .bs-datepicker-body table td.week span{color:#5bc0de}.theme-blue .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#5bc0de;color:#fff;opacity:.5;transition:0s}.theme-dark-blue .bs-datepicker-body table td span.selected,.theme-dark-blue .bs-datepicker-body table td span[class*=select-]:after,.theme-dark-blue .bs-datepicker-body table td.selected span,.theme-dark-blue .bs-datepicker-body table td[class*=select-] span:after,.theme-dark-blue .bs-datepicker-head{background-color:#337ab7}.theme-dark-blue .bs-datepicker-body table td.week span{color:#337ab7}.theme-dark-blue .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#337ab7;color:#fff;opacity:.5;transition:0s}.theme-red .bs-datepicker-body table td span.selected,.theme-red .bs-datepicker-body table td span[class*=select-]:after,.theme-red .bs-datepicker-body table td.selected span,.theme-red .bs-datepicker-body table td[class*=select-] span:after,.theme-red .bs-datepicker-head{background-color:#d9534f}.theme-red .bs-datepicker-body table td.week span{color:#d9534f}.theme-red .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#d9534f;color:#fff;opacity:.5;transition:0s}.theme-orange .bs-datepicker-body table td span.selected,.theme-orange .bs-datepicker-body table td span[class*=select-]:after,.theme-orange .bs-datepicker-body table td.selected span,.theme-orange .bs-datepicker-body table td[class*=select-] span:after,.theme-orange .bs-datepicker-head{background-color:#f0ad4e}.theme-orange .bs-datepicker-body table td.week span{color:#f0ad4e}.theme-orange .bs-datepicker-body table td.active-week span:hover{cursor:pointer;background-color:#f0ad4e;color:#fff;opacity:.5;transition:0s}.tree-children.tree-children-no-padding{padding-left:0}.node-drop-slot{display:block;height:2px}.node-drop-slot.is-dragging-over{background:#dfe;height:20px;border:2px dotted #888}.toggle-children-wrapper-expanded .toggle-children{transform:rotate(90deg)}.toggle-children-wrapper-collapsed .toggle-children{transform:rotate(0)}.toggle-children-wrapper{padding:2px 3px 5px 1px}.toggle-children{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYzRkRFQjcxODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYzRkRFQjcwODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTk5NzA1OGEtZDI3OC00NDZkLWE4ODgtNGM4MGQ4YWI1NzNmIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzRkZmQxMGMtY2NlNS0xMTc4LWE5OGQtY2NkZmM5ODk5YWYwIi8+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+Z2x5cGhpY29uczwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+5iogFwAAAGhJREFUeNpiYGBgKABigf///zOQg0EARH4A4gZyDIIZ8B/JoAJKDIDhB0CcQIkBRBtEyABkgxwoMQCGD6AbRKoBGAYxQgXIBRuZGKgAKPIC3QLxArnRSHZCIjspk52ZKMrOFBUoAAEGAKnq593MQAZtAAAAAElFTkSuQmCC);height:8px;width:9px;background-size:contain;display:inline-block;position:relative;top:1px;background-repeat:no-repeat;background-position:center}.toggle-children-placeholder{display:inline-block;height:10px;width:10px;position:relative;top:1px;padding-right:3px}.node-content-wrapper{display:inline-block;padding:2px 5px;border-radius:2px;transition:background-color .15s,box-shadow .15s}.node-wrapper{display:flex;align-items:flex-start}.node-content-wrapper-active,.node-content-wrapper-active.node-content-wrapper-focused,.node-content-wrapper.node-content-wrapper-active:hover{background:#beebff}.node-content-wrapper-focused{background:#e7f4f9}.node-content-wrapper:hover{background:#f7fbff}.node-content-wrapper-active,.node-content-wrapper-focused,.node-content-wrapper:hover{box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over{background:#dfe;box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over-disabled{opacity:.5}tree-viewport{-webkit-tap-highlight-color:transparent;height:100%;overflow:auto;display:block}.tree-children{overflow:hidden;padding-left:20px}.empty-tree-drop-slot .node-drop-slot{height:20px;min-width:100px}.angular-tree-component{width:100%;position:relative;display:inline-block;cursor:pointer;-webkit-touch-callout:none;-moz-user-select:none;user-select:none}tree-root .angular-tree-component-rtl{direction:rtl}tree-root .angular-tree-component-rtl .toggle-children-wrapper-collapsed .toggle-children{transform:rotate(180deg)!important}tree-root .angular-tree-component-rtl .tree-children{padding-right:20px;padding-left:0}tree-node-checkbox{padding:1px}/*!
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
- * Copyright 2011-2019 The Bootstrap Authors
- * Copyright 2011-2019 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#2b99a8;--secondary:#ef5c55;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#777777;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#2b99a8;text-decoration:none;background-color:transparent}a:hover{color:#1b626b;text-decoration:underline}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row,cd-about dl{display:flex;flex-wrap:wrap}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.cd-col-form,.cd-col-form-input,.cd-col-form-label,.cd-col-form-offset,.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto,cd-about dd,cd-about dt,cd-health cd-info-card,cd-health cd-info-card.cd-capacity-card,cd-health cd-info-card.cd-performance-card,cd-health cd-info-card.cd-status-card,cd-modal .cd-col-form-input,cd-modal .cd-col-form-label,cd-modal .cd-col-form-offset{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4,cd-about dt{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8,cd-about dd{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.cd-col-form,.col-12,cd-health cd-info-card{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.cd-col-form-label,.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form-input,.cd-col-form-offset,.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12,cd-health cd-info-card{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.cd-col-form-offset,.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.cd-col-form-label,.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6,cd-health cd-info-card{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form-input,.cd-col-form-offset,.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.cd-col-form-label,.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4,cd-health cd-info-card,cd-modal .cd-col-form-label{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.cd-col-form,.col-lg-8,cd-modal .cd-col-form-input,cd-modal .cd-col-form-offset{flex:0 0 66.6666666667%;max-width:66.6666666667%}.cd-col-form-input,.cd-col-form-offset,.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.cd-col-form-offset,.offset-lg-3{margin-left:25%}.offset-lg-4,cd-modal .cd-col-form-offset{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl,cd-health cd-info-card.cd-capacity-card,cd-health cd-info-card.cd-performance-card{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3,cd-health cd-info-card.cd-status-card{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.cd-col-form,.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c4e2e7}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#91cad2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b2d9e0}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#fbd1cf}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#f7aaa7}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#f9bab7}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#d9d9d9}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#b8b8b8}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#ccc}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.cd-form-control,.form-control{width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.cd-form-control,.form-control{transition:none}}.cd-form-control::-ms-expand,.form-control::-ms-expand{background-color:transparent;border:0}.cd-form-control:-moz-focusring,.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.cd-form-control:focus,.form-control:focus{color:#495057;background-color:#fff;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.cd-form-control::placeholder,.form-control::placeholder{color:#6c757d;opacity:1}.cd-form-control:disabled,.form-control:disabled,.form-control[readonly],[readonly].cd-form-control{background-color:#e9ecef;opacity:1}select.cd-form-control:focus::-ms-value,select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.cd-col-form-label,.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],select[multiple].cd-form-control,select[size].cd-form-control,textarea.cd-form-control,textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.is-valid.cd-form-control,.was-validated .cd-form-control:valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.is-valid.cd-form-control:focus,.was-validated .cd-form-control:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.cd-form-control:valid,.was-validated textarea.form-control:valid,textarea.form-control.is-valid,textarea.is-valid.cd-form-control{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat #fff}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.is-invalid.cd-form-control,.was-validated .cd-form-control:invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.is-invalid.cd-form-control:focus,.was-validated .cd-form-control:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.cd-form-control:invalid,.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid,textarea.is-invalid.cd-form-control{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat #fff}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .cd-form-control,.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-primary:hover{color:#fff;background-color:#237d8a;border-color:#21747f}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#237d8a;border-color:#21747f;box-shadow:0 0 0 .2rem rgba(75,168,181,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#21747f;border-color:#1e6b75}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(75,168,181,.5)}.btn-secondary{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-secondary:hover{color:#fff;background-color:#ec3a32;border-color:#eb2f26}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#ec3a32;border-color:#eb2f26;box-shadow:0 0 0 .2rem rgba(241,116,111,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#eb2f26;border-color:#ea241b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(241,116,111,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529}.btn-light:hover{color:#212529}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#777;border-color:#777}.btn-dark:hover{color:#fff;background-color:#646464;border-color:#5e5e5e}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#646464;border-color:#5e5e5e;box-shadow:0 0 0 .2rem rgba(139,139,139,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#777;border-color:#777}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#5e5e5e;border-color:#575757}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(139,139,139,.5)}.btn-outline-primary{color:#2b99a8;border-color:#2b99a8}.btn-outline-primary:hover{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#2b99a8;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#2b99a8;border-color:#2b99a8}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.btn-outline-secondary{color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary:hover{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ef5c55;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ef5c55;border-color:#ef5c55}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#777;border-color:#777}.btn-outline-dark:hover{color:#fff;background-color:#777;border-color:#777}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#777;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#777;border-color:#777}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.btn-link{font-weight:400;color:#2b99a8;text-decoration:none}.btn-link:hover{color:#1b626b;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;vertical-align:0}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent;vertical-align:0}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#2b99a8}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.cd-form-control,.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.cd-form-control+.cd-form-control,.input-group>.cd-form-control+.custom-file,.input-group>.cd-form-control+.custom-select,.input-group>.cd-form-control+.form-control,.input-group>.custom-file+.cd-form-control,.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.cd-form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.cd-form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.cd-form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.cd-form-control:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.cd-form-control:not(:last-child),.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.cd-form-control:not(:first-child),.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.cd-form-control:not(textarea),.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.cd-form-control,.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.cd-form-control:not(textarea),.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.cd-form-control,.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#2b99a8;background-color:#2b99a8}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#76d0dc}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#9fdee6;border-color:#9fdee6}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:1px solid #adb5bd}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#2b99a8;background-color:#2b99a8}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(43,153,168,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat #fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#76d0dc;outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#76d0dc;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(43,153,168,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.collapsing,.custom-switch .custom-control-label::after{transition:none}.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#9fdee6}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#9fdee6}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#2b99a8;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#9fdee6}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#2b99a8}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:center center/100% 100% no-repeat}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card,pre{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr,pre>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child,pre>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child,pre>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card,.card-deck pre{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card,.card-deck pre{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card,.card-group>pre{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card,.card-group>pre{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.card-group>.card+pre,.card-group>pre+.card,.card-group>pre+pre{margin-left:0;border-left:0}.card-group>.card:not(:last-child),.card-group>pre:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top,.card-group>pre:not(:last-child) .card-header,.card-group>pre:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom,.card-group>pre:not(:last-child) .card-footer,.card-group>pre:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child),.card-group>pre:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top,.card-group>pre:not(:first-child) .card-header,.card-group>pre:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom,.card-group>pre:not(:first-child) .card-footer,.card-group>pre:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns pre{display:inline-block;width:100%}}.card-columns .card,.card-columns pre{margin-bottom:.75rem}.accordion>.card,.accordion>pre{overflow:hidden}.accordion>.card:not(:last-of-type),.accordion>pre:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type),.accordion>pre:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header,.accordion>pre>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination,cd-table .cd-datatable .datatable-footer .datatable-pager ul{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#2b99a8;background-color:#fff;border:1px solid #dee2e6}.page-link:hover,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:hover{z-index:2;color:#1b626b;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.page-item:first-child .page-link,.page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link,.page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link,.page-item.active cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.active a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active a{z-index:3;color:#fff;background-color:#2b99a8;border-color:#2b99a8}.page-item.disabled .page-link,.page-item.disabled cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.disabled a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled a{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg a{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link,.pagination-lg .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:first-child a{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link,.pagination-lg .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:last-child a{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm a{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link,.pagination-sm .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:first-child a{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link,.pagination-sm .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:last-child a{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:1rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#2b99a8}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#21747f}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(43,153,168,.5)}.badge-secondary{color:#fff;background-color:#ef5c55}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#eb2f26}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(239,92,85,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#777}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#5e5e5e}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,119,119,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#165057;background-color:#d5ebee;border-color:#c4e2e7}.alert-primary hr{border-top-color:#b2d9e0}.alert-primary .alert-link{color:#0c2b2e}.alert-secondary{color:#7c302c;background-color:#fcdedd;border-color:#fbd1cf}.alert-secondary hr{border-top-color:#f9bab7}.alert-secondary .alert-link{color:#56211f}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#3e3e3e;background-color:#e4e4e4;border-color:#d9d9d9}.alert-dark hr{border-top-color:#ccc}.alert-dark .alert-link{color:#252525}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#2b99a8;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#2b99a8;border-color:#2b99a8}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#165057;background-color:#c4e2e7}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#165057;background-color:#b2d9e0}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#165057;border-color:#165057}.list-group-item-secondary{color:#7c302c;background-color:#fbd1cf}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#7c302c;background-color:#f9bab7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#7c302c;border-color:#7c302c}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#3e3e3e;background-color:#d9d9d9}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#3e3e3e;background-color:#ccc}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#3e3e3e;border-color:#3e3e3e}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}.progress-bar-animated{animation:none}.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;text-align:center;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:350px;font-family:"Helvetica Neue",Helvetica,Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right,.carousel-item{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev,.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#2b99a8!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#21747f!important}.bg-secondary{background-color:#ef5c55!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#eb2f26!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light,pre{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#777!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#5e5e5e!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom,.cd-header,legend{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#2b99a8!important}.border-secondary{border-color:#ef5c55!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#777!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex,cd-health cd-info-card{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column,cd-health cd-info-card{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);white-space:nowrap}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.btn-toolbar cd-table-actions.btn-group,.mr-2,.mx-2,cd-logs label{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3,cd-logs .form-inline>.form-group{margin-right:1rem!important}.mb-3,.my-3,cd-logs .form-inline>.form-group{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.cd-header,.mt-4,.my-4,legend{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.cd-header,.mb-4,.my-4,cd-health cd-info-card,legend{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.cd-header,.pb-1,.py-1,legend{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2,cd-table .cd-datatable .datatable-footer,pre{padding:.5rem!important}.pt-2,.py-2,cd-info-card .card .card-body .card-text,cd-info-card pre .card-body .card-text{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2,cd-info-card .card,cd-info-card pre{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold,cd-about dt{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#2b99a8!important}a.text-primary:focus,a.text-primary:hover{color:#1b626b!important}.text-secondary{color:#ef5c55!important}a.text-secondary:focus,a.text-secondary:hover{color:#e21f15!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#777!important}a.text-dark:focus,a.text-dark:hover{color:#515151!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!
-Fork Awesome 1.1.7
-License - https://forkaweso.me/Fork-Awesome/license
-
-Copyright 2018 Dave Gandy & Fork Awesome
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */@font-face{font-family:ForkAwesome;src:url(forkawesome-webfont.35e77a38ca9d85c4e897.eot?v=1.1.7);src:url(forkawesome-webfont.35e77a38ca9d85c4e897.eot?#iefix&v=1.1.7) format("embedded-opentype"),url(forkawesome-webfont.3a9e014c2469ffa65a0e.woff2?v=1.1.7) format("woff2"),url(forkawesome-webfont.44bbdbbfb5a10ba2d1ce.woff?v=1.1.7) format("woff"),url(forkawesome-webfont.fc46f3dae03b2b2e1cee.ttf?v=1.1.7) format("truetype"),url(forkawesome-webfont.78dcc9c4999659b8026a.svg?v=1.1.7#forkawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa,.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:2s linear infinite fa-spin}.fa-pulse{animation:1s steps(8) infinite fa-spin}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before,.fa-sync:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before,.fa-video:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell-o:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-globe-e:before{content:""}.fa-globe-w:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-community:before,.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus-g:before,.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before,.fa-utensils:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before,.fa-pound:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:""}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:""}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:""}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before,.fa-utensil-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before,.fa-heading:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before,.fa-closed-captioning:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before,.fa-gem:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-medium-square:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo-v:before,.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-phone-volume:before,.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.fa-mastodon:before{content:""}.fa-mastodon-alt:before{content:""}.fa-fork-awesome:before,.fa-fork-circle:before{content:""}.fa-peertube:before{content:""}.fa-diaspora:before{content:""}.fa-friendica:before{content:""}.fa-gnu-social:before{content:""}.fa-liberapay-square:before{content:""}.fa-liberapay:before{content:""}.fa-scuttlebutt:before,.fa-ssb:before{content:""}.fa-hubzilla:before{content:""}.fa-social-home:before{content:""}.fa-artstation:before{content:""}.fa-discord:before{content:""}.fa-discord-alt:before{content:""}.fa-patreon:before{content:""}.fa-snowdrift:before{content:""}.fa-activitypub:before{content:""}.fa-ethereum:before{content:""}.fa-keybase:before{content:""}.fa-shaarli:before{content:""}.fa-shaarli-o:before{content:""}.fa-cut-key:before,.fa-key-modern:before{content:""}.fa-xmpp:before{content:""}.fa-archive-org:before{content:""}.fa-freedombox:before{content:""}.fa-facebook-messenger:before{content:""}.fa-debian:before{content:""}.fa-mastodon-square:before{content:""}.fa-tipeee:before{content:""}.fa-react:before{content:""}.fa-dogmazic:before{content:""}.fa-zotero:before{content:""}.fa-nodejs:before{content:""}.fa-nextcloud:before{content:""}.fa-nextcloud-square:before{content:""}.fa-hackaday:before{content:""}.fa-laravel:before{content:""}.fa-signalapp:before{content:""}.fa-gnupg:before{content:""}.fa-php:before{content:""}.fa-ffmpeg:before{content:""}.fa-joplin:before{content:""}.fa-syncthing:before{content:""}.fa-inkscape:before{content:""}.fa-matrix-org:before{content:""}.fa-pixelfed:before{content:""}.fa-bootstrap:before{content:""}.fa-dev-to:before{content:""}.fa-hashnode:before{content:""}.fa-jirafeau:before{content:""}.fa-emby:before{content:""}.fa-wikidata:before{content:""}.fa-gimp:before{content:""}.fa-c:before{content:""}.fa-digitalocean:before{content:""}.fa-att:before{content:""}.fa-gitea:before{content:""}.fa-file-epub:before{content:""}.fa-python:before{content:""}.fa-archlinux:before{content:""}.fa-pleroma:before{content:""}.fa-unsplash:before{content:""}.fa-hackster:before{content:""}.fa-spell-check:before{content:""}.fa-moon:before{content:""}.fa-sun:before{content:""}.fa-f-droid:before{content:""}.fa-biometric:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;white-space:normal;position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.info-card-popover-cluster-status{max-width:23vw;max-height:20vh}.info-card-popover-cluster-status .popover-body{max-width:100%;max-height:19vh;font-size:12px;overflow:auto}@media (max-width:calc(1200px - 1px)){.info-card-popover-cluster-status{max-width:31vw}}@media (max-width:calc(992px - 1px)){.info-card-popover-cluster-status{max-width:46vw}}@media (max-width:calc(768px - 1px)){.info-card-popover-cluster-status{max-width:83vw}}.info-card-content-clickable{cursor:pointer;padding:7px;border:1px solid #efefef;border-radius:3px}.info-card-content-clickable:hover{border-color:#d1d1d1;background-color:#f3f3f3}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:initial}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#2b99a8;background-color:#2b99a8}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#adb5bd}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(43,153,168,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#76d0dc}html{background-color:#fff}body,html{width:100%;height:100%;font-size:12px}h1{letter-spacing:-1px;font-size:2em}h2{letter-spacing:-1px;font-size:1.833em}h3{display:block;font-size:1.583em;font-weight:400}h4{font-size:1.5em;line-height:normal}option{font-weight:400;font-style:normal}.full-height{height:100vh}.full-width{width:100vw}.vertical-align{display:flex;align-items:center}.horizontal-align{display:flex;justify-content:center}.loading{position:absolute;top:50%;left:50%}.margin-right-md{margin-right:15px}.no-border{border:0;box-shadow:0 0 0!important}.italic{font-style:italic}.bold{font-weight:700}.text-pre{white-space:pre-wrap}.btn-light{background-color:#fff!important;border-color:#ced4da!important}.btn-light:hover{background-color:#ddd!important;border-color:#adadad!important}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:0}.btn-primary .badge{color:#2b99a8;background-color:#eee}.btn-group>.btn>i.fa,.cd-datatable-actions button.btn i.fa{margin-right:5px}.dropdown-menu{min-width:50px;z-index:999999}.dropdown-menu>li>a{color:#474544;cursor:pointer}.dropdown-menu>li>a>i.fa{margin-right:5px}.dropdown-menu>.active>a{color:#eee}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#21747f}.dataTables_wrapper .dropdown-menu>li.dropdown-divider{cursor:auto}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{padding-left:30px!important;padding-right:30px!important}.row,cd-about dl{margin-left:-30px;margin-right:-30px}.cd-col-form,.cd-col-form-input,.cd-col-form-label,.cd-col-form-offset,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,cd-about dd,cd-about dt,cd-health cd-info-card,cd-modal .cd-col-form-input,cd-modal .cd-col-form-label,cd-modal .cd-col-form-offset{padding-left:30px;padding-right:30px}tags-input .tags{border-radius:4px;border:1px solid #d1d1d1;box-shadow:inset 0 1px 1px rgba(0,0,0,.09)}.card .accordion-title,pre .accordion-title,uib-accordion .card-title{font-size:14px!important}.card-header{font-size:1.3em}.card-body h2:first-child{margin-top:0}.disabled{pointer-events:none}.clickable,a{cursor:pointer}:invalid .has-error-btn,:invalid .has-error-btn:disabled:hover{background-color:#f2dede;border-color:#a94442}.noscript{padding-top:5em}.noscript p{color:#777}.required::after{color:#a94442;content:"*";font-size:14px;padding-left:4px}.form-footer{width:100%;display:flex}.cd-form-control,.form-control{display:table-cell}.cd-form-control:focus,.form-control:focus{border-color:rgba(43,153,168,.8);outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px 2px rgba(43,153,168,.5)}.custom-checkbox{padding-top:7px}.card-footer button.btn:not(:first-child),.modal-footer button.btn:not(:first-child){margin-left:5px}.nav-tabs{margin-bottom:15px}.ceph-icon{background:url(Ceph_Logo_Stacked_RGB_120411_fa_228x228.1ed169ccc35367a2dab2.png)}.prometheus-icon{background:url(prometheus_logo.074db273ef932a67d91b.svg)}.custom-icon{padding:10px;margin-right:8px;background-clip:padding-box;background-size:contain;background-repeat:no-repeat}.toast-message .custom-icon{filter:brightness(0) invert(1);-webkit-filter:brightness(0) invert(1);-moz-filter:brightness(0) invert(1);-o-filter:brightness(0) invert(1);-ms-filter:brightness(0) invert(1)}.block-ui-wrapper{background:rgba(0,0,0,.7)!important}.tooltip-wide .tooltip-inner{width:400px}.tooltip-inner{background-color:#fff;border:1px solid grey;color:#333;font-size:1.1em}.toast-message>ul{padding-left:1em;margin:0}@media (min-width:576px){.cd-col-form-label,.col-form-label{text-align:right}}.cd-col-form-label,.col-form-label{font-weight:700}cd-submit-button{background-color:transparent!important}bfv-messages{display:none}.form-group.has-error .invalid-feedback{display:block}.password-strength-level{flex:100%;margin-top:2px}.password-strength-level .ok,.password-strength-level .strong,.password-strength-level .very-strong,.password-strength-level .weak{border-radius:.25rem;height:13px}.password-strength-level .weak{width:25%;background:red}.password-strength-level .ok{width:50%;background:#ffc200}.password-strength-level .strong{width:75%;background:#0b0}.password-strength-level .very-strong{width:100%;background:#245e03}.badge-hdd{color:#fff;background-color:#90949c}.badge-ssd{color:#fff;background-color:#288cea}.badge-tab{color:#555;background-color:#f3f3f3}tree-root tree-viewport{min-height:1em}
\ No newline at end of file
index a946a20ee42cc69168a953274a9c4e1fbfd79709..4e6d4f9da993802aa30005e3e7e0c6677d824fbb 100644 (file)
@@ -5,12 +5,12 @@
   "requires": true,
   "dependencies": {
     "@angular-devkit/architect": {
-      "version": "0.803.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.26.tgz",
-      "integrity": "sha512-mCynDvhGLElmuiaK5I6hVleMuZ1Svn7o5NnMW1ItiDlVZu1v49JWOxPS1A7C/ypGmhjl9jMorVtz2IumtLgCXw==",
+      "version": "0.803.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.29.tgz",
+      "integrity": "sha512-yHBud/fZHTelX24yjQg5lefZrfIebruoFTGeOwF0JdX8+KiHcTIxS4LOnUTYriasfHarcHRFXBAV/bRm+wv5ow==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.26",
+        "@angular-devkit/core": "8.3.29",
         "rxjs": "6.4.0"
       },
       "dependencies": {
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "0.803.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.26.tgz",
-      "integrity": "sha512-SoeUbl928QgYWZjDNSMs9m/9wslKjqkFXeZpOI398i5/ZbrsjXcbxicLphVCPndhfR6qETV7pCqQnVmAf4zYjA==",
+      "version": "0.803.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.29.tgz",
+      "integrity": "sha512-XAgfP1gi0rEJ3oVt+8ipvS5RfPNbeK5r2n8Ll2H3xkKjU0p1PN8+S6/0XVBtmMfeQ06SJWEAKFcAYqrxXhVTzw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.803.26",
-        "@angular-devkit/build-optimizer": "0.803.26",
-        "@angular-devkit/build-webpack": "0.803.26",
-        "@angular-devkit/core": "8.3.26",
+        "@angular-devkit/architect": "0.803.29",
+        "@angular-devkit/build-optimizer": "0.803.29",
+        "@angular-devkit/build-webpack": "0.803.29",
+        "@angular-devkit/core": "8.3.29",
         "@babel/core": "7.8.7",
         "@babel/preset-env": "7.8.7",
-        "@ngtools/webpack": "8.3.26",
-        "ajv": "6.10.2",
+        "@ngtools/webpack": "8.3.29",
+        "ajv": "6.12.3",
         "autoprefixer": "9.6.1",
         "browserslist": "4.10.0",
         "cacache": "12.0.2",
         "caniuse-lite": "1.0.30001035",
         "circular-dependency-plugin": "5.2.0",
         "clean-css": "4.2.1",
-        "copy-webpack-plugin": "5.1.1",
+        "copy-webpack-plugin": "6.0.3",
         "core-js": "3.6.4",
         "coverage-istanbul-loader": "2.0.3",
         "file-loader": "4.2.0",
         "stylus": "0.54.5",
         "stylus-loader": "3.0.2",
         "terser": "4.6.3",
-        "terser-webpack-plugin": "1.4.3",
+        "terser-webpack-plugin": "3.0.3",
         "tree-kill": "1.2.2",
         "webpack": "4.39.2",
         "webpack-dev-middleware": "3.7.2",
-        "webpack-dev-server": "3.9.0",
+        "webpack-dev-server": "3.11.0",
         "webpack-merge": "4.2.1",
         "webpack-sources": "1.4.3",
         "webpack-subresource-integrity": "1.1.0-rc.6",
       }
     },
     "@angular-devkit/build-optimizer": {
-      "version": "0.803.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.26.tgz",
-      "integrity": "sha512-rVcMV/HaWK1g1XVbB1Hj0F6icNbguQETxilhbEn2Ut48hT4iywam6a2tz5w33YlH0uspPHwtFrz7EaLbiWUrPw==",
+      "version": "0.803.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.29.tgz",
+      "integrity": "sha512-E/MXtKc3oaP7UvQm0g4ayfH8ImEoQnRWseKD4jjYG6TbTIqfIyHCZRcKIr3svY28hzASbro5IZI6SugG+llvFw==",
       "dev": true,
       "requires": {
         "loader-utils": "1.2.3",
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.803.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.26.tgz",
-      "integrity": "sha512-lMmNUza+Qb1/XgVMpj2A2jFr7APvJdX57aLxNPnDg/pM0rWbAMXLUvrphqxZuyqjOwfQcHWmnuVxfLpT0qJSAw==",
+      "version": "0.803.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.29.tgz",
+      "integrity": "sha512-3dJ3iEGU6AFT8VFTe72T9uNLobfd18Sq5Hz22UCCYji9K3ZyVc/bn5uXVVX+/Yj91MFtXuhOjLj7Z+XDeNy+OQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.803.26",
-        "@angular-devkit/core": "8.3.26",
+        "@angular-devkit/architect": "0.803.29",
+        "@angular-devkit/core": "8.3.29",
         "rxjs": "6.4.0"
       },
       "dependencies": {
       }
     },
     "@angular-devkit/core": {
-      "version": "8.3.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.26.tgz",
-      "integrity": "sha512-b1ng9091o33s55/cwQYh1kboiJtj8y8z8xQWATDI9kRmNIQkWYVwVa/MzgPRJ4bzbEGG3zIUHCsp52A6vuGr2A==",
+      "version": "8.3.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.29.tgz",
+      "integrity": "sha512-4jdja9QPwR6XG14ZSunyyOWT3nE2WtZC5IMDIBZADxujXvhzOU0n4oWpy6/JVHLUAxYNNgzLz+/LQORRWndcPg==",
       "dev": true,
       "requires": {
-        "ajv": "6.10.2",
+        "ajv": "6.12.3",
         "fast-json-stable-stringify": "2.0.0",
         "magic-string": "0.25.3",
         "rxjs": "6.4.0",
       }
     },
     "@angular-devkit/schematics": {
-      "version": "8.3.26",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.26.tgz",
-      "integrity": "sha512-IoZbXVFGLvVi5d0ozfssWDXuzot0/pMSKbQPzWIG8K7nCo7nNMVYpsMHrEVYUikA9EQEL5LqMCGohH36/zVPcA==",
+      "version": "8.3.29",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.29.tgz",
+      "integrity": "sha512-AFJ9EK0XbcNlO5Dm9vr0OlBo1Nw6AaFXPR+DmHGBdcDDHxqEmYYLWfT+JU/8U2YFIdgrtlwvdtf6UQ3V2jdz1g==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.26",
+        "@angular-devkit/core": "8.3.29",
         "rxjs": "6.4.0"
       },
       "dependencies": {
       }
     },
     "@angular/cli": {
-      "version": "8.3.26",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.26.tgz",
-      "integrity": "sha512-/dZik0ALcMSNaZdzqeG5hnFqyezrPQlWv+NXPidp1l0VTIwdEmjWmL26QpSBBvZ9bqXjY5/5SZYb+zZlGu78Kg==",
+      "version": "8.3.29",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.29.tgz",
+      "integrity": "sha512-pW+iU0eKHIae+A1b9W5g8DKefMQcehZ+drGKs4Hryh8G+XGFS00BIWkmh6c1mydWTEhdsFlhdjD/rXCem7MAQQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.803.26",
-        "@angular-devkit/core": "8.3.26",
-        "@angular-devkit/schematics": "8.3.26",
-        "@schematics/angular": "8.3.26",
-        "@schematics/update": "0.803.26",
+        "@angular-devkit/architect": "0.803.29",
+        "@angular-devkit/core": "8.3.29",
+        "@angular-devkit/schematics": "8.3.29",
+        "@schematics/angular": "8.3.29",
+        "@schematics/update": "0.803.29",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.1",
         "debug": "^4.1.1",
             "snapdragon-node": "^2.0.1",
             "split-string": "^3.0.2",
             "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "camelcase": {
             "which": "^1.2.9"
           }
         },
-        "emoji-regex": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-          "dev": true
-        },
         "execa": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
             "strip-eof": "^1.0.0"
           }
         },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
         "fill-range": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
             "is-number": "^3.0.0",
             "repeat-string": "^1.6.1",
             "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "find-up": {
           }
         },
         "fsevents": {
+          "dev": true,
+          "optional": true,
           "version": "2.1.2"
         },
         "get-caller-file": {
             "pump": "^3.0.0"
           }
         },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
         "invert-kv": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
           "dev": true,
           "requires": {
             "kind-of": "^3.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
           }
         },
         "lcid": {
           }
         },
         "mem": {
+          "dev": true,
           "requires": {
             "map-age-cleaner": "^0.1.1",
             "mimic-fn": "^2.0.0",
           },
           "version": "4.3.0"
         },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
         "mimic-fn": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
         },
         "os-locale": {
           "version": "3.1.0",
       }
     },
     "@babel/code-frame": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-      "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+      "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
       "dev": true,
       "requires": {
-        "@babel/highlight": "^7.8.3"
+        "@babel/highlight": "^7.10.4"
       }
     },
     "@babel/compat-data": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz",
-      "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz",
+      "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.11.1",
+        "browserslist": "^4.12.0",
         "invariant": "^2.2.4",
         "semver": "^5.5.0"
       },
       "dependencies": {
         "browserslist": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
-          "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
+          "version": "4.14.0",
+          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz",
+          "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==",
           "dev": true,
           "requires": {
-            "caniuse-lite": "^1.0.30001043",
-            "electron-to-chromium": "^1.3.413",
-            "node-releases": "^1.1.53",
-            "pkg-up": "^2.0.0"
+            "caniuse-lite": "^1.0.30001111",
+            "electron-to-chromium": "^1.3.523",
+            "escalade": "^3.0.2",
+            "node-releases": "^1.1.60"
           }
         },
         "caniuse-lite": {
-          "version": "1.0.30001062",
-          "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz",
-          "integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==",
+          "version": "1.0.30001119",
+          "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz",
+          "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==",
           "dev": true
         },
         "semver": {
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.1",
         "json5": "^2.1.0",
-        "lodash": "^4.17.13",
+        "lodash": "4.17.20",
         "resolve": "^1.3.2",
         "semver": "^5.4.1",
         "source-map": "^0.5.0"
             "minimist": "^1.2.5"
           }
         },
+        "lodash": {
+          "version": "4.17.20"
+        },
         "semver": {
           "version": "5.7.1",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
       }
     },
     "@babel/generator": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
-      "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
+      "version": "7.11.4",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz",
+      "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.9.6",
+        "@babel/types": "^7.11.0",
         "jsesc": "^2.5.1",
-        "lodash": "^4.17.13",
         "source-map": "^0.5.0"
       },
       "dependencies": {
       }
     },
     "@babel/helper-annotate-as-pure": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
-      "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
+      "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
-      "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+      "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
       "dev": true,
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-explode-assignable-expression": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz",
-      "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz",
+      "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.9.6",
-        "browserslist": "^4.11.1",
+        "@babel/compat-data": "^7.10.4",
+        "browserslist": "^4.12.0",
         "invariant": "^2.2.4",
         "levenary": "^1.1.1",
         "semver": "^5.5.0"
       },
       "dependencies": {
         "browserslist": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
-          "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
+          "version": "4.14.0",
+          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz",
+          "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==",
           "dev": true,
           "requires": {
-            "caniuse-lite": "^1.0.30001043",
-            "electron-to-chromium": "^1.3.413",
-            "node-releases": "^1.1.53",
-            "pkg-up": "^2.0.0"
+            "caniuse-lite": "^1.0.30001111",
+            "electron-to-chromium": "^1.3.523",
+            "escalade": "^3.0.2",
+            "node-releases": "^1.1.60"
           }
         },
         "caniuse-lite": {
-          "version": "1.0.30001062",
-          "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz",
-          "integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==",
+          "version": "1.0.30001119",
+          "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz",
+          "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==",
           "dev": true
         },
         "semver": {
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.8.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
-      "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz",
+      "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-regex": "^7.8.3",
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-regex": "^7.10.4",
         "regexpu-core": "^4.7.0"
       }
     },
     "@babel/helper-define-map": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
-      "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
+      "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/types": "^7.8.3",
-        "lodash": "^4.17.13"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/types": "^7.10.5",
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "@babel/helper-explode-assignable-expression": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
-      "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
+      "version": "7.11.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz",
+      "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==",
       "dev": true,
       "requires": {
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.9.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
-      "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+      "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/types": "^7.9.5"
+        "@babel/helper-get-function-arity": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-get-function-arity": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
-      "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+      "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
-      "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
+      "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
-      "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz",
+      "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.11.0"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
-      "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+      "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
-      "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.6",
-        "@babel/helper-simple-access": "^7.8.3",
-        "@babel/helper-split-export-declaration": "^7.8.3",
-        "@babel/template": "^7.8.6",
-        "@babel/types": "^7.9.0",
-        "lodash": "^4.17.13"
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz",
+      "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.10.4",
+        "@babel/helper-simple-access": "^7.10.4",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/template": "^7.10.4",
+        "@babel/types": "^7.11.0",
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
-      "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
+      "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
-      "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+      "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
       "dev": true
     },
     "@babel/helper-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
-      "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz",
+      "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.13"
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "@babel/helper-remap-async-to-generator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
-      "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
+      "version": "7.11.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz",
+      "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-wrap-function": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-wrap-function": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz",
-      "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
+      "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
       "dev": true,
       "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.8.3",
-        "@babel/helper-optimise-call-expression": "^7.8.3",
-        "@babel/traverse": "^7.9.6",
-        "@babel/types": "^7.9.6"
+        "@babel/helper-member-expression-to-functions": "^7.10.4",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/traverse": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
-      "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
+      "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/template": "^7.10.4",
+        "@babel/types": "^7.10.4"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz",
+      "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.11.0"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
-      "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
+      "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.11.0"
       }
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.9.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
-      "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
       "dev": true
     },
     "@babel/helper-wrap-function": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
-      "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz",
+      "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helpers": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
-      "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
+      "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.9.6",
-        "@babel/types": "^7.9.6"
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/highlight": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
-      "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+      "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
       "dev": true,
       "requires": {
-        "@babel/helper-validator-identifier": "^7.9.0",
+        "@babel/helper-validator-identifier": "^7.10.4",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
-      "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==",
+      "version": "7.11.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz",
+      "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==",
       "dev": true
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
-      "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz",
+      "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-remap-async-to-generator": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.10.4",
         "@babel/plugin-syntax-async-generators": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz",
+      "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-dynamic-import": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
-      "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz",
+      "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-json-strings": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz",
+      "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz",
-      "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz",
+      "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-transform-parameters": "^7.9.5"
+        "@babel/plugin-transform-parameters": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz",
+      "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz",
-      "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz",
+      "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0",
         "@babel/plugin-syntax-optional-chaining": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.8.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz",
-      "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
+      "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.8",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-async-generators": {
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
-          "dev": true
-        }
       }
     },
     "@babel/plugin-syntax-dynamic-import": {
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
-          "dev": true
-        }
       }
     },
     "@babel/plugin-syntax-json-strings": {
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
-          "dev": true
-        }
       }
     },
     "@babel/plugin-syntax-nullish-coalescing-operator": {
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
-          "dev": true
-        }
       }
     },
     "@babel/plugin-syntax-object-rest-spread": {
       }
     },
     "@babel/plugin-syntax-top-level-await": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
-      "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
+      "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
-      "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
+      "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
-      "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
+      "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-remap-async-to-generator": "^7.8.3"
+        "@babel/helper-module-imports": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.10.4"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
-      "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
+      "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
-      "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
+      "version": "7.11.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz",
+      "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "lodash": "^4.17.13"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.9.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz",
-      "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
+      "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-define-map": "^7.8.3",
-        "@babel/helper-function-name": "^7.9.5",
-        "@babel/helper-optimise-call-expression": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.6",
-        "@babel/helper-split-export-declaration": "^7.8.3",
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-define-map": "^7.10.4",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.10.4",
+        "@babel/helper-split-export-declaration": "^7.10.4",
         "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
-      "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz",
+      "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.9.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz",
-      "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz",
+      "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
-      "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz",
+      "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
-      "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz",
+      "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
-      "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz",
+      "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==",
       "dev": true,
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
-      "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz",
+      "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
-      "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz",
+      "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
-      "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
+      "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
-      "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
+      "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz",
-      "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz",
+      "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.9.0",
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-module-transforms": "^7.10.5",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz",
-      "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
+      "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.9.0",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-simple-access": "^7.8.3",
+        "@babel/helper-module-transforms": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-simple-access": "^7.10.4",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz",
-      "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz",
+      "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.8.3",
-        "@babel/helper-module-transforms": "^7.9.0",
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-hoist-variables": "^7.10.4",
+        "@babel/helper-module-transforms": "^7.10.5",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
-      "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
+      "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.9.0",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-module-transforms": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
-      "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
+      "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.10.4"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
-      "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz",
+      "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
-      "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz",
+      "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.10.4"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.9.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz",
-      "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz",
+      "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==",
       "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-get-function-arity": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-property-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
-      "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz",
+      "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
-      "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz",
+      "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==",
       "dev": true,
       "requires": {
         "regenerator-transform": "^0.14.2"
       }
     },
     "@babel/plugin-transform-reserved-words": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
-      "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz",
+      "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
-      "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz",
+      "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
-      "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz",
+      "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
-      "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz",
+      "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-regex": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-regex": "^7.10.4"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
-      "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
+      "version": "7.10.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz",
+      "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
-      "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz",
+      "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
-      "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz",
+      "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/preset-env": {
       }
     },
     "@babel/runtime": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
-      "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
+      "version": "7.11.2",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz",
+      "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==",
       "dev": true,
       "requires": {
         "regenerator-runtime": "^0.13.4"
       },
       "dependencies": {
         "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
+          "version": "0.13.7",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+          "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
           "dev": true
         }
       }
     },
     "@babel/template": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-      "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+      "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@babel/parser": "^7.8.6",
-        "@babel/types": "^7.8.6"
+        "@babel/code-frame": "^7.10.4",
+        "@babel/parser": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/traverse": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
-      "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz",
+      "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@babel/generator": "^7.9.6",
-        "@babel/helper-function-name": "^7.9.5",
-        "@babel/helper-split-export-declaration": "^7.8.3",
-        "@babel/parser": "^7.9.6",
-        "@babel/types": "^7.9.6",
+        "@babel/code-frame": "^7.10.4",
+        "@babel/generator": "^7.11.0",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/parser": "^7.11.0",
+        "@babel/types": "^7.11.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
-        "lodash": "^4.17.13"
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "@babel/types": {
-      "version": "7.9.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
-      "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz",
+      "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==",
       "dev": true,
       "requires": {
-        "@babel/helper-validator-identifier": "^7.9.5",
-        "lodash": "^4.17.13",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "lodash": "4.17.20",
         "to-fast-properties": "^2.0.0"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "@bcoe/v8-coverage": {
         "inside": "^1.0.0",
         "json5": "^2.1.0",
         "live-server": "^1.2.1",
-        "lodash": "^4.17.15",
+        "lodash": "4.17.20",
         "loglevel": "^1.6.4",
         "loglevel-plugin-prefix": "^0.8.4",
         "lunr": "^2.3.6",
           "requires": {
             "minimist": "^1.2.5"
           }
+        },
+        "lodash": {
+          "version": "4.17.20"
         }
       }
     },
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-          "dev": true,
-          "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
         "rimraf": {
           "version": "3.0.2",
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
             "glob": "^7.1.3"
           }
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "strip-ansi": {
           "version": "6.0.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
           }
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
             "supports-color": "^7.0.0"
           }
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-          "dev": true,
-          "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
       }
     },
     "@ngtools/webpack": {
-      "version": "8.3.26",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.26.tgz",
-      "integrity": "sha512-w28u3Akvn37hE0HYwy/l6YrDBWxzh7TceYJz+5hRLmJu+BevSY/rNjZ22AlpVD8ZWqhFfvzJS9cuvAqDgH9rtw==",
+      "version": "8.3.29",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.29.tgz",
+      "integrity": "sha512-7uB7dlAHR7RmxcQCYidnWRR1tFRJq7CzI+MM3725ibAvi4HnM5viC/HnKRTK7V+3iS1C0l0u0Gyo/769NsUDTQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.26",
+        "@angular-devkit/core": "8.3.29",
         "enhanced-resolve": "4.1.0",
         "rxjs": "6.4.0",
         "tree-kill": "1.2.2",
         "yargs": "10.0.3"
       }
     },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.3",
+        "run-parallel": "^1.1.9"
+      }
+    },
     "@nodelib/fs.stat": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
-      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+      "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
       "dev": true
     },
+    "@nodelib/fs.walk": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.3",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@npmcli/move-file": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz",
+      "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^1.0.4"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
+      }
+    },
     "@samverschueren/stream-to-observable": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
-      "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz",
+      "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==",
       "dev": true,
       "requires": {
         "any-observable": "^0.3.0"
       }
     },
     "@schematics/angular": {
-      "version": "8.3.26",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.26.tgz",
-      "integrity": "sha512-NJCykMxB9RKL+Tmr9xHftUevsivKGsQZQKjkub528wrSgwrCWoFCxGWV31iOXkT3TlBWmuibH6MZkrWbCLX4Sw==",
+      "version": "8.3.29",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.29.tgz",
+      "integrity": "sha512-If+UhCsQzCgnQymiiF8dQRoic34+RgJ6rV0n4k7Tm4N2xNYJOG7ajjzKM7PIeafsF50FKnFP8dqaNGxCMyq5Ew==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.26",
-        "@angular-devkit/schematics": "8.3.26"
+        "@angular-devkit/core": "8.3.29",
+        "@angular-devkit/schematics": "8.3.29"
       }
     },
     "@schematics/update": {
-      "version": "0.803.26",
-      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.26.tgz",
-      "integrity": "sha512-r284UN3HP/UgxK80SG3MDlbF4qPS6EitEqwdSBqXizUYRlV6ovG9vHMLpNruWE0B6vfYbSAn1YvvIwW/ORL1Cw==",
+      "version": "0.803.29",
+      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.29.tgz",
+      "integrity": "sha512-Syf6h6DYeu1WU9aLihMwIgVASpcHCxUYqhZyHfQABiK8NkdlZ+KAp4cOxihsZyDqIJNLWON+0/FLPAQF3BXh5Q==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "8.3.26",
-        "@angular-devkit/schematics": "8.3.26",
+        "@angular-devkit/core": "8.3.29",
+        "@angular-devkit/schematics": "8.3.29",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "1.3.5",
         "pacote": "9.5.5",
       }
     },
     "@types/chart.js": {
-      "version": "2.9.21",
-      "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.21.tgz",
-      "integrity": "sha512-bjwdC+SvE/c3rHYYcX8UbRmTvjEUP9Dhuk/iWXygH6EFDYf4OcofnwxBpJx+A4qU3YBr54a7wtPdswfg9Yt3rg==",
+      "version": "2.9.24",
+      "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.24.tgz",
+      "integrity": "sha512-AQI7X+ow3SaONl44JrHoL/5B+lCsJyG31UHZ5RP98Uh15hI/zjEkDsAb4EIm4P9TGfNhZLXw/nMc5w0u10+/fQ==",
       "requires": {
         "moment": "^2.10.2"
       }
       "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
       "dev": true
     },
-    "@types/events": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
-      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
-      "dev": true
-    },
     "@types/file-saver": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz",
       "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw=="
     },
     "@types/glob": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
-      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
       "dev": true,
       "requires": {
-        "@types/events": "*",
         "@types/minimatch": "*",
         "@types/node": "*"
       }
       }
     },
     "@types/istanbul-lib-coverage": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz",
-      "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
+      "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
       "dev": true
     },
     "@types/istanbul-lib-report": {
         "@types/sizzle": "*"
       }
     },
+    "@types/json-schema": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
+      "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
+      "dev": true
+    },
     "@types/lodash": {
       "version": "4.14.149",
       "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz",
       "dev": true
     },
     "@types/webpack-sources": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz",
-      "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==",
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz",
+      "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==",
       "dev": true,
       "requires": {
         "@types/node": "*",
       }
     },
     "abab": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
-      "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz",
+      "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==",
       "dev": true
     },
     "accepts": {
       },
       "dependencies": {
         "acorn": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
-          "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
+          "version": "7.4.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
+          "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
           "dev": true
         }
       }
     },
     "acorn-walk": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz",
-      "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
       "dev": true
     },
     "agent-base": {
         "humanize-ms": "^1.2.1"
       }
     },
+    "aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "dev": true,
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      }
+    },
     "ajv": {
-      "version": "6.10.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "version": "6.12.3",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+      "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
       "dev": true,
       "requires": {
-        "fast-deep-equal": "^2.0.1",
+        "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
         "json-schema-traverse": "^0.4.1",
         "uri-js": "^4.2.2"
       "dev": true
     },
     "ajv-keywords": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
-      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
       "dev": true
     },
     "amdefine": {
       "resolved": "https://registry.npmjs.org/angular-tree-component/-/angular-tree-component-8.5.6.tgz",
       "integrity": "sha512-cxNem6872diZz9kIGqrjSJbKt0P3WSq9wTqZIeVJ8zsddI4Y6ShAVZlZNXUMRyJq246c9pJ6JJEAOzKVLk9xgA==",
       "requires": {
-        "lodash": "^4.17.11",
+        "lodash": "4.17.20",
         "mobx": "^4.15.1"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "ansi-colors": {
       "dev": true
     },
     "array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "dev": true,
-      "requires": {
-        "array-uniq": "^1.0.1"
-      }
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true
     },
     "array-uniq": {
       "version": "1.0.3",
       }
     },
     "asn1.js": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
       "dev": true,
       "requires": {
         "bn.js": "^4.0.0",
         "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
       },
       "dependencies": {
         "bn.js": {
       "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.14"
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "async-each": {
       "dev": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
+      "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
       "dev": true
     },
     "axobject-query": {
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
       "dev": true
     },
     "binary-extensions": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
-      "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+      "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
       "dev": true
     },
-    "bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
       "dev": true
     },
     "bn.js": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
-      "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
+      "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==",
       "dev": true
     },
     "body-parser": {
       }
     },
     "browserify-sign": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
-      "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
       "dev": true,
       "requires": {
         "bn.js": "^5.1.1",
         "browserify-rsa": "^4.0.1",
         "create-hash": "^1.2.0",
         "create-hmac": "^1.1.7",
-        "elliptic": "^6.5.2",
+        "elliptic": "^6.5.3",
         "inherits": "^2.0.4",
         "parse-asn1": "^5.1.5",
         "readable-stream": "^3.6.0",
         "electron-to-chromium": "^1.3.378",
         "node-releases": "^1.1.52",
         "pkg-up": "^3.1.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.0.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-          "dev": true
-        },
-        "pkg-up": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
-          "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
-          "dev": true,
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        }
       }
     },
     "bs-logger": {
         "dom-serializer": "~0.1.1",
         "entities": "~1.1.1",
         "htmlparser2": "^3.9.1",
-        "lodash": "^4.15.0",
+        "lodash": "4.17.20",
         "parse5": "^3.0.1"
       },
       "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        },
         "parse5": {
           "version": "3.0.3",
           "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
       }
     },
     "chokidar": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
-      "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
+      "version": "3.4.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
+      "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
       "dev": true,
       "requires": {
         "anymatch": "~3.1.1",
       "dependencies": {
         "fsevents": {
           "version": "2.1.2"
-        },
-        "glob-parent": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
-          "dev": true,
-          "requires": {
-            "is-glob": "^4.0.1"
-          }
         }
       }
     },
         }
       }
     },
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "dev": true
+    },
     "cli-cursor": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
       "dev": true
     },
     "copy-webpack-plugin": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz",
-      "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==",
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz",
+      "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==",
       "dev": true,
       "requires": {
-        "cacache": "^12.0.3",
-        "find-cache-dir": "^2.1.0",
-        "glob-parent": "^3.1.0",
-        "globby": "^7.1.1",
-        "is-glob": "^4.0.1",
-        "loader-utils": "^1.2.3",
-        "minimatch": "^3.0.4",
+        "cacache": "^15.0.4",
+        "fast-glob": "^3.2.4",
+        "find-cache-dir": "^3.3.1",
+        "glob-parent": "^5.1.1",
+        "globby": "^11.0.1",
+        "loader-utils": "^2.0.0",
         "normalize-path": "^3.0.0",
-        "p-limit": "^2.2.1",
-        "schema-utils": "^1.0.0",
-        "serialize-javascript": "^2.1.2",
-        "webpack-log": "^2.0.0"
+        "p-limit": "^3.0.1",
+        "schema-utils": "^2.7.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-sources": "^1.4.3"
       },
       "dependencies": {
         "cacache": {
-          "version": "12.0.4",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
-          "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+          "version": "15.0.5",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz",
+          "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==",
           "dev": true,
           "requires": {
-            "bluebird": "^3.5.5",
-            "chownr": "^1.1.1",
-            "figgy-pudding": "^3.5.1",
+            "@npmcli/move-file": "^1.0.1",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
             "glob": "^7.1.4",
-            "graceful-fs": "^4.1.15",
-            "infer-owner": "^1.0.3",
-            "lru-cache": "^5.1.1",
-            "mississippi": "^3.0.0",
-            "mkdirp": "^0.5.1",
-            "move-concurrently": "^1.0.1",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.1",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^1.0.3",
+            "p-map": "^4.0.0",
             "promise-inflight": "^1.0.1",
-            "rimraf": "^2.6.3",
-            "ssri": "^6.0.1",
-            "unique-filename": "^1.1.1",
-            "y18n": "^4.0.0"
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.0",
+            "tar": "^6.0.2",
+            "unique-filename": "^1.1.1"
           }
         },
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+          "dev": true
+        },
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+          "dev": true
+        },
         "find-cache-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+          "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
           "dev": true,
           "requires": {
             "commondir": "^1.0.1",
-            "make-dir": "^2.0.0",
-            "pkg-dir": "^3.0.0"
+            "make-dir": "^3.0.2",
+            "pkg-dir": "^4.1.0"
           }
         },
         "glob": {
             "path-is-absolute": "^1.0.0"
           }
         },
+        "json5": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+          "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.5"
+          }
+        },
+        "loader-utils": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "lru-cache": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
           "dev": true,
           "requires": {
-            "yallist": "^3.0.2"
+            "yallist": "^4.0.0"
           }
         },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        },
         "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz",
+          "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==",
           "dev": true,
           "requires": {
             "p-try": "^2.0.0"
           "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "ssri": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
+          "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==",
+          "dev": true,
+          "requires": {
+            "minipass": "^3.1.1"
+          }
         },
         "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
           "dev": true
         }
       }
         "loader-utils": "^1.2.3",
         "merge-source-map": "^1.1.0",
         "schema-utils": "^2.6.1"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
       }
     },
     "create-ecdh": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
       "dev": true,
       "requires": {
         "bn.js": "^4.1.0",
-        "elliptic": "^6.0.0"
+        "elliptic": "^6.5.3"
       },
       "dependencies": {
         "bn.js": {
       }
     },
     "css-selector-tokenizer": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz",
-      "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==",
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
+      "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
       "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
-        "fastparse": "^1.1.2",
-        "regexpu-core": "^4.6.0"
+        "fastparse": "^1.1.2"
       }
     },
     "css-what": {
         "is-installed-globally": "0.1.0",
         "lazy-ass": "1.6.0",
         "listr": "0.14.3",
-        "lodash": "4.17.15",
+        "lodash": "4.17.20",
         "log-symbols": "3.0.0",
         "minimist": "1.2.5",
         "moment": "2.24.0",
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
+        "lodash": {
+          "version": "4.17.20"
+        },
         "semver": {
           "version": "5.7.1",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
         "rimraf": "^2.6.3"
       },
       "dependencies": {
+        "array-union": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+          "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+          "dev": true,
+          "requires": {
+            "array-uniq": "^1.0.1"
+          }
+        },
         "globby": {
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
               "dev": true
             }
           }
+        },
+        "p-map": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+          "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+          "dev": true
         }
       }
     },
       }
     },
     "dir-glob": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
-      "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
       "dev": true,
       "requires": {
-        "path-type": "^3.0.0"
+        "path-type": "^4.0.0"
       }
     },
     "dns-equal": {
       "dev": true
     },
     "duplexer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
-      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
     "duplexer2": {
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.446",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.446.tgz",
-      "integrity": "sha512-CLQaFuvkKqR9FD2G3cJrr1fV7DRMXiAKWLP2F8cxtvvtzAS7Tubt0kF47/m+uE61kiT+I7ZEn7HqLnmWdOhmuA==",
+      "version": "1.3.554",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.554.tgz",
+      "integrity": "sha512-Vtz2dVH5nMtKK4brahmgScwFS8PBnpA4VObYXtlsqN8ZpT9IFelv0Rpflc1+NIILjGVaj6vEiXQbhrs3Pl8O7g==",
       "dev": true
     },
     "elegant-spinner": {
       "dev": true
     },
     "elliptic": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
-      "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
+      "version": "6.5.3",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+      "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
       "dev": true,
       "requires": {
         "bn.js": "^4.4.0",
       }
     },
     "emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
       "dev": true
     },
     "emojis-list": {
       "dev": true
     },
     "encoding": {
-      "version": "0.1.12",
-      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
-      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
       "dev": true,
       "requires": {
-        "iconv-lite": "~0.4.13"
+        "iconv-lite": "^0.6.2"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
+          "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
+          }
+        }
       }
     },
     "end-of-stream": {
       }
     },
     "es-abstract": {
-      "version": "1.17.5",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
-      "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+      "version": "1.17.6",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
+      "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
       "dev": true,
       "requires": {
         "es-to-primitive": "^1.2.1",
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
         "has-symbols": "^1.0.1",
-        "is-callable": "^1.1.5",
-        "is-regex": "^1.0.5",
+        "is-callable": "^1.2.0",
+        "is-regex": "^1.1.0",
         "object-inspect": "^1.7.0",
         "object-keys": "^1.1.1",
         "object.assign": "^4.1.0",
-        "string.prototype.trimleft": "^2.1.1",
-        "string.prototype.trimright": "^2.1.1"
+        "string.prototype.trimend": "^1.0.1",
+        "string.prototype.trimstart": "^1.0.1"
       }
     },
     "es-to-primitive": {
         "ext": "^1.1.2"
       }
     },
+    "escalade": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz",
+      "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==",
+      "dev": true
+    },
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
       "dev": true
     },
     "escodegen": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
-      "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
+      "version": "1.14.3",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+      "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
       "dev": true,
       "requires": {
         "esprima": "^4.0.1",
       "dev": true
     },
     "eventemitter3": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
-      "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
     },
     "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-      "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
       "dev": true
     },
     "eventsource": {
       },
       "dependencies": {
         "type": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
-          "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==",
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
+          "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==",
           "dev": true
         }
       }
       }
     },
     "fast-deep-equal": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "dev": true
     },
     "fast-glob": {
-      "version": "2.2.7",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
-      "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+      "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
       "dev": true,
       "requires": {
-        "@mrmlnc/readdir-enhanced": "^2.2.1",
-        "@nodelib/fs.stat": "^1.1.2",
-        "glob-parent": "^3.1.0",
-        "is-glob": "^4.0.0",
-        "merge2": "^1.2.3",
-        "micromatch": "^3.1.10"
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.0",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.2",
+        "picomatch": "^2.2.1"
       }
     },
     "fast-json-stable-stringify": {
       "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
       "dev": true
     },
+    "fastq": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
+      "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
     "faye-websocket": {
       "version": "0.10.0",
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
       "requires": {
         "loader-utils": "^1.2.3",
         "schema-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
       }
     },
     "file-saver": {
       "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz",
       "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
     },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "dev": true,
-      "optional": true
-    },
     "fill-range": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
         "commondir": "^1.0.1",
         "make-dir": "^3.0.0",
         "pkg-dir": "^4.1.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
-        },
-        "make-dir": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-          "dev": true,
-          "requires": {
-            "semver": "^6.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.2.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-          "dev": true
-        },
-        "pkg-dir": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-          "dev": true,
-          "requires": {
-            "find-up": "^4.0.0"
-          }
-        }
       }
     },
     "find-up": {
         "resolve-dir": "^1.0.1"
       },
       "dependencies": {
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "is-glob": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
           "requires": {
             "is-extglob": "^2.1.0"
           }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
         }
       }
     },
       }
     },
     "follow-redirects": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
-      "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
-      "dev": true,
-      "requires": {
-        "debug": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        }
-      }
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
+      "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
+      "dev": true
     },
     "fontkit": {
       "version": "1.8.1",
       }
     },
     "fs-minipass": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
-      "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
       "dev": true,
       "requires": {
-        "minipass": "^2.6.0"
+        "minipass": "^3.0.0"
       }
     },
     "fs-write-stream-atomic": {
       }
     },
     "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+      "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
       "dev": true,
       "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
+        "is-glob": "^4.0.1"
       }
     },
     "glob-to-regexp": {
       "dev": true
     },
     "globby": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
-      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+      "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
       "dev": true,
       "requires": {
-        "array-union": "^1.0.1",
-        "dir-glob": "^2.0.0",
-        "glob": "^7.1.2",
-        "ignore": "^3.3.5",
-        "pify": "^3.0.0",
-        "slash": "^1.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.1.1",
+        "ignore": "^5.1.4",
+        "merge2": "^1.3.0",
+        "slash": "^3.0.0"
       }
     },
     "graceful-fs": {
       "dev": true
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "dev": true,
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
       "requires": {
         "bulk-require": "^1.0.1",
         "htmlparser2": "^3.10.0",
-        "lodash": "^4.17.11",
+        "lodash": "4.17.20",
         "promise": "^8.0.2"
       },
       "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        },
         "promise": {
           "version": "8.1.0",
           "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz",
           }
         },
         "mem": {
+          "dev": true,
           "requires": {
             "map-age-cleaner": "^0.1.1",
             "mimic-fn": "^2.0.0",
         "mimic-fn": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
         },
         "os-locale": {
           "version": "3.1.0",
         }
       }
     },
-    "http-parser-js": {
-      "version": "0.4.10",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
-      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
-      "dev": true
-    },
     "http-proxy": {
       "version": "1.18.1",
       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
       "requires": {
         "http-proxy": "^1.17.0",
         "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
+        "lodash": "4.17.20",
         "micromatch": "^3.1.10"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "lodash": {
+          "version": "4.17.20"
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
+        }
       }
     },
     "http-signature": {
       "dev": true
     },
     "ignore": {
-      "version": "3.3.10",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
-      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+      "version": "5.1.8",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+      "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
       "dev": true
     },
     "ignore-walk": {
       "requires": {
         "pkg-dir": "^3.0.0",
         "resolve-cwd": "^2.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
       }
     },
     "imurmurhash": {
       "dev": true
     },
     "indent-string": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
-      "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
       "dev": true
     },
     "infer-owner": {
         "cli-width": "^2.0.0",
         "external-editor": "^3.0.3",
         "figures": "^3.0.0",
-        "lodash": "^4.17.15",
+        "lodash": "4.17.20",
         "mute-stream": "0.0.8",
         "run-async": "^2.2.0",
         "rxjs": "^6.4.0",
           "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
           "dev": true
         },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
         "is-fullwidth-code-point": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
           "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
           "dev": true
         },
+        "lodash": {
+          "version": "4.17.20"
+        },
         "string-width": {
           "version": "4.2.0",
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
       "dev": true
     },
     "is-callable": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
-      "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+      "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
       "dev": true
     },
     "is-ci": {
       "dev": true
     },
     "is-docker": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz",
-      "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
+      "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
       "dev": true,
       "optional": true
     },
       "dev": true
     },
     "is-regex": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
-      "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
+      "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
       "dev": true,
       "requires": {
-        "has": "^1.0.3"
+        "has-symbols": "^1.0.1"
       }
     },
     "is-relative": {
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "make-dir": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-          "dev": true,
-          "requires": {
-            "semver": "^6.0.0"
-          }
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
             "color-name": "~1.1.4"
           }
         },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
         "find-up": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
           "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
           "dev": true
         },
-        "pkg-dir": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-          "dev": true,
-          "requires": {
-            "find-up": "^4.0.0"
-          }
-        },
         "require-main-filename": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
           }
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           }
         },
         "get-stream": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
           "dev": true,
           "requires": {
             "pump": "^3.0.0"
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-          "dev": true,
-          "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
             "supports-color": "^7.0.0"
           }
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-          "dev": true,
-          "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
+            "has-flag": "^4.0.0"
           }
         }
       }
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           }
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
             "color-name": "~1.1.4"
           }
         },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
         "find-up": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
           "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
           "dev": true
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
         "string-width": {
           "version": "4.2.0",
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
           }
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           }
         },
         "@types/yargs": {
-          "version": "13.0.9",
-          "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
-          "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+          "version": "13.0.10",
+          "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz",
+          "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==",
           "dev": true,
           "requires": {
             "@types/yargs-parser": "*"
           }
         },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "callsites": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
           "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
           "dev": true
         },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
         "jest-message-util": {
           "version": "24.9.0",
           "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
             "source-map": "^0.6.0"
           }
         },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
         "slash": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
         }
       }
     },
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "make-dir": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-          "dev": true,
-          "requires": {
-            "semver": "^6.0.0"
-          }
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "make-dir": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-          "dev": true,
-          "requires": {
-            "semver": "^6.0.0"
-          }
-        },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
       "dev": true
     },
     "js-yaml": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
-      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+      "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
       "dev": true,
       "requires": {
         "argparse": "^1.0.7",
       },
       "dependencies": {
         "acorn": {
-          "version": "7.3.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
-          "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
+          "version": "7.4.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
+          "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
           "dev": true
         },
         "parse5": {
       "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
       "dev": true
     },
+    "json-parse-even-better-errors": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz",
+      "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==",
+      "dev": true
+    },
     "json-parse-helpfulerror": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
         "listr-verbose-renderer": "^0.5.0",
         "p-map": "^2.0.0",
         "rxjs": "^6.3.3"
+      },
+      "dependencies": {
+        "p-map": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+          "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+          "dev": true
+        }
       }
     },
     "listr-silent-renderer": {
             "object-assign": "^4.1.0"
           }
         },
+        "indent-string": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+          "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+          "dev": true
+        },
         "log-symbols": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
             "snapdragon-node": "^2.0.1",
             "split-string": "^3.0.2",
             "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "chokidar": {
             }
           }
         },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
         "faye-websocket": {
           "version": "0.11.3",
           "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
             "is-number": "^3.0.0",
             "repeat-string": "^1.6.1",
             "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "fsevents": {
+          "dev": true,
+          "optional": true,
           "version": "2.1.2"
         },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
         "is-binary-path": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "dev": true,
           "requires": {
             "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
           }
         },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "is-buffer": "^1.1.5"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "ms": {
       }
     },
     "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+      "version": "4.17.20"
     },
     "lodash.clonedeep": {
       "version": "4.5.0",
       }
     },
     "loglevel": {
-      "version": "1.6.8",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
-      "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz",
+      "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==",
       "dev": true
     },
     "loglevel-plugin-prefix": {
       }
     },
     "lunr": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz",
-      "integrity": "sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==",
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
       "dev": true
     },
     "macos-release": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz",
-      "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz",
+      "integrity": "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==",
       "dev": true
     },
     "magic-string": {
       }
     },
     "make-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
       "dev": true,
       "requires": {
-        "pify": "^4.0.1",
-        "semver": "^5.6.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        }
+        "semver": "^6.0.0"
       }
     },
     "make-error": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "dev": true,
       "requires": {
         "p-defer": "^1.0.0"
       }
       "dev": true
     },
     "merge2": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
-      "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "dev": true
     },
     "methods": {
       "dev": true
     },
     "micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+      "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
       "dev": true,
       "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "dependencies": {
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-          "dev": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        }
+        "braces": "^3.0.1",
+        "picomatch": "^2.0.5"
       }
     },
     "miller-rabin": {
         "normalize-url": "1.9.1",
         "schema-utils": "^1.0.0",
         "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "minimalistic-assert": {
       "dev": true
     },
     "minipass": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
-      "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
       "dev": true,
       "requires": {
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.0"
+        "yallist": "^4.0.0"
       },
       "dependencies": {
         "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
           "dev": true
         }
       }
     },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "minizlib": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
-      "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
       "dev": true,
       "requires": {
-        "minipass": "^2.9.0"
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
       }
     },
     "mississippi": {
       }
     },
     "mobx": {
-      "version": "4.15.4",
-      "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.15.4.tgz",
-      "integrity": "sha512-nyuHPqmKnVOnbvkjR8OrijBtovxAHYC+JU8/qBqvBw4Dez/n+zzxqNHbZNFy7/07+wwc/Qz7JS9WSfy1LcYISA=="
+      "version": "4.15.6",
+      "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.15.6.tgz",
+      "integrity": "sha512-eZVEHZLi/Fe+V4qurBBQoFHCqaGrfMuYK1Vy4t5MHYfy90f52ptAKsemHsJcYl+R5/sA3oeT3rMLiVsbB7bllA=="
     },
     "moment": {
       "version": "2.24.0",
       }
     },
     "mri": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz",
-      "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz",
+      "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==",
       "dev": true
     },
     "ms": {
         "array-union": "^1.0.1",
         "arrify": "^1.0.0",
         "minimatch": "^3.0.0"
+      },
+      "dependencies": {
+        "array-union": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+          "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+          "dev": true,
+          "requires": {
+            "array-uniq": "^1.0.1"
+          }
+        }
       }
     },
     "mute-stream": {
       "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
       "dev": true
     },
-    "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-      "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
-      "dev": true,
-      "optional": true
-    },
     "nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
       "dev": true
     },
     "neo-async": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
-      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
       "dev": true
     },
     "next-tick": {
       "integrity": "sha512-D5K7OqF0m5lOBYvNOsraoEo4OPHja9zfGNj+HWy2nUcP0LP2s+Y/QaQlkG/1rHlwXq9HPm8rLxzSutA0eLHxGQ==",
       "requires": {
         "@types/chart.js": "^2.7.48",
-        "lodash": "^4.17.11",
+        "lodash": "4.17.20",
         "tslib": "^1.9.0"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "ngx-bootstrap": {
       "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-5.5.0.tgz",
       "integrity": "sha512-BJeghbkKFQl49sg3GIYQyjvwaHn64xFOsinBVD8HWKOVpRJSnuafrjXByGDtfq35jGY4R+7iBLksM1IYLUPshg=="
     },
+    "ngx-pipe-function": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/ngx-pipe-function/-/ngx-pipe-function-1.0.0.tgz",
+      "integrity": "sha512-AFWZ3icsq+0/nxFZtqRGZ03nRFoHcxVkZNGIi4ZQbdl5QLP3FmNTHGMmigohSeCV785l3YmPDUEx+6qwdGynMw==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
     "ngx-toastr": {
       "version": "11.3.3",
       "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-11.3.3.tgz",
       }
     },
     "node-releases": {
-      "version": "1.1.56",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.56.tgz",
-      "integrity": "sha512-EVo605FhWLygH8a64TjgpjyHYOihkxECwX1bHHr8tETJKWEiWS2YJjPbvsX2jFjnjTNEgBCmk9mLjKG1Mf11cw==",
+      "version": "1.1.60",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz",
+      "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==",
       "dev": true
     },
     "normalize-package-data": {
       }
     },
     "npm-registry-fetch": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.4.tgz",
-      "integrity": "sha512-6jb34hX/iYNQebqWUHtU8YF6Cjb1H6ouTFPClYsyiW6lpFkljTpdeftm53rRojtja1rKAvKNIIiTS5Sjpw4wsA==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz",
+      "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==",
       "dev": true,
       "requires": {
         "JSONStream": "^1.3.4",
             "which": "^1.2.9"
           }
         },
+        "path-type": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
         "read-pkg": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
       }
     },
     "object-inspect": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
-      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+      "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
       "dev": true
     },
     "object-is": {
       }
     },
     "onetime": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
       "dev": true,
       "requires": {
         "mimic-fn": "^2.1.0"
       }
     },
     "opencollective-postinstall": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
-      "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+      "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
       "dev": true
     },
     "opn": {
     "p-defer": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
-      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
     },
     "p-each-series": {
       "version": "2.1.0",
     "p-is-promise": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
-      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+      "dev": true
     },
     "p-limit": {
       "version": "1.3.0",
       }
     },
     "p-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
-      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
-      "dev": true
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+      "dev": true,
+      "requires": {
+        "aggregate-error": "^3.0.0"
+      }
     },
     "p-retry": {
       "version": "3.0.1",
         "which": "^1.3.1"
       },
       "dependencies": {
+        "fs-minipass": {
+          "version": "1.2.7",
+          "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+          "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+          "dev": true,
+          "requires": {
+            "minipass": "^2.6.0"
+          }
+        },
         "get-stream": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
             "yallist": "^3.0.2"
           }
         },
+        "minipass": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+          "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.3.3",
+          "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+          "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+          "dev": true,
+          "requires": {
+            "minipass": "^2.9.0"
+          }
+        },
         "npm-pick-manifest": {
           "version": "2.2.3",
           "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz",
           "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
           "dev": true
         },
+        "tar": {
+          "version": "4.4.13",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
+          "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
+          "dev": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.8.6",
+            "minizlib": "^1.2.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.3"
+          }
+        },
         "yallist": {
           "version": "3.1.1",
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       }
     },
     "parse-asn1": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
       "dev": true,
       "requires": {
-        "asn1.js": "^4.0.0",
+        "asn1.js": "^5.2.0",
         "browserify-aes": "^1.0.0",
-        "create-hash": "^1.1.0",
         "evp_bytestokey": "^1.0.0",
         "pbkdf2": "^3.0.3",
         "safe-buffer": "^5.1.1"
       "dev": true
     },
     "path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
     },
     "pause-stream": {
       "version": "0.0.11",
       }
     },
     "pbkdf2": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+      "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
       "dev": true,
       "requires": {
         "create-hash": "^1.1.2",
       }
     },
     "pdfmake": {
-      "version": "0.1.65",
-      "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.1.65.tgz",
-      "integrity": "sha512-MgzRyiKSP3IEUH7vm4oj3lpikmk5oCD9kYxiJM6Z2Xf6CP9EcikeSDey2rGd4WVvn79Y0TGqz2+to8FtWP8MrA==",
+      "version": "0.1.68",
+      "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.1.68.tgz",
+      "integrity": "sha512-oE1VEjkluro3+QqvLbFgFU/rRgyKdbPy/Fh8SS/nsUxnsiUcm85ChpmD6YD0hQW1E0d3hppAo4Yh+xdXucenIA==",
       "dev": true,
       "requires": {
-        "iconv-lite": "^0.5.1",
+        "iconv-lite": "^0.6.2",
         "linebreak": "^1.0.2",
         "pdfkit": "^0.11.0",
-        "svg-to-pdfkit": "^0.1.8"
+        "svg-to-pdfkit": "^0.1.8",
+        "xmldoc": "^1.1.2"
       },
       "dependencies": {
         "iconv-lite": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
-          "integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
+          "version": "0.6.2",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
+          "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
           "dev": true,
           "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
           }
         }
       }
       }
     },
     "pkg-dir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "dev": true,
+      "requires": {
+        "find-up": "^4.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+          "dev": true
+        }
+      }
+    },
+    "pkg-up": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+      "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
       "dev": true,
       "requires": {
         "find-up": "^3.0.0"
         }
       }
     },
-    "pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
-      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
-      "dev": true,
-      "requires": {
-        "find-up": "^2.1.0"
-      }
-    },
     "pn": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
       "dev": true
     },
     "portfinder": {
-      "version": "1.0.26",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
-      "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
+      "version": "1.0.28",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+      "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
       "dev": true,
       "requires": {
         "async": "^2.6.2",
         "debug": "^3.1.1",
-        "mkdirp": "^0.5.1"
+        "mkdirp": "^0.5.5"
       },
       "dependencies": {
         "debug": {
         "postcss": "^7.0.0",
         "postcss-load-config": "^2.0.0",
         "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "postcss-value-parser": {
           "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
           "dev": true
         },
-        "array-union": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-          "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-          "dev": true
-        },
         "arrify": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
           "dev": true
         },
         "cross-spawn": {
-          "version": "7.0.2",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
-          "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
           "dev": true,
           "requires": {
             "path-key": "^3.1.0",
           }
         },
         "get-stream": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
           "dev": true,
           "requires": {
             "pump": "^3.0.0"
           }
         },
-        "ignore": {
-          "version": "5.1.4",
-          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
-          "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
-          "dev": true
-        },
         "is-stream": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
         }
       }
     },
-    "private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
-      "dev": true
-    },
     "process": {
       "version": "0.11.10",
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
       "dev": true
     },
     "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
-      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
       "dev": true
     },
     "quote-stream": {
       "requires": {
         "loader-utils": "^1.1.0",
         "schema-utils": "^2.0.1"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
       }
     },
     "react-is": {
       }
     },
     "read-package-json": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz",
-      "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz",
+      "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==",
       "dev": true,
       "requires": {
         "glob": "^7.1.1",
-        "graceful-fs": "^4.1.2",
-        "json-parse-better-errors": "^1.0.1",
+        "json-parse-even-better-errors": "^2.3.0",
         "normalize-package-data": "^2.0.0",
         "npm-normalize-package-bin": "^1.0.0"
       }
       },
       "dependencies": {
         "parse-json": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
-          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
+          "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
           "dev": true,
           "requires": {
             "@babel/code-frame": "^7.0.0",
             "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1",
+            "json-parse-even-better-errors": "^2.3.0",
             "lines-and-columns": "^1.1.6"
           }
         },
       "dev": true
     },
     "regenerate": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
-      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+      "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
       "dev": true
     },
     "regenerate-unicode-properties": {
       "dev": true
     },
     "regenerator-transform": {
-      "version": "0.14.4",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
-      "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==",
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+      "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
       "dev": true,
       "requires": {
-        "@babel/runtime": "^7.8.4",
-        "private": "^0.1.8"
+        "@babel/runtime": "^7.8.4"
       }
     },
     "regex-not": {
       }
     },
     "regjsgen": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
-      "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+      "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
       "dev": true
     },
     "regjsparser": {
             "color-name": "~1.1.4"
           }
         },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
         "find-up": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
           }
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
           "dev": true
         },
         "yargs": {
-          "version": "15.3.1",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
-          "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
+          "version": "15.4.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
           "dev": true,
           "requires": {
             "cliui": "^6.0.0",
             "string-width": "^4.2.0",
             "which-module": "^2.0.0",
             "y18n": "^4.0.0",
-            "yargs-parser": "^18.1.1"
+            "yargs-parser": "^18.1.2"
           }
         },
         "yargs-parser": {
       }
     },
     "request-promise-core": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
-      "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
+      "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.15"
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "request-promise-native": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
-      "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
+      "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
       "dev": true,
       "requires": {
-        "request-promise-core": "1.1.3",
+        "request-promise-core": "1.1.4",
         "stealthy-require": "^1.1.1",
         "tough-cookie": "^2.3.3"
       }
       "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
       "dev": true
     },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
     "rimraf": {
       "version": "2.7.1",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
       "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
       "dev": true
     },
+    "run-parallel": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+      "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+      "dev": true
+    },
     "run-queue": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
             "normalize-path": "^2.1.1"
           }
         },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "cross-spawn": {
           "version": "6.0.5",
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
             "strip-eof": "^1.0.0"
           }
         },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "get-stream": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
             "pump": "^3.0.0"
           }
         },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
         "normalize-path": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
           "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
           "dev": true
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
         }
       }
     },
       }
     },
     "schema-utils": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-      "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+      "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
       "dev": true,
       "requires": {
-        "ajv": "^6.1.0",
-        "ajv-errors": "^1.0.0",
-        "ajv-keywords": "^3.1.0"
+        "@types/json-schema": "^7.0.4",
+        "ajv": "^6.12.2",
+        "ajv-keywords": "^3.4.1"
       }
     },
     "scope-analyzer": {
       }
     },
     "serialize-javascript": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
-      "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
-      "dev": true
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
     },
     "serve-index": {
       "version": "1.9.1",
       "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
     },
     "simplebar": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.2.0.tgz",
-      "integrity": "sha512-CpVSINCQ/XAYABUdUAnVWHyjkBYoFu+s12IUrZgVNfXzILNXP0MP+5OaIBjylzjYxIE/rsuC1K50/xJldPGGpQ==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.2.1.tgz",
+      "integrity": "sha512-nfOsptB/tb1kzSOaDIJFcrm8EXj5J0pZBPLGetJR8SE6v+97cbedtlNH/L81okgjsFlF11kDndmZ0mscaGAILw==",
       "requires": {
         "can-use-dom": "^0.1.0",
         "core-js": "^3.0.1",
       "dev": true
     },
     "slash": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
-      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
       "dev": true
     },
     "slice-ansi": {
       }
     },
     "sockjs": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
-      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+      "version": "0.3.20",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
+      "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
       "dev": true,
       "requires": {
         "faye-websocket": "^0.10.0",
-        "uuid": "^3.0.1"
+        "uuid": "^3.4.0",
+        "websocket-driver": "0.6.5"
       }
     },
     "sockjs-client": {
       "dev": true
     },
     "spdx-correct": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
-      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+      "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
       "dev": true,
       "requires": {
         "spdx-expression-parse": "^3.0.0",
       },
       "dependencies": {
         "cross-spawn": {
-          "version": "7.0.2",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
-          "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
           "dev": true,
           "requires": {
             "path-key": "^3.1.0",
           }
         },
         "get-stream": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+          "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
           "dev": true,
           "requires": {
             "pump": "^3.0.0"
       }
     },
     "static-eval": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz",
-      "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz",
+      "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==",
       "dev": true,
       "requires": {
         "escodegen": "^1.11.1"
         "es-abstract": "^1.17.5"
       }
     },
-    "string.prototype.trimleft": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
-      "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "string.prototype.trimstart": "^1.0.0"
-      }
-    },
-    "string.prototype.trimright": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
-      "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "string.prototype.trimend": "^1.0.0"
-      }
-    },
     "string.prototype.trimstart": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
       "requires": {
         "loader-utils": "^1.2.3",
         "schema-utils": "^2.0.1"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
       }
     },
     "stylus": {
           "dev": true
         },
         "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
             "has-flag": "^4.0.0"
       "dev": true
     },
     "tar": {
-      "version": "4.4.13",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
-      "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+      "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
       "dev": true,
       "requires": {
-        "chownr": "^1.1.1",
-        "fs-minipass": "^1.2.5",
-        "minipass": "^2.8.6",
-        "minizlib": "^1.2.1",
-        "mkdirp": "^0.5.0",
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.3"
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
       },
       "dependencies": {
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+          "dev": true
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        },
         "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
           "dev": true
         }
       }
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
-      "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz",
+      "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==",
       "dev": true,
       "requires": {
-        "cacache": "^12.0.2",
-        "find-cache-dir": "^2.1.0",
-        "is-wsl": "^1.1.0",
-        "schema-utils": "^1.0.0",
-        "serialize-javascript": "^2.1.2",
+        "cacache": "^15.0.4",
+        "find-cache-dir": "^3.3.1",
+        "jest-worker": "^26.0.0",
+        "p-limit": "^2.3.0",
+        "schema-utils": "^2.6.6",
+        "serialize-javascript": "^3.1.0",
         "source-map": "^0.6.1",
-        "terser": "^4.1.2",
-        "webpack-sources": "^1.4.0",
-        "worker-farm": "^1.7.0"
+        "terser": "^4.6.13",
+        "webpack-sources": "^1.4.3"
       },
       "dependencies": {
+        "cacache": {
+          "version": "15.0.5",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz",
+          "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==",
+          "dev": true,
+          "requires": {
+            "@npmcli/move-file": "^1.0.1",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.1",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^1.0.3",
+            "p-map": "^4.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.0",
+            "tar": "^6.0.2",
+            "unique-filename": "^1.1.1"
+          }
+        },
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+          "dev": true
+        },
         "find-cache-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+          "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
           "dev": true,
           "requires": {
             "commondir": "^1.0.1",
-            "make-dir": "^2.0.0",
-            "pkg-dir": "^3.0.0"
+            "make-dir": "^3.0.2",
+            "pkg-dir": "^4.1.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
+        "glob": {
+          "version": "7.1.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "jest-worker": {
+          "version": "26.3.0",
+          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz",
+          "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==",
+          "dev": true,
+          "requires": {
+            "@types/node": "*",
+            "merge-stream": "^2.0.0",
+            "supports-color": "^7.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "serialize-javascript": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+          "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
+          "dev": true,
+          "requires": {
+            "randombytes": "^2.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "ssri": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
+          "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==",
+          "dev": true,
+          "requires": {
+            "minipass": "^3.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "terser": {
+          "version": "4.8.0",
+          "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+          "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+          "dev": true,
+          "requires": {
+            "commander": "^2.20.0",
+            "source-map": "~0.6.1",
+            "source-map-support": "~0.5.12"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
     },
     "test-exclude": {
       "version": "6.0.0",
             "minimist": "^1.2.5"
           }
         },
-        "micromatch": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-          "dev": true,
-          "requires": {
-            "braces": "^3.0.1",
-            "picomatch": "^2.0.5"
-          }
-        },
         "yargs-parser": {
           "version": "18.1.3",
           "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
         "typescript": "2.9.1"
       },
       "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+          "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+          "dev": true
+        },
+        "array-union": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+          "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+          "dev": true,
+          "requires": {
+            "array-uniq": "^1.0.1"
+          }
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "dir-glob": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
             "path-type": "^3.0.0"
           }
         },
+        "fast-glob": {
+          "version": "2.2.7",
+          "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+          "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+          "dev": true,
+          "requires": {
+            "@mrmlnc/readdir-enhanced": "^2.2.1",
+            "@nodelib/fs.stat": "^1.1.2",
+            "glob-parent": "^3.1.0",
+            "is-glob": "^4.0.0",
+            "merge2": "^1.2.3",
+            "micromatch": "^3.1.10"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "4.0.1",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+              "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.1"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
         "fs-extra": {
           "version": "6.0.1",
           "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
             "universalify": "^0.1.0"
           }
         },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          }
+        },
         "globby": {
           "version": "8.0.2",
           "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
             "slash": "^1.0.0"
           }
         },
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
+        "path-type": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
         "pify": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
           "dev": true
         },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
+        },
         "typescript": {
           "version": "2.9.1",
           "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz",
       "dev": true
     },
     "uglify-js": {
-      "version": "3.9.3",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.3.tgz",
-      "integrity": "sha512-r5ImcL6QyzQGVimQoov3aL2ZScywrOgBXGndbWrdehKoSvGe/RmiE5Jpw/v+GvxODt6l2tpBXwA7n+qZVlHBMA==",
+      "version": "3.10.2",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.2.tgz",
+      "integrity": "sha512-GXCYNwqoo0MbLARghYjxVBxDCnU0tLqN7IPLdHHbibCb1NI5zBkU2EPcy/GaVxc0BtTjqyGXJCINe6JMR2Dpow==",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "commander": "~2.20.3"
-      }
+      "optional": true
     },
     "unc-path-regex": {
       "version": "0.1.2",
       }
     },
     "universal-analytics": {
-      "version": "0.4.20",
-      "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz",
-      "integrity": "sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw==",
+      "version": "0.4.23",
+      "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz",
+      "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==",
       "dev": true,
       "requires": {
-        "debug": "^3.0.0",
-        "request": "^2.88.0",
+        "debug": "^4.1.1",
+        "request": "^2.88.2",
         "uuid": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        }
       }
     },
     "universalify": {
       "dev": true,
       "requires": {
         "@hapi/joi": "^16.1.8",
-        "lodash": "^4.17.15",
+        "lodash": "4.17.20",
         "minimist": "^1.2.0",
         "request": "^2.88.0",
         "request-promise-native": "^1.0.8",
         "rxjs": "^6.5.4"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "walker": {
       }
     },
     "watchpack": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
-      "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
+      "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
       "dev": true,
       "requires": {
-        "chokidar": "^3.4.0",
+        "chokidar": "^3.4.1",
         "graceful-fs": "^4.1.2",
         "neo-async": "^2.5.0",
         "watchpack-chokidar2": "^2.0.0"
             "snapdragon-node": "^2.0.1",
             "split-string": "^3.0.2",
             "to-regex": "^3.0.1"
-          }
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
         },
         "chokidar": {
           "version": "2.1.8",
             }
           }
         },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
         "fill-range": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
             "is-number": "^3.0.0",
             "repeat-string": "^1.6.1",
             "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "fsevents": {
+          "dev": true,
+          "optional": true,
           "version": "2.1.2"
         },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
         "is-binary-path": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "optional": true,
           "requires": {
             "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
           }
         },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "optional": true,
           "requires": {
-            "is-buffer": "^1.1.5"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "readdirp": {
         "terser-webpack-plugin": "^1.4.1",
         "watchpack": "^1.6.0",
         "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+          "dev": true,
+          "requires": {
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "terser-webpack-plugin": {
+          "version": "1.4.5",
+          "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+          "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+          "dev": true,
+          "requires": {
+            "cacache": "^12.0.2",
+            "find-cache-dir": "^2.1.0",
+            "is-wsl": "^1.1.0",
+            "schema-utils": "^1.0.0",
+            "serialize-javascript": "^4.0.0",
+            "source-map": "^0.6.1",
+            "terser": "^4.1.2",
+            "webpack-sources": "^1.4.0",
+            "worker-farm": "^1.7.0"
+          }
+        },
+        "to-regex-range": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "dev": true,
+          "requires": {
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1"
+          }
+        }
       }
     },
     "webpack-core": {
       },
       "dependencies": {
         "mime": {
-          "version": "2.4.5",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
-          "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==",
+          "version": "2.4.6",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+          "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
           "dev": true
         }
       }
     },
     "webpack-dev-server": {
-      "version": "3.9.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz",
-      "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==",
+      "version": "3.11.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
+      "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
         "debug": "^4.1.1",
         "del": "^4.1.1",
         "express": "^4.17.1",
-        "html-entities": "^1.2.1",
+        "html-entities": "^1.3.1",
         "http-proxy-middleware": "0.19.1",
         "import-local": "^2.0.0",
         "internal-ip": "^4.3.0",
         "ip": "^1.1.5",
         "is-absolute-url": "^3.0.3",
         "killable": "^1.0.1",
-        "loglevel": "^1.6.4",
+        "loglevel": "^1.6.8",
         "opn": "^5.5.0",
         "p-retry": "^3.0.1",
-        "portfinder": "^1.0.25",
+        "portfinder": "^1.0.26",
         "schema-utils": "^1.0.0",
         "selfsigned": "^1.10.7",
         "semver": "^6.3.0",
         "serve-index": "^1.9.1",
-        "sockjs": "0.3.19",
+        "sockjs": "0.3.20",
         "sockjs-client": "1.4.0",
-        "spdy": "^4.0.1",
+        "spdy": "^4.0.2",
         "strip-ansi": "^3.0.1",
         "supports-color": "^6.1.0",
         "url": "^0.11.0",
         "webpack-dev-middleware": "^3.7.2",
         "webpack-log": "^2.0.0",
         "ws": "^6.2.1",
-        "yargs": "12.0.5"
+        "yargs": "^13.3.2"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
         "anymatch": {
             "snapdragon-node": "^2.0.1",
             "split-string": "^3.0.2",
             "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "camelcase": {
           }
         },
         "cliui": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
-          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
           "dev": true,
           "requires": {
-            "string-width": "^2.1.1",
-            "strip-ansi": "^4.0.0",
-            "wrap-ansi": "^2.0.0"
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
           },
           "dependencies": {
             "strip-ansi": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
-                "ansi-regex": "^3.0.0"
+                "ansi-regex": "^4.1.0"
               }
             }
           }
         },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          },
-          "dependencies": {
-            "semver": {
-              "version": "5.7.1",
-              "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-              "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-              "dev": true
-            }
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
         "fill-range": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
             "is-number": "^3.0.0",
             "repeat-string": "^1.6.1",
             "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
           }
         },
         "find-up": {
           }
         },
         "fsevents": {
+          "dev": true,
+          "optional": true,
           "version": "2.1.2"
         },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+          "dev": true
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "pump": "^3.0.0"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
           }
         },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
-          "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
-          "dev": true
-        },
         "is-binary-path": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
             "binary-extensions": "^1.0.0"
           }
         },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
         "is-number": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
           "dev": true,
           "requires": {
             "kind-of": "^3.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
-          "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^2.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
           }
         },
         "locate-path": {
             "path-exists": "^3.0.0"
           }
         },
-        "mem": {
-          "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
-          },
-          "version": "4.3.0"
-        },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
-        },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
-          "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "4.3.0"
-          },
-          "dependencies": {
-            "mem": {
-              "version": "4.3.0"
-            }
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "p-limit": {
             "readable-stream": "^2.0.2"
           }
         },
+        "require-main-filename": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+          "dev": true
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
         "supports-color": {
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
             "repeat-string": "^1.6.1"
           }
         },
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+              "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
+        "y18n": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+          "dev": true
+        },
         "yargs": {
-          "version": "12.0.5",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
-          "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+          "version": "13.3.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
           "dev": true,
           "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.2.0",
+            "cliui": "^5.0.0",
             "find-up": "^3.0.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.0.0",
+            "get-caller-file": "^2.0.1",
             "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
+            "require-main-filename": "^2.0.0",
             "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
+            "string-width": "^3.0.0",
             "which-module": "^2.0.0",
-            "y18n": "^3.2.1 || ^4.0.0",
-            "yargs-parser": "^11.1.1"
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
           }
         },
         "yargs-parser": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
-          "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+          "version": "13.1.2",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
           "dev": true,
           "requires": {
             "camelcase": "^5.0.0",
       "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.5"
+        "lodash": "4.17.20"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.20"
+        }
       }
     },
     "webpack-sources": {
       }
     },
     "websocket-driver": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
-      "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+      "version": "0.6.5",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+      "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
       "dev": true,
       "requires": {
-        "http-parser-js": ">=0.4.0 <0.4.11",
-        "safe-buffer": ">=5.1.0",
         "websocket-extensions": ">=0.1.1"
       }
     },
     "websocket-extensions": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
-      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
       "dev": true
     },
     "whatwg-encoding": {
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
     "windows-release": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz",
-      "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz",
+      "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==",
       "dev": true,
       "requires": {
         "execa": "^1.0.0"
       "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
       "dev": true
     },
+    "xmldoc": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz",
+      "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==",
+      "dev": true,
+      "requires": {
+        "sax": "^1.2.1"
+      },
+      "dependencies": {
+        "sax": {
+          "version": "1.2.4",
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+          "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+          "dev": true
+        }
+      }
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
index cb79d4619684631a52127eb54f84fdae36fa99d1..6d32c44353a599157320ed0f310cbbf063b1af3f 100644 (file)
     "detect-browser": "5.0.0",
     "file-saver": "^2.0.2",
     "fork-awesome": "1.1.7",
-    "lodash": "4.17.15",
+    "lodash": "4.17.20",
     "moment": "2.24.0",
     "ng-block-ui": "2.1.8",
     "ng-bootstrap-form-validation": "5.0.0",
     "ng-click-outside": "6.0.0",
     "ng2-charts": "2.3.0",
     "ngx-bootstrap": "5.5.0",
+    "ngx-pipe-function": "^1.0.0",
     "ngx-toastr": "11.3.3",
     "rxjs": "6.5.4",
     "simplebar-angular": "2.1.0",
     "zone.js": "0.9.1"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "0.803.26",
-    "@angular/cli": "8.3.26",
+    "@angular-devkit/build-angular": "0.803.29",
+    "@angular/cli": "8.3.29",
     "@angular/compiler-cli": "8.2.14",
     "@angular/language-service": "8.2.14",
     "@compodoc/compodoc": "1.1.11",
   },
   "resolutions": {
     "mem": "4.3.0",
-    "fsevents": "2.1.2"
+    "fsevents": "2.1.2",
+    "lodash": "4.17.20"
   }
 }
index 4e40258f143aeae1b01212c4ddd58f9e8f185b1c..41f4e239ad32f4592796fcb951e37fe3d9e20100 100644 (file)
@@ -189,7 +189,7 @@ const routes: Routes = [
       // Mgr modules
       {
         path: 'mgr-modules',
-        data: { breadcrumbs: 'Cluster/Manager modules' },
+        data: { breadcrumbs: 'Cluster/Manager Modules' },
         children: [
           {
             path: '',
index 16ff57abd2319d381a0a06540ee5bb33b9e3cceb..a9b4a8f07b911106338017ff093884fea43b8632 100644 (file)
@@ -195,8 +195,7 @@ describe('IscsiTargetListComponent', () => {
             id: '-1'
           }
         ];
-        expect(action.disable(undefined)).toBeTruthy();
-        expect(action.disableDesc(undefined)).toBe('Unavailable gateway(s)');
+        expect(action.disable(undefined)).toBe('Unavailable gateway(s)');
       });
 
       it('should be enabled if active sessions', () => {
@@ -209,7 +208,6 @@ describe('IscsiTargetListComponent', () => {
           }
         ];
         expect(action.disable(undefined)).toBeFalsy();
-        expect(action.disableDesc(undefined)).toBeUndefined();
       });
 
       it('should be enabled if no active sessions', () => {
@@ -222,7 +220,6 @@ describe('IscsiTargetListComponent', () => {
           }
         ];
         expect(action.disable(undefined)).toBeFalsy();
-        expect(action.disableDesc(undefined)).toBeUndefined();
       });
     });
 
@@ -237,8 +234,7 @@ describe('IscsiTargetListComponent', () => {
             id: '-1'
           }
         ];
-        expect(action.disable(undefined)).toBeTruthy();
-        expect(action.disableDesc(undefined)).toBe('Unavailable gateway(s)');
+        expect(action.disable(undefined)).toBe('Unavailable gateway(s)');
       });
 
       it('should be disabled if active sessions', () => {
@@ -250,8 +246,7 @@ describe('IscsiTargetListComponent', () => {
             }
           }
         ];
-        expect(action.disable(undefined)).toBeTruthy();
-        expect(action.disableDesc(undefined)).toBe('Target has active sessions');
+        expect(action.disable(undefined)).toBe('Target has active sessions');
       });
 
       it('should be enabled if no active sessions', () => {
@@ -264,7 +259,6 @@ describe('IscsiTargetListComponent', () => {
           }
         ];
         expect(action.disable(undefined)).toBeFalsy();
-        expect(action.disableDesc(undefined)).toBeUndefined();
       });
     });
   });
index fb49691f8fd8098b9b66d3c043c43ed022e66863..09bc4d288d1040b46d1d9ff263ce9e894f3e215d 100644 (file)
@@ -18,6 +18,7 @@ import { CdTableSelection } from '../../../shared/models/cd-table-selection';
 import { FinishedTask } from '../../../shared/models/finished-task';
 import { Permission } from '../../../shared/models/permissions';
 import { Task } from '../../../shared/models/task';
+import { JoinPipe } from '../../../shared/pipes/join.pipe';
 import { NotAvailablePipe } from '../../../shared/pipes/not-available.pipe';
 import { AuthStorageService } from '../../../shared/services/auth-storage.service';
 import { TaskListService } from '../../../shared/services/task-list.service';
@@ -59,6 +60,7 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
     private authStorageService: AuthStorageService,
     private i18n: I18n,
     private iscsiService: IscsiService,
+    private joinPipe: JoinPipe,
     private taskListService: TaskListService,
     private notAvailablePipe: NotAvailablePipe,
     private modalService: BsModalService,
@@ -80,16 +82,14 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
         icon: Icons.edit,
         routerLink: () => `/block/iscsi/targets/edit/${this.selection.first().target_iqn}`,
         name: this.actionLabels.EDIT,
-        disable: () => !this.selection.first() || !_.isUndefined(this.getEditDisableDesc()),
-        disableDesc: () => this.getEditDisableDesc()
+        disable: () => this.getEditDisableDesc()
       },
       {
         permission: 'delete',
         icon: Icons.destroy,
         click: () => this.deleteIscsiTargetModal(),
         name: this.actionLabels.DELETE,
-        disable: () => !this.selection.first() || !_.isUndefined(this.getDeleteDisableDesc()),
-        disableDesc: () => this.getDeleteDisableDesc()
+        disable: () => this.getDeleteDisableDesc()
       }
     ];
   }
@@ -105,11 +105,13 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
       {
         name: this.i18n('Portals'),
         prop: 'cdPortals',
+        pipe: this.joinPipe,
         flexGrow: 2
       },
       {
         name: this.i18n('Images'),
         prop: 'cdImages',
+        pipe: this.joinPipe,
         flexGrow: 2
       },
       {
@@ -152,8 +154,9 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
     }
   }
 
-  getEditDisableDesc(): string | undefined {
+  getEditDisableDesc(): string | boolean {
     const first = this.selection.first();
+
     if (first && first.cdExecuting) {
       return first.cdExecuting;
     }
@@ -161,11 +164,12 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
       return this.i18n('Unavailable gateway(s)');
     }
 
-    return undefined;
+    return !first;
   }
 
-  getDeleteDisableDesc(): string | undefined {
+  getDeleteDisableDesc(): string | boolean {
     const first = this.selection.first();
+
     if (first && first.cdExecuting) {
       return first.cdExecuting;
     }
@@ -176,7 +180,7 @@ export class IscsiTargetListComponent extends ListWithDetails implements OnInit,
       return this.i18n('Target has active sessions');
     }
 
-    return undefined;
+    return !first;
   }
 
   prepareResponse(resp: any): any[] {
index a0e3bf8b308ece796eaa0d2e48c94406b20d886f..4e5deedfafc7bcdac45ecfdf748c2bdc8484e915 100644 (file)
@@ -4,13 +4,13 @@
 
   <div *ngFor="let section of rbdConfigurationService.sections"
        class="col-12">
-    <h3 class="cd-header">
+    <h4 class="cd-header">
       <span (click)="toggleSectionVisibility(section.class)"
             class="collapsible">
         {{ section.heading }} <i [ngClass]="!sectionVisibility[section.class] ? icons.addCircle : icons.minusCircle"
                                  aria-hidden="true"></i>
       </span>
-    </h3>
+    </h4>
     <div class="{{ section.class }}"
          [hidden]="!sectionVisibility[section.class]">
       <div class="form-group row"
index 314bde9ece56a049c8effa3c1951155a817441af..88a52b6c7be758a6eb459ae4a8bd5bcc2686d8e5 100644 (file)
        heading="Configuration">
     <cd-rbd-configuration-table [data]="selection['configuration']"></cd-rbd-configuration-table>
   </tab>
+  <tab i18n-heading
+       heading="Performance">
+    <cd-grafana [grafanaPath]="rbdDashboardUrl"
+                uid="YhCYGcuZz"
+                grafanaStyle="one">
+    </cd-grafana>
+  </tab>
 </tabset>
 
 <ng-template
           tooltip="This is the global value. No value for this option has been set for this image.">Global</span>
   </ng-template>
 </ng-template>
-
index 0916391e06633a5e64e67d99c6f60821e7de954b..3e1803cd760865beafeffa237a9e9005f661073f 100644 (file)
@@ -1,4 +1,4 @@
-import { Component, Input, TemplateRef, ViewChild } from '@angular/core';
+import { Component, Input, OnChanges, TemplateRef, ViewChild } from '@angular/core';
 
 import { RbdFormModel } from '../rbd-form/rbd-form.model';
 
@@ -7,7 +7,7 @@ import { RbdFormModel } from '../rbd-form/rbd-form.model';
   templateUrl: './rbd-details.component.html',
   styleUrls: ['./rbd-details.component.scss']
 })
-export class RbdDetailsComponent {
+export class RbdDetailsComponent implements OnChanges {
   @Input()
   selection: RbdFormModel;
   @Input()
@@ -16,4 +16,12 @@ export class RbdDetailsComponent {
   poolConfigurationSourceTpl: TemplateRef<any>;
 
   constructor() {}
+
+  rbdDashboardUrl: string;
+
+  ngOnChanges() {
+    if (this.selection) {
+      this.rbdDashboardUrl = `rbd-details?var-Pool=${this.selection['pool_name']}&var-Image=${this.selection['name']}`;
+    }
+  }
 }
index 776e6ecb5038ce337d8df76b30cd6ad0f4ec1035..50066c5b59767d612c4487e455ec01165356bf0a 100644 (file)
                   i18n>Advanced</legend>
 
           <div class="col-md-12">
-            <h3 class="cd-header"
-                i18n>Striping</h3>
+            <h4 class="cd-header"
+                i18n>Striping</h4>
 
             <!-- Object Size -->
             <div class="form-group row">
index f9ad4cf7cb74b797f63258510bd7114717de232d..87f8e78f994fec3048ae86a8f8cc6903e3e0be4a 100644 (file)
@@ -138,7 +138,7 @@ describe('RbdListComponent', () => {
           }
         ]
       });
-      expect(component.getDeleteDisableDesc()).toBe(
+      expect(component.getDeleteDisableDesc(component.selection)).toBe(
         'This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.'
       );
     });
index 18c95ec1e236975a547c0b5b4d9efc0969c682df..da53bb3fd549a201beb2787176dc7fdbfc3c659c 100644 (file)
@@ -138,11 +138,7 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
       icon: Icons.destroy,
       click: () => this.deleteRbdModal(),
       name: this.actionLabels.DELETE,
-      disable: (selection: CdTableSelection) =>
-        !this.selection.first() ||
-        !this.selection.hasSingleSelection ||
-        this.hasClonedSnapshots(selection.first()),
-      disableDesc: () => this.getDeleteDisableDesc()
+      disable: (selection: CdTableSelection) => this.getDeleteDisableDesc(selection)
     };
     const copyAction: CdTableAction = {
       permission: 'create',
@@ -430,14 +426,19 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
     }, []);
   }
 
-  getDeleteDisableDesc(): string {
-    const first = this.selection.first();
+  getDeleteDisableDesc(selection: CdTableSelection): string | boolean {
+    const first = selection.first();
+
     if (first && this.hasClonedSnapshots(first)) {
       return this.i18n(
         'This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.'
       );
     }
 
-    return '';
+    return (
+      !selection.first() ||
+      !selection.hasSingleSelection ||
+      this.hasClonedSnapshots(selection.first())
+    );
   }
 }
index 80b0945f65d58a402671534267f749fddcdaa9de..82038162c78e413c102f83b5b7ca04d1873fb103 100644 (file)
@@ -55,8 +55,7 @@ export class RbdNamespaceListComponent implements OnInit {
       icon: Icons.destroy,
       click: () => this.deleteModal(),
       name: this.actionLabels.DELETE,
-      disable: () => !this.selection.first() || !_.isUndefined(this.getDeleteDisableDesc()),
-      disableDesc: () => this.getDeleteDisableDesc()
+      disable: () => this.getDeleteDisableDesc()
     };
     this.tableActions = [createAction, deleteAction];
   }
@@ -153,14 +152,14 @@ export class RbdNamespaceListComponent implements OnInit {
     });
   }
 
-  getDeleteDisableDesc(): string | undefined {
+  getDeleteDisableDesc(): string | boolean {
     const first = this.selection.first();
     if (first) {
       if (first.num_images > 0) {
         return this.i18n('Namespace contains images');
       }
+      return false;
     }
-
-    return undefined;
+    return true;
   }
 }
index 3086a1a5a2acfd72da79b1ea180d737e93b8cfd4..f2ac418ac85a93d1186fa378f92df585ef80fb0c 100644 (file)
@@ -49,11 +49,7 @@ export class RbdSnapshotActionsModel {
     this.clone = {
       permission: 'create',
       canBePrimary: (selection: CdTableSelection) => selection.hasSingleSelection,
-      disable: (selection: CdTableSelection) =>
-        !selection.hasSingleSelection ||
-        selection.first().cdExecuting ||
-        !_.isUndefined(this.getCloneDisableDesc(featuresName)),
-      disableDesc: () => this.getCloneDisableDesc(featuresName),
+      disable: (selection: CdTableSelection) => this.getCloneDisableDesc(selection, featuresName),
       icon: Icons.clone,
       name: actionLabels.CLONE
     };
@@ -92,11 +88,15 @@ export class RbdSnapshotActionsModel {
     ];
   }
 
-  getCloneDisableDesc(featuresName: string[]): string | undefined {
-    if (!featuresName.includes('layering')) {
-      return this.i18n('Parent image must support Layering');
+  getCloneDisableDesc(selection: CdTableSelection, featuresName: string[]): boolean | string {
+    if (selection && selection.hasSingleSelection && !selection.first().cdExecuting) {
+      if (!_.includes(featuresName, 'layering')) {
+        return this.i18n('Parent image must support Layering');
+      }
+
+      return false;
     }
 
-    return undefined;
+    return true;
   }
 }
index f4f293dfeb2edf06ce93b33202870606d7d1bd98..6d336ecac9044bcfb040b272a0a86282e22c54cd 100644 (file)
@@ -89,7 +89,7 @@ describe('RbdTrashMoveModalComponent', () => {
       component.moveImage();
       const req = httpTesting.expectOne('api/block/image/foo%2Fbar/move_trash');
       req.flush(null);
-      expect(req.request.body.delay).toBeGreaterThan(86390);
+      expect(req.request.body.delay).toBeGreaterThan(76390);
     });
   });
 });
index 3be3ac9789a55ef933fbe7dd3eb60be7a0b02499..c274306b02e2145b7eaf1bc2e246a64fcfd49bfb 100644 (file)
@@ -93,8 +93,8 @@
 
         <!-- Values -->
         <div formGroupName="values">
-          <h2 i18n
-              class="cd-header">Values</h2>
+          <h3 i18n
+              class="cd-header">Values</h3>
           <ng-container *ngFor="let section of availSections">
             <div class="form-group row"
                  *ngIf="type === 'bool'">
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..629646246dbebba602a08ce664ed353598605932 100644 (file)
@@ -0,0 +1,7 @@
+::ng-deep tree-root {
+  tree-viewport {
+    div:first-child {
+      height: unset !important;
+    }
+  }
+}
index ef072c8af68085392881e6dc3183731ed2873069..13edafb0ef1b44c200607ba316038c43acebf387 100644 (file)
@@ -19,7 +19,7 @@
        *ngIf="permissions.grafana.read">
     <cd-grafana [grafanaPath]="'host-details?var-ceph_hosts=' + selectedHostname"
                 uid="rtOg0AiWz"
-                grafanaStyle="three">
+                grafanaStyle="four">
     </cd-grafana>
   </tab>
   <tab heading="Device health"
index 05f3d962f0e4047ac3b71af59f9d42d50f0c3c62..7efb4ed9bb95d374c23dfe71dfe019c5315831e8 100644 (file)
@@ -112,16 +112,16 @@ describe('HostsComponent', () => {
       });
       expect(tableAction.disable(component.selection)).toBeTruthy();
       expect(component.getEditDisableDesc(component.selection)).toBe(
-        'Host editing is disabled because the host is not managed by Orchestrator.'
+        'Host editing is disabled because the selected host is not managed by Orchestrator.'
       );
     });
 
-    it('should disable button and return undefined (no selection)', () => {
+    it('should disable button and return true (no selection)', () => {
       expect(tableAction.disable(component.selection)).toBeTruthy();
-      expect(component.getEditDisableDesc(component.selection)).toBeUndefined();
+      expect(component.getEditDisableDesc(component.selection)).toBeTruthy();
     });
 
-    it('should enable button and return undefined (managed by Orchestrator)', () => {
+    it('should enable button and return false (managed by Orchestrator)', () => {
       component.selection.add({
         sources: {
           ceph: false,
@@ -129,7 +129,47 @@ describe('HostsComponent', () => {
         }
       });
       expect(tableAction.disable(component.selection)).toBeFalsy();
-      expect(component.getEditDisableDesc(component.selection)).toBeUndefined();
+      expect(component.getEditDisableDesc(component.selection)).toBeFalsy();
+    });
+  });
+
+  describe('getDeleteDisableDesc', () => {
+    it('should return message (not managed by Orchestrator)', () => {
+      component.selection.add({
+        sources: {
+          ceph: false,
+          orchestrator: true
+        }
+      });
+      component.selection.add({
+        sources: {
+          ceph: true,
+          orchestrator: false
+        }
+      });
+      expect(component.getDeleteDisableDesc(component.selection)).toBe(
+        'Host deletion is disabled because a selected host is not managed by Orchestrator.'
+      );
+    });
+
+    it('should return true (no selection)', () => {
+      expect(component.getDeleteDisableDesc(component.selection)).toBeTruthy();
+    });
+
+    it('should return false (managed by Orchestrator)', () => {
+      component.selection.add({
+        sources: {
+          ceph: false,
+          orchestrator: true
+        }
+      });
+      component.selection.add({
+        sources: {
+          ceph: false,
+          orchestrator: true
+        }
+      });
+      expect(component.getDeleteDisableDesc(component.selection)).toBeFalsy();
     });
   });
 });
index 41594c1f55e7924504adb5cd137c36e031cafd19..ff97846943c29e6e721e21daac033caac3fe6ad4 100644 (file)
@@ -92,9 +92,7 @@ export class HostsComponent extends ListWithDetails implements OnInit {
             () => this.editAction()
           );
         },
-        disable: (selection: CdTableSelection) =>
-          !selection.hasSingleSelection || !selection.first().sources.orchestrator,
-        disableDesc: this.getEditDisableDesc.bind(this)
+        disable: this.getEditDisableDesc.bind(this)
       },
       {
         name: this.actionLabels.DELETE,
@@ -107,7 +105,7 @@ export class HostsComponent extends ListWithDetails implements OnInit {
             () => this.deleteAction()
           );
         },
-        disable: () => !this.selection.hasSelection
+        disable: this.getDeleteDisableDesc.bind(this)
       }
     ];
   }
@@ -189,11 +187,18 @@ export class HostsComponent extends ListWithDetails implements OnInit {
     });
   }
 
-  getEditDisableDesc(selection: CdTableSelection): string | undefined {
-    if (selection && selection.hasSingleSelection && !selection.first().sources.orchestrator) {
-      return this.i18n('Host editing is disabled because the host is not managed by Orchestrator.');
+  getEditDisableDesc(selection: CdTableSelection): boolean | string {
+    if (selection && selection.hasSingleSelection) {
+      if (!selection.first().sources.orchestrator) {
+        return this.i18n(
+          'Host editing is disabled because the selected host is not managed by Orchestrator.'
+        );
+      }
+
+      return false;
     }
-    return undefined;
+
+    return true;
   }
 
   deleteAction() {
@@ -212,6 +217,20 @@ export class HostsComponent extends ListWithDetails implements OnInit {
     });
   }
 
+  getDeleteDisableDesc(selection: CdTableSelection): boolean | string {
+    if (selection && selection.hasSelection) {
+      if (!selection.selected.every((selected) => selected.sources.orchestrator)) {
+        return this.i18n(
+          'Host deletion is disabled because a selected host is not managed by Orchestrator.'
+        );
+      }
+
+      return false;
+    }
+
+    return true;
+  }
+
   getHosts(context: CdTableFetchDataContext) {
     if (this.isLoadingHosts) {
       return;
index 75042749a92c255df5687364f1f3cb4efdba4eea..9c8fcf09e5eeaa1364e806ccee7252287f08e09b 100644 (file)
@@ -58,7 +58,6 @@ export class MgrModuleListComponent extends ListWithDetails {
       {
         name: this.i18n('Always-On'),
         prop: 'always_on',
-        isHidden: true,
         flexGrow: 1,
         cellClass: 'text-center',
         cellTransformation: CellTemplate.checkIcon
@@ -91,8 +90,7 @@ export class MgrModuleListComponent extends ListWithDetails {
         name: this.i18n('Disable'),
         permission: 'update',
         click: () => this.updateModuleState(),
-        disable: () => this.isTableActionDisabled('disabled'),
-        disableDesc: () => this.getTableActionDisabledDesc(),
+        disable: () => this.getTableActionDisabledDesc(),
         icon: Icons.stop
       }
     ];
@@ -142,15 +140,12 @@ export class MgrModuleListComponent extends ListWithDetails {
     }
   }
 
-  getTableActionDisabledDesc(): string | undefined {
-    if (this.selection.hasSelection) {
-      const selected = this.selection.first();
-      if (selected.always_on) {
-        return this.i18n('This Manager module is always on.');
-      }
+  getTableActionDisabledDesc(): string | boolean {
+    if (this.selection && this.selection.first().always_on) {
+      return this.i18n('This Manager module is always on.');
     }
 
-    return undefined;
+    return this.isTableActionDisabled('disabled');
   }
 
   /**
index 1e4b6d989ea5ede88195c04611659f8fe0c025c8..7abaced8edc8808ec9ff616af448ed4fc17c1128 100644 (file)
@@ -7,7 +7,7 @@
           [formGroup]="formGroup"
           novalidate>
       <div class="modal-body">
-        <h3 i18n>DriveGroups</h3>
+        <h4 i18n>DriveGroups</h4>
         <pre>{{ driveGroups | json}}</pre>
       </div>
       <div class="modal-footer">
index 3769577cb3786c9074d7e1e5da5ff37a74e79b3c..3d9183814e192940e5a9ce32dccdf543c2600a2e 100644 (file)
@@ -62,7 +62,7 @@
        heading="Performance Details">
     <cd-grafana [grafanaPath]="'osd-device-details?var-osd=osd.' + osd['id']"
                 uid="CrAHE0iZz"
-                grafanaStyle="GrafanaStyles.two">
+                grafanaStyle="three">
     </cd-grafana>
   </tab>
 
index 0a9bc9d49a0e6dc53e47dce0ca57db967e0a5443..e83b574f6814385f85fd56bbcd48dadd02343635 100644 (file)
@@ -9,8 +9,7 @@ import { configureTestBed, i18nProviders } from '../../../../../testing/unit-tes
 import { OsdService } from '../../../../shared/api/osd.service';
 import { SharedModule } from '../../../../shared/shared.module';
 import { TablePerformanceCounterComponent } from '../../../performance-counter/table-performance-counter/table-performance-counter.component';
-import { DeviceListComponent } from '../../../shared/device-list/device-list.component';
-import { SmartListComponent } from '../../../shared/smart-list/smart-list.component';
+import { CephSharedModule } from '../../../shared/ceph-shared.module';
 import { OsdPerformanceHistogramComponent } from '../osd-performance-histogram/osd-performance-histogram.component';
 import { OsdDetailsComponent } from './osd-details.component';
 
@@ -22,11 +21,9 @@ describe('OsdDetailsComponent', () => {
   let getDetailsSpy: jasmine.Spy;
 
   configureTestBed({
-    imports: [HttpClientTestingModule, TabsModule.forRoot(), SharedModule],
+    imports: [HttpClientTestingModule, TabsModule.forRoot(), SharedModule, CephSharedModule],
     declarations: [
       OsdDetailsComponent,
-      DeviceListComponent,
-      SmartListComponent,
       TablePerformanceCounterComponent,
       OsdPerformanceHistogramComponent
     ],
index 8b769a4ad5654894489131640c22f19b52338e51..21c8b0fe6967c291a2a353c4a7fffe4f91170f88 100644 (file)
@@ -6,7 +6,8 @@
     <form name="osdFlagsForm"
           #formDir="ngForm"
           [formGroup]="osdFlagsForm"
-          novalidate>
+          novalidate
+          cdFormScope="osd">
       <div class="modal-body osd-modal">
         <div class="custom-control custom-checkbox"
              *ngFor="let flag of flags; let last = last">
index 84faaf14eef55d9072567de1a8beb592e19962ba..bc1bc78dc23a62fa5ad9260db01f0495b23af8f0 100644 (file)
@@ -44,7 +44,7 @@
        heading="Overall Performance">
     <cd-grafana [grafanaPath]="'osd-overview?'"
                 uid="lo02I1Aiz"
-                grafanaStyle="three">
+                grafanaStyle="four">
     </cd-grafana>
   </tab>
 </tabset>
index 054a9c5c0cc29bb5656aa02e99b57d25b1548fc6..1d675c4416cec46d0e7f16548f913120d1678004 100644 (file)
@@ -5,7 +5,8 @@
   <ng-container class="modal-content">
     <form #formDir="ngForm"
           [formGroup]="osdPgScrubForm"
-          novalidate>
+          novalidate
+          cdFormScope="osd">
       <div class="modal-body osd-modal">
         <!-- Basic -->
         <cd-config-option [optionNames]="basicOptions"
@@ -23,8 +24,8 @@
           </div>
         </div>
         <div *ngIf="advancedEnabled">
-          <h2 class="page-header"
-              i18n>Advanced configuration options</h2>
+          <h3 class="page-header"
+              i18n>Advanced configuration options</h3>
           <cd-config-option [optionNames]="advancedOptions"
                             [optionsForm]="osdPgScrubForm"
                             [optionsFormDir]="formDir"
index 1444e88588bf2da2339e2e02db4de92a1ad68aff..1946647bf65a271b55061c18508b0c182c5a0820 100755 (executable)
@@ -5,7 +5,8 @@
   <ng-container class="modal-content">
     <form #formDir="ngForm"
           [formGroup]="osdRecvSpeedForm"
-          novalidate>
+          novalidate
+          cdFormScope="osd">
       <div class="modal-body">
         <!-- Priority -->
         <div class="form-group row">
index c0050ac7dae7aec97a391f50c55a9c39f0eb2c43..ba9e7e63cfbd119a3c547e139f4a684b5e06be54 100644 (file)
@@ -3,13 +3,10 @@
           [hasDetails]="true"
           (updateSelection)="setExpandedRow($event)"
           [selectionType]="'single'">
-  <tabset cdTableDetail
-          *ngIf="expandedRow">
-    <tab i18n-heading
-         heading="Details">
-      <cd-table-key-value [data]="expandedRow"
-                          [renderObjects]="true"
-                          [hideKeys]="hideKeys"></cd-table-key-value>
-    </tab>
-  </tabset>
+  <cd-table-key-value cdTableDetail
+                      *ngIf="expandedRow"
+                      [data]="expandedRow"
+                      [renderObjects]="true"
+                      [hideKeys]="hideKeys">
+  </cd-table-key-value>
 </cd-table>
index 27581aae7dcf9ffcf69c266c76aea9b9087150f0..7959717d80c859b09108839bb69e5c3966e14450 100644 (file)
@@ -2,8 +2,6 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
-import { TabsModule } from 'ngx-bootstrap/tabs';
-
 import { configureTestBed, i18nProviders } from '../../../../../testing/unit-test-helper';
 import { PrometheusService } from '../../../../shared/api/prometheus.service';
 import { SettingsService } from '../../../../shared/api/settings.service';
@@ -16,7 +14,7 @@ describe('RulesListComponent', () => {
 
   configureTestBed({
     declarations: [RulesListComponent],
-    imports: [HttpClientTestingModule, SharedModule, TabsModule.forRoot(), BrowserAnimationsModule],
+    imports: [HttpClientTestingModule, SharedModule, BrowserAnimationsModule],
     providers: [PrometheusService, SettingsService, i18nProviders]
   });
 
index 8befd85430f4d96d741699aa4fa38dcb5623bc9c..2a12f9d9a66af73660add55098a3ecb706778b40 100644 (file)
             <div class="form-group row">
               <label i18n
                      for="reportId"
-                     class="cd-col-form-label">Report ID</label>
+                     class="cd-col-form-label">Report ID
+              <cd-helper i18n-html
+                         html="A randomized UUID to identify a particular cluster over the course of several telemetry reports.">
+              </cd-helper></label>
               <div class="cd-col-form-input">
                 <input class="form-control"
                        type="text"
             <div class="form-group row">
               <label i18n
                      for="report"
-                     class="cd-col-form-label">Report preview</label>
+                     class="cd-col-form-label">Report preview
+                <cd-helper i18n-html
+                           html="The actual telemetry data that will be submitted.">
+                </cd-helper></label>
               <div class="cd-col-form-input">
                 <textarea class="form-control"
                           id="report"
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie-color.enum.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie-color.enum.ts
deleted file mode 100644 (file)
index fbeadcc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-export enum HealthPieColor {
-  DEFAULT_RED = '#ff7592',
-  DEFAULT_BLUE = '#1d699d',
-  DEFAULT_ORANGE = '#ffa500',
-  DEFAULT_MAGENTA = '#564d65',
-  DEFAULT_GREEN = '#00bb00'
-}
index 02b72b25119dfc7422a730df3cefcb9e15b89e76..ba8176beab3b505aa95e9916011fceb0a22666cc 100644 (file)
@@ -6,6 +6,7 @@
           [options]="chartConfig.options"
           [labels]="chartConfig.labels"
           [colors]="chartConfig.colors"
+          [plugins]="doughnutChartPlugins"
           class="chart-canvas">
   </canvas>
   <div class="chartjs-tooltip"
index e2d23cd4f04079be29796792ef12e2744db460b4..9b7db156bec4e7f75c7625a9252a7aa740587e2d 100644 (file)
@@ -1,9 +1,14 @@
-@import '../../../../styles/chart-tooltip.scss';
+@import './src/styles/chart-tooltip.scss';
+@import './src/styles/defaults';
 
 $canvas-width: 100%;
 $canvas-height: 100%;
 
 .chart-container {
+  @each $key_name, $value in $health-chart-colors {
+    --color-#{$key_name}: #{$value};
+  }
+
   position: unset;
   width: $canvas-width;
   height: $canvas-height;
index 25782502ca55b8d8fdd042a45ddda84c0d2bb29c..96331ff0a5beec2d2ea07fae6ee7a5549d18fab0 100644 (file)
@@ -55,6 +55,16 @@ describe('HealthPieComponent', () => {
     expect(component.chartConfig.dataset[0].data).toEqual(initialData);
   });
 
+  it('should set colors from css variables', () => {
+    const cssVar = '--my-color';
+    const cssVarColor = '#73c5c5';
+    component['getCssVar'] = (name: string) => (name === cssVar ? cssVarColor : '');
+    component.chartConfig.colors[0].backgroundColor = [cssVar, '#ffffff'];
+    fixture.detectChanges();
+
+    expect(component.chartConfig.colors[0].backgroundColor).toEqual([cssVarColor, '#ffffff']);
+  });
+
   describe('tooltip body', () => {
     const tooltipBody = ['text: 10000'];
 
index f00d73f5ae6a0d0a29caa23c3f47e1617d2cd942..0c08973da8a4fae9de950d8cb9a948a20e1abbf3 100644 (file)
@@ -11,11 +11,11 @@ import {
 
 import * as Chart from 'chart.js';
 import * as _ from 'lodash';
+import { PluginServiceGlobalRegistrationAndOptions } from 'ng2-charts';
 
 import { ChartTooltip } from '../../../shared/models/chart-tooltip';
 import { DimlessBinaryPipe } from '../../../shared/pipes/dimless-binary.pipe';
 import { DimlessPipe } from '../../../shared/pipes/dimless.pipe';
-import { HealthPieColor } from './health-pie-color.enum';
 
 @Component({
   selector: 'cd-health-pie',
@@ -42,62 +42,102 @@ export class HealthPieComponent implements OnChanges, OnInit {
   prepareFn = new EventEmitter();
 
   chartConfig: any = {
-    chartType: 'pie',
+    chartType: 'doughnut',
     dataset: [
       {
         label: null,
         borderWidth: 0
       }
     ],
+    colors: [
+      {
+        backgroundColor: [
+          '--color-green',
+          '--color-yellow',
+          '--color-orange',
+          '--color-red',
+          '--color-blue'
+        ]
+      }
+    ],
     options: {
+      cutoutPercentage: 90,
+      events: ['click', 'mouseout', 'touchstart'],
       legend: {
         display: true,
         position: 'right',
-        labels: { usePointStyle: true },
-        onClick: (event: any, legendItem: any) => {
-          this.onLegendClick(event, legendItem);
+        labels: {
+          boxWidth: 10,
+          usePointStyle: false
         }
       },
-      animation: { duration: 0 },
+      plugins: {
+        center_text: true
+      },
       tooltips: {
-        enabled: false
+        enabled: true,
+        displayColors: false,
+        backgroundColor: 'rgba(0,0,0,0.8)',
+        cornerRadius: 0,
+        bodyFontSize: 14,
+        bodyFontStyle: '600',
+        position: 'nearest',
+        xPadding: 12,
+        yPadding: 12,
+        callbacks: {
+          label: (item: Record<string, any>, data: Record<string, any>) => {
+            let text = data.labels[item.index];
+            if (!text.includes('%')) {
+              text = `${text} (${data.datasets[item.datasetIndex].data[item.index]}%)`;
+            }
+            return text;
+          }
+        }
       },
       title: {
         display: false
       }
     }
   };
-  private hiddenSlices: any[] = [];
-
-  constructor(private dimlessBinary: DimlessBinaryPipe, private dimless: DimlessPipe) {}
 
-  ngOnInit() {
-    // An extension to Chart.js to enable rendering some
-    // text in the middle of a doughnut
-    Chart.pluginService.register({
-      beforeDraw: function (chart: any) {
-        if (!chart.options.center_text) {
+  public doughnutChartPlugins: PluginServiceGlobalRegistrationAndOptions[] = [
+    {
+      id: 'center_text',
+      beforeDraw(chart: Chart) {
+        const defaultFontColorA = '#151515';
+        const defaultFontColorB = '#72767B';
+        const defaultFontFamily = 'Helvetica Neue, Helvetica, Arial, sans-serif';
+        Chart.defaults.global.defaultFontFamily = defaultFontFamily;
+        const ctx = chart.ctx;
+        if (!chart.options.plugins.center_text || !chart.data.datasets[0].label) {
           return;
         }
 
-        const width = chart.chart.width,
-          height = chart.chart.height,
-          ctx = chart.chart.ctx;
+        ctx.save();
+        const label = chart.data.datasets[0].label.split('\n');
 
-        ctx.restore();
-        const fontSize = (height / 114).toFixed(2);
-        ctx.font = fontSize + 'em sans-serif';
+        const centerX = (chart.chartArea.left + chart.chartArea.right) / 2;
+        const centerY = (chart.chartArea.top + chart.chartArea.bottom) / 2;
+        ctx.textAlign = 'center';
         ctx.textBaseline = 'middle';
 
-        const text = chart.options.center_text,
-          textX = Math.round((width - ctx.measureText(text).width) / 2),
-          textY = height / 2;
+        ctx.font = `24px ${defaultFontFamily}`;
+        ctx.fillStyle = defaultFontColorA;
+        ctx.fillText(label[0], centerX, centerY - 10);
 
-        ctx.fillText(text, textX, textY);
-        ctx.save();
+        if (label.length > 1) {
+          ctx.font = `14px ${defaultFontFamily}`;
+          ctx.fillStyle = defaultFontColorB;
+          ctx.fillText(label[1], centerX, centerY + 10);
+        }
+        ctx.restore();
       }
-    });
+    }
+  ];
+
+  constructor(private dimlessBinary: DimlessBinaryPipe, private dimless: DimlessPipe) {}
 
+  ngOnInit() {
     const getStyleTop = (tooltip: any, positionY: number) => {
       return positionY + tooltip.caretY - tooltip.height - 10 + 'px';
     };
@@ -113,39 +153,40 @@ export class HealthPieComponent implements OnChanges, OnInit {
       getStyleTop
     );
 
-    const getBody = (body: any) => {
+    chartTooltip.getBody = (body: any) => {
       return this.getChartTooltipBody(body);
     };
 
-    chartTooltip.getBody = getBody;
-
-    this.chartConfig.options.tooltips.custom = (tooltip: any) => {
-      chartTooltip.customTooltips(tooltip);
-    };
-
-    this.chartConfig.colors = [
-      {
-        backgroundColor: [
-          HealthPieColor.DEFAULT_RED,
-          HealthPieColor.DEFAULT_BLUE,
-          HealthPieColor.DEFAULT_ORANGE,
-          HealthPieColor.DEFAULT_GREEN,
-          HealthPieColor.DEFAULT_MAGENTA
-        ]
-      }
-    ];
-
     _.merge(this.chartConfig, this.config);
 
+    this.setColorsFromCssVars();
+
     this.prepareFn.emit([this.chartConfig, this.data]);
   }
 
   ngOnChanges() {
     this.prepareFn.emit([this.chartConfig, this.data]);
-    this.hideSlices();
     this.setChartSliceBorderWidth();
   }
 
+  private setColorsFromCssVars() {
+    this.chartConfig.colors.forEach(
+      (colorEl: { backgroundColor: string[] }, colorIndex: number) => {
+        colorEl.backgroundColor.forEach((bgColor: string, bgColorIndex: number) => {
+          if (bgColor.startsWith('--')) {
+            this.chartConfig.colors[colorIndex].backgroundColor[bgColorIndex] = this.getCssVar(
+              bgColor
+            );
+          }
+        });
+      }
+    );
+  }
+
+  private getCssVar(name: string): string {
+    return getComputedStyle(document.querySelector('.chart-container')).getPropertyValue(name);
+  }
+
   private getChartTooltipBody(body: string[]) {
     const bodySplit = body[0].split(': ');
 
@@ -170,18 +211,4 @@ export class HealthPieComponent implements OnChanges, OnInit {
 
     this.chartConfig.dataset[0].borderWidth = nonZeroValueSlices > 1 ? 1 : 0;
   }
-
-  private onLegendClick(event: any, legendItem: any) {
-    event.stopPropagation();
-    this.hiddenSlices[legendItem.index] = !legendItem.hidden;
-    this.ngOnChanges();
-  }
-
-  private hideSlices() {
-    _.forEach(this.chartConfig.dataset[0].data, (_slice, sliceIndex: number) => {
-      if (this.hiddenSlices[sliceIndex]) {
-        this.chartConfig.dataset[0].data[sliceIndex] = undefined;
-      }
-    });
-  }
 }
index 84ce11fb23cbdf1651f6e313d47cd119ff5508ed..409bf08eaecbffe9e91cdf1ce2550d978b3e5cf8 100644 (file)
@@ -34,7 +34,8 @@
              container="body"
              containerClass="info-card-popover-cluster-status"
              (click)="healthChecksTarget.toggle()">
-          {{ healthData.health.status }}
+          {{ healthData.health.status }} <i *ngIf="healthData.health?.status != 'HEALTH_OK'"
+                                            class="fa fa-exclamation-triangle"></i>
         </div>
       </ng-container>
       <ng-container *ngIf="!healthData.health?.checks?.length">
       </ng-container>
     </cd-info-card>
 
+    <cd-info-card cardTitle="Hosts"
+                  i18n-cardTitle
+                  link="/hosts"
+                  class="cd-status-card"
+                  contentClass="content-highlight"
+                  *ngIf="healthData.hosts != null">
+      {{ healthData.hosts }} total
+    </cd-info-card>
+
     <cd-info-card cardTitle="Monitors"
                   i18n-cardTitle
                   link="/monitor"
@@ -65,7 +75,7 @@
       </span>
     </cd-info-card>
 
-    <cd-info-card cardTitle="Manager Daemons"
+    <cd-info-card cardTitle="Managers"
                   i18n-cardTitle
                   class="cd-status-card"
                   contentClass="content-highlight"
       </span>
     </cd-info-card>
 
-    <cd-info-card cardTitle="Hosts"
-                  i18n-cardTitle
-                  link="/hosts"
-                  class="cd-status-card"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.hosts != null">
-      {{ healthData.hosts }} total
-    </cd-info-card>
-
     <cd-info-card cardTitle="Object Gateways"
                   i18n-cardTitle
                   link="/rgw/daemon"
@@ -98,7 +99,7 @@
     <cd-info-card cardTitle="Metadata Servers"
                   i18n-cardTitle
                   class="cd-status-card"
-                  *ngIf="((enabledFeature.cephfs && healthData.fs_map) | mdsSummary) as transformedResult"
+                  *ngIf="(enabledFeature.cephfs && healthData.fs_map | mdsSummary) as transformedResult"
                   [contentClass]="(transformedResult.length > 1 ? 'text-area-size-2' : '') + ' content-highlight'">
       <!-- TODO: check text-area-size-2 -->
       <span *ngFor="let result of transformedResult"
     </cd-info-card>
   </cd-info-group>
 
-  <cd-info-group groupTitle="Performance"
-                 i18n-groupTitle
-                 *ngIf="healthData.client_perf || healthData.scrub_status">
-
-    <cd-info-card cardTitle="Client IOPS"
-                  i18n-cardTitle
-                  class="cd-performance-card"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.client_perf">
-      {{ (healthData.client_perf.read_op_per_sec + healthData.client_perf.write_op_per_sec) | round:1 }}
-    </cd-info-card>
-
-    <cd-info-card cardTitle="Client Throughput"
-                  i18n-cardTitle
-                  class="cd-performance-card"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.client_perf">
-      {{ ((healthData.client_perf.read_bytes_sec + healthData.client_perf.write_bytes_sec) | dimlessBinary) + '/s' }}
-    </cd-info-card>
-
-    <cd-info-card cardTitle="Client Read/Write"
-                  i18n-cardTitle
-                  class="cd-performance-card"
-                  [contentClass]="isClientReadWriteChartShowable() ? 'content-chart': 'content-highlight'"
-                  *ngIf="healthData.client_perf">
-      <cd-health-pie *ngIf="isClientReadWriteChartShowable()"
-                     [data]="healthData"
-                     (prepareFn)="prepareReadWriteRatio($event[0], $event[1])">
-      </cd-health-pie>
-      <span *ngIf="!isClientReadWriteChartShowable()">
-        N/A
-      </span>
-    </cd-info-card>
-
-    <cd-info-card cardTitle="Recovery Throughput"
-                  i18n-cardTitle
-                  class="cd-performance-card"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.client_perf">
-      {{ (healthData.client_perf.recovering_bytes_per_sec | dimlessBinary) + '/s' }}
-    </cd-info-card>
-
-    <cd-info-card cardTitle="Scrub"
-                  i18n-cardTitle
-                  class="cd-performance-card"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.scrub_status">
-      {{ healthData.scrub_status }}
-    </cd-info-card>
-  </cd-info-group>
-
   <cd-info-group groupTitle="Capacity"
                  i18n-groupTitle
                  *ngIf="healthData.pools
                  || healthData.df
                  || healthData.pg_info">
-    <cd-info-card cardTitle="Pools"
-                  i18n-cardTitle
-                  link="/pool"
-                  class="cd-capacity-card order-md-1 order-lg-4 order-xl-1"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.pools">
-      {{ healthData.pools.length }}
-    </cd-info-card>
-
     <cd-info-card cardTitle="Raw Capacity"
                   i18n-cardTitle
-                  class="cd-capacity-card order-md-3 order-lg-1 order-xl-2"
+                  class="cd-capacity-card cd-chart-card"
                   contentClass="content-chart"
                   *ngIf="healthData.df">
       <cd-health-pie [data]="healthData"
 
     <cd-info-card cardTitle="Objects"
                   i18n-cardTitle
-                  class="cd-capacity-card order-md-4 order-lg-2 order-xl-3"
+                  class="cd-capacity-card cd-chart-card"
                   contentClass="content-chart"
                   *ngIf="healthData.pg_info?.object_stats?.num_objects != null">
       <cd-health-pie [data]="healthData"
-                     [config]="objectsChartConfig"
                      (prepareFn)="prepareObjects($event[0], $event[1])">
       </cd-health-pie>
     </cd-info-card>
 
-    <cd-info-card cardTitle="PGs per OSD"
-                  i18n-cardTitle
-                  class="cd-capacity-card order-md-2 order-lg-5 order-xl-4"
-                  contentClass="content-highlight"
-                  *ngIf="healthData.pg_info">
-      {{ healthData.pg_info.pgs_per_osd | dimless }}
-    </cd-info-card>
-
     <cd-info-card cardTitle="PG Status"
                   i18n-cardTitle
-                  class="cd-capacity-card order-md-5 order-lg-3 order-xl-5"
+                  class="cd-capacity-card cd-chart-card"
                   contentClass="content-chart"
                   (click)="pgStatusTarget.toggle()"
                   *ngIf="healthData.pg_info">
         </div>
       </div>
     </cd-info-card>
+
+    <cd-info-card cardTitle="Pools"
+                  i18n-cardTitle
+                  link="/pool"
+                  class="cd-capacity-card"
+                  contentClass="content-highlight"
+                  *ngIf="healthData.pools">
+      {{ healthData.pools.length }}
+    </cd-info-card>
+
+    <cd-info-card cardTitle="PGs per OSD"
+                  i18n-cardTitle
+                  class="cd-capacity-card"
+                  contentClass="content-highlight"
+                  *ngIf="healthData.pg_info">
+      {{ healthData.pg_info.pgs_per_osd | dimless }}
+    </cd-info-card>
+  </cd-info-group>
+
+  <cd-info-group groupTitle="Performance"
+                 i18n-groupTitle
+                 *ngIf="healthData.client_perf || healthData.scrub_status">
+    <cd-info-card cardTitle="Client Read/Write"
+                  i18n-cardTitle
+                  class="cd-performance-card cd-chart-card"
+                  contentClass="content-chart"
+                  *ngIf="healthData.client_perf">
+      <cd-health-pie [data]="healthData"
+                     [config]="clientStatsConfig"
+                     (prepareFn)="prepareReadWriteRatio($event[0], $event[1])">
+      </cd-health-pie>
+    </cd-info-card>
+
+    <cd-info-card cardTitle="Client Throughput"
+                  i18n-cardTitle
+                  class="cd-performance-card cd-chart-card"
+                  contentClass="content-chart"
+                  *ngIf="healthData.client_perf">
+      <cd-health-pie [data]="healthData"
+                     [config]="clientStatsConfig"
+                     (prepareFn)="prepareClientThroughput($event[0], $event[1])">
+      </cd-health-pie>
+    </cd-info-card>
+
+    <cd-info-card cardTitle="Recovery Throughput"
+                  i18n-cardTitle
+                  class="cd-performance-card"
+                  contentClass="content-highlight"
+                  *ngIf="healthData.client_perf">
+      {{ (healthData.client_perf.recovering_bytes_per_sec | dimlessBinary) + '/s' }}
+    </cd-info-card>
+
+    <cd-info-card cardTitle="Scrubbing"
+                  i18n-cardTitle
+                  class="cd-performance-card"
+                  contentClass="content-highlight"
+                  *ngIf="healthData.scrub_status">
+      {{ healthData.scrub_status }}
+    </cd-info-card>
   </cd-info-group>
 
   <ng-template #logsLink>
index 50a96ee6b51b58da2779cdbbf0a7020cc9eda28f..d2fea1406cdcd6aecd96e8adfc61eaf8899e4471 100644 (file)
@@ -94,7 +94,7 @@ describe('HealthComponent', () => {
     expect(infoGroups.length).toBe(3);
 
     const infoCards = fixture.debugElement.nativeElement.querySelectorAll('cd-info-card');
-    expect(infoCards.length).toBe(18);
+    expect(infoCards.length).toBe(17);
   });
 
   describe('features disabled', () => {
@@ -119,7 +119,7 @@ describe('HealthComponent', () => {
       expect(infoGroups.length).toBe(3);
 
       const infoCards = fixture.debugElement.nativeElement.querySelectorAll('cd-info-card');
-      expect(infoCards.length).toBe(15);
+      expect(infoCards.length).toBe(14);
     });
   });
 
@@ -141,7 +141,7 @@ describe('HealthComponent', () => {
     expect(infoGroups.length).toBe(2);
 
     const infoCards = fixture.debugElement.nativeElement.querySelectorAll('cd-info-card');
-    expect(infoCards.length).toBe(10);
+    expect(infoCards.length).toBe(9);
   });
 
   it('should render all except "Performance" group and cards', () => {
@@ -172,7 +172,7 @@ describe('HealthComponent', () => {
     expect(infoGroups.length).toBe(2);
 
     const infoCards = fixture.debugElement.nativeElement.querySelectorAll('cd-info-card');
-    expect(infoCards.length).toBe(13);
+    expect(infoCards.length).toBe(12);
   });
 
   it('should render all groups and 1 card per group', () => {
@@ -256,17 +256,25 @@ describe('HealthComponent', () => {
   });
 
   describe('preparePgStatus', () => {
-    const calcPercentage = (data: number) => Math.round((data / 10) * 100) || 0;
-
-    const expectedChart = (data: number[]) => ({
+    const expectedChart = (data: number[], label: string = null) => ({
       labels: [
-        `Clean (${calcPercentage(data[0])}%)`,
-        `Working (${calcPercentage(data[1])}%)`,
-        `Warning (${calcPercentage(data[2])}%)`,
-        `Unknown (${calcPercentage(data[3])}%)`
+        `Clean: ${component['dimless'].transform(data[0])}`,
+        `Working: ${component['dimless'].transform(data[1])}`,
+        `Warning: ${component['dimless'].transform(data[2])}`,
+        `Unknown: ${component['dimless'].transform(data[3])}`
       ],
       options: {},
-      dataset: [{ data: data }]
+      dataset: [
+        {
+          data: data.map((i) =>
+            component['calcPercentage'](
+              i,
+              data.reduce((j, k) => j + k)
+            )
+          ),
+          label: label
+        }
+      ]
     });
 
     it('gets no data', () => {
@@ -274,7 +282,7 @@ describe('HealthComponent', () => {
       component.preparePgStatus(chart, {
         pg_info: {}
       });
-      expect(chart).toEqual(expectedChart([undefined, undefined, undefined, undefined]));
+      expect(chart).toEqual(expectedChart([0, 0, 0, 0], '0\nPGs'));
     });
 
     it('gets data from all categories', () => {
@@ -289,7 +297,7 @@ describe('HealthComponent', () => {
           }
         }
       });
-      expect(chart).toEqual(expectedChart([1, 2, 3, 4]));
+      expect(chart).toEqual(expectedChart([1, 2, 3, 4], '10\nPGs'));
     });
   });
 
index 7b6e5f8a0fbc92210348902c78f9f75bc20be9f5..f58dbb1390a3706293056b959e7e5709daf4a8ae 100644 (file)
@@ -16,7 +16,6 @@ import {
 } from '../../../shared/services/feature-toggles.service';
 import { RefreshIntervalService } from '../../../shared/services/refresh-interval.service';
 import { PgCategoryService } from '../../shared/pg-category.service';
-import { HealthPieColor } from '../health-pie/health-pie-color.enum';
 
 @Component({
   selector: 'cd-health',
@@ -30,39 +29,28 @@ export class HealthComponent implements OnInit, OnDestroy {
   enabledFeature$: FeatureTogglesMap$;
   icons = Icons;
 
-  rawCapacityChartConfig = {
-    options: {
-      title: { display: true, position: 'bottom' }
-    }
-  };
-  objectsChartConfig = {
-    options: {
-      title: { display: true, position: 'bottom' }
-    },
+  clientStatsConfig = {
     colors: [
       {
-        backgroundColor: [
-          HealthPieColor.DEFAULT_GREEN,
-          HealthPieColor.DEFAULT_MAGENTA,
-          HealthPieColor.DEFAULT_ORANGE,
-          HealthPieColor.DEFAULT_RED
-        ]
+        backgroundColor: ['--color-cyan', '--color-purple']
       }
     ]
   };
-  pgStatusChartConfig = {
+
+  rawCapacityChartConfig = {
     colors: [
       {
-        backgroundColor: [
-          HealthPieColor.DEFAULT_GREEN,
-          HealthPieColor.DEFAULT_BLUE,
-          HealthPieColor.DEFAULT_ORANGE,
-          HealthPieColor.DEFAULT_RED
-        ]
+        backgroundColor: ['--color-blue', '--color-gray']
       }
     ]
   };
 
+  pgStatusChartConfig = {
+    options: {
+      events: ['']
+    }
+  };
+
   constructor(
     private healthService: HealthService,
     private i18n: I18n,
@@ -102,22 +90,48 @@ export class HealthComponent implements OnInit, OnDestroy {
       this.healthData.client_perf.write_op_per_sec + this.healthData.client_perf.read_op_per_sec;
 
     ratioLabels.push(
-      `${this.i18n('Writes')} (${this.calcPercentage(
-        this.healthData.client_perf.write_op_per_sec,
-        total
-      )}%)`
+      `${this.i18n(`Reads`)}: ${this.dimless.transform(
+        this.healthData.client_perf.read_op_per_sec
+      )} ${this.i18n(`/s`)}`
     );
-    ratioData.push(this.healthData.client_perf.write_op_per_sec);
+    ratioData.push(this.healthData.client_perf.read_op_per_sec);
     ratioLabels.push(
-      `${this.i18n('Reads')} (${this.calcPercentage(
-        this.healthData.client_perf.read_op_per_sec,
-        total
-      )}%)`
+      `${this.i18n(`Writes`)}: ${this.dimless.transform(
+        this.healthData.client_perf.write_op_per_sec
+      )} ${this.i18n(`/s`)}`
     );
-    ratioData.push(this.healthData.client_perf.read_op_per_sec);
+    ratioData.push(this.calcPercentage(this.healthData.client_perf.write_op_per_sec, total));
 
+    chart.labels = ratioLabels;
     chart.dataset[0].data = ratioData;
+    chart.dataset[0].label = `${this.dimless.transform(total)}\n${this.i18n(`IOPS`)}`;
+  }
+
+  prepareClientThroughput(chart: Record<string, any>) {
+    const ratioLabels = [];
+    const ratioData = [];
+
+    const total =
+      this.healthData.client_perf.read_bytes_sec + this.healthData.client_perf.write_bytes_sec;
+
+    ratioLabels.push(
+      `${this.i18n(`Reads`)}: ${this.dimlessBinary.transform(
+        this.healthData.client_perf.read_bytes_sec
+      )}${this.i18n(`/s`)}`
+    );
+    ratioData.push(this.calcPercentage(this.healthData.client_perf.read_bytes_sec, total));
+    ratioLabels.push(
+      `${this.i18n(`Writes`)}: ${this.dimlessBinary.transform(
+        this.healthData.client_perf.write_bytes_sec
+      )}${this.i18n(`/s`)}`
+    );
+    ratioData.push(this.calcPercentage(this.healthData.client_perf.write_bytes_sec, total));
+
     chart.labels = ratioLabels;
+    chart.dataset[0].data = ratioData;
+    chart.dataset[0].label = `${this.dimlessBinary.transform(total).replace(' ', '\n')}${this.i18n(
+      `/s`
+    )}`;
   }
 
   prepareRawUsage(chart: Record<string, any>, data: Record<string, any>) {
@@ -130,20 +144,18 @@ export class HealthComponent implements OnInit, OnDestroy {
       data.df.stats.total_bytes
     );
 
-    chart.dataset[0].data = [data.df.stats.total_used_raw_bytes, data.df.stats.total_avail_bytes];
+    chart.dataset[0].data = [percentUsed, percentAvailable];
 
     chart.labels = [
-      `${this.dimlessBinary.transform(data.df.stats.total_used_raw_bytes)} ${this.i18n(
-        'Used'
-      )} (${percentUsed}%)`,
-      `${this.dimlessBinary.transform(
+      `${this.i18n(`Used`)}: ${this.dimlessBinary.transform(data.df.stats.total_used_raw_bytes)}`,
+      `${this.i18n(`Avail.`)}: ${this.dimlessBinary.transform(
         data.df.stats.total_bytes - data.df.stats.total_used_raw_bytes
-      )} ${this.i18n('Avail.')} (${percentAvailable}%)`
+      )}`
     ];
 
-    chart.options.title.text = `${this.dimlessBinary.transform(
+    chart.dataset[0].label = `${percentUsed}%\nof ${this.dimlessBinary.transform(
       data.df.stats.total_bytes
-    )} ${this.i18n('total')}`;
+    )}`;
   }
 
   preparePgStatus(chart: Record<string, any>, data: Record<string, any>) {
@@ -160,54 +172,64 @@ export class HealthComponent implements OnInit, OnDestroy {
       totalPgs += pgAmount;
     });
 
+    for (const categoryType of this.pgCategoryService.getAllTypes()) {
+      if (_.isUndefined(categoryPgAmount[categoryType])) {
+        categoryPgAmount[categoryType] = 0;
+      }
+    }
+
     chart.dataset[0].data = this.pgCategoryService
       .getAllTypes()
-      .map((categoryType) => categoryPgAmount[categoryType]);
+      .map((categoryType) => this.calcPercentage(categoryPgAmount[categoryType], totalPgs));
 
     chart.labels = [
-      `${this.i18n('Clean')} (${this.calcPercentage(categoryPgAmount['clean'], totalPgs)}%)`,
-      `${this.i18n('Working')} (${this.calcPercentage(categoryPgAmount['working'], totalPgs)}%)`,
-      `${this.i18n('Warning')} (${this.calcPercentage(categoryPgAmount['warning'], totalPgs)}%)`,
-      `${this.i18n('Unknown')} (${this.calcPercentage(categoryPgAmount['unknown'], totalPgs)}%)`
+      `${this.i18n(`Clean`)}: ${this.dimless.transform(categoryPgAmount['clean'])}`,
+      `${this.i18n(`Working`)}: ${this.dimless.transform(categoryPgAmount['working'])}`,
+      `${this.i18n(`Warning`)}: ${this.dimless.transform(categoryPgAmount['warning'])}`,
+      `${this.i18n(`Unknown`)}: ${this.dimless.transform(categoryPgAmount['unknown'])}`
     ];
+
+    chart.dataset[0].label = `${totalPgs}\n${this.i18n(`PGs`)}`;
   }
 
   prepareObjects(chart: Record<string, any>, data: Record<string, any>) {
-    const totalReplicas = data.pg_info.object_stats.num_object_copies;
+    const objectCopies = data.pg_info.object_stats.num_object_copies;
     const healthy =
-      totalReplicas -
+      objectCopies -
       data.pg_info.object_stats.num_objects_misplaced -
       data.pg_info.object_stats.num_objects_degraded -
       data.pg_info.object_stats.num_objects_unfound;
+    const healthyPercentage = this.calcPercentage(healthy, objectCopies);
+    const misplacedPercentage = this.calcPercentage(
+      data.pg_info.object_stats.num_objects_misplaced,
+      objectCopies
+    );
+    const degradedPercentage = this.calcPercentage(
+      data.pg_info.object_stats.num_objects_degraded,
+      objectCopies
+    );
+    const unfoundPercentage = this.calcPercentage(
+      data.pg_info.object_stats.num_objects_unfound,
+      objectCopies
+    );
 
     chart.labels = [
-      `${this.i18n('Healthy')} (${this.calcPercentage(healthy, totalReplicas)}%)`,
-      `${this.i18n('Misplaced')} (${this.calcPercentage(
-        data.pg_info.object_stats.num_objects_misplaced,
-        totalReplicas
-      )}%)`,
-      `${this.i18n('Degraded')} (${this.calcPercentage(
-        data.pg_info.object_stats.num_objects_degraded,
-        totalReplicas
-      )}%)`,
-      `${this.i18n('Unfound')} (${this.calcPercentage(
-        data.pg_info.object_stats.num_objects_unfound,
-        totalReplicas
-      )}%)`
+      `${this.i18n(`Healthy`)}: ${healthyPercentage}%`,
+      `${this.i18n(`Misplaced`)}: ${misplacedPercentage}%`,
+      `${this.i18n(`Degraded`)}: ${degradedPercentage}%`,
+      `${this.i18n(`Unfound`)}: ${unfoundPercentage}%`
     ];
 
     chart.dataset[0].data = [
-      healthy,
-      data.pg_info.object_stats.num_objects_misplaced,
-      data.pg_info.object_stats.num_objects_degraded,
-      data.pg_info.object_stats.num_objects_unfound
+      healthyPercentage,
+      misplacedPercentage,
+      degradedPercentage,
+      unfoundPercentage
     ];
 
-    chart.options.title.text = `${this.dimless.transform(
+    chart.dataset[0].label = `${this.dimless.transform(
       data.pg_info.object_stats.num_objects
-    )} ${this.i18n('total')} (${this.dimless.transform(totalReplicas)} ${this.i18n('replicas')})`;
-
-    chart.options.maintainAspectRatio = window.innerWidth >= 375;
+    )}\n${this.i18n(`objects`)}`;
   }
 
   isClientReadWriteChartShowable() {
index 526b3e9d74e961d05cfcd446962c3e6c9da6156b..84acc3492bcda347bc59f8ed03de7088ad0a0a83 100644 (file)
@@ -1,14 +1,14 @@
 <div class="card"
      [ngClass]="cardClass">
   <div class="card-body d-flex align-items-center justify-content-center">
-    <h5 class="card-title m-4">
+    <h4 class="card-title m-4">
       <a *ngIf="link; else noLinkTitle"
          [routerLink]="link">{{ cardTitle }}</a>
 
       <ng-template #noLinkTitle>
         {{ cardTitle }}
       </ng-template>
-    </h5>
+    </h4>
 
     <div class="card-text text-center"
          [ngClass]="contentClass">
index 07732f3edc87117eb48edeed5a2ed403b92686f3..22cc7c7dcd30ab2eb2d2fe655a79a4cbe4a3fd2b 100644 (file)
@@ -21,9 +21,9 @@ $card-font-max-size: 21px;
     padding-top: 40px !important;
 
     .card-title {
+      left: -0.6rem;
       position: absolute;
-      left: 0;
-      top: 0;
+      top: -0.3rem;
     }
   }
 }
index 8467d46e481b109a408061fe4efd50c32c14abbb..a85a32fc6f62499d5c35dae3cfeb2b6b4064759b 100644 (file)
@@ -377,7 +377,8 @@ export class NfsFormComponent implements OnInit {
       return of([]);
     }
 
-    return this.nfsService.lsDir(path);
+    const fsName = this.nfsForm.getValue('fsal').fs_name;
+    return this.nfsService.lsDir(fsName, path);
   }
 
   pathChangeHandler() {
index a1515e02b7840d6367e3f18e1ed11593b52c8783..5dc26d94dbc7254cce971d6171dc5bd59c13c918 100644 (file)
@@ -14,7 +14,7 @@
     <cd-grafana [grafanaPath]="'ceph-pool-detail?var-pool_name='
                 + selection['pool_name']"
                 uid="-xyV8KCiz"
-                grafanaStyle="one">
+                grafanaStyle="three">
     </cd-grafana>
   </tab>
   <tab *ngIf="selection.type === 'replicated'"
index 398a535bf8c6d4cf842cb82ce4820714a6af4a12..0f988ded1342c19283434a74ec8cd9c835df5910 100644 (file)
                     *ngIf="form.showError('size', formDir)"
                     i18n>The size specified is out of range. A value from
                 {{ getMinSize() }} to {{ getMaxSize() }} is usable.</span>
+              <span class="text-warning-dark"
+                    *ngIf="form.getValue('size') === 1"
+                    i18n>A size of 1 will not create a replication of the
+                object. The 'Replicated size' includes the object itself.</span>
             </div>
           </div>
 
index a44571b78281033d625a04d94c7c55a25545bb2f..4d570f102df4a5bba8c0f80d2761a480327ff7f0 100644 (file)
@@ -310,6 +310,17 @@ describe('PoolFormComponent', () => {
       formHelper.expectValidChange('size', 2);
     });
 
+    it('validates if warning is displayed when size is 1', () => {
+      formHelper.setValue('poolType', 'replicated');
+      formHelper.expectValid('size');
+
+      formHelper.setValue('size', 1, true);
+      expect(fixtureHelper.getElementByCss('#size ~ .text-warning-dark')).toBeTruthy();
+
+      formHelper.setValue('size', 2, true);
+      expect(fixtureHelper.getElementByCss('#size ~ .text-warning-dark')).toBeFalsy();
+    });
+
     it('validates compression mode default value', () => {
       expect(form.getValue('mode')).toBe('none');
     });
index 165ed7f34e83e9d0b852e84f4d649bf824d35c65..31e5ca8cbc76e93728539cd73b78bea5676627a9 100644 (file)
@@ -479,6 +479,10 @@ describe('PoolListComponent', () => {
   });
 
   describe('getDisableDesc', () => {
+    beforeEach(() => {
+      component.selection.selected = [{ pool_name: 'foo' }];
+    });
+
     it('should return message if mon_allow_pool_delete flag is set to false', () => {
       component.monAllowPoolDelete = false;
       expect(component.getDisableDesc()).toBe(
@@ -486,9 +490,9 @@ describe('PoolListComponent', () => {
       );
     });
 
-    it('should return undefined if mon_allow_pool_delete flag is set to true', () => {
+    it('should return false if mon_allow_pool_delete flag is set to true', () => {
       component.monAllowPoolDelete = true;
-      expect(component.getDisableDesc()).toBeUndefined();
+      expect(component.getDisableDesc()).toBeFalsy();
     });
   });
 });
index 93958f1b5339eb61f79e04cacb3afe8dee07404e..2f35cf8a97f8c89d0136372a7c4314c97931e269 100644 (file)
@@ -93,8 +93,7 @@ export class PoolListComponent extends ListWithDetails implements OnInit {
         icon: Icons.destroy,
         click: () => this.deletePoolModal(),
         name: this.actionLabels.DELETE,
-        disable: () => !this.selection.first() || !this.monAllowPoolDelete,
-        disableDesc: () => this.getDisableDesc()
+        disable: this.getDisableDesc.bind(this)
       }
     ];
 
@@ -294,14 +293,18 @@ export class PoolListComponent extends ListWithDetails implements OnInit {
     }
   }
 
-  getDisableDesc(): string | undefined {
-    if (!this.monAllowPoolDelete) {
-      return this.i18n(
-        'Pool deletion is disabled by the mon_allow_pool_delete configuration setting.'
-      );
+  getDisableDesc(): boolean | string {
+    if (this.selection && this.selection.hasSelection) {
+      if (!this.monAllowPoolDelete) {
+        return this.i18n(
+          'Pool deletion is disabled by the mon_allow_pool_delete configuration setting.'
+        );
+      }
+
+      return false;
     }
 
-    return undefined;
+    return true;
   }
 
   setExpandedRow(expandedRow: any) {
index a2ede8d3f3f02c6b36a1a3893cc533b2fd456497..bfea7d5742e90560a4b8374e3757258911a1702e 100644 (file)
@@ -1,8 +1,11 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { TabsModule } from 'ngx-bootstrap/tabs';
+import { of } from 'rxjs';
 
 import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
+import { RgwBucketService } from '../../../shared/api/rgw-bucket.service';
 import { CdTableSelection } from '../../../shared/models/cd-table-selection';
 import { SharedModule } from '../../../shared/shared.module';
 import { RgwBucketDetailsComponent } from './rgw-bucket-details.component';
@@ -10,14 +13,19 @@ import { RgwBucketDetailsComponent } from './rgw-bucket-details.component';
 describe('RgwBucketDetailsComponent', () => {
   let component: RgwBucketDetailsComponent;
   let fixture: ComponentFixture<RgwBucketDetailsComponent>;
+  let rgwBucketService: RgwBucketService;
+  let rgwBucketServiceGetSpy: jasmine.Spy;
 
   configureTestBed({
     declarations: [RgwBucketDetailsComponent],
-    imports: [SharedModule, TabsModule.forRoot()],
+    imports: [SharedModule, TabsModule.forRoot(), HttpClientTestingModule],
     providers: [i18nProviders]
   });
 
   beforeEach(() => {
+    rgwBucketService = TestBed.get(RgwBucketService);
+    rgwBucketServiceGetSpy = spyOn(rgwBucketService, 'get');
+    rgwBucketServiceGetSpy.and.returnValue(of(null));
     fixture = TestBed.createComponent(RgwBucketDetailsComponent);
     component = fixture.componentInstance;
     component.selection = new CdTableSelection();
@@ -27,4 +35,10 @@ describe('RgwBucketDetailsComponent', () => {
   it('should create', () => {
     expect(component).toBeTruthy();
   });
+
+  it('should retrieve bucket full info', () => {
+    component.selection = { bid: 'bucket' };
+    component.ngOnChanges();
+    expect(rgwBucketServiceGetSpy).toHaveBeenCalled();
+  });
 });
index 48f2554003826c8d7dc8883ac3239b12ef2776ff..adf0b13d310da9661d006e0e28a4236c7ad27dd5 100644 (file)
@@ -1,13 +1,23 @@
-import { Component, Input } from '@angular/core';
+import { Component, Input, OnChanges } from '@angular/core';
+
+import { RgwBucketService } from '../../../shared/api/rgw-bucket.service';
 
 @Component({
   selector: 'cd-rgw-bucket-details',
   templateUrl: './rgw-bucket-details.component.html',
   styleUrls: ['./rgw-bucket-details.component.scss']
 })
-export class RgwBucketDetailsComponent {
+export class RgwBucketDetailsComponent implements OnChanges {
   @Input()
   selection: any;
 
-  constructor() {}
+  constructor(private rgwBucketService: RgwBucketService) {}
+
+  ngOnChanges() {
+    if (this.selection) {
+      this.rgwBucketService.get(this.selection.bid).subscribe((bucket: object) => {
+        this.selection = bucket;
+      });
+    }
+  }
 }
index 9f523ca232b50c8ae635a2c4eef23f3c48827f6f..ea9ec5b28cec26fdbf478297a7e15f284e5581e0 100644 (file)
@@ -1,12 +1,15 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
+
 import { TabsModule } from 'ngx-bootstrap/tabs';
+import { NgxPipeFunctionModule } from 'ngx-pipe-function';
+
 import { DataTableModule } from '../../shared/datatable/datatable.module';
 import { SharedModule } from '../../shared/shared.module';
 import { DeviceListComponent } from './device-list/device-list.component';
 import { SmartListComponent } from './smart-list/smart-list.component';
 @NgModule({
-  imports: [CommonModule, DataTableModule, SharedModule, TabsModule],
+  imports: [CommonModule, DataTableModule, SharedModule, TabsModule, NgxPipeFunctionModule],
   exports: [DeviceListComponent, SmartListComponent],
   declarations: [DeviceListComponent, SmartListComponent]
 })
index 3bc29c518dcfcccd2da0878f26c52180e92be151..328d1a0a9ff29302963eee4dbf5ffebfa7343e91 100644 (file)
@@ -7,60 +7,79 @@
                   i18n>The data received has the JSON format version 2.x and is currently incompatible with the dashboard.</cd-alert-panel>
 
   <ng-container *ngIf="!error && !incompatible">
-    <cd-alert-panel *ngIf="!(data | keyvalue).length"
+    <cd-alert-panel *ngIf="data | pipeFunction:isEmpty"
                     type="info"
                     i18n>No SMART data available.</cd-alert-panel>
 
-    <tabset *ngFor="let device of data | keyvalue">
-      <tab [heading]="device.value.device + ' (' + device.value.identifier + ')'">
-        <ng-container *ngIf="device.value.error; else noError">
-          <cd-alert-panel id="alert-error"
-                          type="warning">{{ device.value.userMessage }}</cd-alert-panel>
-        </ng-container>
-        <ng-template #noError>
-          <!-- HDD/NVMe self test -->
-          <ng-container *ngIf="device.value.info.smart_status.passed; else selfTestFailed">
-            <cd-alert-panel id="alert-self-test-passed"
-                            size="slim"
-                            type="info"
-                            i18n-title
-                            title="SMART overall-health self-assessment test result"
-                            i18n>passed</cd-alert-panel>
+    <ng-container *ngIf="!(data | pipeFunction:isEmpty)">
+      <tabset>
+        <tab *ngFor="let device of data | keyvalue"
+             [heading]="device.value.device + ' (' + device.value.identifier + ')'">
+          <ng-container *ngIf="device.value.error; else noError">
+            <cd-alert-panel id="alert-error"
+                            type="warning">{{ device.value.userMessage }}</cd-alert-panel>
           </ng-container>
-          <ng-template #selfTestFailed>
-            <cd-alert-panel id="alert-self-test-failed"
+
+          <ng-template #noError>
+            <cd-alert-panel *ngIf="device.value.info?.smart_status | pipeFunction:isEmpty; else hasSmartStatus"
+                            id="alert-self-test-unknown"
                             size="slim"
                             type="warning"
                             i18n-title
                             title="SMART overall-health self-assessment test result"
-                            i18n>failed</cd-alert-panel>
+                            i18n>unknown</cd-alert-panel>
+            <ng-template #hasSmartStatus>
+              <!-- HDD/NVMe self test -->
+              <ng-container *ngIf="device.value.info.smart_status.passed; else selfTestFailed">
+                <cd-alert-panel id="alert-self-test-passed"
+                                size="slim"
+                                type="info"
+                                i18n-title
+                                title="SMART overall-health self-assessment test result"
+                                i18n>passed</cd-alert-panel>
+              </ng-container>
+              <ng-template #selfTestFailed>
+                <cd-alert-panel id="alert-self-test-failed"
+                                size="slim"
+                                type="warning"
+                                i18n-title
+                                title="SMART overall-health self-assessment test result"
+                                i18n>failed</cd-alert-panel>
+              </ng-template>
+            </ng-template>
           </ng-template>
 
-          <tabset>
+          <tabset #innerTabset
+                  *ngIf="!(device.value.info | pipeFunction:isEmpty) || !(device.value.smart | pipeFunction:isEmpty)">
             <tab i18n-heading
                  heading="Device Information">
-              <cd-table-key-value [renderObjects]="true"
+              <cd-table-key-value *ngIf="!(device.value.info | pipeFunction:isEmpty)"
+                                  [renderObjects]="true"
                                   [data]="device.value.info"></cd-table-key-value>
+              <cd-alert-panel *ngIf="(device.value.info | pipeFunction:isEmpty)"
+                              id="alert-device-info-unavailable"
+                              type="info"
+                              i18n>No device information available for this device.</cd-alert-panel>
             </tab>
-
             <tab i18n-heading
                  heading="SMART">
-              <cd-table *ngIf="device.value.smart.attributes"
+              <cd-table *ngIf="device.value.smart?.attributes"
                         [data]="device.value.smart.attributes.table"
                         updateSelectionOnRefresh="never"
                         [columns]="smartDataColumns"></cd-table>
-              <cd-table-key-value *ngIf="device.value.smart.nvmeData"
+              <cd-table-key-value *ngIf="device.value.smart?.nvmeData"
                                   [renderObjects]="true"
                                   [data]="device.value.smart.nvmeData"
                                   updateSelectionOnRefresh="never"></cd-table-key-value>
-              <cd-alert-panel *ngIf="!device.value.smart.attributes && !device.value.smart.nvmeData"
+              <cd-alert-panel *ngIf="!device.value.smart?.attributes && !device.value.smart?.nvmeData"
+                              id="alert-device-smart-data-unavailable"
                               type="info"
                               i18n>No SMART data available for this device.</cd-alert-panel>
             </tab>
           </tabset>
-        </ng-template>
-      </tab>
-    </tabset>
+        </tab>
+      </tabset>
+    </ng-container>
   </ng-container>
 </ng-container>
 <ng-template #isLoading>
index 395608b34321b1f2adb74781ecbfe2630ff55a37..c7d2f15f86018a491daa969978c43d8159269046 100644 (file)
@@ -6,6 +6,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
 import * as _ from 'lodash';
 import { TabsetComponent, TabsetConfig, TabsModule } from 'ngx-bootstrap/tabs';
+import { NgxPipeFunctionModule } from 'ngx-pipe-function';
 import { of } from 'rxjs';
 
 import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
@@ -79,9 +80,43 @@ describe('OsdSmartListComponent', () => {
     component.ngOnChanges(changes);
   };
 
+  /**
+   * Verify an alert panel and its attributes.
+   *
+   * @param selector The CSS selector for the alert panel.
+   * @param panelTitle The title should be displayed.
+   * @param panelType Alert level of panel. Can be in `warning` or `info`.
+   * @param panelSize Pass `slim` for slim alert panel.
+   */
+  const verifyAlertPanel = (
+    selector: string,
+    panelTitle: string,
+    panelType: 'warning' | 'info',
+    panelSize?: 'slim'
+  ) => {
+    const alertPanel = fixture.debugElement.query(By.css(selector));
+    expect(component.incompatible).toBe(false);
+    expect(component.loading).toBe(false);
+
+    expect(alertPanel.attributes.type).toBe(panelType);
+    if (panelSize === 'slim') {
+      expect(alertPanel.attributes.title).toBe(panelTitle);
+      expect(alertPanel.attributes.size).toBe(panelSize);
+    } else {
+      const panelText = alertPanel.query(By.css('.alert-panel-text'));
+      expect(panelText.nativeElement.textContent).toBe(panelTitle);
+    }
+  };
+
   configureTestBed({
     declarations: [SmartListComponent],
-    imports: [BrowserAnimationsModule, TabsModule, SharedModule, HttpClientTestingModule],
+    imports: [
+      BrowserAnimationsModule,
+      TabsModule,
+      SharedModule,
+      HttpClientTestingModule,
+      NgxPipeFunctionModule
+    ],
     providers: [i18nProviders, TabsetComponent, TabsetConfig]
   });
 
@@ -144,22 +179,61 @@ describe('OsdSmartListComponent', () => {
   it('should display info panel for passed self test', () => {
     initializeComponentWithData('hdd_v1');
     fixture.detectChanges();
-    const alertPanel = fixture.debugElement.query(By.css('cd-alert-panel#alert-self-test-passed'));
-    expect(component.incompatible).toBe(false);
-    expect(component.loading).toBe(false);
-    expect(alertPanel.attributes.size).toBe('slim');
-    expect(alertPanel.attributes.title).toBe('SMART overall-health self-assessment test result');
-    expect(alertPanel.attributes.type).toBe('info');
+    verifyAlertPanel(
+      'cd-alert-panel#alert-self-test-passed',
+      'SMART overall-health self-assessment test result',
+      'info',
+      'slim'
+    );
   });
 
   it('should display warning panel for failed self test', () => {
     initializeComponentWithData('hdd_v1', { 'smart_status.passed': false });
     fixture.detectChanges();
-    const alertPanel = fixture.debugElement.query(By.css('cd-alert-panel#alert-self-test-failed'));
-    expect(component.incompatible).toBe(false);
-    expect(component.loading).toBe(false);
-    expect(alertPanel.attributes.size).toBe('slim');
-    expect(alertPanel.attributes.title).toBe('SMART overall-health self-assessment test result');
-    expect(alertPanel.attributes.type).toBe('warning');
+    verifyAlertPanel(
+      'cd-alert-panel#alert-self-test-failed',
+      'SMART overall-health self-assessment test result',
+      'warning',
+      'slim'
+    );
+  });
+
+  it('should display warning panel for unknown self test', () => {
+    initializeComponentWithData('hdd_v1', { smart_status: undefined });
+    fixture.detectChanges();
+    verifyAlertPanel(
+      'cd-alert-panel#alert-self-test-unknown',
+      'SMART overall-health self-assessment test result',
+      'warning',
+      'slim'
+    );
+  });
+
+  it('should display info panel for empty device info', () => {
+    initializeComponentWithData('hdd_v1');
+    const deviceId: string = _.keys(component.data)[0];
+    component.data[deviceId]['info'] = {};
+    fixture.detectChanges();
+    component.innerTabset.tabs[0].active = true;
+    fixture.detectChanges();
+    verifyAlertPanel(
+      'tab.active cd-alert-panel#alert-device-info-unavailable',
+      'No device information available for this device.',
+      'info'
+    );
+  });
+
+  it('should display info panel for empty SMART data', () => {
+    initializeComponentWithData('hdd_v1');
+    const deviceId: string = _.keys(component.data)[0];
+    component.data[deviceId]['smart'] = {};
+    fixture.detectChanges();
+    component.innerTabset.tabs[1].active = true;
+    fixture.detectChanges();
+    verifyAlertPanel(
+      'tab.active cd-alert-panel#alert-device-smart-data-unavailable',
+      'No SMART data available for this device.',
+      'info'
+    );
   });
 });
index 4bccee8c4d92263fd96714147bcd3cd259f41f38..5f228a8f886240a11c4bd09465a0fa6703f343ed 100644 (file)
@@ -1,7 +1,8 @@
-import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
+import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
 
 import { I18n } from '@ngx-translate/i18n-polyfill';
 import * as _ from 'lodash';
+import { TabsetComponent } from 'ngx-bootstrap/tabs';
 
 import { HostService } from '../../../shared/api/host.service';
 import { OsdService } from '../../../shared/api/osd.service';
@@ -20,6 +21,9 @@ import {
   styleUrls: ['./smart-list.component.scss']
 })
 export class SmartListComponent implements OnInit, OnChanges {
+  @ViewChild('innerTabset', { static: false })
+  innerTabset: TabsetComponent;
+
   @Input()
   osdId: number = null;
   @Input()
@@ -33,6 +37,8 @@ export class SmartListComponent implements OnInit, OnChanges {
 
   smartDataColumns: CdTableColumn[];
 
+  isEmpty = _.isEmpty;
+
   constructor(
     private i18n: I18n,
     private osdService: OsdService,
index d98e16c50c7e3604b0eb9aa9c11a49a2c014c808..07c0b6d3bfd3c07558a325483b913d94fed56a2e 100755 (executable)
@@ -1,5 +1,5 @@
 <div>
-  <h1 i18n>Please set a new password.</h1>
+  <h2 i18n>Please set a new password.</h2>
   <h4 i18n>You will be redirected to the login page afterwards.</h4>
   <form #frm="ngForm"
         [formGroup]="userForm"
index 9370066183edf3ba613631b9b7f420e3461c7730..a27bf74d4adf82d7e6d92723e1abe7ccd535e98f 100644 (file)
@@ -1,10 +1,6 @@
 @import 'defaults';
 
 ::ng-deep cd-login {
-  h1 {
-    margin: 0 0 30px 0;
-  }
-
   .form-group {
     border-left: 4px solid white;
     background-color: $color-password-toggle-bg;
index 59f32c9cbe689ab446221978175e6de059fddcfe..3793dabc462e9b606f3bca03f8f42f6a3d1632e0 100644 (file)
@@ -25,6 +25,7 @@
                    id="username"
                    name="username"
                    formControlName="username"
+                   autocomplete="off"
                    autofocus>
             <span class="invalid-feedback"
                   *ngIf="userForm.showError('username', formDir, 'required')"
@@ -91,6 +92,7 @@
                      placeholder="Confirm password..."
                      id="confirmpassword"
                      name="confirmpassword"
+                     autocomplete="new-password"
                      formControlName="confirmpassword">
               <span class="input-group-append">
                 <button type="button"
index 2a42f711fb55b3ebf294a62b463dadca048c23ff..891f674785ddd46b3bf9b4c457d77f1b76f23c26 100644 (file)
             class="tc_submenuitem tc_submenuitem_modules"
             *ngIf="permissions.configOpt.read">
           <a i18n
-             routerLink="/mgr-modules">Manager modules</a>
+             routerLink="/mgr-modules">Manager Modules</a>
         </li>
         <li routerLinkActive="active"
             class="tc_submenuitem tc_submenuitem_log"
index 3bca268d8cd3e6a0ddf47629f9258fb6acf50188..f5eae4f890d0a7173d6c751f2748496128ffbc8c 100644 (file)
@@ -3,6 +3,9 @@
    [ngClass]="{ 'running': hasRunningTasks }"
    (click)="toggleSidebar()">
   <i [ngClass]="[icons.bell]"></i>
+  <span class="dot"
+        *ngIf="hasNotifications">
+  </span>
   <span class="d-md-none"
         i18n>Tasks and Notifications</span>
 </a>
index 8a2269b1c466d972f28a293099274be54caf2520..cb83a0c021ea8a75013f2844c6cdf5785886eac0 100644 (file)
@@ -7,3 +7,21 @@
 .running:hover i {
   color: white;
 }
+
+a {
+  .dot {
+    background-color: $color-primary;
+    border: 2px solid $color-navbar-bg;
+    border-radius: 50%;
+    height: 11px;
+    position: absolute;
+    right: 17px;
+    top: 10px;
+    width: 10px;
+  }
+
+  &:hover .dot {
+    background-color: $color-solid-white;
+    border-color: $color-primary;
+  }
+}
index dacdb24c0428d161147a73817a3a8b2506ee0162..af9c9897b60af8d031bef5e8fec6284cea7e52eb 100644 (file)
@@ -5,7 +5,9 @@ import { RouterTestingModule } from '@angular/router/testing';
 import { ToastrModule } from 'ngx-toastr';
 
 import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
+import { CdNotification, CdNotificationConfig } from '../../../shared/models/cd-notification';
 import { ExecutingTask } from '../../../shared/models/executing-task';
+import { NotificationService } from '../../../shared/services/notification.service';
 import { SummaryService } from '../../../shared/services/summary.service';
 import { SharedModule } from '../../../shared/shared.module';
 import { NotificationsComponent } from './notifications.component';
@@ -14,6 +16,7 @@ describe('NotificationsComponent', () => {
   let component: NotificationsComponent;
   let fixture: ComponentFixture<NotificationsComponent>;
   let summaryService: SummaryService;
+  let notificationService: NotificationService;
 
   configureTestBed({
     imports: [HttpClientTestingModule, SharedModule, ToastrModule.forRoot(), RouterTestingModule],
@@ -25,6 +28,7 @@ describe('NotificationsComponent', () => {
     fixture = TestBed.createComponent(NotificationsComponent);
     component = fixture.componentInstance;
     summaryService = TestBed.get(SummaryService);
+    notificationService = TestBed.get(NotificationService);
 
     fixture.detectChanges();
   });
@@ -41,4 +45,15 @@ describe('NotificationsComponent', () => {
 
     expect(component.hasRunningTasks).toBeTruthy();
   });
+
+  it('should create a dot if there are running notifications', () => {
+    const notification = new CdNotification(new CdNotificationConfig());
+    const recent = notificationService['dataSource'].getValue();
+    recent.push(notification);
+    notificationService['dataSource'].next(recent);
+    expect(component.hasNotifications).toBeTruthy();
+    fixture.detectChanges();
+    const dot = fixture.debugElement.nativeElement.querySelector('.dot');
+    expect(dot).not.toBe('');
+  });
 });
index b6cee7649d3b1a9967caf8a94bf13e91c2289dc9..27d74360cddedcca0b8683267d9551b4812faffa 100644 (file)
@@ -3,6 +3,7 @@ import { Component, OnDestroy, OnInit } from '@angular/core';
 import { Subscription } from 'rxjs';
 
 import { Icons } from '../../../shared/enum/icons.enum';
+import { CdNotification } from '../../../shared/models/cd-notification';
 import { NotificationService } from '../../../shared/services/notification.service';
 import { SummaryService } from '../../../shared/services/summary.service';
 
@@ -14,6 +15,7 @@ import { SummaryService } from '../../../shared/services/summary.service';
 export class NotificationsComponent implements OnInit, OnDestroy {
   icons = Icons;
   hasRunningTasks = false;
+  hasNotifications = false;
   private subs = new Subscription();
 
   constructor(
@@ -27,6 +29,12 @@ export class NotificationsComponent implements OnInit, OnDestroy {
         this.hasRunningTasks = summary.executing_tasks.length > 0;
       })
     );
+
+    this.subs.add(
+      this.notificationService.data$.subscribe((notifications: CdNotification[]) => {
+        this.hasNotifications = notifications.length > 0;
+      })
+    );
   }
 
   ngOnDestroy(): void {
index e5f039ff39e97243f15bdfae06b637f08747c4c3..ca5b25eb5de20081e75e757b3b9423805cb6b9b6 100644 (file)
@@ -59,8 +59,8 @@ describe('NfsService', () => {
   });
 
   it('should call lsDir', () => {
-    service.lsDir('foo_dir').subscribe();
-    const req = httpTesting.expectOne('ui-api/nfs-ganesha/lsdir?root_dir=foo_dir');
+    service.lsDir('a', 'foo_dir').subscribe();
+    const req = httpTesting.expectOne('ui-api/nfs-ganesha/lsdir/a?root_dir=foo_dir');
     expect(req.request.method).toBe('GET');
   });
 
index 1a53047ecdce0ea14f2bbc2d7a0d57ed9f7e1b09..7c00659d6e7cfd0c8248472d9f2ac1c97177006d 100644 (file)
@@ -75,8 +75,8 @@ export class NfsService {
     });
   }
 
-  lsDir(root_dir: string) {
-    return this.http.get(`${this.uiApiPath}/lsdir?root_dir=${root_dir}`);
+  lsDir(fs_name: string, root_dir: string) {
+    return this.http.get(`${this.uiApiPath}/lsdir/${fs_name}?root_dir=${root_dir}`);
   }
 
   buckets(user_id: string) {
index 0d342c48d1cd4f547647b00811158fd73fca3392..978aca1fc4fcc49f7cb201d564fe2fe95f1a4404 100644 (file)
@@ -26,33 +26,10 @@ describe('RgwBucketService', () => {
     expect(service).toBeTruthy();
   });
 
-  it('should call list, with enumerate returning empty', () => {
-    let result;
-    service.list().subscribe((resp) => {
-      result = resp;
-    });
-    const req = httpTesting.expectOne('api/rgw/bucket');
-    req.flush([]);
-    expect(req.request.method).toBe('GET');
-    expect(result).toEqual([]);
-  });
-
-  it('should call list, with enumerate returning 2 elements', () => {
-    let result;
-    service.list().subscribe((resp) => {
-      result = resp;
-    });
-    let req = httpTesting.expectOne('api/rgw/bucket');
-    req.flush(['foo', 'bar']);
-
-    req = httpTesting.expectOne('api/rgw/bucket/foo');
-    req.flush({ name: 'foo' });
-
-    req = httpTesting.expectOne('api/rgw/bucket/bar');
-    req.flush({ name: 'bar' });
-
+  it('should call list', () => {
+    service.list().subscribe();
+    const req = httpTesting.expectOne('api/rgw/bucket?stats=true');
     expect(req.request.method).toBe('GET');
-    expect(result).toEqual([{ name: 'foo' }, { name: 'bar' }]);
   });
 
   it('should call get', () => {
index 71907497d701f2306d03ed30e421b3026f751eb3..b73bff0dddc59ecf9393453fe545bdf9dc7c3f68 100644 (file)
@@ -2,7 +2,7 @@ import { HttpClient, HttpParams } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 
 import * as _ from 'lodash';
-import { forkJoin as observableForkJoin, of as observableOf } from 'rxjs';
+import { of as observableOf } from 'rxjs';
 import { mergeMap } from 'rxjs/operators';
 
 import { cdEncode } from '../decorators/cd-encode';
@@ -22,18 +22,9 @@ export class RgwBucketService {
    * @return {Observable<Object[]>}
    */
   list() {
-    return this.enumerate().pipe(
-      mergeMap((buckets: string[]) => {
-        if (buckets.length > 0) {
-          return observableForkJoin(
-            buckets.map((bucket: string) => {
-              return this.get(bucket);
-            })
-          );
-        }
-        return observableOf([]);
-      })
-    );
+    let params = new HttpParams();
+    params = params.append('stats', 'true');
+    return this.http.get(this.url, { params: params });
   }
 
   /**
index 9a095d7e9bad31c3370f4d0480539c930af9389f..63860a7f84942cf729c6d4c7ec9b788a8075a4b4 100644 (file)
   height: 900px;
 }
 
+.grafana_four {
+  height: 1160px;
+}
+
 .timepicker {
   label {
     font-weight: 700;
index 7d8c49095bdc98b786b5da7f2be5fbdd5317bb19..94f41a8d43f7bb9f24eccfc5cfd967a06e75b473 100644 (file)
@@ -154,7 +154,8 @@ export class GrafanaComponent implements OnInit, OnChanges {
     this.styles = {
       one: 'grafana_one',
       two: 'grafana_two',
-      three: 'grafana_three'
+      three: 'grafana_three',
+      four: 'grafana_four'
     };
 
     this.settingsService.ifSettingConfigured('api/grafana/url', (url) => {
index bc6f36c941ea68380a03ef29a5fd5f85fb8e3c54..d500f6b4bb998bde29f41a6a8dc980298cffa3ba 100644 (file)
@@ -7,9 +7,9 @@ import { of } from 'rxjs';
 import { AlertModule } from 'ngx-bootstrap/alert';
 
 import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
-import { UserFormModel } from '../../../core/auth/user-form/user-form.model';
 import { MgrModuleService } from '../../api/mgr-module.service';
 import { UserService } from '../../api/user.service';
+import { Permissions } from '../../models/permissions';
 import { PipesModule } from '../../pipes/pipes.module';
 import { AuthStorageService } from '../../services/auth-storage.service';
 import { NotificationService } from '../../services/notification.service';
@@ -21,35 +21,17 @@ describe('TelemetryActivationNotificationComponent', () => {
   let fixture: ComponentFixture<TelemetryNotificationComponent>;
 
   let authStorageService: AuthStorageService;
-  let userService: UserService;
   let mgrModuleService: MgrModuleService;
   let notificationService: NotificationService;
 
   let isNotificationHiddenSpy: jasmine.Spy;
-  let getUsernameSpy: jasmine.Spy;
-  let userServiceGetSpy: jasmine.Spy;
+  let getPermissionsSpy: jasmine.Spy;
   let getConfigSpy: jasmine.Spy;
 
-  const user: UserFormModel = {
-    username: 'username',
-    password: undefined,
-    name: 'User 1',
-    email: 'user1@email.com',
-    roles: ['read-only'],
-    enabled: true,
-    pwdExpirationDate: undefined,
-    pwdUpdateRequired: true
-  };
-  const admin: UserFormModel = {
-    username: 'admin',
-    password: undefined,
-    name: 'User 1',
-    email: 'user1@email.com',
-    roles: ['administrator'],
-    enabled: true,
-    pwdExpirationDate: undefined,
-    pwdUpdateRequired: true
-  };
+  const configOptPermissions: Permissions = new Permissions({
+    'config-opt': ['read', 'create', 'update', 'delete']
+  });
+  const noConfigOptPermissions: Permissions = new Permissions({});
   const telemetryEnabledConfig = {
     enabled: true
   };
@@ -67,13 +49,13 @@ describe('TelemetryActivationNotificationComponent', () => {
     fixture = TestBed.createComponent(TelemetryNotificationComponent);
     component = fixture.componentInstance;
     authStorageService = TestBed.get(AuthStorageService);
-    userService = TestBed.get(UserService);
     mgrModuleService = TestBed.get(MgrModuleService);
     notificationService = TestBed.get(NotificationService);
 
     isNotificationHiddenSpy = spyOn(component, 'isNotificationHidden').and.returnValue(false);
-    getUsernameSpy = spyOn(authStorageService, 'getUsername').and.returnValue('username');
-    userServiceGetSpy = spyOn(userService, 'get').and.returnValue(of(admin)); // Not the best name but it sounded better than `getSpy`
+    getPermissionsSpy = spyOn(authStorageService, 'getPermissions').and.returnValue(
+      configOptPermissions
+    );
     getConfigSpy = spyOn(mgrModuleService, 'getConfig').and.returnValue(
       of(telemetryDisabledConfig)
     );
@@ -90,14 +72,13 @@ describe('TelemetryActivationNotificationComponent', () => {
     expect(component.displayNotification).toBe(false);
   });
 
-  it('should not show notification for an user without administrator role', () => {
-    userServiceGetSpy.and.returnValue(of(user));
+  it('should not show notification for a user without configOpt permissions', () => {
+    getPermissionsSpy.and.returnValue(noConfigOptPermissions);
     fixture.detectChanges();
     expect(component.displayNotification).toBe(false);
   });
 
   it('should not show notification if the module is enabled already', () => {
-    getUsernameSpy.and.returnValue('admin');
     getConfigSpy.and.returnValue(of(telemetryEnabledConfig));
     fixture.detectChanges();
     expect(component.displayNotification).toBe(false);
index 974f625e1c6aa3341e058d2b085ba9e0067e605e..6b38b75866441ccef55466906dd59bf65104e615 100644 (file)
@@ -1,10 +1,9 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
 
 import { I18n } from '@ngx-translate/i18n-polyfill';
+import * as _ from 'lodash';
 
-import { UserFormModel } from '../../../core/auth/user-form/user-form.model';
 import { MgrModuleService } from '../../api/mgr-module.service';
-import { UserService } from '../../api/user.service';
 import { NotificationType } from '../../enum/notification-type.enum';
 import { AuthStorageService } from '../../services/auth-storage.service';
 import { NotificationService } from '../../services/notification.service';
@@ -21,7 +20,6 @@ export class TelemetryNotificationComponent implements OnInit, OnDestroy {
   constructor(
     private mgrModuleService: MgrModuleService,
     private authStorageService: AuthStorageService,
-    private userService: UserService,
     private notificationService: NotificationService,
     private telemetryNotificationService: TelemetryNotificationService,
     private i18n: I18n
@@ -33,16 +31,14 @@ export class TelemetryNotificationComponent implements OnInit, OnDestroy {
     });
 
     if (!this.isNotificationHidden()) {
-      const username = this.authStorageService.getUsername();
-      this.userService.get(username).subscribe((user: UserFormModel) => {
-        if (user.roles.includes('administrator')) {
-          this.mgrModuleService.getConfig('telemetry').subscribe((options) => {
-            if (!options['enabled']) {
-              this.telemetryNotificationService.setVisibility(true);
-            }
-          });
-        }
-      });
+      const configOptPermissions = this.authStorageService.getPermissions().configOpt;
+      if (_.every(Object.values(configOptPermissions))) {
+        this.mgrModuleService.getConfig('telemetry').subscribe((options) => {
+          if (!options['enabled']) {
+            this.telemetryNotificationService.setVisibility(true);
+          }
+        });
+      }
     }
   }
 
@@ -61,8 +57,7 @@ export class TelemetryNotificationComponent implements OnInit, OnDestroy {
       NotificationType.success,
       this.i18n('Telemetry activation reminder muted'),
       this.i18n(
-        'You can activate the module on the Telemetry configuration ' +
-          'page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time.'
+        'You can activate the module on the Telemetry configuration page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time.'
       )
     );
   }
index 2593a59b2bea74643c518cd4f4bad704c0445cce..e7b2b73ee6a5c9a79e28e07f1c231d2d5e24aced 100644 (file)
@@ -163,12 +163,12 @@ describe('TableActionsComponent', () => {
   });
 
   describe('useDisableDesc', () => {
-    it('should return a description if disableDesc is set for action', () => {
+    it('should return a description if disable method returns a string', () => {
       const deleteWithDescAction: CdTableAction = {
         permission: 'delete',
         icon: 'fa-times',
         canBePrimary: (selection: CdTableSelection) => selection.hasSelection,
-        disableDesc: () => {
+        disable: () => {
           return 'Delete action disabled description';
         },
         name: 'DeleteDesc'
@@ -179,7 +179,7 @@ describe('TableActionsComponent', () => {
       );
     });
 
-    it('should return no description if disableDesc is not set for action', () => {
+    it('should return no description if disable does not return string', () => {
       expect(component.useDisableDesc(deleteAction)).toBeUndefined();
     });
   });
index 334f5563eeb5f770e8f5f0fe0e9b895970544f00..baf5761510fc7b5cb366d01a7d00b033c7efb9b6 100644 (file)
@@ -148,6 +148,11 @@ export class TableActionsComponent implements OnInit {
   }
 
   useDisableDesc(action: CdTableAction) {
-    return action.disableDesc && action.disableDesc(this.selection);
+    if (action.disable) {
+      const result = action.disable(this.selection);
+      return _.isString(result) ? result : undefined;
+    }
+
+    return undefined;
   }
 }
index e50bffcd302ad96c53556f70de5d4fe48d6f014f..f8617711ba400954860f20be55a3118b7fa6f4a6 100644 (file)
@@ -92,7 +92,8 @@
     <!-- end search -->
 
     <!-- pagination limit -->
-    <div class="input-group dataTables_paginate">
+    <div class="input-group dataTables_paginate"
+         *ngIf="limit">
       <input class="form-control"
              type="number"
              min="1"
     <!-- show hide columns -->
     <div class="widget-toolbar">
       <div dropdown
-           [autoClose]="false"
+           [insideClick]="true"
            class="dropdown tc_menuitem tc_menuitem_cluster">
         <a dropdownToggle
            class="btn btn-light dropdown-toggle tc_columnBtn"
index 9efb7c91915951901b31d1c887291347cd1c19c2..fe031df6a99b65a0efae1932f111f9c9733a71f5 100644 (file)
@@ -11,6 +11,7 @@ import {
   OnInit,
   Output,
   PipeTransform,
+  SimpleChanges,
   TemplateRef,
   ViewChild
 } from '@angular/core';
@@ -571,8 +572,10 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
     return _.isEmpty(css) ? undefined : css;
   }
 
-  ngOnChanges() {
-    this.useData();
+  ngOnChanges(changes: SimpleChanges) {
+    if (changes.data && changes.data.currentValue) {
+      this.useData();
+    }
   }
 
   setLimit(e: any) {
@@ -681,7 +684,11 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
   }
 
   onSelect($event: any) {
-    this.selection.selected = $event['selected'];
+    // Ensure we do not process DOM 'select' events.
+    // https://github.com/swimlane/ngx-datatable/issues/899
+    if (_.has($event, 'selected')) {
+      this.selection.selected = $event['selected'];
+    }
     this.updateSelection.emit(_.clone(this.selection));
   }
 
index 37fca45264e6572291498f99166c9006b8bb6c7d..28659705a8319baf24b2d93124f1d007d05dfc66 100644 (file)
@@ -1,18 +1,69 @@
 import { TestBed } from '@angular/core/testing';
 
 import { I18n } from '@ngx-translate/i18n-polyfill';
+import * as BrowserDetect from 'detect-browser';
+import { ToastrService } from 'ngx-toastr';
 
 import { configureTestBed, i18nProviders } from '../../../testing/unit-test-helper';
 import { Copy2ClipboardButtonDirective } from './copy2clipboard-button.directive';
 
 describe('Copy2clipboardButtonDirective', () => {
+  let directive: Copy2ClipboardButtonDirective;
+
   configureTestBed({
-    providers: [i18nProviders]
+    providers: [
+      i18nProviders,
+      {
+        provide: ToastrService,
+        useValue: {
+          error: () => true,
+          success: () => true
+        }
+      }
+    ]
   });
 
   it('should create an instance', () => {
     const i18n = TestBed.get(I18n);
-    const directive = new Copy2ClipboardButtonDirective(null, null, null, i18n);
+    directive = new Copy2ClipboardButtonDirective(null, null, null, i18n);
     expect(directive).toBeTruthy();
   });
+
+  describe('test onClick behaviours', () => {
+    let toastrService: ToastrService;
+    let queryFn: jasmine.Spy;
+    let writeTextFn: jasmine.Spy;
+
+    beforeEach(() => {
+      const i18n = TestBed.get(I18n);
+      toastrService = TestBed.get(ToastrService);
+      directive = new Copy2ClipboardButtonDirective(null, null, toastrService, i18n);
+      spyOn<any>(directive, 'getText').and.returnValue('foo');
+      Object.assign(navigator, {
+        permissions: { query: jest.fn() },
+        clipboard: {
+          writeText: jest.fn()
+        }
+      });
+      queryFn = spyOn(navigator.permissions, 'query');
+    });
+
+    it('should not call permissions API', () => {
+      spyOn(BrowserDetect, 'detect').and.returnValue({ name: 'firefox' });
+      writeTextFn = spyOn(navigator.clipboard, 'writeText').and.returnValue(
+        new Promise<void>((resolve, _) => {
+          resolve();
+        })
+      );
+      directive.onClick();
+      expect(queryFn).not.toHaveBeenCalled();
+      expect(writeTextFn).toHaveBeenCalledWith('foo');
+    });
+
+    it('should call permissions API', () => {
+      spyOn(BrowserDetect, 'detect').and.returnValue({ name: 'chrome' });
+      directive.onClick();
+      expect(queryFn).toHaveBeenCalled();
+    });
+  });
 });
index 91d76151950822095ef88cefb1d186d1a43da8bb..be84809b4c755c165130a1bd9f57dcfa0de91b60 100644 (file)
@@ -1,6 +1,7 @@
 import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';
 import { I18n } from '@ngx-translate/i18n-polyfill';
 
+import { detect } from 'detect-browser';
 import { ToastrService } from 'ngx-toastr';
 
 @Directive({
@@ -25,24 +26,34 @@ export class Copy2ClipboardButtonDirective implements OnInit {
     this.renderer.appendChild(this.elementRef.nativeElement, iElement);
   }
 
-  private getInputElement() {
-    return document.getElementById(this.cdCopy2ClipboardButton) as HTMLInputElement;
+  private getText(): string {
+    const element = document.getElementById(this.cdCopy2ClipboardButton) as HTMLInputElement;
+    return element.value;
   }
 
   @HostListener('click')
   onClick() {
     try {
-      // Checking if we have the clipboard-write permission
-      navigator.permissions
-        .query({ name: 'clipboard-write' as PermissionName })
-        .then((result: any) => {
-          if (result.state === 'granted' || result.state === 'prompt') {
-            // Copy text to clipboard.
-            navigator.clipboard.writeText(this.getInputElement().value);
-          }
-        });
-      this.toastr.success('Copied text to the clipboard successfully.');
-    } catch (err) {
+      const browser = detect();
+      const text = this.getText();
+      const toastrFn = () => {
+        this.toastr.success('Copied text to the clipboard successfully.');
+      };
+      if (['firefox', 'ie', 'ios', 'safari'].includes(browser.name)) {
+        // Various browsers do not support the `Permissions API`.
+        // https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API#Browser_compatibility
+        navigator.clipboard.writeText(text).then(() => toastrFn());
+      } else {
+        // Checking if we have the clipboard-write permission
+        navigator.permissions
+          .query({ name: 'clipboard-write' as PermissionName })
+          .then((result: any) => {
+            if (result.state === 'granted' || result.state === 'prompt') {
+              navigator.clipboard.writeText(text).then(() => toastrFn());
+            }
+          });
+      }
+    } catch (_) {
       this.toastr.error('Failed to copy text to the clipboard.');
     }
   }
index 1ed763052b2e8547a93294d9e1c92bb987e1cdea..8724ce478888229314cc21bab1b5c6315789f174 100644 (file)
@@ -4,6 +4,8 @@ import { AutofocusDirective } from './autofocus.directive';
 import { Copy2ClipboardButtonDirective } from './copy2clipboard-button.directive';
 import { DimlessBinaryPerSecondDirective } from './dimless-binary-per-second.directive';
 import { DimlessBinaryDirective } from './dimless-binary.directive';
+import { FormInputDisableDirective } from './form-input-disable.directive';
+import { FormScopeDirective } from './form-scope.directive';
 import { IopsDirective } from './iops.directive';
 import { MillisecondsDirective } from './milliseconds.directive';
 import { PasswordButtonDirective } from './password-button.directive';
@@ -19,7 +21,9 @@ import { TrimDirective } from './trim.directive';
     PasswordButtonDirective,
     TrimDirective,
     MillisecondsDirective,
-    IopsDirective
+    IopsDirective,
+    FormInputDisableDirective,
+    FormScopeDirective
   ],
   exports: [
     AutofocusDirective,
@@ -29,8 +33,9 @@ import { TrimDirective } from './trim.directive';
     PasswordButtonDirective,
     TrimDirective,
     MillisecondsDirective,
-    IopsDirective
-  ],
-  providers: []
+    IopsDirective,
+    FormInputDisableDirective,
+    FormScopeDirective
+  ]
 })
 export class DirectivesModule {}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.spec.ts
new file mode 100644 (file)
index 0000000..c526353
--- /dev/null
@@ -0,0 +1,75 @@
+import { Component, DebugElement, Input } from '@angular/core';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+
+import { configureTestBed } from '../../../testing/unit-test-helper';
+import { Permission } from '../models/permissions';
+import { AuthStorageService } from '../services/auth-storage.service';
+import { FormInputDisableDirective } from './form-input-disable.directive';
+import { FormScopeDirective } from './form-scope.directive';
+
+@Component({
+  template: `
+    <form cdFormScope="osd">
+      <input type="checkbox" />
+    </form>
+  `
+})
+export class FormDisableComponent {}
+
+class MockFormScopeDirective {
+  @Input() cdFormScope = 'osd';
+}
+
+describe('FormInputDisableDirective', () => {
+  let fakePermissions: Permission;
+  let authStorageService: AuthStorageService;
+  let directive: FormInputDisableDirective;
+  let fixture: ComponentFixture<FormDisableComponent>;
+  let inputElement: DebugElement;
+  configureTestBed({
+    declarations: [FormScopeDirective, FormInputDisableDirective, FormDisableComponent]
+  });
+
+  beforeEach(() => {
+    directive = new FormInputDisableDirective(
+      new MockFormScopeDirective(),
+      new AuthStorageService(),
+      null
+    );
+
+    fakePermissions = {
+      create: false,
+      update: false,
+      read: false,
+      delete: false
+    };
+    authStorageService = TestBed.get(AuthStorageService);
+    spyOn(authStorageService, 'getPermissions').and.callFake(() => ({
+      osd: fakePermissions
+    }));
+
+    fixture = TestBed.createComponent(FormDisableComponent);
+    inputElement = fixture.debugElement.query(By.css('input'));
+  });
+
+  afterEach(() => {
+    directive = null;
+  });
+
+  it('should create an instance', () => {
+    expect(directive).toBeTruthy();
+  });
+
+  it('should disable the input if update permission is false', () => {
+    fixture.detectChanges();
+    expect(inputElement.nativeElement.disabled).toBeTruthy();
+  });
+
+  it('should not disable the input if update permission is true', () => {
+    fakePermissions.update = true;
+    fakePermissions.read = false;
+    fixture.detectChanges();
+    expect(inputElement.nativeElement.disabled).toBeFalsy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.ts
new file mode 100644 (file)
index 0000000..4fcfe65
--- /dev/null
@@ -0,0 +1,30 @@
+import { AfterViewInit, Directive, ElementRef, Optional } from '@angular/core';
+
+import { Permissions } from '../models/permissions';
+import { AuthStorageService } from '../services/auth-storage.service';
+import { FormScopeDirective } from './form-scope.directive';
+
+@Directive({
+  selector:
+    'input:not([cdNoFormInputDisable]), select:not([cdNoFormInputDisable]), [cdFormInputDisable]'
+})
+export class FormInputDisableDirective implements AfterViewInit {
+  permissions: Permissions;
+  service_name: keyof Permissions;
+
+  constructor(
+    @Optional() private formScope: FormScopeDirective,
+    private authStorageService: AuthStorageService,
+    private elementRef: ElementRef
+  ) {}
+
+  ngAfterViewInit() {
+    this.permissions = this.authStorageService.getPermissions();
+    if (this.formScope !== null) {
+      this.service_name = this.formScope.cdFormScope;
+    }
+    if (this.service_name && !this.permissions[this.service_name].update) {
+      this.elementRef.nativeElement.disabled = true;
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.spec.ts
new file mode 100644 (file)
index 0000000..2cf882e
--- /dev/null
@@ -0,0 +1,8 @@
+import { FormScopeDirective } from './form-scope.directive';
+
+describe('UpdateOnlyDirective', () => {
+  it('should create an instance', () => {
+    const directive = new FormScopeDirective();
+    expect(directive).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.ts
new file mode 100644 (file)
index 0000000..8ae3f84
--- /dev/null
@@ -0,0 +1,8 @@
+import { Directive, Input } from '@angular/core';
+
+@Directive({
+  selector: '[cdFormScope]'
+})
+export class FormScopeDirective {
+  @Input() cdFormScope: any;
+}
index 9af10625ae65bd3226dfeec3ff4cf6b5cee5660e..70f06e506c365637d645eb8a7f6e3c835ff8520c 100644 (file)
@@ -19,17 +19,15 @@ export class CdTableAction {
   // The font awesome icon that will be used
   icon: string;
 
-  // You can define the condition to disable the action.
-  // By default all 'update' and 'delete' actions will only be enabled
-  // if one selection is made and no task is running on the selected item.
-  disable?: (_: CdTableSelection) => boolean;
-
   /**
+   * You can define the condition to disable the action.
+   * By default all 'update' and 'delete' actions will only be enabled
+   * if one selection is made and no task is running on the selected item.`
+   *
    * In some cases you might want to give the user a hint why a button is
-   * disabled. The specified message will be shown to the user as a button
-   * tooltip.
-   */
-  disableDesc?: (_: CdTableSelection) => string | undefined;
+   * disabled. This is achieved by returning a string.
+   * */
+  disable?: (_: CdTableSelection) => boolean | string;
 
   /**
    * Defines if the button can become 'primary' (displayed as button and not
index bb883e43ec0126abc01e14a55f3d529062eaa62e..212d10c92f173f6c2f7422ccc443d0269903b50d 100644 (file)
@@ -9,10 +9,12 @@ $fa-font-path: '~fork-awesome/fonts';
 $font-family-icon: 'ForkAwesome';
 
 // Bootstrap
+$warning-dark: #fd7e14;
 $theme-colors: (
   'primary': $color-primary,
   'secondary': $color-accent,
-  'dark': $color-mild-gray
+  'dark': $color-mild-gray,
+  'warning-dark': $warning-dark
 );
 
 $font-family-sans-serif: 'Helvetica Neue', Helvetica, Arial, 'Noto Sans', sans-serif,
@@ -22,6 +24,16 @@ $badge-font-size: 1rem;
 $form-feedback-font-size: 100%;
 $popover-max-width: 350px;
 
+// https://getbootstrap.com/docs/4.5/layout/grid/#variables
+$grid-breakpoints: (
+  xs: 0,
+  sm: 576px,
+  md: 768px,
+  lg: 992px,
+  xl: 1200px,
+  2xl: 1450px
+);
+
 @import '~bootstrap/scss/bootstrap';
 @import '~fork-awesome/scss/fork-awesome';
 @import 'app/ceph/dashboard/info-card/info-card-popover.scss';
@@ -62,23 +74,6 @@ body {
   height: 100%;
   font-size: 12px;
 }
-h1 {
-  letter-spacing: -1px;
-  font-size: 2em;
-}
-h2 {
-  letter-spacing: -1px;
-  font-size: 1.833em;
-}
-h3 {
-  display: block;
-  font-size: 1.583em;
-  font-weight: 400;
-}
-h4 {
-  font-size: 1.5em;
-  line-height: normal;
-}
 option {
   font-weight: normal;
   font-style: normal;
@@ -264,9 +259,6 @@ uib-accordion .card-title,
 .card-header {
   font-size: 1.3em;
 }
-.card-body h2:first-child {
-  margin-top: 0;
-}
 .disabled {
   pointer-events: none;
 }
index 83ea59c76009bda8a4c141fe79954ac9ec6c0954..5932596f82eb1f1629d721b6dc98bf884a0500d6 100644 (file)
@@ -9,6 +9,10 @@ cd-info-card {
     @extend .pb-2;
 
     .card-body {
+      .card-title {
+        @extend .pl-2;
+      }
+
       .card-text {
         @extend .pt-2;
       }
@@ -61,6 +65,21 @@ cd-health {
     &.cd-capacity-card {
       @extend .col-xl;
     }
+
+    &.cd-capacity-card {
+      @extend .col-lg-3;
+    }
+
+    &.cd-performance-card {
+      @extend .col-lg-6;
+    }
+
+    &.cd-chart-card {
+      @extend .col-md-12;
+      @extend .col-lg-6;
+      @extend .col-xl-4;
+      @extend .col-2xl-3;
+    }
   }
 }
 
index 1b4382ca1a0506d4f4d924e585b978c1a6b9eb46..cbae2bb1fd5afb724a725aa06f3280482e6fb7ed 100644 (file)
@@ -192,3 +192,18 @@ $color-rgw-icon: $color-blue-gray !default;
     }
   }
 }
+
+// This was backported from _bootstrap-defaults.scss in master
+$health-chart-colors: (
+  'red': #c9190b,
+  'blue': #06c,
+  'orange': #ef9234,
+  'yellow': #f6d173,
+  'magenta': #009596,
+  'green': #7cc674,
+  'gray': #ededed,
+  'light-blue': #519de9,
+  'light-yellow': #f9e0a2,
+  'cyan': #73c5c5,
+  'purple': #3c3d99
+);
index c0c2d8cde431a191329c9a214fcd6248cc3eb0c3..6057802ebf0a5520e7d437b8837a86075c09f261 100644 (file)
@@ -9,6 +9,8 @@ import errno
 import logging
 import os
 import socket
+import ssl
+import sys
 import tempfile
 import threading
 import time
@@ -97,8 +99,8 @@ class CherryPyConfig(object):
         """
         server_addr = self.get_localized_module_option(  # type: ignore
             'server_addr', get_default_addr())
-        ssl = self.get_localized_module_option('ssl', True)  # type: ignore
-        if not ssl:
+        use_ssl = self.get_localized_module_option('ssl', True)  # type: ignore
+        if not use_ssl:
             server_port = self.get_localized_module_option('server_port', 8080)  # type: ignore
         else:
             server_port = self.get_localized_module_option('ssl_server_port', 8443)  # type: ignore
@@ -108,7 +110,7 @@ class CherryPyConfig(object):
                 'no server_addr configured; '
                 'try "ceph config set mgr mgr/{}/{}/server_addr <ip>"'
                 .format(self.module_name, self.get_mgr_id()))  # type: ignore
-        self.log.info('server: ssl=%s host=%s port=%d', 'yes' if ssl else 'no',  # type: ignore
+        self.log.info('server: ssl=%s host=%s port=%d', 'yes' if use_ssl else 'no',  # type: ignore
                       server_addr, server_port)
 
         # Initialize custom handlers.
@@ -140,11 +142,11 @@ class CherryPyConfig(object):
                 'application/javascript',
             ],
             'tools.json_in.on': True,
-            'tools.json_in.force': False,
+            'tools.json_in.force': True,
             'tools.plugin_hooks_filter_request.on': True,
         }
 
-        if ssl:
+        if use_ssl:
             # SSL initialization
             cert = self.get_store("crt")  # type: ignore
             if cert is not None:
@@ -166,9 +168,18 @@ class CherryPyConfig(object):
 
             verify_tls_files(cert_fname, pkey_fname)
 
+            # Create custom SSL context to disable TLS 1.0 and 1.1.
+            context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
+            context.load_cert_chain(cert_fname, pkey_fname)
+            if sys.version_info >= (3, 7):
+                context.minimum_version = ssl.TLSVersion.TLSv1_2
+            else:
+                context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
+
             config['server.ssl_module'] = 'builtin'
             config['server.ssl_certificate'] = cert_fname
             config['server.ssl_private_key'] = pkey_fname
+            config['server.ssl_context'] = context
 
         self.update_cherrypy_config(config)
 
@@ -176,7 +187,7 @@ class CherryPyConfig(object):
             'url_prefix', default=''))
 
         uri = "{0}://{1}:{2}{3}/".format(
-            'https' if ssl else 'http',
+            'https' if use_ssl else 'http',
             socket.getfqdn(server_addr if server_addr != '::' else ''),
             server_port,
             self.url_prefix
index e9144db406eddff2234b3bcd8adabb63690dbf71..2c963e25f4b3bf190bb9471174388c60ff5b38a7 100644 (file)
@@ -3,16 +3,20 @@
 from __future__ import absolute_import
 
 import logging
+import os
 import re
+from typing import Any, Dict, List, Optional, cast
 
-from orchestrator import OrchestratorError
+from ceph.deployment.service_spec import NFSServiceSpec
+from orchestrator import DaemonDescription, OrchestratorError, ServiceDescription
+
+from .. import mgr
+from ..exceptions import DashboardException
+from ..settings import Settings
 from .cephfs import CephFS
 from .cephx import CephX
 from .orchestrator import OrchClient
 from .rgw_client import RgwClient, RequestException, NoCredentialsException
-from .. import mgr
-from ..settings import Settings
-from ..exceptions import DashboardException
 
 
 logger = logging.getLogger('ganesha')
@@ -26,13 +30,19 @@ class NFSException(DashboardException):
 class Ganesha(object):
     @classmethod
     def _get_clusters_locations(cls):
-        result = {}  # type: ignore
+        # pylint: disable=too-many-branches
+        # Get Orchestrator clusters
+        orch_result = cls._get_orch_clusters_locations()
+
+        # Get user-defined clusters
         location_list_str = Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE
-        if not location_list_str:
-            raise NFSException("Ganesha config location is not configured. "
+        if not orch_result and not location_list_str:
+            raise NFSException("NFS-Ganesha cluster is not detected. "
                                "Please set the GANESHA_RADOS_POOL_NAMESPACE "
-                               "setting.")
-        location_list = [l.strip() for l in location_list_str.split(",")]
+                               "setting or deploy an NFS-Ganesha cluster with the Orchestrator.")
+        result = {}  # type: ignore
+        location_list = [loc.strip() for loc in location_list_str.split(
+            ",")] if location_list_str else []
         for location in location_list:
             cluster = None
             pool = None
@@ -60,42 +70,54 @@ class Ganesha(object):
                 else:
                     pool, namespace = pool_nm.split('/', 1)
 
+            if cluster in orch_result:
+                # cephadm might have set same cluster settings, ask the user to remove it.
+                raise NFSException(
+                    'Detected a conflicting NFS-Ganesha cluster name `{0}`. There exists an '
+                    'NFS-Ganesha cluster called `{0}` that is deployed by the Orchestrator. '
+                    'Please remove or rename the cluster from the GANESHA_RADOS_POOL_NAMESPACE '
+                    'setting.'.format(cluster))
+
             if cluster in result:
                 raise NFSException("Duplicate Ganesha cluster definition in "
                                    "the setting: {}".format(location_list_str))
-            result[cluster] = (pool, namespace)
+            result[cluster] = {
+                'pool': pool,
+                'namespace': namespace,
+                'type': ClusterType.USER,
+                'daemon_conf': None
+            }
+        return {**orch_result, **result}
 
-        return result
+    @classmethod
+    def _get_orch_clusters_locations(cls):
+        orch_result = {}  # type: ignore
+        services = cls._get_orch_nfs_services()
+        for service in services:
+            spec = cast(NFSServiceSpec, service.spec)
+            try:
+                orch_result[spec.service_id] = {
+                    'pool': spec.pool,
+                    'namespace': spec.namespace,
+                    'type': ClusterType.ORCHESTRATOR,
+                    'daemon_conf': spec.rados_config_name()
+                }
+            except AttributeError as ex:
+                logger.warning('Error when getting NFS service from the Orchestrator. %s', str(ex))
+                continue
+        return orch_result
 
     @classmethod
     def get_ganesha_clusters(cls):
         return [cluster_id for cluster_id in cls._get_clusters_locations()]
 
     @staticmethod
-    def _get_orch_nfs_instances():
+    def _get_orch_nfs_services() -> List[ServiceDescription]:
         try:
-            return OrchClient.instance().services.list("nfs")
+            return OrchClient.instance().services.list('nfs')
         except (RuntimeError, OrchestratorError, ImportError):
             return []
 
-    @classmethod
-    def get_daemons_status(cls):
-        instances = cls._get_orch_nfs_instances()
-        if not instances:
-            return None
-
-        result = {}  # type: ignore
-        for instance in instances:
-            if instance.service is None:
-                instance.service = "_default_"
-            if instance.service not in result:
-                result[instance.service] = {}
-            result[instance.service][instance.hostname] = {
-                'status': instance.status,
-                'desc': instance.status_desc,
-            }
-        return result
-
     @classmethod
     def parse_rados_url(cls, rados_url):
         if not rados_url.startswith("rados://"):
@@ -117,38 +139,13 @@ class Ganesha(object):
         return "rados://{}/{}".format(pool, obj)
 
     @classmethod
-    def get_pool_and_namespace(cls, cluster_id):
-        instances = cls._get_orch_nfs_instances()
-        # we assume that every instance stores there configuration in the
-        # same RADOS pool/namespace
-        if instances:
-            location = instances[0].rados_config_location
-            pool, ns, _ = cls.parse_rados_url(location)
-            return pool, ns
+    def get_cluster(cls, cluster_id):
         locations = cls._get_clusters_locations()
         if cluster_id not in locations:
             raise NFSException("Cluster not found: cluster_id={}"
                                .format(cluster_id))
         return locations[cluster_id]
 
-    @classmethod
-    def reload_daemons(cls, cluster_id, daemons_id):
-        logger.debug("issued reload of daemons: %s", daemons_id)
-        if not OrchClient.instance().available():
-            logger.debug("orchestrator not available")
-            return
-        reload_list = []
-        daemons = cls.get_daemons_status()
-        if cluster_id not in daemons:
-            raise NFSException("Cluster not found: cluster_id={}"
-                               .format(cluster_id))
-        for daemon_id in daemons_id:
-            if daemon_id not in daemons[cluster_id]:
-                continue
-            if daemons[cluster_id][daemon_id] == 1:
-                reload_list.append((cluster_id, daemon_id))
-        OrchClient.instance().reload_service("nfs", reload_list)
-
     @classmethod
     def fsals_available(cls):
         result = []
@@ -491,6 +488,8 @@ class CephFSFSal(FSal):
 
     def create_path(self, path):
         cfs = CephFS(self.fs_name)
+        if path == os.sep:
+            return
         cfs.mk_dirs(path)
 
     @classmethod
@@ -593,13 +592,8 @@ class Export(object):
         self.transports = set(transports)
         self.clients = clients
 
-    def validate(self, daemons_list):
+    def validate(self):
         # pylint: disable=R0912
-        for daemon_id in self.daemons:
-            if daemon_id not in daemons_list:
-                raise NFSException("Daemon '{}' does not exist"
-                                   .format(daemon_id))
-
         if not self.fsal.validate_path(self.path):
             raise NFSException("Export path ({}) is invalid.".format(self.path))
 
@@ -749,13 +743,24 @@ class Export(object):
         }
 
 
+class ClusterType(object):
+
+    # Ganesha clusters deployed by the Orchestrator.
+    ORCHESTRATOR = 'orchestrator'
+
+    # Ganesha clusters deployed manually by the user. Specified by using the
+    # GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE setting.
+    USER = 'user'
+
+
 class GaneshaConf(object):
     # pylint: disable=R0902
 
-    def __init__(self, cluster_id, rados_pool, rados_namespace):
+    def __init__(self, cluster_id, rados_pool, rados_namespace, daemon_confs=None):
         self.cluster_id = cluster_id
         self.rados_pool = rados_pool
         self.rados_namespace = rados_namespace
+        self.daemon_confs = daemon_confs if daemon_confs is not None else []
         self.export_conf_blocks = []  # type: ignore
         self.daemons_conf_blocks = {}  # type: ignore
         self._defaults = {}
@@ -776,39 +781,43 @@ class GaneshaConf(object):
             self.exports[export.export_id] = export
 
         # link daemons to exports
-        for daemon_id, daemon_blocks in self.daemons_conf_blocks.items():
-            for block in daemon_blocks:
-                if block['block_name'] == "%url":
-                    rados_url = block['value']
-                    _, _, obj = Ganesha.parse_rados_url(rados_url)
-                    if obj.startswith("export-"):
-                        export_id = int(obj[obj.find('-')+1:])
-                        self.exports[export_id].daemons.add(daemon_id)
+        self._link_daemons_to_exports()
+
+    def _link_daemons_to_exports(self):
+        raise NotImplementedError()
 
     @classmethod
     def instance(cls, cluster_id):
-        pool, ns = Ganesha.get_pool_and_namespace(cluster_id)
-        return cls(cluster_id, pool, ns)
+        cluster = Ganesha.get_cluster(cluster_id)
+        if cluster['type'] == ClusterType.ORCHESTRATOR:
+            return GaneshaConfOrchestrator(cluster_id, cluster['pool'], cluster['namespace'],
+                                           [cluster['daemon_conf']])
+        if cluster['type'] == ClusterType.USER:
+            return GaneshaConfUser(cluster_id, cluster['pool'], cluster['namespace'])
+        raise NFSException('Unknown cluster type `{}` for cluster `{}`'.format(
+            cluster['type'], cluster_id))
 
     def _read_raw_config(self):
+
+        def _read_rados_obj(_obj):
+            size, _ = _obj.stat()
+            return _obj.read(size).decode("utf-8")
+
         with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
             if self.rados_namespace:
                 ioctx.set_namespace(self.rados_namespace)
             objs = ioctx.list_objects()
             for obj in objs:
                 if obj.key.startswith("export-"):
-                    size, _ = obj.stat()
-                    raw_config = obj.read(size)
-                    raw_config = raw_config.decode("utf-8")
+                    raw_config = _read_rados_obj(obj)
                     logger.debug("read export configuration from rados "
                                  "object %s/%s/%s:\n%s", self.rados_pool,
                                  self.rados_namespace, obj.key, raw_config)
                     self.export_conf_blocks.extend(
                         GaneshaConfParser(raw_config).parse())
-                elif obj.key.startswith("conf-"):
-                    size, _ = obj.stat()
-                    raw_config = obj.read(size)
-                    raw_config = raw_config.decode("utf-8")
+                elif not self.daemon_confs and obj.key.startswith("conf-"):
+                    # Read all `conf-xxx` for daemon configs.
+                    raw_config = _read_rados_obj(obj)
                     logger.debug("read daemon configuration from rados "
                                  "object %s/%s/%s:\n%s", self.rados_pool,
                                  self.rados_namespace, obj.key, raw_config)
@@ -816,6 +825,17 @@ class GaneshaConf(object):
                     self.daemons_conf_blocks[obj.key[idx+1:]] = \
                         GaneshaConfParser(raw_config).parse()
 
+            if self.daemon_confs:
+                # When daemon configs are provided.
+                for conf in self.daemon_confs:
+                    size, _ = ioctx.stat(conf)
+                    raw_config = ioctx.read(conf, size).decode("utf-8")
+                    logger.debug("read daemon configuration from rados "
+                                 "object %s/%s/%s:\n%s", self.rados_pool,
+                                 self.rados_namespace, conf, raw_config)
+                    self.daemons_conf_blocks[conf] = \
+                        GaneshaConfParser(raw_config).parse()
+
     def _write_raw_config(self, conf_block, obj):
         raw_config = GaneshaConfParser.write_conf(conf_block)
         with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
@@ -873,8 +893,8 @@ class GaneshaConf(object):
                 path = path[:-1]
         return path
 
-    def validate(self, export):
-        export.validate(self.list_daemons())
+    def validate(self, export: Export):
+        export.validate()
 
         if 4 in export.protocols:  # NFSv4 protocol
             len_prefix = 1
@@ -925,20 +945,7 @@ class GaneshaConf(object):
         return nid
 
     def _persist_daemon_configuration(self):
-        daemon_map = {}  # type: ignore
-        for daemon_id in self.list_daemons():
-            daemon_map[daemon_id] = []
-
-        for _, ex in self.exports.items():
-            for daemon in ex.daemons:
-                daemon_map[daemon].append({
-                    'block_name': "%url",
-                    'value': Ganesha.make_rados_url(
-                        self.rados_pool, self.rados_namespace,
-                        "export-{}".format(ex.export_id))
-                })
-        for daemon_id, conf_blocks in daemon_map.items():
-            self._write_raw_config(conf_blocks, "conf-{}".format(daemon_id))
+        raise NotImplementedError()
 
     def _save_export(self, export):
         self.validate(export)
@@ -991,8 +998,11 @@ class GaneshaConf(object):
             return self.exports[export_id]
         return None
 
-    def list_daemons(self):
-        return [daemon_id for daemon_id in self.daemons_conf_blocks]
+    def list_daemons(self) -> List[Dict[str, Any]]:
+        raise NotImplementedError()
+
+    def list_daemon_confs(self):
+        return self.daemons_conf_blocks.keys()
 
     def reload_daemons(self, daemons):
         with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
@@ -1000,3 +1010,111 @@ class GaneshaConf(object):
                 ioctx.set_namespace(self.rados_namespace)
             for daemon_id in daemons:
                 ioctx.notify("conf-{}".format(daemon_id))
+
+
+class GaneshaConfOrchestrator(GaneshaConf):
+    @classmethod
+    def _get_orch_nfs_instances(cls,
+                                service_name: Optional[str] = None) -> List[DaemonDescription]:
+        try:
+            return OrchClient.instance().services.\
+                list_daemons(service_name=service_name, daemon_type="nfs")
+        except (RuntimeError, OrchestratorError, ImportError):
+            return []
+
+    def _link_daemons_to_exports(self):
+        instances = self._get_orch_nfs_instances('nfs.{}'.format(self.cluster_id))
+        daemon_ids = {instance.daemon_id for instance in instances}
+        for _, daemon_blocks in self.daemons_conf_blocks.items():
+            for block in daemon_blocks:
+                if block['block_name'] == "%url":
+                    rados_url = block['value']
+                    _, _, obj = Ganesha.parse_rados_url(rados_url)
+                    if obj.startswith("export-"):
+                        export_id = int(obj[obj.find('-')+1:])
+                        self.exports[export_id].daemons.update(daemon_ids)
+
+    def validate(self, export: Export):
+        daemons_list = {d['daemon_id'] for d in self.list_daemons()}
+        if export.daemons and set(export.daemons) != daemons_list:
+            raise NFSException('Export should be linked to all daemons.')
+        super().validate(export)
+
+    def _persist_daemon_configuration(self):
+        daemon_map = {}  # type: ignore
+        for daemon_id in self.list_daemon_confs():
+            daemon_map[daemon_id] = []
+
+        for daemon_id in self.list_daemon_confs():
+            for _, ex in self.exports.items():
+                if ex.daemons:
+                    daemon_map[daemon_id].append({
+                        'block_name': "%url",
+                        'value': Ganesha.make_rados_url(
+                            self.rados_pool, self.rados_namespace,
+                            "export-{}".format(ex.export_id))
+                    })
+        for daemon_id, conf_blocks in daemon_map.items():
+            self._write_raw_config(conf_blocks, daemon_id)
+
+    def list_daemons(self) -> List[Dict[str, Any]]:
+        instances = self._get_orch_nfs_instances('nfs.{}'.format(self.cluster_id))
+        return [{
+            'cluster_id': self.cluster_id,
+            'daemon_id': instance.daemon_id,
+            'cluster_type': ClusterType.ORCHESTRATOR,
+            'status': instance.status,
+            'status_desc': instance.status_desc
+        } for instance in instances]
+
+    def reload_daemons(self, daemons):
+        with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
+            if self.rados_namespace:
+                ioctx.set_namespace(self.rados_namespace)
+            for daemon_id in self.list_daemon_confs():
+                ioctx.notify(daemon_id)
+
+
+class GaneshaConfUser(GaneshaConf):
+
+    def _link_daemons_to_exports(self):
+        for daemon_id, daemon_blocks in self.daemons_conf_blocks.items():
+            for block in daemon_blocks:
+                if block['block_name'] == "%url":
+                    rados_url = block['value']
+                    _, _, obj = Ganesha.parse_rados_url(rados_url)
+                    if obj.startswith("export-"):
+                        export_id = int(obj[obj.find('-')+1:])
+                        self.exports[export_id].daemons.add(daemon_id)
+
+    def validate(self, export: Export):
+        daemons_list = [d['daemon_id'] for d in self.list_daemons()]
+        for daemon_id in export.daemons:
+            if daemon_id not in daemons_list:
+                raise NFSException("Daemon '{}' does not exist".format(daemon_id))
+        super().validate(export)
+
+    def _persist_daemon_configuration(self):
+        daemon_map = {}  # type: ignore
+        for daemon_id in self.list_daemon_confs():
+            daemon_map[daemon_id] = []
+
+        for _, ex in self.exports.items():
+            for daemon in ex.daemons:
+                daemon_map[daemon].append({
+                    'block_name': "%url",
+                    'value': Ganesha.make_rados_url(
+                        self.rados_pool, self.rados_namespace,
+                        "export-{}".format(ex.export_id))
+                })
+        for daemon_id, conf_blocks in daemon_map.items():
+            self._write_raw_config(conf_blocks, "conf-{}".format(daemon_id))
+
+    def list_daemons(self) -> List[Dict[str, Any]]:
+        return [{
+            'cluster_id': self.cluster_id,
+            'cluster_type': ClusterType.USER,
+            'daemon_id': daemon_id,
+            'status': 1,
+            'status_desc': 'running'
+        } for daemon_id in self.list_daemon_confs()]
index b82a51a3d4a68f62719bd0e156a67fbc1487fd0d..cde4f7a6b73e375cd04e7202ecdb19a75a389137 100644 (file)
@@ -205,6 +205,15 @@ class IscsiClient(RestClient):
             'disks': ','.join(image_ids)
         })
 
+    @RestClient.api_put('/api/hostgroup/{target_iqn}/{group_name}')
+    def update_group(self, target_iqn, group_name, members, image_ids, request=None):
+        logger.debug("iSCSI[%s] Updating group: %s/%s", self.gateway_name, target_iqn, group_name)
+        return request({
+            'action': 'remove',
+            'members': ','.join(members),
+            'disks': ','.join(image_ids)
+        })
+
     @RestClient.api_delete('/api/hostgroup/{target_iqn}/{group_name}')
     def delete_group(self, target_iqn, group_name, request=None):
         logger.debug("[%s] Deleting group: %s/%s", self.gateway_name, target_iqn, group_name)
index ea33b9a37ee28e56fb107ee946dffe9e20804396..a1f22a9a0673a6190c1e3fd81134a364986bb4d2 100644 (file)
@@ -84,8 +84,10 @@ class InventoryManager(ResourceManager):
 
 class ServiceManager(ResourceManager):
     @wait_api_result
-    def list(self, service_name: Optional[str] = None) -> List[ServiceDescription]:
-        return self.api.describe_service(None, service_name)
+    def list(self,
+             service_type: Optional[str] = None,
+             service_name: Optional[str] = None) -> List[ServiceDescription]:
+        return self.api.describe_service(service_type, service_name)
 
     @wait_api_result
     def get(self, service_name: str) -> ServiceDescription:
@@ -94,8 +96,11 @@ class ServiceManager(ResourceManager):
     @wait_api_result
     def list_daemons(self,
                      service_name: Optional[str] = None,
+                     daemon_type: Optional[str] = None,
                      hostname: Optional[str] = None) -> List[DaemonDescription]:
-        return self.api.list_daemons(service_name, host=hostname)
+        return self.api.list_daemons(service_name=service_name,
+                                     daemon_type=daemon_type,
+                                     host=hostname)
 
     def reload(self, service_type, service_ids):
         if not isinstance(service_ids, list):
index 5507eb68007574ac890498de0f625f70dd2f4ba2..63865051c95a009c73b05320a8c7cf14583c62a9 100644 (file)
@@ -12,11 +12,11 @@ from ..exceptions import DashboardException
 from ..settings import Settings, Options
 from ..rest_client import RestClient, RequestException
 from ..tools import build_url, dict_contains_path, json_str_to_object,\
-                    partial_dict, dict_get
+                    dict_get
 from .. import mgr
 
 try:
-    from typing import Dict, List, Optional  # pylint: disable=unused-import
+    from typing import Any, Dict, List, Optional  # pylint: disable=unused-import
 except ImportError:
     pass  # For typing only
 
@@ -31,9 +31,9 @@ class NoCredentialsException(RequestException):
             'the dashboard.')
 
 
-def _determine_rgw_addr():
+def _get_daemon_info() -> Dict[str, Any]:
     """
-    Get a RGW daemon to determine the configured host (IP address) and port.
+    Retrieve RGW daemon info from MGR.
     Note, the service id of the RGW daemons may differ depending on the setup.
     Example 1:
     {
@@ -86,6 +86,15 @@ def _determine_rgw_addr():
     if daemon is None:
         raise LookupError('No RGW daemon found')
 
+    return daemon
+
+
+def _determine_rgw_addr():
+    """
+    Parse RGW daemon info to determine the configured host (IP address) and port.
+    """
+    daemon = _get_daemon_info()
+
     addr = _parse_addr(daemon['addr'])
     port, ssl = _parse_frontend_config(daemon['metadata']['frontend_config#0'])
 
@@ -242,16 +251,6 @@ class RgwClient(RestClient):
     def _get_daemon_zone_info(self):  # type: () -> dict
         return json_str_to_object(self.proxy('GET', 'config?type=zone', None, None))
 
-    def _get_daemon_zonegroup_map(self):  # type: () -> List[dict]
-        zonegroups = json_str_to_object(
-            self.proxy('GET', 'config?type=zonegroup-map', None, None)
-        )
-
-        return [partial_dict(
-            zonegroup['val'],
-            ['api_name', 'zones']
-        ) for zonegroup in zonegroups['zonegroups']]
-
     def _get_realms_info(self):  # type: () -> dict
         return json_str_to_object(self.proxy('GET', 'realm?list', None, None))
 
@@ -335,6 +334,8 @@ class RgwClient(RestClient):
         # If user ID is not set, then try to get it via the RGW Admin Ops API.
         self.userid = userid if userid else self._get_user_id(self.admin_path)  # type: str
 
+        self._zonegroup_name: str = _get_daemon_info()['metadata']['zonegroup_name']
+
         logger.info("Created new connection: user=%s, host=%s, port=%s, ssl=%d, sslverify=%d",
                     self.userid, host, port, ssl, ssl_verify)
 
@@ -473,16 +474,6 @@ class RgwClient(RestClient):
 
     def get_placement_targets(self):  # type: () -> dict
         zone = self._get_daemon_zone_info()
-        # A zone without realm id can only belong to default zonegroup.
-        zonegroup_name = 'default'
-        if zone['realm_id']:
-            zonegroup_map = self._get_daemon_zonegroup_map()
-            for zonegroup in zonegroup_map:
-                for realm_zone in zonegroup['zones']:
-                    if realm_zone['id'] == zone['id']:
-                        zonegroup_name = zonegroup['api_name']
-                        break
-
         placement_targets = []  # type: List[Dict]
         for placement_pool in zone['placement_pools']:
             placement_targets.append(
@@ -492,7 +483,7 @@ class RgwClient(RestClient):
                 }
             )
 
-        return {'zonegroup': zonegroup_name, 'placement_targets': placement_targets}
+        return {'zonegroup': self._zonegroup_name, 'placement_targets': placement_targets}
 
     def get_realms(self):  # type: () -> List
         realms_info = self._get_realms_info()
index adab60d5190a524837f9aa40b22106a55b1ab6bb..534d9fb997001e8b9cb4e7ec9f7a6b0b96eb4961 100644 (file)
@@ -150,6 +150,11 @@ def handle_sso_command(cmd):
                              'dashboard sso setup saml2']:
         return -errno.ENOSYS, '', ''
 
+    if cmd['prefix'] == 'dashboard sso disable':
+        mgr.SSO_DB.protocol = ''
+        mgr.SSO_DB.save()
+        return 0, 'SSO is "disabled".', ''
+
     if not python_saml_imported:
         return -errno.EPERM, '', 'Required library not found: `python3-saml`'
 
@@ -163,11 +168,6 @@ def handle_sso_command(cmd):
         mgr.SSO_DB.save()
         return 0, 'SSO is "enabled" with "SAML2" protocol.', ''
 
-    if cmd['prefix'] == 'dashboard sso disable':
-        mgr.SSO_DB.protocol = ''
-        mgr.SSO_DB.save()
-        return 0, 'SSO is "disabled".', ''
-
     if cmd['prefix'] == 'dashboard sso status':
         if mgr.SSO_DB.protocol == 'saml2':
             return 0, 'SSO is "enabled" with "SAML2" protocol.', ''
index 03f1f5b5513e8863d447d109012b180c1df1d389..258bd9da6dd35f77531c28948e9c36e0e9a6a10e 100644 (file)
@@ -2,18 +2,19 @@
 from __future__ import absolute_import
 
 import unittest
+from unittest.mock import MagicMock, Mock, patch
+from urllib.parse import urlencode
 
-try:
-    from mock import MagicMock, Mock
-except ImportError:
-    from unittest.mock import MagicMock, Mock
+from ceph.deployment.service_spec import NFSServiceSpec
+from orchestrator import DaemonDescription, ServiceDescription
 
-import orchestrator
-from . import KVStoreMockMixin
 from .. import mgr
-from ..settings import Settings
+from ..controllers.nfsganesha import NFSGaneshaUi
 from ..services import ganesha
-from ..services.ganesha import GaneshaConf, Export, GaneshaConfParser
+from ..services.ganesha import ClusterType, Export, GaneshaConf, GaneshaConfParser, NFSException
+from ..settings import Settings
+from . import ControllerTestCase  # pylint: disable=no-name-in-module
+from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
 
 
 class GaneshaConfTest(unittest.TestCase, KVStoreMockMixin):
@@ -78,12 +79,17 @@ EXPORT
 """
 
     conf_nodea = '''
-%url rados://ganesha/ns/export-2
+%url "rados://ganesha/ns/export-2"
 
 %url "rados://ganesha/ns/export-1"'''
 
     conf_nodeb = '%url "rados://ganesha/ns/export-1"'
 
+    conf_nfs_foo = '''
+%url "rados://ganesha2/ns2/export-1"
+
+%url "rados://ganesha2/ns2/export-2"'''
+
     class RObject(object):
         def __init__(self, key, raw):
             self.key = key
@@ -96,31 +102,67 @@ EXPORT
             return len(self.raw), None
 
     def _ioctx_write_full_mock(self, key, content):
-        if key not in self.temp_store:
-            self.temp_store[key] = GaneshaConfTest.RObject(key,
-                                                           content.decode('utf-8'))
+        if key not in self.temp_store[self.temp_store_namespace]:
+            self.temp_store[self.temp_store_namespace][key] = \
+                GaneshaConfTest.RObject(key, content.decode('utf-8'))
         else:
-            self.temp_store[key].raw = content.decode('utf-8')
+            self.temp_store[self.temp_store_namespace][key].raw = content.decode('utf-8')
 
     def _ioctx_remove_mock(self, key):
-        del self.temp_store[key]
+        del self.temp_store[self.temp_store_namespace][key]
 
     def _ioctx_list_objects_mock(self):
-        return [obj for _, obj in self.temp_store.items()]
+        return [obj for _, obj in self.temp_store[self.temp_store_namespace].items()]
+
+    def _ioctl_stat_mock(self, key):
+        return self.temp_store[self.temp_store_namespace][key].stat()
+
+    def _ioctl_read_mock(self, key, size):
+        return self.temp_store[self.temp_store_namespace][key].read(size)
+
+    def _ioctx_set_namespace_mock(self, namespace):
+        self.temp_store_namespace = namespace
 
     def setUp(self):
         self.mock_kv_store()
 
-        Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE = "ganesha/ns"
-
-        self.temp_store = {
-            'export-1': GaneshaConfTest.RObject("export-1", self.export_1),
-            'conf-nodea': GaneshaConfTest.RObject("conf-nodea", self.conf_nodea),
-            'export-2': GaneshaConfTest.RObject("export-2", self.export_2),
-            'conf-nodeb': GaneshaConfTest.RObject("conf-nodeb", self.conf_nodeb)
+        self.clusters = {
+            '_default_': {
+                'pool': 'ganesha',
+                'namespace': 'ns',
+                'type': ClusterType.USER,
+                'daemon_conf': None,
+                'daemons': ['nodea', 'nodeb'],
+                'exports': {
+                    1: ['nodea', 'nodeb'],
+                    2: ['nodea'],
+                    3: ['nodea', 'nodeb']  # for new-added export
+                }
+            },
+            'foo': {
+                'pool': 'ganesha2',
+                'namespace': 'ns2',
+                'type': ClusterType.ORCHESTRATOR,
+                'daemon_conf': 'conf-nfs.foo',
+                'daemons': ['foo.host_a', 'foo.host_b'],
+                'exports': {
+                    1: ['foo.host_a', 'foo.host_b'],
+                    2: ['foo.host_a', 'foo.host_b'],
+                    3: ['foo.host_a', 'foo.host_b']  # for new-added export
+                }
+            }
         }
 
+        Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE = '{pool}/{namespace}'.format_map(
+            self.clusters['_default_'])
+
+        self.temp_store_namespace = None
+        self._reset_temp_store()
+
         self.io_mock = MagicMock()
+        self.io_mock.set_namespace.side_effect = self._ioctx_set_namespace_mock
+        self.io_mock.read = self._ioctl_read_mock
+        self.io_mock.stat = self._ioctl_stat_mock
         self.io_mock.list_objects.side_effect = self._ioctx_list_objects_mock
         self.io_mock.write_full.side_effect = self._ioctx_write_full_mock
         self.io_mock.remove_object.side_effect = self._ioctx_remove_mock
@@ -132,8 +174,7 @@ EXPORT
         mgr.rados = MagicMock()
         mgr.rados.open_ioctx.return_value = ioctx_mock
 
-        # pylint: disable=protected-access
-        mgr._select_orchestrator.side_effect = orchestrator.NoOrchestrator()
+        self._mock_orchestrator(True)
 
         ganesha.CephX = MagicMock()
         ganesha.CephX.list_clients.return_value = ['ganesha']
@@ -141,6 +182,55 @@ EXPORT
 
         ganesha.CephFS = MagicMock()
 
+    def _reset_temp_store(self):
+        self.temp_store_namespace = None
+        self.temp_store = {
+            'ns': {
+                'export-1': GaneshaConfTest.RObject("export-1", self.export_1),
+                'export-2': GaneshaConfTest.RObject("export-2", self.export_2),
+                'conf-nodea': GaneshaConfTest.RObject("conf-nodea", self.conf_nodea),
+                'conf-nodeb': GaneshaConfTest.RObject("conf-nodeb", self.conf_nodeb),
+            },
+            'ns2': {
+                'export-1': GaneshaConfTest.RObject("export-1", self.export_1),
+                'export-2': GaneshaConfTest.RObject("export-2", self.export_2),
+                'conf-nfs.foo': GaneshaConfTest.RObject("conf-nfs.foo", self.conf_nfs_foo)
+            }
+        }
+
+    def _mock_orchestrator(self, enable):
+        # mock nfs services
+        cluster_info = self.clusters['foo']
+        orch_nfs_services = [
+            ServiceDescription(spec=NFSServiceSpec(service_id='foo',
+                                                   pool=cluster_info['pool'],
+                                                   namespace=cluster_info['namespace']))
+        ] if enable else []
+        # pylint: disable=protected-access
+        ganesha.Ganesha._get_orch_nfs_services = Mock(return_value=orch_nfs_services)
+
+        # mock nfs daemons
+        def _get_nfs_instances(service_name=None):
+            if not enable:
+                return []
+            instances = {
+                'nfs.foo': [
+                    DaemonDescription(daemon_id='foo.host_a', status=1),
+                    DaemonDescription(daemon_id='foo.host_b', status=1)
+                ],
+                'nfs.bar': [
+                    DaemonDescription(daemon_id='bar.host_c', status=1)
+                ]
+            }
+            if service_name is not None:
+                return instances[service_name]
+            result = []
+            for _, daemons in instances.items():
+                result.extend(daemons)
+            return result
+        ganesha.GaneshaConfOrchestrator._get_orch_nfs_instances = Mock(
+            side_effect=_get_nfs_instances)
+
     def test_export_parser_1(self):
         blocks = GaneshaConfParser(self.export_1).parse()
         self.assertIsInstance(blocks, list)
@@ -211,7 +301,12 @@ EXPORT
         self.assertEqual(blocks[0]['value'], "rados://ganesha/ns/export-1")
 
     def test_ganesha_conf(self):
-        ganesha_conf = GaneshaConf.instance('_default_')
+        for cluster_id, info in self.clusters.items():
+            self._do_test_ganesha_conf(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_ganesha_conf(self, cluster, expected_exports):
+        ganesha_conf = GaneshaConf.instance(cluster)
         exports = ganesha_conf.exports
 
         self.assertEqual(len(exports.items()), 2)
@@ -242,6 +337,7 @@ EXPORT
         self.assertEqual(export.clients[1].access_type, "RO")
         self.assertEqual(export.attr_expiration_time, 0)
         self.assertEqual(export.security_label, False)
+        self.assertSetEqual(export.daemons, set(expected_exports[1]))
 
         # export_id = 2 asserts
         export = exports[2]
@@ -258,17 +354,23 @@ EXPORT
         self.assertEqual(export.fsal.access_key, "access_key")
         self.assertEqual(export.fsal.secret_key, "secret_key")
         self.assertEqual(len(export.clients), 0)
+        self.assertSetEqual(export.daemons, set(expected_exports[2]))
 
     def test_config_dict(self):
-        conf = GaneshaConf.instance('_default_')
+        for cluster_id, info in self.clusters.items():
+            self._do_test_config_dict(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_config_dict(self, cluster, expected_exports):
+        conf = GaneshaConf.instance(cluster)
         export = conf.exports[1]
         ex_dict = export.to_dict()
         self.assertDictEqual(ex_dict, {
-            'daemons': ['nodea', 'nodeb'],
+            'daemons': expected_exports[1],
             'export_id': 1,
             'path': '/',
             'pseudo': '/cephfs_a',
-            'cluster_id': '_default_',
+            'cluster_id': cluster,
             'tag': None,
             'access_type': 'RW',
             'squash': 'root_squash',
@@ -295,11 +397,11 @@ EXPORT
         export = conf.exports[2]
         ex_dict = export.to_dict()
         self.assertDictEqual(ex_dict, {
-            'daemons': ['nodea'],
+            'daemons': expected_exports[2],
             'export_id': 2,
             'path': '/',
             'pseudo': '/rgw',
-            'cluster_id': '_default_',
+            'cluster_id': cluster,
             'tag': None,
             'access_type': 'RW',
             'squash': 'all_squash',
@@ -314,11 +416,16 @@ EXPORT
         })
 
     def test_config_from_dict(self):
+        for cluster_id, info in self.clusters.items():
+            self._do_test_config_from_dict(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_config_from_dict(self, cluster_id, expected_exports):
         export = Export.from_dict(1, {
-            'daemons': ['nodea', 'nodeb'],
+            'daemons': expected_exports[1],
             'export_id': 1,
             'path': '/',
-            'cluster_id': '_default_',
+            'cluster_id': cluster_id,
             'pseudo': '/cephfs_a',
             'tag': None,
             'access_type': 'RW',
@@ -363,17 +470,17 @@ EXPORT
         self.assertEqual(export.clients[1].addresses, ["192.168.0.0/16"])
         self.assertEqual(export.clients[1].squash, "all_squash")
         self.assertEqual(export.clients[1].access_type, "RO")
-        self.assertEqual(export.daemons, {"nodeb", "nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[1]))
+        self.assertEqual(export.cluster_id, cluster_id)
         self.assertEqual(export.attr_expiration_time, 0)
         self.assertEqual(export.security_label, True)
 
         export = Export.from_dict(2, {
-            'daemons': ['nodea'],
+            'daemons': expected_exports[2],
             'export_id': 2,
             'path': '/',
             'pseudo': '/rgw',
-            'cluster_id': '_default_',
+            'cluster_id': cluster_id,
             'tag': None,
             'access_type': 'RW',
             'squash': 'all_squash',
@@ -400,16 +507,21 @@ EXPORT
         self.assertIsNone(export.fsal.access_key)
         self.assertIsNone(export.fsal.secret_key)
         self.assertEqual(len(export.clients), 0)
-        self.assertEqual(export.daemons, {"nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[2]))
+        self.assertEqual(export.cluster_id, cluster_id)
 
     def test_gen_raw_config(self):
-        conf = GaneshaConf.instance('_default_')
+        for cluster_id, info in self.clusters.items():
+            self._do_test_gen_raw_config(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_gen_raw_config(self, cluster_id, expected_exports):
+        conf = GaneshaConf.instance(cluster_id)
         # pylint: disable=W0212
         export = conf.exports[1]
         del conf.exports[1]
         conf._save_export(export)
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         exports = conf.exports
         self.assertEqual(len(exports.items()), 2)
         self.assertIn(1, exports)
@@ -437,8 +549,8 @@ EXPORT
         self.assertEqual(export.clients[1].addresses, ["192.168.0.0/16"])
         self.assertEqual(export.clients[1].squash, "all_squash")
         self.assertEqual(export.clients[1].access_type, "RO")
-        self.assertEqual(export.daemons, {"nodeb", "nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[1]))
+        self.assertEqual(export.cluster_id, cluster_id)
         self.assertEqual(export.attr_expiration_time, 0)
         self.assertEqual(export.security_label, False)
 
@@ -457,10 +569,15 @@ EXPORT
         self.assertEqual(export.fsal.access_key, "access_key")
         self.assertEqual(export.fsal.secret_key, "secret_key")
         self.assertEqual(len(export.clients), 0)
-        self.assertEqual(export.daemons, {"nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[2]))
+        self.assertEqual(export.cluster_id, cluster_id)
 
     def test_update_export(self):
+        for cluster_id, info in self.clusters.items():
+            self._do_test_update_export(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_update_export(self, cluster_id, expected_exports):
         ganesha.RgwClient = MagicMock()
         admin_inst_mock = MagicMock()
         admin_inst_mock.get_user_keys.return_value = {
@@ -469,13 +586,13 @@ EXPORT
         }
         ganesha.RgwClient.admin_instance.return_value = admin_inst_mock
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         conf.update_export({
             'export_id': 2,
-            'daemons': ["nodeb"],
+            'daemons': expected_exports[2],
             'path': 'bucket',
             'pseudo': '/rgw/bucket',
-            'cluster_id': '_default_',
+            'cluster_id': cluster_id,
             'tag': 'bucket_tag',
             'access_type': 'RW',
             'squash': 'all_squash',
@@ -493,7 +610,7 @@ EXPORT
             }
         })
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         export = conf.get_export(2)
         self.assertEqual(export.export_id, 2)
         self.assertEqual(export.path, "bucket")
@@ -511,11 +628,16 @@ EXPORT
         self.assertEqual(export.clients[0].addresses, ["192.168.0.0/16"])
         self.assertIsNone(export.clients[0].squash)
         self.assertIsNone(export.clients[0].access_type)
-        self.assertEqual(export.daemons, {"nodeb"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[2]))
+        self.assertEqual(export.cluster_id, cluster_id)
 
     def test_remove_export(self):
-        conf = GaneshaConf.instance('_default_')
+        for cluster_id, info in self.clusters.items():
+            self._do_test_remove_export(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_remove_export(self, cluster_id, expected_exports):
+        conf = GaneshaConf.instance(cluster_id)
         conf.remove_export(1)
         exports = conf.list_exports()
         self.assertEqual(len(exports), 1)
@@ -534,10 +656,15 @@ EXPORT
         self.assertEqual(export.fsal.access_key, "access_key")
         self.assertEqual(export.fsal.secret_key, "secret_key")
         self.assertEqual(len(export.clients), 0)
-        self.assertEqual(export.daemons, {"nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[2]))
+        self.assertEqual(export.cluster_id, cluster_id)
 
     def test_create_export_rgw(self):
+        for cluster_id, info in self.clusters.items():
+            self._do_test_create_export_rgw(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_create_export_rgw(self, cluster_id, expected_exports):
         ganesha.RgwClient = MagicMock()
         admin_inst_mock = MagicMock()
         admin_inst_mock.get_user_keys.return_value = {
@@ -546,13 +673,13 @@ EXPORT
         }
         ganesha.RgwClient.admin_instance.return_value = admin_inst_mock
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         ex_id = conf.create_export({
-            'daemons': ["nodeb"],
+            'daemons': expected_exports[3],
             'path': 'bucket',
             'pseudo': '/rgw/bucket',
             'tag': 'bucket_tag',
-            'cluster_id': '_default_',
+            'cluster_id': cluster_id,
             'access_type': 'RW',
             'squash': 'all_squash',
             'security_label': False,
@@ -569,7 +696,7 @@ EXPORT
             }
         })
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         exports = conf.list_exports()
         self.assertEqual(len(exports), 3)
         export = conf.get_export(ex_id)
@@ -589,10 +716,15 @@ EXPORT
         self.assertEqual(export.clients[0].addresses, ["192.168.0.0/16"])
         self.assertIsNone(export.clients[0].squash)
         self.assertIsNone(export.clients[0].access_type)
-        self.assertEqual(export.daemons, {"nodeb"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[3]))
+        self.assertEqual(export.cluster_id, cluster_id)
 
     def test_create_export_cephfs(self):
+        for cluster_id, info in self.clusters.items():
+            self._do_test_create_export_cephfs(cluster_id, info['exports'])
+            self._reset_temp_store()
+
+    def _do_test_create_export_cephfs(self, cluster_id, expected_exports):
         ganesha.CephX = MagicMock()
         ganesha.CephX.list_clients.return_value = ["fs"]
         ganesha.CephX.get_client_key.return_value = "fs_key"
@@ -600,12 +732,12 @@ EXPORT
         ganesha.CephFS = MagicMock()
         ganesha.CephFS.dir_exists.return_value = True
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         ex_id = conf.create_export({
-            'daemons': ['nodea', 'nodeb'],
+            'daemons': expected_exports[3],
             'path': '/',
             'pseudo': '/cephfs2',
-            'cluster_id': '_default_',
+            'cluster_id': cluster_id,
             'tag': None,
             'access_type': 'RW',
             'squash': 'all_squash',
@@ -621,7 +753,7 @@ EXPORT
             }
         })
 
-        conf = GaneshaConf.instance('_default_')
+        conf = GaneshaConf.instance(cluster_id)
         exports = conf.list_exports()
         self.assertEqual(len(exports), 3)
         export = conf.get_export(ex_id)
@@ -639,7 +771,211 @@ EXPORT
         self.assertEqual(export.fsal.sec_label_xattr, "security.selinux")
         self.assertIsNone(export.fsal.fs_name)
         self.assertEqual(len(export.clients), 0)
-        self.assertEqual(export.daemons, {"nodeb", "nodea"})
-        self.assertEqual(export.cluster_id, '_default_')
+        self.assertEqual(export.daemons, set(expected_exports[3]))
+        self.assertEqual(export.cluster_id, cluster_id)
         self.assertEqual(export.attr_expiration_time, 0)
         self.assertEqual(export.security_label, True)
+
+    def test_reload_daemons(self):
+        # Fail to import call in Python 3.8, see https://bugs.python.org/issue35753
+        mock_call = unittest.mock.call
+
+        # Orchestrator cluster: reload all daemon config objects.
+        conf = GaneshaConf.instance('foo')
+        calls = [mock_call(conf) for conf in conf.list_daemon_confs()]
+        for daemons in [[], ['a', 'b']]:
+            conf.reload_daemons(daemons)
+            self.io_mock.notify.assert_has_calls(calls)
+            self.io_mock.reset_mock()
+
+        # User-defined cluster: reload daemons in the parameter
+        conf = GaneshaConf.instance('_default_')
+        calls = [mock_call('conf-{}'.format(daemon)) for daemon in ['nodea', 'nodeb']]
+        conf.reload_daemons(['nodea', 'nodeb'])
+        self.io_mock.notify.assert_has_calls(calls)
+
+    def test_list_daemons(self):
+        for cluster_id, info in self.clusters.items():
+            instance = GaneshaConf.instance(cluster_id)
+            daemons = instance.list_daemons()
+            for daemon in daemons:
+                self.assertEqual(daemon['cluster_id'], cluster_id)
+                self.assertEqual(daemon['cluster_type'], info['type'])
+                self.assertIn('daemon_id', daemon)
+                self.assertIn('status', daemon)
+                self.assertIn('status_desc', daemon)
+            self.assertEqual([daemon['daemon_id'] for daemon in daemons], info['daemons'])
+
+    def test_validate_orchestrator(self):
+        cluster_id = 'foo'
+        cluster_info = self.clusters[cluster_id]
+        instance = GaneshaConf.instance(cluster_id)
+        export = MagicMock()
+
+        # export can be linked to none or all daemons
+        export_daemons = [[], cluster_info['daemons']]
+        for daemons in export_daemons:
+            export.daemons = daemons
+            instance.validate(export)
+
+        # raise if linking to partial or non-exist daemons
+        export_daemons = [cluster_info['daemons'][:1], 'xxx']
+        for daemons in export_daemons:
+            with self.assertRaises(NFSException):
+                export.daemons = daemons
+                instance.validate(export)
+
+    def test_validate_user(self):
+        cluster_id = '_default_'
+        cluster_info = self.clusters[cluster_id]
+        instance = GaneshaConf.instance(cluster_id)
+        export = MagicMock()
+
+        # export can be linked to none, partial, or all daemons
+        export_daemons = [[], cluster_info['daemons'][:1], cluster_info['daemons']]
+        for daemons in export_daemons:
+            export.daemons = daemons
+            instance.validate(export)
+
+        # raise if linking to non-exist daemons
+        export_daemons = ['xxx']
+        for daemons in export_daemons:
+            with self.assertRaises(NFSException):
+                export.daemons = daemons
+                instance.validate(export)
+
+    def _verify_locations(self, locations, cluster_ids):
+        for cluster_id in cluster_ids:
+            self.assertIn(cluster_id, locations)
+            cluster = locations.pop(cluster_id)
+            expected_info = self.clusters[cluster_id]
+            self.assertDictEqual(cluster, {key: expected_info[key] for key in [
+                'pool', 'namespace', 'type', 'daemon_conf']})
+        self.assertDictEqual(locations, {})
+
+    def test_get_cluster_locations(self):
+        # pylint: disable=protected-access
+        # There are both Orchstrator cluster and user-defined cluster.
+        locations = ganesha.Ganesha._get_clusters_locations()
+        self._verify_locations(locations, self.clusters.keys())
+
+        # There is only a user-defined cluster.
+        self._mock_orchestrator(False)
+        locations = ganesha.Ganesha._get_clusters_locations()
+        self._verify_locations(locations, ['_default_'])
+        self._mock_orchestrator(True)
+
+        # There is only a Orchstrator cluster.
+        Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE = ''
+        locations = ganesha.Ganesha._get_clusters_locations()
+        self._verify_locations(locations, ['foo'])
+
+        # No cluster.
+        self._mock_orchestrator(False)
+        with self.assertRaises(NFSException):
+            ganesha.Ganesha._get_clusters_locations()
+
+    def test_get_cluster_locations_conflict(self):
+        # pylint: disable=protected-access
+        # Raise an exception when there is a user-defined cluster that conlicts
+        # with Orchestrator clusters.
+        old_setting = Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE
+        conflicted_location = ',foo:{pool}/{namespace}'.format_map(
+            self.clusters['foo'])
+        Settings.GANESHA_CLUSTERS_RADOS_POOL_NAMESPACE = old_setting + conflicted_location
+        with self.assertRaises(NFSException):
+            ganesha.Ganesha._get_clusters_locations()
+
+
+class NFSGaneshaUiControllerTest(ControllerTestCase):
+    @classmethod
+    def setup_server(cls):
+        # pylint: disable=protected-access
+        NFSGaneshaUi._cp_config['tools.authenticate.on'] = False
+        cls.setup_controllers([NFSGaneshaUi])
+
+    @classmethod
+    def _create_ls_dir_url(cls, fs_name, query_params):
+        api_url = '/ui-api/nfs-ganesha/lsdir/{}'.format(fs_name)
+        if query_params is not None:
+            return '{}?{}'.format(api_url, urlencode(query_params))
+        return api_url
+
+    @patch('dashboard.controllers.nfsganesha.CephFS')
+    def test_lsdir(self, cephfs_class):
+        cephfs_class.return_value.ls_dir.return_value = [
+            {'path': '/foo'},
+            {'path': '/foo/bar'}
+        ]
+        mocked_ls_dir = cephfs_class.return_value.ls_dir
+
+        reqs = [
+            {
+                'params': None,
+                'cephfs_ls_dir_args': ['/', 1],
+                'path0': '/',
+                'status': 200
+            },
+            {
+                'params': {'root_dir': '/', 'depth': '1'},
+                'cephfs_ls_dir_args': ['/', 1],
+                'path0': '/',
+                'status': 200
+            },
+            {
+                'params': {'root_dir': '', 'depth': '1'},
+                'cephfs_ls_dir_args': ['/', 1],
+                'path0': '/',
+                'status': 200
+            },
+            {
+                'params': {'root_dir': '/foo', 'depth': '3'},
+                'cephfs_ls_dir_args': ['/foo', 3],
+                'path0': '/foo',
+                'status': 200
+            },
+            {
+                'params': {'root_dir': 'foo', 'depth': '6'},
+                'cephfs_ls_dir_args': ['/foo', 5],
+                'path0': '/foo',
+                'status': 200
+            },
+            {
+                'params': {'root_dir': '/', 'depth': '-1'},
+                'status': 400
+            },
+            {
+                'params': {'root_dir': '/', 'depth': 'abc'},
+                'status': 400
+            }
+        ]
+
+        for req in reqs:
+            self._get(self._create_ls_dir_url('a', req['params']))
+            self.assertStatus(req['status'])
+
+            # Returned paths should contain root_dir as first element
+            if req['status'] == 200:
+                paths = self.json_body()['paths']
+                self.assertEqual(paths[0], req['path0'])
+                cephfs_class.assert_called_once_with('a')
+
+            # Check the arguments passed to `CephFS.ls_dir`.
+            if req.get('cephfs_ls_dir_args'):
+                mocked_ls_dir.assert_called_once_with(*req['cephfs_ls_dir_args'])
+            else:
+                mocked_ls_dir.assert_not_called()
+            mocked_ls_dir.reset_mock()
+            cephfs_class.reset_mock()
+
+    @patch('dashboard.controllers.nfsganesha.cephfs')
+    @patch('dashboard.controllers.nfsganesha.CephFS')
+    def test_lsdir_non_existed_dir(self, cephfs_class, cephfs):
+        cephfs.ObjectNotFound = Exception
+        cephfs.PermissionError = Exception
+        cephfs_class.return_value.ls_dir.side_effect = cephfs.ObjectNotFound()
+        self._get(self._create_ls_dir_url('a', {'root_dir': '/foo', 'depth': '3'}))
+        cephfs_class.assert_called_once_with('a')
+        cephfs_class.return_value.ls_dir.assert_called_once_with('/foo', 3)
+        self.assertStatus(200)
+        self.assertJsonBody({'paths': []})
index 962ffeb684665e4c513acf6d1500ee664e03960a..49dfc81d78c1031713ecbbf1bf67786d362a3ad4 100644 (file)
@@ -517,6 +517,74 @@ class IscsiTestController(ControllerTestCase, KVStoreMockMixin):
         response['clients'].pop(0)
         self._update_iscsi_target(create_request, update_request, 200, None, response)
 
+    @mock.patch('dashboard.controllers.iscsi.IscsiTarget._validate_image')
+    def test_add_image_to_group_with_client_logged_in(self, _validate_image_mock):
+        client_info = {
+            'alias': '',
+            'ip_address': [],
+            'state': {'LOGGED_IN': ['node1']}
+        }
+        new_disk = {"pool": "rbd", "image": "lun1"}
+        # pylint: disable=protected-access
+        IscsiClientMock._instance.clientinfo = client_info
+        target_iqn = "iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw21"
+        create_request = copy.deepcopy(iscsi_target_request)
+        create_request['target_iqn'] = target_iqn
+        update_request = copy.deepcopy(create_request)
+        update_request['new_target_iqn'] = target_iqn
+        update_request['groups'][0]['disks'].append(new_disk)
+        response = copy.deepcopy(iscsi_target_response)
+        response['target_iqn'] = target_iqn
+        response['groups'][0]['disks'].insert(0, new_disk)
+        for client in response['clients']:
+            client['info'] = client_info
+        self._update_iscsi_target(create_request, update_request, 200, None, response)
+
+    @mock.patch('dashboard.controllers.iscsi.IscsiTarget._validate_image')
+    def test_add_image_to_initiator_with_client_logged_in(self, _validate_image_mock):
+        client_info = {
+            'alias': '',
+            'ip_address': [],
+            'state': {'LOGGED_IN': ['node1']}
+        }
+        new_disk = {"pool": "rbd", "image": "lun2"}
+        # pylint: disable=protected-access
+        IscsiClientMock._instance.clientinfo = client_info
+        target_iqn = "iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw22"
+        create_request = copy.deepcopy(iscsi_target_request)
+        create_request['target_iqn'] = target_iqn
+        update_request = copy.deepcopy(create_request)
+        update_request['new_target_iqn'] = target_iqn
+        update_request['clients'][0]['luns'].append(new_disk)
+        response = copy.deepcopy(iscsi_target_response)
+        response['target_iqn'] = target_iqn
+        response['clients'][0]['luns'].append(new_disk)
+        for client in response['clients']:
+            client['info'] = client_info
+        self._update_iscsi_target(create_request, update_request, 200, None, response)
+
+    @mock.patch('dashboard.controllers.iscsi.IscsiTarget._validate_image')
+    def test_remove_image_from_group_with_client_logged_in(self, _validate_image_mock):
+        client_info = {
+            'alias': '',
+            'ip_address': [],
+            'state': {'LOGGED_IN': ['node1']}
+        }
+        # pylint: disable=protected-access
+        IscsiClientMock._instance.clientinfo = client_info
+        target_iqn = "iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw23"
+        create_request = copy.deepcopy(iscsi_target_request)
+        create_request['target_iqn'] = target_iqn
+        update_request = copy.deepcopy(create_request)
+        update_request['new_target_iqn'] = target_iqn
+        update_request['groups'][0]['disks'] = []
+        response = copy.deepcopy(iscsi_target_response)
+        response['target_iqn'] = target_iqn
+        response['groups'][0]['disks'] = []
+        for client in response['clients']:
+            client['info'] = client_info
+        self._update_iscsi_target(create_request, update_request, 200, None, response)
+
     def _update_iscsi_target(self, create_request, update_request, update_response_code,
                              update_response, response):
         self._task_post('/api/iscsi/target', create_request)
@@ -839,6 +907,26 @@ class IscsiClientMock(object):
             target_config['groups'][group_name]['disks'][image_id] = {}
         target_config['groups'][group_name]['members'] = members
 
+    def update_group(self, target_iqn, group_name, members, image_ids):
+        target_config = self.config['targets'][target_iqn]
+        group = target_config['groups'][group_name]
+        old_members = group['members']
+        disks = group['disks']
+        target_config['groups'][group_name] = {
+            "disks": {},
+            "members": []
+        }
+
+        for image_id in disks.keys():
+            if image_id not in image_ids:
+                target_config['groups'][group_name]['disks'][image_id] = {}
+
+        new_members = []
+        for member_iqn in old_members:
+            if member_iqn not in members:
+                new_members.append(member_iqn)
+        target_config['groups'][group_name]['members'] = new_members
+
     def delete_group(self, target_iqn, group_name):
         target_config = self.config['targets'][target_iqn]
         del target_config['groups'][group_name]
index d69ab2f48df5c87bd6b1cfe67e8b814c35ec29c5..3f742d45f7ff14c7827edca133ae462ecbfb36c3 100644 (file)
@@ -12,6 +12,16 @@ from ..settings import Settings
 from . import KVStoreMockMixin
 
 
+def _dummy_daemon_info():
+    return {
+        'addr': '172.20.0.2:0/256594694',
+        'metadata': {
+            'zonegroup_name': 'zonegroup2-realm1'
+        }
+    }
+
+
+@patch('dashboard.services.rgw_client._get_daemon_info', _dummy_daemon_info)
 class RgwClientTest(unittest.TestCase, KVStoreMockMixin):
     def setUp(self):
         RgwClient._user_instances.clear()  # pylint: disable=protected-access
@@ -34,41 +44,7 @@ class RgwClientTest(unittest.TestCase, KVStoreMockMixin):
         self.assertFalse(instance.session.verify)
 
     @patch.object(RgwClient, '_get_daemon_zone_info')
-    def test_get_placement_targets_from_default_zone(self, zone_info):
-        zone_info.return_value = {
-            'placement_pools': [
-                {
-                    'key': 'default-placement',
-                    'val': {
-                        'index_pool': 'default.rgw.buckets.index',
-                        'storage_classes': {
-                            'STANDARD': {
-                                'data_pool': 'default.rgw.buckets.data'
-                            }
-                        },
-                        'data_extra_pool': 'default.rgw.buckets.non-ec',
-                        'index_type': 0
-                    }
-                }
-            ],
-            'realm_id': ''
-        }
-
-        instance = RgwClient.admin_instance()
-        expected_result = {
-            'zonegroup': 'default',
-            'placement_targets': [
-                {
-                    'name': 'default-placement',
-                    'data_pool': 'default.rgw.buckets.data'
-                }
-            ]
-        }
-        self.assertEqual(expected_result, instance.get_placement_targets())
-
-    @patch.object(RgwClient, '_get_daemon_zone_info')
-    @patch.object(RgwClient, '_get_daemon_zonegroup_map')
-    def test_get_placement_targets_from_realm_zone(self, zonegroup_map, zone_info):
+    def test_get_placement_targets_from_zone(self, zone_info):
         zone_info.return_value = {
             'id': 'a0df30ea-4b5b-4830-b143-2bedf684663d',
             'placement_pools': [
@@ -83,35 +59,9 @@ class RgwClientTest(unittest.TestCase, KVStoreMockMixin):
                         }
                     }
                 }
-            ],
-            'realm_id': 'b5a25d1b-e7ed-4fe5-b461-74f24b8e759b'
+            ]
         }
 
-        zonegroup_map.return_value = [
-            {
-                'api_name': 'zonegroup1-realm1',
-                'zones': [
-                    {
-                        'id': '2ef7d0ef-7616-4e9c-8553-b732ebf0592b'
-                    },
-                    {
-                        'id': 'b1d15925-6c8e-408e-8485-5a62cbccfe1f'
-                    }
-                ]
-            },
-            {
-                'api_name': 'zonegroup2-realm1',
-                'zones': [
-                    {
-                        'id': '645f0f59-8fcc-4e11-95d5-24f289ee8e25'
-                    },
-                    {
-                        'id': 'a0df30ea-4b5b-4830-b143-2bedf684663d'
-                    }
-                ]
-            }
-        ]
-
         instance = RgwClient.admin_instance()
         expected_result = {
             'zonegroup': 'zonegroup2-realm1',
index 2b6d92ca55f7d1ab90e4dadf2c380d4f7f2e79d7..ec88cbbff74c6165a2f069f4dab1c37517214bbd 100644 (file)
@@ -5,7 +5,6 @@ import sys
 import inspect
 import json
 import functools
-import ipaddress
 import logging
 
 import collections
@@ -14,7 +13,6 @@ from distutils.util import strtobool
 import fnmatch
 import time
 import threading
-import six
 from six.moves import urllib
 import cherrypy
 
@@ -23,6 +21,8 @@ try:
 except ImportError:
     from urllib.parse import urljoin
 
+from ceph.deployment.utils import wrap_ipv6
+
 from . import mgr
 from .exceptions import ViewCacheNoDataException
 from .settings import Settings
@@ -693,16 +693,7 @@ def build_url(host, scheme=None, port=None):
     :type port: int
     :rtype: str
     """
-    try:
-        try:
-            u_host = six.u(host)
-        except TypeError:
-            u_host = host
-
-        ipaddress.IPv6Address(u_host)
-        netloc = '[{}]'.format(host)
-    except ValueError:
-        netloc = host
+    netloc = wrap_ipv6(host)
     if port:
         netloc += ':{}'.format(port)
     pr = urllib.parse.ParseResult(
index f877ed8ac431f863fdb5132650ee22e4e56518c0..57f35a913cc75b957b5be4524f73e0ddf409b2d0 100644 (file)
@@ -145,6 +145,7 @@ class Module(MgrModule):
         # other
         self.run = True
         self.event = Event()
+        self.has_device_pool = False
 
     def is_valid_daemon_name(self, who):
         l = who.split('.')
@@ -221,6 +222,37 @@ class Module(MgrModule):
                     self.get_module_option(opt['name']))
             self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
 
+    def notify(self, notify_type, notify_id):
+       # create device_health_metrics pool if it doesn't exist
+       if notify_type == "osd_map" and self.enable_monitoring:
+            if not self.has_device_pool:
+                self.create_device_pool()
+                self.has_device_pool = True
+
+    def create_device_pool(self):
+        self.log.debug('create %s pool' % self.pool_name)
+        # create pool
+        result = CommandResult('')
+        self.send_command(result, 'mon', '', json.dumps({
+            'prefix': 'osd pool create',
+            'format': 'json',
+            'pool': self.pool_name,
+            'pg_num': 1,
+            'pg_num_min': 1,
+        }), '')
+        r, outb, outs = result.wait()
+        assert r == 0
+        # set pool application
+        result = CommandResult('')
+        self.send_command(result, 'mon', '', json.dumps({
+            'prefix': 'osd pool application enable',
+            'format': 'json',
+            'pool': self.pool_name,
+            'app': 'mgr_devicehealth',
+        }), '')
+        r, outb, outs = result.wait()
+        assert r == 0
+
     def serve(self):
         self.log.info("Starting")
         self.config_notify()
@@ -274,44 +306,23 @@ class Module(MgrModule):
         self.event.set()
 
     def open_connection(self, create_if_missing=True):
-        pools = self.rados.list_pools()
-        is_pool = False
-        for pool in pools:
-            if pool == self.pool_name:
-                is_pool = True
-                break
-        if not is_pool:
+        osdmap = self.get("osd_map")
+        assert osdmap is not None
+        if len(osdmap['osds']) == 0:
+            return None
+        if not self.has_device_pool:
             if not create_if_missing:
                 return None
-            self.log.debug('create %s pool' % self.pool_name)
-            # create pool
-            result = CommandResult('')
-            self.send_command(result, 'mon', '', json.dumps({
-                'prefix': 'osd pool create',
-                'format': 'json',
-                'pool': self.pool_name,
-                'pg_num': 1,
-                'pg_num_min': 1,
-            }), '')
-            r, outb, outs = result.wait()
-            assert r == 0
-
-            # set pool application
-            result = CommandResult('')
-            self.send_command(result, 'mon', '', json.dumps({
-                'prefix': 'osd pool application enable',
-                'format': 'json',
-                'pool': self.pool_name,
-                'app': 'mgr_devicehealth',
-            }), '')
-            r, outb, outs = result.wait()
-            assert r == 0
-
+            if self.enable_monitoring:
+                self.create_device_pool()
+                self.has_device_pool = True
         ioctx = self.rados.open_ioctx(self.pool_name)
         return ioctx
 
     def scrape_daemon(self, daemon_type, daemon_id):
         ioctx = self.open_connection()
+        if not ioctx:
+            return 0, "", ""
         raw_smart_data = self.do_scrape_daemon(daemon_type, daemon_id)
         if raw_smart_data:
             for device, raw_data in raw_smart_data.items():
@@ -325,6 +336,8 @@ class Module(MgrModule):
         osdmap = self.get("osd_map")
         assert osdmap is not None
         ioctx = self.open_connection()
+        if not ioctx:
+            return 0, "", ""
         did_device = {}
         ids = []
         for osd in osdmap['osds']:
@@ -357,6 +370,8 @@ class Module(MgrModule):
                     'device ' + devid + ' not claimed by any active daemons')
         (daemon_type, daemon_id) = daemons[0].split('.')
         ioctx = self.open_connection()
+        if not ioctx:
+            return 0, "", ""
         raw_smart_data = self.do_scrape_daemon(daemon_type, daemon_id,
                                                devid=devid)
         if raw_smart_data:
index 9c74a8df0a0e66b9a73bb9f0e2ffb30e8cf7e9d5..9a1e64bf246f3000323d93f7df1994c8061247ee 100644 (file)
@@ -8,6 +8,7 @@ minversion = 2.8.1
 deps =
     pytest
     mock
+    six>=1.14.0
 setenv=
     UNITTEST = true
     py3:  PYTHONPATH = {toxinidir}/../../../../build/lib/cython_modules/lib.3
index 55c512aee449984e766db5354ee2fbf8350c5a43..117d3d0b3d6d07ea2db164ff8486e43dc52469b0 100644 (file)
@@ -932,7 +932,7 @@ class Orchestrator(object):
         # assert action in ["start", "stop", "reload, "restart", "redeploy"]
         raise NotImplementedError()
 
-    def daemon_action(self, action: str, daemon_name: str, image: Optional[str]=None) -> Completion[str]:
+    def daemon_action(self, action: str, daemon_name: str, image: Optional[str] = None) -> Completion[str]:
         """
         Perform an action (start/stop/reload) on a daemon.
 
@@ -1201,7 +1201,7 @@ class DaemonDescription(object):
                  osdspec_affinity=None,
                  last_deployed=None,
                  events: Optional[List['OrchestratorEvent']] = None,
-                 is_active: bool=False):
+                 is_active: bool = False):
 
         # Host is at the same granularity as InventoryHost
         self.hostname: str = hostname
@@ -1243,7 +1243,7 @@ class DaemonDescription(object):
         self.osdspec_affinity: Optional[str] = osdspec_affinity
 
         self.events: List[OrchestratorEvent] = events or []
-        
+
         self.is_active = is_active
 
     def name(self):
@@ -1291,6 +1291,10 @@ class DaemonDescription(object):
                 if len(v) in [3, 4]:
                     return '.'.join(v[0:2])
 
+            if self.daemon_type == 'iscsi':
+                v = self.daemon_id.split('.')
+                return '.'.join(v[0:-1])
+
             # daemon_id == "service_id"
             return self.daemon_id
 
index af9813f61755c28c833fbfeb58c3e0fd4f9b3020..7b86e397daa677c5ae27c50f1e1513f62b92fc7f 100644 (file)
@@ -13,7 +13,7 @@ from ceph.deployment.inventory import Device
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
 from ceph.deployment.service_spec import PlacementSpec, ServiceSpec
 
-from mgr_util import format_bytes, to_pretty_timedelta
+from mgr_util import format_bytes, to_pretty_timedelta, format_dimless
 from mgr_module import MgrModule, HandleCommandResult
 
 from ._interface import OrchestratorClientMixin, DeviceLightLoc, _cli_read_command, \
@@ -108,18 +108,12 @@ def preview_table_osd(data):
                 if spec.get('error'):
                     return spec.get('message')
                 dg_name = spec.get('osdspec')
-                for osd in spec.get('data', {}).get('osds', []):
-                    db_path = '-'
-                    wal_path = '-'
-                    block_db = osd.get('block.db', {}).get('path')
-                    block_wal = osd.get('block.wal', {}).get('path')
-                    block_data = osd.get('data', {}).get('path', '')
+                for osd in spec.get('data', []):
+                    db_path = osd.get('block_db', '-')
+                    wal_path = osd.get('block_wal', '-')
+                    block_data = osd.get('data', '')
                     if not block_data:
                         continue
-                    if block_db:
-                        db_path = spec.get('data', {}).get('vg', {}).get('devices', [])
-                    if block_wal:
-                        wal_path = spec.get('data', {}).get('wal_vg', {}).get('devices', [])
                     table.add_row(('osd', dg_name, host, block_data, db_path, wal_path))
     return table.get_string()
 
@@ -174,7 +168,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
         encoded = json.dumps({
             'ident': list(self.ident),
             'fault': list(self.fault),
-            })
+        })
         self.set_store('active_devices', encoded)
 
     def _refresh_health(self):
@@ -208,7 +202,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
             stdout=json.dumps({
                 'ident': list(self.ident),
                 'fault': list(self.fault)
-                }, indent=4, sort_keys=True))
+            }, indent=4, sort_keys=True))
 
     def light_on(self, fault_ident, devid):
         # type: (str, str) -> HandleCommandResult
@@ -280,7 +274,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
         'name=addr,type=CephString,req=false '
         'name=labels,type=CephString,n=N,req=false',
         'Add a host')
-    def _add_host(self, hostname:str, addr: Optional[str]=None, labels: Optional[List[str]]=None):
+    def _add_host(self, hostname: str, addr: Optional[str] = None, labels: Optional[List[str]] = None):
         s = HostSpec(hostname=hostname, addr=addr, labels=labels)
         completion = self.add_host(s)
         self._orchestrator_wait([completion])
@@ -366,10 +360,11 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
         'orch device ls',
         "name=hostname,type=CephString,n=N,req=false "
         "name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false "
-        "name=refresh,type=CephBool,req=false",
+        "name=refresh,type=CephBool,req=false "
+        "name=wide,type=CephBool,req=false",
         'List devices on a host')
-    def _list_devices(self, hostname=None, format='plain', refresh=False):
-        # type: (Optional[List[str]], str, bool) -> HandleCommandResult
+    def _list_devices(self, hostname=None, format='plain', refresh=False, wide=False):
+        # type: (Optional[List[str]], str, bool, bool) -> HandleCommandResult
         """
         Provide information about storage devices present in cluster hosts
 
@@ -387,32 +382,78 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
         if format != 'plain':
             return HandleCommandResult(stdout=to_format(completion.result, format, many=True, cls=InventoryHost))
         else:
-            out = []
+            display_map = {
+                "Unsupported": "N/A",
+                "N/A": "N/A",
+                "On": "On",
+                "Off": "Off",
+                True: "Yes",
+                False: "No",
+            }
 
-            table = PrettyTable(
-                ['HOST', 'PATH', 'TYPE', 'SIZE', 'DEVICE_ID', 'MODEL', 'VENDOR', 'ROTATIONAL', 'AVAIL',
-                 'REJECT REASONS'],
-                border=False)
+            out = []
+            if wide:
+                table = PrettyTable(
+                    ['Hostname', 'Path', 'Type', 'Transport', 'RPM', 'Vendor', 'Model',
+                     'Serial', 'Size', 'Health', 'Ident', 'Fault', 'Available',
+                     'Reject Reasons'],
+                    border=False)
+            else:
+                table = PrettyTable(
+                    ['Hostname', 'Path', 'Type', 'Serial', 'Size',
+                     'Health', 'Ident', 'Fault', 'Available'],
+                    border=False)
             table.align = 'l'
             table._align['SIZE'] = 'r'
             table.left_padding_width = 0
             table.right_padding_width = 2
-            for host_ in completion.result: # type: InventoryHost
+            for host_ in completion.result:  # type: InventoryHost
                 for d in host_.devices.devices:  # type: Device
-                    table.add_row(
-                        (
-                            host_.name,
-                            d.path,
-                            d.human_readable_type,
-                            format_bytes(d.sys_api.get('size', 0), 5),
-                            d.device_id,
-                            d.sys_api.get('model') or 'n/a',
-                            d.sys_api.get('vendor') or 'n/a',
-                            d.sys_api.get('rotational') or 'n/a',
-                            d.available,
-                            ', '.join(d.rejected_reasons)
+
+                    led_ident = 'N/A'
+                    led_fail = 'N/A'
+                    if d.lsm_data.get('ledSupport', None):
+                        led_ident = d.lsm_data['ledSupport']['IDENTstatus']
+                        led_fail = d.lsm_data['ledSupport']['FAILstatus']
+
+                    if d.device_id is not None:
+                        fallback_serial = d.device_id.split('_')[-1]
+                    else:
+                        fallback_serial = ""
+
+                    if wide:
+                        table.add_row(
+                            (
+                                host_.name,
+                                d.path,
+                                d.human_readable_type,
+                                d.lsm_data.get('transport', 'Unknown'),
+                                d.lsm_data.get('rpm', 'Unknown'),
+                                d.sys_api.get('vendor') or 'N/A',
+                                d.sys_api.get('model') or 'N/A',
+                                d.lsm_data.get('serialNum', fallback_serial),
+                                format_dimless(d.sys_api.get('size', 0), 5),
+                                d.lsm_data.get('health', 'Unknown'),
+                                display_map[led_ident],
+                                display_map[led_fail],
+                                display_map[d.available],
+                                ', '.join(d.rejected_reasons)
+                            )
+                        )
+                    else:
+                        table.add_row(
+                            (
+                                host_.name,
+                                d.path,
+                                d.human_readable_type,
+                                d.lsm_data.get('serialNum', fallback_serial),
+                                format_dimless(d.sys_api.get('size', 0), 5),
+                                d.lsm_data.get('health', 'Unknown'),
+                                display_map[led_ident],
+                                display_map[led_fail],
+                                display_map[d.available]
+                            )
                         )
-                    )
             out.append(table.get_string())
             return HandleCommandResult(stdout='\n'.join(out))
 
@@ -470,7 +511,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule):
                 ['NAME', 'RUNNING', 'REFRESHED', 'AGE',
                  'PLACEMENT',
                  'IMAGE NAME', 'IMAGE ID'
-                ],
+                 ],
                 border=False)
             table.align['NAME'] = 'l'
             table.align['RUNNING'] = 'r'
@@ -703,7 +744,8 @@ Usage:
             host_name, block_device = svc_arg.split(":")
             block_devices = block_device.split(',')
             devs = DeviceSelection(paths=block_devices)
-            drive_group = DriveGroupSpec(placement=PlacementSpec(host_pattern=host_name), data_devices=devs)
+            drive_group = DriveGroupSpec(placement=PlacementSpec(
+                host_pattern=host_name), data_devices=devs)
         except (TypeError, KeyError, ValueError):
             msg = "Invalid host:device spec: '{}'".format(svc_arg) + usage
             return HandleCommandResult(-errno.EINVAL, stderr=msg)
@@ -761,7 +803,7 @@ Usage:
             table.left_padding_width = 0
             table.right_padding_width = 2
             for osd in sorted(report, key=lambda o: o.osd_id):
-                table.add_row([osd.osd_id, osd.nodename, osd.drain_status_human(),
+                table.add_row([osd.osd_id, osd.hostname, osd.drain_status_human(),
                                osd.get_pg_count(), osd.replace, osd.replace, osd.drain_started_at])
             out = table.get_string()
 
@@ -967,7 +1009,7 @@ Usage:
         "name=name,type=CephString "
         "name=image,type=CephString,req=false",
         'Redeploy a daemon (with a specifc image)')
-    def _daemon_action_redeploy(self, name, image):
+    def _daemon_action_redeploy(self, name: str, image: Optional[str] = None) -> HandleCommandResult:
         if '.' not in name:
             raise OrchestratorError('%s is not a valid daemon name' % name)
         completion = self.daemon_action("redeploy", name, image=image)
@@ -986,7 +1028,8 @@ Usage:
                 raise OrchestratorError('%s is not a valid daemon name' % name)
             (daemon_type) = name.split('.')[0]
             if not force and daemon_type in ['osd', 'mon', 'prometheus']:
-                raise OrchestratorError('must pass --force to REMOVE daemon with potentially PRECIOUS DATA for %s' % name)
+                raise OrchestratorError(
+                    'must pass --force to REMOVE daemon with potentially PRECIOUS DATA for %s' % name)
         completion = self.remove_daemons(names)
         self._orchestrator_wait([completion])
         raise_if_exception(completion)
@@ -1022,7 +1065,7 @@ Usage:
                     inbuf: Optional[str] = None) -> HandleCommandResult:
         usage = """Usage:
   ceph orch apply -i <yaml spec> [--dry-run]
-  ceph orch apply <service_type> <placement> [--unmanaged]
+  ceph orch apply <service_type> [--placement=<placement_string>] [--unmanaged]
         """
         if inbuf:
             if service_type or placement or unmanaged:
@@ -1037,7 +1080,8 @@ Usage:
         else:
             placementspec = PlacementSpec.from_string(placement)
             assert service_type
-            specs = [ServiceSpec(service_type, placement=placementspec, unmanaged=unmanaged, preview_only=dry_run)]
+            specs = [ServiceSpec(service_type, placement=placementspec,
+                                 unmanaged=unmanaged, preview_only=dry_run)]
 
         completion = self.apply(specs)
         self._orchestrator_wait([completion])
@@ -1103,7 +1147,7 @@ Usage:
         'name=ssl,type=CephBool,req=false '
         'name=placement,type=CephString,req=false '
         'name=dry_run,type=CephBool,req=false '
-        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false ' 
+        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false '
         'name=unmanaged,type=CephBool,req=false',
         'Update the number of RGW instances for the given zone')
     def _apply_rgw(self,
@@ -1153,7 +1197,7 @@ Usage:
         'name=namespace,type=CephString,req=false '
         'name=placement,type=CephString,req=false '
         'name=dry_run,type=CephBool,req=false '
-        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false ' 
+        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false '
         'name=unmanaged,type=CephBool,req=false',
         'Scale an NFS service')
     def _apply_nfs(self,
@@ -1200,7 +1244,7 @@ Usage:
         'name=trusted_ip_list,type=CephString,req=false '
         'name=placement,type=CephString,req=false '
         'name=dry_run,type=CephBool,req=false '
-        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false ' 
+        'name=format,type=CephChoices,strings=plain|json|json-pretty|yaml,req=false '
         'name=unmanaged,type=CephBool,req=false',
         'Scale an iSCSI service')
     def _apply_iscsi(self,
@@ -1377,8 +1421,8 @@ Usage:
         """
         if image and re.match(r'^v?\d+\.\d+\.\d+$', image) and ceph_version is None:
             ver = image[1:] if image.startswith('v') else image
-            s =  f"Error: unable to pull image name `{image}`.\n" \
-                 f"  Maybe you meant `--ceph-version {ver}`?"
+            s = f"Error: unable to pull image name `{image}`.\n" \
+                f"  Maybe you meant `--ceph-version {ver}`?"
             raise OrchestratorValidationError(s)
 
     @_cli_write_command(
index b5b45a2caa36c5211a8d0c8cd79b809d4c4f167e..7767743186bccf6b5aa348e12fdd42bdbc778b47 100644 (file)
@@ -15,7 +15,7 @@ from tests import mock
 from orchestrator import raise_if_exception, Completion, ProgressReference
 from orchestrator import InventoryHost, DaemonDescription, ServiceDescription
 from orchestrator import OrchestratorValidationError
-from orchestrator.module import to_format
+from orchestrator.module import to_format, preview_table_osd
 
 
 def _test_resource(data, resource_class, extra=None):
@@ -98,6 +98,7 @@ def some_complex_completion():
             lambda four: four + 1))
     return c
 
+
 def test_promise_mondatic_then_combined():
     p = some_complex_completion()
     p.finalize()
@@ -135,13 +136,15 @@ def test_progress():
                                       completion=lambda: Completion(
                                           on_complete=lambda _: progress_val))
     )
-    mgr.remote.assert_called_with('progress', 'update', c.progress_reference.progress_id, 'hello world', 0.0, [('origin', 'orchestrator')])
+    mgr.remote.assert_called_with('progress', 'update', c.progress_reference.progress_id, 'hello world', 0.0, [
+                                  ('origin', 'orchestrator')])
 
     c.finalize()
     mgr.remote.assert_called_with('progress', 'complete', c.progress_reference.progress_id)
 
     c.progress_reference.update()
-    mgr.remote.assert_called_with('progress', 'update', c.progress_reference.progress_id, 'hello world', progress_val, [('origin', 'orchestrator')])
+    mgr.remote.assert_called_with('progress', 'update', c.progress_reference.progress_id,
+                                  'hello world', progress_val, [('origin', 'orchestrator')])
     assert not c.progress_reference.effective
 
     progress_val = 1
@@ -191,8 +194,8 @@ def test_fail():
     assert isinstance(c.exception, KeyError)
 
     with pytest.raises(ValueError,
-                  match='Invalid State: called fail, but Completion is already finished: {}'.format(
-                      str(ZeroDivisionError()))):
+                       match='Invalid State: called fail, but Completion is already finished: {}'.format(
+                           str(ZeroDivisionError()))):
         c._first_promise.fail(ZeroDivisionError())
 
 
@@ -234,6 +237,7 @@ def test_pretty_print():
 
     assert p.result == 5
 
+
 def test_apply():
     to = _TestOrchestrator('', 0, 0)
     completion = to.apply([
@@ -242,7 +246,7 @@ def test_apply():
         ServiceSpec(service_type='nfs'),
     ])
     completion.finalize(42)
-    assert  completion.result == [None, None, None]
+    assert completion.result == [None, None, None]
 
 
 def test_yaml():
@@ -288,5 +292,49 @@ def test_event_multiline():
     e = OrchestratorEvent(datetime.datetime.utcnow(), 'service', 'subject', 'ERROR', 'message')
     assert OrchestratorEvent.from_json(e.to_json()) == e
 
-    e = OrchestratorEvent(datetime.datetime.utcnow(), 'service', 'subject', 'ERROR', 'multiline\nmessage')
+    e = OrchestratorEvent(datetime.datetime.utcnow(), 'service',
+                          'subject', 'ERROR', 'multiline\nmessage')
     assert OrchestratorEvent.from_json(e.to_json()) == e
+
+
+def test_preview_table_osd_smoke():
+    data = [
+        {
+            'service_type': 'osd',
+            'data':
+            {
+                'foo host':
+                [
+                    {
+                        'osdspec': 'foo',
+                        'error': '',
+                        'data':
+                        [
+                            {
+                                "block_db": "/dev/nvme0n1",
+                                "block_db_size": "66.67 GB",
+                                "data": "/dev/sdb",
+                                "data_size": "300.00 GB",
+                                "encryption": "None"
+                            },
+                            {
+                                "block_db": "/dev/nvme0n1",
+                                "block_db_size": "66.67 GB",
+                                "data": "/dev/sdc",
+                                "data_size": "300.00 GB",
+                                "encryption": "None"
+                            },
+                            {
+                                "block_db": "/dev/nvme0n1",
+                                "block_db_size": "66.67 GB",
+                                "data": "/dev/sdd",
+                                "data_size": "300.00 GB",
+                                "encryption": "None"
+                            }
+                        ]
+                    }
+                ]
+            }
+        }
+    ]
+    preview_table_osd(data)
index 2ed5d1714d27ad8e38848278ba75821c938a1e99..390828b07bb31f3adc76fb4f151f60bacf7e4aa6 100644 (file)
@@ -62,7 +62,8 @@ def health_status_to_number(status):
 DF_CLUSTER = ['total_bytes', 'total_used_bytes', 'total_used_raw_bytes']
 
 DF_POOL = ['max_avail', 'stored', 'stored_raw', 'objects', 'dirty',
-           'quota_bytes', 'quota_objects', 'rd', 'rd_bytes', 'wr', 'wr_bytes']
+           'quota_bytes', 'quota_objects', 'rd', 'rd_bytes', 'wr', 'wr_bytes',
+           'compress_bytes_used', 'compress_under_bytes']
 
 OSD_POOL_STATS = ('recovering_objects_per_sec', 'recovering_bytes_per_sec',
                   'recovering_keys_per_sec', 'num_objects_recovered',
@@ -510,7 +511,7 @@ class Module(MgrModule):
             host_version = servers.get((id_, 'mon'), ('', ''))
             self.metrics['mon_metadata'].set(1, (
                 'mon.{}'.format(id_), host_version[0],
-                mon['public_addr'].split(':')[0], rank,
+                mon['public_addr'].rsplit(':', 1)[0], rank,
                 host_version[1]
             ))
             in_quorum = int(rank in mon_status['quorum'])
@@ -619,8 +620,8 @@ class Module(MgrModule):
             # id can be used to link osd metrics and metadata
             id_ = osd['osd']
             # collect osd metadata
-            p_addr = osd['public_addr'].split(':')[0]
-            c_addr = osd['cluster_addr'].split(':')[0]
+            p_addr = osd['public_addr'].rsplit(':', 1)[0]
+            c_addr = osd['cluster_addr'].rsplit(':', 1)[0]
             if p_addr == "-" or c_addr == "-":
                 self.log.info(
                     "Missing address metadata for osd {0}, skipping occupation"
index 64fcff99c8d90ee81d45ae57789e131113308250..68763eb4ed42f519aee3d5175610b6d7a1502ae2 100644 (file)
@@ -126,7 +126,7 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
             return False, "ceph-mgr not running in Rook cluster"
 
         try:
-            self.k8s.list_namespaced_pod(self._rook_env.cluster_name)
+            self.k8s.list_namespaced_pod(self._rook_env.namespace)
         except ApiException as e:
             return False, "Cannot reach Kubernetes API: {}".format(e)
         else:
@@ -169,13 +169,10 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
 
         if self._rook_env.has_namespace():
             config.load_incluster_config()
-            cluster_name = self._rook_env.cluster_name
         else:
             self.log.warning("DEVELOPMENT ONLY: Reading kube config from ~")
             config.load_kube_config()
 
-            cluster_name = "rook-ceph"
-
             # So that I can do port forwarding from my workstation - jcsp
             from kubernetes.client import configuration
             configuration.verify_ssl = False
@@ -188,7 +185,7 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
             # this context, or subsequent API usage from handle_command
             # fails with SSLError('bad handshake').  Suspect some kind of
             # thread context setup in SSL lib?
-            self._k8s_CoreV1_api.list_namespaced_pod(cluster_name)
+            self._k8s_CoreV1_api.list_namespaced_pod(self._rook_env.namespace)
         except ApiException:
             # Ignore here to make self.available() fail with a proper error message
             pass
@@ -363,7 +360,11 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
     @deferred_read
     def list_daemons(self, service_name=None, daemon_type=None, daemon_id=None, host=None,
                      refresh=False):
-        return self._list_daemons(daemon_type, daemon_id, host, refresh)
+        return self._list_daemons(service_name=service_name,
+                                  daemon_type=daemon_type,
+                                  daemon_id=daemon_id,
+                                  host=host,
+                                  refresh=refresh)
 
     def _list_daemons(self, service_name=None, daemon_type=None, daemon_id=None, host=None,
                       refresh=False):
index fef56e4bd45d57d6074f3f9b1ac55ee440096c0c..bc68e12896759929ec381a23325d2047ea36c159 100644 (file)
@@ -398,21 +398,29 @@ class Module(MgrModule):
             if not anon_host:
                 anon_host = str(uuid.uuid1())
                 self.set_store('host-id/%s' % host, anon_host)
+            serial = None
             for dev, rep in m.items():
                 rep['host_id'] = anon_host
+                if serial is None and 'serial_number' in rep:
+                    serial = rep['serial_number']
 
             # anonymize device id
             anon_devid = self.get_store('devid-id/%s' % devid)
             if not anon_devid:
-                anon_devid = f"{devid.rsplit('_', 1)[0]}_{uuid.uuid1()}"
+                # ideally devid is 'vendor_model_serial',
+                # but can also be 'model_serial', 'serial'
+                if '_' in devid:
+                    anon_devid = f"{devid.rsplit('_', 1)[0]}_{uuid.uuid1()}"
+                else:
+                    anon_devid = str(uuid.uuid1())
                 self.set_store('devid-id/%s' % devid, anon_devid)
             self.log.info('devid %s / %s, host %s / %s' % (devid, anon_devid,
                                                            host, anon_host))
 
             # anonymize the smartctl report itself
-            serial = devid.rsplit('_', 1)[1]
-            m_str = json.dumps(m)
-            m = json.loads(m_str.replace(serial, 'deleted'))
+            if serial:
+                m_str = json.dumps(m)
+                m = json.loads(m_str.replace(serial, 'deleted'))
 
             if anon_host not in res:
                 res[anon_host] = {}
index 7b6fb41b2258a7e0a2e0f88509c7f46d3c7eb496..5e5a541fbdf8270611610ce8517fe30e50622e75 100644 (file)
@@ -73,15 +73,18 @@ if 'UNITTEST' in os.environ:
             except FileNotFoundError:
                 val = None
             mo = [o for o in self.MODULE_OPTIONS if o['name'] == key]
-            if len(mo) == 1 and val is not None:
-                cls = {
-                    'str': str,
-                    'secs': int,
-                    'bool': lambda s: bool(s) and s != 'false' and s != 'False',
-                    'int': int,
-                }[mo[0].get('type', 'str')]
-                return cls(val)
-            return val
+            if len(mo) == 1:
+                if val is not None:
+                    cls = {
+                        'str': str,
+                        'secs': int,
+                        'bool': lambda s: bool(s) and s != 'false' and s != 'False',
+                        'int': int,
+                    }[mo[0].get('type', 'str')]
+                    return cls(val)
+                return val
+            else:
+                return val if val is not None else ''
 
         def _ceph_set_module_option(self, module, key, val):
             _, _, _ = self.check_mon_command({
@@ -165,6 +168,7 @@ if 'UNITTEST' in os.environ:
             self._unconfigure_logging = mock.MagicMock()
             self._ceph_log = mock.MagicMock()
             self._ceph_dispatch_remote = lambda *_: None
+            self._ceph_get_mgr_id = mock.MagicMock()
 
 
     cm = mock.Mock()
index 7cca7da8ec21d9b42c3cff4203cc156f488cbbe3..e86abfe0284b5920913207d08e6bbb80aa74aad4 100644 (file)
@@ -241,6 +241,9 @@ class Cloner(AsyncJobs):
         }
         super(Cloner, self).__init__(volume_client, "cloner", tp_size)
 
+    def reconfigure_max_concurrent_clones(self, tp_size):
+        super(Cloner, self).reconfigure_max_concurrent_clones("cloner", tp_size)
+
     def is_clone_cancelable(self, clone_state):
         return not (OpSm.is_final_state(clone_state) or OpSm.is_failed_state(clone_state))
 
index 3bdedb723b9ce4a0c7b60fd4663b31ae0ea048bc..fb7051f47c24282b07ec51f9149fde6f10243763 100644 (file)
@@ -27,6 +27,7 @@ class JobThread(threading.Thread):
         thread_id = threading.currentThread()
         assert isinstance(thread_id, JobThread)
         thread_name = thread_id.getName()
+        log.debug("thread [{0}] starting".format(thread_name))
 
         while retries < JobThread.MAX_RETRIES_ON_EXCEPTION:
             vol_job = None
@@ -34,6 +35,10 @@ class JobThread(threading.Thread):
                 # fetch next job to execute
                 with self.async_job.lock:
                     while True:
+                        if self.should_reconfigure_num_threads():
+                            log.info("thread [{0}] terminating due to reconfigure".format(thread_name))
+                            self.async_job.threads.remove(self)
+                            return
                         vol_job = self.async_job.get_job()
                         if vol_job:
                             break
@@ -62,6 +67,12 @@ class JobThread(threading.Thread):
                 time.sleep(1)
         log.error("thread [{0}] reached exception limit, bailing out...".format(thread_name))
         self.vc.cluster_log("thread {0} bailing out due to exception".format(thread_name))
+        with self.async_job.lock:
+            self.async_job.threads.remove(self)
+
+    def should_reconfigure_num_threads(self):
+        # reconfigure of max_concurrent_clones
+        return len(self.async_job.threads) > self.async_job.nr_concurrent_jobs
 
     def cancel_job(self):
         self.cancel_event.set()
@@ -103,12 +114,28 @@ class AsyncJobs(object):
         # cv for job cancelation
         self.waiting = False
         self.cancel_cv = threading.Condition(self.lock)
+        self.nr_concurrent_jobs = nr_concurrent_jobs
 
         self.threads = []
         for i in range(nr_concurrent_jobs):
             self.threads.append(JobThread(self, volume_client, name="{0}.{1}".format(name_pfx, i)))
             self.threads[-1].start()
 
+    def reconfigure_max_concurrent_clones(self, name_pfx, nr_concurrent_jobs):
+        """
+        reconfigure number of cloner threads
+        """
+        with self.lock:
+            self.nr_concurrent_jobs = nr_concurrent_jobs
+            # Decrease in concurrency. Notify threads which are waiting for a job to terminate.
+            if len(self.threads) > nr_concurrent_jobs:
+                self.cv.notifyAll()
+            # Increase in concurrency
+            if len(self.threads) < nr_concurrent_jobs:
+                for i in range(len(self.threads), nr_concurrent_jobs):
+                    self.threads.append(JobThread(self, self.vc, name="{0}.{1}.{2}".format(name_pfx, time.time(), i)))
+                    self.threads[-1].start()
+
     def get_job(self):
         log.debug("processing {0} volume entries".format(len(self.q)))
         nr_vols = len(self.q)
index 11bcc5fd9d39c8818dcac83e746aa00c6d4f4853..b18c90d42bbd039071ddb2171ac3d654f0aa39d3 100644 (file)
@@ -29,7 +29,8 @@ def available_clusters(mgr):
     completion = mgr.describe_service(service_type='nfs')
     mgr._orchestrator_wait([completion])
     orchestrator.raise_if_exception(completion)
-    return [cluster.spec.service_id.replace('ganesha-', '', 1) for cluster in completion.result]
+    return [cluster.spec.service_id.replace('ganesha-', '', 1) for cluster in completion.result
+            if cluster.spec.service_id]
 
 
 def export_cluster_checker(func):
@@ -555,7 +556,7 @@ class FSExport(object):
             pseudo_path = self.format_path(pseudo_path)
             if not isabs(pseudo_path) or pseudo_path == "/":
                 return -errno.EINVAL, "", f"pseudo path {pseudo_path} is invalid. "\
-                        "It should not be absolute path or just '/'."
+                        "It should be an absolute path and it cannot be just '/'."
 
             if cluster_id not in self.exports:
                 self.exports[cluster_id] = []
index f5c022935e8faf0b5dccf0a0f8d1bd78738ee974..7ef6923e115c11ea97984d8ebe8a8ceacd42085f 100644 (file)
@@ -1,7 +1,10 @@
 from contextlib import contextmanager
+import logging
 from threading import Lock
 from typing import Dict
 
+log = logging.getLogger(__name__)
+
 # singleton design pattern taken from http://www.aleax.it/5ep.html
 
 class GlobalLock(object):
@@ -33,5 +36,8 @@ class GlobalLock(object):
 
     @contextmanager
     def lock_op(self):
+        log.debug("entering global lock")
         with self._shared_state['lock']:
+            log.debug("acquired global lock")
             yield
+        log.debug("exited global lock")
index 8edaca6def12901b414b7db66c6efeb2efbba153..10197dd3111452a2e621d2b3b7b4807b71b1d933 100644 (file)
@@ -42,8 +42,7 @@ class VolumeClient(object):
         # volume specification
         self.volspec = VolSpec(mgr.rados.conf_get('client_snapdir'))
         self.connection_pool = ConnectionPool(self.mgr)
-        # TODO: make thread pool size configurable
-        self.cloner = Cloner(self, 4)
+        self.cloner = Cloner(self, self.mgr.max_concurrent_clones)
         self.purge_queue = ThreadPoolPurgeQueueMixin(self, 4)
         # on startup, queue purge job for available volumes to kickstart
         # purge for leftover subvolume entries in trash. note that, if the
index 27e31c2c20cadcbe2e01403e1115fd185a058915..9fc2e3043fa0823b0696dc9092ceda4f5be18d45 100644 (file)
@@ -1,5 +1,8 @@
 import errno
 import json
+import logging
+import traceback
+import threading
 
 from mgr_module import MgrModule
 import orchestrator
@@ -7,6 +10,30 @@ import orchestrator
 from .fs.volume import VolumeClient
 from .fs.nfs import NFSCluster, FSExport
 
+log = logging.getLogger(__name__)
+
+class VolumesInfoWrapper():
+    def __init__(self, f, context):
+        self.f = f
+        self.context = context
+    def __enter__(self):
+        log.info("Starting {}".format(self.context))
+    def __exit__(self, exc_type, exc_value, tb):
+        if exc_type is not None:
+            log.error("Failed {}:\n{}".format(self.context, "".join(traceback.format_exception(exc_type, exc_value, tb))))
+        else:
+            log.info("Finishing {}".format(self.context))
+
+def mgr_cmd_wrap(f):
+    def wrap(self, inbuf, cmd):
+        astr = []
+        for k in cmd:
+            astr.append("{}:{}".format(k, cmd[k]))
+        context = "{}({}) < \"{}\"".format(f.__name__, ", ".join(astr), inbuf)
+        with VolumesInfoWrapper(f, context):
+            return f(self, inbuf, cmd)
+    return wrap
+
 class Module(orchestrator.OrchestratorClientMixin, MgrModule):
     COMMANDS = [
         {
@@ -345,11 +372,28 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
         # volume in the lifetime of this module instance.
     ]
 
+    MODULE_OPTIONS = [
+        {
+            'name': 'max_concurrent_clones',
+            'type': 'int',
+            'default': 4,
+            'desc': 'Number of asynchronous cloner threads',
+        }
+    ]
+
     def __init__(self, *args, **kwargs):
+        self.inited = False
+        # for mypy
+        self.max_concurrent_clones = None
+        self.lock = threading.Lock()
         super(Module, self).__init__(*args, **kwargs)
-        self.vc = VolumeClient(self)
-        self.fs_export = FSExport(self)
-        self.nfs = NFSCluster(self)
+        # Initialize config option members
+        self.config_notify()
+        with self.lock:
+            self.vc = VolumeClient(self)
+            self.fs_export = FSExport(self)
+            self.nfs = NFSCluster(self)
+            self.inited = True
 
     def __del__(self):
         self.vc.shutdown()
@@ -357,6 +401,21 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
     def shutdown(self):
         self.vc.shutdown()
 
+    def config_notify(self):
+        """
+        This method is called whenever one of our config options is changed.
+        """
+        with self.lock:
+            for opt in self.MODULE_OPTIONS:
+                setattr(self,
+                        opt['name'],  # type: ignore
+                        self.get_module_option(opt['name']))  # type: ignore
+                self.log.debug(' mgr option %s = %s',
+                               opt['name'], getattr(self, opt['name']))  # type: ignore
+                if self.inited:
+                    if opt['name'] == "max_concurrent_clones":
+                        self.vc.cloner.reconfigure_max_concurrent_clones(self.max_concurrent_clones)
+
     def handle_command(self, inbuf, cmd):
         handler_name = "_cmd_" + cmd['prefix'].replace(" ", "_")
         try:
@@ -366,19 +425,23 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
 
         return handler(inbuf, cmd)
 
+    @mgr_cmd_wrap
     def _cmd_fs_volume_create(self, inbuf, cmd):
         vol_id = cmd['name']
         placement = cmd.get('placement', '')
         return self.vc.create_fs_volume(vol_id, placement)
 
+    @mgr_cmd_wrap
     def _cmd_fs_volume_rm(self, inbuf, cmd):
         vol_name = cmd['vol_name']
         confirm = cmd.get('yes-i-really-mean-it', None)
         return self.vc.delete_fs_volume(vol_name, confirm)
 
+    @mgr_cmd_wrap
     def _cmd_fs_volume_ls(self, inbuf, cmd):
         return self.vc.list_fs_volumes()
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_create(self, inbuf, cmd):
         """
         :return: a 3-tuple of return code(int), empty string(str), error message (str)
@@ -388,6 +451,7 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
             pool_layout=cmd.get('pool_layout', None), mode=cmd.get('mode', '755'),
             uid=cmd.get('uid', None), gid=cmd.get('gid', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_rm(self, inbuf, cmd):
         """
         :return: a 3-tuple of return code(int), empty string(str), error message (str)
@@ -396,9 +460,11 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                                               group_name=cmd['group_name'],
                                               force=cmd.get('force', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_ls(self, inbuf, cmd):
         return self.vc.list_subvolume_groups(vol_name=cmd['vol_name'])
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_create(self, inbuf, cmd):
         """
         :return: a 3-tuple of return code(int), empty string(str), error message (str)
@@ -413,6 +479,7 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                                         mode=cmd.get('mode', '755'),
                                         namespace_isolated=cmd.get('namespace_isolated', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_rm(self, inbuf, cmd):
         """
         :return: a 3-tuple of return code(int), empty string(str), error message (str)
@@ -422,50 +489,60 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                                         group_name=cmd.get('group_name', None),
                                         force=cmd.get('force', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_ls(self, inbuf, cmd):
         return self.vc.list_subvolumes(vol_name=cmd['vol_name'],
                                        group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_getpath(self, inbuf, cmd):
         return self.vc.getpath_subvolume_group(
             vol_name=cmd['vol_name'], group_name=cmd['group_name'])
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_getpath(self, inbuf, cmd):
         return self.vc.subvolume_getpath(vol_name=cmd['vol_name'],
                                          sub_name=cmd['sub_name'],
                                          group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_info(self, inbuf, cmd):
         return self.vc.subvolume_info(vol_name=cmd['vol_name'],
                                       sub_name=cmd['sub_name'],
                                       group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_pin(self, inbuf, cmd):
         return self.vc.pin_subvolume_group(vol_name=cmd['vol_name'],
             group_name=cmd['group_name'], pin_type=cmd['pin_type'],
             pin_setting=cmd['pin_setting'])
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_snapshot_create(self, inbuf, cmd):
         return self.vc.create_subvolume_group_snapshot(vol_name=cmd['vol_name'],
                                                        group_name=cmd['group_name'],
                                                        snap_name=cmd['snap_name'])
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_snapshot_rm(self, inbuf, cmd):
         return self.vc.remove_subvolume_group_snapshot(vol_name=cmd['vol_name'],
                                                        group_name=cmd['group_name'],
                                                        snap_name=cmd['snap_name'],
                                                        force=cmd.get('force', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolumegroup_snapshot_ls(self, inbuf, cmd):
         return self.vc.list_subvolume_group_snapshots(vol_name=cmd['vol_name'],
                                                       group_name=cmd['group_name'])
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_create(self, inbuf, cmd):
         return self.vc.create_subvolume_snapshot(vol_name=cmd['vol_name'],
                                                  sub_name=cmd['sub_name'],
                                                  snap_name=cmd['snap_name'],
                                                  group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_rm(self, inbuf, cmd):
         return self.vc.remove_subvolume_snapshot(vol_name=cmd['vol_name'],
                                                  sub_name=cmd['sub_name'],
@@ -473,77 +550,95 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                                                  group_name=cmd.get('group_name', None),
                                                  force=cmd.get('force', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_info(self, inbuf, cmd):
         return self.vc.subvolume_snapshot_info(vol_name=cmd['vol_name'],
                                                sub_name=cmd['sub_name'],
                                                snap_name=cmd['snap_name'],
                                                group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_ls(self, inbuf, cmd):
         return self.vc.list_subvolume_snapshots(vol_name=cmd['vol_name'],
                                                 sub_name=cmd['sub_name'],
                                                 group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_resize(self, inbuf, cmd):
         return self.vc.resize_subvolume(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'],
                                         new_size=cmd['new_size'], group_name=cmd.get('group_name', None),
                                         no_shrink=cmd.get('no_shrink', False))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_pin(self, inbuf, cmd):
         return self.vc.subvolume_pin(vol_name=cmd['vol_name'],
             sub_name=cmd['sub_name'], pin_type=cmd['pin_type'],
             pin_setting=cmd['pin_setting'],
             group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_protect(self, inbuf, cmd):
         return self.vc.protect_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'],
                                                   snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_unprotect(self, inbuf, cmd):
         return self.vc.unprotect_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'],
                                                     snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_subvolume_snapshot_clone(self, inbuf, cmd):
         return self.vc.clone_subvolume_snapshot(
             vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'],
             group_name=cmd.get('group_name', None), pool_layout=cmd.get('pool_layout', None),
             target_sub_name=cmd['target_sub_name'], target_group_name=cmd.get('target_group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_clone_status(self, inbuf, cmd):
         return self.vc.clone_status(
             vol_name=cmd['vol_name'], clone_name=cmd['clone_name'],  group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_fs_clone_cancel(self, inbuf, cmd):
         return self.vc.clone_cancel(
             vol_name=cmd['vol_name'], clone_name=cmd['clone_name'],  group_name=cmd.get('group_name', None))
 
+    @mgr_cmd_wrap
     def _cmd_nfs_export_create_cephfs(self, inbuf, cmd):
         #TODO Extend export creation for rgw.
         return self.fs_export.create_export(fs_name=cmd['fsname'], cluster_id=cmd['clusterid'],
                 pseudo_path=cmd['binding'], read_only=cmd.get('readonly', False), path=cmd.get('path', '/'))
 
+    @mgr_cmd_wrap
     def _cmd_nfs_export_delete(self, inbuf, cmd):
         return self.fs_export.delete_export(cluster_id=cmd['clusterid'], pseudo_path=cmd['binding'])
 
+    @mgr_cmd_wrap
     def _cmd_nfs_export_ls(self, inbuf, cmd):
         return self.fs_export.list_exports(cluster_id=cmd['clusterid'], detailed=cmd.get('detailed', False))
 
+    @mgr_cmd_wrap
     def _cmd_nfs_export_get(self, inbuf, cmd):
         return self.fs_export.get_export(cluster_id=cmd['clusterid'], pseudo_path=cmd['binding'])
 
+    @mgr_cmd_wrap
     def _cmd_nfs_cluster_create(self, inbuf, cmd):
         return self.nfs.create_nfs_cluster(cluster_id=cmd['clusterid'], export_type=cmd['type'],
                                            placement=cmd.get('placement', None))
 
+    @mgr_cmd_wrap
     def _cmd_nfs_cluster_update(self, inbuf, cmd):
         return self.nfs.update_nfs_cluster(cluster_id=cmd['clusterid'], placement=cmd['placement'])
 
+    @mgr_cmd_wrap
     def _cmd_nfs_cluster_delete(self, inbuf, cmd):
         return self.nfs.delete_nfs_cluster(cluster_id=cmd['clusterid'])
 
+    @mgr_cmd_wrap
     def _cmd_nfs_cluster_ls(self, inbuf, cmd):
         return self.nfs.list_nfs_cluster()
 
+    @mgr_cmd_wrap
     def _cmd_nfs_cluster_info(self, inbuf, cmd):
         return self.nfs.show_nfs_cluster_info(cluster_id=cmd.get('clusterid', None))
 
index cc84e428de946a296000ffc812c67b02d6a93929..d427038fa3107d2cbedf98c28798f4203196f696 100644 (file)
@@ -404,7 +404,7 @@ class Module(MgrModule):
 
     def handle_command(self, inbuf, command):
         if command['prefix'] == 'zabbix config-show':
-            return 0, json.dumps(self.config, index=4, sort_keys=True), ''
+            return 0, json.dumps(self.config, indent=4, sort_keys=True), ''
         elif command['prefix'] == 'zabbix config-set':
             key = command['key']
             value = command['value']
index 8d2052c1783f01d061b0f2c9fe946bf615b050ef..b9fa1abcede93dedd2b07b2f8d5d258d5bb4a211 100644 (file)
@@ -691,10 +691,15 @@ cdef class Rados(object):
         PyEval_InitThreads()
         self.__setup(*args, **kwargs)
 
-    @requires(('rados_id', opt(str_type)), ('name', opt(str_type)), ('clustername', opt(str_type)),
-              ('conffile', opt(str_type)))
+    NO_CONF_FILE = -1
+    "special value that indicates no conffile should be read when creating a mount handle"
+    DEFAULT_CONF_FILES = -2
+    "special value that indicates the default conffiles should be read when creating a mount handle"
+
+    @requires(('rados_id', opt(str_type)), ('name', opt(str_type)),
+              ('clustername', opt(str_type)), ('conffile', (str_type, int)))
     def __setup(self, rados_id=None, name=None, clustername=None,
-                conf_defaults=None, conffile=None, conf=None, flags=0,
+                conf_defaults=None, conffile=NO_CONF_FILE, conf=None, flags=0,
                 context=None):
         self.monitor_callback = None
         self.monitor_callback2 = None
@@ -736,10 +741,11 @@ cdef class Rados(object):
         if conf_defaults:
             for key, value in conf_defaults.items():
                 self.conf_set(key, value)
-        if conffile is not None:
-            # read the default conf file when '' is given
-            if conffile == '':
-                conffile = None
+        if conffile in (self.NO_CONF_FILE, None):
+            pass
+        elif conffile in (self.DEFAULT_CONF_FILES, ''):
+            self.conf_read_file(None)
+        else:
             self.conf_read_file(conffile)
         if conf:
             for key, value in conf.items():
index 72da0ee9fbb35a9216ba1a1b35791e3ebd0c2a32..70d032b478913f4e30940ad47466f0bf5aef6f9c 100644 (file)
@@ -273,6 +273,7 @@ cdef extern from "rbd/librbd.h" nogil:
         _RBD_IMAGE_MIGRATION_STATE_PREPARED "RBD_IMAGE_MIGRATION_STATE_PREPARED"
         _RBD_IMAGE_MIGRATION_STATE_EXECUTING "RBD_IMAGE_MIGRATION_STATE_EXECUTING"
         _RBD_IMAGE_MIGRATION_STATE_EXECUTED "RBD_IMAGE_MIGRATION_STATE_EXECUTED"
+        _RBD_IMAGE_MIGRATION_STATE_ABORTING "RBD_IMAGE_MIGRATION_STATE_ABORTING"
 
     ctypedef struct rbd_image_migration_status_t:
         int64_t source_pool_id
@@ -790,6 +791,7 @@ RBD_IMAGE_MIGRATION_STATE_PREPARING = _RBD_IMAGE_MIGRATION_STATE_PREPARING
 RBD_IMAGE_MIGRATION_STATE_PREPARED = _RBD_IMAGE_MIGRATION_STATE_PREPARED
 RBD_IMAGE_MIGRATION_STATE_EXECUTING = _RBD_IMAGE_MIGRATION_STATE_EXECUTING
 RBD_IMAGE_MIGRATION_STATE_EXECUTED = _RBD_IMAGE_MIGRATION_STATE_EXECUTED
+RBD_IMAGE_MIGRATION_STATE_ABORTING = _RBD_IMAGE_MIGRATION_STATE_ABORTING
 
 RBD_CONFIG_SOURCE_CONFIG = _RBD_CONFIG_SOURCE_CONFIG
 RBD_CONFIG_SOURCE_POOL = _RBD_CONFIG_SOURCE_POOL
index b5cafdb463e62a812c2a51293e106c127fd260a6..81e78df57b42cc02c47f1cad5bd5b64ebf0b2c16 100644 (file)
@@ -4,7 +4,7 @@ from ceph.deployment.inventory import Device
 from ceph.deployment.service_spec import ServiceSpecValidationError, ServiceSpec, PlacementSpec
 
 try:
-    from typing import Optional, List, Dict, Any
+    from typing import Optional, List, Dict, Any, Union
 except ImportError:
     pass
 import six
@@ -160,9 +160,9 @@ class DriveGroupSpec(ServiceSpec):
                  db_slots=None,  # type: Optional[int]
                  wal_slots=None,  # type: Optional[int]
                  osd_id_claims=None,  # type: Optional[Dict[str, List[str]]]
-                 block_db_size=None,  # type: Optional[int]
-                 block_wal_size=None,  # type: Optional[int]
-                 journal_size=None,  # type: Optional[int]
+                 block_db_size=None,  # type: Union[int, str, None]
+                 block_wal_size=None,  # type: Union[int, str, None]
+                 journal_size=None,  # type: Union[int, str, None]
                  service_type=None,  # type: Optional[str]
                  unmanaged=False,  # type: bool
                  filter_logic='AND',  # type: str
@@ -187,13 +187,13 @@ class DriveGroupSpec(ServiceSpec):
         self.journal_devices = journal_devices
 
         #: Set (or override) the "bluestore_block_wal_size" value, in bytes
-        self.block_wal_size = block_wal_size
+        self.block_wal_size: Union[int, str, None] = block_wal_size
 
         #: Set (or override) the "bluestore_block_db_size" value, in bytes
-        self.block_db_size = block_db_size
+        self.block_db_size: Union[int, str, None] = block_db_size
 
         #: set journal_size in bytes
-        self.journal_size = journal_size
+        self.journal_size: Union[int, str, None] = journal_size
 
         #: Number of osd daemons per "DATA" device.
         #: To fully utilize nvme devices multiple osds are required.
@@ -265,12 +265,6 @@ class DriveGroupSpec(ServiceSpec):
                 raise DriveGroupValidationError(
                     "Feature <{}> is not supported".format(applied_filter))
 
-        for key in ('block_wal_size', 'block_db_size', 'journal_size'):
-            if key in json_drive_group:
-                if isinstance(json_drive_group[key], six.string_types):
-                    from ceph.deployment.drive_selection import SizeMatcher
-                    json_drive_group[key] = SizeMatcher.str_to_byte(json_drive_group[key])
-
         try:
             args = {k: (DeviceSelection.from_json(v) if k.endswith('_devices') else v) for k, v in
                     json_drive_group.items()}
@@ -304,10 +298,12 @@ class DriveGroupSpec(ServiceSpec):
             raise DriveGroupValidationError(f"{self.objectstore} is not supported. Must be "
                                             f"one of ('bluestore')")
 
-        if self.block_wal_size is not None and type(self.block_wal_size) != int:
-            raise DriveGroupValidationError('block_wal_size must be of type int')
-        if self.block_db_size is not None and type(self.block_db_size) != int:
-            raise DriveGroupValidationError('block_db_size must be of type int')
+        if self.block_wal_size is not None and type(self.block_wal_size) not in [int, str]:
+            raise DriveGroupValidationError('block_wal_size must be of type int or string')
+        if self.block_db_size is not None and type(self.block_db_size) not in [int, str]:
+            raise DriveGroupValidationError('block_db_size must be of type int or string')
+        if self.journal_size is not None and type(self.journal_size) not in [int, str]:
+            raise DriveGroupValidationError('journal_size must be of type int or string')
 
         if self.filter_logic not in ['AND', 'OR']:
             raise DriveGroupValidationError('filter_logic must be either <AND> or <OR>')
index 921f125616c25fd925a16f74bc6fef6c22273001..e7e2edf7e59941e63f4c08c8e5573a89a3136098 100644 (file)
@@ -17,9 +17,11 @@ class DriveSelection(object):
     def __init__(self,
                  spec,  # type: DriveGroupSpec
                  disks,  # type: List[Device]
+                 existing_daemons=None,  # type: Optional[int]
                  ):
         self.disks = disks.copy()
         self.spec = spec
+        self.existing_daemons = existing_daemons or 0
 
         if self.spec.data_devices.paths:  # type: ignore
             # re: type: ignore there is *always* a path attribute assigned to DeviceSelection
@@ -50,8 +52,7 @@ class DriveSelection(object):
         # type: () -> List[Device]
         return self._journal
 
-    @staticmethod
-    def _limit_reached(device_filter, len_devices,
+    def _limit_reached(self, device_filter, len_devices,
                        disk_path):
         # type: (DeviceSelection, int, str) -> bool
         """ Check for the <limit> property and apply logic
@@ -68,7 +69,7 @@ class DriveSelection(object):
         """
         limit = device_filter.limit or 0
 
-        if limit > 0 and len_devices >= limit:
+        if limit > 0 and (len_devices + self.existing_daemons >= limit):
             logger.info("Refuse to add {} due to limit policy of <{}>".format(
                 disk_path, limit))
             return True
@@ -114,11 +115,6 @@ class DriveSelection(object):
         for disk in self.disks:
             logger.debug("Processing disk {}".format(disk.path))
 
-            if not disk.available:
-                logger.debug(
-                    "Ignoring disk {}. Disk is not available".format(disk.path))
-                continue
-
             if not self._has_mandatory_idents(disk):
                 logger.debug(
                     "Ignoring disk {}. Missing mandatory idents".format(
index 94dcb5024b5bd6ab39fce30398a91cab5ced854d..e2409c932e991e8d9c1dee424235a7004f28d26a 100644 (file)
@@ -40,7 +40,8 @@ class Device(object):
         'sys_api',
         'lvs',
         'human_readable_type',
-        'device_id'
+        'device_id',
+        'lsm_data',
     ]
 
     def __init__(self,
@@ -50,6 +51,7 @@ class Device(object):
                  rejected_reasons=None,  # type: Optional[List[str]]
                  lvs=None,  # type: Optional[List[str]]
                  device_id=None,  # type: Optional[str]
+                 lsm_data=None,  # type: Optional[Dict[str, Dict[str, str]]]
                  ):
         self.path = path
         self.sys_api = sys_api if sys_api is not None else {}  # type: Dict[str, Any]
@@ -57,6 +59,7 @@ class Device(object):
         self.rejected_reasons = rejected_reasons if rejected_reasons is not None else []
         self.lvs = lvs
         self.device_id = device_id
+        self.lsm_data = lsm_data if lsm_data is not None else {}  # type: Dict[str, Dict[str, str]]
 
     def to_json(self):
         # type: () -> dict
index a2518867a0721e3b9b7e04ed479470cb961eea63..f4c7e95c31beb1549c364884d5d3604a581b1d12 100644 (file)
@@ -3,12 +3,13 @@ import fnmatch
 import re
 from collections import namedtuple, OrderedDict
 from functools import wraps
-from typing import Optional, Dict, Any, List, Union, Callable, Iterator
+from typing import Optional, Dict, Any, List, Union, Callable, Iterable
 
 import six
 import yaml
 
 from ceph.deployment.hostspec import HostSpec
+from ceph.deployment.utils import unwrap_ipv6
 
 
 class ServiceSpecValidationError(Exception):
@@ -59,14 +60,12 @@ class HostPlacementSpec(namedtuple('HostPlacementSpec', ['hostname', 'network',
     @classmethod
     @handle_type_error
     def from_json(cls, data):
+        if isinstance(data, str):
+            return cls.parse(data)
         return cls(**data)
 
-    def to_json(self):
-        return {
-            'hostname': self.hostname,
-            'network': self.network,
-            'name': self.name
-        }
+    def to_json(self) -> str:
+        return str(self)
 
     @classmethod
     def parse(cls, host, require_network=True):
@@ -122,13 +121,16 @@ class HostPlacementSpec(namedtuple('HostPlacementSpec', ['hostname', 'network',
         for network in networks:
             # only if we have versioned network configs
             if network.startswith('v') or network.startswith('[v'):
-                network = network.split(':')[1]
+                # if this is ipv6 we can't just simply split on ':' so do
+                # a split once and rsplit once to leave us with just ipv6 addr
+                network = network.split(':', 1)[1]
+                network = network.rsplit(':', 1)[0]
             try:
                 # if subnets are defined, also verify the validity
                 if '/' in network:
                     ip_network(six.text_type(network))
                 else:
-                    ip_address(six.text_type(network))
+                    ip_address(unwrap_ipv6(network))
             except ValueError as e:
                 # logging?
                 raise e
@@ -187,10 +189,11 @@ class PlacementSpec(object):
             self.hosts = [HostPlacementSpec.parse(x, require_network=False)  # type: ignore
                           for x in hosts if x]
 
+    # deprecated
     def filter_matching_hosts(self, _get_hosts_func: Callable) -> List[str]:
         return self.filter_matching_hostspecs(_get_hosts_func(as_hostspec=True))
 
-    def filter_matching_hostspecs(self, hostspecs: Iterator[HostSpec]) -> List[str]:
+    def filter_matching_hostspecs(self, hostspecs: Iterable[HostSpec]) -> List[str]:
         if self.hosts:
             all_hosts = [hs.hostname for hs in hostspecs]
             return [h.hostname for h in self.hosts if h.hostname in all_hosts]
@@ -204,22 +207,27 @@ class PlacementSpec(object):
             # get_host_selection_size
             return []
 
-    def get_host_selection_size(self, hostspecs: Iterator[HostSpec]):
+    def get_host_selection_size(self, hostspecs: Iterable[HostSpec]):
         if self.count:
             return self.count
         return len(self.filter_matching_hostspecs(hostspecs))
 
     def pretty_str(self):
+        """
+        >>> #doctest: +SKIP
+        ... ps = PlacementSpec(...)  # For all placement specs:
+        ... PlacementSpec.from_string(ps.pretty_str()) == ps
+        """
         kv = []
+        if self.hosts:
+            kv.append(';'.join([str(h) for h in self.hosts]))
         if self.count:
             kv.append('count:%d' % self.count)
         if self.label:
             kv.append('label:%s' % self.label)
-        if self.hosts:
-            kv.append('%s' % ','.join([str(h) for h in self.hosts]))
         if self.host_pattern:
             kv.append(self.host_pattern)
-        return ' '.join(kv)
+        return ';'.join(kv)
 
     def __repr__(self):
         kv = []
@@ -241,9 +249,7 @@ class PlacementSpec(object):
         if hosts:
             c['hosts'] = []
             for host in hosts:
-                c['hosts'].append(HostPlacementSpec.parse(host) if
-                                  isinstance(host, str) else
-                                  HostPlacementSpec.from_json(host))
+                c['hosts'].append(HostPlacementSpec.from_json(host))
         _cls = cls(**c)
         _cls.validate()
         return _cls
@@ -375,8 +381,9 @@ class ServiceSpec(object):
 
     """
     KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi mds mgr mon nfs ' \
-                          'node-exporter osd prometheus rbd-mirror rgw'.split()
-    REQUIRES_SERVICE_ID = 'iscsi mds nfs osd rgw'.split()
+                          'node-exporter osd prometheus rbd-mirror rgw ' \
+                          'container'.split()
+    REQUIRES_SERVICE_ID = 'iscsi mds nfs osd rgw container'.split()
 
     @classmethod
     def _cls(cls, service_type):
@@ -387,7 +394,8 @@ class ServiceSpec(object):
             'nfs': NFSServiceSpec,
             'osd': DriveGroupSpec,
             'iscsi': IscsiServiceSpec,
-            'alertmanager': AlertManagerSpec
+            'alertmanager': AlertManagerSpec,
+            'container': CustomContainerSpec,
         }.get(service_type, cls)
         if ret == ServiceSpec and not service_type:
             raise ServiceSpecValidationError('Spec needs a "service_type" key.')
@@ -585,8 +593,6 @@ class NFSServiceSpec(ServiceSpec):
         #: RADOS namespace where NFS client recovery data is stored in the pool.
         self.namespace = namespace
 
-        self.preview_only = preview_only
-
     def validate(self):
         super(NFSServiceSpec, self).validate()
 
@@ -656,7 +662,6 @@ class RGWSpec(ServiceSpec):
         self.rgw_frontend_ssl_certificate = rgw_frontend_ssl_certificate
         self.rgw_frontend_ssl_key = rgw_frontend_ssl_key
         self.ssl = ssl
-        self.preview_only = preview_only
 
     def get_port(self):
         if self.rgw_frontend_port:
@@ -720,7 +725,6 @@ class IscsiServiceSpec(ServiceSpec):
         self.api_secure = api_secure
         self.ssl_cert = ssl_cert
         self.ssl_key = ssl_key
-        self.preview_only = preview_only
 
         if not self.api_secure and self.ssl_cert and self.ssl_key:
             self.api_secure = True
@@ -775,3 +779,67 @@ class AlertManagerSpec(ServiceSpec):
 
 
 yaml.add_representer(AlertManagerSpec, ServiceSpec.yaml_representer)
+
+
+class CustomContainerSpec(ServiceSpec):
+    def __init__(self,
+                 service_type: str = 'container',
+                 service_id: str = None,
+                 placement: Optional[PlacementSpec] = None,
+                 unmanaged: bool = False,
+                 preview_only: bool = False,
+                 image: str = None,
+                 entrypoint: Optional[str] = None,
+                 uid: Optional[int] = None,
+                 gid: Optional[int] = None,
+                 volume_mounts: Optional[Dict[str, str]] = {},
+                 args: Optional[List[str]] = [],
+                 envs: Optional[List[str]] = [],
+                 privileged: Optional[bool] = False,
+                 bind_mounts: Optional[List[List[str]]] = None,
+                 ports: Optional[List[int]] = [],
+                 dirs: Optional[List[str]] = [],
+                 files: Optional[Dict[str, Any]] = {},
+                 ):
+        assert service_type == 'container'
+        assert service_id is not None
+        assert image is not None
+
+        super(CustomContainerSpec, self).__init__(
+            service_type, service_id,
+            placement=placement, unmanaged=unmanaged,
+            preview_only=preview_only)
+
+        self.image = image
+        self.entrypoint = entrypoint
+        self.uid = uid
+        self.gid = gid
+        self.volume_mounts = volume_mounts
+        self.args = args
+        self.envs = envs
+        self.privileged = privileged
+        self.bind_mounts = bind_mounts
+        self.ports = ports
+        self.dirs = dirs
+        self.files = files
+
+    def config_json(self) -> Dict[str, Any]:
+        """
+        Helper function to get the value of the `--config-json` cephadm
+        command line option. It will contain all specification properties
+        that haven't a `None` value. Such properties will get default
+        values in cephadm.
+        :return: Returns a dictionary containing all specification
+            properties.
+        """
+        config_json = {}
+        for prop in ['image', 'entrypoint', 'uid', 'gid', 'args',
+                     'envs', 'volume_mounts', 'privileged',
+                     'bind_mounts', 'ports', 'dirs', 'files']:
+            value = getattr(self, prop)
+            if value is not None:
+                config_json[prop] = value
+        return config_json
+
+
+yaml.add_representer(CustomContainerSpec, ServiceSpec.yaml_representer)
index c2f030d2cb26fa00885d5126dd207d273b835f3d..e5d59816626477877c132bbfce7ffb4a605bf4b2 100644 (file)
@@ -50,24 +50,6 @@ class to_ceph_volume(object):
 
             cmd += " --filestore"
 
-        # HORRIBLE HACK
-        if self.spec.objectstore == 'bluestore' and \
-           not self.spec.encrypted and \
-           not self.spec.osds_per_device and \
-           len(data_devices) == 1 and \
-           not db_devices and \
-           not wal_devices:
-            cmd = "lvm prepare --bluestore --data %s --no-systemd" % (' '.join(data_devices))
-            if self.osd_id_claims:
-                cmd += " --osd-id {}".format(str(self.osd_id_claims[0]))
-            if self.preview:
-                # Like every horrible hack, this has sideffects on other features.
-                # In this case, 'lvm prepare' has neither a '--report' nor a '--format json' option
-                # which essentially doesn't allow for a proper previews here.
-                # Fall back to lvm batch in order to get a preview.
-                return f"lvm batch --no-auto {' '.join(data_devices)} --report --format json"
-            return cmd
-
         if self.spec.objectstore == 'bluestore':
 
             cmd = "lvm batch --no-auto {}".format(" ".join(data_devices))
diff --git a/ceph/src/python-common/ceph/deployment/utils.py b/ceph/src/python-common/ceph/deployment/utils.py
new file mode 100644 (file)
index 0000000..075aa8f
--- /dev/null
@@ -0,0 +1,32 @@
+import ipaddress
+
+
+def unwrap_ipv6(address):
+    # type: (str) -> str
+    if address.startswith('[') and address.endswith(']'):
+        return address[1:-1]
+    return address
+
+
+def wrap_ipv6(address):
+    # type: (str) -> str
+
+    # We cannot assume it's already wrapped or even an IPv6 address if
+    # it's already wrapped it'll not pass (like if it's a hostname) and trigger
+    # the ValueError
+    try:
+        if ipaddress.ip_address(address).version == 6:
+            return f"[{address}]"
+    except ValueError:
+        pass
+
+    return address
+
+
+def is_ipv6(address):
+    # type: (str) -> bool
+    address = unwrap_ipv6(address)
+    try:
+        return ipaddress.ip_address(address).version == 6
+    except ValueError:
+        return False
index 6931544d45313071b72a018cbd6e305bb20ae541..579b03f0c5d4974de4621e262cd7e6dfe9c91c11 100644 (file)
@@ -3,7 +3,8 @@ import pytest
 
 from ceph.deployment.inventory import Devices, Device
 
-from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
+from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection, \
+        DriveGroupValidationError
 
 from ceph.deployment import drive_selection
 from ceph.deployment.service_spec import PlacementSpec
@@ -277,6 +278,7 @@ class TestDriveGroup(object):
                              disk_format='bluestore'):
             raw_sample_bluestore = {
                 'service_type': 'osd',
+                'service_id': 'foo',
                 'placement': {'host_pattern': 'data*'},
                 'data_devices': {
                     'size': '30G:50G',
@@ -302,6 +304,7 @@ class TestDriveGroup(object):
             }
             raw_sample_filestore = {
                 'service_type': 'osd',
+                'service_id': 'foo',
                 'placement': {'host_pattern': 'data*'},
                 'objectstore': 'filestore',
                 'data_devices': {
@@ -325,6 +328,7 @@ class TestDriveGroup(object):
             if empty:
                 raw_sample = {
                     'service_type': 'osd',
+                    'service_id': 'foo',
                     'placement': {'host_pattern': 'data*'},
                     'data_devices': {
                         'all': True
@@ -332,6 +336,11 @@ class TestDriveGroup(object):
                 }
 
             dgo = DriveGroupSpec.from_json(raw_sample)
+            if disk_format == 'filestore':
+                with pytest.raises(DriveGroupValidationError):
+                    dgo.validate()
+            else:
+                dgo.validate()
             return dgo
 
         return make_sample_data
@@ -362,7 +371,7 @@ class TestDriveGroup(object):
 
     def test_block_wal_size_prop(self, test_fix):
         test_fix = test_fix()
-        assert test_fix.block_wal_size == 5000000000
+        assert test_fix.block_wal_size == '5G'
 
     def test_block_wal_size_prop_empty(self, test_fix):
         test_fix = test_fix(empty=True)
@@ -370,7 +379,7 @@ class TestDriveGroup(object):
 
     def test_block_db_size_prop(self, test_fix):
         test_fix = test_fix()
-        assert test_fix.block_db_size == 10000000000
+        assert test_fix.block_db_size == '10G'
 
     def test_block_db_size_prop_empty(self, test_fix):
         test_fix = test_fix(empty=True)
@@ -431,7 +440,7 @@ class TestDriveGroup(object):
 
     def test_journal_size(self, test_fix):
         test_fix = test_fix(disk_format='filestore')
-        assert test_fix.journal_size == 5000000000
+        assert test_fix.journal_size == '5G'
 
     def test_osds_per_device(self, test_fix):
         test_fix = test_fix(osds_per_device='3')
@@ -489,13 +498,17 @@ class TestDriveSelection(object):
 
     testdata = [
         (
-            DriveGroupSpec(placement=PlacementSpec(host_pattern='*'), data_devices=DeviceSelection(all=True)),
+            DriveGroupSpec(
+                placement=PlacementSpec(host_pattern='*'),
+                service_id='foobar',
+                data_devices=DeviceSelection(all=True)),
             _mk_inventory(_mk_device() * 5),
             ['/dev/sda', '/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde'], []
         ),
         (
             DriveGroupSpec(
                 placement=PlacementSpec(host_pattern='*'),
+                service_id='foobar',
                 data_devices=DeviceSelection(all=True, limit=3),
                 db_devices=DeviceSelection(all=True)
             ),
@@ -505,6 +518,7 @@ class TestDriveSelection(object):
         (
             DriveGroupSpec(
                 placement=PlacementSpec(host_pattern='*'),
+                service_id='foobar',
                 data_devices=DeviceSelection(rotational=True),
                 db_devices=DeviceSelection(rotational=False)
             ),
@@ -514,6 +528,7 @@ class TestDriveSelection(object):
         (
             DriveGroupSpec(
                 placement=PlacementSpec(host_pattern='*'),
+                service_id='foobar',
                 data_devices=DeviceSelection(rotational=True),
                 db_devices=DeviceSelection(rotational=False)
             ),
@@ -523,6 +538,7 @@ class TestDriveSelection(object):
         (
             DriveGroupSpec(
                 placement=PlacementSpec(host_pattern='*'),
+                service_id='foobar',
                 data_devices=DeviceSelection(rotational=True),
                 db_devices=DeviceSelection(rotational=False)
             ),
index 85b2f3c217cd55ca9c8a3e8b5edf53a2e4bfdfb6..a98c178e7d37335ec5e1d517c41df2ad86201286 100644 (file)
@@ -63,13 +63,19 @@ def test_DriveGroup_fail(test_input):
 
 
 def test_drivegroup_pattern():
-    dg = DriveGroupSpec(PlacementSpec(host_pattern='node[1-3]'), data_devices=DeviceSelection(all=True))
+    dg = DriveGroupSpec(
+        PlacementSpec(host_pattern='node[1-3]'),
+        service_id='foobar',
+        data_devices=DeviceSelection(all=True))
     assert dg.placement.filter_matching_hostspecs([HostSpec('node{}'.format(i)) for i in range(10)]) == ['node1', 'node2', 'node3']
 
 
 def test_drive_selection():
     devs = DeviceSelection(paths=['/dev/sda'])
-    spec = DriveGroupSpec(PlacementSpec('node_name'), data_devices=devs)
+    spec = DriveGroupSpec(
+        PlacementSpec('node_name'),
+        service_id='foobar',
+        data_devices=devs)
     assert all([isinstance(x, Device) for x in spec.data_devices.paths])
     assert spec.data_devices.paths[0].path == '/dev/sda'
 
@@ -79,8 +85,10 @@ def test_drive_selection():
 
 def test_ceph_volume_command_0():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(all=True)
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device()*2)
     sel = drive_selection.DriveSelection(spec, inventory)
     cmd = translate.to_ceph_volume(sel, []).run()
@@ -89,9 +97,11 @@ def test_ceph_volume_command_0():
 
 def test_ceph_volume_command_1():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(rotational=True),
                           db_devices=DeviceSelection(rotational=False)
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True)*2 + _mk_device(rotational=False)*2)
     sel = drive_selection.DriveSelection(spec, inventory)
     cmd = translate.to_ceph_volume(sel, []).run()
@@ -101,10 +111,12 @@ def test_ceph_volume_command_1():
 
 def test_ceph_volume_command_2():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(size='200GB:350GB', rotational=True),
                           db_devices=DeviceSelection(size='200GB:350GB', rotational=False),
                           wal_devices=DeviceSelection(size='10G')
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True, size="300.00 GB")*2 +
                               _mk_device(rotational=False, size="300.00 GB")*2 +
                               _mk_device(size="10.0 GB", rotational=False)*2
@@ -118,11 +130,13 @@ def test_ceph_volume_command_2():
 
 def test_ceph_volume_command_3():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(size='200GB:350GB', rotational=True),
                           db_devices=DeviceSelection(size='200GB:350GB', rotational=False),
                           wal_devices=DeviceSelection(size='10G'),
                           encrypted=True
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True, size="300.00 GB")*2 +
                               _mk_device(rotational=False, size="300.00 GB")*2 +
                               _mk_device(size="10.0 GB", rotational=False)*2
@@ -137,6 +151,7 @@ def test_ceph_volume_command_3():
 
 def test_ceph_volume_command_4():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(size='200GB:350GB', rotational=True),
                           db_devices=DeviceSelection(size='200GB:350GB', rotational=False),
                           wal_devices=DeviceSelection(size='10G'),
@@ -145,6 +160,7 @@ def test_ceph_volume_command_4():
                           osds_per_device=3,
                           encrypted=True
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True, size="300.00 GB")*2 +
                               _mk_device(rotational=False, size="300.00 GB")*2 +
                               _mk_device(size="10.0 GB", rotational=False)*2
@@ -159,9 +175,12 @@ def test_ceph_volume_command_4():
 
 def test_ceph_volume_command_5():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(rotational=True),
                           objectstore='filestore'
                           )
+    with pytest.raises(DriveGroupValidationError):
+        spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True)*2)
     sel = drive_selection.DriveSelection(spec, inventory)
     cmd = translate.to_ceph_volume(sel, []).run()
@@ -170,11 +189,14 @@ def test_ceph_volume_command_5():
 
 def test_ceph_volume_command_6():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(rotational=False),
                           journal_devices=DeviceSelection(rotational=True),
                           journal_size='500M',
                           objectstore='filestore'
                           )
+    with pytest.raises(DriveGroupValidationError):
+        spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True)*2 + _mk_device(rotational=False)*2)
     sel = drive_selection.DriveSelection(spec, inventory)
     cmd = translate.to_ceph_volume(sel, []).run()
@@ -185,9 +207,11 @@ def test_ceph_volume_command_6():
 
 def test_ceph_volume_command_7():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(all=True),
                           osd_id_claims={'host1': ['0', '1']}
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True)*2)
     sel = drive_selection.DriveSelection(spec, inventory)
     cmd = translate.to_ceph_volume(sel, ['0', '1']).run()
@@ -196,11 +220,13 @@ def test_ceph_volume_command_7():
 
 def test_ceph_volume_command_8():
     spec = DriveGroupSpec(placement=PlacementSpec(host_pattern='*'),
+                          service_id='foobar',
                           data_devices=DeviceSelection(rotational=True, model='INTEL SSDS'),
                           db_devices=DeviceSelection(model='INTEL SSDP'),
                           filter_logic='OR',
                           osd_id_claims={}
                           )
+    spec.validate()
     inventory = _mk_inventory(_mk_device(rotational=True,  size='1.82 TB',  model='ST2000DM001-1ER1') +  # data
                               _mk_device(rotational=False, size="223.0 GB", model='INTEL SSDSC2KG24') +  # data
                               _mk_device(rotational=False, size="349.0 GB", model='INTEL SSDPED1K375GA')  # wal/db
index 2d923c6c7d24135ac653f35fbb28dafe0d6ddb93..1d4bbf1e95d4387579d123f8997395d85619b176 100644 (file)
@@ -26,6 +26,21 @@ def test_parse_host_placement_specs(test_input, expected, require_network):
     assert ret == expected
     assert str(ret) == test_input
 
+    ps = PlacementSpec.from_string(test_input)
+    assert ps.pretty_str() == test_input
+    assert ps == PlacementSpec.from_string(ps.pretty_str())
+
+    # Testing the old verbose way of generating json. Don't remove:
+    assert ret == HostPlacementSpec.from_json({
+            'hostname': ret.hostname,
+            'network': ret.network,
+            'name': ret.name
+        })
+
+    assert ret == HostPlacementSpec.from_json(ret.to_json())
+
+
+
 
 @pytest.mark.parametrize(
     "test_input,expected",
@@ -51,6 +66,7 @@ def test_parse_host_placement_specs(test_input, expected, require_network):
 def test_parse_placement_specs(test_input, expected):
     ret = PlacementSpec.from_string(test_input)
     assert str(ret) == expected
+    assert PlacementSpec.from_string(ret.pretty_str()) == ret, f'"{ret.pretty_str()}" != "{test_input}"'
 
 @pytest.mark.parametrize(
     "test_input",
@@ -141,9 +157,7 @@ service_id: default-rgw-realm.eu-central-1.1
 service_name: rgw.default-rgw-realm.eu-central-1.1
 placement:
   hosts:
-  - hostname: ceph-001
-    name: ''
-    network: ''
+  - ceph-001
 spec:
   rgw_realm: default-rgw-realm
   rgw_zone: eu-central-1
diff --git a/ceph/src/python-common/ceph/tests/test_utils.py b/ceph/src/python-common/ceph/tests/test_utils.py
new file mode 100644 (file)
index 0000000..fff67e1
--- /dev/null
@@ -0,0 +1,37 @@
+from ceph.deployment.utils import is_ipv6, unwrap_ipv6, wrap_ipv6
+
+
+def test_is_ipv6():
+    for good in ("[::1]", "::1",
+                 "fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"):
+        assert is_ipv6(good)
+    for bad in ("127.0.0.1",
+                "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffg",
+                "1:2:3:4:5:6:7:8:9", "fd00::1::1", "[fg::1]"):
+        assert not is_ipv6(bad)
+
+
+def test_unwrap_ipv6():
+    def unwrap_test(address, expected):
+        assert unwrap_ipv6(address) == expected
+
+    tests = [
+        ('::1', '::1'), ('[::1]', '::1'),
+        ('[fde4:8dba:82e1:0:5054:ff:fe6a:357]', 'fde4:8dba:82e1:0:5054:ff:fe6a:357'),
+        ('can actually be any string', 'can actually be any string'),
+        ('[but needs to be stripped] ', '[but needs to be stripped] ')]
+    for address, expected in tests:
+        unwrap_test(address, expected)
+
+
+def test_wrap_ipv6():
+    def wrap_test(address, expected):
+        assert wrap_ipv6(address) == expected
+
+    tests = [
+        ('::1', '[::1]'), ('[::1]', '[::1]'),
+        ('fde4:8dba:82e1:0:5054:ff:fe6a:357', '[fde4:8dba:82e1:0:5054:ff:fe6a:357]'),
+        ('myhost.example.com', 'myhost.example.com'), ('192.168.0.1', '192.168.0.1'),
+        ('', ''), ('fd00::1::1', 'fd00::1::1')]
+    for address, expected in tests:
+        wrap_test(address, expected)
index c4555ca9c1a024eb8d33b6100913565322cf05fb..95145ac6e2643f2d68dc8557ab576ecec7e8ed44 100644 (file)
@@ -145,10 +145,12 @@ set(librgw_common_srcs
   rgw_sts.cc
   rgw_rest_sts.cc
   rgw_perf_counters.cc
+  rgw_rest_oidc_provider.cc
   rgw_rest_iam.cc
   rgw_object_lock.cc
   rgw_kms.cc
-  rgw_url.cc)
+  rgw_url.cc
+  rgw_oidc_provider)
 
 if(WITH_RADOSGW_AMQP_ENDPOINT)
   list(APPEND librgw_common_srcs rgw_amqp.cc)
@@ -162,6 +164,7 @@ add_library(rgw_common OBJECT ${librgw_common_srcs})
 target_include_directories(rgw_common SYSTEM PUBLIC "services")
 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/fmt/include")
+target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
 
 if(WITH_BOOST_CONTEXT)
   target_include_directories(rgw_common PRIVATE
@@ -220,6 +223,7 @@ add_dependencies(rgw_a civetweb_h)
 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
 target_include_directories(rgw_a PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
 target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include")
+target_include_directories(rgw_a SYSTEM PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
 
 if(WITH_RADOSGW_AMQP_ENDPOINT)
   find_package(RabbitMQ REQUIRED)
@@ -393,45 +397,6 @@ set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
   SOVERSION 2)
 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
-set(librgw_admin_user_srcs
-  librgw_admin_user.cc
-  rgw_admin_user.cc
-)
-add_library(rgw_admin_user SHARED
-    ${librgw_admin_user_srcs}
-    $<TARGET_OBJECTS:rgw_common>)
-
-add_dependencies(rgw_admin_user civetweb_h)
-
-target_link_libraries(rgw_admin_user PRIVATE
-  librados
-  cls_rgw_client
-  cls_otp_client
-  cls_lock_client
-  cls_refcount_client
-  cls_log_client
-  cls_timeindex_client
-  cls_version_client
-  cls_user_client
-  cls_rgw_gc_client
-  global
-  ${CURL_LIBRARIES}
-  ${EXPAT_LIBRARIES}
-  ${OPENLDAP_LIBRARIES}
-  dmclock::dmclock)
-set_target_properties(rgw_admin_user PROPERTIES OUTPUT_NAME rgw_admin_user VERSION 1.0.0
-  SOVERSION 0)
-install(TARGETS rgw_admin_user DESTINATION ${CMAKE_INSTALL_LIBDIR})
-if(WITH_RADOSGW_AMQP_ENDPOINT)
-  target_link_libraries(rgw_admin_user PRIVATE RabbitMQ::RabbitMQ)
-endif()
-if(WITH_RADOSGW_KAFKA_ENDPOINT)
-  target_link_libraries(rgw_admin_user PRIVATE RDKafka::RDKafka)
-endif()
-if(WITH_BOOST_CONTEXT)
-  target_link_libraries(rgw_admin_user PRIVATE spawn)
-endif()
-
 if(WITH_TESTS)
   add_executable(ceph_rgw_jsonparser
     rgw_jsonparser.cc)
diff --git a/ceph/src/rgw/jwt-cpp/base.h b/ceph/src/rgw/jwt-cpp/base.h
new file mode 100644 (file)
index 0000000..dfca7fc
--- /dev/null
@@ -0,0 +1,168 @@
+#pragma once
+#include <string>
+#include <array>
+
+namespace jwt {
+       namespace alphabet {
+               struct base64 {
+                       static const std::array<char, 64>& data() {
+                            static std::array<char, 64> data = {
+                                {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+                                 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+                                 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+                                 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}};
+                            return data;
+                       };
+                       static const std::string& fill() {
+                               static std::string fill = "=";
+                               return fill;
+                       }
+               };
+               struct base64url {
+                       static const std::array<char, 64>& data() {
+                            static std::array<char, 64> data = {
+                                {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+                                 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+                                 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+                                 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'}};
+                            return data;
+                       };
+                       static const std::string& fill() {
+                               static std::string fill = "%3d";
+                               return fill;
+                       }
+               };
+       }
+
+       class base {
+       public:
+               template<typename T>
+               static std::string encode(const std::string& bin) {
+                       return encode(bin, T::data(), T::fill());
+               }
+               template<typename T>
+               static std::string decode(const std::string& base) {
+                       return decode(base, T::data(), T::fill());
+               }
+
+       private:
+               static std::string encode(const std::string& bin, const std::array<char, 64>& alphabet, const std::string& fill) {
+                       size_t size = bin.size();
+                       std::string res;
+
+                       // clear incomplete bytes
+                       size_t fast_size = size - size % 3;
+                       for (size_t i = 0; i < fast_size;) {
+                               uint32_t octet_a = (unsigned char)bin[i++];
+                               uint32_t octet_b = (unsigned char)bin[i++];
+                               uint32_t octet_c = (unsigned char)bin[i++];
+
+                               uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
+
+                               res += alphabet[(triple >> 3 * 6) & 0x3F];
+                               res += alphabet[(triple >> 2 * 6) & 0x3F];
+                               res += alphabet[(triple >> 1 * 6) & 0x3F];
+                               res += alphabet[(triple >> 0 * 6) & 0x3F];
+                       }
+
+                       if (fast_size == size)
+                               return res;
+
+                       size_t mod = size % 3;
+
+                       uint32_t octet_a = fast_size < size ? (unsigned char)bin[fast_size++] : 0;
+                       uint32_t octet_b = fast_size < size ? (unsigned char)bin[fast_size++] : 0;
+                       uint32_t octet_c = fast_size < size ? (unsigned char)bin[fast_size++] : 0;
+
+                       uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
+
+                       switch (mod) {
+                       case 1:
+                               res += alphabet[(triple >> 3 * 6) & 0x3F];
+                               res += alphabet[(triple >> 2 * 6) & 0x3F];
+                               res += fill;
+                               res += fill;
+                               break;
+                       case 2:
+                               res += alphabet[(triple >> 3 * 6) & 0x3F];
+                               res += alphabet[(triple >> 2 * 6) & 0x3F];
+                               res += alphabet[(triple >> 1 * 6) & 0x3F];
+                               res += fill;
+                               break;
+                       default:
+                               break;
+                       }
+
+                       return res;
+               }
+
+               static std::string decode(const std::string& base, const std::array<char, 64>& alphabet, const std::string& fill) {
+                       size_t size = base.size();
+
+                       size_t fill_cnt = 0;
+                       while (size > fill.size()) {
+                               if (base.substr(size - fill.size(), fill.size()) == fill) {
+                                       fill_cnt++;
+                                       size -= fill.size();
+                                       if(fill_cnt > 2)
+                                               throw std::runtime_error("Invalid input");
+                               }
+                               else break;
+                       }
+
+                       if ((size + fill_cnt) % 4 != 0)
+                               throw std::runtime_error("Invalid input");
+
+                       size_t out_size = size / 4 * 3;
+                       std::string res;
+                       res.reserve(out_size);
+
+                       auto get_sextet = [&](size_t offset) {
+                               for (size_t i = 0; i < alphabet.size(); i++) {
+                                       if (alphabet[i] == base[offset])
+                                               return i;
+                               }
+                               throw std::runtime_error("Invalid input");
+                       };
+
+                       
+                       size_t fast_size = size - size % 4;
+                       for (size_t i = 0; i < fast_size;) {
+                               uint32_t sextet_a = get_sextet(i++);
+                               uint32_t sextet_b = get_sextet(i++);
+                               uint32_t sextet_c = get_sextet(i++);
+                               uint32_t sextet_d = get_sextet(i++);
+
+                               uint32_t triple = (sextet_a << 3 * 6)
+                                       + (sextet_b << 2 * 6)
+                                       + (sextet_c << 1 * 6)
+                                       + (sextet_d << 0 * 6);
+
+                               res += (triple >> 2 * 8) & 0xFF;
+                               res += (triple >> 1 * 8) & 0xFF;
+                               res += (triple >> 0 * 8) & 0xFF;
+                       }
+
+                       if (fill_cnt == 0)
+                               return res;
+
+                       uint32_t triple = (get_sextet(fast_size) << 3 * 6)
+                               + (get_sextet(fast_size + 1) << 2 * 6);
+
+                       switch (fill_cnt) {
+                       case 1:
+                               triple |= (get_sextet(fast_size + 2) << 1 * 6);
+                               res += (triple >> 2 * 8) & 0xFF;
+                               res += (triple >> 1 * 8) & 0xFF;
+                               break;
+                       case 2:
+                               res += (triple >> 2 * 8) & 0xFF;
+                               break;
+                       default:
+                               break;
+                       }
+
+                       return res;
+               }
+       };
+}
diff --git a/ceph/src/rgw/jwt-cpp/jwt.h b/ceph/src/rgw/jwt-cpp/jwt.h
new file mode 100644 (file)
index 0000000..3d84386
--- /dev/null
@@ -0,0 +1,1605 @@
+#pragma once
+#define PICOJSON_USE_INT64
+#include "picojson/picojson.h"
+#include "base.h"
+#include <set>
+#include <chrono>
+#include <unordered_map>
+#include <memory>
+#include <openssl/evp.h>
+#include <openssl/hmac.h>
+#include <openssl/pem.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+
+//If openssl version less than 1.1
+#if OPENSSL_VERSION_NUMBER < 269484032
+#define OPENSSL10
+#endif
+
+#ifndef JWT_CLAIM_EXPLICIT
+#define JWT_CLAIM_EXPLICIT 1
+#endif
+
+namespace jwt {
+       using date = std::chrono::system_clock::time_point;
+
+       struct signature_verification_exception : public std::runtime_error {
+               signature_verification_exception()
+                       : std::runtime_error("signature verification failed")
+               {}
+               explicit signature_verification_exception(const std::string& msg)
+                       : std::runtime_error(msg)
+               {}
+               explicit signature_verification_exception(const char* msg)
+                       : std::runtime_error(msg)
+               {}
+       };
+       struct signature_generation_exception : public std::runtime_error {
+               signature_generation_exception()
+                       : std::runtime_error("signature generation failed")
+               {}
+               explicit signature_generation_exception(const std::string& msg)
+                       : std::runtime_error(msg)
+               {}
+               explicit signature_generation_exception(const char* msg)
+                       : std::runtime_error(msg)
+               {}
+       };
+       struct rsa_exception : public std::runtime_error {
+               explicit rsa_exception(const std::string& msg)
+                       : std::runtime_error(msg)
+               {}
+               explicit rsa_exception(const char* msg)
+                       : std::runtime_error(msg)
+               {}
+       };
+       struct ecdsa_exception : public std::runtime_error {
+               explicit ecdsa_exception(const std::string& msg)
+                       : std::runtime_error(msg)
+               {}
+               explicit ecdsa_exception(const char* msg)
+                       : std::runtime_error(msg)
+               {}
+       };
+       struct token_verification_exception : public std::runtime_error {
+               token_verification_exception()
+                       : std::runtime_error("token verification failed")
+               {}
+               explicit token_verification_exception(const std::string& msg)
+                       : std::runtime_error("token verification failed: " + msg)
+               {}
+       };
+
+       namespace helper {
+               inline
+               std::string extract_pubkey_from_cert(const std::string& certstr, const std::string& pw = "") {
+                       // TODO: Cannot find the exact version this change happended
+#if OPENSSL_VERSION_NUMBER <= 0x1000114fL
+                       std::unique_ptr<BIO, decltype(&BIO_free_all)> certbio(BIO_new_mem_buf(const_cast<char*>(certstr.data()), certstr.size()), BIO_free_all);
+#else
+                       std::unique_ptr<BIO, decltype(&BIO_free_all)> certbio(BIO_new_mem_buf(certstr.data(), certstr.size()), BIO_free_all);
+#endif
+                       std::unique_ptr<BIO, decltype(&BIO_free_all)> keybio(BIO_new(BIO_s_mem()), BIO_free_all);
+
+                       std::unique_ptr<X509, decltype(&X509_free)> cert(PEM_read_bio_X509(certbio.get(), nullptr, nullptr, const_cast<char*>(pw.c_str())), X509_free);
+                       if (!cert) throw rsa_exception("Error loading cert into memory");
+                       std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)> key(X509_get_pubkey(cert.get()), EVP_PKEY_free);
+                       if(!key) throw rsa_exception("Error getting public key from certificate");
+                       if(!PEM_write_bio_PUBKEY(keybio.get(), key.get())) throw rsa_exception("Error writing public key data in PEM format");
+                       char* ptr = nullptr;
+                       auto len = BIO_get_mem_data(keybio.get(), &ptr);
+                       if(len <= 0 || ptr == nullptr) throw rsa_exception("Failed to convert pubkey to pem");
+                       std::string res(ptr, len);
+                       return res;
+               }
+
+               inline
+               std::shared_ptr<EVP_PKEY> load_public_key_from_string(const std::string& key, const std::string& password = "") {
+                       std::unique_ptr<BIO, decltype(&BIO_free_all)> pubkey_bio(BIO_new(BIO_s_mem()), BIO_free_all);
+                       if(key.substr(0, 27) == "-----BEGIN CERTIFICATE-----") {
+                               auto epkey = helper::extract_pubkey_from_cert(key, password);
+                               if ((size_t)BIO_write(pubkey_bio.get(), epkey.data(), epkey.size()) != epkey.size())
+                                       throw rsa_exception("failed to load public key: bio_write failed");
+                       } else {
+                               if ((size_t)BIO_write(pubkey_bio.get(), key.data(), key.size()) != key.size())
+                                       throw rsa_exception("failed to load public key: bio_write failed");
+                       }
+                       
+                       std::shared_ptr<EVP_PKEY> pkey(PEM_read_bio_PUBKEY(pubkey_bio.get(), nullptr, nullptr, (void*)password.c_str()), EVP_PKEY_free);
+                       if (!pkey)
+                               throw rsa_exception("failed to load public key: PEM_read_bio_PUBKEY failed:" + std::string(ERR_error_string(ERR_get_error(), NULL)));
+                       return pkey;
+               }
+
+               inline
+               std::shared_ptr<EVP_PKEY> load_private_key_from_string(const std::string& key, const std::string& password = "") {
+                       std::unique_ptr<BIO, decltype(&BIO_free_all)> privkey_bio(BIO_new(BIO_s_mem()), BIO_free_all);
+                       if ((size_t)BIO_write(privkey_bio.get(), key.data(), key.size()) != key.size())
+                               throw rsa_exception("failed to load private key: bio_write failed");
+                       std::shared_ptr<EVP_PKEY> pkey(PEM_read_bio_PrivateKey(privkey_bio.get(), nullptr, nullptr, const_cast<char*>(password.c_str())), EVP_PKEY_free);
+                       if (!pkey)
+                               throw rsa_exception("failed to load private key: PEM_read_bio_PrivateKey failed");
+                       return pkey;
+               }
+       }
+
+       namespace algorithm {
+               /**
+                * "none" algorithm.
+                * 
+                * Returns and empty signature and checks if the given signature is empty.
+                */
+               struct none {
+                       /// Return an empty string
+                       std::string sign(const std::string&) const {
+                               return "";
+                       }
+                       /// Check if the given signature is empty. JWT's with "none" algorithm should not contain a signature.
+                       void verify(const std::string&, const std::string& signature) const {
+                               if (!signature.empty())
+                                       throw signature_verification_exception();
+                       }
+                       /// Get algorithm name
+                       std::string name() const {
+                               return "none";
+                       }
+               };
+               /**
+                * Base class for HMAC family of algorithms
+                */
+               struct hmacsha {
+                       /**
+                        * Construct new hmac algorithm
+                        * \param key Key to use for HMAC
+                        * \param md Pointer to hash function
+                        * \param name Name of the algorithm
+                        */
+                       hmacsha(std::string key, const EVP_MD*(*md)(), const std::string& name)
+                               : secret(std::move(key)), md(md), alg_name(name)
+                       {}
+                       /**
+                        * Sign jwt data
+                        * \param data The data to sign
+                        * \return HMAC signature for the given data
+                        * \throws signature_generation_exception
+                        */
+                       std::string sign(const std::string& data) const {
+                               std::string res;
+                               res.resize(EVP_MAX_MD_SIZE);
+                               unsigned int len = res.size();
+                               if (HMAC(md(), secret.data(), secret.size(), (const unsigned char*)data.data(), data.size(), (unsigned char*)res.data(), &len) == nullptr)
+                                       throw signature_generation_exception();
+                               res.resize(len);
+                               return res;
+                       }
+                       /**
+                        * Check if signature is valid
+                        * \param data The data to check signature against
+                        * \param signature Signature provided by the jwt
+                        * \throws signature_verification_exception If the provided signature does not match
+                        */
+                       void verify(const std::string& data, const std::string& signature) const {
+                               try {
+                                       auto res = sign(data);
+                                       bool matched = true;
+                                       for (size_t i = 0; i < std::min<size_t>(res.size(), signature.size()); i++)
+                                               if (res[i] != signature[i])
+                                                       matched = false;
+                                       if (res.size() != signature.size())
+                                               matched = false;
+                                       if (!matched)
+                                               throw signature_verification_exception();
+                               }
+                               catch (const signature_generation_exception&) {
+                                       throw signature_verification_exception();
+                               }
+                       }
+                       /**
+                        * Returns the algorithm name provided to the constructor
+                        * \return Algorithmname
+                        */
+                       std::string name() const {
+                               return alg_name;
+                       }
+               private:
+                       /// HMAC secrect
+                       const std::string secret;
+                       /// HMAC hash generator
+                       const EVP_MD*(*md)();
+                       /// Algorithmname
+                       const std::string alg_name;
+               };
+               /**
+                * Base class for RSA family of algorithms
+                */
+               struct rsa {
+                       /**
+                        * Construct new rsa algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        * \param md Pointer to hash function
+                        * \param name Name of the algorithm
+                        */
+                       rsa(const std::string& public_key, const std::string& private_key, const std::string& public_key_password, const std::string& private_key_password, const EVP_MD*(*md)(), const std::string& name)
+                               : md(md), alg_name(name)
+                       {
+                               if (!private_key.empty()) {
+                                       pkey = helper::load_private_key_from_string(private_key, private_key_password);
+                               } else if(!public_key.empty()) {
+                                       pkey = helper::load_public_key_from_string(public_key, public_key_password);
+                               } else
+                                       throw rsa_exception("at least one of public or private key need to be present");
+                       }
+                       /**
+                        * Sign jwt data
+                        * \param data The data to sign
+                        * \return RSA signature for the given data
+                        * \throws signature_generation_exception
+                        */
+                       std::string sign(const std::string& data) const {
+#ifdef OPENSSL10
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)> ctx(EVP_MD_CTX_create(), EVP_MD_CTX_destroy);
+#else
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_create(), EVP_MD_CTX_free);
+#endif
+                               if (!ctx)
+                                       throw signature_generation_exception("failed to create signature: could not create context");
+                               if (!EVP_SignInit(ctx.get(), md()))
+                                       throw signature_generation_exception("failed to create signature: SignInit failed");
+
+                               std::string res;
+                               res.resize(EVP_PKEY_size(pkey.get()));
+                               unsigned int len = 0;
+
+                               if (!EVP_SignUpdate(ctx.get(), data.data(), data.size()))
+                                       throw signature_generation_exception();
+                               if (!EVP_SignFinal(ctx.get(), (unsigned char*)res.data(), &len, pkey.get()))
+                                       throw signature_generation_exception();
+
+                               res.resize(len);
+                               return res;
+                       }
+                       /**
+                        * Check if signature is valid
+                        * \param data The data to check signature against
+                        * \param signature Signature provided by the jwt
+                        * \throws signature_verification_exception If the provided signature does not match
+                        */
+                       void verify(const std::string& data, const std::string& signature) const {
+#ifdef OPENSSL10
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)> ctx(EVP_MD_CTX_create(), EVP_MD_CTX_destroy);
+#else
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_create(), EVP_MD_CTX_free);
+#endif
+                               if (!ctx)
+                                       throw signature_verification_exception("failed to verify signature: could not create context");
+                               if (!EVP_VerifyInit(ctx.get(), md()))
+                                       throw signature_verification_exception("failed to verify signature: VerifyInit failed");
+                               if (!EVP_VerifyUpdate(ctx.get(), data.data(), data.size()))
+                                       throw signature_verification_exception("failed to verify signature: VerifyUpdate failed");
+                               auto res = EVP_VerifyFinal(ctx.get(), (const unsigned char*)signature.data(), signature.size(), pkey.get());
+                               if (res != 1)
+                                       throw signature_verification_exception("evp verify final failed: " + std::to_string(res) + " " + ERR_error_string(ERR_get_error(), NULL));
+                       }
+                       /**
+                        * Returns the algorithm name provided to the constructor
+                        * \return Algorithmname
+                        */
+                       std::string name() const {
+                               return alg_name;
+                       }
+               private:
+                       /// OpenSSL structure containing converted keys
+                       std::shared_ptr<EVP_PKEY> pkey;
+                       /// Hash generator
+                       const EVP_MD*(*md)();
+                       /// Algorithmname
+                       const std::string alg_name;
+               };
+               /**
+                * Base class for ECDSA family of algorithms
+                */
+               struct ecdsa {
+                       /**
+                        * Construct new ecdsa algorithm
+                        * \param public_key ECDSA public key in PEM format
+                        * \param private_key ECDSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        * \param md Pointer to hash function
+                        * \param name Name of the algorithm
+                        */
+                       ecdsa(const std::string& public_key, const std::string& private_key, const std::string& public_key_password, const std::string& private_key_password, const EVP_MD*(*md)(), const std::string& name, size_t siglen)
+                               : md(md), alg_name(name), signature_length(siglen)
+                       {
+                               if (!public_key.empty()) {
+                                       std::unique_ptr<BIO, decltype(&BIO_free_all)> pubkey_bio(BIO_new(BIO_s_mem()), BIO_free_all);
+                                       if(public_key.substr(0, 27) == "-----BEGIN CERTIFICATE-----") {
+                                               auto epkey = helper::extract_pubkey_from_cert(public_key, public_key_password);
+                                               if ((size_t)BIO_write(pubkey_bio.get(), epkey.data(), epkey.size()) != epkey.size())
+                                                       throw ecdsa_exception("failed to load public key: bio_write failed");
+                                       } else  {
+                                               if ((size_t)BIO_write(pubkey_bio.get(), public_key.data(), public_key.size()) != public_key.size())
+                                                       throw ecdsa_exception("failed to load public key: bio_write failed");
+                                       }
+
+                                       pkey.reset(PEM_read_bio_EC_PUBKEY(pubkey_bio.get(), nullptr, nullptr, (void*)public_key_password.c_str()), EC_KEY_free);
+                                       if (!pkey)
+                                               throw ecdsa_exception("failed to load public key: PEM_read_bio_EC_PUBKEY failed:" + std::string(ERR_error_string(ERR_get_error(), NULL)));
+                                       size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
+                                       if(keysize != signature_length*4 && (signature_length != 132 || keysize != 521))
+                                               throw ecdsa_exception("invalid key size");
+                               }
+
+                               if (!private_key.empty()) {
+                                       std::unique_ptr<BIO, decltype(&BIO_free_all)> privkey_bio(BIO_new(BIO_s_mem()), BIO_free_all);
+                                       if ((size_t)BIO_write(privkey_bio.get(), private_key.data(), private_key.size()) != private_key.size())
+                                               throw rsa_exception("failed to load private key: bio_write failed");
+                                       pkey.reset(PEM_read_bio_ECPrivateKey(privkey_bio.get(), nullptr, nullptr, const_cast<char*>(private_key_password.c_str())), EC_KEY_free);
+                                       if (!pkey)
+                                               throw rsa_exception("failed to load private key: PEM_read_bio_ECPrivateKey failed");
+                                       size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
+                                       if(keysize != signature_length*4 && (signature_length != 132 || keysize != 521))
+                                               throw ecdsa_exception("invalid key size");
+                               }
+                               if(!pkey)
+                                       throw rsa_exception("at least one of public or private key need to be present");
+
+                               if(EC_KEY_check_key(pkey.get()) == 0)
+                                       throw ecdsa_exception("failed to load key: key is invalid");
+                       }
+                       /**
+                        * Sign jwt data
+                        * \param data The data to sign
+                        * \return ECDSA signature for the given data
+                        * \throws signature_generation_exception
+                        */
+                       std::string sign(const std::string& data) const {
+                               const std::string hash = generate_hash(data);
+
+                               std::unique_ptr<ECDSA_SIG, decltype(&ECDSA_SIG_free)>
+                                       sig(ECDSA_do_sign((const unsigned char*)hash.data(), hash.size(), pkey.get()), ECDSA_SIG_free);
+                               if(!sig)
+                                       throw signature_generation_exception();
+#ifdef OPENSSL10
+
+                               auto rr = bn2raw(sig->r);
+                               auto rs = bn2raw(sig->s);
+#else
+                               const BIGNUM *r;
+                               const BIGNUM *s;
+                               ECDSA_SIG_get0(sig.get(), &r, &s);
+                               auto rr = bn2raw(r);
+                               auto rs = bn2raw(s);
+#endif
+                               if(rr.size() > signature_length/2 || rs.size() > signature_length/2)
+                                       throw std::logic_error("bignum size exceeded expected length");
+                               while(rr.size() != signature_length/2) rr = '\0' + rr;
+                               while(rs.size() != signature_length/2) rs = '\0' + rs;
+                               return rr + rs;
+                       }
+
+                       /**
+                        * Check if signature is valid
+                        * \param data The data to check signature against
+                        * \param signature Signature provided by the jwt
+                        * \throws signature_verification_exception If the provided signature does not match
+                        */
+                       void verify(const std::string& data, const std::string& signature) const {
+                               const std::string hash = generate_hash(data);
+                               auto r = raw2bn(signature.substr(0, signature.size() / 2));
+                               auto s = raw2bn(signature.substr(signature.size() / 2));
+
+#ifdef OPENSSL10
+                               ECDSA_SIG sig;
+                               sig.r = r.get();
+                               sig.s = s.get();
+
+                               if(ECDSA_do_verify((const unsigned char*)hash.data(), hash.size(), &sig, pkey.get()) != 1)
+                                       throw signature_verification_exception("Invalid signature");
+#else
+                               std::unique_ptr<ECDSA_SIG, decltype(&ECDSA_SIG_free)> sig(ECDSA_SIG_new(), ECDSA_SIG_free);
+
+                               ECDSA_SIG_set0(sig.get(), r.release(), s.release());
+
+                               if(ECDSA_do_verify((const unsigned char*)hash.data(), hash.size(), sig.get(), pkey.get()) != 1)
+                                       throw signature_verification_exception("Invalid signature");
+#endif
+                       }
+                       /**
+                        * Returns the algorithm name provided to the constructor
+                        * \return Algorithmname
+                        */
+                       std::string name() const {
+                               return alg_name;
+                       }
+               private:
+                       /**
+                        * Convert a OpenSSL BIGNUM to a std::string
+                        * \param bn BIGNUM to convert
+                        * \return bignum as string
+                        */
+#ifdef OPENSSL10
+                       static std::string bn2raw(BIGNUM* bn)
+#else
+                       static std::string bn2raw(const BIGNUM* bn)
+#endif
+                       {
+                               std::string res;
+                               res.resize(BN_num_bytes(bn));
+                               BN_bn2bin(bn, (unsigned char*)res.data());
+                               return res;
+                       }
+                       /**
+                        * Convert an std::string to a OpenSSL BIGNUM
+                        * \param raw String to convert
+                        * \return BIGNUM representation
+                        */
+                       static std::unique_ptr<BIGNUM, decltype(&BN_free)> raw2bn(const std::string& raw) {
+                               return std::unique_ptr<BIGNUM, decltype(&BN_free)>(BN_bin2bn((const unsigned char*)raw.data(), raw.size(), nullptr), BN_free);
+                       }
+
+                       /**
+                        * Hash the provided data using the hash function specified in constructor
+                        * \param data Data to hash
+                        * \return Hash of data
+                        */
+                       std::string generate_hash(const std::string& data) const {
+#ifdef OPENSSL10
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)> ctx(EVP_MD_CTX_create(), &EVP_MD_CTX_destroy);
+#else
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
+#endif
+                               if(EVP_DigestInit(ctx.get(), md()) == 0)
+                                       throw signature_generation_exception("EVP_DigestInit failed");
+                               if(EVP_DigestUpdate(ctx.get(), data.data(), data.size()) == 0)
+                                       throw signature_generation_exception("EVP_DigestUpdate failed");
+                               unsigned int len = 0;
+                               std::string res;
+                               res.resize(EVP_MD_CTX_size(ctx.get()));
+                               if(EVP_DigestFinal(ctx.get(), (unsigned char*)res.data(), &len) == 0)
+                                       throw signature_generation_exception("EVP_DigestFinal failed");
+                               res.resize(len);
+                               return res;
+                       }
+
+                       /// OpenSSL struct containing keys
+                       std::shared_ptr<EC_KEY> pkey;
+                       /// Hash generator function
+                       const EVP_MD*(*md)();
+                       /// Algorithmname
+                       const std::string alg_name;
+                       /// Length of the resulting signature
+                       const size_t signature_length;
+               };
+
+               /**
+                * Base class for PSS-RSA family of algorithms
+                */
+               struct pss {
+                       /**
+                        * Construct new pss algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        * \param md Pointer to hash function
+                        * \param name Name of the algorithm
+                        */
+                       pss(const std::string& public_key, const std::string& private_key, const std::string& public_key_password, const std::string& private_key_password, const EVP_MD*(*md)(), const std::string& name)
+                               : md(md), alg_name(name)
+                       {
+                               if (!private_key.empty()) {
+                                       pkey = helper::load_private_key_from_string(private_key, private_key_password);
+                               } else if(!public_key.empty()) {
+                                       pkey = helper::load_public_key_from_string(public_key, public_key_password);
+                               } else
+                                       throw rsa_exception("at least one of public or private key need to be present");
+                       }
+                       /**
+                        * Sign jwt data
+                        * \param data The data to sign
+                        * \return ECDSA signature for the given data
+                        * \throws signature_generation_exception
+                        */
+                       std::string sign(const std::string& data) const {
+                               auto hash = this->generate_hash(data);
+
+                               std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
+                               const int size = RSA_size(key.get());
+
+                               std::string padded(size, 0x00);
+                               if (!RSA_padding_add_PKCS1_PSS_mgf1(key.get(), (unsigned char*)padded.data(), (const unsigned char*)hash.data(), md(), md(), -1))  
+                                       throw signature_generation_exception("failed to create signature: RSA_padding_add_PKCS1_PSS_mgf1 failed");
+
+                               std::string res(size, 0x00);
+                               if (RSA_private_encrypt(size, (const unsigned char*)padded.data(), (unsigned char*)res.data(), key.get(), RSA_NO_PADDING) < 0)
+                                       throw signature_generation_exception("failed to create signature: RSA_private_encrypt failed");
+                               return res;
+                       }
+                       /**
+                        * Check if signature is valid
+                        * \param data The data to check signature against
+                        * \param signature Signature provided by the jwt
+                        * \throws signature_verification_exception If the provided signature does not match
+                        */
+                       void verify(const std::string& data, const std::string& signature) const {
+                               auto hash = this->generate_hash(data);
+
+                               std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
+                               const int size = RSA_size(key.get());
+                               
+                               std::string sig(size, 0x00);
+                               if(!RSA_public_decrypt(signature.size(), (const unsigned char*)signature.data(), (unsigned char*)sig.data(), key.get(), RSA_NO_PADDING))
+                                       throw signature_verification_exception("Invalid signature");
+                               
+                               if(!RSA_verify_PKCS1_PSS_mgf1(key.get(), (const unsigned char*)hash.data(), md(), md(), (const unsigned char*)sig.data(), -1))
+                                       throw signature_verification_exception("Invalid signature");
+                       }
+                       /**
+                        * Returns the algorithm name provided to the constructor
+                        * \return Algorithmname
+                        */
+                       std::string name() const {
+                               return alg_name;
+                       }
+               private:
+                       /**
+                        * Hash the provided data using the hash function specified in constructor
+                        * \param data Data to hash
+                        * \return Hash of data
+                        */
+                       std::string generate_hash(const std::string& data) const {
+#ifdef OPENSSL10
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)> ctx(EVP_MD_CTX_create(), &EVP_MD_CTX_destroy);
+#else
+                               std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
+#endif
+                               if(EVP_DigestInit(ctx.get(), md()) == 0)
+                                       throw signature_generation_exception("EVP_DigestInit failed");
+                               if(EVP_DigestUpdate(ctx.get(), data.data(), data.size()) == 0)
+                                       throw signature_generation_exception("EVP_DigestUpdate failed");
+                               unsigned int len = 0;
+                               std::string res;
+                               res.resize(EVP_MD_CTX_size(ctx.get()));
+                               if(EVP_DigestFinal(ctx.get(), (unsigned char*)res.data(), &len) == 0)
+                                       throw signature_generation_exception("EVP_DigestFinal failed");
+                               res.resize(len);
+                               return res;
+                       }
+                       
+                       /// OpenSSL structure containing keys
+                       std::shared_ptr<EVP_PKEY> pkey;
+                       /// Hash generator function
+                       const EVP_MD*(*md)();
+                       /// Algorithmname
+                       const std::string alg_name;
+               };
+
+               /**
+                * HS256 algorithm
+                */
+               struct hs256 : public hmacsha {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param key HMAC signing key
+                        */
+                       explicit hs256(std::string key)
+                               : hmacsha(std::move(key), EVP_sha256, "HS256")
+                       {}
+               };
+               /**
+                * HS384 algorithm
+                */
+               struct hs384 : public hmacsha {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param key HMAC signing key
+                        */
+                       explicit hs384(std::string key)
+                               : hmacsha(std::move(key), EVP_sha384, "HS384")
+                       {}
+               };
+               /**
+                * HS512 algorithm
+                */
+               struct hs512 : public hmacsha {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param key HMAC signing key
+                        */
+                       explicit hs512(std::string key)
+                               : hmacsha(std::move(key), EVP_sha512, "HS512")
+                       {}
+               };
+               /**
+                * RS256 algorithm
+                */
+               struct rs256 : public rsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit rs256(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "RS256")
+                       {}
+               };
+               /**
+                * RS384 algorithm
+                */
+               struct rs384 : public rsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit rs384(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "RS384")
+                       {}
+               };
+               /**
+                * RS512 algorithm
+                */
+               struct rs512 : public rsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit rs512(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "RS512")
+                       {}
+               };
+               /**
+                * ES256 algorithm
+                */
+               struct es256 : public ecdsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key ECDSA public key in PEM format
+                        * \param private_key ECDSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit es256(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "ES256", 64)
+                       {}
+               };
+               /**
+                * ES384 algorithm
+                */
+               struct es384 : public ecdsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key ECDSA public key in PEM format
+                        * \param private_key ECDSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit es384(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "ES384", 96)
+                       {}
+               };
+               /**
+                * ES512 algorithm
+                */
+               struct es512 : public ecdsa {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key ECDSA public key in PEM format
+                        * \param private_key ECDSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit es512(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "ES512", 132)
+                       {}
+               };
+
+               /**
+                * PS256 algorithm
+                */
+               struct ps256 : public pss {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit ps256(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "PS256")
+                       {}
+               };
+               /**
+                * PS384 algorithm
+                */
+               struct ps384 : public pss {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit ps384(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "PS384")
+                       {}
+               };
+               /**
+                * PS512 algorithm
+                */
+               struct ps512 : public pss {
+                       /**
+                        * Construct new instance of algorithm
+                        * \param public_key RSA public key in PEM format
+                        * \param private_key RSA private key or empty string if not available. If empty, signing will always fail.
+                        * \param public_key_password Password to decrypt public key pem.
+                        * \param privat_key_password Password to decrypt private key pem.
+                        */
+                       explicit ps512(const std::string& public_key, const std::string& private_key = "", const std::string& public_key_password = "", const std::string& private_key_password = "")
+                               : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "PS512")
+                       {}
+               };
+       }
+
+       /**
+        * Convenience wrapper for JSON value
+        */
+       class claim {
+               picojson::value val;
+       public:
+               enum class type {
+                       null,
+                       boolean,
+                       number,
+                       string,
+                       array,
+                       object,
+                       int64
+               };
+
+               claim()
+                       : val()
+               {}
+#if JWT_CLAIM_EXPLICIT
+               explicit claim(std::string s)
+                       : val(std::move(s))
+               {}
+               explicit claim(const date& s)
+                       : val(int64_t(std::chrono::system_clock::to_time_t(s)))
+               {}
+               explicit claim(const std::set<std::string>& s)
+                       : val(picojson::array(s.cbegin(), s.cend()))
+               {}
+               explicit claim(const picojson::value& val)
+                       : val(val)
+               {}
+#else
+               claim(std::string s)
+                       : val(std::move(s))
+               {}
+               claim(const date& s)
+                       : val(int64_t(std::chrono::system_clock::to_time_t(s)))
+               {}
+               claim(const std::set<std::string>& s)
+                       : val(picojson::array(s.cbegin(), s.cend()))
+               {}
+               claim(const picojson::value& val)
+                       : val(val)
+               {}
+#endif
+
+               template<typename Iterator>
+               claim(Iterator start, Iterator end)
+                       : val(picojson::array())
+               {
+                       auto& arr = val.get<picojson::array>();
+                       for(; start != end; start++) {
+                               arr.push_back(picojson::value(*start));
+                       }
+               }
+
+               /**
+                * Get wrapped json object
+                * \return Wrapped json object
+                */
+               picojson::value to_json() const {
+                       return val;
+               }
+
+               /**
+                * Get type of contained object
+                * \return Type
+                * \throws std::logic_error An internal error occured
+                */
+               type get_type() const {
+                       if (val.is<picojson::null>()) return type::null;
+                       else if (val.is<bool>()) return type::boolean;
+                       else if (val.is<int64_t>()) return type::int64;
+                       else if (val.is<double>()) return type::number;
+                       else if (val.is<std::string>()) return type::string;
+                       else if (val.is<picojson::array>()) return type::array;
+                       else if (val.is<picojson::object>()) return type::object;
+                       else throw std::logic_error("internal error");
+               }
+
+               /**
+                * Get the contained object as a string
+                * \return content as string
+                * \throws std::bad_cast Content was not a string
+                */
+               const std::string& as_string() const {
+                       if (!val.is<std::string>())
+                               throw std::bad_cast();
+                       return val.get<std::string>();
+               }
+               /**
+                * Get the contained object as a date
+                * \return content as date
+                * \throws std::bad_cast Content was not a date
+                */
+               date as_date() const {
+                       return std::chrono::system_clock::from_time_t(as_int());
+               }
+               /**
+                * Get the contained object as an array
+                * \return content as array
+                * \throws std::bad_cast Content was not an array
+                */
+               const picojson::array& as_array() const {
+                       if (!val.is<picojson::array>())
+                               throw std::bad_cast();
+                       return val.get<picojson::array>();
+               }
+               /**
+                * Get the contained object as a set of strings
+                * \return content as set of strings
+                * \throws std::bad_cast Content was not a set
+                */
+               const std::set<std::string> as_set() const {
+                       std::set<std::string> res;
+                       for(auto& e : as_array()) {
+                               if(!e.is<std::string>())
+                                       throw std::bad_cast();
+                               res.insert(e.get<std::string>());
+                       }
+                       return res;
+               }
+               /**
+                * Get the contained object as an integer
+                * \return content as int
+                * \throws std::bad_cast Content was not an int
+                */
+               int64_t as_int() const {
+                       if (!val.is<int64_t>())
+                               throw std::bad_cast();
+                       return val.get<int64_t>();
+               }
+               /**
+                * Get the contained object as a bool
+                * \return content as bool
+                * \throws std::bad_cast Content was not a bool
+                */
+               bool as_bool() const {
+                       if (!val.is<bool>())
+                               throw std::bad_cast();
+                       return val.get<bool>();
+               }
+               /**
+                * Get the contained object as a number
+                * \return content as double
+                * \throws std::bad_cast Content was not a number
+                */
+               double as_number() const {
+                       if (!val.is<double>())
+                               throw std::bad_cast();
+                       return val.get<double>();
+               }
+       };
+
+       /**
+        * Base class that represents a token payload.
+        * Contains Convenience accessors for common claims.
+        */
+       class payload {
+       protected:
+               std::unordered_map<std::string, claim> payload_claims;
+       public:
+               /**
+                * Check if issuer is present ("iss")
+                * \return true if present, false otherwise
+                */
+               bool has_issuer() const noexcept { return has_payload_claim("iss"); }
+               /**
+                * Check if subject is present ("sub")
+                * \return true if present, false otherwise
+                */
+               bool has_subject() const noexcept { return has_payload_claim("sub"); }
+               /**
+                * Check if audience is present ("aud")
+                * \return true if present, false otherwise
+                */
+               bool has_audience() const noexcept { return has_payload_claim("aud"); }
+               /**
+                * Check if expires is present ("exp")
+                * \return true if present, false otherwise
+                */
+               bool has_expires_at() const noexcept { return has_payload_claim("exp"); }
+               /**
+                * Check if not before is present ("nbf")
+                * \return true if present, false otherwise
+                */
+               bool has_not_before() const noexcept { return has_payload_claim("nbf"); }
+               /**
+                * Check if issued at is present ("iat")
+                * \return true if present, false otherwise
+                */
+               bool has_issued_at() const noexcept { return has_payload_claim("iat"); }
+               /**
+                * Check if token id is present ("jti")
+                * \return true if present, false otherwise
+                */
+               bool has_id() const noexcept { return has_payload_claim("jti"); }
+               /**
+                * Get issuer claim
+                * \return issuer as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_issuer() const { return get_payload_claim("iss").as_string(); }
+               /**
+                * Get subject claim
+                * \return subject as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_subject() const { return get_payload_claim("sub").as_string(); }
+               /**
+                * Get audience claim
+                * \return audience as a set of strings
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a set (Should not happen in a valid token)
+                */
+               std::set<std::string> get_audience() const { 
+                       auto aud = get_payload_claim("aud");
+                       if(aud.get_type() == jwt::claim::type::string) return { aud.as_string()};
+                       else return aud.as_set();
+               }
+               /**
+                * Get expires claim
+                * \return expires as a date in utc
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a date (Should not happen in a valid token)
+                */
+               const date get_expires_at() const { return get_payload_claim("exp").as_date(); }
+               /**
+                * Get not valid before claim
+                * \return nbf date in utc
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a date (Should not happen in a valid token)
+                */
+               const date get_not_before() const { return get_payload_claim("nbf").as_date(); }
+               /**
+                * Get issued at claim
+                * \return issued at as date in utc
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a date (Should not happen in a valid token)
+                */
+               const date get_issued_at() const { return get_payload_claim("iat").as_date(); }
+               /**
+                * Get id claim
+                * \return id as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_id() const { return get_payload_claim("jti").as_string(); }
+               /**
+                * Check if a payload claim is present
+                * \return true if claim was present, false otherwise
+                */
+               bool has_payload_claim(const std::string& name) const noexcept { return payload_claims.count(name) != 0; }
+               /**
+                * Get payload claim
+                * \return Requested claim
+                * \throws std::runtime_error If claim was not present
+                */
+               const claim& get_payload_claim(const std::string& name) const {
+                       if (!has_payload_claim(name))
+                               throw std::runtime_error("claim not found");
+                       return payload_claims.at(name);
+               }
+               /**
+                * Get all payload claims
+                * \return map of claims
+                */
+               std::unordered_map<std::string, claim> get_payload_claims() const { return payload_claims; }
+       };
+
+       /**
+        * Base class that represents a token header.
+        * Contains Convenience accessors for common claims.
+        */
+       class header {
+       protected:
+               std::unordered_map<std::string, claim> header_claims;
+       public:
+               /**
+                * Check if algortihm is present ("alg")
+                * \return true if present, false otherwise
+                */
+               bool has_algorithm() const noexcept { return has_header_claim("alg"); }
+               /**
+                * Check if type is present ("typ")
+                * \return true if present, false otherwise
+                */
+               bool has_type() const noexcept { return has_header_claim("typ"); }
+               /**
+                * Check if content type is present ("cty")
+                * \return true if present, false otherwise
+                */
+               bool has_content_type() const noexcept { return has_header_claim("cty"); }
+               /**
+                * Check if key id is present ("kid")
+                * \return true if present, false otherwise
+                */
+               bool has_key_id() const noexcept { return has_header_claim("kid"); }
+               /**
+                * Get algorithm claim
+                * \return algorithm as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_algorithm() const { return get_header_claim("alg").as_string(); }
+               /**
+                * Get type claim
+                * \return type as a string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_type() const { return get_header_claim("typ").as_string(); }
+               /**
+                * Get content type claim
+                * \return content type as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_content_type() const { return get_header_claim("cty").as_string(); }
+               /**
+                * Get key id claim
+                * \return key id as string
+                * \throws std::runtime_error If claim was not present
+                * \throws std::bad_cast Claim was present but not a string (Should not happen in a valid token)
+                */
+               const std::string& get_key_id() const { return get_header_claim("kid").as_string(); }
+               /**
+                * Check if a header claim is present
+                * \return true if claim was present, false otherwise
+                */
+               bool has_header_claim(const std::string& name) const noexcept { return header_claims.count(name) != 0; }
+               /**
+                * Get header claim
+                * \return Requested claim
+                * \throws std::runtime_error If claim was not present
+                */
+               const claim& get_header_claim(const std::string& name) const {
+                       if (!has_header_claim(name))
+                               throw std::runtime_error("claim not found");
+                       return header_claims.at(name);
+               }
+               /**
+                * Get all header claims
+                * \return map of claims
+                */
+               std::unordered_map<std::string, claim> get_header_claims() const { return header_claims; }
+       };
+
+       /**
+        * Class containing all information about a decoded token
+        */
+       class decoded_jwt : public header, public payload {
+       protected:
+               /// Unmodifed token, as passed to constructor
+               const std::string token;
+               /// Header part decoded from base64
+               std::string header;
+               /// Unmodified header part in base64
+               std::string header_base64;
+               /// Payload part decoded from base64
+               std::string payload;
+               /// Unmodified payload part in base64
+               std::string payload_base64;
+               /// Signature part decoded from base64
+               std::string signature;
+               /// Unmodified signature part in base64
+               std::string signature_base64;
+       public:
+               /**
+                * Constructor 
+                * Parses a given token
+                * \param token The token to parse
+                * \throws std::invalid_argument Token is not in correct format
+                * \throws std::runtime_error Base64 decoding failed or invalid json
+                */
+               explicit decoded_jwt(const std::string& token)
+                       : token(token)
+               {
+                       auto hdr_end = token.find('.');
+                       if (hdr_end == std::string::npos)
+                               throw std::invalid_argument("invalid token supplied");
+                       auto payload_end = token.find('.', hdr_end + 1);
+                       if (payload_end == std::string::npos)
+                               throw std::invalid_argument("invalid token supplied");
+                       header = header_base64 = token.substr(0, hdr_end);
+                       payload = payload_base64 = token.substr(hdr_end + 1, payload_end - hdr_end - 1);
+                       signature = signature_base64 = token.substr(payload_end + 1);
+
+                       // Fix padding: JWT requires padding to get removed
+                       auto fix_padding = [](std::string& str) {
+                               switch (str.size() % 4) {
+                               case 1:
+                                       str += alphabet::base64url::fill();
+#ifdef __has_cpp_attribute
+#if __has_cpp_attribute(fallthrough)
+                                       [[fallthrough]];
+#endif
+#endif
+                               case 2:
+                                       str += alphabet::base64url::fill();
+#ifdef __has_cpp_attribute
+#if __has_cpp_attribute(fallthrough)
+                                       [[fallthrough]];
+#endif
+#endif
+                               case 3:
+                                       str += alphabet::base64url::fill();
+#ifdef __has_cpp_attribute
+#if __has_cpp_attribute(fallthrough)
+                                       [[fallthrough]];
+#endif
+#endif
+                               default:
+                                       break;
+                               }
+                       };
+                       fix_padding(header);
+                       fix_padding(payload);
+                       fix_padding(signature);
+
+                       header = base::decode<alphabet::base64url>(header);
+                       payload = base::decode<alphabet::base64url>(payload);
+                       signature = base::decode<alphabet::base64url>(signature);
+
+                       auto parse_claims = [](const std::string& str) {
+                               std::unordered_map<std::string, claim> res;
+                               picojson::value val;
+                               if (!picojson::parse(val, str).empty())
+                                       throw std::runtime_error("Invalid json");
+
+                               for (auto& e : val.get<picojson::object>()) { res.insert({ e.first, claim(e.second) }); }
+
+                               return res;
+                       };
+
+                       header_claims = parse_claims(header);
+                       payload_claims = parse_claims(payload);
+               }
+
+               /**
+                * Get token string, as passed to constructor
+                * \return token as passed to constructor
+                */
+               const std::string& get_token() const noexcept { return token; }
+               /**
+                * Get header part as json string
+                * \return header part after base64 decoding
+                */
+               const std::string& get_header() const noexcept { return header; }
+               /**
+                * Get payload part as json string
+                * \return payload part after base64 decoding
+                */
+               const std::string& get_payload() const noexcept { return payload; }
+               /**
+                * Get signature part as json string
+                * \return signature part after base64 decoding
+                */
+               const std::string& get_signature() const noexcept { return signature; }
+               /**
+                * Get header part as base64 string
+                * \return header part before base64 decoding
+                */
+               const std::string& get_header_base64() const noexcept { return header_base64; }
+               /**
+                * Get payload part as base64 string
+                * \return payload part before base64 decoding
+                */
+               const std::string& get_payload_base64() const noexcept { return payload_base64; }
+               /**
+                * Get signature part as base64 string
+                * \return signature part before base64 decoding
+                */
+               const std::string& get_signature_base64() const noexcept { return signature_base64; }
+
+       };
+
+       /**
+        * Builder class to build and sign a new token
+        * Use jwt::create() to get an instance of this class.
+        */
+       class builder {
+               std::unordered_map<std::string, claim> header_claims;
+               std::unordered_map<std::string, claim> payload_claims;
+
+               builder() {}
+               friend builder create();
+       public:
+               /**
+                * Set a header claim.
+                * \param id Name of the claim
+                * \param c Claim to add
+                * \return *this to allow for method chaining
+                */
+               builder& set_header_claim(const std::string& id, claim c) { header_claims[id] = std::move(c); return *this; }
+               /**
+                * Set a payload claim.
+                * \param id Name of the claim
+                * \param c Claim to add
+                * \return *this to allow for method chaining
+                */
+               builder& set_payload_claim(const std::string& id, claim c) { payload_claims[id] = std::move(c); return *this; }
+               /**
+                * Set algorithm claim
+                * You normally don't need to do this, as the algorithm is automatically set if you don't change it.
+                * \param str Name of algorithm
+                * \return *this to allow for method chaining
+                */
+               builder& set_algorithm(const std::string& str) { return set_header_claim("alg", claim(str)); }
+               /**
+                * Set type claim
+                * \param str Type to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_type(const std::string& str) { return set_header_claim("typ", claim(str)); }
+               /**
+                * Set content type claim
+                * \param str Type to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_content_type(const std::string& str) { return set_header_claim("cty", claim(str)); }
+               /**
+                * Set key id claim
+                * \param str Key id to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_key_id(const std::string& str) { return set_header_claim("kid", claim(str)); }
+               /**
+                * Set issuer claim
+                * \param str Issuer to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_issuer(const std::string& str) { return set_payload_claim("iss", claim(str)); }
+               /**
+                * Set subject claim
+                * \param str Subject to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_subject(const std::string& str) { return set_payload_claim("sub", claim(str)); }
+               /**
+                * Set audience claim
+                * \param l Audience set
+                * \return *this to allow for method chaining
+                */
+               builder& set_audience(const std::set<std::string>& l) { return set_payload_claim("aud", claim(l)); }
+               /**
+                * Set audience claim
+                * \param aud Single audience
+                * \return *this to allow for method chaining
+                */
+               builder& set_audience(const std::string& aud) { return set_payload_claim("aud", claim(aud)); }
+               /**
+                * Set expires at claim
+                * \param d Expires time
+                * \return *this to allow for method chaining
+                */
+               builder& set_expires_at(const date& d) { return set_payload_claim("exp", claim(d)); }
+               /**
+                * Set not before claim
+                * \param d First valid time
+                * \return *this to allow for method chaining
+                */
+               builder& set_not_before(const date& d) { return set_payload_claim("nbf", claim(d)); }
+               /**
+                * Set issued at claim
+                * \param d Issued at time, should be current time
+                * \return *this to allow for method chaining
+                */
+               builder& set_issued_at(const date& d) { return set_payload_claim("iat", claim(d)); }
+               /**
+                * Set id claim
+                * \param str ID to set
+                * \return *this to allow for method chaining
+                */
+               builder& set_id(const std::string& str) { return set_payload_claim("jti", claim(str)); }
+
+               /**
+                * Sign token and return result
+                * \param algo Instance of an algorithm to sign the token with
+                * \return Final token as a string
+                */
+               template<typename T>
+               std::string sign(const T& algo) const {
+                       picojson::object obj_header;
+                       obj_header["alg"] = picojson::value(algo.name());
+                       for (auto& e : header_claims) {
+                               obj_header[e.first] = e.second.to_json();
+                       }
+                       picojson::object obj_payload;
+                       for (auto& e : payload_claims) {
+                               obj_payload.insert({ e.first, e.second.to_json() });
+                       }
+
+                       auto encode = [](const std::string& data) {
+                               auto base = base::encode<alphabet::base64url>(data);
+                               auto pos = base.find(alphabet::base64url::fill());
+                               base = base.substr(0, pos);
+                               return base;
+                       };
+
+                       std::string header = encode(picojson::value(obj_header).serialize());
+                       std::string payload = encode(picojson::value(obj_payload).serialize());
+
+                       std::string token = header + "." + payload;
+
+                       return token + "." + encode(algo.sign(token));
+               }
+       };
+
+       /**
+        * Verifier class used to check if a decoded token contains all claims required by your application and has a valid signature.
+        */
+       template<typename Clock>
+       class verifier {
+               struct algo_base {
+                       virtual ~algo_base() {}
+                       virtual void verify(const std::string& data, const std::string& sig) = 0;
+               };
+               template<typename T>
+               struct algo : public algo_base {
+                       T alg;
+                       explicit algo(T a) : alg(a) {}
+                       virtual void verify(const std::string& data, const std::string& sig) override {
+                               alg.verify(data, sig);
+                       }
+               };
+
+               /// Required claims
+               std::unordered_map<std::string, claim> claims;
+               /// Leeway time for exp, nbf and iat
+               size_t default_leeway = 0;
+               /// Instance of clock type
+               Clock clock;
+               /// Supported algorithms
+               std::unordered_map<std::string, std::shared_ptr<algo_base>> algs;
+       public:
+               /**
+                * Constructor for building a new verifier instance
+                * \param c Clock instance
+                */
+               explicit verifier(Clock c) : clock(c) {}
+
+               /**
+                * Set default leeway to use.
+                * \param leeway Default leeway to use if not specified otherwise
+                * \return *this to allow chaining
+                */
+               verifier& leeway(size_t leeway) { default_leeway = leeway; return *this; }
+               /**
+                * Set leeway for expires at.
+                * If not specified the default leeway will be used.
+                * \param leeway Set leeway to use for expires at.
+                * \return *this to allow chaining
+                */
+               verifier& expires_at_leeway(size_t leeway) { return with_claim("exp", claim(std::chrono::system_clock::from_time_t(leeway))); }
+               /**
+                * Set leeway for not before.
+                * If not specified the default leeway will be used.
+                * \param leeway Set leeway to use for not before.
+                * \return *this to allow chaining
+                */
+               verifier& not_before_leeway(size_t leeway) { return with_claim("nbf", claim(std::chrono::system_clock::from_time_t(leeway))); }
+               /**
+                * Set leeway for issued at.
+                * If not specified the default leeway will be used.
+                * \param leeway Set leeway to use for issued at.
+                * \return *this to allow chaining
+                */
+               verifier& issued_at_leeway(size_t leeway) { return with_claim("iat", claim(std::chrono::system_clock::from_time_t(leeway))); }
+               /**
+                * Set an issuer to check for.
+                * Check is casesensitive.
+                * \param iss Issuer to check for.
+                * \return *this to allow chaining
+                */
+               verifier& with_issuer(const std::string& iss) { return with_claim("iss", claim(iss)); }
+               /**
+                * Set a subject to check for.
+                * Check is casesensitive.
+                * \param sub Subject to check for.
+                * \return *this to allow chaining
+                */
+               verifier& with_subject(const std::string& sub) { return with_claim("sub", claim(sub)); }
+               /**
+                * Set an audience to check for.
+                * If any of the specified audiences is not present in the token the check fails.
+                * \param aud Audience to check for.
+                * \return *this to allow chaining
+                */
+               verifier& with_audience(const std::set<std::string>& aud) { return with_claim("aud", claim(aud)); }
+               /**
+                * Set an id to check for.
+                * Check is casesensitive.
+                * \param id ID to check for.
+                * \return *this to allow chaining
+                */
+               verifier& with_id(const std::string& id) { return with_claim("jti", claim(id)); }
+               /**
+                * Specify a claim to check for.
+                * \param name Name of the claim to check for
+                * \param c Claim to check for
+                * \return *this to allow chaining
+                */
+               verifier& with_claim(const std::string& name, claim c) { claims[name] = c; return *this; }
+
+               /**
+                * Add an algorithm available for checking.
+                * \param alg Algorithm to allow
+                * \return *this to allow chaining
+                */
+               template<typename Algorithm>
+               verifier& allow_algorithm(Algorithm alg) {
+                       algs[alg.name()] = std::make_shared<algo<Algorithm>>(alg);
+                       return *this;
+               }
+
+               /**
+                * Verify the given token.
+                * \param jwt Token to check
+                * \throws token_verification_exception Verification failed
+                */
+               void verify(const decoded_jwt& jwt) const {
+                       const std::string data = jwt.get_header_base64() + "." + jwt.get_payload_base64();
+                       const std::string sig = jwt.get_signature();
+                       const std::string& algo = jwt.get_algorithm();
+                       if (algs.count(algo) == 0)
+                               throw token_verification_exception("wrong algorithm");
+                       algs.at(algo)->verify(data, sig);
+
+                       auto assert_claim_eq = [](const decoded_jwt& jwt, const std::string& key, const claim& c) {
+                               if (!jwt.has_payload_claim(key))
+                                       throw token_verification_exception("decoded_jwt is missing " + key + " claim");
+                               auto& jc = jwt.get_payload_claim(key);
+                               if (jc.get_type() != c.get_type())
+                                       throw token_verification_exception("claim " + key + " type mismatch");
+                               if (c.get_type() == claim::type::int64) {
+                                       if (c.as_date() != jc.as_date())
+                                               throw token_verification_exception("claim " + key + " does not match expected");
+                               }
+                               else if (c.get_type() == claim::type::array) {
+                                       auto s1 = c.as_set();
+                                       auto s2 = jc.as_set();
+                                       if (s1.size() != s2.size())
+                                               throw token_verification_exception("claim " + key + " does not match expected");
+                                       auto it1 = s1.cbegin();
+                                       auto it2 = s2.cbegin();
+                                       while (it1 != s1.cend() && it2 != s2.cend()) {
+                                               if (*it1++ != *it2++)
+                                                       throw token_verification_exception("claim " + key + " does not match expected");
+                                       }
+                               }
+                               else if (c.get_type() == claim::type::string) {
+                                       if (c.as_string() != jc.as_string())
+                                               throw token_verification_exception("claim " + key + " does not match expected");
+                               }
+                               else throw token_verification_exception("internal error");
+                       };
+
+                       auto time = clock.now();
+
+                       if (jwt.has_expires_at()) {
+                               auto leeway = claims.count("exp") == 1 ? std::chrono::system_clock::to_time_t(claims.at("exp").as_date()) : default_leeway;
+                               auto exp = jwt.get_expires_at();
+                               if (time > exp + std::chrono::seconds(leeway))
+                                       throw token_verification_exception("token expired");
+                       }
+                       if (jwt.has_issued_at()) {
+                               auto leeway = claims.count("iat") == 1 ? std::chrono::system_clock::to_time_t(claims.at("iat").as_date()) : default_leeway;
+                               auto iat = jwt.get_issued_at();
+                               if (time < iat - std::chrono::seconds(leeway))
+                                       throw token_verification_exception("token expired");
+                       }
+                       if (jwt.has_not_before()) {
+                               auto leeway = claims.count("nbf") == 1 ? std::chrono::system_clock::to_time_t(claims.at("nbf").as_date()) : default_leeway;
+                               auto nbf = jwt.get_not_before();
+                               if (time < nbf - std::chrono::seconds(leeway))
+                                       throw token_verification_exception("token expired");
+                       }
+                       for (auto& c : claims)
+                       {
+                               if (c.first == "exp" || c.first == "iat" || c.first == "nbf") {
+                                       // Nothing to do here, already checked
+                               }
+                               else if (c.first == "aud") {
+                                       if (!jwt.has_audience())
+                                               throw token_verification_exception("token doesn't contain the required audience");
+                                       auto aud = jwt.get_audience();
+                                       auto expected = c.second.as_set();
+                                       for (auto& e : expected)
+                                               if (aud.count(e) == 0)
+                                                       throw token_verification_exception("token doesn't contain the required audience");
+                               }
+                               else {
+                                       assert_claim_eq(jwt, c.first, c.second);
+                               }
+                       }
+               }
+       };
+
+       /**
+        * Create a verifier using the given clock
+        * \param c Clock instance to use
+        * \return verifier instance
+        */
+       template<typename Clock>
+       verifier<Clock> verify(Clock c) {
+               return verifier<Clock>(c);
+       }
+
+       /**
+        * Default clock class using std::chrono::system_clock as a backend.
+        */
+       struct default_clock {
+               std::chrono::system_clock::time_point now() const {
+                       return std::chrono::system_clock::now();
+               }
+       };
+
+       /**
+        * Create a verifier using the default clock
+        * \return verifier instance
+        */
+    inline
+       verifier<default_clock> verify() {
+               return verify<default_clock>({});
+       }
+
+       /**
+        * Return a builder instance to create a new token
+        */
+    inline
+       builder create() {
+               return builder();
+       }
+
+       /**
+        * Decode a token
+        * \param token Token to decode
+        * \return Decoded token
+        * \throws std::invalid_argument Token is not in correct format
+        * \throws std::runtime_error Base64 decoding failed or invalid json
+        */
+    inline
+       decoded_jwt decode(const std::string& token) {
+               return decoded_jwt(token);
+       }
+}
index 9b0bc92423e87d6d8ec1e2cda1cea968e962df37..e8fa55c70b604b8df2d42818b8edbda9b6640c51 100644 (file)
@@ -130,8 +130,8 @@ namespace rgw {
        if (cur_gen != gen)
          goto restart; /* invalidated */
       }
+      cv.wait_for(uniq, std::chrono::seconds(delay_s));
       uniq.unlock();
-      std::this_thread::sleep_for(std::chrono::seconds(delay_s));
     }
   }
 
diff --git a/ceph/src/rgw/librgw_admin_user.cc b/ceph/src/rgw/librgw_admin_user.cc
deleted file mode 100644 (file)
index 2c1f0ae..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * create rgw admin user
- *
- * Copyright (C) 2015 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#include "include/compat.h"
-#include <sys/types.h>
-#include <string.h>
-#include <chrono>
-#include <errno.h>
-#include <thread>
-#include <string>
-#include <mutex>
-
-#include "include/types.h"
-#include "include/rgw/librgw_admin_user.h"
-#include "include/str_list.h"
-#include "include/stringify.h"
-#include "global/global_init.h"
-#include "global/signal_handler.h"
-#include "common/config.h"
-#include "common/errno.h"
-#include "common/Timer.h"
-#include "common/Throttle.h"
-#include "common/WorkQueue.h"
-#include "common/ceph_argparse.h"
-#include "common/ceph_context.h"
-#include "common/common_init.h"
-#include "common/dout.h"
-
-#include "rgw_admin_user.h"
-#include "rgw_rados.h"
-#include "rgw_os_lib.h"
-#include "rgw_auth.h"
-#include "rgw_auth_s3.h"
-
-#define dout_subsys ceph_subsys_rgw
-
-bool global_stop = false;
-
-static void handle_sigterm(int signum)
-{
-  dout(20) << __func__ << " SIGUSR1 ignored" << dendl;
-}
-
-namespace rgw {
-
-  using std::string;
-
-  static std::mutex librgw_admin_user_mtx;
-
-  RGWLibAdmin rgw_lib_admin;
-
-  class C_InitTimeout : public Context {
-  public:
-    C_InitTimeout() {}
-    void finish(int r) override {
-      derr << "Initialization timeout, failed to initialize" << dendl;
-      exit(1);
-    }
-  };
-
-  int RGWLibAdmin::init()
-  {
-    vector<const char*> args;
-    return init(args);
-  }
-
-  int RGWLibAdmin::init(vector<const char*>& args)
-  {
-    /* alternative default for module */
-    map<string,string> defaults = {
-      { "debug_rgw", "1/5" },
-      { "keyring", "$rgw_data/keyring" },
-      { "log_file", "/var/log/radosgw/$cluster-$name.log" }
-    };
-
-    cct = global_init(&defaults, args,
-                     CEPH_ENTITY_TYPE_CLIENT,
-                     CODE_ENVIRONMENT_UTILITY, 0);
-
-    ceph::mutex mutex = ceph::make_mutex("main");
-    SafeTimer init_timer(g_ceph_context, mutex);
-    init_timer.init();
-    mutex.lock();
-    init_timer.add_event_after(g_conf()->rgw_init_timeout, new C_InitTimeout);
-    mutex.unlock();
-
-    common_init_finish(g_ceph_context);
-
-    store = RGWStoreManager::get_storage(g_ceph_context, false, false, false, false, false);
-
-    if (!store) {
-      mutex.lock();
-      init_timer.cancel_all_events();
-      init_timer.shutdown();
-      mutex.unlock();
-
-      derr << "Couldn't init storage provider (RADOS)" << dendl;
-      return -EIO;
-    }
-
-    mutex.lock();
-    init_timer.cancel_all_events();
-    init_timer.shutdown();
-    mutex.unlock();
-
-    init_async_signal_handler();
-    register_async_signal_handler(SIGUSR1, handle_sigterm);
-
-    return 0;
-  } /* RGWLibAdmin::init() */
-
-  int RGWLibAdmin::stop()
-  {
-    derr << "shutting down" << dendl;
-
-    unregister_async_signal_handler(SIGUSR1, handle_sigterm);
-    shutdown_async_signal_handler();
-
-    RGWStoreManager::close_storage(store);
-
-    dout(1) << "final shutdown" << dendl;
-    cct.reset();
-
-    return 0;
-  } /* RGWLibAdmin::stop() */
-
-} /* namespace rgw */
-
-extern "C" {
-
-int librgw_admin_user_create(librgw_admin_user_t* rgw_admin_user, int argc, char **argv)
-{
-  using namespace rgw;
-
-  int rc = -EINVAL;
-
-  if (! g_ceph_context) {
-    std::lock_guard<std::mutex> lg(librgw_admin_user_mtx);
-    if (! g_ceph_context) {
-      vector<const char*> args;
-      std::vector<std::string> spl_args;
-      // last non-0 argument will be split and consumed
-      if (argc > 1) {
-       const std::string spl_arg{argv[(--argc)]};
-       get_str_vec(spl_arg, " \t", spl_args);
-      }
-      argv_to_vec(argc, const_cast<const char**>(argv), args);
-      // append split args, if any
-      for (const auto& elt : spl_args) {
-       args.push_back(elt.c_str());
-      }
-      rc = rgw_lib_admin.init(args);
-    }
-  }
-
-  *rgw_admin_user = g_ceph_context->get();
-
-  return rc;
-}
-
-void librgw_admin_user_shutdown(librgw_admin_user_t rgw_admin_user)
-{
-  using namespace rgw;
-
-  CephContext* cct = static_cast<CephContext*>(rgw_admin_user);
-  rgw_lib_admin.stop();
-  cct->put();
-}
-
-} /* extern "C" */
-
-
diff --git a/ceph/src/rgw/picojson/picojson.h b/ceph/src/rgw/picojson/picojson.h
new file mode 100644 (file)
index 0000000..a395bbc
--- /dev/null
@@ -0,0 +1,1174 @@
+/*
+ * Copyright 2009-2010 Cybozu Labs, Inc.
+ * Copyright 2011-2014 Kazuho Oku
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef picojson_h
+#define picojson_h
+
+#include <algorithm>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cstddef>
+#include <iostream>
+#include <iterator>
+#include <limits>
+#include <map>
+#include <stdexcept>
+#include <string>
+#include <vector>
+#include <utility>
+
+// for isnan/isinf
+#if __cplusplus >= 201103L
+#include <cmath>
+#else
+extern "C" {
+#ifdef _MSC_VER
+#include <float.h>
+#elif defined(__INTEL_COMPILER)
+#include <mathimf.h>
+#else
+#include <math.h>
+#endif
+}
+#endif
+
+#ifndef PICOJSON_USE_RVALUE_REFERENCE
+#if (defined(__cpp_rvalue_references) && __cpp_rvalue_references >= 200610) || (defined(_MSC_VER) && _MSC_VER >= 1600)
+#define PICOJSON_USE_RVALUE_REFERENCE 1
+#else
+#define PICOJSON_USE_RVALUE_REFERENCE 0
+#endif
+#endif // PICOJSON_USE_RVALUE_REFERENCE
+
+#ifndef PICOJSON_NOEXCEPT
+#if PICOJSON_USE_RVALUE_REFERENCE
+#define PICOJSON_NOEXCEPT noexcept
+#else
+#define PICOJSON_NOEXCEPT throw()
+#endif
+#endif
+
+// experimental support for int64_t (see README.mkdn for detail)
+#ifdef PICOJSON_USE_INT64
+//#define __STDC_FORMAT_MACROS
+#include <cerrno>
+#if __cplusplus >= 201103L
+#include <cinttypes>
+#else
+extern "C" {
+#include <inttypes.h>
+}
+#endif
+#endif
+
+// to disable the use of localeconv(3), set PICOJSON_USE_LOCALE to 0
+#ifndef PICOJSON_USE_LOCALE
+#define PICOJSON_USE_LOCALE 1
+#endif
+#if PICOJSON_USE_LOCALE
+extern "C" {
+#include <locale.h>
+}
+#endif
+
+#ifndef PICOJSON_ASSERT
+#define PICOJSON_ASSERT(e)                                                                                                         \
+  do {                                                                                                                             \
+    if (!(e))                                                                                                                      \
+      throw std::runtime_error(#e);                                                                                                \
+  } while (0)
+#endif
+
+#ifdef _MSC_VER
+#define SNPRINTF _snprintf_s
+#pragma warning(push)
+#pragma warning(disable : 4244) // conversion from int to char
+#pragma warning(disable : 4127) // conditional expression is constant
+#pragma warning(disable : 4702) // unreachable code
+#else
+#define SNPRINTF snprintf
+#endif
+
+namespace picojson {
+
+enum {
+  null_type,
+  boolean_type,
+  number_type,
+  string_type,
+  array_type,
+  object_type
+#ifdef PICOJSON_USE_INT64
+  ,
+  int64_type
+#endif
+};
+
+enum { INDENT_WIDTH = 2 };
+
+struct null {};
+
+class value {
+public:
+  typedef std::vector<value> array;
+  typedef std::map<std::string, value> object;
+  union _storage {
+    bool boolean_;
+    double number_;
+#ifdef PICOJSON_USE_INT64
+    int64_t int64_;
+#endif
+    std::string *string_;
+    array *array_;
+    object *object_;
+  };
+
+protected:
+  int type_;
+  _storage u_;
+
+public:
+  value();
+  value(int type, bool);
+  explicit value(bool b);
+#ifdef PICOJSON_USE_INT64
+  explicit value(int64_t i);
+#endif
+  explicit value(double n);
+  explicit value(const std::string &s);
+  explicit value(const array &a);
+  explicit value(const object &o);
+#if PICOJSON_USE_RVALUE_REFERENCE
+  explicit value(std::string &&s);
+  explicit value(array &&a);
+  explicit value(object &&o);
+#endif
+  explicit value(const char *s);
+  value(const char *s, size_t len);
+  ~value();
+  value(const value &x);
+  value &operator=(const value &x);
+#if PICOJSON_USE_RVALUE_REFERENCE
+  value(value &&x) PICOJSON_NOEXCEPT;
+  value &operator=(value &&x) PICOJSON_NOEXCEPT;
+#endif
+  void swap(value &x) PICOJSON_NOEXCEPT;
+  template <typename T> bool is() const;
+  template <typename T> const T &get() const;
+  template <typename T> T &get();
+  template <typename T> void set(const T &);
+#if PICOJSON_USE_RVALUE_REFERENCE
+  template <typename T> void set(T &&);
+#endif
+  bool evaluate_as_boolean() const;
+  const value &get(const size_t idx) const;
+  const value &get(const std::string &key) const;
+  value &get(const size_t idx);
+  value &get(const std::string &key);
+
+  bool contains(const size_t idx) const;
+  bool contains(const std::string &key) const;
+  std::string to_str() const;
+  template <typename Iter> void serialize(Iter os, bool prettify = false) const;
+  std::string serialize(bool prettify = false) const;
+
+private:
+  template <typename T> value(const T *); // intentionally defined to block implicit conversion of pointer to bool
+  template <typename Iter> static void _indent(Iter os, int indent);
+  template <typename Iter> void _serialize(Iter os, int indent) const;
+  std::string _serialize(int indent) const;
+  void clear();
+};
+
+typedef value::array array;
+typedef value::object object;
+
+inline value::value() : type_(null_type), u_() {
+}
+
+inline value::value(int type, bool) : type_(type), u_() {
+  switch (type) {
+#define INIT(p, v)                                                                                                                 \
+  case p##type:                                                                                                                    \
+    u_.p = v;                                                                                                                      \
+    break
+    INIT(boolean_, false);
+    INIT(number_, 0.0);
+#ifdef PICOJSON_USE_INT64
+    INIT(int64_, 0);
+#endif
+    INIT(string_, new std::string());
+    INIT(array_, new array());
+    INIT(object_, new object());
+#undef INIT
+  default:
+    break;
+  }
+}
+
+inline value::value(bool b) : type_(boolean_type), u_() {
+  u_.boolean_ = b;
+}
+
+#ifdef PICOJSON_USE_INT64
+inline value::value(int64_t i) : type_(int64_type), u_() {
+  u_.int64_ = i;
+}
+#endif
+
+inline value::value(double n) : type_(number_type), u_() {
+  if (
+#ifdef _MSC_VER
+      !_finite(n)
+#elif __cplusplus >= 201103L
+      std::isnan(n) || std::isinf(n)
+#else
+      isnan(n) || isinf(n)
+#endif
+          ) {
+    throw std::overflow_error("");
+  }
+  u_.number_ = n;
+}
+
+inline value::value(const std::string &s) : type_(string_type), u_() {
+  u_.string_ = new std::string(s);
+}
+
+inline value::value(const array &a) : type_(array_type), u_() {
+  u_.array_ = new array(a);
+}
+
+inline value::value(const object &o) : type_(object_type), u_() {
+  u_.object_ = new object(o);
+}
+
+#if PICOJSON_USE_RVALUE_REFERENCE
+inline value::value(std::string &&s) : type_(string_type), u_() {
+  u_.string_ = new std::string(std::move(s));
+}
+
+inline value::value(array &&a) : type_(array_type), u_() {
+  u_.array_ = new array(std::move(a));
+}
+
+inline value::value(object &&o) : type_(object_type), u_() {
+  u_.object_ = new object(std::move(o));
+}
+#endif
+
+inline value::value(const char *s) : type_(string_type), u_() {
+  u_.string_ = new std::string(s);
+}
+
+inline value::value(const char *s, size_t len) : type_(string_type), u_() {
+  u_.string_ = new std::string(s, len);
+}
+
+inline void value::clear() {
+  switch (type_) {
+#define DEINIT(p)                                                                                                                  \
+  case p##type:                                                                                                                    \
+    delete u_.p;                                                                                                                   \
+    break
+    DEINIT(string_);
+    DEINIT(array_);
+    DEINIT(object_);
+#undef DEINIT
+  default:
+    break;
+  }
+}
+
+inline value::~value() {
+  clear();
+}
+
+inline value::value(const value &x) : type_(x.type_), u_() {
+  switch (type_) {
+#define INIT(p, v)                                                                                                                 \
+  case p##type:                                                                                                                    \
+    u_.p = v;                                                                                                                      \
+    break
+    INIT(string_, new std::string(*x.u_.string_));
+    INIT(array_, new array(*x.u_.array_));
+    INIT(object_, new object(*x.u_.object_));
+#undef INIT
+  default:
+    u_ = x.u_;
+    break;
+  }
+}
+
+inline value &value::operator=(const value &x) {
+  if (this != &x) {
+    value t(x);
+    swap(t);
+  }
+  return *this;
+}
+
+#if PICOJSON_USE_RVALUE_REFERENCE
+inline value::value(value &&x) PICOJSON_NOEXCEPT : type_(null_type), u_() {
+  swap(x);
+}
+inline value &value::operator=(value &&x) PICOJSON_NOEXCEPT {
+  swap(x);
+  return *this;
+}
+#endif
+inline void value::swap(value &x) PICOJSON_NOEXCEPT {
+  std::swap(type_, x.type_);
+  std::swap(u_, x.u_);
+}
+
+#define IS(ctype, jtype)                                                                                                           \
+  template <> inline bool value::is<ctype>() const {                                                                               \
+    return type_ == jtype##_type;                                                                                                  \
+  }
+IS(null, null)
+IS(bool, boolean)
+#ifdef PICOJSON_USE_INT64
+IS(int64_t, int64)
+#endif
+IS(std::string, string)
+IS(array, array)
+IS(object, object)
+#undef IS
+template <> inline bool value::is<double>() const {
+  return type_ == number_type
+#ifdef PICOJSON_USE_INT64
+         || type_ == int64_type
+#endif
+      ;
+}
+
+#define GET(ctype, var)                                                                                                            \
+  template <> inline const ctype &value::get<ctype>() const {                                                                      \
+    PICOJSON_ASSERT("type mismatch! call is<type>() before get<type>()" && is<ctype>());                                           \
+    return var;                                                                                                                    \
+  }                                                                                                                                \
+  template <> inline ctype &value::get<ctype>() {                                                                                  \
+    PICOJSON_ASSERT("type mismatch! call is<type>() before get<type>()" && is<ctype>());                                           \
+    return var;                                                                                                                    \
+  }
+GET(bool, u_.boolean_)
+GET(std::string, *u_.string_)
+GET(array, *u_.array_)
+GET(object, *u_.object_)
+#ifdef PICOJSON_USE_INT64
+GET(double,
+    (type_ == int64_type && (const_cast<value *>(this)->type_ = number_type, const_cast<value *>(this)->u_.number_ = u_.int64_),
+     u_.number_))
+GET(int64_t, u_.int64_)
+#else
+GET(double, u_.number_)
+#endif
+#undef GET
+
+#define SET(ctype, jtype, setter)                                                                                                  \
+  template <> inline void value::set<ctype>(const ctype &_val) {                                                                   \
+    clear();                                                                                                                       \
+    type_ = jtype##_type;                                                                                                          \
+    setter                                                                                                                         \
+  }
+SET(bool, boolean, u_.boolean_ = _val;)
+SET(std::string, string, u_.string_ = new std::string(_val);)
+SET(array, array, u_.array_ = new array(_val);)
+SET(object, object, u_.object_ = new object(_val);)
+SET(double, number, u_.number_ = _val;)
+#ifdef PICOJSON_USE_INT64
+SET(int64_t, int64, u_.int64_ = _val;)
+#endif
+#undef SET
+
+#if PICOJSON_USE_RVALUE_REFERENCE
+#define MOVESET(ctype, jtype, setter)                                                                                              \
+  template <> inline void value::set<ctype>(ctype && _val) {                                                                       \
+    clear();                                                                                                                       \
+    type_ = jtype##_type;                                                                                                          \
+    setter                                                                                                                         \
+  }
+MOVESET(std::string, string, u_.string_ = new std::string(std::move(_val));)
+MOVESET(array, array, u_.array_ = new array(std::move(_val));)
+MOVESET(object, object, u_.object_ = new object(std::move(_val));)
+#undef MOVESET
+#endif
+
+inline bool value::evaluate_as_boolean() const {
+  switch (type_) {
+  case null_type:
+    return false;
+  case boolean_type:
+    return u_.boolean_;
+  case number_type:
+    return u_.number_ != 0;
+#ifdef PICOJSON_USE_INT64
+  case int64_type:
+    return u_.int64_ != 0;
+#endif
+  case string_type:
+    return !u_.string_->empty();
+  default:
+    return true;
+  }
+}
+
+inline const value &value::get(const size_t idx) const {
+  static value s_null;
+  PICOJSON_ASSERT(is<array>());
+  return idx < u_.array_->size() ? (*u_.array_)[idx] : s_null;
+}
+
+inline value &value::get(const size_t idx) {
+  static value s_null;
+  PICOJSON_ASSERT(is<array>());
+  return idx < u_.array_->size() ? (*u_.array_)[idx] : s_null;
+}
+
+inline const value &value::get(const std::string &key) const {
+  static value s_null;
+  PICOJSON_ASSERT(is<object>());
+  object::const_iterator i = u_.object_->find(key);
+  return i != u_.object_->end() ? i->second : s_null;
+}
+
+inline value &value::get(const std::string &key) {
+  static value s_null;
+  PICOJSON_ASSERT(is<object>());
+  object::iterator i = u_.object_->find(key);
+  return i != u_.object_->end() ? i->second : s_null;
+}
+
+inline bool value::contains(const size_t idx) const {
+  PICOJSON_ASSERT(is<array>());
+  return idx < u_.array_->size();
+}
+
+inline bool value::contains(const std::string &key) const {
+  PICOJSON_ASSERT(is<object>());
+  object::const_iterator i = u_.object_->find(key);
+  return i != u_.object_->end();
+}
+
+inline std::string value::to_str() const {
+  switch (type_) {
+  case null_type:
+    return "null";
+  case boolean_type:
+    return u_.boolean_ ? "true" : "false";
+#ifdef PICOJSON_USE_INT64
+  case int64_type: {
+    char buf[sizeof("-9223372036854775808")];
+    SNPRINTF(buf, sizeof(buf), "%" PRId64, u_.int64_);
+    return buf;
+  }
+#endif
+  case number_type: {
+    char buf[256];
+    double tmp;
+    SNPRINTF(buf, sizeof(buf), fabs(u_.number_) < (1ULL << 53) && modf(u_.number_, &tmp) == 0 ? "%.f" : "%.17g", u_.number_);
+#if PICOJSON_USE_LOCALE
+    char *decimal_point = localeconv()->decimal_point;
+    if (strcmp(decimal_point, ".") != 0) {
+      size_t decimal_point_len = strlen(decimal_point);
+      for (char *p = buf; *p != '\0'; ++p) {
+        if (strncmp(p, decimal_point, decimal_point_len) == 0) {
+          return std::string(buf, p) + "." + (p + decimal_point_len);
+        }
+      }
+    }
+#endif
+    return buf;
+  }
+  case string_type:
+    return *u_.string_;
+  case array_type:
+    return "array";
+  case object_type:
+    return "object";
+  default:
+    PICOJSON_ASSERT(0);
+#ifdef _MSC_VER
+    __assume(0);
+#endif
+  }
+  return std::string();
+}
+
+template <typename Iter> void copy(const std::string &s, Iter oi) {
+  std::copy(s.begin(), s.end(), oi);
+}
+
+template <typename Iter> struct serialize_str_char {
+  Iter oi;
+  void operator()(char c) {
+    switch (c) {
+#define MAP(val, sym)                                                                                                              \
+  case val:                                                                                                                        \
+    copy(sym, oi);                                                                                                                 \
+    break
+      MAP('"', "\\\"");
+      MAP('\\', "\\\\");
+      MAP('/', "\\/");
+      MAP('\b', "\\b");
+      MAP('\f', "\\f");
+      MAP('\n', "\\n");
+      MAP('\r', "\\r");
+      MAP('\t', "\\t");
+#undef MAP
+    default:
+      if (static_cast<unsigned char>(c) < 0x20 || c == 0x7f) {
+        char buf[7];
+        SNPRINTF(buf, sizeof(buf), "\\u%04x", c & 0xff);
+        copy(buf, buf + 6, oi);
+      } else {
+        *oi++ = c;
+      }
+      break;
+    }
+  }
+};
+
+template <typename Iter> void serialize_str(const std::string &s, Iter oi) {
+  *oi++ = '"';
+  serialize_str_char<Iter> process_char = {oi};
+  std::for_each(s.begin(), s.end(), process_char);
+  *oi++ = '"';
+}
+
+template <typename Iter> void value::serialize(Iter oi, bool prettify) const {
+  return _serialize(oi, prettify ? 0 : -1);
+}
+
+inline std::string value::serialize(bool prettify) const {
+  return _serialize(prettify ? 0 : -1);
+}
+
+template <typename Iter> void value::_indent(Iter oi, int indent) {
+  *oi++ = '\n';
+  for (int i = 0; i < indent * INDENT_WIDTH; ++i) {
+    *oi++ = ' ';
+  }
+}
+
+template <typename Iter> void value::_serialize(Iter oi, int indent) const {
+  switch (type_) {
+  case string_type:
+    serialize_str(*u_.string_, oi);
+    break;
+  case array_type: {
+    *oi++ = '[';
+    if (indent != -1) {
+      ++indent;
+    }
+    for (array::const_iterator i = u_.array_->begin(); i != u_.array_->end(); ++i) {
+      if (i != u_.array_->begin()) {
+        *oi++ = ',';
+      }
+      if (indent != -1) {
+        _indent(oi, indent);
+      }
+      i->_serialize(oi, indent);
+    }
+    if (indent != -1) {
+      --indent;
+      if (!u_.array_->empty()) {
+        _indent(oi, indent);
+      }
+    }
+    *oi++ = ']';
+    break;
+  }
+  case object_type: {
+    *oi++ = '{';
+    if (indent != -1) {
+      ++indent;
+    }
+    for (object::const_iterator i = u_.object_->begin(); i != u_.object_->end(); ++i) {
+      if (i != u_.object_->begin()) {
+        *oi++ = ',';
+      }
+      if (indent != -1) {
+        _indent(oi, indent);
+      }
+      serialize_str(i->first, oi);
+      *oi++ = ':';
+      if (indent != -1) {
+        *oi++ = ' ';
+      }
+      i->second._serialize(oi, indent);
+    }
+    if (indent != -1) {
+      --indent;
+      if (!u_.object_->empty()) {
+        _indent(oi, indent);
+      }
+    }
+    *oi++ = '}';
+    break;
+  }
+  default:
+    copy(to_str(), oi);
+    break;
+  }
+  if (indent == 0) {
+    *oi++ = '\n';
+  }
+}
+
+inline std::string value::_serialize(int indent) const {
+  std::string s;
+  _serialize(std::back_inserter(s), indent);
+  return s;
+}
+
+template <typename Iter> class input {
+protected:
+  Iter cur_, end_;
+  bool consumed_;
+  int line_;
+
+public:
+  input(const Iter &first, const Iter &last) : cur_(first), end_(last), consumed_(false), line_(1) {
+  }
+  int getc() {
+    if (consumed_) {
+      if (*cur_ == '\n') {
+        ++line_;
+      }
+      ++cur_;
+    }
+    if (cur_ == end_) {
+      consumed_ = false;
+      return -1;
+    }
+    consumed_ = true;
+    return *cur_ & 0xff;
+  }
+  void ungetc() {
+    consumed_ = false;
+  }
+  Iter cur() const {
+    if (consumed_) {
+      input<Iter> *self = const_cast<input<Iter> *>(this);
+      self->consumed_ = false;
+      ++self->cur_;
+    }
+    return cur_;
+  }
+  int line() const {
+    return line_;
+  }
+  void skip_ws() {
+    while (1) {
+      int ch = getc();
+      if (!(ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r')) {
+        ungetc();
+        break;
+      }
+    }
+  }
+  bool picojson_expect(const int expected) {
+    skip_ws();
+    if (getc() != expected) {
+      ungetc();
+      return false;
+    }
+    return true;
+  }
+  bool match(const std::string &pattern) {
+    for (std::string::const_iterator pi(pattern.begin()); pi != pattern.end(); ++pi) {
+      if (getc() != *pi) {
+        ungetc();
+        return false;
+      }
+    }
+    return true;
+  }
+};
+
+template <typename Iter> inline int _parse_quadhex(input<Iter> &in) {
+  int uni_ch = 0, hex;
+  for (int i = 0; i < 4; i++) {
+    if ((hex = in.getc()) == -1) {
+      return -1;
+    }
+    if ('0' <= hex && hex <= '9') {
+      hex -= '0';
+    } else if ('A' <= hex && hex <= 'F') {
+      hex -= 'A' - 0xa;
+    } else if ('a' <= hex && hex <= 'f') {
+      hex -= 'a' - 0xa;
+    } else {
+      in.ungetc();
+      return -1;
+    }
+    uni_ch = uni_ch * 16 + hex;
+  }
+  return uni_ch;
+}
+
+template <typename String, typename Iter> inline bool _parse_codepoint(String &out, input<Iter> &in) {
+  int uni_ch;
+  if ((uni_ch = _parse_quadhex(in)) == -1) {
+    return false;
+  }
+  if (0xd800 <= uni_ch && uni_ch <= 0xdfff) {
+    if (0xdc00 <= uni_ch) {
+      // a second 16-bit of a surrogate pair appeared
+      return false;
+    }
+    // first 16-bit of surrogate pair, get the next one
+    if (in.getc() != '\\' || in.getc() != 'u') {
+      in.ungetc();
+      return false;
+    }
+    int second = _parse_quadhex(in);
+    if (!(0xdc00 <= second && second <= 0xdfff)) {
+      return false;
+    }
+    uni_ch = ((uni_ch - 0xd800) << 10) | ((second - 0xdc00) & 0x3ff);
+    uni_ch += 0x10000;
+  }
+  if (uni_ch < 0x80) {
+    out.push_back(static_cast<char>(uni_ch));
+  } else {
+    if (uni_ch < 0x800) {
+      out.push_back(static_cast<char>(0xc0 | (uni_ch >> 6)));
+    } else {
+      if (uni_ch < 0x10000) {
+        out.push_back(static_cast<char>(0xe0 | (uni_ch >> 12)));
+      } else {
+        out.push_back(static_cast<char>(0xf0 | (uni_ch >> 18)));
+        out.push_back(static_cast<char>(0x80 | ((uni_ch >> 12) & 0x3f)));
+      }
+      out.push_back(static_cast<char>(0x80 | ((uni_ch >> 6) & 0x3f)));
+    }
+    out.push_back(static_cast<char>(0x80 | (uni_ch & 0x3f)));
+  }
+  return true;
+}
+
+template <typename String, typename Iter> inline bool _parse_string(String &out, input<Iter> &in) {
+  while (1) {
+    int ch = in.getc();
+    if (ch < ' ') {
+      in.ungetc();
+      return false;
+    } else if (ch == '"') {
+      return true;
+    } else if (ch == '\\') {
+      if ((ch = in.getc()) == -1) {
+        return false;
+      }
+      switch (ch) {
+#define MAP(sym, val)                                                                                                              \
+  case sym:                                                                                                                        \
+    out.push_back(val);                                                                                                            \
+    break
+        MAP('"', '\"');
+        MAP('\\', '\\');
+        MAP('/', '/');
+        MAP('b', '\b');
+        MAP('f', '\f');
+        MAP('n', '\n');
+        MAP('r', '\r');
+        MAP('t', '\t');
+#undef MAP
+      case 'u':
+        if (!_parse_codepoint(out, in)) {
+          return false;
+        }
+        break;
+      default:
+        return false;
+      }
+    } else {
+      out.push_back(static_cast<char>(ch));
+    }
+  }
+  return false;
+}
+
+template <typename Context, typename Iter> inline bool _parse_array(Context &ctx, input<Iter> &in) {
+  if (!ctx.parse_array_start()) {
+    return false;
+  }
+  size_t idx = 0;
+  if (in.picojson_expect(']')) {
+    return ctx.parse_array_stop(idx);
+  }
+  do {
+    if (!ctx.parse_array_item(in, idx)) {
+      return false;
+    }
+    idx++;
+  } while (in.picojson_expect(','));
+  return in.picojson_expect(']') && ctx.parse_array_stop(idx);
+}
+
+template <typename Context, typename Iter> inline bool _parse_object(Context &ctx, input<Iter> &in) {
+  if (!ctx.parse_object_start()) {
+    return false;
+  }
+  if (in.picojson_expect('}')) {
+    return true;
+  }
+  do {
+    std::string key;
+    if (!in.picojson_expect('"') || !_parse_string(key, in) || !in.picojson_expect(':')) {
+      return false;
+    }
+    if (!ctx.parse_object_item(in, key)) {
+      return false;
+    }
+  } while (in.picojson_expect(','));
+  return in.picojson_expect('}');
+}
+
+template <typename Iter> inline std::string _parse_number(input<Iter> &in) {
+  std::string num_str;
+  while (1) {
+    int ch = in.getc();
+    if (('0' <= ch && ch <= '9') || ch == '+' || ch == '-' || ch == 'e' || ch == 'E') {
+      num_str.push_back(static_cast<char>(ch));
+    } else if (ch == '.') {
+#if PICOJSON_USE_LOCALE
+      num_str += localeconv()->decimal_point;
+#else
+      num_str.push_back('.');
+#endif
+    } else {
+      in.ungetc();
+      break;
+    }
+  }
+  return num_str;
+}
+
+template <typename Context, typename Iter> inline bool _parse(Context &ctx, input<Iter> &in) {
+  in.skip_ws();
+  int ch = in.getc();
+  switch (ch) {
+#define IS(ch, text, op)                                                                                                           \
+  case ch:                                                                                                                         \
+    if (in.match(text) && op) {                                                                                                    \
+      return true;                                                                                                                 \
+    } else {                                                                                                                       \
+      return false;                                                                                                                \
+    }
+    IS('n', "ull", ctx.set_null());
+    IS('f', "alse", ctx.set_bool(false));
+    IS('t', "rue", ctx.set_bool(true));
+#undef IS
+  case '"':
+    return ctx.parse_string(in);
+  case '[':
+    return _parse_array(ctx, in);
+  case '{':
+    return _parse_object(ctx, in);
+  default:
+    if (('0' <= ch && ch <= '9') || ch == '-') {
+      double f;
+      char *endp;
+      in.ungetc();
+      std::string num_str(_parse_number(in));
+      if (num_str.empty()) {
+        return false;
+      }
+#ifdef PICOJSON_USE_INT64
+      {
+        errno = 0;
+        intmax_t ival = strtoimax(num_str.c_str(), &endp, 10);
+        if (errno == 0 && std::numeric_limits<int64_t>::min() <= ival && ival <= std::numeric_limits<int64_t>::max() &&
+            endp == num_str.c_str() + num_str.size()) {
+          ctx.set_int64(ival);
+          return true;
+        }
+      }
+#endif
+      f = strtod(num_str.c_str(), &endp);
+      if (endp == num_str.c_str() + num_str.size()) {
+        ctx.set_number(f);
+        return true;
+      }
+      return false;
+    }
+    break;
+  }
+  in.ungetc();
+  return false;
+}
+
+class deny_parse_context {
+public:
+  bool set_null() {
+    return false;
+  }
+  bool set_bool(bool) {
+    return false;
+  }
+#ifdef PICOJSON_USE_INT64
+  bool set_int64(int64_t) {
+    return false;
+  }
+#endif
+  bool set_number(double) {
+    return false;
+  }
+  template <typename Iter> bool parse_string(input<Iter> &) {
+    return false;
+  }
+  bool parse_array_start() {
+    return false;
+  }
+  template <typename Iter> bool parse_array_item(input<Iter> &, size_t) {
+    return false;
+  }
+  bool parse_array_stop(size_t) {
+    return false;
+  }
+  bool parse_object_start() {
+    return false;
+  }
+  template <typename Iter> bool parse_object_item(input<Iter> &, const std::string &) {
+    return false;
+  }
+};
+
+class default_parse_context {
+protected:
+  value *out_;
+
+public:
+  default_parse_context(value *out) : out_(out) {
+  }
+  bool set_null() {
+    *out_ = value();
+    return true;
+  }
+  bool set_bool(bool b) {
+    *out_ = value(b);
+    return true;
+  }
+#ifdef PICOJSON_USE_INT64
+  bool set_int64(int64_t i) {
+    *out_ = value(i);
+    return true;
+  }
+#endif
+  bool set_number(double f) {
+    *out_ = value(f);
+    return true;
+  }
+  template <typename Iter> bool parse_string(input<Iter> &in) {
+    *out_ = value(string_type, false);
+    return _parse_string(out_->get<std::string>(), in);
+  }
+  bool parse_array_start() {
+    *out_ = value(array_type, false);
+    return true;
+  }
+  template <typename Iter> bool parse_array_item(input<Iter> &in, size_t) {
+    array &a = out_->get<array>();
+    a.push_back(value());
+    default_parse_context ctx(&a.back());
+    return _parse(ctx, in);
+  }
+  bool parse_array_stop(size_t) {
+    return true;
+  }
+  bool parse_object_start() {
+    *out_ = value(object_type, false);
+    return true;
+  }
+  template <typename Iter> bool parse_object_item(input<Iter> &in, const std::string &key) {
+    object &o = out_->get<object>();
+    default_parse_context ctx(&o[key]);
+    return _parse(ctx, in);
+  }
+
+private:
+  default_parse_context(const default_parse_context &);
+  default_parse_context &operator=(const default_parse_context &);
+};
+
+class null_parse_context {
+public:
+  struct dummy_str {
+    void push_back(int) {
+    }
+  };
+
+public:
+  null_parse_context() {
+  }
+  bool set_null() {
+    return true;
+  }
+  bool set_bool(bool) {
+    return true;
+  }
+#ifdef PICOJSON_USE_INT64
+  bool set_int64(int64_t) {
+    return true;
+  }
+#endif
+  bool set_number(double) {
+    return true;
+  }
+  template <typename Iter> bool parse_string(input<Iter> &in) {
+    dummy_str s;
+    return _parse_string(s, in);
+  }
+  bool parse_array_start() {
+    return true;
+  }
+  template <typename Iter> bool parse_array_item(input<Iter> &in, size_t) {
+    return _parse(*this, in);
+  }
+  bool parse_array_stop(size_t) {
+    return true;
+  }
+  bool parse_object_start() {
+    return true;
+  }
+  template <typename Iter> bool parse_object_item(input<Iter> &in, const std::string &) {
+    return _parse(*this, in);
+  }
+
+private:
+  null_parse_context(const null_parse_context &);
+  null_parse_context &operator=(const null_parse_context &);
+};
+
+// obsolete, use the version below
+template <typename Iter> inline std::string parse(value &out, Iter &pos, const Iter &last) {
+  std::string err;
+  pos = parse(out, pos, last, &err);
+  return err;
+}
+
+template <typename Context, typename Iter> inline Iter _parse(Context &ctx, const Iter &first, const Iter &last, std::string *err) {
+  input<Iter> in(first, last);
+  if (!_parse(ctx, in) && err != NULL) {
+    char buf[64];
+    SNPRINTF(buf, sizeof(buf), "syntax error at line %d near: ", in.line());
+    *err = buf;
+    while (1) {
+      int ch = in.getc();
+      if (ch == -1 || ch == '\n') {
+        break;
+      } else if (ch >= ' ') {
+        err->push_back(static_cast<char>(ch));
+      }
+    }
+  }
+  return in.cur();
+}
+
+template <typename Iter> inline Iter parse(value &out, const Iter &first, const Iter &last, std::string *err) {
+  default_parse_context ctx(&out);
+  return _parse(ctx, first, last, err);
+}
+
+inline std::string parse(value &out, const std::string &s) {
+  std::string err;
+  parse(out, s.begin(), s.end(), &err);
+  return err;
+}
+
+inline std::string parse(value &out, std::istream &is) {
+  std::string err;
+  parse(out, std::istreambuf_iterator<char>(is.rdbuf()), std::istreambuf_iterator<char>(), &err);
+  return err;
+}
+
+template <typename T> struct last_error_t { static std::string s; };
+template <typename T> std::string last_error_t<T>::s;
+
+inline void set_last_error(const std::string &s) {
+  last_error_t<bool>::s = s;
+}
+
+inline const std::string &get_last_error() {
+  return last_error_t<bool>::s;
+}
+
+inline bool operator==(const value &x, const value &y) {
+  if (x.is<null>())
+    return y.is<null>();
+#define PICOJSON_CMP(type)                                                                                                         \
+  if (x.is<type>())                                                                                                                \
+  return y.is<type>() && x.get<type>() == y.get<type>()
+  PICOJSON_CMP(bool);
+  PICOJSON_CMP(double);
+  PICOJSON_CMP(std::string);
+  PICOJSON_CMP(array);
+  PICOJSON_CMP(object);
+#undef PICOJSON_CMP
+  PICOJSON_ASSERT(0);
+#ifdef _MSC_VER
+  __assume(0);
+#endif
+  return false;
+}
+
+inline bool operator!=(const value &x, const value &y) {
+  return !(x == y);
+}
+}
+
+#if !PICOJSON_USE_RVALUE_REFERENCE
+namespace std {
+template <> inline void swap(picojson::value &x, picojson::value &y) {
+  x.swap(y);
+}
+}
+#endif
+
+inline std::istream &operator>>(std::istream &is, picojson::value &x) {
+  picojson::set_last_error(std::string());
+  const std::string err(picojson::parse(x, is));
+  if (!err.empty()) {
+    picojson::set_last_error(err);
+    is.setstate(std::ios::failbit);
+  }
+  return is;
+}
+
+inline std::ostream &operator<<(std::ostream &os, const picojson::value &x) {
+  x.serialize(std::ostream_iterator<char>(os));
+  return os;
+}
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif
index bdb0a43ac118117f2482c0b42b77039a0b252de2..7f60c651a338e48d857a167bff307d2834bfa9b7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-# version 1
+# version 2020-10-20
 
 # IMPORTANT: affects order produced by 'sort' and 'ceph-diff-sorted'
 # relies on this ordering
@@ -8,9 +8,10 @@ export LANG=C
 
 out_dir="."
 temp_file=/tmp/temp.$$
-timestamp=$(date -u +%Y%m%d%H%M)
+timestamp=$(date -u +%Y%m%d%H%M%S)
 lspools_err="${out_dir}/lspools-${timestamp}.error"
 rados_out="${out_dir}/rados-${timestamp}.intermediate"
+rados_odd="${out_dir}/rados-${timestamp}.issues"
 rados_err="${out_dir}/rados-${timestamp}.error"
 rgwadmin_out="${out_dir}/radosgw-admin-${timestamp}.intermediate"
 rgwadmin_err="${out_dir}/radosgw-admin-${timestamp}.error"
@@ -18,6 +19,9 @@ delta_out="${out_dir}/orphan-list-${timestamp}.out"
 
 error_out() {
     echo "An error was encountered while running '$1'. Aborting."
+    if [ $# -gt 2 ] ;then
+       echo "Error: $3"
+    fi
     if [ $# -gt 1 ] ;then
        echo "Review file '$2' for details."
     fi
@@ -54,10 +58,52 @@ echo "Pool is \"$pool\"."
 echo "Note: output files produced will be tagged with the current timestamp -- ${timestamp}."
 
 echo "running 'rados ls' at $(date)"
-rados ls --pool="$pool" >"$rados_out" 2>"$rados_err"
+# since --format is not specified, plain should be used
+rados ls --pool="$pool" --all >"$rados_out" 2>"$rados_err"
 if [ "$?" -ne 0 ] ;then
     error_out "rados ls" "$rados_err"
 fi
+
+# NOTE: Each entry (line of output) of `rados ls --all` should be in
+# one of four formats depending on whether or not an entry has a
+# namespace and/or locator:
+#
+#   <TAB>oid
+#   <TAB>oid<TAB>locator
+#   namespace<TAB>oid
+#   namespace<TAB>oid<TAB>locator
+#
+# Any occurrences of the 2nd, 3rd, or 4th (i.e., existence of
+# namespace and/or locator) should cause the create of the "odd" file
+# and an explanation in the output, and those entries will not be
+# retained, and therefore they will not be called out as orphans. They
+# will need special handling by the end-user as we do not expect
+# namespaces or locators.
+
+# check for namespaces -- any line that does not begin with a tab
+# indicates a namespace; add those to "odd" file and set flag; note:
+# this also picks up entries with namespace and locator
+grep $'^[^\t]' "$rados_out" >"$rados_odd"
+if [ "${PIPESTATUS[0]}" -eq 0 ] ;then
+    namespace_found=1
+fi
+
+# check for locators (w/o namespace); we idenitfy them by skipping
+# past the empty namespace (i.e., one TAB), skipping past the oid,
+# then looking for a TAB; note we use egrep to get the '+' character
+# and the $ in front of the ' allows the \t to be interpreted as a TAB
+egrep $'^\t[[:graph:]]+\t' "$rados_out" >>"$rados_odd"
+if [ "${PIPESTATUS[0]}" -eq 0 ] ;then
+    locator_found=1
+fi
+
+# extract the entries that are just oids (i.e., no namespace or
+# locator) for further processing; only look at lines that begin with
+# a TAB and do not contain a second TAB, and then grab everything
+# after the initial TAB
+grep $'^\t' "$rados_out" | grep -v $'^\t.*\t' | sed -E 's/^\t//' >"$temp_file"
+mv -f "$temp_file" "$rados_out"
+
 sort -u "$rados_out" >"$temp_file"
 mv -f "$temp_file" "$rados_out"
 
@@ -85,8 +131,12 @@ if [ $possible -ne 0 ] ;then
 fi
 
 echo "$found potential orphans found out of a possible $possible (${percentage}%)."
-echo "The results can be found in ${delta_out}."
-echo "    Intermediate files: ${rados_out} and ${rgwadmin_out}"
+echo "The results can be found in '${delta_out}'."
+echo "    Intermediate files are '${rados_out}' and '${rgwadmin_out}'."
+if [ -n "$namespace_found" -o -n "$locator_found" ] ;then
+    echo "    Note: 'rados ls' found entries that might be in a namespace or might"
+    echo "          have a locator; see '${rados_odd}' for those entries."
+fi
 echo "***"
 echo "*** WARNING: This is EXPERIMENTAL code and the results should be used"
 echo "***          only with CAUTION!"
index 6831a78ed23e94aacb787754d5f6fa31ddd31f4c..a6eef9a54205c8527e94022b42bff5595d004190 100644 (file)
@@ -3790,6 +3790,9 @@ int main(int argc, const char **argv)
 
   // not a raw op if 'period update' needs to commit to master
   bool raw_period_update = opt_cmd == OPT::PERIOD_UPDATE && !commit;
+  // not a raw op if 'period pull' needs to read zone/period configuration
+  bool raw_period_pull = opt_cmd == OPT::PERIOD_PULL && !url.empty();
+
   std::set<OPT> raw_storage_ops_list = {OPT::ZONEGROUP_ADD, OPT::ZONEGROUP_CREATE, OPT::ZONEGROUP_DELETE,
                         OPT::ZONEGROUP_GET, OPT::ZONEGROUP_LIST,
                          OPT::ZONEGROUP_SET, OPT::ZONEGROUP_DEFAULT,
@@ -3807,7 +3810,6 @@ int main(int argc, const char **argv)
                         OPT::ZONE_PLACEMENT_GET,
                         OPT::REALM_CREATE,
                         OPT::PERIOD_DELETE, OPT::PERIOD_GET,
-                        OPT::PERIOD_PULL,
                         OPT::PERIOD_GET_CURRENT, OPT::PERIOD_LIST,
                         OPT::GLOBAL_QUOTA_GET, OPT::GLOBAL_QUOTA_SET,
                         OPT::GLOBAL_QUOTA_ENABLE, OPT::GLOBAL_QUOTA_DISABLE,
@@ -3878,7 +3880,7 @@ int main(int argc, const char **argv)
 
 
   bool raw_storage_op = (raw_storage_ops_list.find(opt_cmd) != raw_storage_ops_list.end() ||
-                         raw_period_update);
+                         raw_period_update || raw_period_pull);
   bool need_cache = readonly_ops_list.find(opt_cmd) == readonly_ops_list.end();
 
   if (raw_storage_op) {
@@ -6042,10 +6044,17 @@ int main(int argc, const char **argv)
         return -ret;
       }
       formatter->open_array_section("entries");
-      bool truncated;
+
+      bool truncated = false;
       int count = 0;
-      if (max_entries < 0)
-        max_entries = 1000;
+
+      static constexpr int MAX_PAGINATE_SIZE = 10000;
+      static constexpr int DEFAULT_MAX_ENTRIES = 1000;
+
+      if (max_entries < 0) {
+       max_entries = DEFAULT_MAX_ENTRIES;
+      }
+      const int paginate_size = std::min(max_entries, MAX_PAGINATE_SIZE);
 
       string prefix;
       string delim;
@@ -6065,7 +6074,10 @@ int main(int argc, const char **argv)
       list_op.params.allow_unordered = bool(allow_unordered);
 
       do {
-        ret = list_op.list_objects(max_entries - count, &result, &common_prefixes, &truncated, null_yield);
+        const int remaining = max_entries - count;
+        ret = list_op.list_objects(std::min(remaining, paginate_size),
+                                  &result, &common_prefixes, &truncated,
+                                  null_yield);
         if (ret < 0) {
           cerr << "ERROR: store->list_objects(): " << cpp_strerror(-ret) << std::endl;
           return -ret;
@@ -6073,8 +6085,7 @@ int main(int argc, const char **argv)
 
         count += result.size();
 
-        for (vector<rgw_bucket_dir_entry>::iterator iter = result.begin(); iter != result.end(); ++iter) {
-          rgw_bucket_dir_entry& entry = *iter;
+        for (const auto& entry : result) {
           encode_json("entry", entry, formatter);
         }
         formatter->flush(cout);
index c8158db9eb3395ee8212a139af496e0eb6e85025..577f70f385d8942b135f44ce4981a33a6e7b9719 100644 (file)
@@ -20,6 +20,7 @@
 
 #ifdef WITH_RADOSGW_BEAST_OPENSSL
 #include <boost/asio/ssl.hpp>
+#include <boost/beast/ssl/ssl_stream.hpp>
 
 #include "services/svc_config_key.h"
 #include "services/svc_zone.h"
@@ -53,25 +54,31 @@ class StreamIO : public rgw::asio::ClientIO {
   Stream& stream;
   spawn::yield_context yield;
   parse_buffer& buffer;
+  ceph::timespan request_timeout;
  public:
   StreamIO(CephContext *cct, Stream& stream, rgw::asio::parser_type& parser,
            spawn::yield_context yield,
            parse_buffer& buffer, bool is_ssl,
            const tcp::endpoint& local_endpoint,
-           const tcp::endpoint& remote_endpoint)
+           const tcp::endpoint& remote_endpoint,
+           ceph::timespan request_timeout)
       : ClientIO(parser, is_ssl, local_endpoint, remote_endpoint),
-        cct(cct), stream(stream), yield(yield), buffer(buffer)
+        cct(cct), stream(stream), yield(yield), buffer(buffer), request_timeout(request_timeout)
   {}
 
   size_t write_data(const char* buf, size_t len) override {
     boost::system::error_code ec;
+    auto& timeout = get_lowest_layer(stream);
+    if (request_timeout.count()) {
+      timeout.expires_after(request_timeout);
+    }
     auto bytes = boost::asio::async_write(stream, boost::asio::buffer(buf, len),
                                           yield[ec]);
     if (ec) {
       ldout(cct, 4) << "write_data failed: " << ec.message() << dendl;
       if (ec==boost::asio::error::broken_pipe) {
         boost::system::error_code ec_ignored;
-        stream.lowest_layer().shutdown(tcp::socket::shutdown_both, ec_ignored);
+        timeout.socket().shutdown(tcp::socket::shutdown_both, ec_ignored);
       }
       throw rgw::io::Exception(ec.value(), std::system_category());
     }
@@ -79,6 +86,7 @@ class StreamIO : public rgw::asio::ClientIO {
   }
 
   size_t recv_body(char* buf, size_t max) override {
+    auto& timeout = get_lowest_layer(stream);
     auto& message = parser.get();
     auto& body_remaining = message.body();
     body_remaining.data = buf;
@@ -86,6 +94,9 @@ class StreamIO : public rgw::asio::ClientIO {
 
     while (body_remaining.size && !parser.is_done()) {
       boost::system::error_code ec;
+      if (request_timeout.count()) {
+        timeout.expires_after(request_timeout);
+      }
       http::async_read_some(stream, buffer, parser, yield[ec]);
       if (ec == http::error::need_buffer) {
         break;
@@ -136,7 +147,8 @@ void handle_connection(boost::asio::io_context& context,
                        SharedMutex& pause_mutex,
                        rgw::dmclock::Scheduler *scheduler,
                        boost::system::error_code& ec,
-                       spawn::yield_context yield)
+                       spawn::yield_context yield,
+                       ceph::timespan request_timeout)
 {
   // limit header to 4k, since we read it all into a single flat_buffer
   static constexpr size_t header_limit = 4096;
@@ -151,7 +163,10 @@ void handle_connection(boost::asio::io_context& context,
     rgw::asio::parser_type parser;
     parser.header_limit(header_limit);
     parser.body_limit(body_limit);
-
+    auto& timeout = get_lowest_layer(stream);
+    if (request_timeout.count()) {
+      timeout.expires_after(request_timeout);
+    }
     // parse the header
     http::async_read_header(stream, buffer, parser, yield[ec]);
     if (ec == boost::asio::error::connection_reset ||
@@ -171,6 +186,9 @@ void handle_connection(boost::asio::io_context& context,
       response.result(http::status::bad_request);
       response.version(message.version() == 10 ? 10 : 11);
       response.prepare_payload();
+      if (request_timeout.count()) {
+        timeout.expires_after(request_timeout);
+      }
       http::async_write(stream, response, yield[ec]);
       if (ec) {
         ldout(cct, 5) << "failed to write response: " << ec.message() << dendl;
@@ -191,7 +209,7 @@ void handle_connection(boost::asio::io_context& context,
       // process the request
       RGWRequest req{env.store->getRados()->get_new_req_id()};
 
-      auto& socket = stream.lowest_layer();
+      auto& socket = get_lowest_layer(stream).socket();
       const auto& remote_endpoint = socket.remote_endpoint(ec);
       if (ec) {
         ldout(cct, 1) << "failed to connect client: " << ec.message() << dendl;
@@ -200,7 +218,7 @@ void handle_connection(boost::asio::io_context& context,
 
       StreamIO real_client{cct, stream, parser, yield, buffer, is_ssl,
                            socket.local_endpoint(),
-                           remote_endpoint};
+                           remote_endpoint,request_timeout};
 
       auto real_client_io = rgw::io::add_reordering(
                               rgw::io::add_buffering(cct,
@@ -242,6 +260,9 @@ void handle_connection(boost::asio::io_context& context,
       body.size = discard_buffer.size();
       body.data = discard_buffer.data();
 
+      if (request_timeout.count()) {
+        timeout.expires_after(request_timeout);
+      }
       http::async_read_some(stream, buffer, parser, yield[ec]);
       if (ec == http::error::need_buffer) {
         continue;
@@ -301,6 +322,7 @@ class AsioFrontend {
   RGWProcessEnv env;
   RGWFrontendConfig* conf;
   boost::asio::io_context context;
+  ceph::timespan request_timeout = std::chrono::milliseconds(REQUEST_TIMEOUT);
 #ifdef WITH_RADOSGW_BEAST_OPENSSL
   boost::optional<ssl::context> ssl_context;
   int get_config_key_val(string name,
@@ -460,6 +482,18 @@ int AsioFrontend::init()
   boost::system::error_code ec;
   auto& config = conf->get_config_map();
 
+// Setting global timeout
+  auto timeout = config.find("request_timeout_ms");
+  if (timeout != config.end()) {
+    auto timeout_number = ceph::parse<uint64_t>(timeout->second.data());
+    if (timeout_number) {
+      request_timeout =  std::chrono::milliseconds(*timeout_number);
+    } else {
+      lderr(ctx()) << "WARNING: invalid value for request_timeout_ms: "
+      << timeout->second.data() << " setting it to the default value: "
+      << REQUEST_TIMEOUT << dendl;
+    }
+  } 
 #ifdef WITH_RADOSGW_BEAST_OPENSSL
   int r = init_ssl();
   if (r < 0) {
@@ -832,19 +866,23 @@ void AsioFrontend::accept(Listener& l, boost::system::error_code ec)
                           [this, &l] (boost::system::error_code ec) {
                             accept(l, ec);
                           });
-
+  
+  boost::beast::tcp_stream stream(std::move(socket));
   // spawn a coroutine to handle the connection
 #ifdef WITH_RADOSGW_BEAST_OPENSSL
   if (l.use_ssl) {
     spawn::spawn(context,
-      [this, s=std::move(socket)] (spawn::yield_context yield) mutable {
-        Connection conn{s};
+      [this, s=std::move(stream)] (spawn::yield_context yield) mutable {
+        Connection conn{s.socket()};
         auto c = connections.add(conn);
-        // wrap the socket in an ssl stream
-        ssl::stream<tcp::socket&> stream{s, *ssl_context};
+        // wrap the tcp_stream in an ssl stream
+        boost::beast::ssl_stream<boost::beast::tcp_stream&> stream{s, *ssl_context};
         auto buffer = std::make_unique<parse_buffer>();
         // do ssl handshake
         boost::system::error_code ec;
+        if (request_timeout.count()) {
+          get_lowest_layer(stream).expires_after(request_timeout);
+        }
         auto bytes = stream.async_handshake(ssl::stream_base::server,
                                             buffer->data(), yield[ec]);
         if (ec) {
@@ -853,26 +891,26 @@ void AsioFrontend::accept(Listener& l, boost::system::error_code ec)
         }
         buffer->consume(bytes);
         handle_connection(context, env, stream, *buffer, true, pause_mutex,
-                          scheduler.get(), ec, yield);
+                          scheduler.get(), ec, yield, request_timeout);
         if (!ec) {
           // ssl shutdown (ignoring errors)
           stream.async_shutdown(yield[ec]);
         }
-        s.shutdown(tcp::socket::shutdown_both, ec);
+        s.socket().shutdown(tcp::socket::shutdown_both, ec);
       }, make_stack_allocator());
   } else {
 #else
   {
 #endif // WITH_RADOSGW_BEAST_OPENSSL
     spawn::spawn(context,
-      [this, s=std::move(socket)] (spawn::yield_context yield) mutable {
-        Connection conn{s};
+      [this, s=std::move(stream)] (spawn::yield_context yield) mutable {
+        Connection conn{s.socket()};
         auto c = connections.add(conn);
         auto buffer = std::make_unique<parse_buffer>();
         boost::system::error_code ec;
         handle_connection(context, env, s, *buffer, false, pause_mutex,
-                          scheduler.get(), ec, yield);
-        s.shutdown(tcp::socket::shutdown_both, ec);
+                          scheduler.get(), ec, yield, request_timeout);
+        s.socket().shutdown(tcp::socket::shutdown_both, ec);
       }, make_stack_allocator());
   }
 }
index b4b1bc3b86bc3668f91c8452abf6bc2f1ebe134a..d5aaee5bcea31d6ac6b970b50498260ed16f74d4 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include "rgw_frontend.h"
+#define REQUEST_TIMEOUT 65000
 
 class RGWAsioFrontend : public RGWFrontend {
   class Impl;
index 53649433ab6ab3823784efd600d70e5a5c05a882..22d8ccd0d49e40b22dac59b863e4acdc1f71ae24 100644 (file)
@@ -2,6 +2,7 @@
 // vim: ts=8 sw=2 smarttab ft=cpp
 
 #include <array>
+#include <string>
 
 #include "rgw_common.h"
 #include "rgw_auth.h"
@@ -350,15 +351,7 @@ void rgw::auth::WebIdentityApplier::to_str(std::ostream& out) const
 string rgw::auth::WebIdentityApplier::get_idp_url() const
 {
   string idp_url = token_claims.iss;
-  auto pos = idp_url.find("http://");
-  if (pos == std::string::npos) {
-      pos = idp_url.find("https://");
-      if (pos != std::string::npos) {
-        idp_url.erase(pos, 8);
-    }
-  } else {
-    idp_url.erase(pos, 7);
-  }
+  idp_url = url_remove_prefix(idp_url);
   return idp_url;
 }
 
@@ -367,10 +360,16 @@ void rgw::auth::WebIdentityApplier::modify_request_state(const DoutPrefixProvide
   s->info.args.append("sub", token_claims.sub);
   s->info.args.append("aud", token_claims.aud);
   s->info.args.append("provider_id", token_claims.iss);
+  s->info.args.append("client_id", token_claims.client_id);
 
   string idp_url = get_idp_url();
   string condition = idp_url + ":app_id";
+
   s->env.emplace(condition, token_claims.aud);
+
+  condition.clear();
+  condition = idp_url + ":sub";
+  s->env.emplace(condition, token_claims.sub);
 }
 
 bool rgw::auth::WebIdentityApplier::is_identity(const idset_t& ids) const
@@ -673,26 +672,35 @@ void rgw::auth::LocalApplier::load_acct_info(const DoutPrefixProvider* dpp, RGWU
 }
 
 void rgw::auth::RoleApplier::to_str(std::ostream& out) const {
-  out << "rgw::auth::LocalApplier(role name =" << role_name;
-  for (auto policy : role_policies) {
+  out << "rgw::auth::LocalApplier(role name =" << role.name;
+  for (auto& policy: role.role_policies) {
     out << ", role policy =" << policy;
   }
+  out << ", token policy =" << token_policy;
   out << ")";
 }
 
 bool rgw::auth::RoleApplier::is_identity(const idset_t& ids) const {
   for (auto& p : ids) {
-    string name;
-    string tenant = p.get_tenant();
-    if (tenant.empty()) {
-      name = p.get_id();
-    } else {
-      name = tenant + "$" + p.get_id();
-    }
     if (p.is_wildcard()) {
       return true;
-    } else if (p.is_role() && name == role_name) {
-      return true;
+    } else if (p.is_role()) {
+      string name = p.get_id();
+      string tenant = p.get_tenant();
+      if (name == role.name && tenant == role.tenant) {
+        return true;
+      }
+    } else if (p.is_assumed_role()) {
+      string tenant = p.get_tenant();
+      string role_session = role.name + "/" + role_session_name; //role/role-session
+      if (role.tenant == tenant && role_session == p.get_role_session()) {
+        return true;
+      }
+    } else {
+      string id = p.get_id();
+      if (user_id.id == id) {
+        return true;
+      }
     }
   }
   return false;
@@ -702,21 +710,38 @@ void rgw::auth::RoleApplier::load_acct_info(const DoutPrefixProvider* dpp, RGWUs
 {
   /* Load the user id */
   user_info.user_id = this->user_id;
+
+  user_info.user_id.tenant = role.tenant;
 }
 
 void rgw::auth::RoleApplier::modify_request_state(const DoutPrefixProvider *dpp, req_state* s) const
 {
-  for (auto it : role_policies) {
+  for (auto it: role.role_policies) {
     try {
       bufferlist bl = bufferlist::static_from_string(it);
-      const rgw::IAM::Policy p(s->cct, s->user->get_tenant(), bl);
+      const rgw::IAM::Policy p(s->cct, role.tenant, bl);
       s->iam_user_policies.push_back(std::move(p));
     } catch (rgw::IAM::PolicyParseException& e) {
       //Control shouldn't reach here as the policy has already been
       //verified earlier
-      ldpp_dout(dpp, 20) << "failed to parse policy: " << e.what() << dendl;
+      ldpp_dout(dpp, 20) << "failed to parse role policy: " << e.what() << dendl;
     }
   }
+
+  try {
+    string policy = this->token_policy;
+    bufferlist bl = bufferlist::static_from_string(policy);
+    const rgw::IAM::Policy p(s->cct, role.tenant, bl);
+    s->iam_user_policies.push_back(std::move(p));
+  } catch (rgw::IAM::PolicyParseException& e) {
+    //Control shouldn't reach here as the policy has already been
+    //verified earlier
+    ldpp_dout(dpp, 20) << "failed to parse token policy: " << e.what() << dendl;
+  }
+
+  string condition = "aws:userid";
+  string value = role.id + ":" + role_session_name;
+  s->env.emplace(condition, value);
 }
 
 rgw::auth::Engine::result_t
index 37971119be6c51abf19a6f4e3809537deb2b83d3..e9a243dbb716e00682bb6fa580d0a326a8a87b54 100644 (file)
@@ -58,7 +58,7 @@ public:
    * with the reason. */
   virtual uint32_t get_perm_mask() const = 0;
 
-  virtual bool is_anonymous() const final {
+  virtual bool is_anonymous() const {
     /* If the identity owns the anonymous account (rgw_user), it's considered
      * the anonymous identity. On error throws rgw::auth::Exception storing
      * the reason. */
@@ -365,6 +365,7 @@ class WebIdentityApplier : public IdentityApplier {
 protected:
   CephContext* const cct;
   RGWCtl* const ctl;
+  string role_session;
   rgw::web_idp::WebTokenClaims token_claims;
 
   string get_idp_url() const;
@@ -372,9 +373,11 @@ protected:
 public:
   WebIdentityApplier( CephContext* const cct,
                       RGWCtl* const ctl,
+                      const string& role_session,
                       const rgw::web_idp::WebTokenClaims& token_claims)
     : cct(cct),
       ctl(ctl),
+      role_session(role_session),
       token_claims(token_claims) {
   }
 
@@ -422,6 +425,7 @@ public:
 
     virtual aplptr_t create_apl_web_identity( CephContext* cct,
                                               const req_state* s,
+                                              const string& role_session,
                                               const rgw::web_idp::WebTokenClaims& token) const = 0;
   };
 };
@@ -498,7 +502,6 @@ public:
       is_admin(acct_privilege_t::IS_ADMIN_ACCT == level),
       acct_type(acct_type) {
     }
-    bool is_anon() const {return (acct_name.compare(RGW_USER_ANON_ID) == 0);}
   };
 
   using aclspec_t = rgw::auth::Identity::aclspec_t;
@@ -624,20 +627,29 @@ public:
 };
 
 class RoleApplier : public IdentityApplier {
+public:
+  struct Role {
+    string id;
+    string name;
+    string tenant;
+    vector<string> role_policies;
+  } role;
 protected:
-  const string role_name;
   const rgw_user user_id;
-  vector<std::string> role_policies;
+  string token_policy;
+  string role_session_name;
 
 public:
 
   RoleApplier(CephContext* const cct,
-               const string& role_name,
+               const Role& role,
                const rgw_user& user_id,
-               const vector<std::string>& role_policies)
-    : role_name(role_name),
+               const string& token_policy,
+               const string& role_session_name)
+    : role(role),
       user_id(user_id),
-      role_policies(role_policies) {}
+      token_policy(token_policy),
+      role_session_name(role_session_name) {}
 
   uint32_t get_perms_from_aclspec(const DoutPrefixProvider* dpp, const aclspec_t& aclspec) const override {
     return 0;
@@ -663,9 +675,10 @@ public:
     virtual ~Factory() {}
     virtual aplptr_t create_apl_role( CephContext* cct,
                                       const req_state* s,
-                                      const string& role_name,
+                                      const rgw::auth::RoleApplier::Role& role_name,
                                       const rgw_user& user_id,
-                                      const vector<std::string>& role_policies) const = 0;
+                                      const std::string& token_policy,
+                                      const std::string& role_session) const = 0;
     };
 };
 
index 8a5bf80644a729d9659e8bb444b5fd2b3eec873c..9dbcf677ac0ada63e85631b3ecb8601637c037a9 100644 (file)
@@ -76,6 +76,10 @@ public:
     return get_decoratee().is_owner_of(uid);
   }
 
+  bool is_anonymous() const override {
+    return get_decoratee().is_anonymous();
+  }
+
   uint32_t get_perm_mask() const override {
     return get_decoratee().get_perm_mask();
   }
@@ -159,6 +163,13 @@ void ThirdPartyAccountApplier<T>::load_acct_info(const DoutPrefixProvider* dpp,
     /* The override has been specified but the account belongs to the authenticated
      * identity. We may safely forward the call to a next stage. */
     DecoratedApplier<T>::load_acct_info(dpp, user_info);
+  } else if (this->is_anonymous()) {
+    /* If the user was authed by the anonymous engine then scope the ANON user
+     * to the correct tenant */
+    if (acct_user_override.tenant.empty())
+      user_info.user_id = rgw_user(acct_user_override.id, RGW_USER_ANON_ID);
+    else
+      user_info.user_id = rgw_user(acct_user_override.tenant, RGW_USER_ANON_ID);
   } else {
     /* Compatibility mechanism for multi-tenancy. For more details refer to
      * load_acct_info method of rgw::auth::RemoteApplier. */
index bdee372b10d0fb9726b98eb3a2df0a11488d5780..f6348e05b797d8026e1452d4560d66d00f93d2ad 100644 (file)
@@ -497,7 +497,7 @@ std::string get_v4_canonical_qs(const req_info& info, const bool using_qs)
   }
   if (params->find_first_of('+') != std::string::npos) {
     copy_params = *params;
-    boost::replace_all(copy_params, "+", " ");
+    boost::replace_all(copy_params, "+", "%20");
     params = &copy_params;
   }
 
index 9e79ee162136e15fdb48d2b88d92c5f2158e08e5..0809ee854eb8783c3a2f6fe970a69f06b3997a98 100644 (file)
@@ -65,11 +65,12 @@ class STSAuthStrategy : public rgw::auth::Strategy,
 
   aplptr_t create_apl_role(CephContext* const cct,
                             const req_state* const s,
-                            const string& role_name,
+                            const rgw::auth::RoleApplier::Role& role,
                             const rgw_user& user_id,
-                            const vector<std::string>& role_policies) const override {
+                            const std::string& token_policy,
+                            const std::string& role_session_name) const override {
     auto apl = rgw::auth::add_sysreq(cct, ctl, s,
-      rgw::auth::RoleApplier(cct, role_name, user_id, role_policies));
+      rgw::auth::RoleApplier(cct, role, user_id, token_policy, role_session_name));
     return aplptr_t(new decltype(apl)(std::move(apl)));
   }
 
index 0ba03bd0e27f860ac243f0013dcfb42b6a051cf3..f7f742a011ab672384a5c1dcc3e7353639aaef7a 100644 (file)
@@ -486,7 +486,7 @@ void decode_json_obj(rgw_zone_id& zid, JSONObj *obj);
 namespace rgw {
 namespace auth {
 class Principal {
-  enum types { User, Role, Tenant, Wildcard, OidcProvider };
+  enum types { User, Role, Tenant, Wildcard, OidcProvider, AssumedRole };
   types t;
   rgw_user u;
   string idp_url;
@@ -522,6 +522,10 @@ public:
     return Principal(std::move(idp_url));
   }
 
+  static Principal assumed_role(std::string&& t, std::string&& u) {
+    return Principal(AssumedRole, std::move(t), std::move(u));
+  }
+
   bool is_wildcard() const {
     return t == Wildcard;
   }
@@ -542,6 +546,10 @@ public:
     return t == OidcProvider;
   }
 
+  bool is_assumed_role() const {
+    return t == AssumedRole;
+  }
+
   const std::string& get_tenant() const {
     return u.tenant;
   }
@@ -554,6 +562,14 @@ public:
     return idp_url;
   }
 
+  const string& get_role_session() const {
+    return u.id;
+  }
+
+  const string& get_role() const {
+    return u.id;
+  }
+
   bool operator ==(const Principal& o) const {
     return (t == o.t) && (u == o.u);
   }
index 39079743d96b8bb0331a6d21bba3886d80a5053c..263df2fde19820f82dc1f8372632c6805c65d5f5 100644 (file)
@@ -1425,7 +1425,7 @@ static int bucket_stats(rgw::sal::RGWRadosStore *store,
                                                &bucket_ver, &master_ver, stats,
                                                &max_marker);
   if (ret < 0) {
-    cerr << "error getting bucket stats ret=" << ret << std::endl;
+    cerr << "error getting bucket stats bucket=" << bucket.name << " ret=" << ret << std::endl;
     return ret;
   }
 
index 90a608d1bf159d6e1018c941a14463245af30600..6908e7f9d252b119b03fe29b83cf4ca1def8365e 100644 (file)
@@ -176,6 +176,9 @@ void ObjectCache::put(const string& name, ObjectCacheInfo& info, rgw_cache_entry
     cache_info->gen = entry.gen;
   }
 
+  // put() must include the latest version if we're going to keep caching it
+  target.flags &= ~CACHE_FLAG_OBJV;
+
   target.flags |= info.flags;
 
   if (info.flags & CACHE_FLAG_META)
index 778566f8a35ca04ff2f6c1d5707ceb1758dce45f..f706901dccb0de8cc03e3b9d201a609f52bdd3b9 100644 (file)
@@ -154,8 +154,12 @@ rgw_http_errors rgw_http_sts_errors({
 });
 
 rgw_http_errors rgw_http_iam_errors({
+    { EINVAL, {400, "InvalidInput" }},
+    { ENOENT, {404, "NoSuchEntity"}},
     { ERR_ROLE_EXISTS, {409, "EntityAlreadyExists"}},
     { ERR_DELETE_CONFLICT, {409, "DeleteConflict"}},
+    { EEXIST, {409, "EntityAlreadyExists"}},
+    { ERR_INTERNAL_ERROR, {500, "ServiceFailure" }},
 });
 
 using namespace ceph::crypto;
@@ -1259,11 +1263,22 @@ bool verify_bucket_permission(const DoutPrefixProvider* dpp, struct req_state *
 int verify_bucket_owner_or_policy(struct req_state* const s,
                                  const uint64_t op)
 {
+  auto usr_policy_res = eval_user_policies(s->iam_user_policies, s->env, boost::none, op, ARN(s->bucket));
+  if (usr_policy_res == Effect::Deny) {
+    return -EACCES;
+  }
+
   auto e = eval_or_pass(s->iam_policy,
                        s->env, *s->auth.identity,
                        op, ARN(s->bucket));
+  if (e == Effect::Deny) {
+    return -EACCES;
+  }
+
   if (e == Effect::Allow ||
+      usr_policy_res == Effect::Allow ||
       (e == Effect::Pass &&
+       usr_policy_res == Effect::Pass &&
        s->auth.identity->is_owner_of(s->bucket_owner.get_id()))) {
     return 0;
   } else {
@@ -1590,6 +1605,27 @@ std::string url_encode(const std::string& src, bool encode_slash)
   return dst;
 }
 
+std::string url_remove_prefix(const std::string& url)
+{
+  std::string dst = url;
+  auto pos = dst.find("http://");
+  if (pos == std::string::npos) {
+    pos = dst.find("https://");
+    if (pos != std::string::npos) {
+      dst.erase(pos, 8);
+    } else {
+      pos = dst.find("www.");
+      if (pos != std::string::npos) {
+        dst.erase(pos, 4);
+      }
+    }
+  } else {
+    dst.erase(pos, 7);
+  }
+
+  return dst;
+}
+
 string rgw_trim_whitespace(const string& src)
 {
   if (src.empty()) {
@@ -1842,7 +1878,8 @@ bool RGWUserCaps::is_valid_cap_type(const string& tp)
                                     "datalog",
                                     "roles",
                                     "user-policy",
-                                    "amz-cache"};
+                                    "amz-cache",
+                                    "oidc-provider"};
 
   for (unsigned int i = 0; i < sizeof(cap_type) / sizeof(char *); ++i) {
     if (tp.compare(cap_type[i]) == 0) {
index 8d840731fe07eca6a77647cbfc700f6992b2813f..7ce379b0dda63bac12f75cfb54831d7a1c5eec7f 100644 (file)
@@ -543,6 +543,12 @@ enum RGWOpType {
   RGW_OP_PUT_BUCKET_PUBLIC_ACCESS_BLOCK,
   RGW_OP_GET_BUCKET_PUBLIC_ACCESS_BLOCK,
   RGW_OP_DELETE_BUCKET_PUBLIC_ACCESS_BLOCK,
+
+  /*OIDC provider specific*/
+  RGW_OP_CREATE_OIDC_PROVIDER,
+  RGW_OP_DELETE_OIDC_PROVIDER,
+  RGW_OP_GET_OIDC_PROVIDER,
+  RGW_OP_LIST_OIDC_PROVIDERS,
 };
 
 class RGWAccessControlPolicy;
@@ -1056,10 +1062,7 @@ struct RGWObjVersionTracker {
   void prepare_op_for_read(librados::ObjectReadOperation *op);
   void prepare_op_for_write(librados::ObjectWriteOperation *op);
 
-  void apply_write() {
-    read_version = write_version;
-    write_version = obj_version();
-  }
+  void apply_write();
 
   void clear() {
     read_version = obj_version();
@@ -2278,6 +2281,7 @@ extern std::string url_decode(const boost::string_view& src_str,
 extern void url_encode(const std::string& src, string& dst,
                        bool encode_slash = true);
 extern std::string url_encode(const std::string& src, bool encode_slash = true);
+extern std::string url_remove_prefix(const std::string& url); // Removes hhtp, https and www from url
 /* destination should be CEPH_CRYPTO_HMACSHA1_DIGESTSIZE bytes long */
 extern void calc_hmac_sha1(const char *key, int key_len,
                           const char *msg, int msg_len, char *dest);
index 38ae6467611ce2575ed739dd901c3f2c2b584fed..c204c1886f2c37393bdb374fb16eb92387285f71 100644 (file)
@@ -1214,10 +1214,19 @@ namespace rgw {
     return dar;
   } /* RGWFileHandle::decode_attrs */
 
-  bool RGWFileHandle::reclaim() {
+  bool RGWFileHandle::reclaim(const cohort::lru::ObjectFactory* newobj_fac) {
     lsubdout(fs->get_context(), rgw, 17)
       << __func__ << " " << *this
       << dendl;
+    auto factory = dynamic_cast<const RGWFileHandle::Factory*>(newobj_fac);
+    if (factory == nullptr) {
+      return false;
+    }
+    /* make sure the reclaiming object is the same partiton with newobject factory,
+     * then we can recycle the object, and replace with newobject */
+    if (!fs->fh_cache.is_same_partition(factory->fhk.fh_hk.object, fh.fh_hk.object)) {
+      return false;
+    }
     /* in the non-delete case, handle may still be in handle table */
     if (fh_hook.is_linked()) {
       /* in this case, we are being called from a context which holds
index 8132b24ac22a0da88d0dbb5dfdc07418de96ebee..8d9fff4609b772406a4296cfdd20c32480f7078b 100644 (file)
@@ -721,7 +721,7 @@ namespace rgw {
 
     void invalidate();
 
-    bool reclaim() override;
+    bool reclaim(const cohort::lru::ObjectFactory* newobj_fac) override;
 
     typedef cohort::lru::LRU<std::mutex> FhLRU;
 
index 98be34bf4c282148ace13a45ca92d05b8b76ce82..2267daa40cc55a1e9292b63876157f2f4c700338 100644 (file)
@@ -208,7 +208,7 @@ int RGWGC::list(int *index, string& marker, uint32_t max, bool expired_only, std
       }
       obj_version objv;
       cls_version_read(store->gc_pool_ctx, obj_names[*index], &objv);
-      if (ret == -ENOENT) {
+      if (ret == -ENOENT || entries.size() == 0) {
         if (objv.ver == 0) {
           continue;
         } else {
@@ -252,6 +252,11 @@ int RGWGC::list(int *index, string& marker, uint32_t max, bool expired_only, std
     marker = next_marker;
 
     if (*index == max_objs - 1) {
+      if (queue_entries.size() > 0 && *truncated) {
+        processing_queue = true;
+      } else {
+        processing_queue = false;
+      }
       /* we cut short here, truncated will hold the correct value */
       return 0;
     }
@@ -479,6 +484,10 @@ public:
            index << " ret=" << ret << dendl;
       return ret;
     }
+    if (perfcounter) {
+      /* log the count of tags retired for rate estimation */
+      perfcounter->inc(l_rgw_gc_retire, num_entries);
+    }
     return 0;
   }
 }; // class RGWGCIOManger
@@ -537,13 +546,13 @@ int RGWGC::process(int index, int max_secs, bool expired_only,
         if (non_expired_entries.size() == 0) {
           transitioned_objects_cache[index] = true;
           marker.clear();
-          ldpp_dout(this, 20) << "RGWGC::process cls_rgw_gc_list returned ENOENT for non expired entries, so setting cache entry to TRUE" << dendl;
+          ldpp_dout(this, 20) << "RGWGC::process cls_rgw_gc_list returned NO non expired entries, so setting cache entry to TRUE" << dendl;
         } else {
           ret = 0;
           goto done;
         }
       }
-      if ((objv.ver == 0) && (ret == -ENOENT)) {
+      if ((objv.ver == 0) && (ret == -ENOENT || entries.size() == 0)) {
         ret = 0;
         goto done;
       }
index 31936c40472f2d3b4f06f6182b7be8dc6b33c642..f43b20ee5f3cf0d92a09de6add655f7662269864 100644 (file)
@@ -145,6 +145,10 @@ static const actpair actpairs[] =
  { "iam:GetRolePolicy", iamGetRolePolicy},
  { "iam:ListRolePolicies", iamListRolePolicies},
  { "iam:DeleteRolePolicy", iamDeleteRolePolicy},
+ { "iam:CreateOIDCProvider", iamCreateOIDCProvider},
+ { "iam:DeleteOIDCProvider", iamDeleteOIDCProvider},
+ { "iam:GetOIDCProvider", iamGetOIDCProvider},
+ { "iam:ListOIDCProviders", iamListOIDCProviders},
  { "sts:AssumeRole", stsAssumeRole},
  { "sts:AssumeRoleWithWebIdentity", stsAssumeRoleWithWebIdentity},
  { "sts:GetSessionToken", stsGetSessionToken},
@@ -462,6 +466,9 @@ static boost::optional<Principal> parse_principal(CephContext* cct, TokenID t,
         if (match[1] == "oidc-provider") {
                 return Principal::oidc_provider(std::move(match[2]));
         }
+   if (match[1] == "assumed-role") {
+     return Principal::assumed_role(std::move(a->account), match[2]);
+   }
       }
     } else {
       if (std::none_of(s.begin(), s.end(),
@@ -1252,6 +1259,18 @@ const char* action_bit_string(uint64_t action) {
   case iamDeleteRolePolicy:
     return "iam:DeleteRolePolicy";
 
+  case iamCreateOIDCProvider:
+    return "iam:CreateOIDCProvider";
+
+  case iamDeleteOIDCProvider:
+    return "iam:DeleteOIDCProvider";
+
+  case iamGetOIDCProvider:
+    return "iam:GetOIDCProvider";
+
+  case iamListOIDCProviders:
+    return "iam:ListOIDCProviders";
+
   case stsAssumeRole:
     return "sts:AssumeRole";
 
index d66fd48dc9ee8a5f7a27457cf052de62efd84803..106af5b60cf807bed1f5caae7e99b4a96316057f 100644 (file)
@@ -122,7 +122,11 @@ static constexpr std::uint64_t iamPutRolePolicy = s3All + 10;
 static constexpr std::uint64_t iamGetRolePolicy = s3All + 11;
 static constexpr std::uint64_t iamListRolePolicies = s3All + 12;
 static constexpr std::uint64_t iamDeleteRolePolicy = s3All + 13;
-static constexpr std::uint64_t iamAll = s3All + 14;
+static constexpr std::uint64_t iamCreateOIDCProvider = s3All + 14;
+static constexpr std::uint64_t iamDeleteOIDCProvider = s3All + 15;
+static constexpr std::uint64_t iamGetOIDCProvider = s3All + 16;
+static constexpr std::uint64_t iamListOIDCProviders = s3All + 17;
+static constexpr std::uint64_t iamAll = s3All + 18;
 
 static constexpr std::uint64_t stsAssumeRole = iamAll + 1;
 static constexpr std::uint64_t stsAssumeRoleWithWebIdentity = iamAll + 2;
index dec0e32dfd99b6b2c278e2a0a8f993c121ea9f16..bce7817e45d4761703b1550e70f7f75d7e1b5054 100644 (file)
@@ -1992,6 +1992,17 @@ void lc_op::dump(Formatter *f) const
   if (obj_tags) {
     f->dump_object("obj_tags", *obj_tags);
   }
+  f->open_object_section("transitions");  
+  for(auto& [storage_class, transition] : transitions) {
+    f->dump_object(storage_class, transition);
+  }
+  f->close_section();
+
+  f->open_object_section("noncur_transitions");  
+  for (auto& [storage_class, transition] : noncur_transitions) {
+    f->dump_object(storage_class, transition);
+  }
+  f->close_section();
 }
 
 void LCFilter::dump(Formatter *f) const
@@ -2015,6 +2026,17 @@ void LCRule::dump(Formatter *f) const
   f->dump_object("noncur_expiration", noncur_expiration);
   f->dump_object("mp_expiration", mp_expiration);
   f->dump_object("filter", filter);
+  f->open_object_section("transitions");  
+  for (auto& [storage_class, transition] : transitions) {
+    f->dump_object(storage_class, transition);
+  }
+  f->close_section();
+
+  f->open_object_section("noncur_transitions");  
+  for (auto& [storage_class, transition] : noncur_transitions) {
+    f->dump_object(storage_class, transition);
+  }
+  f->close_section();
   f->dump_bool("dm_expiration", dm_expiration);
 }
 
@@ -2068,4 +2090,3 @@ void rgw_user::dump(Formatter *f) const
 {
   ::encode_json("user", *this, f);
 }
-
index f176e8e8141f3433bdec8f44372d73e6188e3f25..2d6357c83fbbaa8578312379cd7f719f5afc5fc2 100644 (file)
@@ -2201,21 +2201,19 @@ std::string s3_expiration_header(
       const RGWObjTags& rule_tagset = filter.get_tags();
       for (auto& tag : rule_tagset.get_tags()) {
        /* remember, S3 tags are {key,value} tuples */
-       auto ma1 = obj_tag_map.find(tag.first);
-       if ( ma1 != obj_tag_map.end()) {
-         if (tag.second == ma1->second) {
-           ldpp_dout(dpp, 10) << "tag match obj_key=" << obj_key
-                              << " rule_id=" << id
-                              << " tag=" << tag
-                              << " (ma=" << *ma1 << ")"
-                              << dendl;
-           tag_match = true;
-           break;
-         }
-       }
+        tag_match = true;
+        auto obj_tag = obj_tag_map.find(tag.first);
+        if (obj_tag == obj_tag_map.end() || obj_tag->second != tag.second) {
+               ldpp_dout(dpp, 10) << "tag does not match obj_key=" << obj_key
+                                << " rule_id=" << id
+                                << " tag=" << tag
+                                << dendl;
+               tag_match = false;
+               break;
+             }
       }
       if (! tag_match)
-       continue;
+             continue;
     }
 
     // compute a uniform expiration date
index 60f3863fc837e942b03a89398e16cb576714b29e..4238bbda83adff94eb7ca2efcb147c2abc0f4536 100644 (file)
@@ -152,7 +152,11 @@ public:
     decode(storage_class, bl);
     DECODE_FINISH(bl);
   }
-  void dump(Formatter *f) const;
+  void dump(Formatter *f) const {  
+    f->dump_string("days", days);
+    f->dump_string("date", date);
+    f->dump_string("storage_class", storage_class);
+  }
 };
 WRITE_CLASS_ENCODER(LCTransition)
 
@@ -369,6 +373,14 @@ struct transition_action
   boost::optional<ceph::real_time> date;
   string storage_class;
   transition_action() : days(0) {}
+  void dump(Formatter *f) const {
+    if (!date) {
+      f->dump_int("days", days);
+    } else {
+      utime_t ut(*date);
+      f->dump_stream("date") << ut;
+    }
+  }
 };
 
 /* XXX why not LCRule? */
index 91ccc15df95632c0ea10859bb7a30fa80d1c6d6e..0f2276f4896693706fbe368698e1c9b2e8fc24da 100644 (file)
@@ -14,6 +14,7 @@ namespace rgw {
   class RGWLibProcess : public RGWProcess {
     RGWAccessKey access_key;
     std::mutex mtx;
+    std::condition_variable cv;
     int gen;
     bool shutdown;
 
@@ -36,6 +37,7 @@ namespace rgw {
       for (const auto& fs: mounted_fs) {
        fs.second->stop();
       }
+      cv.notify_all();
     }
 
     void register_fs(RGWLibFS* fs) {
diff --git a/ceph/src/rgw/rgw_oidc_provider.cc b/ceph/src/rgw/rgw_oidc_provider.cc
new file mode 100644 (file)
index 0000000..14eea2f
--- /dev/null
@@ -0,0 +1,296 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab ft=cpp
+
+#include <errno.h>
+#include <ctime>
+#include <regex>
+
+#include "common/errno.h"
+#include "common/Formatter.h"
+#include "common/ceph_json.h"
+#include "common/ceph_time.h"
+#include "rgw_rados.h"
+#include "rgw_zone.h"
+
+#include "include/types.h"
+#include "rgw_string.h"
+
+#include "rgw_common.h"
+#include "rgw_tools.h"
+#include "rgw_oidc_provider.h"
+
+#include "services/svc_zone.h"
+#include "services/svc_sys_obj.h"
+
+#define dout_subsys ceph_subsys_rgw
+
+const string RGWOIDCProvider::oidc_url_oid_prefix = "oidc_url.";
+const string RGWOIDCProvider::oidc_arn_prefix = "arn:aws:iam::";
+
+int RGWOIDCProvider::store_url(const string& url, bool exclusive)
+{
+  using ceph::encode;
+  string oid = tenant + get_url_oid_prefix() + url;
+
+  auto svc = ctl->svc;
+
+  bufferlist bl;
+  encode(*this, bl);
+  auto obj_ctx = svc->sysobj->init_obj_ctx();
+  return rgw_put_system_obj(obj_ctx, svc->zone->get_zone_params().oidc_pool, oid,
+                            bl, exclusive, NULL, real_time(), NULL);
+}
+
+int RGWOIDCProvider::get_tenant_url_from_arn(string& tenant, string& url)
+{
+  auto provider_arn = rgw::ARN::parse(arn);
+  if (!provider_arn) {
+    return -EINVAL;
+  }
+  url = provider_arn->resource;
+  tenant = provider_arn->account;
+  auto pos = url.find("oidc-provider/");
+  if (pos != std::string::npos) {
+    url.erase(pos, 14);
+  }
+  return 0;
+}
+
+int RGWOIDCProvider::create(bool exclusive)
+{
+  int ret;
+
+  if (! validate_input()) {
+    return -EINVAL;
+  }
+
+  string idp_url = url_remove_prefix(provider_url);
+
+  /* check to see the name is not used */
+  ret = read_url(idp_url, tenant);
+  if (exclusive && ret == 0) {
+    ldout(cct, 0) << "ERROR: url " << provider_url << " already in use"
+                    << id << dendl;
+    return -EEXIST;
+  } else if ( ret < 0 && ret != -ENOENT) {
+    ldout(cct, 0) << "failed reading provider url  " << provider_url << ": "
+                  << cpp_strerror(-ret) << dendl;
+    return ret;
+  }
+
+  //arn
+  arn = oidc_arn_prefix + tenant + ":oidc-provider/" + idp_url;
+
+  // Creation time
+  real_clock::time_point t = real_clock::now();
+
+  struct timeval tv;
+  real_clock::to_timeval(t, tv);
+
+  char buf[30];
+  struct tm result;
+  gmtime_r(&tv.tv_sec, &result);
+  strftime(buf,30,"%Y-%m-%dT%H:%M:%S", &result);
+  sprintf(buf + strlen(buf),".%dZ",(int)tv.tv_usec/1000);
+  creation_date.assign(buf, strlen(buf));
+
+  auto svc = ctl->svc;
+
+  auto& pool = svc->zone->get_zone_params().oidc_pool;
+  ret = store_url(idp_url, exclusive);
+  if (ret < 0) {
+    ldout(cct, 0) << "ERROR:  storing role info in pool: " << pool.name << ": "
+                  << provider_url << ": " << cpp_strerror(-ret) << dendl;
+    return ret;
+  }
+
+  return 0;
+}
+
+int RGWOIDCProvider::delete_obj()
+{
+  auto svc = ctl->svc;
+  auto& pool = svc->zone->get_zone_params().oidc_pool;
+
+  string url, tenant;
+  auto ret = get_tenant_url_from_arn(tenant, url);
+  if (ret < 0) {
+    ldout(cct, 0) << "ERROR: failed to parse arn" << dendl;
+    return -EINVAL;
+  }
+
+  if (this->tenant != tenant) {
+    ldout(cct, 0) << "ERROR: tenant in arn doesn't match that of user " << this->tenant << ", "
+                  << tenant << ": " << dendl;
+    return -EINVAL;
+  }
+
+  // Delete url
+  string oid = tenant + get_url_oid_prefix() + url;
+  ret = rgw_delete_system_obj(svc->sysobj, pool, oid, NULL);
+  if (ret < 0) {
+    ldout(cct, 0) << "ERROR: deleting oidc url from pool: " << pool.name << ": "
+                  << provider_url << ": " << cpp_strerror(-ret) << dendl;
+  }
+
+  return ret;
+}
+
+int RGWOIDCProvider::get()
+{
+  string url, tenant;
+  auto ret = get_tenant_url_from_arn(tenant, url);
+  if (ret < 0) {
+    ldout(cct, 0) << "ERROR: failed to parse arn" << dendl;
+    return -EINVAL;
+  }
+
+  if (this->tenant != tenant) {
+    ldout(cct, 0) << "ERROR: tenant in arn doesn't match that of user " << this->tenant << ", "
+                  << tenant << ": " << dendl;
+    return -EINVAL;
+  }
+
+  ret = read_url(url, tenant);
+  if (ret < 0) {
+    return ret;
+  }
+
+  return 0;
+}
+
+void RGWOIDCProvider::dump(Formatter *f) const
+{
+  encode_json("OpenIDConnectProviderArn", arn, f);
+}
+
+void RGWOIDCProvider::dump_all(Formatter *f) const
+{
+  f->open_object_section("ClientIDList");
+  for (auto it : client_ids) {
+    encode_json("member", it, f);
+  }
+  f->close_section();
+  encode_json("CreateDate", creation_date, f);
+  f->open_object_section("ThumbprintList");
+  for (auto it : thumbprints) {
+    encode_json("member", it, f);
+  }
+  f->close_section();
+  encode_json("Url", provider_url, f);
+}
+
+void RGWOIDCProvider::decode_json(JSONObj *obj)
+{
+  JSONDecoder::decode_json("OpenIDConnectProviderArn", arn, obj);
+}
+
+int RGWOIDCProvider::read_url(const string& url, const string& tenant)
+{
+  auto svc = ctl->svc;
+  auto& pool = svc->zone->get_zone_params().oidc_pool;
+  string oid = tenant + get_url_oid_prefix() + url;
+  bufferlist bl;
+  auto obj_ctx = svc->sysobj->init_obj_ctx();
+
+  int ret = rgw_get_system_obj(obj_ctx, pool, oid, bl, NULL, NULL, null_yield);
+  if (ret < 0) {
+    return ret;
+  }
+
+  try {
+    using ceph::decode;
+    auto iter = bl.cbegin();
+    decode(*this, iter);
+  } catch (buffer::error& err) {
+    ldout(cct, 0) << "ERROR: failed to decode oidc provider info from pool: " << pool.name <<
+                  ": " << url << dendl;
+    return -EIO;
+  }
+
+  return 0;
+}
+
+bool RGWOIDCProvider::validate_input()
+{
+  if (provider_url.length() > MAX_OIDC_URL_LEN) {
+    ldout(cct, 0) << "ERROR: Invalid length of url " << dendl;
+    return false;
+  }
+  if (client_ids.size() > MAX_OIDC_NUM_CLIENT_IDS) {
+    ldout(cct, 0) << "ERROR: Invalid number of client ids " << dendl;
+    return false;
+  }
+
+  for (auto& it : client_ids) {
+    if (it.length() > MAX_OIDC_CLIENT_ID_LEN) {
+      return false;
+    }
+  }
+
+  if (thumbprints.size() > MAX_OIDC_NUM_THUMBPRINTS) {
+    ldout(cct, 0) << "ERROR: Invalid number of thumbprints " << thumbprints.size() << dendl;
+    return false;
+  }
+
+  for (auto& it : thumbprints) {
+    if (it.length() > MAX_OIDC_THUMBPRINT_LEN) {
+      return false;
+    }
+  }
+  
+  return true;
+}
+
+int RGWOIDCProvider::get_providers(RGWRados *store,
+                                    const string& tenant,
+                                    vector<RGWOIDCProvider>& providers)
+{
+  auto ctl = store->pctl;
+  auto svc = ctl->svc;
+  auto pool = store->svc.zone->get_zone_params().oidc_pool;
+  string prefix = tenant + oidc_url_oid_prefix;
+
+  //Get the filtered objects
+  list<string> result;
+  bool is_truncated;
+  RGWListRawObjsCtx ctx;
+  do {
+    list<string> oids;
+    int r = store->list_raw_objects(pool, prefix, 1000, ctx, oids, &is_truncated);
+    if (r < 0) {
+      ldout(ctl->cct, 0) << "ERROR: listing filtered objects failed: " << pool.name << ": "
+                  << prefix << ": " << cpp_strerror(-r) << dendl;
+      return r;
+    }
+    for (const auto& iter : oids) {
+      RGWOIDCProvider provider(ctl->cct, store->pctl);
+      bufferlist bl;
+      auto obj_ctx = svc->sysobj->init_obj_ctx();
+
+      int ret = rgw_get_system_obj(obj_ctx, pool, iter, bl, NULL, NULL, null_yield);
+      if (ret < 0) {
+        return ret;
+      }
+
+      try {
+        using ceph::decode;
+        auto iter = bl.cbegin();
+        decode(provider, iter);
+      } catch (buffer::error& err) {
+        ldout(ctl->cct, 0) << "ERROR: failed to decode oidc provider info from pool: " << pool.name <<
+                    ": " << iter << dendl;
+        return -EIO;
+      }
+
+      providers.push_back(std::move(provider));
+    }
+  } while (is_truncated);
+
+  return 0;
+}
+
+const string& RGWOIDCProvider::get_url_oid_prefix()
+{
+  return oidc_url_oid_prefix;
+}
diff --git a/ceph/src/rgw/rgw_oidc_provider.h b/ceph/src/rgw/rgw_oidc_provider.h
new file mode 100644 (file)
index 0000000..fc14d10
--- /dev/null
@@ -0,0 +1,124 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab ft=cpp
+
+#ifndef CEPH_RGW_OIDC_PROVIDER_H
+#define CEPH_RGW_OIDC_PROVIDER_H
+
+#include <string>
+
+#include "common/ceph_context.h"
+
+class RGWCtl;
+
+class RGWOIDCProvider
+{
+  using string = std::string;
+  static const string oidc_url_oid_prefix;
+  static const string oidc_arn_prefix;
+  static constexpr int MAX_OIDC_NUM_CLIENT_IDS = 100;
+  static constexpr int MAX_OIDC_CLIENT_ID_LEN = 255;
+  static constexpr int MAX_OIDC_NUM_THUMBPRINTS = 5;
+  static constexpr int MAX_OIDC_THUMBPRINT_LEN = 40;
+  static constexpr int MAX_OIDC_URL_LEN = 255;
+
+  CephContext *cct;
+  RGWCtl *ctl;
+  string id;
+  string provider_url;
+  string arn;
+  string creation_date;
+  string tenant;
+  vector<string> client_ids;
+  vector<string> thumbprints;
+
+  int get_tenant_url_from_arn(string& tenant, string& url);
+  int store_url(const string& url, bool exclusive);
+  int read_url(const string& url, const string& tenant);
+  bool validate_input();
+
+public:
+  RGWOIDCProvider(CephContext *cct,
+                    RGWCtl *ctl,
+                    string provider_url,
+                    string tenant,
+                    vector<string> client_ids,
+                    vector<string> thumbprints)
+  : cct(cct),
+    ctl(ctl),
+    provider_url(std::move(provider_url)),
+    tenant(std::move(tenant)),
+    client_ids(std::move(client_ids)),
+    thumbprints(std::move(thumbprints)) {
+  }
+
+  RGWOIDCProvider(CephContext *cct,
+                    RGWCtl *ctl,
+                    string arn,
+                    string tenant)
+  : cct(cct),
+    ctl(ctl),
+    arn(std::move(arn)),
+    tenant(std::move(tenant)) {
+  }
+
+  RGWOIDCProvider(CephContext *cct,
+                    RGWCtl *ctl,
+                    string tenant)
+  : cct(cct),
+    ctl(ctl),
+    tenant(std::move(tenant)) {}
+
+  RGWOIDCProvider(CephContext *cct,
+          RGWCtl *ctl)
+  : cct(cct),
+    ctl(ctl) {}
+
+  RGWOIDCProvider() {}
+
+  ~RGWOIDCProvider() = default;
+
+  void encode(bufferlist& bl) const {
+    ENCODE_START(3, 1, bl);
+    encode(id, bl);
+    encode(provider_url, bl);
+    encode(arn, bl);
+    encode(creation_date, bl);
+    encode(tenant, bl);
+    encode(client_ids, bl);
+    encode(thumbprints, bl);
+    ENCODE_FINISH(bl);
+  }
+
+  void decode(bufferlist::const_iterator& bl) {
+    DECODE_START(2, bl);
+    decode(id, bl);
+    decode(provider_url, bl);
+    decode(arn, bl);
+    decode(creation_date, bl);
+    decode(tenant, bl);
+    decode(client_ids, bl);
+    decode(thumbprints, bl);
+    DECODE_FINISH(bl);
+  }
+
+  const string& get_provider_url() const { return provider_url; }
+  const string& get_arn() const { return arn; }
+  const string& get_create_date() const { return creation_date; }
+  const vector<string>& get_client_ids() const { return client_ids;}
+  const vector<string>& get_thumbprints() const { return thumbprints; }
+
+  int create(bool exclusive);
+  int delete_obj();
+  int get();
+  void dump(Formatter *f) const;
+  void dump_all(Formatter *f) const;
+  void decode_json(JSONObj *obj);
+
+  static const string& get_url_oid_prefix();
+  static int get_providers(RGWRados *store,
+                            const string& tenant,
+                            vector<RGWOIDCProvider>& providers);
+};
+WRITE_CLASS_ENCODER(RGWOIDCProvider)
+#endif /* CEPH_RGW_OIDC_PROVIDER_H */
+
index e816d84a51d59b40d730bde5cb8aea47ee379acb..20f7b62e54b262b49ddfc67d02c2e177924f9d1f 100644 (file)
@@ -2127,16 +2127,8 @@ int RGWGetObj::handle_slo_manifest(bufferlist& bl)
 
 int RGWGetObj::get_data_cb(bufferlist& bl, off_t bl_ofs, off_t bl_len)
 {
-  /* garbage collection related handling */
-  utime_t start_time = ceph_clock_now();
-  if (start_time > gc_invalidate_time) {
-    int r = store->getRados()->defer_gc(s->obj_ctx, s->bucket_info, obj, s->yield);
-    if (r < 0) {
-      ldpp_dout(this, 0) << "WARNING: could not defer gc entry for obj" << dendl;
-    }
-    gc_invalidate_time = start_time;
-    gc_invalidate_time += (s->cct->_conf->rgw_gc_obj_min_wait / 2);
-  }
+  /* garbage collection related handling:
+   * defer_gc disabled for https://tracker.ceph.com/issues/47866 */
   return send_response_data(bl, bl_ofs, bl_len);
 }
 
index f6e9f9c304eca9457b1f61b391b737564cc7ac82..2d74d5af48383e6c04a2f3d1bf4c76f674c6685f 100644 (file)
@@ -184,6 +184,20 @@ void RGWObjVersionTracker::prepare_op_for_write(ObjectWriteOperation *op)
   }
 }
 
+void RGWObjVersionTracker::apply_write()
+{
+  const bool checked = (read_version.ver != 0);
+  const bool incremented = (write_version.ver == 0);
+
+  if (checked && incremented) {
+    // apply cls_version_inc() so our next operation can recheck it
+    ++read_version.ver;
+  } else {
+    read_version = write_version;
+  }
+  write_version = obj_version();
+}
+
 RGWObjState::RGWObjState() {
 }
 
@@ -1752,13 +1766,13 @@ int RGWRados::Bucket::List::list_objects_ordered(
   // or it will be empty; either way it's OK to copy
   rgw_obj_key marker_obj(params.marker.name,
                         params.marker.instance,
-                        params.marker.ns);
+                        params.ns.empty() ? params.marker.ns : params.ns);
   rgw_obj_index_key cur_marker;
   marker_obj.get_index_key(&cur_marker);
 
   rgw_obj_key end_marker_obj(params.end_marker.name,
                             params.end_marker.instance,
-                            params.end_marker.ns);
+                            params.ns.empty() ? params.end_marker.ns : params.ns);
   rgw_obj_index_key cur_end_marker;
   end_marker_obj.get_index_key(&cur_end_marker);
   const bool cur_end_marker_valid = !params.end_marker.empty();
@@ -2037,13 +2051,13 @@ int RGWRados::Bucket::List::list_objects_unordered(int64_t max_p,
   // or it will be empty; either way it's OK to copy
   rgw_obj_key marker_obj(params.marker.name,
                         params.marker.instance,
-                        params.marker.ns);
+                        params.ns.empty() ? params.marker.ns : params.ns);
   rgw_obj_index_key cur_marker;
   marker_obj.get_index_key(&cur_marker);
 
   rgw_obj_key end_marker_obj(params.end_marker.name,
                             params.end_marker.instance,
-                            params.end_marker.ns);
+                            params.ns.empty() ? params.end_marker.ns : params.ns);
   rgw_obj_index_key cur_end_marker;
   end_marker_obj.get_index_key(&cur_end_marker);
   const bool cur_end_marker_valid = !params.end_marker.empty();
@@ -8915,7 +8929,7 @@ int RGWRados::check_bucket_shards(const RGWBucketInfo& bucket_info,
     return 0;
   }
 
-  ldout(cct, 20) << "RGWRados::" << __func__ << " bucket " << bucket.name <<
+  ldout(cct, 1) << "RGWRados::" << __func__ << " bucket " << bucket.name <<
     " needs resharding; current num shards " << bucket_info.num_shards <<
     "; new num shards " << final_num_shards << " (suggested " <<
     suggested_num_shards << ")" << dendl;
index eab3f7a5321024c92f67348e79a4fea28aebb3b3..8d7478de61cd1a07c23b4b2cf4dfdcf67e911904 100644 (file)
@@ -279,7 +279,16 @@ int RGWRESTSimpleRequest::forward_request(RGWAccessKey& key, req_info& info, siz
   RGWEnv new_env;
   req_info new_info(cct, &new_env);
   new_info.rebuild_from(info);
-
+  string bucket_encode;
+  string request_uri_encode;
+  size_t pos = new_info.request_uri.substr(1, new_info.request_uri.size() - 1).find("/");
+  string bucket = new_info.request_uri.substr(1, pos);
+  url_encode(bucket, bucket_encode);
+  if (std::string::npos != pos)
+    request_uri_encode = string("/") + bucket_encode + new_info.request_uri.substr(pos + 1);
+  else
+    request_uri_encode = string("/") + bucket_encode;
+  new_info.request_uri = request_uri_encode;
   new_env.set("HTTP_DATE", date_str.c_str());
 
   int ret = sign_request(cct, key, new_env, new_info);
index 554f10e8b3394973bf1ee21b9cfa4976f255f6ea..4f56d6334a0d460f3792cb629aa9ea5e27a7331b 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "rgw_rest_role.h"
 #include "rgw_rest_user_policy.h"
+#include "rgw_rest_oidc_provider.h"
 
 #define dout_context g_ceph_context
 #define dout_subsys ceph_subsys_rgw
@@ -68,6 +69,14 @@ RGWOp *RGWHandler_REST_IAM::op_post()
       return new RGWListUserPolicies;
     if (action.compare("DeleteUserPolicy") == 0)
       return new RGWDeleteUserPolicy;
+    if (action.compare("CreateOpenIDConnectProvider") == 0)
+      return new RGWCreateOIDCProvider;
+    if (action.compare("ListOpenIDConnectProviders") == 0)
+      return new RGWListOIDCProviders;
+    if (action.compare("GetOpenIDConnectProvider") == 0)
+      return new RGWGetOIDCProvider;
+    if (action.compare("DeleteOpenIDConnectProvider") == 0)
+      return new RGWDeleteOIDCProvider;
   }
 
   return nullptr;
diff --git a/ceph/src/rgw/rgw_rest_oidc_provider.cc b/ceph/src/rgw/rgw_rest_oidc_provider.cc
new file mode 100644 (file)
index 0000000..a72e3c6
--- /dev/null
@@ -0,0 +1,223 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab ft=cpp
+
+#include <errno.h>
+
+#include "common/errno.h"
+#include "common/Formatter.h"
+#include "common/ceph_json.h"
+
+#include "include/types.h"
+#include "rgw_string.h"
+
+#include "rgw_common.h"
+#include "rgw_op.h"
+#include "rgw_rest.h"
+#include "rgw_role.h"
+#include "rgw_rest_oidc_provider.h"
+#include "rgw_oidc_provider.h"
+
+#define dout_subsys ceph_subsys_rgw
+
+int RGWRestOIDCProvider::verify_permission()
+{
+  if (s->auth.identity->is_anonymous()) {
+    return -EACCES;
+  }
+
+  provider_arn = s->info.args.get("OpenIDConnectProviderArn");
+  if (provider_arn.empty()) {
+    ldout(s->cct, 20) << "ERROR: Provider ARN is empty"<< dendl;
+    return -EINVAL;
+  }
+
+  auto ret = check_caps(s->user->get_caps());
+  if (ret == 0) {
+    return ret;
+  }
+
+  uint64_t op = get_op();
+  auto rgw_arn = rgw::ARN::parse(provider_arn, true);
+  if (rgw_arn) {
+    if (!verify_user_permission(this, s, *rgw_arn, op)) {
+      return -EACCES;
+    }
+  } else {
+      return -EACCES;
+  }
+
+  return 0;
+}
+
+void RGWRestOIDCProvider::send_response()
+{
+  if (op_ret) {
+    set_req_state_err(s, op_ret);
+  }
+  dump_errno(s);
+  end_header(s, this);
+}
+
+int RGWRestOIDCProviderRead::check_caps(const RGWUserCaps& caps)
+{
+    return caps.check_cap("oidc-provider", RGW_CAP_READ);
+}
+
+int RGWRestOIDCProviderWrite::check_caps(const RGWUserCaps& caps)
+{
+    return caps.check_cap("oidc-provider", RGW_CAP_WRITE);
+}
+
+int RGWCreateOIDCProvider::verify_permission()
+{
+  if (s->auth.identity->is_anonymous()) {
+    return -EACCES;
+  }
+
+  auto ret = check_caps(s->user->get_caps());
+  if (ret == 0) {
+    return ret;
+  }
+
+  string idp_url = url_remove_prefix(provider_url);
+  if (!verify_user_permission(this,
+                              s,
+                              rgw::ARN(idp_url,
+                                        "oidc-provider",
+                                         s->user->get_tenant(), true),
+                                         get_op())) {
+    return -EACCES;
+  }
+  return 0;
+}
+
+int RGWCreateOIDCProvider::get_params()
+{
+  provider_url = s->info.args.get("Url");
+
+  auto val_map = s->info.args.get_params();
+  for (auto& it : val_map) {
+      if (it.first.find("ClientIDList.member.") != string::npos) {
+          client_ids.emplace_back(it.second);
+      }
+      if (it.first.find("ThumbprintList.member.") != string::npos) {
+          thumbprints.emplace_back(it.second);
+      }
+  }
+
+  if (provider_url.empty() || thumbprints.empty()) {
+    ldout(s->cct, 20) << "ERROR: one of url or thumbprints is empty" << dendl;
+    return -EINVAL;
+  }
+
+  return 0;
+}
+
+void RGWCreateOIDCProvider::execute()
+{
+  op_ret = get_params();
+  if (op_ret < 0) {
+    return;
+  }
+
+  RGWOIDCProvider provider(s->cct, store->getRados()->pctl, provider_url,
+                            s->user->get_tenant(), client_ids, thumbprints);
+  op_ret = provider.create(true);
+
+  if (op_ret == 0) {
+    s->formatter->open_object_section("CreateOpenIDConnectProviderResponse");
+    s->formatter->open_object_section("CreateOpenIDConnectProviderResult");
+    provider.dump(s->formatter);
+    s->formatter->close_section();
+    s->formatter->open_object_section("ResponseMetadata");
+    s->formatter->dump_string("RequestId", s->trans_id);
+    s->formatter->close_section();
+    s->formatter->close_section();
+  }
+
+}
+
+void RGWDeleteOIDCProvider::execute()
+{
+  RGWOIDCProvider provider(s->cct, store->getRados()->pctl, provider_arn, s->user->get_tenant());
+  op_ret = provider.delete_obj();
+  
+  if (op_ret < 0 && op_ret != -ENOENT && op_ret != -EINVAL) {
+    op_ret = ERR_INTERNAL_ERROR;
+  }
+
+  if (op_ret == 0) {
+    s->formatter->open_object_section("DeleteOpenIDConnectProviderResponse");
+    s->formatter->open_object_section("ResponseMetadata");
+    s->formatter->dump_string("RequestId", s->trans_id);
+    s->formatter->close_section();
+    s->formatter->close_section();
+  }
+}
+
+void RGWGetOIDCProvider::execute()
+{
+  RGWOIDCProvider provider(s->cct, store->getRados()->pctl, provider_arn, s->user->get_tenant());
+  op_ret = provider.get();
+
+  if (op_ret < 0 && op_ret != -ENOENT && op_ret != -EINVAL) {
+    op_ret = ERR_INTERNAL_ERROR;
+  }
+
+  if (op_ret == 0) {
+    s->formatter->open_object_section("GetOpenIDConnectProviderResponse");
+    s->formatter->open_object_section("ResponseMetadata");
+    s->formatter->dump_string("RequestId", s->trans_id);
+    s->formatter->close_section();
+    s->formatter->open_object_section("GetOpenIDConnectProviderResult");
+    provider.dump_all(s->formatter);
+    s->formatter->close_section();
+    s->formatter->close_section();
+  }
+}
+
+int RGWListOIDCProviders::verify_permission()
+{
+  if (s->auth.identity->is_anonymous()) {
+    return -EACCES;
+  }
+
+  if (int ret = check_caps(s->user->get_caps()); ret == 0) {
+    return ret;
+  }
+
+  if (!verify_user_permission(this, 
+                              s,
+                              rgw::ARN(),
+                              get_op())) {
+    return -EACCES;
+  }
+
+  return 0;
+}
+
+void RGWListOIDCProviders::execute()
+{
+  vector<RGWOIDCProvider> result;
+  op_ret = RGWOIDCProvider::get_providers(store->getRados(), s->user->get_tenant(), result);
+
+  if (op_ret == 0) {
+    s->formatter->open_array_section("ListOpenIDConnectProvidersResponse");
+    s->formatter->open_object_section("ResponseMetadata");
+    s->formatter->dump_string("RequestId", s->trans_id);
+    s->formatter->close_section();
+    s->formatter->open_object_section("ListOpenIDConnectProvidersResult");
+    s->formatter->open_array_section("OpenIDConnectProviderList");
+    for (const auto& it : result) {
+      s->formatter->open_object_section("Arn");
+      auto& arn = it.get_arn();
+      ldout(s->cct, 0) << "ARN: " << arn << dendl;
+      s->formatter->dump_string("Arn", arn);
+      s->formatter->close_section();
+    }
+    s->formatter->close_section();
+    s->formatter->close_section();
+    s->formatter->close_section();
+  }
+}
+
diff --git a/ceph/src/rgw/rgw_rest_oidc_provider.h b/ceph/src/rgw/rgw_rest_oidc_provider.h
new file mode 100644 (file)
index 0000000..bcebf95
--- /dev/null
@@ -0,0 +1,70 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab ft=cpp
+
+#pragma once
+
+#include "rgw_oidc_provider.h"
+
+class RGWRestOIDCProvider : public RGWRESTOp {
+protected:
+  vector<string> client_ids;
+  vector<string> thumbprints;
+  string provider_url; //'iss' field in JWT
+  string provider_arn;
+public:
+  int verify_permission() override;
+  void send_response() override;
+  virtual uint64_t get_op() = 0;
+};
+
+class RGWRestOIDCProviderRead : public RGWRestOIDCProvider {
+public:
+  RGWRestOIDCProviderRead() = default;
+  int check_caps(const RGWUserCaps& caps) override;
+};
+
+class RGWRestOIDCProviderWrite : public RGWRestOIDCProvider {
+public:
+  RGWRestOIDCProviderWrite() = default;
+  int check_caps(const RGWUserCaps& caps) override;
+};
+
+class RGWCreateOIDCProvider : public RGWRestOIDCProviderWrite {
+public:
+  RGWCreateOIDCProvider() = default;
+  int verify_permission() override;
+  void execute() override;
+  int get_params();
+  const char* name() const override { return "create_oidc_provider"; }
+  RGWOpType get_type() override { return RGW_OP_CREATE_OIDC_PROVIDER; }
+  uint64_t get_op() { return rgw::IAM::iamCreateOIDCProvider; }
+};
+
+class RGWDeleteOIDCProvider : public RGWRestOIDCProviderWrite {
+public:
+  RGWDeleteOIDCProvider() = default;
+  void execute() override;
+  const char* name() const override { return "delete_oidc_provider"; }
+  RGWOpType get_type() override { return RGW_OP_DELETE_OIDC_PROVIDER; }
+  uint64_t get_op() { return rgw::IAM::iamDeleteOIDCProvider; }
+};
+
+class RGWGetOIDCProvider : public RGWRestOIDCProviderRead {
+public:
+  RGWGetOIDCProvider() = default;
+  void execute() override;
+  const char* name() const override { return "get_oidc_provider"; }
+  RGWOpType get_type() override { return RGW_OP_GET_OIDC_PROVIDER; }
+  uint64_t get_op() { return rgw::IAM::iamGetOIDCProvider; }
+};
+
+class RGWListOIDCProviders : public RGWRestOIDCProviderRead {
+public:
+  RGWListOIDCProviders() = default;
+  int verify_permission() override;
+  void execute() override;
+  int get_params();
+  const char* name() const override { return "list_oidc_providers"; }
+  RGWOpType get_type() override { return RGW_OP_LIST_OIDC_PROVIDERS; }
+  uint64_t get_op() { return rgw::IAM::iamListOIDCProviders; }
+};
index e5a4253fa5c762383920bccd1d3e4a88327a73a1..d3ac614fc7f0c954560da7378679ff5fe6b02140 100644 (file)
@@ -1855,7 +1855,7 @@ void RGWListBucket_ObjStore_S3v2::send_response()
   if (is_truncated && !next_marker.empty()) {
     s->formatter->dump_string("NextContinuationToken", next_marker.name);
   }
-  s->formatter->dump_int("KeyCount",objs.size());
+  s->formatter->dump_int("KeyCount", objs.size() + common_prefixes.size());
   if (start_after_exist) {
     s->formatter->dump_string("StartAfter", startAfter);
   }
@@ -4375,6 +4375,9 @@ RGWOp *RGWHandler_REST_Bucket_S3::get_obj_op(bool get_data) const
 
 RGWOp *RGWHandler_REST_Bucket_S3::op_get()
 {
+  if (s->info.args.sub_resource_exists("encryption"))
+    return nullptr;
+
   if (s->info.args.sub_resource_exists("logging"))
     return new RGWGetBucketLogging_ObjStore_S3;
 
@@ -4435,8 +4438,9 @@ RGWOp *RGWHandler_REST_Bucket_S3::op_head()
 
 RGWOp *RGWHandler_REST_Bucket_S3::op_put()
 {
-  if (s->info.args.sub_resource_exists("logging"))
-    return NULL;
+  if (s->info.args.sub_resource_exists("logging") ||
+      s->info.args.sub_resource_exists("encryption"))
+    return nullptr;
   if (s->info.args.sub_resource_exists("versioning"))
     return new RGWSetBucketVersioning_ObjStore_S3;
   if (s->info.args.sub_resource_exists("website")) {
@@ -4477,6 +4481,10 @@ RGWOp *RGWHandler_REST_Bucket_S3::op_put()
 
 RGWOp *RGWHandler_REST_Bucket_S3::op_delete()
 {
+  if (s->info.args.sub_resource_exists("logging") ||
+      s->info.args.sub_resource_exists("encryption"))
+    return nullptr;
+
   if (is_tagging_op()) {
     return new RGWDeleteBucketTags_ObjStore_S3;
   } else if (is_cors_op()) {
@@ -5260,7 +5268,11 @@ AWSGeneralAbstractor::get_auth_data_v4(const req_state* const s,
       s->op_type == RGW_OP_PUT_USER_POLICY ||
       s->op_type == RGW_OP_GET_USER_POLICY ||
       s->op_type == RGW_OP_LIST_USER_POLICIES ||
-      s->op_type == RGW_OP_DELETE_USER_POLICY) {
+      s->op_type == RGW_OP_DELETE_USER_POLICY ||
+      s->op_type == RGW_OP_CREATE_OIDC_PROVIDER ||
+      s->op_type == RGW_OP_DELETE_OIDC_PROVIDER ||
+      s->op_type == RGW_OP_GET_OIDC_PROVIDER ||
+      s->op_type == RGW_OP_LIST_OIDC_PROVIDERS) {
     is_non_s3_op = true;
   }
 
@@ -5894,26 +5906,26 @@ rgw::auth::s3::STSEngine::authenticate(
   // Get all the authorization info
   RGWUserInfo user_info;
   rgw_user user_id;
-  vector<string> role_policies;
-  string role_name;
+  string role_id;
+  rgw::auth::RoleApplier::Role r;
   if (! token.roleId.empty()) {
     RGWRole role(s->cct, ctl, token.roleId);
     if (role.get_by_id() < 0) {
       return result_t::deny(-EPERM);
     }
+    r.id = token.roleId;
+    r.name = role.get_name();
+    r.tenant = role.get_tenant();
+
     vector<string> role_policy_names = role.get_role_policy_names();
     for (auto& policy_name : role_policy_names) {
       string perm_policy;
       if (int ret = role.get_role_policy(policy_name, perm_policy); ret == 0) {
-        role_policies.push_back(std::move(perm_policy));
+        r.role_policies.push_back(std::move(perm_policy));
       }
     }
-    if (! token.policy.empty()) {
-      role_policies.push_back(std::move(token.policy));
-    }
     // This is mostly needed to assign the owner of a bucket during its creation
     user_id = token.user;
-    role_name = role.get_name();
   }
 
   if (! token.user.empty() && token.acct_type != TYPE_ROLE) {
@@ -5930,7 +5942,7 @@ rgw::auth::s3::STSEngine::authenticate(
                                             get_creds_info(token));
     return result_t::grant(std::move(apl), completer_factory(boost::none));
   } else if (token.acct_type == TYPE_ROLE) {
-    auto apl = role_apl_factory->create_apl_role(cct, s, role_name, user_id, role_policies);
+    auto apl = role_apl_factory->create_apl_role(cct, s, r, user_id, token.policy, token.role_session);
     return result_t::grant(std::move(apl), completer_factory(token.secret_access_key));
   } else { // This is for all local users of type TYPE_RGW or TYPE_NONE
     string subuser;
index 27715e57b0b53a8bd28b56b477b13317ca821bd9..729c61e2e515f19350342bcbb9e59f2a7abf5627 100644 (file)
@@ -1,5 +1,10 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab ft=cpp
+#include <vector>
+#include <string>
+#include <array>
+#include <sstream>
+#include <memory>
 
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/format.hpp>
@@ -7,8 +12,9 @@
 #include <boost/utility/in_place_factory.hpp>
 #include <boost/tokenizer.hpp>
 
-#include "ceph_ver.h"
 
+
+#include "ceph_ver.h"
 #include "common/Formatter.h"
 #include "common/utf8.h"
 #include "common/ceph_json.h"
@@ -16,6 +22,7 @@
 #include "rgw_rest.h"
 #include "rgw_auth.h"
 #include "rgw_auth_registry.h"
+#include "jwt-cpp/jwt.h"
 #include "rgw_rest_sts.h"
 
 #include "rgw_formats.h"
 #include "rgw_iam_policy_keywords.h"
 
 #include "rgw_sts.h"
-
-#include <array>
-#include <sstream>
-#include <memory>
-
+#include "rgw_rest_oidc_provider.h"
 #include <boost/utility/string_ref.hpp>
 
 #define dout_context g_ceph_context
@@ -45,51 +48,265 @@ WebTokenEngine::is_applicable(const std::string& token) const noexcept
   return ! token.empty();
 }
 
+boost::optional<RGWOIDCProvider>
+WebTokenEngine::get_provider(const string& role_arn, const string& iss) const
+{
+  string tenant;
+  auto r_arn = rgw::ARN::parse(role_arn);
+  if (r_arn) {
+    tenant = r_arn->account;
+  }
+  string idp_url = iss;
+  auto pos = idp_url.find("http://");
+  if (pos == std::string::npos) {
+    pos = idp_url.find("https://");
+    if (pos != std::string::npos) {
+      idp_url.erase(pos, 8);
+    } else {
+      pos = idp_url.find("www.");
+      if (pos != std::string::npos) {
+        idp_url.erase(pos, 4);
+      }
+    }
+  } else {
+    idp_url.erase(pos, 7);
+  }
+  auto provider_arn = rgw::ARN(idp_url, "oidc-provider", tenant);
+  string p_arn = provider_arn.to_string();
+  RGWOIDCProvider provider(cct, ctl, p_arn, tenant);
+  auto ret = provider.get();
+  if (ret < 0) {
+    return boost::none;
+  }
+  return provider;
+}
+
+bool
+WebTokenEngine::is_client_id_valid(vector<string>& client_ids, const string& client_id) const
+{
+  for (auto it : client_ids) {
+    if (it == client_id) {
+      return true;
+    }
+  }
+  return false;
+}
+
+bool
+WebTokenEngine::is_cert_valid(const vector<string>& thumbprints, const string& cert) const
+{
+  //calculate thumbprint of cert
+  std::unique_ptr<BIO, decltype(&BIO_free_all)> certbio(BIO_new_mem_buf(cert.data(), cert.size()), BIO_free_all);
+  std::unique_ptr<BIO, decltype(&BIO_free_all)> keybio(BIO_new(BIO_s_mem()), BIO_free_all);
+  string pw="";
+  std::unique_ptr<X509, decltype(&X509_free)> x_509cert(PEM_read_bio_X509(certbio.get(), nullptr, nullptr, const_cast<char*>(pw.c_str())), X509_free);
+  const EVP_MD* fprint_type = EVP_sha1();
+  unsigned int fprint_size;
+  unsigned char fprint[EVP_MAX_MD_SIZE];
+
+  if (!X509_digest(x_509cert.get(), fprint_type, fprint, &fprint_size)) {
+    return false;
+  }
+  stringstream ss;
+  for (unsigned int i = 0; i < fprint_size; i++) {
+    ss << std::setfill('0') << std::setw(2) << std::hex << (0xFF & (unsigned int)fprint[i]);
+  }
+  std::string digest = ss.str();
+
+  for (auto& it : thumbprints) {
+    if (boost::iequals(it,digest)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+//Offline validation of incoming Web Token which is a signed JWT (JSON Web Token)
 boost::optional<WebTokenEngine::token_t>
-WebTokenEngine::get_from_idp(const DoutPrefixProvider* dpp, const std::string& token) const
+WebTokenEngine::get_from_jwt(const DoutPrefixProvider* dpp, const std::string& token, const req_state* const s) const
 {
-  //Access token conforming to OAuth2.0
-  if (! cct->_conf->rgw_sts_token_introspection_url.empty()) {
-    bufferlist introspect_resp;
-    RGWHTTPTransceiver introspect_req(cct, "POST", cct->_conf->rgw_sts_token_introspection_url, &introspect_resp);
+  WebTokenEngine::token_t t;
+  try {
+    const auto& decoded = jwt::decode(token);
+  
+    auto& payload = decoded.get_payload();
+    ldpp_dout(dpp, 20) << " payload = " << payload << dendl;
+    if (decoded.has_issuer()) {
+      t.iss = decoded.get_issuer();
+    }
+    if (decoded.has_audience()) {
+      auto aud = decoded.get_audience();
+      t.aud = *(aud.begin());
+    }
+    if (decoded.has_subject()) {
+      t.sub = decoded.get_subject();
+    }
+    if (decoded.has_payload_claim("client_id")) {
+      t.client_id = decoded.get_payload_claim("client_id").as_string();
+    }
+    if (t.client_id.empty() && decoded.has_payload_claim("clientId")) {
+      t.client_id = decoded.get_payload_claim("clientId").as_string();
+    }
+    string role_arn = s->info.args.get("RoleArn");
+    auto provider = get_provider(role_arn, t.iss);
+    if (! provider) {
+      throw -EACCES;
+    }
+    vector<string> client_ids = provider->get_client_ids();
+    vector<string> thumbprints = provider->get_thumbprints();
+    if (! client_ids.empty()) {
+      if (! is_client_id_valid(client_ids, t.client_id) && ! is_client_id_valid(client_ids, t.aud)) {
+        throw -EACCES;
+      }
+    }
+    //Validate signature
+    if (decoded.has_algorithm()) {
+      auto& algorithm = decoded.get_algorithm();
+      try {
+        validate_signature(dpp, decoded, algorithm, t.iss, thumbprints);
+      } catch (...) {
+        throw -EACCES;
+      }
+    } else {
+      return boost::none;
+    }
+  } catch (int error) {
+    if (error == -EACCES) {
+      throw -EACCES;
+    }
+    ldpp_dout(dpp, 5) << "Invalid JWT token" << dendl;
+    return boost::none;
+  }
+  catch (...) {
+    ldpp_dout(dpp, 5) << "Invalid JWT token" << dendl;
+    return boost::none;
+  }
+  return t;
+}
+
+void
+WebTokenEngine::validate_signature(const DoutPrefixProvider* dpp, const jwt::decoded_jwt& decoded, const string& algorithm, const string& iss, const vector<string>& thumbprints) const
+{
+  if (algorithm != "HS256" && algorithm != "HS384" && algorithm != "HS512") {
+    // Get certificate
+    string cert_url = iss + "/protocol/openid-connect/certs";
+    bufferlist cert_resp;
+    RGWHTTPTransceiver cert_req(cct, "GET", cert_url, &cert_resp);
     //Headers
-    introspect_req.append_header("Content-Type", "application/x-www-form-urlencoded");
-    string base64_creds = "Basic " + rgw::to_base64(cct->_conf->rgw_sts_client_id + ":" + cct->_conf->rgw_sts_client_secret);
-    introspect_req.append_header("Authorization", base64_creds);
-    // POST data
-    string post_data = "token=" + token;
-    introspect_req.set_post_data(post_data);
-    introspect_req.set_send_length(post_data.length());
-
-    int res = introspect_req.process(null_yield);
+    cert_req.append_header("Content-Type", "application/x-www-form-urlencoded");
+
+    int res = cert_req.process(null_yield);
     if (res < 0) {
       ldpp_dout(dpp, 10) << "HTTP request res: " << res << dendl;
       throw -EINVAL;
     }
     //Debug only
-    ldpp_dout(dpp, 20) << "HTTP status: " << introspect_req.get_http_status() << dendl;
-    ldpp_dout(dpp, 20) << "JSON Response is: " << introspect_resp.c_str() << dendl;
+    ldpp_dout(dpp, 20) << "HTTP status: " << cert_req.get_http_status() << dendl;
+    ldpp_dout(dpp, 20) << "JSON Response is: " << cert_resp.c_str() << dendl;
 
     JSONParser parser;
-    WebTokenEngine::token_t token;
-    if (!parser.parse(introspect_resp.c_str(), introspect_resp.length())) {
-      ldpp_dout(dpp, 2) << "Malformed json" << dendl;
-      throw -EINVAL;
+    if (parser.parse(cert_resp.c_str(), cert_resp.length())) {
+      JSONObj::data_val val;
+      if (parser.get_data("keys", &val)) {
+        if (val.str[0] == '[') {
+          val.str.erase(0, 1);
+        }
+        if (val.str[val.str.size() - 1] == ']') {
+          val.str = val.str.erase(val.str.size() - 1, 1);
+        }
+        if (parser.parse(val.str.c_str(), val.str.size())) {
+          vector<string> x5c;
+          if (JSONDecoder::decode_json("x5c", x5c, &parser)) {
+            string cert;
+            bool found_valid_cert = false;
+            for (auto& it : x5c) {
+              cert = "-----BEGIN CERTIFICATE-----\n" + it + "\n-----END CERTIFICATE-----";
+              ldpp_dout(dpp, 20) << "Certificate is: " << cert.c_str() << dendl;
+              if (is_cert_valid(thumbprints, cert)) {
+               found_valid_cert = true;
+               break;
+              }
+              found_valid_cert = true;
+            }
+            if (! found_valid_cert) {
+              throw -EINVAL;
+            }
+            try {
+              //verify method takes care of expired tokens also
+              if (algorithm == "RS256") {
+                auto verifier = jwt::verify()
+                            .allow_algorithm(jwt::algorithm::rs256{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "RS384") {
+                auto verifier = jwt::verify()
+                            .allow_algorithm(jwt::algorithm::rs384{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "RS512") {
+                auto verifier = jwt::verify()
+                            .allow_algorithm(jwt::algorithm::rs512{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "ES256") {
+                auto verifier = jwt::verify()
+                            .allow_algorithm(jwt::algorithm::es256{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "ES384") {
+                auto verifier = jwt::verify()
+                            .allow_algorithm(jwt::algorithm::es384{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "ES512") {
+                auto verifier = jwt::verify()
+                              .allow_algorithm(jwt::algorithm::es512{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "PS256") {
+                auto verifier = jwt::verify()
+                              .allow_algorithm(jwt::algorithm::ps256{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "PS384") {
+                auto verifier = jwt::verify()
+                              .allow_algorithm(jwt::algorithm::ps384{cert});
+
+                verifier.verify(decoded);
+              } else if (algorithm == "PS512") {
+                auto verifier = jwt::verify()
+                              .allow_algorithm(jwt::algorithm::ps512{cert});
+
+                verifier.verify(decoded);
+              }
+            } catch (std::runtime_error& e) {
+              ldpp_dout(dpp, 0) << "Signature validation failed: " << e.what() << dendl;
+              throw;
+            }
+            catch (...) {
+              ldpp_dout(dpp, 0) << "Signature validation failed" << dendl;
+              throw;
+            }
+          } else {
+            ldpp_dout(dpp, 0) << "x5c not present" << dendl;
+            throw -EINVAL;
+          }
+        } else {
+          ldpp_dout(dpp, 0) << "Malformed JSON object for keys" << dendl;
+          throw -EINVAL;
+        }
+      } else {
+        ldpp_dout(dpp, 0) << "keys not present in JSON" << dendl;
+        throw -EINVAL;
+      } //if-else get-data
     } else {
-      bool is_active;
-      JSONDecoder::decode_json("active", is_active, &parser);
-      if (! is_active) {
-        ldpp_dout(dpp, 0) << "Active state is false"  << dendl;
-        throw -ERR_INVALID_IDENTITY_TOKEN;
-      }
-      JSONDecoder::decode_json("iss", token.iss, &parser);
-      JSONDecoder::decode_json("aud", token.aud, &parser);
-      JSONDecoder::decode_json("sub", token.sub, &parser);
-      JSONDecoder::decode_json("user_name", token.user_name, &parser);
-    }
-    return token;
+      ldpp_dout(dpp, 0) << "Malformed json returned while fetching cert" << dendl;
+      throw -EINVAL;
+    } //if-else parser cert_resp
+  } else {
+    ldpp_dout(dpp, 0) << "JWT signed by HMAC algos are currently not supported" << dendl;
+    throw -EINVAL;
   }
-  return boost::none;
 }
 
 WebTokenEngine::result_t
@@ -104,19 +321,24 @@ WebTokenEngine::authenticate( const DoutPrefixProvider* dpp,
   }
 
   try {
-    t = get_from_idp(dpp, token);
-  } catch(...) {
+    t = get_from_jwt(dpp, token, s);
+  }
+  catch (...) {
     return result_t::deny(-EACCES);
   }
 
   if (t) {
-    auto apl = apl_factory->create_apl_web_identity(cct, s, *t);
+    string role_session = s->info.args.get("RoleSessionName");
+    if (role_session.empty()) {
+      return result_t::deny(-EACCES);
+    }
+    auto apl = apl_factory->create_apl_web_identity(cct, s, role_session, *t);
     return result_t::grant(std::move(apl));
   }
   return result_t::deny(-EACCES);
 }
 
-} // namespace rgw::auth::s3
+} // namespace rgw::auth::sts
 
 int RGWREST_STS::verify_permission()
 {
index bac127348eb441f06ade73344e91d9c54a1e496f..d7227fe5af6c63c1d497d7e85ba9923983cc0590 100644 (file)
@@ -7,11 +7,14 @@
 #include "rgw_auth_filters.h"
 #include "rgw_sts.h"
 #include "rgw_web_idp.h"
+#include "jwt-cpp/jwt.h"
+#include "rgw_oidc_provider.h"
 
 namespace rgw::auth::sts {
 
 class WebTokenEngine : public rgw::auth::Engine {
   CephContext* const cct;
+  RGWCtl* const ctl;
 
   using result_t = rgw::auth::Engine::result_t;
   using token_t = rgw::web_idp::WebTokenClaims;
@@ -21,8 +24,16 @@ class WebTokenEngine : public rgw::auth::Engine {
 
   bool is_applicable(const std::string& token) const noexcept;
 
-  boost::optional<token_t>
-  get_from_idp(const DoutPrefixProvider* dpp, const std::string& token) const;
+  bool is_client_id_valid(vector<string>& client_ids, const string& client_id) const;
+
+  bool is_cert_valid(const vector<string>& thumbprints, const string& cert) const;
+
+  boost::optional<RGWOIDCProvider> get_provider(const string& role_arn, const string& iss) const;
+
+  boost::optional<WebTokenEngine::token_t>
+  get_from_jwt(const DoutPrefixProvider* dpp, const std::string& token, const req_state* const s) const;
+
+  void validate_signature (const DoutPrefixProvider* dpp, const jwt::decoded_jwt& decoded, const string& algorithm, const string& iss, const vector<string>& thumbprints) const;
 
   result_t authenticate(const DoutPrefixProvider* dpp,
                         const std::string& token,
@@ -30,9 +41,11 @@ class WebTokenEngine : public rgw::auth::Engine {
 
 public:
   WebTokenEngine(CephContext* const cct,
+                    RGWCtl* const ctl,
                     const rgw::auth::TokenExtractor* const extractor,
                     const rgw::auth::WebIdentityApplier::Factory* const apl_factory)
     : cct(cct),
+      ctl(ctl),
       extractor(extractor),
       apl_factory(apl_factory) {
   }
@@ -64,9 +77,10 @@ class DefaultStrategy : public rgw::auth::Strategy,
 
   aplptr_t create_apl_web_identity( CephContext* cct,
                                     const req_state* s,
+                                    const string& role_session,
                                     const rgw::web_idp::WebTokenClaims& token) const override {
     auto apl = rgw::auth::add_sysreq(cct, ctl, s,
-      rgw::auth::WebIdentityApplier(cct, ctl, token));
+      rgw::auth::WebIdentityApplier(cct, ctl, role_session, token));
     return aplptr_t(new decltype(apl)(std::move(apl)));
   }
 
@@ -76,7 +90,7 @@ public:
                   RGWCtl* const ctl)
     : ctl(ctl),
       implicit_tenant_context(implicit_tenant_context),
-      web_token_engine(cct,
+      web_token_engine(cct, ctl,
                         static_cast<rgw::auth::TokenExtractor*>(this),
                         static_cast<rgw::auth::WebIdentityApplier::Factory*>(this)) {
     /* When the constructor's body is being executed, all member engines
index 8df22f6844fb6ed6bdf340b2462589961bb3bb55..fceb4fb635474712932eab8372ac9fee79630f1c 100644 (file)
@@ -40,7 +40,6 @@ class RGWRole
   int read_id(const string& role_name, const string& tenant, string& role_id);
   int read_name();
   int read_info();
-  void set_id(const string& id) { this->id = id; }
   bool validate_input();
   void extract_name_tenant(const std::string& str);
 
@@ -129,11 +128,14 @@ public:
 
   const string& get_id() const { return id; }
   const string& get_name() const { return name; }
+  const string& get_tenant() const { return tenant; }
   const string& get_path() const { return path; }
   const string& get_create_date() const { return creation_date; }
   const string& get_assume_role_policy() const { return trust_policy;}
   const uint64_t& get_max_session_duration() const { return max_session_duration; }
 
+  void set_id(const string& id) { this->id = id; }
+
   int create(bool exclusive);
   int delete_obj();
   int get();
index 22cb33fa216b71202dfe4bb7a0ef3b38c0ade83e..2b7a313ed912076232b23ba00d603517f79ca558 100644 (file)
@@ -177,7 +177,7 @@ int RGWRadosBucket::read_bucket_stats(optional_yield y)
 
 int RGWRadosBucket::sync_user_stats()
 {
-      return store->ctl()->bucket->sync_user_stats(user.info.user_id, info, &ent);
+      return store->ctl()->bucket->sync_user_stats(user.info.user_id, info);
 }
 
 int RGWRadosBucket::update_container_stats(void)
index de4e33fb4aa788956d5af909e97656a23b709b1a..ca813c244b614d422f88386b2c8f2cd80393d92d 100644 (file)
@@ -44,6 +44,7 @@ int Credentials::generateCredentials(CephContext* cct,
                           const uint64_t& duration,
                           const boost::optional<string>& policy,
                           const boost::optional<string>& roleId,
+                          const boost::optional<string>& role_session,
                           boost::optional<rgw_user> user,
                           rgw::auth::Identity* identity)
 {
@@ -117,6 +118,7 @@ int Credentials::generateCredentials(CephContext* cct,
     token.perm_mask = 0;
     token.is_admin = 0;
     token.acct_type = TYPE_ROLE;
+    token.role_session = role_session.get();
   }
 
   buffer::list input, enc_output;
@@ -335,6 +337,7 @@ AssumeRoleWithWebIdentityResponse STSService::assumeRoleWithWebIdentity(AssumeRo
   //Role and Policy provide the authorization info, user id and applier info are not needed
   response.assumeRoleResp.retCode = response.assumeRoleResp.creds.generateCredentials(cct, req.getDuration(),
                                                                                       req.getPolicy(), roleId,
+                                                                                      req.getRoleSessionName(),
                                                                                       user_id, nullptr);
   if (response.assumeRoleResp.retCode < 0) {
     return response;
@@ -380,6 +383,7 @@ AssumeRoleResponse STSService::assumeRole(AssumeRoleRequest& req)
   //Role and Policy provide the authorization info, user id and applier info are not needed
   response.retCode = response.creds.generateCredentials(cct, req.getDuration(),
                                               req.getPolicy(), roleId,
+                                              req.getRoleSessionName(),
                                               user_id, nullptr);
   if (response.retCode < 0) {
     return response;
@@ -417,6 +421,7 @@ GetSessionTokenResponse STSService::getSessionToken(GetSessionTokenRequest& req)
                                       req.getDuration(),
                                       boost::none,
                                       boost::none,
+                                      boost::none,
                                       user_id,
                                       identity); ret < 0) {
     return make_tuple(ret, cred);
index 86b621a30852e3ca81b29490fb62906c55ddf1c8..fa8cc70295da39fd1dbbd3393c29b7190237db4e 100644 (file)
@@ -128,11 +128,12 @@ struct SessionToken {
   uint32_t perm_mask;
   bool is_admin;
   uint32_t acct_type;
+  string role_session;
 
   SessionToken() {}
 
   void encode(bufferlist& bl) const {
-    ENCODE_START(1, 1, bl);
+    ENCODE_START(2, 1, bl);
     encode(access_key_id, bl);
     encode(secret_access_key, bl);
     encode(expiration, bl);
@@ -143,11 +144,12 @@ struct SessionToken {
     encode(perm_mask, bl);
     encode(is_admin, bl);
     encode(acct_type, bl);
+    encode(role_session, bl);
     ENCODE_FINISH(bl);
   }
 
   void decode(bufferlist::const_iterator& bl) {
-    DECODE_START(1, bl);
+    DECODE_START(2, bl);
     decode(access_key_id, bl);
     decode(secret_access_key, bl);
     decode(expiration, bl);
@@ -158,6 +160,9 @@ struct SessionToken {
     decode(perm_mask, bl);
     decode(is_admin, bl);
     decode(acct_type, bl);
+    if (struct_v >= 2) {
+      decode(role_session, bl);
+    }
     DECODE_FINISH(bl);
   }
 };
@@ -175,6 +180,7 @@ public:
                           const uint64_t& duration,
                           const boost::optional<string>& policy,
                           const boost::optional<string>& roleId,
+                          const boost::optional<string>& role_session,
                           boost::optional<rgw_user> user,
                           rgw::auth::Identity* identity);
   const string& getAccessKeyId() const { return accessKeyId; }
index 8cefbf1a4880da8e4707e68cb4d1964b4e7b66bd..fe1553bf322fa61e9105acab691827f4adb92fa3 100644 (file)
@@ -152,7 +152,7 @@ class SwiftAnonymousApplier : public rgw::auth::LocalApplier {
       : LocalApplier(cct, user_info, LocalApplier::NO_SUBUSER, boost::none) {
       };
     bool is_admin_of(const rgw_user& uid) const {return false;}
-    bool is_owner_of(const rgw_user& uid) const {return false;}
+    bool is_owner_of(const rgw_user& uid) const {return uid.id.compare(RGW_USER_ANON_ID) == 0;}
 };
 
 class SwiftAnonymousEngine : public rgw::auth::AnonymousEngine {
@@ -207,11 +207,8 @@ class DefaultStrategy : public rgw::auth::Strategy,
                              const req_state* const s,
                              acl_strategy_t&& extra_acl_strategy,
                              const rgw::auth::RemoteApplier::AuthInfo &info) const override {
-    rgw_user user(s->account_name);
-    if (info.is_anon())
-      user = rgw_user(RGW_USER_ANON_ID);
     auto apl = \
-      rgw::auth::add_3rdparty(ctl, user,
+      rgw::auth::add_3rdparty(ctl, rgw_user(s->account_name),
         rgw::auth::add_sysreq(cct, ctl, s,
           rgw::auth::RemoteApplier(cct, ctl, std::move(extra_acl_strategy), info,
                                    implicit_tenant_context,
@@ -225,11 +222,8 @@ class DefaultStrategy : public rgw::auth::Strategy,
                             const RGWUserInfo& user_info,
                             const std::string& subuser,
                             const boost::optional<uint32_t>& perm_mask) const override {
-    rgw_user user(s->account_name);
-    if (user_info.user_id.compare(RGW_USER_ANON_ID) == 0)
-      user = rgw_user(user_info.user_id);
     auto apl = \
-      rgw::auth::add_3rdparty(ctl, user,
+      rgw::auth::add_3rdparty(ctl, rgw_user(s->account_name),
         rgw::auth::add_sysreq(cct, ctl, s,
           rgw::auth::LocalApplier(cct, user_info, subuser, perm_mask)));
     /* TODO(rzarzynski): replace with static_ptr. */
@@ -263,7 +257,7 @@ public:
                       static_cast<rgw::auth::TokenExtractor*>(this),
                       static_cast<rgw::auth::LocalApplier::Factory*>(this)),
       anon_engine(cct,
-                  static_cast<rgw::auth::LocalApplier::Factory*>(this),
+                  static_cast<SwiftAnonymousApplier::Factory*>(this),
                   static_cast<rgw::auth::TokenExtractor*>(this)) {
     /* When the constructor's body is being executed, all member engines
      * should be initialized. Thus, we can safely add them. */
index 30bcebd804c10fc2d9b2c6c24dd50f0f222b2230..f4af38b08a0af2ae7827bf8121d9a0f502ae2e6d 100644 (file)
@@ -16,7 +16,9 @@ struct WebTokenClaims {
   //Issuer of this token
   std::string iss;
   //Human-readable id for the resource owner
-  string user_name;
+  std::string user_name;
+  //Client Id
+  std::string client_id;
 };
 
 }; /* namespace web_idp */
index 23a2b68327a0732561ba97f0b85d77b7429846b7..34c00014ad31ee92a8069bc5127660ab8a3a73e0 100644 (file)
@@ -1557,6 +1557,7 @@ int get_zones_pool_set(CephContext* cct,
         }
        pool_names.insert(iter.second.data_extra_pool);
       }
+      pool_names.insert(zone.oidc_pool);
     }
   }
   return 0;
@@ -1621,6 +1622,7 @@ int RGWZoneParams::fix_pool_names()
   roles_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:roles", roles_pool);
   reshard_pool = fix_zone_pool_dup(pools, name, ".rgw.log:reshard", reshard_pool);
   otp_pool = fix_zone_pool_dup(pools, name, ".rgw.otp", otp_pool);
+  oidc_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:oidc", oidc_pool);
 
   for(auto& iter : placement_pools) {
     iter.second.index_pool = fix_zone_pool_dup(pools, name, "." + default_bucket_index_pool_suffix,
index 090c3e3c3061828b613fd56167b711d65a528ec2..2960ead43e4354062641a660e8906872be9bb570 100644 (file)
@@ -372,6 +372,7 @@ struct RGWZoneParams : RGWSystemMetaObj {
   rgw_pool roles_pool;
   rgw_pool reshard_pool;
   rgw_pool otp_pool;
+  rgw_pool oidc_pool;
 
   RGWAccessKey system_key;
 
@@ -405,7 +406,7 @@ struct RGWZoneParams : RGWSystemMetaObj {
   const string& get_compression_type(const rgw_placement_rule& placement_rule) const;
   
   void encode(bufferlist& bl) const override {
-    ENCODE_START(12, 1, bl);
+    ENCODE_START(13, 1, bl);
     encode(domain_root, bl);
     encode(control_pool, bl);
     encode(gc_pool, bl);
@@ -429,11 +430,12 @@ struct RGWZoneParams : RGWSystemMetaObj {
     encode(reshard_pool, bl);
     encode(otp_pool, bl);
     encode(tier_config, bl);
+    encode(oidc_pool, bl);
     ENCODE_FINISH(bl);
   }
 
   void decode(bufferlist::const_iterator& bl) override {
-    DECODE_START(12, bl);
+    DECODE_START(13, bl);
     decode(domain_root, bl);
     decode(control_pool, bl);
     decode(gc_pool, bl);
@@ -492,6 +494,11 @@ struct RGWZoneParams : RGWSystemMetaObj {
         tier_config.set(kv.first, kv.second);
       }
     }
+    if (struct_v >= 13) {
+      ::decode(oidc_pool, bl);
+    } else {
+      oidc_pool = name + ".rgw.meta:oidc";
+    }
     DECODE_FINISH(bl);
   }
   void dump(Formatter *f) const;
index 04a958cd051a8adeefdbd1a327b85668b9d1f032..6943542b2a8738a53fbd27f05f0d42c1df80787c 100644 (file)
@@ -253,13 +253,13 @@ int RGWSI_SysObj_Cache::set_attrs(const rgw_raw_obj& obj,
   }
   info.status = 0;
   info.flags = CACHE_FLAG_MODIFY_XATTRS;
-  if (objv_tracker) {
-    info.version = objv_tracker->write_version;
-    info.flags |= CACHE_FLAG_OBJV;
-  }
   int ret = RGWSI_SysObj_Core::set_attrs(obj, attrs, rmattrs, objv_tracker, y);
   string name = normal_name(pool, oid);
   if (ret >= 0) {
+    if (objv_tracker && objv_tracker->read_version.ver) {
+      info.version = objv_tracker->read_version;
+      info.flags |= CACHE_FLAG_OBJV;
+    }
     cache.put(name, info, NULL);
     int r = distribute_cache(name, obj, info, UPDATE_OBJ, y);
     if (r < 0)
@@ -288,10 +288,6 @@ int RGWSI_SysObj_Cache::write(const rgw_raw_obj& obj,
   info.status = 0;
   info.data = data;
   info.flags = CACHE_FLAG_XATTRS | CACHE_FLAG_DATA | CACHE_FLAG_META;
-  if (objv_tracker) {
-    info.version = objv_tracker->write_version;
-    info.flags |= CACHE_FLAG_OBJV;
-  }
   ceph::real_time result_mtime;
   int ret = RGWSI_SysObj_Core::write(obj, &result_mtime, attrs,
                                      exclusive, data,
@@ -299,6 +295,10 @@ int RGWSI_SysObj_Cache::write(const rgw_raw_obj& obj,
   if (pmtime) {
     *pmtime = result_mtime;
   }
+  if (objv_tracker && objv_tracker->read_version.ver) {
+    info.version = objv_tracker->read_version;
+    info.flags |= CACHE_FLAG_OBJV;
+  }
   info.meta.mtime = result_mtime;
   info.meta.size = data.length();
   string name = normal_name(pool, oid);
@@ -339,13 +339,13 @@ int RGWSI_SysObj_Cache::write_data(const rgw_raw_obj& obj,
   info.status = 0;
   info.flags = CACHE_FLAG_DATA;
 
-  if (objv_tracker) {
-    info.version = objv_tracker->write_version;
-    info.flags |= CACHE_FLAG_OBJV;
-  }
   int ret = RGWSI_SysObj_Core::write_data(obj, data, exclusive, objv_tracker, y);
   string name = normal_name(pool, oid);
   if (ret >= 0) {
+    if (objv_tracker && objv_tracker->read_version.ver) {
+      info.version = objv_tracker->read_version;
+      info.flags |= CACHE_FLAG_OBJV;
+    }
     cache.put(name, info, NULL);
     int r = distribute_cache(name, obj, info, UPDATE_OBJ, y);
     if (r < 0)
index 82208219e7873aa5e14033d02134196ea9f432c0..0b7164e91ef8cdff0c300ed36d6fa02a37f65410 100644 (file)
@@ -107,11 +107,6 @@ if(WITH_RADOSGW)
   target_link_libraries(test_build_librgw rgw_a pthread ${CRYPTO_LIBS} ${EXTRALIBS})
 endif(WITH_RADOSGW)
 
-if(WITH_RADOSGW)
-  add_executable(test_build_librgw_admin_user buildtest_skeleton.cc)
-  target_link_libraries(test_build_librgw_admin_user pthread ${CRYPTO_LIBS} ${EXTRALIBS})
-endif(WITH_RADOSGW)
-
 if(WITH_LIBCEPHFS)
   # From src/test/Makefile-client.am: I dont get this one... testing the osdc build but link in libcephfs?
   add_executable(test_build_libcephfs buildtest_skeleton.cc)
@@ -281,6 +276,7 @@ target_link_libraries(ceph_test_librgw_file_gp
 add_executable(ceph_test_librgw_file_nfsns
   librgw_file_nfsns.cc
   )
+target_include_directories(ceph_test_librgw_file_nfsns SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/src/rgw")
 if(WITH_RADOSGW_FCGI_FRONTEND)
 target_include_directories(ceph_test_librgw_file_nfsns SYSTEM PRIVATE ${FCGI_INCLUDE_DIR})
 endif(WITH_RADOSGW_FCGI_FRONTEND)
@@ -312,6 +308,7 @@ target_link_libraries(ceph_test_librgw_file_aw
 add_executable(ceph_test_librgw_file_marker
   librgw_file_marker.cc
   )
+target_include_directories(ceph_test_librgw_file_marker SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/src/rgw")
 target_link_libraries(ceph_test_librgw_file_marker
   rgw
   librados
@@ -345,18 +342,6 @@ target_link_libraries(test_rgw_ldap
   ${OPENLDAP_LIBRARIES}
   ${UNITTEST_LIBS}
   )
-
-# unittest_librgw_admin_user
-add_executable(ceph_test_librgw_admin_user test_librgw_admin_user.cc)
-target_link_libraries(ceph_test_librgw_admin_user
-  rgw_admin_user
-  cls_otp_client
-  librados
-  ceph-common
-  ${UNITTEST_LIBS}
-  ${EXTRALIBS}
-   )
-
 endif(${WITH_RADOSGW})
 
 # ceph_multi_stress_watch
index 136d3b05e89a7638cc2068282072261115bb44f4..344b7ba62e9e31ad19de29f5233868f415b7d737 100644 (file)
@@ -16,6 +16,7 @@
      --mark-out <osdid>      mark an osd as out (but do not persist)
      --with-default-pool     include default pool when creating map
      --clear-temp            clear pg_temp and primary_temp
+     --clean-temps           clean pg_temps
      --test-random           do random placements
      --test-map-pg <pgid>    map a pgid to osds
      --test-map-object <objectname> [--pool <poolid>] map an object to osds
index 721f6c36750fa9bf25658bfb8bd4fb6afdcb4e49..49f12adc9184aabe46b3ca06642d157f7ad95a1b 100644 (file)
@@ -79,7 +79,7 @@ target_link_libraries(unittest_erasure_code_plugin_jerasure
 add_dependencies(unittest_erasure_code_plugin_jerasure
   ec_jerasure)
 
-if(HAVE_BETTER_YASM_ELF64)
+if(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)
 
 #unittest_erasure_code_isa
 add_executable(unittest_erasure_code_isa
@@ -110,7 +110,7 @@ target_link_libraries(unittest_erasure_code_plugin_isa
   )
 add_dependencies(unittest_erasure_code_plugin_isa
   ec_isa)
-endif(HAVE_BETTER_YASM_ELF64)
+endif(HAVE_BETTER_YASM_ELF64 OR HAVE_ARMV8_SIMD)
 
 # unittest_erasure_code_lrc
 add_executable(unittest_erasure_code_lrc
index 71fd062650b54deb3f3688715d364c4304c99360..3773e87ea9a2fcc10f4f7d86eeffc8c02a070f02 100644 (file)
@@ -24,14 +24,8 @@ class MockCacheClient {
   MOCK_METHOD0(stop, void());
   MOCK_METHOD0(connect, int());
   MOCK_METHOD1(connect, void(Context*));
-  void lookup_object(std::string pool_nspace, uint64_t pool_id, uint64_t snap_id,
-              std::string oid, CacheGenContextURef&& on_finish) {
-    // gmock don't support move
-    internal_lookup(pool_nspace, pool_id, snap_id, oid);
-  };
-  MOCK_METHOD4(internal_lookup, void(std::string pool_nspace,
-                uint64_t pool_id, uint64_t snap_id, 
-                std::string oid));
+  MOCK_METHOD5(lookup_object, void(std::string, uint64_t, uint64_t, std::string,
+                                   CacheGenContextURef));
   MOCK_METHOD1(register_client, int(Context*));
 };
 
index 5e044322ee012ba590088cf3a110575fe242a73b..736928fe0e7dca794df70a4de7425564d0e15202 100644 (file)
@@ -68,7 +68,8 @@ public:
 
   void lookup_object_cache_store(std::string pool_name, std::string vol_name, std::string obj_name, int& ret) {
     std::string cache_path;
-    ret = m_object_cache_store->lookup_object(pool_name, 1, 2, obj_name, cache_path);
+    ret = m_object_cache_store->lookup_object(pool_name, 1, 2, obj_name, true,
+                                              cache_path);
   }
 
   void TearDown() override {
index f093324e7941fed453f68688a8802ab147a4276d..4ede0ecaa954a6b6fe73ba7de859dba60e288de8 100644 (file)
@@ -9,6 +9,7 @@ if(${WITH_CEPHFS})
     acl.cc
     main.cc
     deleg.cc
+    monconfig.cc
   )
   target_link_libraries(ceph_test_libcephfs
     ceph-common
diff --git a/ceph/src/test/libcephfs/monconfig.cc b/ceph/src/test/libcephfs/monconfig.cc
new file mode 100644 (file)
index 0000000..c962c4f
--- /dev/null
@@ -0,0 +1,99 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2020 Red Hat
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#include "gtest/gtest.h"
+#include "include/cephfs/libcephfs.h"
+#include "common/ceph_context.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+class MonConfig : public ::testing::Test
+{
+  protected:
+    struct ceph_mount_info *ca;
+
+    void SetUp() override {
+      ASSERT_EQ(0, ceph_create(&ca, NULL));
+      ASSERT_EQ(0, ceph_conf_read_file(ca, NULL));
+      ASSERT_EQ(0, ceph_conf_parse_env(ca, NULL));
+    }
+
+    void TearDown() override {
+      ceph_shutdown(ca);
+    }
+
+    // Helper to remove/unset all possible mon information from ConfigProxy
+    void clear_mon_config(CephContext *cct) {
+      auto& conf = cct->_conf;
+      // Clear safe_to_start_threads, allowing updates to config values
+      conf._clear_safe_to_start_threads();
+      ASSERT_EQ(0, conf.set_val("monmap", "", nullptr));
+      ASSERT_EQ(0, conf.set_val("mon_host", "", nullptr));
+      ASSERT_EQ(0, conf.set_val("mon_dns_srv_name", "", nullptr));
+      conf.set_safe_to_start_threads();
+    }
+
+    // Helper to test basic operation on a mount
+    void use_mount(struct ceph_mount_info *mnt, string name_prefix) {
+      char name[20];
+      snprintf(name, sizeof(name), "%s.%d", name_prefix.c_str(), getpid());
+      int fd = ceph_open(mnt, name, O_CREAT|O_RDWR, 0644);
+      ASSERT_LE(0, fd);
+
+      ceph_close(mnt, fd);
+    }
+};
+
+TEST_F(MonConfig, MonAddrsMissing) {
+  CephContext *cct;
+
+  // Test mount failure when there is no known mon config source
+  cct = ceph_get_mount_context(ca);
+  ASSERT_NE(nullptr, cct);
+  clear_mon_config(cct);
+
+  ASSERT_EQ(-ENOENT, ceph_mount(ca, NULL));
+}
+
+TEST_F(MonConfig, MonAddrsInConfigProxy) {
+  // Test a successful mount with default mon config source in ConfigProxy
+  ASSERT_EQ(0, ceph_mount(ca, NULL));
+
+  use_mount(ca, "foo");
+}
+
+TEST_F(MonConfig, MonAddrsInCct) {
+  struct ceph_mount_info *cb;
+  CephContext *cct;
+
+  // Perform mount to bootstrap mon addrs in CephContext
+  ASSERT_EQ(0, ceph_mount(ca, NULL));
+
+  // Reuse bootstrapped CephContext, clearing ConfigProxy mon addr sources
+  cct = ceph_get_mount_context(ca);
+  ASSERT_NE(nullptr, cct);
+  clear_mon_config(cct);
+  ASSERT_EQ(0, ceph_create_with_context(&cb, cct));
+
+  // Test a successful mount with only mon values in CephContext
+  ASSERT_EQ(0, ceph_mount(cb, NULL));
+
+  use_mount(ca, "bar");
+  use_mount(cb, "bar");
+
+  ceph_shutdown(cb);
+}
index a7a6ffc7e1556d7ad81caa05960ecb1322364d10..dc4e627eeeee4f53e8a735fb78e545dea1e0f1ef 100644 (file)
@@ -2017,7 +2017,13 @@ TEST(LibCephFS, ShutdownRace)
 
   for (int i = 0; i < nthreads; ++i)
     threads[i].join();
-  ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rold), 0);
+  /*
+   * Let's just ignore restoring the open files limit,
+   * the kernel will defer releasing the file descriptors
+   * and then the process will be possibly reachthe open
+   * files limit. More detail, please see tracer#43039
+   */
+//  ASSERT_EQ(setrlimit(RLIMIT_NOFILE, &rold), 0);
 }
 
 static void get_current_time_utimbuf(struct utimbuf *utb)
index d3d8e772cbcfe96e213b81b6cc0bae44c366758b..a6cb3918bf45dfa3a571596b313189c6ca0ffe2c 100644 (file)
@@ -381,7 +381,7 @@ TEST_F(CReadOpsTest, Checksum) {
 
   {
     rados_read_op_t op = rados_create_read_op();
-    uint64_t init_value = -1;
+    ceph_le64 init_value = init_le64(-1);
     rados_read_op_checksum(op, LIBRADOS_CHECKSUM_TYPE_XXHASH64,
                           reinterpret_cast<char *>(&init_value),
                           sizeof(init_value), 0, len, 0, NULL, 0, NULL);
@@ -390,8 +390,8 @@ TEST_F(CReadOpsTest, Checksum) {
   }
 
   {
-    uint32_t init_value = -1;
-    uint32_t crc[2];
+    ceph_le32 init_value = init_le32(-1);
+    ceph_le32 crc[2];
     rados_read_op_t op = rados_create_read_op();
     rados_read_op_checksum(op, LIBRADOS_CHECKSUM_TYPE_CRC32C,
                           reinterpret_cast<char *>(&init_value),
@@ -407,7 +407,7 @@ TEST_F(CReadOpsTest, Checksum) {
   }
 
   {
-    uint32_t init_value = -1;
+    ceph_le32 init_value = init_le32(-1);
     int rval;
     rados_read_op_t op = rados_create_read_op();
     rados_read_op_checksum(op, LIBRADOS_CHECKSUM_TYPE_XXHASH32,
@@ -419,8 +419,8 @@ TEST_F(CReadOpsTest, Checksum) {
   }
 
   {
-    uint32_t init_value = -1;
-    uint32_t crc[3];
+    ceph_le32 init_value = init_le32(-1);
+    ceph_le32 crc[3];
     int rval;
     rados_read_op_t op = rados_create_read_op();
     rados_read_op_checksum(op, LIBRADOS_CHECKSUM_TYPE_CRC32C,
index fce3de621226339db93ccd686f6439e46be759c8..9e801dcd4f4cf16e7a05865e4be6e947f9ab3620 100644 (file)
@@ -46,7 +46,8 @@ TEST_F(LibRadosIo, ReadTimeout) {
     ASSERT_EQ(0, rados_create(&cluster, "admin"));
     ASSERT_EQ(0, rados_conf_read_file(cluster, NULL));
     ASSERT_EQ(0, rados_conf_parse_env(cluster, NULL));
-    ASSERT_EQ(0, rados_conf_set(cluster, "rados_osd_op_timeout", "0.00001")); // use any small value that will result in a timeout
+    ASSERT_EQ(0, rados_conf_set(cluster, "rados_osd_op_timeout", "1")); // use any small value that will result in a timeout
+    ASSERT_EQ(0, rados_conf_set(cluster, "ms_inject_internal_delays", "2")); // create a 2 second delay
     ASSERT_EQ(0, rados_connect(cluster));
     ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx));
     rados_ioctx_set_namespace(ioctx, nspace.c_str());
@@ -111,8 +112,8 @@ TEST_F(LibRadosIo, Checksum) {
 
   uint32_t expected_crc = ceph_crc32c(-1, reinterpret_cast<const uint8_t*>(buf),
                                       sizeof(buf));
-  uint32_t init_value = -1;
-  uint32_t crc[2];
+  ceph_le32 init_value = init_le32(-1);
+  ceph_le32 crc[2];
   ASSERT_EQ(0, rados_checksum(ioctx, "foo", LIBRADOS_CHECKSUM_TYPE_CRC32C,
                              reinterpret_cast<char*>(&init_value),
                              sizeof(init_value), sizeof(buf), 0, 0,
index c74bde90b9b813f125a6d477ca760c5b67756cdd..e7ad1ec59ef0b9f6480f30c853c4c2f6589052ee 100644 (file)
@@ -707,11 +707,11 @@ public:
 
 typedef ::testing::Types<
     LibRadosChecksumParams<LIBRADOS_CHECKSUM_TYPE_XXHASH32,
-                          Checksummer::xxhash32, uint32_t>,
+                          Checksummer::xxhash32, ceph_le32>,
     LibRadosChecksumParams<LIBRADOS_CHECKSUM_TYPE_XXHASH64,
-                          Checksummer::xxhash64, uint64_t>,
+                          Checksummer::xxhash64, ceph_le64>,
     LibRadosChecksumParams<LIBRADOS_CHECKSUM_TYPE_CRC32C,
-                          Checksummer::crc32c, uint32_t>
+                          Checksummer::crc32c, ceph_le32>
   > LibRadosChecksumTypes;
 
 TYPED_TEST_SUITE(LibRadosChecksum, LibRadosChecksumTypes);
index 0f5bb2c62e6cff846dd9d12055c06a42df51aba0..b5581eb219cddb944a9685ec993df8acad92d1e3 100644 (file)
@@ -52,7 +52,7 @@ set(unittest_librbd_srcs
   test_mock_TrashWatcher.cc
   test_mock_Watcher.cc
   cache/test_mock_WriteAroundObjectDispatch.cc
-  cache/test_mock_ParentImageCache.cc
+  cache/test_mock_ParentCacheObjectDispatch.cc
   deep_copy/test_mock_ImageCopyRequest.cc
   deep_copy/test_mock_MetadataCopyRequest.cc
   deep_copy/test_mock_ObjectCopyRequest.cc
diff --git a/ceph/src/test/librbd/cache/test_mock_ParentCacheObjectDispatch.cc b/ceph/src/test/librbd/cache/test_mock_ParentCacheObjectDispatch.cc
new file mode 100644 (file)
index 0000000..12f2b12
--- /dev/null
@@ -0,0 +1,435 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "test/librbd/test_mock_fixture.h"
+#include "test/librbd/test_support.h"
+#include "test/librbd/mock/MockImageCtx.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "include/Context.h"
+#include "tools/immutable_object_cache/CacheClient.h"
+#include "test/immutable_object_cache/MockCacheDaemon.h"
+#include "librbd/io/Utils.h"
+#include "librbd/cache/ParentCacheObjectDispatch.h"
+#include "test/librbd/test_mock_fixture.h"
+#include "test/librbd/mock/MockImageCtx.h"
+
+using namespace ceph::immutable_obj_cache;
+
+namespace librbd {
+
+namespace {
+
+struct MockParentImageCacheImageCtx : public MockImageCtx {
+  MockParentImageCacheImageCtx(ImageCtx& image_ctx)
+   : MockImageCtx(image_ctx) {
+  }
+  ~MockParentImageCacheImageCtx() {}
+};
+
+}; // anonymous namespace
+
+namespace cache {
+
+template<>
+struct TypeTraits<MockParentImageCacheImageCtx> {
+  typedef ceph::immutable_obj_cache::MockCacheClient CacheClient;
+};
+
+}; // namespace cache
+
+namespace io {
+namespace util {
+
+namespace {
+
+struct Mock {
+  static Mock* s_instance;
+
+  Mock() {
+    s_instance = this;
+  }
+
+  MOCK_METHOD8(read_parent,
+               void(librbd::MockParentImageCacheImageCtx *, uint64_t, uint64_t,
+                    uint64_t, librados::snap_t, const ZTracer::Trace &,
+                    ceph::bufferlist*, Context*));
+};
+
+Mock *Mock::s_instance = nullptr;
+
+} // anonymous namespace
+
+template<> void read_parent(
+    librbd::MockParentImageCacheImageCtx *image_ctx, uint64_t object_no,
+    uint64_t off, uint64_t len, librados::snap_t snap_id,
+    const ZTracer::Trace &trace, ceph::bufferlist* data, Context* on_finish) {
+  Mock::s_instance->read_parent(image_ctx, object_no, off, len, snap_id, trace,
+                                data, on_finish);
+}
+
+} // namespace util
+} // namespace io
+
+}; // namespace librbd
+
+#include "librbd/cache/ParentCacheObjectDispatch.cc"
+template class librbd::cache::ParentCacheObjectDispatch<librbd::MockParentImageCacheImageCtx>;
+
+namespace librbd {
+
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::Invoke;
+using ::testing::InSequence;
+using ::testing::Return;
+using ::testing::WithArg;
+using ::testing::WithArgs;
+
+class TestMockParentCacheObjectDispatch : public TestMockFixture {
+public :
+  typedef cache::ParentCacheObjectDispatch<librbd::MockParentImageCacheImageCtx> MockParentImageCache;
+  typedef io::util::Mock MockUtils;
+
+  // ====== mock cache client ====
+  void expect_cache_run(MockParentImageCache& mparent_image_cache, bool ret_val) {
+    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), run());
+
+    expect.WillOnce((Invoke([ret_val]() {
+    })));
+  }
+
+   void expect_cache_session_state(MockParentImageCache& mparent_image_cache, bool ret_val) {
+     auto & expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), is_session_work());
+
+     expect.WillOnce((Invoke([ret_val]() {
+        return ret_val;
+     })));
+   }
+
+   void expect_cache_connect(MockParentImageCache& mparent_image_cache, int ret_val) {
+     auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), connect());
+
+     expect.WillOnce((Invoke([ret_val]() {
+        return ret_val;
+      })));
+   }
+
+   void expect_cache_async_connect(MockParentImageCache& mparent_image_cache, int ret_val,
+                                   Context* on_finish) {
+     auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), connect(_));
+
+     expect.WillOnce(WithArg<0>(Invoke([on_finish, ret_val](Context* ctx) {
+       ctx->complete(ret_val);
+       on_finish->complete(ret_val);
+     })));
+   }
+
+  void expect_cache_lookup_object(MockParentImageCache& mparent_image_cache,
+                                  const std::string &cache_path) {
+    EXPECT_CALL(*(mparent_image_cache.get_cache_client()),
+                lookup_object(_, _, _, _, _))
+      .WillOnce(WithArg<4>(Invoke([cache_path](CacheGenContextURef on_finish) {
+        auto ack = new ObjectCacheReadReplyData(RBDSC_READ_REPLY, 0, cache_path);
+        on_finish.release()->complete(ack);
+      })));
+  }
+
+  void expect_read_parent(MockUtils &mock_utils, uint64_t object_no,
+                          uint64_t off, uint64_t len, librados::snap_t snap_id,
+                          int r) {
+    EXPECT_CALL(mock_utils,
+                read_parent(_, object_no, off, len, snap_id, _, _, _))
+      .WillOnce(WithArg<7>(CompleteContext(r, static_cast<ContextWQ*>(nullptr))));
+  }
+
+  void expect_cache_close(MockParentImageCache& mparent_image_cache, int ret_val) {
+    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), close());
+
+    expect.WillOnce((Invoke([ret_val]() {
+    })));
+  }
+
+  void expect_cache_stop(MockParentImageCache& mparent_image_cache, int ret_val) {
+    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), stop());
+
+    expect.WillOnce((Invoke([ret_val]() {
+    })));
+  }
+
+  void expect_cache_register(MockParentImageCache& mparent_image_cache, Context* mock_handle_register, int ret_val) {
+    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), register_client(_));
+
+    expect.WillOnce(WithArg<0>(Invoke([mock_handle_register, ret_val](Context* ctx) {
+      if(ret_val == 0) {
+        mock_handle_register->complete(true);
+      } else {
+        mock_handle_register->complete(false);
+      }
+      ctx->complete(true);
+      return ret_val;
+    })));
+  }
+
+  void expect_io_object_dispatcher_register_state(MockParentImageCache& mparent_image_cache,
+                                                  int ret_val) {
+    auto& expect = EXPECT_CALL((*(mparent_image_cache.get_image_ctx()->io_object_dispatcher)),
+                               register_object_dispatch(_));
+
+        expect.WillOnce(WithArg<0>(Invoke([ret_val, &mparent_image_cache]
+                (io::ObjectDispatchInterface* object_dispatch) {
+          ASSERT_EQ(object_dispatch, &mparent_image_cache);
+        })));
+  }
+};
+
+TEST_F(TestMockParentCacheObjectDispatch, test_initialization_success) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  expect_cache_run(*mock_parent_image_cache, 0);
+  C_SaferCond cond;
+  Context* handle_connect = new LambdaContext([&cond](int ret) {
+    ASSERT_EQ(ret, 0);
+    cond.complete(0);
+  });
+  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
+  Context* ctx = new LambdaContext([](bool reg) {
+    ASSERT_EQ(reg, true);
+  });
+  expect_cache_register(*mock_parent_image_cache, ctx, 0);
+  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
+  expect_cache_close(*mock_parent_image_cache, 0);
+  expect_cache_stop(*mock_parent_image_cache, 0);
+
+  mock_parent_image_cache->init();
+  cond.wait();
+
+  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
+            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
+  expect_cache_session_state(*mock_parent_image_cache, true);
+  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
+
+  mock_parent_image_cache->get_cache_client()->close();
+  mock_parent_image_cache->get_cache_client()->stop();
+
+  delete mock_parent_image_cache;
+}
+
+TEST_F(TestMockParentCacheObjectDispatch, test_initialization_fail_at_connect) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  expect_cache_run(*mock_parent_image_cache, 0);
+  C_SaferCond cond;
+  Context* handle_connect = new LambdaContext([&cond](int ret) {
+    ASSERT_EQ(ret, -1);
+    cond.complete(0);
+  });
+  expect_cache_async_connect(*mock_parent_image_cache, -1, handle_connect);
+  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
+  expect_cache_session_state(*mock_parent_image_cache, false);
+  expect_cache_close(*mock_parent_image_cache, 0);
+  expect_cache_stop(*mock_parent_image_cache, 0);
+
+  mock_parent_image_cache->init();
+
+  // initialization fails.
+  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
+            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
+  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), false);
+
+  mock_parent_image_cache->get_cache_client()->close();
+  mock_parent_image_cache->get_cache_client()->stop();
+
+  delete mock_parent_image_cache;
+
+}
+
+TEST_F(TestMockParentCacheObjectDispatch, test_initialization_fail_at_register) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  expect_cache_run(*mock_parent_image_cache, 0);
+  C_SaferCond cond;
+  Context* handle_connect = new LambdaContext([&cond](int ret) {
+    ASSERT_EQ(ret, 0);
+    cond.complete(0);
+  });
+  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
+  Context* ctx = new LambdaContext([](bool reg) {
+    ASSERT_EQ(reg, false);
+  });
+  expect_cache_register(*mock_parent_image_cache, ctx, -1);
+  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
+  expect_cache_close(*mock_parent_image_cache, 0);
+  expect_cache_stop(*mock_parent_image_cache, 0);
+
+  mock_parent_image_cache->init();
+  cond.wait();
+
+  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
+            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
+  expect_cache_session_state(*mock_parent_image_cache, true);
+  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
+
+  mock_parent_image_cache->get_cache_client()->close();
+  mock_parent_image_cache->get_cache_client()->stop();
+
+  delete mock_parent_image_cache;
+}
+
+TEST_F(TestMockParentCacheObjectDispatch, test_disble_interface) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  std::string temp_oid("12345");
+  ceph::bufferlist temp_bl;
+  ::SnapContext *temp_snapc = nullptr;
+  io::DispatchResult* temp_dispatch_result = nullptr;
+  io::Extents temp_buffer_extents;
+  int* temp_op_flags = nullptr;
+  uint64_t* temp_journal_tid = nullptr;
+  Context** temp_on_finish = nullptr;
+  Context* temp_on_dispatched = nullptr;
+  ZTracer::Trace* temp_trace = nullptr;
+  io::LightweightBufferExtents buffer_extents;
+
+  ASSERT_EQ(mock_parent_image_cache->discard(0, 0, 0, *temp_snapc, 0, *temp_trace, temp_op_flags,
+            temp_journal_tid, temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
+  ASSERT_EQ(mock_parent_image_cache->write(0, 0, std::move(temp_bl), *temp_snapc, 0,
+            *temp_trace, temp_op_flags, temp_journal_tid, temp_dispatch_result,
+            temp_on_finish, temp_on_dispatched), false);
+  ASSERT_EQ(mock_parent_image_cache->write_same(0, 0, 0, std::move(buffer_extents),
+            std::move(temp_bl), *temp_snapc, 0, *temp_trace, temp_op_flags,
+            temp_journal_tid, temp_dispatch_result, temp_on_finish, temp_on_dispatched), false );
+  ASSERT_EQ(mock_parent_image_cache->compare_and_write(0, 0, std::move(temp_bl), std::move(temp_bl),
+            *temp_snapc, 0, *temp_trace, temp_journal_tid, temp_op_flags, temp_journal_tid,
+            temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
+  ASSERT_EQ(mock_parent_image_cache->flush(io::FLUSH_SOURCE_USER, *temp_trace, temp_journal_tid,
+            temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
+  ASSERT_EQ(mock_parent_image_cache->invalidate_cache(nullptr), false);
+  ASSERT_EQ(mock_parent_image_cache->reset_existence_cache(nullptr), false);
+
+  delete mock_parent_image_cache;
+
+}
+
+TEST_F(TestMockParentCacheObjectDispatch, test_read) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  expect_cache_run(*mock_parent_image_cache, 0);
+  C_SaferCond conn_cond;
+  Context* handle_connect = new LambdaContext([&conn_cond](int ret) {
+    ASSERT_EQ(ret, 0);
+    conn_cond.complete(0);
+  });
+  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
+  Context* ctx = new LambdaContext([](bool reg) {
+    ASSERT_EQ(reg, true);
+  });
+  expect_cache_register(*mock_parent_image_cache, ctx, 0);
+  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
+  expect_cache_close(*mock_parent_image_cache, 0);
+  expect_cache_stop(*mock_parent_image_cache, 0);
+
+  mock_parent_image_cache->init();
+  conn_cond.wait();
+
+  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
+            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
+  expect_cache_session_state(*mock_parent_image_cache, true);
+  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
+
+  auto& expect = EXPECT_CALL(*(mock_parent_image_cache->get_cache_client()), is_session_work());
+  expect.WillOnce(Return(true));
+
+  expect_cache_lookup_object(*mock_parent_image_cache, "/dev/null");
+
+  C_SaferCond on_dispatched;
+  io::DispatchResult dispatch_result;
+  ceph::bufferlist read_data;
+  mock_parent_image_cache->read(0, 0, 4096, CEPH_NOSNAP, 0, {}, &read_data,
+                                nullptr, nullptr, &dispatch_result, nullptr,
+                                &on_dispatched);
+  ASSERT_EQ(0, on_dispatched.wait());
+
+  mock_parent_image_cache->get_cache_client()->close();
+  mock_parent_image_cache->get_cache_client()->stop();
+  delete mock_parent_image_cache;
+}
+
+TEST_F(TestMockParentCacheObjectDispatch, test_read_dne) {
+  librbd::ImageCtx* ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  MockParentImageCacheImageCtx mock_image_ctx(*ictx);
+  mock_image_ctx.child = &mock_image_ctx;
+
+  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
+
+  expect_cache_run(*mock_parent_image_cache, 0);
+  C_SaferCond conn_cond;
+  Context* handle_connect = new LambdaContext([&conn_cond](int ret) {
+    ASSERT_EQ(ret, 0);
+    conn_cond.complete(0);
+  });
+  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
+  Context* ctx = new LambdaContext([](bool reg) {
+    ASSERT_EQ(reg, true);
+  });
+  expect_cache_register(*mock_parent_image_cache, ctx, 0);
+  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
+  expect_cache_close(*mock_parent_image_cache, 0);
+  expect_cache_stop(*mock_parent_image_cache, 0);
+
+  mock_parent_image_cache->init();
+  conn_cond.wait();
+
+  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
+            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
+  expect_cache_session_state(*mock_parent_image_cache, true);
+  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(),
+            true);
+
+  EXPECT_CALL(*(mock_parent_image_cache->get_cache_client()), is_session_work())
+    .WillOnce(Return(true));
+
+  expect_cache_lookup_object(*mock_parent_image_cache, "");
+
+  MockUtils mock_utils;
+  expect_read_parent(mock_utils, 0, 0, 4096, CEPH_NOSNAP, 0);
+
+  C_SaferCond on_dispatched;
+  io::DispatchResult dispatch_result;
+  mock_parent_image_cache->read(0, 0, 4096, CEPH_NOSNAP, 0, {}, nullptr,
+                                nullptr, nullptr, &dispatch_result, nullptr,
+                                &on_dispatched);
+  ASSERT_EQ(0, on_dispatched.wait());
+
+  mock_parent_image_cache->get_cache_client()->close();
+  mock_parent_image_cache->get_cache_client()->stop();
+  delete mock_parent_image_cache;
+}
+
+}  // namespace librbd
diff --git a/ceph/src/test/librbd/cache/test_mock_ParentImageCache.cc b/ceph/src/test/librbd/cache/test_mock_ParentImageCache.cc
deleted file mode 100644 (file)
index d48b5ec..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "test/librbd/test_mock_fixture.h"
-#include "test/librbd/test_support.h"
-#include "test/librbd/mock/MockImageCtx.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "include/Context.h"
-#include "tools/immutable_object_cache/CacheClient.h"
-#include "test/immutable_object_cache/MockCacheDaemon.h"
-#include "librbd/cache/ParentCacheObjectDispatch.h"
-#include "test/librbd/test_mock_fixture.h"
-#include "test/librbd/mock/MockImageCtx.h"
-
-using namespace ceph::immutable_obj_cache;
-
-namespace librbd {
-
-namespace {
-
-struct MockParentImageCacheImageCtx : public MockImageCtx {
-  MockParentImageCacheImageCtx(ImageCtx& image_ctx)
-   : MockImageCtx(image_ctx), shared_cache_path("/tmp/socket/path"){
-  }
-  ~MockParentImageCacheImageCtx() {}
-
-  std::string shared_cache_path;
-};
-
-}; // anonymous namespace
-
-namespace cache {
-
-template<>
-struct TypeTraits<MockParentImageCacheImageCtx> {
-  typedef ceph::immutable_obj_cache::MockCacheClient CacheClient;
-};
-
-}; // namespace cache
-
-}; // namespace librbd
-
-#include "librbd/cache/ParentCacheObjectDispatch.cc"
-template class librbd::cache::ParentCacheObjectDispatch<librbd::MockParentImageCacheImageCtx>;
-
-namespace librbd {
-
-using ::testing::_;
-using ::testing::DoAll;
-using ::testing::Invoke;
-using ::testing::InSequence;
-using ::testing::Return;
-using ::testing::WithArg;
-using ::testing::WithArgs;
-
-class TestMockParentImageCache : public TestMockFixture {
-  public : 
-  typedef cache::ParentCacheObjectDispatch<librbd::MockParentImageCacheImageCtx> MockParentImageCache;
-
-  // ====== mock cache client ==== 
-  void expect_cache_run(MockParentImageCache& mparent_image_cache, bool ret_val) {
-    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), run());
-
-    expect.WillOnce((Invoke([ret_val]() {
-    })));
-  }
-
-   void expect_cache_session_state(MockParentImageCache& mparent_image_cache, bool ret_val) {
-     auto & expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), is_session_work());
-
-     expect.WillOnce((Invoke([ret_val]() {
-        return ret_val;
-     })));
-   }
-
-   void expect_cache_connect(MockParentImageCache& mparent_image_cache, int ret_val) {
-     auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), connect());
-
-     expect.WillOnce((Invoke([ret_val]() {
-        return ret_val;
-      })));
-   }
-
-   void expect_cache_async_connect(MockParentImageCache& mparent_image_cache, int ret_val,
-                                   Context* on_finish) {
-     auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), connect(_));
-
-     expect.WillOnce(WithArg<0>(Invoke([on_finish, ret_val](Context* ctx) {
-       ctx->complete(ret_val);
-       on_finish->complete(ret_val);
-     })));
-   }
-
-  void expect_cache_lookup_object(MockParentImageCache& mparent_image_cache,
-                                  Context* on_finish) {
-    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()),
-                               internal_lookup(_, _, _, _));
-
-     expect.WillOnce(WithArg<3>(Invoke([on_finish](std::string oid) {
-       on_finish->complete(0);
-     })));
-  }
-
-  void expect_cache_close(MockParentImageCache& mparent_image_cache, int ret_val) {
-    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), close());
-
-    expect.WillOnce((Invoke([ret_val]() {
-    })));
-  }
-
-  void expect_cache_stop(MockParentImageCache& mparent_image_cache, int ret_val) {
-    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), stop());
-
-    expect.WillOnce((Invoke([ret_val]() {
-    })));
-  }
-
-  void expect_cache_register(MockParentImageCache& mparent_image_cache, Context* mock_handle_register, int ret_val) {
-    auto& expect = EXPECT_CALL(*(mparent_image_cache.get_cache_client()), register_client(_));
-
-    expect.WillOnce(WithArg<0>(Invoke([mock_handle_register, ret_val](Context* ctx) { 
-      if(ret_val == 0) {
-        mock_handle_register->complete(true);
-      } else {
-        mock_handle_register->complete(false);
-      }
-      ctx->complete(true);
-      return ret_val;
-    })));
-  }
-
-  void expect_io_object_dispatcher_register_state(MockParentImageCache& mparent_image_cache, 
-                                                  int ret_val) {
-    auto& expect = EXPECT_CALL((*(mparent_image_cache.get_image_ctx()->io_object_dispatcher)),
-                               register_object_dispatch(_));
-
-        expect.WillOnce(WithArg<0>(Invoke([ret_val, &mparent_image_cache]
-                (io::ObjectDispatchInterface* object_dispatch) {
-          ASSERT_EQ(object_dispatch, &mparent_image_cache);
-        })));
-  }
-};
-
-TEST_F(TestMockParentImageCache, test_initialization_success) {
-  librbd::ImageCtx* ictx;
-  ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  MockParentImageCacheImageCtx mock_image_ctx(*ictx); 
-
-  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
-
-  expect_cache_run(*mock_parent_image_cache, 0);
-  C_SaferCond cond;
-  Context* handle_connect = new LambdaContext([&cond](int ret) {
-    ASSERT_EQ(ret, 0);
-    cond.complete(0);
-  });
-  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
-  Context* ctx = new LambdaContext([](bool reg) {
-    ASSERT_EQ(reg, true);
-  });
-  expect_cache_register(*mock_parent_image_cache, ctx, 0);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
-  expect_cache_close(*mock_parent_image_cache, 0);
-  expect_cache_stop(*mock_parent_image_cache, 0);
-
-  mock_parent_image_cache->init();
-  cond.wait();
-
-  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
-            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
-  ASSERT_EQ(mock_parent_image_cache->get_state(), true);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
-
-  mock_parent_image_cache->get_cache_client()->close();
-  mock_parent_image_cache->get_cache_client()->stop();
-
-  delete mock_parent_image_cache;
-}
-
-TEST_F(TestMockParentImageCache, test_initialization_fail_at_connect) {
-  librbd::ImageCtx* ictx;
-  ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  MockParentImageCacheImageCtx mock_image_ctx(*ictx); 
-
-  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
-
-  expect_cache_run(*mock_parent_image_cache, 0);
-  C_SaferCond cond;
-  Context* handle_connect = new LambdaContext([&cond](int ret) {
-    ASSERT_EQ(ret, -1);
-    cond.complete(0);
-  });
-  expect_cache_async_connect(*mock_parent_image_cache, -1, handle_connect);
-  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
-  expect_cache_session_state(*mock_parent_image_cache, false);
-  expect_cache_close(*mock_parent_image_cache, 0);
-  expect_cache_stop(*mock_parent_image_cache, 0);
-
-  mock_parent_image_cache->init();
-
-  // initialization fails.
-  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
-            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
-  ASSERT_EQ(mock_parent_image_cache->get_state(), true);
-  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), false);
-
-  mock_parent_image_cache->get_cache_client()->close();
-  mock_parent_image_cache->get_cache_client()->stop();
-
-  delete mock_parent_image_cache;
-
-}
-
-TEST_F(TestMockParentImageCache, test_initialization_fail_at_register) {
-  librbd::ImageCtx* ictx;
-  ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  MockParentImageCacheImageCtx mock_image_ctx(*ictx); 
-
-  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
-
-  expect_cache_run(*mock_parent_image_cache, 0);
-  C_SaferCond cond;
-  Context* handle_connect = new LambdaContext([&cond](int ret) {
-    ASSERT_EQ(ret, 0);
-    cond.complete(0);
-  });
-  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
-  Context* ctx = new LambdaContext([](bool reg) {
-    ASSERT_EQ(reg, false);
-  });
-  expect_cache_register(*mock_parent_image_cache, ctx, -1);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
-  expect_cache_close(*mock_parent_image_cache, 0);
-  expect_cache_stop(*mock_parent_image_cache, 0);
-
-  mock_parent_image_cache->init();
-  cond.wait();
-
-  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
-            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
-  ASSERT_EQ(mock_parent_image_cache->get_state(), true);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
-  mock_parent_image_cache->get_cache_client()->close();
-  mock_parent_image_cache->get_cache_client()->stop();
-
-  delete mock_parent_image_cache;
-}
-
-TEST_F(TestMockParentImageCache, test_disble_interface) {
-  librbd::ImageCtx* ictx;
-  ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  MockParentImageCacheImageCtx mock_image_ctx(*ictx); 
-
-  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
-
-  std::string temp_oid("12345");
-  ceph::bufferlist temp_bl;
-  ::SnapContext *temp_snapc = nullptr;
-  io::DispatchResult* temp_dispatch_result = nullptr;
-  io::Extents temp_buffer_extents;
-  int* temp_op_flags = nullptr;
-  uint64_t* temp_journal_tid = nullptr;
-  Context** temp_on_finish = nullptr;
-  Context* temp_on_dispatched = nullptr;
-  ZTracer::Trace* temp_trace = nullptr;
-  io::LightweightBufferExtents buffer_extents;
-  
-  ASSERT_EQ(mock_parent_image_cache->discard(0, 0, 0, *temp_snapc, 0, *temp_trace, temp_op_flags,
-            temp_journal_tid, temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
-  ASSERT_EQ(mock_parent_image_cache->write(0, 0, std::move(temp_bl), *temp_snapc, 0,
-            *temp_trace, temp_op_flags, temp_journal_tid, temp_dispatch_result,
-            temp_on_finish, temp_on_dispatched), false);
-  ASSERT_EQ(mock_parent_image_cache->write_same(0, 0, 0, std::move(buffer_extents),
-            std::move(temp_bl), *temp_snapc, 0, *temp_trace, temp_op_flags,
-            temp_journal_tid, temp_dispatch_result, temp_on_finish, temp_on_dispatched), false );
-  ASSERT_EQ(mock_parent_image_cache->compare_and_write(0, 0, std::move(temp_bl), std::move(temp_bl),
-            *temp_snapc, 0, *temp_trace, temp_journal_tid, temp_op_flags, temp_journal_tid,
-            temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
-  ASSERT_EQ(mock_parent_image_cache->flush(io::FLUSH_SOURCE_USER, *temp_trace, temp_journal_tid,
-            temp_dispatch_result, temp_on_finish, temp_on_dispatched), false);
-  ASSERT_EQ(mock_parent_image_cache->invalidate_cache(nullptr), false);
-  ASSERT_EQ(mock_parent_image_cache->reset_existence_cache(nullptr), false);
-
-  delete mock_parent_image_cache;
-
-}
-
-TEST_F(TestMockParentImageCache, test_read) {
-  librbd::ImageCtx* ictx;
-  ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  MockParentImageCacheImageCtx mock_image_ctx(*ictx); 
-
-  auto mock_parent_image_cache = MockParentImageCache::create(&mock_image_ctx);
-
-  expect_cache_run(*mock_parent_image_cache, 0);
-  C_SaferCond conn_cond;
-  Context* handle_connect = new LambdaContext([&conn_cond](int ret) {
-    ASSERT_EQ(ret, 0);
-    conn_cond.complete(0);
-  });
-  expect_cache_async_connect(*mock_parent_image_cache, 0, handle_connect);
-  Context* ctx = new LambdaContext([](bool reg) {
-    ASSERT_EQ(reg, true);
-  });
-  expect_cache_register(*mock_parent_image_cache, ctx, 0);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  expect_io_object_dispatcher_register_state(*mock_parent_image_cache, 0);
-  expect_cache_close(*mock_parent_image_cache, 0);
-  expect_cache_stop(*mock_parent_image_cache, 0);
-
-  mock_parent_image_cache->init();
-  conn_cond.wait();
-
-  ASSERT_EQ(mock_parent_image_cache->get_object_dispatch_layer(),
-            io::OBJECT_DISPATCH_LAYER_PARENT_CACHE);
-  ASSERT_EQ(mock_parent_image_cache->get_state(), true);
-  expect_cache_session_state(*mock_parent_image_cache, true);
-  ASSERT_EQ(mock_parent_image_cache->get_cache_client()->is_session_work(), true);
-
-  C_SaferCond cond;
-  Context* on_finish = &cond;
-
-  auto& expect = EXPECT_CALL(*(mock_parent_image_cache->get_cache_client()), is_session_work());
-  expect.WillOnce(Return(true)).WillOnce(Return(true));
-
-  expect_cache_lookup_object(*mock_parent_image_cache, on_finish); 
-
-  mock_parent_image_cache->read(0, 0, 4096, CEPH_NOSNAP, 0, {},
-                        nullptr, nullptr, nullptr, nullptr, &on_finish, nullptr);
-  ASSERT_EQ(0, cond.wait());
-
-  mock_parent_image_cache->get_cache_client()->close();
-  mock_parent_image_cache->get_cache_client()->stop();
-  delete mock_parent_image_cache;
-}
-
-}  // namespace librbd
index a928df5cce4e20380d591e2b3c7279dc5e40d0ac..b885cdbd73c527cdef60da09e0913e4d1e6b74f3 100644 (file)
@@ -1954,7 +1954,7 @@ create_image()
                goto failed_shutdown;
        }
 #if defined(WITH_KRBD)
-       r = krbd_create_from_context(rados_cct(cluster), &krbd);
+       r = krbd_create_from_context(rados_cct(cluster), 0, &krbd);
        if (r < 0) {
                simple_err("Could not create libkrbd handle", r);
                goto failed_shutdown;
index 8ebea73cf85d1247b775eae7784ef7de9c49d4af..39a5e5d11c6b2c7e37ecd9a810628c0bf1066949 100644 (file)
@@ -105,11 +105,13 @@ struct ThreadPool::PointerWQ<librbd::io::ImageDispatchSpec<librbd::MockTestImage
   MOCK_METHOD0(empty, bool());
   MOCK_METHOD0(mock_empty, bool());
   MOCK_METHOD0(signal, void());
+  MOCK_METHOD1(signal, void(const std::lock_guard<ceph::mutex>&));
   MOCK_METHOD0(process_finish, void());
 
   MOCK_METHOD0(front, ImageDispatchSpec*());
   MOCK_METHOD1(requeue_front, void(ImageDispatchSpec*));
-  MOCK_METHOD1(requeue_back, void(ImageDispatchSpec*));
+  MOCK_METHOD2(requeue_back, void(const std::lock_guard<ceph::mutex>&,
+                                  ImageDispatchSpec*));
 
   MOCK_METHOD0(dequeue, void*());
   MOCK_METHOD1(queue, void(ImageDispatchSpec*));
@@ -171,12 +173,16 @@ struct TestMockIoImageRequestWQ : public TestMockFixture {
     EXPECT_CALL(image_request_wq, signal());
   }
 
+  void expect_signal_locked(MockImageRequestWQ &image_request_wq) {
+    EXPECT_CALL(image_request_wq, signal(_));
+  }
+
   void expect_queue(MockImageRequestWQ &image_request_wq) {
     EXPECT_CALL(image_request_wq, queue(_));
   }
 
   void expect_requeue_back(MockImageRequestWQ &image_request_wq) {
-    EXPECT_CALL(image_request_wq, requeue_back(_));
+    EXPECT_CALL(image_request_wq, requeue_back(_, _));
   }
 
   void expect_front(MockImageRequestWQ &image_request_wq,
@@ -445,7 +451,7 @@ TEST_F(TestMockIoImageRequestWQ, BPSQosNoBurst) {
   expect_dequeue(mock_image_request_wq, &mock_queued_image_request);
   expect_all_throttled(mock_queued_image_request, true);
   expect_requeue_back(mock_image_request_wq);
-  expect_signal(mock_image_request_wq);
+  expect_signal_locked(mock_image_request_wq);
   ASSERT_TRUE(mock_image_request_wq.invoke_dequeue() == nullptr);
 }
 
@@ -469,7 +475,7 @@ TEST_F(TestMockIoImageRequestWQ, BPSQosWithBurst) {
   expect_dequeue(mock_image_request_wq, &mock_queued_image_request);
   expect_all_throttled(mock_queued_image_request, true);
   expect_requeue_back(mock_image_request_wq);
-  expect_signal(mock_image_request_wq);
+  expect_signal_locked(mock_image_request_wq);
   ASSERT_TRUE(mock_image_request_wq.invoke_dequeue() == nullptr);
 }
 
index b963d737704da4547c7eab00c39b92ea2ca6bcd3..e6fd5b2ee03cd822e7e3b30b28a34478a449175d 100644 (file)
@@ -10,8 +10,8 @@
 #include "test/librados_test_stub/MockTestMemRadosClient.h"
 #include "include/rbd/librbd.hpp"
 #include "librbd/io/CopyupRequest.h"
-#include "librbd/io/ImageRequest.h"
 #include "librbd/io/ObjectRequest.h"
+#include "librbd/io/Utils.h"
 
 namespace librbd {
 namespace {
@@ -53,24 +53,38 @@ struct CopyupRequest<librbd::MockTestImageCtx> : public CopyupRequest<librbd::Mo
   }
 };
 
-template <>
-struct ImageRequest<librbd::MockTestImageCtx> {
-  static ImageRequest *s_instance;
-  static void aio_read(librbd::MockImageCtx *ictx, AioCompletion *c,
-                       Extents &&image_extents, ReadResult &&read_result,
-                       int op_flags, const ZTracer::Trace &parent_trace) {
-    s_instance->aio_read(c, image_extents);
-  }
+CopyupRequest<librbd::MockTestImageCtx>* CopyupRequest<librbd::MockTestImageCtx>::s_instance = nullptr;
 
-  MOCK_METHOD2(aio_read, void(AioCompletion *, const Extents&));
+namespace util {
+
+namespace {
 
-  ImageRequest() {
+struct Mock {
+  static Mock* s_instance;
+
+  Mock() {
     s_instance = this;
   }
+
+  MOCK_METHOD8(read_parent,
+               void(librbd::MockTestImageCtx *, uint64_t, uint64_t, uint64_t,
+                    librados::snap_t, const ZTracer::Trace &, ceph::bufferlist*,
+                    Context*));
 };
 
-CopyupRequest<librbd::MockTestImageCtx>* CopyupRequest<librbd::MockTestImageCtx>::s_instance = nullptr;
-ImageRequest<librbd::MockTestImageCtx>* ImageRequest<librbd::MockTestImageCtx>::s_instance = nullptr;
+Mock *Mock::s_instance = nullptr;
+
+} // anonymous namespace
+
+template<> void read_parent(
+    librbd::MockTestImageCtx *image_ctx, uint64_t object_no, uint64_t off,
+    uint64_t len, librados::snap_t snap_id, const ZTracer::Trace &trace,
+    ceph::bufferlist* data, Context* on_finish) {
+  Mock::s_instance->read_parent(image_ctx, object_no, off, len, snap_id, trace,
+                                data, on_finish);
+}
+
+} // namespace util
 
 } // namespace io
 } // namespace librbd
@@ -97,7 +111,7 @@ struct TestMockIoObjectRequest : public TestMockFixture {
   typedef ObjectCompareAndWriteRequest<librbd::MockTestImageCtx> MockObjectCompareAndWriteRequest;
   typedef AbstractObjectWriteRequest<librbd::MockTestImageCtx> MockAbstractObjectWriteRequest;
   typedef CopyupRequest<librbd::MockTestImageCtx> MockCopyupRequest;
-  typedef ImageRequest<librbd::MockTestImageCtx> MockImageRequest;
+  typedef util::Mock MockUtils;
 
   void expect_object_may_exist(MockTestImageCtx &mock_image_ctx,
                                uint64_t object_no, bool exists) {
@@ -179,14 +193,12 @@ struct TestMockIoObjectRequest : public TestMockFixture {
     }
   }
 
-  void expect_aio_read(MockTestImageCtx &mock_image_ctx,
-                       MockImageRequest& mock_image_request,
-                       Extents&& extents, int r) {
-    EXPECT_CALL(mock_image_request, aio_read(_, extents))
-      .WillOnce(WithArg<0>(Invoke([&mock_image_ctx, r](AioCompletion* aio_comp) {
-                             aio_comp->set_request_count(1);
-                             mock_image_ctx.image_ctx->op_work_queue->queue(new C_AioRequest(aio_comp), r);
-                           })));
+  void expect_read_parent(MockUtils &mock_utils, uint64_t object_no,
+                          uint64_t off, uint64_t len, librados::snap_t snap_id,
+                          int r) {
+    EXPECT_CALL(mock_utils,
+                read_parent(_, object_no, off, len, snap_id, _, _, _))
+      .WillOnce(WithArg<7>(CompleteContext(r, static_cast<ContextWQ*>(nullptr))));
   }
 
   void expect_copyup(MockCopyupRequest& mock_copyup_request, int r) {
@@ -423,10 +435,8 @@ TEST_F(TestMockIoObjectRequest, ParentRead) {
   expect_get_read_flags(mock_image_ctx, CEPH_NOSNAP, 0);
   expect_read(mock_image_ctx, ictx->get_object_name(0), 0, 4096, "", -ENOENT);
 
-  MockImageRequest mock_image_request;
-  expect_get_parent_overlap(mock_image_ctx, CEPH_NOSNAP, 4096, 0);
-  expect_prune_parent_extents(mock_image_ctx, {{0, 4096}}, 4096, 4096);
-  expect_aio_read(mock_image_ctx, mock_image_request, {{0, 4096}}, 0);
+  MockUtils mock_utils;
+  expect_read_parent(mock_utils, 0, 0, 4096, CEPH_NOSNAP, 0);
 
   bufferlist bl;
   ExtentMap extent_map;
@@ -470,10 +480,8 @@ TEST_F(TestMockIoObjectRequest, ParentReadError) {
   expect_get_read_flags(mock_image_ctx, CEPH_NOSNAP, 0);
   expect_read(mock_image_ctx, ictx->get_object_name(0), 0, 4096, "", -ENOENT);
 
-  MockImageRequest mock_image_request;
-  expect_get_parent_overlap(mock_image_ctx, CEPH_NOSNAP, 4096, 0);
-  expect_prune_parent_extents(mock_image_ctx, {{0, 4096}}, 4096, 4096);
-  expect_aio_read(mock_image_ctx, mock_image_request, {{0, 4096}}, -EPERM);
+  MockUtils mock_utils;
+  expect_read_parent(mock_utils, 0, 0, 4096, CEPH_NOSNAP, -EPERM);
 
   bufferlist bl;
   ExtentMap extent_map;
@@ -517,10 +525,8 @@ TEST_F(TestMockIoObjectRequest, CopyOnRead) {
   expect_get_read_flags(mock_image_ctx, CEPH_NOSNAP, 0);
   expect_read(mock_image_ctx, ictx->get_object_name(0), 0, 4096, "", -ENOENT);
 
-  MockImageRequest mock_image_request;
-  expect_get_parent_overlap(mock_image_ctx, CEPH_NOSNAP, 4096, 0);
-  expect_prune_parent_extents(mock_image_ctx, {{0, 4096}}, 4096, 4096);
-  expect_aio_read(mock_image_ctx, mock_image_request, {{0, 4096}}, 0);
+  MockUtils mock_utils;
+  expect_read_parent(mock_utils, 0, 0, 4096, CEPH_NOSNAP, 0);
 
   MockCopyupRequest mock_copyup_request;
   expect_get_parent_overlap(mock_image_ctx, CEPH_NOSNAP, 4096, 0);
index 1872dcb19b71e29b41082b2c86d0fcaa7540feed..9fff3e5929684892d76491592e75f43e6ba46c43 100644 (file)
@@ -292,6 +292,7 @@ struct MockImageCtx {
 
   EventSocket &event_socket;
 
+  MockImageCtx *child = nullptr;
   MockImageCtx *parent;
   MockOperations *operations;
   MockImageState *state;
index 19512036ad365f70b0b780f9bd4efce6680bfdf5..69182ddcea5f614cc102878ade2e78cf62349d07 100644 (file)
@@ -1107,6 +1107,37 @@ TEST_F(TestMigration, SnapTrimBeforePrepare)
   migration_commit(m_ioctx, m_image_name);
 }
 
+TEST_F(TestMigration, AbortInUseImage) {
+  migration_prepare(m_ioctx, m_image_name);
+  migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
+
+  librbd::NoOpProgressContext no_op;
+  EXPECT_EQ(-EBUSY, librbd::api::Migration<>::abort(m_ioctx, m_ictx->name,
+                                                    no_op));
+}
+
+TEST_F(TestMigration, AbortWithoutSnapshots) {
+  test_no_snaps();
+  migration_prepare(m_ioctx, m_image_name);
+  migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
+  test_no_snaps();
+  migration_abort(m_ioctx, m_image_name);
+}
+
+TEST_F(TestMigration, AbortWithSnapshots) {
+  test_snaps();
+  migration_prepare(m_ioctx, m_image_name);
+  migration_status(RBD_IMAGE_MIGRATION_STATE_PREPARED);
+
+  test_no_snaps();
+  flush();
+  ASSERT_EQ(0, TestFixture::snap_create(*m_ictx, "dst-only-snap"));
+
+  test_no_snaps();
+
+  migration_abort(m_ioctx, m_image_name);
+}
+
 TEST_F(TestMigration, CloneV1Parent)
 {
   const uint32_t CLONE_FORMAT = 1;
index c9cf7af78b2dbb8722733f41fd877fb5ed2cb858..943ca99a3fe9eb2ee234c72bec45b9103395659f 100644 (file)
@@ -25,6 +25,13 @@ add_executable(unittest_mon_moncap
 add_ceph_unittest(unittest_mon_moncap)
 target_link_libraries(unittest_mon_moncap mon global)
 
+# unittest_mon_map
+add_executable(unittest_mon_monmap
+  MonMap.cc
+  )
+add_ceph_unittest(unittest_mon_monmap)
+target_link_libraries(unittest_mon_monmap mon global)
+
 # unittest_mon_pgmap
 add_executable(unittest_mon_pgmap
   PGMap.cc
index f3c00bfd79442746c3521ca25fed58aef47a03b6..54720b559af7abcce3082dc1d64769ad855eb6de 100644 (file)
@@ -45,7 +45,7 @@ class MonMapTest : public ::testing::Test {
     }
 };
 
-TEST_F(MonMapTest, build_initial_config_from_dns) {
+TEST_F(MonMapTest, DISABLED_build_initial_config_from_dns) {
 
   MockResolvHWrapper *resolvH = new MockResolvHWrapper();
   DNSResolver::get_instance(resolvH);
@@ -102,25 +102,25 @@ TEST_F(MonMapTest, build_initial_config_from_dns) {
   int r = monmap.build_initial(cct, false, std::cerr);
 
   ASSERT_EQ(r, 0);
-  ASSERT_EQ(monmap.mon_addr.size(), (unsigned int)3);
-  map<string,entity_addr_t>::iterator it = monmap.mon_addr.find("mon.a");
-  ASSERT_NE(it, monmap.mon_addr.end());
+  ASSERT_EQ(monmap.mon_info.size(), (unsigned int)3);
+  auto it = monmap.mon_info.find("mon.a");
+  ASSERT_NE(it, monmap.mon_info.end());
   std::ostringstream os;
-  os << it->second;
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.11:6789/0");
   os.str("");
-  it = monmap.mon_addr.find("mon.b");
-  ASSERT_NE(it, monmap.mon_addr.end());
-  os << it->second;
+  it = monmap.mon_info.find("mon.b");
+  ASSERT_NE(it, monmap.mon_info.end());
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.12:6789/0");
   os.str("");
-  it = monmap.mon_addr.find("mon.c");
-  ASSERT_NE(it, monmap.mon_addr.end());
-  os << it->second;
+  it = monmap.mon_info.find("mon.c");
+  ASSERT_NE(it, monmap.mon_info.end());
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.13:6789/0");
 }
 
-TEST_F(MonMapTest, build_initial_config_from_dns_fail) {
+TEST_F(MonMapTest, DISABLED_build_initial_config_from_dns_fail) {
   MockResolvHWrapper *resolvH = new MockResolvHWrapper();
   DNSResolver::get_instance(resolvH);
 
@@ -139,11 +139,11 @@ TEST_F(MonMapTest, build_initial_config_from_dns_fail) {
   int r = monmap.build_initial(cct, false, std::cerr);
 
   ASSERT_EQ(r, -ENOENT);
-  ASSERT_EQ(monmap.mon_addr.size(), (unsigned int)0);
+  ASSERT_EQ(monmap.mon_info.size(), (unsigned int)0);
 
 }
 
-TEST_F(MonMapTest, build_initial_config_from_dns_with_domain) {
+TEST_F(MonMapTest, DISABLED_build_initial_config_from_dns_with_domain) {
 
   MockResolvHWrapper *resolvH = new MockResolvHWrapper();
   DNSResolver::get_instance(resolvH);
@@ -200,21 +200,40 @@ TEST_F(MonMapTest, build_initial_config_from_dns_with_domain) {
   int r = monmap.build_initial(cct, false, std::cerr);
 
   ASSERT_EQ(r, 0);
-  ASSERT_EQ(monmap.mon_addr.size(), (unsigned int)3);
-  map<string,entity_addr_t>::iterator it = monmap.mon_addr.find("mon.a");
-  ASSERT_NE(it, monmap.mon_addr.end());
+  ASSERT_EQ(monmap.mon_info.size(), (unsigned int)3);
+  auto it = monmap.mon_info.find("mon.a");
+  ASSERT_NE(it, monmap.mon_info.end());
   std::ostringstream os;
-  os << it->second;
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.11:6789/0");
   os.str("");
-  it = monmap.mon_addr.find("mon.b");
-  ASSERT_NE(it, monmap.mon_addr.end());
-  os << it->second;
+  it = monmap.mon_info.find("mon.b");
+  ASSERT_NE(it, monmap.mon_info.end());
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.12:6789/0");
   os.str("");
-  it = monmap.mon_addr.find("mon.c");
-  ASSERT_NE(it, monmap.mon_addr.end());
-  os << it->second;
+  it = monmap.mon_info.find("mon.c");
+  ASSERT_NE(it, monmap.mon_info.end());
+  os << it->second.public_addrs;
   ASSERT_EQ(os.str(), "192.168.1.13:6789/0");
 }
 
+TEST(MonMapBuildInitial, build_initial_mon_host_from_dns) {
+  CephContext *cct = (new CephContext(CEPH_ENTITY_TYPE_MON))->get();
+  cct->_conf.set_val("mon_host", "ceph.io");
+  MonMap monmap;
+  int r = monmap.build_initial(cct, false, std::cerr);
+  ASSERT_EQ(r, 0);
+  ASSERT_GE(monmap.mon_info.size(), 1u);
+  for (const auto& [name, info] : monmap.mon_info) {
+    std::cerr << info << std::endl;
+  }
+}
+
+TEST(MonMapBuildInitial, build_initial_mon_host_from_dns_fail) {
+  CephContext *cct = (new CephContext(CEPH_ENTITY_TYPE_MON))->get();
+  cct->_conf.set_val("mon_host", "ceph.noname");
+  MonMap monmap;
+  int r = monmap.build_initial(cct, false, std::cerr);
+  ASSERT_EQ(r, -EINVAL);
+}
index 15792a63af5816f76ad338eda2c19126411f5f68..fcaff2de960f42111a648813d96ad58e407b2457 100644 (file)
@@ -259,7 +259,7 @@ class ClientStub : public TestStub
     dout(10) << "ClientStub::" << __func__ << " starting messenger at "
            << messenger->get_myaddrs() << dendl;
 
-    objecter.reset(new Objecter(cct, messenger.get(), &monc, NULL, 0, 0));
+    objecter.reset(new Objecter(cct, messenger.get(), &monc, NULL));
     ceph_assert(objecter.get() != NULL);
     objecter->set_balanced_budget();
 
index 3e89141b8c1330fd7438ebf34386713727a0a70b..f0bf80c7c96d9ebfe899a1420081d73454c13504 100644 (file)
@@ -101,6 +101,17 @@ int queue_transaction(
   }
 }
 
+template <typename T>
+int collection_list(T &store, ObjectStore::CollectionHandle &c,
+                    const ghobject_t& start, const ghobject_t& end, int max,
+                    vector<ghobject_t> *ls, ghobject_t *pnext,
+                    bool disable_legacy = false) {
+  if (disable_legacy || rand() % 2) {
+    return store->collection_list(c, start, end, max, ls, pnext);
+  } else {
+    return store->collection_list_legacy(c, start, end, max, ls, pnext);
+  }
+}
 
 bool sorted(const vector<ghobject_t> &in) {
   ghobject_t start;
@@ -2836,9 +2847,8 @@ TEST_P(StoreTest, SimpleListTest) {
     vector<ghobject_t> objects;
     ghobject_t next, current;
     while (!next.is_max()) {
-      int r = store->collection_list(ch, current, ghobject_t::get_max(),
-                                    50,
-                                    &objects, &next);
+      int r = collection_list(store, ch, current, ghobject_t::get_max(), 50,
+                              &objects, &next);
       ASSERT_EQ(r, 0);
       ASSERT_TRUE(sorted(objects));
       cout << " got " << objects.size() << " next " << next << std::endl;
@@ -2901,8 +2911,7 @@ TEST_P(StoreTest, ListEndTest) {
     end.hobj.pool = 1;
     vector<ghobject_t> objects;
     ghobject_t next;
-    int r = store->collection_list(ch, ghobject_t(), end, 500,
-                                  &objects, &next);
+    int r = collection_list(store, ch, ghobject_t(), end, 500, &objects, &next);
     ASSERT_EQ(r, 0);
     for (auto &p : objects) {
       ASSERT_NE(p, end);
@@ -2981,8 +2990,8 @@ TEST_P(StoreTest, MultipoolListTest) {
     vector<ghobject_t> objects;
     ghobject_t next, current;
     while (!next.is_max()) {
-      int r = store->collection_list(ch, current, ghobject_t::get_max(), 50,
-                                    &objects, &next);
+      int r = collection_list(store, ch, current, ghobject_t::get_max(), 50,
+                              &objects, &next);
       ASSERT_EQ(r, 0);
       cout << " got " << objects.size() << " next " << next << std::endl;
       for (vector<ghobject_t>::iterator p = objects.begin(); p != objects.end();
@@ -3008,6 +3017,9 @@ TEST_P(StoreTest, MultipoolListTest) {
 TEST_P(StoreTest, SimpleCloneTest) {
   int r;
   coll_t cid;
+
+  SetDeathTestStyle("threadsafe");
+
   auto ch = store->create_new_collection(cid);
   {
     ObjectStore::Transaction t;
@@ -3280,13 +3292,7 @@ TEST_P(StoreTest, SimpleCloneTest) {
     ASSERT_TRUE(bl_eq(rl, final));
   }
 
-  //Unfortunately we need a workaround for filestore since EXPECT_DEATH
-  // macro has potential issues when using /in multithread environments. 
-  //It works well for all stores but filestore for now. 
-  //A fix setting gtest_death_test_style = "threadsafe" doesn't help as well - 
-  //  test app clone asserts on store folder presence.
-  //
-  if (string(GetParam()) != "filestore") { 
+  {
     //verify if non-empty collection is properly handled after store reload
     ch.reset();
     r = store->umount();
@@ -3307,8 +3313,7 @@ TEST_P(StoreTest, SimpleCloneTest) {
     r = queue_transaction(store, ch, std::move(t));
     ASSERT_EQ(r, 0);
   }
-  //See comment above for "filestore" check explanation.
-  if (string(GetParam()) != "filestore") {
+  {
     ObjectStore::Transaction t;
     //verify if non-empty collection is properly handled when there are some pending removes and live records in db
     cerr << "Invalid rm coll again" << std::endl;
@@ -3648,7 +3653,8 @@ TEST_P(StoreTest, ManyObjectTest) {
 
   set<ghobject_t> listed, listed2;
   vector<ghobject_t> objects;
-  r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(), INT_MAX, &objects, 0);
+  r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                      &objects, 0);
   ASSERT_EQ(r, 0);
 
   cerr << "objects.size() is " << objects.size() << std::endl;
@@ -3662,7 +3668,8 @@ TEST_P(StoreTest, ManyObjectTest) {
 
   ghobject_t start, next;
   objects.clear();
-  r = store->collection_list(
+  r = collection_list(
+    store,
     ch,
     ghobject_t::get_max(),
     ghobject_t::get_max(),
@@ -3677,10 +3684,8 @@ TEST_P(StoreTest, ManyObjectTest) {
   listed.clear();
   ghobject_t start2, next2;
   while (1) {
-    r = store->collection_list(ch, start, ghobject_t::get_max(),
-                              50,
-                              &objects,
-                              &next);
+    r = collection_list(store, ch, start, ghobject_t::get_max(), 50, &objects,
+                        &next);
     ASSERT_TRUE(sorted(objects));
     ASSERT_EQ(r, 0);
     listed.insert(objects.begin(), objects.end());
@@ -3907,8 +3912,8 @@ public:
     ghobject_t next;
     while (1) {
       vector<ghobject_t> objects;
-      int r = store->collection_list(ch, next, ghobject_t::get_max(),
-                                     10, &objects, &next);
+      int r = collection_list(store, ch, next, ghobject_t::get_max(), 10,
+                              &objects, &next);
       ceph_assert(r >= 0);
       if (objects.size() == 0)
         break;
@@ -4559,8 +4564,8 @@ public:
     ghobject_t next, current;
     while (1) {
       //cerr << "scanning..." << std::endl;
-      int r = store->collection_list(ch, current, ghobject_t::get_max(), 100,
-                                    &objects, &next);
+      int r = collection_list(store, ch, current, ghobject_t::get_max(), 100,
+                              &objects, &next);
       ASSERT_EQ(r, 0);
       ASSERT_TRUE(sorted(objects));
       objects_set.insert(objects.begin(), objects.end());
@@ -4593,8 +4598,8 @@ public:
       ASSERT_GT(available_objects.count(*i), (unsigned)0);
     }
 
-    int r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(),
-                                  INT_MAX, &objects, 0);
+    int r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(),
+                            INT_MAX, &objects, 0);
     ASSERT_EQ(r, 0);
     objects_set2.insert(objects.begin(), objects.end());
     ASSERT_EQ(objects_set2.size(), available_objects.size());
@@ -5008,7 +5013,8 @@ TEST_P(StoreTest, HashCollisionTest) {
   }
   }
   vector<ghobject_t> objects;
-  r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(), INT_MAX, &objects, 0);
+  r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                      &objects, 0);
   ASSERT_EQ(r, 0);
   set<ghobject_t> listed(objects.begin(), objects.end());
   cerr << "listed.size() is " << listed.size() << " and created.size() is " << created.size() << std::endl;
@@ -5017,8 +5023,8 @@ TEST_P(StoreTest, HashCollisionTest) {
   listed.clear();
   ghobject_t current, next;
   while (1) {
-    r = store->collection_list(ch, current, ghobject_t::get_max(), 60,
-                              &objects, &next);
+    r = collection_list(store, ch, current, ghobject_t::get_max(), 60, &objects,
+                        &next);
     ASSERT_EQ(r, 0);
     ASSERT_TRUE(sorted(objects));
     for (vector<ghobject_t>::iterator i = objects.begin();
@@ -5057,6 +5063,118 @@ TEST_P(StoreTest, HashCollisionTest) {
   ASSERT_EQ(r, 0);
 }
 
+TEST_P(StoreTest, HashCollisionSorting) {
+  bool disable_legacy = (string(GetParam()) == "bluestore");
+
+  char buf121664318_1[] = {18, -119, -121, -111, 0};
+  char buf121664318_2[] = {19, 127, -121, 32, 0};
+  char buf121664318_3[] = {19, -118, 15, 19, 0};
+  char buf121664318_4[] = {28, 27, -116, -113, 0};
+  char buf121664318_5[] = {28, 27, -115, -124, 0};
+
+  char buf121666222_1[] = {18, -119, -120, -111, 0};
+  char buf121666222_2[] = {19, 127, -120, 32, 0};
+  char buf121666222_3[] = {19, -118, 15, 30, 0};
+  char buf121666222_4[] = {29, 17, -126, -113, 0};
+  char buf121666222_5[] = {29, 17, -125, -124, 0};
+
+  std::map<uint32_t, std::vector<std::string>> object_names = {
+    {121664318, {{buf121664318_1},
+                 {buf121664318_2},
+                 {buf121664318_3},
+                 {buf121664318_4},
+                 {buf121664318_5}}},
+    {121666222, {{buf121666222_1},
+                 {buf121666222_2},
+                 {buf121666222_3},
+                 {buf121666222_4},
+                 {buf121666222_5}}}};
+
+  int64_t poolid = 111;
+  coll_t cid = coll_t(spg_t(pg_t(0, poolid), shard_id_t::NO_SHARD));
+  auto ch = store->create_new_collection(cid);
+  {
+    ObjectStore::Transaction t;
+    t.create_collection(cid, 0);
+    int r = queue_transaction(store, ch, std::move(t));
+    ASSERT_EQ(r, 0);
+  }
+
+  std::set<ghobject_t> created;
+  for (auto &[hash, names] : object_names) {
+    for (auto &name : names) {
+      ghobject_t hoid(hobject_t(sobject_t(name, CEPH_NOSNAP),
+                                string(),
+                                hash,
+                                poolid,
+                                string()));
+      ASSERT_EQ(hash, hoid.hobj.get_hash());
+      ObjectStore::Transaction t;
+      t.touch(cid, hoid);
+      int r = queue_transaction(store, ch, std::move(t));
+      ASSERT_EQ(r, 0);
+      created.insert(hoid);
+    }
+  }
+
+  vector<ghobject_t> objects;
+  int r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(),
+                          INT_MAX, &objects, 0, disable_legacy);
+  ASSERT_EQ(r, 0);
+  ASSERT_EQ(created.size(), objects.size());
+  auto it = objects.begin();
+  for (auto &hoid : created) {
+    ASSERT_EQ(hoid, *it);
+    it++;
+  }
+
+  for (auto i = created.begin(); i != created.end(); i++) {
+    auto j = i;
+    for (j++; j != created.end(); j++) {
+      std::set<ghobject_t> created_sub(i, j);
+      objects.clear();
+      ghobject_t next;
+      r = collection_list(store, ch, *i, ghobject_t::get_max(),
+                          created_sub.size(), &objects, &next, disable_legacy);
+      ASSERT_EQ(r, 0);
+      ASSERT_EQ(created_sub.size(), objects.size());
+      it = objects.begin();
+      for (auto &hoid : created_sub) {
+        ASSERT_EQ(hoid, *it);
+        it++;
+      }
+      if (j == created.end()) {
+        ASSERT_TRUE(next.is_max());
+      } else {
+        ASSERT_EQ(*j, next);
+      }
+    }
+  }
+
+  for (auto i = created.begin(); i != created.end(); i++) {
+    auto j = i;
+    for (j++; j != created.end(); j++) {
+      std::set<ghobject_t> created_sub(i, j);
+      objects.clear();
+      ghobject_t next;
+      r = collection_list(store, ch, *i, *j, INT_MAX, &objects, &next,
+                          disable_legacy);
+      ASSERT_EQ(r, 0);
+      ASSERT_EQ(created_sub.size(), objects.size());
+      it = objects.begin();
+      for (auto &hoid : created_sub) {
+        ASSERT_EQ(hoid, *it);
+        it++;
+      }
+      if (j == created.end()) {
+        ASSERT_TRUE(next.is_max());
+      } else {
+        ASSERT_EQ(*j, next);
+      }
+    }
+  }
+}
+
 TEST_P(StoreTest, ScrubTest) {
   int64_t poolid = 111;
   coll_t cid(spg_t(pg_t(0, poolid),shard_id_t(1)));
@@ -5106,8 +5224,8 @@ TEST_P(StoreTest, ScrubTest) {
   }
 
   vector<ghobject_t> objects;
-  r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(),
-                            INT_MAX, &objects, 0);
+  r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                      &objects, 0);
   ASSERT_EQ(r, 0);
   set<ghobject_t> listed(objects.begin(), objects.end());
   cerr << "listed.size() is " << listed.size() << " and created.size() is " << created.size() << std::endl;
@@ -5116,8 +5234,8 @@ TEST_P(StoreTest, ScrubTest) {
   listed.clear();
   ghobject_t current, next;
   while (1) {
-    r = store->collection_list(ch, current, ghobject_t::get_max(), 60,
-                              &objects, &next);
+    r = collection_list(store, ch, current, ghobject_t::get_max(), 60, &objects,
+                        &next);
     ASSERT_EQ(r, 0);
     ASSERT_TRUE(sorted(objects));
     for (vector<ghobject_t>::iterator i = objects.begin();
@@ -5581,8 +5699,8 @@ void colsplittest(
 
   // check
   vector<ghobject_t> objects;
-  r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(),
-                            INT_MAX, &objects, 0);
+  r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                      &objects, 0);
   ASSERT_EQ(r, 0);
   ASSERT_EQ(objects.size(), num_objects);
   for (vector<ghobject_t>::iterator i = objects.begin();
@@ -5592,8 +5710,8 @@ void colsplittest(
   }
 
   objects.clear();
-  r = store->collection_list(tch, ghobject_t(), ghobject_t::get_max(),
-                            INT_MAX, &objects, 0);
+  r = collection_list(store, tch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                      &objects, 0);
   ASSERT_EQ(r, 0);
   ASSERT_EQ(objects.size(), num_objects);
   for (vector<ghobject_t>::iterator i = objects.begin();
@@ -5614,8 +5732,8 @@ void colsplittest(
   ObjectStore::Transaction t;
   {
     vector<ghobject_t> objects;
-    r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(),
-                              INT_MAX, &objects, 0);
+    r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                        &objects, 0);
     ASSERT_EQ(r, 0);
     ASSERT_EQ(objects.size(), num_objects * 2); // both halves
     unsigned size = 0;
@@ -5752,8 +5870,8 @@ void test_merge_skewed(ObjectStore *store,
   // verify
   {
     vector<ghobject_t> got;
-    store->collection_list(cha, ghobject_t(), ghobject_t::get_max(), INT_MAX,
-                          &got, 0);
+    collection_list(store, cha, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                    &got, 0);
     set<ghobject_t> gotset;
     for (auto& o : got) {
       ASSERT_TRUE(aobjects.count(o) || bobjects.count(o));
@@ -6061,8 +6179,8 @@ TEST_P(StoreTest, BigRGWObjectName) {
 
   {
     vector<ghobject_t> objects;
-    r = store->collection_list(ch, ghobject_t(), ghobject_t::get_max(),
-                              INT_MAX, &objects, 0);
+    r = collection_list(store, ch, ghobject_t(), ghobject_t::get_max(), INT_MAX,
+                        &objects, 0);
     ASSERT_EQ(r, 0);
     ASSERT_EQ(objects.size(), 1u);
     ASSERT_EQ(objects[0], oid2);
@@ -6436,15 +6554,18 @@ TEST_P(StoreTestSpecificAUSize, TooManyBlobsTest) {
 #if defined(WITH_BLUESTORE)
 void get_mempool_stats(uint64_t* total_bytes, uint64_t* total_items)
 {
+  uint64_t meta_allocated = mempool::bluestore_cache_meta::allocated_bytes();
   uint64_t onode_allocated = mempool::bluestore_cache_onode::allocated_bytes();
   uint64_t other_allocated = mempool::bluestore_cache_other::allocated_bytes();
 
+  uint64_t meta_items = mempool::bluestore_cache_meta::allocated_items();
   uint64_t onode_items = mempool::bluestore_cache_onode::allocated_items();
   uint64_t other_items = mempool::bluestore_cache_other::allocated_items();
-  cout << "onode(" << onode_allocated << "/" << onode_items
+  cout << "meta(" << meta_allocated << "/" << meta_items
+       << ") onode(" << onode_allocated << "/" << onode_items
        << ") other(" << other_allocated << "/" << other_items
        << ")" << std::endl;
-  *total_bytes = onode_allocated + other_allocated;
+  *total_bytes = meta_allocated + onode_allocated + other_allocated;
   *total_items = onode_items;
 }
 
index 33d4618a31b007e558aeb46b6650abdadd246a03..7e233102f3fc4f9446c2acd6320517c747e43a84 100644 (file)
@@ -70,6 +70,10 @@ void StoreTestFixture::TearDown()
   // config settings. Hence setting it to 'unsafe' here as test case is closing.
   g_conf()._clear_safe_to_start_threads();
   PopSettings(0);
+  if (!orig_death_test_style.empty()) {
+    ::testing::FLAGS_gtest_death_test_style = orig_death_test_style;
+    orig_death_test_style.clear();
+  }
   if (store) {
     int r = store->umount();
     EXPECT_EQ(0, r);
index d816dbdf49de7a71783c96d5670c0363e65e10c2..40e62778cdb5c665ad27939b53128c0a5b458cd4 100644 (file)
@@ -13,6 +13,8 @@ class StoreTestFixture : virtual public ::testing::Test {
   std::stack<std::pair<std::string, std::string>> saved_settings;
   ConfigProxy* conf = nullptr;
 
+  std::string orig_death_test_style;
+
 public:
   boost::scoped_ptr<ObjectStore> store;
   ObjectStore::CollectionHandle ch;
@@ -23,6 +25,13 @@ public:
 
   void SetUp() override;
   void TearDown() override;
+  void SetDeathTestStyle(const char* new_style) {
+    if (orig_death_test_style.empty()) {
+      orig_death_test_style = ::testing::FLAGS_gtest_death_test_style;
+    }
+    ::testing::FLAGS_gtest_death_test_style = new_style;
+  }
+
   void SetVal(ConfigProxy& conf, const char* key, const char* val);
   struct SettingsBookmark {
     StoreTestFixture& s;
index e633ee0cd01767f566f0b7bdc02ae1a377ee5b08..c6bd0c9bea766d02fdd81897950f50577e750d07 100644 (file)
@@ -431,3 +431,12 @@ def test_futimens():
 
     cephfs.close(fd)
     cephfs.unlink(b'/file-1')
+
+@with_setup(setup_test)
+def test_disk_quota_exceeeded_error():
+    cephfs.mkdir("/dir-1", 0o755)
+    cephfs.setxattr("/dir-1", "ceph.quota.max_bytes", b"5", 0)
+    fd = cephfs.open(b'/dir-1/file-1', 'w', 0o755)
+    assert_raises(libcephfs.DiskQuotaExceeded, cephfs.write, fd, b"abcdeghiklmnopqrstuvwxyz", 0)
+    cephfs.close(fd)
+    cephfs.unlink(b"/dir-1/file-1")
index 673bf2977f416826a6b9cf46a29836646c2dd99c..901f33cf8ceb7cb5674f56cfdf28ab29a8f4ed42 100644 (file)
  *
  */
 
-#include "common/strtol.h"
-#include <math.h>
+#include <cmath>
 #include <string>
 #include <map>
 
+#include "common/strtol.h"
+
 #include "gtest/gtest.h"
 
 static void test_strict_strtoll(const char *str, long long expected, int base)
@@ -398,6 +399,249 @@ TEST(StrictSICast, Error) {
   }
 }
 
+
+using ceph::parse;
+using ceph::consume;
+using namespace std::literals;
+
+template<typename T>
+inline void test_parse() {
+  auto r = parse<T>("23"sv);
+  ASSERT_TRUE(r);
+  EXPECT_EQ(*r, 23);
+
+  r = parse<T>("    23"sv);
+  EXPECT_FALSE(r);
+
+  r = parse<T>("-5"sv);
+  if constexpr (std::is_signed_v<T>) {
+    ASSERT_TRUE(r);
+    EXPECT_EQ(*r, -5);
+  } else {
+    EXPECT_FALSE(r);
+  }
+
+  r = parse<T>("meow"sv);
+  EXPECT_FALSE(r);
+
+  r = parse<T>("9yards"sv);
+  EXPECT_FALSE(r);
+}
+
+TEST(Parse, Char) {
+  test_parse<char>();
+}
+
+TEST(Parse, UChar) {
+  test_parse<unsigned char>();
+}
+
+TEST(Parse, SChar) {
+  test_parse<signed char>();
+}
+
+TEST(Parse, UInt8) {
+  test_parse<std::uint8_t>();
+}
+
+TEST(Parse, Int8) {
+  test_parse<std::int8_t>();
+}
+
+TEST(Parse, UInt16) {
+  test_parse<std::uint16_t>();
+}
+
+TEST(Parse, Int16) {
+  test_parse<std::int16_t>();
+}
+
+TEST(Parse, UInt32) {
+  test_parse<std::uint32_t>();
+}
+
+TEST(Parse, Int32) {
+  test_parse<std::int32_t>();
+}
+
+TEST(Parse, UInt64) {
+  test_parse<std::uint64_t>();
+}
+
+TEST(Parse, Int64) {
+  test_parse<std::int64_t>();
+}
+
+TEST(Parse, UIntMax) {
+  test_parse<std::uintmax_t>();
+}
+
+TEST(Parse, IntMax) {
+  test_parse<std::intmax_t>();
+}
+
+TEST(Parse, UIntPtr) {
+  test_parse<std::uintptr_t>();
+}
+
+TEST(Parse, IntPtr) {
+  test_parse<std::intptr_t>();
+}
+
+TEST(Parse, UShort) {
+  test_parse<unsigned short>();
+}
+
+TEST(Parse, Short) {
+  test_parse<short>();
+}
+
+TEST(Parse, ULong) {
+  test_parse<unsigned long>();
+}
+
+TEST(Parse, Long) {
+  test_parse<long>();
+}
+
+TEST(Parse, ULongLong) {
+  test_parse<unsigned long long>();
+}
+
+TEST(Parse, LongLong) {
+  test_parse<long long>();
+}
+
+template<typename T>
+inline void test_consume() {
+  auto pos = "23"sv;
+  auto spacepos = "    23"sv;
+  auto neg = "-5"sv;
+  auto meow = "meow"sv;
+  auto trail = "9yards"sv;
+
+  auto v = pos;
+  auto r = consume<T>(v);
+  ASSERT_TRUE(r);
+  EXPECT_EQ(*r, 23);
+  EXPECT_TRUE(v.empty());
+
+  v = spacepos;
+  r = consume<T>(v);
+  EXPECT_FALSE(r);
+  EXPECT_EQ(v, spacepos);
+
+  v = neg;
+  r = consume<T>(v);
+  if constexpr (std::is_signed_v<T>) {
+    ASSERT_TRUE(r);
+    EXPECT_EQ(*r, -5);
+    EXPECT_TRUE(v.empty());
+  } else {
+    EXPECT_FALSE(r);
+    EXPECT_EQ(v, neg);
+  }
+
+  v = meow;
+  r = consume<T>(v);
+  EXPECT_FALSE(r);
+  EXPECT_EQ(v, meow);
+
+  v = trail;
+  r = consume<T>(v);
+  ASSERT_TRUE(r);
+  EXPECT_EQ(*r, 9);
+  auto w = trail;
+  w.remove_prefix(1);
+  EXPECT_EQ(v, w);
+}
+
+TEST(Consume, Char) {
+  test_consume<char>();
+}
+
+TEST(Consume, UChar) {
+  test_consume<unsigned char>();
+}
+
+TEST(Consume, SChar) {
+  test_consume<signed char>();
+}
+
+TEST(Consume, UInt8) {
+  test_consume<std::uint8_t>();
+}
+
+TEST(Consume, Int8) {
+  test_consume<std::int8_t>();
+}
+
+TEST(Consume, UInt16) {
+  test_consume<std::uint16_t>();
+}
+
+TEST(Consume, Int16) {
+  test_consume<std::int16_t>();
+}
+
+TEST(Consume, UInt32) {
+  test_consume<std::uint32_t>();
+}
+
+TEST(Consume, Int32) {
+  test_consume<std::int32_t>();
+}
+
+TEST(Consume, UInt64) {
+  test_consume<std::uint64_t>();
+}
+
+TEST(Consume, Int64) {
+  test_consume<std::int64_t>();
+}
+
+TEST(Consume, UIntMax) {
+  test_consume<std::uintmax_t>();
+}
+
+TEST(Consume, IntMax) {
+  test_consume<std::intmax_t>();
+}
+
+TEST(Consume, UIntPtr) {
+  test_consume<std::uintptr_t>();
+}
+
+TEST(Consume, IntPtr) {
+  test_consume<std::intptr_t>();
+}
+
+TEST(Consume, UShort) {
+  test_consume<unsigned short>();
+}
+
+TEST(Consume, Short) {
+  test_consume<short>();
+}
+
+TEST(Consume, ULong) {
+  test_consume<unsigned long>();
+}
+
+TEST(Consume, Long) {
+  test_consume<long>();
+}
+
+TEST(Consume, ULongLong) {
+  test_consume<unsigned long long>();
+}
+
+TEST(Consume, LongLong) {
+  test_consume<long long>();
+}
+
+
+
 /*
  * Local Variables:
  * compile-command: "cd .. ; make unittest_strtol && ./unittest_strtol"
diff --git a/ceph/src/test/test_librgw_admin_user.cc b/ceph/src/test/test_librgw_admin_user.cc
deleted file mode 100644 (file)
index 6b9df1c..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2015 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#include <string.h>
-#include "gtest/gtest.h"
-#include "common/ceph_argparse.h"
-
-#include "include/rgw/librgw_admin_user.h"
-
-#define dout_subsys ceph_subsys_rgw
-
-namespace {
-  librgw_admin_user_t rgw = nullptr;
-  std::string uid("testuser");
-  std::string display_name("testuser");
-  std::string access_key("");
-  std::string secret_key("");
-  std::string email;
-  std::string caps;
-  std::string access_str;
-  bool admin;
-  bool system_user;
-
-  struct {
-    int argc;
-    char **argv;
-  } saved_args;
-}
-
-TEST(RGWLibAdmin, INIT) {
-  int ret = librgw_admin_user_create(&rgw, saved_args.argc, saved_args.argv);
-  ASSERT_EQ(ret, 0);
-  ASSERT_NE(rgw, nullptr);
-}
-
-TEST(RGWLibAdmin, CREATE) {
-  int ret = rgw_admin_create_user(rgw, uid.c_str(), display_name.c_str(),
-                                 access_key.c_str(), secret_key.c_str(), caps.c_str(), access_str.c_str(), email.c_str(),
-                                 admin, system_user);
-  ASSERT_EQ(ret, 0);
-}
-
-TEST(RGWLibAdmin, INFO) {
-  struct rgw_user_info user_info;
-  int ret = rgw_admin_user_info(rgw, uid.c_str(), &user_info);
-  ASSERT_EQ(ret, 0);
-}
-
-TEST(RGWLibAdmin, SHUTDOWN) {
-  librgw_admin_user_shutdown(rgw);
-}
-
-int main(int argc, char *argv[])
-{
-  char *v{nullptr};
-  std::string val;
-  std::vector<const char*> args;
-
-  argv_to_vec(argc, const_cast<const char**>(argv), args);
-  env_to_vec(args);
-
-  v = getenv("AWS_ACCESS_KEY_ID");
-  if (v) {
-    access_key = v;
-  }
-
-  v = getenv("AWS_SECRET_ACCESS_KEY");
-  if (v) {
-    secret_key = v;
-  }
-
-  for (auto arg_iter = args.begin(); arg_iter != args.end();) {
-    if (ceph_argparse_witharg(args, arg_iter, &val, "--access",
-                             (char*) nullptr)) {
-      access_key = val;
-    } else if (ceph_argparse_witharg(args, arg_iter, &val, "--secret",
-                                    (char*) nullptr)) {
-      secret_key = val;
-    } else if (ceph_argparse_witharg(args, arg_iter, &val, "--uid",
-                                    (char*) nullptr)) {
-      uid = val;
-    } else {
-      ++arg_iter;
-    }
-  }
-
-  saved_args.argc = argc;
-  saved_args.argv = argv;
-
-  ::testing::InitGoogleTest(&argc, argv);
-  return RUN_ALL_TESTS();
-}
-
index f88503e6164794379985ce0d9ffd30b98553ac51..e72542fd4a0b2a3565ba7670305b35bf4baa920f 100644 (file)
@@ -194,8 +194,15 @@ int JournalScanner::scan_events()
       }
 
       objects_missing.push_back(obj_offset);
-      gap = true;
-      gap_start = read_offset;
+      if (!gap) {
+        gap_start = read_offset;
+        gap = true;
+      }
+      if (read_buf.length() > 0) {
+        read_offset += read_buf.length();
+        read_buf.clear();
+      }
+      read_offset += object_size - offset_in_obj;
       continue;
     } else {
       dout(4) << "Read 0x" << std::hex << this_object.length() << std::dec
@@ -229,7 +236,8 @@ int JournalScanner::scan_events()
         }
       } while (read_buf.length() >= sizeof(JournalStream::sentinel));
       dout(4) << "read_buf size is " << read_buf.length() << dendl;
-    } else {
+    } 
+    {
       dout(10) << "Parsing data, 0x" << std::hex << read_buf.length() << std::dec << " bytes available" << dendl;
       while(true) {
         // TODO: detect and handle legacy format journals: can do many things
index 839b4aea0502d25bea0d20be00670367d58e7049..eb323a2308cf2ba16dc32d4c6c793b1c0fbb06be 100644 (file)
@@ -28,7 +28,7 @@ MDSUtility::MDSUtility() :
   monc = new MonClient(g_ceph_context);
   messenger = Messenger::create_client_messenger(g_ceph_context, "mds");
   fsmap = new FSMap();
-  objecter = new Objecter(g_ceph_context, messenger, monc, NULL, 0, 0);
+  objecter = new Objecter(g_ceph_context, messenger, monc, NULL);
 }
 
 
index 60ba9f52fc1251927a000f2cd9c4435b84aeb26f..eeec92202ad72b338ce2c382d7989508ea2bf787 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "CacheClient.h"
 #include "common/Cond.h"
+#include "common/version.h"
 
 #define dout_context g_ceph_context
 #define dout_subsys ceph_subsys_immutable_obj_cache
@@ -376,7 +377,8 @@ namespace immutable_obj_cache {
   // TODO : re-implement this method
   int CacheClient::register_client(Context* on_finish) {
     ObjectCacheRequest* reg_req = new ObjectCacheRegData(RBDSC_REGISTER,
-                                                         m_sequence_id++);
+                                                         m_sequence_id++,
+                                                         ceph_version_to_str());
     reg_req->encode();
 
     bufferlist bl;
index b8f53d3f8a0f4b484d40d06c1259b7fc2df4f87c..1fade8f84b4b718b4fb5023e19e5290cbf33d006 100644 (file)
@@ -102,6 +102,9 @@ void CacheController::handle_request(CacheSession* session,
     case RBDSC_REGISTER: {
       // TODO(dehao): skip register and allow clients to lookup directly
 
+      auto req_reg_data = reinterpret_cast <ObjectCacheRegData*> (req);
+      session->set_client_version(req_reg_data->version);
+
       ObjectCacheRequest* reply = new ObjectCacheRegReplyData(
         RBDSC_REGISTER_REPLY, req->seq);
       session->send(reply);
@@ -112,11 +115,13 @@ void CacheController::handle_request(CacheSession* session,
       std::string cache_path;
       ObjectCacheReadData* req_read_data =
         reinterpret_cast <ObjectCacheReadData*> (req);
+      bool return_dne_path = session->client_version().empty();
       int ret = m_object_cache_store->lookup_object(
         req_read_data->pool_namespace, req_read_data->pool_id,
-        req_read_data->snap_id, req_read_data->oid, cache_path);
+        req_read_data->snap_id, req_read_data->oid, return_dne_path,
+        cache_path);
       ObjectCacheRequest* reply = nullptr;
-      if (ret != OBJ_CACHE_PROMOTED) {
+      if (ret != OBJ_CACHE_PROMOTED && ret != OBJ_CACHE_DNE) {
         reply = new ObjectCacheReadRadosData(RBDSC_READ_RADOS, req->seq);
       } else {
         reply = new ObjectCacheReadReplyData(RBDSC_READ_REPLY,
index 5bf730354ab3e6390667210611aedc41ee6efc31..d00eac4f4865f8c97bab4d53ad109dab3b2b15d0 100644 (file)
@@ -31,6 +31,14 @@ stream_protocol::socket& CacheSession::socket() {
   return m_dm_socket;
 }
 
+void CacheSession::set_client_version(const std::string &version) {
+  m_client_version = version;
+}
+
+const std::string &CacheSession::client_version() const {
+  return m_client_version;
+}
+
 void CacheSession::close() {
   if (m_dm_socket.is_open()) {
     boost::system::error_code close_ec;
index d530b529c8c22008d5aa746a05833bb55d6406f9..b2890992f1a0a25117d72c778c5be62ab67cf6be 100644 (file)
@@ -36,11 +36,16 @@ class CacheSession : public std::enable_shared_from_this<CacheSession> {
   void fault(const boost::system::error_code& ec);
   void send(ObjectCacheRequest* msg);
 
+  void set_client_version(const std::string &version);
+  const std::string &client_version() const;
+
  private:
   stream_protocol::socket m_dm_socket;
   ProcessMsg m_server_process_msg;
   CephContext* m_cct;
 
+  std::string m_client_version;
+
   bufferptr m_bp_header;
 };
 
index ece4127df850b7159290389f2ea30e937438599e..a0b2b27ce1629af4f2ce5852a106b8b870a2b4ba 100644 (file)
@@ -142,33 +142,34 @@ int ObjectCacheStore::handle_promote_callback(int ret, bufferlist* read_buf,
     return ret;
   }
 
+  auto state = OBJ_CACHE_PROMOTED;
   if (ret == -ENOENT) {
     // object is empty
+    state = OBJ_CACHE_DNE;
     ret = 0;
-  }
-
-  std::string cache_file_path = get_cache_file_path(cache_file_name, true);
-
-  if (cache_file_path == "") {
-    lderr(m_cct) << "fail to write cache file" << dendl;
-    m_policy->update_status(cache_file_name, OBJ_CACHE_NONE);
-    delete read_buf;
-    return -ENOSPC;
-  }
+  } else {
+    std::string cache_file_path = get_cache_file_path(cache_file_name, true);
+    if (cache_file_path == "") {
+      lderr(m_cct) << "fail to write cache file" << dendl;
+      m_policy->update_status(cache_file_name, OBJ_CACHE_NONE);
+      delete read_buf;
+      return -ENOSPC;
+    }
 
-  ret = read_buf->write_file(cache_file_path.c_str());
-  if (ret < 0) {
-    lderr(m_cct) << "fail to write cache file" << dendl;
+    ret = read_buf->write_file(cache_file_path.c_str());
+    if (ret < 0) {
+      lderr(m_cct) << "fail to write cache file" << dendl;
 
-    m_policy->update_status(cache_file_name, OBJ_CACHE_NONE);
-    delete read_buf;
-    return ret;
+      m_policy->update_status(cache_file_name, OBJ_CACHE_NONE);
+      delete read_buf;
+      return ret;
+    }
   }
 
   // update metadata
   ceph_assert(OBJ_CACHE_SKIP == m_policy->get_status(cache_file_name));
-  m_policy->update_status(cache_file_name, OBJ_CACHE_PROMOTED, read_buf->length());
-  ceph_assert(OBJ_CACHE_PROMOTED == m_policy->get_status(cache_file_name));
+  m_policy->update_status(cache_file_name, state, read_buf->length());
+  ceph_assert(state == m_policy->get_status(cache_file_name));
 
   delete read_buf;
 
@@ -180,6 +181,7 @@ int ObjectCacheStore::handle_promote_callback(int ret, bufferlist* read_buf,
 int ObjectCacheStore::lookup_object(std::string pool_nspace,
                                     uint64_t pool_id, uint64_t snap_id,
                                     std::string object_name,
+                                    bool return_dne_path,
                                     std::string& target_cache_file_path) {
   ldout(m_cct, 20) << "object name = " << object_name
                    << " in pool ID : " << pool_id << dendl;
@@ -200,6 +202,11 @@ int ObjectCacheStore::lookup_object(std::string pool_nspace,
     case OBJ_CACHE_PROMOTED:
       target_cache_file_path = get_cache_file_path(cache_file_name);
       return ret;
+    case OBJ_CACHE_DNE:
+      if (return_dne_path) {
+        target_cache_file_path = get_cache_file_path(cache_file_name);
+      }
+      return ret;
     case OBJ_CACHE_SKIP:
       return ret;
     default:
index eba003412e0cd3c99f61abd7fa3c86ce63ddfae3..270a93be452203d919b9b78e9387d3724d18078c 100644 (file)
@@ -31,6 +31,7 @@ class ObjectCacheStore {
   int lookup_object(std::string pool_nspace,
                     uint64_t pool_id, uint64_t snap_id,
                     std::string object_name,
+                    bool return_dne_path,
                     std::string& target_cache_file_path);
 
  private:
index 3e3a0ef8787087c73e2079f557672670520b5972..7924a8919de67bd75cba4ed7edf1f04775460632 100644 (file)
@@ -14,6 +14,7 @@ typedef enum {
   OBJ_CACHE_NONE = 0,
   OBJ_CACHE_PROMOTED,
   OBJ_CACHE_SKIP,
+  OBJ_CACHE_DNE,
 } cache_status_t;
 
 class Policy {
index b24ec7d675fa50253e958080af7e2c2e2efcd7a4..7dbd9d34bd9cfbb8a212debdb63505301e60fc3b 100644 (file)
@@ -74,7 +74,7 @@ cache_status_t SimplePolicy::lookup_object(std::string file_name) {
 
   Entry* entry = entry_it->second;
 
-  if (entry->status == OBJ_CACHE_PROMOTED) {
+  if (entry->status == OBJ_CACHE_PROMOTED || entry->status == OBJ_CACHE_DNE) {
     // bump pos in lru on hit
     m_promoted_lru.lru_touch(entry);
   }
@@ -106,7 +106,8 @@ void SimplePolicy::update_status(std::string file_name,
   }
 
   // promoting done
-  if (entry->status == OBJ_CACHE_SKIP && new_status== OBJ_CACHE_PROMOTED) {
+  if (entry->status == OBJ_CACHE_SKIP && (new_status== OBJ_CACHE_PROMOTED ||
+                                          new_status== OBJ_CACHE_DNE)) {
     m_promoted_lru.lru_insert_top(entry);
     entry->status = new_status;
     entry->size = size;
@@ -128,7 +129,8 @@ void SimplePolicy::update_status(std::string file_name,
   }
 
   // to evict
-  if (entry->status == OBJ_CACHE_PROMOTED && new_status== OBJ_CACHE_NONE) {
+  if ((entry->status == OBJ_CACHE_PROMOTED || entry->status == OBJ_CACHE_DNE) &&
+      new_status== OBJ_CACHE_NONE) {
     // mark this entry as free
     uint64_t size = entry->size;
     entry->file_name = "";
index a0a4c6352aa5382cf729f34d46948cbd7aad0419..e65e94bee1ed321c3493b1ef0d7a7525b233f345 100644 (file)
@@ -40,12 +40,24 @@ void ObjectCacheRequest::decode(bufferlist& bl) {
 ObjectCacheRegData::ObjectCacheRegData() {}
 ObjectCacheRegData::ObjectCacheRegData(uint16_t t, uint64_t s)
   : ObjectCacheRequest(t, s) {}
+ObjectCacheRegData::ObjectCacheRegData(uint16_t t, uint64_t s,
+                                       const std::string &version)
+  : ObjectCacheRequest(t, s),
+    version(version) {
+}
 
 ObjectCacheRegData::~ObjectCacheRegData() {}
 
-void ObjectCacheRegData::encode_payload() {}
+void ObjectCacheRegData::encode_payload() {
+  ceph::encode(version, payload);
+}
 
-void ObjectCacheRegData::decode_payload(bufferlist::const_iterator i) {}
+void ObjectCacheRegData::decode_payload(bufferlist::const_iterator i) {
+  if (i.end()) {
+    return;
+  }
+  ceph::decode(version, i);
+}
 
 ObjectCacheRegReplyData::ObjectCacheRegReplyData() {}
 ObjectCacheRegReplyData::ObjectCacheRegReplyData(uint16_t t, uint64_t s)
index 7967d16564f056738010f6b16c0fa8fdc5ab8505..5fab1ec4897ba9aeed34c8aa48f116b7f23c11a9 100644 (file)
@@ -57,13 +57,15 @@ class ObjectCacheRequest {
 
 class ObjectCacheRegData : public ObjectCacheRequest {
  public:
+  std::string version;
   ObjectCacheRegData();
+  ObjectCacheRegData(uint16_t t, uint64_t s, const std::string &version);
   ObjectCacheRegData(uint16_t t, uint64_t s);
   ~ObjectCacheRegData() override;
   void encode_payload() override;
   void decode_payload(bufferlist::const_iterator bl) override;
   uint16_t get_request_type() override { return RBDSC_REGISTER; }
-  bool payload_empty() override { return true; }
+  bool payload_empty() override { return false; }
 };
 
 class ObjectCacheRegReplyData : public ObjectCacheRequest {
index 29977f461f5bb631609633bddea6eef3ba115ab6..55b0d087af7c20b474f91f6f032017de8f3bf0e5 100644 (file)
@@ -14,7 +14,7 @@
 ceph::immutable_obj_cache::CacheController *cachectl = nullptr;
 
 void usage() {
-  std::cout << "usage: cache controller [options...]" << std::endl;
+  std::cout << "usage: ceph-immutable-object-cache [options...]" << std::endl;
   std::cout << "options:\n";
   std::cout << "  -m monaddress[:port]      connect to specified monitor\n";
   std::cout << "  --keyring=<path>          path to keyring for local "
index fbbcddafc6a9a4dbb01605175bd670f09942b4de..887086e55eb562b59006540702476299b20e52d9 100644 (file)
@@ -44,6 +44,7 @@ void usage()
   cout << "   --mark-out <osdid>      mark an osd as out (but do not persist)" << std::endl;
   cout << "   --with-default-pool     include default pool when creating map" << std::endl;
   cout << "   --clear-temp            clear pg_temp and primary_temp" << std::endl;
+  cout << "   --clean-temps           clean pg_temps" << std::endl;
   cout << "   --test-random           do random placements" << std::endl;
   cout << "   --test-map-pg <pgid>    map a pgid to osds" << std::endl;
   cout << "   --test-map-object <objectname> [--pool <poolid>] map an object to osds"
@@ -136,6 +137,7 @@ int main(int argc, const char **argv)
   bool mark_up_in = false;
   int marked_out = -1;
   bool clear_temp = false;
+  bool clean_temps = false;
   bool test_map_pgs = false;
   bool test_map_pgs_dump = false;
   bool test_random = false;
@@ -201,6 +203,8 @@ int main(int argc, const char **argv)
       marked_out = std::stoi(val);
     } else if (ceph_argparse_flag(args, i, "--clear-temp", (char*)NULL)) {
       clear_temp = true;
+    } else if (ceph_argparse_flag(args, i, "--clean-temps", (char*)NULL)) {
+      clean_temps = true;
     } else if (ceph_argparse_flag(args, i, "--test-map-pgs", (char*)NULL)) {
       test_map_pgs = true;
     } else if (ceph_argparse_flag(args, i, "--test-map-pgs-dump", (char*)NULL)) {
@@ -357,6 +361,14 @@ int main(int argc, const char **argv)
     cout << "clearing pg/primary temp" << std::endl;
     osdmap.clear_temp();
   }
+  if (clean_temps) {
+    cout << "cleaning pg temps" << std::endl;
+    OSDMap::Incremental pending_inc(osdmap.get_epoch()+1);
+    OSDMap tmpmap;
+    tmpmap.deepish_copy_from(osdmap);
+    tmpmap.apply_incremental(pending_inc);
+    OSDMap::clean_temps(g_ceph_context, osdmap, tmpmap, &pending_inc);
+  }
   int upmap_fd = STDOUT_FILENO;
   if (upmap || upmap_cleanup) {
     if (upmap_file != "-") {
index 88b1d89852e4bfb14b8afef4253e3ba2cfd51e00..909f0af17c4393fa7dd9022c26228a79dd75a54a 100644 (file)
@@ -2390,25 +2390,29 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
       return 1;
     }
 
-    if (wildcard)
+    if (wildcard) {
       io_ctx.set_namespace(all_nspaces);
+    }
     bool use_stdout = (!output && (nargs.size() < 2 || (strcmp(nargs[1], "-") == 0)));
     if (!use_stdout && !output) {
       cerr << "Please use --output to specify the output file name" << std::endl;
       return 1;
     }
+
     ostream *outstream;
-    if(use_stdout)
+    if (use_stdout) {
       outstream = &cout;
-    else
+    } else {
       outstream = new ofstream(output);
+    }
 
     {
-      if (formatter)
+      if (formatter) {
         formatter->open_array_section("objects");
+      }
       try {
        librados::NObjectIterator i = pgid ? io_ctx.nobjects_begin(pgid->ps()) : io_ctx.nobjects_begin();
-       librados::NObjectIterator i_end = io_ctx.nobjects_end();
+       const librados::NObjectIterator i_end = io_ctx.nobjects_end();
        for (; i != i_end; ++i) {
 #ifdef WITH_LIBRADOSSTRIPER
          if (use_striper) {
@@ -2417,33 +2421,42 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
            // each, without its suffix '.000...000'
            size_t l = i->get_oid().length();
            if (l <= 17 ||
-               (0 != i->get_oid().compare(l-17, 17,".0000000000000000"))) continue;
+               (0 != i->get_oid().compare(l-17, 17,".0000000000000000"))) {
+             continue;
+           }
          }
 #endif // WITH_LIBRADOSSTRIPER
           if (pgid) {
             uint32_t ps;
-            if (io_ctx.get_object_pg_hash_position2(i->get_oid(), &ps) || pgid->ps() != ps)
+            if (io_ctx.get_object_pg_hash_position2(i->get_oid(), &ps) || pgid->ps() != ps) {
               break;
+           }
           }
          if (!formatter) {
            // Only include namespace in output when wildcard specified
-           if (wildcard)
+           if (wildcard) {
              *outstream << i->get_nspace() << "\t";
-      
-        *outstream << detail::get_oid(i, use_striper);
-
-           if (i->get_locator().size())
+           }
+           *outstream << detail::get_oid(i, use_striper);
+           if (i->get_locator().size()) {
              *outstream << "\t" << i->get_locator();
+           }
            *outstream << std::endl;
          } else {
            formatter->open_object_section("object");
            formatter->dump_string("namespace", i->get_nspace());
 
-        detail::dump_name(formatter.get(), i, use_striper);
+           detail::dump_name(formatter.get(), i, use_striper);
 
-           if (i->get_locator().size())
+           if (i->get_locator().size()) {
              formatter->dump_string("locator", i->get_locator());
+           }
            formatter->close_section(); //object
+
+           constexpr int TARGET_BYTES_PER_FLUSH = 4096;
+           if (formatter->get_len() >= TARGET_BYTES_PER_FLUSH) {
+             formatter->flush(*outstream);
+           }
          }
        }
       }
@@ -2455,12 +2468,14 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
     if (formatter) {
       formatter->close_section(); //objects
       formatter->flush(*outstream);
-      if (pretty_format)
+      if (pretty_format) {
        *outstream << std::endl;
+      }
       formatter->flush(*outstream);
     }
-    if (!stdout)
+    if (!stdout) {
       delete outstream;
+    }
   }
   else if (strcmp(nargs[0], "mapext") == 0) {
     if (!pool_name || nargs.size() < 2) {
index eb57bfa1f37eb37f59a876f1139e956dfc61b9dd..37e88ce5fea45f863252fab8172d9531a518c466 100644 (file)
@@ -188,6 +188,8 @@ static int parse_map_options(const std::string &options_string)
       if (put_map_option_value("compression_hint", value_char,
                                map_option_compression_hint_cb))
         return -EINVAL;
+    } else if (!strcmp(this_char, "udev") || !strcmp(this_char, "noudev")) {
+      put_map_option("udev", this_char);
     } else {
       std::cerr << "rbd: unknown map option '" << this_char << "'" << std::endl;
       return -EINVAL;
@@ -214,6 +216,8 @@ static int parse_unmap_options(const std::string &options_string)
 
     if (!strcmp(this_char, "force")) {
       put_map_option("force", this_char);
+    } else if (!strcmp(this_char, "udev") || !strcmp(this_char, "noudev")) {
+      put_map_option("udev", this_char);
     } else {
       std::cerr << "rbd: unknown unmap option '" << this_char << "'" << std::endl;
       return -EINVAL;
@@ -228,7 +232,7 @@ static int do_kernel_list(Formatter *f) {
   struct krbd_ctx *krbd;
   int r;
 
-  r = krbd_create_from_context(g_ceph_context, &krbd);
+  r = krbd_create_from_context(g_ceph_context, 0, &krbd);
   if (r < 0)
     return r;
 
@@ -352,20 +356,21 @@ static int do_kernel_map(const char *poolname, const char *nspace_name,
 #if defined(WITH_KRBD)
   struct krbd_ctx *krbd;
   std::ostringstream oss;
+  uint32_t flags = 0;
   char *devnode;
   int r;
 
-  r = krbd_create_from_context(g_ceph_context, &krbd);
-  if (r < 0)
-    return r;
-
-  for (std::map<std::string, std::string>::iterator it = map_options.begin();
-       it != map_options.end(); ) {
+  for (auto it = map_options.begin(); it != map_options.end(); ) {
     // for compatibility with < 3.7 kernels, assume that rw is on by
     // default and omit it even if it was specified by the user
     // (see ceph.git commit fb0f1986449b)
     if (it->first == "rw" && it->second == "rw") {
       it = map_options.erase(it);
+    } else if (it->first == "udev") {
+      if (it->second == "noudev") {
+        flags |= KRBD_CTX_F_NOUDEV;
+      }
+      it = map_options.erase(it);
     } else {
       if (it != map_options.begin())
         oss << ",";
@@ -374,6 +379,10 @@ static int do_kernel_map(const char *poolname, const char *nspace_name,
     }
   }
 
+  r = krbd_create_from_context(g_ceph_context, flags, &krbd);
+  if (r < 0)
+    return r;
+
   r = krbd_is_mapped(krbd, poolname, nspace_name, imgname, snapname, &devnode);
   if (r < 0) {
     std::cerr << "rbd: warning: can't get image map information: "
@@ -410,18 +419,27 @@ static int do_kernel_unmap(const char *dev, const char *poolname,
 #if defined(WITH_KRBD)
   struct krbd_ctx *krbd;
   std::ostringstream oss;
+  uint32_t flags = 0;
   int r;
 
-  r = krbd_create_from_context(g_ceph_context, &krbd);
+  for (auto it = map_options.begin(); it != map_options.end(); ) {
+    if (it->first == "udev") {
+      if (it->second == "noudev") {
+        flags |= KRBD_CTX_F_NOUDEV;
+      }
+      it = map_options.erase(it);
+    } else {
+      if (it != map_options.begin())
+        oss << ",";
+      oss << it->second;
+      ++it;
+    }
+  }
+
+  r = krbd_create_from_context(g_ceph_context, flags, &krbd);
   if (r < 0)
     return r;
 
-  for (auto it = map_options.cbegin(); it != map_options.cend(); ++it) {
-    if (it != map_options.cbegin())
-      oss << ",";
-    oss << it->second;
-  }
-
   if (dev)
     r = krbd_unmap(krbd, dev, oss.str().c_str());
   else
@@ -469,13 +487,6 @@ int execute_map(const po::variables_map &vm,
     return r;
   }
 
-  if (vm["read-only"].as<bool>()) {
-    put_map_option("rw", "ro");
-  }
-  if (vm["exclusive"].as<bool>()) {
-    put_map_option("exclusive", "exclusive");
-  }
-
   // parse default options first so they can be overwritten by cli options
   r = parse_map_options(
       g_conf().get_val<std::string>("rbd_default_map_options"));
@@ -494,6 +505,16 @@ int execute_map(const po::variables_map &vm,
     }
   }
 
+  // parse options common to all device types after parsing krbd-specific
+  // options so that common options win (in particular "-o rw --read-only"
+  // should result in read-only mapping)
+  if (vm["read-only"].as<bool>()) {
+    put_map_option("rw", "ro");
+  }
+  if (vm["exclusive"].as<bool>()) {
+    put_map_option("exclusive", "exclusive");
+  }
+
   utils::init_context();
 
   r = do_kernel_map(pool_name.c_str(), nspace_name.c_str(), image_name.c_str(),
index 603e0f0f014eca23f962f6c9f2b11f804a80a4d8..99902c72be81ecfd09a2df4777995aff096e71d8 100644 (file)
@@ -818,8 +818,7 @@ int get_mirror_image_status(
 void get_peer_bootstrap_create_arguments(po::options_description *positional,
                                          po::options_description *options) {
   at::add_pool_options(positional, options, false);
-  options->add_options()
-    (SITE_NAME.c_str(), po::value<std::string>(), "local site name");
+  add_site_name_optional(options);
 }
 
 int execute_peer_bootstrap_create(
@@ -871,8 +870,7 @@ int execute_peer_bootstrap_create(
 void get_peer_bootstrap_import_arguments(po::options_description *positional,
                                          po::options_description *options) {
   at::add_pool_options(positional, options, false);
-  options->add_options()
-    (SITE_NAME.c_str(), po::value<std::string>(), "local site name");
+  add_site_name_optional(options);
   positional->add_options()
     ("token-path", po::value<std::string>(),
      "bootstrap token file (or '-' for stdin)");
index 75afdd7743117558a82457fbc8598e8cdc1b3b0b..0a599e7f0e04d1f8bb714165554b045c2e816d4c 100644 (file)
@@ -79,6 +79,9 @@ static int do_show_status(librados::IoCtx& io_ctx, const std::string &image_name
       case RBD_IMAGE_MIGRATION_STATE_EXECUTED:
         migration_state = "executed";
         break;
+      case RBD_IMAGE_MIGRATION_STATE_ABORTING:
+        migration_state = "aborting";
+        break;
       default:
         migration_state = "unknown";
       }
index 359ca95d5377204a443e73ae97697c3b21e17bbe..6d8a8fc04155dc66f30ea9ae4ab5252f31bbb342 100644 (file)
@@ -178,10 +178,12 @@ void PoolWatcher<I>::handle_register_watcher(int r) {
     std::swap(on_init_finish, m_on_init_finish);
   } else if (r == -ENOENT) {
     dout(5) << "mirroring directory does not exist" << dendl;
-    schedule_refresh_images(30);
+    {
+      std::lock_guard locker{m_lock};
+      std::swap(on_init_finish, m_on_init_finish);
+    }
 
-    std::lock_guard locker{m_lock};
-    std::swap(on_init_finish, m_on_init_finish);
+    schedule_refresh_images(30);
   } else {
     derr << "unexpected error registering mirroring directory watch: "
          << cpp_strerror(r) << dendl;
index 77d8e82e29979ec64d76708641105fa90c9d4483..a2a911f40a1d1524a8c92dd5367848df93f5b43c 100644 (file)
@@ -1408,8 +1408,8 @@ static bool find_mapped_dev_by_spec(Config *cfg) {
   Config c;
   NBDListIterator it;
   while (it.get(&pid, &c)) {
-    if (c.poolname == cfg->poolname && c.imgname == cfg->imgname &&
-        c.snapname == cfg->snapname) {
+    if (c.poolname == cfg->poolname && c.nsname == cfg->nsname &&
+        c.imgname == cfg->imgname && c.snapname == cfg->snapname) {
       *cfg = c;
       return true;
     }
index bbff220b128231c7e807c117177fffa3cfab6ff9..58deb58d0705643a8f46be53eb488e7c1862e2ba 100755 (executable)
@@ -1357,7 +1357,7 @@ do
     [ $fs -eq $CEPH_NUM_FS ] && break
     fs=$(($fs + 1))
     if [ "$CEPH_MAX_MDS" -gt 1 ]; then
-        ceph_adm fs set "cephfs_${name}" max_mds "$CEPH_MAX_MDS"
+        ceph_adm fs set "${name}" max_mds "$CEPH_MAX_MDS"
     fi
 done
 
diff --git a/ceph/sudoers.d/cephadm b/ceph/sudoers.d/cephadm
deleted file mode 100644 (file)
index 4063b3e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# allow cephadm user to sudo cephadm
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * ls
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * unit *
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * shell *
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * deploy *
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * ceph-volume *
-cephadm ALL=NOPASSWD: /usr/bin/cephadm --image * rm-daemon *
index 70f5cb6e16b63759542916766dc14ade274b5ab9..c31fdfa8dce7a2ae5ccd110131e2498e479ff37f 100644 (file)
@@ -2,5 +2,6 @@
 Description=ceph target allowing to start/stop all ceph-fuse@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+
 [Install]
 WantedBy=remote-fs.target ceph.target
index ed512953b0b0a0ee9da9fcb4fbc18674157107d3..f041bad6013b82b1e3ed23e3bc474d4e4ce453d1 100644 (file)
@@ -2,5 +2,6 @@
 Description=ceph target allowing to start/stop all ceph-immutable-object-cache@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 238f3ab90c73e5421a409e62773141f6d148e674..1101f21f699cdbea2edcc6f7480a5dbe59a35a92 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-mds@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 39a2e63105b0625725b542a3457b656fd47340c4..e47738a274a6733b9f37f426add1b84595e9c087 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph metadata server daemon
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-mds.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-mds.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mds.target
 
 [Service]
 LimitNOFILE=1048576
index f25e494b1d382cc2af0f638a70c48e7cc10b9b3a..288888b0d8d5196f1b1cd6254628fe811221a97d 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-mgr@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index c98f6378b9725169a4c6d580ae984a49e7b12f2f..0ff9db237a443893ca29bddfc5ac20861521d212 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph cluster manager daemon
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-mgr.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-mgr.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mgr.target
 
 [Service]
 LimitNOFILE=1048576
@@ -12,11 +13,9 @@ Environment=CLUSTER=ceph
 ExecStart=/usr/bin/ceph-mgr -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
 ExecReload=/bin/kill -HUP $MAINPID
 LockPersonality=true
-
 # We need to disable this protection as some python libraries generate
 # dynamic code, like python-cffi, and require mmap calls to succeed
 MemoryDenyWriteExecute=false
-
 NoNewPrivileges=true
 PrivateDevices=yes
 ProtectControlGroups=true
index 097c83ba3be8322ba92e200d1efdffa228ac9369..4325bac7afeb6102fcee7cb1dd49aae73d173972 100644 (file)
@@ -2,5 +2,7 @@
 Description=ceph target allowing to start/stop all ceph-mon@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+Wants=ceph.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index c95fcabb26d6c6f87580cfa651543adae6cef208..d3121d59dcf06f8b5c697a0a4b173c9a37676917 100644 (file)
@@ -1,14 +1,13 @@
 [Unit]
 Description=Ceph cluster monitor daemon
-
+PartOf=ceph-mon.target
 # According to:
 #   http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
 # these can be removed once ceph-mon will dynamically change network
 # configuration.
 After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
-
-PartOf=ceph-mon.target
+Before=remote-fs-pre.target ceph-mon.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mon.target
 
 [Service]
 LimitNOFILE=1048576
index 7f677f54d5ece2bb256369555bbc2df05b76e391..e4d1b9f07fc6ae5ac2ba741201c73de3fc575b31 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-osd@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index c8889da1df32dc328fad78aeeae13143b53517b1..130c7c91ce3139876383e2267c8ca7698cdbcead 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph object storage daemon osd.%i
-After=network-online.target local-fs.target time-sync.target ceph-mon.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-osd.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-osd.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-osd.target
 
 [Service]
 LimitNOFILE=1048576
index 1799e29e84d7450afc3547c04e9d1dd9caf7cb2c..8ea707a0bbdf6f65cebe31707cb979a5c6c36f56 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-radosgw@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 7e3ddf6c04731ab1a20c410711c526ff2bbcc8a7..dee501b4771c7b780bc877f8a01273493d22c15b 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph rados gateway
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-radosgw.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-radosgw.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-radosgw.target
 
 [Service]
 LimitNOFILE=1048576
index 43e9a4c816478244154b55729d1e9bbd65b9582f..57ea09f1dc510901eb81dede8be13cfed6563bea 100644 (file)
@@ -2,5 +2,6 @@
 Description=ceph target allowing to start/stop all ceph-rbd-mirror@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 60734baff689d6603c520e14d11ed224b0ef31e7..67a982c5b446abe17832e5aa24466252dec0880c 100644 (file)
@@ -1,4 +1,5 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph*@.service instances at once
+
 [Install]
 WantedBy=multi-user.target
index 4757ee6ccb29de1d892b24c26762265866ac5c5b..6644508cf0dea9ffb617bcf55e37d9315109926a 100644 (file)
@@ -1,9 +1,8 @@
 [Unit]
 Description=Map RBD devices
-
-After=network-online.target
+After=network-online.target ceph.target
 Before=remote-fs-pre.target
-Wants=network-online.target remote-fs-pre.target
+Wants=network-online.target remote-fs-pre.target ceph.target
 
 [Service]
 EnvironmentFile=-@SYSTEMD_ENV_FILE@
index 86aa13472563860567cfb7b0c321430c7064c386..aab6fa9f34e988d94d931d0082290859d620a77b 100644 (file)
@@ -1,5 +1,5 @@
-KERNEL=="rbd[0-9]*", ENV{DEVTYPE}=="disk", PROGRAM="/usr/bin/ceph-rbdnamer %k", SYMLINK+="rbd/%c{1}/%c{2}"
-KERNEL=="rbd[0-9]*", ENV{DEVTYPE}=="partition", PROGRAM="/usr/bin/ceph-rbdnamer %k", SYMLINK+="rbd/%c{1}/%c{2}-part%n"
+KERNEL=="rbd[0-9]*", ENV{DEVTYPE}=="disk", PROGRAM="/usr/bin/ceph-rbdnamer %k", SYMLINK+="rbd/%c"
+KERNEL=="rbd[0-9]*", ENV{DEVTYPE}=="partition", PROGRAM="/usr/bin/ceph-rbdnamer %k", SYMLINK+="rbd/%c-part%n"
 
 # This is a placeholder, uncomment and edit as necessary
 #KERNEL=="rbd[0-9]*", ENV{DEVTYPE}=="disk", ACTION=="add|change", ATTR{bdi/read_ahead_kb}="128"